Compare commits

...

28 Commits

Author SHA1 Message Date
Aktanusa
e4bca75da1 More minor optimizations/typo fixes for the timer bar 2014-08-24 22:49:44 -04:00
Aktanusa
418b1a7d2e Very minor optimization on timer bar creation. 2014-08-24 22:18:09 -04:00
Aktanusa
db41ada262 Added the option to move the timer bars to the top left of the screen. Also added a nice visual rounding to the right side of the bars. 2014-08-24 22:14:27 -04:00
Aktanusa
27833773c9 Forgot compile for last commit 2014-08-17 10:58:53 -04:00
Aktanusa
1742ce201c Version change and minor cleanup 2014-08-17 10:57:36 -04:00
Aktanusa
850f16ca4c Fixed minor flaw in README 2014-08-17 02:00:43 -04:00
Aktanusa
4d445c676c Added the option to change sounds played when a Golden Cookie/Season Special spawns (Fixed issue #17) 2014-08-17 01:55:45 -04:00
Aktanusa
f9ac7aa549 Fixed userscript section on README 2014-08-16 16:48:29 -04:00
Aktanusa
a7e2b2cf35 Merge branch 'dev' of https://github.com/Aktanusa/CookieMonster into dev 2014-08-16 10:05:24 -04:00
Aktanusa
55fc259849 Changed default Golden Cookie sound (issue #17) 2014-08-16 10:04:59 -04:00
Aktanusa
c9a1e60d50 Changed default Golden Cookie sound (issue #17 2014-08-16 10:03:15 -04:00
Aktanusa
188a622c97 A single word corrected by anonymous 2014-08-16 09:59:00 -04:00
Aktanusa
ccc01ab5dc Fixed issue #14 (tooltip is cut off at bottom) 2014-07-14 09:50:27 -04:00
Aktanusa
ee1545fca0 Added the option to turn off wrinkler tooltip (issue #13) 2014-07-11 21:30:41 -04:00
Aktanusa
267b40bfa1 Version change, minor optimizations in wrinker tooltip/reset bonus income tooltip, move wrinkler tooltip a little right to minor game 2014-07-11 21:17:49 -04:00
Aktanusa
f429888727 Added a tooltip for reset bonus income. Also added a tooltip per wrinkler that shows the amount it will give on pop (#9) 2014-07-08 23:38:21 -04:00
Aktanusa
4ae550e4ab Updated README to match Wikia 2014-07-07 23:06:04 -04:00
Aktanusa
952ee91f7c Updated README to match Wikia 2014-07-07 22:59:45 -04:00
Aktanusa
a9fe2df233 Added increase reset bonus % in stats 2014-07-07 17:15:50 -04:00
Aktanusa
d453499014 Updated version/tiny refactoring of a global variable 2014-06-21 22:40:46 -04:00
Aktanusa
9395bebd46 Added buy 10 building tooltip/fixed minor bug with pref config loading 2014-06-21 22:07:28 -04:00
Aktanusa
75c52362b9 Fixed silly mistake of swtiching + and - 2014-06-21 19:05:25 -04:00
Aktanusa
448922dbda Added 1 extra stat in chain/added expand/collape config to stats/reorganize menu code 2014-06-21 13:51:44 -04:00
Aktanusa
686238e6e5 Optimize how Chain Stats are calculated 2014-06-16 08:57:04 -04:00
Aktanusa
d9c21a43bf Fix minor bug with the chain stats 2014-06-14 17:17:12 -04:00
Aktanusa
93f87913b4 Change how chain and missing cookies/eggs stats work 2014-06-09 21:22:37 -04:00
Aktanusa
ddf70d1aaa Fix bug with statistics for Lucky and Chain 2014-06-08 09:30:54 -04:00
Aktanusa
1091d6b666 Added Chain Cookies Statistics and did some minor code optimization on statistics 2014-06-07 23:21:43 -04:00
7 changed files with 1349 additions and 375 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
# Cookie Monster # Cookie Monster
Cookie Monster is an addon you can load into Cookie Clicker, that offers a wide range of tools and statistics to enhance the game. It is **not** a cheat interface although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want. **Cookie Monster** is an addon you can load into Cookie Clicker, that offers a wide range of tools and statistics to enhance the game. It is **not** a cheat interface although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want.
This is a helper, and it is here to help you at *whichever* degree you want, if you only need some help shortening long numbers, it does that. If you need to be accompanied by hand to pick the best buildings to buy, it does that, but **everything is an option**. This is a helper, and it is here to help you at *whichever* degree you want, if you only need some help shortening long numbers, it does that. If you need to be accompanied by hand to pick the best buildings to buy, it does that, but **everything is an option**.
@@ -26,7 +26,7 @@ This index is computed for buildings and upgrades. If the relevant option is ena
* Purple : (upgrades) This item has a worse BCI than any building * Purple : (upgrades) This item has a worse BCI than any building
* Gray : (upgrades) This item has not been calculated and/or cannot be calculated due to no definitive worth. * Gray : (upgrades) This item has not been calculated and/or cannot be calculated due to no definitive worth.
Note : For this index, **lower is better**, meaning a building with a BCI of 1 is more interesting that one with a BCI of 3. Note : For this index, **lower is better**, meaning a building with a BCI of 1 is more interesting than one with a BCI of 3.
## What it doesn't do ## What it doesn't do
@@ -50,14 +50,11 @@ Do note though that, although these upgrades have no direct value, if buying the
## Bookmarklet ## Bookmarklet
Simply use like the previous addon, create a bookmark and set this as the URL. Then when in the game, click on that bookmark. Copy this code and save it as a bookmark. Paste it in the URL section. To activate, click the bookmark when the game's open.
```javascript ```javascript
javascript: (function () { javascript: (function () {
var load = document.createElement('script'); Game.LoadMod('http://aktanusa.github.io/CookieMonster/CookieMonster.js');
load.setAttribute('type', 'text/javascript');
load.setAttribute('src', 'http://aktanusa.github.io/CookieMonster/CookieMonster.js');
document.head.appendChild(load);
}()); }());
``` ```
@@ -76,16 +73,14 @@ If you'd rather use the addon as a script via per example *Greasemonkey* or *Tam
// @grant none // @grant none
// ==/UserScript== // ==/UserScript==
var init = Game.Init; javascript:(function() {
Game.Init = function() { var checkReady = setInterval(function() {
init(); if (Game.ready != undefined && Game.ready) {
(function () { Game.LoadMod('http://aktanusa.github.io/CookieMonster/CookieMonster.js');
var load = document.createElement('script'); clearInterval(checkReady);
load.setAttribute('type', 'text/javascript'); }
load.setAttribute('src', 'http://aktanusa.github.io/CookieMonster/CookieMonster.js'); }, 1000);
document.head.appendChild(load); }());
}());
}
``` ```
# Bugs and suggestions # Bugs and suggestions
@@ -96,10 +91,7 @@ Before submitting a bug, make sure to give a shot at the latest version of the a
```javascript ```javascript
javascript: (function () { javascript: (function () {
var load = document.createElement('script'); Game.LoadMod('https://raw.githubusercontent.com/Aktanusa/CookieMonster/dev/CookieMonster.js');
load.setAttribute('type', 'text/javascript');
load.setAttribute('src', 'https://raw.githubusercontent.com/Aktanusa/CookieMonster/dev/CookieMonster.js');
document.head.appendChild(load);
}()); }());
``` ```

View File

@@ -3,11 +3,14 @@
*********/ *********/
CM.Cache.RemakeIncome = function() { CM.Cache.RemakeIncome = function() {
// Simulate Building Buys // Simulate Building Buys for 1 amount
CM.Sim.BuyBuildings(); CM.Sim.BuyBuildings(1, 'Objects');
// Simulate Upgrade Buys // Simulate Upgrade Buys
CM.Sim.BuyUpgrades(); CM.Sim.BuyUpgrades();
// Simulate Building Buys for 10 amount
CM.Sim.BuyBuildings(10, 'Objects10');
} }
CM.Cache.RemakeBuildingsBCI = function() { CM.Cache.RemakeBuildingsBCI = function() {
@@ -45,12 +48,31 @@ CM.Cache.RemakeUpgradeBCI = function() {
} }
} }
CM.Cache.RemakeBuildings10BCI = function() {
for (var i in CM.Cache.Objects10) {
CM.Cache.Objects10[i].price = CM.Sim.BuildingGetPrice(Game.Objects[i].basePrice, Game.Objects[i].amount, 10);
CM.Cache.Objects10[i].bci = CM.Cache.Objects10[i].price / CM.Cache.Objects10[i].bonus;
var color = '';
if (CM.Cache.Objects10[i].bci <= 0 || CM.Cache.Objects10[i].bci == 'Infinity') color = CM.Disp.colorGray;
else if (CM.Cache.Objects10[i].bci < CM.Disp.min) color = CM.Disp.colorBlue;
else if (CM.Cache.Objects10[i].bci == CM.Disp.min) color = CM.Disp.colorGreen;
else if (CM.Cache.Objects10[i].bci == CM.Disp.max) color = CM.Disp.colorRed;
else if (CM.Cache.Objects10[i].bci > CM.Disp.max) color = CM.Disp.colorPurple;
else if (CM.Cache.Objects10[i].bci > CM.Disp.mid) color = CM.Disp.colorOrange;
else color = CM.Disp.colorYellow;
CM.Cache.Objects10[i].color = color;
}
}
CM.Cache.RemakeBCI = function() { CM.Cache.RemakeBCI = function() {
// Buildings // Buildings for 1 amount
CM.Cache.RemakeBuildingsBCI(); CM.Cache.RemakeBuildingsBCI();
// Upgrades // Upgrades
CM.Cache.RemakeUpgradeBCI(); CM.Cache.RemakeUpgradeBCI();
// Buildings for 10 amount
CM.Cache.RemakeBuildings10BCI();
} }
CM.Cache.RemakeLucky = function() { CM.Cache.RemakeLucky = function() {
@@ -63,6 +85,69 @@ CM.Cache.RemakeLucky = function() {
CM.Cache.LuckyRewardFrenzy = (CM.Cache.LuckyFrenzy * 0.1) + 13; CM.Cache.LuckyRewardFrenzy = (CM.Cache.LuckyFrenzy * 0.1) + 13;
} }
CM.Cache.MaxChainMoni = function(digit, maxPayout) {
var chain = 1 + Math.max(0, Math.ceil(Math.log(Game.cookies) / Math.LN10) - 10);
var moni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain) * digit), maxPayout));
var nextMoni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain + 1) * digit), maxPayout));
while (nextMoni < maxPayout) {
chain++;
moni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain) * digit), maxPayout));
nextMoni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain + 1) * digit), maxPayout));
}
return moni;
}
CM.Cache.RemakeChain = function() {
var maxPayout = Game.cookiesPs * 60 * 60 * 3;
if (Game.frenzy > 0) {
maxPayout /= Game.frenzyPower;
}
CM.Cache.ChainReward = CM.Cache.MaxChainMoni(7, maxPayout);
CM.Cache.ChainWrathReward = CM.Cache.MaxChainMoni(6, maxPayout);
var base = 0;
if (CM.Cache.ChainReward > CM.Cache.ChainWrathReward) {
base = CM.Cache.ChainReward;
}
else {
base = CM.Cache.ChainWrathReward;
}
var count = 1;
if (maxPayout < base) {
CM.Cache.Chain = 0;
}
else {
count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1;
while (base == base + count) {
count++;
}
CM.Cache.Chain = (base + count) / 0.25;
}
CM.Cache.ChainFrenzyReward = CM.Cache.MaxChainMoni(7, maxPayout * 7);
CM.Cache.ChainFrenzyWrathReward = CM.Cache.MaxChainMoni(6, maxPayout * 7);
if (CM.Cache.ChainFrenzyReward > CM.Cache.ChainFrenzyWrathReward) {
base = CM.Cache.ChainFrenzyReward;
}
else {
base = CM.Cache.ChainFrenzyWrathReward;
}
if ((maxPayout * 7) < base) {
CM.Cache.ChainFrenzy = 0;
}
else {
count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1;
while(base == base + count) {
count++;
}
CM.Cache.ChainFrenzy = (base + count) / 0.25;
}
}
CM.Cache.RemakeSeaSpec = function() { CM.Cache.RemakeSeaSpec = function() {
if (Game.season == 'christmas') { if (Game.season == 'christmas') {
CM.Cache.SeaSpec = Math.max(25, Game.cookiesPs * 60 * 1); CM.Cache.SeaSpec = Math.max(25, Game.cookiesPs * 60 * 1);
@@ -75,4 +160,10 @@ CM.Cache.LuckyReward = 0;
CM.Cache.LuckyFrenzy = 0; CM.Cache.LuckyFrenzy = 0;
CM.Cache.LuckyRewardFrenzy = 0; CM.Cache.LuckyRewardFrenzy = 0;
CM.Cache.SeaSpec = 0; CM.Cache.SeaSpec = 0;
CM.Cache.Chain = 0;
CM.Cache.ChainReward = 0;
CM.Cache.ChainWrathReward = 0;
CM.Cache.ChainFrenzy = 0;
CM.Cache.ChainFrenzyReward = 0;
CM.Cache.ChainFrenzyWrathReward = 0;

View File

@@ -13,15 +13,39 @@ CM.LoadConfig = function() {
// Check values // Check values
var mod = false; var mod = false;
for (var i in CM.ConfigDefault) { for (var i in CM.ConfigDefault) {
if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) { if (i != 'StatsPref') {
mod = true; if (i.indexOf('SoundURL') == -1) {
CM.Config[i] = CM.ConfigDefault[i]; if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) {
mod = true;
CM.Config[i] = CM.ConfigDefault[i];
}
}
else { // Sound URLs
if (CM.Config[i] == undefined || typeof CM.Config[i] != 'string') {
mod = true;
CM.Config[i] = CM.ConfigDefault[i];
}
}
}
else { // Statistics Preferences
if (CM.Config[i] == undefined) {
mod = true;
CM.Config[i] = CM.ConfigDefault[i];
}
else {
for (var j in CM.ConfigDefault.StatsPref) {
if (CM.Config[i][j] == undefined || !(CM.Config[i][j] > -1 && CM.Config[i][j] < 2)) {
mod = true;
CM.Config[i][j] = CM.ConfigDefault[i][j];
}
}
}
} }
} }
if (mod) CM.SaveConfig(CM.Config); if (mod) CM.SaveConfig(CM.Config);
CM.Loop(); // Do loop once CM.Loop(); // Do loop once
for (var i in CM.ConfigDefault) { for (var i in CM.ConfigDefault) {
if (CM.ConfigData[i].func != undefined) { if (i != 'StatsPref' && CM.ConfigData[i].func != undefined) {
CM.ConfigData[i].func(); CM.ConfigData[i].func();
} }
} }
@@ -62,8 +86,19 @@ CM.ToggleConfigDown = function(config) {
CM.SaveConfig(CM.Config); CM.SaveConfig(CM.Config);
} }
CM.ToggleStatsConfig = function(config) {
if (CM.Config.StatsPref[config] == 0) {
CM.Config.StatsPref[config]++;
}
else {
CM.Config.StatsPref[config]--;
}
CM.SaveConfig(CM.Config);
}
CM.ConfigData.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', func: function() {CM.Disp.ToggleBotBar();}}; CM.ConfigData.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', func: function() {CM.Disp.ToggleBotBar();}};
CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', func: function() {CM.Disp.ToggleTimerBar();}}; CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', func: function() {CM.Disp.ToggleTimerBar();}};
CM.ConfigData.TimerBarPos = {label: ['Timer Bar Position (Top Left)', 'Timer Bar Position (Bottom)'], desc: 'Placement of the Timer Bar', func: function() {CM.Disp.ToggleTimerBarPos();}};
CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', func: function() {CM.Disp.UpdateBuildings();}}; CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', func: function() {CM.Disp.UpdateBuildings();}};
CM.ConfigData.UpBarColor = {label: ['Upgrade Bar/Colors OFF', 'Upgrade Bar/Colors ON'], desc: 'Color code upgrades and add a counter', func: function() {CM.Disp.ToggleUpBarColor();}}; CM.ConfigData.UpBarColor = {label: ['Upgrade Bar/Colors OFF', 'Upgrade Bar/Colors ON'], desc: 'Color code upgrades and add a counter', func: function() {CM.Disp.ToggleUpBarColor();}};
CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'}; CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'};
@@ -72,11 +107,14 @@ CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'};
for (var i = 0; i < 101; i++) { for (var i = 0; i < 101; i++) {
CM.ConfigData.Volume.label[i] = i + '%'; CM.ConfigData.Volume.label[i] = i + '%';
} }
CM.ConfigData.GCTimer = {label: ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], desc: 'A timer on the Golden Cookie when has been spawned', func: function() {CM.Disp.ToggleGCTimer();}}; CM.ConfigData.GCSoundURL = {label: 'Golden Cookie Sound URL:', desc: 'URL of the sound to be played when a Golden Cookie spawns'};
CM.ConfigData.SeaSoundURL = {label: 'Season Special Sound URL:', desc: 'URL of the sound to be played when a Season Special spawns'};
CM.ConfigData.GCTimer = {label: ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], desc: 'A timer on the Golden Cookie when it has been spawned', func: function() {CM.Disp.ToggleGCTimer();}};
CM.ConfigData.Title = {label: ['Title OFF', 'Title ON'], desc: 'Update title with Golden Cookie/Season Popup timers'}; CM.ConfigData.Title = {label: ['Title OFF', 'Title ON'], desc: 'Update title with Golden Cookie/Season Popup timers'};
CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'}; CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'};
CM.ConfigData.ToolWarnCaut = {label: ['Tooltip Warning/Caution OFF', 'Tooltip Warning/Caution ON'], desc: 'A warning/caution when buying if it will put the bank under the amount needed for max "Lucky!"/"Lucky!" (Frenzy) rewards', func: function() {CM.Disp.ToggleToolWarnCaut();}}; CM.ConfigData.ToolWarnCaut = {label: ['Tooltip Warning/Caution OFF', 'Tooltip Warning/Caution ON'], desc: 'A warning/caution when buying if it will put the bank under the amount needed for max "Lucky!"/"Lucky!" (Frenzy) rewards', func: function() {CM.Disp.ToggleToolWarnCaut();}};
CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left)', 'Tooltip Warning/Caution Position (Bottom)'], desc: 'Placement of the warning/caution boxes', func: function() {CM.Disp.ToggleToolWarnCautPos();}}; CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left)', 'Tooltip Warning/Caution Position (Bottom)'], desc: 'Placement of the warning/caution boxes', func: function() {CM.Disp.ToggleToolWarnCautPos();}};
CM.ConfigData.ToolWrink = {label: ['Wrinkler Tooltip OFF', 'Wrinkler Tooltip ON'], desc: 'Shows the amount of cookies a wrinkler will give when popping it'};
CM.ConfigData.Stats = {label: ['Statistics OFF', 'Statistics ON'], desc: 'Extra Cookie Monster statistics!'}; CM.ConfigData.Stats = {label: ['Statistics OFF', 'Statistics ON'], desc: 'Extra Cookie Monster statistics!'};
CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 3 seconds'}; CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 3 seconds'};
CM.ConfigData.SayTime = {label: ['Format Time OFF', 'Format Time ON'], desc: 'Change how time is displayed in statistics', func: function() {CM.Disp.ToggleSayTime();}}; CM.ConfigData.SayTime = {label: ['Format Time OFF', 'Format Time ON'], desc: 'Change how time is displayed in statistics', func: function() {CM.Disp.ToggleSayTime();}};

View File

@@ -203,9 +203,7 @@ CM.Disp.CreateTimerBar = function() {
CM.Disp.TimerBar.id = 'CMTimerBar'; CM.Disp.TimerBar.id = 'CMTimerBar';
CM.Disp.TimerBar.style.position = 'absolute'; CM.Disp.TimerBar.style.position = 'absolute';
CM.Disp.TimerBar.style.display = 'none'; CM.Disp.TimerBar.style.display = 'none';
CM.Disp.TimerBar.style.bottom = '0px';
CM.Disp.TimerBar.style.height = '48px'; CM.Disp.TimerBar.style.height = '48px';
CM.Disp.TimerBar.style.width = '100%';
CM.Disp.TimerBar.style.fontSize = '10px'; CM.Disp.TimerBar.style.fontSize = '10px';
CM.Disp.TimerBar.style.fontWeight = 'bold'; CM.Disp.TimerBar.style.fontWeight = 'bold';
CM.Disp.TimerBar.style.backgroundColor = 'black'; CM.Disp.TimerBar.style.backgroundColor = 'black';
@@ -235,6 +233,10 @@ CM.Disp.CreateTimerBar = function() {
colorBar.id = bars[i].id colorBar.id = bars[i].id
colorBar.style.display = 'inline-block'; colorBar.style.display = 'inline-block';
colorBar.style.height = '10px'; colorBar.style.height = '10px';
if (bars.length - 1 == i) {
colorBar.style.borderTopRightRadius = '10px';
colorBar.style.borderBottomRightRadius = '10px';
}
if (bars[i].color != undefined) { if (bars[i].color != undefined) {
colorBar.style.backgroundColor = bars[i].color; colorBar.style.backgroundColor = bars[i].color;
} }
@@ -295,6 +297,20 @@ CM.Disp.ToggleTimerBar = function() {
CM.Disp.UpdateBotTimerBarDisplay(); CM.Disp.UpdateBotTimerBarDisplay();
} }
CM.Disp.ToggleTimerBarPos = function() {
if (CM.Config.TimerBarPos == 0) {
CM.Disp.TimerBar.style.width = '30%';
CM.Disp.TimerBar.style.bottom = '';
l('game').insertBefore(CM.Disp.TimerBar, l('sectionLeft'));
}
else {
CM.Disp.TimerBar.style.width = '100%';
CM.Disp.TimerBar.style.bottom = '0px';
l('wrapper').appendChild(CM.Disp.TimerBar);
}
CM.Disp.UpdateBotTimerBarDisplay();
}
CM.Disp.UpdateTimerBar = function() { CM.Disp.UpdateTimerBar = function() {
if (CM.Config.TimerBar == 1) { if (CM.Config.TimerBar == 1) {
// label width: 76 timer width: 26 div margin: 20 // label width: 76 timer width: 26 div margin: 20
@@ -366,7 +382,7 @@ CM.Disp.UpdateTimerBar = function() {
} }
CM.Disp.UpdateBotTimerBarDisplay = function() { CM.Disp.UpdateBotTimerBarDisplay = function() {
if (CM.Config.BotBar == 1 && CM.Config.TimerBar == 1) { if (CM.Config.BotBar == 1 && CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 1) {
CM.Disp.BotBar.style.bottom = '48px'; CM.Disp.BotBar.style.bottom = '48px';
l('game').style.bottom = '104px'; l('game').style.bottom = '104px';
} }
@@ -374,13 +390,20 @@ CM.Disp.UpdateBotTimerBarDisplay = function() {
CM.Disp.BotBar.style.bottom = '0px'; CM.Disp.BotBar.style.bottom = '0px';
l('game').style.bottom = '56px'; l('game').style.bottom = '56px';
} }
else if (CM.Config.TimerBar == 1) { else if (CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 1) {
l('game').style.bottom = '48px'; l('game').style.bottom = '48px';
} }
else { // No bars else { // No bars
l('game').style.bottom = '0px'; l('game').style.bottom = '0px';
} }
if (CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 0) {
l('sectionLeft').style.top = '48px';
}
else {
l('sectionLeft').style.top = '';
}
CM.Disp.UpdateBackground(); CM.Disp.UpdateBackground();
} }
@@ -595,7 +618,7 @@ CM.Disp.CheckGoldenCookie = function() {
} }
CM.Disp.Flash(3); CM.Disp.Flash(3);
CM.Disp.PlaySound('http://cookie-monster.autopergamene.eu/mp3/bell.mp3'); CM.Disp.PlaySound(CM.Config.GCSoundURL);
} }
else if (CM.Config.GCTimer == 1) CM.Disp.GCTimer.style.display = 'none'; else if (CM.Config.GCTimer == 1) CM.Disp.GCTimer.style.display = 'none';
} }
@@ -609,7 +632,7 @@ CM.Disp.CheckGoldenCookie = function() {
CM.Disp.EmphSeasonPopup = function() { CM.Disp.EmphSeasonPopup = function() {
if (Game.season=='christmas') { if (Game.season=='christmas') {
CM.Disp.Flash(3); CM.Disp.Flash(3);
CM.Disp.PlaySound('http://www.freesound.org/data/previews/121/121099_2193266-lq.mp3'); CM.Disp.PlaySound(CM.Config.SeaSoundURL);
} }
} }
@@ -645,14 +668,19 @@ CM.Disp.UpdateTitle = function() {
} }
} }
CM.Disp.AddMenu = function() { CM.Disp.CreateResetTooltip = function() {
var title = function() { CM.Disp.ResetTooltipPlaceholder = document.createElement('div');
var div = document.createElement('div'); var resetTitleDesc = document.createElement('div');
div.className = 'title'; resetTitleDesc.style.minWidth = '260px';
div.style.color = CM.Disp.colorBlue; resetTitleDesc.style.marginBottom = '4px';
div.textContent = 'Cookie Monster Goodies'; var div = document.createElement('div');
return div; div.style.textAlign = 'left';
} div.textContent = 'The bonus income you would get from new heavenly chips/reset achievements if you have the same buildings/upgrades after reset';
resetTitleDesc.appendChild(div);
CM.Disp.ResetTooltipPlaceholder.appendChild(resetTitleDesc);
}
CM.Disp.AddMenuPref = function(title) {
var header = function(text) { var header = function(text) {
var div = document.createElement('div'); var div = document.createElement('div');
div.className = 'listing'; div.className = 'listing';
@@ -664,130 +692,166 @@ CM.Disp.AddMenu = function() {
return div; return div;
} }
if (Game.onMenu == 'prefs') { var frag = document.createDocumentFragment();
var frag = document.createDocumentFragment();
frag.appendChild(title()); frag.appendChild(title());
var listing = function(config) { var listing = function(config) {
var div = document.createElement('div'); var div = document.createElement('div');
div.className = 'listing'; div.className = 'listing';
var a = document.createElement('a'); var a = document.createElement('a');
a.className = 'option'; a.className = 'option';
a.id = CM.ConfigPrefix + config; a.id = CM.ConfigPrefix + config;
a.onclick = function() {CM.ToggleConfigUp(config);}; a.onclick = function() {CM.ToggleConfigUp(config);};
a.textContent = CM.Disp.GetConfigDisplay(config); a.textContent = CM.Disp.GetConfigDisplay(config);
div.appendChild(a); div.appendChild(a);
var label = document.createElement('label'); var label = document.createElement('label');
label.textContent = CM.ConfigData[config].desc; label.textContent = CM.ConfigData[config].desc;
div.appendChild(label); div.appendChild(label);
return div; return div;
}
frag.appendChild(header('Bars/Colors'));
frag.appendChild(listing('BotBar'));
frag.appendChild(listing('TimerBar'));
frag.appendChild(listing('BuildColor'));
frag.appendChild(listing('UpBarColor'));
frag.appendChild(header('Golden Cookie/Season Popup Emphasis'));
frag.appendChild(listing('Flash'));
frag.appendChild(listing('Sound'));
var volConfig = 'Volume';
var volume = document.createElement('div');
volume.className = 'listing';
var minus = document.createElement('a');
minus.className = 'option';
minus.onclick = function() {CM.ToggleConfigDown(volConfig);};
minus.textContent = '-';
volume.appendChild(minus);
var volText = document.createElement('span');
volText.id = CM.ConfigPrefix + volConfig;
volText.textContent = CM.Disp.GetConfigDisplay(volConfig);
volume.appendChild(volText);
var plus = document.createElement('a');
plus.className = 'option';
plus.onclick = function() {CM.ToggleConfigUp(volConfig);};
plus.textContent = '+';
volume.appendChild(plus);
var volLabel = document.createElement('label');
volLabel.textContent = CM.ConfigData[volConfig].desc;
volume.appendChild(volLabel);
frag.appendChild(volume);
frag.appendChild(listing('GCTimer'));
frag.appendChild(listing('Title'));
frag.appendChild(header('Tooltip'));
frag.appendChild(listing('Tooltip'));
frag.appendChild(listing('ToolWarnCaut'));
frag.appendChild(listing('ToolWarnCautPos'));
frag.appendChild(header('Statistics'));
frag.appendChild(listing('Stats'));
frag.appendChild(listing('UpStats'));
frag.appendChild(listing('SayTime'));
frag.appendChild(header('Other'));
frag.appendChild(listing('Scale'));
var resDef = document.createElement('div');
resDef.className = 'listing';
var resDefBut = document.createElement('a');
resDefBut.className = 'option';
resDefBut.onclick = function() {CM.RestoreDefault();};
resDefBut.textContent = 'Restore Default';
resDef.appendChild(resDefBut);
frag.appendChild(resDef);
l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]);
CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick;
l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();};
} }
else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') {
var stats = document.createElement('div');
stats.className = 'subsection';
var url = function(config) {
var div = document.createElement('div');
div.className = 'listing';
var span = document.createElement('span');
span.className = 'option';
span.textContent = CM.ConfigData[config].label + ' ';
div.appendChild(span);
var input = document.createElement('input');
input.id = CM.ConfigPrefix + config;
input.className = 'option';
input.type = 'text';
input.value = CM.Config[config];
input.style.width = '300px';
div.appendChild(input);
div.appendChild(document.createTextNode(' '));
var a = document.createElement('a');
a.className = 'option';
a.onclick = function() {CM.Config[config] = l(CM.ConfigPrefix + config).value;CM.SaveConfig(CM.Config);};
a.textContent = 'Save';
div.appendChild(a);
var label = document.createElement('label');
label.textContent = CM.ConfigData[config].desc;
div.appendChild(label);
return div;
}
frag.appendChild(header('Bars/Colors'));
frag.appendChild(listing('BotBar'));
frag.appendChild(listing('TimerBar'));
frag.appendChild(listing('TimerBarPos'));
frag.appendChild(listing('BuildColor'));
frag.appendChild(listing('UpBarColor'));
frag.appendChild(header('Golden Cookie/Season Popup Emphasis'));
frag.appendChild(listing('Flash'));
frag.appendChild(listing('Sound'));
var volConfig = 'Volume';
var volume = document.createElement('div');
volume.className = 'listing';
var minus = document.createElement('a');
minus.className = 'option';
minus.onclick = function() {CM.ToggleConfigDown(volConfig);};
minus.textContent = '-';
volume.appendChild(minus);
var volText = document.createElement('span');
volText.id = CM.ConfigPrefix + volConfig;
volText.textContent = CM.Disp.GetConfigDisplay(volConfig);
volume.appendChild(volText);
var plus = document.createElement('a');
plus.className = 'option';
plus.onclick = function() {CM.ToggleConfigUp(volConfig);};
plus.textContent = '+';
volume.appendChild(plus);
var volLabel = document.createElement('label');
volLabel.textContent = CM.ConfigData[volConfig].desc;
volume.appendChild(volLabel);
frag.appendChild(volume);
frag.appendChild(url('GCSoundURL'));
frag.appendChild(url('SeaSoundURL'));
frag.appendChild(listing('GCTimer'));
frag.appendChild(listing('Title'));
frag.appendChild(header('Tooltip'));
frag.appendChild(listing('Tooltip'));
frag.appendChild(listing('ToolWarnCaut'));
frag.appendChild(listing('ToolWarnCautPos'));
frag.appendChild(listing('ToolWrink'));
frag.appendChild(header('Statistics'));
frag.appendChild(listing('Stats'));
frag.appendChild(listing('UpStats'));
frag.appendChild(listing('SayTime'));
frag.appendChild(header('Other'));
frag.appendChild(listing('Scale'));
var resDef = document.createElement('div');
resDef.className = 'listing';
var resDefBut = document.createElement('a');
resDefBut.className = 'option';
resDefBut.onclick = function() {CM.RestoreDefault();};
resDefBut.textContent = 'Restore Default';
resDef.appendChild(resDefBut);
frag.appendChild(resDef);
l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]);
CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick;
l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();};
}
CM.Disp.AddMenuStats = function(title) {
var header = function(text, config) {
var div = document.createElement('div');
div.className = 'listing';
div.style.padding = '5px 16px';
div.style.opacity = '0.7';
div.style.fontSize = '17px';
div.style.fontFamily = '\"Kavoon\", Georgia, serif';
div.appendChild(document.createTextNode(text + ' '));
var span = document.createElement('span');
span.style.cursor = 'pointer';
span.style.display = 'inline-block';
span.style.height = '14px';
span.style.width = '14px';
span.style.borderRadius = '7px';
span.style.textAlign = 'center';
span.style.backgroundColor = '#C0C0C0';
span.style.color = 'black';
span.style.fontSize = '13px';
span.style.verticalAlign = 'middle';
span.textContent = CM.Config.StatsPref[config] ? '-' : '+';
span.onclick = function() {CM.ToggleStatsConfig(config); Game.UpdateMenu();};
div.appendChild(span);
return div;
}
var stats = document.createElement('div');
stats.className = 'subsection';
stats.appendChild(title());
var listing = function(name, text) {
var div = document.createElement('div');
div.className = 'listing';
var b = document.createElement('b');
if (typeof name == 'string') b.appendChild(document.createTextNode(name));
else b.appendChild(name); // fragment
b.appendChild(document.createTextNode(' : '));
div.appendChild(b);
div.appendChild(text);
return div;
}
stats.appendChild(header('Lucky Cookies', 'Lucky'));
if (CM.Config.StatsPref.Lucky) {
var luckyColor = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.colorRed : CM.Disp.colorGreen; var luckyColor = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.colorRed : CM.Disp.colorGreen;
var luckyTime = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.FormatTime((CM.Cache.Lucky - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; var luckyTime = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.FormatTime((CM.Cache.Lucky - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
var luckyColorFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; var luckyColorFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen;
var luckyTimeFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.FormatTime((CM.Cache.LuckyFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; var luckyTimeFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.FormatTime((CM.Cache.LuckyFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
var luckyCur = Math.min(Game.cookies * 0.1, Game.cookiesPs * 60 * 20) + 13; var luckyCur = Math.min(Game.cookies * 0.1, Game.cookiesPs * 60 * 20) + 13;
var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset);
var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset);
var halloCook = 0;
for (var i in CM.Data.HalloCookies) {
if (Game.Has(CM.Data.HalloCookies[i])) halloCook++;
}
var christCook = 0;
for (var i in CM.Data.ChristCookies) {
if (Game.Has(CM.Data.ChristCookies[i])) christCook++;
}
var valCook = 0;
for (var i in CM.Data.ValCookies) {
if (Game.Has(CM.Data.ValCookies[i])) valCook++;
else break;
}
var normEggs = 0;
for (var i in Game.eggDrops) {
if (Game.HasUnlocked(Game.eggDrops[i])) normEggs++;
}
var rareEggs = 0;
for (var i in Game.rareEggDrops) {
if (Game.HasUnlocked(Game.rareEggDrops[i])) rareEggs++;
}
var listing = function(name, text) {
var div = document.createElement('div');
div.className = 'listing';
var b = document.createElement('b');
b.textContent = name;
div.appendChild(b);
div.appendChild(text);
return div;
}
stats.appendChild(title());
stats.appendChild(header('Lucky Cookies'));
var luckyReqFrag = document.createDocumentFragment(); var luckyReqFrag = document.createDocumentFragment();
var luckyReqSpan = document.createElement('span'); var luckyReqSpan = document.createElement('span');
luckyReqSpan.style.fontWeight = 'bold'; luckyReqSpan.style.fontWeight = 'bold';
@@ -799,7 +863,7 @@ CM.Disp.AddMenu = function() {
luckyReqSmall.textContent = ' (' + luckyTime + ')'; luckyReqSmall.textContent = ' (' + luckyTime + ')';
luckyReqFrag.appendChild(luckyReqSmall); luckyReqFrag.appendChild(luckyReqSmall);
} }
stats.appendChild(listing('\"Lucky!\" Cookies Required : ', luckyReqFrag)); stats.appendChild(listing('\"Lucky!\" Cookies Required', luckyReqFrag));
var luckyReqFrenFrag = document.createDocumentFragment(); var luckyReqFrenFrag = document.createDocumentFragment();
var luckyReqFrenSpan = document.createElement('span'); var luckyReqFrenSpan = document.createElement('span');
luckyReqFrenSpan.style.fontWeight = 'bold'; luckyReqFrenSpan.style.fontWeight = 'bold';
@@ -811,47 +875,220 @@ CM.Disp.AddMenu = function() {
luckyReqFrenSmall.textContent = ' (' + luckyTimeFrenzy + ')'; luckyReqFrenSmall.textContent = ' (' + luckyTimeFrenzy + ')';
luckyReqFrenFrag.appendChild(luckyReqFrenSmall); luckyReqFrenFrag.appendChild(luckyReqFrenSmall);
} }
stats.appendChild(listing('\"Lucky!\" Cookies Required (Frenzy) : ', luckyReqFrenFrag)); stats.appendChild(listing('\"Lucky!\" Cookies Required (Frenzy)', luckyReqFrenFrag));
stats.appendChild(listing('\"Lucky!\" Reward (MAX) : ', document.createTextNode(Beautify(CM.Cache.LuckyReward)))); stats.appendChild(listing('\"Lucky!\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.LuckyReward))));
stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy) : ', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy)))); stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy))));
stats.appendChild(listing('\"Lucky!\" Reward (CUR) : ', document.createTextNode(Beautify(luckyCur)))); stats.appendChild(listing('\"Lucky!\" Reward (CUR)', document.createTextNode(Beautify(luckyCur))));
stats.appendChild(header('Heavenly Chips')); }
stats.appendChild(header('Chain Cookies', 'Chain'));
if (CM.Config.StatsPref.Chain) {
var chainColor = (Game.cookies < CM.Cache.Chain) ? CM.Disp.colorRed : CM.Disp.colorGreen;
var chainTime = (Game.cookies < CM.Cache.Chain) ? CM.Disp.FormatTime((CM.Cache.Chain - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
var chainColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen;
var chainTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 3, Game.cookies * 0.25);
var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax);
var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax);
var chainReqFrag = document.createDocumentFragment();
var chainReqSpan = document.createElement('span');
chainReqSpan.style.fontWeight = 'bold';
chainReqSpan.style.color = chainColor;
chainReqSpan.textContent = Beautify(CM.Cache.Chain);
chainReqFrag.appendChild(chainReqSpan);
if (chainTime != '') {
var chainReqSmall = document.createElement('small');
chainReqSmall.textContent = ' (' + chainTime + ')';
chainReqFrag.appendChild(chainReqSmall);
}
stats.appendChild(listing('\"Chain\" Cookies Required', chainReqFrag));
var chainReqFrenFrag = document.createDocumentFragment();
var chainReqFrenSpan = document.createElement('span');
chainReqFrenSpan.style.fontWeight = 'bold';
chainReqFrenSpan.style.color = chainColorFrenzy;
chainReqFrenSpan.textContent = Beautify(CM.Cache.ChainFrenzy);
chainReqFrenFrag.appendChild(chainReqFrenSpan);
if (chainTimeFrenzy != '') {
var chainReqFrenSmall = document.createElement('small');
chainReqFrenSmall.textContent = ' (' + chainTimeFrenzy + ')';
chainReqFrenFrag.appendChild(chainReqFrenSmall);
}
stats.appendChild(listing('\"Chain\" Cookies Required (Frenzy)', chainReqFrenFrag));
stats.appendChild(listing('\"Chain\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.ChainReward))));
stats.appendChild(listing('\"Chain\" Reward (MAX) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainWrathReward))));
stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyReward))));
stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyWrathReward))));
stats.appendChild(listing('\"Chain\" Reward (CUR)', document.createTextNode(Beautify(chainCur))));
stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath))));
}
stats.appendChild(header('Heavenly Chips', 'HC'));
if (CM.Config.StatsPref.HC) {
var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset);
var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset);
var hcMaxFrag = document.createDocumentFragment(); var hcMaxFrag = document.createDocumentFragment();
hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC))); hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC)));
var hcMaxSmall = document.createElement('small'); var hcMaxSmall = document.createElement('small');
hcMaxSmall.textContent = ' (' + Beautify((possibleHC * 2)) + '%)'; hcMaxSmall.textContent = ' (' + Beautify((possibleHC * 2)) + '%)';
hcMaxFrag.appendChild(hcMaxSmall); hcMaxFrag.appendChild(hcMaxSmall);
stats.appendChild(listing('Heavenly Chips (MAX) : ', hcMaxFrag)); stats.appendChild(listing('Heavenly Chips (MAX)', hcMaxFrag));
var hcCurFrag = document.createDocumentFragment(); var hcCurFrag = document.createDocumentFragment();
hcCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige['Heavenly chips']))); hcCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige['Heavenly chips'])));
var hcCurSmall = document.createElement('small'); var hcCurSmall = document.createElement('small');
hcCurSmall.textContent = ' (' + Beautify((Game.prestige['Heavenly chips'] * 2)) + '%)'; hcCurSmall.textContent = ' (' + Beautify((Game.prestige['Heavenly chips'] * 2)) + '%)';
hcCurFrag.appendChild(hcCurSmall); hcCurFrag.appendChild(hcCurSmall);
stats.appendChild(listing('Heavenly Chips (CUR) : ', hcCurFrag)); stats.appendChild(listing('Heavenly Chips (CUR)', hcCurFrag));
stats.appendChild(listing('Cookies To Next Chip : ', document.createTextNode(Beautify(neededCook)))); stats.appendChild(listing('Cookies To Next Chip', document.createTextNode(Beautify(neededCook))));
stats.appendChild(listing('Time To Next Chip : ', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); stats.appendChild(listing('Time To Next Chip', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1))));
stats.appendChild(listing('Reset Bonus Income : ', document.createTextNode(Beautify(CM.Sim.ResetBonus())))); var resetTitleFrag = document.createDocumentFragment();
if (Game.cpsSucked > 0) { resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income '))
stats.appendChild(header('Wrinklers')); var resetTitleSpan = document.createElement('span');
resetTitleSpan.onmouseout = function() { Game.tooltip.hide(); };
resetTitleSpan.onmouseover = function() {Game.tooltip.draw(this, escape(CM.Disp.ResetTooltipPlaceholder.innerHTML));};
resetTitleSpan.style.cursor = 'default';
resetTitleSpan.style.display = 'inline-block';
resetTitleSpan.style.height = '10px';
resetTitleSpan.style.width = '10px';
resetTitleSpan.style.borderRadius = '5px';
resetTitleSpan.style.textAlign = 'center';
resetTitleSpan.style.backgroundColor = '#C0C0C0';
resetTitleSpan.style.color = 'black';
resetTitleSpan.style.fontSize = '9px';
resetTitleSpan.style.verticalAlign = 'bottom';
resetTitleSpan.textContent = '?';
resetTitleFrag.appendChild(resetTitleSpan);
var resetBonus = CM.Sim.ResetBonus();
var resetFrag = document.createDocumentFragment();
resetFrag.appendChild(document.createTextNode(Beautify(resetBonus)));
var increase = Math.round(resetBonus / Game.cookiesPs * 10000);
if (isFinite(increase) && increase != 0) {
var resetSmall = document.createElement('small');
resetSmall.textContent = ' (' + (increase / 100) + '% of income)';
resetFrag.appendChild(resetSmall);
}
stats.appendChild(listing(resetTitleFrag, resetFrag));
}
if (Game.cpsSucked > 0) {
stats.appendChild(header('Wrinklers', 'Wrink'));
if (CM.Config.StatsPref.Wrink) {
var sucked = 0; var sucked = 0;
for (var i in Game.wrinklers) { for (var i in Game.wrinklers) {
sucked += Game.wrinklers[i].sucked; sucked += Game.wrinklers[i].sucked;
} }
sucked *= 1.1; sucked *= 1.1;
if (Game.Has('Wrinklerspawn')) sucked *= 1.05; if (Game.Has('Wrinklerspawn')) sucked *= 1.05;
stats.appendChild(listing('Rewards of Popping : ', document.createTextNode(Beautify(sucked)))); stats.appendChild(listing('Rewards of Popping', document.createTextNode(Beautify(sucked))));
}
stats.appendChild(header('Season Specials'));
stats.appendChild(listing('Halloween Cookies Bought : ', document.createTextNode(halloCook + ' of ' + CM.Data.HalloCookies.length)));
stats.appendChild(listing('Christmas Cookies Bought : ', document.createTextNode(christCook + ' of ' + CM.Data.ChristCookies.length)));
stats.appendChild(listing('Valentine Cookies Bought : ', document.createTextNode(valCook + ' of ' + CM.Data.ValCookies.length)));
stats.appendChild(listing('Normal Easter Eggs Unlocked : ', document.createTextNode(normEggs + ' of ' + Game.eggDrops.length)));
stats.appendChild(listing('Rare Easter Eggs Unlocked : ', document.createTextNode(rareEggs + ' of ' + Game.rareEggDrops.length)));
if (Game.season == 'christmas') {
stats.appendChild(listing('Reindeer Reward : ', document.createTextNode(Beautify(CM.Cache.SeaSpec))));
} }
}
l('menu').insertBefore(stats, l('menu').childNodes[2]); var specDisp = false;
var halloCook = [];
for (var i in CM.Data.HalloCookies) {
if (!Game.Has(CM.Data.HalloCookies[i])) {
halloCook.push(CM.Data.HalloCookies[i]);
specDisp = true;
}
}
var christCook = [];
for (var i in CM.Data.ChristCookies) {
if (!Game.Has(CM.Data.ChristCookies[i])) {
christCook.push(CM.Data.ChristCookies[i]);
specDisp = true;
}
}
var valCook = [];
for (var i in CM.Data.ValCookies) {
if (!Game.Has(CM.Data.ValCookies[i])) {
valCook.push(CM.Data.ValCookies[i]);
specDisp = true;
}
}
var normEggs = [];
for (var i in Game.eggDrops) {
if (!Game.HasUnlocked(Game.eggDrops[i])) {
normEggs.push(Game.eggDrops[i]);
specDisp = true;
}
}
var rareEggs = [];
for (var i in Game.rareEggDrops) {
if (!Game.HasUnlocked(Game.rareEggDrops[i])) {
rareEggs.push(Game.rareEggDrops[i]);
specDisp = true;
}
}
if (Game.season == 'christmas' || specDisp) {
stats.appendChild(header('Season Specials', 'Sea'));
if (CM.Config.StatsPref.Sea) {
if (specDisp) {
var createSpecDisp = function(theSpecDisp) {
var frag = document.createDocumentFragment();
frag.appendChild(document.createTextNode(theSpecDisp.length + ' '));
var span = document.createElement('span');
span.onmouseout = function() { Game.tooltip.hide(); };
var placeholder = document.createElement('div');
var missing = document.createElement('div');
missing.style.minWidth = '140px';
missing.style.marginBottom = '4px';
var title = document.createElement('div');
title.className = 'name';
title.style.marginBottom = '4px';
title.style.textAlign = 'center';
title.textContent = 'Missing';
missing.appendChild(title);
for (var i in theSpecDisp) {
var div = document.createElement('div');
div.style.textAlign = 'center';
div.appendChild(document.createTextNode(theSpecDisp[i]));
missing.appendChild(div);
}
placeholder.appendChild(missing);
span.onmouseover = function() {Game.tooltip.draw(this, escape(placeholder.innerHTML));};
span.style.cursor = 'default';
span.style.display = 'inline-block';
span.style.height = '10px';
span.style.width = '10px';
span.style.borderRadius = '5px';
span.style.textAlign = 'center';
span.style.backgroundColor = '#C0C0C0';
span.style.color = 'black';
span.style.fontSize = '9px';
span.style.verticalAlign = 'bottom';
span.textContent = '?';
frag.appendChild(span);
return frag;
}
if (halloCook.length != 0) stats.appendChild(listing('Halloween Cookies Left to Buy', createSpecDisp(halloCook)));
if (christCook.length != 0) stats.appendChild(listing('Christmas Cookies Left to Buy', createSpecDisp(christCook)));
if (valCook.length != 0) stats.appendChild(listing('Valentine Cookies Left to Buy', createSpecDisp(valCook)));
if (normEggs.length != 0) stats.appendChild(listing('Normal Easter Eggs Left to Unlock', createSpecDisp(normEggs)));
if (rareEggs.length != 0) stats.appendChild(listing('Rare Easter Eggs Left to Unlock', createSpecDisp(rareEggs)));
}
if (Game.season == 'christmas') stats.appendChild(listing('Reindeer Reward', document.createTextNode(Beautify(CM.Cache.SeaSpec))));
}
}
l('menu').insertBefore(stats, l('menu').childNodes[2]);
}
CM.Disp.AddMenu = function() {
var title = function() {
var div = document.createElement('div');
div.className = 'title';
div.style.color = CM.Disp.colorBlue;
div.textContent = 'Cookie Monster Goodies';
return div;
}
if (Game.onMenu == 'prefs') {
CM.Disp.AddMenuPref(title);
}
else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') {
CM.Disp.AddMenuStats(title);
} }
} }
@@ -859,6 +1096,14 @@ CM.Disp.RefreshMenu = function() {
if (CM.Config.UpStats && Game.onMenu == 'stats' && Game.drawT % (Game.fps * 3) != 0 && Game.drawT % Game.fps == 0) Game.UpdateMenu(); if (CM.Config.UpStats && Game.onMenu == 'stats' && Game.drawT % (Game.fps * 3) != 0 && Game.drawT % Game.fps == 0) Game.UpdateMenu();
} }
CM.Disp.UpdateTooltipLocation = function() {
Game.tooltip.tta.style.top = Math.max(0, Math.min((l('game').clientHeight + l('topBar').clientHeight) - Game.tooltip.tt.clientHeight - CM.Disp.TooltipWarnCaut.clientHeight - 64, Game.mouseY - 48)) + 'px';
if (Game.tooltip.origin == 'wrink') {
Game.tooltip.tta.style.left = (Game.mouseX + l('tooltip').offsetWidth + 25) + 'px';
Game.tooltip.tta.style.right = 'auto';
}
}
CM.Disp.CreateTooltipWarnCaut = function() { CM.Disp.CreateTooltipWarnCaut = function() {
CM.Disp.TooltipWarnCaut = document.createElement('div'); CM.Disp.TooltipWarnCaut = document.createElement('div');
CM.Disp.TooltipWarnCaut.style.position = 'absolute'; CM.Disp.TooltipWarnCaut.style.position = 'absolute';
@@ -943,9 +1188,20 @@ CM.Disp.AddTooltipUpgrade = function() {
} }
} }
CM.Disp.AddTooltipBuild10 = function() {
for (var i in Game.Objects) {
var me = Game.Objects[i];
l('buttonBuy10-' + me.id).onmouseover = function() {CM.Disp.TooltipBuy10 = true;};
l('buttonBuy10-' + me.id).onmouseout = function() {CM.Disp.TooltipBuy10 = false;};
}
}
CM.Disp.Tooltip = function(type, name) { CM.Disp.Tooltip = function(type, name) {
if (type == 'b') { if (type == 'b') {
l('tooltip').innerHTML = Game.Objects[name].tooltip(); l('tooltip').innerHTML = Game.Objects[name].tooltip();
if (CM.Disp.TooltipBuy10) {
l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join(Beautify(CM.Cache.Objects10[name].price));
}
} }
else { // Upgrades else { // Upgrades
CM.Disp.TooltipUpgradeBack[name](); CM.Disp.TooltipUpgradeBack[name]();
@@ -1004,12 +1260,23 @@ CM.Disp.UpdateTooltip = function() {
var price; var price;
var bonus; var bonus;
if (CM.Disp.tooltipType == 'b') { if (CM.Disp.tooltipType == 'b') {
bonus = CM.Cache.Objects[CM.Disp.tooltipName].bonus; if (!CM.Disp.TooltipBuy10) {
price = Game.Objects[CM.Disp.tooltipName].getPrice(); bonus = CM.Cache.Objects[CM.Disp.tooltipName].bonus;
if (CM.Config.Tooltip == 1) { price = Game.Objects[CM.Disp.tooltipName].getPrice();
l('CMTooltipBorder').style.color = CM.Cache.Objects[CM.Disp.tooltipName].color; if (CM.Config.Tooltip == 1) {
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects[CM.Disp.tooltipName].bci, 2); l('CMTooltipBorder').style.color = CM.Cache.Objects[CM.Disp.tooltipName].color;
l('CMTooltipBCI').style.color = CM.Cache.Objects[CM.Disp.tooltipName].color; l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects[CM.Disp.tooltipName].bci, 2);
l('CMTooltipBCI').style.color = CM.Cache.Objects[CM.Disp.tooltipName].color;
}
}
else {
bonus = CM.Cache.Objects10[CM.Disp.tooltipName].bonus;
price = CM.Cache.Objects10[CM.Disp.tooltipName].price;
if (CM.Config.Tooltip == 1) {
l('CMTooltipBorder').style.color = CM.Cache.Objects10[CM.Disp.tooltipName].color;
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects10[CM.Disp.tooltipName].bci, 2);
l('CMTooltipBCI').style.color = CM.Cache.Objects10[CM.Disp.tooltipName].color;
}
} }
} }
else { // Upgrades else { // Upgrades
@@ -1089,6 +1356,70 @@ CM.Disp.UpdateTooltipWarnCaut = function() {
} }
} }
CM.Disp.AddWrinklerAreaDetect = function() {
l('backgroundLeftCanvas').onmouseover = function() {CM.Disp.TooltipWrinklerArea = 1;};
l('backgroundLeftCanvas').onmouseout = function() {
CM.Disp.TooltipWrinklerArea = 0;
Game.tooltip.hide();
for (var i = 0; i < 10; i++) {
CM.Disp.TooltipWrinklerCache[i] = 0;
}
};
}
CM.Disp.CheckWrinklerTooltip = function() {
if (CM.Config.ToolWrink == 1 && CM.Disp.TooltipWrinklerArea == 1) {
var showingTooltip = false;
var mouseInWrinkler = function (x, y, rect) {
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;
}
for (var i in Game.wrinklers) {
var me = Game.wrinklers[i];
var rect = {w: 100, h: 200, r: (-me.r) * Math.PI / 180, o: 10};
if (me.phase > 0 && Game.LeftBackground && Game.mouseX < Game.LeftBackground.canvas.width && mouseInWrinkler(Game.mouseX - me.x, Game.mouseY - me.y, rect)) {
showingTooltip = true;
if (CM.Disp.TooltipWrinklerCache[i] == 0) {
var placeholder = document.createElement('div');
var wrinkler = document.createElement('div');
wrinkler.style.minWidth = '120px';
wrinkler.style.marginBottom = '4px';
var div = document.createElement('div');
div.style.textAlign = 'center';
div.id = 'CMTooltipWrinkler';
wrinkler.appendChild(div);
placeholder.appendChild(wrinkler);
Game.tooltip.draw(this, escape(placeholder.innerHTML), 'wrink');
CM.Disp.TooltipWrinkler = i;
CM.Disp.TooltipWrinklerCache[i] = 1;
}
else break;
}
else {
CM.Disp.TooltipWrinklerCache[i] = 0;
}
}
if (!showingTooltip) {
Game.tooltip.hide();
}
}
}
CM.Disp.UpdateWrinklerTooltip = function() {
if (CM.Config.ToolWrink == 1 && l('CMTooltipWrinkler') != null) {
var sucked = Game.wrinklers[CM.Disp.TooltipWrinkler].sucked;
sucked *= 1.1;
if (Game.Has('Wrinklerspawn')) sucked *= 1.05;
l('CMTooltipWrinkler').textContent = Beautify(sucked);
}
}
CM.Disp.ToggleSayTime = function() { CM.Disp.ToggleSayTime = function() {
if (CM.Config.SayTime == 1) { if (CM.Config.SayTime == 1) {
Game.sayTime = CM.Disp.sayTime; Game.sayTime = CM.Disp.sayTime;
@@ -1123,3 +1454,12 @@ CM.Disp.lastGoldenCookieState = 'none';
CM.Disp.metric = ['M', 'G', 'T', 'P', 'E', 'Z', 'Y']; CM.Disp.metric = ['M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
CM.Disp.shortScale = ['M', 'B', 'Tr', 'Quadr', 'Quint', 'Sext', 'Sept', 'Oct', 'Non', 'Dec', 'Undec', 'Duodec', 'Tredec']; CM.Disp.shortScale = ['M', 'B', 'Tr', 'Quadr', 'Quint', 'Sext', 'Sept', 'Oct', 'Non', 'Dec', 'Undec', 'Duodec', 'Tredec'];
CM.Disp.TooltipBuy10 = false;
CM.Disp.TooltipWrinklerArea = 0;
CM.Disp.TooltipWrinkler = -1;
CM.Disp.TooltipWrinklerCache = [];
for (var i = 0; i < 10; i++) {
CM.Disp.TooltipWrinklerCache[i] = 0;
}

View File

@@ -34,6 +34,7 @@ CM.ReplaceNative = function() {
Game.tooltip.update = function() { Game.tooltip.update = function() {
CM.Backup.tooltip.updateMod(); CM.Backup.tooltip.updateMod();
CM.Disp.UpdateTooltipWarnCaut(); CM.Disp.UpdateTooltipWarnCaut();
CM.Disp.UpdateTooltipLocation();
} }
CM.Backup.RebuildUpgrades = Game.RebuildUpgrades; CM.Backup.RebuildUpgrades = Game.RebuildUpgrades;
@@ -66,6 +67,7 @@ CM.Loop = function() {
CM.Cache.RemakeIncome(); CM.Cache.RemakeIncome();
CM.Cache.RemakeBCI(); CM.Cache.RemakeBCI();
CM.Cache.RemakeLucky(); CM.Cache.RemakeLucky();
CM.Cache.RemakeChain();
CM.Cache.RemakeSeaSpec(); CM.Cache.RemakeSeaSpec();
CM.Disp.UpdateBotBarOther(); CM.Disp.UpdateBotBarOther();
@@ -82,6 +84,10 @@ CM.Loop = function() {
// Update Tooltip // Update Tooltip
CM.Disp.UpdateTooltip(); CM.Disp.UpdateTooltip();
// Update Wrinkler Tooltip
CM.Disp.CheckWrinklerTooltip();
CM.Disp.UpdateWrinklerTooltip();
// Check Golden Cookies // Check Golden Cookies
CM.Disp.CheckGoldenCookie(); CM.Disp.CheckGoldenCookie();
@@ -103,8 +109,11 @@ CM.Init = function() {
CM.Disp.CreateUpgradeBar(); CM.Disp.CreateUpgradeBar();
CM.Disp.CreateWhiteScreen(); CM.Disp.CreateWhiteScreen();
CM.Disp.CreateGCTimer(); CM.Disp.CreateGCTimer();
CM.Disp.CreateResetTooltip();
CM.Disp.CreateTooltipWarnCaut(); CM.Disp.CreateTooltipWarnCaut();
CM.Disp.AddTooltipBuild(); CM.Disp.AddTooltipBuild();
CM.Disp.AddTooltipBuild10();
CM.Disp.AddWrinklerAreaDetect();
CM.ReplaceNative(); CM.ReplaceNative();
Game.CalculateGains(); Game.CalculateGains();
CM.LoadConfig(); // Must be after all things are created! CM.LoadConfig(); // Must be after all things are created!
@@ -116,9 +125,9 @@ CM.Init = function() {
} }
} }
CM.ConfigDefault = {BotBar: 1, TimerBar: 1, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 0, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2}; CM.ConfigDefault = {BotBar: 1, TimerBar: 1, TimerBarPos: 0, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCSoundURL: 'http://freesound.org/data/previews/66/66717_931655-lq.mp3', SeaSoundURL: 'http://www.freesound.org/data/previews/121/121099_2193266-lq.mp3', GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1}};
CM.ConfigPrefix = 'CMConfig'; CM.ConfigPrefix = 'CMConfig';
CM.VersionMajor = '1.0465'; CM.VersionMajor = '1.0465';
CM.VersionMinor = '5'; CM.VersionMinor = '10';

View File

@@ -2,6 +2,20 @@
* Sim * * Sim *
*******/ *******/
CM.Sim.BuildingGetPrice = function (basePrice, start, increase) {
var totalPrice = 0;
var count = 0;
while(count < increase) {
var price = basePrice * Math.pow(Game.priceIncrease, start + count);
if (Game.Has('Season savings')) price *= 0.99;
if (Game.Has('Santa\'s dominion')) price *= 0.99;
if (Game.Has('Faberge egg')) price *= 0.99;
totalPrice += Math.ceil(price);
count++;
}
return totalPrice;
}
eval('CM.Sim.Has = ' + Game.Has.toString().split('Game').join('CM.Sim')); eval('CM.Sim.Has = ' + Game.Has.toString().split('Game').join('CM.Sim'));
CM.Sim.Win = function(what) { CM.Sim.Win = function(what) {
@@ -132,8 +146,7 @@ CM.Sim.CalculateGains = function() {
if (CM.Sim.Has('Elder Covenant')) mult *= 0.95; if (CM.Sim.Has('Elder Covenant')) mult *= 0.95;
CM.Sim.globalCpsMult = mult; CM.Sim.cookiesPs *= mult;
CM.Sim.cookiesPs *= CM.Sim.globalCpsMult;
}; };
CM.Sim.CheckOtherAchiev = function() { CM.Sim.CheckOtherAchiev = function() {
@@ -207,12 +220,12 @@ CM.Sim.CheckOtherAchiev = function() {
if (hasAllChristCook) CM.Sim.Win('Let it snow'); if (hasAllChristCook) CM.Sim.Win('Let it snow');
} }
CM.Sim.BuyBuildings = function() { CM.Sim.BuyBuildings = function(amount, target) {
CM.Cache.Objects = []; CM.Cache[target] = [];
for (var i in Game.Objects) { for (var i in Game.Objects) {
CM.Sim.CopyData(); CM.Sim.CopyData();
var me = CM.Sim.Objects[i]; var me = CM.Sim.Objects[i];
me.amount++; me.amount += amount;
if (i == 'Cursor') { if (i == 'Cursor') {
if (me.amount >= 1) CM.Sim.Win('Click'); if (me.amount >= 1) CM.Sim.Win('Click');
@@ -305,8 +318,8 @@ CM.Sim.BuyBuildings = function() {
CM.Sim.CalculateGains(); CM.Sim.CalculateGains();
} }
CM.Cache.Objects[i] = {}; CM.Cache[target][i] = {};
CM.Cache.Objects[i].bonus = CM.Sim.cookiesPs - Game.cookiesPs; CM.Cache[target][i].bonus = CM.Sim.cookiesPs - Game.cookiesPs;
} }
} }