diff --git a/DungeonGen.js b/DungeonGen.js
index 7ae4c20..72234de 100644
--- a/DungeonGen.js
+++ b/DungeonGen.js
@@ -868,4 +868,4 @@ var DungeonGen=function()
return str;
}
-}
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index ee0682d..b99f6b3 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# Cookie-Clicker-Source-Code
-2.021 source code for... educational purposes...
+2.052 source code for... educational purposes...
Download and Extract to delete free time. Or just use the website.
Do not worry, I will be updating this to be up to date with the current Cookie Clicker version.
diff --git a/ajax.js b/ajax.js
index e3c16ee..8d08eab 100644
--- a/ajax.js
+++ b/ajax.js
@@ -1,6 +1,6 @@
-function ajax(url,callback){
- var ajaxRequest;
- try{ajaxRequest = new XMLHttpRequest();} catch (e){try{ajaxRequest=new ActiveXObject('Msxml2.XMLHTTP');} catch (e) {try{ajaxRequest=new ActiveXObject('Microsoft.XMLHTTP');} catch (e){alert("Something broke!");return false;}}}
- if (callback){ajaxRequest.onreadystatechange=function(){if(ajaxRequest.readyState==4){callback(ajaxRequest.responseText);}}}
- ajaxRequest.open('GET',url+'&nocache='+(new Date().getTime()),true);ajaxRequest.send(null);
-}
+function ajax(url,callback){
+ var ajaxRequest;
+ try{ajaxRequest = new XMLHttpRequest();} catch (e){try{ajaxRequest=new ActiveXObject('Msxml2.XMLHTTP');} catch (e) {try{ajaxRequest=new ActiveXObject('Microsoft.XMLHTTP');} catch (e){alert("Something broke!");return false;}}}
+ if (callback){ajaxRequest.onreadystatechange=function(){if(ajaxRequest.readyState==4){callback(ajaxRequest.responseText);}}}
+ ajaxRequest.open('GET',url+'&nocache='+(new Date().getTime()),true);ajaxRequest.send(null);
+}
\ No newline at end of file
diff --git a/base64.js b/base64.js
index 7cf1ac0..6e87eb7 100644
--- a/base64.js
+++ b/base64.js
@@ -1,142 +1,142 @@
-/**
-*
-* Base64 encode / decode
-* http://www.webtoolkit.info/
-*
-**/
-
-var Base64 = {
-
- // private property
- _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
-
- // public method for encoding
- encode : function (input) {
- var output = "";
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = Base64._utf8_encode(input);
-
- while (i < input.length) {
-
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output = output +
- this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
- this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
-
- }
-
- return output;
- },
-
- // public method for decoding
- decode : function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- while (i < input.length) {
-
- enc1 = this._keyStr.indexOf(input.charAt(i++));
- enc2 = this._keyStr.indexOf(input.charAt(i++));
- enc3 = this._keyStr.indexOf(input.charAt(i++));
- enc4 = this._keyStr.indexOf(input.charAt(i++));
-
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
-
- output = output + String.fromCharCode(chr1);
-
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
-
- }
-
- output = Base64._utf8_decode(output);
-
- return output;
-
- },
-
- // private method for UTF-8 encoding
- _utf8_encode : function (string) {
- string = string.replace(/\r\n/g,"\n");
- var utftext = "";
-
- for (var n = 0; n < string.length; n++) {
-
- var c = string.charCodeAt(n);
-
- if (c < 128) {
- utftext += String.fromCharCode(c);
- }
- else if((c > 127) && (c < 2048)) {
- utftext += String.fromCharCode((c >> 6) | 192);
- utftext += String.fromCharCode((c & 63) | 128);
- }
- else {
- utftext += String.fromCharCode((c >> 12) | 224);
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
- utftext += String.fromCharCode((c & 63) | 128);
- }
-
- }
-
- return utftext;
- },
-
- // private method for UTF-8 decoding
- _utf8_decode : function (utftext) {
- var string = "";
- var i = 0;
- var c = c1 = c2 = 0;
-
- while ( i < utftext.length ) {
-
- c = utftext.charCodeAt(i);
-
- if (c < 128) {
- string += String.fromCharCode(c);
- i++;
- }
- else if((c > 191) && (c < 224)) {
- c2 = utftext.charCodeAt(i+1);
- string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
- i += 2;
- }
- else {
- c2 = utftext.charCodeAt(i+1);
- c3 = utftext.charCodeAt(i+2);
- string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
- i += 3;
- }
-
- }
-
- return string;
- }
-
-}
+/**
+*
+* Base64 encode / decode
+* http://www.webtoolkit.info/
+*
+**/
+
+var Base64 = {
+
+ // private property
+ _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
+
+ // public method for encoding
+ encode : function (input) {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = Base64._utf8_encode(input);
+
+ while (i < input.length) {
+
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ output = output +
+ this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
+ this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
+
+ }
+
+ return output;
+ },
+
+ // public method for decoding
+ decode : function (input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ while (i < input.length) {
+
+ enc1 = this._keyStr.indexOf(input.charAt(i++));
+ enc2 = this._keyStr.indexOf(input.charAt(i++));
+ enc3 = this._keyStr.indexOf(input.charAt(i++));
+ enc4 = this._keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+
+ }
+
+ output = Base64._utf8_decode(output);
+
+ return output;
+
+ },
+
+ // private method for UTF-8 encoding
+ _utf8_encode : function (string) {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ },
+
+ // private method for UTF-8 decoding
+ _utf8_decode : function (utftext) {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+
+ while ( i < utftext.length ) {
+
+ c = utftext.charCodeAt(i);
+
+ if (c < 128) {
+ string += String.fromCharCode(c);
+ i++;
+ }
+ else if((c > 191) && (c < 224)) {
+ c2 = utftext.charCodeAt(i+1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ }
+ else {
+ c2 = utftext.charCodeAt(i+1);
+ c3 = utftext.charCodeAt(i+2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ }
+
+ return string;
+ }
+
+}
\ No newline at end of file
diff --git a/dungeons.js b/dungeons.js
index b0b36e4..7271fb3 100644
--- a/dungeons.js
+++ b/dungeons.js
@@ -1133,4 +1133,4 @@ var LaunchDungeons=function()
luck:7
};
-};
+};
\ 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 0000000..0e706cb
Binary files /dev/null and b/img/AQWorlds_CookieClicker_300x40.png differ
diff --git a/img/BGgarden.jpg b/img/BGgarden.jpg
index 4b37afd..25e7422 100644
Binary files a/img/BGgarden.jpg and b/img/BGgarden.jpg differ
diff --git a/img/BGgrimoire.jpg b/img/BGgrimoire.jpg
new file mode 100644
index 0000000..d65ba07
Binary files /dev/null and b/img/BGgrimoire.jpg differ
diff --git a/img/BGmarket.jpg b/img/BGmarket.jpg
new file mode 100644
index 0000000..5d9ea8a
Binary files /dev/null and b/img/BGmarket.jpg differ
diff --git a/img/BGpantheon.jpg b/img/BGpantheon.jpg
new file mode 100644
index 0000000..4342b7d
Binary files /dev/null and b/img/BGpantheon.jpg differ
diff --git a/img/alchemylab.png b/img/alchemylab.png
index 1d0ae00..974da2f 100644
Binary files a/img/alchemylab.png and b/img/alchemylab.png differ
diff --git a/img/alteredGrandma.png b/img/alteredGrandma.png
index 938fe15..74685cd 100644
Binary files a/img/alteredGrandma.png and b/img/alteredGrandma.png differ
diff --git a/img/alternateGrandma.png b/img/alternateGrandma.png
new file mode 100644
index 0000000..8296987
Binary files /dev/null and b/img/alternateGrandma.png differ
diff --git a/img/antiGrandma.png b/img/antiGrandma.png
index 0a40d2d..a957b62 100644
Binary files a/img/antiGrandma.png and b/img/antiGrandma.png differ
diff --git a/img/antimattercondenser.png b/img/antimattercondenser.png
index 50a8760..dd86c94 100644
Binary files a/img/antimattercondenser.png and b/img/antimattercondenser.png differ
diff --git a/img/aqworldsbanner.jpg b/img/aqworldsbanner.jpg
new file mode 100644
index 0000000..5ac1a67
Binary files /dev/null and b/img/aqworldsbanner.jpg differ
diff --git a/img/ascendBox.png b/img/ascendBox.png
index 8d96215..b6028e5 100644
Binary files a/img/ascendBox.png and b/img/ascendBox.png differ
diff --git a/img/ascendInfo.png b/img/ascendInfo.png
index a8d023f..b8285e4 100644
Binary files a/img/ascendInfo.png and b/img/ascendInfo.png differ
diff --git a/img/ascendSlot.png b/img/ascendSlot.png
index 26d1cc1..00c97b6 100644
Binary files a/img/ascendSlot.png and b/img/ascendSlot.png differ
diff --git a/img/ascendWisp.png b/img/ascendWisp.png
index 6eb0c4c..feab62f 100644
Binary files a/img/ascendWisp.png and b/img/ascendWisp.png differ
diff --git a/img/bank.png b/img/bank.png
index 804dfec..a4a62a8 100644
Binary files a/img/bank.png and b/img/bank.png differ
diff --git a/img/bankBackground.png b/img/bankBackground.png
index 4d23283..6c66c7f 100644
Binary files a/img/bankBackground.png and b/img/bankBackground.png differ
diff --git a/img/bgBW.jpg b/img/bgBW.jpg
new file mode 100644
index 0000000..704e8d3
Binary files /dev/null and b/img/bgBW.jpg differ
diff --git a/img/bgBlack.jpg b/img/bgBlack.jpg
index 59d9a32..e279413 100644
Binary files a/img/bgBlack.jpg and b/img/bgBlack.jpg differ
diff --git a/img/bgBlue.jpg b/img/bgBlue.jpg
index 8c61da1..69912f7 100644
Binary files a/img/bgBlue.jpg and b/img/bgBlue.jpg differ
diff --git a/img/bgCandy.jpg b/img/bgCandy.jpg
new file mode 100644
index 0000000..bdbcb1d
Binary files /dev/null and b/img/bgCandy.jpg differ
diff --git a/img/bgChoco.jpg b/img/bgChoco.jpg
new file mode 100644
index 0000000..30eaa19
Binary files /dev/null and b/img/bgChoco.jpg differ
diff --git a/img/bgChocoDark.jpg b/img/bgChocoDark.jpg
new file mode 100644
index 0000000..b433f7f
Binary files /dev/null and b/img/bgChocoDark.jpg differ
diff --git a/img/bgCoarse.jpg b/img/bgCoarse.jpg
new file mode 100644
index 0000000..cf37c1a
Binary files /dev/null and b/img/bgCoarse.jpg differ
diff --git a/img/bgFoil.jpg b/img/bgFoil.jpg
new file mode 100644
index 0000000..61c444e
Binary files /dev/null and b/img/bgFoil.jpg differ
diff --git a/img/bgGold.jpg b/img/bgGold.jpg
index b4473db..162cdcf 100644
Binary files a/img/bgGold.jpg and b/img/bgGold.jpg differ
diff --git a/img/bgMint.jpg b/img/bgMint.jpg
new file mode 100644
index 0000000..8e3647a
Binary files /dev/null and b/img/bgMint.jpg differ
diff --git a/img/bgMoney.jpg b/img/bgMoney.jpg
index ecd1344..2aa01b7 100644
Binary files a/img/bgMoney.jpg and b/img/bgMoney.jpg differ
diff --git a/img/bgPaint.jpg b/img/bgPaint.jpg
new file mode 100644
index 0000000..64ba214
Binary files /dev/null and b/img/bgPaint.jpg differ
diff --git a/img/bgPink.jpg b/img/bgPink.jpg
new file mode 100644
index 0000000..733f2b4
Binary files /dev/null and b/img/bgPink.jpg differ
diff --git a/img/bgPurple.jpg b/img/bgPurple.jpg
new file mode 100644
index 0000000..078c75e
Binary files /dev/null and b/img/bgPurple.jpg differ
diff --git a/img/bgRed.jpg b/img/bgRed.jpg
index 4ff4046..cd1bdf9 100644
Binary files a/img/bgRed.jpg and b/img/bgRed.jpg differ
diff --git a/img/bgSilver.jpg b/img/bgSilver.jpg
new file mode 100644
index 0000000..23a2b12
Binary files /dev/null and b/img/bgSilver.jpg differ
diff --git a/img/bgSky.jpg b/img/bgSky.jpg
new file mode 100644
index 0000000..f8f2bfe
Binary files /dev/null and b/img/bgSky.jpg differ
diff --git a/img/bgSnowy.jpg b/img/bgSnowy.jpg
new file mode 100644
index 0000000..ff318ce
Binary files /dev/null and b/img/bgSnowy.jpg differ
diff --git a/img/bgSpectrum.jpg b/img/bgSpectrum.jpg
new file mode 100644
index 0000000..ec06fa2
Binary files /dev/null and b/img/bgSpectrum.jpg differ
diff --git a/img/bgStars.jpg b/img/bgStars.jpg
new file mode 100644
index 0000000..f29749e
Binary files /dev/null and b/img/bgStars.jpg differ
diff --git a/img/bgWhite.jpg b/img/bgWhite.jpg
index 3cb7e49..5cc5ef5 100644
Binary files a/img/bgWhite.jpg and b/img/bgWhite.jpg differ
diff --git a/img/bgYellowBlue.jpg b/img/bgYellowBlue.jpg
new file mode 100644
index 0000000..59df28f
Binary files /dev/null and b/img/bgYellowBlue.jpg differ
diff --git a/img/blackGradient.png b/img/blackGradient.png
index 8cfab38..7bb3f87 100644
Binary files a/img/blackGradient.png and b/img/blackGradient.png differ
diff --git a/img/blackGradientLeft.png b/img/blackGradientLeft.png
index 69958a7..4048a7c 100644
Binary files a/img/blackGradientLeft.png and b/img/blackGradientLeft.png differ
diff --git a/img/blackGradientSmallTop.png b/img/blackGradientSmallTop.png
index 1e3ffbf..9f19d4c 100644
Binary files a/img/blackGradientSmallTop.png and b/img/blackGradientSmallTop.png differ
diff --git a/img/bracketPanelLeftS.png b/img/bracketPanelLeftS.png
index 532cc7b..ae25efa 100644
Binary files a/img/bracketPanelLeftS.png and b/img/bracketPanelLeftS.png differ
diff --git a/img/bracketPanelRightS.png b/img/bracketPanelRightS.png
index a0be91f..65facb2 100644
Binary files a/img/bracketPanelRightS.png and b/img/bracketPanelRightS.png differ
diff --git a/img/brainyGrandma.png b/img/brainyGrandma.png
new file mode 100644
index 0000000..395b5cf
Binary files /dev/null and b/img/brainyGrandma.png differ
diff --git a/img/brokenCookie.png b/img/brokenCookie.png
index 37c0a7a..0cff727 100644
Binary files a/img/brokenCookie.png and b/img/brokenCookie.png differ
diff --git a/img/brokenCookieHalo.png b/img/brokenCookieHalo.png
index 769348f..be578d9 100644
Binary files a/img/brokenCookieHalo.png and b/img/brokenCookieHalo.png differ
diff --git a/img/brownStripes.png b/img/brownStripes.png
new file mode 100644
index 0000000..bb97485
Binary files /dev/null and b/img/brownStripes.png differ
diff --git a/img/brownStripesLeftEdge.png b/img/brownStripesLeftEdge.png
new file mode 100644
index 0000000..4b15e46
Binary files /dev/null and b/img/brownStripesLeftEdge.png differ
diff --git a/img/buildings.png b/img/buildings.png
index 95ab994..c32e0f3 100644
Binary files a/img/buildings.png and b/img/buildings.png differ
diff --git a/img/bunnies.png b/img/bunnies.png
index 2138caa..e06a049 100644
Binary files a/img/bunnies.png and b/img/bunnies.png differ
diff --git a/img/bunnyGrandma.png b/img/bunnyGrandma.png
index d3ae5ec..ecd5b6e 100644
Binary files a/img/bunnyGrandma.png and b/img/bunnyGrandma.png differ
diff --git a/img/cloneGrandma.png b/img/cloneGrandma.png
new file mode 100644
index 0000000..58b1843
Binary files /dev/null and b/img/cloneGrandma.png differ
diff --git a/img/contract.png b/img/contract.png
index e1a4f7a..be2c274 100644
Binary files a/img/contract.png and b/img/contract.png differ
diff --git a/img/cookieShadow.png b/img/cookieShadow.png
new file mode 100644
index 0000000..5a8bf6f
Binary files /dev/null and b/img/cookieShadow.png differ
diff --git a/img/cookieShower1.png b/img/cookieShower1.png
index dcd2c66..6e4db6c 100644
Binary files a/img/cookieShower1.png and b/img/cookieShower1.png differ
diff --git a/img/cortex.png b/img/cortex.png
new file mode 100644
index 0000000..4333dd5
Binary files /dev/null and b/img/cortex.png differ
diff --git a/img/cortexBackground.png b/img/cortexBackground.png
new file mode 100644
index 0000000..6203264
Binary files /dev/null and b/img/cortexBackground.png differ
diff --git a/img/cosmicGrandma.png b/img/cosmicGrandma.png
index 8c06dc4..4b856da 100644
Binary files a/img/cosmicGrandma.png and b/img/cosmicGrandma.png differ
diff --git a/img/cursor.png b/img/cursor.png
index 0cca1e0..ddb0511 100644
Binary files a/img/cursor.png and b/img/cursor.png differ
diff --git a/img/darkNoise.jpg b/img/darkNoise.jpg
index 1111b9e..7746be3 100644
Binary files a/img/darkNoise.jpg and b/img/darkNoise.jpg differ
diff --git a/img/darkNoise.png b/img/darkNoise.png
index a8821f7..a35fc14 100644
Binary files a/img/darkNoise.png and b/img/darkNoise.png differ
diff --git a/img/darkNoiseTopBar.jpg b/img/darkNoiseTopBar.jpg
index 26155a0..7ee35a9 100644
Binary files a/img/darkNoiseTopBar.jpg and b/img/darkNoiseTopBar.jpg differ
diff --git a/img/dashnetLogo.png b/img/dashnetLogo.png
new file mode 100644
index 0000000..c264c5f
Binary files /dev/null and b/img/dashnetLogo.png differ
diff --git a/img/discord.png b/img/discord.png
new file mode 100644
index 0000000..51e61e4
Binary files /dev/null and b/img/discord.png differ
diff --git a/img/dragon.png b/img/dragon.png
index 4b5159e..e0dcc82 100644
Binary files a/img/dragon.png and b/img/dragon.png differ
diff --git a/img/dragonBG.png b/img/dragonBG.png
index 656ec09..b4e1366 100644
Binary files a/img/dragonBG.png and b/img/dragonBG.png differ
diff --git a/img/dungeonDot.png b/img/dungeonDot.png
new file mode 100644
index 0000000..7eb7697
Binary files /dev/null and b/img/dungeonDot.png differ
diff --git a/img/dungeonFoes.png b/img/dungeonFoes.png
new file mode 100644
index 0000000..a9475dd
Binary files /dev/null and b/img/dungeonFoes.png differ
diff --git a/img/dungeonHeroes.png b/img/dungeonHeroes.png
new file mode 100644
index 0000000..c3eff48
Binary files /dev/null and b/img/dungeonHeroes.png differ
diff --git a/img/dungeonIcons.png b/img/dungeonIcons.png
index 88e8d12..273d7cf 100644
Binary files a/img/dungeonIcons.png and b/img/dungeonIcons.png differ
diff --git a/img/dungeonItems.png b/img/dungeonItems.png
new file mode 100644
index 0000000..d23b951
Binary files /dev/null and b/img/dungeonItems.png differ
diff --git a/img/dungeonMapFactory.jpg b/img/dungeonMapFactory.jpg
new file mode 100644
index 0000000..e2d9b19
Binary files /dev/null and b/img/dungeonMapFactory.jpg differ
diff --git a/img/dungeonPictos.png b/img/dungeonPictos.png
new file mode 100644
index 0000000..fbe4884
Binary files /dev/null and b/img/dungeonPictos.png differ
diff --git a/img/factory.png b/img/factory.png
index 3cdd950..8c97821 100644
Binary files a/img/factory.png and b/img/factory.png differ
diff --git a/img/factoryBackground.png b/img/factoryBackground.png
index e96ea55..155a4e7 100644
Binary files a/img/factoryBackground.png and b/img/factoryBackground.png differ
diff --git a/img/farm.png b/img/farm.png
index 4580556..b2299c4 100644
Binary files a/img/farm.png and b/img/farm.png differ
diff --git a/img/farmIcon.png b/img/farmIcon.png
index 354a6bf..e69de29 100644
Binary files a/img/farmIcon.png and b/img/farmIcon.png differ
diff --git a/img/farmerGrandma.png b/img/farmerGrandma.png
index abde9b8..3c8dfdd 100644
Binary files a/img/farmerGrandma.png and b/img/farmerGrandma.png differ
diff --git a/img/featherLeft.png b/img/featherLeft.png
index 4847682..54275c1 100644
Binary files a/img/featherLeft.png and b/img/featherLeft.png differ
diff --git a/img/featherRight.png b/img/featherRight.png
index 36e98ee..1e37872 100644
Binary files a/img/featherRight.png and b/img/featherRight.png differ
diff --git a/img/filler.png b/img/filler.png
index a540a81..9ea7585 100644
Binary files a/img/filler.png and b/img/filler.png differ
diff --git a/img/fractalEngineBackground.png b/img/fractalEngineBackground.png
index f0dda75..b94b689 100644
Binary files a/img/fractalEngineBackground.png and b/img/fractalEngineBackground.png differ
diff --git a/img/frameBorder.png b/img/frameBorder.png
index 1bfb844..68691a8 100644
Binary files a/img/frameBorder.png and b/img/frameBorder.png differ
diff --git a/img/frostedReindeer.png b/img/frostedReindeer.png
index 0795ec6..e496798 100644
Binary files a/img/frostedReindeer.png and b/img/frostedReindeer.png differ
diff --git a/img/gardenPlants.png b/img/gardenPlants.png
index 675208b..8351317 100644
Binary files a/img/gardenPlants.png and b/img/gardenPlants.png differ
diff --git a/img/gardenPlots.png b/img/gardenPlots.png
index 88de74b..3110987 100644
Binary files a/img/gardenPlots.png and b/img/gardenPlots.png differ
diff --git a/img/gardenTip.png b/img/gardenTip.png
index dca82d8..fc51542 100644
Binary files a/img/gardenTip.png and b/img/gardenTip.png differ
diff --git a/img/girlscoutChip.png b/img/girlscoutChip.png
index 46ab993..8120042 100644
Binary files a/img/girlscoutChip.png and b/img/girlscoutChip.png differ
diff --git a/img/girlscoutDoe.png b/img/girlscoutDoe.png
index 448b87e..a1ab2bf 100644
Binary files a/img/girlscoutDoe.png and b/img/girlscoutDoe.png differ
diff --git a/img/glint.png b/img/glint.png
new file mode 100644
index 0000000..eab74ed
Binary files /dev/null and b/img/glint.png differ
diff --git a/img/goldCookie.png b/img/goldCookie.png
index e1fc379..aeeab55 100644
Binary files a/img/goldCookie.png and b/img/goldCookie.png differ
diff --git a/img/grandma.png b/img/grandma.png
index 872a44b..e0c171d 100644
Binary files a/img/grandma.png and b/img/grandma.png differ
diff --git a/img/grandmaIcon.png b/img/grandmaIcon.png
index e811491..e69de29 100644
Binary files a/img/grandmaIcon.png and b/img/grandmaIcon.png differ
diff --git a/img/grandmas1.jpg b/img/grandmas1.jpg
index 581553d..abe7e7f 100644
Binary files a/img/grandmas1.jpg and b/img/grandmas1.jpg differ
diff --git a/img/grandmas2.jpg b/img/grandmas2.jpg
index efbed26..378026a 100644
Binary files a/img/grandmas2.jpg and b/img/grandmas2.jpg differ
diff --git a/img/grandmas3.jpg b/img/grandmas3.jpg
index 676b336..83112d9 100644
Binary files a/img/grandmas3.jpg and b/img/grandmas3.jpg differ
diff --git a/img/grandmasGrandma.png b/img/grandmasGrandma.png
index 7781ad2..026c37e 100644
Binary files a/img/grandmasGrandma.png and b/img/grandmasGrandma.png differ
diff --git a/img/grimoireBG.png b/img/grimoireBG.png
index ea9a86c..f687244 100644
Binary files a/img/grimoireBG.png and b/img/grimoireBG.png differ
diff --git a/img/hearts.png b/img/hearts.png
index 6e6a225..9a5a0ef 100644
Binary files a/img/hearts.png and b/img/hearts.png differ
diff --git a/img/heavenRing2.jpg b/img/heavenRing2.jpg
index 9db16d1..749b7f7 100644
Binary files a/img/heavenRing2.jpg and b/img/heavenRing2.jpg differ
diff --git a/img/heavenlyMoney.png b/img/heavenlyMoney.png
index f905d80..c5fda26 100644
Binary files a/img/heavenlyMoney.png and b/img/heavenlyMoney.png differ
diff --git a/img/heraldFlag.png b/img/heraldFlag.png
new file mode 100644
index 0000000..a0ffb01
Binary files /dev/null and b/img/heraldFlag.png differ
diff --git a/img/icon.ico b/img/icon.ico
new file mode 100644
index 0000000..9b5bac2
Binary files /dev/null and b/img/icon.ico differ
diff --git a/img/icon.png b/img/icon.png
new file mode 100644
index 0000000..b37a093
Binary files /dev/null and b/img/icon.png differ
diff --git a/img/icons.png b/img/icons.png
index 11ae1f3..d46ec3a 100644
Binary files a/img/icons.png and b/img/icons.png differ
diff --git a/img/idleverse.png b/img/idleverse.png
new file mode 100644
index 0000000..54d9561
Binary files /dev/null and b/img/idleverse.png differ
diff --git a/img/idleverseBackground.png b/img/idleverseBackground.png
new file mode 100644
index 0000000..ee81b27
Binary files /dev/null and b/img/idleverseBackground.png differ
diff --git a/img/imperfectCookie.png b/img/imperfectCookie.png
index afa7bc0..9126392 100644
Binary files a/img/imperfectCookie.png and b/img/imperfectCookie.png differ
diff --git a/img/infoBG.png b/img/infoBG.png
index eff05e6..4616f8d 100644
Binary files a/img/infoBG.png and b/img/infoBG.png differ
diff --git a/img/infoBGfade.png b/img/infoBGfade.png
index 23cb233..afcfe73 100644
Binary files a/img/infoBGfade.png and b/img/infoBGfade.png differ
diff --git a/img/javascriptconsole.png b/img/javascriptconsole.png
new file mode 100644
index 0000000..2394697
Binary files /dev/null and b/img/javascriptconsole.png differ
diff --git a/img/javascriptconsoleBackground.png b/img/javascriptconsoleBackground.png
new file mode 100644
index 0000000..f5fdf9e
Binary files /dev/null and b/img/javascriptconsoleBackground.png differ
diff --git a/img/levelUp.png b/img/levelUp.png
index 68a0134..58bb9c5 100644
Binary files a/img/levelUp.png and b/img/levelUp.png differ
diff --git a/img/linkDash.png b/img/linkDash.png
new file mode 100644
index 0000000..098016a
Binary files /dev/null and b/img/linkDash.png differ
diff --git a/img/lockOff.png b/img/lockOff.png
new file mode 100644
index 0000000..82e3b23
Binary files /dev/null and b/img/lockOff.png differ
diff --git a/img/lockOn.png b/img/lockOn.png
new file mode 100644
index 0000000..9619d46
Binary files /dev/null and b/img/lockOn.png differ
diff --git a/img/luckyGrandma.png b/img/luckyGrandma.png
index 038534c..0779545 100644
Binary files a/img/luckyGrandma.png and b/img/luckyGrandma.png differ
diff --git a/img/mapBG.jpg b/img/mapBG.jpg
index c7728a3..a6861ba 100644
Binary files a/img/mapBG.jpg and b/img/mapBG.jpg differ
diff --git a/img/mapTiles.png b/img/mapTiles.png
index f1a3c2c..e69de29 100644
Binary files a/img/mapTiles.png and b/img/mapTiles.png differ
diff --git a/img/marshmallows.png b/img/marshmallows.png
index 789771f..5a18671 100644
Binary files a/img/marshmallows.png and b/img/marshmallows.png differ
diff --git a/img/messageBG.png b/img/messageBG.png
new file mode 100644
index 0000000..3beb487
Binary files /dev/null and b/img/messageBG.png differ
diff --git a/img/milk.png b/img/milk.png
index d3af479..7ba2f1a 100644
Binary files a/img/milk.png and b/img/milk.png differ
diff --git a/img/milkBlack.png b/img/milkBlack.png
index 24844dd..42885d4 100644
Binary files a/img/milkBlack.png and b/img/milkBlack.png differ
diff --git a/img/milkBlackcurrant.png b/img/milkBlackcurrant.png
new file mode 100644
index 0000000..8edda20
Binary files /dev/null and b/img/milkBlackcurrant.png differ
diff --git a/img/milkCherry.png b/img/milkCherry.png
new file mode 100644
index 0000000..f14b03f
Binary files /dev/null and b/img/milkCherry.png differ
diff --git a/img/milkChocolate.png b/img/milkChocolate.png
index e822d87..0004db7 100644
Binary files a/img/milkChocolate.png and b/img/milkChocolate.png differ
diff --git a/img/milkCoconut.png b/img/milkCoconut.png
new file mode 100644
index 0000000..6657a74
Binary files /dev/null and b/img/milkCoconut.png differ
diff --git a/img/milkCoffee.png b/img/milkCoffee.png
new file mode 100644
index 0000000..7df56fd
Binary files /dev/null and b/img/milkCoffee.png differ
diff --git a/img/milkDragonfruit.png b/img/milkDragonfruit.png
new file mode 100644
index 0000000..e2aab6b
Binary files /dev/null and b/img/milkDragonfruit.png differ
diff --git a/img/milkGreenFire.png b/img/milkGreenFire.png
index 5e61b9a..87ddb3c 100644
Binary files a/img/milkGreenFire.png and b/img/milkGreenFire.png differ
diff --git a/img/milkHazelnut.png b/img/milkHazelnut.png
new file mode 100644
index 0000000..d28de44
Binary files /dev/null and b/img/milkHazelnut.png differ
diff --git a/img/milkHoney.png b/img/milkHoney.png
index e4dddb2..21441b2 100644
Binary files a/img/milkHoney.png and b/img/milkHoney.png differ
diff --git a/img/milkLicorice.png b/img/milkLicorice.png
new file mode 100644
index 0000000..d838916
Binary files /dev/null and b/img/milkLicorice.png differ
diff --git a/img/milkLime.png b/img/milkLime.png
index 1a73a89..964e655 100644
Binary files a/img/milkLime.png and b/img/milkLime.png differ
diff --git a/img/milkMaple.png b/img/milkMaple.png
new file mode 100644
index 0000000..22e175e
Binary files /dev/null and b/img/milkMaple.png differ
diff --git a/img/milkMelon.png b/img/milkMelon.png
new file mode 100644
index 0000000..f557fb9
Binary files /dev/null and b/img/milkMelon.png differ
diff --git a/img/milkMint.png b/img/milkMint.png
new file mode 100644
index 0000000..6c0ef50
Binary files /dev/null and b/img/milkMint.png differ
diff --git a/img/milkPeach.png b/img/milkPeach.png
new file mode 100644
index 0000000..095dc87
Binary files /dev/null and b/img/milkPeach.png differ
diff --git a/img/milkPlain.png b/img/milkPlain.png
index 0bc190c..4afb265 100644
Binary files a/img/milkPlain.png and b/img/milkPlain.png differ
diff --git a/img/milkRaspberry.png b/img/milkRaspberry.png
index 3affaec..5c8d09a 100644
Binary files a/img/milkRaspberry.png and b/img/milkRaspberry.png differ
diff --git a/img/milkRose.png b/img/milkRose.png
new file mode 100644
index 0000000..c14895a
Binary files /dev/null and b/img/milkRose.png differ
diff --git a/img/milkSoy.png b/img/milkSoy.png
new file mode 100644
index 0000000..e5238ce
Binary files /dev/null and b/img/milkSoy.png differ
diff --git a/img/milkSpiced.png b/img/milkSpiced.png
new file mode 100644
index 0000000..77ae350
Binary files /dev/null and b/img/milkSpiced.png differ
diff --git a/img/milkStars.png b/img/milkStars.png
index 661f67e..cb118b9 100644
Binary files a/img/milkStars.png and b/img/milkStars.png differ
diff --git a/img/milkTea.png b/img/milkTea.png
new file mode 100644
index 0000000..a0c6cd8
Binary files /dev/null and b/img/milkTea.png differ
diff --git a/img/milkVanilla.png b/img/milkVanilla.png
index 7d25f5e..f6064b6 100644
Binary files a/img/milkVanilla.png and b/img/milkVanilla.png differ
diff --git a/img/mine.png b/img/mine.png
index 372ea7e..46b1e9c 100644
Binary files a/img/mine.png and b/img/mine.png differ
diff --git a/img/mineIcon.png b/img/mineIcon.png
index 8248790..e69de29 100644
Binary files a/img/mineIcon.png and b/img/mineIcon.png differ
diff --git a/img/money.png b/img/money.png
index 5908aa7..d1e3f28 100644
Binary files a/img/money.png and b/img/money.png differ
diff --git a/img/mysteriousHero.png b/img/mysteriousHero.png
index f9dc94d..e69de29 100644
Binary files a/img/mysteriousHero.png and b/img/mysteriousHero.png differ
diff --git a/img/mysteriousOpponent.png b/img/mysteriousOpponent.png
index bbfac49..e69de29 100644
Binary files a/img/mysteriousOpponent.png and b/img/mysteriousOpponent.png differ
diff --git a/img/mysticBG.jpg b/img/mysticBG.jpg
index 0071fb8..d47ac05 100644
Binary files a/img/mysticBG.jpg and b/img/mysticBG.jpg differ
diff --git a/img/panelBG.png b/img/panelBG.png
index 92e4f7c..60a00e2 100644
Binary files a/img/panelBG.png and b/img/panelBG.png differ
diff --git a/img/panelGradientBottom.png b/img/panelGradientBottom.png
index e85961f..c1ea3c5 100644
Binary files a/img/panelGradientBottom.png and b/img/panelGradientBottom.png differ
diff --git a/img/panelGradientLeft.png b/img/panelGradientLeft.png
index 79c98f4..f2c3507 100644
Binary files a/img/panelGradientLeft.png and b/img/panelGradientLeft.png differ
diff --git a/img/panelGradientRight.png b/img/panelGradientRight.png
index a9ac1e9..cc46600 100644
Binary files a/img/panelGradientRight.png and b/img/panelGradientRight.png differ
diff --git a/img/panelGradientTop.png b/img/panelGradientTop.png
index 036fe58..4a16fff 100644
Binary files a/img/panelGradientTop.png and b/img/panelGradientTop.png differ
diff --git a/img/panelHorizontal.png b/img/panelHorizontal.png
index 6bdab86..95d4cb1 100644
Binary files a/img/panelHorizontal.png and b/img/panelHorizontal.png differ
diff --git a/img/panelMenu3.png b/img/panelMenu3.png
index d35144f..564f5b3 100644
Binary files a/img/panelMenu3.png and b/img/panelMenu3.png differ
diff --git a/img/parade.png b/img/parade.png
new file mode 100644
index 0000000..a22dee9
Binary files /dev/null and b/img/parade.png differ
diff --git a/img/patreon.png b/img/patreon.png
new file mode 100644
index 0000000..99d4b3d
Binary files /dev/null and b/img/patreon.png differ
diff --git a/img/pieFill.png b/img/pieFill.png
index 20d9ae3..3ce0870 100644
Binary files a/img/pieFill.png and b/img/pieFill.png differ
diff --git a/img/playsaurusLogo.png b/img/playsaurusLogo.png
new file mode 100644
index 0000000..8419908
Binary files /dev/null and b/img/playsaurusLogo.png differ
diff --git a/img/playsaurusbanner1.png b/img/playsaurusbanner1.png
new file mode 100644
index 0000000..df1df67
Binary files /dev/null and b/img/playsaurusbanner1.png differ
diff --git a/img/playsaurusbanner2.png b/img/playsaurusbanner2.png
new file mode 100644
index 0000000..b2a7a96
Binary files /dev/null and b/img/playsaurusbanner2.png differ
diff --git a/img/playsaurusbanner3.png b/img/playsaurusbanner3.png
new file mode 100644
index 0000000..e1f506e
Binary files /dev/null and b/img/playsaurusbanner3.png differ
diff --git a/img/pointGlow.gif b/img/pointGlow.gif
new file mode 100644
index 0000000..6c18169
Binary files /dev/null and b/img/pointGlow.gif differ
diff --git a/img/pointyLad.png b/img/pointyLad.png
new file mode 100644
index 0000000..020d35b
Binary files /dev/null and b/img/pointyLad.png differ
diff --git a/img/portal.png b/img/portal.png
index 0dd3ca5..6e8f306 100644
Binary files a/img/portal.png and b/img/portal.png differ
diff --git a/img/portalIcon.png b/img/portalIcon.png
index eb8d371..e69de29 100644
Binary files a/img/portalIcon.png and b/img/portalIcon.png differ
diff --git a/img/portraitCrumb.png b/img/portraitCrumb.png
index 5bb54ef..5fcc36a 100644
Binary files a/img/portraitCrumb.png and b/img/portraitCrumb.png differ
diff --git a/img/prestigeBar.jpg b/img/prestigeBar.jpg
index d2491fa..c9fe16b 100644
Binary files a/img/prestigeBar.jpg and b/img/prestigeBar.jpg differ
diff --git a/img/prestigeBarCap.png b/img/prestigeBarCap.png
index 1cc70dd..ca3f233 100644
Binary files a/img/prestigeBarCap.png and b/img/prestigeBarCap.png differ
diff --git a/img/prismBackground.png b/img/prismBackground.png
index ecb4eb5..0be0a65 100644
Binary files a/img/prismBackground.png and b/img/prismBackground.png differ
diff --git a/img/roundFrameBorder.png b/img/roundFrameBorder.png
index 0ce3b4d..89250d5 100644
Binary files a/img/roundFrameBorder.png and b/img/roundFrameBorder.png differ
diff --git a/img/roundedPanelBGS.png b/img/roundedPanelBGS.png
index e63d558..8c0c117 100644
Binary files a/img/roundedPanelBGS.png and b/img/roundedPanelBGS.png differ
diff --git a/img/roundedPanelLeftS.png b/img/roundedPanelLeftS.png
index 97d6e36..198a9be 100644
Binary files a/img/roundedPanelLeftS.png and b/img/roundedPanelLeftS.png differ
diff --git a/img/roundedPanelRight.png b/img/roundedPanelRight.png
index f7d5fde..ed2934f 100644
Binary files a/img/roundedPanelRight.png and b/img/roundedPanelRight.png differ
diff --git a/img/roundedPanelRightS.png b/img/roundedPanelRightS.png
index f71e60c..72c3bfc 100644
Binary files a/img/roundedPanelRightS.png and b/img/roundedPanelRightS.png differ
diff --git a/img/santa.png b/img/santa.png
index 69c9832..79ab98e 100644
Binary files a/img/santa.png and b/img/santa.png differ
diff --git a/img/scriptGrandma.png b/img/scriptGrandma.png
new file mode 100644
index 0000000..d3d431e
Binary files /dev/null and b/img/scriptGrandma.png differ
diff --git a/img/selectTarget.png b/img/selectTarget.png
new file mode 100644
index 0000000..04a22ff
Binary files /dev/null and b/img/selectTarget.png differ
diff --git a/img/shadedBorders.png b/img/shadedBorders.png
index 4a1513b..9c754f1 100644
Binary files a/img/shadedBorders.png and b/img/shadedBorders.png differ
diff --git a/img/shadedBordersSoft.png b/img/shadedBordersSoft.png
index dd1b5ca..224a022 100644
Binary files a/img/shadedBordersSoft.png and b/img/shadedBordersSoft.png differ
diff --git a/img/shimmeringVeil.png b/img/shimmeringVeil.png
new file mode 100644
index 0000000..3847f45
Binary files /dev/null and b/img/shimmeringVeil.png differ
diff --git a/img/shineRed.png b/img/shineRed.png
index adc34e7..9d57c6d 100644
Binary files a/img/shineRed.png and b/img/shineRed.png differ
diff --git a/img/shinyWinkler.png b/img/shinyWinkler.png
new file mode 100644
index 0000000..98ded11
Binary files /dev/null and b/img/shinyWinkler.png differ
diff --git a/img/shipment.png b/img/shipment.png
index 89f7f6d..9cc6f12 100644
Binary files a/img/shipment.png and b/img/shipment.png differ
diff --git a/img/shipmentIcon.png b/img/shipmentIcon.png
index cf0f176..e69de29 100644
Binary files a/img/shipmentIcon.png and b/img/shipmentIcon.png differ
diff --git a/img/snow.jpg b/img/snow.jpg
index 230b4fc..6aa5b76 100644
Binary files a/img/snow.jpg and b/img/snow.jpg differ
diff --git a/img/sparkles.jpg b/img/sparkles.jpg
index 4b5cd96..3eef6d5 100644
Binary files a/img/sparkles.jpg and b/img/sparkles.jpg differ
diff --git a/img/spellBG.png b/img/spellBG.png
index 93e4891..a441b47 100644
Binary files a/img/spellBG.png and b/img/spellBG.png differ
diff --git a/img/spinnyBig.png b/img/spinnyBig.png
index c6670dc..eb62877 100644
Binary files a/img/spinnyBig.png and b/img/spinnyBig.png differ
diff --git a/img/spinnySmall.png b/img/spinnySmall.png
index 8c944d5..b13024c 100644
Binary files a/img/spinnySmall.png and b/img/spinnySmall.png differ
diff --git a/img/starbg.jpg b/img/starbg.jpg
index 75b323f..06b42c3 100644
Binary files a/img/starbg.jpg and b/img/starbg.jpg differ
diff --git a/img/storeTile.jpg b/img/storeTile.jpg
index 3c10245..4b3cd59 100644
Binary files a/img/storeTile.jpg and b/img/storeTile.jpg differ
diff --git a/img/sugarLump.png b/img/sugarLump.png
index 2eca4d5..aaae86c 100644
Binary files a/img/sugarLump.png and b/img/sugarLump.png differ
diff --git a/img/temple.png b/img/temple.png
index 6d6bffc..ae02647 100644
Binary files a/img/temple.png and b/img/temple.png differ
diff --git a/img/templeBackground.png b/img/templeBackground.png
index 613917e..8a54f6d 100644
Binary files a/img/templeBackground.png and b/img/templeBackground.png differ
diff --git a/img/timemachineBackground.png b/img/timemachineBackground.png
index 01b50a2..804808c 100644
Binary files a/img/timemachineBackground.png and b/img/timemachineBackground.png differ
diff --git a/img/timemachineIcon.png b/img/timemachineIcon.png
index a210484..e69de29 100644
Binary files a/img/timemachineIcon.png and b/img/timemachineIcon.png differ
diff --git a/img/timerBars.png b/img/timerBars.png
index 04b5910..252db33 100644
Binary files a/img/timerBars.png and b/img/timerBars.png differ
diff --git a/img/tinyEyeEmpty.png b/img/tinyEyeEmpty.png
new file mode 100644
index 0000000..f923b45
Binary files /dev/null and b/img/tinyEyeEmpty.png differ
diff --git a/img/tinyEyeOff.png b/img/tinyEyeOff.png
new file mode 100644
index 0000000..7c9433f
Binary files /dev/null and b/img/tinyEyeOff.png differ
diff --git a/img/tinyEyeOn.png b/img/tinyEyeOn.png
new file mode 100644
index 0000000..1949eae
Binary files /dev/null and b/img/tinyEyeOn.png differ
diff --git a/img/tinyglobe.gif b/img/tinyglobe.gif
new file mode 100644
index 0000000..201cb63
Binary files /dev/null and b/img/tinyglobe.gif differ
diff --git a/img/tinyglobeSheet.gif b/img/tinyglobeSheet.gif
new file mode 100644
index 0000000..8d78179
Binary files /dev/null and b/img/tinyglobeSheet.gif differ
diff --git a/img/turnInto.png b/img/turnInto.png
new file mode 100644
index 0000000..2832333
Binary files /dev/null and b/img/turnInto.png differ
diff --git a/img/upgradeFrameOld.png b/img/upgradeFrameOld.png
index 3848057..a3782a5 100644
Binary files a/img/upgradeFrameOld.png and b/img/upgradeFrameOld.png differ
diff --git a/img/upgradeHighlight.jpg b/img/upgradeHighlight.jpg
index 0534d67..6a0d0f4 100644
Binary files a/img/upgradeHighlight.jpg and b/img/upgradeHighlight.jpg differ
diff --git a/img/upgradeSelector.png b/img/upgradeSelector.png
index 1ca9eaa..5f9b873 100644
Binary files a/img/upgradeSelector.png and b/img/upgradeSelector.png differ
diff --git a/img/weeHoodie.png b/img/weeHoodie.png
index e2c4e42..c606305 100644
Binary files a/img/weeHoodie.png and b/img/weeHoodie.png differ
diff --git a/img/winkler.png b/img/winkler.png
new file mode 100644
index 0000000..ae5eef8
Binary files /dev/null and b/img/winkler.png differ
diff --git a/img/winterFrame.png b/img/winterFrame.png
index d5e8ee0..3009369 100644
Binary files a/img/winterFrame.png and b/img/winterFrame.png differ
diff --git a/img/winterWinkler.png b/img/winterWinkler.png
new file mode 100644
index 0000000..2db3687
Binary files /dev/null and b/img/winterWinkler.png differ
diff --git a/img/wizardtower.png b/img/wizardtower.png
index 2e19a09..be826b3 100644
Binary files a/img/wizardtower.png and b/img/wizardtower.png differ
diff --git a/img/wizardtowerBackground.png b/img/wizardtowerBackground.png
index e8cfeb4..effb4dd 100644
Binary files a/img/wizardtowerBackground.png and b/img/wizardtowerBackground.png differ
diff --git a/img/workerGrandma.png b/img/workerGrandma.png
index fac73e1..adf3834 100644
Binary files a/img/workerGrandma.png and b/img/workerGrandma.png differ
diff --git a/img/wrathContract.png b/img/wrathContract.png
index d1ad50b..6c2955e 100644
Binary files a/img/wrathContract.png and b/img/wrathContract.png differ
diff --git a/img/wrathCookie.png b/img/wrathCookie.png
index f3599a1..90d6e7b 100644
Binary files a/img/wrathCookie.png and b/img/wrathCookie.png differ
diff --git a/img/wrinklerBitsOld.png b/img/wrinklerBitsOld.png
index 85c8315..af0966a 100644
Binary files a/img/wrinklerBitsOld.png and b/img/wrinklerBitsOld.png differ
diff --git a/img/wrinklerBlink.png b/img/wrinklerBlink.png
new file mode 100644
index 0000000..2a2779d
Binary files /dev/null and b/img/wrinklerBlink.png differ
diff --git a/img/wrinklerGooglies.png b/img/wrinklerGooglies.png
new file mode 100644
index 0000000..e89504c
Binary files /dev/null and b/img/wrinklerGooglies.png differ
diff --git a/img/wrinklerShadow.png b/img/wrinklerShadow.png
new file mode 100644
index 0000000..ece0d39
Binary files /dev/null and b/img/wrinklerShadow.png differ
diff --git a/img/you.png b/img/you.png
new file mode 100644
index 0000000..d2db8a2
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 0000000..4859ac8
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 0000000..0641474
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 0000000..15ec6ba
Binary files /dev/null and b/img/youLight.png differ
diff --git a/index.html b/index.html
index 88741e3..a291e7d 100644
--- a/index.html
+++ b/index.html
@@ -1,230 +1,274 @@
-
-
-
Moist cookies.
We\'re nice grandmas.
Indentured servitude.
Come give grandma a kiss.
Why don\'t you visit more often?
Call me...
Absolutely disgusting.
You make me sick.
You disgust me.
We rise.
It begins.
It\'ll all be over soon.
You could have stopped it.
It has betrayed us, the filthy little thing.
It tried to get rid of us, the nasty little thing.
It thought we would go away by selling us. How quaint.
I can smell your rotten cookies.
shrivel
writhe
throb
gnaw
We will rise again.
A mere setback.
We are not satiated.
Too late.
')+3); - me=me.substring(0,me.length-4); - } - me=''+me+''; - Math.seedrandom(); - list=[me]; - } - } - - Game.TickerAge=Game.fps*10; - Game.Ticker=choose(list); - Game.AddToLog(Game.Ticker); - Game.TickerN++; - Game.TickerDraw(); - } - Game.tickerL=l('commentsText'); - Game.tickerBelowL=l('commentsTextBelow'); - Game.tickerCompactL=l('compactCommentsText'); - Game.TickerDraw=function() - { - var str=''; - if (Game.Ticker!='') str=Game.Ticker; - Game.tickerBelowL.innerHTML=Game.tickerL.innerHTML; - Game.tickerL.innerHTML=str; - Game.tickerCompactL.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.TickerClicks==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('Fortune!','A golden cookie has appeared.',[10,32]); - Game.fortuneGC=1; - var newShimmer=new Game.shimmer('golden',{noWrath:true}); - } - else if (effect=='fortuneCPS') - { - Game.Notify('Fortune!','You gain one hour of your CpS (capped at double your bank).',[10,32]); - Game.fortuneCPS=1; - Game.Earn((Game.cookiesPs*60*60,Game.cookies)); - } - else - { - Game.Notify(effect.name,'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.displayName=this.name; - commonName=commonName.split('|'); - this.single=commonName[0]; - this.plural=commonName[1]; - this.actionName=commonName[2]; - this.extraName=commonName[3]; - this.extraPlural=commonName[4]; - this.desc=desc; - 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; - 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.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'); - 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;i 0) - { - 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) {PlaySound('snd/sell'+choose([1,2,3,4])+'.mp3',0.75);this.refresh();} - //if (moni>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;i 0) - { - 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'); - 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; - Game.BuildingsOwned+=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 desc=me.desc; - var name=me.name; - 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; - //synergiesStr+='Synergy with '+other.name+'; we boost it by '+Beautify((me.amount*weight)*100,1)+'%, producing '+Beautify(boost)+' CpS. My synergy boost is now '+Beautify((synergyBoost/Game.cookiesPs)*100,1)+'%.
'; - } - } - if (synergyBoost>0) - { - for (var i in synergiesWith) - { - if (synergiesStr!='') synergiesStr+=', '; - synergiesStr+=i+' +'+Beautify(synergiesWith[i]*100,1)+'%'; - } - //synergiesStr='...along with '+Beautify(synergyBoost,1)+' cookies through synergies with other buildings ('+synergiesStr+'; '+Beautify((synergyBoost/Game.cookiesPs)*100,1)+'% of total CpS)'; - //synergiesStr='...also boosting some other buildings, accounting for '+Beautify(synergyBoost,1)+' cookies per second (a combined '+Beautify((synergyBoost/Game.cookiesPs)*100,1)+'% of total CpS) : '+synergiesStr+''; - synergiesStr='...also boosting some other buildings : '+synergiesStr+' - all combined, these boosts account for '+Beautify(synergyBoost,1)+' cookies per second ('+Beautify((synergyBoost/Game.cookiesPs)*100,1)+'% of total CpS)'; - } - } - - return ''; - } - this.levelTooltip=function() - { - var me=this; - return ''+Beautify(Math.round(price))+''+Game.costDetails(price)+''+name+''+'[owned : '+me.amount+']'+(me.free>0?' [free : '+me.free+'!]':'')+ - ''+desc+''+ - (me.totalCookies>0?( - ''+ - (me.amount>0?'• each '+me.single+' produces '+Beautify((me.storedTotalCps/me.amount)*Game.globalCpsMult,1)+' '+((me.storedTotalCps/me.amount)*Game.globalCpsMult==1?'cookie':'cookies')+' per second' - ):'')+ - '
':'')+ - '• '+me.amount+' '+(me.amount==1?me.single:me.plural)+' producing '+Beautify(me.storedTotalCps*Game.globalCpsMult,1)+' '+(me.storedTotalCps*Game.globalCpsMult==1?'cookie':'cookies')+' per second ('+Beautify(Game.cookiesPs>0?((me.amount>0?((me.storedTotalCps*Game.globalCpsMult)/Game.cookiesPs):0)*100):0,1)+'% of total CpS)
'+ - (synergiesStr?('• '+synergiesStr+'
'):'')+ - '• '+Beautify(me.totalCookies)+' '+(Math.floor(me.totalCookies)==1?'cookie':'cookies')+' '+me.actionName+' so farLevel '+Beautify(me.level)+' '+me.plural+''+(me.level==1?me.extraName:me.extraPlural).replace('[X]',Beautify(me.level))+' granting +'+Beautify(me.level)+'% '+me.name+' CpS.Click to level up for '+Beautify(me.level+1)+' sugar lump'+(me.level==0?'':'s')+'.'+((me.level==0 && me.minigameUrl)?'Levelling up this building unlocks a minigame.':'')+''; - } - /*this.levelUp=function() - { - var me=this; - if (Game.lumps=10 && me.levelAchiev10) Game.Win(me.levelAchiev10.name); - PlaySound('snd/upgrade.mp3',0.6); - Game.LoadMinigames(); - me.refresh(); - if (l('productLevel'+me.id)){var rect=l('productLevel'+me.id).getBoundingClientRect();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24);} - Game.recalculateGains=1; - if (me.minigame && me.minigame.onLevel) me.minigame.onLevel(me.level); - }*/ - this.levelUp=function(me){ - return function(){Game.spendLump(me.level+1,'level up your '+me.plural,function() - { - me.level+=1; - if (me.level>=10 && me.levelAchiev10) Game.Win(me.levelAchiev10.name); - PlaySound('snd/upgrade.mp3',0.6); - Game.LoadMinigames(); - me.refresh(); - if (l('productLevel'+me.id)){var rect=l('productLevel'+me.id).getBoundingClientRect();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2-24);} - if (me.minigame && me.minigame.onLevel) me.minigame.onLevel(me.level); - })();}; - }(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.name; - 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+''; - } - 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; - l('productOwned'+me.id).innerHTML=me.amount?me.amount:''; - l('productPrice'+me.id).innerHTML=Beautify(Math.round(price)); - l('productPriceMult'+me.id).innerHTML=(Game.buyBulk>1)?('x'+Game.buyBulk+' '):''; - l('productLevel'+me.id).innerHTML='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).innerHTML='View '+me.minigameName; - else l('productMinigameButton'+me.id).innerHTML='Close '+me.minigameName; - } - else l('productMinigameButton'+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(){}; - - if (this.id==0) - { - var str=' '; - str+=''; - str+=''; - str+=''; - l('sectionLeftExtra').innerHTML=l('sectionLeftExtra').innerHTML+str; - } - else//draw it - { - var str=''; - str+=''; - 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++) - //{ - while (i'; - str+=''; - str+=''; - str+=''; - str+='Mute','this')+' onclick="Game.ObjectsById['+this.id+'].mute(1);PlaySound(Game.ObjectsById['+this.id+'].muted?\'snd/clickOff.mp3\':\'snd/clickOn.mp3\');" id="productMute'+this.id+'">Mute
(Minimize this building)1) frame=Math.floor(Math.random()*frames); - 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; - //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 && Math.random()<0.2) {name=choose(Game.customGrandmaNames);custom=true;} - var text=name+', age '+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[this.id]=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.z b.id) return 1; - else if (a.id You can also press Ctrl to bulk-buy or sell 10 of a building at a time, or Shift for 100.' - ,'store')+ - '>'+ - ' Buy'+ - 'Sell'+ - '1'+ - '10'+ - '100'+ - 'all'+ - ''; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - str+=''; - } - l('products').innerHTML=str; - - Game.storeBulkButton(-1); - - var SellAllPrompt=function(id) - { - return function(id){Game.Prompt(''+ - /*'???'+*/ - 'Do you really want to sell your '+Game.ObjectsById[id].amount+' '+(Game.ObjectsById[id].amount==1?Game.ObjectsById[id].single:Game.ObjectsById[id].plural)+'?',[['Yes','Game.ObjectsById['+id+'].sell(-1);Game.ClosePrompt();'],['No','Game.ClosePrompt();']]);}(id); - } - - Game.ClickProduct=function(what) - { - Game.ObjectsById[what].buy(); - } - - 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.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.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); - 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+= 0.5; - if (Game.Has('Billion fingers')) add+= 5; - if (Game.Has('Trillion fingers')) add+= 50; - if (Game.Has('Quadrillion fingers')) add+= 500; - if (Game.Has('Quintillion fingers')) add+= 5000; - if (Game.Has('Sextillion fingers')) add+= 50000; - if (Game.Has('Septillion fingers')) add+= 500000; - if (Game.Has('Octillion fingers')) add+= 5000000; - 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>=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'); - }); - - 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.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'); - - mult*=Game.GetTieredCpsMult(me); - - var add=0; - if (Game.Has('One mind')) add+=Game.Objects['Grandma'].amount*0.02; - if (Game.Has('Communal brainsweep')) add+=Game.Objects['Grandma'].amount*0.02; - if (Game.Has('Elder Pact')) add+=Game.Objects['Portal'].amount*0.05; - - var num=0; - for (var i in Game.Objects) {if (Game.Objects[i].name!='Grandma') num+=Game.Objects[i].amount;} - //if (Game.hasAura('Elder Battalion')) mult*=1+0.01*num; - mult*=1+Game.auraMult('Elder Battalion')*0.01*num; - - mult*=Game.magicCpS(me.name); - - return (me.baseCps+add)*mult; - },function(){ - Game.UnlockTiered(this); - }); - Game.last.sellFunction=function() - { - Game.Win('Just wrong'); - if (this.amount==0) - { - Game.Lock('Elder Pledge'); - Game.CollectWrinklers(); - Game.pledgeT=0; - } - }; - Game.last.iconFunc=function(type){ - var grandmaIcons=[[0,1],[0,2],[1,2],[2,2]]; - if (type=='off') return [0,1]; - 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='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='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); - }); - - 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='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.minigameUrl='minigameGrimoire.js'; - Game.last.minigameName='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); - }); - - 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); - }); - - 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='Antimatter condenser';//shrink the name since it's so large - - 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); - }); - - 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); - }); - - 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 the name since it's so large - - - 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}, - }; - - - //build store - Game.BuildStore(); - - //build master bar - var str=''; - str+=''; - str+=''; - l('buildingsMaster').innerHTML=str; - - //build object displays - var muteStr='Muted :'; - for (var i in Game.Objects) - { - var me=Game.Objects[i]; - 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.getBoundingClientRect();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 ''+(me.plural.charAt(0).toUpperCase()+me.plural.slice(1))+(me.level>0?' (lvl. '+me.level+')':'')+'Click to unmute '+me.plural+''; - } - } - 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.desc=desc; - this.baseDesc=this.desc; - this.desc=BeautifyInText(this.baseDesc); - 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.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 (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/tick.mp3'); - } - else - { - Game.choiceSelectorOn=this.id; - var choices=this.choicesFunction(); - 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; - var str=''; - str+='
(display this building)x'; - str+=''+this.name+'
'+ - ''+ - ''+choices[selected].name+'
'+ - ''; - - for (var i in choices) - { - var icon=choices[i].icon; - str+=''; - } - } - 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(); - 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,[['Yes','Game.UpgradesById['+upgrade.id+'].buy(1);Game.ClosePrompt();'],'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; - /*if (Game.prefs.popups) {} - else Game.Notify('Upgrade unlocked',''+Game.Upgrades[what].name+'',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) - { - if (Game.ascensionMode==1 && Game.Upgrades[what].pool=='prestige') return 0; - return (Game.Upgrades[what]?Game.Upgrades[what].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' && (!me.lasting || Game.ascensionMode!=1)) - { - 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 (apWill 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')+ - '>'+ - '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='' - ,'store')+' '+Game.clickStr+'="Game.UpgradesById['+me.id+'].buy();" id="upgrade'+i+'" style="'+(me.icon[2]?'background-image:url('+me.icon[2]+');':'')+'background-position:'+(-me.icon[0]*48)+'px '+(-me.icon[1]*48)+'px;">';*/ - 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) - - Game.NewUpgradeCookie=function(obj) - { - var upgrade=new Game.Upgrade(obj.name,'Cookie production multiplier +'+Beautify((typeof(obj.power)=='function'?obj.power(obj):obj.power),1)+'%.'+Beautify(Math.round(me.getPrice()))+''+(me.pool=='toggle'?'[Togglable]':'[Upgrade]')+''+me.name+''+me.desc+''+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}, - '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]) alert('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) - { - var upgrade=new Game.Upgrade(name,desc,Game.Objects[building].basePrice*Game.Tiers[tier].price,Game.GetIcon(building,tier)); - 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= - (b1.plural.charAt(0).toUpperCase()+b1.plural.slice(1))+' gain +5% CpS per '+b2.name.toLowerCase()+'.
'+ - (b2.plural.charAt(0).toUpperCase()+b2.plural.slice(1))+' gain +0.1% CpS per '+b1.name.toLowerCase()+'.'+ - 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)) mult*=2;} - 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','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','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','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','The mouse and cursors gain +0.1 cookies for each non-cursor object owned.clickity',100000,[0,13]);Game.MakeTiered(Game.last,4,0); - new Game.Upgrade('Million fingers','The mouse and cursors gain +0.5 cookies for each non-cursor object owned.clickityclickity',10000000,[0,14]);Game.MakeTiered(Game.last,5,0); - new Game.Upgrade('Billion fingers','The mouse and cursors gain +5 cookies for each non-cursor object owned.clickityclickityclickity',100000000,[0,15]);Game.MakeTiered(Game.last,6,0); - new Game.Upgrade('Trillion fingers','The mouse and cursors gain +50 cookies for each non-cursor object owned.clickityclickityclickityclickity',1000000000,[0,16]);Game.MakeTiered(Game.last,7,0); - - order=200; - new Game.TieredUpgrade('Forwards from grandma','Grandmas are twice as efficient.RE:RE:thought you\'d get a kick out of this ;))','Grandma',1); - new Game.TieredUpgrade('Steel-plated rolling pins','Grandmas are twice as efficient.Just what you kneaded.','Grandma',2); - new Game.TieredUpgrade('Lubricated dentures','Grandmas are twice as efficient.squish','Grandma',3); - - order=300; - new Game.TieredUpgrade('Cheap hoes','Farms are twice as efficient.Rake in the dough!','Farm',1); - new Game.TieredUpgrade('Fertilizer','Farms are twice as efficient.It\'s chocolate, I swear.','Farm',2); - new Game.TieredUpgrade('Cookie trees','Farms are twice as efficient.A relative of the breadfruit.','Farm',3); - - order=500; - new Game.TieredUpgrade('Sturdier conveyor belts','Factories are twice as efficient.You\'re going places.','Factory',1); - new Game.TieredUpgrade('Child labor','Factories are twice as efficient.Cheaper, healthier workforce.','Factory',2); - new Game.TieredUpgrade('Sweatshop','Factories are twice as efficient.Slackers will be terminated.','Factory',3); - - order=400; - new Game.TieredUpgrade('Sugar gas','Mines are twice as efficient.A pink, volatile gas, found in the depths of some chocolate caves.','Mine',1); - new Game.TieredUpgrade('Megadrill','Mines are twice as efficient.You\'re in deep.','Mine',2); - new Game.TieredUpgrade('Ultradrill','Mines are twice as efficient.Finally caved in?','Mine',3); - - order=600; - new Game.TieredUpgrade('Vanilla nebulae','Shipments are twice as efficient.If you removed your space helmet, you could probably smell it!','Shipment',1); - new Game.TieredUpgrade('Wormholes','Shipments are twice as efficient.
(Note : don\'t do that.)By using these as shortcuts, your ships can travel much faster.','Shipment',2); - new Game.TieredUpgrade('Frequent flyer','Shipments are twice as efficient.Come back soon!','Shipment',3); - - order=700; - new Game.TieredUpgrade('Antimony','Alchemy labs are twice as efficient.Actually worth a lot of mony.','Alchemy lab',1); - new Game.TieredUpgrade('Essence of dough','Alchemy labs are twice as efficient.Extracted through the 5 ancient steps of alchemical baking.','Alchemy lab',2); - new Game.TieredUpgrade('True chocolate','Alchemy labs are twice as efficient.The purest form of cacao.','Alchemy lab',3); - - order=800; - new Game.TieredUpgrade('Ancient tablet','Portals are twice as efficient.A strange slab of peanut brittle, holding an ancient cookie recipe. Neat!','Portal',1); - new Game.TieredUpgrade('Insane oatling workers','Portals are twice as efficient.ARISE, MY MINIONS!','Portal',2); - new Game.TieredUpgrade('Soul bond','Portals are twice as efficient.So I just sign up and get more cookies? Sure, whatever!','Portal',3); - - order=900; - new Game.TieredUpgrade('Flux capacitors','Time machines are twice as efficient.Bake to the future.','Time machine',1); - new Game.TieredUpgrade('Time paradox resolver','Time machines are twice as efficient.No more fooling around with your own grandmother!','Time machine',2); - new Game.TieredUpgrade('Quantum conundrum','Time machines are twice as efficient.There is only one constant, and that is universal uncertainty.','Time machine',3); - - order=20000; - new Game.Upgrade('Kitten helpers','You gain more CpS the more milk you have.
Or is it?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','You gain more CpS the more milk you have.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: 1, 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}); - Game.NewUpgradeCookie({name:'Macadamia nut cookies',desc:'They\'re macadamn delicious!',icon:[5,3],power: 2, price: 999999999}); - 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','The mouse and cursors gain +500 cookies for each non-cursor object owned.clickityclickityclickityclickityclick',10000000000,[0,17]);Game.MakeTiered(Game.last,8,0); - - order=200;new Game.TieredUpgrade('Prune juice','Grandmas are twice as efficient.Gets me going.','Grandma',4); - order=300;new Game.TieredUpgrade('Genetically-modified cookies','Farms are twice as efficient.All-natural mutations.','Farm',4); - order=500;new Game.TieredUpgrade('Radium reactors','Factories are twice as efficient.Gives your cookies a healthy glow.','Factory',4); - order=400;new Game.TieredUpgrade('Ultimadrill','Mines are twice as efficient.Pierce the heavens, etc.','Mine',4); - order=600;new Game.TieredUpgrade('Warp drive','Shipments are twice as efficient.To boldly bake.','Shipment',4); - order=700;new Game.TieredUpgrade('Ambrosia','Alchemy labs are twice as efficient.Adding this to the cookie mix is sure to make them even more addictive!','Alchemy lab',4); - order=800;new Game.TieredUpgrade('Sanity dance','Portals are twice as efficient.
Perhaps dangerously so.
Let\'s hope you can keep selling these legally.We can change if we want to.','Portal',4); - order=900;new Game.TieredUpgrade('Causality enforcer','Time machines are twice as efficient.
We can leave our brains behind.What happened, happened.','Time machine',4); - - order=5000; - new Game.Upgrade('Lucky day','Golden cookies appear twice as often and stay twice as long.Oh hey, a four-leaf penny!',777777777,[27,6]); - new Game.Upgrade('Serendipity','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','You gain more CpS the more milk you have.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: 4, price: 99999999999}); - Game.NewUpgradeCookie({name:'White chocolate-coated cookies',desc:'These dazzling cookies absolutely glisten with flavor.',icon:[11,3],power: 4, price: 99999999999}); - - Game.GrandmaSynergies=[]; - Game.GrandmaSynergy=function(name,desc,building) - { - var building=Game.Objects[building]; - var grandmaNumber=(building.id-1); - if (grandmaNumber==1) grandmaNumber='grandma'; - else grandmaNumber+=' grandmas'; - desc='Grandmas are twice as efficient. '+(building.plural.charAt(0).toUpperCase()+building.plural.slice(1))+' gain +1% CpS per '+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; - if (Game.prefs.popups) Game.Popup('Research has begun.'); - else Game.Notify('Research has begun','Your bingo center/research facility is conducting experiments.',[9,0]); - } - } - - new Game.Upgrade('Bingo center/Research facility','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?...',1000000000000000,[11,9],function(){Game.SetResearch('Specialized chocolate chips');});Game.last.noPerm=1; - - order=15000; - new Game.Upgrade('Specialized chocolate chips','Cookie production multiplier +1%.
Bingo.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','Cookie production multiplier +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','Grandmas are twice as efficient.The result of years of scientific research!',4000000000000000,[2,9],function(){Game.SetResearch('Underworld ovens');});Game.last.pool='tech'; - new Game.Upgrade('Underworld ovens','Cookie production multiplier +3%.Powered by science, of course!',8000000000000000,[3,9],function(){Game.SetResearch('One mind');});Game.last.pool='tech'; - new Game.Upgrade('One mind','Each grandma gains +0.02 base CpS per grandma.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,'Warning : purchasing this will have unexpected, and potentially undesirable results!'); - new Game.Upgrade('Exotic nuts','Cookie production multiplier +4%.
It\'s all downhill from here. You have been warned!
Purchase anyway?You\'ll go crazy over these!',32000000000000000,[5,9],function(){Game.SetResearch('Communal brainsweep');});Game.last.pool='tech'; - new Game.Upgrade('Communal brainsweep','Each grandma gains another +0.02 base CpS per grandma.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','Cookie production multiplier +5%.Tastes like insects, ligaments, and molasses.',128000000000000000,[7,9],function(){Game.SetResearch('Elder Pact');});Game.last.pool='tech'; - new Game.Upgrade('Elder Pact','Each grandma gains +0.05 base CpS per portal.Note : this is a bad idea.squirm crawl slither writhe',256000000000000000,[8,9],function(){Game.elderWrath=3;Game.storeToRefresh=1;});Game.last.pool='tech'; - new Game.Upgrade('Elder Pledge','Contains the wrath of the elders, at least for a while.
today we riseThis 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 'Time remaining until pledge runs out :';} - 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.sayTime(Game.pledgeT,-1)+''+(Game.pledges==0?'You haven\'t pledged to the elders yet.':('You\'ve pledged to the elders '+(Game.pledges==1?'once':Game.pledges==2?'twice':(Game.pledges+' times'))+'.'))+''+this.desc; - }; - - - order=150; - new Game.Upgrade('Plastic mouse','Clicking gains +1% of your CpS.Slightly squeaky.',50000,[11,0]);Game.MakeTiered(Game.last,1,11); - new Game.Upgrade('Iron mouse','Clicking gains +1% of your CpS.Click like it\'s 1349!',5000000,[11,1]);Game.MakeTiered(Game.last,2,11); - new Game.Upgrade('Titanium mouse','Clicking gains +1% of your CpS.Heavy, but powerful.',500000000,[11,2]);Game.MakeTiered(Game.last,3,11); - new Game.Upgrade('Adamantium mouse','Clicking gains +1% of your CpS.You could cut diamond with these.',50000000000,[11,13]);Game.MakeTiered(Game.last,4,11); - - order=40000; - new Game.Upgrade('Ultrascience','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','The mouse and cursors gain +5000 cookies for each non-cursor object owned.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','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','Puts a permanent end to the elders\' wrath, at the price of 5% of your CpS.This is a complicated ritual involving silly, inconsequential trivialities such as cursed laxatives, century-old cacao, and an infant.',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','You will get 5% of your CpS back, but the grandmatriarchs will return.
Don\'t question it.we',6666666666,[8,9],function() - { - Game.Lock('Elder Covenant'); - Game.Unlock('Elder Covenant'); - }); - Game.last.pool='toggle'; - - order=5000; - new Game.Upgrade('Get lucky','Golden cookie effects last twice as long.
rise
againYou\'ve been up all night, haven\'t you?',77777777777777,[27,6]); - - order=15000; - new Game.Upgrade('Sacrificial rolling pins','Elder pledges last twice as long.These are mostly just for spreading the anti-aging cream.',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.
(And accessorily, shortening the chicken\'s suffering.)
These have coconut, okay?',icon:[4,4],power: 2, price: 9999999999999*5}); - - order=40000; - new Game.Upgrade('Neuromancy','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=10031; - Game.NewUpgradeCookie({name:'Empire biscuits',desc:'For your growing cookie empire, of course!',icon:[5,4],power: 2, price: 99999999999999}); - 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; - new Game.TieredUpgrade('Sugar bosons','Antimatter condensers are twice as efficient.Sweet firm bosons.','Antimatter condenser',1); - new Game.TieredUpgrade('String theory','Antimatter condensers are twice as efficient.Reveals new insight about the true meaning of baking cookies (and, as a bonus, the structure of the universe).','Antimatter condenser',2); - new Game.TieredUpgrade('Large macaron collider','Antimatter condensers are twice as efficient.How singular!','Antimatter condenser',3); - new Game.TieredUpgrade('Big bang bake','Antimatter condensers are twice as efficient.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','You gain more CpS the more milk you have.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','The mouse and cursors gain +50000 cookies for each non-cursor object owned.sometimes',10000000000000000,[0,19]);Game.MakeTiered(Game.last,10,0); - - order=200;new Game.TieredUpgrade('Double-thick glasses','Grandmas are twice as efficient.
things just
clickOh... so THAT\'s what I\'ve been baking.','Grandma',5); - order=300;new Game.TieredUpgrade('Gingerbread scarecrows','Farms are twice as efficient.Staring at your crops with mischievous glee.','Farm',5); - order=500;new Game.TieredUpgrade('Recombobulators','Factories are twice as efficient.A major part of cookie recombobulation.','Factory',5); - order=400;new Game.TieredUpgrade('H-bomb mining','Mines are twice as efficient.Questionable efficiency, but spectacular nonetheless.','Mine',5); - order=600;new Game.TieredUpgrade('Chocolate monoliths','Shipments are twice as efficient.My god. It\'s full of chocolate bars.','Shipment',5); - order=700;new Game.TieredUpgrade('Aqua crustulae','Alchemy labs are twice as efficient.Careful with the dosing - one drop too much and you get muffins.','Alchemy lab',5); - order=800;new Game.TieredUpgrade('Brane transplant','Portals are twice as efficient.
And nobody likes muffins.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;new Game.TieredUpgrade('Yestermorrow comparators','Time machines are twice as efficient.Fortnights into milleniums.','Time machine',5); - order=1000;new Game.TieredUpgrade('Reverse cyclotrons','Antimatter condensers are twice as efficient.These can uncollision particles and unspin atoms. For... uh... better flavor, and stuff.','Antimatter condenser',5); - - order=150; - new Game.Upgrade('Unobtainium mouse','Clicking gains +1% of your CpS.These nice mice should suffice.',5000000000000,[11,14]);Game.MakeTiered(Game.last,5,11); - - order=10020; - 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','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','Unlocks 5% of the potential of your prestige level.Grants the knowledge of heavenly chips, and how to use them to make baking more efficient.',11,[19,7]);Game.last.noPerm=1; - new Game.Upgrade('Heavenly cookie stand','Unlocks 25% of the potential of your prestige level.
It\'s a secret to everyone.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','Unlocks 50% of the potential of your prestige level.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','Unlocks 75% of the potential of your prestige level.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','Unlocks 100% of the potential of your prestige level.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.',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 '
May you use them wisely.You currently own '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.'+this.desc;}; - }*/ - - order=0; - new Game.Upgrade('Persistent memory','Subsequent research will be 10 times as fast.It\'s all making sense!',500,[9,2]);Game.last.pool='prestige'; - - order=40000; - new Game.Upgrade('Wrinkler doormat','Wrinklers spawn much more frequently.
Again!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','Unlocks... something.Not a creature was stirring, not even a mouse.',25,[19,9],function() - { - var drop=choose(Game.santaDrops); - Game.Unlock(drop); - if (Game.prefs.popups) Game.Popup('In the festive hat, you find...
a festive test tube
and '+drop+'.'); - else Game.Notify('In the festive hat, you find...','a festive test tube
and '+drop+'.',Game.Upgrades[drop].icon); - }); - - new Game.Upgrade('Increased merriness','Cookie production multiplier +15%.
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.',2525,[17,9]); - new Game.Upgrade('Improved jolliness','Cookie production multiplier +15%.
You know what they say, after all; the s\'more, the merrier.
Cost scales with Santa level.A nice wobbly belly goes a long way.',2525,[17,9]); - new Game.Upgrade('A lump of coal','Cookie production multiplier +1%.
You jolly?
Cost scales with Santa level.Some of the world\'s worst stocking stuffing.',2525,[13,9]); - new Game.Upgrade('An itchy sweater','Cookie production multiplier +1%.
I guess you could try starting your own little industrial revolution, or something?...
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','Reindeer appear twice as frequently.
Cost scales with Santa level.Male reindeer are from Mars; female reindeer are from venison.',2525,[12,9]); - new Game.Upgrade('Weighted sleighs','Reindeer are twice as slow.
Cost scales with Santa level.Hope it was worth the weight.',2525,[12,9]); - new Game.Upgrade('Ho ho ho-flavored frosting','Reindeer give twice as much.
(Something something forced into cervidude)
Cost scales with Santa level.It\'s time to up the antler.',2525,[12,9]); - new Game.Upgrade('Season savings','All buildings are 1% cheaper.
Cost scales with Santa level.By Santa\'s beard, what savings!',2525,[16,9],function(){Game.storeToRefresh=1;}); - new Game.Upgrade('Toy workshop','All upgrades are 5% cheaper.
But who will save us?
Cost scales with Santa level.Watch yours-elf around elvesdroppers who might steal our production secrets.',2525,[16,9],function(){Game.upgradesToRebuild=1;}); - new Game.Upgrade('Naughty list','Grandmas are twice as productive.
Or elven worse!
Cost scales with Santa level.This list contains every unholy deed perpetuated by grandmakind.',2525,[15,9]); - new Game.Upgrade('Santa\'s bottomless bag','Random drops are 10% more common.
He won\'t be checking this one twice.
Once. Once is enough.
Cost scales with Santa level.This is one bottom you can\'t check out.',2525,[19,9]); - new Game.Upgrade('Santa\'s helpers','Clicking is 10% more powerful.
Cost scales with Santa level.Some choose to help hamburger; some choose to help you.',2525,[19,9]); - new Game.Upgrade('Santa\'s legacy','Cookie production multiplier +3% per Santa\'s levels.
To each their own, I guess.
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','Milk is 5% more powerful.
Cost scales with Santa level.Part of Santa\'s dreadfully unbalanced diet.',2525,[19,9]); - - order=40000; - new Game.Upgrade('Reindeer season','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','Cookie production multiplier +20%.
All buildings are 1% cheaper.
All upgrades are 2% cheaper.My name is Claus, king of kings;',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
Look on my toys, ye Mighty, and despair!
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']; - - Game.GetHowManyHeartDrops=function() - { - var num=0; - for (var i in Game.heartDrops) {if (Game.Has(Game.heartDrops[i])) num++;} - return num; - } - /*for (var i in Game.heartDrops) - { - Game.Upgrades[Game.heartDrops[i]].descFunc=function(){return 'You currently own '+Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length+' heart biscuits.'+this.desc;}; - }*/ - - order=1100; - new Game.TieredUpgrade('Gem polish','Prisms are twice as efficient.Get rid of the grime and let more light in.','Prism',1); - new Game.TieredUpgrade('9th color','Prisms are twice as efficient.
Truly, truly outrageous.Delve into untouched optical depths where even the mantis shrimp hasn\'t set an eye!','Prism',2); - new Game.TieredUpgrade('Chocolate light','Prisms are twice as efficient.Bask into its cocoalescence.','Prism',3); - new Game.TieredUpgrade('Grainbow','Prisms are twice as efficient.
(Warning : may cause various interesting albeit deadly skin conditions.)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); - new Game.TieredUpgrade('Pure cosmic light','Prisms are twice as efficient.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','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','Triggers Christmas season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.\'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','Triggers Halloween season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.spooky scary skeletons',Game.seasonTriggerBasePrice,[13,8]);Game.last.season='halloween';Game.last.pool='toggle'; - new Game.Upgrade('Lovesick biscuit','Triggers Valentine\'s Day season for the next 24 hours.
will wake you with a boo
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.Romance never goes out of fashion.',Game.seasonTriggerBasePrice,[20,3]);Game.last.season='valentines';Game.last.pool='toggle'; - new Game.Upgrade('Fool\'s biscuit','Triggers Business Day season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.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','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','You gain more CpS the more milk you have.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','The mouse and cursors gain +500000 cookies for each non-cursor object owned.[cursory flavor text]',10000000000000000000,[12,20]);Game.MakeTiered(Game.last,11,0); - new Game.Upgrade('Octillion fingers','The mouse and cursors gain +5000000 cookies for each non-cursor object owned.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','Clicking gains +1% of your CpS.I rodent do that if I were you.',500000000000000,[11,15]);Game.MakeTiered(Game.last,6,11); - new Game.Upgrade('Wishalloy mouse','Clicking gains +1% of your CpS.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;new Game.TieredUpgrade('Aging agents','Grandmas are twice as efficient.Counter-intuitively, grandmas have the uncanny ability to become more powerful the older they get.','Grandma',6); - order=300;new Game.TieredUpgrade('Pulsar sprinklers','Farms are twice as efficient.There\'s no such thing as over-watering. The moistest is the bestest.','Farm',6); - order=500;new Game.TieredUpgrade('Deep-bake process','Factories are twice as efficient.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;new Game.TieredUpgrade('Coreforge','Mines are twice as efficient.You\'ve finally dug a tunnel down to the Earth\'s core. It\'s pretty warm down here.','Mine',6); - order=600;new Game.TieredUpgrade('Generation ship','Shipments are twice as efficient.Built to last, this humongous spacecraft will surely deliver your cookies to the deep ends of space, one day.','Shipment',6); - order=700;new Game.TieredUpgrade('Origin crucible','Alchemy labs are twice as efficient.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;new Game.TieredUpgrade('Deity-sized portals','Portals are twice as efficient.It\'s almost like, say, an elder god could fit through this thing now. Hypothetically.','Portal',6); - order=900;new Game.TieredUpgrade('Far future enactment','Time machines are twice as efficient.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;new Game.TieredUpgrade('Nanocosmics','Antimatter condensers are twice as efficient.The theory of nanocosmics posits that each subatomic particle is in fact its own self-contained universe, holding unfathomable amounts of energy.','Antimatter condenser',6); - order=1100; - new Game.TieredUpgrade('Glow-in-the-dark','Prisms are twice as efficient.
This somehow stacks with the nested universe theory, because physics.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','Cookie production multiplied by 1,000.It\'s magic. I ain\'t gotta explain sht.',7,[17,5]);//debug purposes only - Game.last.pool='debug'; - - - order=24000; - new Game.Upgrade('Bunny biscuit','Triggers Easter season for the next 24 hours.
Triggering another season will cancel this one.
Cost scales with unbuffed CpS and increases with every season switch.All the world will be your enemy',Game.seasonTriggerBasePrice,[0,12]);Game.last.season='easter';Game.last.pool='toggle'; - - var eggPrice=999999999999; - var eggPrice2=99999999999999; - new Game.Upgrade('Chicken egg','Cookie production multiplier +1%.
and when they catch you,
they will kill you...
but first they must catch you.
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','Cookie production multiplier +1%.
Cost scales with how many eggs you own.Then he waddled away.',eggPrice,[2,12]); - new Game.Upgrade('Turkey egg','Cookie production multiplier +1%.
Cost scales with how many eggs you own.These hatch into strange, hand-shaped creatures.',eggPrice,[3,12]); - new Game.Upgrade('Quail egg','Cookie production multiplier +1%.
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','Cookie production multiplier +1%.
Cost scales with how many eggs you own.Holy azure-hued shelled embryos!',eggPrice,[5,12]); - new Game.Upgrade('Ostrich egg','Cookie production multiplier +1%.
Cost scales with how many eggs you own.One of the largest eggs in the world. More like ostrouch, am I right?',eggPrice,[6,12]); - new Game.Upgrade('Cassowary egg','Cookie production multiplier +1%.
Guys?
Cost scales with how many eggs you own.The cassowary is taller than you, possesses murderous claws and can easily outrun you.',eggPrice,[7,12]); - new Game.Upgrade('Salmon roe','Cookie production multiplier +1%.
You\'d do well to be casso-wary of them.
Cost scales with how many eggs you own.Do the impossible, see the invisible.',eggPrice,[8,12]); - new Game.Upgrade('Frogspawn','Cookie production multiplier +1%.
Roe roe, fight the power?
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','Cookie production multiplier +1%.
Cost scales with how many eggs you own.HELLO IS THIS FOOD?',eggPrice,[10,12]); - new Game.Upgrade('Turtle egg','Cookie production multiplier +1%.
LET ME TELL YOU ABOUT FOOD.
WHY DO I KEEP EATING MY FRIENDS
Cost scales with how many eggs you own.Turtles, right? Hatch from shells. Grow into shells. What\'s up with that?',eggPrice,[11,12]); - new Game.Upgrade('Ant larva','Cookie production multiplier +1%.
Now for my skit about airplane food.
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.',eggPrice,[12,12]); - new Game.Upgrade('Golden goose egg','Golden cookies appear 5% more often.
And all will be well.
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','All buildings and upgrades are 1% cheaper.
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','Wrinklers explode into 5% more cookies.
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','Clicking is 10% more powerful.
Cost scales with how many eggs you own.The shell appears to be chipped.',eggPrice2,[16,12]); - new Game.Upgrade('Omelette','Other eggs appear 10% more frequently.
I wonder what\'s inside this one!
Cost scales with how many eggs you own.Fromage not included.',eggPrice2,[17,12]); - new Game.Upgrade('Chocolate egg','Contains a lot of cookies.
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; - if (Game.prefs.popups) Game.Popup('The chocolate egg bursts into
'+Beautify(cookies)+'!'); - else Game.Notify('Chocolate egg','The egg bursts into '+Beautify(cookies)+' cookies!',Game.Upgrades['Chocolate egg'].icon); - Game.Earn(cookies); - }); - new Game.Upgrade('Century egg','You continually gain more CpS the longer you\'ve played in the current ascension.
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 'Current boost : +'+Beautify(n*100,1)+'%'+this.desc; - }; - new Game.Upgrade('"egg"','+9 CpShey 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;}} - //{Game.Upgrades[Game.eggDrops[i]].priceFunc=function(){return Math.pow(Game.GetHowManyEggs()+1,2)*Game.cookiesPs*60*5;}} - for (var i in Game.rareEggDrops) - {Game.Upgrades[Game.rareEggDrops[i]].priceFunc=function(){return Math.pow(3,Game.GetHowManyEggs())*999;}} - //{Game.Upgrades[Game.rareEggDrops[i]].priceFunc=function(){return Math.pow(Game.GetHowManyEggs()+1,3)*Game.cookiesPs*60*5;}} - - /*for (var i in Game.easterEggs) - { - Game.Upgrades[Game.easterEggs[i]].descFunc=function(){return 'You currently own '+Game.GetHowManyEggs()+'/'+Game.easterEggs.length+' eggs.'+this.desc;}; - }*/ - - 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); - if (Game.prefs.popups) Game.Popup('You find :
'+drop+'!'); - else Game.Notify('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; - new Game.TieredUpgrade('Taller tellers','Banks are twice as efficient.Able to process a higher amount of transactions. Careful though, as taller tellers tell tall tales.','Bank',1); - new Game.TieredUpgrade('Scissor-resistant credit cards','Banks are twice as efficient.For those truly valued customers.','Bank',2); - new Game.TieredUpgrade('Acid-proof vaults','Banks are twice as efficient.You know what they say : better safe than sorry.','Bank',3); - new Game.TieredUpgrade('Chocolate coins','Banks are twice as efficient.This revolutionary currency is much easier to melt from and into ingots - and tastes much better, for a change.','Bank',4); - new Game.TieredUpgrade('Exponential interest rates','Banks are twice as efficient.Can\'t argue with mathematics! Now fork it over.','Bank',5); - new Game.TieredUpgrade('Financial zen','Banks are twice as efficient.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; - new Game.TieredUpgrade('Golden idols','Temples are twice as efficient.Lure even greedier adventurers to retrieve your cookies. Now that\'s a real idol game!','Temple',1); - new Game.TieredUpgrade('Sacrifices','Temples are twice as efficient.What\'s a life to a gigaton of cookies?','Temple',2); - new Game.TieredUpgrade('Delicious blessing','Temples are twice as efficient.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); - new Game.TieredUpgrade('Sun festival','Temples are twice as efficient.Free the primordial powers of your temples with these annual celebrations involving fire-breathers, traditional dancing, ritual beheadings and other merriments!','Temple',4); - new Game.TieredUpgrade('Enlarged pantheon','Temples are twice as efficient.Enough spiritual inadequacy! More divinities than you\'ll ever need, or your money back! 100% guaranteed!','Temple',5); - new Game.TieredUpgrade('Great Baker in the sky','Temples are twice as efficient.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; - new Game.TieredUpgrade('Pointier hats','Wizard towers are twice as efficient.Tests have shown increased thaumic receptivity relative to the geometric proportions of wizardly conic implements.','Wizard tower',1); - new Game.TieredUpgrade('Beardlier beards','Wizard towers are twice as efficient.Haven\'t you heard? The beard is the word.','Wizard tower',2); - new Game.TieredUpgrade('Ancient grimoires','Wizard towers are twice as efficient.Contain interesting spells such as "Turn Water To Drool", "Grow Eyebrows On Furniture" and "Summon Politician".','Wizard tower',3); - new Game.TieredUpgrade('Kitchen curses','Wizard towers are twice as efficient.Exotic magic involved in all things pastry-related. Hexcellent!','Wizard tower',4); - new Game.TieredUpgrade('School of sorcery','Wizard towers are twice as efficient.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); - new Game.TieredUpgrade('Dark formulas','Wizard towers are twice as efficient.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','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','Contains an assortment of macarons.Multicolored delicacies filled with various kinds of jam.',25,[20,8]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; - new Game.Upgrade('Box of brand biscuits','Contains an assortment of popular biscuits.
Not to be confused with macaroons, macaroni, macarena or any of that nonsense.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: 4,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: 4,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='Placing an upgrade in this slot will make its effects permanent across all playthroughs.
Click to activate.'; - 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, 2000,[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, 30000,[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, 400000,[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, 5000000,[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'+'Current : '+upgrade.name+''+this.desc; - };}(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 Pick an upgrade to make permanent'+ - - ' '+ - ''+(Game.crate(Game.UpgradesById[upgrade==-1?0:upgrade],'','','upgradeToSlot'))+''+upgrades+''+ - '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.' - ,[['Confirm','Game.permanentUpgrades['+slot+']=Game.SelectingPermanentUpgrade;Game.BuildAscendTree();Game.ClosePrompt();'],'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','Eggs drop 10% more often.
Golden cookies appear 2% more often during Easter.',111111,[0,12]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Starsnow','Christmas cookies drop 5% more often.
Reindeer appear 5% more often.',111111,[12,9]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Starterror','Spooky cookies drop 10% more often.
Golden cookies appear 2% more often during Halloween.',111111,[13,8]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Starlove','Heart cookies are 50% more powerful.
Golden cookies appear 2% more often during Valentines.',111111,[20,3]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - new Game.Upgrade('Startrade','Golden cookies appear 5% more often during Business day.',111111,[17,6]);Game.last.pool='prestige';Game.last.parents=['Season switcher']; - - var angelPriceFactor=7; - var desc=function(percent,total){return 'You gain another +'+percent+'% of your regular CpS while the game is closed, for a total of '+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','You now keep making cookies while the game is closed, at the rate of 5% of your regular CpS and up to 1 hour after the game is closed.
(Beyond 1 hour, this is reduced by a further 90% - your rate goes down to 0.5% of your CpS.)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','Golden cookies appear 5% more often.Someone up there likes you.',77,[22,6]);Game.last.pool='prestige'; - new Game.Upgrade('Lasting fortune','Golden cookies effects last 10% longer.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','Golden cookies stay 5% longer.Life just got a bit more intense.',7777,[10,14]);Game.last.pool='prestige';Game.last.parents=['Lasting fortune']; - - new Game.Upgrade('Divine discount','Buildings are 1% cheaper.Someone special deserves a special price.',99999,[21,7]);Game.last.pool='prestige';Game.last.parents=['Decisive fate']; - new Game.Upgrade('Divine sales','Upgrades are 1% cheaper.Everything must go!',99999,[18,7]);Game.last.pool='prestige';Game.last.parents=['Decisive fate']; - new Game.Upgrade('Divine bakeries','Cookie upgrades are 5 times cheaper.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','You start with 10 cursors.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','You start with 5 grandmas.Where did these come from?',5000,[1,14]);Game.last.pool='prestige';Game.last.parents=['Starter kit']; - new Game.Upgrade('Halo gloves','Clicks are 10% more powerful.Smite that cookie.',55555,[22,7]);Game.last.pool='prestige';Game.last.parents=['Starter kit']; - - new Game.Upgrade('Kitten angels','You gain more CpS the more milk you have.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','Wrinklers appear 5 times as fast.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','Wrinklers regurgitate 5% more cookies.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;new Game.TieredUpgrade('Xtreme walkers','Grandmas are twice as efficient.Complete with flame decals and a little horn that goes "toot".','Grandma',7); - order=300;new Game.TieredUpgrade('Fudge fungus','Farms are twice as efficient.A sugary parasite whose tendrils help cookie growth.','Farm',7); - order=400;new Game.TieredUpgrade('Planetsplitters','Mines are twice as efficient.
Please do not breathe in the spores. In case of spore ingestion, seek medical help within the next 36 seconds.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;new Game.TieredUpgrade('Cyborg workforce','Factories are twice as efficient.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;new Game.TieredUpgrade('Way of the wallet','Banks are twice as efficient.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;new Game.TieredUpgrade('Creation myth','Temples are twice as efficient.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;new Game.TieredUpgrade('Cookiemancy','Wizard towers are twice as efficient.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;new Game.TieredUpgrade('Dyson sphere','Shipments are twice as efficient.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;new Game.TieredUpgrade('Theory of atomic fluidity','Alchemy labs are twice as efficient.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;new Game.TieredUpgrade('End of times back-up plan','Portals are twice as efficient.Just in case, alright?','Portal',7); - order=900;new Game.TieredUpgrade('Great loop hypothesis','Time machines are twice as efficient.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;new Game.TieredUpgrade('The Pulse','Antimatter condensers are twice as efficient.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; - new Game.TieredUpgrade('Lux sanctorum','Prisms are twice as efficient.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;new Game.TieredUpgrade('The Unbridling','Grandmas are twice as efficient.It might be a classic tale of bad parenting, but let\'s see where grandma is going with this.','Grandma',8); - order=300;new Game.TieredUpgrade('Wheat triffids','Farms are twice as efficient.Taking care of crops is so much easier when your plants can just walk about and help around the farm.','Farm',8); - order=400;new Game.TieredUpgrade('Canola oil wells','Mines are twice as efficient.
Do not pet. Do not feed. Do not attempt to converse with.A previously untapped resource, canola oil permeates the underground olifers which grant it its particular taste and lucrative properties.','Mine',8); - order=500;new Game.TieredUpgrade('78-hour days','Factories are twice as efficient.Why didn\'t we think of this earlier?','Factory',8); - order=525;new Game.TieredUpgrade('The stuff rationale','Banks are twice as efficient.If not now, when? If not it, what? If not things... stuff?','Bank',8); - order=550;new Game.TieredUpgrade('Theocracy','Temples are twice as efficient.You\'ve turned your cookie empire into a perfect theocracy, gathering the adoration of zillions of followers from every corner of the universe.','Temple',8); - order=575;new Game.TieredUpgrade('Rabbit trick','Wizard towers are twice as efficient.
Don\'t let it go to your head.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!','Wizard tower',8); - order=600;new Game.TieredUpgrade('The final frontier','Shipments are twice as efficient.
Resulting cookies may or may not be fit for vegans.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;new Game.TieredUpgrade('Beige goo','Alchemy labs are twice as efficient.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;new Game.TieredUpgrade('Maddening chants','Portals are twice as efficient.A popular verse goes like so : "jau\'hn madden jau\'hn madden aeiouaeiouaeiou brbrbrbrbrbrbr"','Portal',8); - order=900;new Game.TieredUpgrade('Cookietopian moments of maybe','Time machines are twice as efficient.Reminiscing how things could have been, should have been, will have been.','Time machine',8); - order=1000;new Game.TieredUpgrade('Some other super-tiny fundamental particle? Probably?','Antimatter condensers are twice as efficient.When even the universe is running out of ideas, that\'s when you know you\'re nearing the end.','Antimatter condenser',8); - order=1100; - new Game.TieredUpgrade('Reverse shadows','Prisms are twice as efficient.Oh man, this is really messing with your eyes.','Prism',8); - - - order=20000; - new Game.Upgrade('Kitten accountants','You gain more CpS the more milk you have.business going great, sir',900000000000000000000000,Game.GetIcon('Kitten',6));Game.last.kitten=1;Game.MakeTiered(Game.last,6,18); - new Game.Upgrade('Kitten specialists','You gain more CpS the more milk you have.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','You gain more CpS the more milk you have.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','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','Unlocks the cookie dragon egg.Thank you for adopting this robust, fun-loving cookie dragon! It will bring you years of joy and entertainment.',25,[21,12]); - - new Game.Upgrade('Chimera','Synergy upgrades are 2% cheaper.
Keep in a dry and cool place, and away from other house pets. Subscription to home insurance is strongly advised.
You gain another +5% of your regular CpS while the game is closed.
You retain optimal cookie production while the game is closed for 2 more days.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','Contains an assortment of rich butter cookies.Five varieties of danish cookies.',25,[21,9]);Game.last.pool='prestige';Game.last.parents=['Heavenly cookies']; - - new Game.Upgrade('Golden switch','Unlocks the golden switch, which passively boosts your CpS by 50% but disables golden cookies.
Complete with little paper cups.Less clicking, more idling.',999,[21,10]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck']; - - new Game.Upgrade('Classic dairy selection','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','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]','Turning this on will give you a passive +50% CpS, but prevents golden cookies from spawning.
Cost is equal to 1 hour of production.',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)+''+this.desc; - } - return this.desc; - }; - Game.last.descFunc=func; - - new Game.Upgrade('Golden switch [on]','The switch is currently giving you a passive +50% CpS; it also prevents golden cookies from spawning.
The effective boost is +'+Beautify(Math.round(50+bonus*10))+'%
thanks to residual luck
and your '+bonus+' golden cookie upgrade'+(bonus==1?'':'s')+'.
Turning it off will revert those effects.
Cost is equal to 1 hour of production.',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','Lets you pick what flavor of milk to display.',0,[1,8]); - Game.last.descFunc=function(){ - var choice=this.choicesFunction()[Game.milkType]; - return 'Current : '+choice.name+''+this.desc; - }; - - Game.last.pool='toggle'; - Game.last.choicesFunction=function() - { - var choices=[]; - choices[0]={name:'Automatic',icon:[0,7]}; - choices[1]={name:'Plain milk',icon:[1,8]}; - choices[2]={name:'Chocolate milk',icon:[2,8]}; - choices[3]={name:'Raspberry milk',icon:[3,8]}; - choices[4]={name:'Orange milk',icon:[4,8]}; - choices[5]={name:'Caramel milk',icon:[5,8]}; - choices[6]={name:'Banana milk',icon:[6,8]}; - choices[7]={name:'Lime milk',icon:[7,8]}; - choices[8]={name:'Blueberry milk',icon:[8,8]}; - choices[9]={name:'Strawberry milk',icon:[9,8]}; - choices[10]={name:'Vanilla milk',icon:[10,8]}; - - if (Game.Has('Fanciful dairy selection')) - { - choices[11]={name:'Zebra milk',icon:[10,7]}; - choices[12]={name:'Cosmic milk',icon:[9,7]}; - choices[13]={name:'Flaming milk',icon:[8,7]}; - choices[14]={name:'Sanguine milk',icon:[7,7]}; - choices[15]={name:'Midas milk',icon:[6,7]}; - choices[16]={name:'Midnight milk',icon:[5,7]}; - choices[17]={name:'Green inferno milk',icon:[4,7]}; - choices[18]={name:'Frostfire milk',icon:[3,7]}; - - choices[24]={name:'Soy milk',icon:[27,23]}; - } - - choices[19]={name:'Honey milk',icon:[21,23]}; - choices[20]={name:'Coffee milk',icon:[22,23]}; - choices[21]={name:'Tea milk',icon:[23,23]}; - choices[22]={name:'Coconut milk',icon:[24,23]}; - choices[23]={name:'Cherry milk',icon:[25,23]}; - - choices[25]={name:'Spiced milk',icon:[26,23]}; - choices[26]={name:'Maple milk',icon:[28,23]}; - choices[27]={name:'Mint milk',icon:[29,23]}; - - choices[Game.milkType].selected=1; - return choices; - } - Game.last.choicesPick=function(id) - {Game.milkType=id;} - - Game.MilksByChoice={ - 0:{pic:'milkPlain'}, - 1:{pic:'milkPlain'}, - 2:{pic:'milkChocolate'}, - 3:{pic:'milkRaspberry'}, - 4:{pic:'milkOrange'}, - 5:{pic:'milkCaramel'}, - 6:{pic:'milkBanana'}, - 7:{pic:'milkLime'}, - 8:{pic:'milkBlueberry'}, - 9:{pic:'milkStrawberry'}, - 10:{pic:'milkVanilla'}, - 11:{pic:'milkZebra'}, - 12:{pic:'milkStars'}, - 13:{pic:'milkFire'}, - 14:{pic:'milkBlood'}, - 15:{pic:'milkGold'}, - 16:{pic:'milkBlack'}, - 17:{pic:'milkGreenFire'}, - 18:{pic:'milkBlueFire'}, - 19:{pic:'milkHoney'}, - 20:{pic:'milkCoffee'}, - 21:{pic:'milkTea'}, - 22:{pic:'milkCoconut'}, - 23:{pic:'milkCherry'}, - 24:{pic:'milkSoy'}, - 25:{pic:'milkSpiced'}, - 26:{pic:'milkMaple'}, - 27:{pic:'milkMint'}, - }; - - - order=10300; - 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,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,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,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,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 everyday.',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){ - var hours=totalHours%24; - var days=Math.floor(totalHours/24); - var str=hours+(hours==1?' hour':' hours'); - if (days>0) str=days+(days==1?' day':' days')+' and '+str; - return 'You retain optimal cookie production while the game is closed for twice as long, for a total of '+str+'.'; - } - 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','Unlocks the golden cookie sound selector, which lets you pick whether golden cookies emit a sound when appearing or not.A sound decision.',9999,[28,6]);Game.last.pool='prestige';Game.last.parents=['Decisive fate','Golden switch']; - - order=49900; - new Game.Upgrade('Golden cookie sound selector','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 'Current : '+choice.name+''+this.desc; - }; - - 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[Game.chimeType].selected=1; - return choices; - } - Game.last.choicesPick=function(id) - {Game.chimeType=id;} - - - new Game.Upgrade('Basic wallpaper assortment','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','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','You can attract 2 more wrinklers.The cookie your cookie could smell like.',444444,[19,8]);Game.last.pool='prestige';Game.last.parents=['Unholy bait']; - - new Game.Upgrade('Residual luck','While the golden switch is on, you gain an additional +10% CpS per golden cookie upgrade owned.Fortune comes in many flavors.',99999,[27,6]);Game.last.pool='prestige';Game.last.parents=['Golden switch']; - - order=150;new Game.Upgrade('Fantasteel mouse','Clicking gains +1% of your CpS.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','Clicking gains +1% of your CpS.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','All upgrades are 1% cheaper per 100 cursors.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.','Mine','Shipment','synergy2'); - - Game.SynergyUpgrade('Quantum electronics','
But hey, a space bribe goes a long way.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.','Shipment','Mine','synergy1'); - Game.SynergyUpgrade('Shipyards','
Extracted from the fuels of ancient, fossilized civilizations.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.','Portal','Prism','synergy2'); - - Game.SynergyUpgrade('Relativistic parsec-skipping','
Perhaps at all of us.People will tell you this isn\'t physically possible.','Time machine','Shipment','synergy1'); - Game.SynergyUpgrade('Primeval glow','
These are people you don\'t want on your ship.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','Unlocks a new tier of upgrades that affect 2 buildings at the same time.
Synergies appear once you have 15 of both buildings.The many beats the few.',222222,[10,20]);Game.last.pool='prestige';Game.last.parents=['Satan','Dominions']; - new Game.Upgrade('Synergies Vol. II','Unlocks a new tier of upgrades that affect 2 buildings at the same time.
Synergies appear once you have 75 of both buildings.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','Cookie production multiplier +10% permanently.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','Cookie production multiplier +10% permanently.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','Golden cookies (and all other things that spawn, such as reindeer) have 1% chance of being doubled.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','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','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,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','Sugar lumps ripen an hour sooner.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','Sugar lumps mature an hour sooner.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','Bifurcated sugar lumps appear 5% more often and are 5% more likely to drop 2 lumps.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']; - - //note : these showIf functions stop working beyond 10 quadrillion prestige level, due to loss in precision; the solution, of course, is to make sure 10 quadrillion is not an attainable prestige level - new Game.Upgrade('Lucky digit','+1% prestige level effect on CpS.
+1% golden cookie effect duration.
+1% golden cookie lifespan.This upgrade is a bit shy and only appears when your prestige level ends in 7.',777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Heavenly luck'];Game.last.showIf=function(){return (Math.ceil(Game.prestige)%10==7);}; - new Game.Upgrade('Lucky number','+1% prestige level effect on CpS.
+1% golden cookie effect duration.
+1% golden cookie lifespan.This upgrade is a reclusive hermit and only appears when your prestige level ends in 777.',77777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Lucky digit','Lasting fortune'];Game.last.showIf=function(){return (Math.ceil(Game.prestige)%1000==777);}; - new Game.Upgrade('Lucky payout','+1% prestige level effect on CpS.
+1% golden cookie effect duration.
+1% golden cookie lifespan.This upgrade took an oath of complete seclusion from the rest of the world and only appears when your prestige level ends in 777777.',77777777,[24,15]);Game.last.pool='prestige';Game.last.parents=['Lucky number','Decisive fate'];Game.last.showIf=function(){return (Math.ceil(Game.prestige)%1000000==777777);}; - - order=50000; - new Game.Upgrade('Background selector','Lets you pick which wallpaper to display.',0,[29,5]); - Game.last.descFunc=function(){ - var choice=this.choicesFunction()[Game.bgType]; - return 'Current : '+choice.name+''+this.desc; - }; - - Game.last.pool='toggle'; - Game.last.choicesFunction=function() - { - var choices=[]; - choices[0]={name:'Automatic',icon:[0,7]}; - choices[1]={name:'Blue',icon:[21,21]}; - choices[2]={name:'Red',icon:[22,21]}; - choices[3]={name:'White',icon:[23,21]}; - choices[4]={name:'Black',icon:[24,21]}; - choices[5]={name:'Gold',icon:[25,21]}; - choices[6]={name:'Grandmas',icon:[26,21]}; - choices[7]={name:'Displeased grandmas',icon:[27,21]}; - choices[8]={name:'Angered grandmas',icon:[28,21]}; - choices[9]={name:'Money',icon:[29,21]}; - choices[Game.bgType].selected=1; - return choices; - } - Game.last.choicesPick=function(id) - {Game.bgType=id;} - - Game.BGsByChoice={ - 0:{pic:'bgBlue'}, - 1:{pic:'bgBlue'}, - 2:{pic:'bgRed'}, - 3:{pic:'bgWhite'}, - 4:{pic:'bgBlack'}, - 5:{pic:'bgGold'}, - 6:{pic:'grandmas1'}, - 7:{pic:'grandmas2'}, - 8:{pic:'grandmas3'}, - 9:{pic:'bgMoney'}, - }; - - order=255; - Game.GrandmaSynergy('Lucky grandmas','A fortunate grandma that always seems to find more cookies.','Chancemaker'); - - order=1200; - new Game.TieredUpgrade('Your lucky cookie','Chancemakers are twice as efficient.This is the first cookie you\'ve ever baked. It holds a deep sentimental value and, after all this time, an interesting smell.','Chancemaker',1); - new Game.TieredUpgrade('"All Bets Are Off" magic coin','Chancemakers are twice as efficient.A coin that always lands on the other side when flipped. Not heads, not tails, not the edge. The other side.','Chancemaker',2); - new Game.TieredUpgrade('Winning lottery ticket','Chancemakers are twice as efficient.What lottery? THE lottery, that\'s what lottery! Only lottery that matters!','Chancemaker',3); - new Game.TieredUpgrade('Four-leaf clover field','Chancemakers are twice as efficient.No giant monsters here, just a whole lot of lucky grass.','Chancemaker',4); - new Game.TieredUpgrade('A recipe book about books','Chancemakers are twice as efficient.Tip the scales in your favor with 28 creative new ways to cook the books.','Chancemaker',5); - new Game.TieredUpgrade('Leprechaun village','Chancemakers are twice as efficient.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); - new Game.TieredUpgrade('Improbability drive','Chancemakers are twice as efficient.A strange engine that turns statistics on their head. Recommended by the Grandmother\'s Guide to the Bakery.','Chancemaker',7); - new Game.TieredUpgrade('Antisuperstistronics','Chancemakers are twice as efficient.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','You gain more CpS the more milk you have.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='Cookie production multiplier +1% for every year Cookie Clicker has existed (currently : +'+Beautify(years)+'%).Thank you for playing Cookie Clicker!';Game.last.desc=BeautifyInText(Game.last.baseDesc); - - - order=150;new Game.Upgrade('Armythril mouse','Clicking gains +1% of your CpS.
-OrteilThis 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;new Game.TieredUpgrade('Reverse dementia','Grandmas are twice as efficient.Extremely unsettling, and somehow even worse than the regular kind.','Grandma',9); - order=300;new Game.TieredUpgrade('Humane pesticides','Farms are twice as efficient.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;new Game.TieredUpgrade('Mole people','Mines are twice as efficient.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;new Game.TieredUpgrade('Machine learning','Factories are twice as efficient.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;new Game.TieredUpgrade('Edible money','Banks are twice as efficient.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;new Game.TieredUpgrade('Sick rap prayers','Temples are twice as efficient.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;new Game.TieredUpgrade('Deluxe tailored wands','Wizard towers are twice as efficient.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;new Game.TieredUpgrade('Autopilot','Shipments are twice as efficient.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;new Game.TieredUpgrade('The advent of chemistry','Alchemy labs are twice as efficient.You know what? That whole alchemy nonsense was a load of baseless rubbish. Dear god, what were you thinking?','Alchemy lab',9); - order=800;new Game.TieredUpgrade('The real world','Portals are twice as efficient.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;new Game.TieredUpgrade('Second seconds','Time machines are twice as efficient.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;new Game.TieredUpgrade('Quantum comb','Antimatter condensers are twice as efficient.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;new Game.TieredUpgrade('Crystal mirrors','Prisms are twice as efficient.Designed to filter more light back into your prisms, reaching levels of brightness that reality itself had never planned for.','Prism',9); - order=1200;new Game.TieredUpgrade('Bunnypedes','Chancemakers are twice as efficient.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','You gain more CpS the more milk you have.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','Each unspent sugar lump (up to 100) gives +1% CpS.Note : this means that spending sugar lumps will decrease your CpS until they grow back.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','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','Each grandma (up to 600) makes sugar lumps ripen 6 seconds sooner.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','Activating this will triple your CpS for 1 hour, at the cost of 1 sugar lump.
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,'activate the sugar frenzy',function() - { - Game.Upgrades['Sugar frenzy'].buy(1); - buff=Game.gainBuff('sugar frenzy',60*60,3); - if (Game.prefs.popups) Game.Popup('Sugar frenzy activated!'); - else Game.Notify('Sugar frenzy!','CpS x3 for 1 hour!',[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','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','Clicking gains +1% of your CpS.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','Clicking gains +1% of your CpS.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','You gain more CpS the more milk you have.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='Cookie production multiplier +2%.
Grandma production multiplier +2%.
Dropped by elderwort plants.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='Cookie production multiplier +2%.
Dropped by bakeberry plants.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='Cookie production multiplier +10%.
Dropped by duketater plants.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='+1% golden cookie gains and effect duration.
+1% golden cookie frequency.
+3% random drops.
Dropped by green rot plants.These are tastier than you\'d expect, but not by much.'; - - order=23000; - new Game.Upgrade('Fern tea','You gain +3% of your regular CpS while the game is closed (provided you have the Twin Gates of Transcendence heavenly upgrade).
Dropped by drowsyfern plants.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','You gain +7% of your regular CpS while the game is closed (provided you have the Twin Gates of Transcendence heavenly upgrade).
Sugar lumps mature 7 minutes sooner.
Dropped by ichorpuff plants.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='Cookie production multiplier +1%.
Dropped by baker\'s wheat plants.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('','
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,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,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,locked:1}); - - - - order=200;new Game.TieredUpgrade('Timeproof hair dyes','Grandmas are twice as efficient.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;new Game.TieredUpgrade('Barnstars','Farms are twice as efficient.Ah, yes. These help quite a bit. Somehow.','Farm',10); - order=400;new Game.TieredUpgrade('Mine canaries','Mines are twice as efficient.These aren\'t used for anything freaky! The miners just enjoy having a pet or two down there.','Mine',10); - order=500;new Game.TieredUpgrade('Brownie point system','Factories are twice as efficient.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;new Game.TieredUpgrade('Grand supercycles','Banks are twice as efficient.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;new Game.TieredUpgrade('Psalm-reading','Temples are twice as efficient.A theologically dubious and possibly blasphemous blend of fortune-telling and scripture studies.','Temple',10); - order=575;new Game.TieredUpgrade('Immobile spellcasting','Wizard towers are twice as efficient.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;new Game.TieredUpgrade('Restaurants at the end of the universe','Shipments are twice as efficient.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;new Game.TieredUpgrade('On second thought','Alchemy labs are twice as efficient.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;new Game.TieredUpgrade('Dimensional garbage gulper','Portals are twice as efficient.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;new Game.TieredUpgrade('Additional clock hands','Time machines are twice as efficient.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;new Game.TieredUpgrade('Baking Nobel prize','Antimatter condensers are twice as efficient.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;new Game.TieredUpgrade('Reverse theory of light','Prisms are twice as efficient.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;new Game.TieredUpgrade('Revised probabilistics','Chancemakers are twice as efficient.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','You gain more CpS the more milk you have.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','Mouse over a wrinkler to see how many cookies are in its stomach.Just a wrinkler and its will to survive.',99999999,[27,26]);Game.last.pool='prestige';Game.last.parents=['Wrinkly cookies']; - - new Game.Upgrade('Inspired checklist','Unlocks the Buy all feature, which lets you instantly purchase every upgrade in your store (starting from the cheapest one).
Hangin\' tough, stayin\' hungry.
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 IV']; - - 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,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','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.',999999,[28,29]);Game.last.pool='prestige';Game.last.parents=['Starter kitchen']; - - - - - order=200;new Game.TieredUpgrade('Good manners','Grandmas are twice as efficient.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;new Game.TieredUpgrade('Lindworms','Farms are twice as efficient.You have to import these from far up north, but they really help areate the soil!','Farm',11); - order=400;new Game.TieredUpgrade('Bore again','Mines are twice as efficient.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;new Game.TieredUpgrade('"Volunteer" interns','Factories are twice as efficient.If you\'re bad at something, always do it for free.','Factory',11); - order=525;new Game.TieredUpgrade('Rules of acquisition','Banks are twice as efficient.Rule 387 : a cookie baked is a cookie kept.','Bank',11); - order=550;new Game.TieredUpgrade('War of the gods','Temples are twice as efficient.An interesting game; the only winning move is not to pray.','Temple',11); - order=575;new Game.TieredUpgrade('Electricity','Wizard towers are twice as efficient.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;new Game.TieredUpgrade('Universal alphabet','Shipments are twice as efficient.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;new Game.TieredUpgrade('Public betterment','Alchemy labs are twice as efficient.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;new Game.TieredUpgrade('Embedded microportals','Portals are twice as efficient.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;new Game.TieredUpgrade('Nostalgia','Time machines are twice as efficient.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;new Game.TieredUpgrade('The definite molecule','Antimatter condensers are twice as efficient.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;new Game.TieredUpgrade('Light capture measures','Prisms are twice as efficient.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;new Game.TieredUpgrade('0-sided dice','Chancemakers are twice as efficient.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','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.Be excellent to each other.',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; - new Game.TieredUpgrade('Metabakeries','Fractal engines are twice as efficient.
And Patreon, dudes!They practically bake themselves!','Fractal engine',1); - new Game.TieredUpgrade('Mandelbrown sugar','Fractal engines are twice as efficient.A substance that displays useful properties such as fractal sweetness and instant contact lethality.','Fractal engine',2); - new Game.TieredUpgrade('Fractoids','Fractal engines are twice as efficient.Here\'s a frun fract : all in all, these were a terrible idea.','Fractal engine',3); - new Game.TieredUpgrade('Nested universe theory','Fractal engines are twice as efficient.Asserts that each subatomic particle is host to a whole new universe, and therefore, another limitless quantity of cookies.','Fractal engine',4); - new Game.TieredUpgrade('Menger sponge cake','Fractal engines are twice as efficient.
This somehow stacks with the theory of nanocosmics, because physics.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); - new Game.TieredUpgrade('One particularly good-humored cow','Fractal engines are twice as efficient.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); - new Game.TieredUpgrade('Chocolate ouroboros','Fractal engines are twice as efficient.Forever eating its own tail and digesting itself, in a metabolically dubious tale of delicious tragedy.','Fractal engine',7); - new Game.TieredUpgrade('Nested','Fractal engines are twice as efficient.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); - new Game.TieredUpgrade('Space-filling fibers','Fractal engines are twice as efficient.This special ingredient has the incredible ability to fill the local space perfectly, effectively eradicating hunger in those who consume it!','Fractal engine',9); - new Game.TieredUpgrade('Endless book of prose','Fractal engines are twice as efficient.','Fractal engine',10); - 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+'
Knowing that no hunger means no need for cookies, your marketers urge you to repurpose this product into next-level packing peanuts.'+(str.substr(i%str.length,n)+(i%str.length>(str.length-n)?str.substr(0,i%str.length-(str.length-n)):''))+''; - }; - new Game.TieredUpgrade('The set of all sets','Fractal engines are twice as efficient.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'); - 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!';} - }; - - - 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','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','Cookie production multiplier +5% permanently, and +1% for every building type level 10 or higher.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 'Current : +'+Beautify(n)+'%'+this.desc; - }; - new Game.Upgrade('Box of maybe cookies','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','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','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','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','Unlocks the shimmering veil, a switch that passively boosts your CpS by 50%.
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 24 hours of CpS to turn back on.Hands off!',999999999,[9,10]);Game.last.pool='prestige';Game.last.parents=['Distilled essence of redoubled luck']; - - order=40005; - var func=function(){ - var boost=50; - var resist=0; - if (Game.Has('Reinforced membrane')) {boost+=10;resist+=10;} - return (this.name=='Shimmering veil [on]'?'Active.':'')+'Boosts your cookie production by '+Beautify(boost)+'% 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 24 hours of unbuffed CpS.'+(resist>0?('
Has a '+Beautify(resist)+'% chance to not break.'):''); - }; - 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); - else if (context=='click') Math.seedrandom(Game.seed+'/'+Game.cookieClicks); - if (Math.random()<0.1) - { - Game.Notify('The reinforced membrane protects the shimmering veil.','',[7,10]); - Game.Win('Thick-skinned'); - return false; - } - Math.seedrandom(); - } - var me=Game.Upgrades['Shimmering veil [on]']; - me.bought=1; - //Game.Upgrades[me.toggleInto].bought=false; - Game.Lock(me.toggleInto); - Game.Unlock(me.toggleInto); - Game.Notify('The shimmering veil disappears...','',[9,10]); - Game.upgradesToRebuild=1; - Game.recalculateGains=1; - PlaySound('snd/spellFail.mp3',0.75); - } - - - var getCookiePrice=function(level){return 999999999999999999999999999999999999999*Math.pow(10,(level-1)/2);}; - - order=10020; - Game.NewUpgradeCookie({name:'Whoopie pies',desc:'Two chocolate halves joined together by a cream filling. It\'s got no eyebrows, but you never noticed until now.',icon:[21,31],power: 5,price: getCookiePrice(1)}); - Game.NewUpgradeCookie({name:'Caramel wafer biscuits',desc:'Coated in delicious chocolate. As many layers as you\'ll get in a biscuit without involving onions.',icon:[22,31],power: 5,price: getCookiePrice(2)}); - Game.NewUpgradeCookie({name:'Chocolate chip mocha cookies',desc:'Mocha started out as an excuse to smuggle chocolate into coffee. And now, in a poignant display of diplomacy and cultural exchange, it\'s bringing coffee to chocolate cookies.',icon:[23,31],power: 5,price: getCookiePrice(3)}); - Game.NewUpgradeCookie({name:'Earl Grey cookies',desc:'Captain Picard\'s favorite.',icon:[24,31],power: 5,price: getCookiePrice(4)}); - Game.NewUpgradeCookie({name:'Corn syrup cookies',desc:'The corn syrup makes it extra chewy. Not the type of stuff you\'d think to put in a cookie, but bakers make do.',icon:[25,31],power: 5,price: getCookiePrice(5)}); - Game.NewUpgradeCookie({name:'Icebox cookies',desc:'Can be prepared in a variety of shapes with a variety of ingredients. Made by freezing dough before baking it, mirroring a time-proven medieval torture practice. Gotta keep them guessing.',icon:[26,31],power: 5,price: getCookiePrice(6)}); - Game.NewUpgradeCookie({name:'Graham crackers',desc:'Inspired in their design by the wish to live a life of austere temperance, free from pleasure or cheer; it\'s no wonder these are so tasty.',icon:[27,31],power: 5,price: getCookiePrice(7)}); - Game.NewUpgradeCookie({name:'Hardtack',desc:'Extremely hard and, if we\'re being honest, extremely tack.
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','Prior to purchasing the Heavenly chip secret upgrade in a run, random drops are 5 times more common.Oh! A penny!',999999999*15,[8,10]);Game.last.pool='prestige';Game.last.parents=['Shimmering veil']; - new Game.Upgrade('Reinforced membrane','The shimmering veil is more resistant, and has a 10% chance not to break. It also gives +10% more CpS.
Oh! A priceless heirloom!
Oh! Another penny!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; - new Game.TieredUpgrade('The JavaScript console for dummies','Javascript consoles are twice as efficient.This should get you started. The first line reads: "To open the javascript console, press-"','Javascript console',1); - new Game.TieredUpgrade('64bit arrays','Javascript consoles are twice as efficient.
...the rest of the book is soaked in chocolate milk. If only there was a way to look up this sort of information...A long-form variable type to pack your cookies much more efficiently.','Javascript console',2); - new Game.TieredUpgrade('Stack overflow','Javascript consoles are twice as efficient.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); - new Game.TieredUpgrade('Enterprise compiler','Javascript consoles are twice as efficient.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); - new Game.TieredUpgrade('Syntactic sugar','Javascript consoles are twice as efficient.Tastier code for tastier cookies.','Javascript console',5); - new Game.TieredUpgrade('A nice cup of coffee','Javascript consoles are twice as efficient.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); - new Game.TieredUpgrade('Just-in-time baking','Javascript consoles are twice as efficient.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); - new Game.TieredUpgrade('cookies++','Javascript consoles are twice as efficient.Your very own cookie-themed programming language, elegantly named after its most interesting ability - increasing the "cookies" variable by 1.','Javascript console',8); - new Game.TieredUpgrade('Software updates','Javascript consoles are twice as efficient.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); - new Game.TieredUpgrade('Game.Loop','Javascript consoles are twice as efficient.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); - new Game.TieredUpgrade('eval()','Javascript consoles are twice as efficient.It is said that this simple function holds the key to the universe, and that whosoever masters it may shape reality to their will.','Javascript console',11); - - order=5000; - Game.SynergyUpgrade('Script grannies','
Good thing you have no idea how it works. Makes for a neat plaque on your wall, though.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'); - 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.'; - }; - - 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 judgement-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','You gain more CpS the more milk you have.
'+str+'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: 999999999999999999999999999999*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 candies.',icon:[30,10],require:'Box of not cookies', power:5,price: Math.pow(10,46)}); - - - order=19000; - new Game.TieredUpgrade('Fortune #001','Cursors are 7% more efficient and 7% cheaper.Fingers are not the only thing you can count on.','Cursor','fortune'); - new Game.TieredUpgrade('Fortune #002','Grandmas are 7% more efficient and 7% cheaper.A wrinkle is a crack in a mundane facade.','Grandma','fortune'); - new Game.TieredUpgrade('Fortune #003','Farms are 7% more efficient and 7% cheaper.The seeds of tomorrow already lie within the seeds of today.','Farm','fortune'); - new Game.TieredUpgrade('Fortune #004','Mines are 7% more efficient and 7% cheaper.Riches from deep under elevate you all the same.','Mine','fortune'); - new Game.TieredUpgrade('Fortune #005','Factories are 7% more efficient and 7% cheaper.True worth is not in what you find, but in what you make.','Factory','fortune'); - new Game.TieredUpgrade('Fortune #006','Banks are 7% more efficient and 7% cheaper.The value of money means nothing to a pocket.','Bank','fortune'); - new Game.TieredUpgrade('Fortune #007','Temples are 7% more efficient and 7% cheaper.Not all guides deserve worship.','Temple','fortune'); - new Game.TieredUpgrade('Fortune #008','Wizard towers are 7% more efficient and 7% cheaper.Magic is about two things - showmanship, and rabbits.','Wizard tower','fortune'); - new Game.TieredUpgrade('Fortune #009','Shipments are 7% more efficient and 7% cheaper.Every mile travelled expands the mind by just as much.','Shipment','fortune'); - new Game.TieredUpgrade('Fortune #010','Alchemy labs are 7% more efficient and 7% cheaper.Don\'t get used to yourself. You\'re gonna have to change.','Alchemy lab','fortune'); - new Game.TieredUpgrade('Fortune #011','Portals are 7% more efficient and 7% cheaper.Every doorway is a gamble. Tread with care.','Portal','fortune'); - new Game.TieredUpgrade('Fortune #012','Time machines are 7% more efficient and 7% cheaper.Do your future self a favor; they\'ll thank you for it.','Time machine','fortune'); - new Game.TieredUpgrade('Fortune #013','Antimatter condensers are 7% more efficient and 7% cheaper.The world is made of what we put into it.','Antimatter condenser','fortune'); - new Game.TieredUpgrade('Fortune #014','Prisms are 7% more efficient and 7% cheaper.Staring at a dazzling light can blind you back to darkness.','Prism','fortune'); - new Game.TieredUpgrade('Fortune #015','Chancemakers are 7% more efficient and 7% cheaper.Don\'t leave to blind chance what you could accomplish with deaf skill.','Chancemaker','fortune'); - new Game.TieredUpgrade('Fortune #016','Fractal engines are 7% more efficient and 7% cheaper.It\'s good to see yourself in others. Remember to see yourself in yourself, too.','Fractal engine','fortune'); - new Game.TieredUpgrade('Fortune #017','Javascript consoles are 7% more efficient and 7% cheaper.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','Upgrades and buildings cost -1%; you gain +1% CpS.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','You gain +7% CpS.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','You gain +1% of your regular CpS while the game is closed (provided you have the Twin Gates of Transcendence heavenly upgrade).Help, I\'m trapped in a 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','You gain more CpS the more milk you have.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.priceFunc=function(me){return Math.min(me.basePrice,Game.unbuffedCps*60*60*24);} - new Game.Upgrade('Fortune #104','Clicking gains +1% of your CpS.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','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']; - - - //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'} - }; - - Game.listTinyOwnedUpgrades=function(arr) - { - var str=''; - for (var i=0;i'; - } - } - return str; - } - - Game.santaDrops=['Increased merriness','Improved jolliness','A lump of coal','An itchy sweater','Reindeer baking grounds','Weighted sleighs','Ho ho ho-flavored frosting','Season savings','Toy workshop','Naughty list','Santa\'s bottomless bag','Santa\'s helpers','Santa\'s legacy','Santa\'s milk and cookies']; - - Game.GetHowManySantaDrops=function() - { - var num=0; - for (var i in Game.santaDrops) {if (Game.Has(Game.santaDrops[i])) num++;} - return num; - } - - Game.reindeerDrops=['Christmas tree biscuits','Snowflake biscuits','Snowman biscuits','Holly biscuits','Candy cane biscuits','Bell biscuits','Present biscuits']; - Game.GetHowManyReindeerDrops=function() - { - var num=0; - for (var i in Game.reindeerDrops) {if (Game.Has(Game.reindeerDrops[i])) num++;} - return num; - } - /*for (var i in Game.santaDrops) - { - Game.Upgrades[Game.santaDrops[i]].descFunc=function(){return ' You currently own '+Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length+' of Santa\'s gifts.'+this.desc;}; - }*/ - - Game.seasonDrops=Game.heartDrops.concat(Game.halloweenDrops).concat(Game.easterEggs).concat(Game.santaDrops).concat(Game.reindeerDrops); - - Game.saySeasonSwitchUses=function() - { - if (Game.seasonUses==0) return 'You haven\'t switched seasons this ascension yet.'; - return 'You\'ve switched seasons '+(Game.seasonUses==1?'once':Game.seasonUses==2?'twice':(Game.seasonUses+' times'))+' this ascension.'; - } - Game.Upgrades['Festive biscuit'].descFunc=function(){return ''+Game.listTinyOwnedUpgrades(Game.santaDrops)+''+this.desc;}; - Game.Upgrades['Bunny biscuit'].descFunc=function(){return '
You\'ve purchased '+Game.GetHowManySantaDrops()+'/'+Game.santaDrops.length+' of Santa\'s gifts.'+Game.listTinyOwnedUpgrades(Game.reindeerDrops)+'
You\'ve purchased '+Game.GetHowManyReindeerDrops()+'/'+Game.reindeerDrops.length+' reindeer cookies.'+Game.saySeasonSwitchUses()+''+Game.listTinyOwnedUpgrades(Game.easterEggs)+''+this.desc;}; - Game.Upgrades['Ghostly biscuit'].descFunc=function(){return '
You\'ve purchased '+Game.GetHowManyEggs()+'/'+Game.easterEggs.length+' eggs.'+Game.saySeasonSwitchUses()+''+Game.listTinyOwnedUpgrades(Game.halloweenDrops)+''+this.desc;}; - Game.Upgrades['Lovesick biscuit'].descFunc=function(){return '
You\'ve purchased '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.'+Game.saySeasonSwitchUses()+''+Game.listTinyOwnedUpgrades(Game.heartDrops)+''+this.desc;}; - Game.Upgrades['Fool\'s biscuit'].descFunc=function(){return '
You\'ve purchased '+Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length+' heart biscuits.'+Game.saySeasonSwitchUses()+''+Game.saySeasonSwitchUses()+''+this.desc;}; - - 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) - { - var str=Game.seasons[Game.season].over+''; - if (Game.prefs.popups) Game.Popup(str); - else Game.Notify(str,'',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(); - var str=Game.seasons[this.season].start+''; - if (Game.prefs.popups) Game.Popup(str); - else Game.Notify(str,'',this.icon,4); - } - - me.clickFunction=function(me){return function() - { - //undo season - if (me.bought && Game.season && me==Game.seasons[Game.season].triggerUpgrade) - { - me.lose(); - var str=Game.seasons[Game.season].over; - if (Game.prefs.popups) Game.Popup(str); - else Game.Notify(str,'',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 'Time remaining :';} - 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=[]; - 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]); - } - - 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]); - 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']; - Game.Upgrades[i].parents=Game.Upgrades[i].parents||[-1]; - for (var ii in Game.Upgrades[i].parents) {if (Game.Upgrades[i].parents[ii]!=-1) 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:[176,-66],181:[-555,-93],253:[-272,-231],254:[-99,-294],255:[-193,-279],264:[48,123],265:[133,154],266:[223,166],267:[305,137],268:[382,85],269:[-640,42],270:[-614,-268],271:[-728,-120],272:[-688,-205],273:[-711,-31],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:[-265,212],283:[-321,297],284:[-322,406],285:[-243,501],286:[-403,501],287:[-314,606],288:[-312,-374],289:[-375,-502],290:[-206,-476],291:[453,-745],292:[-375,-651],293:[-399,-794],323:[-86,120],325:[192,-1127],326:[-328,-158],327:[-192,290],328:[-3,237],329:[92,376],353:[121,-326],354:[77,-436],355:[64,-548],356:[57,-673],357:[52,-793],358:[58,-924],359:[82,-1043],360:[-188,408],362:[158,289],363:[-30,-30],364:[-232,-730],365:[-77,349],368:[-82,-532],393:[196,-714],394:[197,-964],395:[-143,-140],396:[-264,-889],397:[-69,563],408:[-204,-1036],409:[-72,-1152],410:[-70,-1328],411:[-388,137],412:[-470,253],413:[-482,389],449:[-367,-1113],450:[-334,-1214],451:[-278,-1303],495:[-402,-966],496:[200,49],505:[-545,-570],520:[-279,-8],537:[-907,-131],539:[-508,-1270],540:[-629,-1291],541:[-594,-1186],542:[-548,-1374],561:[300,-17],562:[52,646],591:[154,744],592:[180,608],643:[-121,710],}; - - 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.desc=desc; - this.baseDesc=this.desc; - this.desc=BeautifyInText(this.baseDesc); - 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.Win=function(what) - { - if (typeof what==='string') - { - if (Game.Achievements[what]) - { - if (Game.Achievements[what].won==0) - { - var name=Game.Achievements[what].shortName?Game.Achievements[what].shortName:Game.Achievements[what].name; - Game.Achievements[what].won=1; - if (Game.prefs.popups) Game.Popup('Achievement unlocked :
'+(Game.Has('Eternal seasons')?'forever':Game.sayTime(Game.seasonT,-1))+'(Click again to cancel season)
'+name); - else Game.Notify('Achievement unlocked',''+name+'',Game.Achievements[what].icon); - if (Game.CountsAsAchievementOwned(Game.Achievements[what].pool)) Game.AchievementsOwned++; - Game.recalculateGains=1; - } - } - } - 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,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,'Make '+Beautify(pow)+' cookies just from '+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]; - Game.BankAchievements=[]; - Game.BankAchievement=function(name) - { - 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,'Bake '+Beautify(threshold)+' cookie'+(threshold==1?'':'s')+' in one ascension.',[Game.thresholdIcons[Game.BankAchievements.length],(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) - { - 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,'Bake '+Beautify(threshold)+' cookie'+(threshold==1?'':'s')+' per second.',[Game.thresholdIcons[Game.CpsAchievements.length],(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','Ascend with 1 million cookies baked.Easy come, easy go.',[11,6]); - new Game.Achievement('Oblivion','Ascend with 1 billion cookies baked.Back to square one.',[11,6]); - new Game.Achievement('From scratch','Ascend with 1 trillion cookies baked.It\'s been fun.',[11,6]); - - order=11010; - new Game.Achievement('Neverclick','Make 1 million cookies by only having clicked 15 times.',[12,0]);//Game.last.pool='shadow'; - order=1000; - new Game.Achievement('Clicktastic','Make 1,000 cookies from clicking.',[11,0]); - new Game.Achievement('Clickathlon','Make 100,000 cookies from clicking.',[11,1]); - new Game.Achievement('Clickolympics','Make 10,000,000 cookies from clicking.',[11,2]); - new Game.Achievement('Clickorama','Make 1,000,000,000 cookies from clicking.',[11,13]); - - order=1050; - new Game.Achievement('Click','Have 1 cursor.',[0,0]); - new Game.Achievement('Double-click','Have 2 cursors.',[0,6]); - new Game.Achievement('Mouse wheel','Have 50 cursors.',[1,6]); - new Game.Achievement('Of Mice and Men','Have 100 cursors.',[0,1]); - new Game.Achievement('The Digital','Have 200 cursors.',[0,2]); - - order=1100; - new Game.Achievement('Just wrong','Sell a grandma.I thought you loved me.',[10,9]); - Game.TieredAchievement('Grandma\'s cookies','Have 1 grandma.','Grandma',1); - Game.TieredAchievement('Sloppy kisses','Have 50 grandmas.','Grandma',2); - Game.TieredAchievement('Retirement home','Have 100 grandmas.','Grandma',3); - - order=1200; - Game.TieredAchievement('My first farm','Have 1 farm.','Farm',1); - Game.TieredAchievement('Reap what you sow','Have 50 farms.','Farm',2); - Game.TieredAchievement('Farm ill','Have 100 farms.','Farm',3); - - order=1400; - Game.TieredAchievement('Production chain','Have 1 factory.','Factory',1); - Game.TieredAchievement('Industrial revolution','Have 50 factories.','Factory',2); - Game.TieredAchievement('Global warming','Have 100 factories.','Factory',3); - - order=1300; - Game.TieredAchievement('You know the drill','Have 1 mine.','Mine',1); - Game.TieredAchievement('Excavation site','Have 50 mines.','Mine',2); - Game.TieredAchievement('Hollow the planet','Have 100 mines.','Mine',3); - - order=1500; - Game.TieredAchievement('Expedition','Have 1 shipment.','Shipment',1); - Game.TieredAchievement('Galactic highway','Have 50 shipments.','Shipment',2); - Game.TieredAchievement('Far far away','Have 100 shipments.','Shipment',3); - - order=1600; - Game.TieredAchievement('Transmutation','Have 1 alchemy lab.','Alchemy lab',1); - Game.TieredAchievement('Transmogrification','Have 50 alchemy labs.','Alchemy lab',2); - Game.TieredAchievement('Gold member','Have 100 alchemy labs.','Alchemy lab',3); - - order=1700; - Game.TieredAchievement('A whole new world','Have 1 portal.','Portal',1); - Game.TieredAchievement('Now you\'re thinking','Have 50 portals.','Portal',2); - Game.TieredAchievement('Dimensional shift','Have 100 portals.','Portal',3); - - order=1800; - Game.TieredAchievement('Time warp','Have 1 time machine.','Time machine',1); - Game.TieredAchievement('Alternate timeline','Have 50 time machines.','Time machine',2); - Game.TieredAchievement('Rewriting history','Have 100 time machines.','Time machine',3); - - - order=7000; - new Game.Achievement('One with everything','Have at least 1 of every building.',[2,7]); - new Game.Achievement('Mathematician','Have at least 1 of the most expensive object, 2 of the second-most expensive, 4 of the next and so on (capped at 128).',[23,12]); - new Game.Achievement('Base 10','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','Click a golden cookie.',[10,14]); - new Game.Achievement('Lucky cookie','Click 7 golden cookies.',[22,6]); - new Game.Achievement('A stroke of luck','Click 27 golden cookies.',[23,6]); - - order=30200; - new Game.Achievement('Cheated cookies taste awful','Hack in some cookies.',[10,6]);Game.last.pool='shadow'; - order=11010; - new Game.Achievement('Uncanny clicker','Click really, really fast.Well I\'ll be!',[12,0]); - - order=5000; - new Game.Achievement('Builder','Own 100 buildings.',[2,6]); - new Game.Achievement('Architect','Own 500 buildings.',[3,6]); - order=6000; - new Game.Achievement('Enhancer','Purchase 20 upgrades.',[9,0]); - new Game.Achievement('Augmenter','Purchase 50 upgrades.',[9,1]); - - order=11000; - new Game.Achievement('Cookie-dunker','Dunk the cookie.You did it!',[1,8]); - - order=10000; - new Game.Achievement('Fortune','Click 77 golden cookies.You should really go to bed.',[24,6]); - order=31000; - new Game.Achievement('True Neverclick','Make 1 million cookies with no cookie clicks.This kinda defeats the whole purpose, doesn\'t it?',[12,0]);Game.last.pool='shadow'; - - order=20000; - new Game.Achievement('Elder nap','Appease the grandmatriarchs at least once.we',[8,9]); - new Game.Achievement('Elder slumber','Appease the grandmatriarchs at least 5 times.
are
eternalour mind',[8,9]); - - order=1150; - new Game.Achievement('Elder','Own at least 7 grandma types.',[10,9]); - - order=20000; - new Game.Achievement('Elder calm','Declare a covenant with the grandmatriarchs.
outlives
the universewe',[8,9]); - - order=5000; - new Game.Achievement('Engineer','Own 1000 buildings.',[4,6]); - - order=10000; - new Game.Achievement('Leprechaun','Click 777 golden cookies.',[25,6]); - new Game.Achievement('Black cat\'s paw','Click 7777 golden cookies.',[26,6]); - - order=30050; - new Game.Achievement('Nihilism','Ascend with 1 quadrillion cookies baked.
have
fedThere are many things',[11,7]); - - order=1900; - Game.TieredAchievement('Antibatter','Have 1 antimatter condenser.','Antimatter condenser',1); - Game.TieredAchievement('Quirky quarks','Have 50 antimatter condensers.','Antimatter condenser',2); - Game.TieredAchievement('It does matter!','Have 100 antimatter condensers.','Antimatter condenser',3); - - order=6000; - new Game.Achievement('Upgrader','Purchase 100 upgrades.',[9,2]); - - order=7000; - new Game.Achievement('Centennial','Have at least 100 of everything.',[6,6]); - - order=30500; - new Game.Achievement('Hardcore','Get to 1 billion cookies baked with no upgrades purchased.',[12,6]);//Game.last.pool='shadow'; - - order=30600; - new Game.Achievement('Speed baking I','Get to 1 million cookies baked in 35 minutes.',[12,5]);Game.last.pool='shadow'; - new Game.Achievement('Speed baking II','Get to 1 million cookies baked in 25 minutes.',[13,5]);Game.last.pool='shadow'; - new Game.Achievement('Speed baking III','Get to 1 million cookies baked in 15 minutes.',[14,5]);Game.last.pool='shadow'; - - - order=61000; - var achiev=new Game.Achievement('Getting even with the oven','Defeat the Sentient Furnace in the factory dungeons.',[12,7]);Game.last.pool='dungeon'; - var achiev=new Game.Achievement('Now this is pod-smashing','Defeat the Ascended Baking Pod in the factory dungeons.',[12,7]);Game.last.pool='dungeon'; - var achiev=new Game.Achievement('Chirped out','Find and defeat Chirpy, the dysfunctionning alarm bot.',[13,7]);Game.last.pool='dungeon'; - var achiev=new Game.Achievement('Follow the white rabbit','Find and defeat the elusive sugar bunny.',[14,7]);Game.last.pool='dungeon'; - - order=1000; - new Game.Achievement('Clickasmic','Make 100,000,000,000 cookies from clicking.',[11,14]); - - order=1100; - Game.TieredAchievement('Friend of the ancients','Have 150 grandmas.','Grandma',4); - Game.TieredAchievement('Ruler of the ancients','Have 200 grandmas.','Grandma',5); - - order=32000; - new Game.Achievement('Wholesome','Unlock 100% of your heavenly chips power.',[15,7]); - - order=33000; - new Game.Achievement('Just plain lucky','You have 1 chance in 500,000 every second of earning this achievement.',[15,6]);Game.last.pool='shadow'; - - order=21000; - new Game.Achievement('Itchscratcher','Burst 1 wrinkler.',[19,8]); - new Game.Achievement('Wrinklesquisher','Burst 50 wrinklers.',[19,8]); - new Game.Achievement('Moistburster','Burst 200 wrinklers.',[19,8]); - - order=22000; - new Game.Achievement('Spooky cookies','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','Reach Santa\'s 7th form.',[18,9]); - new Game.Achievement('All hail Santa','Reach Santa\'s final form.',[19,10]); - new Game.Achievement('Let it snow','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','Pop 1 reindeer.',[12,9]); - new Game.Achievement('Sleigh of hand','Pop 50 reindeer.',[12,9]); - new Game.Achievement('Reindeer sleigher','Pop 200 reindeer.',[12,9]); - - order=1200; - Game.TieredAchievement('Perfected agriculture','Have 150 farms.','Farm',4); - order=1400; - Game.TieredAchievement('Ultimate automation','Have 150 factories.','Factory',4); - order=1300; - Game.TieredAchievement('Can you dig it','Have 150 mines.','Mine',4); - order=1500; - Game.TieredAchievement('Type II civilization','Have 150 shipments.','Shipment',4); - order=1600; - Game.TieredAchievement('Gild wars','Have 150 alchemy labs.','Alchemy lab',4); - order=1700; - Game.TieredAchievement('Brain-split','Have 150 portals.','Portal',4); - order=1800; - Game.TieredAchievement('Time duke','Have 150 time machines.','Time machine',4); - order=1900; - Game.TieredAchievement('Molecular maestro','Have 150 antimatter condensers.','Antimatter condenser',4); - - order=2000; - Game.TieredAchievement('Lone photon','Have 1 prism.','Prism',1); - Game.TieredAchievement('Dazzling glimmer','Have 50 prisms.','Prism',2); - Game.TieredAchievement('Blinding flash','Have 100 prisms.','Prism',3); - Game.TieredAchievement('Unending glow','Have 150 prisms.','Prism',4); - - order=5000; - new Game.Achievement('Lord of Constructs','Own 2000 buildings.
that need to be erasedHe 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','Purchase 200 upgrades.One can always do better. But should you?',[9,14]); - order=7002; - new Game.Achievement('Bicentennial','Have at least 200 of everything.You crazy person.',[8,6]); - - order=22300; - new Game.Achievement('Lovely cookies','Unlock every Valentine-themed cookie.',[20,3]); - - order=7001; - new Game.Achievement('Centennial and a half','Have at least 150 of everything.',[7,6]); - - order=11000; - new Game.Achievement('Tiny cookie','Click the tiny cookie.These aren\'t the cookies',[0,5]); - - order=400000; - new Game.Achievement('You win a cookie','This is for baking 10 trillion cookies and making it on the local news.
you\'re clicking for.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','Make 10,000,000,000,000 cookies from clicking.',[11,15]); - new Game.Achievement('Clicknarok','Make 1,000,000,000,000,000 cookies from clicking.',[11,16]); - - order=1050; - new Game.Achievement('Extreme polydactyly','Have 300 cursors.',[0,13]); - new Game.Achievement('Dr. T','Have 400 cursors.',[0,14]); - - order=1100;Game.TieredAchievement('The old never bothered me anyway','Have 250 grandmas.','Grandma',6); - order=1200;Game.TieredAchievement('Homegrown','Have 200 farms.','Farm',5); - order=1400;Game.TieredAchievement('Technocracy','Have 200 factories.','Factory',5); - order=1300;Game.TieredAchievement('The center of the Earth','Have 200 mines.','Mine',5); - order=1500;Game.TieredAchievement('We come in peace','Have 200 shipments.','Shipment',5); - order=1600;Game.TieredAchievement('The secrets of the universe','Have 200 alchemy labs.','Alchemy lab',5); - order=1700;Game.TieredAchievement('Realm of the Mad God','Have 200 portals.','Portal',5); - order=1800;Game.TieredAchievement('Forever and ever','Have 200 time machines.','Time machine',5); - order=1900;Game.TieredAchievement('Walk the planck','Have 200 antimatter condensers.','Antimatter condenser',5); - order=2000;Game.TieredAchievement('Rise and shine','Have 200 prisms.','Prism',5); - - order=30200; - new Game.Achievement('God complex','Name yourself Orteil.Note : usurpers incur a -1% CpS penalty until they rename themselves something else.But that\'s not you, is it?',[17,5]);Game.last.pool='shadow'; - new Game.Achievement('Third-party','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','Ascend with 1 quintillion cookies baked.Presto!',[11,7]); - new Game.Achievement('Nil zero zilch','Ascend with 1 sextillion cookies baked.
...where\'d the cookies go?To summarize : really not very much at all.',[11,7]); - new Game.Achievement('Transcendence','Ascend with 1 septillion cookies baked.Your cookies are now on a higher plane of being.',[11,8]); - new Game.Achievement('Obliterate','Ascend with 1 octillion cookies baked.Resistance is futile, albeit entertaining.',[11,8]); - new Game.Achievement('Negative void','Ascend with 1 nonillion cookies baked.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','Unlock 1 egg.',[1,12]); - new Game.Achievement('Egging on','Unlock 7 eggs.',[4,12]); - new Game.Achievement('Mass Easteria','Unlock 14 eggs.',[7,12]); - new Game.Achievement('Hide & seek champion','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','Give your bakery a name.',[15,9]); - - - order=1425; - Game.TieredAchievement('Pretty penny','Have 1 bank.','Bank',1); - Game.TieredAchievement('Fit the bill','Have 50 banks.','Bank',2); - Game.TieredAchievement('A loan in the dark','Have 100 banks.','Bank',3); - Game.TieredAchievement('Need for greed','Have 150 banks.','Bank',4); - Game.TieredAchievement('It\'s the economy, stupid','Have 200 banks.','Bank',5); - order=1450; - Game.TieredAchievement('Your time to shrine','Have 1 temple.','Temple',1); - Game.TieredAchievement('Shady sect','Have 50 temples.','Temple',2); - Game.TieredAchievement('New-age cult','Have 100 temples.','Temple',3); - Game.TieredAchievement('Organized religion','Have 150 temples.','Temple',4); - Game.TieredAchievement('Fanaticism','Have 200 temples.','Temple',5); - order=1475; - Game.TieredAchievement('Bewitched','Have 1 wizard tower.','Wizard tower',1); - Game.TieredAchievement('The sorcerer\'s apprentice','Have 50 wizard towers.','Wizard tower',2); - Game.TieredAchievement('Charms and enchantments','Have 100 wizard towers.','Wizard tower',3); - Game.TieredAchievement('Curses and maledictions','Have 150 wizard towers.','Wizard tower',4); - Game.TieredAchievement('Magic kingdom','Have 200 wizard towers.','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','Ascend at least once.',[21,6]); - - order=11000; - new Game.Achievement('Here you go','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','Ascend 10 times.',[21,6]); - new Game.Achievement('Reincarnation','Ascend 100 times.',[21,6]); - new Game.Achievement('Endless cycle','Ascend 1000 times.Oh hey, it\'s you again.',[2,7]);Game.last.pool='shadow'; - - - - order=1100; - Game.TieredAchievement('The agemaster','Have 300 grandmas.','Grandma',7); - Game.TieredAchievement('To oldly go','Have 350 grandmas.','Grandma',8); - - order=1200;Game.TieredAchievement('Gardener extraordinaire','Have 250 farms.','Farm',6); - order=1300;Game.TieredAchievement('Tectonic ambassador','Have 250 mines.','Mine',6); - order=1400;Game.TieredAchievement('Rise of the machines','Have 250 factories.','Factory',6); - order=1425;Game.TieredAchievement('Acquire currency','Have 250 banks.','Bank',6); - order=1450;Game.TieredAchievement('Zealotry','Have 250 temples.','Temple',6); - order=1475;Game.TieredAchievement('The wizarding world','Have 250 wizard towers.','Wizard tower',6); - order=1500;Game.TieredAchievement('Parsec-masher','Have 250 shipments.','Shipment',6); - order=1600;Game.TieredAchievement('The work of a lifetime','Have 250 alchemy labs.','Alchemy lab',6); - order=1700;Game.TieredAchievement('A place lost in time','Have 250 portals.','Portal',6); - order=1800;Game.TieredAchievement('Heat death','Have 250 time machines.','Time machine',6); - order=1900;Game.TieredAchievement('Microcosm','Have 250 antimatter condensers.','Antimatter condenser',6); - order=2000;Game.TieredAchievement('Bright future','Have 250 prisms.','Prism',6); - - order=25000; - new Game.Achievement('Here be dragon','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');Game.last.baseDesc+='The milk must flow!';Game.last.desc=BeautifyInText(Game.last.baseDesc); - 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');Game.last.baseDesc+='A cookie is just what we tell each other it is.';Game.last.desc=BeautifyInText(Game.last.baseDesc); - 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');Game.last.baseDesc+='Tastier than a hertz donut, anyway.';Game.last.desc=BeautifyInText(Game.last.baseDesc); - Game.CpsAchievement('Woops, you solved world hunger'); - Game.CpsAchievement('Turbopuns');Game.last.baseDesc+='Mother Nature will be like "slowwwww dowwwwwn".';Game.last.desc=BeautifyInText(Game.last.baseDesc); - 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');Game.last.baseDesc+='Wow!';Game.last.desc=BeautifyInText(Game.last.baseDesc); - - order=7002; - new Game.Achievement('Bicentennial and a half','Have at least 250 of everything.Keep on truckin\'.',[9,6]); - - order=11000; - new Game.Achievement('Tabloid addiction','Click on the news ticker 50 times.Page 6 : Mad individual clicks on picture of pastry in a futile attempt to escape boredom!',[27,7]); - - order=1000; - new Game.Achievement('Clickastrophe','Make 100,000,000,000,000,000 cookies from clicking.',[11,17]); - new Game.Achievement('Clickataclysm','Make 10,000,000,000,000,000,000 cookies from clicking.',[11,18]); - - order=1050; - new Game.Achievement('Thumbs, phalanges, metacarpals','Have 500 cursors.
Also page 6 : British parliament ate my baby!& KNUCKLES',[0,15]); - - order=6000; - new Game.Achievement('Polymath','Own 300 upgrades and 3000 buildings.Excellence doesn\'t happen overnight - it usually takes a good couple days.',[29,7]); - - order=6005; - new Game.Achievement('The elder scrolls','Own a combined 777 grandmas and cursors.Let me guess. Someone stole your cookie.',[10,9]); - - order=30050; - new Game.Achievement('To crumbs, you say?','Ascend with 1 decillion cookies baked.Very well then.',[29,6]); - - order=1200;Game.TieredAchievement('Seedy business','Have 300 farms.','Farm',7); - order=1300;Game.TieredAchievement('Freak fracking','Have 300 mines.','Mine',7); - order=1400;Game.TieredAchievement('Modern times','Have 300 factories.','Factory',7); - order=1425;Game.TieredAchievement('The nerve of war','Have 300 banks.','Bank',7); - order=1450;Game.TieredAchievement('Wololo','Have 300 temples.','Temple',7); - order=1475;Game.TieredAchievement('And now for my next trick, I\'ll need a volunteer from the audience','Have 300 wizard towers.','Wizard tower',7); - order=1500;Game.TieredAchievement('It\'s not delivery','Have 300 shipments.','Shipment',7); - order=1600;Game.TieredAchievement('Gold, Jerry! Gold!','Have 300 alchemy labs.','Alchemy lab',7); - order=1700;Game.TieredAchievement('Forbidden zone','Have 300 portals.','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','Have 300 time machines.','Time machine',7); - order=1900;Game.TieredAchievement('Scientists baffled everywhere','Have 300 antimatter condensers.','Antimatter condenser',7); - order=2000;Game.TieredAchievement('Harmony of the spheres','Have 300 prisms.','Prism',7); - - order=35000; - new Game.Achievement('Last Chance to See','Burst the near-extinct shiny wrinkler.You monster!',[24,12]);Game.last.pool='shadow'; - - order=10000; - new Game.Achievement('Early bird','Click a golden cookie less than 1 second after it spawns.',[10,14]); - new Game.Achievement('Fading luck','Click a golden cookie less than 1 second before it dies.',[10,14]); - - order=22100; - new Game.Achievement('Eldeer','Pop a reindeer during an elder frenzy.',[12,9]); - - order=21100; - new Game.Achievement('Dude, sweet','Harvest 7 coalescing sugar lumps.',[24,14]); - new Game.Achievement('Sugar rush','Harvest 30 coalescing sugar lumps.',[26,14]); - new Game.Achievement('Year\'s worth of cavities','Harvest 365 coalescing sugar lumps.My lumps my lumps my lumps.',[29,14]); - new Game.Achievement('Hand-picked','Successfully harvest a coalescing sugar lump before it\'s ripe.',[28,14]); - new Game.Achievement('Sugar sugar','Harvest a bifurcated sugar lump.',[29,15]); - new Game.Achievement('All-natural cane sugar','Harvest a golden sugar lump.',[29,16]);Game.last.pool='shadow'; - new Game.Achievement('Sweetmeats','Harvest a meaty sugar lump.',[29,17]); - - order=7002; - new Game.Achievement('Tricentennial','Have at least 300 of everything.Can\'t stop, won\'t stop. Probably should stop, though.',[29,12]); - - Game.CpsAchievement('Knead for speed');Game.last.baseDesc+='How did we not make that one yet?';Game.last.desc=BeautifyInText(Game.last.baseDesc); - Game.CpsAchievement('Well the cookies start coming and they don\'t stop coming');Game.last.baseDesc+='Didn\'t make sense not to click for fun.';Game.last.desc=BeautifyInText(Game.last.baseDesc); - 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');Game.last.baseDesc+='How can you have any cookies if you don\'t bake your dough?';Game.last.desc=BeautifyInText(Game.last.baseDesc); - 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','Have 350 farms.','Farm',8); - order=1300;Game.TieredAchievement('Romancing the stone','Have 350 mines.','Mine',8); - order=1400;Game.TieredAchievement('Ex machina','Have 350 factories.','Factory',8); - order=1425;Game.TieredAchievement('And I need it now','Have 350 banks.','Bank',8); - order=1450;Game.TieredAchievement('Pray on the weak','Have 350 temples.','Temple',8); - order=1475;Game.TieredAchievement('It\'s a kind of magic','Have 350 wizard towers.','Wizard tower',8); - order=1500;Game.TieredAchievement('Make it so','Have 350 shipments.','Shipment',8); - order=1600;Game.TieredAchievement('All that glitters is gold','Have 350 alchemy labs.','Alchemy lab',8); - order=1700;Game.TieredAchievement('H̸̷͓̳̳̯̟͕̟͍͍̣͡ḛ̢̦̰̺̮̝͖͖̘̪͉͘͡ ̠̦͕̤̪̝̥̰̠̫̖̣͙̬͘ͅC̨̦̺̩̲̥͉̭͚̜̻̝̣̼͙̮̯̪o̴̡͇̘͎̞̲͇̦̲͞͡m̸̩̺̝̣̹̱͚̬̥̫̳̼̞̘̯͘ͅẹ͇̺̜́̕͢s̶̙̟̱̥̮̯̰̦͓͇͖͖̝͘͘͞','Have 350 portals.','Portal',8); - order=1800;Game.TieredAchievement('Way back then','Have 350 time machines.','Time machine',8); - order=1900;Game.TieredAchievement('Exotic matter','Have 350 antimatter condensers.','Antimatter condenser',8); - order=2000;Game.TieredAchievement('At the end of the tunnel','Have 350 prisms.','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','Reach level 10 cursors.',[0,26]);Game.Objects['Cursor'].levelAchiev10=Game.last; - order=1120; - new Game.Achievement('Methuselah','Reach level 10 grandmas.',[1,26]);Game.Objects['Grandma'].levelAchiev10=Game.last; - order=1220; - new Game.Achievement('Huge tracts of land','Reach level 10 farms.',[2,26]);Game.Objects['Farm'].levelAchiev10=Game.last; - order=1320; - new Game.Achievement('D-d-d-d-deeper','Reach level 10 mines.',[3,26]);Game.Objects['Mine'].levelAchiev10=Game.last; - order=1420; - new Game.Achievement('Patently genius','Reach level 10 factories.',[4,26]);Game.Objects['Factory'].levelAchiev10=Game.last; - order=1445; - new Game.Achievement('A capital idea','Reach level 10 banks.',[15,26]);Game.Objects['Bank'].levelAchiev10=Game.last; - order=1470; - new Game.Achievement('It belongs in a bakery','Reach level 10 temples.',[16,26]);Game.Objects['Temple'].levelAchiev10=Game.last; - order=1495; - new Game.Achievement('Motormouth','Reach level 10 wizard towers.',[17,26]);Game.Objects['Wizard tower'].levelAchiev10=Game.last; - order=1520; - new Game.Achievement('Been there done that','Reach level 10 shipments.',[5,26]);Game.Objects['Shipment'].levelAchiev10=Game.last; - order=1620; - new Game.Achievement('Phlogisticated substances','Reach level 10 alchemy labs.',[6,26]);Game.Objects['Alchemy lab'].levelAchiev10=Game.last; - order=1720; - new Game.Achievement('Bizarro world','Reach level 10 portals.',[7,26]);Game.Objects['Portal'].levelAchiev10=Game.last; - order=1820; - new Game.Achievement('The long now','Reach level 10 time machines.',[8,26]);Game.Objects['Time machine'].levelAchiev10=Game.last; - order=1920; - new Game.Achievement('Chubby hadrons','Reach level 10 antimatter condensers.',[13,26]);Game.Objects['Antimatter condenser'].levelAchiev10=Game.last; - order=2020; - new Game.Achievement('Palettable','Reach level 10 prisms.',[14,26]);Game.Objects['Prism'].levelAchiev10=Game.last; - - order=61470; - order=61495; - new Game.Achievement('Bibbidi-bobbidi-boo','Cast 9 spells.',[21,11]); - new Game.Achievement('I\'m the wiz','Cast 99 spells.',[22,11]); - new Game.Achievement('A wizard is you','Cast 999 spells.I\'m a what?',[29,11]); - - order=10000; - new Game.Achievement('Four-leaf cookie','Have 4 golden cookies simultaneously.Fairly rare, considering cookies don\'t even have leaves.',[27,6]);Game.last.pool='shadow'; - - order=2100; - Game.TieredAchievement('Lucked out','Have 1 chancemaker.','Chancemaker',1); - Game.TieredAchievement('What are the odds','Have 50 chancemakers.','Chancemaker',2); - Game.TieredAchievement('Grandma needs a new pair of shoes','Have 100 chancemakers.','Chancemaker',3); - Game.TieredAchievement('Million to one shot, doc','Have 150 chancemakers.','Chancemaker',4); - Game.TieredAchievement('As luck would have it','Have 200 chancemakers.','Chancemaker',5); - Game.TieredAchievement('Ever in your favor','Have 250 chancemakers.','Chancemaker',6); - Game.TieredAchievement('Be a lady','Have 300 chancemakers.','Chancemaker',7); - Game.TieredAchievement('Dicey business','Have 350 chancemakers.','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','Reach level 10 chancemakers.',[19,26]);Game.Objects['Chancemaker'].levelAchiev10=Game.last; - - order=1000; - new Game.Achievement('The ultimate clickdown','Make 1,000,000,000,000,000,000,000 cookies from clicking.(of ultimate destiny.)',[11,19]); - - - order=1100; - Game.TieredAchievement('Aged well','Have 400 grandmas.','Grandma',9); - Game.TieredAchievement('101st birthday','Have 450 grandmas.','Grandma',10); - Game.TieredAchievement('Defense of the ancients','Have 500 grandmas.','Grandma',11); - order=1200;Game.TieredAchievement('Harvest moon','Have 400 farms.','Farm',9); - order=1300;Game.TieredAchievement('Mine?','Have 400 mines.','Mine',9); - order=1400;Game.TieredAchievement('In full gear','Have 400 factories.','Factory',9); - order=1425;Game.TieredAchievement('Treacle tart economics','Have 400 banks.','Bank',9); - order=1450;Game.TieredAchievement('Holy cookies, grandma!','Have 400 temples.','Temple',9); - order=1475;Game.TieredAchievement('The Prestige','Have 400 wizard towers.(Unrelated to the Cookie Clicker feature of the same name.)','Wizard tower',9); - order=1500;Game.TieredAchievement('That\'s just peanuts to space','Have 400 shipments.','Shipment',9); - order=1600;Game.TieredAchievement('Worth its weight in lead','Have 400 alchemy labs.','Alchemy lab',9); - order=1700;Game.TieredAchievement('What happens in the vortex stays in the vortex','Have 400 portals.','Portal',9); - order=1800;Game.TieredAchievement('Invited to yesterday\'s party','Have 400 time machines.','Time machine',9); - order=1900;Game.TieredAchievement('Downsizing','Have 400 antimatter condensers.','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','Have 400 prisms.','Prism',9); - order=2100;Game.TieredAchievement('Maybe a chance in hell, actually','Have 400 chancemakers.','Chancemaker',9); - - order=1200;Game.TieredAchievement('Make like a tree','Have 450 farms.','Farm',10); - order=1300;Game.TieredAchievement('Cave story','Have 450 mines.','Mine',10); - order=1400;Game.TieredAchievement('In-cog-neato','Have 450 factories.','Factory',10); - order=1425;Game.TieredAchievement('Save your breath because that\'s all you\'ve got left','Have 450 banks.','Bank',10); - order=1450;Game.TieredAchievement('Vengeful and almighty','Have 450 temples.','Temple',10); - order=1475;Game.TieredAchievement('Spell it out for you','Have 450 wizard towers.','Wizard tower',10); - order=1500;Game.TieredAchievement('Space space space space space','Have 450 shipments.It\'s too far away...','Shipment',10); - order=1600;Game.TieredAchievement('Don\'t get used to yourself, you\'re gonna have to change','Have 450 alchemy labs.','Alchemy lab',10); - order=1700;Game.TieredAchievement('Objects in the mirror dimension are closer than they appear','Have 450 portals.','Portal',10); - order=1800;Game.TieredAchievement('Groundhog day','Have 450 time machines.','Time machine',10); - order=1900;Game.TieredAchievement('A matter of perspective','Have 450 antimatter condensers.','Antimatter condenser',10); - order=2000;Game.TieredAchievement('Optical illusion','Have 450 prisms.','Prism',10); - order=2100;Game.TieredAchievement('Jackpot','Have 450 chancemakers.','Chancemaker',10); - - order=36000; - new Game.Achievement('So much to do so much to see','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','Make 100,000,000,000,000,000,000,000 cookies from clicking.',[11,28]); - new Game.Achievement('One...more...click...','Make 10,000,000,000,000,000,000,000,000 cookies from clicking.',[11,30]); - - order=61515; - new Game.Achievement('Botany enthusiast','Harvest 100 mature garden plants.',[26,20]); - new Game.Achievement('Green, aching thumb','Harvest 1000 mature garden plants.',[27,20]); - new Game.Achievement('In the garden of Eden (baby)','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','Unlock every garden seed.',[25,20]); - new Game.Achievement('Seedless to nay','Convert a complete seed log into sugar lumps by sacrificing your garden to the sugar hornets.Owning this achievement makes seeds 5% cheaper, plants mature 5% sooner, and plant upgrades drop 5% more.',[29,20]); - - order=30050; - new Game.Achievement('You get nothing','Ascend with 1 undecillion cookies baked.Good day sir!',[29,6]); - new Game.Achievement('Humble rebeginnings','Ascend with 1 duodecillion cookies baked.Started from the bottom, now we\'re here.',[29,6]); - new Game.Achievement('The end of the world','Ascend with 1 tredecillion cookies baked.(as we know it)',[21,25]); - new Game.Achievement('Oh, you\'re back','Ascend with 1 quattuordecillion cookies baked.Missed us?',[21,25]); - new Game.Achievement('Lazarus','Ascend with 1 quindecillion cookies baked.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','Have at least 350 of everything.(it\'s free real estate)',[21,26]); - new Game.Achievement('Quadricentennial','Have at least 400 of everything.You\'ve had to do horrible things to get this far.',[22,26]); - new Game.Achievement('Quadricentennial and a half','Have at least 450 of everything.
Horrible... horrible things.At this point, you might just be compensating for something.',[23,26]); - - new Game.Achievement('Quincentennial','Have at least 500 of everything.Some people would say you\'re halfway there.',[29,25]); - - - order=21100; - new Game.Achievement('Maillard reaction','Harvest a caramelized sugar lump.',[29,27]); - - order=30250; - new Game.Achievement('When the cookies ascend just right','Ascend with exactly 1,000,000,000,000 cookies.',[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','Have 600 cursors.',[0,16]); - - order=1100;Game.TieredAchievement('But wait \'til you get older','Have 550 grandmas.','Grandma',12); - order=1200;Game.TieredAchievement('Sharpest tool in the shed','Have 500 farms.','Farm',11); - order=1300;Game.TieredAchievement('Hey now, you\'re a rock','Have 500 mines.','Mine',11); - order=1400;Game.TieredAchievement('Break the mold','Have 500 factories.','Factory',11); - order=1425;Game.TieredAchievement('Get the show on, get paid','Have 500 banks.','Bank',11); - order=1450;Game.TieredAchievement('My world\'s on fire, how about yours','Have 500 temples.','Temple',11); - order=1475;Game.TieredAchievement('The meteor men beg to differ','Have 500 wizard towers.','Wizard tower',11); - order=1500;Game.TieredAchievement('Only shooting stars','Have 500 shipments.','Shipment',11); - order=1600;Game.TieredAchievement('We could all use a little change','Have 500 alchemy labs.','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','Have 500 portals.','Portal',11); - order=1800;Game.TieredAchievement('The years start coming','Have 500 time machines.','Time machine',11); - order=1900;Game.TieredAchievement('What a concept','Have 500 antimatter condensers.','Antimatter condenser',11); - order=2000;Game.TieredAchievement('You\'ll never shine if you don\'t glow','Have 500 prisms.','Prism',11); - order=2100;Game.TieredAchievement('You\'ll never know if you don\'t go','Have 500 chancemakers.','Chancemaker',11); - - order=2200; - Game.TieredAchievement('Self-contained','Have 1 fractal engine.','Fractal engine',1); - Game.TieredAchievement('Threw you for a loop','Have 50 fractal engines.','Fractal engine',2); - Game.TieredAchievement('The sum of its parts','Have 100 fractal engines.','Fractal engine',3); - Game.TieredAchievement('Bears repeating','Have 150 fractal engines.
We do not care for those people and their reckless sense of unchecked optimism.Where did these come from?','Fractal engine',4); - Game.TieredAchievement('More of the same','Have 200 fractal engines.','Fractal engine',5); - Game.TieredAchievement('Last recurse','Have 250 fractal engines.','Fractal engine',6); - Game.TieredAchievement('Out of one, many','Have 300 fractal engines.','Fractal engine',7); - Game.TieredAchievement('An example of recursion','Have 350 fractal engines.','Fractal engine',8); - Game.TieredAchievement('For more information on this achievement, please refer to its title','Have 400 fractal engines.','Fractal engine',9); - Game.TieredAchievement('I\'m so meta, even this achievement','Have 450 fractal engines.','Fractal engine',10); - Game.TieredAchievement('Never get bored','Have 500 fractal engines.','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','Reach level 10 fractal engines.',[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=6000; - new Game.Achievement('Renaissance baker','Own 400 upgrades and 4000 buildings.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=1150; - new Game.Achievement('Veteran','Own at least 14 grandma types.14\'s a crowd!',[10,9]); - - order=10000; - new Game.Achievement('Thick-skinned','Have your reinforced membrane protect the shimmering veil.',[7,10]); - - - order=2300; - Game.TieredAchievement('F12','Have 1 javascript console.','Javascript console',1); - Game.TieredAchievement('Variable success','Have 50 javascript consoles.','Javascript console',2); - Game.TieredAchievement('No comments','Have 100 javascript consoles.','Javascript console',3); - Game.TieredAchievement('Up to code','Have 150 javascript consoles.','Javascript console',4); - Game.TieredAchievement('Works on my machine','Have 200 javascript consoles.','Javascript console',5); - Game.TieredAchievement('Technical debt','Have 250 javascript consoles.','Javascript console',6); - Game.TieredAchievement('Mind your language','Have 300 javascript consoles.','Javascript console',7); - Game.TieredAchievement('Inconsolable','Have 350 javascript consoles.','Javascript console',8); - Game.TieredAchievement('Closure','Have 400 javascript consoles.','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','Have 450 javascript consoles.','Javascript console',10); - Game.TieredAchievement('Taking the back streets','Have 500 javascript consoles.','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','Reach level 10 javascript consoles.',[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','Ascend with 1 sexdecillion cookies baked.It\'s like you just appeared out of the blue!',[21,32]); - new Game.Achievement('If at first you don\'t succeed','Ascend with 1 septendecillion cookies baked.If at first you don\'t succeed, try, try, try again.',[21,32]); - - order=33000; - new Game.Achievement('O Fortuna','Own every fortune upgrade.Owning this achievement makes fortunes appear twice as often; fortune upgrades also have a 40% chance to carry over after ascending.',[29,8]); - - //end of achievements - - /*===================================================================================== - BUFFS - =======================================================================================*/ - - Game.buffs=[];//buffs currently in effect by name - Game.buffsN=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; - - 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.buffsN; - - //create dom - Game.buffsL.innerHTML=Game.buffsL.innerHTML+'
But isn\'t that the definition of insanity?' - ,'left',true):'')+' style="opacity:1;float:none;display:block;'+(buff.icon[2]?'background-image:url('+buff.icon[2]+');':'')+'background-position:'+(-buff.icon[0]*48)+'px '+(-buff.icon[1]*48)+'px;">'; - - buff.l=l('buff'+buff.id); - - Game.buffsN++; - } - 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:'Cookie production x'+pow+' for '+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:'Cookie production x'+pow+' for '+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:'Cookie production halved for '+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) - { - return { - name:'Dragon Harvest', - desc:'Cookie production x'+pow+' for '+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:'All buildings are '+pow+'% cheaper for '+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:'Cookie production halted for '+Game.sayTime(time*Game.fps,-1)+','+buff.name+'
'+buff.desc+'
but each click is worth '+Game.sayTime(time*Game.fps,-1)+' of CpS.', - 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:'Clicking power x'+pow+' for '+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) - { - return { - name:'Dragonflight', - desc:'Clicking power x'+pow+' for '+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:'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], - desc:'Your '+obj.amount+' '+obj.plural+' are boosting your CpS!
Cookie production +'+(Math.ceil(pow*100-100))+'% for '+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], - desc:'Your '+obj.amount+' '+obj.plural+' are rusting your CpS!
Cookie production '+(Math.ceil(pow*100-100))+'% slower for '+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:'You find 10% more golden cookies for the next '+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:'All upgrades are '+pow+'% cheaper for '+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:'All upgrades are '+pow+'% pricier for '+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:'All buildings are '+pow+'% cheaper for '+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:'All buildings are '+pow+'% pricier for '+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:'Spells backfire '+pow+' times less for '+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:'Spells backfire '+pow+' times more for '+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:'Clicking power +'+Math.floor(pow*100-100)+'% for '+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:'Cookie production x'+pow+' for '+Game.sayTime(time*Game.fps,-1)+'!', - icon:[29,14], - time:time*Game.fps, - add:true, - multCpS:pow, - aura:0 - }; - }); - - //end of buffs - - - - - - BeautifyAll(); - Game.vanilla=0;//everything we create beyond this will not be saved in the default save - - - for (var i in Game.customCreate) {Game.customCreate[i]();} - - - /*===================================================================================== - 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.elderWrath-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/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 && n 0 && 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 && n 0) - { - 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.hp 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; - 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) - { - if (Game.prefs.popups) Game.Popup('Exploded a '+(me.type==1?'shiny ':'')+'wrinkler : found '+Beautify(me.sucked)+' cookies!'); - else Game.Notify('Exploded a '+(me.type==1?'shiny ':'')+'wrinkler','Found '+Beautify(me.sucked)+' cookies!',[19,8],6); - Game.Popup(' +'+Beautify(me.sucked)+' cookies',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); - if (Game.prefs.popups) Game.Popup('Found : '+cookie+'!'); - else Game.Notify(cookie,'You also found '+cookie+'!',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) - { - 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); - } - } - 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); - 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); - if (me.type==1) ctx.drawImage(Pic('shinyWrinkler.png'),-50,-10); - else if (Game.season=='christmas') ctx.drawImage(Pic('winterWrinkler.png'),-50,-10); - else ctx.drawImage(Pic('wrinkler.png'),-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 (me.phase==2 && Math.random()<0.03 && Game.prefs.particles) - { - 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 width=Math.max(ctx.measureText('Swallowed :').width,ctx.measureText(Beautify(selected.sucked)).width); - ctx.fillStyle='#000'; - ctx.strokeStyle='#000'; - ctx.lineWidth=8; - ctx.globalAlpha=0.5; - ctx.beginPath(); - ctx.moveTo(x,y); - ctx.lineTo(Math.floor(selected.x),Math.floor(selected.y)); - ctx.stroke(); - ctx.fillRect(x-width/2-8-14,y-23,width+16+28,38); - ctx.globalAlpha=1; - ctx.fillStyle='#fff'; - ctx.fillText('Swallowed :',x+14,y-8); - ctx.fillText(Beautify(selected.sucked),x+14,y+8); - ctx.drawImage(Pic('icons.png'),27*48,26*48,48,48,x-width/2-8-22,y-4-24,48,48); - } - } - Game.SaveWrinklers=function() - { - var amount=0; - var amountShinies=0; - var number=0; - var shinies=0; - for (var i in Game.wrinklers) - { - if (Game.wrinklers[i].sucked>0.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 in Game.specialTabs) - { - var selected=0; - if (Game.specialTab==Game.specialTabs[i]) selected=1; - var x=24; - var s=1; - if (selected) {s=2;x+=24;} - - if (Math.abs(Game.mouseX-x)<=24*s && Math.abs(Game.mouseY-y)<=24*s) - { - Game.specialTabHovered=Game.specialTabs[i]; - Game.mousePointer=1; - Game.CanClick=0; - if (Game.Click) - { - if (Game.specialTab!=Game.specialTabs[i]) {Game.specialTab=Game.specialTabs[i];Game.ToggleSpecialMenu(1);PlaySound('snd/press.mp3');} - else {Game.ToggleSpecialMenu(0);PlaySound('snd/press.mp3');} - //PlaySound('snd/tick.mp3'); - } - } - - y+=48; - } - } - } - - Game.santaLevels=['Festive test tube','Festive ornament','Festive wreath','Festive tree','Festive present','Festive elf fetus','Elf toddler','Elfling','Young elf','Bulky elf','Nick','Santa Claus','Elder Santa','True Santa','Final Claus']; - for (var i in Game.santaDrops)//scale christmas upgrade prices with santa level - {Game.Upgrades[Game.santaDrops[i]].priceFunc=function(){return Math.pow(3,Game.santaLevel)*2525;}} - - - Game.UpgradeSanta=function() - { - var moni=Math.pow(Game.santaLevel+1,Game.santaLevel+1); - if (Game.cookies>moni && 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'); - if (Game.prefs.popups) Game.Popup('You are granted
Santa\'s dominion.'); - else Game.Notify('You are granted Santa\'s dominion.','',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); - if (Game.prefs.popups) Game.Popup('You find a present which contains...
'+drop+'!'); - else Game.Notify('Found a present!','You find a present which contains...
'+drop+'!',Game.Upgrades[drop].icon); - } - - Game.ToggleSpecialMenu(1); - - if (l('specialPic')){var rect=l('specialPic').getBoundingClientRect();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2);} - - 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:'Chip it',pic:0, - cost:function(){return Game.cookies>=1000000;}, - buy:function(){Game.Spend(1000000);}, - costStr:function(){return Beautify(1000000)+' cookies';}}, - {name:'Dragon egg',action:'Chip it',pic:1, - cost:function(){return Game.cookies>=1000000*2;}, - buy:function(){Game.Spend(1000000*2);}, - costStr:function(){return Beautify(1000000*2)+' cookies';}}, - {name:'Dragon egg',action:'Chip it',pic:2, - cost:function(){return Game.cookies>=1000000*4;}, - buy:function(){Game.Spend(1000000*4);}, - costStr:function(){return Beautify(1000000*4)+' cookies';}}, - {name:'Shivering dragon egg',action:'Hatch it',pic:3, - cost:function(){return Game.cookies>=1000000*8;}, - buy:function(){Game.Spend(1000000*8);}, - costStr:function(){return Beautify(1000000*8)+' cookies';}}, - {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 Beautify(1000000*16)+' cookies';}}, - {name:'Krumblor, cookie hatchling',action:'Train Dragon Cursor
Aura : clicking is 5% more effective',pic:4, - cost:function(){return Game.Objects['Cursor'].amount>=100;}, - buy:function(){Game.Objects['Cursor'].sacrifice(100);}, - costStr:function(){return '100 cursors';}}, - {name:'Krumblor, cookie hatchling',action:'Train Elder Battalion
Aura : grandmas gain +1% CpS for every non-grandma building',pic:4, - cost:function(){return Game.Objects['Grandma'].amount>=100;}, - buy:function(){Game.Objects['Grandma'].sacrifice(100);}, - costStr:function(){return '100 grandmas';}}, - {name:'Krumblor, cookie hatchling',action:'Train Reaper of Fields
Aura : golden cookies may trigger a Dragon Harvest',pic:4, - cost:function(){return Game.Objects['Farm'].amount>=100;}, - buy:function(){Game.Objects['Farm'].sacrifice(100);}, - costStr:function(){return '100 farms';}}, - {name:'Krumblor, cookie dragon',action:'Train Earth Shatterer
Aura : buildings sell back for 50% instead of 25%',pic:5, - cost:function(){return Game.Objects['Mine'].amount>=100;}, - buy:function(){Game.Objects['Mine'].sacrifice(100);}, - costStr:function(){return '100 mines';}}, - {name:'Krumblor, cookie dragon',action:'Train Master of the Armory
Aura : all upgrades are 2% cheaper',pic:5, - cost:function(){return Game.Objects['Factory'].amount>=100;}, - buy:function(){Game.Objects['Factory'].sacrifice(100);}, - costStr:function(){return '100 factories';}}, - {name:'Krumblor, cookie dragon',action:'Train Fierce Hoarder
Aura : all buildings are 2% cheaper',pic:5, - cost:function(){return Game.Objects['Bank'].amount>=100;}, - buy:function(){Game.Objects['Bank'].sacrifice(100);}, - costStr:function(){return '100 banks';}}, - {name:'Krumblor, cookie dragon',action:'Train Dragon God
Aura : prestige CpS bonus +5%',pic:5, - cost:function(){return Game.Objects['Temple'].amount>=100;}, - buy:function(){Game.Objects['Temple'].sacrifice(100);}, - costStr:function(){return '100 temples';}}, - {name:'Krumblor, cookie dragon',action:'Train Arcane Aura
Aura : golden cookies appear 5% more often',pic:5, - cost:function(){return Game.Objects['Wizard tower'].amount>=100;}, - buy:function(){Game.Objects['Wizard tower'].sacrifice(100);}, - costStr:function(){return '100 wizard towers';}}, - {name:'Krumblor, cookie dragon',action:'Train Dragonflight
Aura : golden cookies may trigger a Dragonflight',pic:5, - cost:function(){return Game.Objects['Shipment'].amount>=100;}, - buy:function(){Game.Objects['Shipment'].sacrifice(100);}, - costStr:function(){return '100 shipments';}}, - {name:'Krumblor, cookie dragon',action:'Train Ancestral Metamorphosis
Aura : golden cookies give 10% more cookies',pic:5, - cost:function(){return Game.Objects['Alchemy lab'].amount>=100;}, - buy:function(){Game.Objects['Alchemy lab'].sacrifice(100);}, - costStr:function(){return '100 alchemy labs';}}, - {name:'Krumblor, cookie dragon',action:'Train Unholy Dominion
Aura : wrath cookies give 10% more cookies',pic:5, - cost:function(){return Game.Objects['Portal'].amount>=100;}, - buy:function(){Game.Objects['Portal'].sacrifice(100);}, - costStr:function(){return '100 portals';}}, - {name:'Krumblor, cookie dragon',action:'Train Epoch Manipulator
Aura : golden cookie effects last 5% longer',pic:5, - cost:function(){return Game.Objects['Time machine'].amount>=100;}, - buy:function(){Game.Objects['Time machine'].sacrifice(100);}, - costStr:function(){return '100 time machines';}}, - {name:'Krumblor, cookie dragon',action:'Train Mind Over Matter
Aura : +25% random drops',pic:5, - cost:function(){return Game.Objects['Antimatter condenser'].amount>=100;}, - buy:function(){Game.Objects['Antimatter condenser'].sacrifice(100);}, - costStr:function(){return '100 antimatter condensers';}}, - {name:'Krumblor, cookie dragon',action:'Train Radiant Appetite
Aura : all cookie production multiplied by 2',pic:5, - cost:function(){return Game.Objects['Prism'].amount>=100;}, - buy:function(){Game.Objects['Prism'].sacrifice(100);}, - costStr:function(){return '100 prisms';}}, - {name:'Krumblor, cookie dragon',action:'Train Dragon\'s Fortune
Aura : +123% CpS per golden cookie on-screen',pic:5, - cost:function(){return Game.Objects['Chancemaker'].amount>=100;}, - buy:function(){Game.Objects['Chancemaker'].sacrifice(100);}, - costStr:function(){return '100 chancemakers';}}, - {name:'Krumblor, cookie dragon',action:'Train Dragon\'s Curve
Aura : sugar lumps grow 5% faster, 50% weirder',pic:5, - cost:function(){return Game.Objects['Fractal engine'].amount>=100;}, - buy:function(){Game.Objects['Fractal engine'].sacrifice(100);}, - costStr:function(){return '100 fractal engines';}}, - {name:'Krumblor, cookie dragon',action:'Train Reality Bending
Aura : 10% of every other aura, combined',pic:5, - cost:function(){return Game.Objects['Javascript console'].amount>=100;}, - buy:function(){Game.Objects['Javascript console'].sacrifice(100);}, - costStr:function(){return '100 javascript consoles';}}, - {name:'Krumblor, cookie dragon',action:'Bake dragon cookie
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 '50 of every building';}}, - {name:'Krumblor, cookie dragon',action:'Train secondary aura
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 '200 of every building';}}, - {name:'Krumblor, cookie dragon',action:'Your dragon is fully trained.',pic:8} - ]; - - Game.dragonAuras={ - 0:{name:'No aura',pic:[0,7],desc:'Select an aura from those your dragon knows.'}, - 1:{name:'Breath of Milk',pic:[18,25],desc:'Kittens are 5% more effective.'}, - 2:{name:'Dragon Cursor',pic:[0,25],desc:'Clicking is 5% more effective.'}, - 3:{name:'Elder Battalion',pic:[1,25],desc:'Grandmas gain +1% CpS for every non-grandma building.'}, - 4:{name:'Reaper of Fields',pic:[2,25],desc:'Golden cookies may trigger a Dragon Harvest.'}, - 5:{name:'Earth Shatterer',pic:[3,25],desc:'Buildings sell back for 50% instead of 25%.'}, - 6:{name:'Master of the Armory',pic:[4,25],desc:'All upgrades are 2% cheaper.'}, - 7:{name:'Fierce Hoarder',pic:[15,25],desc:'All buildings are 2% cheaper.'}, - 8:{name:'Dragon God',pic:[16,25],desc:'Prestige CpS bonus +5%.'}, - 9:{name:'Arcane Aura',pic:[17,25],desc:'Golden cookies appear +5% more often.'}, - 10:{name:'Dragonflight',pic:[5,25],desc:'Golden cookies may trigger a Dragonflight.'}, - 11:{name:'Ancestral Metamorphosis',pic:[6,25],desc:'Golden cookies give 10% more cookies.'}, - 12:{name:'Unholy Dominion',pic:[7,25],desc:'Wrath cookies give 10% more cookies.'}, - 13:{name:'Epoch Manipulator',pic:[8,25],desc:'Golden cookies last 5% longer.'}, - 14:{name:'Mind Over Matter',pic:[13,25],desc:'Random drops are 25% more common.'}, - 15:{name:'Radiant Appetite',pic:[14,25],desc:'All cookie production multiplied by 2.'}, - 16:{name:'Dragon\'s Fortune',pic:[19,25],desc:'+123% CpS per golden cookie on-screen, multiplicative.'}, - 17:{name:'Dragon\'s Curve',pic:[20,25],desc:'+5% sugar lump growth and sugar lumps are twice as likely to be unusual.'}, - 18:{name:'Reality Bending',pic:[32,25],desc:'One tenth of every other dragon aura, combined.'}, - }; - - 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') 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('Set your dragon\'s '+(slot==1?'secondary ':'')+'aura
'+ - ''+ - ''+ - ''+str+''+ - ''+ - ''+(highestBuilding==0?'Switching your aura is free because you own no buildings.':'The cost of switching your aura is 1 '+highestBuilding.name+'.' - ,[['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();'],'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= - '
This will affect your CpS!')+''; - } - - Game.UpgradeDragon=function() - { - if (Game.dragonLevel'+Game.dragonAuras[aura].name+'
'+ - ''+ - Game.dragonAuras[aura].desc+ - '=Game.dragonLevels.length-1) Game.Win('Here be dragon'); - Game.ToggleSpecialMenu(1); - if (l('specialPic')){var rect=l('specialPic').getBoundingClientRect();Game.SparkleAt((rect.left+rect.right)/2,(rect.top+rect.bottom)/2);} - Game.recalculateGains=1; - Game.upgradesToRebuild=1; - } - } - - 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+='' - ,'top')+ - '>'; - } - if (Game.dragonLevel>=24)//2nd aura slot; increased with last building (javascript consoles) - { - var icon=Game.dragonAuras[Game.dragonAura2].pic; - str+=''+Game.dragonAuras[Game.dragonAura].name+'
'+ - ''+ - Game.dragonAuras[Game.dragonAura].desc+ - '' - ,'top')+ - '>'; - } - - if (Game.dragonLevel'+Game.dragonAuras[Game.dragonAura2].name+'
'+ - ''+ - Game.dragonAuras[Game.dragonAura2].desc+ - ''+ - ''; - } - 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.Milks=[ - {name:'Rank I - Plain milk',pic:'milkPlain',icon:[1,8]}, - {name:'Rank II - Chocolate milk',pic:'milkChocolate',icon:[2,8]}, - {name:'Rank III - Raspberry milk',pic:'milkRaspberry',icon:[3,8]}, - {name:'Rank IV - Orange milk',pic:'milkOrange',icon:[4,8]}, - {name:'Rank V - Caramel milk',pic:'milkCaramel',icon:[5,8]}, - {name:'Rank VI - Banana milk',pic:'milkBanana',icon:[6,8]}, - {name:'Rank VII - Lime milk',pic:'milkLime',icon:[7,8]}, - {name:'Rank VIII - Blueberry milk',pic:'milkBlueberry',icon:[8,8]}, - {name:'Rank IX - Strawberry milk',pic:'milkStrawberry',icon:[9,8]}, - {name:'Rank X - Vanilla milk',pic:'milkVanilla',icon:[10,8]}, - {name:'Rank XI - Honey milk',pic:'milkHoney',icon:[21,23]}, - {name:'Rank XII - Coffee milk',pic:'milkCoffee',icon:[22,23]}, - {name:'Rank XIII - Tea with a spot of milk',pic:'milkTea',icon:[23,23]}, - {name:'Rank XIV - Coconut milk',pic:'milkCoconut',icon:[24,23]}, - {name:'Rank XV - Cherry milk',pic:'milkCherry',icon:[25,23]}, - {name:'Rank XVI - Spiced milk',pic:'milkSpiced',icon:[26,23]}, - {name:'Rank XVII - Maple milk',pic:'milkMaple',icon:[28,23]}, - {name:'Rank XVIII - Mint milk',pic:'milkMint',icon:[29,23]}, - ]; - Game.Milk=Game.Milks[0]; - - Game.mousePointer=0;//when 1, draw the mouse as a pointer on the left screen - - Game.cookieOriginX=0; - Game.cookieOriginY=0; - Game.DrawBackground=function() - { - - Timer.clean(); - //background - if (!Game.Background)//init some stuff - { - Game.Background=l('backgroundCanvas').getContext('2d'); - Game.Background.canvas.width=Game.Background.canvas.parentNode.offsetWidth; - Game.Background.canvas.height=Game.Background.canvas.parentNode.offsetHeight; - Game.LeftBackground=l('backgroundLeftCanvas').getContext('2d'); - Game.LeftBackground.canvas.width=Game.LeftBackground.canvas.parentNode.offsetWidth; - Game.LeftBackground.canvas.height=Game.LeftBackground.canvas.parentNode.offsetHeight; - //preload ascend animation bits so they show up instantly - Game.LeftBackground.globalAlpha=0; - Game.LeftBackground.drawImage(Pic('brokenCookie.png'),0,0); - Game.LeftBackground.drawImage(Pic('brokenCookieHalo.png'),0,0); - Game.LeftBackground.drawImage(Pic('starbg.jpg'),0,0); - - window.addEventListener('resize', function(event) - { - Game.Background.canvas.width=Game.Background.canvas.parentNode.offsetWidth; - Game.Background.canvas.height=Game.Background.canvas.parentNode.offsetHeight; - Game.LeftBackground.canvas.width=Game.LeftBackground.canvas.parentNode.offsetWidth; - Game.LeftBackground.canvas.height=Game.LeftBackground.canvas.parentNode.offsetHeight; - }); - } - - var ctx=Game.LeftBackground; - - if (Game.OnAscend) - { - Timer.clean(); - //starry background on ascend screen - var w=Game.Background.canvas.width; - var h=Game.Background.canvas.height; - var b=Game.ascendl.getBoundingClientRect(); - var x=(b.left+b.right)/2; - var y=(b.top+b.bottom)/2; - Game.Background.globalAlpha=0.5; - var s=1*Game.AscendZoom*(1+Math.cos(Game.T*0.0027)*0.05); - Game.Background.fillPattern(Pic('starbg.jpg'),0,0,w,h,1024*s,1024*s,x+Game.AscendOffX*0.25*s,y+Game.AscendOffY*0.25*s); - Timer.track('star layer 1'); - if (Game.prefs.fancy) - { - //additional star layer - Game.Background.globalAlpha=0.5*(0.5+Math.sin(Game.T*0.02)*0.3); - var s=2*Game.AscendZoom*(1+Math.sin(Game.T*0.002)*0.07); - //Game.Background.globalCompositeOperation='lighter'; - Game.Background.fillPattern(Pic('starbg.jpg'),0,0,w,h,1024*s,1024*s,x+Game.AscendOffX*0.25*s,y+Game.AscendOffY*0.25*s); - //Game.Background.globalCompositeOperation='source-over'; - Timer.track('star layer 2'); - - x=x+Game.AscendOffX*Game.AscendZoom; - y=y+Game.AscendOffY*Game.AscendZoom; - //wispy nebula around the center - Game.Background.save(); - Game.Background.globalAlpha=0.5; - Game.Background.translate(x,y); - Game.Background.globalCompositeOperation='lighter'; - Game.Background.rotate(Game.T*0.001); - s=(600+150*Math.sin(Game.T*0.007))*Game.AscendZoom; - Game.Background.drawImage(Pic('heavenRing1.jpg'),-s/2,-s/2,s,s); - Game.Background.rotate(-Game.T*0.0017); - s=(600+150*Math.sin(Game.T*0.0037))*Game.AscendZoom; - Game.Background.drawImage(Pic('heavenRing2.jpg'),-s/2,-s/2,s,s); - Game.Background.restore(); - Timer.track('nebula'); - - /* - //links between upgrades - //not in because I am bad at this - Game.Background.globalAlpha=1; - Game.Background.save(); - Game.Background.translate(x,y); - s=(32)*Game.AscendZoom; - - for (var i in Game.PrestigeUpgrades) - { - var me=Game.PrestigeUpgrades[i]; - var ghosted=0; - if (me.canBePurchased || Game.Has('Neuromancy')){} - else - { - for (var ii in me.parents){if (me.parents[ii]!=-1 && me.parents[ii].canBePurchased) ghosted=1;} - } - 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)); - if (targX<=origX) rot+=180; - var dist=Math.floor(Math.sqrt((targX-origX)*(targX-origX)+(targY-origY)*(targY-origY))); - origX+=2; - origY-=18; - //rot=-(Math.PI/2)*(me.id%4); - Game.Background.translate(origX,origY); - Game.Background.rotate(rot); - //Game.Background.drawImage(Pic('linkPulse.png'),-s/2,-s/2,s,s); - Game.Background.fillPattern(Pic('linkPulse.png'),0,-4,dist,8,32,8); - Game.Background.rotate(-rot); - Game.Background.translate(-origX,-origY); - } - } - } - Game.Background.restore(); - Timer.track('links'); - */ - - //Game.Background.drawImage(Pic('shadedBorders.png'),0,0,w,h); - //Timer.track('border'); - } - } - else - { - - var goodBuff=0; - var badBuff=0; - for (var i in Game.buffs) - { - if (Game.buffs[i].aura==1) goodBuff=1; - if (Game.buffs[i].aura==2) badBuff=1; - } - - if (Game.drawT%5==0) - { - Game.defaultBg='bgBlue'; - Game.bgR=0; - - if (Game.season=='fools') Game.defaultBg='bgMoney'; - if (Game.elderWrathD<1) - { - Game.bgR=0; - Game.bg=Game.defaultBg; - Game.bgFade=Game.defaultBg; - } - else if (Game.elderWrathD>=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) 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;i 0) space-=s*(1-num/10)/2; - if (i==0 && num>1) space+=s*0.1; - for (var ii=0;ii 0.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.AscendTimer 0) - { - 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.AscendTimer 0) - { - 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.x width-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.MilksByChoice[Game.milkType].pic; - ctx.globalAlpha=0.9*a; - ctx.fillPattern(Pic(pic+'.png'),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.minigame && me.minigame.onRuinTheFun) me.minigame.onRuinTheFun(); - } - if (!silent) - { - if (Game.prefs.popups) Game.Popup('Thou doth ruineth the fun!'); - else 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+=''; - - 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(); - } - - - - - for (var i in Game.customInit) {Game.customInit[i]();} - - 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=Game.localStorageGet(Game.SaveTo); - Game.LoadSave(local); - },500); - } - - Game.ready=1; - setTimeout(function(){if (typeof showAds==='undefined' && (!l('detectAds') || l('detectAds').clientHeight<1)) Game.addClass('noAds');},500); - l('javascriptError').innerHTML=''; - l('javascriptError').style.display='none'; - Game.Loop(); - Game.Draw(); - } - /*===================================================================================== - LOGIC - =======================================================================================*/ - Game.Logic=function() - { - Game.bounds=Game.l.getBoundingClientRect(); - - 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'); - 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); - if (Game.prefs.popups) Game.Popup('Researched : '+Game.UpgradesById[Game.nextResearch].name); - else Game.Notify('Research complete','You have discovered : '+Game.UpgradesById[Game.nextResearch].name+'.',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')) - { - var str=Game.seasons[Game.season].over; - if (Game.prefs.popups) Game.Popup(str); - else Game.Notify(str,'',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.cookies && Game.T%Math.ceil(Game.fps/Math.min(10,Game.cookiesPs))==0 && Game.prefs.particles) 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/500000) Game.Win('Just plain lucky');//1 chance in 500,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('Eternal 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.prestige>0 && 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].amountDev 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+=''; - 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+=' =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 (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.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>=2000) Game.Win('Lord of Constructs'); - 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 (buildingsOwned>=3000 && Game.UpgradesOwned>=300) Game.Win('Polymath'); - if (buildingsOwned>=4000 && Game.UpgradesOwned>=400) Game.Win('Renaissance baker'); - - if (Game.cookiesEarned>=10000000000000 && !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').getBoundingClientRect().bottom>l('milk').getBoundingClientRect().top+16 && Game.milkProgress>0.1) Game.Win('Cookie-dunker'); - - for (var i in Game.customChecks) {Game.customChecks[i]();} - } - - 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?'Ascending! ':'')+Beautify(Game.cookies)+' '+(Game.cookies==1?'cookie':'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=''; - str+='You\'ve been on this run for '+(startDate==''?'not very long':(startDate))+'.
'; - str+=''; - if (Game.prestige>0) - { - str+='Your prestige level is currently '+Beautify(Game.prestige)+'.
(CpS +'+Beautify(Game.prestige)+'%)'; - str+=''; - } - if (ascendNowToGet<1) str+='Ascending now would grant you no prestige.'; - else if (ascendNowToGet<2) str+='Ascending now would grant you
1 prestige level (+1% CpS)
and 1 heavenly chip to spend.'; - else str+='Ascending now would grant you
'+Beautify(ascendNowToGet)+' prestige levels (+'+Beautify(ascendNowToGet)+'% CpS)
and '+Beautify(ascendNowToGet)+' heavenly chips to spend.'; - str+=''; - str+='You need '+Beautify(cookiesToNext)+' more cookies for the next level.
'; - l('ascendTooltip').innerHTML=str; - - if (ascendNowToGet>0)//show number saying how many chips you'd get resetting now - { - var str=ascendNowToGet.toString(); - var str2=''; - for (var i in str)//add commas - { - if ((str.length-i)%3==0 && i>0) str2+=','; - str2+=str[i]; - } - Game.ascendNumber.innerHTML='+'+str2; - 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.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(); - - for (var i in Game.customLogic) {Game.customLogic[i]();} - - 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(); - } - - //every 30 minutes : get server data (ie. update notification, patreon data) - if (Game.T%(Game.fps*60*30)==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 unit=(Math.round(Game.cookiesd)==1?' cookie':' cookies'); - 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(''); - } - if (str.length>11 && !Game.mobile) unit='
cookies'; - str+=unit; - if (Game.prefs.monospace) str=''+str+''; - str=str+'0?' class="warning"':'')+'>per second : '+Beautify(Game.cookiesPs*(1-Game.cpsSucked),1)+'';//display cookie amount - l('cookies').innerHTML=str; - l('compactCookies').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) 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)'; - l('wrapper').style.overflowX='hidden'; - l('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.tooltip.update();//changed to only update when the mouse is moved - - for (var i in Game.customDraw) {Game.customDraw[i]();} - - 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; - 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 (!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').innerHTML=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) - { - 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(); - //try {Game.Load();} - //catch(err) {console.log('ERROR : '+err.message);} - } - } -}; +/* +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;i 0) 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;i 0) Game.Win('Third-party'); + } + Game.registerHook=function(hook,func) + { + if (func.constructor===Array) + { + for (var i=0;i
'+choose(loc("Ticker (grandma)"))+'
'+choose(loc("Ticker (threatening grandma)"))+'
'+choose(loc("Ticker (angry grandma)"))+'
'+choose(loc("Ticker (grandmas return)"))+'
')+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','Chancemaker',1); + Game.TieredUpgrade('"All Bets Are Off" magic coin',''+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;i 0) + { + 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;i 0) + { + 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 ''; + } + this.levelTooltip=function() + { + var me=this; + return ''+Beautify(Math.round(price))+''+Game.costDetails(price)+''+name+''+''+loc("owned: %1",me.amount)+''+(me.free>0?''+loc("free: %1!",me.free)+'':'')+''+ + ''+ + (me.totalCookies>0?( + ''+ + (me.amount>0?''+desc+''+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)))+'') + ):'')+ + ''+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+=''; + 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 (i'; + str+=''; + str+=''; + if (this.id!=0) str+=''; + str+=' '; + str+=''+loc("Mute")+'','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")+'
('+loc("Minimize this building")+')1) 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.z b.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;i 0) 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;i 0) + { + 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 && (val gene.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+''; + } + Game.Prompt(''+(gene.isList?(Game.YouCustomizer.currentGenes[gene.n]+1):(Game.YouCustomizer.currentGenes[gene.n]+1-gene.choices[0]))+'>'+loc("Customize your clones")+'
'+loc("Sprung from your very DNA. Shape them in your image!")+''+ + ''+loc("Import")+''+ + ''+loc("Export")+''+ + ''+ + ''; + + 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 ''+ + ''+loc("Random")+''+ + '',[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='
'+ + 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("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+=' ')+'>'+(EN?(''+cap(me.plural)+(me.level>0?' (lvl. '+me.level+')':'')+'Click to unmute '+me.plural+''; + } + } + 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+='
(display this building)'):(''+loc("Level %1 %2",[Beautify(me.level),me.plural])+''+loc("Click to unmute")))+'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'; + str+=''; + } + } + 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='' + ,'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?''+Beautify(Math.round(me.getPrice()))+''+(me.pool=='toggle'?'[Togglable]':'[Upgrade]')+''+me.dname+''+me.desc+''+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!','Shipment',1); + Game.TieredUpgrade('Wormholes','
(Note : don\'t do that.)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.','Time machine',3); + + order=20000; + new Game.Upgrade('Kitten helpers',strKittenDesc+'
Or is it?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!','Alchemy lab',4); + order=800;Game.TieredUpgrade('Sanity dance','
Perhaps dangerously so.
Let\'s hope you can keep selling these legally.We can change if we want to.','Portal',4); + order=900;Game.TieredUpgrade('Causality enforcer','
We can leave our brains behind.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?...',1000000000000000,[11,9],function(){Game.SetResearch('Specialized chocolate chips');});Game.last.noPerm=1; + + order=15000; + new Game.Upgrade('Specialized chocolate chips',getStrCookieProductionMultiplierPlus(1)+'
Bingo.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!'); + new Game.Upgrade('Exotic nuts',getStrCookieProductionMultiplierPlus(4)+'
It's all downhill from here. You have been warned!
Purchase anyway?")+'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',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.")+'
today we riseThis 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.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.sayTime(Game.pledgeT,-1)+''+(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.',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)+'
Don\'t question it.we',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.")+'
rise
againYou\'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.',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.
(And accessorily, shortening the chicken\'s suffering.)
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',10000000000000000,[0,19]);Game.MakeTiered(Game.last,10,0); + + order=200;Game.TieredUpgrade('Double-thick glasses','
things just
clickOh... 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.','Alchemy lab',5); + order=800;Game.TieredUpgrade('Brane transplant','
And nobody likes muffins.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.',11,[19,7]);Game.last.noPerm=1; + new Game.Upgrade('Heavenly cookie stand',loc("Unlocks %1% of the potential of your prestige level.",25)+'
It\'s a secret to everyone.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.',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 '
May you use them wisely.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!',500,[9,2]);Game.last.pool='prestige'; + + order=40000; + new Game.Upgrade('Wrinkler doormat',loc("Wrinklers spawn much more frequently.")+'
Again!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.',2525,[17,9]); + new Game.Upgrade('Improved jolliness',getStrCookieProductionMultiplierPlus(15)+'
You know what they say, after all; the s\'more, the merrier.
'+loc("Cost scales with Santa level.")+'A nice wobbly belly goes a long way.',2525,[17,9]); + new Game.Upgrade('A lump of coal',getStrCookieProductionMultiplierPlus(1)+'
You jolly?
'+loc("Cost scales with Santa level.")+'Some of the world\'s worst stocking stuffing.',2525,[13,9]); + new Game.Upgrade('An itchy sweater',getStrCookieProductionMultiplierPlus(1)+'
I guess you could try starting your own little industrial revolution, or something?...
'+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.',2525,[12,9]); + new Game.Upgrade('Ho ho ho-flavored frosting',loc("Reindeer give twice as much.")+'
(Something something forced into cervidude)
'+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!',2525,[16,9],function(){Game.storeToRefresh=1;}); + new Game.Upgrade('Toy workshop',loc("All upgrades are %1% cheaper.",5)+'
But who will save us?
'+loc("Cost scales with Santa level.")+'Watch yours-elf around elvesdroppers who might steal our production secrets.',2525,[16,9],function(){Game.upgradesToRebuild=1;}); + new Game.Upgrade('Naughty list',loc("%1 are twice as efficient.",cap(loc("grandmas")))+'
Or elven worse!
'+loc("Cost scales with Santa level.")+'This list contains every unholy deed perpetuated by grandmakind.',2525,[15,9]); + new Game.Upgrade('Santa\'s bottomless bag',loc("Random drops are %1% more common.",10)+'
He won\'t be checking this one twice.
Once. Once is enough.
'+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.',2525,[19,9]); + new Game.Upgrade('Santa\'s legacy',loc("Cookie production multiplier +%1% per Santa's levels.",3)+'
To each their own, I guess.
'+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;',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
Look on my toys, ye Mighty, and despair!
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.','Prism',1); + Game.TieredUpgrade('9th color','
Truly, truly outrageous.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.','Prism',3); + Game.TieredUpgrade('Grainbow','
(Warning : may cause various interesting albeit deadly skin conditions.)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',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.
will wake you with a boo
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.','Antimatter condenser',6); + order=1100; + Game.TieredUpgrade('Glow-in-the-dark','
This somehow stacks with the nested universe theory, because physics.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 sht.',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',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)+'
and when they catch you,
they will kill you...
but first they must catch you.
'+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?',eggPrice,[6,12]); + new Game.Upgrade('Cassowary egg',getStrCookieProductionMultiplierPlus(1)+'
Guys?
'+loc("Cost scales with how many eggs you own.")+'The cassowary is taller than you, possesses murderous claws and can easily outrun you.',eggPrice,[7,12]); + new Game.Upgrade('Salmon roe',getStrCookieProductionMultiplierPlus(1)+'
You\'d do well to be casso-wary of them.
'+loc("Cost scales with how many eggs you own.")+'Do the impossible, see the invisible.',eggPrice,[8,12]); + new Game.Upgrade('Frogspawn',getStrCookieProductionMultiplierPlus(1)+'
Roe roe, fight the power?
'+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?',eggPrice,[10,12]); + new Game.Upgrade('Turtle egg',getStrCookieProductionMultiplierPlus(1)+'
LET ME TELL YOU ABOUT FOOD.
WHY DO I KEEP EATING MY FRIENDS
'+loc("Cost scales with how many eggs you own.")+'Turtles, right? Hatch from shells. Grow into shells. What\'s up with that?',eggPrice,[11,12]); + new Game.Upgrade('Ant larva',getStrCookieProductionMultiplierPlus(1)+'
Now for my skit about airplane food.
'+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.',eggPrice,[12,12]); + new Game.Upgrade('Golden goose egg',loc("Golden cookies appear %1% more often.",5)+'
And all will be well.
'+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.',eggPrice2,[16,12]); + new Game.Upgrade('Omelette',loc("Other eggs appear %1% more frequently.",10)+'
I wonder what\'s inside this one!
'+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.',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.")+'
Not to be confused with macaroons, macaroni, macarena or any of that nonsense.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.','Farm',7); + order=400;Game.TieredUpgrade('Planetsplitters','
Please do not breathe in the spores. In case of spore ingestion, seek medical help within the next 36 seconds.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.','Farm',8); + order=400;Game.TieredUpgrade('Canola oil wells','
Do not pet. Do not feed. Do not attempt to converse with.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.','Temple',8); + order=575;Game.TieredUpgrade('Rabbit trick','
Don\'t let it go to your head.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!','Wizard tower',8); + order=600;Game.TieredUpgrade('The final frontier','
Resulting cookies may or may not be fit for vegans.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.',25,[21,12]); + + new Game.Upgrade('Chimera',loc("Synergy upgrades are %1% cheaper.",2)+'
Keep in a dry and cool place, and away from other house pets. Subscription to home insurance is strongly advised.
'+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.',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)+'
Complete with little paper cups.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)+''+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.
The effective boost is +'+Beautify(Math.round(50+bonus*10))+'%
thanks to residual luck
and your '+bonus+' golden cookie upgrade'+(bonus==1?'':'s')+'.
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.','Mine','Shipment','synergy2'); + + Game.SynergyUpgrade('Quantum electronics','
But hey, a space bribe goes a long way.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.','Shipment','Mine','synergy1'); + Game.SynergyUpgrade('Shipyards','
Extracted from the fuels of ancient, fossilized civilizations.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.','Portal','Prism','synergy2'); + + Game.SynergyUpgrade('Relativistic parsec-skipping','
Perhaps at all of us.People will tell you this isn\'t physically possible.','Time machine','Shipment','synergy1'); + Game.SynergyUpgrade('Primeval glow','
These are people you don\'t want on your ship.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;i This is the first cookie you\'ve ever baked. It holds a deep sentimental value and, after all this time, an interesting smell.
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!'; + + + order=150;new Game.Upgrade('Armythril mouse',getStrClickingGains(1)+'
-Orteil
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.
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.")+'
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)+'
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)+'
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)+'
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)+'
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"))+')'+'
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"))+')'+'
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)+'
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.',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).
Hangin\' tough, stayin\' hungry.
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.'),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','
And Patreon, dudes!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.','Fractal engine',4); + Game.TieredUpgrade('Menger sponge cake','
This somehow stacks with the theory of nanocosmics, because physics.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!','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+'
Knowing that no hunger means no need for cookies, your marketers urge you to repurpose this product into next-level packing peanuts.'+(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!',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])+'
Oh! A priceless heirloom!
Oh! Another penny!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-"','Javascript console',1); + Game.TieredUpgrade('64bit arrays','
...the rest of the book is soaked in chocolate milk. If only there was a way to look up this sort of information...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.','Javascript console',11); + + order=5000; + Game.SynergyUpgrade('Script grannies','
Good thing you have no idea how it works. Makes for a neat plaque on your wall, though.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.'; + }; + } + else Game.last.desc='
'+str+'-'; + + 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.',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.")+'
Cats are expert hagglers and have a keen sense of bargaining, especially in the case of cash.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.',999,[30,14]);Game.last.priceFunc=dragonDropUpgradeCost; + new Game.Upgrade('Dragon claw',loc("Clicking is %1% more powerful.",3)+'
Note: icon not to scale.
'+loc("Cost scales with CpS, but %1 times cheaper with a fully-trained dragon.",10)+'Will grow back in a few days\' time.',999,[31,14]);Game.last.priceFunc=dragonDropUpgradeCost; + new Game.Upgrade('Dragon fang',loc("Golden cookies give %1% more cookies.",3)+'
A six-inch retractable claw, like a razor, from the middle toe. So you know, try to show a little respect.
'+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.',999,[30,15]);Game.last.priceFunc=dragonDropUpgradeCost; + new Game.Upgrade('Dragon teddy bear',loc("Random drops are %1% more common.",3)+'
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.
'+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.',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.
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.
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:','Idleverse',2); + Game.TieredUpgrade('All-conversion','• 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.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.','Cortex baker',2); + Game.TieredUpgrade('A sprinkle of irrationality','
Happy happy everyone happy.
Happy.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+=''; + 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("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;i'+loc("Once you redeem a gift, you will have to wait an hour before you can redeem another. Your game will save after redeeming.")+''+ + '5) + { + 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("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("Gift redeemed!'+ + ''+ + '
Inside, you find:")+''+loc("%1 cookie",LBeautify(out.cookies))+''+ + (out.message?( + ''+ + ''+loc("There's a note too!")+''+ + '' + ):'')+ + ''+ + ''+loc("How nice!")+''+ + ''+loc("Send a gift")+'
'+tinyIcon([34,6])+''+ + ''+ + ''+ + ''+ + '',[[loc("Cancel"),0,'float:right']],function(){ + if (!l('giftPromptContent')) + { + l('giftPromptContainer').innerHTML=''+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"))+''+ + ''+ + ''; + + 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'+ + ''+ + ''+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])+''; + } + l('giftPromptSelector').innerHTML=str; + l('giftPromptSelector').style.display='block'; + for (var i=0;i b.order) return 1; + else if (a.order ('+loc("none")+')'; + 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;i 1000) 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;i 1000) 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("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',''+loc("Here's your gift code!'+ + ''+ + '
Make sure to copy it so you can share it.")+'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',10000000000000000000000000000000,[12,36]);Game.MakeTiered(Game.last,15,0); + order=150;new Game.Upgrade('Omniplast mouse',getStrClickingGains(1)+'
turns to dough in your clutch.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)+''+this.ddesc;}; + Game.Upgrades['Bunny biscuit'].descFunc=function(){return '
'+(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()+''+Game.listTinyOwnedUpgrades(Game.easterEggs)+''+this.ddesc;}; + Game.Upgrades['Ghostly biscuit'].descFunc=function(){return '
'+(EN?('You\'ve purchased '+Game.GetHowManyEggs()+'/'+Game.easterEggs.length+' eggs.'):loc("Eggs purchased: %1.",Game.GetHowManyEggs()+'/'+Game.easterEggs.length))+''+Game.saySeasonSwitchUses()+''+Game.listTinyOwnedUpgrades(Game.halloweenDrops)+''+this.ddesc;}; + Game.Upgrades['Lovesick biscuit'].descFunc=function(){return '
'+(EN?('You\'ve purchased '+Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length+' halloween cookies.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManyHalloweenDrops()+'/'+Game.halloweenDrops.length))+''+Game.saySeasonSwitchUses()+''+Game.listTinyOwnedUpgrades(Game.heartDrops)+''+this.ddesc;}; + Game.Upgrades['Fool\'s biscuit'].descFunc=function(){return '
'+(EN?('You\'ve purchased '+Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length+' heart biscuits.'):loc("Seasonal cookies purchased: %1.",Game.GetHowManyHeartDrops()+'/'+Game.heartDrops.length))+''+Game.saySeasonSwitchUses()+''+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:")+'';} + 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"),'
'+(Game.Has('Eternal seasons')?loc("forever"):Game.sayTime(Game.seasonT,-1))+'('+loc("Click again to cancel season")+')'+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',[8,9]); + new Game.Achievement('Elder slumber',loc("Appease the grandmatriarchs at least %1 times.",5)+'
are
eternalour mind',[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.")+'
outlives
the universewe',[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)))+'
have
fedThere are many things',[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)))+'
that need to be erasedHe 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!',[11,7]); + new Game.Achievement('Nil zero zilch',loc("Ascend with %1 baked.",loc("%1 cookie",LBeautify(1e21)))+'
...where\'d the cookies go?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!',[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)))+'
Also page 6: British parliament ate my baby!& 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.',[22,26]); + new Game.Achievement('Quadricentennial and a half',loc("Have at least %1 of everything.",450)+'
Horrible... horrible things.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.',[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','
We do not care for those people and their reckless sense of unchecked optimism.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.',[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)+'
But isn\'t that the definition of insanity?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.','Javascript console',12); + + order=10000; + new Game.Achievement('Seven horseshoes',loc("Click %1.",loc("%1 golden cookie",LBeautify(27777)))+'
Go well with quotes.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+'' + ,'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,'+buff.dname+'
'+buff.desc+'
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;i 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 && n 0 && 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 && n 0) + { + 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;i moni && 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.' + ,[[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= + '
This will affect your CpS!",loc("%1 "+highestBuilding.bsingle,LBeautify(1))))+''; + } + + Game.UpgradeDragon=function() + { + if (Game.dragonLevel'+Game.dragonAuras[aura].dname+'
'+ + ''+ + Game.dragonAuras[aura].desc+ + '=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+='' + ,'top')+ + '>'; + } + if (Game.dragonLevel>=27)//2nd aura slot; increased with last building + { + var icon=Game.dragonAuras[Game.dragonAura2].pic; + str+=''+Game.dragonAuras[Game.dragonAura].dname+'
'+ + ''+ + Game.dragonAuras[Game.dragonAura].desc+ + '' + ,'top')+ + '>'; + } + + if (Game.dragonLevel'+Game.dragonAuras[Game.dragonAura2].dname+'
'+ + ''+ + Game.dragonAuras[Game.dragonAura2].desc+ + ''+ + ''; + } + 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;i 0) space-=s*(1-num/10)/2; + if (i==0 && num>1) space+=s*0.1; + for (var ii=0;ii 0.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.AscendTimer 0) + { + 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.AscendTimer 0) + { + 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.x width-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+=''; + + 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].amountDev 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+=' =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+' '; + 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 4dca06f..27067a8 100644 --- a/minigameGarden.js +++ b/minigameGarden.js @@ -1,2016 +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 conductive 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?(''; - } - 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='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.parent.amount' - ):(''+ - 'Soil 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.')+''+ - ''))+ - ''; - return str; - }; - } - M.seedTooltip=function(id) - { - return function(){ - var me=M.plantsById[id]; - var str='Effects :'+ - ''+me.effsStr+''+ - (me.q?(''+me.q+''):'')+ - ''+ - ''+ - ''+ - ''+ - (me.plantable?(''; - return str; - }; - } - M.toolTooltip=function(id) - { - return function(){ - var me=M.toolsById[id]; - var icon=[me.icon,35]; - var str='Planting cost :'):'')+ - '
'+Beautify(Math.round(shortenNumber(M.getCost(me))))+'
'+Game.sayTime(me.cost*60*30,-1)+' of CpS,
minimum '+Beautify(me.costM)+' cookies'+ - ''+ - M.getPlantDesc(me)+ - ''+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.'+ - ''+ - ''; - return str; - }; - } - M.tileTooltip=function(x,y) - { - return function(){ - var tile=M.plot[y][x]; - if (tile[0]==0) - { - var me=(M.seedSelected>=0)?M.plantsById[M.seedSelected]:0; - var str=''+ - ''+ - ''+me.name+''+ - (me.descFunc?me.descFunc():me.desc)+ - ''+ - ''+ - ''; - 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='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.)':'')+ - (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; - } - }; - } - - M.refillTooltip=function(){ - return ''+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)+ - 'Click to refill your soil timer and trigger 1 plant growth tick with x3 spread and mutation rate for 1 sugar lump.'+ - (Game.canRefillLump()?''; - }; - - 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+='
(can be done once every '+Game.sayTime((Game.getLumpRefillMax()/1000)*Game.fps,-1)+')':('
(usable again in '+Game.sayTime((Game.getLumpRefillRemaining()/1000+1)*Game.fps,-1)+')'))+ - ''; - 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
'+me.q+''):'')+ + '
'+me.q+''):'')+ + '
What\'s that spell? Loadsamoney!', + name:loc("Haggler's Charm"), + desc:loc("Upgrades are %1% cheaper for 1 minute.",2), + failDesc:loc("Upgrades are %1% more expensive for an hour.",2)+(EN?'
What\'s that spell? Loadsamoney!':''), icon:[25,11], costMin:10, costPercent:0.1, @@ -157,19 +157,19 @@ M.launch=function() { Game.killBuff('Haggler\'s misery'); var buff=Game.gainBuff('haggler luck',60,2); - Game.Popup('
'+me.desc.replace('%1',Game.bakeryName)+''+ + '
'+loc("Brokers are Wall Street-class grandmas versed in the ways of finance. Stockbroker grandmas work hard and play hard, and will fight telephone in hand to get your clients the best possible deals - with a sizeable profit margin for you, of course.")+''+ + '
'+loan[6]+''+ + '
'+me.quote+''):'')+ '