Advertisement
davidgro

CookieMonsterForkByDavidgro

Oct 20th, 2013
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Start_Cookie_Monster() {
  2.     if ($("#cookie_monster_bar").length != 0) {
  3.         alert("Cookie Monster " + version + "\n\nCookie Monster is already loaded, silly!");
  4.         return false
  5.     } else {
  6.         $("#topBar").css("display", "none");
  7.         $("#tooltip").css("margin-top", "32px");
  8.         $("#tooltip").css("pointer-events", "none");
  9.         $("#cookies").css("background", "rgba(0,0,0,0.75)");
  10.         $("#cookies").css("border-top", "1px solid black");
  11.         $("#cookies").css("border-bottom", "1px solid black");
  12.         $("#goldenCookie").css("cssText", "" + "z-index: 1000001 !important;");
  13.         $("#game").css("cssText", "" + "-webkit-touch-callout: none;" + "-webkit-user-select: none;" + "-khtml-user-select: none;" + "-moz-user-select: none;" + "-ms-user-select: none;" + "-o-user-select: none;" + "user-select: none;" + "top: 0px;" + "bottom: 57px;" + "");
  14.         $("#storeTitle").css("cssText", "" + "font-size: 18px;" + "padding: 4px 8px 2px 8px;" + "border-bottom: 1px solid black;" + "");
  15.         $("#storeTitle").after('<table cellpadding=0 cellspacing=0 style="width:300px; table-layout:fixed; padding:4px; font-weight:bold; background:rgba(0,0,0,0.6); border-bottom: 1px solid black; cursor:default;"><tr>' + '<td align=center style="color:#4bb8f0; padding:2px;" id="cm_up_q0">0</td>' + '<td align=center style="color:#00ff00; padding:2px;" id="cm_up_q1">0</td>' + '<td align=center style="color:#ffff00; padding:2px;" id="cm_up_q2">0</td>' + '<td align=center style="color:#ff7f00; padding:2px;" id="cm_up_q3">0</td>' + '<td align=center style="color:#ff0000; padding:2px;" id="cm_up_q4">0</td>' + '<td align=center style="color:#ff00ff; padding:2px;" id="cm_up_q5">0</td>' + "</tr></table>");
  16.         $("body").append('<div id="cookie_monster_bar" style="z-index:1000; position:absolute; bottom:0px; left:0px; width:100%; height:56px; border-top:1px solid black; cursor:default;' + "text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;" + "background: rgb(69,72,77); /* Old browsers */" + "background: -moz-linear-gradient(top,  rgba(69,72,77,1) 0%, rgba(0,0,0,1) 100%); /* FF3.6+ */" + "background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(69,72,77,1)), color-stop(100%,rgba(0,0,0,1))); /* Chrome,Safari4+ */" + "background: -webkit-linear-gradient(top,  rgba(69,72,77,1) 0%,rgba(0,0,0,1) 100%); /* Chrome10+,Safari5.1+ */" + "background: -o-linear-gradient(top,  rgba(69,72,77,1) 0%,rgba(0,0,0,1) 100%); /* Opera 11.10+ */" + "background: -ms-linear-gradient(top,  rgba(69,72,77,1) 0%,rgba(0,0,0,1) 100%); /* IE10+ */" + "background: linear-gradient(to bottom,  rgba(69,72,77,1) 0%,rgba(0,0,0,1) 100%); /* W3C */" + "filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#45484d', endColorstr='#000000',GradientType=0 ); /* IE6-9 */" + '"></div>');
  17.         $("body").append('<div id="cookie_monster_overlay" style="position:fixed; z-index:1000000; height:100%; width:100%; background:rgba(255,255,255,1); pointer-events:none; display:none;"></div>');
  18.         $("body").append('<div id="cookie_monster_golden_overlay" style="position:fixed; z-index:1000002; height:96px; width:96px; pointer-events:none; cursor:pointer; opacity:0; display:none; text-align:center; font-family: \'Kavoon\', Georgia,serif; font-size:32px; text-shadow: -2px 0 black, 0 2px black, 2px 0 black, 0 -2px black !important;" onclick="Game.goldenCookie.click();"></div>');
  19.         $("#sectionLeft").append('<div id="cookie_monster_timer_bars_div" style="position:absolute; z-index:1000; bottom:-1px; left:0px; width:100%; pointer-events:none; text-align:center; font-family: \'Kavoon\', Georgia,serif; font-size:16px; background:rgba(0,0,0,0.6); border-top:1px solid black;"></div>');
  20.         $("link").each(function () {
  21.             if ($(this).attr("href") == "img/favicon.ico") {
  22.                 $(this).attr("id", "cm_favicon")
  23.             }
  24.         });
  25.         Make_Table();
  26.         Save_Tooltips();
  27.         Update_Game_Scripts();
  28.         Load_Settings();
  29.         Set_Up_Tooltips();
  30.         Main_Loop();
  31.         Game.Popup('<span style="color:#FFFF00; text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black !important;">Cookie Monster ' + version + " Loaded!</span>")
  32.     }
  33. }
  34.  
  35. function Main_Loop() {
  36.     Update_Table();
  37.     Update_Tooltips("all");
  38.     Do_Emphasize();
  39.     Manage_Buffs();
  40.     loops++;
  41.     if (loops == 1) {
  42.         Game.RebuildStore()
  43.     }
  44.     setTimeout(function () {
  45.         Main_Loop()
  46.     }, settings[3])
  47. }
  48.  
  49. function Fav_Icon_Spinner(e) {
  50.     if (e > 6) {
  51.         e = 1
  52.     }
  53.     if (gc_avail == "(G) ") {
  54.         $("#cm_favicon").attr("href", "http://frozenelm.com/cookiemonster/images/cm_gc_" + e + ".png");
  55.         e++;
  56.         setTimeout(function () {
  57.             Fav_Icon_Spinner(e)
  58.         }, 250)
  59.     } else {
  60.         $("#cm_favicon").attr("href", "http://orteil.dashnet.org/cookieclicker/img/favicon.ico")
  61.     }
  62. }
  63.  
  64. function Load_Settings() {
  65.     settings = [1, 1, 1, 1e3, 1, 1, 1, 1, 0, 1, 1, 1, 1];
  66.     if (typeof Storage !== "undefined") {
  67.         if (localStorage.FlashScreen != undefined) {
  68.             settings[0] = localStorage.FlashScreen
  69.         } else {
  70.             localStorage.FlashScreen = 1;
  71.             settings[0] = 1
  72.         } if (localStorage.CookieTimer != undefined) {
  73.             settings[1] = localStorage.CookieTimer
  74.         } else {
  75.             localStorage.CookieTimer = 1;
  76.             settings[1] = 1
  77.         } if (localStorage.BuffBars != undefined) {
  78.             settings[2] = localStorage.BuffBars
  79.         } else {
  80.             localStorage.BuffBars = 1;
  81.             settings[2] = 1
  82.         } if (localStorage.Refresh != undefined) {
  83.             settings[3] = localStorage.Refresh
  84.         } else {
  85.             localStorage.Refresh = 1e3;
  86.             settings[3] = 1e3
  87.         } if (localStorage.CookieCD != undefined) {
  88.             settings[4] = localStorage.CookieCD
  89.         } else {
  90.             localStorage.CookieCD = 1;
  91.             settings[4] = 1
  92.         } if (localStorage.CMBar != undefined) {
  93.             settings[5] = localStorage.CMBar
  94.         } else {
  95.             localStorage.CMBar = 1;
  96.             settings[5] = 1
  97.         } if (localStorage.ColoredPrices != undefined) {
  98.             settings[6] = localStorage.ColoredPrices
  99.         } else {
  100.             localStorage.ColoredPrices = 1;
  101.             settings[6] = 1
  102.         } if (localStorage.ShortNumbers != undefined) {
  103.             settings[7] = localStorage.ShortNumbers
  104.         } else {
  105.             localStorage.ShortNumbers = 1;
  106.             settings[7] = 1
  107.         } if (localStorage.CookieSound != undefined) {
  108.             settings[8] = localStorage.CookieSound
  109.         } else {
  110.             localStorage.CookieSound = 0;
  111.             settings[8] = 0
  112.         } if (localStorage.UpdateTitle != undefined) {
  113.             settings[9] = localStorage.UpdateTitle
  114.         } else {
  115.             localStorage.UpdateTitle = 1;
  116.             settings[9] = 1
  117.         } if (localStorage.LuckyAlert != undefined) {
  118.             settings[10] = localStorage.LuckyAlert
  119.         } else {
  120.             localStorage.LuckyAlert = 1;
  121.             settings[10] = 1
  122.         } if (localStorage.UpgradeIcons != undefined) {
  123.             settings[11] = localStorage.UpgradeIcons
  124.         } else {
  125.             localStorage.UpgradeIcons = 1;
  126.             settings[11] = 1
  127.         } if (localStorage.UpgradeDisplay != undefined) {
  128.             settings[12] = localStorage.UpgradeDisplay
  129.         } else {
  130.             localStorage.UpgradeDisplay = 1;
  131.             settings[12] = 1
  132.         }
  133.     }
  134.     Show_Hide_CM_Bar()
  135. }
  136.  
  137. function Save_Settings() {
  138.     if (typeof Storage !== "undefined") {
  139.         localStorage.FlashScreen = settings[0];
  140.         localStorage.CookieTimer = settings[1];
  141.         localStorage.BuffBars = settings[2];
  142.         localStorage.Refresh = settings[3];
  143.         localStorage.CookieCD = settings[4];
  144.         localStorage.CMBar = settings[5];
  145.         localStorage.ColoredPrices = settings[6];
  146.         localStorage.ShortNumbers = settings[7];
  147.         localStorage.CookieSound = settings[8];
  148.         localStorage.UpdateTitle = settings[9];
  149.         localStorage.LuckyAlert = settings[10];
  150.         localStorage.UpgradeIcons = settings[11];
  151.         localStorage.UpgradeDisplay = settings[12]
  152.     } else {}
  153.     Show_Hide_CM_Bar()
  154. }
  155.  
  156. function Show_Hide_CM_Bar() {
  157.     if (settings[5] == 0) {
  158.         $("#cookie_monster_bar").css("display", "none");
  159.         $("#game").css("bottom", "0px")
  160.     } else {
  161.         $("#cookie_monster_bar").css("display", "");
  162.         $("#game").css("bottom", "57px")
  163.     }
  164. }
  165.  
  166. function Update_Game_Scripts() {
  167.     Game.Logic = new Function("", Game.Logic.toString().replace(".title=", ".title=gc_avail+").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  168.     var e = "\n\n'<div class=\"subsection\">'+" + '\'<div class="title"><span style="color:#4bb8f0;">Cookie Monster Goodies</span></div>\'+' + "'<div class=\"listing\"><b>\"Lucky!\" Cookies Required:</b> ' + CM_Lucky('reg', false) + '</div>'+" + "'<div class=\"listing\"><b>\"Lucky!\" Cookies Required (Frenzy):</b> ' + CM_Lucky('frenzy', false) + '</div>'+" + "'<div class=\"listing\"><b>\"Lucky!\" Reward (MAX):</b> ' + CM_Lucky_Reward('max') + '</div>'+" + "'<div class=\"listing\"><b>\"Lucky!\" Reward (MAX) (Frenzy):</b> ' + CM_Lucky_Reward('max_frenzy') + '</div>'+" + "'<div class=\"listing\"><b>\"Lucky!\" Reward (CUR):</b> ' + CM_Lucky_Reward('cur') + '</div>'+" + "'</br><div class=\"listing\"><b>Heavenly Chips (MAX):</b> ' + CM_Heavenly_Chip('max') + '</div>'+" + "'<div class=\"listing\"><b>Heavenly Chips (CUR):</b> ' + CM_Heavenly_Chip('cur') + '</div>'+" + "'<div class=\"listing\"><b>Cookies To Next Chip:</b> ' + CM_Heavenly_Chip('next') + '</div>'+" + "'<div class=\"listing\"><b>Time To Next Chip:</b> ' + CM_Heavenly_Chip('time') + '</div>'+" + "'</div>'+";
  169.     Game.UpdateMenu = new Function("", Game.UpdateMenu.toString().replace("Statistics</div>'+", "Statistics</div>'+" + e).replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  170.     var t = "\n'<div class=\"subsection\">'+" + '\'<div class="title"><span style="color:#4bb8f0;">Cookie Monster Settings</span></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Flash Screen \' + CM_Option_State(0) + \'</a><label>Flashes the screen when a Golden Cookie or Red Cookie appears</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Cookie Timer \' + CM_Option_State(1) + \'</a><label>Displays a timer on Golden Cookies and Red Cookies</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Cookie Sound \' + CM_Option_State(8) + \'</a><label>Plays a sound when a Golden Cookie or Red Cookie appears</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Next Cookie Timer \' + CM_Option_State(4) + \'</a><label>Displays a countdown bar and updates the Title for when the next Cookie will appear</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Update Title \' + CM_Option_State(9) + \'</a><label>Updates the Title to display if a Cookie is waiting to be clicked</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Buff Bars \' + CM_Option_State(2) + \'</a><label>Displays a countdown bar for each effect currently active</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Bottom Bar \' + CM_Option_State(5) + \'</a><label>Displays a bar at the bottom of the screen that shows all Building information</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Colored Prices \' + CM_Option_State(6) + \'</a><label>Changes the colors of all Building prices to correspond with their Cost Per Income</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Upgrade Icons \' + CM_Option_State(11) + \'</a><label>Displays a small square icon on the Upgrade to better display the Cost Per Income color value</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Short Numbers \' + CM_Short_Numbers() + \'</a><label>Formats all numbers to be shorter when displayed</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Upgrade Display (\' + CM_Upgrade_Display() + \')</a><label>Changes how the store displays Upgrades</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Lucky Alert (\' + CM_Lucky_Alert() + \')</a><label>Changes the tooltip to display if you would be under the number of cookies required for "Lucky!"</label></div>\'+' + '\'<div class="listing"><a class="option" onclick="CM_Option_Toggle(this);">Refresh Rate (\' + CM_Refresh() + \' fps)</a><label>The rate at which Cookie Monster updates data (higher rates may slow the game)</label></div>\'+' + "'</div>'+";
  171.     Game.UpdateMenu = new Function("", Game.UpdateMenu.toString().replace("OFF')+'</div>'+", "OFF')+'</div>'+" + t).replace("startDate=Game.sayTime(date.getTime()/1000*Game.fps,2);", "startDate = formatTime(((new Date).getTime() - Game.startDate) / 1000, '');").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  172.     var n = "\n" + "var cm_id = from.id;" + '\nif(cm_id == "") { cm_id = $(from).parents(".product").prop("id"); }' + '\nif(cm_id == "product5" || cm_id == "product6" || cm_id == "product7" || cm_id == "product8" || cm_id == "product9") { y -= 100; }' + '\nif(cm_id == "product8" || cm_id == "product9") { y -= 13; }' + '\nif(cm_id == "product9" && settings[7] == 0) { y -= 13; }' + "\n";
  173.     Game.tooltip.draw = new Function("from,text,x,y,origin", Game.tooltip.draw.toString().replace("implemented');}", "implemented');}" + n).replace("this.on=1;", "this.on=1;\nUpdate_Tooltips('all');").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  174.     Game.Reset = new Function("bypass", Game.Reset.toString().replace("Game.researchT=0;", "Game.researchT=0;\n$('#cookie_monster_timer_bars_div').text('');").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  175.     Game.LoadSave = new Function("data", Game.LoadSave.toString().replace("Game.Popup('Game loaded');", "Game.Popup('Game loaded');\n$('#cookie_monster_timer_bars_div').text('');").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  176.     Game.RebuildStore = new Function("", Game.RebuildStore.toString().replace("l('products').innerHTML=str;", "l('products').innerHTML=str;\nUpdate_Tooltips('ob');").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  177.     Game.Draw = new Function("", Game.Draw.toString().replace("Beautify(Math.round(Game.cookiesd))", "formatNumB(Game.cookiesd)").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""));
  178.     var r = "return formatNum(what);";
  179.     Beautify = new Function("what,floats", Beautify.toString().replace("var str='';", r + "\nvar str='';").replace(/^function[^{]+{/i, "").replace(/}[^}]*$/i, ""))
  180. }
  181.  
  182. function CM_Heavenly_Chip(e) {
  183.     var t = cookies_to_h_chips(Game.cookiesReset + Game.cookiesEarned);
  184.     var n = cookies_to_h_chips(Game.cookiesReset + Game.cookiesEarned + sell_out);
  185.     var r = cookies_to_h_chips(Game.cookiesReset);
  186.     var i = h_chips_to_cookies(t + 1) - (Game.cookiesReset + Game.cookiesEarned);
  187.     var s = h_chips_to_cookies(n + 1) - (Game.cookiesReset + Game.cookiesEarned + sell_out);
  188.     if (e == "max") {
  189.         return formatNum(t) + " <small>(" + formatNum(t * 2) + "%)</small>"
  190.     }
  191.     if (e == "max_sell_out") {
  192.         return formatNum(n) + " <small>(" + formatNum(n * 2) + "%)</small>"
  193.     }
  194.     if (e == "cur") {
  195.         return formatNum(r) + " <small>(" + formatNum(r * 2) + "%)</small>"
  196.     }
  197.     if (e == "next") {
  198.         return formatNum(Math.round(i))
  199.     }
  200.     if (e == "next_sell_out") {
  201.         return formatNum(Math.round(s))
  202.     }
  203.     if (e == "time") {
  204.         return formatTime(Math.round(i / Game.cookiesPs), "")
  205.     }
  206. }
  207.  
  208. function cookies_to_h_chips(e) {
  209.     return Math.floor(Math.sqrt(2.5 * Math.pow(10, 11) + 2 * e) / Math.pow(10, 6) - .5)
  210. }
  211.  
  212. function h_chips_to_cookies(e) {
  213.     return 5 * Math.pow(10, 11) * e * (e + 1)
  214. }
  215.  
  216. function CM_Upgrade_Display() {
  217.     switch (settings[12] * 1) {
  218.     case 1:
  219.         return "Normal";
  220.     case 2:
  221.         return "All";
  222.     case 0:
  223.         return "None";
  224.     default:
  225.         return "Normal"
  226.     }
  227. }
  228.  
  229. function CM_Short_Numbers() {
  230.     switch (settings[7] * 1) {
  231.     case 1:
  232.         return "ON (A)";
  233.     case 2:
  234.         return "ON (B)";
  235.     case 0:
  236.         return "OFF";
  237.     default:
  238.         return "OFF"
  239.     }
  240. }
  241.  
  242. function CM_Lucky_Alert() {
  243.     switch (settings[10] * 1) {
  244.     case 1:
  245.         return "Both";
  246.     case 2:
  247.         return "Icons";
  248.     case 3:
  249.         return "Notes";
  250.     case 0:
  251.         return "Off";
  252.     default:
  253.         return "Both"
  254.     }
  255. }
  256.  
  257. function CM_Refresh() {
  258.     switch (settings[3] * 1) {
  259.     case 1e3:
  260.         return "1";
  261.     case 500:
  262.         return "2";
  263.     case 250:
  264.         return "4";
  265.     case 100:
  266.         return "10";
  267.     case 33:
  268.         return "30";
  269.     default:
  270.         return "1"
  271.     }
  272. }
  273.  
  274. function CM_Option_State(e) {
  275.     if (settings[e] == 0) {
  276.         return "OFF"
  277.     }
  278.     return "ON"
  279. }
  280.  
  281. function CM_Option_Toggle(e) {
  282.     e = $(e);
  283.     var t = e.text();
  284.     switch (t) {
  285.     case "Flash Screen ON":
  286.         settings[0] = 0;
  287.         e.text("Flash Screen OFF");
  288.         break;
  289.     case "Flash Screen OFF":
  290.         settings[0] = 1;
  291.         e.text("Flash Screen ON");
  292.         break;
  293.     case "Cookie Sound ON":
  294.         settings[8] = 0;
  295.         e.text("Cookie Sound OFF");
  296.         break;
  297.     case "Cookie Sound OFF":
  298.         settings[8] = 1;
  299.         e.text("Cookie Sound ON");
  300.         break;
  301.     case "Cookie Timer ON":
  302.         settings[1] = 0;
  303.         e.text("Cookie Timer OFF");
  304.         break;
  305.     case "Cookie Timer OFF":
  306.         settings[1] = 1;
  307.         e.text("Cookie Timer ON");
  308.         break;
  309.     case "Next Cookie Timer ON":
  310.         settings[4] = 0;
  311.         e.text("Next Cookie Timer OFF");
  312.         break;
  313.     case "Next Cookie Timer OFF":
  314.         settings[4] = 1;
  315.         e.text("Next Cookie Timer ON");
  316.         break;
  317.     case "Update Title ON":
  318.         settings[9] = 0;
  319.         e.text("Update Title OFF");
  320.         break;
  321.     case "Update Title OFF":
  322.         settings[9] = 1;
  323.         e.text("Update Title ON");
  324.         break;
  325.     case "Buff Bars ON":
  326.         settings[2] = 0;
  327.         e.text("Buff Bars OFF");
  328.         break;
  329.     case "Buff Bars OFF":
  330.         settings[2] = 1;
  331.         e.text("Buff Bars ON");
  332.         break;
  333.     case "Bottom Bar ON":
  334.         settings[5] = 0;
  335.         e.text("Bottom Bar OFF");
  336.         break;
  337.     case "Bottom Bar OFF":
  338.         settings[5] = 1;
  339.         e.text("Bottom Bar ON");
  340.         break;
  341.     case "Colored Prices ON":
  342.         settings[6] = 0;
  343.         e.text("Colored Prices OFF");
  344.         Update_Tooltips("ob");
  345.         break;
  346.     case "Colored Prices OFF":
  347.         settings[6] = 1;
  348.         e.text("Colored Prices ON");
  349.         Update_Tooltips("ob");
  350.         break;
  351.     case "Upgrade Icons ON":
  352.         settings[11] = 0;
  353.         e.text("Upgrade Icons OFF");
  354.         Game.RebuildUpgrades();
  355.         break;
  356.     case "Upgrade Icons OFF":
  357.         settings[11] = 1;
  358.         e.text("Upgrade Icons ON");
  359.         Game.RebuildUpgrades();
  360.         break;
  361.     case "Upgrade Display (All)":
  362.         settings[12] = 0;
  363.         e.text("Upgrade Display (None)");
  364.         Update_Upgrade_Display();
  365.         break;
  366.     case "Upgrade Display (None)":
  367.         settings[12] = 1;
  368.         e.text("Upgrade Display (Normal)");
  369.         Update_Upgrade_Display();
  370.         break;
  371.     case "Upgrade Display (Normal)":
  372.         settings[12] = 2;
  373.         e.text("Upgrade Display (All)");
  374.         Update_Upgrade_Display();
  375.         break;
  376.     case "Short Numbers ON (B)":
  377.         settings[7] = 0;
  378.         e.text("Short Numbers OFF");
  379.         Game.RebuildStore();
  380.         Game.RebuildUpgrades();
  381.         Update_Table();
  382.         break;
  383.     case "Short Numbers OFF":
  384.         settings[7] = 1;
  385.         e.text("Short Numbers ON (A)");
  386.         Game.RebuildStore();
  387.         Game.RebuildUpgrades();
  388.         Update_Table();
  389.         break;
  390.     case "Short Numbers ON (A)":
  391.         settings[7] = 2;
  392.         e.text("Short Numbers ON (B)");
  393.         Game.RebuildStore();
  394.         Game.RebuildUpgrades();
  395.         Update_Table();
  396.         break;
  397.     case "Lucky Alert (Both)":
  398.         settings[10] = 2;
  399.         e.text("Lucky Alert (Icons)");
  400.         break;
  401.     case "Lucky Alert (Icons)":
  402.         settings[10] = 3;
  403.         e.text("Lucky Alert (Notes)");
  404.         break;
  405.     case "Lucky Alert (Notes)":
  406.         settings[10] = 0;
  407.         e.text("Lucky Alert (Off)");
  408.         break;
  409.     case "Lucky Alert (Off)":
  410.         settings[10] = 1;
  411.         e.text("Lucky Alert (Both)");
  412.         break;
  413.     case "Refresh Rate (1 fps)":
  414.         settings[3] = 500;
  415.         e.text("Refresh Rate (2 fps)");
  416.         break;
  417.     case "Refresh Rate (2 fps)":
  418.         settings[3] = 250;
  419.         e.text("Refresh Rate (4 fps)");
  420.         break;
  421.     case "Refresh Rate (4 fps)":
  422.         settings[3] = 100;
  423.         e.text("Refresh Rate (10 fps)");
  424.         break;
  425.     case "Refresh Rate (10 fps)":
  426.         settings[3] = 33;
  427.         e.text("Refresh Rate (30 fps)");
  428.         break;
  429.     case "Refresh Rate (30 fps)":
  430.         settings[3] = 1e3;
  431.         e.text("Refresh Rate (1 fps)");
  432.         break
  433.     }
  434.     Save_Settings()
  435. }
  436.  
  437. function Update_Upgrade_Display() {
  438.     var e = $("#upgrades");
  439.     switch (settings[12] * 1) {
  440.     case 1:
  441.         e.css("cssText", "");
  442.         break;
  443.     case 2:
  444.         e.css("cssText", "height: auto !important;");
  445.         break;
  446.     case 0:
  447.         e.css("cssText", "height: 0px !important;");
  448.         break
  449.     }
  450. }
  451.  
  452. function CM_Lucky(e, t) {
  453.     var n = Game.cookiesPs;
  454.     if (Game.frenzy > 0) {
  455.         n = n / Game.frenzyPower
  456.     }
  457.     if (e == "frenzy") {
  458.         n = n * 7
  459.     }
  460.     var r = Math.round((n * 1200 + 13) / .1);
  461.     if (!t) {
  462.         if (r <= Game.cookies) {
  463.             r = '<span style="color:#00FF00; font-weight:bold;">' + formatNum(r) + "</span>"
  464.         } else {
  465.             r = formatNum(r)
  466.         }
  467.     }
  468.     return r
  469. }
  470.  
  471. function CM_Lucky_Reward(e) {
  472.     var t = Game.cookiesPs;
  473.     if (Game.frenzy > 0 && e != "cur") {
  474.         t = t / Game.frenzyPower
  475.     }
  476.     if (e == "max_frenzy") {
  477.         t = t * 7
  478.     }
  479.     var n = new Array(Math.round(t * 1200 + 13), Math.round(Game.cookies * .1 + 13));
  480.     if (e == "max" || e == "max_frenzy") {
  481.         if (Math.round((t * 1200 + 13) / .1) > Game.cookies) {
  482.             return formatNum(n[0])
  483.         }
  484.     }
  485.     return formatNum(Math.min.apply(Math, n))
  486. }
  487.  
  488. function Save_Tooltips() {
  489.     Game.UpgradesById.forEach(function (e, t) {
  490.         tooltips[t] = e.desc
  491.     });
  492.     Game.ObjectsById.forEach(function (e, t) {
  493.         building_tooltips[t] = e.desc
  494.     })
  495. }
  496.  
  497. function Set_Up_Tooltips() {
  498.     var e = false;
  499.     Game.UpgradesById.forEach(function (t, n) {
  500.         for (var r = 0; r < upgrade_count; r++) {
  501.             if (_cup(r, n, true)) {
  502.                 t.desc = Manage_Tooltip(r, n, true, false);
  503.                 e = true;
  504.                 break
  505.             }
  506.         }
  507.         if (t.bought && t.desc != tooltips[n]) {
  508.             t.desc = tooltips[n];
  509.             e = true
  510.         }
  511.     });
  512.     if (e) {
  513.         Game.RebuildUpgrades()
  514.     }
  515. }
  516.  
  517. function Update_Tooltips(e) {
  518.     if (e == "all" || e == "up") {
  519.         in_store = new Array(0, 0, 0, 0, 0, 0);
  520.         Game.UpgradesById.forEach(function (e, t) {
  521.             for (var n = 0; n < upgrade_count; n++) {
  522.                 if (_cup(n, t, false)) {
  523.                     Manage_Tooltip(n, t, false, false);
  524.                     break
  525.                 }
  526.             }
  527.         })
  528.     }
  529.     if (e == "all" || e == "ob") {
  530.         Game.ObjectsById.forEach(function (e, t) {
  531.             Manage_Building_Tooltip(e)
  532.         })
  533.     }
  534. }
  535.  
  536. function _cup(e, t, n) {
  537.     up = Game.UpgradesById[t];
  538.     if (up.desc.indexOf("cm_up_div_") == -1 && !n) {
  539.         return false
  540.     }
  541.     switch (e) {
  542.     case 0:
  543.         if (!up.bought && up.name == "Reinforced index finger") {
  544.             return true
  545.         }
  546.         break;
  547.     case 1:
  548.         if (!up.bought && up.desc.indexOf("The mouse and cursors are <b>twice</b> as efficient.") != -1) {
  549.             return true
  550.         }
  551.         break;
  552.     case 2:
  553.         if (!up.bought && up.desc.indexOf("The mouse and cursors gain") != -1) {
  554.             return true
  555.         }
  556.         break;
  557.     case 3:
  558.         if (!up.bought && up.name == "Forwards from grandma") {
  559.             return true
  560.         }
  561.         break;
  562.     case 4:
  563.         if (!up.bought && up.desc.indexOf("Grandmas are <b>twice</b> as ") != -1) {
  564.             return true
  565.         }
  566.         break;
  567.     case 5:
  568.         if (!up.bought && up.name == "Cheap hoes") {
  569.             return true
  570.         }
  571.         break;
  572.     case 6:
  573.         if (!up.bought && up.desc.indexOf("Farms are <b>twice</b> as efficient.") != -1) {
  574.             return true
  575.         }
  576.         break;
  577.     case 7:
  578.         if (!up.bought && up.name == "Sturdier conveyor belts") {
  579.             return true
  580.         }
  581.         break;
  582.     case 8:
  583.         if (!up.bought && up.desc.indexOf("Factories are <b>twice</b> as efficient.") != -1) {
  584.             return true
  585.         }
  586.         break;
  587.     case 9:
  588.         if (!up.bought && up.name == "Sugar gas") {
  589.             return true
  590.         }
  591.         break;
  592.     case 10:
  593.         if (!up.bought && up.desc.indexOf("Mines are <b>twice</b> as efficient.") != -1) {
  594.             return true
  595.         }
  596.         break;
  597.     case 11:
  598.         if (!up.bought && up.name == "Vanilla nebulae") {
  599.             return true
  600.         }
  601.         break;
  602.     case 12:
  603.         if (!up.bought && up.desc.indexOf("Shipments are <b>twice</b> as efficient.") != -1) {
  604.             return true
  605.         }
  606.         break;
  607.     case 13:
  608.         if (!up.bought && up.name == "Antimony") {
  609.             return true
  610.         }
  611.         break;
  612.     case 14:
  613.         if (!up.bought && up.desc.indexOf("Alchemy labs are <b>twice</b> as efficient.") != -1) {
  614.             return true
  615.         }
  616.         break;
  617.     case 15:
  618.         if (!up.bought && up.name == "Ancient tablet") {
  619.             return true
  620.         }
  621.         break;
  622.     case 16:
  623.         if (!up.bought && up.desc.indexOf("Portals are <b>twice</b> as efficient.") != -1) {
  624.             return true
  625.         }
  626.         break;
  627.     case 17:
  628.         if (!up.bought && up.name == "Flux capacitors") {
  629.             return true
  630.         }
  631.         break;
  632.     case 18:
  633.         if (!up.bought && up.desc.indexOf("Time machines are <b>twice</b> as efficient.") != -1) {
  634.             return true
  635.         }
  636.         break;
  637.     case 19:
  638.         if (!up.bought && up.desc.indexOf("the more milk you have") != -1) {
  639.             return true
  640.         }
  641.         break;
  642.     case 20:
  643.         if (!up.bought && up.desc.indexOf("Cookie production multiplier <b>+") != -1) {
  644.             return true
  645.         }
  646.         break;
  647.     case 21:
  648.         if (!up.bought && up.desc.indexOf("for every 50 grandmas") != -1) {
  649.             return true
  650.         }
  651.         break;
  652.     case 22:
  653.         if (!up.bought && up.desc.indexOf("for every 20 portals") != -1) {
  654.             return true
  655.         }
  656.         break;
  657.     case 23:
  658.         if (!up.bought && up.name == "Elder Pledge") {
  659.             return true
  660.         }
  661.         break;
  662.     case 24:
  663.         if (!up.bought && up.name == "Elder Covenant") {
  664.             return true
  665.         }
  666.         break;
  667.     case 25:
  668.         if (!up.bought && up.name == "Sacrificial rolling pins") {
  669.             return true
  670.         }
  671.         break;
  672.     case 26:
  673.         if (!up.bought && up.desc.indexOf("Golden cookie") != -1) {
  674.             return true
  675.         }
  676.         break;
  677.     case 27:
  678.         if (!up.bought && up.desc.indexOf("Clicking gains <b>+1% of your CpS</b>.") != -1) {
  679.             return true
  680.         }
  681.         break;
  682.     case 28:
  683.         if (!up.bought && up.desc.indexOf("Grandmas are <b>4 times</b> as efficient.") != -1) {
  684.             return true
  685.         }
  686.         break;
  687.     case 29:
  688.         if (!up.bought && up.desc.indexOf("Antimatter condensers are <b>twice</b> as efficient.") != -1) {
  689.             return true
  690.         }
  691.         break;
  692.     case 30:
  693.         if (!up.bought && up.name == "Sugar bosons") {
  694.             return true
  695.         }
  696.         break;
  697.     case 31:
  698.         if (!up.bought && up.name == "Revoke Elder Covenant") {
  699.             return true
  700.         }
  701.         break;
  702.     case 32:
  703.         if (!up.bought && up.desc.indexOf("heavenly chips") != -1) {
  704.             return true
  705.         }
  706.         break
  707.     }
  708.     return false
  709. }
  710.  
  711. function Manage_Tooltip(e, t, n, r) {
  712.     var i = 0;
  713.     var s = 0;
  714.     switch (e) {
  715.     case 0:
  716.         i = _bam("The mouse and cursors", .1, 0);
  717.         break;
  718.     case 1:
  719.         i = _bte(0);
  720.         break;
  721.     case 2:
  722.         i = _mcg(t);
  723.         break;
  724.     case 3:
  725.         i = _bam("Grandmas", .3, 1);
  726.         break;
  727.     case 4:
  728.         i = _bte(1);
  729.         if (_lgt(t)) {
  730.             s++
  731.         }
  732.         break;
  733.     case 5:
  734.         i = _bam("Farms", .5, 2);
  735.         break;
  736.     case 6:
  737.         i = _bte(2);
  738.         break;
  739.     case 7:
  740.         i = _bam("Factories", 4, 3);
  741.         break;
  742.     case 8:
  743.         i = _bte(3);
  744.         break;
  745.     case 9:
  746.         i = _bam("Mines", 10, 4);
  747.         break;
  748.     case 10:
  749.         i = _bte(4);
  750.         break;
  751.     case 11:
  752.         i = _bam("Shipments", 30, 5);
  753.         break;
  754.     case 12:
  755.         i = _bte(5);
  756.         break;
  757.     case 13:
  758.         i = _bam("Alchemy labs", 100, 6);
  759.         break;
  760.     case 14:
  761.         i = _bte(6);
  762.         break;
  763.     case 15:
  764.         i = _bam("Portals", 1666, 7);
  765.         break;
  766.     case 16:
  767.         i = _bte(7);
  768.         break;
  769.     case 17:
  770.         i = _bam("Time machines", 9876, 8);
  771.         break;
  772.     case 18:
  773.         i = _bte(8);
  774.         break;
  775.     case 21:
  776.         i = _gpg();
  777.         break;
  778.     case 22:
  779.         i = _gpp();
  780.         break;
  781.     case 23:
  782.         s += _cha("Elder nap");
  783.         if (Game.pledges == 4) {
  784.             s += _cha("Elder slumber")
  785.         }
  786.         break;
  787.     case 24:
  788.         s += _cha("Elder calm");
  789.         break;
  790.     case 28:
  791.         i = _fte(1);
  792.         break;
  793.     case 29:
  794.         i = _bte(9);
  795.         break;
  796.     case 30:
  797.         i = _bam("Antimatter condensers", 99999, 9);
  798.         break;
  799.     case 32:
  800.         i = _dhc(s, t, i);
  801.         if (_lhc(t)) {
  802.             s += _cha("Wholesome")
  803.         }
  804.         break
  805.     }
  806.     if (Game.UpgradesOwned == 19) {
  807.         s += _cha("Enhancer")
  808.     }
  809.     if (Game.UpgradesOwned == 49) {
  810.         s += _cha("Augmenter")
  811.     }
  812.     if (Game.UpgradesOwned == 99) {
  813.         s += _cha("Upgrader")
  814.     }
  815.     i += Get_Achi_Worth(s, t, i, 0);
  816.     if (r) {
  817.         return i
  818.     }
  819.     return tooltips[t] + Colorize(i, t, n)
  820. }
  821.  
  822. function _dhc(e, t, n) {
  823.     var r = Game.UpgradesById[t];
  824.     var i = r.desc.indexOf("<b>") + 3;
  825.     var s = r.desc.indexOf("%");
  826.     var o = r.desc.substr(i, s - i) * 1;
  827.     var u = Get_Achi_Worth(e, t, n, Game.prestige["Heavenly chips"] * 2 * (o / 100));
  828.     return u - Game.cookiesPs
  829. }
  830.  
  831. function _lhc(e) {
  832.     if (Game.UpgradesById[e].name == "Heavenly key") {
  833.         return true
  834.     }
  835.     return false
  836. }
  837.  
  838. function _cpc() {
  839.     return Game.mouseCps() * .01 * usr_clk
  840. }
  841.  
  842. function _lgt(e) {
  843.     if (_cha("Elder") == 1 && Game.UpgradesById[e].name.indexOf(" grandmas") != -1) {
  844.         var t = new Array;
  845.         var n = new Array;
  846.         Game.UpgradesById.forEach(function (e, r) {
  847.             if (e.bought && e.name.indexOf(" grandmas") != -1) {
  848.                 t.push(r)
  849.             } else if (!e.bought && e.name.indexOf(" grandmas") != -1) {
  850.                 n.push(r)
  851.             }
  852.         });
  853.         if (n.length == 1 && n[0] == e) {
  854.             return true
  855.         }
  856.     }
  857.     return false
  858. }
  859.  
  860. function _cha(e) {
  861.     var t = 0;
  862.     Game.AchievementsById.forEach(function (n, r) {
  863.         if (!n.won && n.name == e) {
  864.             t = 1
  865.         }
  866.     });
  867.     return t
  868. }
  869.  
  870. function _gpp() {
  871.     var e = 1;
  872.     Game.UpgradesById.forEach(function (t, n) {
  873.         if (t.bought && t.desc.indexOf("Grandmas are <b>twice</b> as ") != -1) {
  874.             e = e * 2
  875.         }
  876.         if (t.bought && t.desc.indexOf("Grandmas are <b>4 times</b> as efficient.") != -1) {
  877.             e = e * 4
  878.         }
  879.     });
  880.     return Game.ObjectsById[7].amount * .05 * e * Game.ObjectsById[1].amount * Game.globalCpsMult
  881. }
  882.  
  883. function _gpg() {
  884.     var e = 1;
  885.     Game.UpgradesById.forEach(function (t, n) {
  886.         if (t.bought && t.desc.indexOf("Grandmas are <b>twice</b> as ") != -1) {
  887.             e = e * 2
  888.         }
  889.         if (t.bought && t.desc.indexOf("Grandmas are <b>4 times</b> as efficient.") != -1) {
  890.             e = e * 4
  891.         }
  892.     });
  893.     return Game.ObjectsById[1].amount * .02 * e * Game.ObjectsById[1].amount * Game.globalCpsMult
  894. }
  895.  
  896. function _mcg(e) {
  897.     var t = Game.UpgradesById[e].desc;
  898.     var n = 31;
  899.     if (t.indexOf(" another ") != -1) {
  900.         n += 8
  901.     }
  902.     var r = t.substr(n, t.indexOf("<", n) - n) * 1;
  903.     return r * (Game.BuildingsOwned - Game.ObjectsById[0].amount) * Game.ObjectsById[0].amount * Game.globalCpsMult
  904. }
  905.  
  906. function _bte(e) {
  907.     return Game.ObjectsById[e].storedTotalCps * Game.globalCpsMult
  908. }
  909.  
  910. function _fte(e) {
  911.     return Game.ObjectsById[e].storedTotalCps * 3 * Game.globalCpsMult
  912. }
  913.  
  914. function _bam(e, t, n) {
  915.     var r = 1;
  916.     Game.UpgradesById.forEach(function (t, n) {
  917.         if (t.bought && t.desc.indexOf(e + " are <b>twice</b> as efficient.") != -1) {
  918.             r = r * 2
  919.         }
  920.         if (t.bought && t.desc.indexOf(e + " are <b>4 times</b> as efficient.") != -1) {
  921.             r = r * 4
  922.         }
  923.     });
  924.     return t * r * Game.ObjectsById[n].amount * Game.globalCpsMult
  925. }
  926.  
  927. function _inc(e) {
  928.     var t = 0;
  929.     Game.AchievementsById.forEach(function (n, r) {
  930.         var i = n.desc.replace(/,/g, "");
  931.         if (!n.won && i.indexOf(" per second.") != -1) {
  932.             if (e >= i.substr(8, i.indexOf("</b>", 8) - 8) * 1) {
  933.                 t++
  934.             }
  935.         }
  936.     });
  937.     return t
  938. }
  939.  
  940. function Get_Achi_Worth(e, t, n, r) {
  941.     var i = 0;
  942.     var s = Calc_Heavenly_Mult();
  943.     if (r != 0) {
  944.         s = r
  945.     }
  946.     var o = 0;
  947.     var u = new Array(0, 0, 0, 0);
  948.     var a = Game.milkProgress;
  949.     var f = Get_Frenzy_Mult();
  950.     Game.UpgradesById.forEach(function (e, n) {
  951.         var r = e.desc.replace("[Research]<br>", "");
  952.         if (e.bought && r.indexOf("Cookie production multiplier <b>+") != -1) {
  953.             s += r.substr(33, r.indexOf("%", 33) - 33) * 1
  954.         }
  955.         if (!e.bought && r.indexOf("Cookie production multiplier <b>+") != -1 && e.id == t) {
  956.             o += r.substr(33, r.indexOf("%", 33) - 33) * 1
  957.         }
  958.         if (e.bought && e.name == "Kitten helpers") {
  959.             u[0] = .05
  960.         }
  961.         if (e.bought && e.name == "Kitten workers") {
  962.             u[1] = .1
  963.         }
  964.         if (e.bought && e.name == "Kitten engineers") {
  965.             u[2] = .2
  966.         }
  967.         if (e.bought && e.name == "Kitten overseers") {
  968.             u[3] = .2
  969.         }
  970.     });
  971.     var l = 100 + s;
  972.     l = l * (1 + u[0] * a);
  973.     l = l * (1 + u[1] * a);
  974.     l = l * (1 + u[2] * a);
  975.     l = l * (1 + u[3] * a);
  976.     var c = n;
  977.     var h = (Game.cookiesPs + c) / Game.globalCpsMult * (l / 100) * f;
  978.     a += e * .04;
  979.     l = 100 + s + o;
  980.     l = l * (1 + u[0] * a);
  981.     l = l * (1 + u[1] * a);
  982.     l = l * (1 + u[2] * a);
  983.     l = l * (1 + u[3] * a);
  984.     var p = 0;
  985.     switch (Game.UpgradesById[t].name) {
  986.     case "Kitten helpers":
  987.         p = .05;
  988.         break;
  989.     case "Kitten workers":
  990.         p = .1;
  991.         break;
  992.     case "Kitten engineers":
  993.         p = .2;
  994.         break;
  995.     case "Kitten overseers":
  996.         p = .2;
  997.         break
  998.     }
  999.     l = l * (1 + p * a);
  1000.     i = (Game.cookiesPs + c) / Game.globalCpsMult * (l / 100) * f - h;
  1001.     var d = _inc(i + h);
  1002.     if (d > 0) {
  1003.         a += d * .04;
  1004.         l = 100 + s + o;
  1005.         l = l * (1 + u[0] * a);
  1006.         l = l * (1 + u[1] * a);
  1007.         l = l * (1 + u[2] * a);
  1008.         l = l * (1 + u[3] * a);
  1009.         l = l * (1 + p * a);
  1010.         i = (Game.cookiesPs + c) / Game.globalCpsMult * (l / 100) * f - h
  1011.     }
  1012.     if (r != 0) {
  1013.         i = (Game.cookiesPs + c) / Game.globalCpsMult * (l / 100) * f
  1014.     }
  1015.     if (Game.Has("Elder Covenant")) {
  1016.         i *= .95
  1017.     }
  1018.     return i
  1019. }
  1020.  
  1021. function Calc_Heavenly_Mult() {
  1022.     var e = Game.prestige["Heavenly chips"] * 2;
  1023.     var t = 0;
  1024.     if (Game.Has("Heavenly chip secret")) {
  1025.         t += .05
  1026.     }
  1027.     if (Game.Has("Heavenly cookie stand")) {
  1028.         t += .2
  1029.     }
  1030.     if (Game.Has("Heavenly bakery")) {
  1031.         t += .25
  1032.     }
  1033.     if (Game.Has("Heavenly confectionery")) {
  1034.         t += .25
  1035.     }
  1036.     if (Game.Has("Heavenly key")) {
  1037.         t += .25
  1038.     }
  1039.     return e * t
  1040. }
  1041.  
  1042. function Get_Frenzy_Mult() {
  1043.     if (Game.frenzy > 0) {
  1044.         return Game.frenzyPower
  1045.     }
  1046.     return 1
  1047. }
  1048.  
  1049. function Manage_Building_Tooltip(e) {
  1050.     var t = e.id;
  1051.     var n = new Array(CM_Lucky("reg", true), CM_Lucky("frenzy", true));
  1052.     var r = new Array("none", "none");
  1053.     var s = new Array("", "");
  1054.     var o = new Array(0, 0);
  1055.     if (Game.cookies - e.price < n[0]) {
  1056.         r[0] = "block";
  1057.         o[0] = n[0] - (Game.cookies - e.price)
  1058.     }
  1059.     if (Game.cookies - e.price < n[1]) {
  1060.         r[1] = "block";
  1061.         o[1] = n[1] - (Game.cookies - e.price)
  1062.     }
  1063.     if (e.desc == building_tooltips[e.id]) {
  1064.         e.desc += '<div id="cm_ob_div_' + t + '" style="position:relative; height:96px; background:#222222; border:1px solid #000000; margin:6px -6px -6px -6px; display:none;"></div>';
  1065.         e.desc += '<div id="cm_ob_lucky_div_' + t + '" style="position:absolute; top:-25px; left:-12px; height:32px;">' + '<div id="cm_ob_lucky_div_warning" style="background:url(http://frozenelm.com/cookiemonster/images/warning.png); position:relative; float:left; height:32px; width:32px; display:none;"></div>' + '<div id="cm_ob_lucky_div_caution" style="background:url(http://frozenelm.com/cookiemonster/images/caution.png); position:relative; float:left; height:32px; width:32px; display:none;"></div>' + "</div>";
  1066.         e.desc += '<div id="cm_ob_note_div_' + t + '" style="position:absolute; left:0px; margin-top:10px; color:white;">' + '<div id="cm_ob_note_div_warning" style="background:#222222; position:relative; display:none; margin-top:4px; padding:2px; border:1px solid #FF0000;"><b style="color:#FF0000;">Warning:</b> Purchase of this item will put you under the number of Cookies required for "Lucky!"</br><span id="cm_ob_warning_amount"></span>' + '<div id="cm_ob_lucky_div_warning" style="position:absolute; left:-10px; top:-10px; height:32px; width:32px;"><img src="http://frozenelm.com/cookiemonster/images/warning.png" height=16px width=16px></div></div>' + '<div id="cm_ob_note_div_caution" style="background:#222222; position:relative; display:none; margin-top:4px; padding:2px; border:1px solid #FFFF00;"><b style="color:#FFFF00;">Caution:</b> Purchase of this item will put you under the number of Cookies required for "Lucky!" (Frenzy)</br><span id="cm_ob_caution_amount"></span>' + '<div id="cm_ob_lucky_div_warning" style="position:absolute; left:-10px; top:-10px; height:32px; width:32px;"><img src="http://frozenelm.com/cookiemonster/images/caution.png" height=16px width=16px></div></div>' + "</div>";
  1067.         Game.RebuildStore()
  1068.     }
  1069.     var u = new Array("FFFF00", "FFFF00");
  1070.     var a = new Array(hold_cpi[t], hold_tc[t]);
  1071.     var f = new Array(Math.max.apply(Math, hold_cpi), Math.max.apply(Math, hold_tc));
  1072.     var l = new Array(Math.min.apply(Math, hold_cpi), Math.min.apply(Math, hold_tc));
  1073.     for (i = 0; i < u.length; i++) {
  1074.         if (a[i] == l[i]) {
  1075.             u[i] = "00FF00"
  1076.         } else if (a[i] == f[i]) {
  1077.             u[i] = "FF0000"
  1078.         } else if (f[i] - a[i] < a[i] - l[i]) {
  1079.             u[i] = "FF7F00"
  1080.         }
  1081.     }
  1082.     if ($("#cm_ob_div_" + t).length == 1) {
  1083.         $("#cm_ob_div_" + t).css("border", "1px solid #" + u[0]);
  1084.         $("#cm_ob_div_" + t).css("display", "");
  1085.         $("#cm_ob_div_" + t).html('<div style="position:absolute; top:4px; left:4px; color:#4bb8f0; font-weight:bold;">Bonus Income</div><div align=right style="position:absolute; top:18px; left:4px; color:white;">' + formatNum(hold_is[t]) + '</div><div style="position:absolute; top:34px; left:4px; color:#4bb8f0; font-weight:bold;">Base Cost Per Income</div><div align=right style="position:absolute; top:48px; left:4px; color:#' + u[0] + ';">' + formatNum(a[0]) + '</div><div style="position:absolute; top:64px; left:4px; color:#4bb8f0; font-weight:bold;">Time Left</div><div align=right style="position:absolute; top:78px; left:4px; color:#' + u[1] + ';">' + formatTime(a[1], "") + "</div>");
  1086.         $("#cm_ob_warning_amount").text("Deficit: " + formatNum(o[0]));
  1087.         $("#cm_ob_caution_amount").text("Deficit: " + formatNum(o[1]));
  1088.         if (settings[10] == 1 || settings[10] == 2) {
  1089.             $("#cm_ob_lucky_div_warning").css("display", r[0]);
  1090.             $("#cm_ob_lucky_div_caution").css("display", r[1])
  1091.         } else {
  1092.             $("#cm_ob_lucky_div_warning").css("display", "none");
  1093.             $("#cm_ob_lucky_div_caution").css("display", "none")
  1094.         } if (settings[10] == 1 || settings[10] == 3) {
  1095.             $("#cm_ob_note_div_warning").css("display", r[0]);
  1096.             $("#cm_ob_note_div_caution").css("display", r[1])
  1097.         } else {
  1098.             $("#cm_ob_note_div_warning").css("display", "none");
  1099.             $("#cm_ob_note_div_caution").css("display", "none")
  1100.         }
  1101.     }
  1102.     if (settings[6] == 1) {
  1103.         $("#product" + t).find(".price").first().css("color", "#" + u[0])
  1104.     } else {
  1105.         $("#product" + t).find(".price").first().css("color", "")
  1106.     }
  1107. }
  1108.  
  1109. function Make_Table() {
  1110.     var e = '<th align=left width=130 style="color:#FFFF00;"> ' + version + "</th>";
  1111.     var t = "";
  1112.     var n = "";
  1113.     var r = "";
  1114.     var i = "";
  1115.     Game.ObjectsById.forEach(function (t, s) {
  1116.         e += '<th align=middle id="cookie_monster_item_' + s + '" style="font-weight:bold;"></th>';
  1117.         n += '<td align=middle id="cookie_monster_is_' + s + '"></td>';
  1118.         r += '<td align=middle id="cookie_monster_cpi_' + s + '"></td>';
  1119.         i += '<td align=middle id="cookie_monster_tc_' + s + '"></td>'
  1120.     });
  1121.     $("#cookie_monster_bar").html("" + '<table style="width:100%; table-layout:fixed; margin-top:2px;">' + "<tr>" + e + "</tr>" + '<tr><th align=right style="color:#4bb8f0;">Bonus Income</th>' + n + "</tr>" + '<tr><th align=right style="color:#4bb8f0;">Base Cost Per Income</th>' + r + "</tr>" + '<tr><th align=right style="color:#4bb8f0;">Time Left</th>' + i + "</tr>" + "</table>")
  1122. }
  1123.  
  1124. function Update_Table() {
  1125.     Game.ObjectsById.forEach(function (e, t) {
  1126.         var n = e.price;
  1127.         var r = e.amount;
  1128.         var i = e.storedTotalCps;
  1129.         var s = e.storedCps * Game.globalCpsMult;
  1130.         if (e.name == "Grandma") {
  1131.             s = 0
  1132.         }
  1133.         var o = Math.round((s + Get_Upgrade_Bonuses(e.name, r, s)) * 100) / 100;
  1134.         var u = Math.round(n / o * 100) / 100;
  1135.         var a = e.name.replace(/([^\s]+)/, "");
  1136.         hold_item[t] = e.name.replace(a, "") + ' (<span style="color:#4bb8f0;">' + formatNum(r) + "</span>)";
  1137.         hold_is[t] = Math.round(o * 100) / 100;
  1138.         hold_tc[t] = Math.round(Seconds_Left(t, "ob"))
  1139.         hold_cpi[t] = Math.round(u * 100) / 100 + Math.round(Seconds_Total(t, "ob"));
  1140.     });
  1141.     Game.ObjectsById.forEach(function (e, t) {
  1142.         var n = new Array("FFFF00", "FFFF00");
  1143.         var r = new Array(hold_cpi[t], hold_tc[t]);
  1144.         var s = new Array(Math.max.apply(Math, hold_cpi), Math.max.apply(Math, hold_tc));
  1145.         var o = new Array(Math.min.apply(Math, hold_cpi), Math.min.apply(Math, hold_tc));
  1146.         for (i = 0; i < n.length; i++) {
  1147.             if (r[i] == o[i]) {
  1148.                 n[i] = "00FF00"
  1149.             } else if (r[i] == s[i]) {
  1150.                 n[i] = "FF0000"
  1151.             } else if (s[i] - r[i] < r[i] - o[i]) {
  1152.                 n[i] = "FF7F00"
  1153.             }
  1154.         }
  1155.         $("#cookie_monster_item_" + t).html(hold_item[t]);
  1156.         $("#cookie_monster_is_" + t).html(formatNum(hold_is[t]));
  1157.         $("#cookie_monster_cpi_" + t).html('<span style="color:#' + n[0] + ';">' + formatNum(r[0]) + "</span>");
  1158.         $("#cookie_monster_tc_" + t).html('<span style="color:#' + n[1] + ';">' + formatTime(r[1], "min") + "</span>")
  1159.     })
  1160. }
  1161.  
  1162. function Do_Emphasize() {
  1163.     var e = $("#cookie_monster_golden_overlay");
  1164.     var t = $("#goldenCookie");
  1165.     if (t.css("display") == "none" && !emphasize) {
  1166.         emphasize = true;
  1167.         gc_avail = ""
  1168.     }
  1169.     if (t.css("display") != "none" && emphasize) {
  1170.         emphasize = false;
  1171.         if (settings[9] == 1) {
  1172.             gc_avail = "(G) ";
  1173.             Fav_Icon_Spinner(1)
  1174.         }
  1175.         if (settings[8] == 1) {
  1176.             var n = new Audio("http://frozenelm.com/cookiemonster/sounds/ba%20dink.mp3");
  1177.             n.volume = 1;
  1178.             n.play()
  1179.         }
  1180.         if (settings[0] == 1) {
  1181.             $("#cookie_monster_overlay").fadeIn(100);
  1182.             $("#cookie_monster_overlay").fadeOut(500)
  1183.         }
  1184.     }
  1185.     if (t.css("display") != "none" && settings[1] == 1) {
  1186.         e.css("display", "block");
  1187.         e.css("opacity", t.css("opacity"));
  1188.         e.css("left", t.css("left"));
  1189.         e.css("top", t.css("top"));
  1190.         e.html('<div style="position:absolute; top:30px; width:96px; height:36px;">' + Math.round(Game.goldenCookie.life / Game.fps) + "</div>")
  1191.     } else {
  1192.         e.css("display", "none")
  1193.     }
  1194. }
  1195.  
  1196. function Manage_Buffs() {
  1197.     var e = "";
  1198.     var t = "";
  1199.     var n = 0;
  1200.     var r = 0;
  1201.     var i = 13 + 13 * Game.Has("Get lucky");
  1202.     var s = new Array(Game.goldenCookie.time, Game.goldenCookie.minTime, Game.goldenCookie.maxTime);
  1203.     var o = parseInt($("#cookie_monster_timer_bars_div").css("width"));
  1204.     switch (Game.frenzyPower) {
  1205.     case 7:
  1206.         n = 77 + 77 * Game.Has("Get lucky");
  1207.         e = "Frenzy";
  1208.         t = "FFFF00";
  1209.         break;
  1210.     case 666:
  1211.         n = 6 + 6 * Game.Has("Get lucky");
  1212.         e = "Blood Frenzy";
  1213.         t = "00FF00";
  1214.         break;
  1215.     case .5:
  1216.         n = 66 + 66 * Game.Has("Get lucky");
  1217.         e = "Clot";
  1218.         t = "FF0000";
  1219.         break
  1220.     }
  1221.     if (Game.frenzy > 0 && settings[2] == 1) {
  1222.         if ($("#cookie_monster_timer_" + t).length != 1) {
  1223.             $("#cookie_monster_timer_bars_div").append('<div id="cookie_monster_timer_' + t + '" style="padding:4px 0px 5px 0px;"><table cellpadding=0 cellspacing=0 style="font-style:inherit; color:inherit;  width:100%;"><tr>' + '<td style="width:130px; text-align:right;">' + e + "<td>" + '<td><div id="cmt_' + t + '" style="position:relative; background:#' + t + "; height:10px; width:" + Game.frenzy / s[2] * 100 + '%; margin-left:4px; border:1px solid black;"><div id="cmt_time_' + t + '" style="text-align:left; position:absolute; right:-50px; top:-5px; width:45px;">' + n + "</div></div></td>" + '<td style="width:55px;"></td>' + "</table></div>")
  1224.         } else {
  1225.             $("#cmt_" + t).css("width", Game.frenzy / s[2] * 100 + "%");
  1226.             $("#cmt_time_" + t).text(Math.round(Game.frenzy / Game.fps))
  1227.         }
  1228.         $("#cookie_monster_timer_" + t).fadeIn(250);
  1229.         if ($("#cookie_monster_timer_FFFF00").css("opacity") == "1" && t != "FFFF00") {
  1230.             $("#cookie_monster_timer_FFFF00").fadeOut(250)
  1231.         }
  1232.         if ($("#cookie_monster_timer_00FF00").css("opacity") == "1" && t != "00FF00") {
  1233.             $("#cookie_monster_timer_00FF00").fadeOut(250)
  1234.         }
  1235.         if ($("#cookie_monster_timer_FF0000").css("opacity") == "1" && t != "FF0000") {
  1236.             $("#cookie_monster_timer_FF0000").fadeOut(250)
  1237.         }
  1238.     } else if ($("#cookie_monster_timer_" + t).length == 1 && $("#cookie_monster_timer_" + t).css("opacity") == "1") {
  1239.         $("#cookie_monster_timer_" + t).fadeOut(250)
  1240.     }
  1241.     if (Game.clickFrenzy > 0 && settings[2] == 1) {
  1242.         if ($("#cookie_monster_timer_4BB8F0").length != 1) {
  1243.             $("#cookie_monster_timer_bars_div").append('<div id="cookie_monster_timer_4BB8F0" style="padding:4px 0px 5px 0px;"><table cellpadding=0 cellspacing=0 style="font-style:inherit; color:inherit;  width:100%;"><tr>' + '<td style="width:130px; text-align:right;">Click Frenzy<td>' + '<td><div id="cmt_4BB8F0" style="position:relative; background:#4BB8F0; height:10px; width:' + Game.clickFrenzy / s[2] * 100 + '%; margin-left:4px; border:1px solid black;"><div id="cmt_time_4BB8F0" style="text-align:left; position:absolute; right:-50px; top:-5px; width:45px;">' + i + "</div></div></td>" + '<td style="width:55px;"></td>' + "</table></div>")
  1244.         } else {
  1245.             $("#cmt_4BB8F0").css("width", Game.clickFrenzy / s[2] * 100 + "%");
  1246.             $("#cmt_time_4BB8F0").text(Math.round(Game.clickFrenzy / Game.fps))
  1247.         }
  1248.         $("#cookie_monster_timer_4BB8F0").fadeIn(250)
  1249.     } else if ($("#cookie_monster_timer_4BB8F0").length == 1 && $("#cookie_monster_timer_4BB8F0").css("opacity") == "1") {
  1250.         $("#cookie_monster_timer_4BB8F0").fadeOut(250)
  1251.     }
  1252.     if (s[0] > 0 && $("#goldenCookie").css("display") == "none" && settings[4] == 1) {
  1253.         if ($("#cookie_monster_timer_FF00FF").length != 1) {
  1254.             $("#cookie_monster_timer_bars_div").append("" + '<div id="cookie_monster_timer_FF00FF" style="padding:4px 0px 5px 0px;"><table cellpadding=0 cellspacing=0 style="font-style:inherit; color:inherit;  width:100%;"><tr>' + '<td style="width:130px; text-align:right;">Next Cookie<td>' + '<td><div id="cmt_FF00FF" style="position:relative; background:#aaaaaa; height:10px; width:100%; margin-left:4px; border:1px solid black;"><div id="cmt2_FF00FF" style="position:relative; background:#FF00FF; height:10px; width:100%; margin-left:0px; max-width:' + (o - 189) * .67 + 'px; float:right;"></div><div id="cmt_time_FF00FF" style="text-align:left; position:absolute; right:-50px; top:-5px; width:45px;">' + Math.round((s[2] - s[0]) / Game.fps) + "</div></div></td>" + '<td style="width:55px;"></td>' + "</table></div>")
  1255.         } else {
  1256.             $("#cmt2_FF00FF").css("max-width", (o - 189) * .67 + "px");
  1257.             $("#cmt_FF00FF").css("width", (s[2] - s[0]) / s[2] * 100 + "%");
  1258.             $("#cmt_time_FF00FF").text(Math.round((s[2] - s[0]) / Game.fps))
  1259.         }
  1260.         $("#cookie_monster_timer_FF00FF").fadeIn(250)
  1261.     } else if ($("#cookie_monster_timer_FF00FF").length == 1 && $("#cookie_monster_timer_FF00FF").css("opacity") == "1") {
  1262.         $("#cookie_monster_timer_FF00FF").fadeOut(250)
  1263.     }
  1264.     if ((s[2] - s[0]) / Game.fps > 0 && $("#goldenCookie").css("display") == "none") {
  1265.         if (settings[4] == 1) {
  1266.             gc_avail = "(" + Math.round((s[2] - s[0]) / Game.fps) + ") "
  1267.         } else {
  1268.             gc_avail = ""
  1269.         }
  1270.     }
  1271.     $("#versionNumber").css("bottom", $("#cookie_monster_timer_bars_div").css("height"))
  1272. }
  1273.  
  1274. function Get_Upgrade_Bonuses(e, t, n) {
  1275.     var r = 0;
  1276.     var i = 0;
  1277.     switch (e) {
  1278.     case "Cursor":
  1279.         if (t == 0) {
  1280.             i += _cha("Click")
  1281.         }
  1282.         if (t == 1) {
  1283.             i += _cha("Double-click")
  1284.         }
  1285.         if (t == 49) {
  1286.             i += _cha("Mouse wheel")
  1287.         }
  1288.         if (t == 99) {
  1289.             i += _cha("Of Mice and Men")
  1290.         }
  1291.         if (t == 199) {
  1292.             i += _cha("The Digital")
  1293.         }
  1294.         break;
  1295.     case "Grandma":
  1296.         r += Get_Grandma_Mod_Total(t) * Game.globalCpsMult;
  1297.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1298.         if (t == 0) {
  1299.             i += _cha("Grandma's Cookies")
  1300.         }
  1301.         if (t == 49) {
  1302.             i += _cha("Sloppy kisses")
  1303.         }
  1304.         if (t == 99) {
  1305.             i += _cha("Retirement home")
  1306.         }
  1307.         if (t == 149) {
  1308.             i += _cha("Friend of the ancients")
  1309.         }
  1310.         if (t == 199) {
  1311.             i += _cha("Ruler of the ancients")
  1312.         }
  1313.         break;
  1314.     case "Farm":
  1315.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1316.         if (t == 0) {
  1317.             i += _cha("My first farm")
  1318.         }
  1319.         if (t == 49) {
  1320.             i += _cha("Reap what you sow")
  1321.         }
  1322.         if (t == 99) {
  1323.             i += _cha("Farm ill")
  1324.         }
  1325.         break;
  1326.     case "Factory":
  1327.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1328.         if (t == 0) {
  1329.             i += _cha("Production chain")
  1330.         }
  1331.         if (t == 49) {
  1332.             i += _cha("Industrial revolution")
  1333.         }
  1334.         if (t == 99) {
  1335.             i += _cha("Global warming")
  1336.         }
  1337.         break;
  1338.     case "Mine":
  1339.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1340.         if (t == 0) {
  1341.             i += _cha("You know the drill")
  1342.         }
  1343.         if (t == 49) {
  1344.             i += _cha("Excavation site")
  1345.         }
  1346.         if (t == 99) {
  1347.             i += _cha("Hollow the planet")
  1348.         }
  1349.         break;
  1350.     case "Shipment":
  1351.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1352.         if (t == 0) {
  1353.             i += _cha("Expedition")
  1354.         }
  1355.         if (t == 49) {
  1356.             i += _cha("Galactic highway")
  1357.         }
  1358.         if (t == 99) {
  1359.             i += _cha("Far far away")
  1360.         }
  1361.         break;
  1362.     case "Alchemy lab":
  1363.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1364.         if (t == 0) {
  1365.             i += _cha("Transmutation")
  1366.         }
  1367.         if (t == 49) {
  1368.             i += _cha("Transmogrification")
  1369.         }
  1370.         if (t == 99) {
  1371.             i += _cha("Gold member")
  1372.         }
  1373.         break;
  1374.     case "Portal":
  1375.         r += Get_Portal_Mod_Total() * Game.globalCpsMult;
  1376.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1377.         if (t == 0) {
  1378.             i += _cha("A whole new world")
  1379.         }
  1380.         if (t == 49) {
  1381.             i += _cha("Now you're thinking")
  1382.         }
  1383.         if (t == 99) {
  1384.             i += _cha("Dimensional shift")
  1385.         }
  1386.         break;
  1387.     case "Time machine":
  1388.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1389.         if (t == 0) {
  1390.             i += _cha("Time warp")
  1391.         }
  1392.         if (t == 49) {
  1393.             i += _cha("Alternate timeline")
  1394.         }
  1395.         if (t == 99) {
  1396.             i += _cha("Rewriting history")
  1397.         }
  1398.         break;
  1399.     case "Antimatter condenser":
  1400.         r += Get_Cursor_Mod_Total() * Game.globalCpsMult;
  1401.         if (t == 0) {
  1402.             i += _cha("Antibatter")
  1403.         }
  1404.         if (t == 49) {
  1405.             i += _cha("Quirky quarks")
  1406.         }
  1407.         if (t == 99) {
  1408.             i += _cha("It does matter!")
  1409.         }
  1410.         break
  1411.     }
  1412.     if (Game.BuildingsOwned == 99) {
  1413.         i += _cha("Builder")
  1414.     }
  1415.     if (Game.BuildingsOwned == 399) {
  1416.         i += _cha("Architect")
  1417.     }
  1418.     if (Game.BuildingsOwned == 799) {
  1419.         i += _cha("Engineer")
  1420.     }
  1421.     if (_owe(e)) {
  1422.         i++
  1423.     }
  1424.     if (_mat(e)) {
  1425.         i++
  1426.     }
  1427.     if (_bat(e)) {
  1428.         i++
  1429.     }
  1430.     if (_cen(e)) {
  1431.         i++
  1432.     }
  1433.     return r + Get_Achi_Worth(i, 0, r + n, 0)
  1434. }
  1435.  
  1436. function _bat(e) {
  1437.     if (_cha("Base 10") == 1) {
  1438.         var t = new Array;
  1439.         var n = new Array;
  1440.         Game.ObjectsById.forEach(function (e, r) {
  1441.             t.push(e.name);
  1442.             n.push(e.amount)
  1443.         });
  1444.         t.forEach(function (t, r) {
  1445.             if (t == e) {
  1446.                 n[r]++
  1447.             }
  1448.         });
  1449.         var r = n.length * 10;
  1450.         for (var i = 0; i < n.length; i++) {
  1451.             if (n[i] < r) {
  1452.                 return false
  1453.             }
  1454.             r = r - 10
  1455.         }
  1456.         return true
  1457.     }
  1458.     return false
  1459. }
  1460.  
  1461. function _mat(e) {
  1462.     if (_cha("Mathematician") == 1) {
  1463.         var t = new Array;
  1464.         var n = new Array;
  1465.         Game.ObjectsById.forEach(function (e, r) {
  1466.             t.push(e.name);
  1467.             n.push(e.amount)
  1468.         });
  1469.         t.forEach(function (t, r) {
  1470.             if (t == e) {
  1471.                 n[r]++
  1472.             }
  1473.         });
  1474.         var r = 128;
  1475.         for (var i = 0; i < n.length; i++) {
  1476.             if (i > 2) {
  1477.                 r = r / 2
  1478.             }
  1479.             if (n[i] < r) {
  1480.                 return false
  1481.             }
  1482.         }
  1483.         return true
  1484.     }
  1485.     return false
  1486. }
  1487.  
  1488. function _owe(e) {
  1489.     if (_cha("One with everything") == 1) {
  1490.         var t = new Array;
  1491.         var n = new Array;
  1492.         Game.ObjectsById.forEach(function (e, r) {
  1493.             if (e.amount > 0) {
  1494.                 t.push(e.name)
  1495.             } else {
  1496.                 n.push(e.name)
  1497.             }
  1498.         });
  1499.         if (n.length == 1 && n[0] == e) {
  1500.             return true
  1501.         }
  1502.     }
  1503.     return false
  1504. }
  1505.  
  1506. function _cen(e) {
  1507.     if (_cha("Centennial") == 1) {
  1508.         var t = new Array;
  1509.         var n = new Array;
  1510.         Game.ObjectsById.forEach(function (e, r) {
  1511.             if (e.amount >= 100) {
  1512.                 t.push(e.name)
  1513.             } else {
  1514.                 n.push(e)
  1515.             }
  1516.         });
  1517.         if (n.length == 1 && n[0].name == e && n[0].amount == 99) {
  1518.             return true
  1519.         }
  1520.     }
  1521.     return false
  1522. }
  1523.  
  1524. function Get_Cursor_Mod_Total() {
  1525.     var e = 0;
  1526.     Game.UpgradesById.forEach(function (t, n) {
  1527.         if (t.bought && t.desc.indexOf("The mouse and cursors gain") != -1) {
  1528.             var r = 31;
  1529.             if (t.desc.indexOf(" another ") != -1) {
  1530.                 r += 8
  1531.             }
  1532.             e += t.desc.substr(r, t.desc.indexOf("<", r) - r) * 1
  1533.         }
  1534.     });
  1535.     return e * Game.ObjectsById[0].amount
  1536. }
  1537.  
  1538. function Get_Grandma_Mod_Total(e) {
  1539.     var t = .5;
  1540.     var n = 0;
  1541.     var r = 1;
  1542.     Game.UpgradesById.forEach(function (i, s) {
  1543.         if (i.bought && i.name == "Forwards from grandma") {
  1544.             t += .3
  1545.         }
  1546.         if (i.bought && i.desc.indexOf("Grandmas are <b>twice</b> as ") != -1) {
  1547.             r = r * 2
  1548.         }
  1549.         if (i.bought && i.desc.indexOf("Grandmas are <b>4 times</b> as efficient.") != -1) {
  1550.             r = r * 4
  1551.         }
  1552.         if (i.bought && i.desc.indexOf("for every 50 grandmas") != -1) {
  1553.             n += (e + 1) * .02 * (e + 1) - e * .02 * e
  1554.         }
  1555.         if (i.bought && i.desc.indexOf("for every 20 portals") != -1) {
  1556.             n += Game.ObjectsById[7].amount * .05
  1557.         }
  1558.     });
  1559.     return t * r + n * r
  1560. }
  1561.  
  1562. function Get_Portal_Mod_Total() {
  1563.     var e = 0;
  1564.     var t = 1;
  1565.     Game.UpgradesById.forEach(function (n, r) {
  1566.         if (n.bought && n.desc.indexOf("Grandmas are <b>twice</b> as ") != -1) {
  1567.             t = t * 2
  1568.         }
  1569.         if (n.bought && n.desc.indexOf("Grandmas are <b>4 times</b> as efficient.") != -1) {
  1570.             t = t * 4
  1571.         }
  1572.         if (n.bought && n.desc.indexOf("for every 20 portals") != -1) {
  1573.             e += Game.ObjectsById[1].amount * .05
  1574.         }
  1575.     });
  1576.     return e * t
  1577. }
  1578.  
  1579. function inStore(e) {
  1580.     if (Game.UpgradesInStore.indexOf(e) != -1) {
  1581.         return true
  1582.     }
  1583.     return false
  1584. }
  1585.  
  1586. function formatNum(e) {
  1587.     return _sts(e, false).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  1588. }
  1589.  
  1590. function formatNumB(e) {
  1591.     return _sts(e, true).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
  1592. }
  1593.  
  1594. function formatTime(e, t) {
  1595.     e = Math.round(e);
  1596.     if (e == Infinity) {
  1597.         return "Never"
  1598.     }
  1599.     if (e == 0) {
  1600.         return "Done!"
  1601.     }
  1602.     if (e / 86400 > 1e3) {
  1603.         return "> 1,000 days"
  1604.     }
  1605.     var n = parseInt(e / 86400) % 999;
  1606.     var r = parseInt(e / 3600) % 24;
  1607.     var i = parseInt(e / 60) % 60;
  1608.     var s = e % 60;
  1609.     var o = new Array(" days, ", " hours, ", " minutes, ", " seconds");
  1610.     if (t != "min") {
  1611.         if (n == 1) {
  1612.             o[0] = " day, "
  1613.         }
  1614.         if (r == 1) {
  1615.             o[1] = " hour, "
  1616.         }
  1617.         if (i == 1) {
  1618.             o[2] = " minute, "
  1619.         }
  1620.         if (s == 1) {
  1621.             o[3] = " second"
  1622.         }
  1623.     } else {
  1624.         o = new Array("d, ", "h, ", "m, ", "s")
  1625.     }
  1626.     var u = "";
  1627.     if (n > 0) {
  1628.         u = u + n + o[0]
  1629.     }
  1630.     if (n > 0 || r > 0) {
  1631.         u = u + r + o[1]
  1632.     }
  1633.     if (n > 0 || r > 0 || i > 0) {
  1634.         u = u + i + o[2]
  1635.     }
  1636.     if (n > 0 || r > 0 || i > 0 || s > 0) {
  1637.         u = u + s + o[3]
  1638.     }
  1639.     return u
  1640. }
  1641.  
  1642. function Colorize(e, t, n) {
  1643.     var r = Game.UpgradesById[t];
  1644.     var s = r.basePrice;
  1645.     var o = new Array("FFFF00", "FFFF00");
  1646.     var u = new Array(Math.round(s / e * 100) / 100, Math.round(Seconds_Left(t, "up")));
  1647.     var a = new Array(Math.max.apply(Math, hold_cpi), Math.max.apply(Math, hold_tc));
  1648.     var f = new Array(Math.min.apply(Math, hold_cpi), Math.min.apply(Math, hold_tc));
  1649.     for (i = 0; i < o.length; i++) {
  1650.         if (u[i] < f[i]) {
  1651.             o[i] = "4BB8F0";
  1652.             if (inStore(r) && i == 0) {
  1653.                 in_store[0]++
  1654.             }
  1655.         } else if (u[i] == f[i]) {
  1656.             o[i] = "00FF00";
  1657.             if (inStore(r) && i == 0) {
  1658.                 in_store[1]++
  1659.             }
  1660.         } else if (u[i] == a[i]) {
  1661.             o[i] = "FF0000";
  1662.             if (inStore(r) && i == 0) {
  1663.                 in_store[4]++
  1664.             }
  1665.         } else if (u[i] > a[i]) {
  1666.             o[i] = "FF00FF";
  1667.             if (inStore(r) && i == 0) {
  1668.                 in_store[5]++
  1669.             }
  1670.         } else if (a[i] - u[i] < u[i] - f[i]) {
  1671.             o[i] = "FF7F00";
  1672.             if (inStore(r) && i == 0) {
  1673.                 in_store[3]++
  1674.             }
  1675.         } else {
  1676.             if (inStore(r) && i == 0) {
  1677.                 in_store[2]++
  1678.             }
  1679.         }
  1680.     }
  1681.     for (i = 0; i < in_store.length; i++) {
  1682.         $("#cm_up_q" + i).text(in_store[i])
  1683.     }
  1684.     if (settings[11] && inStore(r)) {
  1685.         $("#upgrade" + Game.UpgradesInStore.indexOf(r)).html('<div style="background-color:#' + o[0] + '; border:1px solid black; position:absolute; z-index:21; top:2px; left:2px; height:14px; width:14px; pointer-events:none;"></div>')
  1686.     }
  1687.     if ($("#cm_up_div_" + t).length == 1) {
  1688.         var l = new Array(CM_Lucky("reg", true), CM_Lucky("frenzy", true));
  1689.         var c = new Array("none", "none");
  1690.         var h = new Array(0, 0);
  1691.         if (Game.cookies - s < l[0]) {
  1692.             c[0] = "block";
  1693.             h[0] = l[0] - (Game.cookies - s)
  1694.         }
  1695.         if (Game.cookies - s < l[1]) {
  1696.             c[1] = "block";
  1697.             h[1] = l[1] - (Game.cookies - s)
  1698.         }
  1699.         $("#cm_up_div_" + t).css("border", "1px solid #" + o[0]);
  1700.         $("#cm_up_div_" + t).css("display", "");
  1701.         $("#cm_up_div_" + t).html('<div style="position:absolute; top:4px; left:4px; color:#4bb8f0; font-weight:bold;">Bonus Income</div><div align=right style="position:absolute; top:18px; left:4px; color:white;">' + formatNum(Math.round(e * 100) / 100) + '</div><div style="position:absolute; top:34px; left:4px; color:#4bb8f0; font-weight:bold;">Base Cost Per Income</div><div align=right style="position:absolute; top:48px; left:4px; color:#' + o[0] + ';">' + formatNum(u[0]) + '</div><div style="position:absolute; top:64px; left:4px; color:#4bb8f0; font-weight:bold;">Time Left</div><div align=right style="position:absolute; top:78px; left:4px; color:#' + o[1] + ';">' + formatTime(u[1], "min") + "</div>");
  1702.         $("#cm_up_warning_amount").text("Deficit: " + formatNum(h[0]));
  1703.         $("#cm_up_caution_amount").text("Deficit: " + formatNum(h[1]));
  1704.         if (settings[10] == 1 || settings[10] == 2) {
  1705.             $("#cm_up_lucky_div_warning").css("display", c[0]);
  1706.             $("#cm_up_lucky_div_caution").css("display", c[1])
  1707.         } else {
  1708.             $("#cm_up_lucky_div_warning").css("display", "none");
  1709.             $("#cm_up_lucky_div_caution").css("display", "none")
  1710.         } if (settings[10] == 1 || settings[10] == 3) {
  1711.             $("#cm_up_note_div_warning").css("display", c[0]);
  1712.             $("#cm_up_note_div_caution").css("display", c[1])
  1713.         } else {
  1714.             $("#cm_up_note_div_warning").css("display", "none");
  1715.             $("#cm_up_note_div_caution").css("display", "none")
  1716.         }
  1717.     }
  1718.     if (n) {
  1719.         o = "000000";
  1720.         return '<div id="cm_up_lucky_div_' + t + '" style="position:absolute; top:-25px; left:-12px; height:32px;">' + '<div id="cm_up_lucky_div_warning" style="background:url(http://frozenelm.com/images/cookiemonster/warning.png); position:relative; float:left; height:32px; width:32px; display:none;"></div>' + '<div id="cm_up_lucky_div_caution" style="background:url(http://frozenelm.com/images/cookiemonster/caution.png); position:relative; float:left; height:32px; width:32px; display:none;"></div>' + "</div>" + '<div id="cm_up_div_' + t + '" style="position:relative; height:96px; background:#222222; border:1px solid #' + o + '; margin:6px -6px -6px -6px; display:none;"></div>' + '<div id="cm_up_note_div_' + t + '" style="position:absolute; left:0px; margin-top:10px; color:white;">' + '<div id="cm_up_note_div_warning" style="background:#222222; position:relative; display:none; margin-top:4px; padding:2px; border:1px solid #FF0000;"><b style="color:#FF0000;">Warning:</b> Purchase of this item will put you under the number of Cookies required for "Lucky!"</br><span id="cm_up_warning_amount"></span>' + '<div id="cm_up_lucky_div_warning" style="position:absolute; left:-10px; top:-10px; height:32px; width:32px;"><img src="http://frozenelm.com/images/cookiemonster/warning.png" height=16px width=16px></div></div>' + '<div id="cm_up_note_div_caution" style="background:#222222; position:relative; display:none; margin-top:4px; padding:2px; border:1px solid #FFFF00;"><b style="color:#FFFF00;">Caution:</b> Purchase of this item will put you under the number of Cookies required for "Lucky!" (Frenzy)</br><span id="cm_up_caution_amount"></span>' + '<div id="cm_up_lucky_div_warning" style="position:absolute; left:-10px; top:-10px; height:32px; width:32px;"><img src="http://frozenelm.com/images/cookiemonster/caution.png" height=16px width=16px></div></div>' + "</div>"
  1721.     }
  1722. }
  1723.  
  1724. function Factor_Time(e) {
  1725.     var t = Game.cookies - e;
  1726.     var n = Game.cookiesPs;
  1727.     if (n == 0) {
  1728.         return 1
  1729.     }
  1730.     if (t < 0) {
  1731.         var r = e / n;
  1732.         return 1 - t * -1 / n / r
  1733.     }
  1734.     return 1
  1735. }
  1736.  
  1737. function Seconds_Left(e, t) {
  1738.     var n = 0;
  1739.     if (t == "ob") {
  1740.         n = Game.ObjectsById[e].price
  1741.     }
  1742.     if (t == "up") {
  1743.         n = Game.UpgradesById[e].basePrice
  1744.     }
  1745.     var r = Game.cookies - n;
  1746.     var i = Game.cookiesPs;
  1747.     if (i == 0) {
  1748.         return 0
  1749.     }
  1750.     if (r < 0) {
  1751.         var s = n / i;
  1752.         var o = r * -1 / i;
  1753.         return o
  1754.     }
  1755.     return 0
  1756. }
  1757.  
  1758. function Seconds_Total(e, t) {
  1759.     var n = 0;
  1760.     if (t == "ob") {
  1761.         n = Game.ObjectsById[e].price
  1762.     }
  1763.     if (t == "up") {
  1764.         n = Game.UpgradesById[e].basePrice
  1765.     }
  1766.     var i = Game.cookiesPs;
  1767.     if (i == 0) {
  1768.         return 0
  1769.     }
  1770.     if (n > 0) {
  1771.         var s = n / i;
  1772.         return s
  1773.     }
  1774.     return 0
  1775. }
  1776.  
  1777.  
  1778. function _sts(e, t) {
  1779.     var n = settings[7];
  1780.     if (n > 0) {
  1781.         var r = 1e33;
  1782.         for (var i = sts_type[n - 1].length - 1; i >= 0; i--) {
  1783.             var s = (e / r % 999).toFixed(3);
  1784.             if (s >= 1) return s + sts_type[n - 1][i];
  1785.             r /= 1e3
  1786.         }
  1787.     }
  1788.     if (t) {
  1789.         return Math.round(e)
  1790.     }
  1791.     return Math.round(e * 100) / 100
  1792. }
  1793.  
  1794. function Sell_Out_Value() {
  1795.     var e = 0;
  1796.     var t = Game.cookies;
  1797.     var n = new Array;
  1798.     var r = 0;
  1799.     Game.ObjectsById.forEach(function (e, t) {
  1800.         n[t] = e.amount;
  1801.         r += e.amount
  1802.     });
  1803.     while (t >= 15 || r > 0) {
  1804.         for (var i = n.length - 1; i >= 0; i--) {
  1805.             var s = false;
  1806.             var o = n[i];
  1807.             var u = Game.ObjectsById[i];
  1808.             for (var a = o; a > 0; a--) {
  1809.                 t += Math.floor(u.basePrice * Math.pow(1.15, a) / 2);
  1810.                 e += Math.floor(u.basePrice * Math.pow(1.15, a) / 2);
  1811.                 n[i]--;
  1812.                 r--
  1813.             }
  1814.             while (t >= u.basePrice * Math.pow(1.15, n[i])) {
  1815.                 s = true;
  1816.                 t -= u.basePrice * Math.pow(1.15, n[i]);
  1817.                 n[i]++;
  1818.                 r++
  1819.             }
  1820.             if (s) {
  1821.                 break
  1822.             }
  1823.         }
  1824.     }
  1825.     sell_out = e
  1826. }
  1827.  
  1828. function Sell_Out() {
  1829.     if (confirm("*** WARNING ***\nYou will have no buildings or cookies left after this.")) {
  1830.         Game.ObjectsById.forEach(function (e, t) {
  1831.             setTimeout(function () {
  1832.                 while (e.amount > 0) {
  1833.                     e.sell()
  1834.                 }
  1835.             })
  1836.         });
  1837.         setTimeout(function () {
  1838.             Buy_Sell()
  1839.         })
  1840.     }
  1841. }
  1842.  
  1843. function Buy_Sell() {
  1844.     if (Game.cookies < 1e9 && Game.BuildingsOwned < 100) {
  1845.         Buy_Sell_No_Wait();
  1846.         return false
  1847.     }
  1848.     for (var e = Game.ObjectsById.length - 1; e >= 0; e--) {
  1849.         var t = Game.ObjectsById[e];
  1850.         if (t.price <= Game.cookies) {
  1851.             t.buy();
  1852.             setTimeout(function () {
  1853.                 Buy_Sell()
  1854.             });
  1855.             return false
  1856.         }
  1857.         if (t.price > Game.cookies && t.amount > 0) {
  1858.             t.sell();
  1859.             setTimeout(function () {
  1860.                 Buy_Sell()
  1861.             });
  1862.             return false
  1863.         }
  1864.     }
  1865.     setTimeout(function () {
  1866.         Buy_Sell()
  1867.     })
  1868. }
  1869.  
  1870. function Buy_Sell_No_Wait() {
  1871.     if (Game.cookies < 15) {
  1872.         return false
  1873.     }
  1874.     for (var e = Game.ObjectsById.length - 1; e >= 0; e--) {
  1875.         var t = Game.ObjectsById[e];
  1876.         t.sell();
  1877.         if (t.price <= Game.cookies) {
  1878.             t.buy();
  1879.             t.sell();
  1880.             Buy_Sell_No_Wait();
  1881.             return false
  1882.         }
  1883.     }
  1884.     Buy_Sell_No_Wait()
  1885. }
  1886.  
  1887. function Get_True_CPI(e, t) {
  1888.     var n = 0;
  1889.     var r = 0;
  1890.     var i = 0;
  1891.     if (t == "ob") {
  1892.         n = Seconds_Left(Game.ObjectsById[e], "ob");
  1893.         r = Game.ObjectsById[e].price;
  1894.         i = hold_is[e]
  1895.     }
  1896.     if (t == "up") {
  1897.         n = Seconds_Left(Game.UpgradesById[e], "up");
  1898.         r = Game.UpgradesById[e].basePrice;
  1899.         for (var s = 0; s < upgrade_count; s++) {
  1900.             if (_cup(s, e, false)) {
  1901.                 i = Manage_Tooltip(s, e, false, true);
  1902.                 break
  1903.             }
  1904.         }
  1905.     }
  1906.     var o = r / i;
  1907.     Game.ObjectsById.forEach(function (s, u) {
  1908.         var a = s.price;
  1909.         var f = hold_is[u];
  1910.         var l = Seconds_Left(s, "ob");
  1911.         if (l < n && (t == "up" || u != e)) {
  1912.             var c = n - l;
  1913.             var h = f * c;
  1914.             var p = r - a + h;
  1915.             var d = p / i;
  1916.             if (d > o) {
  1917.                 o = d
  1918.             }
  1919.         } else {}
  1920.     });
  1921.     return o
  1922. }
  1923.  
  1924. function Test_True_CPI(e, t) {
  1925.     var n = 0;
  1926.     var r = 0;
  1927.     var i = 0;
  1928.     var s = 0;
  1929.     if (t == "ob") {
  1930.         n = Seconds_Left(e, "ob");
  1931.         i = Game.ObjectsById[e].price;
  1932.         s = hold_is[e]
  1933.     }
  1934.     if (t == "up") {
  1935.         n = Seconds_Left(e, "up");
  1936.         i = Game.UpgradesById[e].basePrice;
  1937.         for (var o = 0; o < upgrade_count; o++) {
  1938.             if (_cup(o, e, false)) {
  1939.                 s = Manage_Tooltip(o, e, false, true);
  1940.                 break
  1941.             }
  1942.         }
  1943.     }
  1944.     var u = Organize_Object_List();
  1945.     var a = i;
  1946.     var f = a / s;
  1947.     var l = f;
  1948.     var c = s;
  1949.     u.forEach(function (o, f) {
  1950.         if (i > o.price && (t == "up" || o.id != e)) {
  1951.             var h = o.price;
  1952.             var p = hold_is[o.id];
  1953.             var d = hold_cpi[o.id];
  1954.             if (c == 0) {
  1955.                 c = p
  1956.             }
  1957.             if (l == 0) {
  1958.                 l = d
  1959.             }
  1960.             var v = Seconds_Left(o.id, "ob");
  1961.             var m = 0;
  1962.             var g = u[f + 1];
  1963.             if (g.id != u.length && (hold_cpi[g.id] < l || g.id == e)) {
  1964.                 m = Seconds_Left(g.id, "ob");
  1965.                 l = hold_cpi[g.id];
  1966.                 c = p
  1967.             }
  1968.             if (v < n - r) {
  1969.                 var y = m - v;
  1970.                 r += y;
  1971.                 var b = c * y;
  1972.                 if (y > 0) {
  1973.                     s -= c;
  1974.                     a = a - h + b
  1975.                 }
  1976.             }
  1977.         }
  1978.     });
  1979.     f = a / s;
  1980.     return f
  1981. }
  1982.  
  1983. function Organize_Object_List() {
  1984.     var e = new Array;
  1985.     Game.ObjectsById.forEach(function (t, n) {
  1986.         var r = true;
  1987.         if (e.length > 0) {
  1988.             e.forEach(function (n, i) {
  1989.                 if (t.price < n.price && r) {
  1990.                     r = false;
  1991.                     e.splice(i, 0, t);
  1992.                     e.join()
  1993.                 }
  1994.             });
  1995.             if (r) {
  1996.                 e.push(t)
  1997.             }
  1998.         } else {
  1999.             e.push(t)
  2000.         }
  2001.     });
  2002.     return e
  2003. }
  2004. var version = "v.1.038.01D";
  2005. var emphasize = true;
  2006. var tooltips = new Array;
  2007. var building_tooltips = new Array;
  2008. var hold_item = new Array;
  2009. var hold_is = new Array;
  2010. var hold_cpi = new Array;
  2011. var hold_tc = new Array;
  2012. var gc_avail = "";
  2013. var settings = new Array;
  2014. var in_store = new Array(0, 0, 0, 0, 0, 0);
  2015. var sell_out = 0;
  2016. var upgrade_count = 33;
  2017. var sts_type = new Array([" M", " B", " T", " Qa", " Qi", " Sx", " Sp", " Oc", " No", " Dc"], [" M", " G", " T", " P", " E", " Z", " Y", " Oc", " No", " Dc"]);
  2018. var loops = 0;
  2019. if (document.title.indexOf("Cookie Clicker") != -1 && $("#game").length != 0) {
  2020.     Start_Cookie_Monster()
  2021. } else {
  2022.     alert("Cookie Monster " + version + "\n\nThese aren't the droids you're looking for.")
  2023. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement