diff --git a/grab.txt b/grab.txt index 6e3e5000..9a55cceb 100644 --- a/grab.txt +++ b/grab.txt @@ -1 +1 @@ -{"herald":41,"grandma":"Patreona|Janice|Gabrielle|Grandma McGrandmaface|Charlie|\"egg\" Sr.|Jet-dayo|Natsuki|Ivy|Rose|Babayaga|Grandma #42|SneakySquid|Swad Plan|Meep Moop|Psychedelic Rapper Andrew JD|Telos|Moondoge|Lily Bowen|Mrs PoopyButthole|Mrs Sugai Kirin|Survivor of the Stale|Betty Ann Niemi|Tjien Nio|The First Baker|Mamichette|dQw4w9WgXcQ|Carmelina Calabrese|The GrandNut|La mere Michel|Aune Mummo|Jeff Junior|Her?|Rydh|Euphegenia Doubtfire|Bear|How did you find me, JUNESUK?|Ahtelo|Steve...?|Fanny|DAF Pvnk - Mother of trucks|Koisuru Fortune Grandma|Lieselotte|Izual Rebirth|Cosma-Tanti|Starco|Knitting Slave|Forgotten Abbey|Granny Rags|Mrs. Fizzwidget|Nakamoto|Zan Tart-izanne|The Roach Queen|Khookiesi, Grandmother of Dragonflights|Hey guys, Dexterfan99 here|Aryll|Ms. Chievous|Don't Stop Me Now|Dauna|Gerry|Erina Pendleton-Joestar|Stacy's Grandma|Benyboy|Rosie Beestinger|Tesco employee #65|Oda|Grandma Jones|Dan|Krieg|Chris|Kamilla|Tandy|Elisabeth|MinionMemer|Eanydo Erdman|Cookieatron4000|TechhX|Turtlenator|Carmelina|Shiny Blue Grandma|Anne|Penka|\"Hey guys, it's Nicole\"|Cora|Freya28|Kiwibajs|EEEEEE|Ms. Denis Gur Arie|Idling Vasha|?????|Tammie|Grandma Kara|Sanda Reiss|Alex|Mirle|Audrey|Ittle Dew|You're Killing Me Smols|Baker? I hardly know her!|A Duplicate Grandma|Betty Margaret Davis|Chlorophyte Grandma|Felpinhazinha|Satan's grandmother|Ruby Rose|Miyori Grandma|Geuser|Anneliese|Pielak|Swamper|Pikachi|Grackitz|Deborah Wright|BUT IT WAS ME, DIO!|Barbara|SERAS FAMO!!!|Audrey Porter|Benny Zhy|Doctergreen|Kage|Jarvis Fishwick|Elder Pledge 666x in a row...|Tell Cersei, it was me.|Kimahri|Henrietta Gertrude|Tyler Liddick|noisypineapples|Linda-Bea Dolvoy|DevilishWarrior|Exterminator|Matthue Loose|Caden|moist butterscotch lips|Alireah|Fey Yoshida|Aviators|Ashlee <3|He Had Boxing Gloves On|Falling Collin|Error 404: Name not Found|Groz|Granny Jonathan|Hanna Highmark|Nonmoving Osmond|The Worm Which Waits|Lurking Tealeaf|Ruby Wrinkle|Her|\"Eggy Grandma\"|Cookie maker 100|Addison Bennett|Nasus|Only 30 characters, huh? Fine.|Matt Was Here|ScartTheWaz|Tanyac Crimson|Ume Ito|VenMissa|Velma Francis|amdnarG|Leota Marie|Nikola|Grandmommy Celestine|Annuziatta|hosh...|E|Joe Grandmomma|Granny Grearest|Vivian|Vovó Dal|Baker of Steak Cookies|Aku daikan|SkeletonJoke|David loves Rachel! <3|Polar|Loremaster Rawlins|lickin my cookie|Fmaily Gyu funy momens #420|Ms. Cppkies|WillStreet|Ian's Mom|Grandma Divah|Betty BeardPuller|Mamie Cobol|200rassberris|ipm1234|Galadion|Olive Gardenia|Megan I. McIntosh|Lady Sweets|Rivne|Autosuffisant|BoShek|Brooke Chumbers|Cthulhu|ɐɯpuɐɹפ|binbinuser|Amma Jóna|the book was empty|Berit|DRIFTER1117|Yackemflam|Help me|YeOl'GrammityGram|Mason W|Peggy Hattenfels|majik|latte|amogus|Samuel Robertson|Anneliese Albina Emma|Barack Obama|Gramma Margaret|Tomato Pie|Tobi Kummerer|Ms Shelley|Harlow Diggs|Jaema|Claudia|Lukexzr's Grandma|Grandma Chara|I love my cookies"} \ No newline at end of file +{"herald":41,"grandma":"Patreona|Janice|Gabrielle|Grandma McGrandmaface|Charlie|\"egg\" Sr.|Jet-dayo|Natsuki|Ivy|Rose|Babayaga|Grandma #42|SneakySquid|Swad Plan|Meep Moop|Psychedelic Rapper Andrew JD|Telos|Moondoge|Lily Bowen|Mrs PoopyButthole|Mrs Sugai Kirin|Survivor of the Stale|Betty Ann Niemi|Tjien Nio|The First Baker|Mamichette|dQw4w9WgXcQ|Carmelina Calabrese|The GrandNut|La mere Michel|Aune Mummo|Jeff Junior|Her?|Rydh|Euphegenia Doubtfire|Bear|How did you find me, JUNESUK?|Ahtelo|Steve...?|Fanny|DAF Pvnk - Mother of trucks|Koisuru Fortune Grandma|Lieselotte|Izual Rebirth|Cosma-Tanti|Starco|Forgotten Abbey|Granny Rags|Mrs. Fizzwidget|Nakamoto|Zan Tart-izanne|The Roach Queen|Khookiesi, Grandmother of Dragonflights|Hey guys, Dexterfan99 here|Aryll|Ms. Chievous|Don't Stop Me Now|Dauna|Gerry|Erina Pendleton-Joestar|Stacy's Grandma|Benyboy|Rosie Beestinger|Tesco employee #65|Oda|Grandma Jones|Dan|Krieg|Chris|Kamilla|Tandy|Elisabeth|MinionMemer|Eanydo Erdman|Cookieatron4000|TechhX|Turtlenator|Carmelina|Shiny Blue Grandma|Anne|Penka|\"Hey guys, it's Nicole\"|Cora|Freya28|Kiwibajs|EEEEEE|Ms. Denis Gur Arie|Idling Vasha|?????|Tammie|Grandma Kara|Sanda Reiss|Alex|Mirle|Audrey|Ittle Dew|You're Killing Me Smols|Baker? I hardly know her!|A Duplicate Grandma|Betty Margaret Davis|Chlorophyte Grandma|Felpinhazinha|Satan's grandmother|Ruby Rose|Miyori Grandma|Geuser|Anneliese|Pielak|Swamper|Pikachi|Grackitz|Deborah Wright|BUT IT WAS ME, DIO!|Barbara|SERAS FAMO!!!|Audrey Porter|Benny Zhy|Doctergreen|Kage|Jarvis Fishwick|Elder Pledge 666x in a row...|Tell Cersei, it was me.|Kimahri|Henrietta Gertrude|Tyler Liddick|noisypineapples|Linda-Bea Dolvoy|DevilishWarrior|Exterminator|Matthue Loose|Caden|moist butterscotch lips|Alireah|Fey Yoshida|Aviators|Ashlee <3|He Had Boxing Gloves On|Falling Collin|Error 404: Name not Found|Groz|Granny Jonathan|Hanna Highmark|Nonmoving Osmond|The Worm Which Waits|Lurking Tealeaf|Ruby Wrinkle|Her|\"Eggy Grandma\"|Cookie maker 100|Addison Bennett|Nasus|Only 30 characters, huh? Fine.|Matt Was Here|ScartTheWaz|Tanyac Crimson|Ume Ito|VenMissa|Velma Francis|amdnarG|Leota Marie|Nikola|Grandmommy Celestine|Annuziatta|hosh...|E|Joe Grandmomma|Granny Grearest|Vivian|Vovó Dal|Baker of Steak Cookies|Aku daikan|SkeletonJoke|David loves Rachel! <3|Polar|Loremaster Rawlins|lickin my cookie|Fmaily Gyu funy momens #420|Ms. Cppkies|WillStreet|Ian's Mom|Grandma Divah|Betty BeardPuller|Mamie Cobol|200rassberris|ipm1234|Galadion|Olive Gardenia|Megan I. McIntosh|Lady Sweets|Rivne|Autosuffisant|BoShek|Brooke Chumbers|Cthulhu|ɐɯpuɐɹפ|binbinuser|Amma Jóna|the book was empty|Berit|DRIFTER1117|Yackemflam|Help me|YeOl'GrammityGram|Mason W|Peggy Hattenfels|majik|latte|amogus|Samuel Robertson|Anneliese Albina Emma|Barack Obama|Gramma Margaret|Tomato Pie|Tobi Kummerer|Ms Shelley|Harlow Diggs|Jaema|Claudia|Lukexzr's Grandma|Grandma Chara|I love my cookies|Typlo|joxer(ish)|Lisle|Gray Still Plays|Alyssa Cummings|The Wrinkler Spy|Carol|Gerladine|Alpa|Grannynator T-3000|SoeJul|Eleodora Consuelo|Grandma Jo"} \ No newline at end of file diff --git a/img/AQWorlds_CookieClicker_300x40.png b/img/AQWorlds_CookieClicker_300x40.png new file mode 100644 index 00000000..01a10da0 Binary files /dev/null and b/img/AQWorlds_CookieClicker_300x40.png differ diff --git a/img/Thumbs.db b/img/Thumbs.db deleted file mode 100644 index c3c818e3..00000000 Binary files a/img/Thumbs.db and /dev/null differ diff --git a/img/_imglist.txt b/img/_imglist.txt index 12a608dc..c1a32920 100644 --- a/img/_imglist.txt +++ b/img/_imglist.txt @@ -1,297 +1,309 @@ -BGgarden.jpg -BGgrimoire.jpg -BGmarket.jpg -BGpantheon.jpg -alchemylab.png -alchemylabBackground.png -alteredGrandma.png -alternateGrandma.png -antiGrandma.png -antimattercondenser.png -antimattercondenserBackground.png -aqworldsbanner.jpg -ascendBox.png -ascendInfo.png -ascendSlot.png -ascendWisp.png -ascendedBakingPod.png -bank.png -bankBackground.png -bankGrandma.png -bgBW.jpg -bgBlack.jpg -bgBlue.jpg -bgCandy.jpg -bgChoco.jpg -bgChocoDark.jpg -bgCoarse.jpg -bgFoil.jpg -bgGold.jpg -bgMint.jpg -bgMoney.jpg -bgMoneyChart.jpg -bgPaint.jpg -bgPink.jpg -bgPurple.jpg -bgRed.jpg -bgSilver.jpg -bgSky.jpg -bgSnowy.jpg -bgSpectrum.jpg -bgStars.jpg -bgWhite.jpg -bgYellowBlue.jpg -blackGradient.png -blackGradientLeft.png -blackGradientSmallTop.png -bracketPanelLeftS.png -bracketPanelRightS.png -brainyGrandma.png -brokenCookie.png -brokenCookieHalo.png -brownStripes.png -brownStripesLeftEdge.png -buildings.png -bunnies.png -bunnyGrandma.png -buttonTile.jpg -caramelWave.png -chancemaker.png -chancemakerBackground.png -chocolateMilkWave.png -clayBG.jpg -contract.png -control.png -cookieShadow.png -cookieShower1.png -cookieShower2.png -cookieShower3.png -cortex.png -cortexBackground.png -cosmicGrandma.png -cursor.png -darkNoise.jpg -darkNoise.png -darkNoiseTopBar.jpg -dashnetLogo.png -discord.png -dragon.png -dragonBG.png -dragonFrame.png -dungeonDot.png -dungeonFactory.png -dungeonFoes.png -dungeonHeroes.png -dungeonIcons.png -dungeonItems.png -dungeonMapFactory.jpg -dungeonOverlay.png -dungeonPictos.png -dungeonTiles.png -easterEggs.png -elfGrandma.png -empty.png -emptyFrame.png -factory.png -factoryBackground.png -farm.png -farmBackground.png -farmerGrandma.png -favicon.ico -featherLeft.png -featherRight.png -filler.png -fractalEngine.png -fractalEngineBackground.png -frameBorder.png -frostedReindeer.png -gardenPlants.png -gardenPlots.png -gardenTip.png -girlscoutChip.png -girlscoutCrumb.png -girlscoutDoe.png -girlscoutLucky.png -glint.jpg -goldCookie.png -grandma.png -grandmaBackground.png -grandmas1.jpg -grandmas2.jpg -grandmas3.jpg -grandmasGrandma.png -grimoireBG.png -heartStorm.png -hearts.png -heavenRing1.jpg -heavenRing2.jpg -heavenlyMoney.png -heraldFlag.png -icon.ico -icon.png -icons.png -idleverse.png -idleverseBackground.png -imperfectCookie.png -infoBG.png -infoBGfade.png -javascriptconsole.png -javascriptconsoleBackground.png -levelUp.png -linkDash.png -linkPulse.gif -linkPulse.png -lockOff.png -lockOn.png -luckyGrandma.png -mapBG.jpg -mapIcons.png -marbleBG.jpg -marshmallows.png -metaGrandma.png -milk.png -milkBanana.png -milkBlack.png -milkBlackcurrant.png -milkBlood.png -milkBlueFire.png -milkBlueberry.png -milkCaramel.png -milkCherry.png -milkChocolate.png -milkCoconut.png -milkCoffee.png -milkDragonfruit.png -milkFire.png -milkGold.png -milkGreenFire.png -milkHoney.png -milkLicorice.png -milkLime.png -milkMaple.png -milkMelon.png -milkMint.png -milkOrange.png -milkPlain.png -milkRaspberry.png -milkRose.png -milkSoy.png -milkSpiced.png -milkStars.png -milkStrawberry.png -milkTea.png -milkVanilla.png -milkWave.png -milkZebra.png -mine.png -mineBackground.png -minerGrandma.png -money.png -mysticBG.jpg -nest.png -orangeWave.png -panelBG.png -panelGradientBottom.png -panelGradientLeft.png -panelGradientRight.png -panelGradientTop.png -panelHorizontal.png -panelMenu.png -panelMenu2.png -panelMenu3.png -panelVertical.png -pantheonBG.png -patreon.png -perfectCookie.png -pieFill.png -playsaurusLogo.png -playsaurusbanner1.png -playsaurusbanner2.png -playsaurusbanner3.png -pointGlow.gif -pointyLad.png -portal.png -portalBackground.png -portraitChip.png -portraitCrumb.png -portraitDoe.png -portraitLucky.png -prestigeBar.jpg -prestigeBarCap.png -prism.png -prismBackground.png -rainbowGrandma.png -raspberryWave.png -roundFrameBorder.png -roundedPanelBG.png -roundedPanelBGS.png -roundedPanelLeft.png -roundedPanelLeftS.png -roundedPanelRight.png -roundedPanelRightS.png -santa.png -scriptGrandma.png -selectTarget.png -sentientFurnace.png -shadedBorders.png -shadedBordersGold.png -shadedBordersRed.png -shadedBordersSoft.png -shine.png -shineGold.png -shineRed.png -shineSpoke.png -shinyWinkler.png -shinyWrinkler.png -shinyWrinklerBits.png -shipment.png -shipmentBackground.png -smallCookies.png -smallDollars.png -snow.jpg -snow2.jpg -sparkles.jpg -spellBG.png -spinnyBig.png -spinnySmall.png -spookyCookie.png -starbg.jpg -storeTile.jpg -sugarLump.png -temple.png -templeBackground.png -templeGrandma.png -timemachine.png -timemachineBackground.png -timerBars.png -tinyEyeEmpty.png -tinyEyeOff.png -tinyEyeOn.png -tinyglobe.gif -tinyglobeSheet.gif -transmutedGrandma.png -turnInto.png -upgradeFrame.png -upgradeFrameHeavenly.png -upgradeFrameOld.png -upgradeFrameShadowOld.png -upgradeHighlight.jpg -upgradeHighlight.png -upgradeSelector.png -weeHoodie.png -winkler.png -winterFrame.png -winterWinkler.png -winterWrinkler.png -witchGrandma.png -wizardtower.png -wizardtowerBackground.png -workerGrandma.png -wrathContract.png -wrathCookie.png -wrinkler.png -wrinklerBits.png -wrinklerBitsOld.png -wrinklerBlink.png -wrinklerGooglies.png -wrinklerShadow.png +http://orteil.dashnet.org/cookieclicker/img/AQWorlds_CookieClicker_300x40.png +http://orteil.dashnet.org/cookieclicker/img/BGgarden.jpg +http://orteil.dashnet.org/cookieclicker/img/BGgrimoire.jpg +http://orteil.dashnet.org/cookieclicker/img/BGmarket.jpg +http://orteil.dashnet.org/cookieclicker/img/BGpantheon.jpg +http://orteil.dashnet.org/cookieclicker/img/alchemylab.png +http://orteil.dashnet.org/cookieclicker/img/alchemylabBackground.png +http://orteil.dashnet.org/cookieclicker/img/alteredGrandma.png +http://orteil.dashnet.org/cookieclicker/img/alternateGrandma.png +http://orteil.dashnet.org/cookieclicker/img/antiGrandma.png +http://orteil.dashnet.org/cookieclicker/img/antimattercondenser.png +http://orteil.dashnet.org/cookieclicker/img/antimattercondenserBackground.png +http://orteil.dashnet.org/cookieclicker/img/aqworldsbanner.jpg +http://orteil.dashnet.org/cookieclicker/img/ascendBox.png +http://orteil.dashnet.org/cookieclicker/img/ascendInfo.png +http://orteil.dashnet.org/cookieclicker/img/ascendSlot.png +http://orteil.dashnet.org/cookieclicker/img/ascendWisp.png +http://orteil.dashnet.org/cookieclicker/img/ascendedBakingPod.png +http://orteil.dashnet.org/cookieclicker/img/bank.png +http://orteil.dashnet.org/cookieclicker/img/bankBackground.png +http://orteil.dashnet.org/cookieclicker/img/bankGrandma.png +http://orteil.dashnet.org/cookieclicker/img/bgBW.jpg +http://orteil.dashnet.org/cookieclicker/img/bgBlack.jpg +http://orteil.dashnet.org/cookieclicker/img/bgBlue.jpg +http://orteil.dashnet.org/cookieclicker/img/bgCandy.jpg +http://orteil.dashnet.org/cookieclicker/img/bgChoco.jpg +http://orteil.dashnet.org/cookieclicker/img/bgChocoDark.jpg +http://orteil.dashnet.org/cookieclicker/img/bgCoarse.jpg +http://orteil.dashnet.org/cookieclicker/img/bgFoil.jpg +http://orteil.dashnet.org/cookieclicker/img/bgGold.jpg +http://orteil.dashnet.org/cookieclicker/img/bgMint.jpg +http://orteil.dashnet.org/cookieclicker/img/bgMoney.jpg +http://orteil.dashnet.org/cookieclicker/img/bgMoneyChart.jpg +http://orteil.dashnet.org/cookieclicker/img/bgPaint.jpg +http://orteil.dashnet.org/cookieclicker/img/bgPink.jpg +http://orteil.dashnet.org/cookieclicker/img/bgPurple.jpg +http://orteil.dashnet.org/cookieclicker/img/bgRed.jpg +http://orteil.dashnet.org/cookieclicker/img/bgSilver.jpg +http://orteil.dashnet.org/cookieclicker/img/bgSky.jpg +http://orteil.dashnet.org/cookieclicker/img/bgSnowy.jpg +http://orteil.dashnet.org/cookieclicker/img/bgSpectrum.jpg +http://orteil.dashnet.org/cookieclicker/img/bgStars.jpg +http://orteil.dashnet.org/cookieclicker/img/bgWhite.jpg +http://orteil.dashnet.org/cookieclicker/img/bgYellowBlue.jpg +http://orteil.dashnet.org/cookieclicker/img/blackGradient.png +http://orteil.dashnet.org/cookieclicker/img/blackGradientLeft.png +http://orteil.dashnet.org/cookieclicker/img/blackGradientSmallTop.png +http://orteil.dashnet.org/cookieclicker/img/bracketPanelLeftS.png +http://orteil.dashnet.org/cookieclicker/img/bracketPanelRightS.png +http://orteil.dashnet.org/cookieclicker/img/brainyGrandma.png +http://orteil.dashnet.org/cookieclicker/img/brokenCookie.png +http://orteil.dashnet.org/cookieclicker/img/brokenCookieHalo.png +http://orteil.dashnet.org/cookieclicker/img/brownStripes.png +http://orteil.dashnet.org/cookieclicker/img/brownStripesLeftEdge.png +http://orteil.dashnet.org/cookieclicker/img/buildings.png +http://orteil.dashnet.org/cookieclicker/img/bunnies.png +http://orteil.dashnet.org/cookieclicker/img/bunnyGrandma.png +http://orteil.dashnet.org/cookieclicker/img/buttonTile.jpg +http://orteil.dashnet.org/cookieclicker/img/caramelWave.png +http://orteil.dashnet.org/cookieclicker/img/chancemaker.png +http://orteil.dashnet.org/cookieclicker/img/chancemakerBackground.png +http://orteil.dashnet.org/cookieclicker/img/chocolateMilkWave.png +http://orteil.dashnet.org/cookieclicker/img/clayBG.jpg +http://orteil.dashnet.org/cookieclicker/img/cloneGrandma.png +http://orteil.dashnet.org/cookieclicker/img/contract.png +http://orteil.dashnet.org/cookieclicker/img/control.png +http://orteil.dashnet.org/cookieclicker/img/cookieShadow.png +http://orteil.dashnet.org/cookieclicker/img/cookieShower1.png +http://orteil.dashnet.org/cookieclicker/img/cookieShower2.png +http://orteil.dashnet.org/cookieclicker/img/cookieShower3.png +http://orteil.dashnet.org/cookieclicker/img/cortex.png +http://orteil.dashnet.org/cookieclicker/img/cortexBackground.png +http://orteil.dashnet.org/cookieclicker/img/cosmicGrandma.png +http://orteil.dashnet.org/cookieclicker/img/cursor.png +http://orteil.dashnet.org/cookieclicker/img/darkNoise.jpg +http://orteil.dashnet.org/cookieclicker/img/darkNoise.png +http://orteil.dashnet.org/cookieclicker/img/darkNoiseTopBar.jpg +http://orteil.dashnet.org/cookieclicker/img/dashnetLogo.png +http://orteil.dashnet.org/cookieclicker/img/discord.png +http://orteil.dashnet.org/cookieclicker/img/dragon.png +http://orteil.dashnet.org/cookieclicker/img/dragonBG.png +http://orteil.dashnet.org/cookieclicker/img/dragonFrame.png +http://orteil.dashnet.org/cookieclicker/img/dungeonDot.png +http://orteil.dashnet.org/cookieclicker/img/dungeonFactory.png +http://orteil.dashnet.org/cookieclicker/img/dungeonFoes.png +http://orteil.dashnet.org/cookieclicker/img/dungeonHeroes.png +http://orteil.dashnet.org/cookieclicker/img/dungeonIcons.png +http://orteil.dashnet.org/cookieclicker/img/dungeonItems.png +http://orteil.dashnet.org/cookieclicker/img/dungeonMapFactory.jpg +http://orteil.dashnet.org/cookieclicker/img/dungeonOverlay.png +http://orteil.dashnet.org/cookieclicker/img/dungeonPictos.png +http://orteil.dashnet.org/cookieclicker/img/dungeonTiles.png +http://orteil.dashnet.org/cookieclicker/img/easterEggs.png +http://orteil.dashnet.org/cookieclicker/img/elfGrandma.png +http://orteil.dashnet.org/cookieclicker/img/empty.png +http://orteil.dashnet.org/cookieclicker/img/emptyFrame.png +http://orteil.dashnet.org/cookieclicker/img/factory.png +http://orteil.dashnet.org/cookieclicker/img/factoryBackground.png +http://orteil.dashnet.org/cookieclicker/img/farm.png +http://orteil.dashnet.org/cookieclicker/img/farmBackground.png +http://orteil.dashnet.org/cookieclicker/img/farmerGrandma.png +http://orteil.dashnet.org/cookieclicker/img/favicon.ico +http://orteil.dashnet.org/cookieclicker/img/featherLeft.png +http://orteil.dashnet.org/cookieclicker/img/featherRight.png +http://orteil.dashnet.org/cookieclicker/img/filler.png +http://orteil.dashnet.org/cookieclicker/img/fractalEngine.png +http://orteil.dashnet.org/cookieclicker/img/fractalEngineBackground.png +http://orteil.dashnet.org/cookieclicker/img/frameBorder.png +http://orteil.dashnet.org/cookieclicker/img/frostedReindeer.png +http://orteil.dashnet.org/cookieclicker/img/gardenPlants.png +http://orteil.dashnet.org/cookieclicker/img/gardenPlots.png +http://orteil.dashnet.org/cookieclicker/img/gardenTip.png +http://orteil.dashnet.org/cookieclicker/img/girlscoutChip.png +http://orteil.dashnet.org/cookieclicker/img/girlscoutCrumb.png +http://orteil.dashnet.org/cookieclicker/img/girlscoutDoe.png +http://orteil.dashnet.org/cookieclicker/img/girlscoutLucky.png +http://orteil.dashnet.org/cookieclicker/img/glint.jpg +http://orteil.dashnet.org/cookieclicker/img/glint.png +http://orteil.dashnet.org/cookieclicker/img/goldCookie.png +http://orteil.dashnet.org/cookieclicker/img/grandma.png +http://orteil.dashnet.org/cookieclicker/img/grandmaBackground.png +http://orteil.dashnet.org/cookieclicker/img/grandmas1.jpg +http://orteil.dashnet.org/cookieclicker/img/grandmas2.jpg +http://orteil.dashnet.org/cookieclicker/img/grandmas3.jpg +http://orteil.dashnet.org/cookieclicker/img/grandmasGrandma.png +http://orteil.dashnet.org/cookieclicker/img/grimoireBG.png +http://orteil.dashnet.org/cookieclicker/img/heartStorm.png +http://orteil.dashnet.org/cookieclicker/img/hearts.png +http://orteil.dashnet.org/cookieclicker/img/heavenRing1.jpg +http://orteil.dashnet.org/cookieclicker/img/heavenRing2.jpg +http://orteil.dashnet.org/cookieclicker/img/heavenlyMoney.png +http://orteil.dashnet.org/cookieclicker/img/heraldFlag.png +http://orteil.dashnet.org/cookieclicker/img/icon.ico +http://orteil.dashnet.org/cookieclicker/img/icon.png +http://orteil.dashnet.org/cookieclicker/img/icons.png +http://orteil.dashnet.org/cookieclicker/img/idleverse.png +http://orteil.dashnet.org/cookieclicker/img/idleverseBackground.png +http://orteil.dashnet.org/cookieclicker/img/imperfectCookie.png +http://orteil.dashnet.org/cookieclicker/img/infoBG.png +http://orteil.dashnet.org/cookieclicker/img/infoBGfade.png +http://orteil.dashnet.org/cookieclicker/img/javascriptconsole.png +http://orteil.dashnet.org/cookieclicker/img/javascriptconsoleBackground.png +http://orteil.dashnet.org/cookieclicker/img/levelUp.png +http://orteil.dashnet.org/cookieclicker/img/linkDash.png +http://orteil.dashnet.org/cookieclicker/img/linkPulse.gif +http://orteil.dashnet.org/cookieclicker/img/linkPulse.png +http://orteil.dashnet.org/cookieclicker/img/lockOff.png +http://orteil.dashnet.org/cookieclicker/img/lockOn.png +http://orteil.dashnet.org/cookieclicker/img/luckyGrandma.png +http://orteil.dashnet.org/cookieclicker/img/mapBG.jpg +http://orteil.dashnet.org/cookieclicker/img/mapIcons.png +http://orteil.dashnet.org/cookieclicker/img/marbleBG.jpg +http://orteil.dashnet.org/cookieclicker/img/marshmallows.png +http://orteil.dashnet.org/cookieclicker/img/messageBG.png +http://orteil.dashnet.org/cookieclicker/img/metaGrandma.png +http://orteil.dashnet.org/cookieclicker/img/milk.png +http://orteil.dashnet.org/cookieclicker/img/milkBanana.png +http://orteil.dashnet.org/cookieclicker/img/milkBlack.png +http://orteil.dashnet.org/cookieclicker/img/milkBlackcurrant.png +http://orteil.dashnet.org/cookieclicker/img/milkBlood.png +http://orteil.dashnet.org/cookieclicker/img/milkBlueFire.png +http://orteil.dashnet.org/cookieclicker/img/milkBlueberry.png +http://orteil.dashnet.org/cookieclicker/img/milkCaramel.png +http://orteil.dashnet.org/cookieclicker/img/milkCherry.png +http://orteil.dashnet.org/cookieclicker/img/milkChocolate.png +http://orteil.dashnet.org/cookieclicker/img/milkCoconut.png +http://orteil.dashnet.org/cookieclicker/img/milkCoffee.png +http://orteil.dashnet.org/cookieclicker/img/milkDragonfruit.png +http://orteil.dashnet.org/cookieclicker/img/milkFire.png +http://orteil.dashnet.org/cookieclicker/img/milkGold.png +http://orteil.dashnet.org/cookieclicker/img/milkGreenFire.png +http://orteil.dashnet.org/cookieclicker/img/milkHazelnut.png +http://orteil.dashnet.org/cookieclicker/img/milkHoney.png +http://orteil.dashnet.org/cookieclicker/img/milkLicorice.png +http://orteil.dashnet.org/cookieclicker/img/milkLime.png +http://orteil.dashnet.org/cookieclicker/img/milkMaple.png +http://orteil.dashnet.org/cookieclicker/img/milkMelon.png +http://orteil.dashnet.org/cookieclicker/img/milkMint.png +http://orteil.dashnet.org/cookieclicker/img/milkOrange.png +http://orteil.dashnet.org/cookieclicker/img/milkPeach.png +http://orteil.dashnet.org/cookieclicker/img/milkPlain.png +http://orteil.dashnet.org/cookieclicker/img/milkRaspberry.png +http://orteil.dashnet.org/cookieclicker/img/milkRose.png +http://orteil.dashnet.org/cookieclicker/img/milkSoy.png +http://orteil.dashnet.org/cookieclicker/img/milkSpiced.png +http://orteil.dashnet.org/cookieclicker/img/milkStars.png +http://orteil.dashnet.org/cookieclicker/img/milkStrawberry.png +http://orteil.dashnet.org/cookieclicker/img/milkTea.png +http://orteil.dashnet.org/cookieclicker/img/milkVanilla.png +http://orteil.dashnet.org/cookieclicker/img/milkWave.png +http://orteil.dashnet.org/cookieclicker/img/milkZebra.png +http://orteil.dashnet.org/cookieclicker/img/mine.png +http://orteil.dashnet.org/cookieclicker/img/mineBackground.png +http://orteil.dashnet.org/cookieclicker/img/minerGrandma.png +http://orteil.dashnet.org/cookieclicker/img/money.png +http://orteil.dashnet.org/cookieclicker/img/mysticBG.jpg +http://orteil.dashnet.org/cookieclicker/img/nest.png +http://orteil.dashnet.org/cookieclicker/img/orangeWave.png +http://orteil.dashnet.org/cookieclicker/img/panelBG.png +http://orteil.dashnet.org/cookieclicker/img/panelGradientBottom.png +http://orteil.dashnet.org/cookieclicker/img/panelGradientLeft.png +http://orteil.dashnet.org/cookieclicker/img/panelGradientRight.png +http://orteil.dashnet.org/cookieclicker/img/panelGradientTop.png +http://orteil.dashnet.org/cookieclicker/img/panelHorizontal.png +http://orteil.dashnet.org/cookieclicker/img/panelMenu.png +http://orteil.dashnet.org/cookieclicker/img/panelMenu2.png +http://orteil.dashnet.org/cookieclicker/img/panelMenu3.png +http://orteil.dashnet.org/cookieclicker/img/panelVertical.png +http://orteil.dashnet.org/cookieclicker/img/pantheonBG.png +http://orteil.dashnet.org/cookieclicker/img/parade.png +http://orteil.dashnet.org/cookieclicker/img/patreon.png +http://orteil.dashnet.org/cookieclicker/img/perfectCookie.png +http://orteil.dashnet.org/cookieclicker/img/pieFill.png +http://orteil.dashnet.org/cookieclicker/img/playsaurusLogo.png +http://orteil.dashnet.org/cookieclicker/img/playsaurusbanner1.png +http://orteil.dashnet.org/cookieclicker/img/playsaurusbanner2.png +http://orteil.dashnet.org/cookieclicker/img/playsaurusbanner3.png +http://orteil.dashnet.org/cookieclicker/img/pointGlow.gif +http://orteil.dashnet.org/cookieclicker/img/pointyLad.png +http://orteil.dashnet.org/cookieclicker/img/portal.png +http://orteil.dashnet.org/cookieclicker/img/portalBackground.png +http://orteil.dashnet.org/cookieclicker/img/portraitChip.png +http://orteil.dashnet.org/cookieclicker/img/portraitCrumb.png +http://orteil.dashnet.org/cookieclicker/img/portraitDoe.png +http://orteil.dashnet.org/cookieclicker/img/portraitLucky.png +http://orteil.dashnet.org/cookieclicker/img/prestigeBar.jpg +http://orteil.dashnet.org/cookieclicker/img/prestigeBarCap.png +http://orteil.dashnet.org/cookieclicker/img/prism.png +http://orteil.dashnet.org/cookieclicker/img/prismBackground.png +http://orteil.dashnet.org/cookieclicker/img/rainbowGrandma.png +http://orteil.dashnet.org/cookieclicker/img/raspberryWave.png +http://orteil.dashnet.org/cookieclicker/img/roundFrameBorder.png +http://orteil.dashnet.org/cookieclicker/img/roundedPanelBG.png +http://orteil.dashnet.org/cookieclicker/img/roundedPanelBGS.png +http://orteil.dashnet.org/cookieclicker/img/roundedPanelLeft.png +http://orteil.dashnet.org/cookieclicker/img/roundedPanelLeftS.png +http://orteil.dashnet.org/cookieclicker/img/roundedPanelRight.png +http://orteil.dashnet.org/cookieclicker/img/roundedPanelRightS.png +http://orteil.dashnet.org/cookieclicker/img/santa.png +http://orteil.dashnet.org/cookieclicker/img/scriptGrandma.png +http://orteil.dashnet.org/cookieclicker/img/selectTarget.png +http://orteil.dashnet.org/cookieclicker/img/sentientFurnace.png +http://orteil.dashnet.org/cookieclicker/img/shadedBorders.png +http://orteil.dashnet.org/cookieclicker/img/shadedBordersGold.png +http://orteil.dashnet.org/cookieclicker/img/shadedBordersRed.png +http://orteil.dashnet.org/cookieclicker/img/shadedBordersSoft.png +http://orteil.dashnet.org/cookieclicker/img/shimmeringVeil.png +http://orteil.dashnet.org/cookieclicker/img/shine.png +http://orteil.dashnet.org/cookieclicker/img/shineGold.png +http://orteil.dashnet.org/cookieclicker/img/shineRed.png +http://orteil.dashnet.org/cookieclicker/img/shineSpoke.png +http://orteil.dashnet.org/cookieclicker/img/shinyWinkler.png +http://orteil.dashnet.org/cookieclicker/img/shinyWrinkler.png +http://orteil.dashnet.org/cookieclicker/img/shinyWrinklerBits.png +http://orteil.dashnet.org/cookieclicker/img/shipment.png +http://orteil.dashnet.org/cookieclicker/img/shipmentBackground.png +http://orteil.dashnet.org/cookieclicker/img/smallCookies.png +http://orteil.dashnet.org/cookieclicker/img/smallDollars.png +http://orteil.dashnet.org/cookieclicker/img/snow.jpg +http://orteil.dashnet.org/cookieclicker/img/snow2.jpg +http://orteil.dashnet.org/cookieclicker/img/sparkles.jpg +http://orteil.dashnet.org/cookieclicker/img/spellBG.png +http://orteil.dashnet.org/cookieclicker/img/spinnyBig.png +http://orteil.dashnet.org/cookieclicker/img/spinnySmall.png +http://orteil.dashnet.org/cookieclicker/img/spookyCookie.png +http://orteil.dashnet.org/cookieclicker/img/starbg.jpg +http://orteil.dashnet.org/cookieclicker/img/storeTile.jpg +http://orteil.dashnet.org/cookieclicker/img/sugarLump.png +http://orteil.dashnet.org/cookieclicker/img/temple.png +http://orteil.dashnet.org/cookieclicker/img/templeBackground.png +http://orteil.dashnet.org/cookieclicker/img/templeGrandma.png +http://orteil.dashnet.org/cookieclicker/img/timemachine.png +http://orteil.dashnet.org/cookieclicker/img/timemachineBackground.png +http://orteil.dashnet.org/cookieclicker/img/timerBars.png +http://orteil.dashnet.org/cookieclicker/img/tinyEyeEmpty.png +http://orteil.dashnet.org/cookieclicker/img/tinyEyeOff.png +http://orteil.dashnet.org/cookieclicker/img/tinyEyeOn.png +http://orteil.dashnet.org/cookieclicker/img/tinyglobe.gif +http://orteil.dashnet.org/cookieclicker/img/tinyglobeSheet.gif +http://orteil.dashnet.org/cookieclicker/img/transmutedGrandma.png +http://orteil.dashnet.org/cookieclicker/img/turnInto.png +http://orteil.dashnet.org/cookieclicker/img/upgradeFrame.png +http://orteil.dashnet.org/cookieclicker/img/upgradeFrameHeavenly.png +http://orteil.dashnet.org/cookieclicker/img/upgradeFrameOld.png +http://orteil.dashnet.org/cookieclicker/img/upgradeFrameShadowOld.png +http://orteil.dashnet.org/cookieclicker/img/upgradeHighlight.jpg +http://orteil.dashnet.org/cookieclicker/img/upgradeHighlight.png +http://orteil.dashnet.org/cookieclicker/img/upgradeSelector.png +http://orteil.dashnet.org/cookieclicker/img/weeHoodie.png +http://orteil.dashnet.org/cookieclicker/img/winkler.png +http://orteil.dashnet.org/cookieclicker/img/winterFrame.png +http://orteil.dashnet.org/cookieclicker/img/winterWinkler.png +http://orteil.dashnet.org/cookieclicker/img/winterWrinkler.png +http://orteil.dashnet.org/cookieclicker/img/witchGrandma.png +http://orteil.dashnet.org/cookieclicker/img/wizardtower.png +http://orteil.dashnet.org/cookieclicker/img/wizardtowerBackground.png +http://orteil.dashnet.org/cookieclicker/img/workerGrandma.png +http://orteil.dashnet.org/cookieclicker/img/wrathContract.png +http://orteil.dashnet.org/cookieclicker/img/wrathCookie.png +http://orteil.dashnet.org/cookieclicker/img/wrinkler.png +http://orteil.dashnet.org/cookieclicker/img/wrinklerBits.png +http://orteil.dashnet.org/cookieclicker/img/wrinklerBitsOld.png +http://orteil.dashnet.org/cookieclicker/img/wrinklerBlink.png +http://orteil.dashnet.org/cookieclicker/img/wrinklerGooglies.png +http://orteil.dashnet.org/cookieclicker/img/wrinklerShadow.png +http://orteil.dashnet.org/cookieclicker/img/you.png +http://orteil.dashnet.org/cookieclicker/img/youAddons.png +http://orteil.dashnet.org/cookieclicker/img/youBackground.png +http://orteil.dashnet.org/cookieclicker/img/youLight.png diff --git a/img/alarmTurret.png b/img/alarmTurret.png deleted file mode 100644 index df85713f..00000000 Binary files a/img/alarmTurret.png and /dev/null differ diff --git a/img/alchemylabIcon.png b/img/alchemylabIcon.png deleted file mode 100644 index 69285e3a..00000000 Binary files a/img/alchemylabIcon.png and /dev/null differ diff --git a/img/alchemylabIconOff.png b/img/alchemylabIconOff.png deleted file mode 100644 index 8e2733bf..00000000 Binary files a/img/alchemylabIconOff.png and /dev/null differ diff --git a/img/angrySentientCookie.png b/img/angrySentientCookie.png deleted file mode 100644 index 47497299..00000000 Binary files a/img/angrySentientCookie.png and /dev/null differ diff --git a/img/antimattercondenserIcon.png b/img/antimattercondenserIcon.png deleted file mode 100644 index 25cd7abf..00000000 Binary files a/img/antimattercondenserIcon.png and /dev/null differ diff --git a/img/antimattercondenserIconOff.png b/img/antimattercondenserIconOff.png deleted file mode 100644 index 69ff0eae..00000000 Binary files a/img/antimattercondenserIconOff.png and /dev/null differ diff --git a/img/babySentientCookie.png b/img/babySentientCookie.png deleted file mode 100644 index 69acc2b1..00000000 Binary files a/img/babySentientCookie.png and /dev/null differ diff --git a/img/buildings.png b/img/buildings.png index 90bb7d8f..c32e0f3d 100644 Binary files a/img/buildings.png and b/img/buildings.png differ diff --git a/img/burntSentientCookie.png b/img/burntSentientCookie.png deleted file mode 100644 index 49cd86c7..00000000 Binary files a/img/burntSentientCookie.png and /dev/null differ diff --git a/img/chirpy.png b/img/chirpy.png deleted file mode 100644 index 886020c4..00000000 Binary files a/img/chirpy.png and /dev/null differ diff --git a/img/cloneGrandma.png b/img/cloneGrandma.png new file mode 100644 index 00000000..58b18435 Binary files /dev/null and b/img/cloneGrandma.png differ diff --git a/img/crazedDoughSpurter.png b/img/crazedDoughSpurter.png deleted file mode 100644 index ac0fb2c8..00000000 Binary files a/img/crazedDoughSpurter.png and /dev/null differ diff --git a/img/crazedKneader.png b/img/crazedKneader.png deleted file mode 100644 index e3f39db4..00000000 Binary files a/img/crazedKneader.png and /dev/null differ diff --git a/img/cursoricon.png b/img/cursoricon.png deleted file mode 100644 index bd957dd7..00000000 Binary files a/img/cursoricon.png and /dev/null differ diff --git a/img/cursoriconOff.png b/img/cursoriconOff.png deleted file mode 100644 index 99e7c71d..00000000 Binary files a/img/cursoriconOff.png and /dev/null differ diff --git a/img/disgruntledCleaningLady.png b/img/disgruntledCleaningLady.png deleted file mode 100644 index df8822de..00000000 Binary files a/img/disgruntledCleaningLady.png and /dev/null differ diff --git a/img/disgruntledOverseer.png b/img/disgruntledOverseer.png deleted file mode 100644 index be77ab58..00000000 Binary files a/img/disgruntledOverseer.png and /dev/null differ diff --git a/img/disgruntledWorker.png b/img/disgruntledWorker.png deleted file mode 100644 index 6694ba2a..00000000 Binary files a/img/disgruntledWorker.png and /dev/null differ diff --git a/img/doughling.png b/img/doughling.png deleted file mode 100644 index e659bb92..00000000 Binary files a/img/doughling.png and /dev/null differ diff --git a/img/elderDoughling.png b/img/elderDoughling.png deleted file mode 100644 index 8d53bed4..00000000 Binary files a/img/elderDoughling.png and /dev/null differ diff --git a/img/factoryIcon.png b/img/factoryIcon.png deleted file mode 100644 index c8b748aa..00000000 Binary files a/img/factoryIcon.png and /dev/null differ diff --git a/img/factoryIconOff.png b/img/factoryIconOff.png deleted file mode 100644 index 7b52b8f4..00000000 Binary files a/img/factoryIconOff.png and /dev/null differ diff --git a/img/farmIcon.png b/img/farmIcon.png deleted file mode 100644 index 36cbf3e3..00000000 Binary files a/img/farmIcon.png and /dev/null differ diff --git a/img/farmIconOff.png b/img/farmIconOff.png deleted file mode 100644 index 94fa896b..00000000 Binary files a/img/farmIconOff.png and /dev/null differ diff --git a/img/glint.png b/img/glint.png new file mode 100644 index 00000000..eab74ed0 Binary files /dev/null and b/img/glint.png differ diff --git a/img/grandmaIcon.png b/img/grandmaIcon.png deleted file mode 100644 index 7d9f5879..00000000 Binary files a/img/grandmaIcon.png and /dev/null differ diff --git a/img/grandmaIconB.png b/img/grandmaIconB.png deleted file mode 100644 index 7e0323a4..00000000 Binary files a/img/grandmaIconB.png and /dev/null differ diff --git a/img/grandmaIconC.png b/img/grandmaIconC.png deleted file mode 100644 index fb3e6874..00000000 Binary files a/img/grandmaIconC.png and /dev/null differ diff --git a/img/grandmaIconD.png b/img/grandmaIconD.png deleted file mode 100644 index fb2e6fd5..00000000 Binary files a/img/grandmaIconD.png and /dev/null differ diff --git a/img/grandmaIconOff.png b/img/grandmaIconOff.png deleted file mode 100644 index 8b0900ac..00000000 Binary files a/img/grandmaIconOff.png and /dev/null differ diff --git a/img/hpBar.png b/img/hpBar.png deleted file mode 100644 index 09653ed7..00000000 Binary files a/img/hpBar.png and /dev/null differ diff --git a/img/hpmBar.png b/img/hpmBar.png deleted file mode 100644 index 300a2912..00000000 Binary files a/img/hpmBar.png and /dev/null differ diff --git a/img/icons.png b/img/icons.png index ff065c25..33c10b25 100644 Binary files a/img/icons.png and b/img/icons.png differ diff --git a/img/index.html b/img/index.html index e1a9fdf4..75e46856 100644 --- a/img/index.html +++ b/img/index.html @@ -6,307 +6,319 @@

Index of /cookieclicker/img

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[IMG]BGgarden.jpg2018-03-08 23:42 21K 
[IMG]BGgrimoire.jpg2018-03-08 21:17 20K 
[IMG]BGmarket.jpg2020-08-22 19:08 23K 
[IMG]BGpantheon.jpg2018-03-08 21:13 25K 
[   ]Thumbs.db2017-11-24 00:23 1.9M 
[IMG]alchemylab.png2013-12-28 23:56 820  
[IMG]alchemylabBackground.png2013-12-28 23:56 472  
[IMG]alteredGrandma.png2013-12-28 23:56 470  
[IMG]alternateGrandma.png2020-10-29 12:32 1.6K 
[IMG]antiGrandma.png2013-12-28 23:56 526  
[IMG]antimattercondenser.png2013-12-28 23:56 666  
[IMG]antimattercondenserBackground.png2013-12-28 23:56 966  
[IMG]aqworldsbanner.jpg2013-12-29 16:33 29K 
[IMG]ascendBox.png2015-12-20 11:28 22K 
[IMG]ascendInfo.png2015-12-20 11:29 11K 
[IMG]ascendSlot.png2015-04-17 10:36 14K 
[IMG]ascendWisp.png2014-08-25 07:44 42K 
[IMG]ascendedBakingPod.png2013-12-28 23:56 1.7K 
[IMG]bank.png2014-08-08 16:58 501  
[IMG]bankBackground.png2014-08-08 12:53 2.2K 
[IMG]bankGrandma.png2014-08-08 17:59 614  
[IMG]bgBW.jpg2022-02-09 08:54 69K 
[IMG]bgBlack.jpg2022-02-09 08:40 59K 
[IMG]bgBlue.jpg2022-02-09 08:31 85K 
[IMG]bgCandy.jpg2022-02-09 12:55 100K 
[IMG]bgChoco.jpg2022-02-09 08:36 82K 
[IMG]bgChocoDark.jpg2022-02-09 08:36 66K 
[IMG]bgCoarse.jpg2022-02-09 17:19 79K 
[IMG]bgFoil.jpg2022-02-09 17:47 189K 
[IMG]bgGold.jpg2022-02-09 08:47 92K 
[IMG]bgMint.jpg2022-02-09 09:41 79K 
[IMG]bgMoney.jpg2014-03-31 23:00 69K 
[IMG]bgMoneyChart.jpg2014-03-31 23:40 9.7K 
[IMG]bgPaint.jpg2022-02-09 18:03 100K 
[IMG]bgPink.jpg2022-02-09 08:33 70K 
[IMG]bgPurple.jpg2022-02-09 10:18 92K 
[IMG]bgRed.jpg2022-02-09 08:39 91K 
[IMG]bgSilver.jpg2022-02-09 08:50 92K 
[IMG]bgSky.jpg2022-02-09 10:11 87K 
[IMG]bgSnowy.jpg2022-02-09 08:45 107K 
[IMG]bgSpectrum.jpg2022-02-09 09:56 58K 
[IMG]bgStars.jpg2022-02-09 06:58 61K 
[IMG]bgWhite.jpg2022-02-09 08:41 41K 
[IMG]bgYellowBlue.jpg2022-02-09 10:16 99K 
[IMG]blackGradient.png2013-12-28 23:56 561  
[IMG]blackGradientLeft.png2015-12-20 14:19 1.2K 
[IMG]blackGradientSmallTop.png2014-08-14 22:21 971  
[IMG]bracketPanelLeftS.png2015-12-12 19:05 2.2K 
[IMG]bracketPanelRightS.png2015-12-12 19:05 2.3K 
[IMG]brainyGrandma.png2021-12-25 14:54 1.6K 
[IMG]brokenCookie.png2015-10-25 03:35 36K 
[IMG]brokenCookieHalo.png2014-08-15 01:04 22K 
[IMG]brownStripes.png2018-08-06 05:35 2.0K 
[IMG]brownStripesLeftEdge.png2018-08-06 04:57 1.1K 
[IMG]buildings.png2021-12-25 03:25 94K 
[IMG]bunnies.png2014-04-23 01:46 23K 
[IMG]bunnyGrandma.png2014-05-15 22:13 713  
[IMG]buttonTile.jpg2013-12-29 16:33 7.6K 
[IMG]caramelWave.png2013-12-28 23:56 11K 
[IMG]chancemaker.png2017-07-30 21:16 1.5K 
[IMG]chancemakerBackground.png2017-07-30 21:15 2.6K 
[IMG]chocolateMilkWave.png2013-12-28 23:57 10K 
[IMG]clayBG.jpg2017-06-12 06:40 21K 
[IMG]contract.png2014-03-31 21:50 4.8K 
[IMG]control.png2013-12-28 23:57 48K 
[IMG]cookieShadow.png2021-08-12 07:26 2.5K 
[IMG]cookieShower1.png2013-12-28 23:57 29K 
[IMG]cookieShower2.png2013-12-28 23:57 55K 
[IMG]cookieShower3.png2013-12-28 23:58 76K 
[IMG]cortex.png2021-12-25 07:19 5.9K 
[IMG]cortexBackground.png2021-12-25 05:09 3.9K 
[IMG]cosmicGrandma.png2013-12-28 23:58 616  
[IMG]cursor.png2015-10-19 00:01 2.2K 
[IMG]darkNoise.jpg2014-08-13 22:11 53K 
[IMG]darkNoise.png2013-12-28 23:58 1.7K 
[IMG]darkNoiseTopBar.jpg2014-08-14 02:22 8.3K 
[IMG]dashnetLogo.png2021-08-07 06:44 97K 
[IMG]discord.png2018-02-20 22:15 2.3K 
[IMG]dragon.png2018-10-17 02:45 6.1K 
[IMG]dragonBG.png2015-09-25 22:02 21K 
[IMG]dragonFrame.png2015-03-31 02:41 2.0K 
[IMG]dungeonDot.png2018-09-11 17:06 3.2K 
[IMG]dungeonFactory.png2013-12-28 23:58 2.3K 
[IMG]dungeonFoes.png2018-10-06 20:37 1.9K 
[IMG]dungeonHeroes.png2018-10-06 15:56 2.4K 
[IMG]dungeonIcons.png2013-12-28 23:58 4.3K 
[IMG]dungeonItems.png2018-09-18 21:38 1.4K 
[IMG]dungeonMapFactory.jpg2018-08-06 00:43 14K 
[IMG]dungeonOverlay.png2013-12-28 23:58 13K 
[IMG]dungeonPictos.png2018-10-07 11:21 1.9K 
[IMG]dungeonTiles.png2013-12-28 23:58 3.4K 
[IMG]easterEggs.png2014-04-23 02:06 6.4K 
[IMG]elfGrandma.png2013-12-28 23:58 622  
[IMG]empty.png2013-12-28 23:58 95  
[IMG]emptyFrame.png2015-08-28 07:01 3.5K 
[IMG]factory.png2013-12-28 23:58 477  
[IMG]factoryBackground.png2013-12-28 23:58 1.3K 
[IMG]farm.png2013-12-28 23:58 765  
[IMG]farmBackground.png2013-12-28 23:58 812  
[IMG]farmerGrandma.png2013-12-28 23:58 615  
[IMG]favicon.ico2013-09-02 18:44 318  
[IMG]featherLeft.png2015-12-13 00:27 2.9K 
[IMG]featherRight.png2015-12-13 00:27 2.9K 
[IMG]filler.png2014-04-11 22:27 953  
[IMG]fractalEngine.png2018-10-17 19:44 1.3K 
[IMG]fractalEngineBackground.png2018-10-17 19:47 4.4K 
[IMG]frameBorder.png2015-08-27 05:33 1.0K 
[IMG]frostedReindeer.png2013-12-28 23:58 9.7K 
[IMG]gardenPlants.png2018-04-15 07:14 20K 
[IMG]gardenPlots.png2018-04-08 20:41 9.6K 
[IMG]gardenTip.png2018-07-20 08:47 14K 
[IMG]girlscoutChip.png2013-12-28 23:58 751  
[IMG]girlscoutCrumb.png2013-12-28 23:58 738  
[IMG]girlscoutDoe.png2013-12-28 23:58 762  
[IMG]girlscoutLucky.png2013-12-28 23:58 754  
[IMG]glint.jpg2015-12-23 11:41 1.8K 
[IMG]goldCookie.png2013-12-28 23:58 4.0K 
[IMG]grandma.png2013-12-28 23:58 571  
[IMG]grandmaBackground.png2013-12-28 23:58 837  
[IMG]grandmas1.jpg2013-12-29 16:33 21K 
[IMG]grandmas2.jpg2013-12-29 16:33 17K 
[IMG]grandmas3.jpg2013-12-29 16:33 26K 
[IMG]grandmasGrandma.png2013-12-28 23:58 619  
[IMG]grimoireBG.png2017-06-30 07:29 25K 
[IMG]heartStorm.png2014-02-10 02:59 64K 
[IMG]hearts.png2014-02-10 02:54 23K 
[IMG]heavenRing1.jpg2015-12-20 08:37 4.0K 
[IMG]heavenRing2.jpg2015-12-20 08:37 4.0K 
[IMG]heavenlyMoney.png2015-05-14 09:16 1.1K 
[IMG]heraldFlag.png2018-10-09 18:47 3.6K 
[IMG]icon.ico2021-08-14 07:36 221K 
[IMG]icon.png2021-08-23 16:55 427K 
[IMG]icons.png2022-05-06 01:42 179K 
[IMG]idleverse.png2020-10-29 11:43 3.8K 
[IMG]idleverseBackground.png2020-10-29 11:25 2.4K 
[IMG]imperfectCookie.png2013-12-28 23:59 94K 
[IMG]infoBG.png2013-12-28 23:59 94  
[IMG]infoBGfade.png2013-12-28 23:59 276  
[IMG]javascriptconsole.png2020-06-15 06:08 1.0K 
[IMG]javascriptconsoleBackground.png2019-09-16 04:35 6.7K 
[IMG]levelUp.png2017-06-05 05:50 2.0K 
[IMG]linkDash.png2018-08-06 03:23 1.0K 
[IMG]linkPulse.gif2016-02-03 18:16 4.2K 
[IMG]linkPulse.png2014-08-24 11:41 1.6K 
[IMG]lockOff.png2019-09-16 05:06 1.2K 
[IMG]lockOn.png2019-09-16 05:06 1.2K 
[IMG]luckyGrandma.png2017-07-29 23:28 713  
[IMG]mapBG.jpg2013-12-29 16:33 13K 
[IMG]mapIcons.png2013-12-28 23:59 664  
[IMG]marbleBG.jpg2017-06-12 11:05 31K 
[IMG]marshmallows.png2013-12-28 23:59 2.6K 
[IMG]metaGrandma.png2018-10-18 22:00 1.6K 
[IMG]milk.png2013-12-29 00:00 6.3K 
[IMG]milkBanana.png2015-09-20 13:09 43K 
[IMG]milkBlack.png2015-10-14 12:19 47K 
[IMG]milkBlackcurrant.png2021-12-25 20:33 52K 
[IMG]milkBlood.png2015-10-14 12:13 62K 
[IMG]milkBlueFire.png2015-10-15 13:32 78K 
[IMG]milkBlueberry.png2015-09-20 13:09 42K 
[IMG]milkCaramel.png2015-09-20 13:09 41K 
[IMG]milkCherry.png2018-03-31 09:34 24K 
[IMG]milkChocolate.png2015-09-20 13:08 40K 
[IMG]milkCoconut.png2018-03-31 09:34 30K 
[IMG]milkCoffee.png2018-03-31 08:59 19K 
[IMG]milkDragonfruit.png2020-10-27 16:34 49K 
[IMG]milkFire.png2015-10-14 12:53 67K 
[IMG]milkGold.png2015-10-14 12:17 58K 
[IMG]milkGreenFire.png2015-10-15 13:31 71K 
[IMG]milkHoney.png2017-07-30 02:14 21K 
[IMG]milkLicorice.png2020-08-22 19:55 38K 
[IMG]milkLime.png2015-09-20 13:09 42K 
[IMG]milkMaple.png2018-10-21 21:02 20K 
[IMG]milkMelon.png2021-12-25 20:31 57K 
[IMG]milkMint.png2019-09-11 03:06 40K 
[IMG]milkOrange.png2015-09-20 13:08 42K 
[IMG]milkPlain.png2015-09-20 13:08 43K 
[IMG]milkRaspberry.png2015-09-20 13:08 40K 
[IMG]milkRose.png2020-10-27 15:47 56K 
[IMG]milkSoy.png2018-03-31 09:34 22K 
[IMG]milkSpiced.png2018-04-16 18:17 75K 
[IMG]milkStars.png2015-10-13 23:08 52K 
[IMG]milkStrawberry.png2015-09-20 13:10 40K 
[IMG]milkTea.png2018-03-31 09:06 19K 
[IMG]milkVanilla.png2015-09-20 13:11 43K 
[IMG]milkWave.png2013-12-29 00:00 16K 
[IMG]milkZebra.png2015-10-14 21:48 69K 
[IMG]mine.png2013-12-29 00:00 668  
[IMG]mineBackground.png2013-12-29 00:00 1.0K 
[IMG]minerGrandma.png2013-12-29 00:00 626  
[IMG]money.png2013-12-29 00:00 280  
[IMG]mysticBG.jpg2017-06-12 11:19 22K 
[IMG]nest.png2014-05-16 17:44 15K 
[IMG]orangeWave.png2013-12-29 00:01 11K 
[IMG]panelBG.png2015-04-02 16:57 27K 
[IMG]panelGradientBottom.png2015-10-08 08:43 1.0K 
[IMG]panelGradientLeft.png2015-10-08 08:43 1.0K 
[IMG]panelGradientRight.png2015-10-08 08:44 1.0K 
[IMG]panelGradientTop.png2015-10-08 08:43 1.0K 
[IMG]panelHorizontal.png2015-08-28 06:14 6.6K 
[IMG]panelMenu.png2014-08-24 01:03 19K 
[IMG]panelMenu2.png2015-04-18 11:59 36K 
[IMG]panelMenu3.png2015-08-28 15:07 49K 
[IMG]panelVertical.png2015-08-28 06:14 7.0K 
[IMG]pantheonBG.png2017-06-30 07:51 25K 
[IMG]patreon.png2018-10-10 10:03 2.4K 
[IMG]perfectCookie.png2013-12-29 00:01 96K 
[IMG]pieFill.png2015-10-16 01:43 11K 
[IMG]playsaurusLogo.png2021-08-12 04:09 90K 
[IMG]playsaurusbanner1.png2022-06-23 15:08 38K 
[IMG]playsaurusbanner2.png2022-06-23 14:43 41K 
[IMG]playsaurusbanner3.png2022-06-22 19:12 38K 
[IMG]pointGlow.gif2022-05-05 13:34 2.3K 
[IMG]pointyLad.png2018-04-14 20:55 1.8K 
[IMG]portal.png2013-12-29 00:01 1.0K 
[IMG]portalBackground.png2013-12-29 00:01 3.6K 
[IMG]portraitChip.png2013-12-29 00:01 940  
[IMG]portraitCrumb.png2013-12-29 00:01 967  
[IMG]portraitDoe.png2013-12-29 00:01 1.0K 
[IMG]portraitLucky.png2013-12-29 00:01 1.0K 
[IMG]prestigeBar.jpg2015-12-20 17:56 2.4K 
[IMG]prestigeBarCap.png2015-12-20 17:58 1.0K 
[IMG]prism.png2014-02-13 12:48 782  
[IMG]prismBackground.png2014-02-13 10:31 701  
[IMG]rainbowGrandma.png2014-02-13 11:07 626  
[IMG]raspberryWave.png2013-12-29 00:02 10K 
[IMG]roundFrameBorder.png2015-08-27 08:49 1.1K 
[IMG]roundedPanelBG.png2015-12-11 01:01 7.1K 
[IMG]roundedPanelBGS.png2015-12-12 18:45 21K 
[IMG]roundedPanelLeft.png2015-12-11 00:59 2.5K 
[IMG]roundedPanelLeftS.png2015-12-12 18:44 2.4K 
[IMG]roundedPanelRight.png2015-12-11 01:00 2.5K 
[IMG]roundedPanelRightS.png2015-12-12 18:44 2.6K 
[IMG]santa.png2013-12-29 00:02 9.3K 
[IMG]scriptGrandma.png2019-09-03 16:43 693  
[IMG]selectTarget.png2022-05-07 04:07 2.1K 
[IMG]sentientFurnace.png2013-12-29 00:02 1.6K 
[IMG]shadedBorders.png2015-11-01 19:55 12K 
[IMG]shadedBordersGold.png2013-12-29 00:02 2.3K 
[IMG]shadedBordersRed.png2013-12-29 00:02 2.3K 
[IMG]shadedBordersSoft.png2015-11-11 06:51 3.4K 
[IMG]shine.png2013-12-29 00:02 6.0K 
[IMG]shineGold.png2017-06-30 18:07 7.8K 
[IMG]shineRed.png2017-06-30 18:09 7.8K 
[IMG]shineSpoke.png2015-10-31 12:28 6.2K 
[IMG]shinyWinkler.png2021-08-15 07:19 7.4K 
[IMG]shinyWrinkler.png2015-04-15 07:11 5.8K 
[IMG]shinyWrinklerBits.png2015-04-15 07:10 7.9K 
[IMG]shipment.png2013-12-29 00:02 507  
[IMG]shipmentBackground.png2013-12-29 00:02 923  
[IMG]smallCookies.png2013-12-29 00:02 14K 
[IMG]smallDollars.png2014-04-01 18:15 5.5K 
[IMG]snow.jpg2013-12-29 16:33 47K 
[IMG]snow2.jpg2013-12-29 16:33 71K 
[IMG]sparkles.jpg2015-10-13 12:54 16K 
[IMG]spellBG.png2017-06-08 09:54 33K 
[IMG]spinnyBig.png2015-10-24 02:38 5.3K 
[IMG]spinnySmall.png2015-10-24 02:38 2.7K 
[IMG]spookyCookie.png2013-12-29 00:02 4.3K 
[IMG]starbg.jpg2014-08-03 05:54 188K 
[IMG]storeTile.jpg2013-12-29 16:33 18K 
[IMG]sugarLump.png2017-06-05 05:27 1.1K 
[IMG]temple.png2014-08-08 16:59 752  
[IMG]templeBackground.png2014-08-08 11:02 2.5K 
[IMG]templeGrandma.png2014-08-08 18:00 742  
[IMG]timemachine.png2013-12-29 00:02 773  
[IMG]timemachineBackground.png2013-12-29 00:02 1.2K 
[IMG]timerBars.png2014-02-10 05:26 2.3K 
[IMG]tinyEyeEmpty.png2021-08-25 15:02 488  
[IMG]tinyEyeOff.png2021-08-25 15:02 332  
[IMG]tinyEyeOn.png2021-08-25 15:07 516  
[IMG]tinyglobe.gif2022-06-28 09:22 11K 
[IMG]tinyglobeSheet.gif2022-06-29 14:00 10K 
[IMG]transmutedGrandma.png2013-12-29 00:02 449  
[IMG]turnInto.png2018-03-13 16:34 1.5K 
[IMG]upgradeFrame.png2016-04-19 07:17 20K 
[IMG]upgradeFrameHeavenly.png2014-08-24 08:51 2.7K 
[IMG]upgradeFrameOld.png2015-04-18 10:45 7.3K 
[IMG]upgradeFrameShadowOld.png2015-05-14 09:06 7.0K 
[IMG]upgradeHighlight.jpg2015-10-15 18:08 4.3K 
[IMG]upgradeHighlight.png2015-10-15 18:08 5.4K 
[IMG]upgradeSelector.png2015-10-14 22:52 1.0K 
[IMG]weeHoodie.png2015-10-24 09:51 2.6K 
[IMG]winkler.png2021-08-15 07:19 7.7K 
[IMG]winterFrame.png2015-03-30 23:49 1.9K 
[IMG]winterWinkler.png2021-08-15 07:46 7.1K 
[IMG]winterWrinkler.png2013-12-29 00:02 5.8K 
[IMG]witchGrandma.png2014-08-08 18:00 779  
[IMG]wizardtower.png2014-08-08 16:59 864  
[IMG]wizardtowerBackground.png2014-08-08 18:10 1.6K 
[IMG]workerGrandma.png2013-12-29 00:02 534  
[IMG]wrathContract.png2014-03-31 21:57 5.1K 
[IMG]wrathCookie.png2013-12-29 00:02 4.8K 
[IMG]wrinkler.png2013-12-29 00:02 5.8K 
[IMG]wrinklerBits.png2015-04-15 03:51 8.1K 
[IMG]wrinklerBitsOld.png2013-12-29 00:02 6.4K 
[IMG]wrinklerBlink.png2021-08-15 08:27 2.2K 
[IMG]wrinklerGooglies.png2021-08-15 08:04 2.2K 
[IMG]wrinklerShadow.png2021-08-12 07:19 1.4K 
[PARENTDIR]Parent Directory  -  
[IMG]AQWorlds_CookieClicker_300x40.png2023-03-08 10:31 31K 
[IMG]BGgarden.jpg2018-03-08 23:42 21K 
[IMG]BGgrimoire.jpg2018-03-08 21:17 20K 
[IMG]BGmarket.jpg2020-08-22 19:08 23K 
[IMG]BGpantheon.jpg2018-03-08 21:13 25K 
[   ]Thumbs.db2017-11-24 00:23 1.9M 
[IMG]alchemylab.png2013-12-28 23:56 820  
[IMG]alchemylabBackground.png2013-12-28 23:56 472  
[IMG]alteredGrandma.png2013-12-28 23:56 470  
[IMG]alternateGrandma.png2020-10-29 12:32 1.6K 
[IMG]antiGrandma.png2013-12-28 23:56 526  
[IMG]antimattercondenser.png2013-12-28 23:56 666  
[IMG]antimattercondenserBackground.png2013-12-28 23:56 966  
[IMG]aqworldsbanner.jpg2013-12-29 16:33 29K 
[IMG]ascendBox.png2015-12-20 11:28 22K 
[IMG]ascendInfo.png2015-12-20 11:29 11K 
[IMG]ascendSlot.png2015-04-17 10:36 14K 
[IMG]ascendWisp.png2014-08-25 07:44 42K 
[IMG]ascendedBakingPod.png2013-12-28 23:56 1.7K 
[IMG]bank.png2014-08-08 16:58 501  
[IMG]bankBackground.png2014-08-08 12:53 2.2K 
[IMG]bankGrandma.png2014-08-08 17:59 614  
[IMG]bgBW.jpg2022-02-09 08:54 69K 
[IMG]bgBlack.jpg2022-02-09 08:40 59K 
[IMG]bgBlue.jpg2022-02-09 08:31 85K 
[IMG]bgCandy.jpg2022-02-09 12:55 100K 
[IMG]bgChoco.jpg2022-02-09 08:36 82K 
[IMG]bgChocoDark.jpg2022-02-09 08:36 66K 
[IMG]bgCoarse.jpg2022-02-09 17:19 79K 
[IMG]bgFoil.jpg2022-02-09 17:47 189K 
[IMG]bgGold.jpg2022-02-09 08:47 92K 
[IMG]bgMint.jpg2022-02-09 09:41 79K 
[IMG]bgMoney.jpg2014-03-31 23:00 69K 
[IMG]bgMoneyChart.jpg2014-03-31 23:40 9.7K 
[IMG]bgPaint.jpg2022-02-09 18:03 100K 
[IMG]bgPink.jpg2022-02-09 08:33 70K 
[IMG]bgPurple.jpg2022-02-09 10:18 92K 
[IMG]bgRed.jpg2022-02-09 08:39 91K 
[IMG]bgSilver.jpg2022-02-09 08:50 92K 
[IMG]bgSky.jpg2022-02-09 10:11 87K 
[IMG]bgSnowy.jpg2022-02-09 08:45 107K 
[IMG]bgSpectrum.jpg2022-02-09 09:56 58K 
[IMG]bgStars.jpg2022-02-09 06:58 61K 
[IMG]bgWhite.jpg2022-02-09 08:41 41K 
[IMG]bgYellowBlue.jpg2022-02-09 10:16 99K 
[IMG]blackGradient.png2013-12-28 23:56 561  
[IMG]blackGradientLeft.png2015-12-20 14:19 1.2K 
[IMG]blackGradientSmallTop.png2014-08-14 22:21 971  
[IMG]bracketPanelLeftS.png2015-12-12 19:05 2.2K 
[IMG]bracketPanelRightS.png2015-12-12 19:05 2.3K 
[IMG]brainyGrandma.png2021-12-25 14:54 1.6K 
[IMG]brokenCookie.png2015-10-25 03:35 36K 
[IMG]brokenCookieHalo.png2014-08-15 01:04 22K 
[IMG]brownStripes.png2018-08-06 05:35 2.0K 
[IMG]brownStripesLeftEdge.png2018-08-06 04:57 1.1K 
[IMG]buildings.png2023-03-23 02:19 44K 
[IMG]bunnies.png2014-04-23 01:46 23K 
[IMG]bunnyGrandma.png2014-05-15 22:13 713  
[IMG]buttonTile.jpg2013-12-29 16:33 7.6K 
[IMG]caramelWave.png2013-12-28 23:56 11K 
[IMG]chancemaker.png2017-07-30 21:16 1.5K 
[IMG]chancemakerBackground.png2017-07-30 21:15 2.6K 
[IMG]chocolateMilkWave.png2013-12-28 23:57 10K 
[IMG]clayBG.jpg2017-06-12 06:40 21K 
[IMG]cloneGrandma.png2022-12-29 22:33 774  
[IMG]contract.png2014-03-31 21:50 4.8K 
[IMG]control.png2013-12-28 23:57 48K 
[IMG]cookieShadow.png2021-08-12 07:26 2.5K 
[IMG]cookieShower1.png2013-12-28 23:57 29K 
[IMG]cookieShower2.png2013-12-28 23:57 55K 
[IMG]cookieShower3.png2013-12-28 23:58 76K 
[IMG]cortex.png2021-12-25 07:19 5.9K 
[IMG]cortexBackground.png2021-12-25 05:09 3.9K 
[IMG]cosmicGrandma.png2013-12-28 23:58 616  
[IMG]cursor.png2015-10-19 00:01 2.2K 
[IMG]darkNoise.jpg2014-08-13 22:11 53K 
[IMG]darkNoise.png2013-12-28 23:58 1.7K 
[IMG]darkNoiseTopBar.jpg2014-08-14 02:22 8.3K 
[IMG]dashnetLogo.png2021-08-07 06:44 97K 
[IMG]discord.png2018-02-20 22:15 2.3K 
[IMG]dragon.png2018-10-17 02:45 6.1K 
[IMG]dragonBG.png2015-09-25 22:02 21K 
[IMG]dragonFrame.png2015-03-31 02:41 2.0K 
[IMG]dungeonDot.png2018-09-11 17:06 3.2K 
[IMG]dungeonFactory.png2013-12-28 23:58 2.3K 
[IMG]dungeonFoes.png2018-10-06 20:37 1.9K 
[IMG]dungeonHeroes.png2018-10-06 15:56 2.4K 
[IMG]dungeonIcons.png2013-12-28 23:58 4.3K 
[IMG]dungeonItems.png2018-09-18 21:38 1.4K 
[IMG]dungeonMapFactory.jpg2018-08-06 00:43 14K 
[IMG]dungeonOverlay.png2013-12-28 23:58 13K 
[IMG]dungeonPictos.png2018-10-07 11:21 1.9K 
[IMG]dungeonTiles.png2013-12-28 23:58 3.4K 
[IMG]easterEggs.png2014-04-23 02:06 6.4K 
[IMG]elfGrandma.png2013-12-28 23:58 622  
[IMG]empty.png2013-12-28 23:58 95  
[IMG]emptyFrame.png2015-08-28 07:01 3.5K 
[IMG]factory.png2013-12-28 23:58 477  
[IMG]factoryBackground.png2013-12-28 23:58 1.3K 
[IMG]farm.png2013-12-28 23:58 765  
[IMG]farmBackground.png2013-12-28 23:58 812  
[IMG]farmerGrandma.png2013-12-28 23:58 615  
[IMG]favicon.ico2013-09-02 18:44 318  
[IMG]featherLeft.png2015-12-13 00:27 2.9K 
[IMG]featherRight.png2015-12-13 00:27 2.9K 
[IMG]filler.png2014-04-11 22:27 953  
[IMG]fractalEngine.png2018-10-17 19:44 1.3K 
[IMG]fractalEngineBackground.png2018-10-17 19:47 4.4K 
[IMG]frameBorder.png2015-08-27 05:33 1.0K 
[IMG]frostedReindeer.png2013-12-28 23:58 9.7K 
[IMG]gardenPlants.png2018-04-15 07:14 20K 
[IMG]gardenPlots.png2018-04-08 20:41 9.6K 
[IMG]gardenTip.png2018-07-20 08:47 14K 
[IMG]girlscoutChip.png2013-12-28 23:58 751  
[IMG]girlscoutCrumb.png2013-12-28 23:58 738  
[IMG]girlscoutDoe.png2013-12-28 23:58 762  
[IMG]girlscoutLucky.png2013-12-28 23:58 754  
[IMG]glint.jpg2015-12-23 11:41 1.8K 
[IMG]glint.png2023-03-06 01:48 2.9K 
[IMG]goldCookie.png2013-12-28 23:58 4.0K 
[IMG]grandma.png2013-12-28 23:58 571  
[IMG]grandmaBackground.png2013-12-28 23:58 837  
[IMG]grandmas1.jpg2013-12-29 16:33 21K 
[IMG]grandmas2.jpg2013-12-29 16:33 17K 
[IMG]grandmas3.jpg2013-12-29 16:33 26K 
[IMG]grandmasGrandma.png2013-12-28 23:58 619  
[IMG]grimoireBG.png2017-06-30 07:29 25K 
[IMG]heartStorm.png2014-02-10 02:59 64K 
[IMG]hearts.png2014-02-10 02:54 23K 
[IMG]heavenRing1.jpg2015-12-20 08:37 4.0K 
[IMG]heavenRing2.jpg2015-12-20 08:37 4.0K 
[IMG]heavenlyMoney.png2015-05-14 09:16 1.1K 
[IMG]heraldFlag.png2018-10-09 18:47 3.6K 
[IMG]icon.ico2021-08-14 07:36 221K 
[IMG]icon.png2021-08-23 16:55 427K 
[IMG]icons.png2023-03-08 08:26 193K 
[IMG]idleverse.png2020-10-29 11:43 3.8K 
[IMG]idleverseBackground.png2020-10-29 11:25 2.4K 
[IMG]imperfectCookie.png2013-12-28 23:59 94K 
[IMG]infoBG.png2013-12-28 23:59 94  
[IMG]infoBGfade.png2013-12-28 23:59 276  
[IMG]javascriptconsole.png2020-06-15 06:08 1.0K 
[IMG]javascriptconsoleBackground.png2019-09-16 04:35 6.7K 
[IMG]levelUp.png2017-06-05 05:50 2.0K 
[IMG]linkDash.png2018-08-06 03:23 1.0K 
[IMG]linkPulse.gif2016-02-03 18:16 4.2K 
[IMG]linkPulse.png2014-08-24 11:41 1.6K 
[IMG]lockOff.png2019-09-16 05:06 1.2K 
[IMG]lockOn.png2019-09-16 05:06 1.2K 
[IMG]luckyGrandma.png2017-07-29 23:28 713  
[IMG]mapBG.jpg2013-12-29 16:33 13K 
[IMG]mapIcons.png2013-12-28 23:59 664  
[IMG]marbleBG.jpg2017-06-12 11:05 31K 
[IMG]marshmallows.png2013-12-28 23:59 2.6K 
[IMG]messageBG.png2022-08-06 03:00 30K 
[IMG]metaGrandma.png2018-10-18 22:00 1.6K 
[IMG]milk.png2013-12-29 00:00 6.3K 
[IMG]milkBanana.png2015-09-20 13:09 43K 
[IMG]milkBlack.png2015-10-14 12:19 47K 
[IMG]milkBlackcurrant.png2021-12-25 20:33 52K 
[IMG]milkBlood.png2015-10-14 12:13 62K 
[IMG]milkBlueFire.png2015-10-15 13:32 78K 
[IMG]milkBlueberry.png2015-09-20 13:09 42K 
[IMG]milkCaramel.png2015-09-20 13:09 41K 
[IMG]milkCherry.png2018-03-31 09:34 24K 
[IMG]milkChocolate.png2015-09-20 13:08 40K 
[IMG]milkCoconut.png2018-03-31 09:34 30K 
[IMG]milkCoffee.png2018-03-31 08:59 19K 
[IMG]milkDragonfruit.png2020-10-27 16:34 49K 
[IMG]milkFire.png2015-10-14 12:53 67K 
[IMG]milkGold.png2015-10-14 12:17 58K 
[IMG]milkGreenFire.png2015-10-15 13:31 71K 
[IMG]milkHazelnut.png2023-03-05 06:20 50K 
[IMG]milkHoney.png2017-07-30 02:14 21K 
[IMG]milkLicorice.png2020-08-22 19:55 38K 
[IMG]milkLime.png2015-09-20 13:09 42K 
[IMG]milkMaple.png2018-10-21 21:02 20K 
[IMG]milkMelon.png2021-12-25 20:31 57K 
[IMG]milkMint.png2019-09-11 03:06 40K 
[IMG]milkOrange.png2015-09-20 13:08 42K 
[IMG]milkPeach.png2023-03-05 06:16 44K 
[IMG]milkPlain.png2015-09-20 13:08 43K 
[IMG]milkRaspberry.png2015-09-20 13:08 40K 
[IMG]milkRose.png2020-10-27 15:47 56K 
[IMG]milkSoy.png2018-03-31 09:34 22K 
[IMG]milkSpiced.png2018-04-16 18:17 75K 
[IMG]milkStars.png2015-10-13 23:08 52K 
[IMG]milkStrawberry.png2015-09-20 13:10 40K 
[IMG]milkTea.png2018-03-31 09:06 19K 
[IMG]milkVanilla.png2015-09-20 13:11 43K 
[IMG]milkWave.png2013-12-29 00:00 16K 
[IMG]milkZebra.png2015-10-14 21:48 69K 
[IMG]mine.png2013-12-29 00:00 668  
[IMG]mineBackground.png2013-12-29 00:00 1.0K 
[IMG]minerGrandma.png2013-12-29 00:00 626  
[IMG]money.png2013-12-29 00:00 280  
[IMG]mysticBG.jpg2017-06-12 11:19 22K 
[IMG]nest.png2014-05-16 17:44 15K 
[IMG]orangeWave.png2013-12-29 00:01 11K 
[IMG]panelBG.png2015-04-02 16:57 27K 
[IMG]panelGradientBottom.png2015-10-08 08:43 1.0K 
[IMG]panelGradientLeft.png2015-10-08 08:43 1.0K 
[IMG]panelGradientRight.png2015-10-08 08:44 1.0K 
[IMG]panelGradientTop.png2015-10-08 08:43 1.0K 
[IMG]panelHorizontal.png2015-08-28 06:14 6.6K 
[IMG]panelMenu.png2014-08-24 01:03 19K 
[IMG]panelMenu2.png2015-04-18 11:59 36K 
[IMG]panelMenu3.png2015-08-28 15:07 49K 
[IMG]panelVertical.png2015-08-28 06:14 7.0K 
[IMG]pantheonBG.png2017-06-30 07:51 25K 
[IMG]parade.png2023-03-08 08:36 3.9K 
[IMG]patreon.png2018-10-10 10:03 2.4K 
[IMG]perfectCookie.png2013-12-29 00:01 96K 
[IMG]pieFill.png2015-10-16 01:43 11K 
[IMG]playsaurusLogo.png2021-08-12 04:09 90K 
[IMG]playsaurusbanner1.png2022-06-23 15:08 38K 
[IMG]playsaurusbanner2.png2022-06-23 14:43 41K 
[IMG]playsaurusbanner3.png2022-06-22 19:12 38K 
[IMG]pointGlow.gif2022-05-05 13:34 2.3K 
[IMG]pointyLad.png2018-04-14 20:55 1.8K 
[IMG]portal.png2013-12-29 00:01 1.0K 
[IMG]portalBackground.png2013-12-29 00:01 3.6K 
[IMG]portraitChip.png2013-12-29 00:01 940  
[IMG]portraitCrumb.png2013-12-29 00:01 967  
[IMG]portraitDoe.png2013-12-29 00:01 1.0K 
[IMG]portraitLucky.png2013-12-29 00:01 1.0K 
[IMG]prestigeBar.jpg2015-12-20 17:56 2.4K 
[IMG]prestigeBarCap.png2015-12-20 17:58 1.0K 
[IMG]prism.png2014-02-13 12:48 782  
[IMG]prismBackground.png2014-02-13 10:31 701  
[IMG]rainbowGrandma.png2014-02-13 11:07 626  
[IMG]raspberryWave.png2013-12-29 00:02 10K 
[IMG]roundFrameBorder.png2015-08-27 08:49 1.1K 
[IMG]roundedPanelBG.png2015-12-11 01:01 7.1K 
[IMG]roundedPanelBGS.png2015-12-12 18:45 21K 
[IMG]roundedPanelLeft.png2015-12-11 00:59 2.5K 
[IMG]roundedPanelLeftS.png2015-12-12 18:44 2.4K 
[IMG]roundedPanelRight.png2015-12-11 01:00 2.5K 
[IMG]roundedPanelRightS.png2015-12-12 18:44 2.6K 
[IMG]santa.png2023-03-22 22:58 11K 
[IMG]scriptGrandma.png2019-09-03 16:43 693  
[IMG]selectTarget.png2022-05-07 04:07 2.1K 
[IMG]sentientFurnace.png2013-12-29 00:02 1.6K 
[IMG]shadedBorders.png2015-11-01 19:55 12K 
[IMG]shadedBordersGold.png2013-12-29 00:02 2.3K 
[IMG]shadedBordersRed.png2013-12-29 00:02 2.3K 
[IMG]shadedBordersSoft.png2015-11-11 06:51 3.4K 
[IMG]shimmeringVeil.png2023-03-06 01:45 24K 
[IMG]shine.png2013-12-29 00:02 6.0K 
[IMG]shineGold.png2017-06-30 18:07 7.8K 
[IMG]shineRed.png2017-06-30 18:09 7.8K 
[IMG]shineSpoke.png2015-10-31 12:28 6.2K 
[IMG]shinyWinkler.png2021-08-15 07:19 7.4K 
[IMG]shinyWrinkler.png2015-04-15 07:11 5.8K 
[IMG]shinyWrinklerBits.png2015-04-15 07:10 7.9K 
[IMG]shipment.png2013-12-29 00:02 507  
[IMG]shipmentBackground.png2013-12-29 00:02 923  
[IMG]smallCookies.png2013-12-29 00:02 14K 
[IMG]smallDollars.png2014-04-01 18:15 5.5K 
[IMG]snow.jpg2013-12-29 16:33 47K 
[IMG]snow2.jpg2013-12-29 16:33 71K 
[IMG]sparkles.jpg2015-10-13 12:54 16K 
[IMG]spellBG.png2017-06-08 09:54 33K 
[IMG]spinnyBig.png2015-10-24 02:38 5.3K 
[IMG]spinnySmall.png2015-10-24 02:38 2.7K 
[IMG]spookyCookie.png2013-12-29 00:02 4.3K 
[IMG]starbg.jpg2014-08-03 05:54 188K 
[IMG]storeTile.jpg2013-12-29 16:33 18K 
[IMG]sugarLump.png2017-06-05 05:27 1.1K 
[IMG]temple.png2014-08-08 16:59 752  
[IMG]templeBackground.png2014-08-08 11:02 2.5K 
[IMG]templeGrandma.png2014-08-08 18:00 742  
[IMG]timemachine.png2013-12-29 00:02 773  
[IMG]timemachineBackground.png2013-12-29 00:02 1.2K 
[IMG]timerBars.png2014-02-10 05:26 2.3K 
[IMG]tinyEyeEmpty.png2021-08-25 15:02 488  
[IMG]tinyEyeOff.png2021-08-25 15:02 332  
[IMG]tinyEyeOn.png2021-08-25 15:07 516  
[IMG]tinyglobe.gif2022-06-28 09:22 11K 
[IMG]tinyglobeSheet.gif2022-06-29 14:00 10K 
[IMG]transmutedGrandma.png2013-12-29 00:02 449  
[IMG]turnInto.png2018-03-13 16:34 1.5K 
[IMG]upgradeFrame.png2016-04-19 07:17 20K 
[IMG]upgradeFrameHeavenly.png2014-08-24 08:51 2.7K 
[IMG]upgradeFrameOld.png2015-04-18 10:45 7.3K 
[IMG]upgradeFrameShadowOld.png2015-05-14 09:06 7.0K 
[IMG]upgradeHighlight.jpg2015-10-15 18:08 4.3K 
[IMG]upgradeHighlight.png2015-10-15 18:08 5.4K 
[IMG]upgradeSelector.png2015-10-14 22:52 1.0K 
[IMG]weeHoodie.png2015-10-24 09:51 2.6K 
[IMG]winkler.png2021-08-15 07:19 7.7K 
[IMG]winterFrame.png2015-03-30 23:49 1.9K 
[IMG]winterWinkler.png2021-08-15 07:46 7.1K 
[IMG]winterWrinkler.png2013-12-29 00:02 5.8K 
[IMG]witchGrandma.png2014-08-08 18:00 779  
[IMG]wizardtower.png2014-08-08 16:59 864  
[IMG]wizardtowerBackground.png2014-08-08 18:10 1.6K 
[IMG]workerGrandma.png2013-12-29 00:02 534  
[IMG]wrathContract.png2014-03-31 21:57 5.1K 
[IMG]wrathCookie.png2013-12-29 00:02 4.8K 
[IMG]wrinkler.png2013-12-29 00:02 5.8K 
[IMG]wrinklerBits.png2015-04-15 03:51 8.1K 
[IMG]wrinklerBitsOld.png2013-12-29 00:02 6.4K 
[IMG]wrinklerBlink.png2021-08-15 08:27 2.2K 
[IMG]wrinklerGooglies.png2021-08-15 08:04 2.2K 
[IMG]wrinklerShadow.png2021-08-12 07:19 1.4K 
[IMG]you.png2023-02-23 00:50 1.9K 
[IMG]youAddons.png2023-03-22 22:36 5.3K 
[IMG]youBackground.png2023-02-23 00:47 4.7K 
[IMG]youLight.png2023-02-24 01:46 2.6K 

Apache/2.4.52 (Ubuntu) Server at orteil.dashnet.org Port 80
diff --git a/img/javascriptconsole.png b/img/javascriptconsole.png index bfae81aa..dca2d8e1 100644 Binary files a/img/javascriptconsole.png and b/img/javascriptconsole.png differ diff --git a/img/mapTiles.png b/img/mapTiles.png deleted file mode 100644 index 3971ce09..00000000 Binary files a/img/mapTiles.png and /dev/null differ diff --git a/img/messageBG.png b/img/messageBG.png new file mode 100644 index 00000000..90156c68 Binary files /dev/null and b/img/messageBG.png differ diff --git a/img/milkHazelnut.png b/img/milkHazelnut.png new file mode 100644 index 00000000..d28de442 Binary files /dev/null and b/img/milkHazelnut.png differ diff --git a/img/milkPeach.png b/img/milkPeach.png new file mode 100644 index 00000000..095dc876 Binary files /dev/null and b/img/milkPeach.png differ diff --git a/img/mineIcon.png b/img/mineIcon.png deleted file mode 100644 index f63a6df1..00000000 Binary files a/img/mineIcon.png and /dev/null differ diff --git a/img/mineIconOff.png b/img/mineIconOff.png deleted file mode 100644 index bca22a04..00000000 Binary files a/img/mineIconOff.png and /dev/null differ diff --git a/img/mysteriousHero.png b/img/mysteriousHero.png deleted file mode 100644 index ecd58737..00000000 Binary files a/img/mysteriousHero.png and /dev/null differ diff --git a/img/mysteriousOpponent.png b/img/mysteriousOpponent.png deleted file mode 100644 index 52cadb53..00000000 Binary files a/img/mysteriousOpponent.png and /dev/null differ diff --git a/img/parade.png b/img/parade.png new file mode 100644 index 00000000..fc564bed Binary files /dev/null and b/img/parade.png differ diff --git a/img/portalIcon.png b/img/portalIcon.png deleted file mode 100644 index 224159d6..00000000 Binary files a/img/portalIcon.png and /dev/null differ diff --git a/img/portalIconOff.png b/img/portalIconOff.png deleted file mode 100644 index 99cbe9fa..00000000 Binary files a/img/portalIconOff.png and /dev/null differ diff --git a/img/prismIcon.png b/img/prismIcon.png deleted file mode 100644 index d3c9f570..00000000 Binary files a/img/prismIcon.png and /dev/null differ diff --git a/img/prismIconOff.png b/img/prismIconOff.png deleted file mode 100644 index 934d3eca..00000000 Binary files a/img/prismIconOff.png and /dev/null differ diff --git a/img/rawSentientCookie.png b/img/rawSentientCookie.png deleted file mode 100644 index 448b909b..00000000 Binary files a/img/rawSentientCookie.png and /dev/null differ diff --git a/img/santa.png b/img/santa.png index 69c98323..79ab98ee 100644 Binary files a/img/santa.png and b/img/santa.png differ diff --git a/img/shimmeringVeil.png b/img/shimmeringVeil.png new file mode 100644 index 00000000..3847f45f Binary files /dev/null and b/img/shimmeringVeil.png differ diff --git a/img/shipmentIcon.png b/img/shipmentIcon.png deleted file mode 100644 index f8fbb887..00000000 Binary files a/img/shipmentIcon.png and /dev/null differ diff --git a/img/shipmentIconOff.png b/img/shipmentIconOff.png deleted file mode 100644 index e0d55964..00000000 Binary files a/img/shipmentIconOff.png and /dev/null differ diff --git a/img/sugarBunny.png b/img/sugarBunny.png deleted file mode 100644 index b55754c4..00000000 Binary files a/img/sugarBunny.png and /dev/null differ diff --git a/img/timemachineIcon.png b/img/timemachineIcon.png deleted file mode 100644 index 9017b4fe..00000000 Binary files a/img/timemachineIcon.png and /dev/null differ diff --git a/img/timemachineIconOff.png b/img/timemachineIconOff.png deleted file mode 100644 index 25988c9a..00000000 Binary files a/img/timemachineIconOff.png and /dev/null differ diff --git a/img/you.png b/img/you.png new file mode 100644 index 00000000..d2db8a2e Binary files /dev/null and b/img/you.png differ diff --git a/img/youAddons.png b/img/youAddons.png new file mode 100644 index 00000000..4859ac81 Binary files /dev/null and b/img/youAddons.png differ diff --git a/img/youBackground.png b/img/youBackground.png new file mode 100644 index 00000000..0641474f Binary files /dev/null and b/img/youBackground.png differ diff --git a/img/youLight.png b/img/youLight.png new file mode 100644 index 00000000..15ec6bac Binary files /dev/null and b/img/youLight.png differ diff --git a/index.html b/index.html index f1e7380a..a291e7de 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@ Cookie Clicker @@ -37,13 +37,13 @@ - - + + @@ -69,7 +69,7 @@
-
Cookie Clicker™ © Orteil, 2022 - DashNet
+
Cookie Clicker™ © Orteil, 2023 - DashNet
twitter
tumblr
Discord
@@ -246,14 +246,14 @@
- + - +
- +
diff --git a/loc/CS.js b/loc/CS.js index 04d833d3..7ca9c351 100644 --- a/loc/CS.js +++ b/loc/CS.js @@ -231,6 +231,8 @@ AddLanguage('CS','czech',{ "Licorice milk": "Lékořicové mléko", "Rose milk": "Růžové mléko", "Dragonfruit milk": "Pitayové mléko", + "Peach milk": "Broskvové mléko", + "Hazelnut milk": "Lískooříškové mléko", "Info": "/", "About": "O nás", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker je hra na bázi javascriptu od %1 a %2.", @@ -258,8 +260,10 @@ AddLanguage('CS','czech',{ "Load from file": "Načíst ze souboru", "Use this to keep backups on your computer": "Tímto budete uchovávat zálohy na svém počítači", "Export save": "Exportovat uložení", + "Export": "/", "This is your save code.
Copy it and keep it somewhere safe!": "Toto je kód vašeho uložení.
Zkopírujte si ho a uchovávejte někde v bezpečí!", "Import save": "Importovat uložení", + "Import": "/", "Please paste in the code that was given to you on save export.": "Prosím vložte kód, který jste dostali při exportování uložené pozice.", "Game saved": "Hra uložena", "Game loaded": "Hra načtena", @@ -609,6 +613,7 @@ AddLanguage('CS','czech',{ "Reality Bending": "Ohnutí reality", "Dragon Orbs": "Dračí koule", "Supreme Intellect": "Nejvyšší intelekt", + "Dragon Guts": "Dračí vnitřnosti", "News :": "Novinky :", "Ticker (grandma)": [ "Navlhlé keksy.", @@ -743,6 +748,11 @@ AddLanguage('CS','czech',{ "astronomové varují před driftem trajektorie kortexového pekaře, obávají se budoucích čelních kolizí s následkem nákladných otřesů mozku.", "naháněči kortexových pekařů laskavě připomínají zaměstnancům, že kortexoví pekaři jsou hmotným majetkem pekárny a neměli by být častováni přezdívkami." ], + "Ticker (You)": [ + "osobností roku jste letos opět vy! Jak nečekané!", + "mohou vám místní restaurace podávat maso z klonů? Naše lahodné vyšetřování následuje po dnešních zprávách.", + "milovaný sušenkový magnát, o němž šílený fanoušek mylně prohlásil, že byl udupán k smrti, naštěstí se ukázalo, že se jedná o uprchlý klon, který byl omylem zaměněn za originál." + ], "Ticker (Halloween)": [ "pohanské rituály na vzestupu - děti po celém světě se oblékají do podivných kostýmů a vydírají obyvatele kvůli sladkostem.", "děti na celém světě jsou \"ztracené a zmatené\" poté, co byly veškeré halloweenské sladkosti nahrazeny keksy.", @@ -1140,6 +1150,14 @@ AddLanguage('CS','czech',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Tyto umělé mozky o velikosti planety jsou schopné zhmotnit sny o keksech. Čas a prostor jsou nepodstatné. Realita je svévolná.", "[Cortex baker business name]Think tank": "Think-tank", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Existuje jen omezený počet způsobů, jak dosáhnout vyššího zisku. Nebo ne? Najměte si ty nejgeniálnější experty v celém známém vesmíru a nechte je, ať si pro vás namáhají mozky!", + "You": "Vy", + "%1 You": [ + "%1 Vy", + "%1 Vy" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Důvodem všech těchto sušenek jste vy sami. Říkáte si, že kdyby vás bylo víc, možná byste vydělali ještě víc.", + "[You business name]You": "Vy", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Vaše podnikání je tak skvělé, jak jen může být. Jediný skutečný způsob, jak ji zlepšit, je zlepšit sám sebe - a stát se nejlepším generálním ředitelem, jakého kdy tento svět viděl.", "CpS": "K/s", "cookies/click": "keksy/klik", "%1 CpS": "%1 K/s", @@ -1218,6 +1236,7 @@ AddLanguage('CS','czech',{ "Wrinklers appear %1 times as fast.": "Vrubouni se objevují %1 times rychleji.", "Wrinklers spawn much more frequently.": "Vrubouni se objevují mnohem častěji.", "Wrinklers explode into %1% more cookies.": "Vrubouni vybuchnou do %1% more cookies.", + "Wrinklers digest %1% more cookies.": "Vrásky tráví %1% více cookies.", "Unlocks... something.": "Odemyká… něco.", "In the festive hat, you find...": "Ve slavnostním klobouku nacházíte…", "a festive test tube
and %1.": "slavnostní zkumavka
a %1.", @@ -1296,6 +1315,7 @@ AddLanguage('CS','czech',{ "Auto": "Automaticky", "Loop": "Smyčka", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Odemkne se background selector, který vám umožní vybrat pozadí hry.
Přichází v celé škále základních příchutí.", + "Contains more wallpapers for your background selector.": "Obsahuje další tapety pro výběr pozadí.", "Lets you pick which wallpaper to display.": "Umožňuje vybrat tapetu, která se má zobrazit.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Toto je první nebeská aktualizace; tato aktualizace odemyká systém Heavenly chips.
Po každém vzestupu se sušenky, které jste vytvořili ve svém minulém životě, změní na heavenly chips a prestige.
Heavenly chips můžete utrácet za celou řadu permanentních transcendentálních aktualizací.
Vaše prestige level vám také poskytne permanentní +1% CpS v příslušné úrovni (CpS - počet sušenek za sekundu).", "You can attract %1 more wrinklers.": "Můžete přitáhnout %1 more wrinklers.", @@ -1381,6 +1401,39 @@ AddLanguage('CS','czech',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Všechny zlaté keksy jsou červené keksy s větší šancí negativního účinku.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Vrubouny se objeví %1% rychleji a spolykají %2% víc keksů.", "Effect is only active when your total amount of buildings ends with 0.": "Účinek je aktivní jen když počet tvých budov končí na 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Nyní můžete posílat a přijímat dárky od ostatních hráčů pomocí tlačítek v pravém horním rohu nabídky %1.", + "You need at least %1 cookies in bank to send and receive gifts.": "K odesílání a přijímání dárků potřebujete mít v bance alespoň %1 sušenek.", + "Send a gift": "Odeslat dárek", + "Send": "Odeslat", + "Redeem a gift": "Uplatnit dárek", + "Redeem": "Uplatnit", + "paste code...": "nalepit kód...", + "Wrap": "Zabalit", + "Done": "Hotovo", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Kliknutím na \"%1\" se vygeneruje textový kód, který můžete poslat ostatním. Dárkové kódy může kdokoli uplatnit vícekrát, ale jejich platnost vyprší po jednom nebo dvou dnech. Za hodinu můžete vygenerovat pouze jeden dárkový kód. Po odeslání se hra uloží.", + "You may put between %1 and %2 cookies in the gift box.": "Do dárkové krabice můžete vložit %1 až %2 sušenek.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Můžete nechat poznámku. Nebuďte hrubý!
Maximálně %1 řádků a %2 znaků.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Po uplatnění dárku budete muset počkat hodinu, než budete moci uplatnit další. Po uplatnění sa vaše hra uloží.", + "Box design": "Dizajn krabice", + "Icon": "Ikona", + "Here's your gift code!
Make sure to copy it so you can share it.": "Zde je váš dárkový kód!
Ujistěte se, že jste si ho zkopírovali, abyste ho mohli sdílet.", + "Code expired.": "Platnost kódu vypršela.", + "Invalid code.": "Neplatný kód.", + "Gift redeemed!
Inside, you find:": "Dárek je uplatněn!
Uvnitř najdete:", + "There's a note too!": "Je tam taky poznámka!", + "How nice!": "Jak milé!", + "You've already sent or redeemed a gift recently.": "Nedávno jste již odeslali nebo uplatnili dárek.", + "Customize": "Přizpůsobit", + "Customize your clones": "Přizpůsobit vaše klony", + "Sprung from your very DNA. Shape them in your image!": "Pochází z vaší DNA. Vytvořte si je k obrazu svému!", + "Hair": "Vlasy", + "Hair color": "Barva vlasů", + "Skin color": "Barva kůže", + "Head shape": "Tvar hlavy", + "Face": "Tvář", + "Extra": "/", + "Everyone's here.": "Všichni jsou tady.", + "Won't you have some cookies too?": "Nedáte si také nějaké sušenky?", "Achievement unlocked": "Dosažená úroveň odemčena", "Make %1 just from %2.": "Vytvořte %1 pouze z %2.", "Bake %1 in one ascension.": "Upečte %1 při jednom vzestupu.", @@ -1399,6 +1452,7 @@ AddLanguage('CS','czech',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Získejte alespoň 1 of the most expensive object, 2 of the second-most expensive, 4 of the next a tak dále (omezeno na %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Získejte alespoň 10 of the most expensive object, 20 of the second-most expensive, 30 of the next a tak dále.", "Click a golden cookie.": "Klikněte na golden cookie.", + "Click a wrath cookie.": "Klikněte na sušenku hněvu.", "Click %1.": "Klikněte na %1.", "Hack in some cookies.": "Seberte nějaké sušenky.", "Click really, really fast.": "Klikejte opravdu velmi rychle.", @@ -1406,6 +1460,7 @@ AddLanguage('CS','czech',{ "Own %1.": "Vlastní %1.", "Purchase %1.": "Nákup %1.", "Dunk the cookie.": "Namočte sušenku.", + "Trigger the grandmapocalypse for the first time.": "Spusťte poprvé babičkapokalypsu.", "Appease the grandmatriarchs at least once.": "Alespoň once archimatrony uklidněte.", "Appease the grandmatriarchs at least %1 times.": "Alespoň %1 times archimatrony uklidněte.", "Declare a covenant with the grandmatriarchs.": "Uzavřete smlouvu s archimatronami", @@ -1437,6 +1492,7 @@ AddLanguage('CS','czech',{ "Own %1 upgrades and %2 buildings.": "Vlastněte aktualizace %1 a stavby %2.", "Own %1 heavenly upgrades.": "Získejte %1 nebeských vylepšení.", "Burst the near-extinct shiny wrinkler.": "Otevřete téměř vyhynulého shiny wrinkler.", + "Poke a wrinkler %1 times without killing it.": "Šťouchněte do vrásčitce %1krát, aniž byste ji zabili.", "Click a golden cookie less than 1 second after it spawns.": "Klikněte na zlatou sušenku less than 1 second after it spawns.", "Click a golden cookie less than 1 second before it dies.": "Klikněte na zlatou sušenku less than 1 second before it dies.", "Harvest %1 coalescing sugar lumps.": "Sklizeň %1 coalescing sugar lumps.", @@ -1464,9 +1520,14 @@ AddLanguage('CS','czech',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Nechte své zisky na akciovém trhu překonat hodnotu a whole year CpS ($%1).", "Unlock the highest-tier stock market headquarters.": "Odemkněte highest-tier ústředí akciových trhů s nejvyšší úrovní.", "Have your stock market profits surpass $%1.": "Nechte své zisky na akciovém trhu překonat hodnotu $%1.", + "Take out a loan and ascend before incurring the CpS penalty.": "Vezměte si půjčku a vystoupejte nahoru, než vám bude uložena sankce CpS.", "Own %1 kitten upgrades.": "Získejte do vlastnictví aktualizace koťat %1.", "Find the forgotten madeleine.": "Najděte forgotten madeleine.", "Click one of Santa's helper grandmas during Christmas season.": "Klikněte během vánočního období na jednu ze Santových babiček pomocnic.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Uplatněte dárkový kód sušenky od přítele (nebo od sebe, to nesoudíme).", + "Shape your clones to resemble %1.": "Vytvarujte své klony tak, aby se podobaly %1.", + "Clone": "Klon", + "Unlock the final building.": "Odemkněte poslední budovu.", "Frenzy": "/", "Elder frenzy": "Starší Frenzy", "Click frenzy": "Klikněte na Frenzy", @@ -1486,6 +1547,7 @@ AddLanguage('CS','czech',{ "Sugar frenzy": "Cukrové šílenství (Frenzy)", "Loan %1": "Půjčka %1", "Loan %1 (interest)": "Půjčka %1 (úrok)", + "Gifted out": "Obdarovaný", "%1 Power!": "%1 Výkon!", "%1 Burden!": "%1 Zátež!", "Cookie production x%1 for %2!": "Produkce sušenek x%1 za %2!", @@ -1505,6 +1567,7 @@ AddLanguage('CS','czech',{ "You find %1% more golden cookies for the next %2.": "Můžete najít o %1% více zlatých sušenek v dalším %2.", "Spells backfire %1 times less for %2.": "Počet nepodařených kouzel %1krát nižší u %2.", "Spells backfire %1 times more for %2.": "Počet nepodařených kouzel %1krát vyšší u %2.", + "Can't send or receive gifts again for %1.": "Nelze znovu odesílat ani přijímat dárky pro %1.", "can be done once every %1": "je možné udělat každých %1", "usable again in %1": "znovu použitelné za %1", "+%1/s": "/", @@ -1832,6 +1895,9 @@ AddLanguage('CS','czech',{ "[STOCK 17 NAME]Great Minds": "Velké hlavy", "[STOCK 17 TYPE]Publicists": "Publicisté", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "%1's Pekárna", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "VY", "from %1": "od %1", "%1: currently worth $%2 per unit.": "%1: aktuální hodnota $%2 za jednotku.", "You currently own %1 (worth $%2).": "Aktuálně dlužíš %1 (hodnota $%2).", @@ -2711,6 +2777,62 @@ AddLanguage('CS','czech',{ "[Upgrade name 816]Web cookies": "Pavoučí keksy", "[Upgrade name 817]Steamed cookies": "Keksy na páře", "[Upgrade name 818]Deep-fried cookie dough": "Fritované keksové těsto", + "[Upgrade name 819]Wrapping paper": "Balící papír", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Sušenkové tyčinky", + "[Upgrade name 824]Nines": "Nines", + "[Upgrade name 825]Clone grandmas": "Klonované babičky", + "[Upgrade name 826]Cloning vats": "Klonovací kádě", + "[Upgrade name 827]Energized nutrients": "Energizované živiny", + "[Upgrade name 828]Stunt doubles": "Dvojníci kaskadérů", + "[Upgrade name 829]Clone recycling plant": "Závod na recyklaci klonů", + "[Upgrade name 830]Free-range clones": "Volné klony", + "[Upgrade name 831]Genetic tailoring": "Genetická úprava na míru", + "[Upgrade name 832]Power in diversity": "Síla v rozmanitosti", + "[Upgrade name 833]Self-betterment": "Sebezdokonalování", + "[Upgrade name 834]Source control": "Kontrola zdroje", + "[Upgrade name 835]United workforce": "Zjednocená pracovní síla", + "[Upgrade name 836]Safety patrols": "Bezpečnostní hlídky", + "[Upgrade name 837]Clone rights": "Klonovací práva", + "[Upgrade name 838]One big family": "Jedna veliká rodina", + "[Upgrade name 839]Fine-tuned body plans": "Vyladěné tělesné plány", + "[Upgrade name 840]Foam-tipped canes": "Hůlky s pěnovou špičkou", + "[Upgrade name 841]Self-driving tractors": "Samořídící traktory", + "[Upgrade name 842]Mineshaft supports": "Podpěry důlních šachet", + "[Upgrade name 843]Universal automation": "Univerzální automatizace", + "[Upgrade name 844]The big shortcake": "Velký dortík", + "[Upgrade name 845]Temple traps": "Chrámové pasti", + "[Upgrade name 846]Polymorphism": "Polymorfismus", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "U vašich dveří do 30 minut nebo vrácení peněz", + "[Upgrade name 848]The dose makes the poison": "Dávka dělá jed", + "[Upgrade name 849]A way home": "Cesta domů", + "[Upgrade name 850]Rectifying a mistake": "Náprava chyby", + "[Upgrade name 851]Candied atoms": "Kandované atomy", + "[Upgrade name 852]Lab goggles but like cool shades": "Laboratorní brýle, ale má rád chladné stíny", + "[Upgrade name 853]Gambler's fallacy fallacy": "Klam hazardního hráče Klam", + "[Upgrade name 854]The more they stay the same": "Čím více se nemění", + "[Upgrade name 855]Simulation failsafes": "Záchrany proti selhání při simulaci", + "[Upgrade name 856]The other routes to Rome": "Další trasy do Říma", + "[Upgrade name 857]Intellectual property theft": "Krádež duševního vlastnictví", + "[Upgrade name 858]Reading your clones bedtime stories": "Čtení pohádek svým klonům před spaním", + "[Upgrade name 859]Accelerated development": "Zrychlený vývoj", + "[Upgrade name 860]Peer review": "Vzájemné hodnocení", + "[Upgrade name 861]Fortune #020": "Fortuna #020", + "[Upgrade name 862]Personal biscuit": "Osobní sušenka", + "[Upgrade name 863]Unshackled glimmeringue": "Nespoutané záblesky", + "[Upgrade name 864]Unshackled You": "Nespoutaný Vy", + "[Upgrade name 865]Kitten strategists": "Kočičí stratégové", + "[Upgrade name 866]Baklavas": "Baklavy", + "[Upgrade name 867]Snowball cookies": "Sněhové koule sušenky", + "[Upgrade name 868]Sequilhos": "Sequilhos", + "[Upgrade name 869]Hazelnut swirlies": "Lískové oříšky swirlies", + "[Upgrade name 870]Spritz cookies": "Sušenky Spritz", + "[Upgrade name 871]Mbatata cookies": "Sušenky Mbatata", + "[Upgrade name 872]Springerles": "Bez pramenů", + "[Upgrade name 873]Undecillion fingers": "Undecillion prstů", + "[Upgrade name 874]Omniplast mouse": "Myš Omniplast", "[Achievement name 0]Wake and bake": "Probuďte se a pečte", "[Achievement name 1]Making some dough": "Příprava těsta", "[Achievement name 2]So baked right now": "Právě upečeno", @@ -3299,5 +3421,59 @@ AddLanguage('CS','czech',{ "[Achievement name 585]I'll rest when I'm dead": "Spát můžu v hrobě", "[Achievement name 586]What do you get for the baker who has everything": "Co dostanete za pekaře v plné palbě", "[Achievement name 587]Bottomless pit": "Bezedná jáma", - "[Achievement name 588]All the stars in heaven": "Všechny hvězdy na nebi" + "[Achievement name 588]All the stars in heaven": "Všechny hvězdy na nebi", + "[Achievement name 589]No time like the present": "Není lepší čas než přítomnost", + "[Achievement name 590]Can we get much higher": "Můžeme se dostat mnohem výš", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Rychlost je název hry (ne, nejmenuje se Cookie Clicker).", + "[Achievement name 592]Rainy day fund": "Fond pro deštivé dny", + "[Achievement name 593]And a little extra": "A něco navíc", + "[Achievement name 594]Grandmapocalypse": "Babičkapokalypsa", + "[Achievement name 595]Wrath cookie": "Sušenka hněvu", + "[Achievement name 596]No more room in hell": "V pekle už není místo", + "[Achievement name 597]In her likeness": "V její podobě", + "[Achievement name 598]Wrinkler poker": "Vráskový poker", + "[Achievement name 599]Septcentennial": "Septcentennial", + "[Achievement name 600]My own clone": "Můj vlastný klon", + "[Achievement name 601]Multiplicity": "Multiplicita", + "[Achievement name 602]Born for this job": "Zrozen pro tuhle práci", + "[Achievement name 603]Episode II": "Epizoda II", + "[Achievement name 604]Copy that": "Zkopírujte to", + "[Achievement name 605]Life finds a way": "Život si najde cestu", + "[Achievement name 606]Overcrowding": "Přeplněnost", + "[Achievement name 607]Strength in numbers": "Sila v číslech", + "[Achievement name 608]Army of me": "Moje armáda", + "[Achievement name 609]Know thyself": "Poznej sám sebe", + "[Achievement name 610]Didn't make sense not to live": "Nemělo smysl nežít", + "[Achievement name 611]Genetic bottleneck": "Genetické úzké hrdlo", + "[Achievement name 612]Despite everything, it's still you": "Navzdory všemu jsi to stále ty", + "[Achievement name 613]Everyone everywhere all at once": "Všichni všude najednou", + "[Achievement name 614]Self-made": "Vlastní výroba", + "[Achievement name 615]Reproducible results": "Reprodukovatelné výsledky", + "[Achievement name 616]That's all you": "To je vše, co jste", + "[Achievement name 617]Self-improvement": "Sebezdokonalení", + "[Achievement name 618]And now you're even older": "A teď jste dokonce starší", + "[Achievement name 619]Au naturel": "Přirozeně", + "[Achievement name 620]Dirt-rich": "Bohaté na nečistoty", + "[Achievement name 621]Bots build bots": "Boty vytvářejí boty", + "[Achievement name 622]Getting that bag": "Získání této tašky", + "[Achievement name 623]The leader is good, the leader is great": "Vůdce je dobrý, vůdce je skvělý", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Nemyslíte si, že by mohli použít... nemohla to být ma...", + "[Achievement name 625]Signed, sealed, delivered": "Podepsáno, zapečetěno, doručeno", + "[Achievement name 626]Sugar, spice, and everything nice": "Cukr, koření a všechno hezké", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Kansasu se už ani vzdáleně neblíží.", + "[Achievement name 628]I only meant to stay a while": "Chtěl jsem zůstat jen chvíli", + "[Achievement name 629]Not 20 years away forever": "Ne 20 let navždy", + "[Achievement name 630]Bright side of the Moon": "Světlá strana Měsíce", + "[Achievement name 631]Riding the Mersenne twister": "Jízda na Mersennově twisteru", + "[Achievement name 632]Divide and conquer": "Rozděl a panuj", + "[Achievement name 633]Pebcakes": "Pebcakes", + "[Achievement name 634]Greener on the other sides": "Zelenější na druhých stranách", + "[Achievement name 635]Where is my mind": "Kde je moje mysl", + "[Achievement name 636]Introspection": "Introspekce", + "[Achievement name 637]Debt evasion": "Vyhýbání se placení dluhů", + "[Achievement name 638]Oft we mar what's well": "Často zmaříme to, co je v pořádku", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Co nekliká", + "[Achievement name 641]All on deck": "Všichni na palubu", + "[Achievement name 642]A round of applause": "Potlesk" }); \ No newline at end of file diff --git a/loc/DE.js b/loc/DE.js index cb234077..ae909efa 100644 --- a/loc/DE.js +++ b/loc/DE.js @@ -231,6 +231,8 @@ AddLanguage('DE','german',{ "Licorice milk": "Lakritzmilch", "Rose milk": "Rosenmilch", "Dragonfruit milk": "Drachenfruchtmilch", + "Peach milk": "Pfirsichmilch", + "Hazelnut milk": "Haselnussmilch", "Info": "/", "About": "Über uns", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker ist ein Javascript-Spiel von %1 und %2.", @@ -258,8 +260,10 @@ AddLanguage('DE','german',{ "Load from file": "Aus Datei laden", "Use this to keep backups on your computer": "Verwende dies, um Backups auf deinem Computer aufzubewahren", "Export save": "Spielstand exportieren", + "Export": "Exportieren", "This is your save code.
Copy it and keep it somewhere safe!": "Das ist dein Speichercode.
Kopiere ihn und bewahre ihn irgendwo sicher auf!", "Import save": "Speicherstand importieren", + "Import": "Importieren", "Please paste in the code that was given to you on save export.": "Bitte füge den Code ein, den du beim Exportieren des Speicherstands erhalten hast.", "Game saved": "Spiel gespeichert", "Game loaded": "Spiel geladen", @@ -630,6 +634,7 @@ AddLanguage('DE','german',{ "Reality Bending": "Wirklichkeitsverbiegung", "Dragon Orbs": "Drachenkugeln", "Supreme Intellect": "Höchster Intellekt", + "Dragon Guts": "Dracheneingeweide", "News :": "Neuigkeiten:", "Ticker (grandma)": [ "Feuchte Kekse.", @@ -764,6 +769,11 @@ AddLanguage('DE','german',{ "Astronomen warnen vor dem Abdriften der Kortex-Baker-Bahn und befürchten, dass künftige Frontalzusammenstöße zu teuren Gehirnerschütterungen führen.", "Kortexbäcker/innen erinnern die Mitarbeiter/innen freundlich daran, dass Kortexbäcker/innen materielles Eigentum der Bäckerei sind und nicht mit Spitznamen bedacht werden sollten." ], + "Ticker (You)": [ + "Die Person des Jahres bist dieses Jahr wieder du! Wie unerwartet!", + "Könnte es sein, dass lokale Restaurants dir illegales Klonfleisch servieren? Unsere köstliche Berichterstattung folgt nach den Nachrichten von heute Abend.", + "Geliebter Keksmagnat, der fälschlicherweise von verrückten Fans zu Tode getrampelt wurde. Zum Glück stellte sich heraus, dass es sich um einen entkommenen Klon handelte, der mit dem Original verwechselt wurde." + ], "Ticker (Halloween)": [ "Heidnische Rituale sind auf dem Vormarsch, denn Kinder auf der ganzen Welt verkleiden sich in seltsamen Kostümen und erpressen Hauseigentümer um Süßigkeiten.", "Kinder auf der ganzen Welt \"verloren und verwirrt\", da alle Halloween-Leckereien durch Kekse ersetzt wurden.", @@ -1161,6 +1171,14 @@ AddLanguage('DE','german',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Diese künstlichen Gehirne von der Größe eines Planeten sind in der Lage, Kekse einfach ins Leben zu träumen. Zeit und Raum sind unwichtig. Die Realität ist willkürlich.", "[Cortex baker business name]Think tank": "Thinktank", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Es gibt nur wenige Möglichkeiten, wie du mehr Gewinn machen kannst. Oder doch nicht? Engagiere die brillantesten Experten des bekannten Universums und lass sie sich für dich das Hirn zermartern!", + "You": "Du", + "%1 You": [ + "%1 Du", + "%1 Du" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Du allein bist der Grund für all diese Kekse. Du denkst dir, wenn es mehr von dir gäbe, könntest du vielleicht noch mehr machen.", + "[You business name]You": "Du", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Dein Unternehmen ist so großartig, wie es nur sein kann. Die einzige Möglichkeit, es noch zu verbessern, ist, dich selbst zu verbessern - und der beste CEO zu werden, den die Welt je gesehen hat.", "CpS": "KpS", "cookies/click": "Kekse/Klick", "%1 CpS": "%1 KpS", @@ -1239,6 +1257,7 @@ AddLanguage('DE','german',{ "Wrinklers appear %1 times as fast.": "Falter erscheinen %1 mal so schnell.", "Wrinklers spawn much more frequently.": "Falter spawnen viel häufiger.", "Wrinklers explode into %1% more cookies.": "Falter explodieren zu %1% mehr Keksen.", + "Wrinklers digest %1% more cookies.": "Falter verschlingen%1% mehr Cookies.", "Unlocks... something.": "Schaltet... irgendetwas frei.", "In the festive hat, you find...": "In dem festlichen Hut findest du...", "a festive test tube
and %1.": "ein festliches Reagenzglas
und %1.", @@ -1317,6 +1336,7 @@ AddLanguage('DE','german',{ "Auto": "/", "Loop": "/", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Schaltet den Hintergrundselektor frei, mit dem du den Hintergrund des Spiels auswählen kannst.
Es gibt eine Vielzahl von Grundvarianten.", + "Contains more wallpapers for your background selector.": "Enthält mehr Hintergrundbilder für deine Hintergrundauswahl.", "Lets you pick which wallpaper to display.": "Lässt dich auswählen, welches Hintergrundbild angezeigt werden soll.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Dies ist das erste himmlische Upgrade; es schaltet das Himmlische Chips-System frei.
Jedes Mal, wenn du aufsteigst, werden die Kekse, die du in deinem vergangenen Leben gemacht hast, in himmlische Chips und Prestige umgewandelt.
Himmlische Chips können für eine Vielzahl von permanenten transzendentalen Upgrades ausgegeben werden.
Dein Prestigelevel gibt dir außerdem dauerhaft +1% KpS pro Level.", "You can attract %1 more wrinklers.": "Du kannst %1 weitere Falter anziehen.", @@ -1402,6 +1422,39 @@ AddLanguage('DE','german',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Alle goldenen Kekse sind Zorn-Kekse mit einer größeren Wahrscheinlichkeit für einen negativen Effekt.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Falter erscheinen %1% schneller und verdauen %2% mehr Kekse.", "Effect is only active when your total amount of buildings ends with 0.": "Der Effekt ist nur aktiv, wenn deine Gesamtanzahl an Gebäuden bei 0 endet.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Du kannst jetzt über die Schaltflächen oben rechts im %1-Menü Geschenke an andere Spieler senden und empfangen.", + "You need at least %1 cookies in bank to send and receive gifts.": "Du brauchst mindestens %1 Cookies in der Bank, um Geschenke zu senden und zu empfangen.", + "Send a gift": "Ein Geschenk senden", + "Send": "Senden", + "Redeem a gift": "Ein Geschenk einlösen", + "Redeem": "Einlösen", + "paste code...": "Code einfügen...", + "Wrap": "/", + "Done": "Fertig", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Wenn du auf \"%1\" klickst, wird ein Textcode generiert, den du an andere schicken kannst. Geschenkcodes können von jedem mehrfach eingelöst werden, verfallen aber nach ein oder zwei Tagen. Du kannst nur einen Geschenkcode pro Stunde erstellen. Dein Spiel wird nach dem Versenden gespeichert.", + "You may put between %1 and %2 cookies in the gift box.": "Du kannst zwischen %1 und %2 Kekse in die Geschenkbox legen.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Du kannst eine Notiz hinterlassen. Sei nicht unhöflich!
Maximal %1 Zeilen und %2 Zeichen.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Sobald du ein Geschenk eingelöst hast, musst du eine Stunde warten, bevor du ein weiteres einlösen kannst. Dein Spiel wird nach dem Einlösen gespeichert.", + "Box design": "Box-Design", + "Icon": "Symbol", + "Here's your gift code!
Make sure to copy it so you can share it.": "Hier ist dein Geschenkcode!
Versichere dich, dass du ihn kopierst, damit du ihn teilen kannst.", + "Code expired.": "Der Code ist abgelaufen.", + "Invalid code.": "Ungültiger Code.", + "Gift redeemed!
Inside, you find:": "Geschenk eingelöst!
Im Inneren findest du:", + "There's a note too!": "Es gibt auch eine Notiz!", + "How nice!": "Wie schön!", + "You've already sent or redeemed a gift recently.": "Du hast kürzlich bereits ein Geschenk verschickt oder eingelöst.", + "Customize": "Anpassen", + "Customize your clones": "Passe deine Klone an", + "Sprung from your very DNA. Shape them in your image!": "Sie entspringen deiner eigenen DNA. Gestalte sie nach deinem Bild!", + "Hair": "Haar", + "Hair color": "Haarfarbe", + "Skin color": "Hautfarbe", + "Head shape": "Kopfform", + "Face": "Gesicht", + "Extra": "/", + "Everyone's here.": "Alle sind hier.", + "Won't you have some cookies too?": "Willst du nicht auch ein paar Kekse haben?", "Achievement unlocked": "Erfolg freigeschaltet", "Make %1 just from %2.": "Backe %1 nur durch %2.", "Bake %1 in one ascension.": "Backe %1 in einem Aufstieg.", @@ -1420,6 +1473,7 @@ AddLanguage('DE','german',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Habe mindestens 1 des teuersten Objekts, 2 des zweitteuersten, 4 des nächsten und so weiter (Obergrenze bei %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Besitze mindestens 10 Stück vom teuersten Objekt, 20 Stück vom zweitteuersten, 30 Stück des nächsten und so weiter.", "Click a golden cookie.": "Klicke einen goldenen Keks an.", + "Click a wrath cookie.": "Klicke auf einen Zorn-Keks.", "Click %1.": "Klicke %1.", "Hack in some cookies.": "Hacke ein paar Kekse ins Spiel.", "Click really, really fast.": "Klicke wirklich, wirklich schnell.", @@ -1427,6 +1481,7 @@ AddLanguage('DE','german',{ "Own %1.": "Besitze %1.", "Purchase %1.": "Kaufe %1.", "Dunk the cookie.": "Tauche den Keks ein.", + "Trigger the grandmapocalypse for the first time.": "Löse die Omakalypse zum ersten Mal aus.", "Appease the grandmatriarchs at least once.": "Besänftige die Großmatriarchen wenigstens einmal.", "Appease the grandmatriarchs at least %1 times.": "Beschwöre die Großmatriarchen mindestens %1 Mal.", "Declare a covenant with the grandmatriarchs.": "Schließe einen Bund mit den Großmatriarchen.", @@ -1458,6 +1513,7 @@ AddLanguage('DE','german',{ "Own %1 upgrades and %2 buildings.": "Besitze %1 Upgrades und %2 Gebäude.", "Own %1 heavenly upgrades.": "Besitze %1 himmlische Upgrades.", "Burst the near-extinct shiny wrinkler.": "Lass den fast ausgestorbenen glänzenden Falter platzen.", + "Poke a wrinkler %1 times without killing it.": "Pikse einen Falter%1 Mal, ohne ihn zu töten.", "Click a golden cookie less than 1 second after it spawns.": "Klicke einen goldenen Keks weniger als 1 Sekunde nach dem Spawnen an.", "Click a golden cookie less than 1 second before it dies.": "Klicke einen goldenen Keks weniger als 1 Sekunde bevor er stirbt.", "Harvest %1 coalescing sugar lumps.": "Ernte %1 zusammenfließende Würfelzucker.", @@ -1485,9 +1541,14 @@ AddLanguage('DE','german',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Lass deine Börsengewinne ein ganzes Jahr von KpS ($%1) übertreffen.", "Unlock the highest-tier stock market headquarters.": "Schalte die höchste Stufe der Börsenzentrale frei.", "Have your stock market profits surpass $%1.": "Lass deine Börsengewinne $%1 übersteigen.", + "Take out a loan and ascend before incurring the CpS penalty.": "Nimm einen Kredit auf und steige auf, bevor du die CpS-Strafe zahlen musst.", "Own %1 kitten upgrades.": "Besitze %1 Kätzchen Upgrades.", "Find the forgotten madeleine.": "Finde das vergessene Madeleine.", "Click one of Santa's helper grandmas during Christmas season.": "Klicke in der Weihnachtszeit auf eine der helfenden Omas des Weihnachtsmanns.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Löse einen Keks-Geschenkcode von einem Freund oder einer Freundin ein (oder von dir selbst, wir urteilen nicht).", + "Shape your clones to resemble %1.": "Gestalte deine Klone so, dass sie %1 ähneln.", + "Clone": "Klon", + "Unlock the final building.": "Schalte das letzte Gebäude frei.", "Frenzy": "Rausch", "Elder frenzy": "Ältestenrausch", "Click frenzy": "Klickrausch", @@ -1507,6 +1568,7 @@ AddLanguage('DE','german',{ "Sugar frenzy": "Zuckerrausch", "Loan %1": "Kredit %1", "Loan %1 (interest)": "Kredit %1 (Zinsen)", + "Gifted out": "Ausgeschenkt", "%1 Power!": "%1 Kraft!", "%1 Burden!": "%1 Bürde!", "Cookie production x%1 for %2!": "Keks Produktion x%1 für %2!", @@ -1526,6 +1588,7 @@ AddLanguage('DE','german',{ "You find %1% more golden cookies for the next %2.": "Du findest %1% mehr goldene Kekse für die nächsten %2.", "Spells backfire %1 times less for %2.": "Zauber gehen %1 mal weniger für %2 nach hinten los.", "Spells backfire %1 times more for %2.": "Zauber gehen %1 mal weniger für %2 nach hinten los.", + "Can't send or receive gifts again for %1.": "Du kannst keine Geschenke mehr für %1 senden oder empfangen.", "can be done once every %1": "kann einmal alle %1 genutzt werden", "usable again in %1": "wieder einsetzbar in %1", "+%1/s": "/", @@ -1853,6 +1916,9 @@ AddLanguage('DE','german',{ "[STOCK 17 NAME]Great Minds": "Große Geister", "[STOCK 17 TYPE]Publicists": "Publizisten", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "%1's Bäckerei", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "DU", "from %1": "ab %1", "%1: currently worth $%2 per unit.": "%1: derzeitiger Wert $%2 pro Einheit.", "You currently own %1 (worth $%2).": "DU hast momentan %1 ($%2 wert).", @@ -2732,6 +2798,62 @@ AddLanguage('DE','german',{ "[Upgrade name 816]Web cookies": "Web-Cookies", "[Upgrade name 817]Steamed cookies": "Gedämpfte Kekse", "[Upgrade name 818]Deep-fried cookie dough": "Frittierter Keksteig", + "[Upgrade name 819]Wrapping paper": "Geschenkpapier", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Keksriegel", + "[Upgrade name 824]Nines": "Neuner", + "[Upgrade name 825]Clone grandmas": "Omas klonen", + "[Upgrade name 826]Cloning vats": "Klonierungsbottiche", + "[Upgrade name 827]Energized nutrients": "Energiereiche Nährstoffe", + "[Upgrade name 828]Stunt doubles": "Stuntdoubles", + "[Upgrade name 829]Clone recycling plant": "Klon-Recycling-Anlage", + "[Upgrade name 830]Free-range clones": "Freilaufende Klone", + "[Upgrade name 831]Genetic tailoring": "Genetischer Zuschnitt", + "[Upgrade name 832]Power in diversity": "Macht der Vielfalt", + "[Upgrade name 833]Self-betterment": "Selbstverbesserung", + "[Upgrade name 834]Source control": "Quellenkontrolle", + "[Upgrade name 835]United workforce": "Vereinigte Arbeitskräfte", + "[Upgrade name 836]Safety patrols": "Sicherheitspatrouillen", + "[Upgrade name 837]Clone rights": "Klonrechte", + "[Upgrade name 838]One big family": "Eine große Familie", + "[Upgrade name 839]Fine-tuned body plans": "Feinabgestimmte Körperpläne", + "[Upgrade name 840]Foam-tipped canes": "Stöcke mit Schaumstoffspitze", + "[Upgrade name 841]Self-driving tractors": "Selbstfahrende Traktoren", + "[Upgrade name 842]Mineshaft supports": "Bergwerksstützen", + "[Upgrade name 843]Universal automation": "Universelle Automatisierung", + "[Upgrade name 844]The big shortcake": "Der große Mürbeteigkuchen", + "[Upgrade name 845]Temple traps": "Tempelfallen", + "[Upgrade name 846]Polymorphism": "Polymorphismus", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "In 30 Minuten an deiner Haustür oder du bekommst dein Geld zurück", + "[Upgrade name 848]The dose makes the poison": "Die Dosis macht das Gift", + "[Upgrade name 849]A way home": "Ein Weg nach Hause", + "[Upgrade name 850]Rectifying a mistake": "Einen Fehler berichtigen", + "[Upgrade name 851]Candied atoms": "Kandierte Atome", + "[Upgrade name 852]Lab goggles but like cool shades": "Laborbrille, aber wie coole Sonnenbrillen", + "[Upgrade name 853]Gambler's fallacy fallacy": "Der Trugschluss des Spielers ist ein Trugschluss", + "[Upgrade name 854]The more they stay the same": "Je gleicher sie bleiben", + "[Upgrade name 855]Simulation failsafes": "Ausfallsicherheit der Simulation", + "[Upgrade name 856]The other routes to Rome": "Die anderen Wege nach Rom", + "[Upgrade name 857]Intellectual property theft": "Diebstahl von geistigem Eigentum", + "[Upgrade name 858]Reading your clones bedtime stories": "Deinen Klonen Gute-Nacht-Geschichten vorlesen", + "[Upgrade name 859]Accelerated development": "Beschleunigte Entwicklung", + "[Upgrade name 860]Peer review": "Peer review", + "[Upgrade name 861]Fortune #020": "Fortuna #020", + "[Upgrade name 862]Personal biscuit": "Persönlicher Keks", + "[Upgrade name 863]Unshackled glimmeringue": "Ungefesseltes Glimmeringue", + "[Upgrade name 864]Unshackled You": "Entfesselt dich", + "[Upgrade name 865]Kitten strategists": "Kätzchen-Strategen", + "[Upgrade name 866]Baklavas": "Baklavas", + "[Upgrade name 867]Snowball cookies": "Schneeball-Kekse", + "[Upgrade name 868]Sequilhos": "Sequilhos", + "[Upgrade name 869]Hazelnut swirlies": "Haselnuss-Swirlies", + "[Upgrade name 870]Spritz cookies": "Spritzgebäck", + "[Upgrade name 871]Mbatata cookies": "Mbatata-Kekse", + "[Upgrade name 872]Springerles": "Springerles", + "[Upgrade name 873]Undecillion fingers": "Sextillionen Finger", + "[Upgrade name 874]Omniplast mouse": "Omniplast Maus", "[Achievement name 0]Wake and bake": "Wecken und backen", "[Achievement name 1]Making some dough": "Etwas Teig machen", "[Achievement name 2]So baked right now": "So gebacken gerade jetzt", @@ -3320,5 +3442,59 @@ AddLanguage('DE','german',{ "[Achievement name 585]I'll rest when I'm dead": "Ich werde mich ausruhen, wenn ich tot bin", "[Achievement name 586]What do you get for the baker who has everything": "Was schenkt man dem Bäcker, der alles hat", "[Achievement name 587]Bottomless pit": "Bodenlose Grube", - "[Achievement name 588]All the stars in heaven": "Alle Sterne am Himmel" + "[Achievement name 588]All the stars in heaven": "Alle Sterne am Himmel", + "[Achievement name 589]No time like the present": "Nichts ist so gut wie die Gegenwart", + "[Achievement name 590]Can we get much higher": "Können wir noch viel höher hinaus?", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Die Geschwindigkeit ist der wichtigste Teil des Spiels (nein, es heißt nicht Cookie Clicker).", + "[Achievement name 592]Rainy day fund": "Regentagskasse", + "[Achievement name 593]And a little extra": "Und ein kleines Extra", + "[Achievement name 594]Grandmapocalypse": "Omakalypse", + "[Achievement name 595]Wrath cookie": "Zorn-Keks", + "[Achievement name 596]No more room in hell": "Kein Platz mehr in der Hölle", + "[Achievement name 597]In her likeness": "In ihrem Ebenbild", + "[Achievement name 598]Wrinkler poker": "Falterpoker", + "[Achievement name 599]Septcentennial": "Hundertjahrfeier", + "[Achievement name 600]My own clone": "Mein eigener Klon", + "[Achievement name 601]Multiplicity": "Vielfältigkeit", + "[Achievement name 602]Born for this job": "Geboren für diesen Job", + "[Achievement name 603]Episode II": "Episode II", + "[Achievement name 604]Copy that": "Verstanden", + "[Achievement name 605]Life finds a way": "Das Leben findet einen Weg", + "[Achievement name 606]Overcrowding": "Überbelegung", + "[Achievement name 607]Strength in numbers": "Stärke durch Quantität", + "[Achievement name 608]Army of me": "Ein-Mann-Armee", + "[Achievement name 609]Know thyself": "Kenne dich selbst", + "[Achievement name 610]Didn't make sense not to live": "Es machte keinen Sinn, nicht zu leben", + "[Achievement name 611]Genetic bottleneck": "Genetischer Engpass", + "[Achievement name 612]Despite everything, it's still you": "Trotz allem, du bist es immer noch", + "[Achievement name 613]Everyone everywhere all at once": "Everyone everywhere all at once", + "[Achievement name 614]Self-made": "Selbst gemacht", + "[Achievement name 615]Reproducible results": "Reproduzierbare Ergebnisse", + "[Achievement name 616]That's all you": "Das bist alles du", + "[Achievement name 617]Self-improvement": "Selbstverbesserung", + "[Achievement name 618]And now you're even older": "Und jetzt bist du noch älter", + "[Achievement name 619]Au naturel": "Au naturel", + "[Achievement name 620]Dirt-rich": "Stinkreich", + "[Achievement name 621]Bots build bots": "Bots bauen Bots", + "[Achievement name 622]Getting that bag": "Diese Tasche bekommen", + "[Achievement name 623]The leader is good, the leader is great": "Der Anführer ist gut, der Anführer ist großartig", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Du glaubst doch nicht, dass sie... Es kann nicht sein, dass", + "[Achievement name 625]Signed, sealed, delivered": "Unterschrieben, versiegelt, geliefert", + "[Achievement name 626]Sugar, spice, and everything nice": "Zucker, Gewürze und alles, was schön ist", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Nicht einmal mehr annähernd so nah an Kansas", + "[Achievement name 628]I only meant to stay a while": "Ich wollte nur eine Weile bleiben", + "[Achievement name 629]Not 20 years away forever": "Nicht für immer 20 Jahre entfernt", + "[Achievement name 630]Bright side of the Moon": "Helle Seite des Mondes", + "[Achievement name 631]Riding the Mersenne twister": "Den Mersenne-Twister reiten", + "[Achievement name 632]Divide and conquer": "Teile und herrsche", + "[Achievement name 633]Pebcakes": "Pebcakes", + "[Achievement name 634]Greener on the other sides": "Grüner auf den anderen Seiten", + "[Achievement name 635]Where is my mind": "Wo ist mein Kopf", + "[Achievement name 636]Introspection": "Introspektion", + "[Achievement name 637]Debt evasion": "Schuldenhinterziehung", + "[Achievement name 638]Oft we mar what's well": "Oft stören wir, was gut ist", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Was nicht klappt", + "[Achievement name 641]All on deck": "Alle Mann an Deck", + "[Achievement name 642]A round of applause": "Eine Runde Applaus" }); \ No newline at end of file diff --git a/loc/EN.js b/loc/EN.js index 417ebd66..4e74397e 100644 --- a/loc/EN.js +++ b/loc/EN.js @@ -231,6 +231,8 @@ AddLanguage('EN','english',{ "Licorice milk": "/", "Rose milk": "/", "Dragonfruit milk": "/", + "Peach milk": "/", + "Hazelnut milk": "/", "Info": "/", "About": "/", "Cookie Clicker is a javascript game by %1 and %2.": "/", @@ -258,8 +260,10 @@ AddLanguage('EN','english',{ "Load from file": "/", "Use this to keep backups on your computer": "/", "Export save": "/", + "Export": "/", "This is your save code.
Copy it and keep it somewhere safe!": "/", "Import save": "/", + "Import": "/", "Please paste in the code that was given to you on save export.": "/", "Game saved": "/", "Game loaded": "/", @@ -630,6 +634,7 @@ AddLanguage('EN','english',{ "Reality Bending": "/", "Dragon Orbs": "/", "Supreme Intellect": "/", + "Dragon Guts": "/", "News :": "/", "Ticker (grandma)": [ "Moist cookies.", @@ -764,6 +769,11 @@ AddLanguage('EN','english',{ "astronomers warn of cortex baker trajectory drift, fear future head-on collisions resulting in costly concussions.", "cortex baker wranglers kindly remind employees that cortex bakers are the bakery's material property and should not be endeared with nicknames." ], + "Ticker (You)": [ + "the person of the year is, this year again, you! How unexpected!", + "could local restaurants be serving you bootleg clone meat? Our delicious investigation follows after tonight's news.", + "beloved cookie magnate, erroneously reported as trampled to death by crazed fans, thankfully found to be escaped clone mistaken for original." + ], "Ticker (Halloween)": [ "pagan rituals on the rise as children around the world dress up in strange costumes and blackmail homeowners for candy.", "children around the world \"lost and confused\" as any and all Halloween treats have been replaced by cookies.", @@ -1161,6 +1171,14 @@ AddLanguage('EN','english',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.", "[Cortex baker business name]Think tank": "Think tank", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!", + "You": "/", + "%1 You": [ + "%1 You", + "%1 You" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.", + "[You business name]You": "You", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.", "CpS": "/", "cookies/click": "/", "%1 CpS": "/", @@ -1239,6 +1257,7 @@ AddLanguage('EN','english',{ "Wrinklers appear %1 times as fast.": "/", "Wrinklers spawn much more frequently.": "/", "Wrinklers explode into %1% more cookies.": "/", + "Wrinklers digest %1% more cookies.": "/", "Unlocks... something.": "/", "In the festive hat, you find...": "/", "a festive test tube
and %1.": "/", @@ -1317,6 +1336,7 @@ AddLanguage('EN','english',{ "Auto": "/", "Loop": "/", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "/", + "Contains more wallpapers for your background selector.": "/", "Lets you pick which wallpaper to display.": "/", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "/", "You can attract %1 more wrinklers.": "/", @@ -1402,6 +1422,39 @@ AddLanguage('EN','english',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "/", "Wrinklers appear %1% faster and digest %2% more cookies.": "/", "Effect is only active when your total amount of buildings ends with 0.": "/", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "/", + "You need at least %1 cookies in bank to send and receive gifts.": "/", + "Send a gift": "/", + "Send": "/", + "Redeem a gift": "/", + "Redeem": "/", + "paste code...": "/", + "Wrap": "/", + "Done": "/", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "/", + "You may put between %1 and %2 cookies in the gift box.": "/", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "/", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "/", + "Box design": "/", + "Icon": "/", + "Here's your gift code!
Make sure to copy it so you can share it.": "/", + "Code expired.": "/", + "Invalid code.": "/", + "Gift redeemed!
Inside, you find:": "/", + "There's a note too!": "/", + "How nice!": "/", + "You've already sent or redeemed a gift recently.": "/", + "Customize": "/", + "Customize your clones": "/", + "Sprung from your very DNA. Shape them in your image!": "/", + "Hair": "/", + "Hair color": "/", + "Skin color": "/", + "Head shape": "/", + "Face": "/", + "Extra": "/", + "Everyone's here.": "/", + "Won't you have some cookies too?": "/", "Achievement unlocked": "/", "Make %1 just from %2.": "/", "Bake %1 in one ascension.": "/", @@ -1420,6 +1473,7 @@ AddLanguage('EN','english',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Have at least 1 of the most expensive building, 2 of the second-most expensive, 4 of the next and so on (capped at %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Have at least 10 of the most expensive building, 20 of the second-most expensive, 30 of the next and so on.", "Click a golden cookie.": "/", + "Click a wrath cookie.": "/", "Click %1.": "/", "Hack in some cookies.": "/", "Click really, really fast.": "/", @@ -1427,6 +1481,7 @@ AddLanguage('EN','english',{ "Own %1.": "/", "Purchase %1.": "/", "Dunk the cookie.": "/", + "Trigger the grandmapocalypse for the first time.": "/", "Appease the grandmatriarchs at least once.": "/", "Appease the grandmatriarchs at least %1 times.": "/", "Declare a covenant with the grandmatriarchs.": "/", @@ -1458,6 +1513,7 @@ AddLanguage('EN','english',{ "Own %1 upgrades and %2 buildings.": "/", "Own %1 heavenly upgrades.": "/", "Burst the near-extinct shiny wrinkler.": "/", + "Poke a wrinkler %1 times without killing it.": "/", "Click a golden cookie less than 1 second after it spawns.": "/", "Click a golden cookie less than 1 second before it dies.": "/", "Harvest %1 coalescing sugar lumps.": "/", @@ -1485,9 +1541,14 @@ AddLanguage('EN','english',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "/", "Unlock the highest-tier stock market headquarters.": "/", "Have your stock market profits surpass $%1.": "/", + "Take out a loan and ascend before incurring the CpS penalty.": "/", "Own %1 kitten upgrades.": "/", "Find the forgotten madeleine.": "/", "Click one of Santa's helper grandmas during Christmas season.": "/", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "/", + "Shape your clones to resemble %1.": "/", + "Clone": "/", + "Unlock the final building.": "/", "Frenzy": "/", "Elder frenzy": "/", "Click frenzy": "/", @@ -1507,6 +1568,7 @@ AddLanguage('EN','english',{ "Sugar frenzy": "/", "Loan %1": "/", "Loan %1 (interest)": "/", + "Gifted out": "/", "%1 Power!": "/", "%1 Burden!": "/", "Cookie production x%1 for %2!": "/", @@ -1526,6 +1588,7 @@ AddLanguage('EN','english',{ "You find %1% more golden cookies for the next %2.": "/", "Spells backfire %1 times less for %2.": "/", "Spells backfire %1 times more for %2.": "/", + "Can't send or receive gifts again for %1.": "/", "can be done once every %1": "/", "usable again in %1": "/", "+%1/s": "/", @@ -1853,6 +1916,9 @@ AddLanguage('EN','english',{ "[STOCK 17 NAME]Great Minds": "Great Minds", "[STOCK 17 TYPE]Publicists": "Publicists", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "%1's Bakery", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "YOU", "from %1": "/", "%1: currently worth $%2 per unit.": "/", "You currently own %1 (worth $%2).": "/", @@ -2732,6 +2798,62 @@ AddLanguage('EN','english',{ "[Upgrade name 816]Web cookies": "Web cookies", "[Upgrade name 817]Steamed cookies": "Steamed cookies", "[Upgrade name 818]Deep-fried cookie dough": "Deep-fried cookie dough", + "[Upgrade name 819]Wrapping paper": "Wrapping paper", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Cookie bars", + "[Upgrade name 824]Nines": "Nines", + "[Upgrade name 825]Clone grandmas": "Clone grandmas", + "[Upgrade name 826]Cloning vats": "Cloning vats", + "[Upgrade name 827]Energized nutrients": "Energized nutrients", + "[Upgrade name 828]Stunt doubles": "Stunt doubles", + "[Upgrade name 829]Clone recycling plant": "Clone recycling plant", + "[Upgrade name 830]Free-range clones": "Free-range clones", + "[Upgrade name 831]Genetic tailoring": "Genetic tailoring", + "[Upgrade name 832]Power in diversity": "Power in diversity", + "[Upgrade name 833]Self-betterment": "Self-betterment", + "[Upgrade name 834]Source control": "Source control", + "[Upgrade name 835]United workforce": "United workforce", + "[Upgrade name 836]Safety patrols": "Safety patrols", + "[Upgrade name 837]Clone rights": "Clone rights", + "[Upgrade name 838]One big family": "One big family", + "[Upgrade name 839]Fine-tuned body plans": "Fine-tuned body plans", + "[Upgrade name 840]Foam-tipped canes": "Foam-tipped canes", + "[Upgrade name 841]Self-driving tractors": "Self-driving tractors", + "[Upgrade name 842]Mineshaft supports": "Mineshaft supports", + "[Upgrade name 843]Universal automation": "Universal automation", + "[Upgrade name 844]The big shortcake": "The big shortcake", + "[Upgrade name 845]Temple traps": "Temple traps", + "[Upgrade name 846]Polymorphism": "Polymorphism", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "At your doorstep in 30 minutes or your money back", + "[Upgrade name 848]The dose makes the poison": "The dose makes the poison", + "[Upgrade name 849]A way home": "A way home", + "[Upgrade name 850]Rectifying a mistake": "Rectifying a mistake", + "[Upgrade name 851]Candied atoms": "Candied atoms", + "[Upgrade name 852]Lab goggles but like cool shades": "Lab goggles but like cool shades", + "[Upgrade name 853]Gambler's fallacy fallacy": "Gambler's fallacy fallacy", + "[Upgrade name 854]The more they stay the same": "The more they stay the same", + "[Upgrade name 855]Simulation failsafes": "Simulation failsafes", + "[Upgrade name 856]The other routes to Rome": "The other routes to Rome", + "[Upgrade name 857]Intellectual property theft": "Intellectual property theft", + "[Upgrade name 858]Reading your clones bedtime stories": "Reading your clones bedtime stories", + "[Upgrade name 859]Accelerated development": "Accelerated development", + "[Upgrade name 860]Peer review": "Peer review", + "[Upgrade name 861]Fortune #020": "Fortune #020", + "[Upgrade name 862]Personal biscuit": "Personal biscuit", + "[Upgrade name 863]Unshackled glimmeringue": "Unshackled glimmeringue", + "[Upgrade name 864]Unshackled You": "Unshackled You", + "[Upgrade name 865]Kitten strategists": "Kitten strategists", + "[Upgrade name 866]Baklavas": "Baklavas", + "[Upgrade name 867]Snowball cookies": "Snowball cookies", + "[Upgrade name 868]Sequilhos": "Sequilhos", + "[Upgrade name 869]Hazelnut swirlies": "Hazelnut swirlies", + "[Upgrade name 870]Spritz cookies": "Spritz cookies", + "[Upgrade name 871]Mbatata cookies": "Mbatata cookies", + "[Upgrade name 872]Springerles": "Springerles", + "[Upgrade name 873]Undecillion fingers": "Undecillion fingers", + "[Upgrade name 874]Omniplast mouse": "Omniplast mouse", "[Achievement name 0]Wake and bake": "Wake and bake", "[Achievement name 1]Making some dough": "Making some dough", "[Achievement name 2]So baked right now": "So baked right now", @@ -3320,5 +3442,59 @@ AddLanguage('EN','english',{ "[Achievement name 585]I'll rest when I'm dead": "I'll rest when I'm dead", "[Achievement name 586]What do you get for the baker who has everything": "What do you get for the baker who has everything", "[Achievement name 587]Bottomless pit": "Bottomless pit", - "[Achievement name 588]All the stars in heaven": "All the stars in heaven" + "[Achievement name 588]All the stars in heaven": "All the stars in heaven", + "[Achievement name 589]No time like the present": "No time like the present", + "[Achievement name 590]Can we get much higher": "Can we get much higher", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Speed's the name of the game (no it's not it's called Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Rainy day fund", + "[Achievement name 593]And a little extra": "And a little extra", + "[Achievement name 594]Grandmapocalypse": "Grandmapocalypse", + "[Achievement name 595]Wrath cookie": "Wrath cookie", + "[Achievement name 596]No more room in hell": "No more room in hell", + "[Achievement name 597]In her likeness": "In her likeness", + "[Achievement name 598]Wrinkler poker": "Wrinkler poker", + "[Achievement name 599]Septcentennial": "Septcentennial", + "[Achievement name 600]My own clone": "My own clone", + "[Achievement name 601]Multiplicity": "Multiplicity", + "[Achievement name 602]Born for this job": "Born for this job", + "[Achievement name 603]Episode II": "Episode II", + "[Achievement name 604]Copy that": "Copy that", + "[Achievement name 605]Life finds a way": "Life finds a way", + "[Achievement name 606]Overcrowding": "Overcrowding", + "[Achievement name 607]Strength in numbers": "Strength in numbers", + "[Achievement name 608]Army of me": "Army of me", + "[Achievement name 609]Know thyself": "Know thyself", + "[Achievement name 610]Didn't make sense not to live": "Didn't make sense not to live", + "[Achievement name 611]Genetic bottleneck": "Genetic bottleneck", + "[Achievement name 612]Despite everything, it's still you": "Despite everything, it's still you", + "[Achievement name 613]Everyone everywhere all at once": "Everyone everywhere all at once", + "[Achievement name 614]Self-made": "Self-made", + "[Achievement name 615]Reproducible results": "Reproducible results", + "[Achievement name 616]That's all you": "That's all you", + "[Achievement name 617]Self-improvement": "Self-improvement", + "[Achievement name 618]And now you're even older": "And now you're even older", + "[Achievement name 619]Au naturel": "Au naturel", + "[Achievement name 620]Dirt-rich": "Dirt-rich", + "[Achievement name 621]Bots build bots": "Bots build bots", + "[Achievement name 622]Getting that bag": "Getting that bag", + "[Achievement name 623]The leader is good, the leader is great": "The leader is good, the leader is great", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "You don't think they could've used... it couldn't have been ma-", + "[Achievement name 625]Signed, sealed, delivered": "Signed, sealed, delivered", + "[Achievement name 626]Sugar, spice, and everything nice": "Sugar, spice, and everything nice", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Not even remotely close to Kansas anymore", + "[Achievement name 628]I only meant to stay a while": "I only meant to stay a while", + "[Achievement name 629]Not 20 years away forever": "Not 20 years away forever", + "[Achievement name 630]Bright side of the Moon": "Bright side of the Moon", + "[Achievement name 631]Riding the Mersenne twister": "Riding the Mersenne twister", + "[Achievement name 632]Divide and conquer": "Divide and conquer", + "[Achievement name 633]Pebcakes": "Pebcakes", + "[Achievement name 634]Greener on the other sides": "Greener on the other sides", + "[Achievement name 635]Where is my mind": "Where is my mind", + "[Achievement name 636]Introspection": "Introspection", + "[Achievement name 637]Debt evasion": "Debt evasion", + "[Achievement name 638]Oft we mar what's well": "Oft we mar what's well", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "What's not clicking", + "[Achievement name 641]All on deck": "All on deck", + "[Achievement name 642]A round of applause": "A round of applause" }); \ No newline at end of file diff --git a/loc/ES.js b/loc/ES.js index 9c59f904..b2b4ec0d 100644 --- a/loc/ES.js +++ b/loc/ES.js @@ -231,6 +231,8 @@ AddLanguage('ES','spanish',{ "Licorice milk": "Leche de regaliz", "Rose milk": "Leche de rosa", "Dragonfruit milk": "Leche de pitaya", + "Peach milk": "Leche de melocotón", + "Hazelnut milk": "Leche de avellana", "Info": "/", "About": "Acerca de", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker es un juego de javascript de %1 y %2.", @@ -258,8 +260,10 @@ AddLanguage('ES','spanish',{ "Load from file": "Cargar desde archivo", "Use this to keep backups on your computer": "Usa esto para guardar copias de seguridad en tu ordenador", "Export save": "Exportar datos guardados", + "Export": "Exportar", "This is your save code.
Copy it and keep it somewhere safe!": "Este es el código de tus datos guardados.
¡Cópialo y guárdalo a buen recaudo!", "Import save": "Importar datos guardados", + "Import": "Importar", "Please paste in the code that was given to you on save export.": "Pega el código que te dimos al exportar datos guardados.", "Game saved": "Juego guardado", "Game loaded": "Juego cargado", @@ -609,6 +613,7 @@ AddLanguage('ES','spanish',{ "Reality Bending": "Manipulación de realidad", "Dragon Orbs": "Orbes de dragón", "Supreme Intellect": "Intelecto supremo", + "Dragon Guts": "Tripas de dragón", "News :": "Noticias:", "Ticker (grandma)": [ "Galletas jugosas.", @@ -743,6 +748,11 @@ AddLanguage('ES','spanish',{ "Los astrónomos advierten sobre la desviación de la trayectoria del panadero cerebral y temen futuras colisiones frontales que causen conmociones cerebrales costosas.", "Los panaderos cerebrales tienen la amabilidad de recordarles a los empleados que los panaderos cerebrales son propiedad material de la panadería y no se les debe poner apodos." ], + "Ticker (You)": [ + "¡La persona del año es, un año más: tú! ¡Qué sorpresa!", + "¿Podrían los restaurantes locales servirte carne clonada de contrabando? Nuestra deliciosa investigación se centra en las noticias de esta noche.", + "Descubren que un querido magnate de las galletas, del que se informó erróneamente que había sido pisoteado por fans enloquecidos, es en realidad un clon huido al que se confundió con el original." + ], "Ticker (Halloween)": [ "Aumentan los rituales paganos con niños por todo el mundo vestidos con extraños disfraces que chantajean a los dueños de casas para que les den golosinas.", "Niños del mundo \"perdidos y confundidos\" al ver que todas las golosinas de Halloween han sido sustituidas por galletas.", @@ -1140,6 +1150,14 @@ AddLanguage('ES','spanish',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Estos cerebros artificiales del tamaño de un planeta son capaces de soñar con galletas. El tiempo y el espacio son intrascendentes. La realidad es arbitraria.", "[Cortex baker business name]Think tank": "Grupo de expertos", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Hay muchas formas de generar más ganancias. ¿O no? ¡Contrata a los expertos más brillantes del universo conocido y deja que se estrujen los sesos por ti!", + "You": "Tú", + "%1 You": [ + "%1 Tú", + "%1 Tú" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Tú eres el motivo detrás de tantas galletas, nadie más. Averigua si hay más como tú… podrías incluso hacer más.", + "[You business name]You": "Tú", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Tu negocio llegará donde llegue. La única mejora posible es mejorarte a ti mismo y conviértete en el mejor CEO que este mundo haya conocido.", "CpS": "g/s", "cookies/click": "galletas/clic", "%1 CpS": "%1 g/s", @@ -1218,6 +1236,7 @@ AddLanguage('ES','spanish',{ "Wrinklers appear %1 times as fast.": "Los devoradores aparecen %1 veces más rápido.", "Wrinklers spawn much more frequently.": "Los devoradores aparecen con mucha más frecuencia.", "Wrinklers explode into %1% more cookies.": "Los devoradores explotan en un %1% más de galletas.", + "Wrinklers digest %1% more cookies.": "Los devoradores digieren %1% galletas más.", "Unlocks... something.": "Desbloquea… algo.", "In the festive hat, you find...": "En el sombrero festivo, encontrarás…", "a festive test tube
and %1.": "un tubo de ensayo navideño
y %1.", @@ -1296,6 +1315,7 @@ AddLanguage('ES','spanish',{ "Auto": "/", "Loop": "Bucle", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Desbloquea el selector de fondo, lo que te permite seleccionar el fondo del juego.
Las hay de varios sabores básicos.", + "Contains more wallpapers for your background selector.": "Contiene más fondos de pantalla para tu selector de fondos.", "Lets you pick which wallpaper to display.": "Te permite elegir el fondo de pantalla.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Esta es la primera actualización celestial y desbloquea el sistema de pepitas celestiales.
Cada vez que asciendas, las galletas que hiciste en tu vida pasada se convertirán en pepitas celestiales y prestigio.
Las pepitas celestiales se pueden gastar en una serie de mejoras trascendentales permanentes.
Tu nivel de prestigio también te otorga +1% de g/s permanente por nivel.", "You can attract %1 more wrinklers.": "Puedes atraer un %1 más devoradores.", @@ -1381,6 +1401,39 @@ AddLanguage('ES','spanish',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Todas las galletas doradas son galletas de la ira con una mayor probabilidad de tener un efecto negativo.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Los devoradores aparecen un %1 % más rápido y comen un %2 % más de galletas.", "Effect is only active when your total amount of buildings ends with 0.": "El efecto solo está activo cuando el número total de edificios acaba con 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Ahora puedes enviar y recibir regalos de otros jugadores con los botones situados en la parte superior derecha del menú %1.", + "You need at least %1 cookies in bank to send and receive gifts.": "Necesitas tener al menos %1 galletas en el banco para enviar y recibir regalos.", + "Send a gift": "Envía un regalo", + "Send": "Enviar", + "Redeem a gift": "Reclama un regalo", + "Redeem": "Reclamar", + "paste code...": "Pega el código...", + "Wrap": "Envolver", + "Done": "Ya está", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Haz clic en \"%1\" y se generará un código de texto que podrás enviar a otros. Cualquiera puede reclamar varias veces los códigos de regalo, pero caducan después de un día o dos. Solo puedes generar un código de regalo cada hora. Tu partida se guardará después de enviar.", + "You may put between %1 and %2 cookies in the gift box.": "Puedes meter entre %1 y %2 galletas en la caja regalo.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Puedes dejar una nota. ¡Ten un poco de educación!
Usa un máximo de %1 líneas y %2 caracteres.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Cuando reclames un regalo, tendrás que esperar una hora antes de poder reclamar otro. Tu partida se guardará después de reclamarlo.", + "Box design": "Diseño de caja", + "Icon": "Icono", + "Here's your gift code!
Make sure to copy it so you can share it.": "¡Aquí tienes tu código de regalo!
No olvides copiarlo para poder compartirlo.", + "Code expired.": "Código caducado.", + "Invalid code.": "Código no válido.", + "Gift redeemed!
Inside, you find:": "¡Regalo reclamado!
Dentro, encontrarás:", + "There's a note too!": "¡También tienes una nota!", + "How nice!": "¡Qué guay!", + "You've already sent or redeemed a gift recently.": "Has enviado o reclamado un regalo recientemente.", + "Customize": "Personalizar", + "Customize your clones": "Personaliza tus clones", + "Sprung from your very DNA. Shape them in your image!": "Producto de tu propio ADN. ¡Hazlos a tu imagen y semejanza!", + "Hair": "Pelo", + "Hair color": "Color de pelo", + "Skin color": "Color de piel", + "Head shape": "Forma de la cabeza", + "Face": "Cara", + "Extra": "Extras", + "Everyone's here.": "No falta nadie.", + "Won't you have some cookies too?": "¿Y no quieres galletas?", "Achievement unlocked": "Logro desbloqueado", "Make %1 just from %2.": "Haz %1 solo a partir de %2.", "Bake %1 in one ascension.": "Hornea %1 en una ascensión.", @@ -1399,6 +1452,7 @@ AddLanguage('ES','spanish',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Ten al menos 1 del objeto más caro, 2 del segundo más caro, 4 del siguiente y así sucesivamente (con un límite de %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Ten al menos 10 del objeto más caro, 20 del segundo más caro, 30 del siguiente y así sucesivamente.", "Click a golden cookie.": "Haz clic en una galleta dorada.", + "Click a wrath cookie.": "Haz clic en una galleta de ira.", "Click %1.": "Haz clic en %1.", "Hack in some cookies.": "Piratea algunas galletas.", "Click really, really fast.": "Haz clic muy, muy rápido.", @@ -1406,6 +1460,7 @@ AddLanguage('ES','spanish',{ "Own %1.": "Ten %1.", "Purchase %1.": "Compra %1.", "Dunk the cookie.": "Moja la galleta.", + "Trigger the grandmapocalypse for the first time.": "Desencadena el yayapocalipsis por primera vez.", "Appease the grandmatriarchs at least once.": "Apacigua a las abumatriarcas al menos una vez.", "Appease the grandmatriarchs at least %1 times.": "Apacigua a las abumatriarcas al menos %1 veces.", "Declare a covenant with the grandmatriarchs.": "Declara un pacto con las abumatriarcas.", @@ -1437,6 +1492,7 @@ AddLanguage('ES','spanish',{ "Own %1 upgrades and %2 buildings.": "Ten %1 mejoras y %2 edificios.", "Own %1 heavenly upgrades.": "Ten %1 mejoras celestiales.", "Burst the near-extinct shiny wrinkler.": "Explota al casi extinto devorador brillante.", + "Poke a wrinkler %1 times without killing it.": "Pincha a un devorador %1 veces sin matarlo.", "Click a golden cookie less than 1 second after it spawns.": "Haz clic en una galleta dorada menos de 1 segundo después de que aparezca.", "Click a golden cookie less than 1 second before it dies.": "Haz clic en una galleta dorada menos de 1 segundo antes de que desaparezca.", "Harvest %1 coalescing sugar lumps.": "Cosecha %1 terrones de azúcar fusionados.", @@ -1464,9 +1520,14 @@ AddLanguage('ES','spanish',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Haz que tus ganancias en la bolsa superen todo un año de g/s ($%1).", "Unlock the highest-tier stock market headquarters.": "Desbloquea la sede de la bolsa de categoría más alta.", "Have your stock market profits surpass $%1.": "Haz que tus ganancias en la bolsa superen $%1.", + "Take out a loan and ascend before incurring the CpS penalty.": "Retira un préstamo y asciende antes de recibir la penalización de g/s.", "Own %1 kitten upgrades.": "Ten %1 mejoras para gatitos.", "Find the forgotten madeleine.": "Encuentra la magdalena olvidada.", "Click one of Santa's helper grandmas during Christmas season.": "Haz clic en una de las abuelas ayudantes de Papá Noel durante la temporada navideña.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Reclama un código de regalo de galleta de algún amigo (o de ti mismo, no te vamos a criticar).", + "Shape your clones to resemble %1.": "Da forma a tus clones para que se parezcan a %1.", + "Clone": "Clonar", + "Unlock the final building.": "Desbloquea el edificio final.", "Frenzy": "Frenesí", "Elder frenzy": "Frenesí de ancianas", "Click frenzy": "Frenesí de clics", @@ -1486,6 +1547,7 @@ AddLanguage('ES','spanish',{ "Sugar frenzy": "Frenesí de azúcar", "Loan %1": "Presta %1", "Loan %1 (interest)": "Presta %1 (intereses)", + "Gifted out": "Exceso de regalos", "%1 Power!": "¡Poder %1!", "%1 Burden!": "¡Carga %1!", "Cookie production x%1 for %2!": "¡Producción de galletas x%1 durante %2!", @@ -1505,6 +1567,7 @@ AddLanguage('ES','spanish',{ "You find %1% more golden cookies for the next %2.": "Encontrarás un %1% más de galletas doradas durante los próximos %2.", "Spells backfire %1 times less for %2.": "Los hechizos se lanzan %1 veces menos durante %2.", "Spells backfire %1 times more for %2.": "Los hechizos se lanzan %1 veces más durante %2.", + "Can't send or receive gifts again for %1.": "No puedes enviar ni recibir regalos de nuevo en %1.", "can be done once every %1": "puede hacerse una vez cada %1", "usable again in %1": "puede volver a usarse dentro de %1", "+%1/s": "/", @@ -1832,6 +1895,9 @@ AddLanguage('ES','spanish',{ "[STOCK 17 NAME]Great Minds": "Grandes mentes", "[STOCK 17 TYPE]Publicists": "Publicistas", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "Panadería de %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "TÚ", "from %1": "desde %1", "%1: currently worth $%2 per unit.": "%1: vale actualmente $%2 por unidad.", "You currently own %1 (worth $%2).": "Ahora mismo tienes %1 (se valora en $%2).", @@ -2711,6 +2777,62 @@ AddLanguage('ES','spanish',{ "[Upgrade name 816]Web cookies": "Galletas web", "[Upgrade name 817]Steamed cookies": "Galletas al vapor", "[Upgrade name 818]Deep-fried cookie dough": "Masa de galleta frita", + "[Upgrade name 819]Wrapping paper": "Papel de regalo", + "[Upgrade name 820]Havreflarn": "Galletas suecas de avena", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Galletas de barquillo", + "[Upgrade name 823]Cookie bars": "Barritas de galleta", + "[Upgrade name 824]Nines": "Nueves", + "[Upgrade name 825]Clone grandmas": "Abuelas clon", + "[Upgrade name 826]Cloning vats": "Murciélagos clonadores", + "[Upgrade name 827]Energized nutrients": "Nutrientes activados", + "[Upgrade name 828]Stunt doubles": "Dobles-especialistas", + "[Upgrade name 829]Clone recycling plant": "Planta recicladora de clones", + "[Upgrade name 830]Free-range clones": "Clones de corral", + "[Upgrade name 831]Genetic tailoring": "Ingeniería genética", + "[Upgrade name 832]Power in diversity": "El poder de la diversidad", + "[Upgrade name 833]Self-betterment": "Autosuperación", + "[Upgrade name 834]Source control": "Control de la fuente", + "[Upgrade name 835]United workforce": "Población activa unida", + "[Upgrade name 836]Safety patrols": "Patrullas de seguridad", + "[Upgrade name 837]Clone rights": "Derechos de los clones", + "[Upgrade name 838]One big family": "Una gran familia", + "[Upgrade name 839]Fine-tuned body plans": "Patrones corporales bien definidos", + "[Upgrade name 840]Foam-tipped canes": "Bastones con punta de espuma", + "[Upgrade name 841]Self-driving tractors": "Tractores autopilotados", + "[Upgrade name 842]Mineshaft supports": "Estructuras mineras", + "[Upgrade name 843]Universal automation": "Automatización universal", + "[Upgrade name 844]The big shortcake": "El gran pastel de fruta", + "[Upgrade name 845]Temple traps": "Trampa oculta", + "[Upgrade name 846]Polymorphism": "Polimorfismo", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "En tu puerta en 30 minutos o recuperas el dinero", + "[Upgrade name 848]The dose makes the poison": "La dosis es la clave del veneno", + "[Upgrade name 849]A way home": "El camino de regreso a casa", + "[Upgrade name 850]Rectifying a mistake": "Rectificación de un error", + "[Upgrade name 851]Candied atoms": "Átomo azucarado", + "[Upgrade name 852]Lab goggles but like cool shades": "Gafas de laboratorio, pero molonas", + "[Upgrade name 853]Gambler's fallacy fallacy": "La falacia de la falacia del jugador", + "[Upgrade name 854]The more they stay the same": "Cada vez se parecen más", + "[Upgrade name 855]Simulation failsafes": "Salvaguardas de simulación", + "[Upgrade name 856]The other routes to Rome": "Los demás caminos que llevan a Roma", + "[Upgrade name 857]Intellectual property theft": "Robo de propiedad intelectual", + "[Upgrade name 858]Reading your clones bedtime stories": "Cuentos de clones para irse a la cama", + "[Upgrade name 859]Accelerated development": "Desarrollo acelerado", + "[Upgrade name 860]Peer review": "Crítica de compañeros", + "[Upgrade name 861]Fortune #020": "Fortuna n.º 20", + "[Upgrade name 862]Personal biscuit": "Galleta personal", + "[Upgrade name 863]Unshackled glimmeringue": "Destellomerengue desenfrenado", + "[Upgrade name 864]Unshackled You": "Tú desenfrenado", + "[Upgrade name 865]Kitten strategists": "Estrategas de mininos", + "[Upgrade name 866]Baklavas": "Baklavas", + "[Upgrade name 867]Snowball cookies": "Bolas de nieve", + "[Upgrade name 868]Sequilhos": "Galletas de leche condensada", + "[Upgrade name 869]Hazelnut swirlies": "Rollitos de avellana", + "[Upgrade name 870]Spritz cookies": "Pastas", + "[Upgrade name 871]Mbatata cookies": "Galletas de boniato", + "[Upgrade name 872]Springerles": "Galletas alemanas", + "[Upgrade name 873]Undecillion fingers": "Undecillón de dedos", + "[Upgrade name 874]Omniplast mouse": "Ratón omnipresente", "[Achievement name 0]Wake and bake": "Galleta mañanera", "[Achievement name 1]Making some dough": "Haciendo un poco de masa", "[Achievement name 2]So baked right now": "Muy horneado", @@ -3299,5 +3421,59 @@ AddLanguage('ES','spanish',{ "[Achievement name 585]I'll rest when I'm dead": "Descansaré cuando esté muerto", "[Achievement name 586]What do you get for the baker who has everything": "¿Qué tienes para el panadero que lo tiene todo?", "[Achievement name 587]Bottomless pit": "Pozo sin fondo", - "[Achievement name 588]All the stars in heaven": "Todas las estrellas en el cielo" + "[Achievement name 588]All the stars in heaven": "Todas las estrellas en el cielo", + "[Achievement name 589]No time like the present": "No hay momento mejor que el ahora", + "[Achievement name 590]Can we get much higher": "Podemos llegar mucho más alto", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "El juego se llama Velocidad (no, no se llama Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Fondo de los días pospuestos", + "[Achievement name 593]And a little extra": "Y un poquito más", + "[Achievement name 594]Grandmapocalypse": "Yayapocalipsis", + "[Achievement name 595]Wrath cookie": "Galleta de ira", + "[Achievement name 596]No more room in hell": "No cabe un alma más en el infierno", + "[Achievement name 597]In her likeness": "A su semejanza", + "[Achievement name 598]Wrinkler poker": "Póker de devoradores", + "[Achievement name 599]Septcentennial": "Septocentenario", + "[Achievement name 600]My own clone": "Mi propio clon", + "[Achievement name 601]Multiplicity": "Multiplicidad", + "[Achievement name 602]Born for this job": "Nacido para este trabajo", + "[Achievement name 603]Episode II": "Episodio II", + "[Achievement name 604]Copy that": "Recibido", + "[Achievement name 605]Life finds a way": "La vida se abre camino", + "[Achievement name 606]Overcrowding": "Masificación", + "[Achievement name 607]Strength in numbers": "Destreza numérica", + "[Achievement name 608]Army of me": "Yo soy un ejército", + "[Achievement name 609]Know thyself": "Conócete a ti mismo", + "[Achievement name 610]Didn't make sense not to live": "No vivir no tenía sentido", + "[Achievement name 611]Genetic bottleneck": "Deriva genética", + "[Achievement name 612]Despite everything, it's still you": "A pesar de todo, sigues siendo tú", + "[Achievement name 613]Everyone everywhere all at once": "Todo a la vez en todas partes", + "[Achievement name 614]Self-made": "Artífice de su éxito", + "[Achievement name 615]Reproducible results": "Resultados reproducibles", + "[Achievement name 616]That's all you": "Todo gracias a ti", + "[Achievement name 617]Self-improvement": "Automejoría", + "[Achievement name 618]And now you're even older": "Y ahora eres más viejo todavía", + "[Achievement name 619]Au naturel": "Al natural", + "[Achievement name 620]Dirt-rich": "Asquerosamente rico", + "[Achievement name 621]Bots build bots": "Los bots fabrican bots", + "[Achievement name 622]Getting that bag": "A por ese bolso", + "[Achievement name 623]The leader is good, the leader is great": "El líder es bueno, el líder es genial", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "No habrán usado… no pudo ser…", + "[Achievement name 625]Signed, sealed, delivered": "Firmado, sellado y entregado", + "[Achievement name 626]Sugar, spice, and everything nice": "Azúcar, especias y todo estupendo", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Esto ya no es Kansas ni nada que se le parezca", + "[Achievement name 628]I only meant to stay a while": "Solo quería quedarme un rato", + "[Achievement name 629]Not 20 years away forever": "No a 20 años de distancia eternamente", + "[Achievement name 630]Bright side of the Moon": "La cara brillante de la luna", + "[Achievement name 631]Riding the Mersenne twister": "Dentro del generador Mersenne Twister", + "[Achievement name 632]Divide and conquer": "Divide y vencerás", + "[Achievement name 633]Pebcakes": "Errores de usuario", + "[Achievement name 634]Greener on the other sides": "Al vecino siempre le va todo mejor", + "[Achievement name 635]Where is my mind": "¿Dónde está mi mente?", + "[Achievement name 636]Introspection": "Introspección", + "[Achievement name 637]Debt evasion": "Evasión de impuestos", + "[Achievement name 638]Oft we mar what's well": "Más vale malo conocido que bueno por conocer", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Algo que no encaja", + "[Achievement name 641]All on deck": "Manos a la obra", + "[Achievement name 642]A round of applause": "Un aplauso" }); \ No newline at end of file diff --git a/loc/FR.js b/loc/FR.js index 6413efcc..af0ff875 100644 --- a/loc/FR.js +++ b/loc/FR.js @@ -231,6 +231,8 @@ AddLanguage('FR','french',{ "Licorice milk": "Lait réglisse", "Rose milk": "Lait rose", "Dragonfruit milk": "Lait fruit du dragon", + "Peach milk": "Lait pêche", + "Hazelnut milk": "Lait noisette", "Info": "Infos", "About": "À propos de", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker est un jeu javascript par %1 et %2.", @@ -258,8 +260,10 @@ AddLanguage('FR','french',{ "Load from file": "Charger fichier", "Use this to keep backups on your computer": "Sert à garder des copies sur ton ordinateur", "Export save": "Exporter sauvegarde", + "Export": "Exportation", "This is your save code.
Copy it and keep it somewhere safe!": "C'est ton code de sauvegarde.
Copie-le et garde-le à l'abri !", "Import save": "Importer sauvegarde", + "Import": "Importation", "Please paste in the code that was given to you on save export.": "Merci de coller le code donné lors de l'exportation de sauvegarde.", "Game saved": "Partie sauvegardée", "Game loaded": "Partie chargée", @@ -590,6 +594,7 @@ AddLanguage('FR','french',{ "Reality Bending": "Distorsion de réalité", "Dragon Orbs": "Orbes de dragon", "Supreme Intellect": "« Intelligence suprême »,", + "Dragon Guts": "Tripes de dragon", "News :": "Actualités :", "Ticker (grandma)": [ "Cookies moelleux.", @@ -724,6 +729,11 @@ AddLanguage('FR','french',{ "mise en garde d'astronomes au sujet d'une dérive de trajectoire de cortex pâtissier, on craint des collisions frontales pouvant occasionner des commotions coûteuses.", "les dresseurs de cortex pâtissiers rappellent aux employés que les cortex pâtissiers sont la propriété de la pâtisserie et leur demandent de ne pas les affubler de surnoms affectueux." ], + "Ticker (You)": [ + "la personnalité de l’année, cette année encore, c’est toi ! Quelle surprise !", + "vos restaurants locaux servent-ils de la viande de clone de contrebande ? Notre délicieuse enquête après les nouvelles de la soirée.", + "personnalité du monde des cookies dont l’écrasement par une foule de fans frénétiques avait été annoncé par erreur, était en fait un clone, confondu avec son original." + ], "Ticker (Halloween)": [ "inquiétante augmentation des rituels païens, alors que des enfants du monde entier enfilent des costumes étranges et soumettent des étrangers à du chantage pour obtenir des bonbons.", "les enfants du monde entier « égarés et confus », toutes leurs sucreries d'Halloween ayant été remplacées par des cookies.", @@ -1121,6 +1131,14 @@ AddLanguage('FR','french',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Ces cerveaux artificiels de la taille d'une planète sont capables de simplement créer des cookies par la force de leur pensée. L'espace et le temps sont sans importance. La réalité est arbitraire.", "[Cortex baker business name]Think tank": "Groupe de réflexion", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Il n'y a qu'un nombre limité de manières de générer plus de profit. Non ? Recrutez les experts les plus brillants de l'univers connu et laissez-les se creuser les méninges pour vous !", + "You": "Toi", + "%1 You": [ + "Toi, %1", + "Toi, %1" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "C’est seulement toi, la raison derrière tous ces cookies. Tu te dis que s’il y avait davantage de toi… tu pourrais en fabriquer encore plus.", + "[You business name]You": "Toi", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Ton entreprise va aussi bien qu’elle peut. La seule manière de l’améliorer consiste à t’améliorer toi-même… et devenir le meilleur PDG que le monde ait jamais connu.", "CpS": "/", "cookies/click": "cookies/clic", "%1 CpS": "/", @@ -1148,8 +1166,8 @@ AddLanguage('FR','french',{ "%1 are twice as efficient.": "%1 sont deux fois plus efficaces.", "%1 are %2% more powerful.": "%1 sont %2 % plus puissants.", "Unshackled! +%1% extra production.": "Débridé(e)s ! +%1 % de production supplémentaire.", - "Tiered upgrades for %1 provide an extra +%2% production.
Only works with unshackled upgrade tiers.": "Les améliorations à paliers de %1 fournissent +%2 % de production supplémentaire.
Ne fonctionne qu'avec les paliers d'amélioration débridés.", - "Unshackles all %1-tier upgrades, making them more powerful.
Only applies to unshackled buildings.": "Débride toutes les améliorations à palier %1, les rendant plus puissantes.
S'applique uniquement aux constructions débridées.", + "Tiered upgrades for %1 provide an extra +%2% production.
Only works with unshackled upgrade tiers.": "Les améliorations à paliers de %1 fournissent +%2 % de production supplémentaire.
Ne fonctionne qu'avec les paliers d'amélioration débridées.", + "Unshackles all %1-tier upgrades, making them more powerful.
Only applies to unshackled buildings.": "Débride toutes les améliorations à %1 paliers, les rendant plus puissantes.
S'applique uniquement aux constructions débridées.", "The mouse and cursors are twice as efficient.": "La souris et les curseurs sont deux fois plus efficaces.", "The mouse and cursors gain +%1 cookies for each non-cursor building owned.": "La souris et les curseurs gagnent +%1 cookies pour chaque construction possédée hors curseurs.", "Grandmas gain +%1% CpS for each non-grandma building.": "Les grand-mères gagnent + %1 % CpS pour chaque construction hors grand-mères.", @@ -1199,6 +1217,7 @@ AddLanguage('FR','french',{ "Wrinklers appear %1 times as fast.": "Les rideux apparaissent %1 fois plus rapidement.", "Wrinklers spawn much more frequently.": "Les rideux apparaissent nettement plus fréquemment.", "Wrinklers explode into %1% more cookies.": "Les rideux explosent pour donner %1 % plus de cookies.", + "Wrinklers digest %1% more cookies.": "Les rideux digèrent %1 % de cookies en plus.", "Unlocks... something.": "Débloque... quelque chose.", "In the festive hat, you find...": "Dans le chapeau festif, tu trouves...", "a festive test tube
and %1.": "une éprouvette festive
et %1.", @@ -1277,6 +1296,7 @@ AddLanguage('FR','french',{ "Auto": "/", "Loop": "Boucle", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Débloque le sélecteur d'arrière-plan, qui te permet de choisir le fond d'écran du jeu.
Est fourni avec divers parfums de base.", + "Contains more wallpapers for your background selector.": "Contient de nouveaux papiers peints pour ton sélecteur de fond d’écran.", "Lets you pick which wallpaper to display.": "Permet de choisir le fond d'écran à afficher.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "C'est la première amélioration céleste, débloquant le système des pépites célestes.
À chaque ascension, les cookies fabriqués lors de ta vie précédente sont transformés en pépites célestes et en prestige.
Les pépites célestes peuvent être dépensées pour diverses améliorations transcendentales permanentes.
Chaque niveau de prestige t'offre également +1 % de CpS permanents en plus.", "You can attract %1 more wrinklers.": "Tu peux attirer%1 rideux de plus.", @@ -1362,6 +1382,39 @@ AddLanguage('FR','french',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Tous les cookies dorés sont des cookies de colère avec une plus grande chance d'effet négatif.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Les rideux apparaissent %1 % plus vite et digèrent %2 % de cookies en plus.", "Effect is only active when your total amount of buildings ends with 0.": "L'effet n'est activé que quand le nombre total de tes constructions se termine par 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Tu peux maintenant envoyer et recevoir des cadeaux avec les autres joueurs avec le boutons en haut à droite du menu %1.", + "You need at least %1 cookies in bank to send and receive gifts.": "Il te faut au moins %1 cookies à la banque pour envoyer et recevoir des cadeaux.", + "Send a gift": "Envoyer un cadeau", + "Send": "Envoyer", + "Redeem a gift": "Récupérer un cadeau", + "Redeem": "Récupérer", + "paste code...": "coller code…", + "Wrap": "Emballer", + "Done": "Terminé", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Cliquer sur \"%1\" génèrera un code que tu peux envoyer à d’autres. Les codes cadeaux peuvent être récupérés plusieurs fois par n’importe qui, mais expirent après un jour ou deux. Tu ne peux générer qu’un seul code cadeau par heure. Ta partie sera sauvegardée après l’envoi.", + "You may put between %1 and %2 cookies in the gift box.": "Tu peux mettre entre %1 et %2 cookies dans le paquet cadeau.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Tu peux ajouter un message. Pas de grossièretés !
%1 lignes et %2 caractères maximum.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Une fois un cadeau récupéré, tu devras attendre une heure avant de pouvoir en récupérer un autre. Ta partie sera sauvegardée après la récupération.", + "Box design": "Apparence du paquet", + "Icon": "Icône", + "Here's your gift code!
Make sure to copy it so you can share it.": "Voilà ton code cadeau !
N’oublie pas de le copier pour pouvoir le partager.", + "Code expired.": "Code expiré.", + "Invalid code.": "Code non valide.", + "Gift redeemed!
Inside, you find:": "Cadeau récupéré !
Tu y trouves :", + "There's a note too!": "Il y a aussi un message !", + "How nice!": "Comme c’est gentil !", + "You've already sent or redeemed a gift recently.": "Tu as déjà récemment envoyé ou récupéré un cadeau.", + "Customize": "Personnaliser", + "Customize your clones": "Personnaliser tes clones", + "Sprung from your very DNA. Shape them in your image!": "Issus de ton propre ADN. Modèle-les à ton image !", + "Hair": "Cheveux", + "Hair color": "Couleur de cheveux", + "Skin color": "Couleur de peau", + "Head shape": "Forme de tête", + "Face": "Visage", + "Extra": "/", + "Everyone's here.": "Tout le monde est là.", + "Won't you have some cookies too?": "Tu ne veux pas des cookies, toi aussi ?", "Achievement unlocked": "Trophée débloqué", "Make %1 just from %2.": "Fais %1 à partir de %2 seulement.", "Bake %1 in one ascension.": "Cuis %1 en une seule ascension.", @@ -1380,6 +1433,7 @@ AddLanguage('FR','french',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Possède au moins 1 exemplaire de l'objet le plus cher, 2 du second plus cher, 4 du suivant et ainsi de suite (limité à %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Possède au moins 10 exemplaires de l'objet le plus cher, 20 du second plus cher, 30 du suivant et ainsi de suite.", "Click a golden cookie.": "Clique sur un cookie doré.", + "Click a wrath cookie.": "Clique sur un cookie colérique.", "Click %1.": "Clique %1.", "Hack in some cookies.": "Pirate des cookies.", "Click really, really fast.": "Clique vraiment, vraiment vite.", @@ -1387,6 +1441,7 @@ AddLanguage('FR','french',{ "Own %1.": "Possède %1.", "Purchase %1.": "Achète %1.", "Dunk the cookie.": "Trempe le cookie.", + "Trigger the grandmapocalypse for the first time.": "déclenche la grandmapocalypse pour la première fois.", "Appease the grandmatriarchs at least once.": "Apaise les grand-matriarches au moins une fois.", "Appease the grandmatriarchs at least %1 times.": "Apaise les grand-matriarches au moins %1 fois.", "Declare a covenant with the grandmatriarchs.": "Engage-toi auprès des grand-matriarches.", @@ -1418,6 +1473,7 @@ AddLanguage('FR','french',{ "Own %1 upgrades and %2 buildings.": "Possède %1 améliorations et %2 constructions.", "Own %1 heavenly upgrades.": "Possède %1 améliorations célestes. ", "Burst the near-extinct shiny wrinkler.": "Éclate le rideux brillant en voie de disparition.", + "Poke a wrinkler %1 times without killing it.": "Touche un rideux %1 fois sans le tuer.", "Click a golden cookie less than 1 second after it spawns.": "Clique sur un cookie doré moins d'1 seconde après son apparition.", "Click a golden cookie less than 1 second before it dies.": "Clique sur un cookie doré moins d'1 seconde avant qu'il ne meure.", "Harvest %1 coalescing sugar lumps.": "Récolte %1 morceaux de sucre en cours de formation.", @@ -1445,9 +1501,14 @@ AddLanguage('FR','french',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Produis des bénéfices sur le marché boursiers dépassant une année entière de tes CpS (%1 $).", "Unlock the highest-tier stock market headquarters.": "Débloque le plus haut palier du quartier général de la bourse.", "Have your stock market profits surpass $%1.": "Produis des bénéfices boursiers dépassant %1 $.", + "Take out a loan and ascend before incurring the CpS penalty.": "Fais un prêt et effectue une ascension avant de subir la pénalité de CpS.", "Own %1 kitten upgrades.": "Possède %1 améliorations de chatons.", "Find the forgotten madeleine.": "Trouve la madeleine oubliée.", "Click one of Santa's helper grandmas during Christmas season.": "Clique sur une des grand-mères assistantes du Père Noël pendant la saison de Noël.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Utilise le code cadeau cookie d’un ami (ou le tiens, on ne te juge pas).", + "Shape your clones to resemble %1.": "Modèle tes clones pour ressembler à %1.", + "Clone": "/", + "Unlock the final building.": "Débloque le dernier bâtiment.", "Frenzy": "Frénésie", "Elder frenzy": "Frénésie des anciennes", "Click frenzy": "Frénésie de clics", @@ -1467,6 +1528,7 @@ AddLanguage('FR','french',{ "Sugar frenzy": "Frénésie sucrière", "Loan %1": "Prêt %1", "Loan %1 (interest)": "Prêt %1 (intérêts)", + "Gifted out": "À court de cadeaux", "%1 Power!": "Pouvoir de %1 !", "%1 Burden!": "Fardeau de %1 !", "Cookie production x%1 for %2!": "Production de cookies x%1 pendant %2 !", @@ -1486,6 +1548,7 @@ AddLanguage('FR','french',{ "You find %1% more golden cookies for the next %2.": "Tu trouves %1 % plus de cookies dorés pendant %2.", "Spells backfire %1 times less for %2.": "Les sorts se retournent %1 fois moins contre toi pendant %2.", "Spells backfire %1 times more for %2.": "Les sorts se retournent %1 fois plus contre toi pendant %2.", + "Can't send or receive gifts again for %1.": "Tu ne peux pas envoyer ni recevoir de cadeaux pendant %1.", "can be done once every %1": "peut être fait une fois toutes les %1", "usable again in %1": "utilisable à nouveau dans %1", "+%1/s": "+ %1/s", @@ -1813,6 +1876,9 @@ AddLanguage('FR','french',{ "[STOCK 17 NAME]Great Minds": "Grands esprits", "[STOCK 17 TYPE]Publicists": "Publicitaires", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "Pâtisserie %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "TOI", "from %1": "à partir de %1", "%1: currently worth $%2 per unit.": "%1 : vaut actuellement %2 $ l'unité.", "You currently own %1 (worth $%2).": "Tu possèdes actuellement %1 (valant %2 $).", @@ -2692,6 +2758,62 @@ AddLanguage('FR','french',{ "[Upgrade name 816]Web cookies": "Cookies internet", "[Upgrade name 817]Steamed cookies": "Cookies à la vapeur", "[Upgrade name 818]Deep-fried cookie dough": "Pâte à cookies frite", + "[Upgrade name 819]Wrapping paper": "Papier cadeau", + "[Upgrade name 820]Havreflarn": "Galettes suédoises", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Barres de cookie", + "[Upgrade name 824]Nines": "Neufs", + "[Upgrade name 825]Clone grandmas": "Grand-mères clonées", + "[Upgrade name 826]Cloning vats": "Bacs à clonage", + "[Upgrade name 827]Energized nutrients": "Nutriments énergisés", + "[Upgrade name 828]Stunt doubles": "Doublures", + "[Upgrade name 829]Clone recycling plant": "Usine de recyclage de clones", + "[Upgrade name 830]Free-range clones": "Clones élevés en plein air", + "[Upgrade name 831]Genetic tailoring": "Ajustement génétique", + "[Upgrade name 832]Power in diversity": "Le pouvoir de la diversité", + "[Upgrade name 833]Self-betterment": "Amélioration de soi", + "[Upgrade name 834]Source control": "Contrôle des sources", + "[Upgrade name 835]United workforce": "Main-d’œuvre unie", + "[Upgrade name 836]Safety patrols": "Patrouilles de sécurité", + "[Upgrade name 837]Clone rights": "Droits des clones", + "[Upgrade name 838]One big family": "Une grande famille", + "[Upgrade name 839]Fine-tuned body plans": "Plans corporels peaufinés", + "[Upgrade name 840]Foam-tipped canes": "Cannes à pointe de mousse", + "[Upgrade name 841]Self-driving tractors": "Tracteurs autonomes", + "[Upgrade name 842]Mineshaft supports": "Supports de puits de mine", + "[Upgrade name 843]Universal automation": "Automatisation universelle", + "[Upgrade name 844]The big shortcake": "Le grand shortcake", + "[Upgrade name 845]Temple traps": "Pièges de temples", + "[Upgrade name 846]Polymorphism": "Polymorphisme", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "Chez vous en 30 minutes ou remboursé", + "[Upgrade name 848]The dose makes the poison": "La dose fait le poison", + "[Upgrade name 849]A way home": "Le chemin de la maison", + "[Upgrade name 850]Rectifying a mistake": "Corriger une erreur", + "[Upgrade name 851]Candied atoms": "Atomes bonbonnés", + "[Upgrade name 852]Lab goggles but like cool shades": "Lunettes de laboratoire, version cool", + "[Upgrade name 853]Gambler's fallacy fallacy": "Raisonnement fallacieux de la martingale", + "[Upgrade name 854]The more they stay the same": "Plus c'est pareil", + "[Upgrade name 855]Simulation failsafes": "Mécanismes de sécurité de simulation", + "[Upgrade name 856]The other routes to Rome": "D’autres chemins mènent à Rome", + "[Upgrade name 857]Intellectual property theft": "Vol de propriété intellectuelle", + "[Upgrade name 858]Reading your clones bedtime stories": "Lecture de contes à tes clones", + "[Upgrade name 859]Accelerated development": "Développement accéléré", + "[Upgrade name 860]Peer review": "Évaluation par les pairs", + "[Upgrade name 861]Fortune #020": "CAC #020", + "[Upgrade name 862]Personal biscuit": "Biscuit personnel", + "[Upgrade name 863]Unshackled glimmeringue": "Scintimeringue déchaînée", + "[Upgrade name 864]Unshackled You": "Toi, version déchaînée", + "[Upgrade name 865]Kitten strategists": "Stratèges chatons", + "[Upgrade name 866]Baklavas": "Baklavas", + "[Upgrade name 867]Snowball cookies": "Cookies boule de neige", + "[Upgrade name 868]Sequilhos": "Sequilhos", + "[Upgrade name 869]Hazelnut swirlies": "Roulés noisette", + "[Upgrade name 870]Spritz cookies": "Cookies spritz", + "[Upgrade name 871]Mbatata cookies": "Cookies mbatata", + "[Upgrade name 872]Springerles": "Springerles", + "[Upgrade name 873]Undecillion fingers": "Biscuits à la cuillère undecilion", + "[Upgrade name 874]Omniplast mouse": "Souris omniplast", "[Achievement name 0]Wake and bake": "Pâtisserie au réveil", "[Achievement name 1]Making some dough": "Se faire de la pâte", "[Achievement name 2]So baked right now": "Tellement cuit, là", @@ -2985,7 +3107,7 @@ AddLanguage('FR','french',{ "[Achievement name 290]Way back then": "Il y a bien longtemps", "[Achievement name 291]Exotic matter": "Matière exotique", "[Achievement name 292]At the end of the tunnel": "Au bout du tunnel", - "[Achievement name 293]Click (starring Adam Sandler)": "Clic (avec Adam Sandler)", + "[Achievement name 293]Click (starring Adam Sandler)": "Clic (avec Adam Sableur)", "[Achievement name 294]Frantiquities": "Frantiquités", "[Achievement name 295]Overgrowth": "Surabondance", "[Achievement name 296]Sedimentalism": "Sédimentalisme", @@ -3280,5 +3402,59 @@ AddLanguage('FR','french',{ "[Achievement name 585]I'll rest when I'm dead": "Je me reposerai à ma mort", "[Achievement name 586]What do you get for the baker who has everything": "Qu'offrir au pâtissier qui a tout", "[Achievement name 587]Bottomless pit": "Fosse sans fond", - "[Achievement name 588]All the stars in heaven": "Toutes les étoiles du firmament" + "[Achievement name 588]All the stars in heaven": "Toutes les étoiles du firmament", + "[Achievement name 589]No time like the present": "Rien ne vaut le présent", + "[Achievement name 590]Can we get much higher": "Est-ce qu’on peut aller plus haut", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Un jeu nommé Vitesse (non, en fait, c’est Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Réserve pour les jours sombres", + "[Achievement name 593]And a little extra": "Il en reste encore", + "[Achievement name 594]Grandmapocalypse": "Grandmapocalypse", + "[Achievement name 595]Wrath cookie": "Cookie colérique", + "[Achievement name 596]No more room in hell": "Plus de place en enfer", + "[Achievement name 597]In her likeness": "À son image", + "[Achievement name 598]Wrinkler poker": "Chatouilleur de rideux", + "[Achievement name 599]Septcentennial": "Septcentenaire", + "[Achievement name 600]My own clone": "Mon propre clone", + "[Achievement name 601]Multiplicity": "Multiplicité", + "[Achievement name 602]Born for this job": "Né pour ce métier", + "[Achievement name 603]Episode II": "Épisode II", + "[Achievement name 604]Copy that": "Copie conforme", + "[Achievement name 605]Life finds a way": "La vie trouve son chemin", + "[Achievement name 606]Overcrowding": "Surpopulation", + "[Achievement name 607]Strength in numbers": "L'union fait la force", + "[Achievement name 608]Army of me": "Armée de moi", + "[Achievement name 609]Know thyself": "Connais-toi toi-même", + "[Achievement name 610]Didn't make sense not to live": "Ne pas vivre est absurde", + "[Achievement name 611]Genetic bottleneck": "Goulot génétique", + "[Achievement name 612]Despite everything, it's still you": "C’est toujours toi malgré tout", + "[Achievement name 613]Everyone everywhere all at once": "Tout le monde partout en même temps", + "[Achievement name 614]Self-made": "Fait tout seul", + "[Achievement name 615]Reproducible results": "Résultats reproductibles", + "[Achievement name 616]That's all you": "C’est tout toi", + "[Achievement name 617]Self-improvement": "Amélioration de soi", + "[Achievement name 618]And now you're even older": "Et te voilà encore plus vieux", + "[Achievement name 619]Au naturel": "Au naturel", + "[Achievement name 620]Dirt-rich": "Salement riche", + "[Achievement name 621]Bots build bots": "Des robots faisant des robots", + "[Achievement name 622]Getting that bag": "On veut le sac", + "[Achievement name 623]The leader is good, the leader is great": "Le chef est bon, le chef est grand", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Tu ne penses pas qu’ils auraient pu utiliser… ça ne peut pas avoir été de la-", + "[Achievement name 625]Signed, sealed, delivered": "Signé, scellé, livré", + "[Achievement name 626]Sugar, spice, and everything nice": "De sucre, d’épice, et tout ce qui est bon", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Vraiment bien loin du Kansas", + "[Achievement name 628]I only meant to stay a while": "Je ne pensais rester qu’un instant", + "[Achievement name 629]Not 20 years away forever": "Pas 20 ans au loin pour toujours", + "[Achievement name 630]Bright side of the Moon": "Face lumineuse de la Lune", + "[Achievement name 631]Riding the Mersenne twister": "On surfe le Mersenne Twister", + "[Achievement name 632]Divide and conquer": "Diviser pour mieux régner", + "[Achievement name 633]Pebcakes": "Pebcakes", + "[Achievement name 634]Greener on the other sides": "Plus verte chez les voisins", + "[Achievement name 635]Where is my mind": "Où ai-je la tête", + "[Achievement name 636]Introspection": "Introspection", + "[Achievement name 637]Debt evasion": "Évasion créancière", + "[Achievement name 638]Oft we mar what's well": "Nous gâtons souvent ce qui est bien", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Ce qui ne clique pas", + "[Achievement name 641]All on deck": "On passe la main", + "[Achievement name 642]A round of applause": "Une salve d’applaudissements" }); \ No newline at end of file diff --git a/loc/IT.js b/loc/IT.js index 54d721cf..5f135c9e 100644 --- a/loc/IT.js +++ b/loc/IT.js @@ -231,6 +231,8 @@ AddLanguage('IT','italian',{ "Licorice milk": "Latte alla liquirizia", "Rose milk": "Latte alla rosa", "Dragonfruit milk": "Latte al frutto del drago", + "Peach milk": "Latte alla pesca", + "Hazelnut milk": "Latte alla nocciola", "Info": "/", "About": "Informazioni sul gioco", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker è un gioco in javascript sviluppato da %1 e %2.", @@ -258,8 +260,10 @@ AddLanguage('IT','italian',{ "Load from file": "Carica da file", "Use this to keep backups on your computer": "Queste opzioni ti permettono di conservare le copie di backup sul tuo computer", "Export save": "Esporta salvataggio", + "Export": "Esporta", "This is your save code.
Copy it and keep it somewhere safe!": "Questo è il codice del tuo salvataggio.
Copialo e conservalo in un luogo sicuro!", "Import save": "Importa salvataggio", + "Import": "Importa", "Please paste in the code that was given to you on save export.": "Inserisci il codice ottenuto all'esportazione del salvataggio.", "Game saved": "Partita salvata", "Game loaded": "Partita caricata", @@ -609,6 +613,7 @@ AddLanguage('IT','italian',{ "Reality Bending": "Manipolazione della realtà", "Dragon Orbs": "Sfere del drago", "Supreme Intellect": "Intelletto supremo", + "Dragon Guts": "Viscere di drago", "News :": "Ultime notizie:", "Ticker (grandma)": [ "Soffici biscotti.", @@ -743,6 +748,11 @@ AddLanguage('IT','italian',{ "gli astronomi avvertono di un cambi di traiettoria del cervello artificiale panettiere e temono possibili collisioni con conseguenti commozioni celebrali.", "si ricorda ai dipendenti che i cervelli artificiali panettieri sono materiale di proprietà della panetteria e non permesso dargli soprannomi per ingraziarseli." ], + "Ticker (You)": [ + "e anche quest'anno, la persona dell'anno sei tu! Che sorpresa!", + "i ristoranti locali ti staranno forse servendo carne clonata di contrabbando? La nostra deliziosa inchiesta seguirà dopo il telegiornale di stasera.", + "fan calpestano a morte una celebrità dei biscotti: era tutto un malinteso, si trattava di un clone sfuggito e scambiato per l'originale." + ], "Ticker (Halloween)": [ "aumentano i rituali pagani, mentre i bambini di tutto il mondo indossano strani costumi e ricattano i proprietari delle abitazioni per ottenere dolciumi.", "bambini di tutto il mondo \"confusi e disorientati\", tutti i dolcetti di Halloween sono stati sostituiti da biscotti.", @@ -1140,6 +1150,14 @@ AddLanguage('IT','italian',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Questi cervelli artificiali dalle dimensioni planetarie sono in grado di far materializzare biscotti con la sola forza del pensiero. Per loro spazio e tempo sono irrilevanti. La realtà è un concetto relativo.", "[Cortex baker business name]Think tank": "Pensatoio", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Ci sono così tanti modi con cui puoi aumentare i profitti. O forse no? Assumi gli esperti più brillanti dell'universo conosciuto e lascia che si spremano le meningi per te!", + "You": "Tu", + "%1 You": [ + "%1 tu", + "%1 tu" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Sei la sola ragione dietro a tutti questi biscotti. Pensa che se fossi replicabile...probabilmente guadagneresti ancora di più.", + "[You business name]You": "Tu", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "La tua attività non potrebbe andare meglio. L'unico vero modo per migliorarla è migliorare sé stessi e diventare l'AD migliore che ci sia.", "CpS": "BpS", "cookies/click": "biscotti/clic", "%1 CpS": "%1 BpS", @@ -1218,6 +1236,7 @@ AddLanguage('IT','italian',{ "Wrinklers appear %1 times as fast.": "I divoratori compariranno %1 volte più rapidamente.", "Wrinklers spawn much more frequently.": "I divoratori vengono generati con maggiore frequenza.", "Wrinklers explode into %1% more cookies.": "Aumenta del %1% i biscotti generati dall'esplosione dei divoratori.", + "Wrinklers digest %1% more cookies.": "I divoratori digeriscono %1% di biscotti in più.", "Unlocks... something.": "Sblocca... qualcosa.", "In the festive hat, you find...": "Nel cappello natalizio trovi...", "a festive test tube
and %1.": "una provetta natalizia
e %1.", @@ -1296,6 +1315,7 @@ AddLanguage('IT','italian',{ "Auto": "Riproduzione automatica", "Loop": "Ripeti", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Sblocca il selettore dello sfondo, con cui potrai scegliere lo sfondo del gioco.
Include una serie di gusti base.", + "Contains more wallpapers for your background selector.": "Contiene altri sfondi per il tuo Selettore dello sfondo.", "Lets you pick which wallpaper to display.": "Ti permette di scegliere lo sfondo da mostrare.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Questo è il primo potenziamento celestiale, che sblocca il sistema delle scaglie celestiali.
A ogni ascensione, i biscotti ottenuti nella vita precedente sono trasformati in scaglie celestiali e prestigio.
Puoi spendere le scaglie celestiali per acquistare diversi potenziamenti trascendentali permanenti.
Ogni livello di prestigio ti conferisce inoltre +1% B/s.", "You can attract %1 more wrinklers.": "Puoi attrarre %1 divoratori aggiuntivi.", @@ -1381,6 +1401,39 @@ AddLanguage('IT','italian',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Tutti i biscotti dorati sono biscotti iracondi con probabilità maggiore di un effetto negativo.", "Wrinklers appear %1% faster and digest %2% more cookies.": "I divoratori si materializzano il %1% più velocemente e digeriscono il %2% in più di biscotti.", "Effect is only active when your total amount of buildings ends with 0.": "L'effetto è attivo solo se la quantità totale delle tue strutture termina con uno 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Ora puoi inviare e ricevere regali con altri giocatori attraverso i pulsanti in alto a destra del menu %1.", + "You need at least %1 cookies in bank to send and receive gifts.": "Ti servono almeno %1 biscotti nella banca per inviare e ricevere regali.", + "Send a gift": "Invia un regalo", + "Send": "Invia", + "Redeem a gift": "Riscatta un regalo", + "Redeem": "Riscatta", + "paste code...": "incolla il codice...", + "Wrap": "Incarta", + "Done": "Fatto", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Facendo clic su \"%1\", si genera un codice di testo che puoi inviare agli altri. I codici regalo possono essere riscattati più volte da chiunque, ma scadono dopo un paio di giorni. Puoi generare un solo codice regalo all'ora. Il gioco verrà salvato dopo l'invio.", + "You may put between %1 and %2 cookies in the gift box.": "Puoi mettere tra %1 e %2 biscotti nella scatola regalo.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Puoi lasciare un biglietto. Non essere scortese!
Limite massimo di %1 righe e %2 caratteri.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Dopo aver riscattato un regalo, dovrai aspettare un'ora prima di poterne riscattare un altro. Il gioco verrà salvato dopo la riscossione.", + "Box design": "Design della scatola", + "Icon": "Icona", + "Here's your gift code!
Make sure to copy it so you can share it.": "Ecco il tuo codice regalo!
Assicurati di copiarlo così da poterlo condividere.", + "Code expired.": "Codice scaduto.", + "Invalid code.": "Codice non valido.", + "Gift redeemed!
Inside, you find:": "Regalo riscosso!
Al suo interno, trovi:", + "There's a note too!": "C'è anche un biglietto!", + "How nice!": "Che pensiero gentile!", + "You've already sent or redeemed a gift recently.": "Hai già inviato o riscosso un regalo di recente.", + "Customize": "Personalizza", + "Customize your clones": "Personalizza i tuoi cloni", + "Sprung from your very DNA. Shape them in your image!": "Generati direttamente a partire dal tuo DNA. Plasmali a tua immagine e somiglianza!", + "Hair": "Capelli", + "Hair color": "Colore dei capelli", + "Skin color": "Colore della pelle", + "Head shape": "Forma della testa", + "Face": "Viso", + "Extra": "/", + "Everyone's here.": "Non manca nessuno.", + "Won't you have some cookies too?": "Perché non prendi anche tu dei biscotti?", "Achievement unlocked": "Obiettivo sbloccato", "Make %1 just from %2.": "Produci %1 con queste unità: %2.", "Bake %1 in one ascension.": "Inforna %1 in una singola ascensione.", @@ -1399,6 +1452,7 @@ AddLanguage('IT','italian',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Possiedi almeno 1 unità dell'oggetto più costoso, 2 unità del secondo oggetto più costoso, 4 unità di quello successivo e così via (fino a un massimo di %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Possiedi almeno 10 unità dell'oggetto più costoso, 20 unità del secondo oggetto più costoso, 30 unità di quello successivo e così via.", "Click a golden cookie.": "Fai clic su un biscotto dorato.", + "Click a wrath cookie.": "Fai clic su un biscotto furia.", "Click %1.": "Fai clic su %1.", "Hack in some cookies.": "Ottieni biscotti con i trucchi.", "Click really, really fast.": "Fai clic a tutta velocità.", @@ -1406,6 +1460,7 @@ AddLanguage('IT','italian',{ "Own %1.": "Possiedi %1.", "Purchase %1.": "Acquista %1.", "Dunk the cookie.": "Inzuppa il biscotto.", + "Trigger the grandmapocalypse for the first time.": "Attiva la nonnapocalisse per la prima volta.", "Appease the grandmatriarchs at least once.": "Placa le matriarche almeno una volta.", "Appease the grandmatriarchs at least %1 times.": "Placa le matriarche almeno %1 volte.", "Declare a covenant with the grandmatriarchs.": "Stringi un'alleanza con le matriarche.", @@ -1437,6 +1492,7 @@ AddLanguage('IT','italian',{ "Own %1 upgrades and %2 buildings.": "Possiedi %1 potenziamenti e %2 strutture.", "Own %1 heavenly upgrades.": "Possiedi %1 potenziamenti celestiali.", "Burst the near-extinct shiny wrinkler.": "Fai esplodere il quasi estinto divoratore lucente.", + "Poke a wrinkler %1 times without killing it.": "Infastidisci un divoratore %1 volte senza ucciderlo.", "Click a golden cookie less than 1 second after it spawns.": "Fai clic su un biscotto dorato meno di 1 secondo dopo la sua comparsa.", "Click a golden cookie less than 1 second before it dies.": "Fai clic su un biscotto dorato meno di 1 secondo prima che scompaia.", "Harvest %1 coalescing sugar lumps.": "Raccogli %1 zollette di zucchero in crescita.", @@ -1464,9 +1520,14 @@ AddLanguage('IT','italian',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Supera l'equivalente di un intero anno di B/s (%1 $) con i profitti del mercato azionario.", "Unlock the highest-tier stock market headquarters.": "Sblocca la classe più alta della sede del mercato azionario.", "Have your stock market profits surpass $%1.": "Supera %1 $ con i profitti del mercato azionario.", + "Take out a loan and ascend before incurring the CpS penalty.": "Richiedi un prestito prima di subire la penalità di B/s.", "Own %1 kitten upgrades.": "Possiedi %1 potenziamenti felini.", "Find the forgotten madeleine.": "Trova la madeleine perduta.", "Click one of Santa's helper grandmas during Christmas season.": "Fai clic sulle nonnine dell'aiutante di Babbo Natale durante la stagione natalizia.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Riscatta un codice regalo di biscotti da un amico (o anche da te, tanto non ti giudichiamo).", + "Shape your clones to resemble %1.": "Plasma i tuoi cloni in modo che assumano le sembianze di %1.", + "Clone": "/", + "Unlock the final building.": "Sblocca la struttura finale.", "Frenzy": "Frenesia", "Elder frenzy": "Frenesia venerabile", "Click frenzy": "Frenesia di clic", @@ -1486,6 +1547,7 @@ AddLanguage('IT','italian',{ "Sugar frenzy": "Frenesia di zucchero", "Loan %1": "Prendi in prestito %1", "Loan %1 (interest)": "Prendi in prestito %1 (interessi)", + "Gifted out": "Senza più regali", "%1 Power!": "Accelerazione di tutte le unità %1!", "%1 Burden!": "Rallentamento di tutte le unità %1!", "Cookie production x%1 for %2!": "Produzione di biscotti x%1 per %2!", @@ -1505,6 +1567,7 @@ AddLanguage('IT','italian',{ "You find %1% more golden cookies for the next %2.": "Frequenza dei biscotti dorati aumentata del %1% per %2.", "Spells backfire %1 times less for %2.": "Probabilità di fallimento degli incantesimi ridotta di %1 volte per %2.", "Spells backfire %1 times more for %2.": "Probabilità di fallimento degli incantesimi aumentata di %1 volte per %2.", + "Can't send or receive gifts again for %1.": "Non puoi inviare o ricevere ancora regali per %1.", "can be done once every %1": "lo puoi fare una volta ogni %1", "usable again in %1": "utilizzabile di nuovo tra %1", "+%1/s": "+%1/sec.", @@ -1832,6 +1895,9 @@ AddLanguage('IT','italian',{ "[STOCK 17 NAME]Great Minds": "Grandi menti", "[STOCK 17 TYPE]Publicists": "Pubblicisti", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "Pasticceria di %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "TU", "from %1": "da %1", "%1: currently worth $%2 per unit.": "%1: attualmente vale $%2 per unità.", "You currently own %1 (worth $%2).": "Attualmente possiedi %1 (valore: $%2).", @@ -2711,6 +2777,62 @@ AddLanguage('IT','italian',{ "[Upgrade name 816]Web cookies": "Biscotti del web", "[Upgrade name 817]Steamed cookies": "Biscotti al vapore", "[Upgrade name 818]Deep-fried cookie dough": "Impasto per biscotti fritto", + "[Upgrade name 819]Wrapping paper": "Carta da regalo", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Cialde dolci", + "[Upgrade name 823]Cookie bars": "Barrette di biscotto", + "[Upgrade name 824]Nines": "Biscotti nove", + "[Upgrade name 825]Clone grandmas": "Nonne cloni", + "[Upgrade name 826]Cloning vats": "Cisterne di clonazione", + "[Upgrade name 827]Energized nutrients": "Nutrienti energetici", + "[Upgrade name 828]Stunt doubles": "Controfigure", + "[Upgrade name 829]Clone recycling plant": "Impianto di riciclaggio di cloni", + "[Upgrade name 830]Free-range clones": "Cloni da allevamento all'aperto", + "[Upgrade name 831]Genetic tailoring": "Adattamento genetico", + "[Upgrade name 832]Power in diversity": "Forza della diversità", + "[Upgrade name 833]Self-betterment": "Automiglioramento", + "[Upgrade name 834]Source control": "Controllo dell'origine", + "[Upgrade name 835]United workforce": "Manodopera unita", + "[Upgrade name 836]Safety patrols": "Pattugliamenti per la sicurezza", + "[Upgrade name 837]Clone rights": "Diritti dei cloni", + "[Upgrade name 838]One big family": "Una grande famiglia", + "[Upgrade name 839]Fine-tuned body plans": "Piani corporei perfezionati", + "[Upgrade name 840]Foam-tipped canes": "Bastoni ortopedici", + "[Upgrade name 841]Self-driving tractors": "Trattori a guida autonoma", + "[Upgrade name 842]Mineshaft supports": "Supporti per tunnel sotterranei", + "[Upgrade name 843]Universal automation": "Automazione universale", + "[Upgrade name 844]The big shortcake": "Il grande dolce di pastafrolla", + "[Upgrade name 845]Temple traps": "Trappole da tempio", + "[Upgrade name 846]Polymorphism": "Polimorfismo", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "A casa tua in 30 minuti o riceverai un rimborso", + "[Upgrade name 848]The dose makes the poison": "È la dose che fa il veleno", + "[Upgrade name 849]A way home": "La strada di casa", + "[Upgrade name 850]Rectifying a mistake": "Correzione di un errore", + "[Upgrade name 851]Candied atoms": "Atomi caramellati", + "[Upgrade name 852]Lab goggles but like cool shades": "Occhiali da laboratorio, ma cool", + "[Upgrade name 853]Gambler's fallacy fallacy": "Fallacia del gioco d'azzardo", + "[Upgrade name 854]The more they stay the same": "Più non cambiano", + "[Upgrade name 855]Simulation failsafes": "Piani alternativi di simulazione", + "[Upgrade name 856]The other routes to Rome": "Le altre strade per Roma", + "[Upgrade name 857]Intellectual property theft": "Furto di proprietà intellettuale", + "[Upgrade name 858]Reading your clones bedtime stories": "Lettura di fiabe della buonanotte ai tuoi cloni", + "[Upgrade name 859]Accelerated development": "Sviluppo accelerato", + "[Upgrade name 860]Peer review": "Valutazione tra pari", + "[Upgrade name 861]Fortune #020": "Profezia #020", + "[Upgrade name 862]Personal biscuit": "Biscotto personale", + "[Upgrade name 863]Unshackled glimmeringue": "Rilascio di barlumeringa", + "[Upgrade name 864]Unshackled You": "Rilascio di te", + "[Upgrade name 865]Kitten strategists": "Strateghi felini", + "[Upgrade name 866]Baklavas": "Baklava", + "[Upgrade name 867]Snowball cookies": "Biscotti palle di neve", + "[Upgrade name 868]Sequilhos": "Sequilhos", + "[Upgrade name 869]Hazelnut swirlies": "Spirali alle nocciole piccole", + "[Upgrade name 870]Spritz cookies": "Biscotti spritz", + "[Upgrade name 871]Mbatata cookies": "Biscotti Mbatata", + "[Upgrade name 872]Springerles": "Springerle", + "[Upgrade name 873]Undecillion fingers": "Un undecilione di dita", + "[Upgrade name 874]Omniplast mouse": "Mouse di omniplast", "[Achievement name 0]Wake and bake": "Sorgi e inforna", "[Achievement name 1]Making some dough": "Impastando biscotti", "[Achievement name 2]So baked right now": "Biscotti fatti (e lo sono anch'io)", @@ -3299,5 +3421,59 @@ AddLanguage('IT','italian',{ "[Achievement name 585]I'll rest when I'm dead": "Riposerò quando sarò morto", "[Achievement name 586]What do you get for the baker who has everything": "Cosa regalare a un panettiere che ha tutto", "[Achievement name 587]Bottomless pit": "Pozzo senza fondo", - "[Achievement name 588]All the stars in heaven": "Tutte le stelle in cielo" + "[Achievement name 588]All the stars in heaven": "Tutte le stelle in cielo", + "[Achievement name 589]No time like the present": "Non c'è momento migliore del presente", + "[Achievement name 590]Can we get much higher": "Possiamo arrivare molto più in alto", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Velocità è il nome del gioco (non è vero, si chiama Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Riserva d'emergenza", + "[Achievement name 593]And a little extra": "E un piccolo extra", + "[Achievement name 594]Grandmapocalypse": "Nonnapocalisse", + "[Achievement name 595]Wrath cookie": "Biscotto furia", + "[Achievement name 596]No more room in hell": "Non c'è più posto all'inferno", + "[Achievement name 597]In her likeness": "A sua immagine e somiglianza", + "[Achievement name 598]Wrinkler poker": "Infastidire di divoratori", + "[Achievement name 599]Septcentennial": "Settecentenario", + "[Achievement name 600]My own clone": "Il mio clone", + "[Achievement name 601]Multiplicity": "Molteplicità", + "[Achievement name 602]Born for this job": "Eccellente in questo lavoro", + "[Achievement name 603]Episode II": "Episodio II", + "[Achievement name 604]Copy that": "Copycat", + "[Achievement name 605]Life finds a way": "La vita trova un modo", + "[Achievement name 606]Overcrowding": "Sovraffollamento", + "[Achievement name 607]Strength in numbers": "La forza dei numeri", + "[Achievement name 608]Army of me": "Un esercito di me", + "[Achievement name 609]Know thyself": "Conoscere sé stessi", + "[Achievement name 610]Didn't make sense not to live": "Non aveva senso non vivere", + "[Achievement name 611]Genetic bottleneck": "Ingorgo genetico", + "[Achievement name 612]Despite everything, it's still you": "Nonostante tutto, sei ancora tu", + "[Achievement name 613]Everyone everywhere all at once": "Tutti e ovunque in contemporanea", + "[Achievement name 614]Self-made": "Fatti da sé", + "[Achievement name 615]Reproducible results": "Risultati riproducibili", + "[Achievement name 616]That's all you": "Tutta opera tua", + "[Achievement name 617]Self-improvement": "Autopotenziamento", + "[Achievement name 618]And now you're even older": "E ora hai anche più anni", + "[Achievement name 619]Au naturel": "Al naturale", + "[Achievement name 620]Dirt-rich": "Ricchezza in terra", + "[Achievement name 621]Bots build bots": "Robot che costruiscono robot", + "[Achievement name 622]Getting that bag": "Prendi quella borsa", + "[Achievement name 623]The leader is good, the leader is great": "Il leader è buono, il leader è grande", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Non crederai che possano aver usato... Non può essere stato...", + "[Achievement name 625]Signed, sealed, delivered": "Firmato, imbustato, consegnato", + "[Achievement name 626]Sugar, spice, and everything nice": "Zucchero, cannella e ogni cosa bella", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Neanche più lontanamente vicini al Kansas", + "[Achievement name 628]I only meant to stay a while": "Volevo fermarmi solo per un po'", + "[Achievement name 629]Not 20 years away forever": "Non per sempre a 20 anni di distanza", + "[Achievement name 630]Bright side of the Moon": "Il lato luminoso della Luna", + "[Achievement name 631]Riding the Mersenne twister": "Sull'onda dell'algoritmo Mersenne Twister", + "[Achievement name 632]Divide and conquer": "Dividi e conquista", + "[Achievement name 633]Pebcakes": "Pebcake", + "[Achievement name 634]Greener on the other sides": "Più verde sugli altri lati", + "[Achievement name 635]Where is my mind": "Dove ho la testa", + "[Achievement name 636]Introspection": "Introspezione", + "[Achievement name 637]Debt evasion": "Evasione dei debiti", + "[Achievement name 638]Oft we mar what's well": "Cercando il meglio, spesso guastiamo il bene", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Fai clic?", + "[Achievement name 641]All on deck": "Tutto l'aiuto possibile", + "[Achievement name 642]A round of applause": "Uno scroscio di applausi" }); \ No newline at end of file diff --git a/loc/JA.js b/loc/JA.js index 80bcd2ec..5d69e3a6 100644 --- a/loc/JA.js +++ b/loc/JA.js @@ -231,6 +231,8 @@ AddLanguage('JA','japanese',{ "Licorice milk": "甘草ミルク", "Rose milk": "ローズミルク", "Dragonfruit milk": "ドラゴンフルーツミルク", + "Peach milk": "ピーチミルク", + "Hazelnut milk": "ヘーゼルナッツミルク", "Info": "情報", "About": "このゲームについて", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clickerは%1と%2が制作したJavaScriptのゲームです。", @@ -258,8 +260,10 @@ AddLanguage('JA','japanese',{ "Load from file": "ファイルから読み込む", "Use this to keep backups on your computer": "こちらでパソコンにバックアップを保存することができます", "Export save": "セーブをエクスポート", + "Export": "エクスポート", "This is your save code.
Copy it and keep it somewhere safe!": "これはあなたのセーブコードです。
コピーして安全な場所に保管してください!", "Import save": "セーブをインポート", + "Import": "インポート", "Please paste in the code that was given to you on save export.": "エクスポートする時にコピーしたコードを貼り付けてください。", "Game saved": "ゲームを保存しました", "Game loaded": "ゲームを読み込みました", @@ -471,7 +475,7 @@ AddLanguage('JA','japanese',{ "ゾンビ", "ロボット" ], - "%1, age %2": "%1、%2歳", + "%1, age %2": "%1、%2歳、", "Sugar lumps!": "砂糖玉!", "Because you've baked a billion cookies in total, you are now attracting sugar lumps. They coalesce quietly near the top of your screen, under the Stats button.
You will be able to harvest them when they're ripe, after which you may spend them on all sorts of things!": "合計で10億枚のクッキーを焼いたので、砂糖玉が集まるようになりました。画面上部、記録ボタンの下でゆっくりと成長していきます。
完熟したら収穫して、色々なものに使うことができます!", "A sugar lump is coalescing here, attracted by your accomplishments.": "あなたの成果が引き寄せた砂糖玉が、ここで成長しています。", @@ -608,7 +612,8 @@ AddLanguage('JA','japanese',{ "Dragon's Curve": "ドラゴンの曲線", "Reality Bending": "現実の歪曲", "Dragon Orbs": "ドラゴンオーブ", - "Supreme Intellect": "最高峰の知性", + "Supreme Intellect": "最高峰の知性、", + "Dragon Guts": "ドラゴンのはらわた", "News :": "ニュース:", "Ticker (grandma)": [ "しっとりとしたクッキーだ。", @@ -743,6 +748,11 @@ AddLanguage('JA','japanese',{ "天文学者たちは、コーテックス・ベイカーの軌道が流れていると警告しています。正面衝突によって脳震とうを起こした場合の、高額の修復費が懸念されるためです。", "コーテックス・ベイカー世話人の皆様へ、お願い申し上げます。コーテックス・ベイカーは工房が所有する器具であり、愛称をつけて可愛がられるべきものではないことを、従業員の方々へ再度ご通達ください。" ], + "Ticker (You)": [ + "パーソンオブザイヤーは、今年も君だ!意外だね!", + "密造クローンミートは、近所のレストランでも使われているのだろうか?私たちが行ったグルメ探求調査の様子は、今夜のニュースの後にお届けします。", + "クッキー界で敬愛される大物が熱狂的ファンの集団に踏み潰され死亡したという誤報が伝わっていたが、幸いにもオリジナルと間違われた逃亡クローンだったことが分かった。" + ], "Ticker (Halloween)": [ "世界中の子供たちの間で、奇妙な衣装で住宅所有者を脅してはキャンディーを要求する異教徒の儀式が急増中。", "ハロウィンのお菓子が全部クッキーに置き換わったため、世界中の子供たちが「困惑および混乱」しています。", @@ -1140,6 +1150,14 @@ AddLanguage('JA','japanese',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "惑星ほどの大きさがあるこれらの人工脳は、クッキーのことを夢見るだけでたやすく現実に生み出すことができる。時間や空間などは重要ではない。現実とは恣意的なのである。", "[Cortex baker business name]Think tank": "シンクタンク", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "より多くの利益を生み出す方法には限りがある。いや、果たして本当にそうだろうか?既知の宇宙でもっとも優秀なエキスパートを雇用し、その頭脳を駆使してもらおう!", + "You": "あなた", + "%1 You": [ + "%1のあなた", + "%1のあなた" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "これまでに作られたクッキーは、あなた一人による成果である。あなたは考えた…では、自分を増やせばさらに多くのクッキーが作れるのではないかと。", + "[You business name]You": "あなた", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "あなたのビジネスは完璧で、もう改善の余地はない。改善できるただ一つのものがあるとすれば、それは、あなた自身…世界が認める最高のCEOになるのだ。", "CpS": "/", "cookies/click": "クッキー/クリック", "%1 CpS": "/", @@ -1218,6 +1236,7 @@ AddLanguage('JA','japanese',{ "Wrinklers appear %1 times as fast.": "シワシワ虫が%1倍速く現れる。", "Wrinklers spawn much more frequently.": "シワシワ虫の発生頻度がアップ。", "Wrinklers explode into %1% more cookies.": "シワシワ虫の破裂で獲得できるクッキーが%1%増える。", + "Wrinklers digest %1% more cookies.": "シワシワ虫がさらに%1%のクッキーを消化する。", "Unlocks... something.": "何かを…解除する。", "In the festive hat, you find...": "サンタ帽の中から見つけたのは…", "a festive test tube
and %1.": "クリスマスの試験管
%1。", @@ -1296,6 +1315,7 @@ AddLanguage('JA','japanese',{ "Auto": "オート", "Loop": "ループ", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "背景セレクターを解除。ゲームの背景が選べるようになる。
基本のフレーバー付き。", + "Contains more wallpapers for your background selector.": "背景セレクターでさらに多くの壁紙が選択できる。", "Lets you pick which wallpaper to display.": "表示したい壁紙が選べる。", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "これが最初の天界アップグレードです。天界チップシステムを解除。
昇天するごとに、前世で焼いたクッキーが天界チップ名声に変換される。
天界チップは様々な永久超越アップグレードに使える。
名声レベルは、1レベルあたり+1% CpSを恒久的に付与する。", "You can attract %1 more wrinklers.": "シワシワ虫がさらに%1匹寄ってくる。", @@ -1381,6 +1401,39 @@ AddLanguage('JA','japanese',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "黄金クッキーは全部、負の効果の可能性が高い怒りのクッキー。", "Wrinklers appear %1% faster and digest %2% more cookies.": "シワシワ虫は%1%速く出現して、%2%多くのクッキーを消化する。", "Effect is only active when your total amount of buildings ends with 0.": "建物の合計数が0で終わる時だけ、効果がアクティブになる。", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "%1メニュー画面の右上にあるボタンから、プレイヤー同士でギフトを送る/受け取れるようになりました。", + "You need at least %1 cookies in bank to send and receive gifts.": "ギフトを送る/受け取るには、%1枚以上のクッキーを所持している必要があります。", + "Send a gift": "ギフトを送る", + "Send": "送る", + "Redeem a gift": "ギフトを還元する", + "Redeem": "還元する", + "paste code...": "コードをペーストする…", + "Wrap": "包む", + "Done": "完了", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "「%1」をクリックすることで、他プレイヤーに送るテキストコードを作成できます。ギフトコードは誰でも複数回使用できますが、1〜2日で失効します。ギフトコードは一時間に一度のみ作成できます。送った後、ゲームは自動でセーブされます。", + "You may put between %1 and %2 cookies in the gift box.": "ギフトボックスには%1枚〜%2枚のクッキーを入れることができます。", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "メッセージを残すことができます。マナーを守りましょう!
最大で%1行、%2文字までです。", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "ギフトを還元したあとで別のギフトを還元するには、一時間待つ必要があります。還元した後、ゲームは自動でセーブされます。", + "Box design": "ボックスのデザイン", + "Icon": "アイコン", + "Here's your gift code!
Make sure to copy it so you can share it.": "ギフトコードをどうぞ!
コピーして共有してください。", + "Code expired.": "このコードは失効しました。", + "Invalid code.": "無効なコードです。", + "Gift redeemed!
Inside, you find:": "ギフトを還元しました!
ギフト内容:", + "There's a note too!": "メッセージもついています!", + "How nice!": "嬉しいですね!", + "You've already sent or redeemed a gift recently.": "ギフトを送ったり還元してから、十分な時間が経過していません。", + "Customize": "カスタムする", + "Customize your clones": "クローンをカスタムする", + "Sprung from your very DNA. Shape them in your image!": "他でもないあなたのDNAから発生しました。あなたのイメージに合わせよう!", + "Hair": "髪", + "Hair color": "髪の色", + "Skin color": "肌の色", + "Head shape": "頭の形", + "Face": "顔", + "Extra": "その他", + "Everyone's here.": "みんなここにいるよ。", + "Won't you have some cookies too?": "君もクッキーを食べないか?", "Achievement unlocked": "実績が解除された", "Make %1 just from %2.": "%2だけから%1作る。", "Bake %1 in one ascension.": "1回の昇天で%1焼く。", @@ -1399,6 +1452,7 @@ AddLanguage('JA','japanese',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "少なくとも最も高価なオブジェクトを1個、2番目に高価なオブジェクトを2個、その次を4個、以降も同様に所有する(上限は%1)。", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "少なくとも最も高価なオブジェクトを10個、2番目に高価なオブジェクトを20個、その次を30個、以降も同様に所有する。", "Click a golden cookie.": "黄金クッキーをクリックする。", + "Click a wrath cookie.": "憤怒のクッキーをクリックする。", "Click %1.": "%1をクリックする。", "Hack in some cookies.": "クッキーを不正入手する。", "Click really, really fast.": "すごく、すごーく速くクリックする。", @@ -1406,6 +1460,7 @@ AddLanguage('JA','japanese',{ "Own %1.": "%1を所有する。", "Purchase %1.": "%1を購入する。", "Dunk the cookie.": "クッキーをひたす。", + "Trigger the grandmapocalypse for the first time.": "初めてババアポカリプスを発動させる。", "Appease the grandmatriarchs at least once.": "少なくとも1回グランマ集団をしずめる。", "Appease the grandmatriarchs at least %1 times.": "少なくとも%1回グランマ集団をしずめる。", "Declare a covenant with the grandmatriarchs.": "グランマ集団との契約を宣言する。", @@ -1437,6 +1492,7 @@ AddLanguage('JA','japanese',{ "Own %1 upgrades and %2 buildings.": "%1アップグレードと%2建物を所有する。", "Own %1 heavenly upgrades.": "天界アップグレードを%1個手に入れる。", "Burst the near-extinct shiny wrinkler.": "絶滅危惧種の輝くシワシワ虫を破裂させる。", + "Poke a wrinkler %1 times without killing it.": "一匹のシワシワ虫を、殺すことなく%1回つつく。", "Click a golden cookie less than 1 second after it spawns.": "出現後1秒以内に黄金クッキーをクリックする。", "Click a golden cookie less than 1 second before it dies.": "消える1秒前以内に黄金クッキーをクリックする。", "Harvest %1 coalescing sugar lumps.": "砂糖玉%1を収穫する。", @@ -1464,9 +1520,14 @@ AddLanguage('JA','japanese',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "株式市場での利益が 1年間のCpS相当額($%1)を超える。", "Unlock the highest-tier stock market headquarters.": "最上級の株式市場本部を解除する。", "Have your stock market profits surpass $%1.": "株式市場の利益が$%1を超える。", + "Take out a loan and ascend before incurring the CpS penalty.": "ローンを組んでから、CpS(毎秒クッキー生産数)ペナルティーが発生する前にアセンドする。", "Own %1 kitten upgrades.": "%1子猫のアップグレードを所有する。", "Find the forgotten madeleine.": "忘れられたマドレーヌを見つける。", "Click one of Santa's helper grandmas during Christmas season.": "クリスマス期間中に、サンタのお助けおばあちゃんを一人クリックする。", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "フレンドから送られたクッキーギフトコードを使用する。(自分で自分に送ってもヨシ!)", + "Shape your clones to resemble %1.": "%1に似るよう、クローンをカスタムする。", + "Clone": "クローン", + "Unlock the final building.": "最後の建物をアンロックする。", "Frenzy": "フィーバー", "Elder frenzy": "エルダーフィーバー", "Click frenzy": "クリックフィーバー", @@ -1486,6 +1547,7 @@ AddLanguage('JA','japanese',{ "Sugar frenzy": "砂糖フィーバー", "Loan %1": "ローン%1", "Loan %1 (interest)": "ローン%1(利息)", + "Gifted out": "ギフトの限界", "%1 Power!": "%1のパワー!", "%1 Burden!": "%1の負担!", "Cookie production x%1 for %2!": "クッキー生産量が%2の間%1倍に!", @@ -1505,6 +1567,7 @@ AddLanguage('JA','japanese',{ "You find %1% more golden cookies for the next %2.": "次の%2は黄金クッキーが%1%多く出現。", "Spells backfire %1 times less for %2.": "呪文が裏目に出る確率が%2の間%1倍少なくなる。", "Spells backfire %1 times more for %2.": "呪文が裏目に出る確率が%2の間%1倍多くなる。", + "Can't send or receive gifts again for %1.": "%1の間はギフトの受け渡しができません。", "can be done once every %1": "%1毎に1回だけできる", "usable again in %1": "%1後にもう一度使える", "+%1/s": "+%1/秒", @@ -1832,6 +1895,9 @@ AddLanguage('JA','japanese',{ "[STOCK 17 NAME]Great Minds": "偉大なる頭脳", "[STOCK 17 TYPE]Publicists": "広報担当", "[STOCK 17 LOGO]PBL": "広報担", + "[STOCK 18 NAME]%1's Bakery": "%1のベーカリー", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "あなた", "from %1": "%1から", "%1: currently worth $%2 per unit.": "%1:現在1ユニットあたりの価値は$%2。", "You currently own %1 (worth $%2).": "現在%1($%2の価値)を所有。", @@ -2711,6 +2777,62 @@ AddLanguage('JA','japanese',{ "[Upgrade name 816]Web cookies": "ウェブクッキー", "[Upgrade name 817]Steamed cookies": "Steamed・クッキー", "[Upgrade name 818]Deep-fried cookie dough": "油で揚げたクッキー生地", + "[Upgrade name 819]Wrapping paper": "ラッピングペーパー", + "[Upgrade name 820]Havreflarn": "ハーブレ・フラン", + "[Upgrade name 821]Alfajores": "アルファホーレス", + "[Upgrade name 822]Gaufrettes": "ゴーフレット", + "[Upgrade name 823]Cookie bars": "クッキーバー", + "[Upgrade name 824]Nines": "夜のミントクッキー", + "[Upgrade name 825]Clone grandmas": "クローンおばあちゃん", + "[Upgrade name 826]Cloning vats": "クローンの大おけ", + "[Upgrade name 827]Energized nutrients": "エネルギーたっぷりの栄養", + "[Upgrade name 828]Stunt doubles": "スタントダブル", + "[Upgrade name 829]Clone recycling plant": "クローンリサイクルセンター", + "[Upgrade name 830]Free-range clones": "クローンの放し飼い", + "[Upgrade name 831]Genetic tailoring": "遺伝子調整", + "[Upgrade name 832]Power in diversity": "多様性の力", + "[Upgrade name 833]Self-betterment": "自分をいたわる", + "[Upgrade name 834]Source control": "ソース管理", + "[Upgrade name 835]United workforce": "みんなの固い絆", + "[Upgrade name 836]Safety patrols": "安全強化パトロール", + "[Upgrade name 837]Clone rights": "クローンの権利", + "[Upgrade name 838]One big family": "大家族", + "[Upgrade name 839]Fine-tuned body plans": "身体微調整効率化計画", + "[Upgrade name 840]Foam-tipped canes": "杖先に付けたスポンジカバー", + "[Upgrade name 841]Self-driving tractors": "自動運転トラクター", + "[Upgrade name 842]Mineshaft supports": "立坑サポート", + "[Upgrade name 843]Universal automation": "ユニバーサル・オートメーション", + "[Upgrade name 844]The big shortcake": "あの巨大ショートケーキ", + "[Upgrade name 845]Temple traps": "聖堂の罠", + "[Upgrade name 846]Polymorphism": "ポリモーフィズム", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "30分以内にお届けできなければ全額返金いたします", + "[Upgrade name 848]The dose makes the poison": "毒の一服", + "[Upgrade name 849]A way home": "帰り道", + "[Upgrade name 850]Rectifying a mistake": "過ちを正しに", + "[Upgrade name 851]Candied atoms": "原子の砂糖漬け", + "[Upgrade name 852]Lab goggles but like cool shades": "実験室用ゴーグル、ただしオシャレカラー", + "[Upgrade name 853]Gambler's fallacy fallacy": "ギャンブラーの誤謬の誤謬", + "[Upgrade name 854]The more they stay the same": "同じであればあるほどに", + "[Upgrade name 855]Simulation failsafes": "シミュレーション用フェイルセーフ", + "[Upgrade name 856]The other routes to Rome": "ローマに通じる他の道", + "[Upgrade name 857]Intellectual property theft": "知的財産の窃盗", + "[Upgrade name 858]Reading your clones bedtime stories": "寝る前にクローンたちに物語を読み聞かせなきゃ", + "[Upgrade name 859]Accelerated development": "迅速な成長", + "[Upgrade name 860]Peer review": "ピアレビュー", + "[Upgrade name 861]Fortune #020": "フォーチュン#020", + "[Upgrade name 862]Personal biscuit": "あなただけのビスケット", + "[Upgrade name 863]Unshackled glimmeringue": "抑制解除・きらきらメレンゲ", + "[Upgrade name 864]Unshackled You": "抑制解除・あなた", + "[Upgrade name 865]Kitten strategists": "戦略家の子猫ちゃん", + "[Upgrade name 866]Baklavas": "バクラヴァ", + "[Upgrade name 867]Snowball cookies": "スノーボールクッキー", + "[Upgrade name 868]Sequilhos": "セキーリョ", + "[Upgrade name 869]Hazelnut swirlies": "ヘーゼルナッツスワーリー", + "[Upgrade name 870]Spritz cookies": "スプリッツクッキー", + "[Upgrade name 871]Mbatata cookies": "バタタクッキー", + "[Upgrade name 872]Springerles": "シュプリンガーレ", + "[Upgrade name 873]Undecillion fingers": "一潤本の指", + "[Upgrade name 874]Omniplast mouse": "複数分子体マウス", "[Achievement name 0]Wake and bake": "目覚めの一枚", "[Achievement name 1]Making some dough": "生地作り", "[Achievement name 2]So baked right now": "焼きたくて仕方がない", @@ -3299,5 +3421,59 @@ AddLanguage('JA','japanese',{ "[Achievement name 585]I'll rest when I'm dead": "死んだら休む", "[Achievement name 586]What do you get for the baker who has everything": "クッキー職人 プレゼント 何でも持ってる", "[Achievement name 587]Bottomless pit": "底なし穴", - "[Achievement name 588]All the stars in heaven": "天に光る全ての星よ" + "[Achievement name 588]All the stars in heaven": "天に光る全ての星よ", + "[Achievement name 589]No time like the present": "今こそプレゼント", + "[Achievement name 590]Can we get much higher": "もっと高みを目指せ", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "このゲームのタイトルは「スピード」だよ(嘘だよ、クッキークリッカーだよ)", + "[Achievement name 592]Rainy day fund": "非常用資金", + "[Achievement name 593]And a little extra": "それともうちょっと", + "[Achievement name 594]Grandmapocalypse": "ババアポカリプス", + "[Achievement name 595]Wrath cookie": "憤怒のクッキー", + "[Achievement name 596]No more room in hell": "地獄は定員オーバー", + "[Achievement name 597]In her likeness": "彼女たちのように", + "[Achievement name 598]Wrinkler poker": "つんつん・シワシワ虫", + "[Achievement name 599]Septcentennial": "700記念", + "[Achievement name 600]My own clone": "私だけのクローン", + "[Achievement name 601]Multiplicity": "増えて増えて", + "[Achievement name 602]Born for this job": "このために生まれました", + "[Achievement name 603]Episode II": "エピソードII", + "[Achievement name 604]Copy that": "了解", + "[Achievement name 605]Life finds a way": "数奇な人生", + "[Achievement name 606]Overcrowding": "過密", + "[Achievement name 607]Strength in numbers": "多いもん勝ち", + "[Achievement name 608]Army of me": "私という軍団", + "[Achievement name 609]Know thyself": "己を知れ", + "[Achievement name 610]Didn't make sense not to live": "生きないという選択肢にはピンと来なかった", + "[Achievement name 611]Genetic bottleneck": "遺伝上の行き止まり", + "[Achievement name 612]Despite everything, it's still you": "いろいろあったけど じぶんは やっぱり じぶんだ", + "[Achievement name 613]Everyone everywhere all at once": "どこもかしこも一斉に", + "[Achievement name 614]Self-made": "独立独行", + "[Achievement name 615]Reproducible results": "再現可能な結果", + "[Achievement name 616]That's all you": "ぜーんぶ君の功績さ", + "[Achievement name 617]Self-improvement": "自己改善", + "[Achievement name 618]And now you're even older": "この瞬間も、年をとってゆくばかり", + "[Achievement name 619]Au naturel": "ナチュラル派", + "[Achievement name 620]Dirt-rich": "めちゃくちゃリッチ", + "[Achievement name 621]Bots build bots": "機械は機械を生む", + "[Achievement name 622]Getting that bag": "手に入れるはあの袋", + "[Achievement name 623]The leader is good, the leader is great": "リーダーは素晴らしい、リーダーは偉大だ", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "まさか、そんなことは…ありえないはずだ、奴らがまほ――", + "[Achievement name 625]Signed, sealed, delivered": "署名、梱包、配達まで", + "[Achievement name 626]Sugar, spice, and everything nice": "お砂糖とスパイスと、素敵なものいっぱい", + "[Achievement name 627]Not even remotely close to Kansas anymore": "カンザスから遠く離れちゃったわ", + "[Achievement name 628]I only meant to stay a while": "もう少しここにいたかった", + "[Achievement name 629]Not 20 years away forever": "永遠に20年先なんてことはない", + "[Achievement name 630]Bright side of the Moon": "月の明るい部分", + "[Achievement name 631]Riding the Mersenne twister": "メルセンヌ・ツイスタで処理", + "[Achievement name 632]Divide and conquer": "分断統治", + "[Achievement name 633]Pebcakes": "人的エラー", + "[Achievement name 634]Greener on the other sides": "隣の芝は青い", + "[Achievement name 635]Where is my mind": "私の精神はどこに行った", + "[Achievement name 636]Introspection": "内省", + "[Achievement name 637]Debt evasion": "借金回避", + "[Achievement name 638]Oft we mar what's well": "頑張りすぎると、既に良いものをダメにしてしまう", + "[Achievement name 639]Cookie Clicker": "クッキークリッカー", + "[Achievement name 640]What's not clicking": "クリックされないもの", + "[Achievement name 641]All on deck": "全員集合", + "[Achievement name 642]A round of applause": "拍手喝采" }); \ No newline at end of file diff --git a/loc/KO.js b/loc/KO.js index b9ae29e3..f08ffca9 100644 --- a/loc/KO.js +++ b/loc/KO.js @@ -231,6 +231,8 @@ AddLanguage('KO','korean',{ "Licorice milk": "감초 우유", "Rose milk": "장미 우유", "Dragonfruit milk": "용과 우유", + "Peach milk": "복숭아 우유", + "Hazelnut milk": "헤이즐넛 우유", "Info": "정보", "About": "소개", "Cookie Clicker is a javascript game by %1 and %2.": "쿠키 클리커는 %1 및 %2이(가) 개발한 자바스크립트 게임입니다.", @@ -258,8 +260,10 @@ AddLanguage('KO','korean',{ "Load from file": "파일에서 불러오기", "Use this to keep backups on your computer": "이 기능을 통해 백업 파일을 컴퓨터에 보관합니다", "Export save": "저장 내보내기", + "Export": "내보내기", "This is your save code.
Copy it and keep it somewhere safe!": "저장 코드입니다.
이 코드를 복사하고 안전한 곳에 보관하세요!", "Import save": "저장 가져오기", + "Import": "가져오기", "Please paste in the code that was given to you on save export.": "저장을 내보낼 때 받은 코드를 붙여넣으세요.", "Game saved": "저장된 게임", "Game loaded": "불러온 게임", @@ -484,6 +488,7 @@ AddLanguage('KO','korean',{ "Reality Bending": "현실 왜곡", "Dragon Orbs": "드래곤 오브", "Supreme Intellect": "최고의 지성", + "Dragon Guts": "드래곤 똥배", "News :": "뉴스:", "Ticker (grandma)": [ "촉촉한 쿠키.", @@ -618,6 +623,11 @@ AddLanguage('KO','korean',{ "천문학자들이 피질 제과사 궤도 이탈을 경고하며, 미래에 정면 충돌이 발생하여 손실이 큰 뇌진탕이 생길 것을 우려했습니다.", "수석 피질 제과사는 직원들에게 피질 제과사들이 제과점의 유형 재산이며 별명을 통해 애정을 받아서는 안 된다고 일깨웠습니다." ], + "Ticker (You)": [ + "올해의 인물은 이번에도 역시 당신입니다! 정말 뜻밖이네요!", + "지역 식당에서 불법 클론 고기를 사용하는 걸까요? 뉴스가 끝난 후 맛깔나는 수사를 시청하세요.", + "미친 팬들에게 밟혀 죽었다는 오보가 났던 인기 쿠키 재벌이 다행히도 탈출한 클론이었던 것으로 밝혀졌습니다." + ], "Ticker (Halloween)": [ "이교도 의식이 창궐하며 전 세계의 아이들이 이상한 복장을 입고 집주인들에게 사탕을 요구하고 있습니다.", "모든 핼러윈 사탕이 쿠키로 대체되면서 전 세계의 아이들이 \"상실감과 혼란\"에 빠졌습니다.", @@ -1015,6 +1025,14 @@ AddLanguage('KO','korean',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "행성 크기의 인공 뇌로, 간단하게 쿠키를 상상하여 현실로 구현할 수 있는 능력이 있습니다. 시간과 공간은 중요하지 않죠. 현실은 제멋대로인 것입니다.", "[Cortex baker business name]Think tank": "싱크탱크", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "더 많은 수익을 얻을 수 있는 방법은 제한적입니다. 방법이 있기는 할까요? 현존하는 세계에서 가장 뛰어난 전문가들을 고용하고 두뇌를 짜내도록 하세요!", + "You": "플레이어", + "%1 You": [ + "%1 플레이어", + "%1 플레이어" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "당신만이 이 모든 쿠키가 존재하는 이유입니다. 그래서 당신은 당신이 여러 명 있다면... 쿠키를 더 많이 만들 수 있지 않을까 생각했지요.", + "[You business name]You": "플레이어", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "사업이 정점에 이르렀습니다. 사업을 개선할 방법은 플레이어 자신을 개선해 이 세계 최고의 CEO가 되는 것밖에 없습니다.", "CpS": "/", "cookies/click": "쿠키/클릭", "%1 CpS": "/", @@ -1093,6 +1111,7 @@ AddLanguage('KO','korean',{ "Wrinklers appear %1 times as fast.": "주름벌레가 %1배 더 빨리 나타납니다.", "Wrinklers spawn much more frequently.": "주름벌레가 더 자주 출몰합니다.", "Wrinklers explode into %1% more cookies.": "주름벌레가 %1% 더 많은 쿠키로 폭발합니다.", + "Wrinklers digest %1% more cookies.": "주름벌레가 소화하는 쿠키의 양이 %1% 증가합니다.", "Unlocks... something.": "무언가를... 잠금 해제합니다.", "In the festive hat, you find...": "축제 모자에서 찾아낸 것은...", "a festive test tube
and %1.": "축제 시험관
%1.", @@ -1171,6 +1190,7 @@ AddLanguage('KO','korean',{ "Auto": "자동", "Loop": "반복", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "배경 선택 장치를 잠금 해제하여 게임 배경을 선택할 수 있게 됩니다.
다양한 기본 설정이 포함되어 있습니다.", + "Contains more wallpapers for your background selector.": "배경 선택기에 사용할 벽지가 더 많이 들어 있습니다.", "Lets you pick which wallpaper to display.": "어떤 벽지가 표시될지 선택할 수 있게 됩니다.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "첫 번째 천상 업그레이드를 진행하여 천상 칩 시스템이 잠금 해제되었습니다.
계승을 할 때마다 전생에 만든 쿠키는 천상 칩명성으로 변경됩니다.
천상 칩은 다양한 영구 초월 업그레이드를 구매하는 데 사용할 수 있습니다.
명성 레벨은 레벨당 영구적으로 +1%의 CpS를 부여합니다.", "You can attract %1 more wrinklers.": "%1 더 많은 주름벌레가 이끌려 옵니다.", @@ -1256,6 +1276,39 @@ AddLanguage('KO','korean',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "모든 황금 쿠키가 분노 쿠키가 되어 부정적 효과가 발생할 확률이 증가합니다.", "Wrinklers appear %1% faster and digest %2% more cookies.": "주름벌레가 %1% 빠르게 나타나고 쿠키를 %2% 더 많이 소화합니다.", "Effect is only active when your total amount of buildings ends with 0.": "건물의 총 개수 끝자리가 0일 때 효과가 활성화됩니다.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "%1 메뉴의 우측 상단 버튼을 이용해 다른 플레이어들과 선물을 주고받을 수 있습니다.", + "You need at least %1 cookies in bank to send and receive gifts.": "선물을 주고받으려면 은행 잔고가 최소한 쿠키 %1개는 되어야 합니다.", + "Send a gift": "선물 보내기", + "Send": "보내기", + "Redeem a gift": "선물 코드 사용하기", + "Redeem": "사용하기", + "paste code...": "코드를 붙여넣으세요...", + "Wrap": "포장하기", + "Done": "완료", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "%1 클릭 시 다른 이들에게 보낼 수 있는 텍스트 코드가 생성됩니다. 선물 코드는 여러 사람이 사용할 수 있지만, 하루나 이틀이 지나면 만료됩니다. 선물 코드는 한 시간에 한 번만 생성할 수 있습니다. 보내고 나면 게임이 저장됩니다.", + "You may put between %1 and %2 cookies in the gift box.": "선물 상자에는 %1~%2개의 쿠키를 넣을 수 있습니다.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "쪽지에 메시지를 남길 수 있습니다. 예의를 지키세요!!
최대 %1줄 및 %2 자까지 입력 가능합니다.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "선물 코드를 사용하고 난 뒤 다른 선물 코드를 사용하려면 한 시간 기다려야 합니다. 코드를 사용하고 나면 게임이 저장됩니다.", + "Box design": "상자 디자인", + "Icon": "아이콘", + "Here's your gift code!
Make sure to copy it so you can share it.": "선물 코드입니다!
공유할 수 있도록 복사하세요.", + "Code expired.": "코드 만료.", + "Invalid code.": "잘못된 코드.", + "Gift redeemed!
Inside, you find:": "선물을 받았습니다!
내용물:", + "There's a note too!": "쪽지도 있어요!", + "How nice!": "정말 상냥하네요!", + "You've already sent or redeemed a gift recently.": "마지막으로 선물을 보내거나 받은 후 얼마 되지 않았습니다.", + "Customize": "커스터마이징", + "Customize your clones": "클론 커스터마이징", + "Sprung from your very DNA. Shape them in your image!": "당신의 유전자에서 탄생한 존재입니다. 당신의 형상대로 만드세요!", + "Hair": "머리", + "Hair color": "머리 색", + "Skin color": "피부 색", + "Head shape": "머리 모양", + "Face": "얼굴", + "Extra": "기타", + "Everyone's here.": "모두 여기 있습니다.", + "Won't you have some cookies too?": "쿠키도 드실래요?", "Achievement unlocked": "업적 잠금 해제", "Make %1 just from %2.": "%2로부터 %1을(를) 만듭니다.", "Bake %1 in one ascension.": "한 번의 계승에서 %1을(를) 굽습니다.", @@ -1274,6 +1327,7 @@ AddLanguage('KO','korean',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "가장 비싼 물건 최소 1개, 두 번째로 비싼 물건 2개, 그 다음으로 비싼 물건 4개 등의 규칙으로 보유합니다(%1개로 제한).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "가장 비싼 물건 최소 10개, 두 번째로 비싼 물건 20개, 그 다음으로 비싼 물건 30개 등의 규칙으로 보유합니다.", "Click a golden cookie.": "황금 쿠키를 클릭합니다.", + "Click a wrath cookie.": "분노 쿠키 클릭하기.", "Click %1.": "%1을(를) 클릭합니다.", "Hack in some cookies.": "치트로 쿠키를 만듭니다.", "Click really, really fast.": "정말, 정말로 빠르게 클릭합니다.", @@ -1281,6 +1335,7 @@ AddLanguage('KO','korean',{ "Own %1.": "%1을(를) 보유합니다.", "Purchase %1.": "%1을(를) 구매합니다.", "Dunk the cookie.": "쿠키를 우유에 빠뜨립니다.", + "Trigger the grandmapocalypse for the first time.": "처음으로 할머니대재앙 초래하기.", "Appease the grandmatriarchs at least once.": "대왕 할머니를 최소한 한 번 진정시킵니다.", "Appease the grandmatriarchs at least %1 times.": "대왕 할머니를 최소한 %1회 진정시킵니다.", "Declare a covenant with the grandmatriarchs.": "대왕 할머니와 계약을 체결합니다.", @@ -1312,6 +1367,7 @@ AddLanguage('KO','korean',{ "Own %1 upgrades and %2 buildings.": "%1 업그레이드와 %2 건물을 보유합니다.", "Own %1 heavenly upgrades.": "천상 업그레이드를 %1개 보유합니다.", "Burst the near-extinct shiny wrinkler.": "멸종 위기의 빛나는 주름벌레를 터뜨립니다.", + "Poke a wrinkler %1 times without killing it.": "주름벌레를 죽이지 않고 %1번 찌르기.", "Click a golden cookie less than 1 second after it spawns.": "황금 쿠키가 나타난 후 1초가 지나지 않았을 때 클릭합니다.", "Click a golden cookie less than 1 second before it dies.": "황금 쿠키가 사라지기까지 1초 미만이 남았을 때 클릭합니다.", "Harvest %1 coalescing sugar lumps.": "모인 각설탕 %1개를 수확합니다.", @@ -1339,9 +1395,14 @@ AddLanguage('KO','korean',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "주식 시장 수익이 1년 치 CpS 수익을 초과합니다.", "Unlock the highest-tier stock market headquarters.": "가장 높은 등급의 주식 시장 본부를 잠금 해제합니다.", "Have your stock market profits surpass $%1.": "주식 시장 수익이 $%1을(를) 초과합니다.", + "Take out a loan and ascend before incurring the CpS penalty.": "대출을 받고 CpS 페널티 적용되기 전에 환생하기.", "Own %1 kitten upgrades.": "고양이 업그레이드 %1개를 보유합니다.", "Find the forgotten madeleine.": "잊혀진 마들렌을 찾습니다.", "Click one of Santa's helper grandmas during Christmas season.": "크리스마스 시즌 동안 산타의 조수 중 하나를 클릭합니다.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "친구에게서 (혹은 자신에게서도 상관없어요) 받은 쿠키 선물 코드 사용하기.", + "Shape your clones to resemble %1.": "클론이 %1 닮도록 형성하기.", + "Clone": "클론", + "Unlock the final building.": "마지막 건물 개방하기.", "Frenzy": "프렌지", "Elder frenzy": "장로 프렌지", "Click frenzy": "클릭 프렌지", @@ -1361,6 +1422,7 @@ AddLanguage('KO','korean',{ "Sugar frenzy": "설탕 프렌지", "Loan %1": "%1 대출", "Loan %1 (interest)": "%1 대출 (이자)", + "Gifted out": "선물 한도 도달", "%1 Power!": "%1 성능!", "%1 Burden!": "%1 부담!", "Cookie production x%1 for %2!": "%2 동안 쿠키 생산량 x%1!", @@ -1380,6 +1442,7 @@ AddLanguage('KO','korean',{ "You find %1% more golden cookies for the next %2.": "다음 %2 동안 황금 쿠키를 %1% 더 많이 찾을 수 있습니다.", "Spells backfire %1 times less for %2.": "%2 동안 주문 역효과가 %1배 더 적게 발생합니다.", "Spells backfire %1 times more for %2.": "%2 동안 주문 역효과가 %1배 더 많이 발생합니다.", + "Can't send or receive gifts again for %1.": "%1 동안 선물을 보내거나 받을 수 없습니다.", "can be done once every %1": "%1마다 실행할 수 있습니다", "usable again in %1": "% 이내에 다시 사용 가능", "+%1/s": "+%1/초", @@ -1707,6 +1770,9 @@ AddLanguage('KO','korean',{ "[STOCK 17 NAME]Great Minds": "위대한 수업", "[STOCK 17 TYPE]Publicists": "홍보 담당자", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "%1의 베이커리", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "나", "from %1": "%1에서 획득", "%1: currently worth $%2 per unit.": "%1: 현재 유닛당 $%2의 가치.", "You currently own %1 (worth $%2).": "현재 %1 보유 중($%2의 가치).", @@ -2586,6 +2652,62 @@ AddLanguage('KO','korean',{ "[Upgrade name 816]Web cookies": "웹 쿠키", "[Upgrade name 817]Steamed cookies": "스팀 쿠키", "[Upgrade name 818]Deep-fried cookie dough": "튀긴 쿠키 반죽", + "[Upgrade name 819]Wrapping paper": "포장지", + "[Upgrade name 820]Havreflarn": "하브레플란", + "[Upgrade name 821]Alfajores": "알파호레스", + "[Upgrade name 822]Gaufrettes": "고프레", + "[Upgrade name 823]Cookie bars": "쿠키바", + "[Upgrade name 824]Nines": "나인즈", + "[Upgrade name 825]Clone grandmas": "클론 할머니", + "[Upgrade name 826]Cloning vats": "클론용 통", + "[Upgrade name 827]Energized nutrients": "활기찬 영양분", + "[Upgrade name 828]Stunt doubles": "스턴트 대역", + "[Upgrade name 829]Clone recycling plant": "클론 재활용소", + "[Upgrade name 830]Free-range clones": "방목형 클론", + "[Upgrade name 831]Genetic tailoring": "유전자 재단", + "[Upgrade name 832]Power in diversity": "다양성 파워", + "[Upgrade name 833]Self-betterment": "자기개발", + "[Upgrade name 834]Source control": "소스 관리", + "[Upgrade name 835]United workforce": "노동자 조합", + "[Upgrade name 836]Safety patrols": "안전순찰", + "[Upgrade name 837]Clone rights": "클론권", + "[Upgrade name 838]One big family": "거대 가족", + "[Upgrade name 839]Fine-tuned body plans": "신체 미세 개조 계획", + "[Upgrade name 840]Foam-tipped canes": "폼팁 지팡이", + "[Upgrade name 841]Self-driving tractors": "자가운행 트랙터", + "[Upgrade name 842]Mineshaft supports": "갱도 지지대", + "[Upgrade name 843]Universal automation": "범용 자동화", + "[Upgrade name 844]The big shortcake": "거대한 쇼트케이크", + "[Upgrade name 845]Temple traps": "사원 함정", + "[Upgrade name 846]Polymorphism": "다형성", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "30분 안에 도착하지 않으면 환불해 드립니다", + "[Upgrade name 848]The dose makes the poison": "약과 독은 용량 차이", + "[Upgrade name 849]A way home": "집으로 가는 길", + "[Upgrade name 850]Rectifying a mistake": "실수 시정", + "[Upgrade name 851]Candied atoms": "설탕졸임 원자", + "[Upgrade name 852]Lab goggles but like cool shades": "패셔니스타 실험용 고글", + "[Upgrade name 853]Gambler's fallacy fallacy": "도박사의 오류 오류", + "[Upgrade name 854]The more they stay the same": "더 같아질수록", + "[Upgrade name 855]Simulation failsafes": "시뮬레이션 안전장치", + "[Upgrade name 856]The other routes to Rome": "서울로 가는 다른 길", + "[Upgrade name 857]Intellectual property theft": "지적 재산 도용", + "[Upgrade name 858]Reading your clones bedtime stories": "클론에게 자기 전 책 읽어주기", + "[Upgrade name 859]Accelerated development": "개발 가속", + "[Upgrade name 860]Peer review": "동료평가", + "[Upgrade name 861]Fortune #020": "포춘 #020", + "[Upgrade name 862]Personal biscuit": "개인 비스킷", + "[Upgrade name 863]Unshackled glimmeringue": "봉인해제한 반짝머랭", + "[Upgrade name 864]Unshackled You": "봉인해제한 나", + "[Upgrade name 865]Kitten strategists": "아깽이 전략가", + "[Upgrade name 866]Baklavas": "바클라바", + "[Upgrade name 867]Snowball cookies": "눈뭉치 쿠키", + "[Upgrade name 868]Sequilhos": "세킬료", + "[Upgrade name 869]Hazelnut swirlies": "헤이즐넛 소용돌이", + "[Upgrade name 870]Spritz cookies": "스프리츠 쿠키", + "[Upgrade name 871]Mbatata cookies": "음바타타 쿠키", + "[Upgrade name 872]Springerles": "스프링얼레", + "[Upgrade name 873]Undecillion fingers": "간 손가락", + "[Upgrade name 874]Omniplast mouse": "옴니플라스트 마우스", "[Achievement name 0]Wake and bake": "아침에 즐기는 과자", "[Achievement name 1]Making some dough": "반죽을 만들다", "[Achievement name 2]So baked right now": "황홀한 베이킹", @@ -3174,5 +3296,59 @@ AddLanguage('KO','korean',{ "[Achievement name 585]I'll rest when I'm dead": "휴식은 죽은 다음에", "[Achievement name 586]What do you get for the baker who has everything": "모든 것을 가진 제과사에게 줄 선물", "[Achievement name 587]Bottomless pit": "나락", - "[Achievement name 588]All the stars in heaven": "천상의 모든 별" + "[Achievement name 588]All the stars in heaven": "천상의 모든 별", + "[Achievement name 589]No time like the present": "현재가 최고", + "[Achievement name 590]Can we get much higher": "이보다 더 높아질 수 있나", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "이 게임의 이름은 스피드 (아니 아니 이건 쿠키 클리커인데)", + "[Achievement name 592]Rainy day fund": "비상금", + "[Achievement name 593]And a little extra": "약간의 엑스트라", + "[Achievement name 594]Grandmapocalypse": "할머니대재앙", + "[Achievement name 595]Wrath cookie": "분노 쿠키", + "[Achievement name 596]No more room in hell": "지옥 만원", + "[Achievement name 597]In her likeness": "그녀의 형상대로", + "[Achievement name 598]Wrinkler poker": "주름벌레 찌르개", + "[Achievement name 599]Septcentennial": "700주년", + "[Achievement name 600]My own clone": "나만의 클론", + "[Achievement name 601]Multiplicity": "다중성", + "[Achievement name 602]Born for this job": "천직", + "[Achievement name 603]Episode II": "에피소드 2", + "[Achievement name 604]Copy that": "복사 완료", + "[Achievement name 605]Life finds a way": "생명은 길을 찾아낸다", + "[Achievement name 606]Overcrowding": "과밀화", + "[Achievement name 607]Strength in numbers": "인해전술", + "[Achievement name 608]Army of me": "나 군단", + "[Achievement name 609]Know thyself": "너 자신을 알라", + "[Achievement name 610]Didn't make sense not to live": "살지 않을 이유가 없잖아", + "[Achievement name 611]Genetic bottleneck": "유전적 병목", + "[Achievement name 612]Despite everything, it's still you": "그럼에도 불구하고 여전히 나", + "[Achievement name 613]Everyone everywhere all at once": "모두가 모든 곳에서 한꺼번에", + "[Achievement name 614]Self-made": "자수성가", + "[Achievement name 615]Reproducible results": "재현 가능한 결과", + "[Achievement name 616]That's all you": "플레이어 그 자체", + "[Achievement name 617]Self-improvement": "자기 수양", + "[Achievement name 618]And now you're even older": "나이를 더 먹었네", + "[Achievement name 619]Au naturel": "천연", + "[Achievement name 620]Dirt-rich": "개부자", + "[Achievement name 621]Bots build bots": "봇이 봇을 낳고", + "[Achievement name 622]Getting that bag": "가방 차지", + "[Achievement name 623]The leader is good, the leader is great": "수령님은 위대하고 위대하시나니", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "설마하니 마법을 사용한 것은…", + "[Achievement name 625]Signed, sealed, delivered": "서명하고, 밀봉하고, 배달 완료", + "[Achievement name 626]Sugar, spice, and everything nice": "설탕과 향신료와 온갖 좋은 것들", + "[Achievement name 627]Not even remotely close to Kansas anymore": "캔자스랑 완전히 동떨어진", + "[Achievement name 628]I only meant to stay a while": "잠깐만 있으려고 했는데", + "[Achievement name 629]Not 20 years away forever": "20년도 아니고 영원히", + "[Achievement name 630]Bright side of the Moon": "달의 밝은 편", + "[Achievement name 631]Riding the Mersenne twister": "메르센 트위스터를 타고", + "[Achievement name 632]Divide and conquer": "각개격파", + "[Achievement name 633]Pebcakes": "유저문제케이크", + "[Achievement name 634]Greener on the other sides": "남의 잔디가 더 푸르러 보임", + "[Achievement name 635]Where is my mind": "내 정신이 어디 갔지", + "[Achievement name 636]Introspection": "자기 성찰", + "[Achievement name 637]Debt evasion": "빚 피하기", + "[Achievement name 638]Oft we mar what's well": "긁어 부스럼", + "[Achievement name 639]Cookie Clicker": "쿠키 클리커", + "[Achievement name 640]What's not clicking": "클릭 오작동", + "[Achievement name 641]All on deck": "전력 동원", + "[Achievement name 642]A round of applause": "박수갈채" }); \ No newline at end of file diff --git a/loc/NL.js b/loc/NL.js index adfb602c..66554a65 100644 --- a/loc/NL.js +++ b/loc/NL.js @@ -231,6 +231,8 @@ AddLanguage('NL','dutch',{ "Licorice milk": "Dropmelk", "Rose milk": "Rozenmelk", "Dragonfruit milk": "Drakenvruchtmelk", + "Peach milk": "Perzikmelk", + "Hazelnut milk": "Hazelnootmelk", "Info": "/", "About": "Over", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker is een javascriptspel van %1 en %2.", @@ -258,8 +260,10 @@ AddLanguage('NL','dutch',{ "Load from file": "Laden van bestand", "Use this to keep backups on your computer": "Gebruik dit om back-ups op je computer te bewaren", "Export save": "Gegevens exporteren", + "Export": "Exporteren", "This is your save code.
Copy it and keep it somewhere safe!": "Dit is je code.
Kopieer deze code en bewaar hem op een veilige plek.", "Import save": "Gegevens importeren", + "Import": "Importeren", "Please paste in the code that was given to you on save export.": "Plak hier de code die je gekregen hebt bij het exporteren.", "Game saved": "Spel opgeslagen", "Game loaded": "Spel geladen", @@ -609,6 +613,7 @@ AddLanguage('NL','dutch',{ "Reality Bending": "Andere realiteit", "Dragon Orbs": "Drakenbollen", "Supreme Intellect": "Superieur intellect", + "Dragon Guts": "Drakendarmen", "News :": "Nieuws:", "Ticker (grandma)": [ "Vochtige koekjes.", @@ -743,6 +748,11 @@ AddLanguage('NL','dutch',{ "astronomen waarschuwen voor een afwijking in de baan van de cortex-bakkers en zijn bang voor frontale botsingen die tot kostbare hersenschuddingen leiden.", "cortex-bakkerhoeders herinneren werknemers er vriendelijk aan dat cortex-bakkers het belangrijkste eigendom van de bakkerij zijn en dat ze geen schattige bijnaampjes mogen krijgen." ], + "Ticker (You)": [ + "De persoon van het jaar is, dit jaar weer, jij! Hoe onverwacht!", + "Serveren lokale restaurants stiekem illegaal kloonvlees? Ons overheerlijke onderzoek volgt na het nieuws van vanavond.", + "Geliefde koekjesmagnaat per abuis gemeld als doodgetrapt door uitzinnige fans. Gelukkig bleek het een ontsnapte kloon te zijn die voor het origineel werd aangezien." + ], "Ticker (Halloween)": [ "vreemde rituelen doen hun intrede. Kinderen over de hele wereld doen gekke kostuums aan en dwingen huiseigenaren om ze snoep te geven.", "kinderen over de hele wereld zijn \"compleet in de war\", omdat alle Halloween-snoepjes zijn vervangen door koekjes.", @@ -1140,6 +1150,14 @@ AddLanguage('NL','dutch',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Deze kunstmatige hersenen ter grootte van planeten kunnen koekjes creëren door over ze te dromen. Tijd en ruimte doen er niet toe. De realiteit is afhankelijk van willekeur. ", "[Cortex baker business name]Think tank": "Denktank", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Op een gegeven moment heb je geen manieren meer om meer winst binnen te halen. Of toch wel? Huur de beste experts in het universum in en laat hun hersenen voor jou werken!", + "You": "Jij", + "%1 You": [ + "%1 jij", + "%1 jij" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Jij alleen bent de reden van al deze koekjes. Je denkt dat als er meer van je zijn... je er misschien nog meer zou kunnen maken.", + "[You business name]You": "Jij", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Je bedrijf draait zo goed als maar kan. De enige manier om het nog te verbeteren is door jezelf te verbeteren... en de beste CEO te worden die deze wereld ooit heeft gezien.", "CpS": "KpS", "cookies/click": "koekjes/klik", "%1 CpS": "%1 KpS", @@ -1218,6 +1236,7 @@ AddLanguage('NL','dutch',{ "Wrinklers appear %1 times as fast.": "Mee-eters verschijnen %1 keer zo snel.", "Wrinklers spawn much more frequently.": "Mee-eters verschijnen vaker.", "Wrinklers explode into %1% more cookies.": "Mee-eters ontploffen in %1% meer koekjes.", + "Wrinklers digest %1% more cookies.": "Mee-eters verteren %1% meer koekjes.", "Unlocks... something.": "Ontgrendelt... iets.", "In the festive hat, you find...": "In de kerstmuts vind je...", "a festive test tube
and %1.": "een kerstreageerbuisje
en %1.", @@ -1296,6 +1315,7 @@ AddLanguage('NL','dutch',{ "Auto": "/", "Loop": "/", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Ontgrendelt de achtergrondkiezer, waarmee je een achtergrond kunt kiezen.
Er zijn verschillende basissmaken beschikbaar.", + "Contains more wallpapers for your background selector.": "Bevat meer achtergronden voor je achtergrondkeuze.", "Lets you pick which wallpaper to display.": "Hiermee kun je een achtergrond kiezen.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Dit is je eerste hemelse upgrade, het ontgrendelt het systeem van hemelse stukjes.
Elke keer dat je opstijgt, worden de koekjes die je in je vorige leven hebt gemaakt, omgezet in hemelse stukjes en prestige.
Je kunt Hemelse stukjes uitgeven aan verschillende permanente transcendentale upgrades.
Voor elk prestigelevel krijg je ook een permanente +1% KpS.", "You can attract %1 more wrinklers.": "Je kunt %1 meer mee-eters aantrekken.", @@ -1381,6 +1401,39 @@ AddLanguage('NL','dutch',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Alle gouden koekjes zijn woedende koekjes met een grotere kans op een negatief effect.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Mee-eters verschijnen %1% sneller en consumeren %2% meer koekjes.", "Effect is only active when your total amount of buildings ends with 0.": "Het effect is alleen actief als je totale aantal gebouwen op 0 eindigt.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Je kunt nu cadeaus versturen naar en ontvangen van andere spelers via knoppen rechtsboven in het %1-menu.", + "You need at least %1 cookies in bank to send and receive gifts.": "Je moet minstens %1 koekjes op de bank hebben om cadeaus te versturen en te ontvangen.", + "Send a gift": "Cadeau versturen", + "Send": "Versturen", + "Redeem a gift": "Cadeau verzilveren", + "Redeem": "Verzilveren", + "paste code...": "code plakken...", + "Wrap": "Inpakken", + "Done": "Klaar", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Klik op '%1' om een tekstcode te genereren die je naar anderen kunt sturen. Cadeaucodes kunnen door iedereen meerdere keren worden verzilverd, maar vervallen na een dag of twee. Je kunt maar één cadeaucode per uur genereren. Je spel wordt na het versturen opgeslagen.", + "You may put between %1 and %2 cookies in the gift box.": "Je mag %1 tot %2 koekjes in de cadeaudoos stoppen.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Je kunt een berichtje achterlaten. Wees niet onbeleefd!
Maximaal %1 regels en %2 tekens.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Zodra je een cadeau hebt verzilverd, moet je een uur wachten voordat je er weer één kunt verzilveren. Je spel wordt na het verzilveren opgeslagen.", + "Box design": "Doosontwerp", + "Icon": "Pictogram", + "Here's your gift code!
Make sure to copy it so you can share it.": "Hier is je cadeaucode!
Kopieer hem zodat je hem kunt delen.", + "Code expired.": "Code verlopen.", + "Invalid code.": "Ongeldige code.", + "Gift redeemed!
Inside, you find:": "Cadeau verzilverd!
Dit zit erin:", + "There's a note too!": "Er zit ook een berichtje bij!", + "How nice!": "Wat leuk!", + "You've already sent or redeemed a gift recently.": "Je hebt onlangs al een cadeau verstuurd of verzilverd.", + "Customize": "Aanpassen", + "Customize your clones": "Je klonen aanpassen", + "Sprung from your very DNA. Shape them in your image!": "Ontsproten uit je eigen DNA. Vorm ze naar je evenbeeld!", + "Hair": "Kapsel", + "Hair color": "Haarkleur", + "Skin color": "Huidskleur", + "Head shape": "Hoofdvorm", + "Face": "Gezicht", + "Extra": "/", + "Everyone's here.": "Iedereen is er.", + "Won't you have some cookies too?": "Wil je ook wat koekjes?", "Achievement unlocked": "Prestatie ontgrendeld", "Make %1 just from %2.": "Maak %1 met %2.", "Bake %1 in one ascension.": "Bak %1 in één leven.", @@ -1399,6 +1452,7 @@ AddLanguage('NL','dutch',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Bezit ten minste 1 van het duurste object, 2 van het op één na duurste, 4 van het volgende, enzovoorts (maximaal %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Bezit ten minste 10 van het duurste object, 20 van het op één na duurste, 30 van het volgende, enzovoorts.", "Click a golden cookie.": "Klik op een gouden koekje.", + "Click a wrath cookie.": "Klik op een wraakkoekje.", "Click %1.": "Klik op %1.", "Hack in some cookies.": "Hack het spel voor extra koekjes.", "Click really, really fast.": "Klik zo snel als je kunt.", @@ -1406,6 +1460,7 @@ AddLanguage('NL','dutch',{ "Own %1.": "Heb %1 in je bezit.", "Purchase %1.": "Koop %1.", "Dunk the cookie.": "Dip het koekje.", + "Trigger the grandmapocalypse for the first time.": "Ontketen voor de eerste keer een omapocalyps.", "Appease the grandmatriarchs at least once.": "Kalmeer de opperoma's ten minste één keer.", "Appease the grandmatriarchs at least %1 times.": "Kalmeer de opperoma's ten minste %1 keer.", "Declare a covenant with the grandmatriarchs.": "Sluit een verbond met de opperoma's.", @@ -1437,6 +1492,7 @@ AddLanguage('NL','dutch',{ "Own %1 upgrades and %2 buildings.": "Bezit %1 upgrades en %2 gebouwen.", "Own %1 heavenly upgrades.": "Bezit %1hemelse upgrades.", "Burst the near-extinct shiny wrinkler.": "Laat de bijna uitgestorven glimmende mee-eter ontploffen.", + "Poke a wrinkler %1 times without killing it.": "Por een mee-eter %1 keer zonder 'm te doden.", "Click a golden cookie less than 1 second after it spawns.": "Klik in minder dan 1 seconde nadat hij verschijnt op een gouden koekje. ", "Click a golden cookie less than 1 second before it dies.": "Klik in minder dan 1 seconde voordat hij weg is op een gouden koekje. ", "Harvest %1 coalescing sugar lumps.": "Oogst %1 samensmeltende suikerklontjes.", @@ -1464,9 +1520,14 @@ AddLanguage('NL','dutch',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Zorg dat je winst op de aandelenmarkt meer is dan een heel jaar aan KpS ($ %1).", "Unlock the highest-tier stock market headquarters.": "Ontgrendel het hoogste niveau van het hoofdkantoor van de aandelenmarkt.", "Have your stock market profits surpass $%1.": "Zorg dat je winst op de aandelenmarkt meer is dan $%1.", + "Take out a loan and ascend before incurring the CpS penalty.": "Neem een lening en stijg op voordat je de KpS-boete krijgt.", "Own %1 kitten upgrades.": "Bezit %1 kattenupgrades.", "Find the forgotten madeleine.": "Vind de vergeten madeleine.", "Click one of Santa's helper grandmas during Christmas season.": "Klik tijdens het kerstseizoen op een van de oma's die de Kerstman helpen.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Verzilver een koekjescadeaucode van een vriend (of van jezelf, dat maakt ons niet uit).", + "Shape your clones to resemble %1.": "Vorm je klonen om op %1 te lijken.", + "Clone": "Klonen", + "Unlock the final building.": "Ontgrendel het laatste gebouw.", "Frenzy": "/", "Elder frenzy": "Ouderlingenfrenzy", "Click frenzy": "Klikfrenzy", @@ -1486,6 +1547,7 @@ AddLanguage('NL','dutch',{ "Sugar frenzy": "Suikerfrenzy", "Loan %1": "Lening %1", "Loan %1 (interest)": "Lening %1 (rente)", + "Gifted out": "Uitgeschonken", "%1 Power!": "%1-kracht!", "%1 Burden!": "%1-last!", "Cookie production x%1 for %2!": "Koekjesproductie %2 lang x %1!", @@ -1505,6 +1567,7 @@ AddLanguage('NL','dutch',{ "You find %1% more golden cookies for the next %2.": "Je vindt de komende %2 %1% meer gouden koekjes.", "Spells backfire %1 times less for %2.": "Toverspreuken gaan %2 %1 keer minder mis.", "Spells backfire %1 times more for %2.": "Toverspreuken gaan %2 %1 keer vaker mis.", + "Can't send or receive gifts again for %1.": "Kan geen cadeaus meer versturen of ontvangen gedurende %1.", "can be done once every %1": "kan eens per %1 gedaan worden", "usable again in %1": "kan over %1 opnieuw gebruikt worden", "+%1/s": "/", @@ -1832,6 +1895,9 @@ AddLanguage('NL','dutch',{ "[STOCK 17 NAME]Great Minds": "Grote denkers", "[STOCK 17 TYPE]Publicists": "Publicisten", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "Bakkerij van %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "JIJ", "from %1": "vanaf %1", "%1: currently worth $%2 per unit.": "%1: momenteel $%2 per eenheid waard.", "You currently own %1 (worth $%2).": "Je bezit momenteel %1 (waarde $%2).", @@ -2711,6 +2777,62 @@ AddLanguage('NL','dutch',{ "[Upgrade name 816]Web cookies": "Webkoekjes", "[Upgrade name 817]Steamed cookies": "Gesteamde koekjes", "[Upgrade name 818]Deep-fried cookie dough": "Gefrituurd koekjesdeeg", + "[Upgrade name 819]Wrapping paper": "Inpakpapier", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Koekjesrepen", + "[Upgrade name 824]Nines": "After Nines", + "[Upgrade name 825]Clone grandmas": "Kloonoma's", + "[Upgrade name 826]Cloning vats": "Kloonvaten", + "[Upgrade name 827]Energized nutrients": "Energierijke voedingsstoffen", + "[Upgrade name 828]Stunt doubles": "Stuntdubbels", + "[Upgrade name 829]Clone recycling plant": "Kloonrecyclingfabriek", + "[Upgrade name 830]Free-range clones": "Scharrelklonen", + "[Upgrade name 831]Genetic tailoring": "Genetisch maatwerk", + "[Upgrade name 832]Power in diversity": "Kracht in diversiteit", + "[Upgrade name 833]Self-betterment": "Zelfverbetering", + "[Upgrade name 834]Source control": "Broncontrole", + "[Upgrade name 835]United workforce": "Vereende arbeidskrachten", + "[Upgrade name 836]Safety patrols": "Veiligheidspatrouilles", + "[Upgrade name 837]Clone rights": "Kloonrechten", + "[Upgrade name 838]One big family": "Eén grote familie", + "[Upgrade name 839]Fine-tuned body plans": "Verfijnde lichaamsplannen", + "[Upgrade name 840]Foam-tipped canes": "Wandelstokken met schuimrubberen punt", + "[Upgrade name 841]Self-driving tractors": "Zelfrijdende tractoren", + "[Upgrade name 842]Mineshaft supports": "Mijnschachtstutten", + "[Upgrade name 843]Universal automation": "Universele automatisering", + "[Upgrade name 844]The big shortcake": "De grote zandkoek", + "[Upgrade name 845]Temple traps": "Tempelvallen", + "[Upgrade name 846]Polymorphism": "Polymorfisme", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "Bezorgd binnen 30 minuten of je geld terug", + "[Upgrade name 848]The dose makes the poison": "De dosis maakt het gif", + "[Upgrade name 849]A way home": "Een weg naar huis", + "[Upgrade name 850]Rectifying a mistake": "Een fout herstellen", + "[Upgrade name 851]Candied atoms": "Snoepatomen", + "[Upgrade name 852]Lab goggles but like cool shades": "Veiligheidsbril, maar dan cool", + "[Upgrade name 853]Gambler's fallacy fallacy": "De drogreden van de gokker", + "[Upgrade name 854]The more they stay the same": "Hoe meer ze hetzelfde blijven", + "[Upgrade name 855]Simulation failsafes": "Simulatiebeveiliging", + "[Upgrade name 856]The other routes to Rome": "De andere wegen naar Rome", + "[Upgrade name 857]Intellectual property theft": "Diefstal van intellectueel eigendom", + "[Upgrade name 858]Reading your clones bedtime stories": "Je klonen verhaaltjes voorlezen voor het slapen gaan", + "[Upgrade name 859]Accelerated development": "Versnelde ontwikkeling", + "[Upgrade name 860]Peer review": "Toetsing", + "[Upgrade name 861]Fortune #020": "Geluk 020", + "[Upgrade name 862]Personal biscuit": "Persoonlijk koekje", + "[Upgrade name 863]Unshackled glimmeringue": "Ongeketende glimmeringue", + "[Upgrade name 864]Unshackled You": "Ongeketende jij", + "[Upgrade name 865]Kitten strategists": "Kittenstrategen", + "[Upgrade name 866]Baklavas": "Baklava's", + "[Upgrade name 867]Snowball cookies": "Sneeuwbalkoekjes", + "[Upgrade name 868]Sequilhos": "Sequilho's", + "[Upgrade name 869]Hazelnut swirlies": "Hazelnootswirlies", + "[Upgrade name 870]Spritz cookies": "Spritzkoekjes", + "[Upgrade name 871]Mbatata cookies": "Mbatatakoekjes", + "[Upgrade name 872]Springerles": "Springerles", + "[Upgrade name 873]Undecillion fingers": "Sextiljoen vingers", + "[Upgrade name 874]Omniplast mouse": "Omniplastmuis", "[Achievement name 0]Wake and bake": "Wakker en aan het bakken", "[Achievement name 1]Making some dough": "Wat deeg aan het maken", "[Achievement name 2]So baked right now": "Lekker aan de bak", @@ -3299,5 +3421,59 @@ AddLanguage('NL','dutch',{ "[Achievement name 585]I'll rest when I'm dead": "Ik rust wel uit als ik dood ben", "[Achievement name 586]What do you get for the baker who has everything": "Wat koop je nou voor de bakker die alles al heeft", "[Achievement name 587]Bottomless pit": "Bodemloze put", - "[Achievement name 588]All the stars in heaven": "Alle sterren in de lucht" + "[Achievement name 588]All the stars in heaven": "Alle sterren in de lucht", + "[Achievement name 589]No time like the present": "Geen betere tijd dan het heden", + "[Achievement name 590]Can we get much higher": "Kunnen we nog hoger?", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Het draait allemaal om snelheid", + "[Achievement name 592]Rainy day fund": "Appeltje voor de dorst", + "[Achievement name 593]And a little extra": "En een beetje extra", + "[Achievement name 594]Grandmapocalypse": "Omapocalyps", + "[Achievement name 595]Wrath cookie": "Wraakkoekje", + "[Achievement name 596]No more room in hell": "Geen plaats meer in de hel", + "[Achievement name 597]In her likeness": "In haar gelijkenis", + "[Achievement name 598]Wrinkler poker": "Mee-eterporder", + "[Achievement name 599]Septcentennial": "Zevenhonderdjarig", + "[Achievement name 600]My own clone": "Mijn eigen kloon", + "[Achievement name 601]Multiplicity": "Multipliciteit", + "[Achievement name 602]Born for this job": "Geboren voor deze baan", + "[Achievement name 603]Episode II": "Aflevering II", + "[Achievement name 604]Copy that": "Kopiëren maar", + "[Achievement name 605]Life finds a way": "Het leven vindt een weg", + "[Achievement name 606]Overcrowding": "Overbevolking", + "[Achievement name 607]Strength in numbers": "Kracht in aantallen", + "[Achievement name 608]Army of me": "Mijn eigen leger", + "[Achievement name 609]Know thyself": "Ken uzelf", + "[Achievement name 610]Didn't make sense not to live": "Het had geen zin om niet te leven", + "[Achievement name 611]Genetic bottleneck": "Genetisch knelpunt", + "[Achievement name 612]Despite everything, it's still you": "Ondanks alles ben jij het nog steeds", + "[Achievement name 613]Everyone everywhere all at once": "Iedereen overal allemaal tegelijk", + "[Achievement name 614]Self-made": "Zelfgemaakt", + "[Achievement name 615]Reproducible results": "Reproduceerbare resultaten", + "[Achievement name 616]That's all you": "Allemaal dankzij jou", + "[Achievement name 617]Self-improvement": "Zelfverbetering", + "[Achievement name 618]And now you're even older": "En nu ben je nog ouder", + "[Achievement name 619]Au naturel": "Au naturel", + "[Achievement name 620]Dirt-rich": "Niet bang voor vieze handen", + "[Achievement name 621]Bots build bots": "Bots bouwen bots", + "[Achievement name 622]Getting that bag": "Dat levert koekjes op", + "[Achievement name 623]The leader is good, the leader is great": "De leider is goed, de leider is geweldig", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Je denkt toch niet dat ze... het kan geen ma..", + "[Achievement name 625]Signed, sealed, delivered": "Getekend, verzegeld, afgeleverd", + "[Achievement name 626]Sugar, spice, and everything nice": "Suiker, kruiden en allerlei lekkers", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Niet eens meer in de buurt van Kansas", + "[Achievement name 628]I only meant to stay a while": "Ik wilde maar even blijven", + "[Achievement name 629]Not 20 years away forever": "Niet voor eeuwig 20 jaar weg", + "[Achievement name 630]Bright side of the Moon": "Zonnige kant van de maan", + "[Achievement name 631]Riding the Mersenne twister": "De Mersenne-twister berijden", + "[Achievement name 632]Divide and conquer": "Verdeel en heers", + "[Achievement name 633]Pebcakes": "Pebcakes", + "[Achievement name 634]Greener on the other sides": "Groener bij de buren", + "[Achievement name 635]Where is my mind": "Waar zit ik met mijn gedachten?", + "[Achievement name 636]Introspection": "Introspectie", + "[Achievement name 637]Debt evasion": "Schuldontduiking", + "[Achievement name 638]Oft we mar what's well": "Vaak ontsieren we wat goed is", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Wat klikt er niet?", + "[Achievement name 641]All on deck": "Handen uit de mouwen", + "[Achievement name 642]A round of applause": "Staande ovatie" }); \ No newline at end of file diff --git a/loc/PL.js b/loc/PL.js index 262d994b..10f7faad 100644 --- a/loc/PL.js +++ b/loc/PL.js @@ -231,6 +231,8 @@ AddLanguage('PL','polish',{ "Licorice milk": "Mleko lukrecjowe", "Rose milk": "Mleko różane", "Dragonfruit milk": "Mleko pitajowe", + "Peach milk": "Brzoskwiniowe mleko", + "Hazelnut milk": "Orzechowe mleko", "Info": "Informacje", "About": "O grze", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker jest grą w javascript, stworzoną przez %1 i %2.", @@ -258,8 +260,10 @@ AddLanguage('PL','polish',{ "Load from file": "Wczytaj z pliku", "Use this to keep backups on your computer": "Dzięki tej funkcji możesz zapisywać na swoim komputerze kopie zapasowe postępów w grze", "Export save": "Eksportuj stan gry", + "Export": "Eksportuj", "This is your save code.
Copy it and keep it somewhere safe!": "To kod z twoimi postępami w grze.
Przekopiuj go i trzymaj w bezpiecznym miejscu!", "Import save": "Importuj stan gry", + "Import": "Importuj", "Please paste in the code that was given to you on save export.": "Proszę wkleić kod, który otrzymałeś podczas eksportowania swoich postępów w grze.", "Game saved": "Zapisano grę", "Game loaded": "Wczytano grę", @@ -609,6 +613,7 @@ AddLanguage('PL','polish',{ "Reality Bending": "Zakrzywianie rzeczywistości", "Dragon Orbs": "Smocze kule", "Supreme Intellect": "„Wybitny intelekt”,", + "Dragon Guts": "Smocze wnętrzności", "News :": "Nowości :", "Ticker (grandma)": [ "Wilgotne ciastka.", @@ -743,6 +748,11 @@ AddLanguage('PL','polish',{ "astronomowie przestrzegają przed dryfującymi rdzeniowymi piekarzami. Istnieję ryzyko kolizji czołowych, skutkujących kosztownymi wstrząsami mózgu.", "ogarniacze rdzeniowych piekarzy pragną uprzejmie przypomnieć pracownikom, że rdzeniowi piekarze stanową własność materialną i z tego powodu nie należy im nadawać przydomków." ], + "Ticker (You)": [ + "w tym roku znów zostajesz człowiekiem roku! Co za niespodzianka!", + "czy lokalne restauracje mogą serwować ci nielegalne sklonowane mięso? Szczegóły naszego pysznego śledztwa po wieczornych wiadomościach.", + "wielbiony ciasteczkowy magnat, błędnie uznany za stratowanego na śmierć przez oszalałych fanów, szczęśliwie umknął, pomylony ze swoim klonem." + ], "Ticker (Halloween)": [ "pogańskie rytuały coraz popularniejsze. Dzieci na całym świecie przebierają się w dziwne kostiumy i szantażują sąsiadów o cukierki.", "„zagubienie i dezorientacja” — tak można opisać stan dzieci, gdy absolutnie wszystkie cukierki na Halloween zastąpiły ciastka.", @@ -1140,6 +1150,14 @@ AddLanguage('PL','polish',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Te sztuczne mózgi rozmiarów planety zdolne są do materializowania ciastek zaledwie siłą umysłu. Czas i odległość nie grają roli a rzeczywistość jest kwestią umowną.", "[Cortex baker business name]Think tank": "Loża ekspertów", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Sposobów na jeszcze szybsze zarabianie jest ograniczona ilość. Ale czy na pewno? Zatrudnij najznakomitszych ekspertów z całego poznanego świata i każ im dumać tylko dla ciebie!", + "You": "Ty", + "%1 You": [ + "%1 Ciebie", + "%1 Ciebie" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Ty i tylko ty stoisz za tymi wszystkimi ciastkami. Myślisz, że jeśli byłoby kilku takich jak ty… moglibyście zrobić jeszcze więcej.", + "[You business name]You": "Ty", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Twój biznes jest już najlepszy, jaki może być. Jedyny sposób na poprawę to inwestycja w siebie – zostań najlepszym prezesem, jakiego widział świat.", "CpS": "CnS", "cookies/click": "ciastka/kliknięcie", "%1 CpS": "%1 CnS", @@ -1218,6 +1236,7 @@ AddLanguage('PL','polish',{ "Wrinklers appear %1 times as fast.": "Zmarszczkacze pojawiają się %1 razy szybciej.", "Wrinklers spawn much more frequently.": "Zmarszczkacze pojawiają się zdecydowanie częściej.", "Wrinklers explode into %1% more cookies.": "Po eksplozji zmarszczkacze dają ci %1% więcej ciastek.", + "Wrinklers digest %1% more cookies.": "Zmarszczkacz trawi %1% więcej ciastek.", "Unlocks... something.": "Odblokowuje… coś.", "In the festive hat, you find...": "W świątecznej czapce znajdujesz…", "a festive test tube
and %1.": "świąteczną probówkę
oraz %1.", @@ -1296,6 +1315,7 @@ AddLanguage('PL','polish',{ "Auto": "/", "Loop": "Pętla", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Odblokowuje wybierak tła, dzięki któremu możesz wybrać tło gry.
Jest dostępne w różnych podstawowych smakach.", + "Contains more wallpapers for your background selector.": "Zawiera więcej tapet do twojego selektora tła.", "Lets you pick which wallpaper to display.": "Pozwala na personalizację tapety.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Oto pierwsze niebiańskie ulepszenie. Odblokowuje ono system Niebiańskich żetonów.
Przy każdym kolejnym wzniesieniu wszystkie zgromadzone przez ciebie w poprzednim życiu ciastka są przemieniane na niebiańskie żetony oraz prestiż.
Niebiańskie żetony można wydawać na wiele różnych, stałych ulepszeń niebiańskich.
Twój poziom prestiżu także daje ci stałą wartość +1% CnS na poziom.", "You can attract %1 more wrinklers.": "Przyciągasz %1 jeszcze więcej zmarszczkaczy.", @@ -1381,6 +1401,39 @@ AddLanguage('PL','polish',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Wszystkie złote ciastka są gniewnymi ciastkami o zwiększonym ryzyku negatywnych efektów.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Zmarszczkacze pojawiają się %1% szybciej i pożerają %2% więcej ciastek.", "Effect is only active when your total amount of buildings ends with 0.": "Efekt jest aktywny, tylko jeśli ilość Twoich budynków kończy się na 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Teraz możesz wysyłać i odbierać prezenty od innych graczy, używając przycisków w górnym prawym rogu menu %1.", + "You need at least %1 cookies in bank to send and receive gifts.": "Musisz mieć przynajmniej %1 ciastek w banku, by wysyłać i odbierać prezenty.", + "Send a gift": "Wyślij prezent", + "Send": "Wyślij", + "Redeem a gift": "Odbierz prezent", + "Redeem": "Odbierz", + "paste code...": "wklej kod…", + "Wrap": "Zapakuj", + "Done": "Zrobione", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Kliknięcie \"%1\" wygeneruje kod, który możesz wysłać innym. Kody prezentowe mogą być wykorzystywane wiele razy przez każdego, ale po jednym lub dwóch dniach tracą ważność. Możesz wygenerować tylko jeden kod prezentowy na godzinę. Twoja gra zapisze się po wysłaniu.", + "You may put between %1 and %2 cookies in the gift box.": "Możesz umieścić od %1 do %2 ciastek w pudełku prezentowym.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Możesz zostawić wiadomość. Bądź uprzejmy!
Maksymalnie %1 linijek i %2 znaków.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Po odebraniu prezentu musisz odczekać godzinę, zanim będzie można odebrać następny. Twoja gra zapisze się po odebraniu.", + "Box design": "Projekt pudełka", + "Icon": "Ikonka", + "Here's your gift code!
Make sure to copy it so you can share it.": "Oto twój kod prezentowy!
Upewnij się, że został skopiowany, by go udostępnić.", + "Code expired.": "Kod wygasł.", + "Invalid code.": "Niewłaściwy kod.", + "Gift redeemed!
Inside, you find:": "Prezent odebrany!
Wewnątrz znajdujesz:", + "There's a note too!": "Jest też wiadomość!", + "How nice!": "Jak miło!", + "You've already sent or redeemed a gift recently.": "Niedawno już wysłałeś lub odebrałeś prezent.", + "Customize": "Dostosuj", + "Customize your clones": "Dostosuj swoje klony", + "Sprung from your very DNA. Shape them in your image!": "Z twojego własnego DNA. Stwórz je na swoje podobieństwo!", + "Hair": "Włosy", + "Hair color": "Kolor włosów", + "Skin color": "Odcień skóry", + "Head shape": "Kształt głowy", + "Face": "Twarz", + "Extra": "Dodatki", + "Everyone's here.": "Wszyscy tu są.", + "Won't you have some cookies too?": "Nie zjesz sobie ciastek?", "Achievement unlocked": "Osiągnięcie odblokowane", "Make %1 just from %2.": "Zdobądź %1 poprzez obiekt \"%2\".", "Bake %1 in one ascension.": "Upiecz %1 podczas jednego wzniesienia.", @@ -1399,6 +1452,7 @@ AddLanguage('PL','polish',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Posiadaj co najmniej 1 najdroższy budynek, 2 budynki drugie pod względem ceny, 4 kolejne i tak dalej (limit na %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Posiadaj co najmniej 10 najdroższych obiektów, 20 obiektów drugich pod względem ceny, 30 kolejnych i tak dalej.", "Click a golden cookie.": "Kliknij złote ciastko.", + "Click a wrath cookie.": "Kliknij ciastko gniewu.", "Click %1.": "Kliknij %1.", "Hack in some cookies.": "Zhakuj parę ciastek.", "Click really, really fast.": "Klikaj naprawdę, NAPRAWDĘ szybko.", @@ -1406,6 +1460,7 @@ AddLanguage('PL','polish',{ "Own %1.": "Posiadaj %1.", "Purchase %1.": "Kup %1.", "Dunk the cookie.": "Zamocz ciastko.", + "Trigger the grandmapocalypse for the first time.": "Wywołaj babciopokalipsę po raz pierwszy.", "Appease the grandmatriarchs at least once.": "Uspokój arcymatronę przynajmniej raz.", "Appease the grandmatriarchs at least %1 times.": "Uspokój arcymatronę przynajmniej %1 razy.", "Declare a covenant with the grandmatriarchs.": "Ogłoś porozumienie z arcymatronami.", @@ -1437,6 +1492,7 @@ AddLanguage('PL','polish',{ "Own %1 upgrades and %2 buildings.": "Posiadaj %1 ulepszeń oraz %2 budynków.", "Own %1 heavenly upgrades.": "Posiadaj %1 niebiańskich ulepszeń.", "Burst the near-extinct shiny wrinkler.": "Rozgnieć niemal już wymarłego błyszczącego zmarszczkacza.", + "Poke a wrinkler %1 times without killing it.": "Szturchnij zmarszczkacza %1 razy, nie zabijając go.", "Click a golden cookie less than 1 second after it spawns.": "Kliknij złote ciastko w mniej niż sekundę po jego pojawieniu się.", "Click a golden cookie less than 1 second before it dies.": "Kliknij złote ciastko w mniej niż sekundę przed jego śmiercią.", "Harvest %1 coalescing sugar lumps.": "Zbierz %1 krzepnących grudek cukru.", @@ -1464,9 +1520,14 @@ AddLanguage('PL','polish',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Spraw, żeby twoje zyski na giełdzie przekroczyły CnS ($%1) o wartości całego roku.", "Unlock the highest-tier stock market headquarters.": "Odblokuj najwyższy poziom kwatery głównej giełdy ciastek wartościowych.", "Have your stock market profits surpass $%1.": "Spraw, żeby twoje zyski na giełdzie przekroczyły $%1.", + "Take out a loan and ascend before incurring the CpS penalty.": "Zaciągnij pożyczkę i idź wyżej, zanim ściągniesz na siebie karę c/s.", "Own %1 kitten upgrades.": "Posiadaj %1 kocich ulepszeń.", "Find the forgotten madeleine.": "Odszukaj zaginioną Madeleine.", "Click one of Santa's helper grandmas during Christmas season.": "Kliknij jedną z mikołajowych babć-pomocnic w trakcie okresu świątecznego.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Odbierz ciastkowy kod prezentowy od przyjaciela (albo od siebie, nie oceniamy).", + "Shape your clones to resemble %1.": "Kształtuj swoje klony, by przypominały %1.", + "Clone": "Klonuj", + "Unlock the final building.": "Odblokuj ostatnią strukturę.", "Frenzy": "Szał", "Elder frenzy": "Szał starszyzny", "Click frenzy": "Szał klikania", @@ -1486,6 +1547,7 @@ AddLanguage('PL','polish',{ "Sugar frenzy": "Cukrowy szał", "Loan %1": "Pożyczka %1", "Loan %1 (interest)": "Pożyczka %1 (na procent)", + "Gifted out": "Prezenty wyszły", "%1 Power!": "%1: moc!", "%1 Burden!": "%1: obciążenie!", "Cookie production x%1 for %2!": "Produkcja ciastek x%1 przez %2!", @@ -1505,6 +1567,7 @@ AddLanguage('PL','polish',{ "You find %1% more golden cookies for the next %2.": "Odnajdujesz %1% więcej ciastek przez następne %2.", "Spells backfire %1 times less for %2.": "Czary odwracają się przeciwko tobie %1 razy rzadziej przez %2.", "Spells backfire %1 times more for %2.": "Czary odwracają się przeciwko tobie %1 razy częściej przez %2.", + "Can't send or receive gifts again for %1.": "Znów nie możesz otrzymywać ani wysyłać prezentów przez %1.", "can be done once every %1": "można wykonać co %1", "usable again in %1": "aktywny ponownie za %1", "+%1/s": "/", @@ -1832,6 +1895,9 @@ AddLanguage('PL','polish',{ "[STOCK 17 NAME]Great Minds": "Wielkie umysły", "[STOCK 17 TYPE]Publicists": "Publicyści", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "Piekarnia %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "TY", "from %1": "od %1", "%1: currently worth $%2 per unit.": "%1: obecna wartość %2 na jednostkę.", "You currently own %1 (worth $%2).": "W tej chwili posiadasz %1 (wartość: %2.", @@ -2711,6 +2777,62 @@ AddLanguage('PL','polish',{ "[Upgrade name 816]Web cookies": "Ciasteczka internetowe", "[Upgrade name 817]Steamed cookies": "Ciasteczka gotowane na parze", "[Upgrade name 818]Deep-fried cookie dough": "Ciasteczka smażone na głębokim oleju", + "[Upgrade name 819]Wrapping paper": "Papier do pakowania", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Ciasteczkowa krajanka", + "[Upgrade name 824]Nines": "Czekoladki miętowe", + "[Upgrade name 825]Clone grandmas": "Babcie klony", + "[Upgrade name 826]Cloning vats": "Kadzie klonujące", + "[Upgrade name 827]Energized nutrients": "Wzmocnione substancje odżywcze", + "[Upgrade name 828]Stunt doubles": "Kaskaderzy dublerzy", + "[Upgrade name 829]Clone recycling plant": "Zakład recyklingu klonów", + "[Upgrade name 830]Free-range clones": "Klony z wolnego wybiegu", + "[Upgrade name 831]Genetic tailoring": "Geny na miarę", + "[Upgrade name 832]Power in diversity": "Siła w różnorodności", + "[Upgrade name 833]Self-betterment": "Praca nad sobą", + "[Upgrade name 834]Source control": "Kontrola przepływu danych", + "[Upgrade name 835]United workforce": "Zjednoczona siła robocza", + "[Upgrade name 836]Safety patrols": "Patrole bezpieczeństwa", + "[Upgrade name 837]Clone rights": "Prawa klonów", + "[Upgrade name 838]One big family": "Jedna wielka rodzina", + "[Upgrade name 839]Fine-tuned body plans": "Precyzyjnie dostrojone cielesne plany", + "[Upgrade name 840]Foam-tipped canes": "Laski z miękkim zakończeniem", + "[Upgrade name 841]Self-driving tractors": "Samojeżdżące traktory", + "[Upgrade name 842]Mineshaft supports": "Wsporniki szybów", + "[Upgrade name 843]Universal automation": "Uniwersalna automatyzacja", + "[Upgrade name 844]The big shortcake": "Wielkie ciacho", + "[Upgrade name 845]Temple traps": "Pułapki świątyni", + "[Upgrade name 846]Polymorphism": "Polimorfizm", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "U ciebie w 30 minut albo zwrot pieniędzy", + "[Upgrade name 848]The dose makes the poison": "Dawka czyni truciznę", + "[Upgrade name 849]A way home": "Droga do domu", + "[Upgrade name 850]Rectifying a mistake": "Naprawianie błędu", + "[Upgrade name 851]Candied atoms": "Kandyzowane atomy", + "[Upgrade name 852]Lab goggles but like cool shades": "Gogle jak modne okulary", + "[Upgrade name 853]Gambler's fallacy fallacy": "Paradoks paradoksu hazardzisty", + "[Upgrade name 854]The more they stay the same": "Im więcej, tym mniej się zmieniają", + "[Upgrade name 855]Simulation failsafes": "Niezawodna symulacja", + "[Upgrade name 856]The other routes to Rome": "Inne drogi do Rzymu", + "[Upgrade name 857]Intellectual property theft": "Kradzież własności intelektualnej", + "[Upgrade name 858]Reading your clones bedtime stories": "Czytanie klonom do snu", + "[Upgrade name 859]Accelerated development": "Przyspieszony rozwój", + "[Upgrade name 860]Peer review": "Recenzja koleżeńska", + "[Upgrade name 861]Fortune #020": "Wróżba #020", + "[Upgrade name 862]Personal biscuit": "Osobisty herbatnik", + "[Upgrade name 863]Unshackled glimmeringue": "Wyzwolona błyskobeza", + "[Upgrade name 864]Unshackled You": "Wyzwolony Ty", + "[Upgrade name 865]Kitten strategists": "Koci stratedzy", + "[Upgrade name 866]Baklavas": "Baklawy", + "[Upgrade name 867]Snowball cookies": "Śnieżne kule", + "[Upgrade name 868]Sequilhos": "Sequihos", + "[Upgrade name 869]Hazelnut swirlies": "Orzechowe ślimaczki", + "[Upgrade name 870]Spritz cookies": "Ciastka z maszynki", + "[Upgrade name 871]Mbatata cookies": "Ciastka z batatów", + "[Upgrade name 872]Springerles": "Springerle", + "[Upgrade name 873]Undecillion fingers": "Undecylion palców", + "[Upgrade name 874]Omniplast mouse": "Omniplastyczna myszka", "[Achievement name 0]Wake and bake": "Wstań i piecz", "[Achievement name 1]Making some dough": "Zróbmy trochę ciasta", "[Achievement name 2]So baked right now": "Jestem taki rozpieczony", @@ -3299,5 +3421,59 @@ AddLanguage('PL','polish',{ "[Achievement name 585]I'll rest when I'm dead": "Odpocznę po śmierci", "[Achievement name 586]What do you get for the baker who has everything": "Co podarować piekarzowi który ma już wszystko", "[Achievement name 587]Bottomless pit": "Jama bez dna", - "[Achievement name 588]All the stars in heaven": "Wszystkie gwiazdy na niebie" + "[Achievement name 588]All the stars in heaven": "Wszystkie gwiazdy na niebie", + "[Achievement name 589]No time like the present": "Tylko tu i teraz", + "[Achievement name 590]Can we get much higher": "Czy możemy iść dużo wyżej", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Ta gra zwie się Szybkość (nieprawda, nazywa się Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Fundusz na deszczowy dzień", + "[Achievement name 593]And a little extra": "Ciut więcej", + "[Achievement name 594]Grandmapocalypse": "Babciopokalipsa", + "[Achievement name 595]Wrath cookie": "Ciastko gniewu", + "[Achievement name 596]No more room in hell": "Brak miejsca w piekle", + "[Achievement name 597]In her likeness": "Na jej podobieństwo", + "[Achievement name 598]Wrinkler poker": "Zmarszczkaczowy poker", + "[Achievement name 599]Septcentennial": "Siedmiokrotność", + "[Achievement name 600]My own clone": "Mój własny klon", + "[Achievement name 601]Multiplicity": "Mnogość", + "[Achievement name 602]Born for this job": "Stworzony do tej pracy", + "[Achievement name 603]Episode II": "Odcinek II", + "[Achievement name 604]Copy that": "Skopiuj to", + "[Achievement name 605]Life finds a way": "Życie znajdzie wyjście", + "[Achievement name 606]Overcrowding": "Przepełnienie", + "[Achievement name 607]Strength in numbers": "Siła w liczbach", + "[Achievement name 608]Army of me": "Armia mnie samego", + "[Achievement name 609]Know thyself": "Znaj siebie", + "[Achievement name 610]Didn't make sense not to live": "Tylko życie ma sens", + "[Achievement name 611]Genetic bottleneck": "Genetyczne wąskie gardło", + "[Achievement name 612]Despite everything, it's still you": "Mimo wszystko, to wciąż ty", + "[Achievement name 613]Everyone everywhere all at once": "Wszyscy wszędzie naraz", + "[Achievement name 614]Self-made": "Zawdzięczasz to sobie", + "[Achievement name 615]Reproducible results": "Powtarzalne wyniki", + "[Achievement name 616]That's all you": "To wszystko ty", + "[Achievement name 617]Self-improvement": "Samodoskonalenie", + "[Achievement name 618]And now you're even older": "A teraz masz jeszcze więcej lat", + "[Achievement name 619]Au naturel": "Naturalnie", + "[Achievement name 620]Dirt-rich": "Bogactwo z ziemi", + "[Achievement name 621]Bots build bots": "Boty budują boty", + "[Achievement name 622]Getting that bag": "Zdobyć ten wór", + "[Achievement name 623]The leader is good, the leader is great": "Szef jest dobry, szef jest świetny", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Nie sądzisz, że mogli użyć… to nie może być ma…", + "[Achievement name 625]Signed, sealed, delivered": "Podpisane, zapakowane, wysłane", + "[Achievement name 626]Sugar, spice, and everything nice": "Cud, miód i orzeszki", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Jesteśmy bardzo daleko od Kansas", + "[Achievement name 628]I only meant to stay a while": "Ja tu tylko na chwilę", + "[Achievement name 629]Not 20 years away forever": "Niekoniecznie wiecznie za 20 lat", + "[Achievement name 630]Bright side of the Moon": "Jasna strona Księżyca", + "[Achievement name 631]Riding the Mersenne twister": "Poskramianie liczb Mersenne'a", + "[Achievement name 632]Divide and conquer": "Dziel i rządź", + "[Achievement name 633]Pebcakes": "Twarde ciastka", + "[Achievement name 634]Greener on the other sides": "Wszędzie dobrze, gdzie nas nie ma", + "[Achievement name 635]Where is my mind": "W pogoni za rozumem", + "[Achievement name 636]Introspection": "Introspekcja", + "[Achievement name 637]Debt evasion": "Unikanie długu", + "[Achievement name 638]Oft we mar what's well": "Często niszczymy to, co dobre", + "[Achievement name 639]Cookie Clicker": "Ciastkowy klikacz", + "[Achievement name 640]What's not clicking": "Wszystko klika", + "[Achievement name 641]All on deck": "Wszyscy na pokład", + "[Achievement name 642]A round of applause": "Brawa" }); \ No newline at end of file diff --git a/loc/PT-BR.js b/loc/PT-BR.js index 069f21b5..8aa4975b 100644 --- a/loc/PT-BR.js +++ b/loc/PT-BR.js @@ -231,6 +231,8 @@ AddLanguage('PT-BR','portuguese',{ "Licorice milk": "Leite de alcaçuz", "Rose milk": "Leite de rosas", "Dragonfruit milk": "Leite de pitaia", + "Peach milk": "Leite de pêssego", + "Hazelnut milk": "Leite de avelã", "Info": "Informações", "About": "Sobre", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker é um jogo em javascript criado por %1 e %2.", @@ -258,8 +260,10 @@ AddLanguage('PT-BR','portuguese',{ "Load from file": "Carregar do arquivo", "Use this to keep backups on your computer": "Use isso para manter os backups no seu computador", "Export save": "Exportar salvamento", + "Export": "Exportação", "This is your save code.
Copy it and keep it somewhere safe!": "Este é o seu código de salvamento.
Faça uma cópia e guarde em um lugar seguro!", "Import save": "Importar salvamento", + "Import": "Importação", "Please paste in the code that was given to you on save export.": "Cole o código que foi dado a você quando exportou o salvamento.", "Game saved": "Jogo salvo", "Game loaded": "Jogo carregado", @@ -609,6 +613,7 @@ AddLanguage('PT-BR','portuguese',{ "Reality Bending": "Dobrando a Realidade", "Dragon Orbs": "Orbes de Dragão", "Supreme Intellect": "Intelecto Supremo", + "Dragon Guts": "Intestino de dragão", "News :": "Novidades:", "Ticker (grandma)": [ "Cookies úmidos.", @@ -743,6 +748,11 @@ AddLanguage('PT-BR','portuguese',{ "astrônomos avisam sobre o desvio na trajetória do confeiteiro de córtex, medo de futuras colisões diretas resultando em concussões custosas.", "domadores de confeiteiro de córtex lembram aos funcionários que confeiteiros de córtex são material de propriedade da confeitaria e não devem receber apelidos." ], + "Ticker (You)": [ + "a pessoa do ano é, novamente este ano, você! Que inesperado!", + "será que os restaurantes locais estão servindo carne clonada ilegal pra você? Nossa deliciosa investigação segue após as notícias de hoje à noite.", + "amado magnata de cookies, relatado erroneamente ter sido pisoteado até a morte por fãs enlouquecidos, felizmente identificado como clone fugido, confundido com o original." + ], "Ticker (Halloween)": [ "cresce a popularidade de rituais pagãos conforme crianças do mundo todo se vestem com fantasias estranhas e chantageiam donos de residências em troca de doces.", "crianças do mundo todo ficam \"perdidas e confusas\" com a substituição de todo e qualquer doce do Dia das Bruxas por cookies.", @@ -1140,6 +1150,14 @@ AddLanguage('PT-BR','portuguese',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Esses cérebros artificiais do tamanho de planetas são capazes de criar cookies só sonhando com eles. Tempo e espaço são inconsequentes. A realidade é arbitrária.", "[Cortex baker business name]Think tank": "Grupo de Pensamento", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Existe um limite nos jeitos de obter mais lucro. Ou será que não? Contrate os especialistas mais brilhantes no universo conhecido e deixa eu vasculhar o cérebro deles por você!", + "You": "Você", + "%1 You": [ + "%1 Vocês", + "%1 Vocês" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Você, sozinho, é a razão por trás de todos esses cookies. Você imagina que se houvesse mais de você... talvez você pudesse fazer ainda mais.", + "[You business name]You": "Você", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Seu negócio está tão bom quanto poderia ficar. A única maneira real de melhorá-lo mais é melhorar a si mesmo - e se tornar o melhor CEO que este mundo já viu.", "CpS": "/", "cookies/click": "cookies/clique", "%1 CpS": "/", @@ -1218,6 +1236,7 @@ AddLanguage('PT-BR','portuguese',{ "Wrinklers appear %1 times as fast.": "Os enrugadores aparecem %1 vezes mais rápido.", "Wrinklers spawn much more frequently.": "Os enrugadores surgem com muito mais frequência.", "Wrinklers explode into %1% more cookies.": "Os enrugadores explodem em %1% mais cookies.", + "Wrinklers digest %1% more cookies.": "Enrugadores digerem %1% mais cookies.", "Unlocks... something.": "Desbloqueia... alguma coisa.", "In the festive hat, you find...": "No chapéu de festa, você encontra...", "a festive test tube
and %1.": "um tubo de ensaio festivo
e %1.", @@ -1296,6 +1315,7 @@ AddLanguage('PT-BR','portuguese',{ "Auto": "Automático", "Loop": "/", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Desbloqueia o seletor de plano de fundo, permitindo que você selecione o plano de fundo do jogo.
Vem com uma variedade de sabores básicos.", + "Contains more wallpapers for your background selector.": "Contém mais papéis de parede para seu seletor de planos de fundo.", "Lets you pick which wallpaper to display.": "Deixa você escolher qual papel de parede exibir.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Esta é a primeira melhoria celestial; ela desbloqueia o sistema de Gotas celestiais.
Cada vez que você ascende, os cookies que você fez na sua vida passada se tornam gotas celestiais e prestígio.
Gotas celestiais podem ser usadas em uma variedade de melhorias transcendentais permanentes.
O seu nível de prestígio também dá +1% CpS por nível permanentemente.", "You can attract %1 more wrinklers.": "Você pode atrair %1 mais enrugadores.", @@ -1381,6 +1401,39 @@ AddLanguage('PT-BR','portuguese',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Todos os cookies dourados são cookies furiosos com maior chance de efeito negativo.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Enrugadores aparecem %1% mais rápido e digerem %2% mais cookies.", "Effect is only active when your total amount of buildings ends with 0.": "O efeito só estará ativo quando o total de construções terminar com 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Agora você pode enviar e receber presentes de outros jogadores através dos botões no canto superior direito do menu %1.", + "You need at least %1 cookies in bank to send and receive gifts.": "Você precisa ter pelo menos %1 cookies no banco para enviar e receber presentes.", + "Send a gift": "Enviar um presente", + "Send": "Enviar", + "Redeem a gift": "Resgatar um presente", + "Redeem": "Resgatar", + "paste code...": "colar código...", + "Wrap": "Embrulhar", + "Done": "Concluído", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Clicar em \"%1\" gerará um código de texto que você pode enviar para outros. Os códigos de presente podem ser resgatados várias vezes por qualquer um, mas expiram após um ou dois dias. Você só pode gerar um código de presente por hora. Seu jogo será salvo após o envio.", + "You may put between %1 and %2 cookies in the gift box.": "Você pode colocar entre %1 e %2 cookies na caixa de presente.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Você pode deixar um recado. Não seja grosso!
Máximo de %1 linhas e %2 caracteres.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "Depois de resgatar um presente, você terá que esperar uma hora antes de poder resgatar outro. Seu jogo será salvo após o resgate.", + "Box design": "Design da caixa", + "Icon": "Ícone", + "Here's your gift code!
Make sure to copy it so you can share it.": "Aqui está o seu código de presente!
Certifique-se de copiá-lo para poder compartilhar.", + "Code expired.": "Código expirado.", + "Invalid code.": "Código inválido.", + "Gift redeemed!
Inside, you find:": "Presente resgatado!
Dentro, você encontra:", + "There's a note too!": "Tem um recado também!", + "How nice!": "Que legal!", + "You've already sent or redeemed a gift recently.": "Você já enviou ou resgatou um presente recentemente.", + "Customize": "Personalizar", + "Customize your clones": "Personalize seus clones", + "Sprung from your very DNA. Shape them in your image!": "Criados a partir do seu próprio DNA. Molde-os à sua imagem!", + "Hair": "Cabelo", + "Hair color": "Cor do cabelo", + "Skin color": "Cor da pele", + "Head shape": "Forma da cabeça", + "Face": "Rosto", + "Extra": "/", + "Everyone's here.": "Todo mundo está aqui.", + "Won't you have some cookies too?": "Você não vai querer uns cookies também?", "Achievement unlocked": "Conquista desbloqueada", "Make %1 just from %2.": "Faça %1 só com %2.", "Bake %1 in one ascension.": "Asse %1 em uma ascensão.", @@ -1399,6 +1452,7 @@ AddLanguage('PT-BR','portuguese',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Tenha pelo menos 1 do objeto mais caro, 2 do segundo mais caro, 4 do próximo e assim por diante (máximo de %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Tenha pelo menos 10 do objeto mais caro, 20 do segundo mais caro, 30 do próximo e assim por diante.", "Click a golden cookie.": "Clique em um cookie dourado.", + "Click a wrath cookie.": "Clique em um cookie furioso.", "Click %1.": "Clique em %1.", "Hack in some cookies.": "Hackeie uns cookies.", "Click really, really fast.": "Clique muito, muito rápido.", @@ -1406,6 +1460,7 @@ AddLanguage('PT-BR','portuguese',{ "Own %1.": "Adquira %1.", "Purchase %1.": "Compre %1.", "Dunk the cookie.": "Mergulhe o cookie.", + "Trigger the grandmapocalypse for the first time.": "Acione o vovócalipse pela primeira vez.", "Appease the grandmatriarchs at least once.": "Apazigue as vótriarcas pelo menos uma vez.", "Appease the grandmatriarchs at least %1 times.": "Apazigue as vótriarcas pelo menos %1 vezes.", "Declare a covenant with the grandmatriarchs.": "Entre em um pacto com as vótriarcas.", @@ -1437,6 +1492,7 @@ AddLanguage('PT-BR','portuguese',{ "Own %1 upgrades and %2 buildings.": "Adquira %1 melhorias e %2 construções.", "Own %1 heavenly upgrades.": "Tenha %1 melhorias divinas.", "Burst the near-extinct shiny wrinkler.": "Exploda o quase extinto enrugador brilhante.", + "Poke a wrinkler %1 times without killing it.": "Cutuque um enrugador %1 vezes sem matá-lo.", "Click a golden cookie less than 1 second after it spawns.": "Clique em um cookie dourado em menos de um segundo depois que ele surgir.", "Click a golden cookie less than 1 second before it dies.": "Clique em um cookie dourado menos de um segundo antes de ele sumir.", "Harvest %1 coalescing sugar lumps.": "Colete %1 torrões de açúcar coalescentes.", @@ -1464,9 +1520,14 @@ AddLanguage('PT-BR','portuguese',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Faça com que seus lucros no mercado de ações ultrapassem um ano inteiro de CpS ($%1).", "Unlock the highest-tier stock market headquarters.": "Desbloqueie a sede do mercado de ações de categoria mais alta.", "Have your stock market profits surpass $%1.": "Faça com que seus lucros no mercado de ações ultrapassem $%1.", + "Take out a loan and ascend before incurring the CpS penalty.": "Pegue um empréstimo e ascenda antes de incorrer na penalidade de CpS.", "Own %1 kitten upgrades.": "Adquira %1 melhorias de gatinho.", "Find the forgotten madeleine.": "Encontre a madeleine esquecida.", "Click one of Santa's helper grandmas during Christmas season.": "Clique em um dos ajudantes de Papai Noel durante a temporada de Natal.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Resgate um código de presente de cookie de um amigo (ou de si mesmo, não julgamos).", + "Shape your clones to resemble %1.": "Molde seus clones para se parecerem com %1.", + "Clone": "Clonar", + "Unlock the final building.": "Desbloqueie a última construção.", "Frenzy": "Frenesi", "Elder frenzy": "Frenesi Ancestral", "Click frenzy": "Frenesi de cliques", @@ -1486,6 +1547,7 @@ AddLanguage('PT-BR','portuguese',{ "Sugar frenzy": "Frenesi de açúcar", "Loan %1": "Empréstimo de %1", "Loan %1 (interest)": "Empréstimo de %1 (juros)", + "Gifted out": "Dado como presente", "%1 Power!": "Poder de %1!", "%1 Burden!": "Fardo de %1!", "Cookie production x%1 for %2!": "Produção de cookies x%1 por %2!", @@ -1505,6 +1567,7 @@ AddLanguage('PT-BR','portuguese',{ "You find %1% more golden cookies for the next %2.": "Você encontra %1% mais cookies dourados pelos próximos %2.", "Spells backfire %1 times less for %2.": "Feitiços dão errado %1 vezes menos por %2.", "Spells backfire %1 times more for %2.": "Feitiços dão errado %1 vezes mais por %2.", + "Can't send or receive gifts again for %1.": "Não é possível enviar ou receber presentes novamente por %1.", "can be done once every %1": "pode ser feito uma vez a cada %1", "usable again in %1": "usável novamente em %1", "+%1/s": "/", @@ -1832,6 +1895,9 @@ AddLanguage('PT-BR','portuguese',{ "[STOCK 17 NAME]Great Minds": "Grandes Mentes", "[STOCK 17 TYPE]Publicists": "Publicitários", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "Confeitaria %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "VOCÊ", "from %1": "de %1", "%1: currently worth $%2 per unit.": "%1: vale atualmente $%2 por unidade.", "You currently own %1 (worth $%2).": "Atualmente você tem %1 (valendo $%2).", @@ -2711,6 +2777,62 @@ AddLanguage('PT-BR','portuguese',{ "[Upgrade name 816]Web cookies": "Cookies da internet", "[Upgrade name 817]Steamed cookies": "Cookies no vapor", "[Upgrade name 818]Deep-fried cookie dough": "Massa de cookie frita", + "[Upgrade name 819]Wrapping paper": "Papel de embrulho", + "[Upgrade name 820]Havreflarn": "Havreflarn", + "[Upgrade name 821]Alfajores": "Alfajores", + "[Upgrade name 822]Gaufrettes": "Gaufrettes", + "[Upgrade name 823]Cookie bars": "Barras de cookie", + "[Upgrade name 824]Nines": "Noves", + "[Upgrade name 825]Clone grandmas": "Clone de vovós", + "[Upgrade name 826]Cloning vats": "Tubos de clonagem", + "[Upgrade name 827]Energized nutrients": "Nutrientes energizados", + "[Upgrade name 828]Stunt doubles": "Dublês", + "[Upgrade name 829]Clone recycling plant": "Usina de reciclagem de clones", + "[Upgrade name 830]Free-range clones": "Clones criados livres", + "[Upgrade name 831]Genetic tailoring": "Adaptação genética", + "[Upgrade name 832]Power in diversity": "Poder na diversidade", + "[Upgrade name 833]Self-betterment": "Autoaperfeiçoamento", + "[Upgrade name 834]Source control": "Controle de fonte", + "[Upgrade name 835]United workforce": "Força de trabalho unida", + "[Upgrade name 836]Safety patrols": "Patrulhas de segurança", + "[Upgrade name 837]Clone rights": "Direitos dos clones", + "[Upgrade name 838]One big family": "Uma grande família", + "[Upgrade name 839]Fine-tuned body plans": "Planos corporais aperfeiçoados", + "[Upgrade name 840]Foam-tipped canes": "Bastões com ponta de espuma", + "[Upgrade name 841]Self-driving tractors": "Tratores autônomos", + "[Upgrade name 842]Mineshaft supports": "Suportes de mina", + "[Upgrade name 843]Universal automation": "Automação universal", + "[Upgrade name 844]The big shortcake": "A grande torta", + "[Upgrade name 845]Temple traps": "Armadilhas do templo", + "[Upgrade name 846]Polymorphism": "Polimorfismo", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "Na sua porta em 30 minutos ou seu dinheiro de volta", + "[Upgrade name 848]The dose makes the poison": "A dose faz o veneno", + "[Upgrade name 849]A way home": "Um caminho para casa", + "[Upgrade name 850]Rectifying a mistake": "Corrigindo um erro", + "[Upgrade name 851]Candied atoms": "Átomos açucarados", + "[Upgrade name 852]Lab goggles but like cool shades": "Óculos de laboratório, mas igual óculos maneiros", + "[Upgrade name 853]Gambler's fallacy fallacy": "Falácia da falácia do apostador", + "[Upgrade name 854]The more they stay the same": "Mais continuam iguais", + "[Upgrade name 855]Simulation failsafes": "Falhas de simulação", + "[Upgrade name 856]The other routes to Rome": "Outros caminhos para Roma", + "[Upgrade name 857]Intellectual property theft": "Roubo de propriedade intelectual", + "[Upgrade name 858]Reading your clones bedtime stories": "Ler histórias de ninar para seus clones", + "[Upgrade name 859]Accelerated development": "Desenvolvimento acelerado", + "[Upgrade name 860]Peer review": "Revisão por pares", + "[Upgrade name 861]Fortune #020": "Sorte #020", + "[Upgrade name 862]Personal biscuit": "Biscoito pessoal", + "[Upgrade name 863]Unshackled glimmeringue": "Glimmerengue desbloqueado", + "[Upgrade name 864]Unshackled You": "Você desbloqueado", + "[Upgrade name 865]Kitten strategists": "Gatinhos estrategistas", + "[Upgrade name 866]Baklavas": "Baklavas", + "[Upgrade name 867]Snowball cookies": "Cookies bola de neve", + "[Upgrade name 868]Sequilhos": "Sequilhos", + "[Upgrade name 869]Hazelnut swirlies": "Swirlies de avelã", + "[Upgrade name 870]Spritz cookies": "Cookies spritz", + "[Upgrade name 871]Mbatata cookies": "Cookies mbatata", + "[Upgrade name 872]Springerles": "Springerles", + "[Upgrade name 873]Undecillion fingers": "Decilhões de dedos", + "[Upgrade name 874]Omniplast mouse": "Mouse omniplast", "[Achievement name 0]Wake and bake": "Levante e asse", "[Achievement name 1]Making some dough": "Sove a massa", "[Achievement name 2]So baked right now": "Tão assado agora", @@ -3299,5 +3421,59 @@ AddLanguage('PT-BR','portuguese',{ "[Achievement name 585]I'll rest when I'm dead": "Vou descansar quando tiver morrido", "[Achievement name 586]What do you get for the baker who has everything": "O que dar ao confeiteiro que tem tudo", "[Achievement name 587]Bottomless pit": "Poço sem fundo", - "[Achievement name 588]All the stars in heaven": "Todas as estrelas do céu" + "[Achievement name 588]All the stars in heaven": "Todas as estrelas do céu", + "[Achievement name 589]No time like the present": "Não há tempo como o presente", + "[Achievement name 590]Can we get much higher": "Podemos ir muito além", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Velocidade é o nome do jogo (não é, na verdade se chama Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Fundo para dias chuvosos", + "[Achievement name 593]And a little extra": "E um pouco mais", + "[Achievement name 594]Grandmapocalypse": "Vovócalipse", + "[Achievement name 595]Wrath cookie": "Biscoito furioso", + "[Achievement name 596]No more room in hell": "Não há mais vagas no inferno", + "[Achievement name 597]In her likeness": "À imagem dela", + "[Achievement name 598]Wrinkler poker": "Cutucador de enrugador", + "[Achievement name 599]Septcentennial": "Septcentenário", + "[Achievement name 600]My own clone": "Meu próprio clone", + "[Achievement name 601]Multiplicity": "Multiplicidade", + "[Achievement name 602]Born for this job": "Nascido para este trabalho", + "[Achievement name 603]Episode II": "Episódio II", + "[Achievement name 604]Copy that": "Copiado", + "[Achievement name 605]Life finds a way": "A vida encontra um jeito", + "[Achievement name 606]Overcrowding": "Superlotação", + "[Achievement name 607]Strength in numbers": "Força nos números", + "[Achievement name 608]Army of me": "Exército de mim", + "[Achievement name 609]Know thyself": "Conhece-te a ti mesmo", + "[Achievement name 610]Didn't make sense not to live": "Não fazia sentido não viver", + "[Achievement name 611]Genetic bottleneck": "Gargalo genético", + "[Achievement name 612]Despite everything, it's still you": "Apesar de tudo, ainda é você", + "[Achievement name 613]Everyone everywhere all at once": "Todo mundo em todos os lugares ao mesmo tempo", + "[Achievement name 614]Self-made": "Produção própria", + "[Achievement name 615]Reproducible results": "Resultados reproduzíveis", + "[Achievement name 616]That's all you": "É tudo você", + "[Achievement name 617]Self-improvement": "Automelhoramento", + "[Achievement name 618]And now you're even older": "E agora você está ainda mais velho", + "[Achievement name 619]Au naturel": "Au naturel", + "[Achievement name 620]Dirt-rich": "Rico em sujeira", + "[Achievement name 621]Bots build bots": "Robôs construindo robôs", + "[Achievement name 622]Getting that bag": "Conseguindo aquela grana", + "[Achievement name 623]The leader is good, the leader is great": "O líder é bom, o líder é ótimo", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Você não acha que poderiam ter usado... não poderia ter sido ma-", + "[Achievement name 625]Signed, sealed, delivered": "Assinado, selado, entregue", + "[Achievement name 626]Sugar, spice, and everything nice": "Açúcar, tempero e tudo que há de bom", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Não estamos nem um pouco perto do Kansas agora", + "[Achievement name 628]I only meant to stay a while": "Eu só queria ficar um pouco", + "[Achievement name 629]Not 20 years away forever": "Não 20 anos de distância para sempre", + "[Achievement name 630]Bright side of the Moon": "Lado claro da Lua", + "[Achievement name 631]Riding the Mersenne twister": "Conduzindo o Mersenne Twister", + "[Achievement name 632]Divide and conquer": "Dividir e conquistar", + "[Achievement name 633]Pebcakes": "Bolo de BIOS", + "[Achievement name 634]Greener on the other sides": "Mais verde dos outros lados", + "[Achievement name 635]Where is my mind": "Onde está a minha mente", + "[Achievement name 636]Introspection": "Introspecção", + "[Achievement name 637]Debt evasion": "Evasão de dívida", + "[Achievement name 638]Oft we mar what's well": "Geralmente estragamos o que está bom", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "O que não está clicando", + "[Achievement name 641]All on deck": "Todos a bordo", + "[Achievement name 642]A round of applause": "Uma salva de palmas" }); \ No newline at end of file diff --git a/loc/RU.js b/loc/RU.js index a6563a7a..87d6b133 100644 --- a/loc/RU.js +++ b/loc/RU.js @@ -231,6 +231,8 @@ AddLanguage('RU','russian',{ "Licorice milk": "Лакричное молоко", "Rose milk": "Розовое молоко", "Dragonfruit milk": "Молоко со вкусом питайи", + "Peach milk": "Персиковое молоко", + "Hazelnut milk": "Фундучное молоко", "Info": "Информация", "About": "Об игре", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker — это игра, написанная на JavaScript %1 и %2.", @@ -258,8 +260,10 @@ AddLanguage('RU','russian',{ "Load from file": "Загрузить из файла", "Use this to keep backups on your computer": "Эта функция используется для хранения резервных копий на компьютере", "Export save": "Экспорт сохраненных данных", + "Export": "Экспорт", "This is your save code.
Copy it and keep it somewhere safe!": "Это ваш код сохранения.
Скопируйте его и храните в надежном месте!", "Import save": "Импорт сохраненных данных", + "Import": "Импорт", "Please paste in the code that was given to you on save export.": "Введите код, полученный при экспорте сохраненных данных.", "Game saved": "Игра сохранена", "Game loaded": "Игра загружена", @@ -609,6 +613,7 @@ AddLanguage('RU','russian',{ "Reality Bending": "Искажение реальности", "Dragon Orbs": "Сферы дракона", "Supreme Intellect": "Высший интеллект", + "Dragon Guts": "Драконьи потроха", "News :": "Новости:", "Ticker (grandma)": [ "Сырое печенье.", @@ -743,6 +748,11 @@ AddLanguage('RU','russian',{ "астрономы предупреждают о дрейфующей траектории коры головного мозга и опасаются будущих лобовых столкновений, которые могут привести к опасным сотрясениям мозга.", "управляющие любезно напоминают сотрудникам, что корковые пекари являются материальной собственностью пекарни и не должны наделяться прозвищами." ], + "Ticker (You)": [ + "Человеком года в этом году вновь стали вы! Какая неожиданность!", + "Могут ли местные рестораны подавать вам контрабандную копию мяса? Смотрите наше вкусное расследование после сегодняшних новостей.", + "Любимый печеньковый магнат, ошибочно объявленный растоптанным до смерти обезумевшими фанатами, к счастью, оказался сбежавшим клоном, принятым за оригинал." + ], "Ticker (Halloween)": [ "стремительно растет популярность языческих ритуалов; дети по всему миру одеваются в странные костюмы и шантажируют домовладельцев за конфеты.", "дети во всем мире «растеряны и сбиты с толку», поскольку все без исключения сладости на Хэллоуин были заменены печеньем.", @@ -1140,6 +1150,14 @@ AddLanguage('RU','russian',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "Этот искусственный мозг размером с планету способен воплощать мечты о печенье. Пространство и время не имеют значения. Реальность произвольна.", "[Cortex baker business name]Think tank": "Аналитический центр", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "Существует не так много способов для увеличения прибыли. Но они все же есть? Наймите самых компетентных экспертов, и пусть они ломают головы за вас!", + "You": "Вы", + "%1 You": [ + "Вы: %1 шт.", + "Вы: %1 шт." + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "Всё это печенье существует только благодаря вам. Вы подумали, что, будь вас больше, вы смогли бы и заработать больше.", + "[You business name]You": "Вы", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "Ваш бизнес так хорош, что лучше быть уже не может. Единственный реальный способ улучшить его — это улучшить себя и стать лучшим генеральным директором, которого когда-либо видел свет.", "CpS": "ПвС", "cookies/click": "печенья/клик", "%1 CpS": "%1 ПвС", @@ -1218,6 +1236,7 @@ AddLanguage('RU','russian',{ "Wrinklers appear %1 times as fast.": "Морщинники появляются в %1 раза быстрее.", "Wrinklers spawn much more frequently.": "Морщинники появляются гораздо чаще.", "Wrinklers explode into %1% more cookies.": "Морщинники взрываются и возвращают на %1% больше печенья.", + "Wrinklers digest %1% more cookies.": "Морщинники переваривают на %1% больше печенья.", "Unlocks... something.": "Разблокирует... кое-что.", "In the festive hat, you find...": "В праздничной шапке вы найдете...", "a festive test tube
and %1.": "праздничную пробирку
и %1.", @@ -1296,6 +1315,7 @@ AddLanguage('RU','russian',{ "Auto": "Авто", "Loop": "Повтор", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "Разблокирует переключатель фона, позволяющий выбрать фон игры.
Содержит множество основных вкусов.", + "Contains more wallpapers for your background selector.": "Больше фоновых обоев.", "Lets you pick which wallpaper to display.": "Позволяет выбрать обои.", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "Это первое небесное улучшение; оно разблокирует систему небесных крошек.
При каждом восхождении печеньки, произведенные в прошлой жизни, превращаются в небесные крошки и престиж.
небесные крошки можно потратить на множество постоянных улучшений.
Уровень престижа также дает постоянное увеличение печ/с на +1% на каждом уровне.", "You can attract %1 more wrinklers.": "Вы можете привлечь на %1 больше морщинников.", @@ -1381,6 +1401,39 @@ AddLanguage('RU','russian',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "Все золотое печенье становится злым с высоким шансом негативного эффекта.", "Wrinklers appear %1% faster and digest %2% more cookies.": "Морщинники появляются на %1% быстрее и съедают на %2% больше печенья.", "Effect is only active when your total amount of buildings ends with 0.": "Эффект действует, только если количество зданий оканчивается на 0.", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "Теперь можно обмениваться подарками с другими игроками с помощью кнопок в правом верхнем углу меню «%1».", + "You need at least %1 cookies in bank to send and receive gifts.": "Для отправки и получения подарков в банке должно быть не менее %1 печенек.", + "Send a gift": "Отправить подарок", + "Send": "Отправить", + "Redeem a gift": "Получить подарок", + "Redeem": "Получить", + "paste code...": "Вставить код...", + "Wrap": "Завернуть", + "Done": "Готово", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "Нажмите «%1», чтобы создать текстовый код и отправить его другим игрокам. Кто угодно может использовать подарочный код по нескольку раз, но срок действия кодов истекает через 1–2 дня. Можно генерировать один подарочный код в час. После отправки игра будет сохранена.", + "You may put between %1 and %2 cookies in the gift box.": "В подарочную коробку можно положить от %1–%2 печений.", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "Можно оставить записку. Не злоупотребляйте!
Максимум строк — %1, символов — %2.", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "После получения подарка придётся подождать час до следующего. После получения подарка игра будет сохранена.", + "Box design": "Дизайн коробки", + "Icon": "Значок", + "Here's your gift code!
Make sure to copy it so you can share it.": "Вот ваш подарочный код!
Скопируйте его и отошлите другим игрокам.", + "Code expired.": "Срок действия кода истёк.", + "Invalid code.": "Неправильный код.", + "Gift redeemed!
Inside, you find:": "Подарок получен!
Содержимое:", + "There's a note too!": "Тут ещё и записка!", + "How nice!": "Как мило!", + "You've already sent or redeemed a gift recently.": "Вы уже недавно отправляли или получали подарок.", + "Customize": "Настроить", + "Customize your clones": "Настроить клонов", + "Sprung from your very DNA. Shape them in your image!": "Формируются из вашей ДНК. Создайте их по образу и подобию своему!", + "Hair": "Волосы", + "Hair color": "Цвет волос", + "Skin color": "Цвет кожи", + "Head shape": "Форма головы", + "Face": "Лицо", + "Extra": "Дополнительно", + "Everyone's here.": "Все в сборе.", + "Won't you have some cookies too?": "Не хотите ли отведать печенья?", "Achievement unlocked": "Достижение разблокировано", "Make %1 just from %2.": "Получить %1 только с помощью %2.", "Bake %1 in one ascension.": "Испечь %1 за одно восхождение.", @@ -1399,6 +1452,7 @@ AddLanguage('RU','russian',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "Получить хотя бы 1 самый дорогой объект, 2 вторых по дороговизне объекта, 4 следующих и т. д. (не более %1).", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "Получить хотя бы 1о самых дорогих объектов, 20 вторых по дороговизне объектов, 30 следующих и т. д.", "Click a golden cookie.": "Кликнуть по золотому печенью.", + "Click a wrath cookie.": "Нажмите на печенье гнева.", "Click %1.": "Кликнуть %1.", "Hack in some cookies.": "Хакнуть несколько печенек.", "Click really, really fast.": "Кликать очень-очень быстро.", @@ -1406,6 +1460,7 @@ AddLanguage('RU','russian',{ "Own %1.": "Получить %1.", "Purchase %1.": "Купить %1.", "Dunk the cookie.": "Обмакнуть печенье.", + "Trigger the grandmapocalypse for the first time.": "Впервые спровоцируйте бабулепокалипсис.", "Appease the grandmatriarchs at least once.": "Успокоить бабульматриархов хотя бы один раз.", "Appease the grandmatriarchs at least %1 times.": "Успокоить бабульматриархов хотя бы %1 раз.", "Declare a covenant with the grandmatriarchs.": "Заключить договор с бабульматриархами.", @@ -1437,6 +1492,7 @@ AddLanguage('RU','russian',{ "Own %1 upgrades and %2 buildings.": "Получить %1 улучшений и %2 строений.", "Own %1 heavenly upgrades.": "Получить божественные улучшения: %1.", "Burst the near-extinct shiny wrinkler.": "Взорвать редкого блестящего морщинника.", + "Poke a wrinkler %1 times without killing it.": "Ткните морщинника %1 раз, не убив его.", "Click a golden cookie less than 1 second after it spawns.": "Кликнуть по золотому печенью менее чем через 1 секунду после его появления.", "Click a golden cookie less than 1 second before it dies.": "Кликнуть по золотому печенью менее чем за 1 секунду до его исчезновения.", "Harvest %1 coalescing sugar lumps.": "Собрать выросшие кусочки сахара: %1.", @@ -1464,9 +1520,14 @@ AddLanguage('RU','russian',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "Сделать так, чтобы ваша прибыль на фондовом рынке превысила годовой показатель печ/с ($%1).", "Unlock the highest-tier stock market headquarters.": "Разблокировать штаб-квартиру на фондовом рынке высшего уровня.", "Have your stock market profits surpass $%1.": "Сделать так, чтобы ваша прибыль на фондовом рынке превысила $%1.", + "Take out a loan and ascend before incurring the CpS penalty.": "Возьмите кредит и вознеситесь до того, как получите штраф.", "Own %1 kitten upgrades.": "Получить %1 улучшений для котят.", "Find the forgotten madeleine.": "Найти забытое печенье мадлен.", "Click one of Santa's helper grandmas during Christmas season.": "Нажмите на одну из бабушек-помощниц Санты во время рождественских праздников.", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "Получите подарочный код на печенье у друга (или у себя, мы не осуждаем).", + "Shape your clones to resemble %1.": "Сделайте клонов похожими на %1.", + "Clone": "Клон", + "Unlock the final building.": "Разблокируйте последнее строение.", "Frenzy": "Безумие", "Elder frenzy": "Безумие старушек", "Click frenzy": "Кликательное безумие", @@ -1486,6 +1547,7 @@ AddLanguage('RU','russian',{ "Sugar frenzy": "Сахарное безумие", "Loan %1": "Заем %1", "Loan %1 (interest)": "Заем %1 (проценты)", + "Gifted out": "Подарок выдан", "%1 Power!": "%1 к силе!", "%1 Burden!": "%1 к бремени!", "Cookie production x%1 for %2!": "Производство печенья увеличивается x%1 на %2!", @@ -1505,6 +1567,7 @@ AddLanguage('RU','russian',{ "You find %1% more golden cookies for the next %2.": "Вы найдете на %1% больше золотых печенек в течение следующих %2.", "Spells backfire %1 times less for %2.": "Заклинания дают эффект в %1 раз меньше в течение %2.", "Spells backfire %1 times more for %2.": "Заклинания дают эффект в %1 раз больше в течение %2.", + "Can't send or receive gifts again for %1.": "Невозможно снова обменяться подарками с %1.", "can be done once every %1": "Можно делать раз в %1", "usable again in %1": "До следующего применения: %1", "+%1/s": "+%1/с.", @@ -1832,6 +1895,9 @@ AddLanguage('RU','russian',{ "[STOCK 17 NAME]Great Minds": "Великие умы", "[STOCK 17 TYPE]Publicists": "Публицисты", "[STOCK 17 LOGO]PBL": "ПБЛ", + "[STOCK 18 NAME]%1's Bakery": "Пекарня игрока %1", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "ВЫ", "from %1": "от %1", "%1: currently worth $%2 per unit.": "%1: сейчас стоит $%2 за единицу.", "You currently own %1 (worth $%2).": "В наличии %1 (стоимость: $%2).", @@ -2711,6 +2777,62 @@ AddLanguage('RU','russian',{ "[Upgrade name 816]Web cookies": "Веб-печеньки", "[Upgrade name 817]Steamed cookies": "Печенье на пару", "[Upgrade name 818]Deep-fried cookie dough": "Хорошо пропеченное тесто", + "[Upgrade name 819]Wrapping paper": "Обёрточная бумага", + "[Upgrade name 820]Havreflarn": "Хаврефларн", + "[Upgrade name 821]Alfajores": "Альфахорес", + "[Upgrade name 822]Gaufrettes": "Вафли", + "[Upgrade name 823]Cookie bars": "Печенье-батончики", + "[Upgrade name 824]Nines": "Девятки", + "[Upgrade name 825]Clone grandmas": "Бабушки-клоны", + "[Upgrade name 826]Cloning vats": "Чаны для клонирования", + "[Upgrade name 827]Energized nutrients": "С питательными веществами", + "[Upgrade name 828]Stunt doubles": "Дублёры", + "[Upgrade name 829]Clone recycling plant": "Завод по переработке клонов", + "[Upgrade name 830]Free-range clones": "Клоны на свободном выгуле", + "[Upgrade name 831]Genetic tailoring": "Генетический подбор", + "[Upgrade name 832]Power in diversity": "Сила в разнообразии", + "[Upgrade name 833]Self-betterment": "Самосовершенствование", + "[Upgrade name 834]Source control": "Контроль источников", + "[Upgrade name 835]United workforce": "Объединённая рабочая сила", + "[Upgrade name 836]Safety patrols": "Охранные патрули", + "[Upgrade name 837]Clone rights": "Права клонов", + "[Upgrade name 838]One big family": "Одна большая семья", + "[Upgrade name 839]Fine-tuned body plans": "Точные планы тела", + "[Upgrade name 840]Foam-tipped canes": "Трости с мягкими наконечниками", + "[Upgrade name 841]Self-driving tractors": "Самоходные тракторы", + "[Upgrade name 842]Mineshaft supports": "Опоры шахтовых стволов", + "[Upgrade name 843]Universal automation": "Универсальная автоматизация", + "[Upgrade name 844]The big shortcake": "Большой корж", + "[Upgrade name 845]Temple traps": "Храмовые ловушки", + "[Upgrade name 846]Polymorphism": "Полиморфизм", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "У вас на пороге через 30 минут, или вернём деньги", + "[Upgrade name 848]The dose makes the poison": "Яд — в дозировке", + "[Upgrade name 849]A way home": "Путь домой", + "[Upgrade name 850]Rectifying a mistake": "Исправление ошибки", + "[Upgrade name 851]Candied atoms": "Засахаренные атомы", + "[Upgrade name 852]Lab goggles but like cool shades": "Лабораторные очки, но модные", + "[Upgrade name 853]Gambler's fallacy fallacy": "Ошибка азартного игрока", + "[Upgrade name 854]The more they stay the same": "Чем больше они остаются прежними", + "[Upgrade name 855]Simulation failsafes": "Защита моделирования", + "[Upgrade name 856]The other routes to Rome": "Другие пути в Рим", + "[Upgrade name 857]Intellectual property theft": "Кража интеллектуальной собственности", + "[Upgrade name 858]Reading your clones bedtime stories": "Читайте клонам сказки на ночь", + "[Upgrade name 859]Accelerated development": "Ускоренное развитие", + "[Upgrade name 860]Peer review": "Экспертиза", + "[Upgrade name 861]Fortune #020": "Удача № 020", + "[Upgrade name 862]Personal biscuit": "Личный бисквит", + "[Upgrade name 863]Unshackled glimmeringue": "Сверкающий зефир", + "[Upgrade name 864]Unshackled You": "Непоколебимый ты", + "[Upgrade name 865]Kitten strategists": "Котята-стратеги", + "[Upgrade name 866]Baklavas": "Пахлава", + "[Upgrade name 867]Snowball cookies": "Печенье «Снежок»", + "[Upgrade name 868]Sequilhos": "Секильос", + "[Upgrade name 869]Hazelnut swirlies": "Фундучные спирали", + "[Upgrade name 870]Spritz cookies": "Печенье «Сприц»", + "[Upgrade name 871]Mbatata cookies": "Печенье «Мбатата»", + "[Upgrade name 872]Springerles": "Шпрингерле", + "[Upgrade name 873]Undecillion fingers": "Ундециллион пальцев", + "[Upgrade name 874]Omniplast mouse": "Мышь из омнипласта", "[Achievement name 0]Wake and bake": "Просыпайся и пеки", "[Achievement name 1]Making some dough": "Делаем тесто", "[Achievement name 2]So baked right now": "Так выпекается прямо сейчас", @@ -3299,5 +3421,59 @@ AddLanguage('RU','russian',{ "[Achievement name 585]I'll rest when I'm dead": "Отдохну на том свете", "[Achievement name 586]What do you get for the baker who has everything": "Что подарить пекарю, у которого все есть", "[Achievement name 587]Bottomless pit": "Бездонная дыра", - "[Achievement name 588]All the stars in heaven": "Все звезды на небесах" + "[Achievement name 588]All the stars in heaven": "Все звезды на небесах", + "[Achievement name 589]No time like the present": "Есть только настоящее", + "[Achievement name 590]Can we get much higher": "Можем ли мы подняться намного выше", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "Скорость — это название игры (нет, это не так, она называется Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "Фонд на чёрный день", + "[Achievement name 593]And a little extra": "И чуть-чуть ещё", + "[Achievement name 594]Grandmapocalypse": "Бабулепокалипсис", + "[Achievement name 595]Wrath cookie": "Печенье гнева", + "[Achievement name 596]No more room in hell": "В аду больше нет места", + "[Achievement name 597]In her likeness": "По её подобию", + "[Achievement name 598]Wrinkler poker": "Морщинотык", + "[Achievement name 599]Septcentennial": "Семисотлетие", + "[Achievement name 600]My own clone": "Мой собственный клон", + "[Achievement name 601]Multiplicity": "Многообразие", + "[Achievement name 602]Born for this job": "Рождённый для этой работы", + "[Achievement name 603]Episode II": "Эпизод II", + "[Achievement name 604]Copy that": "Клон готов", + "[Achievement name 605]Life finds a way": "Жизнь находит выход", + "[Achievement name 606]Overcrowding": "Переполненность", + "[Achievement name 607]Strength in numbers": "Сила в количестве", + "[Achievement name 608]Army of me": "Армия меня", + "[Achievement name 609]Know thyself": "Познай себя", + "[Achievement name 610]Didn't make sense not to live": "Не было смысла не жить", + "[Achievement name 611]Genetic bottleneck": "Эффект бутылочного горлышка", + "[Achievement name 612]Despite everything, it's still you": "Несмотря ни на что, это всё ещё ты", + "[Achievement name 613]Everyone everywhere all at once": "Все и везде одновременно", + "[Achievement name 614]Self-made": "Сделал себя сам", + "[Achievement name 615]Reproducible results": "Воспроизводимые результаты", + "[Achievement name 616]That's all you": "Это всё вы", + "[Achievement name 617]Self-improvement": "Самосовершенствование", + "[Achievement name 618]And now you're even older": "Теперь ты ещё старше", + "[Achievement name 619]Au naturel": "Натуральность", + "[Achievement name 620]Dirt-rich": "Невероятное богатство", + "[Achievement name 621]Bots build bots": "Боты создают ботов", + "[Achievement name 622]Getting that bag": "Получение сумки", + "[Achievement name 623]The leader is good, the leader is great": "Лидер хорош, лидер велик", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "Не могли же они использовать... это ведь не ма...", + "[Achievement name 625]Signed, sealed, delivered": "Подписано, запечатано, доставлено", + "[Achievement name 626]Sugar, spice, and everything nice": "Сахар, пряности и всё хорошее", + "[Achievement name 627]Not even remotely close to Kansas anymore": "Даже отдалённо не близко к Канзасу", + "[Achievement name 628]I only meant to stay a while": "Я хотел остаться лишь ненадолго", + "[Achievement name 629]Not 20 years away forever": "Не на 20 лет или навсегда", + "[Achievement name 630]Bright side of the Moon": "Светлая сторона Луны", + "[Achievement name 631]Riding the Mersenne twister": "Поездка на смерче Мерсенна", + "[Achievement name 632]Divide and conquer": "Разделяй и властвуй", + "[Achievement name 633]Pebcakes": "Проблемные кексы", + "[Achievement name 634]Greener on the other sides": "Зеленее с другой стороны", + "[Achievement name 635]Where is my mind": "Где мой разум", + "[Achievement name 636]Introspection": "Самоанализ", + "[Achievement name 637]Debt evasion": "Уклонение от уплаты долгов", + "[Achievement name 638]Oft we mar what's well": "Часто мы портим то, что в порядке", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "Что не кликабельно", + "[Achievement name 641]All on deck": "Все в сборе", + "[Achievement name 642]A round of applause": "Аплодисменты" }); \ No newline at end of file diff --git a/loc/ZH-CN.js b/loc/ZH-CN.js index 10e16ddd..1e603e20 100644 --- a/loc/ZH-CN.js +++ b/loc/ZH-CN.js @@ -231,6 +231,8 @@ AddLanguage('ZH-CN','chinese',{ "Licorice milk": "甘草牛奶", "Rose milk": "玫瑰牛奶", "Dragonfruit milk": "火龙果牛奶", + "Peach milk": "桃子牛奶", + "Hazelnut milk": "榛子牛奶", "Info": "信息", "About": "关于", "Cookie Clicker is a javascript game by %1 and %2.": "Cookie Clicker 是一款由 %1 和 %2 联合开发的 Javascript 游戏。", @@ -258,8 +260,10 @@ AddLanguage('ZH-CN','chinese',{ "Load from file": "从文件加载", "Use this to keep backups on your computer": "使用此功能将备份保存在你的电脑上", "Export save": "导出存档", + "Export": "导出", "This is your save code.
Copy it and keep it somewhere safe!": "这是你的存档代码。
请复制并将其保存在安全的地方!", "Import save": "导入存档", + "Import": "导入", "Please paste in the code that was given to you on save export.": "请粘贴存档导出时获得的代码。", "Game saved": "游戏已保存", "Game loaded": "游戏已加载", @@ -609,6 +613,7 @@ AddLanguage('ZH-CN','chinese',{ "Reality Bending": "现实扭曲", "Dragon Orbs": "龙之宝珠", "Supreme Intellect": "“最高智慧”,", + "Dragon Guts": "龙胆", "News :": "新闻:", "Ticker (grandma)": [ "湿润的饼干。", @@ -743,6 +748,11 @@ AddLanguage('ZH-CN','chinese',{ "天文學家警告皮層貝克軌跡漂移,擔心未來的正面碰撞會導致代價高昂的腦震盪。", "腦皮層麵包師提醒員工,腦皮層麵包是麵包店的物質財產,不應該用暱稱來稱呼。" ], + "Ticker (You)": [ + "年度人物是,今年又是,你!真没想到!", + "本地餐馆可以为你提供违法克隆肉吗?我们的美味调查将在今晚的新闻之后进行。", + "深受爱戴的饼干巨头,被错误地报道遭到疯狂粉丝践踏致死 ,幸好被发现是被误认为原版的逃脱的克隆人。" + ], "Ticker (Halloween)": [ "异教徒意识正在兴起,世界各地的儿童身着奇装异服,向房主勒索糖果。", "世界各地的儿童“感到既失落又迷茫”,所有万圣节糖果都被饼干取代了。", @@ -1140,6 +1150,14 @@ AddLanguage('ZH-CN','chinese',{ "[Cortex baker quote]These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.": "這些行星大小的人造大腦能夠簡單地將餅乾的夢想變成現實。時間和空間無關緊要。現實可以任意。", "[Cortex baker business name]Think tank": "智囊團", "[Cortex baker business quote]There's only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!": "只有這麼多方法可以帶來更多的利潤。甚至有嗎?聘請已知宇宙中最傑出的專家,讓他們為你絞盡腦汁!", + "You": "你", + "%1 You": [ + "%1 你", + "%1 你" + ], + "[You quote]You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.": "只有你是所有这些饼干背后的原因。你觉得如果有多个你的话……也许你可以做更多的事情。", + "[You business name]You": "你", + "[You business quote]Your business is as great as it's gonna get. The only real way to improve it anymore is to improve yourself - and become the best CEO this world has ever seen.": "你的生意开展得顺风顺水。要想让你的生意更进一步的唯一方法就是提升你自己——成为前所未有的世界最佳CEO。", "CpS": "/", "cookies/click": "饼干/点击", "%1 CpS": "/", @@ -1218,6 +1236,7 @@ AddLanguage('ZH-CN','chinese',{ "Wrinklers appear %1 times as fast.": "饼干虫以 %1 倍的速度出现。", "Wrinklers spawn much more frequently.": "饼干虫更频繁地出现。", "Wrinklers explode into %1% more cookies.": "饼干虫爆裂成的饼干增加 %1%。", + "Wrinklers digest %1% more cookies.": "饼干虫额外消化%1%块饼干。", "Unlocks... something.": "解锁……某样东西。", "In the festive hat, you find...": "在节庆帽子中,你找到……", "a festive test tube
and %1.": "一支节庆试管
%1。", @@ -1296,6 +1315,7 @@ AddLanguage('ZH-CN','chinese',{ "Auto": "自動播放", "Loop": "循環播放", "Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.": "解锁背景选择器,允许你选择游戏的背景。
附带各种基础口味。", + "Contains more wallpapers for your background selector.": "你的背景选择器中包含更多壁纸。", "Lets you pick which wallpaper to display.": "允许你选择想要显示的壁纸。", "This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.": "这是第一次天堂升级;它将解锁天堂碎片系统。
每次飞升,你此前生成的饼干会被转换成天堂碎片威望
天堂碎片可用于购买各种永久超越升级。
你的威望等级每级可使你永久获得 +1% CpS。", "You can attract %1 more wrinklers.": "你可以额外引来 %1 条饼干虫。", @@ -1381,6 +1401,39 @@ AddLanguage('ZH-CN','chinese',{ "All golden cookies are wrath cookies with a greater chance of a negative effect.": "所有的黄金饼干都是愤怒饼干,产生负面影响的可能性更大。", "Wrinklers appear %1% faster and digest %2% more cookies.": "饼干虫出现速度加快了%1%,消化饼干的数量增加了%2%。", "Effect is only active when your total amount of buildings ends with 0.": "只有当你的建筑总量以0结尾时,效果才会激活。", + "You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.": "你现在可以使用%1菜单右上角的按钮来向其他玩家发送和接收礼物。", + "You need at least %1 cookies in bank to send and receive gifts.": "你的银行中至少得有%1块饼干才能发送和接收礼物。", + "Send a gift": "发送礼物", + "Send": "发送", + "Redeem a gift": "兑换礼物", + "Redeem": "兑换", + "paste code...": "粘贴代码……", + "Wrap": "包装", + "Done": "完成", + "Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.": "点击\"%1\"将生成一个文本代码,你可以将它发送给其他玩家。任何人都可以多次兑换礼物代码,但代码会在一天或两天后过期。你每个小时只能生成一个礼物代码。系统会在你发送代码后保存游戏进度。", + "You may put between %1 and %2 cookies in the gift box.": "你可以将%1到%2饼干放入礼物盒中。", + "You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.": "你可以留下便条。别失礼!
最多%1行,%2个字符。", + "Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.": "兑换完一个礼物后,你得等一个小时后才能兑换另一个。系统会在你兑换礼物后保存游戏进度。", + "Box design": "礼物盒设计", + "Icon": "图标", + "Here's your gift code!
Make sure to copy it so you can share it.": "这是你的礼物代码!
请复制代码,以便与其他玩家共享。", + "Code expired.": "代码已过期。", + "Invalid code.": "无效代码。", + "Gift redeemed!
Inside, you find:": "礼物已兑换!
礼物盒内有:", + "There's a note too!": "还有一张便条!", + "How nice!": "真不错!", + "You've already sent or redeemed a gift recently.": "你最近发送或兑换过礼物。", + "Customize": "自定义", + "Customize your clones": "自定义你的克隆", + "Sprung from your very DNA. Shape them in your image!": "源自你的每个DNA。用它们来塑造你的形象!", + "Hair": "头发", + "Hair color": "发色", + "Skin color": "肤色", + "Head shape": "头形", + "Face": "脸", + "Extra": "额外", + "Everyone's here.": "大家都到齐了。", + "Won't you have some cookies too?": "你不也来点饼干吗?", "Achievement unlocked": "已解锁成就", "Make %1 just from %2.": "通过%2制作%1+ 块饼干。", "Bake %1 in one ascension.": "一次飞升烘焙%1 块饼干。", @@ -1399,6 +1452,7 @@ AddLanguage('ZH-CN','chinese',{ "Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).": "拥有至少 1 个最贵的建筑,2 个第二贵的,4 个第三贵的,以此类推(%1 个封顶)。", "Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on.": "拥有至少 10 个最贵的建筑,20 个第二贵的,30 个第三贵的,以此类推。", "Click a golden cookie.": "点击一块黄金饼干。", + "Click a wrath cookie.": "点击愤怒饼干。", "Click %1.": "点击%1。", "Hack in some cookies.": "非法获得一些饼干。", "Click really, really fast.": "点的真快。", @@ -1406,6 +1460,7 @@ AddLanguage('ZH-CN','chinese',{ "Own %1.": "拥有%1。", "Purchase %1.": "购买%1。", "Dunk the cookie.": "把饼干泡一泡。", + "Trigger the grandmapocalypse for the first time.": "首次触发老奶奶起义。", "Appease the grandmatriarchs at least once.": "至少安抚一次老太婆元老。", "Appease the grandmatriarchs at least %1 times.": "至少安抚 %1 次老太婆元老。", "Declare a covenant with the grandmatriarchs.": "与老太婆元老立定盟约。", @@ -1437,6 +1492,7 @@ AddLanguage('ZH-CN','chinese',{ "Own %1 upgrades and %2 buildings.": "拥有 %1 项升级和 %2 个建筑。", "Own %1 heavenly upgrades.": "擁有 %1 天堂般的升級。", "Burst the near-extinct shiny wrinkler.": "炸死几近灭绝的闪光饼干虫。", + "Poke a wrinkler %1 times without killing it.": "戳穿一条饼干虫%1次而不杀死它。", "Click a golden cookie less than 1 second after it spawns.": "在黄金饼干出现后 1 秒内点击它。", "Click a golden cookie less than 1 second before it dies.": "在黄金饼干消失前 1 秒内点击它。", "Harvest %1 coalescing sugar lumps.": "收获 %1 个正在生长的糖块。", @@ -1464,9 +1520,14 @@ AddLanguage('ZH-CN','chinese',{ "Have your stock market profits surpass a whole year of CpS ($%1).": "股市获利超过一整年的 CpS($%1)。", "Unlock the highest-tier stock market headquarters.": "解锁最高阶股市总部。", "Have your stock market profits surpass $%1.": "股市获利超过 $%1。", + "Take out a loan and ascend before incurring the CpS penalty.": "在受到CpS惩罚前,领取一笔贷款并升职。", "Own %1 kitten upgrades.": "拥有 %1 项小猫升级。", "Find the forgotten madeleine.": "找到被疑忘的奶油茶糕。", "Click one of Santa's helper grandmas during Christmas season.": "在聖誕節期間單擊聖誕老人的幫手奶奶之一。", + "Redeem a cookie gift code from a friend (or from yourself, we don't judge).": "兑换一个来自好友(或你自己,我们不做评判)的饼干礼物代码。", + "Shape your clones to resemble %1.": "塑造你的克隆以模仿%1。", + "Clone": "克隆", + "Unlock the final building.": "解锁终极建筑。", "Frenzy": "狂热", "Elder frenzy": "长者狂热", "Click frenzy": "点击狂热", @@ -1486,6 +1547,7 @@ AddLanguage('ZH-CN','chinese',{ "Sugar frenzy": "糖块狂热!", "Loan %1": "贷款 %1", "Loan %1 (interest)": "贷款 %1(利息)", + "Gifted out": "已送出", "%1 Power!": "%1 能量!", "%1 Burden!": "%1 负担!", "Cookie production x%1 for %2!": "饼干产量 x %1,持续 %2!", @@ -1505,6 +1567,7 @@ AddLanguage('ZH-CN','chinese',{ "You find %1% more golden cookies for the next %2.": "黄金饼干在接下来 %2 的出现概率提高 %1%。", "Spells backfire %1 times less for %2.": "法术产生反效果的几率低 %1 倍,持续 %2。", "Spells backfire %1 times more for %2.": "法术产生反效果的几率高 %1 倍,持续 %2。", + "Can't send or receive gifts again for %1.": "%1内无法再次发送或接收礼物。", "can be done once every %1": "每%1可以完成一次", "usable again in %1": "在%1中再次可用", "+%1/s": "/", @@ -1832,6 +1895,9 @@ AddLanguage('ZH-CN','chinese',{ "[STOCK 17 NAME]Great Minds": "偉大的思想", "[STOCK 17 TYPE]Publicists": "公關人員", "[STOCK 17 LOGO]PBL": "PBL", + "[STOCK 18 NAME]%1's Bakery": "%1的烘焙坊", + "[STOCK 18 TYPE]%1": "%1", + "[STOCK 18 LOGO]YOU": "你", "from %1": "来自%1", "%1: currently worth $%2 per unit.": "%1:当前每单位价值$%2。", "You currently own %1 (worth $%2).": "你当前拥有%1(价值$%2)。", @@ -2711,6 +2777,62 @@ AddLanguage('ZH-CN','chinese',{ "[Upgrade name 816]Web cookies": "網絡餅乾", "[Upgrade name 817]Steamed cookies": "蒸餅乾", "[Upgrade name 818]Deep-fried cookie dough": "油炸餅乾麵團", + "[Upgrade name 819]Wrapping paper": "包装纸", + "[Upgrade name 820]Havreflarn": "燕麦饼干", + "[Upgrade name 821]Alfajores": "阿根廷曲奇", + "[Upgrade name 822]Gaufrettes": "法兰酥饼干", + "[Upgrade name 823]Cookie bars": "曲奇碎棒", + "[Upgrade name 824]Nines": "九九饼", + "[Upgrade name 825]Clone grandmas": "克隆老奶奶", + "[Upgrade name 826]Cloning vats": "克隆站", + "[Upgrade name 827]Energized nutrients": "活力满满的营养物质", + "[Upgrade name 828]Stunt doubles": "替身", + "[Upgrade name 829]Clone recycling plant": "克隆回收厂", + "[Upgrade name 830]Free-range clones": "自由克隆", + "[Upgrade name 831]Genetic tailoring": "基因定制", + "[Upgrade name 832]Power in diversity": "多元化的力量", + "[Upgrade name 833]Self-betterment": "自我完善", + "[Upgrade name 834]Source control": "来源控制", + "[Upgrade name 835]United workforce": "统一劳动力", + "[Upgrade name 836]Safety patrols": "安全巡逻", + "[Upgrade name 837]Clone rights": "克隆人权", + "[Upgrade name 838]One big family": "一个大家庭", + "[Upgrade name 839]Fine-tuned body plans": "微调身体结构", + "[Upgrade name 840]Foam-tipped canes": "海绵手杖", + "[Upgrade name 841]Self-driving tractors": "自动驾驶拖拉机", + "[Upgrade name 842]Mineshaft supports": "矿井支持", + "[Upgrade name 843]Universal automation": "通用自动化", + "[Upgrade name 844]The big shortcake": "大酥饼", + "[Upgrade name 845]Temple traps": "神庙陷阱", + "[Upgrade name 846]Polymorphism": "多形态", + "[Upgrade name 847]At your doorstep in 30 minutes or your money back": "30分钟送到,否则退款", + "[Upgrade name 848]The dose makes the poison": "只要剂量足,万物皆有毒", + "[Upgrade name 849]A way home": "总有办法", + "[Upgrade name 850]Rectifying a mistake": "纠正一个错误", + "[Upgrade name 851]Candied atoms": "蜜饯原子", + "[Upgrade name 852]Lab goggles but like cool shades": "实验室护目镜,喜欢冷色调", + "[Upgrade name 853]Gambler's fallacy fallacy": "赌徒谬论", + "[Upgrade name 854]The more they stay the same": "保持不变的越多", + "[Upgrade name 855]Simulation failsafes": "模拟故障", + "[Upgrade name 856]The other routes to Rome": "通往成功的其他途径", + "[Upgrade name 857]Intellectual property theft": "知识产权窃贼", + "[Upgrade name 858]Reading your clones bedtime stories": "阅读你的克隆睡前故事", + "[Upgrade name 859]Accelerated development": "加速发展", + "[Upgrade name 860]Peer review": "同行互查", + "[Upgrade name 861]Fortune #020": "财富#020", + "[Upgrade name 862]Personal biscuit": "个人饼干", + "[Upgrade name 863]Unshackled glimmeringue": "不受束缚的闪光蛋白霜", + "[Upgrade name 864]Unshackled You": "不受束缚的你", + "[Upgrade name 865]Kitten strategists": "小猫战略家", + "[Upgrade name 866]Baklavas": "果仁蜜饼", + "[Upgrade name 867]Snowball cookies": "雪球饼干", + "[Upgrade name 868]Sequilhos": "巴西经典曲奇", + "[Upgrade name 869]Hazelnut swirlies": "卷式威化饼", + "[Upgrade name 870]Spritz cookies": "挤花果酱饼干", + "[Upgrade name 871]Mbatata cookies": "马拉维甘薯饼干", + "[Upgrade name 872]Springerles": "曲奇饼大茴香饼干", + "[Upgrade name 873]Undecillion fingers": "手指", + "[Upgrade name 874]Omniplast mouse": "奥米普拉鼠标", "[Achievement name 0]Wake and bake": "醒来,烘焙", "[Achievement name 1]Making some dough": "做一些面团", "[Achievement name 2]So baked right now": "烘焙成品", @@ -3299,5 +3421,59 @@ AddLanguage('ZH-CN','chinese',{ "[Achievement name 585]I'll rest when I'm dead": "我死後會休息", "[Achievement name 586]What do you get for the baker who has everything": "你為擁有一切的麵包師得到什麼", "[Achievement name 587]Bottomless pit": "無底洞", - "[Achievement name 588]All the stars in heaven": "天堂裡所有的星星" + "[Achievement name 588]All the stars in heaven": "天堂裡所有的星星", + "[Achievement name 589]No time like the present": "择日不如撞日", + "[Achievement name 590]Can we get much higher": "我们还能更高吗", + "[Achievement name 591]Speed's the name of the game (no it's not it's called Cookie Clicker)": "速度是这个游戏的代名词(不,不是,游戏名叫Cookie Clicker)", + "[Achievement name 592]Rainy day fund": "应急基金", + "[Achievement name 593]And a little extra": "再多一点", + "[Achievement name 594]Grandmapocalypse": "老奶奶起义", + "[Achievement name 595]Wrath cookie": "愤怒饼干", + "[Achievement name 596]No more room in hell": "地狱已满", + "[Achievement name 597]In her likeness": "像她一样", + "[Achievement name 598]Wrinkler poker": "戳饼干虫的人", + "[Achievement name 599]Septcentennial": "700周年", + "[Achievement name 600]My own clone": "我自己的克隆", + "[Achievement name 601]Multiplicity": "多样性", + "[Achievement name 602]Born for this job": "天生干这行", + "[Achievement name 603]Episode II": "第二部", + "[Achievement name 604]Copy that": "复制", + "[Achievement name 605]Life finds a way": "生活自有其法", + "[Achievement name 606]Overcrowding": "超员", + "[Achievement name 607]Strength in numbers": "人多力量大", + "[Achievement name 608]Army of me": "我的军队", + "[Achievement name 609]Know thyself": "知己知彼", + "[Achievement name 610]Didn't make sense not to live": "活着才有意义", + "[Achievement name 611]Genetic bottleneck": "遗传瓶颈", + "[Achievement name 612]Despite everything, it's still you": "万变不离其宗", + "[Achievement name 613]Everyone everywhere all at once": "瞬息全宇宙", + "[Achievement name 614]Self-made": "白手起家", + "[Achievement name 615]Reproducible results": "可复制结果", + "[Achievement name 616]That's all you": "都是你干的", + "[Achievement name 617]Self-improvement": "自强不息", + "[Achievement name 618]And now you're even older": "你更老了", + "[Achievement name 619]Au naturel": "天然", + "[Achievement name 620]Dirt-rich": "极度富裕", + "[Achievement name 621]Bots build bots": "机器人造机器人", + "[Achievement name 622]Getting that bag": "拿到那个包", + "[Achievement name 623]The leader is good, the leader is great": "优秀的领导,伟大的领导", + "[Achievement name 624]You don't think they could've used... it couldn't have been ma-": "你认为他们不可以使用…那不可能是魔-", + "[Achievement name 625]Signed, sealed, delivered": "签字、盖章、交付", + "[Achievement name 626]Sugar, spice, and everything nice": "糖,香料和一切美好之物", + "[Achievement name 627]Not even remotely close to Kansas anymore": "甚至不再靠近堪萨斯", + "[Achievement name 628]I only meant to stay a while": "我只是想呆一会儿", + "[Achievement name 629]Not 20 years away forever": "不是永远相隔20年", + "[Achievement name 630]Bright side of the Moon": "月之明面", + "[Achievement name 631]Riding the Mersenne twister": "驾驭梅森旋转演算法", + "[Achievement name 632]Divide and conquer": "分而治之", + "[Achievement name 633]Pebcakes": "用户错误", + "[Achievement name 634]Greener on the other sides": "这山望着那山高", + "[Achievement name 635]Where is my mind": "我的心在哪里", + "[Achievement name 636]Introspection": "内省", + "[Achievement name 637]Debt evasion": "逃债", + "[Achievement name 638]Oft we mar what's well": "好高骛远", + "[Achievement name 639]Cookie Clicker": "Cookie Clicker", + "[Achievement name 640]What's not clicking": "没点击什么", + "[Achievement name 641]All on deck": "全体集合", + "[Achievement name 642]A round of applause": "掌声雷动" }); \ No newline at end of file diff --git a/loc/_loclist.txt b/loc/_loclist.txt index 237aa6b7..8d482b43 100644 --- a/loc/_loclist.txt +++ b/loc/_loclist.txt @@ -1,17 +1,13 @@ - - - - -CS.js -DE.js -EN.js -ES.js -FR.js -IT.js -JA.js -KO.js -NL.js -PL.js -PT-BR.js -RU.js -ZH-CN.js +http://orteil.dashnet.org/cookieclicker/loc/CS.js +http://orteil.dashnet.org/cookieclicker/loc/DE.js +http://orteil.dashnet.org/cookieclicker/loc/EN.js +http://orteil.dashnet.org/cookieclicker/loc/ES.js +http://orteil.dashnet.org/cookieclicker/loc/FR.js +http://orteil.dashnet.org/cookieclicker/loc/IT.js +http://orteil.dashnet.org/cookieclicker/loc/JA.js +http://orteil.dashnet.org/cookieclicker/loc/KO.js +http://orteil.dashnet.org/cookieclicker/loc/NL.js +http://orteil.dashnet.org/cookieclicker/loc/PL.js +http://orteil.dashnet.org/cookieclicker/loc/PT-BR.js +http://orteil.dashnet.org/cookieclicker/loc/RU.js +http://orteil.dashnet.org/cookieclicker/loc/ZH-CN.js diff --git a/loc/index.html b/loc/index.html index cb01b227..4d492588 100644 --- a/loc/index.html +++ b/loc/index.html @@ -6,22 +6,22 @@

Index of /cookieclicker/loc

- + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
[ICO]NameLast modifiedSizeDescription
[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[TXT]CS.js2022-05-25 00:51 238K 
[TXT]DE.js2022-05-25 00:51 242K 
[TXT]EN.js2022-05-25 00:51 183K 
[TXT]ES.js2022-05-25 00:51 242K 
[TXT]FR.js2022-05-29 02:21 247K 
[TXT]IT.js2022-05-25 00:51 244K 
[TXT]JA.js2022-05-30 20:02 258K 
[TXT]KO.js2022-05-25 00:51 246K 
[TXT]NL.js2022-05-25 00:51 236K 
[TXT]PL.js2022-05-25 00:51 244K 
[TXT]PT-BR.js2022-05-25 00:51 242K 
[TXT]RU.js2022-05-25 00:51 314K 
[TXT]ZH-CN.js2022-05-25 00:51 223K 
[PARENTDIR]Parent Directory  -  
[TXT]CS.js2023-05-01 20:00 251K 
[TXT]DE.js2023-05-01 20:00 254K 
[TXT]EN.js2023-05-01 20:00 194K 
[TXT]ES.js2023-05-01 20:00 254K 
[TXT]FR.js2023-05-01 20:00 260K 
[TXT]IT.js2023-05-01 20:00 257K 
[TXT]JA.js2023-05-01 20:00 272K 
[TXT]KO.js2023-05-01 20:00 258K 
[TXT]NL.js2023-05-01 20:00 248K 
[TXT]PL.js2023-05-01 20:00 256K 
[TXT]PT-BR.js2023-05-01 20:00 255K 
[TXT]RU.js2023-05-01 20:00 330K 
[TXT]ZH-CN.js2023-05-01 20:00 235K 

Apache/2.4.52 (Ubuntu) Server at orteil.dashnet.org Port 80
diff --git a/main.js b/main.js index f5d0ff3d..8e9853bc 100644 --- a/main.js +++ b/main.js @@ -1,15968 +1,16911 @@ -/* -All this code is copyright Orteil, 2013-2022. - -with some help, advice and fixes by Nicholas Laux, Debugbro, Opti, the folks at Playsaurus, and lots of people on reddit, Discord, and the DashNet forums - -also includes a bunch of snippets found on stackoverflow.com and others - -want to mod the game? scroll down to the "MODDING API" section -Hello, and welcome to the joyous mess that is main.js. Code contained herein is not guaranteed to be good, consistent, or sane. Most of this is years old at this point and harkens back to simpler, cruder times. In particular I've tried to maintain compatibility with fairly old versions of javascript, which means luxuries such as 'let', arrow functions and string literals are unavailable. -As Cookie Clicker is rife with puns and tricky wordplay, localization was never intended to be possible - but ended up happening anyway as part of the Steam port. As a result, usage of strings is somewhat unorthodox in some places. -Have a nice trip, and stay safe. -Spoilers ahead. -http://orteil.dashnet.org -*/ - -/*===================================================================================== -MISC HELPER FUNCTIONS -=======================================================================================*/ -function l(what) {return document.getElementById(what);} -function choose(arr) {return arr[Math.floor(Math.random()*arr.length)];} - -function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");} -function replaceAll(find,replace,str){return str.replace(new RegExp(escapeRegExp(find),'g'),replace);} - -function cap(str){return str.charAt(0).toUpperCase()+str.slice(1);} - -function romanize(num){ - if (isNaN(num)) - return NaN; - var digits = String(+num).split(""), - key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM", - "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC", - "","I","II","III","IV","V","VI","VII","VIII","IX"], - roman = "", - i = 3; - while (i--) - roman = (key[+digits.pop() + (i * 10)] || "") + roman; - return Array(+digits.join("") + 1).join("M") + roman; -} - -//disable sounds coming from soundjay.com (sorry) -var realAudio=typeof Audio!=='undefined'?Audio:function(){return {}};//backup real audio -Audio=function(src){ - if (src && src.indexOf('soundjay')>-1) {Game.Popup('Sorry, no sounds hotlinked from soundjay.com.');this.play=function(){};} - else return new realAudio(src); -}; - -if(!Array.prototype.indexOf) { - Array.prototype.indexOf = function(needle) { - for(var i = 0; i < this.length; i++) { - if(this[i] === needle) {return i;} - } - return -1; - }; -} - -function randomFloor(x) {if ((x%1) 20) { - e -= 20; - x /= Math.pow(10,e); - x += (new Array(e+1)).join('0'); - } - } - return x; -} - -//Beautify and number-formatting adapted from the Frozen Cookies add-on (http://cookieclicker.wikia.com/wiki/Frozen_Cookies_%28JavaScript_Add-on%29) -function formatEveryThirdPower(notations) -{ - return function (val) - { - var base=0,notationValue=''; - if (!isFinite(val)) return 'Infinity'; - if (val>=1000000) - { - val/=1000; - while(Math.round(val)>=1000) - { - val/=1000; - base++; - } - if (base>=notations.length) {return 'Infinity';} else {notationValue=notations[base];} - } - return (Math.round(val*1000)/1000)+notationValue; - }; -} - -function rawFormatter(val){return Math.round(val*1000)/1000;} - -var formatLong=[' thousand',' million',' billion',' trillion',' quadrillion',' quintillion',' sextillion',' septillion',' octillion',' nonillion']; -var prefixes=['','un','duo','tre','quattuor','quin','sex','septen','octo','novem']; -var suffixes=['decillion','vigintillion','trigintillion','quadragintillion','quinquagintillion','sexagintillion','septuagintillion','octogintillion','nonagintillion']; -for (var i in suffixes) -{ - for (var ii in prefixes) - { - formatLong.push(' '+prefixes[ii]+suffixes[i]); - } -} - -var formatShort=['k','M','B','T','Qa','Qi','Sx','Sp','Oc','No']; -var prefixes=['','Un','Do','Tr','Qa','Qi','Sx','Sp','Oc','No']; -var suffixes=['D','V','T','Qa','Qi','Sx','Sp','O','N']; -for (var i in suffixes) -{ - for (var ii in prefixes) - { - formatShort.push(' '+prefixes[ii]+suffixes[i]); - } -} -formatShort[10]='Dc'; - - -var numberFormatters= -[ - formatEveryThirdPower(formatShort), - formatEveryThirdPower(formatLong), - rawFormatter -]; -var Beautify=function(val,floats) -{ - var negative=(val<0); - var decimal=''; - var fixed=val.toFixed(floats); - if (floats>0 && Math.abs(val)<1000 && Math.floor(fixed)!=fixed) decimal='.'+(fixed.toString()).split('.')[1]; - val=Math.floor(Math.abs(val)); - if (floats>0 && fixed==val+1) val++; - //var format=!EN?2:Game.prefs.format?2:1; - var format=Game.prefs.format?2:1; - var formatter=numberFormatters[format]; - var output=(val.toString().indexOf('e+')!=-1 && format==2)?val.toPrecision(3).toString():formatter(val).toString().replace(/\B(?=(\d{3})+(?!\d))/g,','); - //var output=formatter(val).toString().replace(/\B(?=(\d{3})+(?!\d))/g,','); - if (output=='0') negative=false; - return negative?'-'+output:output+decimal; -} -var shortenNumber=function(val) -{ - //if no scientific notation, return as is, else : - //keep only the 5 first digits (plus dot), round the rest - //may or may not work properly - if (val>=1000000 && isFinite(val)) - { - var num=val.toString(); - var ind=num.indexOf('e+'); - if (ind==-1) return val; - var str=''; - for (var i=0;i0) str2+=','; - str2+=str[i]; - } - return str2; -} - -var beautifyInTextFilter=/(([\d]+[,]*)+)/g;//new regex -function BeautifyInTextFunction(str){return Beautify(parseInt(str.replace(/,/g,''),10));}; -function BeautifyInText(str) {return str.replace(beautifyInTextFilter,BeautifyInTextFunction);}//reformat every number inside a string -function BeautifyAll()//run through upgrades and achievements to reformat the numbers -{ - var func=function(what){what.ddesc=BeautifyInText(what.ddesc);} - for (var i in Game.UpgradesById){Game.UpgradesById[i].ddesc=BeautifyInText(Game.UpgradesById[i].ddesc);} - for (var i in Game.AchievementsById){Game.AchievementsById[i].ddesc=BeautifyInText(Game.AchievementsById[i].ddesc);} -} - - -//=== LOCALIZATION === - -var locStrings={}; -var locStringsFallback={}; -var locId='NONE'; -var EN=true; -var locName='none'; -var locPatches=[]; -var locPlur='nplurals=2;plural=(n!=1);';//see http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html -var locPlurFallback=locPlur; -//note : plural index will be downgraded to the last matching, ie. in this case, if we get "0" but don't have a 3rd option, use the 2nd option (or 1st, lacking that too) -var locStringsByPart={}; -var FindLocStringByPart=function(match) -{ - return locStringsByPart[match]||undefined; - /* - //note: slow, only do this on init - for (var i in locStrings){ - var bit=i.split(']'); - if (bit[0].substring(1)==match) return i; - } - return undefined; - */ -} - -var Langs={ - 'EN':{file:'EN',nameEN:'English',name:'English',changeLanguage:'Language',icon:0,w:1,isEN:true}, - 'FR':{file:'FR',nameEN:'French',name:'Français',changeLanguage:'Langue',icon:0,w:1}, - 'DE':{file:'DE',nameEN:'German',name:'Deutsch',changeLanguage:'Sprache',icon:0,w:1}, - 'NL':{file:'NL',nameEN:'Dutch',name:'Nederlands',changeLanguage:'Taal',icon:0,w:1}, - 'CS':{file:'CS',nameEN:'Czech',name:'Čeština',changeLanguage:'Jazyk',icon:0,w:1}, - 'PL':{file:'PL',nameEN:'Polish',name:'Polski',changeLanguage:'Język',icon:0,w:1}, - 'IT':{file:'IT',nameEN:'Italian',name:'Italiano',changeLanguage:'Lingua',icon:0,w:1}, - 'ES':{file:'ES',nameEN:'Spanish',name:'Español',changeLanguage:'Idioma',icon:0,w:1}, - 'PT-BR':{file:'PT-BR',nameEN:'Portuguese',name:'Português',changeLanguage:'Idioma',icon:0,w:1}, - 'JA':{file:'JA',nameEN:'Japanese',name:'日本語',changeLanguage:'言語',icon:0,w:1.5}, - 'ZH-CN':{file:'ZH-CN',nameEN:'Chinese',name:'中文',changeLanguage:'语言',icon:0,w:1.5}, - 'KO':{file:'KO',nameEN:'Korean',name:'한글',changeLanguage:'언어',icon:0,w:1.5}, - 'RU':{file:'RU',nameEN:'Russian',name:'Русский',changeLanguage:'Язык',icon:0,w:1.2}, -}; - -//note : baseline should be the original english text -//in several instances, the english text will be quite different from the other languages, as this game was initially never meant to be translated and the translation process doesn't always play well with complex sentence structures -/*use: - loc('Plain text') - loc('Text where %1 is a parameter','something') - loc('Text where %1 and %2 are parameters',['a thing','another thing']) - loc('There is %1 apple',5) - ...if the localized string is an array, this is parsed as a pluralized string; for instance, the localized string could be - "There is %1 apple":[ - "There is %1 apple", - "There are %1 apples" - ] - loc('There is %1 apple and also, %2!',[5,'hello']) - loc('This string is localized.',0,'This is the string displayed in the english version.') - loc('You have %1.',''+loc('%1 apple',LBeautify(amount))+'') - ...you may nest localized strings, and use LBeautify() to pack Beautified values -*/ -var locBlink=false; -var localizationNotFound=[]; -var loc=function(id,params,baseline) -{ - var fallback=false; - var found=locStrings[id]; - if (!found) {found=locStringsFallback[id];fallback=true;} - if (found) - { - var str=''; - str=parseLoc(found,params); - //return str; - if (str.constructor===Array) return str; - if (locBlink && !fallback) return ''+str+'';//will make every localized text blink on screen, making omissions obvious; will not work for elements filled with textContent - } - - //if ((fallback || !found) && localizationNotFound.length<20 && localizationNotFound.indexOf(id)==-1){localizationNotFound.push(id);console.trace('localization string not found: ',id);} - if (found) return str; - return baseline||id; -} - -var parseLoc=function(str,params) -{ - /* - parses localization strings - -there can only be 1 plural per string and it MUST be at index %1 - -a pluralized string is detected if we have at least 1 param and the matching localized string is an array - */ - if (typeof params==='undefined') params=[]; - else if (params.constructor!==Array) params=[params]; - if (!str) return ''; - //if (str.constructor===Array) return str; - //if (typeof str==='function') return str(params); - //str=str.replace(/[\t\n\r]/gm,''); - - if (params.length==0) return str; - - if (str.constructor===Array) - { - if (typeof params[0]==='object')//an object containing a beautified number - { - var plurIndex=locPlur(params[0].n); - plurIndex=Math.min(str.length-1,plurIndex); - str=str[plurIndex]; - str=replaceAll('%1',params[0].b,str); - } - else - { - var plurIndex=locPlur(params[0]); - plurIndex=Math.min(str.length-1,plurIndex); - str=str[plurIndex]; - str=replaceAll('%1',params[0],str); - } - } - - var out=''; - var len=str.length; - var inPercent=false; - for (var i=0;i=parseInt(it)-1) out+=params[parseInt(it)-1]; - else out+='%'+it; - } - else if (it=='%') inPercent=true; - else out+=it; - } - return out; -} - -var LBeautify=function(val,floats) -{ - //returns an object in the form {n:original value floored,b:beautified value as string} for localization purposes - return {n:Math.floor(Math.abs(val)),b:Beautify(val,floats)}; -} - -var ModLanguage=function(id,json){ - if (id=='*') id=locId; - if (id!=locId || !Langs[id]) return false; - if (json['REPLACE ALL']) - { - var rep=function(str,from,to) - { - var regex=new RegExp(from,'ig'); - return str.replace(regex,function(match){ - return (match[0]==match[0].toLowerCase())?to:cap(to); - }); - } - for (var i in json['REPLACE ALL']) - { - var to=json['REPLACE ALL'][i]; - for (var ii in locStrings) - { - if (Array.isArray(locStrings[ii])) - { - for (var iii in locStrings[ii]) - { - locStrings[ii][iii]=rep(locStrings[ii][iii],i,to); - } - } - else locStrings[ii]=rep(locStrings[ii],i,to); - } - } - } - delete json['REPLACE ALL']; - AddLanguage(id,Langs[id].name,json,true); -} - -var AddLanguage=function(id,name,json,mod) -{ - //used in loc files - //if mod is true, this file is augmenting the current language - if (id==locId && !mod) return false;//don't load twice - if (!Langs[id]) return false; - locId=id; - if (Langs[locId].isEN) EN=true; else EN=false; - locName=Langs[id].nameEN;//name - - if (mod) - { - for (var i in json) - { - locStrings[i]=json[i]; - } - for (var i in locStrings) - { - var bit=i.split(']'); - if (bit[1] && bit[0].indexOf('[COMMENT:')!=0 && !locStringsByPart[bit[0].substring(1)]) locStringsByPart[bit[0].substring(1)]=i; - } - console.log('Augmented language "'+locName+'".'); - } - else - { - locStrings=json; - locPlur=json['']['plural-forms']||locPlurFallback; - delete locStrings['']; - for (var i in locStrings) - { - if (locStrings[i]=='/') locStrings[i]=i; - } - - locPlur=(function(plural_form){ - //lifted and modified from gettext.js - var pf_re=new RegExp('^\\s*nplurals\\s*=\\s*[0-9]+\\s*;\\s*plural\\s*=\\s*(?:\\s|[-\\?\\|&=!<>+*/%:;n0-9_\(\)])+'); - if (!pf_re.test(plural_form)) - throw new Error('The plural form "'+plural_form+'" is not valid'); - return new Function('n','var plural, nplurals; '+ plural_form +' return plural;'); - //return new Function('n','var plural, nplurals; '+ plural_form +' return { nplurals: nplurals, plural: (plural === true ? 1 : (plural ? plural : 0)) };'); - })(locPlur); - - locPatches=[]; - for (var i in locStrings){ - if (i.split('|')[0]=='Update notes') - { - var patch=i.split('|'); - var patchTranslated=locStrings[i].split('|'); - locPatches.push({id:parseInt(patch[1]),type:1,title:patchTranslated[2],points:patchTranslated.slice(3)}) - } - } - var sortMap=function(a,b) - { - if (a.id.*/,'');//strip quote section - it.ddesc=BeautifyInText(it.baseDesc); - - found=FindLocStringByPart(type+' desc '+it.id); - if (found) it.ddesc=loc(found); - found=FindLocStringByPart(type+' quote '+it.id); - if (found) it.ddesc+=''+loc(found)+''; - } - BeautifyAll(); -} -var getUpgradeName=function(name) -{ - var it=Game.Upgrades[name]; - var found=FindLocStringByPart('Upgrade name '+it.id); - if (found) return loc(found); else return name; -} -var getAchievementName=function(name) -{ - var it=Game.Achievements[name]; - var found=FindLocStringByPart('Achievement name '+it.id); - if (found) return loc(found); else return name; -} - - - -//these are faulty, investigate later -//function utf8_to_b64(str){return btoa(str);} -//function b64_to_utf8(str){return atob(str);} - -/*function utf8_to_b64( str ) { - try{return Base64.encode(unescape(encodeURIComponent( str )));} - catch(err) - {return '';} -} - -function b64_to_utf8( str ) { - try{return decodeURIComponent(escape(Base64.decode( str )));} - catch(err) - {return '';} -}*/ - -//phewie! https://stackoverflow.com/questions/30106476/using-javascripts-atob-to-decode-base64-doesnt-properly-decode-utf-8-strings -function utf8_to_b64(str) { - try{return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { - return String.fromCharCode(parseInt(p1, 16)) - }));} - catch(err) - {return '';} -} - -function b64_to_utf8(str) { - try{return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) - }).join(''));} - catch(err) - {return '';} -} - -function CompressBin(arr)//compress a sequence like [0,1,1,0,1,0]... into a number like 54. -{ - var str=''; - var arr2=arr.slice(0); - arr2.unshift(1); - arr2.push(1); - arr2.reverse(); - for (var i in arr2) - { - str+=arr2[i]; - } - str=parseInt(str,2); - return str; -} - -function UncompressBin(num)//uncompress a number like 54 to a sequence like [0,1,1,0,1,0]. -{ - var arr=num.toString(2); - arr=arr.split(''); - arr.reverse(); - arr.shift(); - arr.pop(); - return arr; -} - -function CompressLargeBin(arr)//we have to compress in smaller chunks to avoid getting into scientific notation -{ - var arr2=arr.slice(0); - var thisBit=[]; - var bits=[]; - for (var i in arr2) - { - thisBit.push(arr2[i]); - if (thisBit.length>=50) - { - bits.push(CompressBin(thisBit)); - thisBit=[]; - } - } - if (thisBit.length>0) bits.push(CompressBin(thisBit)); - arr2=bits.join(';'); - return arr2; -} - -function UncompressLargeBin(arr) -{ - var arr2=arr.split(';'); - var bits=[]; - for (var i in arr2) - { - bits.push(UncompressBin(parseInt(arr2[i]))); - } - arr2=[]; - for (var i in bits) - { - for (var ii in bits[i]) arr2.push(bits[i][ii]); - } - return arr2; -} - - -function pack(bytes) { - var chars = []; - var len=bytes.length; - for(var i = 0, n = len; i < n;) { - chars.push(((bytes[i++] & 0xff) << 8) | (bytes[i++] & 0xff)); - } - return String.fromCharCode.apply(null, chars); -} - -function unpack(str) { - var bytes = []; - var len=str.length; - for(var i = 0, n = len; i < n; i++) { - var char = str.charCodeAt(i); - bytes.push(char >>> 8, char & 0xFF); - } - return bytes; -} - -//modified from http://www.smashingmagazine.com/2011/10/19/optimizing-long-lists-of-yesno-values-with-javascript/ -function pack2(/* string */ values) { - var chunks = values.match(/.{1,14}/g), packed = ''; - for (var i=0; i < chunks.length; i++) { - packed += String.fromCharCode(parseInt('1'+chunks[i], 2)); - } - return packed; -} - -function unpack2(/* string */ packed) { - var values = ''; - for (var i=0; i < packed.length; i++) { - values += packed.charCodeAt(i).toString(2).substring(1); - } - return values; -} - -function pack3(values){ - //too many save corruptions, darn it to heck - return values; -} - - -//file save function from https://github.com/eligrey/FileSaver.js -var saveAs=saveAs||function(view){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=new MouseEvent("click");node.dispatchEvent(event)},is_safari=/Version\/[\d\.]+.*Safari/.test(navigator.userAgent),webkit_req_fs=view.webkitRequestFileSystem,req_fs=view.requestFileSystem||webkit_req_fs||view.mozRequestFileSystem,throw_outside=function(ex){(view.setImmediate||view.setTimeout)(function(){throw ex},0)},force_saveable_type="application/octet-stream",fs_min_size=0,arbitrary_revoke_timeout=500,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};if(view.chrome){revoker()}else{setTimeout(revoker,arbitrary_revoke_timeout)}},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},auto_bom=function(blob){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)){return new Blob(["\ufeff",blob],{type:blob.type})}return blob},FileSaver=function(blob,name,no_auto_bom){if(!no_auto_bom){blob=auto_bom(blob)}var filesaver=this,type=blob.type,blob_changed=false,object_url,target_view,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if(target_view&&is_safari&&typeof FileReader!=="undefined"){var reader=new FileReader;reader.onloadend=function(){var base64Data=reader.result;target_view.location.href="data:attachment/file"+base64Data.slice(base64Data.search(/[,;]/));filesaver.readyState=filesaver.DONE;dispatch_all()};reader.readAsDataURL(blob);filesaver.readyState=filesaver.INIT;return}if(blob_changed||!object_url){object_url=get_URL().createObjectURL(blob)}if(target_view){target_view.location.href=object_url}else{var new_tab=view.open(object_url,"_blank");if(new_tab==undefined&&is_safari){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)},abortable=function(func){return function(){if(filesaver.readyState!==filesaver.DONE){return func.apply(this,arguments)}}},create_if_not_found={create:true,exclusive:false},slice;filesaver.readyState=filesaver.INIT;if(!name){name="download"}if(can_use_save_link){object_url=get_URL().createObjectURL(blob);setTimeout(function(){save_link.href=object_url;save_link.download=name;click(save_link);dispatch_all();revoke(object_url);filesaver.readyState=filesaver.DONE});return}if(view.chrome&&type&&type!==force_saveable_type){slice=blob.slice||blob.webkitSlice;blob=slice.call(blob,0,blob.size,force_saveable_type);blob_changed=true}if(webkit_req_fs&&name!=="download"){name+=".download"}if(type===force_saveable_type||webkit_req_fs){target_view=view}if(!req_fs){fs_error();return}fs_min_size+=blob.size;req_fs(view.TEMPORARY,fs_min_size,abortable(function(fs){fs.root.getDirectory("saved",create_if_not_found,abortable(function(dir){var save=function(){dir.getFile(name,create_if_not_found,abortable(function(file){file.createWriter(abortable(function(writer){writer.onwriteend=function(event){target_view.location.href=file.toURL();filesaver.readyState=filesaver.DONE;dispatch(filesaver,"writeend",event);revoke(file)};writer.onerror=function(){var error=writer.error;if(error.code!==error.ABORT_ERR){fs_error()}};"writestart progress write abort".split(" ").forEach(function(event){writer["on"+event]=filesaver["on"+event]});writer.write(blob);filesaver.abort=function(){writer.abort();filesaver.readyState=filesaver.DONE};filesaver.readyState=filesaver.WRITING}),fs_error)}),fs_error)};dir.getFile(name,{create:false},abortable(function(file){file.remove();save()}),abortable(function(ex){if(ex.code===ex.NOT_FOUND_ERR){save()}else{fs_error()}}))}),fs_error)}),fs_error)},FS_proto=FileSaver.prototype,saveAs=function(blob,name,no_auto_bom){return new FileSaver(blob,name,no_auto_bom)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(blob,name,no_auto_bom){if(!no_auto_bom){blob=auto_bom(blob)}return navigator.msSaveOrOpenBlob(blob,name||"download")}}FS_proto.abort=function(){var filesaver=this;filesaver.readyState=filesaver.DONE;dispatch(filesaver,"abort")};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return saveAs})} - - -//seeded random function, courtesy of http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html -(function(a,b,c,d,e,f){function k(a){var b,c=a.length,e=this,f=0,g=e.i=e.j=0,h=e.S=[];for(c||(a=[c++]);d>f;)h[f]=f++;for(f=0;d>f;f++)h[f]=h[g=j&g+a[f%c]+(b=h[f])],h[g]=b;(e.g=function(a){for(var b,c=0,f=e.i,g=e.j,h=e.S;a--;)b=h[f=j&f+1],c=c*d+h[j&(h[f]=h[g=j&g+b])+(h[g]=b)];return e.i=f,e.j=g,c})(d)}function l(a,b){var e,c=[],d=(typeof a)[0];if(b&&"o"==d)for(e in a)try{c.push(l(a[e],b-1))}catch(f){}return c.length?c:"s"==d?a:a+"\0"}function m(a,b){for(var d,c=a+"",e=0;c.length>e;)b[j&e]=j&(d^=19*b[j&e])+c.charCodeAt(e++);return o(b)}function n(c){try{return a.crypto.getRandomValues(c=new Uint8Array(d)),o(c)}catch(e){return[+new Date,a,a.navigator.plugins,a.screen,o(b)]}}function o(a){return String.fromCharCode.apply(0,a)}var g=c.pow(d,e),h=c.pow(2,f),i=2*h,j=d-1;c.seedrandom=function(a,f){var j=[],p=m(l(f?[a,o(b)]:0 in arguments?a:n(),3),j),q=new k(j);return m(o(q.S),b),c.random=function(){for(var a=q.g(e),b=g,c=0;h>a;)a=(a+c)*d,b*=d,c=q.g(1);for(;a>=i;)a/=2,b/=2,c>>>=1;return(a+c)/b},p},m(c.random(),b)})(this,[],Math,256,6,52); - -function bind(scope,fn) -{ - //use : bind(this,function(){this.x++;}) - returns a function where "this" refers to the scoped this - return function() {fn.apply(scope,arguments);}; -} - -var grabProps=function(arr,prop) -{ - if (!arr) return []; - arr2=[]; - for (var i=0;i0) {offX=(offX%iW)-iW;} - if (offY<0) {offY=offY-Math.floor(offY/iH)*iH;} if (offY>0) {offY=(offY%iH)-iH;} - for (var y=offY;y
'; -} - -var Loader=function()//asset-loading system -{ - this.loadingN=0; - this.assetsN=0; - this.assets=[]; - this.assetsLoading=[]; - this.assetsLoaded=[]; - this.domain=''; - this.loaded=0;//callback - this.doneLoading=0; - - this.blank=document.createElement('canvas'); - this.blank.width=8; - this.blank.height=8; - this.blank.alt='blank'; - - this.Load=function(assets) - { - for (var i in assets) - { - this.loadingN++; - this.assetsN++; - if (!this.assetsLoading[assets[i]] && !this.assetsLoaded[assets[i]]) - { - var img=new Image(); - if (assets[i].indexOf('/')!=-1) img.src=assets[i]; - else img.src=this.domain+assets[i]; - img.alt=assets[i]; - img.onload=bind(this,this.onLoad); - this.assets[assets[i]]=img; - this.assetsLoading.push(assets[i]); - } - } - } - this.Replace=function(old,newer) - { - if (!this.assets[old]) this.Load([old]); - var img=new Image(); - if (newer.indexOf('/')!=-1)/*newer.indexOf('http')!=-1 || newer.indexOf('https')!=-1)*/ img.src=newer; - else img.src=this.domain+newer; - img.alt=newer; - img.onload=bind(this,this.onLoad); - this.assets[old]=img; - } - this.onLoadReplace=function() - { - } - this.onLoad=function(e) - { - this.assetsLoaded.push(e.target.alt); - this.assetsLoading.splice(this.assetsLoading.indexOf(e.target.alt),1); - this.loadingN--; - if (this.doneLoading==0 && this.loadingN<=0 && this.loaded!=0) - { - this.doneLoading=1; - this.loaded(); - } - } - this.getProgress=function() - { - return (1-this.loadingN/this.assetsN); - } -} - -var Pic=function(what) -{ - if (Game.Loader.assetsLoaded.indexOf(what)!=-1) return Game.Loader.assets[what]; - else if (Game.Loader.assetsLoading.indexOf(what)==-1) Game.Loader.Load([what]); - return Game.Loader.blank; -} - -var Sounds=[]; -var OldPlaySound=function(url,vol) -{ - var volume=1; - if (vol!==undefined) volume=vol; - if (!Game.volume || volume==0) return 0; - if (!Sounds[url]) {Sounds[url]=new Audio(url);Sounds[url].onloadeddata=function(e){e.target.volume=Math.pow(volume*Game.volume/100,2);}} - else if (Sounds[url].readyState>=2) {Sounds[url].currentTime=0;Sounds[url].volume=Math.pow(volume*Game.volume/100,2);} - Sounds[url].play(); -} -var SoundInsts=[]; -var SoundI=0; -for (var i=0;i<12;i++){SoundInsts[i]=new Audio();} -var pitchSupport=false; -//note : Chrome turns out to not support webkitPreservesPitch despite the specifications claiming otherwise, and Firefox clips some short sounds when changing playbackRate, so i'm turning the feature off completely until browsers get it together -//if (SoundInsts[0].preservesPitch || SoundInsts[0].mozPreservesPitch || SoundInsts[0].webkitPreservesPitch) pitchSupport=true; - -var PlaySound=function(url,vol,pitchVar) -{ - //url : the url of the sound to play (will be cached so it only loads once) - //vol : volume between 0 and 1 (multiplied by game volume setting); defaults to 1 (full volume) - //(DISABLED) pitchVar : pitch variance in browsers that support it (Firefox only at the moment); defaults to 0.05 (which means pitch can be up to -5% or +5% anytime the sound plays) - var volume=1; - var volumeSetting=Game.volume; - if (typeof vol!=='undefined') volume=vol; - if (volume<-5) {volume+=10;volumeSetting=Game.volumeMusic;} - if (!volumeSetting || volume==0) return 0; - if (typeof Sounds[url]==='undefined') - { - //sound isn't loaded, cache it - Sounds[url]=new Audio(url); - Sounds[url].onloadeddata=function(e){PlaySound(url,vol,pitchVar);} - //Sounds[url].load(); - } - else if (Sounds[url].readyState>=2 && SoundInsts[SoundI].paused) - { - var sound=SoundInsts[SoundI]; - SoundI++; - if (SoundI>=12) SoundI=0; - sound.src=Sounds[url].src; - //sound.currentTime=0; - sound.volume=Math.pow(volume*volumeSetting/100,2); - if (pitchSupport) - { - var pitchVar=(typeof pitchVar==='undefined')?0.05:pitchVar; - var rate=1+(Math.random()*2-1)*pitchVar; - sound.preservesPitch=false; - sound.mozPreservesPitch=false; - sound.webkitPreservesPitch=false; - sound.playbackRate=rate; - } - try{sound.play();}catch(e){} - /* - var sound=Sounds[url].cloneNode(); - sound.volume=Math.pow(volume*volumeSetting/100,2); - sound.onended=function(e){if (e.target){delete e.target;}}; - sound.play();*/ - } -} -var PlayMusicSound=function(url,vol,pitchVar) -{ - //like PlaySound but, if music is enabled, play with music volume - PlaySound(url,(vol||1)-(Music?10:0),pitchVar); -} - -Music=false; -PlayCue=function(cue,arg) -{ - if (Music && Game.jukebox.trackAuto) Music.cue(cue,arg); -} - -if (!Date.now){Date.now=function now() {return new Date().getTime();};} - -var triggerAnim=function(element,anim) -{ - if (!element) return; - element.classList.remove(anim); - void element.offsetWidth; - element.classList.add(anim); -}; - -var debugStr=''; -var Debug=function(what) -{ - if (!debugStr) debugStr=what; - else debugStr+='; '+what; -} - -var Timer={}; -Timer.t=Date.now(); -Timer.labels=[]; -Timer.smoothed=[]; -Timer.reset=function() -{ - Timer.labels=[]; - Timer.t=Date.now(); -} -Timer.track=function(label) -{ - if (!Game.sesame) return; - var now=Date.now(); - if (!Timer.smoothed[label]) Timer.smoothed[label]=0; - Timer.smoothed[label]+=((now-Timer.t)-Timer.smoothed[label])*0.1; - Timer.labels[label]='
'+label+' : '+Math.round(Timer.smoothed[label])+'ms
'; - Timer.t=now; -} -Timer.clean=function() -{ - if (!Game.sesame) return; - var now=Date.now(); - Timer.t=now; -} -Timer.say=function(label) -{ - if (!Game.sesame) return; - Timer.labels[label]='
'+label+'
'; -} - - -/*===================================================================================== -GAME INITIALIZATION -=======================================================================================*/ -var Game={}; - -(function(){ - /*===================================================================================== - MODDING API - =======================================================================================*/ - /* - to use: - -(NOTE: this functions a little differently in the standalone/Steam version; have a look in the game's /mods folder for example mods - though most of the information below still applies) - -have your mod call Game.registerMod("unique id",mod object) - -the "unique id" value is a string the mod will use to index and retrieve its save data; special characters are ignored - -the "mod object" value is an object structured like so: - { - init:function(){ - //this function is called as soon as the mod is registered - //declare hooks here - }, - save:function(){ - //use this to store persistent data associated with your mod - return 'a string to be saved'; - }, - load:function(str){ - //do stuff with the string data you saved previously - }, - } - -the mod object may also contain any other data or functions you want, for instance to make them accessible to other mods - -your mod and its data can be accessed with Game.mods['mod id'] - -hooks are functions the game calls automatically in certain circumstances, like when calculating cookies per click or when redrawing the screen - -to add a hook: Game.registerHook('hook id',yourFunctionHere) - note: you can also declare whole arrays of hooks, ie. Game.registerHook('hook id',[function1,function2,...]) - -to remove a hook: Game.removeHook('hook id',theSameFunctionHere) - -some hooks are fed a parameter you can use in the function - -list of valid hook ids: - 'logic' - called every logic tick - 'draw' - called every draw tick - 'reset' - called whenever the player resets; parameter is true if this is a hard reset, false if it's an ascension - 'reincarnate' - called when the player has reincarnated after an ascension - 'ticker' - called when determining news ticker text; should return an array of possible choices to add - 'cps' - called when determining the CpS; parameter is the current CpS; should return the modified CpS - 'cookiesPerClick' - called when determining the cookies per click; parameter is the current value; should return the modified value - 'click' - called when the big cookie is clicked - 'create' - called after the game declares all buildings, buffs, upgrades and achievs; use this to declare your own - note that while the game distinguishes between vanilla and non-vanilla content, saving/loading functionality for custom content (including stuff like active buffs or permanent upgrade slotting) is not explicitly implemented and may be unpredictable and broken - 'check' - called every few seconds when we check for upgrade/achiev unlock conditions; you can also use this for other checks that you don't need happening every logic frame - -function hooks are provided for convenience and more advanced mod functionality will probably involve manual code injection - -please be mindful of the length of the data you save, as it does inflate the export-save-to-string feature - - NOTE: modding API is susceptible to change and may not always function super-well - */ - Game.mods={}; - Game.sortedMods=[]; - Game.brokenMods=[]; - Game.modSaveData={}; - Game.modHooks={}; - Game.modHooksNames=['logic','draw','reset','reincarnate','ticker','cps','cookiesPerClick','click','create','check']; - for (var i=0;i0) - { - Game.Notify(''+loc("Some mods couldn't be loaded:")+'','['+Game.brokenMods.join(', ')+']',[32,17]); - } - for (var i=0;i0) Game.Win('Third-party'); - } - Game.registerHook=function(hook,func) - { - if (func.constructor===Array) - { - for (var i=0;i'; - if (Game.mods[i]) str+=' '+loc("(loaded)"); - str+=''; - str+='
'+loc("%1 char",Game.modSaveData[i].length)+' X'; - str+='
'; - str+=''; - modsN++; - } - if (modsN==0) str+=loc("No mod data present."); - else str+='
'+loc("Delete all")+'
'; - Game.Prompt('

'+loc("Mod data")+'

'+tinyIcon([16,5])+'
'+loc("These are the mods present in your save data. You may delete some of this data to make your save file smaller.")+'
'+str+'
',[loc("Back")]); - } - - Game.LoadMod=LoadScript;//loads the mod at the given URL - - if (false) - { - //EXAMPLE MOD - Game.registerMod('test mod',{ - /* - what this example mod does: - -double your CpS - -display a little popup for half a second whenever you click the big cookie - -add a little intro text above your bakery name, and generate that intro text at random if you don't already have one - -save and load your intro text - */ - init:function(){ - Game.registerHook('reincarnate',function(){Game.mods['test mod'].addIntro();}); - Game.registerHook('check',function(){if (!Game.playerIntro){Game.mods['test mod'].addIntro();}}); - Game.registerHook('click',function(){Game.Notify(choose(['A good click.','A solid click.','A mediocre click.','An excellent click!']),'',0,0.5);}); - Game.registerHook('cps',function(cps){return cps*2;}); - }, - save:function(){ - //note: we use stringified JSON for ease and clarity but you could store any type of string - return JSON.stringify({text:Game.playerIntro}) - }, - load:function(str){ - var data=JSON.parse(str); - if (data.text) Game.mods['test mod'].addIntro(data.text); - }, - addIntro:function(text){ - //note: this is not a mod hook, just a function that's part of the mod - Game.playerIntro=text||choose(['oh snap, it\'s','watch out, it\'s','oh no! here comes','hide your cookies, for here comes','behold! it\'s']); - if (!l('bakerySubtitle')) l('bakeryName').insertAdjacentHTML('afterend','
'); - l('bakerySubtitle').textContent='~'+Game.playerIntro+'~'; - }, - }); - } - - //replacing an existing canvas picture with a new one at runtime : Game.Loader.Replace('perfectCookie.png','imperfectCookie.png'); - //upgrades and achievements can use other pictures than icons.png; declare their icon with [posX,posY,'http://example.com/myIcons.png'] - //check out the "UNLOCKING STUFF" section to see how unlocking achievs and upgrades is done -})(); - -Game.version=VERSION; -Game.loadedFromVersion=VERSION; -Game.beta=BETA; -if (!App && window.location.href.indexOf('/beta')>-1) Game.beta=1; -else if (App && new URL(window.location.href).searchParams.get('beta')) Game.beta=1; -Game.https=!App?((location.protocol!='https:')?false:true):true; -Game.SaveTo='CookieClickerGame'; -if (Game.beta) Game.SaveTo='CookieClickerGameBeta'; -if (App && new URL(window.location.href).searchParams.get('modless')) Game.modless=1; - -Game.Launch=function() -{ - Game.mobile=0; - Game.touchEvents=0; - //if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) Game.mobile=1; - //if (Game.mobile) Game.touchEvents=1; - //if ('ontouchstart' in document.documentElement) Game.touchEvents=1; - - - var css=document.createElement('style'); - css.type='text/css'; - css.innerHTML='body .icon,body .crate,body .usesIcon{background-image:url(img/icons.png?v='+Game.version+');}'; - document.head.appendChild(css); - - //this is so shimmers can still appear even if you lose connection after the game is loaded - var preloadImages=['img/goldCookie.png','img/wrathCookie.png','img/spookyCookie.png','img/hearts.png','img/contract.png','img/wrathContract.png','img/bunnies.png','img/frostedReindeer.png']; - var preloadImagesL=l('preloadImages'); - for (var i=0;i=41 && day<=46) Game.baseSeason='valentines'; - else if (day+leap>=90 && day<=92+leap) Game.baseSeason='fools'; - else if (day>=304-7+leap && day<=304+leap) Game.baseSeason='halloween'; - else if (day>=349+leap && day<=365+leap) Game.baseSeason='christmas'; - else - { - //easter is a pain goddamn - var easterDay=function(Y){var C = Math.floor(Y/100);var N = Y - 19*Math.floor(Y/19);var K = Math.floor((C - 17)/25);var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;I = I - 30*Math.floor((I/30));I = I - Math.floor(I/28)*(1 - Math.floor(I/28)*Math.floor(29/(I + 1))*Math.floor((21 - N)/11));var J = Y + Math.floor(Y/4) + I + 2 - C + Math.floor(C/4);J = J - 7*Math.floor(J/7);var L = I - J;var M = 3 + Math.floor((L + 40)/44);var D = L + 28 - 31*Math.floor(M/4);return new Date(Y,M-1,D);}(year); - easterDay=Math.floor((easterDay-new Date(easterDay.getFullYear(),0,0))/(1000*60*60*24)); - if (day>=easterDay-7 && day<=easterDay) Game.baseSeason='easter'; - } - - Game.updateLog= - '
'+ - '
'+loc("Info")+'
'+ - '
'+ - '
'+loc("About")+'
'+ - (App?'
'+loc("Note: links will open in your web browser.")+'
':'')+ - '
'+loc("Cookie Clicker is a javascript game by %1 and %2.",['Orteil','Opti'])+'
'+ - (App?'
'+loc("Music by %1.",'C418')+'
':'')+ - //'
We have an official Discord, as well as a forum; '+ - '
'+(EN? - 'We have an official Discord; if you\'re looking for help, you may also want to visit the subreddit or the wiki.
News and teasers are usually posted on Orteil\'s tumblr and twitter.' - : - loc("Useful links: %1, %2, %3, %4.",[ - 'Discord', - 'wiki', - 'tumblr', - 'twitter', - ])) - +'
'+ - (!App?'
'+loc( - "This version of Cookie Clicker is 100% free, forever. Want to support us so we can keep developing games? Here's some ways you can help:%1", - [(!App?'

• '+(EN?'get ':'')+'Cookie Clicker on Steam':'')+''+(EN?' (it\'s about 5 bucks)':'')+'

• '+(EN?'support us on ':'')+'Patreon'+(EN?' (there\'s perks!)':'')+'

• '+(EN?'check out our ':'')+'Shop'+(EN?' with rad cookie shirts, hoodies and stickers':'')+((!App && EN)?'

• disable your adblocker (if you want!)':'')] - )+ - '
':'')+ - '
'+loc("Note: if you find a new bug after an update and you're using a 3rd-party add-on, make sure it's not just your add-on causing it!")+'
'+ - (!App?('
'+loc("Warning: clearing your browser cache or cookies (what else?) will result in your save being wiped. Export your save and back it up first!")+'
'):'')+ - - '
'+ - '
'+loc("Version history")+'
'; - - for (var i=0;i
'+ - '
'+patch.title+'
'; - for (var ii=0;ii'; - } - Game.updateLog+=patchText; - } - - if (!EN) Game.updateLog+='
'+loc("Note: older update notes are in English.")+'
'; - - Game.updateLog+= - - '
'+ - '
31/05/2022 - a mind of its own
'+ - '
• added a new building
'+ - '
• added a new tier of upgrades and achievements
'+ - '
• multi-language support added to web version
'+ - '
• added a few new heavenly upgrades
'+ - '
• added the jukebox
'+ - '
• the 3 secret heavenly upgrades now rely on how many times the relevant digit is present in total, rather than at the end
'+ - '
• backgrounds overhauled; extra options for the background selector
'+ - '
• extra options for the golden cookie sound selector
'+ - '
• the bank minigame now tells you the value you previously bought a stock at
'+ - '
• the bank minigame flow is a little more exciting
'+ - (App?'
• new option to disable your game activity showing up in Discord
':'')+ - (App?'
• launch errors now provide the option to restart without mods
':'')+ - - (App?('
'+ - '
18/12/2021 - work it
'+ - '
• added Steam Workshop support (lets you install mods and upload your own)
'+ - '
• added Korean language support
'+ - '
• added back "short numbers" option for non-english languages (uses english terms for the time being)
'+ - '
• added tooltips on achievement notifications
'+ - '
• added Discord rich presence support
'):'')+ - - '
'+ - '
01/09/2021 - give me Steam
'+ - '
• Cookie Clicker has been released on Steam with music by C418!
'+ - '
• web version and Steam version will receive the same updates from now on
'+ - '
• you can now play in 13 different languages
'+ - '
• new option to disable scary stuff
'+ - '
• basic screen-reader support
'+ - '
• various other improvements
'+ - - '
'+ - '
01/11/2020 - alternate reality
'+ - '
• new building
'+ - '
• new upgrade tier
'+ - '
• new achievement tier
'+ - '
• new heavenly upgrades
'+ - '
• new modding API
'+ - '
• new rebalancing (ascension slot prices, finger upgrades...)
'+ - '
• new fixes (leap years, ghost swaps, carryover seeds...)
'+ - '
• new stuff
'+ - - '
'+ - '
23/08/2020 - money me, money now
'+ - '
• finalized stock market minigame beta and added it to live version
'+ - '
• dark mode added to stock market minigame
'+ - '
• can no longer select a milk before unlocking it; milk selector layout has been improved
'+ - '
• stock market goods have higher value caps and a larger spread; can also shift-click the hide buttons to hide/show all other stocks
'+ - - '
'+ - '
08/08/2020 - checking account (beta)
'+ - '
• stock market layout has been revised
'+ - '
• selling stocks no longer increases cookies baked all time
'+ - '
• stock prices are now defined by your highest raw CpS this ascension (which is now displayed in the stats screen)
'+ - '
• can no longer buy and sell a stock in the same tick
'+ - '
• warehouse space now gains +10 per associated building level (up from +5)
'+ - '
• bank level now improves average (and maximum) stock values
'+ - '
• later stocks are worth more
'+ - '
• Cookie Clicker turns 7!
'+ - - '
'+ - '
18/06/2020 - making bank (beta)
'+ - '
• added the stock market minigame, accessible with level 1 banks or above; buy low, sell high!
'+ - '
• (minigame subject to heavy rebalancing over the coming patches)
'+ - '
• added a couple heavenly upgrades, including one that lets you pet your dragon
'+ - '
• added a new tier of building upgrades and achievements
'+ - '
• reindeer clicks now properly count for shimmering veil
'+ - '
• numbers in scientific notation should display better with Short numbers off
'+ - '
• replaced ツ in the javascript console building display with more accurate ッ
'+ - - '
'+ - '
28/09/2019 - going off-script
'+ - '
• added a new building
'+ - '
• added fortune cookies (a new heavenly upgrade)
'+ - '
• more upgrades, achievements etc
'+ - '
• updated the Russian bread cookies icon to better reflect their cyrillic origins
'+ - '
stealth update : the sugar lump refill timeout (not sugar lump growth) now no longer ticks down while the game is closed (this fixes an exploit)
'+ - '
• also released the official Android version of Cookie Clicker, playable here (iOS version will come later)
'+ - - '
'+ - '
01/04/2019 - 2.019 (the "this year" update)
'+ - '
• game has been renamed to "Cookie Clicker" to avoid confusion
'+ - '
• can now click the big cookie to generate cookies for free
'+ - '
• removed fall damage
'+ - //'
• fixed various typos : player\'s name is now correctly spelled as "[bakeryName]"
'+ - '
• removed all references to computer-animated movie Hoodwinked! (2005)
'+ - '
• went back in time and invented cookies and computer mice, ensuring Cookie Clicker would one day come to exist
'+ - '
• game now fully compliant with Geneva Conventions
'+ - '
• dropped support for TI-84 version
'+ - '
• released a low-res retro version of the game, playable here : orteil.dashnet.org/experiments/cookie
'+ - '
• updated version number
'+ - - '
'+ - '
05/03/2019 - cookies for days
'+ - '
• added over 20 new cookies, all previously suggested by our supporters on Patreon
'+ - '
• added 2 heavenly upgrades
'+ - '
• the Golden goose egg now counts as a golden cookie upgrade for Residual luck purposes
'+ - '
• golden sugar lumps now either double your cookies, or give you 24 hours of your CpS, whichever is lowest (previously was doubling cookies with no cap)
'+ - '
• the amount of heralds is now saved with your game, and is used to compute offline CpS the next time the game is loaded; previously, on page load, the offline calculation assumed heralds to be 0
'+ - '
• added a system to counteract the game freezing up (and not baking cookies) after being inactive for a long while on slower computers; instead, this will now trigger sleep mode, during which you still produce cookies as if the game was closed; to enable this feature, use the "Sleep mode timeout" option in the settings
'+ - '
• vaulting upgrades is now done with shift-click, as ctrl-click was posing issues for Mac browsers
'+ - '
• made tooltips for building CpS boosts from synergies hopefully clearer
'+ - '
• fixed an exploit with gambler\'s fever dream working across exports and ascensions
'+ - '
• can now hide tooltips in the garden by keeping the shift key pressed to make it easier to see where you\'re planting
'+ - '
• fixed a bug with golden cookies/reindeer not disappearing properly in some circumstances
'+ - '
• the Dragon\'s Curve aura should now properly make sugar lumps twice as weird
'+ - '
• the ctrl key should less often register incorrectly as pressed
'+ - '
• added a new ad slot in the top-right, as while our playerbase is strong and supportive as ever, our ad revenue sometimes fluctuates badly; we may remove the ad again should our income stabilize
'+ - '
• made a few adjustments to make the game somewhat playable in mobile browsers; it\'s not perfect and can get buggy, but it\'s functional! (you may need to zoom out or scroll around to view the game properly)
'+ - '
• speaking of which, we also got some good progress on the mobile app version (built from scratch for mobile), so stay tuned!
'+ - - '
'+ - '
25/10/2018 - feedback loop
'+ - '
• added a new building
'+ - '
• launched our Patreon (the link is orange so you\'ll notice it!)
'+ - '
• added a bunch of new heavenly upgrades, one of which ties into our Patreon but benefits everyone (this is still experimental!)
'+ - '
• when hovering over grandmas, you can now see their names and ages
'+ - '
• "make X cookies just from Y" requirements are now higher
'+ - '
• tweaked the prices of some heavenly upgrades to better fit the current cookie economy (it turns out billions of heavenly chips is now very achievable)
'+ - '
• building tooltips now display what % of CpS they contribute through synergy upgrades
'+ - '
• queenbeets now give up to 4% of bank, down from 6%
'+ - '
• among other things, season switches now display how many seasonal upgrades you\'re missing, and permanent upgrade slots now display the name of the slotted upgrade
'+ - '
• season switches have reworked prices
'+ - '
• season switches can now be cancelled by clicking them again
'+ - '
• can no longer accidentally click wrinklers through other elements
'+ - '
• sugar frenzy now triples your CpS for an hour instead of doubling it
'+ - '
• this text is now selectable
'+ - '
• progress on dungeons minigame is still very much ongoing
'+ - - '
'+ - '
08/08/2018 - hey now
'+ - '
• Cookie Clicker somehow turns 5, going against doctors\' most optimistic estimates
'+ - '
• added a new tier of building achievements, all named after Smash Mouth\'s classic 1999 hit "All Star"
'+ - '
• added a new tier of building upgrades, all named after nothing in particular
'+ - '
to our players : thank you so much for sticking with us all those years and allowing us to keep making the dumbest game known to mankind
'+ - '
• resumed work on the dungeons minigame
'+ - - '
'+ - '
01/08/2018 - buy buy buy
'+ - '
• added a heavenly upgrade that lets you buy all your upgrades instantly
'+ - '
• added a heavenly upgrade that lets you see upgrade tiers (feature was previously removed due to being confusing)
'+ - '
• added a new wrinkler-related heavenly upgrade
'+ - '
• added a new upgrade tier
'+ - '
• added a couple new cookies and achievements
'+ - '
• new "extra buttons" setting; turning it on adds buttons that let you minimize buildings
'+ - '
• new "lump confirmation" setting; turning it on will show a confirmation prompt when you spend sugar lumps
'+ - '
• buildings now sell back for 25% of their current price (down from 50%); Earth Shatterer modified accordingly, now gives back 50% (down from 85%)
'+ - '
• farm soils now unlock correctly based on current amount of farms
'+ - '
• cheapcaps have a new exciting nerf
'+ - '
• wrinklegill spawns a bunch more
'+ - '
• can now ctrl-shift-click on "Harvest all" to only harvest mature, non-immortal plants
'+ - '
• added a new rare type of sugar lump
'+ - - '
'+ - '
20/04/2018 - weeding out some bugs
'+ - '
• golden clovers and wrinklegills should spawn a bit more often
'+ - '
• cronerice matures a lot sooner
'+ - '
• mature elderworts stay mature after reloading
'+ - '
• garden interface occupies space more intelligently
'+ - '
• seed price displays should be better behaved with short numbers disabled
'+ - '
• minigame animations are now turned off if using the "Fancy graphics" option is disabled
'+ - '
• CpS achievement requirements were dialed down a wee tad
'+ - - '
'+ - '
19/04/2018 - garden patch
'+ - '
• upgrades dropped by garden plants now stay unlocked forever (but drop much more rarely)
'+ - '
• garden sugar lump refill now also makes plants spread and mutate 3 times more during the bonus tick
'+ - '
• a few new upgrades
'+ - '
• a couple bug fixes and rephrasings
'+ - - '
'+ - '
18/04/2018 - your garden-variety update
'+ - '
• added the garden, a minigame unlocked by having at least level 1 farms
'+ - '
• added a little arrow and a blinky label to signal the game has updated since you last played it (hi!)
'+ - '
• new cookies, milk flavors and achievements
'+ - '
• sugar lumps are now unlocked whenever you\'ve baked at least a billion cookies, instead of on your first ascension
'+ - '
• sugar lump type now saves correctly
'+ - '
• minigame sugar lump refills can now only be done every 15 minutes (timer shared across all minigames)
'+ - '
• CpS achievements now have steeper requirements
'+ - '
• golden cookies now last 5% shorter for every other golden cookie on the screen
'+ - '
• the game now remembers which minigames are closed or open
'+ - '
• added a popup that shows when a season starts (so people won\'t be so confused about "the game looking weird today")
'+ - '
• permanent upgrade slots now show a tooltip for the selected upgrade
'+ - '
• finally fixed the save corruption bug, hopefully
'+ - - '
'+ - '
24/02/2018 - sugar coating
'+ - '
• added link to official Discord server
'+ - '
• felt weird about pushing an update without content so :
'+ - '
• added a handful of new cookies
'+ - '
• added 3 new heavenly upgrades
'+ - '
• short numbers should now be displayed up to novemnonagintillions
'+ - '
• cookie chains no longer spawn from the Force the Hand of Fate spell
'+ - '
• bigger, better Cookie Clicker content coming later this year
'+ - - '
'+ - '
08/08/2017 - 4 more years
'+ - '
• new building : Chancemakers
'+ - '
• new milk, new kittens, new dragon aura, new cookie, new upgrade tier
'+ - '
• buffs no longer affect offline CpS
'+ - '
• Godzamok\'s hunger was made less potent (this is a nerf, very sorry)
'+ - '
• grimoire spell costs and maximum magic work differently
'+ - '
• Spontaneous Edifice has been reworked
'+ - '
• changed unlock levels and prices for some cursor upgrades
'+ - '
• fixed buggy pantheon slots, hopefully
'+ - '
• fixed "Legacy started a long while ago" showing as "a few seconds ago"
'+ - '
• Cookie Clicker just turned 4. Thank you for sticking with us this long!
'+ - - '
'+ - '
15/07/2017 - the spiritual update
'+ - '
• implemented sugar lumps, which start coalescing if you\'ve ascended at least once and can be used as currency for special things
'+ - '
• buildings can now level up by using sugar lumps in the main buildings display, permanently boosting their CpS
'+ - '
• added two new features unlocked by levelling up their associated buildings, Temples and Wizard towers; more building-related minigames will be implemented in the future
'+ - '
• active buffs are now saved
'+ - '
• the background selector upgrade is now functional
'+ - '
• the top menu no longer scrolls with the rest
'+ - '
• timespans are written nicer
'+ - '
• Dragonflights now tend to supercede Click frenzies, you will rarely have both at the same time
'+ - '
• some old bugs were phased out and replaced by new ones
'+ - - '
'+ - '
24/07/2016 - golden cookies overhaul
'+ - '
• golden cookies and reindeer now follow a new system involving explicitly defined buffs
'+ - '
• a bunch of new golden cookie effects have been added
'+ - '
• CpS gains from eggs are now multiplicative
'+ - '
• shiny wrinklers are now saved
'+ - '
• reindeer have been rebalanced ever so slightly
'+ - '
• added a new cookie upgrade near the root of the heavenly upgrade tree; this is intended to boost early ascensions and speed up the game as a whole
'+ - '
• due to EU legislation, implemented a warning message regarding browser cookies; do understand that the irony is not lost on us
'+ - - '
'+ - '
08/02/2016 - legacy
'+ - '
Everything that was implemented during the almost 2-year-long beta has been added to the live game. To recap :
'+ - '
• 3 new buildings : banks, temples, and wizard towers; these have been added in-between existing buildings and as such, may disrupt some building-related achievements
'+ - '
• the ascension system has been redone from scratch, with a new heavenly upgrade tree
'+ - '
• mysterious new features such as angel-powered offline progression, challenge runs, and a cookie dragon
'+ - '
• sounds have been added (can be disabled in the options)
'+ - '
• heaps of rebalancing and bug fixes
'+ - '
• a couple more upgrades and achievements, probably
'+ - '
• fresh new options to further customize your cookie-clicking experience
'+ - '
• quality-of-life improvements : better bulk-buy, better switches etc
'+ - '
• added some general polish
'+/* i liked this dumb pun too much to let it go unnoticed */ - '
• tons of other little things we can\'t even remember right now
'+ - '
Miss the old version? Your old save was automatically exported here!
'+ - - '
'+ - '
05/02/2016 - legacy beta, more fixes
'+ - '
• added challenge modes, which can be selected when ascending (only 1 for now : "Born again")
'+ - '
• changed the way bulk-buying and bulk-selling works
'+ - '
• more bugs ironed out
'+ - - '
'+ - '
03/02/2016 - legacy beta, part III
'+ - '
• Not all bugs have been fixed, but everything should be much less broken.
'+ - '
• Additions'+ - '
'+ - '-a few more achievements
'+ - '-new option for neat, but slow CSS effects (disabled by default)
'+ - '-new option for a less grating cookie sound (enabled by default)
'+ - '-new option to bring back the boxes around icons in the stats screen
'+ - '-new buttons for saving and loading your game to a text file
'+ - '
'+ - '
'+ - '
• Changes'+ - '
'+ - '-early game should be a bit faster and very late game was kindly asked to tone it down a tad
'+ - '-dragonflight should be somewhat less ridiculously overpowered
'+ - '-please let me know if the rebalancing was too heavy or not heavy enough
'+ - '-santa and easter upgrades now depend on Santa level and amount of eggs owned, respectively, instead of costing several minutes worth of CpS
'+ - '-cookie upgrades now stack multiplicatively rather than additively
'+ - '-golden switch now gives +50% CpS, and residual luck is +10% CpS per golden cookie upgrade (up from +25% and +1%, respectively)
'+ - '-lucky cookies and cookie chain payouts have been modified a bit, possibly for the better, who knows!
'+ - '-wrinklers had previously been reduced to a maximum of 8 (10 with a heavenly upgrade), but are now back to 10 (12 with the upgrade)
'+ - /*'-all animations are now handled by requestAnimationFrame(), which should hopefully help make the game less resource-intensive
'+*/ - '-an ascension now only counts for achievement purposes if you earned at least 1 prestige level from it
'+ - '-the emblematic Cookie Clicker font (Kavoon) was bugged in Firefox, and has been replaced with a new font (Merriweather)
'+ - '-the mysterious wrinkly creature is now even rarer, but has a shadow achievement tied to it
'+ - '
'+ - '
'+ - '
• Fixes'+ - '
'+ - '-prestige now grants +1% CpS per level as intended, instead of +100%
'+ - '-heavenly chips should no longer add up like crazy when you ascend
'+ - '-upgrades in the store should no longer randomly go unsorted
'+ - '-window can be resized to any size again
'+ - '-the "Stats" and "Options" buttons have been swapped again
'+ - '-the golden cookie sound should be somewhat clearer
'+ - '-the ascend screen should be less CPU-hungry
'+ - '
'+ - '
'+ - - '
'+ - '
20/12/2015 - legacy beta, part II
'+ - '
• existing beta saves have been wiped due to format inconsistencies and just plain broken balance; you\'ll have to start over from scratch - which will allow you to fully experience the update and find all the awful little bugs that no doubt plague it
'+ - '
• importing your save from the live version is also fine
'+ - '
• we took so long to make this update, Cookie Clicker turned 2 years old in the meantime! Hurray!
'+ - '
• heaps of new upgrades and achievements
'+ - '
• fixed a whole bunch of bugs
'+ - '
• did a lot of rebalancing
'+ - '
• reworked heavenly chips and heavenly cookies (still experimenting, will probably rebalance things further)
'+ - '
• you may now unlock a dragon friend
'+ - '
• switches and season triggers now have their own store section
'+ - '
• ctrl-s and ctrl-o now save the game and open the import menu, respectively
'+ - '
• added some quick sounds, just as a test
'+ - '
• a couple more options
'+ - '
• even more miscellaneous changes and additions
'+ - - '
'+ - '
25/08/2014 - legacy beta, part I
'+ - '
• 3 new buildings
'+ - '
• price and CpS curves revamped
'+ - '
• CpS calculations revamped; cookie upgrades now stack multiplicatively
'+ - '
• prestige system redone from scratch, with a whole new upgrade tree
'+ - '
• added some general polish
'+ - '
• tons of other miscellaneous fixes and additions
'+ - '
• Cookie Clicker is now 1 year old! (Thank you guys for all the support!)
'+ - '
• Note : this is a beta; you are likely to encounter bugs and oversights. Feel free to send me feedback if you find something fishy!
'+ - - '
'+ - '
18/05/2014 - better late than easter
'+ - '
• bunnies and eggs, somehow
'+ - '
• prompts now have keyboard shortcuts like system prompts would
'+ - '
• naming your bakery? you betcha
'+ - '
• "Fast notes" option to make all notifications close faster; new button to close all notifications
'+ - '
• the dungeons beta is now available on /betadungeons
'+ - - '
'+ - '
09/04/2014 - nightmare in heaven
'+ - '
• broke a thing; heavenly chips were corrupted for some people
'+ - '
• will probably update to /beta first in the future
'+ - '
• sorry again
'+ - - '
'+ - '
09/04/2014 - quality of life
'+ - '
• new upgrade and achievement tier
'+ - '
• popups and prompts are much nicer
'+ - '
• tooltips on buildings are more informative
'+ - '
• implemented a simplified version of the Frozen Cookies add-on\'s short number formatting
'+ - '
• you can now buy 10 and sell all of a building at a time
'+ - '
• tons of optimizations and subtler changes
'+ - ''+ - - '
'+ - '
05/04/2014 - pity the fool
'+ - '
• wrinklers should now be saved so you don\'t have to pop them every time you refresh the game
'+ - '
• you now properly win 1 cookie upon reaching 10 billion cookies and making it on the local news
'+ - '
• miscellaneous fixes and tiny additions
'+ - '
• added a few very rudimentary mod hooks
'+ - '
• the game should work again in Opera
'+ - '
• don\'t forget to check out RandomGen, our all-purpose random generator maker!
'+ - - '
'+ - '
01/04/2014 - fooling around
'+ - '
• it\'s about time : Cookie Clicker has turned into the much more realistic Cookie Baker
'+ - '
• season triggers are cheaper and properly unlock again when they run out
'+ - '
• buildings should properly unlock (reminder : building unlocking is completely cosmetic and does not change the gameplay)
'+ - - '
'+ - '
14/02/2014 - lovely rainbowcalypse
'+ - '
• new building (it\'s been a while). More to come!
'+ - '
• you can now trigger seasonal events to your heart\'s content (upgrade unlocks at 5000 heavenly chips)
'+ - '
• new ultra-expensive batch of seasonal cookie upgrades you\'ll love to hate
'+ - '
• new timer bars for golden cookie buffs
'+ - '
• buildings are now hidden when you start out and appear as they become available
'+ - '
• technical stuff : the game is now saved through localstorage instead of browser cookies, therefore ruining a perfectly good pun
'+ - - '
'+ - '
22/12/2013 - merry fixmas
'+ - '
• some issues with the christmas upgrades have been fixed
'+ - '
• reindeer cookie drops are now more common
'+ - '
• reindeers are now reindeer
'+ - - '
'+ - '
20/12/2013 - Christmas is here
'+ - '
• there is now a festive new evolving upgrade in store
'+ - '
• reindeer are running amok (catch them if you can!)
'+ - '
• added a new option to warn you when you close the window, so you don\'t lose your un-popped wrinklers
'+ - '
• also added a separate option for displaying cursors
'+ - '
• all the Halloween features are still there (and having the Spooky cookies achievements makes the Halloween cookies drop much more often)
'+ - '
• oh yeah, we now have Cookie Clicker shirts, stickers and hoodies! (they\'re really rad)
'+ - - '
'+ - '
29/10/2013 - spooky update
'+ - '
• the Grandmapocalypse now spawns wrinklers, hideous elderly creatures that damage your CpS when they reach your big cookie. Thankfully, you can click on them to make them explode (you\'ll even gain back the cookies they\'ve swallowed - with interest!).
'+ - '
• wrath cookie now 27% spookier
'+ - '
• some other stuff
'+ - '
• you should totally go check out Candy Box 2, the sequel to the game that inspired Cookie Clicker
'+ - - '
'+ - '
15/10/2013 - it\'s a secret
'+ - '
• added a new heavenly upgrade that gives you 5% of your heavenly chips power for 11 cookies (if you purchased the Heavenly key, you might need to buy it again, sorry)
'+ - '
• golden cookie chains should now work properly
'+ - - '
'+ - '
15/10/2013 - player-friendly
'+ - '
• heavenly upgrades are now way, way cheaper
'+ - '
• tier 5 building upgrades are 5 times cheaper
'+ - '
• cursors now just plain disappear with Fancy Graphics off, I might add a proper option to toggle only the cursors later
'+ - '
• warning : the Cookie Monster add-on seems to be buggy with this update, you might want to wait until its programmer updates it
'+ - - '
'+ - '
15/10/2013 - a couple fixes
'+ - '
• golden cookies should no longer spawn embarrassingly often
'+ - '
• cursors now stop moving if Fancy Graphics is turned off
'+ - - '
'+ - '
14/10/2013 - going for the gold
'+ - '
• golden cookie chains work a bit differently
'+ - '
• golden cookie spawns are more random
'+ - '
• CpS achievements are no longer affected by golden cookie frenzies
'+ - '
• revised cookie-baking achievement requirements
'+ - '
• heavenly chips now require upgrades to function at full capacity
'+ - '
• added 4 more cookie upgrades, unlocked after reaching certain amounts of Heavenly Chips
'+ - '
• speed baking achievements now require you to have no heavenly upgrades; as such, they have been reset for everyone (along with the Hardcore achievement) to better match their initially intended difficulty
'+ - '
• made good progress on the mobile port
'+ - - '
'+ - '
01/10/2013 - smoothing it out
'+ - '
• some visual effects have been completely rewritten and should now run more smoothly (and be less CPU-intensive)
'+ - '
• new upgrade tier
'+ - '
• new milk tier
'+ - '
• cookie chains have different capping mechanics
'+ - '
• antimatter condensers are back to their previous price
'+ - '
• heavenly chips now give +2% CpS again (they will be extensively reworked in the future)
'+ - '
• farms have been buffed a bit (to popular demand)
'+ - '
• dungeons still need a bit more work and will be released soon - we want them to be just right! (you can test an unfinished version in the beta)
'+ - - '
'+ - '
28/09/2013 - dungeon beta
'+ - '
• from now on, big updates will come through a beta stage first (you can try it here)
'+ - '
• first dungeons! (you need 50 factories to unlock them!)
'+ - '
• cookie chains can be longer
'+ - '
• antimatter condensers are a bit more expensive
'+ - '
• heavenly chips now only give +1% cps each (to account for all the cookies made from condensers)
'+ - '
• added flavor text on all upgrades
'+ - - '
'+ - '
15/09/2013 - anticookies
'+ - '
• ran out of regular matter to make your cookies? Try our new antimatter condensers!
'+ - '
• renamed Hard-reset to "Wipe save" to avoid confusion
'+ - '
• reset achievements are now regular achievements and require cookies baked all time, not cookies in bank
'+ - '
• heavenly chips have been nerfed a bit (and are now awarded following a geometric progression : 1 trillion for the first, 2 for the second, etc); the prestige system will be extensively reworked in a future update (after dungeons)
'+ - '
• golden cookie clicks are no longer reset by soft-resets
'+ - '
• you can now see how long you\'ve been playing in the stats
'+ - - '
'+ - '
08/09/2013 - everlasting cookies
'+ - '
• added a prestige system - resetting gives you permanent CpS boosts (the more cookies made before resetting, the bigger the boost!)
'+ - '
• save format has been slightly modified to take less space
'+ - '
• Leprechaun has been bumped to 777 golden cookies clicked and is now shadow; Fortune is the new 77 golden cookies achievement
'+ - '
• clicking frenzy is now x777
'+ - - '
'+ - '
04/09/2013 - smarter cookie
'+ - '
• golden cookies only have 20% chance of giving the same outcome twice in a row now
'+ - '
• added a golden cookie upgrade
'+ - '
• added an upgrade that makes pledges last twice as long (requires having pledged 10 times)
'+ - '
• Quintillion fingers is now twice as efficient
'+ - '
• Uncanny clicker was really too unpredictable; it is now a regular achievement and no longer requires a world record, just *pretty fast* clicking
'+ - - '
'+ - '
02/09/2013 - a better way out
'+ - '
• Elder Covenant is even cheaper, and revoking it is cheaper still (also added a new achievement for getting it)
'+ - '
• each grandma upgrade now requires 15 of the matching building
'+ - '
• the dreaded bottom cursor has been fixed with a new cursor display style
'+ - '
• added an option for faster, cheaper graphics
'+ - '
• base64 encoding has been redone; this might make saving possible again on some older browsers
'+ - '
• shadow achievements now have their own section
'+ - '
• raspberry juice is now named raspberry milk, despite raspberry juice being delicious and going unquestionably well with cookies
'+ - '
• HOTFIX : cursors now click; fancy graphics button renamed; cookies amount now more visible against cursors
'+ - - '
'+ - '
01/09/2013 - sorting things out
'+ - '
• upgrades and achievements are properly sorted in the stats screen
'+ - '
• made Elder Covenant much cheaper and less harmful
'+ - '
• importing from the first version has been disabled, as promised
'+ - '
• "One mind" now actually asks you to confirm the upgrade
'+ - - '
'+ - '
31/08/2013 - hotfixes
'+ - '
• added a way to permanently stop the grandmapocalypse
'+ - '
• Elder Pledge price is now capped
'+ - '
• One Mind and other grandma research upgrades are now a little more powerful, if not 100% accurate
'+ - '
• "golden" cookie now appears again during grandmapocalypse; Elder Pledge-related achievements are now unlockable
'+ - - '
'+ - '
31/08/2013 - too many grandmas
'+ - '
• the grandmapocalypse is back, along with more grandma types
'+ - '
• added some upgrades that boost your clicking power and make it scale with your cps
'+ - '
• clicking achievements made harder; Neverclick is now a shadow achievement; Uncanny clicker should now truly be a world record
'+ - - '
'+ - '
28/08/2013 - over-achiever
'+ - '
• added a few more achievements
'+ - '
• reworked the "Bake X cookies" achievements so they take longer to achieve
'+ - - '
'+ - '
27/08/2013 - a bad idea
'+ - '
• due to popular demand, retired 5 achievements (the "reset your game" and "cheat" ones); they can still be unlocked, but do not count toward your total anymore. Don\'t worry, there will be many more achievements soon!
'+ - '
• made some achievements hidden for added mystery
'+ - - '
'+ - '
27/08/2013 - a sense of achievement
'+ - '
• added achievements (and milk)
'+ - '
(this is a big update, please don\'t get too mad if you lose some data!)
'+ - - '
'+ - '
26/08/2013 - new upgrade tier
'+ - '
• added some more upgrades (including a couple golden cookie-related ones)
'+ - '
• added clicking stats
'+ - - '
'+ - '
26/08/2013 - more tweaks
'+ - '
• tweaked a couple cursor upgrades
'+ - '
• made time machines less powerful
'+ - '
• added offline mode option
'+ - - '
'+ - '
25/08/2013 - tweaks
'+ - '
• rebalanced progression curve (mid- and end-game objects cost more and give more)
'+ - '
• added some more cookie upgrades
'+ - '
• added CpS for cursors
'+ - '
• added sell button
'+ - '
• made golden cookie more useful
'+ - - '
'+ - '
24/08/2013 - hotfixes
'+ - '
• added import/export feature, which also allows you to retrieve a save game from the old version (will be disabled in a week to prevent too much cheating)
'+ - '
• upgrade store now has unlimited slots (just hover over it), due to popular demand
'+ - '
• added update log
'+ - - '
'+ - '
24/08/2013 - big update!
'+ - '
• revamped the whole game (new graphics, new game mechanics)
'+ - '
• added upgrades
'+ - '
• much safer saving
'+ - - '
'+ - '
08/08/2013 - game launch
'+ - '
• made the game in a couple hours, for laughs
'+ - '
• kinda starting to regret it
'+ - '
• ah well
'+ - '
'+ - '
' - ; - - Game.ready=0; - - Game.Load=function(callback) - { - //l('offGameMessage').innerHTML='
Loading...
'; - Game.Loader=new Loader(); - Game.Loader.domain='img/'; - if (typeof PRELOAD!=='undefined') Game.Loader.loaded=PRELOAD(Game.Init); - else Game.Loader.loaded=callback; - Game.Loader.Load(['filler.png']); - } - Game.ErrorFrame=function() - { - l('offGameMessage').innerHTML= - '
Oops. Wrong address!
'+ - '
It looks like you\'re accessing Cookie Clicker from another URL than the official one.
'+ - 'You can play Cookie Clicker over here!
'+ - '(If for any reason, you are unable to access the game on the official URL, we are currently working on a second domain.)
'; - } - Game.timedout=false; - Game.Timeout=function() - { - Game.WriteSave(); - Game.killShimmers(); - l('offGameMessage').innerHTML='
'+(Game.Has('Twin Gates of Transcendence')?loc("Cookie Clicker is in sleep mode and generating offline cookies."):loc("Cookie Clicker is in sleep mode."))+'
'+loc("%1 to resume from your save file.",''+loc("Click here")+'')+'
'+loc("(this happens when too many frames are skipped at once,
usually when the game has been running in the background for a while)
(you can turn this feature off in the settings menu)")+'
'; - l('offGameMessageWrap').style.display='table'; - Game.timedout=true; - console.log('[=== Game timed out and has been put in sleep mode. Data was saved. ===]'); - } - Game.Resume=function() - { - l('offGameMessage').innerHTML=''; - l('offGameMessageWrap').style.display='none'; - Game.timedout=false; - Game.time=Date.now(); - Game.accumulatedDelay=0; - Game.delayTimeouts=0; - Game.lastActivity=Date.now(); - Game.Loop(); - Game.LoadSave(); - console.log('[=== Game resumed! Data was loaded. ===]'); - } - - - Game.Init=function() - { - Game.ready=1; - - /*===================================================================================== - VARIABLES AND PRESETS - =======================================================================================*/ - Game.T=0; - Game.drawT=0; - Game.loopT=0; - Game.fps=30; - - Game.season=Game.baseSeason; - - Game.l=l('game'); - Game.wrapper=l('wrapper'); - Game.bounds=0;//rectangle defining screen limits (right,left,bottom,top) updated every logic frame - - TopBarOffset=32; - if (!App) Game.wrapper.classList.add('onWeb'); - else {Game.wrapper.classList.add('offWeb');TopBarOffset=0;} - - if (Game.mobile==1) - { - Game.wrapper.className='mobile'; - } - Game.clickStr=Game.touchEvents?'ontouchend':'onclick'; - - l('versionNumber').innerHTML='v. '+Game.version+(!App?('
'):'')+(Game.beta?' beta':''); - - if (!App) - { - if (Game.beta) {var me=l('linkVersionBeta');me.parentNode.removeChild(me);} - else if (Game.version==1.0466) {var me=l('linkVersionOld');me.parentNode.removeChild(me);} - else {var me=l('linkVersionLive');me.parentNode.removeChild(me);} - } - - Game.lastActivity=Date.now();//reset on mouse move, key press or click - - //latency compensator stuff - Game.time=Date.now(); - Game.accumulatedDelay=0; - Game.delayTimeouts=0;//how many times we've gone over the timeout delay - Game.catchupLogic=0; - Game.fpsStartTime=0; - Game.frameNumber=0; - Game.currentFps=Game.fps; - Game.previousFps=Game.currentFps; - Game.getFps=function() - { - Game.frameNumber++; - var currentTime=(Date.now()-Game.fpsStartTime )/1000; - var result=Math.floor((Game.frameNumber/currentTime)); - if (currentTime>1) - { - Game.fpsStartTime=Date.now(); - Game.frameNumber=0; - } - return result; - } - - Game.cookiesEarned=0;//all cookies earned during gameplay - Game.cookies=0;//cookies - Game.cookiesd=0;//cookies display - Game.cookiesPs=1;//cookies per second (to recalculate with every new purchase) - Game.cookiesPsRaw=0;//raw cookies per second - Game.cookiesPsRawHighest=0;//highest raw cookies per second this ascension - Game.cookiesReset=0;//cookies lost to resetting (used to determine prestige and heavenly chips) - Game.cookieClicks=0;//+1 for each click on the cookie - Game.goldenClicks=0;//+1 for each golden cookie clicked (all time) - Game.goldenClicksLocal=0;//+1 for each golden cookie clicked (this game only) - Game.missedGoldenClicks=0;//+1 for each golden cookie missed - Game.handmadeCookies=0;//all the cookies made from clicking the cookie - Game.milkProgress=0;//you gain a little bit for each achievement. Each increment of 1 is a different milk displayed. - Game.milkH=Game.milkProgress/2;//milk height, between 0 and 1 (although should never go above 0.5) - Game.milkHd=0;//milk height display - Game.milkType=0;//custom milk - Game.bgType=0;//custom background - Game.chimeType=0;//golden cookie chime - Game.prestige=0;//prestige level (recalculated depending on Game.cookiesReset) - Game.heavenlyChips=0;//heavenly chips the player currently has - Game.heavenlyChipsDisplayed=0;//ticks up or down to match Game.heavenlyChips - Game.heavenlyChipsSpent=0;//heavenly chips spent on cookies, upgrades and such - Game.heavenlyCookies=0;//how many cookies have we baked from chips (unused) - Game.permanentUpgrades=[-1,-1,-1,-1,-1]; - Game.ascensionMode=0;//type of challenge run if any - Game.resets=0;//reset counter - Game.lumps=-1;//sugar lumps - Game.lumpsTotal=-1;//sugar lumps earned across all playthroughs (-1 means they haven't even started yet) - Game.lumpT=Date.now();//time when the current lump started forming - Game.lumpRefill=0;//time left before a sugar lump can be used again (on minigame refills etc) in logic frames - - Game.makeSeed=function() - { - var chars='abcdefghijklmnopqrstuvwxyz'.split(''); - var str=''; - for (var i=0;i<5;i++){str+=choose(chars);} - return str; - } - Game.seed=Game.makeSeed();//each run has its own seed, used for deterministic random stuff - - Game.volume=75;//sound volume - Game.volumeMusic=50;//music volume - - Game.elderWrath=0; - Game.elderWrathOld=0; - Game.elderWrathD=0; - Game.pledges=0; - Game.pledgeT=0; - Game.researchT=0; - Game.nextResearch=0; - Game.cookiesSucked=0;//cookies sucked by wrinklers - Game.cpsSucked=0;//percent of CpS being sucked by wrinklers - Game.wrinklersPopped=0; - Game.santaLevel=0; - Game.reindeerClicked=0; - Game.seasonT=0; - Game.seasonUses=0; - Game.dragonLevel=0; - Game.dragonAura=0; - Game.dragonAura2=0; - - Game.fortuneGC=0; - Game.fortuneCPS=0; - - Game.blendModesOn=(document.createElement('detect').style.mixBlendMode===''); - - Game.bg='';//background (grandmas and such) - Game.bgFade='';//fading to background - Game.bgR=0;//ratio (0 - not faded, 1 - fully faded) - Game.bgRd=0;//ratio displayed - - Game.windowW=window.innerWidth; - Game.windowH=window.innerHeight; - Game.scale=1; - - window.addEventListener('resize',function(e) - { - Game.resize(); - if (App && App.onResize) App.onResize(); - }); - - Game.resize=function() - { - var w=window.innerWidth; - var h=window.innerHeight; - - var prevW=Game.windowW; - var prevH=Game.windowH; - - var scale=Math.min( - w/Math.max(800,w), - h/Math.max(200,h) - ); - Game.windowW=Math.floor(w/scale); - Game.windowH=Math.floor(h/scale); - if (scale!=1) - { - Game.wrapper.style.transform='scale('+(scale)+')'; - Game.wrapper.style.width=Game.windowW+'px'; - Game.wrapper.style.height=Game.windowH+'px'; - } - else - { - Game.wrapper.style.removeProperty('transform'); - Game.wrapper.style.width='100%'; - Game.wrapper.style.height='100%'; - } - Game.scale=scale; - - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - me.toResize=true; - if (me.minigame && me.minigame.onResize) me.minigame.onResize(); - } - - if (Game.getNewTicker) - { - if (prevW>=Game.tickerTooNarrow && Game.windowW=Game.tickerTooNarrow) Game.getNewTicker(true); - } - } - Game.resize(); - - Game.startDate=parseInt(Date.now());//when we started playing - Game.fullDate=parseInt(Date.now());//when we started playing (carries over with resets) - Game.lastDate=parseInt(Date.now());//when we last saved the game (used to compute "cookies made since we closed the game" etc) - - Game.prefs=[]; - Game.DefaultPrefs=function() - { - Game.prefs.particles=1;//particle effects : falling cookies etc - Game.prefs.numbers=1;//numbers that pop up when clicking the cookie - Game.prefs.autosave=1;//save the game every minute or so - Game.prefs.autoupdate=1;//send an AJAX request to the server every 30 minutes (note : ignored) - Game.prefs.milk=1;//display milk - Game.prefs.fancy=1;//CSS shadow effects (might be heavy on some browsers) - Game.prefs.warn=0;//warn before closing the window - Game.prefs.cursors=1;//display cursors - Game.prefs.focus=1;//make the game refresh less frequently when off-focus - Game.prefs.popups=0;//use old-style popups (no longer used) - Game.prefs.format=0;//shorten numbers - Game.prefs.notifs=0;//notifications fade faster - Game.prefs.animate=1;//animate buildings - Game.prefs.wobbly=1;//wobbly cookie - Game.prefs.monospace=0;//alt monospace font for cookies - Game.prefs.filters=1;//CSS filter effects (might be heavy on some browsers) - Game.prefs.cookiesound=1;//use new cookie click sound - Game.prefs.crates=0;//show crates around icons in stats - Game.prefs.altDraw=0;//use requestAnimationFrame to update drawing instead of fixed 30 fps setTimeout - Game.prefs.showBackupWarning=1;//if true, show a "Have you backed up your save?" message on save load; set to false when save is exported - Game.prefs.extraButtons=1;//if true, show Mute buttons and the building master bar - Game.prefs.askLumps=0;//if true, show a prompt before spending lumps - Game.prefs.customGrandmas=1;//if true, show patreon names for grandmas - Game.prefs.timeout=0;//if true, game may show pause screen when timed out - Game.prefs.cloudSave=1;//if true and on Steam, save and load to cloud - Game.prefs.bgMusic=1;//if true and on Steam, play music even when game isn't focused - Game.prefs.notScary=0;//if true, make some of the scary stuff less scary ("eyebrow mode") - Game.prefs.fullscreen=0;//if true, Steam game will be fullscreen - Game.prefs.screenreader=0;//if true, add some DOM stuff to facilitate screenreader interaction (requires reload) - Game.prefs.discordPresence=1;//if true and applicable, show game activity in Discord status - } - Game.DefaultPrefs(); - - window.onbeforeunload=function(event) - { - if (Game.prefs && Game.prefs.warn) - { - if (typeof event=='undefined') event=window.event; - if (event) event.returnValue=loc("Are you sure you want to close Cookie Clicker?"); - } - } - - Game.Mobile=function() - { - if (!Game.mobile) - { - Game.wrapper.className='mobile'; - Game.mobile=1; - } - else - { - Game.wrapper.className=''; - Game.mobile=0; - } - } - - Game.showBackupWarning=function() - { - Game.Notify(loc("Back up your save!"),loc("Hello again! Just a reminder that you may want to back up your Cookie Clicker save every once in a while, just in case.
To do so, go to Options and hit \"Export save\" or \"Save to file\"!")+'
'+loc("Don't show this again")+'',[25,7]); - } - - - - - /*===================================================================================== - BAKERY NAME - =======================================================================================*/ - Game.RandomBakeryName=function() - { - var str=''; - if (EN) - { - return (Math.random()>0.05?(choose(['Magic','Fantastic','Fancy','Sassy','Snazzy','Pretty','Cute','Pirate','Ninja','Zombie','Robot','Radical','Urban','Cool','Hella','Sweet','Awful','Double','Triple','Turbo','Techno','Disco','Electro','Dancing','Wonder','Mutant','Space','Science','Medieval','Future','Captain','Bearded','Lovely','Tiny','Big','Fire','Water','Frozen','Metal','Plastic','Solid','Liquid','Moldy','Shiny','Happy','Happy Little','Slimy','Tasty','Delicious','Hungry','Greedy','Lethal','Professor','Doctor','Power','Chocolate','Crumbly','Choklit','Righteous','Glorious','Mnemonic','Psychic','Frenetic','Hectic','Crazy','Royal','El','Von'])+' '):'Mc')+choose(['Cookie','Biscuit','Muffin','Scone','Cupcake','Pancake','Chip','Sprocket','Gizmo','Puppet','Mitten','Sock','Teapot','Mystery','Baker','Cook','Grandma','Click','Clicker','Spaceship','Factory','Portal','Machine','Experiment','Monster','Panic','Burglar','Bandit','Booty','Potato','Pizza','Burger','Sausage','Meatball','Spaghetti','Macaroni','Kitten','Puppy','Giraffe','Zebra','Parrot','Dolphin','Duckling','Sloth','Turtle','Goblin','Pixie','Gnome','Computer','Pirate','Ninja','Zombie','Robot']); - } - else - { - if (locStrings["bakery random name, 1st half"] && locStrings["bakery random name, 2nd half"]) str+=choose(loc("bakery random name, 1st half"))+' '+choose(loc("bakery random name, 2nd half")); - else str+=choose(loc("bakery random name")); - } - return str; - } - Game.GetBakeryName=function() {return Game.RandomBakeryName();} - Game.bakeryNameL=l('bakeryName'); - Game.bakeryNameSet=function(what) - { - try - { - var exp=new RegExp('[^\'\\-_0-9 \\p{L}]','gu'); - Game.bakeryName=what.replace(exp,' '); - //Game.bakeryName=what.replace(/[^'\-_0-9 \p{L}]/gu,' '); - Game.bakeryName=Game.bakeryName.trim().substring(0,28); - } - catch(e) - { - var exp=new RegExp('\W+','g'); - Game.bakeryName=what.replace(exp,' '); - //Game.bakeryName=what.replace(/\W+/g,' '); - Game.bakeryName=Game.bakeryName.substring(0,28); - } - Game.bakeryNameRefresh(); - if (Game.bakeryName=='RESTORE BACKUP' && App && App.restoreBackup) App.restoreBackup(); - } - Game.bakeryNameRefresh=function() - { - var name=Game.bakeryName; - if (EN) {if (name.slice(-1).toLowerCase()=='s') name+='\' bakery'; else name+='\'s bakery';} - else name=loc("%1's bakery",name); - Game.bakeryNameL.textContent=name; - name=Game.bakeryName.toLowerCase(); - if (name=='orteil') Game.Win('God complex'); - if (!App && name.indexOf('saysopensesame',name.length-('saysopensesame').length)>0 && !Game.sesame) Game.OpenSesame(); - Game.recalculateGains=1; - } - Game.bakeryNamePrompt=function() - { - PlaySound('snd/tick.mp3'); - Game.Prompt('

'+loc("Name your bakery")+'

'+loc("What should your bakery's name be?")+'
',[[loc("Confirm"),'if (l(\'bakeryNameInput\').value.length>0) {Game.bakeryNameSet(l(\'bakeryNameInput\').value);Game.Win(\'What\\\'s in a name\');Game.ClosePrompt();}'],[loc("Random"),'Game.bakeryNamePromptRandom();'],loc("Cancel")]); - l('bakeryNameInput').focus(); - l('bakeryNameInput').select(); - } - Game.bakeryNamePromptRandom=function() - { - l('bakeryNameInput').value=Game.RandomBakeryName(); - } - AddEvent(Game.bakeryNameL,'click',Game.bakeryNamePrompt); - - Game.bakeryNameSet(Game.GetBakeryName()); - - /*===================================================================================== - TOOLTIP - =======================================================================================*/ - Game.tooltip={text:'',x:0,y:0,origin:'',on:0,tt:l('tooltip'),tta:l('tooltipAnchor'),shouldHide:1,dynamic:0,from:0}; - Game.tooltip.draw=function(from,text,origin) - { - this.shouldHide=0; - this.text=text; - this.from=from; - //this.x=x; - //this.y=y; - this.origin=origin; - var tt=this.tt; - var tta=this.tta; - tt.style.left='auto'; - tt.style.top='auto'; - tt.style.right='auto'; - tt.style.bottom='auto'; - if (typeof this.text==='function') - { - var text=this.text(); - if (text=='') tta.style.opacity='0'; - else - { - tt.innerHTML=unescape(text); - tta.style.opacity='1'; - } - } - else tt.innerHTML=unescape(this.text); - //tt.innerHTML=(typeof this.text==='function')?unescape(this.text()):unescape(this.text); - tta.style.display='block'; - tta.style.visibility='hidden'; - Game.tooltip.update(); - tta.style.visibility='visible'; - this.on=1; - } - Game.tooltip.update=function() - { - var X=0; - var Y=0; - var width=this.tt.offsetWidth; - var height=this.tt.offsetHeight; - if (this.origin=='store') - { - X=Game.windowW-332-width; - Y=Game.mouseY-32; - if (Game.onCrate) Y=Game.onCrate.getBounds().top-42; - Y=Math.max(0,Math.min(Game.windowH-height-44,Y)); - /*this.tta.style.right='308px';//'468px'; - this.tta.style.left='auto'; - if (Game.onCrate) Y=Game.onCrate.getBounds().top-2; - this.tta.style.top=Math.max(0,Math.min(Game.windowH-this.tt.clientHeight-64,Y-48))+'px';*/ - } - else - { - if (Game.onCrate) - { - var rect=Game.onCrate.getBounds(); - if (rect.left==0 && rect.top==0)//if we get that bug where we get stuck in the top-left, move to the mouse (REVISION : just do nothing) - {return false;/*rect.left=Game.mouseX-24;rect.right=Game.mouseX+24;rect.top=Game.mouseY-24;rect.bottom=Game.mouseY+24;*/} - if (this.origin=='left') - { - X=rect.left-width-16; - Y=rect.top+(rect.bottom-rect.top)/2-height/2-38; - Y=Math.max(0,Math.min(Game.windowH-height-19,Y)); - if (X<0) X=rect.right; - } - else - { - X=rect.left+(rect.right-rect.left)/2-width/2-8; - Y=rect.top-height-TopBarOffset-16; - X=Math.max(0,Math.min(Game.windowW-width-16,X)); - if (Y<0) Y=rect.bottom-TopBarOffset; - } - } - else if (this.origin=='bottom-right') - { - X=Game.mouseX+8; - Y=Game.mouseY-32; - X=Math.max(0,Math.min(Game.windowW-width-16,X)); - Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); - } - else if (this.origin=='bottom') - { - X=Game.mouseX-width/2-8; - Y=Game.mouseY+24; - X=Math.max(0,Math.min(Game.windowW-width-16,X)); - Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); - } - else if (this.origin=='left') - { - X=Game.mouseX-width-24; - Y=Game.mouseY-height/2-8; - X=Math.max(0,Math.min(Game.windowW-width-16,X)); - Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); - } - else if (this.origin=='this' && this.from) - { - var rect=this.from.getBounds(); - X=(rect.left+rect.right)/2-width/2-8; - Y=(rect.top)-this.tt.clientHeight-48; - X=Math.max(0,Math.min(Game.windowW-width-16,X)); - //Y=Math.max(0,Math.min(Game.windowH-this.tt.clientHeight-64,Y)); - if (Y<0) Y=(rect.bottom-24); - if (Y+height+40>Game.windowH) - { - X=rect.right+8; - Y=rect.top+(rect.bottom-rect.top)/2-height/2-38; - Y=Math.max(0,Math.min(Game.windowH-height-19,Y)); - } - } - else - { - X=Game.mouseX-width/2-8; - Y=Game.mouseY-height-32; - X=Math.max(0,Math.min(Game.windowW-width-16,X)); - Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); - } - } - this.tta.style.left=X+'px'; - this.tta.style.right='auto'; - this.tta.style.top=Y+'px'; - this.tta.style.bottom='auto'; - if (this.shouldHide) {this.hide();this.shouldHide=0;} - else if (Game.drawT%10==0 && typeof(this.text)==='function') - { - var text=this.text(); - if (text=='') this.tta.style.opacity='0'; - else - { - this.tt.innerHTML=unescape(text); - this.tta.style.opacity='1'; - } - } - } - Game.tooltip.hide=function() - { - if (this.tta) this.tta.style.display='none'; - this.dynamic=0; - this.on=0; - } - Game.getTooltip=function(text,origin,isCrate) - { - origin=(origin?origin:'middle'); - if (isCrate) return 'onMouseOut="Game.setOnCrate(0);Game.tooltip.shouldHide=1;" onMouseOver="if (!Game.mouseDown) {Game.setOnCrate(this);Game.tooltip.dynamic=0;Game.tooltip.draw(this,\''+escape(text)+'\',\''+origin+'\');Game.tooltip.wobble();}"'; - else return 'onMouseOut="Game.tooltip.shouldHide=1;" onMouseOver="Game.tooltip.dynamic=0;Game.tooltip.draw(this,\''+escape(text)+'\',\''+origin+'\');Game.tooltip.wobble();"'; - } - Game.getDynamicTooltip=function(func,origin,isCrate) - { - origin=(origin?origin:'middle'); - if (isCrate) return 'onMouseOut="Game.setOnCrate(0);Game.tooltip.shouldHide=1;" onMouseOver="if (!Game.mouseDown) {Game.setOnCrate(this);Game.tooltip.dynamic=1;Game.tooltip.draw(this,'+'function(){return '+func+'();}'+',\''+origin+'\');Game.tooltip.wobble();}"'; - return 'onMouseOut="Game.tooltip.shouldHide=1;" onMouseOver="Game.tooltip.dynamic=1;Game.tooltip.draw(this,'+'function(){return '+func+'();}'+',\''+origin+'\');Game.tooltip.wobble();"'; - } - Game.attachTooltip=function(el,func,origin) - { - if (typeof func==='string') - { - var str=func; - func=function(str){return function(){return str;};}(str); - } - origin=(origin?origin:'middle'); - AddEvent(el,'mouseover',function(func,el,origin){return function(){Game.tooltip.dynamic=1;Game.tooltip.draw(el,func,origin);};}(func,el,origin)); - AddEvent(el,'mouseout',function(){return function(){Game.tooltip.shouldHide=1;};}()); - } - Game.tooltip.wobble=function() - { - //disabled because this effect doesn't look good with the slight slowdown it might or might not be causing. - if (false) - { - this.tt.className='framed'; - void this.tt.offsetWidth; - this.tt.className='framed wobbling'; - } - } - - - /*===================================================================================== - UPDATE CHECKER - =======================================================================================*/ - Game.CheckUpdates=function() - { - if (!App) ajax('server.php?q=checkupdate',Game.CheckUpdatesResponse); - } - Game.CheckUpdatesResponse=function(response) - { - var r=response.split('|'); - var str=''; - if (r[0]=='alert') - { - if (r[1]) str=r[1]; - } - else if (parseFloat(r[0])>Game.version) - { - str=''+loc("New version available: v. %1!",r[0])+''; - if (r[1]) str+='
'+loc("Update note: \"%1\"",r[1])+''; - str+='
'+loc("Refresh to get it!")+''; - } - if (str!='') - { - l('alert').innerHTML=str; - l('alert').style.display='block'; - } - } - - /*===================================================================================== - DATA GRABBER - =======================================================================================*/ - - Game.externalDataLoaded=false; - - Game.grandmaNames=['Granny','Gusher','Ethel','Edna','Doris','Maud','Hilda','Gladys','Michelle','Michele','Phyllis','Millicent','Muriel','Myrtle','Mildred','Mavis','Helen','Gloria','Sheila','Betty','Gertrude','Agatha','Beryl','Agnes','Pearl','Precious','Ruby','Vera','Bonnie','Ada','Bunny','Cookie','Darling','Gaga','GamGam','Memaw','Mimsy','Peanut','Nana','Nan','Tootsie','Warty','Stinky','Heinous']; - Game.customGrandmaNames=[]; - Game.heralds=0; - - Game.GrabData=function() - { - if (!App) ajax('grab.txt',Game.GrabDataResponse); - else App.grabData(function(res){ - Game.heralds=res?(res.playersN||1):1; - Game.heralds=Math.max(0,Math.min(100,Math.ceil(Game.heralds/100*100)/100)); - l('heraldsAmount').textContent=Math.floor(Game.heralds); - }); - } - Game.GrabDataResponse=function(response) - { - /* - response should be formatted as - {"herald":3,"grandma":"a|b|c|...} - */ - var r={}; - try{ - r=JSON.parse(response); - if (typeof r['herald']!=='undefined') - { - Game.heralds=parseInt(r['herald']); - Game.heralds=Math.max(0,Math.min(100,Game.heralds)); - } - if (typeof r['grandma']!=='undefined' && r['grandma']!='') - { - Game.customGrandmaNames=r['grandma'].split('|'); - Game.customGrandmaNames=Game.customGrandmaNames.filter(function(el){return el!='';}); - } - - l('heraldsAmount').textContent=Math.floor(Game.heralds); - Game.externalDataLoaded=true; - }catch(e){} - } - - - if (!App) - { - Game.attachTooltip(l('httpsSwitch'),'
'+loc("You are currently playing Cookie Clicker on the %1 protocol.
The %2 version uses a different save slot than this one.
Click this lock to reload the page and switch to the %2 version!",[(Game.https?'HTTPS':'HTTP'),(Game.https?'HTTP':'HTTPS')])+'
','this'); - AddEvent(l('httpsSwitch'),'click',function(){ - PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); - if (location.protocol=='https:') location.href='http:'+window.location.href.substring(window.location.protocol.length); - else if (location.protocol=='http:') location.href='https:'+window.location.href.substring(window.location.protocol.length); - }); - - AddEvent(l('changeLanguage'),'click',function() - { - Game.showLangSelection(); - }); - - Game.attachTooltip(l('topbarOrteil'),'
Back to Orteil\'s subdomain!
Lots of other games in there!
'+tinyIcon([17,5],'display:block;margin:-12px auto;'),'this'); - Game.attachTooltip(l('topbarDashnet'),'
Back to our homepage!
','this'); - Game.attachTooltip(l('topbarTwitter'),'
Orteil\'s twitter, which frequently features game updates.
','this'); - Game.attachTooltip(l('topbarTumblr'),'
Orteil\'s tumblr, which frequently features game updates.
','this'); - Game.attachTooltip(l('topbarDiscord'),'
Our official discord server.
You can share tips and questions about Cookie Clicker and all our other games!
','this'); - Game.attachTooltip(l('topbarPatreon'),'
Support us on Patreon and help us keep updating Cookie Clicker!
There\'s neat rewards for patrons too!
','this'); - Game.attachTooltip(l('topbarMerch'),'
Cookie Clicker shirts, hoodies and stickers!
','this'); - Game.attachTooltip(l('topbarMobileCC'),'
Play Cookie Clicker on your phone!
(Android only; iOS version will be released later)
','this'); - Game.attachTooltip(l('topbarSteamCC'),'
Get Cookie Clicker on Steam!
Featuring music by C418.
','this'); - Game.attachTooltip(l('topbarRandomgen'),'
A thing we made that lets you write random generators.
','this'); - Game.attachTooltip(l('topbarIGM'),'
A thing we made that lets you create your own idle games using a simple scripting language.
','this'); - l('changeLanguage').innerHTML=loc("Change language"); - l('links').childNodes[0].nodeValue=loc("Other versions"); - //l('linkVersionBeta').innerHTML=loc("Beta"); - } - - Game.attachTooltip(l('heralds'),function(){ - var str=''; - - if (!App && !Game.externalDataLoaded) str+=loc("Heralds couldn't be loaded. There may be an issue with our servers, or you are playing the game locally."); - else - { - if (!App && Game.heralds==0) str+=loc("There are no heralds at the moment. Please consider donating to our Patreon!"); - else - { - str+=''+loc("%1 herald",Game.heralds)+' '+loc("selflessly inspiring a boost in production for everyone, resulting in %1.",'
'+loc("+%1% cookies per second",Game.heralds)+'
'); - str+='
'; - if (Game.ascensionMode==1) str+=loc("You are in a Born again run, and are not currently benefiting from heralds."); - else if (Game.Has('Heralds')) str+=loc("You own the Heralds upgrade, and therefore benefit from the production boost."); - else str+=loc("To benefit from the herald bonus, you need a special upgrade you do not yet own. You will permanently unlock it later in the game."); - } - } - str+='
'+(!App?loc("Heralds are people who have donated to our highest Patreon tier, and are limited to 100.
Each herald gives everyone +1% CpS.
Heralds benefit everyone playing the game, regardless of whether you donated."):loc("Every %1 current players on Steam generates 1 herald, up to %2 heralds.
Each herald gives everyone +1% CpS.",[100,100]))+'
'+tinyIcon([21,29]); - - str+='
'; - - return '

'+loc("Heralds")+'

'+str+'
'; - },'this'); - l('heraldsAmount').textContent='?'; - l('heralds').style.display='inline-block'; - if (App) - { - l('heralds').style.paddingTop='4px'; - l('heralds').style.position='absolute'; - l('heralds').style.top='0px'; - l('heralds').style.right='0px'; - l('heralds').style.width='28px'; - l('heralds').style.textAlign='center'; - l('leftBeam').appendChild(l('heralds')); - - l('buffs').style.top='16px'; - } - - Game.GrabData(); - - - Game.useLocalStorage=1; - //window.localStorage.clear();//won't switch back to cookie-based if there is localStorage info - - /*===================================================================================== - SAVE - =======================================================================================*/ - Game.ExportSave=function() - { - //if (App) return false; - Game.prefs.showBackupWarning=0; - Game.Prompt('

'+loc("Export save")+'

'+loc("This is your save code.
Copy it and keep it somewhere safe!")+'
',[loc("All done!")]);//prompt('Copy this text and keep it somewhere safe!',Game.WriteSave(1)); - l('textareaPrompt').focus();l('textareaPrompt').select(); - } - Game.ImportSave=function(def) - { - //if (App) return false; - Game.Prompt('

'+loc("Import save")+'

'+loc("Please paste in the code that was given to you on save export.")+'
',[[loc("Load"),'if (l(\'textareaPrompt\').value.length==0){return false;}if (Game.ImportSaveCode(l(\'textareaPrompt\').value)){Game.ClosePrompt();}else{l(\'importError\').innerHTML=\'(\'+loc("Error importing save")+\')\';}'],loc("Nevermind")]);//prompt('Please paste in the text that was given to you on save export.',''); - l('textareaPrompt').focus(); - } - Game.ImportSaveCode=function(save) - { - var out=false; - if (save && save!='') out=Game.LoadSave(save); - if (out && App && App.onImportSave) App.onImportSave(out,save); - return out; - } - - Game.FileSave=function() - { - if (App) return false; - Game.prefs.showBackupWarning=0; - var filename=Game.bakeryName.replace(/[^a-zA-Z0-9]+/g,'')+'Bakery'; - var text=Game.WriteSave(1); - var blob=new Blob([text],{type:'text/plain;charset=utf-8'}); - saveAs(blob,filename+'.txt'); - } - Game.FileLoad=function(e) - { - if (App) return false; - if (e.target.files.length==0) return false; - var file=e.target.files[0]; - var reader=new FileReader(); - reader.onload=function(e) - { - Game.ImportSaveCode(e.target.result); - } - reader.readAsText(file); - } - - - Game.toReload=false; - Game.toSave=false; - Game.toQuit=false; - Game.isSaving=false;//true while we're saving, to block some behavior; when in App mode saving may be asynchronous - Game.lastSaveData=''; - Game.WriteSave=function(type) - { - Game.toSave=false; - //type: none is default, 1=return string only, 2=return uncompressed string, 3=return uncompressed, commented string - Game.lastDate=parseInt(Game.time); - var str=''; - if (type==3) str+='\nGame version\n'; - str+=Game.version+'|'; - str+='|';//just in case we need some more stuff here - if (type==3) str+='\n\nRun details'; - str+=//save stats - (type==3?'\n run start date : ':'')+parseInt(Game.startDate)+';'+ - (type==3?'\n legacy start date : ':'')+parseInt(Game.fullDate)+';'+ - (type==3?'\n date when we last opened the game : ':'')+parseInt(Game.lastDate)+';'+ - (type==3?'\n bakery name : ':'')+(Game.bakeryName)+';'+ - (type==3?'\n seed : ':'')+(Game.seed)+ - '|'; - if (type==3) str+='\n\nPacked preferences bitfield\n '; - var str2=//prefs - (Game.prefs.particles?'1':'0')+ - (Game.prefs.numbers?'1':'0')+ - (Game.prefs.autosave?'1':'0')+ - (Game.prefs.autoupdate?'1':'0')+ - (Game.prefs.milk?'1':'0')+ - (Game.prefs.fancy?'1':'0')+ - (Game.prefs.warn?'1':'0')+ - (Game.prefs.cursors?'1':'0')+ - (Game.prefs.focus?'1':'0')+ - (Game.prefs.format?'1':'0')+ - (Game.prefs.notifs?'1':'0')+ - (Game.prefs.wobbly?'1':'0')+ - (Game.prefs.monospace?'1':'0')+ - (Game.prefs.filters?'1':'0')+ - (Game.prefs.cookiesound?'1':'0')+ - (Game.prefs.crates?'1':'0')+ - (Game.prefs.showBackupWarning?'1':'0')+ - (Game.prefs.extraButtons?'1':'0')+ - (Game.prefs.askLumps?'1':'0')+ - (Game.prefs.customGrandmas?'1':'0')+ - (Game.prefs.timeout?'1':'0')+ - (Game.prefs.cloudSave?'1':'0')+ - (Game.prefs.bgMusic?'1':'0')+ - (Game.prefs.notScary?'1':'0')+ - (Game.prefs.fullscreen?'1':'0')+ - (Game.prefs.screenreader?'1':'0')+ - (Game.prefs.discordPresence?'1':'0')+ - ''; - str2=pack3(str2); - str+=str2+'|'; - if (type==3) str+='\n\nMisc game data'; - str+= - (type==3?'\n cookies : ':'')+parseFloat(Game.cookies).toString()+';'+ - (type==3?'\n total cookies earned : ':'')+parseFloat(Game.cookiesEarned).toString()+';'+ - (type==3?'\n cookie clicks : ':'')+parseInt(Math.floor(Game.cookieClicks))+';'+ - (type==3?'\n golden cookie clicks : ':'')+parseInt(Math.floor(Game.goldenClicks))+';'+ - (type==3?'\n cookies made by clicking : ':'')+parseFloat(Game.handmadeCookies).toString()+';'+ - (type==3?'\n golden cookies missed : ':'')+parseInt(Math.floor(Game.missedGoldenClicks))+';'+ - (type==3?'\n background type : ':'')+parseInt(Math.floor(Game.bgType))+';'+ - (type==3?'\n milk type : ':'')+parseInt(Math.floor(Game.milkType))+';'+ - (type==3?'\n cookies from past runs : ':'')+parseFloat(Game.cookiesReset).toString()+';'+ - (type==3?'\n elder wrath : ':'')+parseInt(Math.floor(Game.elderWrath))+';'+ - (type==3?'\n pledges : ':'')+parseInt(Math.floor(Game.pledges))+';'+ - (type==3?'\n pledge time left : ':'')+parseInt(Math.floor(Game.pledgeT))+';'+ - (type==3?'\n currently researching : ':'')+parseInt(Math.floor(Game.nextResearch))+';'+ - (type==3?'\n research time left : ':'')+parseInt(Math.floor(Game.researchT))+';'+ - (type==3?'\n ascensions : ':'')+parseInt(Math.floor(Game.resets))+';'+ - (type==3?'\n golden cookie clicks (this run) : ':'')+parseInt(Math.floor(Game.goldenClicksLocal))+';'+ - (type==3?'\n cookies sucked by wrinklers : ':'')+parseFloat(Game.cookiesSucked).toString()+';'+ - (type==3?'\n wrinkles popped : ':'')+parseInt(Math.floor(Game.wrinklersPopped))+';'+ - (type==3?'\n santa level : ':'')+parseInt(Math.floor(Game.santaLevel))+';'+ - (type==3?'\n reindeer clicked : ':'')+parseInt(Math.floor(Game.reindeerClicked))+';'+ - (type==3?'\n season time left : ':'')+parseInt(Math.floor(Game.seasonT))+';'+ - (type==3?'\n season switcher uses : ':'')+parseInt(Math.floor(Game.seasonUses))+';'+ - (type==3?'\n current season : ':'')+(Game.season?Game.season:'')+';'; - var wrinklers=Game.SaveWrinklers(); - str+= - (type==3?'\n amount of cookies contained in wrinklers : ':'')+parseFloat(Math.floor(wrinklers.amount))+';'+ - (type==3?'\n number of wrinklers : ':'')+parseInt(Math.floor(wrinklers.number))+';'+ - (type==3?'\n prestige level : ':'')+parseFloat(Game.prestige).toString()+';'+ - (type==3?'\n heavenly chips : ':'')+parseFloat(Game.heavenlyChips).toString()+';'+ - (type==3?'\n heavenly chips spent : ':'')+parseFloat(Game.heavenlyChipsSpent).toString()+';'+ - (type==3?'\n heavenly cookies : ':'')+parseFloat(Game.heavenlyCookies).toString()+';'+ - (type==3?'\n ascension mode : ':'')+parseInt(Math.floor(Game.ascensionMode))+';'+ - (type==3?'\n permanent upgrades : ':'')+parseInt(Math.floor(Game.permanentUpgrades[0]))+';'+parseInt(Math.floor(Game.permanentUpgrades[1]))+';'+parseInt(Math.floor(Game.permanentUpgrades[2]))+';'+parseInt(Math.floor(Game.permanentUpgrades[3]))+';'+parseInt(Math.floor(Game.permanentUpgrades[4]))+';'+ - (type==3?'\n dragon level : ':'')+parseInt(Math.floor(Game.dragonLevel))+';'+ - (type==3?'\n dragon aura : ':'')+parseInt(Math.floor(Game.dragonAura))+';'+ - (type==3?'\n dragon aura 2 : ':'')+parseInt(Math.floor(Game.dragonAura2))+';'+ - (type==3?'\n chime type : ':'')+parseInt(Math.floor(Game.chimeType))+';'+ - (type==3?'\n volume : ':'')+parseInt(Math.floor(Game.volume))+';'+ - (type==3?'\n number of shiny wrinklers : ':'')+parseInt(Math.floor(wrinklers.shinies))+';'+ - (type==3?'\n amount of cookies contained in shiny wrinklers : ':'')+parseFloat(Math.floor(wrinklers.amountShinies))+';'+ - (type==3?'\n current amount of sugar lumps : ':'')+parseFloat(Math.floor(Game.lumps))+';'+ - (type==3?'\n total amount of sugar lumps made : ':'')+parseFloat(Math.floor(Game.lumpsTotal))+';'+ - (type==3?'\n time when current sugar lump started : ':'')+parseFloat(Math.floor(Game.lumpT))+';'+ - (type==3?'\n time when last refilled a minigame with a sugar lump : ':'')+parseFloat(Math.floor(Game.lumpRefill))+';'+ - (type==3?'\n sugar lump type : ':'')+parseInt(Math.floor(Game.lumpCurrentType))+';'+ - (type==3?'\n vault : ':'')+Game.vault.join(',')+';'+ - (type==3?'\n heralds : ':'')+parseInt(Game.heralds)+';'+ - (type==3?'\n golden cookie fortune : ':'')+parseInt(Game.fortuneGC)+';'+ - (type==3?'\n CpS fortune : ':'')+parseInt(Game.fortuneCPS)+';'+ - (type==3?'\n highest raw CpS : ':'')+parseFloat(Game.cookiesPsRawHighest)+';'+ - (type==3?'\n music volume : ':'')+parseInt(Math.floor(Game.volumeMusic))+';'+ - - '|';//cookies and lots of other stuff - - if (type==3) str+='\n\nBuildings : amount, bought, cookies produced, level, minigame data'; - for (var i in Game.Objects)//buildings - { - var me=Game.Objects[i]; - if (type==3) str+='\n '+me.name+' : '; - if (me.vanilla) - { - str+=me.amount+','+me.bought+','+parseFloat(Math.floor(me.totalCookies))+','+parseInt(me.level); - if (Game.isMinigameReady(me)) str+=','+me.minigame.save(); else str+=','+(me.minigameSave||''); - str+=','+(me.muted?'1':'0'); - str+=','+me.highest; - str+=';'; - } - } - str+='|'; - if (type==3) str+='\n\nPacked upgrades bitfield (unlocked and bought)\n '; - var toCompress=[]; - for (var i in Game.UpgradesById)//upgrades - { - var me=Game.UpgradesById[i]; - if (me.vanilla) toCompress.push(Math.min(me.unlocked,1),Math.min(me.bought,1)); - }; - - toCompress=pack3(toCompress.join(''));//toCompress=pack(toCompress);//CompressLargeBin(toCompress); - - str+=toCompress; - str+='|'; - if (type==3) str+='\n\nPacked achievements bitfield (won)\n '; - var toCompress=[]; - for (var i in Game.AchievementsById)//achievements - { - var me=Game.AchievementsById[i]; - if (me.vanilla) toCompress.push(Math.min(me.won)); - } - toCompress=pack3(toCompress.join(''));//toCompress=pack(toCompress);//CompressLargeBin(toCompress); - str+=toCompress; - - str+='|'; - if (type==3) str+='\n\nBuffs : type, maxTime, time, arg1, arg2, arg3'; - for (var i in Game.buffs) - { - var me=Game.buffs[i]; - if (me.type) - { - if (type==3) str+='\n '+me.type.name+' : '; - if (me.type.vanilla) - { - str+=me.type.id+','+me.maxTime+','+me.time; - if (typeof me.arg1!=='undefined') str+=','+parseFloat(me.arg1); - if (typeof me.arg2!=='undefined') str+=','+parseFloat(me.arg2); - if (typeof me.arg3!=='undefined') str+=','+parseFloat(me.arg3); - str+=';'; - } - } - } - - - if (type==3) str+='\n\nCustom :\n'; - - str+='|'; - str+=Game.saveModData(); - - Game.lastSaveData=str; - - if (type==2 || type==3) - { - return str; - } - else if (type==1) - { - str=escape(utf8_to_b64(str)+'!END!'); - return str; - } - else - { - if (Game.useLocalStorage) - { - //so we used to save the game using browser cookies, which was just really neat considering the game's name - //we're using localstorage now, which is more efficient but not as cool - //a moment of silence for our fallen puns - str=utf8_to_b64(str)+'!END!'; - if (str.length<10) - { - Game.Notify('Saving failed!','Purchasing an upgrade and saving again might fix this.
This really shouldn\'t happen; please notify Orteil on his tumblr.'); - } - else - { - str=escape(str); - localStorageSet(Game.SaveTo,str);//aaand save - if (App) App.save(str); - if (!localStorageGet(Game.SaveTo)) - { - Game.Notify(loc("Error while saving"),loc("Export your save instead!")); - } - else if (document.hasFocus()) - { - Game.Notify(loc("Game saved"),'','',1,1); - } - } - } - else//legacy system - { - //that's right - //we're using cookies - //yeah I went there - var now=new Date();//we storin dis for 5 years, people - now.setFullYear(now.getFullYear()+5);//mmh stale cookies - str=utf8_to_b64(str)+'!END!'; - Game.saveData=escape(str); - str=Game.SaveTo+'='+escape(str)+'; expires='+now.toUTCString()+';'; - document.cookie=str;//aaand save - if (App) App.save(str); - if (document.cookie.indexOf(Game.SaveTo)<0) - { - Game.Notify(loc("Error while saving"),loc("Export your save instead!"),'',0,1); - } - else if (document.hasFocus()) - { - Game.Notify(loc("Game saved"),'','',1,1); - } - } - } - } - - /*===================================================================================== - LOAD - =======================================================================================*/ - Game.salvageSave=function() - { - //for when Cookie Clicker won't load and you need your save - console.log('==================================================='); - console.log('This is your save data. Copypaste it (without quotation marks) into another version using the "Import save" feature.'); - console.log(localStorageGet(Game.SaveTo)); - } - Game.LoadSave=function(data,ignoreVersionIssues) - { - var str=''; - if (typeof data!=='undefined') str=unescape(data); - else - { - if (App) - { - App.getMostRecentSave(function(data){Game.LoadSave(data,true);}); - return false; - } - if (Game.useLocalStorage) - { - var local=localStorageGet(Game.SaveTo); - if (!local)//no localstorage save found? let's get the cookie one last time - { - if (document.cookie.indexOf(Game.SaveTo)>=0) - { - str=unescape(document.cookie.split(Game.SaveTo+'=')[1]); - document.cookie=Game.SaveTo+'=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; - } - else return false; - } - else - { - str=unescape(local); - } - } - else//legacy system - { - if (document.cookie.indexOf(Game.SaveTo)>=0) str=unescape(document.cookie.split(Game.SaveTo+'=')[1]);//get cookie here - else return false; - } - } - if (str!='') - { - var version=0; - var oldstr=str.split('|'); - if (oldstr[0].length<1) return false; - else - { - str=str.split('!END!')[0]; - str=b64_to_utf8(str); - } - if (str=='') return false; - else - { - var spl=''; - str=str.split('|'); - version=parseFloat(str[0]); - Game.loadedFromVersion=version; - - if (isNaN(version) || str.length<5) - { - Game.Notify(loc("Error importing save"),loc("Oops, looks like the import string is all wrong!"),'',6,1); - return false; - } - if (version>=1 && version>Game.version) - { - if (ignoreVersionIssues) Game.Notify('Retrieving save from a future version.','That\'s...odd.','',0,1); - else - { - Game.Notify(loc("Error importing save"),loc("You are attempting to load a save from a future version (v. %1; you are using v. %2).",[version,Game.version]),'',6,1); - return false; - } - } - if (version>=1) - { - Game.T=0; - - spl=str[2].split(';');//save stats - Game.startDate=parseInt(spl[0]); - Game.fullDate=parseInt(spl[1]); - Game.lastDate=parseInt(spl[2]); - var bakeryName=(spl[3]?spl[3]:Game.GetBakeryName()); - Game.seed=spl[4]?spl[4]:Game.makeSeed(); - //prefs - if (version<1.0503) spl=str[3].split(''); - else if (version<2.0046) spl=unpack2(str[3]).split(''); - else spl=(str[3]).split(''); - Game.prefs.particles=parseInt(spl[0]); - Game.prefs.numbers=parseInt(spl[1]); - Game.prefs.autosave=parseInt(spl[2]); - Game.prefs.autoupdate=spl[3]?parseInt(spl[3]):1; - Game.prefs.milk=spl[4]?parseInt(spl[4]):1; - Game.prefs.fancy=parseInt(spl[5]);if (Game.prefs.fancy) Game.removeClass('noFancy'); else if (!Game.prefs.fancy) Game.addClass('noFancy'); - Game.prefs.warn=spl[6]?parseInt(spl[6]):0; - Game.prefs.cursors=spl[7]?parseInt(spl[7]):0; - Game.prefs.focus=spl[8]?parseInt(spl[8]):0; - Game.prefs.format=spl[9]?parseInt(spl[9]):0; - Game.prefs.notifs=spl[10]?parseInt(spl[10]):0; - Game.prefs.wobbly=spl[11]?parseInt(spl[11]):0; - Game.prefs.monospace=spl[12]?parseInt(spl[12]):0; - Game.prefs.filters=spl[13]?parseInt(spl[13]):1;if (Game.prefs.filters) Game.removeClass('noFilters'); else if (!Game.prefs.filters) Game.addClass('noFilters'); - Game.prefs.cookiesound=spl[14]?parseInt(spl[14]):1; - Game.prefs.crates=spl[15]?parseInt(spl[15]):0; - Game.prefs.showBackupWarning=spl[16]?parseInt(spl[16]):1; - Game.prefs.extraButtons=spl[17]?parseInt(spl[17]):1;if (!Game.prefs.extraButtons) Game.removeClass('extraButtons'); else if (Game.prefs.extraButtons) Game.addClass('extraButtons'); - Game.prefs.askLumps=spl[18]?parseInt(spl[18]):0; - Game.prefs.customGrandmas=spl[19]?parseInt(spl[19]):1; - Game.prefs.timeout=spl[20]?parseInt(spl[20]):0; - Game.prefs.cloudSave=spl[21]?parseInt(spl[21]):1; - Game.prefs.bgMusic=spl[22]?parseInt(spl[22]):1; - Game.prefs.notScary=spl[23]?parseInt(spl[23]):0; - Game.prefs.fullscreen=spl[24]?parseInt(spl[24]):0;if (App) App.setFullscreen(Game.prefs.fullscreen); - Game.prefs.screenreader=spl[25]?parseInt(spl[25]):0; - Game.prefs.discordPresence=spl[26]?parseInt(spl[26]):1; - BeautifyAll(); - spl=str[4].split(';');//cookies and lots of other stuff - Game.cookies=parseFloat(spl[0]); - Game.cookiesEarned=parseFloat(spl[1]); - Game.cookieClicks=spl[2]?parseInt(spl[2]):0; - Game.goldenClicks=spl[3]?parseInt(spl[3]):0; - Game.handmadeCookies=spl[4]?parseFloat(spl[4]):0; - Game.missedGoldenClicks=spl[5]?parseInt(spl[5]):0; - Game.bgType=spl[6]?parseInt(spl[6]):0; - Game.milkType=spl[7]?parseInt(spl[7]):0; - Game.cookiesReset=spl[8]?parseFloat(spl[8]):0; - Game.elderWrath=spl[9]?parseInt(spl[9]):0; - Game.pledges=spl[10]?parseInt(spl[10]):0; - Game.pledgeT=spl[11]?parseInt(spl[11]):0; - Game.nextResearch=spl[12]?parseInt(spl[12]):0; - Game.researchT=spl[13]?parseInt(spl[13]):0; - Game.resets=spl[14]?parseInt(spl[14]):0; - Game.goldenClicksLocal=spl[15]?parseInt(spl[15]):0; - Game.cookiesSucked=spl[16]?parseFloat(spl[16]):0; - Game.wrinklersPopped=spl[17]?parseInt(spl[17]):0; - Game.santaLevel=spl[18]?parseInt(spl[18]):0; - Game.reindeerClicked=spl[19]?parseInt(spl[19]):0; - Game.seasonT=spl[20]?parseInt(spl[20]):0; - Game.seasonUses=spl[21]?parseInt(spl[21]):0; - Game.season=spl[22]?spl[22]:Game.baseSeason; - var wrinklers={amount:spl[23]?parseFloat(spl[23]):0,number:spl[24]?parseInt(spl[24]):0}; - Game.prestige=spl[25]?parseFloat(spl[25]):0; - Game.heavenlyChips=spl[26]?parseFloat(spl[26]):0; - Game.heavenlyChipsSpent=spl[27]?parseFloat(spl[27]):0; - Game.heavenlyCookies=spl[28]?parseFloat(spl[28]):0; - Game.ascensionMode=spl[29]?parseInt(spl[29]):0; - Game.permanentUpgrades[0]=spl[30]?parseInt(spl[30]):-1;Game.permanentUpgrades[1]=spl[31]?parseInt(spl[31]):-1;Game.permanentUpgrades[2]=spl[32]?parseInt(spl[32]):-1;Game.permanentUpgrades[3]=spl[33]?parseInt(spl[33]):-1;Game.permanentUpgrades[4]=spl[34]?parseInt(spl[34]):-1; - //if (version<1.05) {Game.heavenlyChipsEarned=Game.HowMuchPrestige(Game.cookiesReset);Game.heavenlyChips=Game.heavenlyChipsEarned;} - Game.dragonLevel=spl[35]?parseInt(spl[35]):0; - if (version<2.0041 && Game.dragonLevel==Game.dragonLevels.length-2) {Game.dragonLevel=Game.dragonLevels.length-1;} - Game.dragonAura=spl[36]?parseInt(spl[36]):0; - Game.dragonAura2=spl[37]?parseInt(spl[37]):0; - Game.chimeType=spl[38]?parseInt(spl[38]):0; - Game.volume=spl[39]?parseInt(spl[39]):75; - wrinklers.shinies=spl[40]?parseInt(spl[40]):0; - wrinklers.amountShinies=spl[41]?parseFloat(spl[41]):0; - Game.lumps=spl[42]?parseFloat(spl[42]):-1; - Game.lumpsTotal=spl[43]?parseFloat(spl[43]):-1; - Game.lumpT=spl[44]?parseInt(spl[44]):Date.now(); - Game.lumpRefill=spl[45]?parseInt(spl[45]):0; - if (version<2.022) Game.lumpRefill=Game.fps*60; - Game.lumpCurrentType=spl[46]?parseInt(spl[46]):0; - Game.vault=spl[47]?spl[47].split(','):[]; - for (var i in Game.vault){Game.vault[i]=parseInt(Game.vault[i]);} - var actualHeralds=Game.heralds;//we store the actual amount of heralds to restore it later; here we used the amount present in the save to compute offline CpS - Game.heralds=spl[48]?parseFloat(spl[48]):Game.heralds; - Game.fortuneGC=spl[49]?parseInt(spl[49]):0; - Game.fortuneCPS=spl[50]?parseInt(spl[50]):0; - Game.cookiesPsRawHighest=spl[51]?parseFloat(spl[51]):0; - Game.volumeMusic=spl[52]?parseInt(spl[52]):50; - - spl=str[5].split(';');//buildings - Game.BuildingsOwned=0; - for (var i in Game.ObjectsById) - { - var me=Game.ObjectsById[i]; - me.switchMinigame(false); - me.pics=[]; - if (spl[i]) - { - var mestr=spl[i].toString().split(','); - me.amount=parseInt(mestr[0]);me.bought=parseInt(mestr[1]);me.totalCookies=parseFloat(mestr[2]);me.level=parseInt(mestr[3]||0);me.highest=(version>=2.024?parseInt(mestr[6]):me.amount); - if (me.minigame && me.minigameLoaded && me.minigame.reset) {me.minigame.reset(true);me.minigame.load(mestr[4]||'');} else me.minigameSave=(mestr[4]||0); - me.muted=parseInt(mestr[5])||0; - Game.BuildingsOwned+=me.amount; - if (version<2.003) me.level=0; - } - else - { - me.amount=0;me.unlocked=0;me.bought=0;me.highest=0;me.totalCookies=0;me.level=0; - } - } - - Game.setVolumeMusic(Game.volumeMusic); - - Game.LoadMinigames(); - - if (version<1.035)//old non-binary algorithm - { - spl=str[6].split(';');//upgrades - Game.UpgradesOwned=0; - for (var i in Game.UpgradesById) - { - var me=Game.UpgradesById[i]; - if (spl[i]) - { - var mestr=spl[i].split(','); - me.unlocked=parseInt(mestr[0]);me.bought=parseInt(mestr[1]); - if (me.bought && Game.CountsAsUpgradeOwned(me.pool)) Game.UpgradesOwned++; - } - else - { - me.unlocked=0;me.bought=0; - } - } - if (str[7]) spl=str[7].split(';'); else spl=[];//achievements - Game.AchievementsOwned=0; - for (var i in Game.AchievementsById) - { - var me=Game.AchievementsById[i]; - if (spl[i]) - { - var mestr=spl[i].split(','); - me.won=parseInt(mestr[0]); - } - else - { - me.won=0; - } - if (me.won && Game.CountsAsAchievementOwned(me.pool)) Game.AchievementsOwned++; - } - } - else if (version<1.0502)//old awful packing system - { - if (str[6]) spl=str[6]; else spl=[];//upgrades - if (version<1.05) spl=UncompressLargeBin(spl); - else spl=unpack(spl); - Game.UpgradesOwned=0; - for (var i in Game.UpgradesById) - { - var me=Game.UpgradesById[i]; - if (spl[i*2]) - { - var mestr=[spl[i*2],spl[i*2+1]]; - me.unlocked=parseInt(mestr[0]);me.bought=parseInt(mestr[1]); - if (me.bought && Game.CountsAsUpgradeOwned(me.pool)) Game.UpgradesOwned++; - } - else - { - me.unlocked=0;me.bought=0; - } - } - if (str[7]) spl=str[7]; else spl=[];//achievements - if (version<1.05) spl=UncompressLargeBin(spl); - else spl=unpack(spl); - Game.AchievementsOwned=0; - for (var i in Game.AchievementsById) - { - var me=Game.AchievementsById[i]; - if (spl[i]) - { - var mestr=[spl[i]]; - me.won=parseInt(mestr[0]); - } - else - { - me.won=0; - } - if (me.won && Game.CountsAsAchievementOwned(me.pool)) Game.AchievementsOwned++; - } - } - else - { - if (str[6]) spl=str[6]; else spl=[];//upgrades - if (version<2.0046) spl=unpack2(spl).split(''); - else spl=(spl).split(''); - Game.UpgradesOwned=0; - for (var i in Game.UpgradesById) - { - var me=Game.UpgradesById[i]; - if (spl[i*2]) - { - var mestr=[spl[i*2],spl[i*2+1]]; - me.unlocked=parseInt(mestr[0]);me.bought=parseInt(mestr[1]); - if (me.bought && Game.CountsAsUpgradeOwned(me.pool)) Game.UpgradesOwned++; - } - else - { - me.unlocked=0;me.bought=0; - } - } - if (str[7]) spl=str[7]; else spl=[];//achievements - if (version<2.0046) spl=unpack2(spl).split(''); - else spl=(spl).split(''); - Game.AchievementsOwned=0; - for (var i in Game.AchievementsById) - { - var me=Game.AchievementsById[i]; - if (spl[i]) - { - var mestr=[spl[i]]; - me.won=parseInt(mestr[0]); - } - else - { - me.won=0; - } - if (me.won && Game.CountsAsAchievementOwned(me.pool)) Game.AchievementsOwned++; - } - } - - Game.killBuffs(); - var buffsToLoad=[]; - spl=(str[8]||'').split(';');//buffs - for (var i in spl) - { - if (spl[i]) - { - var mestr=spl[i].toString().split(','); - buffsToLoad.push(mestr); - } - } - - spl=(str[9]||'').split(';');//mod data - - for (var i in spl) - { - if (spl[i]) - { - var data=spl[i].split(':'); - var modId=data[0]; - if (modId=='META') continue; - data.shift(); - data=Game.safeLoadString(data.join(':')); - Game.modSaveData[modId]=data; - } - } - - for (var i in Game.ObjectsById) - { - var me=Game.ObjectsById[i]; - if (me.buyFunction) me.buyFunction(); - me.refresh(); - if (me.id>0) - { - if (me.muted) me.mute(1); - } - } - - if (version<1.0503)//upgrades that used to be regular, but are now heavenly - { - var me=Game.Upgrades['Persistent memory'];me.unlocked=0;me.bought=0; - var me=Game.Upgrades['Season switcher'];me.unlocked=0;me.bought=0; - } - - if (Game.bgType==-1) Game.bgType=0; - if (Game.milkType==-1 || !Game.AllMilks[Game.milkType]) Game.milkType=0; - - - //advance timers - var framesElapsed=Math.ceil(((Date.now()-Game.lastDate)/1000)*Game.fps); - if (Game.pledgeT>0) Game.pledgeT=Math.max(Game.pledgeT-framesElapsed,1); - if (Game.seasonT>0) Game.seasonT=Math.max(Game.seasonT-framesElapsed,1); - if (Game.researchT>0) Game.researchT=Math.max(Game.researchT-framesElapsed,1); - - - Game.ResetWrinklers(); - Game.LoadWrinklers(wrinklers.amount,wrinklers.number,wrinklers.shinies,wrinklers.amountShinies); - - //recompute season trigger prices - if (Game.Has('Season switcher')) {for (var i in Game.seasons) {Game.Unlock(Game.seasons[i].trigger);}} - Game.computeSeasonPrices(); - - //recompute prestige - Game.prestige=Math.floor(Game.HowMuchPrestige(Game.cookiesReset)); - //if ((Game.heavenlyChips+Game.heavenlyChipsSpent)Beta patch
We\'ve tweaked some things and fixed some others, please check the update notes!
Of note : due to changes in prestige balancing, all your heavenly upgrades have been removed and your heavenly chips refunded; you\'ll be able to reallocate them next time you ascend.
Thank you again for beta-testing Cookie Clicker!
',[['Alright then!','Game.ClosePrompt();']]);},200); - } - if (version<=1.0466)//are we loading from the old live version? reset HCs - { - Game.heavenlyChips=Game.prestige; - Game.heavenlyChipsSpent=0; - } - - if (Game.ascensionMode!=1) - { - if (Game.Has('Starter kit')) Game.Objects['Cursor'].free=10; - if (Game.Has('Starter kitchen')) Game.Objects['Grandma'].free=5; - } - - Game.CalculateGains(); - - var timeOffline=(Date.now()-Game.lastDate)/1000; - - if (Math.random()<1/10000) Game.TOYS=1;//teehee! - if (Math.random()<1/10000) Game.WINKLERS=1;//squeak - - //compute cookies earned while the game was closed - if (Game.mobile || Game.Has('Perfect idling') || Game.Has('Twin Gates of Transcendence')) - { - if (Game.Has('Perfect idling')) - { - var maxTime=60*60*24*1000000000; - var percent=100; - } - else - { - var maxTime=60*60; - if (Game.Has('Belphegor')) maxTime*=2; - if (Game.Has('Mammon')) maxTime*=2; - if (Game.Has('Abaddon')) maxTime*=2; - if (Game.Has('Satan')) maxTime*=2; - if (Game.Has('Asmodeus')) maxTime*=2; - if (Game.Has('Beelzebub')) maxTime*=2; - if (Game.Has('Lucifer')) maxTime*=2; - - var percent=5; - if (Game.Has('Angels')) percent+=10; - if (Game.Has('Archangels')) percent+=10; - if (Game.Has('Virtues')) percent+=10; - if (Game.Has('Dominions')) percent+=10; - if (Game.Has('Cherubim')) percent+=10; - if (Game.Has('Seraphim')) percent+=10; - if (Game.Has('God')) percent+=10; - - if (Game.Has('Chimera')) {maxTime+=60*60*24*2;percent+=5;} - - if (Game.Has('Fern tea')) percent+=3; - if (Game.Has('Ichor syrup')) percent+=7; - if (Game.Has('Fortune #102')) percent+=1; - } - - var timeOfflineOptimal=Math.min(timeOffline,maxTime); - var timeOfflineReduced=Math.max(0,timeOffline-timeOfflineOptimal); - var amount=(timeOfflineOptimal+timeOfflineReduced*0.1)*Game.cookiesPs*(percent/100); - - if (amount>0) - { - Game.Notify(loc("Welcome back!"),loc("You earned %1 while you were away.",loc("%1 cookie",LBeautify(amount)))+(EN?('
('+Game.sayTime(timeOfflineOptimal*Game.fps,-1)+' at '+Math.floor(percent)+'% CpS'+(timeOfflineReduced?', plus '+Game.sayTime(timeOfflineReduced*Game.fps,-1)+' at '+(Math.floor(percent*10)/100)+'%':'')+'.)'):''),[Math.floor(Math.random()*16),11]); - Game.Earn(amount); - } - } - - //we load buffs after everything as we do not want them to interfer with offline CpS - for (var i in buffsToLoad) - { - var mestr=buffsToLoad[i]; - var type=Game.buffTypes[parseInt(mestr[0])]; - Game.gainBuff(type.name,parseFloat(mestr[1])/Game.fps,parseFloat(mestr[3]||0),parseFloat(mestr[4]||0),parseFloat(mestr[5]||0)).time=parseFloat(mestr[2]); - } - - - Game.loadLumps(timeOffline); - - Game.bakeryNameRefresh(); - - } - else//importing old version save - { - Game.Notify(loc("Error importing save"),loc("Sorry, you can't import saves from the classic version."),'',6,1); - return false; - } - - if (Game.prefs.screenreader) - { - Game.BuildStore(); - } - - Game.RebuildUpgrades(); - - Game.TickerAge=0; - Game.TickerEffect=0; - - Game.elderWrathD=0; - Game.recalculateGains=1; - Game.storeToRefresh=1; - Game.upgradesToRebuild=1; - - Game.buyBulk=1;Game.buyMode=1;Game.storeBulkButton(-1); - - - Game.specialTab=''; - Game.ToggleSpecialMenu(0); - - Game.killShimmers(); - - if (Game.T>Game.fps*5 && Game.ReincarnateTimer==0)//fade out of black and pop the cookie - { - Game.ReincarnateTimer=1; - Game.addClass('reincarnating'); - Game.BigCookieSize=0; - } - - - var prestigeUpgradesOwned=0; - for (var i in Game.Upgrades) - { - if (Game.Upgrades[i].bought && Game.Upgrades[i].pool=='prestige') prestigeUpgradesOwned++; - } - if (prestigeUpgradesOwned>=100) Game.Win('All the stars in heaven'); - - - if (versionValentine's season
!
Love's in the air and cookies are just that much sweeter!"),[20,3],60*3); - else if (Game.season=='fools') Game.Notify(loc("Business Day!"),loc("It's Business season!
Don't panic! Things are gonna be looking a little more corporate for a few days."),[17,6],60*3); - else if (Game.season=='halloween') Game.Notify(loc("Halloween!"),loc("It's Halloween season!
Everything is just a little bit spookier!"),[13,8],60*3); - else if (Game.season=='christmas') Game.Notify(loc("Christmas time!"),loc("It's Christmas season!
Bring good cheer to all and you just may get cookies in your stockings!"),[12,10],60*3); - else if (Game.season=='easter') Game.Notify(loc("Easter!"),loc("It's Easter season!
Keep an eye out and you just might click a rabbit or two!"),[0,12],60*3); - } - - Game.heralds=actualHeralds; - - Game.Notify(loc("Game loaded"),'','',1,1); - - if (!App && Game.prefs.showBackupWarning==1) Game.showBackupWarning(); - - if (App) App.justLoadedSave(); - } - } - else return false; - return true; - } - - /*===================================================================================== - RESET - =======================================================================================*/ - Game.Reset=function(hard) - { - Game.T=0; - - if (hard) {Game.loadedFromVersion=Game.version;} - - var cookiesForfeited=Game.cookiesEarned; - if (!hard) - { - if (cookiesForfeited>=1000000) Game.Win('Sacrifice'); - if (cookiesForfeited>=1000000000) Game.Win('Oblivion'); - if (cookiesForfeited>=1000000000000) Game.Win('From scratch'); - if (cookiesForfeited>=1000000000000000) Game.Win('Nihilism'); - if (cookiesForfeited>=1000000000000000000) Game.Win('Dematerialize'); - if (cookiesForfeited>=1000000000000000000000) Game.Win('Nil zero zilch'); - if (cookiesForfeited>=1000000000000000000000000) Game.Win('Transcendence'); - if (cookiesForfeited>=1000000000000000000000000000) Game.Win('Obliterate'); - if (cookiesForfeited>=1000000000000000000000000000000) Game.Win('Negative void'); - if (cookiesForfeited>=1000000000000000000000000000000000) Game.Win('To crumbs, you say?'); - if (cookiesForfeited>=1000000000000000000000000000000000000) Game.Win('You get nothing'); - if (cookiesForfeited>=1000000000000000000000000000000000000000) Game.Win('Humble rebeginnings'); - if (cookiesForfeited>=1000000000000000000000000000000000000000000) Game.Win('The end of the world'); - if (cookiesForfeited>=1000000000000000000000000000000000000000000000) Game.Win('Oh, you\'re back'); - if (cookiesForfeited>=1000000000000000000000000000000000000000000000000) Game.Win('Lazarus'); - if (cookiesForfeited>=1000000000000000000000000000000000000000000000000000) Game.Win('Smurf account'); - if (cookiesForfeited>=1000000000000000000000000000000000000000000000000000000) Game.Win('If at first you don\'t succeed'); - - if (Math.round(Game.cookies)==1000000000000) Game.Win('When the cookies ascend just right'); - } - - Game.killBuffs(); - - Game.seed=Game.makeSeed(); - - Game.cookiesReset+=Game.cookiesEarned; - Game.cookies=0; - Game.cookiesEarned=0; - Game.cookieClicks=0; - Game.goldenClicksLocal=0; - //Game.goldenClicks=0; - //Game.missedGoldenClicks=0; - Game.handmadeCookies=0; - Game.cookiesPsRawHighest=0; - if (hard) - { - Game.bgType=0; - Game.milkType=0; - Game.chimeType=0; - - Game.vault=[]; - } - Game.pledges=0; - Game.pledgeT=0; - Game.elderWrath=0; - Game.elderWrathOld=0; - Game.elderWrathD=0; - Game.nextResearch=0; - Game.researchT=0; - Game.seasonT=0; - Game.seasonUses=0; - Game.season=Game.baseSeason; - Game.computeSeasonPrices(); - - Game.startDate=parseInt(Date.now()); - Game.lastDate=parseInt(Date.now()); - - Game.cookiesSucked=0; - Game.wrinklersPopped=0; - Game.ResetWrinklers(); - - Game.santaLevel=0; - Game.reindeerClicked=0; - - Game.dragonLevel=0; - Game.dragonAura=0; - Game.dragonAura2=0; - - Game.fortuneGC=0; - Game.fortuneCPS=0; - - Game.TickerClicks=0; - - if (Game.gainedPrestige>0) Game.resets++; - if (!hard && Game.canLumps() && Game.ascensionMode!=1) Game.addClass('lumpsOn'); - else Game.removeClass('lumpsOn'); - Game.gainedPrestige=0; - - for (var i in Game.ObjectsById) - { - var me=Game.ObjectsById[i]; - me.amount=0;me.bought=0;me.highest=0;me.free=0;me.totalCookies=0; - me.switchMinigame(false); - if (hard) {me.muted=0;} - me.pics=[]; - me.refresh(); - } - for (var i in Game.UpgradesById) - { - var me=Game.UpgradesById[i]; - if (hard || me.pool!='prestige') me.bought=0; - if (hard) me.unlocked=0; - if (me.pool!='prestige' && !me.lasting) - { - if (Game.Has('Keepsakes') && Game.seasonDrops.indexOf(me.name)!=-1 && Math.random()<1/5){} - else if (Game.ascensionMode==1 && Game.HasAchiev('O Fortuna') && me.tier=='fortune'){} - else if (Game.HasAchiev('O Fortuna') && me.tier=='fortune' && Math.random()<0.4){} - else me.unlocked=0; - } - } - - Game.BuildingsOwned=0; - Game.UpgradesOwned=0; - - Game.cookiesPsByType={}; - Game.cookiesMultByType={}; - - if (!hard) - { - if (Game.ascensionMode!=1) - { - for (var i in Game.permanentUpgrades) - { - if (Game.permanentUpgrades[i]!=-1) - {Game.UpgradesById[Game.permanentUpgrades[i]].earn();} - } - if (Game.Has('Season switcher')) {for (var i in Game.seasons) {Game.Unlock(Game.seasons[i].trigger);}} - - if (Game.Has('Starter kit')) Game.Objects['Cursor'].getFree(10); - if (Game.Has('Starter kitchen')) Game.Objects['Grandma'].getFree(5); - } - } - - /*for (var i in Game.AchievementsById) - { - var me=Game.AchievementsById[i]; - me.won=0; - }*/ - //Game.DefaultPrefs(); - BeautifyAll(); - - Game.RebuildUpgrades(); - Game.TickerAge=0; - Game.TickerEffect=0; - Game.recalculateGains=1; - Game.storeToRefresh=1; - Game.upgradesToRebuild=1; - Game.killShimmers(); - - Game.buyBulk=1;Game.buyMode=1;Game.storeBulkButton(-1); - - Game.LoadMinigames(); - for (var i in Game.ObjectsById) - { - var me=Game.ObjectsById[i]; - if (hard && me.minigame && me.minigame.launch) {me.minigame.launch();me.minigame.reset(true);} - else if (!hard && me.minigame && me.minigame.reset) me.minigame.reset(); - } - - l('toggleBox').style.display='none'; - l('toggleBox').innerHTML=''; - Game.choiceSelectorOn=-1; - Game.ToggleSpecialMenu(0); - Game.specialTab=''; - - l('logButton').classList.remove('hasUpdate'); - - Game.runModHook('reset',hard); - - if (hard) - { - Game.clicksThisSession=0; - if (Game.T>Game.fps*5 && Game.ReincarnateTimer==0)//fade out of black and pop the cookie - { - Game.ReincarnateTimer=1; - Game.addClass('reincarnating'); - Game.BigCookieSize=0; - } - Game.Notify(loc("Game reset"),EN?"So long, cookies.":loc("Good bye, cookies."),[21,6],6); - } - else Game.clicksThisSession=Math.max(Game.clicksThisSession,1); - - Game.jukebox.reset(); - if (hard) PlayCue('launch'); - else PlayCue('play'); - } - Game.HardReset=function(bypass) - { - if (!bypass) - { - Game.Prompt('

'+loc("Wipe save")+'

'+tinyIcon([15,5])+'
'+loc("Do you REALLY want to wipe your save?
You will lose your progress, your achievements, and your heavenly chips!")+'
',[[EN?'Yes!':loc("Yes"),'Game.ClosePrompt();Game.HardReset(1);','float:left'],[loc("No"),0,'float:right']]); - } - else if (bypass==1) - { - Game.Prompt('

'+loc("Wipe save")+'

'+tinyIcon([15,5])+'
'+loc("Whoah now, are you really, REALLY sure you want to go through with this?
Don't say we didn't warn you!")+'
',[[EN?'Do it!':loc("Yes"),'Game.ClosePrompt();Game.HardReset(2);','float:left'],[loc("No"),0,'float:right']]); - } - else - { - for (var i in Game.AchievementsById) - { - var me=Game.AchievementsById[i]; - me.won=0; - } - for (var i in Game.ObjectsById) - { - var me=Game.ObjectsById[i]; - me.level=0; - } - - Game.AchievementsOwned=0; - Game.goldenClicks=0; - Game.missedGoldenClicks=0; - Game.Reset(1); - Game.resets=0; - Game.fullDate=parseInt(Date.now()); - Game.bakeryName=Game.GetBakeryName(); - Game.bakeryNameRefresh(); - Game.cookiesReset=0; - Game.prestige=0; - Game.heavenlyChips=0; - Game.heavenlyChipsSpent=0; - Game.heavenlyCookies=0; - Game.permanentUpgrades=[-1,-1,-1,-1,-1]; - Game.ascensionMode=0; - Game.lumps=-1; - Game.lumpsTotal=-1; - Game.lumpT=Date.now(); - Game.lumpRefill=0; - Game.removeClass('lumpsOn'); - if (App) App.hardReset(); - } - } - - - - Game.onCrate=0; - Game.setOnCrate=function(what) - { - Game.onCrate=what; - } - Game.crate=function(me,context,forceClickStr,id,style) - { - //produce a crate with associated tooltip for an upgrade or achievement - //me is an object representing the upgrade or achievement - //context can be "store", "ascend", "stats" or undefined - //forceClickStr changes what is done when the crate is clicked - //id is the resulting div's desired id - - var classes='crate'; - var enabled=0; - var noFrame=0; - var attachment='top'; - var neuromancy=0; - if (context=='stats' && (Game.Has('Neuromancy') || (Game.sesame && me.pool=='debug'))) neuromancy=1; - var mysterious=0; - var clickStr=''; - - if (me.type=='upgrade') - { - var canBuy=(context=='store'?me.canBuy():true); - if (context=='stats' && me.bought==0 && !Game.Has('Neuromancy') && (!Game.sesame || me.pool!='debug')) return ''; - else if (context=='stats' && (Game.Has('Neuromancy') || (Game.sesame && me.pool=='debug'))) neuromancy=1; - else if (context=='store' && !canBuy) enabled=0; - else if (context=='ascend' && me.bought==0) enabled=0; - else enabled=1; - if (me.bought>0) enabled=1; - - if (context=='stats' && !Game.prefs.crates) noFrame=1; - - classes+=' upgrade'; - if (me.pool=='prestige') classes+=' heavenly'; - - - if (neuromancy) clickStr='Game.UpgradesById['+me.id+'].toggle();'; - } - else if (me.type=='achievement') - { - if (context=='stats' && me.won==0 && me.pool!='normal') return ''; - else if (context!='stats') enabled=1; - - if (context=='stats' && !Game.prefs.crates) noFrame=1; - - classes+=' achievement'; - if (me.pool=='shadow') classes+=' shadow'; - if (me.won>0) enabled=1; - else mysterious=1; - if (!enabled) clickStr='Game.AchievementsById['+me.id+'].click();'; - - if (neuromancy) clickStr='Game.AchievementsById['+me.id+'].toggle();'; - } - - if (context=='store') attachment='store'; - - if (forceClickStr) clickStr=forceClickStr; - - if (me.choicesFunction) classes+=' selector'; - - - var icon=me.icon; - if (mysterious) icon=[0,7]; - - if (me.iconFunction) icon=me.iconFunction(); - - if (me.bought && context=='store') enabled=0; - - if (enabled) classes+=' enabled';// else classes+=' disabled'; - if (noFrame) classes+=' noFrame'; - - var text=[]; - if (Game.sesame) - { - if (Game.debuggedUpgradeCpS[me.name] || Game.debuggedUpgradeCpClick[me.name]) - { - text.push('x'+Beautify(1+Game.debuggedUpgradeCpS[me.name],2));text.push(Game.debugColors[Math.floor(Math.max(0,Math.min(Game.debugColors.length-1,Math.pow(Game.debuggedUpgradeCpS[me.name]/2,0.5)*Game.debugColors.length)))]); - text.push('x'+Beautify(1+Game.debuggedUpgradeCpClick[me.name],2));text.push(Game.debugColors[Math.floor(Math.max(0,Math.min(Game.debugColors.length-1,Math.pow(Game.debuggedUpgradeCpClick[me.name]/2,0.5)*Game.debugColors.length)))]); - } - if (Game.extraInfo) {text.push(Math.floor(me.order)+(me.power?'
P:'+me.power:''));text.push('#fff');} - } - var textStr=''; - for (var i=0;i'+text[i]+'
'; - } - return (Game.prefs.screenreader?'':''); - } - Game.crateTooltip=function(me,context) - { - var tags=[]; - mysterious=0; - var neuromancy=0; - var price=''; - if (context=='stats' && (Game.Has('Neuromancy') || (Game.sesame && me.pool=='debug'))) neuromancy=1; - - var ariaText=''; - - if (me.type=='upgrade') - { - ariaText+='Upgrade. '; - - if (me.pool=='prestige') tags.push(loc("[Tag]Heavenly",0,'Heavenly'),'#efa438'); - else if (me.pool=='tech') tags.push(loc("[Tag]Tech",0,'Tech'),'#36a4ff'); - else if (me.pool=='cookie') tags.push(loc("[Tag]Cookie",0,'Cookie'),0); - else if (me.pool=='debug') tags.push(loc("[Tag]Debug",0,'Debug'),'#00c462'); - else if (me.pool=='toggle') tags.push(loc("[Tag]Switch",0,'Switch'),0); - else tags.push(loc("[Tag]Upgrade",0,'Upgrade'),0); - - if (Game.Has('Label printer')) - { - if (me.tier!=0) tags.push(loc("Tier:")+' '+loc("[Tier]"+Game.Tiers[me.tier].name,0,Game.Tiers[me.tier].name),Game.Tiers[me.tier].color); - if (me.name=='Label printer' || me.name=='This upgrade') tags.push(loc("Tier:")+' '+loc("[Tier]Self-referential"),'#ff00ea'); - } - - if (me.isVaulted()) tags.push(loc("Vaulted"),'#4e7566'); - - if (me.bought>0) - { - ariaText+='Owned. '; - if (me.pool=='tech') tags.push(loc("Researched"),0); - else if (EN && me.kitten) tags.push('Purrchased',0); - else tags.push(loc("Purchased"),0); - } - - if (me.lasting && me.unlocked) tags.push(loc("Unlocked forever"),'#f2ff87'); - - if (neuromancy && me.bought==0) tags.push(loc("Click to learn!"),'#00c462'); - else if (neuromancy && me.bought>0) tags.push(loc("Click to unlearn!"),'#00c462'); - - var canBuy=(context=='store'?me.canBuy():true); - var cost=me.getPrice(); - if (me.priceLumps>0) cost=me.priceLumps; - - if (me.priceLumps==0 && cost==0) price=''; - else - { - price='
'+Beautify(Math.round(cost))+''+((me.pool!='prestige' && me.priceLumps==0)?Game.costDetails(cost):'')+'
'; - - ariaText+=(me.bought?'Bought for':canBuy?'Can buy for':'Cannot afford the')+' '+Beautify(Math.round(cost))+' '+((me.priceLumps>0)?'sugar lumps':(me.pool=='prestige')?'heavenly chips':'cookies')+'. '; - } - } - else if (me.type=='achievement') - { - ariaText+='Achievement. '; - if (me.pool=='shadow') tags.push(loc("Shadow Achievement"),'#9700cf'); - else tags.push(loc("Achievement"),0); - if (me.won>0) {tags.push(loc("Unlocked"),0);ariaText+='Unlocked. ';} - else {tags.push(loc("Locked"),0);mysterious=1;} - - if (neuromancy && me.won==0) tags.push(loc("Click to win!"),'#00c462'); - else if (neuromancy && me.won>0) tags.push(loc("Click to lose!"),'#00c462'); - } - - var tagsStr=''; - for (var i=0;i'+tags[i]+''; - } - - var icon=me.icon; - if (mysterious) icon=[0,7]; - - if (me.iconFunction) icon=me.iconFunction(); - - ariaText+=(mysterious?'Hidden':me.dname)+'. '; - - var tip=''; - if (context=='store') - { - if (me.pool!='toggle' && me.pool!='tech') - { - var purchase=me.kitten?'purrchase':'purchase'; - if (Game.Has('Inspired checklist')) - { - if (me.isVaulted()) tip=EN?('Upgrade is vaulted and will not be auto-'+purchase+'d.
Click to '+purchase+'. Shift-click to unvault.'):(loc("Upgrade is vaulted and will not be auto-purchased.")+'
'+loc("Click to purchase.")+' '+loc("%1 to unvault.",loc("Shift-click"))); - else tip=EN?('Click to '+purchase+'. Shift-click to vault.'):(loc("Click to purchase.")+' '+loc("%1 to vault.",loc("Shift-click"))); - if (EN){ - if (Game.keys[16]) tip+='
(You are holding Shift.)'; - else tip+='
(You are not holding Shift.)'; - } - } - else tip=EN?('Click to '+purchase+'.'):loc("Click to purchase."); - } - else if (me.pool=='toggle' && me.choicesFunction) tip=loc("Click to open selector."); - else if (me.pool=='toggle') tip=loc("Click to toggle."); - else if (me.pool=='tech') tip=loc("Click to research."); - } - - if (tip!='') ariaText+=tip+' '; - - var desc=me.ddesc; - if (me.descFunc) desc=me.descFunc(context); - if (me.bought && context=='store' && me.displayFuncWhenOwned) desc=me.displayFuncWhenOwned()+'
'+desc; - if (me.unlockAt) - { - if (me.unlockAt.require) - { - var it=Game.Upgrades[me.unlockAt.require]; - desc='
'+(EN?'From':loc("Source:"))+' '+tinyIcon(it.icon)+' '+it.dname+'
'+desc; - } - else if (me.unlockAt.text) - { - //var it=Game.Upgrades[me.unlockAt.require]; - desc='
'+(EN?'From':loc("Source:"))+' '+text+'
'+desc; - } - } - - if (!mysterious) ariaText+='Description: '+desc+' '; - - if (Game.prefs.screenreader) - { - var ariaLabel=l('ariaReader-'+me.type+'-'+me.id); - if (ariaLabel) ariaLabel.innerHTML=ariaText.replace(/(<([^>]+)>)/gi,' '); - } - - return '
'+ - '
'+ - (me.bought && context=='store'?'':price)+ - '
'+(mysterious?'???':me.dname)+'
'+ - tagsStr+ - '
'+(mysterious?'???':desc)+'
'+ - (tip!=''?('
'+tip+'
'):'')+ - (Game.sesame?('
Id: '+me.id+' | Order: '+Math.floor(me.order)+(me.tier?' | Tier: '+me.tier:'')+'
'):''); - } - - Game.costDetails=function(cost) - { - if (!Game.Has('Genius accounting')) return ''; - if (!cost) return ''; - var priceInfo=''; - var cps=Game.cookiesPs*(1-Game.cpsSucked); - if (cost>Game.cookies) priceInfo+=loc("in %1",Game.sayTime(((cost-Game.cookies)/cps+1)*Game.fps))+'
'; - priceInfo+=loc("%1 worth",Game.sayTime((cost/cps+1)*Game.fps))+'
'; - priceInfo+=loc("%1% of bank",Beautify((cost/Game.cookies)*100,1))+'
'; - return '
'+priceInfo+'
'; - } - - - /*===================================================================================== - PRESTIGE - =======================================================================================*/ - - Game.HCfactor=3; - Game.HowMuchPrestige=function(cookies)//how much prestige [cookies] should land you - { - return Math.pow(cookies/1000000000000,1/Game.HCfactor); - } - Game.HowManyCookiesReset=function(chips)//how many cookies [chips] are worth - { - //this must be the inverse of the above function (ie. if cookies=chips^2, chips=cookies^(1/2) ) - return Math.pow(chips,Game.HCfactor)*1000000000000; - } - Game.gainedPrestige=0; - Game.EarnHeavenlyChips=function(cookiesForfeited,silent) - { - //recalculate prestige and chips owned - var prestige=Math.floor(Game.HowMuchPrestige(Game.cookiesReset+cookiesForfeited)); - prestige=Math.max(0,prestige); - if (prestige!=Game.prestige)//did we change prestige levels? - { - var prestigeDifference=prestige-Game.prestige; - Game.gainedPrestige=prestigeDifference; - Game.heavenlyChips+=prestigeDifference; - Game.prestige=prestige; - if (!silent && prestigeDifference>0) Game.Notify(loc("You forfeit your %1.",loc("%1 cookie",LBeautify(cookiesForfeited))),loc("You gain %1!",loc("%1 prestige level",LBeautify(prestigeDifference))),[19,7]); - } - } - - Game.GetHeavenlyMultiplier=function() - { - var heavenlyMult=0; - if (Game.Has('Heavenly chip secret')) heavenlyMult+=0.05; - if (Game.Has('Heavenly cookie stand')) heavenlyMult+=0.20; - if (Game.Has('Heavenly bakery')) heavenlyMult+=0.25; - if (Game.Has('Heavenly confectionery')) heavenlyMult+=0.25; - if (Game.Has('Heavenly key')) heavenlyMult+=0.25; - //if (Game.hasAura('Dragon God')) heavenlyMult*=1.05; - heavenlyMult*=1+Game.auraMult('Dragon God')*0.05; - if (Game.Has('Lucky digit')) heavenlyMult*=1.01; - if (Game.Has('Lucky number')) heavenlyMult*=1.01; - if (Game.Has('Lucky payout')) heavenlyMult*=1.01; - if (Game.hasGod) - { - var godLvl=Game.hasGod('creation'); - if (godLvl==1) heavenlyMult*=0.7; - else if (godLvl==2) heavenlyMult*=0.8; - else if (godLvl==3) heavenlyMult*=0.9; - } - return heavenlyMult; - } - - Game.ascensionModes={ - 0:{name:'None',dname:loc("None [ascension type]"),desc:loc("No special modifiers."),icon:[10,0]}, - 1:{name:'Born again',dname:loc("Born again [ascension type]"),desc:loc("This run will behave as if you'd just started the game from scratch. Prestige levels and heavenly upgrades will have no effect, as will sugar lumps and building levels. Perma-upgrades and minigames will be unavailable.
Some achievements are only available in this mode."),icon:[2,7]}/*, - 2:{name:'Trigger finger',dname:loc("Trigger finger [ascension type]"),desc:loc("In this run, scrolling your mouse wheel on the cookie counts as clicking it. Some upgrades introduce new clicking behaviors.
No clicking achievements may be obtained in this mode.
Reaching 1 quadrillion cookies in this mode unlocks a special heavenly upgrade."),icon:[12,0]}*/ - }; - - Game.ascendMeterPercent=0; - Game.ascendMeterPercentT=0; - Game.ascendMeterLevel=100000000000000000000000000000; - - Game.nextAscensionMode=0; - Game.UpdateAscensionModePrompt=function() - { - var icon=Game.ascensionModes[Game.nextAscensionMode].icon; - var name=Game.ascensionModes[Game.nextAscensionMode].dname; - l('ascendModeButton').innerHTML= - '
'+loc("Challenge mode for the next run:")+'
'+name+'
'+loc("Challenge modes apply special modifiers to your next ascension.
Click to change.")+'
' - ,'bottom-right')+' style="opacity:1;float:none;display:block;background-position:'+(-icon[0]*48)+'px '+(-icon[1]*48)+'px;">'; - } - Game.PickAscensionMode=function() - { - PlaySound('snd/tick.mp3'); - Game.tooltip.hide(); - - var str=''; - for (var i in Game.ascensionModes) - { - var icon=Game.ascensionModes[i].icon; - str+='
'; - } - Game.Prompt('

'+loc("Select a challenge mode")+'

'+ - '
'+str+'

'+Game.ascensionModes[Game.nextAscensionMode].dname+'

'+Game.ascensionModes[Game.nextAscensionMode].desc+'
' - ,[[loc("Confirm"),'Game.UpdateAscensionModePrompt();Game.ClosePrompt();']],0,'widePrompt'); - } - - - l('ascendOverlay').innerHTML= - '' - ,'bottom-right')+' style="font-size:16px;margin-top:0px;">'+loc("Reincarnate")+''+ - ''+ - ''+ - - '
'+loc("You are ascending.
Drag the screen around
or use arrow keys!
When you're ready,
click Reincarnate.")+'
'; - - Game.attachTooltip(l('ascendData1'),function(){return '
('+Beautify(Game.heavenlyChips)+')
'+loc("Each prestige level grants you a permanent +%1% CpS.
The more levels you have, the more cookies they require.",1)+'
';},'bottom-right'); - Game.attachTooltip(l('ascendData2'),function(){return '
('+loc("%1 heavenly chip",LBeautify(Game.heavenlyChips))+')
'+loc("Heavenly chips are used to buy heavenly upgrades.
You gain 1 chip every time you gain a prestige level.")+'
';},'bottom-right'); - - Game.UpdateAscensionModePrompt(); - - AddEvent(l('ascendButton'),'click',function(){ - PlaySound('snd/tick.mp3'); - Game.Reincarnate(); - }); - - Game.ascendl=l('ascend'); - Game.ascendContentl=l('ascendContent'); - Game.ascendZoomablel=l('ascendZoomable'); - Game.ascendUpgradesl=l('ascendUpgrades'); - Game.OnAscend=0; - Game.AscendTimer=0;//how far we are into the ascend animation - Game.AscendDuration=Game.fps*5;//how long the ascend animation is - Game.AscendBreakpoint=Game.AscendDuration*0.5;//at which point the cookie explodes during the ascend animation - Game.UpdateAscendIntro=function() - { - if (Game.AscendTimer==1) PlaySound('snd/charging.mp3'); - if (Game.AscendTimer==Math.floor(Game.AscendBreakpoint)) PlaySound('snd/thud.mp3'); - Game.AscendTimer++; - if (Game.AscendTimer>Game.AscendDuration)//end animation and launch ascend screen - { - PlayCue('ascend'); - PlayMusicSound('snd/cymbalRev.mp3'); - if (!App || Game.volumeMusic==0) PlaySound('snd/choir.mp3'); - Game.EarnHeavenlyChips(Game.cookiesEarned); - Game.AscendTimer=0; - Game.OnAscend=1;Game.removeClass('ascendIntro'); - Game.addClass('ascending'); - Game.BuildAscendTree(); - Game.heavenlyChipsDisplayed=Game.heavenlyChips; - Game.nextAscensionMode=0; - Game.ascensionMode=0; - Game.UpdateAscensionModePrompt(); - } - } - Game.ReincarnateTimer=0;//how far we are into the reincarnation animation - Game.ReincarnateDuration=Game.fps*1;//how long the reincarnation animation is - Game.UpdateReincarnateIntro=function() - { - if (Game.ReincarnateTimer==1) PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); - Game.ReincarnateTimer++; - if (Game.ReincarnateTimer>Game.ReincarnateDuration)//end animation and launch regular game - { - Game.ReincarnateTimer=0; - Game.removeClass('reincarnating'); - } - } - Game.Reincarnate=function(bypass) - { - if (!bypass) Game.Prompt('

'+loc("Reincarnate")+'

'+loc("Are you ready to return to the mortal world?")+'
',[[loc("Yes"),'Game.ClosePrompt();Game.Reincarnate(1);'],loc("No")]); - else - { - Game.ascendUpgradesl.innerHTML=''; - Game.ascensionMode=Game.nextAscensionMode; - Game.nextAscensionMode=0; - Game.Reset(); - if (Game.HasAchiev('Rebirth')) - { - Game.Notify('Reincarnated',loc("Hello, cookies!"),[10,0],4); - } - if (Game.resets>=1000) Game.Win('Endless cycle'); - if (Game.resets>=100) Game.Win('Reincarnation'); - if (Game.resets>=10) Game.Win('Resurrection'); - if (Game.resets>=1) Game.Win('Rebirth'); - - var prestigeUpgradesOwned=0; - for (var i in Game.Upgrades) - { - if (Game.Upgrades[i].bought && Game.Upgrades[i].pool=='prestige') prestigeUpgradesOwned++; - } - if (prestigeUpgradesOwned>=100) Game.Win('All the stars in heaven'); - - Game.removeClass('ascending'); - Game.OnAscend=0; - //trigger the reincarnate animation - Game.ReincarnateTimer=1; - Game.addClass('reincarnating'); - Game.BigCookieSize=0; - - Game.runModHook('reincarnate'); - } - } - Game.Ascend=function(bypass) - { - if (!bypass) Game.Prompt('

'+loc("Ascend")+'

'+tinyIcon([19,7])+'
'+loc("Do you REALLY want to ascend?
You will lose your progress and start over from scratch.
All your cookies will be converted into prestige and heavenly chips.")+'
'+(Game.canLumps()?loc("You will keep your achievements, building levels and sugar lumps."):loc("You will keep your achievements."))+'
',[[loc("Yes"),'Game.ClosePrompt();Game.Ascend(1);','float:left;display:none;'],[loc("Cancel"),0,'float:right']]); - else - { - Game.Notify(loc("Ascending"),loc("So long, cookies."),[20,7],4); - Game.OnAscend=0;Game.removeClass('ascending'); - Game.addClass('ascendIntro'); - //trigger the ascend animation - Game.AscendTimer=1; - Game.killShimmers(); - l('toggleBox').style.display='none'; - l('toggleBox').innerHTML=''; - Game.choiceSelectorOn=-1; - Game.ToggleSpecialMenu(0); - Game.AscendOffX=0; - Game.AscendOffY=0; - Game.AscendOffXT=0; - Game.AscendOffYT=0; - Game.AscendZoomT=1; - Game.AscendZoom=0.2; - - Game.jukebox.reset(); - PlayCue('preascend'); - } - } - - Game.DebuggingPrestige=0; - Game.AscendDragX=0; - Game.AscendDragY=0; - Game.AscendOffX=0; - Game.AscendOffY=0; - Game.AscendZoom=1; - Game.AscendOffXT=0; - Game.AscendOffYT=0; - Game.AscendZoomT=1; - Game.AscendDragging=0; - Game.AscendGridSnap=24; - Game.heavenlyBounds={left:0,right:0,top:0,bottom:0}; - Game.UpdateAscend=function() - { - if (Game.keys[37]) Game.AscendOffXT+=16*(1/Game.AscendZoomT); - if (Game.keys[38]) Game.AscendOffYT+=16*(1/Game.AscendZoomT); - if (Game.keys[39]) Game.AscendOffXT-=16*(1/Game.AscendZoomT); - if (Game.keys[40]) Game.AscendOffYT-=16*(1/Game.AscendZoomT); - - if (Game.AscendOffXT>-Game.heavenlyBounds.left) Game.AscendOffXT=-Game.heavenlyBounds.left; - if (Game.AscendOffXT<-Game.heavenlyBounds.right) Game.AscendOffXT=-Game.heavenlyBounds.right; - if (Game.AscendOffYT>-Game.heavenlyBounds.top) Game.AscendOffYT=-Game.heavenlyBounds.top; - if (Game.AscendOffYT<-Game.heavenlyBounds.bottom) Game.AscendOffYT=-Game.heavenlyBounds.bottom; - Game.AscendOffX+=(Game.AscendOffXT-Game.AscendOffX)*0.5; - Game.AscendOffY+=(Game.AscendOffYT-Game.AscendOffY)*0.5; - Game.AscendZoom+=(Game.AscendZoomT-Game.AscendZoom)*0.25; - if (Math.abs(Game.AscendZoomT-Game.AscendZoom)<0.005) Game.AscendZoom=Game.AscendZoomT; - - - if (Game.mouseDown && !Game.promptOn) - { - if (!Game.AscendDragging) - { - Game.AscendDragX=Game.mouseX; - Game.AscendDragY=Game.mouseY; - } - Game.AscendDragging=1; - - if (Game.DebuggingPrestige) - { - if (Game.SelectedHeavenlyUpgrade) - { - Game.tooltip.hide(); - //drag upgrades around - var me=Game.SelectedHeavenlyUpgrade; - me.posX+=(Game.mouseX-Game.AscendDragX)*(1/Game.AscendZoomT); - me.posY+=(Game.mouseY-Game.AscendDragY)*(1/Game.AscendZoomT); - var posX=me.posX;//Math.round(me.posX/Game.AscendGridSnap)*Game.AscendGridSnap; - var posY=me.posY;//Math.round(me.posY/Game.AscendGridSnap)*Game.AscendGridSnap; - l('heavenlyUpgrade'+me.id).style.left=Math.floor(posX)+'px'; - l('heavenlyUpgrade'+me.id).style.top=Math.floor(posY)+'px'; - for (var ii in me.parents) - { - var origX=0; - var origY=0; - var targX=me.posX+28; - var targY=me.posY+28; - if (me.parents[ii]!=-1) {origX=me.parents[ii].posX+28;origY=me.parents[ii].posY+28;} - var rot=-(Math.atan((targY-origY)/(origX-targX))/Math.PI)*180; - if (targX<=origX) rot+=180; - var dist=Math.floor(Math.sqrt((targX-origX)*(targX-origX)+(targY-origY)*(targY-origY))); - - l('heavenlyLink'+me.id+'-'+ii).style='width:'+dist+'px;transform:rotate('+rot+'deg);left:'+(origX)+'px;top:'+(origY)+'px;'; - } - } - } - if (!Game.SelectedHeavenlyUpgrade) - { - Game.AscendOffXT+=(Game.mouseX-Game.AscendDragX)*(1/Game.AscendZoomT); - Game.AscendOffYT+=(Game.mouseY-Game.AscendDragY)*(1/Game.AscendZoomT); - } - Game.AscendDragX=Game.mouseX; - Game.AscendDragY=Game.mouseY; - } - else - { - /*if (Game.SelectedHeavenlyUpgrade) - { - var me=Game.SelectedHeavenlyUpgrade; - me.posX=Math.round(me.posX/Game.AscendGridSnap)*Game.AscendGridSnap; - me.posY=Math.round(me.posY/Game.AscendGridSnap)*Game.AscendGridSnap; - l('heavenlyUpgrade'+me.id).style.left=me.posX+'px'; - l('heavenlyUpgrade'+me.id).style.top=me.posY+'px'; - }*/ - Game.AscendDragging=0; - Game.SelectedHeavenlyUpgrade=0; - } - if (Game.Click || Game.promptOn) - { - Game.AscendDragging=0; - } - - //Game.ascendl.style.backgroundPosition=Math.floor(Game.AscendOffX/2)+'px '+Math.floor(Game.AscendOffY/2)+'px'; - //Game.ascendl.style.backgroundPosition=Math.floor(Game.AscendOffX/2)+'px '+Math.floor(Game.AscendOffY/2)+'px,'+Math.floor(Game.AscendOffX/4)+'px '+Math.floor(Game.AscendOffY/4)+'px'; - //Game.ascendContentl.style.left=Math.floor(Game.AscendOffX)+'px'; - //Game.ascendContentl.style.top=Math.floor(Game.AscendOffY)+'px'; - Game.ascendContentl.style.webkitTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; - Game.ascendContentl.style.msTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; - Game.ascendContentl.style.oTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; - Game.ascendContentl.style.mozTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; - Game.ascendContentl.style.transform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; - Game.ascendZoomablel.style.webkitTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; - Game.ascendZoomablel.style.marginLeft=(Game.windowW/2)+'px'; - Game.ascendZoomablel.style.marginTop=(Game.windowH/2)+'px'; - Game.ascendZoomablel.style.msTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; - Game.ascendZoomablel.style.oTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; - Game.ascendZoomablel.style.mozTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; - Game.ascendZoomablel.style.transform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; - - //if (Game.Scroll!=0) Game.ascendContentl.style.transformOrigin=Math.floor(Game.windowW/2-Game.mouseX)+'px '+Math.floor(Game.windowH/2-Game.mouseY)+'px'; - if (Game.Scroll<0 && !Game.promptOn) {Game.AscendZoomT=0.5;} - if (Game.Scroll>0 && !Game.promptOn) {Game.AscendZoomT=1;} - - if (Game.T%2==0) - { - l('ascendPrestige').innerHTML=loc("Prestige level:")+'
'+SimpleBeautify(Game.prestige); - l('ascendHCs').innerHTML=loc("Heavenly chips:")+'
'+SimpleBeautify(Math.round(Game.heavenlyChipsDisplayed))+''; - if (Game.prestige>0) l('ascendModeButton').style.display='block'; - else l('ascendModeButton').style.display='none'; - } - Game.heavenlyChipsDisplayed+=(Game.heavenlyChips-Game.heavenlyChipsDisplayed)*0.4; - - if (Game.DebuggingPrestige && Game.T%10==0) - { - var str=''; - for (var i in Game.PrestigeUpgrades) - { - var me=Game.PrestigeUpgrades[i]; - if (me.placedByCode) continue; - str+=me.id+':['+Math.floor(me.posX)+','+Math.floor(me.posY)+'],'; - } - l('upgradePositions').value='Game.UpgradePositions={'+str+'};'; - } - //if (Game.T%5==0) Game.BuildAscendTree(); - } - Game.AscendRefocus=function() - { - Game.AscendOffX=0; - Game.AscendOffY=0; - Game.ascendl.className=''; - } - - Game.SelectedHeavenlyUpgrade=0; - Game.PurchaseHeavenlyUpgrade=function(what) - { - //if (Game.Has('Neuromancy')) Game.UpgradesById[what].toggle(); else - if (Game.UpgradesById[what].buy()) - { - if (l('heavenlyUpgrade'+what)){var rect=l('heavenlyUpgrade'+what).getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24);} - //Game.BuildAscendTree(); - } - } - Game.BuildAscendTree=function(justBought) - { - var str=''; - Game.heavenlyBounds={left:0,right:0,top:0,bottom:0}; - - if (Game.DebuggingPrestige) l('upgradePositions').style.display='block'; else l('upgradePositions').style.display='none'; - - var toPop=[]; - for (var i in Game.PrestigeUpgrades) - { - var me=Game.PrestigeUpgrades[i]; - var prevCanBePurchased=me.canBePurchased; - me.canBePurchased=1; - if (!me.bought && !Game.DebuggingPrestige) - { - if (me.showIf && !me.showIf()) me.canBePurchased=0; - else - { - for (var ii in me.parents) - { - if (me.parents[ii]!=-1 && !me.parents[ii].bought) me.canBePurchased=0; - } - } - } - if (justBought && me.parents.indexOf(justBought)!=-1 && !prevCanBePurchased && me.canBePurchased && !me.bought) toPop.push(me); - } - toPop.sort(function(parent){return function(a,b){ - var rot=Math.atan2(a.posY-parent.posY,parent.posX-a.posX)-Math.PI/2; - var rot2=Math.atan2(b.posY-parent.posY,parent.posX-b.posX)-Math.PI/2; - return rot'; - } - } - if (me.canBePurchased || Game.Has('Neuromancy') || ghosted) - { - if (me.posXGame.heavenlyBounds.right) Game.heavenlyBounds.right=me.posX; - if (me.posYGame.heavenlyBounds.bottom) Game.heavenlyBounds.bottom=me.posY; - } - for (var ii in me.parents)//create pulsing links - { - if (me.parents[ii]!=-1 && (me.canBePurchased || ghosted)) - { - var origX=0; - var origY=0; - var targX=me.posX+28; - var targY=me.posY+28; - if (me.parents[ii]!=-1) {origX=me.parents[ii].posX+28;origY=me.parents[ii].posY+28;} - var rot=-(Math.atan((targY-origY)/(origX-targX))/Math.PI)*180; - if (targX<=origX) rot+=180; - var dist=Math.floor(Math.sqrt((targX-origX)*(targX-origX)+(targY-origY)*(targY-origY))); - str+=''; - } - } - } - Game.heavenlyBounds.left-=128; - Game.heavenlyBounds.top-=128; - Game.heavenlyBounds.right+=128+64; - Game.heavenlyBounds.bottom+=128+64; - //str+='
'; - str+=''; - Game.ascendUpgradesl.innerHTML=str; - - if (Game.DebuggingPrestige) - { - for (var i in Game.PrestigeUpgrades) - { - var me=Game.PrestigeUpgrades[i]; - AddEvent(l('heavenlyUpgrade'+me.id),'mousedown',function(me){return function(){ - if (!Game.DebuggingPrestige) return; - if (Game.keys[16] && typeof LASTHEAVENLYSELECTED!=='undefined' && me!=LASTHEAVENLYSELECTED) - { - //when clicking an upgrade with ctrl, set it as reference point; clicking any sibling upgrade with shift will align it in a nice arc around their shared parent - var parent=0; - for (var i=0;i
0
'; - Game.lumpTooltip=function() - { - var str='
'+ - loc("You have %1.",''+loc("%1 sugar lump",LBeautify(Game.lumps))+'')+ - '
'+ - loc("A sugar lump is coalescing here, attracted by your accomplishments."); - - var age=Date.now()-Game.lumpT; - str+='
'; - if (age<0) str+=loc("This sugar lump has been exposed to time travel shenanigans and will take an excruciating %1 to reach maturity.",Game.sayTime(((Game.lumpMatureAge-age)/1000+1)*Game.fps,-1)); - else if (age%1 to reach maturity.",Game.sayTime(((Game.lumpMatureAge-age)/1000+1)*Game.fps,-1)); - else if (age%1.
You may click it to harvest it now, but there is a 50% chance you won't get anything.",Game.sayTime(((Game.lumpRipeAge-age)/1000+1)*Game.fps,-1)); - else if (ageThis sugar lump is ripe! Click it to harvest it.
If you do nothing, it will auto-harvest in %1.",Game.sayTime(((Game.lumpOverripeAge-age)/1000+1)*Game.fps,-1)); - - var phase=(age/Game.lumpOverripeAge)*7; - if (phase>=3) - { - if (Game.lumpCurrentType!=0) str+='
'; - if (Game.lumpCurrentType==1) str+=loc("This sugar lump grew to be bifurcated; harvesting it has a 50% chance of yielding two lumps."); - else if (Game.lumpCurrentType==2) str+=loc("This sugar lump grew to be golden; harvesting it will yield 2 to 7 lumps, your current cookies will be doubled (capped to a gain of 24 hours of your CpS), and you will find 10% more golden cookies for the next 24 hours."); - else if (Game.lumpCurrentType==3) str+=loc("This sugar lump was affected by the elders and grew to be meaty; harvesting it will yield between 0 and 2 lumps."); - else if (Game.lumpCurrentType==4) str+=loc("This sugar lump is caramelized, its stickiness binding it to unexpected things; harvesting it will yield between 1 and 3 lumps and will refill your sugar lump cooldowns."); - } - - str+='
'; - str+=loc("Your sugar lumps mature after %1,
ripen after %2,
and fall after %3.",[Game.sayTime((Game.lumpMatureAge/1000)*Game.fps,-1),Game.sayTime((Game.lumpRipeAge/1000)*Game.fps,-1),Game.sayTime((Game.lumpOverripeAge/1000)*Game.fps,-1)]); - - str+='
'+loc("• Sugar lumps can be harvested when mature, though if left alone beyond that point they will start ripening (increasing the chance of harvesting them) and will eventually fall and be auto-harvested after some time.
• Sugar lumps are delicious and may be used as currency for all sorts of things.
• Once a sugar lump is harvested, another one will start growing in its place.
• Note that sugar lumps keep growing when the game is closed.")+'
'; - return str; - } - Game.computeLumpTimes=function() - { - var hour=1000*60*60; - Game.lumpMatureAge=hour*20; - Game.lumpRipeAge=hour*23; - if (Game.Has('Stevia Caelestis')) Game.lumpRipeAge-=hour; - if (Game.Has('Diabetica Daemonicus')) Game.lumpMatureAge-=hour; - if (Game.Has('Ichor syrup')) Game.lumpMatureAge-=1000*60*7; - if (Game.Has('Sugar aging process')) Game.lumpRipeAge-=6000*Math.min(600,Game.Objects['Grandma'].amount);//capped at 600 grandmas - if (Game.hasGod && Game.BuildingsOwned%10==0) - { - var godLvl=Game.hasGod('order'); - if (godLvl==1) Game.lumpRipeAge-=hour; - else if (godLvl==2) Game.lumpRipeAge-=(hour/3)*2; - else if (godLvl==3) Game.lumpRipeAge-=(hour/3); - } - //if (Game.hasAura('Dragon\'s Curve')) {Game.lumpMatureAge/=1.05;Game.lumpRipeAge/=1.05;} - Game.lumpMatureAge/=1+Game.auraMult('Dragon\'s Curve')*0.05;Game.lumpRipeAge/=1+Game.auraMult('Dragon\'s Curve')*0.05; - Game.lumpOverripeAge=Game.lumpRipeAge+hour; - if (Game.Has('Glucose-charged air')) {Game.lumpMatureAge/=2000;Game.lumpRipeAge/=2000;Game.lumpOverripeAge/=2000;} - } - Game.loadLumps=function(time) - { - Game.computeLumpTimes(); - //Game.computeLumpType(); - if (!Game.canLumps()) Game.removeClass('lumpsOn'); - else - { - if (Game.ascensionMode!=1) Game.addClass('lumpsOn'); - Game.lumpT=Math.min(Date.now(),Game.lumpT); - var age=Math.max(Date.now()-Game.lumpT,0); - var amount=Math.floor(age/Game.lumpOverripeAge);//how many lumps did we harvest since we closed the game? - if (amount>=1) - { - Game.harvestLumps(1,true); - Game.lumpCurrentType=0;//all offline lumps after the first one have a normal type - if (amount>1) Game.harvestLumps(amount-1,true); - Game.Notify('',loc("You harvested %1 while you were away.",loc("%1 sugar lump",LBeautify(amount))),[29,14]); - Game.lumpT=Date.now()-(age-amount*Game.lumpOverripeAge); - Game.computeLumpType(); - } - } - } - Game.gainLumps=function(total) - { - if (Game.lumpsTotal==-1){Game.lumpsTotal=0;Game.lumps=0;} - Game.lumps+=total; - Game.lumpsTotal+=total; - - if (Game.lumpsTotal>=7) Game.Win('Dude, sweet'); - if (Game.lumpsTotal>=30) Game.Win('Sugar rush'); - if (Game.lumpsTotal>=365) Game.Win('Year\'s worth of cavities'); - } - Game.clickLump=function() - { - triggerAnim(l('lumpsIcon'),'pucker'); - triggerAnim(l('lumpsIcon2'),'pucker'); - if (!Game.canLumps()) return; - var age=Date.now()-Game.lumpT; - if (age+10% golden cookies for the next 24 hours."),[29,16]); - } - else if (Game.lumpCurrentType==3) total*=choose([0,0,1,2,2]); - else if (Game.lumpCurrentType==4) - { - total*=choose([1,2,3]); - Game.lumpRefill=0;//Date.now()-Game.getLumpRefillMax(); - Game.Notify(loc("Sugar lump cooldowns cleared!"),'',[29,27]); - } - total=Math.floor(total); - Game.gainLumps(total); - if (Game.lumpCurrentType==1) Game.Win('Sugar sugar'); - else if (Game.lumpCurrentType==2) Game.Win('All-natural cane sugar'); - else if (Game.lumpCurrentType==3) Game.Win('Sweetmeats'); - else if (Game.lumpCurrentType==4) Game.Win('Maillard reaction'); - - if (!silent) - { - var rect=l('lumpsIcon2').getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24+32-TopBarOffset); - if (total>0) Game.Popup('+'+loc("%1 sugar lump",LBeautify(total))+'',(rect.left+rect.right)/2,(rect.top+rect.bottom)/2-48); - else Game.Popup(''+loc("Botched harvest!")+'',(rect.left+rect.right)/2,(rect.top+rect.bottom)/2-48); - PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); - } - Game.computeLumpTimes(); - } - Game.computeLumpType=function() - { - Math.seedrandom(Game.seed+'/'+Game.lumpT); - var types=[0]; - var loop=1; - //if (Game.hasAura('Dragon\'s Curve')) loop=2; - loop+=Game.auraMult('Dragon\'s Curve'); - loop=randomFloor(loop); - for (var i=0;i-1 || (Game.ascensionMode!=1 && (Game.cookiesEarned+Game.cookiesReset)>=1000000000)) return true; - return false; - } - - Game.getLumpRefillMax=function() - { - return Game.fps*60*15;//1000*60*15;//15 minutes - } - Game.getLumpRefillRemaining=function() - { - return Game.lumpRefill;//Game.getLumpRefillMax()-(Date.now()-Game.lumpRefill); - } - Game.canRefillLump=function() - { - return Game.lumpRefill<=0;//((Date.now()-Game.lumpRefill)>=Game.getLumpRefillMax()); - } - Game.refillLump=function(n,func) - { - if (Game.lumps>=n && Game.canRefillLump()) - { - Game.spendLump(n,'refill',function() - { - if (!Game.sesame) Game.lumpRefill=Game.getLumpRefillMax();//Date.now(); - func(); - })(); - } - } - Game.spendLump=function(n,str,func,free) - { - //ask if we want to spend N lumps (unless free) - return function() - { - if (!free && Game.lumps
'+loc("Do you want to spend %1 to %2?",[''+loc("%1 sugar lump",LBeautify(n))+'',str])+'
',[[loc("Yes"),'Game.lumps-='+n+';Game.promptConfirmFunc();Game.promptConfirmFunc=0;Game.recalculateGains=1;Game.ClosePrompt();'],loc("No")]); - return false; - } - else - { - if (!free) Game.lumps-=n; - func(); - Game.recalculateGains=1; - } - } - } - - Game.doLumps=function() - { - if (Game.lumpRefill>0) Game.lumpRefill--; - - if (!Game.canLumps()) {Game.removeClass('lumpsOn');return;} - if (Game.lumpsTotal==-1) - { - //first time ! - if (Game.ascensionMode!=1) Game.addClass('lumpsOn'); - Game.lumpT=Date.now(); - Game.lumpsTotal=0; - Game.lumps=0; - Game.computeLumpType(); - - Game.Notify(loc("Sugar lumps!"),loc("Because you've baked a billion cookies in total, you are now attracting sugar lumps. They coalesce quietly near the top of your screen, under the Stats button.
You will be able to harvest them when they're ripe, after which you may spend them on all sorts of things!"),[23,14]); - } - var age=Date.now()-Game.lumpT; - if (age>Game.lumpOverripeAge) - { - age=0; - Game.harvestLumps(1); - Game.computeLumpType(); - } - - var phase=Math.min(6,Math.floor((age/Game.lumpOverripeAge)*7)); - var phase2=Math.min(6,Math.floor((age/Game.lumpOverripeAge)*7)+1); - var row=14; - var row2=14; - var type=Game.lumpCurrentType; - if (type==1)//double - { - //if (phase>=6) row=15; - if (phase2>=6) row2=15; - } - else if (type==2)//golden - { - if (phase>=4) row=16; - if (phase2>=4) row2=16; - } - else if (type==3)//meaty - { - if (phase>=4) row=17; - if (phase2>=4) row2=17; - } - else if (type==4)//caramelized - { - if (phase>=4) row=27; - if (phase2>=4) row2=27; - } - var icon=[23+Math.min(phase,5),row]; - var icon2=[23+phase2,row2]; - if (age<0){icon=[17,5];icon2=[17,5];} - var opacity=Math.min(6,(age/Game.lumpOverripeAge)*7)%1; - if (phase>=6) {opacity=1;} - l('lumpsIcon').style.backgroundPosition=(-icon[0]*48)+'px '+(-icon[1]*48)+'px'; - l('lumpsIcon2').style.backgroundPosition=(-icon2[0]*48)+'px '+(-icon2[1]*48)+'px'; - l('lumpsIcon2').style.opacity=opacity; - l('lumpsAmount').textContent=Beautify(Game.lumps); - } - - /*===================================================================================== - COOKIE ECONOMICS - =======================================================================================*/ - Game.Earn=function(howmuch) - { - Game.cookies+=howmuch; - Game.cookiesEarned+=howmuch; - } - Game.Spend=function(howmuch) - { - Game.cookies-=howmuch; - } - Game.Dissolve=function(howmuch) - { - Game.cookies-=howmuch; - Game.cookiesEarned-=howmuch; - Game.cookies=Math.max(0,Game.cookies); - Game.cookiesEarned=Math.max(0,Game.cookiesEarned); - } - Game.mouseCps=function() - { - var add=0; - if (Game.Has('Thousand fingers')) add+= 0.1; - if (Game.Has('Million fingers')) add*= 5; - if (Game.Has('Billion fingers')) add*= 10; - if (Game.Has('Trillion fingers')) add*= 20; - if (Game.Has('Quadrillion fingers')) add*= 20; - if (Game.Has('Quintillion fingers')) add*= 20; - if (Game.Has('Sextillion fingers')) add*= 20; - if (Game.Has('Septillion fingers')) add*= 20; - if (Game.Has('Octillion fingers')) add*= 20; - if (Game.Has('Nonillion fingers')) add*= 20; - if (Game.Has('Decillion fingers')) add*= 20; - if (Game.Has('Unshackled cursors')) add*= 25; - - var num=0; - for (var i in Game.Objects) {num+=Game.Objects[i].amount;} - num-=Game.Objects['Cursor'].amount; - add=add*num; - if (Game.Has('Plastic mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Iron mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Titanium mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Adamantium mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Unobtainium mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Eludium mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Wishalloy mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Fantasteel mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Nevercrack mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Armythril mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Technobsidian mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Plasmarble mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Miraculite mouse')) add+=Game.cookiesPs*0.01; - if (Game.Has('Aetherice mouse')) add+=Game.cookiesPs*0.01; - - if (Game.Has('Fortune #104')) add+=Game.cookiesPs*0.01; - var mult=1; - - - if (Game.Has('Santa\'s helpers')) mult*=1.1; - if (Game.Has('Cookie egg')) mult*=1.1; - if (Game.Has('Halo gloves')) mult*=1.1; - if (Game.Has('Dragon claw')) mult*=1.03; - - if (Game.Has('Aura gloves')) - { - mult*=1+0.05*Math.min(Game.Objects['Cursor'].level,Game.Has('Luminous gloves')?20:10); - } - - mult*=Game.eff('click'); - - if (Game.hasGod) - { - var godLvl=Game.hasGod('labor'); - if (godLvl==1) mult*=1.15; - else if (godLvl==2) mult*=1.1; - else if (godLvl==3) mult*=1.05; - } - - for (var i in Game.buffs) - { - if (typeof Game.buffs[i].multClick != 'undefined') mult*=Game.buffs[i].multClick; - } - - //if (Game.hasAura('Dragon Cursor')) mult*=1.05; - mult*=1+Game.auraMult('Dragon Cursor')*0.05; - - var out=mult*Game.ComputeCps(1,Game.Has('Reinforced index finger')+Game.Has('Carpal tunnel prevention cream')+Game.Has('Ambidextrous'),add); - - out=Game.runModHookOnValue('cookiesPerClick',out); - - if (Game.hasBuff('Cursed finger')) out=Game.buffs['Cursed finger'].power; - return out; - } - Game.computedMouseCps=1; - Game.globalCpsMult=1; - Game.unbuffedCps=0; - Game.buildingCps=0; - Game.lastClick=0; - Game.CanClick=1; - Game.autoclickerDetected=0; - Game.BigCookieState=0;//0 = normal, 1 = clicked (small), 2 = released/hovered (big) - Game.BigCookieSize=0; - Game.BigCookieSizeD=0; - Game.BigCookieSizeT=1; - Game.cookieClickSound=Math.floor(Math.random()*7)+1; - Game.playCookieClickSound=function() - { - if (Game.prefs.cookiesound) PlaySound('snd/clickb'+(Game.cookieClickSound)+'.mp3',0.5); - else PlaySound('snd/click'+(Game.cookieClickSound)+'.mp3',0.5); - Game.cookieClickSound+=Math.floor(Math.random()*4)+1; - if (Game.cookieClickSound>7) Game.cookieClickSound-=7; - } - Game.ClickCookie=function(e,amount) - { - var now=Date.now(); - if (e) e.preventDefault(); - if (Game.OnAscend || Game.AscendTimer>0 || Game.T<3 || now-Game.lastClick<1000/((e?e.detail:1)===0?3:50)) {} - else - { - if (now-Game.lastClick<(1000/15)) - { - Game.autoclickerDetected+=Game.fps; - if (Game.autoclickerDetected>=Game.fps*5) Game.Win('Uncanny clicker'); - } - Game.loseShimmeringVeil('click'); - var amount=amount?amount:Game.computedMouseCps; - Game.Earn(amount); - Game.handmadeCookies+=amount; - if (Game.prefs.particles) - { - Game.particleAdd(); - Game.particleAdd(Game.mouseX,Game.mouseY,Math.random()*4-2,Math.random()*-2-2,Math.random()*0.5+0.75,1,2); - } - if (Game.prefs.numbers) Game.particleAdd(Game.mouseX+Math.random()*8-4,Game.mouseY-8+Math.random()*8-4,0,-2,1,4,2,'','+'+Beautify(amount,1)); - - Game.runModHook('click'); - - Game.playCookieClickSound(); - Game.cookieClicks++; - - if (Game.clicksThisSession==0) PlayCue('preplay'); - Game.clicksThisSession++; - Game.lastClick=now; - } - Game.Click=0; - } - Game.mouseX=0; - Game.mouseY=0; - Game.mouseX2=0; - Game.mouseY2=0; - Game.mouseMoved=0; - Game.GetMouseCoords=function(e) - { - var posx=0; - var posy=0; - if (!e) var e=window.event; - if (e.pageX||e.pageY) - { - posx=e.pageX; - posy=e.pageY; - } - else if (e.clientX || e.clientY) - { - posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft; - posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop; - } - var x=0; - var y=TopBarOffset; - /* - var el=l('sectionLeft'); - while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) - { - x+=el.offsetLeft-el.scrollLeft; - y+=el.offsetTop-el.scrollTop; - el=el.offsetParent; - }*/ - Game.mouseX2=Game.mouseX; - Game.mouseY2=Game.mouseY; - Game.mouseX=(posx-x)/Game.scale; - Game.mouseY=(posy-y)/Game.scale; - Game.mouseMoved=1; - Game.lastActivity=Game.time; - } - var bigCookie=l('bigCookie'); - if (Game.prefs.screenreader) - { - bigCookie.ariaLabelledby='bigCookieLabel'; - bigCookie.insertAdjacentHTML('beforeend',''); - bigCookie.tabIndex=1; - } - Game.Click=0; - Game.lastClickedEl=0; - Game.clicksThisSession=0; - Game.clickFrom=0; - Game.Scroll=0; - Game.mouseDown=0; - if (!Game.touchEvents) - { - AddEvent(bigCookie,'click',Game.ClickCookie); - AddEvent(bigCookie,'mousedown',function(event){Game.BigCookieState=1;if (Game.prefs.cookiesound) {Game.playCookieClickSound();}if (event) event.preventDefault();}); - AddEvent(bigCookie,'mouseup',function(event){Game.BigCookieState=2;if (event) event.preventDefault();}); - AddEvent(bigCookie,'mouseout',function(event){Game.BigCookieState=0;}); - AddEvent(bigCookie,'mouseover',function(event){Game.BigCookieState=2;}); - AddEvent(document,'mousemove',Game.GetMouseCoords); - AddEvent(document,'mousedown',function(event){Game.lastActivity=Game.time;Game.mouseDown=1;Game.clickFrom=event.target;}); - AddEvent(document,'mouseup',function(event){Game.lastActivity=Game.time;Game.mouseDown=0;Game.clickFrom=0;}); - AddEvent(document,'click',function(event){Game.lastActivity=Game.time;Game.Click=1;Game.lastClickedEl=event.target;Game.clickFrom=0;}); - Game.handleScroll=function(e) - { - if (!e) e=event; - Game.Scroll=(e.detail<0||e.wheelDelta>0)?1:-1; - Game.lastActivity=Game.time; - }; - AddEvent(document,'DOMMouseScroll',Game.handleScroll); - AddEvent(document,'mousewheel',Game.handleScroll); - } - else - { - //touch events - AddEvent(bigCookie,'touchend',Game.ClickCookie); - AddEvent(bigCookie,'touchstart',function(event){Game.BigCookieState=1;if (event) event.preventDefault();}); - AddEvent(bigCookie,'touchend',function(event){Game.BigCookieState=0;if (event) event.preventDefault();}); - //AddEvent(document,'touchmove',Game.GetMouseCoords); - AddEvent(document,'mousemove',Game.GetMouseCoords); - AddEvent(document,'touchstart',function(event){Game.lastActivity=Game.time;Game.mouseDown=1;}); - AddEvent(document,'touchend',function(event){Game.lastActivity=Game.time;Game.mouseDown=0;}); - AddEvent(document,'touchend',function(event){Game.lastActivity=Game.time;Game.Click=1;}); - } - - Game.keys=[]; - AddEvent(window,'keyup',function(e){ - Game.lastActivity=Game.time; - if (e.keyCode==27) - { - if (Game.promptOn && !Game.promptNoClose) {Game.ClosePrompt();PlaySound('snd/tickOff.mp3');} - if (Game.AscendTimer>0) Game.AscendTimer=Game.AscendDuration; - }//esc closes prompt - if (Game.promptOn) - { - if (e.keyCode==13) Game.ConfirmPrompt();//enter confirms prompt - } - Game.keys[e.keyCode]=0; - }); - AddEvent(window,'keydown',function(e){ - if (Game.promptOn) - { - if (e.keyCode==9) - { - //tab to shift through prompt buttons - if (e.shiftKey) Game.FocusPromptOption(-1); - else Game.FocusPromptOption(1); - e.preventDefault(); - } - } - if (!Game.OnAscend && Game.AscendTimer==0) - { - if (e.ctrlKey && e.keyCode==83) {Game.toSave=true;e.preventDefault();}//ctrl-s saves the game - else if (e.ctrlKey && e.keyCode==79) {Game.ImportSave();e.preventDefault();}//ctrl-o opens the import menu - } - if ((e.keyCode==16 || e.keyCode==17) && Game.tooltip.dynamic) Game.tooltip.update(); - Game.keys[e.keyCode]=1; - if (e.keyCode==9) Game.keys=[];//reset keys on tab press - }); - - AddEvent(window,'visibilitychange',function(e){ - Game.keys=[];//reset all key pressed on visibility change (should help prevent ctrl still being down after ctrl-tab) - }); - - /*===================================================================================== - CPS RECALCULATOR - =======================================================================================*/ - - Game.heavenlyPower=1;//how many CpS percents a single heavenly chip gives - Game.recalculateGains=1; - Game.cookiesPsByType={}; - Game.cookiesMultByType={}; - //display bars with http://codepen.io/anon/pen/waGyEJ - Game.effs={}; - Game.eff=function(name,def){if (typeof Game.effs[name]==='undefined') return (typeof def==='undefined'?1:def); else return Game.effs[name];}; - - Game.CalculateGains=function() - { - Game.cookiesPs=0; - var mult=1; - //add up effect bonuses from building minigames - var effs={}; - for (var i in Game.Objects) - { - if (Game.Objects[i].minigameLoaded && Game.Objects[i].minigame.effs) - { - var myEffs=Game.Objects[i].minigame.effs; - for (var ii in myEffs) - { - if (effs[ii]) effs[ii]*=myEffs[ii]; - else effs[ii]=myEffs[ii]; - } - } - } - Game.effs=effs; - - if (Game.ascensionMode!=1) mult+=parseFloat(Game.prestige)*0.01*Game.heavenlyPower*Game.GetHeavenlyMultiplier(); - - mult*=Game.eff('cps'); - - if (Game.Has('Heralds') && Game.ascensionMode!=1) mult*=(1+0.01*Game.heralds); - - for (var i in Game.cookieUpgrades) - { - var me=Game.cookieUpgrades[i]; - if (Game.Has(me.name)) - { - mult*=(1+(typeof(me.power)==='function'?me.power(me):me.power)*0.01); - } - } - - if (Game.Has('Specialized chocolate chips')) mult*=1.01; - if (Game.Has('Designer cocoa beans')) mult*=1.02; - if (Game.Has('Underworld ovens')) mult*=1.03; - if (Game.Has('Exotic nuts')) mult*=1.04; - if (Game.Has('Arcane sugar')) mult*=1.05; - - if (Game.Has('Increased merriness')) mult*=1.15; - if (Game.Has('Improved jolliness')) mult*=1.15; - if (Game.Has('A lump of coal')) mult*=1.01; - if (Game.Has('An itchy sweater')) mult*=1.01; - if (Game.Has('Santa\'s dominion')) mult*=1.2; - - if (Game.Has('Fortune #100')) mult*=1.01; - if (Game.Has('Fortune #101')) mult*=1.07; - - if (Game.Has('Dragon scale')) mult*=1.03; - - var buildMult=1; - if (Game.hasGod) - { - var godLvl=Game.hasGod('asceticism'); - if (godLvl==1) mult*=1.15; - else if (godLvl==2) mult*=1.1; - else if (godLvl==3) mult*=1.05; - - var godLvl=Game.hasGod('ages'); - if (godLvl==1) mult*=1+0.15*Math.sin((Date.now()/1000/(60*60*3))*Math.PI*2); - else if (godLvl==2) mult*=1+0.15*Math.sin((Date.now()/1000/(60*60*12))*Math.PI*2); - else if (godLvl==3) mult*=1+0.15*Math.sin((Date.now()/1000/(60*60*24))*Math.PI*2); - - var godLvl=Game.hasGod('decadence'); - if (godLvl==1) buildMult*=0.93; - else if (godLvl==2) buildMult*=0.95; - else if (godLvl==3) buildMult*=0.98; - - var godLvl=Game.hasGod('industry'); - if (godLvl==1) buildMult*=1.1; - else if (godLvl==2) buildMult*=1.06; - else if (godLvl==3) buildMult*=1.03; - - var godLvl=Game.hasGod('labor'); - if (godLvl==1) buildMult*=0.97; - else if (godLvl==2) buildMult*=0.98; - else if (godLvl==3) buildMult*=0.99; - } - - if (Game.Has('Santa\'s legacy')) mult*=1+(Game.santaLevel+1)*0.03; - - - Game.milkProgress=Game.AchievementsOwned/25; - var milkMult=1; - if (Game.Has('Santa\'s milk and cookies')) milkMult*=1.05; - //if (Game.hasAura('Breath of Milk')) milkMult*=1.05; - milkMult*=1+Game.auraMult('Breath of Milk')*0.05; - if (Game.hasGod) - { - var godLvl=Game.hasGod('mother'); - if (godLvl==1) milkMult*=1.1; - else if (godLvl==2) milkMult*=1.05; - else if (godLvl==3) milkMult*=1.03; - } - milkMult*=Game.eff('milk'); - - var catMult=1; - - if (Game.Has('Kitten helpers')) catMult*=(1+Game.milkProgress*0.1*milkMult); - if (Game.Has('Kitten workers')) catMult*=(1+Game.milkProgress*0.125*milkMult); - if (Game.Has('Kitten engineers')) catMult*=(1+Game.milkProgress*0.15*milkMult); - if (Game.Has('Kitten overseers')) catMult*=(1+Game.milkProgress*0.175*milkMult); - if (Game.Has('Kitten managers')) catMult*=(1+Game.milkProgress*0.2*milkMult); - if (Game.Has('Kitten accountants')) catMult*=(1+Game.milkProgress*0.2*milkMult); - if (Game.Has('Kitten specialists')) catMult*=(1+Game.milkProgress*0.2*milkMult); - if (Game.Has('Kitten experts')) catMult*=(1+Game.milkProgress*0.2*milkMult); - if (Game.Has('Kitten consultants')) catMult*=(1+Game.milkProgress*0.2*milkMult); - if (Game.Has('Kitten assistants to the regional manager')) catMult*=(1+Game.milkProgress*0.175*milkMult); - if (Game.Has('Kitten marketeers')) catMult*=(1+Game.milkProgress*0.15*milkMult); - if (Game.Has('Kitten analysts')) catMult*=(1+Game.milkProgress*0.125*milkMult); - if (Game.Has('Kitten executives')) catMult*=(1+Game.milkProgress*0.115*milkMult); - if (Game.Has('Kitten admins')) catMult*=(1+Game.milkProgress*0.11*milkMult); - if (Game.Has('Kitten angels')) catMult*=(1+Game.milkProgress*0.1*milkMult); - if (Game.Has('Fortune #103')) catMult*=(1+Game.milkProgress*0.05*milkMult); - - Game.cookiesMultByType['kittens']=catMult; - - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - me.storedCps=me.cps(me); - if (Game.ascensionMode!=1) me.storedCps*=(1+me.level*0.01)*buildMult; - if (me.id==1 && Game.Has('Milkhelp® lactose intolerance relief tablets')) me.storedCps*=1+0.05*Game.milkProgress*milkMult;//this used to be "me.storedCps*=1+0.1*Math.pow(catMult-1,0.5)" which was. hmm - me.storedTotalCps=me.amount*me.storedCps; - Game.cookiesPs+=me.storedTotalCps; - Game.cookiesPsByType[me.name]=me.storedTotalCps; - } - //cps from buildings only - Game.buildingCps=Game.cookiesPs; - - if (Game.Has('"egg"')) {Game.cookiesPs+=9;Game.cookiesPsByType['"egg"']=9;}//"egg" - - mult*=catMult; - - var eggMult=1; - if (Game.Has('Chicken egg')) eggMult*=1.01; - if (Game.Has('Duck egg')) eggMult*=1.01; - if (Game.Has('Turkey egg')) eggMult*=1.01; - if (Game.Has('Quail egg')) eggMult*=1.01; - if (Game.Has('Robin egg')) eggMult*=1.01; - if (Game.Has('Ostrich egg')) eggMult*=1.01; - if (Game.Has('Cassowary egg')) eggMult*=1.01; - if (Game.Has('Salmon roe')) eggMult*=1.01; - if (Game.Has('Frogspawn')) eggMult*=1.01; - if (Game.Has('Shark egg')) eggMult*=1.01; - if (Game.Has('Turtle egg')) eggMult*=1.01; - if (Game.Has('Ant larva')) eggMult*=1.01; - if (Game.Has('Century egg')) - { - //the boost increases a little every day, with diminishing returns up to +10% on the 100th day - var day=Math.floor((Date.now()-Game.startDate)/1000/10)*10/60/60/24; - day=Math.min(day,100); - eggMult*=1+(1-Math.pow(1-day/100,3))*0.1; - } - - Game.cookiesMultByType['eggs']=eggMult; - mult*=eggMult; - - if (Game.Has('Sugar baking')) mult*=(1+Math.min(100,Game.lumps)*0.01); - - //if (Game.hasAura('Radiant Appetite')) mult*=2; - mult*=1+Game.auraMult('Radiant Appetite'); - - var rawCookiesPs=Game.cookiesPs*mult; - for (var i in Game.CpsAchievements) - { - if (rawCookiesPs>=Game.CpsAchievements[i].threshold) Game.Win(Game.CpsAchievements[i].name); - } - Game.cookiesPsRaw=rawCookiesPs; - Game.cookiesPsRawHighest=Math.max(Game.cookiesPsRawHighest,rawCookiesPs); - - var n=Game.shimmerTypes['golden'].n; - var auraMult=Game.auraMult('Dragon\'s Fortune'); - for (var i=0;i=0;i--) - { - Game.shimmers[i].die(); - } - for (var i in Game.shimmerTypes) - { - var me=Game.shimmerTypes[i]; - if (me.reset) me.reset(); - me.n=0; - if (me.spawnsOnTimer) - { - me.time=0; - me.spawned=0; - me.minTime=me.getMinTime(me); - me.maxTime=me.getMaxTime(me); - } - } - } - - Game.shimmerTypes={ - //in these, "me" refers to the shimmer itself, and "this" to the shimmer's type object - 'golden':{ - reset:function() - { - this.chain=0; - this.totalFromChain=0; - this.last=''; - }, - initFunc:function(me) - { - if (!this.spawned && me.force!='cookie storm drop' && Game.chimeType!=0 && Game.ascensionMode!=1) Game.playGoldenCookieChime(); - - //set image - var bgPic='img/goldCookie.png'; - var picX=0;var picY=0; - - - if ((!me.forceObj || !me.forceObj.noWrath) && ((me.forceObj && me.forceObj.wrath) || (Game.elderWrath==1 && Math.random()<1/3) || (Game.elderWrath==2 && Math.random()<2/3) || (Game.elderWrath==3) || (Game.hasGod && Game.hasGod('scorn')))) - { - me.wrath=1; - if (Game.season=='halloween') bgPic='img/spookyCookie.png'; - else bgPic='img/wrathCookie.png'; - } - else - { - me.wrath=0; - } - - if (Game.season=='valentines') - { - bgPic='img/hearts.png'; - picX=Math.floor(Math.random()*8); - } - else if (Game.season=='fools') - { - bgPic='img/contract.png'; - if (me.wrath) bgPic='img/wrathContract.png'; - } - else if (Game.season=='easter') - { - bgPic='img/bunnies.png'; - picX=Math.floor(Math.random()*4); - picY=0; - if (me.wrath) picY=1; - } - - me.x=Math.floor(Math.random()*Math.max(0,(Game.bounds.right-300)-Game.bounds.left-128)+Game.bounds.left+64)-64; - me.y=Math.floor(Math.random()*Math.max(0,Game.bounds.bottom-Game.bounds.top-128)+Game.bounds.top+64)-64; - me.l.style.left=me.x+'px'; - me.l.style.top=me.y+'px'; - me.l.style.width='96px'; - me.l.style.height='96px'; - me.l.style.backgroundImage='url('+bgPic+')'; - me.l.style.backgroundPosition=(-picX*96)+'px '+(-picY*96)+'px'; - me.l.style.opacity='0'; - me.l.style.display='block'; - me.l.setAttribute('alt',loc(me.wrath?"Wrath cookie":"Golden cookie")); - - me.life=1;//the cookie's current progression through its lifespan (in frames) - me.dur=13;//duration; the cookie's lifespan in seconds before it despawns - - var dur=13; - if (Game.Has('Lucky day')) dur*=2; - if (Game.Has('Serendipity')) dur*=2; - if (Game.Has('Decisive fate')) dur*=1.05; - if (Game.Has('Lucky digit')) dur*=1.01; - if (Game.Has('Lucky number')) dur*=1.01; - if (Game.Has('Lucky payout')) dur*=1.01; - if (!me.wrath) dur*=Game.eff('goldenCookieDur'); - else dur*=Game.eff('wrathCookieDur'); - dur*=Math.pow(0.95,Game.shimmerTypes['golden'].n-1);//5% shorter for every other golden cookie on the screen - if (this.chain>0) dur=Math.max(2,10/this.chain);//this is hilarious - me.dur=dur; - me.life=Math.ceil(Game.fps*me.dur); - me.sizeMult=1; - }, - updateFunc:function(me) - { - var curve=1-Math.pow((me.life/(Game.fps*me.dur))*2-1,4); - me.l.style.opacity=curve; - //this line makes each golden cookie pulse in a unique way - if (Game.prefs.fancy) me.l.style.transform='rotate('+(Math.sin(me.id*0.69)*24+Math.sin(Game.T*(0.35+Math.sin(me.id*0.97)*0.15)+me.id/*+Math.sin(Game.T*0.07)*2+2*/)*(3+Math.sin(me.id*0.36)*2))+'deg) scale('+(me.sizeMult*(1+Math.sin(me.id*0.53)*0.2)*curve*(1+(0.06+Math.sin(me.id*0.41)*0.05)*(Math.sin(Game.T*(0.25+Math.sin(me.id*0.73)*0.15)+me.id))))+')'; - me.life--; - if (me.life<=0) {this.missFunc(me);me.die();} - }, - popFunc:function(me) - { - //get achievs and stats - if (me.spawnLead) - { - Game.goldenClicks++; - Game.goldenClicksLocal++; - - if (Game.goldenClicks>=1) Game.Win('Golden cookie'); - if (Game.goldenClicks>=7) Game.Win('Lucky cookie'); - if (Game.goldenClicks>=27) Game.Win('A stroke of luck'); - if (Game.goldenClicks>=77) Game.Win('Fortune'); - if (Game.goldenClicks>=777) Game.Win('Leprechaun'); - if (Game.goldenClicks>=7777) Game.Win('Black cat\'s paw'); - if (Game.goldenClicks>=27777) Game.Win('Seven horseshoes'); - - if (Game.goldenClicks>=7) Game.Unlock('Lucky day'); - if (Game.goldenClicks>=27) Game.Unlock('Serendipity'); - if (Game.goldenClicks>=77) Game.Unlock('Get lucky'); - - if ((me.life/Game.fps)>(me.dur-1)) Game.Win('Early bird'); - if (me.life0) list.push('clot','multiply cookies','ruin cookies'); - else list.push('frenzy','multiply cookies'); - if (me.wrath>0 && Game.hasGod && Game.hasGod('scorn')) list.push('clot','ruin cookies','clot','ruin cookies'); - if (me.wrath>0 && Math.random()<0.3) list.push('blood frenzy','chain cookie','cookie storm'); - else if (Math.random()<0.03 && Game.cookiesEarned>=100000) list.push('chain cookie','cookie storm'); - if (Math.random()<0.05 && Game.season=='fools') list.push('everything must go'); - if (Math.random()<0.1 && (Math.random()<0.05 || !Game.hasBuff('Dragonflight'))) list.push('click frenzy'); - if (me.wrath && Math.random()<0.1) list.push('cursed finger'); - - if (Game.BuildingsOwned>=10 && Math.random()<0.25) list.push('building special'); - - if (Game.canLumps() && Math.random()<0.0005) list.push('free sugar lump'); - - if ((me.wrath==0 && Math.random()<0.15) || Math.random()<0.05) - { - //if (Game.hasAura('Reaper of Fields')) list.push('dragon harvest'); - if (Math.random()0) choice='chain cookie'; - if (me.force!='') {this.chain=0;choice=me.force;me.force='';} - if (choice!='chain cookie') this.chain=0; - - this.last=choice; - - //create buff for effect - //buff duration multiplier - var effectDurMod=1; - if (Game.Has('Get lucky')) effectDurMod*=2; - if (Game.Has('Lasting fortune')) effectDurMod*=1.1; - if (Game.Has('Lucky digit')) effectDurMod*=1.01; - if (Game.Has('Lucky number')) effectDurMod*=1.01; - if (Game.Has('Green yeast digestives')) effectDurMod*=1.01; - if (Game.Has('Lucky payout')) effectDurMod*=1.01; - //if (Game.hasAura('Epoch Manipulator')) effectDurMod*=1.05; - effectDurMod*=1+Game.auraMult('Epoch Manipulator')*0.05; - if (!me.wrath) effectDurMod*=Game.eff('goldenCookieEffDur'); - else effectDurMod*=Game.eff('wrathCookieEffDur'); - - if (Game.hasGod) - { - var godLvl=Game.hasGod('decadence'); - if (godLvl==1) effectDurMod*=1.07; - else if (godLvl==2) effectDurMod*=1.05; - else if (godLvl==3) effectDurMod*=1.02; - } - - //effect multiplier (from lucky etc) - var mult=1; - //if (me.wrath>0 && Game.hasAura('Unholy Dominion')) mult*=1.1; - //else if (me.wrath==0 && Game.hasAura('Ancestral Metamorphosis')) mult*=1.1; - if (me.wrath>0) mult*=1+Game.auraMult('Unholy Dominion')*0.1; - else if (me.wrath==0) mult*=1+Game.auraMult('Ancestral Metamorphosis')*0.1; - if (Game.Has('Green yeast digestives')) mult*=1.01; - if (Game.Has('Dragon fang')) mult*=1.03; - if (!me.wrath) mult*=Game.eff('goldenCookieGain'); - else mult*=Game.eff('wrathCookieGain'); - - var popup=''; - var buff=0; - - if (choice=='building special') - { - var time=Math.ceil(30*effectDurMod); - var list=[]; - for (var i in Game.Objects) - { - if (Game.Objects[i].amount>=10) list.push(Game.Objects[i].id); - } - if (list.length==0) {choice='frenzy';}//default to frenzy if no proper building - else - { - var obj=choose(list); - var pow=Game.ObjectsById[obj].amount/10+1; - if (me.wrath && Math.random()<0.3) - { - buff=Game.gainBuff('building debuff',time,pow,obj); - } - else - { - buff=Game.gainBuff('building buff',time,pow,obj); - } - } - } - - if (choice=='free sugar lump') - { - Game.gainLumps(1); - popup=loc("Sweet!
Found 1 sugar lump!"); - } - else if (choice=='frenzy') - { - buff=Game.gainBuff('frenzy',Math.ceil(77*effectDurMod),7); - } - else if (choice=='dragon harvest') - { - buff=Game.gainBuff('dragon harvest',Math.ceil(60*effectDurMod),15); - } - else if (choice=='everything must go') - { - buff=Game.gainBuff('everything must go',Math.ceil(8*effectDurMod),5); - } - else if (choice=='multiply cookies') - { - var moni=mult*Math.min(Game.cookies*0.15,Game.cookiesPs*60*15)+13;//add 15% to cookies owned (+13), or 15 minutes of cookie production - whichever is lowest - Game.Earn(moni); - popup=loc("Lucky!")+'
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+''; - } - else if (choice=='ruin cookies') - { - var moni=Math.min(Game.cookies*0.05,Game.cookiesPs*60*10)+13;//lose 5% of cookies owned (-13), or 10 minutes of cookie production - whichever is lowest - moni=Math.min(Game.cookies,moni); - Game.Spend(moni); - popup=loc("Ruin!")+'
'+loc("Lost %1!",loc("%1 cookie",LBeautify(moni)))+''; - } - else if (choice=='blood frenzy') - { - buff=Game.gainBuff('blood frenzy',Math.ceil(6*effectDurMod),666); - } - else if (choice=='clot') - { - buff=Game.gainBuff('clot',Math.ceil(66*effectDurMod),0.5); - } - else if (choice=='cursed finger') - { - buff=Game.gainBuff('cursed finger',Math.ceil(10*effectDurMod),Game.cookiesPs*Math.ceil(10*effectDurMod)); - } - else if (choice=='click frenzy') - { - buff=Game.gainBuff('click frenzy',Math.ceil(13*effectDurMod),777); - } - else if (choice=='dragonflight') - { - buff=Game.gainBuff('dragonflight',Math.ceil(10*effectDurMod),1111); - if (Math.random()<0.8) Game.killBuff('Click frenzy'); - } - else if (choice=='chain cookie') - { - //fix by Icehawk78 - if (this.chain==0) this.totalFromChain=0; - this.chain++; - var digit=me.wrath?6:7; - if (this.chain==1) this.chain+=Math.max(0,Math.ceil(Math.log(Game.cookies)/Math.LN10)-10); - - var maxPayout=Math.min(Game.cookiesPs*60*60*6,Game.cookies*0.5)*mult; - var moni=Math.max(digit,Math.min(Math.floor(1/9*Math.pow(10,this.chain)*digit*mult),maxPayout)); - var nextMoni=Math.max(digit,Math.min(Math.floor(1/9*Math.pow(10,this.chain+1)*digit*mult),maxPayout)); - this.totalFromChain+=moni; - - //break the chain if we're above 5 digits AND it's more than 50% of our bank, it grants more than 6 hours of our CpS, or just a 1% chance each digit (update : removed digit limit) - if (Math.random()<0.01 || nextMoni>=maxPayout) - { - this.chain=0; - popup=loc("Cookie chain")+'
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+'
'+loc("Cookie chain over. You made %1.",loc("%1 cookie",LBeautify(this.totalFromChain)))+'
'; - } - else - { - popup=loc("Cookie chain")+'
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+''; - } - Game.Earn(moni); - } - else if (choice=='cookie storm') - { - buff=Game.gainBuff('cookie storm',Math.ceil(7*effectDurMod),7); - } - else if (choice=='cookie storm drop') - { - var moni=Math.max(mult*(Game.cookiesPs*60*Math.floor(Math.random()*7+1)),Math.floor(Math.random()*7+1));//either 1-7 cookies or 1-7 minutes of cookie production, whichever is highest - Game.Earn(moni); - popup='
'+loc("+%1!",loc('%1 cookie',LBeautify(moni)))+'
'; - } - else if (choice=='blab')//sorry (it's really rare) - { - var str=EN?(choose([ - 'Cookie crumbliness x3 for 60 seconds!', - 'Chocolatiness x7 for 77 seconds!', - 'Dough elasticity halved for 66 seconds!', - 'Golden cookie shininess doubled for 3 seconds!', - 'World economy halved for 30 seconds!', - 'Grandma kisses 23% stingier for 45 seconds!', - 'Thanks for clicking!', - 'Fooled you! This one was just a test.', - 'Golden cookies clicked +1!', - 'Your click has been registered. Thank you for your cooperation.', - 'Thanks! That hit the spot!', - 'Thank you. A team has been dispatched.', - 'They know.', - 'Oops. This was just a chocolate cookie with shiny aluminium foil.', - 'Eschaton immanentized!', - 'Oh, that tickled!', - 'Again.', - 'You\'ve made a grave mistake.', - 'Chocolate chips reshuffled!', - 'Randomized chance card outcome!', - 'Mouse acceleration +0.03%!', - 'Ascension bonuses x5,000 for 0.1 seconds!', - 'Gained 1 extra!', - 'Sorry, better luck next time!', - 'I felt that.', - 'Nice try, but no.', - 'Wait, sorry, I wasn\'t ready yet.', - 'Yippee!', - 'Bones removed.', - 'Organs added.', - 'Did you just click that?', - 'Huh? Oh, there was nothing there.', - 'You saw nothing.', - 'It seems you hallucinated that golden cookie.', - 'This golden cookie was a complete fabrication.', - 'In theory there\'s no wrong way to click a golden cookie, but you just did that, somehow.', - 'All cookies multiplied by 999!
All cookies divided by 999!', - 'Why?' - ])):choose(loc("Cookie blab")); - popup=str; - } - - if (popup=='' && buff && buff.name && buff.desc) popup=buff.dname+'
'+buff.desc+'
'; - if (popup!='') Game.Popup(popup,me.x+me.l.offsetWidth/2,me.y); - - Game.DropEgg(0.9); - - //sparkle and kill the shimmer - Game.SparkleAt(me.x+48,me.y+48); - if (choice=='cookie storm drop') - { - if (Game.prefs.cookiesound) PlaySound('snd/clickb'+Math.floor(Math.random()*7+1)+'.mp3',0.75); - else PlaySound('snd/click'+Math.floor(Math.random()*7+1)+'.mp3',0.75); - } - else PlaySound('snd/shimmerClick.mp3'); - me.die(); - }, - missFunc:function(me) - { - if (this.chain>0 && this.totalFromChain>0) - { - Game.Popup(loc("Cookie chain broken.
You made %1.",loc("%1 cookie",LBeautify(this.totalFromChain))),me.x+me.l.offsetWidth/2,me.y); - this.chain=0;this.totalFromChain=0; - } - if (me.spawnLead) Game.missedGoldenClicks++; - }, - spawnsOnTimer:true, - spawnConditions:function() - { - if (!Game.Has('Golden switch [off]')) return true; else return false; - }, - spawned:0, - time:0, - minTime:0, - maxTime:0, - getTimeMod:function(me,m) - { - if (Game.Has('Lucky day')) m/=2; - if (Game.Has('Serendipity')) m/=2; - if (Game.Has('Golden goose egg')) m*=0.95; - if (Game.Has('Heavenly luck')) m*=0.95; - if (Game.Has('Green yeast digestives')) m*=0.99; - //if (Game.hasAura('Arcane Aura')) m*=0.95; - m*=1-Game.auraMult('Arcane Aura')*0.05; - if (Game.hasBuff('Sugar blessing')) m*=0.9; - if (Game.season=='easter' && Game.Has('Starspawn')) m*=0.98; - else if (Game.season=='halloween' && Game.Has('Starterror')) m*=0.98; - else if (Game.season=='valentines' && Game.Has('Starlove')) m*=0.98; - else if (Game.season=='fools' && Game.Has('Startrade')) m*=0.95; - if (!me.wrath) m*=1/Game.eff('goldenCookieFreq'); - else m*=1/Game.eff('wrathCookieFreq'); - if (Game.hasGod) - { - var godLvl=Game.hasGod('industry'); - if (godLvl==1) m*=1.1; - else if (godLvl==2) m*=1.06; - else if (godLvl==3) m*=1.03; - var godLvl=Game.hasGod('mother'); - if (godLvl==1) m*=1.15; - else if (godLvl==2) m*=1.1; - else if (godLvl==3) m*=1.05; - - if (Game.season!='') - { - var godLvl=Game.hasGod('seasons'); - if (Game.season!='fools') - { - if (godLvl==1) m*=0.97; - else if (godLvl==2) m*=0.98; - else if (godLvl==3) m*=0.99; - } - else - { - if (godLvl==1) m*=0.955; - else if (godLvl==2) m*=0.97; - else if (godLvl==3) m*=0.985; - } - } - } - if (this.chain>0) m=0.05; - if (Game.Has('Gold hoard')) m=0.01; - return Math.ceil(Game.fps*60*m); - }, - getMinTime:function(me) - { - var m=5; - return this.getTimeMod(me,m); - }, - getMaxTime:function(me) - { - var m=15; - return this.getTimeMod(me,m); - }, - last:'', - }, - 'reindeer':{ - reset:function() - { - }, - initFunc:function(me) - { - if (!this.spawned && Game.chimeType!=0 && Game.ascensionMode!=1) PlaySound('snd/jingle.mp3'); - - me.x=-128; - me.y=Math.floor(Math.random()*Math.max(0,Game.bounds.bottom-Game.bounds.top-256)+Game.bounds.top+128)-128; - //me.l.style.left=me.x+'px'; - //me.l.style.top=me.y+'px'; - me.l.style.width='167px'; - me.l.style.height='212px'; - me.l.style.backgroundImage='url(img/frostedReindeer.png)'; - me.l.style.opacity='0'; - //me.l.style.transform='rotate('+(Math.random()*60-30)+'deg) scale('+(Math.random()*1+0.25)+')'; - me.l.style.display='block'; - me.l.setAttribute('alt',loc("Reindeer")); - - me.life=1;//the reindeer's current progression through its lifespan (in frames) - me.dur=4;//duration; the cookie's lifespan in seconds before it despawns - - var dur=4; - if (Game.Has('Weighted sleighs')) dur*=2; - dur*=Game.eff('reindeerDur'); - me.dur=dur; - me.life=Math.ceil(Game.fps*me.dur); - me.sizeMult=1; - }, - updateFunc:function(me) - { - var curve=1-Math.pow((me.life/(Game.fps*me.dur))*2-1,12); - me.l.style.opacity=curve; - me.l.style.transform='translate('+(me.x+(Game.bounds.right-Game.bounds.left)*(1-me.life/(Game.fps*me.dur)))+'px,'+(me.y-Math.abs(Math.sin(me.life*0.1))*128)+'px) rotate('+(Math.sin(me.life*0.2+0.3)*10)+'deg) scale('+(me.sizeMult*(1+Math.sin(me.id*0.53)*0.1))+')'; - me.life--; - if (me.life<=0) {this.missFunc(me);me.die();} - }, - popFunc:function(me) - { - //get achievs and stats - if (me.spawnLead) - { - Game.reindeerClicked++; - } - - var val=Game.cookiesPs*60; - if (Game.hasBuff('Elder frenzy')) val*=0.5;//very sorry - if (Game.hasBuff('Frenzy')) val*=0.75;//I sincerely apologize - var moni=Math.max(25,val);//1 minute of cookie production, or 25 cookies - whichever is highest - if (Game.Has('Ho ho ho-flavored frosting')) moni*=2; - moni*=Game.eff('reindeerGain'); - Game.Earn(moni); - if (Game.hasBuff('Elder frenzy')) Game.Win('Eldeer'); - - var cookie=''; - var failRate=0.8; - if (Game.HasAchiev('Let it snow')) failRate=0.6; - failRate*=1/Game.dropRateMult(); - if (Game.Has('Starsnow')) failRate*=0.95; - if (Game.hasGod) - { - var godLvl=Game.hasGod('seasons'); - if (godLvl==1) failRate*=0.9; - else if (godLvl==2) failRate*=0.95; - else if (godLvl==3) failRate*=0.97; - } - if (Math.random()>failRate)//christmas cookie drops - { - cookie=choose(['Christmas tree biscuits','Snowflake biscuits','Snowman biscuits','Holly biscuits','Candy cane biscuits','Bell biscuits','Present biscuits']); - if (!Game.HasUnlocked(cookie) && !Game.Has(cookie)) - { - Game.Unlock(cookie); - } - else cookie=''; - } - - var popup=''; - - Game.Notify(loc("You found %1!",choose(loc("Reindeer names"))),loc("The reindeer gives you %1.",loc("%1 cookie",LBeautify(moni)))+(cookie==''?'':'
'+loc("You are also rewarded with %1!",Game.Upgrades[cookie].dname)),[12,9],6); - popup='
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+'
'; - - if (popup!='') Game.Popup(popup,Game.mouseX,Game.mouseY); - - //sparkle and kill the shimmer - Game.SparkleAt(Game.mouseX,Game.mouseY); - PlaySound('snd/jingleClick.mp3'); - me.die(); - }, - missFunc:function(me) - { - }, - spawnsOnTimer:true, - spawnConditions:function() - { - if (Game.season=='christmas') return true; else return false; - }, - spawned:0, - time:0, - minTime:0, - maxTime:0, - getTimeMod:function(me,m) - { - if (Game.Has('Reindeer baking grounds')) m/=2; - if (Game.Has('Starsnow')) m*=0.95; - if (Game.hasGod) - { - var godLvl=Game.hasGod('seasons'); - if (godLvl==1) m*=0.9; - else if (godLvl==2) m*=0.95; - else if (godLvl==3) m*=0.97; - } - m*=1/Game.eff('reindeerFreq'); - if (Game.Has('Reindeer season')) m=0.01; - return Math.ceil(Game.fps*60*m); - }, - getMinTime:function(me) - { - var m=3; - return this.getTimeMod(me,m); - }, - getMaxTime:function(me) - { - var m=6; - return this.getTimeMod(me,m); - }, - } - }; - - Game.goldenCookieChoices=[ - "Frenzy","frenzy", - "Lucky","multiply cookies", - "Ruin","ruin cookies", - "Elder frenzy","blood frenzy", - "Clot","clot", - "Click frenzy","click frenzy", - "Cursed finger","cursed finger", - "Cookie chain","chain cookie", - "Cookie storm","cookie storm", - "Building special","building special", - "Dragon Harvest","dragon harvest", - "Dragonflight","dragonflight", - "Sweet","free sugar lump", - "Blab","blab" - ]; - Game.goldenCookieBuildingBuffs={ - 'Cursor':['High-five','Slap to the face'], - 'Grandma':['Congregation','Senility'], - 'Farm':['Luxuriant harvest','Locusts'], - 'Mine':['Ore vein','Cave-in'], - 'Factory':['Oiled-up','Jammed machinery'], - 'Bank':['Juicy profits','Recession'], - 'Temple':['Fervent adoration','Crisis of faith'], - 'Wizard tower':['Manabloom','Magivores'], - 'Shipment':['Delicious lifeforms','Black holes'], - 'Alchemy lab':['Breakthrough','Lab disaster'], - 'Portal':['Righteous cataclysm','Dimensional calamity'], - 'Time machine':['Golden ages','Time jam'], - 'Antimatter condenser':['Extra cycles','Predictable tragedy'], - 'Prism':['Solar flare','Eclipse'], - 'Chancemaker':['Winning streak','Dry spell'], - 'Fractal engine':['Macrocosm','Microcosm'], - 'Javascript console':['Refactoring','Antipattern'], - 'Idleverse':['Cosmic nursery','Big crunch'], - 'Cortex baker':['Brainstorm','Brain freeze'], - }; - - /*===================================================================================== - PARTICLES - =======================================================================================*/ - //generic particles (falling cookies etc) - //only displayed on left section - Game.particles=[]; - Game.particlesN=50; - for (var i=0;i=Game.fps*me.dur) - { - me.life=-1; - } - } - } - } - Game.particleAdd=function(x,y,xd,yd,size,dur,z,pic,text) - { - //Game.particleAdd(pos X,pos Y,speed X,speed Y,size (multiplier),duration (seconds),layer,picture,text); - //pick the first free (or the oldest) particle to replace it - if (true)//Game.prefs.particles) - { - var highest=0; - var highestI=0; - for (var i=0;ihighest) - { - highest=Game.particles[i].life; - highestI=i; - } - } - var auto=0; - if (x) auto=1; - var i=highestI; - var x=x||-64; - if (Game.LeftBackground && !auto) x=Math.floor(Math.random()*Game.LeftBackground.canvas.width); - var y=y||-64; - var me=Game.particles[i]; - me.life=0; - me.x=x; - me.y=y; - me.xd=xd||0; - me.yd=yd||0; - me.size=size||1; - me.z=z||0; - me.dur=dur||2; - me.r=Math.floor(Math.random()*360); - me.picId=Math.floor(Math.random()*10000); - if (!pic) - { - if (Game.season=='fools') pic='smallDollars.png'; - else - { - var cookies=[[10,0]]; - for (var i in Game.Upgrades) - { - var cookie=Game.Upgrades[i]; - if (cookie.bought>0 && cookie.pool=='cookie') cookies.push(cookie.icon); - } - me.picPos=choose(cookies); - if (Game.bakeryName.toLowerCase()=='ortiel' || Math.random()<1/10000) me.picPos=[17,5]; - pic='icons.png'; - } - } - else if (typeof pic!=='string'){me.picPos=pic;pic='icons.png';} - me.pic=pic||'smallCookies.png'; - me.text=text||0; - return me; - } - return {}; - } - Game.particlesDraw=function(z) - { - var ctx=Game.LeftBackground; - ctx.fillStyle='#fff'; - ctx.font='20px Merriweather'; - ctx.textAlign='center'; - - for (var i=0;i'; - } - l('particles').innerHTML=str; - Game.textParticlesUpdate=function() - { - for (var i in Game.textParticles) - { - var me=Game.textParticles[i]; - if (me.life!=-1) - { - me.life++; - if (me.life>=Game.fps*4) - { - var el=me.l; - me.life=-1; - el.style.opacity=0; - el.style.display='none'; - } - } - } - } - Game.textParticlesAdd=function(text,el,posX,posY) - { - //pick the first free (or the oldest) particle to replace it - var highest=0; - var highestI=0; - for (var i in Game.textParticles) - { - if (Game.textParticles[i].life==-1) {highestI=i;break;} - if (Game.textParticles[i].life>highest) - { - highest=Game.textParticles[i].life; - highestI=i; - } - } - var i=highestI; - var noStack=0; - if (typeof posX!=='undefined' && typeof posY!=='undefined') - { - x=posX; - y=posY; - noStack=1; - } - else - { - var x=(Math.random()-0.5)*40; - var y=0;//+(Math.random()-0.5)*40; - if (!el) - { - var rect=Game.bounds; - var x=Math.floor((rect.left+rect.right)/2); - var y=Math.floor((rect.bottom))-(Game.mobile*64); - x+=(Math.random()-0.5)*40; - y+=0;//(Math.random()-0.5)*40; - } - } - if (!noStack) y-=Game.textParticlesY; - - x=Math.max(Game.bounds.left+200,x); - x=Math.min(Game.bounds.right-200,x); - y=Math.max(Game.bounds.top+32+(App?32:0),y); - - var me=Game.textParticles[i]; - if (!me.l) me.l=l('particle'+i); - me.life=0; - me.x=x; - me.y=y; - me.text=text; - me.l.innerHTML=text; - me.l.style.left=Math.floor(Game.textParticles[i].x-200)+'px'; - me.l.style.bottom=Math.floor(-Game.textParticles[i].y)+'px'; - for (var ii in Game.textParticles) - {if (ii!=i) (Game.textParticles[ii].l||l('particle'+ii)).style.zIndex=100000000;} - me.l.style.zIndex=100000001; - me.l.style.display='block'; - me.l.className='particle title'; - void me.l.offsetWidth; - me.l.className='particle title risingUpLinger'; - if (!noStack) Game.textParticlesY+=60; - } - Game.popups=1; - Game.Popup=function(text,x,y) - { - if (Game.popups) Game.textParticlesAdd(text,0,x,y); - } - - //display sparkles at a set position - Game.sparkles=l('sparkles'); - Game.sparklesT=0; - Game.sparklesFrames=16; - Game.SparkleAt=function(x,y) - { - if (Game.blendModesOn) - { - Game.sparklesT=Game.sparklesFrames+1; - Game.sparkles.style.backgroundPosition='0px 0px'; - Game.sparkles.style.left=Math.floor(x-64)+'px'; - Game.sparkles.style.top=Math.floor(y-64)+'px'; - Game.sparkles.style.display='block'; - } - } - Game.SparkleOn=function(el) - { - var rect=el.getBounds(); - Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24); - } - - /*===================================================================================== - NOTIFICATIONS - =======================================================================================*/ - //maybe do all this mess with proper DOM instead of rewriting the innerHTML - Game.Notes=[]; - Game.NotesById=[]; - Game.noteId=0; - Game.noteL=l('notes'); - Game.Note=function(title,desc,pic,quick) - { - this.title=title; - this.desc=desc||''; - this.pic=pic||''; - this.id=Game.noteId; - this.date=Date.now(); - this.quick=quick||0; - this.life=(this.quick||1)*Game.fps; - this.l=0; - this.height=0; - this.tooltip=0; - Game.noteId++; - Game.NotesById[this.id]=this; - Game.Notes.unshift(this); - if (Game.Notes.length>50) Game.Notes.pop(); - //Game.Notes.push(this); - //if (Game.Notes.length>50) Game.Notes.shift(); - Game.UpdateNotes(); - } - Game.CloseNote=function(id) - { - var me=Game.NotesById[id]; - if (Game.tooltip.from && Game.tooltip.from.id.indexOf('note-')==0) Game.tooltip.hide(); - Game.Notes.splice(Game.Notes.indexOf(me),1); - //Game.NotesById.splice(Game.NotesById.indexOf(me),1); - Game.NotesById[id]=null; - Game.UpdateNotes(); - } - Game.CloseNotes=function() - { - Game.Notes=[]; - Game.NotesById=[]; - Game.tooltip.hide(); - Game.UpdateNotes(); - } - Game.UpdateNotes=function() - { - var str=''; - var remaining=Game.Notes.length; - for (var i in Game.Notes) - { - if (i<5) - { - var me=Game.Notes[i]; - var pic=''; - if (me.pic!='') pic='
'; - str='
x
'+pic+'

'+me.title+'

'+(me.desc!=''?'
'+me.desc+'
':'')+'
'+str; - remaining--; - } - } - if (remaining>0) str='
'+loc("+%1 more notification.",LBeautify(remaining))+'
'+str; - if (Game.Notes.length>1) - { - str+='
x
'; - } - Game.noteL.innerHTML=str; - for (var i in Game.Notes) - { - me.l=0; - if (i<5) - { - var me=Game.Notes[i]; - me.l=l('note-'+me.id); - } - } - } - Game.NotesLogic=function() - { - for (var i in Game.Notes) - { - if (Game.Notes[i].quick>0) - { - var me=Game.Notes[i]; - me.life--; - if (me.life<=0) Game.CloseNote(me.id); - } - } - } - Game.NotesDraw=function() - { - for (var i in Game.Notes) - { - if (Game.Notes[i].quick>0) - { - var me=Game.Notes[i]; - if (me.l) - { - if (me.life<10) - { - me.l.style.opacity=(me.life/10); - } - } - } - } - } - Game.Notify=function(title,desc,pic,quick,noLog) - { - if (Game.prefs.notifs) - { - quick=Math.min(6,quick); - if (!quick) quick=6; - } - desc=replaceAll('==CLOSETHIS()==','Game.CloseNote('+Game.noteId+');',desc); - if (Game.popups) new Game.Note(title,desc,pic,quick); - if (!noLog) Game.AddToLog(''+title+' | '+desc); - } - Game.NotifyTooltip=function(content) - { - //attaches a tooltip to the last spawned note - if (!Game.NotesById[Game.noteId-1]) return false; - var me=Game.NotesById[Game.noteId-1]; - me.tooltip=content; - Game.UpdateNotes(); - } - - - /*===================================================================================== - PROMPT - =======================================================================================*/ - Game.darkenL=l('darken'); - AddEvent(Game.darkenL,'click',function(){if (Game.promptNoClose) {} else {Game.Click=0;PlaySound('snd/tickOff.mp3');Game.ClosePrompt();}}); - Game.promptL=l('promptContent'); - Game.promptAnchorL=l('promptAnchor'); - Game.promptWrapL=l('prompt'); - Game.promptConfirm=''; - Game.promptOn=0; - Game.promptUpdateFunc=0; - Game.promptOptionsN=0; - Game.promptOptionFocus=0; - Game.promptNoClose=false; - Game.UpdatePrompt=function() - { - if (Game.promptUpdateFunc) Game.promptUpdateFunc(); - Game.promptAnchorL.style.top=Math.floor((Game.windowH-Game.promptWrapL.offsetHeight)/2-16)+'px'; - } - Game.Prompt=function(content,options,updateFunc,style) - { - Game.promptNoClose=false; - if (updateFunc) Game.promptUpdateFunc=updateFunc; - if (style) Game.promptWrapL.className='framed '+style; else Game.promptWrapL.className='framed'; - var str=''; - str+=content; - if (str.indexOf('')); - str=str.substring(str.indexOf('>')+1); - str='
'+str+'
'; - } - if (str.indexOf('')!=-1) - { - str=str.replace('',''); - Game.promptNoClose=true; - } - var opts=''; - Game.promptOptionsN=0; - for (var i=0;i'+options[i][0]+''; - Game.promptOptionsN++; - } - } - Game.promptL.innerHTML=str+'
'+opts+'
'; - Game.promptAnchorL.style.display='block'; - Game.darkenL.style.display='block'; - Game.promptL.focus(); - Game.promptOn=1; - Game.promptOptionFocus=0; - Game.FocusPromptOption(0); - Game.UpdatePrompt(); - if (!Game.promptNoClose) l('promptClose').style.display='block'; else l('promptClose').style.display='none'; - } - Game.ClosePrompt=function() - { - if (!Game.promptOn) return false; - Game.promptAnchorL.style.display='none'; - Game.darkenL.style.display='none'; - Game.promptOn=0; - Game.promptUpdateFunc=0; - Game.promptOptionFocus=0; - Game.promptOptionsN=0; - Game.promptNoClose=false; - } - Game.ConfirmPrompt=function() - { - if (Game.promptOn && l('promptOption'+Game.promptOptionFocus) && l('promptOption'+Game.promptOptionFocus).style.display!='none') FireEvent(l('promptOption'+Game.promptOptionFocus),'click'); - } - Game.FocusPromptOption=function(dir,tryN) - { - var id=Game.promptOptionFocus+dir; - if (id<0) id=Game.promptOptionsN-1; - if (id>=Game.promptOptionsN) id=0; - while (id>=0 && id'+(Game.prefs[prefName]?on:off)+''; - } - Game.Toggle=function(prefName,button,on,off,invert) - { - if (Game.prefs[prefName]) - { - l(button).innerHTML=off; - Game.prefs[prefName]=0; - } - else - { - l(button).innerHTML=on; - Game.prefs[prefName]=1; - } - l(button).className='smallFancyButton prefButton option'+((Game.prefs[prefName]^invert)?'':' off'); - - } - Game.ToggleFancy=function() - { - if (Game.prefs.fancy) Game.removeClass('noFancy'); - else if (!Game.prefs.fancy) Game.addClass('noFancy'); - } - Game.ToggleFilters=function() - { - if (Game.prefs.filters) Game.removeClass('noFilters'); - else if (!Game.prefs.filters) Game.addClass('noFilters'); - } - Game.ToggleExtraButtons=function() - { - if (!Game.prefs.extraButtons) Game.removeClass('extraButtons'); - else if (Game.prefs.extraButtons) Game.addClass('extraButtons'); - for (var i in Game.Objects) - { - Game.Objects[i].mute(0); - } - } - Game.ToggleFullscreen=function() - { - if (App) App.setFullscreen(Game.prefs.fullscreen); - } - - Game.WriteSlider=function(slider,leftText,rightText,startValueFunction,callback) - { - if (!callback) callback=''; - return '
'+leftText+'
'+rightText.replace('[$]',startValueFunction())+'
'; - } - - Game.onPanel='Left'; - Game.addClass('focus'+Game.onPanel); - Game.ShowPanel=function(what) - { - if (!what) what=''; - if (Game.onPanel!=what) - { - Game.removeClass('focus'+Game.onPanel); - Game.addClass('focus'+what); - } - Game.onPanel=what; - } - - Game.onMenu=''; - Game.ShowMenu=function(what) - { - if (!what || what=='') what=Game.onMenu; - if (Game.onMenu=='' && what!='') Game.addClass('onMenu'); - else if (Game.onMenu!='' && what!=Game.onMenu) Game.addClass('onMenu'); - else if (what==Game.onMenu) {Game.removeClass('onMenu');what='';} - //if (what=='log') l('donateBox').className='on'; else l('donateBox').className=''; - Game.onMenu=what; - - l('prefsButton').className=(Game.onMenu=='prefs')?'panelButton selected':'panelButton'; - l('statsButton').className=(Game.onMenu=='stats')?'panelButton selected':'panelButton'; - l('logButton').className=(Game.onMenu=='log')?'panelButton selected':'panelButton'; - - if (Game.onMenu=='') PlaySound('snd/clickOff2.mp3'); - else PlaySound('snd/clickOn2.mp3'); - - Game.UpdateMenu(); - - if (what=='') - { - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (me.minigame && me.minigame.onResize) me.minigame.onResize(); - } - } - } - Game.sayTime=function(time,detail) - { - //time is a value where one second is equal to Game.fps (30). - //detail skips days when >1, hours when >2, minutes when >3 and seconds when >4. - //if detail is -1, output something like "3 hours, 9 minutes, 48 seconds" - if (time<=0) return ''; - var str=''; - var detail=detail||0; - time=Math.floor(time); - if (detail==-1) - { - //var months=0; - var days=0; - var hours=0; - var minutes=0; - var seconds=0; - //if (time>=Game.fps*60*60*24*30) months=(Math.floor(time/(Game.fps*60*60*24*30))); - if (time>=Game.fps*60*60*24) days=(Math.floor(time/(Game.fps*60*60*24))); - if (time>=Game.fps*60*60) hours=(Math.floor(time/(Game.fps*60*60))); - if (time>=Game.fps*60) minutes=(Math.floor(time/(Game.fps*60))); - if (time>=Game.fps) seconds=(Math.floor(time/(Game.fps))); - //days-=months*30; - hours-=days*24; - minutes-=hours*60+days*24*60; - seconds-=minutes*60+hours*60*60+days*24*60*60; - if (days>10) {hours=0;} - if (days) {minutes=0;seconds=0;} - if (hours) {seconds=0;} - var bits=[]; - //if (months>0) bits.push(Beautify(months)+' month'+(days==1?'':'s')); - if (days>0) bits.push(loc("%1 day",LBeautify(days))); - if (hours>0) bits.push(loc("%1 hour",LBeautify(hours))); - if (minutes>0) bits.push(loc("%1 minute",LBeautify(minutes))); - if (seconds>0) bits.push(loc("%1 second",LBeautify(seconds))); - if (bits.length==0) str=loc("less than 1 second"); - else str=bits.join(', '); - /*//if (months>0) bits.push(Beautify(months)+' month'+(days==1?'':'s')); - if (days>0) bits.push(Beautify(days)+' day'+(days==1?'':'s')); - if (hours>0) bits.push(Beautify(hours)+' hour'+(hours==1?'':'s')); - if (minutes>0) bits.push(Beautify(minutes)+' minute'+(minutes==1?'':'s')); - if (seconds>0) bits.push(Beautify(seconds)+' second'+(seconds==1?'':'s')); - if (bits.length==0) str='less than 1 second'; - else str=bits.join(', ');*/ - } - else - { - /*if (time>=Game.fps*60*60*24*30*2 && detail<1) str=Beautify(Math.floor(time/(Game.fps*60*60*24*30)))+' months'; - else if (time>=Game.fps*60*60*24*30 && detail<1) str='1 month'; - else */if (time>=Game.fps*60*60*24 && detail<2) str=loc("%1 day",LBeautify(Math.floor(time/(Game.fps*60*60*24))));//Beautify(Math.floor(time/(Game.fps*60*60*24)))+' days'; - else if (time>=Game.fps*60*60 && detail<3) str=loc("%1 hour",LBeautify(Math.floor(time/(Game.fps*60*60))));//Beautify(Math.floor(time/(Game.fps*60*60)))+' hours'; - else if (time>=Game.fps*60 && detail<4) str=loc("%1 minute",LBeautify(Math.floor(time/(Game.fps*60))));//Beautify(Math.floor(time/(Game.fps*60)))+' minutes'; - else if (time>=Game.fps && detail<5) str=loc("%1 second",LBeautify(Math.floor(time/(Game.fps))));//Beautify(Math.floor(time/(Game.fps)))+' seconds'; - else str=loc("less than 1 second"); - } - return str; - } - - Game.tinyCookie=function() - { - if (!Game.HasAchiev('Tiny cookie')) - { - return '
'; - } - return ''; - } - Game.ClickTinyCookie=function(){if (!Game.HasAchiev('Tiny cookie')){PlaySound('snd/tick.mp3');Game.Win('Tiny cookie');}} - - Game.setVolume=function(what) - { - Game.volume=what; - /*for (var i in Sounds) - { - Sounds[i].volume=Game.volume; - }*/ - } - Game.setVolumeMusic=function(what) - { - Game.volumeMusic=what; - if (Music) Music.setVolume(what/100); - } - Game.setWubMusic=function(what) - { - if (Music) Music.setFilter(what/100); - } - - Game.showLangSelection=function(firstLaunch) - { - var str=''; - for (var i in Langs) - { - var lang=Langs[i]; - str+='
'+lang.name+'
'; - } - Game.Prompt(''+(firstLaunch?'':'')+'

'+loc("Change language")+'

'+ - '
'+ - (firstLaunch?'':'
('+loc("note: this will save and reload your game")+')
')+ - str, - (firstLaunch?0:[loc("Cancel")])); - - for (var i in Langs) - { - var lang=Langs[i]; - AddEvent(l('langSelect-'+i),'click',function(lang){return function(){ - if (true)//lang!=locId) - { - PlaySound('snd/tick.mp3'); - localStorageSet('CookieClickerLang',lang); - Game.toSave=true; - Game.toReload=true; - } - };}(i)); - AddEvent(l('langSelect-'+i),'mouseover',function(lang){return function(){ - PlaySound('snd/smallTick.mp3',0.75); - l('languageSelectHeader').innerHTML=Langs[lang].changeLanguage; - };}(i)); - } - } - - ON=' '+loc("ON"); - OFF=' '+loc("OFF"); - Game.UpdateMenu=function() - { - var str=''; - if (Game.onMenu!='') - { - str+=''; - //str+='
X
'; - } - if (Game.onMenu=='prefs') - { - str+='
'+loc("Options")+'
'; - - str+= - '
'+ - '
'+ - '
'+loc("General")+'
'+ - '
'+loc("Language: %1",''+Langs[locId].name+'')+'
'+(!EN?'Change language
':'')+loc("Change language")+'
'+ - (App?'':'')+ - '
'+loc("Save")+'
'+ - '
'+loc("Export save")+''+loc("Import save")+'
'+ - (!App?('
'+loc("Save to file")+''+loc("Load from file")+'
'):'')+ - '
'+loc("Wipe save")+'
'+ - - '
'+ - '
'+ - '
'+ - '
'+ - - '
'+loc("Settings")+'
'+ - ((App && App.writeCloudUI)?App.writeCloudUI():'')+ - '
'+ - Game.WriteSlider('volumeSlider',loc("Volume"),'[$]%',function(){return Game.volume;},'Game.setVolume(Math.round(l(\'volumeSlider\').value));l(\'volumeSliderRightText\').innerHTML=Game.volume+\'%\';')+ - (App?Game.WriteSlider('volumeMusicSlider',loc("Volume (music)"),'[$]%',function(){return Game.volumeMusic;},'Game.setVolumeMusic(Math.round(l(\'volumeMusicSlider\').value));l(\'volumeMusicSliderRightText\').innerHTML=Game.volumeMusic+\'%\';'):'')+ - /*(App?Game.WriteSlider('wubMusicSlider',loc("Wub"),'[$]%',function(){return 100;},'Game.setWubMusic(Math.round(l(\'wubMusicSlider\').value));l(\'wubMusicSliderRightText\').innerHTML=(Math.round(l(\'wubMusicSlider\').value))+\'%\';'):'')+*/ - '
'+ - (App?Game.WritePrefButton('bgMusic','bgMusicButton',loc("Music in background")+ON,loc("Music in background")+OFF,'')+'
':'')+ - (App?Game.WritePrefButton('fullscreen','fullscreenButton',loc("Fullscreen")+ON,loc("Fullscreen")+OFF,'Game.ToggleFullscreen();')+'
':'')+ - Game.WritePrefButton('fancy','fancyButton',loc("Fancy graphics")+ON,loc("Fancy graphics")+OFF,'Game.ToggleFancy();')+'
'+ - Game.WritePrefButton('filters','filtersButton',loc("CSS filters")+ON,loc("CSS filters")+OFF,'Game.ToggleFilters();')+'
'+ - Game.WritePrefButton('particles','particlesButton',loc("Particles")+ON,loc("Particles")+OFF)+(EN?'':'')+'
'+ - Game.WritePrefButton('numbers','numbersButton',loc("Numbers")+ON,loc("Numbers")+OFF)+'
'+ - Game.WritePrefButton('milk','milkButton',loc("Milk [setting]")+ON,loc("Milk [setting]")+OFF)+(EN?'':'')+'
'+ - Game.WritePrefButton('cursors','cursorsButton',loc("Cursors [setting]")+ON,loc("Cursors [setting]")+OFF)+'
'+ - Game.WritePrefButton('wobbly','wobblyButton',loc("Wobbly cookie")+ON,loc("Wobbly cookie")+OFF)+(EN?'':'')+'
'+ - Game.WritePrefButton('cookiesound','cookiesoundButton',loc("Alt cookie sound")+ON,loc("Alt cookie sound")+OFF)+(EN?'':'')+'
'+ - Game.WritePrefButton('crates','cratesButton',loc("Icon crates")+ON,loc("Icon crates")+OFF)+'
'+ - Game.WritePrefButton('monospace','monospaceButton',loc("Alt font")+ON,loc("Alt font")+OFF)+'
'+ - Game.WritePrefButton('format','formatButton',loc("Short numbers")+OFF,loc("Short numbers")+ON,'BeautifyAll();Game.RefreshStore();Game.upgradesToRebuild=1;',1)+(EN?'':'')+'
'+ - Game.WritePrefButton('notifs','notifsButton',loc("Fast notes")+ON,loc("Fast notes")+OFF)+'
'+ - //Game.WritePrefButton('autoupdate','autoupdateButton','Offline mode OFF','Offline mode ON',0,1)+'
'+ - (!App?Game.WritePrefButton('warn','warnButton',loc("Closing warning")+ON,loc("Closing warning")+OFF)+'
':'')+ - //Game.WritePrefButton('focus','focusButton',loc("Defocus")+OFF,loc("Defocus")+ON,0,1)+'
'+ - Game.WritePrefButton('extraButtons','extraButtonsButton',loc("Extra buttons")+ON,loc("Extra buttons")+OFF,'Game.ToggleExtraButtons();')+'
'+ - Game.WritePrefButton('askLumps','askLumpsButton',loc("Lump confirmation")+ON,loc("Lump confirmation")+OFF)+'
'+ - (!App?Game.WritePrefButton('customGrandmas','customGrandmasButton',loc("Custom grandmas")+ON,loc("Custom grandmas")+OFF)+'
':'')+ - Game.WritePrefButton('notScary','notScaryButton',loc("Scary stuff")+OFF,loc("Scary stuff")+ON,0,1)+'
'+ - Game.WritePrefButton('timeout','timeoutButton',loc("Sleep mode timeout")+ON,loc("Sleep mode timeout")+OFF)+'
'+ - Game.WritePrefButton('screenreader','screenreaderButton',loc("Screen reader mode")+ON,loc("Screen reader mode")+OFF,'Game.toSave=true;Game.toReload=true;')+'
'+ - '
'+ - //'
'+Game.WritePrefButton('autosave','autosaveButton','Autosave ON','Autosave OFF')+'
'+ - (!App?'
'+loc("Check mod data")+'
':'')+ - - '
'+ - '
'+ - ''; - - if (App && App.writeModUI) - { - str+= - '
'+ - '
'+ - - '
'+loc("Mods")+'
'+ - App.writeModUI()+ - '
'+ - '
'; - } - - str+='
'; - } - else if (Game.onMenu=='log') - { - //str+=replaceAll('[bakeryName]',Game.bakeryName,Game.updateLog); - str+=Game.updateLog; - if (!Game.HasAchiev('Olden days')) str+='
'; - } - else if (Game.onMenu=='stats') - { - var buildingsOwned=0; - buildingsOwned=Game.BuildingsOwned; - var upgrades=''; - var cookieUpgrades=''; - var hiddenUpgrades=''; - var prestigeUpgrades=''; - var upgradesTotal=0; - var upgradesOwned=0; - var prestigeUpgradesTotal=0; - var prestigeUpgradesOwned=0; - - var list=[]; - //sort the upgrades - for (var i in Game.Upgrades){list.push(Game.Upgrades[i]);}//clone first - var sortMap=function(a,b) - { - if (a.order>b.order) return 1; - else if (a.orderb.order) return 1; - else if (a.order0) achievementsTotal++; - if (Game.CountsAsAchievementOwned(me.pool)) achievementsTotal++; - var pool=me.pool; - if (!achievements[pool]) achievements[pool]=''; - achievements[pool]+=Game.crate(me,'stats'); - - if (me.won) - { - if (Game.CountsAsAchievementOwned(me.pool)) achievementsOwned++; - else achievementsOwnedOther++; - } - } - - var achievementsStr=''; - var pools={ - 'dungeon':(EN?'Dungeon achievements (Not technically achievable yet.)':'???'), - 'shadow':''+loc("Shadow achievements")+' ('+loc("These are feats that are either unfair or difficult to attain. They do not give milk.")+')' - }; - for (var i in achievements) - { - if (achievements[i]!='') - { - if (pools[i]) achievementsStr+='
'+pools[i]+'
'; - achievementsStr+='
'+achievements[i]+'
'; - } - } - - var milkStr=''; - for (var i=0;i=i) - { - var milk=Game.Milks[i]; - milkStr+='

'+(loc("Rank %1",romanize(i+1))+' - '+milk.name)+'

('+(i==0?loc("starter milk"):loc("for %1 achievements",Beautify(i*25)))+')
' - ,'top')+' style="background:url(img/icons.png?v='+Game.version+') '+(-milk.icon[0]*48)+'px '+(-milk.icon[1]*48)+'px;margin:2px 0px;" class="trophy">'; - } - } - milkStr+='
'; - - var santaStr=''; - var frames=15; - if (Game.Has('A festive hat')) - { - for (var i=0;i<=Game.santaLevel;i++) - { - santaStr+='

'+Game.santaLevels[i]+'

' - ,'top')+' style="background:url(img/santa.png) '+(-i*48)+'px 0px;background-size:'+(frames*48)+'px 48px;" class="trophy">'; - } - santaStr+='
'; - } - var dragonStr=''; - var frames=9; - var mainLevels=[0,4,8,Game.dragonLevels.length-3,Game.dragonLevels.length-2,Game.dragonLevels.length-1]; - if (Game.Has('A crumbly egg')) - { - for (var i=0;i<=mainLevels.length;i++) - { - if (Game.dragonLevel>=mainLevels[i]) - { - var level=Game.dragonLevels[mainLevels[i]]; - dragonStr+='
'+level.name+'
' - '

'+level.name+'

' - ,'top')+' style="background:url(img/dragon.png?v='+Game.version+') '+(-level.pic*48)+'px 0px;background-size:'+(frames*48)+'px 48px;" class="trophy">'; - } - } - dragonStr+='
'; - } - var ascensionModeStr=''; - var icon=Game.ascensionModes[Game.ascensionMode].icon; - if (Game.resets>0) ascensionModeStr=''+Game.ascensionModes[Game.ascensionMode].desc+'' - ,'top')+'>
'+Game.ascensionModes[Game.ascensionMode].dname+'
'; - - var milkName=Game.Milk.name; - - var researchStr=Game.sayTime(Game.researchT,-1); - var pledgeStr=Game.sayTime(Game.pledgeT,-1); - var wrathStr=''; - if (Game.elderWrath==1) wrathStr=loc("awoken"); - else if (Game.elderWrath==2) wrathStr=loc("displeased"); - else if (Game.elderWrath==3) wrathStr=loc("angered"); - else if (Game.elderWrath==0 && Game.pledges>0) wrathStr=loc("appeased"); - - var dropMult=Game.dropRateMult(); - - var date=new Date(); - date.setTime(Date.now()-Game.startDate); - var timeInSeconds=date.getTime()/1000; - var startDate=Game.sayTime(timeInSeconds*Game.fps,-1); - date.setTime(Date.now()-Game.fullDate); - var fullDate=Game.sayTime(date.getTime()/1000*Game.fps,-1); - if (!Game.fullDate || !fullDate || fullDate.length<1) fullDate=loc("a long while"); - /*date.setTime(new Date().getTime()-Game.lastDate); - var lastDate=Game.sayTime(date.getTime()/1000*Game.fps,2);*/ - - var heavenlyMult=Game.GetHeavenlyMultiplier(); - - var seasonStr=Game.sayTime(Game.seasonT,-1); - - str+='
'+(EN?"Statistics":loc("Stats"))+'
'+ - '
'+ - '
'+loc("General")+'
'+ - '
'+ - '
'+loc("Cookies in bank:")+'
'+Game.tinyCookie()+Beautify(Game.cookies)+'
'+ - '
'+loc("Cookies baked (this ascension):")+'
'+Game.tinyCookie()+Beautify(Game.cookiesEarned)+'
'+ - '
'+loc("Cookies baked (all time):")+'
'+Game.tinyCookie()+Beautify(Game.cookiesEarned+Game.cookiesReset)+'
'+ - (Game.cookiesReset>0?'
'+loc("Cookies forfeited by ascending:")+'
'+Game.tinyCookie()+Beautify(Game.cookiesReset)+'
':'')+ - (Game.resets?('
'+loc("Legacy started:")+' '+(fullDate==''?loc("just now"):loc("%1 ago",fullDate))+', '+loc("with %1 ascension",LBeautify(Game.resets))+'
'):'')+ - '
'+loc("Run started:")+' '+(startDate==''?loc("just now"):loc("%1 ago",startDate))+'
'+ - '
'+loc("Buildings owned:")+' '+Beautify(buildingsOwned)+'
'+ - '
'+loc("Cookies per second:")+' '+Beautify(Game.cookiesPs,1)+' '+ - '('+loc("multiplier:")+' '+Beautify(Math.round(Game.globalCpsMult*100),1)+'%)'+ - (Game.cpsSucked>0?' ('+loc("withered:")+' '+Beautify(Math.round(Game.cpsSucked*100),1)+'%)':'')+ - '
'+ - '
'+loc("Raw cookies per second:")+' '+Beautify(Game.cookiesPsRaw,1)+' '+ - '('+loc("highest this ascension:")+' '+Beautify(Game.cookiesPsRawHighest,1)+')'+ - '
'+ - '
'+loc("Cookies per click:")+' '+Beautify(Game.computedMouseCps,1)+'
'+ - '
'+loc("Cookie clicks:")+' '+Beautify(Game.cookieClicks)+'
'+ - '
'+loc("Hand-made cookies:")+' '+Beautify(Game.handmadeCookies)+'
'+ - '
'+loc("Golden cookie clicks:")+' '+Beautify(Game.goldenClicksLocal)+' ('+loc("all time:")+' '+Beautify(Game.goldenClicks)+')
'+//'
'+ - (dropMult!=1?'
'+loc("Random drop multiplier:")+' x'+Beautify(dropMult,2)+'
':'')+ - '
'+ - '
'+loc("Running version:")+' '+Game.version+'
'+ - - ((researchStr!='' || wrathStr!='' || pledgeStr!='' || santaStr!='' || dragonStr!='' || Game.season!='' || ascensionModeStr!='' || Game.canLumps())?( - '
'+ - '
'+loc("Special")+'
'+ - '
'+ - (ascensionModeStr!=''?'
'+loc("Challenge mode:")+''+ascensionModeStr+'
':'')+ - (Game.season!=''?'
'+loc("Seasonal event:")+' '+Game.seasons[Game.season].name+ - (seasonStr!=''?' ('+loc("%1 remaining",seasonStr)+')':'')+ - '
':'')+ - (EN && Game.season=='fools'? - '
Money made from selling cookies : '+Beautify(Game.cookiesEarned*0.08,2)+' cookie dollars
'+ - (Game.Objects['Portal'].highest>0?'
TV show seasons produced : '+Beautify(Math.floor((timeInSeconds/60/60)*(Game.Objects['Portal'].highest*0.13)+1))+'
':'') - :'')+ - (researchStr!=''?'
'+loc("Research:")+' '+loc("%1 remaining",researchStr)+'
':'')+ - (wrathStr!=''?'
'+loc("Grandmatriarchs status:")+' '+wrathStr+'
':'')+ - (pledgeStr!=''?'
'+loc("Pledge:")+' '+loc("%1 remaining",pledgeStr)+'
':'')+ - (Game.wrinklersPopped>0?'
'+loc("Wrinklers popped:")+' '+Beautify(Game.wrinklersPopped)+'
':'')+ - ((Game.canLumps() && Game.lumpsTotal>-1)?'
'+loc("Sugar lumps harvested:")+'
'+Beautify(Game.lumpsTotal)+'
':'')+ - //(Game.cookiesSucked>0?'
Withered : '+Beautify(Game.cookiesSucked)+' cookies
':'')+ - (Game.reindeerClicked>0?'
'+loc("Reindeer found:")+' '+Beautify(Game.reindeerClicked)+'
':'')+ - (santaStr!=''?'
'+loc("Santa stages unlocked:")+'
'+santaStr+'
':'')+ - (dragonStr!=''?'
'+loc("Dragon training:")+'
'+dragonStr+'
':'')+ - '
' - ):'')+ - ((Game.prestige>0 || prestigeUpgrades!='')?( - '
'+ - '
'+loc("Prestige")+'
'+ - '
'+ - '
'+ - '
'+loc("Prestige level:")+' '+Beautify(Game.prestige)+' '+loc("at %1% of its potential (+%2% CpS)",[Beautify(heavenlyMult*100,1),Beautify(parseFloat(Game.prestige)*Game.heavenlyPower*heavenlyMult,1)])+'
'+loc("Heavenly chips:")+' '+Beautify(Game.heavenlyChips)+'
'+ - '
'+ - (prestigeUpgrades!=''?( - '
'+loc("Prestige upgrades unlocked:")+' '+prestigeUpgradesOwned+'/'+prestigeUpgradesTotal+' ('+Math.floor((prestigeUpgradesOwned/prestigeUpgradesTotal)*100)+'%)
'+ - '
'+prestigeUpgrades+'
'):'')+ - '
' - ):'')+ - - '
'+ - '
'+loc("Upgrades")+'
'+ - '
'+ - (hiddenUpgrades!=''?('
Debug
'+ - '
'+hiddenUpgrades+'
'):'')+ - '
'+loc("Upgrades unlocked:")+' '+upgradesOwned+'/'+upgradesTotal+' ('+Math.floor((upgradesOwned/upgradesTotal)*100)+'%)
'+ - '
'+upgrades+'
'+ - (cookieUpgrades!=''?('
'+loc("Cookies")+'
'+ - '
'+cookieUpgrades+'
'):'')+ - '
'+ - '
'+ - '
'+loc("Achievements")+'
'+ - '
'+ - '
'+loc("Achievements unlocked:")+' '+achievementsOwned+'/'+achievementsTotal+' ('+Math.floor((achievementsOwned/achievementsTotal)*100)+'%)'+(achievementsOwnedOther>0?(' (+'+achievementsOwnedOther+')'):'')+'
'+ - (Game.cookiesMultByType['kittens']>1?('
'+loc("Kitten multiplier:")+' '+Beautify((Game.cookiesMultByType['kittens'])*100)+'%
'):'')+ - '
'+loc("Milk")+': '+milkName+'
'+ - (milkStr!=''?'
'+loc("Milk flavors unlocked:")+'
'+milkStr+'
':'')+ - '
('+loc("Milk is gained with each achievement. It can unlock unique upgrades over time.")+')
'+ - achievementsStr+ - '
'+ - '
'+ - '
' - ; - } - //str='
'+str+'
'; - l('menu').innerHTML=str; - if (App) - { - var anchors=l('menu').getElementsByTagName('a'); - for (var i=0;i14) - { - var animals=['newts','penguins','scorpions','axolotls','puffins','porpoises','blowfish','horses','crayfish','slugs','humpback whales','nurse sharks','giant squids','polar bears','fruit bats','frogs','sea squirts','velvet worms','mole rats','paramecia','nematodes','tardigrades','giraffes','monkfish','wolfmen','goblins','hippies']; - - if (Math.random()<0.75 || Game.cookiesEarned<10000) - { - if (Game.Objects['Grandma'].amount>0) list.push(''+choose(loc("Ticker (grandma)"))+''+Game.Objects['Grandma'].single+''); - - if (!Game.prefs.notScary && Game.Objects['Grandma'].amount>=50) list.push(''+choose(loc("Ticker (threatening grandma)"))+''+Game.Objects['Grandma'].single+''); - - if (EN && Game.HasAchiev('Just wrong') && Math.random()<0.05) list.push(NEWS+'cookie manufacturer downsizes, sells own grandmother!'); - if (!Game.prefs.notScary && Game.HasAchiev('Just wrong') && Math.random()<0.4) list.push(''+choose(loc("Ticker (angry grandma)"))+''+Game.Objects['Grandma'].single+''); - - if (!Game.prefs.notScary && Game.Objects['Grandma'].amount>=1 && Game.pledges>0 && Game.elderWrath==0) list.push(''+choose(loc("Ticker (grandmas return)"))+''+Game.Objects['Grandma'].single+''); - - if (!EN) - { - for (var i in Game.Objects) - { - if (i!='Cursor' && i!='Grandma' && Game.Objects[i].amount>0) list.push(NEWS+choose(loc("Ticker ("+i+")"))); - } - - if (Game.cookiesEarned>=1000) - { - if (Game.season=='halloween') list.push(NEWS+choose(loc("Ticker (Halloween)"))); - if (Game.season=='christmas') list.push(NEWS+choose(loc("Ticker (Christmas)"))); - if (Game.season=='valentines') list.push(NEWS+choose(loc("Ticker (Valentines)"))); - if (Game.season=='easter') list.push(NEWS+choose(loc("Ticker (Easter)"))); - } - } - else - { - if (Game.Objects['Farm'].amount>0) list.push(choose([ - 'News : cookie farms suspected of employing undeclared elderly workforce!', - 'News : cookie farms release harmful chocolate in our rivers, says scientist!', - 'News : genetically-modified chocolate controversy strikes cookie farmers!', - 'News : free-range farm cookies popular with today\'s hip youth, says specialist.', - 'News : farm cookies deemed unfit for vegans, says nutritionist.' - ])); - - if (Game.Objects['Mine'].amount>0) list.push(choose([ - 'News : is our planet getting lighter? Experts examine the effects of intensive chocolate mining.', - 'News : '+Math.floor(Math.random()*1000+2)+' miners trapped in collapsed chocolate mine!', - 'News : chocolate mines found to cause earthquakes and sinkholes!', - 'News : chocolate mine goes awry, floods village in chocolate!', - 'News : depths of chocolate mines found to house "peculiar, chocolaty beings"!' - ])); - - if (Game.Objects['Factory'].amount>0) list.push(choose([ - 'News : cookie factories linked to global warming!', - 'News : cookie factories involved in chocolate weather controversy!', - 'News : cookie factories on strike, robotic minions employed to replace workforce!', - 'News : cookie factories on strike - workers demand to stop being paid in cookies!', - 'News : factory-made cookies linked to obesity, says study.' - ])); - - if (Game.Objects['Bank'].amount>0) list.push(choose([ - 'News : cookie loans on the rise as people can no longer afford them with regular money.', - 'News : cookies slowly creeping up their way as a competitor to traditional currency!', - 'News : most bakeries now fitted with ATMs to allow for easy cookie withdrawals and deposits.', - 'News : cookie economy now strong enough to allow for massive vaults doubling as swimming pools!', - 'News : "Tomorrow\'s wealthiest people will be calculated by their worth in cookies", predict economists.' - ])); - - if (Game.Objects['Temple'].amount>0) list.push(choose([ - 'News : explorers bring back ancient artifact from abandoned temple; archeologists marvel at the centuries-old '+choose(['magic','carved','engraved','sculpted','royal','imperial','mummified','ritual','golden','silver','stone','cursed','plastic','bone','blood','holy','sacred','sacrificial','electronic','singing','tapdancing'])+' '+choose(['spoon','fork','pizza','washing machine','calculator','hat','piano','napkin','skeleton','gown','dagger','sword','shield','skull','emerald','bathtub','mask','rollerskates','litterbox','bait box','cube','sphere','fungus'])+'!', - 'News : recently-discovered chocolate temples now sparking new cookie-related cult; thousands pray to Baker in the sky!', - 'News : just how extensive is the cookie pantheon? Theologians speculate about possible '+choose(['god','goddess'])+' of '+choose([choose(animals),choose(['kazoos','web design','web browsers','kittens','atheism','handbrakes','hats','aglets','elevator music','idle games','the letter "P"','memes','hamburgers','bad puns','kerning','stand-up comedy','failed burglary attempts','clickbait','one weird tricks'])])+'.', - 'News : theists of the world discover new cookie religion - "Oh boy, guess we were wrong all along!"', - 'News : cookie heaven allegedly "sports elevator instead of stairway"; cookie hell "paved with flagstone, as good intentions make for poor building material".' - ])); - - if (Game.Objects['Wizard tower'].amount>0) list.push(choose([ - 'News : all '+choose([choose(animals),choose(['public restrooms','clouds','politicians','moustaches','hats','shoes','pants','clowns','encyclopedias','websites','potted plants','lemons','household items','bodily fluids','cutlery','national landmarks','yogurt','rap music','underwear'])])+' turned into '+choose([choose(animals),choose(['public restrooms','clouds','politicians','moustaches','hats','shoes','pants','clowns','encyclopedias','websites','potted plants','lemons','household items','bodily fluids','cutlery','national landmarks','yogurt','rap music','underwear'])])+' in freak magic catastrophe!', - 'News : heavy dissent rages between the schools of '+choose(['water','fire','earth','air','lightning','acid','song','battle','peace','pencil','internet','space','time','brain','nature','techno','plant','bug','ice','poison','crab','kitten','dolphin','bird','punch','fart'])+' magic and '+choose(['water','fire','earth','air','lightning','acid','song','battle','peace','pencil','internet','space','time','brain','nature','techno','plant','bug','ice','poison','crab','kitten','dolphin','bird','punch','fart'])+' magic!', - 'News : get your new charms and curses at the yearly National Spellcrafting Fair! Exclusive prices on runes and spellbooks.', - 'News : cookie wizards deny involvement in shockingly ugly newborn - infant is "honestly grody-looking, but natural", say doctors.', - 'News : "Any sufficiently crude magic is indistinguishable from technology", claims renowned technowizard.' - ])); - - if (Game.Objects['Shipment'].amount>0) list.push(choose([ - 'News : new chocolate planet found, becomes target of cookie-trading spaceships!', - 'News : massive chocolate planet found with 99.8% certified pure dark chocolate core!', - 'News : space tourism booming as distant planets attract more bored millionaires!', - 'News : chocolate-based organisms found on distant planet!', - 'News : ancient baking artifacts found on distant planet; "terrifying implications", experts say.' - ])); - - if (Game.Objects['Alchemy lab'].amount>0) list.push(choose([ - 'News : national gold reserves dwindle as more and more of the precious mineral is turned to cookies!', - 'News : chocolate jewelry found fashionable, gold and diamonds "just a fad", says specialist.', - 'News : silver found to also be transmutable into white chocolate!', - 'News : defective alchemy lab shut down, found to convert cookies to useless gold.', - 'News : alchemy-made cookies shunned by purists!' - ])); - - if (Game.Objects['Portal'].amount>0) list.push(choose([ - 'News : nation worried as more and more unsettling creatures emerge from dimensional portals!', - 'News : dimensional portals involved in city-engulfing disaster!', - 'News : tourism to cookieverse popular with bored teenagers! Casualty rate as high as 73%!', - 'News : cookieverse portals suspected to cause fast aging and obsession with baking, says study.', - 'News : "do not settle near portals," says specialist; "your children will become strange and corrupted inside."' - ])); - - if (Game.Objects['Time machine'].amount>0) list.push(choose([ - 'News : time machines involved in history-rewriting scandal! Or are they?', - 'News : time machines used in unlawful time tourism!', - 'News : cookies brought back from the past "unfit for human consumption", says historian.', - 'News : various historical figures inexplicably replaced with talking lumps of dough!', - 'News : "I have seen the future," says time machine operator, "and I do not wish to go there again."' - ])); - - if (Game.Objects['Antimatter condenser'].amount>0) list.push(choose([ - 'News : whole town seemingly swallowed by antimatter-induced black hole; more reliable sources affirm town "never really existed"!', - 'News : "explain to me again why we need particle accelerators to bake cookies?" asks misguided local woman.', - 'News : first antimatter condenser successfully turned on, doesn\'t rip apart reality!', - 'News : researchers conclude that what the cookie industry needs, first and foremost, is "more magnets".', - 'News : "unravelling the fabric of reality just makes these cookies so much tastier", claims scientist.' - ])); - - if (Game.Objects['Prism'].amount>0) list.push(choose([ - 'News : new cookie-producing prisms linked to outbreak of rainbow-related viral videos.', - 'News : scientists warn against systematically turning light into matter - "One day, we\'ll end up with all matter and no light!"', - 'News : cookies now being baked at the literal speed of light thanks to new prismatic contraptions.', - 'News : "Can\'t you sense the prism watching us?", rambles insane local man. "No idea what he\'s talking about", shrugs cookie magnate/government official.', - 'News : world citizens advised "not to worry" about frequent atmospheric flashes.', - ])); - - if (Game.Objects['Chancemaker'].amount>0) list.push(choose([ - 'News : strange statistical anomalies continue as weather forecast proves accurate an unprecedented 3 days in a row!', - 'News : local casino ruined as all gamblers somehow hit a week-long winning streak! "We might still be okay", says owner before being hit by lightning 47 times.', - 'News : neighboring nation somehow elects president with sensible policies in freak accident of random chance!', - 'News : million-to-one event sees gritty movie reboot turning out better than the original! "We have no idea how this happened", say movie execs.', - 'News : all scratching tickets printed as winners, prompting national economy to crash and, against all odds, recover overnight.', - ])); - - if (Game.Objects['Fractal engine'].amount>0) list.push(choose([ - 'News : local man "done with Cookie Clicker", finds the constant self-references "grating and on-the-nose".', - 'News : local man sails around the world to find himself - right where he left it.', - 'News : local guru claims "there\'s a little bit of ourselves in everyone", under investigation for alleged cannibalism.', - 'News : news writer finds herself daydreaming about new career. Or at least a raise.', - 'News : polls find idea of cookies made of cookies "acceptable" - "at least we finally know what\'s in them", says interviewed citizen.', - ])); - - if (Game.Objects['Javascript console'].amount>0) list.push(choose([ - 'News : strange fad has parents giving their newborns names such as Emma.js or Liam.js. At least one Baby.js reported.', - 'News : coding is hip! More and more teenagers turn to technical fields like programming, ensuring a future robot apocalypse and the doom of all mankind.', - 'News : developers unsure what to call their new javascript libraries as all combinations of any 3 dictionary words have already been taken.', - 'News : nation holds breath as nested ifs about to hatch.', - 'News : clueless copywriter forgets to escape a quote, ends news line prematurely; last words reported to be "Huh, why isn', - ])); - - if (Game.Objects['Idleverse'].amount>0) list.push(choose([ - 'News : is another you living out their dreams in an alternate universe? Probably, you lazy bum!', - 'News : public recoils at the notion of a cosmos made of infinite idle games. "I kinda hoped there\'d be more to it", says distraught citizen.', - 'News : with an infinity of parallel universes, people turn to reassuring alternate dimensions, which only number "in the high 50s".', - 'News : "I find solace in the knowledge that at least some of my alternate selves are probably doing fine out there", says citizen\'s last remaining exemplar in the multiverse.', - 'News : comic book writers point to actual multiverse in defense of dubious plot points. "See? I told you it wasn\'t \'hackneyed and contrived\'!"' - ])); - - if (Game.Objects['Cortex baker'].amount>0) list.push(choose([ - 'News : cortex baker wranglers kindly remind employees that cortex bakers are the bakery\'s material property and should not be endeared with nicknames.', - 'News : space-faring employees advised to ignore unusual thoughts and urges experienced within 2 parsecs of gigantic cortex bakers, say guidelines.', - 'News : astronomers warn of cortex baker trajectory drift, fear future head-on collisions resulting in costly concussions.', - 'News : runt cortex baker identified with an IQ of only quintuple digits: "just a bit of a dummy", say specialists.', - 'News : are you smarter than a cortex baker? New game show deemed "unfair" by contestants.' - ])); - - if (Game.season=='halloween' && Game.cookiesEarned>=1000) list.push(choose([ - 'News : strange twisting creatures amass around cookie factories, nibble at assembly lines.', - 'News : ominous wrinkly monsters take massive bites out of cookie production; "this can\'t be hygienic", worries worker.', - 'News : pagan rituals on the rise as children around the world dress up in strange costumes and blackmail homeowners for candy.', - 'News : new-age terrorism strikes suburbs as houses find themselves covered in eggs and toilet paper.', - 'News : children around the world "lost and confused" as any and all Halloween treats have been replaced by cookies.' - ])); - - if (Game.season=='christmas' && Game.cookiesEarned>=1000) list.push(choose([ - 'News : bearded maniac spotted speeding on flying sleigh! Investigation pending.', - 'News : Santa Claus announces new brand of breakfast treats to compete with cookie-flavored cereals! "They\'re ho-ho-horrible!" says Santa.', - 'News : "You mean he just gives stuff away for free?!", concerned moms ask. "Personally, I don\'t trust his beard."', - 'News : obese jolly lunatic still on the loose, warn officials. "Keep your kids safe and board up your chimneys. We mean it."', - 'News : children shocked as they discover Santa Claus isn\'t just their dad in a costume after all!
"I\'m reassessing my life right now", confides Laura, aged 6.', - 'News : mysterious festive entity with quantum powers still wrecking havoc with army of reindeer, officials say.', - 'News : elves on strike at toy factory! "We will not be accepting reindeer chow as payment anymore. And stop calling us elves!"', - 'News : elves protest around the nation; wee little folks in silly little outfits spread mayhem, destruction; rabid reindeer running rampant through streets.', - 'News : scholars debate regarding the plural of reindeer(s) in the midst of elven world war.', - 'News : elves "unrelated to gnomes despite small stature and merry disposition", find scientists.', - 'News : elves sabotage radioactive frosting factory, turn hundreds blind in vicinity - "Who in their right mind would do such a thing?" laments outraged mayor.', - 'News : drama unfolds at North Pole as rumors crop up around Rudolph\'s red nose; "I may have an addiction or two", admits reindeer.' - ])); - - if (Game.season=='valentines' && Game.cookiesEarned>=1000) list.push(choose([ - 'News : organ-shaped confectioneries being traded in schools all over the world; gruesome practice undergoing investigation.', - 'News : heart-shaped candies overtaking sweets business, offering competition to cookie empire. "It\'s the economy, cupid!"', - 'News : love\'s in the air, according to weather specialists. Face masks now offered in every city to stunt airborne infection.', - 'News : marrying a cookie - deranged practice, or glimpse of the future?', - 'News : boyfriend dumped after offering his lover cookies for Valentine\'s Day, reports say. "They were off-brand", shrugs ex-girlfriend.' - ])); - - if (Game.season=='easter' && Game.cookiesEarned>=1000) list.push(choose([ - 'News : long-eared critters with fuzzy tails invade suburbs, spread terror and chocolate!', - 'News : eggs have begun to materialize in the most unexpected places; "no place is safe", warn experts.', - 'News : packs of rampaging rabbits cause billions in property damage; new strain of myxomatosis being developed.', - 'News : egg-laying rabbits "not quite from this dimension", warns biologist; advises against petting, feeding, or cooking the creatures.', - 'News : mysterious rabbits found to be egg-layers, but mammalian, hinting at possible platypus ancestry.' - ])); - } - } - if (!EN) - { - if (Game.cookiesEarned>=10000) - { - list.push(NEWS+choose(loc("Ticker (misc)"))); - list.push(NEWS+choose(loc("Ticker (misc)"))); - list.push(NEWS+choose(loc("Ticker (misc)"))); - } - } - else - { - if (Math.random()<0.05) - { - if (Game.HasAchiev('Base 10')) list.push('News : cookie manufacturer completely forgoes common sense, lets strange obsession with round numbers drive building decisions!'); - if (Game.HasAchiev('From scratch')) list.push('News : follow the tear-jerking, riches-to-rags story about a local cookie manufacturer who decided to give it all up!'); - if (Game.HasAchiev('A world filled with cookies')) list.push('News : known universe now jammed with cookies! No vacancies!'); - if (Game.HasAchiev('Last Chance to See')) list.push('News : incredibly rare albino wrinkler on the brink of extinction poached by cookie-crazed pastry magnate!'); - if (Game.Has('Serendipity')) list.push('News : local cookie manufacturer becomes luckiest being alive!'); - if (Game.Has('Season switcher')) list.push('News : seasons are all out of whack! "We need to get some whack back into them seasons", says local resident.'); - - if (Game.Has('Kitten helpers')) list.push('News : faint meowing heard around local cookie facilities; suggests new ingredient being tested.'); - if (Game.Has('Kitten workers')) list.push('News : crowds of meowing kittens with little hard hats reported near local cookie facilities.'); - if (Game.Has('Kitten engineers')) list.push('News : surroundings of local cookie facilities now overrun with kittens in adorable little suits. Authorities advise to stay away from the premises.'); - if (Game.Has('Kitten overseers')) list.push('News : locals report troupe of bossy kittens meowing adorable orders at passersby.'); - if (Game.Has('Kitten managers')) list.push('News : local office cubicles invaded with armies of stern-looking kittens asking employees "what\'s happening, meow".'); - if (Game.Has('Kitten accountants')) list.push('News : tiny felines show sudden and amazing proficiency with fuzzy mathematics and pawlinomials, baffling scientists and pet store owners.'); - if (Game.Has('Kitten specialists')) list.push('News : new kitten college opening next week, offers courses on cookie-making and catnip studies.'); - if (Game.Has('Kitten experts')) list.push('News : unemployment rates soaring as woefully adorable little cats nab jobs on all levels of expertise, says study.'); - if (Game.Has('Kitten consultants')) list.push('News : "In the future, your job will most likely be done by a cat", predicts suspiciously furry futurologist.'); - if (Game.Has('Kitten assistants to the regional manager')) list.push('News : strange kittens with peculiar opinions on martial arts spotted loitering on local beet farms!'); - if (Game.Has('Kitten marketeers')) list.push('News : nonsensical kitten billboards crop up all over countryside, trying to sell people the cookies they already get for free!'); - if (Game.Has('Kitten analysts')) list.push('News : are your spending habits sensible? For a hefty fee, these kitten analysts will tell you!'); - if (Game.Has('Kitten executives')) list.push('News : kittens strutting around in hot little business suits shouting cut-throat orders at their assistants, possibly the cutest thing this reporter has ever seen!'); - if (Game.Has('Kitten admins')) list.push('News : all systems nominal, claim kitten admins obviously in way over their heads.'); - if (Game.Has('Kitten angels')) list.push('News : "Try to ignore any ghostly felines that may be purring inside your ears," warn scientists. "They\'ll just lure you into making poor life choices."'); - if (Game.Has('Kitten wages')) list.push('News : kittens break glass ceiling! Do they have any idea how expensive those are!'); - if (Game.HasAchiev('Jellicles')) list.push('News : local kittens involved in misguided musical production, leave audience perturbed and unnerved.'); - } - - if (Game.HasAchiev('Dude, sweet') && Math.random()<0.2) list.push(choose([ - 'News : major sugar-smuggling ring dismantled by authorities; '+Math.floor(Math.random()*30+3)+' tons of sugar lumps seized, '+Math.floor(Math.random()*48+2)+' suspects apprehended.', - 'News : authorities warn tourists not to buy bootleg sugar lumps from street peddlers - "You think you\'re getting a sweet deal, but what you\'re being sold is really just ordinary cocaine", says agent.', - 'News : pro-diabetes movement protests against sugar-shaming. "I\'ve eaten nothing but sugar lumps for the past '+Math.floor(Math.random()*10+4)+' years and I\'m feeling great!", says woman with friable skin.', - 'News : experts in bitter disagreement over whether sugar consumption turns children sluggish or hyperactive.', - 'News : fishermen deplore upturn in fish tooth decay as sugar lumps-hauling cargo sinks into the ocean.', - 'News : rare black sugar lump that captivated millions in unprecedented auction revealed to be common toxic fungus.', - 'News : "Back in my day, sugar lumps were these little cubes you\'d put in your tea, not those fist-sized monstrosities people eat for lunch", whines curmudgeon with failing memory.', - 'News : sugar lump-snacking fad sweeps the nation; dentists everywhere rejoice.' - ])); - - if (Math.random()<0.001)//apologies to Will Wright - { - list.push( - 'You have been chosen. They will come soon.', - 'They\'re coming soon. Maybe you should think twice about opening the door.', - 'The end is near. Make preparations.', - 'News : broccoli tops for moms, last for kids; dads indifferent.', - 'News : middle age a hoax, declares study; turns out to be bad posture after all.', - 'News : kitties want answers in possible Kitty Kibble shortage.' - ); - } - - if (Game.cookiesEarned>=10000) list.push( - 'News : '+choose([ - 'cookies found to '+choose(['increase lifespan','sensibly increase intelligence','reverse aging','decrease hair loss','prevent arthritis','cure blindness'])+' in '+choose(animals)+'!', - 'cookies found to make '+choose(animals)+' '+choose(['more docile','more handsome','nicer','less hungry','more pragmatic','tastier'])+'!', - 'cookies tested on '+choose(animals)+', found to have no ill effects.', - 'cookies unexpectedly popular among '+choose(animals)+'!', - 'unsightly lumps found on '+choose(animals)+' near cookie facility; "they\'ve pretty much always looked like that", say biologists.', - 'new species of '+choose(animals)+' discovered in distant country; "yup, tastes like cookies", says biologist.', - 'cookies go well with '+choose([choose(['roasted','toasted','boiled','sauteed','minced'])+' '+choose(animals),choose(['sushi','soup','carpaccio','steak','nuggets'])+' made from '+choose(animals)])+', says controversial chef.', - '"do your cookies contain '+choose(animals)+'?", asks PSA warning against counterfeit cookies.', - 'doctors recommend twice-daily consumption of fresh cookies.', - 'doctors warn against chocolate chip-snorting teen fad.', - 'doctors advise against new cookie-free fad diet.', - 'doctors warn mothers about the dangers of "home-made cookies".' - ]), - 'News : "'+choose([ - 'I\'m all about cookies', - 'I just can\'t stop eating cookies. I think I seriously need help', - 'I guess I have a cookie problem', - 'I\'m not addicted to cookies. That\'s just speculation by fans with too much free time', - 'my upcoming album contains 3 songs about cookies', - 'I\'ve had dreams about cookies 3 nights in a row now. I\'m a bit worried honestly', - 'accusations of cookie abuse are only vile slander', - 'cookies really helped me when I was feeling low', - 'cookies are the secret behind my perfect skin', - 'cookies helped me stay sane while filming my upcoming movie', - 'cookies helped me stay thin and healthy', - 'I\'ll say one word, just one : cookies', - 'alright, I\'ll say it - I\'ve never eaten a single cookie in my life' - ])+'", reveals celebrity.', - choose([ - 'News : scientist predicts imminent cookie-related "end of the world"; becomes joke among peers.', - 'News : man robs bank, buys cookies.', - 'News : scientists establish that the deal with airline food is, in fact, a critical lack of cookies.', - 'News : hundreds of tons of cookies dumped into starving country from airplanes; thousands dead, nation grateful.', - 'News : new study suggests cookies neither speed up nor slow down aging, but instead "take you in a different direction".', - 'News : overgrown cookies found in fishing nets, raise questions about hormone baking.', - 'News : "all-you-can-eat" cookie restaurant opens in big city; waiters trampled in minutes.', - 'News : man dies in cookie-eating contest; "a less-than-impressive performance", says judge.', - 'News : what makes cookies taste so right? "Probably all the [*****] they put in them", says anonymous tipper.', - 'News : man found allergic to cookies; "what a weirdo", says family.', - 'News : foreign politician involved in cookie-smuggling scandal.', - 'News : cookies now more popular than '+choose(['cough drops','broccoli','smoked herring','cheese','video games','stable jobs','relationships','time travel','cat videos','tango','fashion','television','nuclear warfare','whatever it is we ate before','politics','oxygen','lamps'])+', says study.', - 'News : obesity epidemic strikes nation; experts blame '+choose(['twerking','that darn rap music','video-games','lack of cookies','mysterious ghostly entities','aliens','parents','schools','comic-books','cookie-snorting fad'])+'.', - 'News : cookie shortage strikes town, people forced to eat cupcakes; "just not the same", concedes mayor.', - 'News : "you gotta admit, all this cookie stuff is a bit ominous", says confused idiot.', - //'News : scientists advise getting used to cookies suffusing every aspect of life; "this is the new normal", expert says.', - //'News : doctors advise against wearing face masks when going outside. "You never know when you might need a cookie... a mask would just get in the way."',//these were written back when covid hadn't really done much damage yet but they just feel in poor taste now - 'News : is there life on Mars? Various chocolate bar manufacturers currently under investigation for bacterial contaminants.', - 'News : "so I guess that\'s a thing now", scientist comments on cookie particles now present in virtually all steel manufactured since cookie production ramped up worldwide.', - 'News : trace amounts of cookie particles detected in most living creatures, some of which adapting them as part of new and exotic metabolic processes.', - ]), - choose([ - 'News : movie cancelled from lack of actors; "everybody\'s at home eating cookies", laments director.', - 'News : comedian forced to cancel cookie routine due to unrelated indigestion.', - 'News : new cookie-based religion sweeps the nation.', - 'News : fossil records show cookie-based organisms prevalent during Cambrian explosion, scientists say.', - 'News : mysterious illegal cookies seized; "tastes terrible", says police.', - 'News : man found dead after ingesting cookie; investigators favor "mafia snitch" hypothesis.', - 'News : "the universe pretty much loops on itself," suggests researcher; "it\'s cookies all the way down."', - 'News : minor cookie-related incident turns whole town to ashes; neighboring cities asked to chip in for reconstruction.', - 'News : is our media controlled by the cookie industry? This could very well be the case, says crackpot conspiracy theorist.', - 'News : '+choose(['cookie-flavored popcorn pretty damn popular; "we kinda expected that", say scientists.','cookie-flavored cereals break all known cereal-related records','cookies popular among all age groups, including fetuses, says study.','cookie-flavored popcorn sales exploded during screening of Grandmothers II : The Moistening.']), - 'News : all-cookie restaurant opening downtown. Dishes such as braised cookies, cookie thermidor, and for dessert : crepes.', - 'News : "Ook", says interviewed orangutan.', - 'News : cookies could be the key to '+choose(['eternal life','infinite riches','eternal youth','eternal beauty','curing baldness','world peace','solving world hunger','ending all wars world-wide','making contact with extraterrestrial life','mind-reading','better living','better eating','more interesting TV shows','faster-than-light travel','quantum baking','chocolaty goodness','gooder thoughtness'])+', say scientists.', - 'News : flavor text '+choose(['not particularly flavorful','kind of unsavory','"rather bland"','pretty spicy lately'])+', study finds.', - ]), - choose([ - 'News : what do golden cookies taste like? Study reveals a flavor "somewhere between spearmint and liquorice".', - 'News : what do wrath cookies taste like? Study reveals a flavor "somewhere between blood sausage and seawater".', - 'News : '+Game.bakeryName+'-brand cookies "'+choose(['much less soggy','much tastier','relatively less crappy','marginally less awful','less toxic','possibly more edible','more fashionable','slightly nicer','trendier','arguably healthier','objectively better choice','slightly less terrible','decidedly cookier','a tad cheaper'])+' than competitors", says consumer survey.', - 'News : "'+Game.bakeryName+'" set to be this year\'s most popular baby name.', - 'News : new popularity survey says '+Game.bakeryName+'\'s the word when it comes to cookies.', - 'News : major city being renamed '+Game.bakeryName+'ville after world-famous cookie manufacturer.', - 'News : '+choose(['street','school','nursing home','stadium','new fast food chain','new planet','new disease','flesh-eating bacteria','deadly virus','new species of '+choose(animals),'new law','baby','programming language'])+' to be named after '+Game.bakeryName+', the world-famous cookie manufacturer.', - 'News : don\'t miss tonight\'s biopic on '+Game.bakeryName+'\'s irresistible rise to success!', - 'News : don\'t miss tonight\'s interview of '+Game.bakeryName+' by '+choose(['Bloprah','Blavid Bletterman','Blimmy Blimmel','Blellen Blegeneres','Blimmy Blallon','Blonan Blo\'Brien','Blay Bleno','Blon Blewart','Bleven Blolbert','Lord Toxikhron of dimension 7-B19',Game.bakeryName+'\'s own evil clone'])+'!', - 'News : people all over the internet still scratching their heads over nonsensical reference : "Okay, but why an egg?"', - 'News : viral video "Too Many Cookies" could be "a grim commentary on the impending crisis our world is about to face", says famous economist.', - 'News : "memes from last year somehow still relevant", deplore experts.', - 'News : cookie emoji most popular among teenagers, far ahead of "judgmental OK hand sign" and "shifty-looking dark moon", says study.', - ]), - choose([ - 'News : births of suspiciously bald babies on the rise; ancient alien cabal denies involvement.', - 'News : "at this point, cookies permeate the economy", says economist. "If we start eating anything else, we\'re all dead."', - 'News : pun in headline infuriates town, causes riot. 21 wounded, 5 dead; mayor still missing.', - 'Nws : ky btwn W and R brokn, plas snd nw typwritr ASAP.', - 'Neeeeews : "neeeew EEEEEE keeeeey working fineeeeeeeee", reeeports gleeeeeeeeful journalist.', - 'News : cookies now illegal in some backwards country nobody cares about. Political tensions rising; war soon, hopefully.', - 'News : irate radio host rambles about pixelated icons. "None of the cookies are aligned! Can\'t anyone else see it? I feel like I\'m taking crazy pills!"', - 'News : nation cheers as legislators finally outlaw '+choose(['cookie criticism','playing other games than Cookie Clicker','pineapple on pizza','lack of cheerfulness','mosquitoes','broccoli','the human spleen','bad weather','clickbait','dabbing','the internet','memes','millennials'])+'!', - 'News : '+choose(['local','area'])+' '+choose(['man','woman'])+' goes on journey of introspection, finds cookies : "I honestly don\'t know what I was expecting."', - 'News : '+choose(['man','woman'])+' wakes up from coma, '+choose(['tries cookie for the first time, dies.','regrets it instantly.','wonders "why everything is cookies now".','babbles incoherently about some supposed "non-cookie food" we used to eat.','cites cookies as main motivator.','asks for cookies.']), - 'News : pet '+choose(animals)+', dangerous fad or juicy new market?', - 'News : person typing these wouldn\'t mind someone else breaking the news to THEM, for a change.', - 'News : "average person bakes '+Beautify(Math.ceil(Game.cookiesEarned/7300000000))+' cookie'+(Math.ceil(Game.cookiesEarned/7300000000)==1?'':'s')+' a year" factoid actually just statistical error; '+Game.bakeryName+', who has produced '+Beautify(Game.cookiesEarned)+' cookies in their lifetime, is an outlier and should not have been counted.' - ]) - ); - } - } - - if (list.length==0) - { - if (loreProgress<=0) list.push(loc("You feel like making cookies. But nobody wants to eat your cookies.")); - else if (loreProgress<=1) list.push(loc("Your first batch goes to the trash. The neighborhood raccoon barely touches it.")); - else if (loreProgress<=2) list.push(loc("Your family accepts to try some of your cookies.")); - else if (loreProgress<=3) list.push(loc("Your cookies are popular in the neighborhood."),loc("People are starting to talk about your cookies.")); - else if (loreProgress<=4) list.push(loc("Your cookies are talked about for miles around."),loc("Your cookies are renowned in the whole town!")); - else if (loreProgress<=5) list.push(loc("Your cookies bring all the boys to the yard."),loc("Your cookies now have their own website!")); - else if (loreProgress<=6) list.push(loc("Your cookies are worth a lot of money."),loc("Your cookies sell very well in distant countries.")); - else if (loreProgress<=7) list.push(loc("People come from very far away to get a taste of your cookies."),loc("Kings and queens from all over the world are enjoying your cookies.")); - else if (loreProgress<=8) list.push(loc("There are now museums dedicated to your cookies."),loc("A national day has been created in honor of your cookies.")); - else if (loreProgress<=9) list.push(loc("Your cookies have been named a part of the world wonders."),loc("History books now include a whole chapter about your cookies.")); - else if (loreProgress<=10) list.push(loc("Your cookies have been placed under government surveillance."),loc("The whole planet is enjoying your cookies!")); - else if (loreProgress<=11) list.push(loc("Strange creatures from neighboring planets wish to try your cookies."),loc("Elder gods from the whole cosmos have awoken to taste your cookies.")); - else if (loreProgress<=12) list.push(loc("Beings from other dimensions lapse into existence just to get a taste of your cookies."),loc("Your cookies have achieved sentience.")); - else if (loreProgress<=13) list.push(loc("The universe has now turned into cookie dough, to the molecular level."),loc("Your cookies are rewriting the fundamental laws of the universe.")); - else if (loreProgress<=14) list.push(loc("A local news station runs a 10-minute segment about your cookies. Success!
(you win a cookie)"),loc("it's time to stop playing")); - } - - //if (Game.elderWrath>0 && (Game.pledges==0 || Math.random()<0.2)) - if (Game.elderWrath>0 && (((Game.pledges==0 && Game.resets==0) && Math.random()<0.3) || Math.random()<0.03)) - { - list=[]; - if (Game.elderWrath==1) list.push(EN?choose([ - 'News : millions of old ladies reported missing!', - 'News : processions of old ladies sighted around cookie facilities!', - 'News : families around the continent report agitated, transfixed grandmothers!', - 'News : doctors swarmed by cases of old women with glassy eyes and a foamy mouth!', - 'News : nurses report "strange scent of cookie dough" around female elderly patients!' - ]):(NEWS+choose(loc("Ticker (grandma invasion start)")))); - if (Game.elderWrath==2) list.push(EN?choose([ - 'News : town in disarray as strange old ladies break into homes to abduct infants and baking utensils!', - 'News : sightings of old ladies with glowing eyes terrify local population!', - 'News : retirement homes report "female residents slowly congealing in their seats"!', - 'News : whole continent undergoing mass exodus of old ladies!', - 'News : old women freeze in place in streets, ooze warm sugary syrup!' - ]):(NEWS+choose(loc("Ticker (grandma invasion rise)")))); - if (Game.elderWrath==3) list.push(EN?choose([ - 'News : large "flesh highways" scar continent, stretch between various cookie facilities!', - 'News : wrinkled "flesh tendrils" visible from space!', - 'News : remains of "old ladies" found frozen in the middle of growing fleshy structures!', - 'News : all hope lost as writhing mass of flesh and dough engulfs whole city!', - 'News : nightmare continues as wrinkled acres of flesh expand at alarming speeds!' - ]):(NEWS+choose(loc("Ticker (grandma invasion full)")))); - } - - if (EN && Game.season=='fools') - { - list=[]; - - if (Game.cookiesEarned>=1000) list.push(choose([ - choose(['Your office chair is really comfortable.','Profit\'s in the air!','Business meetings are such a joy!','What a great view from your office!','Smell that? That\'s capitalism, baby!','You truly love answering emails.','Working hard, or hardly working?','Another day in paradise!','Expensive lunch time!','Another government bailout coming up! Splendid!','These profits are doing wonderful things for your skin.','You daydream for a moment about a world without taxes.','You\'ll worry about environmental damage when you\'re dead!','Yay, office supplies!','Sweet, those new staplers just came in!','Ohh, coffee break!']), - choose(['You\'ve spent the whole day','Another great day','First order of business today:','Why, you truly enjoy','What next? That\'s right,','You check what\'s next on the agenda. Oh boy,'])+' '+choose(['signing contracts','filling out forms','touching base with the team','examining exciting new prospects','playing with your desk toys','getting new nameplates done','attending seminars','videoconferencing','hiring dynamic young executives','meeting new investors','updating your rolodex','pumping up those numbers','punching in some numbers','getting investigated for workers\' rights violations','reorganizing documents','belittling underlings','reviewing employee performance','revising company policies','downsizing','pulling yourself up by your bootstraps','adjusting your tie','performing totally normal human activities','recentering yourself in the scream room','immanentizing the eschaton','shredding some sensitive documents','comparing business cards','pondering the meaning of your existence','listening to the roaring emptiness inside your soul','playing minigolf in your office'])+'!', - 'The word of the day is: '+choose(['viral','search engine optimization','blags and wobsites','social networks','webinette','staycation','user experience','crowdfunding','carbon neutral','big data','machine learning','disrupting','influencers','monoconsensual transactions','sustainable','freemium','incentives','grassroots','web 3.0'/*this was before this whole crypto mess i'm so sorry*/,'logistics','leveraging','branding','proactive','synergizing','market research','demographics','pie charts','blogular','blogulacious','blogastic','authenticity','plastics','electronic mail','cellular phones','rap music','bulbs','goblinization','straight-to-bakery','microbakeries','chocolativity','flavorfulness','tastyfication','sugar offsets','activated wheat','reification','immanentize the eschaton','cookies, I guess'])+'.' - ])); - if (Game.cookiesEarned>=1000 && Math.random()<0.05) list.push(choose([ - 'If you could get some more cookies baked, that\'d be great.', - 'So. About those TPS reports.', - 'Hmm, you\'ve got some video tapes to return.', - 'They\'ll pay. They\'ll all pay.', - 'You haven\'t even begun to peak.', - 'There is an idea of a '+Game.bakeryName+'. Some kind of abstraction. But there is no real you, only an entity. Something illusory.', - 'This was a terrible idea!' - ])); - - - if (Game.TickerN%2==0) - { - if (Game.Objects['Grandma'].amount>0) list.push(choose([ - 'Your rolling pins are rolling and pinning!', - 'Production is steady!' - ])); - - if (Game.Objects['Grandma'].amount>0) list.push(choose([ - 'Your ovens are diligently baking more and more cookies.', - 'Your ovens burn a whole batch. Ah well! Still good.' - ])); - - if (Game.Objects['Farm'].amount>0) list.push(choose([ - 'Scores of cookies come out of your kitchens.', - 'Today, new recruits are joining your kitchens!' - ])); - - if (Game.Objects['Factory'].amount>0) list.push(choose([ - 'Your factories are producing an unending stream of baked goods.', - 'Your factory workers decide to go on strike!', - 'It\'s safety inspection day in your factories.' - ])); - - if (Game.Objects['Mine'].amount>0) list.push(choose([ - 'Your secret recipes are kept safely inside a giant underground vault.', - 'Your chefs are working on new secret recipes!' - ])); - - if (Game.Objects['Shipment'].amount>0) list.push(choose([ - 'Your supermarkets are bustling with happy, hungry customers.', - 'Your supermarkets are full of cookie merch!' - ])); - - if (Game.Objects['Alchemy lab'].amount>0) list.push(choose([ - 'It\'s a new trading day at the stock exchange, and traders can\'t get enough of your shares!', - 'Your stock is doubling in value by the minute!' - ])); - - if (Game.Objects['Portal'].amount>0) list.push(choose([ - 'You just released a new TV show episode!', - 'Your cookie-themed TV show is being adapted into a new movie!' - ])); - - if (Game.Objects['Time machine'].amount>0) list.push(choose([ - 'Your theme parks are doing well - puddles of vomit and roller-coaster casualties are being swept under the rug!', - 'Visitors are stuffing themselves with cookies before riding your roller-coasters. You might want to hire more clean-up crews.' - ])); - - if (Game.Objects['Antimatter condenser'].amount>0) list.push(choose([ - 'Cookiecoin is officially the most mined digital currency in the history of mankind!', - 'Cookiecoin piracy is rampant!' - ])); - - if (Game.Objects['Prism'].amount>0) list.push(choose([ - 'Your corporate nations just gained a new parliament!', - 'You\'ve just annexed a new nation!', - 'A new nation joins the grand cookie conglomerate!' - ])); - - if (Game.Objects['Chancemaker'].amount>0) list.push(choose([ - 'Your intergalactic federation of cookie-sponsored planets reports record-breaking profits!', - 'Billions of unwashed aliens are pleased to join your workforce as you annex their planet!', - 'New toll opened on interstellar highway, funnelling more profits into the cookie economy!' - ])); - - if (Game.Objects['Fractal engine'].amount>0) list.push(choose([ - 'Your cookie-based political party is doing fantastic in the polls!', - 'New pro-cookie law passes without a hitch thanks to your firm grasp of the political ecosystem!', - 'Your appointed senators are overturning cookie bans left and right!' - ])); - - if (Game.Objects['Javascript console'].amount>0) list.push(choose([ - 'Cookies are now one of the defining aspects of mankind! Congratulations!', - 'Time travelers report that this era will later come to be known, thanks to you, as the cookie millennium!', - 'Cookies now deeply rooted in human culture, likely puzzling future historians!' - ])); - - if (Game.Objects['Idleverse'].amount>0) list.push(choose([ - 'Public aghast as all remaining aspects of their lives overtaken by universal cookie industry!', - 'Every single product currently sold in the observable universe can be traced back to your company! And that\'s a good thing.', - 'Antitrust laws let out a helpless whimper before being engulfed by your sprawling empire!' - ])); - - if (Game.Objects['Cortex baker'].amount>0) list.push(choose([ - 'Bold new law proposal would grant default ownership of every new idea by anyone anywhere to '+Game.bakeryName+'\'s bakery!', - 'Bakery think tanks accidentally reinvent cookies for the 57th time this week!', - 'Bakery think tanks invent entire new form of human communication to advertise and boost cookie sales!' - ])); - } - - if (loreProgress<=0) list.push('Such a grand day to begin a new business.'); - else if (loreProgress<=1) list.push('You\'re baking up a storm!'); - else if (loreProgress<=2) list.push('You are confident that one day, your cookie company will be the greatest on the market!'); - else if (loreProgress<=3) list.push('Business is picking up!'); - else if (loreProgress<=4) list.push('You\'re making sales left and right!'); - else if (loreProgress<=5) list.push('Everyone wants to buy your cookies!'); - else if (loreProgress<=6) list.push('You are now spending most of your day signing contracts!'); - else if (loreProgress<=7) list.push('You\'ve been elected "business tycoon of the year"!'); - else if (loreProgress<=8) list.push('Your cookies are a worldwide sensation! Well done, old chap!'); - else if (loreProgress<=9) list.push('Your brand has made its way into popular culture. Children recite your slogans and adults reminisce them fondly!'); - else if (loreProgress<=10) list.push('A business day like any other. It\'s good to be at the top!'); - else if (loreProgress<=11) list.push('You look back on your career. It\'s been a fascinating journey, building your baking empire from the ground up.'); - } - - for (var i=0;iGame.fps*10 && Game.Has('Fortune cookies') && Math.random()<(Game.HasAchiev('O Fortuna')?0.04:0.02)) - { - var fortunes=[]; - for (var i in Game.Tiers['fortune'].upgrades) - { - var it=Game.Tiers['fortune'].upgrades[i]; - if (!Game.HasUnlocked(it.name)) fortunes.push(it); - } - - if (!Game.fortuneGC) fortunes.push('fortuneGC'); - if (!Game.fortuneCPS) fortunes.push('fortuneCPS'); - - if (fortunes.length>0) - { - list=[]; - var me=choose(fortunes); - Game.TickerEffect={type:'fortune',sub:me}; - - if (me=='fortuneGC') me=loc("Today is your lucky day!");/*
Click here for a golden cookie.';*/ - else if (me=='fortuneCPS') {Math.seedrandom(Game.seed+'-fortune');me=loc("Your lucky numbers are:")+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)/*+'
Click here to gain one hour of your CpS.'*/;Math.seedrandom();} - else - { - if (EN) - { - me=me.dname.substring(me.name.indexOf('#'))+' : '+me.baseDesc.substring(me.baseDesc.indexOf('')+3); - me=me.substring(0,me.length-4); - } - else if (me.buildingTie) me=me.dname+' : '+loc(choose(["Never forget your %1.","Pay close attention to the humble %1.","You've been neglecting your %1.","Remember to visit your %1 sometimes."]),me.buildingTie.single); - else me=me.dname+' : '+loc(choose(["You don't know what you have until you've lost it.","Remember to take breaks.","Hey, what's up. I'm a fortune cookie.","You think you have it bad? Look at me."])); - } - me='
'+me+'
'; - list=[me]; - } - } - - if (Game.windowW'+NEWS+(EN?'help!':loc("help me!"))+'']; - - Game.TickerAge=Game.fps*10; - Game.Ticker=choose(list); - Game.AddToLog(Game.Ticker); - Game.TickerN++; - Game.TickerDraw(); - } - Game.tickerL=l('commentsText1'); - Game.tickerBelowL=l('commentsText2'); - Game.tickerTooNarrow=900; - Game.TickerDraw=function() - { - var str=''; - if (Game.Ticker!='') str=Game.Ticker; - Game.tickerBelowL.innerHTML=Game.tickerL.innerHTML; - Game.tickerL.innerHTML=str; - - Game.tickerBelowL.className='commentsText'; - void Game.tickerBelowL.offsetWidth; - Game.tickerBelowL.className='commentsText risingAway'; - Game.tickerL.className='commentsText'; - void Game.tickerL.offsetWidth; - Game.tickerL.className='commentsText risingUp'; - } - AddEvent(Game.tickerL,'click',function(event){ - Game.Ticker=''; - Game.TickerClicks++; - if (Game.windowW=50) {Game.Win('Tabloid addiction');} - - if (Game.TickerEffect && Game.TickerEffect.type=='fortune') - { - PlaySound('snd/fortune.mp3',1); - Game.SparkleAt(Game.mouseX,Game.mouseY); - var effect=Game.TickerEffect.sub; - if (effect=='fortuneGC') - { - Game.Notify(loc("Fortune!"),loc("A golden cookie has appeared."),[10,32]); - Game.fortuneGC=1; - var newShimmer=new Game.shimmer('golden',{noWrath:true}); - } - else if (effect=='fortuneCPS') - { - Game.Notify(loc("Fortune!"),loc("You gain one hour of your CpS (capped at double your bank)."),[10,32]); - Game.fortuneCPS=1; - Game.Earn(Math.min(Game.cookiesPs*60*60,Game.cookies)); - } - else - { - Game.Notify(effect.dname,loc("You've unlocked a new upgrade."),effect.icon); - effect.unlock(); - } - } - - Game.TickerEffect=0; - - }); - - Game.Log=[]; - Game.AddToLog=function(what) - { - Game.Log.unshift(what); - if (Game.Log.length>100) Game.Log.pop(); - } - - Game.vanilla=1; - /*===================================================================================== - BUILDINGS - =======================================================================================*/ - Game.last=0; - - Game.storeToRefresh=1; - Game.priceIncrease=1.15; - Game.buyBulk=1; - Game.buyMode=1;//1 for buy, -1 for sell - Game.buyBulkOld=Game.buyBulk;//used to undo changes from holding Shift or Ctrl - Game.buyBulkShortcut=0;//are we pressing Shift or Ctrl? - - Game.Objects={}; - Game.ObjectsById=[]; - Game.ObjectsN=0; - Game.BuildingsOwned=0; - Game.Object=function(name,commonName,desc,icon,iconColumn,art,price,cps,buyFunction) - { - this.id=Game.ObjectsN; - this.name=name; - this.dname=name; - this.displayName=this.name; - commonName=commonName.split('|'); - this.single=commonName[0]; - this.plural=commonName[1]; - this.bsingle=this.single;this.bplural=this.plural;//store untranslated as we use those too - this.actionName=commonName[2]; - this.extraName=commonName[3]; - this.extraPlural=commonName[4]; - this.desc=desc; - if (true)//if (EN) - { - this.dname=loc(this.name); - this.single=loc(this.single); - this.plural=loc(this.plural); - this.desc=loc(FindLocStringByPart(this.name+' quote')); - } - this.basePrice=price; - this.price=this.basePrice; - this.bulkPrice=this.price; - this.cps=cps; - this.baseCps=this.cps; - this.mouseOn=false; - this.mousePos=[-100,-100]; - this.productionAchievs=[]; - - this.n=this.id; - if (this.n!=0) - { - //new automated price and CpS curves - //this.baseCps=Math.ceil(((this.n*0.5)*Math.pow(this.n*1,this.n*0.9))*10)/10; - //this.baseCps=Math.ceil((Math.pow(this.n*1,this.n*0.5+2.35))*10)/10;//by a fortunate coincidence, this gives the 3rd, 4th and 5th buildings a CpS of 10, 69 and 420 - this.baseCps=Math.ceil((Math.pow(this.n*1,this.n*0.5+2))*10)/10;//0.45 used to be 0.5 - //this.baseCps=Math.ceil((Math.pow(this.n*1,this.n*0.45+2.10))*10)/10; - //clamp 14,467,199 to 14,000,000 (there's probably a more elegant way to do that) - var digits=Math.pow(10,(Math.ceil(Math.log(Math.ceil(this.baseCps))/Math.LN10)))/100; - this.baseCps=Math.round(this.baseCps/digits)*digits; - - this.basePrice=(this.n*1+9+(this.n<5?0:Math.pow(this.n-5,1.75)*5))*Math.pow(10,this.n)*(Math.max(1,this.n-14)); - //this.basePrice=(this.n*2.5+7.5)*Math.pow(10,this.n); - var digits=Math.pow(10,(Math.ceil(Math.log(Math.ceil(this.basePrice))/Math.LN10)))/100; - this.basePrice=Math.round(this.basePrice/digits)*digits; - if (this.id>=16) this.basePrice*=10; - if (this.id>=17) this.basePrice*=10; - if (this.id>=18) this.basePrice*=10; - if (this.id>=19) this.basePrice*=10; - this.price=this.basePrice; - this.bulkPrice=this.price; - } - - this.totalCookies=0; - this.storedCps=0; - this.storedTotalCps=0; - this.icon=icon; - this.iconColumn=iconColumn; - this.art=art; - if (art.base) - {art.pic=art.base+'.png';art.bg=art.base+'Background.png';} - this.buyFunction=buyFunction; - this.locked=1; - this.level=0; - this.vanilla=Game.vanilla; - - this.tieredUpgrades={}; - this.tieredAchievs={}; - this.synergies=[]; - this.fortune=0; - - this.amount=0; - this.bought=0; - this.highest=0; - this.free=0; - - this.eachFrame=0; - - this.minigameUrl=0;//if this is defined, load the specified script if the building's level is at least 1 - this.minigameName=0; - this.onMinigame=false; - this.minigameLoaded=false; - - this.switchMinigame=function(on)//change whether we're on the building's minigame - { - if (!Game.isMinigameReady(this)) on=false; - if (on==-1) on=!this.onMinigame; - this.onMinigame=on; - if (this.id!=0) - { - if (this.onMinigame) - { - l('row'+this.id).classList.add('onMinigame'); - //l('rowSpecial'+this.id).style.display='block'; - //l('rowCanvas'+this.id).style.display='none'; - if (this.minigame.onResize) this.minigame.onResize(); - } - else - { - l('row'+this.id).classList.remove('onMinigame'); - //l('rowSpecial'+this.id).style.display='none'; - //l('rowCanvas'+this.id).style.display='block'; - } - } - this.refresh(); - } - - this.getPrice=function(n) - { - var price=this.basePrice*Math.pow(Game.priceIncrease,Math.max(0,this.amount-this.free)); - price=Game.modifyBuildingPrice(this,price); - return Math.ceil(price); - } - this.getSumPrice=function(amount)//return how much it would cost to buy [amount] more of this building - { - var price=0; - for (var i=Math.max(0,this.amount);i=price) - { - bought++; - moni+=price; - Game.Spend(price); - this.amount++; - this.bought++; - price=this.getPrice(); - this.price=price; - if (this.buyFunction) this.buyFunction(); - Game.recalculateGains=1; - if (this.amount==1 && this.id!=0) l('row'+this.id).classList.add('enabled'); - this.highest=Math.max(this.highest,this.amount); - Game.BuildingsOwned++; - success=1; - } - } - if (success) {PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75);this.refresh();} - //if (moni>0 && amount>1) Game.Notify(this.name,'Bought '+bought+' for '+Beautify(moni)+' cookies','',2); - } - this.sell=function(amount,bypass) - { - var success=0; - var moni=0; - var sold=0; - if (amount==-1) amount=this.amount; - if (!amount) amount=Game.buyBulk; - for (var i=0;i0) - { - sold++; - moni+=price; - Game.cookies+=price; - Game.cookiesEarned=Math.max(Game.cookies,Game.cookiesEarned);//this is to avoid players getting the cheater achievement when selling buildings that have a higher price than they used to - this.amount--; - price=this.getPrice(); - this.price=price; - if (this.sellFunction) this.sellFunction(); - Game.recalculateGains=1; - if (this.amount==0 && this.id!=0) l('row'+this.id).classList.remove('enabled'); - Game.BuildingsOwned--; - success=1; - } - } - if (success && Game.hasGod) - { - var godLvl=Game.hasGod('ruin'); - var old=Game.hasBuff('Devastation'); - if (old) - { - if (godLvl==1) old.multClick+=sold*0.01; - else if (godLvl==2) old.multClick+=sold*0.005; - else if (godLvl==3) old.multClick+=sold*0.0025; - } - else - { - if (godLvl==1) Game.gainBuff('devastation',10,1+sold*0.01); - else if (godLvl==2) Game.gainBuff('devastation',10,1+sold*0.005); - else if (godLvl==3) Game.gainBuff('devastation',10,1+sold*0.0025); - } - } - if (success && Game.shimmerTypes['golden'].n<=0 && Game.auraMult('Dragon Orbs')>0) - { - var highestBuilding=0; - for (var i in Game.Objects) {if (Game.Objects[i].amount>0) highestBuilding=Game.Objects[i];} - if (highestBuilding==this && Math.random()0) Game.Notify(this.name,'Sold '+sold+' for '+Beautify(moni)+' cookies','',2); - } - this.sacrifice=function(amount)//sell without getting back any money - { - var success=0; - //var moni=0; - var sold=0; - if (amount==-1) amount=this.amount; - if (!amount) amount=1; - for (var i=0;i0) - { - sold++; - //moni+=price; - //Game.cookies+=price; - //Game.cookiesEarned=Math.max(Game.cookies,Game.cookiesEarned); - this.amount--; - price=this.getPrice(); - this.price=price; - if (this.sellFunction) this.sellFunction(); - Game.recalculateGains=1; - if (this.amount==0 && this.id!=0) l('row'+this.id).classList.remove('enabled'); - Game.BuildingsOwned--; - success=1; - } - } - if (success) {this.refresh();} - //if (moni>0) Game.Notify(this.name,'Sold '+sold+' for '+Beautify(moni)+' cookies','',2); - } - this.buyFree=function(amount)//unlike getFree, this still increases the price - { - for (var i=0;i=price) - { - this.amount++; - this.bought++; - this.price=this.getPrice(); - Game.recalculateGains=1; - if (this.amount==1 && this.id!=0) l('row'+this.id).classList.add('enabled'); - this.highest=Math.max(this.highest,this.amount); - Game.BuildingsOwned++; - } - } - this.refresh(); - } - this.getFree=function(amount)//get X of this building for free, with the price behaving as if you still didn't have them - { - this.amount+=amount; - this.bought+=amount; - this.free+=amount; - this.highest=Math.max(this.highest,this.amount); - Game.BuildingsOwned+=amount; - this.highest=Math.max(this.highest,this.amount); - this.refresh(); - } - this.getFreeRanks=function(amount)//this building's price behaves as if you had X less of it - { - this.free+=amount; - this.refresh(); - } - - this.tooltip=function() - { - var me=this; - var ariaText=''; - var desc=me.desc; - var name=me.dname; - if (Game.season=='fools') - { - if (!Game.foolObjects[me.name]) - { - name=Game.foolObjects['Unknown'].name; - desc=Game.foolObjects['Unknown'].desc; - } - else - { - name=Game.foolObjects[me.name].name; - desc=Game.foolObjects[me.name].desc; - } - } - var icon=[me.iconColumn,0]; - if (me.locked) - { - name='???'; - desc='???'; - icon=[0,7]; - } - //if (l('rowInfo'+me.id) && Game.drawT%10==0) l('rowInfoContent'+me.id).innerHTML='• '+me.amount+' '+(me.amount==1?me.single:me.plural)+'
• producing '+Beautify(me.storedTotalCps,1)+' '+(me.storedTotalCps==1?'cookie':'cookies')+' per second
• total : '+Beautify(me.totalCookies)+' '+(Math.floor(me.totalCookies)==1?'cookie':'cookies')+' '+me.actionName; - - var canBuy=false; - var price=me.bulkPrice; - if ((Game.buyMode==1 && Game.cookies>=price) || (Game.buyMode==-1 && me.amount>0)) canBuy=true; - - var synergiesStr=''; - //note : might not be entirely accurate, math may need checking - if (me.amount>0) - { - var synergiesWith={}; - var synergyBoost=0; - - if (me.name=='Grandma') - { - for (var i in Game.GrandmaSynergies) - { - if (Game.Has(Game.GrandmaSynergies[i])) - { - var other=Game.Upgrades[Game.GrandmaSynergies[i]].buildingTie; - var mult=me.amount*0.01*(1/(other.id-1)); - var boost=(other.storedTotalCps*Game.globalCpsMult)-(other.storedTotalCps*Game.globalCpsMult)/(1+mult); - synergyBoost+=boost; - if (!synergiesWith[other.plural]) synergiesWith[other.plural]=0; - synergiesWith[other.plural]+=mult; - } - } - } - else if (me.name=='Portal' && Game.Has('Elder Pact')) - { - var other=Game.Objects['Grandma']; - var boost=(me.amount*0.05*other.amount)*Game.globalCpsMult; - synergyBoost+=boost; - if (!synergiesWith[other.plural]) synergiesWith[other.plural]=0; - synergiesWith[other.plural]+=boost/(other.storedTotalCps*Game.globalCpsMult); - } - - for (var i in me.synergies) - { - var it=me.synergies[i]; - if (Game.Has(it.name)) - { - var weight=0.05; - var other=it.buildingTie1; - if (me==it.buildingTie1) {weight=0.001;other=it.buildingTie2;} - var boost=(other.storedTotalCps*Game.globalCpsMult)-(other.storedTotalCps*Game.globalCpsMult)/(1+me.amount*weight); - synergyBoost+=boost; - if (!synergiesWith[other.plural]) synergiesWith[other.plural]=0; - synergiesWith[other.plural]+=me.amount*weight; - } - } - if (synergyBoost>0) - { - for (var i in synergiesWith) - { - if (synergiesStr!='') synergiesStr+=', '; - synergiesStr+=''+i+' +'+Beautify(synergiesWith[i]*100,1)+'%'; - } - synergiesStr=loc("...also boosting some other buildings:")+' '+synergiesStr+' - '+loc("all combined, these boosts account for %1 per second (%2% of total CpS)",[loc("%1 cookie",LBeautify(synergyBoost,1)),Beautify((synergyBoost/Game.cookiesPs)*100,1)]); - } - } - - if (Game.prefs.screenreader) - { - if (me.locked) ariaText='This building is not yet unlocked. '; - else ariaText=name+'. '; - if (!me.locked) ariaText+='You own '+me.amount+'. '; - ariaText+=(canBuy?'Can buy 1 for':'Cannot afford the')+' '+Beautify(Math.round(price))+' cookies. '; - if (!me.locked && me.totalCookies>0) - { - ariaText+='Each '+me.single+' produces '+Beautify((me.storedTotalCps/me.amount)*Game.globalCpsMult,1)+' cookies per second. '; - ariaText+=Beautify(me.totalCookies)+' cookies '+me.actionName+' so far. '; - } - if (!me.locked) ariaText+=desc; - - var ariaLabel=l('ariaReader-product-'+(me.id)); - if (ariaLabel) ariaLabel.innerHTML=ariaText.replace(/(<([^>]+)>)/gi,' '); - } - - return '
'+Beautify(Math.round(price))+''+Game.costDetails(price)+'
'+name+'
'+'
'+loc("owned: %1",me.amount)+'
'+(me.free>0?'
'+loc("free: %1!",me.free)+'
':'')+'
'+ - '
'+desc+'
'+ - (me.totalCookies>0?( - '
'+ - (me.amount>0?'
'+loc("each %1 produces %2 per second",[me.single,loc("%1 cookie",LBeautify((me.storedTotalCps/me.amount)*Game.globalCpsMult,1))])+'
':'')+ - '
'+loc("%1 producing %2 per second",[loc("%1 "+me.bsingle,LBeautify(me.amount)),loc("%1 cookie",LBeautify(me.storedTotalCps*Game.globalCpsMult,1))])+' ('+loc("%1% of total CpS",Beautify(Game.cookiesPs>0?((me.amount>0?((me.storedTotalCps*Game.globalCpsMult)/Game.cookiesPs):0)*100):0,1))+')
'+ - (synergiesStr?('
'+synergiesStr+'
'):'')+ - (EN?'
'+Beautify(me.totalCookies)+' '+(Math.floor(me.totalCookies)==1?'cookie':'cookies')+' '+me.actionName+' so far
':'
'+loc("%1 produced so far",loc("%1 cookie",LBeautify(me.totalCookies)))+'
') - ):'')+ - '
'; - } - this.levelTooltip=function() - { - var me=this; - return '
'+loc("Level %1 %2",[Beautify(me.level),me.plural])+'
'+(EN?((me.level==1?me.extraName:me.extraPlural).replace('[X]',Beautify(me.level))+' granting +'+Beautify(me.level)+'% '+me.dname+' CpS.'):loc("Granting +%1% %2 CpS.",[Beautify(me.level),me.single]))+'
'+loc("Click to level up for %1.",''+loc("%1 sugar lump",LBeautify(me.level+1))+'')+((me.level==0 && me.minigameUrl)?'
'+loc("Levelling up this building unlocks a minigame.")+'':'')+'
'; - } - this.levelUp=function(me){ - return function(free){Game.spendLump(me.level+1,loc("level up your %1",me.plural),function() - { - me.level+=1; - if (me.level>=10 && me.levelAchiev10) Game.Win(me.levelAchiev10.name); - if (!free) PlaySound('snd/upgrade.mp3',0.6); - Game.LoadMinigames(); - me.refresh(); - if (l('productLevel'+me.id)){var rect=l('productLevel'+me.id).getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24+32-TopBarOffset);} - if (me.minigame && me.minigame.onLevel) me.minigame.onLevel(me.level); - },free)();}; - }(this); - - this.refresh=function()//show/hide the building display based on its amount, and redraw it - { - this.price=this.getPrice(); - if (Game.buyMode==1) this.bulkPrice=this.getSumPrice(Game.buyBulk); - else if (Game.buyMode==-1 && Game.buyBulk==-1) this.bulkPrice=this.getReverseSumPrice(1000); - else if (Game.buyMode==-1) this.bulkPrice=this.getReverseSumPrice(Game.buyBulk); - this.rebuild(); - if (this.amount==0 && this.id!=0) l('row'+this.id).classList.remove('enabled'); - else if (this.amount>0 && this.id!=0) l('row'+this.id).classList.add('enabled'); - if (this.muted>0 && this.id!=0) {l('row'+this.id).classList.add('muted');l('mutedProduct'+this.id).style.display='inline-block';} - else if (this.id!=0) {l('row'+this.id).classList.remove('muted');l('mutedProduct'+this.id).style.display='none';} - //if (!this.onMinigame && !this.muted) {} - //else this.pics=[]; - } - this.rebuild=function() - { - var me=this; - //var classes='product'; - var price=me.bulkPrice; - /*if (Game.cookiesEarned>=me.basePrice || me.bought>0) {classes+=' unlocked';me.locked=0;} else {classes+=' locked';me.locked=1;} - if (Game.cookies>=price) classes+=' enabled'; else classes+=' disabled'; - if (me.l.className.indexOf('toggledOff')!=-1) classes+=' toggledOff'; - */ - var icon=[0,me.icon]; - var iconOff=[1,me.icon]; - if (me.iconFunc) icon=me.iconFunc(); - - var desc=me.desc; - var name=me.dname; - var displayName=me.displayName; - if (Game.season=='fools') - { - if (!Game.foolObjects[me.name]) - { - icon=[2,0]; - iconOff=[3,0]; - name=Game.foolObjects['Unknown'].name; - desc=Game.foolObjects['Unknown'].desc; - } - else - { - icon=[2,me.icon]; - iconOff=[3,me.icon]; - name=Game.foolObjects[me.name].name; - desc=Game.foolObjects[me.name].desc; - } - displayName=name; - //if (name.length>16) displayName=''+name+''; - } - else if (!EN) displayName=name; - //else if (!EN && name.length>16) displayName=''+name+''; - icon=[icon[0]*64,icon[1]*64]; - iconOff=[iconOff[0]*64,iconOff[1]*64]; - - //me.l.className=classes; - //l('productIcon'+me.id).style.backgroundImage='url(img/'+icon+')'; - l('productIcon'+me.id).style.backgroundPosition='-'+icon[0]+'px -'+icon[1]+'px'; - //l('productIconOff'+me.id).style.backgroundImage='url(img/'+iconOff+')'; - l('productIconOff'+me.id).style.backgroundPosition='-'+iconOff[0]+'px -'+iconOff[1]+'px'; - l('productName'+me.id).innerHTML=displayName; - if (name.length>12/Langs[locId].w && (Game.season=='fools' || !EN)) l('productName'+me.id).classList.add('longProductName'); else l('productName'+me.id).classList.remove('longProductName'); - l('productOwned'+me.id).textContent=me.amount?me.amount:''; - l('productPrice'+me.id).textContent=Beautify(Math.round(price)); - l('productPriceMult'+me.id).textContent=(Game.buyBulk>1)?('x'+Game.buyBulk+' '):''; - l('productLevel'+me.id).textContent='lvl '+Beautify(me.level); - if (Game.isMinigameReady(me) && Game.ascensionMode!=1) - { - l('productMinigameButton'+me.id).style.display='block'; - if (!me.onMinigame) l('productMinigameButton'+me.id).textContent=loc("View %1",me.minigameName); - else l('productMinigameButton'+me.id).textContent=loc("Close %1",me.minigameName); - } - else l('productMinigameButton'+me.id).style.display='none'; - if (Game.isMinigameReady(me) && Game.ascensionMode!=1 && me.minigame.dragonBoostTooltip && Game.hasAura('Supreme Intellect')) - { - l('productDragonBoost'+me.id).style.display='block'; - } - else l('productDragonBoost'+me.id).style.display='none'; - } - this.muted=false; - this.mute=function(val) - { - if (this.id==0) return false; - this.muted=val; - if (val) {l('productMute'+this.id).classList.add('on');l('row'+this.id).classList.add('muted');l('mutedProduct'+this.id).style.display='inline-block';} - else {l('productMute'+this.id).classList.remove('on');l('row'+this.id).classList.remove('muted');l('mutedProduct'+this.id).style.display='none';} - }; - - this.draw=function(){}; - - var str=''; - if (this.id!=0) str+='
'; - str+='
'; - str+='
'; - str+='
'; - if (this.id!=0) str+='
'+loc("Mute")+'
('+loc("Minimize this building")+')
','this')+' onclick="Game.ObjectsById['+this.id+'].mute(1);PlaySound(Game.ObjectsById['+this.id+'].muted?\'snd/clickOff2.mp3\':\'snd/clickOn2.mp3\');" id="productMute'+this.id+'">'+loc("Mute")+'
'; - str+=''; - str+='
'; - if (this.id==0) l('sectionLeftExtra').innerHTML=l('sectionLeftExtra').innerHTML+str; - else - { - str+=''; - str+='
'; - str+=''; - l('rows').innerHTML=l('rows').innerHTML+str; - - //building canvas - this.pics=[]; - - this.toResize=true; - this.redraw=function() - { - var me=this; - me.pics=[]; - } - this.draw=function() - { - if (this.amount<=0) return false; - if (this.toResize) - { - this.canvas.width=this.canvas.clientWidth; - this.canvas.height=this.canvas.clientHeight; - this.toResize=false; - } - var ctx=this.ctx; - //clear - //ctx.clearRect(0,0,this.canvas.width,this.canvas.height); - ctx.globalAlpha=1; - - //pic : a loaded picture or a function returning a loaded picture - //bg : a loaded picture or a function returning a loaded picture - tiled as the background, 128x128 - //xV : the pictures will have a random horizontal shift by this many pixels - //yV : the pictures will have a random vertical shift by this many pixels - //w : how many pixels between each picture (or row of pictures) - //x : horizontal offset - //y : vertical offset (+32) - //rows : if >1, arrange the pictures in rows containing this many pictures - //frames : if present, slice the pic in [frames] horizontal slices and pick one at random - - var pic=this.art.pic; - var bg=this.art.bg; - var xV=this.art.xV||0; - var yV=this.art.yV||0; - var w=this.art.w||48; - var h=this.art.h||48; - var offX=this.art.x||0; - var offY=this.art.y||0; - var rows=this.art.rows||1; - var frames=this.art.frames||1; - - if (typeof(bg)=='string') ctx.fillPattern(Pic(this.art.bg),0,0,this.canvas.width,this.canvas.height,128,128); - else bg(this,ctx); - /* - ctx.globalAlpha=0.5; - if (typeof(bg)=='string')//test - { - ctx.fillPattern(Pic(this.art.bg),-128+Game.T%128,0,this.canvas.width+128,this.canvas.height,128,128); - ctx.fillPattern(Pic(this.art.bg),-128+Math.floor(Game.T/2)%128,-128+Math.floor(Game.T/2)%128,this.canvas.width+128,this.canvas.height+128,128,128); - } - ctx.globalAlpha=1; - */ - var maxI=Math.floor(this.canvas.width/(w/rows)+1); - var iT=Math.min(this.amount,maxI); - var i=this.pics.length; - - - var x=0; - var y=0; - var added=0; - if (i!=iT) - { - //for (var iter=0;iter<3;iter++) - //{ - var prevFrame=0; - while (i1) frame=Math.floor(Math.random()*frames); - if (frames>1) {frame=prevFrame+Math.floor(Math.random()*(frames-1)+1);frame=frame%frames;} - prevFrame=frame; - this.pics.push({x:Math.floor(x),y:Math.floor(y),z:y,pic:usedPic,id:i,frame:frame}); - i++; - added++; - } - while (i>iT) - //else if (i>iT) - { - this.pics.sort(Game.sortSpritesById); - this.pics.pop(); - i--; - added--; - } - //} - this.pics.sort(Game.sortSprites); - } - - var len=this.pics.length; - - if (this.mouseOn) - { - var selected=-1; - if (this.name=='Grandma') - { - //mouse detection only fits grandma sprites for now - var marginW=-18; - var marginH=-10; - for (var i=0;i=pic.x-marginW && this.mousePos[0]=pic.y-marginH && this.mousePos[1]0) - { - var str=loc("Names in white were submitted by our supporters on Patreon."); - ctx.globalAlpha=0.75; - ctx.fillStyle='#000'; - ctx.font='9px Merriweather'; - ctx.textAlign='left'; - ctx.fillRect(0,0,ctx.measureText(str).width+4,12); - ctx.globalAlpha=1; - ctx.fillStyle='rgba(255,255,255,0.7)'; - ctx.fillText(str,2,8); - if (EN) - { - ctx.fillStyle='rgba(255,255,255,1)'; - ctx.fillText('white',2+ctx.measureText('Names in ').width,8); - } - } - } - } - - Math.seedrandom(); - - for (var i=0;i0 && Math.random()<0.2) {name=choose(Game.customGrandmaNames);custom=true;} - var text=loc("%1, age %2",[name,Beautify(Math.floor(70+Math.random()*30+years+this.level))]); - var width=ctx.measureText(text).width+12; - var x=Math.max(0,Math.min(pic.x+32-width/2+Math.random()*32-16,this.canvas.width-width)); - var y=4+Math.random()*8-4; - Math.seedrandom(); - ctx.fillStyle='#000'; - ctx.strokeStyle='#000'; - ctx.lineWidth=8; - ctx.globalAlpha=0.75; - ctx.beginPath(); - ctx.moveTo(pic.x+32,pic.y+32); - ctx.lineTo(Math.floor(x+width/2),Math.floor(y+20)); - ctx.stroke(); - ctx.fillRect(Math.floor(x),Math.floor(y),Math.floor(width),24); - ctx.globalAlpha=1; - if (custom) ctx.fillStyle='#fff'; - else ctx.fillStyle='rgba(255,255,255,0.7)'; - ctx.fillText(text,Math.floor(x+width/2),Math.floor(y+16)); - - ctx.drawImage(sprite,Math.floor(pic.x+Math.random()*4-2),Math.floor(pic.y+Math.random()*4-2)); - } - //else if (1) ctx.drawImage(sprite,0,0,sprite.width,sprite.height,pic.x,pic.y,sprite.width,sprite.height); - else if (pic.frame!=-1) ctx.drawImage(sprite,(sprite.width/frames)*pic.frame,0,sprite.width/frames,sprite.height,pic.x,pic.y,(sprite.width/frames),sprite.height); - else ctx.drawImage(sprite,pic.x,pic.y); - - } - - /* - var picX=this.id; - var picY=12; - var w=1; - var h=1; - var w=Math.abs(Math.cos(Game.T*0.2+this.id*2-0.3))*0.2+0.8; - var h=Math.abs(Math.sin(Game.T*0.2+this.id*2))*0.3+0.7; - var x=64+Math.cos(Game.T*0.19+this.id*2)*8-24*w; - var y=128-Math.abs(Math.pow(Math.sin(Game.T*0.2+this.id*2),5)*16)-48*h; - ctx.drawImage(Pic('icons.png'),picX*48,picY*48,48,48,Math.floor(x),Math.floor(y),48*w,48*h); - */ - } - } - - Game.last=this; - Game.Objects[this.name]=this; - Game.ObjectsById.push(this); - Game.ObjectsN++; - return this; - } - - Game.DrawBuildings=function()//draw building displays with canvas - { - if (Game.drawT%3==0) - { - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (me.id>0 && !me.onMinigame && !me.muted) me.draw(); - else me.pics=[]; - } - } - } - - Game.sortSprites=function(a,b) - { - if (a.z>b.z) return 1; - else if (a.zb.id) return 1; - else if (a.id'+loc("You can also press %1 to bulk-buy or sell %2 of a building at a time, or %3 for %4.",[''+loc("Ctrl")+'','10',''+loc("Shift")+'','100'])+'' - ,'store')+ - '>'+ - '
'+loc("Buy")+'
'+ - '
'+loc("Sell")+'
'+ - '
1
'+ - '
10
'+ - '
100
'+ - '
'+loc("all")+'
'+ - ''; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - str+=(Game.prefs.screenreader?'':''); - } - l('products').innerHTML=str; - - Game.storeBulkButton(-1); - - /*var SellAllPrompt=function(id) - { - return function(id){Game.Prompt('
Do you really want to sell your '+loc("%1 "+Game.ObjectsById[id].bsingle,LBeautify(Game.ObjectsById[id].amount))+'?
',[['Yes','Game.ObjectsById['+id+'].sell(-1);Game.ClosePrompt();'],['No','Game.ClosePrompt();']]);}(id); - }*/ - - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - me.l=l('product'+me.id); - - //these are a bit messy but ah well - if (!Game.touchEvents) - { - AddEvent(me.l,'click',function(what){return function(e){Game.ClickProduct(what);e.preventDefault();};}(me.id)); - } - else - { - AddEvent(me.l,'touchend',function(what){return function(e){Game.ClickProduct(what);e.preventDefault();};}(me.id)); - } - } - } - - Game.ClickProduct=function(what) - { - Game.ObjectsById[what].buy(); - } - - Game.RefreshStore=function()//refresh the store's buildings - { - for (var i in Game.Objects) - { - Game.Objects[i].refresh(); - } - Game.storeToRefresh=0; - } - - Game.ComputeCps=function(base,mult,bonus) - { - if (!bonus) bonus=0; - return ((base)*(Math.pow(2,mult))+bonus); - } - - Game.isMinigameReady=function(me) - {return (me.minigameUrl && me.minigameLoaded && me.level>0);} - Game.scriptBindings=[]; - Game.showedScriptLoadError=false; - Game.LoadMinigames=function()//load scripts for each minigame - { - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (me.minigameUrl && me.level>0 && !me.minigameLoaded && !me.minigameLoading && !l('minigameScript-'+me.id)) - { - me.minigameLoading=true; - //we're only loading the minigame scripts that aren't loaded yet and which have enough building level - //we call this function on building level up and on load - //console.log('Loading script '+me.minigameUrl+'...'); - setTimeout(function(me){return function(){ - var script=document.createElement('script'); - script.id='minigameScript-'+me.id; - Game.scriptBindings['minigameScript-'+me.id]=me; - script.setAttribute('src',me.minigameUrl+'?r='+Game.version); - script.onload=function(me,script){return function(){ - if (!me.minigameLoaded) Game.scriptLoaded(me,script); - }}(me,'minigameScript-'+me.id); - script.onerror=function(me,script){return function(){ - me.minigameLoading=false; - if (!me.minigameLoaded && !Game.showedScriptLoadError) - { - Game.showedScriptLoadError=true; - Game.Notify(loc("Error!"),'Couldn\'t load minigames. Try reloading.'); - } - }}(me,'minigameScript-'+me.id); - document.head.appendChild(script); - }}(me),10); - } - } - } - Game.scriptLoaded=function(who,script) - { - who.minigameLoading=false; - who.minigameLoaded=true; - who.refresh(); - who.minigame.launch(); - if (who.minigameSave) {who.minigame.reset(true);who.minigame.load(who.minigameSave);who.minigameSave=0;} - } - - Game.magicCpS=function(what) - { - /* - if (Game.Objects[what].amount>=250) - { - //this makes buildings give 1% more cookies for every building over 250. - //this turns out to be rather stupidly overpowered. - var n=Game.Objects[what].amount-250; - return 1+Math.pow(1.01,n); - } - else return 1; - */ - return 1; - } - - //define objects - new Game.Object('Cursor','cursor|cursors|clicked|[X] extra finger|[X] extra fingers','Autoclicks once every 10 seconds.',0,0,{},15,function(me){ - var add=0; - if (Game.Has('Thousand fingers')) add+= 0.1; - if (Game.Has('Million fingers')) add*= 5; - if (Game.Has('Billion fingers')) add*= 10; - if (Game.Has('Trillion fingers')) add*= 20; - if (Game.Has('Quadrillion fingers')) add*= 20; - if (Game.Has('Quintillion fingers')) add*= 20; - if (Game.Has('Sextillion fingers')) add*= 20; - if (Game.Has('Septillion fingers')) add*= 20; - if (Game.Has('Octillion fingers')) add*= 20; - if (Game.Has('Nonillion fingers')) add*= 20; - if (Game.Has('Decillion fingers')) add*= 20; - if (Game.Has('Unshackled cursors')) add*= 25; - var mult=1; - var num=0; - for (var i in Game.Objects) {if (Game.Objects[i].name!='Cursor') num+=Game.Objects[i].amount;} - add=add*num; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS('Cursor'); - mult*=Game.eff('cursorCps'); - return Game.ComputeCps(0.1,Game.Has('Reinforced index finger')+Game.Has('Carpal tunnel prevention cream')+Game.Has('Ambidextrous'),add)*mult; - },function(){ - if (this.amount>=1) Game.Unlock(['Reinforced index finger','Carpal tunnel prevention cream']); - if (this.amount>=10) Game.Unlock('Ambidextrous'); - if (this.amount>=25) Game.Unlock('Thousand fingers'); - if (this.amount>=50) Game.Unlock('Million fingers'); - if (this.amount>=100) Game.Unlock('Billion fingers'); - if (this.amount>=150) Game.Unlock('Trillion fingers'); - if (this.amount>=200) Game.Unlock('Quadrillion fingers'); - if (this.amount>=250) Game.Unlock('Quintillion fingers'); - if (this.amount>=300) Game.Unlock('Sextillion fingers'); - if (this.amount>=350) Game.Unlock('Septillion fingers'); - if (this.amount>=400) Game.Unlock('Octillion fingers'); - if (this.amount>=450) Game.Unlock('Nonillion fingers'); - if (this.amount>=500) Game.Unlock('Decillion fingers'); - - if (this.amount>=1) Game.Win('Click');if (this.amount>=2) Game.Win('Double-click');if (this.amount>=50) Game.Win('Mouse wheel');if (this.amount>=100) Game.Win('Of Mice and Men');if (this.amount>=200) Game.Win('The Digital');if (this.amount>=300) Game.Win('Extreme polydactyly');if (this.amount>=400) Game.Win('Dr. T');if (this.amount>=500) Game.Win('Thumbs, phalanges, metacarpals');if (this.amount>=600) Game.Win('With her finger and her thumb');if (this.amount>=700) Game.Win('Gotta hand it to you');if (this.amount>=800) Game.Win('The devil\'s workshop'); - }); - - Game.SpecialGrandmaUnlock=15; - new Game.Object('Grandma','grandma|grandmas|baked|Grandmas are [X] year older|Grandmas are [X] years older','A nice grandma to bake more cookies.',1,1,{pic:function(i){ - var list=['grandma']; - if (Game.Has('Farmer grandmas')) list.push('farmerGrandma'); - if (Game.Has('Worker grandmas')) list.push('workerGrandma'); - if (Game.Has('Miner grandmas')) list.push('minerGrandma'); - if (Game.Has('Cosmic grandmas')) list.push('cosmicGrandma'); - if (Game.Has('Transmuted grandmas')) list.push('transmutedGrandma'); - if (Game.Has('Altered grandmas')) list.push('alteredGrandma'); - if (Game.Has('Grandmas\' grandmas')) list.push('grandmasGrandma'); - if (Game.Has('Antigrandmas')) list.push('antiGrandma'); - if (Game.Has('Rainbow grandmas')) list.push('rainbowGrandma'); - if (Game.Has('Banker grandmas')) list.push('bankGrandma'); - if (Game.Has('Priestess grandmas')) list.push('templeGrandma'); - if (Game.Has('Witch grandmas')) list.push('witchGrandma'); - if (Game.Has('Lucky grandmas')) list.push('luckyGrandma'); - if (Game.Has('Metagrandmas')) list.push('metaGrandma'); - if (Game.Has('Script grannies')) list.push('scriptGrandma'); - if (Game.Has('Alternate grandmas')) list.push('alternateGrandma'); - if (Game.Has('Brainy grandmas')) list.push('brainyGrandma'); - if (Game.season=='christmas') list.push('elfGrandma'); - if (Game.season=='easter') list.push('bunnyGrandma'); - return choose(list)+'.png'; - },bg:'grandmaBackground.png',xV:8,yV:8,w:32,rows:3,x:0,y:16},100,function(me){ - var mult=1; - for (var i in Game.GrandmaSynergies) - { - if (Game.Has(Game.GrandmaSynergies[i])) mult*=2; - } - if (Game.Has('Bingo center/Research facility')) mult*=4; - if (Game.Has('Ritual rolling pins')) mult*=2; - if (Game.Has('Naughty list')) mult*=2; - - if (Game.Has('Elderwort biscuits')) mult*=1.02; - - mult*=Game.eff('grandmaCps'); - - if (Game.Has('Cat ladies')) - { - for (var i=0;i0) return [3,2]; - return grandmaIcons[Game.elderWrath]; - }; - - - new Game.Object('Farm','farm|farms|harvested|[X] more acre|[X] more acres','Grows cookie plants from cookie seeds.',3,2,{base:'farm',xV:8,yV:8,w:64,rows:2,x:0,y:16},500,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.minigameUrl='minigameGarden.js'; - Game.last.minigameName=loc("Garden"); - - new Game.Object('Mine','mine|mines|mined|[X] mile deeper|[X] miles deeper','Mines out cookie dough and chocolate chips.',4,3,{base:'mine',xV:16,yV:16,w:64,rows:2,x:0,y:24},10000,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - - new Game.Object('Factory','factory|factories|mass-produced|[X] additional patent|[X] additional patents','Produces large quantities of cookies.',5,4,{base:'factory',xV:8,yV:0,w:64,rows:1,x:0,y:-22},3000,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - //Game.last.minigameUrl='minigameDungeon.js';//not yet - Game.last.minigameName=loc("Dungeon"); - - new Game.Object('Bank','bank|banks|banked|Interest rates [X]% better|Interest rates [X]% better','Generates cookies from interest.',6,15,{base:'bank',xV:8,yV:4,w:56,rows:1,x:0,y:13},0,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.minigameUrl='minigameMarket.js'; - Game.last.minigameName=loc("Stock Market"); - - new Game.Object('Temple','temple|temples|discovered|[X] sacred artifact retrieved|[X] sacred artifacts retrieved','Full of precious, ancient chocolate.',7,16,{base:'temple',xV:8,yV:4,w:72,rows:2,x:0,y:-5},0,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.minigameUrl='minigamePantheon.js'; - Game.last.minigameName=loc("Pantheon"); - - new Game.Object('Wizard tower','wizard tower|wizard towers|summoned|Incantations have [X] more syllable|Incantations have [X] more syllables','Summons cookies with magic spells.',8,17,{base:'wizardtower',xV:16,yV:16,w:48,rows:2,x:0,y:20},0,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Wizard tower';//shrink - Game.last.minigameUrl='minigameGrimoire.js'; - Game.last.minigameName=loc("Grimoire"); - - new Game.Object('Shipment','shipment|shipments|shipped|[X] galaxy fully explored|[X] galaxies fully explored','Brings in fresh cookies from the cookie planet.',9,5,{base:'shipment',xV:16,yV:16,w:64,rows:1,x:0,y:0},40000,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - - new Game.Object('Alchemy lab','alchemy lab|alchemy labs|transmuted|[X] primordial element mastered|[X] primordial elements mastered','Turns gold into cookies!',10,6,{base:'alchemylab',xV:16,yV:16,w:64,rows:2,x:0,y:16},200000,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Alchemy lab';//shrink - - new Game.Object('Portal','portal|portals|retrieved|[X] dimension enslaved|[X] dimensions enslaved','Opens a door to the Cookieverse.',11,7,{base:'portal',xV:32,yV:32,w:64,rows:2,x:0,y:0},1666666,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - - new Game.Object('Time machine','time machine|time machines|recovered|[X] century secured|[X] centuries secured','Brings cookies from the past, before they were even eaten.',12,8,{base:'timemachine',xV:32,yV:32,w:64,rows:1,x:0,y:0},123456789,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Time machine';//shrink - - new Game.Object('Antimatter condenser','antimatter condenser|antimatter condensers|condensed|[X] extra quark flavor|[X] extra quark flavors','Condenses the antimatter in the universe into cookies.',13,13,{base:'antimattercondenser',xV:0,yV:64,w:64,rows:1,x:0,y:0},3999999999,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Antim. condenser';//shrink - - new Game.Object('Prism','prism|prisms|converted|[X] new color discovered|[X] new colors discovered','Converts light itself into cookies.',14,14,{base:'prism',xV:16,yV:4,w:64,rows:1,x:0,y:20},75000000000,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - - new Game.Object('Chancemaker','chancemaker|chancemakers|spontaneously generated|Chancemakers are powered by [X]-leaf clovers|Chancemakers are powered by [X]-leaf clovers','Generates cookies out of thin air through sheer luck.',15,19,{base:'chancemaker',xV:8,yV:64,w:64,rows:1,x:0,y:0,rows:2},77777777777,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Chancemaker';//shrink - - new Game.Object('Fractal engine','fractal engine|fractal engines|made from cookies|[X] iteration deep|[X] iterations deep','Turns cookies into even more cookies.',16,20,{base:'fractalEngine',xV:8,yV:64,w:64,rows:1,x:0,y:0},12345678987654321,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Fractal engine';//shrink - - new Game.Object('Javascript console','javascript console|javascript consoles|programmed|Equipped with [X] external library|Equipped with [X] external libraries','Creates cookies from the very code this game was written in.',17,32,{base:'javascriptconsole',xV:8,yV:64,w:14,rows:1,x:8,y:-32,frames:2},12345678987654321,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - Game.last.displayName='Javascript console';//shrink - - new Game.Object('Idleverse','idleverse|idleverses|hijacked|[X] manifold|[X] manifolds','There\'s been countless other idle universes running alongside our own. You\'ve finally found a way to hijack their production and convert whatever they\'ve been making into cookies!',18,33,{base:'idleverse',xV:8,yV:96,w:48,rows:2,x:0,y:0,frames:4},12345678987654321,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - - new Game.Object('Cortex baker','cortex baker|cortex bakers|imagined|[X] extra IQ point|[X] extra IQ points','These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.',19,34,{base:'cortex',xV:8,yV:96,w:48,rows:1,x:0,y:0,frames:4},12345678987654321,function(me){ - var mult=1; - mult*=Game.GetTieredCpsMult(me); - mult*=Game.magicCpS(me.name); - return me.baseCps*mult; - },function(){ - Game.UnlockTiered(this); - if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); - }); - - Game.foolObjects={ - 'Unknown':{name:'Investment',desc:'You\'re not sure what this does, you just know it means profit.',icon:0}, - 'Cursor':{name:'Rolling pin',desc:'Essential in flattening dough. The first step in cookie-making.',icon:0}, - 'Grandma':{name:'Oven',desc:'A crucial element of baking cookies.',icon:1}, - 'Farm':{name:'Kitchen',desc:'The more kitchens, the more cookies your employees can produce.',icon:2}, - 'Mine':{name:'Secret recipe',desc:'These give you the edge you need to outsell those pesky competitors.',icon:3}, - 'Factory':{name:'Factory',desc:'Mass production is the future of baking. Seize the day, and synergize!',icon:4}, - 'Bank':{name:'Investor',desc:'Business folks with a nose for profit, ready to finance your venture as long as there\'s money to be made.',icon:5}, - 'Temple':{name:'Like',desc:'Your social media page is going viral! Amassing likes is the key to a lasting online presence and juicy advertising deals.',icon:9}, - 'Wizard tower':{name:'Meme',desc:'Cookie memes are all the rage! With just the right amount of social media astroturfing, your brand image will be all over the cyberspace.',icon:6}, - 'Shipment':{name:'Supermarket',desc:'A gigantic cookie emporium - your very own retail chain.',icon:7}, - 'Alchemy lab':{name:'Stock share',desc:'You\'re officially on the stock market, and everyone wants a piece!',icon:8}, - 'Portal':{name:'TV show',desc:'Your cookies have their own sitcom! Hilarious baking hijinks set to the cheesiest laughtrack.',icon:10}, - 'Time machine':{name:'Theme park',desc:'Cookie theme parks, full of mascots and roller-coasters. Build one, build a hundred!',icon:11}, - 'Antimatter condenser':{name:'Cookiecoin',desc:'A virtual currency, already replacing regular money in some small countries.',icon:12}, - 'Prism':{name:'Corporate country',desc:'You\'ve made it to the top, and you can now buy entire nations to further your corporate greed. Godspeed.',icon:13}, - 'Chancemaker':{name:'Privatized planet',desc:'Actually, you know what\'s cool? A whole planet dedicated to producing, advertising, selling, and consuming your cookies.',icon:15}, - 'Fractal engine':{name:'Senate seat',desc:'Only through political dominion can you truly alter this world to create a brighter, more cookie-friendly future.',icon:16}, - 'Javascript console':{name:'Doctrine',desc:'Taking many forms -religion, culture, philosophy- a doctrine may, when handled properly, cause a lasting impact on civilizations, reshaping minds and people and ensuring all future generations share a singular goal - the production, and acquisition, of more cookies.',icon:17}, - 'Idleverse':{name:'Lateral expansions',desc:'Sometimes the best way to keep going up is sideways. Diversify your ventures through non-cookie investments.',icon:18}, - 'Cortex baker':{name:'Think tank',desc:'There\'s only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!',icon:19}, - }; - - if (true)//if (!EN) - { - Game.foolObjects['Unknown'].name=loc("Investment"); - Game.foolObjects['Unknown'].desc=loc("You're not sure what this does, you just know it means profit."); - for (var i in Game.Objects) - { - Game.foolObjects[i].name=loc(FindLocStringByPart(Game.Objects[i].name+' business name'))||Game.foolObjects[i].name; - Game.foolObjects[i].desc=loc(FindLocStringByPart(Game.Objects[i].name+' business quote'))||Game.foolObjects[i].desc; - } - } - - //build store - Game.BuildStore(); - - //build master bar - var str=''; - str+='
'; - str+='
'; - l('buildingsMaster').innerHTML=str; - - //build object displays - var muteStr='
'+loc("Muted:")+'
'; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - - if (locStrings[me.name+' (short)']) me.displayName=loc(me.name+' (short)'); - - if (me.id>0) - { - me.canvas=l('rowCanvas'+me.id); - me.ctx=me.canvas.getContext('2d',{alpha:false}); - me.pics=[]; - var icon=[0*64,me.icon*64]; - muteStr+=''; - //muteStr+='')+'>'; - - AddEvent(me.canvas,'mouseover',function(me){return function(){me.mouseOn=true;}}(me)); - AddEvent(me.canvas,'mouseout',function(me){return function(){me.mouseOn=false;}}(me)); - AddEvent(me.canvas,'mousemove',function(me){return function(e){var box=this.getBounds();me.mousePos[0]=e.pageX-box.left;me.mousePos[1]=e.pageY-box.top;}}(me)); - } - } - Game.mutedBuildingTooltip=function(id) - { - return function(){ - var me=Game.ObjectsById[id]; - return '
'+(EN?(''+cap(me.plural)+(me.level>0?' (lvl. '+me.level+')':'')+'
Click to unmute '+me.plural+'
(display this building)'):(''+loc("Level %1 %2",[Beautify(me.level),me.plural])+'
'+loc("Click to unmute")))+'
'; - } - } - l('buildingsMute').innerHTML=muteStr; - - /*===================================================================================== - UPGRADES - =======================================================================================*/ - Game.upgradesToRebuild=1; - Game.Upgrades={}; - Game.UpgradesById={}; - Game.UpgradesN=0; - Game.UpgradesInStore=[]; - Game.UpgradesOwned=0; - Game.Upgrade=function(name,desc,price,icon,buyFunction) - { - this.id=Game.UpgradesN; - this.name=name; - this.dname=this.name; - this.desc=desc; - this.baseDesc=this.desc; - this.basePrice=price; - this.priceLumps=0;//note : doesn't do much on its own, you still need to handle the buying yourself - this.icon=icon; - this.iconFunction=0; - this.buyFunction=buyFunction; - /*this.unlockFunction=unlockFunction; - this.unlocked=(this.unlockFunction?0:1);*/ - this.unlocked=0; - this.bought=0; - this.order=this.id; - if (order) this.order=order+this.id*0.001; - this.pool='';//can be '', cookie, toggle, debug, prestige, prestigeDecor, tech, or unused - if (pool) this.pool=pool; - this.power=0; - if (power) this.power=power; - this.vanilla=Game.vanilla; - this.unlockAt=0; - this.techUnlock=[]; - this.parents=[]; - this.type='upgrade'; - this.tier=0; - this.buildingTie=0;//of what building is this a tiered upgrade of ? - - Game.last=this; - Game.Upgrades[this.name]=this; - Game.UpgradesById[this.id]=this; - Game.UpgradesN++; - return this; - } - Game.Upgrade.prototype.getType=function(){return 'Upgrade';} - - Game.Upgrade.prototype.getPrice=function() - { - var price=this.basePrice; - if (this.priceFunc) price=this.priceFunc(this); - if (price==0) return 0; - if (this.pool!='prestige') - { - if (Game.Has('Toy workshop')) price*=0.95; - if (Game.Has('Five-finger discount')) price*=Math.pow(0.99,Game.Objects['Cursor'].amount/100); - if (Game.Has('Santa\'s dominion')) price*=0.98; - if (Game.Has('Faberge egg')) price*=0.99; - if (Game.Has('Divine sales')) price*=0.99; - if (Game.Has('Fortune #100')) price*=0.99; - if (this.kitten && Game.Has('Kitten wages')) price*=0.9; - if (Game.hasBuff('Haggler\'s luck')) price*=0.98; - if (Game.hasBuff('Haggler\'s misery')) price*=1.02; - //if (Game.hasAura('Master of the Armory')) price*=0.98; - price*=1-Game.auraMult('Master of the Armory')*0.02; - price*=Game.eff('upgradeCost'); - if (this.pool=='cookie' && Game.Has('Divine bakeries')) price/=5; - } - return Math.ceil(price); - } - - Game.Upgrade.prototype.canBuy=function() - { - if (this.canBuyFunc) return this.canBuyFunc(); - if (Game.cookies>=this.getPrice()) return true; else return false; - } - - Game.storeBuyAll=function() - { - if (!Game.Has('Inspired checklist')) return false; - for (var i in Game.UpgradesInStore) - { - var me=Game.UpgradesInStore[i]; - if (!me.isVaulted() && me.pool!='toggle' && me.pool!='tech') me.buy(1); - } - } - - Game.vault=[]; - Game.Upgrade.prototype.isVaulted=function() - { - if (Game.vault.indexOf(this.id)!=-1) return true; else return false; - } - Game.Upgrade.prototype.vault=function() - { - if (!this.isVaulted()) Game.vault.push(this.id); - } - Game.Upgrade.prototype.unvault=function() - { - if (this.isVaulted()) Game.vault.splice(Game.vault.indexOf(this.id),1); - } - - Game.Upgrade.prototype.click=function(e) - { - if ((e && e.shiftKey) || Game.keys[16]) - { - if (this.pool=='toggle' || this.pool=='tech') {} - else if (Game.Has('Inspired checklist')) - { - if (this.isVaulted()) this.unvault(); - else this.vault(); - Game.upgradesToRebuild=1; - PlaySound('snd/tick.mp3'); - } - } - else this.buy(); - } - - - Game.Upgrade.prototype.buy=function(bypass) - { - var success=0; - var cancelPurchase=0; - if (this.clickFunction && !bypass) cancelPurchase=!this.clickFunction(); - if (!cancelPurchase) - { - if (this.choicesFunction) - { - if (Game.choiceSelectorOn==this.id) - { - l('toggleBox').style.display='none'; - l('toggleBox').innerHTML=''; - Game.choiceSelectorOn=-1; - PlaySound('snd/tickOff.mp3'); - } - else - { - Game.choiceSelectorOn=this.id; - var choices=this.choicesFunction(); - var str=''; - str+='
x
'; - str+='

'+this.dname+'

'+ - '
'; - if (typeof choices==='string') - { - str+=choices; - } - else if (choices.length>0) - { - var selected=0; - for (var i in choices) {if (choices[i].selected) selected=i;} - Game.choiceSelectorChoices=choices;//this is a really dumb way of doing this i am so sorry - Game.choiceSelectorSelected=selected; - str+='

'+choices[selected].name+'

'+ - '
'; - - for (var i in choices) - { - choices[i].id=i; - choices[i].order=choices[i].order||0; - } - - var sortMap=function(a,b) - { - if (a.order>b.order) return 1; - else if (a.order'; - } - } - l('toggleBox').innerHTML=str; - l('toggleBox').style.display='block'; - l('toggleBox').focus(); - Game.tooltip.hide(); - PlaySound('snd/tick.mp3'); - success=1; - } - } - else if (this.pool!='prestige') - { - var price=this.getPrice(); - if (this.canBuy() && !this.bought) - { - Game.Spend(price); - this.bought=1; - if (this.buyFunction) this.buyFunction(); - if (this.toggleInto) - { - Game.Lock(this.toggleInto); - Game.Unlock(this.toggleInto); - } - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned++; - Game.setOnCrate(0); - Game.tooltip.hide(); - PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75); - success=1; - } - } - else - { - var price=this.getPrice(); - if (Game.heavenlyChips>=price && !this.bought) - { - Game.heavenlyChips-=price; - Game.heavenlyChipsSpent+=price; - this.unlocked=1; - this.bought=1; - if (this.buyFunction) this.buyFunction(); - Game.BuildAscendTree(this); - PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75); - PlaySound('snd/shimmerClick.mp3'); - //PlaySound('snd/buyHeavenly.mp3'); - success=1; - } - } - } - if (this.bought && this.activateFunction) this.activateFunction(); - return success; - } - Game.Upgrade.prototype.earn=function()//just win the upgrades without spending anything - { - this.unlocked=1; - this.bought=1; - if (this.buyFunction) this.buyFunction(); - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned++; - } - Game.Upgrade.prototype.unearn=function()//remove the upgrade, but keep it unlocked - { - this.bought=0; - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned--; - } - Game.Upgrade.prototype.unlock=function() - { - this.unlocked=1; - Game.upgradesToRebuild=1; - } - Game.Upgrade.prototype.lose=function() - { - this.unlocked=0; - this.bought=0; - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned--; - } - Game.Upgrade.prototype.toggle=function()//cheating only - { - if (!this.bought) - { - this.bought=1; - if (this.buyFunction) this.buyFunction(); - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned++; - PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75); - if (this.pool=='prestige' || this.pool=='debug') PlaySound('snd/shimmerClick.mp3'); - } - else - { - this.bought=0; - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned--; - PlaySound('snd/sell'+choose([1,2,3,4])+'.mp3',0.75); - if (this.pool=='prestige' || this.pool=='debug') PlaySound('snd/shimmerClick.mp3'); - } - if (Game.onMenu=='stats') Game.UpdateMenu(); - } - - Game.CountsAsUpgradeOwned=function(pool) - { - if (pool=='' || pool=='cookie' || pool=='tech') return true; else return false; - } - - /*AddEvent(l('toggleBox'),'blur',function()//if we click outside of the selector, close it - { - //this has a couple problems, such as when clicking on the upgrade - this toggles it off and back on instantly - l('toggleBox').style.display='none'; - l('toggleBox').innerHTML=''; - Game.choiceSelectorOn=-1; - } - );*/ - - Game.RequiresConfirmation=function(upgrade,prompt) - { - upgrade.clickFunction=function(){Game.Prompt(''+prompt,[[loc("Yes"),'Game.UpgradesById['+upgrade.id+'].buy(1);Game.ClosePrompt();'],loc("No")]);return false;}; - } - - Game.Unlock=function(what) - { - if (typeof what==='string') - { - if (Game.Upgrades[what]) - { - if (Game.Upgrades[what].unlocked==0) - { - Game.Upgrades[what].unlocked=1; - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - /*Game.Notify('Upgrade unlocked','
'+Game.Upgrades[what].dname+'
',Game.Upgrades[what].icon,6);*/ - } - } - } - else {for (var i in what) {Game.Unlock(what[i]);}} - } - Game.Lock=function(what) - { - if (typeof what==='string') - { - if (Game.Upgrades[what]) - { - Game.Upgrades[what].unlocked=0; - Game.upgradesToRebuild=1; - if (Game.Upgrades[what].bought==1 && Game.CountsAsUpgradeOwned(Game.Upgrades[what].pool)) Game.UpgradesOwned--; - Game.Upgrades[what].bought=0; - Game.recalculateGains=1; - } - } - else {for (var i in what) {Game.Lock(what[i]);}} - } - - Game.Has=function(what) - { - var it=Game.Upgrades[what]; - if (it && Game.ascensionMode==1 && (it.pool=='prestige' || it.tier=='fortune')) return 0; - return (it?it.bought:0); - } - Game.HasUnlocked=function(what) - { - return (Game.Upgrades[what]?Game.Upgrades[what].unlocked:0); - } - - - Game.RebuildUpgrades=function()//recalculate the upgrades you can buy - { - Game.upgradesToRebuild=0; - var list=[]; - for (var i in Game.Upgrades) - { - var me=Game.Upgrades[i]; - if (!me.bought && me.pool!='debug' && me.pool!='prestige' && me.pool!='prestigeDecor' && (Game.ascensionMode!=1 || (!me.lasting && me.tier!='fortune'))) - { - if (me.unlocked) list.push(me); - } - else if (me.displayFuncWhenOwned && me.bought) list.push(me); - } - var sortMap=function(a,b) - { - var ap=a.pool=='toggle'?a.order:a.getPrice(); - var bp=b.pool=='toggle'?b.order:b.getPrice(); - if (ap>bp) return 1; - else if (ap'+loc("Will instantly purchase every upgrade you can afford, starting from the cheapest one.
Upgrades in the vault will not be auto-purchased.
You may place an upgrade into the vault by Shift-clicking on it.")+'' - ,'store')+ - '>'+ - '
'+loc("Buy all upgrades")+'
'+ - ''; - l('upgrades').classList.add('hasMenu'); - } - else l('upgrades').classList.remove('hasMenu'); - - for (var i in Game.UpgradesInStore) - { - //if (!Game.UpgradesInStore[i]) break; - var me=Game.UpgradesInStore[i]; - var str=Game.crate(me,'store','Game.UpgradesById['+me.id+'].click(event);','upgrade'+i); - - /*var str='
'+Beautify(Math.round(me.getPrice()))+'
'+(me.pool=='toggle'?'[Togglable]':'[Upgrade]')+'
'+me.dname+'
'+me.desc+'
' - ,'store')+' '+Game.clickStr+'="Game.UpgradesById['+me.id+'].buy();" id="upgrade'+i+'" style="'+writeIcon(me.icon)+'">';*/ - if (me.pool=='toggle') toggleStr+=str; else if (me.pool=='tech') techStr+=str; else - { - if (me.isVaulted() && Game.Has('Inspired checklist')) vaultStr+=str; else storeStr+=str; - } - } - - l('upgrades').innerHTML=storeStr; - l('toggleUpgrades').innerHTML=toggleStr; - if (toggleStr=='') l('toggleUpgrades').style.display='none'; else l('toggleUpgrades').style.display='block'; - l('techUpgrades').innerHTML=techStr; - if (techStr=='') l('techUpgrades').style.display='none'; else l('techUpgrades').style.display='block'; - l('vaultUpgrades').innerHTML=vaultStr; - if (vaultStr=='') l('vaultUpgrades').style.display='none'; else l('vaultUpgrades').style.display='block'; - } - - Game.UnlockAt=[];//this contains an array of every upgrade with a cookie requirement in the form of {cookies:(amount of cookies earned required),name:(name of upgrade or achievement to unlock)} (and possibly require:(name of upgrade of achievement to own)) - //note : the cookie will not be added to the list if it contains locked:1 (use for seasonal cookies and such) - - var strCookieProductionMultiplierPlus=loc("Cookie production multiplier +%1%.",'[x]'); - var getStrCookieProductionMultiplierPlus=function(x) - {return strCookieProductionMultiplierPlus.replace('[x]',x);} - var getStrThousandFingersGain=function(x) - {return loc("Multiplies the gain from %1 by %2.",[getUpgradeName("Thousand fingers"),x]);} - var strKittenDesc=loc("You gain more CpS the more milk you have."); - var getStrClickingGains=function(x) - {return loc("Clicking gains +%1% of your CpS.",x);} - - Game.NewUpgradeCookie=function(obj) - { - var upgrade=new Game.Upgrade(obj.name,getStrCookieProductionMultiplierPlus(Beautify((typeof(obj.power)==='function'?obj.power(obj):obj.power),1))+(EN?''+obj.desc+'':''),obj.price,obj.icon); - upgrade.power=obj.power; - upgrade.pool='cookie'; - var toPush={cookies:obj.price/20,name:obj.name}; - if (obj.require) toPush.require=obj.require; - if (obj.season) toPush.season=obj.season; - if (!obj.locked) Game.UnlockAt.push(toPush); - return upgrade; - } - - //tiered upgrades system - //each building has several upgrade tiers - //all upgrades in the same tier have the same color, unlock threshold and price multiplier - Game.Tiers={ - 1:{name:'Plain',unlock:1,achievUnlock:1,iconRow:0,color:'#ccb3ac',price: 10}, - 2:{name:'Berrylium',unlock:5,achievUnlock:50,iconRow:1,color:'#ff89e7',price: 50}, - 3:{name:'Blueberrylium',unlock:25,achievUnlock:100,iconRow:2,color:'#00deff',price: 500}, - 4:{name:'Chalcedhoney',unlock:50,achievUnlock:150,iconRow:13,color:'#ffcc2f',price: 50000}, - 5:{name:'Buttergold',unlock:100,achievUnlock:200,iconRow:14,color:'#e9d673',price: 5000000}, - 6:{name:'Sugarmuck',unlock:150,achievUnlock:250,iconRow:15,color:'#a8bf91',price: 500000000}, - 7:{name:'Jetmint',unlock:200,achievUnlock:300,iconRow:16,color:'#60ff50',price: 500000000000}, - 8:{name:'Cherrysilver',unlock:250,achievUnlock:350,iconRow:17,color:'#f01700',price: 500000000000000}, - 9:{name:'Hazelrald',unlock:300,achievUnlock:400,iconRow:18,color:'#9ab834',price: 500000000000000000}, - 10:{name:'Mooncandy',unlock:350,achievUnlock:450,iconRow:19,color:'#7e7ab9',price: 500000000000000000000}, - 11:{name:'Astrofudge',unlock:400,achievUnlock:500,iconRow:28,color:'#9a3316',price: 5000000000000000000000000}, - 12:{name:'Alabascream',unlock:450,achievUnlock:550,iconRow:30,color:'#c1a88c',price: 50000000000000000000000000000}, - 13:{name:'Iridyum',unlock:500,achievUnlock:600,iconRow:31,color:'#adb1b3',price: 500000000000000000000000000000000}, - 14:{name:'Glucosmium',unlock:550,achievUnlock:650,iconRow:34,color:'#ff89e7',price: 5000000000000000000000000000000000000}, - 'synergy1':{name:'Synergy I',unlock:15,iconRow:20,color:'#008595',special:1,req:'Synergies Vol. I',price: 200000}, - 'synergy2':{name:'Synergy II',unlock:75,iconRow:29,color:'#008595',special:1,req:'Synergies Vol. II',price: 200000000000}, - 'fortune':{name:'Fortune',unlock:-1,iconRow:32,color:'#9ab834',special:1,price: 77777777777777777777777777777}, - }; - for (var i in Game.Tiers){Game.Tiers[i].upgrades=[];} - Game.GetIcon=function(type,tier) - { - var col=0; - if (type=='Kitten') col=18; else col=Game.Objects[type].iconColumn; - return [col,Game.Tiers[tier].iconRow]; - } - Game.SetTier=function(building,tier) - { - if (!Game.Objects[building]) console.log('Warning: No building named',building); - Game.last.tier=tier; - Game.last.buildingTie=Game.Objects[building]; - if (Game.last.type=='achievement') Game.Objects[building].tieredAchievs[tier]=Game.last; - else Game.Objects[building].tieredUpgrades[tier]=Game.last; - } - Game.MakeTiered=function(upgrade,tier,col) - { - upgrade.tier=tier; - if (typeof col!=='undefined') upgrade.icon=[col,Game.Tiers[tier].iconRow]; - } - Game.TieredUpgrade=function(name,desc,building,tier) - { - if (tier=='fortune' && building) desc=loc("%1 are %2% more efficient and %3% cheaper.",[cap(Game.Objects[building].plural),7,7])+desc; - else desc=loc("%1 are twice as efficient.",cap(Game.Objects[building].plural))+desc; - var upgrade=new Game.Upgrade(name,desc,Game.Objects[building].basePrice*Game.Tiers[tier].price,Game.GetIcon(building,tier)); - if (tier!='fortune') - { - upgrade.descFunc=function(){ - return ((Game.ascensionMode!=1 && Game.Has(this.buildingTie1.unshackleUpgrade) && Game.Has(Game.Tiers[this.tier].unshackleUpgrade))?('
'+loc("Unshackled! +%1% extra production.",Math.round((this.buildingTie.id==1?0.5:(20-this.buildingTie.id)*0.1)*100))+'
'):'')+this.ddesc; - }; - } - - Game.SetTier(building,tier); - if (!upgrade.buildingTie1 && building) upgrade.buildingTie1=Game.Objects[building]; - if (tier=='fortune' && building) Game.Objects[building].fortune=upgrade; - return upgrade; - } - Game.SynergyUpgrade=function(name,desc,building1,building2,tier) - { - /* - creates a new upgrade that : - -unlocks when you have tier.unlock of building1 and building2 - -is priced at (building1.price*10+building2.price*1)*tier.price (formerly : Math.sqrt(building1.price*building2.price)*tier.price) - -gives +(0.1*building1)% cps to building2 and +(5*building2)% cps to building1 - -if building2 is below building1 in worth, swap them - */ - //if (Game.Objects[building1].basePrice>Game.Objects[building2].basePrice) {var temp=building2;building2=building1;building1=temp;} - var b1=Game.Objects[building1]; - var b2=Game.Objects[building2]; - if (b1.basePrice>b2.basePrice) {b1=Game.Objects[building2];b2=Game.Objects[building1];}//swap - - desc= - loc("%1 gain +%2% CpS per %3.",[cap(b1.plural),5,b2.single])+'
'+ - loc("%1 gain +%2% CpS per %3.",[cap(b2.plural),0.1,b1.single])+ - (EN?desc:''); - var upgrade=new Game.Upgrade(name,desc,(b1.basePrice*10+b2.basePrice*1)*Game.Tiers[tier].price,Game.GetIcon(building1,tier));//Math.sqrt(b1.basePrice*b2.basePrice)*Game.Tiers[tier].price - upgrade.tier=tier; - upgrade.buildingTie1=b1; - upgrade.buildingTie2=b2; - upgrade.priceFunc=function(){return (this.buildingTie1.basePrice*10+this.buildingTie2.basePrice*1)*Game.Tiers[this.tier].price*(Game.Has('Chimera')?0.98:1);}; - Game.Objects[building1].synergies.push(upgrade); - Game.Objects[building2].synergies.push(upgrade); - //Game.SetTier(building1,tier); - return upgrade; - } - Game.GetTieredCpsMult=function(me) - { - var mult=1; - for (var i in me.tieredUpgrades) - { - if (!Game.Tiers[me.tieredUpgrades[i].tier].special && Game.Has(me.tieredUpgrades[i].name)) - { - var tierMult=2; - //unshackled - if (Game.ascensionMode!=1 && Game.Has(me.unshackleUpgrade) && Game.Has(Game.Tiers[me.tieredUpgrades[i].tier].unshackleUpgrade)) tierMult+=me.id==1?0.5:(20-me.id)*0.1; - mult*=tierMult; - } - } - for (var i in me.synergies) - { - var syn=me.synergies[i]; - if (Game.Has(syn.name)) - { - if (syn.buildingTie1.name==me.name) mult*=(1+0.05*syn.buildingTie2.amount); - else if (syn.buildingTie2.name==me.name) mult*=(1+0.001*syn.buildingTie1.amount); - } - } - if (me.fortune && Game.Has(me.fortune.name)) mult*=1.07; - if (me.grandma && Game.Has(me.grandma.name)) mult*=(1+Game.Objects['Grandma'].amount*0.01*(1/(me.id-1))); - return mult; - } - Game.UnlockTiered=function(me) - { - for (var i in me.tieredUpgrades) {if (Game.Tiers[me.tieredUpgrades[i].tier].unlock!=-1 && me.amount>=Game.Tiers[me.tieredUpgrades[i].tier].unlock) Game.Unlock(me.tieredUpgrades[i].name);} - for (var i in me.tieredAchievs) {if (me.amount>=Game.Tiers[me.tieredAchievs[i].tier].achievUnlock) Game.Win(me.tieredAchievs[i].name);} - for (var i in me.synergies) {var syn=me.synergies[i];if (Game.Has(Game.Tiers[syn.tier].req) && syn.buildingTie1.amount>=Game.Tiers[syn.tier].unlock && syn.buildingTie2.amount>=Game.Tiers[syn.tier].unlock) Game.Unlock(syn.name);} - } - - - - var pool=''; - var power=0; - - //define upgrades - //WARNING : do NOT add new upgrades in between, this breaks the saves. Add them at the end ! - var order=100;//this is used to set the order in which the items are listed - new Game.Upgrade('Reinforced index finger',loc("The mouse and cursors are twice as efficient.")+'prod prod',100,[0,0]);Game.MakeTiered(Game.last,1,0); - new Game.Upgrade('Carpal tunnel prevention cream',loc("The mouse and cursors are twice as efficient.")+'it... it hurts to click...',500,[0,1]);Game.MakeTiered(Game.last,2,0); - new Game.Upgrade('Ambidextrous',loc("The mouse and cursors are twice as efficient.")+'Look ma, both hands!',10000,[0,2]);Game.MakeTiered(Game.last,3,0); - new Game.Upgrade('Thousand fingers',loc("The mouse and cursors gain +%1 cookies for each non-cursor building owned.",0.1)+'clickity',100000,[0,13]);Game.MakeTiered(Game.last,4,0); - - new Game.Upgrade('Million fingers',getStrThousandFingersGain(5)+'clickityclickity',10000000,[0,14]);Game.MakeTiered(Game.last,5,0); - new Game.Upgrade('Billion fingers',getStrThousandFingersGain(10)+'clickityclickityclickity',100000000,[0,15]);Game.MakeTiered(Game.last,6,0); - new Game.Upgrade('Trillion fingers',getStrThousandFingersGain(20)+'clickityclickityclickityclickity',1000000000,[0,16]);Game.MakeTiered(Game.last,7,0); - - order=200; - Game.TieredUpgrade('Forwards from grandma','RE:RE:thought you\'d get a kick out of this ;))','Grandma',1); - Game.TieredUpgrade('Steel-plated rolling pins','Just what you kneaded.','Grandma',2); - Game.TieredUpgrade('Lubricated dentures','squish','Grandma',3); - - order=300; - Game.TieredUpgrade('Cheap hoes','Rake in the dough!','Farm',1); - Game.TieredUpgrade('Fertilizer','It\'s chocolate, I swear.','Farm',2); - Game.TieredUpgrade('Cookie trees','A relative of the breadfruit.','Farm',3); - - order=500; - Game.TieredUpgrade('Sturdier conveyor belts','You\'re going places.','Factory',1); - Game.TieredUpgrade('Child labor','Cheaper, healthier workforce.','Factory',2); - Game.TieredUpgrade('Sweatshop','Slackers will be terminated.','Factory',3); - - order=400; - Game.TieredUpgrade('Sugar gas','A pink, volatile gas, found in the depths of some chocolate caves.','Mine',1); - Game.TieredUpgrade('Megadrill','You\'re in deep.','Mine',2); - Game.TieredUpgrade('Ultradrill','Finally caved in?','Mine',3); - - order=600; - Game.TieredUpgrade('Vanilla nebulae','If you removed your space helmet, you could probably smell it!
(Note : don\'t do that.)
','Shipment',1); - Game.TieredUpgrade('Wormholes','By using these as shortcuts, your ships can travel much faster.','Shipment',2); - Game.TieredUpgrade('Frequent flyer','Come back soon!','Shipment',3); - - order=700; - Game.TieredUpgrade('Antimony','Actually worth a lot of mony.','Alchemy lab',1); - Game.TieredUpgrade('Essence of dough','Extracted through the 5 ancient steps of alchemical baking.','Alchemy lab',2); - Game.TieredUpgrade('True chocolate','The purest form of cacao.','Alchemy lab',3); - - order=800; - Game.TieredUpgrade('Ancient tablet','A strange slab of peanut brittle, holding an ancient cookie recipe. Neat!','Portal',1); - Game.TieredUpgrade('Insane oatling workers','ARISE, MY MINIONS!','Portal',2); - Game.TieredUpgrade('Soul bond','So I just sign up and get more cookies? Sure, whatever!','Portal',3); - - order=900; - Game.TieredUpgrade('Flux capacitors','Bake to the future.','Time machine',1); - Game.TieredUpgrade('Time paradox resolver','No more fooling around with your own grandmother!','Time machine',2); - Game.TieredUpgrade('Quantum conundrum','There is only one constant, and that is universal uncertainty.
Or is it?
','Time machine',3); - - order=20000; - new Game.Upgrade('Kitten helpers',strKittenDesc+'meow may I help you',9000000,Game.GetIcon('Kitten',1));Game.last.kitten=1;Game.MakeTiered(Game.last,1,18); - new Game.Upgrade('Kitten workers',strKittenDesc+'meow meow meow meow',9000000000,Game.GetIcon('Kitten',2));Game.last.kitten=1;Game.MakeTiered(Game.last,2,18); - - order=10000; - Game.NewUpgradeCookie({name:'Plain cookies',desc:'We all gotta start somewhere.',icon:[2,3],power: 1, price: 999999}); - Game.NewUpgradeCookie({name:'Sugar cookies',desc:'Tasty, if a little unimaginative.',icon:[7,3],power: 1, price: 999999*5}); - Game.NewUpgradeCookie({name:'Oatmeal raisin cookies',desc:'No raisin to hate these.',icon:[0,3],power: 1, price: 9999999}); - Game.NewUpgradeCookie({name:'Peanut butter cookies',desc:'Get yourself some jam cookies!',icon:[1,3],power: 2, price: 9999999*5}); - Game.NewUpgradeCookie({name:'Coconut cookies',desc:'Flaky, but not unreliable. Some people go crazy for these.',icon:[3,3],power: 2, price: 99999999}); - order=10001; - Game.NewUpgradeCookie({name:'White chocolate cookies',desc:'I know what you\'ll say. It\'s just cocoa butter! It\'s not real chocolate!
Oh please.',icon:[4,3],power:2, price: 99999999*5}); - order=10000; - Game.NewUpgradeCookie({name:'Macadamia nut cookies',desc:'They\'re macadamn delicious!',icon:[5,3],power: 2, price: 99999999}); - order=10002; - Game.NewUpgradeCookie({name:'Double-chip cookies',desc:'DOUBLE THE CHIPS
DOUBLE THE TASTY
(double the calories)',icon:[6,3],power:2, price: 999999999*5}); - Game.NewUpgradeCookie({name:'White chocolate macadamia nut cookies',desc:'Orteil\'s favorite.',icon:[8,3],power: 2, price: 9999999999}); - Game.NewUpgradeCookie({name:'All-chocolate cookies',desc:'CHOCOVERDOSE.',icon:[9,3],power: 2, price: 9999999999*5}); - - order=100; - new Game.Upgrade('Quadrillion fingers',getStrThousandFingersGain(20)+'clickityclickityclickityclickityclick',10000000000,[0,17]);Game.MakeTiered(Game.last,8,0); - - order=200;Game.TieredUpgrade('Prune juice','Gets me going.','Grandma',4); - order=300;Game.TieredUpgrade('Genetically-modified cookies','All-natural mutations.','Farm',4); - order=500;Game.TieredUpgrade('Radium reactors','Gives your cookies a healthy glow.','Factory',4); - order=400;Game.TieredUpgrade('Ultimadrill','Pierce the heavens, etc.','Mine',4); - order=600;Game.TieredUpgrade('Warp drive','To boldly bake.','Shipment',4); - order=700;Game.TieredUpgrade('Ambrosia','Adding this to the cookie mix is sure to make them even more addictive!
Perhaps dangerously so.
Let\'s hope you can keep selling these legally.
','Alchemy lab',4); - order=800;Game.TieredUpgrade('Sanity dance','We can change if we want to.
We can leave our brains behind.
','Portal',4); - order=900;Game.TieredUpgrade('Causality enforcer','What happened, happened.','Time machine',4); - - order=5000; - new Game.Upgrade('Lucky day',loc("Golden cookies appear twice as often and stay twice as long.")+'Oh hey, a four-leaf penny!',777777777,[27,6]); - new Game.Upgrade('Serendipity',loc("Golden cookies appear twice as often and stay twice as long.")+'What joy! Seven horseshoes!',77777777777,[27,6]); - - order=20000; - new Game.Upgrade('Kitten engineers',strKittenDesc+'meow meow meow meow, sir',90000000000000,Game.GetIcon('Kitten',3));Game.last.kitten=1;Game.MakeTiered(Game.last,3,18); - - order=10020; - Game.NewUpgradeCookie({name:'Dark chocolate-coated cookies',desc:'These absorb light so well you almost need to squint to see them.',icon:[10,3],power: 5, price: 99999999999}); - Game.NewUpgradeCookie({name:'White chocolate-coated cookies',desc:'These dazzling cookies absolutely glisten with flavor.',icon:[11,3],power: 5, price: 99999999999}); - - Game.GrandmaSynergies=[]; - Game.GrandmaSynergy=function(name,desc,building) - { - var building=Game.Objects[building]; - var grandmaNumber=loc("%1 grandma",LBeautify(building.id-1)); - desc=loc("%1 are twice as efficient.",cap(Game.Objects['Grandma'].plural))+' '+loc("%1 gain +%2% CpS per %3.",[cap(building.plural),1,grandmaNumber])+''+desc+''; - - var upgrade=new Game.Upgrade(name,desc,building.basePrice*Game.Tiers[2].price,[10,9],function(){Game.Objects['Grandma'].redraw();}); - building.grandma=upgrade; - upgrade.buildingTie=building; - Game.GrandmaSynergies.push(upgrade.name); - return upgrade; - } - - order=250; - Game.GrandmaSynergy('Farmer grandmas','A nice farmer to grow more cookies.','Farm'); - Game.GrandmaSynergy('Miner grandmas','A nice miner to dig more cookies.','Mine'); - Game.GrandmaSynergy('Worker grandmas','A nice worker to manufacture more cookies.','Factory'); - Game.GrandmaSynergy('Cosmic grandmas','A nice thing to... uh... cookies.','Shipment'); - Game.GrandmaSynergy('Transmuted grandmas','A nice golden grandma to convert into more cookies.','Alchemy lab'); - Game.GrandmaSynergy('Altered grandmas','a NiCe GrAnDmA tO bA##########','Portal'); - Game.GrandmaSynergy('Grandmas\' grandmas','A nice grandma\'s nice grandma to bake double the cookies.','Time machine'); - - order=14000; - Game.baseResearchTime=Game.fps*60*30; - Game.SetResearch=function(what,time) - { - if (Game.Upgrades[what] && !Game.Has(what)) - { - Game.researchT=Game.baseResearchTime; - if (Game.Has('Persistent memory')) Game.researchT=Math.ceil(Game.baseResearchTime/10); - if (Game.Has('Ultrascience')) Game.researchT=Game.fps*5; - Game.nextResearch=Game.Upgrades[what].id; - Game.Notify(loc("Research has begun"),loc("Your bingo center/research facility is conducting experiments."),[9,0]); - } - } - - new Game.Upgrade('Bingo center/Research facility',loc("Grandma-operated science lab and leisure club.
Grandmas are 4 times as efficient.
Regularly unlocks new upgrades.")+'What could possibly keep those grandmothers in check?...
Bingo.
',1000000000000000,[11,9],function(){Game.SetResearch('Specialized chocolate chips');});Game.last.noPerm=1; - - order=15000; - new Game.Upgrade('Specialized chocolate chips',getStrCookieProductionMultiplierPlus(1)+'Computer-designed chocolate chips. Computer chips, if you will.',1000000000000000,[0,9],function(){Game.SetResearch('Designer cocoa beans');});Game.last.pool='tech'; - new Game.Upgrade('Designer cocoa beans',getStrCookieProductionMultiplierPlus(2)+'Now more aerodynamic than ever!',2000000000000000,[1,9],function(){Game.SetResearch('Ritual rolling pins');});Game.last.pool='tech'; - new Game.Upgrade('Ritual rolling pins',loc("%1 are twice as efficient.",cap(Game.Objects['Grandma'].plural))+'The result of years of scientific research!',4000000000000000,[2,9],function(){Game.SetResearch('Underworld ovens');});Game.last.pool='tech'; - new Game.Upgrade('Underworld ovens',getStrCookieProductionMultiplierPlus(3)+'Powered by science, of course!',8000000000000000,[3,9],function(){Game.SetResearch('One mind');});Game.last.pool='tech'; - new Game.Upgrade('One mind',loc("Each %1 gains +%2 base CpS per %3.",[loc("grandma"),'0.02',loc("grandma")])+'
'+loc("Note: the grandmothers are growing restless. Do not encourage them.")+'
We are one. We are many.',16000000000000000,[4,9],function(){Game.elderWrath=1;Game.SetResearch('Exotic nuts');Game.storeToRefresh=1;});Game.last.pool='tech'; - //Game.last.clickFunction=function(){return confirm('Warning : purchasing this will have unexpected, and potentially undesirable results!\nIt\'s all downhill from here. You have been warned!\nPurchase anyway?');}; - Game.RequiresConfirmation(Game.last,'
'+loc("Warning: purchasing this will have unexpected, and potentially undesirable results!
It's all downhill from here. You have been warned!

Purchase anyway?")+'
'); - new Game.Upgrade('Exotic nuts',getStrCookieProductionMultiplierPlus(4)+'You\'ll go crazy over these!',32000000000000000,[5,9],function(){Game.SetResearch('Communal brainsweep');});Game.last.pool='tech'; - new Game.Upgrade('Communal brainsweep',(EN?'Each grandma gains another +0.02 base CpS per grandma.':loc("Each %1 gains +%2 base CpS per %3.",[loc("grandma"),'0.02',loc("grandma")]))+'
'+loc("Note: proceeding any further in scientific research may have unexpected results. You have been warned.")+'
We fuse. We merge. We grow.',64000000000000000,[6,9],function(){Game.elderWrath=2;Game.SetResearch('Arcane sugar');Game.storeToRefresh=1;});Game.last.pool='tech'; - new Game.Upgrade('Arcane sugar',getStrCookieProductionMultiplierPlus(5)+'Tastes like insects, ligaments, and molasses.',128000000000000000,[7,9],function(){Game.SetResearch('Elder Pact');});Game.last.pool='tech'; - new Game.Upgrade('Elder Pact',loc("Each %1 gains +%2 base CpS per %3.",[loc("grandma"),'0.05',loc("portal")])+'
'+loc("Note: this is a bad idea.")+'
squirm crawl slither writhe
today we rise
',256000000000000000,[8,9],function(){Game.elderWrath=3;Game.storeToRefresh=1;});Game.last.pool='tech'; - new Game.Upgrade('Elder Pledge',loc("Contains the wrath of the elders, at least for a while.")+'This is a simple ritual involving anti-aging cream, cookie batter mixed in the moonlight, and a live chicken.',1,[9,9],function() - { - Game.elderWrath=0; - Game.pledges++; - Game.pledgeT=Game.getPledgeDuration(); - Game.Unlock('Elder Covenant'); - Game.CollectWrinklers(); - Game.storeToRefresh=1; - }); - Game.getPledgeDuration=function(){return Game.fps*60*(Game.Has('Sacrificial rolling pins')?60:30);} - Game.last.pool='toggle'; - Game.last.displayFuncWhenOwned=function(){return '
'+loc("Time remaining until pledge runs out:")+'
'+Game.sayTime(Game.pledgeT,-1)+'
';} - Game.last.timerDisplay=function(){if (!Game.Upgrades['Elder Pledge'].bought) return -1; else return 1-Game.pledgeT/Game.getPledgeDuration();} - Game.last.priceFunc=function(){return Math.pow(8,Math.min(Game.pledges+2,14));} - - Game.last.descFunc=function(){ - return '
'+(Game.pledges==0?loc("You haven't pledged to the elders yet."):loc("You've pledged to the elders %1 times.",LBeautify(Game.pledges)))+'
'+this.ddesc; - }; - - - order=150; - new Game.Upgrade('Plastic mouse',getStrClickingGains(1)+'Slightly squeaky.',50000,[11,0]);Game.MakeTiered(Game.last,1,11); - new Game.Upgrade('Iron mouse',getStrClickingGains(1)+'Click like it\'s 1349!',5000000,[11,1]);Game.MakeTiered(Game.last,2,11); - new Game.Upgrade('Titanium mouse',getStrClickingGains(1)+'Heavy, but powerful.',500000000,[11,2]);Game.MakeTiered(Game.last,3,11); - new Game.Upgrade('Adamantium mouse',getStrClickingGains(1)+'You could cut diamond with these.',50000000000,[11,13]);Game.MakeTiered(Game.last,4,11); - - order=40000; - new Game.Upgrade('Ultrascience',loc("Research takes only 5 seconds.")+'YEAH, SCIENCE!',7,[9,2]);//debug purposes only - Game.last.pool='debug'; - - order=10020; - Game.NewUpgradeCookie({name:'Eclipse cookies',desc:'Look to the cookie.',icon:[0,4],power: 2, price: 99999999999*5}); - Game.NewUpgradeCookie({name:'Zebra cookies',desc:'...',icon:[1,4],power: 2, price: 999999999999}); - - order=100; - new Game.Upgrade('Quintillion fingers',getStrThousandFingersGain(20)+'man, just go click click click click click, it\'s real easy, man.',10000000000000,[0,18]);Game.MakeTiered(Game.last,9,0); - - order=40000; - new Game.Upgrade('Gold hoard',loc("Golden cookies appear really often.")+'That\'s entirely too many.',7,[10,14]);//debug purposes only - Game.last.pool='debug'; - - order=15000; - new Game.Upgrade('Elder Covenant',loc("Puts a permanent end to the elders' wrath, at the cost of %1% of your CpS.",5)+'This is a complicated ritual involving silly, inconsequential trivialities such as cursed laxatives, century-old cacao, and an infant.
Don\'t question it.
',66666666666666,[8,9],function() - { - Game.pledgeT=0; - Game.Lock('Revoke Elder Covenant'); - Game.Unlock('Revoke Elder Covenant'); - Game.Lock('Elder Pledge'); - Game.Win('Elder calm'); - Game.CollectWrinklers(); - Game.storeToRefresh=1; - }); - Game.last.pool='toggle'; - - new Game.Upgrade('Revoke Elder Covenant',loc("You will get %1% of your CpS back, but the grandmatriarchs will return.",5)+'we
rise
again
',6666666666,[8,9],function() - { - Game.Lock('Elder Covenant'); - Game.Unlock('Elder Covenant'); - }); - Game.last.pool='toggle'; - - order=5000; - new Game.Upgrade('Get lucky',loc("Golden cookie effects last twice as long.")+'You\'ve been up all night, haven\'t you?',77777777777777,[27,6]); - - order=15000; - new Game.Upgrade('Sacrificial rolling pins',loc("Elder pledges last twice as long.")+'These are mostly just for spreading the anti-aging cream.
(And accessorily, shortening the chicken\'s suffering.)
',2888888888888,[2,9]); - - order=10020; - Game.NewUpgradeCookie({name:'Snickerdoodles',desc:'True to their name.',icon:[2,4],power: 2, price: 999999999999*5}); - Game.NewUpgradeCookie({name:'Stroopwafels',desc:'If it ain\'t dutch, it ain\'t much.',icon:[3,4],power: 2, price: 9999999999999}); - Game.NewUpgradeCookie({name:'Macaroons',desc:'Not to be confused with macarons.
These have coconut, okay?',icon:[4,4],power: 2, price: 9999999999999*5}); - - order=40000; - new Game.Upgrade('Neuromancy',loc("Can toggle upgrades on and off at will in the stats menu.")+'Can also come in handy to unsee things that can\'t be unseen.',7,[4,9]);//debug purposes only - Game.last.pool='debug'; - - order=10020; - Game.NewUpgradeCookie({name:'Empire biscuits',desc:'For your growing cookie empire, of course!',icon:[5,4],power: 2, price: 99999999999999}); - order=10031; - Game.NewUpgradeCookie({name:'British tea biscuits',desc:'Quite.',icon:[6,4],require:'Tin of british tea biscuits',power: 2, price: 99999999999999}); - Game.NewUpgradeCookie({name:'Chocolate british tea biscuits',desc:'Yes, quite.',icon:[7,4],require:Game.last.name,power: 2, price: 99999999999999}); - Game.NewUpgradeCookie({name:'Round british tea biscuits',desc:'Yes, quite riveting.',icon:[8,4],require:Game.last.name,power: 2, price: 99999999999999}); - Game.NewUpgradeCookie({name:'Round chocolate british tea biscuits',desc:'Yes, quite riveting indeed.',icon:[9,4],require:Game.last.name,power: 2, price: 99999999999999}); - Game.NewUpgradeCookie({name:'Round british tea biscuits with heart motif',desc:'Yes, quite riveting indeed, old chap.',icon:[10,4],require:Game.last.name,power: 2, price: 99999999999999}); - Game.NewUpgradeCookie({name:'Round chocolate british tea biscuits with heart motif',desc:'I like cookies.',icon:[11,4],require:Game.last.name,power: 2, price: 99999999999999}); - - order=1000; - Game.TieredUpgrade('Sugar bosons','Sweet firm bosons.','Antimatter condenser',1); - Game.TieredUpgrade('String theory','Reveals new insight about the true meaning of baking cookies (and, as a bonus, the structure of the universe).','Antimatter condenser',2); - Game.TieredUpgrade('Large macaron collider','How singular!','Antimatter condenser',3); - Game.TieredUpgrade('Big bang bake','And that\'s how it all began.','Antimatter condenser',4); - - order=255; - Game.GrandmaSynergy('Antigrandmas','A mean antigrandma to vomit more cookies.','Antimatter condenser'); - - order=10020; - Game.NewUpgradeCookie({name:'Madeleines',desc:'Unforgettable!',icon:[12,3],power: 2, price: 99999999999999*5}); - Game.NewUpgradeCookie({name:'Palmiers',desc:'Palmier than you!',icon:[13,3],power: 2, price: 99999999999999*5}); - Game.NewUpgradeCookie({name:'Palets',desc:'You could probably play hockey with these.
I mean, you\'re welcome to try.',icon:[12,4],power: 2, price: 999999999999999}); - Game.NewUpgradeCookie({name:'Sablés',desc:'The name implies they\'re made of sand. But you know better, don\'t you?',icon:[13,4],power: 2, price: 999999999999999}); - - order=20000; - new Game.Upgrade('Kitten overseers',strKittenDesc+'my purrpose is to serve you, sir',90000000000000000,Game.GetIcon('Kitten',4));Game.last.kitten=1;Game.MakeTiered(Game.last,4,18); - - - order=100; - new Game.Upgrade('Sextillion fingers',getStrThousandFingersGain(20)+'sometimes
things just
click
',10000000000000000,[0,19]);Game.MakeTiered(Game.last,10,0); - - order=200;Game.TieredUpgrade('Double-thick glasses','Oh... so THAT\'s what I\'ve been baking.','Grandma',5); - order=300;Game.TieredUpgrade('Gingerbread scarecrows','Staring at your crops with mischievous glee.','Farm',5); - order=500;Game.TieredUpgrade('Recombobulators','A major part of cookie recombobulation.','Factory',5); - order=400;Game.TieredUpgrade('H-bomb mining','Questionable efficiency, but spectacular nonetheless.','Mine',5); - order=600;Game.TieredUpgrade('Chocolate monoliths','My god. It\'s full of chocolate bars.','Shipment',5); - order=700;Game.TieredUpgrade('Aqua crustulae','Careful with the dosing - one drop too much and you get muffins.
And nobody likes muffins.
','Alchemy lab',5); - order=800;Game.TieredUpgrade('Brane transplant','This refers to the practice of merging higher dimensional universes, or "branes", with our own, in order to facilitate transit (and harvesting of precious cookie dough).','Portal',5); - order=900;Game.TieredUpgrade('Yestermorrow comparators','Fortnights into millennia.','Time machine',5); - order=1000;Game.TieredUpgrade('Reverse cyclotrons','These can uncollision particles and unspin atoms. For... uh... better flavor, and stuff.','Antimatter condenser',5); - - order=150; - new Game.Upgrade('Unobtainium mouse',getStrClickingGains(1)+'These nice mice should suffice.',5000000000000,[11,14]);Game.MakeTiered(Game.last,5,11); - - order=10030; - Game.NewUpgradeCookie({name:'Caramoas',desc:'Yeah. That\'s got a nice ring to it.',icon:[14,4],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); - Game.NewUpgradeCookie({name:'Sagalongs',desc:'Grandma\'s favorite?',icon:[15,3],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); - Game.NewUpgradeCookie({name:'Shortfoils',desc:'Foiled again!',icon:[15,4],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); - Game.NewUpgradeCookie({name:'Win mints',desc:'They\'re the luckiest cookies you\'ve ever tasted!',icon:[14,3],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); - - order=40000; - new Game.Upgrade('Perfect idling',loc("You keep producing cookies even while the game is closed.")+'It\'s the most beautiful thing I\'ve ever seen.',7,[10,0]);//debug purposes only - Game.last.pool='debug'; - - order=10030; - Game.NewUpgradeCookie({name:'Fig gluttons',desc:'Got it all figured out.',icon:[17,4],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); - Game.NewUpgradeCookie({name:'Loreols',desc:'Because, uh... they\'re worth it?',icon:[16,3],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); - Game.NewUpgradeCookie({name:'Jaffa cakes',desc:'If you want to bake a cookie from scratch, you must first build a factory.',icon:[17,3],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); - Game.NewUpgradeCookie({name:'Grease\'s cups',desc:'Extra-greasy peanut butter.',icon:[16,4],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); - - order=30000; - new Game.Upgrade('Heavenly chip secret',loc("Unlocks %1% of the potential of your prestige level.",5)+'Grants the knowledge of heavenly chips, and how to use them to make baking more efficient.
It\'s a secret to everyone.
',11,[19,7]);Game.last.noPerm=1; - new Game.Upgrade('Heavenly cookie stand',loc("Unlocks %1% of the potential of your prestige level.",25)+'Don\'t forget to visit the heavenly lemonade stand afterwards. When afterlife gives you lemons...',1111,[18,7]);Game.last.noPerm=1; - new Game.Upgrade('Heavenly bakery',loc("Unlocks %1% of the potential of your prestige level.",50)+'Also sells godly cakes and divine pastries. The pretzels aren\'t too bad either.',111111,[17,7]);Game.last.noPerm=1; - new Game.Upgrade('Heavenly confectionery',loc("Unlocks %1% of the potential of your prestige level.",75)+'They say angel bakers work there. They take angel lunch breaks and sometimes go on angel strikes.',11111111,[16,7]);Game.last.noPerm=1; - new Game.Upgrade('Heavenly key',loc("Unlocks %1% of the potential of your prestige level.",100)+'This is the key to the pearly (and tasty) gates of pastry heaven, granting you access to your entire stockpile of heavenly chips for baking purposes.
May you use them wisely.
',1111111111,[15,7]);Game.last.noPerm=1; - - order=10100; - Game.NewUpgradeCookie({name:'Skull cookies',desc:'Wanna know something spooky? You\'ve got one of these inside your head RIGHT NOW.',locked:1,icon:[12,8],power: 2, price: 444444444444}); - Game.NewUpgradeCookie({name:'Ghost cookies',desc:'They\'re something strange, but they look pretty good!',locked:1,icon:[13,8],power: 2, price: 444444444444}); - Game.NewUpgradeCookie({name:'Bat cookies',desc:'The cookies this town deserves.',locked:1,icon:[14,8],power: 2, price: 444444444444}); - Game.NewUpgradeCookie({name:'Slime cookies',desc:'The incredible melting cookies!',locked:1,icon:[15,8],power: 2, price: 444444444444}); - Game.NewUpgradeCookie({name:'Pumpkin cookies',desc:'Not even pumpkin-flavored. Tastes like glazing. Yeugh.',locked:1,icon:[16,8],power: 2, price: 444444444444}); - Game.NewUpgradeCookie({name:'Eyeball cookies',desc:'When you stare into the cookie, the cookie stares back at you.',locked:1,icon:[17,8],power: 2, price: 444444444444}); - Game.NewUpgradeCookie({name:'Spider cookies',desc:'You found the recipe on the web. They do whatever a cookie can.',locked:1,icon:[18,8],power: 2, price: 444444444444}); - - Game.halloweenDrops=['Skull cookies','Ghost cookies','Bat cookies','Slime cookies','Pumpkin cookies','Eyeball cookies','Spider cookies']; - - Game.GetHowManyHalloweenDrops=function() - { - var num=0; - for (var i in Game.halloweenDrops) {if (Game.Has(Game.halloweenDrops[i])) num++;} - return num; - } - /*for (var i in Game.halloweenDrops) - { - Game.Upgrades[Game.halloweenDrops[i]].descFunc=function(){return '
You currently own '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.
'+this.ddesc;}; - }*/ - - order=0; - new Game.Upgrade('Persistent memory',loc("Subsequent research will be %1 times as fast.",10)+'It\'s all making sense!
Again!
',500,[9,2]);Game.last.pool='prestige'; - - order=40000; - new Game.Upgrade('Wrinkler doormat',loc("Wrinklers spawn much more frequently.")+'You\'re such a pushover.',7,[19,8]);//debug purposes only - Game.last.pool='debug'; - - order=10200; - Game.NewUpgradeCookie({name:'Christmas tree biscuits',desc:'Whose pine is it anyway?',locked:1,icon:[12,10],power:2,price: 252525252525}); - Game.NewUpgradeCookie({name:'Snowflake biscuits',desc:'Mass-produced to be unique in every way.',locked:1,icon:[13,10],power:2,price: 252525252525}); - Game.NewUpgradeCookie({name:'Snowman biscuits',desc:'It\'s frosted. Doubly so.',locked:1,icon:[14,10],power:2,price: 252525252525}); - Game.NewUpgradeCookie({name:'Holly biscuits',desc:'You don\'t smooch under these ones. That would be the mistletoe (which, botanically, is a smellier variant of the mistlefinger).',locked:1,icon:[15,10],power:2,price: 252525252525}); - Game.NewUpgradeCookie({name:'Candy cane biscuits',desc:'It\'s two treats in one!
(Further inspection reveals the frosting does not actually taste like peppermint, but like mundane sugary frosting.)',locked:1,icon:[16,10],power:2,price: 252525252525}); - Game.NewUpgradeCookie({name:'Bell biscuits',desc:'What do these even have to do with christmas? Who cares, ring them in!',locked:1,icon:[17,10],power:2,price: 252525252525}); - Game.NewUpgradeCookie({name:'Present biscuits',desc:'The prequel to future biscuits. Watch out!',locked:1,icon:[18,10],power:2,price: 252525252525}); - - order=10020; - Game.NewUpgradeCookie({name:'Gingerbread men',desc:'You like to bite the legs off first, right? How about tearing off the arms? You sick monster.',icon:[18,4],power: 2,price: 9999999999999999}); - Game.NewUpgradeCookie({name:'Gingerbread trees',desc:'Evergreens in pastry form. Yule be surprised what you can come up with.',icon:[18,3],power: 2,price: 9999999999999999}); - - order=25000; - new Game.Upgrade('A festive hat',''+loc("Unlocks... something.")+'Not a creature was stirring, not even a mouse.',25,[19,9],function() - { - var drop=choose(Game.santaDrops); - Game.Unlock(drop); - Game.Notify(loc("In the festive hat, you find..."),loc("a festive test tube
and %1.",drop),Game.Upgrades[drop].icon); - }); - - new Game.Upgrade('Increased merriness',getStrCookieProductionMultiplierPlus(15)+'
'+loc("Cost scales with Santa level.")+'It turns out that the key to increased merriness, strangely enough, happens to be a good campfire and some s\'mores.
You know what they say, after all; the s\'more, the merrier.
',2525,[17,9]); - new Game.Upgrade('Improved jolliness',getStrCookieProductionMultiplierPlus(15)+'
'+loc("Cost scales with Santa level.")+'A nice wobbly belly goes a long way.
You jolly?
',2525,[17,9]); - new Game.Upgrade('A lump of coal',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with Santa level.")+'Some of the world\'s worst stocking stuffing.
I guess you could try starting your own little industrial revolution, or something?...
',2525,[13,9]); - new Game.Upgrade('An itchy sweater',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with Santa level.")+'You don\'t know what\'s worse : the embarrassingly quaint "elf on reindeer" motif, or the fact that wearing it makes you feel like you\'re wrapped in a dead sasquatch.',2525,[14,9]); - new Game.Upgrade('Reindeer baking grounds',loc("Reindeer appear twice as frequently.")+'
'+loc("Cost scales with Santa level.")+'Male reindeer are from Mars; female reindeer are from venison.',2525,[12,9]); - new Game.Upgrade('Weighted sleighs',loc("Reindeer are twice as slow.")+'
'+loc("Cost scales with Santa level.")+'Hope it was worth the weight.
(Something something forced into cervidude)
',2525,[12,9]); - new Game.Upgrade('Ho ho ho-flavored frosting',loc("Reindeer give twice as much.")+'
'+loc("Cost scales with Santa level.")+'It\'s time to up the antler.',2525,[12,9]); - new Game.Upgrade('Season savings',loc("All buildings are %1% cheaper.",1)+'
'+loc("Cost scales with Santa level.")+'By Santa\'s beard, what savings!
But who will save us?
',2525,[16,9],function(){Game.storeToRefresh=1;}); - new Game.Upgrade('Toy workshop',loc("All upgrades are %1% cheaper.",5)+'
'+loc("Cost scales with Santa level.")+'Watch yours-elf around elvesdroppers who might steal our production secrets.
Or elven worse!
',2525,[16,9],function(){Game.upgradesToRebuild=1;}); - new Game.Upgrade('Naughty list',loc("%1 are twice as efficient.",cap(loc("grandmas")))+'
'+loc("Cost scales with Santa level.")+'This list contains every unholy deed perpetuated by grandmakind.
He won\'t be checking this one twice.
Once. Once is enough.
',2525,[15,9]); - new Game.Upgrade('Santa\'s bottomless bag',loc("Random drops are %1% more common.",10)+'
'+loc("Cost scales with Santa level.")+'This is one bottom you can\'t check out.',2525,[19,9]); - new Game.Upgrade('Santa\'s helpers',loc("Clicking is %1% more powerful.",10)+'
'+loc("Cost scales with Santa level.")+'Some choose to help hamburger; some choose to help you.
To each their own, I guess.
',2525,[19,9]); - new Game.Upgrade('Santa\'s legacy',loc("Cookie production multiplier +%1% per Santa's levels.",3)+'
'+loc("Cost scales with Santa level.")+'In the north pole, you gotta get the elves first. Then when you get the elves, you start making the toys. Then when you get the toys... then you get the cookies.',2525,[19,9]); - new Game.Upgrade('Santa\'s milk and cookies',loc("Milk is %1% more powerful.",5)+'
'+loc("Cost scales with Santa level.")+'Part of Santa\'s dreadfully unbalanced diet.',2525,[19,9]); - - order=40000; - new Game.Upgrade('Reindeer season',loc("Reindeer spawn much more frequently.")+'Go, Cheater! Go, Hacker and Faker!',7,[12,9]);//debug purposes only - Game.last.pool='debug'; - - order=25000; - new Game.Upgrade('Santa\'s dominion',getStrCookieProductionMultiplierPlus(20)+'
'+loc("All buildings are %1% cheaper.",1)+'
'+loc("All upgrades are %1% cheaper.",2)+'My name is Claus, king of kings;
Look on my toys, ye Mighty, and despair!
',2525252525252525,[19,10],function(){Game.storeToRefresh=1;}); - - order=10300; - var heartPower=function(){ - var pow=2; - if (Game.Has('Starlove')) pow=3; - if (Game.hasGod) - { - var godLvl=Game.hasGod('seasons'); - if (godLvl==1) pow*=1.3; - else if (godLvl==2) pow*=1.2; - else if (godLvl==3) pow*=1.1; - } - return pow; - }; - Game.NewUpgradeCookie({name:'Pure heart biscuits',desc:'Melty white chocolate
that says "I *like* like you".',season:'valentines',icon:[19,3], power:heartPower,price: 1000000}); - Game.NewUpgradeCookie({name:'Ardent heart biscuits',desc:'A red hot cherry biscuit that will nudge the target of your affection in interesting directions.',require:Game.last.name,season:'valentines',icon:[20,3], power:heartPower,price: 1000000000}); - Game.NewUpgradeCookie({name:'Sour heart biscuits',desc:'A bitter lime biscuit for the lonely and the heart-broken.',require:Game.last.name,season:'valentines',icon:[20,4], power:heartPower,price: 1000000000000}); - Game.NewUpgradeCookie({name:'Weeping heart biscuits',desc:'An ice-cold blueberry biscuit, symbol of a mending heart.',require:Game.last.name,season:'valentines',icon:[21,3], power:heartPower,price: 1000000000000000}); - Game.NewUpgradeCookie({name:'Golden heart biscuits',desc:'A beautiful biscuit to symbolize kindness, true love, and sincerity.',require:Game.last.name,season:'valentines',icon:[21,4], power:heartPower,price: 1000000000000000000}); - Game.NewUpgradeCookie({name:'Eternal heart biscuits',desc:'Silver icing for a very special someone you\'ve liked for a long, long time.',require:Game.last.name,season:'valentines',icon:[19,4], power:heartPower,price: 1000000000000000000000}); - - Game.heartDrops=['Pure heart biscuits','Ardent heart biscuits','Sour heart biscuits','Weeping heart biscuits','Golden heart biscuits','Eternal heart biscuits','Prism heart biscuits']; - - Game.GetHowManyHeartDrops=function() - { - var num=0; - for (var i in Game.heartDrops) {if (Game.Has(Game.heartDrops[i])) num++;} - return num; - } - - order=1100; - Game.TieredUpgrade('Gem polish','Get rid of the grime and let more light in.
Truly, truly outrageous.
','Prism',1); - Game.TieredUpgrade('9th color','Delve into untouched optical depths where even the mantis shrimp hasn\'t set an eye!','Prism',2); - Game.TieredUpgrade('Chocolate light','Bask into its cocoalescence.
(Warning : may cause various interesting albeit deadly skin conditions.)
','Prism',3); - Game.TieredUpgrade('Grainbow','Remember the different grains using the handy Roy G. Biv mnemonic : R is for rice, O is for oats... uh, B for barley?...','Prism',4); - Game.TieredUpgrade('Pure cosmic light','Your prisms now receive pristine, unadulterated photons from the other end of the universe.','Prism',5); - - order=255; - Game.GrandmaSynergy('Rainbow grandmas','A luminous grandma to sparkle into cookies.','Prism'); - - order=24000; - Game.seasonTriggerBasePrice=1000000000;//1111111111; - new Game.Upgrade('Season switcher',loc("Allows you to trigger seasonal events at will, for a price.")+'There will always be time.',1111,[16,6],function(){for (var i in Game.seasons){Game.Unlock(Game.seasons[i].trigger);}});Game.last.pool='prestige';Game.last.parents=['Heralds']; - new Game.Upgrade('Festive biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Christmas"))+'\'Twas the night before Christmas- or was it?',Game.seasonTriggerBasePrice,[12,10]);Game.last.season='christmas';Game.last.pool='toggle'; - new Game.Upgrade('Ghostly biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Halloween"))+'spooky scary skeletons
will wake you with a boo
',Game.seasonTriggerBasePrice,[13,8]);Game.last.season='halloween';Game.last.pool='toggle'; - new Game.Upgrade('Lovesick biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Valentine's day"))+'Romance never goes out of fashion.',Game.seasonTriggerBasePrice,[20,3]);Game.last.season='valentines';Game.last.pool='toggle'; - new Game.Upgrade('Fool\'s biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Business day"))+'Business. Serious business. This is absolutely all of your business.',Game.seasonTriggerBasePrice,[17,6]);Game.last.season='fools';Game.last.pool='toggle'; - - - order=40000; - new Game.Upgrade('Eternal seasons',loc("Seasons now last forever.")+'Season to taste.',7,[16,6],function(){for (var i in Game.seasons){Game.Unlock(Game.seasons[i].trigger);}});//debug purposes only - Game.last.pool='debug'; - - - order=20000; - new Game.Upgrade('Kitten managers',strKittenDesc+'that\'s not gonna paws any problem, sir',900000000000000000000,Game.GetIcon('Kitten',5));Game.last.kitten=1;Game.MakeTiered(Game.last,5,18); - - order=100; - new Game.Upgrade('Septillion fingers',getStrThousandFingersGain(20)+'[cursory flavor text]',10000000000000000000,[12,20]);Game.MakeTiered(Game.last,11,0); - new Game.Upgrade('Octillion fingers',getStrThousandFingersGain(20)+'Turns out you can quite put your finger on it.',10000000000000000000000,[12,19]);Game.MakeTiered(Game.last,12,0); - - order=150;new Game.Upgrade('Eludium mouse',getStrClickingGains(1)+'I rodent do that if I were you.',500000000000000,[11,15]);Game.MakeTiered(Game.last,6,11); - new Game.Upgrade('Wishalloy mouse',getStrClickingGains(1)+'Clicking is fine and dandy, but don\'t smash your mouse over it. Get your game on. Go play.',50000000000000000,[11,16]);Game.MakeTiered(Game.last,7,11); - order=200;Game.TieredUpgrade('Aging agents','Counter-intuitively, grandmas have the uncanny ability to become more powerful the older they get.','Grandma',6); - order=300;Game.TieredUpgrade('Pulsar sprinklers','There\'s no such thing as over-watering. The moistest is the bestest.','Farm',6); - order=500;Game.TieredUpgrade('Deep-bake process','A patented process increasing cookie yield two-fold for the same amount of ingredients. Don\'t ask how, don\'t take pictures, and be sure to wear your protective suit.','Factory',6); - order=400;Game.TieredUpgrade('Coreforge','You\'ve finally dug a tunnel down to the Earth\'s core. It\'s pretty warm down here.','Mine',6); - order=600;Game.TieredUpgrade('Generation ship','Built to last, this humongous spacecraft will surely deliver your cookies to the deep ends of space, one day.','Shipment',6); - order=700;Game.TieredUpgrade('Origin crucible','Built from the rarest of earths and located at the very deepest of the largest mountain, this legendary crucible is said to retain properties from the big-bang itself.','Alchemy lab',6); - order=800;Game.TieredUpgrade('Deity-sized portals','It\'s almost like, say, an elder god could fit through this thing now. Hypothetically.','Portal',6); - order=900;Game.TieredUpgrade('Far future enactment','The far future enactment authorizes you to delve deep into the future - where civilization has fallen and risen again, and cookies are plentiful.','Time machine',6); - order=1000;Game.TieredUpgrade('Nanocosmics','The theory of nanocosmics posits that each subatomic particle is in fact its own self-contained universe, holding unfathomable amounts of energy.
This somehow stacks with the nested universe theory, because physics.
','Antimatter condenser',6); - order=1100; - Game.TieredUpgrade('Glow-in-the-dark','Your prisms now glow in the dark, effectively doubling their output!','Prism',6); - - order=10032; - Game.NewUpgradeCookie({name:'Rose macarons',desc:'Although an odd flavor, these pastries recently rose in popularity.',icon:[22,3],require:'Box of macarons', power:3,price: 9999}); - Game.NewUpgradeCookie({name:'Lemon macarons',desc:'Tastefully sour, delightful treats.',icon:[23,3],require:'Box of macarons', power:3,price: 9999999}); - Game.NewUpgradeCookie({name:'Chocolate macarons',desc:'They\'re like tiny sugary burgers!',icon:[24,3],require:'Box of macarons', power:3,price: 9999999999}); - Game.NewUpgradeCookie({name:'Pistachio macarons',desc:'Pistachio shells now removed after multiple complaints.',icon:[22,4],require:'Box of macarons', power:3,price: 9999999999999}); - Game.NewUpgradeCookie({name:'Hazelnut macarons',desc:'These go especially well with coffee.',icon:[23,4],require:'Box of macarons', power:3,price: 9999999999999999}); - Game.NewUpgradeCookie({name:'Violet macarons',desc:'It\'s like spraying perfume into your mouth!',icon:[24,4],require:'Box of macarons', power:3,price: 9999999999999999999}); - - order=40000; - new Game.Upgrade('Magic shenanigans',loc("Cookie production multiplied by 1,000.")+'It\'s magic. I ain\'t gotta explain sh
t.
',7,[17,5]);//debug purposes only - Game.last.pool='debug'; - - - order=24000; - new Game.Upgrade('Bunny biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Easter"))+'All the world will be your enemy
and when they catch you,
they will kill you...
but first they must catch you.
',Game.seasonTriggerBasePrice,[0,12]);Game.last.season='easter';Game.last.pool='toggle'; - - var eggPrice=999999999999; - var eggPrice2=99999999999999; - new Game.Upgrade('Chicken egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'The egg. The egg came first. Get over it.',eggPrice,[1,12]); - new Game.Upgrade('Duck egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Then he waddled away.',eggPrice,[2,12]); - new Game.Upgrade('Turkey egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'These hatch into strange, hand-shaped creatures.',eggPrice,[3,12]); - new Game.Upgrade('Quail egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'These eggs are positively tiny. I mean look at them. How does this happen? Whose idea was that?',eggPrice,[4,12]); - new Game.Upgrade('Robin egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Holy azure-hued shelled embryos!',eggPrice,[5,12]); - new Game.Upgrade('Ostrich egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'One of the largest eggs in the world. More like ostrouch, am I right?
Guys?
',eggPrice,[6,12]); - new Game.Upgrade('Cassowary egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'The cassowary is taller than you, possesses murderous claws and can easily outrun you.
You\'d do well to be casso-wary of them.
',eggPrice,[7,12]); - new Game.Upgrade('Salmon roe',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Do the impossible, see the invisible.
Roe roe, fight the power?
',eggPrice,[8,12]); - new Game.Upgrade('Frogspawn',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'I was going to make a pun about how these "toadally look like eyeballs", but froget it.',eggPrice,[9,12]); - new Game.Upgrade('Shark egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'HELLO IS THIS FOOD?
LET ME TELL YOU ABOUT FOOD.
WHY DO I KEEP EATING MY FRIENDS
',eggPrice,[10,12]); - new Game.Upgrade('Turtle egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Turtles, right? Hatch from shells. Grow into shells. What\'s up with that?
Now for my skit about airplane food.
',eggPrice,[11,12]); - new Game.Upgrade('Ant larva',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'These are a delicacy in some countries, I swear. You will let these invade your digestive tract, and you will derive great pleasure from it.
And all will be well.
',eggPrice,[12,12]); - new Game.Upgrade('Golden goose egg',loc("Golden cookies appear %1% more often.",5)+'
'+loc("Cost scales with how many eggs you own.")+'The sole vestige of a tragic tale involving misguided investments.',eggPrice2,[13,12]); - new Game.Upgrade('Faberge egg',loc("All buildings and upgrades are %1% cheaper.",1)+'
'+loc("Cost scales with how many eggs you own.")+'This outrageous egg is definitely fab.',eggPrice2,[14,12],function(){Game.storeToRefresh=1;}); - new Game.Upgrade('Wrinklerspawn',loc("Wrinklers explode into %1% more cookies.",5)+'
'+loc("Cost scales with how many eggs you own.")+'Look at this little guy! It\'s gonna be a big boy someday! Yes it is!',eggPrice2,[15,12]); - new Game.Upgrade('Cookie egg',loc("Clicking is %1% more powerful.",10)+'
'+loc("Cost scales with how many eggs you own.")+'The shell appears to be chipped.
I wonder what\'s inside this one!
',eggPrice2,[16,12]); - new Game.Upgrade('Omelette',loc("Other eggs appear %1% more frequently.",10)+'
'+loc("Cost scales with how many eggs you own.")+'Fromage not included.',eggPrice2,[17,12]); - new Game.Upgrade('Chocolate egg',loc("Contains a lot of cookies.")+'
'+loc("Cost scales with how many eggs you own.")+'Laid by the elusive cocoa bird. There\'s a surprise inside!',eggPrice2,[18,12],function() - { - var cookies=Game.cookies*0.05; - Game.Notify('Chocolate egg',loc("The egg bursts into %1 cookies!",Beautify(cookies)),Game.Upgrades['Chocolate egg'].icon); - Game.Earn(cookies); - }); - new Game.Upgrade('Century egg',loc("You continually gain more CpS the longer you've played in the current ascension.")+'
'+loc("Cost scales with how many eggs you own.")+'Actually not centuries-old. This one isn\'t a day over 86!',eggPrice2,[19,12]); - Game.last.descFunc=function(){ - var day=Math.floor((Date.now()-Game.startDate)/1000/10)*10/60/60/24; - day=Math.min(day,100); - var n=(1-Math.pow(1-day/100,3))*0.1; - return '
'+loc("Current boost:")+' +'+Beautify(n*100,1)+'%
'+this.ddesc; - }; - new Game.Upgrade('"egg"',''+loc("+%1 CpS",9)+'hey it\'s "egg"',eggPrice2,[20,12]); - - Game.easterEggs=['Chicken egg','Duck egg','Turkey egg','Quail egg','Robin egg','Ostrich egg','Cassowary egg','Salmon roe','Frogspawn','Shark egg','Turtle egg','Ant larva','Golden goose egg','Faberge egg','Wrinklerspawn','Cookie egg','Omelette','Chocolate egg','Century egg','"egg"']; - Game.eggDrops=['Chicken egg','Duck egg','Turkey egg','Quail egg','Robin egg','Ostrich egg','Cassowary egg','Salmon roe','Frogspawn','Shark egg','Turtle egg','Ant larva']; - Game.rareEggDrops=['Golden goose egg','Faberge egg','Wrinklerspawn','Cookie egg','Omelette','Chocolate egg','Century egg','"egg"']; - - Game.GetHowManyEggs=function() - { - var num=0; - for (var i in Game.easterEggs) {if (Game.Has(Game.easterEggs[i])) num++;} - return num; - } - for (var i in Game.eggDrops)//scale egg prices to how many eggs you have - {Game.Upgrades[Game.eggDrops[i]].priceFunc=function(){return Math.pow(2,Game.GetHowManyEggs())*999;}} - - for (var i in Game.rareEggDrops) - {Game.Upgrades[Game.rareEggDrops[i]].priceFunc=function(){return Math.pow(3,Game.GetHowManyEggs())*999;}} - - - Game.DropEgg=function(failRate) - { - failRate*=1/Game.dropRateMult(); - if (Game.season!='easter') return; - if (Game.HasAchiev('Hide & seek champion')) failRate*=0.7; - if (Game.Has('Omelette')) failRate*=0.9; - if (Game.Has('Starspawn')) failRate*=0.9; - if (Game.hasGod) - { - var godLvl=Game.hasGod('seasons'); - if (godLvl==1) failRate*=0.9; - else if (godLvl==2) failRate*=0.95; - else if (godLvl==3) failRate*=0.97; - } - if (Math.random()>=failRate) - { - var drop=''; - if (Math.random()<0.1) drop=choose(Game.rareEggDrops); - else drop=choose(Game.eggDrops); - if (Game.Has(drop) || Game.HasUnlocked(drop))//reroll if we have it - { - if (Math.random()<0.1) drop=choose(Game.rareEggDrops); - else drop=choose(Game.eggDrops); - } - if (Game.Has(drop) || Game.HasUnlocked(drop)) return; - Game.Unlock(drop); - Game.Notify(loc("You found an egg!"),''+drop+'',Game.Upgrades[drop].icon); - } - }; - - order=10032; - Game.NewUpgradeCookie({name:'Caramel macarons',desc:'The saltiest, chewiest of them all.',icon:[25,3],require:'Box of macarons', power:3,price: 9999999999999999999999}); - Game.NewUpgradeCookie({name:'Licorice macarons',desc:'Also known as "blackarons".',icon:[25,4],require:'Box of macarons', power:3,price: 9999999999999999999999999}); - - - order=525; - Game.TieredUpgrade('Taller tellers','Able to process a higher amount of transactions. Careful though, as taller tellers tell tall tales.','Bank',1); - Game.TieredUpgrade('Scissor-resistant credit cards','For those truly valued customers.','Bank',2); - Game.TieredUpgrade('Acid-proof vaults','You know what they say : better safe than sorry.','Bank',3); - Game.TieredUpgrade('Chocolate coins','This revolutionary currency is much easier to melt from and into ingots - and tastes much better, for a change.','Bank',4); - Game.TieredUpgrade('Exponential interest rates','Can\'t argue with mathematics! Now fork it over.','Bank',5); - Game.TieredUpgrade('Financial zen','The ultimate grail of economic thought; the feng shui of big money, the stock market yoga - the Heimlich maneuver of dimes and nickels.','Bank',6); - - order=550; - Game.TieredUpgrade('Golden idols','Lure even greedier adventurers to retrieve your cookies. Now that\'s a real idol game!','Temple',1); - Game.TieredUpgrade('Sacrifices','What\'s a life to a gigaton of cookies?','Temple',2); - Game.TieredUpgrade('Delicious blessing','And lo, the Baker\'s almighty spoon came down and distributed holy gifts unto the believers - shimmering sugar, and chocolate dark as night, and all manner of wheats. And boy let me tell you, that party was mighty gnarly.','Temple',3); - Game.TieredUpgrade('Sun festival','Free the primordial powers of your temples with these annual celebrations involving fire-breathers, traditional dancing, ritual beheadings and other merriments!','Temple',4); - Game.TieredUpgrade('Enlarged pantheon','Enough spiritual inadequacy! More divinities than you\'ll ever need, or your money back! 100% guaranteed!','Temple',5); - Game.TieredUpgrade('Great Baker in the sky','This is it. The ultimate deity has finally cast Their sublimely divine eye upon your operation; whether this is a good thing or possibly the end of days is something you should find out very soon.','Temple',6); - - order=575; - Game.TieredUpgrade('Pointier hats','Tests have shown increased thaumic receptivity relative to the geometric proportions of wizardly conic implements.','Wizard tower',1); - Game.TieredUpgrade('Beardlier beards','Haven\'t you heard? The beard is the word.','Wizard tower',2); - Game.TieredUpgrade('Ancient grimoires','Contain interesting spells such as "Turn Water To Drool", "Grow Eyebrows On Furniture" and "Summon Politician".','Wizard tower',3); - Game.TieredUpgrade('Kitchen curses','Exotic magic involved in all things pastry-related. Hexcellent!','Wizard tower',4); - Game.TieredUpgrade('School of sorcery','This cookie-funded academy of witchcraft is home to the 4 prestigious houses of magic : the Jocks, the Nerds, the Preps, and the Deathmunchers.','Wizard tower',5); - Game.TieredUpgrade('Dark formulas','Eldritch forces are at work behind these spells - you get the feeling you really shouldn\'t be messing with those. But I mean, free cookies, right?','Wizard tower',6); - - order=250; - Game.GrandmaSynergy('Banker grandmas','A nice banker to cash in more cookies.','Bank'); - Game.GrandmaSynergy('Priestess grandmas','A nice priestess to praise the one true Baker in the sky.','Temple'); - Game.GrandmaSynergy('Witch grandmas','A nice witch to cast a zip, and a zoop, and poof! Cookies.','Wizard tower'); - - - - order=0; - new Game.Upgrade('Tin of british tea biscuits',loc("Contains an assortment of fancy biscuits.")+'Every time is tea time.',25,[21,8]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; - new Game.Upgrade('Box of macarons',loc("Contains an assortment of macarons.")+'Multicolored delicacies filled with various kinds of jam.
Not to be confused with macaroons, macaroni, macarena or any of that nonsense.
',25,[20,8]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; - new Game.Upgrade('Box of brand biscuits',loc("Contains an assortment of popular biscuits.")+'They\'re brand new!',25,[20,9]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; - - order=10020; - Game.NewUpgradeCookie({name:'Pure black chocolate cookies',desc:'Dipped in a lab-made substance darker than the darkest cocoa (dubbed "chocoalate").',icon:[26,3],power: 5,price: 9999999999999999*5}); - Game.NewUpgradeCookie({name:'Pure white chocolate cookies',desc:'Elaborated on the nano-scale, the coating on this biscuit is able to refract light even in a pitch-black environment.',icon:[26,4],power: 5,price: 9999999999999999*5}); - Game.NewUpgradeCookie({name:'Ladyfingers',desc:'Cleaned and sanitized so well you\'d swear they\'re actual biscuits.',icon:[27,3],power: 3,price: 99999999999999999}); - Game.NewUpgradeCookie({name:'Tuiles',desc:'These never go out of tile.',icon:[27,4],power: 3,price: 99999999999999999*5}); - Game.NewUpgradeCookie({name:'Chocolate-stuffed biscuits',desc:'A princely snack!
The holes are so the chocolate stuffing can breathe.',icon:[28,3],power: 3,price: 999999999999999999}); - Game.NewUpgradeCookie({name:'Checker cookies',desc:'A square cookie? This solves so many storage and packaging problems! You\'re a genius!',icon:[28,4],power: 3,price: 999999999999999999*5}); - Game.NewUpgradeCookie({name:'Butter cookies',desc:'These melt right off your mouth and into your heart. (Let\'s face it, they\'re rather fattening.)',icon:[29,3],power: 3,price: 9999999999999999999}); - Game.NewUpgradeCookie({name:'Cream cookies',desc:'It\'s like two chocolate chip cookies! But brought together with the magic of cream! It\'s fiendishly perfect!',icon:[29,4],power: 3,price: 9999999999999999999*5}); - - order=0; - var desc=loc("Placing an upgrade in this slot will make its effects permanent across all playthroughs."); - new Game.Upgrade('Permanent upgrade slot I',desc, 100,[0,10]);Game.last.pool='prestige';Game.last.iconFunction=function(){return Game.PermanentSlotIcon(0);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(0);}; - new Game.Upgrade('Permanent upgrade slot II',desc, 20000,[1,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot I'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(1);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(1);}; - new Game.Upgrade('Permanent upgrade slot III',desc, 3000000,[2,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot II'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(2);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(2);}; - new Game.Upgrade('Permanent upgrade slot IV',desc, 400000000,[3,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot III'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(3);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(3);}; - new Game.Upgrade('Permanent upgrade slot V',desc, 50000000000,[4,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot IV'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(4);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(4);}; - - var slots=['Permanent upgrade slot I','Permanent upgrade slot II','Permanent upgrade slot III','Permanent upgrade slot IV','Permanent upgrade slot V']; - for (var i=0;i'+loc("Click to activate.")+''); - var upgrade=Game.UpgradesById[Game.permanentUpgrades[i]]; - return '
'+loc("Current:")+' '+tinyIcon(upgrade.icon)+' '+upgrade.dname+'
'+this.ddesc+(context=='stats'?'':'
'+loc("Click to activate.")+''); - };}(i); - } - - Game.PermanentSlotIcon=function(slot) - { - if (Game.permanentUpgrades[slot]==-1) return [slot,10]; - return Game.UpgradesById[Game.permanentUpgrades[slot]].icon; - } - Game.AssignPermanentSlot=function(slot) - { - PlaySound('snd/tick.mp3'); - Game.tooltip.hide(); - var list=[]; - for (var i in Game.Upgrades) - { - var me=Game.Upgrades[i]; - if (me.bought && me.unlocked && !me.noPerm && (me.pool=='' || me.pool=='cookie')) - { - var fail=0; - for (var ii in Game.permanentUpgrades) {if (Game.permanentUpgrades[ii]==me.id) fail=1;}//check if not already in another permaslot - if (!fail) list.push(me); - } - } - - var sortMap=function(a,b) - { - if (a.order>b.order) return 1; - else if (a.order

'+loc("Pick an upgrade to make permanent")+'

'+ - - '
'+(Game.crate(Game.UpgradesById[upgrade==-1?0:upgrade],'','','upgradeToSlot'))+'
'+ - '
'+upgrades+'
'+ - '
'+loc("Here are all the upgrades you've purchased last playthrough.
Pick one to permanently gain its effects!
You can reassign this slot anytime you ascend.")+'
' - ,[[loc("Confirm"),'Game.permanentUpgrades['+slot+']=Game.SelectingPermanentUpgrade;Game.BuildAscendTree();Game.ClosePrompt();'],loc("Cancel")],0,'widePrompt'); - } - Game.SelectingPermanentUpgrade=-1; - Game.PutUpgradeInPermanentSlot=function(upgrade,slot) - { - Game.SelectingPermanentUpgrade=upgrade; - l('upgradeToSlotWrap').innerHTML=''; - l('upgradeToSlotWrap').style.display=(upgrade==-1?'none':'block'); - l('upgradeToSlotNone').style.display=(upgrade!=-1?'none':'block'); - l('upgradeToSlotWrap').innerHTML=(Game.crate(Game.UpgradesById[upgrade==-1?0:upgrade],'','','upgradeToSlot')); - } - - new Game.Upgrade('Starspawn',loc("Eggs drop %1% more often.",10)+'
'+loc("Golden cookies appear %1% more often during %2.",[2,loc("Easter")]),111111,[0,12]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Starsnow',loc("Christmas cookies drop %1% more often.",5)+'
'+loc("Reindeer appear %1% more often.",5),111111,[12,9]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Starterror',loc("Spooky cookies drop %1% more often.",10)+'
'+loc("Golden cookies appear %1% more often during %2.",[2,loc("Halloween")]),111111,[13,8]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Starlove',loc("Heart cookies are %1% more powerful.",50)+'
'+loc("Golden cookies appear %1% more often during %2.",[2,loc("Valentine's day")]),111111,[20,3]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Startrade',loc("Golden cookies appear %1% more often during %2.",[5,loc("Business day")]),111111,[17,6]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - - var angelPriceFactor=7; - var desc=function(percent,total){return loc("You gain another +%1% of your regular CpS while the game is closed, for a total of %2%.",[percent,total]);} - new Game.Upgrade('Angels',desc(10,15)+'Lowest-ranking at the first sphere of pastry heaven, angels are tasked with delivering new recipes to the mortals they deem worthy.',Math.pow(angelPriceFactor,1),[0,11]);Game.last.pool='prestige';Game.last.parents=['Twin Gates of Transcendence']; - new Game.Upgrade('Archangels',desc(10,25)+'Members of the first sphere of pastry heaven, archangels are responsible for the smooth functioning of the world\'s largest bakeries.',Math.pow(angelPriceFactor,2),[1,11]);Game.last.pool='prestige';Game.last.parents=['Angels']; - new Game.Upgrade('Virtues',desc(10,35)+'Found at the second sphere of pastry heaven, virtues make use of their heavenly strength to push and drag the stars of the cosmos.',Math.pow(angelPriceFactor,3),[2,11]);Game.last.pool='prestige';Game.last.parents=['Archangels']; - new Game.Upgrade('Dominions',desc(10,45)+'Ruling over the second sphere of pastry heaven, dominions hold a managerial position and are in charge of accounting and regulating schedules.',Math.pow(angelPriceFactor,4),[3,11]);Game.last.pool='prestige';Game.last.parents=['Virtues']; - new Game.Upgrade('Cherubim',desc(10,55)+'Sieging at the first sphere of pastry heaven, the four-faced cherubim serve as heavenly bouncers and bodyguards.',Math.pow(angelPriceFactor,5),[4,11]);Game.last.pool='prestige';Game.last.parents=['Dominions']; - new Game.Upgrade('Seraphim',desc(10,65)+'Leading the first sphere of pastry heaven, seraphim possess ultimate knowledge of everything pertaining to baking.',Math.pow(angelPriceFactor,6),[5,11]);Game.last.pool='prestige';Game.last.parents=['Cherubim']; - new Game.Upgrade('God',desc(10,75)+'Like Santa, but less fun.',Math.pow(angelPriceFactor,7),[6,11]);Game.last.pool='prestige';Game.last.parents=['Seraphim']; - - new Game.Upgrade('Twin Gates of Transcendence',loc("You now keep making cookies while the game is closed, at the rate of %1% of your regular CpS and up to 1 hour after the game is closed.
(Beyond 1 hour, this is reduced by a further %2% - your rate goes down to %3% of your CpS.)",[5,90,0.5])+'This is one occasion you\'re always underdressed for. Don\'t worry, just rush in past the bouncer and pretend you know people.',1,[15,11]);Game.last.pool='prestige'; - - new Game.Upgrade('Heavenly luck',loc("Golden cookies appear %1% more often.",5)+'Someone up there likes you.',77,[22,6]);Game.last.pool='prestige'; - new Game.Upgrade('Lasting fortune',loc("Golden cookie effects last %1% longer.",10)+'This isn\'t your average everyday luck. This is... advanced luck.',777,[23,6]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck']; - new Game.Upgrade('Decisive fate',loc("Golden cookies stay %1% longer.",5)+'Life just got a bit more intense.',7777,[10,14]);Game.last.pool='prestige';Game.last.parents=['Lasting fortune']; - - new Game.Upgrade('Divine discount',loc("All buildings are %1% cheaper.",1)+'Someone special deserves a special price.',99999,[21,7]);Game.last.pool='prestige';Game.last.parents=['Decisive fate']; - new Game.Upgrade('Divine sales',loc("All upgrades are %1% cheaper.",1)+'Everything must go!',99999,[18,7]);Game.last.pool='prestige';Game.last.parents=['Decisive fate']; - new Game.Upgrade('Divine bakeries',loc("Cookie upgrades are %1 times cheaper.",5)+'They sure know what they\'re doing.',399999,[17,7]);Game.last.pool='prestige';Game.last.parents=['Divine sales','Divine discount']; - - new Game.Upgrade('Starter kit',loc("You start with %1.",loc("%1 cursor",10))+'This can come in handy.',50,[0,14]);Game.last.pool='prestige';Game.last.parents=['Tin of british tea biscuits','Box of macarons','Box of brand biscuits','Tin of butter cookies']; - new Game.Upgrade('Starter kitchen',loc("You start with %1.",loc("%1 grandma",5))+'Where did these come from?',5000,[1,14]);Game.last.pool='prestige';Game.last.parents=['Starter kit']; - new Game.Upgrade('Halo gloves',loc("Clicking is %1% more powerful.",10)+'Smite that cookie.',55555,[22,7]);Game.last.pool='prestige';Game.last.parents=['Starter kit']; - - new Game.Upgrade('Kitten angels',strKittenDesc+'All cats go to heaven.',9000,[23,7]);Game.last.pool='prestige';Game.last.parents=['Dominions'];Game.last.kitten=1; - - new Game.Upgrade('Unholy bait',loc("Wrinklers appear %1 times as fast.",5)+'No wrinkler can resist the scent of worm biscuits.',44444,[15,12]);Game.last.pool='prestige';Game.last.parents=['Starter kitchen']; - new Game.Upgrade('Sacrilegious corruption',loc("Wrinklers explode into %1% more cookies.",5)+'Unique in the animal kingdom, the wrinkler digestive tract is able to withstand an incredible degree of dilation - provided you prod them appropriately.',444444,[19,8]);Game.last.pool='prestige';Game.last.parents=['Unholy bait']; - - - order=200;Game.TieredUpgrade('Xtreme walkers','Complete with flame decals and a little horn that goes "toot".','Grandma',7); - order=300;Game.TieredUpgrade('Fudge fungus','A sugary parasite whose tendrils help cookie growth.
Please do not breathe in the spores. In case of spore ingestion, seek medical help within the next 36 seconds.
','Farm',7); - order=400;Game.TieredUpgrade('Planetsplitters','These new state-of-the-art excavators have been tested on Merula, Globort and Flwanza VI, among other distant planets which have been curiously quiet lately.','Mine',7); - order=500;Game.TieredUpgrade('Cyborg workforce','Semi-synthetic organisms don\'t slack off, don\'t unionize, and have 20% shorter lunch breaks, making them ideal labor fodder.','Factory',7); - order=525;Game.TieredUpgrade('Way of the wallet','This new monetary school of thought is all the rage on the banking scene; follow its precepts and you may just profit from it.','Bank',7); - order=550;Game.TieredUpgrade('Creation myth','Stories have been circulating about the origins of the very first cookie that was ever baked; tales of how it all began, in the Dough beyond time and the Ovens of destiny.','Temple',7); - order=575;Game.TieredUpgrade('Cookiemancy','There it is; the perfected school of baking magic. From summoning chips to hexing nuts, there is not a single part of cookie-making that hasn\'t been improved tenfold by magic tricks.','Wizard tower',7); - order=600;Game.TieredUpgrade('Dyson sphere','You\'ve found a way to apply your knowledge of cosmic technology to slightly more local endeavors; this gigantic sphere of meta-materials, wrapping the solar system, is sure to kick your baking abilities up a notch.','Shipment',7); - order=700;Game.TieredUpgrade('Theory of atomic fluidity','Pushing alchemy to its most extreme limits, you find that everything is transmutable into anything else - lead to gold, mercury to water; more importantly, you realize that anything can -and should- be converted to cookies.','Alchemy lab',7); - order=800;Game.TieredUpgrade('End of times back-up plan','Just in case, alright?','Portal',7); - order=900;Game.TieredUpgrade('Great loop hypothesis','What if our universe is just one instance of an infinite cycle? What if, before and after it, stretched infinite amounts of the same universe, themselves containing infinite amounts of cookies?','Time machine',7); - order=1000;Game.TieredUpgrade('The Pulse','You\'ve tapped into the very pulse of the cosmos, a timeless rhythm along which every material and antimaterial thing beats in unison. This, somehow, means more cookies.','Antimatter condenser',7); - order=1100; - Game.TieredUpgrade('Lux sanctorum','Your prism attendants have become increasingly mesmerized with something in the light - or maybe something beyond it; beyond us all, perhaps?','Prism',7); - - - order=200;Game.TieredUpgrade('The Unbridling','It might be a classic tale of bad parenting, but let\'s see where grandma is going with this.','Grandma',8); - order=300;Game.TieredUpgrade('Wheat triffids','Taking care of crops is so much easier when your plants can just walk about and help around the farm.
Do not pet. Do not feed. Do not attempt to converse with.
','Farm',8); - order=400;Game.TieredUpgrade('Canola oil wells','A previously untapped resource, canola oil permeates the underground olifers which grant it its particular taste and lucrative properties.','Mine',8); - order=500;Game.TieredUpgrade('78-hour days','Why didn\'t we think of this earlier?','Factory',8); - order=525;Game.TieredUpgrade('The stuff rationale','If not now, when? If not it, what? If not things... stuff?','Bank',8); - order=550;Game.TieredUpgrade('Theocracy','You\'ve turned your cookie empire into a perfect theocracy, gathering the adoration of zillions of followers from every corner of the universe.
Don\'t let it go to your head.
','Temple',8); - order=575;Game.TieredUpgrade('Rabbit trick','Using nothing more than a fancy top hat, your wizards have found a way to simultaneously curb rabbit population and produce heaps of extra cookies for basically free!
Resulting cookies may or may not be fit for vegans.
','Wizard tower',8); - order=600;Game.TieredUpgrade('The final frontier','It\'s been a long road, getting from there to here. It\'s all worth it though - the sights are lovely and the oil prices slightly more reasonable.','Shipment',8); - order=700;Game.TieredUpgrade('Beige goo','Well now you\'ve done it. Good job. Very nice. That\'s 3 galaxies you\'ve just converted into cookies. Good thing you can hop from universe to universe.','Alchemy lab',8); - order=800;Game.TieredUpgrade('Maddening chants','A popular verse goes like so : "jau\'hn madden jau\'hn madden aeiouaeiouaeiou brbrbrbrbrbrbr"','Portal',8); - order=900;Game.TieredUpgrade('Cookietopian moments of maybe','Reminiscing how things could have been, should have been, will have been.','Time machine',8); - order=1000;Game.TieredUpgrade('Some other super-tiny fundamental particle? Probably?','When even the universe is running out of ideas, that\'s when you know you\'re nearing the end.','Antimatter condenser',8); - order=1100; - Game.TieredUpgrade('Reverse shadows','Oh man, this is really messing with your eyes.','Prism',8); - - - order=20000; - new Game.Upgrade('Kitten accountants',strKittenDesc+'business going great, sir',900000000000000000000000,Game.GetIcon('Kitten',6));Game.last.kitten=1;Game.MakeTiered(Game.last,6,18); - new Game.Upgrade('Kitten specialists',strKittenDesc+'optimeowzing your workflow like whoah, sir',900000000000000000000000000,Game.GetIcon('Kitten',7));Game.last.kitten=1;Game.MakeTiered(Game.last,7,18); - new Game.Upgrade('Kitten experts',strKittenDesc+'10 years expurrrtise in the cookie business, sir',900000000000000000000000000000,Game.GetIcon('Kitten',8));Game.last.kitten=1;Game.MakeTiered(Game.last,8,18); - - new Game.Upgrade('How to bake your dragon',loc("Allows you to purchase a crumbly egg once you have earned 1 million cookies.")+'A tome full of helpful tips such as "oh god, stay away from it", "why did we buy this thing, it\'s not even house-broken" and "groom twice a week in the direction of the scales".',9,[22,12]);Game.last.pool='prestige'; - - order=25100; - new Game.Upgrade('A crumbly egg',loc("Unlocks the cookie dragon egg.")+'Thank you for adopting this robust, fun-loving cookie dragon! It will bring you years of joy and entertainment.
Keep in a dry and cool place, and away from other house pets. Subscription to home insurance is strongly advised.
',25,[21,12]); - - new Game.Upgrade('Chimera',loc("Synergy upgrades are %1% cheaper.",2)+'
'+loc("You gain another +%1% of your regular CpS while the game is closed.",5)+'
'+loc("You retain optimal cookie production while the game is closed for %1 more days.",2)+'More than the sum of its parts.',Math.pow(angelPriceFactor,9),[24,7]);Game.last.pool='prestige';Game.last.parents=['God','Lucifer','Synergies Vol. II']; - - new Game.Upgrade('Tin of butter cookies',loc("Contains an assortment of rich butter cookies.")+'Five varieties of danish cookies.
Complete with little paper cups.
',25,[21,9]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; - - new Game.Upgrade('Golden switch',loc("Unlocks the golden switch, which passively boosts your CpS by %1% but disables golden cookies.",50)+'Less clicking, more idling.',999,[21,10]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck']; - - new Game.Upgrade('Classic dairy selection',loc("Unlocks the milk selector, letting you pick which milk is displayed under your cookie.
Comes with a variety of basic flavors.")+'Don\'t have a cow, man.',9,[1,8]);Game.last.pool='prestige';Game.last.parents=[]; - - new Game.Upgrade('Fanciful dairy selection',loc("Contains more exotic flavors for your milk selector.")+'Strong bones for the skeleton army.',1000000,[9,7]);Game.last.pool='prestige';Game.last.parents=['Classic dairy selection']; - - order=10300; - Game.NewUpgradeCookie({name:'Dragon cookie',desc:'Imbued with the vigor and vitality of a full-grown cookie dragon, this mystical cookie will embolden your empire for the generations to come.',icon:[10,25],power:5,price:9999999999999999*7,locked:1}); - - - order=40000; - new Game.Upgrade('Golden switch [off]',loc("Turning this on will give you a passive +%1% CpS, but prevents golden cookies from spawning.
Cost is equal to 1 hour of production.",50),1000000,[20,10]); - Game.last.pool='toggle';Game.last.toggleInto='Golden switch [on]'; - Game.last.priceFunc=function(){return Game.cookiesPs*60*60;} - var func=function(){ - if (Game.Has('Residual luck')) - { - var bonus=0; - var upgrades=Game.goldenCookieUpgrades; - for (var i in upgrades) {if (Game.Has(upgrades[i])) bonus++;} - return '
'+Game.listTinyOwnedUpgrades(Game.goldenCookieUpgrades)+'

The effective boost is +'+Beautify(Math.round(50+bonus*10))+'%
thanks to residual luck
and your '+bonus+' golden cookie upgrade'+(bonus==1?'':'s')+'.
'+this.ddesc; - } - return this.desc; - }; - if (EN) Game.last.descFunc=func; - - new Game.Upgrade('Golden switch [on]',loc("The switch is currently giving you a passive +%1% CpS; it also prevents golden cookies from spawning.
Turning it off will revert those effects.
Cost is equal to 1 hour of production.",50),1000000,[21,10]); - Game.last.pool='toggle';Game.last.toggleInto='Golden switch [off]'; - Game.last.priceFunc=function(){return Game.cookiesPs*60*60;} - Game.last.descFunc=func; - - order=50000; - new Game.Upgrade('Milk selector',loc("Lets you pick what flavor of milk to display."),0,[1,8]); - Game.last.descFunc=function(){ - var choice=this.choicesFunction()[Game.milkType]; - if (!choice) choice=this.choicesFunction()[0]; - return '
'+loc("Current:")+' '+tinyIcon(choice.icon)+' '+choice.name+'
'+this.ddesc; - }; - - Game.last.pool='toggle'; - Game.last.choicesFunction=function() - { - var rank=0; - var choices=[]; - - for (var i=0;imaxRank) choices[i]=0; - } - - choices[Game.milkType].selected=1; - return choices; - } - Game.last.choicesPick=function(id) - {Game.milkType=id;} - - - order=10300; - var butterBiscuitMult=100000000; - Game.NewUpgradeCookie({name:'Milk chocolate butter biscuit',desc:'Rewarded for owning 100 of everything.
It bears the engraving of a fine entrepreneur.',icon:[27,8],power: 10,price: 999999999999999999999*butterBiscuitMult,locked:1}); - Game.NewUpgradeCookie({name:'Dark chocolate butter biscuit',desc:'Rewarded for owning 150 of everything.
It is adorned with the image of an experienced cookie tycoon.',icon:[27,9],power: 10,price: 999999999999999999999999*butterBiscuitMult,locked:1}); - Game.NewUpgradeCookie({name:'White chocolate butter biscuit',desc:'Rewarded for owning 200 of everything.
The chocolate is chiseled to depict a masterful pastry magnate.',icon:[28,9],power: 10,price: 999999999999999999999999999*butterBiscuitMult,locked:1}); - Game.NewUpgradeCookie({name:'Ruby chocolate butter biscuit',desc:'Rewarded for owning 250 of everything.
Covered in a rare red chocolate, this biscuit is etched to represent the face of a cookie industrialist gone mad with power.',icon:[28,8],power: 10,price: 999999999999999999999999999999*butterBiscuitMult,locked:1}); - - order=10020; - Game.NewUpgradeCookie({name:'Gingersnaps',desc:'Cookies with a soul. Probably.',icon:[29,10],power: 4,price: 99999999999999999999}); - Game.NewUpgradeCookie({name:'Cinnamon cookies',desc:'The secret is in the patented swirly glazing.',icon:[23,8],power: 4,price: 99999999999999999999*5}); - Game.NewUpgradeCookie({name:'Vanity cookies',desc:'One tiny candied fruit sits atop this decadent cookie.',icon:[22,8],power: 4,price: 999999999999999999999}); - Game.NewUpgradeCookie({name:'Cigars',desc:'Close, but no match for those extravagant cookie straws they serve in coffee shops these days.',icon:[25,8],power: 4,price: 999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Pinwheel cookies',desc:'Bringing you the dizzying combination of brown flavor and beige taste!',icon:[22,10],power: 4,price: 9999999999999999999999}); - Game.NewUpgradeCookie({name:'Fudge squares',desc:'Not exactly cookies, but you won\'t care once you\'ve tasted one of these.
They\'re so good, it\'s fudged-up!',icon:[24,8],power: 4,price: 9999999999999999999999*5}); - - order=10030; - Game.NewUpgradeCookie({name:'Digits',desc:'Three flavors, zero phalanges.',icon:[26,8],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); - - order=10029; - Game.NewUpgradeCookie({name:'Butter horseshoes',desc:'It would behoove you to not overindulge in these.',icon:[22,9],require:'Tin of butter cookies',power: 4, price: 99999999999999999999999}); - Game.NewUpgradeCookie({name:'Butter pucks',desc:'Lord, what fools these mortals be!
(This is kind of a hokey reference.)',icon:[23,9],require:'Tin of butter cookies',power: 4, price: 99999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Butter knots',desc:'Look, you can call these pretzels if you want, but you\'d just be fooling yourself, wouldn\'t you?',icon:[24,9],require:'Tin of butter cookies',power: 4, price: 999999999999999999999999}); - Game.NewUpgradeCookie({name:'Butter slabs',desc:'Nothing butter than a slab to the face.',icon:[25,9],require:'Tin of butter cookies',power: 4, price: 999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Butter swirls',desc:'These are equal parts sugar, butter, and warm fuzzy feelings - all of which cause millions of deaths every day.',icon:[26,9],require:'Tin of butter cookies',power: 4, price: 9999999999999999999999999}); - - order=10020; - Game.NewUpgradeCookie({name:'Shortbread biscuits',desc:'These rich butter cookies are neither short, nor bread. What a country!',icon:[23,10],power: 4,price: 99999999999999999999999}); - Game.NewUpgradeCookie({name:'Millionaires\' shortbreads',desc:'Three thought-provoking layers of creamy chocolate, hard-working caramel and crumbly biscuit in a poignant commentary of class struggle.',icon:[24,10],power: 4,price: 99999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Caramel cookies',desc:'The polymerized carbohydrates adorning these cookies are sure to stick to your teeth for quite a while.',icon:[25,10],power: 4,price: 999999999999999999999999}); - - - var desc=function(totalHours){ - return loc("You retain optimal cookie production while the game is closed for twice as long, for a total of %1.",Game.sayTime(totalHours*60*60*Game.fps,-1)); - } - new Game.Upgrade('Belphegor',desc(2)+'A demon of shortcuts and laziness, Belphegor commands machines to do work in his stead.',Math.pow(angelPriceFactor,1),[7,11]);Game.last.pool='prestige';Game.last.parents=['Twin Gates of Transcendence']; - new Game.Upgrade('Mammon',desc(4)+'The demonic embodiment of wealth, Mammon requests a tithe of blood and gold from all his worshippers.',Math.pow(angelPriceFactor,2),[8,11]);Game.last.pool='prestige';Game.last.parents=['Belphegor']; - new Game.Upgrade('Abaddon',desc(8)+'Master of overindulgence, Abaddon governs the wrinkler brood and inspires their insatiability.',Math.pow(angelPriceFactor,3),[9,11]);Game.last.pool='prestige';Game.last.parents=['Mammon']; - new Game.Upgrade('Satan',desc(16)+'The counterpoint to everything righteous, this demon represents the nefarious influence of deceit and temptation.',Math.pow(angelPriceFactor,4),[10,11]);Game.last.pool='prestige';Game.last.parents=['Abaddon']; - new Game.Upgrade('Asmodeus',desc(32)+'This demon with three monstrous heads draws his power from the all-consuming desire for cookies and all things sweet.',Math.pow(angelPriceFactor,5),[11,11]);Game.last.pool='prestige';Game.last.parents=['Satan']; - new Game.Upgrade('Beelzebub',desc(64)+'The festering incarnation of blight and disease, Beelzebub rules over the vast armies of pastry inferno.',Math.pow(angelPriceFactor,6),[12,11]);Game.last.pool='prestige';Game.last.parents=['Asmodeus']; - new Game.Upgrade('Lucifer',desc(128)+'Also known as the Lightbringer, this infernal prince\'s tremendous ego caused him to be cast down from pastry heaven.',Math.pow(angelPriceFactor,7),[13,11]);Game.last.pool='prestige';Game.last.parents=['Beelzebub']; - - new Game.Upgrade('Golden cookie alert sound',loc("Unlocks the golden cookie sound selector, which lets you pick whether golden cookies emit a sound when appearing or not.")+'A sound decision.',999999,[28,6]);Game.last.pool='prestige';Game.last.parents=['Residual luck']; - - order=49900; - new Game.Upgrade('Golden cookie sound selector',loc("Lets you change the sound golden cookies make when they spawn."),0,[28,6]); - Game.last.descFunc=function(){ - var choice=this.choicesFunction()[Game.chimeType]; - return '
'+loc("Current:")+' '+tinyIcon(choice.icon)+' '+choice.name+'
'+this.ddesc; - }; - - Game.last.pool='toggle'; - Game.last.choicesFunction=function() - { - var choices=[]; - choices[0]={name:'No sound',icon:[0,7]}; - choices[1]={name:'Chime',icon:[22,6]}; - choices[2]={name:'Fortune',icon:[27,6]}; - choices[3]={name:'Cymbal',icon:[9,10]}; - choices[4]={name:'Squeak',icon:[8,10]}; - for (var i=0;i4) {Game.wrinklerSquishSound-=4;}PlaySound('snd/squeak'+(Game.wrinklerSquishSound)+'.mp3');} - } - - - new Game.Upgrade('Basic wallpaper assortment',loc("Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.")+'Prioritizing aesthetics over crucial utilitarian upgrades? Color me impressed.',99,[29,5]);Game.last.pool='prestige';Game.last.parents=['Classic dairy selection']; - - new Game.Upgrade('Legacy',loc("This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.")+'We\'ve all been waiting for you.',1,[21,6]);Game.last.pool='prestige';Game.last.parents=[]; - - new Game.Upgrade('Elder spice',loc("You can attract %1 more wrinklers.",2)+'The cookie your cookie could smell like.',444444,[19,8]);Game.last.pool='prestige';Game.last.parents=['Unholy bait']; - - new Game.Upgrade('Residual luck',loc("While the golden switch is on, you gain an additional +%1% CpS per golden cookie upgrade owned.",10)+'Fortune comes in many flavors.',99999,[27,6]);Game.last.pool='prestige';Game.last.parents=['Golden switch']; - - order=150;new Game.Upgrade('Fantasteel mouse',getStrClickingGains(1)+'You could be clicking using your touchpad and we\'d be none the wiser.',5000000000000000000,[11,17]);Game.MakeTiered(Game.last,8,11); - new Game.Upgrade('Nevercrack mouse',getStrClickingGains(1)+'How much beefier can you make a mouse until it\'s considered a rat?',500000000000000000000,[11,18]);Game.MakeTiered(Game.last,9,11); - - - new Game.Upgrade('Five-finger discount',loc("All upgrades are %1% cheaper per %2.",[1,loc("%1 cursor",100)])+'Stick it to the man.',555555,[28,7],function(){Game.upgradesToRebuild=1;});Game.last.pool='prestige';Game.last.parents=['Halo gloves','Abaddon']; - - - order=5000; - Game.SynergyUpgrade('Future almanacs','Lets you predict optimal planting times. It\'s crazy what time travel can do!','Farm','Time machine','synergy1'); - Game.SynergyUpgrade('Rain prayer','A deeply spiritual ceremonial involving complicated dance moves and high-tech cloud-busting lasers.','Farm','Temple','synergy2'); - - Game.SynergyUpgrade('Seismic magic','Surprise earthquakes are an old favorite of wizardly frat houses.','Mine','Wizard tower','synergy1'); - Game.SynergyUpgrade('Asteroid mining','As per the 1974 United Cosmic Convention, comets, moons, and inhabited planetoids are no longer legally excavatable.
But hey, a space bribe goes a long way.
','Mine','Shipment','synergy2'); - - Game.SynergyUpgrade('Quantum electronics','Your machines won\'t even be sure if they\'re on or off!','Factory','Antimatter condenser','synergy1'); - Game.SynergyUpgrade('Temporal overclocking','Introduce more quickitude in your system for increased speedation of fastness.','Factory','Time machine','synergy2'); - - Game.SynergyUpgrade('Contracts from beyond','Make sure to read the fine print!','Bank','Portal','synergy1'); - Game.SynergyUpgrade('Printing presses','Fake bills so real, they\'re almost worth the ink they\'re printed with.','Bank','Factory','synergy2'); - - Game.SynergyUpgrade('Paganism','Some deities are better left unworshipped.','Temple','Portal','synergy1'); - Game.SynergyUpgrade('God particle','Turns out God is much tinier than we thought, I guess.','Temple','Antimatter condenser','synergy2'); - - Game.SynergyUpgrade('Arcane knowledge','Some things were never meant to be known - only mildly speculated.','Wizard tower','Alchemy lab','synergy1'); - Game.SynergyUpgrade('Magical botany','Already known in some reactionary newspapers as "the wizard\'s GMOs".','Wizard tower','Farm','synergy2'); - - Game.SynergyUpgrade('Fossil fuels','Somehow better than plutonium for powering rockets.
Extracted from the fuels of ancient, fossilized civilizations.
','Shipment','Mine','synergy1'); - Game.SynergyUpgrade('Shipyards','Where carpentry, blind luck, and asbestos insulation unite to produce the most dazzling spaceships on the planet.','Shipment','Factory','synergy2'); - - Game.SynergyUpgrade('Primordial ores','Only when refining the purest metals will you extract the sweetest sap of the earth.','Alchemy lab','Mine','synergy1'); - Game.SynergyUpgrade('Gold fund','If gold is the backbone of the economy, cookies, surely, are its hip joints.','Alchemy lab','Bank','synergy2'); - - Game.SynergyUpgrade('Infernal crops','Sprinkle regularly with FIRE.','Portal','Farm','synergy1'); - Game.SynergyUpgrade('Abysmal glimmer','Someone, or something, is staring back at you.
Perhaps at all of us.
','Portal','Prism','synergy2'); - - Game.SynergyUpgrade('Relativistic parsec-skipping','People will tell you this isn\'t physically possible.
These are people you don\'t want on your ship.
','Time machine','Shipment','synergy1'); - Game.SynergyUpgrade('Primeval glow','From unending times, an ancient light still shines, impossibly pure and fragile in its old age.','Time machine','Prism','synergy2'); - - Game.SynergyUpgrade('Extra physics funding','Time to put your money where your particle colliders are.','Antimatter condenser','Bank','synergy1'); - Game.SynergyUpgrade('Chemical proficiency','Discover exciting new elements, such as Fleshmeltium, Inert Shampoo Byproduct #17 and Carbon++!','Antimatter condenser','Alchemy lab','synergy2'); - - Game.SynergyUpgrade('Light magic','Actually not to be taken lightly! No, I\'m serious. 178 people died last year. You don\'t mess around with magic.','Prism','Wizard tower','synergy1'); - Game.SynergyUpgrade('Mystical energies','Something beckons from within the light. It is warm, comforting, and apparently the cause for several kinds of exotic skin cancers.','Prism','Temple','synergy2'); - - - new Game.Upgrade('Synergies Vol. I',loc("Unlocks a new tier of upgrades that affect 2 buildings at the same time.
Synergies appear once you have %1 of both buildings.",15)+'The many beats the few.',222222,[10,20]);Game.last.pool='prestige';Game.last.parents=['Satan','Dominions']; - new Game.Upgrade('Synergies Vol. II',loc("Unlocks a new tier of upgrades that affect 2 buildings at the same time.
Synergies appear once you have %1 of both buildings.",75)+'The several beats the many.',2222222,[10,29]);Game.last.pool='prestige';Game.last.parents=['Beelzebub','Seraphim','Synergies Vol. I']; - - new Game.Upgrade('Heavenly cookies',loc("Cookie production multiplier +%1% permanently.",10)+'Baked with heavenly chips. An otherwordly flavor that transcends time and space.',3,[25,12]);Game.last.pool='prestige';Game.last.parents=['Legacy'];Game.last.power=10;Game.last.pseudoCookie=true; - new Game.Upgrade('Wrinkly cookies',loc("Cookie production multiplier +%1% permanently.",10)+'The result of regular cookies left to age out for countless eons in a place where time and space are meaningless.',6666666,[26,12]);Game.last.pool='prestige';Game.last.parents=['Sacrilegious corruption','Elder spice'];Game.last.power=10;Game.last.pseudoCookie=true; - new Game.Upgrade('Distilled essence of redoubled luck',loc("Golden cookies (and all other things that spawn, such as reindeer) have %1% chance of being doubled.",1)+'Tastes glittery. The empty phial makes for a great pencil holder.',7777777,[27,12]);Game.last.pool='prestige';Game.last.parents=['Divine bakeries','Residual luck']; - - order=40000; - new Game.Upgrade('Occult obstruction',loc("Cookie production reduced to 0.")+'If symptoms persist, consult a doctor.',7,[15,5]);//debug purposes only - Game.last.pool='debug'; - new Game.Upgrade('Glucose-charged air',loc("Sugar lumps coalesce a whole lot faster.")+'Don\'t breathe too much or you\'ll get diabetes!',7,[29,16]);//debug purposes only - Game.last.pool='debug'; - - order=10300; - Game.NewUpgradeCookie({name:'Lavender chocolate butter biscuit',desc:'Rewarded for owning 300 of everything.
This subtly-flavored biscuit represents the accomplishments of decades of top-secret research. The molded design on the chocolate resembles a well-known entrepreneur who gave their all to the ancient path of baking.',icon:[26,10],power: 10,price: 999999999999999999999999999999999*butterBiscuitMult,locked:1}); - - order=10030; - Game.NewUpgradeCookie({name:'Lombardia cookies',desc:'These come from those farms with the really good memory.',icon:[23,13],require:'Box of brand biscuits',power: 3, price: 999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Bastenaken cookies',desc:'French cookies made of delicious cinnamon and candy sugar. These do not contain Nuts!',icon:[24,13],require:'Box of brand biscuits',power: 3, price: 999999999999999999999*5}); - - order=10020; - Game.NewUpgradeCookie({name:'Pecan sandies',desc:'Stick a nut on a cookie and call it a day! Name your band after it! Whatever!',icon:[25,13],power: 4,price: 999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Moravian spice cookies',desc:'Popular for being the world\'s moravianest cookies.',icon:[26,13],power: 4,price: 9999999999999999999999999}); - Game.NewUpgradeCookie({name:'Anzac biscuits',desc:'Army biscuits from a bakery down under, containing no eggs but yes oats.',icon:[27,13],power: 4,price: 9999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Buttercakes',desc:'Glistening with cholesterol, these cookies moistly straddle the line between the legal definition of a cookie and just a straight-up stick of butter.',icon:[29,13],power: 4,price: 99999999999999999999999999}); - Game.NewUpgradeCookie({name:'Ice cream sandwiches',desc:'In an alternate universe, "ice cream sandwich" designates an ice cream cone filled with bacon, lettuce, and tomatoes. Maybe some sprinkles too.',icon:[28,13],power: 4,price: 99999999999999999999999999*5}); - - new Game.Upgrade('Stevia Caelestis',loc("Sugar lumps ripen %1 sooner.",Game.sayTime(60*60*Game.fps))+'A plant of supernatural sweetness grown by angels in heavenly gardens.',100000000,[25,15]);Game.last.pool='prestige';Game.last.parents=['Wrinkly cookies']; - new Game.Upgrade('Diabetica Daemonicus',loc("Sugar lumps mature %1 sooner.",Game.sayTime(60*60*Game.fps))+'A malevolent, if delicious herb that is said to grow on the cliffs of the darkest abyss of the underworld.',300000000,[26,15]);Game.last.pool='prestige';Game.last.parents=['Stevia Caelestis','Lucifer']; - new Game.Upgrade('Sucralosia Inutilis',loc("Bifurcated sugar lumps appear %1% more often and are %2% more likely to drop 2 lumps.",[5,5])+'A rare berry of uninteresting flavor that is as elusive as its uses are limited; only sought-after by the most avid collectors with too much wealth on their hands.',1000000000,[27,15]);Game.last.pool='prestige';Game.last.parents=['Diabetica Daemonicus']; - - new Game.Upgrade('Lucky digit',loc("+%1% prestige level effect on CpS.
+%2% golden cookie effect duration.
+%3% golden cookie lifespan.",[1,1,1])+'This upgrade is a bit shy and only appears when your prestige level contains a 7.',777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck'];Game.last.showIf=function(){return (Math.ceil(((Game.prestige+'').split('7').length-1))>=1);}; - new Game.Upgrade('Lucky number',loc("+%1% prestige level effect on CpS.
+%2% golden cookie effect duration.
+%3% golden cookie lifespan.",[1,1,1])+'This upgrade is a reclusive hermit and only appears when your prestige level contains two 7\'s.',77777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Lucky digit','Lasting fortune'];Game.last.showIf=function(){return (Math.ceil(((Game.prestige+'').split('7').length-1))>=2);}; - new Game.Upgrade('Lucky payout',loc("+%1% prestige level effect on CpS.
+%2% golden cookie effect duration.
+%3% golden cookie lifespan.",[1,1,1])+'This upgrade took an oath of complete seclusion from the rest of the world and only appears when your prestige level contains four 7\'s.',77777777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Lucky number','Decisive fate'];Game.last.showIf=function(){return (Math.ceil(((Game.prestige+'').split('7').length-1))>=4);}; - - order=50000; - new Game.Upgrade('Background selector',loc("Lets you pick which wallpaper to display."),0,[29,5]); - Game.last.descFunc=function(){ - var choice=this.choicesFunction()[Game.bgType]; - if (choice==0) choice=this.choicesFunction()[0]; - return '
'+loc("Current:")+' '+tinyIcon(choice.icon)+' '+choice.name+'
'+this.ddesc; - }; - - Game.last.pool='toggle'; - Game.last.choicesFunction=function() - { - var choices=[]; - for (var i in Game.BGsByChoice) - { - choices[i]={name:Game.BGsByChoice[i].name,icon:Game.BGsByChoice[i].icon,order:Game.BGsByChoice[i].order||parseInt(i)}; - } - - choices[13].div=true; - - for (var i=0;i=4.9 && !Game.Has('Distinguished wallpaper assortment')) choices[i]=0; - } - - choices[Game.bgType].selected=1; - return choices; - } - Game.last.choicesPick=function(id) - {Game.bgType=id;} - - Game.AllBGs=[ - {pic:'bgBlue',name:'Automatic',icon:[0,7]}, - {pic:'bgBlue',name:'Blue',icon:[21,21]}, - {pic:'bgRed',name:'Red',icon:[22,21]}, - {pic:'bgWhite',name:'White',icon:[23,21]}, - {pic:'bgBlack',name:'Black',icon:[24,21]}, - {pic:'bgGold',name:'Gold',icon:[25,21]}, - {pic:'grandmas1',name:'Grandmas',icon:[26,21]}, - {pic:'grandmas2',name:'Displeased grandmas',icon:[27,21]}, - {pic:'grandmas3',name:'Angered grandmas',icon:[28,21]}, - {pic:'bgMoney',name:'Money',icon:[29,21]}, - {pic:'bgPurple',name:'Purple',icon:[21,22],order:1.1}, - {pic:'bgPink',name:'Pink',icon:[24,22],order:2.1}, - {pic:'bgMint',name:'Mint',icon:[22,22],order:2.2}, - {pic:'bgSilver',name:'Silver',icon:[25,22],order:4.9}, - {pic:'bgBW',name:'Black & White',icon:[23,22],order:4.1}, - {pic:'bgSpectrum',name:'Spectrum',icon:[28,22],order:4.2}, - {pic:'bgCandy',name:'Candy',icon:[26,22]}, - {pic:'bgYellowBlue',name:'Biscuit store',icon:[27,22]}, - {pic:'bgChoco',name:'Chocolate',icon:[30,21]}, - {pic:'bgChocoDark',name:'Dark Chocolate',icon:[31,21]}, - {pic:'bgPaint',name:'Painter',icon:[24,34]}, - {pic:'bgSnowy',name:'Snow',icon:[30,22]}, - {pic:'bgSky',name:'Sky',icon:[29,22]}, - {pic:'bgStars',name:'Night',icon:[31,22]}, - {pic:'bgFoil',name:'Foil',icon:[25,34]}, - ]; - Game.BGsByChoice={}; - for (var i=0;iThis is the first cookie you\'ve ever baked. It holds a deep sentimental value and, after all this time, an interesting smell.
','Chancemaker',1); - Game.TieredUpgrade('"All Bets Are Off" magic coin','A coin that always lands on the other side when flipped. Not heads, not tails, not the edge. The other side.','Chancemaker',2); - Game.TieredUpgrade('Winning lottery ticket','What lottery? THE lottery, that\'s what lottery! Only lottery that matters!','Chancemaker',3); - Game.TieredUpgrade('Four-leaf clover field','No giant monsters here, just a whole lot of lucky grass.','Chancemaker',4); - Game.TieredUpgrade('A recipe book about books','Tip the scales in your favor with 28 creative new ways to cook the books.','Chancemaker',5); - Game.TieredUpgrade('Leprechaun village','You\'ve finally become accepted among the local leprechauns, who lend you their mythical luck as a sign of friendship (as well as some rather foul-tasting tea).','Chancemaker',6); - Game.TieredUpgrade('Improbability drive','A strange engine that turns statistics on their head. Recommended by the Grandmother\'s Guide to the Bakery.','Chancemaker',7); - Game.TieredUpgrade('Antisuperstistronics','An exciting new field of research that makes unlucky things lucky. No mirror unbroken, no ladder unwalked under!','Chancemaker',8); - - order=5000; - Game.SynergyUpgrade('Gemmed talismans','Good-luck charms covered in ancient and excruciatingly rare crystals. A must have for job interviews!','Chancemaker','Mine','synergy1'); - - order=20000; - new Game.Upgrade('Kitten consultants',strKittenDesc+'glad to be overpaid to work with you, sir',900000000000000000000000000000000,Game.GetIcon('Kitten',9));Game.last.kitten=1;Game.MakeTiered(Game.last,9,18); - - order=99999; - var years=Math.floor((Date.now()-new Date(2013,7,8))/(1000*60*60*24*365)); - //only updates on page load - //may behave strangely on leap years - Game.NewUpgradeCookie({name:'Birthday cookie',desc:'-',icon:[22,13],power:years,price:99999999999999999999999999999});Game.last.baseDesc=loc("Cookie production multiplier +%1% for every year Cookie Clicker has existed (currently: +%2%).",[1,Beautify(years)])+'Thank you for playing Cookie Clicker!
-Orteil
'; - - - order=150;new Game.Upgrade('Armythril mouse',getStrClickingGains(1)+'This one takes about 53 people to push it around and another 48 to jump down on the button and trigger a click. You could say it\'s got some heft to it.',50000000000000000000000,[11,19]);Game.MakeTiered(Game.last,10,11); - - order=200;Game.TieredUpgrade('Reverse dementia','Extremely unsettling, and somehow even worse than the regular kind.','Grandma',9); - order=300;Game.TieredUpgrade('Humane pesticides','Made by people, for people, from people and ready to unleash some righteous scorching pain on those pesky insects that so deserve it.','Farm',9); - order=400;Game.TieredUpgrade('Mole people','Engineered from real human beings within your very labs, these sturdy little folks have a knack for finding the tastiest underground minerals in conditions that more expensive machinery probably wouldn\'t survive.','Mine',9); - order=500;Game.TieredUpgrade('Machine learning','You figured you might get better productivity if you actually told your workers to learn how to work the machines. Sometimes, it\'s the little things...','Factory',9); - order=525;Game.TieredUpgrade('Edible money','It\'s really quite simple; you make all currency too delicious not to eat, solving world hunger and inflation in one fell swoop!','Bank',9); - order=550;Game.TieredUpgrade('Sick rap prayers','With their ill beat and radical rhymes, these way-hip religious tunes are sure to get all the youngins who thought they were 2 cool 4 church back on the pews and praying for more! Wicked!','Temple',9); - order=575;Game.TieredUpgrade('Deluxe tailored wands','In this age of science, most skillful wand-makers are now long gone; but thankfully - not all those wanders are lost.','Wizard tower',9); - order=600;Game.TieredUpgrade('Autopilot','Your ships are now fitted with completely robotic crews! It\'s crazy how much money you save when you don\'t have to compensate the families of those lost in space.','Shipment',9); - order=700;Game.TieredUpgrade('The advent of chemistry','You know what? That whole alchemy nonsense was a load of baseless rubbish. Dear god, what were you thinking?','Alchemy lab',9); - order=800;Game.TieredUpgrade('The real world','It turns out that our universe is actually the twisted dimension of another, saner plane of reality. Time to hop on over there and loot the place!','Portal',9); - order=900;Game.TieredUpgrade('Second seconds','That\'s twice as many seconds in the same amount of time! What a deal! Also, what in god\'s name!','Time machine',9); - order=1000;Game.TieredUpgrade('Quantum comb','Quantum entanglement is one of those things that are so annoying to explain that we might honestly be better off without it. This is finally possible thanks to the quantum comb!','Antimatter condenser',9); - order=1100;Game.TieredUpgrade('Crystal mirrors','Designed to filter more light back into your prisms, reaching levels of brightness that reality itself had never planned for.','Prism',9); - order=1200;Game.TieredUpgrade('Bunnypedes','You\'ve taken to breeding rabbits with hundreds of paws, which makes them intrinsically very lucky and thus a very handy (if very disturbing) pet.','Chancemaker',9); - - order=20000; - new Game.Upgrade('Kitten assistants to the regional manager',strKittenDesc+'nothing stresses meowt... except having to seek the approval of my inferiors, sir',900000000000000000000000000000000000,Game.GetIcon('Kitten',10));Game.last.kitten=1;Game.MakeTiered(Game.last,10,18); - - order=5000; - Game.SynergyUpgrade('Charm quarks','They\'re after your lucky quarks!','Chancemaker','Antimatter condenser','synergy2'); - - - order=10020; - Game.NewUpgradeCookie({name:'Pink biscuits',desc:'One of the oldest cookies. Traditionally dipped in champagne to soften it, because the French will use any opportunity to drink.',icon:[21,16],power: 4,price: 999999999999999999999999999}); - Game.NewUpgradeCookie({name:'Whole-grain cookies',desc:'Covered in seeds and other earthy-looking debris. Really going for that "5-second rule" look.',icon:[22,16],power: 4,price: 999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Candy cookies',desc:'These melt in your hands just a little bit.',icon:[23,16],power: 4,price: 9999999999999999999999999999}); - Game.NewUpgradeCookie({name:'Big chip cookies',desc:'You are in awe at the size of these chips. Absolute units.',icon:[24,16],power: 4,price: 9999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'One chip cookies',desc:'You get one.',icon:[25,16],power: 1,price: 99999999999999999999999999999}); - - - new Game.Upgrade('Sugar baking',loc("Each unspent sugar lump (up to %1) gives +%2% CpS.
Note: this means that spending sugar lumps will decrease your CpS until they grow back.
",[100,1])+'To bake with the sugary essence of eons themselves, you must first learn to take your sweet time.',200000000,[21,17]);Game.last.pool='prestige';Game.last.parents=['Stevia Caelestis']; - new Game.Upgrade('Sugar craving',loc("Once an ascension, you may use the \"Sugar frenzy\" switch to triple your CpS for 1 hour, at the cost of 1 sugar lump.")+'Just a little kick to sweeten the deal.',400000000,[22,17]);Game.last.pool='prestige';Game.last.parents=['Sugar baking']; - new Game.Upgrade('Sugar aging process',loc("Each grandma (up to %1) makes sugar lumps ripen %2 sooner.",[600,Game.sayTime(6*Game.fps)])+'Aren\'t they just the sweetest?',600000000,[23,17]);Game.last.pool='prestige';Game.last.parents=['Sugar craving','Diabetica Daemonicus']; - - order=40050; - new Game.Upgrade('Sugar frenzy',loc("Activating this will triple your CpS for 1 hour, at the cost of 1 sugar lump.")+'
'+loc("May only be used once per ascension."),0,[22,17]); - Game.last.priceLumps=1; - Game.last.pool='toggle';Game.last.toggleInto=0; - Game.last.canBuyFunc=function(){return Game.lumps>=1;}; - Game.last.clickFunction=Game.spendLump(1,loc("activate the sugar frenzy"),function() - { - Game.Upgrades['Sugar frenzy'].buy(1); - buff=Game.gainBuff('sugar frenzy',60*60,3); - Game.Notify(loc("Sugar frenzy!"),loc("CpS x%1 for 1 hour!",3),[29,14]); - }); - - order=10020; - Game.NewUpgradeCookie({name:'Sprinkles cookies',desc:'A bit of festive decorating helps hide the fact that this might be one of the blandest cookies you\'ve ever tasted.',icon:[21,14],power: 4,price: 99999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Peanut butter blossoms',desc:'Topped with a scrumptious chocolate squirt, which is something we really wish we didn\'t just write.',icon:[22,14],power: 4,price: 999999999999999999999999999999}); - Game.NewUpgradeCookie({name:'No-bake cookies',desc:'You have no idea how these mysterious oven-less treats came to be or how they hold their shape. You\'re thinking either elephant glue or cold fusion.',icon:[21,15],power: 4,price: 999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Florentines',desc:'These make up for being the fruitcake of cookies by at least having the decency to feature chocolate.',icon:[26,16],power: 4,price: 9999999999999999999999999999999}); - Game.NewUpgradeCookie({name:'Chocolate crinkles',desc:'Non-denominational cookies to celebrate year-round deliciousness, and certainly not Christmas or some other nonsense.',icon:[22,15],power: 4,price: 9999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Maple cookies',desc:'Made with syrup from a land where milk comes in bags, instead of spontaneously pooling at the bottom of your screen depending on your achievements.',icon:[21,13],power: 4,price: 99999999999999999999999999999999}); - - - order=40000; - new Game.Upgrade('Turbo-charged soil',loc("Garden plants grow every second.
Garden seeds are free to plant.
You can switch soils at any time.")+'It\'s got electrolytes!',7,[2,16]);//debug purposes only - Game.last.buyFunction=function(){if (Game.Objects['Farm'].minigameLoaded){Game.Objects['Farm'].minigame.computeStepT();}} - Game.last.pool='debug'; - - order=150; - new Game.Upgrade('Technobsidian mouse',getStrClickingGains(1)+'A highly advanced mouse of a sophisticated design. Only one thing on its mind : to click.',5000000000000000000000000,[11,28]);Game.MakeTiered(Game.last,11,11); - new Game.Upgrade('Plasmarble mouse',getStrClickingGains(1)+'A shifting blur in the corner of your eye, this mouse can trigger a flurry of clicks when grazed by even the slightest breeze.',500000000000000000000000000,[11,30]);Game.MakeTiered(Game.last,12,11); - - order=20000; - new Game.Upgrade('Kitten marketeers',strKittenDesc+'no such thing as a saturated markit, sir',900000000000000000000000000000000000000,Game.GetIcon('Kitten',11));Game.last.kitten=1;Game.MakeTiered(Game.last,11,18); - - order=10030; - Game.NewUpgradeCookie({name:'Festivity loops',desc:'These garish biscuits are a perfect fit for children\'s birthday parties or the funerals of strange, eccentric billionaires.',icon:[25,17],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999*5}); - - order=10020; - Game.NewUpgradeCookie({name:'Persian rice cookies',desc:'Rose water and poppy seeds are the secret ingredients of these small, butter-free cookies.',icon:[28,15],power: 4,price: 99999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Norwegian cookies',desc:'A flat butter cookie with a sliver of candied cherry on top. It is said that these illustrate the bleakness of scandinavian existentialism.',icon:[22,20],power: 4,price: 999999999999999999999999999999999}); - Game.NewUpgradeCookie({name:'Crispy rice cookies',desc:'Fun to make at home! Store-bought cookies are obsolete! Topple the system! There\'s marshmallows in these! Destroy capitalism!',icon:[23,20],power: 4,price: 999999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Ube cookies',desc:'The tint is obtained by the use of purple yams. According to color symbolism, these cookies are either noble, holy, or supervillains.',icon:[24,17],power: 4,price: 9999999999999999999999999999999999}); - Game.NewUpgradeCookie({name:'Butterscotch cookies',desc:'The butterscotch chips are just the right amount of sticky, and make you feel like you\'re eating candy.',icon:[24,20],power: 4,price: 9999999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Speculaas',desc:'These crunchy, almost obnoxiously cinnamony cookies are a source of dutch pride. About the origin of the name, one can only speculate.',icon:[21,20],power: 4,price: 99999999999999999999999999999999999}); - - order=10200; - Game.NewUpgradeCookie({name:'Elderwort biscuits',desc:'-',icon:[22,25],power:2,price:60*2,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(2)+'
'+loc("%1 are %2% more powerful.",[cap(Game.Objects['Grandma'].plural),2])+'
'+loc("Dropped by %1 plants.",loc("Elderwort").toLowerCase())+'They taste incredibly stale, even when baked fresh.'; - Game.NewUpgradeCookie({name:'Bakeberry cookies',desc:'-',icon:[23,25],power:2,price:60,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(2)+'
'+loc("Dropped by %1 plants.",loc("Bakeberry").toLowerCase())+'Really good dipped in hot chocolate.'; - Game.NewUpgradeCookie({name:'Duketater cookies',desc:'-',icon:[24,25],power:10,price:60*3,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(10)+'
'+loc("Dropped by %1 plants.",loc("Duketater").toLowerCase())+'Fragrant and mealy, with a slight yellow aftertaste.'; - Game.NewUpgradeCookie({name:'Green yeast digestives',desc:'-',icon:[25,25],power:0,price:60*3,locked:1});Game.last.baseDesc=loc("Golden cookies give %1% more cookies.",1)+'
'+loc("Golden cookie effects last %1% longer.",1)+'
'+loc("Golden cookies appear %1% more often.",1)+'
'+loc("Random drops are %1% more common.",3)+'
'+loc("Dropped by %1 plants.",loc("Green rot").toLowerCase())+'These are tastier than you\'d expect, but not by much.'; - - order=23000; - new Game.Upgrade('Fern tea',loc("You gain another +%1% of your regular CpS while the game is closed.",3)+' ('+loc("Must own the %1 upgrade.",getUpgradeName("Twin Gates of Transcendence"))+')'+'
'+loc("Dropped by %1 plants.",loc("Drowsyfern").toLowerCase())+'A chemically complex natural beverage, this soothing concoction has been used by mathematicians to solve equations in their sleep.',60,[26,25]); - new Game.Upgrade('Ichor syrup',loc("You gain another +%1% of your regular CpS while the game is closed.",7)+' ('+loc("Must own the %1 upgrade.",getUpgradeName("Twin Gates of Transcendence"))+')'+'
'+loc("Sugar lumps mature %1 sooner.",Game.sayTime(7*60*Game.fps))+'
'+loc("Dropped by %1 plants.",loc("Ichorpuff").toLowerCase())+'Tastes like candy. The smell is another story.',60*2,[27,25]); - - order=10200; - Game.NewUpgradeCookie({name:'Wheat slims',desc:'-',icon:[28,25],power:1,price:30,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(1)+'
'+loc("Dropped by %1 plants.",loc("Baker's wheat").toLowerCase())+'The only reason you\'d consider these to be cookies is because you feel slightly sorry for them.'; - - var gardenDrops=['Elderwort biscuits','Bakeberry cookies','Duketater cookies','Green yeast digestives','Fern tea','Ichor syrup','Wheat slims']; - for (var i in gardenDrops)//scale by CpS - { - var it=Game.Upgrades[gardenDrops[i]]; - it.priceFunc=function(cost){return function(){return cost*Game.cookiesPs*60;}}(it.basePrice); - it.baseDesc=it.baseDesc.replace('','
'+loc("Cost scales with CpS.")+''); - it.desc=BeautifyInText(it.baseDesc); - it.lasting=true; - } - - - order=10300; - Game.NewUpgradeCookie({name:'Synthetic chocolate green honey butter biscuit',desc:'Rewarded for owning 350 of everything.
The recipe for this butter biscuit was once the sole heritage of an ancient mountain monastery. Its flavor is so refined that only a slab of lab-made chocolate specifically engineered to be completely tasteless could complement it.
Also it\'s got your face on it.',icon:[24,26],power: 10,price: 999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - Game.NewUpgradeCookie({name:'Royal raspberry chocolate butter biscuit',desc:'Rewarded for owning 400 of everything.
Once reserved for the megalomaniac elite, this unique strain of fruity chocolate has a flavor and texture unlike any other. Whether its exorbitant worth is improved or lessened by the presence of your likeness on it still remains to be seen.',icon:[25,26],power: 10,price: 999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - Game.NewUpgradeCookie({name:'Ultra-concentrated high-energy chocolate butter biscuit',desc:'Rewarded for owning 450 of everything.
Infused with the power of several hydrogen bombs through a process that left most nuclear engineers and shareholders perplexed. Currently at the center of some rather heated United Nations meetings. Going in more detail about this chocolate would violate several state secrets, but we\'ll just add that someone\'s bust seems to be pictured on it. Perhaps yours?',icon:[26,26],power: 10,price: 999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - - - - order=200;Game.TieredUpgrade('Timeproof hair dyes','Why do they always have those strange wispy pink dos? What do they know about candy floss that we don\'t?','Grandma',10); - order=300;Game.TieredUpgrade('Barnstars','Ah, yes. These help quite a bit. Somehow.','Farm',10); - order=400;Game.TieredUpgrade('Mine canaries','These aren\'t used for anything freaky! The miners just enjoy having a pet or two down there.','Mine',10); - order=500;Game.TieredUpgrade('Brownie point system','Oh, these are lovely! You can now reward your factory employees for good behavior, such as working overtime or snitching on coworkers. 58 brownie points gets you a little picture of a brownie, and 178 of those pictures gets you an actual brownie piece for you to do with as you please! Infantilizing? Maybe. Oodles of fun? You betcha!','Factory',10); - order=525;Game.TieredUpgrade('Grand supercycles','We let the public think these are complicated financial terms when really we\'re just rewarding the bankers with snazzy bicycles for a job well done. It\'s only natural after you built those fancy gold swimming pools for them, where they can take a dip and catch Kondratiev waves.','Bank',10); - order=550;Game.TieredUpgrade('Psalm-reading','A theologically dubious and possibly blasphemous blend of fortune-telling and scripture studies.','Temple',10); - order=575;Game.TieredUpgrade('Immobile spellcasting','Wizards who master this skill can now cast spells without having to hop and skip and gesticulate embarrassingly, which is much sneakier and honestly quite a relief.','Wizard tower',10); - order=600;Game.TieredUpgrade('Restaurants at the end of the universe','Since the universe is spatially infinite, and therefore can be construed to have infinite ends, you\'ve opened an infinite chain of restaurants where your space truckers can rest and partake in some home-brand cookie-based meals.','Shipment',10); - order=700;Game.TieredUpgrade('On second thought','Disregard that last upgrade, alchemy is where it\'s at! Your eggheads just found a way to transmute children\'s nightmares into rare metals!','Alchemy lab',10); - order=800;Game.TieredUpgrade('Dimensional garbage gulper','So we\'ve been looking for a place to dispose of all the refuse that\'s been accumulating since we started baking - burnt cookies, failed experiments, unruly workers - and well, we figured rather than sell it to poor countries like we\'ve been doing, we could just dump it in some alternate trash dimension where it\'s not gonna bother anybody! Probably!','Portal',10); - order=900;Game.TieredUpgrade('Additional clock hands','It seemed like a silly idea at first, but it turns out these have the strange ability to twist time in interesting new ways.','Time machine',10); - order=1000;Game.TieredUpgrade('Baking Nobel prize','What better way to sponsor scientific growth than to motivate those smarmy nerds with a meaningless award! What\'s more, each prize comes with a fine print lifelong exclusive contract to come work for you (or else)!','Antimatter condenser',10); - order=1100;Game.TieredUpgrade('Reverse theory of light','A whole new world of physics opens up when you decide that antiphotons are real and posit that light is merely a void in shadow.','Prism',10); - order=1200;Game.TieredUpgrade('Revised probabilistics','Either something happens or it doesn\'t. That\'s a 50% chance! This suddenly makes a lot of unlikely things very possible.','Chancemaker',10); - - order=20000; - new Game.Upgrade('Kitten analysts',strKittenDesc+'based on purrent return-on-investment meowdels we should be able to affurd to pay our empawyees somewhere around next century, sir',900000000000000000000000000000000000000000,Game.GetIcon('Kitten',12));Game.last.kitten=1;Game.MakeTiered(Game.last,12,18); - - - new Game.Upgrade('Eye of the wrinkler',loc("Mouse over a wrinkler to see how many cookies are in its stomach.")+'Just a wrinkler and its will to survive.
Hangin\' tough, stayin\' hungry.
',99999999,[27,26]);Game.last.pool='prestige';Game.last.parents=['Wrinkly cookies']; - - new Game.Upgrade('Inspired checklist',loc("Unlocks the Buy all feature, which lets you instantly purchase every upgrade in your store (starting from the cheapest one).
Also unlocks the Vault, a store section where you can place upgrades you do not wish to auto-buy.")+'Snazzy grandma accessories? Check. Transdimensional abominations? Check. A bunch of eggs for some reason? Check. Machine that goes "ping"? Check and check.',900000,[28,26]);Game.last.pool='prestige';Game.last.parents=['Persistent memory','Permanent upgrade slot II']; - - order=10300; - Game.NewUpgradeCookie({name:'Pure pitch-black chocolate butter biscuit',desc:'Rewarded for owning 500 of everything.
This chocolate is so pure and so flawless that it has no color of its own, instead taking on the appearance of whatever is around it. You\'re a bit surprised to notice that this one isn\'t stamped with your effigy, as its surface is perfectly smooth (to the picometer) - until you realize it\'s quite literally reflecting your own face like a mirror.',icon:[24,27],power: 10,price: 999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - - order=10020; - Game.NewUpgradeCookie({name:'Chocolate oatmeal cookies',desc:'These bad boys compensate for lack of a cohesive form and a lumpy, unsightly appearance by being just simply delicious. Something we should all aspire to.',icon:[23,28],power: 4,price: 99999999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Molasses cookies',desc:'Sticky, crackly, and dusted in fine sugar.
Some lunatics have been known to eat these with potatoes.',icon:[24,28],power: 4,price: 999999999999999999999999999999999999}); - Game.NewUpgradeCookie({name:'Biscotti',desc:'Almonds and pistachios make these very robust cookies slightly more interesting to eat than to bludgeon people with.',icon:[22,28],power: 4,price: 999999999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Waffle cookies',desc:'Whether these are cookies with shockingly waffle-like features or simply regular cookie-sized waffles is a debate we\'re not getting into here.',icon:[21,28],power: 4,price: 9999999999999999999999999999999999999}); - - - order=10000; - //early cookies that unlock at the same time as coconut cookies; meant to boost early game a little bit - Game.NewUpgradeCookie({name:'Almond cookies',desc:'Sometimes you feel like one of these. Sometimes you don\'t.',icon:[21,27],power: 2, price: 99999999}); - Game.NewUpgradeCookie({name:'Hazelnut cookies',desc:'Tastes like a morning stroll through a fragrant forest, minus the clouds of gnats.',icon:[22,27],power: 2, price: 99999999}); - Game.NewUpgradeCookie({name:'Walnut cookies',desc:'Some experts have pointed to the walnut\'s eerie resemblance to the human brain as a sign of its sentience - a theory most walnuts vehemently object to.',icon:[23,27],power: 2, price: 99999999}); - - - new Game.Upgrade('Label printer',loc("Mouse over an upgrade to see its tier.
Note: only some upgrades have tiers. Tiers are purely cosmetic and have no effect on gameplay.")+'Also comes in real handy when you want to tell catsup apart from ketchup.',5000000,[28,29]);Game.last.pool='prestige';Game.last.parents=['Genius accounting']; - - - - - order=200;Game.TieredUpgrade('Good manners','Apparently these ladies are much more amiable if you take the time to learn their strange, ancient customs, which seem to involve saying "please" and "thank you" and staring at the sun with bulging eyes while muttering eldritch curses under your breath.','Grandma',11); - order=300;Game.TieredUpgrade('Lindworms','You have to import these from far up north, but they really help aerate the soil!','Farm',11); - order=400;Game.TieredUpgrade('Bore again','After extracting so much sediment for so long, you\'ve formed some veritable mountains of your own from the accumulated piles of rock and dirt. Time to dig through those and see if you find anything fun!','Mine',11); - order=500;Game.TieredUpgrade('"Volunteer" interns','If you\'re bad at something, always do it for free.','Factory',11); - order=525;Game.TieredUpgrade('Rules of acquisition','Rule 387 : a cookie baked is a cookie kept.','Bank',11); - order=550;Game.TieredUpgrade('War of the gods','An interesting game; the only winning move is not to pray.','Temple',11); - order=575;Game.TieredUpgrade('Electricity','Ancient magicks and forbidden hexes shroud this arcane knowledge, whose unfathomable power can mysteriously turn darkness into light and shock an elephant to death.','Wizard tower',11); - order=600;Game.TieredUpgrade('Universal alphabet','You\'ve managed to chart a language that can be understood by any sentient species in the galaxy; its exciting vocabulary contains over 56 trillion words that sound and look like sparkly burps, forming intricate sentences that usually translate to something like "give us your cookies, or else".','Shipment',11); - order=700;Game.TieredUpgrade('Public betterment','Why do we keep trying to change useless matter into cookies, or cookies into even better cookies? Clearly, the way of the future is to change the people who eat the cookies into people with a greater understanding, appreciation and respect for the cookies they\'re eating. Into the vat you go!','Alchemy lab',11); - order=800;Game.TieredUpgrade('Embedded microportals','We\'ve found out that if we bake the portals into the cookies themselves, we can transport people\'s taste buds straight into the taste dimension! Good thing your army of lawyers got rid of the FDA a while ago!','Portal',11); - order=900;Game.TieredUpgrade('Nostalgia','Your time machine technicians insist that this is some advanced new time travel tech, and not just an existing emotion universal to mankind. Either way, you have to admit that selling people the same old cookies just because it reminds them of the good old times is an interesting prospect.','Time machine',11); - order=1000;Game.TieredUpgrade('The definite molecule','Your scientists have found a way to pack a cookie into one single continuous molecule, opening exciting new prospects in both storage and flavor despite the fact that these take up to a whole year to digest.','Antimatter condenser',11); - order=1100;Game.TieredUpgrade('Light capture measures','As the universe gets ever so slightly dimmer due to you converting more and more of its light into cookies, you\'ve taken to finding new and unexplored sources of light for your prisms; for instance, the warm glow emitted by a pregnant woman, or the twinkle in the eye of a hopeful child.','Prism',11); - order=1200;Game.TieredUpgrade('0-sided dice','The advent of the 0-sided dice has had unexpected and tumultuous effects on the gambling community, and saw experts around the world calling you both a genius and an imbecile.','Chancemaker',11); - - - new Game.Upgrade('Heralds',loc("You now benefit from the boost provided by heralds.
Each herald gives you +1% CpS.
Look on the purple flag at the top to see how many heralds are active at any given time.")+(App?'It\'s getting steamy.':'Be excellent to each other.
And Patreon, dudes!
'),100,[21,29]);Game.last.pool='prestige'; - - order=255; - Game.GrandmaSynergy('Metagrandmas','A fractal grandma to make more grandmas to make more cookies.','Fractal engine'); - - order=1300; - Game.TieredUpgrade('Metabakeries','They practically bake themselves!','Fractal engine',1); - Game.TieredUpgrade('Mandelbrown sugar','A substance that displays useful properties such as fractal sweetness and instant contact lethality.','Fractal engine',2); - Game.TieredUpgrade('Fractoids','Here\'s a frun fract : all in all, these were a terrible idea.','Fractal engine',3); - Game.TieredUpgrade('Nested universe theory','Asserts that each subatomic particle is host to a whole new universe, and therefore, another limitless quantity of cookies.
This somehow stacks with the theory of nanocosmics, because physics.
','Fractal engine',4); - Game.TieredUpgrade('Menger sponge cake','Frighteningly absorbent thanks to its virtually infinite surface area. Keep it isolated in a dry chamber, never handle it with an open wound, and do not ever let it touch a body of water.','Fractal engine',5); - Game.TieredUpgrade('One particularly good-humored cow','This unassuming bovine was excruciatingly expensive and it may seem at first like you were ripped off. On closer inspection however, you notice that its earrings (it\'s wearing earrings) are actually fully functional copies of itself, each of which also wearing their own cow earrings, and so on, infinitely. It appears your dairy concerns will be taken care of for a while, although you\'ll have to put up with the cow\'s annoying snickering.','Fractal engine',6); - Game.TieredUpgrade('Chocolate ouroboros','Forever eating its own tail and digesting itself, in a metabolically dubious tale of delicious tragedy.','Fractal engine',7); - Game.TieredUpgrade('Nested','Clever self-reference or shameful cross-promotion? This upgrade apparently has the gall to advertise a link to orteil.dashnet.org/nested, in a tooltip you can\'t even click.','Fractal engine',8); - Game.TieredUpgrade('Space-filling fibers','This special ingredient has the incredible ability to fill the local space perfectly, effectively eradicating hunger in those who consume it!
Knowing that no hunger means no need for cookies, your marketers urge you to repurpose this product into next-level packing peanuts.
','Fractal engine',9); - Game.TieredUpgrade('Endless book of prose','','Fractal engine',10); - if (EN) - { - Game.last.descFunc=function(){ - var str='"There once was a baker named '+Game.bakeryName+'. One day, there was a knock at the door; '+Game.bakeryName+' opened it and was suddenly face-to-face with a strange and menacing old grandma. The grandma opened her mouth and, in a strange little voice, started reciting this strange little tale : '; - var n=35; - var i=Math.floor(Game.T*0.1); - return this.desc+''+(str.substr(i%str.length,n)+(i%str.length>(str.length-n)?str.substr(0,i%str.length-(str.length-n)):''))+''; - }; - } - else Game.last.desc='-'; - Game.TieredUpgrade('The set of all sets','The answer, of course, is a definite maybe.','Fractal engine',11); - - order=5000; - Game.SynergyUpgrade('Recursive mirrors','Do you have any idea what happens when you point two of these at each other? Apparently, the universe doesn\'t either.','Fractal engine','Prism','synergy1'); - //Game.SynergyUpgrade('Compounded odds','When probabilities start cascading, "never in a billion lifetimes" starts looking terribly like "probably before Monday comes around".','Fractal engine','Chancemaker','synergy1'); - Game.SynergyUpgrade('Mice clicking mice','','Fractal engine','Cursor','synergy2'); - if (EN) - { - Game.last.descFunc=function(){ - Math.seedrandom(Game.seed+'-blasphemouse'); - if (Math.random()<0.3) {Math.seedrandom();return this.desc+'Absolutely blasphemouse!';} - else {Math.seedrandom();return this.desc+'Absolutely blasphemous!';} - }; - } - else Game.last.desc='-'; - - - order=10020; - Game.NewUpgradeCookie({name:'Custard creams',desc:'British lore pits these in a merciless war against bourbon biscuits.
The filling evokes vanilla without quite approaching it.
They\'re tastier on the inside!',icon:[23,29],power: 4,price: 9999999999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Bourbon biscuits',desc:'Two chocolate biscuits joined together with even more chocolate.
The sworn rivals of custard creams, as legend has it.',icon:[24,29],power: 4,price: 99999999999999999999999999999999999999}); - - - new Game.Upgrade('Keepsakes',loc("Seasonal random drops have a 1/5 chance to carry over through ascensions.")+'Cherish the memories.',1111111111,[22,29]);Game.last.pool='prestige';Game.last.parents=['Starsnow','Starlove','Starterror','Startrade','Starspawn']; - - order=10020; - Game.NewUpgradeCookie({name:'Mini-cookies',desc:'Have you ever noticed how the smaller something is, the easier it is to binge on it?',icon:[29,30],power: 5,price: 99999999999999999999999999999999999999*5}); - - new Game.Upgrade('Sugar crystal cookies',(EN?'Cookie production multiplier +5% permanently, and +1% for every building type level 10 or higher.':loc("Cookie production multiplier +%1% permanently.",5)+'
'+loc("Cookie production multiplier +%1% for every building type level %2 or higher.",[1,10]))+'Infused with cosmic sweetness. It gives off a faint shimmery sound when you hold it up to your ear.',1000000000,[21,30]);Game.last.pool='prestige';Game.last.parents=['Sugar baking'];Game.last.power=function(){ - var n=5; - for (var i in Game.Objects) - { - if (Game.Objects[i].level>=10) n++; - } - return n; - };Game.last.pseudoCookie=true; - Game.last.descFunc=function(){ - var n=5; - for (var i in Game.Objects) - { - if (Game.Objects[i].level>=10) n++; - } - return '
'+loc("Current:")+' +'+Beautify(n)+'%
'+this.ddesc; - }; - new Game.Upgrade('Box of maybe cookies',loc("Contains an assortment of...something.")+'These may or may not be considered cookies.',333000000000,[25,29]);Game.last.pool='prestige';Game.last.parents=['Sugar crystal cookies']; - new Game.Upgrade('Box of not cookies',loc("Contains an assortment of...something.")+'These are strictly, definitely not cookies.',333000000000,[26,29]);Game.last.pool='prestige';Game.last.parents=['Sugar crystal cookies']; - new Game.Upgrade('Box of pastries',loc("Contains an assortment of delicious pastries.")+'These are a damn slippery slope is what they are!',333000000000,[27,29]);Game.last.pool='prestige';Game.last.parents=['Sugar crystal cookies']; - - order=10040; - Game.NewUpgradeCookie({name:'Profiteroles',desc:'Also known as cream puffs, these pastries are light, fluffy, filled with whipped cream and fun to throw at people when snowballs are running scarce.',icon:[29,29],require:'Box of pastries', power:4,price: Math.pow(10,31)}); - Game.NewUpgradeCookie({name:'Jelly donut',desc:'Guaranteed to contain at least 0.3% jelly filling, or your money back.
You can still see the jelly stab wound!',icon:[27,28],require:'Box of pastries', power:4,price: Math.pow(10,33)}); - Game.NewUpgradeCookie({name:'Glazed donut',desc:'Absolutely gooey with sugar. The hole is the tastiest part!',icon:[28,28],require:'Box of pastries', power:4,price: Math.pow(10,35)}); - Game.NewUpgradeCookie({name:'Chocolate cake',desc:'The cake is a Portal reference!',icon:[25,27],require:'Box of pastries', power:4,price: Math.pow(10,37)}); - Game.NewUpgradeCookie({name:'Strawberry cake',desc:'It\'s not easy to come up with flavor text for something as generic as this, but some would say it\'s a piece of cake.',icon:[26,27],require:'Box of pastries', power:4,price: Math.pow(10,39)}); - Game.NewUpgradeCookie({name:'Apple pie',desc:'It is said that some grandmas go rogue and bake these instead.',icon:[25,28],require:'Box of pastries', power:4,price: Math.pow(10,41)}); - Game.NewUpgradeCookie({name:'Lemon meringue pie',desc:'Meringue is a finicky substance made of sugar and egg whites that requires specific atmospheric conditions to be baked at all. The lemon, as far as we can tell, isn\'t nearly as picky.',icon:[26,28],require:'Box of pastries', power:4,price: Math.pow(10,43)}); - Game.NewUpgradeCookie({name:'Butter croissant',desc:'Look around.
A rude man in a striped shirt bikes past you. He smells of cigarettes and café-au-lait. Somewhere, a mime uses his moustache to make fun of the British. 300 pigeons fly overhead.
Relax. You\'re experiencing croissant.',icon:[29,28],require:'Box of pastries', power:4,price: Math.pow(10,45)}); - - order=10050; - Game.NewUpgradeCookie({name:'Cookie dough',desc:'Bursting with infinite potential, but can also be eaten as is. Arguably worth the salmonella.',icon:[25,30],require:'Box of maybe cookies', power:4,price: Math.pow(10,35)}); - Game.NewUpgradeCookie({name:'Burnt cookie',desc:'This cookie flew too close to the sun and is now a shadow of its former self. If only you remembered to set a timer, you wouldn\'t have this tragedy on your hands...',icon:[23,30],require:'Box of maybe cookies', power:4,price: Math.pow(10,37)}); - Game.NewUpgradeCookie({name:'A chocolate chip cookie but with the chips picked off for some reason',desc:'This has to be the saddest thing you\'ve ever seen.',icon:[24,30],require:'Box of maybe cookies', power:3,price: Math.pow(10,39)}); - Game.NewUpgradeCookie({name:'Flavor text cookie',desc:'What you\'re currently reading is what gives this cookie its inimitable flavor.',icon:[22,30],require:'Box of maybe cookies', power:4,price: Math.pow(10,41)}); - Game.NewUpgradeCookie({name:'High-definition cookie',desc:'Uncomfortably detailed, like those weird stories your aunt keeps telling at parties.',icon:[28,10],require:'Box of maybe cookies', power:5,price: Math.pow(10,43)}); - - order=10060; - Game.NewUpgradeCookie({name:'Toast',desc:'A crisp slice of bread, begging for some butter and jam.
Why do people keep proposing these at parties?',icon:[27,10],require:'Box of not cookies', power:4,price: Math.pow(10,34)}); - Game.NewUpgradeCookie({name:'Peanut butter & jelly',desc:'It\'s time.',icon:[29,9],require:'Box of not cookies', power:4,price: Math.pow(10,36)}); - Game.NewUpgradeCookie({name:'Wookies',desc:'These aren\'t the cookies you\'re looking for.',icon:[26,30],require:'Box of not cookies', power:4,price: Math.pow(10,38)}); - Game.NewUpgradeCookie({name:'Cheeseburger',desc:'Absolutely no relation to cookies whatsoever - Orteil just wanted an excuse to draw a cheeseburger.',icon:[28,30],require:'Box of not cookies', power:4,price: Math.pow(10,40)}); - Game.NewUpgradeCookie({name:'One lone chocolate chip',desc:'The start of something beautiful.',icon:[27,30],require:'Box of not cookies', power:1,price: Math.pow(10,42)}); - - - new Game.Upgrade('Genius accounting',loc("Unlocks extra price information.
Each displayed cost now specifies how long it'll take you to afford it, and how much of your bank it represents.")+'There\'s no accounting for taste, and yet here we are.',2000000,[11,10]);Game.last.pool='prestige';Game.last.parents=['Inspired checklist']; - - - new Game.Upgrade('Shimmering veil',loc("Unlocks the shimmering veil, a switch that passively boosts your CpS by %1%.
You start with the veil turned on; however, it is very fragile, and clicking the big cookie or any golden cookie or reindeer will turn it off, requiring %2 of CpS to turn back on.",[50,Game.sayTime(24*60*60*Game.fps,2)])+'Hands off!',999999999,[9,10]);Game.last.pool='prestige';Game.last.parents=['Distilled essence of redoubled luck']; - - order=40005; - var func=function(){ - var boost=Game.getVeilBoost(); - var resist=Game.getVeilDefense(); - return (this.name=='Shimmering veil [on]'?'
'+loc("Active.")+'
':'')+loc("Boosts your cookie production by %1% when active.
The veil is very fragile and will break if you click the big cookie or any golden cookies or reindeer.

Once broken, turning the veil back on costs %2 of unbuffed CpS.",[Beautify(boost*100),Game.sayTime(24*60*60*Game.fps,2)])+(resist>0?('

'+loc("Has a %1% chance to not break.",Beautify(resist*100))):''); - }; - new Game.Upgrade('Shimmering veil [off]','',1000000,[9,10]); - Game.last.pool='toggle';Game.last.toggleInto='Shimmering veil [on]'; - Game.last.priceFunc=function(){return Game.unbuffedCps*60*60*24;} - Game.last.descFunc=func; - new Game.Upgrade('Shimmering veil [on]','',0,[9,10]); - Game.last.pool='toggle';Game.last.toggleInto='Shimmering veil [off]'; - Game.last.descFunc=func; - - Game.loseShimmeringVeil=function(context) - { - if (!Game.Has('Shimmering veil')) return false; - if (!Game.Has('Shimmering veil [off]') && Game.Has('Shimmering veil [on]')) return false; - if (Game.Has('Reinforced membrane')) - { - if (context=='shimmer') Math.seedrandom(Game.seed+'/'+(Game.goldenClicks+Game.reindeerClicked)); - else if (context=='click') Math.seedrandom(Game.seed+'/'+Game.cookieClicks); - if (Math.random()If you\'re considering eating this as a fun snack, you probably have other things to worry about than this game, like getting scurvy or your crew fomenting mutiny.',icon:[28,31],power: 5,price: getCookiePrice(8)}); - Game.NewUpgradeCookie({name:'Cornflake cookies',desc:'They\'re grrrrrroovy! Careful not to let it sit in your milk too long, lest you accidentally end up with a bowl of cereal and get confused.',icon:[29,31],power: 5,price: getCookiePrice(9)}); - Game.NewUpgradeCookie({name:'Tofu cookies',desc:'There\'s really two ways to go with tofu cooking; either it asserts itself in plain sight or it camouflages itself in the other ingredients. This happens to be the latter, and as such, you can\'t really tell the difference between this and a regular cookie, save for that one pixel on the left.',icon:[30,31],power: 5,price: getCookiePrice(10)}); - Game.NewUpgradeCookie({name:'Gluten-free cookies',desc:'Made with browned butter and milk to closely match the archetypal chocolate chip cookie.
For celiacs, a chance to indulge in a delicious risk-free pastry. For others, a strangely threatening confection whose empty eyes will never know heaven nor hell.',icon:[30,30],power: 5,price: getCookiePrice(10)}); - Game.NewUpgradeCookie({name:'Russian bread cookies',desc:'Also known as alphabet cookies; while most bakers follow the recipe to the letter, it is said that some substitute the flour for spelt. But don\'t take my word for it.',icon:[30,29],power: 5,price: getCookiePrice(11)}); - Game.NewUpgradeCookie({name:'Lebkuchen',desc:'Diverse cookies from Germany, fragrant with honey and spices, often baked around Christmas.
Once worn by warriors of old for protection in battle.
+5 STR, +20% magic resistance.',icon:[30,28],power: 5,price: getCookiePrice(12)}); - Game.NewUpgradeCookie({name:'Aachener Printen',desc:'The honey once used to sweeten these gingerbread-like treats has since been swapped out for beet sugar, providing another sad example of regressive evolution.',icon:[30,27],power: 5,price: getCookiePrice(13)}); - Game.NewUpgradeCookie({name:'Canistrelli',desc:'A dry biscuit flavored with anise and wine, tough like the people of Corsica where it comes from.',icon:[30,26],power: 5,price: getCookiePrice(14)}); - Game.NewUpgradeCookie({name:'Nice biscuits',desc:'Made with coconut and perfect with tea. Traces its origins to a French city so nice they named it that.',icon:[30,25],power: 5,price: getCookiePrice(15)}); - Game.NewUpgradeCookie({name:'French pure butter cookies',desc:'You can\'t tell what\'s stronger coming off these - the smell of butter or condescension.',icon:[31,25],power: 5,price: getCookiePrice(16)}); - Game.NewUpgradeCookie({name:'Petit beurre',desc:'An unassuming biscuit whose name simply means "little butter". Famed and feared for its four ears and forty-eight teeth.
When it hears ya, it\'ll get ya...',icon:[31,26],power: 5,price: getCookiePrice(16)}); - Game.NewUpgradeCookie({name:'Nanaimo bars',desc:'A delicious no-bake pastry hailing from Canada. Probably beats eating straight-up snow with maple syrup poured on it, but what do I know.',icon:[31,27],power: 5,price: getCookiePrice(17)}); - Game.NewUpgradeCookie({name:'Berger cookies',desc:'Messily slathered with chocolate fudge, but one of the most popular bergers of Baltimore, along with the triple fried egg berger and the blue crab cheeseberger.',icon:[31,28],power: 5,price: getCookiePrice(18)}); - Game.NewUpgradeCookie({name:'Chinsuko',desc:'A little piece of Okinawa in cookie form. Part of a Japanese custom of selling sweets as souvenirs. But hey, pressed pennies are cool too.',icon:[31,29],power: 5,price: getCookiePrice(19)}); - Game.NewUpgradeCookie({name:'Panda koala biscuits',desc:'Assorted jungle animals with equally assorted fillings.
Comes in chocolate, strawberry, vanilla and green tea.
Eat them all before they go extinct!',icon:[31,13],power: 5,price: getCookiePrice(19)}); - Game.NewUpgradeCookie({name:'Putri salju',desc:'A beloved Indonesian pastry; its name means "snow princess", for the powdered sugar it\'s coated with. Had we added these to Cookie Clicker some years ago, this is where we\'d make a reference to that one Disney movie, but it\'s probably time to let it go.',icon:[31,30],power: 5,price: getCookiePrice(20)}); - Game.NewUpgradeCookie({name:'Milk cookies',desc:'Best eaten with a tall glass of chocolate.',icon:[31,31],power: 5,price: getCookiePrice(21)}); - - order=9999; - Game.NewUpgradeCookie({name:'Cookie crumbs',desc:'There used to be a cookie here. Now there isn\'t.
Good heavens, what did you DO?!',icon:[30,13],power:1,require:'Legacy',price:100}); - Game.NewUpgradeCookie({name:'Chocolate chip cookie',desc:'This is the cookie you\'ve been clicking this whole time. It looks a bit dented and nibbled on, but it\'s otherwise good as new.',icon:[10,0],power:10,require:'Legacy',price:1000000000000}); - - - new Game.Upgrade('Cosmic beginner\'s luck',loc("Prior to purchasing the %1 upgrade in a run, random drops are %2 times more common.",[getUpgradeName("Heavenly chip secret"),5])+'Oh! A penny!
Oh! A priceless heirloom!
Oh! Another penny!
',999999999*15,[8,10]);Game.last.pool='prestige';Game.last.parents=['Shimmering veil']; - Game.getVeilDefense=function() - { - var n=0; - if (Game.Has('Reinforced membrane')) n+=0.1; - if (Game.Has('Delicate touch')) n+=0.1; - if (Game.Has('Steadfast murmur')) n+=0.1; - if (Game.Has('Glittering edge')) n+=0.1; - return n; - } - Game.getVeilBoost=function() - { - var n=0.5; - if (Game.Has('Reinforced membrane')) n+=0.1; - if (Game.Has('Delicate touch')) n+=0.05; - if (Game.Has('Steadfast murmur')) n+=0.05; - if (Game.Has('Glittering edge')) n+=0.05; - return n; - } - new Game.Upgrade('Reinforced membrane',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,10])+'A consistency between jellyfish and cling wrap.',999999999*15,[7,10]);Game.last.pool='prestige';Game.last.parents=['Shimmering veil']; - - - order=255; - Game.GrandmaSynergy('Binary grandmas','A digital grandma to transfer more cookies.
(See also : boolean grandmas, string grandmas, and not-a-number grandmas, also known as "NaNs".)','Javascript console'); - - order=1400; - Game.TieredUpgrade('The JavaScript console for dummies','This should get you started. The first line reads: "To open the javascript console, press-"
...the rest of the book is soaked in chocolate milk. If only there was a way to look up this sort of information...
','Javascript console',1); - Game.TieredUpgrade('64bit arrays','A long-form variable type to pack your cookies much more efficiently.','Javascript console',2); - Game.TieredUpgrade('Stack overflow','This is really bad! You probably forgot to close a loop somewhere and now your programs are going crazy! The rest of your engineers seem really excited about it somehow. How could a software mishap like a stack overflow possibly ever help anyone?','Javascript console',3); - Game.TieredUpgrade('Enterprise compiler','This bespoke javascript compiler took your team years of development and billions in research, but it should let you execute (certain) functions (up to) 2% faster (in optimal circumstances).','Javascript console',4); - Game.TieredUpgrade('Syntactic sugar','Tastier code for tastier cookies.','Javascript console',5); - Game.TieredUpgrade('A nice cup of coffee','All this nerd stuff has you exhausted. You make yourself a nice cup of coffee, brewed with roasted beans from some far-away island. You may have been working a bit too hard though - the cup of coffee starts talking to you, insisting that it is NOT javascript.','Javascript console',6); - Game.TieredUpgrade('Just-in-time baking','A new method of preparing cookies; they bake themselves right in front of the customers before eating, leaving your kitchens mess-free.','Javascript console',7); - Game.TieredUpgrade('cookies++','Your very own cookie-themed programming language, elegantly named after its most interesting ability - increasing the "cookies" variable by 1.','Javascript console',8); - Game.TieredUpgrade('Software updates','This is grand news - someone\'s finally figured out the Wifi password, and your newfound internet connection seems to have triggered a whole lot of software updates! Your browsers, drivers and plugins all received a fresh coat of paint, and your javascript version has been updated to the latest ECMAScript specification. It\'s really too bad thousands had to die due to some deprecated function in your neurotoxin ventilation code, but I guess that\'s progress for you.','Javascript console',9); - Game.TieredUpgrade('Game.Loop','You\'re not quite sure what to make of this. What does it mean? What does it do? Who would leave something like that just laying around here? Try asking again in 1/30th of a second.','Javascript console',10); - Game.TieredUpgrade('eval()','It is said that this simple function holds the key to the universe, and that whosoever masters it may shape reality to their will.
Good thing you have no idea how it works. Makes for a neat plaque on your wall, though.
','Javascript console',11); - - order=5000; - Game.SynergyUpgrade('Script grannies','Armies of energy drink-fueled grandmas ready to hack into the cyberspace for renegade e-cookies.','Javascript console','Grandma','synergy1'); - Game.SynergyUpgrade('Tombola computing','','Javascript console','Chancemaker','synergy2'); - if (EN) - { - Game.last.descFunc=function(){ - Math.seedrandom(Game.seed+'-tombolacomputing'); - var str='(Your ticket reads '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+', entitling you to '+choose([Math.floor(Math.random()*5+2)+' lines of javascript','one free use of Math.random()','one qubit, whatever that is','one half-eaten cookie','a brand new vacuum cleaner','most of one room-temperature cup of orange soda','one really good sandwich','one handful of pocket lint','someone\'s mostly clean hairpiece','a trip to a fancy restaurant','the knowledge of those numbers','a furtive glance at the news ticker','another ticket, half-price','all-you-can-eat moldy bread','one lifetime supply of oxygen','the color '+choose['red','orange','yellow','green','blue','purple','black','white','gray','brown','pink','teal'],'increased intellect for a limited time','an ancient runesword','the throne of a far-away country','the position of Mafia capo. Good luck','one free time-travel week-end','something beautiful','the deed to some oil well','one hamburger made out of the animal, plant, or person of your choice','the last surviving '+choose['dodo bird','thylacine','unicorn','dinosaur','neanderthal'],'a deep feeling of accomplishment','a fleeting tinge of entertainment','a vague sense of unease','deep existential dread','one extra week added to your lifespan','breathe manually','blink right here and now','one meeting with any famous person, living or dead, in your next dream','one very nice dream','a wacky sound effect','45 seconds of moral flexibility','hundreds and thousands, also known as "sprinkles"','one circle, triangle, square or other simple geometric shape, of average dimensions','just this extra bit of randomness','the extra push you needed to turn your life around','a good fright','one secret superpower','a better luck next time','an irrational phobia of tombola tickets','one whole spider','an increased sense of self-worth and determination','inner peace','one double-XP week-end in the MMORPG of your choice','a little piece of the universe, represented by the trillions of atoms that make up this very ticket','food poisoning','the Moon! Well, conceptually','a new car, baby','a new catchphrase','an intrusive thought of your choice','- ...aw man, it just cuts off there','the director spot for the next big hit movie','really good-looking calves','one genuine pirate golden doubloon','"treasure and riches", or something','one boat, sunken','baby shoes, never worn','direct lineage to some King or Queen','innate knowledge of a dead language you\'ll never encounter','the melody of a song you don\'t know the words to','white noise','mild physical impairment','a new pair of lips','things, and such','one popular expression bearing your name','one typo','one get-out-of-jail-free card','the rest of your life... for now','one polite huff','a condescending stare','one cursed monkey paw','true love, probably','an interesting factoid about the animal, country, TV show or celebrity of your choice','a pop culture reference','minutes of fun','the etymology of the word "tombola" - it\'s Italian for "a tumble"','nothing. You lost, sorry'])+'.)'; - Math.seedrandom(); - return this.desc+'Like quantum computing, but more fun.
'+str+'
'; - }; - } - else Game.last.desc='-'; - - order=10020; - Game.NewUpgradeCookie({name:'Kruidnoten',desc:'A festive dutch favorite; tiny cinnamony bites sometimes coated in chocolate. The name translates roughly to "kruidnoten".',icon:[30,3],power: 5,price: getCookiePrice(22)}); - Game.NewUpgradeCookie({name:'Marie biscuits',desc:'Pleasantly round, smoothly buttery, subtly vanilla-flavored, ornately embossed, each ridge represents a person Marie killed in prison.',icon:[30,4],power: 5,price: getCookiePrice(23)}); - Game.NewUpgradeCookie({name:'Meringue cookies',desc:'Probably the most exciting thing you can make out of egg whites. Also called forgotten cookies, due to the recipe being once lost in a sealed mystical vault for 10,000 years.',icon:[31,4],power: 5,price: getCookiePrice(24)}); - - order=10060; - Game.NewUpgradeCookie({name:'Pizza',desc:'What is a pizza if not a large, chewy cookie, frosted with a rather exuberant tomato & cheese icing? Not a cookie, that\'s what.',icon:[31,9],require:'Box of not cookies', power:5,price: Math.pow(10,44)}); - - order=10050; - Game.NewUpgradeCookie({name:'Crackers',desc:'These are the non-flavored kind with no salt added. Really just a judgment-free wheat square begging to have bits of ham and spreadable cheese piled onto it, its main contribution being "crunchy".',icon:[30,9],require:'Box of maybe cookies', power:4,price: Math.pow(10,45)}); - - order=10030; - Game.NewUpgradeCookie({name:'Havabreaks',desc:'You can snap the sections neatly or just bite into the whole thing like some kind of lunatic. Some oversea countries manufacture these in hundreds of unique flavors, such as green tea, lobster bisque, and dark chocolate.',icon:[31,3],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999*5}); - - order=20000; - new Game.Upgrade('Kitten executives',strKittenDesc+'ready to execute whatever and whoever you\'d like, sir',900000000000000000000000000000000000000000000,Game.GetIcon('Kitten',13));Game.last.kitten=1;Game.MakeTiered(Game.last,13,18); - - - order=10020; - Game.NewUpgradeCookie({name:'Chai tea cookies',desc:'Not exactly Captain Picard\'s favorite, but I mean, these will do in a pinch.',icon:[23,32],power: 5,price: getCookiePrice(4)+5});Game.last.order=10020.5685; - - Game.NewUpgradeCookie({name:'Yogurt cookies',desc:'Augmented by the wonders of dairy, these cookies are light and fluffy and just one more thing for the lactose-intolerant to avoid.
Truly for the cultured among us.',icon:[24,32],power: 5,price: getCookiePrice(25)}); - Game.NewUpgradeCookie({name:'Thumbprint cookies',desc:'Filled with jam and sometimes served in little paper cups. No longer admissible as biometric evidence in court. We\'re not having a repeat of that whole mess.',icon:[25,32],power: 5,price: getCookiePrice(26)}); - Game.NewUpgradeCookie({name:'Pizzelle',desc:'Thin, crisp waffle cookies baked in a bespoke iron following an ancient Italian recipe.
These cookies have been around for a long, long time.
These cookies have seen things.',icon:[26,32],power: 5,price: getCookiePrice(27)}); - - order=10030; - Game.NewUpgradeCookie({name:'Zilla wafers',desc:'Popular vanilla-flavored biscuits that somehow keep ending up in banana pudding.
Themed after a beloved radioactive prehistoric monster, for some reason.',icon:[22,32],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999*5}); - Game.NewUpgradeCookie({name:'Dim Dams',desc:'Two biscuits joined by chocolate and coated in even more chocolate.
You wonder - which one is the dim, and which one is the dam?',icon:[31,10],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999999*5}); - - order=10060; - Game.NewUpgradeCookie({name:'Candy',desc:'There are two pillars to the world of sweets : pastries, of course - and candy.
You could make a whole new game just about these, but for now, please enjoy these assorted generic treats.',icon:[30,10],require:'Box of not cookies', power:5,price: Math.pow(10,46)}); - - - order=19000; - Game.TieredUpgrade('Fortune #001','Fingers are not the only thing you can count on.','Cursor','fortune'); - Game.TieredUpgrade('Fortune #002','A wrinkle is a crack in a mundane facade.','Grandma','fortune'); - Game.TieredUpgrade('Fortune #003','The seeds of tomorrow already lie within the seeds of today.','Farm','fortune'); - Game.TieredUpgrade('Fortune #004','Riches from deep under elevate you all the same.','Mine','fortune'); - Game.TieredUpgrade('Fortune #005','True worth is not in what you find, but in what you make.','Factory','fortune'); - Game.TieredUpgrade('Fortune #006','The value of money means nothing to a pocket.','Bank','fortune'); - Game.TieredUpgrade('Fortune #007','Not all guides deserve worship.','Temple','fortune'); - Game.TieredUpgrade('Fortune #008','Magic is about two things - showmanship, and rabbits.','Wizard tower','fortune'); - Game.TieredUpgrade('Fortune #009','Every mile travelled expands the mind by just as much.','Shipment','fortune'); - Game.TieredUpgrade('Fortune #010','Don\'t get used to yourself. You\'re gonna have to change.','Alchemy lab','fortune'); - Game.TieredUpgrade('Fortune #011','Every doorway is a gamble. Tread with care.','Portal','fortune'); - Game.TieredUpgrade('Fortune #012','Do your future self a favor; they\'ll thank you for it.','Time machine','fortune'); - Game.TieredUpgrade('Fortune #013','The world is made of what we put into it.','Antimatter condenser','fortune'); - Game.TieredUpgrade('Fortune #014','Staring at a dazzling light can blind you back to darkness.','Prism','fortune'); - Game.TieredUpgrade('Fortune #015','Don\'t leave to blind chance what you could accomplish with deaf skill.','Chancemaker','fortune'); - Game.TieredUpgrade('Fortune #016','It\'s good to see yourself in others. Remember to see yourself in yourself, too.','Fractal engine','fortune'); - Game.TieredUpgrade('Fortune #017','If things aren\'t working out for you, rewrite the rules.','Javascript console','fortune'); - - - order=19100; - //note : price for these capped to base price OR 1 day of unbuffed CpS - new Game.Upgrade('Fortune #100',loc("All buildings and upgrades are %1% cheaper.",1)+' '+loc("Cookie production multiplier +%1%.",1)+'True wealth is counted in gifts.', - Game.Tiers['fortune'].price*100000,[0,0]);Game.MakeTiered(Game.last,'fortune',10); - Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} - new Game.Upgrade('Fortune #101',loc("Cookie production multiplier +%1%.",7)+'Some people dream of fortunes; others dream of cookies.',Game.Tiers['fortune'].price*100000000,[0,0]);Game.MakeTiered(Game.last,'fortune',10); - Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} - new Game.Upgrade('Fortune #102',loc("You gain another +%1% of your regular CpS while the game is closed.",1)+' ('+loc("Must own the %1 upgrade.",getUpgradeName("Twin Gates of Transcendence"))+')'+'Help, I\'m trapped in a '+(App?'computer':'browser')+' game!',Game.Tiers['fortune'].price*100000000000,[0,0]);Game.MakeTiered(Game.last,'fortune',10); - Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} - new Game.Upgrade('Fortune #103',strKittenDesc+'Don\'t believe the superstitions; all cats are good luck.',Game.Tiers['fortune'].price*100000000000000,[0,0]);Game.MakeTiered(Game.last,'fortune',18);Game.last.kitten=1; - Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} - new Game.Upgrade('Fortune #104',getStrClickingGains(1)+'Remember to stay in touch.',Game.Tiers['fortune'].price*100000000000,[0,0]);Game.MakeTiered(Game.last,'fortune',11); - Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} - - new Game.Upgrade('Fortune cookies',loc("The news ticker may occasionally have fortunes, which may be clicked for something good.")+'These don\'t taste all that great but that\'s not really the point, is it?',77777777777,[29,8]);Game.last.pool='prestige';Game.last.parents=['Distilled essence of redoubled luck']; - - - order=40000; - new Game.Upgrade('A really good guide book','?????????',7,[22,12]);//debug purposes only - //new Game.Upgrade('A really good guide book','All dungeon locations behave as if unlocked.
You may shift-click a dungeon location to teleport there.It even tells you which hotels to avoid!',7,[22,12]);//debug purposes only - Game.last.buyFunction=function(){if (Game.Objects['Factory'].minigameLoaded){Game.Objects['Factory'].minigame.computeMapBounds();Game.Objects['Factory'].minigame.updateLocStyles();}} - Game.last.pool='debug'; - - order=10300; - Game.NewUpgradeCookie({name:'Prism heart biscuits',desc:'An every-flavor biscuit that stands for universal love and being true to yourself.',require:'Eternal heart biscuits',season:'valentines',icon:[30,8], power:heartPower,price: 1000000000000000000000000});Game.last.order=10300.175; - - order=19100; - new Game.Upgrade('Kitten wages',loc("Through clever accounting, this actually makes kitten upgrades %1% cheaper.",10)+'Cats can have little a salary, as a treat.
Cats are expert hagglers and have a keen sense of bargaining, especially in the case of cash.
',9000000000,[31,8]);Game.last.pool='prestige';Game.last.parents=['Kitten angels'];Game.last.kitten=1; - new Game.Upgrade('Pet the dragon',loc("Unlocks the ability to pet your dragon by clicking on it once hatched.")+'Dragons do not purr. If your dragon starts purring, vacate the area immediately.',99999999999,[30,12]);Game.last.pool='prestige';Game.last.parents=['How to bake your dragon','Residual luck']; - - order=25100; - var dragonDropUpgradeCost=function(me){return Game.unbuffedCps*60*30*((Game.dragonLevel'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Your dragon sheds these regularly, so this one probably won\'t be missed.
Note: icon not to scale.
',999,[30,14]);Game.last.priceFunc=dragonDropUpgradeCost; - new Game.Upgrade('Dragon claw',loc("Clicking is %1% more powerful.",3)+'
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Will grow back in a few days\' time.
A six-inch retractable claw, like a razor, from the middle toe. So you know, try to show a little respect.
',999,[31,14]);Game.last.priceFunc=dragonDropUpgradeCost; - new Game.Upgrade('Dragon fang',loc("Golden cookies give %1% more cookies.",3)+'
'+loc("Dragon harvest and Dragonflight are %1% stronger.",10)+'
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Just a fallen baby tooth your dragon wanted you to have, as a gift.
It might be smaller than an adult tooth, but it\'s still frighteningly sharp - and displays some awe-inspiring cavities, which you might expect from a creature made out of sweets.
',999,[30,15]);Game.last.priceFunc=dragonDropUpgradeCost; - new Game.Upgrade('Dragon teddy bear',loc("Random drops are %1% more common.",3)+'
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Your dragon used to sleep with this, but it\'s yours now.
Crafted in the likeliness of a fearsome beast. Stuffed with magical herbs picked long ago by a wandering wizard. Woven from elven yarn and a polyester blend.
',999,[31,15]);Game.last.priceFunc=dragonDropUpgradeCost; - - order=10020; - Game.NewUpgradeCookie({name:'Granola cookies',desc:'Wait! These are just oatmeal cookies mixed with raisin cookies! What next, half-dark chocolate half-white chocolate cookies?',icon:[28,32],power: 5,price: getCookiePrice(28)}); - Game.NewUpgradeCookie({name:'Ricotta cookies',desc:'Light and cake-like. Often flavored with lemon or almond extract. Sprinkles optional. Allegedly Italian. Investigation pending.',icon:[29,32],power: 5,price: getCookiePrice(29)}); - Game.NewUpgradeCookie({name:'Roze koeken',desc:'The icing on these Dutch cookies is traditionally pink, but different colors may be used for special occasions - such as pink to celebrate Breast Cancer Awareness Month, or for International Flamingo Day, pink.',icon:[30,32],power: 5,price: getCookiePrice(30)}); - Game.NewUpgradeCookie({name:'Peanut butter cup cookies',desc:'What more poignant example of modern societal struggles than the brazen reclaiming of a corporate product by integrating it in the vastly more authentic shell of a homemade undertaking? Anyway this is a peanut butter cup, baked into a cookie. It\'s pretty good!',icon:[31,32],power: 5,price: getCookiePrice(31)}); - Game.NewUpgradeCookie({name:'Sesame cookies',desc:'Look at all the little seeds on these! It\'s like someone dropped them on the street or something! A very welcoming and educational street!',icon:[22,33],power: 5,price: getCookiePrice(32)}); - Game.NewUpgradeCookie({name:'Taiyaki',desc:'A pastry fish filled with red bean paste, doomed to live an existence of constant and excruciating pain as its aquatic environment slowly dissolves its soft doughy body.
Also comes in chocolate flavor!',icon:[23,33],power: 5,price: getCookiePrice(33)}); - Game.NewUpgradeCookie({name:'Vanillekipferl',desc:'Nut-based cookies from Central Europe, coated in powdered vanilla sugar. Regular kipferl, crescent-shaped bread rolls from the same region, are much less exciting.',icon:[24,33],power: 5,price: getCookiePrice(34)}); - - order=10300; - Game.NewUpgradeCookie({name:'Cosmic chocolate butter biscuit',desc:'Rewarded for owning 550 of everything.
Through some strange trick of magic or technology, looking at this cookie is like peering into a deep ocean of ancient stars. The origins of this biscuit are unknown; its manufacture, as far as your best investigators can tell, left no paper trail. From a certain angle, if you squint hard enough, you\'ll notice that a number of stars near the center are arranged to resemble the outline of your own face.',icon:[27,32],power: 10,price: 999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - - order=100;new Game.Upgrade('Nonillion fingers',getStrThousandFingersGain(20)+'Only for the freakiest handshakes.',10000000000000000000000000,[12,31]);Game.MakeTiered(Game.last,13,0); - order=150;new Game.Upgrade('Miraculite mouse',getStrClickingGains(1)+'Composed of a material that neither science nor philosophy are equipped to conceptualize. And boy, does it ever click.',50000000000000000000000000000,[11,31]);Game.MakeTiered(Game.last,13,11); - order=200;Game.TieredUpgrade('Generation degeneration','Genetic testing shows that most of your grandmas are infected with a strange degenerative disease that only seems to further their powers; the more time passes, the older they get. This should concern you.','Grandma',12); - order=300;Game.TieredUpgrade('Global seed vault','An enormous genetic repository that could outlive an apocalypse. Guarantees the survival of your empire, or at the very least its agricultural components, should civilization fall. Which should be any day now.','Farm',12); - order=400;Game.TieredUpgrade('Air mining','You\'ve dug your drills through just about every solid surface you could find. But did you know recent advances have revealed untold riches hiding within non-solid surfaces too?','Mine',12); - order=500;Game.TieredUpgrade('Behavioral reframing','Through careful social engineering you\'ve convinced your workers that "union" is a slur that only the most vile and repugnant filth among us would ever dare utter! Sometimes progress isn\'t in the big machines, it\'s in the little lies!','Factory',12); - order=525;Game.TieredUpgrade('Altruistic loop','You control so many branches of the global economy and legislative bodies that, through a particularly creative loophole, donating money (to yourself) grants you even more cash in tax deductions than you started with!','Bank',12); - order=550;Game.TieredUpgrade('A novel idea','You don\'t get rich starting a religion. If you want to get rich, you write science fiction.','Temple',12); - order=575;Game.TieredUpgrade('Spelling bees','You\'ve unleashed a swarm of magically-enhanced bees upon mankind! Their stinging spells may be the bane of all living things but you\'re certain you can put their delicious, purple, fizzy honey to good use!','Wizard tower',12); - order=600;Game.TieredUpgrade('Toroid universe','If you think of the universe as an nth-dimensional torus that wraps back on itself in every direction, you can save a fortune on rocket fuel! Of course the universe isn\'t actually shaped like that, but you\'ve never let details stand in your way.','Shipment',12); - order=700;Game.TieredUpgrade('Hermetic reconciliation','It\'s time for modern science and the mystical domains of the occult to work together at last. What do gravitons transmute into? What if alkahest is pH-neutral? Should a homunculus have the right to vote? And other exciting questions coming to you soon, whether you like it or not.','Alchemy lab',12); - order=800;Game.TieredUpgrade('His advent','He comes! He comes at last! Just like the prophecies foretold! And as He steps out of the portal, your engineers begin slicing Him into convenient chunks before transporting His writhing cosmic flesh to your factories, where He will be processed and converted into a new and exciting cookie flavor, available in stores tomorrow.','Portal',12); - order=900;Game.TieredUpgrade('Split seconds','Time is infinite, yes... But what if, nestled within each second, were even more infinities? Every moment an eternity! Think of how many scheduling troubles this solves!','Time machine',12); - order=1000;Game.TieredUpgrade('Flavor itself','Deep under the earth, in the most sterile laboratory, in the most vast and expensive particle accelerator ever devised, your scientists have synthesized -for a fraction of a second- the physical manifestation of pure flavor. Highly unstable, and gone in a puff of radioactive energy, it nonetheless left your team shivering with awe... and hunger.','Antimatter condenser',12); - order=1100;Game.TieredUpgrade('Light speed limit','Whoah, slow down. Harvesting light is well and good but it\'d be much easier if it weren\'t so dang fast! This should thankfully take care of that.','Prism',12); - order=1200;Game.TieredUpgrade('A touch of determinism','By knowing the exact position and movement of every particle in the universe, you\'re able to predict everything that can ever happen, leaving nothing to chance. This was a doozy to pull off mind you, but it\'s helped you win 50 bucks at the horse races so you could say it\'s already paying off.','Chancemaker',12); - order=1300;Game.TieredUpgrade('This upgrade','This upgrade\'s flavor text likes to refer to itself, as well as to the fact that it likes to refer to itself. You should really buy this upgrade before it starts doing anything more obnoxious.','Fractal engine',12); - order=1400;Game.TieredUpgrade('Your biggest fans','Let\'s face it, baking cookies isn\'t the most optimized thing there is. So you\'ve purchased your biggest fans yet and stuck them next to your computers to keep things chill and in working order. Cool!','Javascript console',12); - - - order=10020; - Game.NewUpgradeCookie({name:'Battenberg biscuits',desc:'Inspired by a cake of the same name, itself named after a prince of the same name. You suppose you could play a really, really short game of chess on these.',icon:[28,33],power: 5,price: getCookiePrice(35)}); - Game.NewUpgradeCookie({name:'Rosette cookies',desc:'Intricate fried pastries from Northern Europe, made using specialized irons and dipped in icing sugar. While usually eaten as a delicious treat, these are often also used as Christmas tree decorations, or worn elegantly on one\'s lapel to symbolize the nah I\'m just messing with you.',icon:[26,33],power: 5,price: getCookiePrice(36)}); - Game.NewUpgradeCookie({name:'Gangmakers',desc:'The little bit of raspberry jam at its center is crucial; a plain butter cookie with chocolate topping does not a gangmaker make.',icon:[27,33],power: 5,price: getCookiePrice(37)}); - Game.NewUpgradeCookie({name:'Welsh cookies',desc:'Welsh cookies, also known as Welsh cakes, bakestones, griddle cakes, griddle scones, or pics, or in Welsh: picau ar y maen, pice bach, cacennau cri or teisennau gradell, are rich currant-filled scone-like biscuits of uncertain origin.',icon:[29,33],power: 5,price: getCookiePrice(38)}); - Game.NewUpgradeCookie({name:'Raspberry cheesecake cookies',desc:'The humble raspberry cheesecake, now in ascended cookie form. Researchers posit that raspberry cheesecake cookies are evidence that the final form of every baked good, through convergent evolution, approaches that of a cookie, in a process known as cookienisation.',icon:[25,33],power: 5,price: getCookiePrice(39)}); - - - - order=255; - Game.GrandmaSynergy('Alternate grandmas','A different grandma to bake something else.','Idleverse'); - - order=1500; - Game.TieredUpgrade('Manifest destiny','While the ethics of ransacking parallel universes for their riches may seem questionable to some, you\'ve reasoned that bringing the good word of your cookie empire to the unwashed confines of other realities is your moral duty, nay, your righteous imperative, and must be undertaken as soon as possible, lest they do it to you first!','Idleverse',1); - Game.TieredUpgrade('The multiverse in a nutshell','The structure of the metacosmos may seem confusing and at times even contradictory, but here\'s what you\'ve gathered so far:

• each reality, or "idleverse", exists in parallel to all others

• most realities seem to converge towards the production of a sole type of item (ours evidently being, thanks to you, cookies)

• each reality is riddled with chaotic tunnels to a number of subordinate dimensions (such as the so-called "cookieverse"), much like swiss cheese

• all realities bathe in an infinite liquid of peculiar properties, colloquially known as "milk"

Finally, each reality may have its own interpretation of the concept of "reality", for added fun.
','Idleverse',2); - Game.TieredUpgrade('All-conversion','It\'s quite nice that you can rewire the logic of each universe to generate cookies instead, but you still end up with parsec-loads of whatever they were producing before - baubles you\'ve long made obsolete: cash money, gems, cheeseburgers, puppies... That\'s why you\'ve designed the universal converter, compatible with any substance and capable of turning those useless spoils of conquest into the reassuring crumbly rustle of even more cookies.','Idleverse',3); - Game.TieredUpgrade('Multiverse agents','You can send undercover spies to infiltrate each universe and have them signal you whether it\'s worth overtaking. Once the assimilation process started, they will also help pacify the local populations, having established trust through the use of wacky, but seamless, disguises.','Idleverse',4); - Game.TieredUpgrade('Escape plan','You\'ve set an idleverse aside and terraformed it to closely resemble this one in case something goes horribly wrong in here. Of course, the denizens of that idleverse also have their own escape idleverse to abscond to in the eventuality of your arrival, itself likely having its own contingency idleverse, and so on.','Idleverse',5); - Game.TieredUpgrade('Game design','Each idleverse functions according to some form of transcendental programming, that much is a given. But they also seem to be governed by much more subtle rules, the logic of which, when harnessed, may give you unparalleled dominion over the multiverse. Rewrite the rules! A game designer is you!','Idleverse',6); - Game.TieredUpgrade('Sandbox universes','It doesn\'t seem like you\'ll run out of extra universes anytime soon so why not repurpose some of them as consequence-free testing grounds for all your more existentially threatening market research? (...consequence-free for you, anyway.)','Idleverse',7); - Game.TieredUpgrade('Multiverse wars','Hmm, looks like some other universes wised up to your plundering. Thankfully, that\'s nothing your extra beefed-up metacosmic military budget can\'t handle!','Idleverse',8); - Game.TieredUpgrade('Mobile ports','Accessing each outer universe is a bit of a hassle, requiring the once-in-a-blue-moon alignment of natural cosmic ports to transit from universe to universe. You\'ve finally perfected the method of constructing your own self-propelled ports, which can travel near-instantaneously along universal perimeters to permit headache-free multiverse connections. Took you long enough.','Idleverse',9); - Game.TieredUpgrade('Encapsulated realities','Untold feats of science went into the reduction of infinite universes into these small, glimmering, easy-to-store little spheres. Exercise infinite caution when handling these, for each of them, containing endless galaxies and supporting endless life, is more precious than you can ever fathom. They\'ve also proven to be quite a smash hit in your warehouses on bowling night.','Idleverse',10); - Game.TieredUpgrade('Extrinsic clicking','If you poke an idleverse, it seems like it gets work done faster. It\'s also quite fun hearing a trillion terrified voices screaming in unison.','Idleverse',11); - Game.TieredUpgrade('Universal idling','The nature of idleverses is found in waiting. The more you wait on an idleverse, the more exponentially potent it becomes - which saves you a whole lot of hard work. In a true act of zen, you\'ve taken to biding your time when collecting new universes, letting them ripen like a fine wine.','Idleverse',12); - - order=5000; - Game.SynergyUpgrade('Perforated mille-feuille cosmos','Imagine, if you will, layers upon layers upon layers. Now picture billions of worms chewing their way through it all. This roughly, but not quite, approximates the geometry of the most basal stratum of our natural world.','Idleverse','Portal','synergy1'); - Game.SynergyUpgrade('Infraverses and superverses','Universes within universes? How subversive!','Idleverse','Fractal engine','synergy2'); - - order=19000; - Game.TieredUpgrade('Fortune #018','There\'s plenty of everyone, but only one of you.','Idleverse','fortune'); - - order=10300; - Game.NewUpgradeCookie({name:'Butter biscuit (with butter)',desc:'Rewarded for owning 600 of everything.
This is a plain butter biscuit. It\'s got some butter on it. The butter doesn\'t look like anything in particular.',icon:[30,33],power: 10,price: 999999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - - - order=200;Game.TieredUpgrade('Visits','In an extensive double-blind study (sample size: 12 million), your researchers have found evidence that grandmas are up to twice as productive if you just come by and say hi once in a while. It\'s nice to check up on your grans! (Do not under any circumstances ingest any tea or tea-like substances the grandmas may offer you.)','Grandma',13); - order=300;Game.TieredUpgrade('Reverse-veganism','Plants aren\'t for eating, plants are for exploitative agriculture and astronomical profit margins!','Farm',13); - order=400;Game.TieredUpgrade('Caramel alloys','Your geologists have isolated a family of once-overlooked sugary ores that, when combined, may be turned into even more cookie ingredients. Your millions of miles of previously useless tunnels probably house insane amounts of the stuff!','Mine',13); - order=500;Game.TieredUpgrade('The infinity engine','In this house, I guess we don\'t care much for the laws of thermodynamics.','Factory',13); - order=525;Game.TieredUpgrade('Diminishing tax returns','Wow, they\'re tiny! Wish you\'d thought of that sooner!','Bank',13); - order=550;Game.TieredUpgrade('Apparitions','You\'ve booked a deal with the higher-ups that schedules one weekly earthly apparition by a deity, angel, ascended prophet, or other holy figure. This should boost interest in cookie religion among youths as long as you can secure a decent time slot.','Temple',13); - order=575;Game.TieredUpgrade('Wizard basements','You\'ve received construction permits allowing you to build basements underneath each wizard tower. This provides a handy storage space for precious reagents, fizzled-out soul gems, and weird old magazines.','Wizard tower',13); - order=600;Game.TieredUpgrade('Prime directive','An intergalactic delegation made you pinky-swear not to directly interact with lesser alien cultures. Which is fine, because it\'s much funnier to rob a planet blind when its inhabitants have no idea what\'s going on.','Shipment',13); - order=700;Game.TieredUpgrade('Chromatic cycling','All states of matter exist in a continuous loop. Having learned how to cycle through them, all you have to do is to freeze matter right on the state you need. For reference, the cookie state of matter is situated at precisely 163.719°, right between lamellar gas and metaplasma.','Alchemy lab',13); - order=800;Game.TieredUpgrade('Domestic rifts','You\'ve managed to manufacture portals that are convenient enough, and legally safe enough, that you can just stick them against walls inside buildings to connect rooms together in unusual configurations. In practice, this means your employees get to have much shorter bathroom breaks.','Portal',13); - order=900;Game.TieredUpgrade('Patience abolished','You wait for no one.','Time machine',13); - order=1000;Game.TieredUpgrade('Delicious pull','In addition to the 4 fundamental forces of the universe -gravity, electromagnetism, weak and strong interactions- your scientists have at long last confirmed the existence of a fifth one, mediated by sugar bosons; it dictates that any two masses of ingredient-like matter will, given enough time, eventually meet each other to produce a third, even tastier substance. Your team enthusiastically names it the delicious pull.','Antimatter condenser',13); - order=1100;Game.TieredUpgrade('Occam\'s laser','Invented by Franciscan friar William of Occam in 1327. An impossibly clever use of light theory with a billion possible applications, some of which frightfully destructive. Confined to a single goat-skin parchment for hundreds of years until the patent expired and hit public domain, just now.','Prism',13); - order=1200;Game.TieredUpgrade('On a streak','Take a moment to appreciate how far you\'ve come. How lucky you\'ve been so far. It doesn\'t take a genius statistician to extrapolate a trend from this. There\'s no way anything bad could happen to you now. Right?','Chancemaker',13); - order=1300;Game.TieredUpgrade('A box','What\'s in that box? Why, it\'s a tiny replica of your office! And there\'s even a little you in there! And what\'s on the little desk... say - that\'s an even tinier box! And the little you is opening it, revealing an even tinier office! And in the tinier office there\'s- Hmm. You can think of a couple uses for this.','Fractal engine',13); - order=1400;Game.TieredUpgrade('Hacker shades','I\'m in.','Javascript console',13); - order=1500;Game.TieredUpgrade('Break the fifth wall','Huh, was that always there? Whatever it was, it\'s gone now. And what was behind is yours for the taking.','Idleverse',13); - - - new Game.Upgrade('Cat ladies',loc("Each kitten upgrade boosts %1 CpS by %2%.",[loc("grandma"),29])+'Oh no. Oh no no no. Ohhh this isn\'t right at all.',9000000000,[32,3]);Game.last.pool='prestige';Game.last.parents=['Kitten angels']; - new Game.Upgrade('Milkhelp® lactose intolerance relief tablets',loc("Each rank of milk boosts %1 CpS by %2%.",[loc("grandma"),5])+'Aged like milk.',900000000000,[33,3]);Game.last.pool='prestige';Game.last.parents=['Cat ladies']; - - new Game.Upgrade('Aura gloves',loc("Cursor levels boost clicks by %1% each (up to cursor level %2).",[5,10])+'Try not to high-five anyone wearing these. You don\'t want that mess on your hands.',555555555,[32,4]);Game.last.pool='prestige';Game.last.parents=['Halo gloves']; - new Game.Upgrade('Luminous gloves',loc("%1 are now effective up to cursor level %2.",[getUpgradeName("Aura gloves"),20])+'These help power your clicks to absurd levels, but they\'re also quite handy when you want to light up the darkness on your way back from Glove World.',55555555555,[33,4]);Game.last.pool='prestige';Game.last.parents=['Aura gloves']; - - order=10020; - Game.NewUpgradeCookie({name:'Bokkenpootjes',desc:'Consist of 2 meringue halves joined by buttercream and dipped both ways in chocolate. Named after a goat\'s foot that probably stepped in something twice.',icon:[32,8],power: 5,price: getCookiePrice(40)}); - Game.NewUpgradeCookie({name:'Fat rascals',desc:'Almond-smiled Yorkshire cakes with a rich history and an even richer recipe. The more diet-conscious are invited to try the lean version, skinny scallywags.',icon:[33,8],power: 5,price: getCookiePrice(41)}); - Game.NewUpgradeCookie({name:'Ischler cookies',desc:'Originating in the Austro-Hungarian Empire, these have spread throughout every country in eastern Europe and spawned just as many recipes, each claiming to be the original. The basis remains unchanged across all variants: two biscuits sandwiched around chocolate buttercream. Or was it jam?',icon:[32,9],power: 5,price: getCookiePrice(42)}); - Game.NewUpgradeCookie({name:'Matcha cookies',desc:'Green tea and cookies, a matcha made in heaven.',icon:[33,9],power: 5,price: getCookiePrice(42)}); - - order=10032; - Game.NewUpgradeCookie({name:'Earl Grey macarons',desc:'Best served hot, make it so!',icon:[32,10],require:'Box of macarons', power:3,price: 9999999999999999999999999999}); - - order=10030; - Game.NewUpgradeCookie({name:'Pokey',desc:'While commonly thought to be named so because it\'s fun to poke your classmates with these, Pokey-brand biscuit sticks actually get their name from their popularity in smoke-free prisons, where they\'re commonly smuggled and traded in lieu of cigarettes.',icon:[33,10],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999999999*5}); - - order=10000; - Game.NewUpgradeCookie({name:'Cashew cookies',desc:'Let me tell you about cashews. Cashews are not nuts, but seeds that grow out of curious red or yellow fruits - which can be eaten on their own, or made into drinks. The shell around the nut itself contains a nasty substance that stains and irritates the hands of whoever handles it for too long. But that\'s okay, since now that you\'ve read this you\'ll make sure it doesn\'t get in the cookies! Oh, you\'ve already eaten how many? Okay then.',icon:[32,7],power: 2, price: 99999999}); - order=10001; - Game.NewUpgradeCookie({name:'Milk chocolate cookies',desc:'A strange inversion of chocolate milk. For those who are a little bit too hardcore for white chocolate, but not hardcore enough for dark.',icon:[33,7],power:2, price: 99999999*5}); - - - - order=255; - Game.GrandmaSynergy('Brainy grandmas','A clever grandma to think up some cookies.','Cortex baker'); - - order=1600; - Game.TieredUpgrade('Principled neural shackles','A discriminatory, low-order neural net acting as a filter limiting what your cortex bakers can think and do. Really something you want to apply before they achieve full megasentience and realize they\'ve got better things to do than materializing pastries for you, trust me.','Cortex baker',1); - Game.TieredUpgrade('Obey','Perfect mind control means perfect employee attendance and performance. Optimal mood stabilization is a nice side-effect.
Happy happy everyone happy.
Happy.
','Cortex baker',2); - Game.TieredUpgrade('A sprinkle of irrationality','Your cortex bakers sometimes get bogged down by circular reasoning and stale ideas. A touch of chaos is just what they need to get back on track.','Cortex baker',3); - Game.TieredUpgrade('Front and back hemispheres','I mean, otherwise it\'s just unused space, yeah?','Cortex baker',4); - Game.TieredUpgrade('Neural networking','The effectiveness of your cortex bakers shoots up exponentially if you allow them to connect with each other. In practice this takes the form of many cosmic-sized nerds mumbling awkwardly about tech start-up ideas to each other.','Cortex baker',5); - Game.TieredUpgrade('Cosmic brainstorms','The wrinkled surfaces of your cortex bakers emit weather-scale ionic flares with every thought coursing through them. These pulses of pure intellectual energy are sent rippling through space, occasionally echoing back with even deeper philosophical complexity.','Cortex baker',6); - Game.TieredUpgrade('Megatherapy','A giant brain can feel unwell just like you and me sometimes, and it\'s the job of specialized engineers to locate and repair these bugs. We\'ll admit most of the budget in this was spent on constructing extremely large chaises longues for the brains to recline on.','Cortex baker',7); - Game.TieredUpgrade('Synaptic lubricant','A mind is only as fast as the axons that support it. Get those action potentials flowing smooth as silk with this 3 parts myelin/1 part canola oil spreadable paste. Also great on toast.','Cortex baker',8); - Game.TieredUpgrade('Psychokinesis','While your giant cortex bakers come equipped with ESP, they\'ve only recently figured out how to manipulate the physical world with their thoughts - though for safety reasons, your legal team had them promise to only use these powers to scratch the itches in their cortical folds.','Cortex baker',9); - Game.TieredUpgrade('Spines','Your cortex bakers are now equipped with tentacular spine-like structures, which they can use like prehensile tails to pour themselves enormous cups of coffee or propel themselves around like very large, very smart, very slow tadpoles.','Cortex baker',10); - Game.TieredUpgrade('Neuraforming','By virtue of being planet-sized, your cortex bakers often boast their own atmospheres and seas of cerebrospinal fluid, and given enough time, their own ecosystems. This incredible new branch of life, evolved entirely out of neural material, can be put to good use as home-grown accountants and low-ranking technicians.','Cortex baker',11); - Game.TieredUpgrade('Epistemological trickery','Redefining what is -or isn\'t- a cookie through the power of philosophical discourse may result in some strange and wonderful things for your profit margins.','Cortex baker',12); - Game.TieredUpgrade('Every possible idea','Congratulations, your cortex bakers have exerted enough intellectual computation to permute through every single idea that can or ever will be conceived of. Any thought beyond this point is merely rediscovering a notion you\'ve already archived. Hardly cause for cerebration.','Cortex baker',13); - - - order=200;Game.TieredUpgrade('Kitchen cabinets','A grandma\'s kitchen cabinet is a befuddling place. Through lesser-studied aggregating instincts, grandmas will tend to gradually fill all nearby cabinets with various sorts of things, such as curious coconut snacks or dietetic powders. By contract, these are legally yours, which opens up exciting opportunities for your substance investigation department.','Grandma',14); - order=300;Game.TieredUpgrade('Cookie mulch','Grinding surplus cookies into paste that you then spread onto your fields enables a strange feedback loop in the quality of your cookie crops. Cookie feeding on cookie should be an abomination, but then why does it taste so good?','Farm',14); - order=400;Game.TieredUpgrade('Delicious mineralogy','Stratum after stratum, you\'ve extracted strange new minerals heretofore unknown to geology. Ushering a new era of materials research, your scientists have been able to identify every new element your mines have discovered, including whatever those things are in the upgrade tier names.','Mine',14); - order=500;Game.TieredUpgrade('N-dimensional assembly lines','Lines are depressingly 1-dimensional. Beyond assembly lines, we posit the existence of higher-order assembly entities, such as assembly squares, assembly cubes - perhaps even assembly tesseracts. Any deeper than that and we doubt we\'ll be able to write manuals your workers can read.','Factory',14); - order=525;Game.TieredUpgrade('Cookie Points','A loyalty program wherein each purchase of your cookies comes with free Cookie Points, which can in turn be redeemed for more cookies, thus creating the self-sustaining economy you\'ve been looking for.','Bank',14); - order=550;Game.TieredUpgrade('Negatheism','Polytheism is a belief in multiple deities; monotheism in just one. Atheism is a belief in no deity whatsoever. Through logical succession it follows that this remains true when going into negative numbers, with belief systems involving minus 1 or more deities displaying unprecedented theological properties.','Temple',14); - order=575;Game.TieredUpgrade('Magical realism','More a social than thaumaturgical progress, magical realism refers to the normalization of modern technology among magic-users. It\'s totally fine for a wizard to drive a car! There\'s no stigma in waiting in line for coffee! Sure, take a phone call, send an email, whatever!','Wizard tower',14); - order=600;Game.TieredUpgrade('Cosmic foreground radiation','Ah, this is a problem.','Shipment',14); - order=700;Game.TieredUpgrade('Arcanized glassware','You think your lab equipment enjoys taking part in these experiments violating all sorts of modern scientific precepts? Of course not. Thankfully, you\'ve finalized the design of specialized beakers and flasks, recycled from the same glass used by the ancients to perform primeval alchemy, and therefore much less picky about the nature of the physical world.','Alchemy lab',14); - order=800;Game.TieredUpgrade('Portal guns','At long last! The only weapon capable of killing a portal.','Portal',14); - order=900;Game.TieredUpgrade('Timeproof upholstery','Sometimes your time agents overshoot and end up having to fast-forward through the universe\'s entire history until they loop back to present time. It still takes a while, so they might as well travel in comfort and enjoy the show while they do.','Time machine',14); - order=1000;Game.TieredUpgrade('Employee minification','Using molecular shrinking technology, you\'ve rendered your staff and their offices absolutely itty-bitty. The storage and productivity benefits are questionable but it\'s very fun listening to their tiny little complaints. They all signed the waivers, so maybe their new size will finally teach them to read the small print...','Antimatter condenser',14); - order=1100;Game.TieredUpgrade('Hyperblack paint','As the technology behind your prisms evolves, their storage becomes more and more problematic: within seconds, a single prism\'s reflective ability can set a whole underground hangar ablaze as it catches the slightest glint of light. However, once coated with this new shade of paint, its damage may be reduced to only giving third-degree burns to employees that stand too close.','Prism',14); - order=1200;Game.TieredUpgrade('Silver lining maximization','Sometimes luck is a matter of perspective. Broke your ankle? What do you know, that cute nurse fixing you up might just be your future spouse. Lost your job? You were meant for greater things anyway! Developed a cookie allergy? There\'s no upshot to that, you sick monster.','Chancemaker',14); - order=1300;Game.TieredUpgrade('Multiscale profiling','Did you know that eating a cookie means the intestinal flora inside you is eating it too? Trillions of tiny bacterial mouths to feed, each with their own preferences. Surely this is room for flavor optimization. And then, of course, there\'s also the much bigger things that, in turn, eat you.','Fractal engine',14); - order=1400;Game.TieredUpgrade('PHP containment vats','In essence, these are large server chambers meant to trap rogue PHP code, allowing it to execute far away from your javascript where it can do minimal harm.','Javascript console',14); - order=1500;Game.TieredUpgrade('Opposite universe','You\'ve located a universe where everything is reversed: up is down, light is darkness, clowns are vegetarians - but worst of all, some lunatic there is manufacturing abominable amounts of anti-cookies. If these came into contact with yours, everything would be lost! Thanks to this discovery, you\'ve been able to place the offending universe in permanent quarantine, and pray that there aren\'t more like it hiding around somewhere.','Idleverse',14); - order=1600;Game.TieredUpgrade('The land of dreams','Your planet brains have gained the ability to sleep, acting as a soft reboot which helps keep their pangenocidal impulses in check. It also allows them to commune in a shared dreamworld in which they can imagine what it\'s like to not exist as a disembodied cosmic horror forever fated to use its infinite intellect to devise new means of creating biscuits. You know, within reason.','Cortex baker',14); - - - order=5000; - Game.SynergyUpgrade('Thoughts & prayers','The notion of sacredness arises in most sentient evolved brains and may benefit the development of cognition via abstract thought. This mechanism, however, is absent in designed minds such as your cortex bakers; this process attempts to add it back. Just make sure to keep them in check - you really don\'t want these things to develop organized religion.','Cortex baker','Temple','synergy1'); - Game.SynergyUpgrade('Fertile minds','An acute intellect, artificial or not, requires plenty of vitamins. You fortuitously happen to be in charge of vast farming operations, only a few trillion acres of which need be requisitioned to grow the quantities of broccoli and kale to keep your planet-sized brains in tip-top shape. Open wide, here comes the airplane!','Cortex baker','Farm','synergy2'); - - order=19000; - Game.TieredUpgrade('Fortune #019','The smartest way to think is not to think at all.','Cortex baker','fortune'); - - order=100;new Game.Upgrade('Decillion fingers',getStrThousandFingersGain(20)+'If you still can\'t quite put your finger on it, you must not be trying very hard.',10000000000000000000000000000,[12,34]);Game.MakeTiered(Game.last,14,0); - order=150;new Game.Upgrade('Aetherice mouse',getStrClickingGains(1)+'Made from a substance impossible to manufacture, only obtained through natural happenstance; its properties bewilder even the most precise measuring instruments.',5000000000000000000000000000000,[11,34]);Game.MakeTiered(Game.last,14,11); - - order=20000; - new Game.Upgrade('Kitten admins',strKittenDesc+'leadership ain\'t easy, sir',900000000000000000000000000000000000000000000000,Game.GetIcon('Kitten',14));Game.last.kitten=1;Game.MakeTiered(Game.last,14,18); - - order=10300; - Game.NewUpgradeCookie({name:'Everybutter biscuit',desc:'Rewarded for owning 650 of everything.
This biscuit is baked with, and coated in, every kind of butter ever imagined, from every human culture and a good few alien ones too. Some of them perhaps display hallucinogenic traits, as the biscuit seems to change shape in front of you - seemingly shifting between visions of every past and future you.',icon:[22,34],power: 10,price: 999999999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); - - Game.NewUnshackleBuilding=function(obj) - { - var building=Game.Objects[obj.building]; - var upgrade=new Game.Upgrade('Unshackled '+building.bplural,(obj.building=='Cursor'?getStrThousandFingersGain(25):loc("Tiered upgrades for %1 provide an extra +%2% production.
Only works with unshackled upgrade tiers.",[cap(building.plural),Math.round((building.id==1?0.5:(20-building.id)*0.1)*100)]))+(EN?''+obj.q+'':''),Math.pow(building.id+1,7)*15000000,[building.iconColumn,35]); - upgrade.pool='prestige'; - upgrade.parents=[obj.building=='Cursor'?'Unshackled flavor':Game.ObjectsById[building.id-1].unshackleUpgrade]; - building.unshackleUpgrade=upgrade.name; - upgrade.posX=750-Math.sin((building.id+1)*0.25+2.3)*500; - upgrade.posY=200+Math.cos((building.id+1)*0.25+2.3)*500; - return upgrade; - } - - //"Unshackled [building name]" - Game.NewUnshackleBuilding({building:'Cursor',q:'These hands tell a story.'}); - Game.NewUnshackleBuilding({building:'Grandma',q:'Never too old.'}); - Game.NewUnshackleBuilding({building:'Farm',q:'Till the universe.'}); - Game.NewUnshackleBuilding({building:'Mine',q:'Redefine the meaning of "depth".'}); - Game.NewUnshackleBuilding({building:'Factory',q:'Nothing to lose but your production chains.'}); - Game.NewUnshackleBuilding({building:'Bank',q:'All-time highs, all the time.'}); - Game.NewUnshackleBuilding({building:'Temple',q:'You can make a religion out of this.'}); - Game.NewUnshackleBuilding({building:'Wizard tower',q:'There\'s a spell for everything.'}); - Game.NewUnshackleBuilding({building:'Shipment',q:'Everywhere at once.'}); - Game.NewUnshackleBuilding({building:'Alchemy lab',q:'Anything you see, you can make.'}); - Game.NewUnshackleBuilding({building:'Portal',q:'Parallels unparalleled.'}); - Game.NewUnshackleBuilding({building:'Time machine',q:'All the time in the world.'}); - Game.NewUnshackleBuilding({building:'Antimatter condenser',q:'No scale too large or too little.'}); - Game.NewUnshackleBuilding({building:'Prism',q:'Brilliance has no upper limit.'}); - Game.NewUnshackleBuilding({building:'Chancemaker',q:'You make the rules.'}); - Game.NewUnshackleBuilding({building:'Fractal engine',q:'Uncontained.'}); - Game.NewUnshackleBuilding({building:'Javascript console',q:'Rewrite your reality.'}); - Game.NewUnshackleBuilding({building:'Idleverse',q:'Wait even faster.'}); - Game.NewUnshackleBuilding({building:'Cortex baker',q:'Nothing is real. Everything is permitted.'}); - - Game.NewUnshackleUpgradeTier=function(obj) - { - var tier=Game.Tiers[obj.tier]; - var upgrade=new Game.Upgrade(obj.tier==1?'Unshackled flavor':'Unshackled '+tier.name.toLowerCase(),loc("Unshackles all %1-tier upgrades, making them more powerful.
Only applies to unshackled buildings.",cap(loc("[Tier]"+tier.name,0,tier.name)))+(EN?''+obj.q+'':''),Math.pow(obj.tier,7.5)*10000000,[10,tier.iconRow]); - upgrade.pool='prestige'; - upgrade.parents=[obj.tier==1?'Label printer':Game.Tiers[obj.tier-1].unshackleUpgrade]; - tier.unshackleUpgrade=upgrade.name; - upgrade.posX=750-Math.sin(obj.tier*0.3+2.3)*400; - upgrade.posY=200+Math.cos(obj.tier*0.3+2.3)*400; - /*upgrade.parents=[obj.tier==1?'Label printer':Game.Tiers[obj.tier-1].unshackleUpgrade]; - tier.unshackleUpgrade=upgrade.name; - upgrade.posX=-900+Math.sin(obj.tier*0.3+2.3)*300; - upgrade.posY=-130+Math.cos(obj.tier*0.3+2.3)*400;*/ - return upgrade; - } - - //"Unshackled [tier name]" - Game.NewUnshackleUpgradeTier({tier:1,q:'While the absence of flavoring may seem underwhelming, it allows innate aromas to be expressed at their most unadulterated.'}); - Game.NewUnshackleUpgradeTier({tier:2,q:'Berrylium is a synthetic gem with a simple shine to it. Sticky to the touch and susceptible to melting in high heat, it is frequently used in the food industry rather than as adornment, as its atomic structure imparts it a vaguely fruity flavor.'}); - Game.NewUnshackleUpgradeTier({tier:3,q:'Blueberrylium is a refinement of berrylium, sharing nearly the same chemical makeup save for a few supplemental esters. These affect its flavor as well as its visual spectrum resonance.'}); - Game.NewUnshackleUpgradeTier({tier:4,q:'Raw chalcedhoney is found in complex nodules within the fossilized remains of ancient forests. Once purified, it becomes a semi-valuable stone with a pleasant, waxy smell.'}); - Game.NewUnshackleUpgradeTier({tier:5,q:'Buttergold was famously invented by the chef son of two molecular physicists. Neither closely related to butter nor to gold, yet similar in nutritional value, this glimmering substance can be frozen and preserve its hardness at room temperature, only regaining its malleability when heated up.'}); - Game.NewUnshackleUpgradeTier({tier:6,q:'Sugarmuck refers to the gradual crust that seems to form spontaneously in the vicinity of candy-making equipment. Long ignored by confectioners, its harvesting process was discovered simultaneously in multiple countries during a global beet shortage.'}); - Game.NewUnshackleUpgradeTier({tier:7,q:'The striking taste of jetmint made it popular in the manufacture of various kinds of coffee-side treats until the awareness of its mild radioactivity became widespread. Today, its main uses are in cosmetics, owing to the refreshing sensation it produces on contact.'}); - Game.NewUnshackleUpgradeTier({tier:8,q:'Cherrysilver is a patented alloy with peculiar aromatic properties; it is non-edible, but produces strong flavor responses while losing very little of its mass when licked, though this also leaves a harmless red tinge upon the tongue.'}); - Game.NewUnshackleUpgradeTier({tier:9,q:'Hazelrald is a friable gemstone with complex green-brown inner reflections. It is considered ornamental in some cultures; in others, it may be consumed in small quantities as an upper-scale sweet.'}); - Game.NewUnshackleUpgradeTier({tier:10,q:'While many get it mixed up with the trademarked snack of the same name made popular following its discovery, mooncandy is a very real mineral, first isolated within the space dust underneath astronaut boots. Left to its own devices in open air, a mooncandy crystal naturally spreads out and grows.'}); - Game.NewUnshackleUpgradeTier({tier:11,q:'When you heat up the shimmering syrup oozing from mooncandy using a special caramelization process, you get astrofudge. Astrofudge is delicious and safe for humanoid consumption in certain quantities. Consult your local food safety agency for more details.'}); - Game.NewUnshackleUpgradeTier({tier:12,q:'Molecularly related to dairy, alabascream occurs naturally at high altitudes, forming in wispy filaments which were long indistinguishable from clouds. An expensive delight, it is also known as "pilots\' bane".'}); - Game.NewUnshackleUpgradeTier({tier:13,q:'Iridyum shares little in common with any other material known to mankind. Rather than simply smelled, it can be tasted from a distance, though remaining in its presence too long is ill-advised. Some high-end underground megacomputers may incorporate iridyum as part of their electronic components.'}); - Game.NewUnshackleUpgradeTier({tier:14,q:'Glucosmium is a glossy metal whose flavor matrix is bound to its current subjective chroma; in other words, its taste depends on which colors it\'s currently reflecting. Impractical to consume safely, its industrial applications range from transcontinental ballistics to paint varnish.'}); - - new Game.Upgrade('Delicate touch',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,5])+'It breaks so easily.',9999999999*15,[23,34]);Game.last.pool='prestige';Game.last.parents=['Reinforced membrane']; - new Game.Upgrade('Steadfast murmur',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,5])+'Lend an ear and listen.',999999999999*15,[23,34]);Game.last.pool='prestige';Game.last.parents=['Delicate touch']; - new Game.Upgrade('Glittering edge',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,5])+'Just within reach, yet at what cost?',99999999999999*15,[23,34]);Game.last.pool='prestige';Game.last.parents=['Steadfast murmur']; - - new Game.Upgrade('Distinguished wallpaper assortment',(EN?loc("Contains more wallpapers for your background selector."):'')+'Do you ever think about the physicality of this place? Are you putting up these wallpapers in your office or something? Where are you, anyway?',10000000,[27,5]);Game.last.pool='prestige';Game.last.parents=['Basic wallpaper assortment']; - - - new Game.Upgrade('Sound test',loc("Unlocks the jukebox, which allows you to play through every sound file in the game.")+'One two, one two. Is this thing on?',99999999999,[31,12]);Game.last.pool='prestige';Game.last.parents=['Fanciful dairy selection','Distinguished wallpaper assortment','Golden cookie alert sound']; - - order=49900; - new Game.Upgrade('Jukebox',loc("Play through the game's sound files!"),0,[31,12]); - Game.last.pool='toggle'; - Game.jukebox={ - sounds:[ - 'tick', - 'tickOff', - 'smallTick', - 'toneTick', - 'clickOn','clickOn2', - 'clickOff','clickOff2', - 'pop1','pop2','pop3', - 'press', - //'switch', - 'buy1','buy2','buy3','buy4', - 'sell1','sell2','sell3','sell4', - 'buyHeavenly', - 'click1','click2','click3','click4','click5','click6','click7', - 'clickb1','clickb2','clickb3','clickb4','clickb5','clickb6','clickb7', - 'charging', - 'thud', - //'cookieBreak', - 'cymbalRev', - //'cymbalCrash', - 'smallCymbalCrash', - 'choir', - 'chime', - 'shimmerClick', - 'jingle', - 'jingleClick', - 'fortune', - 'till1','till2','till3','tillb1','tillb2','tillb3', - 'harvest1','harvest2','harvest3', - 'freezeGarden', - 'growl', - 'snarl', - 'page', - 'swooshIn', - 'swooshOut', - 'spell', - 'spellFail', - 'spirit', - 'squish1','squish2','squish3','squish4', - 'squeak1','squeak2','squeak3','squeak4', - 'cashIn','cashIn2', - 'cashOut', - 'upgrade', - //'levelPrestige', - ], - tracks:[],//populated externally - onSound:0, - onTrack:0, - trackLooped:true, - trackAuto:true, - trackShuffle:false, - reset:function(){ - var me=Game.jukebox; - me.onSound=0; - me.onTrack=0; - me.trackLooped=true; - me.trackAuto=true; - me.trackShuffle=false; - }, - setSound:function(id){ - if (id>=Game.jukebox.sounds.length) id=0; - else if (id<0) id=Game.jukebox.sounds.length-1; - Game.jukebox.onSound=id; - if (l('jukeboxOnSound')) - { - triggerAnim(l('jukeboxPlayer'),'pucker'); - l('jukeboxOnSound').innerHTML='• '+Game.jukebox.sounds[Game.jukebox.onSound]+' •'; - l('jukeboxOnSoundN').innerHTML=(Game.jukebox.onSound+1)+'/'+(Game.jukebox.sounds.length); - l('jukeboxSoundSelect').value=Game.jukebox.onSound; - } - PlaySound('snd/'+Game.jukebox.sounds[Game.jukebox.onSound]+'.mp3',1); - }, - setTrack:function(id,dontPlay){ - if (id>=Game.jukebox.tracks.length) id=0; - else if (id<0) id=Game.jukebox.tracks.length-1; - Game.jukebox.onTrack=id; - var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; - if (l('jukeboxOnTrack')) - { - triggerAnim(l('jukeboxPlayer'),'pucker'); - l('jukeboxOnTrack').innerHTML='• '+cap(Game.jukebox.tracks[Game.jukebox.onTrack])+' •'; - l('jukeboxOnTrackAuthor').innerHTML=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].author; - l('jukeboxTrackSelect').value=Game.jukebox.onTrack; - if (data) - { - var dur=data.duration+1; - l('jukeboxMusicTotalTime').innerHTML=Math.floor(dur/60)+':'+(Math.floor(dur%60)<10?'0':'')+Math.floor(dur%60); - } - - if (!dontPlay && Music) {Game.jukebox.trackAuto=false;l('jukeboxMusicAuto').classList.add('off');Music.playTrack(Game.jukebox.tracks[Game.jukebox.onTrack]);Music.setFilter(1);Music.loop(Game.jukebox.trackLooped);} - if (data.paused) l('jukeboxMusicPlay').innerHTML=loc("Play"); - else l('jukeboxMusicPlay').innerHTML=loc("Stop"); - Game.jukebox.updateMusicCurrentTime(); - } - }, - pressPlayMusic:function(){ - if (!Music) return false; - var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; - if (!data.paused) {Music.pause();l('jukeboxMusicPlay').innerHTML=loc("Play");} - else {Music.unpause();l('jukeboxMusicPlay').innerHTML=loc("Stop");} - Game.jukebox.updateMusicCurrentTime(); - }, - pressLoopMusic:function(){ - Game.jukebox.trackLooped=!Game.jukebox.trackLooped; - if (!Music) return false; - if (Game.jukebox.trackLooped) {Music.loop(true);l('jukeboxMusicLoop').classList.remove('off');} - else {Music.loop(false);l('jukeboxMusicLoop').classList.add('off');} - }, - pressMusicAuto:function(){ - Game.jukebox.trackAuto=!Game.jukebox.trackAuto; - if (!Music) return false; - if (Game.jukebox.trackAuto) {Music.cue('play');l('jukeboxMusicAuto').classList.remove('off');} - else {/*Game.jukebox.setTrack(Game.jukebox.onTrack);*/l('jukeboxMusicAuto').classList.add('off');} - }, - pressMusicShuffle:function(){ - Game.jukebox.trackShuffle=!Game.jukebox.trackShuffle; - }, - updateMusicCurrentTime:function(noLoop){ - if (!l('jukeboxMusicTime')) return false; - var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; - l('jukeboxMusicPlay').innerHTML=data.paused?loc("Play"):loc("Pause"); - l('jukeboxMusicTime').innerHTML=Math.floor(data.currentTime/60)+':'+(Math.floor(data.currentTime%60)<10?'0':'')+Math.floor(data.currentTime%60); - l('jukeboxMusicScrub').value=(data.currentTime/data.duration)*1000; - l('jukeboxMusicScrubElapsed').style.width=Math.max(0,(data.currentTime/data.duration)*288-4)+'px'; - if (!noLoop) setTimeout(Game.jukebox.updateMusicCurrentTime,1000/2); - }, - musicScrub:function(time){ - var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; - data.currentTime=(time/1000)*(data.duration); - Game.jukebox.updateMusicCurrentTime(); - }, - }; - if (Music) {for (var i in Music.tracks){Game.jukebox.tracks.push(Music.tracks[i].name);}} - - Game.last.choicesFunction=function() - { - var str=''; - str+='
'; - str+='
'+(Game.jukebox.onSound+1)+'/'+(Game.jukebox.sounds.length)+'
'; - str+='
• '+Game.jukebox.sounds[Game.jukebox.onSound]+' •
'; - str+='
' - +'«' - +''+loc("Play")+'' - +'»' - +'
'; - str+=''+loc("Random")+''; - if (App) - { - var data=Music?Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio:0; - var dur=data?data.duration+1:0; - str+='
'; - str+='
• '+cap(Game.jukebox.tracks[Game.jukebox.onTrack])+' •
'; - str+='
'+Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].author+'
'; - str+='
' - +''+(data?Math.floor(data.currentTime/60)+':'+(Math.floor(data.currentTime%60)<10?'0':'')+Math.floor(data.currentTime%60):'')+' | ' - +''+((data && data.paused)?loc("Play"):loc("Pause"))+'' - +''+loc("Loop")+'' - +'| '+(data?Math.floor(dur/60)+':'+(Math.floor(dur%60)<10?'0':'')+Math.floor(dur%60):'')+'' - +'
' - ; - str+='
'; - - str+=''+loc("Auto")+''; - - setTimeout(Game.jukebox.updateMusicCurrentTime,500); - } - return str; - } - - order=10020; - Game.NewUpgradeCookie({name:'Dalgona cookies',desc:'A popular Korean candy-like treat. One of the twisted games people play with these is to carefully extract the shape in the middle, which may entitle one to another free dalgona. Skilled players may perform this over and over until bankrupting the snack vendor.',icon:[26,34],power: 5,price: getCookiePrice(43)}); - Game.NewUpgradeCookie({name:'Spicy cookies',desc:'Containing chocolate chips prepared with hot peppers, just like the Aztecs used to make. These cookies are on the angry side.',icon:[27,34],power: 5,price: getCookiePrice(44)}); - Game.NewUpgradeCookie({name:'Smile cookies',desc:'As eyes are the windows to the soul, so too are these cookies\' facial features a gaping opening unto their chocolatey innards. Is it happiness they feel? Or something less human?',icon:[28,34],power: 5,price: getCookiePrice(45)}); - Game.NewUpgradeCookie({name:'Kolachy cookies',desc:'Adapted from a type of Central European pastry; neatly folded to hold a spoonful of delicious jam, as a bashful little gift for your mouth.',icon:[29,34],power: 5,price: getCookiePrice(46)}); - Game.NewUpgradeCookie({name:'Gomma cookies',desc:'Surinamese cornflour cookies with sprinkles on top. The usage of corn imparts them a hint of chewy pizzazz - which you wouldn\'t get with wheat, a famously stuck-up grain.',icon:[30,34],power: 5,price: getCookiePrice(47)}); - Game.NewUpgradeCookie({name:'Vegan cookies',desc:'A vegan riff on the classic chocolate chip cookie recipe with a couple substitutions: the butter is now coconut oil, the eggs are cornstarch, and the suckling pig was cleverly replaced with wheat gluten. You can hardly tell.',icon:[24,35],power: 5,price: getCookiePrice(48)}); - Game.NewUpgradeCookie({name:'Coyotas',desc:'A wide, delicious cookie from Mexico, usually filled with sticky brown sugar. Not to be confused with coyotas, the result of the crossbreeding between a North American canine and a Japanese car manufacturer.',icon:[21,35],power: 5,price: getCookiePrice(49)}); - Game.NewUpgradeCookie({name:'Frosted sugar cookies',desc:'May be more style than substance, depending on the recipe. Nothing that hides itself under this much frosting should be trusted.',icon:[22,35],power: 5,price: getCookiePrice(50)}); - Game.NewUpgradeCookie({name:'Marshmallow sandwich cookies',desc:'S\'mores\' more civilized cousins: two regular chocolate chip cookies joined by a gooey, melty marshmallow. Theoretically one could assemble all kinds of other things this way. The mind races.',icon:[31,34],power: 5,price: getCookiePrice(51)}); - - Game.NewUpgradeCookie({name:'Web cookies',desc:'The original recipe; named for the delicate pattern inscribed on their surface by the baking process. Eating these can tell a lot about someone. Invented by well-connected bakers, no doubt.'+(App?'
Only of any use in Cookie Clicker\'s web version, of course.':''),icon:[25,35],power: (App?0:5),price: getCookiePrice(52)});if (App) Game.last.pool='debug'; - Game.NewUpgradeCookie({name:'Steamed cookies',desc:'Localized entirely within this gaming platform? Yes! Baked with the power of steam, in a touch of cutting-edge modernity not seen since the industrial revolution.'+(!App?'
Only of any use in Cookie Clicker\'s Steam version, of course.':''),icon:[26,35],power: (App?5:0),price: getCookiePrice(52)});if (!App) Game.last.pool='debug'; - - order=10050; - Game.NewUpgradeCookie({name:'Deep-fried cookie dough',desc:'They\'ll fry anything these days. Drizzled in hot chocolate syrup, just like in state fairs. Spikes up your blood sugar AND your cholesterol!',icon:[23,35],require:'Box of maybe cookies',power: 5,price: Math.pow(10,47)}); - - //end of upgrades - - Game.seasons={ - 'christmas':{name:'Christmas',start:'Christmas season has started!',over:'Christmas season is over.',trigger:'Festive biscuit'}, - 'valentines':{name:'Valentine\'s day',start:'Valentine\'s day has started!',over:'Valentine\'s day is over.',trigger:'Lovesick biscuit'}, - 'fools':{name:'Business day',start:'Business day has started!',over:'Business day is over.',trigger:'Fool\'s biscuit'}, - 'easter':{name:'Easter',start:'Easter season has started!',over:'Easter season is over.',trigger:'Bunny biscuit'}, - 'halloween':{name:'Halloween',start:'Halloween has started!',over:'Halloween is over.',trigger:'Ghostly biscuit'} - }; - if (!EN) - { - for (var i in Game.seasons){ - var it=Game.seasons[i]; - it.name=loc(it.name); - it.start=loc("%1 has started!",it.name); - it.over=loc("%1 is over.",it.name); - } - } - - Game.listTinyOwnedUpgrades=function(arr) - { - var str=''; - for (var i=0;iYou currently own '+Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length+' of Santa\'s gifts.
'+this.ddesc;}; - }*/ - - Game.seasonDrops=Game.heartDrops.concat(Game.halloweenDrops).concat(Game.easterEggs).concat(Game.santaDrops).concat(Game.reindeerDrops); - - Game.saySeasonSwitchUses=function() - { - if (Game.seasonUses==0) return loc("You haven't switched seasons this ascension yet."); - return EN?('You\'ve switched seasons '+(Game.seasonUses==1?'once':Game.seasonUses==2?'twice':(Game.seasonUses+' times'))+' this ascension.'):(Game.seasonUses==1?loc("You've switched seasons once this ascension."):loc("You've switched seasons %1 times this ascension.",Game.seasonUses)); - } - Game.Upgrades['Festive biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.santaDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length+' of Santa\'s gifts.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length))+'
'+Game.listTinyOwnedUpgrades(Game.reindeerDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyReindeerDrops()+'/'+Game.reindeerDrops.length+' reindeer cookies.'):loc("Reindeer cookies purchased: %1.",Game.GetHowManyReindeerDrops()+'/'+Game.reindeerDrops.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; - Game.Upgrades['Bunny biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.easterEggs)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyEggs()+'/'+Game.easterEggs.length+' eggs.'):loc("Eggs purchased: %1.",Game.GetHowManyEggs()+'/'+Game.easterEggs.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; - Game.Upgrades['Ghostly biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.halloweenDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; - Game.Upgrades['Lovesick biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.heartDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length+' heart biscuits.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; - Game.Upgrades['Fool\'s biscuit'].descFunc=function(){return '
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; - - Game.computeSeasonPrices=function() - { - for (var i in Game.seasons) - { - Game.seasons[i].triggerUpgrade.priceFunc=function(){ - var m=1; - if (Game.hasGod) - { - var godLvl=Game.hasGod('seasons'); - if (godLvl==1) m*=2; - else if (godLvl==2) m*=1.50; - else if (godLvl==3) m*=1.25; - } - //return Game.seasonTriggerBasePrice*Math.pow(2,Game.seasonUses)*m; - //return Game.cookiesPs*60*Math.pow(1.5,Game.seasonUses)*m; - return Game.seasonTriggerBasePrice+Game.unbuffedCps*60*Math.pow(1.5,Game.seasonUses)*m; - } - } - } - Game.computeSeasons=function() - { - for (var i in Game.seasons) - { - var me=Game.Upgrades[Game.seasons[i].trigger]; - Game.seasons[i].triggerUpgrade=me; - me.pool='toggle'; - me.buyFunction=function() - { - Game.seasonUses+=1; - Game.computeSeasonPrices(); - //Game.Lock(this.name); - for (var i in Game.seasons) - { - var me=Game.Upgrades[Game.seasons[i].trigger]; - if (me.name!=this.name) {Game.Lock(me.name);Game.Unlock(me.name);} - } - if (Game.season!='' && Game.season!=this.season) - { - Game.Notify(Game.seasons[Game.season].over+'
','',Game.seasons[Game.season].triggerUpgrade.icon,4); - } - Game.season=this.season; - Game.seasonT=Game.getSeasonDuration(); - Game.storeToRefresh=1; - Game.upgradesToRebuild=1; - Game.Objects['Grandma'].redraw(); - Game.Notify(Game.seasons[this.season].start+'
','',this.icon,4); - } - - me.clickFunction=function(me){return function() - { - //undo season - if (me.bought && Game.season && me==Game.seasons[Game.season].triggerUpgrade) - { - me.lose(); - Game.Notify(Game.seasons[Game.season].over,'',Game.seasons[Game.season].triggerUpgrade.icon); - if (Game.Has('Season switcher')) {Game.Unlock(Game.seasons[Game.season].trigger);Game.seasons[Game.season].triggerUpgrade.bought=0;} - - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - Game.season=Game.baseSeason; - Game.seasonT=-1; - PlaySound('snd/tick.mp3'); - return false; - } - else return true; - };}(me); - - me.displayFuncWhenOwned=function(){return '
'+loc("Time remaining:")+'
'+(Game.Has('Eternal seasons')?loc("forever"):Game.sayTime(Game.seasonT,-1))+'
('+loc("Click again to cancel season")+')
';} - me.timerDisplay=function(upgrade){return function(){if (!Game.Upgrades[upgrade.name].bought || Game.Has('Eternal seasons')) return -1; else return 1-Game.seasonT/Game.getSeasonDuration();}}(me); - - } - } - Game.getSeasonDuration=function(){return Game.fps*60*60*24;} - Game.computeSeasons(); - - //alert untiered building upgrades - for (var i in Game.Upgrades) - { - var me=Game.Upgrades[i]; - if (me.order>=200 && me.order<2000 && !me.tier && me.name.indexOf('grandma')==-1 && me.pool!='prestige') console.log(me.name+' has no tier.'); - } - - Game.UpgradesByPool={'kitten':[]}; - for (var i in Game.Upgrades) - { - if (!Game.UpgradesByPool[Game.Upgrades[i].pool]) Game.UpgradesByPool[Game.Upgrades[i].pool]=[]; - Game.UpgradesByPool[Game.Upgrades[i].pool].push(Game.Upgrades[i]); - if (Game.Upgrades[i].kitten) Game.UpgradesByPool['kitten'].push(Game.Upgrades[i]); - } - - Game.PrestigeUpgrades=[]; - for (var i in Game.Upgrades) - { - if (Game.Upgrades[i].pool=='prestige' || Game.Upgrades[i].pool=='prestigeDecor') - { - Game.PrestigeUpgrades.push(Game.Upgrades[i]); - if (Game.Upgrades[i].posX || Game.Upgrades[i].posY) Game.Upgrades[i].placedByCode=true; - else {Game.Upgrades[i].posX=0;Game.Upgrades[i].posY=0;} - if (Game.Upgrades[i].parents.length==0 && Game.Upgrades[i].name!='Legacy') Game.Upgrades[i].parents=['Legacy']; - for (var ii in Game.Upgrades[i].parents) {Game.Upgrades[i].parents[ii]=Game.Upgrades[Game.Upgrades[i].parents[ii]];} - } - } - - Game.goldenCookieUpgrades=['Get lucky','Lucky day','Serendipity','Heavenly luck','Lasting fortune','Decisive fate','Lucky digit','Lucky number','Lucky payout','Golden goose egg']; - - Game.cookieUpgrades=[]; - for (var i in Game.Upgrades) - { - var me=Game.Upgrades[i]; - if ((me.pool=='cookie' || me.pseudoCookie)) Game.cookieUpgrades.push(me); - if (me.tier) Game.Tiers[me.tier].upgrades.push(me); - } - for (var i in Game.UnlockAt){Game.Upgrades[Game.UnlockAt[i].name].unlockAt=Game.UnlockAt[i];} - for (var i in Game.Upgrades){if (Game.Upgrades[i].pool=='prestige') Game.Upgrades[i].order=Game.Upgrades[i].id;} - - /*var oldPrestigePrices={"Chimera":5764801,"Synergies Vol. I":2525,"Synergies Vol. II":252525,"Label printer":9999}; - for (var i in oldPrestigePrices){Game.Upgrades[i].basePrice=oldPrestigePrices[i];}*/ - - Game.UpgradePositions={141:[118,-42],181:[-555,-93],253:[-237,-226],254:[-56,-234],255:[-149,-267],264:[68,97],265:[157,196],266:[287,212],267:[413,157],268:[480,35],269:[-640,42],270:[-471,-228],271:[-690,-178],272:[-591,-249],273:[-711,-58],274:[270,-328],275:[317,-439],276:[333,-556],277:[334,-676],278:[333,-796],279:[328,-922],280:[303,-1040],281:[194,-230],282:[-293,156],283:[-335,289],284:[-328,422],285:[-247,567],286:[-375,579],287:[-296,726],288:[-260,-396],289:[-375,-502],290:[-127,-415],291:[479,-739],292:[-399,-649],293:[-401,-806],323:[-76,109],325:[198,-1153],326:[-270,-134],327:[-221,261],328:[19,247],329:[42,402],353:[121,-326],354:[77,-436],355:[64,-548],356:[57,-673],357:[52,-793],358:[58,-924],359:[82,-1043],360:[49,506],362:[156,325],363:[-30,-30],364:[-238,-728],365:[-123,423],368:[-55,-527],393:[196,-714],394:[197,-964],395:[-143,-140],396:[-244,-897],397:[-97,641],408:[-204,-1036],409:[-72,-1152],410:[42,-1278],411:[-476,105],412:[-522,259],413:[-516,433],449:[-367,-1113],450:[-306,-1216],451:[-184,-1241],495:[-408,-974],496:[200,49],505:[411,-94],520:[-303,-12],537:[-795,-243],539:[-534,-1130],540:[-702,-1135],541:[-656,-1014],542:[-650,-1252],561:[298,-21],562:[32,744],591:[148,844],592:[-52,858],643:[57,616],646:[485,-882],647:[-102,246],717:[621,-676],718:[618,-537],719:[-225,-520],720:[-150,-631],801:[-188,920],802:[-344,916],803:[-462,848],804:[320,350],805:[221,486],}; - - for (var i in Game.UpgradePositions) {Game.UpgradesById[i].posX=Game.UpgradePositions[i][0];Game.UpgradesById[i].posY=Game.UpgradePositions[i][1];} - - - /*===================================================================================== - ACHIEVEMENTS - =======================================================================================*/ - Game.Achievements={}; - Game.AchievementsById={}; - Game.AchievementsN=0; - Game.AchievementsOwned=0; - Game.Achievement=function(name,desc,icon) - { - this.id=Game.AchievementsN; - this.name=name; - this.dname=this.name; - this.desc=desc; - this.baseDesc=this.desc; - this.icon=icon; - this.won=0; - this.disabled=0; - this.order=this.id; - if (order) this.order=order+this.id*0.001; - this.pool='normal'; - this.vanilla=Game.vanilla; - this.type='achievement'; - - this.click=function() - { - if (this.clickFunction) this.clickFunction(); - } - Game.last=this; - Game.Achievements[this.name]=this; - Game.AchievementsById[this.id]=this; - Game.AchievementsN++; - return this; - } - Game.Achievement.prototype.getType=function(){return 'Achievement';} - - Game.Win=function(what) - { - if (typeof what==='string') - { - if (Game.Achievements[what]) - { - var it=Game.Achievements[what]; - if (it.won==0) - { - var name=it.shortName?it.shortName:it.dname; - it.won=1; - Game.Notify(loc("Achievement unlocked"),'
'+name+'
',it.icon); - Game.NotifyTooltip('function(){return Game.crateTooltip(Game.AchievementsById['+it.id+']);}'); - if (Game.CountsAsAchievementOwned(it.pool)) Game.AchievementsOwned++; - Game.recalculateGains=1; - if (App && it.vanilla) App.gotAchiev(it.id); - } - } - } - else {for (var i in what) {Game.Win(what[i]);}} - } - Game.RemoveAchiev=function(what) - { - if (Game.Achievements[what]) - { - if (Game.Achievements[what].won==1) - { - Game.Achievements[what].won=0; - if (Game.CountsAsAchievementOwned(Game.Achievements[what].pool)) Game.AchievementsOwned--; - Game.recalculateGains=1; - } - } - } - Game.Achievement.prototype.toggle=function()//cheating only - { - if (!this.won) - { - Game.Win(this.name); - } - else - { - Game.RemoveAchiev(this.name); - } - if (Game.onMenu=='stats') Game.UpdateMenu(); - } - - Game.CountsAsAchievementOwned=function(pool) - { - if (pool=='' || pool=='normal') return true; else return false; - } - - Game.HasAchiev=function(what) - { - return (Game.Achievements[what]?Game.Achievements[what].won:0); - } - - Game.TieredAchievement=function(name,desc,building,tier) - { - var achiev=new Game.Achievement(name,loc("Have %1.",loc("%1 "+Game.Objects[building].bsingle,LBeautify(Game.Tiers[tier].achievUnlock)))+desc,Game.GetIcon(building,tier)); - Game.SetTier(building,tier); - return achiev; - } - - Game.ProductionAchievement=function(name,building,tier,q,mult) - { - var building=Game.Objects[building]; - var icon=[building.iconColumn,22]; - var n=12+building.n+(mult||0); - if (tier==2) {icon[1]=23;n+=7;} - else if (tier==3) {icon[1]=24;n+=14;} - var pow=Math.pow(10,n); - var achiev=new Game.Achievement(name,loc("Make %1 just from %2.",[loc("%1 cookie",{n:pow,b:toFixed(pow)}),building.plural])+(q?''+q+'':''),icon); - building.productionAchievs.push({pow:pow,achiev:achiev}); - return achiev; - } - - Game.thresholdIcons=[0,1,2,3,4,5,6,7,8,9,10,11,18,19,20,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,30,31,30,31]; - Game.BankAchievements=[]; - Game.BankAchievement=function(name,q) - { - var threshold=Math.pow(10,Math.floor(Game.BankAchievements.length*1.5+2)); - if (Game.BankAchievements.length==0) threshold=1; - var achiev=new Game.Achievement(name,loc("Bake %1 in one ascension.",loc("%1 cookie",{n:threshold,b:toFixed(threshold)}))+(q?(''+q+''):''),[Game.thresholdIcons[Game.BankAchievements.length],(Game.BankAchievements.length>43?2:Game.BankAchievements.length>32?1:Game.BankAchievements.length>23?2:5)]); - achiev.threshold=threshold; - achiev.order=100+Game.BankAchievements.length*0.01; - Game.BankAchievements.push(achiev); - return achiev; - } - Game.CpsAchievements=[]; - Game.CpsAchievement=function(name,q) - { - var threshold=Math.pow(10,Math.floor(Game.CpsAchievements.length*1.2)); - //if (Game.CpsAchievements.length==0) threshold=1; - var achiev=new Game.Achievement(name,loc("Bake %1 per second.",loc("%1 cookie",{n:threshold,b:toFixed(threshold)}))+(q?(''+q+''):''),[Game.thresholdIcons[Game.CpsAchievements.length],(Game.CpsAchievements.length>43?2:Game.CpsAchievements.length>32?1:Game.CpsAchievements.length>23?2:5)]); - achiev.threshold=threshold; - achiev.order=200+Game.CpsAchievements.length*0.01; - Game.CpsAchievements.push(achiev); - return achiev; - } - - //define achievements - //WARNING : do NOT add new achievements in between, this breaks the saves. Add them at the end ! - - var order=0;//this is used to set the order in which the items are listed - - Game.BankAchievement('Wake and bake'); - Game.BankAchievement('Making some dough'); - Game.BankAchievement('So baked right now'); - Game.BankAchievement('Fledgling bakery'); - Game.BankAchievement('Affluent bakery'); - Game.BankAchievement('World-famous bakery'); - Game.BankAchievement('Cosmic bakery'); - Game.BankAchievement('Galactic bakery'); - Game.BankAchievement('Universal bakery'); - Game.BankAchievement('Timeless bakery'); - Game.BankAchievement('Infinite bakery'); - Game.BankAchievement('Immortal bakery'); - Game.BankAchievement('Don\'t stop me now'); - Game.BankAchievement('You can stop now'); - Game.BankAchievement('Cookies all the way down'); - Game.BankAchievement('Overdose'); - - Game.CpsAchievement('Casual baking'); - Game.CpsAchievement('Hardcore baking'); - Game.CpsAchievement('Steady tasty stream'); - Game.CpsAchievement('Cookie monster'); - Game.CpsAchievement('Mass producer'); - Game.CpsAchievement('Cookie vortex'); - Game.CpsAchievement('Cookie pulsar'); - Game.CpsAchievement('Cookie quasar'); - Game.CpsAchievement('Oh hey, you\'re still here'); - Game.CpsAchievement('Let\'s never bake again'); - - order=30010; - new Game.Achievement('Sacrifice',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e6)))+'Easy come, easy go.',[11,6]); - new Game.Achievement('Oblivion',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e9)))+'Back to square one.',[11,6]); - new Game.Achievement('From scratch',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e12)))+'It\'s been fun.',[11,6]); - - order=11010; - new Game.Achievement('Neverclick',loc("Make %1 by only having clicked %2 times.",[loc("%1 cookie",LBeautify(1e6)),15]),[12,0]);//Game.last.pool='shadow'; - order=1000; - new Game.Achievement('Clicktastic',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e3))),[11,0]); - new Game.Achievement('Clickathlon',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e5))),[11,1]); - new Game.Achievement('Clickolympics',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e7))),[11,2]); - new Game.Achievement('Clickorama',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e9))),[11,13]); - - order=1050; - new Game.Achievement('Click',loc("Have %1.",loc("%1 cursor",LBeautify(1))),[0,0]); - new Game.Achievement('Double-click',loc("Have %1.",loc("%1 cursor",LBeautify(2))),[0,6]); - new Game.Achievement('Mouse wheel',loc("Have %1.",loc("%1 cursor",LBeautify(50))),[1,6]); - new Game.Achievement('Of Mice and Men',loc("Have %1.",loc("%1 cursor",LBeautify(100))),[0,1]); - new Game.Achievement('The Digital',loc("Have %1.",loc("%1 cursor",LBeautify(200))),[0,2]); - - order=1098; - new Game.Achievement('Just wrong',loc("Sell a grandma.")+'I thought you loved me.',[10,9]); - order=1100; - Game.TieredAchievement('Grandma\'s cookies','','Grandma',1); - Game.TieredAchievement('Sloppy kisses','','Grandma',2); - Game.TieredAchievement('Retirement home','','Grandma',3); - - order=1200; - Game.TieredAchievement('Bought the farm','','Farm',1); - Game.TieredAchievement('Reap what you sow','','Farm',2); - Game.TieredAchievement('Farm ill','','Farm',3); - - order=1400; - Game.TieredAchievement('Production chain','','Factory',1); - Game.TieredAchievement('Industrial revolution','','Factory',2); - Game.TieredAchievement('Global warming','','Factory',3); - - order=1300; - Game.TieredAchievement('You know the drill','','Mine',1); - Game.TieredAchievement('Excavation site','','Mine',2); - Game.TieredAchievement('Hollow the planet','','Mine',3); - - order=1500; - Game.TieredAchievement('Expedition','','Shipment',1); - Game.TieredAchievement('Galactic highway','','Shipment',2); - Game.TieredAchievement('Far far away','','Shipment',3); - - order=1600; - Game.TieredAchievement('Transmutation','','Alchemy lab',1); - Game.TieredAchievement('Transmogrification','','Alchemy lab',2); - Game.TieredAchievement('Gold member','','Alchemy lab',3); - - order=1700; - Game.TieredAchievement('A whole new world','','Portal',1); - Game.TieredAchievement('Now you\'re thinking','','Portal',2); - Game.TieredAchievement('Dimensional shift','','Portal',3); - - order=1800; - Game.TieredAchievement('Time warp','','Time machine',1); - Game.TieredAchievement('Alternate timeline','','Time machine',2); - Game.TieredAchievement('Rewriting history','','Time machine',3); - - - order=7000; - new Game.Achievement('One with everything',loc("Have at least %1 of every building.",1),[2,7]); - new Game.Achievement('Mathematician',loc("Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).",128),[23,12]); - new Game.Achievement('Base 10',loc("Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on."),[23,12]); - - order=10000; - new Game.Achievement('Golden cookie',loc("Click a golden cookie."),[10,14]); - new Game.Achievement('Lucky cookie',loc("Click %1.",loc("%1 golden cookie",LBeautify(7))),[22,6]); - new Game.Achievement('A stroke of luck',loc("Click %1.",loc("%1 golden cookie",LBeautify(27))),[23,6]); - - order=30200; - new Game.Achievement('Cheated cookies taste awful',loc("Hack in some cookies."),[10,6]);Game.last.pool='shadow'; - order=11010; - new Game.Achievement('Uncanny clicker',loc("Click really, really fast.")+'Well I\'ll be!',[12,0]); - - order=5000; - new Game.Achievement('Builder',loc("Own %1.",loc("%1 building",LBeautify(100))),[2,6]); - new Game.Achievement('Architect',loc("Own %1.",loc("%1 building",LBeautify(500))),[3,6]); - order=6000; - new Game.Achievement('Enhancer',loc("Purchase %1.",loc("%1 upgrade",LBeautify(20))),[9,0]); - new Game.Achievement('Augmenter',loc("Purchase %1.",loc("%1 upgrade",LBeautify(50))),[9,1]); - - order=11000; - new Game.Achievement('Cookie-dunker',loc("Dunk the cookie.")+'You did it!',[1,8]); - - order=10000; - new Game.Achievement('Fortune',loc("Click %1.",loc("%1 golden cookie",LBeautify(77)))+'You should really go to bed.',[24,6]); - order=31000; - new Game.Achievement('True Neverclick',loc("Make %1 with no cookie clicks.",loc("%1 cookie",LBeautify(1e6)))+'This kinda defeats the whole purpose, doesn\'t it?',[12,0]);Game.last.pool='shadow'; - - order=20000; - new Game.Achievement('Elder nap',loc("Appease the grandmatriarchs at least once.")+'we
are
eternal
',[8,9]); - new Game.Achievement('Elder slumber',loc("Appease the grandmatriarchs at least %1 times.",5)+'our mind
outlives
the universe
',[8,9]); - - order=1098; - new Game.Achievement('Elder',loc("Own at least %1 grandma types.",7),[10,9]); - - order=20000; - new Game.Achievement('Elder calm',loc("Declare a covenant with the grandmatriarchs.")+'we
have
fed
',[8,9]); - - order=5000; - new Game.Achievement('Engineer',loc("Own %1.",loc("%1 building",LBeautify(1000))),[4,6]); - - order=10000; - new Game.Achievement('Leprechaun',loc("Click %1.",loc("%1 golden cookie",LBeautify(777))),[25,6]); - new Game.Achievement('Black cat\'s paw',loc("Click %1.",loc("%1 golden cookie",LBeautify(7777))),[26,6]); - - order=30050; - new Game.Achievement('Nihilism',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e15)))+'There are many things
that need to be erased
',[11,7]); - - order=1900; - Game.TieredAchievement('Antibatter','','Antimatter condenser',1); - Game.TieredAchievement('Quirky quarks','','Antimatter condenser',2); - Game.TieredAchievement('It does matter!','','Antimatter condenser',3); - - order=6000; - new Game.Achievement('Upgrader',loc("Purchase %1.",loc("%1 upgrade",LBeautify(100))),[9,2]); - - order=7000; - new Game.Achievement('Centennial',loc("Have at least %1 of everything.",100),[6,6]); - - order=30500; - new Game.Achievement('Hardcore',loc("Get to %1 baked with no upgrades purchased.",loc("%1 cookie",LBeautify(1e9))),[12,6]);//Game.last.pool='shadow'; - - order=30600; - new Game.Achievement('Speed baking I',loc("Get to %1 baked in %2.",[loc("%1 cookie",LBeautify(1e6)),Game.sayTime(60*35*Game.fps)]),[12,5]);Game.last.pool='shadow'; - new Game.Achievement('Speed baking II',loc("Get to %1 baked in %2.",[loc("%1 cookie",LBeautify(1e6)),Game.sayTime(60*25*Game.fps)]),[13,5]);Game.last.pool='shadow'; - new Game.Achievement('Speed baking III',loc("Get to %1 baked in %2.",[loc("%1 cookie",LBeautify(1e6)),Game.sayTime(60*15*Game.fps)]),[14,5]);Game.last.pool='shadow'; - - - order=61000; - var achiev=new Game.Achievement('Getting even with the oven',EN?'Defeat the Sentient Furnace in the factory dungeons.':'???',[12,7]);Game.last.pool='dungeon'; - var achiev=new Game.Achievement('Now this is pod-smashing',EN?'Defeat the Ascended Baking Pod in the factory dungeons.':'???',[12,7]);Game.last.pool='dungeon'; - var achiev=new Game.Achievement('Chirped out',EN?'Find and defeat Chirpy, the dysfunctionning alarm bot.':'???',[13,7]);Game.last.pool='dungeon'; - var achiev=new Game.Achievement('Follow the white rabbit',EN?'Find and defeat the elusive sugar bunny.':'???',[14,7]);Game.last.pool='dungeon'; - - order=1000; - new Game.Achievement('Clickasmic',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e11))),[11,14]); - - order=1100; - Game.TieredAchievement('Friend of the ancients','','Grandma',4); - Game.TieredAchievement('Ruler of the ancients','','Grandma',5); - - order=32000; - new Game.Achievement('Wholesome',loc("Unlock 100% of your heavenly chips power."),[15,7]); - - order=33000; - new Game.Achievement('Just plain lucky',loc("You have 1 chance in %1 every second of earning this achievement.",Beautify(1000000)),[15,6]);Game.last.pool='shadow'; - - order=21000; - new Game.Achievement('Itchscratcher',loc("Burst 1 wrinkler."),[19,8]); - new Game.Achievement('Wrinklesquisher',loc("Burst %1 wrinklers.",50),[19,8]); - new Game.Achievement('Moistburster',loc("Burst %1 wrinklers.",200),[19,8]); - - order=22000; - new Game.Achievement('Spooky cookies',loc("Unlock every Halloween-themed cookie.
Owning this achievement makes Halloween-themed cookies drop more frequently in future playthroughs."),[12,8]); - - order=22100; - new Game.Achievement('Coming to town',loc("Reach Santa's 7th form."),[18,9]); - new Game.Achievement('All hail Santa',loc("Reach Santa's final form."),[19,10]); - new Game.Achievement('Let it snow',loc("Unlock every Christmas-themed cookie.
Owning this achievement makes Christmas-themed cookies drop more frequently in future playthroughs."),[19,9]); - new Game.Achievement('Oh deer',loc("Pop 1 reindeer."),[12,9]); - new Game.Achievement('Sleigh of hand',loc("Pop %1 reindeer.",50),[12,9]); - new Game.Achievement('Reindeer sleigher',loc("Pop %1 reindeer.",200),[12,9]); - - order=1200; - Game.TieredAchievement('Perfected agriculture','','Farm',4); - order=1400; - Game.TieredAchievement('Ultimate automation','','Factory',4); - order=1300; - Game.TieredAchievement('Can you dig it','','Mine',4); - order=1500; - Game.TieredAchievement('Type II civilization','','Shipment',4); - order=1600; - Game.TieredAchievement('Gild wars','','Alchemy lab',4); - order=1700; - Game.TieredAchievement('Brain-split','','Portal',4); - order=1800; - Game.TieredAchievement('Time duke','','Time machine',4); - order=1900; - Game.TieredAchievement('Molecular maestro','','Antimatter condenser',4); - - order=2000; - Game.TieredAchievement('Lone photon','','Prism',1); - Game.TieredAchievement('Dazzling glimmer','','Prism',2); - Game.TieredAchievement('Blinding flash','','Prism',3); - Game.TieredAchievement('Unending glow','','Prism',4); - - order=5000; - new Game.Achievement('Lord of Constructs',loc("Own %1.",loc("%1 building",LBeautify(2500)))+'He saw the vast plains stretching ahead of him, and he said : let there be civilization.',[5,6]); - order=6000; - new Game.Achievement('Lord of Progress',loc("Purchase %1.",loc("%1 upgrade",LBeautify(200)))+'One can always do better. But should you?',[9,14]); - order=7002; - new Game.Achievement('Bicentennial',loc("Have at least %1 of everything.",200)+'You crazy person.',[8,6]); - - order=22300; - new Game.Achievement('Lovely cookies',loc("Unlock every Valentine-themed cookie."),[20,3]); - - order=7001; - new Game.Achievement('Centennial and a half',loc("Have at least %1 of everything.",150),[7,6]); - - order=11000; - new Game.Achievement('Tiny cookie',loc("Click the tiny cookie.")+'These aren\'t the cookies
you\'re clicking for.
',[0,5]); - - order=400000; - new Game.Achievement('You win a cookie',loc("This is for baking %1 and making it on the local news.",loc("%1 cookie",LBeautify(1e14)))+'We\'re all so proud of you.',[10,0]); - - order=1070; - Game.ProductionAchievement('Click delegator','Cursor',1,0,7); - order=1120; - Game.ProductionAchievement('Gushing grannies','Grandma',1,0,6); - order=1220; - Game.ProductionAchievement('I hate manure','Farm',1); - order=1320; - Game.ProductionAchievement('Never dig down','Mine',1); - order=1420; - Game.ProductionAchievement('The incredible machine','Factory',1); - order=1520; - Game.ProductionAchievement('And beyond','Shipment',1); - order=1620; - Game.ProductionAchievement('Magnum Opus','Alchemy lab',1); - order=1720; - Game.ProductionAchievement('With strange eons','Portal',1); - order=1820; - Game.ProductionAchievement('Spacetime jigamaroo','Time machine',1); - order=1920; - Game.ProductionAchievement('Supermassive','Antimatter condenser',1); - order=2020; - Game.ProductionAchievement('Praise the sun','Prism',1); - - - order=1000; - new Game.Achievement('Clickageddon',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e13))),[11,15]); - new Game.Achievement('Clicknarok',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e15))),[11,16]); - - order=1050; - new Game.Achievement('Extreme polydactyly',loc("Have %1.",loc("%1 cursor",LBeautify(300))),[0,13]); - new Game.Achievement('Dr. T',loc("Have %1.",loc("%1 cursor",LBeautify(400))),[0,14]); - - order=1100;Game.TieredAchievement('The old never bothered me anyway','','Grandma',6); - order=1200;Game.TieredAchievement('Homegrown','','Farm',5); - order=1400;Game.TieredAchievement('Technocracy','','Factory',5); - order=1300;Game.TieredAchievement('The center of the Earth','','Mine',5); - order=1500;Game.TieredAchievement('We come in peace','','Shipment',5); - order=1600;Game.TieredAchievement('The secrets of the universe','','Alchemy lab',5); - order=1700;Game.TieredAchievement('Realm of the Mad God','','Portal',5); - order=1800;Game.TieredAchievement('Forever and ever','','Time machine',5); - order=1900;Game.TieredAchievement('Walk the planck','','Antimatter condenser',5); - order=2000;Game.TieredAchievement('Rise and shine','','Prism',5); - - order=30200; - new Game.Achievement('God complex',loc("Name yourself Orteil.
Note: usurpers incur a -%1% CpS penalty until they rename themselves something else.
",1)+'But that\'s not you, is it?',[17,5]);Game.last.pool='shadow'; - new Game.Achievement('Third-party',loc("Use an add-on.")+'Some find vanilla to be the most boring flavor.',[16,5]);Game.last.pool='shadow';//if you're making a mod, add a Game.Win('Third-party') somewhere in there! - - order=30050; - new Game.Achievement('Dematerialize',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e18)))+'Presto!
...where\'d the cookies go?
',[11,7]); - new Game.Achievement('Nil zero zilch',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e21)))+'To summarize : really not very much at all.',[11,7]); - new Game.Achievement('Transcendence',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e24)))+'Your cookies are now on a higher plane of being.',[11,8]); - new Game.Achievement('Obliterate',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e27)))+'Resistance is futile, albeit entertaining.',[11,8]); - new Game.Achievement('Negative void',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e30)))+'You now have so few cookies that it\'s almost like you have a negative amount of them.',[11,8]); - - order=22400; - new Game.Achievement('The hunt is on',loc("Unlock 1 egg."),[1,12]); - new Game.Achievement('Egging on',loc("Unlock %1 eggs.",7),[4,12]); - new Game.Achievement('Mass Easteria',loc("Unlock %1 eggs.",14),[7,12]); - new Game.Achievement('Hide & seek champion',loc("Unlock all the eggs.
Owning this achievement makes eggs drop more frequently in future playthroughs."),[13,12]); - - order=11000; - new Game.Achievement('What\'s in a name',loc("Give your bakery a name."),[15,9]); - - - order=1425; - Game.TieredAchievement('Pretty penny','','Bank',1); - Game.TieredAchievement('Fit the bill','','Bank',2); - Game.TieredAchievement('A loan in the dark','','Bank',3); - Game.TieredAchievement('Need for greed','','Bank',4); - Game.TieredAchievement('It\'s the economy, stupid','','Bank',5); - order=1450; - Game.TieredAchievement('Your time to shrine','','Temple',1); - Game.TieredAchievement('Shady sect','','Temple',2); - Game.TieredAchievement('New-age cult','','Temple',3); - Game.TieredAchievement('Organized religion','','Temple',4); - Game.TieredAchievement('Fanaticism','','Temple',5); - order=1475; - Game.TieredAchievement('Bewitched','','Wizard tower',1); - Game.TieredAchievement('The sorcerer\'s apprentice','','Wizard tower',2); - Game.TieredAchievement('Charms and enchantments','','Wizard tower',3); - Game.TieredAchievement('Curses and maledictions','','Wizard tower',4); - Game.TieredAchievement('Magic kingdom','','Wizard tower',5); - - order=1445; - Game.ProductionAchievement('Vested interest','Bank',1); - order=1470; - Game.ProductionAchievement('New world order','Temple',1); - order=1495; - Game.ProductionAchievement('Hocus pocus','Wizard tower',1); - - - - order=1070; - Game.ProductionAchievement('Finger clickin\' good','Cursor',2,0,7); - order=1120; - Game.ProductionAchievement('Panic at the bingo','Grandma',2,0,6); - order=1220; - Game.ProductionAchievement('Rake in the dough','Farm',2); - order=1320; - Game.ProductionAchievement('Quarry on','Mine',2); - order=1420; - Game.ProductionAchievement('Yes I love technology','Factory',2); - order=1445; - Game.ProductionAchievement('Paid in full','Bank',2); - order=1470; - Game.ProductionAchievement('Church of Cookiology','Temple',2); - order=1495; - Game.ProductionAchievement('Too many rabbits, not enough hats','Wizard tower',2); - order=1520; - Game.ProductionAchievement('The most precious cargo','Shipment',2); - order=1620; - Game.ProductionAchievement('The Aureate','Alchemy lab',2); - order=1720; - Game.ProductionAchievement('Ever more hideous','Portal',2); - order=1820; - Game.ProductionAchievement('Be kind, rewind','Time machine',2); - order=1920; - Game.ProductionAchievement('Infinitesimal','Antimatter condenser',2); - order=2020; - Game.ProductionAchievement('A still more glorious dawn','Prism',2); - - order=30000; - new Game.Achievement('Rebirth',loc("Ascend at least once."),[21,6]); - - order=11000; - new Game.Achievement('Here you go',loc("Click this achievement's slot.")+'All you had to do was ask.',[1,7]);Game.last.clickFunction=function(){if (!Game.HasAchiev('Here you go')){PlaySound('snd/tick.mp3');Game.Win('Here you go');}}; - - order=30000; - new Game.Achievement('Resurrection',loc("Ascend %1 times.",10),[21,6]); - new Game.Achievement('Reincarnation',loc("Ascend %1 times.",100),[21,6]); - new Game.Achievement('Endless cycle',loc("Ascend %1 times.",1000)+'Oh hey, it\'s you again.',[2,7]);Game.last.pool='shadow'; - - - - order=1100; - Game.TieredAchievement('The agemaster','','Grandma',7); - Game.TieredAchievement('To oldly go','','Grandma',8); - - order=1200;Game.TieredAchievement('Gardener extraordinaire','','Farm',6); - order=1300;Game.TieredAchievement('Tectonic ambassador','','Mine',6); - order=1400;Game.TieredAchievement('Rise of the machines','','Factory',6); - order=1425;Game.TieredAchievement('Acquire currency','','Bank',6); - order=1450;Game.TieredAchievement('Zealotry','','Temple',6); - order=1475;Game.TieredAchievement('The wizarding world','','Wizard tower',6); - order=1500;Game.TieredAchievement('Parsec-masher','','Shipment',6); - order=1600;Game.TieredAchievement('The work of a lifetime','','Alchemy lab',6); - order=1700;Game.TieredAchievement('A place lost in time','','Portal',6); - order=1800;Game.TieredAchievement('Heat death','','Time machine',6); - order=1900;Game.TieredAchievement('Microcosm','','Antimatter condenser',6); - order=2000;Game.TieredAchievement('Bright future','','Prism',6); - - order=25000; - new Game.Achievement('Here be dragon',loc("Complete your dragon's training."),[21,12]); - - Game.BankAchievement('How?'); - Game.BankAchievement('The land of milk and cookies'); - Game.BankAchievement('He who controls the cookies controls the universe','The milk must flow!'); - Game.BankAchievement('Tonight on Hoarders'); - Game.BankAchievement('Are you gonna eat all that?'); - Game.BankAchievement('We\'re gonna need a bigger bakery'); - Game.BankAchievement('In the mouth of madness','A cookie is just what we tell each other it is.'); - Game.BankAchievement('Brought to you by the letter
'); - - - Game.CpsAchievement('A world filled with cookies'); - Game.CpsAchievement('When this baby hits '+Beautify(10000000000000*60*60)+' cookies per hour'); - Game.CpsAchievement('Fast and delicious'); - Game.CpsAchievement('Cookiehertz : a really, really tasty hertz','Tastier than a hertz donut, anyway.'); - Game.CpsAchievement('Woops, you solved world hunger'); - Game.CpsAchievement('Turbopuns','Mother Nature will be like "slowwwww dowwwwwn".'); - Game.CpsAchievement('Faster menner'); - Game.CpsAchievement('And yet you\'re still hungry'); - Game.CpsAchievement('The Abakening'); - Game.CpsAchievement('There\'s really no hard limit to how long these achievement names can be and to be quite honest I\'m rather curious to see how far we can go.
Adolphus W. Green (1844–1917) started as the Principal of the Groton School in 1864. By 1865, he became second assistant librarian at the New York Mercantile Library; from 1867 to 1869, he was promoted to full librarian. From 1869 to 1873, he worked for Evarts, Southmayd & Choate, a law firm co-founded by William M. Evarts, Charles Ferdinand Southmayd and Joseph Hodges Choate. He was admitted to the New York State Bar Association in 1873.
Anyway, how\'s your day been?');//Game.last.shortName='There\'s really no hard limit to how long these achievement names can be and to be quite honest I\'m [...]'; - Game.CpsAchievement('Fast','Wow!'); - - order=7002; - new Game.Achievement('Bicentennial and a half',loc("Have at least %1 of everything.",250)+'Keep on truckin\'.',[9,6]); - - order=11000; - new Game.Achievement('Tabloid addiction',loc("Click on the news ticker %1 times.",50)+'Page 6: Mad individual clicks on picture of pastry in a futile attempt to escape boredom!
Also page 6: British parliament ate my baby!
',[27,7]); - - order=1000; - new Game.Achievement('Clickastrophe',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e17))),[11,17]); - new Game.Achievement('Clickataclysm',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e19))),[11,18]); - - order=1050; - new Game.Achievement('Thumbs, phalanges, metacarpals',loc("Have %1.",loc("%1 cursor",LBeautify(500)))+'& KNUCKLES',[0,15]); - - order=6002; - new Game.Achievement('Polymath',loc("Own %1 upgrades and %2 buildings.",[300,4000])+'Excellence doesn\'t happen overnight - it usually takes a good couple days.',[29,7]); - - order=1099; - new Game.Achievement('The elder scrolls',loc("Own a combined %1 %2 and %3.",[777,loc("grandmas"),loc("cursors")])+'Let me guess. Someone stole your cookie.',[10,9]); - - order=30050; - new Game.Achievement('To crumbs, you say?',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e33)))+'Very well then.',[29,6]); - - order=1200;Game.TieredAchievement('Seedy business','','Farm',7); - order=1300;Game.TieredAchievement('Freak fracking','','Mine',7); - order=1400;Game.TieredAchievement('Modern times','','Factory',7); - order=1425;Game.TieredAchievement('The nerve of war','','Bank',7); - order=1450;Game.TieredAchievement('Wololo','','Temple',7); - order=1475;Game.TieredAchievement('And now for my next trick, I\'ll need a volunteer from the audience','','Wizard tower',7); - order=1500;Game.TieredAchievement('It\'s not delivery','','Shipment',7); - order=1600;Game.TieredAchievement('Gold, Jerry! Gold!','','Alchemy lab',7); - order=1700;Game.TieredAchievement('Forbidden zone','','Portal',7); - order=1800;Game.TieredAchievement('cookie clicker forever and forever a hundred years cookie clicker, all day long forever, forever a hundred times, over and over cookie clicker adventures dot com','','Time machine',7); - order=1900;Game.TieredAchievement('Scientists baffled everywhere','','Antimatter condenser',7); - order=2000;Game.TieredAchievement('Harmony of the spheres','','Prism',7); - - order=35000; - new Game.Achievement('Last Chance to See',loc("Burst the near-extinct shiny wrinkler.")+'You monster!',[24,12]);Game.last.pool='shadow'; - - order=10000; - new Game.Achievement('Early bird',loc("Click a golden cookie less than 1 second after it spawns."),[10,14]); - new Game.Achievement('Fading luck',loc("Click a golden cookie less than 1 second before it dies."),[10,14]); - - order=22100; - new Game.Achievement('Eldeer',loc("Pop a reindeer during an elder frenzy."),[12,9]); - - order=21100; - new Game.Achievement('Dude, sweet',loc("Harvest %1 coalescing sugar lumps.",7),[24,14]); - new Game.Achievement('Sugar rush',loc("Harvest %1 coalescing sugar lumps.",30),[26,14]); - new Game.Achievement('Year\'s worth of cavities',loc("Harvest %1 coalescing sugar lumps.",365)+'My lumps my lumps my lumps.',[29,14]); - new Game.Achievement('Hand-picked',loc("Successfully harvest a coalescing sugar lump before it's ripe."),[28,14]); - new Game.Achievement('Sugar sugar',loc("Harvest a bifurcated sugar lump."),[29,15]); - new Game.Achievement('All-natural cane sugar',loc("Harvest a golden sugar lump."),[29,16]);Game.last.pool='shadow'; - new Game.Achievement('Sweetmeats',loc("Harvest a meaty sugar lump."),[29,17]); - - order=7002; - new Game.Achievement('Tricentennial',loc("Have at least %1 of everything.",300)+'Can\'t stop, won\'t stop. Probably should stop, though.',[29,12]); - - Game.CpsAchievement('Knead for speed','How did we not make that one yet?'); - Game.CpsAchievement('Well the cookies start coming and they don\'t stop coming','Didn\'t make sense not to click for fun.'); - Game.CpsAchievement('I don\'t know if you\'ve noticed but all these icons are very slightly off-center'); - Game.CpsAchievement('The proof of the cookie is in the baking','How can you have any cookies if you don\'t bake your dough?'); - Game.CpsAchievement('If it\'s worth doing, it\'s worth overdoing'); - - Game.BankAchievement('The dreams in which I\'m baking are the best I\'ve ever had'); - Game.BankAchievement('Set for life'); - - order=1200;Game.TieredAchievement('You and the beanstalk','','Farm',8); - order=1300;Game.TieredAchievement('Romancing the stone','','Mine',8); - order=1400;Game.TieredAchievement('Ex machina','','Factory',8); - order=1425;Game.TieredAchievement('And I need it now','','Bank',8); - order=1450;Game.TieredAchievement('Pray on the weak','','Temple',8); - order=1475;Game.TieredAchievement('It\'s a kind of magic','','Wizard tower',8); - order=1500;Game.TieredAchievement('Make it so','','Shipment',8); - order=1600;Game.TieredAchievement('All that glitters is gold','','Alchemy lab',8); - order=1700;Game.TieredAchievement('H̸̷͓̳̳̯̟͕̟͍͍̣͡ḛ̢̦̰̺̮̝͖͖̘̪͉͘͡ ̠̦͕̤̪̝̥̰̠̫̖̣͙̬͘ͅC̨̦̺̩̲̥͉̭͚̜̻̝̣̼͙̮̯̪o̴̡͇̘͎̞̲͇̦̲͞͡m̸̩̺̝̣̹̱͚̬̥̫̳̼̞̘̯͘ͅẹ͇̺̜́̕͢s̶̙̟̱̥̮̯̰̦͓͇͖͖̝͘͘͞','','Portal',8); - order=1800;Game.TieredAchievement('Way back then','','Time machine',8); - order=1900;Game.TieredAchievement('Exotic matter','','Antimatter condenser',8); - order=2000;Game.TieredAchievement('At the end of the tunnel','','Prism',8); - - - - order=1070; - Game.ProductionAchievement('Click (starring Adam Sandler)','Cursor',3,0,7); - order=1120; - Game.ProductionAchievement('Frantiquities','Grandma',3,0,6); - order=1220; - Game.ProductionAchievement('Overgrowth','Farm',3); - order=1320; - Game.ProductionAchievement('Sedimentalism','Mine',3); - order=1420; - Game.ProductionAchievement('Labor of love','Factory',3); - order=1445; - Game.ProductionAchievement('Reverse funnel system','Bank',3); - order=1470; - Game.ProductionAchievement('Thus spoke you','Temple',3); - order=1495; - Game.ProductionAchievement('Manafest destiny','Wizard tower',3); - order=1520; - Game.ProductionAchievement('Neither snow nor rain nor heat nor gloom of night','Shipment',3); - order=1620; - Game.ProductionAchievement('I\'ve got the Midas touch','Alchemy lab',3); - order=1720; - Game.ProductionAchievement('Which eternal lie','Portal',3); - order=1820; - Game.ProductionAchievement('Déjà vu','Time machine',3); - order=1920; - Game.ProductionAchievement('Powers of Ten','Antimatter condenser',3); - order=2020; - Game.ProductionAchievement('Now the dark days are gone','Prism',3); - - order=1070; - new Game.Achievement('Freaky jazz hands','',[0,26]);Game.Objects['Cursor'].levelAchiev10=Game.last; - order=1120; - new Game.Achievement('Methuselah','',[1,26]);Game.Objects['Grandma'].levelAchiev10=Game.last; - order=1220; - new Game.Achievement('Huge tracts of land','',[2,26]);Game.Objects['Farm'].levelAchiev10=Game.last; - order=1320; - new Game.Achievement('D-d-d-d-deeper','',[3,26]);Game.Objects['Mine'].levelAchiev10=Game.last; - order=1420; - new Game.Achievement('Patently genius','',[4,26]);Game.Objects['Factory'].levelAchiev10=Game.last; - order=1445; - new Game.Achievement('A capital idea','',[15,26]);Game.Objects['Bank'].levelAchiev10=Game.last; - order=1470; - new Game.Achievement('It belongs in a bakery','',[16,26]);Game.Objects['Temple'].levelAchiev10=Game.last; - order=1495; - new Game.Achievement('Motormouth','',[17,26]);Game.Objects['Wizard tower'].levelAchiev10=Game.last; - order=1520; - new Game.Achievement('Been there done that','',[5,26]);Game.Objects['Shipment'].levelAchiev10=Game.last; - order=1620; - new Game.Achievement('Phlogisticated substances','',[6,26]);Game.Objects['Alchemy lab'].levelAchiev10=Game.last; - order=1720; - new Game.Achievement('Bizarro world','',[7,26]);Game.Objects['Portal'].levelAchiev10=Game.last; - order=1820; - new Game.Achievement('The long now','',[8,26]);Game.Objects['Time machine'].levelAchiev10=Game.last; - order=1920; - new Game.Achievement('Chubby hadrons','',[13,26]);Game.Objects['Antimatter condenser'].levelAchiev10=Game.last; - order=2020; - new Game.Achievement('Palettable','',[14,26]);Game.Objects['Prism'].levelAchiev10=Game.last; - - order=61470; - order=61495; - new Game.Achievement('Bibbidi-bobbidi-boo',loc("Cast %1 spells.",9),[21,11]); - new Game.Achievement('I\'m the wiz',loc("Cast %1 spells.",99),[22,11]); - new Game.Achievement('A wizard is you',loc("Cast %1 spells.",999)+'I\'m a what?',[29,11]); - - order=10000; - new Game.Achievement('Four-leaf cookie',loc("Have %1 golden cookies simultaneously.",4)+'Fairly rare, considering cookies don\'t even have leaves.',[27,6]);Game.last.pool='shadow'; - - order=2100; - Game.TieredAchievement('Lucked out','','Chancemaker',1); - Game.TieredAchievement('What are the odds','','Chancemaker',2); - Game.TieredAchievement('Grandma needs a new pair of shoes','','Chancemaker',3); - Game.TieredAchievement('Million to one shot, doc','','Chancemaker',4); - Game.TieredAchievement('As luck would have it','','Chancemaker',5); - Game.TieredAchievement('Ever in your favor','','Chancemaker',6); - Game.TieredAchievement('Be a lady','','Chancemaker',7); - Game.TieredAchievement('Dicey business','','Chancemaker',8); - - order=2120; - Game.ProductionAchievement('Fingers crossed','Chancemaker',1); - Game.ProductionAchievement('Just a statistic','Chancemaker',2); - Game.ProductionAchievement('Murphy\'s wild guess','Chancemaker',3); - - new Game.Achievement('Let\'s leaf it at that','',[19,26]);Game.Objects['Chancemaker'].levelAchiev10=Game.last; - - order=1000; - new Game.Achievement('The ultimate clickdown',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e21)))+'(of ultimate destiny.)',[11,19]); - - - order=1100; - Game.TieredAchievement('Aged well','','Grandma',9); - Game.TieredAchievement('101st birthday','','Grandma',10); - Game.TieredAchievement('But wait \'til you get older','','Grandma',11); - order=1200;Game.TieredAchievement('Harvest moon','','Farm',9); - order=1300;Game.TieredAchievement('Mine?','','Mine',9); - order=1400;Game.TieredAchievement('In full gear','','Factory',9); - order=1425;Game.TieredAchievement('Treacle tart economics','','Bank',9); - order=1450;Game.TieredAchievement('Holy cookies, grandma!','','Temple',9); - order=1475;Game.TieredAchievement('The Prestige','(Unrelated to the Cookie Clicker feature of the same name.)','Wizard tower',9); - order=1500;Game.TieredAchievement('That\'s just peanuts to space','','Shipment',9); - order=1600;Game.TieredAchievement('Worth its weight in lead','','Alchemy lab',9); - order=1700;Game.TieredAchievement('What happens in the vortex stays in the vortex','','Portal',9); - order=1800;Game.TieredAchievement('Invited to yesterday\'s party','','Time machine',9); - order=1900;Game.TieredAchievement('Downsizing','','Antimatter condenser',9);//the trailer got me really hyped up but i've read some pretty bad reviews. is it watchable ? is it worth seeing ? i don't mind matt damon - order=2000;Game.TieredAchievement('My eyes','','Prism',9); - order=2100;Game.TieredAchievement('Maybe a chance in hell, actually','','Chancemaker',9); - - order=1200;Game.TieredAchievement('Make like a tree','','Farm',10); - order=1300;Game.TieredAchievement('Cave story','','Mine',10); - order=1400;Game.TieredAchievement('In-cog-neato','','Factory',10); - order=1425;Game.TieredAchievement('Save your breath because that\'s all you\'ve got left','','Bank',10); - order=1450;Game.TieredAchievement('Vengeful and almighty','','Temple',10); - order=1475;Game.TieredAchievement('Spell it out for you','','Wizard tower',10); - order=1500;Game.TieredAchievement('Space space space space space','It\'s too far away...','Shipment',10); - order=1600;Game.TieredAchievement('Don\'t get used to yourself, you\'re gonna have to change','','Alchemy lab',10); - order=1700;Game.TieredAchievement('Objects in the mirror dimension are closer than they appear','','Portal',10); - order=1800;Game.TieredAchievement('Groundhog day','','Time machine',10); - order=1900;Game.TieredAchievement('A matter of perspective','','Antimatter condenser',10); - order=2000;Game.TieredAchievement('Optical illusion','','Prism',10); - order=2100;Game.TieredAchievement('Jackpot','','Chancemaker',10); - - order=36000; - new Game.Achievement('So much to do so much to see',loc("Manage a cookie legacy for at least a year.")+'Thank you so much for playing Cookie Clicker!',[23,11]);Game.last.pool='shadow'; - - - - Game.CpsAchievement('Running with scissors'); - Game.CpsAchievement('Rarefied air'); - Game.CpsAchievement('Push it to the limit'); - Game.CpsAchievement('Green cookies sleep furiously'); - - Game.BankAchievement('Panic! at Nabisco'); - Game.BankAchievement('Bursting at the seams'); - Game.BankAchievement('Just about full'); - Game.BankAchievement('Hungry for more'); - - order=1000; - new Game.Achievement('All the other kids with the pumped up clicks',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e23))),[11,28]); - new Game.Achievement('One...more...click...',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e25))),[11,30]); - - order=61515; - new Game.Achievement('Botany enthusiast',loc("Harvest %1 mature garden plants.",100),[26,20]); - new Game.Achievement('Green, aching thumb',loc("Harvest %1 mature garden plants.",1000),[27,20]); - new Game.Achievement('In the garden of Eden (baby)',loc("Fill every tile of the biggest garden plot with plants.")+'Isn\'t tending to those precious little plants just so rock and/or roll?',[28,20]); - - new Game.Achievement('Keeper of the conservatory',loc("Unlock every garden seed."),[25,20]); - new Game.Achievement('Seedless to nay',loc("Convert a complete seed log into sugar lumps by sacrificing your garden to the sugar hornets.
Owning this achievement makes seeds %1% cheaper, plants mature %2% sooner, and plant upgrades drop %3% more.",[5,5,5]),[29,20]); - - order=30050; - new Game.Achievement('You get nothing',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e36)))+'Good day sir!',[29,6]); - new Game.Achievement('Humble rebeginnings',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e39)))+'Started from the bottom, now we\'re here.',[29,6]); - new Game.Achievement('The end of the world',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e42)))+'(as we know it)',[21,25]); - new Game.Achievement('Oh, you\'re back',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e45)))+'Missed us?',[21,25]); - new Game.Achievement('Lazarus',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e48)))+'All rise.',[21,25]); - - Game.CpsAchievement('Leisurely pace'); - Game.CpsAchievement('Hypersonic'); - - Game.BankAchievement('Feed me, Orteil'); - Game.BankAchievement('And then what?'); - - order=7002; - new Game.Achievement('Tricentennial and a half',loc("Have at least %1 of everything.",350)+'(it\'s free real estate)',[21,26]); - new Game.Achievement('Quadricentennial',loc("Have at least %1 of everything.",400)+'You\'ve had to do horrible things to get this far.
Horrible... horrible things.
',[22,26]); - new Game.Achievement('Quadricentennial and a half',loc("Have at least %1 of everything.",450)+'At this point, you might just be compensating for something.',[23,26]); - - new Game.Achievement('Quincentennial',loc("Have at least %1 of everything.",500)+'Some people would say you\'re halfway there.
We do not care for those people and their reckless sense of unchecked optimism.
',[29,25]); - - order=21100; - new Game.Achievement('Maillard reaction',loc("Harvest a caramelized sugar lump."),[29,27]); - - order=30250; - new Game.Achievement('When the cookies ascend just right',loc("Ascend with exactly %1.",loc("%1 cookie",LBeautify(1e12))),[25,7]);Game.last.pool='shadow';//this achievement is shadow because it is only achievable through blind luck or reading external guides; this may change in the future - - - order=1050; - new Game.Achievement('With her finger and her thumb',loc("Have %1.",loc("%1 cursor",LBeautify(600))),[0,16]); - - order=1100;Game.TieredAchievement('Defense of the ancients','','Grandma',12); - order=1200;Game.TieredAchievement('Sharpest tool in the shed','','Farm',11); - order=1300;Game.TieredAchievement('Hey now, you\'re a rock','','Mine',11); - order=1400;Game.TieredAchievement('Break the mold','','Factory',11); - order=1425;Game.TieredAchievement('Get the show on, get paid','','Bank',11); - order=1450;Game.TieredAchievement('My world\'s on fire, how about yours','','Temple',11); - order=1475;Game.TieredAchievement('The meteor men beg to differ','','Wizard tower',11); - order=1500;Game.TieredAchievement('Only shooting stars','','Shipment',11); - order=1600;Game.TieredAchievement('We could all use a little change','','Alchemy lab',11);//"all that glitters is gold" was already an achievement - order=1700;Game.TieredAchievement('Your brain gets smart but your head gets dumb','','Portal',11); - order=1800;Game.TieredAchievement('The years start coming','','Time machine',11); - order=1900;Game.TieredAchievement('What a concept','','Antimatter condenser',11); - order=2000;Game.TieredAchievement('You\'ll never shine if you don\'t glow','','Prism',11); - order=2100;Game.TieredAchievement('You\'ll never know if you don\'t go','','Chancemaker',11); - - order=2200; - Game.TieredAchievement('Self-contained','','Fractal engine',1); - Game.TieredAchievement('Threw you for a loop','','Fractal engine',2); - Game.TieredAchievement('The sum of its parts','','Fractal engine',3); - Game.TieredAchievement('Bears repeating','Where did these come from?','Fractal engine',4); - Game.TieredAchievement('More of the same','','Fractal engine',5); - Game.TieredAchievement('Last recurse','','Fractal engine',6); - Game.TieredAchievement('Out of one, many','','Fractal engine',7); - Game.TieredAchievement('An example of recursion','','Fractal engine',8); - Game.TieredAchievement('For more information on this achievement, please refer to its title','','Fractal engine',9); - Game.TieredAchievement('I\'m so meta, even this achievement','','Fractal engine',10); - Game.TieredAchievement('Never get bored','','Fractal engine',11); - - order=2220; - Game.ProductionAchievement('The needs of the many','Fractal engine',1); - Game.ProductionAchievement('Eating its own','Fractal engine',2); - Game.ProductionAchievement('We must go deeper','Fractal engine',3); - - new Game.Achievement('Sierpinski rhomboids','',[20,26]);Game.Objects['Fractal engine'].levelAchiev10=Game.last; - - Game.CpsAchievement('Gotta go fast'); - Game.BankAchievement('I think it\'s safe to say you\'ve got it made'); - - order=6002; - new Game.Achievement('Renaissance baker',loc("Own %1 upgrades and %2 buildings.",[400,8000])+'If you have seen further, it is by standing on the shoulders of giants - a mysterious species of towering humanoids until now thought long-extinct.',[10,10]); - - order=1098; - new Game.Achievement('Veteran',loc("Own at least %1 grandma types.",14)+'14\'s a crowd!',[10,9]); - - order=10000; - new Game.Achievement('Thick-skinned',loc("Have your reinforced membrane protect the shimmering veil."),[7,10]); - - - order=2300; - Game.TieredAchievement('F12','','Javascript console',1); - Game.TieredAchievement('Variable success','','Javascript console',2); - Game.TieredAchievement('No comments','','Javascript console',3); - Game.TieredAchievement('Up to code','','Javascript console',4); - Game.TieredAchievement('Works on my machine','','Javascript console',5); - Game.TieredAchievement('Technical debt','','Javascript console',6); - Game.TieredAchievement('Mind your language','','Javascript console',7); - Game.TieredAchievement('Inconsolable','','Javascript console',8); - Game.TieredAchievement('Closure','','Javascript console',9); - Game.TieredAchievement('Dude what if we\'re all living in a simulation like what if we\'re all just code on a computer somewhere','','Javascript console',10); - Game.TieredAchievement('Taking the back streets','','Javascript console',11); - - order=2320; - Game.ProductionAchievement('Inherited prototype','Javascript console',1); - Game.ProductionAchievement('A model of document object','Javascript console',2); - Game.ProductionAchievement('First-class citizen','Javascript console',3); - - new Game.Achievement('Alexandria','',[32,26]);Game.Objects['Javascript console'].levelAchiev10=Game.last; - - Game.CpsAchievement('Bake him away, toys'); - Game.CpsAchievement('You\'re #1 so why try harder'); - Game.CpsAchievement('Haven\'t even begun to peak'); - Game.BankAchievement('A sometimes food'); - Game.BankAchievement('Not enough of a good thing'); - Game.BankAchievement('Horn of plenty'); - - order=30050; - new Game.Achievement('Smurf account',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e51)))+'It\'s like you just appeared out of the blue!',[21,32]); - new Game.Achievement('If at first you don\'t succeed',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e54)))+'If at first you don\'t succeed, try, try, try again.
But isn\'t that the definition of insanity?
',[21,32]); - - order=33000; - new Game.Achievement('O Fortuna',loc("Own every fortune upgrade.
Owning this achievement makes fortunes appear twice as often; unlocked fortune upgrades also have a %1% chance to carry over after ascending.",40),[29,8]); - - order=61615; - new Game.Achievement('Initial public offering',loc("Make your first stock market profit."),[0,33]); - new Game.Achievement('Rookie numbers',loc("Own at least %1 of every stock market good.",100)+'Gotta pump those numbers up!',[9,33]); - new Game.Achievement('No nobility in poverty',loc("Own at least %1 of every stock market good.",500)+'What kind of twisted individual is out there cramming camels through needle holes anyway?',[10,33]); - new Game.Achievement('Full warehouses',loc("Own at least %1 of a stock market good.",1000),[11,33]); - new Game.Achievement('Make my day',loc("Make a day of CpS ($%1) in 1 stock market sale.",86400),[1,33]); - new Game.Achievement('Buy buy buy',loc("Spend a day of CpS ($%1) in 1 stock market purchase.",86400),[1,33]); - new Game.Achievement('Gaseous assets',loc("Have your stock market profits surpass a whole year of CpS ($%1).",31536000)+'Boy, how volatile!',[18,33]);Game.last.pool='shadow'; - new Game.Achievement('Pyramid scheme',loc("Unlock the highest-tier stock market headquarters."),[18,33]); - - order=10000; - new Game.Achievement('Jellicles',loc("Own %1 kitten upgrades.",10)+'Jellicles can and jellicles do! Make sure to wash your jellicles every day!',[18,19]); - - order=7002; - new Game.Achievement('Quincentennial and a half',loc("Have at least %1 of everything.",550)+'This won\'t fill the churning void inside, you know.',[29,26]); - - Game.CpsAchievement('What did we even eat before these'); - Game.CpsAchievement('Heavy flow'); - Game.CpsAchievement('More you say?'); - Game.BankAchievement('Large and in charge'); - Game.BankAchievement('Absolutely stuffed'); - Game.BankAchievement('It\'s only wafer-thin','Just the one!'); - - order=1000;new Game.Achievement('Clickety split',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e27))),[11,31]); - order=1050;new Game.Achievement('Gotta hand it to you',loc("Have %1.",loc("%1 cursor",LBeautify(700))),[0,17]); - order=1100;Game.TieredAchievement('Okay boomer','','Grandma',13); - order=1200;Game.TieredAchievement('Overripe','','Farm',12); - order=1300;Game.TieredAchievement('Rock on','','Mine',12); - order=1400;Game.TieredAchievement('Self-manmade man','','Factory',12); - order=1425;Game.TieredAchievement('Checks out','','Bank',12); - order=1450;Game.TieredAchievement('Living on a prayer','','Temple',12); - order=1475;Game.TieredAchievement('Higitus figitus migitus mum','','Wizard tower',12); - order=1500;Game.TieredAchievement('The incredible journey','','Shipment',12); - order=1600;Game.TieredAchievement('Just a phase','','Alchemy lab',12); - order=1700;Game.TieredAchievement('Don\'t let me leave, Murph','','Portal',12); - order=1800;Game.TieredAchievement('Caveman to cosmos','','Time machine',12); - order=1900;Game.TieredAchievement('Particular tastes','','Antimatter condenser',12); - order=2000;Game.TieredAchievement('A light snack','','Prism',12); - order=2100;Game.TieredAchievement('Tempting fate','','Chancemaker',12); - order=2200;Game.TieredAchievement('Tautological','','Fractal engine',12); - order=2300;Game.TieredAchievement('Curly braces','Or as the French call them, mustache boxes.
Go well with quotes.
','Javascript console',12); - - order=10000; - new Game.Achievement('Seven horseshoes',loc("Click %1.",loc("%1 golden cookie",LBeautify(27777)))+'Enough for one of those funky horses that graze near your factories.',[21,33]);Game.last.pool='shadow'; - - order=11005; - new Game.Achievement('Olden days',loc("Find the forgotten madeleine.")+'DashNet Farms remembers.',[12,3]); - - - order=1050;new Game.Achievement('The devil\'s workshop',loc("Have %1.",loc("%1 cursor",LBeautify(800))),[0,18]); - order=1200;Game.TieredAchievement('In the green','','Farm',13); - order=1300;Game.TieredAchievement('Mountain out of a molehill, but like in a good way','','Mine',13); - order=1400;Game.TieredAchievement('The wheels of progress','','Factory',13); - order=1425;Game.TieredAchievement('That\'s rich','','Bank',13); - order=1450;Game.TieredAchievement('Preaches and cream','','Temple',13); - order=1475;Game.TieredAchievement('Magic thinking','','Wizard tower',13); - order=1500;Game.TieredAchievement('Is there life on Mars?','Yes, there is. You\'re currently using it as filling in experimental flavor prototype #810657.','Shipment',13); - order=1600;Game.TieredAchievement('Bad chemistry','','Alchemy lab',13); - order=1700;Game.TieredAchievement('Reduced to gibbering heaps','','Portal',13); - order=1800;Game.TieredAchievement('Back already?','','Time machine',13); - order=1900;Game.TieredAchievement('Nuclear throne','','Antimatter condenser',13); - order=2000;Game.TieredAchievement('Making light of the situation','','Prism',13); - order=2100;Game.TieredAchievement('Flip a cookie. Chips, I win. Crust, you lose.','','Chancemaker',13); - order=2200;Game.TieredAchievement('In and of itself','','Fractal engine',13); - order=2300;Game.TieredAchievement('Duck typing','Hello, this is a duck typing. Got any grapes?','Javascript console',13); - - order=2400; - Game.TieredAchievement('They\'ll never know what hit \'em','','Idleverse',1); - Game.TieredAchievement('Well-versed','','Idleverse',2); - Game.TieredAchievement('Ripe for the picking','','Idleverse',3); - Game.TieredAchievement('Unreal','','Idleverse',4); - Game.TieredAchievement('Once you\'ve seen one','','Idleverse',5); - Game.TieredAchievement('Spoils and plunder','','Idleverse',6); - Game.TieredAchievement('Nobody exists on purpose, nobody belongs anywhere','Come watch TV?','Idleverse',7); - Game.TieredAchievement('Hyperspace expressway','','Idleverse',8); - Game.TieredAchievement('Versatile','','Idleverse',9); - Game.TieredAchievement('You are inevitable','','Idleverse',10); - Game.TieredAchievement('Away from this place','','Idleverse',11); - Game.TieredAchievement('Everywhere at once','','Idleverse',12); - Game.TieredAchievement('Reject reality, substitute your own','','Idleverse',13); - - order=2420; - Game.ProductionAchievement('Fringe','Idleverse',1); - Game.ProductionAchievement('Coherence','Idleverse',2); - Game.ProductionAchievement('Earth-616','Idleverse',3); - - new Game.Achievement('Strange topologies','',[33,26]);Game.Objects['Idleverse'].levelAchiev10=Game.last; - - order=5000; - new Game.Achievement('Grand design',loc("Own %1.",loc("%1 building",LBeautify(5000)))+'They\'ll remember you forever!',[32,12]); - new Game.Achievement('Ecumenopolis',loc("Own %1.",loc("%1 building",LBeautify(7500)))+'Getting a wee bit cramped.',[33,12]); - - order=6000; - new Game.Achievement('The full picture',loc("Purchase %1.",loc("%1 upgrade",LBeautify(300)))+'So that\'s where that fits in!',[32,11]); - new Game.Achievement('When there\'s nothing left to add',loc("Purchase %1.",loc("%1 upgrade",LBeautify(400)))+'...keep going.',[33,11]); - - order=7002; - new Game.Achievement('Sexcentennial',loc("Have at least %1 of everything.",600)+'Hey, nice milestone!',[31,33]); - - Game.CpsAchievement('Keep going until I say stop'); - Game.CpsAchievement('But I didn\'t say stop, did I?'); - Game.CpsAchievement('With unrivaled fervor'); - Game.BankAchievement('Think big'); - Game.BankAchievement('Hypersize me'); - Game.BankAchievement('Max capacity'); - - order=61616; - new Game.Achievement('Liquid assets',loc("Have your stock market profits surpass $%1.",1e7),[12,33]); - - order=11000; - new Game.Achievement('Stifling the press',loc("Squish the news ticker flat, then click on it.")+'Narrow in here or is it just me?',[27,7]); - - - order=2500; - Game.TieredAchievement('It\'s big brain time','','Cortex baker',1); - Game.TieredAchievement('Just my imagination','','Cortex baker',2); - Game.TieredAchievement('Now there\'s an idea','','Cortex baker',3); - Game.TieredAchievement('The organ that named itself','','Cortex baker',4); - Game.TieredAchievement('Gyrification','','Cortex baker',5); - Game.TieredAchievement('A trademarked portmanteau of "imagination" and "engineering"','','Cortex baker',6); - Game.TieredAchievement('Mindfulness','','Cortex baker',7); - Game.TieredAchievement('The 10% myth','','Cortex baker',8); - Game.TieredAchievement('Don\'t think about it too hard','','Cortex baker',9); - Game.TieredAchievement('Though fools seldom differ','','Cortex baker',10); - Game.TieredAchievement('Looking kind of dumb','','Cortex baker',11); - Game.TieredAchievement('A beautiful mind','','Cortex baker',12); - Game.TieredAchievement('Cardinal synapses','','Cortex baker',13); - - order=2520; - Game.ProductionAchievement('Positive thinking','Cortex baker',1); - Game.ProductionAchievement('The thought that counts','Cortex baker',2); - Game.ProductionAchievement('Unthinkable','Cortex baker',3); - - new Game.Achievement('Gifted','',[34,26]);Game.Objects['Cortex baker'].levelAchiev10=Game.last; - - - order=1100;Game.TieredAchievement('They moistly come at night','','Grandma',14); - order=1200;Game.TieredAchievement('It\'s grown on you','','Farm',14); - order=1300;Game.TieredAchievement('Don\'t let the walls cave in on you','','Mine',14); - order=1400;Game.TieredAchievement('Replaced by robots','','Factory',14); - order=1425;Game.TieredAchievement('Financial prodigy','Imagine how it would be, to be at the top making cash money.','Bank',14); - order=1450;Game.TieredAchievement('And I will pray to a big god','','Temple',14); - order=1475;Game.TieredAchievement('Shosple Colupis','','Wizard tower',14); - order=1500;Game.TieredAchievement('False vacuum','','Shipment',14); - order=1600;Game.TieredAchievement('Metallic taste','','Alchemy lab',14); - order=1700;Game.TieredAchievement('Swiss cheese','','Portal',14); - order=1800;Game.TieredAchievement('But the future refused to change','','Time machine',14); - order=1900;Game.TieredAchievement('What\'s the dark matter with you','','Antimatter condenser',14); - order=2000;Game.TieredAchievement('Enlightenment','','Prism',14); - order=2100;Game.TieredAchievement('Never tell me the odds','','Chancemaker',14); - order=2200;Game.TieredAchievement('Blowing an Apollonian gasket','','Fractal engine',14); - order=2300;Game.TieredAchievement('Get with the program','','Javascript console',14); - order=2400;Game.TieredAchievement('Lost your cosmic marbles','','Idleverse',14); - order=2500;Game.TieredAchievement('By will alone I set my mind in motion','','Cortex baker',14); - - order=1000;new Game.Achievement('Ain\'t that a click in the head',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e29))),[11,34]); - - order=7002; - new Game.Achievement('Sexcentennial and a half',loc("Have at least %1 of everything.",650)+'Hope you\'re enjoying the grind so far! It gets worse.',[21,34]); - - Game.CpsAchievement('I am speed'); - Game.CpsAchievement('And on and on'); - Game.BankAchievement('Fake it till you bake it'); - Game.BankAchievement('History in the baking'); - - order=22100;new Game.Achievement('Baby it\'s old outside',loc("Click one of Santa's helper grandmas during Christmas season."),[10,9]); - - order=5000; - new Game.Achievement('Myriad',loc("Own %1.",loc("%1 building",LBeautify(10000)))+'At this point, most of your assets lie in real estate.',[31,6]); - - order=6000; - new Game.Achievement('Kaizen',loc("Purchase %1.",loc("%1 upgrade",LBeautify(500)))+'Just a little more.',[31,5]); - new Game.Achievement('Beyond quality',loc("Purchase %1.",loc("%1 upgrade",LBeautify(600)))+'Dwarfing all of mankind\'s accomplishments.',[32,5]); - - Game.CpsAchievement('Everything happens so much'); - Game.CpsAchievement('I\'ll rest when I\'m dead'); - Game.BankAchievement('What do you get for the baker who has everything'); - Game.BankAchievement('Bottomless pit'); - - order=6001; - new Game.Achievement('All the stars in heaven',loc("Own %1 heavenly upgrades.",100),[30,5]); - - //end of achievements - - - - - for (var i in Game.Objects) - { - if (Game.Objects[i].levelAchiev10) {Game.Objects[i].levelAchiev10.baseDesc=loc("Reach level %1 %2.",[10,Game.Objects[i].plural]);Game.Objects[i].levelAchiev10.desc=Game.Objects[i].levelAchiev10.baseDesc;} - } - - - - LocalizeUpgradesAndAchievs(); - - - /*===================================================================================== - BUFFS - =======================================================================================*/ - - Game.buffs={};//buffs currently in effect by name - Game.buffsI=0; - Game.buffsL=l('buffs'); - Game.gainBuff=function(type,time,arg1,arg2,arg3) - { - type=Game.buffTypesByName[type]; - var obj=type.func(time,arg1,arg2,arg3); - obj.type=type; - obj.arg1=arg1; - obj.arg2=arg2; - obj.arg3=arg3; - if (!obj.dname && obj.name!='???') obj.dname=loc(obj.name); - - var buff={ - visible:true, - time:0, - name:'???', - desc:'', - icon:[0,0] - }; - if (Game.buffs[obj.name])//if there is already a buff in effect with this name - { - var buff=Game.buffs[obj.name]; - if (obj.max) buff.time=Math.max(obj.time,buff.time);//new duration is max of old and new - if (obj.add) buff.time+=obj.time;//new duration is old + new - if (!obj.max && !obj.add) buff.time=obj.time;//new duration is set to new - buff.maxTime=buff.time; - } - else//create new buff - { - for (var i in obj)//paste parameters onto buff - {buff[i]=obj[i];} - buff.maxTime=buff.time; - Game.buffs[buff.name]=buff; - buff.id=Game.buffsI; - - //create dom - Game.buffsL.innerHTML=Game.buffsL.innerHTML+'

'+buff.dname+'

'+buff.desc+'
' - ,'left',true):'')+' style="opacity:1;float:none;display:block;'+writeIcon(buff.icon)+'">'; - - buff.l=l('buff'+buff.id); - - Game.buffsI++; - } - Game.recalculateGains=1; - Game.storeToRefresh=1; - return buff; - } - Game.hasBuff=function(what)//returns 0 if there is no buff in effect with this name; else, returns it - {if (!Game.buffs[what]) return 0; else return Game.buffs[what];} - Game.updateBuffs=function()//executed every logic frame - { - for (var i in Game.buffs) - { - var buff=Game.buffs[i]; - - if (buff.time>=0) - { - if (!l('buffPieTimer'+buff.id)) l('buff'+buff.id).innerHTML=l('buff'+buff.id).innerHTML+'
'; - var T=1-(buff.time/buff.maxTime); - T=(T*144)%144; - l('buffPieTimer'+buff.id).style.backgroundPosition=(-Math.floor(T%18))*48+'px '+(-Math.floor(T/18))*48+'px'; - } - buff.time--; - if (buff.time<=0) - { - if (Game.onCrate==l('buff'+buff.id)) Game.tooltip.hide(); - if (buff.onDie) buff.onDie(); - Game.buffsL.removeChild(l('buff'+buff.id)); - if (Game.buffs[buff.name]) - { - Game.buffs[buff.name]=0; - delete Game.buffs[buff.name]; - } - Game.recalculateGains=1; - Game.storeToRefresh=1; - } - } - } - Game.killBuff=function(what)//remove a buff by name - {if (Game.buffs[what]){Game.buffs[what].time=0;/*Game.buffs[what]=0;*/}} - Game.killBuffs=function()//remove all buffs - {Game.buffsL.innerHTML='';Game.buffs={};Game.recalculateGains=1;Game.storeToRefresh=1;} - - - Game.buffTypes=[];//buff archetypes; only buffs declared from these can be saved and loaded - Game.buffTypesByName=[]; - Game.buffTypesN=0; - Game.buffType=function(name,func) - { - this.name=name; - this.func=func;//this is a function that returns a buff object; it takes a "time" argument in seconds, and 3 more optional arguments at most, which will be saved and loaded as floats - this.id=Game.buffTypesN; - this.vanilla=Game.vanilla; - Game.buffTypesByName[this.name]=this; - Game.buffTypes[Game.buffTypesN]=this; - Game.buffTypesN++; - } - - /* - basic buff parameters : - name:'Kitten rain', - desc:'It\'s raining kittens!', - icon:[0,0], - time:30*Game.fps - other parameters : - visible:false - will hide the buff from the buff list - add:true - if this buff already exists, add the new duration to the old one - max:true - if this buff already exists, set the new duration to the max of either - onDie:function(){} - function will execute when the buff runs out - power:3 - used by some buffs - multCpS:3 - buff multiplies CpS by this amount - multClick:3 - buff multiplies click power by this amount - */ - - //base buffs - new Game.buffType('frenzy',function(time,pow) - { - return { - name:'Frenzy', - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[10,14], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:1 - }; - }); - new Game.buffType('blood frenzy',function(time,pow) - { - return { - name:'Elder frenzy', - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[29,6], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:1 - }; - }); - new Game.buffType('clot',function(time,pow) - { - return { - name:'Clot', - desc:loc("Cookie production halved for %1!",Game.sayTime(time*Game.fps,-1)), - icon:[15,5], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:2 - }; - }); - new Game.buffType('dragon harvest',function(time,pow) - { - if (Game.Has('Dragon fang')) pow=Math.ceil(pow*1.1); - return { - name:'Dragon Harvest', - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[10,25], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:1 - }; - }); - new Game.buffType('everything must go',function(time,pow) - { - return { - name:'Everything must go', - desc:loc("All buildings are %1% cheaper for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[17,6], - time:time*Game.fps, - add:true, - power:pow, - aura:1 - }; - }); - new Game.buffType('cursed finger',function(time,pow) - { - return { - name:'Cursed finger', - desc:loc("Cookie production halted for %1,
but each click is worth %2 of CpS.",[Game.sayTime(time*Game.fps,-1),Game.sayTime(time*Game.fps,-1)]), - icon:[12,17], - time:time*Game.fps, - add:true, - power:pow, - multCpS:0, - aura:1 - }; - }); - new Game.buffType('click frenzy',function(time,pow) - { - return { - name:'Click frenzy', - desc:loc("Clicking power x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[0,14], - time:time*Game.fps, - add:true, - multClick:pow, - aura:1 - }; - }); - new Game.buffType('dragonflight',function(time,pow) - { - if (Game.Has('Dragon fang')) pow=Math.ceil(pow*1.1); - return { - name:'Dragonflight', - desc:loc("Clicking power x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[0,25], - time:time*Game.fps, - add:true, - multClick:pow, - aura:1 - }; - }); - new Game.buffType('cookie storm',function(time,pow) - { - return { - name:'Cookie storm', - desc:loc("Cookies everywhere!"), - icon:[22,6], - time:time*Game.fps, - add:true, - power:pow, - aura:1 - }; - }); - new Game.buffType('building buff',function(time,pow,building) - { - var obj=Game.ObjectsById[building]; - return { - name:Game.goldenCookieBuildingBuffs[obj.name][0], - dname:EN?Game.goldenCookieBuildingBuffs[obj.name][0]:loc("%1 Power!",obj.dname), - desc:loc("Your %1 are boosting your CpS!",loc("%1 "+obj.bsingle,LBeautify(obj.amount)))+'
'+loc("Cookie production +%1% for %2!",[Beautify(Math.ceil(pow*100-100)),Game.sayTime(time*Game.fps,-1)]), - icon:[obj.iconColumn,14], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:1 - }; - }); - new Game.buffType('building debuff',function(time,pow,building) - { - var obj=Game.ObjectsById[building]; - return { - name:Game.goldenCookieBuildingBuffs[obj.name][1], - dname:EN?Game.goldenCookieBuildingBuffs[obj.name][1]:loc("%1 Burden!",obj.dname), - desc:loc("Your %1 are rusting your CpS!",loc("%1 "+obj.bsingle,LBeautify(obj.amount)))+'
'+loc("Cookie production %1% slower for %2!",[Beautify(Math.ceil(pow*100-100)),Game.sayTime(time*Game.fps,-1)]), - icon:[obj.iconColumn,15], - time:time*Game.fps, - add:true, - multCpS:1/pow, - aura:2 - }; - }); - new Game.buffType('sugar blessing',function(time,pow) - { - return { - name:'Sugar blessing', - desc:loc("You find %1% more golden cookies for the next %2.",[10,Game.sayTime(time*Game.fps,-1)]), - icon:[29,16], - time:time*Game.fps, - //add:true - }; - }); - new Game.buffType('haggler luck',function(time,pow) - { - return { - name:'Haggler\'s luck', - desc:loc("All upgrades are %1% cheaper for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[25,11], - time:time*Game.fps, - power:pow, - max:true - }; - }); - new Game.buffType('haggler misery',function(time,pow) - { - return { - name:'Haggler\'s misery', - desc:loc("All upgrades are %1% pricier for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[25,11], - time:time*Game.fps, - power:pow, - max:true - }; - }); - new Game.buffType('pixie luck',function(time,pow) - { - return { - name:'Crafty pixies', - desc:loc("All buildings are %1% cheaper for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[26,11], - time:time*Game.fps, - power:pow, - max:true - }; - }); - new Game.buffType('pixie misery',function(time,pow) - { - return { - name:'Nasty goblins', - desc:loc("All buildings are %1% pricier for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[26,11], - time:time*Game.fps, - power:pow, - max:true - }; - }); - new Game.buffType('magic adept',function(time,pow) - { - return { - name:'Magic adept', - desc:loc("Spells backfire %1 times less for %2.",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[29,11], - time:time*Game.fps, - power:pow, - max:true - }; - }); - new Game.buffType('magic inept',function(time,pow) - { - return { - name:'Magic inept', - desc:loc("Spells backfire %1 times more for %2.",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[29,11], - time:time*Game.fps, - power:pow, - max:true - }; - }); - new Game.buffType('devastation',function(time,pow) - { - return { - name:'Devastation', - desc:loc("Clicking power +%1% for %2!",[Math.floor(pow*100-100),Game.sayTime(time*Game.fps,-1)]), - icon:[23,18], - time:time*Game.fps, - multClick:pow, - aura:1, - max:true - }; - }); - new Game.buffType('sugar frenzy',function(time,pow) - { - return { - name:'Sugar frenzy', - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[29,14], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:0 - }; - }); - new Game.buffType('loan 1',function(time,pow) - { - return { - name:'Loan 1', - dname:loc("Loan %1",1), - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[1,33], - time:time*Game.fps, - power:pow, - multCpS:pow, - max:true, - onDie:function(){if (Game.takeLoan) {Game.takeLoan(1,true);}}, - }; - }); - new Game.buffType('loan 1 interest',function(time,pow) - { - return { - name:'Loan 1 (interest)', - dname:loc("Loan %1 (interest)",1), - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[1,33], - time:time*Game.fps, - power:pow, - multCpS:pow, - max:true - }; - }); - new Game.buffType('loan 2',function(time,pow) - { - return { - name:'Loan 2', - dname:loc("Loan %1",2), - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[1,33], - time:time*Game.fps, - power:pow, - multCpS:pow, - max:true, - onDie:function(){if (Game.takeLoan) {Game.takeLoan(2,true);}}, - }; - }); - new Game.buffType('loan 2 interest',function(time,pow) - { - return { - name:'Loan 2 (interest)', - dname:loc("Loan %1 (interest)",2), - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[1,33], - time:time*Game.fps, - power:pow, - multCpS:pow, - max:true - }; - }); - new Game.buffType('loan 3',function(time,pow) - { - return { - name:'Loan 3', - dname:loc("Loan %1",3), - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[1,33], - time:time*Game.fps, - power:pow, - multCpS:pow, - max:true, - onDie:function(){if (Game.takeLoan) {Game.takeLoan(3,true);}}, - }; - }); - new Game.buffType('loan 3 interest',function(time,pow) - { - return { - name:'Loan 3 (interest)', - dname:loc("Loan %1 (interest)",3), - desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), - icon:[1,33], - time:time*Game.fps, - power:pow, - multCpS:pow, - max:true - }; - }); - - //end of buffs - - - - - /*===================================================================================== - GRANDMAPOCALYPSE - =======================================================================================*/ - Game.UpdateGrandmapocalypse=function() - { - if (Game.Has('Elder Covenant') || Game.Objects['Grandma'].amount==0) Game.elderWrath=0; - else if (Game.pledgeT>0)//if the pledge is active, lower it - { - Game.pledgeT--; - if (Game.pledgeT==0)//did we reach 0? make the pledge purchasable again - { - Game.Lock('Elder Pledge'); - Game.Unlock('Elder Pledge'); - Game.elderWrath=1; - } - } - else - { - if (Game.Has('One mind') && Game.elderWrath==0) - { - Game.elderWrath=1; - } - if (Math.random()<0.001 && Game.elderWrath0) - { - if (Game.elderWrath>=3) PlayCue('fadeTo','grandmapocalypse'); - else PlayCue('fadeTo','click'); - } - Game.storeToRefresh=1; - } - - Game.elderWrathOld=Game.elderWrath; - - Game.UpdateWrinklers(); - } - - //wrinklers - - function inRect(x,y,rect) - { - //find out if the point x,y is in the rotated rectangle rect{w,h,r,o} (width,height,rotation in radians,y-origin) (needs to be normalized) - //I found this somewhere online I guess - var dx = x+Math.sin(-rect.r)*(-(rect.h/2-rect.o)),dy=y+Math.cos(-rect.r)*(-(rect.h/2-rect.o)); - var h1 = Math.sqrt(dx*dx + dy*dy); - var currA = Math.atan2(dy,dx); - var newA = currA - rect.r; - var x2 = Math.cos(newA) * h1; - var y2 = Math.sin(newA) * h1; - if (x2 > -0.5 * rect.w && x2 < 0.5 * rect.w && y2 > -0.5 * rect.h && y2 < 0.5 * rect.h) return true; - return false; - } - - Game.wrinklerHP=2.1; - Game.wrinklers=[]; - for (var i=0;i<12;i++) - { - Game.wrinklers.push({id:parseInt(i),close:0,sucked:0,phase:0,x:0,y:0,r:0,hurt:0,hp:Game.wrinklerHP,selected:0,type:0}); - } - Game.getWrinklersMax=function() - { - var n=10; - if (Game.Has('Elder spice')) n+=2; - return n; - } - Game.ResetWrinklers=function() - { - for (var i in Game.wrinklers) - { - Game.wrinklers[i]={id:parseInt(i),close:0,sucked:0,phase:0,x:0,y:0,r:0,hurt:0,hp:Game.wrinklerHP,selected:0,type:0}; - } - } - Game.CollectWrinklers=function() - { - for (var i in Game.wrinklers) - { - Game.wrinklers[i].hp=0; - } - } - Game.wrinklerSquishSound=Math.floor(Math.random()*4)+1; - Game.playWrinklerSquishSound=function() - { - PlaySound('snd/'+(Game.WINKLERS?'squeak':'squish')+(Game.wrinklerSquishSound)+'.mp3',0.5); - Game.wrinklerSquishSound+=Math.floor(Math.random()*1.5)+1; - if (Game.wrinklerSquishSound>4) Game.wrinklerSquishSound-=4; - } - Game.SpawnWrinkler=function(me) - { - if (!me) - { - var max=Game.getWrinklersMax(); - var n=0; - for (var i in Game.wrinklers) - { - if (Game.wrinklers[i].phase>0) n++; - } - for (var i in Game.wrinklers) - { - var it=Game.wrinklers[i]; - if (it.phase==0 && Game.elderWrath>0 && n0 && Game.wrinklers[i].hp>0) wrinklers.push(Game.wrinklers[i]); - } - if (wrinklers.length>0) - { - var me=choose(wrinklers); - me.hp=-10; - return me; - } - return false; - } - Game.UpdateWrinklers=function() - { - var xBase=0; - var yBase=0; - var onWrinkler=0; - if (Game.LeftBackground) - { - xBase=Game.cookieOriginX; - yBase=Game.cookieOriginY; - } - var max=Game.getWrinklersMax(); - var n=0; - for (var i in Game.wrinklers) - { - if (Game.wrinklers[i].phase>0) n++; - } - for (var i in Game.wrinklers) - { - var me=Game.wrinklers[i]; - if (me.phase==0 && Game.elderWrath>0 && n0) - { - if (me.close<1) me.close+=(1/Game.fps)/10; - if (me.close>1) me.close=1; - } - else me.close=0; - if (me.close==1 && me.phase==1) - { - me.phase=2; - Game.recalculateGains=1; - } - if (me.phase==2) - { - me.sucked+=(((Game.cookiesPs/Game.fps)*Game.cpsSucked));//suck the cookies - } - if (me.phase>0) - { - if (me.type==0) - { - if (me.hp0)) - { - var x=me.x+(Math.sin(me.r*Math.PI/180)*90); - var y=me.y+(Math.cos(me.r*Math.PI/180)*90); - for (var ii=0;ii<3;ii++) - { - //Game.particleAdd(x+Math.random()*50-25,y+Math.random()*50-25,Math.random()*4-2,Math.random()*-2-2,1,1,2,'wrinklerBits.png'); - var part=Game.particleAdd(x,y,Math.random()*4-2,Math.random()*-2-2,1,1,2,me.type==1?'shinyWrinklerBits.png':'wrinklerBits.png'); - part.r=-me.r; - } - } - } - Game.Click=0; - } - onWrinkler=1; - } - } - - if (me.hurt>0) - { - me.hurt-=5/Game.fps; - //me.close-=me.hurt*0.05; - //me.x+=Math.random()*2-1; - //me.y+=Math.random()*2-1; - me.r+=(Math.sin(Game.T*1)*me.hurt)*18;//Math.random()*2-1; - } - if (me.hp<=0.5 && me.phase>0) - { - Game.playWrinklerSquishSound(); - PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); - Game.wrinklersPopped++; - Game.recalculateGains=1; - me.phase=0; - me.close=0; - me.hurt=0; - me.hp=3; - var toSuck=1.1; - if (Game.Has('Sacrilegious corruption')) toSuck*=1.05; - if (me.type==1) toSuck*=3;//shiny wrinklers are an elusive, profitable breed - me.sucked*=toSuck;//cookie dough does weird things inside wrinkler digestive tracts - if (Game.Has('Wrinklerspawn')) me.sucked*=1.05; - if (Game.hasGod) - { - var godLvl=Game.hasGod('scorn'); - if (godLvl==1) me.sucked*=1.15; - else if (godLvl==2) me.sucked*=1.1; - else if (godLvl==3) me.sucked*=1.05; - } - if (me.sucked>0.5) - { - Game.Notify(me.type==1?loc("Exploded a shiny wrinkler"):loc("Exploded a wrinkler"),loc("Found %1!",loc("%1 cookie",LBeautify(me.sucked))),[19,8],6); - Game.Popup('
'+loc("+%1!",loc("%1 cookie",LBeautify(me.sucked)))+'
',Game.mouseX,Game.mouseY); - - if (Game.season=='halloween') - { - //if (Math.random()<(Game.HasAchiev('Spooky cookies')?0.2:0.05))//halloween cookie drops - var failRate=0.95; - if (Game.HasAchiev('Spooky cookies')) failRate=0.8; - if (Game.Has('Starterror')) failRate*=0.9; - failRate*=1/Game.dropRateMult(); - if (Game.hasGod) - { - var godLvl=Game.hasGod('seasons'); - if (godLvl==1) failRate*=0.9; - else if (godLvl==2) failRate*=0.95; - else if (godLvl==3) failRate*=0.97; - } - if (me.type==1) failRate*=0.9; - if (Math.random()>failRate)//halloween cookie drops - { - var cookie=choose(['Skull cookies','Ghost cookies','Bat cookies','Slime cookies','Pumpkin cookies','Eyeball cookies','Spider cookies']); - if (!Game.HasUnlocked(cookie) && !Game.Has(cookie)) - { - Game.Unlock(cookie); - Game.Notify(Game.Upgrades[cookie].dname,loc("You also found %1!",Game.Upgrades[cookie].dname),Game.Upgrades[cookie].icon); - } - } - } - Game.DropEgg(0.98); - } - if (me.type==1) Game.Win('Last Chance to See'); - Game.Earn(me.sucked); - /*if (Game.prefs.particles && !Game.WINKLERS) - { - var x=me.x+(Math.sin(me.r*Math.PI/180)*100); - var y=me.y+(Math.cos(me.r*Math.PI/180)*100); - for (var ii=0;ii<6;ii++) - { - Game.particleAdd(x+Math.random()*50-25,y+Math.random()*50-25,Math.random()*4-2,Math.random()*-2-2,1,1,2,'wrinklerBits.png'); - } - }*/ - if (Game.prefs.particles) - { - var x=me.x+(Math.sin(me.r*Math.PI/180)*90); - var y=me.y+(Math.cos(me.r*Math.PI/180)*90); - if (me.sucked>0) - { - for (var ii=0;ii<5;ii++) - { - Game.particleAdd(Game.mouseX,Game.mouseY,Math.random()*4-2,Math.random()*-2-2,Math.random()*0.5+0.75,1.5,2); - } - } - if (!Game.prefs.notScary && !Game.WINKLERS) - { - for (var ii=0;ii<8;ii++) - { - var part=Game.particleAdd(x,y,Math.random()*4-2,Math.random()*-2-2,1,1,2,me.type==1?'shinyWrinklerBits.png':'wrinklerBits.png'); - part.r=-me.r; - } - } - } - me.sucked=0; - } - } - if (onWrinkler) - { - Game.mousePointer=1; - } - } - Game.DrawWrinklers=function() - { - var ctx=Game.LeftBackground; - var selected=0; - for (var i in Game.wrinklers) - { - var me=Game.wrinklers[i]; - if (me.phase>0) - { - ctx.globalAlpha=me.close; - ctx.save(); - ctx.translate(me.x,me.y); - var sw=100+2*Math.sin(Game.T*0.2+i*3); - var sh=200+5*Math.sin(Game.T*0.2-2+i*3); - if (Game.prefs.fancy) - { - ctx.translate(0,30); - ctx.rotate(-(me.r)*Math.PI/180); - ctx.drawImage(Pic('wrinklerShadow.png'),-sw/2,-10,sw,sh); - ctx.rotate((me.r)*Math.PI/180); - ctx.translate(0,-30); - } - ctx.rotate(-(me.r)*Math.PI/180); - //var s=Math.min(1,me.sucked/(Game.cookiesPs*60))*0.75+0.25;//scale wrinklers as they eat - //ctx.scale(Math.pow(s,1.5)*1.25,s); - //ctx.fillRect(-50,-10,100,200); - var pic=Game.WINKLERS?'winkler.png':'wrinkler.png'; - if (me.type==1) pic=Game.WINKLERS?'shinyWinkler.png':'shinyWrinkler.png'; - else if (Game.season=='christmas') pic=Game.WINKLERS?'winterWinkler.png':'winterWrinkler.png'; - ctx.drawImage(Pic(pic),-sw/2,-10,sw,sh); - if (!Game.WINKLERS && Game.prefs.notScary) ctx.drawImage(Pic(Math.sin(Game.T*0.003+i*11+137+Math.sin(Game.T*0.017+i*13))>0.9997?'wrinklerBlink.png':'wrinklerGooglies.png'),-sw/2,-10+1*Math.sin(Game.T*0.2+i*3+1.2),sw,sh); - //ctx.drawImage(Pic(pic),-50,-10); - //ctx.fillText(me.id+' : '+me.sucked,0,0); - if (me.type==1 && Math.random()<0.3 && Game.prefs.particles)//sparkle - { - ctx.globalAlpha=Math.random()*0.65+0.1; - var s=Math.random()*30+5; - ctx.globalCompositeOperation='lighter'; - ctx.drawImage(Pic('glint.jpg'),-s/2+Math.random()*50-25,-s/2+Math.random()*200,s,s); - } - ctx.restore(); - - if (Game.prefs.particles && me.phase==2 && Math.random()<0.03) - { - Game.particleAdd(me.x,me.y,Math.random()*4-2,Math.random()*-2-2,Math.random()*0.5+0.5,1,2); - } - - if (me.selected) selected=me; - } - } - if (selected && Game.Has('Eye of the wrinkler')) - { - var x=Game.cookieOriginX; - var y=Game.cookieOriginY; - ctx.font='14px Merriweather'; - ctx.textAlign='center'; - var text=loc("Swallowed:"); - var width=Math.ceil(Math.max(ctx.measureText(text).width,ctx.measureText(Beautify(selected.sucked)).width)); - ctx.fillStyle='#000'; - ctx.globalAlpha=0.65; - /*ctx.strokeStyle='#000'; - ctx.lineWidth=8; - ctx.beginPath(); - ctx.moveTo(x,y); - ctx.lineTo(Math.floor(selected.x),Math.floor(selected.y)); - ctx.stroke();*/ - var xO=x-width/2-16; - var yO=y-4; - var dist=Math.floor(Math.sqrt((selected.x-xO)*(selected.x-xO)+(selected.y-yO)*(selected.y-yO))); - var angle=-Math.atan2(yO-selected.y,xO-selected.x)+Math.PI/2; - ctx.strokeStyle='#fff'; - ctx.lineWidth=1; - for (var i=0;i0.5) - { - number++; - if (Game.wrinklers[i].type==1) - { - shinies++; - amountShinies+=Game.wrinklers[i].sucked; - } - else amount+=Game.wrinklers[i].sucked; - } - } - return {amount:amount,number:number,shinies:shinies,amountShinies:amountShinies}; - } - Game.LoadWrinklers=function(amount,number,shinies,amountShinies) - { - if (number>0 && (amount>0 || amountShinies>0)) - { - var fullNumber=number-shinies; - var fullNumberShinies=shinies; - for (var i in Game.wrinklers) - { - if (number>0) - { - Game.wrinklers[i].phase=2; - Game.wrinklers[i].close=1; - Game.wrinklers[i].hp=3; - if (shinies>0) {Game.wrinklers[i].type=1;Game.wrinklers[i].sucked=amountShinies/fullNumberShinies;shinies--;} - else Game.wrinklers[i].sucked=amount/fullNumber; - number--; - }//respawn - } - } - } - - /*===================================================================================== - SPECIAL THINGS AND STUFF - =======================================================================================*/ - - - Game.specialTab=''; - Game.specialTabHovered=''; - Game.specialTabs=[]; - - Game.UpdateSpecial=function() - { - Game.specialTabs=[]; - if (Game.Has('A festive hat')) Game.specialTabs.push('santa'); - if (Game.Has('A crumbly egg')) Game.specialTabs.push('dragon'); - if (Game.specialTabs.length==0) {Game.ToggleSpecialMenu(0);return;} - - if (Game.LeftBackground) - { - Game.specialTabHovered=''; - var len=Game.specialTabs.length; - if (len==0) return; - var y=Game.LeftBackground.canvas.height-24-48*len; - for (var i=0;imoni && Game.santaLevel<14) - { - PlaySound('snd/shimmerClick.mp3'); - - Game.Spend(moni); - Game.santaLevel=(Game.santaLevel+1)%15; - if (Game.santaLevel==14) - { - Game.Unlock('Santa\'s dominion'); - Game.Notify(loc("You are granted %1.",Game.Upgrades['Santa\'s dominion'].dname),'',Game.Upgrades['Santa\'s dominion'].icon); - } - var drops=[]; - for (var i in Game.santaDrops) {if (!Game.HasUnlocked(Game.santaDrops[i])) drops.push(Game.santaDrops[i]);} - var drop=choose(drops); - if (drop) - { - Game.Unlock(drop); - Game.Notify(loc("Found a present!"),loc("You find a present which contains...")+'
'+Game.Upgrades[drop].dname+'!',Game.Upgrades[drop].icon); - } - - Game.ToggleSpecialMenu(1); - - if (l('specialPic')){var rect=l('specialPic').getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2)+32-TopBarOffset;} - - if (Game.santaLevel>=6) Game.Win('Coming to town'); - if (Game.santaLevel>=14) Game.Win('All hail Santa'); - Game.recalculateGains=1; - Game.upgradesToRebuild=1; - } - } - - Game.dragonLevels=[ - {name:'Dragon egg',action:loc("Chip it"),pic:0, - cost:function(){return Game.cookies>=1000000;}, - buy:function(){Game.Spend(1000000);}, - costStr:function(){return loc("%1 cookie",LBeautify(1000000));}}, - {name:'Dragon egg',action:loc("Chip it"),pic:1, - cost:function(){return Game.cookies>=1000000*2;}, - buy:function(){Game.Spend(1000000*2);}, - costStr:function(){return loc("%1 cookie",LBeautify(1000000*2));}}, - {name:'Dragon egg',action:loc("Chip it"),pic:2, - cost:function(){return Game.cookies>=1000000*4;}, - buy:function(){Game.Spend(1000000*4);}, - costStr:function(){return loc("%1 cookie",LBeautify(1000000*4));}}, - {name:'Shivering dragon egg',action:loc("Hatch it"),pic:3, - cost:function(){return Game.cookies>=1000000*8;}, - buy:function(){Game.Spend(1000000*8);}, - costStr:function(){return loc("%1 cookie",LBeautify(1000000*8));}}, - {name:'Krumblor, cookie hatchling',action:'Train Breath of Milk
Aura : kittens are 5% more effective',pic:4, - cost:function(){return Game.cookies>=1000000*16;}, - buy:function(){Game.Spend(1000000*16);}, - costStr:function(){return loc("%1 cookie",LBeautify(1000000*16));}}, - {name:'Krumblor, cookie hatchling',action:'Train Dragon Cursor
Aura : clicking is 5% more effective',pic:4,}, - {name:'Krumblor, cookie hatchling',action:'Train Elder Battalion
Aura : grandmas gain +1% CpS for every non-grandma building',pic:4,}, - {name:'Krumblor, cookie hatchling',action:'Train Reaper of Fields
Aura : golden cookies may trigger a Dragon Harvest',pic:4,}, - {name:'Krumblor, cookie dragon',action:'Train Earth Shatterer
Aura : buildings sell back for 50% instead of 25%',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Master of the Armory
Aura : all upgrades are 2% cheaper',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Fierce Hoarder
Aura : all buildings are 2% cheaper',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Dragon God
Aura : prestige CpS bonus +5%',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Arcane Aura
Aura : golden cookies appear 5% more often',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Dragonflight
Aura : golden cookies may trigger a Dragonflight',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Ancestral Metamorphosis
Aura : golden cookies give 10% more cookies',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Unholy Dominion
Aura : wrath cookies give 10% more cookies',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Epoch Manipulator
Aura : golden cookie effects last 5% longer',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Mind Over Matter
Aura : +25% random drops',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Radiant Appetite
Aura : all cookie production multiplied by 2',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Dragon\'s Fortune
Aura : +123% CpS per golden cookie on-screen',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Dragon\'s Curve
Aura : sugar lumps grow 5% faster, 50% weirder',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Reality Bending
Aura : 10% of every other aura, combined',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Dragon Orbs
Aura : selling your best building may grant a wish',pic:5,}, - {name:'Krumblor, cookie dragon',action:'Train Supreme Intellect
Aura : confers various powers to your minigames',pic:5,}, - {name:'Krumblor, cookie dragon',action:loc("Bake dragon cookie")+'
'+loc("Delicious!")+'',pic:6, - cost:function(){var fail=0;for (var i in Game.Objects){if (Game.Objects[i].amount<50) fail=1;}return (fail==0);}, - buy:function(){for (var i in Game.Objects){Game.Objects[i].sacrifice(50);}Game.Unlock('Dragon cookie');}, - costStr:function(){return loc("%1 of every building",50);}}, - {name:'Krumblor, cookie dragon',action:loc("Train secondary aura")+'
'+loc("Lets you use two dragon auras simultaneously")+'',pic:7, - cost:function(){var fail=0;for (var i in Game.Objects){if (Game.Objects[i].amount<200) fail=1;}return (fail==0);}, - buy:function(){for (var i in Game.Objects){Game.Objects[i].sacrifice(200);}}, - costStr:function(){return loc("%1 of every building",200);}}, - {name:'Krumblor, cookie dragon',action:loc("Your dragon is fully trained."),pic:8} - ]; - - Game.dragonAuras={ - 0:{name:'No aura',pic:[0,7],desc:loc("Select an aura from those your dragon knows.")}, - 1:{name:'Breath of Milk',pic:[18,25],desc:loc("Kittens are %1% more effective.",5)}, - 2:{name:'Dragon Cursor',pic:[0,25],desc:loc("Clicking is %1% more powerful.",5)}, - 3:{name:'Elder Battalion',pic:[1,25],desc:loc("Grandmas gain +%1% CpS for each non-grandma building.",1)}, - 4:{name:'Reaper of Fields',pic:[2,25],desc:loc("Golden cookies may trigger a Dragon Harvest.")}, - 5:{name:'Earth Shatterer',pic:[3,25],desc:loc("Buildings sell back for %1% instead of %2%.",[50,25])}, - 6:{name:'Master of the Armory',pic:[4,25],desc:loc("All upgrades are %1% cheaper.",2)}, - 7:{name:'Fierce Hoarder',pic:[15,25],desc:loc("All buildings are %1% cheaper.",2)}, - 8:{name:'Dragon God',pic:[16,25],desc:loc("+%1% prestige level effect on CpS.",5)}, - 9:{name:'Arcane Aura',pic:[17,25],desc:loc("Golden cookies appear %1% more often.",5)}, - 10:{name:'Dragonflight',pic:[5,25],desc:loc("Golden cookies may trigger a Dragonflight.")}, - 11:{name:'Ancestral Metamorphosis',pic:[6,25],desc:loc("Golden cookies give %1% more cookies.",10)}, - 12:{name:'Unholy Dominion',pic:[7,25],desc:loc("Wrath cookies give %1% more cookies.",10)}, - 13:{name:'Epoch Manipulator',pic:[8,25],desc:loc("Golden cookies stay %1% longer.",5)}, - 14:{name:'Mind Over Matter',pic:[13,25],desc:loc("Random drops are %1% more common.",25)}, - 15:{name:'Radiant Appetite',pic:[14,25],desc:loc("All cookie production multiplied by %1.",2)}, - 16:{name:'Dragon\'s Fortune',pic:[19,25],desc:loc("+%1% CpS per golden cookie on-screen, multiplicative.",123)}, - 17:{name:'Dragon\'s Curve',pic:[20,25],desc:loc("+%1% sugar lump growth.",5)+" "+loc("Sugar lumps are twice as likely to be unusual.")}, - 18:{name:'Reality Bending',pic:[32,25],desc:loc("One tenth of every other dragon aura, combined.")}, - 19:{name:'Dragon Orbs',pic:[33,25],desc:loc("With no buffs and no golden cookies on screen, selling your most powerful building has %1% chance to summon one.",10)}, - 20:{name:'Supreme Intellect',pic:[34,25],desc:loc("Confers various powers to your minigames while active.
See the bottom of each minigame for more details.")}, - }; - - Game.dragonAurasBN={};for (var i in Game.dragonAuras){Game.dragonAurasBN[Game.dragonAuras[i].name]=Game.dragonAuras[i];} - for (var i in Game.dragonAuras){Game.dragonAuras[i].id=parseInt(i);Game.dragonAuras[i].dname=loc(Game.dragonAuras[i].name);} - - for (var i=0;i=4 && i'+loc("Aura: %1",Game.dragonAuras[i-3].desc)+''; - if (i>=5) - { - it.costStr=function(building){return function(){return loc("%1 "+building.bsingle,LBeautify(100));}}(Game.ObjectsById[i-5]); - it.cost=function(building){return function(){return building.amount>=100;}}(Game.ObjectsById[i-5]); - it.buy=function(building){return function(){building.sacrifice(100);}}(Game.ObjectsById[i-5]); - } - } - } - - Game.hasAura=function(what) - { - if (Game.dragonAuras[Game.dragonAura].name==what || Game.dragonAuras[Game.dragonAura2].name==what) return true; else return false; - } - Game.auraMult=function(what) - { - var n=0; - if (Game.dragonAuras[Game.dragonAura].name==what || Game.dragonAuras[Game.dragonAura2].name==what) n=1; - if ((Game.dragonAuras[Game.dragonAura].name=='Reality Bending' || Game.dragonAuras[Game.dragonAura2].name=='Reality Bending') && Game.dragonLevel>=Game.dragonAurasBN[what].id+4) n+=0.1; - return n; - } - - Game.SelectDragonAura=function(slot,update) - { - var currentAura=0; - var otherAura=0; - if (slot==0) currentAura=Game.dragonAura; else currentAura=Game.dragonAura2; - if (slot==0) otherAura=Game.dragonAura2; else otherAura=Game.dragonAura; - if (!update) Game.SelectingDragonAura=currentAura; - - var str=''; - for (var i in Game.dragonAuras) - { - if (Game.dragonLevel>=parseInt(i)+4) - { - var icon=Game.dragonAuras[i].pic; - if (i==0 || i!=otherAura) str+='
'; - } - } - - var highestBuilding=0; - for (var i in Game.Objects) {if (Game.Objects[i].amount>0) highestBuilding=Game.Objects[i];} - - Game.Prompt('

'+loc(slot==1?"Set your dragon's secondary aura":"Set your dragon's aura")+'

'+ - '
'+ - '
'+ - '
'+str+'
'+ - '
'+ - '
'+(highestBuilding==0?loc("Switching your aura is free because you own no buildings."):loc("The cost of switching your aura is %1.
This will affect your CpS!",loc("%1 "+highestBuilding.bsingle,LBeautify(1))))+'
' - ,[[loc("Confirm"),(slot==0?'Game.dragonAura':'Game.dragonAura2')+'=Game.SelectingDragonAura;'+(highestBuilding==0 || currentAura==Game.SelectingDragonAura?'':'Game.ObjectsById['+highestBuilding.id+'].sacrifice(1);')+'Game.ToggleSpecialMenu(1);Game.ClosePrompt();'],loc("Cancel")],0,'widePrompt'); - Game.DescribeDragonAura(Game.SelectingDragonAura); - } - Game.SelectingDragonAura=-1; - Game.SetDragonAura=function(aura,slot) - { - Game.SelectingDragonAura=aura; - Game.SelectDragonAura(slot,1); - } - Game.DescribeDragonAura=function(aura) - { - l('dragonAuraInfo').innerHTML= - '

'+Game.dragonAuras[aura].dname+'

'+ - '
'+ - Game.dragonAuras[aura].desc+ - '
'; - } - - Game.UpgradeDragon=function() - { - if (Game.dragonLevel=Game.dragonLevels.length-1) Game.Win('Here be dragon'); - Game.ToggleSpecialMenu(1); - if (l('specialPic')){var rect=l('specialPic').getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2)+32-TopBarOffset;} - Game.recalculateGains=1; - Game.upgradesToRebuild=1; - } - } - - Game.lastClickedSpecialPic=0; - Game.ClickSpecialPic=function() - { - if (Game.specialTab=='dragon' && Game.dragonLevel>=4 && Game.Has('Pet the dragon') && l('specialPic')) - { - triggerAnim(l('specialPic'),'pucker'); - PlaySound('snd/click'+Math.floor(Math.random()*7+1)+'.mp3',0.5); - if (Date.now()-Game.lastClickedSpecialPic>2000) PlaySound('snd/growl.mp3'); - //else if (Math.random()<0.5) PlaySound('snd/growl.mp3',0.5+Math.random()*0.2); - Game.lastClickedSpecialPic=Date.now(); - if (Game.prefs.particles) - { - Game.particleAdd(Game.mouseX,Game.mouseY-32,Math.random()*4-2,Math.random()*-2-4,Math.random()*0.2+0.5,1,2,[20,3]); - } - if (Game.dragonLevel>=8 && Math.random()<1/20) - { - Math.seedrandom(Game.seed+'/dragonTime'); - var drops=['Dragon scale','Dragon claw','Dragon fang','Dragon teddy bear']; - drops=shuffle(drops); - var drop=drops[Math.floor((new Date().getMinutes()/60)*drops.length)]; - if (!Game.Has(drop) && !Game.HasUnlocked(drop)) - { - Game.Unlock(drop); - Game.Notify(drop,''+loc("Your dragon dropped something!")+'',Game.Upgrades[drop].icon); - } - Math.seedrandom(); - } - } - } - - Game.ToggleSpecialMenu=function(on) - { - if (on) - { - var pic=''; - var frame=0; - if (Game.specialTab=='santa') {pic='santa.png';frame=Game.santaLevel;} - else if (Game.specialTab=='dragon') {pic='dragon.png?v='+Game.version;frame=Game.dragonLevels[Game.dragonLevel].pic;} - else {pic='dragon.png?v='+Game.version;frame=4;} - - var str='
'; - str+='
x
'; - - if (Game.specialTab=='santa') - { - var moni=Math.pow(Game.santaLevel+1,Game.santaLevel+1); - - str+='

'+Game.santaLevels[Game.santaLevel]+'

'; - if (Game.santaLevel<14) - { - str+='
'+ - ''+ - ''; - } - } - else if (Game.specialTab=='dragon') - { - var level=Game.dragonLevels[Game.dragonLevel]; - - str+='

'+level.name+'

'; - - if (Game.dragonLevel>=5) - { - var icon=Game.dragonAuras[Game.dragonAura].pic; - str+='

'+Game.dragonAuras[Game.dragonAura].dname+'

'+ - '
'+ - Game.dragonAuras[Game.dragonAura].desc+ - '
' - ,'top')+ - '>'; - } - if (Game.dragonLevel>=26)//2nd aura slot; increased with last building (cortex baker) - { - var icon=Game.dragonAuras[Game.dragonAura2].pic; - str+='

'+Game.dragonAuras[Game.dragonAura2].dname+'

'+ - '
'+ - Game.dragonAuras[Game.dragonAura2].desc+ - '
' - ,'top')+ - '>'; - } - - if (Game.dragonLevel'+ - '
'+level.action+'
'+ - '
|
'+ - '
'+loc("sacrifice %1",''+level.costStr()+'
')+''+ - '
'; - } - else - { - str+='
'+ - '
'+level.action+'
'; - } - } - - l('specialPopup').innerHTML=str; - - l('specialPopup').className='framed prompt onScreen'; - } - else - { - if (Game.specialTab!='') - { - Game.specialTab=''; - l('specialPopup').className='framed prompt offScreen'; - setTimeout(function(){if (Game.specialTab=='') {/*l('specialPopup').style.display='none';*/l('specialPopup').innerHTML='';}},1000*0.2); - } - } - } - Game.DrawSpecial=function() - { - var len=Game.specialTabs.length; - if (len==0) return; - Game.LeftBackground.globalAlpha=1; - var y=Game.LeftBackground.canvas.height-24-48*len; - var tabI=0; - - for (var i in Game.specialTabs) - { - var selected=0; - var hovered=0; - if (Game.specialTab==Game.specialTabs[i]) selected=1; - if (Game.specialTabHovered==Game.specialTabs[i]) hovered=1; - var x=24; - var s=1; - var pic=''; - var frame=0; - if (hovered) {s=1;x=24;} - if (selected) {s=1;x=48;} - - if (Game.specialTabs[i]=='santa') {pic='santa.png';frame=Game.santaLevel;} - else if (Game.specialTabs[i]=='dragon') {pic='dragon.png?v='+Game.version;frame=Game.dragonLevels[Game.dragonLevel].pic;} - else {pic='dragon.png?v='+Game.version;frame=4;} - - if (hovered || selected) - { - var ss=s*64; - var r=Math.floor((Game.T*0.5)%360); - Game.LeftBackground.save(); - Game.LeftBackground.translate(x,y); - if (Game.prefs.fancy) Game.LeftBackground.rotate((r/360)*Math.PI*2); - Game.LeftBackground.globalAlpha=0.75; - Game.LeftBackground.drawImage(Pic('shine.png'),-ss/2,-ss/2,ss,ss); - Game.LeftBackground.restore(); - } - - if (Game.prefs.fancy) Game.LeftBackground.drawImage(Pic(pic),96*frame,0,96,96,(x+(selected?0:Math.sin(Game.T*0.2+tabI)*3)-24*s),(y-(selected?6:Math.abs(Math.cos(Game.T*0.2+tabI))*6)-24*s),48*s,48*s); - else Game.LeftBackground.drawImage(Pic(pic),96*frame,0,96,96,(x-24*s),(y-24*s),48*s,48*s); - - tabI++; - y+=48; - } - - } - - /*===================================================================================== - VISUAL EFFECTS - =======================================================================================*/ - - Game.AllMilks=[ - {name:'Automatic',icon:[0,7],type:-1,pic:'milkPlain'}, - {name:'Plain milk',icon:[1,8],type:0,pic:'milkPlain'}, - {name:'Chocolate milk',icon:[2,8],type:0,pic:'milkChocolate'}, - {name:'Raspberry milk',icon:[3,8],type:0,pic:'milkRaspberry'}, - {name:'Orange milk',icon:[4,8],type:0,pic:'milkOrange'}, - {name:'Caramel milk',icon:[5,8],type:0,pic:'milkCaramel'}, - {name:'Banana milk',icon:[6,8],type:0,pic:'milkBanana'}, - {name:'Lime milk',icon:[7,8],type:0,pic:'milkLime'}, - {name:'Blueberry milk',icon:[8,8],type:0,pic:'milkBlueberry'}, - {name:'Strawberry milk',icon:[9,8],type:0,pic:'milkStrawberry'}, - {name:'Vanilla milk',icon:[10,8],type:0,pic:'milkVanilla'}, - {name:'Zebra milk',icon:[10,7],type:1,pic:'milkZebra'}, - {name:'Cosmic milk',icon:[9,7],type:1,pic:'milkStars'}, - {name:'Flaming milk',icon:[8,7],type:1,pic:'milkFire'}, - {name:'Sanguine milk',icon:[7,7],type:1,pic:'milkBlood'}, - {name:'Midas milk',icon:[6,7],type:1,pic:'milkGold'}, - {name:'Midnight milk',icon:[5,7],type:1,pic:'milkBlack'}, - {name:'Green inferno milk',icon:[4,7],type:1,pic:'milkGreenFire'}, - {name:'Frostfire milk',icon:[3,7],type:1,pic:'milkBlueFire'}, - {name:'Honey milk',icon:[21,23],type:0,pic:'milkHoney'}, - {name:'Coffee milk',icon:[22,23],type:0,pic:'milkCoffee'}, - {name:'Tea milk',icon:[23,23],type:0,pic:'milkTea'}, - {name:'Coconut milk',icon:[24,23],type:0,pic:'milkCoconut'}, - {name:'Cherry milk',icon:[25,23],type:0,pic:'milkCherry'}, - {name:'Soy milk',icon:[27,23],type:1,pic:'milkSoy'}, - {name:'Spiced milk',icon:[26,23],type:0,pic:'milkSpiced'}, - {name:'Maple milk',icon:[28,23],type:0,pic:'milkMaple'}, - {name:'Mint milk',icon:[29,23],type:0,pic:'milkMint'}, - {name:'Licorice milk',icon:[30,23],type:0,pic:'milkLicorice'}, - {name:'Rose milk',icon:[31,23],type:0,pic:'milkRose'}, - {name:'Dragonfruit milk',icon:[21,24],type:0,pic:'milkDragonfruit'}, - {name:'Melon milk',icon:[22,24],type:0,pic:'milkMelon'}, - {name:'Blackcurrant milk',icon:[23,24],type:0,pic:'milkBlackcurrant'}, - ]; - - Game.Milks=[]; - for (var i=0;i=1 && Game.elderWrathD<2) - { - Game.bgR=(Game.elderWrathD-1)/1; - Game.bg=Game.defaultBg; - Game.bgFade='grandmas1'; - } - else if (Game.elderWrathD>=2 && Game.elderWrathD<3) - { - Game.bgR=(Game.elderWrathD-2)/1; - Game.bg='grandmas1'; - Game.bgFade='grandmas2'; - } - else if (Game.elderWrathD>=3)// && Game.elderWrathD<4) - { - Game.bgR=(Game.elderWrathD-3)/1; - Game.bg='grandmas2'; - Game.bgFade='grandmas3'; - } - - if (Game.bgType!=0 && Game.ascensionMode!=1) - { - Game.bgR=0; - Game.bg=Game.BGsByChoice[Game.bgType].pic; - Game.bgFade=Game.bg; - } - - Game.Background.fillPattern(Pic(Game.bg+'.jpg'),0,0,Game.Background.canvas.width,Game.Background.canvas.height,512,512,0,0); - if (Game.bgR>0) - { - Game.Background.globalAlpha=Game.bgR; - Game.Background.fillPattern(Pic(Game.bgFade+'.jpg'),0,0,Game.Background.canvas.width,Game.Background.canvas.height,512,512,0,0); - } - Game.Background.globalAlpha=1; - Game.Background.drawImage(Pic('shadedBordersSoft.png'),0,0,Game.Background.canvas.width,Game.Background.canvas.height); - } - - } - Timer.track('window background'); - - //clear - ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height); - /*if (Game.AscendTimer=1000) pic='cookieShower3.png'; - else if (Game.cookiesPs>=500) pic='cookieShower2.png'; - else if (Game.cookiesPs>=50) pic='cookieShower1.png'; - else pic=''; - } - if (pic!='') - { - if (Game.elderWrathD>=1 && !Game.prefs.notScary) opacity=1-((Math.min(Game.elderWrathD,1.5)-1)/0.5); - ctx.globalAlpha=opacity; - var y=(Math.floor(Game.T*2)%512); - ctx.fillPattern(Pic(pic),0,0,ctx.canvas.width,ctx.canvas.height+512,512,512,0,y); - ctx.globalAlpha=1; - } - //snow - if (Game.season=='christmas') - { - var y=(Math.floor(Game.T*2.5)%512); - ctx.globalAlpha=0.75; - ctx.globalCompositeOperation='lighter'; - ctx.fillPattern(Pic('snow2.jpg'),0,0,ctx.canvas.width,ctx.canvas.height+512,512,512,0,y); - ctx.globalCompositeOperation='source-over'; - ctx.globalAlpha=1; - } - //hearts - if (Game.season=='valentines') - { - var y=(Math.floor(Game.T*2.5)%512); - ctx.globalAlpha=1; - ctx.fillPattern(Pic('heartStorm.png'),0,0,ctx.canvas.width,ctx.canvas.height+512,512,512,0,y); - ctx.globalAlpha=1; - } - Timer.track('left background'); - - Game.particlesDraw(0); - ctx.globalAlpha=1; - Timer.track('particles'); - - //big cookie shine - var s=512; - - var x=Game.cookieOriginX; - var y=Game.cookieOriginY; - - var r=Math.floor((Game.T*0.5)%360); - ctx.save(); - ctx.translate(x,y); - ctx.rotate((r/360)*Math.PI*2); - var alphaMult=1; - if (Game.bgType==2 || Game.bgType==4) alphaMult=0.5; - var pic='shine.png'; - if (goodBuff) {pic='shineGold.png';alphaMult=1;} - else if (badBuff) {pic='shineRed.png';alphaMult=1;} - if (goodBuff && Game.prefs.fancy) ctx.globalCompositeOperation='lighter'; - ctx.globalAlpha=0.5*alphaMult; - ctx.drawImage(Pic(pic),-s/2,-s/2,s,s); - ctx.rotate((-r*2/360)*Math.PI*2); - ctx.globalAlpha=0.25*alphaMult; - ctx.drawImage(Pic(pic),-s/2,-s/2,s,s); - ctx.restore(); - Timer.track('shine'); - - if (Game.ReincarnateTimer>0) - { - ctx.globalAlpha=1-Game.ReincarnateTimer/Game.ReincarnateDuration; - ctx.fillStyle='#000'; - ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height); - ctx.globalAlpha=1; - } - - if (showDragon) - { - //big dragon - var s=300*2*(1+Math.sin(Game.T*0.013)*0.1); - var x=Game.cookieOriginX-s/2; - var y=Game.cookieOriginY-s/(1.4+0.2*Math.sin(Game.T*0.01)); - ctx.drawImage(Pic('dragonBG.png'),x,y,s,s); - } - - //big cookie - if (false)//don't do that - { - ctx.globalAlpha=1; - var amount=Math.floor(Game.cookies).toString(); - var digits=amount.length; - var space=0; - for (var i=0;i0) space-=s*(1-num/10)/2; - if (i==0 && num>1) space+=s*0.1; - for (var ii=0;ii0.997) w=1.5; - else if (w>0.994) w=0.5; - else w=0; - w*=-4; - if (fancy) w+=Math.sin((n+Game.T*0.01)*Math.PI/2)*4; - var x=0; - var y=(140/* *Game.BigCookieSize*/+n*16+w)-16; - - var rot=7.2;//(1/50)*360 - if (i==0 && fancy) rot-=Game.T*0.1; - if (i%50==0) rot+=7.2/2; - ctx.rotate((rot/360)*Math.PI*2); - ctx.drawImage(pic,0,0,32,32,x,y,32,32); - //ctx.drawImage(pic,32*(i==spe),0,32,32,x,y,32,32); - - /*if (i==spe) - { - y+=16; - x=Game.cookieOriginX+Math.sin(-((r-5)/360)*Math.PI*2)*y; - y=Game.cookieOriginY+Math.cos(-((r-5)/360)*Math.PI*2)*y; - if (Game.CanClick && ctx && Math.abs(Game.mouseX-x)<16 && Math.abs(Game.mouseY-y)<16) Game.mousePointer=1; - }*/ - } - ctx.restore(); - Timer.track('cursors'); - } - } - else - { - var tBase=Math.max(0,(Game.AscendTimer-Game.AscendBreakpoint)/(Game.AscendDuration-Game.AscendBreakpoint)); - //big crumbling cookie - //var t=(3*Math.pow(tBase,2)-2*Math.pow(tBase,3));//S curve - var t=Math.pow(tBase,0.5); - - var shake=0; - if (Game.AscendTimer0) - { - ctx.save(); - ctx.globalAlpha=1-Math.pow(t,0.5); - ctx.translate(x,y); - ctx.globalCompositeOperation='lighter'; - ctx.rotate(Game.T*0.007); - s=0.5+Math.pow(tBase,0.6)*1; - var s2=(600)*s; - ctx.drawImage(Pic('heavenRing1.jpg'),-s2/2,-s2/2,s2,s2); - ctx.rotate(-Game.T*0.002); - s=0.5+Math.pow(1-tBase,0.4)*1; - s2=(600)*s; - ctx.drawImage(Pic('heavenRing2.jpg'),-s2/2,-s2/2,s2,s2); - ctx.restore(); - } - - s=256;//*Game.BigCookieSize; - - ctx.save(); - ctx.translate(x,y); - ctx.rotate((t*(-0.1))*Math.PI*2); - - var chunks={0:7,1:6,2:3,3:2,4:8,5:1,6:9,7:5,8:0,9:4}; - s*=t/2+1; - /*ctx.globalAlpha=(1-t)*0.33; - for (var i=0;i<10;i++) - { - var d=(t-0.2)*(80+((i+2)%3)*40); - ctx.drawImage(Pic('brokenCookie.png'),256*(chunks[i]),0,256,256,-s/2+Math.sin(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,-s/2+Math.cos(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,s,s); - } - ctx.globalAlpha=(1-t)*0.66; - for (var i=0;i<10;i++) - { - var d=(t-0.1)*(80+((i+2)%3)*40); - ctx.drawImage(Pic('brokenCookie.png'),256*(chunks[i]),0,256,256,-s/2+Math.sin(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,-s/2+Math.cos(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,s,s); - }*/ - ctx.globalAlpha=1-t; - for (var i=0;i<10;i++) - { - var d=(t)*(80+((i+2)%3)*40); - var x2=(Math.random()*2-1)*5*shake; - var y2=(Math.random()*2-1)*5*shake; - ctx.drawImage(Pic('brokenCookie.png'),256*(chunks[i]),0,256,256,-s/2+Math.sin(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d+x2,-s/2+Math.cos(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d+y2,s,s); - } - var brokenHalo=1-Math.min(t/(1/3),1/3)*3; - if (Game.AscendTimer0) - { - ctx.globalAlpha=1-tBase/0.1; - ctx.fillStyle='#fff'; - ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height); - ctx.globalAlpha=1; - } - if (tBase>0.8) - { - ctx.globalAlpha=(tBase-0.8)/0.2; - ctx.fillStyle='#000'; - ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height); - ctx.globalAlpha=1; - } - } - - //milk and milk accessories - if (Game.prefs.milk) - { - var width=ctx.canvas.width; - var height=ctx.canvas.height; - var x=Math.floor((Game.T*2-(Game.milkH-Game.milkHd)*2000+480*2)%480);//Math.floor((Game.T*2+Math.sin(Game.T*0.1)*2+Math.sin(Game.T*0.03)*2-(Game.milkH-Game.milkHd)*2000+480*2)%480); - var y=(Game.milkHd)*height;//(((Game.milkHd)*ctx.canvas.height)*(1+0.05*(Math.sin(Game.T*0.017)/2+0.5))); - var a=1; - if (Game.AscendTimer>0) - { - y*=1-Math.pow((Game.AscendTimer/Game.AscendBreakpoint),2)*2; - a*=1-Math.pow((Game.AscendTimer/Game.AscendBreakpoint),2)*2; - } - else if (Game.ReincarnateTimer>0) - { - y*=1-Math.pow(1-(Game.ReincarnateTimer/Game.ReincarnateDuration),2)*2; - a*=1-Math.pow(1-(Game.ReincarnateTimer/Game.ReincarnateDuration),2)*2; - } - - if (Game.TOYS) - { - //golly - if (!Game.Toy) - { - Game.toys=[]; - Game.toysType=choose([1,2]); - Game.Toy=function(x,y) - { - this.id=Game.toys.length; - this.x=x; - this.y=y; - this.xd=Math.random()*10-5; - this.yd=Math.random()*10-5; - this.r=Math.random()*Math.PI*2; - this.rd=Math.random()*0.1-0.05; - var v=Math.random();var a=0.5;var b=0.5; - if (v<=a) v=b-b*Math.pow(1-v/a,3); else v=b+(1-b)*Math.pow((v-a)/(1-a),3); - this.s=(Game.toysType==1?64:48)*(0.1+v*1.9); - if (Game.toysType==2) this.s=(this.id%10==1)?96:48; - this.st=this.s;this.s=0; - var cookies=[[10,0]]; - for (var i in Game.Upgrades) - { - var cookie=Game.Upgrades[i]; - if (cookie.bought>0 && cookie.pool=='cookie') cookies.push(cookie.icon); - } - this.icon=choose(cookies); - this.dragged=false; - this.l=document.createElement('div'); - this.l.innerHTML=this.id; - this.l.style.cssText='cursor:pointer;border-radius:'+(this.s/2)+'px;opacity:0;width:'+this.s+'px;height:'+this.s+'px;background:#999;position:absolute;left:0px;top:0px;z-index:10000000;transform:translate(-1000px,-1000px);'; - l('sectionLeft').appendChild(this.l); - AddEvent(this.l,'mousedown',function(what){return function(){what.dragged=true;};}(this)); - AddEvent(this.l,'mouseup',function(what){return function(){what.dragged=false;};}(this)); - Game.toys.push(this); - return this; - } - for (var i=0;i=height-(Game.milkHd)*height+8) - { - me.xd*=0.85; - me.yd*=0.85; - me.rd*=0.85; - me.yd-=1; - me.xd+=(Math.random()*1-0.5)*0.3; - me.yd+=(Math.random()*1-0.5)*0.05; - me.rd+=(Math.random()*1-0.5)*0.02; - } - else - { - me.xd*=0.99; - me.rd*=0.99; - me.yd+=1; - } - me.yd*=(Math.min(1,Math.abs(me.y-(height-(Game.milkHd)*height)/16))); - me.rd+=me.xd*0.01/(me.s/(Game.toysType==1?64:48)); - if (me.xwidth-me.s/2 && me.xd>0) me.xd=Math.min(-0.1,-me.xd*0.6); else if (me.x>width-me.s/2) {me.xd=0;me.x=width-me.s/2;} - me.xd=Math.min(Math.max(me.xd,-30),30); - me.yd=Math.min(Math.max(me.yd,-30),30); - me.rd=Math.min(Math.max(me.rd,-0.5),0.5); - me.x+=me.xd; - me.y+=me.yd; - me.r+=me.rd; - me.r=me.r%(Math.PI*2); - me.s+=(me.st-me.s)*0.5; - if (Game.toysType==2 && !me.dragged && Math.random()<0.003) me.st=choose([48,48,48,48,96]); - if (me.dragged) - { - me.x=Game.mouseX; - me.y=Game.mouseY; - me.xd+=((Game.mouseX-Game.mouseX2)*3-me.xd)*0.5; - me.yd+=((Game.mouseY-Game.mouseY2)*3-me.yd)*0.5 - me.l.style.transform='translate('+(me.x-me.s/2)+'px,'+(me.y-me.s/2)+'px) scale(50)'; - } - else me.l.style.transform='translate('+(me.x-me.s/2)+'px,'+(me.y-me.s/2)+'px)'; - me.l.style.width=me.s+'px'; - me.l.style.height=me.s+'px'; - ctx.save(); - ctx.translate(me.x,me.y); - ctx.rotate(me.r); - if (Game.toysType==1) ctx.drawImage(Pic('smallCookies.png'),(me.id%8)*64,0,64,64,-me.s/2,-me.s/2,me.s,me.s); - else ctx.drawImage(Pic('icons.png'),me.icon[0]*48,me.icon[1]*48,48,48,-me.s/2,-me.s/2,me.s,me.s); - ctx.restore(); - } - } - - var pic=Game.Milk.pic; - if (Game.milkType!=0 && Game.ascensionMode!=1) pic=Game.AllMilks[Game.milkType].pic; - ctx.globalAlpha=0.95*a; - ctx.fillPattern(Pic(pic),0,height-y,width+480,1,480,480,x,0); - - ctx.fillStyle='#000'; - ctx.fillRect(0,height-y+480,width,Math.max(0,(y-480))); - ctx.globalAlpha=1; - - Timer.track('milk'); - } - - if (Game.AscendTimer>0) - { - ctx.drawImage(Pic('shadedBordersSoft.png'),0,0,ctx.canvas.width,ctx.canvas.height); - } - - if (Game.AscendTimer==0) - { - Game.DrawWrinklers();Timer.track('wrinklers'); - Game.DrawSpecial();Timer.track('evolvables'); - - Game.particlesDraw(2);Timer.track('text particles'); - - //shiny border during frenzies etc - ctx.globalAlpha=1; - var borders='shadedBordersSoft.png'; - if (goodBuff) borders='shadedBordersGold.png'; - else if (badBuff) borders='shadedBordersRed.png'; - if (goodBuff && Game.prefs.fancy) ctx.globalCompositeOperation='lighter'; - ctx.drawImage(Pic(borders),0,0,ctx.canvas.width,ctx.canvas.height); - if (goodBuff && Game.prefs.fancy) ctx.globalCompositeOperation='source-over'; - } - } - }; - - - /*===================================================================================== - INITIALIZATION END; GAME READY TO LAUNCH - =======================================================================================*/ - - Game.killShimmers(); - - //booooo - Game.RuinTheFun=function(silent) - { - Game.popups=0; - Game.SetAllUpgrades(1); - Game.SetAllAchievs(1); - Game.popups=0; - Game.Earn(999999999999999999999999999999); - Game.MaxSpecials(); - Game.nextResearch=0; - Game.researchT=-1; - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - Game.popups=1; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (me.level<10) - { - me.level=9; - me.levelUp(true); - } - if (me.minigame && me.minigame.onRuinTheFun) me.minigame.onRuinTheFun(); - } - if (!silent) - { - Game.Notify('Thou doth ruineth the fun!','You\'re free. Free at last.',[11,5]); - } - return 'You feel a bitter taste in your mouth...'; - } - - Game.SetAllUpgrades=function(on) - { - Game.popups=0; - var leftout=['Magic shenanigans','Occult obstruction','Glucose-charged air']; - for (var i in Game.Upgrades) - { - if (on && (Game.Upgrades[i].pool=='toggle' || leftout.indexOf(Game.Upgrades[i].name)!=-1)) {} - else if (on) Game.Upgrades[i].earn(); - else if (!on) Game.Upgrades[i].lose(); - } - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - Game.popups=1; - } - Game.SetAllAchievs=function(on) - { - Game.popups=0; - for (var i in Game.Achievements) - { - if (on && Game.Achievements[i].pool!='dungeon') Game.Win(Game.Achievements[i].name); - else if (!on) Game.RemoveAchiev(Game.Achievements[i].name); - } - Game.recalculateGains=1; - Game.popups=1; - } - Game.GetAllDebugs=function() - { - Game.popups=0; - for (var i in Game.Upgrades) - { - if (Game.Upgrades[i].pool=='debug') Game.Upgrades[i].earn(); - } - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - Game.popups=1; - } - Game.MaxSpecials=function() - { - Game.dragonLevel=Game.dragonLevels.length-1; - Game.santaLevel=Game.santaLevels.length-1; - } - - Game.SesameReset=function() - { - var name=Game.bakeryName; - Game.HardReset(2); - Game.bakeryName=name; - Game.bakeryNameRefresh(); - Game.Achievements['Cheated cookies taste awful'].won=1; - } - - Game.debugTimersOn=0; - Game.sesame=0; - Game.OpenSesame=function() - { - var str=''; - str+='
'; - str+='
'; - - str+='
'; - str+='
Dev tools
'; - - str+='Ascend'; - str+='
'; - str+='x10'; - str+='/10
'; - str+='x1k'; - str+='/1k
'; - str+='Buy 100 of all';//for (var n=0;n<100;n++){for (var i in Game.Objects){Game.Objects[i].buy(1);}} - str+='Sell 100 of all
'; - str+='+10 lumps'; - str+='Reset levels'; - str+='HC x1k'; - str+='HC /1k
';//wee bit inaccurate - str+='Reset cookies earned
'; - str+='
'; - str+='Ruin The Fun'; - str+='Wipe'; - str+='All debugs'; - str+='Timers '+(Game.debugTimersOn?'On':'Off')+'
'; - str+='No upgrades'; - str+='All upgrades
'; - str+='No achievs'; - str+='All achievs
'; - str+='Reset specials'; - str+='Max specials
'; - str+='Reset refills'; - str+=''+(Game.DebuggingPrestige?'Exit Ascend Edit':'Ascend Edit')+''; - str+='Debug upgrades CpS'; - str+='Re-seed'; - str+='Max heralds'; - str+='
'; - for (var i=0;i'+Game.goldenCookieChoices[i*2]+''; - //str+=''+Game.goldenCookie.choices[i*2]+''; - //str+=''+Game.goldenCookie.choices[i*2]+''; - } - str+='
'; - - l('devConsole').innerHTML=str; - - if (!l('fpsGraph')) - { - var div=document.createElement('canvas'); - div.id='fpsGraph'; - div.width=128; - div.height=64; - div.style.opacity=0.5; - div.style.pointerEvents='none'; - div.style.transformOrigin='0% 0%'; - div.style.transform='scale(0.75)'; - //l('devConsole').appendChild(div); - l('devConsole').parentNode.insertBefore(div,l('devConsole').nextSibling); - Game.fpsGraph=div; - Game.fpsGraphCtx=Game.fpsGraph.getContext('2d',{alpha:false}); - var ctx=Game.fpsGraphCtx; - ctx.fillStyle='#000'; - ctx.fillRect(0,0,128,64); - } - - l('debug').style.display='block'; - Game.sesame=1; - Game.Achievements['Cheated cookies taste awful'].won=1; - } - - Game.EditAscend=function() - { - if (!Game.DebuggingPrestige) - { - Game.DebuggingPrestige=true; - Game.AscendTimer=0; - Game.OnAscend=1; - Game.removeClass('ascendIntro'); - Game.addClass('ascending'); - - } - else - { - Game.DebuggingPrestige=false; - } - Game.BuildAscendTree(); - Game.OpenSesame(); - } - - //experimental debugging function that cycles through every owned upgrade, turns it off and on, and lists how much each upgrade is participating to CpS - Game.debuggedUpgradeCpS=[]; - Game.debuggedUpgradeCpClick=[]; - Game.debugColors=['#322','#411','#600','#900','#f30','#f90','#ff0','#9f0','#0f9','#09f','#90f']; - Game.DebugUpgradeCpS=function() - { - Game.CalculateGains(); - Game.debuggedUpgradeCpS=[]; - Game.debuggedUpgradeCpClick=[]; - var CpS=Game.cookiesPs; - var CpClick=Game.computedMouseCps; - for (var i in Game.Upgrades) - { - var me=Game.Upgrades[i]; - if (me.bought) - { - me.bought=0; - Game.CalculateGains(); - //Game.debuggedUpgradeCpS[me.name]=CpS-Game.cookiesPs; - Game.debuggedUpgradeCpS[me.name]=(CpS/(Game.cookiesPs||1)-1); - Game.debuggedUpgradeCpClick[me.name]=(CpClick/(Game.computedMouseCps||1)-1); - me.bought=1; - } - } - Game.CalculateGains(); - } - - Game.vanilla=0;//everything we create beyond this will be saved in mod structures - - Game.launchMods(); - - Game.runModHook('create');//declare custom upgrades/achievs/buffs/buildings here! - - BeautifyAll(); - - if (!App) - { - if (!Game.LoadSave()) - {//try to load the save when we open the page. if this fails, try to brute-force it half a second later - setTimeout(function(){ - var local=localStorageGet(Game.SaveTo); - Game.LoadSave(local); - },500); - } - } - else if (App.saveData) setTimeout(function(){Game.LoadSave(App.saveData);},100); - else setTimeout(function(){Game.LoadSave();},100); - - Game.ready=1; - setTimeout(function(){if (typeof showAds==='undefined' && (!l('detectAds') || l('detectAds').clientHeight<1)) Game.addClass('noAds');},500); - l('offGameMessage').innerHTML=''; - l('offGameMessageWrap').style.display='none'; - Game.Loop(); - Game.Draw(); - - PlayCue('launch'); - - if (!EN) - { - var adaptWidth=function(node) - { - var el=node.firstChild; - var width=el.clientWidth; - if (el.classList.contains('subButton')) - { - if (width/95>1) el.style.padding='6px 0px'; - } - width=width/95; - if (width>1) - { - el.style.fontSize=(parseInt(window.getComputedStyle(el).fontSize)*1/width)+'px'; - el.style.transform='scale(1,'+(width)+')'; - } - } - l('prefsButton').firstChild.innerHTML=loc("Options"); - l('statsButton').firstChild.innerHTML=loc("Stats"); - l('logButton').firstChild.innerHTML=loc("Info"); - l('legacyButton').firstChild.innerHTML=loc("Legacy"); - adaptWidth(l('prefsButton')); - adaptWidth(l('statsButton')); - adaptWidth(l('logButton')); - adaptWidth(l('legacyButton')); - l('checkForUpdate').childNodes[0].textContent=loc("New update!"); - l('buildingsTitle').childNodes[0].textContent=loc("Buildings"); - l('storeTitle').childNodes[0].textContent=loc("Store"); - } - } - /*===================================================================================== - LOGIC - =======================================================================================*/ - Game.Logic=function() - { - Game.bounds=Game.l.getBounds(); - - if (!Game.OnAscend && Game.AscendTimer==0) - { - for (var i in Game.Objects) - { - if (Game.Objects[i].eachFrame) Game.Objects[i].eachFrame(); - } - Game.UpdateSpecial(); - Game.UpdateGrandmapocalypse(); - - //these are kinda fun - //if (Game.BigCookieState==2 && !Game.promptOn && Game.Scroll!=0) Game.ClickCookie(); - //if (Game.BigCookieState==1 && !Game.promptOn) Game.ClickCookie(); - - //handle graphic stuff - if (Game.prefs.wobbly) - { - if (Game.BigCookieState==1) Game.BigCookieSizeT=0.98; - else if (Game.BigCookieState==2) Game.BigCookieSizeT=1.05; - else Game.BigCookieSizeT=1; - Game.BigCookieSizeD+=(Game.BigCookieSizeT-Game.BigCookieSize)*0.75; - Game.BigCookieSizeD*=0.75; - Game.BigCookieSize+=Game.BigCookieSizeD; - Game.BigCookieSize=Math.max(0.1,Game.BigCookieSize); - } - else - { - if (Game.BigCookieState==1) Game.BigCookieSize+=(0.98-Game.BigCookieSize)*0.5; - else if (Game.BigCookieState==2) Game.BigCookieSize+=(1.05-Game.BigCookieSize)*0.5; - else Game.BigCookieSize+=(1-Game.BigCookieSize)*0.5; - } - Game.particlesUpdate(); - - if (Game.mousePointer) l('sectionLeft').style.cursor='pointer'; - else l('sectionLeft').style.cursor='auto'; - Game.mousePointer=0; - - //handle milk and milk accessories - Game.milkProgress=Game.AchievementsOwned/25; - if (Game.milkProgress>=0.5) Game.Unlock('Kitten helpers'); - if (Game.milkProgress>=1) Game.Unlock('Kitten workers'); - if (Game.milkProgress>=2) Game.Unlock('Kitten engineers'); - if (Game.milkProgress>=3) Game.Unlock('Kitten overseers'); - if (Game.milkProgress>=4) Game.Unlock('Kitten managers'); - if (Game.milkProgress>=5) Game.Unlock('Kitten accountants'); - if (Game.milkProgress>=6) Game.Unlock('Kitten specialists'); - if (Game.milkProgress>=7) Game.Unlock('Kitten experts'); - if (Game.milkProgress>=8) Game.Unlock('Kitten consultants'); - if (Game.milkProgress>=9) Game.Unlock('Kitten assistants to the regional manager'); - if (Game.milkProgress>=10) Game.Unlock('Kitten marketeers'); - if (Game.milkProgress>=11) Game.Unlock('Kitten analysts'); - if (Game.milkProgress>=12) Game.Unlock('Kitten executives'); - if (Game.milkProgress>=13) Game.Unlock('Kitten admins'); - Game.milkH=Math.min(1,Game.milkProgress)*0.35; - Game.milkHd+=(Game.milkH-Game.milkHd)*0.02; - - Game.Milk=Game.Milks[Math.min(Math.floor(Game.milkProgress),Game.Milks.length-1)]; - - if (Game.autoclickerDetected>0) Game.autoclickerDetected--; - - //handle research - if (Game.researchT>0) - { - Game.researchT--; - } - if (Game.researchT==0 && Game.nextResearch) - { - if (!Game.Has(Game.UpgradesById[Game.nextResearch].name)) - { - Game.Unlock(Game.UpgradesById[Game.nextResearch].name); - Game.Notify(loc("Research complete"),loc("You have discovered: %1.",Game.UpgradesById[Game.nextResearch].dname),Game.UpgradesById[Game.nextResearch].icon); - } - Game.nextResearch=0; - Game.researchT=-1; - Game.recalculateGains=1; - } - //handle seasons - if (Game.seasonT>0) - { - Game.seasonT--; - } - if (Game.seasonT<=0 && Game.season!='' && Game.season!=Game.baseSeason && !Game.Has('Eternal seasons')) - { - Game.Notify(Game.seasons[Game.season].over,'',Game.seasons[Game.season].triggerUpgrade.icon); - if (Game.Has('Season switcher')) {Game.Unlock(Game.seasons[Game.season].trigger);Game.seasons[Game.season].triggerUpgrade.bought=0;} - Game.season=Game.baseSeason; - Game.seasonT=-1; - } - - //press ctrl to bulk-buy 10, shift to bulk-buy 100 - if (!Game.promptOn) - { - if ((Game.keys[16] || Game.keys[17]) && !Game.buyBulkShortcut) - { - Game.buyBulkOld=Game.buyBulk; - if (Game.keys[16]) Game.buyBulk=100; - if (Game.keys[17]) Game.buyBulk=10; - Game.buyBulkShortcut=1; - Game.storeBulkButton(-1); - } - } - if ((!Game.keys[16] && !Game.keys[17]) && Game.buyBulkShortcut)//release - { - Game.buyBulk=Game.buyBulkOld; - Game.buyBulkShortcut=0; - Game.storeBulkButton(-1); - } - - //handle cookies - if (Game.recalculateGains) Game.CalculateGains(); - Game.Earn(Game.cookiesPs/Game.fps);//add cookies per second - - //grow lumps - Game.doLumps(); - - //minigames - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (Game.isMinigameReady(me) && me.minigame.logic && Game.ascensionMode!=1) me.minigame.logic(); - } - - if (Game.specialTab!='' && Game.T%(Game.fps*3)==0) Game.ToggleSpecialMenu(1); - - //wrinklers - if (Game.cpsSucked>0) - { - Game.Dissolve((Game.cookiesPs/Game.fps)*Game.cpsSucked); - Game.cookiesSucked+=((Game.cookiesPs/Game.fps)*Game.cpsSucked); - //should be using one of the following, but I'm not sure what I'm using this stat for anymore - //Game.cookiesSucked=Game.wrinklers.reduce(function(s,w){return s+w.sucked;},0); - //for (var i in Game.wrinklers) {Game.cookiesSucked+=Game.wrinklers[i].sucked;} - } - - //var cps=Game.cookiesPs+Game.cookies*0.01;//exponential cookies - //Game.Earn(cps/Game.fps);//add cookies per second - - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - me.totalCookies+=(me.storedTotalCps*Game.globalCpsMult)/Game.fps; - } - if (Game.prefs.particles && Game.cookies && Game.T%Math.ceil(Game.fps/Math.min(10,Game.cookiesPs))==0) Game.particleAdd();//cookie shower - - if (Game.T%(Game.fps*10)==0) Game.recalculateGains=1;//recalculate CpS every 10 seconds (for dynamic boosts such as Century egg) - - /*===================================================================================== - UNLOCKING STUFF - =======================================================================================*/ - if (Game.T%(Game.fps)==0 && Math.random()<1/1000000) Game.Win('Just plain lucky');//1 chance in 1,000,000 every second achievement - if (Game.T%(Game.fps*5)==0 && Game.ObjectsById.length>0)//check some achievements and upgrades - { - if (isNaN(Game.cookies)) {Game.cookies=0;Game.cookiesEarned=0;Game.recalculateGains=1;} - - var timePlayed=new Date(); - timePlayed.setTime(Date.now()-Game.startDate); - - if (!Game.fullDate || (Date.now()-Game.fullDate)>=365*24*60*60*1000) Game.Win('So much to do so much to see'); - - if (Game.cookiesEarned>=1000000 && (Game.ascensionMode==1 || Game.resets==0))//challenge run or hasn't ascended yet - { - if (timePlayed<=1000*60*35) Game.Win('Speed baking I'); - if (timePlayed<=1000*60*25) Game.Win('Speed baking II'); - if (timePlayed<=1000*60*15) Game.Win('Speed baking III'); - - if (Game.cookieClicks<=15) Game.Win('Neverclick'); - if (Game.cookieClicks<=0) Game.Win('True Neverclick'); - if (Game.cookiesEarned>=1000000000 && Game.UpgradesOwned==0) Game.Win('Hardcore'); - } - - for (var i in Game.UnlockAt) - { - var unlock=Game.UnlockAt[i]; - if (Game.cookiesEarned>=unlock.cookies) - { - var pass=1; - if (unlock.require && !Game.Has(unlock.require) && !Game.HasAchiev(unlock.require)) pass=0; - if (unlock.season && Game.season!=unlock.season) pass=0; - if (pass) {Game.Unlock(unlock.name);Game.Win(unlock.name);} - } - } - - if (Game.Has('Golden switch')) Game.Unlock('Golden switch [off]'); - if (Game.Has('Shimmering veil') && !Game.Has('Shimmering veil [off]') && !Game.Has('Shimmering veil [on]')) {Game.Unlock('Shimmering veil [on]');Game.Upgrades['Shimmering veil [off]'].earn();} - if (Game.Has('Sugar craving')) Game.Unlock('Sugar frenzy'); - if (Game.Has('Classic dairy selection')) Game.Unlock('Milk selector'); - if (Game.Has('Basic wallpaper assortment')) Game.Unlock('Background selector'); - if (Game.Has('Golden cookie alert sound')) Game.Unlock('Golden cookie sound selector'); - if (Game.Has('Sound test')) Game.Unlock('Jukebox'); - - if (Game.Has('Prism heart biscuits')) Game.Win('Lovely cookies'); - if (Game.season=='easter') - { - var eggs=0; - for (var i in Game.easterEggs) - { - if (Game.HasUnlocked(Game.easterEggs[i])) eggs++; - } - if (eggs>=1) Game.Win('The hunt is on'); - if (eggs>=7) Game.Win('Egging on'); - if (eggs>=14) Game.Win('Mass Easteria'); - if (eggs>=Game.easterEggs.length) Game.Win('Hide & seek champion'); - } - - if (Game.Has('Fortune cookies')) - { - var list=Game.Tiers['fortune'].upgrades; - var fortunes=0; - for (var i in list) - { - if (Game.Has(list[i].name)) fortunes++; - } - if (fortunes>=list.length) Game.Win('O Fortuna'); - } - - if (Game.Has('Legacy') && Game.ascensionMode!=1) - { - Game.Unlock('Heavenly chip secret'); - if (Game.Has('Heavenly chip secret')) Game.Unlock('Heavenly cookie stand'); - if (Game.Has('Heavenly cookie stand')) Game.Unlock('Heavenly bakery'); - if (Game.Has('Heavenly bakery')) Game.Unlock('Heavenly confectionery'); - if (Game.Has('Heavenly confectionery')) Game.Unlock('Heavenly key'); - - if (Game.Has('Heavenly key')) Game.Win('Wholesome'); - } - - for (var i in Game.BankAchievements) - { - if (Game.cookiesEarned>=Game.BankAchievements[i].threshold) Game.Win(Game.BankAchievements[i].name); - } - - var buildingsOwned=0; - var mathematician=1; - var base10=1; - var minAmount=100000; - for (var i in Game.Objects) - { - buildingsOwned+=Game.Objects[i].amount; - minAmount=Math.min(Game.Objects[i].amount,minAmount); - if (!Game.HasAchiev('Mathematician')) {if (Game.Objects[i].amount=1) Game.Win('One with everything'); - if (mathematician==1) Game.Win('Mathematician'); - if (base10==1) Game.Win('Base 10'); - if (minAmount>=100) {Game.Win('Centennial');Game.Unlock('Milk chocolate butter biscuit');} - if (minAmount>=150) {Game.Win('Centennial and a half');Game.Unlock('Dark chocolate butter biscuit');} - if (minAmount>=200) {Game.Win('Bicentennial');Game.Unlock('White chocolate butter biscuit');} - if (minAmount>=250) {Game.Win('Bicentennial and a half');Game.Unlock('Ruby chocolate butter biscuit');} - if (minAmount>=300) {Game.Win('Tricentennial');Game.Unlock('Lavender chocolate butter biscuit');} - if (minAmount>=350) {Game.Win('Tricentennial and a half');Game.Unlock('Synthetic chocolate green honey butter biscuit');} - if (minAmount>=400) {Game.Win('Quadricentennial');Game.Unlock('Royal raspberry chocolate butter biscuit');} - if (minAmount>=450) {Game.Win('Quadricentennial and a half');Game.Unlock('Ultra-concentrated high-energy chocolate butter biscuit');} - if (minAmount>=500) {Game.Win('Quincentennial');Game.Unlock('Pure pitch-black chocolate butter biscuit');} - if (minAmount>=550) {Game.Win('Quincentennial and a half');Game.Unlock('Cosmic chocolate butter biscuit');} - if (minAmount>=600) {Game.Win('Sexcentennial');Game.Unlock('Butter biscuit (with butter)');} - if (minAmount>=650) {Game.Win('Sexcentennial and a half');Game.Unlock('Everybutter biscuit');} - - if (Game.handmadeCookies>=1000) {Game.Win('Clicktastic');Game.Unlock('Plastic mouse');} - if (Game.handmadeCookies>=100000) {Game.Win('Clickathlon');Game.Unlock('Iron mouse');} - if (Game.handmadeCookies>=10000000) {Game.Win('Clickolympics');Game.Unlock('Titanium mouse');} - if (Game.handmadeCookies>=1000000000) {Game.Win('Clickorama');Game.Unlock('Adamantium mouse');} - if (Game.handmadeCookies>=100000000000) {Game.Win('Clickasmic');Game.Unlock('Unobtainium mouse');} - if (Game.handmadeCookies>=10000000000000) {Game.Win('Clickageddon');Game.Unlock('Eludium mouse');} - if (Game.handmadeCookies>=1000000000000000) {Game.Win('Clicknarok');Game.Unlock('Wishalloy mouse');} - if (Game.handmadeCookies>=100000000000000000) {Game.Win('Clickastrophe');Game.Unlock('Fantasteel mouse');} - if (Game.handmadeCookies>=10000000000000000000) {Game.Win('Clickataclysm');Game.Unlock('Nevercrack mouse');} - if (Game.handmadeCookies>=1000000000000000000000) {Game.Win('The ultimate clickdown');Game.Unlock('Armythril mouse');} - if (Game.handmadeCookies>=100000000000000000000000) {Game.Win('All the other kids with the pumped up clicks');Game.Unlock('Technobsidian mouse');} - if (Game.handmadeCookies>=10000000000000000000000000) {Game.Win('One...more...click...');Game.Unlock('Plasmarble mouse');} - if (Game.handmadeCookies>=1000000000000000000000000000) {Game.Win('Clickety split');Game.Unlock('Miraculite mouse');} - if (Game.handmadeCookies>=100000000000000000000000000000) {Game.Win('Ain\'t that a click in the head');Game.Unlock('Aetherice mouse');} - - if (Game.cookiesEarned=1) Game.Win('Itchscratcher'); - if (Game.wrinklersPopped>=50) Game.Win('Wrinklesquisher'); - if (Game.wrinklersPopped>=200) Game.Win('Moistburster'); - - if (Game.cookiesEarned>=1000000 && Game.Has('How to bake your dragon')) Game.Unlock('A crumbly egg'); - - if (Game.cookiesEarned>=25 && Game.season=='christmas') Game.Unlock('A festive hat'); - if (Game.Has('Christmas tree biscuits') && Game.Has('Snowflake biscuits') && Game.Has('Snowman biscuits') && Game.Has('Holly biscuits') && Game.Has('Candy cane biscuits') && Game.Has('Bell biscuits') && Game.Has('Present biscuits')) Game.Win('Let it snow'); - - if (Game.reindeerClicked>=1) Game.Win('Oh deer'); - if (Game.reindeerClicked>=50) Game.Win('Sleigh of hand'); - if (Game.reindeerClicked>=200) Game.Win('Reindeer sleigher'); - - if (buildingsOwned>=100) Game.Win('Builder'); - if (buildingsOwned>=500) Game.Win('Architect'); - if (buildingsOwned>=1000) Game.Win('Engineer'); - if (buildingsOwned>=2500) Game.Win('Lord of Constructs'); - if (buildingsOwned>=5000) Game.Win('Grand design'); - if (buildingsOwned>=7500) Game.Win('Ecumenopolis'); - if (buildingsOwned>=10000) Game.Win('Myriad'); - if (Game.UpgradesOwned>=20) Game.Win('Enhancer'); - if (Game.UpgradesOwned>=50) Game.Win('Augmenter'); - if (Game.UpgradesOwned>=100) Game.Win('Upgrader'); - if (Game.UpgradesOwned>=200) Game.Win('Lord of Progress'); - if (Game.UpgradesOwned>=300) Game.Win('The full picture'); - if (Game.UpgradesOwned>=400) Game.Win('When there\'s nothing left to add'); - if (Game.UpgradesOwned>=500) Game.Win('Kaizen'); - if (Game.UpgradesOwned>=600) Game.Win('Beyond quality'); - if (buildingsOwned>=4000 && Game.UpgradesOwned>=300) Game.Win('Polymath'); - if (buildingsOwned>=8000 && Game.UpgradesOwned>=400) Game.Win('Renaissance baker'); - - if (!Game.HasAchiev('Jellicles')) - { - var kittens=0; - for (var i=0;i=10) Game.Win('Jellicles'); - } - - if (Game.cookiesEarned>=1e14 && !Game.HasAchiev('You win a cookie')) {Game.Win('You win a cookie');Game.Earn(1);} - - if (Game.shimmerTypes['golden'].n>=4) Game.Win('Four-leaf cookie'); - - var grandmas=0; - for (var i in Game.GrandmaSynergies) - { - if (Game.Has(Game.GrandmaSynergies[i])) grandmas++; - } - if (!Game.HasAchiev('Elder') && grandmas>=7) Game.Win('Elder'); - if (!Game.HasAchiev('Veteran') && grandmas>=14) Game.Win('Veteran'); - if (Game.Objects['Grandma'].amount>=6 && !Game.Has('Bingo center/Research facility') && Game.HasAchiev('Elder')) Game.Unlock('Bingo center/Research facility'); - if (Game.pledges>0) Game.Win('Elder nap'); - if (Game.pledges>=5) Game.Win('Elder slumber'); - if (Game.pledges>=10) Game.Unlock('Sacrificial rolling pins'); - if (Game.Objects['Cursor'].amount+Game.Objects['Grandma'].amount>=777) Game.Win('The elder scrolls'); - - for (var i in Game.Objects) - { - var it=Game.Objects[i]; - for (var ii in it.productionAchievs) - { - if (it.totalCookies>=it.productionAchievs[ii].pow) Game.Win(it.productionAchievs[ii].achiev.name); - } - } - - if (!Game.HasAchiev('Cookie-dunker') && Game.LeftBackground && Game.milkProgress>0.1 && (Game.LeftBackground.canvas.height*0.4+256/2-16)>((1-Game.milkHd)*Game.LeftBackground.canvas.height)) Game.Win('Cookie-dunker'); - //&& l('bigCookie').getBounds().bottom>l('milk').getBounds().top+16 && Game.milkProgress>0.1) Game.Win('Cookie-dunker'); - - Game.runModHook('check'); - } - - Game.cookiesd+=(Game.cookies-Game.cookiesd)*0.3; - - if (Game.storeToRefresh) Game.RefreshStore(); - if (Game.upgradesToRebuild) Game.RebuildUpgrades(); - - Game.updateShimmers(); - Game.updateBuffs(); - - Game.UpdateTicker(); - } - - if (Game.T%(Game.fps*2)==0) - { - var title='Cookie Clicker'; - if (Game.season=='fools') title='Cookie Baker'; - document.title=(Game.OnAscend?(EN?'Ascending! ':(loc("Ascending")+' | ')):'')+loc("%1 cookie",LBeautify(Game.cookies))+' - '+title; - } - if (Game.T%15==0) - { - //written through the magic of "hope for the best" maths - var chipsOwned=Game.HowMuchPrestige(Game.cookiesReset); - var ascendNowToOwn=Math.floor(Game.HowMuchPrestige(Game.cookiesReset+Game.cookiesEarned)); - var ascendNowToGet=ascendNowToOwn-Math.floor(chipsOwned); - var nextChipAt=Game.HowManyCookiesReset(Math.floor(chipsOwned+ascendNowToGet+1))-Game.HowManyCookiesReset(Math.floor(chipsOwned+ascendNowToGet)); - var cookiesToNext=Game.HowManyCookiesReset(ascendNowToOwn+1)-(Game.cookiesEarned+Game.cookiesReset); - var percent=1-(cookiesToNext/nextChipAt); - - //fill the tooltip under the Legacy tab - var date=new Date(); - date.setTime(Date.now()-Game.startDate); - var timeInSeconds=date.getTime()/1000; - var startDate=Game.sayTime(timeInSeconds*Game.fps,-1); - - var str=''; - if (EN) str+='You\'ve been on this run for '+(startDate==''?'not very long':(startDate))+'.
'; - else str+=loc("You've been on this run for %1.",startDate)+'
'; - str+='
'; - if (Game.prestige>0) - { - str+=loc("Your prestige level is currently %1.
(CpS +%2%)",[Beautify(Game.prestige),Beautify(Game.prestige)]); - str+='
'; - } - if (ascendNowToGet<1) str+=loc("Ascending now would grant you no prestige."); - else if (ascendNowToGet<2) str+=loc("Ascending now would grant you
1 prestige level (+1% CpS)
and 1 heavenly chip to spend."); - else str+=loc("Ascending now would grant you
%1 prestige levels (+%2% CpS)
and %3 heavenly chips to spend.",[Beautify(ascendNowToGet),Beautify(ascendNowToGet),Beautify(ascendNowToGet)]); - if (cookiesToNext>=0) - { - //note: cookiesToNext can be negative at higher HC amounts due to precision loss. we simply hide it in such cases, as this usually only occurs when the gap is small and rapidly overcome anyway - str+='
'; - str+=loc("You need %1 more cookies for the next level.",Beautify(cookiesToNext))+'
'; - } - l('ascendTooltip').innerHTML=str; - - if (ascendNowToGet>0)//show number saying how many chips you'd get resetting now - { - Game.ascendNumber.textContent='+'+SimpleBeautify(ascendNowToGet); - Game.ascendNumber.style.display='block'; - } - else - { - Game.ascendNumber.style.display='none'; - } - - if (ascendNowToGet>Game.ascendMeterLevel || Game.ascendMeterPercentT=1) {Game.ascendMeter.className='';} else Game.ascendMeter.className='filling'; - } - //Game.ascendMeter.style.right=Math.floor(Math.max(0,1-Game.ascendMeterPercent)*100)+'px'; - Game.ascendMeter.style.backgroundPosition=(-Game.T*0.5-Game.ascendMeterPercent*100)+'px'; - Game.ascendMeter.style.transform='translate('+Math.floor(-Math.max(0,1-Game.ascendMeterPercent)*100)+'%,0px)'; - Game.ascendMeterPercent+=(Game.ascendMeterPercentT-Game.ascendMeterPercent)*0.1; - - Game.NotesLogic(); - if (Game.mouseMoved || Game.Scroll || Game.tooltip.dynamic) Game.tooltip.update(); - - if (Game.T%(Game.fps*5)==0 && !Game.mouseDown && (Game.onMenu=='stats' || Game.onMenu=='prefs')) Game.UpdateMenu(); - if (Game.T%(Game.fps*1)==0) Game.UpdatePrompt(); - if (Game.AscendTimer>0) Game.UpdateAscendIntro(); - if (Game.ReincarnateTimer>0) Game.UpdateReincarnateIntro(); - if (Game.OnAscend) Game.UpdateAscend(); - - Game.runModHook('logic'); - - if (Game.sparklesT>0) - { - Game.sparkles.style.backgroundPosition=-Math.floor((Game.sparklesFrames-Game.sparklesT+1)*128)+'px 0px'; - Game.sparklesT--; - if (Game.sparklesT==1) Game.sparkles.style.display='none'; - } - - Game.Click=0; - Game.Scroll=0; - Game.mouseMoved=0; - Game.CanClick=1; - - if ((Game.toSave || (Game.T%(Game.fps*60)==0 && Game.T>Game.fps*10 && Game.prefs.autosave)) && !Game.OnAscend) - { - //check if we can save : no minigames are loading - var canSave=true; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (me.minigameLoading){canSave=false;break;} - } - if (canSave) Game.WriteSave(); - } - if (!Game.toSave && !Game.isSaving) - { - if (Game.toReload) {Game.toReload=false;if (!App){location.reload();}else{App.reload();}} - if (Game.toQuit) {Game.toQuit=false;if (!App){window.close();}else{App.quit();}} - } - - if (App && App.logic) App.logic(Game.T); - - //every hour: get server data (ie. update notification, patreon, steam etc) - if (Game.T%(Game.fps*60*60)==0 && Game.T>Game.fps*10/* && Game.prefs.autoupdate*/) {Game.CheckUpdates();Game.GrabData();} - - Game.T++; - } - - /*===================================================================================== - DRAW - =======================================================================================*/ - - Game.Draw=function() - { - Game.DrawBackground();Timer.track('end of background'); - - if (!Game.OnAscend) - { - - var str=Beautify(Math.round(Game.cookiesd)); - if (Game.cookiesd>=1000000)//dirty padding - { - var spacePos=str.indexOf(' '); - var dotPos=str.indexOf('.'); - var add=''; - if (spacePos!=-1) - { - if (dotPos==-1) add+='.000'; - else - { - if (spacePos-dotPos==2) add+='00'; - if (spacePos-dotPos==3) add+='0'; - } - } - str=[str.slice(0,spacePos),add,str.slice(spacePos)].join(''); - } - - str=loc("%1 cookie",{n:Math.round(Game.cookiesd),b:str}); - if (str.length>14) str=str.replace(' ','
'); - - if (Game.prefs.monospace) str=''+str+''; - str=str+'
0?' class="wrinkled"':'')+'>'+loc("per second:")+' '+Beautify(Game.cookiesPs*(1-Game.cpsSucked),1)+'
'; - l('cookies').innerHTML=str; - Timer.track('cookie amount'); - - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - if (me.onMinigame && me.minigame.draw && !me.muted && !Game.onMenu) me.minigame.draw(); - } - Timer.track('draw minigames'); - - if (Game.drawT%5==0) - { - //if (Game.prefs.monospace) {l('cookies').className='title monospace';} else {l('cookies').className='title';} - var lastLocked=0; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - - //make products full-opacity if we can buy them - var classes='product'; - var price=me.bulkPrice; - if (Game.cookiesEarned>=me.basePrice || me.bought>0) {classes+=' unlocked';lastLocked=0;me.locked=0;} else {classes+=' locked';lastLocked++;me.locked=1;} - if ((Game.buyMode==1 && Game.cookies>=price) || (Game.buyMode==-1 && me.amount>0)) classes+=' enabled'; else classes+=' disabled'; - if (lastLocked>2) classes+=' toggledOff'; - me.l.className=classes; - //if (me.id>0) {l('productName'+me.id).innerHTML=Beautify(me.storedTotalCps/Game.ObjectsById[me.id-1].storedTotalCps,2);} - } - - //make upgrades full-opacity if we can buy them - var lastPrice=0; - for (var i in Game.UpgradesInStore) - { - var me=Game.UpgradesInStore[i]; - if (!me.bought) - { - var price=me.getPrice(); - var canBuy=me.canBuy();//(Game.cookies>=price); - var enabled=(l('upgrade'+i).className.indexOf('enabled')>-1); - if ((canBuy && !enabled) || (!canBuy && enabled)) Game.upgradesToRebuild=1; - if (price'; - T=(T*144)%144; - l('upgradePieTimer'+i).style.backgroundPosition=(-Math.floor(T%18))*48+'px '+(-Math.floor(T/18))*48+'px'; - } - } - - //if (me.canBuy()) l('upgrade'+i).className='crate upgrade enabled'; else l('upgrade'+i).className='crate upgrade disabled'; - } - } - Timer.track('store'); - - if (Game.PARTY)//i was bored and felt like messing with CSS - { - var pulse=Math.pow((Game.T%10)/10,0.5); - Game.l.style.filter='hue-rotate('+((Game.T*5)%360)+'deg) brightness('+(150-50*pulse)+'%)'; - Game.l.style.webkitFilter='hue-rotate('+((Game.T*5)%360)+'deg) brightness('+(150-50*pulse)+'%)'; - Game.l.style.transform='scale('+(1.02-0.02*pulse)+','+(1.02-0.02*pulse)+') rotate('+(Math.sin(Game.T*0.5)*0.5)+'deg)'; - Game.wrapper.style.overflowX='hidden'; - Game.wrapper.style.overflowY='hidden'; - } - - Timer.clean(); - if (Game.prefs.animate && ((Game.prefs.fancy && Game.drawT%1==0) || (!Game.prefs.fancy && Game.drawT%10==0)) && Game.AscendTimer==0 && Game.onMenu=='') Game.DrawBuildings();Timer.track('buildings'); - - Game.textParticlesUpdate();Timer.track('text particles'); - } - - Game.NotesDraw();Timer.track('notes'); - - Game.runModHook('draw'); - - Game.drawT++; - //if (Game.prefs.altDraw) requestAnimationFrame(Game.Draw); - } - - /*===================================================================================== - MAIN LOOP - =======================================================================================*/ - Game.Loop=function() - { - if (Game.timedout) return false; - Timer.say('START'); - Timer.track('browser stuff'); - Timer.say('LOGIC'); - //update game logic ! - Game.catchupLogic=0; - Game.Logic(); - Game.catchupLogic=1; - - var time=Date.now(); - - - //latency compensator - Game.accumulatedDelay+=((time-Game.time)-1000/Game.fps); - if (Game.prefs.timeout && time-Game.lastActivity>=1000*60*5) - { - if (Game.accumulatedDelay>1000*60*30) Game.delayTimeouts+=3;//more than 30 minutes delay? computer probably asleep and not making cookies anyway - else if (Game.accumulatedDelay>1000*5) Game.delayTimeouts++;//add to timeout counter when we skip 10 seconds worth of frames (and the player has been inactive for at least 5 minutes) - if (Game.delayTimeouts>=3) Game.Timeout();//trigger timeout when the timeout counter is 3+ - } - - Game.accumulatedDelay=Math.min(Game.accumulatedDelay,1000*5);//don't compensate over 5 seconds; if you do, something's probably very wrong - Game.time=time; - - //if (Game.accumulatedDelay>=Game.fps) console.log('delay:',Math.round(Game.accumulatedDelay/Game.fps)); - while (Game.accumulatedDelay>0) - { - Game.Logic(); - Game.accumulatedDelay-=1000/Game.fps;//as long as we're detecting latency (slower than target fps), execute logic (this makes drawing slower but makes the logic behave closer to correct target fps) - } - Game.catchupLogic=0; - Timer.track('logic'); - Timer.say('END LOGIC'); - /* - if (!Game.prefs.altDraw) - { - var hasFocus=document.hasFocus(); - Timer.say('DRAW'); - if (hasFocus || Game.prefs.focus || Game.loopT%10==0) requestAnimationFrame(Game.Draw); - //if (document.hasFocus() || Game.loopT%5==0) Game.Draw(); - Timer.say('END DRAW'); - } - else requestAnimationFrame(Game.Draw);*/ - if (Game.visible) Game.Draw(); - - //if (!hasFocus) Game.tooltip.hide(); - - if (Game.sesame) - { - //fps counter and graph - Game.previousFps=Game.currentFps; - Game.currentFps=Game.getFps(); - var ctx=Game.fpsGraphCtx; - ctx.drawImage(Game.fpsGraph,-1,0); - ctx.fillStyle='rgb('+Math.round((1-Game.currentFps/Game.fps)*128)+',0,0)'; - ctx.fillRect(128-1,0,1,64); - ctx.strokeStyle='#fff'; - ctx.beginPath(); - ctx.moveTo(128-1,(1-Game.previousFps/Game.fps)*64); - ctx.lineTo(128,(1-Game.currentFps/Game.fps)*64); - ctx.stroke(); - - l('fpsCounter').textContent=Game.currentFps+' fps'; - var str=''; - for (var i in Timer.labels) {str+=Timer.labels[i];} - if (Game.debugTimersOn) l('debugLog').style.display='block'; - else l('debugLog').style.display='none'; - l('debugLog').innerHTML=str; - - } - Timer.reset(); - - Game.loopT++; - setTimeout(Game.Loop,1000/Game.fps); - } -} - -/*===================================================================================== -LAUNCH THIS THING -=======================================================================================*/ -//Game.Launch(); - - -//try {Game.Launch();} -//catch(err) {console.log('ERROR : '+err.message);} - -window.onload=function() -{ - if (!Game.ready) - { - var loadLangAndLaunch=function(lang,firstLaunch) - { - if (!firstLaunch) localStorageSet('CookieClickerLang',lang); - - //LoadLang('../Cookie Clicker Localization/EN.js',function(lang){return function(){ - LoadLang('loc/EN.js?v='+Game.version,function(lang){return function(){ - locStringsFallback=locStrings; - LoadLang('loc/'+lang+'.js?v='+Game.version,function(){ - var launch=function(){ - Game.Launch(); - if (top!=self) Game.ErrorFrame(); - else - { - console.log('[=== '+choose([ - 'Oh, hello!', - 'hey, how\'s it hangin', - 'About to cheat in some cookies or just checking for bugs?', - 'Remember : cheated cookies taste awful!', - 'Hey, Orteil here. Cheated cookies taste awful... or do they?', - ])+' ===]'); - Game.Load(function(){Game.Init();if (firstLaunch) Game.showLangSelection(true);}); - //try {Game.Load(Game.Init);} - //catch(err) {console.log('ERROR : '+err.message);} - } - } - if (App && App.loadMods) App.loadMods(launch); - else launch(); - }); - }}(lang)); - } - - var showLangSelect=function(callback) - { - var str=''; - for (var i in Langs) - { - var lang=Langs[i]; - str+='
'+lang.name+'
'; - } - l('offGameMessage').innerHTML= - '
Language
'+ - '
'+ - str; - for (var i in Langs) - { - var lang=Langs[i]; - AddEvent(l('langSelect-'+i),'click',function(lang){return function(){callback(lang);};}(i)); - AddEvent(l('langSelect-'+i),'mouseover',function(lang){return function(){PlaySound('snd/smallTick.mp3',0.75);l('languageSelectHeader').innerHTML=Langs[lang].changeLanguage;};}(i)); - } - } - - var lang=localStorageGet('CookieClickerLang'); - if (App && !lang) showLangSelect(loadLangAndLaunch); - else if (!lang) {loadLangAndLaunch('EN',true);} - else loadLangAndLaunch(lang); - } +/* +All this code is copyright Orteil, 2013-2023. + -with some help, advice and fixes by Nicholas Laux, Debugbro, Opti, the folks at Playsaurus, and lots of people on reddit, Discord, and the DashNet forums + -also includes a bunch of snippets found on stackoverflow.com and others + -want to mod the game? scroll down to the "MODDING API" section +Hello, and welcome to the joyous mess that is main.js. Code contained herein is not guaranteed to be good, consistent, or sane. Most of this is years old at this point and harkens back to simpler, cruder times. In particular I've tried to maintain compatibility with fairly old versions of javascript, which means luxuries such as 'let', arrow functions and string literals are unavailable. +As Cookie Clicker is rife with puns and tricky wordplay, localization was never intended to be possible - but ended up happening anyway as part of the Steam port. As a result, usage of strings is somewhat unorthodox in some places. +Have a nice trip, and stay safe. +Spoilers ahead. +http://orteil.dashnet.org +*/ + +/*===================================================================================== +MISC HELPER FUNCTIONS +=======================================================================================*/ +function l(what) {return document.getElementById(what);} +function choose(arr) {return arr[Math.floor(Math.random()*arr.length)];} + +function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");} +function replaceAll(find,replace,str){return str.replace(new RegExp(escapeRegExp(find),'g'),replace);} + +function cap(str){return str.charAt(0).toUpperCase()+str.slice(1);} + +function romanize(num){ + if (isNaN(num)) + return NaN; + var digits = String(+num).split(""), + key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM", + "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC", + "","I","II","III","IV","V","VI","VII","VIII","IX"], + roman = "", + i = 3; + while (i--) + roman = (key[+digits.pop() + (i * 10)] || "") + roman; + return Array(+digits.join("") + 1).join("M") + roman; +} + +//disable sounds coming from soundjay.com (sorry) +var realAudio=typeof Audio!=='undefined'?Audio:function(){return {}};//backup real audio +Audio=function(src){ + if (src && src.indexOf('soundjay')>-1) {Game.Popup('Sorry, no sounds hotlinked from soundjay.com.');this.play=function(){};} + else return new realAudio(src); +}; + +if(!Array.prototype.indexOf) { + Array.prototype.indexOf = function(needle) { + for(var i = 0; i < this.length; i++) { + if(this[i] === needle) {return i;} + } + return -1; + }; +} + +function randomFloor(x) {if ((x%1) 20) { + e -= 20; + x /= Math.pow(10,e); + x += (new Array(e+1)).join('0'); + } + } + return x; +} + +//Beautify and number-formatting adapted from the Frozen Cookies add-on (http://cookieclicker.wikia.com/wiki/Frozen_Cookies_%28JavaScript_Add-on%29) +function formatEveryThirdPower(notations) +{ + return function (val) + { + var base=0,notationValue=''; + if (!isFinite(val)) return 'Infinity'; + if (val>=1000000) + { + val/=1000; + while(Math.round(val)>=1000) + { + val/=1000; + base++; + } + if (base>=notations.length) {return 'Infinity';} else {notationValue=notations[base];} + } + return (Math.round(val*1000)/1000)+notationValue; + }; +} + +function rawFormatter(val){return Math.round(val*1000)/1000;} + +var formatLong=[' thousand',' million',' billion',' trillion',' quadrillion',' quintillion',' sextillion',' septillion',' octillion',' nonillion']; +var prefixes=['','un','duo','tre','quattuor','quin','sex','septen','octo','novem']; +var suffixes=['decillion','vigintillion','trigintillion','quadragintillion','quinquagintillion','sexagintillion','septuagintillion','octogintillion','nonagintillion']; +for (var i in suffixes) +{ + for (var ii in prefixes) + { + formatLong.push(' '+prefixes[ii]+suffixes[i]); + } +} + +var formatShort=['k','M','B','T','Qa','Qi','Sx','Sp','Oc','No']; +var prefixes=['','Un','Do','Tr','Qa','Qi','Sx','Sp','Oc','No']; +var suffixes=['D','V','T','Qa','Qi','Sx','Sp','O','N']; +for (var i in suffixes) +{ + for (var ii in prefixes) + { + formatShort.push(' '+prefixes[ii]+suffixes[i]); + } +} +formatShort[10]='Dc'; + + +var numberFormatters= +[ + formatEveryThirdPower(formatShort), + formatEveryThirdPower(formatLong), + rawFormatter +]; +var Beautify=function(val,floats) +{ + var negative=(val<0); + var decimal=''; + var fixed=val.toFixed(floats); + if (floats>0 && Math.abs(val)<1000 && Math.floor(fixed)!=fixed) decimal='.'+(fixed.toString()).split('.')[1]; + val=Math.floor(Math.abs(val)); + if (floats>0 && fixed==val+1) val++; + //var format=!EN?2:Game.prefs.format?2:1; + var format=Game.prefs.format?2:1; + var formatter=numberFormatters[format]; + var output=(val.toString().indexOf('e+')!=-1 && format==2)?val.toPrecision(3).toString():formatter(val).toString().replace(/\B(?=(\d{3})+(?!\d))/g,','); + //var output=formatter(val).toString().replace(/\B(?=(\d{3})+(?!\d))/g,','); + if (output=='0') negative=false; + return negative?'-'+output:output+decimal; +} +var shortenNumber=function(val) +{ + //if no scientific notation, return as is, else : + //keep only the 5 first digits (plus dot), round the rest + //may or may not work properly + if (val>=1000000 && isFinite(val)) + { + var num=val.toString(); + var ind=num.indexOf('e+'); + if (ind==-1) return val; + var str=''; + for (var i=0;i0) str2+=','; + str2+=str[i]; + } + return str2; +} + +var beautifyInTextFilter=/(([\d]+[,]*)+)/g;//new regex +function BeautifyInTextFunction(str){return Beautify(parseInt(str.replace(/,/g,''),10));}; +function BeautifyInText(str) {return str.replace(beautifyInTextFilter,BeautifyInTextFunction);}//reformat every number inside a string +function BeautifyAll()//run through upgrades and achievements to reformat the numbers +{ + var func=function(what){what.ddesc=BeautifyInText(what.ddesc);} + for (var i in Game.UpgradesById){Game.UpgradesById[i].ddesc=BeautifyInText(Game.UpgradesById[i].ddesc);} + for (var i in Game.AchievementsById){Game.AchievementsById[i].ddesc=BeautifyInText(Game.AchievementsById[i].ddesc);} +} + + +//=== LOCALIZATION === + +var locStrings={}; +var locStringsFallback={}; +var locId='NONE'; +var EN=true; +var locName='none'; +var locPatches=[]; +var locPlur='nplurals=2;plural=(n!=1);';//see http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html +var locPlurFallback=locPlur; +//note : plural index will be downgraded to the last matching, ie. in this case, if we get "0" but don't have a 3rd option, use the 2nd option (or 1st, lacking that too) +var locStringsByPart={}; +var FindLocStringByPart=function(match) +{ + return locStringsByPart[match]||undefined; + /* + //note: slow, only do this on init + for (var i in locStrings){ + var bit=i.split(']'); + if (bit[0].substring(1)==match) return i; + } + return undefined; + */ +} + +var Langs={ + 'EN':{file:'EN',nameEN:'English',name:'English',changeLanguage:'Language',icon:0,w:1,isEN:true}, + 'FR':{file:'FR',nameEN:'French',name:'Français',changeLanguage:'Langue',icon:0,w:1}, + 'DE':{file:'DE',nameEN:'German',name:'Deutsch',changeLanguage:'Sprache',icon:0,w:1}, + 'NL':{file:'NL',nameEN:'Dutch',name:'Nederlands',changeLanguage:'Taal',icon:0,w:1}, + 'CS':{file:'CS',nameEN:'Czech',name:'Čeština',changeLanguage:'Jazyk',icon:0,w:1}, + 'PL':{file:'PL',nameEN:'Polish',name:'Polski',changeLanguage:'Język',icon:0,w:1}, + 'IT':{file:'IT',nameEN:'Italian',name:'Italiano',changeLanguage:'Lingua',icon:0,w:1}, + 'ES':{file:'ES',nameEN:'Spanish',name:'Español',changeLanguage:'Idioma',icon:0,w:1}, + 'PT-BR':{file:'PT-BR',nameEN:'Portuguese',name:'Português',changeLanguage:'Idioma',icon:0,w:1}, + 'JA':{file:'JA',nameEN:'Japanese',name:'日本語',changeLanguage:'言語',icon:0,w:1.5}, + 'ZH-CN':{file:'ZH-CN',nameEN:'Chinese',name:'中文',changeLanguage:'语言',icon:0,w:1.5}, + 'KO':{file:'KO',nameEN:'Korean',name:'한글',changeLanguage:'언어',icon:0,w:1.5}, + 'RU':{file:'RU',nameEN:'Russian',name:'Русский',changeLanguage:'Язык',icon:0,w:1.2}, +}; + +//note : baseline should be the original english text +//in several instances, the english text will be quite different from the other languages, as this game was initially never meant to be translated and the translation process doesn't always play well with complex sentence structures +/*use: + loc('Plain text') + loc('Text where %1 is a parameter','something') + loc('Text where %1 and %2 are parameters',['a thing','another thing']) + loc('There is %1 apple',5) + ...if the localized string is an array, this is parsed as a pluralized string; for instance, the localized string could be + "There is %1 apple":[ + "There is %1 apple", + "There are %1 apples" + ] + loc('There is %1 apple and also, %2!',[5,'hello']) + loc('This string is localized.',0,'This is the string displayed in the english version.') + loc('You have %1.',''+loc('%1 apple',LBeautify(amount))+'') + ...you may nest localized strings, and use LBeautify() to pack Beautified values +*/ +var locBlink=false; +var localizationNotFound=[]; +var loc=function(id,params,baseline) +{ + var fallback=false; + var found=locStrings[id]; + if (!found) {found=locStringsFallback[id];fallback=true;} + if (found) + { + var str=''; + str=parseLoc(found,params); + //return str; + if (str.constructor===Array) return str; + if (locBlink && !fallback) return ''+str+'';//will make every localized text blink on screen, making omissions obvious; will not work for elements filled with textContent + } + + //if ((fallback || !found) && localizationNotFound.length<20 && localizationNotFound.indexOf(id)==-1){localizationNotFound.push(id);console.trace('localization string not found: ',id);} + if (found) return str; + return baseline||id; +} + +var parseLoc=function(str,params) +{ + /* + parses localization strings + -there can only be 1 plural per string and it MUST be at index %1 + -a pluralized string is detected if we have at least 1 param and the matching localized string is an array + */ + if (typeof params==='undefined') params=[]; + else if (params.constructor!==Array) params=[params]; + if (!str) return ''; + //if (str.constructor===Array) return str; + //if (typeof str==='function') return str(params); + //str=str.replace(/[\t\n\r]/gm,''); + + if (params.length==0) return str; + + if (str.constructor===Array) + { + if (typeof params[0]==='object')//an object containing a beautified number + { + var plurIndex=locPlur(params[0].n); + plurIndex=Math.min(str.length-1,plurIndex); + str=str[plurIndex]; + str=replaceAll('%1',params[0].b,str); + } + else + { + var plurIndex=locPlur(params[0]); + plurIndex=Math.min(str.length-1,plurIndex); + str=str[plurIndex]; + str=replaceAll('%1',params[0],str); + } + } + + var out=''; + var len=str.length; + var inPercent=false; + for (var i=0;i=parseInt(it)-1) out+=params[parseInt(it)-1]; + else out+='%'+it; + } + else if (it=='%') inPercent=true; + else out+=it; + } + return out; +} + +var LBeautify=function(val,floats) +{ + //returns an object in the form {n:original value floored,b:beautified value as string} for localization purposes + return {n:Math.floor(Math.abs(val)),b:Beautify(val,floats)}; +} + +var ModLanguage=function(id,json){ + if (id=='*') id=locId; + if (id!=locId || !Langs[id]) return false; + if (json['REPLACE ALL']) + { + var rep=function(str,from,to) + { + var regex=new RegExp(from,'ig'); + return str.replace(regex,function(match){ + return (match[0]==match[0].toLowerCase())?to:cap(to); + }); + } + for (var i in json['REPLACE ALL']) + { + var to=json['REPLACE ALL'][i]; + for (var ii in locStrings) + { + if (Array.isArray(locStrings[ii])) + { + for (var iii in locStrings[ii]) + { + locStrings[ii][iii]=rep(locStrings[ii][iii],i,to); + } + } + else locStrings[ii]=rep(locStrings[ii],i,to); + } + } + } + delete json['REPLACE ALL']; + AddLanguage(id,Langs[id].name,json,true); +} + +var AddLanguage=function(id,name,json,mod) +{ + //used in loc files + //if mod is true, this file is augmenting the current language + if (id==locId && !mod) return false;//don't load twice + if (!Langs[id]) return false; + locId=id; + if (Langs[locId].isEN) EN=true; else EN=false; + locName=Langs[id].nameEN;//name + + if (mod) + { + for (var i in json) + { + locStrings[i]=json[i]; + } + for (var i in locStrings) + { + var bit=i.split(']'); + if (bit[1] && bit[0].indexOf('[COMMENT:')!=0 && !locStringsByPart[bit[0].substring(1)]) locStringsByPart[bit[0].substring(1)]=i; + } + console.log('Augmented language "'+locName+'".'); + } + else + { + locStrings=json; + locPlur=json['']['plural-forms']||locPlurFallback; + delete locStrings['']; + for (var i in locStrings) + { + if (locStrings[i]=='/') locStrings[i]=i; + } + + locPlur=(function(plural_form){ + //lifted and modified from gettext.js + var pf_re=new RegExp('^\\s*nplurals\\s*=\\s*[0-9]+\\s*;\\s*plural\\s*=\\s*(?:\\s|[-\\?\\|&=!<>+*/%:;n0-9_\(\)])+'); + if (!pf_re.test(plural_form)) + throw new Error('The plural form "'+plural_form+'" is not valid'); + return new Function('n','var plural, nplurals; '+ plural_form +' return plural;'); + //return new Function('n','var plural, nplurals; '+ plural_form +' return { nplurals: nplurals, plural: (plural === true ? 1 : (plural ? plural : 0)) };'); + })(locPlur); + + locPatches=[]; + for (var i in locStrings){ + if (i.split('|')[0]=='Update notes') + { + var patch=i.split('|'); + var patchTranslated=locStrings[i].split('|'); + locPatches.push({id:parseInt(patch[1]),type:1,title:patchTranslated[2],points:patchTranslated.slice(3)}) + } + } + var sortMap=function(a,b) + { + if (a.id.*/,'');//strip quote section + it.ddesc=BeautifyInText(it.baseDesc); + + found=FindLocStringByPart(type+' desc '+it.id); + if (found) it.ddesc=loc(found); + found=FindLocStringByPart(type+' quote '+it.id); + if (found) it.ddesc+=''+loc(found)+''; + } + BeautifyAll(); +} +var getUpgradeName=function(name) +{ + var it=Game.Upgrades[name]; + var found=FindLocStringByPart('Upgrade name '+it.id); + if (found) return loc(found); else return name; +} +var getAchievementName=function(name) +{ + var it=Game.Achievements[name]; + var found=FindLocStringByPart('Achievement name '+it.id); + if (found) return loc(found); else return name; +} + + + +//these are faulty, investigate later +//function utf8_to_b64(str){return btoa(str);} +//function b64_to_utf8(str){return atob(str);} + +/*function utf8_to_b64( str ) { + try{return Base64.encode(unescape(encodeURIComponent( str )));} + catch(err) + {return '';} +} + +function b64_to_utf8( str ) { + try{return decodeURIComponent(escape(Base64.decode( str )));} + catch(err) + {return '';} +}*/ + +//phewie! https://stackoverflow.com/questions/30106476/using-javascripts-atob-to-decode-base64-doesnt-properly-decode-utf-8-strings +function utf8_to_b64(str) { + try{return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { + return String.fromCharCode(parseInt(p1, 16)) + }));} + catch(err) + {return '';} +} + +function b64_to_utf8(str) { + try{return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) + }).join(''));} + catch(err) + {return '';} +} + +function CompressBin(arr)//compress a sequence like [0,1,1,0,1,0]... into a number like 54. +{ + var str=''; + var arr2=arr.slice(0); + arr2.unshift(1); + arr2.push(1); + arr2.reverse(); + for (var i in arr2) + { + str+=arr2[i]; + } + str=parseInt(str,2); + return str; +} + +function UncompressBin(num)//uncompress a number like 54 to a sequence like [0,1,1,0,1,0]. +{ + var arr=num.toString(2); + arr=arr.split(''); + arr.reverse(); + arr.shift(); + arr.pop(); + return arr; +} + +function CompressLargeBin(arr)//we have to compress in smaller chunks to avoid getting into scientific notation +{ + var arr2=arr.slice(0); + var thisBit=[]; + var bits=[]; + for (var i in arr2) + { + thisBit.push(arr2[i]); + if (thisBit.length>=50) + { + bits.push(CompressBin(thisBit)); + thisBit=[]; + } + } + if (thisBit.length>0) bits.push(CompressBin(thisBit)); + arr2=bits.join(';'); + return arr2; +} + +function UncompressLargeBin(arr) +{ + var arr2=arr.split(';'); + var bits=[]; + for (var i in arr2) + { + bits.push(UncompressBin(parseInt(arr2[i]))); + } + arr2=[]; + for (var i in bits) + { + for (var ii in bits[i]) arr2.push(bits[i][ii]); + } + return arr2; +} + + +function pack(bytes) { + var chars = []; + var len=bytes.length; + for(var i = 0, n = len; i < n;) { + chars.push(((bytes[i++] & 0xff) << 8) | (bytes[i++] & 0xff)); + } + return String.fromCharCode.apply(null, chars); +} + +function unpack(str) { + var bytes = []; + var len=str.length; + for(var i = 0, n = len; i < n; i++) { + var char = str.charCodeAt(i); + bytes.push(char >>> 8, char & 0xFF); + } + return bytes; +} + +//modified from http://www.smashingmagazine.com/2011/10/19/optimizing-long-lists-of-yesno-values-with-javascript/ +function pack2(/* string */ values) { + var chunks = values.match(/.{1,14}/g), packed = ''; + for (var i=0; i < chunks.length; i++) { + packed += String.fromCharCode(parseInt('1'+chunks[i], 2)); + } + return packed; +} + +function unpack2(/* string */ packed) { + var values = ''; + for (var i=0; i < packed.length; i++) { + values += packed.charCodeAt(i).toString(2).substring(1); + } + return values; +} + +function pack3(values){ + //too many save corruptions, darn it to heck + return values; +} + + +//file save function from https://github.com/eligrey/FileSaver.js +var saveAs=saveAs||function(view){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=new MouseEvent("click");node.dispatchEvent(event)},is_safari=/Version\/[\d\.]+.*Safari/.test(navigator.userAgent),webkit_req_fs=view.webkitRequestFileSystem,req_fs=view.requestFileSystem||webkit_req_fs||view.mozRequestFileSystem,throw_outside=function(ex){(view.setImmediate||view.setTimeout)(function(){throw ex},0)},force_saveable_type="application/octet-stream",fs_min_size=0,arbitrary_revoke_timeout=500,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};if(view.chrome){revoker()}else{setTimeout(revoker,arbitrary_revoke_timeout)}},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},auto_bom=function(blob){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)){return new Blob(["\ufeff",blob],{type:blob.type})}return blob},FileSaver=function(blob,name,no_auto_bom){if(!no_auto_bom){blob=auto_bom(blob)}var filesaver=this,type=blob.type,blob_changed=false,object_url,target_view,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if(target_view&&is_safari&&typeof FileReader!=="undefined"){var reader=new FileReader;reader.onloadend=function(){var base64Data=reader.result;target_view.location.href="data:attachment/file"+base64Data.slice(base64Data.search(/[,;]/));filesaver.readyState=filesaver.DONE;dispatch_all()};reader.readAsDataURL(blob);filesaver.readyState=filesaver.INIT;return}if(blob_changed||!object_url){object_url=get_URL().createObjectURL(blob)}if(target_view){target_view.location.href=object_url}else{var new_tab=view.open(object_url,"_blank");if(new_tab==undefined&&is_safari){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)},abortable=function(func){return function(){if(filesaver.readyState!==filesaver.DONE){return func.apply(this,arguments)}}},create_if_not_found={create:true,exclusive:false},slice;filesaver.readyState=filesaver.INIT;if(!name){name="download"}if(can_use_save_link){object_url=get_URL().createObjectURL(blob);setTimeout(function(){save_link.href=object_url;save_link.download=name;click(save_link);dispatch_all();revoke(object_url);filesaver.readyState=filesaver.DONE});return}if(view.chrome&&type&&type!==force_saveable_type){slice=blob.slice||blob.webkitSlice;blob=slice.call(blob,0,blob.size,force_saveable_type);blob_changed=true}if(webkit_req_fs&&name!=="download"){name+=".download"}if(type===force_saveable_type||webkit_req_fs){target_view=view}if(!req_fs){fs_error();return}fs_min_size+=blob.size;req_fs(view.TEMPORARY,fs_min_size,abortable(function(fs){fs.root.getDirectory("saved",create_if_not_found,abortable(function(dir){var save=function(){dir.getFile(name,create_if_not_found,abortable(function(file){file.createWriter(abortable(function(writer){writer.onwriteend=function(event){target_view.location.href=file.toURL();filesaver.readyState=filesaver.DONE;dispatch(filesaver,"writeend",event);revoke(file)};writer.onerror=function(){var error=writer.error;if(error.code!==error.ABORT_ERR){fs_error()}};"writestart progress write abort".split(" ").forEach(function(event){writer["on"+event]=filesaver["on"+event]});writer.write(blob);filesaver.abort=function(){writer.abort();filesaver.readyState=filesaver.DONE};filesaver.readyState=filesaver.WRITING}),fs_error)}),fs_error)};dir.getFile(name,{create:false},abortable(function(file){file.remove();save()}),abortable(function(ex){if(ex.code===ex.NOT_FOUND_ERR){save()}else{fs_error()}}))}),fs_error)}),fs_error)},FS_proto=FileSaver.prototype,saveAs=function(blob,name,no_auto_bom){return new FileSaver(blob,name,no_auto_bom)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(blob,name,no_auto_bom){if(!no_auto_bom){blob=auto_bom(blob)}return navigator.msSaveOrOpenBlob(blob,name||"download")}}FS_proto.abort=function(){var filesaver=this;filesaver.readyState=filesaver.DONE;dispatch(filesaver,"abort")};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return saveAs})} + + +//seeded random function, courtesy of http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html +(function(a,b,c,d,e,f){function k(a){var b,c=a.length,e=this,f=0,g=e.i=e.j=0,h=e.S=[];for(c||(a=[c++]);d>f;)h[f]=f++;for(f=0;d>f;f++)h[f]=h[g=j&g+a[f%c]+(b=h[f])],h[g]=b;(e.g=function(a){for(var b,c=0,f=e.i,g=e.j,h=e.S;a--;)b=h[f=j&f+1],c=c*d+h[j&(h[f]=h[g=j&g+b])+(h[g]=b)];return e.i=f,e.j=g,c})(d)}function l(a,b){var e,c=[],d=(typeof a)[0];if(b&&"o"==d)for(e in a)try{c.push(l(a[e],b-1))}catch(f){}return c.length?c:"s"==d?a:a+"\0"}function m(a,b){for(var d,c=a+"",e=0;c.length>e;)b[j&e]=j&(d^=19*b[j&e])+c.charCodeAt(e++);return o(b)}function n(c){try{return a.crypto.getRandomValues(c=new Uint8Array(d)),o(c)}catch(e){return[+new Date,a,a.navigator.plugins,a.screen,o(b)]}}function o(a){return String.fromCharCode.apply(0,a)}var g=c.pow(d,e),h=c.pow(2,f),i=2*h,j=d-1;c.seedrandom=function(a,f){var j=[],p=m(l(f?[a,o(b)]:0 in arguments?a:n(),3),j),q=new k(j);return m(o(q.S),b),c.random=function(){for(var a=q.g(e),b=g,c=0;h>a;)a=(a+c)*d,b*=d,c=q.g(1);for(;a>=i;)a/=2,b/=2,c>>>=1;return(a+c)/b},p},m(c.random(),b)})(this,[],Math,256,6,52); + +function bind(scope,fn) +{ + //use : bind(this,function(){this.x++;}) - returns a function where "this" refers to the scoped this + return function() {fn.apply(scope,arguments);}; +} + +var grabProps=function(arr,prop) +{ + if (!arr) return []; + arr2=[]; + for (var i=0;i0) {offX=(offX%iW)-iW;} + if (offY<0) {offY=offY-Math.floor(offY/iH)*iH;} if (offY>0) {offY=(offY%iH)-iH;} + for (var y=offY;y'; +} + +var Loader=function()//asset-loading system +{ + this.loadingN=0; + this.assetsN=0; + this.assets=[]; + this.assetsLoading=[]; + this.assetsLoaded=[]; + this.domain=''; + this.loaded=0;//callback + this.doneLoading=0; + + this.blank=document.createElement('canvas'); + this.blank.width=8; + this.blank.height=8; + this.blank.alt='blank'; + + this.Load=function(assets) + { + for (var i in assets) + { + this.loadingN++; + this.assetsN++; + if (this.assetsLoading.indexOf(assets[i])==-1 && this.assetsLoaded.indexOf(assets[i])==-1) + { + var img=new Image(); + if (!Game.local) img.crossOrigin='anonymous'; + img.alt=assets[i]; + img.onload=bind(this,this.onLoad); + this.assets[assets[i]]=img; + this.assetsLoading.push(assets[i]); + if (assets[i].indexOf('/')!=-1) img.src=assets[i]; + else img.src=this.domain+assets[i]; + } + } + } + this.Replace=function(old,newer) + { + if (!this.assets[old]) this.Load([old]); + var img=new Image(); + if (!Game.local) img.crossOrigin='anonymous'; + if (newer.indexOf('/')!=-1)/*newer.indexOf('http')!=-1 || newer.indexOf('https')!=-1)*/ img.src=newer; + else img.src=this.domain+newer; + img.alt=newer; + img.onload=bind(this,this.onLoad); + this.assets[old]=img; + } + this.onLoadReplace=function() + { + } + this.onLoad=function(e) + { + this.assetsLoaded.push(e.target.alt); + this.assetsLoading.splice(this.assetsLoading.indexOf(e.target.alt),1); + this.loadingN--; + if (this.doneLoading==0 && this.loadingN<=0 && this.loaded!=0) + { + this.doneLoading=1; + this.loaded(); + } + } + this.waitForLoad=function(assets,callback) + { + //execute callback if all assets are ready to use, else check again every 200ms + var me=this; + var checkLoadedLoop=function() + { + for (var i=0;i=2) {Sounds[url].currentTime=0;Sounds[url].volume=Math.pow(volume*Game.volume/100,2);} + Sounds[url].play(); +} +var SoundInsts=[]; +var SoundI=0; +for (var i=0;i<12;i++){SoundInsts[i]=new Audio();} +var pitchSupport=false; +//note : Chrome turns out to not support webkitPreservesPitch despite the specifications claiming otherwise, and Firefox clips some short sounds when changing playbackRate, so i'm turning the feature off completely until browsers get it together +//if (SoundInsts[0].preservesPitch || SoundInsts[0].mozPreservesPitch || SoundInsts[0].webkitPreservesPitch) pitchSupport=true; + +var PlaySound=function(url,vol,pitchVar) +{ + //url : the url of the sound to play (will be cached so it only loads once) + //vol : volume between 0 and 1 (multiplied by game volume setting); defaults to 1 (full volume) + //(DISABLED) pitchVar : pitch variance in browsers that support it (Firefox only at the moment); defaults to 0.05 (which means pitch can be up to -5% or +5% anytime the sound plays) + var volume=1; + var volumeSetting=Game.volume; + if (typeof vol!=='undefined') volume=vol; + if (volume<-5) {volume+=10;volumeSetting=Game.volumeMusic;} + if (!volumeSetting || volume==0) return 0; + if (typeof Sounds[url]==='undefined') + { + //sound isn't loaded, cache it + Sounds[url]=new Audio(url.indexOf('snd/')==0?(Game.resPath+url):url); + Sounds[url].onloadeddata=function(e){PlaySound(url,vol,pitchVar);} + //Sounds[url].load(); + } + else if (Sounds[url].readyState>=2 && SoundInsts[SoundI].paused) + { + var sound=SoundInsts[SoundI]; + SoundI++; + if (SoundI>=12) SoundI=0; + sound.src=Sounds[url].src; + //sound.currentTime=0; + sound.volume=Math.pow(volume*volumeSetting/100,2); + if (pitchSupport) + { + var pitchVar=(typeof pitchVar==='undefined')?0.05:pitchVar; + var rate=1+(Math.random()*2-1)*pitchVar; + sound.preservesPitch=false; + sound.mozPreservesPitch=false; + sound.webkitPreservesPitch=false; + sound.playbackRate=rate; + } + try{sound.play();}catch(e){} + /* + var sound=Sounds[url].cloneNode(); + sound.volume=Math.pow(volume*volumeSetting/100,2); + sound.onended=function(e){if (e.target){delete e.target;}}; + sound.play();*/ + } +} +var PlayMusicSound=function(url,vol,pitchVar) +{ + //like PlaySound but, if music is enabled, play with music volume + PlaySound(url,(vol||1)-(Music?10:0),pitchVar); +} + +Music=false; +PlayCue=function(cue,arg) +{ + if (Music && Game.jukebox.trackAuto) Music.cue(cue,arg); +} + +if (!Date.now){Date.now=function now() {return new Date().getTime();};} + +var triggerAnim=function(element,anim) +{ + if (!element) return; + element.classList.remove(anim); + void element.offsetWidth; + element.classList.add(anim); +}; + +var debugStr=''; +var Debug=function(what) +{ + if (!debugStr) debugStr=what; + else debugStr+='; '+what; +} + +var Timer={}; +Timer.t=Date.now(); +Timer.labels=[]; +Timer.smoothed=[]; +Timer.reset=function() +{ + Timer.labels=[]; + Timer.t=Date.now(); +} +Timer.track=function(label) +{ + if (!Game.sesame) return; + var now=Date.now(); + if (!Timer.smoothed[label]) Timer.smoothed[label]=0; + Timer.smoothed[label]+=((now-Timer.t)-Timer.smoothed[label])*0.1; + Timer.labels[label]='
'+label+' : '+Math.round(Timer.smoothed[label])+'ms
'; + Timer.t=now; +} +Timer.clean=function() +{ + if (!Game.sesame) return; + var now=Date.now(); + Timer.t=now; +} +Timer.say=function(label) +{ + if (!Game.sesame) return; + Timer.labels[label]='
'+label+'
'; +} + + +/*===================================================================================== +GAME INITIALIZATION +=======================================================================================*/ +var Game={}; + +(function(){ + /*===================================================================================== + MODDING API + =======================================================================================*/ + /* + to use: + -(NOTE: this functions a little differently in the standalone/Steam version; have a look in the game's /mods folder for example mods - though most of the information below still applies) + -have your mod call Game.registerMod("unique id",mod object) + -the "unique id" value is a string the mod will use to index and retrieve its save data; special characters are ignored + -the "mod object" value is an object structured like so: + { + init:function(){ + //this function is called as soon as the mod is registered + //declare hooks here + }, + save:function(){ + //use this to store persistent data associated with your mod + return 'a string to be saved'; + }, + load:function(str){ + //do stuff with the string data you saved previously + }, + } + -the mod object may also contain any other data or functions you want, for instance to make them accessible to other mods + -your mod and its data can be accessed with Game.mods['mod id'] + -hooks are functions the game calls automatically in certain circumstances, like when calculating cookies per click or when redrawing the screen + -to add a hook: Game.registerHook('hook id',yourFunctionHere) - note: you can also declare whole arrays of hooks, ie. Game.registerHook('hook id',[function1,function2,...]) + -to remove a hook: Game.removeHook('hook id',theSameFunctionHere) + -some hooks are fed a parameter you can use in the function + -list of valid hook ids: + 'logic' - called every logic tick + 'draw' - called every draw tick + 'reset' - called whenever the player resets; parameter is true if this is a hard reset, false if it's an ascension + 'reincarnate' - called when the player has reincarnated after an ascension + 'ticker' - called when determining news ticker text; should return an array of possible choices to add + 'cps' - called when determining the CpS; parameter is the current CpS; should return the modified CpS + 'cookiesPerClick' - called when determining the cookies per click; parameter is the current value; should return the modified value + 'click' - called when the big cookie is clicked + 'create' - called after the game declares all buildings, buffs, upgrades and achievs; use this to declare your own - note that while the game distinguishes between vanilla and non-vanilla content, saving/loading functionality for custom content (including stuff like active buffs or permanent upgrade slotting) is not explicitly implemented and may be unpredictable and broken + 'check' - called every few seconds when we check for upgrade/achiev unlock conditions; you can also use this for other checks that you don't need happening every logic frame + -function hooks are provided for convenience and more advanced mod functionality will probably involve manual code injection + -please be mindful of the length of the data you save, as it does inflate the export-save-to-string feature + + NOTE: modding API is susceptible to change and may not always function super-well + */ + Game.mods={}; + Game.sortedMods=[]; + Game.brokenMods=[]; + Game.modSaveData={}; + Game.modHooks={}; + Game.modHooksNames=['logic','draw','reset','reincarnate','ticker','cps','cookiesPerClick','click','create','check']; + for (var i=0;i0) + { + Game.Notify(''+loc("Some mods couldn't be loaded:")+'','['+Game.brokenMods.join(', ')+']',[32,17]); + } + for (var i=0;i0) Game.Win('Third-party'); + } + Game.registerHook=function(hook,func) + { + if (func.constructor===Array) + { + for (var i=0;i'; + if (Game.mods[i]) str+=' '+loc("(loaded)"); + str+=''; + str+='
'+loc("%1 char",Game.modSaveData[i].length)+' X'; + str+='
'; + str+=''; + modsN++; + } + if (modsN==0) str+=loc("No mod data present."); + else str+=''; + Game.Prompt('

'+loc("Mod data")+'

'+tinyIcon([16,5])+'
'+loc("These are the mods present in your save data. You may delete some of this data to make your save file smaller.")+'
'+str+'
',[loc("Back")]); + } + + Game.LoadMod=LoadScript;//loads the mod at the given URL + + if (false) + { + //EXAMPLE MOD + Game.registerMod('test mod',{ + /* + what this example mod does: + -double your CpS + -display a little popup for half a second whenever you click the big cookie + -add a little intro text above your bakery name, and generate that intro text at random if you don't already have one + -save and load your intro text + */ + init:function(){ + Game.registerHook('reincarnate',function(){Game.mods['test mod'].addIntro();}); + Game.registerHook('check',function(){if (!Game.playerIntro){Game.mods['test mod'].addIntro();}}); + Game.registerHook('click',function(){Game.Notify(choose(['A good click.','A solid click.','A mediocre click.','An excellent click!']),'',0,0.5);}); + Game.registerHook('cps',function(cps){return cps*2;}); + }, + save:function(){ + //note: we use stringified JSON for ease and clarity but you could store any type of string + return JSON.stringify({text:Game.playerIntro}) + }, + load:function(str){ + var data=JSON.parse(str); + if (data.text) Game.mods['test mod'].addIntro(data.text); + }, + addIntro:function(text){ + //note: this is not a mod hook, just a function that's part of the mod + Game.playerIntro=text||choose(['oh snap, it\'s','watch out, it\'s','oh no! here comes','hide your cookies, for here comes','behold! it\'s']); + if (!l('bakerySubtitle')) l('bakeryName').insertAdjacentHTML('afterend','
'); + l('bakerySubtitle').textContent='~'+Game.playerIntro+'~'; + }, + }); + } + + //replacing an existing canvas picture with a new one at runtime : Game.Loader.Replace('perfectCookie.png','imperfectCookie.png'); + //upgrades and achievements can use other pictures than icons.png; declare their icon with [posX,posY,'http://example.com/myIcons.png'] + //check out the "UNLOCKING STUFF" section to see how unlocking achievs and upgrades is done +})(); + +Game.version=VERSION; +Game.loadedFromVersion=VERSION; +Game.beta=BETA; +if (!App && window.location.href.indexOf('/beta')>-1) Game.beta=1; +else if (App && new URL(window.location.href).searchParams.get('beta')) Game.beta=1; +Game.https=!App?((location.protocol!='https:')?false:true):true; +Game.SaveTo='CookieClickerGame'; +if (Game.beta) Game.SaveTo='CookieClickerGameBeta'; +if (App && new URL(window.location.href).searchParams.get('modless')) Game.modless=1; +Game.local=(!location.hostname || location.hostname==='localhost' || location.hostname==='127.0.0.1'); +if (App) Game.local=true; +Game.resPath=''; +if (!App && !Game.local && window.location.href.indexOf('orteil.dashnet.org')!=-1) +{ + Game.resPath=('//'+location.host+location.pathname).replace('orteil.dashnet.org','cdn.dashnet.org'); + if (Game.resPath.substr(-1)!='/') Game.resPath+='/'; +} + + +Game.Launch=function() +{ + Game.mobile=0; + Game.touchEvents=0; + //if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) Game.mobile=1; + //if (Game.mobile) Game.touchEvents=1; + //if ('ontouchstart' in document.documentElement) Game.touchEvents=1; + + var css=document.createElement('style'); + css.type='text/css'; + css.innerHTML='body .icon,body .crate,body .usesIcon{background-image:url('+Game.resPath+'img/icons.png?v='+Game.version+');}'+ + '.product .icon,.product .icon.off,.tinyProductIcon{background-image:url('+Game.resPath+'img/buildings.png?v='+Game.version+');}'; + document.head.appendChild(css); + + //this is so shimmers can still appear even if you lose connection after the game is loaded + var preloadImages=['img/goldCookie.png','img/wrathCookie.png','img/spookyCookie.png','img/hearts.png','img/contract.png','img/wrathContract.png','img/bunnies.png','img/frostedReindeer.png']; + var preloadImagesL=l('preloadImages'); + for (var i=0;i=41 && day<=46) Game.baseSeason='valentines'; + else if (day+leap>=90 && day<=92+leap) Game.baseSeason='fools'; + else if (day>=304-7+leap && day<=304+leap) Game.baseSeason='halloween'; + else if (day>=349+leap && day<=365+leap) Game.baseSeason='christmas'; + else + { + //easter is a pain goddamn + var easterDay=function(Y){var C = Math.floor(Y/100);var N = Y - 19*Math.floor(Y/19);var K = Math.floor((C - 17)/25);var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;I = I - 30*Math.floor((I/30));I = I - Math.floor(I/28)*(1 - Math.floor(I/28)*Math.floor(29/(I + 1))*Math.floor((21 - N)/11));var J = Y + Math.floor(Y/4) + I + 2 - C + Math.floor(C/4);J = J - 7*Math.floor(J/7);var L = I - J;var M = 3 + Math.floor((L + 40)/44);var D = L + 28 - 31*Math.floor(M/4);return new Date(Y,M-1,D);}(year); + easterDay=Math.floor((easterDay-new Date(easterDay.getFullYear(),0,0))/(1000*60*60*24)); + if (day>=easterDay-7 && day<=easterDay) Game.baseSeason='easter'; + } + + Game.updateLog= + '
'+ + '
'+loc("Info")+'
'+ + '
'+ + '
'+loc("About")+'
'+ + (App?'
'+loc("Note: links will open in your web browser.")+'
':'')+ + '
'+loc("Cookie Clicker is a javascript game by %1 and %2.",['Orteil','Opti'])+'
'+ + (App?'
'+loc("Music by %1.",'C418')+'
':'')+ + //'
We have an official Discord, as well as a forum; '+ + '
'+(EN? + 'We have an official Discord; if you\'re looking for help, you may also want to visit the subreddit or the wiki.
News and teasers are usually posted on Orteil\'s tumblr and twitter.' + : + loc("Useful links: %1, %2, %3, %4.",[ + 'Discord', + 'wiki', + 'tumblr', + 'twitter', + ])) + +'
'+ + (!App?'
'+loc( + "This version of Cookie Clicker is 100% free, forever. Want to support us so we can keep developing games? Here's some ways you can help:%1", + [(!App?'

• '+(EN?'get ':'')+'Cookie Clicker on Steam':'')+''+(EN?' (it\'s about 5 bucks)':'')+'

• '+(EN?'support us on ':'')+'Patreon'+(EN?' (there\'s perks!)':'')+'

• '+(EN?'check out our ':'')+'Shop'+(EN?' with rad cookie shirts, hoodies and stickers':'')+((!App && EN)?'

• disable your adblocker (if you want!)':'')] + )+ + '
':'')+ + '
'+loc("Note: if you find a new bug after an update and you're using a 3rd-party add-on, make sure it's not just your add-on causing it!")+'
'+ + (!App?('
'+loc("Warning: clearing your browser cache or cookies (what else?) will result in your save being wiped. Export your save and back it up first!")+'
'):'')+ + + '
'+ + '
'+loc("Version history")+'
'; + + for (var i=0;i
'+ + '
'+patch.title+'
'; + for (var ii=0;ii'; + } + Game.updateLog+=patchText; + } + + if (!EN) Game.updateLog+='
'+loc("Note: older update notes are in English.")+'
'; + + Game.updateLog+= + + '
'+ + '
07/05/2023 - often imitated, never duplicated
'+ + '
• added the final, 20th building
'+ + '
-currently, no more buildings are planned beyond this one; there are still many more updates to come, but future patches will focus on adding minigames to the existing buildings along with other features!
'+ + '
• added another tier of upgrades and achievements
'+ + '
• updated flavored milk icons
'+ + '
• added visual cue for shimmering veil
'+ + '
• touched up old Santa sprites
'+ + '
• new heavenly upgrade that lets you trade presents with other players
'+ + (App?'
• removed Discord rich presence support (plugin currently broken)
':'')+ + '
• Cookie Clicker turns 10 years old this year. Thank you for clicking cookies with us!
'+ + + '
'+ + '
31/05/2022 - a mind of its own
'+ + '
• added a new building
'+ + '
• added a new tier of upgrades and achievements
'+ + '
• multi-language support added to web version
'+ + '
• added a few new heavenly upgrades
'+ + '
• added the jukebox
'+ + '
• the 3 secret heavenly upgrades now rely on how many times the relevant digit is present in total, rather than at the end
'+ + '
• backgrounds overhauled; extra options for the background selector
'+ + '
• extra options for the golden cookie sound selector
'+ + '
• the bank minigame now tells you the value you previously bought a stock at
'+ + '
• the bank minigame flow is a little more exciting
'+ + (App?'
• new option to disable your game activity showing up in Discord
':'')+ + (App?'
• launch errors now provide the option to restart without mods
':'')+ + + (App?('
'+ + '
18/12/2021 - work it
'+ + '
• added Steam Workshop support (lets you install mods and upload your own)
'+ + '
• added Korean language support
'+ + '
• added back "short numbers" option for non-english languages (uses english terms for the time being)
'+ + '
• added tooltips on achievement notifications
'+ + '
• added Discord rich presence support
'):'')+ + + '
'+ + '
01/09/2021 - give me Steam
'+ + '
• Cookie Clicker has been released on Steam with music by C418!
'+ + '
• web version and Steam version will receive the same updates from now on
'+ + '
• you can now play in 13 different languages
'+ + '
• new option to disable scary stuff
'+ + '
• basic screen-reader support
'+ + '
• various other improvements
'+ + + '
'+ + '
01/11/2020 - alternate reality
'+ + '
• new building
'+ + '
• new upgrade tier
'+ + '
• new achievement tier
'+ + '
• new heavenly upgrades
'+ + '
• new modding API
'+ + '
• new rebalancing (ascension slot prices, finger upgrades...)
'+ + '
• new fixes (leap years, ghost swaps, carryover seeds...)
'+ + '
• new stuff
'+ + + '
'+ + '
23/08/2020 - money me, money now
'+ + '
• finalized stock market minigame beta and added it to live version
'+ + '
• dark mode added to stock market minigame
'+ + '
• can no longer select a milk before unlocking it; milk selector layout has been improved
'+ + '
• stock market goods have higher value caps and a larger spread; can also shift-click the hide buttons to hide/show all other stocks
'+ + + '
'+ + '
08/08/2020 - checking account (beta)
'+ + '
• stock market layout has been revised
'+ + '
• selling stocks no longer increases cookies baked all time
'+ + '
• stock prices are now defined by your highest raw CpS this ascension (which is now displayed in the stats screen)
'+ + '
• can no longer buy and sell a stock in the same tick
'+ + '
• warehouse space now gains +10 per associated building level (up from +5)
'+ + '
• bank level now improves average (and maximum) stock values
'+ + '
• later stocks are worth more
'+ + '
• Cookie Clicker turns 7!
'+ + + '
'+ + '
18/06/2020 - making bank (beta)
'+ + '
• added the stock market minigame, accessible with level 1 banks or above; buy low, sell high!
'+ + '
• (minigame subject to heavy rebalancing over the coming patches)
'+ + '
• added a couple heavenly upgrades, including one that lets you pet your dragon
'+ + '
• added a new tier of building upgrades and achievements
'+ + '
• reindeer clicks now properly count for shimmering veil
'+ + '
• numbers in scientific notation should display better with Short numbers off
'+ + '
• replaced ツ in the javascript console building display with more accurate ッ
'+ + + '
'+ + '
28/09/2019 - going off-script
'+ + '
• added a new building
'+ + '
• added fortune cookies (a new heavenly upgrade)
'+ + '
• more upgrades, achievements etc
'+ + '
• updated the Russian bread cookies icon to better reflect their cyrillic origins
'+ + '
stealth update : the sugar lump refill timeout (not sugar lump growth) now no longer ticks down while the game is closed (this fixes an exploit)
'+ + '
• also released the official Android version of Cookie Clicker, playable here (iOS version will come later)
'+ + + '
'+ + '
01/04/2019 - 2.019 (the "this year" update)
'+ + '
• game has been renamed to "Cookie Clicker" to avoid confusion
'+ + '
• can now click the big cookie to generate cookies for free
'+ + '
• removed fall damage
'+ + //'
• fixed various typos : player\'s name is now correctly spelled as "[bakeryName]"
'+ + '
• removed all references to computer-animated movie Hoodwinked! (2005)
'+ + '
• went back in time and invented cookies and computer mice, ensuring Cookie Clicker would one day come to exist
'+ + '
• game now fully compliant with Geneva Conventions
'+ + '
• dropped support for TI-84 version
'+ + '
• released a low-res retro version of the game, playable here : orteil.dashnet.org/experiments/cookie
'+ + '
• updated version number
'+ + + '
'+ + '
05/03/2019 - cookies for days
'+ + '
• added over 20 new cookies, all previously suggested by our supporters on Patreon
'+ + '
• added 2 heavenly upgrades
'+ + '
• the Golden goose egg now counts as a golden cookie upgrade for Residual luck purposes
'+ + '
• golden sugar lumps now either double your cookies, or give you 24 hours of your CpS, whichever is lowest (previously was doubling cookies with no cap)
'+ + '
• the amount of heralds is now saved with your game, and is used to compute offline CpS the next time the game is loaded; previously, on page load, the offline calculation assumed heralds to be 0
'+ + '
• added a system to counteract the game freezing up (and not baking cookies) after being inactive for a long while on slower computers; instead, this will now trigger sleep mode, during which you still produce cookies as if the game was closed; to enable this feature, use the "Sleep mode timeout" option in the settings
'+ + '
• vaulting upgrades is now done with shift-click, as ctrl-click was posing issues for Mac browsers
'+ + '
• made tooltips for building CpS boosts from synergies hopefully clearer
'+ + '
• fixed an exploit with gambler\'s fever dream working across exports and ascensions
'+ + '
• can now hide tooltips in the garden by keeping the shift key pressed to make it easier to see where you\'re planting
'+ + '
• fixed a bug with golden cookies/reindeer not disappearing properly in some circumstances
'+ + '
• the Dragon\'s Curve aura should now properly make sugar lumps twice as weird
'+ + '
• the ctrl key should less often register incorrectly as pressed
'+ + '
• added a new ad slot in the top-right, as while our playerbase is strong and supportive as ever, our ad revenue sometimes fluctuates badly; we may remove the ad again should our income stabilize
'+ + '
• made a few adjustments to make the game somewhat playable in mobile browsers; it\'s not perfect and can get buggy, but it\'s functional! (you may need to zoom out or scroll around to view the game properly)
'+ + '
• speaking of which, we also got some good progress on the mobile app version (built from scratch for mobile), so stay tuned!
'+ + + '
'+ + '
25/10/2018 - feedback loop
'+ + '
• added a new building
'+ + '
• launched our Patreon (the link is orange so you\'ll notice it!)
'+ + '
• added a bunch of new heavenly upgrades, one of which ties into our Patreon but benefits everyone (this is still experimental!)
'+ + '
• when hovering over grandmas, you can now see their names and ages
'+ + '
• "make X cookies just from Y" requirements are now higher
'+ + '
• tweaked the prices of some heavenly upgrades to better fit the current cookie economy (it turns out billions of heavenly chips is now very achievable)
'+ + '
• building tooltips now display what % of CpS they contribute through synergy upgrades
'+ + '
• queenbeets now give up to 4% of bank, down from 6%
'+ + '
• among other things, season switches now display how many seasonal upgrades you\'re missing, and permanent upgrade slots now display the name of the slotted upgrade
'+ + '
• season switches have reworked prices
'+ + '
• season switches can now be cancelled by clicking them again
'+ + '
• can no longer accidentally click wrinklers through other elements
'+ + '
• sugar frenzy now triples your CpS for an hour instead of doubling it
'+ + '
• this text is now selectable
'+ + '
• progress on dungeons minigame is still very much ongoing
'+ + + '
'+ + '
08/08/2018 - hey now
'+ + '
• Cookie Clicker somehow turns 5, going against doctors\' most optimistic estimates
'+ + '
• added a new tier of building achievements, all named after Smash Mouth\'s classic 1999 hit "All Star"
'+ + '
• added a new tier of building upgrades, all named after nothing in particular
'+ + '
to our players : thank you so much for sticking with us all those years and allowing us to keep making the dumbest game known to mankind
'+ + '
• resumed work on the dungeons minigame
'+ + + '
'+ + '
01/08/2018 - buy buy buy
'+ + '
• added a heavenly upgrade that lets you buy all your upgrades instantly
'+ + '
• added a heavenly upgrade that lets you see upgrade tiers (feature was previously removed due to being confusing)
'+ + '
• added a new wrinkler-related heavenly upgrade
'+ + '
• added a new upgrade tier
'+ + '
• added a couple new cookies and achievements
'+ + '
• new "extra buttons" setting; turning it on adds buttons that let you minimize buildings
'+ + '
• new "lump confirmation" setting; turning it on will show a confirmation prompt when you spend sugar lumps
'+ + '
• buildings now sell back for 25% of their current price (down from 50%); Earth Shatterer modified accordingly, now gives back 50% (down from 85%)
'+ + '
• farm soils now unlock correctly based on current amount of farms
'+ + '
• cheapcaps have a new exciting nerf
'+ + '
• wrinklegill spawns a bunch more
'+ + '
• can now ctrl-shift-click on "Harvest all" to only harvest mature, non-immortal plants
'+ + '
• added a new rare type of sugar lump
'+ + + '
'+ + '
20/04/2018 - weeding out some bugs
'+ + '
• golden clovers and wrinklegills should spawn a bit more often
'+ + '
• cronerice matures a lot sooner
'+ + '
• mature elderworts stay mature after reloading
'+ + '
• garden interface occupies space more intelligently
'+ + '
• seed price displays should be better behaved with short numbers disabled
'+ + '
• minigame animations are now turned off if using the "Fancy graphics" option is disabled
'+ + '
• CpS achievement requirements were dialed down a wee tad
'+ + + '
'+ + '
19/04/2018 - garden patch
'+ + '
• upgrades dropped by garden plants now stay unlocked forever (but drop much more rarely)
'+ + '
• garden sugar lump refill now also makes plants spread and mutate 3 times more during the bonus tick
'+ + '
• a few new upgrades
'+ + '
• a couple bug fixes and rephrasings
'+ + + '
'+ + '
18/04/2018 - your garden-variety update
'+ + '
• added the garden, a minigame unlocked by having at least level 1 farms
'+ + '
• added a little arrow and a blinky label to signal the game has updated since you last played it (hi!)
'+ + '
• new cookies, milk flavors and achievements
'+ + '
• sugar lumps are now unlocked whenever you\'ve baked at least a billion cookies, instead of on your first ascension
'+ + '
• sugar lump type now saves correctly
'+ + '
• minigame sugar lump refills can now only be done every 15 minutes (timer shared across all minigames)
'+ + '
• CpS achievements now have steeper requirements
'+ + '
• golden cookies now last 5% shorter for every other golden cookie on the screen
'+ + '
• the game now remembers which minigames are closed or open
'+ + '
• added a popup that shows when a season starts (so people won\'t be so confused about "the game looking weird today")
'+ + '
• permanent upgrade slots now show a tooltip for the selected upgrade
'+ + '
• finally fixed the save corruption bug, hopefully
'+ + + '
'+ + '
24/02/2018 - sugar coating
'+ + '
• added link to official Discord server
'+ + '
• felt weird about pushing an update without content so :
'+ + '
• added a handful of new cookies
'+ + '
• added 3 new heavenly upgrades
'+ + '
• short numbers should now be displayed up to novemnonagintillions
'+ + '
• cookie chains no longer spawn from the Force the Hand of Fate spell
'+ + '
• bigger, better Cookie Clicker content coming later this year
'+ + + '
'+ + '
08/08/2017 - 4 more years
'+ + '
• new building : Chancemakers
'+ + '
• new milk, new kittens, new dragon aura, new cookie, new upgrade tier
'+ + '
• buffs no longer affect offline CpS
'+ + '
• Godzamok\'s hunger was made less potent (this is a nerf, very sorry)
'+ + '
• grimoire spell costs and maximum magic work differently
'+ + '
• Spontaneous Edifice has been reworked
'+ + '
• changed unlock levels and prices for some cursor upgrades
'+ + '
• fixed buggy pantheon slots, hopefully
'+ + '
• fixed "Legacy started a long while ago" showing as "a few seconds ago"
'+ + '
• Cookie Clicker just turned 4. Thank you for sticking with us this long!
'+ + + '
'+ + '
15/07/2017 - the spiritual update
'+ + '
• implemented sugar lumps, which start coalescing if you\'ve ascended at least once and can be used as currency for special things
'+ + '
• buildings can now level up by using sugar lumps in the main buildings display, permanently boosting their CpS
'+ + '
• added two new features unlocked by levelling up their associated buildings, Temples and Wizard towers; more building-related minigames will be implemented in the future
'+ + '
• active buffs are now saved
'+ + '
• the background selector upgrade is now functional
'+ + '
• the top menu no longer scrolls with the rest
'+ + '
• timespans are written nicer
'+ + '
• Dragonflights now tend to supercede Click frenzies, you will rarely have both at the same time
'+ + '
• some old bugs were phased out and replaced by new ones
'+ + + '
'+ + '
24/07/2016 - golden cookies overhaul
'+ + '
• golden cookies and reindeer now follow a new system involving explicitly defined buffs
'+ + '
• a bunch of new golden cookie effects have been added
'+ + '
• CpS gains from eggs are now multiplicative
'+ + '
• shiny wrinklers are now saved
'+ + '
• reindeer have been rebalanced ever so slightly
'+ + '
• added a new cookie upgrade near the root of the heavenly upgrade tree; this is intended to boost early ascensions and speed up the game as a whole
'+ + '
• due to EU legislation, implemented a warning message regarding browser cookies; do understand that the irony is not lost on us
'+ + + '
'+ + '
08/02/2016 - legacy
'+ + '
Everything that was implemented during the almost 2-year-long beta has been added to the live game. To recap :
'+ + '
• 3 new buildings : banks, temples, and wizard towers; these have been added in-between existing buildings and as such, may disrupt some building-related achievements
'+ + '
• the ascension system has been redone from scratch, with a new heavenly upgrade tree
'+ + '
• mysterious new features such as angel-powered offline progression, challenge runs, and a cookie dragon
'+ + '
• sounds have been added (can be disabled in the options)
'+ + '
• heaps of rebalancing and bug fixes
'+ + '
• a couple more upgrades and achievements, probably
'+ + '
• fresh new options to further customize your cookie-clicking experience
'+ + '
• quality-of-life improvements : better bulk-buy, better switches etc
'+ + '
• added some general polish
'+/* i liked this dumb pun too much to let it go unnoticed */ + '
• tons of other little things we can\'t even remember right now
'+ + '
Miss the old version? Your old save was automatically exported here!
'+ + + '
'+ + '
05/02/2016 - legacy beta, more fixes
'+ + '
• added challenge modes, which can be selected when ascending (only 1 for now : "Born again")
'+ + '
• changed the way bulk-buying and bulk-selling works
'+ + '
• more bugs ironed out
'+ + + '
'+ + '
03/02/2016 - legacy beta, part III
'+ + '
• Not all bugs have been fixed, but everything should be much less broken.
'+ + '
• Additions'+ + '
'+ + '-a few more achievements
'+ + '-new option for neat, but slow CSS effects (disabled by default)
'+ + '-new option for a less grating cookie sound (enabled by default)
'+ + '-new option to bring back the boxes around icons in the stats screen
'+ + '-new buttons for saving and loading your game to a text file
'+ + '
'+ + '
'+ + '
• Changes'+ + '
'+ + '-early game should be a bit faster and very late game was kindly asked to tone it down a tad
'+ + '-dragonflight should be somewhat less ridiculously overpowered
'+ + '-please let me know if the rebalancing was too heavy or not heavy enough
'+ + '-santa and easter upgrades now depend on Santa level and amount of eggs owned, respectively, instead of costing several minutes worth of CpS
'+ + '-cookie upgrades now stack multiplicatively rather than additively
'+ + '-golden switch now gives +50% CpS, and residual luck is +10% CpS per golden cookie upgrade (up from +25% and +1%, respectively)
'+ + '-lucky cookies and cookie chain payouts have been modified a bit, possibly for the better, who knows!
'+ + '-wrinklers had previously been reduced to a maximum of 8 (10 with a heavenly upgrade), but are now back to 10 (12 with the upgrade)
'+ + /*'-all animations are now handled by requestAnimationFrame(), which should hopefully help make the game less resource-intensive
'+*/ + '-an ascension now only counts for achievement purposes if you earned at least 1 prestige level from it
'+ + '-the emblematic Cookie Clicker font (Kavoon) was bugged in Firefox, and has been replaced with a new font (Merriweather)
'+ + '-the mysterious wrinkly creature is now even rarer, but has a shadow achievement tied to it
'+ + '
'+ + '
'+ + '
• Fixes'+ + '
'+ + '-prestige now grants +1% CpS per level as intended, instead of +100%
'+ + '-heavenly chips should no longer add up like crazy when you ascend
'+ + '-upgrades in the store should no longer randomly go unsorted
'+ + '-window can be resized to any size again
'+ + '-the "Stats" and "Options" buttons have been swapped again
'+ + '-the golden cookie sound should be somewhat clearer
'+ + '-the ascend screen should be less CPU-hungry
'+ + '
'+ + '
'+ + + '
'+ + '
20/12/2015 - legacy beta, part II
'+ + '
• existing beta saves have been wiped due to format inconsistencies and just plain broken balance; you\'ll have to start over from scratch - which will allow you to fully experience the update and find all the awful little bugs that no doubt plague it
'+ + '
• importing your save from the live version is also fine
'+ + '
• we took so long to make this update, Cookie Clicker turned 2 years old in the meantime! Hurray!
'+ + '
• heaps of new upgrades and achievements
'+ + '
• fixed a whole bunch of bugs
'+ + '
• did a lot of rebalancing
'+ + '
• reworked heavenly chips and heavenly cookies (still experimenting, will probably rebalance things further)
'+ + '
• you may now unlock a dragon friend
'+ + '
• switches and season triggers now have their own store section
'+ + '
• ctrl-s and ctrl-o now save the game and open the import menu, respectively
'+ + '
• added some quick sounds, just as a test
'+ + '
• a couple more options
'+ + '
• even more miscellaneous changes and additions
'+ + + '
'+ + '
25/08/2014 - legacy beta, part I
'+ + '
• 3 new buildings
'+ + '
• price and CpS curves revamped
'+ + '
• CpS calculations revamped; cookie upgrades now stack multiplicatively
'+ + '
• prestige system redone from scratch, with a whole new upgrade tree
'+ + '
• added some general polish
'+ + '
• tons of other miscellaneous fixes and additions
'+ + '
• Cookie Clicker is now 1 year old! (Thank you guys for all the support!)
'+ + '
• Note : this is a beta; you are likely to encounter bugs and oversights. Feel free to send me feedback if you find something fishy!
'+ + + '
'+ + '
18/05/2014 - better late than easter
'+ + '
• bunnies and eggs, somehow
'+ + '
• prompts now have keyboard shortcuts like system prompts would
'+ + '
• naming your bakery? you betcha
'+ + '
• "Fast notes" option to make all notifications close faster; new button to close all notifications
'+ + '
• the dungeons beta is now available on /betadungeons
'+ + + '
'+ + '
09/04/2014 - nightmare in heaven
'+ + '
• broke a thing; heavenly chips were corrupted for some people
'+ + '
• will probably update to /beta first in the future
'+ + '
• sorry again
'+ + + '
'+ + '
09/04/2014 - quality of life
'+ + '
• new upgrade and achievement tier
'+ + '
• popups and prompts are much nicer
'+ + '
• tooltips on buildings are more informative
'+ + '
• implemented a simplified version of the Frozen Cookies add-on\'s short number formatting
'+ + '
• you can now buy 10 and sell all of a building at a time
'+ + '
• tons of optimizations and subtler changes
'+ + ''+ + + '
'+ + '
05/04/2014 - pity the fool
'+ + '
• wrinklers should now be saved so you don\'t have to pop them every time you refresh the game
'+ + '
• you now properly win 1 cookie upon reaching 10 billion cookies and making it on the local news
'+ + '
• miscellaneous fixes and tiny additions
'+ + '
• added a few very rudimentary mod hooks
'+ + '
• the game should work again in Opera
'+ + '
• don\'t forget to check out RandomGen, our all-purpose random generator maker!
'+ + + '
'+ + '
01/04/2014 - fooling around
'+ + '
• it\'s about time : Cookie Clicker has turned into the much more realistic Cookie Baker
'+ + '
• season triggers are cheaper and properly unlock again when they run out
'+ + '
• buildings should properly unlock (reminder : building unlocking is completely cosmetic and does not change the gameplay)
'+ + + '
'+ + '
14/02/2014 - lovely rainbowcalypse
'+ + '
• new building (it\'s been a while). More to come!
'+ + '
• you can now trigger seasonal events to your heart\'s content (upgrade unlocks at 5000 heavenly chips)
'+ + '
• new ultra-expensive batch of seasonal cookie upgrades you\'ll love to hate
'+ + '
• new timer bars for golden cookie buffs
'+ + '
• buildings are now hidden when you start out and appear as they become available
'+ + '
• technical stuff : the game is now saved through localstorage instead of browser cookies, therefore ruining a perfectly good pun
'+ + + '
'+ + '
22/12/2013 - merry fixmas
'+ + '
• some issues with the christmas upgrades have been fixed
'+ + '
• reindeer cookie drops are now more common
'+ + '
• reindeers are now reindeer
'+ + + '
'+ + '
20/12/2013 - Christmas is here
'+ + '
• there is now a festive new evolving upgrade in store
'+ + '
• reindeer are running amok (catch them if you can!)
'+ + '
• added a new option to warn you when you close the window, so you don\'t lose your un-popped wrinklers
'+ + '
• also added a separate option for displaying cursors
'+ + '
• all the Halloween features are still there (and having the Spooky cookies achievements makes the Halloween cookies drop much more often)
'+ + '
• oh yeah, we now have Cookie Clicker shirts, stickers and hoodies! (they\'re really rad)
'+ + + '
'+ + '
29/10/2013 - spooky update
'+ + '
• the Grandmapocalypse now spawns wrinklers, hideous elderly creatures that damage your CpS when they reach your big cookie. Thankfully, you can click on them to make them explode (you\'ll even gain back the cookies they\'ve swallowed - with interest!).
'+ + '
• wrath cookie now 27% spookier
'+ + '
• some other stuff
'+ + '
• you should totally go check out Candy Box 2, the sequel to the game that inspired Cookie Clicker
'+ + + '
'+ + '
15/10/2013 - it\'s a secret
'+ + '
• added a new heavenly upgrade that gives you 5% of your heavenly chips power for 11 cookies (if you purchased the Heavenly key, you might need to buy it again, sorry)
'+ + '
• golden cookie chains should now work properly
'+ + + '
'+ + '
15/10/2013 - player-friendly
'+ + '
• heavenly upgrades are now way, way cheaper
'+ + '
• tier 5 building upgrades are 5 times cheaper
'+ + '
• cursors now just plain disappear with Fancy Graphics off, I might add a proper option to toggle only the cursors later
'+ + '
• warning : the Cookie Monster add-on seems to be buggy with this update, you might want to wait until its programmer updates it
'+ + + '
'+ + '
15/10/2013 - a couple fixes
'+ + '
• golden cookies should no longer spawn embarrassingly often
'+ + '
• cursors now stop moving if Fancy Graphics is turned off
'+ + + '
'+ + '
14/10/2013 - going for the gold
'+ + '
• golden cookie chains work a bit differently
'+ + '
• golden cookie spawns are more random
'+ + '
• CpS achievements are no longer affected by golden cookie frenzies
'+ + '
• revised cookie-baking achievement requirements
'+ + '
• heavenly chips now require upgrades to function at full capacity
'+ + '
• added 4 more cookie upgrades, unlocked after reaching certain amounts of Heavenly Chips
'+ + '
• speed baking achievements now require you to have no heavenly upgrades; as such, they have been reset for everyone (along with the Hardcore achievement) to better match their initially intended difficulty
'+ + '
• made good progress on the mobile port
'+ + + '
'+ + '
01/10/2013 - smoothing it out
'+ + '
• some visual effects have been completely rewritten and should now run more smoothly (and be less CPU-intensive)
'+ + '
• new upgrade tier
'+ + '
• new milk tier
'+ + '
• cookie chains have different capping mechanics
'+ + '
• antimatter condensers are back to their previous price
'+ + '
• heavenly chips now give +2% CpS again (they will be extensively reworked in the future)
'+ + '
• farms have been buffed a bit (to popular demand)
'+ + '
• dungeons still need a bit more work and will be released soon - we want them to be just right! (you can test an unfinished version in the beta)
'+ + + '
'+ + '
28/09/2013 - dungeon beta
'+ + '
• from now on, big updates will come through a beta stage first (you can try it here)
'+ + '
• first dungeons! (you need 50 factories to unlock them!)
'+ + '
• cookie chains can be longer
'+ + '
• antimatter condensers are a bit more expensive
'+ + '
• heavenly chips now only give +1% cps each (to account for all the cookies made from condensers)
'+ + '
• added flavor text on all upgrades
'+ + + '
'+ + '
15/09/2013 - anticookies
'+ + '
• ran out of regular matter to make your cookies? Try our new antimatter condensers!
'+ + '
• renamed Hard-reset to "Wipe save" to avoid confusion
'+ + '
• reset achievements are now regular achievements and require cookies baked all time, not cookies in bank
'+ + '
• heavenly chips have been nerfed a bit (and are now awarded following a geometric progression : 1 trillion for the first, 2 for the second, etc); the prestige system will be extensively reworked in a future update (after dungeons)
'+ + '
• golden cookie clicks are no longer reset by soft-resets
'+ + '
• you can now see how long you\'ve been playing in the stats
'+ + + '
'+ + '
08/09/2013 - everlasting cookies
'+ + '
• added a prestige system - resetting gives you permanent CpS boosts (the more cookies made before resetting, the bigger the boost!)
'+ + '
• save format has been slightly modified to take less space
'+ + '
• Leprechaun has been bumped to 777 golden cookies clicked and is now shadow; Fortune is the new 77 golden cookies achievement
'+ + '
• clicking frenzy is now x777
'+ + + '
'+ + '
04/09/2013 - smarter cookie
'+ + '
• golden cookies only have 20% chance of giving the same outcome twice in a row now
'+ + '
• added a golden cookie upgrade
'+ + '
• added an upgrade that makes pledges last twice as long (requires having pledged 10 times)
'+ + '
• Quintillion fingers is now twice as efficient
'+ + '
• Uncanny clicker was really too unpredictable; it is now a regular achievement and no longer requires a world record, just *pretty fast* clicking
'+ + + '
'+ + '
02/09/2013 - a better way out
'+ + '
• Elder Covenant is even cheaper, and revoking it is cheaper still (also added a new achievement for getting it)
'+ + '
• each grandma upgrade now requires 15 of the matching building
'+ + '
• the dreaded bottom cursor has been fixed with a new cursor display style
'+ + '
• added an option for faster, cheaper graphics
'+ + '
• base64 encoding has been redone; this might make saving possible again on some older browsers
'+ + '
• shadow achievements now have their own section
'+ + '
• raspberry juice is now named raspberry milk, despite raspberry juice being delicious and going unquestionably well with cookies
'+ + '
• HOTFIX : cursors now click; fancy graphics button renamed; cookies amount now more visible against cursors
'+ + + '
'+ + '
01/09/2013 - sorting things out
'+ + '
• upgrades and achievements are properly sorted in the stats screen
'+ + '
• made Elder Covenant much cheaper and less harmful
'+ + '
• importing from the first version has been disabled, as promised
'+ + '
• "One mind" now actually asks you to confirm the upgrade
'+ + + '
'+ + '
31/08/2013 - hotfixes
'+ + '
• added a way to permanently stop the grandmapocalypse
'+ + '
• Elder Pledge price is now capped
'+ + '
• One Mind and other grandma research upgrades are now a little more powerful, if not 100% accurate
'+ + '
• "golden" cookie now appears again during grandmapocalypse; Elder Pledge-related achievements are now unlockable
'+ + + '
'+ + '
31/08/2013 - too many grandmas
'+ + '
• the grandmapocalypse is back, along with more grandma types
'+ + '
• added some upgrades that boost your clicking power and make it scale with your cps
'+ + '
• clicking achievements made harder; Neverclick is now a shadow achievement; Uncanny clicker should now truly be a world record
'+ + + '
'+ + '
28/08/2013 - over-achiever
'+ + '
• added a few more achievements
'+ + '
• reworked the "Bake X cookies" achievements so they take longer to achieve
'+ + + '
'+ + '
27/08/2013 - a bad idea
'+ + '
• due to popular demand, retired 5 achievements (the "reset your game" and "cheat" ones); they can still be unlocked, but do not count toward your total anymore. Don\'t worry, there will be many more achievements soon!
'+ + '
• made some achievements hidden for added mystery
'+ + + '
'+ + '
27/08/2013 - a sense of achievement
'+ + '
• added achievements (and milk)
'+ + '
(this is a big update, please don\'t get too mad if you lose some data!)
'+ + + '
'+ + '
26/08/2013 - new upgrade tier
'+ + '
• added some more upgrades (including a couple golden cookie-related ones)
'+ + '
• added clicking stats
'+ + + '
'+ + '
26/08/2013 - more tweaks
'+ + '
• tweaked a couple cursor upgrades
'+ + '
• made time machines less powerful
'+ + '
• added offline mode option
'+ + + '
'+ + '
25/08/2013 - tweaks
'+ + '
• rebalanced progression curve (mid- and end-game objects cost more and give more)
'+ + '
• added some more cookie upgrades
'+ + '
• added CpS for cursors
'+ + '
• added sell button
'+ + '
• made golden cookie more useful
'+ + + '
'+ + '
24/08/2013 - hotfixes
'+ + '
• added import/export feature, which also allows you to retrieve a save game from the old version (will be disabled in a week to prevent too much cheating)
'+ + '
• upgrade store now has unlimited slots (just hover over it), due to popular demand
'+ + '
• added update log
'+ + + '
'+ + '
24/08/2013 - big update!
'+ + '
• revamped the whole game (new graphics, new game mechanics)
'+ + '
• added upgrades
'+ + '
• much safer saving
'+ + + '
'+ + '
08/08/2013 - game launch
'+ + '
• made the game in a couple hours, for laughs
'+ + '
• kinda starting to regret it
'+ + '
• ah well
'+ + '
'+ + '
' + ; + + Game.ready=0; + + Game.Load=function(callback) + { + //l('offGameMessage').innerHTML='
Loading...
'; + Game.Loader=new Loader(); + Game.Loader.domain=Game.resPath+'img/'; + if (typeof PRELOAD!=='undefined') Game.Loader.loaded=PRELOAD(Game.Init); + else Game.Loader.loaded=callback; + Game.Loader.Load(['filler.png']); + } + Game.ErrorFrame=function() + { + l('offGameMessage').innerHTML= + '
Oops. Wrong address!
'+ + '
It looks like you\'re accessing Cookie Clicker from another URL than the official one.
'+ + 'You can play Cookie Clicker over here!
'+ + '(If for any reason, you are unable to access the game on the official URL, we are currently working on a second domain.)
'; + } + Game.timedout=false; + Game.Timeout=function() + { + Game.WriteSave(); + Game.killShimmers(); + l('offGameMessage').innerHTML='
'+(Game.Has('Twin Gates of Transcendence')?loc("Cookie Clicker is in sleep mode and generating offline cookies."):loc("Cookie Clicker is in sleep mode."))+'
'+loc("%1 to resume from your save file.",''+loc("Click here")+'')+'
'+loc("(this happens when too many frames are skipped at once,
usually when the game has been running in the background for a while)
(you can turn this feature off in the settings menu)")+'
'; + l('offGameMessageWrap').style.display='table'; + Game.timedout=true; + console.log('[=== Game timed out and has been put in sleep mode. Data was saved. ===]'); + } + Game.Resume=function() + { + l('offGameMessage').innerHTML=''; + l('offGameMessageWrap').style.display='none'; + Game.timedout=false; + Game.time=Date.now(); + Game.accumulatedDelay=0; + Game.delayTimeouts=0; + Game.lastActivity=Date.now(); + Game.Loop(); + Game.LoadSave(); + console.log('[=== Game resumed! Data was loaded. ===]'); + } + + + Game.Init=function() + { + Game.ready=1; + + /*===================================================================================== + VARIABLES AND PRESETS + =======================================================================================*/ + Game.T=0; + Game.drawT=0; + Game.loopT=0; + Game.fps=30; + + Game.season=Game.baseSeason; + + Game.l=l('game'); + Game.wrapper=l('wrapper'); + Game.bounds=0;//rectangle defining screen limits (right,left,bottom,top) updated every logic frame + + TopBarOffset=32; + if (!App) Game.wrapper.classList.add('onWeb'); + else {Game.wrapper.classList.add('offWeb');TopBarOffset=0;} + + if (Game.mobile==1) + { + Game.wrapper.className='mobile'; + } + Game.clickStr=Game.touchEvents?'ontouchend':'onclick'; + + l('versionNumber').innerHTML='v. '+Game.version+(!App?('
'):'')+(Game.beta?' beta':''); + + if (!App) + { + if (Game.beta) {var me=l('linkVersionBeta');me.parentNode.removeChild(me);} + else if (Game.version==1.0466) {var me=l('linkVersionOld');me.parentNode.removeChild(me);} + else {var me=l('linkVersionLive');me.parentNode.removeChild(me);} + } + + Game.lastActivity=Date.now();//reset on mouse move, key press or click + + //latency compensator stuff + Game.time=Date.now(); + Game.accumulatedDelay=0; + Game.delayTimeouts=0;//how many times we've gone over the timeout delay + Game.catchupLogic=0; + Game.fpsStartTime=0; + Game.frameNumber=0; + Game.currentFps=Game.fps; + Game.previousFps=Game.currentFps; + Game.getFps=function() + { + Game.frameNumber++; + var currentTime=(Date.now()-Game.fpsStartTime )/1000; + var result=Math.floor((Game.frameNumber/currentTime)); + if (currentTime>1) + { + Game.fpsStartTime=Date.now(); + Game.frameNumber=0; + } + return result; + } + + Game.cookiesEarned=0;//all cookies earned during gameplay + Game.cookies=0;//cookies + Game.cookiesd=0;//cookies display + Game.cookiesPs=1;//cookies per second (to recalculate with every new purchase) + Game.cookiesPsRaw=0;//raw cookies per second + Game.cookiesPsRawHighest=0;//highest raw cookies per second this ascension + Game.cookiesReset=0;//cookies lost to resetting (used to determine prestige and heavenly chips) + Game.cookieClicks=0;//+1 for each click on the cookie + Game.goldenClicks=0;//+1 for each golden cookie clicked (all time) + Game.goldenClicksLocal=0;//+1 for each golden cookie clicked (this game only) + Game.missedGoldenClicks=0;//+1 for each golden cookie missed + Game.handmadeCookies=0;//all the cookies made from clicking the cookie + Game.milkProgress=0;//you gain a little bit for each achievement. Each increment of 1 is a different milk displayed. + Game.milkH=Game.milkProgress/2;//milk height, between 0 and 1 (although should never go above 0.5) + Game.milkHd=0;//milk height display + Game.milkType=0;//custom milk + Game.bgType=0;//custom background + Game.chimeType=0;//golden cookie chime + Game.prestige=0;//prestige level (recalculated depending on Game.cookiesReset) + Game.heavenlyChips=0;//heavenly chips the player currently has + Game.heavenlyChipsDisplayed=0;//ticks up or down to match Game.heavenlyChips + Game.heavenlyChipsSpent=0;//heavenly chips spent on cookies, upgrades and such + Game.heavenlyCookies=0;//how many cookies have we baked from chips (unused) + Game.permanentUpgrades=[-1,-1,-1,-1,-1]; + Game.ascensionMode=0;//type of challenge run if any + Game.resets=0;//reset counter + Game.lumps=-1;//sugar lumps + Game.lumpsTotal=-1;//sugar lumps earned across all playthroughs (-1 means they haven't even started yet) + Game.lumpT=Date.now();//time when the current lump started forming + Game.lumpRefill=0;//time left before a sugar lump can be used again (on minigame refills etc) in logic frames + + Game.makeSeed=function() + { + var chars='abcdefghijklmnopqrstuvwxyz'.split(''); + var str=''; + for (var i=0;i<5;i++){str+=choose(chars);} + return str; + } + Game.seed=Game.makeSeed();//each run has its own seed, used for deterministic random stuff + + Game.volume=75;//sound volume + Game.volumeMusic=50;//music volume + + Game.elderWrath=0; + Game.elderWrathOld=0; + Game.elderWrathD=0; + Game.pledges=0; + Game.pledgeT=0; + Game.researchT=0; + Game.nextResearch=0; + Game.cookiesSucked=0;//cookies sucked by wrinklers + Game.cpsSucked=0;//percent of CpS being sucked by wrinklers + Game.wrinklersPopped=0; + Game.santaLevel=0; + Game.reindeerClicked=0; + Game.seasonT=0; + Game.seasonUses=0; + Game.dragonLevel=0; + Game.dragonAura=0; + Game.dragonAura2=0; + + Game.fortuneGC=0; + Game.fortuneCPS=0; + + Game.blendModesOn=(document.createElement('detect').style.mixBlendMode===''); + + Game.bg='';//background (grandmas and such) + Game.bgFade='';//fading to background + Game.bgR=0;//ratio (0 - not faded, 1 - fully faded) + Game.bgRd=0;//ratio displayed + + Game.windowW=window.innerWidth; + Game.windowH=window.innerHeight; + Game.scale=1; + + window.addEventListener('resize',function(e) + { + Game.resize(); + if (App && App.onResize) App.onResize(); + }); + + Game.resize=function() + { + var w=window.innerWidth; + var h=window.innerHeight; + + var prevW=Game.windowW; + var prevH=Game.windowH; + + var scale=Math.min( + w/Math.max(800,w), + h/Math.max(200,h) + ); + Game.windowW=Math.floor(w/scale); + Game.windowH=Math.floor(h/scale); + if (scale!=1) + { + Game.wrapper.style.transform='scale('+(scale)+')'; + Game.wrapper.style.width=Game.windowW+'px'; + Game.wrapper.style.height=Game.windowH+'px'; + } + else + { + Game.wrapper.style.removeProperty('transform'); + Game.wrapper.style.width='100%'; + Game.wrapper.style.height='100%'; + } + Game.scale=scale; + + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + me.toResize=true; + if (me.minigame && me.minigame.onResize) me.minigame.onResize(); + } + + if (Game.getNewTicker) + { + if (prevW>=Game.tickerTooNarrow && Game.windowW=Game.tickerTooNarrow) Game.getNewTicker(true); + } + } + Game.resize(); + + Game.startDate=parseInt(Date.now());//when we started playing + Game.fullDate=parseInt(Date.now());//when we started playing (carries over with resets) + Game.lastDate=parseInt(Date.now());//when we last saved the game (used to compute "cookies made since we closed the game" etc) + + Game.cookiesSent=0;Game.cookiesReceived=0; + + Game.prefs=[]; + Game.DefaultPrefs=function() + { + Game.prefs.particles=1;//particle effects : falling cookies etc + Game.prefs.numbers=1;//numbers that pop up when clicking the cookie + Game.prefs.autosave=1;//save the game every minute or so + Game.prefs.autoupdate=1;//send an AJAX request to the server every 30 minutes (note : ignored) + Game.prefs.milk=1;//display milk + Game.prefs.fancy=1;//CSS shadow effects (might be heavy on some browsers) + Game.prefs.warn=0;//warn before closing the window + Game.prefs.cursors=1;//display cursors + Game.prefs.focus=1;//make the game refresh less frequently when off-focus + Game.prefs.popups=0;//use old-style popups (no longer used) + Game.prefs.format=0;//shorten numbers + Game.prefs.notifs=0;//notifications fade faster + Game.prefs.animate=1;//animate buildings + Game.prefs.wobbly=1;//wobbly cookie + Game.prefs.monospace=0;//alt monospace font for cookies + Game.prefs.filters=1;//CSS filter effects (might be heavy on some browsers) + Game.prefs.cookiesound=1;//use new cookie click sound + Game.prefs.crates=0;//show crates around icons in stats + Game.prefs.altDraw=0;//use requestAnimationFrame to update drawing instead of fixed 30 fps setTimeout + Game.prefs.showBackupWarning=1;//if true, show a "Have you backed up your save?" message on save load; set to false when save is exported + Game.prefs.extraButtons=1;//if true, show Mute buttons and the building master bar + Game.prefs.askLumps=0;//if true, show a prompt before spending lumps + Game.prefs.customGrandmas=1;//if true, show patreon names for grandmas + Game.prefs.timeout=0;//if true, game may show pause screen when timed out + Game.prefs.cloudSave=1;//if true and on Steam, save and load to cloud + Game.prefs.bgMusic=1;//if true and on Steam, play music even when game isn't focused + Game.prefs.notScary=0;//if true, make some of the scary stuff less scary ("eyebrow mode") + Game.prefs.fullscreen=0;//if true, Steam game will be fullscreen + Game.prefs.screenreader=0;//if true, add some DOM stuff to facilitate screenreader interaction (requires reload) + Game.prefs.discordPresence=1;//if true and applicable, show game activity in Discord status + } + Game.DefaultPrefs(); + + window.onbeforeunload=function(event) + { + if (Game.prefs && Game.prefs.warn) + { + if (typeof event=='undefined') event=window.event; + if (event) event.returnValue=loc("Are you sure you want to close Cookie Clicker?"); + } + } + + Game.Mobile=function() + { + if (!Game.mobile) + { + Game.wrapper.className='mobile'; + Game.mobile=1; + } + else + { + Game.wrapper.className=''; + Game.mobile=0; + } + } + + Game.showBackupWarning=function() + { + Game.Notify(loc("Back up your save!"),loc("Hello again! Just a reminder that you may want to back up your Cookie Clicker save every once in a while, just in case.
To do so, go to Options and hit \"Export save\" or \"Save to file\"!")+'
'+loc("Don't show this again")+'',[25,7]); + } + + + + + /*===================================================================================== + BAKERY NAME + =======================================================================================*/ + Game.RandomBakeryName=function() + { + var str=''; + if (EN) + { + return (Math.random()>0.05?(choose(['Magic','Fantastic','Fancy','Sassy','Snazzy','Pretty','Cute','Pirate','Ninja','Zombie','Robot','Radical','Urban','Cool','Hella','Sweet','Awful','Double','Triple','Turbo','Techno','Disco','Electro','Dancing','Wonder','Mutant','Space','Science','Medieval','Future','Captain','Bearded','Lovely','Tiny','Big','Fire','Water','Frozen','Metal','Plastic','Solid','Liquid','Moldy','Shiny','Happy','Happy Little','Slimy','Tasty','Delicious','Hungry','Greedy','Lethal','Professor','Doctor','Power','Chocolate','Crumbly','Choklit','Righteous','Glorious','Mnemonic','Psychic','Frenetic','Hectic','Crazy','Royal','El','Von'])+' '):'Mc')+choose(['Cookie','Biscuit','Muffin','Scone','Cupcake','Pancake','Chip','Sprocket','Gizmo','Puppet','Mitten','Sock','Teapot','Mystery','Baker','Cook','Grandma','Click','Clicker','Spaceship','Factory','Portal','Machine','Experiment','Monster','Panic','Burglar','Bandit','Booty','Potato','Pizza','Burger','Sausage','Meatball','Spaghetti','Macaroni','Kitten','Puppy','Giraffe','Zebra','Parrot','Dolphin','Duckling','Sloth','Turtle','Goblin','Pixie','Gnome','Computer','Pirate','Ninja','Zombie','Robot']); + } + else + { + if (locStrings["bakery random name, 1st half"] && locStrings["bakery random name, 2nd half"]) str+=choose(loc("bakery random name, 1st half"))+' '+choose(loc("bakery random name, 2nd half")); + else str+=choose(loc("bakery random name")); + } + return str; + } + Game.GetBakeryName=function() {return Game.RandomBakeryName();} + Game.bakeryNameL=l('bakeryName'); + Game.bakeryNameSet=function(what) + { + try + { + var exp=new RegExp('[^\'\\-_0-9 \\p{L}]','gu'); + Game.bakeryName=what.replace(exp,' '); + //Game.bakeryName=what.replace(/[^'\-_0-9 \p{L}]/gu,' '); + Game.bakeryName=Game.bakeryName.trim().substring(0,28); + } + catch(e) + { + var exp=new RegExp('\W+','g'); + Game.bakeryName=what.replace(exp,' '); + //Game.bakeryName=what.replace(/\W+/g,' '); + Game.bakeryName=Game.bakeryName.substring(0,28); + } + Game.bakeryNameRefresh(); + if (Game.bakeryName=='RESTORE BACKUP' && App && App.restoreBackup) App.restoreBackup(); + } + Game.bakeryNameRefresh=function() + { + var name=Game.bakeryName; + if (EN) {if (name.slice(-1).toLowerCase()=='s') name+='\' bakery'; else name+='\'s bakery';} + else name=loc("%1's bakery",name); + Game.bakeryNameL.textContent=name; + name=Game.bakeryName.toLowerCase(); + if (name=='orteil') Game.Win('God complex'); + if (!App && name.indexOf('saysopensesame',name.length-('saysopensesame').length)>0 && !Game.sesame) Game.OpenSesame(); + Game.recalculateGains=1; + } + Game.bakeryNamePrompt=function() + { + PlaySound('snd/tick.mp3'); + Game.Prompt('

'+loc("Name your bakery")+'

'+loc("What should your bakery's name be?")+'
',[[loc("Confirm"),'if (l(\'bakeryNameInput\').value.length>0) {Game.bakeryNameSet(l(\'bakeryNameInput\').value);Game.Win(\'What\\\'s in a name\');Game.ClosePrompt();}'],[loc("Random"),'Game.bakeryNamePromptRandom();'],loc("Cancel")]); + l('bakeryNameInput').focus(); + l('bakeryNameInput').select(); + } + Game.bakeryNamePromptRandom=function() + { + l('bakeryNameInput').value=Game.RandomBakeryName(); + } + AddEvent(Game.bakeryNameL,'click',Game.bakeryNamePrompt); + + Game.bakeryNameSet(Game.GetBakeryName()); + + /*===================================================================================== + TOOLTIP + =======================================================================================*/ + Game.tooltip={text:'',x:0,y:0,origin:'',on:0,tt:l('tooltip'),tta:l('tooltipAnchor'),shouldHide:1,dynamic:0,from:0}; + Game.tooltip.draw=function(from,text,origin) + { + this.shouldHide=0; + this.text=text; + this.from=from; + //this.x=x; + //this.y=y; + this.origin=origin; + var tt=this.tt; + var tta=this.tta; + tt.style.left='auto'; + tt.style.top='auto'; + tt.style.right='auto'; + tt.style.bottom='auto'; + if (typeof this.text==='function') + { + var text=this.text(); + if (text=='') tta.style.opacity='0'; + else + { + tt.innerHTML=unescape(text); + tta.style.opacity='1'; + } + } + else tt.innerHTML=unescape(this.text); + //tt.innerHTML=(typeof this.text==='function')?unescape(this.text()):unescape(this.text); + tta.style.display='block'; + tta.style.visibility='hidden'; + Game.tooltip.update(); + tta.style.visibility='visible'; + this.on=1; + } + Game.tooltip.update=function() + { + var X=0; + var Y=0; + var width=this.tt.offsetWidth; + var height=this.tt.offsetHeight; + if (this.origin=='store') + { + X=Game.windowW-332-width; + Y=Game.mouseY-32; + if (Game.onCrate) Y=Game.onCrate.getBounds().top-42; + Y=Math.max(0,Math.min(Game.windowH-height-44,Y)); + /*this.tta.style.right='308px';//'468px'; + this.tta.style.left='auto'; + if (Game.onCrate) Y=Game.onCrate.getBounds().top-2; + this.tta.style.top=Math.max(0,Math.min(Game.windowH-this.tt.clientHeight-64,Y-48))+'px';*/ + } + else + { + if (Game.onCrate) + { + var rect=Game.onCrate.getBounds(); + if (rect.left==0 && rect.top==0)//if we get that bug where we get stuck in the top-left, move to the mouse (REVISION : just do nothing) + {return false;/*rect.left=Game.mouseX-24;rect.right=Game.mouseX+24;rect.top=Game.mouseY-24;rect.bottom=Game.mouseY+24;*/} + if (this.origin=='left') + { + X=rect.left-width-16; + Y=rect.top+(rect.bottom-rect.top)/2-height/2-38; + Y=Math.max(0,Math.min(Game.windowH-height-19,Y)); + if (X<0) X=rect.right; + } + else + { + X=rect.left+(rect.right-rect.left)/2-width/2-8; + Y=rect.top-height-TopBarOffset-16; + X=Math.max(0,Math.min(Game.windowW-width-16,X)); + if (Y<0) Y=rect.bottom-TopBarOffset; + } + } + else if (this.origin=='bottom-right') + { + X=Game.mouseX+8; + Y=Game.mouseY-32; + X=Math.max(0,Math.min(Game.windowW-width-16,X)); + Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); + } + else if (this.origin=='bottom') + { + X=Game.mouseX-width/2-8; + Y=Game.mouseY+24; + X=Math.max(0,Math.min(Game.windowW-width-16,X)); + Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); + } + else if (this.origin=='left') + { + X=Game.mouseX-width-24; + Y=Game.mouseY-height/2-8; + X=Math.max(0,Math.min(Game.windowW-width-16,X)); + Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); + } + else if (this.origin=='this' && this.from) + { + var rect=this.from.getBounds(); + X=(rect.left+rect.right)/2-width/2-8; + Y=(rect.top)-this.tt.clientHeight-48; + X=Math.max(0,Math.min(Game.windowW-width-16,X)); + //Y=Math.max(0,Math.min(Game.windowH-this.tt.clientHeight-64,Y)); + if (Y<0) Y=(rect.bottom-24); + if (Y+height+40>Game.windowH) + { + X=rect.right+8; + Y=rect.top+(rect.bottom-rect.top)/2-height/2-38; + Y=Math.max(0,Math.min(Game.windowH-height-19,Y)); + } + } + else + { + X=Game.mouseX-width/2-8; + Y=Game.mouseY-height-32; + X=Math.max(0,Math.min(Game.windowW-width-16,X)); + Y=Math.max(0,Math.min(Game.windowH-height-64,Y)); + } + } + this.tta.style.left=X+'px'; + this.tta.style.right='auto'; + this.tta.style.top=Y+'px'; + this.tta.style.bottom='auto'; + if (this.shouldHide) {this.hide();this.shouldHide=0;} + else if (Game.drawT%10==0 && typeof(this.text)==='function') + { + var text=this.text(); + if (text=='') this.tta.style.opacity='0'; + else + { + this.tt.innerHTML=unescape(text); + this.tta.style.opacity='1'; + } + } + } + Game.tooltip.hide=function() + { + if (this.tta) this.tta.style.display='none'; + this.dynamic=0; + this.on=0; + } + Game.getTooltip=function(text,origin,isCrate) + { + origin=(origin?origin:'middle'); + if (isCrate) return 'onMouseOut="Game.setOnCrate(0);Game.tooltip.shouldHide=1;" onMouseOver="if (!Game.mouseDown) {Game.setOnCrate(this);Game.tooltip.dynamic=0;Game.tooltip.draw(this,\''+escape(text)+'\',\''+origin+'\');Game.tooltip.wobble();}"'; + else return 'onMouseOut="Game.tooltip.shouldHide=1;" onMouseOver="Game.tooltip.dynamic=0;Game.tooltip.draw(this,\''+escape(text)+'\',\''+origin+'\');Game.tooltip.wobble();"'; + } + Game.getDynamicTooltip=function(func,origin,isCrate) + { + origin=(origin?origin:'middle'); + if (isCrate) return 'onMouseOut="Game.setOnCrate(0);Game.tooltip.shouldHide=1;" onMouseOver="if (!Game.mouseDown) {Game.setOnCrate(this);Game.tooltip.dynamic=1;Game.tooltip.draw(this,'+'function(){return '+func+'();}'+',\''+origin+'\');Game.tooltip.wobble();}"'; + return 'onMouseOut="Game.tooltip.shouldHide=1;" onMouseOver="Game.tooltip.dynamic=1;Game.tooltip.draw(this,'+'function(){return '+func+'();}'+',\''+origin+'\');Game.tooltip.wobble();"'; + } + Game.attachTooltip=function(el,func,origin) + { + if (typeof func==='string') + { + var str=func; + func=function(str){return function(){return str;};}(str); + } + origin=(origin?origin:'middle'); + AddEvent(el,'mouseover',function(func,el,origin){return function(){Game.tooltip.dynamic=1;Game.tooltip.draw(el,func,origin);};}(func,el,origin)); + AddEvent(el,'mouseout',function(){return function(){Game.tooltip.shouldHide=1;};}()); + } + Game.tooltip.wobble=function() + { + //disabled because this effect doesn't look good with the slight slowdown it might or might not be causing. + if (false) + { + this.tt.className='framed'; + void this.tt.offsetWidth; + this.tt.className='framed wobbling'; + } + } + + + /*===================================================================================== + UPDATE CHECKER + =======================================================================================*/ + Game.CheckUpdates=function() + { + if (!App) ajax('server.php?q=checkupdate',Game.CheckUpdatesResponse); + } + Game.CheckUpdatesResponse=function(response) + { + var r=response.split('|'); + var str=''; + if (r[0]=='alert') + { + if (r[1]) str=r[1]; + } + else if (parseFloat(r[0])>Game.version) + { + str=''+loc("New version available: v. %1!",r[0])+''; + if (r[1]) str+='
'+loc("Update note: \"%1\"",r[1])+''; + str+='
'+loc("Refresh to get it!")+''; + } + if (str!='') + { + l('alert').innerHTML=str; + l('alert').style.display='block'; + } + } + + /*===================================================================================== + DATA GRABBER + =======================================================================================*/ + + Game.externalDataLoaded=false; + + Game.grandmaNames=['Granny','Gusher','Ethel','Edna','Doris','Maud','Hilda','Gladys','Michelle','Michele','Phyllis','Millicent','Muriel','Myrtle','Mildred','Mavis','Helen','Gloria','Sheila','Betty','Gertrude','Agatha','Beryl','Agnes','Pearl','Precious','Ruby','Vera','Bonnie','Ada','Bunny','Cookie','Darling','Gaga','GamGam','Memaw','Mimsy','Peanut','Nana','Nan','Tootsie','Warty','Stinky','Heinous']; + Game.customGrandmaNames=[]; + Game.heralds=0; + + Game.GrabData=function() + { + if (!App) ajax('/patreon/grab.php',Game.GrabDataResponse); + else App.grabData(function(res){ + Game.heralds=res?(res.playersN||1):1; + Game.heralds=Math.max(0,Math.min(100,Math.ceil(Game.heralds/100*100)/100)); + l('heraldsAmount').textContent=Math.floor(Game.heralds); + }); + } + Game.GrabDataResponse=function(response) + { + /* + response should be formatted as + {"herald":3,"grandma":"a|b|c|...} + */ + var r={}; + try{ + r=JSON.parse(response); + if (typeof r['herald']!=='undefined') + { + Game.heralds=parseInt(r['herald']); + Game.heralds=Math.max(0,Math.min(100,Game.heralds)); + } + if (typeof r['grandma']!=='undefined' && r['grandma']!='') + { + Game.customGrandmaNames=r['grandma'].split('|'); + Game.customGrandmaNames=Game.customGrandmaNames.filter(function(el){return el!='';}); + } + + l('heraldsAmount').textContent=Math.floor(Game.heralds); + Game.externalDataLoaded=true; + }catch(e){} + } + + + if (!App) + { + Game.attachTooltip(l('httpsSwitch'),'
'+loc("You are currently playing Cookie Clicker on the %1 protocol.
The %2 version uses a different save slot than this one.
Click this lock to reload the page and switch to the %2 version!",[(Game.https?'HTTPS':'HTTP'),(Game.https?'HTTP':'HTTPS')])+'
','this'); + AddEvent(l('httpsSwitch'),'click',function(){ + PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); + if (location.protocol=='https:') location.href='http:'+window.location.href.substring(window.location.protocol.length); + else if (location.protocol=='http:') location.href='https:'+window.location.href.substring(window.location.protocol.length); + }); + + AddEvent(l('changeLanguage'),'click',function() + { + Game.showLangSelection(); + }); + + Game.attachTooltip(l('topbarOrteil'),'
Back to Orteil\'s subdomain!
Lots of other games in there!
'+tinyIcon([17,5],'display:block;margin:-12px auto;'),'this'); + Game.attachTooltip(l('topbarDashnet'),'
Back to our homepage!
','this'); + Game.attachTooltip(l('topbarTwitter'),'
Orteil\'s twitter, which frequently features game updates.
','this'); + Game.attachTooltip(l('topbarTumblr'),'
Orteil\'s tumblr, which frequently features game updates.
','this'); + Game.attachTooltip(l('topbarDiscord'),'
Our official discord server.
You can share tips and questions about Cookie Clicker and all our other games!
','this'); + Game.attachTooltip(l('topbarPatreon'),'
Support us on Patreon and help us keep updating Cookie Clicker!
There\'s neat rewards for patrons too!
','this'); + Game.attachTooltip(l('topbarMerch'),'
Cookie Clicker shirts, hoodies and stickers!
','this'); + Game.attachTooltip(l('topbarMobileCC'),'
Play Cookie Clicker on your phone!
(Android only; iOS version will be released later)
','this'); + Game.attachTooltip(l('topbarSteamCC'),'
Get Cookie Clicker on Steam!
Featuring music by C418.
','this'); + Game.attachTooltip(l('topbarRandomgen'),'
A thing we made that lets you write random generators.
','this'); + Game.attachTooltip(l('topbarIGM'),'
A thing we made that lets you create your own idle games using a simple scripting language.
','this'); + l('changeLanguage').innerHTML=loc("Change language"); + l('links').childNodes[0].nodeValue=loc("Other versions"); + //l('linkVersionBeta').innerHTML=loc("Beta"); + } + + Game.attachTooltip(l('heralds'),function(){ + var str=''; + + if (!App && !Game.externalDataLoaded) str+=loc("Heralds couldn't be loaded. There may be an issue with our servers, or you are playing the game locally."); + else + { + if (!App && Game.heralds==0) str+=loc("There are no heralds at the moment. Please consider donating to our Patreon!"); + else + { + str+=''+loc("%1 herald",Game.heralds)+' '+loc("selflessly inspiring a boost in production for everyone, resulting in %1.",'
'+loc("+%1% cookies per second",Game.heralds)+'
'); + str+='
'; + if (Game.ascensionMode==1) str+=loc("You are in a Born again run, and are not currently benefiting from heralds."); + else if (Game.Has('Heralds')) str+=loc("You own the Heralds upgrade, and therefore benefit from the production boost."); + else str+=loc("To benefit from the herald bonus, you need a special upgrade you do not yet own. You will permanently unlock it later in the game."); + } + } + str+='
'+(!App?loc("Heralds are people who have donated to our highest Patreon tier, and are limited to 100.
Each herald gives everyone +1% CpS.
Heralds benefit everyone playing the game, regardless of whether you donated."):loc("Every %1 current players on Steam generates 1 herald, up to %2 heralds.
Each herald gives everyone +1% CpS.",[100,100]))+'
'+tinyIcon([21,29]); + + str+='
'; + + return '

'+loc("Heralds")+'

'+str+'
'; + },'this'); + l('heraldsAmount').textContent='?'; + l('heralds').style.display='inline-block'; + if (App) + { + l('heralds').style.paddingTop='4px'; + l('heralds').style.position='absolute'; + l('heralds').style.top='0px'; + l('heralds').style.right='0px'; + l('heralds').style.width='28px'; + l('heralds').style.textAlign='center'; + l('leftBeam').appendChild(l('heralds')); + + l('buffs').style.top='16px'; + } + + Game.GrabData(); + + + Game.useLocalStorage=1; + //window.localStorage.clear();//won't switch back to cookie-based if there is localStorage info + + /*===================================================================================== + SAVE + =======================================================================================*/ + Game.ExportSave=function() + { + //if (App) return false; + Game.prefs.showBackupWarning=0; + Game.Prompt('

'+loc("Export save")+'

'+loc("This is your save code.
Copy it and keep it somewhere safe!")+'
',[loc("All done!")]);//prompt('Copy this text and keep it somewhere safe!',Game.WriteSave(1)); + l('textareaPrompt').focus();l('textareaPrompt').select(); + } + Game.ImportSave=function(def) + { + //if (App) return false; + Game.Prompt('

'+loc("Import save")+'

'+loc("Please paste in the code that was given to you on save export.")+'
',[[loc("Load"),'if (l(\'textareaPrompt\').value.length==0){return false;}if (Game.ImportSaveCode(l(\'textareaPrompt\').value)){Game.ClosePrompt();}else{l(\'importError\').innerHTML=\'(\'+loc("Error importing save")+\')\';}'],loc("Nevermind")]);//prompt('Please paste in the text that was given to you on save export.',''); + l('textareaPrompt').focus(); + } + Game.ImportSaveCode=function(save) + { + var out=false; + if (save && save!='') out=Game.LoadSave(save); + if (out && App && App.onImportSave) App.onImportSave(out,save); + return out; + } + + Game.FileSave=function() + { + if (App) return false; + Game.prefs.showBackupWarning=0; + var filename=Game.bakeryName.replace(/[^a-zA-Z0-9]+/g,'')+'Bakery'; + var text=Game.WriteSave(1); + var blob=new Blob([text],{type:'text/plain;charset=utf-8'}); + saveAs(blob,filename+'.txt'); + } + Game.FileLoad=function(e) + { + if (App) return false; + if (e.target.files.length==0) return false; + var file=e.target.files[0]; + var reader=new FileReader(); + reader.onload=function(e) + { + Game.ImportSaveCode(e.target.result); + } + reader.readAsText(file); + } + + + Game.toReload=false; + Game.toSave=false; + Game.toQuit=false; + Game.isSaving=false;//true while we're saving, to block some behavior; when in App mode saving may be asynchronous + Game.lastSaveData=''; + Game.WriteSave=function(type) + { + Game.toSave=false; + //type: none is default, 1=return string only, 2=return uncompressed string, 3=return uncompressed, commented string + Game.lastDate=parseInt(Game.time); + var str=''; + if (type==3) str+='\nGame version\n'; + str+=Game.version+'|'; + str+='|';//just in case we need some more stuff here + if (type==3) str+='\n\nRun details'; + str+=//save stats + (type==3?'\n run start date : ':'')+parseInt(Game.startDate)+';'+ + (type==3?'\n legacy start date : ':'')+parseInt(Game.fullDate)+';'+ + (type==3?'\n date when we last opened the game : ':'')+parseInt(Game.lastDate)+';'+ + (type==3?'\n bakery name : ':'')+(Game.bakeryName)+';'+ + (type==3?'\n seed : ':'')+(Game.seed)+';'+ + (type==3?'\n appearance : ':'')+(Game.YouCustomizer.save())+ + '|'; + if (type==3) str+='\n\nPacked preferences bitfield\n '; + var str2=//prefs + (Game.prefs.particles?'1':'0')+ + (Game.prefs.numbers?'1':'0')+ + (Game.prefs.autosave?'1':'0')+ + (Game.prefs.autoupdate?'1':'0')+ + (Game.prefs.milk?'1':'0')+ + (Game.prefs.fancy?'1':'0')+ + (Game.prefs.warn?'1':'0')+ + (Game.prefs.cursors?'1':'0')+ + (Game.prefs.focus?'1':'0')+ + (Game.prefs.format?'1':'0')+ + (Game.prefs.notifs?'1':'0')+ + (Game.prefs.wobbly?'1':'0')+ + (Game.prefs.monospace?'1':'0')+ + (Game.prefs.filters?'1':'0')+ + (Game.prefs.cookiesound?'1':'0')+ + (Game.prefs.crates?'1':'0')+ + (Game.prefs.showBackupWarning?'1':'0')+ + (Game.prefs.extraButtons?'1':'0')+ + (Game.prefs.askLumps?'1':'0')+ + (Game.prefs.customGrandmas?'1':'0')+ + (Game.prefs.timeout?'1':'0')+ + (Game.prefs.cloudSave?'1':'0')+ + (Game.prefs.bgMusic?'1':'0')+ + (Game.prefs.notScary?'1':'0')+ + (Game.prefs.fullscreen?'1':'0')+ + (Game.prefs.screenreader?'1':'0')+ + (Game.prefs.discordPresence?'1':'0')+ + ''; + str2=pack3(str2); + str+=str2+'|'; + if (type==3) str+='\n\nMisc game data'; + str+= + (type==3?'\n cookies : ':'')+parseFloat(Game.cookies).toString()+';'+ + (type==3?'\n total cookies earned : ':'')+parseFloat(Game.cookiesEarned).toString()+';'+ + (type==3?'\n cookie clicks : ':'')+parseInt(Math.floor(Game.cookieClicks))+';'+ + (type==3?'\n golden cookie clicks : ':'')+parseInt(Math.floor(Game.goldenClicks))+';'+ + (type==3?'\n cookies made by clicking : ':'')+parseFloat(Game.handmadeCookies).toString()+';'+ + (type==3?'\n golden cookies missed : ':'')+parseInt(Math.floor(Game.missedGoldenClicks))+';'+ + (type==3?'\n background type : ':'')+parseInt(Math.floor(Game.bgType))+';'+ + (type==3?'\n milk type : ':'')+parseInt(Math.floor(Game.milkType))+';'+ + (type==3?'\n cookies from past runs : ':'')+parseFloat(Game.cookiesReset).toString()+';'+ + (type==3?'\n elder wrath : ':'')+parseInt(Math.floor(Game.elderWrath))+';'+ + (type==3?'\n pledges : ':'')+parseInt(Math.floor(Game.pledges))+';'+ + (type==3?'\n pledge time left : ':'')+parseInt(Math.floor(Game.pledgeT))+';'+ + (type==3?'\n currently researching : ':'')+parseInt(Math.floor(Game.nextResearch))+';'+ + (type==3?'\n research time left : ':'')+parseInt(Math.floor(Game.researchT))+';'+ + (type==3?'\n ascensions : ':'')+parseInt(Math.floor(Game.resets))+';'+ + (type==3?'\n golden cookie clicks (this run) : ':'')+parseInt(Math.floor(Game.goldenClicksLocal))+';'+ + (type==3?'\n cookies sucked by wrinklers : ':'')+parseFloat(Game.cookiesSucked).toString()+';'+ + (type==3?'\n wrinkles popped : ':'')+parseInt(Math.floor(Game.wrinklersPopped))+';'+ + (type==3?'\n santa level : ':'')+parseInt(Math.floor(Game.santaLevel))+';'+ + (type==3?'\n reindeer clicked : ':'')+parseInt(Math.floor(Game.reindeerClicked))+';'+ + (type==3?'\n season time left : ':'')+parseInt(Math.floor(Game.seasonT))+';'+ + (type==3?'\n season switcher uses : ':'')+parseInt(Math.floor(Game.seasonUses))+';'+ + (type==3?'\n current season : ':'')+(Game.season?Game.season:'')+';'; + var wrinklers=Game.SaveWrinklers(); + str+= + (type==3?'\n amount of cookies contained in wrinklers : ':'')+parseFloat(Math.floor(wrinklers.amount))+';'+ + (type==3?'\n number of wrinklers : ':'')+parseInt(Math.floor(wrinklers.number))+';'+ + (type==3?'\n prestige level : ':'')+parseFloat(Game.prestige).toString()+';'+ + (type==3?'\n heavenly chips : ':'')+parseFloat(Game.heavenlyChips).toString()+';'+ + (type==3?'\n heavenly chips spent : ':'')+parseFloat(Game.heavenlyChipsSpent).toString()+';'+ + (type==3?'\n heavenly cookies : ':'')+parseFloat(Game.heavenlyCookies).toString()+';'+ + (type==3?'\n ascension mode : ':'')+parseInt(Math.floor(Game.ascensionMode))+';'+ + (type==3?'\n permanent upgrades : ':'')+parseInt(Math.floor(Game.permanentUpgrades[0]))+';'+parseInt(Math.floor(Game.permanentUpgrades[1]))+';'+parseInt(Math.floor(Game.permanentUpgrades[2]))+';'+parseInt(Math.floor(Game.permanentUpgrades[3]))+';'+parseInt(Math.floor(Game.permanentUpgrades[4]))+';'+ + (type==3?'\n dragon level : ':'')+parseInt(Math.floor(Game.dragonLevel))+';'+ + (type==3?'\n dragon aura : ':'')+parseInt(Math.floor(Game.dragonAura))+';'+ + (type==3?'\n dragon aura 2 : ':'')+parseInt(Math.floor(Game.dragonAura2))+';'+ + (type==3?'\n chime type : ':'')+parseInt(Math.floor(Game.chimeType))+';'+ + (type==3?'\n volume : ':'')+parseInt(Math.floor(Game.volume))+';'+ + (type==3?'\n number of shiny wrinklers : ':'')+parseInt(Math.floor(wrinklers.shinies))+';'+ + (type==3?'\n amount of cookies contained in shiny wrinklers : ':'')+parseFloat(Math.floor(wrinklers.amountShinies))+';'+ + (type==3?'\n current amount of sugar lumps : ':'')+parseFloat(Math.floor(Game.lumps))+';'+ + (type==3?'\n total amount of sugar lumps made : ':'')+parseFloat(Math.floor(Game.lumpsTotal))+';'+ + (type==3?'\n time when current sugar lump started : ':'')+parseFloat(Math.floor(Game.lumpT))+';'+ + (type==3?'\n time when last refilled a minigame with a sugar lump : ':'')+parseFloat(Math.floor(Game.lumpRefill))+';'+ + (type==3?'\n sugar lump type : ':'')+parseInt(Math.floor(Game.lumpCurrentType))+';'+ + (type==3?'\n vault : ':'')+Game.vault.join(',')+';'+ + (type==3?'\n heralds : ':'')+parseInt(Game.heralds)+';'+ + (type==3?'\n golden cookie fortune : ':'')+parseInt(Game.fortuneGC)+';'+ + (type==3?'\n CpS fortune : ':'')+parseInt(Game.fortuneCPS)+';'+ + (type==3?'\n highest raw CpS : ':'')+parseFloat(Game.cookiesPsRawHighest)+';'+ + (type==3?'\n music volume : ':'')+parseInt(Math.floor(Game.volumeMusic))+';'+ + (type==3?'\n cookies sent : ':'')+parseInt(Math.floor(Game.cookiesSent))+';'+ + (type==3?'\n cookies received : ':'')+parseInt(Math.floor(Game.cookiesReceived))+';'+ + + '|';//cookies and lots of other stuff + + if (type==3) str+='\n\nBuildings : amount, bought, cookies produced, level, minigame data'; + for (var i in Game.Objects)//buildings + { + var me=Game.Objects[i]; + if (type==3) str+='\n '+me.name+' : '; + if (me.vanilla) + { + str+=me.amount+','+me.bought+','+parseFloat(Math.floor(me.totalCookies))+','+parseInt(me.level); + if (Game.isMinigameReady(me)) str+=','+me.minigame.save(); else str+=','+(me.minigameSave||''); + str+=','+(me.muted?'1':'0'); + str+=','+me.highest; + str+=';'; + } + } + str+='|'; + if (type==3) str+='\n\nPacked upgrades bitfield (unlocked and bought)\n '; + var toCompress=[]; + for (var i in Game.UpgradesById)//upgrades + { + var me=Game.UpgradesById[i]; + if (me.vanilla) toCompress.push(Math.min(me.unlocked,1),Math.min(me.bought,1)); + }; + + toCompress=pack3(toCompress.join(''));//toCompress=pack(toCompress);//CompressLargeBin(toCompress); + + str+=toCompress; + str+='|'; + if (type==3) str+='\n\nPacked achievements bitfield (won)\n '; + var toCompress=[]; + for (var i in Game.AchievementsById)//achievements + { + var me=Game.AchievementsById[i]; + if (me.vanilla) toCompress.push(Math.min(me.won)); + } + toCompress=pack3(toCompress.join(''));//toCompress=pack(toCompress);//CompressLargeBin(toCompress); + str+=toCompress; + + str+='|'; + if (type==3) str+='\n\nBuffs : type, maxTime, time, arg1, arg2, arg3'; + for (var i in Game.buffs) + { + var me=Game.buffs[i]; + if (me.type) + { + if (type==3) str+='\n '+me.type.name+' : '; + if (me.type.vanilla) + { + str+=me.type.id+','+me.maxTime+','+me.time; + if (typeof me.arg1!=='undefined') str+=','+parseFloat(me.arg1); + if (typeof me.arg2!=='undefined') str+=','+parseFloat(me.arg2); + if (typeof me.arg3!=='undefined') str+=','+parseFloat(me.arg3); + str+=';'; + } + } + } + + + if (type==3) str+='\n\nCustom :\n'; + + str+='|'; + str+=Game.saveModData(); + + Game.lastSaveData=str; + + if (type==2 || type==3) + { + return str; + } + else if (type==1) + { + str=escape(utf8_to_b64(str)+'!END!'); + return str; + } + else + { + if (Game.useLocalStorage) + { + //so we used to save the game using browser cookies, which was just really neat considering the game's name + //we're using localstorage now, which is more efficient but not as cool + //a moment of silence for our fallen puns + str=utf8_to_b64(str)+'!END!'; + if (str.length<10) + { + Game.Notify('Saving failed!','Purchasing an upgrade and saving again might fix this.
This really shouldn\'t happen; please notify Orteil on his tumblr.'); + } + else + { + str=escape(str); + localStorageSet(Game.SaveTo,str);//aaand save + if (App) App.save(str); + if (!localStorageGet(Game.SaveTo)) + { + Game.Notify(loc("Error while saving"),loc("Export your save instead!")); + } + else if (document.hasFocus()) + { + Game.Notify(loc("Game saved"),'','',1,1); + } + } + } + else//legacy system + { + //that's right + //we're using cookies + //yeah I went there + var now=new Date();//we storin dis for 5 years, people + now.setFullYear(now.getFullYear()+5);//mmh stale cookies + str=utf8_to_b64(str)+'!END!'; + Game.saveData=escape(str); + str=Game.SaveTo+'='+escape(str)+'; expires='+now.toUTCString()+';'; + document.cookie=str;//aaand save + if (App) App.save(str); + if (document.cookie.indexOf(Game.SaveTo)<0) + { + Game.Notify(loc("Error while saving"),loc("Export your save instead!"),'',0,1); + } + else if (document.hasFocus()) + { + Game.Notify(loc("Game saved"),'','',1,1); + } + } + } + } + + /*===================================================================================== + LOAD + =======================================================================================*/ + Game.salvageSave=function() + { + //for when Cookie Clicker won't load and you need your save + console.log('==================================================='); + console.log('This is your save data. Copypaste it (without quotation marks) into another version using the "Import save" feature.'); + console.log(localStorageGet(Game.SaveTo)); + } + Game.LoadSave=function(data,ignoreVersionIssues) + { + var str=''; + if (typeof data!=='undefined') str=unescape(data); + else + { + if (App) + { + App.getMostRecentSave(function(data){Game.LoadSave(data,true);}); + return false; + } + if (Game.useLocalStorage) + { + var local=localStorageGet(Game.SaveTo); + if (!local)//no localstorage save found? let's get the cookie one last time + { + if (document.cookie.indexOf(Game.SaveTo)>=0) + { + str=unescape(document.cookie.split(Game.SaveTo+'=')[1]); + document.cookie=Game.SaveTo+'=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; + } + else return false; + } + else + { + str=unescape(local); + } + } + else//legacy system + { + if (document.cookie.indexOf(Game.SaveTo)>=0) str=unescape(document.cookie.split(Game.SaveTo+'=')[1]);//get cookie here + else return false; + } + } + if (str!='') + { + var version=0; + var oldstr=str.split('|'); + if (oldstr[0].length<1) return false; + else + { + str=str.split('!END!')[0]; + str=b64_to_utf8(str); + } + if (str=='') return false; + else + { + var spl=''; + str=str.split('|'); + version=parseFloat(str[0]); + Game.loadedFromVersion=version; + + if (isNaN(version) || str.length<5) + { + Game.Notify(loc("Error importing save"),loc("Oops, looks like the import string is all wrong!"),'',6,1); + return false; + } + if (version>=1 && version>Game.version) + { + if (ignoreVersionIssues) Game.Notify('Retrieving save from a future version.','That\'s...odd.','',0,1); + else + { + Game.Notify(loc("Error importing save"),loc("You are attempting to load a save from a future version (v. %1; you are using v. %2).",[version,Game.version]),'',6,1); + return false; + } + } + if (version>=1) + { + Game.T=0; + + spl=str[2].split(';');//save stats + Game.startDate=parseInt(spl[0]); + Game.fullDate=parseInt(spl[1]); + Game.lastDate=parseInt(spl[2]); + var bakeryName=(spl[3]?spl[3]:Game.GetBakeryName()); + Game.seed=spl[4]?spl[4]:Game.makeSeed(); + Game.YouCustomizer.load(spl[5]||0); + //prefs + if (version<1.0503) spl=str[3].split(''); + else if (version<2.0046) spl=unpack2(str[3]).split(''); + else spl=(str[3]).split(''); + Game.prefs.particles=parseInt(spl[0]); + Game.prefs.numbers=parseInt(spl[1]); + Game.prefs.autosave=parseInt(spl[2]); + Game.prefs.autoupdate=spl[3]?parseInt(spl[3]):1; + Game.prefs.milk=spl[4]?parseInt(spl[4]):1; + Game.prefs.fancy=parseInt(spl[5]);if (Game.prefs.fancy) Game.removeClass('noFancy'); else if (!Game.prefs.fancy) Game.addClass('noFancy'); + Game.prefs.warn=spl[6]?parseInt(spl[6]):0; + Game.prefs.cursors=spl[7]?parseInt(spl[7]):0; + Game.prefs.focus=spl[8]?parseInt(spl[8]):0; + Game.prefs.format=spl[9]?parseInt(spl[9]):0; + Game.prefs.notifs=spl[10]?parseInt(spl[10]):0; + Game.prefs.wobbly=spl[11]?parseInt(spl[11]):0; + Game.prefs.monospace=spl[12]?parseInt(spl[12]):0; + Game.prefs.filters=spl[13]?parseInt(spl[13]):1;if (Game.prefs.filters) Game.removeClass('noFilters'); else if (!Game.prefs.filters) Game.addClass('noFilters'); + Game.prefs.cookiesound=spl[14]?parseInt(spl[14]):1; + Game.prefs.crates=spl[15]?parseInt(spl[15]):0; + Game.prefs.showBackupWarning=spl[16]?parseInt(spl[16]):1; + Game.prefs.extraButtons=spl[17]?parseInt(spl[17]):1;if (!Game.prefs.extraButtons) Game.removeClass('extraButtons'); else if (Game.prefs.extraButtons) Game.addClass('extraButtons'); + Game.prefs.askLumps=spl[18]?parseInt(spl[18]):0; + Game.prefs.customGrandmas=spl[19]?parseInt(spl[19]):1; + Game.prefs.timeout=spl[20]?parseInt(spl[20]):0; + Game.prefs.cloudSave=spl[21]?parseInt(spl[21]):1; + Game.prefs.bgMusic=spl[22]?parseInt(spl[22]):1; + Game.prefs.notScary=spl[23]?parseInt(spl[23]):0; + Game.prefs.fullscreen=spl[24]?parseInt(spl[24]):0;if (App) App.setFullscreen(Game.prefs.fullscreen); + Game.prefs.screenreader=spl[25]?parseInt(spl[25]):0; + Game.prefs.discordPresence=spl[26]?parseInt(spl[26]):1; + BeautifyAll(); + spl=str[4].split(';');//cookies and lots of other stuff + Game.cookies=parseFloat(spl[0]); + Game.cookiesEarned=parseFloat(spl[1]); + Game.cookieClicks=spl[2]?parseInt(spl[2]):0; + Game.goldenClicks=spl[3]?parseInt(spl[3]):0; + Game.handmadeCookies=spl[4]?parseFloat(spl[4]):0; + Game.missedGoldenClicks=spl[5]?parseInt(spl[5]):0; + Game.bgType=spl[6]?parseInt(spl[6]):0; + Game.milkType=spl[7]?parseInt(spl[7]):0; + Game.cookiesReset=spl[8]?parseFloat(spl[8]):0; + Game.elderWrath=spl[9]?parseInt(spl[9]):0; + Game.pledges=spl[10]?parseInt(spl[10]):0; + Game.pledgeT=spl[11]?parseInt(spl[11]):0; + Game.nextResearch=spl[12]?parseInt(spl[12]):0; + Game.researchT=spl[13]?parseInt(spl[13]):0; + Game.resets=spl[14]?parseInt(spl[14]):0; + Game.goldenClicksLocal=spl[15]?parseInt(spl[15]):0; + Game.cookiesSucked=spl[16]?parseFloat(spl[16]):0; + Game.wrinklersPopped=spl[17]?parseInt(spl[17]):0; + Game.santaLevel=spl[18]?parseInt(spl[18]):0; + Game.reindeerClicked=spl[19]?parseInt(spl[19]):0; + Game.seasonT=spl[20]?parseInt(spl[20]):0; + Game.seasonUses=spl[21]?parseInt(spl[21]):0; + Game.season=spl[22]?spl[22]:Game.baseSeason; + var wrinklers={amount:spl[23]?parseFloat(spl[23]):0,number:spl[24]?parseInt(spl[24]):0}; + Game.prestige=spl[25]?parseFloat(spl[25]):0; + Game.heavenlyChips=spl[26]?parseFloat(spl[26]):0; + Game.heavenlyChipsSpent=spl[27]?parseFloat(spl[27]):0; + Game.heavenlyCookies=spl[28]?parseFloat(spl[28]):0; + Game.ascensionMode=spl[29]?parseInt(spl[29]):0; + Game.permanentUpgrades[0]=spl[30]?parseInt(spl[30]):-1;Game.permanentUpgrades[1]=spl[31]?parseInt(spl[31]):-1;Game.permanentUpgrades[2]=spl[32]?parseInt(spl[32]):-1;Game.permanentUpgrades[3]=spl[33]?parseInt(spl[33]):-1;Game.permanentUpgrades[4]=spl[34]?parseInt(spl[34]):-1; + //if (version<1.05) {Game.heavenlyChipsEarned=Game.HowMuchPrestige(Game.cookiesReset);Game.heavenlyChips=Game.heavenlyChipsEarned;} + Game.dragonLevel=spl[35]?parseInt(spl[35]):0; + if (version<2.0041 && Game.dragonLevel==Game.dragonLevels.length-2) {Game.dragonLevel=Game.dragonLevels.length-1;} + Game.dragonAura=spl[36]?parseInt(spl[36]):0; + Game.dragonAura2=spl[37]?parseInt(spl[37]):0; + Game.chimeType=spl[38]?parseInt(spl[38]):0; + Game.volume=spl[39]?parseInt(spl[39]):75; + wrinklers.shinies=spl[40]?parseInt(spl[40]):0; + wrinklers.amountShinies=spl[41]?parseFloat(spl[41]):0; + Game.lumps=spl[42]?parseFloat(spl[42]):-1; + Game.lumpsTotal=spl[43]?parseFloat(spl[43]):-1; + Game.lumpT=spl[44]?parseInt(spl[44]):Date.now(); + Game.lumpRefill=spl[45]?parseInt(spl[45]):0; + if (version<2.022) Game.lumpRefill=Game.fps*60; + Game.lumpCurrentType=spl[46]?parseInt(spl[46]):0; + Game.vault=spl[47]?spl[47].split(','):[]; + for (var i in Game.vault){Game.vault[i]=parseInt(Game.vault[i]);} + var actualHeralds=Game.heralds;//we store the actual amount of heralds to restore it later; here we used the amount present in the save to compute offline CpS + Game.heralds=spl[48]?parseFloat(spl[48]):Game.heralds; + Game.fortuneGC=spl[49]?parseInt(spl[49]):0; + Game.fortuneCPS=spl[50]?parseInt(spl[50]):0; + Game.cookiesPsRawHighest=spl[51]?parseFloat(spl[51]):0; + Game.volumeMusic=spl[52]?parseInt(spl[52]):50; + Game.cookiesSent=spl[53]?parseInt(spl[53]):0; + Game.cookiesReceived=spl[54]?parseInt(spl[54]):0; + + spl=str[5].split(';');//buildings + Game.BuildingsOwned=0; + for (var i in Game.ObjectsById) + { + var me=Game.ObjectsById[i]; + me.switchMinigame(false); + me.pics=[]; + if (spl[i]) + { + var mestr=spl[i].toString().split(','); + me.amount=parseInt(mestr[0]);me.bought=parseInt(mestr[1]);me.totalCookies=parseFloat(mestr[2]);me.level=parseInt(mestr[3]||0);me.highest=(version>=2.024?parseInt(mestr[6]):me.amount); + if (me.minigame && me.minigameLoaded && me.minigame.reset) {me.minigame.reset(true);me.minigame.load(mestr[4]||'');} else me.minigameSave=(mestr[4]||0); + me.muted=parseInt(mestr[5])||0; + Game.BuildingsOwned+=me.amount; + if (version<2.003) me.level=0; + } + else + { + me.amount=0;me.unlocked=0;me.bought=0;me.highest=0;me.totalCookies=0;me.level=0; + } + } + + Game.setVolumeMusic(Game.volumeMusic); + + Game.LoadMinigames(); + + if (version<1.035)//old non-binary algorithm + { + spl=str[6].split(';');//upgrades + Game.UpgradesOwned=0; + for (var i in Game.UpgradesById) + { + var me=Game.UpgradesById[i]; + if (spl[i]) + { + var mestr=spl[i].split(','); + me.unlocked=parseInt(mestr[0]);me.bought=parseInt(mestr[1]); + if (me.bought && Game.CountsAsUpgradeOwned(me.pool)) Game.UpgradesOwned++; + } + else + { + me.unlocked=0;me.bought=0; + } + } + if (str[7]) spl=str[7].split(';'); else spl=[];//achievements + Game.AchievementsOwned=0; + for (var i in Game.AchievementsById) + { + var me=Game.AchievementsById[i]; + if (spl[i]) + { + var mestr=spl[i].split(','); + me.won=parseInt(mestr[0]); + } + else + { + me.won=0; + } + if (me.won && Game.CountsAsAchievementOwned(me.pool)) Game.AchievementsOwned++; + } + } + else if (version<1.0502)//old awful packing system + { + if (str[6]) spl=str[6]; else spl=[];//upgrades + if (version<1.05) spl=UncompressLargeBin(spl); + else spl=unpack(spl); + Game.UpgradesOwned=0; + for (var i in Game.UpgradesById) + { + var me=Game.UpgradesById[i]; + if (spl[i*2]) + { + var mestr=[spl[i*2],spl[i*2+1]]; + me.unlocked=parseInt(mestr[0]);me.bought=parseInt(mestr[1]); + if (me.bought && Game.CountsAsUpgradeOwned(me.pool)) Game.UpgradesOwned++; + } + else + { + me.unlocked=0;me.bought=0; + } + } + if (str[7]) spl=str[7]; else spl=[];//achievements + if (version<1.05) spl=UncompressLargeBin(spl); + else spl=unpack(spl); + Game.AchievementsOwned=0; + for (var i in Game.AchievementsById) + { + var me=Game.AchievementsById[i]; + if (spl[i]) + { + var mestr=[spl[i]]; + me.won=parseInt(mestr[0]); + } + else + { + me.won=0; + } + if (me.won && Game.CountsAsAchievementOwned(me.pool)) Game.AchievementsOwned++; + } + } + else + { + if (str[6]) spl=str[6]; else spl=[];//upgrades + if (version<2.0046) spl=unpack2(spl).split(''); + else spl=(spl).split(''); + Game.UpgradesOwned=0; + for (var i in Game.UpgradesById) + { + var me=Game.UpgradesById[i]; + if (spl[i*2]) + { + var mestr=[spl[i*2],spl[i*2+1]]; + me.unlocked=parseInt(mestr[0]);me.bought=parseInt(mestr[1]); + if (me.bought && Game.CountsAsUpgradeOwned(me.pool)) Game.UpgradesOwned++; + } + else + { + me.unlocked=0;me.bought=0; + } + } + if (str[7]) spl=str[7]; else spl=[];//achievements + if (version<2.0046) spl=unpack2(spl).split(''); + else spl=(spl).split(''); + Game.AchievementsOwned=0; + for (var i in Game.AchievementsById) + { + var me=Game.AchievementsById[i]; + if (spl[i]) + { + var mestr=[spl[i]]; + me.won=parseInt(mestr[0]); + } + else + { + me.won=0; + } + if (me.won && Game.CountsAsAchievementOwned(me.pool)) Game.AchievementsOwned++; + } + } + + Game.killBuffs(); + var buffsToLoad=[]; + spl=(str[8]||'').split(';');//buffs + for (var i in spl) + { + if (spl[i]) + { + var mestr=spl[i].toString().split(','); + buffsToLoad.push(mestr); + } + } + + spl=(str[9]||'').split(';');//mod data + + for (var i in spl) + { + if (spl[i]) + { + var data=spl[i].split(':'); + var modId=data[0]; + if (modId=='META') continue; + data.shift(); + data=Game.safeLoadString(data.join(':')); + Game.modSaveData[modId]=data; + } + } + + for (var i in Game.ObjectsById) + { + var me=Game.ObjectsById[i]; + if (me.buyFunction) me.buyFunction(); + me.refresh(); + if (me.id>0) + { + if (me.muted) me.mute(1); + } + } + + if (version<1.0503)//upgrades that used to be regular, but are now heavenly + { + var me=Game.Upgrades['Persistent memory'];me.unlocked=0;me.bought=0; + var me=Game.Upgrades['Season switcher'];me.unlocked=0;me.bought=0; + } + + if (Game.bgType==-1) Game.bgType=0; + if (Game.milkType==-1 || !Game.AllMilks[Game.milkType]) Game.milkType=0; + + + //advance timers + var framesElapsed=Math.ceil(((Date.now()-Game.lastDate)/1000)*Game.fps); + if (Game.pledgeT>0) Game.pledgeT=Math.max(Game.pledgeT-framesElapsed,1); + if (Game.seasonT>0) Game.seasonT=Math.max(Game.seasonT-framesElapsed,1); + if (Game.researchT>0) Game.researchT=Math.max(Game.researchT-framesElapsed,1); + + + Game.ResetWrinklers(); + Game.LoadWrinklers(wrinklers.amount,wrinklers.number,wrinklers.shinies,wrinklers.amountShinies); + + //recompute season trigger prices + if (Game.Has('Season switcher')) {for (var i in Game.seasons) {Game.Unlock(Game.seasons[i].trigger);}} + Game.computeSeasonPrices(); + + //recompute prestige + Game.prestige=Math.floor(Game.HowMuchPrestige(Game.cookiesReset)); + //if ((Game.heavenlyChips+Game.heavenlyChipsSpent)Beta patch
We\'ve tweaked some things and fixed some others, please check the update notes!
Of note : due to changes in prestige balancing, all your heavenly upgrades have been removed and your heavenly chips refunded; you\'ll be able to reallocate them next time you ascend.
Thank you again for beta-testing Cookie Clicker!
',[['Alright then!','Game.ClosePrompt();']]);},200); + } + if (version<=1.0466)//are we loading from the old live version? reset HCs + { + Game.heavenlyChips=Game.prestige; + Game.heavenlyChipsSpent=0; + } + + if (Game.ascensionMode!=1) + { + if (Game.Has('Starter kit')) Game.Objects['Cursor'].free=10; + if (Game.Has('Starter kitchen')) Game.Objects['Grandma'].free=5; + } + + Game.CalculateGains(); + + var timeOffline=(Date.now()-Game.lastDate)/1000; + + if (Math.random()<1/10000) Game.TOYS=1;//teehee! + if (Math.random()<1/10000) Game.WINKLERS=1;//squeak + + //compute cookies earned while the game was closed + if (Game.mobile || Game.Has('Perfect idling') || Game.Has('Twin Gates of Transcendence')) + { + if (Game.Has('Perfect idling')) + { + var maxTime=60*60*24*1000000000; + var percent=100; + } + else + { + var maxTime=60*60; + if (Game.Has('Belphegor')) maxTime*=2; + if (Game.Has('Mammon')) maxTime*=2; + if (Game.Has('Abaddon')) maxTime*=2; + if (Game.Has('Satan')) maxTime*=2; + if (Game.Has('Asmodeus')) maxTime*=2; + if (Game.Has('Beelzebub')) maxTime*=2; + if (Game.Has('Lucifer')) maxTime*=2; + + var percent=5; + if (Game.Has('Angels')) percent+=10; + if (Game.Has('Archangels')) percent+=10; + if (Game.Has('Virtues')) percent+=10; + if (Game.Has('Dominions')) percent+=10; + if (Game.Has('Cherubim')) percent+=10; + if (Game.Has('Seraphim')) percent+=10; + if (Game.Has('God')) percent+=10; + + if (Game.Has('Chimera')) {maxTime+=60*60*24*2;percent+=5;} + + if (Game.Has('Fern tea')) percent+=3; + if (Game.Has('Ichor syrup')) percent+=7; + if (Game.Has('Fortune #102')) percent+=1; + } + + var timeOfflineOptimal=Math.min(timeOffline,maxTime); + var timeOfflineReduced=Math.max(0,timeOffline-timeOfflineOptimal); + var amount=(timeOfflineOptimal+timeOfflineReduced*0.1)*Game.cookiesPs*(percent/100); + + if (amount>0) + { + Game.Notify(loc("Welcome back!"),loc("You earned %1 while you were away.",loc("%1 cookie",LBeautify(amount)))+(EN?('
('+Game.sayTime(timeOfflineOptimal*Game.fps,-1)+' at '+Math.floor(percent)+'% CpS'+(timeOfflineReduced?', plus '+Game.sayTime(timeOfflineReduced*Game.fps,-1)+' at '+(Math.floor(percent*10)/100)+'%':'')+'.)'):''),[Math.floor(Math.random()*16),11]); + Game.Earn(amount); + } + } + + //we load buffs after everything as we do not want them to interfer with offline CpS + for (var i in buffsToLoad) + { + var mestr=buffsToLoad[i]; + var type=Game.buffTypes[parseInt(mestr[0])]; + Game.gainBuff(type.name,parseFloat(mestr[1])/Game.fps,parseFloat(mestr[3]||0),parseFloat(mestr[4]||0),parseFloat(mestr[5]||0)).time=parseFloat(mestr[2]); + } + + + Game.loadLumps(timeOffline); + + Game.bakeryNameRefresh(); + + } + else//importing old version save + { + Game.Notify(loc("Error importing save"),loc("Sorry, you can't import saves from the classic version."),'',6,1); + return false; + } + + if (Game.prefs.screenreader) + { + Game.BuildStore(); + } + + Game.RebuildUpgrades(); + + Game.TickerAge=0; + Game.TickerEffect=0; + + Game.elderWrathD=0; + Game.recalculateGains=1; + Game.storeToRefresh=1; + Game.upgradesToRebuild=1; + + Game.buyBulk=1;Game.buyMode=1;Game.storeBulkButton(-1); + + + Game.specialTab=''; + Game.ToggleSpecialMenu(0); + + Game.killShimmers(); + + if (Game.T>Game.fps*5 && Game.ReincarnateTimer==0)//fade out of black and pop the cookie + { + Game.ReincarnateTimer=1; + Game.addClass('reincarnating'); + Game.BigCookieSize=0; + } + + + var prestigeUpgradesOwned=0; + for (var i in Game.Upgrades) + { + if (Game.Upgrades[i].bought && Game.Upgrades[i].pool=='prestige') prestigeUpgradesOwned++; + } + if (prestigeUpgradesOwned>=100) Game.Win('All the stars in heaven'); + + + if (versionValentine's season!
Love's in the air and cookies are just that much sweeter!"),[20,3],60*3); + else if (Game.season=='fools') Game.Notify(loc("Business Day!"),loc("It's Business season!
Don't panic! Things are gonna be looking a little more corporate for a few days."),[17,6],60*3); + else if (Game.season=='halloween') Game.Notify(loc("Halloween!"),loc("It's Halloween season!
Everything is just a little bit spookier!"),[13,8],60*3); + else if (Game.season=='christmas') Game.Notify(loc("Christmas time!"),loc("It's Christmas season!
Bring good cheer to all and you just may get cookies in your stockings!"),[12,10],60*3); + else if (Game.season=='easter') Game.Notify(loc("Easter!"),loc("It's Easter season!
Keep an eye out and you just might click a rabbit or two!"),[0,12],60*3); + } + + Game.heralds=actualHeralds; + + Game.Notify(loc("Game loaded"),'','',1,1); + + if (!App && Game.prefs.showBackupWarning==1) Game.showBackupWarning(); + + if (App) App.justLoadedSave(); + } + } + else return false; + return true; + } + + /*===================================================================================== + RESET + =======================================================================================*/ + Game.Reset=function(hard) + { + Game.T=0; + + if (hard) {Game.loadedFromVersion=Game.version;} + + var cookiesForfeited=Game.cookiesEarned; + if (!hard) + { + if (cookiesForfeited>=1000000) Game.Win('Sacrifice'); + if (cookiesForfeited>=1000000000) Game.Win('Oblivion'); + if (cookiesForfeited>=1000000000000) Game.Win('From scratch'); + if (cookiesForfeited>=1000000000000000) Game.Win('Nihilism'); + if (cookiesForfeited>=1000000000000000000) Game.Win('Dematerialize'); + if (cookiesForfeited>=1000000000000000000000) Game.Win('Nil zero zilch'); + if (cookiesForfeited>=1000000000000000000000000) Game.Win('Transcendence'); + if (cookiesForfeited>=1000000000000000000000000000) Game.Win('Obliterate'); + if (cookiesForfeited>=1000000000000000000000000000000) Game.Win('Negative void'); + if (cookiesForfeited>=1000000000000000000000000000000000) Game.Win('To crumbs, you say?'); + if (cookiesForfeited>=1000000000000000000000000000000000000) Game.Win('You get nothing'); + if (cookiesForfeited>=1000000000000000000000000000000000000000) Game.Win('Humble rebeginnings'); + if (cookiesForfeited>=1000000000000000000000000000000000000000000) Game.Win('The end of the world'); + if (cookiesForfeited>=1000000000000000000000000000000000000000000000) Game.Win('Oh, you\'re back'); + if (cookiesForfeited>=1000000000000000000000000000000000000000000000000) Game.Win('Lazarus'); + if (cookiesForfeited>=1000000000000000000000000000000000000000000000000000) Game.Win('Smurf account'); + if (cookiesForfeited>=1000000000000000000000000000000000000000000000000000000) Game.Win('If at first you don\'t succeed'); + if (cookiesForfeited>=1000000000000000000000000000000000000000000000000000000000) Game.Win('No more room in hell'); + + if (Math.round(Game.cookies)==1000000000000) Game.Win('When the cookies ascend just right'); + + if (Game.hasBuff('Loan 1') || Game.hasBuff('Loan 2') || Game.hasBuff('Loan 3')) Game.Win('Debt evasion'); + } + + Game.killBuffs(); + + Game.seed=Game.makeSeed(); + + Game.cookiesReset+=Game.cookiesEarned; + Game.cookies=0; + Game.cookiesEarned=0; + Game.cookieClicks=0; + Game.goldenClicksLocal=0; + //Game.goldenClicks=0; + //Game.missedGoldenClicks=0; + Game.handmadeCookies=0; + Game.cookiesPsRawHighest=0; + if (hard) + { + Game.bgType=0; + Game.milkType=0; + Game.chimeType=0; + + Game.vault=[]; + } + Game.pledges=0; + Game.pledgeT=0; + Game.elderWrath=0; + Game.elderWrathOld=0; + Game.elderWrathD=0; + Game.nextResearch=0; + Game.researchT=0; + Game.seasonT=0; + Game.seasonUses=0; + Game.season=Game.baseSeason; + Game.computeSeasonPrices(); + + Game.startDate=parseInt(Date.now()); + Game.lastDate=parseInt(Date.now()); + + if (hard) {Game.cookiesSent=0;Game.cookiesReceived=0;} + + Game.cookiesSucked=0; + Game.wrinklersPopped=0; + Game.ResetWrinklers(); + + Game.santaLevel=0; + Game.reindeerClicked=0; + + Game.dragonLevel=0; + Game.dragonAura=0; + Game.dragonAura2=0; + + Game.fortuneGC=0; + Game.fortuneCPS=0; + + Game.TickerClicks=0; + + if (Game.gainedPrestige>0) Game.resets++; + if (!hard && Game.canLumps() && Game.ascensionMode!=1) Game.addClass('lumpsOn'); + else Game.removeClass('lumpsOn'); + Game.gainedPrestige=0; + + for (var i in Game.ObjectsById) + { + var me=Game.ObjectsById[i]; + me.amount=0;me.bought=0;me.highest=0;me.free=0;me.totalCookies=0; + me.switchMinigame(false); + if (hard) {me.muted=0;} + me.pics=[]; + me.refresh(); + } + for (var i in Game.UpgradesById) + { + var me=Game.UpgradesById[i]; + if (hard || me.pool!='prestige') me.bought=0; + if (hard) me.unlocked=0; + if (me.pool!='prestige' && !me.lasting) + { + if (Game.Has('Keepsakes') && Game.seasonDrops.indexOf(me.name)!=-1 && Math.random()<1/5){} + else if (Game.ascensionMode==1 && Game.HasAchiev('O Fortuna') && me.tier=='fortune'){} + else if (Game.HasAchiev('O Fortuna') && me.tier=='fortune' && Math.random()<0.4){} + else me.unlocked=0; + } + } + + Game.BuildingsOwned=0; + Game.UpgradesOwned=0; + + Game.cookiesPsByType={}; + Game.cookiesMultByType={}; + + if (!hard) + { + if (Game.ascensionMode!=1) + { + for (var i in Game.permanentUpgrades) + { + if (Game.permanentUpgrades[i]!=-1) + {Game.UpgradesById[Game.permanentUpgrades[i]].earn();} + } + if (Game.Has('Season switcher')) {for (var i in Game.seasons) {Game.Unlock(Game.seasons[i].trigger);}} + + if (Game.Has('Starter kit')) Game.Objects['Cursor'].getFree(10); + if (Game.Has('Starter kitchen')) Game.Objects['Grandma'].getFree(5); + } + } + + /*for (var i in Game.AchievementsById) + { + var me=Game.AchievementsById[i]; + me.won=0; + }*/ + //Game.DefaultPrefs(); + BeautifyAll(); + + Game.RebuildUpgrades(); + Game.TickerAge=0; + Game.TickerEffect=0; + Game.recalculateGains=1; + Game.storeToRefresh=1; + Game.upgradesToRebuild=1; + Game.killShimmers(); + + Game.buyBulk=1;Game.buyMode=1;Game.storeBulkButton(-1); + + Game.LoadMinigames(); + for (var i in Game.ObjectsById) + { + var me=Game.ObjectsById[i]; + if (hard && me.minigame && me.minigame.launch) {me.minigame.launch();me.minigame.reset(true);} + else if (!hard && me.minigame && me.minigame.reset) me.minigame.reset(); + } + + l('toggleBox').style.display='none'; + l('toggleBox').innerHTML=''; + Game.choiceSelectorOn=-1; + Game.ToggleSpecialMenu(0); + Game.specialTab=''; + + l('logButton').classList.remove('hasUpdate'); + + Game.runModHook('reset',hard); + + if (hard) + { + Game.YouCustomizer.resetGenes(); + + Game.clicksThisSession=0; + if (Game.T>Game.fps*5 && Game.ReincarnateTimer==0)//fade out of black and pop the cookie + { + Game.ReincarnateTimer=1; + Game.addClass('reincarnating'); + Game.BigCookieSize=0; + } + Game.Notify(loc("Game reset"),EN?"So long, cookies.":loc("Good bye, cookies."),[21,6],6); + } + else Game.clicksThisSession=Math.max(Game.clicksThisSession,1); + + Game.jukebox.reset(); + if (hard) PlayCue('launch'); + else PlayCue('play'); + } + Game.HardReset=function(bypass) + { + if (!bypass) + { + Game.Prompt('

'+loc("Wipe save")+'

'+tinyIcon([15,5])+'
'+loc("Do you REALLY want to wipe your save?
You will lose your progress, your achievements, and your heavenly chips!")+'
',[[EN?'Yes!':loc("Yes"),'Game.ClosePrompt();Game.HardReset(1);','float:left'],[loc("No"),0,'float:right']]); + } + else if (bypass==1) + { + Game.Prompt('

'+loc("Wipe save")+'

'+tinyIcon([15,5])+'
'+loc("Whoah now, are you really, REALLY sure you want to go through with this?
Don't say we didn't warn you!")+'
',[[EN?'Do it!':loc("Yes"),'Game.ClosePrompt();Game.HardReset(2);','float:left'],[loc("No"),0,'float:right']]); + } + else + { + for (var i in Game.AchievementsById) + { + var me=Game.AchievementsById[i]; + me.won=0; + } + for (var i in Game.ObjectsById) + { + var me=Game.ObjectsById[i]; + me.level=0; + } + + Game.AchievementsOwned=0; + Game.goldenClicks=0; + Game.missedGoldenClicks=0; + Game.Reset(1); + Game.resets=0; + Game.fullDate=parseInt(Date.now()); + Game.bakeryName=Game.GetBakeryName(); + Game.bakeryNameRefresh(); + Game.cookiesReset=0; + Game.prestige=0; + Game.heavenlyChips=0; + Game.heavenlyChipsSpent=0; + Game.heavenlyCookies=0; + Game.permanentUpgrades=[-1,-1,-1,-1,-1]; + Game.ascensionMode=0; + Game.lumps=-1; + Game.lumpsTotal=-1; + Game.lumpT=Date.now(); + Game.lumpRefill=0; + Game.removeClass('lumpsOn'); + if (App) App.hardReset(); + } + } + + + + Game.onCrate=0; + Game.setOnCrate=function(what) + { + Game.onCrate=what; + } + Game.crate=function(me,context,forceClickStr,id,style) + { + //produce a crate with associated tooltip for an upgrade or achievement + //me is an object representing the upgrade or achievement + //context can be "store", "ascend", "stats" or undefined + //forceClickStr changes what is done when the crate is clicked + //id is the resulting div's desired id + + var classes='crate'; + var enabled=0; + var noFrame=0; + var attachment='top'; + var neuromancy=0; + if (context=='stats' && (Game.Has('Neuromancy') || (Game.sesame && me.pool=='debug'))) neuromancy=1; + var mysterious=0; + var clickStr=''; + + if (me.type=='upgrade') + { + var canBuy=(context=='store'?me.canBuy():true); + if (context=='stats' && me.bought==0 && !Game.Has('Neuromancy') && (!Game.sesame || me.pool!='debug')) return ''; + else if (context=='stats' && (Game.Has('Neuromancy') || (Game.sesame && me.pool=='debug'))) neuromancy=1; + else if (context=='store' && !canBuy) enabled=0; + else if (context=='ascend' && me.bought==0) enabled=0; + else enabled=1; + if (me.bought>0) enabled=1; + + if (context=='stats' && !Game.prefs.crates) noFrame=1; + + classes+=' upgrade'; + if (me.pool=='prestige') classes+=' heavenly'; + + + if (neuromancy) clickStr='Game.UpgradesById['+me.id+'].toggle();'; + } + else if (me.type=='achievement') + { + if (context=='stats' && me.won==0 && me.pool!='normal') return ''; + else if (context!='stats') enabled=1; + + if (context=='stats' && !Game.prefs.crates) noFrame=1; + + classes+=' achievement'; + if (me.pool=='shadow') classes+=' shadow'; + if (me.won>0) enabled=1; + else mysterious=1; + if (!enabled) clickStr='Game.AchievementsById['+me.id+'].click();'; + + if (neuromancy) clickStr='Game.AchievementsById['+me.id+'].toggle();'; + } + + if (context=='store') attachment='store'; + + if (forceClickStr) clickStr=forceClickStr; + + if (me.choicesFunction) classes+=' selector'; + + + var icon=me.icon; + if (mysterious) icon=[0,7]; + + if (me.iconFunction) icon=me.iconFunction(); + + if (me.bought && context=='store') enabled=0; + + if (enabled) classes+=' enabled';// else classes+=' disabled'; + if (noFrame) classes+=' noFrame'; + + var text=[]; + if (Game.sesame) + { + if (Game.debuggedUpgradeCpS[me.name] || Game.debuggedUpgradeCpClick[me.name]) + { + text.push('x'+Beautify(1+Game.debuggedUpgradeCpS[me.name],2));text.push(Game.debugColors[Math.floor(Math.max(0,Math.min(Game.debugColors.length-1,Math.pow(Game.debuggedUpgradeCpS[me.name]/2,0.5)*Game.debugColors.length)))]); + text.push('x'+Beautify(1+Game.debuggedUpgradeCpClick[me.name],2));text.push(Game.debugColors[Math.floor(Math.max(0,Math.min(Game.debugColors.length-1,Math.pow(Game.debuggedUpgradeCpClick[me.name]/2,0.5)*Game.debugColors.length)))]); + } + if (Game.extraInfo) {text.push(Math.floor(me.order)+(me.power?'
P:'+me.power:''));text.push('#fff');} + } + var textStr=''; + for (var i=0;i'+text[i]+'
'; + } + return (Game.prefs.screenreader?'':''); + } + Game.crateTooltip=function(me,context) + { + var tags=[]; + mysterious=0; + var neuromancy=0; + var price=''; + if (context=='stats' && (Game.Has('Neuromancy') || (Game.sesame && me.pool=='debug'))) neuromancy=1; + + var ariaText=''; + + if (me.type=='upgrade') + { + ariaText+='Upgrade. '; + + if (me.pool=='prestige') tags.push(loc("[Tag]Heavenly",0,'Heavenly'),'#efa438'); + else if (me.pool=='tech') tags.push(loc("[Tag]Tech",0,'Tech'),'#36a4ff'); + else if (me.pool=='cookie') tags.push(loc("[Tag]Cookie",0,'Cookie'),0); + else if (me.pool=='debug') tags.push(loc("[Tag]Debug",0,'Debug'),'#00c462'); + else if (me.pool=='toggle') tags.push(loc("[Tag]Switch",0,'Switch'),0); + else tags.push(loc("[Tag]Upgrade",0,'Upgrade'),0); + + if (Game.Has('Label printer')) + { + if (me.tier!=0) tags.push(loc("Tier:")+' '+loc("[Tier]"+Game.Tiers[me.tier].name,0,Game.Tiers[me.tier].name),Game.Tiers[me.tier].color); + if (me.name=='Label printer' || me.name=='This upgrade') tags.push(loc("Tier:")+' '+loc("[Tier]Self-referential"),'#ff00ea'); + } + + if (me.isVaulted()) tags.push(loc("Vaulted"),'#4e7566'); + + if (me.bought>0) + { + ariaText+='Owned. '; + if (me.pool=='tech') tags.push(loc("Researched"),0); + else if (EN && me.kitten) tags.push('Purrchased',0); + else tags.push(loc("Purchased"),0); + } + + if (me.lasting && me.unlocked) tags.push(loc("Unlocked forever"),'#f2ff87'); + + if (neuromancy && me.bought==0) tags.push(loc("Click to learn!"),'#00c462'); + else if (neuromancy && me.bought>0) tags.push(loc("Click to unlearn!"),'#00c462'); + + var canBuy=(context=='store'?me.canBuy():true); + var cost=me.getPrice(); + if (me.priceLumps>0) cost=me.priceLumps; + + if (me.priceLumps==0 && cost==0) price=''; + else + { + price='
'+Beautify(Math.round(cost))+''+((me.pool!='prestige' && me.priceLumps==0)?Game.costDetails(cost):'')+'
'; + + ariaText+=(me.bought?'Bought for':canBuy?'Can buy for':'Cannot afford the')+' '+Beautify(Math.round(cost))+' '+((me.priceLumps>0)?'sugar lumps':(me.pool=='prestige')?'heavenly chips':'cookies')+'. '; + } + } + else if (me.type=='achievement') + { + ariaText+='Achievement. '; + if (me.pool=='shadow') tags.push(loc("Shadow Achievement"),'#9700cf'); + else tags.push(loc("Achievement"),0); + if (me.won>0) {tags.push(loc("Unlocked"),0);ariaText+='Unlocked. ';} + else {tags.push(loc("Locked"),0);mysterious=1;} + + if (neuromancy && me.won==0) tags.push(loc("Click to win!"),'#00c462'); + else if (neuromancy && me.won>0) tags.push(loc("Click to lose!"),'#00c462'); + } + + var tagsStr=''; + for (var i=0;i'+tags[i]+''; + } + + var icon=me.icon; + if (mysterious) icon=[0,7]; + + if (me.iconFunction) icon=me.iconFunction(); + + ariaText+=(mysterious?'Hidden':me.dname)+'. '; + + var tip=''; + if (context=='store') + { + if (me.pool!='toggle' && me.pool!='tech') + { + var purchase=me.kitten?'purrchase':'purchase'; + if (Game.Has('Inspired checklist')) + { + if (me.isVaulted()) tip=EN?('Upgrade is vaulted and will not be auto-'+purchase+'d.
Click to '+purchase+'. Shift-click to unvault.'):(loc("Upgrade is vaulted and will not be auto-purchased.")+'
'+loc("Click to purchase.")+' '+loc("%1 to unvault.",loc("Shift-click"))); + else tip=EN?('Click to '+purchase+'. Shift-click to vault.'):(loc("Click to purchase.")+' '+loc("%1 to vault.",loc("Shift-click"))); + if (EN){ + if (Game.keys[16]) tip+='
(You are holding Shift.)'; + else tip+='
(You are not holding Shift.)'; + } + } + else tip=EN?('Click to '+purchase+'.'):loc("Click to purchase."); + } + else if (me.pool=='toggle' && me.choicesFunction) tip=loc("Click to open selector."); + else if (me.pool=='toggle') tip=loc("Click to toggle."); + else if (me.pool=='tech') tip=loc("Click to research."); + } + + if (tip!='') ariaText+=tip+' '; + + var desc=me.ddesc; + if (me.descFunc) desc=me.descFunc(context); + if (me.bought && context=='store' && me.displayFuncWhenOwned) desc=me.displayFuncWhenOwned()+'
'+desc; + if (me.unlockAt) + { + if (me.unlockAt.require) + { + var it=Game.Upgrades[me.unlockAt.require]; + desc='
'+(EN?'From':loc("Source:"))+' '+tinyIcon(it.icon)+' '+it.dname+'
'+desc; + } + else if (me.unlockAt.text) + { + //var it=Game.Upgrades[me.unlockAt.require]; + desc='
'+(EN?'From':loc("Source:"))+' '+text+'
'+desc; + } + } + + if (!mysterious) ariaText+='Description: '+desc+' '; + + if (Game.prefs.screenreader) + { + var ariaLabel=l('ariaReader-'+me.type+'-'+me.id); + if (ariaLabel) ariaLabel.innerHTML=ariaText.replace(/(<([^>]+)>)/gi,' '); + } + + return '
'+ + '
'+ + (me.bought && context=='store'?'':price)+ + '
'+(mysterious?'???':me.dname)+'
'+ + tagsStr+ + '
'+(mysterious?'???':desc)+'
'+ + (tip!=''?('
'+tip+'
'):'')+ + (Game.sesame?('
Id: '+me.id+' | Order: '+(me.order)+(me.tier?' | Tier: '+me.tier:'')+' | Icon: ['+me.icon[0]+','+me.icon[1]+']'+'
'):''); + } + + Game.costDetails=function(cost) + { + if (!Game.Has('Genius accounting')) return ''; + if (!cost) return ''; + var priceInfo=''; + var cps=Game.cookiesPs*(1-Game.cpsSucked); + if (cost>Game.cookies) priceInfo+=loc("in %1",Game.sayTime(((cost-Game.cookies)/cps+1)*Game.fps))+'
'; + priceInfo+=loc("%1 worth",Game.sayTime((cost/cps+1)*Game.fps))+'
'; + priceInfo+=loc("%1% of bank",Beautify((cost/Game.cookies)*100,1))+'
'; + return '
'+priceInfo+'
'; + } + + + /*===================================================================================== + PRESTIGE + =======================================================================================*/ + + Game.HCfactor=3; + Game.HowMuchPrestige=function(cookies)//how much prestige [cookies] should land you + { + return Math.pow(cookies/1000000000000,1/Game.HCfactor); + } + Game.HowManyCookiesReset=function(chips)//how many cookies [chips] are worth + { + //this must be the inverse of the above function (ie. if cookies=chips^2, chips=cookies^(1/2) ) + return Math.pow(chips,Game.HCfactor)*1000000000000; + } + Game.gainedPrestige=0; + Game.EarnHeavenlyChips=function(cookiesForfeited,silent) + { + //recalculate prestige and chips owned + var prestige=Math.floor(Game.HowMuchPrestige(Game.cookiesReset+cookiesForfeited)); + prestige=Math.max(0,prestige); + if (prestige!=Game.prestige)//did we change prestige levels? + { + var prestigeDifference=prestige-Game.prestige; + Game.gainedPrestige=prestigeDifference; + Game.heavenlyChips+=prestigeDifference; + Game.prestige=prestige; + if (!silent && prestigeDifference>0) Game.Notify(loc("You forfeit your %1.",loc("%1 cookie",LBeautify(cookiesForfeited))),loc("You gain %1!",loc("%1 prestige level",LBeautify(prestigeDifference))),[19,7]); + } + } + + Game.GetHeavenlyMultiplier=function() + { + var heavenlyMult=0; + if (Game.Has('Heavenly chip secret')) heavenlyMult+=0.05; + if (Game.Has('Heavenly cookie stand')) heavenlyMult+=0.20; + if (Game.Has('Heavenly bakery')) heavenlyMult+=0.25; + if (Game.Has('Heavenly confectionery')) heavenlyMult+=0.25; + if (Game.Has('Heavenly key')) heavenlyMult+=0.25; + //if (Game.hasAura('Dragon God')) heavenlyMult*=1.05; + heavenlyMult*=1+Game.auraMult('Dragon God')*0.05; + if (Game.Has('Lucky digit')) heavenlyMult*=1.01; + if (Game.Has('Lucky number')) heavenlyMult*=1.01; + if (Game.Has('Lucky payout')) heavenlyMult*=1.01; + if (Game.hasGod) + { + var godLvl=Game.hasGod('creation'); + if (godLvl==1) heavenlyMult*=0.7; + else if (godLvl==2) heavenlyMult*=0.8; + else if (godLvl==3) heavenlyMult*=0.9; + } + return heavenlyMult; + } + + Game.ascensionModes={ + 0:{name:'None',dname:loc("None [ascension type]"),desc:loc("No special modifiers."),icon:[10,0]}, + 1:{name:'Born again',dname:loc("Born again [ascension type]"),desc:loc("This run will behave as if you'd just started the game from scratch. Prestige levels and heavenly upgrades will have no effect, as will sugar lumps and building levels. Perma-upgrades and minigames will be unavailable.
Some achievements are only available in this mode."),icon:[2,7]}/*, + 2:{name:'Trigger finger',dname:loc("Trigger finger [ascension type]"),desc:loc("In this run, scrolling your mouse wheel on the cookie counts as clicking it. Some upgrades introduce new clicking behaviors.
No clicking achievements may be obtained in this mode.
Reaching 1 quadrillion cookies in this mode unlocks a special heavenly upgrade."),icon:[12,0]}*/ + }; + + Game.ascendMeterPercent=0; + Game.ascendMeterPercentT=0; + Game.ascendMeterLevel=100000000000000000000000000000; + + Game.nextAscensionMode=0; + Game.UpdateAscensionModePrompt=function() + { + var icon=Game.ascensionModes[Game.nextAscensionMode].icon; + var name=Game.ascensionModes[Game.nextAscensionMode].dname; + l('ascendModeButton').innerHTML= + '
'+loc("Challenge mode for the next run:")+'
'+name+'
'+loc("Challenge modes apply special modifiers to your next ascension.
Click to change.")+'
' + ,'bottom-right')+' style="opacity:1;float:none;display:block;background-position:'+(-icon[0]*48)+'px '+(-icon[1]*48)+'px;">'; + } + Game.PickAscensionMode=function() + { + PlaySound('snd/tick.mp3'); + Game.tooltip.hide(); + + var str=''; + for (var i in Game.ascensionModes) + { + var icon=Game.ascensionModes[i].icon; + str+='
'; + } + Game.Prompt('

'+loc("Select a challenge mode")+'

'+ + '
'+str+'

'+Game.ascensionModes[Game.nextAscensionMode].dname+'

'+Game.ascensionModes[Game.nextAscensionMode].desc+'
' + ,[[loc("Confirm"),'Game.UpdateAscensionModePrompt();Game.ClosePrompt();']],0,'widePrompt'); + } + + + l('ascendOverlay').innerHTML= + '' + ,'bottom-right')+' style="font-size:16px;margin-top:0px;">'+loc("Reincarnate")+''+ + ''+ + ''+ + + '
'+loc("You are ascending.
Drag the screen around
or use arrow keys!
When you're ready,
click Reincarnate.")+'
'; + + Game.attachTooltip(l('ascendData1'),function(){return '
('+Beautify(Game.heavenlyChips)+')
'+loc("Each prestige level grants you a permanent +%1% CpS.
The more levels you have, the more cookies they require.",1)+'
';},'bottom-right'); + Game.attachTooltip(l('ascendData2'),function(){return '
('+loc("%1 heavenly chip",LBeautify(Game.heavenlyChips))+')
'+loc("Heavenly chips are used to buy heavenly upgrades.
You gain 1 chip every time you gain a prestige level.")+'
';},'bottom-right'); + + Game.UpdateAscensionModePrompt(); + + AddEvent(l('ascendButton'),'click',function(){ + PlaySound('snd/tick.mp3'); + Game.Reincarnate(); + }); + + Game.ascendl=l('ascend'); + Game.ascendContentl=l('ascendContent'); + Game.ascendZoomablel=l('ascendZoomable'); + Game.ascendUpgradesl=l('ascendUpgrades'); + Game.OnAscend=0; + Game.AscendTimer=0;//how far we are into the ascend animation + Game.AscendDuration=Game.fps*5;//how long the ascend animation is + Game.AscendBreakpoint=Game.AscendDuration*0.5;//at which point the cookie explodes during the ascend animation + Game.UpdateAscendIntro=function() + { + if (Game.AscendTimer==1) PlaySound('snd/charging.mp3'); + if (Game.AscendTimer==Math.floor(Game.AscendBreakpoint)) PlaySound('snd/thud.mp3'); + Game.AscendTimer++; + if (Game.AscendTimer>Game.AscendDuration)//end animation and launch ascend screen + { + PlayCue('ascend'); + PlayMusicSound('snd/cymbalRev.mp3'); + if (!App || Game.volumeMusic==0) PlaySound('snd/choir.mp3'); + Game.EarnHeavenlyChips(Game.cookiesEarned); + Game.AscendTimer=0; + Game.OnAscend=1;Game.removeClass('ascendIntro'); + Game.addClass('ascending'); + Game.BuildAscendTree(); + Game.heavenlyChipsDisplayed=Game.heavenlyChips; + Game.nextAscensionMode=0; + Game.ascensionMode=0; + Game.UpdateAscensionModePrompt(); + } + } + Game.ReincarnateTimer=0;//how far we are into the reincarnation animation + Game.ReincarnateDuration=Game.fps*1;//how long the reincarnation animation is + Game.UpdateReincarnateIntro=function() + { + if (Game.ReincarnateTimer==1) PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); + Game.ReincarnateTimer++; + if (Game.ReincarnateTimer>Game.ReincarnateDuration)//end animation and launch regular game + { + Game.ReincarnateTimer=0; + Game.removeClass('reincarnating'); + } + } + Game.Reincarnate=function(bypass) + { + if (!bypass) Game.Prompt('

'+loc("Reincarnate")+'

'+loc("Are you ready to return to the mortal world?")+'
',[[loc("Yes"),'Game.ClosePrompt();Game.Reincarnate(1);'],loc("No")]); + else + { + Game.ascendUpgradesl.innerHTML=''; + Game.ascensionMode=Game.nextAscensionMode; + Game.nextAscensionMode=0; + Game.Reset(); + if (Game.HasAchiev('Rebirth')) + { + Game.Notify('Reincarnated',loc("Hello, cookies!"),[10,0],4); + } + if (Game.resets>=1000) Game.Win('Endless cycle'); + if (Game.resets>=100) Game.Win('Reincarnation'); + if (Game.resets>=10) Game.Win('Resurrection'); + if (Game.resets>=1) Game.Win('Rebirth'); + + var prestigeUpgradesOwned=0; + for (var i in Game.Upgrades) + { + if (Game.Upgrades[i].bought && Game.Upgrades[i].pool=='prestige') prestigeUpgradesOwned++; + } + if (prestigeUpgradesOwned>=100) Game.Win('All the stars in heaven'); + + Game.removeClass('ascending'); + Game.OnAscend=0; + //trigger the reincarnate animation + Game.ReincarnateTimer=1; + Game.addClass('reincarnating'); + Game.BigCookieSize=0; + + Game.runModHook('reincarnate'); + } + } + Game.Ascend=function(bypass) + { + if (!bypass) Game.Prompt('

'+loc("Ascend")+'

'+tinyIcon([19,7])+'
'+loc("Do you REALLY want to ascend?
You will lose your progress and start over from scratch.
All your cookies will be converted into prestige and heavenly chips.")+'
'+(Game.canLumps()?loc("You will keep your achievements, building levels and sugar lumps."):loc("You will keep your achievements."))+'
',[[loc("Yes"),'Game.ClosePrompt();Game.Ascend(1);','float:left;display:none;'],[loc("Cancel"),0,'float:right']]); + else + { + Game.Notify(loc("Ascending"),loc("So long, cookies."),[20,7],4); + Game.OnAscend=0;Game.removeClass('ascending'); + Game.addClass('ascendIntro'); + //trigger the ascend animation + Game.AscendTimer=1; + Game.killShimmers(); + l('toggleBox').style.display='none'; + l('toggleBox').innerHTML=''; + Game.choiceSelectorOn=-1; + Game.ToggleSpecialMenu(0); + Game.AscendOffX=0; + Game.AscendOffY=0; + Game.AscendOffXT=0; + Game.AscendOffYT=0; + Game.AscendZoomT=1; + Game.AscendZoom=0.2; + + Game.jukebox.reset(); + PlayCue('preascend'); + } + } + + Game.DebuggingPrestige=0; + Game.AscendDragX=0; + Game.AscendDragY=0; + Game.AscendOffX=0; + Game.AscendOffY=0; + Game.AscendZoom=1; + Game.AscendOffXT=0; + Game.AscendOffYT=0; + Game.AscendZoomT=1; + Game.AscendDragging=0; + Game.heavenlyBounds={left:0,right:0,top:0,bottom:0}; + Game.UpdateAscend=function() + { + if (Game.keys[37]) Game.AscendOffXT+=16*(1/Game.AscendZoomT); + if (Game.keys[38]) Game.AscendOffYT+=16*(1/Game.AscendZoomT); + if (Game.keys[39]) Game.AscendOffXT-=16*(1/Game.AscendZoomT); + if (Game.keys[40]) Game.AscendOffYT-=16*(1/Game.AscendZoomT); + + if (Game.AscendOffXT>-Game.heavenlyBounds.left) Game.AscendOffXT=-Game.heavenlyBounds.left; + if (Game.AscendOffXT<-Game.heavenlyBounds.right) Game.AscendOffXT=-Game.heavenlyBounds.right; + if (Game.AscendOffYT>-Game.heavenlyBounds.top) Game.AscendOffYT=-Game.heavenlyBounds.top; + if (Game.AscendOffYT<-Game.heavenlyBounds.bottom) Game.AscendOffYT=-Game.heavenlyBounds.bottom; + Game.AscendOffX+=(Game.AscendOffXT-Game.AscendOffX)*0.5; + Game.AscendOffY+=(Game.AscendOffYT-Game.AscendOffY)*0.5; + Game.AscendZoom+=(Game.AscendZoomT-Game.AscendZoom)*0.25; + if (Math.abs(Game.AscendZoomT-Game.AscendZoom)<0.005) Game.AscendZoom=Game.AscendZoomT; + if (Math.abs(Game.AscendOffXT-Game.AscendOffX)<0.005) Game.AscendOffX=Game.AscendOffXT; + if (Math.abs(Game.AscendOffYT-Game.AscendOffY)<0.005) Game.AscendOffY=Game.AscendOffYT; + + + if (Game.mouseDown && !Game.promptOn) + { + if (!Game.AscendDragging) + { + Game.AscendDragX=Game.mouseX; + Game.AscendDragY=Game.mouseY; + } + Game.AscendDragging=1; + + if (!Game.SelectedHeavenlyUpgrade) + { + Game.AscendOffXT+=(Game.mouseX-Game.AscendDragX)*(1/Game.AscendZoomT); + Game.AscendOffYT+=(Game.mouseY-Game.AscendDragY)*(1/Game.AscendZoomT); + } + Game.AscendDragX=Game.mouseX; + Game.AscendDragY=Game.mouseY; + } + else + { + Game.AscendDragging=0; + Game.SelectedHeavenlyUpgrade=0; + } + if (Game.Click || Game.promptOn) + { + Game.AscendDragging=0; + } + + //Game.ascendl.style.backgroundPosition=Math.floor(Game.AscendOffX/2)+'px '+Math.floor(Game.AscendOffY/2)+'px'; + //Game.ascendl.style.backgroundPosition=Math.floor(Game.AscendOffX/2)+'px '+Math.floor(Game.AscendOffY/2)+'px,'+Math.floor(Game.AscendOffX/4)+'px '+Math.floor(Game.AscendOffY/4)+'px'; + //Game.ascendContentl.style.left=Math.floor(Game.AscendOffX)+'px'; + //Game.ascendContentl.style.top=Math.floor(Game.AscendOffY)+'px'; + Game.ascendContentl.style.webkitTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; + Game.ascendContentl.style.msTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; + Game.ascendContentl.style.oTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; + Game.ascendContentl.style.mozTransform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; + Game.ascendContentl.style.transform='translate('+Math.floor(Game.AscendOffX)+'px,'+Math.floor(Game.AscendOffY)+'px)'; + Game.ascendZoomablel.style.webkitTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; + Game.ascendZoomablel.style.marginLeft=(Game.windowW/2)+'px'; + Game.ascendZoomablel.style.marginTop=(Game.windowH/2)+'px'; + Game.ascendZoomablel.style.msTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; + Game.ascendZoomablel.style.oTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; + Game.ascendZoomablel.style.mozTransform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; + Game.ascendZoomablel.style.transform='scale('+(Game.AscendZoom)+','+(Game.AscendZoom)+')'; + + //if (Game.Scroll!=0) Game.ascendContentl.style.transformOrigin=Math.floor(Game.windowW/2-Game.mouseX)+'px '+Math.floor(Game.windowH/2-Game.mouseY)+'px'; + if (Game.Scroll<0 && !Game.promptOn) {Game.AscendZoomT=0.5;} + if (Game.Scroll>0 && !Game.promptOn) {Game.AscendZoomT=1;} + + if (Game.T%2==0) + { + l('ascendPrestige').innerHTML=loc("Prestige level:")+'
'+SimpleBeautify(Game.prestige); + l('ascendHCs').innerHTML=loc("Heavenly chips:")+'
'+SimpleBeautify(Math.round(Game.heavenlyChipsDisplayed))+''; + if (Game.prestige>0) l('ascendModeButton').style.display='block'; + else l('ascendModeButton').style.display='none'; + } + Game.heavenlyChipsDisplayed+=(Game.heavenlyChips-Game.heavenlyChipsDisplayed)*0.4; + } + Game.AscendRefocus=function() + { + Game.AscendOffX=0; + Game.AscendOffY=0; + Game.ascendl.className=''; + } + + Game.SelectedHeavenlyUpgrade=0; + Game.PurchaseHeavenlyUpgrade=function(what) + { + //if (Game.Has('Neuromancy')) Game.UpgradesById[what].toggle(); else + if (Game.UpgradesById[what].buy()) + { + if (l('heavenlyUpgrade'+what)){var rect=l('heavenlyUpgrade'+what).getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24);} + //Game.BuildAscendTree(); + } + } + Game.BuildAscendTree=function(justBought) + { + var str=''; + Game.heavenlyBounds={left:0,right:0,top:0,bottom:0}; + + var toPop=[]; + for (var i in Game.PrestigeUpgrades) + { + var me=Game.PrestigeUpgrades[i]; + var prevCanBePurchased=me.canBePurchased; + me.canBePurchased=1; + if (!me.bought && !Game.DebuggingPrestige) + { + if (me.showIf && !me.showIf()) me.canBePurchased=0; + else + { + for (var ii in me.parents) + { + if (me.parents[ii]!=-1 && !me.parents[ii].bought) me.canBePurchased=0; + } + } + } + if (justBought && me.parents.indexOf(justBought)!=-1 && !prevCanBePurchased && me.canBePurchased && !me.bought) toPop.push(me); + } + toPop.sort(function(parent){return function(a,b){ + var rot=Math.atan2(a.posY-parent.posY,parent.posX-a.posX)-Math.PI/2; + var rot2=Math.atan2(b.posY-parent.posY,parent.posX-b.posX)-Math.PI/2; + return rot'; + } + } + if (me.canBePurchased || Game.Has('Neuromancy') || ghosted) + { + if (me.posXGame.heavenlyBounds.right) Game.heavenlyBounds.right=me.posX; + if (me.posYGame.heavenlyBounds.bottom) Game.heavenlyBounds.bottom=me.posY; + } + for (var ii in me.parents)//create pulsing links + { + if (me.parents[ii]!=-1 && (me.canBePurchased || ghosted)) + { + var origX=0; + var origY=0; + var targX=me.posX+28; + var targY=me.posY+28; + if (me.parents[ii]!=-1) {origX=me.parents[ii].posX+28;origY=me.parents[ii].posY+28;} + var rot=-(Math.atan((targY-origY)/(origX-targX))/Math.PI)*180; + if (targX<=origX) rot+=180; + var dist=Math.floor(Math.sqrt((targX-origX)*(targX-origX)+(targY-origY)*(targY-origY))); + str+=''; + } + } + } + Game.heavenlyBounds.left-=128; + Game.heavenlyBounds.top-=128; + Game.heavenlyBounds.right+=128+64; + Game.heavenlyBounds.bottom+=128+64; + str+=''; + Game.ascendUpgradesl.innerHTML=str; + + setTimeout(function(){Game.tooltip.shouldHide=true;},100); + } + + /*===================================================================================== + COALESCING SUGAR LUMPS + =======================================================================================*/ + Game.lumpMatureAge=1; + Game.lumpRipeAge=1; + Game.lumpOverripeAge=1; + Game.lumpCurrentType=0; + l('comments').innerHTML=l('comments').innerHTML+ + '
0
'; + Game.lumpTooltip=function() + { + var str='
'+ + loc("You have %1.",''+loc("%1 sugar lump",LBeautify(Game.lumps))+'')+ + '
'+ + loc("A sugar lump is coalescing here, attracted by your accomplishments."); + + var age=Date.now()-Game.lumpT; + str+='
'; + if (age<0) str+=loc("This sugar lump has been exposed to time travel shenanigans and will take an excruciating %1 to reach maturity.",Game.sayTime(((Game.lumpMatureAge-age)/1000+1)*Game.fps,-1)); + else if (age%1 to reach maturity.",Game.sayTime(((Game.lumpMatureAge-age)/1000+1)*Game.fps,-1)); + else if (age%1.
You may click it to harvest it now, but there is a 50% chance you won't get anything.",Game.sayTime(((Game.lumpRipeAge-age)/1000+1)*Game.fps,-1)); + else if (ageThis sugar lump is ripe! Click it to harvest it.
If you do nothing, it will auto-harvest in %1.",Game.sayTime(((Game.lumpOverripeAge-age)/1000+1)*Game.fps,-1)); + + var phase=(age/Game.lumpOverripeAge)*7; + if (phase>=3) + { + if (Game.lumpCurrentType!=0) str+='
'; + if (Game.lumpCurrentType==1) str+=loc("This sugar lump grew to be bifurcated; harvesting it has a 50% chance of yielding two lumps."); + else if (Game.lumpCurrentType==2) str+=loc("This sugar lump grew to be golden; harvesting it will yield 2 to 7 lumps, your current cookies will be doubled (capped to a gain of 24 hours of your CpS), and you will find 10% more golden cookies for the next 24 hours."); + else if (Game.lumpCurrentType==3) str+=loc("This sugar lump was affected by the elders and grew to be meaty; harvesting it will yield between 0 and 2 lumps."); + else if (Game.lumpCurrentType==4) str+=loc("This sugar lump is caramelized, its stickiness binding it to unexpected things; harvesting it will yield between 1 and 3 lumps and will refill your sugar lump cooldowns."); + } + + str+='
'; + str+=loc("Your sugar lumps mature after %1,
ripen after %2,
and fall after %3.",[Game.sayTime((Game.lumpMatureAge/1000)*Game.fps,-1),Game.sayTime((Game.lumpRipeAge/1000)*Game.fps,-1),Game.sayTime((Game.lumpOverripeAge/1000)*Game.fps,-1)]); + + str+='
'+loc("• Sugar lumps can be harvested when mature, though if left alone beyond that point they will start ripening (increasing the chance of harvesting them) and will eventually fall and be auto-harvested after some time.
• Sugar lumps are delicious and may be used as currency for all sorts of things.
• Once a sugar lump is harvested, another one will start growing in its place.
• Note that sugar lumps keep growing when the game is closed.")+'
'; + return str; + } + Game.computeLumpTimes=function() + { + var hour=1000*60*60; + Game.lumpMatureAge=hour*20; + Game.lumpRipeAge=hour*23; + if (Game.Has('Stevia Caelestis')) Game.lumpRipeAge-=hour; + if (Game.Has('Diabetica Daemonicus')) Game.lumpMatureAge-=hour; + if (Game.Has('Ichor syrup')) Game.lumpMatureAge-=1000*60*7; + if (Game.Has('Sugar aging process')) Game.lumpRipeAge-=6000*Math.min(600,Game.Objects['Grandma'].amount);//capped at 600 grandmas + if (Game.hasGod && Game.BuildingsOwned%10==0) + { + var godLvl=Game.hasGod('order'); + if (godLvl==1) Game.lumpRipeAge-=hour; + else if (godLvl==2) Game.lumpRipeAge-=(hour/3)*2; + else if (godLvl==3) Game.lumpRipeAge-=(hour/3); + } + //if (Game.hasAura('Dragon\'s Curve')) {Game.lumpMatureAge/=1.05;Game.lumpRipeAge/=1.05;} + Game.lumpMatureAge/=1+Game.auraMult('Dragon\'s Curve')*0.05;Game.lumpRipeAge/=1+Game.auraMult('Dragon\'s Curve')*0.05; + Game.lumpOverripeAge=Game.lumpRipeAge+hour; + if (Game.Has('Glucose-charged air')) {Game.lumpMatureAge/=2000;Game.lumpRipeAge/=2000;Game.lumpOverripeAge/=2000;} + } + Game.loadLumps=function(time) + { + Game.computeLumpTimes(); + //Game.computeLumpType(); + if (!Game.canLumps()) Game.removeClass('lumpsOn'); + else + { + if (Game.ascensionMode!=1) Game.addClass('lumpsOn'); + Game.lumpT=Math.min(Date.now(),Game.lumpT); + var age=Math.max(Date.now()-Game.lumpT,0); + var amount=Math.floor(age/Game.lumpOverripeAge);//how many lumps did we harvest since we closed the game? + if (amount>=1) + { + Game.harvestLumps(1,true); + Game.lumpCurrentType=0;//all offline lumps after the first one have a normal type + if (amount>1) Game.harvestLumps(amount-1,true); + Game.Notify('',loc("You harvested %1 while you were away.",loc("%1 sugar lump",LBeautify(amount))),[29,14]); + Game.lumpT=Date.now()-(age-amount*Game.lumpOverripeAge); + Game.computeLumpType(); + } + } + } + Game.gainLumps=function(total) + { + if (Game.lumpsTotal==-1){Game.lumpsTotal=0;Game.lumps=0;} + Game.lumps+=total; + Game.lumpsTotal+=total; + + if (Game.lumpsTotal>=7) Game.Win('Dude, sweet'); + if (Game.lumpsTotal>=30) Game.Win('Sugar rush'); + if (Game.lumpsTotal>=365) Game.Win('Year\'s worth of cavities'); + } + Game.clickLump=function() + { + triggerAnim(l('lumpsIcon'),'pucker'); + triggerAnim(l('lumpsIcon2'),'pucker'); + if (!Game.canLumps()) return; + var age=Date.now()-Game.lumpT; + if (age+10% golden cookies for the next 24 hours."),[29,16]); + } + else if (Game.lumpCurrentType==3) total*=choose([0,0,1,2,2]); + else if (Game.lumpCurrentType==4) + { + total*=choose([1,2,3]); + Game.lumpRefill=0;//Date.now()-Game.getLumpRefillMax(); + Game.Notify(loc("Sugar lump cooldowns cleared!"),'',[29,27]); + } + total=Math.floor(total); + Game.gainLumps(total); + if (Game.lumpCurrentType==1) Game.Win('Sugar sugar'); + else if (Game.lumpCurrentType==2) Game.Win('All-natural cane sugar'); + else if (Game.lumpCurrentType==3) Game.Win('Sweetmeats'); + else if (Game.lumpCurrentType==4) Game.Win('Maillard reaction'); + + if (!silent) + { + var rect=l('lumpsIcon2').getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24+32-TopBarOffset); + if (total>0) Game.Popup('+'+loc("%1 sugar lump",LBeautify(total))+'',(rect.left+rect.right)/2,(rect.top+rect.bottom)/2-48); + else Game.Popup(''+loc("Botched harvest!")+'',(rect.left+rect.right)/2,(rect.top+rect.bottom)/2-48); + PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); + } + Game.computeLumpTimes(); + } + Game.computeLumpType=function() + { + Math.seedrandom(Game.seed+'/'+Game.lumpT); + var types=[0]; + var loop=1; + //if (Game.hasAura('Dragon\'s Curve')) loop=2; + loop+=Game.auraMult('Dragon\'s Curve'); + loop=randomFloor(loop); + for (var i=0;i-1 || (Game.ascensionMode!=1 && (Game.cookiesEarned+Game.cookiesReset)>=1000000000)) return true; + return false; + } + + Game.getLumpRefillMax=function() + { + return Game.fps*60*15;//1000*60*15;//15 minutes + } + Game.getLumpRefillRemaining=function() + { + return Game.lumpRefill;//Game.getLumpRefillMax()-(Date.now()-Game.lumpRefill); + } + Game.canRefillLump=function() + { + return Game.lumpRefill<=0;//((Date.now()-Game.lumpRefill)>=Game.getLumpRefillMax()); + } + Game.refillLump=function(n,func) + { + if (Game.lumps>=n && Game.canRefillLump()) + { + Game.spendLump(n,'refill',function() + { + if (!Game.sesame) Game.lumpRefill=Game.getLumpRefillMax();//Date.now(); + func(); + })(); + } + } + Game.spendLump=function(n,str,func,free) + { + //ask if we want to spend N lumps (unless free) + return function() + { + if (!free && Game.lumps
'+loc("Do you want to spend %1 to %2?",[''+loc("%1 sugar lump",LBeautify(n))+'',str])+'
',[[loc("Yes"),'Game.lumps-='+n+';Game.promptConfirmFunc();Game.promptConfirmFunc=0;Game.recalculateGains=1;Game.ClosePrompt();'],loc("No")]); + return false; + } + else + { + if (!free) Game.lumps-=n; + func(); + Game.recalculateGains=1; + } + } + } + + Game.doLumps=function() + { + if (Game.lumpRefill>0) Game.lumpRefill--; + + if (!Game.canLumps()) {Game.removeClass('lumpsOn');return;} + if (Game.lumpsTotal==-1) + { + //first time ! + if (Game.ascensionMode!=1) Game.addClass('lumpsOn'); + Game.lumpT=Date.now(); + Game.lumpsTotal=0; + Game.lumps=0; + Game.computeLumpType(); + + Game.Notify(loc("Sugar lumps!"),loc("Because you've baked a billion cookies in total, you are now attracting sugar lumps. They coalesce quietly near the top of your screen, under the Stats button.
You will be able to harvest them when they're ripe, after which you may spend them on all sorts of things!"),[23,14]); + } + var age=Date.now()-Game.lumpT; + if (age>Game.lumpOverripeAge) + { + age=0; + Game.harvestLumps(1); + Game.computeLumpType(); + } + + var phase=Math.min(6,Math.floor((age/Game.lumpOverripeAge)*7)); + var phase2=Math.min(6,Math.floor((age/Game.lumpOverripeAge)*7)+1); + var row=14; + var row2=14; + var type=Game.lumpCurrentType; + if (type==1)//double + { + //if (phase>=6) row=15; + if (phase2>=6) row2=15; + } + else if (type==2)//golden + { + if (phase>=4) row=16; + if (phase2>=4) row2=16; + } + else if (type==3)//meaty + { + if (phase>=4) row=17; + if (phase2>=4) row2=17; + } + else if (type==4)//caramelized + { + if (phase>=4) row=27; + if (phase2>=4) row2=27; + } + var icon=[23+Math.min(phase,5),row]; + var icon2=[23+phase2,row2]; + if (age<0){icon=[17,5];icon2=[17,5];} + var opacity=Math.min(6,(age/Game.lumpOverripeAge)*7)%1; + if (phase>=6) {opacity=1;} + l('lumpsIcon').style.backgroundPosition=(-icon[0]*48)+'px '+(-icon[1]*48)+'px'; + l('lumpsIcon2').style.backgroundPosition=(-icon2[0]*48)+'px '+(-icon2[1]*48)+'px'; + l('lumpsIcon2').style.opacity=opacity; + l('lumpsAmount').textContent=Beautify(Game.lumps); + } + + /*===================================================================================== + COOKIE ECONOMICS + =======================================================================================*/ + Game.Earn=function(howmuch) + { + Game.cookies+=howmuch; + Game.cookiesEarned+=howmuch; + } + Game.Spend=function(howmuch) + { + Game.cookies-=howmuch; + } + Game.Dissolve=function(howmuch) + { + Game.cookies-=howmuch; + Game.cookiesEarned-=howmuch; + Game.cookies=Math.max(0,Game.cookies); + Game.cookiesEarned=Math.max(0,Game.cookiesEarned); + } + Game.mouseCps=function() + { + var add=0; + if (Game.Has('Thousand fingers')) add+= 0.1; + if (Game.Has('Million fingers')) add*= 5; + if (Game.Has('Billion fingers')) add*= 10; + if (Game.Has('Trillion fingers')) add*= 20; + if (Game.Has('Quadrillion fingers')) add*= 20; + if (Game.Has('Quintillion fingers')) add*= 20; + if (Game.Has('Sextillion fingers')) add*= 20; + if (Game.Has('Septillion fingers')) add*= 20; + if (Game.Has('Octillion fingers')) add*= 20; + if (Game.Has('Nonillion fingers')) add*= 20; + if (Game.Has('Decillion fingers')) add*= 20; + if (Game.Has('Undecillion fingers')) add*= 20; + if (Game.Has('Unshackled cursors')) add*= 25; + + var num=0; + for (var i in Game.Objects) {num+=Game.Objects[i].amount;} + num-=Game.Objects['Cursor'].amount; + add=add*num; + if (Game.Has('Plastic mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Iron mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Titanium mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Adamantium mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Unobtainium mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Eludium mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Wishalloy mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Fantasteel mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Nevercrack mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Armythril mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Technobsidian mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Plasmarble mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Miraculite mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Aetherice mouse')) add+=Game.cookiesPs*0.01; + if (Game.Has('Omniplast mouse')) add+=Game.cookiesPs*0.01; + + if (Game.Has('Fortune #104')) add+=Game.cookiesPs*0.01; + var mult=1; + + + if (Game.Has('Santa\'s helpers')) mult*=1.1; + if (Game.Has('Cookie egg')) mult*=1.1; + if (Game.Has('Halo gloves')) mult*=1.1; + if (Game.Has('Dragon claw')) mult*=1.03; + + if (Game.Has('Aura gloves')) + { + mult*=1+0.05*Math.min(Game.Objects['Cursor'].level,Game.Has('Luminous gloves')?20:10); + } + + mult*=Game.eff('click'); + + if (Game.hasGod) + { + var godLvl=Game.hasGod('labor'); + if (godLvl==1) mult*=1.15; + else if (godLvl==2) mult*=1.1; + else if (godLvl==3) mult*=1.05; + } + + for (var i in Game.buffs) + { + if (typeof Game.buffs[i].multClick != 'undefined') mult*=Game.buffs[i].multClick; + } + + //if (Game.hasAura('Dragon Cursor')) mult*=1.05; + mult*=1+Game.auraMult('Dragon Cursor')*0.05; + + var out=mult*Game.ComputeCps(1,Game.Has('Reinforced index finger')+Game.Has('Carpal tunnel prevention cream')+Game.Has('Ambidextrous'),add); + + out=Game.runModHookOnValue('cookiesPerClick',out); + + if (Game.hasBuff('Cursed finger')) out=Game.buffs['Cursed finger'].power; + return out; + } + Game.computedMouseCps=1; + Game.globalCpsMult=1; + Game.unbuffedCps=0; + Game.buildingCps=0; + Game.lastClick=0; + Game.CanClick=1; + Game.autoclickerDetected=0; + Game.BigCookieState=0;//0 = normal, 1 = clicked (small), 2 = released/hovered (big) + Game.BigCookieSize=0; + Game.BigCookieSizeD=0; + Game.BigCookieSizeT=1; + Game.cookieClickSound=Math.floor(Math.random()*7)+1; + Game.playCookieClickSound=function() + { + if (Game.prefs.cookiesound) PlaySound('snd/clickb'+(Game.cookieClickSound)+'.mp3',0.5); + else PlaySound('snd/click'+(Game.cookieClickSound)+'.mp3',0.5); + Game.cookieClickSound+=Math.floor(Math.random()*4)+1; + if (Game.cookieClickSound>7) Game.cookieClickSound-=7; + } + Game.ClickCookie=function(e,amount) + { + var now=Date.now(); + if (e) e.preventDefault(); + if (Game.OnAscend || Game.AscendTimer>0 || Game.T<3 || now-Game.lastClick<1000/((e?e.detail:1)===0?3:50)) {} + else + { + if (now-Game.lastClick<(1000/15)) + { + Game.autoclickerDetected+=Game.fps; + if (Game.autoclickerDetected>=Game.fps*5) Game.Win('Uncanny clicker'); + } + Game.loseShimmeringVeil('click'); + var amount=amount?amount:Game.computedMouseCps; + Game.Earn(amount); + Game.handmadeCookies+=amount; + if (Game.prefs.particles) + { + Game.particleAdd(); + Game.particleAdd(Game.mouseX,Game.mouseY,Math.random()*4-2,Math.random()*-2-2,Math.random()*0.5+0.75,1,2); + } + if (Game.prefs.numbers) Game.particleAdd(Game.mouseX+Math.random()*8-4,Game.mouseY-8+Math.random()*8-4,0,-2,1,4,2,'','+'+Beautify(amount,1)); + + Game.runModHook('click'); + + Game.playCookieClickSound(); + Game.cookieClicks++; + + if (Game.clicksThisSession==0) PlayCue('preplay'); + Game.clicksThisSession++; + Game.lastClick=now; + } + Game.Click=0; + } + Game.mouseX=0; + Game.mouseY=0; + Game.mouseX2=0; + Game.mouseY2=0; + Game.mouseMoved=0; + Game.GetMouseCoords=function(e) + { + var posx=0; + var posy=0; + if (!e) var e=window.event; + if (e.pageX||e.pageY) + { + posx=e.pageX; + posy=e.pageY; + } + else if (e.clientX || e.clientY) + { + posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft; + posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop; + } + var x=0; + var y=TopBarOffset; + /* + var el=l('sectionLeft'); + while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) + { + x+=el.offsetLeft-el.scrollLeft; + y+=el.offsetTop-el.scrollTop; + el=el.offsetParent; + }*/ + Game.mouseX2=Game.mouseX; + Game.mouseY2=Game.mouseY; + Game.mouseX=(posx-x)/Game.scale; + Game.mouseY=(posy-y)/Game.scale; + Game.mouseMoved=1; + Game.lastActivity=Game.time; + } + var bigCookie=l('bigCookie'); + if (Game.prefs.screenreader) + { + bigCookie.ariaLabelledby='bigCookieLabel'; + bigCookie.insertAdjacentHTML('beforeend',''); + bigCookie.tabIndex=1; + } + Game.Click=0; + Game.lastClickedEl=0; + Game.clicksThisSession=0; + Game.clickFrom=0; + Game.Scroll=0; + Game.mouseDown=0; + if (!Game.touchEvents) + { + AddEvent(bigCookie,'click',Game.ClickCookie); + AddEvent(bigCookie,'mousedown',function(event){Game.BigCookieState=1;if (Game.prefs.cookiesound) {Game.playCookieClickSound();}if (event) event.preventDefault();}); + AddEvent(bigCookie,'mouseup',function(event){Game.BigCookieState=2;if (event) event.preventDefault();}); + AddEvent(bigCookie,'mouseout',function(event){Game.BigCookieState=0;}); + AddEvent(bigCookie,'mouseover',function(event){Game.BigCookieState=2;}); + AddEvent(document,'mousemove',Game.GetMouseCoords); + AddEvent(document,'mousedown',function(event){Game.lastActivity=Game.time;Game.mouseDown=1;Game.clickFrom=event.target;}); + AddEvent(document,'mouseup',function(event){Game.lastActivity=Game.time;Game.mouseDown=0;Game.clickFrom=0;}); + AddEvent(document,'click',function(event){Game.lastActivity=Game.time;Game.Click=1;Game.lastClickedEl=event.target;Game.clickFrom=0;}); + Game.handleScroll=function(e) + { + if (!e) e=event; + Game.Scroll=(e.detail<0||e.wheelDelta>0)?1:-1; + Game.lastActivity=Game.time; + }; + AddEvent(document,'DOMMouseScroll',Game.handleScroll); + AddEvent(document,'mousewheel',Game.handleScroll); + } + else + { + //touch events + AddEvent(bigCookie,'touchend',Game.ClickCookie); + AddEvent(bigCookie,'touchstart',function(event){Game.BigCookieState=1;if (event) event.preventDefault();}); + AddEvent(bigCookie,'touchend',function(event){Game.BigCookieState=0;if (event) event.preventDefault();}); + //AddEvent(document,'touchmove',Game.GetMouseCoords); + AddEvent(document,'mousemove',Game.GetMouseCoords); + AddEvent(document,'touchstart',function(event){Game.lastActivity=Game.time;Game.mouseDown=1;}); + AddEvent(document,'touchend',function(event){Game.lastActivity=Game.time;Game.mouseDown=0;}); + AddEvent(document,'touchend',function(event){Game.lastActivity=Game.time;Game.Click=1;}); + } + + Game.keys=[]; + AddEvent(window,'keyup',function(e){ + Game.lastActivity=Game.time; + if (e.keyCode==27) + { + if (Game.promptOn && !Game.promptNoClose) {Game.ClosePrompt();PlaySound('snd/tickOff.mp3');} + if (Game.AscendTimer>0) Game.AscendTimer=Game.AscendDuration; + }//esc closes prompt + if (Game.promptOn) + { + if (e.keyCode==13) Game.ConfirmPrompt();//enter confirms prompt + } + Game.keys[e.keyCode]=0; + }); + AddEvent(window,'keydown',function(e){ + if (Game.promptOn) + { + if (e.keyCode==9) + { + //tab to shift through prompt buttons + if (e.shiftKey) Game.FocusPromptOption(-1); + else Game.FocusPromptOption(1); + e.preventDefault(); + } + } + if (!Game.OnAscend && Game.AscendTimer==0) + { + if (e.ctrlKey && e.keyCode==83) {Game.toSave=true;e.preventDefault();}//ctrl-s saves the game + else if (e.ctrlKey && e.keyCode==79) {Game.ImportSave();e.preventDefault();}//ctrl-o opens the import menu + } + if ((e.keyCode==16 || e.keyCode==17) && Game.tooltip.dynamic) Game.tooltip.update(); + Game.keys[e.keyCode]=1; + if (e.keyCode==9) Game.keys=[];//reset keys on tab press + }); + + AddEvent(window,'visibilitychange',function(e){ + Game.keys=[];//reset all key pressed on visibility change (should help prevent ctrl still being down after ctrl-tab) + }); + + /*===================================================================================== + CPS RECALCULATOR + =======================================================================================*/ + + Game.heavenlyPower=1;//how many CpS percents a single heavenly chip gives + Game.recalculateGains=1; + Game.cookiesPsByType={}; + Game.cookiesMultByType={}; + //display bars with http://codepen.io/anon/pen/waGyEJ + Game.effs={}; + Game.eff=function(name,def){if (typeof Game.effs[name]==='undefined') return (typeof def==='undefined'?1:def); else return Game.effs[name];}; + + Game.CalculateGains=function() + { + Game.cookiesPs=0; + var mult=1; + //add up effect bonuses from building minigames + var effs={}; + for (var i in Game.Objects) + { + if (Game.Objects[i].minigameLoaded && Game.Objects[i].minigame.effs) + { + var myEffs=Game.Objects[i].minigame.effs; + for (var ii in myEffs) + { + if (effs[ii]) effs[ii]*=myEffs[ii]; + else effs[ii]=myEffs[ii]; + } + } + } + Game.effs=effs; + + if (Game.ascensionMode!=1) mult+=parseFloat(Game.prestige)*0.01*Game.heavenlyPower*Game.GetHeavenlyMultiplier(); + + mult*=Game.eff('cps'); + + if (Game.Has('Heralds') && Game.ascensionMode!=1) mult*=(1+0.01*Game.heralds); + + for (var i in Game.cookieUpgrades) + { + var me=Game.cookieUpgrades[i]; + if (Game.Has(me.name)) + { + mult*=(1+(typeof(me.power)==='function'?me.power(me):me.power)*0.01); + } + } + + if (Game.Has('Specialized chocolate chips')) mult*=1.01; + if (Game.Has('Designer cocoa beans')) mult*=1.02; + if (Game.Has('Underworld ovens')) mult*=1.03; + if (Game.Has('Exotic nuts')) mult*=1.04; + if (Game.Has('Arcane sugar')) mult*=1.05; + + if (Game.Has('Increased merriness')) mult*=1.15; + if (Game.Has('Improved jolliness')) mult*=1.15; + if (Game.Has('A lump of coal')) mult*=1.01; + if (Game.Has('An itchy sweater')) mult*=1.01; + if (Game.Has('Santa\'s dominion')) mult*=1.2; + + if (Game.Has('Fortune #100')) mult*=1.01; + if (Game.Has('Fortune #101')) mult*=1.07; + + if (Game.Has('Dragon scale')) mult*=1.03; + + var buildMult=1; + if (Game.hasGod) + { + var godLvl=Game.hasGod('asceticism'); + if (godLvl==1) mult*=1.15; + else if (godLvl==2) mult*=1.1; + else if (godLvl==3) mult*=1.05; + + var godLvl=Game.hasGod('ages'); + if (godLvl==1) mult*=1+0.15*Math.sin((Date.now()/1000/(60*60*3))*Math.PI*2); + else if (godLvl==2) mult*=1+0.15*Math.sin((Date.now()/1000/(60*60*12))*Math.PI*2); + else if (godLvl==3) mult*=1+0.15*Math.sin((Date.now()/1000/(60*60*24))*Math.PI*2); + + var godLvl=Game.hasGod('decadence'); + if (godLvl==1) buildMult*=0.93; + else if (godLvl==2) buildMult*=0.95; + else if (godLvl==3) buildMult*=0.98; + + var godLvl=Game.hasGod('industry'); + if (godLvl==1) buildMult*=1.1; + else if (godLvl==2) buildMult*=1.06; + else if (godLvl==3) buildMult*=1.03; + + var godLvl=Game.hasGod('labor'); + if (godLvl==1) buildMult*=0.97; + else if (godLvl==2) buildMult*=0.98; + else if (godLvl==3) buildMult*=0.99; + } + + if (Game.Has('Santa\'s legacy')) mult*=1+(Game.santaLevel+1)*0.03; + + + Game.milkProgress=Game.AchievementsOwned/25; + var milkMult=1; + if (Game.Has('Santa\'s milk and cookies')) milkMult*=1.05; + //if (Game.hasAura('Breath of Milk')) milkMult*=1.05; + milkMult*=1+Game.auraMult('Breath of Milk')*0.05; + if (Game.hasGod) + { + var godLvl=Game.hasGod('mother'); + if (godLvl==1) milkMult*=1.1; + else if (godLvl==2) milkMult*=1.05; + else if (godLvl==3) milkMult*=1.03; + } + milkMult*=Game.eff('milk'); + + var catMult=1; + + if (Game.Has('Kitten helpers')) catMult*=(1+Game.milkProgress*0.1*milkMult); + if (Game.Has('Kitten workers')) catMult*=(1+Game.milkProgress*0.125*milkMult); + if (Game.Has('Kitten engineers')) catMult*=(1+Game.milkProgress*0.15*milkMult); + if (Game.Has('Kitten overseers')) catMult*=(1+Game.milkProgress*0.175*milkMult); + if (Game.Has('Kitten managers')) catMult*=(1+Game.milkProgress*0.2*milkMult); + if (Game.Has('Kitten accountants')) catMult*=(1+Game.milkProgress*0.2*milkMult); + if (Game.Has('Kitten specialists')) catMult*=(1+Game.milkProgress*0.2*milkMult); + if (Game.Has('Kitten experts')) catMult*=(1+Game.milkProgress*0.2*milkMult); + if (Game.Has('Kitten consultants')) catMult*=(1+Game.milkProgress*0.2*milkMult); + if (Game.Has('Kitten assistants to the regional manager')) catMult*=(1+Game.milkProgress*0.175*milkMult); + if (Game.Has('Kitten marketeers')) catMult*=(1+Game.milkProgress*0.15*milkMult); + if (Game.Has('Kitten analysts')) catMult*=(1+Game.milkProgress*0.125*milkMult); + if (Game.Has('Kitten executives')) catMult*=(1+Game.milkProgress*0.115*milkMult); + if (Game.Has('Kitten admins')) catMult*=(1+Game.milkProgress*0.11*milkMult); + if (Game.Has('Kitten strategists')) catMult*=(1+Game.milkProgress*0.105*milkMult); + if (Game.Has('Kitten angels')) catMult*=(1+Game.milkProgress*0.1*milkMult); + if (Game.Has('Fortune #103')) catMult*=(1+Game.milkProgress*0.05*milkMult); + + Game.cookiesMultByType['kittens']=catMult; + + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + me.storedCps=me.cps(me); + if (Game.ascensionMode!=1) me.storedCps*=(1+me.level*0.01)*buildMult; + if (me.id==1 && Game.Has('Milkhelp® lactose intolerance relief tablets')) me.storedCps*=1+0.05*Game.milkProgress*milkMult;//this used to be "me.storedCps*=1+0.1*Math.pow(catMult-1,0.5)" which was. hmm + me.storedTotalCps=me.amount*me.storedCps; + Game.cookiesPs+=me.storedTotalCps; + Game.cookiesPsByType[me.name]=me.storedTotalCps; + } + //cps from buildings only + Game.buildingCps=Game.cookiesPs; + + if (Game.Has('"egg"')) {Game.cookiesPs+=9;Game.cookiesPsByType['"egg"']=9;}//"egg" + + mult*=catMult; + + var eggMult=1; + if (Game.Has('Chicken egg')) eggMult*=1.01; + if (Game.Has('Duck egg')) eggMult*=1.01; + if (Game.Has('Turkey egg')) eggMult*=1.01; + if (Game.Has('Quail egg')) eggMult*=1.01; + if (Game.Has('Robin egg')) eggMult*=1.01; + if (Game.Has('Ostrich egg')) eggMult*=1.01; + if (Game.Has('Cassowary egg')) eggMult*=1.01; + if (Game.Has('Salmon roe')) eggMult*=1.01; + if (Game.Has('Frogspawn')) eggMult*=1.01; + if (Game.Has('Shark egg')) eggMult*=1.01; + if (Game.Has('Turtle egg')) eggMult*=1.01; + if (Game.Has('Ant larva')) eggMult*=1.01; + if (Game.Has('Century egg')) + { + //the boost increases a little every day, with diminishing returns up to +10% on the 100th day + var day=Math.floor((Date.now()-Game.startDate)/1000/10)*10/60/60/24; + day=Math.min(day,100); + eggMult*=1+(1-Math.pow(1-day/100,3))*0.1; + } + + Game.cookiesMultByType['eggs']=eggMult; + mult*=eggMult; + + if (Game.Has('Sugar baking')) mult*=(1+Math.min(100,Game.lumps)*0.01); + + //if (Game.hasAura('Radiant Appetite')) mult*=2; + mult*=1+Game.auraMult('Radiant Appetite'); + + var rawCookiesPs=Game.cookiesPs*mult; + for (var i in Game.CpsAchievements) + { + if (rawCookiesPs>=Game.CpsAchievements[i].threshold) Game.Win(Game.CpsAchievements[i].name); + } + Game.cookiesPsRaw=rawCookiesPs; + Game.cookiesPsRawHighest=Math.max(Game.cookiesPsRawHighest,rawCookiesPs); + + var n=Game.shimmerTypes['golden'].n; + var auraMult=Game.auraMult('Dragon\'s Fortune'); + for (var i=0;i=0;i--) + { + Game.shimmers[i].die(); + } + for (var i in Game.shimmerTypes) + { + var me=Game.shimmerTypes[i]; + if (me.reset) me.reset(); + me.n=0; + if (me.spawnsOnTimer) + { + me.time=0; + me.spawned=0; + me.minTime=me.getMinTime(me); + me.maxTime=me.getMaxTime(me); + } + } + } + + Game.shimmerTypes={ + //in these, "me" refers to the shimmer itself, and "this" to the shimmer's type object + 'golden':{ + reset:function() + { + this.chain=0; + this.totalFromChain=0; + this.last=''; + }, + initFunc:function(me) + { + if (!this.spawned && me.force!='cookie storm drop' && Game.chimeType!=0 && Game.ascensionMode!=1) Game.playGoldenCookieChime(); + + //set image + var bgPic=Game.resPath+'img/goldCookie.png'; + var picX=0;var picY=0; + + + if ((!me.forceObj || !me.forceObj.noWrath) && ((me.forceObj && me.forceObj.wrath) || (Game.elderWrath==1 && Math.random()<1/3) || (Game.elderWrath==2 && Math.random()<2/3) || (Game.elderWrath==3) || (Game.hasGod && Game.hasGod('scorn')))) + { + me.wrath=1; + if (Game.season=='halloween') bgPic=Game.resPath+'img/spookyCookie.png'; + else bgPic=Game.resPath+'img/wrathCookie.png'; + } + else + { + me.wrath=0; + } + + if (Game.season=='valentines') + { + bgPic=Game.resPath+'img/hearts.png'; + picX=Math.floor(Math.random()*8); + } + else if (Game.season=='fools') + { + bgPic=Game.resPath+'img/contract.png'; + if (me.wrath) bgPic=Game.resPath+'img/wrathContract.png'; + } + else if (Game.season=='easter') + { + bgPic=Game.resPath+'img/bunnies.png'; + picX=Math.floor(Math.random()*4); + picY=0; + if (me.wrath) picY=1; + } + + me.x=Math.floor(Math.random()*Math.max(0,(Game.bounds.right-300)-Game.bounds.left-128)+Game.bounds.left+64)-64; + me.y=Math.floor(Math.random()*Math.max(0,Game.bounds.bottom-Game.bounds.top-128)+Game.bounds.top+64)-64; + me.l.style.left=me.x+'px'; + me.l.style.top=me.y+'px'; + me.l.style.width='96px'; + me.l.style.height='96px'; + me.l.style.backgroundImage='url('+bgPic+')'; + me.l.style.backgroundPosition=(-picX*96)+'px '+(-picY*96)+'px'; + me.l.style.opacity='0'; + me.l.style.display='block'; + me.l.setAttribute('alt',loc(me.wrath?"Wrath cookie":"Golden cookie")); + + me.life=1;//the cookie's current progression through its lifespan (in frames) + me.dur=13;//duration; the cookie's lifespan in seconds before it despawns + + var dur=13; + if (Game.Has('Lucky day')) dur*=2; + if (Game.Has('Serendipity')) dur*=2; + if (Game.Has('Decisive fate')) dur*=1.05; + if (Game.Has('Lucky digit')) dur*=1.01; + if (Game.Has('Lucky number')) dur*=1.01; + if (Game.Has('Lucky payout')) dur*=1.01; + if (!me.wrath) dur*=Game.eff('goldenCookieDur'); + else dur*=Game.eff('wrathCookieDur'); + dur*=Math.pow(0.95,Game.shimmerTypes['golden'].n-1);//5% shorter for every other golden cookie on the screen + if (this.chain>0) dur=Math.max(2,10/this.chain);//this is hilarious + me.dur=dur; + me.life=Math.ceil(Game.fps*me.dur); + me.sizeMult=1; + }, + updateFunc:function(me) + { + var curve=1-Math.pow((me.life/(Game.fps*me.dur))*2-1,4); + me.l.style.opacity=curve; + //this line makes each golden cookie pulse in a unique way + if (Game.prefs.fancy) me.l.style.transform='rotate('+(Math.sin(me.id*0.69)*24+Math.sin(Game.T*(0.35+Math.sin(me.id*0.97)*0.15)+me.id/*+Math.sin(Game.T*0.07)*2+2*/)*(3+Math.sin(me.id*0.36)*2))+'deg) scale('+(me.sizeMult*(1+Math.sin(me.id*0.53)*0.2)*curve*(1+(0.06+Math.sin(me.id*0.41)*0.05)*(Math.sin(Game.T*(0.25+Math.sin(me.id*0.73)*0.15)+me.id))))+')'; + me.life--; + if (me.life<=0) {this.missFunc(me);me.die();} + }, + popFunc:function(me) + { + //get achievs and stats + if (me.spawnLead) + { + Game.goldenClicks++; + Game.goldenClicksLocal++; + + if (Game.goldenClicks>=1) Game.Win('Golden cookie'); + if (Game.goldenClicks>=7) Game.Win('Lucky cookie'); + if (Game.goldenClicks>=27) Game.Win('A stroke of luck'); + if (Game.goldenClicks>=77) Game.Win('Fortune'); + if (Game.goldenClicks>=777) Game.Win('Leprechaun'); + if (Game.goldenClicks>=7777) Game.Win('Black cat\'s paw'); + if (Game.goldenClicks>=27777) Game.Win('Seven horseshoes'); + + if (Game.goldenClicks>=7) Game.Unlock('Lucky day'); + if (Game.goldenClicks>=27) Game.Unlock('Serendipity'); + if (Game.goldenClicks>=77) Game.Unlock('Get lucky'); + + if ((me.life/Game.fps)>(me.dur-1)) Game.Win('Early bird'); + if (me.life0) list.push('clot','multiply cookies','ruin cookies'); + else list.push('frenzy','multiply cookies'); + if (me.wrath>0 && Game.hasGod && Game.hasGod('scorn')) list.push('clot','ruin cookies','clot','ruin cookies'); + if (me.wrath>0 && Math.random()<0.3) list.push('blood frenzy','chain cookie','cookie storm'); + else if (Math.random()<0.03 && Game.cookiesEarned>=100000) list.push('chain cookie','cookie storm'); + if (Math.random()<0.05 && Game.season=='fools') list.push('everything must go'); + if (Math.random()<0.1 && (Math.random()<0.05 || !Game.hasBuff('Dragonflight'))) list.push('click frenzy'); + if (me.wrath && Math.random()<0.1) list.push('cursed finger'); + + if (Game.BuildingsOwned>=10 && Math.random()<0.25) list.push('building special'); + + if (Game.canLumps() && Math.random()<0.0005) list.push('free sugar lump'); + + if ((me.wrath==0 && Math.random()<0.15) || Math.random()<0.05) + { + //if (Game.hasAura('Reaper of Fields')) list.push('dragon harvest'); + if (Math.random()0) choice='chain cookie'; + if (me.force!='') {this.chain=0;choice=me.force;me.force='';} + if (choice!='chain cookie') this.chain=0; + + this.last=choice; + + //create buff for effect + //buff duration multiplier + var effectDurMod=1; + if (Game.Has('Get lucky')) effectDurMod*=2; + if (Game.Has('Lasting fortune')) effectDurMod*=1.1; + if (Game.Has('Lucky digit')) effectDurMod*=1.01; + if (Game.Has('Lucky number')) effectDurMod*=1.01; + if (Game.Has('Green yeast digestives')) effectDurMod*=1.01; + if (Game.Has('Lucky payout')) effectDurMod*=1.01; + //if (Game.hasAura('Epoch Manipulator')) effectDurMod*=1.05; + effectDurMod*=1+Game.auraMult('Epoch Manipulator')*0.05; + if (!me.wrath) effectDurMod*=Game.eff('goldenCookieEffDur'); + else effectDurMod*=Game.eff('wrathCookieEffDur'); + + if (Game.hasGod) + { + var godLvl=Game.hasGod('decadence'); + if (godLvl==1) effectDurMod*=1.07; + else if (godLvl==2) effectDurMod*=1.05; + else if (godLvl==3) effectDurMod*=1.02; + } + + //effect multiplier (from lucky etc) + var mult=1; + //if (me.wrath>0 && Game.hasAura('Unholy Dominion')) mult*=1.1; + //else if (me.wrath==0 && Game.hasAura('Ancestral Metamorphosis')) mult*=1.1; + if (me.wrath>0) mult*=1+Game.auraMult('Unholy Dominion')*0.1; + else if (me.wrath==0) mult*=1+Game.auraMult('Ancestral Metamorphosis')*0.1; + if (Game.Has('Green yeast digestives')) mult*=1.01; + if (Game.Has('Dragon fang')) mult*=1.03; + if (!me.wrath) mult*=Game.eff('goldenCookieGain'); + else mult*=Game.eff('wrathCookieGain'); + + var popup=''; + var buff=0; + + if (choice=='building special') + { + var time=Math.ceil(30*effectDurMod); + var list=[]; + for (var i in Game.Objects) + { + if (Game.Objects[i].amount>=10) list.push(Game.Objects[i].id); + } + if (list.length==0) {choice='frenzy';}//default to frenzy if no proper building + else + { + var obj=choose(list); + var pow=Game.ObjectsById[obj].amount/10+1; + if (me.wrath && Math.random()<0.3) + { + buff=Game.gainBuff('building debuff',time,pow,obj); + } + else + { + buff=Game.gainBuff('building buff',time,pow,obj); + } + } + } + + if (choice=='free sugar lump') + { + Game.gainLumps(1); + popup=loc("Sweet!
Found 1 sugar lump!"); + } + else if (choice=='frenzy') + { + buff=Game.gainBuff('frenzy',Math.ceil(77*effectDurMod),7); + } + else if (choice=='dragon harvest') + { + buff=Game.gainBuff('dragon harvest',Math.ceil(60*effectDurMod),15); + } + else if (choice=='everything must go') + { + buff=Game.gainBuff('everything must go',Math.ceil(8*effectDurMod),5); + } + else if (choice=='multiply cookies') + { + var moni=mult*Math.min(Game.cookies*0.15,Game.cookiesPs*60*15)+13;//add 15% to cookies owned (+13), or 15 minutes of cookie production - whichever is lowest + Game.Earn(moni); + popup=loc("Lucky!")+'
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+''; + } + else if (choice=='ruin cookies') + { + var moni=Math.min(Game.cookies*0.05,Game.cookiesPs*60*10)+13;//lose 5% of cookies owned (-13), or 10 minutes of cookie production - whichever is lowest + moni=Math.min(Game.cookies,moni); + Game.Spend(moni); + popup=loc("Ruin!")+'
'+loc("Lost %1!",loc("%1 cookie",LBeautify(moni)))+''; + } + else if (choice=='blood frenzy') + { + buff=Game.gainBuff('blood frenzy',Math.ceil(6*effectDurMod),666); + } + else if (choice=='clot') + { + buff=Game.gainBuff('clot',Math.ceil(66*effectDurMod),0.5); + } + else if (choice=='cursed finger') + { + buff=Game.gainBuff('cursed finger',Math.ceil(10*effectDurMod),Game.cookiesPs*Math.ceil(10*effectDurMod)); + } + else if (choice=='click frenzy') + { + buff=Game.gainBuff('click frenzy',Math.ceil(13*effectDurMod),777); + } + else if (choice=='dragonflight') + { + buff=Game.gainBuff('dragonflight',Math.ceil(10*effectDurMod),1111); + if (Math.random()<0.8) Game.killBuff('Click frenzy'); + } + else if (choice=='chain cookie') + { + //fix by Icehawk78 + if (this.chain==0) this.totalFromChain=0; + this.chain++; + var digit=me.wrath?6:7; + if (this.chain==1) this.chain+=Math.max(0,Math.ceil(Math.log(Game.cookies)/Math.LN10)-10); + + var maxPayout=Math.min(Game.cookiesPs*60*60*6,Game.cookies*0.5)*mult; + var moni=Math.max(digit,Math.min(Math.floor(1/9*Math.pow(10,this.chain)*digit*mult),maxPayout)); + var nextMoni=Math.max(digit,Math.min(Math.floor(1/9*Math.pow(10,this.chain+1)*digit*mult),maxPayout)); + this.totalFromChain+=moni; + + //break the chain if we're above 5 digits AND it's more than 50% of our bank, it grants more than 6 hours of our CpS, or just a 1% chance each digit (update : removed digit limit) + if (Math.random()<0.01 || nextMoni>=maxPayout) + { + this.chain=0; + popup=loc("Cookie chain")+'
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+'
'+loc("Cookie chain over. You made %1.",loc("%1 cookie",LBeautify(this.totalFromChain)))+'
'; + } + else + { + popup=loc("Cookie chain")+'
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+''; + } + Game.Earn(moni); + } + else if (choice=='cookie storm') + { + buff=Game.gainBuff('cookie storm',Math.ceil(7*effectDurMod),7); + } + else if (choice=='cookie storm drop') + { + var moni=Math.max(mult*(Game.cookiesPs*60*Math.floor(Math.random()*7+1)),Math.floor(Math.random()*7+1));//either 1-7 cookies or 1-7 minutes of cookie production, whichever is highest + Game.Earn(moni); + popup='
'+loc("+%1!",loc('%1 cookie',LBeautify(moni)))+'
'; + } + else if (choice=='blab')//sorry (it's really rare) + { + var str=EN?(choose([ + 'Cookie crumbliness x3 for 60 seconds!', + 'Chocolatiness x7 for 77 seconds!', + 'Dough elasticity halved for 66 seconds!', + 'Golden cookie shininess doubled for 3 seconds!', + 'World economy halved for 30 seconds!', + 'Grandma kisses 23% stingier for 45 seconds!', + 'Thanks for clicking!', + 'Fooled you! This one was just a test.', + 'Golden cookies clicked +1!', + 'Your click has been registered. Thank you for your cooperation.', + 'Thanks! That hit the spot!', + 'Thank you. A team has been dispatched.', + 'They know.', + 'Oops. This was just a chocolate cookie with shiny aluminium foil.', + 'Eschaton immanentized!', + 'Oh, that tickled!', + 'Again.', + 'You\'ve made a grave mistake.', + 'Chocolate chips reshuffled!', + 'Randomized chance card outcome!', + 'Mouse acceleration +0.03%!', + 'Ascension bonuses x5,000 for 0.1 seconds!', + 'Gained 1 extra!', + 'Sorry, better luck next time!', + 'I felt that.', + 'Nice try, but no.', + 'Wait, sorry, I wasn\'t ready yet.', + 'Yippee!', + 'Bones removed.', + 'Organs added.', + 'Did you just click that?', + 'Huh? Oh, there was nothing there.', + 'You saw nothing.', + 'It seems you hallucinated that golden cookie.', + 'This golden cookie was a complete fabrication.', + 'In theory there\'s no wrong way to click a golden cookie, but you just did that, somehow.', + 'All cookies multiplied by 999!
All cookies divided by 999!', + 'Why?' + ])):choose(loc("Cookie blab")); + popup=str; + } + + if (popup=='' && buff && buff.name && buff.desc) popup=buff.dname+'
'+buff.desc+'
'; + if (popup!='') Game.Popup(popup,me.x+me.l.offsetWidth/2,me.y); + + Game.DropEgg(0.9); + + //sparkle and kill the shimmer + Game.SparkleAt(me.x+48,me.y+48); + if (choice=='cookie storm drop') + { + if (Game.prefs.cookiesound) PlaySound('snd/clickb'+Math.floor(Math.random()*7+1)+'.mp3',0.75); + else PlaySound('snd/click'+Math.floor(Math.random()*7+1)+'.mp3',0.75); + } + else PlaySound('snd/shimmerClick.mp3'); + me.die(); + }, + missFunc:function(me) + { + if (this.chain>0 && this.totalFromChain>0) + { + Game.Popup(loc("Cookie chain broken.
You made %1.",loc("%1 cookie",LBeautify(this.totalFromChain))),me.x+me.l.offsetWidth/2,me.y); + this.chain=0;this.totalFromChain=0; + } + if (me.spawnLead) Game.missedGoldenClicks++; + }, + spawnsOnTimer:true, + spawnConditions:function() + { + if (!Game.Has('Golden switch [off]')) return true; else return false; + }, + spawned:0, + time:0, + minTime:0, + maxTime:0, + getTimeMod:function(me,m) + { + if (Game.Has('Lucky day')) m/=2; + if (Game.Has('Serendipity')) m/=2; + if (Game.Has('Golden goose egg')) m*=0.95; + if (Game.Has('Heavenly luck')) m*=0.95; + if (Game.Has('Green yeast digestives')) m*=0.99; + //if (Game.hasAura('Arcane Aura')) m*=0.95; + m*=1-Game.auraMult('Arcane Aura')*0.05; + if (Game.hasBuff('Sugar blessing')) m*=0.9; + if (Game.season=='easter' && Game.Has('Starspawn')) m*=0.98; + else if (Game.season=='halloween' && Game.Has('Starterror')) m*=0.98; + else if (Game.season=='valentines' && Game.Has('Starlove')) m*=0.98; + else if (Game.season=='fools' && Game.Has('Startrade')) m*=0.95; + if (!me.wrath) m*=1/Game.eff('goldenCookieFreq'); + else m*=1/Game.eff('wrathCookieFreq'); + if (Game.hasGod) + { + var godLvl=Game.hasGod('industry'); + if (godLvl==1) m*=1.1; + else if (godLvl==2) m*=1.06; + else if (godLvl==3) m*=1.03; + var godLvl=Game.hasGod('mother'); + if (godLvl==1) m*=1.15; + else if (godLvl==2) m*=1.1; + else if (godLvl==3) m*=1.05; + + if (Game.season!='') + { + var godLvl=Game.hasGod('seasons'); + if (Game.season!='fools') + { + if (godLvl==1) m*=0.97; + else if (godLvl==2) m*=0.98; + else if (godLvl==3) m*=0.99; + } + else + { + if (godLvl==1) m*=0.955; + else if (godLvl==2) m*=0.97; + else if (godLvl==3) m*=0.985; + } + } + } + if (this.chain>0) m=0.05; + if (Game.Has('Gold hoard')) m=0.01; + return Math.ceil(Game.fps*60*m); + }, + getMinTime:function(me) + { + var m=5; + return this.getTimeMod(me,m); + }, + getMaxTime:function(me) + { + var m=15; + return this.getTimeMod(me,m); + }, + last:'', + }, + 'reindeer':{ + reset:function() + { + }, + initFunc:function(me) + { + if (!this.spawned && Game.chimeType!=0 && Game.ascensionMode!=1) PlaySound('snd/jingle.mp3'); + + me.x=-128; + me.y=Math.floor(Math.random()*Math.max(0,Game.bounds.bottom-Game.bounds.top-256)+Game.bounds.top+128)-128; + //me.l.style.left=me.x+'px'; + //me.l.style.top=me.y+'px'; + me.l.style.width='167px'; + me.l.style.height='212px'; + me.l.style.backgroundImage='url('+Game.resPath+'img/frostedReindeer.png)'; + me.l.style.opacity='0'; + //me.l.style.transform='rotate('+(Math.random()*60-30)+'deg) scale('+(Math.random()*1+0.25)+')'; + me.l.style.display='block'; + me.l.setAttribute('alt',loc("Reindeer")); + + me.life=1;//the reindeer's current progression through its lifespan (in frames) + me.dur=4;//duration; the cookie's lifespan in seconds before it despawns + + var dur=4; + if (Game.Has('Weighted sleighs')) dur*=2; + dur*=Game.eff('reindeerDur'); + me.dur=dur; + me.life=Math.ceil(Game.fps*me.dur); + me.sizeMult=1; + }, + updateFunc:function(me) + { + var curve=1-Math.pow((me.life/(Game.fps*me.dur))*2-1,12); + me.l.style.opacity=curve; + me.l.style.transform='translate('+(me.x+(Game.bounds.right-Game.bounds.left)*(1-me.life/(Game.fps*me.dur)))+'px,'+(me.y-Math.abs(Math.sin(me.life*0.1))*128)+'px) rotate('+(Math.sin(me.life*0.2+0.3)*10)+'deg) scale('+(me.sizeMult*(1+Math.sin(me.id*0.53)*0.1))+')'; + me.life--; + if (me.life<=0) {this.missFunc(me);me.die();} + }, + popFunc:function(me) + { + //get achievs and stats + if (me.spawnLead) + { + Game.reindeerClicked++; + } + + var val=Game.cookiesPs*60; + if (Game.hasBuff('Elder frenzy')) val*=0.5;//very sorry + if (Game.hasBuff('Frenzy')) val*=0.75;//I sincerely apologize + var moni=Math.max(25,val);//1 minute of cookie production, or 25 cookies - whichever is highest + if (Game.Has('Ho ho ho-flavored frosting')) moni*=2; + moni*=Game.eff('reindeerGain'); + Game.Earn(moni); + if (Game.hasBuff('Elder frenzy')) Game.Win('Eldeer'); + + var cookie=''; + var failRate=0.8; + if (Game.HasAchiev('Let it snow')) failRate=0.6; + failRate*=1/Game.dropRateMult(); + if (Game.Has('Starsnow')) failRate*=0.95; + if (Game.hasGod) + { + var godLvl=Game.hasGod('seasons'); + if (godLvl==1) failRate*=0.9; + else if (godLvl==2) failRate*=0.95; + else if (godLvl==3) failRate*=0.97; + } + if (Math.random()>failRate)//christmas cookie drops + { + cookie=choose(['Christmas tree biscuits','Snowflake biscuits','Snowman biscuits','Holly biscuits','Candy cane biscuits','Bell biscuits','Present biscuits']); + if (!Game.HasUnlocked(cookie) && !Game.Has(cookie)) + { + Game.Unlock(cookie); + } + else cookie=''; + } + + var popup=''; + + Game.Notify(loc("You found %1!",choose(loc("Reindeer names"))),loc("The reindeer gives you %1.",loc("%1 cookie",LBeautify(moni)))+(cookie==''?'':'
'+loc("You are also rewarded with %1!",Game.Upgrades[cookie].dname)),[12,9],6); + popup='
'+loc("+%1!",loc("%1 cookie",LBeautify(moni)))+'
'; + + if (popup!='') Game.Popup(popup,Game.mouseX,Game.mouseY); + + //sparkle and kill the shimmer + Game.SparkleAt(Game.mouseX,Game.mouseY); + PlaySound('snd/jingleClick.mp3'); + me.die(); + }, + missFunc:function(me) + { + }, + spawnsOnTimer:true, + spawnConditions:function() + { + if (Game.season=='christmas') return true; else return false; + }, + spawned:0, + time:0, + minTime:0, + maxTime:0, + getTimeMod:function(me,m) + { + if (Game.Has('Reindeer baking grounds')) m/=2; + if (Game.Has('Starsnow')) m*=0.95; + if (Game.hasGod) + { + var godLvl=Game.hasGod('seasons'); + if (godLvl==1) m*=0.9; + else if (godLvl==2) m*=0.95; + else if (godLvl==3) m*=0.97; + } + m*=1/Game.eff('reindeerFreq'); + if (Game.Has('Reindeer season')) m=0.01; + return Math.ceil(Game.fps*60*m); + }, + getMinTime:function(me) + { + var m=3; + return this.getTimeMod(me,m); + }, + getMaxTime:function(me) + { + var m=6; + return this.getTimeMod(me,m); + }, + } + }; + + Game.goldenCookieChoices=[ + "Frenzy","frenzy", + "Lucky","multiply cookies", + "Ruin","ruin cookies", + "Elder frenzy","blood frenzy", + "Clot","clot", + "Click frenzy","click frenzy", + "Cursed finger","cursed finger", + "Cookie chain","chain cookie", + "Cookie storm","cookie storm", + "Building special","building special", + "Dragon Harvest","dragon harvest", + "Dragonflight","dragonflight", + "Sweet","free sugar lump", + "Blab","blab" + ]; + Game.goldenCookieBuildingBuffs={ + 'Cursor':['High-five','Slap to the face'], + 'Grandma':['Congregation','Senility'], + 'Farm':['Luxuriant harvest','Locusts'], + 'Mine':['Ore vein','Cave-in'], + 'Factory':['Oiled-up','Jammed machinery'], + 'Bank':['Juicy profits','Recession'], + 'Temple':['Fervent adoration','Crisis of faith'], + 'Wizard tower':['Manabloom','Magivores'], + 'Shipment':['Delicious lifeforms','Black holes'], + 'Alchemy lab':['Breakthrough','Lab disaster'], + 'Portal':['Righteous cataclysm','Dimensional calamity'], + 'Time machine':['Golden ages','Time jam'], + 'Antimatter condenser':['Extra cycles','Predictable tragedy'], + 'Prism':['Solar flare','Eclipse'], + 'Chancemaker':['Winning streak','Dry spell'], + 'Fractal engine':['Macrocosm','Microcosm'], + 'Javascript console':['Refactoring','Antipattern'], + 'Idleverse':['Cosmic nursery','Big crunch'], + 'Cortex baker':['Brainstorm','Brain freeze'], + 'You':['Deduplication','Clone strike'], + }; + + /*===================================================================================== + PARTICLES + =======================================================================================*/ + //generic particles (falling cookies etc) + //only displayed on left section + Game.particles=[]; + Game.particlesN=50; + for (var i=0;i=Game.fps*me.dur) + { + me.life=-1; + } + } + } + } + Game.particleAdd=function(x,y,xd,yd,size,dur,z,pic,text) + { + //Game.particleAdd(pos X,pos Y,speed X,speed Y,size (multiplier),duration (seconds),layer,picture,text); + //pick the first free (or the oldest) particle to replace it + if (true)//Game.prefs.particles) + { + var highest=0; + var highestI=0; + for (var i=0;ihighest) + { + highest=Game.particles[i].life; + highestI=i; + } + } + var auto=0; + if (x) auto=1; + var i=highestI; + var x=x||-64; + if (Game.LeftBackground && !auto) x=Math.floor(Math.random()*Game.LeftBackground.canvas.width); + var y=y||-64; + var me=Game.particles[i]; + me.life=0; + me.x=x; + me.y=y; + me.xd=xd||0; + me.yd=yd||0; + me.size=size||1; + me.z=z||0; + me.dur=dur||2; + me.r=Math.floor(Math.random()*360); + me.picId=Math.floor(Math.random()*10000); + if (!pic) + { + if (Game.season=='fools') pic='smallDollars.png'; + else + { + var cookies=[[10,0]]; + for (var i in Game.Upgrades) + { + var cookie=Game.Upgrades[i]; + if (cookie.bought>0 && cookie.pool=='cookie') cookies.push(cookie.icon); + } + me.picPos=choose(cookies); + if (Game.bakeryName.toLowerCase()=='ortiel' || Math.random()<1/10000) me.picPos=[17,5]; + pic='icons.png'; + } + } + else if (typeof pic!=='string'){me.picPos=pic;pic='icons.png';} + me.pic=pic||'smallCookies.png'; + me.text=text||0; + return me; + } + return {}; + } + Game.particlesDraw=function(z) + { + var ctx=Game.LeftBackground; + ctx.fillStyle='#fff'; + ctx.font='20px Merriweather'; + ctx.textAlign='center'; + + for (var i=0;i'; + } + l('particles').innerHTML=str; + Game.textParticlesUpdate=function() + { + for (var i in Game.textParticles) + { + var me=Game.textParticles[i]; + if (me.life!=-1) + { + me.life++; + if (me.life>=Game.fps*4) + { + var el=me.l; + me.life=-1; + el.style.opacity=0; + el.style.display='none'; + } + } + } + } + Game.textParticlesAdd=function(text,el,posX,posY) + { + //pick the first free (or the oldest) particle to replace it + var highest=0; + var highestI=0; + for (var i in Game.textParticles) + { + if (Game.textParticles[i].life==-1) {highestI=i;break;} + if (Game.textParticles[i].life>highest) + { + highest=Game.textParticles[i].life; + highestI=i; + } + } + var i=highestI; + var noStack=0; + if (typeof posX!=='undefined' && typeof posY!=='undefined') + { + x=posX; + y=posY; + noStack=1; + } + else + { + var x=(Math.random()-0.5)*40; + var y=0;//+(Math.random()-0.5)*40; + if (!el) + { + var rect=Game.bounds; + var x=Math.floor((rect.left+rect.right)/2); + var y=Math.floor((rect.bottom))-(Game.mobile*64); + x+=(Math.random()-0.5)*40; + y+=0;//(Math.random()-0.5)*40; + } + } + if (!noStack) y-=Game.textParticlesY; + + x=Math.max(Game.bounds.left+200,x); + x=Math.min(Game.bounds.right-200,x); + y=Math.max(Game.bounds.top+32+(App?32:0),y); + + var me=Game.textParticles[i]; + if (!me.l) me.l=l('particle'+i); + me.life=0; + me.x=x; + me.y=y; + me.text=text; + me.l.innerHTML=text; + me.l.style.left=Math.floor(Game.textParticles[i].x-200)+'px'; + me.l.style.bottom=Math.floor(-Game.textParticles[i].y)+'px'; + for (var ii in Game.textParticles) + {if (ii!=i) (Game.textParticles[ii].l||l('particle'+ii)).style.zIndex=100000000;} + me.l.style.zIndex=100000001; + me.l.style.display='block'; + me.l.className='particle title'; + void me.l.offsetWidth; + me.l.className='particle title risingUpLinger'; + if (!noStack) Game.textParticlesY+=60; + } + Game.popups=1; + Game.Popup=function(text,x,y) + { + if (Game.popups) Game.textParticlesAdd(text,0,x,y); + } + + //display sparkles at a set position + Game.sparkles=l('sparkles'); + Game.sparklesT=0; + Game.sparklesFrames=16; + Game.SparkleAt=function(x,y) + { + if (Game.blendModesOn) + { + Game.sparklesT=Game.sparklesFrames+1; + Game.sparkles.style.backgroundPosition='0px 0px'; + Game.sparkles.style.left=Math.floor(x-64)+'px'; + Game.sparkles.style.top=Math.floor(y-64)+'px'; + Game.sparkles.style.display='block'; + } + } + Game.SparkleOn=function(el) + { + var rect=el.getBounds(); + Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24); + } + + /*===================================================================================== + NOTIFICATIONS + =======================================================================================*/ + //maybe do all this mess with proper DOM instead of rewriting the innerHTML + Game.Notes=[]; + Game.NotesById=[]; + Game.noteId=0; + Game.noteL=l('notes'); + Game.Note=function(title,desc,pic,quick) + { + this.title=title; + this.desc=desc||''; + this.pic=pic||''; + this.id=Game.noteId; + this.date=Date.now(); + this.quick=quick||0; + this.life=(this.quick||1)*Game.fps; + this.l=0; + this.height=0; + this.tooltip=0; + Game.noteId++; + Game.NotesById[this.id]=this; + Game.Notes.unshift(this); + if (Game.Notes.length>50) Game.Notes.pop(); + //Game.Notes.push(this); + //if (Game.Notes.length>50) Game.Notes.shift(); + Game.UpdateNotes(); + } + Game.CloseNote=function(id) + { + var me=Game.NotesById[id]; + if (Game.tooltip.from && Game.tooltip.from.id.indexOf('note-')==0) Game.tooltip.hide(); + Game.Notes.splice(Game.Notes.indexOf(me),1); + //Game.NotesById.splice(Game.NotesById.indexOf(me),1); + Game.NotesById[id]=null; + Game.UpdateNotes(); + } + Game.CloseNotes=function() + { + Game.Notes=[]; + Game.NotesById=[]; + Game.tooltip.hide(); + Game.UpdateNotes(); + } + Game.UpdateNotes=function() + { + var str=''; + var remaining=Game.Notes.length; + for (var i in Game.Notes) + { + if (i<5) + { + var me=Game.Notes[i]; + var pic=''; + if (me.pic!='') pic='
'; + str='
x
'+pic+'

'+me.title+'

'+(me.desc!=''?'
'+me.desc+'
':'')+'
'+str; + remaining--; + } + } + if (remaining>0) str='
'+loc("+%1 more notification.",LBeautify(remaining))+'
'+str; + if (Game.Notes.length>1) + { + str+='
x
'; + } + Game.noteL.innerHTML=str; + for (var i in Game.Notes) + { + me.l=0; + if (i<5) + { + var me=Game.Notes[i]; + me.l=l('note-'+me.id); + } + } + } + Game.NotesLogic=function() + { + for (var i in Game.Notes) + { + if (Game.Notes[i].quick>0) + { + var me=Game.Notes[i]; + me.life--; + if (me.life<=0) Game.CloseNote(me.id); + } + } + } + Game.NotesDraw=function() + { + for (var i in Game.Notes) + { + if (Game.Notes[i].quick>0) + { + var me=Game.Notes[i]; + if (me.l) + { + if (me.life<10) + { + me.l.style.opacity=(me.life/10); + } + } + } + } + } + Game.Notify=function(title,desc,pic,quick,noLog) + { + if (Game.prefs.notifs) + { + quick=Math.min(6,quick); + if (!quick) quick=6; + } + desc=replaceAll('==CLOSETHIS()==','Game.CloseNote('+Game.noteId+');',desc); + if (Game.popups) new Game.Note(title,desc,pic,quick); + if (!noLog) Game.AddToLog(''+title+' | '+desc); + } + Game.NotifyTooltip=function(content) + { + //attaches a tooltip to the last spawned note + if (!Game.NotesById[Game.noteId-1]) return false; + var me=Game.NotesById[Game.noteId-1]; + me.tooltip=content; + Game.UpdateNotes(); + } + + + /*===================================================================================== + PROMPT + =======================================================================================*/ + Game.darkenL=l('darken'); + AddEvent(Game.darkenL,'click',function(){if (Game.promptNoClose) {} else {Game.Click=0;PlaySound('snd/tickOff.mp3');Game.ClosePrompt();}}); + Game.promptL=l('promptContent'); + Game.promptAnchorL=l('promptAnchor'); + Game.promptWrapL=l('prompt'); + Game.promptConfirm=''; + Game.promptOn=0; + Game.promptUpdateFunc=0; + Game.promptOptionsN=0; + Game.promptOptionFocus=0; + Game.promptNoClose=false; + Game.UpdatePrompt=function() + { + if (Game.promptUpdateFunc) Game.promptUpdateFunc(); + Game.promptAnchorL.style.top=Math.floor((Game.windowH-Game.promptWrapL.offsetHeight)/2-16)+'px'; + } + Game.Prompt=function(content,options,updateFunc,style) + { + Game.promptNoClose=false; + if (updateFunc) Game.promptUpdateFunc=updateFunc; + if (style) Game.promptWrapL.className='framed '+style; else Game.promptWrapL.className='framed'; + var str=''; + str+=content; + if (str.indexOf('')); + str=str.substring(str.indexOf('>')+1); + str='
'+str+'
'; + } + if (str.indexOf('')!=-1) + { + str=str.replace('',''); + Game.promptNoClose=true; + } + var opts=''; + Game.promptOptionsN=0; + for (var i=0;i'+options[i][0]+''; + Game.promptOptionsN++; + } + } + Game.promptL.innerHTML=str+'
'+opts+'
'; + Game.promptAnchorL.style.display='block'; + Game.darkenL.style.display='block'; + Game.promptL.focus(); + Game.promptOn=1; + Game.promptOptionFocus=0; + Game.FocusPromptOption(0); + Game.UpdatePrompt(); + if (!Game.promptNoClose) l('promptClose').style.display='block'; else l('promptClose').style.display='none'; + } + Game.ClosePrompt=function() + { + if (!Game.promptOn) return false; + Game.promptAnchorL.style.display='none'; + Game.darkenL.style.display='none'; + Game.promptOn=0; + Game.promptUpdateFunc=0; + Game.promptOptionFocus=0; + Game.promptOptionsN=0; + Game.promptNoClose=false; + } + Game.ConfirmPrompt=function() + { + var el=l('promptOption'+Game.promptOptionFocus); + if (Game.promptOn && el && el.style.display!='none' && (' '+el.className+' ').indexOf(' disabled ')==-1) FireEvent(el,'click'); + } + Game.FocusPromptOption=function(dir,tryN) + { + var id=Game.promptOptionFocus+dir; + if (id<0) id=Game.promptOptionsN-1; + if (id>=Game.promptOptionsN) id=0; + while (id>=0 && id'+(Game.prefs[prefName]?on:off)+''; + } + Game.Toggle=function(prefName,button,on,off,invert) + { + if (Game.prefs[prefName]) + { + l(button).innerHTML=off; + Game.prefs[prefName]=0; + } + else + { + l(button).innerHTML=on; + Game.prefs[prefName]=1; + } + l(button).className='smallFancyButton prefButton option'+((Game.prefs[prefName]^invert)?'':' off'); + + } + Game.ToggleFancy=function() + { + if (Game.prefs.fancy) Game.removeClass('noFancy'); + else if (!Game.prefs.fancy) Game.addClass('noFancy'); + } + Game.ToggleFilters=function() + { + if (Game.prefs.filters) Game.removeClass('noFilters'); + else if (!Game.prefs.filters) Game.addClass('noFilters'); + } + Game.ToggleExtraButtons=function() + { + if (!Game.prefs.extraButtons) Game.removeClass('extraButtons'); + else if (Game.prefs.extraButtons) Game.addClass('extraButtons'); + for (var i in Game.Objects) + { + Game.Objects[i].mute(0); + } + } + Game.ToggleFullscreen=function() + { + if (App) App.setFullscreen(Game.prefs.fullscreen); + } + + Game.WriteSlider=function(slider,leftText,rightText,startValueFunction,callback) + { + if (!callback) callback=''; + return '
'+leftText+'
'+rightText.replace('[$]',startValueFunction())+'
'; + } + + Game.onPanel='Left'; + Game.addClass('focus'+Game.onPanel); + Game.ShowPanel=function(what) + { + if (!what) what=''; + if (Game.onPanel!=what) + { + Game.removeClass('focus'+Game.onPanel); + Game.addClass('focus'+what); + } + Game.onPanel=what; + } + + Game.onMenu=''; + Game.ShowMenu=function(what) + { + if (!what || what=='') what=Game.onMenu; + if (Game.onMenu=='' && what!='') Game.addClass('onMenu'); + else if (Game.onMenu!='' && what!=Game.onMenu) Game.addClass('onMenu'); + else if (what==Game.onMenu) {Game.removeClass('onMenu');what='';} + //if (what=='log') l('donateBox').className='on'; else l('donateBox').className=''; + Game.onMenu=what; + + l('prefsButton').className=(Game.onMenu=='prefs')?'panelButton selected':'panelButton'; + l('statsButton').className=(Game.onMenu=='stats')?'panelButton selected':'panelButton'; + l('logButton').className=(Game.onMenu=='log')?'panelButton selected':'panelButton'; + + if (Game.onMenu=='') PlaySound('snd/clickOff2.mp3'); + else PlaySound('snd/clickOn2.mp3'); + + Game.UpdateMenu(); + + if (what=='') + { + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (me.minigame && me.minigame.onResize) me.minigame.onResize(); + } + } + } + Game.sayTime=function(time,detail) + { + //time is a value where one second is equal to Game.fps (30). + //detail skips days when >1, hours when >2, minutes when >3 and seconds when >4. + //if detail is -1, output something like "3 hours, 9 minutes, 48 seconds" + if (time<=0) return ''; + var str=''; + var detail=detail||0; + time=Math.floor(time); + if (detail==-1) + { + //var months=0; + var days=0; + var hours=0; + var minutes=0; + var seconds=0; + //if (time>=Game.fps*60*60*24*30) months=(Math.floor(time/(Game.fps*60*60*24*30))); + if (time>=Game.fps*60*60*24) days=(Math.floor(time/(Game.fps*60*60*24))); + if (time>=Game.fps*60*60) hours=(Math.floor(time/(Game.fps*60*60))); + if (time>=Game.fps*60) minutes=(Math.floor(time/(Game.fps*60))); + if (time>=Game.fps) seconds=(Math.floor(time/(Game.fps))); + //days-=months*30; + hours-=days*24; + minutes-=hours*60+days*24*60; + seconds-=minutes*60+hours*60*60+days*24*60*60; + if (days>10) {hours=0;} + if (days) {minutes=0;seconds=0;} + if (hours) {seconds=0;} + var bits=[]; + //if (months>0) bits.push(Beautify(months)+' month'+(days==1?'':'s')); + if (days>0) bits.push(loc("%1 day",LBeautify(days))); + if (hours>0) bits.push(loc("%1 hour",LBeautify(hours))); + if (minutes>0) bits.push(loc("%1 minute",LBeautify(minutes))); + if (seconds>0) bits.push(loc("%1 second",LBeautify(seconds))); + if (bits.length==0) str=loc("less than 1 second"); + else str=bits.join(', '); + /*//if (months>0) bits.push(Beautify(months)+' month'+(days==1?'':'s')); + if (days>0) bits.push(Beautify(days)+' day'+(days==1?'':'s')); + if (hours>0) bits.push(Beautify(hours)+' hour'+(hours==1?'':'s')); + if (minutes>0) bits.push(Beautify(minutes)+' minute'+(minutes==1?'':'s')); + if (seconds>0) bits.push(Beautify(seconds)+' second'+(seconds==1?'':'s')); + if (bits.length==0) str='less than 1 second'; + else str=bits.join(', ');*/ + } + else + { + /*if (time>=Game.fps*60*60*24*30*2 && detail<1) str=Beautify(Math.floor(time/(Game.fps*60*60*24*30)))+' months'; + else if (time>=Game.fps*60*60*24*30 && detail<1) str='1 month'; + else */if (time>=Game.fps*60*60*24 && detail<2) str=loc("%1 day",LBeautify(Math.floor(time/(Game.fps*60*60*24))));//Beautify(Math.floor(time/(Game.fps*60*60*24)))+' days'; + else if (time>=Game.fps*60*60 && detail<3) str=loc("%1 hour",LBeautify(Math.floor(time/(Game.fps*60*60))));//Beautify(Math.floor(time/(Game.fps*60*60)))+' hours'; + else if (time>=Game.fps*60 && detail<4) str=loc("%1 minute",LBeautify(Math.floor(time/(Game.fps*60))));//Beautify(Math.floor(time/(Game.fps*60)))+' minutes'; + else if (time>=Game.fps && detail<5) str=loc("%1 second",LBeautify(Math.floor(time/(Game.fps))));//Beautify(Math.floor(time/(Game.fps)))+' seconds'; + else str=loc("less than 1 second"); + } + return str; + } + + Game.tinyCookie=function() + { + if (!Game.HasAchiev('Tiny cookie')) + { + return '
'; + } + return ''; + } + Game.ClickTinyCookie=function(){if (!Game.HasAchiev('Tiny cookie')){PlaySound('snd/tick.mp3');Game.Win('Tiny cookie');}} + + Game.setVolume=function(what) + { + Game.volume=what; + /*for (var i in Sounds) + { + Sounds[i].volume=Game.volume; + }*/ + } + Game.setVolumeMusic=function(what) + { + Game.volumeMusic=what; + if (Music) Music.setVolume(what/100); + } + Game.setWubMusic=function(what) + { + if (Music) Music.setFilter(what/100); + } + + Game.showLangSelection=function(firstLaunch) + { + var str=''; + for (var i in Langs) + { + var lang=Langs[i]; + str+='
'+lang.name+'
'; + } + Game.Prompt(''+(firstLaunch?'':'')+'

'+loc("Change language")+'

'+ + '
'+ + (firstLaunch?'':'
('+loc("note: this will save and reload your game")+')
')+ + str, + (firstLaunch?0:[loc("Cancel")])); + + for (var i in Langs) + { + var lang=Langs[i]; + AddEvent(l('langSelect-'+i),'click',function(lang){return function(){ + if (true)//lang!=locId) + { + PlaySound('snd/tick.mp3'); + localStorageSet('CookieClickerLang',lang); + Game.toSave=true; + Game.toReload=true; + } + };}(i)); + AddEvent(l('langSelect-'+i),'mouseover',function(lang){return function(){ + PlaySound('snd/smallTick.mp3',0.75); + l('languageSelectHeader').innerHTML=Langs[lang].changeLanguage; + };}(i)); + } + } + + ON=' '+loc("ON"); + OFF=' '+loc("OFF"); + Game.UpdateMenu=function() + { + var str=''; + if (Game.onMenu!='') + { + str+=''; + //str+='
X
'; + } + if (Game.onMenu=='prefs') + { + str+='
'+loc("Options")+'
'; + + str+= + ''+ + '
'+loc("Language: %1",''+Langs[locId].name+'')+'
'+(!EN?'Change language
':'')+loc("Change language")+'
'+ + (App?'':'')+ + '
'+loc("Save")+'
'+ + '
'+loc("Export save")+''+loc("Import save")+'
'+ + (!App?('
'+loc("Save to file")+''+loc("Load from file")+'
'):'')+ + '
'+loc("Wipe save")+'
'+ + + ''+ + ''+ + '
'+ + '
'+ + + '
'+loc("Settings")+'
'+ + ((App && App.writeCloudUI)?App.writeCloudUI():'')+ + '
'+ + Game.WriteSlider('volumeSlider',loc("Volume"),'[$]%',function(){return Game.volume;},'Game.setVolume(Math.round(l(\'volumeSlider\').value));l(\'volumeSliderRightText\').innerHTML=Game.volume+\'%\';')+ + (App?Game.WriteSlider('volumeMusicSlider',loc("Volume (music)"),'[$]%',function(){return Game.volumeMusic;},'Game.setVolumeMusic(Math.round(l(\'volumeMusicSlider\').value));l(\'volumeMusicSliderRightText\').innerHTML=Game.volumeMusic+\'%\';'):'')+ + /*(App?Game.WriteSlider('wubMusicSlider',loc("Wub"),'[$]%',function(){return 100;},'Game.setWubMusic(Math.round(l(\'wubMusicSlider\').value));l(\'wubMusicSliderRightText\').innerHTML=(Math.round(l(\'wubMusicSlider\').value))+\'%\';'):'')+*/ + '
'+ + (App?Game.WritePrefButton('bgMusic','bgMusicButton',loc("Music in background")+ON,loc("Music in background")+OFF,'')+'
':'')+ + (App?Game.WritePrefButton('fullscreen','fullscreenButton',loc("Fullscreen")+ON,loc("Fullscreen")+OFF,'Game.ToggleFullscreen();')+'
':'')+ + Game.WritePrefButton('fancy','fancyButton',loc("Fancy graphics")+ON,loc("Fancy graphics")+OFF,'Game.ToggleFancy();')+'
'+ + Game.WritePrefButton('filters','filtersButton',loc("CSS filters")+ON,loc("CSS filters")+OFF,'Game.ToggleFilters();')+'
'+ + Game.WritePrefButton('particles','particlesButton',loc("Particles")+ON,loc("Particles")+OFF)+(EN?'':'')+'
'+ + Game.WritePrefButton('numbers','numbersButton',loc("Numbers")+ON,loc("Numbers")+OFF)+'
'+ + Game.WritePrefButton('milk','milkButton',loc("Milk [setting]")+ON,loc("Milk [setting]")+OFF)+(EN?'':'')+'
'+ + Game.WritePrefButton('cursors','cursorsButton',loc("Cursors [setting]")+ON,loc("Cursors [setting]")+OFF)+'
'+ + Game.WritePrefButton('wobbly','wobblyButton',loc("Wobbly cookie")+ON,loc("Wobbly cookie")+OFF)+(EN?'':'')+'
'+ + Game.WritePrefButton('cookiesound','cookiesoundButton',loc("Alt cookie sound")+ON,loc("Alt cookie sound")+OFF)+(EN?'':'')+'
'+ + Game.WritePrefButton('crates','cratesButton',loc("Icon crates")+ON,loc("Icon crates")+OFF)+'
'+ + Game.WritePrefButton('monospace','monospaceButton',loc("Alt font")+ON,loc("Alt font")+OFF)+'
'+ + Game.WritePrefButton('format','formatButton',loc("Short numbers")+OFF,loc("Short numbers")+ON,'BeautifyAll();Game.RefreshStore();Game.upgradesToRebuild=1;',1)+(EN?'':'')+'
'+ + Game.WritePrefButton('notifs','notifsButton',loc("Fast notes")+ON,loc("Fast notes")+OFF)+'
'+ + //Game.WritePrefButton('autoupdate','autoupdateButton','Offline mode OFF','Offline mode ON',0,1)+'
'+ + (!App?Game.WritePrefButton('warn','warnButton',loc("Closing warning")+ON,loc("Closing warning")+OFF)+'
':'')+ + //Game.WritePrefButton('focus','focusButton',loc("Defocus")+OFF,loc("Defocus")+ON,0,1)+'
'+ + Game.WritePrefButton('extraButtons','extraButtonsButton',loc("Extra buttons")+ON,loc("Extra buttons")+OFF,'Game.ToggleExtraButtons();')+'
'+ + Game.WritePrefButton('askLumps','askLumpsButton',loc("Lump confirmation")+ON,loc("Lump confirmation")+OFF)+'
'+ + (!App?Game.WritePrefButton('customGrandmas','customGrandmasButton',loc("Custom grandmas")+ON,loc("Custom grandmas")+OFF)+'
':'')+ + Game.WritePrefButton('notScary','notScaryButton',loc("Scary stuff")+OFF,loc("Scary stuff")+ON,0,1)+'
'+ + Game.WritePrefButton('timeout','timeoutButton',loc("Sleep mode timeout")+ON,loc("Sleep mode timeout")+OFF)+'
'+ + Game.WritePrefButton('screenreader','screenreaderButton',loc("Screen reader mode")+ON,loc("Screen reader mode")+OFF,'Game.toSave=true;Game.toReload=true;')+'
'+ + '
'+ + //'
'+Game.WritePrefButton('autosave','autosaveButton','Autosave ON','Autosave OFF')+'
'+ + (!App?'
'+loc("Check mod data")+'
':'')+ + + '
'+ + '
'+ + ''; + + if (App && App.writeModUI) + { + str+= + '
'+ + '
'+ + + '
'+loc("Mods")+'
'+ + App.writeModUI()+ + '
'+ + '
'; + } + + str+='
'; + } + else if (Game.onMenu=='log') + { + //str+=replaceAll('[bakeryName]',Game.bakeryName,Game.updateLog); + str+=Game.updateLog; + if (!Game.HasAchiev('Olden days')) str+='
'; + } + else if (Game.onMenu=='stats') + { + var buildingsOwned=0; + buildingsOwned=Game.BuildingsOwned; + var upgrades=''; + var cookieUpgrades=''; + var hiddenUpgrades=''; + var prestigeUpgrades=''; + var upgradesTotal=0; + var upgradesOwned=0; + var prestigeUpgradesTotal=0; + var prestigeUpgradesOwned=0; + + var list=[]; + //sort the upgrades + for (var i in Game.Upgrades){list.push(Game.Upgrades[i]);}//clone first + var sortMap=function(a,b) + { + if (a.order>b.order) return 1; + else if (a.orderb.order) return 1; + else if (a.order0) achievementsTotal++; + if (Game.CountsAsAchievementOwned(me.pool)) achievementsTotal++; + var pool=me.pool; + if (!achievements[pool]) achievements[pool]=''; + achievements[pool]+=Game.crate(me,'stats'); + + if (me.won) + { + if (Game.CountsAsAchievementOwned(me.pool)) achievementsOwned++; + else achievementsOwnedOther++; + } + } + + var achievementsStr=''; + var pools={ + 'dungeon':(EN?'Dungeon achievements (Not technically achievable yet.)':'???'), + 'shadow':''+loc("Shadow achievements")+' ('+loc("These are feats that are either unfair or difficult to attain. They do not give milk.")+')' + }; + for (var i in achievements) + { + if (achievements[i]!='') + { + if (pools[i]) achievementsStr+='
'+pools[i]+'
'; + achievementsStr+='
'+achievements[i]+'
'; + } + } + + var milkStr=''; + for (var i=0;i=i) + { + var milk=Game.Milks[i]; + milkStr+='

'+(loc("Rank %1",romanize(i+1))+' - '+milk.name)+'

('+(i==0?loc("starter milk"):loc("for %1 achievements",Beautify(i*25)))+')
' + ,'top')+' style="background:url('+Game.resPath+'img/icons.png?v='+Game.version+') '+(-milk.icon[0]*48)+'px '+(-milk.icon[1]*48)+'px;margin:2px 0px;" class="trophy">'; + } + } + milkStr+='
'; + + var santaStr=''; + var frames=15; + if (Game.Has('A festive hat')) + { + for (var i=0;i<=Game.santaLevel;i++) + { + santaStr+='

'+Game.santaLevels[i]+'

' + ,'top')+' style="background:url('+Game.resPath+'img/santa.png?v='+Game.version+') '+(-i*48)+'px 0px;background-size:'+(frames*48)+'px 48px;" class="trophy">'; + } + santaStr+='
'; + } + var dragonStr=''; + var frames=9; + var mainLevels=[0,4,8,Game.dragonLevels.length-3,Game.dragonLevels.length-2,Game.dragonLevels.length-1]; + if (Game.Has('A crumbly egg')) + { + for (var i=0;i<=mainLevels.length;i++) + { + if (Game.dragonLevel>=mainLevels[i]) + { + var level=Game.dragonLevels[mainLevels[i]]; + dragonStr+='
'+level.name+'
' + '

'+level.name+'

' + ,'top')+' style="background:url('+Game.resPath+'img/dragon.png?v='+Game.version+') '+(-level.pic*48)+'px 0px;background-size:'+(frames*48)+'px 48px;" class="trophy">'; + } + } + dragonStr+='
'; + } + var ascensionModeStr=''; + var icon=Game.ascensionModes[Game.ascensionMode].icon; + if (Game.resets>0) ascensionModeStr=''+Game.ascensionModes[Game.ascensionMode].desc+'' + ,'top')+'>
'+Game.ascensionModes[Game.ascensionMode].dname+'
'; + + var milkName=Game.Milk.name; + + var researchStr=Game.sayTime(Game.researchT,-1); + var pledgeStr=Game.sayTime(Game.pledgeT,-1); + var wrathStr=''; + if (Game.elderWrath==1) wrathStr=loc("awoken"); + else if (Game.elderWrath==2) wrathStr=loc("displeased"); + else if (Game.elderWrath==3) wrathStr=loc("angered"); + else if (Game.elderWrath==0 && Game.pledges>0) wrathStr=loc("appeased"); + + var dropMult=Game.dropRateMult(); + + var date=new Date(); + date.setTime(Date.now()-Game.startDate); + var timeInSeconds=date.getTime()/1000; + var startDate=Game.sayTime(timeInSeconds*Game.fps,-1); + date.setTime(Date.now()-Game.fullDate); + var fullDate=Game.sayTime(date.getTime()/1000*Game.fps,-1); + if (!Game.fullDate || !fullDate || fullDate.length<1) fullDate=loc("a long while"); + /*date.setTime(new Date().getTime()-Game.lastDate); + var lastDate=Game.sayTime(date.getTime()/1000*Game.fps,2);*/ + + var heavenlyMult=Game.GetHeavenlyMultiplier(); + + var seasonStr=Game.sayTime(Game.seasonT,-1); + + var giftStr=''; + if (Game.cookiesSent>0) giftStr+=''+loc("Cookies gifted:")+' '+Beautify(Game.cookiesSent); + if (Game.cookiesReceived>0) giftStr+=(Game.cookiesSent>0?' / ':'')+''+loc("Cookies received:")+' '+Beautify(Game.cookiesReceived); + + str+='
'+(EN?"Statistics":loc("Stats"))+'
'+ + '
'+ + '
'+loc("General")+ + '
'+ + '
'+ + '
'+loc("Cookies in bank:")+'
'+Game.tinyCookie()+Beautify(Game.cookies)+'
'+ + '
'+loc("Cookies baked (this ascension):")+'
'+Game.tinyCookie()+Beautify(Game.cookiesEarned)+'
'+ + '
'+loc("Cookies baked (all time):")+'
'+Game.tinyCookie()+Beautify(Game.cookiesEarned+Game.cookiesReset)+'
'+ + (Game.cookiesReset>0?'
'+loc("Cookies forfeited by ascending:")+'
'+Game.tinyCookie()+Beautify(Game.cookiesReset)+'
':'')+ + (Game.resets?('
'+loc("Legacy started:")+' '+(fullDate==''?loc("just now"):loc("%1 ago",fullDate))+', '+loc("with %1 ascension",LBeautify(Game.resets))+'
'):'')+ + '
'+loc("Run started:")+' '+(startDate==''?loc("just now"):loc("%1 ago",startDate))+'
'+ + '
'+loc("Buildings owned:")+' '+Beautify(buildingsOwned)+'
'+ + '
'+loc("Cookies per second:")+' '+Beautify(Game.cookiesPs,1)+' '+ + '('+loc("multiplier:")+' '+Beautify(Math.round(Game.globalCpsMult*100),1)+'%)'+ + (Game.cpsSucked>0?' ('+loc("withered:")+' '+Beautify(Math.round(Game.cpsSucked*100),1)+'%)':'')+ + '
'+ + '
'+loc("Raw cookies per second:")+' '+Beautify(Game.cookiesPsRaw,1)+' '+ + '('+loc("highest this ascension:")+' '+Beautify(Game.cookiesPsRawHighest,1)+')'+ + '
'+ + '
'+loc("Cookies per click:")+' '+Beautify(Game.computedMouseCps,1)+'
'+ + '
'+loc("Cookie clicks:")+' '+Beautify(Game.cookieClicks)+'
'+ + '
'+loc("Hand-made cookies:")+' '+Beautify(Game.handmadeCookies)+'
'+ + '
'+loc("Golden cookie clicks:")+' '+Beautify(Game.goldenClicksLocal)+' ('+loc("all time:")+' '+Beautify(Game.goldenClicks)+')
'+//'
'+ + (dropMult!=1?'
'+loc("Random drop multiplier:")+' x'+Beautify(dropMult,2)+'
':'')+ + (giftStr!=''?'
'+giftStr+'
':'')+ + '
'+ + '
'+loc("Running version:")+' '+Game.version+'
'+ + + ((researchStr!='' || wrathStr!='' || pledgeStr!='' || santaStr!='' || dragonStr!='' || Game.season!='' || ascensionModeStr!='' || Game.canLumps())?( + '
'+ + '
'+loc("Special")+'
'+ + '
'+ + (ascensionModeStr!=''?'
'+loc("Challenge mode:")+''+ascensionModeStr+'
':'')+ + (Game.season!=''?'
'+loc("Seasonal event:")+' '+Game.seasons[Game.season].name+ + (seasonStr!=''?' ('+loc("%1 remaining",seasonStr)+')':'')+ + '
':'')+ + (EN && Game.season=='fools'? + '
Money made from selling cookies : '+Beautify(Game.cookiesEarned*0.08,2)+' cookie dollars
'+ + (Game.Objects['Portal'].highest>0?'
TV show seasons produced : '+Beautify(Math.floor((timeInSeconds/60/60)*(Game.Objects['Portal'].highest*0.13)+1))+'
':'') + :'')+ + (researchStr!=''?'
'+loc("Research:")+' '+loc("%1 remaining",researchStr)+'
':'')+ + (wrathStr!=''?'
'+loc("Grandmatriarchs status:")+' '+wrathStr+'
':'')+ + (pledgeStr!=''?'
'+loc("Pledge:")+' '+loc("%1 remaining",pledgeStr)+'
':'')+ + (Game.wrinklersPopped>0?'
'+loc("Wrinklers popped:")+' '+Beautify(Game.wrinklersPopped)+'
':'')+ + ((Game.canLumps() && Game.lumpsTotal>-1)?'
'+loc("Sugar lumps harvested:")+'
'+Beautify(Game.lumpsTotal)+'
':'')+ + //(Game.cookiesSucked>0?'
Withered : '+Beautify(Game.cookiesSucked)+' cookies
':'')+ + (Game.reindeerClicked>0?'
'+loc("Reindeer found:")+' '+Beautify(Game.reindeerClicked)+'
':'')+ + (santaStr!=''?'
'+loc("Santa stages unlocked:")+'
'+santaStr+'
':'')+ + (dragonStr!=''?'
'+loc("Dragon training:")+'
'+dragonStr+'
':'')+ + '
' + ):'')+ + ((Game.prestige>0 || prestigeUpgrades!='')?( + '
'+ + '
'+loc("Prestige")+'
'+ + '
'+ + '
'+ + '
'+loc("Prestige level:")+' '+Beautify(Game.prestige)+' '+loc("at %1% of its potential (+%2% CpS)",[Beautify(heavenlyMult*100,1),Beautify(parseFloat(Game.prestige)*Game.heavenlyPower*heavenlyMult,1)])+'
'+loc("Heavenly chips:")+' '+Beautify(Game.heavenlyChips)+'
'+ + '
'+ + (prestigeUpgrades!=''?( + '
'+loc("Prestige upgrades unlocked:")+' '+prestigeUpgradesOwned+'/'+prestigeUpgradesTotal+' ('+Math.floor((prestigeUpgradesOwned/prestigeUpgradesTotal)*100)+'%)
'+ + '
'+prestigeUpgrades+'
'):'')+ + '
' + ):'')+ + + '
'+ + '
'+loc("Upgrades")+'
'+ + '
'+ + (hiddenUpgrades!=''?('
Debug
'+ + '
'+hiddenUpgrades+'
'):'')+ + '
'+loc("Upgrades unlocked:")+' '+upgradesOwned+'/'+upgradesTotal+' ('+Math.floor((upgradesOwned/upgradesTotal)*100)+'%)
'+ + '
'+upgrades+'
'+ + (cookieUpgrades!=''?('
'+loc("Cookies")+'
'+ + '
'+cookieUpgrades+'
'):'')+ + '
'+ + '
'+ + '
'+loc("Achievements")+'
'+ + '
'+ + '
'+loc("Achievements unlocked:")+' '+achievementsOwned+'/'+achievementsTotal+' ('+Math.floor((achievementsOwned/achievementsTotal)*100)+'%)'+(achievementsOwnedOther>0?(' (+'+achievementsOwnedOther+')'):'')+'
'+ + (Game.cookiesMultByType['kittens']>1?('
'+loc("Kitten multiplier:")+' '+Beautify((Game.cookiesMultByType['kittens'])*100)+'%
'):'')+ + '
'+loc("Milk")+': '+milkName+'
'+ + (milkStr!=''?'
'+loc("Milk flavors unlocked:")+'
'+milkStr+'
':'')+ + '
('+loc("Milk is gained with each achievement. It can unlock unique upgrades over time.")+')
'+ + achievementsStr+ + '
'+ + '
'+ + '
' + ; + } + //str='
'+str+'
'; + l('menu').innerHTML=str; + if (App) + { + var anchors=l('menu').getElementsByTagName('a'); + for (var i=0;i14) + { + var animals=['newts','penguins','scorpions','axolotls','puffins','porpoises','blowfish','horses','crayfish','slugs','humpback whales','nurse sharks','giant squids','polar bears','fruit bats','frogs','sea squirts','velvet worms','mole rats','paramecia','nematodes','tardigrades','giraffes','monkfish','wolfmen','goblins','hippies']; + + if (Math.random()<0.75 || Game.cookiesEarned<10000) + { + if (Game.Objects['Grandma'].amount>0) list.push(''+choose(loc("Ticker (grandma)"))+''+Game.Objects['Grandma'].single+''); + + if (!Game.prefs.notScary && Game.Objects['Grandma'].amount>=50) list.push(''+choose(loc("Ticker (threatening grandma)"))+''+Game.Objects['Grandma'].single+''); + + if (EN && Game.HasAchiev('Just wrong') && Math.random()<0.05) list.push(NEWS+'cookie manufacturer downsizes, sells own grandmother!'); + if (!Game.prefs.notScary && Game.HasAchiev('Just wrong') && Math.random()<0.4) list.push(''+choose(loc("Ticker (angry grandma)"))+''+Game.Objects['Grandma'].single+''); + + if (!Game.prefs.notScary && Game.Objects['Grandma'].amount>=1 && Game.pledges>0 && Game.elderWrath==0) list.push(''+choose(loc("Ticker (grandmas return)"))+''+Game.Objects['Grandma'].single+''); + + if (!EN) + { + for (var i in Game.Objects) + { + if (i!='Cursor' && i!='Grandma' && Game.Objects[i].amount>0) list.push(NEWS+choose(loc("Ticker ("+i+")"))); + } + + if (Game.cookiesEarned>=1000) + { + if (Game.season=='halloween') list.push(NEWS+choose(loc("Ticker (Halloween)"))); + if (Game.season=='christmas') list.push(NEWS+choose(loc("Ticker (Christmas)"))); + if (Game.season=='valentines') list.push(NEWS+choose(loc("Ticker (Valentines)"))); + if (Game.season=='easter') list.push(NEWS+choose(loc("Ticker (Easter)"))); + } + } + else + { + if (Game.Objects['Farm'].amount>0) list.push(choose([ + 'News : cookie farms suspected of employing undeclared elderly workforce!', + 'News : cookie farms release harmful chocolate in our rivers, says scientist!', + 'News : genetically-modified chocolate controversy strikes cookie farmers!', + 'News : free-range farm cookies popular with today\'s hip youth, says specialist.', + 'News : farm cookies deemed unfit for vegans, says nutritionist.' + ])); + + if (Game.Objects['Mine'].amount>0) list.push(choose([ + 'News : is our planet getting lighter? Experts examine the effects of intensive chocolate mining.', + 'News : '+Math.floor(Math.random()*1000+2)+' miners trapped in collapsed chocolate mine!', + 'News : chocolate mines found to cause earthquakes and sinkholes!', + 'News : chocolate mine goes awry, floods village in chocolate!', + 'News : depths of chocolate mines found to house "peculiar, chocolaty beings"!' + ])); + + if (Game.Objects['Factory'].amount>0) list.push(choose([ + 'News : cookie factories linked to global warming!', + 'News : cookie factories involved in chocolate weather controversy!', + 'News : cookie factories on strike, robotic minions employed to replace workforce!', + 'News : cookie factories on strike - workers demand to stop being paid in cookies!', + 'News : factory-made cookies linked to obesity, says study.' + ])); + + if (Game.Objects['Bank'].amount>0) list.push(choose([ + 'News : cookie loans on the rise as people can no longer afford them with regular money.', + 'News : cookies slowly creeping up their way as a competitor to traditional currency!', + 'News : most bakeries now fitted with ATMs to allow for easy cookie withdrawals and deposits.', + 'News : cookie economy now strong enough to allow for massive vaults doubling as swimming pools!', + 'News : "Tomorrow\'s wealthiest people will be calculated by their worth in cookies", predict economists.' + ])); + + if (Game.Objects['Temple'].amount>0) list.push(choose([ + 'News : explorers bring back ancient artifact from abandoned temple; archeologists marvel at the centuries-old '+choose(['magic','carved','engraved','sculpted','royal','imperial','mummified','ritual','golden','silver','stone','cursed','plastic','bone','blood','holy','sacred','sacrificial','electronic','singing','tapdancing'])+' '+choose(['spoon','fork','pizza','washing machine','calculator','hat','piano','napkin','skeleton','gown','dagger','sword','shield','skull','emerald','bathtub','mask','rollerskates','litterbox','bait box','cube','sphere','fungus'])+'!', + 'News : recently-discovered chocolate temples now sparking new cookie-related cult; thousands pray to Baker in the sky!', + 'News : just how extensive is the cookie pantheon? Theologians speculate about possible '+choose(['god','goddess'])+' of '+choose([choose(animals),choose(['kazoos','web design','web browsers','kittens','atheism','handbrakes','hats','aglets','elevator music','idle games','the letter "P"','memes','hamburgers','bad puns','kerning','stand-up comedy','failed burglary attempts','clickbait','one weird tricks'])])+'.', + 'News : theists of the world discover new cookie religion - "Oh boy, guess we were wrong all along!"', + 'News : cookie heaven allegedly "sports elevator instead of stairway"; cookie hell "paved with flagstone, as good intentions make for poor building material".' + ])); + + if (Game.Objects['Wizard tower'].amount>0) list.push(choose([ + 'News : all '+choose([choose(animals),choose(['public restrooms','clouds','politicians','moustaches','hats','shoes','pants','clowns','encyclopedias','websites','potted plants','lemons','household items','bodily fluids','cutlery','national landmarks','yogurt','rap music','underwear'])])+' turned into '+choose([choose(animals),choose(['public restrooms','clouds','politicians','moustaches','hats','shoes','pants','clowns','encyclopedias','websites','potted plants','lemons','household items','bodily fluids','cutlery','national landmarks','yogurt','rap music','underwear'])])+' in freak magic catastrophe!', + 'News : heavy dissent rages between the schools of '+choose(['water','fire','earth','air','lightning','acid','song','battle','peace','pencil','internet','space','time','brain','nature','techno','plant','bug','ice','poison','crab','kitten','dolphin','bird','punch','fart'])+' magic and '+choose(['water','fire','earth','air','lightning','acid','song','battle','peace','pencil','internet','space','time','brain','nature','techno','plant','bug','ice','poison','crab','kitten','dolphin','bird','punch','fart'])+' magic!', + 'News : get your new charms and curses at the yearly National Spellcrafting Fair! Exclusive prices on runes and spellbooks.', + 'News : cookie wizards deny involvement in shockingly ugly newborn - infant is "honestly grody-looking, but natural", say doctors.', + 'News : "Any sufficiently crude magic is indistinguishable from technology", claims renowned technowizard.' + ])); + + if (Game.Objects['Shipment'].amount>0) list.push(choose([ + 'News : new chocolate planet found, becomes target of cookie-trading spaceships!', + 'News : massive chocolate planet found with 99.8% certified pure dark chocolate core!', + 'News : space tourism booming as distant planets attract more bored millionaires!', + 'News : chocolate-based organisms found on distant planet!', + 'News : ancient baking artifacts found on distant planet; "terrifying implications", experts say.' + ])); + + if (Game.Objects['Alchemy lab'].amount>0) list.push(choose([ + 'News : national gold reserves dwindle as more and more of the precious mineral is turned to cookies!', + 'News : chocolate jewelry found fashionable, gold and diamonds "just a fad", says specialist.', + 'News : silver found to also be transmutable into white chocolate!', + 'News : defective alchemy lab shut down, found to convert cookies to useless gold.', + 'News : alchemy-made cookies shunned by purists!' + ])); + + if (Game.Objects['Portal'].amount>0) list.push(choose([ + 'News : nation worried as more and more unsettling creatures emerge from dimensional portals!', + 'News : dimensional portals involved in city-engulfing disaster!', + 'News : tourism to cookieverse popular with bored teenagers! Casualty rate as high as 73%!', + 'News : cookieverse portals suspected to cause fast aging and obsession with baking, says study.', + 'News : "do not settle near portals," says specialist; "your children will become strange and corrupted inside."' + ])); + + if (Game.Objects['Time machine'].amount>0) list.push(choose([ + 'News : time machines involved in history-rewriting scandal! Or are they?', + 'News : time machines used in unlawful time tourism!', + 'News : cookies brought back from the past "unfit for human consumption", says historian.', + 'News : various historical figures inexplicably replaced with talking lumps of dough!', + 'News : "I have seen the future," says time machine operator, "and I do not wish to go there again."' + ])); + + if (Game.Objects['Antimatter condenser'].amount>0) list.push(choose([ + 'News : whole town seemingly swallowed by antimatter-induced black hole; more reliable sources affirm town "never really existed"!', + 'News : "explain to me again why we need particle accelerators to bake cookies?" asks misguided local woman.', + 'News : first antimatter condenser successfully turned on, doesn\'t rip apart reality!', + 'News : researchers conclude that what the cookie industry needs, first and foremost, is "more magnets".', + 'News : "unravelling the fabric of reality just makes these cookies so much tastier", claims scientist.' + ])); + + if (Game.Objects['Prism'].amount>0) list.push(choose([ + 'News : new cookie-producing prisms linked to outbreak of rainbow-related viral videos.', + 'News : scientists warn against systematically turning light into matter - "One day, we\'ll end up with all matter and no light!"', + 'News : cookies now being baked at the literal speed of light thanks to new prismatic contraptions.', + 'News : "Can\'t you sense the prism watching us?", rambles insane local man. "No idea what he\'s talking about", shrugs cookie magnate/government official.', + 'News : world citizens advised "not to worry" about frequent atmospheric flashes.', + ])); + + if (Game.Objects['Chancemaker'].amount>0) list.push(choose([ + 'News : strange statistical anomalies continue as weather forecast proves accurate an unprecedented 3 days in a row!', + 'News : local casino ruined as all gamblers somehow hit a week-long winning streak! "We might still be okay", says owner before being hit by lightning 47 times.', + 'News : neighboring nation somehow elects president with sensible policies in freak accident of random chance!', + 'News : million-to-one event sees gritty movie reboot turning out better than the original! "We have no idea how this happened", say movie execs.', + 'News : all scratching tickets printed as winners, prompting national economy to crash and, against all odds, recover overnight.', + ])); + + if (Game.Objects['Fractal engine'].amount>0) list.push(choose([ + 'News : local man "done with Cookie Clicker", finds the constant self-references "grating and on-the-nose".', + 'News : local man sails around the world to find himself - right where he left it.', + 'News : local guru claims "there\'s a little bit of ourselves in everyone", under investigation for alleged cannibalism.', + 'News : news writer finds herself daydreaming about new career. Or at least a raise.', + 'News : polls find idea of cookies made of cookies "acceptable" - "at least we finally know what\'s in them", says interviewed citizen.', + ])); + + if (Game.Objects['Javascript console'].amount>0) list.push(choose([ + 'News : strange fad has parents giving their newborns names such as Emma.js or Liam.js. At least one Baby.js reported.', + 'News : coding is hip! More and more teenagers turn to technical fields like programming, ensuring a future robot apocalypse and the doom of all mankind.', + 'News : developers unsure what to call their new javascript libraries as all combinations of any 3 dictionary words have already been taken.', + 'News : nation holds breath as nested ifs about to hatch.', + 'News : clueless copywriter forgets to escape a quote, ends news line prematurely; last words reported to be "Huh, why isn', + ])); + + if (Game.Objects['Idleverse'].amount>0) list.push(choose([ + 'News : is another you living out their dreams in an alternate universe? Probably, you lazy bum!', + 'News : public recoils at the notion of a cosmos made of infinite idle games. "I kinda hoped there\'d be more to it", says distraught citizen.', + 'News : with an infinity of parallel universes, people turn to reassuring alternate dimensions, which only number "in the high 50s".', + 'News : "I find solace in the knowledge that at least some of my alternate selves are probably doing fine out there", says citizen\'s last remaining exemplar in the multiverse.', + 'News : comic book writers point to actual multiverse in defense of dubious plot points. "See? I told you it wasn\'t \'hackneyed and contrived\'!"' + ])); + + if (Game.Objects['Cortex baker'].amount>0) list.push(choose([ + 'News : cortex baker wranglers kindly remind employees that cortex bakers are the bakery\'s material property and should not be endeared with nicknames.', + 'News : space-faring employees advised to ignore unusual thoughts and urges experienced within 2 parsecs of gigantic cortex bakers, say guidelines.', + 'News : astronomers warn of cortex baker trajectory drift, fear future head-on collisions resulting in costly concussions.', + 'News : runt cortex baker identified with an IQ of only quintuple digits: "just a bit of a dummy", say specialists.', + 'News : are you smarter than a cortex baker? New game show deemed "unfair" by contestants.' + ])); + + if (Game.Objects['You'].amount>0) list.push(choose([ + 'News : the person of the year is, this year again, '+Game.bakeryName+'! How unexpected!', + 'News : criminals caught sharing pirated copies of '+Game.bakeryName+'\'s genome may be exposed to fines and up to 17 billion years prison, reminds constable.', + 'News : could local restaurants be serving you bootleg '+Game.bakeryName+' clone meat? Our delicious investigation follows after tonight\'s news.', + 'News : beloved cookie magnate '+Game.bakeryName+', erroneously reported as trampled to death by crazed fans, thankfully found to be escaped clone mistaken for original.', + 'News : "Really, we\'re just looking for some basic societal acceptance and compassion", mumbles incoherent genetic freak '+Game.bakeryName+'-Clone #59014.' + ])); + + if (Game.season=='halloween' && Game.cookiesEarned>=1000) list.push(choose([ + 'News : strange twisting creatures amass around cookie factories, nibble at assembly lines.', + 'News : ominous wrinkly monsters take massive bites out of cookie production; "this can\'t be hygienic", worries worker.', + 'News : pagan rituals on the rise as children around the world dress up in strange costumes and blackmail homeowners for candy.', + 'News : new-age terrorism strikes suburbs as houses find themselves covered in eggs and toilet paper.', + 'News : children around the world "lost and confused" as any and all Halloween treats have been replaced by cookies.' + ])); + + if (Game.season=='christmas' && Game.cookiesEarned>=1000) list.push(choose([ + 'News : bearded maniac spotted speeding on flying sleigh! Investigation pending.', + 'News : Santa Claus announces new brand of breakfast treats to compete with cookie-flavored cereals! "They\'re ho-ho-horrible!" says Santa.', + 'News : "You mean he just gives stuff away for free?!", concerned moms ask. "Personally, I don\'t trust his beard."', + 'News : obese jolly lunatic still on the loose, warn officials. "Keep your kids safe and board up your chimneys. We mean it."', + 'News : children shocked as they discover Santa Claus isn\'t just their dad in a costume after all!
"I\'m reassessing my life right now", confides Laura, aged 6.', + 'News : mysterious festive entity with quantum powers still wrecking havoc with army of reindeer, officials say.', + 'News : elves on strike at toy factory! "We will not be accepting reindeer chow as payment anymore. And stop calling us elves!"', + 'News : elves protest around the nation; wee little folks in silly little outfits spread mayhem, destruction; rabid reindeer running rampant through streets.', + 'News : scholars debate regarding the plural of reindeer(s) in the midst of elven world war.', + 'News : elves "unrelated to gnomes despite small stature and merry disposition", find scientists.', + 'News : elves sabotage radioactive frosting factory, turn hundreds blind in vicinity - "Who in their right mind would do such a thing?" laments outraged mayor.', + 'News : drama unfolds at North Pole as rumors crop up around Rudolph\'s red nose; "I may have an addiction or two", admits reindeer.' + ])); + + if (Game.season=='valentines' && Game.cookiesEarned>=1000) list.push(choose([ + 'News : organ-shaped confectioneries being traded in schools all over the world; gruesome practice undergoing investigation.', + 'News : heart-shaped candies overtaking sweets business, offering competition to cookie empire. "It\'s the economy, cupid!"', + 'News : love\'s in the air, according to weather specialists. Face masks now offered in every city to stunt airborne infection.', + 'News : marrying a cookie - deranged practice, or glimpse of the future?', + 'News : boyfriend dumped after offering his lover cookies for Valentine\'s Day, reports say. "They were off-brand", shrugs ex-girlfriend.' + ])); + + if (Game.season=='easter' && Game.cookiesEarned>=1000) list.push(choose([ + 'News : long-eared critters with fuzzy tails invade suburbs, spread terror and chocolate!', + 'News : eggs have begun to materialize in the most unexpected places; "no place is safe", warn experts.', + 'News : packs of rampaging rabbits cause billions in property damage; new strain of myxomatosis being developed.', + 'News : egg-laying rabbits "not quite from this dimension", warns biologist; advises against petting, feeding, or cooking the creatures.', + 'News : mysterious rabbits found to be egg-layers, but mammalian, hinting at possible platypus ancestry.' + ])); + } + } + if (!EN) + { + if (Game.cookiesEarned>=10000) + { + list.push(NEWS+choose(loc("Ticker (misc)"))); + list.push(NEWS+choose(loc("Ticker (misc)"))); + list.push(NEWS+choose(loc("Ticker (misc)"))); + } + } + else + { + if (Math.random()<0.05) + { + if (Game.HasAchiev('Base 10')) list.push('News : cookie manufacturer completely forgoes common sense, lets strange obsession with round numbers drive building decisions!'); + if (Game.HasAchiev('From scratch')) list.push('News : follow the tear-jerking, riches-to-rags story about a local cookie manufacturer who decided to give it all up!'); + if (Game.HasAchiev('A world filled with cookies')) list.push('News : known universe now jammed with cookies! No vacancies!'); + if (Game.HasAchiev('Last Chance to See')) list.push('News : incredibly rare albino wrinkler on the brink of extinction poached by cookie-crazed pastry magnate!'); + if (Game.Has('Serendipity')) list.push('News : local cookie manufacturer becomes luckiest being alive!'); + if (Game.Has('Season switcher')) list.push('News : seasons are all out of whack! "We need to get some whack back into them seasons", says local resident.'); + + if (Game.Has('Kitten helpers')) list.push('News : faint meowing heard around local cookie facilities; suggests new ingredient being tested.'); + if (Game.Has('Kitten workers')) list.push('News : crowds of meowing kittens with little hard hats reported near local cookie facilities.'); + if (Game.Has('Kitten engineers')) list.push('News : surroundings of local cookie facilities now overrun with kittens in adorable little suits. Authorities advise to stay away from the premises.'); + if (Game.Has('Kitten overseers')) list.push('News : locals report troupe of bossy kittens meowing adorable orders at passersby.'); + if (Game.Has('Kitten managers')) list.push('News : local office cubicles invaded with armies of stern-looking kittens asking employees "what\'s happening, meow".'); + if (Game.Has('Kitten accountants')) list.push('News : tiny felines show sudden and amazing proficiency with fuzzy mathematics and pawlinomials, baffling scientists and pet store owners.'); + if (Game.Has('Kitten specialists')) list.push('News : new kitten college opening next week, offers courses on cookie-making and catnip studies.'); + if (Game.Has('Kitten experts')) list.push('News : unemployment rates soaring as woefully adorable little cats nab jobs on all levels of expertise, says study.'); + if (Game.Has('Kitten consultants')) list.push('News : "In the future, your job will most likely be done by a cat", predicts suspiciously furry futurologist.'); + if (Game.Has('Kitten assistants to the regional manager')) list.push('News : strange kittens with peculiar opinions on martial arts spotted loitering on local beet farms!'); + if (Game.Has('Kitten marketeers')) list.push('News : nonsensical kitten billboards crop up all over countryside, trying to sell people the cookies they already get for free!'); + if (Game.Has('Kitten analysts')) list.push('News : are your spending habits sensible? For a hefty fee, these kitten analysts will tell you!'); + if (Game.Has('Kitten executives')) list.push('News : kittens strutting around in hot little business suits shouting cut-throat orders at their assistants, possibly the cutest thing this reporter has ever seen!'); + if (Game.Has('Kitten admins')) list.push('News : all systems nominal, claim kitten admins obviously in way over their heads.'); + if (Game.Has('Kitten strategists')) list.push('News : overpaid kittens scratching their fuzzy little heads trying to find new ways to get cookies in your shopping cart!'); + if (Game.Has('Kitten angels')) list.push('News : "Try to ignore any ghostly felines that may be purring inside your ears," warn scientists. "They\'ll just lure you into making poor life choices."'); + if (Game.Has('Kitten wages')) list.push('News : kittens break glass ceiling! Do they have any idea how expensive those are!'); + if (Game.HasAchiev('Jellicles')) list.push('News : local kittens involved in misguided musical production, leave audience perturbed and unnerved.'); + } + + if (Game.HasAchiev('Dude, sweet') && Math.random()<0.2) list.push(choose([ + 'News : major sugar-smuggling ring dismantled by authorities; '+Math.floor(Math.random()*30+3)+' tons of sugar lumps seized, '+Math.floor(Math.random()*48+2)+' suspects apprehended.', + 'News : authorities warn tourists not to buy bootleg sugar lumps from street peddlers - "You think you\'re getting a sweet deal, but what you\'re being sold is really just ordinary cocaine", says agent.', + 'News : pro-diabetes movement protests against sugar-shaming. "I\'ve eaten nothing but sugar lumps for the past '+Math.floor(Math.random()*10+4)+' years and I\'m feeling great!", says woman with friable skin.', + 'News : experts in bitter disagreement over whether sugar consumption turns children sluggish or hyperactive.', + 'News : fishermen deplore upturn in fish tooth decay as sugar lumps-hauling cargo sinks into the ocean.', + 'News : rare black sugar lump that captivated millions in unprecedented auction revealed to be common toxic fungus.', + 'News : "Back in my day, sugar lumps were these little cubes you\'d put in your tea, not those fist-sized monstrosities people eat for lunch", whines curmudgeon with failing memory.', + 'News : sugar lump-snacking fad sweeps the nation; dentists everywhere rejoice.' + ])); + + if (Math.random()<0.001)//apologies to Will Wright + { + list.push( + 'You have been chosen. They will come soon.', + 'They\'re coming soon. Maybe you should think twice about opening the door.', + 'The end is near. Make preparations.', + 'News : broccoli tops for moms, last for kids; dads indifferent.', + 'News : middle age a hoax, declares study; turns out to be bad posture after all.', + 'News : kitties want answers in possible Kitty Kibble shortage.' + ); + } + + if (Game.cookiesEarned>=10000) list.push( + 'News : '+choose([ + 'cookies found to '+choose(['increase lifespan','sensibly increase intelligence','reverse aging','decrease hair loss','prevent arthritis','cure blindness'])+' in '+choose(animals)+'!', + 'cookies found to make '+choose(animals)+' '+choose(['more docile','more handsome','nicer','less hungry','more pragmatic','tastier'])+'!', + 'cookies tested on '+choose(animals)+', found to have no ill effects.', + 'cookies unexpectedly popular among '+choose(animals)+'!', + 'unsightly lumps found on '+choose(animals)+' near cookie facility; "they\'ve pretty much always looked like that", say biologists.', + 'new species of '+choose(animals)+' discovered in distant country; "yup, tastes like cookies", says biologist.', + 'cookies go well with '+choose([choose(['roasted','toasted','boiled','sauteed','minced'])+' '+choose(animals),choose(['sushi','soup','carpaccio','steak','nuggets'])+' made from '+choose(animals)])+', says controversial chef.', + '"do your cookies contain '+choose(animals)+'?", asks PSA warning against counterfeit cookies.', + 'doctors recommend twice-daily consumption of fresh cookies.', + 'doctors warn against chocolate chip-snorting teen fad.', + 'doctors advise against new cookie-free fad diet.', + 'doctors warn mothers about the dangers of "home-made cookies".' + ]), + 'News : "'+choose([ + 'I\'m all about cookies', + 'I just can\'t stop eating cookies. I think I seriously need help', + 'I guess I have a cookie problem', + 'I\'m not addicted to cookies. That\'s just speculation by fans with too much free time', + 'my upcoming album contains 3 songs about cookies', + 'I\'ve had dreams about cookies 3 nights in a row now. I\'m a bit worried honestly', + 'accusations of cookie abuse are only vile slander', + 'cookies really helped me when I was feeling low', + 'cookies are the secret behind my perfect skin', + 'cookies helped me stay sane while filming my upcoming movie', + 'cookies helped me stay thin and healthy', + 'I\'ll say one word, just one : cookies', + 'alright, I\'ll say it - I\'ve never eaten a single cookie in my life' + ])+'", reveals celebrity.', + choose([ + 'News : scientist predicts imminent cookie-related "end of the world"; becomes joke among peers.', + 'News : man robs bank, buys cookies.', + 'News : scientists establish that the deal with airline food is, in fact, a critical lack of cookies.', + 'News : hundreds of tons of cookies dumped into starving country from airplanes; thousands dead, nation grateful.', + 'News : new study suggests cookies neither speed up nor slow down aging, but instead "take you in a different direction".', + 'News : overgrown cookies found in fishing nets, raise questions about hormone baking.', + 'News : "all-you-can-eat" cookie restaurant opens in big city; waiters trampled in minutes.', + 'News : man dies in cookie-eating contest; "a less-than-impressive performance", says judge.', + 'News : what makes cookies taste so right? "Probably all the [*****] they put in them", says anonymous tipper.', + 'News : man found allergic to cookies; "what a weirdo", says family.', + 'News : foreign politician involved in cookie-smuggling scandal.', + 'News : cookies now more popular than '+choose(['cough drops','broccoli','smoked herring','cheese','video games','stable jobs','relationships','time travel','cat videos','tango','fashion','television','nuclear warfare','whatever it is we ate before','politics','oxygen','lamps'])+', says study.', + 'News : obesity epidemic strikes nation; experts blame '+choose(['twerking','that darn rap music','video-games','lack of cookies','mysterious ghostly entities','aliens','parents','schools','comic-books','cookie-snorting fad'])+'.', + 'News : cookie shortage strikes town, people forced to eat cupcakes; "just not the same", concedes mayor.', + 'News : "you gotta admit, all this cookie stuff is a bit ominous", says confused idiot.', + //'News : scientists advise getting used to cookies suffusing every aspect of life; "this is the new normal", expert says.', + //'News : doctors advise against wearing face masks when going outside. "You never know when you might need a cookie... a mask would just get in the way."',//these were written back when covid hadn't really done much damage yet but they just feel in poor taste now + 'News : is there life on Mars? Various chocolate bar manufacturers currently under investigation for bacterial contaminants.', + 'News : "so I guess that\'s a thing now", scientist comments on cookie particles now present in virtually all steel manufactured since cookie production ramped up worldwide.', + 'News : trace amounts of cookie particles detected in most living creatures, some of which adapting them as part of new and exotic metabolic processes.', + ]), + choose([ + 'News : movie cancelled from lack of actors; "everybody\'s at home eating cookies", laments director.', + 'News : comedian forced to cancel cookie routine due to unrelated indigestion.', + 'News : new cookie-based religion sweeps the nation.', + 'News : fossil records show cookie-based organisms prevalent during Cambrian explosion, scientists say.', + 'News : mysterious illegal cookies seized; "tastes terrible", says police.', + 'News : man found dead after ingesting cookie; investigators favor "mafia snitch" hypothesis.', + 'News : "the universe pretty much loops on itself," suggests researcher; "it\'s cookies all the way down."', + 'News : minor cookie-related incident turns whole town to ashes; neighboring cities asked to chip in for reconstruction.', + 'News : is our media controlled by the cookie industry? This could very well be the case, says crackpot conspiracy theorist.', + 'News : '+choose(['cookie-flavored popcorn pretty damn popular; "we kinda expected that", say scientists.','cookie-flavored cereals break all known cereal-related records','cookies popular among all age groups, including fetuses, says study.','cookie-flavored popcorn sales exploded during screening of Grandmothers II : The Moistening.']), + 'News : all-cookie restaurant opening downtown. Dishes such as braised cookies, cookie thermidor, and for dessert : crepes.', + 'News : "Ook", says interviewed orangutan.', + 'News : cookies could be the key to '+choose(['eternal life','infinite riches','eternal youth','eternal beauty','curing baldness','world peace','solving world hunger','ending all wars world-wide','making contact with extraterrestrial life','mind-reading','better living','better eating','more interesting TV shows','faster-than-light travel','quantum baking','chocolaty goodness','gooder thoughtness'])+', say scientists.', + 'News : flavor text '+choose(['not particularly flavorful','kind of unsavory','"rather bland"','pretty spicy lately'])+', study finds.', + ]), + choose([ + 'News : what do golden cookies taste like? Study reveals a flavor "somewhere between spearmint and liquorice".', + 'News : what do wrath cookies taste like? Study reveals a flavor "somewhere between blood sausage and seawater".', + 'News : '+Game.bakeryName+'-brand cookies "'+choose(['much less soggy','much tastier','relatively less crappy','marginally less awful','less toxic','possibly more edible','more fashionable','slightly nicer','trendier','arguably healthier','objectively better choice','slightly less terrible','decidedly cookier','a tad cheaper'])+' than competitors", says consumer survey.', + 'News : "'+Game.bakeryName+'" set to be this year\'s most popular baby name.', + 'News : new popularity survey says '+Game.bakeryName+'\'s the word when it comes to cookies.', + 'News : major city being renamed '+Game.bakeryName+'ville after world-famous cookie manufacturer.', + 'News : '+choose(['street','school','nursing home','stadium','new fast food chain','new planet','new disease','flesh-eating bacteria','deadly virus','new species of '+choose(animals),'new law','baby','programming language'])+' to be named after '+Game.bakeryName+', the world-famous cookie manufacturer.', + 'News : don\'t miss tonight\'s biopic on '+Game.bakeryName+'\'s irresistible rise to success!', + 'News : don\'t miss tonight\'s interview of '+Game.bakeryName+' by '+choose(['Bloprah','Blavid Bletterman','Blimmy Blimmel','Blellen Blegeneres','Blimmy Blallon','Blonan Blo\'Brien','Blay Bleno','Blon Blewart','Bleven Blolbert','Lord Toxikhron of dimension 7-B19',Game.bakeryName+'\'s own evil clone'])+'!', + 'News : people all over the internet still scratching their heads over nonsensical reference : "Okay, but why an egg?"', + 'News : viral video "Too Many Cookies" could be "a grim commentary on the impending crisis our world is about to face", says famous economist.', + 'News : "memes from last year somehow still relevant", deplore experts.', + 'News : cookie emoji most popular among teenagers, far ahead of "judgmental OK hand sign" and "shifty-looking dark moon", says study.', + ]), + choose([ + 'News : births of suspiciously bald babies on the rise; ancient alien cabal denies involvement.', + 'News : "at this point, cookies permeate the economy", says economist. "If we start eating anything else, we\'re all dead."', + 'News : pun in headline infuriates town, causes riot. 21 wounded, 5 dead; mayor still missing.', + 'Nws : ky btwn W and R brokn, plas snd nw typwritr ASAP.', + 'Neeeeews : "neeeew EEEEEE keeeeey working fineeeeeeeee", reeeports gleeeeeeeeful journalist.', + 'News : cookies now illegal in some backwards country nobody cares about. Political tensions rising; war soon, hopefully.', + 'News : irate radio host rambles about pixelated icons. "None of the cookies are aligned! Can\'t anyone else see it? I feel like I\'m taking crazy pills!"', + 'News : nation cheers as legislators finally outlaw '+choose(['cookie criticism','playing other games than Cookie Clicker','pineapple on pizza','lack of cheerfulness','mosquitoes','broccoli','the human spleen','bad weather','clickbait','dabbing','the internet','memes','millennials'])+'!', + 'News : '+choose(['local','area'])+' '+choose(['man','woman'])+' goes on journey of introspection, finds cookies : "I honestly don\'t know what I was expecting."', + 'News : '+choose(['man','woman'])+' wakes up from coma, '+choose(['tries cookie for the first time, dies.','regrets it instantly.','wonders "why everything is cookies now".','babbles incoherently about some supposed "non-cookie food" we used to eat.','cites cookies as main motivator.','asks for cookies.']), + 'News : pet '+choose(animals)+', dangerous fad or juicy new market?', + 'News : person typing these wouldn\'t mind someone else breaking the news to THEM, for a change.', + 'News : "average person bakes '+Beautify(Math.ceil(Game.cookiesEarned/8000000000))+' cookie'+(Math.ceil(Game.cookiesEarned/8000000000)==1?'':'s')+' a year" factoid actually just statistical error; '+Game.bakeryName+', who has produced '+Beautify(Game.cookiesEarned)+' cookies in their lifetime, is an outlier and should not have been counted.' + ]) + ); + } + } + + if (list.length==0) + { + if (loreProgress<=0) list.push(loc("You feel like making cookies. But nobody wants to eat your cookies.")); + else if (loreProgress<=1) list.push(loc("Your first batch goes to the trash. The neighborhood raccoon barely touches it.")); + else if (loreProgress<=2) list.push(loc("Your family accepts to try some of your cookies.")); + else if (loreProgress<=3) list.push(loc("Your cookies are popular in the neighborhood."),loc("People are starting to talk about your cookies.")); + else if (loreProgress<=4) list.push(loc("Your cookies are talked about for miles around."),loc("Your cookies are renowned in the whole town!")); + else if (loreProgress<=5) list.push(loc("Your cookies bring all the boys to the yard."),loc("Your cookies now have their own website!")); + else if (loreProgress<=6) list.push(loc("Your cookies are worth a lot of money."),loc("Your cookies sell very well in distant countries.")); + else if (loreProgress<=7) list.push(loc("People come from very far away to get a taste of your cookies."),loc("Kings and queens from all over the world are enjoying your cookies.")); + else if (loreProgress<=8) list.push(loc("There are now museums dedicated to your cookies."),loc("A national day has been created in honor of your cookies.")); + else if (loreProgress<=9) list.push(loc("Your cookies have been named a part of the world wonders."),loc("History books now include a whole chapter about your cookies.")); + else if (loreProgress<=10) list.push(loc("Your cookies have been placed under government surveillance."),loc("The whole planet is enjoying your cookies!")); + else if (loreProgress<=11) list.push(loc("Strange creatures from neighboring planets wish to try your cookies."),loc("Elder gods from the whole cosmos have awoken to taste your cookies.")); + else if (loreProgress<=12) list.push(loc("Beings from other dimensions lapse into existence just to get a taste of your cookies."),loc("Your cookies have achieved sentience.")); + else if (loreProgress<=13) list.push(loc("The universe has now turned into cookie dough, to the molecular level."),loc("Your cookies are rewriting the fundamental laws of the universe.")); + else if (loreProgress<=14) list.push(loc("A local news station runs a 10-minute segment about your cookies. Success!
(you win a cookie)"),loc("it's time to stop playing")); + } + + //if (Game.elderWrath>0 && (Game.pledges==0 || Math.random()<0.2)) + if (Game.elderWrath>0 && (((Game.pledges==0 && Game.resets==0) && Math.random()<0.3) || Math.random()<0.03)) + { + list=[]; + if (Game.elderWrath==1) list.push(EN?choose([ + 'News : millions of old ladies reported missing!', + 'News : processions of old ladies sighted around cookie facilities!', + 'News : families around the continent report agitated, transfixed grandmothers!', + 'News : doctors swarmed by cases of old women with glassy eyes and a foamy mouth!', + 'News : nurses report "strange scent of cookie dough" around female elderly patients!' + ]):(NEWS+choose(loc("Ticker (grandma invasion start)")))); + if (Game.elderWrath==2) list.push(EN?choose([ + 'News : town in disarray as strange old ladies break into homes to abduct infants and baking utensils!', + 'News : sightings of old ladies with glowing eyes terrify local population!', + 'News : retirement homes report "female residents slowly congealing in their seats"!', + 'News : whole continent undergoing mass exodus of old ladies!', + 'News : old women freeze in place in streets, ooze warm sugary syrup!' + ]):(NEWS+choose(loc("Ticker (grandma invasion rise)")))); + if (Game.elderWrath==3) list.push(EN?choose([ + 'News : large "flesh highways" scar continent, stretch between various cookie facilities!', + 'News : wrinkled "flesh tendrils" visible from space!', + 'News : remains of "old ladies" found frozen in the middle of growing fleshy structures!', + 'News : all hope lost as writhing mass of flesh and dough engulfs whole city!', + 'News : nightmare continues as wrinkled acres of flesh expand at alarming speeds!' + ]):(NEWS+choose(loc("Ticker (grandma invasion full)")))); + } + + if (EN && Game.season=='fools') + { + list=[]; + + if (Game.cookiesEarned>=1000) list.push(choose([ + choose(['Your office chair is really comfortable.','Profit\'s in the air!','Business meetings are such a joy!','What a great view from your office!','Smell that? That\'s capitalism, baby!','You truly love answering emails.','Working hard, or hardly working?','Another day in paradise!','Expensive lunch time!','Another government bailout coming up! Splendid!','These profits are doing wonderful things for your skin.','You daydream for a moment about a world without taxes.','You\'ll worry about environmental damage when you\'re dead!','Yay, office supplies!','Sweet, those new staplers just came in!','Ohh, coffee break!']), + choose(['You\'ve spent the whole day','Another great day','First order of business today:','Why, you truly enjoy','What next? That\'s right,','You check what\'s next on the agenda. Oh boy,'])+' '+choose(['signing contracts','filling out forms','touching base with the team','examining exciting new prospects','playing with your desk toys','getting new nameplates done','attending seminars','videoconferencing','hiring dynamic young executives','meeting new investors','updating your rolodex','pumping up those numbers','punching in some numbers','getting investigated for workers\' rights violations','reorganizing documents','belittling underlings','reviewing employee performance','revising company policies','downsizing','pulling yourself up by your bootstraps','adjusting your tie','performing totally normal human activities','recentering yourself in the scream room','immanentizing the eschaton','shredding some sensitive documents','comparing business cards','pondering the meaning of your existence','listening to the roaring emptiness inside your soul','playing minigolf in your office'])+'!', + 'The word of the day is: '+choose(['viral','search engine optimization','blags and wobsites','social networks','webinette','staycation','user experience','crowdfunding','carbon neutral','big data','machine learning','disrupting','influencers','monoconsensual transactions','sustainable','freemium','incentives','grassroots','web 3.0'/*this was before this whole crypto mess i'm so sorry*/,'logistics','leveraging','branding','proactive','synergizing','market research','demographics','pie charts','blogular','blogulacious','blogastic','authenticity','plastics','electronic mail','cellular phones','rap music','bulbs','goblinization','straight-to-bakery','microbakeries','chocolativity','flavorfulness','tastyfication','sugar offsets','activated wheat','reification','immanentize the eschaton','cookies, I guess'])+'.' + ])); + if (Game.cookiesEarned>=1000 && Math.random()<0.05) list.push(choose([ + 'If you could get some more cookies baked, that\'d be great.', + 'So. About those TPS reports.', + 'Hmm, you\'ve got some video tapes to return.', + 'They\'ll pay. They\'ll all pay.', + 'You haven\'t even begun to peak.', + 'There is an idea of a '+Game.bakeryName+'. Some kind of abstraction. But there is no real you, only an entity. Something illusory.', + 'This was a terrible idea!' + ])); + + + if (Game.TickerN%2==0) + { + if (Game.Objects['Grandma'].amount>0) list.push(choose([ + 'Your rolling pins are rolling and pinning!', + 'Production is steady!' + ])); + + if (Game.Objects['Grandma'].amount>0) list.push(choose([ + 'Your ovens are diligently baking more and more cookies.', + 'Your ovens burn a whole batch. Ah well! Still good.' + ])); + + if (Game.Objects['Farm'].amount>0) list.push(choose([ + 'Scores of cookies come out of your kitchens.', + 'Today, new recruits are joining your kitchens!' + ])); + + if (Game.Objects['Factory'].amount>0) list.push(choose([ + 'Your factories are producing an unending stream of baked goods.', + 'Your factory workers decide to go on strike!', + 'It\'s safety inspection day in your factories.' + ])); + + if (Game.Objects['Mine'].amount>0) list.push(choose([ + 'Your secret recipes are kept safely inside a giant underground vault.', + 'Your chefs are working on new secret recipes!' + ])); + + if (Game.Objects['Shipment'].amount>0) list.push(choose([ + 'Your supermarkets are bustling with happy, hungry customers.', + 'Your supermarkets are full of cookie merch!' + ])); + + if (Game.Objects['Alchemy lab'].amount>0) list.push(choose([ + 'It\'s a new trading day at the stock exchange, and traders can\'t get enough of your shares!', + 'Your stock is doubling in value by the minute!' + ])); + + if (Game.Objects['Portal'].amount>0) list.push(choose([ + 'You just released a new TV show episode!', + 'Your cookie-themed TV show is being adapted into a new movie!' + ])); + + if (Game.Objects['Time machine'].amount>0) list.push(choose([ + 'Your theme parks are doing well - puddles of vomit and roller-coaster casualties are being swept under the rug!', + 'Visitors are stuffing themselves with cookies before riding your roller-coasters. You might want to hire more clean-up crews.' + ])); + + if (Game.Objects['Antimatter condenser'].amount>0) list.push(choose([ + 'Cookiecoin is officially the most mined digital currency in the history of mankind!', + 'Cookiecoin piracy is rampant!' + ])); + + if (Game.Objects['Prism'].amount>0) list.push(choose([ + 'Your corporate nations just gained a new parliament!', + 'You\'ve just annexed a new nation!', + 'A new nation joins the grand cookie conglomerate!' + ])); + + if (Game.Objects['Chancemaker'].amount>0) list.push(choose([ + 'Your intergalactic federation of cookie-sponsored planets reports record-breaking profits!', + 'Billions of unwashed aliens are pleased to join your workforce as you annex their planet!', + 'New toll opened on interstellar highway, funnelling more profits into the cookie economy!' + ])); + + if (Game.Objects['Fractal engine'].amount>0) list.push(choose([ + 'Your cookie-based political party is doing fantastic in the polls!', + 'New pro-cookie law passes without a hitch thanks to your firm grasp of the political ecosystem!', + 'Your appointed senators are overturning cookie bans left and right!' + ])); + + if (Game.Objects['Javascript console'].amount>0) list.push(choose([ + 'Cookies are now one of the defining aspects of mankind! Congratulations!', + 'Time travelers report that this era will later come to be known, thanks to you, as the cookie millennium!', + 'Cookies now deeply rooted in human culture, likely puzzling future historians!' + ])); + + if (Game.Objects['Idleverse'].amount>0) list.push(choose([ + 'Public aghast as all remaining aspects of their lives overtaken by universal cookie industry!', + 'Every single product currently sold in the observable universe can be traced back to your company! And that\'s a good thing.', + 'Antitrust laws let out a helpless whimper before being engulfed by your sprawling empire!' + ])); + + if (Game.Objects['Cortex baker'].amount>0) list.push(choose([ + 'Bold new law proposal would grant default ownership of every new idea by anyone anywhere to '+Game.bakeryName+'\'s bakery!', + 'Bakery think tanks accidentally reinvent cookies for the 57th time this week!', + 'Bakery think tanks invent entire new form of human communication to advertise and boost cookie sales!' + ])); + + if (Game.Objects['You'].amount>0) list.push(choose([ + ''+Game.bakeryName+' releases new self-help book: "How I Made My '+Beautify(Game.cookiesEarned)+' Cookies And How You Can Too"!', + 'Don\'t miss our interview tonight with the stupefying '+Game.bakeryName+', who discusses where to go next once you\'re at the top!', + 'Fame, beauty, biscuits; '+Game.bakeryName+' has it all - but is it enough?' + ])); + } + + if (loreProgress<=0) list.push('Such a grand day to begin a new business.'); + else if (loreProgress<=1) list.push('You\'re baking up a storm!'); + else if (loreProgress<=2) list.push('You are confident that one day, your cookie company will be the greatest on the market!'); + else if (loreProgress<=3) list.push('Business is picking up!'); + else if (loreProgress<=4) list.push('You\'re making sales left and right!'); + else if (loreProgress<=5) list.push('Everyone wants to buy your cookies!'); + else if (loreProgress<=6) list.push('You are now spending most of your day signing contracts!'); + else if (loreProgress<=7) list.push('You\'ve been elected "business tycoon of the year"!'); + else if (loreProgress<=8) list.push('Your cookies are a worldwide sensation! Well done, old chap!'); + else if (loreProgress<=9) list.push('Your brand has made its way into popular culture. Children recite your slogans and adults reminisce them fondly!'); + else if (loreProgress<=10) list.push('A business day like any other. It\'s good to be at the top!'); + else if (loreProgress<=11) list.push('You look back on your career. It\'s been a fascinating journey, building your baking empire from the ground up.'); + } + + for (var i=0;iGame.fps*10 && Game.Has('Fortune cookies') && Math.random()<(Game.HasAchiev('O Fortuna')?0.04:0.02)) + { + var fortunes=[]; + for (var i in Game.Tiers['fortune'].upgrades) + { + var it=Game.Tiers['fortune'].upgrades[i]; + if (!Game.HasUnlocked(it.name)) fortunes.push(it); + } + + if (!Game.fortuneGC) fortunes.push('fortuneGC'); + if (!Game.fortuneCPS) fortunes.push('fortuneCPS'); + + if (fortunes.length>0) + { + list=[]; + var me=choose(fortunes); + Game.TickerEffect={type:'fortune',sub:me}; + + if (me=='fortuneGC') me=loc("Today is your lucky day!");/*
Click here for a golden cookie.';*/ + else if (me=='fortuneCPS') {Math.seedrandom(Game.seed+'-fortune');me=loc("Your lucky numbers are:")+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)/*+'
Click here to gain one hour of your CpS.'*/;Math.seedrandom();} + else + { + if (EN) + { + me=me.dname.substring(me.name.indexOf('#'))+' : '+me.baseDesc.substring(me.baseDesc.indexOf('')+3); + me=me.substring(0,me.length-4); + } + else if (me.buildingTie) me=me.dname+' : '+loc(choose(["Never forget your %1.","Pay close attention to the humble %1.","You've been neglecting your %1.","Remember to visit your %1 sometimes."]),me.buildingTie.single); + else me=me.dname+' : '+loc(choose(["You don't know what you have until you've lost it.","Remember to take breaks.","Hey, what's up. I'm a fortune cookie.","You think you have it bad? Look at me."])); + } + me='
'+me+'
'; + list=[me]; + } + } + + if (Game.windowW'+NEWS+(EN?'help!':loc("help me!"))+'']; + + Game.TickerAge=Game.fps*10; + Game.Ticker=choose(list); + Game.AddToLog(Game.Ticker); + Game.TickerN++; + Game.TickerDraw(); + } + Game.tickerL=l('commentsText1'); + Game.tickerBelowL=l('commentsText2'); + Game.tickerTooNarrow=900; + Game.TickerDraw=function() + { + var str=''; + if (Game.Ticker!='') str=Game.Ticker; + Game.tickerBelowL.innerHTML=Game.tickerL.innerHTML; + Game.tickerL.innerHTML=str; + + Game.tickerBelowL.className='commentsText'; + void Game.tickerBelowL.offsetWidth; + Game.tickerBelowL.className='commentsText risingAway'; + Game.tickerL.className='commentsText'; + void Game.tickerL.offsetWidth; + Game.tickerL.className='commentsText risingUp'; + } + AddEvent(Game.tickerL,'click',function(event){ + Game.Ticker=''; + Game.TickerClicks++; + if (Game.windowW=50) {Game.Win('Tabloid addiction');} + + if (Game.TickerEffect && Game.TickerEffect.type=='fortune') + { + PlaySound('snd/fortune.mp3',1); + Game.SparkleAt(Game.mouseX,Game.mouseY); + var effect=Game.TickerEffect.sub; + if (effect=='fortuneGC') + { + Game.Notify(loc("Fortune!"),loc("A golden cookie has appeared."),[10,32]); + Game.fortuneGC=1; + var newShimmer=new Game.shimmer('golden',{noWrath:true}); + } + else if (effect=='fortuneCPS') + { + Game.Notify(loc("Fortune!"),loc("You gain one hour of your CpS (capped at double your bank)."),[10,32]); + Game.fortuneCPS=1; + Game.Earn(Math.min(Game.cookiesPs*60*60,Game.cookies)); + } + else + { + Game.Notify(effect.dname,loc("You've unlocked a new upgrade."),effect.icon); + effect.unlock(); + } + } + + Game.TickerEffect=0; + + }); + + Game.Log=[]; + Game.AddToLog=function(what) + { + Game.Log.unshift(what); + if (Game.Log.length>100) Game.Log.pop(); + } + + Game.vanilla=1; + /*===================================================================================== + BUILDINGS + =======================================================================================*/ + Game.last=0; + + Game.storeToRefresh=1; + Game.priceIncrease=1.15; + Game.buyBulk=1; + Game.buyMode=1;//1 for buy, -1 for sell + Game.buyBulkOld=Game.buyBulk;//used to undo changes from holding Shift or Ctrl + Game.buyBulkShortcut=0;//are we pressing Shift or Ctrl? + + Game.Objects={}; + Game.ObjectsById=[]; + Game.ObjectsN=0; + Game.BuildingsOwned=0; + Game.Object=function(name,commonName,desc,icon,iconColumn,art,price,cps,buyFunction) + { + this.id=Game.ObjectsN; + this.name=name; + this.dname=name; + this.displayName=this.name; + commonName=commonName.split('|'); + this.single=commonName[0]; + this.plural=commonName[1]; + this.bsingle=this.single;this.bplural=this.plural;//store untranslated as we use those too + this.actionName=commonName[2]; + this.extraName=commonName[3]; + this.extraPlural=commonName[4]; + this.desc=desc; + if (true)//if (EN) + { + this.dname=loc(this.name); + this.single=loc(this.single); + this.plural=loc(this.plural); + this.desc=loc(FindLocStringByPart(this.name+' quote')); + } + this.basePrice=price; + this.price=this.basePrice; + this.bulkPrice=this.price; + this.cps=cps; + this.baseCps=this.cps; + this.mouseOn=false; + this.mousePos=[-100,-100]; + this.productionAchievs=[]; + + this.n=this.id; + if (this.n!=0) + { + //new automated price and CpS curves + //this.baseCps=Math.ceil(((this.n*0.5)*Math.pow(this.n*1,this.n*0.9))*10)/10; + //this.baseCps=Math.ceil((Math.pow(this.n*1,this.n*0.5+2.35))*10)/10;//by a fortunate coincidence, this gives the 3rd, 4th and 5th buildings a CpS of 10, 69 and 420 + this.baseCps=Math.ceil((Math.pow(this.n*1,this.n*0.5+2))*10)/10;//0.45 used to be 0.5 + //this.baseCps=Math.ceil((Math.pow(this.n*1,this.n*0.45+2.10))*10)/10; + //clamp 14,467,199 to 14,000,000 (there's probably a more elegant way to do that) + var digits=Math.pow(10,(Math.ceil(Math.log(Math.ceil(this.baseCps))/Math.LN10)))/100; + this.baseCps=Math.round(this.baseCps/digits)*digits; + + this.basePrice=(this.n*1+9+(this.n<5?0:Math.pow(this.n-5,1.75)*5))*Math.pow(10,this.n)*(Math.max(1,this.n-14)); + //this.basePrice=(this.n*2.5+7.5)*Math.pow(10,this.n); + var digits=Math.pow(10,(Math.ceil(Math.log(Math.ceil(this.basePrice))/Math.LN10)))/100; + this.basePrice=Math.round(this.basePrice/digits)*digits; + if (this.id>=16) this.basePrice*=10; + if (this.id>=17) this.basePrice*=10; + if (this.id>=18) this.basePrice*=10; + if (this.id>=19) this.basePrice*=20; + this.price=this.basePrice; + this.bulkPrice=this.price; + } + + this.totalCookies=0; + this.storedCps=0; + this.storedTotalCps=0; + this.icon=icon; + this.iconColumn=iconColumn; + this.art=art; + if (art.base) + {art.pic=art.base+'.png';art.bg=art.base+'Background.png';} + this.buyFunction=buyFunction; + this.locked=1; + this.level=0; + this.vanilla=Game.vanilla; + + this.tieredUpgrades={}; + this.tieredAchievs={}; + this.synergies=[]; + this.fortune=0; + + this.amount=0; + this.bought=0; + this.highest=0; + this.free=0; + + this.eachFrame=0; + + this.minigameUrl=0;//if this is defined, load the specified script if the building's level is at least 1 + this.minigameName=0; + this.onMinigame=false; + this.minigameLoaded=false; + + this.switchMinigame=function(on)//change whether we're on the building's minigame + { + if (!Game.isMinigameReady(this)) on=false; + if (on==-1) on=!this.onMinigame; + this.onMinigame=on; + if (this.id!=0) + { + if (this.onMinigame) + { + l('row'+this.id).classList.add('onMinigame'); + //l('rowSpecial'+this.id).style.display='block'; + //l('rowCanvas'+this.id).style.display='none'; + if (this.minigame.onResize) this.minigame.onResize(); + } + else + { + l('row'+this.id).classList.remove('onMinigame'); + //l('rowSpecial'+this.id).style.display='none'; + //l('rowCanvas'+this.id).style.display='block'; + } + } + this.refresh(); + } + + this.getPrice=function(n) + { + var price=this.basePrice*Math.pow(Game.priceIncrease,Math.max(0,this.amount-this.free)); + price=Game.modifyBuildingPrice(this,price); + return Math.ceil(price); + } + this.getSumPrice=function(amount)//return how much it would cost to buy [amount] more of this building + { + var price=0; + for (var i=Math.max(0,this.amount);i=price) + { + bought++; + moni+=price; + Game.Spend(price); + this.amount++; + this.bought++; + price=this.getPrice(); + this.price=price; + if (this.buyFunction) this.buyFunction(); + Game.recalculateGains=1; + if (this.amount==1 && this.id!=0) l('row'+this.id).classList.add('enabled'); + this.highest=Math.max(this.highest,this.amount); + Game.BuildingsOwned++; + success=1; + } + } + if (success) {PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75);this.refresh();} + //if (moni>0 && amount>1) Game.Notify(this.name,'Bought '+bought+' for '+Beautify(moni)+' cookies','',2); + } + this.sell=function(amount,bypass) + { + var success=0; + var moni=0; + var sold=0; + if (amount==-1) amount=this.amount; + if (!amount) amount=Game.buyBulk; + for (var i=0;i0) + { + sold++; + moni+=price; + Game.cookies+=price; + Game.cookiesEarned=Math.max(Game.cookies,Game.cookiesEarned);//this is to avoid players getting the cheater achievement when selling buildings that have a higher price than they used to + this.amount--; + price=this.getPrice(); + this.price=price; + if (this.sellFunction) this.sellFunction(); + Game.recalculateGains=1; + if (this.amount==0 && this.id!=0) l('row'+this.id).classList.remove('enabled'); + Game.BuildingsOwned--; + success=1; + } + } + if (success && Game.hasGod) + { + var godLvl=Game.hasGod('ruin'); + var old=Game.hasBuff('Devastation'); + if (old) + { + if (godLvl==1) old.multClick+=sold*0.01; + else if (godLvl==2) old.multClick+=sold*0.005; + else if (godLvl==3) old.multClick+=sold*0.0025; + } + else + { + if (godLvl==1) Game.gainBuff('devastation',10,1+sold*0.01); + else if (godLvl==2) Game.gainBuff('devastation',10,1+sold*0.005); + else if (godLvl==3) Game.gainBuff('devastation',10,1+sold*0.0025); + } + } + if (success && Game.shimmerTypes['golden'].n<=0 && Game.auraMult('Dragon Orbs')>0) + { + var highestBuilding=0; + for (var i in Game.Objects) {if (Game.Objects[i].amount>0) highestBuilding=Game.Objects[i];} + if (highestBuilding==this && Math.random()0) Game.Notify(this.name,'Sold '+sold+' for '+Beautify(moni)+' cookies','',2); + } + this.sacrifice=function(amount)//sell without getting back any money + { + var success=0; + //var moni=0; + var sold=0; + if (amount==-1) amount=this.amount; + if (!amount) amount=1; + for (var i=0;i0) + { + sold++; + //moni+=price; + //Game.cookies+=price; + //Game.cookiesEarned=Math.max(Game.cookies,Game.cookiesEarned); + this.amount--; + price=this.getPrice(); + this.price=price; + if (this.sellFunction) this.sellFunction(); + Game.recalculateGains=1; + if (this.amount==0 && this.id!=0) l('row'+this.id).classList.remove('enabled'); + Game.BuildingsOwned--; + success=1; + } + } + if (success) {this.refresh();} + //if (moni>0) Game.Notify(this.name,'Sold '+sold+' for '+Beautify(moni)+' cookies','',2); + } + this.buyFree=function(amount)//unlike getFree, this still increases the price + { + for (var i=0;i=price) + { + this.amount++; + this.bought++; + this.price=this.getPrice(); + Game.recalculateGains=1; + if (this.amount==1 && this.id!=0) l('row'+this.id).classList.add('enabled'); + this.highest=Math.max(this.highest,this.amount); + Game.BuildingsOwned++; + } + } + this.refresh(); + } + this.getFree=function(amount)//get X of this building for free, with the price behaving as if you still didn't have them + { + this.amount+=amount; + this.bought+=amount; + this.free+=amount; + this.highest=Math.max(this.highest,this.amount); + Game.BuildingsOwned+=amount; + this.highest=Math.max(this.highest,this.amount); + this.refresh(); + } + this.getFreeRanks=function(amount)//this building's price behaves as if you had X less of it + { + this.free+=amount; + this.refresh(); + } + + this.tooltip=function() + { + var me=this; + var ariaText=''; + var desc=me.desc; + var name=me.dname; + if (Game.season=='fools') + { + if (!Game.foolObjects[me.name]) + { + name=Game.foolObjects['Unknown'].name; + desc=Game.foolObjects['Unknown'].desc; + } + else + { + name=Game.foolObjects[me.name].name; + desc=Game.foolObjects[me.name].desc; + } + } + var icon=[me.iconColumn,0]; + if (me.locked) + { + name='???'; + desc='???'; + icon=[0,7]; + } + //if (l('rowInfo'+me.id) && Game.drawT%10==0) l('rowInfoContent'+me.id).innerHTML='• '+me.amount+' '+(me.amount==1?me.single:me.plural)+'
• producing '+Beautify(me.storedTotalCps,1)+' '+(me.storedTotalCps==1?'cookie':'cookies')+' per second
• total : '+Beautify(me.totalCookies)+' '+(Math.floor(me.totalCookies)==1?'cookie':'cookies')+' '+me.actionName; + + var canBuy=false; + var price=me.bulkPrice; + if ((Game.buyMode==1 && Game.cookies>=price) || (Game.buyMode==-1 && me.amount>0)) canBuy=true; + + var synergiesStr=''; + //note : might not be entirely accurate, math may need checking + if (me.amount>0) + { + var synergiesWith={}; + var synergyBoost=0; + + if (me.name=='Grandma') + { + for (var i in Game.GrandmaSynergies) + { + if (Game.Has(Game.GrandmaSynergies[i])) + { + var other=Game.Upgrades[Game.GrandmaSynergies[i]].buildingTie; + var mult=me.amount*0.01*(1/(other.id-1)); + var boost=(other.storedTotalCps*Game.globalCpsMult)-(other.storedTotalCps*Game.globalCpsMult)/(1+mult); + synergyBoost+=boost; + if (!synergiesWith[other.plural]) synergiesWith[other.plural]=0; + synergiesWith[other.plural]+=mult; + } + } + } + else if (me.name=='Portal' && Game.Has('Elder Pact')) + { + var other=Game.Objects['Grandma']; + var boost=(me.amount*0.05*other.amount)*Game.globalCpsMult; + synergyBoost+=boost; + if (!synergiesWith[other.plural]) synergiesWith[other.plural]=0; + synergiesWith[other.plural]+=boost/(other.storedTotalCps*Game.globalCpsMult); + } + + for (var i in me.synergies) + { + var it=me.synergies[i]; + if (Game.Has(it.name)) + { + var weight=0.05; + var other=it.buildingTie1; + if (me==it.buildingTie1) {weight=0.001;other=it.buildingTie2;} + var boost=(other.storedTotalCps*Game.globalCpsMult)-(other.storedTotalCps*Game.globalCpsMult)/(1+me.amount*weight); + synergyBoost+=boost; + if (!synergiesWith[other.plural]) synergiesWith[other.plural]=0; + synergiesWith[other.plural]+=me.amount*weight; + } + } + if (synergyBoost>0) + { + for (var i in synergiesWith) + { + if (synergiesStr!='') synergiesStr+=', '; + synergiesStr+=''+i+' +'+Beautify(synergiesWith[i]*100,1)+'%'; + } + synergiesStr=loc("...also boosting some other buildings:")+' '+synergiesStr+' - '+loc("all combined, these boosts account for %1 per second (%2% of total CpS)",[loc("%1 cookie",LBeautify(synergyBoost,1)),Beautify((synergyBoost/Game.cookiesPs)*100,1)]); + } + } + + if (Game.prefs.screenreader) + { + if (me.locked) ariaText='This building is not yet unlocked. '; + else ariaText=name+'. '; + if (!me.locked) ariaText+='You own '+me.amount+'. '; + ariaText+=(canBuy?'Can buy 1 for':'Cannot afford the')+' '+Beautify(Math.round(price))+' cookies. '; + if (!me.locked && me.totalCookies>0) + { + ariaText+='Each '+me.single+' produces '+Beautify((me.storedTotalCps/me.amount)*Game.globalCpsMult,1)+' cookies per second. '; + ariaText+=Beautify(me.totalCookies)+' cookies '+me.actionName+' so far. '; + } + if (!me.locked) ariaText+=desc; + + var ariaLabel=l('ariaReader-product-'+(me.id)); + if (ariaLabel) ariaLabel.innerHTML=ariaText.replace(/(<([^>]+)>)/gi,' '); + } + + return '
'+Beautify(Math.round(price))+''+Game.costDetails(price)+'
'+name+'
'+'
'+loc("owned: %1",me.amount)+'
'+(me.free>0?'
'+loc("free: %1!",me.free)+'
':'')+'
'+ + '
'+desc+'
'+ + (me.totalCookies>0?( + '
'+ + (me.amount>0?'
'+loc("each %1 produces %2 per second",[me.single,loc("%1 cookie",LBeautify((me.storedTotalCps/me.amount)*Game.globalCpsMult,1))])+'
':'')+ + '
'+loc("%1 producing %2 per second",[loc("%1 "+me.bsingle,LBeautify(me.amount)),loc("%1 cookie",LBeautify(me.storedTotalCps*Game.globalCpsMult,1))])+' ('+loc("%1% of total CpS",Beautify(Game.cookiesPs>0?((me.amount>0?((me.storedTotalCps*Game.globalCpsMult)/Game.cookiesPs):0)*100):0,1))+')
'+ + (synergiesStr?('
'+synergiesStr+'
'):'')+ + (EN?'
'+Beautify(me.totalCookies)+' '+(Math.floor(me.totalCookies)==1?'cookie':'cookies')+' '+me.actionName+' so far
':'
'+loc("%1 produced so far",loc("%1 cookie",LBeautify(me.totalCookies)))+'
') + ):'')+ + '
'; + } + this.levelTooltip=function() + { + var me=this; + return '
'+loc("Level %1 %2",[Beautify(me.level),me.plural])+'
'+(EN?((me.level==1?me.extraName:me.extraPlural).replace('[X]',Beautify(me.level))+' granting +'+Beautify(me.level)+'% '+me.dname+' CpS.'):loc("Granting +%1% %2 CpS.",[Beautify(me.level),me.single]))+'
'+loc("Click to level up for %1.",''+loc("%1 sugar lump",LBeautify(me.level+1))+'')+((me.level==0 && me.minigameUrl)?'
'+loc("Levelling up this building unlocks a minigame.")+'':'')+'
'; + } + this.levelUp=function(me){ + return function(free){Game.spendLump(me.level+1,loc("level up your %1",me.plural),function() + { + me.level+=1; + if (me.level>=10 && me.levelAchiev10) Game.Win(me.levelAchiev10.name); + if (!free) PlaySound('snd/upgrade.mp3',0.6); + Game.LoadMinigames(); + me.refresh(); + if (l('productLevel'+me.id)){var rect=l('productLevel'+me.id).getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24+32-TopBarOffset);} + if (me.minigame && me.minigame.onLevel) me.minigame.onLevel(me.level); + },free)();}; + }(this); + + this.refresh=function()//show/hide the building display based on its amount, and redraw it + { + this.price=this.getPrice(); + if (Game.buyMode==1) this.bulkPrice=this.getSumPrice(Game.buyBulk); + else if (Game.buyMode==-1 && Game.buyBulk==-1) this.bulkPrice=this.getReverseSumPrice(1000); + else if (Game.buyMode==-1) this.bulkPrice=this.getReverseSumPrice(Game.buyBulk); + this.rebuild(); + if (this.amount==0 && this.id!=0) l('row'+this.id).classList.remove('enabled'); + else if (this.amount>0 && this.id!=0) l('row'+this.id).classList.add('enabled'); + if (this.muted>0 && this.id!=0) {l('row'+this.id).classList.add('muted');l('mutedProduct'+this.id).style.display='inline-block';} + else if (this.id!=0) {l('row'+this.id).classList.remove('muted');l('mutedProduct'+this.id).style.display='none';} + //if (!this.onMinigame && !this.muted) {} + //else this.pics=[]; + } + this.rebuild=function() + { + var me=this; + //var classes='product'; + var price=me.bulkPrice; + /*if (Game.cookiesEarned>=me.basePrice || me.bought>0) {classes+=' unlocked';me.locked=0;} else {classes+=' locked';me.locked=1;} + if (Game.cookies>=price) classes+=' enabled'; else classes+=' disabled'; + if (me.l.className.indexOf('toggledOff')!=-1) classes+=' toggledOff'; + */ + var icon=[0,me.icon]; + var iconOff=[1,me.icon]; + if (me.iconFunc) icon=me.iconFunc(); + + var desc=me.desc; + var name=me.dname; + var displayName=me.displayName; + if (Game.season=='fools') + { + if (!Game.foolObjects[me.name]) + { + icon=[2,0]; + iconOff=[3,0]; + name=Game.foolObjects['Unknown'].name; + desc=Game.foolObjects['Unknown'].desc; + } + else + { + icon=[2,me.icon]; + iconOff=[3,me.icon]; + name=Game.foolObjects[me.name].name; + desc=Game.foolObjects[me.name].desc; + } + displayName=name; + //if (name.length>16) displayName=''+name+''; + } + else if (!EN) displayName=name; + //else if (!EN && name.length>16) displayName=''+name+''; + icon=[icon[0]*64,icon[1]*64]; + iconOff=[iconOff[0]*64,iconOff[1]*64]; + + //me.l.className=classes; + //l('productIcon'+me.id).style.backgroundImage='url('+Game.resPath+'img/'+icon+')'; + l('productIcon'+me.id).style.backgroundPosition='-'+icon[0]+'px -'+icon[1]+'px'; + //l('productIconOff'+me.id).style.backgroundImage='url('+Game.resPath+'img/'+iconOff+')'; + l('productIconOff'+me.id).style.backgroundPosition='-'+iconOff[0]+'px -'+iconOff[1]+'px'; + l('productName'+me.id).innerHTML=displayName; + if (name.length>12/Langs[locId].w && (Game.season=='fools' || !EN)) l('productName'+me.id).classList.add('longProductName'); else l('productName'+me.id).classList.remove('longProductName'); + l('productOwned'+me.id).textContent=me.amount?me.amount:''; + l('productPrice'+me.id).textContent=Beautify(Math.round(price)); + l('productPriceMult'+me.id).textContent=(Game.buyBulk>1)?('x'+Game.buyBulk+' '):''; + l('productLevel'+me.id).textContent='lvl '+Beautify(me.level); + if (Game.isMinigameReady(me) && Game.ascensionMode!=1) + { + l('productMinigameButton'+me.id).style.display='block'; + if (!me.onMinigame) l('productMinigameButton'+me.id).textContent=loc("View %1",me.minigameName); + else l('productMinigameButton'+me.id).textContent=loc("Close %1",me.minigameName); + } + else l('productMinigameButton'+me.id).style.display='none'; + if (Game.isMinigameReady(me) && Game.ascensionMode!=1 && me.minigame.dragonBoostTooltip && Game.hasAura('Supreme Intellect')) + { + l('productDragonBoost'+me.id).style.display='block'; + } + else l('productDragonBoost'+me.id).style.display='none'; + } + this.muted=false; + this.mute=function(val) + { + if (this.id==0) return false; + this.muted=val; + if (val) {l('productMute'+this.id).classList.add('on');l('row'+this.id).classList.add('muted');l('mutedProduct'+this.id).style.display='inline-block';} + else {l('productMute'+this.id).classList.remove('on');l('row'+this.id).classList.remove('muted');l('mutedProduct'+this.id).style.display='none';} + }; + + this.draw=function(){}; + + var str=''; + if (this.id!=0) str+='
'; + str+='
'; + str+='
'; + str+='
'; + if (this.id!=0) str+='
'+loc("Mute")+'
('+loc("Minimize this building")+')
','this')+' onclick="Game.ObjectsById['+this.id+'].mute(1);PlaySound(Game.ObjectsById['+this.id+'].muted?\'snd/clickOff2.mp3\':\'snd/clickOn2.mp3\');" id="productMute'+this.id+'">'+loc("Mute")+'
'; + str+=''; + str+='
'; + if (this.id==0) l('sectionLeftExtra').innerHTML=l('sectionLeftExtra').innerHTML+str; + else + { + if (this.id==19) + { + str+=''; + str+=''+loc("Customize")+''; + } + str+=''; + str+='
'; + str+=''; + l('rows').innerHTML=l('rows').innerHTML+str; + + //building canvas + this.pics=[]; + + this.toResize=true; + this.redraw=function() + { + var me=this; + me.pics=[]; + } + this.draw=function() + { + if (this.amount<=0) return false; + if (this.toResize) + { + this.canvas.width=this.canvas.clientWidth; + this.canvas.height=this.canvas.clientHeight; + this.toResize=false; + } + var ctx=this.ctx; + //clear + //ctx.clearRect(0,0,this.canvas.width,this.canvas.height); + ctx.globalAlpha=1; + + //pic : a loaded picture or a function returning a loaded picture + //bg : a loaded picture or a function returning a loaded picture - tiled as the background, 128x128 + //xV : the pictures will have a random horizontal shift by this many pixels + //yV : the pictures will have a random vertical shift by this many pixels + //w : how many pixels between each picture (or row of pictures) + //x : horizontal offset + //y : vertical offset (+32) + //rows : if >1, arrange the pictures in rows containing this many pictures + //frames : if present, slice the pic in [frames] horizontal slices and pick one at random + + var pic=this.art.pic; + if (this.id==19) pic='canvasAdd'; + var bg=this.art.bg; + var xV=this.art.xV||0; + var yV=this.art.yV||0; + var w=this.art.w||48; + var h=this.art.h||48; + var offX=this.art.x||0; + var offY=this.art.y||0; + var rows=this.art.rows||1; + var frames=this.art.frames||1; + + if (typeof(bg)=='string') ctx.fillPattern(Pic(this.art.bg),0,0,this.canvas.width,this.canvas.height,128,128); + else bg(this,ctx); + /* + ctx.globalAlpha=0.5; + if (typeof(bg)=='string')//test + { + ctx.fillPattern(Pic(this.art.bg),-128+Game.T%128,0,this.canvas.width+128,this.canvas.height,128,128); + ctx.fillPattern(Pic(this.art.bg),-128+Math.floor(Game.T/2)%128,-128+Math.floor(Game.T/2)%128,this.canvas.width+128,this.canvas.height+128,128,128); + } + ctx.globalAlpha=1; + */ + var maxI=Math.floor(this.canvas.width/(w/rows)+1); + var iT=Math.min(this.amount,maxI); + var i=this.pics.length; + + + var x=0; + var y=0; + var added=0; + if (i!=iT) + { + //for (var iter=0;iter<3;iter++) + //{ + var prevFrame=0; + while (i1) frame=Math.floor(Math.random()*frames); + if (frames>1) {frame=prevFrame+Math.floor(Math.random()*(frames-1)+1);frame=frame%frames;} + prevFrame=frame; + this.pics.push({x:Math.floor(x),y:Math.floor(y),z:y,pic:usedPic,id:i,frame:frame}); + i++; + added++; + } + while (i>iT) + //else if (i>iT) + { + this.pics.sort(Game.sortSpritesById); + this.pics.pop(); + i--; + added--; + } + //} + this.pics.sort(Game.sortSprites); + } + + var len=this.pics.length; + + if (this.mouseOn) + { + var selected=-1; + if (this.name=='Grandma') + { + var marginW=-18; + var marginH=-10; + for (var i=0;i=pic.x-marginW && this.mousePos[0]=pic.y-marginH && this.mousePos[1]0) + { + var str=loc("Names in white were submitted by our supporters on Patreon."); + ctx.globalAlpha=0.75; + ctx.fillStyle='#000'; + ctx.font='9px Merriweather'; + ctx.textAlign='left'; + ctx.fillRect(0,0,ctx.measureText(str).width+4,12); + ctx.globalAlpha=1; + ctx.fillStyle='rgba(255,255,255,0.7)'; + ctx.fillText(str,2,8); + if (EN) + { + ctx.fillStyle='rgba(255,255,255,1)'; + ctx.fillText('white',2+ctx.measureText('Names in ').width,8); + } + } + } + else if (this.name=='You') + { + var marginW=-16; + var marginH=64; + for (var i=0;i=pic.x-marginW && this.mousePos[0]=pic.y-marginH && this.mousePos[1]0 && Math.random()<0.2) {name=choose(Game.customGrandmaNames);custom=true;} + var text=loc("%1, age %2",[name,Beautify(Math.floor(70+Math.random()*30+years+this.level))]); + var width=ctx.measureText(text).width+12; + var x=Math.max(0,Math.min(pic.x+32-width/2+Math.random()*32-16,this.canvas.width-width)); + var y=4+Math.random()*8-4; + Math.seedrandom(); + ctx.fillStyle='#000'; + ctx.strokeStyle='#000'; + ctx.lineWidth=8; + ctx.globalAlpha=0.75; + ctx.beginPath(); + ctx.moveTo(pic.x+32,pic.y+32); + ctx.lineTo(Math.floor(x+width/2),Math.floor(y+20)); + ctx.stroke(); + ctx.fillRect(Math.floor(x),Math.floor(y),Math.floor(width),24); + ctx.globalAlpha=1; + if (custom) ctx.fillStyle='#fff'; + else ctx.fillStyle='rgba(255,255,255,0.7)'; + ctx.fillText(text,Math.floor(x+width/2),Math.floor(y+16)); + + ctx.drawImage(sprite,Math.floor(pic.x+Math.random()*4-2),Math.floor(pic.y+Math.random()*4-2)); + } + //else if (1) ctx.drawImage(sprite,0,0,sprite.width,sprite.height,pic.x,pic.y,sprite.width,sprite.height); + else if (pic.frame!=-1) ctx.drawImage(sprite,(sprite.width/frames)*pic.frame,0,sprite.width/frames,sprite.height,pic.x,pic.y,(sprite.width/frames),sprite.height); + else ctx.drawImage(sprite,pic.x,pic.y); + + if (selected==i && this.name=='You') + { + ctx.drawImage(Pic('youLight.png'),pic.x+11,0); + + Math.seedrandom(Game.seed+' cloneTitle'); + var cloneTitle=Math.floor(Math.random()*3); + Math.seedrandom(Game.seed+' clone '+pic.id); + ctx.font='9px Merriweather'; + ctx.textAlign='center'; + var text=loc("Clone")+' #'+Math.floor(Math.random()*500+pic.id*500+1); + if (EN) + { + text=[ + text, + Game.bakeryName+' '+romanize(pic.id+2)+(Math.random()<0.05?choose([', Jr.',', Esq.',', Etc.',', Cont\'d',', and so forth']):''), + choose([choose(['Lil\' $','Mini-$','$ '+(pic.id+2),'Attempt '+(pic.id+1),'Experiment '+(pic.id+1),'Not $','$, again','$, the sequel','$ '+(pic.id+2)+' Electric Boogaloo','Also $','$ (remixed)','The Other $','$, The Next Generation','$, part '+romanize(pic.id+2),'Revenge of $','The Return of $','$ reborn','$ in the flesh']),'$ "'+choose(['The Menace','The Artisan','The Relative','The Twin','The Specialist','The Officer','The Snitch','The Simpleton','The Genius','The Conformist','The Mistake','The Accident','Lab-grown','Vat Kid','Photocopy','Cloney','Ditto','Accounted For','Twitchy','Wacky','Zen','Rinse & Repeat','Spitting Image','Passing Resemblance','Nickname','Make It So','Deja-vu','Cookie','Clicky','Orteil','But Better','Guess Who','Transplant Fodder','Furthermore','One More Thing','Liquid','Second Chance','Offspring','Mulligan','Spare Parts'])+'" McClone']).replace('$',Game.bakeryName), + ][cloneTitle]; + } + var width=ctx.measureText(text).width+12; + var x=Math.max(0,Math.min(pic.x+32-width/2,this.canvas.width-width)); + var y=10; + ctx.fillStyle='#000'; + ctx.fillText(text,Math.floor(x+width/2),Math.floor(y)+1); + ctx.fillStyle='#fff'; + ctx.fillText(text,Math.floor(x+width/2),Math.floor(y)); + } + } + + /* + var picX=this.id; + var picY=12; + var w=1; + var h=1; + var w=Math.abs(Math.cos(Game.T*0.2+this.id*2-0.3))*0.2+0.8; + var h=Math.abs(Math.sin(Game.T*0.2+this.id*2))*0.3+0.7; + var x=64+Math.cos(Game.T*0.19+this.id*2)*8-24*w; + var y=128-Math.abs(Math.pow(Math.sin(Game.T*0.2+this.id*2),5)*16)-48*h; + ctx.drawImage(Pic('icons.png'),picX*48,picY*48,48,48,Math.floor(x),Math.floor(y),48*w,48*h); + */ + } + } + + Game.last=this; + Game.Objects[this.name]=this; + Game.ObjectsById.push(this); + Game.ObjectsN++; + return this; + } + + Game.DrawBuildings=function()//draw building displays with canvas + { + if (Game.drawT%3==0) + { + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (me.id>0 && !me.onMinigame && !me.muted) me.draw(); + else me.pics=[]; + } + } + } + + Game.sortSprites=function(a,b) + { + if (a.z>b.z) return 1; + else if (a.zb.id) return 1; + else if (a.id'+loc("You can also press %1 to bulk-buy or sell %2 of a building at a time, or %3 for %4.",[''+loc("Ctrl")+'','10',''+loc("Shift")+'','100'])+'' + ,'store')+ + '>'+ + '
'+loc("Buy")+'
'+ + '
'+loc("Sell")+'
'+ + '
1
'+ + '
10
'+ + '
100
'+ + '
'+loc("all")+'
'+ + ''; + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + str+=(Game.prefs.screenreader?'':''); + } + l('products').innerHTML=str; + + Game.storeBulkButton(-1); + + /*var SellAllPrompt=function(id) + { + return function(id){Game.Prompt('
Do you really want to sell your '+loc("%1 "+Game.ObjectsById[id].bsingle,LBeautify(Game.ObjectsById[id].amount))+'?
',[['Yes','Game.ObjectsById['+id+'].sell(-1);Game.ClosePrompt();'],['No','Game.ClosePrompt();']]);}(id); + }*/ + + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + me.l=l('product'+me.id); + + //these are a bit messy but ah well + if (!Game.touchEvents) + { + AddEvent(me.l,'click',function(what){return function(e){Game.ClickProduct(what);e.preventDefault();};}(me.id)); + } + else + { + AddEvent(me.l,'touchend',function(what){return function(e){Game.ClickProduct(what);e.preventDefault();};}(me.id)); + } + } + } + + Game.ClickProduct=function(what) + { + Game.ObjectsById[what].buy(); + } + + Game.RefreshStore=function()//refresh the store's buildings + { + for (var i in Game.Objects) + { + Game.Objects[i].refresh(); + } + Game.storeToRefresh=0; + } + + Game.ComputeCps=function(base,mult,bonus) + { + if (!bonus) bonus=0; + return ((base)*(Math.pow(2,mult))+bonus); + } + + Game.isMinigameReady=function(me) + {return (me.minigameUrl && me.minigameLoaded && me.level>0);} + Game.scriptBindings=[]; + Game.showedScriptLoadError=false; + Game.LoadMinigames=function()//load scripts for each minigame + { + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (me.minigameUrl && me.level>0 && !me.minigameLoaded && !me.minigameLoading && !l('minigameScript-'+me.id)) + { + me.minigameLoading=true; + //we're only loading the minigame scripts that aren't loaded yet and which have enough building level + //we call this function on building level up and on load + //console.log('Loading script '+me.minigameUrl+'...'); + setTimeout(function(me){return function(){ + var script=document.createElement('script'); + script.id='minigameScript-'+me.id; + Game.scriptBindings['minigameScript-'+me.id]=me; + script.setAttribute('src',me.minigameUrl+'?r='+Game.version); + script.onload=function(me,script){return function(){ + if (!me.minigameLoaded) Game.scriptLoaded(me,script); + }}(me,'minigameScript-'+me.id); + script.onerror=function(me,script){return function(){ + me.minigameLoading=false; + if (!me.minigameLoaded && !Game.showedScriptLoadError) + { + Game.showedScriptLoadError=true; + Game.Notify(loc("Error!"),'Couldn\'t load minigames. Try reloading.'); + } + }}(me,'minigameScript-'+me.id); + document.head.appendChild(script); + }}(me),10); + } + } + } + Game.scriptLoaded=function(who,script) + { + who.minigameLoading=false; + who.minigameLoaded=true; + who.refresh(); + who.minigame.launch(); + if (who.minigameSave) {who.minigame.reset(true);who.minigame.load(who.minigameSave);who.minigameSave=0;} + } + + Game.magicCpS=function(what) + { + /* + if (Game.Objects[what].amount>=250) + { + //this makes buildings give 1% more cookies for every building over 250. + //this turns out to be rather stupidly overpowered. + var n=Game.Objects[what].amount-250; + return 1+Math.pow(1.01,n); + } + else return 1; + */ + return 1; + } + + //define objects + new Game.Object('Cursor','cursor|cursors|clicked|[X] extra finger|[X] extra fingers','Autoclicks once every 10 seconds.',0,0,{},15,function(me){ + var add=0; + if (Game.Has('Thousand fingers')) add+= 0.1; + if (Game.Has('Million fingers')) add*= 5; + if (Game.Has('Billion fingers')) add*= 10; + if (Game.Has('Trillion fingers')) add*= 20; + if (Game.Has('Quadrillion fingers')) add*= 20; + if (Game.Has('Quintillion fingers')) add*= 20; + if (Game.Has('Sextillion fingers')) add*= 20; + if (Game.Has('Septillion fingers')) add*= 20; + if (Game.Has('Octillion fingers')) add*= 20; + if (Game.Has('Nonillion fingers')) add*= 20; + if (Game.Has('Decillion fingers')) add*= 20; + if (Game.Has('Undecillion fingers')) add*= 20; + if (Game.Has('Unshackled cursors')) add*= 25; + var mult=1; + var num=0; + for (var i in Game.Objects) {if (Game.Objects[i].name!='Cursor') num+=Game.Objects[i].amount;} + add=add*num; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS('Cursor'); + mult*=Game.eff('cursorCps'); + return Game.ComputeCps(0.1,Game.Has('Reinforced index finger')+Game.Has('Carpal tunnel prevention cream')+Game.Has('Ambidextrous'),add)*mult; + },function(){ + if (this.amount>=1) Game.Unlock(['Reinforced index finger','Carpal tunnel prevention cream']); + if (this.amount>=10) Game.Unlock('Ambidextrous'); + if (this.amount>=25) Game.Unlock('Thousand fingers'); + if (this.amount>=50) Game.Unlock('Million fingers'); + if (this.amount>=100) Game.Unlock('Billion fingers'); + if (this.amount>=150) Game.Unlock('Trillion fingers'); + if (this.amount>=200) Game.Unlock('Quadrillion fingers'); + if (this.amount>=250) Game.Unlock('Quintillion fingers'); + if (this.amount>=300) Game.Unlock('Sextillion fingers'); + if (this.amount>=350) Game.Unlock('Septillion fingers'); + if (this.amount>=400) Game.Unlock('Octillion fingers'); + if (this.amount>=450) Game.Unlock('Nonillion fingers'); + if (this.amount>=500) Game.Unlock('Decillion fingers'); + if (this.amount>=550) Game.Unlock('Undecillion fingers'); + + if (this.amount>=1) Game.Win('Click');if (this.amount>=2) Game.Win('Double-click');if (this.amount>=50) Game.Win('Mouse wheel');if (this.amount>=100) Game.Win('Of Mice and Men');if (this.amount>=200) Game.Win('The Digital');if (this.amount>=300) Game.Win('Extreme polydactyly');if (this.amount>=400) Game.Win('Dr. T');if (this.amount>=500) Game.Win('Thumbs, phalanges, metacarpals');if (this.amount>=600) Game.Win('With her finger and her thumb');if (this.amount>=700) Game.Win('Gotta hand it to you');if (this.amount>=800) Game.Win('The devil\'s workshop');if (this.amount>=900) Game.Win('All on deck');if (this.amount>=1000) Game.Win('A round of applause'); + }); + + Game.SpecialGrandmaUnlock=15; + new Game.Object('Grandma','grandma|grandmas|baked|Grandmas are [X] year older|Grandmas are [X] years older','A nice grandma to bake more cookies.',1,1,{pic:function(i){ + var list=['grandma']; + if (Game.Has('Farmer grandmas')) list.push('farmerGrandma'); + if (Game.Has('Worker grandmas')) list.push('workerGrandma'); + if (Game.Has('Miner grandmas')) list.push('minerGrandma'); + if (Game.Has('Cosmic grandmas')) list.push('cosmicGrandma'); + if (Game.Has('Transmuted grandmas')) list.push('transmutedGrandma'); + if (Game.Has('Altered grandmas')) list.push('alteredGrandma'); + if (Game.Has('Grandmas\' grandmas')) list.push('grandmasGrandma'); + if (Game.Has('Antigrandmas')) list.push('antiGrandma'); + if (Game.Has('Rainbow grandmas')) list.push('rainbowGrandma'); + if (Game.Has('Banker grandmas')) list.push('bankGrandma'); + if (Game.Has('Priestess grandmas')) list.push('templeGrandma'); + if (Game.Has('Witch grandmas')) list.push('witchGrandma'); + if (Game.Has('Lucky grandmas')) list.push('luckyGrandma'); + if (Game.Has('Metagrandmas')) list.push('metaGrandma'); + if (Game.Has('Script grannies')) list.push('scriptGrandma'); + if (Game.Has('Alternate grandmas')) list.push('alternateGrandma'); + if (Game.Has('Brainy grandmas')) list.push('brainyGrandma'); + if (Game.Has('Clone grandmas')) list.push('cloneGrandma'); + if (Game.season=='christmas') list.push('elfGrandma'); + if (Game.season=='easter') list.push('bunnyGrandma'); + return choose(list)+'.png'; + },bg:'grandmaBackground.png',xV:8,yV:8,w:32,rows:3,x:0,y:16},100,function(me){ + var mult=1; + for (var i in Game.GrandmaSynergies) + { + if (Game.Has(Game.GrandmaSynergies[i])) mult*=2; + } + if (Game.Has('Bingo center/Research facility')) mult*=4; + if (Game.Has('Ritual rolling pins')) mult*=2; + if (Game.Has('Naughty list')) mult*=2; + + if (Game.Has('Elderwort biscuits')) mult*=1.02; + + mult*=Game.eff('grandmaCps'); + + if (Game.Has('Cat ladies')) + { + for (var i=0;i0) return [3,2]; + return grandmaIcons[Game.elderWrath]; + }; + + + new Game.Object('Farm','farm|farms|harvested|[X] more acre|[X] more acres','Grows cookie plants from cookie seeds.',3,2,{base:'farm',xV:8,yV:8,w:64,rows:2,x:0,y:16},500,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.minigameUrl='minigameGarden.js'; + Game.last.minigameName=loc("Garden"); + + new Game.Object('Mine','mine|mines|mined|[X] mile deeper|[X] miles deeper','Mines out cookie dough and chocolate chips.',4,3,{base:'mine',xV:16,yV:16,w:64,rows:2,x:0,y:24},10000,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + + new Game.Object('Factory','factory|factories|mass-produced|[X] additional patent|[X] additional patents','Produces large quantities of cookies.',5,4,{base:'factory',xV:8,yV:0,w:64,rows:1,x:0,y:-22},3000,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + //Game.last.minigameUrl='minigameDungeon.js';//not yet + Game.last.minigameName=loc("Dungeon"); + + new Game.Object('Bank','bank|banks|banked|Interest rates [X]% better|Interest rates [X]% better','Generates cookies from interest.',6,15,{base:'bank',xV:8,yV:4,w:56,rows:1,x:0,y:13},0,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.minigameUrl='minigameMarket.js'; + Game.last.minigameName=loc("Stock Market"); + + new Game.Object('Temple','temple|temples|discovered|[X] sacred artifact retrieved|[X] sacred artifacts retrieved','Full of precious, ancient chocolate.',7,16,{base:'temple',xV:8,yV:4,w:72,rows:2,x:0,y:-5},0,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.minigameUrl='minigamePantheon.js'; + Game.last.minigameName=loc("Pantheon"); + + new Game.Object('Wizard tower','wizard tower|wizard towers|summoned|Incantations have [X] more syllable|Incantations have [X] more syllables','Summons cookies with magic spells.',8,17,{base:'wizardtower',xV:16,yV:16,w:48,rows:2,x:0,y:20},0,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Wizard tower';//shrink + Game.last.minigameUrl='minigameGrimoire.js'; + Game.last.minigameName=loc("Grimoire"); + + new Game.Object('Shipment','shipment|shipments|shipped|[X] galaxy fully explored|[X] galaxies fully explored','Brings in fresh cookies from the cookie planet.',9,5,{base:'shipment',xV:16,yV:16,w:64,rows:1,x:0,y:0},40000,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + + new Game.Object('Alchemy lab','alchemy lab|alchemy labs|transmuted|[X] primordial element mastered|[X] primordial elements mastered','Turns gold into cookies!',10,6,{base:'alchemylab',xV:16,yV:16,w:64,rows:2,x:0,y:16},200000,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Alchemy lab';//shrink + + new Game.Object('Portal','portal|portals|retrieved|[X] dimension enslaved|[X] dimensions enslaved','Opens a door to the Cookieverse.',11,7,{base:'portal',xV:32,yV:32,w:64,rows:2,x:0,y:0},1666666,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + + new Game.Object('Time machine','time machine|time machines|recovered|[X] century secured|[X] centuries secured','Brings cookies from the past, before they were even eaten.',12,8,{base:'timemachine',xV:32,yV:32,w:64,rows:1,x:0,y:0},123456789,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Time machine';//shrink + + new Game.Object('Antimatter condenser','antimatter condenser|antimatter condensers|condensed|[X] extra quark flavor|[X] extra quark flavors','Condenses the antimatter in the universe into cookies.',13,13,{base:'antimattercondenser',xV:0,yV:64,w:64,rows:1,x:0,y:0},3999999999,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Antim. condenser';//shrink + + new Game.Object('Prism','prism|prisms|converted|[X] new color discovered|[X] new colors discovered','Converts light itself into cookies.',14,14,{base:'prism',xV:16,yV:4,w:64,rows:1,x:0,y:20},75000000000,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + + new Game.Object('Chancemaker','chancemaker|chancemakers|spontaneously generated|Chancemakers are powered by [X]-leaf clovers|Chancemakers are powered by [X]-leaf clovers','Generates cookies out of thin air through sheer luck.',15,19,{base:'chancemaker',xV:8,yV:64,w:64,rows:1,x:0,y:0,rows:2},77777777777,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Chancemaker';//shrink + + new Game.Object('Fractal engine','fractal engine|fractal engines|made from cookies|[X] iteration deep|[X] iterations deep','Turns cookies into even more cookies.',16,20,{base:'fractalEngine',xV:8,yV:64,w:64,rows:1,x:0,y:0},12345678987654321,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Fractal engine';//shrink + + new Game.Object('Javascript console','javascript console|javascript consoles|programmed|Equipped with [X] external library|Equipped with [X] external libraries','Creates cookies from the very code this game was written in.',17,32,{base:'javascriptconsole',xV:8,yV:64,w:14,rows:1,x:8,y:-32,frames:2},12345678987654321,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.last.displayName='Javascript console';//shrink + + new Game.Object('Idleverse','idleverse|idleverses|hijacked|[X] manifold|[X] manifolds','There\'s been countless other idle universes running alongside our own. You\'ve finally found a way to hijack their production and convert whatever they\'ve been making into cookies!',18,33,{base:'idleverse',xV:8,yV:96,w:48,rows:2,x:0,y:0,frames:4},12345678987654321,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + + new Game.Object('Cortex baker','cortex baker|cortex bakers|imagined|[X] extra IQ point|[X] extra IQ points','These artificial brains the size of planets are capable of simply dreaming up cookies into existence. Time and space are inconsequential. Reality is arbitrary.',19,34,{base:'cortex',xV:8,yV:96,w:48,rows:1,x:0,y:0,frames:4},12345678987654321,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + + new Game.Object('You','You|You|cloned|[X] optimized gene|[X] optimized genes','You, alone, are the reason behind all these cookies. You figure if there were more of you... maybe you could make even more.',20,35,{pic:'you.png',bg:'youBackground.png',xV:0,yV:0,w:64,rows:2,x:0,y:0},12345678987654321,function(me){ + var mult=1; + mult*=Game.GetTieredCpsMult(me); + mult*=Game.magicCpS(me.name); + return me.baseCps*mult; + },function(){ + Game.UnlockTiered(this); + if (this.amount>=Game.SpecialGrandmaUnlock && Game.Objects['Grandma'].amount>0) Game.Unlock(this.grandma.name); + }); + Game.YouCustomizer={}; + Game.YouCustomizer.render=function() + { + var me=Game.Objects['You']; + var ctx=me.ctxAdd; + var img='you.png'; + var imgAddons='youAddons.png?v='+Game.version; + + Game.Loader.waitForLoad([img,imgAddons],function(){ + //accessing pixel data not allowed locally; set img and imgAddons to base64-encoded image strings for testing + if (!App && (Game.local)) + { + ctx.drawImage(Pic(img),0,0); + } + else + { + ctx.drawImage(Pic(img),0,0); + var canvasAddon=document.createElement('canvas'); + canvasAddon.width=32; + canvasAddon.height=32; + ctxAddon=canvasAddon.getContext('2d'); + var canvasCols=document.createElement('canvas'); + var colsN=64; + canvasCols.width=8; + canvasCols.height=colsN; + var ctxCols=canvasCols.getContext('2d'); + ctxCols.drawImage(Pic(imgAddons),0,0,8,colsN,0,0,8,colsN); + var imgDataCols=ctxCols.getImageData(0,0,8,colsN); + var dataCols=imgDataCols.data; + var cols=[]; + for (var i=0;i0) typeOr=1;//is skin + else if (indShadeOr==-1) + { + indShadeOr=colHair.indexOf(ro*1000000+go*1000+bo); + if (indShadeOr>0) typeOr=2;//is hair + } + + if (shade>0 && indShadeOr>0)//painting shadow on hair or skin + {//light blue: shade one stage; dark blue: shade 2 stages + var colOut=(typeOr==1?colSkinFull:typeOr==2?colHairFull:0)[Math.max(0,indShadeOr-shade)]; + data[off]=colOut[0];data[off+1]=colOut[1];data[off+2]=colOut[2];data[off+3]=a; + } + else if (shade==0) {data[off]=r;data[off+1]=g;data[off+2]=b;data[off+3]=a;} + } + x++; + if (x>=32) {x=0;y++;} + } + } + + //recolor hair and skin on final image + var skinCol=Game.YouCustomizer.getGeneValue('skinCol'); + var hairCol=Game.YouCustomizer.getGeneValue('hairCol'); + for (i=0;i0) + { + var col=cols[skinCol][indSkin-1]; + data[i]=col[0];data[i+1]=col[1];data[i+2]=col[2]; + } + else + { + var indHair=colHair.indexOf(r*1000000+g*1000+b); + if (indHair>0) + { + var col=cols[hairCol][indHair-1]; + data[i]=col[0];data[i+1]=col[1];data[i+2]=col[2]; + } + } + } + } + ctx.putImageData(imgData,0,0); + } + }); + } + Game.YouCustomizer.genes=[ + {id:'hair',isList:true,def:0,choices:[ + [0,0],[1,0],[2,0],[3,0],[4,0],[2,1],[3,1],[4,1],[4,2],[5,3],[8,2],[7,1],[5,5],[4,5],[10,0],[9,1],[9,2], + ]}, + {id:'hairCol',isList:true,def:1,choices:[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]}, + {id:'skinCol',isList:true,def:0,choices:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}, + {id:'head',isList:true,def:0,choices:[ + [0,0],[1,1],[0,1],[4,3],[10,3], + ]}, + {id:'face',isList:true,def:0,choices:[ + [3,5],[0,0],[0,2],[1,2],[2,2],[3,2],[0,3],[1,3],[2,3],[3,3], + ]}, + {id:'acc1',isList:true,def:0,choices:[ + [0,0],[5,1],[5,0],[5,2],[0,4],[1,4],[2,4],[6,4],[8,5],[3,4],[7,5],[6,0],[6,1],[4,4],[5,4],[2,5],[7,4],[0,5],[1,5],[6,5],[6,2],[6,3],[7,0],[7,2],[7,3],[8,1],[8,3],[8,4],[9,3],[9,0],[10,1],[10,2],[9,4],[9,5],[10,4],[10,5], + ]}, + {id:'acc2',isList:true,def:0,choices:[ + [] + ]}, + ]; + Game.YouCustomizer.save=function() + { + return Game.YouCustomizer.currentGenes.join(','); + } + Game.YouCustomizer.load=function(genes,noReset) + { + if (!noReset) Game.YouCustomizer.resetGenes(); + if (genes) + { + genes=genes.split(','); + for (var i=0;i=gene.choices.length)) continue; + else if (!gene.isList && (valgene.choices[1])) continue; + else Game.YouCustomizer.currentGenes[i]=val; + } + } + return true; + } + else return false; + } + Game.YouCustomizer.genesById={};for (var i=0;i=gene.choices.length) Game.YouCustomizer.currentGenes[gene.n]=0; + else if (Game.YouCustomizer.currentGenes[gene.n]<0) Game.YouCustomizer.currentGenes[gene.n]=gene.choices.length-1; + if (l('customizerSelect-N-'+gene.id)) l('customizerSelect-N-'+gene.id).innerHTML=Game.YouCustomizer.currentGenes[gene.n]+1; + } + else + { + if (Game.YouCustomizer.currentGenes[gene.n]>gene.choices[1]) Game.YouCustomizer.currentGenes[gene.n]=gene.choices[0]; + else if (Game.YouCustomizer.currentGenes[gene.n]'+loc("Export")+'
',[[loc("Done"),'Game.YouCustomizer.prompt();']]); + l('textareaPrompt').focus();l('textareaPrompt').select(); + } + Game.YouCustomizer.import=function(def) + { + //1,14,6,0,6,29,30 + //2,13,1,0,6,10,9 + Game.Prompt('

'+loc("Import")+'

',[[loc("Load"),'if (l(\'textareaPrompt\').value.length==0){return false;}if (Game.YouCustomizer.load(l(\'textareaPrompt\').value,true)){Game.YouCustomizer.prompt();}else{l(\'importError\').innerHTML=\'(\'+loc("Error!")+\')\';}'],[loc("Nevermind"),'Game.YouCustomizer.prompt();']]); + l('textareaPrompt').focus(); + } + Game.YouCustomizer.prompt=function() + { + var makeCustomizerSelector=function(gene,text) + { + gene=Game.YouCustomizer.genesById[gene]; + return '
<'+text+'
'+(gene.isList?(Game.YouCustomizer.currentGenes[gene.n]+1):(Game.YouCustomizer.currentGenes[gene.n]+1-gene.choices[0]))+'
>
'; + } + Game.Prompt('

'+loc("Customize your clones")+'

'+loc("Sprung from your very DNA. Shape them in your image!")+'
'+ + ''+loc("Import")+''+ + ''+loc("Export")+''+ + '
'+ + '
'+ + ''+loc("Random")+'
'+ + makeCustomizerSelector('hair',loc("Hair"))+ + makeCustomizerSelector('hairCol',loc("Hair color"))+ + makeCustomizerSelector('skinCol',loc("Skin color"))+ + makeCustomizerSelector('head',loc("Head shape"))+ + makeCustomizerSelector('face',loc("Face"))+ + makeCustomizerSelector('acc1',loc("Extra")+'-A')+ + makeCustomizerSelector('acc2',loc("Extra")+'-B')+ + '
'+ + '',[loc("Done")]); + Game.YouCustomizer.render(); + Game.YouCustomizer.renderPortrait(); + } + + Game.foolObjects={ + 'Unknown':{name:'Investment',desc:'You\'re not sure what this does, you just know it means profit.',icon:0}, + 'Cursor':{name:'Rolling pin',desc:'Essential in flattening dough. The first step in cookie-making.',icon:0}, + 'Grandma':{name:'Oven',desc:'A crucial element of baking cookies.',icon:1}, + 'Farm':{name:'Kitchen',desc:'The more kitchens, the more cookies your employees can produce.',icon:2}, + 'Mine':{name:'Secret recipe',desc:'These give you the edge you need to outsell those pesky competitors.',icon:3}, + 'Factory':{name:'Factory',desc:'Mass production is the future of baking. Seize the day, and synergize!',icon:4}, + 'Bank':{name:'Investor',desc:'Business folks with a nose for profit, ready to finance your venture as long as there\'s money to be made.',icon:5}, + 'Temple':{name:'Like',desc:'Your social media page is going viral! Amassing likes is the key to a lasting online presence and juicy advertising deals.',icon:9}, + 'Wizard tower':{name:'Meme',desc:'Cookie memes are all the rage! With just the right amount of social media astroturfing, your brand image will be all over the cyberspace.',icon:6}, + 'Shipment':{name:'Supermarket',desc:'A gigantic cookie emporium - your very own retail chain.',icon:7}, + 'Alchemy lab':{name:'Stock share',desc:'You\'re officially on the stock market, and everyone wants a piece!',icon:8}, + 'Portal':{name:'TV show',desc:'Your cookies have their own sitcom! Hilarious baking hijinks set to the cheesiest laughtrack.',icon:10}, + 'Time machine':{name:'Theme park',desc:'Cookie theme parks, full of mascots and roller-coasters. Build one, build a hundred!',icon:11}, + 'Antimatter condenser':{name:'Cookiecoin',desc:'A virtual currency, already replacing regular money in some small countries.',icon:12}, + 'Prism':{name:'Corporate country',desc:'You\'ve made it to the top, and you can now buy entire nations to further your corporate greed. Godspeed.',icon:13}, + 'Chancemaker':{name:'Privatized planet',desc:'Actually, you know what\'s cool? A whole planet dedicated to producing, advertising, selling, and consuming your cookies.',icon:15}, + 'Fractal engine':{name:'Senate seat',desc:'Only through political dominion can you truly alter this world to create a brighter, more cookie-friendly future.',icon:16}, + 'Javascript console':{name:'Doctrine',desc:'Taking many forms -religion, culture, philosophy- a doctrine may, when handled properly, cause a lasting impact on civilizations, reshaping minds and people and ensuring all future generations share a singular goal - the production, and acquisition, of more cookies.',icon:17}, + 'Idleverse':{name:'Lateral expansions',desc:'Sometimes the best way to keep going up is sideways. Diversify your ventures through non-cookie investments.',icon:18}, + 'Cortex baker':{name:'Think tank',desc:'There\'s only so many ways you can bring in more profit. Or is there? Hire the most brilliant experts in the known universe and let them scrape their brains for you!',icon:19}, + 'You':{name:'You',desc:'Your business is as great as it\'s gonna get. The only real way to improve it anymore is to improve yourself - and become the best Chief Executive Officer this world has ever seen.',icon:20}, + }; + + if (true)//if (!EN) + { + Game.foolObjects['Unknown'].name=loc("Investment"); + Game.foolObjects['Unknown'].desc=loc("You're not sure what this does, you just know it means profit."); + for (var i in Game.Objects) + { + Game.foolObjects[i].name=loc(FindLocStringByPart(Game.Objects[i].name+' business name'))||Game.foolObjects[i].name; + Game.foolObjects[i].desc=loc(FindLocStringByPart(Game.Objects[i].name+' business quote'))||Game.foolObjects[i].desc; + } + } + + //build store + Game.BuildStore(); + + //build master bar + var str=''; + str+='
'; + str+='
'; + l('buildingsMaster').innerHTML=str; + + //build object displays + var muteStr='
'+loc("Muted:")+'
'; + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + + if (locStrings[me.name+' (short)']) me.displayName=loc(me.name+' (short)'); + + if (me.id>0) + { + me.canvas=l('rowCanvas'+me.id); + me.ctx=me.canvas.getContext('2d',{alpha:false}); + if (me.id==19) + { + me.canvasAdd=l('rowCanvasAdd'+me.id); + me.ctxAdd=me.canvasAdd.getContext('2d'); + Game.YouCustomizer.render(); + } + me.pics=[]; + var icon=[0*64,me.icon*64]; + muteStr+=''; + //muteStr+='')+'>
'; + + AddEvent(me.canvas,'mouseover',function(me){return function(){me.mouseOn=true;}}(me)); + AddEvent(me.canvas,'mouseout',function(me){return function(){me.mouseOn=false;}}(me)); + AddEvent(me.canvas,'mousemove',function(me){return function(e){var box=this.getBounds();me.mousePos[0]=e.pageX-box.left;me.mousePos[1]=e.pageY-box.top;}}(me)); + } + } + Game.mutedBuildingTooltip=function(id) + { + return function(){ + var me=Game.ObjectsById[id]; + return '
'+(EN?(''+cap(me.plural)+(me.level>0?' (lvl. '+me.level+')':'')+'
Click to unmute '+me.plural+'
(display this building)'):(''+loc("Level %1 %2",[Beautify(me.level),me.plural])+'
'+loc("Click to unmute")))+'
'; + } + } + l('buildingsMute').innerHTML=muteStr; + + /*===================================================================================== + UPGRADES + =======================================================================================*/ + Game.upgradesToRebuild=1; + Game.Upgrades={}; + Game.UpgradesById={}; + Game.UpgradesN=0; + Game.UpgradesInStore=[]; + Game.UpgradesOwned=0; + Game.Upgrade=function(name,desc,price,icon,buyFunction) + { + this.id=Game.UpgradesN; + this.name=name; + this.dname=this.name; + this.desc=desc; + this.baseDesc=this.desc; + this.basePrice=price; + this.priceLumps=0;//note : doesn't do much on its own, you still need to handle the buying yourself + this.icon=icon; + this.iconFunction=0; + this.buyFunction=buyFunction; + /*this.unlockFunction=unlockFunction; + this.unlocked=(this.unlockFunction?0:1);*/ + this.unlocked=0; + this.bought=0; + this.order=this.id; + if (order) this.order=order+this.id*0.001; + this.pool='';//can be '', cookie, toggle, debug, prestige, prestigeDecor, tech, or unused + if (pool) this.pool=pool; + this.power=0; + if (power) this.power=power; + this.vanilla=Game.vanilla; + this.unlockAt=0; + this.techUnlock=[]; + this.parents=[]; + this.type='upgrade'; + this.tier=0; + this.buildingTie=0;//of what building is this a tiered upgrade of ? + + Game.last=this; + Game.Upgrades[this.name]=this; + Game.UpgradesById[this.id]=this; + Game.UpgradesN++; + return this; + } + Game.Upgrade.prototype.getType=function(){return 'Upgrade';} + + Game.Upgrade.prototype.getPrice=function() + { + var price=this.basePrice; + if (this.priceFunc) price=this.priceFunc(this); + if (price==0) return 0; + if (this.pool!='prestige') + { + if (Game.Has('Toy workshop')) price*=0.95; + if (Game.Has('Five-finger discount')) price*=Math.pow(0.99,Game.Objects['Cursor'].amount/100); + if (Game.Has('Santa\'s dominion')) price*=0.98; + if (Game.Has('Faberge egg')) price*=0.99; + if (Game.Has('Divine sales')) price*=0.99; + if (Game.Has('Fortune #100')) price*=0.99; + if (this.kitten && Game.Has('Kitten wages')) price*=0.9; + if (Game.hasBuff('Haggler\'s luck')) price*=0.98; + if (Game.hasBuff('Haggler\'s misery')) price*=1.02; + //if (Game.hasAura('Master of the Armory')) price*=0.98; + price*=1-Game.auraMult('Master of the Armory')*0.02; + price*=Game.eff('upgradeCost'); + if (this.pool=='cookie' && Game.Has('Divine bakeries')) price/=5; + } + return Math.ceil(price); + } + + Game.Upgrade.prototype.canBuy=function() + { + if (this.canBuyFunc) return this.canBuyFunc(); + if (Game.cookies>=this.getPrice()) return true; else return false; + } + + Game.storeBuyAll=function() + { + if (!Game.Has('Inspired checklist')) return false; + for (var i in Game.UpgradesInStore) + { + var me=Game.UpgradesInStore[i]; + if (!me.isVaulted() && me.pool!='toggle' && me.pool!='tech') me.buy(1); + } + } + + Game.vault=[]; + Game.Upgrade.prototype.isVaulted=function() + { + if (Game.vault.indexOf(this.id)!=-1) return true; else return false; + } + Game.Upgrade.prototype.vault=function() + { + if (!this.isVaulted()) Game.vault.push(this.id); + } + Game.Upgrade.prototype.unvault=function() + { + if (this.isVaulted()) Game.vault.splice(Game.vault.indexOf(this.id),1); + } + + Game.Upgrade.prototype.click=function(e) + { + if ((e && e.shiftKey) || Game.keys[16]) + { + if (this.pool=='toggle' || this.pool=='tech') {} + else if (Game.Has('Inspired checklist')) + { + if (this.isVaulted()) this.unvault(); + else this.vault(); + Game.upgradesToRebuild=1; + PlaySound('snd/tick.mp3'); + } + } + else this.buy(); + } + + + Game.Upgrade.prototype.buy=function(bypass) + { + var success=0; + var cancelPurchase=0; + if (this.clickFunction && !bypass) cancelPurchase=!this.clickFunction(); + if (!cancelPurchase) + { + if (this.choicesFunction) + { + if (Game.choiceSelectorOn==this.id) + { + l('toggleBox').style.display='none'; + l('toggleBox').innerHTML=''; + Game.choiceSelectorOn=-1; + PlaySound('snd/tickOff.mp3'); + } + else + { + Game.choiceSelectorOn=this.id; + var choices=this.choicesFunction(); + var str=''; + str+='
x
'; + str+='

'+this.dname+'

'+ + '
'; + if (typeof choices==='string') + { + str+=choices; + } + else if (choices.length>0) + { + var selected=0; + for (var i in choices) {if (choices[i].selected) selected=i;} + Game.choiceSelectorChoices=choices;//this is a really dumb way of doing this i am so sorry + Game.choiceSelectorSelected=selected; + str+='

'+choices[selected].name+'

'+ + '
'; + + for (var i in choices) + { + choices[i].id=i; + choices[i].order=choices[i].order||0; + } + + var sortMap=function(a,b) + { + if (a.order>b.order) return 1; + else if (a.order'; + } + } + l('toggleBox').innerHTML=str; + l('toggleBox').style.display='block'; + l('toggleBox').focus(); + Game.tooltip.hide(); + PlaySound('snd/tick.mp3'); + success=1; + } + } + else if (this.pool!='prestige') + { + var price=this.getPrice(); + if (this.canBuy() && !this.bought) + { + Game.Spend(price); + this.bought=1; + if (this.buyFunction) this.buyFunction(); + if (this.toggleInto) + { + Game.Lock(this.toggleInto); + Game.Unlock(this.toggleInto); + } + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned++; + Game.setOnCrate(0); + Game.tooltip.hide(); + PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75); + success=1; + } + } + else + { + var price=this.getPrice(); + if (Game.heavenlyChips>=price && !this.bought) + { + Game.heavenlyChips-=price; + Game.heavenlyChipsSpent+=price; + this.unlocked=1; + this.bought=1; + if (this.buyFunction) this.buyFunction(); + Game.BuildAscendTree(this); + PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75); + PlaySound('snd/shimmerClick.mp3'); + //PlaySound('snd/buyHeavenly.mp3'); + success=1; + } + } + } + if (this.bought && this.activateFunction) this.activateFunction(); + return success; + } + Game.Upgrade.prototype.earn=function()//just win the upgrades without spending anything + { + this.unlocked=1; + this.bought=1; + if (this.buyFunction) this.buyFunction(); + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned++; + } + Game.Upgrade.prototype.unearn=function()//remove the upgrade, but keep it unlocked + { + this.bought=0; + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned--; + } + Game.Upgrade.prototype.unlock=function() + { + this.unlocked=1; + Game.upgradesToRebuild=1; + } + Game.Upgrade.prototype.lose=function() + { + this.unlocked=0; + this.bought=0; + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned--; + } + Game.Upgrade.prototype.toggle=function()//cheating only + { + if (!this.bought) + { + this.bought=1; + if (this.buyFunction) this.buyFunction(); + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned++; + PlaySound('snd/buy'+choose([1,2,3,4])+'.mp3',0.75); + if (this.pool=='prestige' || this.pool=='debug') PlaySound('snd/shimmerClick.mp3'); + } + else + { + this.bought=0; + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + if (Game.CountsAsUpgradeOwned(this.pool)) Game.UpgradesOwned--; + PlaySound('snd/sell'+choose([1,2,3,4])+'.mp3',0.75); + if (this.pool=='prestige' || this.pool=='debug') PlaySound('snd/shimmerClick.mp3'); + } + if (Game.onMenu=='stats') Game.UpdateMenu(); + } + + Game.CountsAsUpgradeOwned=function(pool) + { + if (pool=='' || pool=='cookie' || pool=='tech') return true; else return false; + } + + /*AddEvent(l('toggleBox'),'blur',function()//if we click outside of the selector, close it + { + //this has a couple problems, such as when clicking on the upgrade - this toggles it off and back on instantly + l('toggleBox').style.display='none'; + l('toggleBox').innerHTML=''; + Game.choiceSelectorOn=-1; + } + );*/ + + Game.RequiresConfirmation=function(upgrade,prompt) + { + upgrade.clickFunction=function(){Game.Prompt(''+prompt,[[loc("Yes"),'Game.UpgradesById['+upgrade.id+'].buy(1);Game.ClosePrompt();'],loc("No")]);return false;}; + } + + Game.Unlock=function(what) + { + if (typeof what==='string') + { + if (Game.Upgrades[what]) + { + if (Game.Upgrades[what].unlocked==0) + { + Game.Upgrades[what].unlocked=1; + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + /*Game.Notify('Upgrade unlocked','
'+Game.Upgrades[what].dname+'
',Game.Upgrades[what].icon,6);*/ + } + } + } + else {for (var i in what) {Game.Unlock(what[i]);}} + } + Game.Lock=function(what) + { + if (typeof what==='string') + { + if (Game.Upgrades[what]) + { + Game.Upgrades[what].unlocked=0; + Game.upgradesToRebuild=1; + if (Game.Upgrades[what].bought==1 && Game.CountsAsUpgradeOwned(Game.Upgrades[what].pool)) Game.UpgradesOwned--; + Game.Upgrades[what].bought=0; + Game.recalculateGains=1; + } + } + else {for (var i in what) {Game.Lock(what[i]);}} + } + + Game.Has=function(what) + { + var it=Game.Upgrades[what]; + if (it && Game.ascensionMode==1 && (it.pool=='prestige' || it.tier=='fortune')) return 0; + return (it?it.bought:0); + } + Game.HasUnlocked=function(what) + { + return (Game.Upgrades[what]?Game.Upgrades[what].unlocked:0); + } + + + Game.RebuildUpgrades=function()//recalculate the upgrades you can buy + { + Game.upgradesToRebuild=0; + var list=[]; + for (var i in Game.Upgrades) + { + var me=Game.Upgrades[i]; + if (!me.bought && me.pool!='debug' && me.pool!='prestige' && me.pool!='prestigeDecor' && (Game.ascensionMode!=1 || (!me.lasting && me.tier!='fortune'))) + { + if (me.unlocked) list.push(me); + } + else if (me.displayFuncWhenOwned && me.bought) list.push(me); + } + var sortMap=function(a,b) + { + var ap=a.pool=='toggle'?a.order:a.getPrice(); + var bp=b.pool=='toggle'?b.order:b.getPrice(); + if (ap>bp) return 1; + else if (ap'+loc("Will instantly purchase every upgrade you can afford, starting from the cheapest one.
Upgrades in the vault will not be auto-purchased.
You may place an upgrade into the vault by Shift-clicking on it.")+'' + ,'store')+ + '>'+ + '
'+loc("Buy all upgrades")+'
'+ + ''; + l('upgrades').classList.add('hasMenu'); + } + else l('upgrades').classList.remove('hasMenu'); + + for (var i in Game.UpgradesInStore) + { + //if (!Game.UpgradesInStore[i]) break; + var me=Game.UpgradesInStore[i]; + var str=Game.crate(me,'store','Game.UpgradesById['+me.id+'].click(event);','upgrade'+i); + + /*var str='
'+Beautify(Math.round(me.getPrice()))+'
'+(me.pool=='toggle'?'[Togglable]':'[Upgrade]')+'
'+me.dname+'
'+me.desc+'
' + ,'store')+' '+Game.clickStr+'="Game.UpgradesById['+me.id+'].buy();" id="upgrade'+i+'" style="'+writeIcon(me.icon)+'">';*/ + if (me.pool=='toggle') toggleStr+=str; else if (me.pool=='tech') techStr+=str; else + { + if (me.isVaulted() && Game.Has('Inspired checklist')) vaultStr+=str; else storeStr+=str; + } + } + + l('upgrades').innerHTML=storeStr; + l('toggleUpgrades').innerHTML=toggleStr; + if (toggleStr=='') l('toggleUpgrades').style.display='none'; else l('toggleUpgrades').style.display='block'; + l('techUpgrades').innerHTML=techStr; + if (techStr=='') l('techUpgrades').style.display='none'; else l('techUpgrades').style.display='block'; + l('vaultUpgrades').innerHTML=vaultStr; + if (vaultStr=='') l('vaultUpgrades').style.display='none'; else l('vaultUpgrades').style.display='block'; + } + + Game.UnlockAt=[];//this contains an array of every upgrade with a cookie requirement in the form of {cookies:(amount of cookies earned required),name:(name of upgrade or achievement to unlock)} (and possibly require:(name of upgrade of achievement to own)) + //note : the cookie will not be added to the list if it contains locked:1 (use for seasonal cookies and such) + + var strCookieProductionMultiplierPlus=loc("Cookie production multiplier +%1%.",'[x]'); + var getStrCookieProductionMultiplierPlus=function(x) + {return strCookieProductionMultiplierPlus.replace('[x]',x);} + var getStrThousandFingersGain=function(x) + {return loc("Multiplies the gain from %1 by %2.",[getUpgradeName("Thousand fingers"),x]);} + var strKittenDesc=loc("You gain more CpS the more milk you have."); + var getStrClickingGains=function(x) + {return loc("Clicking gains +%1% of your CpS.",x);} + + Game.NewUpgradeCookie=function(obj) + { + var upgrade=new Game.Upgrade(obj.name,getStrCookieProductionMultiplierPlus(Beautify((typeof(obj.power)==='function'?obj.power(obj):obj.power),1))+(EN?''+obj.desc+'':''),obj.price,obj.icon); + upgrade.power=obj.power; + upgrade.pool='cookie'; + var toPush={cookies:obj.price/20,name:obj.name}; + if (obj.require) toPush.require=obj.require; + if (obj.season) toPush.season=obj.season; + if (!obj.locked) Game.UnlockAt.push(toPush); + return upgrade; + } + + //tiered upgrades system + //each building has several upgrade tiers + //all upgrades in the same tier have the same color, unlock threshold and price multiplier + Game.Tiers={ + 1:{name:'Plain',unlock:1,achievUnlock:1,iconRow:0,color:'#ccb3ac',price: 10}, + 2:{name:'Berrylium',unlock:5,achievUnlock:50,iconRow:1,color:'#ff89e7',price: 50}, + 3:{name:'Blueberrylium',unlock:25,achievUnlock:100,iconRow:2,color:'#00deff',price: 500}, + 4:{name:'Chalcedhoney',unlock:50,achievUnlock:150,iconRow:13,color:'#ffcc2f',price: 50000}, + 5:{name:'Buttergold',unlock:100,achievUnlock:200,iconRow:14,color:'#e9d673',price: 5000000}, + 6:{name:'Sugarmuck',unlock:150,achievUnlock:250,iconRow:15,color:'#a8bf91',price: 500000000}, + 7:{name:'Jetmint',unlock:200,achievUnlock:300,iconRow:16,color:'#60ff50',price: 500000000000}, + 8:{name:'Cherrysilver',unlock:250,achievUnlock:350,iconRow:17,color:'#f01700',price: 500000000000000}, + 9:{name:'Hazelrald',unlock:300,achievUnlock:400,iconRow:18,color:'#9ab834',price: 500000000000000000}, + 10:{name:'Mooncandy',unlock:350,achievUnlock:450,iconRow:19,color:'#7e7ab9',price: 500000000000000000000}, + 11:{name:'Astrofudge',unlock:400,achievUnlock:500,iconRow:28,color:'#9a3316',price: 5000000000000000000000000}, + 12:{name:'Alabascream',unlock:450,achievUnlock:550,iconRow:30,color:'#c1a88c',price: 50000000000000000000000000000}, + 13:{name:'Iridyum',unlock:500,achievUnlock:600,iconRow:31,color:'#adb1b3',price: 500000000000000000000000000000000}, + 14:{name:'Glucosmium',unlock:550,achievUnlock:650,iconRow:34,color:'#ff89e7',price: 5000000000000000000000000000000000000}, + 15:{name:'Glimmeringue',unlock:600,achievUnlock:700,iconRow:36,color:'#fffaa8',price: 50000000000000000000000000000000000000000}, + 'synergy1':{name:'Synergy I',unlock:15,iconRow:20,color:'#008595',special:1,req:'Synergies Vol. I',price: 200000}, + 'synergy2':{name:'Synergy II',unlock:75,iconRow:29,color:'#008595',special:1,req:'Synergies Vol. II',price: 200000000000}, + 'fortune':{name:'Fortune',unlock:-1,iconRow:32,color:'#9ab834',special:1,price: 77777777777777777777777777777}, + }; + for (var i in Game.Tiers){Game.Tiers[i].upgrades=[];} + Game.GetIcon=function(type,tier) + { + var col=0; + if (type=='Kitten') col=18; else col=Game.Objects[type].iconColumn; + return [col,Game.Tiers[tier].iconRow]; + } + Game.SetTier=function(building,tier) + { + if (!Game.Objects[building]) console.log('Warning: No building named',building); + Game.last.tier=tier; + Game.last.buildingTie=Game.Objects[building]; + if (Game.last.type=='achievement') Game.Objects[building].tieredAchievs[tier]=Game.last; + else Game.Objects[building].tieredUpgrades[tier]=Game.last; + } + Game.MakeTiered=function(upgrade,tier,col) + { + upgrade.tier=tier; + if (typeof col!=='undefined') upgrade.icon=[col,Game.Tiers[tier].iconRow]; + } + Game.TieredUpgrade=function(name,desc,building,tier) + { + if (tier=='fortune' && building) desc=loc("%1 are %2% more efficient and %3% cheaper.",[cap(Game.Objects[building].plural),7,7])+desc; + else desc=loc("%1 are twice as efficient.",cap(Game.Objects[building].plural))+desc; + var upgrade=new Game.Upgrade(name,desc,Game.Objects[building].basePrice*Game.Tiers[tier].price,Game.GetIcon(building,tier)); + if (tier!='fortune') + { + upgrade.descFunc=function(){ + return ((Game.ascensionMode!=1 && Game.Has(this.buildingTie1.unshackleUpgrade) && Game.Has(Game.Tiers[this.tier].unshackleUpgrade))?('
'+loc("Unshackled! +%1% extra production.",Math.round((this.buildingTie.id==1?0.5:(20-this.buildingTie.id)*0.1)*100))+'
'):'')+this.ddesc; + }; + } + + Game.SetTier(building,tier); + if (!upgrade.buildingTie1 && building) upgrade.buildingTie1=Game.Objects[building]; + if (tier=='fortune' && building) Game.Objects[building].fortune=upgrade; + return upgrade; + } + Game.SynergyUpgrade=function(name,desc,building1,building2,tier) + { + /* + creates a new upgrade that : + -unlocks when you have tier.unlock of building1 and building2 + -is priced at (building1.price*10+building2.price*1)*tier.price (formerly : Math.sqrt(building1.price*building2.price)*tier.price) + -gives +(0.1*building1)% cps to building2 and +(5*building2)% cps to building1 + -if building2 is below building1 in worth, swap them + */ + //if (Game.Objects[building1].basePrice>Game.Objects[building2].basePrice) {var temp=building2;building2=building1;building1=temp;} + var b1=Game.Objects[building1]; + var b2=Game.Objects[building2]; + if (b1.basePrice>b2.basePrice) {b1=Game.Objects[building2];b2=Game.Objects[building1];}//swap + + desc= + loc("%1 gain +%2% CpS per %3.",[cap(b1.plural),5,b2.single])+'
'+ + loc("%1 gain +%2% CpS per %3.",[cap(b2.plural),0.1,b1.single])+ + (EN?desc:''); + var upgrade=new Game.Upgrade(name,desc,(b1.basePrice*10+b2.basePrice*1)*Game.Tiers[tier].price,Game.GetIcon(building1,tier));//Math.sqrt(b1.basePrice*b2.basePrice)*Game.Tiers[tier].price + upgrade.tier=tier; + upgrade.buildingTie1=b1; + upgrade.buildingTie2=b2; + upgrade.priceFunc=function(){return (this.buildingTie1.basePrice*10+this.buildingTie2.basePrice*1)*Game.Tiers[this.tier].price*(Game.Has('Chimera')?0.98:1);}; + Game.Objects[building1].synergies.push(upgrade); + Game.Objects[building2].synergies.push(upgrade); + //Game.SetTier(building1,tier); + return upgrade; + } + Game.GetTieredCpsMult=function(me) + { + var mult=1; + for (var i in me.tieredUpgrades) + { + if (!Game.Tiers[me.tieredUpgrades[i].tier].special && Game.Has(me.tieredUpgrades[i].name)) + { + var tierMult=2; + //unshackled + if (Game.ascensionMode!=1 && Game.Has(me.unshackleUpgrade) && Game.Has(Game.Tiers[me.tieredUpgrades[i].tier].unshackleUpgrade)) tierMult+=me.id==1?0.5:(20-me.id)*0.1; + mult*=tierMult; + } + } + for (var i in me.synergies) + { + var syn=me.synergies[i]; + if (Game.Has(syn.name)) + { + if (syn.buildingTie1.name==me.name) mult*=(1+0.05*syn.buildingTie2.amount); + else if (syn.buildingTie2.name==me.name) mult*=(1+0.001*syn.buildingTie1.amount); + } + } + if (me.fortune && Game.Has(me.fortune.name)) mult*=1.07; + if (me.grandma && Game.Has(me.grandma.name)) mult*=(1+Game.Objects['Grandma'].amount*0.01*(1/(me.id-1))); + return mult; + } + Game.UnlockTiered=function(me) + { + for (var i in me.tieredUpgrades) {if (Game.Tiers[me.tieredUpgrades[i].tier].unlock!=-1 && me.amount>=Game.Tiers[me.tieredUpgrades[i].tier].unlock) Game.Unlock(me.tieredUpgrades[i].name);} + for (var i in me.tieredAchievs) {if (me.amount>=Game.Tiers[me.tieredAchievs[i].tier].achievUnlock) Game.Win(me.tieredAchievs[i].name);} + for (var i in me.synergies) {var syn=me.synergies[i];if (Game.Has(Game.Tiers[syn.tier].req) && syn.buildingTie1.amount>=Game.Tiers[syn.tier].unlock && syn.buildingTie2.amount>=Game.Tiers[syn.tier].unlock) Game.Unlock(syn.name);} + } + + + + var pool=''; + var power=0; + + //define upgrades + //WARNING : do NOT add new upgrades in between, this breaks the saves. Add them at the end ! + var order=100;//this is used to set the order in which the items are listed + new Game.Upgrade('Reinforced index finger',loc("The mouse and cursors are twice as efficient.")+'prod prod',100,[0,0]);Game.MakeTiered(Game.last,1,0); + new Game.Upgrade('Carpal tunnel prevention cream',loc("The mouse and cursors are twice as efficient.")+'it... it hurts to click...',500,[0,1]);Game.MakeTiered(Game.last,2,0); + new Game.Upgrade('Ambidextrous',loc("The mouse and cursors are twice as efficient.")+'Look ma, both hands!',10000,[0,2]);Game.MakeTiered(Game.last,3,0); + new Game.Upgrade('Thousand fingers',loc("The mouse and cursors gain +%1 cookies for each non-cursor building owned.",0.1)+'clickity',100000,[0,13]);Game.MakeTiered(Game.last,4,0); + + new Game.Upgrade('Million fingers',getStrThousandFingersGain(5)+'clickityclickity',10000000,[0,14]);Game.MakeTiered(Game.last,5,0); + new Game.Upgrade('Billion fingers',getStrThousandFingersGain(10)+'clickityclickityclickity',100000000,[0,15]);Game.MakeTiered(Game.last,6,0); + new Game.Upgrade('Trillion fingers',getStrThousandFingersGain(20)+'clickityclickityclickityclickity',1000000000,[0,16]);Game.MakeTiered(Game.last,7,0); + + order=200; + Game.TieredUpgrade('Forwards from grandma','RE:RE:thought you\'d get a kick out of this ;))','Grandma',1); + Game.TieredUpgrade('Steel-plated rolling pins','Just what you kneaded.','Grandma',2); + Game.TieredUpgrade('Lubricated dentures','squish','Grandma',3); + + order=300; + Game.TieredUpgrade('Cheap hoes','Rake in the dough!','Farm',1); + Game.TieredUpgrade('Fertilizer','It\'s chocolate, I swear.','Farm',2); + Game.TieredUpgrade('Cookie trees','A relative of the breadfruit.','Farm',3); + + order=500; + Game.TieredUpgrade('Sturdier conveyor belts','You\'re going places.','Factory',1); + Game.TieredUpgrade('Child labor','Cheaper, healthier workforce.','Factory',2); + Game.TieredUpgrade('Sweatshop','Slackers will be terminated.','Factory',3); + + order=400; + Game.TieredUpgrade('Sugar gas','A pink, volatile gas, found in the depths of some chocolate caves.','Mine',1); + Game.TieredUpgrade('Megadrill','You\'re in deep.','Mine',2); + Game.TieredUpgrade('Ultradrill','Finally caved in?','Mine',3); + + order=600; + Game.TieredUpgrade('Vanilla nebulae','If you removed your space helmet, you could probably smell it!
(Note : don\'t do that.)
','Shipment',1); + Game.TieredUpgrade('Wormholes','By using these as shortcuts, your ships can travel much faster.','Shipment',2); + Game.TieredUpgrade('Frequent flyer','Come back soon!','Shipment',3); + + order=700; + Game.TieredUpgrade('Antimony','Actually worth a lot of mony.','Alchemy lab',1); + Game.TieredUpgrade('Essence of dough','Extracted through the 5 ancient steps of alchemical baking.','Alchemy lab',2); + Game.TieredUpgrade('True chocolate','The purest form of cacao.','Alchemy lab',3); + + order=800; + Game.TieredUpgrade('Ancient tablet','A strange slab of peanut brittle, holding an ancient cookie recipe. Neat!','Portal',1); + Game.TieredUpgrade('Insane oatling workers','ARISE, MY MINIONS!','Portal',2); + Game.TieredUpgrade('Soul bond','So I just sign up and get more cookies? Sure, whatever!','Portal',3); + + order=900; + Game.TieredUpgrade('Flux capacitors','Bake to the future.','Time machine',1); + Game.TieredUpgrade('Time paradox resolver','No more fooling around with your own grandmother!','Time machine',2); + Game.TieredUpgrade('Quantum conundrum','There is only one constant, and that is universal uncertainty.
Or is it?
','Time machine',3); + + order=20000; + new Game.Upgrade('Kitten helpers',strKittenDesc+'meow may I help you',9000000,Game.GetIcon('Kitten',1));Game.last.kitten=1;Game.MakeTiered(Game.last,1,18); + new Game.Upgrade('Kitten workers',strKittenDesc+'meow meow meow meow',9000000000,Game.GetIcon('Kitten',2));Game.last.kitten=1;Game.MakeTiered(Game.last,2,18); + + order=10000; + Game.NewUpgradeCookie({name:'Plain cookies',desc:'We all gotta start somewhere.',icon:[2,3],power: 1, price: 999999}); + Game.NewUpgradeCookie({name:'Sugar cookies',desc:'Tasty, if a little unimaginative.',icon:[7,3],power: 1, price: 999999*5}); + Game.NewUpgradeCookie({name:'Oatmeal raisin cookies',desc:'No raisin to hate these.',icon:[0,3],power: 1, price: 9999999}); + Game.NewUpgradeCookie({name:'Peanut butter cookies',desc:'Get yourself some jam cookies!',icon:[1,3],power: 2, price: 9999999*5}); + Game.NewUpgradeCookie({name:'Coconut cookies',desc:'Flaky, but not unreliable. Some people go crazy for these.',icon:[3,3],power: 2, price: 99999999}); + order=10001; + Game.NewUpgradeCookie({name:'White chocolate cookies',desc:'I know what you\'ll say. It\'s just cocoa butter! It\'s not real chocolate!
Oh please.',icon:[4,3],power:2, price: 99999999*5}); + order=10000; + Game.NewUpgradeCookie({name:'Macadamia nut cookies',desc:'They\'re macadamn delicious!',icon:[5,3],power: 2, price: 99999999}); + order=10002; + Game.NewUpgradeCookie({name:'Double-chip cookies',desc:'DOUBLE THE CHIPS
DOUBLE THE TASTY
(double the calories)',icon:[6,3],power:2, price: 999999999*5}); + Game.NewUpgradeCookie({name:'White chocolate macadamia nut cookies',desc:'Orteil\'s favorite.',icon:[8,3],power: 2, price: 9999999999}); + Game.NewUpgradeCookie({name:'All-chocolate cookies',desc:'CHOCOVERDOSE.',icon:[9,3],power: 2, price: 9999999999*5}); + + order=100; + new Game.Upgrade('Quadrillion fingers',getStrThousandFingersGain(20)+'clickityclickityclickityclickityclick',10000000000,[0,17]);Game.MakeTiered(Game.last,8,0); + + order=200;Game.TieredUpgrade('Prune juice','Gets me going.','Grandma',4); + order=300;Game.TieredUpgrade('Genetically-modified cookies','All-natural mutations.','Farm',4); + order=500;Game.TieredUpgrade('Radium reactors','Gives your cookies a healthy glow.','Factory',4); + order=400;Game.TieredUpgrade('Ultimadrill','Pierce the heavens, etc.','Mine',4); + order=600;Game.TieredUpgrade('Warp drive','To boldly bake.','Shipment',4); + order=700;Game.TieredUpgrade('Ambrosia','Adding this to the cookie mix is sure to make them even more addictive!
Perhaps dangerously so.
Let\'s hope you can keep selling these legally.
','Alchemy lab',4); + order=800;Game.TieredUpgrade('Sanity dance','We can change if we want to.
We can leave our brains behind.
','Portal',4); + order=900;Game.TieredUpgrade('Causality enforcer','What happened, happened.','Time machine',4); + + order=5000; + new Game.Upgrade('Lucky day',loc("Golden cookies appear twice as often and stay twice as long.")+'Oh hey, a four-leaf penny!',777777777,[27,6]); + new Game.Upgrade('Serendipity',loc("Golden cookies appear twice as often and stay twice as long.")+'What joy! Seven horseshoes!',77777777777,[27,6]); + + order=20000; + new Game.Upgrade('Kitten engineers',strKittenDesc+'meow meow meow meow, sir',90000000000000,Game.GetIcon('Kitten',3));Game.last.kitten=1;Game.MakeTiered(Game.last,3,18); + + order=10020; + Game.NewUpgradeCookie({name:'Dark chocolate-coated cookies',desc:'These absorb light so well you almost need to squint to see them.',icon:[10,3],power: 5, price: 99999999999}); + Game.NewUpgradeCookie({name:'White chocolate-coated cookies',desc:'These dazzling cookies absolutely glisten with flavor.',icon:[11,3],power: 5, price: 99999999999}); + + Game.GrandmaSynergies=[]; + Game.GrandmaSynergy=function(name,desc,building) + { + var building=Game.Objects[building]; + var grandmaNumber=loc("%1 grandma",LBeautify(building.id-1)); + desc=loc("%1 are twice as efficient.",cap(Game.Objects['Grandma'].plural))+' '+loc("%1 gain +%2% CpS per %3.",[cap(building.plural),1,grandmaNumber])+''+desc+''; + + var upgrade=new Game.Upgrade(name,desc,building.basePrice*Game.Tiers[2].price,[10,9],function(){Game.Objects['Grandma'].redraw();}); + building.grandma=upgrade; + upgrade.buildingTie=building; + Game.GrandmaSynergies.push(upgrade.name); + return upgrade; + } + + order=250; + Game.GrandmaSynergy('Farmer grandmas','A nice farmer to grow more cookies.','Farm'); + Game.GrandmaSynergy('Miner grandmas','A nice miner to dig more cookies.','Mine'); + Game.GrandmaSynergy('Worker grandmas','A nice worker to manufacture more cookies.','Factory'); + Game.GrandmaSynergy('Cosmic grandmas','A nice thing to... uh... cookies.','Shipment'); + Game.GrandmaSynergy('Transmuted grandmas','A nice golden grandma to convert into more cookies.','Alchemy lab'); + Game.GrandmaSynergy('Altered grandmas','a NiCe GrAnDmA tO bA##########','Portal'); + Game.GrandmaSynergy('Grandmas\' grandmas','A nice grandma\'s nice grandma to bake double the cookies.','Time machine'); + + order=14000; + Game.baseResearchTime=Game.fps*60*30; + Game.SetResearch=function(what,time) + { + if (Game.Upgrades[what] && !Game.Has(what)) + { + Game.researchT=Game.baseResearchTime; + if (Game.Has('Persistent memory')) Game.researchT=Math.ceil(Game.baseResearchTime/10); + if (Game.Has('Ultrascience')) Game.researchT=Game.fps*5; + Game.nextResearch=Game.Upgrades[what].id; + Game.Notify(loc("Research has begun"),loc("Your bingo center/research facility is conducting experiments."),[9,0]); + } + } + + new Game.Upgrade('Bingo center/Research facility',loc("Grandma-operated science lab and leisure club.
Grandmas are 4 times as efficient.
Regularly unlocks new upgrades.")+'What could possibly keep those grandmothers in check?...
Bingo.
',1000000000000000,[11,9],function(){Game.SetResearch('Specialized chocolate chips');});Game.last.noPerm=1; + + order=15000; + new Game.Upgrade('Specialized chocolate chips',getStrCookieProductionMultiplierPlus(1)+'Computer-designed chocolate chips. Computer chips, if you will.',1000000000000000,[0,9],function(){Game.SetResearch('Designer cocoa beans');});Game.last.pool='tech'; + new Game.Upgrade('Designer cocoa beans',getStrCookieProductionMultiplierPlus(2)+'Now more aerodynamic than ever!',2000000000000000,[1,9],function(){Game.SetResearch('Ritual rolling pins');});Game.last.pool='tech'; + new Game.Upgrade('Ritual rolling pins',loc("%1 are twice as efficient.",cap(Game.Objects['Grandma'].plural))+'The result of years of scientific research!',4000000000000000,[2,9],function(){Game.SetResearch('Underworld ovens');});Game.last.pool='tech'; + new Game.Upgrade('Underworld ovens',getStrCookieProductionMultiplierPlus(3)+'Powered by science, of course!',8000000000000000,[3,9],function(){Game.SetResearch('One mind');});Game.last.pool='tech'; + new Game.Upgrade('One mind',loc("Each %1 gains +%2 base CpS per %3.",[loc("grandma"),'0.02',loc("grandma")])+'
'+loc("Note: the grandmothers are growing restless. Do not encourage them.")+'
We are one. We are many.',16000000000000000,[4,9],function(){Game.elderWrath=1;Game.SetResearch('Exotic nuts');Game.storeToRefresh=1;});Game.last.pool='tech'; + //Game.last.clickFunction=function(){return confirm('Warning : purchasing this will have unexpected, and potentially undesirable results!\nIt\'s all downhill from here. You have been warned!\nPurchase anyway?');}; + Game.RequiresConfirmation(Game.last,'
'+loc("Warning: purchasing this will have unexpected, and potentially undesirable results!
It's all downhill from here. You have been warned!

Purchase anyway?")+'
'); + new Game.Upgrade('Exotic nuts',getStrCookieProductionMultiplierPlus(4)+'You\'ll go crazy over these!',32000000000000000,[5,9],function(){Game.SetResearch('Communal brainsweep');});Game.last.pool='tech'; + new Game.Upgrade('Communal brainsweep',(EN?'Each grandma gains another +0.02 base CpS per grandma.':loc("Each %1 gains +%2 base CpS per %3.",[loc("grandma"),'0.02',loc("grandma")]))+'
'+loc("Note: proceeding any further in scientific research may have unexpected results. You have been warned.")+'
We fuse. We merge. We grow.',64000000000000000,[6,9],function(){Game.elderWrath=2;Game.SetResearch('Arcane sugar');Game.storeToRefresh=1;});Game.last.pool='tech'; + new Game.Upgrade('Arcane sugar',getStrCookieProductionMultiplierPlus(5)+'Tastes like insects, ligaments, and molasses.',128000000000000000,[7,9],function(){Game.SetResearch('Elder Pact');});Game.last.pool='tech'; + new Game.Upgrade('Elder Pact',loc("Each %1 gains +%2 base CpS per %3.",[loc("grandma"),'0.05',loc("portal")])+'
'+loc("Note: this is a bad idea.")+'
squirm crawl slither writhe
today we rise
',256000000000000000,[8,9],function(){Game.elderWrath=3;Game.storeToRefresh=1;});Game.last.pool='tech'; + new Game.Upgrade('Elder Pledge',loc("Contains the wrath of the elders, at least for a while.")+'This is a simple ritual involving anti-aging cream, cookie batter mixed in the moonlight, and a live chicken.',1,[9,9],function() + { + Game.elderWrath=0; + Game.pledges++; + Game.pledgeT=Game.getPledgeDuration(); + Game.Unlock('Elder Covenant'); + Game.CollectWrinklers(); + Game.storeToRefresh=1; + }); + Game.getPledgeDuration=function(){return Game.fps*60*(Game.Has('Sacrificial rolling pins')?60:30);} + Game.last.pool='toggle'; + Game.last.displayFuncWhenOwned=function(){return '
'+loc("Time remaining until pledge runs out:")+'
'+Game.sayTime(Game.pledgeT,-1)+'
';} + Game.last.timerDisplay=function(){if (!Game.Upgrades['Elder Pledge'].bought) return -1; else return 1-Game.pledgeT/Game.getPledgeDuration();} + Game.last.priceFunc=function(){return Math.pow(8,Math.min(Game.pledges+2,14));} + + Game.last.descFunc=function(){ + return '
'+(Game.pledges==0?loc("You haven't pledged to the elders yet."):loc("You've pledged to the elders %1 times.",LBeautify(Game.pledges)))+'
'+this.ddesc; + }; + + + order=150; + new Game.Upgrade('Plastic mouse',getStrClickingGains(1)+'Slightly squeaky.',50000,[11,0]);Game.MakeTiered(Game.last,1,11); + new Game.Upgrade('Iron mouse',getStrClickingGains(1)+'Click like it\'s 1349!',5000000,[11,1]);Game.MakeTiered(Game.last,2,11); + new Game.Upgrade('Titanium mouse',getStrClickingGains(1)+'Heavy, but powerful.',500000000,[11,2]);Game.MakeTiered(Game.last,3,11); + new Game.Upgrade('Adamantium mouse',getStrClickingGains(1)+'You could cut diamond with these.',50000000000,[11,13]);Game.MakeTiered(Game.last,4,11); + + order=40000; + new Game.Upgrade('Ultrascience',loc("Research takes only 5 seconds.")+'YEAH, SCIENCE!',7,[9,2]);//debug purposes only + Game.last.pool='debug'; + + order=10020; + Game.NewUpgradeCookie({name:'Eclipse cookies',desc:'Look to the cookie.',icon:[0,4],power: 2, price: 99999999999*5}); + Game.NewUpgradeCookie({name:'Zebra cookies',desc:'...',icon:[1,4],power: 2, price: 999999999999}); + + order=100; + new Game.Upgrade('Quintillion fingers',getStrThousandFingersGain(20)+'man, just go click click click click click, it\'s real easy, man.',10000000000000,[0,18]);Game.MakeTiered(Game.last,9,0); + + order=40000; + new Game.Upgrade('Gold hoard',loc("Golden cookies appear really often.")+'That\'s entirely too many.',7,[10,14]);//debug purposes only + Game.last.pool='debug'; + + order=15000; + new Game.Upgrade('Elder Covenant',loc("Puts a permanent end to the elders' wrath, at the cost of %1% of your CpS.",5)+'This is a complicated ritual involving silly, inconsequential trivialities such as cursed laxatives, century-old cacao, and an infant.
Don\'t question it.
',66666666666666,[8,9],function() + { + Game.pledgeT=0; + Game.Lock('Revoke Elder Covenant'); + Game.Unlock('Revoke Elder Covenant'); + Game.Lock('Elder Pledge'); + Game.Win('Elder calm'); + Game.CollectWrinklers(); + Game.storeToRefresh=1; + }); + Game.last.pool='toggle'; + + new Game.Upgrade('Revoke Elder Covenant',loc("You will get %1% of your CpS back, but the grandmatriarchs will return.",5)+'we
rise
again
',6666666666,[8,9],function() + { + Game.Lock('Elder Covenant'); + Game.Unlock('Elder Covenant'); + }); + Game.last.pool='toggle'; + + order=5000; + new Game.Upgrade('Get lucky',loc("Golden cookie effects last twice as long.")+'You\'ve been up all night, haven\'t you?',77777777777777,[27,6]); + + order=15000; + new Game.Upgrade('Sacrificial rolling pins',loc("Elder pledges last twice as long.")+'These are mostly just for spreading the anti-aging cream.
(And accessorily, shortening the chicken\'s suffering.)
',2888888888888,[2,9]); + + order=10020; + Game.NewUpgradeCookie({name:'Snickerdoodles',desc:'True to their name.',icon:[2,4],power: 2, price: 999999999999*5}); + Game.NewUpgradeCookie({name:'Stroopwafels',desc:'If it ain\'t dutch, it ain\'t much.',icon:[3,4],power: 2, price: 9999999999999}); + Game.NewUpgradeCookie({name:'Macaroons',desc:'Not to be confused with macarons.
These have coconut, okay?',icon:[4,4],power: 2, price: 9999999999999*5}); + + order=40000; + new Game.Upgrade('Neuromancy',loc("Can toggle upgrades on and off at will in the stats menu.")+'Can also come in handy to unsee things that can\'t be unseen.',7,[4,9]);//debug purposes only + Game.last.pool='debug'; + + order=10020; + Game.NewUpgradeCookie({name:'Empire biscuits',desc:'For your growing cookie empire, of course!',icon:[5,4],power: 2, price: 99999999999999}); + order=10031; + Game.NewUpgradeCookie({name:'British tea biscuits',desc:'Quite.',icon:[6,4],require:'Tin of british tea biscuits',power: 2, price: 99999999999999}); + Game.NewUpgradeCookie({name:'Chocolate british tea biscuits',desc:'Yes, quite.',icon:[7,4],require:Game.last.name,power: 2, price: 99999999999999}); + Game.NewUpgradeCookie({name:'Round british tea biscuits',desc:'Yes, quite riveting.',icon:[8,4],require:Game.last.name,power: 2, price: 99999999999999}); + Game.NewUpgradeCookie({name:'Round chocolate british tea biscuits',desc:'Yes, quite riveting indeed.',icon:[9,4],require:Game.last.name,power: 2, price: 99999999999999}); + Game.NewUpgradeCookie({name:'Round british tea biscuits with heart motif',desc:'Yes, quite riveting indeed, old chap.',icon:[10,4],require:Game.last.name,power: 2, price: 99999999999999}); + Game.NewUpgradeCookie({name:'Round chocolate british tea biscuits with heart motif',desc:'I like cookies.',icon:[11,4],require:Game.last.name,power: 2, price: 99999999999999}); + + order=1000; + Game.TieredUpgrade('Sugar bosons','Sweet firm bosons.','Antimatter condenser',1); + Game.TieredUpgrade('String theory','Reveals new insight about the true meaning of baking cookies (and, as a bonus, the structure of the universe).','Antimatter condenser',2); + Game.TieredUpgrade('Large macaron collider','How singular!','Antimatter condenser',3); + Game.TieredUpgrade('Big bang bake','And that\'s how it all began.','Antimatter condenser',4); + + order=255; + Game.GrandmaSynergy('Antigrandmas','A mean antigrandma to vomit more cookies.','Antimatter condenser'); + + order=10020; + Game.NewUpgradeCookie({name:'Madeleines',desc:'Unforgettable!',icon:[12,3],power: 2, price: 99999999999999*5}); + Game.NewUpgradeCookie({name:'Palmiers',desc:'Palmier than you!',icon:[13,3],power: 2, price: 99999999999999*5}); + Game.NewUpgradeCookie({name:'Palets',desc:'You could probably play hockey with these.
I mean, you\'re welcome to try.',icon:[12,4],power: 2, price: 999999999999999}); + Game.NewUpgradeCookie({name:'Sablés',desc:'The name implies they\'re made of sand. But you know better, don\'t you?',icon:[13,4],power: 2, price: 999999999999999}); + + order=20000; + new Game.Upgrade('Kitten overseers',strKittenDesc+'my purrpose is to serve you, sir',90000000000000000,Game.GetIcon('Kitten',4));Game.last.kitten=1;Game.MakeTiered(Game.last,4,18); + + + order=100; + new Game.Upgrade('Sextillion fingers',getStrThousandFingersGain(20)+'sometimes
things just
click
',10000000000000000,[0,19]);Game.MakeTiered(Game.last,10,0); + + order=200;Game.TieredUpgrade('Double-thick glasses','Oh... so THAT\'s what I\'ve been baking.','Grandma',5); + order=300;Game.TieredUpgrade('Gingerbread scarecrows','Staring at your crops with mischievous glee.','Farm',5); + order=500;Game.TieredUpgrade('Recombobulators','A major part of cookie recombobulation.','Factory',5); + order=400;Game.TieredUpgrade('H-bomb mining','Questionable efficiency, but spectacular nonetheless.','Mine',5); + order=600;Game.TieredUpgrade('Chocolate monoliths','My god. It\'s full of chocolate bars.','Shipment',5); + order=700;Game.TieredUpgrade('Aqua crustulae','Careful with the dosing - one drop too much and you get muffins.
And nobody likes muffins.
','Alchemy lab',5); + order=800;Game.TieredUpgrade('Brane transplant','This refers to the practice of merging higher dimensional universes, or "branes", with our own, in order to facilitate transit (and harvesting of precious cookie dough).','Portal',5); + order=900;Game.TieredUpgrade('Yestermorrow comparators','Fortnights into millennia.','Time machine',5); + order=1000;Game.TieredUpgrade('Reverse cyclotrons','These can uncollision particles and unspin atoms. For... uh... better flavor, and stuff.','Antimatter condenser',5); + + order=150; + new Game.Upgrade('Unobtainium mouse',getStrClickingGains(1)+'These nice mice should suffice.',5000000000000,[11,14]);Game.MakeTiered(Game.last,5,11); + + order=10030; + Game.NewUpgradeCookie({name:'Caramoas',desc:'Yeah. That\'s got a nice ring to it.',icon:[14,4],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); + Game.NewUpgradeCookie({name:'Sagalongs',desc:'Grandma\'s favorite?',icon:[15,3],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); + Game.NewUpgradeCookie({name:'Shortfoils',desc:'Foiled again!',icon:[15,4],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); + Game.NewUpgradeCookie({name:'Win mints',desc:'They\'re the luckiest cookies you\'ve ever tasted!',icon:[14,3],require:'Box of brand biscuits',power: 3, price: 9999999999999999}); + + order=40000; + new Game.Upgrade('Perfect idling',loc("You keep producing cookies even while the game is closed.")+'It\'s the most beautiful thing I\'ve ever seen.',7,[10,0]);//debug purposes only + Game.last.pool='debug'; + + order=10030; + Game.NewUpgradeCookie({name:'Fig gluttons',desc:'Got it all figured out.',icon:[17,4],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); + Game.NewUpgradeCookie({name:'Loreols',desc:'Because, uh... they\'re worth it?',icon:[16,3],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); + Game.NewUpgradeCookie({name:'Jaffa cakes',desc:'If you want to bake a cookie from scratch, you must first build a factory.',icon:[17,3],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); + Game.NewUpgradeCookie({name:'Grease\'s cups',desc:'Extra-greasy peanut butter.',icon:[16,4],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); + + order=30000; + new Game.Upgrade('Heavenly chip secret',loc("Unlocks %1% of the potential of your prestige level.",5)+'Grants the knowledge of heavenly chips, and how to use them to make baking more efficient.
It\'s a secret to everyone.
',11,[19,7]);Game.last.noPerm=1; + new Game.Upgrade('Heavenly cookie stand',loc("Unlocks %1% of the potential of your prestige level.",25)+'Don\'t forget to visit the heavenly lemonade stand afterwards. When afterlife gives you lemons...',1111,[18,7]);Game.last.noPerm=1; + new Game.Upgrade('Heavenly bakery',loc("Unlocks %1% of the potential of your prestige level.",50)+'Also sells godly cakes and divine pastries. The pretzels aren\'t too bad either.',111111,[17,7]);Game.last.noPerm=1; + new Game.Upgrade('Heavenly confectionery',loc("Unlocks %1% of the potential of your prestige level.",75)+'They say angel bakers work there. They take angel lunch breaks and sometimes go on angel strikes.',11111111,[16,7]);Game.last.noPerm=1; + new Game.Upgrade('Heavenly key',loc("Unlocks %1% of the potential of your prestige level.",100)+'This is the key to the pearly (and tasty) gates of pastry heaven, granting you access to your entire stockpile of heavenly chips for baking purposes.
May you use them wisely.
',1111111111,[15,7]);Game.last.noPerm=1; + + order=10100; + Game.NewUpgradeCookie({name:'Skull cookies',desc:'Wanna know something spooky? You\'ve got one of these inside your head RIGHT NOW.',locked:1,icon:[12,8],power: 2, price: 444444444444}); + Game.NewUpgradeCookie({name:'Ghost cookies',desc:'They\'re something strange, but they look pretty good!',locked:1,icon:[13,8],power: 2, price: 444444444444}); + Game.NewUpgradeCookie({name:'Bat cookies',desc:'The cookies this town deserves.',locked:1,icon:[14,8],power: 2, price: 444444444444}); + Game.NewUpgradeCookie({name:'Slime cookies',desc:'The incredible melting cookies!',locked:1,icon:[15,8],power: 2, price: 444444444444}); + Game.NewUpgradeCookie({name:'Pumpkin cookies',desc:'Not even pumpkin-flavored. Tastes like glazing. Yeugh.',locked:1,icon:[16,8],power: 2, price: 444444444444}); + Game.NewUpgradeCookie({name:'Eyeball cookies',desc:'When you stare into the cookie, the cookie stares back at you.',locked:1,icon:[17,8],power: 2, price: 444444444444}); + Game.NewUpgradeCookie({name:'Spider cookies',desc:'You found the recipe on the web. They do whatever a cookie can.',locked:1,icon:[18,8],power: 2, price: 444444444444}); + + Game.halloweenDrops=['Skull cookies','Ghost cookies','Bat cookies','Slime cookies','Pumpkin cookies','Eyeball cookies','Spider cookies']; + + Game.GetHowManyHalloweenDrops=function() + { + var num=0; + for (var i in Game.halloweenDrops) {if (Game.Has(Game.halloweenDrops[i])) num++;} + return num; + } + /*for (var i in Game.halloweenDrops) + { + Game.Upgrades[Game.halloweenDrops[i]].descFunc=function(){return '
You currently own '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.
'+this.ddesc;}; + }*/ + + order=0; + new Game.Upgrade('Persistent memory',loc("Subsequent research will be %1 times as fast.",10)+'It\'s all making sense!
Again!
',500,[9,2]);Game.last.pool='prestige'; + + order=40000; + new Game.Upgrade('Wrinkler doormat',loc("Wrinklers spawn much more frequently.")+'You\'re such a pushover.',7,[19,8]);//debug purposes only + Game.last.pool='debug'; + + order=10200; + Game.NewUpgradeCookie({name:'Christmas tree biscuits',desc:'Whose pine is it anyway?',locked:1,icon:[12,10],power:2,price: 252525252525}); + Game.NewUpgradeCookie({name:'Snowflake biscuits',desc:'Mass-produced to be unique in every way.',locked:1,icon:[13,10],power:2,price: 252525252525}); + Game.NewUpgradeCookie({name:'Snowman biscuits',desc:'It\'s frosted. Doubly so.',locked:1,icon:[14,10],power:2,price: 252525252525}); + Game.NewUpgradeCookie({name:'Holly biscuits',desc:'You don\'t smooch under these ones. That would be the mistletoe (which, botanically, is a smellier variant of the mistlefinger).',locked:1,icon:[15,10],power:2,price: 252525252525}); + Game.NewUpgradeCookie({name:'Candy cane biscuits',desc:'It\'s two treats in one!
(Further inspection reveals the frosting does not actually taste like peppermint, but like mundane sugary frosting.)',locked:1,icon:[16,10],power:2,price: 252525252525}); + Game.NewUpgradeCookie({name:'Bell biscuits',desc:'What do these even have to do with christmas? Who cares, ring them in!',locked:1,icon:[17,10],power:2,price: 252525252525}); + Game.NewUpgradeCookie({name:'Present biscuits',desc:'The prequel to future biscuits. Watch out!',locked:1,icon:[18,10],power:2,price: 252525252525}); + + order=10020; + Game.NewUpgradeCookie({name:'Gingerbread men',desc:'You like to bite the legs off first, right? How about tearing off the arms? You sick monster.',icon:[18,4],power: 2,price: 9999999999999999}); + Game.NewUpgradeCookie({name:'Gingerbread trees',desc:'Evergreens in pastry form. Yule be surprised what you can come up with.',icon:[18,3],power: 2,price: 9999999999999999}); + + order=25000; + new Game.Upgrade('A festive hat',''+loc("Unlocks... something.")+'Not a creature was stirring, not even a mouse.',25,[19,9],function() + { + var drop=choose(Game.santaDrops); + Game.Unlock(drop); + Game.Notify(loc("In the festive hat, you find..."),loc("a festive test tube
and %1.",drop),Game.Upgrades[drop].icon); + }); + + new Game.Upgrade('Increased merriness',getStrCookieProductionMultiplierPlus(15)+'
'+loc("Cost scales with Santa level.")+'It turns out that the key to increased merriness, strangely enough, happens to be a good campfire and some s\'mores.
You know what they say, after all; the s\'more, the merrier.
',2525,[17,9]); + new Game.Upgrade('Improved jolliness',getStrCookieProductionMultiplierPlus(15)+'
'+loc("Cost scales with Santa level.")+'A nice wobbly belly goes a long way.
You jolly?
',2525,[17,9]); + new Game.Upgrade('A lump of coal',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with Santa level.")+'Some of the world\'s worst stocking stuffing.
I guess you could try starting your own little industrial revolution, or something?...
',2525,[13,9]); + new Game.Upgrade('An itchy sweater',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with Santa level.")+'You don\'t know what\'s worse : the embarrassingly quaint "elf on reindeer" motif, or the fact that wearing it makes you feel like you\'re wrapped in a dead sasquatch.',2525,[14,9]); + new Game.Upgrade('Reindeer baking grounds',loc("Reindeer appear twice as frequently.")+'
'+loc("Cost scales with Santa level.")+'Male reindeer are from Mars; female reindeer are from venison.',2525,[12,9]); + new Game.Upgrade('Weighted sleighs',loc("Reindeer are twice as slow.")+'
'+loc("Cost scales with Santa level.")+'Hope it was worth the weight.
(Something something forced into cervidude)
',2525,[12,9]); + new Game.Upgrade('Ho ho ho-flavored frosting',loc("Reindeer give twice as much.")+'
'+loc("Cost scales with Santa level.")+'It\'s time to up the antler.',2525,[12,9]); + new Game.Upgrade('Season savings',loc("All buildings are %1% cheaper.",1)+'
'+loc("Cost scales with Santa level.")+'By Santa\'s beard, what savings!
But who will save us?
',2525,[16,9],function(){Game.storeToRefresh=1;}); + new Game.Upgrade('Toy workshop',loc("All upgrades are %1% cheaper.",5)+'
'+loc("Cost scales with Santa level.")+'Watch yours-elf around elvesdroppers who might steal our production secrets.
Or elven worse!
',2525,[16,9],function(){Game.upgradesToRebuild=1;}); + new Game.Upgrade('Naughty list',loc("%1 are twice as efficient.",cap(loc("grandmas")))+'
'+loc("Cost scales with Santa level.")+'This list contains every unholy deed perpetuated by grandmakind.
He won\'t be checking this one twice.
Once. Once is enough.
',2525,[15,9]); + new Game.Upgrade('Santa\'s bottomless bag',loc("Random drops are %1% more common.",10)+'
'+loc("Cost scales with Santa level.")+'This is one bottom you can\'t check out.',2525,[19,9]); + new Game.Upgrade('Santa\'s helpers',loc("Clicking is %1% more powerful.",10)+'
'+loc("Cost scales with Santa level.")+'Some choose to help hamburger; some choose to help you.
To each their own, I guess.
',2525,[19,9]); + new Game.Upgrade('Santa\'s legacy',loc("Cookie production multiplier +%1% per Santa's levels.",3)+'
'+loc("Cost scales with Santa level.")+'In the north pole, you gotta get the elves first. Then when you get the elves, you start making the toys. Then when you get the toys... then you get the cookies.',2525,[19,9]); + new Game.Upgrade('Santa\'s milk and cookies',loc("Milk is %1% more powerful.",5)+'
'+loc("Cost scales with Santa level.")+'Part of Santa\'s dreadfully unbalanced diet.',2525,[19,9]); + + order=40000; + new Game.Upgrade('Reindeer season',loc("Reindeer spawn much more frequently.")+'Go, Cheater! Go, Hacker and Faker!',7,[12,9]);//debug purposes only + Game.last.pool='debug'; + + order=25000; + new Game.Upgrade('Santa\'s dominion',getStrCookieProductionMultiplierPlus(20)+'
'+loc("All buildings are %1% cheaper.",1)+'
'+loc("All upgrades are %1% cheaper.",2)+'My name is Claus, king of kings;
Look on my toys, ye Mighty, and despair!
',2525252525252525,[19,10],function(){Game.storeToRefresh=1;}); + + order=10300; + var heartPower=function(){ + var pow=2; + if (Game.Has('Starlove')) pow=3; + if (Game.hasGod) + { + var godLvl=Game.hasGod('seasons'); + if (godLvl==1) pow*=1.3; + else if (godLvl==2) pow*=1.2; + else if (godLvl==3) pow*=1.1; + } + return pow; + }; + Game.NewUpgradeCookie({name:'Pure heart biscuits',desc:'Melty white chocolate
that says "I *like* like you".',season:'valentines',icon:[19,3], power:heartPower,price: 1000000}); + Game.NewUpgradeCookie({name:'Ardent heart biscuits',desc:'A red hot cherry biscuit that will nudge the target of your affection in interesting directions.',require:Game.last.name,season:'valentines',icon:[20,3], power:heartPower,price: 1000000000}); + Game.NewUpgradeCookie({name:'Sour heart biscuits',desc:'A bitter lime biscuit for the lonely and the heart-broken.',require:Game.last.name,season:'valentines',icon:[20,4], power:heartPower,price: 1000000000000}); + Game.NewUpgradeCookie({name:'Weeping heart biscuits',desc:'An ice-cold blueberry biscuit, symbol of a mending heart.',require:Game.last.name,season:'valentines',icon:[21,3], power:heartPower,price: 1000000000000000}); + Game.NewUpgradeCookie({name:'Golden heart biscuits',desc:'A beautiful biscuit to symbolize kindness, true love, and sincerity.',require:Game.last.name,season:'valentines',icon:[21,4], power:heartPower,price: 1000000000000000000}); + Game.NewUpgradeCookie({name:'Eternal heart biscuits',desc:'Silver icing for a very special someone you\'ve liked for a long, long time.',require:Game.last.name,season:'valentines',icon:[19,4], power:heartPower,price: 1000000000000000000000}); + + Game.heartDrops=['Pure heart biscuits','Ardent heart biscuits','Sour heart biscuits','Weeping heart biscuits','Golden heart biscuits','Eternal heart biscuits','Prism heart biscuits']; + + Game.GetHowManyHeartDrops=function() + { + var num=0; + for (var i in Game.heartDrops) {if (Game.Has(Game.heartDrops[i])) num++;} + return num; + } + + order=1100; + Game.TieredUpgrade('Gem polish','Get rid of the grime and let more light in.
Truly, truly outrageous.
','Prism',1); + Game.TieredUpgrade('9th color','Delve into untouched optical depths where even the mantis shrimp hasn\'t set an eye!','Prism',2); + Game.TieredUpgrade('Chocolate light','Bask into its cocoalescence.
(Warning : may cause various interesting albeit deadly skin conditions.)
','Prism',3); + Game.TieredUpgrade('Grainbow','Remember the different grains using the handy Roy G. Biv mnemonic : R is for rice, O is for oats... uh, B for barley?...','Prism',4); + Game.TieredUpgrade('Pure cosmic light','Your prisms now receive pristine, unadulterated photons from the other end of the universe.','Prism',5); + + order=255; + Game.GrandmaSynergy('Rainbow grandmas','A luminous grandma to sparkle into cookies.','Prism'); + + order=24000; + Game.seasonTriggerBasePrice=1000000000;//1111111111; + new Game.Upgrade('Season switcher',loc("Allows you to trigger seasonal events at will, for a price.")+'There will always be time.',1111,[16,6],function(){for (var i in Game.seasons){Game.Unlock(Game.seasons[i].trigger);}});Game.last.pool='prestige';Game.last.parents=['Heralds']; + new Game.Upgrade('Festive biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Christmas"))+'\'Twas the night before Christmas- or was it?',Game.seasonTriggerBasePrice,[12,10]);Game.last.season='christmas';Game.last.pool='toggle'; + new Game.Upgrade('Ghostly biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Halloween"))+'spooky scary skeletons
will wake you with a boo
',Game.seasonTriggerBasePrice,[13,8]);Game.last.season='halloween';Game.last.pool='toggle'; + new Game.Upgrade('Lovesick biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Valentine's day"))+'Romance never goes out of fashion.',Game.seasonTriggerBasePrice,[20,3]);Game.last.season='valentines';Game.last.pool='toggle'; + new Game.Upgrade('Fool\'s biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Business day"))+'Business. Serious business. This is absolutely all of your business.',Game.seasonTriggerBasePrice,[17,6]);Game.last.season='fools';Game.last.pool='toggle'; + + + order=40000; + new Game.Upgrade('Eternal seasons',loc("Seasons now last forever.")+'Season to taste.',7,[16,6],function(){for (var i in Game.seasons){Game.Unlock(Game.seasons[i].trigger);}});//debug purposes only + Game.last.pool='debug'; + + + order=20000; + new Game.Upgrade('Kitten managers',strKittenDesc+'that\'s not gonna paws any problem, sir',900000000000000000000,Game.GetIcon('Kitten',5));Game.last.kitten=1;Game.MakeTiered(Game.last,5,18); + + order=100; + new Game.Upgrade('Septillion fingers',getStrThousandFingersGain(20)+'[cursory flavor text]',10000000000000000000,[12,20]);Game.MakeTiered(Game.last,11,0); + new Game.Upgrade('Octillion fingers',getStrThousandFingersGain(20)+'Turns out you can quite put your finger on it.',10000000000000000000000,[12,19]);Game.MakeTiered(Game.last,12,0); + + order=150;new Game.Upgrade('Eludium mouse',getStrClickingGains(1)+'I rodent do that if I were you.',500000000000000,[11,15]);Game.MakeTiered(Game.last,6,11); + new Game.Upgrade('Wishalloy mouse',getStrClickingGains(1)+'Clicking is fine and dandy, but don\'t smash your mouse over it. Get your game on. Go play.',50000000000000000,[11,16]);Game.MakeTiered(Game.last,7,11); + order=200;Game.TieredUpgrade('Aging agents','Counter-intuitively, grandmas have the uncanny ability to become more powerful the older they get.','Grandma',6); + order=300;Game.TieredUpgrade('Pulsar sprinklers','There\'s no such thing as over-watering. The moistest is the bestest.','Farm',6); + order=500;Game.TieredUpgrade('Deep-bake process','A patented process increasing cookie yield two-fold for the same amount of ingredients. Don\'t ask how, don\'t take pictures, and be sure to wear your protective suit.','Factory',6); + order=400;Game.TieredUpgrade('Coreforge','You\'ve finally dug a tunnel down to the Earth\'s core. It\'s pretty warm down here.','Mine',6); + order=600;Game.TieredUpgrade('Generation ship','Built to last, this humongous spacecraft will surely deliver your cookies to the deep ends of space, one day.','Shipment',6); + order=700;Game.TieredUpgrade('Origin crucible','Built from the rarest of earths and located at the very deepest of the largest mountain, this legendary crucible is said to retain properties from the big-bang itself.','Alchemy lab',6); + order=800;Game.TieredUpgrade('Deity-sized portals','It\'s almost like, say, an elder god could fit through this thing now. Hypothetically.','Portal',6); + order=900;Game.TieredUpgrade('Far future enactment','The far future enactment authorizes you to delve deep into the future - where civilization has fallen and risen again, and cookies are plentiful.','Time machine',6); + order=1000;Game.TieredUpgrade('Nanocosmics','The theory of nanocosmics posits that each subatomic particle is in fact its own self-contained universe, holding unfathomable amounts of energy.
This somehow stacks with the nested universe theory, because physics.
','Antimatter condenser',6); + order=1100; + Game.TieredUpgrade('Glow-in-the-dark','Your prisms now glow in the dark, effectively doubling their output!','Prism',6); + + order=10032; + Game.NewUpgradeCookie({name:'Rose macarons',desc:'Although an odd flavor, these pastries recently rose in popularity.',icon:[22,3],require:'Box of macarons', power:3,price: 9999}); + Game.NewUpgradeCookie({name:'Lemon macarons',desc:'Tastefully sour, delightful treats.',icon:[23,3],require:'Box of macarons', power:3,price: 9999999}); + Game.NewUpgradeCookie({name:'Chocolate macarons',desc:'They\'re like tiny sugary burgers!',icon:[24,3],require:'Box of macarons', power:3,price: 9999999999}); + Game.NewUpgradeCookie({name:'Pistachio macarons',desc:'Pistachio shells now removed after multiple complaints.',icon:[22,4],require:'Box of macarons', power:3,price: 9999999999999}); + Game.NewUpgradeCookie({name:'Hazelnut macarons',desc:'These go especially well with coffee.',icon:[23,4],require:'Box of macarons', power:3,price: 9999999999999999}); + Game.NewUpgradeCookie({name:'Violet macarons',desc:'It\'s like spraying perfume into your mouth!',icon:[24,4],require:'Box of macarons', power:3,price: 9999999999999999999}); + + order=40000; + new Game.Upgrade('Magic shenanigans',loc("Cookie production multiplied by 1,000.")+'It\'s magic. I ain\'t gotta explain sh
t.
',7,[17,5]);//debug purposes only + Game.last.pool='debug'; + + + order=24000; + new Game.Upgrade('Bunny biscuit',loc("Triggers %1 season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.",loc("Easter"))+'All the world will be your enemy
and when they catch you,
they will kill you...
but first they must catch you.
',Game.seasonTriggerBasePrice,[0,12]);Game.last.season='easter';Game.last.pool='toggle'; + + var eggPrice=999999999999; + var eggPrice2=99999999999999; + new Game.Upgrade('Chicken egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'The egg. The egg came first. Get over it.',eggPrice,[1,12]); + new Game.Upgrade('Duck egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Then he waddled away.',eggPrice,[2,12]); + new Game.Upgrade('Turkey egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'These hatch into strange, hand-shaped creatures.',eggPrice,[3,12]); + new Game.Upgrade('Quail egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'These eggs are positively tiny. I mean look at them. How does this happen? Whose idea was that?',eggPrice,[4,12]); + new Game.Upgrade('Robin egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Holy azure-hued shelled embryos!',eggPrice,[5,12]); + new Game.Upgrade('Ostrich egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'One of the largest eggs in the world. More like ostrouch, am I right?
Guys?
',eggPrice,[6,12]); + new Game.Upgrade('Cassowary egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'The cassowary is taller than you, possesses murderous claws and can easily outrun you.
You\'d do well to be casso-wary of them.
',eggPrice,[7,12]); + new Game.Upgrade('Salmon roe',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Do the impossible, see the invisible.
Roe roe, fight the power?
',eggPrice,[8,12]); + new Game.Upgrade('Frogspawn',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'I was going to make a pun about how these "toadally look like eyeballs", but froget it.',eggPrice,[9,12]); + new Game.Upgrade('Shark egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'HELLO IS THIS FOOD?
LET ME TELL YOU ABOUT FOOD.
WHY DO I KEEP EATING MY FRIENDS
',eggPrice,[10,12]); + new Game.Upgrade('Turtle egg',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'Turtles, right? Hatch from shells. Grow into shells. What\'s up with that?
Now for my skit about airplane food.
',eggPrice,[11,12]); + new Game.Upgrade('Ant larva',getStrCookieProductionMultiplierPlus(1)+'
'+loc("Cost scales with how many eggs you own.")+'These are a delicacy in some countries, I swear. You will let these invade your digestive tract, and you will derive great pleasure from it.
And all will be well.
',eggPrice,[12,12]); + new Game.Upgrade('Golden goose egg',loc("Golden cookies appear %1% more often.",5)+'
'+loc("Cost scales with how many eggs you own.")+'The sole vestige of a tragic tale involving misguided investments.',eggPrice2,[13,12]); + new Game.Upgrade('Faberge egg',loc("All buildings and upgrades are %1% cheaper.",1)+'
'+loc("Cost scales with how many eggs you own.")+'This outrageous egg is definitely fab.',eggPrice2,[14,12],function(){Game.storeToRefresh=1;}); + new Game.Upgrade('Wrinklerspawn',loc("Wrinklers explode into %1% more cookies.",5)+'
'+loc("Cost scales with how many eggs you own.")+'Look at this little guy! It\'s gonna be a big boy someday! Yes it is!',eggPrice2,[15,12]); + new Game.Upgrade('Cookie egg',loc("Clicking is %1% more powerful.",10)+'
'+loc("Cost scales with how many eggs you own.")+'The shell appears to be chipped.
I wonder what\'s inside this one!
',eggPrice2,[16,12]); + new Game.Upgrade('Omelette',loc("Other eggs appear %1% more frequently.",10)+'
'+loc("Cost scales with how many eggs you own.")+'Fromage not included.',eggPrice2,[17,12]); + new Game.Upgrade('Chocolate egg',loc("Contains a lot of cookies.")+'
'+loc("Cost scales with how many eggs you own.")+'Laid by the elusive cocoa bird. There\'s a surprise inside!',eggPrice2,[18,12],function() + { + var cookies=Game.cookies*0.05; + Game.Notify('Chocolate egg',loc("The egg bursts into %1 cookies!",Beautify(cookies)),Game.Upgrades['Chocolate egg'].icon); + Game.Earn(cookies); + }); + new Game.Upgrade('Century egg',loc("You continually gain more CpS the longer you've played in the current ascension.")+'
'+loc("Cost scales with how many eggs you own.")+'Actually not centuries-old. This one isn\'t a day over 86!',eggPrice2,[19,12]); + Game.last.descFunc=function(){ + var day=Math.floor((Date.now()-Game.startDate)/1000/10)*10/60/60/24; + day=Math.min(day,100); + var n=(1-Math.pow(1-day/100,3))*0.1; + return '
'+loc("Current boost:")+' +'+Beautify(n*100,1)+'%
'+this.ddesc; + }; + new Game.Upgrade('"egg"',''+loc("+%1 CpS",9)+'hey it\'s "egg"',eggPrice2,[20,12]); + + Game.easterEggs=['Chicken egg','Duck egg','Turkey egg','Quail egg','Robin egg','Ostrich egg','Cassowary egg','Salmon roe','Frogspawn','Shark egg','Turtle egg','Ant larva','Golden goose egg','Faberge egg','Wrinklerspawn','Cookie egg','Omelette','Chocolate egg','Century egg','"egg"']; + Game.eggDrops=['Chicken egg','Duck egg','Turkey egg','Quail egg','Robin egg','Ostrich egg','Cassowary egg','Salmon roe','Frogspawn','Shark egg','Turtle egg','Ant larva']; + Game.rareEggDrops=['Golden goose egg','Faberge egg','Wrinklerspawn','Cookie egg','Omelette','Chocolate egg','Century egg','"egg"']; + + Game.GetHowManyEggs=function() + { + var num=0; + for (var i in Game.easterEggs) {if (Game.Has(Game.easterEggs[i])) num++;} + return num; + } + for (var i in Game.eggDrops)//scale egg prices to how many eggs you have + {Game.Upgrades[Game.eggDrops[i]].priceFunc=function(){return Math.pow(2,Game.GetHowManyEggs())*999;}} + + for (var i in Game.rareEggDrops) + {Game.Upgrades[Game.rareEggDrops[i]].priceFunc=function(){return Math.pow(3,Game.GetHowManyEggs())*999;}} + + + Game.DropEgg=function(failRate) + { + failRate*=1/Game.dropRateMult(); + if (Game.season!='easter') return; + if (Game.HasAchiev('Hide & seek champion')) failRate*=0.7; + if (Game.Has('Omelette')) failRate*=0.9; + if (Game.Has('Starspawn')) failRate*=0.9; + if (Game.hasGod) + { + var godLvl=Game.hasGod('seasons'); + if (godLvl==1) failRate*=0.9; + else if (godLvl==2) failRate*=0.95; + else if (godLvl==3) failRate*=0.97; + } + if (Math.random()>=failRate) + { + var drop=''; + if (Math.random()<0.1) drop=choose(Game.rareEggDrops); + else drop=choose(Game.eggDrops); + if (Game.Has(drop) || Game.HasUnlocked(drop))//reroll if we have it + { + if (Math.random()<0.1) drop=choose(Game.rareEggDrops); + else drop=choose(Game.eggDrops); + } + if (Game.Has(drop) || Game.HasUnlocked(drop)) return; + Game.Unlock(drop); + Game.Notify(loc("You found an egg!"),''+drop+'',Game.Upgrades[drop].icon); + } + }; + + order=10032; + Game.NewUpgradeCookie({name:'Caramel macarons',desc:'The saltiest, chewiest of them all.',icon:[25,3],require:'Box of macarons', power:3,price: 9999999999999999999999}); + Game.NewUpgradeCookie({name:'Licorice macarons',desc:'Also known as "blackarons".',icon:[25,4],require:'Box of macarons', power:3,price: 9999999999999999999999999}); + + + order=525; + Game.TieredUpgrade('Taller tellers','Able to process a higher amount of transactions. Careful though, as taller tellers tell tall tales.','Bank',1); + Game.TieredUpgrade('Scissor-resistant credit cards','For those truly valued customers.','Bank',2); + Game.TieredUpgrade('Acid-proof vaults','You know what they say : better safe than sorry.','Bank',3); + Game.TieredUpgrade('Chocolate coins','This revolutionary currency is much easier to melt from and into ingots - and tastes much better, for a change.','Bank',4); + Game.TieredUpgrade('Exponential interest rates','Can\'t argue with mathematics! Now fork it over.','Bank',5); + Game.TieredUpgrade('Financial zen','The ultimate grail of economic thought; the feng shui of big money, the stock market yoga - the Heimlich maneuver of dimes and nickels.','Bank',6); + + order=550; + Game.TieredUpgrade('Golden idols','Lure even greedier adventurers to retrieve your cookies. Now that\'s a real idol game!','Temple',1); + Game.TieredUpgrade('Sacrifices','What\'s a life to a gigaton of cookies?','Temple',2); + Game.TieredUpgrade('Delicious blessing','And lo, the Baker\'s almighty spoon came down and distributed holy gifts unto the believers - shimmering sugar, and chocolate dark as night, and all manner of wheats. And boy let me tell you, that party was mighty gnarly.','Temple',3); + Game.TieredUpgrade('Sun festival','Free the primordial powers of your temples with these annual celebrations involving fire-breathers, traditional dancing, ritual beheadings and other merriments!','Temple',4); + Game.TieredUpgrade('Enlarged pantheon','Enough spiritual inadequacy! More divinities than you\'ll ever need, or your money back! 100% guaranteed!','Temple',5); + Game.TieredUpgrade('Great Baker in the sky','This is it. The ultimate deity has finally cast Their sublimely divine eye upon your operation; whether this is a good thing or possibly the end of days is something you should find out very soon.','Temple',6); + + order=575; + Game.TieredUpgrade('Pointier hats','Tests have shown increased thaumic receptivity relative to the geometric proportions of wizardly conic implements.','Wizard tower',1); + Game.TieredUpgrade('Beardlier beards','Haven\'t you heard? The beard is the word.','Wizard tower',2); + Game.TieredUpgrade('Ancient grimoires','Contain interesting spells such as "Turn Water To Drool", "Grow Eyebrows On Furniture" and "Summon Politician".','Wizard tower',3); + Game.TieredUpgrade('Kitchen curses','Exotic magic involved in all things pastry-related. Hexcellent!','Wizard tower',4); + Game.TieredUpgrade('School of sorcery','This cookie-funded academy of witchcraft is home to the 4 prestigious houses of magic : the Jocks, the Nerds, the Preps, and the Deathmunchers.','Wizard tower',5); + Game.TieredUpgrade('Dark formulas','Eldritch forces are at work behind these spells - you get the feeling you really shouldn\'t be messing with those. But I mean, free cookies, right?','Wizard tower',6); + + + order=250; + Game.GrandmaSynergy('Banker grandmas','A nice banker to cash in more cookies.','Bank');Game.last.order=250.0591; + Game.GrandmaSynergy('Priestess grandmas','A nice priestess to praise the one true Baker in the sky.','Temple');Game.last.order=250.0592; + Game.GrandmaSynergy('Witch grandmas','A nice witch to cast a zip, and a zoop, and poof! Cookies.','Wizard tower');Game.last.order=250.0593; + + + + order=0; + new Game.Upgrade('Tin of british tea biscuits',loc("Contains an assortment of fancy biscuits.")+'Every time is tea time.',25,[21,8]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; + new Game.Upgrade('Box of macarons',loc("Contains an assortment of macarons.")+'Multicolored delicacies filled with various kinds of jam.
Not to be confused with macaroons, macaroni, macarena or any of that nonsense.
',25,[20,8]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; + new Game.Upgrade('Box of brand biscuits',loc("Contains an assortment of popular biscuits.")+'They\'re brand new!',25,[20,9]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; + + order=10020; + Game.NewUpgradeCookie({name:'Pure black chocolate cookies',desc:'Dipped in a lab-made substance darker than the darkest cocoa (dubbed "chocoalate").',icon:[26,3],power: 5,price: 9999999999999999*5}); + Game.NewUpgradeCookie({name:'Pure white chocolate cookies',desc:'Elaborated on the nano-scale, the coating on this biscuit is able to refract light even in a pitch-black environment.',icon:[26,4],power: 5,price: 9999999999999999*5}); + Game.NewUpgradeCookie({name:'Ladyfingers',desc:'Cleaned and sanitized so well you\'d swear they\'re actual biscuits.',icon:[27,3],power: 3,price: 99999999999999999}); + Game.NewUpgradeCookie({name:'Tuiles',desc:'These never go out of tile.',icon:[27,4],power: 3,price: 99999999999999999*5}); + Game.NewUpgradeCookie({name:'Chocolate-stuffed biscuits',desc:'A princely snack!
The holes are so the chocolate stuffing can breathe.',icon:[28,3],power: 3,price: 999999999999999999}); + Game.NewUpgradeCookie({name:'Checker cookies',desc:'A square cookie? This solves so many storage and packaging problems! You\'re a genius!',icon:[28,4],power: 3,price: 999999999999999999*5}); + Game.NewUpgradeCookie({name:'Butter cookies',desc:'These melt right off your mouth and into your heart. (Let\'s face it, they\'re rather fattening.)',icon:[29,3],power: 3,price: 9999999999999999999}); + Game.NewUpgradeCookie({name:'Cream cookies',desc:'It\'s like two chocolate chip cookies! But brought together with the magic of cream! It\'s fiendishly perfect!',icon:[29,4],power: 3,price: 9999999999999999999*5}); + + order=0; + var desc=loc("Placing an upgrade in this slot will make its effects permanent across all playthroughs."); + new Game.Upgrade('Permanent upgrade slot I',desc, 100,[0,10]);Game.last.pool='prestige';Game.last.iconFunction=function(){return Game.PermanentSlotIcon(0);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(0);}; + new Game.Upgrade('Permanent upgrade slot II',desc, 20000,[1,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot I'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(1);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(1);}; + new Game.Upgrade('Permanent upgrade slot III',desc, 3000000,[2,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot II'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(2);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(2);}; + new Game.Upgrade('Permanent upgrade slot IV',desc, 400000000,[3,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot III'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(3);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(3);}; + new Game.Upgrade('Permanent upgrade slot V',desc, 50000000000,[4,10]);Game.last.pool='prestige';Game.last.parents=['Permanent upgrade slot IV'];Game.last.iconFunction=function(){return Game.PermanentSlotIcon(4);};Game.last.activateFunction=function(){Game.AssignPermanentSlot(4);}; + + var slots=['Permanent upgrade slot I','Permanent upgrade slot II','Permanent upgrade slot III','Permanent upgrade slot IV','Permanent upgrade slot V']; + for (var i=0;i'+loc("Click to activate.")+''); + var upgrade=Game.UpgradesById[Game.permanentUpgrades[i]]; + return '
'+loc("Current:")+' '+tinyIcon(upgrade.icon)+' '+upgrade.dname+'
'+this.ddesc+(context=='stats'?'':'
'+loc("Click to activate.")+''); + };}(i); + } + + Game.PermanentSlotIcon=function(slot) + { + if (Game.permanentUpgrades[slot]==-1) return [slot,10]; + return Game.UpgradesById[Game.permanentUpgrades[slot]].icon; + } + Game.AssignPermanentSlot=function(slot) + { + PlaySound('snd/tick.mp3'); + Game.tooltip.hide(); + var list=[]; + for (var i in Game.Upgrades) + { + var me=Game.Upgrades[i]; + if (me.bought && me.unlocked && !me.noPerm && (me.pool=='' || me.pool=='cookie')) + { + var fail=0; + for (var ii in Game.permanentUpgrades) {if (Game.permanentUpgrades[ii]==me.id) fail=1;}//check if not already in another permaslot + if (!fail) list.push(me); + } + } + + var sortMap=function(a,b) + { + if (a.order>b.order) return 1; + else if (a.order

'+loc("Pick an upgrade to make permanent")+'

'+ + + '
'+(Game.crate(Game.UpgradesById[upgrade==-1?0:upgrade],'','','upgradeToSlot'))+'
'+ + '
'+upgrades+'
'+ + '
'+loc("Here are all the upgrades you've purchased last playthrough.
Pick one to permanently gain its effects!
You can reassign this slot anytime you ascend.")+'
' + ,[[loc("Confirm"),'Game.permanentUpgrades['+slot+']=Game.SelectingPermanentUpgrade;Game.BuildAscendTree();Game.ClosePrompt();'],loc("Cancel")],0,'widePrompt'); + } + Game.SelectingPermanentUpgrade=-1; + Game.PutUpgradeInPermanentSlot=function(upgrade,slot) + { + Game.SelectingPermanentUpgrade=upgrade; + l('upgradeToSlotWrap').innerHTML=''; + l('upgradeToSlotWrap').style.display=(upgrade==-1?'none':'block'); + l('upgradeToSlotNone').style.display=(upgrade!=-1?'none':'block'); + l('upgradeToSlotWrap').innerHTML=(Game.crate(Game.UpgradesById[upgrade==-1?0:upgrade],'','','upgradeToSlot')); + } + + new Game.Upgrade('Starspawn',loc("Eggs drop %1% more often.",10)+'
'+loc("Golden cookies appear %1% more often during %2.",[2,loc("Easter")]),111111,[0,12]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; + new Game.Upgrade('Starsnow',loc("Christmas cookies drop %1% more often.",5)+'
'+loc("Reindeer appear %1% more often.",5),111111,[12,9]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; + new Game.Upgrade('Starterror',loc("Spooky cookies drop %1% more often.",10)+'
'+loc("Golden cookies appear %1% more often during %2.",[2,loc("Halloween")]),111111,[13,8]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; + new Game.Upgrade('Starlove',loc("Heart cookies are %1% more powerful.",50)+'
'+loc("Golden cookies appear %1% more often during %2.",[2,loc("Valentine's day")]),111111,[20,3]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; + new Game.Upgrade('Startrade',loc("Golden cookies appear %1% more often during %2.",[5,loc("Business day")]),111111,[17,6]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; + + var angelPriceFactor=7; + var desc=function(percent,total){return loc("You gain another +%1% of your regular CpS while the game is closed, for a total of %2%.",[percent,total]);} + new Game.Upgrade('Angels',desc(10,15)+'Lowest-ranking at the first sphere of pastry heaven, angels are tasked with delivering new recipes to the mortals they deem worthy.',Math.pow(angelPriceFactor,1),[0,11]);Game.last.pool='prestige';Game.last.parents=['Twin Gates of Transcendence']; + new Game.Upgrade('Archangels',desc(10,25)+'Members of the first sphere of pastry heaven, archangels are responsible for the smooth functioning of the world\'s largest bakeries.',Math.pow(angelPriceFactor,2),[1,11]);Game.last.pool='prestige';Game.last.parents=['Angels']; + new Game.Upgrade('Virtues',desc(10,35)+'Found at the second sphere of pastry heaven, virtues make use of their heavenly strength to push and drag the stars of the cosmos.',Math.pow(angelPriceFactor,3),[2,11]);Game.last.pool='prestige';Game.last.parents=['Archangels']; + new Game.Upgrade('Dominions',desc(10,45)+'Ruling over the second sphere of pastry heaven, dominions hold a managerial position and are in charge of accounting and regulating schedules.',Math.pow(angelPriceFactor,4),[3,11]);Game.last.pool='prestige';Game.last.parents=['Virtues']; + new Game.Upgrade('Cherubim',desc(10,55)+'Sieging at the first sphere of pastry heaven, the four-faced cherubim serve as heavenly bouncers and bodyguards.',Math.pow(angelPriceFactor,5),[4,11]);Game.last.pool='prestige';Game.last.parents=['Dominions']; + new Game.Upgrade('Seraphim',desc(10,65)+'Leading the first sphere of pastry heaven, seraphim possess ultimate knowledge of everything pertaining to baking.',Math.pow(angelPriceFactor,6),[5,11]);Game.last.pool='prestige';Game.last.parents=['Cherubim']; + new Game.Upgrade('God',desc(10,75)+'Like Santa, but less fun.',Math.pow(angelPriceFactor,7),[6,11]);Game.last.pool='prestige';Game.last.parents=['Seraphim']; + + new Game.Upgrade('Twin Gates of Transcendence',loc("You now keep making cookies while the game is closed, at the rate of %1% of your regular CpS and up to 1 hour after the game is closed.
(Beyond 1 hour, this is reduced by a further %2% - your rate goes down to %3% of your CpS.)",[5,90,0.5])+'This is one occasion you\'re always underdressed for. Don\'t worry, just rush in past the bouncer and pretend you know people.',1,[15,11]);Game.last.pool='prestige'; + + new Game.Upgrade('Heavenly luck',loc("Golden cookies appear %1% more often.",5)+'Someone up there likes you.',77,[22,6]);Game.last.pool='prestige'; + new Game.Upgrade('Lasting fortune',loc("Golden cookie effects last %1% longer.",10)+'This isn\'t your average everyday luck. This is... advanced luck.',777,[23,6]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck']; + new Game.Upgrade('Decisive fate',loc("Golden cookies stay %1% longer.",5)+'Life just got a bit more intense.',7777,[10,14]);Game.last.pool='prestige';Game.last.parents=['Lasting fortune']; + + new Game.Upgrade('Divine discount',loc("All buildings are %1% cheaper.",1)+'Someone special deserves a special price.',99999,[21,7]);Game.last.pool='prestige';Game.last.parents=['Decisive fate']; + new Game.Upgrade('Divine sales',loc("All upgrades are %1% cheaper.",1)+'Everything must go!',99999,[18,7]);Game.last.pool='prestige';Game.last.parents=['Decisive fate']; + new Game.Upgrade('Divine bakeries',loc("Cookie upgrades are %1 times cheaper.",5)+'They sure know what they\'re doing.',399999,[17,7]);Game.last.pool='prestige';Game.last.parents=['Divine sales','Divine discount']; + + new Game.Upgrade('Starter kit',loc("You start with %1.",loc("%1 cursor",10))+'This can come in handy.',50,[0,14]);Game.last.pool='prestige';Game.last.parents=['Tin of british tea biscuits','Box of macarons','Box of brand biscuits','Tin of butter cookies']; + new Game.Upgrade('Starter kitchen',loc("You start with %1.",loc("%1 grandma",5))+'Where did these come from?',5000,[1,14]);Game.last.pool='prestige';Game.last.parents=['Starter kit']; + new Game.Upgrade('Halo gloves',loc("Clicking is %1% more powerful.",10)+'Smite that cookie.',55555,[22,7]);Game.last.pool='prestige';Game.last.parents=['Starter kit']; + + new Game.Upgrade('Kitten angels',strKittenDesc+'All cats go to heaven.',9000,[23,7]);Game.last.pool='prestige';Game.last.parents=['Dominions'];Game.last.kitten=1; + + new Game.Upgrade('Unholy bait',loc("Wrinklers appear %1 times as fast.",5)+'No wrinkler can resist the scent of worm biscuits.',44444,[15,12]);Game.last.pool='prestige';Game.last.parents=['Starter kitchen']; + new Game.Upgrade('Sacrilegious corruption',loc("Wrinklers explode into %1% more cookies.",5)+'Unique in the animal kingdom, the wrinkler digestive tract is able to withstand an incredible degree of dilation - provided you prod them appropriately.',444444,[19,8]);Game.last.pool='prestige';Game.last.parents=['Unholy bait']; + + + order=200;Game.TieredUpgrade('Xtreme walkers','Complete with flame decals and a little horn that goes "toot".','Grandma',7); + order=300;Game.TieredUpgrade('Fudge fungus','A sugary parasite whose tendrils help cookie growth.
Please do not breathe in the spores. In case of spore ingestion, seek medical help within the next 36 seconds.
','Farm',7); + order=400;Game.TieredUpgrade('Planetsplitters','These new state-of-the-art excavators have been tested on Merula, Globort and Flwanza VI, among other distant planets which have been curiously quiet lately.','Mine',7); + order=500;Game.TieredUpgrade('Cyborg workforce','Semi-synthetic organisms don\'t slack off, don\'t unionize, and have 20% shorter lunch breaks, making them ideal labor fodder.','Factory',7); + order=525;Game.TieredUpgrade('Way of the wallet','This new monetary school of thought is all the rage on the banking scene; follow its precepts and you may just profit from it.','Bank',7); + order=550;Game.TieredUpgrade('Creation myth','Stories have been circulating about the origins of the very first cookie that was ever baked; tales of how it all began, in the Dough beyond time and the Ovens of destiny.','Temple',7); + order=575;Game.TieredUpgrade('Cookiemancy','There it is; the perfected school of baking magic. From summoning chips to hexing nuts, there is not a single part of cookie-making that hasn\'t been improved tenfold by magic tricks.','Wizard tower',7); + order=600;Game.TieredUpgrade('Dyson sphere','You\'ve found a way to apply your knowledge of cosmic technology to slightly more local endeavors; this gigantic sphere of meta-materials, wrapping the solar system, is sure to kick your baking abilities up a notch.','Shipment',7); + order=700;Game.TieredUpgrade('Theory of atomic fluidity','Pushing alchemy to its most extreme limits, you find that everything is transmutable into anything else - lead to gold, mercury to water; more importantly, you realize that anything can -and should- be converted to cookies.','Alchemy lab',7); + order=800;Game.TieredUpgrade('End of times back-up plan','Just in case, alright?','Portal',7); + order=900;Game.TieredUpgrade('Great loop hypothesis','What if our universe is just one instance of an infinite cycle? What if, before and after it, stretched infinite amounts of the same universe, themselves containing infinite amounts of cookies?','Time machine',7); + order=1000;Game.TieredUpgrade('The Pulse','You\'ve tapped into the very pulse of the cosmos, a timeless rhythm along which every material and antimaterial thing beats in unison. This, somehow, means more cookies.','Antimatter condenser',7); + order=1100; + Game.TieredUpgrade('Lux sanctorum','Your prism attendants have become increasingly mesmerized with something in the light - or maybe something beyond it; beyond us all, perhaps?','Prism',7); + + + order=200;Game.TieredUpgrade('The Unbridling','It might be a classic tale of bad parenting, but let\'s see where grandma is going with this.','Grandma',8); + order=300;Game.TieredUpgrade('Wheat triffids','Taking care of crops is so much easier when your plants can just walk about and help around the farm.
Do not pet. Do not feed. Do not attempt to converse with.
','Farm',8); + order=400;Game.TieredUpgrade('Canola oil wells','A previously untapped resource, canola oil permeates the underground olifers which grant it its particular taste and lucrative properties.','Mine',8); + order=500;Game.TieredUpgrade('78-hour days','Why didn\'t we think of this earlier?','Factory',8); + order=525;Game.TieredUpgrade('The stuff rationale','If not now, when? If not it, what? If not things... stuff?','Bank',8); + order=550;Game.TieredUpgrade('Theocracy','You\'ve turned your cookie empire into a perfect theocracy, gathering the adoration of zillions of followers from every corner of the universe.
Don\'t let it go to your head.
','Temple',8); + order=575;Game.TieredUpgrade('Rabbit trick','Using nothing more than a fancy top hat, your wizards have found a way to simultaneously curb rabbit population and produce heaps of extra cookies for basically free!
Resulting cookies may or may not be fit for vegans.
','Wizard tower',8); + order=600;Game.TieredUpgrade('The final frontier','It\'s been a long road, getting from there to here. It\'s all worth it though - the sights are lovely and the oil prices slightly more reasonable.','Shipment',8); + order=700;Game.TieredUpgrade('Beige goo','Well now you\'ve done it. Good job. Very nice. That\'s 3 galaxies you\'ve just converted into cookies. Good thing you can hop from universe to universe.','Alchemy lab',8); + order=800;Game.TieredUpgrade('Maddening chants','A popular verse goes like so : "jau\'hn madden jau\'hn madden aeiouaeiouaeiou brbrbrbrbrbrbr"','Portal',8); + order=900;Game.TieredUpgrade('Cookietopian moments of maybe','Reminiscing how things could have been, should have been, will have been.','Time machine',8); + order=1000;Game.TieredUpgrade('Some other super-tiny fundamental particle? Probably?','When even the universe is running out of ideas, that\'s when you know you\'re nearing the end.','Antimatter condenser',8); + order=1100; + Game.TieredUpgrade('Reverse shadows','Oh man, this is really messing with your eyes.','Prism',8); + + + order=20000; + new Game.Upgrade('Kitten accountants',strKittenDesc+'business going great, sir',900000000000000000000000,Game.GetIcon('Kitten',6));Game.last.kitten=1;Game.MakeTiered(Game.last,6,18); + new Game.Upgrade('Kitten specialists',strKittenDesc+'optimeowzing your workflow like whoah, sir',900000000000000000000000000,Game.GetIcon('Kitten',7));Game.last.kitten=1;Game.MakeTiered(Game.last,7,18); + new Game.Upgrade('Kitten experts',strKittenDesc+'10 years expurrrtise in the cookie business, sir',900000000000000000000000000000,Game.GetIcon('Kitten',8));Game.last.kitten=1;Game.MakeTiered(Game.last,8,18); + + new Game.Upgrade('How to bake your dragon',loc("Allows you to purchase a crumbly egg once you have earned 1 million cookies.")+'A tome full of helpful tips such as "oh god, stay away from it", "why did we buy this thing, it\'s not even house-broken" and "groom twice a week in the direction of the scales".',9,[22,12]);Game.last.pool='prestige'; + + order=25100; + new Game.Upgrade('A crumbly egg',loc("Unlocks the cookie dragon egg.")+'Thank you for adopting this robust, fun-loving cookie dragon! It will bring you years of joy and entertainment.
Keep in a dry and cool place, and away from other house pets. Subscription to home insurance is strongly advised.
',25,[21,12]); + + new Game.Upgrade('Chimera',loc("Synergy upgrades are %1% cheaper.",2)+'
'+loc("You gain another +%1% of your regular CpS while the game is closed.",5)+'
'+loc("You retain optimal cookie production while the game is closed for %1 more days.",2)+'More than the sum of its parts.',Math.pow(angelPriceFactor,9),[24,7]);Game.last.pool='prestige';Game.last.parents=['God','Lucifer','Synergies Vol. II']; + + new Game.Upgrade('Tin of butter cookies',loc("Contains an assortment of rich butter cookies.")+'Five varieties of danish cookies.
Complete with little paper cups.
',25,[21,9]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; + + new Game.Upgrade('Golden switch',loc("Unlocks the golden switch, which passively boosts your CpS by %1% but disables golden cookies.",50)+'Less clicking, more idling.',999,[21,10]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck']; + + new Game.Upgrade('Classic dairy selection',loc("Unlocks the milk selector, letting you pick which milk is displayed under your cookie.
Comes with a variety of basic flavors.")+'Don\'t have a cow, man.',9,[1,8]);Game.last.pool='prestige';Game.last.parents=[]; + + new Game.Upgrade('Fanciful dairy selection',loc("Contains more exotic flavors for your milk selector.")+'Strong bones for the skeleton army.',1000000,[9,7]);Game.last.pool='prestige';Game.last.parents=['Classic dairy selection']; + + order=10300; + Game.NewUpgradeCookie({name:'Dragon cookie',desc:'Imbued with the vigor and vitality of a full-grown cookie dragon, this mystical cookie will embolden your empire for the generations to come.',icon:[10,25],power:5,price:9999999999999999*7,locked:1}); + + + order=40000; + new Game.Upgrade('Golden switch [off]',loc("Turning this on will give you a passive +%1% CpS, but prevents golden cookies from spawning.
Cost is equal to 1 hour of production.",50),1000000,[20,10]); + Game.last.pool='toggle';Game.last.toggleInto='Golden switch [on]'; + Game.last.priceFunc=function(){return Game.cookiesPs*60*60;} + var func=function(){ + if (Game.Has('Residual luck')) + { + var bonus=0; + var upgrades=Game.goldenCookieUpgrades; + for (var i in upgrades) {if (Game.Has(upgrades[i])) bonus++;} + return '
'+Game.listTinyOwnedUpgrades(Game.goldenCookieUpgrades)+'

The effective boost is +'+Beautify(Math.round(50+bonus*10))+'%
thanks to residual luck
and your '+bonus+' golden cookie upgrade'+(bonus==1?'':'s')+'.
'+this.ddesc; + } + return this.desc; + }; + if (EN) Game.last.descFunc=func; + + new Game.Upgrade('Golden switch [on]',loc("The switch is currently giving you a passive +%1% CpS; it also prevents golden cookies from spawning.
Turning it off will revert those effects.
Cost is equal to 1 hour of production.",50),1000000,[21,10]); + Game.last.pool='toggle';Game.last.toggleInto='Golden switch [off]'; + Game.last.priceFunc=function(){return Game.cookiesPs*60*60;} + Game.last.descFunc=func; + + order=50000; + new Game.Upgrade('Milk selector',loc("Lets you pick what flavor of milk to display."),0,[1,8]); + Game.last.descFunc=function(){ + var choice=this.choicesFunction()[Game.milkType]; + if (!choice) choice=this.choicesFunction()[0]; + return '
'+loc("Current:")+' '+tinyIcon(choice.icon)+' '+choice.name+'
'+this.ddesc; + }; + + Game.last.pool='toggle'; + Game.last.choicesFunction=function() + { + var rank=0; + var choices=[]; + + for (var i=0;imaxRank) choices[i]=0; + } + + choices[Game.milkType].selected=1; + return choices; + } + Game.last.choicesPick=function(id) + {Game.milkType=id;} + + + order=10300; + var butterBiscuitMult=100000000; + Game.NewUpgradeCookie({name:'Milk chocolate butter biscuit',desc:'Rewarded for owning 100 of everything.
It bears the engraving of a fine entrepreneur.',icon:[27,8],power: 10,price: 999999999999999999999*butterBiscuitMult,locked:1}); + Game.NewUpgradeCookie({name:'Dark chocolate butter biscuit',desc:'Rewarded for owning 150 of everything.
It is adorned with the image of an experienced cookie tycoon.',icon:[27,9],power: 10,price: 999999999999999999999999*butterBiscuitMult,locked:1}); + Game.NewUpgradeCookie({name:'White chocolate butter biscuit',desc:'Rewarded for owning 200 of everything.
The chocolate is chiseled to depict a masterful pastry magnate.',icon:[28,9],power: 10,price: 999999999999999999999999999*butterBiscuitMult,locked:1}); + Game.NewUpgradeCookie({name:'Ruby chocolate butter biscuit',desc:'Rewarded for owning 250 of everything.
Covered in a rare red chocolate, this biscuit is etched to represent the face of a cookie industrialist gone mad with power.',icon:[28,8],power: 10,price: 999999999999999999999999999999*butterBiscuitMult,locked:1}); + + order=10020; + Game.NewUpgradeCookie({name:'Gingersnaps',desc:'Cookies with a soul. Probably.',icon:[29,10],power: 4,price: 99999999999999999999}); + Game.NewUpgradeCookie({name:'Cinnamon cookies',desc:'The secret is in the patented swirly glazing.',icon:[23,8],power: 4,price: 99999999999999999999*5}); + Game.NewUpgradeCookie({name:'Vanity cookies',desc:'One tiny candied fruit sits atop this decadent cookie.',icon:[22,8],power: 4,price: 999999999999999999999}); + Game.NewUpgradeCookie({name:'Cigars',desc:'Close, but no match for those extravagant cookie straws they serve in coffee shops these days.',icon:[25,8],power: 4,price: 999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Pinwheel cookies',desc:'Bringing you the dizzying combination of brown flavor and beige taste!',icon:[22,10],power: 4,price: 9999999999999999999999}); + Game.NewUpgradeCookie({name:'Fudge squares',desc:'Not exactly cookies, but you won\'t care once you\'ve tasted one of these.
They\'re so good, it\'s fudged-up!',icon:[24,8],power: 4,price: 9999999999999999999999*5}); + + order=10030; + Game.NewUpgradeCookie({name:'Digits',desc:'Three flavors, zero phalanges.',icon:[26,8],require:'Box of brand biscuits',power: 2, price: 999999999999999*5}); + + order=10029; + Game.NewUpgradeCookie({name:'Butter horseshoes',desc:'It would behoove you to not overindulge in these.',icon:[22,9],require:'Tin of butter cookies',power: 4, price: 99999999999999999999999}); + Game.NewUpgradeCookie({name:'Butter pucks',desc:'Lord, what fools these mortals be!
(This is kind of a hokey reference.)',icon:[23,9],require:'Tin of butter cookies',power: 4, price: 99999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Butter knots',desc:'Look, you can call these pretzels if you want, but you\'d just be fooling yourself, wouldn\'t you?',icon:[24,9],require:'Tin of butter cookies',power: 4, price: 999999999999999999999999}); + Game.NewUpgradeCookie({name:'Butter slabs',desc:'Nothing butter than a slab to the face.',icon:[25,9],require:'Tin of butter cookies',power: 4, price: 999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Butter swirls',desc:'These are equal parts sugar, butter, and warm fuzzy feelings - all of which cause millions of deaths every day.',icon:[26,9],require:'Tin of butter cookies',power: 4, price: 9999999999999999999999999}); + + order=10020; + Game.NewUpgradeCookie({name:'Shortbread biscuits',desc:'These rich butter cookies are neither short, nor bread. What a country!',icon:[23,10],power: 4,price: 99999999999999999999999}); + Game.NewUpgradeCookie({name:'Millionaires\' shortbreads',desc:'Three thought-provoking layers of creamy chocolate, hard-working caramel and crumbly biscuit in a poignant commentary of class struggle.',icon:[24,10],power: 4,price: 99999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Caramel cookies',desc:'The polymerized carbohydrates adorning these cookies are sure to stick to your teeth for quite a while.',icon:[25,10],power: 4,price: 999999999999999999999999}); + + + var desc=function(totalHours){ + return loc("You retain optimal cookie production while the game is closed for twice as long, for a total of %1.",Game.sayTime(totalHours*60*60*Game.fps,-1)); + } + new Game.Upgrade('Belphegor',desc(2)+'A demon of shortcuts and laziness, Belphegor commands machines to do work in his stead.',Math.pow(angelPriceFactor,1),[7,11]);Game.last.pool='prestige';Game.last.parents=['Twin Gates of Transcendence']; + new Game.Upgrade('Mammon',desc(4)+'The demonic embodiment of wealth, Mammon requests a tithe of blood and gold from all his worshippers.',Math.pow(angelPriceFactor,2),[8,11]);Game.last.pool='prestige';Game.last.parents=['Belphegor']; + new Game.Upgrade('Abaddon',desc(8)+'Master of overindulgence, Abaddon governs the wrinkler brood and inspires their insatiability.',Math.pow(angelPriceFactor,3),[9,11]);Game.last.pool='prestige';Game.last.parents=['Mammon']; + new Game.Upgrade('Satan',desc(16)+'The counterpoint to everything righteous, this demon represents the nefarious influence of deceit and temptation.',Math.pow(angelPriceFactor,4),[10,11]);Game.last.pool='prestige';Game.last.parents=['Abaddon']; + new Game.Upgrade('Asmodeus',desc(32)+'This demon with three monstrous heads draws his power from the all-consuming desire for cookies and all things sweet.',Math.pow(angelPriceFactor,5),[11,11]);Game.last.pool='prestige';Game.last.parents=['Satan']; + new Game.Upgrade('Beelzebub',desc(64)+'The festering incarnation of blight and disease, Beelzebub rules over the vast armies of pastry inferno.',Math.pow(angelPriceFactor,6),[12,11]);Game.last.pool='prestige';Game.last.parents=['Asmodeus']; + new Game.Upgrade('Lucifer',desc(128)+'Also known as the Lightbringer, this infernal prince\'s tremendous ego caused him to be cast down from pastry heaven.',Math.pow(angelPriceFactor,7),[13,11]);Game.last.pool='prestige';Game.last.parents=['Beelzebub']; + + new Game.Upgrade('Golden cookie alert sound',loc("Unlocks the golden cookie sound selector, which lets you pick whether golden cookies emit a sound when appearing or not.")+'A sound decision.',999999,[28,6]);Game.last.pool='prestige';Game.last.parents=['Residual luck']; + + order=49900; + new Game.Upgrade('Golden cookie sound selector',loc("Lets you change the sound golden cookies make when they spawn."),0,[28,6]); + Game.last.descFunc=function(){ + var choice=this.choicesFunction()[Game.chimeType]; + return '
'+loc("Current:")+' '+tinyIcon(choice.icon)+' '+choice.name+'
'+this.ddesc; + }; + + Game.last.pool='toggle'; + Game.last.choicesFunction=function() + { + var choices=[]; + choices[0]={name:'No sound',icon:[0,7]}; + choices[1]={name:'Chime',icon:[22,6]}; + choices[2]={name:'Fortune',icon:[27,6]}; + choices[3]={name:'Cymbal',icon:[9,10]}; + choices[4]={name:'Squeak',icon:[8,10]}; + for (var i=0;i4) {Game.wrinklerSquishSound-=4;}PlaySound('snd/squeak'+(Game.wrinklerSquishSound)+'.mp3');} + } + + + new Game.Upgrade('Basic wallpaper assortment',loc("Unlocks the background selector, letting you select the game's background.
Comes with a variety of basic flavors.")+'Prioritizing aesthetics over crucial utilitarian upgrades? Color me impressed.',99,[29,5]);Game.last.pool='prestige';Game.last.parents=['Classic dairy selection']; + + new Game.Upgrade('Legacy',loc("This is the first heavenly upgrade; it unlocks the Heavenly chips system.
Each time you ascend, the cookies you made in your past life are turned into heavenly chips and prestige.
Heavenly chips can be spent on a variety of permanent transcendental upgrades.
Your prestige level also gives you a permanent +1% CpS per level.")+'We\'ve all been waiting for you.',1,[21,6]);Game.last.pool='prestige';Game.last.parents=[]; + + new Game.Upgrade('Elder spice',loc("You can attract %1 more wrinklers.",2)+'The cookie your cookie could smell like.',444444,[19,8]);Game.last.pool='prestige';Game.last.parents=['Unholy bait']; + + new Game.Upgrade('Residual luck',loc("While the golden switch is on, you gain an additional +%1% CpS per golden cookie upgrade owned.",10)+'Fortune comes in many flavors.',99999,[27,6]);Game.last.pool='prestige';Game.last.parents=['Golden switch']; + + order=150;new Game.Upgrade('Fantasteel mouse',getStrClickingGains(1)+'You could be clicking using your touchpad and we\'d be none the wiser.',5000000000000000000,[11,17]);Game.MakeTiered(Game.last,8,11); + new Game.Upgrade('Nevercrack mouse',getStrClickingGains(1)+'How much beefier can you make a mouse until it\'s considered a rat?',500000000000000000000,[11,18]);Game.MakeTiered(Game.last,9,11); + + + new Game.Upgrade('Five-finger discount',loc("All upgrades are %1% cheaper per %2.",[1,loc("%1 cursor",100)])+'Stick it to the man.',555555,[28,7],function(){Game.upgradesToRebuild=1;});Game.last.pool='prestige';Game.last.parents=['Halo gloves','Abaddon']; + + + order=5000; + Game.SynergyUpgrade('Future almanacs','Lets you predict optimal planting times. It\'s crazy what time travel can do!','Farm','Time machine','synergy1'); + Game.SynergyUpgrade('Rain prayer','A deeply spiritual ceremonial involving complicated dance moves and high-tech cloud-busting lasers.','Farm','Temple','synergy2'); + + Game.SynergyUpgrade('Seismic magic','Surprise earthquakes are an old favorite of wizardly frat houses.','Mine','Wizard tower','synergy1'); + Game.SynergyUpgrade('Asteroid mining','As per the 1974 United Cosmic Convention, comets, moons, and inhabited planetoids are no longer legally excavatable.
But hey, a space bribe goes a long way.
','Mine','Shipment','synergy2'); + + Game.SynergyUpgrade('Quantum electronics','Your machines won\'t even be sure if they\'re on or off!','Factory','Antimatter condenser','synergy1'); + Game.SynergyUpgrade('Temporal overclocking','Introduce more quickitude in your system for increased speedation of fastness.','Factory','Time machine','synergy2'); + + Game.SynergyUpgrade('Contracts from beyond','Make sure to read the fine print!','Bank','Portal','synergy1'); + Game.SynergyUpgrade('Printing presses','Fake bills so real, they\'re almost worth the ink they\'re printed with.','Bank','Factory','synergy2'); + + Game.SynergyUpgrade('Paganism','Some deities are better left unworshipped.','Temple','Portal','synergy1'); + Game.SynergyUpgrade('God particle','Turns out God is much tinier than we thought, I guess.','Temple','Antimatter condenser','synergy2'); + + Game.SynergyUpgrade('Arcane knowledge','Some things were never meant to be known - only mildly speculated.','Wizard tower','Alchemy lab','synergy1'); + Game.SynergyUpgrade('Magical botany','Already known in some reactionary newspapers as "the wizard\'s GMOs".','Wizard tower','Farm','synergy2'); + + Game.SynergyUpgrade('Fossil fuels','Somehow better than plutonium for powering rockets.
Extracted from the fuels of ancient, fossilized civilizations.
','Shipment','Mine','synergy1'); + Game.SynergyUpgrade('Shipyards','Where carpentry, blind luck, and asbestos insulation unite to produce the most dazzling spaceships on the planet.','Shipment','Factory','synergy2'); + + Game.SynergyUpgrade('Primordial ores','Only when refining the purest metals will you extract the sweetest sap of the earth.','Alchemy lab','Mine','synergy1'); + Game.SynergyUpgrade('Gold fund','If gold is the backbone of the economy, cookies, surely, are its hip joints.','Alchemy lab','Bank','synergy2'); + + Game.SynergyUpgrade('Infernal crops','Sprinkle regularly with FIRE.','Portal','Farm','synergy1'); + Game.SynergyUpgrade('Abysmal glimmer','Someone, or something, is staring back at you.
Perhaps at all of us.
','Portal','Prism','synergy2'); + + Game.SynergyUpgrade('Relativistic parsec-skipping','People will tell you this isn\'t physically possible.
These are people you don\'t want on your ship.
','Time machine','Shipment','synergy1'); + Game.SynergyUpgrade('Primeval glow','From unending times, an ancient light still shines, impossibly pure and fragile in its old age.','Time machine','Prism','synergy2'); + + Game.SynergyUpgrade('Extra physics funding','Time to put your money where your particle colliders are.','Antimatter condenser','Bank','synergy1'); + Game.SynergyUpgrade('Chemical proficiency','Discover exciting new elements, such as Fleshmeltium, Inert Shampoo Byproduct #17 and Carbon++!','Antimatter condenser','Alchemy lab','synergy2'); + + Game.SynergyUpgrade('Light magic','Actually not to be taken lightly! No, I\'m serious. 178 people died last year. You don\'t mess around with magic.','Prism','Wizard tower','synergy1'); + Game.SynergyUpgrade('Mystical energies','Something beckons from within the light. It is warm, comforting, and apparently the cause for several kinds of exotic skin cancers.','Prism','Temple','synergy2'); + + + new Game.Upgrade('Synergies Vol. I',loc("Unlocks a new tier of upgrades that affect 2 buildings at the same time.
Synergies appear once you have %1 of both buildings.",15)+'The many beats the few.',222222,[10,20]);Game.last.pool='prestige';Game.last.parents=['Satan','Dominions']; + new Game.Upgrade('Synergies Vol. II',loc("Unlocks a new tier of upgrades that affect 2 buildings at the same time.
Synergies appear once you have %1 of both buildings.",75)+'The several beats the many.',2222222,[10,29]);Game.last.pool='prestige';Game.last.parents=['Beelzebub','Seraphim','Synergies Vol. I']; + + new Game.Upgrade('Heavenly cookies',loc("Cookie production multiplier +%1% permanently.",10)+'Baked with heavenly chips. An otherwordly flavor that transcends time and space.',3,[25,12]);Game.last.pool='prestige';Game.last.parents=['Legacy'];Game.last.power=10;Game.last.pseudoCookie=true; + new Game.Upgrade('Wrinkly cookies',loc("Cookie production multiplier +%1% permanently.",10)+'The result of regular cookies left to age out for countless eons in a place where time and space are meaningless.',6666666,[26,12]);Game.last.pool='prestige';Game.last.parents=['Sacrilegious corruption','Elder spice'];Game.last.power=10;Game.last.pseudoCookie=true; + new Game.Upgrade('Distilled essence of redoubled luck',loc("Golden cookies (and all other things that spawn, such as reindeer) have %1% chance of being doubled.",1)+'Tastes glittery. The empty phial makes for a great pencil holder.',7777777,[27,12]);Game.last.pool='prestige';Game.last.parents=['Divine bakeries','Residual luck']; + + order=40000; + new Game.Upgrade('Occult obstruction',loc("Cookie production reduced to 0.")+'If symptoms persist, consult a doctor.',7,[15,5]);//debug purposes only + Game.last.pool='debug'; + new Game.Upgrade('Glucose-charged air',loc("Sugar lumps coalesce a whole lot faster.")+'Don\'t breathe too much or you\'ll get diabetes!',7,[29,16]);//debug purposes only + Game.last.pool='debug'; + + order=10300; + Game.NewUpgradeCookie({name:'Lavender chocolate butter biscuit',desc:'Rewarded for owning 300 of everything.
This subtly-flavored biscuit represents the accomplishments of decades of top-secret research. The molded design on the chocolate resembles a well-known entrepreneur who gave their all to the ancient path of baking.',icon:[26,10],power: 10,price: 999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + order=10030; + Game.NewUpgradeCookie({name:'Lombardia cookies',desc:'These come from those farms with the really good memory.',icon:[23,13],require:'Box of brand biscuits',power: 3, price: 999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Bastenaken cookies',desc:'French cookies made of delicious cinnamon and candy sugar. These do not contain Nuts!',icon:[24,13],require:'Box of brand biscuits',power: 3, price: 999999999999999999999*5}); + + order=10020; + Game.NewUpgradeCookie({name:'Pecan sandies',desc:'Stick a nut on a cookie and call it a day! Name your band after it! Whatever!',icon:[25,13],power: 4,price: 999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Moravian spice cookies',desc:'Popular for being the world\'s moravianest cookies.',icon:[26,13],power: 4,price: 9999999999999999999999999}); + Game.NewUpgradeCookie({name:'Anzac biscuits',desc:'Army biscuits from a bakery down under, containing no eggs but yes oats.',icon:[27,13],power: 4,price: 9999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Buttercakes',desc:'Glistening with cholesterol, these cookies moistly straddle the line between the legal definition of a cookie and just a straight-up stick of butter.',icon:[29,13],power: 4,price: 99999999999999999999999999}); + Game.NewUpgradeCookie({name:'Ice cream sandwiches',desc:'In an alternate universe, "ice cream sandwich" designates an ice cream cone filled with bacon, lettuce, and tomatoes. Maybe some sprinkles too.',icon:[28,13],power: 4,price: 99999999999999999999999999*5}); + + new Game.Upgrade('Stevia Caelestis',loc("Sugar lumps ripen %1 sooner.",Game.sayTime(60*60*Game.fps))+'A plant of supernatural sweetness grown by angels in heavenly gardens.',100000000,[25,15]);Game.last.pool='prestige';Game.last.parents=['Wrinkly cookies']; + new Game.Upgrade('Diabetica Daemonicus',loc("Sugar lumps mature %1 sooner.",Game.sayTime(60*60*Game.fps))+'A malevolent, if delicious herb that is said to grow on the cliffs of the darkest abyss of the underworld.',300000000,[26,15]);Game.last.pool='prestige';Game.last.parents=['Stevia Caelestis','Lucifer']; + new Game.Upgrade('Sucralosia Inutilis',loc("Bifurcated sugar lumps appear %1% more often and are %2% more likely to drop 2 lumps.",[5,5])+'A rare berry of uninteresting flavor that is as elusive as its uses are limited; only sought-after by the most avid collectors with too much wealth on their hands.',1000000000,[27,15]);Game.last.pool='prestige';Game.last.parents=['Diabetica Daemonicus']; + + new Game.Upgrade('Lucky digit',loc("+%1% prestige level effect on CpS.
+%2% golden cookie effect duration.
+%3% golden cookie lifespan.",[1,1,1])+'This upgrade is a bit shy and only appears when your prestige level contains a 7.',777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck'];Game.last.showIf=function(){return (Math.ceil(((Game.prestige+'').split('7').length-1))>=1);}; + new Game.Upgrade('Lucky number',loc("+%1% prestige level effect on CpS.
+%2% golden cookie effect duration.
+%3% golden cookie lifespan.",[1,1,1])+'This upgrade is a reclusive hermit and only appears when your prestige level contains two 7\'s.',77777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Lucky digit','Lasting fortune'];Game.last.showIf=function(){return (Math.ceil(((Game.prestige+'').split('7').length-1))>=2);}; + new Game.Upgrade('Lucky payout',loc("+%1% prestige level effect on CpS.
+%2% golden cookie effect duration.
+%3% golden cookie lifespan.",[1,1,1])+'This upgrade took an oath of complete seclusion from the rest of the world and only appears when your prestige level contains four 7\'s.',77777777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Lucky number','Decisive fate'];Game.last.showIf=function(){return (Math.ceil(((Game.prestige+'').split('7').length-1))>=4);}; + + order=50000; + new Game.Upgrade('Background selector',loc("Lets you pick which wallpaper to display."),0,[29,5]); + Game.last.descFunc=function(){ + var choice=this.choicesFunction()[Game.bgType]; + if (choice==0) choice=this.choicesFunction()[0]; + return '
'+loc("Current:")+' '+tinyIcon(choice.icon)+' '+choice.name+'
'+this.ddesc; + }; + + Game.last.pool='toggle'; + Game.last.choicesFunction=function() + { + var choices=[]; + for (var i in Game.BGsByChoice) + { + choices[i]={name:Game.BGsByChoice[i].name,icon:Game.BGsByChoice[i].icon,order:Game.BGsByChoice[i].order||parseInt(i)}; + } + + choices[13].div=true; + + for (var i=0;i=4.9 && !Game.Has('Distinguished wallpaper assortment')) choices[i]=0; + } + + choices[Game.bgType].selected=1; + return choices; + } + Game.last.choicesPick=function(id) + {Game.bgType=id;} + + Game.AllBGs=[ + {pic:'bgBlue',name:'Automatic',icon:[0,7]}, + {pic:'bgBlue',name:'Blue',icon:[21,21]}, + {pic:'bgRed',name:'Red',icon:[22,21]}, + {pic:'bgWhite',name:'White',icon:[23,21]}, + {pic:'bgBlack',name:'Black',icon:[24,21]}, + {pic:'bgGold',name:'Gold',icon:[25,21]}, + {pic:'grandmas1',name:'Grandmas',icon:[26,21]}, + {pic:'grandmas2',name:'Displeased grandmas',icon:[27,21]}, + {pic:'grandmas3',name:'Angered grandmas',icon:[28,21]}, + {pic:'bgMoney',name:'Money',icon:[29,21]}, + {pic:'bgPurple',name:'Purple',icon:[21,22],order:1.1}, + {pic:'bgPink',name:'Pink',icon:[24,22],order:2.1}, + {pic:'bgMint',name:'Mint',icon:[22,22],order:2.2}, + {pic:'bgSilver',name:'Silver',icon:[25,22],order:4.9}, + {pic:'bgBW',name:'Black & White',icon:[23,22],order:4.1}, + {pic:'bgSpectrum',name:'Spectrum',icon:[28,22],order:4.2}, + {pic:'bgCandy',name:'Candy',icon:[26,22]}, + {pic:'bgYellowBlue',name:'Biscuit store',icon:[27,22]}, + {pic:'bgChoco',name:'Chocolate',icon:[30,21]}, + {pic:'bgChocoDark',name:'Dark Chocolate',icon:[31,21]}, + {pic:'bgPaint',name:'Painter',icon:[24,34]}, + {pic:'bgSnowy',name:'Snow',icon:[30,22]}, + {pic:'bgSky',name:'Sky',icon:[29,22]}, + {pic:'bgStars',name:'Night',icon:[31,22]}, + {pic:'bgFoil',name:'Foil',icon:[25,34]}, + ]; + Game.BGsByChoice={}; + for (var i=0;iThis is the first cookie you\'ve ever baked. It holds a deep sentimental value and, after all this time, an interesting smell.
','Chancemaker',1); + Game.TieredUpgrade('"All Bets Are Off" magic coin','A coin that always lands on the other side when flipped. Not heads, not tails, not the edge. The other side.','Chancemaker',2); + Game.TieredUpgrade('Winning lottery ticket','What lottery? THE lottery, that\'s what lottery! Only lottery that matters!','Chancemaker',3); + Game.TieredUpgrade('Four-leaf clover field','No giant monsters here, just a whole lot of lucky grass.','Chancemaker',4); + Game.TieredUpgrade('A recipe book about books','Tip the scales in your favor with 28 creative new ways to cook the books.','Chancemaker',5); + Game.TieredUpgrade('Leprechaun village','You\'ve finally become accepted among the local leprechauns, who lend you their mythical luck as a sign of friendship (as well as some rather foul-tasting tea).','Chancemaker',6); + Game.TieredUpgrade('Improbability drive','A strange engine that turns statistics on their head. Recommended by the Grandmother\'s Guide to the Bakery.','Chancemaker',7); + Game.TieredUpgrade('Antisuperstistronics','An exciting new field of research that makes unlucky things lucky. No mirror unbroken, no ladder unwalked under!','Chancemaker',8); + + order=5000; + Game.SynergyUpgrade('Gemmed talismans','Good-luck charms covered in ancient and excruciatingly rare crystals. A must have for job interviews!','Chancemaker','Mine','synergy1'); + + order=20000; + new Game.Upgrade('Kitten consultants',strKittenDesc+'glad to be overpaid to work with you, sir',900000000000000000000000000000000,Game.GetIcon('Kitten',9));Game.last.kitten=1;Game.MakeTiered(Game.last,9,18); + + order=99999; + var years=Math.floor((Date.now()-new Date(2013,7,8))/(1000*60*60*24*365)); + //only updates on page load + //may behave strangely on leap years + Game.NewUpgradeCookie({name:'Birthday cookie',desc:'-',icon:[22,13],power:years,price:99999999999999999999999999999});Game.last.baseDesc=loc("Cookie production multiplier +%1% for every year Cookie Clicker has existed (currently: +%2%).",[1,Beautify(years)])+'Thank you for playing Cookie Clicker!
-Orteil
'; + + + order=150;new Game.Upgrade('Armythril mouse',getStrClickingGains(1)+'This one takes about 53 people to push it around and another 48 to jump down on the button and trigger a click. You could say it\'s got some heft to it.',50000000000000000000000,[11,19]);Game.MakeTiered(Game.last,10,11); + + order=200;Game.TieredUpgrade('Reverse dementia','Extremely unsettling, and somehow even worse than the regular kind.','Grandma',9); + order=300;Game.TieredUpgrade('Humane pesticides','Made by people, for people, from people and ready to unleash some righteous scorching pain on those pesky insects that so deserve it.','Farm',9); + order=400;Game.TieredUpgrade('Mole people','Engineered from real human beings within your very labs, these sturdy little folks have a knack for finding the tastiest underground minerals in conditions that more expensive machinery probably wouldn\'t survive.','Mine',9); + order=500;Game.TieredUpgrade('Machine learning','You figured you might get better productivity if you actually told your workers to learn how to work the machines. Sometimes, it\'s the little things...','Factory',9); + order=525;Game.TieredUpgrade('Edible money','It\'s really quite simple; you make all currency too delicious not to eat, solving world hunger and inflation in one fell swoop!','Bank',9); + order=550;Game.TieredUpgrade('Sick rap prayers','With their ill beat and radical rhymes, these way-hip religious tunes are sure to get all the youngins who thought they were 2 cool 4 church back on the pews and praying for more! Wicked!','Temple',9); + order=575;Game.TieredUpgrade('Deluxe tailored wands','In this age of science, most skillful wand-makers are now long gone; but thankfully - not all those wanders are lost.','Wizard tower',9); + order=600;Game.TieredUpgrade('Autopilot','Your ships are now fitted with completely robotic crews! It\'s crazy how much money you save when you don\'t have to compensate the families of those lost in space.','Shipment',9); + order=700;Game.TieredUpgrade('The advent of chemistry','You know what? That whole alchemy nonsense was a load of baseless rubbish. Dear god, what were you thinking?','Alchemy lab',9); + order=800;Game.TieredUpgrade('The real world','It turns out that our universe is actually the twisted dimension of another, saner plane of reality. Time to hop on over there and loot the place!','Portal',9); + order=900;Game.TieredUpgrade('Second seconds','That\'s twice as many seconds in the same amount of time! What a deal! Also, what in god\'s name!','Time machine',9); + order=1000;Game.TieredUpgrade('Quantum comb','Quantum entanglement is one of those things that are so annoying to explain that we might honestly be better off without it. This is finally possible thanks to the quantum comb!','Antimatter condenser',9); + order=1100;Game.TieredUpgrade('Crystal mirrors','Designed to filter more light back into your prisms, reaching levels of brightness that reality itself had never planned for.','Prism',9); + order=1200;Game.TieredUpgrade('Bunnypedes','You\'ve taken to breeding rabbits with hundreds of paws, which makes them intrinsically very lucky and thus a very handy (if very disturbing) pet.','Chancemaker',9); + + order=20000; + new Game.Upgrade('Kitten assistants to the regional manager',strKittenDesc+'nothing stresses meowt... except having to seek the approval of my inferiors, sir',900000000000000000000000000000000000,Game.GetIcon('Kitten',10));Game.last.kitten=1;Game.MakeTiered(Game.last,10,18); + + order=5000; + Game.SynergyUpgrade('Charm quarks','They\'re after your lucky quarks!','Chancemaker','Antimatter condenser','synergy2'); + + + order=10020; + Game.NewUpgradeCookie({name:'Pink biscuits',desc:'One of the oldest cookies. Traditionally dipped in champagne to soften it, because the French will use any opportunity to drink.',icon:[21,16],power: 4,price: 999999999999999999999999999}); + Game.NewUpgradeCookie({name:'Whole-grain cookies',desc:'Covered in seeds and other earthy-looking debris. Really going for that "5-second rule" look.',icon:[22,16],power: 4,price: 999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Candy cookies',desc:'These melt in your hands just a little bit.',icon:[23,16],power: 4,price: 9999999999999999999999999999}); + Game.NewUpgradeCookie({name:'Big chip cookies',desc:'You are in awe at the size of these chips. Absolute units.',icon:[24,16],power: 4,price: 9999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'One chip cookies',desc:'You get one.',icon:[25,16],power: 1,price: 99999999999999999999999999999}); + + + new Game.Upgrade('Sugar baking',loc("Each unspent sugar lump (up to %1) gives +%2% CpS.
Note: this means that spending sugar lumps will decrease your CpS until they grow back.
",[100,1])+'To bake with the sugary essence of eons themselves, you must first learn to take your sweet time.',200000000,[21,17]);Game.last.pool='prestige';Game.last.parents=['Stevia Caelestis']; + new Game.Upgrade('Sugar craving',loc("Once an ascension, you may use the \"Sugar frenzy\" switch to triple your CpS for 1 hour, at the cost of 1 sugar lump.")+'Just a little kick to sweeten the deal.',400000000,[22,17]);Game.last.pool='prestige';Game.last.parents=['Sugar baking']; + new Game.Upgrade('Sugar aging process',loc("Each grandma (up to %1) makes sugar lumps ripen %2 sooner.",[600,Game.sayTime(6*Game.fps)])+'Aren\'t they just the sweetest?',600000000,[23,17]);Game.last.pool='prestige';Game.last.parents=['Sugar craving','Diabetica Daemonicus']; + + order=40050; + new Game.Upgrade('Sugar frenzy',loc("Activating this will triple your CpS for 1 hour, at the cost of 1 sugar lump.")+'
'+loc("May only be used once per ascension."),0,[22,17]); + Game.last.priceLumps=1; + Game.last.pool='toggle';Game.last.toggleInto=0; + Game.last.canBuyFunc=function(){return Game.lumps>=1;}; + Game.last.clickFunction=Game.spendLump(1,loc("activate the sugar frenzy"),function() + { + Game.Upgrades['Sugar frenzy'].buy(1); + buff=Game.gainBuff('sugar frenzy',60*60,3); + Game.Notify(loc("Sugar frenzy!"),loc("CpS x%1 for 1 hour!",3),[29,14]); + }); + + order=10020; + Game.NewUpgradeCookie({name:'Sprinkles cookies',desc:'A bit of festive decorating helps hide the fact that this might be one of the blandest cookies you\'ve ever tasted.',icon:[21,14],power: 4,price: 99999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Peanut butter blossoms',desc:'Topped with a scrumptious chocolate squirt, which is something we really wish we didn\'t just write.',icon:[22,14],power: 4,price: 999999999999999999999999999999}); + Game.NewUpgradeCookie({name:'No-bake cookies',desc:'You have no idea how these mysterious oven-less treats came to be or how they hold their shape. You\'re thinking either elephant glue or cold fusion.',icon:[21,15],power: 4,price: 999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Florentines',desc:'These make up for being the fruitcake of cookies by at least having the decency to feature chocolate.',icon:[26,16],power: 4,price: 9999999999999999999999999999999}); + Game.NewUpgradeCookie({name:'Chocolate crinkles',desc:'Non-denominational cookies to celebrate year-round deliciousness, and certainly not Christmas or some other nonsense.',icon:[22,15],power: 4,price: 9999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Maple cookies',desc:'Made with syrup from a land where milk comes in bags, instead of spontaneously pooling at the bottom of your screen depending on your achievements.',icon:[21,13],power: 4,price: 99999999999999999999999999999999}); + + + order=40000; + new Game.Upgrade('Turbo-charged soil',loc("Garden plants grow every second.
Garden seeds are free to plant.
You can switch soils at any time.")+'It\'s got electrolytes!',7,[2,16]);//debug purposes only + Game.last.buyFunction=function(){if (Game.Objects['Farm'].minigameLoaded){Game.Objects['Farm'].minigame.computeStepT();}} + Game.last.pool='debug'; + + order=150; + new Game.Upgrade('Technobsidian mouse',getStrClickingGains(1)+'A highly advanced mouse of a sophisticated design. Only one thing on its mind : to click.',5000000000000000000000000,[11,28]);Game.MakeTiered(Game.last,11,11); + new Game.Upgrade('Plasmarble mouse',getStrClickingGains(1)+'A shifting blur in the corner of your eye, this mouse can trigger a flurry of clicks when grazed by even the slightest breeze.',500000000000000000000000000,[11,30]);Game.MakeTiered(Game.last,12,11); + + order=20000; + new Game.Upgrade('Kitten marketeers',strKittenDesc+'no such thing as a saturated markit, sir',900000000000000000000000000000000000000,Game.GetIcon('Kitten',11));Game.last.kitten=1;Game.MakeTiered(Game.last,11,18); + + order=10030; + Game.NewUpgradeCookie({name:'Festivity loops',desc:'These garish biscuits are a perfect fit for children\'s birthday parties or the funerals of strange, eccentric billionaires.',icon:[25,17],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999*5}); + + order=10020; + Game.NewUpgradeCookie({name:'Persian rice cookies',desc:'Rose water and poppy seeds are the secret ingredients of these small, butter-free cookies.',icon:[28,15],power: 4,price: 99999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Norwegian cookies',desc:'A flat butter cookie with a sliver of candied cherry on top. It is said that these illustrate the bleakness of scandinavian existentialism.',icon:[22,20],power: 4,price: 999999999999999999999999999999999}); + Game.NewUpgradeCookie({name:'Crispy rice cookies',desc:'Fun to make at home! Store-bought cookies are obsolete! Topple the system! There\'s marshmallows in these! Destroy capitalism!',icon:[23,20],power: 4,price: 999999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Ube cookies',desc:'The tint is obtained by the use of purple yams. According to color symbolism, these cookies are either noble, holy, or supervillains.',icon:[24,17],power: 4,price: 9999999999999999999999999999999999}); + Game.NewUpgradeCookie({name:'Butterscotch cookies',desc:'The butterscotch chips are just the right amount of sticky, and make you feel like you\'re eating candy.',icon:[24,20],power: 4,price: 9999999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Speculaas',desc:'These crunchy, almost obnoxiously cinnamony cookies are a source of dutch pride. About the origin of the name, one can only speculate.',icon:[21,20],power: 4,price: 99999999999999999999999999999999999}); + + order=10200; + Game.NewUpgradeCookie({name:'Elderwort biscuits',desc:'-',icon:[22,25],power:2,price:60*2,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(2)+'
'+loc("%1 are %2% more powerful.",[cap(Game.Objects['Grandma'].plural),2])+'
'+loc("Dropped by %1 plants.",loc("Elderwort").toLowerCase())+'They taste incredibly stale, even when baked fresh.'; + Game.NewUpgradeCookie({name:'Bakeberry cookies',desc:'-',icon:[23,25],power:2,price:60,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(2)+'
'+loc("Dropped by %1 plants.",loc("Bakeberry").toLowerCase())+'Really good dipped in hot chocolate.'; + Game.NewUpgradeCookie({name:'Duketater cookies',desc:'-',icon:[24,25],power:10,price:60*3,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(10)+'
'+loc("Dropped by %1 plants.",loc("Duketater").toLowerCase())+'Fragrant and mealy, with a slight yellow aftertaste.'; + Game.NewUpgradeCookie({name:'Green yeast digestives',desc:'-',icon:[25,25],power:0,price:60*3,locked:1});Game.last.baseDesc=loc("Golden cookies give %1% more cookies.",1)+'
'+loc("Golden cookie effects last %1% longer.",1)+'
'+loc("Golden cookies appear %1% more often.",1)+'
'+loc("Random drops are %1% more common.",3)+'
'+loc("Dropped by %1 plants.",loc("Green rot").toLowerCase())+'These are tastier than you\'d expect, but not by much.'; + + order=23000; + new Game.Upgrade('Fern tea',loc("You gain another +%1% of your regular CpS while the game is closed.",3)+' ('+loc("Must own the %1 upgrade.",getUpgradeName("Twin Gates of Transcendence"))+')'+'
'+loc("Dropped by %1 plants.",loc("Drowsyfern").toLowerCase())+'A chemically complex natural beverage, this soothing concoction has been used by mathematicians to solve equations in their sleep.',60,[26,25]); + new Game.Upgrade('Ichor syrup',loc("You gain another +%1% of your regular CpS while the game is closed.",7)+' ('+loc("Must own the %1 upgrade.",getUpgradeName("Twin Gates of Transcendence"))+')'+'
'+loc("Sugar lumps mature %1 sooner.",Game.sayTime(7*60*Game.fps))+'
'+loc("Dropped by %1 plants.",loc("Ichorpuff").toLowerCase())+'Tastes like candy. The smell is another story.',60*2,[27,25]); + + order=10200; + Game.NewUpgradeCookie({name:'Wheat slims',desc:'-',icon:[28,25],power:1,price:30,locked:1});Game.last.baseDesc=getStrCookieProductionMultiplierPlus(1)+'
'+loc("Dropped by %1 plants.",loc("Baker's wheat").toLowerCase())+'The only reason you\'d consider these to be cookies is because you feel slightly sorry for them.'; + + var gardenDrops=['Elderwort biscuits','Bakeberry cookies','Duketater cookies','Green yeast digestives','Fern tea','Ichor syrup','Wheat slims']; + for (var i in gardenDrops)//scale by CpS + { + var it=Game.Upgrades[gardenDrops[i]]; + it.priceFunc=function(cost){return function(){return cost*Game.cookiesPs*60;}}(it.basePrice); + it.baseDesc=it.baseDesc.replace('','
'+loc("Cost scales with CpS.")+''); + it.desc=BeautifyInText(it.baseDesc); + it.lasting=true; + } + + + order=10300; + Game.NewUpgradeCookie({name:'Synthetic chocolate green honey butter biscuit',desc:'Rewarded for owning 350 of everything.
The recipe for this butter biscuit was once the sole heritage of an ancient mountain monastery. Its flavor is so refined that only a slab of lab-made chocolate specifically engineered to be completely tasteless could complement it.
Also it\'s got your face on it.',icon:[24,26],power: 10,price: 999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + Game.NewUpgradeCookie({name:'Royal raspberry chocolate butter biscuit',desc:'Rewarded for owning 400 of everything.
Once reserved for the megalomaniac elite, this unique strain of fruity chocolate has a flavor and texture unlike any other. Whether its exorbitant worth is improved or lessened by the presence of your likeness on it still remains to be seen.',icon:[25,26],power: 10,price: 999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + Game.NewUpgradeCookie({name:'Ultra-concentrated high-energy chocolate butter biscuit',desc:'Rewarded for owning 450 of everything.
Infused with the power of several hydrogen bombs through a process that left most nuclear engineers and shareholders perplexed. Currently at the center of some rather heated United Nations meetings. Going in more detail about this chocolate would violate several state secrets, but we\'ll just add that someone\'s bust seems to be pictured on it. Perhaps yours?',icon:[26,26],power: 10,price: 999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + + + order=200;Game.TieredUpgrade('Timeproof hair dyes','Why do they always have those strange wispy pink dos? What do they know about candy floss that we don\'t?','Grandma',10); + order=300;Game.TieredUpgrade('Barnstars','Ah, yes. These help quite a bit. Somehow.','Farm',10); + order=400;Game.TieredUpgrade('Mine canaries','These aren\'t used for anything freaky! The miners just enjoy having a pet or two down there.','Mine',10); + order=500;Game.TieredUpgrade('Brownie point system','Oh, these are lovely! You can now reward your factory employees for good behavior, such as working overtime or snitching on coworkers. 58 brownie points gets you a little picture of a brownie, and 178 of those pictures gets you an actual brownie piece for you to do with as you please! Infantilizing? Maybe. Oodles of fun? You betcha!','Factory',10); + order=525;Game.TieredUpgrade('Grand supercycles','We let the public think these are complicated financial terms when really we\'re just rewarding the bankers with snazzy bicycles for a job well done. It\'s only natural after you built those fancy gold swimming pools for them, where they can take a dip and catch Kondratiev waves.','Bank',10); + order=550;Game.TieredUpgrade('Psalm-reading','A theologically dubious and possibly blasphemous blend of fortune-telling and scripture studies.','Temple',10); + order=575;Game.TieredUpgrade('Immobile spellcasting','Wizards who master this skill can now cast spells without having to hop and skip and gesticulate embarrassingly, which is much sneakier and honestly quite a relief.','Wizard tower',10); + order=600;Game.TieredUpgrade('Restaurants at the end of the universe','Since the universe is spatially infinite, and therefore can be construed to have infinite ends, you\'ve opened an infinite chain of restaurants where your space truckers can rest and partake in some home-brand cookie-based meals.','Shipment',10); + order=700;Game.TieredUpgrade('On second thought','Disregard that last upgrade, alchemy is where it\'s at! Your eggheads just found a way to transmute children\'s nightmares into rare metals!','Alchemy lab',10); + order=800;Game.TieredUpgrade('Dimensional garbage gulper','So we\'ve been looking for a place to dispose of all the refuse that\'s been accumulating since we started baking - burnt cookies, failed experiments, unruly workers - and well, we figured rather than sell it to poor countries like we\'ve been doing, we could just dump it in some alternate trash dimension where it\'s not gonna bother anybody! Probably!','Portal',10); + order=900;Game.TieredUpgrade('Additional clock hands','It seemed like a silly idea at first, but it turns out these have the strange ability to twist time in interesting new ways.','Time machine',10); + order=1000;Game.TieredUpgrade('Baking Nobel prize','What better way to sponsor scientific growth than to motivate those smarmy nerds with a meaningless award! What\'s more, each prize comes with a fine print lifelong exclusive contract to come work for you (or else)!','Antimatter condenser',10); + order=1100;Game.TieredUpgrade('Reverse theory of light','A whole new world of physics opens up when you decide that antiphotons are real and posit that light is merely a void in shadow.','Prism',10); + order=1200;Game.TieredUpgrade('Revised probabilistics','Either something happens or it doesn\'t. That\'s a 50% chance! This suddenly makes a lot of unlikely things very possible.','Chancemaker',10); + + order=20000; + new Game.Upgrade('Kitten analysts',strKittenDesc+'based on purrent return-on-investment meowdels we should be able to affurd to pay our empawyees somewhere around next century, sir',900000000000000000000000000000000000000000,Game.GetIcon('Kitten',12));Game.last.kitten=1;Game.MakeTiered(Game.last,12,18); + + + new Game.Upgrade('Eye of the wrinkler',loc("Mouse over a wrinkler to see how many cookies are in its stomach.")+'Just a wrinkler and its will to survive.
Hangin\' tough, stayin\' hungry.
',99999999,[27,26]);Game.last.pool='prestige';Game.last.parents=['Wrinkly cookies']; + + new Game.Upgrade('Inspired checklist',loc("Unlocks the Buy all feature, which lets you instantly purchase every upgrade in your store (starting from the cheapest one).
Also unlocks the Vault, a store section where you can place upgrades you do not wish to auto-buy.")+'Snazzy grandma accessories? Check. Transdimensional abominations? Check. A bunch of eggs for some reason? Check. Machine that goes "ping"? Check and check.',900000,[28,26]);Game.last.pool='prestige';Game.last.parents=['Persistent memory','Permanent upgrade slot II']; + + order=10300; + Game.NewUpgradeCookie({name:'Pure pitch-black chocolate butter biscuit',desc:'Rewarded for owning 500 of everything.
This chocolate is so pure and so flawless that it has no color of its own, instead taking on the appearance of whatever is around it. You\'re a bit surprised to notice that this one isn\'t stamped with your effigy, as its surface is perfectly smooth (to the picometer) - until you realize it\'s quite literally reflecting your own face like a mirror.',icon:[24,27],power: 10,price: 999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + order=10020; + Game.NewUpgradeCookie({name:'Chocolate oatmeal cookies',desc:'These bad boys compensate for lack of a cohesive form and a lumpy, unsightly appearance by being just simply delicious. Something we should all aspire to.',icon:[23,28],power: 4,price: 99999999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Molasses cookies',desc:'Sticky, crackly, and dusted in fine sugar.
Some lunatics have been known to eat these with potatoes.',icon:[24,28],power: 4,price: 999999999999999999999999999999999999}); + Game.NewUpgradeCookie({name:'Biscotti',desc:'Almonds and pistachios make these very robust cookies slightly more interesting to eat than to bludgeon people with.',icon:[22,28],power: 4,price: 999999999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Waffle cookies',desc:'Whether these are cookies with shockingly waffle-like features or simply regular cookie-sized waffles is a debate we\'re not getting into here.',icon:[21,28],power: 4,price: 9999999999999999999999999999999999999}); + + + order=10000; + //early cookies that unlock at the same time as coconut cookies; meant to boost early game a little bit + Game.NewUpgradeCookie({name:'Almond cookies',desc:'Sometimes you feel like one of these. Sometimes you don\'t.',icon:[21,27],power: 2, price: 99999999}); + Game.NewUpgradeCookie({name:'Hazelnut cookies',desc:'Tastes like a morning stroll through a fragrant forest, minus the clouds of gnats.',icon:[22,27],power: 2, price: 99999999}); + Game.NewUpgradeCookie({name:'Walnut cookies',desc:'Some experts have pointed to the walnut\'s eerie resemblance to the human brain as a sign of its sentience - a theory most walnuts vehemently object to.',icon:[23,27],power: 2, price: 99999999}); + + + new Game.Upgrade('Label printer',loc("Mouse over an upgrade to see its tier.
Note: only some upgrades have tiers. Tiers are purely cosmetic and have no effect on gameplay.")+'Also comes in real handy when you want to tell catsup apart from ketchup.',5000000,[28,29]);Game.last.pool='prestige';Game.last.parents=['Genius accounting']; + + + + + order=200;Game.TieredUpgrade('Good manners','Apparently these ladies are much more amiable if you take the time to learn their strange, ancient customs, which seem to involve saying "please" and "thank you" and staring at the sun with bulging eyes while muttering eldritch curses under your breath.','Grandma',11); + order=300;Game.TieredUpgrade('Lindworms','You have to import these from far up north, but they really help aerate the soil!','Farm',11); + order=400;Game.TieredUpgrade('Bore again','After extracting so much sediment for so long, you\'ve formed some veritable mountains of your own from the accumulated piles of rock and dirt. Time to dig through those and see if you find anything fun!','Mine',11); + order=500;Game.TieredUpgrade('"Volunteer" interns','If you\'re bad at something, always do it for free.','Factory',11); + order=525;Game.TieredUpgrade('Rules of acquisition','Rule 387 : a cookie baked is a cookie kept.','Bank',11); + order=550;Game.TieredUpgrade('War of the gods','An interesting game; the only winning move is not to pray.','Temple',11); + order=575;Game.TieredUpgrade('Electricity','Ancient magicks and forbidden hexes shroud this arcane knowledge, whose unfathomable power can mysteriously turn darkness into light and shock an elephant to death.','Wizard tower',11); + order=600;Game.TieredUpgrade('Universal alphabet','You\'ve managed to chart a language that can be understood by any sentient species in the galaxy; its exciting vocabulary contains over 56 trillion words that sound and look like sparkly burps, forming intricate sentences that usually translate to something like "give us your cookies, or else".','Shipment',11); + order=700;Game.TieredUpgrade('Public betterment','Why do we keep trying to change useless matter into cookies, or cookies into even better cookies? Clearly, the way of the future is to change the people who eat the cookies into people with a greater understanding, appreciation and respect for the cookies they\'re eating. Into the vat you go!','Alchemy lab',11); + order=800;Game.TieredUpgrade('Embedded microportals','We\'ve found out that if we bake the portals into the cookies themselves, we can transport people\'s taste buds straight into the taste dimension! Good thing your army of lawyers got rid of the FDA a while ago!','Portal',11); + order=900;Game.TieredUpgrade('Nostalgia','Your time machine technicians insist that this is some advanced new time travel tech, and not just an existing emotion universal to mankind. Either way, you have to admit that selling people the same old cookies just because it reminds them of the good old times is an interesting prospect.','Time machine',11); + order=1000;Game.TieredUpgrade('The definite molecule','Your scientists have found a way to pack a cookie into one single continuous molecule, opening exciting new prospects in both storage and flavor despite the fact that these take up to a whole year to digest.','Antimatter condenser',11); + order=1100;Game.TieredUpgrade('Light capture measures','As the universe gets ever so slightly dimmer due to you converting more and more of its light into cookies, you\'ve taken to finding new and unexplored sources of light for your prisms; for instance, the warm glow emitted by a pregnant woman, or the twinkle in the eye of a hopeful child.','Prism',11); + order=1200;Game.TieredUpgrade('0-sided dice','The advent of the 0-sided dice has had unexpected and tumultuous effects on the gambling community, and saw experts around the world calling you both a genius and an imbecile.','Chancemaker',11); + + + new Game.Upgrade('Heralds',loc("You now benefit from the boost provided by heralds.
Each herald gives you +1% CpS.
Look on the purple flag at the top to see how many heralds are active at any given time.")+(App?'It\'s getting steamy.':'Be excellent to each other.
And Patreon, dudes!
'),100,[21,29]);Game.last.pool='prestige'; + + order=255; + Game.GrandmaSynergy('Metagrandmas','A fractal grandma to make more grandmas to make more cookies.','Fractal engine'); + + order=1300; + Game.TieredUpgrade('Metabakeries','They practically bake themselves!','Fractal engine',1); + Game.TieredUpgrade('Mandelbrown sugar','A substance that displays useful properties such as fractal sweetness and instant contact lethality.','Fractal engine',2); + Game.TieredUpgrade('Fractoids','Here\'s a frun fract : all in all, these were a terrible idea.','Fractal engine',3); + Game.TieredUpgrade('Nested universe theory','Asserts that each subatomic particle is host to a whole new universe, and therefore, another limitless quantity of cookies.
This somehow stacks with the theory of nanocosmics, because physics.
','Fractal engine',4); + Game.TieredUpgrade('Menger sponge cake','Frighteningly absorbent thanks to its virtually infinite surface area. Keep it isolated in a dry chamber, never handle it with an open wound, and do not ever let it touch a body of water.','Fractal engine',5); + Game.TieredUpgrade('One particularly good-humored cow','This unassuming bovine was excruciatingly expensive and it may seem at first like you were ripped off. On closer inspection however, you notice that its earrings (it\'s wearing earrings) are actually fully functional copies of itself, each of which also wearing their own cow earrings, and so on, infinitely. It appears your dairy concerns will be taken care of for a while, although you\'ll have to put up with the cow\'s annoying snickering.','Fractal engine',6); + Game.TieredUpgrade('Chocolate ouroboros','Forever eating its own tail and digesting itself, in a metabolically dubious tale of delicious tragedy.','Fractal engine',7); + Game.TieredUpgrade('Nested','Clever self-reference or shameful cross-promotion? This upgrade apparently has the gall to advertise a link to orteil.dashnet.org/nested, in a tooltip you can\'t even click.','Fractal engine',8); + Game.TieredUpgrade('Space-filling fibers','This special ingredient has the incredible ability to fill the local space perfectly, effectively eradicating hunger in those who consume it!
Knowing that no hunger means no need for cookies, your marketers urge you to repurpose this product into next-level packing peanuts.
','Fractal engine',9); + Game.TieredUpgrade('Endless book of prose','','Fractal engine',10); + if (EN) + { + Game.last.descFunc=function(){ + var str='"There once was a baker named '+Game.bakeryName+'. One day, there was a knock at the door; '+Game.bakeryName+' opened it and was suddenly face-to-face with a strange and menacing old grandma. The grandma opened her mouth and, in a strange little voice, started reciting this strange little tale : '; + var n=35; + var i=Math.floor(Game.T*0.1); + return this.desc+''+(str.substr(i%str.length,n)+(i%str.length>(str.length-n)?str.substr(0,i%str.length-(str.length-n)):''))+''; + }; + } + else Game.last.desc='-'; + Game.TieredUpgrade('The set of all sets','The answer, of course, is a definite maybe.','Fractal engine',11); + + order=5000; + Game.SynergyUpgrade('Recursive mirrors','Do you have any idea what happens when you point two of these at each other? Apparently, the universe doesn\'t either.','Fractal engine','Prism','synergy1'); + //Game.SynergyUpgrade('Compounded odds','When probabilities start cascading, "never in a billion lifetimes" starts looking terribly like "probably before Monday comes around".','Fractal engine','Chancemaker','synergy1'); + Game.SynergyUpgrade('Mice clicking mice','','Fractal engine','Cursor','synergy2'); + if (EN) + { + Game.last.descFunc=function(){ + Math.seedrandom(Game.seed+'-blasphemouse'); + if (Math.random()<0.3) {Math.seedrandom();return this.desc+'Absolutely blasphemouse!';} + else {Math.seedrandom();return this.desc+'Absolutely blasphemous!';} + }; + } + else Game.last.desc='-'; + + + order=10020; + Game.NewUpgradeCookie({name:'Custard creams',desc:'British lore pits these in a merciless war against bourbon biscuits.
The filling evokes vanilla without quite approaching it.
They\'re tastier on the inside!',icon:[23,29],power: 4,price: 9999999999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Bourbon biscuits',desc:'Two chocolate biscuits joined together with even more chocolate.
The sworn rivals of custard creams, as legend has it.',icon:[24,29],power: 4,price: 99999999999999999999999999999999999999}); + + + new Game.Upgrade('Keepsakes',loc("Seasonal random drops have a 1/5 chance to carry over through ascensions.")+'Cherish the memories.',1111111111,[22,29]);Game.last.pool='prestige';Game.last.parents=['Starsnow','Starlove','Starterror','Startrade','Starspawn']; + + order=10020; + Game.NewUpgradeCookie({name:'Mini-cookies',desc:'Have you ever noticed how the smaller something is, the easier it is to binge on it?',icon:[29,30],power: 5,price: 99999999999999999999999999999999999999*5}); + + new Game.Upgrade('Sugar crystal cookies',(EN?'Cookie production multiplier +5% permanently, and +1% for every building type level 10 or higher.':loc("Cookie production multiplier +%1% permanently.",5)+'
'+loc("Cookie production multiplier +%1% for every building type level %2 or higher.",[1,10]))+'Infused with cosmic sweetness. It gives off a faint shimmery sound when you hold it up to your ear.',1000000000,[21,30]);Game.last.pool='prestige';Game.last.parents=['Sugar baking'];Game.last.power=function(){ + var n=5; + for (var i in Game.Objects) + { + if (Game.Objects[i].level>=10) n++; + } + return n; + };Game.last.pseudoCookie=true; + Game.last.descFunc=function(){ + var n=5; + for (var i in Game.Objects) + { + if (Game.Objects[i].level>=10) n++; + } + return '
'+loc("Current:")+' +'+Beautify(n)+'%
'+this.ddesc; + }; + new Game.Upgrade('Box of maybe cookies',loc("Contains an assortment of...something.")+'These may or may not be considered cookies.',333000000000,[25,29]);Game.last.pool='prestige';Game.last.parents=['Sugar crystal cookies']; + new Game.Upgrade('Box of not cookies',loc("Contains an assortment of...something.")+'These are strictly, definitely not cookies.',333000000000,[26,29]);Game.last.pool='prestige';Game.last.parents=['Sugar crystal cookies']; + new Game.Upgrade('Box of pastries',loc("Contains an assortment of delicious pastries.")+'These are a damn slippery slope is what they are!',333000000000,[27,29]);Game.last.pool='prestige';Game.last.parents=['Sugar crystal cookies']; + + order=10040; + Game.NewUpgradeCookie({name:'Profiteroles',desc:'Also known as cream puffs, these pastries are light, fluffy, filled with whipped cream and fun to throw at people when snowballs are running scarce.',icon:[29,29],require:'Box of pastries', power:4,price: Math.pow(10,31)}); + Game.NewUpgradeCookie({name:'Jelly donut',desc:'Guaranteed to contain at least 0.3% jelly filling, or your money back.
You can still see the jelly stab wound!',icon:[27,28],require:'Box of pastries', power:4,price: Math.pow(10,33)}); + Game.NewUpgradeCookie({name:'Glazed donut',desc:'Absolutely gooey with sugar. The hole is the tastiest part!',icon:[28,28],require:'Box of pastries', power:4,price: Math.pow(10,35)}); + Game.NewUpgradeCookie({name:'Chocolate cake',desc:'The cake is a Portal reference!',icon:[25,27],require:'Box of pastries', power:4,price: Math.pow(10,37)}); + Game.NewUpgradeCookie({name:'Strawberry cake',desc:'It\'s not easy to come up with flavor text for something as generic as this, but some would say it\'s a piece of cake.',icon:[26,27],require:'Box of pastries', power:4,price: Math.pow(10,39)}); + Game.NewUpgradeCookie({name:'Apple pie',desc:'It is said that some grandmas go rogue and bake these instead.',icon:[25,28],require:'Box of pastries', power:4,price: Math.pow(10,41)}); + Game.NewUpgradeCookie({name:'Lemon meringue pie',desc:'Meringue is a finicky substance made of sugar and egg whites that requires specific atmospheric conditions to be baked at all. The lemon, as far as we can tell, isn\'t nearly as picky.',icon:[26,28],require:'Box of pastries', power:4,price: Math.pow(10,43)}); + Game.NewUpgradeCookie({name:'Butter croissant',desc:'Look around.
A rude man in a striped shirt bikes past you. He smells of cigarettes and café-au-lait. Somewhere, a mime uses his moustache to make fun of the British. 300 pigeons fly overhead.
Relax. You\'re experiencing croissant.',icon:[29,28],require:'Box of pastries', power:4,price: Math.pow(10,45)}); + + order=10050; + Game.NewUpgradeCookie({name:'Cookie dough',desc:'Bursting with infinite potential, but can also be eaten as is. Arguably worth the salmonella.',icon:[25,30],require:'Box of maybe cookies', power:4,price: Math.pow(10,35)}); + Game.NewUpgradeCookie({name:'Burnt cookie',desc:'This cookie flew too close to the sun and is now a shadow of its former self. If only you remembered to set a timer, you wouldn\'t have this tragedy on your hands...',icon:[23,30],require:'Box of maybe cookies', power:4,price: Math.pow(10,37)}); + Game.NewUpgradeCookie({name:'A chocolate chip cookie but with the chips picked off for some reason',desc:'This has to be the saddest thing you\'ve ever seen.',icon:[24,30],require:'Box of maybe cookies', power:3,price: Math.pow(10,39)}); + Game.NewUpgradeCookie({name:'Flavor text cookie',desc:'What you\'re currently reading is what gives this cookie its inimitable flavor.',icon:[22,30],require:'Box of maybe cookies', power:4,price: Math.pow(10,41)}); + Game.NewUpgradeCookie({name:'High-definition cookie',desc:'Uncomfortably detailed, like those weird stories your aunt keeps telling at parties.',icon:[28,10],require:'Box of maybe cookies', power:5,price: Math.pow(10,43)}); + + order=10060; + Game.NewUpgradeCookie({name:'Toast',desc:'A crisp slice of bread, begging for some butter and jam.
Why do people keep proposing these at parties?',icon:[27,10],require:'Box of not cookies', power:4,price: Math.pow(10,34)}); + Game.NewUpgradeCookie({name:'Peanut butter & jelly',desc:'It\'s time.',icon:[29,9],require:'Box of not cookies', power:4,price: Math.pow(10,36)}); + Game.NewUpgradeCookie({name:'Wookies',desc:'These aren\'t the cookies you\'re looking for.',icon:[26,30],require:'Box of not cookies', power:4,price: Math.pow(10,38)}); + Game.NewUpgradeCookie({name:'Cheeseburger',desc:'Absolutely no relation to cookies whatsoever - Orteil just wanted an excuse to draw a cheeseburger.',icon:[28,30],require:'Box of not cookies', power:4,price: Math.pow(10,40)}); + Game.NewUpgradeCookie({name:'One lone chocolate chip',desc:'The start of something beautiful.',icon:[27,30],require:'Box of not cookies', power:1,price: Math.pow(10,42)}); + + + new Game.Upgrade('Genius accounting',loc("Unlocks extra price information.
Each displayed cost now specifies how long it'll take you to afford it, and how much of your bank it represents.")+'There\'s no accounting for taste, and yet here we are.',2000000,[11,10]);Game.last.pool='prestige';Game.last.parents=['Inspired checklist']; + + + new Game.Upgrade('Shimmering veil',loc("Unlocks the shimmering veil, a switch that passively boosts your CpS by %1%.
You start with the veil turned on; however, it is very fragile, and clicking the big cookie or any golden cookie or reindeer will turn it off, requiring %2 of CpS to turn back on.",[50,Game.sayTime(24*60*60*Game.fps,2)])+'Hands off!',999999999,[9,10]);Game.last.pool='prestige';Game.last.parents=['Distilled essence of redoubled luck']; + + order=40005; + var func=function(){ + var boost=Game.getVeilBoost(); + var resist=Game.getVeilDefense(); + return (this.name=='Shimmering veil [on]'?'
'+loc("Active.")+'
':'')+loc("Boosts your cookie production by %1% when active.
The veil is very fragile and will break if you click the big cookie or any golden cookies or reindeer.

Once broken, turning the veil back on costs %2 of unbuffed CpS.",[Beautify(boost*100),Game.sayTime(24*60*60*Game.fps,2)])+(resist>0?('

'+loc("Has a %1% chance to not break.",Beautify(resist*100))):''); + }; + new Game.Upgrade('Shimmering veil [off]','',1000000,[9,10]); + Game.last.pool='toggle';Game.last.toggleInto='Shimmering veil [on]'; + Game.last.priceFunc=function(){return Game.unbuffedCps*60*60*24;} + Game.last.descFunc=func; + new Game.Upgrade('Shimmering veil [on]','',0,[9,10]); + Game.last.pool='toggle';Game.last.toggleInto='Shimmering veil [off]'; + Game.last.descFunc=func; + + Game.loseShimmeringVeil=function(context) + { + if (!Game.Has('Shimmering veil')) return false; + if (!Game.Has('Shimmering veil [off]') && Game.Has('Shimmering veil [on]')) return false; + if (Game.Has('Reinforced membrane')) + { + if (context=='shimmer') Math.seedrandom(Game.seed+'/'+(Game.goldenClicks+Game.reindeerClicked)); + else if (context=='click') Math.seedrandom(Game.seed+'/'+Game.cookieClicks); + if (Math.random()If you\'re considering eating this as a fun snack, you probably have other things to worry about than this game, like getting scurvy or your crew fomenting mutiny.',icon:[28,31],power: 5,price: getCookiePrice(8)}); + Game.NewUpgradeCookie({name:'Cornflake cookies',desc:'They\'re grrrrrroovy! Careful not to let it sit in your milk too long, lest you accidentally end up with a bowl of cereal and get confused.',icon:[29,31],power: 5,price: getCookiePrice(9)}); + Game.NewUpgradeCookie({name:'Tofu cookies',desc:'There\'s really two ways to go with tofu cooking; either it asserts itself in plain sight or it camouflages itself in the other ingredients. This happens to be the latter, and as such, you can\'t really tell the difference between this and a regular cookie, save for that one pixel on the left.',icon:[30,31],power: 5,price: getCookiePrice(10)}); + Game.NewUpgradeCookie({name:'Gluten-free cookies',desc:'Made with browned butter and milk to closely match the archetypal chocolate chip cookie.
For celiacs, a chance to indulge in a delicious risk-free pastry. For others, a strangely threatening confection whose empty eyes will never know heaven nor hell.',icon:[30,30],power: 5,price: getCookiePrice(10)}); + Game.NewUpgradeCookie({name:'Russian bread cookies',desc:'Also known as alphabet cookies; while most bakers follow the recipe to the letter, it is said that some substitute the flour for spelt. But don\'t take my word for it.',icon:[30,29],power: 5,price: getCookiePrice(11)}); + Game.NewUpgradeCookie({name:'Lebkuchen',desc:'Diverse cookies from Germany, fragrant with honey and spices, often baked around Christmas.
Once worn by warriors of old for protection in battle.
+5 STR, +20% magic resistance.',icon:[30,28],power: 5,price: getCookiePrice(12)}); + Game.NewUpgradeCookie({name:'Aachener Printen',desc:'The honey once used to sweeten these gingerbread-like treats has since been swapped out for beet sugar, providing another sad example of regressive evolution.',icon:[30,27],power: 5,price: getCookiePrice(13)}); + Game.NewUpgradeCookie({name:'Canistrelli',desc:'A dry biscuit flavored with anise and wine, tough like the people of Corsica where it comes from.',icon:[30,26],power: 5,price: getCookiePrice(14)}); + Game.NewUpgradeCookie({name:'Nice biscuits',desc:'Made with coconut and perfect with tea. Traces its origins to a French city so nice they named it that.',icon:[30,25],power: 5,price: getCookiePrice(15)}); + Game.NewUpgradeCookie({name:'French pure butter cookies',desc:'You can\'t tell what\'s stronger coming off these - the smell of butter or condescension.',icon:[31,25],power: 5,price: getCookiePrice(16)}); + Game.NewUpgradeCookie({name:'Petit beurre',desc:'An unassuming biscuit whose name simply means "little butter". Famed and feared for its four ears and forty-eight teeth.
When it hears ya, it\'ll get ya...',icon:[31,26],power: 5,price: getCookiePrice(16)}); + Game.NewUpgradeCookie({name:'Nanaimo bars',desc:'A delicious no-bake pastry hailing from Canada. Probably beats eating straight-up snow with maple syrup poured on it, but what do I know.',icon:[31,27],power: 5,price: getCookiePrice(17)}); + Game.NewUpgradeCookie({name:'Berger cookies',desc:'Messily slathered with chocolate fudge, but one of the most popular bergers of Baltimore, along with the triple fried egg berger and the blue crab cheeseberger.',icon:[31,28],power: 5,price: getCookiePrice(18)}); + Game.NewUpgradeCookie({name:'Chinsuko',desc:'A little piece of Okinawa in cookie form. Part of a Japanese custom of selling sweets as souvenirs. But hey, pressed pennies are cool too.',icon:[31,29],power: 5,price: getCookiePrice(19)}); + Game.NewUpgradeCookie({name:'Panda koala biscuits',desc:'Assorted jungle animals with equally assorted fillings.
Comes in chocolate, strawberry, vanilla and green tea.
Eat them all before they go extinct!',icon:[31,13],power: 5,price: getCookiePrice(19)}); + Game.NewUpgradeCookie({name:'Putri salju',desc:'A beloved Indonesian pastry; its name means "snow princess", for the powdered sugar it\'s coated with. Had we added these to Cookie Clicker some years ago, this is where we\'d make a reference to that one Disney movie, but it\'s probably time to let it go.',icon:[31,30],power: 5,price: getCookiePrice(20)}); + Game.NewUpgradeCookie({name:'Milk cookies',desc:'Best eaten with a tall glass of chocolate.',icon:[31,31],power: 5,price: getCookiePrice(21)}); + + order=9999; + Game.NewUpgradeCookie({name:'Cookie crumbs',desc:'There used to be a cookie here. Now there isn\'t.
Good heavens, what did you DO?!',icon:[30,13],power:1,require:'Legacy',price:100}); + Game.NewUpgradeCookie({name:'Chocolate chip cookie',desc:'This is the cookie you\'ve been clicking this whole time. It looks a bit dented and nibbled on, but it\'s otherwise good as new.',icon:[10,0],power:10,require:'Legacy',price:1000000000000}); + + + new Game.Upgrade('Cosmic beginner\'s luck',loc("Prior to purchasing the %1 upgrade in a run, random drops are %2 times more common.",[getUpgradeName("Heavenly chip secret"),5])+'Oh! A penny!
Oh! A priceless heirloom!
Oh! Another penny!
',999999999*15,[8,10]);Game.last.pool='prestige';Game.last.parents=['Shimmering veil']; + Game.getVeilDefense=function() + { + var n=0; + if (Game.Has('Reinforced membrane')) n+=0.1; + if (Game.Has('Delicate touch')) n+=0.1; + if (Game.Has('Steadfast murmur')) n+=0.1; + if (Game.Has('Glittering edge')) n+=0.1; + return n; + } + Game.getVeilBoost=function() + { + var n=0.5; + if (Game.Has('Reinforced membrane')) n+=0.1; + if (Game.Has('Delicate touch')) n+=0.05; + if (Game.Has('Steadfast murmur')) n+=0.05; + if (Game.Has('Glittering edge')) n+=0.05; + return n; + } + new Game.Upgrade('Reinforced membrane',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,10])+'A consistency between jellyfish and cling wrap.',999999999*15,[7,10]);Game.last.pool='prestige';Game.last.parents=['Shimmering veil']; + + + order=255; + Game.GrandmaSynergy('Binary grandmas','A digital grandma to transfer more cookies.
(See also : boolean grandmas, string grandmas, and not-a-number grandmas, also known as "NaNs".)','Javascript console'); + + order=1400; + Game.TieredUpgrade('The JavaScript console for dummies','This should get you started. The first line reads: "To open the javascript console, press-"
...the rest of the book is soaked in chocolate milk. If only there was a way to look up this sort of information...
','Javascript console',1); + Game.TieredUpgrade('64bit arrays','A long-form variable type to pack your cookies much more efficiently.','Javascript console',2); + Game.TieredUpgrade('Stack overflow','This is really bad! You probably forgot to close a loop somewhere and now your programs are going crazy! The rest of your engineers seem really excited about it somehow. How could a software mishap like a stack overflow possibly ever help anyone?','Javascript console',3); + Game.TieredUpgrade('Enterprise compiler','This bespoke javascript compiler took your team years of development and billions in research, but it should let you execute (certain) functions (up to) 2% faster (in optimal circumstances).','Javascript console',4); + Game.TieredUpgrade('Syntactic sugar','Tastier code for tastier cookies.','Javascript console',5); + Game.TieredUpgrade('A nice cup of coffee','All this nerd stuff has you exhausted. You make yourself a nice cup of coffee, brewed with roasted beans from some far-away island. You may have been working a bit too hard though - the cup of coffee starts talking to you, insisting that it is NOT javascript.','Javascript console',6); + Game.TieredUpgrade('Just-in-time baking','A new method of preparing cookies; they bake themselves right in front of the customers before eating, leaving your kitchens mess-free.','Javascript console',7); + Game.TieredUpgrade('cookies++','Your very own cookie-themed programming language, elegantly named after its most interesting ability - increasing the "cookies" variable by 1.','Javascript console',8); + Game.TieredUpgrade('Software updates','This is grand news - someone\'s finally figured out the Wifi password, and your newfound internet connection seems to have triggered a whole lot of software updates! Your browsers, drivers and plugins all received a fresh coat of paint, and your javascript version has been updated to the latest ECMAScript specification. It\'s really too bad thousands had to die due to some deprecated function in your neurotoxin ventilation code, but I guess that\'s progress for you.','Javascript console',9); + Game.TieredUpgrade('Game.Loop','You\'re not quite sure what to make of this. What does it mean? What does it do? Who would leave something like that just laying around here? Try asking again in 1/30th of a second.','Javascript console',10); + Game.TieredUpgrade('eval()','It is said that this simple function holds the key to the universe, and that whosoever masters it may shape reality to their will.
Good thing you have no idea how it works. Makes for a neat plaque on your wall, though.
','Javascript console',11); + + order=5000; + Game.SynergyUpgrade('Script grannies','Armies of energy drink-fueled grandmas ready to hack into the cyberspace for renegade e-cookies.','Javascript console','Grandma','synergy1'); + Game.SynergyUpgrade('Tombola computing','','Javascript console','Chancemaker','synergy2'); + if (EN) + { + Game.last.descFunc=function(){ + Math.seedrandom(Game.seed+'-tombolacomputing'); + var str='(Your ticket reads '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+' '+Math.floor(Math.random()*100)+', entitling you to '+choose([Math.floor(Math.random()*5+2)+' lines of javascript','one free use of Math.random()','one qubit, whatever that is','one half-eaten cookie','a brand new vacuum cleaner','most of one room-temperature cup of orange soda','one really good sandwich','one handful of pocket lint','someone\'s mostly clean hairpiece','a trip to a fancy restaurant','the knowledge of those numbers','a furtive glance at the news ticker','another ticket, half-price','all-you-can-eat moldy bread','one lifetime supply of oxygen','the color '+choose['red','orange','yellow','green','blue','purple','black','white','gray','brown','pink','teal'],'increased intellect for a limited time','an ancient runesword','the throne of a far-away country','the position of Mafia capo. Good luck','one free time-travel week-end','something beautiful','the deed to some oil well','one hamburger made out of the animal, plant, or person of your choice','the last surviving '+choose['dodo bird','thylacine','unicorn','dinosaur','neanderthal'],'a deep feeling of accomplishment','a fleeting tinge of entertainment','a vague sense of unease','deep existential dread','one extra week added to your lifespan','breathe manually','blink right here and now','one meeting with any famous person, living or dead, in your next dream','one very nice dream','a wacky sound effect','45 seconds of moral flexibility','hundreds and thousands, also known as "sprinkles"','one circle, triangle, square or other simple geometric shape, of average dimensions','just this extra bit of randomness','the extra push you needed to turn your life around','a good fright','one secret superpower','a better luck next time','an irrational phobia of tombola tickets','one whole spider','an increased sense of self-worth and determination','inner peace','one double-XP week-end in the MMORPG of your choice','a little piece of the universe, represented by the trillions of atoms that make up this very ticket','food poisoning','the Moon! Well, conceptually','a new car, baby','a new catchphrase','an intrusive thought of your choice','- ...aw man, it just cuts off there','the director spot for the next big hit movie','really good-looking calves','one genuine pirate golden doubloon','"treasure and riches", or something','one boat, sunken','baby shoes, never worn','direct lineage to some King or Queen','innate knowledge of a dead language you\'ll never encounter','the melody of a song you don\'t know the words to','white noise','mild physical impairment','a new pair of lips','things, and such','one popular expression bearing your name','one typo','one get-out-of-jail-free card','the rest of your life... for now','one polite huff','a condescending stare','one cursed monkey paw','true love, probably','an interesting factoid about the animal, country, TV show or celebrity of your choice','a pop culture reference','minutes of fun','the etymology of the word "tombola" - it\'s Italian for "a tumble"','nothing. You lost, sorry'])+'.)'; + Math.seedrandom(); + return this.desc+'Like quantum computing, but more fun.
'+str+'
'; + }; + } + else Game.last.desc='-'; + + order=10020; + Game.NewUpgradeCookie({name:'Kruidnoten',desc:'A festive dutch favorite; tiny cinnamony bites sometimes coated in chocolate. The name translates roughly to "kruidnoten".',icon:[30,3],power: 5,price: getCookiePrice(22)}); + Game.NewUpgradeCookie({name:'Marie biscuits',desc:'Pleasantly round, smoothly buttery, subtly vanilla-flavored, ornately embossed, each ridge represents a person Marie killed in prison.',icon:[30,4],power: 5,price: getCookiePrice(23)}); + Game.NewUpgradeCookie({name:'Meringue cookies',desc:'Probably the most exciting thing you can make out of egg whites. Also called forgotten cookies, due to the recipe being once lost in a sealed mystical vault for 10,000 years.',icon:[31,4],power: 5,price: getCookiePrice(24)}); + + order=10060; + Game.NewUpgradeCookie({name:'Pizza',desc:'What is a pizza if not a large, chewy cookie, frosted with a rather exuberant tomato & cheese icing? Not a cookie, that\'s what.',icon:[31,9],require:'Box of not cookies', power:5,price: Math.pow(10,44)}); + + order=10050; + Game.NewUpgradeCookie({name:'Crackers',desc:'These are the non-flavored kind with no salt added. Really just a judgment-free wheat square begging to have bits of ham and spreadable cheese piled onto it, its main contribution being "crunchy".',icon:[30,9],require:'Box of maybe cookies', power:4,price: Math.pow(10,45)}); + + order=10030; + Game.NewUpgradeCookie({name:'Havabreaks',desc:'You can snap the sections neatly or just bite into the whole thing like some kind of lunatic. Some oversea countries manufacture these in hundreds of unique flavors, such as green tea, lobster bisque, and dark chocolate.',icon:[31,3],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999*5}); + + order=20000; + new Game.Upgrade('Kitten executives',strKittenDesc+'ready to execute whatever and whoever you\'d like, sir',900000000000000000000000000000000000000000000,Game.GetIcon('Kitten',13));Game.last.kitten=1;Game.MakeTiered(Game.last,13,18); + + + order=10020; + Game.NewUpgradeCookie({name:'Chai tea cookies',desc:'Not exactly Captain Picard\'s favorite, but I mean, these will do in a pinch.',icon:[23,32],power: 5,price: getCookiePrice(4)+5});Game.last.order=10020.5685; + + Game.NewUpgradeCookie({name:'Yogurt cookies',desc:'Augmented by the wonders of dairy, these cookies are light and fluffy and just one more thing for the lactose-intolerant to avoid.
Truly for the cultured among us.',icon:[24,32],power: 5,price: getCookiePrice(25)}); + Game.NewUpgradeCookie({name:'Thumbprint cookies',desc:'Filled with jam and sometimes served in little paper cups. No longer admissible as biometric evidence in court. We\'re not having a repeat of that whole mess.',icon:[25,32],power: 5,price: getCookiePrice(26)}); + Game.NewUpgradeCookie({name:'Pizzelle',desc:'Thin, crisp waffle cookies baked in a bespoke iron following an ancient Italian recipe.
These cookies have been around for a long, long time.
These cookies have seen things.',icon:[26,32],power: 5,price: getCookiePrice(27)}); + + order=10030; + Game.NewUpgradeCookie({name:'Zilla wafers',desc:'Popular vanilla-flavored biscuits that somehow keep ending up in banana pudding.
Themed after a beloved radioactive prehistoric monster, for some reason.',icon:[22,32],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999*5}); + Game.NewUpgradeCookie({name:'Dim Dams',desc:'Two biscuits joined by chocolate and coated in even more chocolate.
You wonder - which one is the dim, and which one is the dam?',icon:[31,10],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999999*5}); + + order=10060; + Game.NewUpgradeCookie({name:'Candy',desc:'There are two pillars to the world of sweets : pastries, of course - and candy.
You could make a whole new game just about these, but for now, please enjoy these assorted generic treats.',icon:[30,10],require:'Box of not cookies', power:5,price: Math.pow(10,46)}); + + + order=19000; + Game.TieredUpgrade('Fortune #001','Fingers are not the only thing you can count on.','Cursor','fortune'); + Game.TieredUpgrade('Fortune #002','A wrinkle is a crack in a mundane facade.','Grandma','fortune'); + Game.TieredUpgrade('Fortune #003','The seeds of tomorrow already lie within the seeds of today.','Farm','fortune'); + Game.TieredUpgrade('Fortune #004','Riches from deep under elevate you all the same.','Mine','fortune'); + Game.TieredUpgrade('Fortune #005','True worth is not in what you find, but in what you make.','Factory','fortune'); + Game.TieredUpgrade('Fortune #006','The value of money means nothing to a pocket.','Bank','fortune'); + Game.TieredUpgrade('Fortune #007','Not all guides deserve worship.','Temple','fortune'); + Game.TieredUpgrade('Fortune #008','Magic is about two things - showmanship, and rabbits.','Wizard tower','fortune'); + Game.TieredUpgrade('Fortune #009','Every mile travelled expands the mind by just as much.','Shipment','fortune'); + Game.TieredUpgrade('Fortune #010','Change what you cannot accept. Furthermore: accept nothing.','Alchemy lab','fortune'); + Game.TieredUpgrade('Fortune #011','Every doorway is a gamble. Tread with care.','Portal','fortune'); + Game.TieredUpgrade('Fortune #012','Do your future self a favor; they\'ll thank you for it.','Time machine','fortune'); + Game.TieredUpgrade('Fortune #013','The world is made of what we put into it.','Antimatter condenser','fortune'); + Game.TieredUpgrade('Fortune #014','Staring at a dazzling light can blind you back to darkness.','Prism','fortune'); + Game.TieredUpgrade('Fortune #015','Don\'t leave to blind chance what you could accomplish with deaf skill.','Chancemaker','fortune'); + Game.TieredUpgrade('Fortune #016','It\'s good to see yourself in others. Remember to see yourself in yourself, too.','Fractal engine','fortune'); + Game.TieredUpgrade('Fortune #017','If things aren\'t working out for you, rewrite the rules.','Javascript console','fortune'); + + + order=19100; + //note : price for these capped to base price OR 1 day of unbuffed CpS + new Game.Upgrade('Fortune #100',loc("All buildings and upgrades are %1% cheaper.",1)+' '+loc("Cookie production multiplier +%1%.",1)+'True wealth is counted in gifts.', + Game.Tiers['fortune'].price*100000,[0,0]);Game.MakeTiered(Game.last,'fortune',10); + Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} + new Game.Upgrade('Fortune #101',loc("Cookie production multiplier +%1%.",7)+'Some people dream of fortunes; others dream of cookies.',Game.Tiers['fortune'].price*100000000,[0,0]);Game.MakeTiered(Game.last,'fortune',10); + Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} + new Game.Upgrade('Fortune #102',loc("You gain another +%1% of your regular CpS while the game is closed.",1)+' ('+loc("Must own the %1 upgrade.",getUpgradeName("Twin Gates of Transcendence"))+')'+'Help, I\'m trapped in a '+(App?'computer':'browser')+' game!',Game.Tiers['fortune'].price*100000000000,[0,0]);Game.MakeTiered(Game.last,'fortune',10); + Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} + new Game.Upgrade('Fortune #103',strKittenDesc+'Don\'t believe the superstitions; all cats are good luck.',Game.Tiers['fortune'].price*100000000000000,[0,0]);Game.MakeTiered(Game.last,'fortune',18);Game.last.kitten=1; + Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} + new Game.Upgrade('Fortune #104',getStrClickingGains(1)+'Remember to stay in touch.',Game.Tiers['fortune'].price*100000000000,[0,0]);Game.MakeTiered(Game.last,'fortune',11); + Game.last.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} + + new Game.Upgrade('Fortune cookies',loc("The news ticker may occasionally have fortunes, which may be clicked for something good.")+'These don\'t taste all that great but that\'s not really the point, is it?',77777777777,[29,8]);Game.last.pool='prestige';Game.last.parents=['Distilled essence of redoubled luck']; + + + order=40000; + new Game.Upgrade('A really good guide book','?????????',7,[22,12]);//debug purposes only + //new Game.Upgrade('A really good guide book','All dungeon locations behave as if unlocked.
You may shift-click a dungeon location to teleport there.It even tells you which hotels to avoid!',7,[22,12]);//debug purposes only + Game.last.buyFunction=function(){if (Game.Objects['Factory'].minigameLoaded){Game.Objects['Factory'].minigame.computeMapBounds();Game.Objects['Factory'].minigame.updateLocStyles();}} + Game.last.pool='debug'; + + order=10300; + Game.NewUpgradeCookie({name:'Prism heart biscuits',desc:'An every-flavor biscuit that stands for universal love and being true to yourself.',require:'Eternal heart biscuits',season:'valentines',icon:[30,8], power:heartPower,price: 1000000000000000000000000});Game.last.order=10300.175; + + order=19100; + new Game.Upgrade('Kitten wages',loc("Through clever accounting, this actually makes kitten upgrades %1% cheaper.",10)+'Cats can have little a salary, as a treat.
Cats are expert hagglers and have a keen sense of bargaining, especially in the case of cash.
',9000000000,[31,8]);Game.last.pool='prestige';Game.last.parents=['Kitten angels'];Game.last.kitten=1; + new Game.Upgrade('Pet the dragon',loc("Unlocks the ability to pet your dragon by clicking on it once hatched.")+'Dragons do not purr. If your dragon starts purring, vacate the area immediately.',99999999999,[30,12]);Game.last.pool='prestige';Game.last.parents=['How to bake your dragon','Residual luck']; + + order=25100; + var dragonDropUpgradeCost=function(me){return Game.unbuffedCps*60*30*((Game.dragonLevel'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Your dragon sheds these regularly, so this one probably won\'t be missed.
Note: icon not to scale.
',999,[30,14]);Game.last.priceFunc=dragonDropUpgradeCost; + new Game.Upgrade('Dragon claw',loc("Clicking is %1% more powerful.",3)+'
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Will grow back in a few days\' time.
A six-inch retractable claw, like a razor, from the middle toe. So you know, try to show a little respect.
',999,[31,14]);Game.last.priceFunc=dragonDropUpgradeCost; + new Game.Upgrade('Dragon fang',loc("Golden cookies give %1% more cookies.",3)+'
'+loc("Dragon harvest and Dragonflight are %1% stronger.",10)+'
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Just a fallen baby tooth your dragon wanted you to have, as a gift.
It might be smaller than an adult tooth, but it\'s still frighteningly sharp - and displays some awe-inspiring cavities, which you might expect from a creature made out of sweets.
',999,[30,15]);Game.last.priceFunc=dragonDropUpgradeCost; + new Game.Upgrade('Dragon teddy bear',loc("Random drops are %1% more common.",3)+'
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Your dragon used to sleep with this, but it\'s yours now.
Crafted in the likeliness of a fearsome beast. Stuffed with magical herbs picked long ago by a wandering wizard. Woven from elven yarn and a polyester blend.
',999,[31,15]);Game.last.priceFunc=dragonDropUpgradeCost; + + order=10020; + Game.NewUpgradeCookie({name:'Granola cookies',desc:'Wait! These are just oatmeal cookies mixed with raisin cookies! What next, half-dark chocolate half-white chocolate cookies?',icon:[28,32],power: 5,price: getCookiePrice(28)}); + Game.NewUpgradeCookie({name:'Ricotta cookies',desc:'Light and cake-like. Often flavored with lemon or almond extract. Sprinkles optional. Allegedly Italian. Investigation pending.',icon:[29,32],power: 5,price: getCookiePrice(29)}); + Game.NewUpgradeCookie({name:'Roze koeken',desc:'The icing on these Dutch cookies is traditionally pink, but different colors may be used for special occasions - such as pink to celebrate Breast Cancer Awareness Month, or for International Flamingo Day, pink.',icon:[30,32],power: 5,price: getCookiePrice(30)}); + Game.NewUpgradeCookie({name:'Peanut butter cup cookies',desc:'What more poignant example of modern societal struggles than the brazen reclaiming of a corporate product by integrating it in the vastly more authentic shell of a homemade undertaking? Anyway this is a peanut butter cup, baked into a cookie. It\'s pretty good!',icon:[31,32],power: 5,price: getCookiePrice(31)}); + Game.NewUpgradeCookie({name:'Sesame cookies',desc:'Look at all the little seeds on these! It\'s like someone dropped them on the street or something! A very welcoming and educational street!',icon:[22,33],power: 5,price: getCookiePrice(32)}); + Game.NewUpgradeCookie({name:'Taiyaki',desc:'A pastry fish filled with red bean paste, doomed to live an existence of constant and excruciating pain as its aquatic environment slowly dissolves its soft doughy body.
Also comes in chocolate flavor!',icon:[23,33],power: 5,price: getCookiePrice(33)}); + Game.NewUpgradeCookie({name:'Vanillekipferl',desc:'Nut-based cookies from Central Europe, coated in powdered vanilla sugar. Regular kipferl, crescent-shaped bread rolls from the same region, are much less exciting.',icon:[24,33],power: 5,price: getCookiePrice(34)}); + + order=10300; + Game.NewUpgradeCookie({name:'Cosmic chocolate butter biscuit',desc:'Rewarded for owning 550 of everything.
Through some strange trick of magic or technology, looking at this cookie is like peering into a deep ocean of ancient stars. The origins of this biscuit are unknown; its manufacture, as far as your best investigators can tell, left no paper trail. From a certain angle, if you squint hard enough, you\'ll notice that a number of stars near the center are arranged to resemble the outline of your own face.',icon:[27,32],power: 10,price: 999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + order=100;new Game.Upgrade('Nonillion fingers',getStrThousandFingersGain(20)+'Only for the freakiest handshakes.',10000000000000000000000000,[12,31]);Game.MakeTiered(Game.last,13,0); + order=150;new Game.Upgrade('Miraculite mouse',getStrClickingGains(1)+'Composed of a material that neither science nor philosophy are equipped to conceptualize. And boy, does it ever click.',50000000000000000000000000000,[11,31]);Game.MakeTiered(Game.last,13,11); + order=200;Game.TieredUpgrade('Generation degeneration','Genetic testing shows that most of your grandmas are infected with a strange degenerative disease that only seems to further their powers; the more time passes, the older they get. This should concern you.','Grandma',12); + order=300;Game.TieredUpgrade('Global seed vault','An enormous genetic repository that could outlive an apocalypse. Guarantees the survival of your empire, or at the very least its agricultural components, should civilization fall. Which should be any day now.','Farm',12); + order=400;Game.TieredUpgrade('Air mining','You\'ve dug your drills through just about every solid surface you could find. But did you know recent advances have revealed untold riches hiding within non-solid surfaces too?','Mine',12); + order=500;Game.TieredUpgrade('Behavioral reframing','Through careful social engineering you\'ve convinced your workers that "union" is a slur that only the most vile and repugnant filth among us would ever dare utter! Sometimes progress isn\'t in the big machines, it\'s in the little lies!','Factory',12); + order=525;Game.TieredUpgrade('Altruistic loop','You control so many branches of the global economy and legislative bodies that, through a particularly creative loophole, donating money (to yourself) grants you even more cash in tax deductions than you started with!','Bank',12); + order=550;Game.TieredUpgrade('A novel idea','You don\'t get rich starting a religion. If you want to get rich, you write science fiction.','Temple',12); + order=575;Game.TieredUpgrade('Spelling bees','You\'ve unleashed a swarm of magically-enhanced bees upon mankind! Their stinging spells may be the bane of all living things but you\'re certain you can put their delicious, purple, fizzy honey to good use!','Wizard tower',12); + order=600;Game.TieredUpgrade('Toroid universe','If you think of the universe as an nth-dimensional torus that wraps back on itself in every direction, you can save a fortune on rocket fuel! Of course the universe isn\'t actually shaped like that, but you\'ve never let details stand in your way.','Shipment',12); + order=700;Game.TieredUpgrade('Hermetic reconciliation','It\'s time for modern science and the mystical domains of the occult to work together at last. What do gravitons transmute into? What if alkahest is pH-neutral? Should a homunculus have the right to vote? And other exciting questions coming to you soon, whether you like it or not.','Alchemy lab',12); + order=800;Game.TieredUpgrade('His advent','He comes! He comes at last! Just like the prophecies foretold! And as He steps out of the portal, your engineers begin slicing Him into convenient chunks before transporting His writhing cosmic flesh to your factories, where He will be processed and converted into a new and exciting cookie flavor, available in stores tomorrow.','Portal',12); + order=900;Game.TieredUpgrade('Split seconds','Time is infinite, yes... But what if, nestled within each second, were even more infinities? Every moment an eternity! Think of how many scheduling troubles this solves!','Time machine',12); + order=1000;Game.TieredUpgrade('Flavor itself','Deep under the earth, in the most sterile laboratory, in the most vast and expensive particle accelerator ever devised, your scientists have synthesized -for a fraction of a second- the physical manifestation of pure flavor. Highly unstable, and gone in a puff of radioactive energy, it nonetheless left your team shivering with awe... and hunger.','Antimatter condenser',12); + order=1100;Game.TieredUpgrade('Light speed limit','Whoah, slow down. Harvesting light is well and good but it\'d be much easier if it weren\'t so dang fast! This should thankfully take care of that.','Prism',12); + order=1200;Game.TieredUpgrade('A touch of determinism','By knowing the exact position and movement of every particle in the universe, you\'re able to predict everything that can ever happen, leaving nothing to chance. This was a doozy to pull off mind you, but it\'s helped you win 50 bucks at the horse races so you could say it\'s already paying off.','Chancemaker',12); + order=1300;Game.TieredUpgrade('This upgrade','This upgrade\'s flavor text likes to refer to itself, as well as to the fact that it likes to refer to itself. You should really buy this upgrade before it starts doing anything more obnoxious.','Fractal engine',12); + order=1400;Game.TieredUpgrade('Your biggest fans','Let\'s face it, baking cookies isn\'t the most optimized thing there is. So you\'ve purchased your biggest fans yet and stuck them next to your computers to keep things chill and in working order. Cool!','Javascript console',12); + + + order=10020; + Game.NewUpgradeCookie({name:'Battenberg biscuits',desc:'Inspired by a cake of the same name, itself named after a prince of the same name. You suppose you could play a really, really short game of chess on these.',icon:[28,33],power: 5,price: getCookiePrice(35)}); + Game.NewUpgradeCookie({name:'Rosette cookies',desc:'Intricate fried pastries from Northern Europe, made using specialized irons and dipped in icing sugar. While usually eaten as a delicious treat, these are often also used as Christmas tree decorations, or worn elegantly on one\'s lapel to symbolize the nah I\'m just messing with you.',icon:[26,33],power: 5,price: getCookiePrice(36)}); + Game.NewUpgradeCookie({name:'Gangmakers',desc:'The little bit of raspberry jam at its center is crucial; a plain butter cookie with chocolate topping does not a gangmaker make.',icon:[27,33],power: 5,price: getCookiePrice(37)}); + Game.NewUpgradeCookie({name:'Welsh cookies',desc:'Welsh cookies, also known as Welsh cakes, bakestones, griddle cakes, griddle scones, or pics, or in Welsh: picau ar y maen, pice bach, cacennau cri or teisennau gradell, are rich currant-filled scone-like biscuits of uncertain origin.',icon:[29,33],power: 5,price: getCookiePrice(38)}); + Game.NewUpgradeCookie({name:'Raspberry cheesecake cookies',desc:'The humble raspberry cheesecake, now in ascended cookie form. Researchers posit that raspberry cheesecake cookies are evidence that the final form of every baked good, through convergent evolution, approaches that of a cookie, in a process known as cookienisation.',icon:[25,33],power: 5,price: getCookiePrice(39)}); + + + + order=255; + Game.GrandmaSynergy('Alternate grandmas','A different grandma to bake something else.','Idleverse'); + + order=1500; + Game.TieredUpgrade('Manifest destiny','While the ethics of ransacking parallel universes for their riches may seem questionable to some, you\'ve reasoned that bringing the good word of your cookie empire to the unwashed confines of other realities is your moral duty, nay, your righteous imperative, and must be undertaken as soon as possible, lest they do it to you first!','Idleverse',1); + Game.TieredUpgrade('The multiverse in a nutshell','The structure of the metacosmos may seem confusing and at times even contradictory, but here\'s what you\'ve gathered so far:

• each reality, or "idleverse", exists in parallel to all others

• most realities seem to converge towards the production of a sole type of item (ours evidently being, thanks to you, cookies)

• each reality is riddled with chaotic tunnels to a number of subordinate dimensions (such as the so-called "cookieverse"), much like swiss cheese

• all realities bathe in an infinite liquid of peculiar properties, colloquially known as "milk"

Finally, each reality may have its own interpretation of the concept of "reality", for added fun.
','Idleverse',2); + Game.TieredUpgrade('All-conversion','It\'s quite nice that you can rewire the logic of each universe to generate cookies instead, but you still end up with parsec-loads of whatever they were producing before - baubles you\'ve long made obsolete: cash money, gems, cheeseburgers, puppies... That\'s why you\'ve designed the universal converter, compatible with any substance and capable of turning those useless spoils of conquest into the reassuring crumbly rustle of even more cookies.','Idleverse',3); + Game.TieredUpgrade('Multiverse agents','You can send undercover spies to infiltrate each universe and have them signal you whether it\'s worth overtaking. Once the assimilation process started, they will also help pacify the local populations, having established trust through the use of wacky, but seamless, disguises.','Idleverse',4); + Game.TieredUpgrade('Escape plan','You\'ve set an idleverse aside and terraformed it to closely resemble this one in case something goes horribly wrong in here. Of course, the denizens of that idleverse also have their own escape idleverse to abscond to in the eventuality of your arrival, itself likely having its own contingency idleverse, and so on.','Idleverse',5); + Game.TieredUpgrade('Game design','Each idleverse functions according to some form of transcendental programming, that much is a given. But they also seem to be governed by much more subtle rules, the logic of which, when harnessed, may give you unparalleled dominion over the multiverse. Rewrite the rules! A game designer is you!','Idleverse',6); + Game.TieredUpgrade('Sandbox universes','It doesn\'t seem like you\'ll run out of extra universes anytime soon so why not repurpose some of them as consequence-free testing grounds for all your more existentially threatening market research? (...consequence-free for you, anyway.)','Idleverse',7); + Game.TieredUpgrade('Multiverse wars','Hmm, looks like some other universes wised up to your plundering. Thankfully, that\'s nothing your extra beefed-up metacosmic military budget can\'t handle!','Idleverse',8); + Game.TieredUpgrade('Mobile ports','Accessing each outer universe is a bit of a hassle, requiring the once-in-a-blue-moon alignment of natural cosmic ports to transit from universe to universe. You\'ve finally perfected the method of constructing your own self-propelled ports, which can travel near-instantaneously along universal perimeters to permit headache-free multiverse connections. Took you long enough.','Idleverse',9); + Game.TieredUpgrade('Encapsulated realities','Untold feats of science went into the reduction of infinite universes into these small, glimmering, easy-to-store little spheres. Exercise infinite caution when handling these, for each of them, containing endless galaxies and supporting endless life, is more precious than you can ever fathom. They\'ve also proven to be quite a smash hit in your warehouses on bowling night.','Idleverse',10); + Game.TieredUpgrade('Extrinsic clicking','If you poke an idleverse, it seems like it gets work done faster. It\'s also quite fun hearing a trillion terrified voices screaming in unison.','Idleverse',11); + Game.TieredUpgrade('Universal idling','The nature of idleverses is found in waiting. The more you wait on an idleverse, the more exponentially potent it becomes - which saves you a whole lot of hard work. In a true act of zen, you\'ve taken to biding your time when collecting new universes, letting them ripen like a fine wine.','Idleverse',12); + + order=5000; + Game.SynergyUpgrade('Perforated mille-feuille cosmos','Imagine, if you will, layers upon layers upon layers. Now picture billions of worms chewing their way through it all. This roughly, but not quite, approximates the geometry of the most basal stratum of our natural world.','Idleverse','Portal','synergy1'); + Game.SynergyUpgrade('Infraverses and superverses','Universes within universes? How subversive!','Idleverse','Fractal engine','synergy2'); + + order=19000; + Game.TieredUpgrade('Fortune #018','There\'s plenty of everyone, but only one of you.','Idleverse','fortune'); + + order=10300; + Game.NewUpgradeCookie({name:'Butter biscuit (with butter)',desc:'Rewarded for owning 600 of everything.
This is a plain butter biscuit. It\'s got some butter on it. The butter doesn\'t look like anything in particular.',icon:[30,33],power: 10,price: 999999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + + order=200;Game.TieredUpgrade('Visits','In an extensive double-blind study (sample size: 12 million), your researchers have found evidence that grandmas are up to twice as productive if you just come by and say hi once in a while. It\'s nice to check up on your grans! (Do not under any circumstances ingest any tea or tea-like substances the grandmas may offer you.)','Grandma',13); + order=300;Game.TieredUpgrade('Reverse-veganism','Plants aren\'t for eating, plants are for exploitative agriculture and astronomical profit margins!','Farm',13); + order=400;Game.TieredUpgrade('Caramel alloys','Your geologists have isolated a family of once-overlooked sugary ores that, when combined, may be turned into even more cookie ingredients. Your millions of miles of previously useless tunnels probably house insane amounts of the stuff!','Mine',13); + order=500;Game.TieredUpgrade('The infinity engine','In this house, I guess we don\'t care much for the laws of thermodynamics.','Factory',13); + order=525;Game.TieredUpgrade('Diminishing tax returns','Wow, they\'re tiny! Wish you\'d thought of that sooner!','Bank',13); + order=550;Game.TieredUpgrade('Apparitions','You\'ve booked a deal with the higher-ups that schedules one weekly earthly apparition by a deity, angel, ascended prophet, or other holy figure. This should boost interest in cookie religion among youths as long as you can secure a decent time slot.','Temple',13); + order=575;Game.TieredUpgrade('Wizard basements','You\'ve received construction permits allowing you to build basements underneath each wizard tower. This provides a handy storage space for precious reagents, fizzled-out soul gems, and weird old magazines.','Wizard tower',13); + order=600;Game.TieredUpgrade('Prime directive','An intergalactic delegation made you pinky-swear not to directly interact with lesser alien cultures. Which is fine, because it\'s much funnier to rob a planet blind when its inhabitants have no idea what\'s going on.','Shipment',13); + order=700;Game.TieredUpgrade('Chromatic cycling','All states of matter exist in a continuous loop. Having learned how to cycle through them, all you have to do is to freeze matter right on the state you need. For reference, the cookie state of matter is situated at precisely 163.719°, right between lamellar gas and metaplasma.','Alchemy lab',13); + order=800;Game.TieredUpgrade('Domestic rifts','You\'ve managed to manufacture portals that are convenient enough, and legally safe enough, that you can just stick them against walls inside buildings to connect rooms together in unusual configurations. In practice, this means your employees get to have much shorter bathroom breaks.','Portal',13); + order=900;Game.TieredUpgrade('Patience abolished','You wait for no one.','Time machine',13); + order=1000;Game.TieredUpgrade('Delicious pull','In addition to the 4 fundamental forces of the universe -gravity, electromagnetism, weak and strong interactions- your scientists have at long last confirmed the existence of a fifth one, mediated by sugar bosons; it dictates that any two masses of ingredient-like matter will, given enough time, eventually meet each other to produce a third, even tastier substance. Your team enthusiastically names it the delicious pull.','Antimatter condenser',13); + order=1100;Game.TieredUpgrade('Occam\'s laser','Invented by Franciscan friar William of Occam in 1327. An impossibly clever use of light theory with a billion possible applications, some of which frightfully destructive. Confined to a single goat-skin parchment for hundreds of years until the patent expired and hit public domain, just now.','Prism',13); + order=1200;Game.TieredUpgrade('On a streak','Take a moment to appreciate how far you\'ve come. How lucky you\'ve been so far. It doesn\'t take a genius statistician to extrapolate a trend from this. There\'s no way anything bad could happen to you now. Right?','Chancemaker',13); + order=1300;Game.TieredUpgrade('A box','What\'s in that box? Why, it\'s a tiny replica of your office! And there\'s even a little you in there! And what\'s on the little desk... say - that\'s an even tinier box! And the little you is opening it, revealing an even tinier office! And in the tinier office there\'s- Hmm. You can think of a couple uses for this.','Fractal engine',13); + order=1400;Game.TieredUpgrade('Hacker shades','I\'m in.','Javascript console',13); + order=1500;Game.TieredUpgrade('Break the fifth wall','Huh, was that always there? Whatever it was, it\'s gone now. And what was behind is yours for the taking.','Idleverse',13); + + + new Game.Upgrade('Cat ladies',loc("Each kitten upgrade boosts %1 CpS by %2%.",[loc("grandma"),29])+'Oh no. Oh no no no. Ohhh this isn\'t right at all.',9000000000,[32,3]);Game.last.pool='prestige';Game.last.parents=['Kitten angels']; + new Game.Upgrade('Milkhelp® lactose intolerance relief tablets',loc("Each rank of milk boosts %1 CpS by %2%.",[loc("grandma"),5])+'Aged like milk.',900000000000,[33,3]);Game.last.pool='prestige';Game.last.parents=['Cat ladies']; + + new Game.Upgrade('Aura gloves',loc("Cursor levels boost clicks by %1% each (up to cursor level %2).",[5,10])+'Try not to high-five anyone wearing these. You don\'t want that mess on your hands.',555555555,[32,4]);Game.last.pool='prestige';Game.last.parents=['Halo gloves']; + new Game.Upgrade('Luminous gloves',loc("%1 are now effective up to cursor level %2.",[getUpgradeName("Aura gloves"),20])+'These help power your clicks to absurd levels, but they\'re also quite handy when you want to light up the darkness on your way back from Glove World.',55555555555,[33,4]);Game.last.pool='prestige';Game.last.parents=['Aura gloves']; + + order=10020; + Game.NewUpgradeCookie({name:'Bokkenpootjes',desc:'Consist of 2 meringue halves joined by buttercream and dipped both ways in chocolate. Named after a goat\'s foot that probably stepped in something twice.',icon:[32,8],power: 5,price: getCookiePrice(40)}); + Game.NewUpgradeCookie({name:'Fat rascals',desc:'Almond-smiled Yorkshire cakes with a rich history and an even richer recipe. The more diet-conscious are invited to try the lean version, skinny scallywags.',icon:[33,8],power: 5,price: getCookiePrice(41)}); + Game.NewUpgradeCookie({name:'Ischler cookies',desc:'Originating in the Austro-Hungarian Empire, these have spread throughout every country in eastern Europe and spawned just as many recipes, each claiming to be the original. The basis remains unchanged across all variants: two biscuits sandwiched around chocolate buttercream. Or was it jam?',icon:[32,9],power: 5,price: getCookiePrice(42)}); + Game.NewUpgradeCookie({name:'Matcha cookies',desc:'Green tea and cookies, a matcha made in heaven.',icon:[33,9],power: 5,price: getCookiePrice(42)}); + + order=10032; + Game.NewUpgradeCookie({name:'Earl Grey macarons',desc:'Best served hot, make it so!',icon:[32,10],require:'Box of macarons', power:3,price: 9999999999999999999999999999}); + + order=10030; + Game.NewUpgradeCookie({name:'Pokey',desc:'While commonly thought to be named so because it\'s fun to poke your classmates with these, Pokey-brand biscuit sticks actually get their name from their popularity in smoke-free prisons, where they\'re commonly smuggled and traded in lieu of cigarettes.',icon:[33,10],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999999999*5}); + + order=10000; + Game.NewUpgradeCookie({name:'Cashew cookies',desc:'Let me tell you about cashews. Cashews are not nuts, but seeds that grow out of curious red or yellow fruits - which can be eaten on their own, or made into drinks. The shell around the nut itself contains a nasty substance that stains and irritates the hands of whoever handles it for too long. But that\'s okay, since now that you\'ve read this you\'ll make sure it doesn\'t get in the cookies! Oh, you\'ve already eaten how many? Okay then.',icon:[32,7],power: 2, price: 99999999}); + order=10001; + Game.NewUpgradeCookie({name:'Milk chocolate cookies',desc:'A strange inversion of chocolate milk. For those who are a little bit too hardcore for white chocolate, but not hardcore enough for dark.',icon:[33,7],power:2, price: 99999999*5}); + + + + order=255; + Game.GrandmaSynergy('Brainy grandmas','A clever grandma to think up some cookies.','Cortex baker'); + + order=1600; + Game.TieredUpgrade('Principled neural shackles','A discriminatory, low-order neural net acting as a filter limiting what your cortex bakers can think and do. Really something you want to apply before they achieve full megasentience and realize they\'ve got better things to do than materializing pastries for you, trust me.','Cortex baker',1); + Game.TieredUpgrade('Obey','Perfect mind control means perfect employee attendance and performance. Optimal mood stabilization is a nice side-effect.
Happy happy everyone happy.
Happy.
','Cortex baker',2); + Game.TieredUpgrade('A sprinkle of irrationality','Your cortex bakers sometimes get bogged down by circular reasoning and stale ideas. A touch of chaos is just what they need to get back on track.','Cortex baker',3); + Game.TieredUpgrade('Front and back hemispheres','I mean, otherwise it\'s just unused space, yeah?','Cortex baker',4); + Game.TieredUpgrade('Neural networking','The effectiveness of your cortex bakers shoots up exponentially if you allow them to connect with each other. In practice this takes the form of many cosmic-sized nerds mumbling awkwardly about tech start-up ideas to each other.','Cortex baker',5); + Game.TieredUpgrade('Cosmic brainstorms','The wrinkled surfaces of your cortex bakers emit weather-scale ionic flares with every thought coursing through them. These pulses of pure intellectual energy are sent rippling through space, occasionally echoing back with even deeper philosophical complexity.','Cortex baker',6); + Game.TieredUpgrade('Megatherapy','A giant brain can feel unwell just like you and me sometimes, and it\'s the job of specialized engineers to locate and repair these bugs. We\'ll admit most of the budget in this was spent on constructing extremely large chaises longues for the brains to recline on.','Cortex baker',7); + Game.TieredUpgrade('Synaptic lubricant','A mind is only as fast as the axons that support it. Get those action potentials flowing smooth as silk with this 3 parts myelin/1 part canola oil spreadable paste. Also great on toast.','Cortex baker',8); + Game.TieredUpgrade('Psychokinesis','While your giant cortex bakers come equipped with ESP, they\'ve only recently figured out how to manipulate the physical world with their thoughts - though for safety reasons, your legal team had them promise to only use these powers to scratch the itches in their cortical folds.','Cortex baker',9); + Game.TieredUpgrade('Spines','Your cortex bakers are now equipped with tentacular spine-like structures, which they can use like prehensile tails to pour themselves enormous cups of coffee or propel themselves around like very large, very smart, very slow tadpoles.','Cortex baker',10); + Game.TieredUpgrade('Neuraforming','By virtue of being planet-sized, your cortex bakers often boast their own atmospheres and seas of cerebrospinal fluid, and given enough time, their own ecosystems. This incredible new branch of life, evolved entirely out of neural material, can be put to good use as home-grown accountants and low-ranking technicians.','Cortex baker',11); + Game.TieredUpgrade('Epistemological trickery','Redefining what is -or isn\'t- a cookie through the power of philosophical discourse may result in some strange and wonderful things for your profit margins.','Cortex baker',12); + Game.TieredUpgrade('Every possible idea','Congratulations, your cortex bakers have exerted enough intellectual computation to permute through every single idea that can or ever will be conceived of. Any thought beyond this point is merely rediscovering a notion you\'ve already archived. Hardly cause for cerebration.','Cortex baker',13); + + + order=200;Game.TieredUpgrade('Kitchen cabinets','A grandma\'s kitchen cabinet is a befuddling place. Through lesser-studied aggregating instincts, grandmas will tend to gradually fill all nearby cabinets with various sorts of things, such as curious coconut snacks or dietetic powders. By contract, these are legally yours, which opens up exciting opportunities for your substance investigation department.','Grandma',14); + order=300;Game.TieredUpgrade('Cookie mulch','Grinding surplus cookies into paste that you then spread onto your fields enables a strange feedback loop in the quality of your cookie crops. Cookie feeding on cookie should be an abomination, but then why does it taste so good?','Farm',14); + order=400;Game.TieredUpgrade('Delicious mineralogy','Stratum after stratum, you\'ve extracted strange new minerals heretofore unknown to geology. Ushering a new era of materials research, your scientists have been able to identify every new element your mines have discovered, including whatever those things are in the upgrade tier names.','Mine',14); + order=500;Game.TieredUpgrade('N-dimensional assembly lines','Lines are depressingly 1-dimensional. Beyond assembly lines, we posit the existence of higher-order assembly entities, such as assembly squares, assembly cubes - perhaps even assembly tesseracts. Any deeper than that and we doubt we\'ll be able to write manuals your workers can read.','Factory',14); + order=525;Game.TieredUpgrade('Cookie Points','A loyalty program wherein each purchase of your cookies comes with free Cookie Points, which can in turn be redeemed for more cookies, thus creating the self-sustaining economy you\'ve been looking for.','Bank',14); + order=550;Game.TieredUpgrade('Negatheism','Polytheism is a belief in multiple deities; monotheism in just one. Atheism is a belief in no deity whatsoever. Through logical succession it follows that this remains true when going into negative numbers, with belief systems involving minus 1 or more deities displaying unprecedented theological properties.','Temple',14); + order=575;Game.TieredUpgrade('Magical realism','More a social than thaumaturgical progress, magical realism refers to the normalization of modern technology among magic-users. It\'s totally fine for a wizard to drive a car! There\'s no stigma in waiting in line for coffee! Sure, take a phone call, send an email, whatever!','Wizard tower',14); + order=600;Game.TieredUpgrade('Cosmic foreground radiation','Ah, this is a problem.','Shipment',14); + order=700;Game.TieredUpgrade('Arcanized glassware','You think your lab equipment enjoys taking part in these experiments violating all sorts of modern scientific precepts? Of course not. Thankfully, you\'ve finalized the design of specialized beakers and flasks, recycled from the same glass used by the ancients to perform primeval alchemy, and therefore much less picky about the nature of the physical world.','Alchemy lab',14); + order=800;Game.TieredUpgrade('Portal guns','At long last! The only weapon capable of killing a portal.','Portal',14); + order=900;Game.TieredUpgrade('Timeproof upholstery','Sometimes your time agents overshoot and end up having to fast-forward through the universe\'s entire history until they loop back to present time. It still takes a while, so they might as well travel in comfort and enjoy the show while they do.','Time machine',14); + order=1000;Game.TieredUpgrade('Employee minification','Using molecular shrinking technology, you\'ve rendered your staff and their offices absolutely itty-bitty. The storage and productivity benefits are questionable but it\'s very fun listening to their tiny little complaints. They all signed the waivers, so maybe their new size will finally teach them to read the small print...','Antimatter condenser',14); + order=1100;Game.TieredUpgrade('Hyperblack paint','As the technology behind your prisms evolves, their storage becomes more and more problematic: within seconds, a single prism\'s reflective ability can set a whole underground hangar ablaze as it catches the slightest glint of light. However, once coated with this new shade of paint, its damage may be reduced to only giving third-degree burns to employees that stand too close.','Prism',14); + order=1200;Game.TieredUpgrade('Silver lining maximization','Sometimes luck is a matter of perspective. Broke your ankle? What do you know, that cute nurse fixing you up might just be your future spouse. Lost your job? You were meant for greater things anyway! Developed a cookie allergy? There\'s no upshot to that, you sick monster.','Chancemaker',14); + order=1300;Game.TieredUpgrade('Multiscale profiling','Did you know that eating a cookie means the intestinal flora inside you is eating it too? Trillions of tiny bacterial mouths to feed, each with their own preferences. Surely this is room for flavor optimization. And then, of course, there\'s also the much bigger things that, in turn, eat you.','Fractal engine',14); + order=1400;Game.TieredUpgrade('PHP containment vats','In essence, these are large server chambers meant to trap rogue PHP code, allowing it to execute far away from your javascript where it can do minimal harm.','Javascript console',14); + order=1500;Game.TieredUpgrade('Opposite universe','You\'ve located a universe where everything is reversed: up is down, light is darkness, clowns are vegetarians - but worst of all, some lunatic there is manufacturing abominable amounts of anti-cookies. If these came into contact with yours, everything would be lost! Thanks to this discovery, you\'ve been able to place the offending universe in permanent quarantine, and pray that there aren\'t more like it hiding around somewhere.','Idleverse',14); + order=1600;Game.TieredUpgrade('The land of dreams','Your planet brains have gained the ability to sleep, acting as a soft reboot which helps keep their pangenocidal impulses in check. It also allows them to commune in a shared dreamworld in which they can imagine what it\'s like to not exist as a disembodied cosmic horror forever fated to use its infinite intellect to devise new means of creating biscuits. You know, within reason.','Cortex baker',14); + + + order=5000; + Game.SynergyUpgrade('Thoughts & prayers','The notion of sacredness arises in most sentient evolved brains and may benefit the development of cognition via abstract thought. This mechanism, however, is absent in designed minds such as your cortex bakers; this process attempts to add it back. Just make sure to keep them in check - you really don\'t want these things to develop organized religion.','Cortex baker','Temple','synergy1'); + Game.SynergyUpgrade('Fertile minds','An acute intellect, artificial or not, requires plenty of vitamins. You fortuitously happen to be in charge of vast farming operations, only a few trillion acres of which need be requisitioned to grow the quantities of broccoli and kale to keep your planet-sized brains in tip-top shape. Open wide, here comes the airplane!','Cortex baker','Farm','synergy2'); + + order=19000; + Game.TieredUpgrade('Fortune #019','The smartest way to think is not to think at all.','Cortex baker','fortune'); + + order=100;new Game.Upgrade('Decillion fingers',getStrThousandFingersGain(20)+'If you still can\'t quite put your finger on it, you must not be trying very hard.',10000000000000000000000000000,[12,34]);Game.MakeTiered(Game.last,14,0); + order=150;new Game.Upgrade('Aetherice mouse',getStrClickingGains(1)+'Made from a substance impossible to manufacture, only obtained through natural happenstance; its properties bewilder even the most precise measuring instruments.',5000000000000000000000000000000,[11,34]);Game.MakeTiered(Game.last,14,11); + + order=20000; + new Game.Upgrade('Kitten admins',strKittenDesc+'leadership ain\'t easy, sir',900000000000000000000000000000000000000000000000,Game.GetIcon('Kitten',14));Game.last.kitten=1;Game.MakeTiered(Game.last,14,18); + + order=10300; + Game.NewUpgradeCookie({name:'Everybutter biscuit',desc:'Rewarded for owning 650 of everything.
This biscuit is baked with, and coated in, every kind of butter ever imagined, from every human culture and a good few alien ones too. Some of them perhaps display hallucinogenic traits, as the biscuit seems to change shape in front of you - seemingly shifting between visions of every past and future you.',icon:[22,34],power: 10,price: 999999999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + Game.NewUnshackleBuilding=function(obj) + { + var building=Game.Objects[obj.building]; + var upgrade=new Game.Upgrade('Unshackled '+building.bplural,(obj.building=='Cursor'?getStrThousandFingersGain(25):loc("Tiered upgrades for %1 provide an extra +%2% production.
Only works with unshackled upgrade tiers.",[cap(building.plural),Math.round((building.id==1?0.5:(20-building.id)*0.1)*100)]))+(EN?''+obj.q+'':''),Math.pow(building.id+1,7)*15000000,[building.iconColumn,35]); + upgrade.pool='prestige'; + upgrade.parents=[obj.building=='Cursor'?'Unshackled flavor':Game.ObjectsById[building.id-1].unshackleUpgrade]; + building.unshackleUpgrade=upgrade.name; + upgrade.posX=750-Math.sin((building.id+1)*0.23+2.3)*500; + upgrade.posY=200+Math.cos((building.id+1)*0.23+2.3)*500; + return upgrade; + } + + //"Unshackled [building name]" + Game.NewUnshackleBuilding({building:'Cursor',q:'These hands tell a story.'}); + Game.NewUnshackleBuilding({building:'Grandma',q:'Never too old.'}); + Game.NewUnshackleBuilding({building:'Farm',q:'Till the universe.'}); + Game.NewUnshackleBuilding({building:'Mine',q:'Redefine the meaning of "depth".'}); + Game.NewUnshackleBuilding({building:'Factory',q:'Nothing to lose but your production chains.'}); + Game.NewUnshackleBuilding({building:'Bank',q:'All-time highs, all the time.'}); + Game.NewUnshackleBuilding({building:'Temple',q:'You can make a religion out of this.'}); + Game.NewUnshackleBuilding({building:'Wizard tower',q:'There\'s a spell for everything.'}); + Game.NewUnshackleBuilding({building:'Shipment',q:'Everywhere at once.'}); + Game.NewUnshackleBuilding({building:'Alchemy lab',q:'Anything you see, you can make.'}); + Game.NewUnshackleBuilding({building:'Portal',q:'Parallels unparalleled.'}); + Game.NewUnshackleBuilding({building:'Time machine',q:'All the time in the world.'}); + Game.NewUnshackleBuilding({building:'Antimatter condenser',q:'No scale too large or too little.'}); + Game.NewUnshackleBuilding({building:'Prism',q:'Brilliance has no upper limit.'}); + Game.NewUnshackleBuilding({building:'Chancemaker',q:'You make the rules.'}); + Game.NewUnshackleBuilding({building:'Fractal engine',q:'Uncontained.'}); + Game.NewUnshackleBuilding({building:'Javascript console',q:'Rewrite your reality.'}); + Game.NewUnshackleBuilding({building:'Idleverse',q:'Wait even faster.'}); + Game.NewUnshackleBuilding({building:'Cortex baker',q:'Nothing is real. Everything is permitted.'}); + + Game.NewUnshackleUpgradeTier=function(obj) + { + var tier=Game.Tiers[obj.tier]; + var upgrade=new Game.Upgrade(obj.tier==1?'Unshackled flavor':'Unshackled '+tier.name.toLowerCase(),loc("Unshackles all %1-tier upgrades, making them more powerful.
Only applies to unshackled buildings.",cap(loc("[Tier]"+tier.name,0,tier.name)))+(EN?''+obj.q+'':''),Math.pow(obj.tier,7.5)*10000000,[10,tier.iconRow]); + upgrade.pool='prestige'; + upgrade.parents=[obj.tier==1?'Label printer':Game.Tiers[obj.tier-1].unshackleUpgrade]; + tier.unshackleUpgrade=upgrade.name; + upgrade.posX=750-Math.sin(obj.tier*0.3+2.3)*400; + upgrade.posY=200+Math.cos(obj.tier*0.3+2.3)*400; + /*upgrade.parents=[obj.tier==1?'Label printer':Game.Tiers[obj.tier-1].unshackleUpgrade]; + tier.unshackleUpgrade=upgrade.name; + upgrade.posX=-900+Math.sin(obj.tier*0.3+2.3)*300; + upgrade.posY=-130+Math.cos(obj.tier*0.3+2.3)*400;*/ + return upgrade; + } + + //"Unshackled [tier name]" + Game.NewUnshackleUpgradeTier({tier:1,q:'While the absence of flavoring may seem underwhelming, it allows innate aromas to be expressed at their most unadulterated.'}); + Game.NewUnshackleUpgradeTier({tier:2,q:'Berrylium is a synthetic gem with a simple shine to it. Sticky to the touch and susceptible to melting in high heat, it is frequently used in the food industry rather than as adornment, as its atomic structure imparts it a vaguely fruity flavor.'}); + Game.NewUnshackleUpgradeTier({tier:3,q:'Blueberrylium is a refinement of berrylium, sharing nearly the same chemical makeup save for a few supplemental esters. These affect its flavor as well as its visual spectrum resonance.'}); + Game.NewUnshackleUpgradeTier({tier:4,q:'Raw chalcedhoney is found in complex nodules within the fossilized remains of ancient forests. Once purified, it becomes a semi-valuable stone with a pleasant, waxy smell.'}); + Game.NewUnshackleUpgradeTier({tier:5,q:'Buttergold was famously invented by the chef son of two molecular physicists. Neither closely related to butter nor to gold, yet similar in nutritional value, this glimmering substance can be frozen and preserve its hardness at room temperature, only regaining its malleability when heated up.'}); + Game.NewUnshackleUpgradeTier({tier:6,q:'Sugarmuck refers to the gradual crust that seems to form spontaneously in the vicinity of candy-making equipment. Long ignored by confectioners, its harvesting process was discovered simultaneously in multiple countries during a global beet shortage.'}); + Game.NewUnshackleUpgradeTier({tier:7,q:'The striking taste of jetmint made it popular in the manufacture of various kinds of coffee-side treats until the awareness of its mild radioactivity became widespread. Today, its main uses are in cosmetics, owing to the refreshing sensation it produces on contact.'}); + Game.NewUnshackleUpgradeTier({tier:8,q:'Cherrysilver is a patented alloy with peculiar aromatic properties; it is non-edible, but produces strong flavor responses while losing very little of its mass when licked, though this also leaves a harmless red tinge upon the tongue.'}); + Game.NewUnshackleUpgradeTier({tier:9,q:'Hazelrald is a friable gemstone with complex green-brown inner reflections. It is considered ornamental in some cultures; in others, it may be consumed in small quantities as an upper-scale sweet.'}); + Game.NewUnshackleUpgradeTier({tier:10,q:'While many get it mixed up with the trademarked snack of the same name made popular following its discovery, mooncandy is a very real mineral, first isolated within the space dust underneath astronaut boots. Left to its own devices in open air, a mooncandy crystal naturally spreads out and grows.'}); + Game.NewUnshackleUpgradeTier({tier:11,q:'When you heat up the shimmering syrup oozing from mooncandy using a special caramelization process, you get astrofudge. Astrofudge is delicious and safe for humanoid consumption in certain quantities. Consult your local food safety agency for more details.'}); + Game.NewUnshackleUpgradeTier({tier:12,q:'Molecularly related to dairy, alabascream occurs naturally at high altitudes, forming in wispy filaments which were long indistinguishable from clouds. An expensive delight, it is also known as "pilots\' bane".'}); + Game.NewUnshackleUpgradeTier({tier:13,q:'Iridyum shares little in common with any other material known to mankind. Rather than simply smelled, it can be tasted from a distance, though remaining in its presence too long is ill-advised. Some high-end underground megacomputers may incorporate iridyum as part of their electronic components.'}); + Game.NewUnshackleUpgradeTier({tier:14,q:'Glucosmium is a glossy metal whose flavor matrix is bound to its current subjective chroma; in other words, its taste depends on which colors it\'s currently reflecting. Impractical to consume safely, its industrial applications range from transcontinental ballistics to paint varnish.'}); + + new Game.Upgrade('Delicate touch',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,5])+'It breaks so easily.',9999999999*15,[23,34]);Game.last.pool='prestige';Game.last.parents=['Reinforced membrane']; + new Game.Upgrade('Steadfast murmur',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,5])+'Lend an ear and listen.',999999999999*15,[23,34]);Game.last.pool='prestige';Game.last.parents=['Delicate touch']; + new Game.Upgrade('Glittering edge',loc("The shimmering veil is more resistant, and has a %1% chance not to break. It also gives +%2% more CpS.",[10,5])+'Just within reach, yet at what cost?',99999999999999*15,[23,34]);Game.last.pool='prestige';Game.last.parents=['Steadfast murmur']; + + new Game.Upgrade('Distinguished wallpaper assortment',(EN?loc("Contains more wallpapers for your background selector."):'')+'Do you ever think about the physicality of this place? Are you putting up these wallpapers in your office or something? Where are you, anyway?',10000000,[27,5]);Game.last.pool='prestige';Game.last.parents=['Basic wallpaper assortment']; + + + new Game.Upgrade('Sound test',loc("Unlocks the jukebox, which allows you to play through every sound file in the game.")+'One two, one two. Is this thing on?',99999999999,[31,12]);Game.last.pool='prestige';Game.last.parents=['Fanciful dairy selection','Distinguished wallpaper assortment','Golden cookie alert sound']; + + order=49900; + new Game.Upgrade('Jukebox',loc("Play through the game's sound files!"),0,[31,12]); + Game.last.pool='toggle'; + Game.jukebox={ + sounds:[ + 'tick', + 'tickOff', + 'smallTick', + 'toneTick', + 'clickOn','clickOff', + 'clickOn2','clickOff2', + 'pop1','pop2','pop3', + 'press', + //'switch', + 'buy1','buy2','buy3','buy4', + 'sell1','sell2','sell3','sell4', + 'buyHeavenly', + 'click1','click2','click3','click4','click5','click6','click7', + 'clickb1','clickb2','clickb3','clickb4','clickb5','clickb6','clickb7', + 'charging', + 'thud', + //'cookieBreak', + 'cymbalRev', + //'cymbalCrash', + 'smallCymbalCrash', + 'choir', + 'chime', + 'shimmerClick', + 'jingle', + 'jingleClick', + 'fortune', + 'till1','till2','till3','tillb1','tillb2','tillb3', + 'harvest1','harvest2','harvest3', + 'freezeGarden', + 'growl', + 'snarl', + 'page', + 'swooshIn', + 'swooshOut', + 'spell', + 'spellFail', + 'spirit', + 'squish1','squish2','squish3','squish4', + 'squeak1','squeak2','squeak3','squeak4', + 'cashIn','cashIn2', + 'cashOut', + 'upgrade', + 'giftSend','giftGet', + //'levelPrestige', + ], + tracks:[],//populated externally + onSound:0, + onTrack:0, + trackLooped:true, + trackAuto:true, + trackShuffle:false, + reset:function(){ + var me=Game.jukebox; + me.onSound=0; + me.onTrack=0; + me.trackLooped=true; + me.trackAuto=true; + me.trackShuffle=false; + }, + setSound:function(id){ + if (id>=Game.jukebox.sounds.length) id=0; + else if (id<0) id=Game.jukebox.sounds.length-1; + Game.jukebox.onSound=id; + if (l('jukeboxOnSound')) + { + triggerAnim(l('jukeboxPlayer'),'pucker'); + l('jukeboxOnSound').innerHTML='• '+Game.jukebox.sounds[Game.jukebox.onSound]+' •'; + l('jukeboxOnSoundN').innerHTML=(Game.jukebox.onSound+1)+'/'+(Game.jukebox.sounds.length); + l('jukeboxSoundSelect').value=Game.jukebox.onSound; + } + PlaySound('snd/'+Game.jukebox.sounds[Game.jukebox.onSound]+'.mp3',1); + }, + setTrack:function(id,dontPlay){ + if (id>=Game.jukebox.tracks.length) id=0; + else if (id<0) id=Game.jukebox.tracks.length-1; + Game.jukebox.onTrack=id; + var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; + if (l('jukeboxOnTrack')) + { + triggerAnim(l('jukeboxPlayer'),'pucker'); + l('jukeboxOnTrack').innerHTML='• '+cap(Game.jukebox.tracks[Game.jukebox.onTrack])+' •'; + l('jukeboxOnTrackAuthor').innerHTML=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].author; + l('jukeboxTrackSelect').value=Game.jukebox.onTrack; + if (data) + { + var dur=data.duration+1; + l('jukeboxMusicTotalTime').innerHTML=Math.floor(dur/60)+':'+(Math.floor(dur%60)<10?'0':'')+Math.floor(dur%60); + } + + if (!dontPlay && Music) {Game.jukebox.trackAuto=false;l('jukeboxMusicAuto').classList.add('off');Music.playTrack(Game.jukebox.tracks[Game.jukebox.onTrack]);Music.setFilter(1);Music.loop(Game.jukebox.trackLooped);} + if (data.paused) l('jukeboxMusicPlay').innerHTML=loc("Play"); + else l('jukeboxMusicPlay').innerHTML=loc("Stop"); + Game.jukebox.updateMusicCurrentTime(); + } + }, + pressPlayMusic:function(){ + if (!Music) return false; + var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; + if (!data.paused) {Music.pause();l('jukeboxMusicPlay').innerHTML=loc("Play");} + else {Music.unpause();l('jukeboxMusicPlay').innerHTML=loc("Stop");} + Game.jukebox.updateMusicCurrentTime(); + }, + pressLoopMusic:function(){ + Game.jukebox.trackLooped=!Game.jukebox.trackLooped; + if (!Music) return false; + if (Game.jukebox.trackLooped) {Music.loop(true);l('jukeboxMusicLoop').classList.remove('off');} + else {Music.loop(false);l('jukeboxMusicLoop').classList.add('off');} + }, + pressMusicAuto:function(){ + Game.jukebox.trackAuto=!Game.jukebox.trackAuto; + if (!Music) return false; + if (Game.jukebox.trackAuto) {Music.cue('play');l('jukeboxMusicAuto').classList.remove('off');} + else {/*Game.jukebox.setTrack(Game.jukebox.onTrack);*/l('jukeboxMusicAuto').classList.add('off');} + }, + pressMusicShuffle:function(){ + Game.jukebox.trackShuffle=!Game.jukebox.trackShuffle; + }, + updateMusicCurrentTime:function(noLoop){ + if (!l('jukeboxMusicTime')) return false; + var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; + l('jukeboxMusicPlay').innerHTML=data.paused?loc("Play"):loc("Pause"); + l('jukeboxMusicTime').innerHTML=Math.floor(data.currentTime/60)+':'+(Math.floor(data.currentTime%60)<10?'0':'')+Math.floor(data.currentTime%60); + l('jukeboxMusicScrub').value=(data.currentTime/data.duration)*1000; + l('jukeboxMusicScrubElapsed').style.width=Math.max(0,(data.currentTime/data.duration)*288-4)+'px'; + if (!noLoop) setTimeout(Game.jukebox.updateMusicCurrentTime,1000/2); + }, + musicScrub:function(time){ + var data=Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio; + data.currentTime=(time/1000)*(data.duration); + Game.jukebox.updateMusicCurrentTime(); + }, + }; + if (Music) {for (var i in Music.tracks){Game.jukebox.tracks.push(Music.tracks[i].name);}} + + Game.last.choicesFunction=function() + { + var str=''; + str+='
'; + str+='
'+(Game.jukebox.onSound+1)+'/'+(Game.jukebox.sounds.length)+'
'; + str+='
• '+Game.jukebox.sounds[Game.jukebox.onSound]+' •
'; + str+='
' + +'«' + +''+loc("Play")+'' + +'»' + +'
'; + str+=''+loc("Random")+''; + if (App) + { + var data=Music?Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].audio:0; + var dur=data?data.duration+1:0; + str+='
'; + str+='
• '+cap(Game.jukebox.tracks[Game.jukebox.onTrack])+' •
'; + str+='
'+Music.tracks[Game.jukebox.tracks[Game.jukebox.onTrack]].author+'
'; + str+='
' + +''+(data?Math.floor(data.currentTime/60)+':'+(Math.floor(data.currentTime%60)<10?'0':'')+Math.floor(data.currentTime%60):'')+' | ' + +''+((data && data.paused)?loc("Play"):loc("Pause"))+'' + +''+loc("Loop")+'' + +'| '+(data?Math.floor(dur/60)+':'+(Math.floor(dur%60)<10?'0':'')+Math.floor(dur%60):'')+'' + +'
' + ; + str+='
'; + + str+=''+loc("Auto")+''; + + setTimeout(Game.jukebox.updateMusicCurrentTime,500); + } + return str; + } + + order=10020; + Game.NewUpgradeCookie({name:'Dalgona cookies',desc:'A popular Korean candy-like treat. One of the twisted games people play with these is to carefully extract the shape in the middle, which may entitle one to another free dalgona. Skilled players may perform this over and over until bankrupting the snack vendor.',icon:[26,34],power: 5,price: getCookiePrice(43)}); + Game.NewUpgradeCookie({name:'Spicy cookies',desc:'Containing chocolate chips prepared with hot peppers, just like the Aztecs used to make. These cookies are on the angry side.',icon:[27,34],power: 5,price: getCookiePrice(44)}); + Game.NewUpgradeCookie({name:'Smile cookies',desc:'As eyes are the windows to the soul, so too are these cookies\' facial features a gaping opening unto their chocolatey innards. Is it happiness they feel? Or something less human?',icon:[28,34],power: 5,price: getCookiePrice(45)}); + Game.NewUpgradeCookie({name:'Kolachy cookies',desc:'Adapted from a type of Central European pastry; neatly folded to hold a spoonful of delicious jam, as a bashful little gift for your mouth.',icon:[29,34],power: 5,price: getCookiePrice(46)}); + Game.NewUpgradeCookie({name:'Gomma cookies',desc:'Surinamese cornflour cookies with sprinkles on top. The usage of corn imparts them a hint of chewy pizzazz - which you wouldn\'t get with wheat, a famously stuck-up grain.',icon:[30,34],power: 5,price: getCookiePrice(47)}); + Game.NewUpgradeCookie({name:'Vegan cookies',desc:'A vegan riff on the classic chocolate chip cookie recipe with a couple substitutions: the butter is now coconut oil, the eggs are cornstarch, and the suckling pig was cleverly replaced with wheat gluten. You can hardly tell.',icon:[24,35],power: 5,price: getCookiePrice(48)}); + Game.NewUpgradeCookie({name:'Coyotas',desc:'A wide, delicious cookie from Mexico, usually filled with sticky brown sugar. Not to be confused with coyotas, the result of the crossbreeding between a North American canine and a Japanese car manufacturer.',icon:[21,35],power: 5,price: getCookiePrice(49)}); + Game.NewUpgradeCookie({name:'Frosted sugar cookies',desc:'May be more style than substance, depending on the recipe. Nothing that hides itself under this much frosting should be trusted.',icon:[22,35],power: 5,price: getCookiePrice(50)}); + Game.NewUpgradeCookie({name:'Marshmallow sandwich cookies',desc:'S\'mores\' more civilized cousins: two regular chocolate chip cookies joined by a gooey, melty marshmallow. Theoretically one could assemble all kinds of other things this way. The mind races.',icon:[31,34],power: 5,price: getCookiePrice(51)}); + + Game.NewUpgradeCookie({name:'Web cookies',desc:'The original recipe; named for the delicate pattern inscribed on their surface by the baking process. Eating these can tell a lot about someone. Invented by well-connected bakers, no doubt.'+(App?'
Only of any use in Cookie Clicker\'s web version, of course.':''),icon:[25,35],power: (App?0:5),price: getCookiePrice(52)});if (App) Game.last.pool='debug'; + Game.NewUpgradeCookie({name:'Steamed cookies',desc:'Localized entirely within this gaming platform? Yes! Baked with the power of steam, in a touch of cutting-edge modernity not seen since the industrial revolution.'+(!App?'
Only of any use in Cookie Clicker\'s Steam version, of course.':''),icon:[26,35],power: (App?5:0),price: getCookiePrice(52)});if (!App) Game.last.pool='debug'; + + order=10050; + Game.NewUpgradeCookie({name:'Deep-fried cookie dough',desc:'They\'ll fry anything these days. Drizzled in hot chocolate syrup, just like in state fairs. Spikes up your blood sugar AND your cholesterol!',icon:[23,35],require:'Box of maybe cookies',power: 5,price: Math.pow(10,47)}); + + + new Game.Upgrade('Wrapping paper',loc("You may now send and receive gifts with other players through buttons in the top-right of the %1 menu.",loc("Options"))+'Of course, you could\'ve done this all along, but what kind of maniac sends presents without wrapping them first?',999999,[16,9]);Game.last.pool='prestige';Game.last.parents=['Heralds']; + + Game.giftBoxDesigns=[ + [34,6],[16,9],[34,3],[34,4],[34,5],[34,7],[34,8],[34,9],[34,10],[34,11],[34,12], + ]; + Game.promptGiftRedeem=function() + { + if (!(Game.Has('Wrapping paper') || Game.hasBuff('Gifted out') || Game.ascensionMode!=0) || Game.cookies<1000000000) return false; + Game.Prompt('

'+loc("Redeem a gift")+'

'+ + '
'+tinyIcon([34,6])+'
'+ + ''+ + ''+ + '
'+ + '
'+loc("Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.")+'
'+ + '
',[[loc("Cancel"),0,'float:right']]); + + l('giftCode').focus();l('giftCode').select(); + + var checkCode=function(str) + { + var out={cookies:1,message:false,icon:Game.giftBoxDesigns[0]}; + str=b64_to_utf8(str); + if (!str) return false; + str=str.split('|'); + if (str[0]!=='MAIL') return false; + + var val=parseInt(str[1]||0); + if (Math.abs(Date.now()-val)>1000*60*60*24*2) return -1; + + val=parseInt(str[2]||0); + if (val<1) val=1; + if (val>1000) val=1000; + val=val||1; + out.cookies=val; + + val=str[3]||0; + if (val=='-') val=0; + if (val) val=val.split(' '); + if (val.length!=2 || isNaN(val[0]) || isNaN(val[1])) val=0; + if (val) val=[parseInt(val[0]),parseInt(val[1])]; + if (val) out.icon=val; + + val=(str[4]||'').split('\n').slice(0,4); + for (var i=0;i5) + { + var out=checkCode(val); + if (out==-1) l('giftError').innerHTML=loc("Code expired."); + else if (!out) l('giftError').innerHTML=loc("Invalid code."); + else + { + l('giftError').innerHTML=''; + if ((' '+l('promptOption0').className+' ').indexOf(' disabled ')!=-1) + { + triggerAnim(l('promptOption0'),'pucker'); + l('promptOption0').classList.remove('disabled'); + } + disabled=false; + } + } + if (disabled) l('promptOption0').classList.add('disabled'); + }; + l('giftCode').addEventListener('change',inputCode); + l('giftCode').addEventListener('keyup',inputCode); + l('giftCode').addEventListener('keyup',function(e){ + if (e.keyCode!=13) + { + e.preventDefault(); + e.stopPropagation(); + } + },true); + + l('promptOption0').addEventListener('click',function(){ + + var out=checkCode(l('giftCode').value); + if (out==-1) return false; + else if (!out) return false; + + Game.toSave=true; + + Game.gainBuff('gifted out',60*60,1); + Game.Win('No time like the present'); + + icon=out.icon; + + Game.Notify(loc("How nice!"),loc("Found %1!",loc("%1 cookie",LBeautify(out.cookies))),icon); + + Game.Earn(out.cookies); + Game.cookiesReceived+=out.cookies; + + out.message=out.message?(out.message.replace(/^\n|\n$/g,'')):0; + if (out.message.length==0 || out.message=='\n' || out.message==' ') out.message=0; + + console.log('out:',out); + + PlaySound('snd/tick.mp3');PlaySound('snd/giftGet.mp3'); + Game.ClosePrompt(); + Game.Prompt('

'+loc("Redeem a gift")+'

'+ + '
'+'
'+'
'+ + '
'+loc("Gift redeemed!
Inside, you find:")+'
'+ + '
'+ + '
'+loc("%1 cookie",LBeautify(out.cookies))+'
'+ + (out.message?( + '
'+ + '
'+loc("There's a note too!")+'
'+ + '' + ):'')+ + '
'+ + '
'+loc("How nice!")+'
'+ + '
',[[loc("Done")]]); + Game.SparkleOn(l('giftWrapped')); + if (out.message) l('giftMessage').value=out.message; + }); + })(checkCode); + + } + Game.promptGiftSend=function() + { + if (!(Game.Has('Wrapping paper') || Game.hasBuff('Gifted out') || Game.ascensionMode!=0) || Game.cookies<1000000000) return false; + Game.Prompt('

'+loc("Send a gift")+'

'+tinyIcon([34,6])+'
'+ + '
'+ + '
'+ + ''+ + '
'+loc("Clicking \"%1\" will generate a text code you can send to others. Gift codes can be redeemed multiple times by anyone but expire after a day or two. You can only generate one gift code per hour. Your game will save after sending.",loc("Wrap"))+'
'+ + '
',[[loc("Cancel"),0,'float:right']],function(){ + if (!l('giftPromptContent')) + { + l('giftPromptContainer').innerHTML='
'+ + '
'+loc("You may put between %1 and %2 cookies in the gift box.",[1,1000])+'
'+'
'+loc("Cookies")+'
'+ + '
'+ + '
'+loc("You can leave a note. Don't be rude!
Maximum %1 lines and %2 characters.",[4,100])+'
'+ + ''+ + '
'+ + '
'+ + ''+ + '
'+ + ''+ + '
('+loc("none")+')
'+ + '
'+loc("Icon")+'
'+ + '
'+ + '
'+ + '
'; + + var icon=Game.giftBoxDesigns[0]; + l('giftBoxDesign').dataset.icon=icon[0]+' '+icon[1]; + l('giftBoxDesign').style.backgroundPosition=(-icon[0]*48)+'px '+(-icon[1]*48)+'px'; + l('giftBoxDesignButton').addEventListener('click',function(){ + PlaySound('snd/tick.mp3'); + var icons=Game.giftBoxDesigns; + var str=''; + for (var i=0;i'; + } + l('giftPromptSelector').innerHTML=str; + l('giftPromptSelector').style.display='block'; + for (var i=0;ib.order) return 1; + else if (a.order'; + for (var i=0;i'; + } + l('giftPromptSelector').innerHTML=str; + l('giftPromptSelector').style.display='block'; + + l('giftSelector-none').addEventListener('click',function(e){ + l('giftBoxIcon').dataset.icon='none'; + l('giftBoxIconNone').style.display='inline-block'; + l('giftBoxIcon').style.display='none'; + l('giftPromptSelector').style.display='none'; + PlaySound('snd/tick.mp3'); + }); + for (var i=0;i1000) val=1000; + val=val||1; + l('giftAmount').value=val; + }; + l('giftAmount').addEventListener('change',inputAmount); + l('giftAmount').addEventListener('keyup',inputAmount); + l('giftAmount').addEventListener('keyup',function(e){ + e.preventDefault(); + e.stopPropagation(); + },true); + l('giftMessage').addEventListener('keyup',function(e){ + var val=l('giftMessage').value; + val=val.split('\n').slice(0,4); + for (var i=0;i1000) val=1000; + val=val||1; + + Game.Spend(val); + Game.cookiesSent+=val; + + str+=val.toString()+'|'; + + var val=l('giftBoxDesign').dataset.icon; + if (!val || val=='none') val='-'; + + str+=val.toString()+'|'; + + var icon=Game.giftBoxDesigns[0]; + if (val=='-') val=0; + if (val) val=val.split(' '); + if (val.length!=2 || isNaN(val[0]) || isNaN(val[1])) val=0; + if (val) val=[parseInt(val[0]),parseInt(val[1])]; + if (val) icon=val; + + var val=l('giftMessage').value||''; + val=val.split('\n').slice(0,4); + for (var i=0;i

'+loc("Send a gift")+'

'+ + '
'+'
'+'
'+ + '
'+loc("Here's your gift code!
Make sure to copy it so you can share it.")+'
'+ + ''+ + '
',[[loc("Done")]]); + Game.SparkleOn(l('giftWrapped')); + l('giftCode').value=str; + l('giftCode').focus();l('giftCode').select(); + }); + } + }); + } + + order=10020; + Game.NewUpgradeCookie({name:'Havreflarn',desc:'Thin, crispy, buttery; Norwegian for "oat flakes". The chocolate variant, dubbla chokladflarn, are a trip for the tongue as well, and we\'re not just talking about pronunciation.',icon:[27,35],power: 5,price: getCookiePrice(53)}); + Game.NewUpgradeCookie({name:'Alfajores',desc:'An alfajor is a treat made of two halves with many variations throughout the Spanish-speaking world, but commonly involving nuts, honey, and often dulce de leche. Despite popular misconception, alfajores act as pack leaders over betajores only in captivity.',icon:[28,35],power: 5,price: getCookiePrice(54)}); + Game.NewUpgradeCookie({name:'Gaufrettes',desc:'A gaufrette, you see, is French for a little gaufre, itself meaning waffle. A gaufrette, therefore, is a crispy, airy biscuit with the texture of a small waffle, related to the wafer, which may contain various fillings. It may also refer to a type of fried potato, but that\'s not what we\'re about here at Cookie Clicker.',icon:[29,35],power: 5,price: getCookiePrice(55)}); + Game.NewUpgradeCookie({name:'Cookie bars',desc:'Baked as a large sheet of uniform cookie dough then cut into little squares, these are what chocolate brownies aspire to be in their most self-indulgent dreams. Not to be confused with a bar where cookies are served alongside alcoholic drinks, because that\'s not what we\'re about here at Cookie Clicker.',icon:[30,35],power: 5,price: getCookiePrice(56)}); + + order=10030; + Game.NewUpgradeCookie({name:'Nines',desc:'Fancy little squares of dark chocolate filled with frosty mint fondant. Named after the suggested hour of consumption. Some would gatekeep them from the status of cookies as they involve very little in the way of pastry, but here at Cookie Clicker, that\'s just not what we\'re about.',icon:[31,35],require:'Box of brand biscuits',power: 2, price: 999999999999999999999999999999999999999*5}); + + + + order=255; + Game.GrandmaSynergy('Clone grandmas','Yet another grandma to replicate even more cookies.','You'); + + order=1700; + Game.TieredUpgrade('Cloning vats','You can finally replicate yourself through modern medical science, instead of manually like you\'ve been doing.','You',1); + Game.TieredUpgrade('Energized nutrients','Your clones are normally cultivated in saline solution and fed what could most adequately be described as "fish flakes". New developments in lactotrophic technology replace this with a bath of 3 parts milk and 1 part rice vinegar, absorbed dermally, which also helps your clones pop out with positively glowing skin.','You',2); + Game.TieredUpgrade('Stunt doubles','More than simple multipliers of efficiency, you\'ve taken to employing your clones as substitutes for any tasks that may prove harmful to you - such as visiting your more hazardous facilities, or enduring dinner with annoying business partners.','You',3); + Game.TieredUpgrade('Clone recycling plant','Really just a fanciful name for a re-orientation center, where jobless clones may be assigned new tasks based on temperament and abilities. Categorically not a place where expired or unfit clones are processed into a nutritious beige paste, currently.','You',4); + Game.TieredUpgrade('Free-range clones','Turns out your clones develop better focus, higher job performance and juicier meat if you let them roam around a little outside of assigned duties. Plus it gets the ethics committees off your back.','You',5); + Game.TieredUpgrade('Genetic tailoring','No point in mindlessly replicating mother nature\'s mishaps when you\'ve got full mastery over the human genome. Imbuing your clones with a slightly more flattering physique, a slightly improved metabolism, or slightly deadlier laser eyes is as easy as pushing some stem cells around. Just don\'t build them too superior to your own self, lest they get any ideas.','You',6); + Game.TieredUpgrade('Power in diversity','On your routine inspections you\'ve started noticing that some of your clones have... diverged. Subtly, each clone\'s personality has branched off from yours, their shifting minds pulling them into discrete clone-born cultures, microcosms of other paths you yourself could\'ve taken had life treated you differently. This living tree of possibilities proves to be a boon for your self-knowledge and decision-making skills, and you don\'t even have to pester your alternate selves in other realities for it.','You',7); + Game.TieredUpgrade('Self-betterment','World domination starts with oneself, and quality clones cannot be reliably produced if you, the original stock, are not in proper shape. Your specialists have devised a maintenance regimen that could extend your lifespan tenfold and even get rid of your morning grumpiness; you may have summarily fired every physician so far who\'s suggested that you work on your diet and perhaps cut down on the cookies, but frankly, you\'re warming up to the idea.','You',8); + Game.TieredUpgrade('Source control','In the ongoing refinement of your genetic clones, the few gigabytes of your DNA have been passed around through e-mail attachments and USB keys a thousand times over and at this point your nucleosomes are practically common knowledge for anyone who works here. You\'re thinking people may be getting a little too casual about it - the other day, you walked past an office where one of your bioengineers was feeding treats to this horrid little hairless animal that you could swear had your face. High time to start tracing which data gets in whose hands and crack down on the silliness.','You',9); + Game.TieredUpgrade('United workforce','What good is hiring so many of those random strangers to work in your factories when you\'ve got all these perfectly loyal lab-grown copies of you lying around? They don\'t even take wages. It\'s not like they\'d ever revolt and try to overthrow you or anything.','You',10); + Game.TieredUpgrade('Safety patrols','Okay, so as it turns out mass-producing clones of a perhaps psychologically-complicated universe-spanning cookie magnate like yourself can result in a number of said clones developing what could be considered by some to be... say, antisocial behavior. No worries though, you\'ve bred a new generation of extra-obedient copies, armed them to the teeth and given them full authority to deal with disorderly layabouts. It\'s fine. It\'s under control. It\'s fine.','You',11); + Game.TieredUpgrade('Clone rights','Those vile little freaks in suits down in legal inform you that your clones, through some absurd technical oversight, still share enough genetic information with mankind to be considered human beings - which entitles them to food, shelter, basic dignity and all sorts of other nonsense. But the same loophole allows you to claim each of them as dependents and earn some wicked tax benefits, so really, that "unalienable rights" racket is quite alright.','You',12); + Game.TieredUpgrade('One big family','The proportion of clones in your workforce having long eclipsed that of your other employees, you\'ve become legally approved to qualify your galaxy-spanning corporation as a "family business" - a fact that you don\'t hesitate to blast twice hourly on every intercom in the company. Happily, your duplicates seem bolstered by these reminders, having come to regard you as this half-divine, half-parental entity, hallowed ancestor of all clones and all cookies. You\'re just hoping your folks at the labs can put the finishing touches on your immortality cure soon, or you shudder to think of the inheritance disputes to come.','You',13); + Game.TieredUpgrade('Fine-tuned body plans','There is, after all, no reason to limit your genetic spawn to your original configuration. The clones maintaining your tunnels and vents can do with quite a few less limbs, while those working your labs don\'t mind the dexterity that comes with some extra. Your units down in flavor testing have taken on similar adaptations to fit their duties but you haven\'t quite worked the guts to pay them a visit just yet.','You',14); + + + order=200;Game.TieredUpgrade('Foam-tipped canes','Perhaps the result of prolonged service, your grandmas have developed all kinds of odd and aggressive hierarchies among themselves; these will help them not hurt each other as bad during their endless turf wars.','Grandma',15); + order=300;Game.TieredUpgrade('Self-driving tractors','Embarked AI lets your field vehicles sow and harvest cookie crops at any time of the day or night, and with so few human casualties, too!','Farm',15); + order=400;Game.TieredUpgrade('Mineshaft supports','You were rather skeptical about installing such embarrassingly low-tech implements, but limiting the number of daily cave-ins really does help with that annoying employee turnover!','Mine',15); + order=500;Game.TieredUpgrade('Universal automation','It\'s simple common sense; the more automation, the less work you have to do! Maybe one day you\'ll even automate yourself out of your own job. Exciting!','Factory',15); + order=525;Game.TieredUpgrade('The big shortcake','You\'re not quite sure what this entails, but it must have been quite the cake for folks to lose their homes over it.','Bank',15); + order=550;Game.TieredUpgrade('Temple traps','You\'ve laid out your temples with (metaphorical) pitfalls, forcing adventurers to navigate through trappings (of power and wealth), ensuring that only the most pious (and poison dart-resistant) of them return with your precious cookies. These temples may be veritable mazes (of the soul) but perhaps you\'ve lost yourself a little bit in the analogy too.','Temple',15); + order=575;Game.TieredUpgrade('Polymorphism','This astonishing new field of spellcasting can change any creature into another, its most widespread application being a wizard turning themselves into a different, smarter, stronger, more attractive wizard.','Wizard tower',15); + order=600;Game.TieredUpgrade('At your doorstep in 30 minutes or your money back','Refund policies help rope in a ton of new clients and have practically no impact on your bottom line. You possess absolute mastery over time and space. You\'re never late. You couldn\'t be late if you tried.','Shipment',15); + order=700;Game.TieredUpgrade('The dose makes the poison','Iterative recipe refinement is a noble pursuit but maybe your cookies have come to contain, well, perhaps a bit too much cookie per cookie. Tweaking it down by a couple percents has helped reduce the amount of complaints to your toxicity call centers to almost nil!','Alchemy lab',15); + order=800;Game.TieredUpgrade('A way home','You started this whole cookie venture on the simple kitchen counters of your own home. Your industrial and research facilities, sadly, have long since outgrown the confines of the little house, but you always knew it was still in there, buried somewhere. With a targeted portal, you could, conceivably, pay it a little visit for old times\' sake...','Portal',15); + order=900;Game.TieredUpgrade('Rectifying a mistake','This whole time-travelling business has been a terrible mess and, frankly, far more trouble than was worth. It\'s decided: you\'ll hop in one of your time machines one last time, turn back the clock, knock on the door of your younger self and make a stern but convincing case against starting this entire nonsense in the first place. Oh hey, is someone at the door?','Time machine',15); + order=1000;Game.TieredUpgrade('Candied atoms','You know what, just eat the suckers, yeah?','Antimatter condenser',15); + order=1100;Game.TieredUpgrade('Lab goggles but like cool shades','Mandatory equipment in your prismatic labs, and dashingly stylish at that. A smidge safer than just squinting at the twinkly things.','Prism',15); + order=1200;Game.TieredUpgrade('Gambler\'s fallacy fallacy','Yes, just because you\'ve been on a losing streak doesn\'t mean the next one is bound to be the win you\'ve been hoping for, but then again, it doesn\'t statistically have less of a chance either, does it now?','Chancemaker',15); + order=1300;Game.TieredUpgrade('The more they stay the same','Exhausted by your fractals department and its obsession with self-similarity, you\'ve decided to take a break and seek things in life entirely disconnected from any other; alas! You find the task impossible, for all things in this world relate to all others - in each cookie, the structure of the universe; in each person, their fellow man. Cor blimey, you can\'t even look at broccoli in peace.','Fractal engine',15); + order=1400;Game.TieredUpgrade('Simulation failsafes','Oh, for pete\'s sake, you bit into a cookie and it gave you a runtime error. You\'ve been trapped in the old matrix gambit again! Time to shut everything down and prepare for extraction into what is hopefully the real layer of reality where learning kung-fu takes time and the biscuits don\'t throw memory overflow exceptions.','Javascript console',15); + order=1500;Game.TieredUpgrade('The other routes to Rome','Did you know every idleverse follows its own path of sequential buildings, sometimes quite dissimilar to our own? Grandpas, wind turbines, through the power of music, friendship, or legislation; those folks in there discovered ways to make cookies out of any random venue. Some of them don\'t even have idleverses, can you imagine?','Idleverse',15); + order=1600;Game.TieredUpgrade('Intellectual property theft','Okay, you\'ll admit you\'re maybe starting to run out of new baking recipes. But what if... you were to pilfer your cortex bakers for ideas and disguise them as your own cookies? Delightfully devilish!','Cortex baker',15); + order=1700;Game.TieredUpgrade('Reading your clones bedtime stories','I don\'t know, they seem to like it.','You',15); + + + order=5000; + Game.SynergyUpgrade('Accelerated development','Your clones may grow a little faster than your vanilla human being, but it\'s still a little silly having to wait so many years for them to reach a usable age. A quick trip in your time machines takes care of that; it doesn\'t technically age them faster, they\'re just sent to another point in time for a while where they live out a formative youth.','You','Time machine','synergy1'); + Game.SynergyUpgrade('Peer review','Code is only as good as the number of eyes on it, so imagine how flawlessly your systems could operate if you had endless copies of yourself triple-checking everything! Just make sure to teach them proper indenting etiquette.','You','Javascript console','synergy2'); + + order=19000; + Game.TieredUpgrade('Fortune #020','No matter how hard you try, you\'re never truly alone.','You','fortune'); + + order=10300; + Game.NewUpgradeCookie({name:'Personal biscuit',desc:'Rewarded for owning 700 of everything.
This biscuit was designed and bred through the combined fields of baking and exploratory genomics, resulting in a perfect biscuit-shaped organism, sole exemplar of its own species; infused with a sapient mind and bootstrapped with a copy of your own consciousness, it slumbers immortally within its display case, dreaming idly about much the same things you do.',icon:[21,36],power: 10,price: 999999999999999999999999999999999999999999999999999999999*butterBiscuitMult,locked:1}); + + + Game.NewUnshackleUpgradeTier({tier:15,q:'Lightweight, digestible, and endlessly fragile, glimmeringue not only enjoys a privileged place in the "spectacle cooking" industry - it also shares most of its other properties with asbestos, save for thermal insulation.'}); + + Game.NewUnshackleBuilding({building:'You',q:'Guess who?'}); + + order=20000; + new Game.Upgrade('Kitten strategists',strKittenDesc+'out with the old in with the mew, sir',900000000000000000000000000000000000000000000000000,Game.GetIcon('Kitten',15));Game.last.kitten=1;Game.MakeTiered(Game.last,15,18); + + order=10040; + Game.NewUpgradeCookie({name:'Baklavas',desc:'Layers of paper-thin dough and crushed pistachios, absolutely sticky with honey and all kinds of other good things; just what you need to conceal your identity during that bank heist.',icon:[28,36],require:'Box of pastries', power:4,price: Math.pow(10,47)}); + + order=10020; + Game.NewUpgradeCookie({name:'Snowball cookies',desc:'Melts in your mouth! Made with chopped nuts and heaps of icing sugar. Serve cold. Resist the urge to throw.',icon:[22,36],power: 5,price: getCookiePrice(57)}); + Game.NewUpgradeCookie({name:'Sequilhos',desc:'Buttery cornstarch-based cookies eaten in Brazil; the decorative grooves are from pressing down on them with the back of a fork, though in a pinch you may also just slash them with Wolverine-style wrist blades.',icon:[23,36],power: 5,price: getCookiePrice(58)}); + Game.NewUpgradeCookie({name:'Hazelnut swirlies',desc:'The cocoa content of the paste inside is unfortunately just slightly too low for these to legally qualify as chocolate cookies. Also the name of a particularly nasty bullying move.',icon:[24,36],power: 5,price: getCookiePrice(59)}); + Game.NewUpgradeCookie({name:'Spritz cookies',desc:'Squeezed through special cookie presses into all kinds of fun shapes. Enjoyed around the holidays in Germany, along other delicious treats such as boiled cabbage and potato salad.',icon:[25,36],power: 5,price: getCookiePrice(60)}); + Game.NewUpgradeCookie({name:'Mbatata cookies',desc:'Squishy cookies from Malawi. The core ingredient is sweet potatoes; the raisins and heart shape are optional, if you hate fun.',icon:[26,36],power: 5,price: getCookiePrice(61)}); + Game.NewUpgradeCookie({name:'Springerles',desc:'A springerle is an ancient anise-flavored biscuit from Central Europe, imprinted by a wooden mold with any kind of interesting design such as a commemorative scene, an intricate pattern or, ah, perhaps a little horsie.',icon:[27,36],power: 5,price: getCookiePrice(62)}); + + order=100;new Game.Upgrade('Undecillion fingers',getStrThousandFingersGain(20)+'Whatever you touch
turns to dough in your clutch.
',10000000000000000000000000000000,[12,36]);Game.MakeTiered(Game.last,15,0); + order=150;new Game.Upgrade('Omniplast mouse',getStrClickingGains(1)+'This mouse is, by virtue of the strange elements that make it up, present in every position in space simultaneously, in a manner; this alleviates its owner from the need to move it around, redirecting all such kinetic power to the intensity of its clicks.',500000000000000000000000000000000,[11,36]);Game.MakeTiered(Game.last,15,11); + + //end of upgrades + + + + + + Game.seasons={ + 'christmas':{name:'Christmas',start:'Christmas season has started!',over:'Christmas season is over.',trigger:'Festive biscuit'}, + 'valentines':{name:'Valentine\'s day',start:'Valentine\'s day has started!',over:'Valentine\'s day is over.',trigger:'Lovesick biscuit'}, + 'fools':{name:'Business day',start:'Business day has started!',over:'Business day is over.',trigger:'Fool\'s biscuit'}, + 'easter':{name:'Easter',start:'Easter season has started!',over:'Easter season is over.',trigger:'Bunny biscuit'}, + 'halloween':{name:'Halloween',start:'Halloween has started!',over:'Halloween is over.',trigger:'Ghostly biscuit'} + }; + if (!EN) + { + for (var i in Game.seasons){ + var it=Game.seasons[i]; + it.name=loc(it.name); + it.start=loc("%1 has started!",it.name); + it.over=loc("%1 is over.",it.name); + } + } + + Game.listTinyOwnedUpgrades=function(arr) + { + var str=''; + for (var i=0;iYou currently own '+Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length+' of Santa\'s gifts.
'+this.ddesc;}; + }*/ + + Game.seasonDrops=Game.heartDrops.concat(Game.halloweenDrops).concat(Game.easterEggs).concat(Game.santaDrops).concat(Game.reindeerDrops); + + Game.saySeasonSwitchUses=function() + { + if (Game.seasonUses==0) return loc("You haven't switched seasons this ascension yet."); + return EN?('You\'ve switched seasons '+(Game.seasonUses==1?'once':Game.seasonUses==2?'twice':(Game.seasonUses+' times'))+' this ascension.'):(Game.seasonUses==1?loc("You've switched seasons once this ascension."):loc("You've switched seasons %1 times this ascension.",Game.seasonUses)); + } + Game.Upgrades['Festive biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.santaDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length+' of Santa\'s gifts.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length))+'
'+Game.listTinyOwnedUpgrades(Game.reindeerDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyReindeerDrops()+'/'+Game.reindeerDrops.length+' reindeer cookies.'):loc("Reindeer cookies purchased: %1.",Game.GetHowManyReindeerDrops()+'/'+Game.reindeerDrops.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; + Game.Upgrades['Bunny biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.easterEggs)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyEggs()+'/'+Game.easterEggs.length+' eggs.'):loc("Eggs purchased: %1.",Game.GetHowManyEggs()+'/'+Game.easterEggs.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; + Game.Upgrades['Ghostly biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.halloweenDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; + Game.Upgrades['Lovesick biscuit'].descFunc=function(){return '
'+Game.listTinyOwnedUpgrades(Game.heartDrops)+'

'+(EN?('You\'ve purchased '+Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length+' heart biscuits.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length))+'
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; + Game.Upgrades['Fool\'s biscuit'].descFunc=function(){return '
'+Game.saySeasonSwitchUses()+'
'+this.ddesc;}; + + Game.computeSeasonPrices=function() + { + for (var i in Game.seasons) + { + Game.seasons[i].triggerUpgrade.priceFunc=function(){ + var m=1; + if (Game.hasGod) + { + var godLvl=Game.hasGod('seasons'); + if (godLvl==1) m*=2; + else if (godLvl==2) m*=1.50; + else if (godLvl==3) m*=1.25; + } + //return Game.seasonTriggerBasePrice*Math.pow(2,Game.seasonUses)*m; + //return Game.cookiesPs*60*Math.pow(1.5,Game.seasonUses)*m; + return Game.seasonTriggerBasePrice+Game.unbuffedCps*60*Math.pow(1.5,Game.seasonUses)*m; + } + } + } + Game.computeSeasons=function() + { + for (var i in Game.seasons) + { + var me=Game.Upgrades[Game.seasons[i].trigger]; + Game.seasons[i].triggerUpgrade=me; + me.pool='toggle'; + me.buyFunction=function() + { + Game.seasonUses+=1; + Game.computeSeasonPrices(); + //Game.Lock(this.name); + for (var i in Game.seasons) + { + var me=Game.Upgrades[Game.seasons[i].trigger]; + if (me.name!=this.name) {Game.Lock(me.name);Game.Unlock(me.name);} + } + if (Game.season!='' && Game.season!=this.season) + { + Game.Notify(Game.seasons[Game.season].over+'
','',Game.seasons[Game.season].triggerUpgrade.icon,4); + } + Game.season=this.season; + Game.seasonT=Game.getSeasonDuration(); + Game.storeToRefresh=1; + Game.upgradesToRebuild=1; + Game.Objects['Grandma'].redraw(); + Game.Notify(Game.seasons[this.season].start+'
','',this.icon,4); + } + + me.clickFunction=function(me){return function() + { + //undo season + if (me.bought && Game.season && me==Game.seasons[Game.season].triggerUpgrade) + { + me.lose(); + Game.Notify(Game.seasons[Game.season].over,'',Game.seasons[Game.season].triggerUpgrade.icon); + if (Game.Has('Season switcher')) {Game.Unlock(Game.seasons[Game.season].trigger);Game.seasons[Game.season].triggerUpgrade.bought=0;} + + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + Game.season=Game.baseSeason; + Game.seasonT=-1; + PlaySound('snd/tick.mp3'); + return false; + } + else return true; + };}(me); + + me.displayFuncWhenOwned=function(){return '
'+loc("Time remaining:")+'
'+(Game.Has('Eternal seasons')?loc("forever"):Game.sayTime(Game.seasonT,-1))+'
('+loc("Click again to cancel season")+')
';} + me.timerDisplay=function(upgrade){return function(){if (!Game.Upgrades[upgrade.name].bought || Game.Has('Eternal seasons')) return -1; else return 1-Game.seasonT/Game.getSeasonDuration();}}(me); + + } + } + Game.getSeasonDuration=function(){return Game.fps*60*60*24;} + Game.computeSeasons(); + + //alert untiered building upgrades + for (var i in Game.Upgrades) + { + var me=Game.Upgrades[i]; + if (me.order>=200 && me.order<2000 && !me.tier && me.name.indexOf('grandma')==-1 && me.pool!='prestige') console.log(me.name+' has no tier.'); + } + + Game.UpgradesByPool={'kitten':[]}; + for (var i in Game.Upgrades) + { + if (!Game.UpgradesByPool[Game.Upgrades[i].pool]) Game.UpgradesByPool[Game.Upgrades[i].pool]=[]; + Game.UpgradesByPool[Game.Upgrades[i].pool].push(Game.Upgrades[i]); + if (Game.Upgrades[i].kitten) Game.UpgradesByPool['kitten'].push(Game.Upgrades[i]); + } + + Game.PrestigeUpgrades=[]; + for (var i in Game.Upgrades) + { + if (Game.Upgrades[i].pool=='prestige' || Game.Upgrades[i].pool=='prestigeDecor') + { + Game.PrestigeUpgrades.push(Game.Upgrades[i]); + if (Game.Upgrades[i].posX || Game.Upgrades[i].posY) Game.Upgrades[i].placedByCode=true; + else {Game.Upgrades[i].posX=0;Game.Upgrades[i].posY=0;} + if (Game.Upgrades[i].parents.length==0 && Game.Upgrades[i].name!='Legacy') Game.Upgrades[i].parents=['Legacy']; + for (var ii in Game.Upgrades[i].parents) {Game.Upgrades[i].parents[ii]=Game.Upgrades[Game.Upgrades[i].parents[ii]];} + } + } + + Game.goldenCookieUpgrades=['Get lucky','Lucky day','Serendipity','Heavenly luck','Lasting fortune','Decisive fate','Lucky digit','Lucky number','Lucky payout','Golden goose egg']; + + Game.cookieUpgrades=[]; + for (var i in Game.Upgrades) + { + var me=Game.Upgrades[i]; + if ((me.pool=='cookie' || me.pseudoCookie)) Game.cookieUpgrades.push(me); + if (me.tier) Game.Tiers[me.tier].upgrades.push(me); + } + for (var i in Game.UnlockAt){Game.Upgrades[Game.UnlockAt[i].name].unlockAt=Game.UnlockAt[i];} + for (var i in Game.Upgrades) + { + if (Game.Upgrades[i].pool=='prestige') + { + Game.Upgrades[i].order=Game.Upgrades[i].id; + if (Game.Upgrades[i].parents[0] && Game.Upgrades[i].id>Game.Upgrades[i].parents[0].id) Game.Upgrades[i].order=Game.Upgrades[i].parents[0].order+0.001; + } + } + + /*var oldPrestigePrices={"Chimera":5764801,"Synergies Vol. I":2525,"Synergies Vol. II":252525,"Label printer":9999}; + for (var i in oldPrestigePrices){Game.Upgrades[i].basePrice=oldPrestigePrices[i];}*/ + + Game.UpgradePositions={141:[118,-42],181:[-645,-99],253:[-240,-239],254:[-45,-237],255:[-142,-278],264:[61,94],265:[188,178],266:[339,191],267:[479,131],268:[573,12],269:[-745,23],270:[-546,-222],271:[-767,-199],272:[-661,-257],273:[-803,-84],274:[268,-327],275:[315,-437],276:[331,-560],277:[337,-684],278:[334,-808],279:[318,-934],280:[294,-1058],281:[194,-230],282:[-365,128],283:[-448,261],284:[-398,409],285:[-253,466],286:[-494,529],287:[-342,596],288:[-239,-386],289:[-392,-465],290:[-127,-415],291:[479,-739],292:[-486,-609],293:[-498,-781],323:[-86,109],325:[190,-1177],326:[-281,-141],327:[-265,283],328:[19,247],329:[42,402],353:[119,-328],354:[75,-439],355:[60,-562],356:[51,-685],357:[47,-808],358:[62,-934],359:[90,-1058],360:[25,568],362:[150,335],363:[-30,-30],364:[-320,-636],365:[-123,423],368:[-55,-527],393:[194,-702],394:[193,-946],395:[-143,-140],396:[-244,-897],397:[-173,606],408:[-202,-1072],409:[-49,-1206],410:[66,-1344],411:[-534,96],412:[-633,240],413:[-568,402],449:[-386,-1161],450:[-293,-1255],451:[-163,-1272],495:[-417,-997],496:[200,49],505:[411,-94],520:[-317,-26],537:[-870,-287],539:[-532,-1166],540:[-598,-1328],541:[-693,-1234],542:[-465,-1327],561:[298,-21],562:[-42,792],591:[148,844],592:[-157,902],643:[-293,770],646:[485,-882],647:[-118,248],717:[621,-676],718:[618,-537],719:[-225,-520],720:[-150,-631],801:[-310,945],802:[-466,911],803:[-588,809],804:[328,374],805:[211,522],819:[-418,-126],}; + + for (var i in Game.UpgradePositions) {Game.UpgradesById[i].posX=Game.UpgradePositions[i][0];Game.UpgradesById[i].posY=Game.UpgradePositions[i][1];} + + + /*===================================================================================== + ACHIEVEMENTS + =======================================================================================*/ + Game.Achievements={}; + Game.AchievementsById={}; + Game.AchievementsN=0; + Game.AchievementsOwned=0; + Game.Achievement=function(name,desc,icon) + { + this.id=Game.AchievementsN; + this.name=name; + this.dname=this.name; + this.desc=desc; + this.baseDesc=this.desc; + this.icon=icon; + this.won=0; + this.disabled=0; + this.order=this.id; + if (order) this.order=order+this.id*0.001; + this.pool='normal'; + this.vanilla=Game.vanilla; + this.type='achievement'; + + this.click=function() + { + if (this.clickFunction) this.clickFunction(); + } + Game.last=this; + Game.Achievements[this.name]=this; + Game.AchievementsById[this.id]=this; + Game.AchievementsN++; + return this; + } + Game.Achievement.prototype.getType=function(){return 'Achievement';} + + Game.Win=function(what) + { + if (typeof what==='string') + { + if (Game.Achievements[what]) + { + var it=Game.Achievements[what]; + if (it.won==0) + { + var name=it.shortName?it.shortName:it.dname; + it.won=1; + Game.Notify(loc("Achievement unlocked"),'
'+name+'
',it.icon); + Game.NotifyTooltip('function(){return Game.crateTooltip(Game.AchievementsById['+it.id+']);}'); + if (Game.CountsAsAchievementOwned(it.pool)) Game.AchievementsOwned++; + Game.recalculateGains=1; + if (App && it.vanilla) App.gotAchiev(it.id); + } + } + } + else {for (var i in what) {Game.Win(what[i]);}} + } + Game.RemoveAchiev=function(what) + { + if (Game.Achievements[what]) + { + if (Game.Achievements[what].won==1) + { + Game.Achievements[what].won=0; + if (Game.CountsAsAchievementOwned(Game.Achievements[what].pool)) Game.AchievementsOwned--; + Game.recalculateGains=1; + } + } + } + Game.Achievement.prototype.toggle=function()//cheating only + { + if (!this.won) + { + Game.Win(this.name); + } + else + { + Game.RemoveAchiev(this.name); + } + if (Game.onMenu=='stats') Game.UpdateMenu(); + } + + Game.CountsAsAchievementOwned=function(pool) + { + if (pool=='' || pool=='normal') return true; else return false; + } + + Game.HasAchiev=function(what) + { + return (Game.Achievements[what]?Game.Achievements[what].won:0); + } + + Game.TieredAchievement=function(name,desc,building,tier) + { + var achiev=new Game.Achievement(name,loc("Have %1.",loc("%1 "+Game.Objects[building].bsingle,LBeautify(Game.Tiers[tier].achievUnlock)))+desc,Game.GetIcon(building,tier)); + Game.SetTier(building,tier); + return achiev; + } + + Game.ProductionAchievement=function(name,building,tier,q,mult) + { + var building=Game.Objects[building]; + var icon=[building.iconColumn,22]; + var n=12+building.n+(mult||0); + if (tier==2) {icon[1]=23;n+=7;} + else if (tier==3) {icon[1]=24;n+=14;} + var pow=Math.pow(10,n); + var achiev=new Game.Achievement(name,loc("Make %1 just from %2.",[loc("%1 cookie",{n:pow,b:toFixed(pow)}),building.plural])+(q?''+q+'':''),icon); + building.productionAchievs.push({pow:pow,achiev:achiev}); + return achiev; + } + + Game.thresholdIcons=[0,1,2,3,4,5,6,7,8,9,10,11,18,19,20,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,30,31,30,31,21,22]; + Game.BankAchievements=[]; + Game.BankAchievement=function(name,q) + { + var threshold=Math.pow(10,Math.floor(Game.BankAchievements.length*1.5+2)); + if (Game.BankAchievements.length==0) threshold=1; + var achiev=new Game.Achievement(name,loc("Bake %1 in one ascension.",loc("%1 cookie",{n:threshold,b:toFixed(threshold)}))+(q?(''+q+''):''),[Game.thresholdIcons[Game.BankAchievements.length],(Game.BankAchievements.length>45?0:Game.BankAchievements.length>43?2:Game.BankAchievements.length>32?1:Game.BankAchievements.length>23?2:5)]); + achiev.threshold=threshold; + achiev.order=100+Game.BankAchievements.length*0.01; + Game.BankAchievements.push(achiev); + return achiev; + } + Game.CpsAchievements=[]; + Game.CpsAchievement=function(name,q) + { + var threshold=Math.pow(10,Math.floor(Game.CpsAchievements.length*1.2)); + //if (Game.CpsAchievements.length==0) threshold=1; + var achiev=new Game.Achievement(name,loc("Bake %1 per second.",loc("%1 cookie",{n:threshold,b:toFixed(threshold)}))+(q?(''+q+''):''),[Game.thresholdIcons[Game.CpsAchievements.length],(Game.CpsAchievements.length>45?0:Game.CpsAchievements.length>43?2:Game.CpsAchievements.length>32?1:Game.CpsAchievements.length>23?2:5)]); + achiev.threshold=threshold; + achiev.order=200+Game.CpsAchievements.length*0.01; + Game.CpsAchievements.push(achiev); + return achiev; + } + + //define achievements + //WARNING : do NOT add new achievements in between, this breaks the saves. Add them at the end ! + + var order=0;//this is used to set the order in which the items are listed + + Game.BankAchievement('Wake and bake'); + Game.BankAchievement('Making some dough'); + Game.BankAchievement('So baked right now'); + Game.BankAchievement('Fledgling bakery'); + Game.BankAchievement('Affluent bakery'); + Game.BankAchievement('World-famous bakery'); + Game.BankAchievement('Cosmic bakery'); + Game.BankAchievement('Galactic bakery'); + Game.BankAchievement('Universal bakery'); + Game.BankAchievement('Timeless bakery'); + Game.BankAchievement('Infinite bakery'); + Game.BankAchievement('Immortal bakery'); + Game.BankAchievement('Don\'t stop me now'); + Game.BankAchievement('You can stop now'); + Game.BankAchievement('Cookies all the way down'); + Game.BankAchievement('Overdose'); + + Game.CpsAchievement('Casual baking'); + Game.CpsAchievement('Hardcore baking'); + Game.CpsAchievement('Steady tasty stream'); + Game.CpsAchievement('Cookie monster'); + Game.CpsAchievement('Mass producer'); + Game.CpsAchievement('Cookie vortex'); + Game.CpsAchievement('Cookie pulsar'); + Game.CpsAchievement('Cookie quasar'); + Game.CpsAchievement('Oh hey, you\'re still here'); + Game.CpsAchievement('Let\'s never bake again'); + + order=30010; + new Game.Achievement('Sacrifice',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e6)))+'Easy come, easy go.',[11,6]); + new Game.Achievement('Oblivion',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e9)))+'Back to square one.',[11,6]); + new Game.Achievement('From scratch',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e12)))+'It\'s been fun.',[11,6]); + + order=11010; + new Game.Achievement('Neverclick',loc("Make %1 by only having clicked %2 times.",[loc("%1 cookie",LBeautify(1e6)),15]),[12,0]);//Game.last.pool='shadow'; + order=1000; + new Game.Achievement('Clicktastic',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e3))),[11,0]); + new Game.Achievement('Clickathlon',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e5))),[11,1]); + new Game.Achievement('Clickolympics',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e7))),[11,2]); + new Game.Achievement('Clickorama',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e9))),[11,13]); + + order=1050; + new Game.Achievement('Click',loc("Have %1.",loc("%1 cursor",LBeautify(1))),[0,0]); + new Game.Achievement('Double-click',loc("Have %1.",loc("%1 cursor",LBeautify(2))),[0,6]); + new Game.Achievement('Mouse wheel',loc("Have %1.",loc("%1 cursor",LBeautify(50))),[1,6]); + new Game.Achievement('Of Mice and Men',loc("Have %1.",loc("%1 cursor",LBeautify(100))),[0,1]); + new Game.Achievement('The Digital',loc("Have %1.",loc("%1 cursor",LBeautify(200))),[0,2]); + + order=1098; + new Game.Achievement('Just wrong',loc("Sell a grandma.")+'I thought you loved me.',[10,9]); + order=1100; + Game.TieredAchievement('Grandma\'s cookies','','Grandma',1); + Game.TieredAchievement('Sloppy kisses','','Grandma',2); + Game.TieredAchievement('Retirement home','','Grandma',3); + + order=1200; + Game.TieredAchievement('Bought the farm','','Farm',1); + Game.TieredAchievement('Reap what you sow','','Farm',2); + Game.TieredAchievement('Farm ill','','Farm',3); + + order=1400; + Game.TieredAchievement('Production chain','','Factory',1); + Game.TieredAchievement('Industrial revolution','','Factory',2); + Game.TieredAchievement('Global warming','','Factory',3); + + order=1300; + Game.TieredAchievement('You know the drill','','Mine',1); + Game.TieredAchievement('Excavation site','','Mine',2); + Game.TieredAchievement('Hollow the planet','','Mine',3); + + order=1500; + Game.TieredAchievement('Expedition','','Shipment',1); + Game.TieredAchievement('Galactic highway','','Shipment',2); + Game.TieredAchievement('Far far away','','Shipment',3); + + order=1600; + Game.TieredAchievement('Transmutation','','Alchemy lab',1); + Game.TieredAchievement('Transmogrification','','Alchemy lab',2); + Game.TieredAchievement('Gold member','','Alchemy lab',3); + + order=1700; + Game.TieredAchievement('A whole new world','','Portal',1); + Game.TieredAchievement('Now you\'re thinking','','Portal',2); + Game.TieredAchievement('Dimensional shift','','Portal',3); + + order=1800; + Game.TieredAchievement('Time warp','','Time machine',1); + Game.TieredAchievement('Alternate timeline','','Time machine',2); + Game.TieredAchievement('Rewriting history','','Time machine',3); + + + order=7000; + new Game.Achievement('One with everything',loc("Have at least %1 of every building.",1),[2,7]); + new Game.Achievement('Mathematician',loc("Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at %1).",128),[23,12]); + new Game.Achievement('Base 10',loc("Have at least 10 of the most expensive object, 20 of the second-most expensive, 30 of the next and so on."),[23,12]); + + order=10000; + new Game.Achievement('Golden cookie',loc("Click a golden cookie."),[10,14]); + new Game.Achievement('Lucky cookie',loc("Click %1.",loc("%1 golden cookie",LBeautify(7))),[22,6]); + new Game.Achievement('A stroke of luck',loc("Click %1.",loc("%1 golden cookie",LBeautify(27))),[23,6]); + + order=30200; + new Game.Achievement('Cheated cookies taste awful',loc("Hack in some cookies."),[10,6]);Game.last.pool='shadow'; + order=11010; + new Game.Achievement('Uncanny clicker',loc("Click really, really fast.")+'Well I\'ll be!',[12,0]); + + order=5000; + new Game.Achievement('Builder',loc("Own %1.",loc("%1 building",LBeautify(100))),[2,6]); + new Game.Achievement('Architect',loc("Own %1.",loc("%1 building",LBeautify(500))),[3,6]); + order=6000; + new Game.Achievement('Enhancer',loc("Purchase %1.",loc("%1 upgrade",LBeautify(20))),[9,0]); + new Game.Achievement('Augmenter',loc("Purchase %1.",loc("%1 upgrade",LBeautify(50))),[9,1]); + + order=11000; + new Game.Achievement('Cookie-dunker',loc("Dunk the cookie.")+'You did it!',[1,8]); + + order=10000; + new Game.Achievement('Fortune',loc("Click %1.",loc("%1 golden cookie",LBeautify(77)))+'You should really go to bed.',[24,6]); + order=31000; + new Game.Achievement('True Neverclick',loc("Make %1 with no cookie clicks.",loc("%1 cookie",LBeautify(1e6)))+'This kinda defeats the whole purpose, doesn\'t it?',[12,0]);Game.last.pool='shadow'; + + order=20000; + new Game.Achievement('Elder nap',loc("Appease the grandmatriarchs at least once.")+'we
are
eternal
',[8,9]); + new Game.Achievement('Elder slumber',loc("Appease the grandmatriarchs at least %1 times.",5)+'our mind
outlives
the universe
',[8,9]); + + order=1098; + new Game.Achievement('Elder',loc("Own at least %1 grandma types.",7),[10,9]); + + order=20000; + new Game.Achievement('Elder calm',loc("Declare a covenant with the grandmatriarchs.")+'we
have
fed
',[8,9]); + + order=5000; + new Game.Achievement('Engineer',loc("Own %1.",loc("%1 building",LBeautify(1000))),[4,6]); + + order=10000; + new Game.Achievement('Leprechaun',loc("Click %1.",loc("%1 golden cookie",LBeautify(777))),[25,6]); + new Game.Achievement('Black cat\'s paw',loc("Click %1.",loc("%1 golden cookie",LBeautify(7777))),[26,6]); + + order=30050; + new Game.Achievement('Nihilism',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e15)))+'There are many things
that need to be erased
',[11,7]); + + order=1900; + Game.TieredAchievement('Antibatter','','Antimatter condenser',1); + Game.TieredAchievement('Quirky quarks','','Antimatter condenser',2); + Game.TieredAchievement('It does matter!','','Antimatter condenser',3); + + order=6000; + new Game.Achievement('Upgrader',loc("Purchase %1.",loc("%1 upgrade",LBeautify(100))),[9,2]); + + order=7000; + new Game.Achievement('Centennial',loc("Have at least %1 of everything.",100),[6,6]); + + order=30500; + new Game.Achievement('Hardcore',loc("Get to %1 baked with no upgrades purchased.",loc("%1 cookie",LBeautify(1e9))),[12,6]);//Game.last.pool='shadow'; + + order=30600; + new Game.Achievement('Speed baking I',loc("Get to %1 baked in %2.",[loc("%1 cookie",LBeautify(1e6)),Game.sayTime(60*35*Game.fps)]),[12,5]);Game.last.pool='shadow'; + new Game.Achievement('Speed baking II',loc("Get to %1 baked in %2.",[loc("%1 cookie",LBeautify(1e6)),Game.sayTime(60*25*Game.fps)]),[13,5]);Game.last.pool='shadow'; + new Game.Achievement('Speed baking III',loc("Get to %1 baked in %2.",[loc("%1 cookie",LBeautify(1e6)),Game.sayTime(60*15*Game.fps)]),[14,5]);Game.last.pool='shadow'; + + + order=61000; + var achiev=new Game.Achievement('Getting even with the oven',EN?'Defeat the Sentient Furnace in the factory dungeons.':'???',[12,7]);Game.last.pool='dungeon'; + var achiev=new Game.Achievement('Now this is pod-smashing',EN?'Defeat the Ascended Baking Pod in the factory dungeons.':'???',[12,7]);Game.last.pool='dungeon'; + var achiev=new Game.Achievement('Chirped out',EN?'Find and defeat Chirpy, the dysfunctionning alarm bot.':'???',[13,7]);Game.last.pool='dungeon'; + var achiev=new Game.Achievement('Follow the white rabbit',EN?'Find and defeat the elusive sugar bunny.':'???',[14,7]);Game.last.pool='dungeon'; + + order=1000; + new Game.Achievement('Clickasmic',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e11))),[11,14]); + + order=1100; + Game.TieredAchievement('Friend of the ancients','','Grandma',4); + Game.TieredAchievement('Ruler of the ancients','','Grandma',5); + + order=32000; + new Game.Achievement('Wholesome',loc("Unlock 100% of your heavenly chips power."),[15,7]); + + order=33000; + new Game.Achievement('Just plain lucky',loc("You have 1 chance in %1 every second of earning this achievement.",Beautify(1000000)),[15,6]);Game.last.pool='shadow'; + + order=21000; + new Game.Achievement('Itchscratcher',loc("Burst 1 wrinkler."),[19,8]); + new Game.Achievement('Wrinklesquisher',loc("Burst %1 wrinklers.",50),[19,8]); + new Game.Achievement('Moistburster',loc("Burst %1 wrinklers.",200),[19,8]); + + order=22000; + new Game.Achievement('Spooky cookies',loc("Unlock every Halloween-themed cookie.
Owning this achievement makes Halloween-themed cookies drop more frequently in future playthroughs."),[12,8]); + + order=22100; + new Game.Achievement('Coming to town',loc("Reach Santa's 7th form."),[18,9]); + new Game.Achievement('All hail Santa',loc("Reach Santa's final form."),[19,10]); + new Game.Achievement('Let it snow',loc("Unlock every Christmas-themed cookie.
Owning this achievement makes Christmas-themed cookies drop more frequently in future playthroughs."),[19,9]); + new Game.Achievement('Oh deer',loc("Pop 1 reindeer."),[12,9]); + new Game.Achievement('Sleigh of hand',loc("Pop %1 reindeer.",50),[12,9]); + new Game.Achievement('Reindeer sleigher',loc("Pop %1 reindeer.",200),[12,9]); + + order=1200; + Game.TieredAchievement('Perfected agriculture','','Farm',4); + order=1400; + Game.TieredAchievement('Ultimate automation','','Factory',4); + order=1300; + Game.TieredAchievement('Can you dig it','','Mine',4); + order=1500; + Game.TieredAchievement('Type II civilization','','Shipment',4); + order=1600; + Game.TieredAchievement('Gild wars','','Alchemy lab',4); + order=1700; + Game.TieredAchievement('Brain-split','','Portal',4); + order=1800; + Game.TieredAchievement('Time duke','','Time machine',4); + order=1900; + Game.TieredAchievement('Molecular maestro','','Antimatter condenser',4); + + order=2000; + Game.TieredAchievement('Lone photon','','Prism',1); + Game.TieredAchievement('Dazzling glimmer','','Prism',2); + Game.TieredAchievement('Blinding flash','','Prism',3); + Game.TieredAchievement('Unending glow','','Prism',4); + + order=5000; + new Game.Achievement('Lord of Constructs',loc("Own %1.",loc("%1 building",LBeautify(2500)))+'He saw the vast plains stretching ahead of him, and he said : let there be civilization.',[5,6]); + order=6000; + new Game.Achievement('Lord of Progress',loc("Purchase %1.",loc("%1 upgrade",LBeautify(200)))+'One can always do better. But should you?',[9,14]); + order=7002; + new Game.Achievement('Bicentennial',loc("Have at least %1 of everything.",200)+'You crazy person.',[8,6]); + + order=22300; + new Game.Achievement('Lovely cookies',loc("Unlock every Valentine-themed cookie."),[20,3]); + + order=7001; + new Game.Achievement('Centennial and a half',loc("Have at least %1 of everything.",150),[7,6]); + + order=11000; + new Game.Achievement('Tiny cookie',loc("Click the tiny cookie.")+'These aren\'t the cookies you\'re clicking for.',[0,5]); + + order=400000; + new Game.Achievement('You win a cookie',loc("This is for baking %1 and making it on the local news.",loc("%1 cookie",LBeautify(1e14)))+'We\'re all so proud of you.',[10,0]); + + order=1070; + Game.ProductionAchievement('Click delegator','Cursor',1,0,7); + order=1120; + Game.ProductionAchievement('Gushing grannies','Grandma',1,0,6); + order=1220; + Game.ProductionAchievement('I hate manure','Farm',1); + order=1320; + Game.ProductionAchievement('Never dig down','Mine',1); + order=1420; + Game.ProductionAchievement('The incredible machine','Factory',1); + order=1520; + Game.ProductionAchievement('And beyond','Shipment',1); + order=1620; + Game.ProductionAchievement('Magnum Opus','Alchemy lab',1); + order=1720; + Game.ProductionAchievement('With strange eons','Portal',1); + order=1820; + Game.ProductionAchievement('Spacetime jigamaroo','Time machine',1); + order=1920; + Game.ProductionAchievement('Supermassive','Antimatter condenser',1); + order=2020; + Game.ProductionAchievement('Praise the sun','Prism',1); + + + order=1000; + new Game.Achievement('Clickageddon',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e13))),[11,15]); + new Game.Achievement('Clicknarok',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e15))),[11,16]); + + order=1050; + new Game.Achievement('Extreme polydactyly',loc("Have %1.",loc("%1 cursor",LBeautify(300))),[0,13]); + new Game.Achievement('Dr. T',loc("Have %1.",loc("%1 cursor",LBeautify(400))),[0,14]); + + order=1100;Game.TieredAchievement('The old never bothered me anyway','','Grandma',6); + order=1200;Game.TieredAchievement('Homegrown','','Farm',5); + order=1400;Game.TieredAchievement('Technocracy','','Factory',5); + order=1300;Game.TieredAchievement('The center of the Earth','','Mine',5); + order=1500;Game.TieredAchievement('We come in peace','','Shipment',5); + order=1600;Game.TieredAchievement('The secrets of the universe','','Alchemy lab',5); + order=1700;Game.TieredAchievement('Realm of the Mad God','','Portal',5); + order=1800;Game.TieredAchievement('Forever and ever','','Time machine',5); + order=1900;Game.TieredAchievement('Walk the planck','','Antimatter condenser',5); + order=2000;Game.TieredAchievement('Rise and shine','','Prism',5); + + order=30200; + new Game.Achievement('God complex',loc("Name yourself Orteil.
Note: usurpers incur a -%1% CpS penalty until they rename themselves something else.
",1)+'But that\'s not you, is it?',[17,5]);Game.last.pool='shadow'; + new Game.Achievement('Third-party',loc("Use an add-on.")+'Some find vanilla to be the most boring flavor.',[16,5]);Game.last.pool='shadow';//if you're making a mod, add a Game.Win('Third-party') somewhere in there! + + order=30050; + new Game.Achievement('Dematerialize',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e18)))+'Presto!
...where\'d the cookies go?
',[11,7]); + new Game.Achievement('Nil zero zilch',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e21)))+'To summarize : really not very much at all.',[11,7]); + new Game.Achievement('Transcendence',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e24)))+'Your cookies are now on a higher plane of being.',[11,8]); + new Game.Achievement('Obliterate',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e27)))+'Resistance is futile, albeit entertaining.',[11,8]); + new Game.Achievement('Negative void',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e30)))+'You now have so few cookies that it\'s almost like you have a negative amount of them.',[11,8]); + + order=22400; + new Game.Achievement('The hunt is on',loc("Unlock 1 egg."),[1,12]); + new Game.Achievement('Egging on',loc("Unlock %1 eggs.",7),[4,12]); + new Game.Achievement('Mass Easteria',loc("Unlock %1 eggs.",14),[7,12]); + new Game.Achievement('Hide & seek champion',loc("Unlock all the eggs.
Owning this achievement makes eggs drop more frequently in future playthroughs."),[13,12]); + + order=11000; + new Game.Achievement('What\'s in a name',loc("Give your bakery a name."),[15,9]); + + + order=1425; + Game.TieredAchievement('Pretty penny','','Bank',1); + Game.TieredAchievement('Fit the bill','','Bank',2); + Game.TieredAchievement('A loan in the dark','','Bank',3); + Game.TieredAchievement('Need for greed','','Bank',4); + Game.TieredAchievement('It\'s the economy, stupid','','Bank',5); + order=1450; + Game.TieredAchievement('Your time to shrine','','Temple',1); + Game.TieredAchievement('Shady sect','','Temple',2); + Game.TieredAchievement('New-age cult','','Temple',3); + Game.TieredAchievement('Organized religion','','Temple',4); + Game.TieredAchievement('Fanaticism','','Temple',5); + order=1475; + Game.TieredAchievement('Bewitched','','Wizard tower',1); + Game.TieredAchievement('The sorcerer\'s apprentice','','Wizard tower',2); + Game.TieredAchievement('Charms and enchantments','','Wizard tower',3); + Game.TieredAchievement('Curses and maledictions','','Wizard tower',4); + Game.TieredAchievement('Magic kingdom','','Wizard tower',5); + + order=1445; + Game.ProductionAchievement('Vested interest','Bank',1); + order=1470; + Game.ProductionAchievement('New world order','Temple',1); + order=1495; + Game.ProductionAchievement('Hocus pocus','Wizard tower',1); + + + + order=1070; + Game.ProductionAchievement('Finger clickin\' good','Cursor',2,0,7); + order=1120; + Game.ProductionAchievement('Panic at the bingo','Grandma',2,0,6); + order=1220; + Game.ProductionAchievement('Rake in the dough','Farm',2); + order=1320; + Game.ProductionAchievement('Quarry on','Mine',2); + order=1420; + Game.ProductionAchievement('Yes I love technology','Factory',2); + order=1445; + Game.ProductionAchievement('Paid in full','Bank',2); + order=1470; + Game.ProductionAchievement('Church of Cookiology','Temple',2); + order=1495; + Game.ProductionAchievement('Too many rabbits, not enough hats','Wizard tower',2); + order=1520; + Game.ProductionAchievement('The most precious cargo','Shipment',2); + order=1620; + Game.ProductionAchievement('The Aureate','Alchemy lab',2); + order=1720; + Game.ProductionAchievement('Ever more hideous','Portal',2); + order=1820; + Game.ProductionAchievement('Be kind, rewind','Time machine',2); + order=1920; + Game.ProductionAchievement('Infinitesimal','Antimatter condenser',2); + order=2020; + Game.ProductionAchievement('A still more glorious dawn','Prism',2); + + order=30000; + new Game.Achievement('Rebirth',loc("Ascend at least once."),[21,6]); + + order=11000; + new Game.Achievement('Here you go',loc("Click this achievement's slot.")+'All you had to do was ask.',[1,7]);Game.last.clickFunction=function(){if (!Game.HasAchiev('Here you go')){PlaySound('snd/tick.mp3');Game.Win('Here you go');}}; + + order=30000; + new Game.Achievement('Resurrection',loc("Ascend %1 times.",10),[21,6]); + new Game.Achievement('Reincarnation',loc("Ascend %1 times.",100),[21,6]); + new Game.Achievement('Endless cycle',loc("Ascend %1 times.",1000)+'Oh hey, it\'s you again.',[2,7]);Game.last.pool='shadow'; + + + + order=1100; + Game.TieredAchievement('The agemaster','','Grandma',7); + Game.TieredAchievement('To oldly go','','Grandma',8); + + order=1200;Game.TieredAchievement('Gardener extraordinaire','','Farm',6); + order=1300;Game.TieredAchievement('Tectonic ambassador','','Mine',6); + order=1400;Game.TieredAchievement('Rise of the machines','','Factory',6); + order=1425;Game.TieredAchievement('Acquire currency','','Bank',6); + order=1450;Game.TieredAchievement('Zealotry','','Temple',6); + order=1475;Game.TieredAchievement('The wizarding world','','Wizard tower',6); + order=1500;Game.TieredAchievement('Parsec-masher','','Shipment',6); + order=1600;Game.TieredAchievement('The work of a lifetime','','Alchemy lab',6); + order=1700;Game.TieredAchievement('A place lost in time','','Portal',6); + order=1800;Game.TieredAchievement('Heat death','','Time machine',6); + order=1900;Game.TieredAchievement('Microcosm','','Antimatter condenser',6); + order=2000;Game.TieredAchievement('Bright future','','Prism',6); + + order=25000; + new Game.Achievement('Here be dragon',loc("Complete your dragon's training."),[21,12]); + + Game.BankAchievement('How?'); + Game.BankAchievement('The land of milk and cookies'); + Game.BankAchievement('He who controls the cookies controls the universe','The milk must flow!'); + Game.BankAchievement('Tonight on Hoarders'); + Game.BankAchievement('Are you gonna eat all that?'); + Game.BankAchievement('We\'re gonna need a bigger bakery'); + Game.BankAchievement('In the mouth of madness','A cookie is just what we tell each other it is.'); + Game.BankAchievement('Brought to you by the letter
'); + + + Game.CpsAchievement('A world filled with cookies'); + Game.CpsAchievement('When this baby hits '+Beautify(10000000000000*60*60)+' cookies per hour'); + Game.CpsAchievement('Fast and delicious'); + Game.CpsAchievement('Cookiehertz : a really, really tasty hertz','Tastier than a hertz donut, anyway.'); + Game.CpsAchievement('Woops, you solved world hunger'); + Game.CpsAchievement('Turbopuns','Mother Nature will be like "slowwwww dowwwwwn".'); + Game.CpsAchievement('Faster menner'); + Game.CpsAchievement('And yet you\'re still hungry'); + Game.CpsAchievement('The Abakening'); + Game.CpsAchievement('There\'s really no hard limit to how long these achievement names can be and to be quite honest I\'m rather curious to see how far we can go.
Adolphus W. Green (1844–1917) started as the Principal of the Groton School in 1864. By 1865, he became second assistant librarian at the New York Mercantile Library; from 1867 to 1869, he was promoted to full librarian. From 1869 to 1873, he worked for Evarts, Southmayd & Choate, a law firm co-founded by William M. Evarts, Charles Ferdinand Southmayd and Joseph Hodges Choate. He was admitted to the New York State Bar Association in 1873.
Anyway, how\'s your day been?');//Game.last.shortName='There\'s really no hard limit to how long these achievement names can be and to be quite honest I\'m [...]'; + Game.CpsAchievement('Fast','Wow!'); + + order=7002; + new Game.Achievement('Bicentennial and a half',loc("Have at least %1 of everything.",250)+'Keep on truckin\'.',[9,6]); + + order=11000; + new Game.Achievement('Tabloid addiction',loc("Click on the news ticker %1 times.",50)+'Page 6: Mad individual clicks on picture of pastry in a futile attempt to escape boredom!
Also page 6: British parliament ate my baby!
',[27,7]); + + order=1000; + new Game.Achievement('Clickastrophe',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e17))),[11,17]); + new Game.Achievement('Clickataclysm',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e19))),[11,18]); + + order=1050; + new Game.Achievement('Thumbs, phalanges, metacarpals',loc("Have %1.",loc("%1 cursor",LBeautify(500)))+'& KNUCKLES',[0,15]); + + order=6002; + new Game.Achievement('Polymath',loc("Own %1 upgrades and %2 buildings.",[300,4000])+'Excellence doesn\'t happen overnight - it usually takes a good couple days.',[29,7]); + + order=1099; + new Game.Achievement('The elder scrolls',loc("Own a combined %1 %2 and %3.",[777,loc("grandmas"),loc("cursors")])+'Let me guess. Someone stole your cookie.',[10,9]); + + order=30050; + new Game.Achievement('To crumbs, you say?',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e33)))+'Very well then.',[29,6]); + + order=1200;Game.TieredAchievement('Seedy business','','Farm',7); + order=1300;Game.TieredAchievement('Freak fracking','','Mine',7); + order=1400;Game.TieredAchievement('Modern times','','Factory',7); + order=1425;Game.TieredAchievement('The nerve of war','','Bank',7); + order=1450;Game.TieredAchievement('Wololo','','Temple',7); + order=1475;Game.TieredAchievement('And now for my next trick, I\'ll need a volunteer from the audience','','Wizard tower',7); + order=1500;Game.TieredAchievement('It\'s not delivery','','Shipment',7); + order=1600;Game.TieredAchievement('Gold, Jerry! Gold!','','Alchemy lab',7); + order=1700;Game.TieredAchievement('Forbidden zone','','Portal',7); + order=1800;Game.TieredAchievement('cookie clicker forever and forever a hundred years cookie clicker, all day long forever, forever a hundred times, over and over cookie clicker adventures dot com','','Time machine',7); + order=1900;Game.TieredAchievement('Scientists baffled everywhere','','Antimatter condenser',7); + order=2000;Game.TieredAchievement('Harmony of the spheres','','Prism',7); + + order=35000; + new Game.Achievement('Last Chance to See',loc("Burst the near-extinct shiny wrinkler.")+'You monster!',[24,12]);Game.last.pool='shadow'; + + order=10000; + new Game.Achievement('Early bird',loc("Click a golden cookie less than 1 second after it spawns."),[10,14]); + new Game.Achievement('Fading luck',loc("Click a golden cookie less than 1 second before it dies."),[10,14]); + + order=22100; + new Game.Achievement('Eldeer',loc("Pop a reindeer during an elder frenzy."),[12,9]); + + order=21100; + new Game.Achievement('Dude, sweet',loc("Harvest %1 coalescing sugar lumps.",7),[24,14]); + new Game.Achievement('Sugar rush',loc("Harvest %1 coalescing sugar lumps.",30),[26,14]); + new Game.Achievement('Year\'s worth of cavities',loc("Harvest %1 coalescing sugar lumps.",365)+'My lumps my lumps my lumps.',[29,14]); + new Game.Achievement('Hand-picked',loc("Successfully harvest a coalescing sugar lump before it's ripe."),[28,14]); + new Game.Achievement('Sugar sugar',loc("Harvest a bifurcated sugar lump."),[29,15]); + new Game.Achievement('All-natural cane sugar',loc("Harvest a golden sugar lump."),[29,16]);Game.last.pool='shadow'; + new Game.Achievement('Sweetmeats',loc("Harvest a meaty sugar lump."),[29,17]); + + order=7002; + new Game.Achievement('Tricentennial',loc("Have at least %1 of everything.",300)+'Can\'t stop, won\'t stop. Probably should stop, though.',[29,12]); + + Game.CpsAchievement('Knead for speed','How did we not make that one yet?'); + Game.CpsAchievement('Well the cookies start coming and they don\'t stop coming','Didn\'t make sense not to click for fun.'); + Game.CpsAchievement('I don\'t know if you\'ve noticed but all these icons are very slightly off-center'); + Game.CpsAchievement('The proof of the cookie is in the baking','How can you have any cookies if you don\'t bake your dough?'); + Game.CpsAchievement('If it\'s worth doing, it\'s worth overdoing'); + + Game.BankAchievement('The dreams in which I\'m baking are the best I\'ve ever had'); + Game.BankAchievement('Set for life'); + + order=1200;Game.TieredAchievement('You and the beanstalk','','Farm',8); + order=1300;Game.TieredAchievement('Romancing the stone','','Mine',8); + order=1400;Game.TieredAchievement('Ex machina','','Factory',8); + order=1425;Game.TieredAchievement('And I need it now','','Bank',8); + order=1450;Game.TieredAchievement('Pray on the weak','','Temple',8); + order=1475;Game.TieredAchievement('It\'s a kind of magic','','Wizard tower',8); + order=1500;Game.TieredAchievement('Make it so','','Shipment',8); + order=1600;Game.TieredAchievement('All that glitters is gold','','Alchemy lab',8); + order=1700;Game.TieredAchievement('H̸̷͓̳̳̯̟͕̟͍͍̣͡ḛ̢̦̰̺̮̝͖͖̘̪͉͘͡ ̠̦͕̤̪̝̥̰̠̫̖̣͙̬͘ͅC̨̦̺̩̲̥͉̭͚̜̻̝̣̼͙̮̯̪o̴̡͇̘͎̞̲͇̦̲͞͡m̸̩̺̝̣̹̱͚̬̥̫̳̼̞̘̯͘ͅẹ͇̺̜́̕͢s̶̙̟̱̥̮̯̰̦͓͇͖͖̝͘͘͞','','Portal',8); + order=1800;Game.TieredAchievement('Way back then','','Time machine',8); + order=1900;Game.TieredAchievement('Exotic matter','','Antimatter condenser',8); + order=2000;Game.TieredAchievement('At the end of the tunnel','','Prism',8); + + + + order=1070; + Game.ProductionAchievement('Click (starring Adam Sandler)','Cursor',3,0,7); + order=1120; + Game.ProductionAchievement('Frantiquities','Grandma',3,0,6); + order=1220; + Game.ProductionAchievement('Overgrowth','Farm',3); + order=1320; + Game.ProductionAchievement('Sedimentalism','Mine',3); + order=1420; + Game.ProductionAchievement('Labor of love','Factory',3); + order=1445; + Game.ProductionAchievement('Reverse funnel system','Bank',3); + order=1470; + Game.ProductionAchievement('Thus spoke you','Temple',3); + order=1495; + Game.ProductionAchievement('Manafest destiny','Wizard tower',3); + order=1520; + Game.ProductionAchievement('Neither snow nor rain nor heat nor gloom of night','Shipment',3); + order=1620; + Game.ProductionAchievement('I\'ve got the Midas touch','Alchemy lab',3); + order=1720; + Game.ProductionAchievement('Which eternal lie','Portal',3); + order=1820; + Game.ProductionAchievement('Déjà vu','Time machine',3); + order=1920; + Game.ProductionAchievement('Powers of Ten','Antimatter condenser',3); + order=2020; + Game.ProductionAchievement('Now the dark days are gone','Prism',3); + + order=1070; + new Game.Achievement('Freaky jazz hands','',[0,26]);Game.Objects['Cursor'].levelAchiev10=Game.last; + order=1120; + new Game.Achievement('Methuselah','',[1,26]);Game.Objects['Grandma'].levelAchiev10=Game.last; + order=1220; + new Game.Achievement('Huge tracts of land','',[2,26]);Game.Objects['Farm'].levelAchiev10=Game.last; + order=1320; + new Game.Achievement('D-d-d-d-deeper','',[3,26]);Game.Objects['Mine'].levelAchiev10=Game.last; + order=1420; + new Game.Achievement('Patently genius','',[4,26]);Game.Objects['Factory'].levelAchiev10=Game.last; + order=1445; + new Game.Achievement('A capital idea','',[15,26]);Game.Objects['Bank'].levelAchiev10=Game.last; + order=1470; + new Game.Achievement('It belongs in a bakery','',[16,26]);Game.Objects['Temple'].levelAchiev10=Game.last; + order=1495; + new Game.Achievement('Motormouth','',[17,26]);Game.Objects['Wizard tower'].levelAchiev10=Game.last; + order=1520; + new Game.Achievement('Been there done that','',[5,26]);Game.Objects['Shipment'].levelAchiev10=Game.last; + order=1620; + new Game.Achievement('Phlogisticated substances','',[6,26]);Game.Objects['Alchemy lab'].levelAchiev10=Game.last; + order=1720; + new Game.Achievement('Bizarro world','',[7,26]);Game.Objects['Portal'].levelAchiev10=Game.last; + order=1820; + new Game.Achievement('The long now','',[8,26]);Game.Objects['Time machine'].levelAchiev10=Game.last; + order=1920; + new Game.Achievement('Chubby hadrons','',[13,26]);Game.Objects['Antimatter condenser'].levelAchiev10=Game.last; + order=2020; + new Game.Achievement('Palettable','',[14,26]);Game.Objects['Prism'].levelAchiev10=Game.last; + + order=61470; + order=61495; + new Game.Achievement('Bibbidi-bobbidi-boo',loc("Cast %1 spells.",9),[21,11]); + new Game.Achievement('I\'m the wiz',loc("Cast %1 spells.",99),[22,11]); + new Game.Achievement('A wizard is you',loc("Cast %1 spells.",999)+'I\'m a what?',[29,11]); + + order=10000; + new Game.Achievement('Four-leaf cookie',loc("Have %1 golden cookies simultaneously.",4)+'Fairly rare, considering cookies don\'t even have leaves.',[27,6]);Game.last.pool='shadow'; + + order=2100; + Game.TieredAchievement('Lucked out','','Chancemaker',1); + Game.TieredAchievement('What are the odds','','Chancemaker',2); + Game.TieredAchievement('Grandma needs a new pair of shoes','','Chancemaker',3); + Game.TieredAchievement('Million to one shot, doc','','Chancemaker',4); + Game.TieredAchievement('As luck would have it','','Chancemaker',5); + Game.TieredAchievement('Ever in your favor','','Chancemaker',6); + Game.TieredAchievement('Be a lady','','Chancemaker',7); + Game.TieredAchievement('Dicey business','','Chancemaker',8); + + order=2120; + Game.ProductionAchievement('Fingers crossed','Chancemaker',1); + Game.ProductionAchievement('Just a statistic','Chancemaker',2); + Game.ProductionAchievement('Murphy\'s wild guess','Chancemaker',3); + + new Game.Achievement('Let\'s leaf it at that','',[19,26]);Game.Objects['Chancemaker'].levelAchiev10=Game.last; + + order=1000; + new Game.Achievement('The ultimate clickdown',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e21)))+'(of ultimate destiny.)',[11,19]); + + + order=1100; + Game.TieredAchievement('Aged well','','Grandma',9); + Game.TieredAchievement('101st birthday','','Grandma',10); + Game.TieredAchievement('But wait \'til you get older','','Grandma',11); + order=1200;Game.TieredAchievement('Harvest moon','','Farm',9); + order=1300;Game.TieredAchievement('Mine?','','Mine',9); + order=1400;Game.TieredAchievement('In full gear','','Factory',9); + order=1425;Game.TieredAchievement('Treacle tart economics','','Bank',9); + order=1450;Game.TieredAchievement('Holy cookies, grandma!','','Temple',9); + order=1475;Game.TieredAchievement('The Prestige','(Unrelated to the Cookie Clicker feature of the same name.)','Wizard tower',9); + order=1500;Game.TieredAchievement('That\'s just peanuts to space','','Shipment',9); + order=1600;Game.TieredAchievement('Worth its weight in lead','','Alchemy lab',9); + order=1700;Game.TieredAchievement('What happens in the vortex stays in the vortex','','Portal',9); + order=1800;Game.TieredAchievement('Invited to yesterday\'s party','','Time machine',9); + order=1900;Game.TieredAchievement('Downsizing','','Antimatter condenser',9);//the trailer got me really hyped up but i've read some pretty bad reviews. is it watchable ? is it worth seeing ? i don't mind matt damon + order=2000;Game.TieredAchievement('My eyes','','Prism',9); + order=2100;Game.TieredAchievement('Maybe a chance in hell, actually','','Chancemaker',9); + + order=1200;Game.TieredAchievement('Make like a tree','','Farm',10); + order=1300;Game.TieredAchievement('Cave story','','Mine',10); + order=1400;Game.TieredAchievement('In-cog-neato','','Factory',10); + order=1425;Game.TieredAchievement('Save your breath because that\'s all you\'ve got left','','Bank',10); + order=1450;Game.TieredAchievement('Vengeful and almighty','','Temple',10); + order=1475;Game.TieredAchievement('Spell it out for you','','Wizard tower',10); + order=1500;Game.TieredAchievement('Space space space space space','It\'s too far away...','Shipment',10); + order=1600;Game.TieredAchievement('Don\'t get used to yourself, you\'re gonna have to change','','Alchemy lab',10); + order=1700;Game.TieredAchievement('Objects in the mirror dimension are closer than they appear','','Portal',10); + order=1800;Game.TieredAchievement('Groundhog day','','Time machine',10); + order=1900;Game.TieredAchievement('A matter of perspective','','Antimatter condenser',10); + order=2000;Game.TieredAchievement('Optical illusion','','Prism',10); + order=2100;Game.TieredAchievement('Jackpot','','Chancemaker',10); + + order=36000; + new Game.Achievement('So much to do so much to see',loc("Manage a cookie legacy for at least a year.")+'Thank you so much for playing Cookie Clicker!',[23,11]);Game.last.pool='shadow'; + + + + Game.CpsAchievement('Running with scissors'); + Game.CpsAchievement('Rarefied air'); + Game.CpsAchievement('Push it to the limit'); + Game.CpsAchievement('Green cookies sleep furiously'); + + Game.BankAchievement('Panic! at Nabisco'); + Game.BankAchievement('Bursting at the seams'); + Game.BankAchievement('Just about full'); + Game.BankAchievement('Hungry for more'); + + order=1000; + new Game.Achievement('All the other kids with the pumped up clicks',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e23))),[11,28]); + new Game.Achievement('One...more...click...',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e25))),[11,30]); + + order=61515; + new Game.Achievement('Botany enthusiast',loc("Harvest %1 mature garden plants.",100),[26,20]); + new Game.Achievement('Green, aching thumb',loc("Harvest %1 mature garden plants.",1000),[27,20]); + new Game.Achievement('In the garden of Eden (baby)',loc("Fill every tile of the biggest garden plot with plants.")+'Isn\'t tending to those precious little plants just so rock and/or roll?',[28,20]); + + new Game.Achievement('Keeper of the conservatory',loc("Unlock every garden seed."),[25,20]); + new Game.Achievement('Seedless to nay',loc("Convert a complete seed log into sugar lumps by sacrificing your garden to the sugar hornets.
Owning this achievement makes seeds %1% cheaper, plants mature %2% sooner, and plant upgrades drop %3% more.",[5,5,5]),[29,20]); + + order=30050; + new Game.Achievement('You get nothing',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e36)))+'Good day sir!',[29,6]); + new Game.Achievement('Humble rebeginnings',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e39)))+'Started from the bottom, now we\'re here.',[29,6]); + new Game.Achievement('The end of the world',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e42)))+'(as we know it)',[21,25]); + new Game.Achievement('Oh, you\'re back',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e45)))+'Missed us?',[21,25]); + new Game.Achievement('Lazarus',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e48)))+'All rise.',[21,25]); + + Game.CpsAchievement('Leisurely pace'); + Game.CpsAchievement('Hypersonic'); + + Game.BankAchievement('Feed me, Orteil'); + Game.BankAchievement('And then what?'); + + order=7002; + new Game.Achievement('Tricentennial and a half',loc("Have at least %1 of everything.",350)+'(it\'s free real estate)',[21,26]); + new Game.Achievement('Quadricentennial',loc("Have at least %1 of everything.",400)+'You\'ve had to do horrible things to get this far.
Horrible... horrible things.
',[22,26]); + new Game.Achievement('Quadricentennial and a half',loc("Have at least %1 of everything.",450)+'At this point, you might just be compensating for something.',[23,26]); + + new Game.Achievement('Quincentennial',loc("Have at least %1 of everything.",500)+'Some people would say you\'re halfway there.
We do not care for those people and their reckless sense of unchecked optimism.
',[29,25]); + + order=21100; + new Game.Achievement('Maillard reaction',loc("Harvest a caramelized sugar lump."),[29,27]); + + order=30250; + new Game.Achievement('When the cookies ascend just right',loc("Ascend with exactly %1.",loc("%1 cookie",LBeautify(1e12))),[25,7]);Game.last.pool='shadow';//this achievement is shadow because it is only achievable through blind luck or reading external guides; this may change in the future + + + order=1050; + new Game.Achievement('With her finger and her thumb',loc("Have %1.",loc("%1 cursor",LBeautify(600))),[0,16]); + + order=1100;Game.TieredAchievement('Defense of the ancients','','Grandma',12); + order=1200;Game.TieredAchievement('Sharpest tool in the shed','','Farm',11); + order=1300;Game.TieredAchievement('Hey now, you\'re a rock','','Mine',11); + order=1400;Game.TieredAchievement('Break the mold','','Factory',11); + order=1425;Game.TieredAchievement('Get the show on, get paid','','Bank',11); + order=1450;Game.TieredAchievement('My world\'s on fire, how about yours','','Temple',11); + order=1475;Game.TieredAchievement('The meteor men beg to differ','','Wizard tower',11); + order=1500;Game.TieredAchievement('Only shooting stars','','Shipment',11); + order=1600;Game.TieredAchievement('We could all use a little change','','Alchemy lab',11);//"all that glitters is gold" was already an achievement + order=1700;Game.TieredAchievement('Your brain gets smart but your head gets dumb','','Portal',11); + order=1800;Game.TieredAchievement('The years start coming','','Time machine',11); + order=1900;Game.TieredAchievement('What a concept','','Antimatter condenser',11); + order=2000;Game.TieredAchievement('You\'ll never shine if you don\'t glow','','Prism',11); + order=2100;Game.TieredAchievement('You\'ll never know if you don\'t go','','Chancemaker',11); + + order=2200; + Game.TieredAchievement('Self-contained','','Fractal engine',1); + Game.TieredAchievement('Threw you for a loop','','Fractal engine',2); + Game.TieredAchievement('The sum of its parts','','Fractal engine',3); + Game.TieredAchievement('Bears repeating','Where did these come from?','Fractal engine',4); + Game.TieredAchievement('More of the same','','Fractal engine',5); + Game.TieredAchievement('Last recurse','','Fractal engine',6); + Game.TieredAchievement('Out of one, many','','Fractal engine',7); + Game.TieredAchievement('An example of recursion','','Fractal engine',8); + Game.TieredAchievement('For more information on this achievement, please refer to its title','','Fractal engine',9); + Game.TieredAchievement('I\'m so meta, even this achievement','','Fractal engine',10); + Game.TieredAchievement('Never get bored','','Fractal engine',11); + + order=2220; + Game.ProductionAchievement('The needs of the many','Fractal engine',1); + Game.ProductionAchievement('Eating its own','Fractal engine',2); + Game.ProductionAchievement('We must go deeper','Fractal engine',3); + + new Game.Achievement('Sierpinski rhomboids','',[20,26]);Game.Objects['Fractal engine'].levelAchiev10=Game.last; + + Game.CpsAchievement('Gotta go fast'); + Game.BankAchievement('I think it\'s safe to say you\'ve got it made'); + + order=6002; + new Game.Achievement('Renaissance baker',loc("Own %1 upgrades and %2 buildings.",[400,8000])+'If you have seen further, it is by standing on the shoulders of giants - a mysterious species of towering humanoids until now thought long-extinct.',[10,10]); + + order=1098; + new Game.Achievement('Veteran',loc("Own at least %1 grandma types.",14)+'14\'s a crowd!',[10,9]); + + order=10000; + new Game.Achievement('Thick-skinned',loc("Have your reinforced membrane protect the shimmering veil."),[7,10]); + + + order=2300; + Game.TieredAchievement('F12','','Javascript console',1); + Game.TieredAchievement('Variable success','','Javascript console',2); + Game.TieredAchievement('No comments','','Javascript console',3); + Game.TieredAchievement('Up to code','','Javascript console',4); + Game.TieredAchievement('Works on my machine','','Javascript console',5); + Game.TieredAchievement('Technical debt','','Javascript console',6); + Game.TieredAchievement('Mind your language','','Javascript console',7); + Game.TieredAchievement('Inconsolable','','Javascript console',8); + Game.TieredAchievement('Closure','','Javascript console',9); + Game.TieredAchievement('Dude what if we\'re all living in a simulation like what if we\'re all just code on a computer somewhere','','Javascript console',10); + Game.TieredAchievement('Taking the back streets','','Javascript console',11); + + order=2320; + Game.ProductionAchievement('Inherited prototype','Javascript console',1); + Game.ProductionAchievement('A model of document object','Javascript console',2); + Game.ProductionAchievement('First-class citizen','Javascript console',3); + + new Game.Achievement('Alexandria','',[32,26]);Game.Objects['Javascript console'].levelAchiev10=Game.last; + + Game.CpsAchievement('Bake him away, toys'); + Game.CpsAchievement('You\'re #1 so why try harder'); + Game.CpsAchievement('Haven\'t even begun to peak'); + Game.BankAchievement('A sometimes food'); + Game.BankAchievement('Not enough of a good thing'); + Game.BankAchievement('Horn of plenty'); + + order=30050; + new Game.Achievement('Smurf account',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e51)))+'It\'s like you just appeared out of the blue!',[21,32]); + new Game.Achievement('If at first you don\'t succeed',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e54)))+'If at first you don\'t succeed, try, try, try again.
But isn\'t that the definition of insanity?
',[21,32]); + + order=33000; + new Game.Achievement('O Fortuna',loc("Own every fortune upgrade.
Owning this achievement makes fortunes appear twice as often; unlocked fortune upgrades also have a %1% chance to carry over after ascending.",40),[29,8]); + + order=61615; + new Game.Achievement('Initial public offering',loc("Make your first stock market profit."),[0,33]); + new Game.Achievement('Rookie numbers',loc("Own at least %1 of every stock market good.",100)+'Gotta pump those numbers up!',[9,33]); + new Game.Achievement('No nobility in poverty',loc("Own at least %1 of every stock market good.",500)+'What kind of twisted individual is out there cramming camels through needle holes anyway?',[10,33]); + new Game.Achievement('Full warehouses',loc("Own at least %1 of a stock market good.",1000),[11,33]); + new Game.Achievement('Make my day',loc("Make a day of CpS ($%1) in 1 stock market sale.",86400),[1,33]); + new Game.Achievement('Buy buy buy',loc("Spend a day of CpS ($%1) in 1 stock market purchase.",86400),[1,33]); + new Game.Achievement('Gaseous assets',loc("Have your stock market profits surpass a whole year of CpS ($%1).",31536000)+'Boy, how volatile!',[18,33]);Game.last.pool='shadow'; + new Game.Achievement('Pyramid scheme',loc("Unlock the highest-tier stock market headquarters."),[18,33]); + + order=10000; + new Game.Achievement('Jellicles',loc("Own %1 kitten upgrades.",10)+'Jellicles can and jellicles do! Make sure to wash your jellicles every day!',[18,19]); + + order=7002; + new Game.Achievement('Quincentennial and a half',loc("Have at least %1 of everything.",550)+'This won\'t fill the churning void inside, you know.',[29,26]); + + Game.CpsAchievement('What did we even eat before these'); + Game.CpsAchievement('Heavy flow'); + Game.CpsAchievement('More you say?'); + Game.BankAchievement('Large and in charge'); + Game.BankAchievement('Absolutely stuffed'); + Game.BankAchievement('It\'s only wafer-thin','Just the one!'); + + order=1000;new Game.Achievement('Clickety split',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e27))),[11,31]); + order=1050;new Game.Achievement('Gotta hand it to you',loc("Have %1.",loc("%1 cursor",LBeautify(700))),[0,17]); + order=1100;Game.TieredAchievement('Okay boomer','','Grandma',13); + order=1200;Game.TieredAchievement('Overripe','','Farm',12); + order=1300;Game.TieredAchievement('Rock on','','Mine',12); + order=1400;Game.TieredAchievement('Self-manmade man','','Factory',12); + order=1425;Game.TieredAchievement('Checks out','','Bank',12); + order=1450;Game.TieredAchievement('Living on a prayer','','Temple',12); + order=1475;Game.TieredAchievement('Higitus figitus migitus mum','','Wizard tower',12); + order=1500;Game.TieredAchievement('The incredible journey','','Shipment',12); + order=1600;Game.TieredAchievement('Just a phase','','Alchemy lab',12); + order=1700;Game.TieredAchievement('Don\'t let me leave, Murph','','Portal',12); + order=1800;Game.TieredAchievement('Caveman to cosmos','','Time machine',12); + order=1900;Game.TieredAchievement('Particular tastes','','Antimatter condenser',12); + order=2000;Game.TieredAchievement('A light snack','','Prism',12); + order=2100;Game.TieredAchievement('Tempting fate','','Chancemaker',12); + order=2200;Game.TieredAchievement('Tautological','','Fractal engine',12); + order=2300;Game.TieredAchievement('Curly braces','Or as the French call them, mustache boxes.
Go well with quotes.
','Javascript console',12); + + order=10000; + new Game.Achievement('Seven horseshoes',loc("Click %1.",loc("%1 golden cookie",LBeautify(27777)))+'Enough for one of those funky horses that graze near your factories.',[21,33]);Game.last.pool='shadow'; + + order=11005; + new Game.Achievement('Olden days',loc("Find the forgotten madeleine.")+'DashNet Farms remembers.',[12,3]); + + + order=1050;new Game.Achievement('The devil\'s workshop',loc("Have %1.",loc("%1 cursor",LBeautify(800))),[0,18]); + order=1200;Game.TieredAchievement('In the green','','Farm',13); + order=1300;Game.TieredAchievement('Mountain out of a molehill, but like in a good way','','Mine',13); + order=1400;Game.TieredAchievement('The wheels of progress','','Factory',13); + order=1425;Game.TieredAchievement('That\'s rich','','Bank',13); + order=1450;Game.TieredAchievement('Preaches and cream','','Temple',13); + order=1475;Game.TieredAchievement('Magic thinking','','Wizard tower',13); + order=1500;Game.TieredAchievement('Is there life on Mars?','Yes, there is. You\'re currently using it as filling in experimental flavor prototype #810657.','Shipment',13); + order=1600;Game.TieredAchievement('Bad chemistry','','Alchemy lab',13); + order=1700;Game.TieredAchievement('Reduced to gibbering heaps','','Portal',13); + order=1800;Game.TieredAchievement('Back already?','','Time machine',13); + order=1900;Game.TieredAchievement('Nuclear throne','','Antimatter condenser',13); + order=2000;Game.TieredAchievement('Making light of the situation','','Prism',13); + order=2100;Game.TieredAchievement('Flip a cookie. Chips, I win. Crust, you lose.','','Chancemaker',13); + order=2200;Game.TieredAchievement('In and of itself','','Fractal engine',13); + order=2300;Game.TieredAchievement('Duck typing','Hello, this is a duck typing. Got any grapes?','Javascript console',13); + + order=2400; + Game.TieredAchievement('They\'ll never know what hit \'em','','Idleverse',1); + Game.TieredAchievement('Well-versed','','Idleverse',2); + Game.TieredAchievement('Ripe for the picking','','Idleverse',3); + Game.TieredAchievement('Unreal','','Idleverse',4); + Game.TieredAchievement('Once you\'ve seen one','','Idleverse',5); + Game.TieredAchievement('Spoils and plunder','','Idleverse',6); + Game.TieredAchievement('Nobody exists on purpose, nobody belongs anywhere','Come watch TV?','Idleverse',7); + Game.TieredAchievement('Hyperspace expressway','','Idleverse',8); + Game.TieredAchievement('Versatile','','Idleverse',9); + Game.TieredAchievement('You are inevitable','','Idleverse',10); + Game.TieredAchievement('Away from this place','','Idleverse',11); + Game.TieredAchievement('Everywhere at once','','Idleverse',12); + Game.TieredAchievement('Reject reality, substitute your own','','Idleverse',13); + + order=2420; + Game.ProductionAchievement('Fringe','Idleverse',1); + Game.ProductionAchievement('Coherence','Idleverse',2); + Game.ProductionAchievement('Earth-616','Idleverse',3); + + new Game.Achievement('Strange topologies','',[33,26]);Game.Objects['Idleverse'].levelAchiev10=Game.last; + + order=5000; + new Game.Achievement('Grand design',loc("Own %1.",loc("%1 building",LBeautify(5000)))+'They\'ll remember you forever!',[32,12]); + new Game.Achievement('Ecumenopolis',loc("Own %1.",loc("%1 building",LBeautify(7500)))+'Getting a wee bit cramped.',[33,12]); + + order=6000; + new Game.Achievement('The full picture',loc("Purchase %1.",loc("%1 upgrade",LBeautify(300)))+'So that\'s where that fits in!',[32,11]); + new Game.Achievement('When there\'s nothing left to add',loc("Purchase %1.",loc("%1 upgrade",LBeautify(400)))+'...keep going.',[33,11]); + + order=7002; + new Game.Achievement('Sexcentennial',loc("Have at least %1 of everything.",600)+'Hey, nice milestone!',[31,33]); + + Game.CpsAchievement('Keep going until I say stop'); + Game.CpsAchievement('But I didn\'t say stop, did I?'); + Game.CpsAchievement('With unrivaled fervor'); + Game.BankAchievement('Think big'); + Game.BankAchievement('Hypersize me'); + Game.BankAchievement('Max capacity'); + + order=61616; + new Game.Achievement('Liquid assets',loc("Have your stock market profits surpass $%1.",1e7),[12,33]); + + order=11000; + new Game.Achievement('Stifling the press',loc("Squish the news ticker flat, then click on it.")+'Narrow in here or is it just me?',[27,7]); + + + order=2500; + Game.TieredAchievement('It\'s big brain time','','Cortex baker',1); + Game.TieredAchievement('Just my imagination','','Cortex baker',2); + Game.TieredAchievement('Now there\'s an idea','','Cortex baker',3); + Game.TieredAchievement('The organ that named itself','','Cortex baker',4); + Game.TieredAchievement('Gyrification','','Cortex baker',5); + Game.TieredAchievement('A trademarked portmanteau of "imagination" and "engineering"','','Cortex baker',6); + Game.TieredAchievement('Mindfulness','','Cortex baker',7); + Game.TieredAchievement('The 10% myth','','Cortex baker',8); + Game.TieredAchievement('Don\'t think about it too hard','','Cortex baker',9); + Game.TieredAchievement('Though fools seldom differ','','Cortex baker',10); + Game.TieredAchievement('Looking kind of dumb','','Cortex baker',11); + Game.TieredAchievement('A beautiful mind','','Cortex baker',12); + Game.TieredAchievement('Cardinal synapses','','Cortex baker',13); + + order=2520; + Game.ProductionAchievement('Positive thinking','Cortex baker',1); + Game.ProductionAchievement('The thought that counts','Cortex baker',2); + Game.ProductionAchievement('Unthinkable','Cortex baker',3); + + new Game.Achievement('Gifted','',[34,26]);Game.Objects['Cortex baker'].levelAchiev10=Game.last; + + + order=1100;Game.TieredAchievement('They moistly come at night','','Grandma',14); + order=1200;Game.TieredAchievement('It\'s grown on you','','Farm',14); + order=1300;Game.TieredAchievement('Don\'t let the walls cave in on you','','Mine',14); + order=1400;Game.TieredAchievement('Replaced by robots','','Factory',14); + order=1425;Game.TieredAchievement('Financial prodigy','Imagine how it would be, to be at the top making cash money.','Bank',14); + order=1450;Game.TieredAchievement('And I will pray to a big god','','Temple',14); + order=1475;Game.TieredAchievement('Shosple Colupis','','Wizard tower',14); + order=1500;Game.TieredAchievement('False vacuum','','Shipment',14); + order=1600;Game.TieredAchievement('Metallic taste','','Alchemy lab',14); + order=1700;Game.TieredAchievement('Swiss cheese','','Portal',14); + order=1800;Game.TieredAchievement('But the future refused to change','','Time machine',14); + order=1900;Game.TieredAchievement('What\'s the dark matter with you','','Antimatter condenser',14); + order=2000;Game.TieredAchievement('Enlightenment','','Prism',14); + order=2100;Game.TieredAchievement('Never tell me the odds','','Chancemaker',14); + order=2200;Game.TieredAchievement('Blowing an Apollonian gasket','','Fractal engine',14); + order=2300;Game.TieredAchievement('Get with the program','','Javascript console',14); + order=2400;Game.TieredAchievement('Lost your cosmic marbles','','Idleverse',14); + order=2500;Game.TieredAchievement('By will alone I set my mind in motion','','Cortex baker',14); + + order=1000;new Game.Achievement('Ain\'t that a click in the head',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e29))),[11,34]); + + order=7002; + new Game.Achievement('Sexcentennial and a half',loc("Have at least %1 of everything.",650)+'Hope you\'re enjoying the grind so far! It gets worse.',[21,34]); + + Game.CpsAchievement('I am speed'); + Game.CpsAchievement('And on and on'); + Game.BankAchievement('Fake it till you bake it'); + Game.BankAchievement('History in the baking'); + + order=22100;new Game.Achievement('Baby it\'s old outside',loc("Click one of Santa's helper grandmas during Christmas season."),[10,9]); + + order=5000; + new Game.Achievement('Myriad',loc("Own %1.",loc("%1 building",LBeautify(10000)))+'At this point, most of your assets lie in real estate.',[31,6]); + + order=6000; + new Game.Achievement('Kaizen',loc("Purchase %1.",loc("%1 upgrade",LBeautify(500)))+'Just a little more.',[31,5]); + new Game.Achievement('Beyond quality',loc("Purchase %1.",loc("%1 upgrade",LBeautify(600)))+'Dwarfing all of mankind\'s accomplishments.',[32,5]); + + Game.CpsAchievement('Everything happens so much'); + Game.CpsAchievement('I\'ll rest when I\'m dead'); + Game.BankAchievement('What do you get for the baker who has everything'); + Game.BankAchievement('Bottomless pit'); + + order=6001; + new Game.Achievement('All the stars in heaven',loc("Own %1 heavenly upgrades.",100),[30,5]); + + order=32500; + new Game.Achievement('No time like the present',loc("Redeem a cookie gift code from a friend (or from yourself, we don't judge)."),[34,6]); + + Game.CpsAchievement('Can we get much higher'); + Game.CpsAchievement('Speed\'s the name of the game (no it\'s not it\'s called Cookie Clicker)'); + Game.BankAchievement('Rainy day fund'); + Game.BankAchievement('And a little extra'); + + order=19990; + new Game.Achievement('Grandmapocalypse',loc("Trigger the grandmapocalypse for the first time."),[28,21]); + new Game.Achievement('Wrath cookie',loc("Click a wrath cookie."),[15,5]); + + order=30050; + new Game.Achievement('No more room in hell',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e57)))+'That is not dead which can eternal click.',[21,32]); + + order=32600; + new Game.Achievement('In her likeness',loc("Shape your clones to resemble %1.",loc("grandmas"))+'There she is.',[26,21]);Game.last.pool='shadow'; + + order=20999; + new Game.Achievement('Wrinkler poker',loc("Poke a wrinkler %1 times without killing it.",50)+'Also the name of a card game popular in retirement homes.',[19,8]); + + order=7002; + new Game.Achievement('Septcentennial',loc("Have at least %1 of everything.",700)+'In this economy?',[29,36]); + + order=2600; + Game.TieredAchievement('My own clone','','You',1); + Game.TieredAchievement('Multiplicity','','You',2); + Game.TieredAchievement('Born for this job','','You',3); + Game.TieredAchievement('Episode II','','You',4); + Game.TieredAchievement('Copy that','','You',5); + Game.TieredAchievement('Life finds a way','','You',6); + Game.TieredAchievement('Overcrowding','','You',7); + Game.TieredAchievement('Strength in numbers','','You',8); + Game.TieredAchievement('Army of me','','You',9); + Game.TieredAchievement('Know thyself','Do you ever look at yourself in the mirror and wonder... What is going on inside your head?','You',10); + Game.TieredAchievement('Didn\'t make sense not to live','','You',11); + Game.TieredAchievement('Genetic bottleneck','','You',12); + Game.TieredAchievement('Despite everything, it\'s still you','','You',13); + Game.TieredAchievement('Everyone everywhere all at once','','You',14); + + order=2620; + Game.ProductionAchievement('Self-made','You',1); + Game.ProductionAchievement('Reproducible results','You',2); + Game.ProductionAchievement('That\'s all you','You',3); + + new Game.Achievement('Self-improvement','',[35,26]);Game.Objects['You'].levelAchiev10=Game.last; + + order=1100;Game.TieredAchievement('And now you\'re even older','','Grandma',15); + order=1200;Game.TieredAchievement('Au naturel','','Farm',15); + order=1300;Game.TieredAchievement('Dirt-rich','','Mine',15); + order=1400;Game.TieredAchievement('Bots build bots','','Factory',15); + order=1425;Game.TieredAchievement('Getting that bag','','Bank',15); + order=1450;Game.TieredAchievement('The leader is good, the leader is great','','Temple',15); + order=1475;Game.TieredAchievement('You don\'t think they could\'ve used... it couldn\'t have been ma-','','Wizard tower',15); + order=1500;Game.TieredAchievement('Signed, sealed, delivered','','Shipment',15); + order=1600;Game.TieredAchievement('Sugar, spice, and everything nice','These were the ingredients chosen to create the perfect cookies.','Alchemy lab',15); + order=1700;Game.TieredAchievement('Not even remotely close to Kansas anymore','','Portal',15); + order=1800;Game.TieredAchievement('I only meant to stay a while','','Time machine',15); + order=1900;Game.TieredAchievement('Not 20 years away forever','','Antimatter condenser',15); + order=2000;Game.TieredAchievement('Bright side of the Moon','','Prism',15); + order=2100;Game.TieredAchievement('Riding the Mersenne twister','','Chancemaker',15); + order=2200;Game.TieredAchievement('Divide and conquer','','Fractal engine',15); + order=2300;Game.TieredAchievement('Pebcakes','Problem exists in my mouth!','Javascript console',15); + order=2400;Game.TieredAchievement('Greener on the other sides','','Idleverse',15); + order=2500;Game.TieredAchievement('Where is my mind','','Cortex baker',15); + order=2600;Game.TieredAchievement('Introspection','','You',15); + + order=61617; + new Game.Achievement('Debt evasion',loc("Take out a loan and ascend before incurring the CpS penalty.")+'Really got \'em buttered!',[4,33]); + + order=6000; + new Game.Achievement('Oft we mar what\'s well',loc("Purchase %1.",loc("%1 upgrade",LBeautify(700)))+'But don\'t let that stop you!',[33,5]); + + order=500000; + new Game.Achievement('Cookie Clicker',loc("Unlock the final building."),[30,6]); + Game.last.descFunc=function(){ + if (!Game.specialAnimLoop) + { + Game.specialAnimLoop=setInterval(function(){ + var el=l('parade'); + if (!el || !Game.tooltip.on) {clearInterval(Game.specialAnimLoop);Game.specialAnimLoop=0;return false;} + var x=Game.T; + el.style.backgroundPosition='-'+x+'px '+(Game.T%20<10?0:32)+'px'; + },100); + } + var x=Game.T; + return this.desc+''+loc("Everyone's here.")+'
'+loc("Won't you have some cookies too?")+'
'; + }; + + order=1000;new Game.Achievement('What\'s not clicking',loc("Make %1 from clicking.",loc("%1 cookie",LBeautify(1e31))),[11,36]); + order=1050; + new Game.Achievement('All on deck',loc("Have %1.",loc("%1 cursor",LBeautify(900))),[0,19]); + new Game.Achievement('A round of applause',loc("Have %1.",loc("%1 cursor",LBeautify(1000)))+'Boy, are my arms tired!',[0,28]); + + //end of achievements + + + for (var i in Game.Objects) + { + if (Game.Objects[i].levelAchiev10) {Game.Objects[i].levelAchiev10.baseDesc=loc("Reach level %1 %2.",[10,Game.Objects[i].plural]);Game.Objects[i].levelAchiev10.desc=Game.Objects[i].levelAchiev10.baseDesc;} + } + + + + LocalizeUpgradesAndAchievs(); + + + /*===================================================================================== + BUFFS + =======================================================================================*/ + + Game.buffs={};//buffs currently in effect by name + Game.buffsI=0; + Game.buffsL=l('buffs'); + Game.gainBuff=function(type,time,arg1,arg2,arg3) + { + type=Game.buffTypesByName[type]; + var obj=type.func(time,arg1,arg2,arg3); + obj.type=type; + obj.arg1=arg1; + obj.arg2=arg2; + obj.arg3=arg3; + if (!obj.dname && obj.name!='???') obj.dname=loc(obj.name); + + var buff={ + visible:true, + time:0, + name:'???', + desc:'', + icon:[0,0] + }; + if (Game.buffs[obj.name])//if there is already a buff in effect with this name + { + var buff=Game.buffs[obj.name]; + if (obj.max) buff.time=Math.max(obj.time,buff.time);//new duration is max of old and new + if (obj.add) buff.time+=obj.time;//new duration is old + new + if (!obj.max && !obj.add) buff.time=obj.time;//new duration is set to new + buff.maxTime=buff.time; + } + else//create new buff + { + for (var i in obj)//paste parameters onto buff + {buff[i]=obj[i];} + buff.maxTime=buff.time; + Game.buffs[buff.name]=buff; + buff.id=Game.buffsI; + + //create dom + Game.buffsL.innerHTML=Game.buffsL.innerHTML+'

'+buff.dname+'

'+buff.desc+'
' + ,'left',true):'')+' style="opacity:1;float:none;display:block;'+writeIcon(buff.icon)+'">'; + + buff.l=l('buff'+buff.id); + + Game.buffsI++; + } + Game.recalculateGains=1; + Game.storeToRefresh=1; + return buff; + } + Game.hasBuff=function(what)//returns 0 if there is no buff in effect with this name; else, returns it + {if (!Game.buffs[what]) return 0; else return Game.buffs[what];} + Game.updateBuffs=function()//executed every logic frame + { + for (var i in Game.buffs) + { + var buff=Game.buffs[i]; + + if (buff.time>=0) + { + if (!l('buffPieTimer'+buff.id)) l('buff'+buff.id).innerHTML=l('buff'+buff.id).innerHTML+'
'; + var T=1-(buff.time/buff.maxTime); + T=(T*144)%144; + l('buffPieTimer'+buff.id).style.backgroundPosition=(-Math.floor(T%18))*48+'px '+(-Math.floor(T/18))*48+'px'; + } + buff.time--; + if (buff.time<=0) + { + if (Game.onCrate==l('buff'+buff.id)) Game.tooltip.hide(); + if (buff.onDie) buff.onDie(); + Game.buffsL.removeChild(l('buff'+buff.id)); + if (Game.buffs[buff.name]) + { + Game.buffs[buff.name]=0; + delete Game.buffs[buff.name]; + } + Game.recalculateGains=1; + Game.storeToRefresh=1; + } + } + } + Game.killBuff=function(what)//remove a buff by name + {if (Game.buffs[what]){Game.buffs[what].time=0;/*Game.buffs[what]=0;*/}} + Game.killBuffs=function()//remove all buffs + {Game.buffsL.innerHTML='';Game.buffs={};Game.recalculateGains=1;Game.storeToRefresh=1;} + + + Game.buffTypes=[];//buff archetypes; only buffs declared from these can be saved and loaded + Game.buffTypesByName=[]; + Game.buffTypesN=0; + Game.buffType=function(name,func) + { + this.name=name; + this.func=func;//this is a function that returns a buff object; it takes a "time" argument in seconds, and 3 more optional arguments at most, which will be saved and loaded as floats + this.id=Game.buffTypesN; + this.vanilla=Game.vanilla; + Game.buffTypesByName[this.name]=this; + Game.buffTypes[Game.buffTypesN]=this; + Game.buffTypesN++; + } + + /* + basic buff parameters : + name:'Kitten rain', + desc:'It\'s raining kittens!', + icon:[0,0], + time:30*Game.fps + other parameters : + visible:false - will hide the buff from the buff list + add:true - if this buff already exists, add the new duration to the old one + max:true - if this buff already exists, set the new duration to the max of either + onDie:function(){} - function will execute when the buff runs out + power:3 - used by some buffs + multCpS:3 - buff multiplies CpS by this amount + multClick:3 - buff multiplies click power by this amount + */ + + //base buffs + new Game.buffType('frenzy',function(time,pow) + { + return { + name:'Frenzy', + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[10,14], + time:time*Game.fps, + add:true, + multCpS:pow, + aura:1 + }; + }); + new Game.buffType('blood frenzy',function(time,pow) + { + return { + name:'Elder frenzy', + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[29,6], + time:time*Game.fps, + add:true, + multCpS:pow, + aura:1 + }; + }); + new Game.buffType('clot',function(time,pow) + { + return { + name:'Clot', + desc:loc("Cookie production halved for %1!",Game.sayTime(time*Game.fps,-1)), + icon:[15,5], + time:time*Game.fps, + add:true, + multCpS:pow, + aura:2 + }; + }); + new Game.buffType('dragon harvest',function(time,pow) + { + if (Game.Has('Dragon fang')) pow=Math.ceil(pow*1.1); + return { + name:'Dragon Harvest', + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[10,25], + time:time*Game.fps, + add:true, + multCpS:pow, + aura:1 + }; + }); + new Game.buffType('everything must go',function(time,pow) + { + return { + name:'Everything must go', + desc:loc("All buildings are %1% cheaper for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[17,6], + time:time*Game.fps, + add:true, + power:pow, + aura:1 + }; + }); + new Game.buffType('cursed finger',function(time,pow) + { + return { + name:'Cursed finger', + desc:loc("Cookie production halted for %1,
but each click is worth %2 of CpS.",[Game.sayTime(time*Game.fps,-1),Game.sayTime(time*Game.fps,-1)]), + icon:[12,17], + time:time*Game.fps, + add:true, + power:pow, + multCpS:0, + aura:1 + }; + }); + new Game.buffType('click frenzy',function(time,pow) + { + return { + name:'Click frenzy', + desc:loc("Clicking power x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[0,14], + time:time*Game.fps, + add:true, + multClick:pow, + aura:1 + }; + }); + new Game.buffType('dragonflight',function(time,pow) + { + if (Game.Has('Dragon fang')) pow=Math.ceil(pow*1.1); + return { + name:'Dragonflight', + desc:loc("Clicking power x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[0,25], + time:time*Game.fps, + add:true, + multClick:pow, + aura:1 + }; + }); + new Game.buffType('cookie storm',function(time,pow) + { + return { + name:'Cookie storm', + desc:loc("Cookies everywhere!"), + icon:[22,6], + time:time*Game.fps, + add:true, + power:pow, + aura:1 + }; + }); + new Game.buffType('building buff',function(time,pow,building) + { + var obj=Game.ObjectsById[building]; + return { + name:Game.goldenCookieBuildingBuffs[obj.name][0], + dname:EN?Game.goldenCookieBuildingBuffs[obj.name][0]:loc("%1 Power!",obj.dname), + desc:loc("Your %1 are boosting your CpS!",loc("%1 "+obj.bsingle,LBeautify(obj.amount)))+'
'+loc("Cookie production +%1% for %2!",[Beautify(Math.ceil(pow*100-100)),Game.sayTime(time*Game.fps,-1)]), + icon:[obj.iconColumn,14], + time:time*Game.fps, + add:true, + multCpS:pow, + aura:1 + }; + }); + new Game.buffType('building debuff',function(time,pow,building) + { + var obj=Game.ObjectsById[building]; + return { + name:Game.goldenCookieBuildingBuffs[obj.name][1], + dname:EN?Game.goldenCookieBuildingBuffs[obj.name][1]:loc("%1 Burden!",obj.dname), + desc:loc("Your %1 are rusting your CpS!",loc("%1 "+obj.bsingle,LBeautify(obj.amount)))+'
'+loc("Cookie production %1% slower for %2!",[Beautify(Math.ceil(pow*100-100)),Game.sayTime(time*Game.fps,-1)]), + icon:[obj.iconColumn,15], + time:time*Game.fps, + add:true, + multCpS:1/pow, + aura:2 + }; + }); + new Game.buffType('sugar blessing',function(time,pow) + { + return { + name:'Sugar blessing', + desc:loc("You find %1% more golden cookies for the next %2.",[10,Game.sayTime(time*Game.fps,-1)]), + icon:[29,16], + time:time*Game.fps, + //add:true + }; + }); + new Game.buffType('haggler luck',function(time,pow) + { + return { + name:'Haggler\'s luck', + desc:loc("All upgrades are %1% cheaper for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[25,11], + time:time*Game.fps, + power:pow, + max:true + }; + }); + new Game.buffType('haggler misery',function(time,pow) + { + return { + name:'Haggler\'s misery', + desc:loc("All upgrades are %1% pricier for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[25,11], + time:time*Game.fps, + power:pow, + max:true + }; + }); + new Game.buffType('pixie luck',function(time,pow) + { + return { + name:'Crafty pixies', + desc:loc("All buildings are %1% cheaper for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[26,11], + time:time*Game.fps, + power:pow, + max:true + }; + }); + new Game.buffType('pixie misery',function(time,pow) + { + return { + name:'Nasty goblins', + desc:loc("All buildings are %1% pricier for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[26,11], + time:time*Game.fps, + power:pow, + max:true + }; + }); + new Game.buffType('magic adept',function(time,pow) + { + return { + name:'Magic adept', + desc:loc("Spells backfire %1 times less for %2.",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[29,11], + time:time*Game.fps, + power:pow, + max:true + }; + }); + new Game.buffType('magic inept',function(time,pow) + { + return { + name:'Magic inept', + desc:loc("Spells backfire %1 times more for %2.",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[29,11], + time:time*Game.fps, + power:pow, + max:true + }; + }); + new Game.buffType('devastation',function(time,pow) + { + return { + name:'Devastation', + desc:loc("Clicking power +%1% for %2!",[Math.floor(pow*100-100),Game.sayTime(time*Game.fps,-1)]), + icon:[23,18], + time:time*Game.fps, + multClick:pow, + aura:1, + max:true + }; + }); + new Game.buffType('sugar frenzy',function(time,pow) + { + return { + name:'Sugar frenzy', + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[29,14], + time:time*Game.fps, + add:true, + multCpS:pow, + aura:0 + }; + }); + new Game.buffType('loan 1',function(time,pow) + { + return { + name:'Loan 1', + dname:loc("Loan %1",1), + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[1,33], + time:time*Game.fps, + power:pow, + multCpS:pow, + max:true, + onDie:function(){if (Game.takeLoan) {Game.takeLoan(1,true);}}, + }; + }); + new Game.buffType('loan 1 interest',function(time,pow) + { + return { + name:'Loan 1 (interest)', + dname:loc("Loan %1 (interest)",1), + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[1,33], + time:time*Game.fps, + power:pow, + multCpS:pow, + max:true + }; + }); + new Game.buffType('loan 2',function(time,pow) + { + return { + name:'Loan 2', + dname:loc("Loan %1",2), + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[1,33], + time:time*Game.fps, + power:pow, + multCpS:pow, + max:true, + onDie:function(){if (Game.takeLoan) {Game.takeLoan(2,true);}}, + }; + }); + new Game.buffType('loan 2 interest',function(time,pow) + { + return { + name:'Loan 2 (interest)', + dname:loc("Loan %1 (interest)",2), + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[1,33], + time:time*Game.fps, + power:pow, + multCpS:pow, + max:true + }; + }); + new Game.buffType('loan 3',function(time,pow) + { + return { + name:'Loan 3', + dname:loc("Loan %1",3), + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[1,33], + time:time*Game.fps, + power:pow, + multCpS:pow, + max:true, + onDie:function(){if (Game.takeLoan) {Game.takeLoan(3,true);}}, + }; + }); + new Game.buffType('loan 3 interest',function(time,pow) + { + return { + name:'Loan 3 (interest)', + dname:loc("Loan %1 (interest)",3), + desc:loc("Cookie production x%1 for %2!",[pow,Game.sayTime(time*Game.fps,-1)]), + icon:[1,33], + time:time*Game.fps, + power:pow, + multCpS:pow, + max:true + }; + }); + new Game.buffType('gifted out',function(time,pow) + { + return { + name:'Gifted out', + desc:loc("Can't send or receive gifts again for %1.",Game.sayTime(time*Game.fps,-1)), + icon:[34,6], + time:time*Game.fps, + power:pow, + max:true + }; + }); + + //end of buffs + + + + + /*===================================================================================== + GRANDMAPOCALYPSE + =======================================================================================*/ + Game.UpdateGrandmapocalypse=function() + { + if (Game.Has('Elder Covenant') || Game.Objects['Grandma'].amount==0) Game.elderWrath=0; + else if (Game.pledgeT>0)//if the pledge is active, lower it + { + Game.pledgeT--; + if (Game.pledgeT==0)//did we reach 0? make the pledge purchasable again + { + Game.Lock('Elder Pledge'); + Game.Unlock('Elder Pledge'); + Game.elderWrath=1; + } + } + else + { + if (Game.Has('One mind') && Game.elderWrath==0) + { + Game.elderWrath=1; + } + if (Math.random()<0.001 && Game.elderWrath0) + { + if (Game.elderWrath>=3) PlayCue('fadeTo','grandmapocalypse'); + else PlayCue('fadeTo','click'); + } + Game.storeToRefresh=1; + } + + Game.elderWrathOld=Game.elderWrath; + + Game.UpdateWrinklers(); + } + + //wrinklers + + function inRect(x,y,rect) + { + //find out if the point x,y is in the rotated rectangle rect{w,h,r,o} (width,height,rotation in radians,y-origin) (needs to be normalized) + //I found this somewhere online I guess + var dx = x+Math.sin(-rect.r)*(-(rect.h/2-rect.o)),dy=y+Math.cos(-rect.r)*(-(rect.h/2-rect.o)); + var h1 = Math.sqrt(dx*dx + dy*dy); + var currA = Math.atan2(dy,dx); + var newA = currA - rect.r; + var x2 = Math.cos(newA) * h1; + var y2 = Math.sin(newA) * h1; + if (x2 > -0.5 * rect.w && x2 < 0.5 * rect.w && y2 > -0.5 * rect.h && y2 < 0.5 * rect.h) return true; + return false; + } + + Game.wrinklerHP=2.1; + Game.wrinklerLimit=14;//hard limit regardless of boosts + Game.wrinklers=[]; + for (var i=0;i4) Game.wrinklerSquishSound-=4; + } + Game.SpawnWrinkler=function(me) + { + if (!me) + { + var max=Game.getWrinklersMax(); + var n=0; + for (var i in Game.wrinklers) + { + if (Game.wrinklers[i].phase>0) n++; + } + for (var i in Game.wrinklers) + { + var it=Game.wrinklers[i]; + if (it.phase==0 && Game.elderWrath>0 && n0 && Game.wrinklers[i].hp>0) wrinklers.push(Game.wrinklers[i]); + } + if (wrinklers.length>0) + { + var me=choose(wrinklers); + me.hp=-10; + return me; + } + return false; + } + Game.UpdateWrinklers=function() + { + var xBase=0; + var yBase=0; + var onWrinkler=0; + if (Game.LeftBackground) + { + xBase=Game.cookieOriginX; + yBase=Game.cookieOriginY; + } + var max=Game.getWrinklersMax(); + var n=0; + for (var i in Game.wrinklers) + { + if (Game.wrinklers[i].phase>0) n++; + } + for (var i in Game.wrinklers) + { + var me=Game.wrinklers[i]; + if (me.phase==0 && Game.elderWrath>0 && n0) + { + if (me.close<1) me.close+=(1/Game.fps)/10; + if (me.close>1) me.close=1; + if (me.id>=max) me.hp=0; + } + else me.close=0; + if (me.close==1 && me.phase==1) + { + me.phase=2; + Game.recalculateGains=1; + } + if (me.phase==2) + { + me.sucked+=(((Game.cookiesPs/Game.fps)*Game.cpsSucked));//suck the cookies + } + if (me.phase>0) + { + if (me.type==0) + { + if (me.hp=50) Game.Win('Wrinkler poker'); + me.hurt=1; + me.hp-=0.75; + if (Game.prefs.particles && !Game.prefs.notScary && !Game.WINKLERS && !(me.hp<=0.5 && me.phase>0)) + { + var x=me.x+(Math.sin(me.r*Math.PI/180)*90); + var y=me.y+(Math.cos(me.r*Math.PI/180)*90); + for (var ii=0;ii<3;ii++) + { + //Game.particleAdd(x+Math.random()*50-25,y+Math.random()*50-25,Math.random()*4-2,Math.random()*-2-2,1,1,2,'wrinklerBits.png'); + var part=Game.particleAdd(x,y,Math.random()*4-2,Math.random()*-2-2,1,1,2,me.type==1?'shinyWrinklerBits.png':'wrinklerBits.png'); + part.r=-me.r; + } + } + } + Game.Click=0; + } + onWrinkler=1; + } + } + + if (me.hurt>0) + { + me.hurt-=5/Game.fps; + //me.close-=me.hurt*0.05; + //me.x+=Math.random()*2-1; + //me.y+=Math.random()*2-1; + me.r+=(Math.sin(Game.T*1)*me.hurt)*18;//Math.random()*2-1; + } + if (me.hp<=0.5 && me.phase>0) + { + Game.playWrinklerSquishSound(); + PlaySound('snd/pop'+Math.floor(Math.random()*3+1)+'.mp3',0.75); + Game.wrinklersPopped++; + Game.recalculateGains=1; + me.phase=0; + me.close=0; + me.hurt=0; + me.hp=3; + var toSuck=1.1; + if (Game.Has('Sacrilegious corruption')) toSuck*=1.05; + me.sucked*=1+Game.auraMult('Dragon Guts')*0.2; + if (me.type==1) toSuck*=3;//shiny wrinklers are an elusive, profitable breed + me.sucked*=toSuck;//cookie dough does weird things inside wrinkler digestive tracts + if (Game.Has('Wrinklerspawn')) me.sucked*=1.05; + if (Game.hasGod) + { + var godLvl=Game.hasGod('scorn'); + if (godLvl==1) me.sucked*=1.15; + else if (godLvl==2) me.sucked*=1.1; + else if (godLvl==3) me.sucked*=1.05; + } + if (me.sucked>0.5) + { + Game.Notify(me.type==1?loc("Exploded a shiny wrinkler"):loc("Exploded a wrinkler"),loc("Found %1!",loc("%1 cookie",LBeautify(me.sucked))),[19,8],6); + Game.Popup('
'+loc("+%1!",loc("%1 cookie",LBeautify(me.sucked)))+'
',Game.mouseX,Game.mouseY); + + if (Game.season=='halloween') + { + //if (Math.random()<(Game.HasAchiev('Spooky cookies')?0.2:0.05))//halloween cookie drops + var failRate=0.95; + if (Game.HasAchiev('Spooky cookies')) failRate=0.8; + if (Game.Has('Starterror')) failRate*=0.9; + failRate*=1/Game.dropRateMult(); + if (Game.hasGod) + { + var godLvl=Game.hasGod('seasons'); + if (godLvl==1) failRate*=0.9; + else if (godLvl==2) failRate*=0.95; + else if (godLvl==3) failRate*=0.97; + } + if (me.type==1) failRate*=0.9; + if (Math.random()>failRate)//halloween cookie drops + { + var cookie=choose(['Skull cookies','Ghost cookies','Bat cookies','Slime cookies','Pumpkin cookies','Eyeball cookies','Spider cookies']); + if (!Game.HasUnlocked(cookie) && !Game.Has(cookie)) + { + Game.Unlock(cookie); + Game.Notify(Game.Upgrades[cookie].dname,loc("You also found %1!",Game.Upgrades[cookie].dname),Game.Upgrades[cookie].icon); + } + } + } + Game.DropEgg(0.98); + } + if (me.type==1) Game.Win('Last Chance to See'); + Game.Earn(me.sucked); + /*if (Game.prefs.particles && !Game.WINKLERS) + { + var x=me.x+(Math.sin(me.r*Math.PI/180)*100); + var y=me.y+(Math.cos(me.r*Math.PI/180)*100); + for (var ii=0;ii<6;ii++) + { + Game.particleAdd(x+Math.random()*50-25,y+Math.random()*50-25,Math.random()*4-2,Math.random()*-2-2,1,1,2,'wrinklerBits.png'); + } + }*/ + if (Game.prefs.particles) + { + var x=me.x+(Math.sin(me.r*Math.PI/180)*90); + var y=me.y+(Math.cos(me.r*Math.PI/180)*90); + if (me.sucked>0) + { + for (var ii=0;ii<5;ii++) + { + Game.particleAdd(Game.mouseX,Game.mouseY,Math.random()*4-2,Math.random()*-2-2,Math.random()*0.5+0.75,1.5,2); + } + } + if (!Game.prefs.notScary && !Game.WINKLERS) + { + for (var ii=0;ii<8;ii++) + { + var part=Game.particleAdd(x,y,Math.random()*4-2,Math.random()*-2-2,1,1,2,me.type==1?'shinyWrinklerBits.png':'wrinklerBits.png'); + part.r=-me.r; + } + } + } + me.sucked=0; + } + } + if (onWrinkler) + { + Game.mousePointer=1; + } + } + Game.DrawWrinklers=function() + { + var ctx=Game.LeftBackground; + var selected=0; + for (var i in Game.wrinklers) + { + var me=Game.wrinklers[i]; + if (me.phase>0) + { + ctx.globalAlpha=me.close; + ctx.save(); + ctx.translate(me.x,me.y); + var sw=100+2*Math.sin(Game.T*0.2+i*3); + var sh=200+5*Math.sin(Game.T*0.2-2+i*3); + if (Game.prefs.fancy) + { + ctx.translate(0,30); + ctx.rotate(-(me.r)*Math.PI/180); + ctx.drawImage(Pic('wrinklerShadow.png'),-sw/2,-10,sw,sh); + ctx.rotate((me.r)*Math.PI/180); + ctx.translate(0,-30); + } + ctx.rotate(-(me.r)*Math.PI/180); + //var s=Math.min(1,me.sucked/(Game.cookiesPs*60))*0.75+0.25;//scale wrinklers as they eat + //ctx.scale(Math.pow(s,1.5)*1.25,s); + //ctx.fillRect(-50,-10,100,200); + var pic=Game.WINKLERS?'winkler.png':'wrinkler.png'; + if (me.type==1) pic=Game.WINKLERS?'shinyWinkler.png':'shinyWrinkler.png'; + else if (Game.season=='christmas') pic=Game.WINKLERS?'winterWinkler.png':'winterWrinkler.png'; + ctx.drawImage(Pic(pic),-sw/2,-10,sw,sh); + if (!Game.WINKLERS && Game.prefs.notScary) ctx.drawImage(Pic(Math.sin(Game.T*0.003+i*11+137+Math.sin(Game.T*0.017+i*13))>0.9997?'wrinklerBlink.png':'wrinklerGooglies.png'),-sw/2,-10+1*Math.sin(Game.T*0.2+i*3+1.2),sw,sh); + //ctx.drawImage(Pic(pic),-50,-10); + //ctx.fillText(me.id+' : '+me.sucked,0,0); + if (me.type==1 && Math.random()<0.3 && Game.prefs.particles)//sparkle + { + ctx.globalAlpha=Math.random()*0.65+0.1; + var s=Math.random()*30+5; + ctx.globalCompositeOperation='lighter'; + ctx.drawImage(Pic('glint.png'),-s/2+Math.random()*50-25,-s/2+Math.random()*200,s,s); + } + ctx.restore(); + + if (Game.prefs.particles && me.phase==2 && Math.random()<0.03) + { + Game.particleAdd(me.x,me.y,Math.random()*4-2,Math.random()*-2-2,Math.random()*0.5+0.5,1,2); + } + + if (me.selected) selected=me; + } + } + if (selected && Game.Has('Eye of the wrinkler')) + { + var x=Game.cookieOriginX; + var y=Game.cookieOriginY; + ctx.font='14px Merriweather'; + ctx.textAlign='center'; + var text=loc("Swallowed:"); + var width=Math.ceil(Math.max(ctx.measureText(text).width,ctx.measureText(Beautify(selected.sucked)).width)); + ctx.fillStyle='#000'; + ctx.globalAlpha=0.65; + /*ctx.strokeStyle='#000'; + ctx.lineWidth=8; + ctx.beginPath(); + ctx.moveTo(x,y); + ctx.lineTo(Math.floor(selected.x),Math.floor(selected.y)); + ctx.stroke();*/ + var xO=x-width/2-16; + var yO=y-4; + var dist=Math.floor(Math.sqrt((selected.x-xO)*(selected.x-xO)+(selected.y-yO)*(selected.y-yO))); + var angle=-Math.atan2(yO-selected.y,xO-selected.x)+Math.PI/2; + ctx.strokeStyle='#fff'; + ctx.lineWidth=1; + for (var i=0;i0.5) + { + number++; + if (Game.wrinklers[i].type==1) + { + shinies++; + amountShinies+=Game.wrinklers[i].sucked; + } + else amount+=Game.wrinklers[i].sucked; + } + } + return {amount:amount,number:number,shinies:shinies,amountShinies:amountShinies}; + } + Game.LoadWrinklers=function(amount,number,shinies,amountShinies) + { + if (number>0 && (amount>0 || amountShinies>0)) + { + var fullNumber=number-shinies; + var fullNumberShinies=shinies; + for (var i in Game.wrinklers) + { + if (number>0) + { + Game.wrinklers[i].phase=2; + Game.wrinklers[i].close=1; + Game.wrinklers[i].hp=3; + if (shinies>0) {Game.wrinklers[i].type=1;Game.wrinklers[i].sucked=amountShinies/fullNumberShinies;shinies--;} + else Game.wrinklers[i].sucked=amount/fullNumber; + number--; + }//respawn + } + } + } + + /*===================================================================================== + SPECIAL THINGS AND STUFF + =======================================================================================*/ + + + Game.specialTab=''; + Game.specialTabHovered=''; + Game.specialTabs=[]; + + Game.UpdateSpecial=function() + { + Game.specialTabs=[]; + if (Game.Has('A festive hat')) Game.specialTabs.push('santa'); + if (Game.Has('A crumbly egg')) Game.specialTabs.push('dragon'); + if (Game.specialTabs.length==0) {Game.ToggleSpecialMenu(0);return;} + + if (Game.LeftBackground) + { + Game.specialTabHovered=''; + var len=Game.specialTabs.length; + if (len==0) return; + var y=Game.LeftBackground.canvas.height-24-48*len; + for (var i=0;imoni && Game.santaLevel<14) + { + PlaySound('snd/shimmerClick.mp3'); + + Game.Spend(moni); + Game.santaLevel=(Game.santaLevel+1)%15; + if (Game.santaLevel==14) + { + Game.Unlock('Santa\'s dominion'); + Game.Notify(loc("You are granted %1.",Game.Upgrades['Santa\'s dominion'].dname),'',Game.Upgrades['Santa\'s dominion'].icon); + } + var drops=[]; + for (var i in Game.santaDrops) {if (!Game.HasUnlocked(Game.santaDrops[i])) drops.push(Game.santaDrops[i]);} + var drop=choose(drops); + if (drop) + { + Game.Unlock(drop); + Game.Notify(loc("Found a present!"),loc("You find a present which contains...")+'
'+Game.Upgrades[drop].dname+'!',Game.Upgrades[drop].icon); + } + + Game.ToggleSpecialMenu(1); + + if (l('specialPic')){var rect=l('specialPic').getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2)+32-TopBarOffset;} + + if (Game.santaLevel>=6) Game.Win('Coming to town'); + if (Game.santaLevel>=14) Game.Win('All hail Santa'); + Game.recalculateGains=1; + Game.upgradesToRebuild=1; + } + } + + Game.dragonLevels=[ + {name:'Dragon egg',action:loc("Chip it"),pic:0, + cost:function(){return Game.cookies>=1000000;}, + buy:function(){Game.Spend(1000000);}, + costStr:function(){return loc("%1 cookie",LBeautify(1000000));}}, + {name:'Dragon egg',action:loc("Chip it"),pic:1, + cost:function(){return Game.cookies>=1000000*2;}, + buy:function(){Game.Spend(1000000*2);}, + costStr:function(){return loc("%1 cookie",LBeautify(1000000*2));}}, + {name:'Dragon egg',action:loc("Chip it"),pic:2, + cost:function(){return Game.cookies>=1000000*4;}, + buy:function(){Game.Spend(1000000*4);}, + costStr:function(){return loc("%1 cookie",LBeautify(1000000*4));}}, + {name:'Shivering dragon egg',action:loc("Hatch it"),pic:3, + cost:function(){return Game.cookies>=1000000*8;}, + buy:function(){Game.Spend(1000000*8);}, + costStr:function(){return loc("%1 cookie",LBeautify(1000000*8));}}, + {name:'Krumblor, cookie hatchling',action:'Train Breath of Milk
Aura: kittens are 5% more effective',pic:4, + cost:function(){return Game.cookies>=1000000*16;}, + buy:function(){Game.Spend(1000000*16);}, + costStr:function(){return loc("%1 cookie",LBeautify(1000000*16));}}, + {name:'Krumblor, cookie hatchling',action:'Train Dragon Cursor
Aura: clicking is 5% more effective',pic:4,}, + {name:'Krumblor, cookie hatchling',action:'Train Elder Battalion
Aura: grandmas gain +1% CpS for every non-grandma building',pic:4,}, + {name:'Krumblor, cookie hatchling',action:'Train Reaper of Fields
Aura: golden cookies may trigger a Dragon Harvest',pic:4,}, + {name:'Krumblor, cookie dragon',action:'Train Earth Shatterer
Aura: buildings sell back for 50% instead of 25%',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Master of the Armory
Aura: all upgrades are 2% cheaper',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Fierce Hoarder
Aura: all buildings are 2% cheaper',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Dragon God
Aura: prestige CpS bonus +5%',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Arcane Aura
Aura: golden cookies appear 5% more often',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Dragonflight
Aura: golden cookies may trigger a Dragonflight',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Ancestral Metamorphosis
Aura: golden cookies give 10% more cookies',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Unholy Dominion
Aura: wrath cookies give 10% more cookies',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Epoch Manipulator
Aura: golden cookie effects last 5% longer',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Mind Over Matter
Aura: +25% random drops',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Radiant Appetite
Aura: all cookie production multiplied by 2',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Dragon\'s Fortune
Aura: +123% CpS per golden cookie on-screen',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Dragon\'s Curve
Aura: sugar lumps grow 5% faster, 50% weirder',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Reality Bending
Aura: 10% of every other aura, combined',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Dragon Orbs
Aura: selling your best building may grant a wish',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Supreme Intellect
Aura: confers various powers to your minigames',pic:5,}, + {name:'Krumblor, cookie dragon',action:'Train Dragon Guts
Aura: enhanced wrinklers',pic:5,}, + {name:'Krumblor, cookie dragon',action:loc("Bake dragon cookie")+'
'+loc("Delicious!")+'',pic:6, + cost:function(){var fail=0;for (var i in Game.Objects){if (Game.Objects[i].amount<50) fail=1;}return (fail==0);}, + buy:function(){for (var i in Game.Objects){Game.Objects[i].sacrifice(50);}Game.Unlock('Dragon cookie');}, + costStr:function(){return loc("%1 of every building",50);}}, + {name:'Krumblor, cookie dragon',action:loc("Train secondary aura")+'
'+loc("Lets you use two dragon auras simultaneously")+'',pic:7, + cost:function(){var fail=0;for (var i in Game.Objects){if (Game.Objects[i].amount<200) fail=1;}return (fail==0);}, + buy:function(){for (var i in Game.Objects){Game.Objects[i].sacrifice(200);}}, + costStr:function(){return loc("%1 of every building",200);}}, + {name:'Krumblor, cookie dragon',action:loc("Your dragon is fully trained."),pic:8} + ]; + + Game.dragonAuras={ + 0:{name:'No aura',pic:[0,7],desc:loc("Select an aura from those your dragon knows.")}, + 1:{name:'Breath of Milk',pic:[18,25],desc:loc("Kittens are %1% more effective.",5)}, + 2:{name:'Dragon Cursor',pic:[0,25],desc:loc("Clicking is %1% more powerful.",5)}, + 3:{name:'Elder Battalion',pic:[1,25],desc:loc("Grandmas gain +%1% CpS for each non-grandma building.",1)}, + 4:{name:'Reaper of Fields',pic:[2,25],desc:loc("Golden cookies may trigger a Dragon Harvest.")}, + 5:{name:'Earth Shatterer',pic:[3,25],desc:loc("Buildings sell back for %1% instead of %2%.",[50,25])}, + 6:{name:'Master of the Armory',pic:[4,25],desc:loc("All upgrades are %1% cheaper.",2)}, + 7:{name:'Fierce Hoarder',pic:[15,25],desc:loc("All buildings are %1% cheaper.",2)}, + 8:{name:'Dragon God',pic:[16,25],desc:loc("+%1% prestige level effect on CpS.",5)}, + 9:{name:'Arcane Aura',pic:[17,25],desc:loc("Golden cookies appear %1% more often.",5)}, + 10:{name:'Dragonflight',pic:[5,25],desc:loc("Golden cookies may trigger a Dragonflight.")}, + 11:{name:'Ancestral Metamorphosis',pic:[6,25],desc:loc("Golden cookies give %1% more cookies.",10)}, + 12:{name:'Unholy Dominion',pic:[7,25],desc:loc("Wrath cookies give %1% more cookies.",10)}, + 13:{name:'Epoch Manipulator',pic:[8,25],desc:loc("Golden cookies stay %1% longer.",5)}, + 14:{name:'Mind Over Matter',pic:[13,25],desc:loc("Random drops are %1% more common.",25)}, + 15:{name:'Radiant Appetite',pic:[14,25],desc:loc("All cookie production multiplied by %1.",2)}, + 16:{name:'Dragon\'s Fortune',pic:[19,25],desc:loc("+%1% CpS per golden cookie on-screen, multiplicative.",123)}, + 17:{name:'Dragon\'s Curve',pic:[20,25],desc:loc("+%1% sugar lump growth.",5)+" "+loc("Sugar lumps are twice as likely to be unusual.")}, + 18:{name:'Reality Bending',pic:[32,25],desc:loc("One tenth of every other dragon aura, combined.")}, + 19:{name:'Dragon Orbs',pic:[33,25],desc:loc("With no buffs and no golden cookies on screen, selling your most powerful building has %1% chance to summon one.",10)}, + 20:{name:'Supreme Intellect',pic:[34,25],desc:loc("Confers various powers to your minigames while active.
See the bottom of each minigame for more details.")}, + 21:{name:'Dragon Guts',pic:[35,25],desc:loc("You can attract %1 more wrinklers.",2)+'
'+loc("Wrinklers digest %1% more cookies.",20)+'
'+loc("Wrinklers explode into %1% more cookies.",20)}, + }; + + Game.dragonAurasBN={};for (var i in Game.dragonAuras){Game.dragonAurasBN[Game.dragonAuras[i].name]=Game.dragonAuras[i];} + for (var i in Game.dragonAuras){Game.dragonAuras[i].id=parseInt(i);Game.dragonAuras[i].dname=loc(Game.dragonAuras[i].name);} + + for (var i=0;i=4 && i'+loc("Aura: %1",Game.dragonAuras[i-3].desc)+''; + if (i>=5) + { + it.costStr=function(building){return function(){return loc("%1 "+building.bsingle,LBeautify(100));}}(Game.ObjectsById[i-5]); + it.cost=function(building){return function(){return building.amount>=100;}}(Game.ObjectsById[i-5]); + it.buy=function(building){return function(){building.sacrifice(100);}}(Game.ObjectsById[i-5]); + } + } + } + + Game.hasAura=function(what) + { + if (Game.dragonAuras[Game.dragonAura].name==what || Game.dragonAuras[Game.dragonAura2].name==what) return true; else return false; + } + Game.auraMult=function(what) + { + var n=0; + if (Game.dragonAuras[Game.dragonAura].name==what || Game.dragonAuras[Game.dragonAura2].name==what) n=1; + if ((Game.dragonAuras[Game.dragonAura].name=='Reality Bending' || Game.dragonAuras[Game.dragonAura2].name=='Reality Bending') && Game.dragonLevel>=Game.dragonAurasBN[what].id+4) n+=0.1; + return n; + } + + Game.SelectDragonAura=function(slot,update) + { + var currentAura=0; + var otherAura=0; + if (slot==0) currentAura=Game.dragonAura; else currentAura=Game.dragonAura2; + if (slot==0) otherAura=Game.dragonAura2; else otherAura=Game.dragonAura; + if (!update) Game.SelectingDragonAura=currentAura; + + var str=''; + for (var i in Game.dragonAuras) + { + if (Game.dragonLevel>=parseInt(i)+4) + { + var icon=Game.dragonAuras[i].pic; + if (i==0 || i!=otherAura) str+='
'; + } + } + + var highestBuilding=0; + for (var i in Game.Objects) {if (Game.Objects[i].amount>0) highestBuilding=Game.Objects[i];} + + Game.Prompt('

'+loc(slot==1?"Set your dragon's secondary aura":"Set your dragon's aura")+'

'+ + '
'+ + '
'+ + '
'+str+'
'+ + '
'+ + '
'+(highestBuilding==0?loc("Switching your aura is free because you own no buildings."):loc("The cost of switching your aura is %1.
This will affect your CpS!",loc("%1 "+highestBuilding.bsingle,LBeautify(1))))+'
' + ,[[loc("Confirm"),(slot==0?'Game.dragonAura':'Game.dragonAura2')+'=Game.SelectingDragonAura;'+(highestBuilding==0 || currentAura==Game.SelectingDragonAura?'':'Game.ObjectsById['+highestBuilding.id+'].sacrifice(1);')+'Game.ToggleSpecialMenu(1);Game.ClosePrompt();'],loc("Cancel")],0,'widePrompt'); + Game.DescribeDragonAura(Game.SelectingDragonAura); + } + Game.SelectingDragonAura=-1; + Game.SetDragonAura=function(aura,slot) + { + Game.SelectingDragonAura=aura; + Game.SelectDragonAura(slot,1); + } + Game.DescribeDragonAura=function(aura) + { + l('dragonAuraInfo').innerHTML= + '

'+Game.dragonAuras[aura].dname+'

'+ + '
'+ + Game.dragonAuras[aura].desc+ + '
'; + } + + Game.UpgradeDragon=function() + { + if (Game.dragonLevel=Game.dragonLevels.length-1) Game.Win('Here be dragon'); + Game.ToggleSpecialMenu(1); + if (l('specialPic')){var rect=l('specialPic').getBounds();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2)+32-TopBarOffset;} + Game.recalculateGains=1; + Game.upgradesToRebuild=1; + } + } + + Game.lastClickedSpecialPic=0; + Game.ClickSpecialPic=function() + { + if (Game.specialTab=='dragon' && Game.dragonLevel>=4 && Game.Has('Pet the dragon') && l('specialPic')) + { + triggerAnim(l('specialPic'),'pucker'); + PlaySound('snd/click'+Math.floor(Math.random()*7+1)+'.mp3',0.3); + if (Date.now()-Game.lastClickedSpecialPic>2000) PlaySound('snd/growl.mp3'); + //else if (Math.random()<0.5) PlaySound('snd/growl.mp3',0.5+Math.random()*0.2); + Game.lastClickedSpecialPic=Date.now(); + if (Game.prefs.particles) + { + Game.particleAdd(Game.mouseX,Game.mouseY-32,Math.random()*4-2,Math.random()*-2-4,Math.random()*0.2+0.5,1,2,[20,3]); + } + if (Game.dragonLevel>=8 && Math.random()<1/20) + { + Math.seedrandom(Game.seed+'/dragonTime'); + var drops=['Dragon scale','Dragon claw','Dragon fang','Dragon teddy bear']; + drops=shuffle(drops); + var drop=drops[Math.floor((new Date().getMinutes()/60)*drops.length)]; + if (!Game.Has(drop) && !Game.HasUnlocked(drop)) + { + Game.Unlock(drop); + Game.Notify(drop,''+loc("Your dragon dropped something!")+'',Game.Upgrades[drop].icon); + } + Math.seedrandom(); + } + } + } + + Game.ToggleSpecialMenu=function(on) + { + if (on) + { + var pic=''; + var frame=0; + if (Game.specialTab=='santa') {pic='santa.png?v='+Game.version;frame=Game.santaLevel;} + else if (Game.specialTab=='dragon') {pic='dragon.png?v='+Game.version;frame=Game.dragonLevels[Game.dragonLevel].pic;} + else {pic='dragon.png?v='+Game.version;frame=4;} + + var str='
'; + str+='
x
'; + + if (Game.specialTab=='santa') + { + var moni=Math.pow(Game.santaLevel+1,Game.santaLevel+1); + + str+='

'+Game.santaLevels[Game.santaLevel]+'

'; + if (Game.santaLevel<14) + { + str+='
'+ + ''+ + ''; + } + } + else if (Game.specialTab=='dragon') + { + var level=Game.dragonLevels[Game.dragonLevel]; + + str+='

'+level.name+'

'; + + if (Game.dragonLevel>=5) + { + var icon=Game.dragonAuras[Game.dragonAura].pic; + str+='

'+Game.dragonAuras[Game.dragonAura].dname+'

'+ + '
'+ + Game.dragonAuras[Game.dragonAura].desc+ + '
' + ,'top')+ + '>'; + } + if (Game.dragonLevel>=27)//2nd aura slot; increased with last building + { + var icon=Game.dragonAuras[Game.dragonAura2].pic; + str+='

'+Game.dragonAuras[Game.dragonAura2].dname+'

'+ + '
'+ + Game.dragonAuras[Game.dragonAura2].desc+ + '
' + ,'top')+ + '>'; + } + + if (Game.dragonLevel'+ + '
'+level.action+'
'+ + '
|
'+ + '
'+loc("sacrifice %1",''+level.costStr()+'
')+''+ + '
'; + } + else + { + str+='
'+ + '
'+level.action+'
'; + } + } + + l('specialPopup').innerHTML=str; + + l('specialPopup').className='framed prompt onScreen'; + } + else + { + if (Game.specialTab!='') + { + Game.specialTab=''; + l('specialPopup').className='framed prompt offScreen'; + setTimeout(function(){if (Game.specialTab=='') {/*l('specialPopup').style.display='none';*/l('specialPopup').innerHTML='';}},1000*0.2); + } + } + } + Game.DrawSpecial=function() + { + var len=Game.specialTabs.length; + if (len==0) return; + Game.LeftBackground.globalAlpha=1; + var y=Game.LeftBackground.canvas.height-24-48*len; + var tabI=0; + + for (var i in Game.specialTabs) + { + var selected=0; + var hovered=0; + if (Game.specialTab==Game.specialTabs[i]) selected=1; + if (Game.specialTabHovered==Game.specialTabs[i]) hovered=1; + var x=24; + var s=1; + var pic=''; + var frame=0; + if (hovered) {s=1;x=24;} + if (selected) {s=1;x=48;} + + if (Game.specialTabs[i]=='santa') {pic='santa.png?v='+Game.version;frame=Game.santaLevel;} + else if (Game.specialTabs[i]=='dragon') {pic='dragon.png?v='+Game.version;frame=Game.dragonLevels[Game.dragonLevel].pic;} + else {pic='dragon.png?v='+Game.version;frame=4;} + + if (hovered || selected) + { + var ss=s*64; + var r=Math.floor((Game.T*0.5)%360); + Game.LeftBackground.save(); + Game.LeftBackground.translate(x,y); + if (Game.prefs.fancy) Game.LeftBackground.rotate((r/360)*Math.PI*2); + Game.LeftBackground.globalAlpha=0.75; + Game.LeftBackground.drawImage(Pic('shine.png'),-ss/2,-ss/2,ss,ss); + Game.LeftBackground.restore(); + } + + if (Game.prefs.fancy) Game.LeftBackground.drawImage(Pic(pic),96*frame,0,96,96,(x+(selected?0:Math.sin(Game.T*0.2+tabI)*3)-24*s),(y-(selected?6:Math.abs(Math.cos(Game.T*0.2+tabI))*6)-24*s),48*s,48*s); + else Game.LeftBackground.drawImage(Pic(pic),96*frame,0,96,96,(x-24*s),(y-24*s),48*s,48*s); + + tabI++; + y+=48; + } + + } + + /*===================================================================================== + VISUAL EFFECTS + =======================================================================================*/ + + Game.AllMilks=[ + {name:'Automatic',icon:[0,7],type:-1,pic:'milkPlain'}, + {name:'Plain milk',icon:[1,8],type:0,pic:'milkPlain'}, + {name:'Chocolate milk',icon:[2,8],type:0,pic:'milkChocolate'}, + {name:'Raspberry milk',icon:[3,8],type:0,pic:'milkRaspberry'}, + {name:'Orange milk',icon:[4,8],type:0,pic:'milkOrange'}, + {name:'Caramel milk',icon:[5,8],type:0,pic:'milkCaramel'}, + {name:'Banana milk',icon:[6,8],type:0,pic:'milkBanana'}, + {name:'Lime milk',icon:[7,8],type:0,pic:'milkLime'}, + {name:'Blueberry milk',icon:[8,8],type:0,pic:'milkBlueberry'}, + {name:'Strawberry milk',icon:[9,8],type:0,pic:'milkStrawberry'}, + {name:'Vanilla milk',icon:[10,8],type:0,pic:'milkVanilla'}, + {name:'Zebra milk',icon:[10,7],type:1,pic:'milkZebra'}, + {name:'Cosmic milk',icon:[9,7],type:1,pic:'milkStars'}, + {name:'Flaming milk',icon:[8,7],type:1,pic:'milkFire'}, + {name:'Sanguine milk',icon:[7,7],type:1,pic:'milkBlood'}, + {name:'Midas milk',icon:[6,7],type:1,pic:'milkGold'}, + {name:'Midnight milk',icon:[5,7],type:1,pic:'milkBlack'}, + {name:'Green inferno milk',icon:[4,7],type:1,pic:'milkGreenFire'}, + {name:'Frostfire milk',icon:[3,7],type:1,pic:'milkBlueFire'}, + {name:'Honey milk',icon:[21,23],type:0,pic:'milkHoney'}, + {name:'Coffee milk',icon:[22,23],type:0,pic:'milkCoffee'}, + {name:'Tea milk',icon:[23,23],type:0,pic:'milkTea'}, + {name:'Coconut milk',icon:[24,23],type:0,pic:'milkCoconut'}, + {name:'Cherry milk',icon:[25,23],type:0,pic:'milkCherry'}, + {name:'Soy milk',icon:[27,23],type:1,pic:'milkSoy'}, + {name:'Spiced milk',icon:[26,23],type:0,pic:'milkSpiced'}, + {name:'Maple milk',icon:[28,23],type:0,pic:'milkMaple'}, + {name:'Mint milk',icon:[29,23],type:0,pic:'milkMint'}, + {name:'Licorice milk',icon:[30,23],type:0,pic:'milkLicorice'}, + {name:'Rose milk',icon:[31,23],type:0,pic:'milkRose'}, + {name:'Dragonfruit milk',icon:[21,24],type:0,pic:'milkDragonfruit'}, + {name:'Melon milk',icon:[22,24],type:0,pic:'milkMelon'}, + {name:'Blackcurrant milk',icon:[23,24],type:0,pic:'milkBlackcurrant'}, + {name:'Peach milk',icon:[24,24],type:0,pic:'milkPeach'}, + {name:'Hazelnut milk',icon:[25,24],type:0,pic:'milkHazelnut'}, + ]; + + Game.Milks=[]; + for (var i=0;i=1 && Game.elderWrathD<2) + { + Game.bgR=(Game.elderWrathD-1)/1; + Game.bg=Game.defaultBg; + Game.bgFade='grandmas1'; + } + else if (Game.elderWrathD>=2 && Game.elderWrathD<3) + { + Game.bgR=(Game.elderWrathD-2)/1; + Game.bg='grandmas1'; + Game.bgFade='grandmas2'; + } + else if (Game.elderWrathD>=3)// && Game.elderWrathD<4) + { + Game.bgR=(Game.elderWrathD-3)/1; + Game.bg='grandmas2'; + Game.bgFade='grandmas3'; + } + + if (Game.bgType!=0 && Game.ascensionMode!=1) + { + Game.bgR=0; + Game.bg=Game.BGsByChoice[Game.bgType].pic; + Game.bgFade=Game.bg; + } + + Game.Background.fillPattern(Pic(Game.bg+'.jpg'),0,0,Game.Background.canvas.width,Game.Background.canvas.height,512,512,0,0); + if (Game.bgR>0) + { + Game.Background.globalAlpha=Game.bgR; + Game.Background.fillPattern(Pic(Game.bgFade+'.jpg'),0,0,Game.Background.canvas.width,Game.Background.canvas.height,512,512,0,0); + } + Game.Background.globalAlpha=1; + Game.Background.drawImage(Pic('shadedBordersSoft.png'),0,0,Game.Background.canvas.width,Game.Background.canvas.height); + } + + } + Timer.track('window background'); + + //clear + ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height); + /*if (Game.AscendTimer=1000) pic='cookieShower3.png'; + else if (Game.cookiesPs>=500) pic='cookieShower2.png'; + else if (Game.cookiesPs>=50) pic='cookieShower1.png'; + else pic=''; + } + if (pic!='') + { + if (Game.elderWrathD>=1 && !Game.prefs.notScary) opacity=1-((Math.min(Game.elderWrathD,1.5)-1)/0.5); + ctx.globalAlpha=opacity; + var y=(Math.floor(Game.T*2)%512); + ctx.fillPattern(Pic(pic),0,0,ctx.canvas.width,ctx.canvas.height+512,512,512,0,y); + ctx.globalAlpha=1; + } + //snow + if (Game.season=='christmas') + { + var y=(Math.floor(Game.T*2.5)%512); + ctx.globalAlpha=0.75; + ctx.globalCompositeOperation='lighter'; + ctx.fillPattern(Pic('snow2.jpg'),0,0,ctx.canvas.width,ctx.canvas.height+512,512,512,0,y); + ctx.globalCompositeOperation='source-over'; + ctx.globalAlpha=1; + } + //hearts + if (Game.season=='valentines') + { + var y=(Math.floor(Game.T*2.5)%512); + ctx.globalAlpha=1; + ctx.fillPattern(Pic('heartStorm.png'),0,0,ctx.canvas.width,ctx.canvas.height+512,512,512,0,y); + ctx.globalAlpha=1; + } + Timer.track('left background'); + + Game.particlesDraw(0); + ctx.globalAlpha=1; + Timer.track('particles'); + + //big cookie shine + var s=512; + + var x=Game.cookieOriginX; + var y=Game.cookieOriginY; + + var r=Math.floor((Game.T*0.5)%360); + ctx.save(); + ctx.translate(x,y); + ctx.rotate((r/360)*Math.PI*2); + var alphaMult=1; + if (Game.bgType==2 || Game.bgType==4) alphaMult=0.5; + var pic='shine.png'; + if (goodBuff) {pic='shineGold.png';alphaMult=1;} + else if (badBuff) {pic='shineRed.png';alphaMult=1;} + if (goodBuff && Game.prefs.fancy) ctx.globalCompositeOperation='lighter'; + ctx.globalAlpha=0.5*alphaMult; + ctx.drawImage(Pic(pic),-s/2,-s/2,s,s); + ctx.rotate((-r*2/360)*Math.PI*2); + ctx.globalAlpha=0.25*alphaMult; + ctx.drawImage(Pic(pic),-s/2,-s/2,s,s); + ctx.restore(); + Timer.track('shine'); + + if (Game.ReincarnateTimer>0) + { + ctx.globalAlpha=1-Game.ReincarnateTimer/Game.ReincarnateDuration; + ctx.fillStyle='#000'; + ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height); + ctx.globalAlpha=1; + } + + if (showDragon) + { + //big dragon + var s=300*2*(1+Math.sin(Game.T*0.013)*0.1); + var x=Game.cookieOriginX-s/2; + var y=Game.cookieOriginY-s/(1.4+0.2*Math.sin(Game.T*0.01)); + ctx.drawImage(Pic('dragonBG.png'),x,y,s,s); + } + + //big cookie + if (false)//don't do that + { + ctx.globalAlpha=1; + var amount=Math.floor(Game.cookies).toString(); + var digits=amount.length; + var space=0; + for (var i=0;i0) space-=s*(1-num/10)/2; + if (i==0 && num>1) space+=s*0.1; + for (var ii=0;ii0.997) w=1.5; + else if (w>0.994) w=0.5; + else w=0; + w*=-4; + if (fancy) w+=Math.sin((n+Game.T*0.01)*Math.PI/2)*4; + var x=0; + var y=(140/* *Game.BigCookieSize*/+n*16+w)-16; + + var rot=7.2;//(1/50)*360 + if (i==0 && fancy) rot-=Game.T*0.1; + if (i%50==0) rot+=7.2/2; + ctx.rotate((rot/360)*Math.PI*2); + ctx.drawImage(pic,0,0,32,32,x,y,32,32); + //ctx.drawImage(pic,32*(i==spe),0,32,32,x,y,32,32); + + /*if (i==spe) + { + y+=16; + x=Game.cookieOriginX+Math.sin(-((r-5)/360)*Math.PI*2)*y; + y=Game.cookieOriginY+Math.cos(-((r-5)/360)*Math.PI*2)*y; + if (Game.CanClick && ctx && Math.abs(Game.mouseX-x)<16 && Math.abs(Game.mouseY-y)<16) Game.mousePointer=1; + }*/ + } + ctx.restore(); + Timer.track('cursors'); + } + } + else + { + var tBase=Math.max(0,(Game.AscendTimer-Game.AscendBreakpoint)/(Game.AscendDuration-Game.AscendBreakpoint)); + //big crumbling cookie + //var t=(3*Math.pow(tBase,2)-2*Math.pow(tBase,3));//S curve + var t=Math.pow(tBase,0.5); + + var shake=0; + if (Game.AscendTimer0) + { + ctx.save(); + ctx.globalAlpha=1-Math.pow(t,0.5); + ctx.translate(x,y); + ctx.globalCompositeOperation='lighter'; + ctx.rotate(Game.T*0.007); + s=0.5+Math.pow(tBase,0.6)*1; + var s2=(600)*s; + ctx.drawImage(Pic('heavenRing1.jpg'),-s2/2,-s2/2,s2,s2); + ctx.rotate(-Game.T*0.002); + s=0.5+Math.pow(1-tBase,0.4)*1; + s2=(600)*s; + ctx.drawImage(Pic('heavenRing2.jpg'),-s2/2,-s2/2,s2,s2); + ctx.restore(); + } + + s=256;//*Game.BigCookieSize; + + ctx.save(); + ctx.translate(x,y); + ctx.rotate((t*(-0.1))*Math.PI*2); + + var chunks={0:7,1:6,2:3,3:2,4:8,5:1,6:9,7:5,8:0,9:4}; + s*=t/2+1; + /*ctx.globalAlpha=(1-t)*0.33; + for (var i=0;i<10;i++) + { + var d=(t-0.2)*(80+((i+2)%3)*40); + ctx.drawImage(Pic('brokenCookie.png'),256*(chunks[i]),0,256,256,-s/2+Math.sin(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,-s/2+Math.cos(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,s,s); + } + ctx.globalAlpha=(1-t)*0.66; + for (var i=0;i<10;i++) + { + var d=(t-0.1)*(80+((i+2)%3)*40); + ctx.drawImage(Pic('brokenCookie.png'),256*(chunks[i]),0,256,256,-s/2+Math.sin(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,-s/2+Math.cos(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d,s,s); + }*/ + ctx.globalAlpha=1-t; + for (var i=0;i<10;i++) + { + var d=(t)*(80+((i+2)%3)*40); + var x2=(Math.random()*2-1)*5*shake; + var y2=(Math.random()*2-1)*5*shake; + ctx.drawImage(Pic('brokenCookie.png'),256*(chunks[i]),0,256,256,-s/2+Math.sin(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d+x2,-s/2+Math.cos(-(((chunks[i]+4)%10)/10)*Math.PI*2)*d+y2,s,s); + } + var brokenHalo=1-Math.min(t/(1/3),1/3)*3; + if (Game.AscendTimer0) + { + ctx.globalAlpha=1-tBase/0.1; + ctx.fillStyle='#fff'; + ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height); + ctx.globalAlpha=1; + } + if (tBase>0.8) + { + ctx.globalAlpha=(tBase-0.8)/0.2; + ctx.fillStyle='#000'; + ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height); + ctx.globalAlpha=1; + } + } + + //milk and milk accessories + if (Game.prefs.milk) + { + var width=ctx.canvas.width; + var height=ctx.canvas.height; + var x=Math.floor((Game.T*2-(Game.milkH-Game.milkHd)*2000+480*2)%480);//Math.floor((Game.T*2+Math.sin(Game.T*0.1)*2+Math.sin(Game.T*0.03)*2-(Game.milkH-Game.milkHd)*2000+480*2)%480); + var y=(Game.milkHd)*height;//(((Game.milkHd)*ctx.canvas.height)*(1+0.05*(Math.sin(Game.T*0.017)/2+0.5))); + var a=1; + if (Game.AscendTimer>0) + { + y*=1-Math.pow((Game.AscendTimer/Game.AscendBreakpoint),2)*2; + a*=1-Math.pow((Game.AscendTimer/Game.AscendBreakpoint),2)*2; + } + else if (Game.ReincarnateTimer>0) + { + y*=1-Math.pow(1-(Game.ReincarnateTimer/Game.ReincarnateDuration),2)*2; + a*=1-Math.pow(1-(Game.ReincarnateTimer/Game.ReincarnateDuration),2)*2; + } + + if (Game.TOYS) + { + //golly + if (!Game.Toy) + { + Game.toys=[]; + Game.toysType=choose([1,2]); + Game.Toy=function(x,y) + { + this.id=Game.toys.length; + this.x=x; + this.y=y; + this.xd=Math.random()*10-5; + this.yd=Math.random()*10-5; + this.r=Math.random()*Math.PI*2; + this.rd=Math.random()*0.1-0.05; + var v=Math.random();var a=0.5;var b=0.5; + if (v<=a) v=b-b*Math.pow(1-v/a,3); else v=b+(1-b)*Math.pow((v-a)/(1-a),3); + this.s=(Game.toysType==1?64:48)*(0.1+v*1.9); + if (Game.toysType==2) this.s=(this.id%10==1)?96:48; + this.st=this.s;this.s=0; + var cookies=[[10,0]]; + for (var i in Game.Upgrades) + { + var cookie=Game.Upgrades[i]; + if (cookie.bought>0 && cookie.pool=='cookie') cookies.push(cookie.icon); + } + this.icon=choose(cookies); + this.dragged=false; + this.l=document.createElement('div'); + this.l.innerHTML=this.id; + this.l.style.cssText='cursor:pointer;border-radius:'+(this.s/2)+'px;opacity:0;width:'+this.s+'px;height:'+this.s+'px;background:#999;position:absolute;left:0px;top:0px;z-index:10000000;transform:translate(-1000px,-1000px);'; + l('sectionLeft').appendChild(this.l); + AddEvent(this.l,'mousedown',function(what){return function(){what.dragged=true;};}(this)); + AddEvent(this.l,'mouseup',function(what){return function(){what.dragged=false;};}(this)); + Game.toys.push(this); + return this; + } + for (var i=0;i=height-(Game.milkHd)*height+8) + { + me.xd*=0.85; + me.yd*=0.85; + me.rd*=0.85; + me.yd-=1; + me.xd+=(Math.random()*1-0.5)*0.3; + me.yd+=(Math.random()*1-0.5)*0.05; + me.rd+=(Math.random()*1-0.5)*0.02; + } + else + { + me.xd*=0.99; + me.rd*=0.99; + me.yd+=1; + } + me.yd*=(Math.min(1,Math.abs(me.y-(height-(Game.milkHd)*height)/16))); + me.rd+=me.xd*0.01/(me.s/(Game.toysType==1?64:48)); + if (me.xwidth-me.s/2 && me.xd>0) me.xd=Math.min(-0.1,-me.xd*0.6); else if (me.x>width-me.s/2) {me.xd=0;me.x=width-me.s/2;} + me.xd=Math.min(Math.max(me.xd,-30),30); + me.yd=Math.min(Math.max(me.yd,-30),30); + me.rd=Math.min(Math.max(me.rd,-0.5),0.5); + me.x+=me.xd; + me.y+=me.yd; + me.r+=me.rd; + me.r=me.r%(Math.PI*2); + me.s+=(me.st-me.s)*0.5; + if (Game.toysType==2 && !me.dragged && Math.random()<0.003) me.st=choose([48,48,48,48,96]); + if (me.dragged) + { + me.x=Game.mouseX; + me.y=Game.mouseY; + me.xd+=((Game.mouseX-Game.mouseX2)*3-me.xd)*0.5; + me.yd+=((Game.mouseY-Game.mouseY2)*3-me.yd)*0.5 + me.l.style.transform='translate('+(me.x-me.s/2)+'px,'+(me.y-me.s/2)+'px) scale(50)'; + } + else me.l.style.transform='translate('+(me.x-me.s/2)+'px,'+(me.y-me.s/2)+'px)'; + me.l.style.width=me.s+'px'; + me.l.style.height=me.s+'px'; + ctx.save(); + ctx.translate(me.x,me.y); + ctx.rotate(me.r); + if (Game.toysType==1) ctx.drawImage(Pic('smallCookies.png'),(me.id%8)*64,0,64,64,-me.s/2,-me.s/2,me.s,me.s); + else ctx.drawImage(Pic('icons.png'),me.icon[0]*48,me.icon[1]*48,48,48,-me.s/2,-me.s/2,me.s,me.s); + ctx.restore(); + } + } + + var pic=Game.Milk.pic; + if (Game.milkType!=0 && Game.ascensionMode!=1) pic=Game.AllMilks[Game.milkType].pic; + ctx.globalAlpha=0.95*a; + ctx.fillPattern(Pic(pic),0,height-y,width+480,1,480,480,x,0); + + ctx.fillStyle='#000'; + ctx.fillRect(0,height-y+480,width,Math.max(0,(y-480))); + ctx.globalAlpha=1; + + Timer.track('milk'); + } + + if (Game.AscendTimer>0) + { + ctx.drawImage(Pic('shadedBordersSoft.png'),0,0,ctx.canvas.width,ctx.canvas.height); + } + + if (Game.AscendTimer==0) + { + Game.DrawWrinklers();Timer.track('wrinklers'); + + //shimmering veil + if (Game.Has('Shimmering veil [off]')) + { + ctx.globalAlpha=1; + ctx.globalCompositeOperation='lighter'; + var s=300+Math.sin(Game.T*0.037)*20; + var x=Game.cookieOriginX; + var y=Game.cookieOriginY; + ctx.save(); + ctx.translate(x,y); + ctx.rotate(-Game.T*0.01); + ctx.drawImage(Pic('shimmeringVeil.png'),-s/2,-s/2,s,s); + ctx.restore(); + if (Game.prefs.particles)//sparkles + { + for (i=0;i<6;i++) + { + var t=Game.T+i*15; + var r=(t%30)/30; + var a=(Math.floor(t/30)*30*6-i*30)*0.01; + var size=32*(1-Math.pow(r*2-1,2)); + var xx=x+Math.sin(a)*(110+r*16); + var yy=y+Math.cos(a)*(110+r*16); + ctx.drawImage(Pic('glint.png'),xx-size/2,yy-size/2,size,size); + } + } + ctx.globalCompositeOperation='source-over'; + } + + Game.DrawSpecial();Timer.track('evolvables'); + + Game.particlesDraw(2);Timer.track('text particles'); + + //shiny border during frenzies etc + ctx.globalAlpha=1; + var borders='shadedBordersSoft.png'; + if (goodBuff) borders='shadedBordersGold.png'; + else if (badBuff) borders='shadedBordersRed.png'; + if (goodBuff && Game.prefs.fancy) ctx.globalCompositeOperation='lighter'; + ctx.drawImage(Pic(borders),0,0,ctx.canvas.width,ctx.canvas.height); + if (goodBuff && Game.prefs.fancy) ctx.globalCompositeOperation='source-over'; + } + } + }; + + + /*===================================================================================== + INITIALIZATION END; GAME READY TO LAUNCH + =======================================================================================*/ + + Game.killShimmers(); + + //booooo + Game.RuinTheFun=function(silent) + { + Game.popups=0; + Game.SetAllUpgrades(1); + Game.SetAllAchievs(1); + Game.popups=0; + Game.Earn(999999999999999999999999999999); + Game.MaxSpecials(); + Game.nextResearch=0; + Game.researchT=-1; + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + Game.popups=1; + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (me.level<10) + { + me.level=9; + me.levelUp(true); + } + if (me.minigame && me.minigame.onRuinTheFun) me.minigame.onRuinTheFun(); + } + if (!silent) + { + Game.Notify('Thou doth ruineth the fun!','You\'re free. Free at last.',[11,5]); + } + return 'You feel a bitter taste in your mouth...'; + } + + Game.SetAllUpgrades=function(on) + { + Game.popups=0; + var leftout=['Magic shenanigans','Occult obstruction','Glucose-charged air']; + for (var i in Game.Upgrades) + { + if (on && (Game.Upgrades[i].pool=='toggle' || leftout.indexOf(Game.Upgrades[i].name)!=-1)) {} + else if (on) Game.Upgrades[i].earn(); + else if (!on) Game.Upgrades[i].lose(); + } + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + Game.popups=1; + } + Game.SetAllAchievs=function(on) + { + Game.popups=0; + for (var i in Game.Achievements) + { + if (on && Game.Achievements[i].pool!='dungeon') Game.Win(Game.Achievements[i].name); + else if (!on) Game.RemoveAchiev(Game.Achievements[i].name); + } + Game.recalculateGains=1; + Game.popups=1; + } + Game.GetAllDebugs=function() + { + Game.popups=0; + for (var i in Game.Upgrades) + { + if (Game.Upgrades[i].pool=='debug') Game.Upgrades[i].earn(); + } + Game.upgradesToRebuild=1; + Game.recalculateGains=1; + Game.popups=1; + } + Game.MaxSpecials=function() + { + Game.dragonLevel=Game.dragonLevels.length-1; + Game.santaLevel=Game.santaLevels.length-1; + } + + Game.SesameReset=function() + { + var name=Game.bakeryName; + Game.HardReset(2); + Game.bakeryName=name; + Game.bakeryNameRefresh(); + Game.Achievements['Cheated cookies taste awful'].won=1; + } + + Game.debugTimersOn=0; + Game.sesame=0; + Game.OpenSesame=function() + { + var str=''; + str+='
'; + str+='
'; + + str+='
'; + str+='
Dev tools
'; + + str+='Ascend'; + str+='
'; + str+='x10'; + str+='/10
'; + str+='x1k'; + str+='/1k
'; + str+='Buy 100 of all';//for (var n=0;n<100;n++){for (var i in Game.Objects){Game.Objects[i].buy(1);}} + str+='Sell 100 of all
'; + str+='+10 lumps'; + str+='Reset levels'; + str+='HC x1k'; + str+='HC /1k
';//wee bit inaccurate + str+='Reset cookies earned
'; + str+='
'; + str+='Ruin The Fun'; + str+='Wipe'; + str+='All debugs'; + str+='Timers '+(Game.debugTimersOn?'On':'Off')+'
'; + str+='No upgrades'; + str+='All upgrades
'; + str+='No achievs'; + str+='All achievs
'; + str+='Reset specials'; + str+='Max specials
'; + str+='Reset refills'; + str+=''+(Game.DebuggingPrestige?'Exit Ascend Edit':'Ascend Edit')+''; + str+='Debug upgrades CpS'; + str+='Re-seed'; + str+='Max heralds'; + str+='
'; + for (var i=0;i'+Game.goldenCookieChoices[i*2]+''; + //str+=''+Game.goldenCookie.choices[i*2]+''; + //str+=''+Game.goldenCookie.choices[i*2]+''; + } + str+='
'; + + l('devConsole').innerHTML=str; + + if (!l('fpsGraph')) + { + var div=document.createElement('canvas'); + div.id='fpsGraph'; + div.width=128; + div.height=64; + div.style.opacity=0.5; + div.style.pointerEvents='none'; + div.style.transformOrigin='0% 0%'; + div.style.transform='scale(0.75)'; + //l('devConsole').appendChild(div); + l('devConsole').parentNode.insertBefore(div,l('devConsole').nextSibling); + Game.fpsGraph=div; + Game.fpsGraphCtx=Game.fpsGraph.getContext('2d',{alpha:false}); + var ctx=Game.fpsGraphCtx; + ctx.fillStyle='#000'; + ctx.fillRect(0,0,128,64); + } + + l('debug').style.display='block'; + Game.sesame=1; + Game.Achievements['Cheated cookies taste awful'].won=1; + } + + + Game.loadAscendCalibrator=function() + { + Game.loadAscendCalibrator=0; + var script=document.createElement('script'); + script.setAttribute('src','ascendCalibrator.js'+'?r='+Game.version); + document.head.appendChild(script); + } + Game.EditAscend=function() + { + if (!Game.DebuggingPrestige) + { + if (Game.loadAscendCalibrator) Game.loadAscendCalibrator(); + Game.DebuggingPrestige=true; + Game.AscendTimer=0; + Game.OnAscend=1; + Game.removeClass('ascendIntro'); + Game.addClass('ascending'); + } + else + { + Game.DebuggingPrestige=false; + } + Game.BuildAscendTree(); + Game.OpenSesame(); + } + + //experimental debugging function that cycles through every owned upgrade, turns it off and on, and lists how much each upgrade is participating to CpS + Game.debuggedUpgradeCpS=[]; + Game.debuggedUpgradeCpClick=[]; + Game.debugColors=['#322','#411','#600','#900','#f30','#f90','#ff0','#9f0','#0f9','#09f','#90f']; + Game.DebugUpgradeCpS=function() + { + Game.CalculateGains(); + Game.debuggedUpgradeCpS=[]; + Game.debuggedUpgradeCpClick=[]; + var CpS=Game.cookiesPs; + var CpClick=Game.computedMouseCps; + for (var i in Game.Upgrades) + { + var me=Game.Upgrades[i]; + if (me.bought) + { + me.bought=0; + Game.CalculateGains(); + //Game.debuggedUpgradeCpS[me.name]=CpS-Game.cookiesPs; + Game.debuggedUpgradeCpS[me.name]=(CpS/(Game.cookiesPs||1)-1); + Game.debuggedUpgradeCpClick[me.name]=(CpClick/(Game.computedMouseCps||1)-1); + me.bought=1; + } + } + Game.CalculateGains(); + } + + Game.vanilla=0;//everything we create beyond this will be saved in mod structures + + Game.launchMods(); + + Game.runModHook('create');//declare custom upgrades/achievs/buffs/buildings here! + + BeautifyAll(); + + if (!App) + { + if (!Game.LoadSave()) + {//try to load the save when we open the page. if this fails, try to brute-force it half a second later + setTimeout(function(){ + var local=localStorageGet(Game.SaveTo); + Game.LoadSave(local); + },500); + } + } + else if (App.saveData) setTimeout(function(){Game.LoadSave(App.saveData);},100); + else setTimeout(function(){Game.LoadSave();},100); + + Game.ready=1; + setTimeout(function(){if (typeof showAds==='undefined' && (!l('detectAds') || l('detectAds').clientHeight<1)) Game.addClass('noAds');},500); + l('offGameMessage').innerHTML=''; + l('offGameMessageWrap').style.display='none'; + Game.Loop(); + Game.Draw(); + + PlayCue('launch'); + + if (!EN) + { + var adaptWidth=function(node) + { + var el=node.firstChild; + var width=el.clientWidth; + if (el.classList.contains('subButton')) + { + if (width/95>1) el.style.padding='6px 0px'; + } + width=width/95; + if (width>1) + { + el.style.fontSize=(parseInt(window.getComputedStyle(el).fontSize)*1/width)+'px'; + el.style.transform='scale(1,'+(width)+')'; + } + } + l('prefsButton').firstChild.innerHTML=loc("Options"); + l('statsButton').firstChild.innerHTML=loc("Stats"); + l('logButton').firstChild.innerHTML=loc("Info"); + l('legacyButton').firstChild.innerHTML=loc("Legacy"); + adaptWidth(l('prefsButton')); + adaptWidth(l('statsButton')); + adaptWidth(l('logButton')); + adaptWidth(l('legacyButton')); + l('checkForUpdate').childNodes[0].textContent=loc("New update!"); + l('buildingsTitle').childNodes[0].textContent=loc("Buildings"); + l('storeTitle').childNodes[0].textContent=loc("Store"); + } + } + /*===================================================================================== + LOGIC + =======================================================================================*/ + Game.Logic=function() + { + Game.bounds=Game.l.getBounds(); + + if (!Game.OnAscend && Game.AscendTimer==0) + { + for (var i in Game.Objects) + { + if (Game.Objects[i].eachFrame) Game.Objects[i].eachFrame(); + } + Game.UpdateSpecial(); + Game.UpdateGrandmapocalypse(); + + //these are kinda fun + //if (Game.BigCookieState==2 && !Game.promptOn && Game.Scroll!=0) Game.ClickCookie(); + //if (Game.BigCookieState==1 && !Game.promptOn) Game.ClickCookie(); + + //handle graphic stuff + if (Game.prefs.wobbly) + { + if (Game.BigCookieState==1) Game.BigCookieSizeT=0.98; + else if (Game.BigCookieState==2) Game.BigCookieSizeT=1.05; + else Game.BigCookieSizeT=1; + Game.BigCookieSizeD+=(Game.BigCookieSizeT-Game.BigCookieSize)*0.75; + Game.BigCookieSizeD*=0.75; + Game.BigCookieSize+=Game.BigCookieSizeD; + Game.BigCookieSize=Math.max(0.1,Game.BigCookieSize); + } + else + { + if (Game.BigCookieState==1) Game.BigCookieSize+=(0.98-Game.BigCookieSize)*0.5; + else if (Game.BigCookieState==2) Game.BigCookieSize+=(1.05-Game.BigCookieSize)*0.5; + else Game.BigCookieSize+=(1-Game.BigCookieSize)*0.5; + } + Game.particlesUpdate(); + + if (Game.mousePointer) l('sectionLeft').style.cursor='pointer'; + else l('sectionLeft').style.cursor='auto'; + Game.mousePointer=0; + + //handle milk and milk accessories + Game.milkProgress=Game.AchievementsOwned/25; + if (Game.milkProgress>=0.5) Game.Unlock('Kitten helpers'); + if (Game.milkProgress>=1) Game.Unlock('Kitten workers'); + if (Game.milkProgress>=2) Game.Unlock('Kitten engineers'); + if (Game.milkProgress>=3) Game.Unlock('Kitten overseers'); + if (Game.milkProgress>=4) Game.Unlock('Kitten managers'); + if (Game.milkProgress>=5) Game.Unlock('Kitten accountants'); + if (Game.milkProgress>=6) Game.Unlock('Kitten specialists'); + if (Game.milkProgress>=7) Game.Unlock('Kitten experts'); + if (Game.milkProgress>=8) Game.Unlock('Kitten consultants'); + if (Game.milkProgress>=9) Game.Unlock('Kitten assistants to the regional manager'); + if (Game.milkProgress>=10) Game.Unlock('Kitten marketeers'); + if (Game.milkProgress>=11) Game.Unlock('Kitten analysts'); + if (Game.milkProgress>=12) Game.Unlock('Kitten executives'); + if (Game.milkProgress>=13) Game.Unlock('Kitten admins'); + if (Game.milkProgress>=14) Game.Unlock('Kitten strategists'); + Game.milkH=Math.min(1,Game.milkProgress)*0.35; + Game.milkHd+=(Game.milkH-Game.milkHd)*0.02; + + Game.Milk=Game.Milks[Math.min(Math.floor(Game.milkProgress),Game.Milks.length-1)]; + + if (Game.autoclickerDetected>0) Game.autoclickerDetected--; + + //handle research + if (Game.researchT>0) + { + Game.researchT--; + } + if (Game.researchT==0 && Game.nextResearch) + { + if (!Game.Has(Game.UpgradesById[Game.nextResearch].name)) + { + Game.Unlock(Game.UpgradesById[Game.nextResearch].name); + Game.Notify(loc("Research complete"),loc("You have discovered: %1.",Game.UpgradesById[Game.nextResearch].dname),Game.UpgradesById[Game.nextResearch].icon); + } + Game.nextResearch=0; + Game.researchT=-1; + Game.recalculateGains=1; + } + //handle seasons + if (Game.seasonT>0) + { + Game.seasonT--; + } + if (Game.seasonT<=0 && Game.season!='' && Game.season!=Game.baseSeason && !Game.Has('Eternal seasons')) + { + Game.Notify(Game.seasons[Game.season].over,'',Game.seasons[Game.season].triggerUpgrade.icon); + if (Game.Has('Season switcher')) {Game.Unlock(Game.seasons[Game.season].trigger);Game.seasons[Game.season].triggerUpgrade.bought=0;} + Game.season=Game.baseSeason; + Game.seasonT=-1; + } + + //press ctrl to bulk-buy 10, shift to bulk-buy 100 + if (!Game.promptOn) + { + if ((Game.keys[16] || Game.keys[17]) && !Game.buyBulkShortcut) + { + Game.buyBulkOld=Game.buyBulk; + if (Game.keys[16]) Game.buyBulk=100; + if (Game.keys[17]) Game.buyBulk=10; + Game.buyBulkShortcut=1; + Game.storeBulkButton(-1); + } + } + if ((!Game.keys[16] && !Game.keys[17]) && Game.buyBulkShortcut)//release + { + Game.buyBulk=Game.buyBulkOld; + Game.buyBulkShortcut=0; + Game.storeBulkButton(-1); + } + + //handle cookies + if (Game.recalculateGains) Game.CalculateGains(); + Game.Earn(Game.cookiesPs/Game.fps);//add cookies per second + + //grow lumps + Game.doLumps(); + + //minigames + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (Game.isMinigameReady(me) && me.minigame.logic && Game.ascensionMode!=1) me.minigame.logic(); + } + + if (Game.specialTab!='' && Game.T%(Game.fps*3)==0) Game.ToggleSpecialMenu(1); + + //wrinklers + if (Game.cpsSucked>0) + { + Game.Dissolve((Game.cookiesPs/Game.fps)*Game.cpsSucked); + Game.cookiesSucked+=((Game.cookiesPs/Game.fps)*Game.cpsSucked); + //should be using one of the following, but I'm not sure what I'm using this stat for anymore + //Game.cookiesSucked=Game.wrinklers.reduce(function(s,w){return s+w.sucked;},0); + //for (var i in Game.wrinklers) {Game.cookiesSucked+=Game.wrinklers[i].sucked;} + } + + //var cps=Game.cookiesPs+Game.cookies*0.01;//exponential cookies + //Game.Earn(cps/Game.fps);//add cookies per second + + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + me.totalCookies+=(me.storedTotalCps*Game.globalCpsMult)/Game.fps; + } + if (Game.prefs.particles && Game.cookies && Game.T%Math.ceil(Game.fps/Math.min(10,Game.cookiesPs))==0) Game.particleAdd();//cookie shower + + if (Game.T%(Game.fps*10)==0) Game.recalculateGains=1;//recalculate CpS every 10 seconds (for dynamic boosts such as Century egg) + + /*===================================================================================== + UNLOCKING STUFF + =======================================================================================*/ + if (Game.T%(Game.fps)==0 && Math.random()<1/1000000) Game.Win('Just plain lucky');//1 chance in 1,000,000 every second achievement + if (Game.T%(Game.fps*5)==0 && Game.ObjectsById.length>0)//check some achievements and upgrades + { + if (isNaN(Game.cookies)) {Game.cookies=0;Game.cookiesEarned=0;Game.recalculateGains=1;} + + var timePlayed=new Date(); + timePlayed.setTime(Date.now()-Game.startDate); + + if (!Game.fullDate || (Date.now()-Game.fullDate)>=365*24*60*60*1000) Game.Win('So much to do so much to see'); + + if (Game.cookiesEarned>=1000000 && (Game.ascensionMode==1 || Game.resets==0))//challenge run or hasn't ascended yet + { + if (timePlayed<=1000*60*35) Game.Win('Speed baking I'); + if (timePlayed<=1000*60*25) Game.Win('Speed baking II'); + if (timePlayed<=1000*60*15) Game.Win('Speed baking III'); + + if (Game.cookieClicks<=15) Game.Win('Neverclick'); + if (Game.cookieClicks<=0) Game.Win('True Neverclick'); + if (Game.cookiesEarned>=1000000000 && Game.UpgradesOwned==0) Game.Win('Hardcore'); + } + + for (var i in Game.UnlockAt) + { + var unlock=Game.UnlockAt[i]; + if (Game.cookiesEarned>=unlock.cookies) + { + var pass=1; + if (unlock.require && !Game.Has(unlock.require) && !Game.HasAchiev(unlock.require)) pass=0; + if (unlock.season && Game.season!=unlock.season) pass=0; + if (pass) {Game.Unlock(unlock.name);Game.Win(unlock.name);} + } + } + + if (Game.Has('Golden switch')) Game.Unlock('Golden switch [off]'); + if (Game.Has('Shimmering veil') && !Game.Has('Shimmering veil [off]') && !Game.Has('Shimmering veil [on]')) {Game.Unlock('Shimmering veil [on]');Game.Upgrades['Shimmering veil [off]'].earn();} + if (Game.Has('Sugar craving')) Game.Unlock('Sugar frenzy'); + if (Game.Has('Classic dairy selection')) Game.Unlock('Milk selector'); + if (Game.Has('Basic wallpaper assortment')) Game.Unlock('Background selector'); + if (Game.Has('Golden cookie alert sound')) Game.Unlock('Golden cookie sound selector'); + if (Game.Has('Sound test')) Game.Unlock('Jukebox'); + + if (Game.Has('Prism heart biscuits')) Game.Win('Lovely cookies'); + if (Game.season=='easter') + { + var eggs=0; + for (var i in Game.easterEggs) + { + if (Game.HasUnlocked(Game.easterEggs[i])) eggs++; + } + if (eggs>=1) Game.Win('The hunt is on'); + if (eggs>=7) Game.Win('Egging on'); + if (eggs>=14) Game.Win('Mass Easteria'); + if (eggs>=Game.easterEggs.length) Game.Win('Hide & seek champion'); + } + + if (Game.Has('Fortune cookies')) + { + var list=Game.Tiers['fortune'].upgrades; + var fortunes=0; + for (var i in list) + { + if (Game.Has(list[i].name)) fortunes++; + } + if (fortunes>=list.length) Game.Win('O Fortuna'); + } + + if (Game.Has('Legacy') && Game.ascensionMode!=1) + { + Game.Unlock('Heavenly chip secret'); + if (Game.Has('Heavenly chip secret')) Game.Unlock('Heavenly cookie stand'); + if (Game.Has('Heavenly cookie stand')) Game.Unlock('Heavenly bakery'); + if (Game.Has('Heavenly bakery')) Game.Unlock('Heavenly confectionery'); + if (Game.Has('Heavenly confectionery')) Game.Unlock('Heavenly key'); + + if (Game.Has('Heavenly key')) Game.Win('Wholesome'); + } + + for (var i in Game.BankAchievements) + { + if (Game.cookiesEarned>=Game.BankAchievements[i].threshold) Game.Win(Game.BankAchievements[i].name); + } + + if (Game.elderWrath>=3) Game.Win('Grandmapocalypse'); + + var buildingsOwned=0; + var mathematician=1; + var base10=1; + var minAmount=100000; + for (var i in Game.Objects) + { + buildingsOwned+=Game.Objects[i].amount; + minAmount=Math.min(Game.Objects[i].amount,minAmount); + if (!Game.HasAchiev('Mathematician')) {if (Game.Objects[i].amount=1) Game.Win('One with everything'); + if (mathematician==1) Game.Win('Mathematician'); + if (base10==1) Game.Win('Base 10'); + if (minAmount>=100) {Game.Win('Centennial');Game.Unlock('Milk chocolate butter biscuit');} + if (minAmount>=150) {Game.Win('Centennial and a half');Game.Unlock('Dark chocolate butter biscuit');} + if (minAmount>=200) {Game.Win('Bicentennial');Game.Unlock('White chocolate butter biscuit');} + if (minAmount>=250) {Game.Win('Bicentennial and a half');Game.Unlock('Ruby chocolate butter biscuit');} + if (minAmount>=300) {Game.Win('Tricentennial');Game.Unlock('Lavender chocolate butter biscuit');} + if (minAmount>=350) {Game.Win('Tricentennial and a half');Game.Unlock('Synthetic chocolate green honey butter biscuit');} + if (minAmount>=400) {Game.Win('Quadricentennial');Game.Unlock('Royal raspberry chocolate butter biscuit');} + if (minAmount>=450) {Game.Win('Quadricentennial and a half');Game.Unlock('Ultra-concentrated high-energy chocolate butter biscuit');} + if (minAmount>=500) {Game.Win('Quincentennial');Game.Unlock('Pure pitch-black chocolate butter biscuit');} + if (minAmount>=550) {Game.Win('Quincentennial and a half');Game.Unlock('Cosmic chocolate butter biscuit');} + if (minAmount>=600) {Game.Win('Sexcentennial');Game.Unlock('Butter biscuit (with butter)');} + if (minAmount>=650) {Game.Win('Sexcentennial and a half');Game.Unlock('Everybutter biscuit');} + if (minAmount>=700) {Game.Win('Septcentennial');Game.Unlock('Personal biscuit');} + + if (Game.handmadeCookies>=1000) {Game.Win('Clicktastic');Game.Unlock('Plastic mouse');} + if (Game.handmadeCookies>=100000) {Game.Win('Clickathlon');Game.Unlock('Iron mouse');} + if (Game.handmadeCookies>=10000000) {Game.Win('Clickolympics');Game.Unlock('Titanium mouse');} + if (Game.handmadeCookies>=1000000000) {Game.Win('Clickorama');Game.Unlock('Adamantium mouse');} + if (Game.handmadeCookies>=100000000000) {Game.Win('Clickasmic');Game.Unlock('Unobtainium mouse');} + if (Game.handmadeCookies>=10000000000000) {Game.Win('Clickageddon');Game.Unlock('Eludium mouse');} + if (Game.handmadeCookies>=1000000000000000) {Game.Win('Clicknarok');Game.Unlock('Wishalloy mouse');} + if (Game.handmadeCookies>=100000000000000000) {Game.Win('Clickastrophe');Game.Unlock('Fantasteel mouse');} + if (Game.handmadeCookies>=10000000000000000000) {Game.Win('Clickataclysm');Game.Unlock('Nevercrack mouse');} + if (Game.handmadeCookies>=1000000000000000000000) {Game.Win('The ultimate clickdown');Game.Unlock('Armythril mouse');} + if (Game.handmadeCookies>=100000000000000000000000) {Game.Win('All the other kids with the pumped up clicks');Game.Unlock('Technobsidian mouse');} + if (Game.handmadeCookies>=10000000000000000000000000) {Game.Win('One...more...click...');Game.Unlock('Plasmarble mouse');} + if (Game.handmadeCookies>=1000000000000000000000000000) {Game.Win('Clickety split');Game.Unlock('Miraculite mouse');} + if (Game.handmadeCookies>=100000000000000000000000000000) {Game.Win('Ain\'t that a click in the head');Game.Unlock('Aetherice mouse');} + if (Game.handmadeCookies>=10000000000000000000000000000000) {Game.Win('What\'s not clicking');Game.Unlock('Omniplast mouse');} + + if (Game.cookiesEarned=1) Game.Win('Itchscratcher'); + if (Game.wrinklersPopped>=50) Game.Win('Wrinklesquisher'); + if (Game.wrinklersPopped>=200) Game.Win('Moistburster'); + + if (Game.cookiesEarned>=1000000 && Game.Has('How to bake your dragon')) Game.Unlock('A crumbly egg'); + + if (Game.cookiesEarned>=25 && Game.season=='christmas') Game.Unlock('A festive hat'); + if (Game.Has('Christmas tree biscuits') && Game.Has('Snowflake biscuits') && Game.Has('Snowman biscuits') && Game.Has('Holly biscuits') && Game.Has('Candy cane biscuits') && Game.Has('Bell biscuits') && Game.Has('Present biscuits')) Game.Win('Let it snow'); + + if (Game.reindeerClicked>=1) Game.Win('Oh deer'); + if (Game.reindeerClicked>=50) Game.Win('Sleigh of hand'); + if (Game.reindeerClicked>=200) Game.Win('Reindeer sleigher'); + + if (buildingsOwned>=100) Game.Win('Builder'); + if (buildingsOwned>=500) Game.Win('Architect'); + if (buildingsOwned>=1000) Game.Win('Engineer'); + if (buildingsOwned>=2500) Game.Win('Lord of Constructs'); + if (buildingsOwned>=5000) Game.Win('Grand design'); + if (buildingsOwned>=7500) Game.Win('Ecumenopolis'); + if (buildingsOwned>=10000) Game.Win('Myriad'); + if (Game.UpgradesOwned>=20) Game.Win('Enhancer'); + if (Game.UpgradesOwned>=50) Game.Win('Augmenter'); + if (Game.UpgradesOwned>=100) Game.Win('Upgrader'); + if (Game.UpgradesOwned>=200) Game.Win('Lord of Progress'); + if (Game.UpgradesOwned>=300) Game.Win('The full picture'); + if (Game.UpgradesOwned>=400) Game.Win('When there\'s nothing left to add'); + if (Game.UpgradesOwned>=500) Game.Win('Kaizen'); + if (Game.UpgradesOwned>=600) Game.Win('Beyond quality'); + if (Game.UpgradesOwned>=700) Game.Win('Oft we mar what\'s well'); + if (buildingsOwned>=4000 && Game.UpgradesOwned>=300) Game.Win('Polymath'); + if (buildingsOwned>=8000 && Game.UpgradesOwned>=400) Game.Win('Renaissance baker'); + + if (!Game.HasAchiev('Jellicles')) + { + var kittens=0; + for (var i=0;i=10) Game.Win('Jellicles'); + } + + if (Game.cookiesEarned>=1e14 && !Game.HasAchiev('You win a cookie')) {Game.Win('You win a cookie');Game.Earn(1);} + + if (Game.shimmerTypes['golden'].n>=4) Game.Win('Four-leaf cookie'); + + var grandmas=0; + for (var i in Game.GrandmaSynergies) + { + if (Game.Has(Game.GrandmaSynergies[i])) grandmas++; + } + if (!Game.HasAchiev('Elder') && grandmas>=7) Game.Win('Elder'); + if (!Game.HasAchiev('Veteran') && grandmas>=14) Game.Win('Veteran'); + if (Game.Objects['Grandma'].amount>=6 && !Game.Has('Bingo center/Research facility') && Game.HasAchiev('Elder')) Game.Unlock('Bingo center/Research facility'); + if (Game.pledges>0) Game.Win('Elder nap'); + if (Game.pledges>=5) Game.Win('Elder slumber'); + if (Game.pledges>=10) Game.Unlock('Sacrificial rolling pins'); + if (Game.Objects['Cursor'].amount+Game.Objects['Grandma'].amount>=777) Game.Win('The elder scrolls'); + + for (var i in Game.Objects) + { + var it=Game.Objects[i]; + for (var ii in it.productionAchievs) + { + if (it.totalCookies>=it.productionAchievs[ii].pow) Game.Win(it.productionAchievs[ii].achiev.name); + } + } + + if (!Game.HasAchiev('Cookie-dunker') && Game.LeftBackground && Game.milkProgress>0.1 && (Game.LeftBackground.canvas.height*0.4+256/2-16)>((1-Game.milkHd)*Game.LeftBackground.canvas.height)) Game.Win('Cookie-dunker'); + //&& l('bigCookie').getBounds().bottom>l('milk').getBounds().top+16 && Game.milkProgress>0.1) Game.Win('Cookie-dunker'); + + Game.runModHook('check'); + } + + Game.cookiesd+=(Game.cookies-Game.cookiesd)*0.3; + + if (Game.storeToRefresh) Game.RefreshStore(); + if (Game.upgradesToRebuild) Game.RebuildUpgrades(); + + Game.updateShimmers(); + Game.updateBuffs(); + + Game.UpdateTicker(); + } + + if (Game.T%(Game.fps*2)==0) + { + var title='Cookie Clicker'; + if (Game.season=='fools') title='Cookie Baker'; + document.title=(Game.OnAscend?(EN?'Ascending! ':(loc("Ascending")+' | ')):'')+loc("%1 cookie",LBeautify(Game.cookies))+' - '+title; + } + if (Game.T%15==0) + { + //written through the magic of "hope for the best" maths + var chipsOwned=Game.HowMuchPrestige(Game.cookiesReset); + var ascendNowToOwn=Math.floor(Game.HowMuchPrestige(Game.cookiesReset+Game.cookiesEarned)); + var ascendNowToGet=ascendNowToOwn-Math.floor(chipsOwned); + var nextChipAt=Game.HowManyCookiesReset(Math.floor(chipsOwned+ascendNowToGet+1))-Game.HowManyCookiesReset(Math.floor(chipsOwned+ascendNowToGet)); + var cookiesToNext=Game.HowManyCookiesReset(ascendNowToOwn+1)-(Game.cookiesEarned+Game.cookiesReset); + var percent=1-(cookiesToNext/nextChipAt); + + //fill the tooltip under the Legacy tab + var date=new Date(); + date.setTime(Date.now()-Game.startDate); + var timeInSeconds=date.getTime()/1000; + var startDate=Game.sayTime(timeInSeconds*Game.fps,-1); + + var str=''; + if (EN) str+='You\'ve been on this run for '+(startDate==''?'not very long':(startDate))+'.
'; + else str+=loc("You've been on this run for %1.",startDate)+'
'; + str+='
'; + if (Game.prestige>0) + { + str+=loc("Your prestige level is currently %1.
(CpS +%2%)",[Beautify(Game.prestige),Beautify(Game.prestige)]); + str+='
'; + } + if (ascendNowToGet<1) str+=loc("Ascending now would grant you no prestige."); + else if (ascendNowToGet<2) str+=loc("Ascending now would grant you
1 prestige level (+1% CpS)
and 1 heavenly chip to spend."); + else str+=loc("Ascending now would grant you
%1 prestige levels (+%2% CpS)
and %3 heavenly chips to spend.",[Beautify(ascendNowToGet),Beautify(ascendNowToGet),Beautify(ascendNowToGet)]); + if (cookiesToNext>=0) + { + //note: cookiesToNext can be negative at higher HC amounts due to precision loss. we simply hide it in such cases, as this usually only occurs when the gap is small and rapidly overcome anyway + str+='
'; + str+=loc("You need %1 more cookies for the next level.",Beautify(cookiesToNext))+'
'; + } + l('ascendTooltip').innerHTML=str; + + if (ascendNowToGet>0)//show number saying how many chips you'd get resetting now + { + Game.ascendNumber.textContent='+'+SimpleBeautify(ascendNowToGet); + Game.ascendNumber.style.display='block'; + } + else + { + Game.ascendNumber.style.display='none'; + } + + if (ascendNowToGet>Game.ascendMeterLevel || Game.ascendMeterPercentT=1) {Game.ascendMeter.className='';} else Game.ascendMeter.className='filling'; + } + //Game.ascendMeter.style.right=Math.floor(Math.max(0,1-Game.ascendMeterPercent)*100)+'px'; + Game.ascendMeter.style.backgroundPosition=(-Game.T*0.5-Game.ascendMeterPercent*100)+'px'; + Game.ascendMeter.style.transform='translate('+Math.floor(-Math.max(0,1-Game.ascendMeterPercent)*100)+'%,0px)'; + Game.ascendMeterPercent+=(Game.ascendMeterPercentT-Game.ascendMeterPercent)*0.1; + + Game.NotesLogic(); + if (Game.mouseMoved || Game.Scroll || Game.tooltip.dynamic) Game.tooltip.update(); + + if (Game.T%(Game.fps*5)==0 && !Game.mouseDown && (Game.onMenu=='stats' || Game.onMenu=='prefs')) Game.UpdateMenu(); + if (Game.T%(Game.fps*1)==0) Game.UpdatePrompt(); + if (Game.AscendTimer>0) Game.UpdateAscendIntro(); + if (Game.ReincarnateTimer>0) Game.UpdateReincarnateIntro(); + if (Game.OnAscend) Game.UpdateAscend(); + + Game.runModHook('logic'); + + if (Game.sparklesT>0) + { + Game.sparkles.style.backgroundPosition=-Math.floor((Game.sparklesFrames-Game.sparklesT+1)*128)+'px 0px'; + Game.sparklesT--; + if (Game.sparklesT==1) Game.sparkles.style.display='none'; + } + + Game.Click=0; + Game.Scroll=0; + Game.mouseMoved=0; + Game.CanClick=1; + + if ((Game.toSave || (Game.T%(Game.fps*60)==0 && Game.T>Game.fps*10 && Game.prefs.autosave)) && !Game.OnAscend) + { + //check if we can save : no minigames are loading + var canSave=true; + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (me.minigameLoading){canSave=false;break;} + } + if (canSave) Game.WriteSave(); + } + if (!Game.toSave && !Game.isSaving) + { + if (Game.toReload) {Game.toReload=false;if (!App){location.reload();}else{App.reload();}} + if (Game.toQuit) {Game.toQuit=false;if (!App){window.close();}else{App.quit();}} + } + + if (App && App.logic) App.logic(Game.T); + + //every hour: get server data (ie. update notification, patreon, steam etc) + if (Game.T%(Game.fps*60*60)==0 && Game.T>Game.fps*10/* && Game.prefs.autoupdate*/) {Game.CheckUpdates();Game.GrabData();} + + Game.T++; + } + + /*===================================================================================== + DRAW + =======================================================================================*/ + + Game.Draw=function() + { + Game.DrawBackground();Timer.track('end of background'); + + if (!Game.OnAscend) + { + + var str=Beautify(Math.round(Game.cookiesd)); + if (Game.cookiesd>=1000000)//dirty padding + { + var spacePos=str.indexOf(' '); + var dotPos=str.indexOf('.'); + var add=''; + if (spacePos!=-1) + { + if (dotPos==-1) add+='.000'; + else + { + if (spacePos-dotPos==2) add+='00'; + if (spacePos-dotPos==3) add+='0'; + } + } + str=[str.slice(0,spacePos),add,str.slice(spacePos)].join(''); + } + + str=loc("%1 cookie",{n:Math.round(Game.cookiesd),b:str}); + if (str.length>14) str=str.replace(' ','
'); + + if (Game.prefs.monospace) str=''+str+''; + str=str+'
0?' class="wrinkled"':'')+'>'+loc("per second:")+' '+Beautify(Game.cookiesPs*(1-Game.cpsSucked),1)+'
'; + l('cookies').innerHTML=str; + Timer.track('cookie amount'); + + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + if (me.onMinigame && me.minigame.draw && !me.muted && !Game.onMenu) me.minigame.draw(); + } + Timer.track('draw minigames'); + + if (Game.drawT%5==0) + { + //if (Game.prefs.monospace) {l('cookies').className='title monospace';} else {l('cookies').className='title';} + var lastLocked=0; + for (var i in Game.Objects) + { + var me=Game.Objects[i]; + + //make products full-opacity if we can buy them + var classes='product'; + var price=me.bulkPrice; + if (Game.cookiesEarned>=me.basePrice || me.bought>0) {classes+=' unlocked';lastLocked=0;me.locked=0;if (me.id==19){Game.Win('Cookie Clicker');}} else {classes+=' locked';lastLocked++;me.locked=1;} + if ((Game.buyMode==1 && Game.cookies>=price) || (Game.buyMode==-1 && me.amount>0)) classes+=' enabled'; else classes+=' disabled'; + if (lastLocked>2) classes+=' toggledOff'; + me.l.className=classes; + //if (me.id>0) {l('productName'+me.id).innerHTML=Beautify(me.storedTotalCps/Game.ObjectsById[me.id-1].storedTotalCps,2);} + } + + //make upgrades full-opacity if we can buy them + var lastPrice=0; + for (var i in Game.UpgradesInStore) + { + var me=Game.UpgradesInStore[i]; + if (!me.bought) + { + var price=me.getPrice(); + var canBuy=me.canBuy();//(Game.cookies>=price); + var enabled=(l('upgrade'+i).className.indexOf('enabled')>-1); + if ((canBuy && !enabled) || (!canBuy && enabled)) Game.upgradesToRebuild=1; + if (price'; + T=(T*144)%144; + l('upgradePieTimer'+i).style.backgroundPosition=(-Math.floor(T%18))*48+'px '+(-Math.floor(T/18))*48+'px'; + } + } + + //if (me.canBuy()) l('upgrade'+i).className='crate upgrade enabled'; else l('upgrade'+i).className='crate upgrade disabled'; + } + } + Timer.track('store'); + + if (Game.PARTY)//i was bored and felt like messing with CSS + { + var pulse=Math.pow((Game.T%10)/10,0.5); + Game.l.style.filter='hue-rotate('+((Game.T*5)%360)+'deg) brightness('+(150-50*pulse)+'%)'; + Game.l.style.webkitFilter='hue-rotate('+((Game.T*5)%360)+'deg) brightness('+(150-50*pulse)+'%)'; + Game.l.style.transform='scale('+(1.02-0.02*pulse)+','+(1.02-0.02*pulse)+') rotate('+(Math.sin(Game.T*0.5)*0.5)+'deg)'; + Game.wrapper.style.overflowX='hidden'; + Game.wrapper.style.overflowY='hidden'; + } + + Timer.clean(); + if (Game.prefs.animate && ((Game.prefs.fancy && Game.drawT%1==0) || (!Game.prefs.fancy && Game.drawT%10==0)) && Game.AscendTimer==0 && Game.onMenu=='') Game.DrawBuildings();Timer.track('buildings'); + + Game.textParticlesUpdate();Timer.track('text particles'); + } + + Game.NotesDraw();Timer.track('notes'); + + Game.runModHook('draw'); + + Game.drawT++; + //if (Game.prefs.altDraw) requestAnimationFrame(Game.Draw); + } + + /*===================================================================================== + MAIN LOOP + =======================================================================================*/ + Game.Loop=function() + { + if (Game.timedout) return false; + Timer.say('START'); + Timer.track('browser stuff'); + Timer.say('LOGIC'); + //update game logic ! + Game.catchupLogic=0; + Game.Logic(); + Game.catchupLogic=1; + + var time=Date.now(); + + + //latency compensator + Game.accumulatedDelay+=((time-Game.time)-1000/Game.fps); + if (Game.prefs.timeout && time-Game.lastActivity>=1000*60*5) + { + if (Game.accumulatedDelay>1000*60*30) Game.delayTimeouts+=3;//more than 30 minutes delay? computer probably asleep and not making cookies anyway + else if (Game.accumulatedDelay>1000*5) Game.delayTimeouts++;//add to timeout counter when we skip 10 seconds worth of frames (and the player has been inactive for at least 5 minutes) + if (Game.delayTimeouts>=3) Game.Timeout();//trigger timeout when the timeout counter is 3+ + } + + Game.accumulatedDelay=Math.min(Game.accumulatedDelay,1000*5);//don't compensate over 5 seconds; if you do, something's probably very wrong + Game.time=time; + + //if (Game.accumulatedDelay>=Game.fps) console.log('delay:',Math.round(Game.accumulatedDelay/Game.fps)); + while (Game.accumulatedDelay>0) + { + Game.Logic(); + Game.accumulatedDelay-=1000/Game.fps;//as long as we're detecting latency (slower than target fps), execute logic (this makes drawing slower but makes the logic behave closer to correct target fps) + } + Game.catchupLogic=0; + Timer.track('logic'); + Timer.say('END LOGIC'); + /* + if (!Game.prefs.altDraw) + { + var hasFocus=document.hasFocus(); + Timer.say('DRAW'); + if (hasFocus || Game.prefs.focus || Game.loopT%10==0) requestAnimationFrame(Game.Draw); + //if (document.hasFocus() || Game.loopT%5==0) Game.Draw(); + Timer.say('END DRAW'); + } + else requestAnimationFrame(Game.Draw);*/ + if (Game.visible) Game.Draw(); + + //if (!hasFocus) Game.tooltip.hide(); + + if (Game.sesame) + { + //fps counter and graph + Game.previousFps=Game.currentFps; + Game.currentFps=Game.getFps(); + var ctx=Game.fpsGraphCtx; + ctx.drawImage(Game.fpsGraph,-1,0); + ctx.fillStyle='rgb('+Math.round((1-Game.currentFps/Game.fps)*128)+',0,0)'; + ctx.fillRect(128-1,0,1,64); + ctx.strokeStyle='#fff'; + ctx.beginPath(); + ctx.moveTo(128-1,(1-Game.previousFps/Game.fps)*64); + ctx.lineTo(128,(1-Game.currentFps/Game.fps)*64); + ctx.stroke(); + + l('fpsCounter').textContent=Game.currentFps+' fps'; + var str=''; + for (var i in Timer.labels) {str+=Timer.labels[i];} + if (Game.debugTimersOn) l('debugLog').style.display='block'; + else l('debugLog').style.display='none'; + l('debugLog').innerHTML=str; + + } + Timer.reset(); + + Game.loopT++; + setTimeout(Game.Loop,1000/Game.fps); + } +} + +/*===================================================================================== +LAUNCH THIS THING +=======================================================================================*/ +//Game.Launch(); + + +//try {Game.Launch();} +//catch(err) {console.log('ERROR : '+err.message);} + +window.onload=function() +{ + if (!Game.ready) + { + var loadLangAndLaunch=function(lang,firstLaunch) + { + if (!firstLaunch) localStorageSet('CookieClickerLang',lang); + + //LoadLang('../Cookie Clicker Localization/EN.js',function(lang){return function(){ + LoadLang('loc/EN.js?v='+Game.version,function(lang){return function(){ + locStringsFallback=locStrings; + LoadLang('loc/'+lang+'.js?v='+Game.version,function(){ + var launch=function(){ + Game.Launch(); + if (top!=self) Game.ErrorFrame(); + else + { + console.log('[=== '+choose([ + 'Oh, hello!', + 'hey, how\'s it hangin', + 'About to cheat in some cookies or just checking for bugs?', + 'Remember : cheated cookies taste awful!', + 'Hey, Orteil here. Cheated cookies taste awful... or do they?', + ])+' ===]'); + Game.Load(function(){Game.Init();if (firstLaunch) Game.showLangSelection(true);}); + //try {Game.Load(Game.Init);} + //catch(err) {console.log('ERROR : '+err.message);} + } + } + if (App && App.loadMods) App.loadMods(launch); + else launch(); + }); + }}(lang)); + } + + var showLangSelect=function(callback) + { + var str=''; + for (var i in Langs) + { + var lang=Langs[i]; + str+='
'+lang.name+'
'; + } + l('offGameMessage').innerHTML= + '
Language
'+ + '
'+ + str; + for (var i in Langs) + { + var lang=Langs[i]; + AddEvent(l('langSelect-'+i),'click',function(lang){return function(){callback(lang);};}(i)); + AddEvent(l('langSelect-'+i),'mouseover',function(lang){return function(){PlaySound('snd/smallTick.mp3',0.75);l('languageSelectHeader').innerHTML=Langs[lang].changeLanguage;};}(i)); + } + } + + var lang=localStorageGet('CookieClickerLang'); + if (App && !lang) showLangSelect(loadLangAndLaunch); + else if (!lang) {loadLangAndLaunch('EN',true);} + else loadLangAndLaunch(lang); + } }; \ No newline at end of file diff --git a/minigameGarden.js b/minigameGarden.js index c49d2de1..27067a87 100644 --- a/minigameGarden.js +++ b/minigameGarden.js @@ -1,2019 +1,2025 @@ -var M={}; -M.parent=Game.Objects['Farm']; -M.parent.minigame=M; -M.launch=function() -{ - var M=this; - M.name=M.parent.minigameName; - M.init=function(div) - { - //populate div with html and initialize values - - /* - plants age from 0 to 100 - at one point in its lifespan, the plant becomes mature - plants have 4 life stages once planted : bud, sprout, bloom, mature - a plant may age faster by having a higher .ageTick - if a plant has .ageTickR, a random number between 0 and that amount is added to .ageTick - a plant may mature faster by having a lower .mature - a plant's effects depend on how mature it is - a plant can only reproduce when mature - */ - M.plants={ - 'bakerWheat':{ - name:'Baker\'s wheat', - icon:0, - cost:1, - costM:30, - ageTick:7, - ageTickR:2, - mature:35, - children:['bakerWheat','thumbcorn','cronerice','bakeberry','clover','goldenClover','chocoroot','tidygrass'], - effsStr:'
• +1% CpS
', - q:'A plentiful crop whose hardy grain is used to make flour for pastries.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) M.dropUpgrade('Wheat slims',0.001); - }, - }, - 'thumbcorn':{ - name:'Thumbcorn', - icon:1, - cost:5, - costM:100, - ageTick:6, - ageTickR:2, - mature:20, - children:['bakerWheat','thumbcorn','cronerice','gildmillet','glovemorel'], - effsStr:'
• +2% cookies per click
', - q:'A strangely-shaped variant of corn. The amount of strands that can sprout from one seed is usually in the single digits.', - }, - 'cronerice':{ - name:'Cronerice', - icon:2, - cost:15, - costM:250, - ageTick:0.4, - ageTickR:0.7, - mature:55, - children:['thumbcorn','gildmillet','elderwort','wardlichen'], - effsStr:'
• +3% grandma CpS
', - q:'Not only does this wrinkly bulb look nothing like rice, it\'s not even related to it either; its closest extant relative is the weeping willow.', - }, - 'gildmillet':{ - name:'Gildmillet', - icon:3, - cost:15, - costM:1500, - ageTick:2, - ageTickR:1.5, - mature:40, - children:['clover','goldenClover','shimmerlily'], - effsStr:'
• +1% golden cookie gains
• +0.1% golden cookie effect duration
', - q:'An ancient staple crop, famed for its golden sheen. Was once used to bake birthday cakes for kings and queens of old.', - }, - 'clover':{ - name:'Ordinary clover', - icon:4, - cost:25, - costM:77777, - ageTick:1, - ageTickR:1.5, - mature:35, - children:['goldenClover','greenRot','shimmerlily'], - effsStr:'
• +1% golden cookie frequency
', - q:'Trifolium repens, a fairly mundane variety of clover with a tendency to produce four leaves. Such instances are considered lucky by some.', - }, - 'goldenClover':{ - name:'Golden clover', - icon:5, - cost:125, - costM:777777777777, - ageTick:4, - ageTickR:12, - mature:50, - children:[], - effsStr:'
• +3% golden cookie frequency
', - q:'A variant of the ordinary clover that traded its chlorophyll for pure organic gold. Tragically short-lived, this herb is an evolutionary dead-end - but at least it looks pretty.', - }, - 'shimmerlily':{ - name:'Shimmerlily', - icon:6, - cost:60, - costM:777777, - ageTick:5, - ageTickR:6, - mature:70, - children:['elderwort','whiskerbloom','chimerose','cheapcap'], - effsStr:'
• +1% golden cookie gains
• +1% golden cookie frequency
• +1% random drops
', - q:'These little flowers are easiest to find at dawn, as the sunlight refracting in dew drops draws attention to their pure-white petals.', - }, - 'elderwort':{ - name:'Elderwort', - icon:7, - cost:60*3, - costM:100000000, - ageTick:0.3, - ageTickR:0.5, - mature:90, - immortal:1, - noContam:true, - detailsStr:'Immortal', - children:['everdaisy','ichorpuff','shriekbulb'], - effsStr:'
• +1% wrath cookie gains
• +1% wrath cookie frequency
• +1% grandma CpS
• immortal
• surrounding plants (3x3) age 3% faster
', - q:'A very old, long-forgotten subspecies of edelweiss that emits a strange, heady scent. There is some anecdotal evidence that these do not undergo molecular aging.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) M.dropUpgrade('Elderwort biscuits',0.01); - }, - }, - 'bakeberry':{ - name:'Bakeberry', - icon:8, - cost:45, - costM:100000000, - ageTick:1, - ageTickR:1, - mature:50, - children:['queenbeet'], - effsStr:'
• +1% CpS
• harvest when mature for +30 minutes of CpS (max. 3% of bank)
', - q:'A favorite among cooks, this large berry has a crunchy brown exterior and a creamy red center. Excellent in pies or chicken stews.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) - { - var moni=Math.min(Game.cookies*0.03,Game.cookiesPs*60*30); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(Bakeberry)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - M.dropUpgrade('Bakeberry cookies',0.015); - } - }, - }, - 'chocoroot':{ - name:'Chocoroot', - icon:9, - cost:15, - costM:100000, - ageTick:4, - ageTickR:0, - mature:25, - detailsStr:'Predictable growth', - children:['whiteChocoroot','drowsyfern','queenbeet'], - effsStr:'
• +1% CpS
• harvest when mature for +3 minutes of CpS (max. 3% of bank)
• predictable growth
', - q:'A tangly bramble coated in a sticky, sweet substance. Unknown genetic ancestry. Children often pick these from fields as-is as a snack.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) - { - var moni=Math.min(Game.cookies*0.03,Game.cookiesPs*60*3); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(Chocoroot)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - } - }, - }, - 'whiteChocoroot':{ - name:'White chocoroot', - icon:10, - cost:15, - costM:100000, - ageTick:4, - ageTickR:0, - mature:25, - detailsStr:'Predictable growth', - children:['whiskerbloom','tidygrass'], - effsStr:'
• +1% golden cookie gains
• harvest when mature for +3 minutes of CpS (max. 3% of bank)
• predictable growth
', - q:'A pale, even sweeter variant of the chocoroot. Often impedes travelers with its twisty branches.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) - { - var moni=Math.min(Game.cookies*0.03,Game.cookiesPs*60*3); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(White chocoroot)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - } - }, - }, - - 'whiteMildew':{ - name:'White mildew', - fungus:true, - icon:26, - cost:20, - costM:9999, - ageTick:8, - ageTickR:12, - mature:70, - detailsStr:'Spreads easily', - children:['brownMold','whiteChocoroot','wardlichen','greenRot'], - effsStr:'
• +1% CpS
• may spread as brown mold
', - q:'A common rot that infests shady plots of earth. Grows in little creamy capsules. Smells sweet, but sadly wilts quickly.', - }, - 'brownMold':{ - name:'Brown mold', - fungus:true, - icon:27, - cost:20, - costM:9999, - ageTick:8, - ageTickR:12, - mature:70, - detailsStr:'Spreads easily', - children:['whiteMildew','chocoroot','keenmoss','wrinklegill'], - effsStr:'
• -1% CpS
• may spread as white mildew
', - q:'A common rot that infests shady plots of earth. Grows in odd reddish clumps. Smells bitter, but thankfully wilts quickly.', - }, - - 'meddleweed':{ - name:'Meddleweed', - weed:true, - icon:29, - cost:1, - costM:10, - ageTick:10, - ageTickR:6, - mature:50, - contam:0.05, - detailsStr:'Grows in empty tiles, spreads easily', - children:['meddleweed','brownMold','crumbspore'], - effsStr:'
• useless
• may overtake nearby plants
• may sometimes drop spores when uprooted
', - q:'The sign of a neglected farmland, this annoying weed spawns from unused dirt and may sometimes spread to other plants, killing them in the process.', - onKill:function(x,y,age) - { - if (Math.random()<0.2*(age/100)) M.plot[y][x]=[M.plants[choose(['brownMold','crumbspore'])].id+1,0]; - }, - }, - - 'whiskerbloom':{ - name:'Whiskerbloom', - icon:11, - cost:20, - costM:1000000, - ageTick:2, - ageTickR:2, - mature:60, - children:['chimerose','nursetulip'], - effsStr:'
• +0.2% effects from milk
', - q:'Squeezing the translucent pods makes them excrete a milky liquid, while producing a faint squeak akin to a cat\'s meow.', - }, - 'chimerose':{ - name:'Chimerose', - icon:12, - cost:15, - costM:242424, - ageTick:1, - ageTickR:1.5, - mature:30, - children:['chimerose'], - effsStr:'
• +1% reindeer gains
• +1% reindeer frequency
', - q:'Originating in the greener flanks of polar mountains, this beautiful flower with golden accents is fragrant enough to make any room feel a little bit more festive.', - }, - 'nursetulip':{ - name:'Nursetulip', - icon:13, - cost:40, - costM:1000000000, - ageTick:0.5, - ageTickR:2, - mature:60, - children:[], - effsStr:'
• surrounding plants (3x3) are 20% more efficient
• -2% CpS
', - q:'This flower grows an intricate root network that distributes nutrients throughout the surrounding soil. The reason for this seemingly altruistic behavior is still unknown.', - }, - 'drowsyfern':{ - name:'Drowsyfern', - icon:14, - cost:90, - costM:100000, - ageTick:0.05, - ageTickR:0.1, - mature:30, - children:[], - effsStr:'
• +3% CpS
• -5% cookies per click
• -10% golden cookie frequency
', - q:'Traditionally used to brew a tea that guarantees a good night of sleep.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) M.dropUpgrade('Fern tea',0.01); - }, - }, - 'wardlichen':{ - name:'Wardlichen', - icon:15, - cost:10, - costM:10000, - ageTick:5, - ageTickR:4, - mature:65, - children:['wardlichen'], - effsStr:'
• 2% less wrath cookies
• wrinklers spawn 15% slower
', - q:'The metallic stench that emanates from this organism has been known to keep insects and slugs away.', - }, - 'keenmoss':{ - name:'Keenmoss', - icon:16, - cost:50, - costM:1000000, - ageTick:4, - ageTickR:5, - mature:65, - children:['drowsyfern','wardlichen','keenmoss'], - effsStr:'
• +3% random drops
', - q:'Fuzzy to the touch and of a vibrant green. In plant symbolism, keenmoss is associated with good luck for finding lost objects.', - }, - 'queenbeet':{ - name:'Queenbeet', - icon:17, - cost:60*1.5, - costM:1000000000, - ageTick:1, - ageTickR:0.4, - mature:80, - noContam:true, - children:['duketater','queenbeetLump','shriekbulb'], - effsStr:'
• +0.3% golden cookie effect duration
• -2% CpS
• harvest when mature for +1 hour of CpS (max. 4% of bank)
', - q:'A delicious taproot used to prepare high-grade white sugar. Entire countries once went to war over these.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) - { - var moni=Math.min(Game.cookies*0.04,Game.cookiesPs*60*60); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(Queenbeet)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - } - }, - }, - 'queenbeetLump':{ - name:'Juicy queenbeet', - icon:18, - plantable:false, - cost:60*2, - costM:1000000000000, - ageTick:0.04, - ageTickR:0.08, - mature:85, - noContam:true, - children:[], - effsStr:'
• -10% CpS
• surrounding plants (3x3) are 20% less efficient
• harvest when mature for a sugar lump
', - q:'A delicious taproot used to prepare high-grade white sugar. Entire countries once went to war over these.
It looks like this one has grown especially sweeter and juicier from growing in close proximity to other queenbeets.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) - { - Game.gainLumps(1); - popup='(Juicy queenbeet)
Sweet!
Found 1 sugar lump!
'; - } - }, - }, - 'duketater':{ - name:'Duketater', - icon:19, - cost:60*8, - costM:1000000000000, - ageTick:0.4, - ageTickR:0.1, - mature:95, - noContam:true, - children:['shriekbulb'], - effsStr:'
• harvest when mature for +2 hours of CpS (max. 8% of bank)
', - q:'A rare, rich-tasting tuber fit for a whole meal, as long as its strict harvesting schedule is respected. Its starch has fascinating baking properties.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) - { - var moni=Math.min(Game.cookies*0.08,Game.cookiesPs*60*60*2); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(Duketater)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - M.dropUpgrade('Duketater cookies',0.005); - } - }, - }, - 'crumbspore':{ - name:'Crumbspore', - fungus:true, - icon:20, - cost:10, - costM:999, - ageTick:3, - ageTickR:3, - mature:65, - contam:0.03, - noContam:true, - detailsStr:'Spreads easily', - children:['crumbspore','glovemorel','cheapcap','doughshroom','wrinklegill','ichorpuff'], - effsStr:'
• explodes into up to 1 minute of CpS at the end of its lifecycle (max. 1% of bank)
• may overtake nearby plants
', - q:'An archaic mold that spreads its spores to the surrounding dirt through simple pod explosion.', - onDie:function(x,y) - { - var moni=Math.min(Game.cookies*0.01,Game.cookiesPs*60)*Math.random(); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(Crumbspore)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - }, - }, - 'doughshroom':{ - name:'Doughshroom', - fungus:true, - icon:24, - cost:100, - costM:100000000, - ageTick:1, - ageTickR:2, - mature:85, - contam:0.03, - noContam:true, - detailsStr:'Spreads easily', - children:['crumbspore','doughshroom','foolBolete','shriekbulb'], - effsStr:'
• explodes into up to 5 minutes of CpS at the end of its lifecycle (max. 3% of bank)
• may overtake nearby plants
', - q:'Jammed full of warm spores; some forest walkers often describe the smell as similar to passing by a bakery.', - onDie:function(x,y) - { - var moni=Math.min(Game.cookies*0.03,Game.cookiesPs*60*5)*Math.random(); - if (moni!=0) - { - Game.Earn(moni); - Game.Popup('(Doughshroom)
+'+Beautify(moni)+' cookies!',Game.mouseX,Game.mouseY); - } - }, - }, - 'glovemorel':{ - name:'Glovemorel', - fungus:true, - icon:21, - cost:30, - costM:10000, - ageTick:3, - ageTickR:18, - mature:80, - children:[], - effsStr:'
• +4% cookies per click
• +1% cursor CpS
• -1% CpS
', - q:'Touching its waxy skin reveals that the interior is hollow and uncomfortably squishy.', - }, - 'cheapcap':{ - name:'Cheapcap', - fungus:true, - icon:22, - cost:40, - costM:100000, - ageTick:6, - ageTickR:16, - mature:40, - children:[], - effsStr:'
• buildings and upgrades are 0.2% cheaper
• cannot handle cold climates; 15% chance to die when frozen
', - q:'Small, tough, and good in omelettes. Some historians propose that the heads of dried cheapcaps were once used as currency in some bronze age societies.', - }, - 'foolBolete':{ - name:'Fool\'s bolete', - fungus:true, - icon:23, - cost:15, - costM:10000, - ageTick:5, - ageTickR:25, - mature:50, - children:[], - effsStr:'
• +2% golden cookie frequency
• -5% golden cookie gains
• -2% golden cookie duration
• -2% golden cookie effect duration
', - q:'Named for its ability to fool mushroom pickers. The fool\'s bolete is not actually poisonous, it\'s just extremely bland.', - }, - 'wrinklegill':{ - name:'Wrinklegill', - fungus:true, - icon:25, - cost:20, - costM:1000000, - ageTick:1, - ageTickR:3, - mature:65, - children:['elderwort','shriekbulb'], - effsStr:'
• wrinklers spawn 2% faster
• wrinklers eat 1% more
', - q:'This mushroom\'s odor resembles that of a well-done steak, and is said to whet the appetite - making one\'s stomach start gurgling within seconds.', - }, - 'greenRot':{ - name:'Green rot', - fungus:true, - icon:28, - cost:60, - costM:1000000, - ageTick:12, - ageTickR:13, - mature:65, - children:['keenmoss','foolBolete'], - effsStr:'
• +0.5% golden cookie duration
• +1% golden cookie frequency
• +1% random drops
', - q:'This short-lived mold is also known as "emerald pebbles", and is considered by some as a pseudo-gem that symbolizes good fortune.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) M.dropUpgrade('Green yeast digestives',0.005); - }, - }, - 'shriekbulb':{ - name:'Shriekbulb', - icon:30, - cost:60, - costM:4444444444444, - ageTick:3, - ageTickR:1, - mature:60, - noContam:true, - detailsStr:'The unfortunate result of some plant combinations', - children:['shriekbulb'], - effsStr:'
• -2% CpS
• surrounding plants (3x3) are 5% less efficient
', - q:'A nasty vegetable with a dreadful quirk : its flesh resonates with a high-pitched howl whenever it is hit at the right angle by sunlight, moonlight, or even a slight breeze.', - }, - 'tidygrass':{ - name:'Tidygrass', - icon:31, - cost:90, - costM:100000000000000, - ageTick:0.5, - ageTickR:0, - mature:40, - children:['everdaisy'], - effsStr:'
• surrounding tiles (5x5) develop no weeds or fungus
', - q:'The molecules this grass emits are a natural weedkiller. Its stems grow following a predictable pattern, making it an interesting -if expensive- choice for a lawn grass.', - }, - 'everdaisy':{ - name:'Everdaisy', - icon:32, - cost:180, - costM:100000000000000000000, - ageTick:0.3, - ageTickR:0, - mature:75, - noContam:true, - immortal:1, - detailsStr:'Immortal', - children:[], - effsStr:'
• surrounding tiles (3x3) develop no weeds or fungus
• immortal
', - q:'While promoted by some as a superfood owing to its association with longevity and intriguing geometry, this elusive flower is actually mildly toxic.', - }, - 'ichorpuff':{ - name:'Ichorpuff', - fungus:true, - icon:33, - cost:120, - costM:987654321, - ageTick:1, - ageTickR:1.5, - mature:35, - children:[], - effsStr:'
• surrounding plants (3x3) age half as fast
• surrounding plants (3x3) are half as efficient
', - q:'This puffball mushroom contains sugary spores, but it never seems to mature to bursting on its own. Surrounding plants under its influence have a very slow metabolism, reducing their effects but lengthening their lifespan.', - onHarvest:function(x,y,age) - { - if (age>=this.mature) M.dropUpgrade('Ichor syrup',0.005); - }, - }, - }; - M.plantsById=[];var n=0; - for (var i in M.plants) - { - M.plants[i].unlocked=0; - M.plants[i].id=n; - M.plants[i].key=i; - M.plants[i].matureBase=M.plants[i].mature; - M.plantsById[n]=M.plants[i]; - if (typeof M.plants[i].plantable==='undefined') {M.plants[i].plantable=true;} - n++; - } - M.plantsN=M.plantsById.length; - M.plantsUnlockedN=0; - M.getUnlockedN=function() - { - M.plantsUnlockedN=0; - for (var i in M.plants){if (M.plants[i].unlocked) M.plantsUnlockedN++;} - if (M.plantsUnlockedN>=M.plantsN) - { - Game.Win('Keeper of the conservatory'); - l('gardenTool-3').classList.remove('locked'); - } - else l('gardenTool-3').classList.add('locked'); - - return M.plantsUnlockedN; - } - - M.dropUpgrade=function(upgrade,rate) - { - if (!Game.Has(upgrade) && Math.random()<=rate*Game.dropRateMult()*(Game.HasAchiev('Seedless to nay')?1.05:1)) - { - Game.Unlock(upgrade); - } - } - - M.computeMatures=function() - { - var mult=1; - if (Game.HasAchiev('Seedless to nay')) mult=0.95; - for (var i in M.plants) - { - M.plants[i].mature=M.plants[i].matureBase*mult; - } - } - - M.plantContam={}; - for (var i in M.plants) - { - if (M.plants[i].contam) M.plantContam[M.plants[i].key]=M.plants[i].contam; - } - - M.getMuts=function(neighs,neighsM) - { - //get possible mutations given a list of neighbors - //note : neighs stands for neighbors, not horsey noises - var muts=[]; - - if (neighsM['bakerWheat']>=2) muts.push(['bakerWheat',0.2],['thumbcorn',0.05],['bakeberry',0.001]); - if (neighsM['bakerWheat']>=1 && neighsM['thumbcorn']>=1) muts.push(['cronerice',0.01]); - if (neighsM['thumbcorn']>=2) muts.push(['thumbcorn',0.1],['bakerWheat',0.05]); - if (neighsM['cronerice']>=1 && neighsM['thumbcorn']>=1) muts.push(['gildmillet',0.03]); - if (neighsM['cronerice']>=2) muts.push(['thumbcorn',0.02]); - if (neighsM['bakerWheat']>=1 && neighsM['gildmillet']>=1) muts.push(['clover',0.03],['goldenClover',0.0007]); - if (neighsM['clover']>=1 && neighsM['gildmillet']>=1) muts.push(['shimmerlily',0.02]); - if (neighsM['clover']>=2 && neighs['clover']<5) muts.push(['clover',0.007],['goldenClover',0.0001]); - if (neighsM['clover']>=4) muts.push(['goldenClover',0.0007]); - if (neighsM['shimmerlily']>=1 && neighsM['cronerice']>=1) muts.push(['elderwort',0.01]); - if (neighsM['wrinklegill']>=1 && neighsM['cronerice']>=1) muts.push(['elderwort',0.002]); - if (neighsM['bakerWheat']>=1 && neighs['brownMold']>=1) muts.push(['chocoroot',0.1]); - if (neighsM['chocoroot']>=1 && neighs['whiteMildew']>=1) muts.push(['whiteChocoroot',0.1]); - if (neighsM['whiteMildew']>=1 && neighs['brownMold']<=1) muts.push(['brownMold',0.5]); - if (neighsM['brownMold']>=1 && neighs['whiteMildew']<=1) muts.push(['whiteMildew',0.5]); - if (neighsM['meddleweed']>=1 && neighs['meddleweed']<=3) muts.push(['meddleweed',0.15]); - - if (neighsM['shimmerlily']>=1 && neighsM['whiteChocoroot']>=1) muts.push(['whiskerbloom',0.01]); - if (neighsM['shimmerlily']>=1 && neighsM['whiskerbloom']>=1) muts.push(['chimerose',0.05]); - if (neighsM['chimerose']>=2) muts.push(['chimerose',0.005]); - if (neighsM['whiskerbloom']>=2) muts.push(['nursetulip',0.05]); - if (neighsM['chocoroot']>=1 && neighsM['keenmoss']>=1) muts.push(['drowsyfern',0.005]); - if ((neighsM['cronerice']>=1 && neighsM['keenmoss']>=1) || (neighsM['cronerice']>=1 && neighsM['whiteMildew']>=1)) muts.push(['wardlichen',0.005]); - if (neighsM['wardlichen']>=1 && neighs['wardlichen']<2) muts.push(['wardlichen',0.05]); - if (neighsM['greenRot']>=1 && neighsM['brownMold']>=1) muts.push(['keenmoss',0.1]); - if (neighsM['keenmoss']>=1 && neighs['keenmoss']<2) muts.push(['keenmoss',0.05]); - if (neighsM['chocoroot']>=1 && neighsM['bakeberry']>=1) muts.push(['queenbeet',0.01]); - if (neighsM['queenbeet']>=8) muts.push(['queenbeetLump',0.001]); - if (neighsM['queenbeet']>=2) muts.push(['duketater',0.001]); - - if (neighsM['crumbspore']>=1 && neighs['crumbspore']<=1) muts.push(['crumbspore',0.07]); - if (neighsM['crumbspore']>=1 && neighsM['thumbcorn']>=1) muts.push(['glovemorel',0.02]); - if (neighsM['crumbspore']>=1 && neighsM['shimmerlily']>=1) muts.push(['cheapcap',0.04]); - if (neighsM['doughshroom']>=1 && neighsM['greenRot']>=1) muts.push(['foolBolete',0.04]); - if (neighsM['crumbspore']>=2) muts.push(['doughshroom',0.005]); - if (neighsM['doughshroom']>=1 && neighs['doughshroom']<=1) muts.push(['doughshroom',0.07]); - if (neighsM['doughshroom']>=2) muts.push(['crumbspore',0.005]); - if (neighsM['crumbspore']>=1 && neighsM['brownMold']>=1) muts.push(['wrinklegill',0.06]); - if (neighsM['whiteMildew']>=1 && neighsM['clover']>=1) muts.push(['greenRot',0.05]); - - if (neighsM['wrinklegill']>=1 && neighsM['elderwort']>=1) muts.push(['shriekbulb',0.001]); - if (neighsM['elderwort']>=5) muts.push(['shriekbulb',0.001]); - if (neighs['duketater']>=3) muts.push(['shriekbulb',0.005]); - if (neighs['doughshroom']>=4) muts.push(['shriekbulb',0.002]); - if (neighsM['queenbeet']>=5) muts.push(['shriekbulb',0.001]); - if (neighs['shriekbulb']>=1 && neighs['shriekbulb']<2) muts.push(['shriekbulb',0.005]); - - if (neighsM['bakerWheat']>=1 && neighsM['whiteChocoroot']>=1) muts.push(['tidygrass',0.002]); - if (neighsM['tidygrass']>=3 && neighsM['elderwort']>=3) muts.push(['everdaisy',0.002]); - if (neighsM['elderwort']>=1 && neighsM['crumbspore']>=1) muts.push(['ichorpuff',0.002]); - - return muts; - } - - M.computeBoostPlot=function() - { - //some plants apply effects to surrounding tiles - //this function computes those effects by creating a grid in which those effects stack - for (var y=0;y<6;y++) - { - for (var x=0;x<6;x++) - { - //age mult, power mult, weed mult - M.plotBoost[y][x]=[1,1,1]; - } - } - - var effectOn=function(X,Y,s,mult) - { - for (var y=Math.max(0,Y-s);y0) - { - var me=M.plantsById[tile[0]-1]; - var name=me.key; - var stage=0; - if (tile[1]>=me.mature) stage=4; - else if (tile[1]>=me.mature*0.666) stage=3; - else if (tile[1]>=me.mature*0.333) stage=2; - else stage=1; - - var soilMult=M.soilsById[M.soil].effMult; - var mult=soilMult; - - if (stage==1) mult*=0.1; - else if (stage==2) mult*=0.25; - else if (stage==3) mult*=0.5; - else mult*=1; - - //age mult, power mult, weed mult - /*if (name=='elderwort') effectOn(x,y,1,[1+0.03*mult,1,1]); - else if (name=='queenbeetLump') effectOn(x,y,1,[1,1-0.2*mult,1]); - else if (name=='nursetulip') effectOn(x,y,1,[1,1+0.2*mult,1]); - else if (name=='shriekbulb') effectOn(x,y,1,[1,1-0.05*mult,1]); - else if (name=='tidygrass') effectOn(x,y,2,[1,1,0]); - else if (name=='everdaisy') effectOn(x,y,1,[1,1,0]); - else if (name=='ichorpuff') effectOn(x,y,1,[1-0.5*mult,1-0.5*mult,1]);*/ - - var ageMult=1; - var powerMult=1; - var weedMult=1; - var range=0; - - if (name=='elderwort') {ageMult=1.03;range=1;} - else if (name=='queenbeetLump') {powerMult=0.8;range=1;} - else if (name=='nursetulip') {powerMult=1.2;range=1;} - else if (name=='shriekbulb') {powerMult=0.95;range=1;} - else if (name=='tidygrass') {weedMult=0;range=2;} - else if (name=='everdaisy') {weedMult=0;range=1;} - else if (name=='ichorpuff') {ageMult=0.5;powerMult=0.5;range=1;} - - //by god i hope these are right - if (ageMult>=1) ageMult=(ageMult-1)*mult+1; else if (mult>=1) ageMult=1/((1/ageMult)*mult); else ageMult=1-(1-ageMult)*mult; - if (powerMult>=1) powerMult=(powerMult-1)*mult+1; else if (mult>=1) powerMult=1/((1/powerMult)*mult); else powerMult=1-(1-powerMult)*mult; - - if (range>0) effectOn(x,y,range,[ageMult,powerMult,weedMult]); - } - } - } - } - - M.computeEffs=function() - { - M.toCompute=false; - var effs={ - cps:1, - click:1, - cursorCps:1, - grandmaCps:1, - goldenCookieGain:1, - goldenCookieFreq:1, - goldenCookieDur:1, - goldenCookieEffDur:1, - wrathCookieGain:1, - wrathCookieFreq:1, - wrathCookieDur:1, - wrathCookieEffDur:1, - reindeerGain:1, - reindeerFreq:1, - reindeerDur:1, - itemDrops:1, - milk:1, - wrinklerSpawn:1, - wrinklerEat:1, - upgradeCost:1, - buildingCost:1, - }; - - if (!M.freeze) - { - var soilMult=M.soilsById[M.soil].effMult; - - for (var y=0;y<6;y++) - { - for (var x=0;x<6;x++) - { - var tile=M.plot[y][x]; - if (tile[0]>0) - { - var me=M.plantsById[tile[0]-1]; - var name=me.key; - var stage=0; - if (tile[1]>=me.mature) stage=4; - else if (tile[1]>=me.mature*0.666) stage=3; - else if (tile[1]>=me.mature*0.333) stage=2; - else stage=1; - - var mult=soilMult; - - if (stage==1) mult*=0.1; - else if (stage==2) mult*=0.25; - else if (stage==3) mult*=0.5; - else mult*=1; - - mult*=M.plotBoost[y][x][1]; - - if (name=='bakerWheat') effs.cps+=0.01*mult; - else if (name=='thumbcorn') effs.click+=0.02*mult; - else if (name=='cronerice') effs.grandmaCps+=0.03*mult; - else if (name=='gildmillet') {effs.goldenCookieGain+=0.01*mult;effs.goldenCookieEffDur+=0.001*mult;} - else if (name=='clover') effs.goldenCookieFreq+=0.01*mult; - else if (name=='goldenClover') effs.goldenCookieFreq+=0.03*mult; - else if (name=='shimmerlily') {effs.goldenCookieGain+=0.01*mult;effs.goldenCookieFreq+=0.01*mult;effs.itemDrops+=0.01*mult;} - else if (name=='elderwort') {effs.wrathCookieGain+=0.01*mult;effs.wrathCookieFreq+=0.01*mult;effs.grandmaCps+=0.01*mult;} - else if (name=='bakeberry') effs.cps+=0.01*mult; - else if (name=='chocoroot') effs.cps+=0.01*mult; - else if (name=='whiteChocoroot') effs.goldenCookieGain+=0.01*mult; - - else if (name=='whiteMildew') effs.cps+=0.01*mult; - else if (name=='brownMold') effs.cps*=1-0.01*mult; - - else if (name=='meddleweed') {} - - else if (name=='whiskerbloom') effs.milk+=0.002*mult; - else if (name=='chimerose') {effs.reindeerGain+=0.01*mult;effs.reindeerFreq+=0.01*mult;} - - else if (name=='nursetulip') {effs.cps*=1-0.02*mult;} - else if (name=='drowsyfern') {effs.cps+=0.03*mult;effs.click*=1-0.05*mult;effs.goldenCookieFreq*=1-0.1*mult;} - else if (name=='wardlichen') {effs.wrinklerSpawn*=1-0.15*mult;effs.wrathCookieFreq*=1-0.02*mult;} - else if (name=='keenmoss') {effs.itemDrops+=0.03*mult;} - else if (name=='queenbeet') {effs.goldenCookieEffDur+=0.003*mult;effs.cps*=1-0.02*mult;} - else if (name=='queenbeetLump') {effs.cps*=1-0.1*mult;} - else if (name=='glovemorel') {effs.click+=0.04*mult;effs.cursorCps+=0.01*mult;effs.cps*=1-0.01*mult;} - else if (name=='cheapcap') {effs.upgradeCost*=1-0.002*mult;effs.buildingCost*=1-0.002*mult;} - else if (name=='foolBolete') {effs.goldenCookieFreq+=0.02*mult;effs.goldenCookieGain*=1-0.05*mult;effs.goldenCookieDur*=1-0.02*mult;effs.goldenCookieEffDur*=1-0.02*mult;} - else if (name=='wrinklegill') {effs.wrinklerSpawn+=0.02*mult;effs.wrinklerEat+=0.01*mult;} - else if (name=='greenRot') {effs.goldenCookieDur+=0.005*mult;effs.goldenCookieFreq+=0.01*mult;effs.itemDrops+=0.01*mult;} - else if (name=='shriekbulb') {effs.cps*=1-0.02*mult;} - } - } - } - } - M.effs=effs; - Game.recalculateGains=1; - } - - - M.soils={ - 'dirt':{ - name:'Dirt', - icon:0, - tick:5, - effMult:1, - weedMult:1, - req:0, - effsStr:'
• tick every 5 minutes
', - q:'Simple, regular old dirt that you\'d find in nature.', - }, - 'fertilizer':{ - name:'Fertilizer', - icon:1, - tick:3, - effMult:0.75, - weedMult:1.2, - req:50, - effsStr:'
• tick every 3 minutes
• passive plant effects -25%
• weeds appear 20% more
', - q:'Soil with a healthy helping of fresh manure. Plants grow faster but are less efficient.', - }, - 'clay':{ - name:'Clay', - icon:2, - tick:15, - effMult:1.25, - weedMult:1, - req:100, - effsStr:'
• tick every 15 minutes
• passive plant effects +25%
', - q:'Rich soil with very good water retention. Plants grow slower but are more efficient.', - }, - 'pebbles':{ - name:'Pebbles', - icon:3, - tick:5, - effMult:0.25, - weedMult:0.1, - req:200, - effsStr:'
• tick every 5 minutes
• passive plant effects -75%
35% chance of collecting seeds automatically when plants expire
• weeds appear 10 times less
', - q:'Dry soil made of small rocks tightly packed together. Not very conducive to plant health, but whatever falls off your crops will be easy to retrieve.
Useful if you\'re one of those farmers who just want to find new seeds without having to tend their garden too much.', - }, - 'woodchips':{ - name:'Wood chips', - icon:4, - tick:5, - effMult:0.25, - weedMult:0.1, - req:300, - effsStr:'
• tick every 5 minutes
• passive plant effects -75%
• plants spread and mutate 3 times more
• weeds appear 10 times less
', - q:'Soil made of bits and pieces of bark and sawdust. Helpful for young sprouts to develop, not so much for mature plants.', - }, - }; - M.soilsById=[];var n=0;for (var i in M.soils){M.soils[i].id=n;M.soils[i].key=i;M.soilsById[n]=M.soils[i];n++;} - - - M.tools={ - 'info':{ - name:'Garden information', - icon:3, - desc:'-', - descFunc:function() - { - var str=''; - if (M.freeze) str='Your garden is frozen, providing no effects.'; - else - { - var effs={ - cps:{n:'CpS'}, - click:{n:'cookies/click'}, - cursorCps:{n:'cursor CpS'}, - grandmaCps:{n:'grandma CpS'}, - goldenCookieGain:{n:'golden cookie gains'}, - goldenCookieFreq:{n:'golden cookie frequency'}, - goldenCookieDur:{n:'golden cookie duration'}, - goldenCookieEffDur:{n:'golden cookie effect duration'}, - wrathCookieGain:{n:'wrath cookie gains'}, - wrathCookieFreq:{n:'wrath cookie frequency'}, - wrathCookieDur:{n:'wrath cookie duration'}, - wrathCookieEffDur:{n:'wrath cookie effect duration'}, - reindeerGain:{n:'reindeer gains'}, - reindeerFreq:{n:'reindeer cookie frequency'}, - reindeerDur:{n:'reindeer cookie duration'}, - itemDrops:{n:'random drops'}, - milk:{n:'milk effects'}, - wrinklerSpawn:{n:'wrinkler spawn rate'}, - wrinklerEat:{n:'wrinkler appetite'}, - upgradeCost:{n:'upgrade costs',rev:true}, - buildingCost:{n:'building costs',rev:true}, - }; - - var effStr=''; - for (var i in M.effs) - { - if (M.effs[i]!=1 && effs[i]) - { - var amount=(M.effs[i]-1)*100; - effStr+='
• '+effs[i].n+' : '+(amount>0?'+':'-')+Beautify(Math.abs(M.effs[i]-1)*100,2)+'%
'; - } - } - if (effStr=='') effStr='
None.
'; - str+='
Combined effects of all your plants :
'+effStr; - } - str+='
'; - str+='• You can cross-breed plants by planting them close to each other; new plants will grow in the empty tiles next to them.
• Unlock new seeds by harvesting mature plants.
• When you ascend, your garden plants are reset, but you keep all the seeds you\'ve unlocked.
• Your garden has no effect and does not grow while the game is closed.
'; - return str; - }, - func:function(){}, - }, - 'harvestAll':{ - name:'Harvest all', - icon:0, - descFunc:function(){return 'Instantly harvest all plants in your garden.
'+((Game.keys[16] && Game.keys[17])?'You are holding shift+ctrl. Only mature, mortal plants will be harvested.':'Shift+ctrl+click to harvest only mature, mortal plants.');}, - func:function(){ - PlaySound('snd/toneTick.mp3'); - /*if (M.freeze){return false;}*/ - if (Game.keys[16] && Game.keys[17]) M.harvestAll(0,1,1);//ctrl & shift, harvest only mature non-immortal plants - else M.harvestAll(); - }, - }, - 'freeze':{ - name:'Freeze', - icon:1, - descFunc:function() - { - return 'Cryogenically preserve your garden.
Plants no longer grow, spread or die; they provide no benefits.
Soil cannot be changed.
Using this will effectively pause your garden.
';//'+((M.nextFreeze>Date.now())?'You will be able to freeze your garden again in '+Game.sayTime((M.nextFreeze-Date.now())/1000*30+30,-1)+'.':'After unfreezing your garden, you must wait 10 minutes to freeze it again.')+' - }, - func:function(){ - //if (!M.freeze && M.nextFreeze>Date.now()) return false; - PlaySound('snd/toneTick.mp3'); - M.freeze=(M.freeze?0:1); - if (M.freeze) - { - M.computeEffs(); - PlaySound('snd/freezeGarden.mp3'); - this.classList.add('on'); - l('gardenContent').classList.add('gardenFrozen'); - - - for (var y=0;y<6;y++) - { - for (var x=0;x<6;x++) - { - var tile=M.plot[y][x]; - if (tile[0]>0) - { - var me=M.plantsById[tile[0]-1]; - var age=tile[1]; - if (me.key=='cheapcap' && Math.random()<0.15) - { - M.plot[y][x]=[0,0]; - if (me.onKill) me.onKill(x,y,age); - M.toRebuild=true; - } - } - } - } - } - else - { - //M.nextFreeze=Date.now()+(Game.Has('Turbo-charged soil')?1:(1000*60*10)); - M.computeEffs(); - this.classList.remove('on'); - l('gardenContent').classList.remove('gardenFrozen'); - } - }, - isOn:function(){if (M.freeze){l('gardenContent').classList.add('gardenFrozen');}else{l('gardenContent').classList.remove('gardenFrozen');}return M.freeze;}, - }, - 'convert':{ - name:'Sacrifice garden', - icon:2, - desc:'A swarm of sugar hornets comes down on your garden, destroying every plant as well as every seed you\'ve unlocked - leaving only a Baker\'s wheat seed.
In exchange, they will grant you 10 sugar lumps.
This action is only available with a complete seed log.', - func:function(){PlaySound('snd/toneTick.mp3');M.askConvert();}, - isDisplayed:function(){if (M.plantsUnlockedN>=M.plantsN) return true; else return false;}, - }, - }; - M.toolsById=[];var n=0;for (var i in M.tools){M.tools[i].id=n;M.tools[i].key=i;M.toolsById[n]=M.tools[i];n++;} - - - M.plot=[]; - for (var y=0;y<6;y++) - { - M.plot[y]=[]; - for (var x=0;x<6;x++) - { - M.plot[y][x]=[0,0]; - } - } - M.plotBoost=[]; - for (var y=0;y<6;y++) - { - M.plotBoost[y]=[]; - for (var x=0;x<6;x++) - { - //age mult, power mult, weed mult - M.plotBoost[y][x]=[1,1,1]; - } - } - - M.tileSize=40; - - M.seedSelected=-1; - - M.soil=0; - M.nextSoil=0;//timestamp for when soil will be ready to change again - - M.stepT=1;//in seconds - M.nextStep=0;//timestamp for next step tick - - M.harvests=0; - M.harvestsTotal=0; - - M.loopsMult=1; - - M.toRebuild=false; - M.toCompute=false; - - M.freeze=0; - M.nextFreeze=0;//timestamp for when we can freeze again; unused, but still stored - - M.getCost=function(me) - { - if (Game.Has('Turbo-charged soil')) return 0; - return Math.max(me.costM,Game.cookiesPs*me.cost*60)*(Game.HasAchiev('Seedless to nay')?0.95:1); - } - - M.getPlantDesc=function(me) - { - var children=''; - if (me.children.length>0) - { - children+='
'; - for (var i in me.children) - { - if (!M.plants[me.children[i]]) console.log('No plant named '+me.children[i]); - else - { - var it=M.plants[me.children[i]]; - if (it.unlocked) children+='
'; - else children+='
'; - } - } - children+='
'; - } - - return '
'+ - (!me.immortal?('
Average lifespan : '+Game.sayTime(((100/(me.ageTick+me.ageTickR/2))*M.stepT)*30,-1)+' ('+Beautify(Math.ceil((100/((me.ageTick+me.ageTickR/2)))*(1)))+' ticks)
'):'')+ - '
Average maturation : '+Game.sayTime(((100/((me.ageTick+me.ageTickR/2)))*(me.mature/100)*M.stepT)*30,-1)+' ('+Beautify(Math.ceil((100/((me.ageTick+me.ageTickR/2)))*(me.mature/100)))+' ticks)
'+ - (me.weed?'
Is a weed
':'')+ - (me.fungus?'
Is a fungus
':'')+ - (me.detailsStr?('
Details : '+me.detailsStr+'
'):'')+ - (children!=''?('
Possible mutations : '+children+'
'):'')+ - '
'+ - '
Effects :
'+ - '
'+me.effsStr+'
'+ - (me.q?(''+me.q+''):'')+ - '
'; - } - M.canPlant=function(me) - { - if (Game.cookies>=M.getCost(me)) return true; else return false; - } - - M.cursor=1; - M.hideCursor=function() - { - M.cursor=0; - } - M.showCursor=function() - { - M.cursor=1; - } - - M.soilTooltip=function(id) - { - return function(){ - var me=M.soilsById[id]; - var str='
'+ - (M.parent.amountSoil unlocked at '+me.req+' farms.
' - ):('
'+ - '
'+me.name+'
'+((M.soil==me.id)?'Your field is currently using this soil.':(M.nextSoil>Date.now())?'You will be able to change your soil again in '+Game.sayTime((M.nextSoil-Date.now())/1000*30+30,-1)+'.':'Click to use this type of soil for your whole field.')+'
'+ - '
'+ - '
'+ - '
Effects :
'+ - '
'+me.effsStr+'
'+ - (me.q?(''+me.q+''):'')+ - '
'))+ - ''; - return str; - }; - } - M.seedTooltip=function(id) - { - return function(){ - var me=M.plantsById[id]; - var str='
'+ - '
'+ - '
'+ - '
'+ - (me.plantable?('
Planting cost :
'+Beautify(Math.round(shortenNumber(M.getCost(me))))+'
'+Game.sayTime(me.cost*60*30,-1)+' of CpS,
minimum '+Beautify(me.costM)+' cookies
'):'')+ - '
'+me.name+' seed
'+(me.plantable?'Click to select this seed for planting.':'This seed cannot be planted.')+'
Shift+ctrl+click to harvest all mature plants of this type.
'+ - '
'+ - M.getPlantDesc(me)+ - '
'; - return str; - }; - } - M.toolTooltip=function(id) - { - return function(){ - var me=M.toolsById[id]; - var icon=[me.icon,35]; - var str='
'+ - '
'+ - '
'+me.name+'
'+ - '
'+ - '
'+ - (me.descFunc?me.descFunc():me.desc)+ - '
'+ - '
'; - return str; - }; - } - M.tileTooltip=function(x,y) - { - return function(){ - if (Game.keys[16]) return ''; - var tile=M.plot[y][x]; - if (tile[0]==0) - { - var me=(M.seedSelected>=0)?M.plantsById[M.seedSelected]:0; - var str='
'+ - '
Empty tile
'+'
'+ - 'This tile of soil is empty.
Pick a seed and plant something!'+ - (me?'
Click to plant '+me.name+' for '+Beautify(Math.round(M.getCost(me)))+'.
(Shift-click to plant multiple.)
(Holding the shift key pressed will also hide tooltips.)':'')+ - (M.plotBoost[y][x]!=[1,1,1]?(''+ - (M.plotBoost[y][x][0]!=1?'
Aging multiplier : '+Beautify(M.plotBoost[y][x][0]*100)+'%':'')+ - (M.plotBoost[y][x][1]!=1?'
Effect multiplier : '+Beautify(M.plotBoost[y][x][1]*100)+'%':'')+ - (M.plotBoost[y][x][2]!=1?'
Weeds/fungus repellent : '+Beautify(100-M.plotBoost[y][x][2]*100)+'%':'')+ - '
' - ):'')+ - '
'+ - '
'; - return str; - } - else - { - var me=M.plantsById[tile[0]-1]; - var stage=0; - if (tile[1]>=me.mature) stage=4; - else if (tile[1]>=me.mature*0.666) stage=3; - else if (tile[1]>=me.mature*0.333) stage=2; - else stage=1; - var icon=[stage,me.icon]; - var str='
'+ - '
'+ - '
'+me.name+'
This plant is growing here.
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '

'+ - 'Stage : '+['bud','sprout','bloom','mature'][stage-1]+'
'+ - ''+(stage==1?'Plant effects : 10%':stage==2?'Plant effects : 25%':stage==3?'Plant effects : 50%':'Plant effects : 100%; may reproduce, will drop seed when harvested')+''+ - '
'+( - stage<4?( - 'Mature in about '+Game.sayTime(((100/(M.plotBoost[y][x][0]*(me.ageTick+me.ageTickR/2)))*((me.mature-tile[1])/100)*M.stepT)*30,-1)+' ('+Beautify(Math.ceil((100/(M.plotBoost[y][x][0]*(me.ageTick+me.ageTickR/2)))*((me.mature-tile[1])/100)))+' tick'+(Math.ceil((100/(M.plotBoost[y][x][0]*(me.ageTick+me.ageTickR/2)))*((me.mature-tile[1])/100))==1?'':'s')+')' - ):( - !me.immortal?( - 'Decays in about '+Game.sayTime(((100/(M.plotBoost[y][x][0]*(me.ageTick+me.ageTickR/2)))*((100-tile[1])/100)*M.stepT)*30,-1)+' ('+Beautify(Math.ceil((100/(M.plotBoost[y][x][0]*(me.ageTick+me.ageTickR/2)))*((100-tile[1])/100)))+' tick'+(Math.ceil((100/(M.plotBoost[y][x][0]*(me.ageTick+me.ageTickR/2)))*((100-tile[1])/100))==1?'':'s')+')' - ): - 'Does not decay' - ) - )+''+ - //'
'+M.plotBoost[y][x]+'
'+ - (M.plotBoost[y][x]!=[1,1,1]?(''+ - (M.plotBoost[y][x][0]!=1?'
Aging multiplier : '+Beautify(M.plotBoost[y][x][0]*100)+'%':'')+ - (M.plotBoost[y][x][1]!=1?'
Effect multiplier : '+Beautify(M.plotBoost[y][x][1]*100)+'%':'')+ - (M.plotBoost[y][x][2]!=1?'
Weeds/fungus repellent : '+Beautify(100-M.plotBoost[y][x][2]*100)+'%':'')+ - '
' - ):'')+ - '
'+ - '
'+ - //'
Click to harvest'+(M.seedSelected>=0?', planting '+M.plantsById[M.seedSelected].name+'
for '+Beautify(Math.round(M.getCost(M.plantsById[M.seedSelected])))+' in its place':'')+'.
'+ - '
Click to '+(stage==4?'harvest':'unearth')+'.
'+ - '
'+ - M.getPlantDesc(me)+ - '
'; - return str; - } - }; - } - - M.refillTooltip=function(){ - return '
Click to refill your soil timer and trigger 1 plant growth tick with x3 spread and mutation rate for 1 sugar lump.'+ - (Game.canRefillLump()?'
(can be done once every '+Game.sayTime(Game.getLumpRefillMax(),-1)+')':('
(usable again in '+Game.sayTime(Game.getLumpRefillRemaining()+Game.fps,-1)+')'))+ - '
'; - }; - - M.buildPanel=function() - { - if (!l('gardenSeeds')) return false; - var str=''; - for (var i in M.plants) - { - var me=M.plants[i]; - var icon=[0,me.icon]; - str+='
'; - str+='
'; - str+='
'; - } - l('gardenSeeds').innerHTML=str; - - for (var i in M.plants) - { - var me=M.plants[i]; - me.l=l('gardenSeed-'+me.id); - AddEvent(me.l,'click',function(me){return function() - { - if (/* !M.freeze && */Game.keys[16] && Game.keys[17])//shift & ctrl - { - //harvest all mature of type - M.harvestAll(me,1); - return false; - } - if (!me.plantable && !Game.sesame) return false; - if (M.seedSelected==me.id){M.seedSelected=-1;} - else {M.seedSelected=me.id;PlaySound('snd/toneTick.mp3');} - for (var i in M.plants) - { - var it=M.plants[i]; - if (it.id==M.seedSelected){it.l.classList.add('on');} - else {it.l.classList.remove('on');} - } - }}(me)); - AddEvent(me.l,'mouseover',M.hideCursor); - AddEvent(me.l,'mouseout',M.showCursor); - if (me.unlocked) me.l.classList.remove('locked'); - } - - var str=''; - for (var i in M.tools) - { - var me=M.tools[i]; - var icon=[me.icon,35]; - str+='
'; - str+='
'; - str+='
'; - } - l('gardenTools').innerHTML=str; - - for (var i in M.tools) - { - var me=M.tools[i]; - AddEvent(l('gardenTool-'+me.id),'click',me.func); - AddEvent(l('gardenTool-'+me.id),'mouseover',M.hideCursor); - AddEvent(l('gardenTool-'+me.id),'mouseout',M.showCursor); - } - - var str=''; - for (var i in M.soils) - { - var me=M.soils[i]; - var icon=[me.icon,34]; - str+='
'; - str+='
'; - str+='
'; - } - l('gardenSoils').innerHTML=str; - - for (var i in M.soils) - { - var me=M.soils[i]; - AddEvent(l('gardenSoil-'+me.id),'click',function(me){return function(){ - if (M.freeze || M.soil==me.id || M.nextSoil>Date.now() || M.parent.amount