From 4dd498cc4d3e6c21de256a40c6aeee99ac20769b Mon Sep 17 00:00:00 2001 From: Alhifar Date: Sat, 13 Feb 2016 23:36:07 -0500 Subject: [PATCH 01/17] Add missed GC clicks stat with preference, create a section header for misc stats --- CookieMonster.js | 14 +++++++++++++- src/Config.js | 1 + src/Disp.js | 11 +++++++++++ src/Main.js | 2 +- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 20556f6..c7523d9 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -324,6 +324,7 @@ CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left CM.ConfigData.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying'}; 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.MissedGCs = {label: ['Missed Golden Cookies OFF', 'Missed Golden Cookies ON'], desc: 'Show missed Golden Cookie clicks in the Cookie Monster statistics'}; CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 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.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', func: function() {CM.Disp.RefreshScale();}}; @@ -1210,6 +1211,7 @@ CM.Disp.AddMenuPref = function(title) { frag.appendChild(header('Statistics')); frag.appendChild(listing('Stats')); + frag.appendChild(listing('MissedGCs')); frag.appendChild(listing('UpStats')); frag.appendChild(listing('SayTime')); @@ -1537,6 +1539,16 @@ CM.Disp.AddMenuStats = function(title) { choEggTotal *= 0.05; stats.appendChild(listing(choEggTitleFrag, document.createTextNode(Beautify(choEggTotal)))); } + + var miscStatsNeeded = CM.Config.MissedGCs; //meaningless for now, only matters if extra misc stats are added + if (miscStatsNeeded) { + stats.appendChild(header('Misc Stats', 'Misc')); + if (CM.Config.StatsPref.Misc) { + if (CM.Config.MissedGCs) { + stats.appendChild(listing('Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); + } + } + } } } @@ -2144,7 +2156,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, MissedGCs: 1, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; diff --git a/src/Config.js b/src/Config.js index b657414..a9e1266 100644 --- a/src/Config.js +++ b/src/Config.js @@ -125,6 +125,7 @@ CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left CM.ConfigData.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying'}; 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.MissedGCs = {label: ['Missed Golden Cookies OFF', 'Missed Golden Cookies ON'], desc: 'Show missed Golden Cookie clicks in the Cookie Monster statistics'}; CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 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.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', func: function() {CM.Disp.RefreshScale();}}; diff --git a/src/Disp.js b/src/Disp.js index 924bd32..cd7996f 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -872,6 +872,7 @@ CM.Disp.AddMenuPref = function(title) { frag.appendChild(header('Statistics')); frag.appendChild(listing('Stats')); + frag.appendChild(listing('MissedGCs')); frag.appendChild(listing('UpStats')); frag.appendChild(listing('SayTime')); @@ -1199,6 +1200,16 @@ CM.Disp.AddMenuStats = function(title) { choEggTotal *= 0.05; stats.appendChild(listing(choEggTitleFrag, document.createTextNode(Beautify(choEggTotal)))); } + + var miscStatsNeeded = CM.Config.MissedGCs; //meaningless for now, only matters if extra misc stats are added + if (miscStatsNeeded) { + stats.appendChild(header('Misc Stats', 'Misc')); + if (CM.Config.StatsPref.Misc) { + if (CM.Config.MissedGCs) { + stats.appendChild(listing('Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); + } + } + } } } diff --git a/src/Main.js b/src/Main.js index 5fad819..f811397 100644 --- a/src/Main.js +++ b/src/Main.js @@ -163,7 +163,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, MissedGCs: 1, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; From 440512ddc736daab9900a16b1cf4e7c6ad41b704 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sun, 14 Feb 2016 11:57:56 -0500 Subject: [PATCH 02/17] Version change to 2.3 --- CookieMonster.js | 2 +- src/Main.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 20556f6..bc1d2ac 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -2148,7 +2148,7 @@ CM.ConfigDefault = {BotBar: 1, TimerBar: 1, TimerBarPos: 0, BuildColor: 1, UpBar CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; -CM.VersionMinor = '2'; +CM.VersionMinor = '3'; /******* * Sim * diff --git a/src/Main.js b/src/Main.js index 5fad819..6b996f2 100644 --- a/src/Main.js +++ b/src/Main.js @@ -167,5 +167,5 @@ CM.ConfigDefault = {BotBar: 1, TimerBar: 1, TimerBarPos: 0, BuildColor: 1, UpBar CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; -CM.VersionMinor = '2'; +CM.VersionMinor = '3'; From e034ee1f44a1a2714573b954245e137fca8ade7f Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sun, 14 Feb 2016 13:04:30 -0500 Subject: [PATCH 03/17] Added Missing Golden Cookies stat (Issue #41) with code from Alhifar (Pull #53) --- src/Config.js | 1 - src/Disp.js | 17 ++++++----------- src/Main.js | 2 +- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/Config.js b/src/Config.js index a9e1266..b657414 100644 --- a/src/Config.js +++ b/src/Config.js @@ -125,7 +125,6 @@ CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left CM.ConfigData.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying'}; 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.MissedGCs = {label: ['Missed Golden Cookies OFF', 'Missed Golden Cookies ON'], desc: 'Show missed Golden Cookie clicks in the Cookie Monster statistics'}; CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 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.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', func: function() {CM.Disp.RefreshScale();}}; diff --git a/src/Disp.js b/src/Disp.js index cd7996f..4476862 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -1199,19 +1199,14 @@ CM.Disp.AddMenuStats = function(title) { } choEggTotal *= 0.05; stats.appendChild(listing(choEggTitleFrag, document.createTextNode(Beautify(choEggTotal)))); - } - - var miscStatsNeeded = CM.Config.MissedGCs; //meaningless for now, only matters if extra misc stats are added - if (miscStatsNeeded) { - stats.appendChild(header('Misc Stats', 'Misc')); - if (CM.Config.StatsPref.Misc) { - if (CM.Config.MissedGCs) { - stats.appendChild(listing('Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); - } - } - } + } } } + + stats.appendChild(header('Miscellaneous', 'Misc')); + if (CM.Config.StatsPref.Misc) { + stats.appendChild(listing('Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); + } l('menu').insertBefore(stats, l('menu').childNodes[2]); } diff --git a/src/Main.js b/src/Main.js index 93429a7..011e65b 100644 --- a/src/Main.js +++ b/src/Main.js @@ -163,7 +163,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, MissedGCs: 1, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; From ab721fef7c817f86fb5fda85cba9e24ca3381095 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sun, 14 Feb 2016 13:05:07 -0500 Subject: [PATCH 04/17] Forgot one file for previous commit --- CookieMonster.js | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 0e28950..e2f349e 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -324,7 +324,6 @@ CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left CM.ConfigData.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying'}; 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.MissedGCs = {label: ['Missed Golden Cookies OFF', 'Missed Golden Cookies ON'], desc: 'Show missed Golden Cookie clicks in the Cookie Monster statistics'}; CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 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.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', func: function() {CM.Disp.RefreshScale();}}; @@ -1538,19 +1537,14 @@ CM.Disp.AddMenuStats = function(title) { } choEggTotal *= 0.05; stats.appendChild(listing(choEggTitleFrag, document.createTextNode(Beautify(choEggTotal)))); - } - - var miscStatsNeeded = CM.Config.MissedGCs; //meaningless for now, only matters if extra misc stats are added - if (miscStatsNeeded) { - stats.appendChild(header('Misc Stats', 'Misc')); - if (CM.Config.StatsPref.Misc) { - if (CM.Config.MissedGCs) { - stats.appendChild(listing('Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); - } - } - } + } } } + + stats.appendChild(header('Miscellaneous', 'Misc')); + if (CM.Config.StatsPref.Misc) { + stats.appendChild(listing('Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); + } l('menu').insertBefore(stats, l('menu').childNodes[2]); } @@ -2156,7 +2150,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, MissedGCs: 1, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; From ca43950c0c0592b4af0071317d26cd558e57eb3a Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Fri, 19 Feb 2016 20:47:27 -0500 Subject: [PATCH 05/17] Added favicon for Golden and Wrath Cookies (thanks to @BlackenedGem for the files) for Issue #44 and #55 and fixed issue with the Options menu (thanks to a random person on the Wikia) --- favicon/goldCookie.ico | Bin 0 -> 32038 bytes favicon/wrathCookie.ico | Bin 0 -> 32038 bytes src/Disp.js | 1 - 3 files changed, 1 deletion(-) create mode 100644 favicon/goldCookie.ico create mode 100644 favicon/wrathCookie.ico diff --git a/favicon/goldCookie.ico b/favicon/goldCookie.ico new file mode 100644 index 0000000000000000000000000000000000000000..6109ba0652efece73b4023e2aecc90b609714099 GIT binary patch literal 32038 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 pdw-7XA?L*JT&bQXGV*(W{{Ma6kFlIzT9c3a0sP literal 0 HcmV?d00001 diff --git a/src/Disp.js b/src/Disp.js index 4476862..c31dcf4 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -872,7 +872,6 @@ CM.Disp.AddMenuPref = function(title) { frag.appendChild(header('Statistics')); frag.appendChild(listing('Stats')); - frag.appendChild(listing('MissedGCs')); frag.appendChild(listing('UpStats')); frag.appendChild(listing('SayTime')); From 67ca329306552aeb25de3907bc3d0d0fd32c1a05 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Fri, 19 Feb 2016 20:47:57 -0500 Subject: [PATCH 06/17] Added additional file for previous commit --- CookieMonster.js | 1 - 1 file changed, 1 deletion(-) diff --git a/CookieMonster.js b/CookieMonster.js index e2f349e..cc69a06 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -1210,7 +1210,6 @@ CM.Disp.AddMenuPref = function(title) { frag.appendChild(header('Statistics')); frag.appendChild(listing('Stats')); - frag.appendChild(listing('MissedGCs')); frag.appendChild(listing('UpStats')); frag.appendChild(listing('SayTime')); From c03c1c44d7b6bd7361af858d5f53a90b462ca81f Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Fri, 19 Feb 2016 20:57:00 -0500 Subject: [PATCH 07/17] Fixed minor bug in load config with checking colors preferences --- CookieMonster.js | 2 +- src/Config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index cc69a06..4fc5b5a 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -239,7 +239,7 @@ CM.LoadConfig = function() { } } else { // Colors - for (var j in CM.ConfigDefault.StatsPref) { + for (var j in CM.ConfigDefault.Colors) { if (typeof CM.Config[i][j] === 'undefined' || typeof CM.Config[i][j] != 'string') { mod = true; CM.Config[i][j] = CM.ConfigDefault[i][j]; diff --git a/src/Config.js b/src/Config.js index b657414..2d0b489 100644 --- a/src/Config.js +++ b/src/Config.js @@ -40,7 +40,7 @@ CM.LoadConfig = function() { } } else { // Colors - for (var j in CM.ConfigDefault.StatsPref) { + for (var j in CM.ConfigDefault.Colors) { if (typeof CM.Config[i][j] === 'undefined' || typeof CM.Config[i][j] != 'string') { mod = true; CM.Config[i][j] = CM.ConfigDefault[i][j]; From 44447d71c387da48ebab23f90557e7595ea31014 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Fri, 19 Feb 2016 21:26:56 -0500 Subject: [PATCH 08/17] Formatting fixes --- CookieMonster.js | 14 +++++++------- src/Disp.js | 10 +++++----- src/Main.js | 2 +- src/Sim.js | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 4fc5b5a..d8c7213 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -666,7 +666,7 @@ CM.Disp.ToggleTimerBarPos = function() { CM.Disp.UpdateTimerBar = function() { if (CM.Config.TimerBar == 1) { - // label width: 83 timer width: 26 div margin: 20 + // label width: 83, timer width: 26, div margin: 20 var maxWidth = CM.Disp.TimerBar.offsetWidth - 129; var count = 0; @@ -919,13 +919,13 @@ CM.Disp.UpdateUpgrades = function() { CM.Disp.UpdateColors = function() { var str = ''; for (var i = 0; i < CM.Disp.colors.length; i++) { - str += '.' + CM.Disp.colorTextPre + CM.Disp.colors[i] + ' { color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }'; + str += '.' + CM.Disp.colorTextPre + CM.Disp.colors[i] + ' { color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }\n'; } for (var i = 0; i < CM.Disp.colors.length; i++) { - str += '.' + CM.Disp.colorBackPre + CM.Disp.colors[i] + ' { background-color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }'; + str += '.' + CM.Disp.colorBackPre + CM.Disp.colors[i] + ' { background-color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }\n'; } for (var i = 0; i < CM.Disp.colors.length; i++) { - str += '.' + CM.Disp.colorBorderPre + CM.Disp.colors[i] + ' { border: 1px solid ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }'; + str += '.' + CM.Disp.colorBorderPre + CM.Disp.colors[i] + ' { border: 1px solid ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }\n'; } CM.Disp.Css.textContent = str; CM.Disp.UpdateBuildings(); // Class has been already set @@ -1966,7 +1966,7 @@ CM.Disp.colorOrange = 'Orange'; CM.Disp.colorRed = 'Red'; CM.Disp.colorPurple = 'Purple'; CM.Disp.colorGray = 'Gray'; -CM.Disp.colors = [ CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray]; +CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray]; CM.Disp.lastGoldenCookieState = 'none'; CM.Disp.lastAscendState = -1; @@ -2144,7 +2144,7 @@ CM.DelayInit = function() { CM.Disp.lastAscendState = Game.OnAscend; if (Game.prefs.popups) Game.Popup('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!'); - else Game.Notify('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!','','',1, 1); + else Game.Notify('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!', '', '', 1, 1); Game.Win('Third-party'); } @@ -2401,7 +2401,7 @@ CM.Sim.CheckOtherAchiev = function() { if (CM.Sim.Objects[i].amount < Math.min(128, Math.pow(2, (Game.ObjectsById.length - Game.Objects[i].id) - 1))) mathematician = 0; } if (!CM.Sim.HasAchiev('Base 10')) { - if (CM.Sim.Objects[i].amount < (Game.ObjectsById.length - Game.Objects[i].id)*10) base10 = 0; + if (CM.Sim.Objects[i].amount < (Game.ObjectsById.length - Game.Objects[i].id) * 10) base10 = 0; } } if (minAmount >= 1) CM.Sim.Win('One with everything'); diff --git a/src/Disp.js b/src/Disp.js index c31dcf4..572b137 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -328,7 +328,7 @@ CM.Disp.ToggleTimerBarPos = function() { CM.Disp.UpdateTimerBar = function() { if (CM.Config.TimerBar == 1) { - // label width: 83 timer width: 26 div margin: 20 + // label width: 83, timer width: 26, div margin: 20 var maxWidth = CM.Disp.TimerBar.offsetWidth - 129; var count = 0; @@ -581,13 +581,13 @@ CM.Disp.UpdateUpgrades = function() { CM.Disp.UpdateColors = function() { var str = ''; for (var i = 0; i < CM.Disp.colors.length; i++) { - str += '.' + CM.Disp.colorTextPre + CM.Disp.colors[i] + ' { color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }'; + str += '.' + CM.Disp.colorTextPre + CM.Disp.colors[i] + ' { color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }\n'; } for (var i = 0; i < CM.Disp.colors.length; i++) { - str += '.' + CM.Disp.colorBackPre + CM.Disp.colors[i] + ' { background-color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }'; + str += '.' + CM.Disp.colorBackPre + CM.Disp.colors[i] + ' { background-color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }\n'; } for (var i = 0; i < CM.Disp.colors.length; i++) { - str += '.' + CM.Disp.colorBorderPre + CM.Disp.colors[i] + ' { border: 1px solid ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }'; + str += '.' + CM.Disp.colorBorderPre + CM.Disp.colors[i] + ' { border: 1px solid ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }\n'; } CM.Disp.Css.textContent = str; CM.Disp.UpdateBuildings(); // Class has been already set @@ -1628,7 +1628,7 @@ CM.Disp.colorOrange = 'Orange'; CM.Disp.colorRed = 'Red'; CM.Disp.colorPurple = 'Purple'; CM.Disp.colorGray = 'Gray'; -CM.Disp.colors = [ CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray]; +CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray]; CM.Disp.lastGoldenCookieState = 'none'; CM.Disp.lastAscendState = -1; diff --git a/src/Main.js b/src/Main.js index 011e65b..24750de 100644 --- a/src/Main.js +++ b/src/Main.js @@ -158,7 +158,7 @@ CM.DelayInit = function() { CM.Disp.lastAscendState = Game.OnAscend; if (Game.prefs.popups) Game.Popup('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!'); - else Game.Notify('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!','','',1, 1); + else Game.Notify('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!', '', '', 1, 1); Game.Win('Third-party'); } diff --git a/src/Sim.js b/src/Sim.js index 9ae0a4c..6c67d0b 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -244,7 +244,7 @@ CM.Sim.CheckOtherAchiev = function() { if (CM.Sim.Objects[i].amount < Math.min(128, Math.pow(2, (Game.ObjectsById.length - Game.Objects[i].id) - 1))) mathematician = 0; } if (!CM.Sim.HasAchiev('Base 10')) { - if (CM.Sim.Objects[i].amount < (Game.ObjectsById.length - Game.Objects[i].id)*10) base10 = 0; + if (CM.Sim.Objects[i].amount < (Game.ObjectsById.length - Game.Objects[i].id) * 10) base10 = 0; } } if (minAmount >= 1) CM.Sim.Win('One with everything'); From 3ed7a64344d6723a74e79f026bbec83e4c93346c Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Fri, 19 Feb 2016 23:22:56 -0500 Subject: [PATCH 09/17] Added Favicon change on Golden/Wrath Cookies (Issue #44 and #55) --- CookieMonster.js | 28 +++++++++++++++++++++++++++- favicon/goldCookie.ico | Bin 32038 -> 0 bytes src/Config.js | 1 + src/Disp.js | 24 ++++++++++++++++++++++++ src/Main.js | 3 ++- 5 files changed, 54 insertions(+), 2 deletions(-) delete mode 100644 favicon/goldCookie.ico diff --git a/CookieMonster.js b/CookieMonster.js index d8c7213..df5bdf3 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -317,6 +317,7 @@ CM.ConfigData.GCSoundURL = {label: 'Golden Cookie Sound URL:', desc: 'URL of the 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.Favicon = {label: ['Favicon OFF', 'Favicon ON'], desc: 'Update favicon with Golden/Wrath Cookie', func: function() {CM.Disp.UpdateFavicon();}}; CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'}; CM.ConfigData.TooltipAmor = {label: ['Tooltip Amortization Information OFF', 'Tooltip Amortization Information ON'], desc: 'Add amortization information to buildings tooltip'}; 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();}}; @@ -972,6 +973,28 @@ CM.Disp.PlaySound = function(url) { } } +CM.Disp.CreateFavicon = function() { + CM.Disp.Favicon = document.createElement('link'); + CM.Disp.Favicon.id = 'CMFavicon'; + CM.Disp.Favicon.rel = 'shortcut icon'; + CM.Disp.Favicon.href = 'http://orteil.dashnet.org/cookieclicker/favicon.ico'; + document.getElementsByTagName('head')[0].appendChild(CM.Disp.Favicon); +} + +CM.Disp.UpdateFavicon = function() { + if (CM.Config.Favicon == 1 && l('goldenCookie').style.display != 'none') { + if (Game.goldenCookie.wrath) { + CM.Disp.Favicon.href = 'http://aktanusa.github.io/CookieMonster/favicon/wrathCookie.ico'; + } + else { + CM.Disp.Favicon.href = 'http://aktanusa.github.io/CookieMonster/favicon/goldenCookie.ico'; + } + } + else { + CM.Disp.Favicon.href = 'http://orteil.dashnet.org/cookieclicker/favicon.ico'; + } +} + CM.Disp.CreateGCTimer = function() { CM.Disp.GCTimer = document.createElement('div'); CM.Disp.GCTimer.style.width = '96px'; @@ -1005,6 +1028,7 @@ CM.Disp.ToggleGCTimer = function() { CM.Disp.CheckGoldenCookie = function() { if (CM.Disp.lastGoldenCookieState != l('goldenCookie').style.display) { CM.Disp.lastGoldenCookieState = l('goldenCookie').style.display; + CM.Disp.UpdateFavicon(); if (l('goldenCookie').style.display != 'none') { if (CM.Config.GCTimer == 1) { CM.Disp.GCTimer.style.display = 'block'; @@ -1199,6 +1223,7 @@ CM.Disp.AddMenuPref = function(title) { frag.appendChild(url('SeaSoundURL')); frag.appendChild(listing('GCTimer')); frag.appendChild(listing('Title')); + frag.appendChild(listing('Favicon')); frag.appendChild(header('Tooltip')); frag.appendChild(listing('Tooltip')); @@ -2131,6 +2156,7 @@ CM.DelayInit = function() { CM.Disp.CreateTimerBar(); CM.Disp.CreateUpgradeBar(); CM.Disp.CreateWhiteScreen(); + CM.Disp.CreateFavicon(); CM.Disp.CreateGCTimer(); CM.Disp.CreateResetTooltip(); CM.Disp.CreateChoEggTooltip(); @@ -2149,7 +2175,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; diff --git a/favicon/goldCookie.ico b/favicon/goldCookie.ico deleted file mode 100644 index 6109ba0652efece73b4023e2aecc90b609714099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 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 Date: Fri, 19 Feb 2016 23:24:58 -0500 Subject: [PATCH 10/17] Rename Favicon for Golden Cookies --- favicon/goldenCookie.ico | Bin 0 -> 32038 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 favicon/goldenCookie.ico diff --git a/favicon/goldenCookie.ico b/favicon/goldenCookie.ico new file mode 100644 index 0000000000000000000000000000000000000000..6109ba0652efece73b4023e2aecc90b609714099 GIT binary patch literal 32038 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 Date: Sat, 20 Feb 2016 11:42:52 -0500 Subject: [PATCH 11/17] Updated README to change dev link and add credit --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93ab40b..192e2a7 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Note: For this index, **lower is better**, meaning a building with a BCI of 1 is ## What it doesn't do -Most likely you'll find items in gray like Golden Cookie upgrades, clicking upgrades – everything that doesn't earn you a direct bonus to your income will display as gray. This means the following upgrades are **not** taken into account by Cookie Monster: +Most likely you'll find items in gray like Golden Cookie upgrades, clicking upgrades, season upgrades – everything that doesn't earn you a direct bonus to your income will display as gray. This means the following upgrades are **not** taken into account by Cookie Monster: * Plastic mouse * Iron mouse @@ -119,7 +119,7 @@ Before submitting a bug, make sure to give a shot at the latest version of the a ```javascript javascript: (function () { - Game.LoadMod('https://raw.githubusercontent.com/Aktanusa/CookieMonster/dev/CookieMonster.js'); + Game.LoadMod('https://cdn.rawgit.com/Aktanusa/CookieMonster/dev/CookieMonster.js'); }()); ``` @@ -132,4 +132,6 @@ All suggestions are welcome, even the smallest ones. * **[Raving_Kumquat](http://cookieclicker.wikia.com/wiki/User:Raving_Kumquat)**: Original author * **[Maxime Fabre](https://github.com/Anahkiasen)**: Previous maintainer * **Alderi Tokori**: ROI calculations (unused now) +* **[Alhifar](https://github.com/Alhifar)**: Missed Golden Cookie Stat +* **[BlackenedGem](https://github.com/BlackenedGem)**: Golden/Wrath Cookie Favicons * **[Aktanusa](https://github.com/Aktanusa)**: Current maintainer \ No newline at end of file From cd09bd55fca97b7a500b0e86aefd54e218b25baa Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sat, 27 Feb 2016 19:12:31 -0500 Subject: [PATCH 12/17] Added colors for new golden cookie bars and minor cleanup --- CookieMonster.js | 15 ++++++++------- src/Config.js | 2 +- src/Disp.js | 11 ++++++----- src/Main.js | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index df5bdf3..1162279 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -306,7 +306,7 @@ CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timer 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.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.Colors = {desc: {Blue: 'Color for better than best BCI building', Green: 'Color for best BCI building', Yellow: 'Color for between best and worst BCI buildings closer to best', Orange: 'Color for between best and worst BCI buildings closer to worst', Red: 'Color for worst BCI building', Purple: 'Color for worse than worst BCI building', Gray: 'Color for negative or infinity BCI'}, func: function() {CM.Disp.UpdateColors();}}; +CM.ConfigData.Colors = {desc: {Blue: 'Color Blue. Used to show better than best BCI building, for Click Frenzy bar, and for various labels', Green: 'Color Green. Used to show best BCI building, for Blood Frenzy bar, and for various labels', Yellow: 'Color Yellow. Used to show between best and worst BCI buildings closer to best, for Frenzy bar, and for various labels', Orange: 'Color Orange. Used to show between best and worst BCI buildings closer to worst, for Next Reindeer bar, and for various labels', Red: 'Color Red. Used to show worst BCI building, for Clot bar, and for various labels', Purple: 'Color Purple. Used to show worse than worst BCI building, for Next Cookie bar, and for various labels', Gray: 'Color Gray. Used to show negative or infinity BCI, and for Next Cookie/Next Reindeer bar', Pink: 'Color Pink. Used for Dragonflight bar', Brown: 'Color Brown. Used for Dragon Harvest bar'}, func: function() {CM.Disp.UpdateColors();}}; CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'}; CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup'}; CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'}; @@ -713,7 +713,7 @@ CM.Disp.UpdateTimerBar = function() { } else if (Game.frenzyPower == 15) { l('CMTimerBarFrenType').textContent = 'Dragon Harvest'; - l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorPurple; + l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorBrown; } else { l('CMTimerBarFrenType').textContent = 'Blood Frenzy'; @@ -735,7 +735,7 @@ CM.Disp.UpdateTimerBar = function() { } else { l('CMTimerBarCFType').textContent = 'Dragonflight'; - l('CMTimerBarCFBar').className = CM.Disp.colorBackPre + CM.Disp.colorPurple; + l('CMTimerBarCFBar').className = CM.Disp.colorBackPre + CM.Disp.colorPink; } l('CMTimerBarCFBar').style.width = Math.round(Game.clickFrenzy * maxWidth / Game.clickFrenzyMax) + 'px'; l('CMTimerBarCFTime').textContent = Math.ceil(Game.clickFrenzy / Game.fps); @@ -806,7 +806,7 @@ CM.Disp.CreateUpgradeBar = function() { var placeholder = document.createElement('div'); var legend = document.createElement('div'); - legend.style.minWidth = '320px'; + legend.style.minWidth = '330px'; legend.style.marginBottom = '4px'; var title = document.createElement('div'); title.className = 'name'; @@ -898,7 +898,6 @@ CM.Disp.UpdateUpgrades = function() { l('upgrade' + i).appendChild(div); } if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorBlue) blue++; - else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorBlue) blue++; else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorGreen) green++; else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorYellow) yellow++; else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorOrange) orange++; @@ -1991,7 +1990,9 @@ CM.Disp.colorOrange = 'Orange'; CM.Disp.colorRed = 'Red'; CM.Disp.colorPurple = 'Purple'; CM.Disp.colorGray = 'Gray'; -CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray]; +CM.Disp.colorPink = 'Pink'; +CM.Disp.colorBrown = 'Brown'; +CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray, CM.Disp.colorPink, CM.Disp.colorBrown]; CM.Disp.lastGoldenCookieState = 'none'; CM.Disp.lastAscendState = -1; @@ -2175,7 +2176,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; diff --git a/src/Config.js b/src/Config.js index 3ffeeaf..3100d65 100644 --- a/src/Config.js +++ b/src/Config.js @@ -107,7 +107,7 @@ CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timer 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.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.Colors = {desc: {Blue: 'Color for better than best BCI building', Green: 'Color for best BCI building', Yellow: 'Color for between best and worst BCI buildings closer to best', Orange: 'Color for between best and worst BCI buildings closer to worst', Red: 'Color for worst BCI building', Purple: 'Color for worse than worst BCI building', Gray: 'Color for negative or infinity BCI'}, func: function() {CM.Disp.UpdateColors();}}; +CM.ConfigData.Colors = {desc: {Blue: 'Color Blue. Used to show better than best BCI building, for Click Frenzy bar, and for various labels', Green: 'Color Green. Used to show best BCI building, for Blood Frenzy bar, and for various labels', Yellow: 'Color Yellow. Used to show between best and worst BCI buildings closer to best, for Frenzy bar, and for various labels', Orange: 'Color Orange. Used to show between best and worst BCI buildings closer to worst, for Next Reindeer bar, and for various labels', Red: 'Color Red. Used to show worst BCI building, for Clot bar, and for various labels', Purple: 'Color Purple. Used to show worse than worst BCI building, for Next Cookie bar, and for various labels', Gray: 'Color Gray. Used to show negative or infinity BCI, and for Next Cookie/Next Reindeer bar', Pink: 'Color Pink. Used for Dragonflight bar', Brown: 'Color Brown. Used for Dragon Harvest bar'}, func: function() {CM.Disp.UpdateColors();}}; CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'}; CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup'}; CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'}; diff --git a/src/Disp.js b/src/Disp.js index df4838d..08db53c 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -374,7 +374,7 @@ CM.Disp.UpdateTimerBar = function() { } else if (Game.frenzyPower == 15) { l('CMTimerBarFrenType').textContent = 'Dragon Harvest'; - l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorPurple; + l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorBrown; } else { l('CMTimerBarFrenType').textContent = 'Blood Frenzy'; @@ -396,7 +396,7 @@ CM.Disp.UpdateTimerBar = function() { } else { l('CMTimerBarCFType').textContent = 'Dragonflight'; - l('CMTimerBarCFBar').className = CM.Disp.colorBackPre + CM.Disp.colorPurple; + l('CMTimerBarCFBar').className = CM.Disp.colorBackPre + CM.Disp.colorPink; } l('CMTimerBarCFBar').style.width = Math.round(Game.clickFrenzy * maxWidth / Game.clickFrenzyMax) + 'px'; l('CMTimerBarCFTime').textContent = Math.ceil(Game.clickFrenzy / Game.fps); @@ -467,7 +467,7 @@ CM.Disp.CreateUpgradeBar = function() { var placeholder = document.createElement('div'); var legend = document.createElement('div'); - legend.style.minWidth = '320px'; + legend.style.minWidth = '330px'; legend.style.marginBottom = '4px'; var title = document.createElement('div'); title.className = 'name'; @@ -559,7 +559,6 @@ CM.Disp.UpdateUpgrades = function() { l('upgrade' + i).appendChild(div); } if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorBlue) blue++; - else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorBlue) blue++; else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorGreen) green++; else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorYellow) yellow++; else if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorOrange) orange++; @@ -1652,7 +1651,9 @@ CM.Disp.colorOrange = 'Orange'; CM.Disp.colorRed = 'Red'; CM.Disp.colorPurple = 'Purple'; CM.Disp.colorGray = 'Gray'; -CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray]; +CM.Disp.colorPink = 'Pink'; +CM.Disp.colorBrown = 'Brown'; +CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray, CM.Disp.colorPink, CM.Disp.colorBrown]; CM.Disp.lastGoldenCookieState = 'none'; CM.Disp.lastAscendState = -1; diff --git a/src/Main.js b/src/Main.js index 60e3cff..de07b0a 100644 --- a/src/Main.js +++ b/src/Main.js @@ -164,7 +164,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}}; +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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; From c5ddda54c583477a83cf16cf7cb89aa9b229c7e3 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sat, 27 Feb 2016 23:11:50 -0500 Subject: [PATCH 13/17] Added back prestige statistics (Issue #46) --- CookieMonster.js | 68 ++++++++++++++++++++++++++++++++---------------- src/Disp.js | 41 ++++++++++++++--------------- src/Main.js | 2 +- src/Sim.js | 25 ++++++++++++++++++ 4 files changed, 90 insertions(+), 46 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 1162279..6516471 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -1093,11 +1093,11 @@ CM.Disp.UpdateTitle = function() { CM.Disp.CreateResetTooltip = function() { CM.Disp.ResetTooltipPlaceholder = document.createElement('div'); var resetTitleDesc = document.createElement('div'); - resetTitleDesc.style.minWidth = '260px'; + resetTitleDesc.style.minWidth = '340px'; resetTitleDesc.style.marginBottom = '4px'; var div = document.createElement('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'; + div.textContent = 'The bonus income you would get from new prestige levels at 100% of its potential and from reset achievements if you have the same buildings/upgrades after reset'; resetTitleDesc.appendChild(div); CM.Disp.ResetTooltipPlaceholder.appendChild(resetTitleDesc); } @@ -1376,22 +1376,19 @@ CM.Disp.AddMenuStats = function(title) { stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath)))); } - // Useless for now; cleanup later - /*stats.appendChild(header('Heavenly Chips', 'HC')); - if (CM.Config.StatsPref.HC) { - var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset); - var neededCook = Game.HowManyCookiesReset(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset); + stats.appendChild(header('Prestige', 'Prestige')); + if (CM.Config.StatsPref.Prestige) { + var possiblePres = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); + var neededCook = Game.HowManyCookiesReset(possiblePres + 1) - (Game.cookiesEarned + Game.cookiesReset); - var hcMaxFrag = document.createDocumentFragment(); - hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC))); - stats.appendChild(listing('Heavenly Chips (MAX)', hcMaxFrag)); - var hcCurFrag = document.createDocumentFragment(); - // Remove all chip stats? - //hcCurFrag.appendChild(document.createTextNode(Beautify(Game.heavenlyChipsEarned))); - //stats.appendChild(listing('Heavenly Chips (CUR)', hcCurFrag)); - 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)))); - // Unneeded? + var presMaxFrag = document.createDocumentFragment(); + presMaxFrag.appendChild(document.createTextNode(Beautify(possiblePres))); + stats.appendChild(listing('Prestige (MAX)', presMaxFrag)); + var presCurFrag = document.createDocumentFragment(); + presCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige))); + stats.appendChild(listing('Prestige (CUR)', presCurFrag)); + stats.appendChild(listing('Cookies To Next Level', document.createTextNode(Beautify(neededCook)))); + stats.appendChild(listing('Time To Next Level', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); var resetTitleFrag = document.createDocumentFragment(); resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income ')) var resetTitleSpan = document.createElement('span'); @@ -1418,8 +1415,8 @@ CM.Disp.AddMenuStats = function(title) { resetSmall.textContent = ' (' + (increase / 100) + '% of income)'; resetFrag.appendChild(resetSmall); } - //stats.appendChild(listing(resetTitleFrag, resetFrag)); - }*/ + stats.appendChild(listing(resetTitleFrag, resetFrag)); + } var choEgg = (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg')); // Needs to be done for the checking below @@ -1431,7 +1428,7 @@ CM.Disp.AddMenuStats = function(title) { var sucked = Game.wrinklers[i].sucked; var toSuck = 1.1; if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; - if (Game.wrinklers[i].type==1) toSuck *= 3; //shiny wrinklers are an elusive, profitable breed + if (Game.wrinklers[i].type==1) toSuck *= 3; // Shiny wrinklers sucked *= toSuck; if (Game.Has('Wrinklerspawn')) sucked *= 1.05; totalSucked += sucked; @@ -1600,7 +1597,7 @@ CM.Disp.UpdateTooltipLocation = function() { } // Kept for future possible use if the code changes again /*else if (!Game.onCrate && !Game.OnAscend && CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 0) { - //Game.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px'; + Game.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px'; }*/ } @@ -1937,7 +1934,7 @@ CM.Disp.UpdateWrinklerTooltip = function() { var sucked = Game.wrinklers[CM.Disp.TooltipWrinkler].sucked; var toSuck = 1.1; if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; - if (Game.wrinklers[CM.Disp.TooltipWrinkler].type == 1) toSuck *= 3; //shiny wrinklers are an elusive, profitable breed + if (Game.wrinklers[CM.Disp.TooltipWrinkler].type == 1) toSuck *= 3; // Shiny wrinklers sucked *= toSuck; if (Game.Has('Wrinklerspawn')) sucked *= 1.05; l('CMTooltipWrinkler').textContent = Beautify(sucked); @@ -2176,7 +2173,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513'}}; +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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, Prestige: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; @@ -2559,10 +2556,35 @@ CM.Sim.ResetBonus = function() { if (Game.cookiesEarned >= 1000000000000000000000000000000) CM.Sim.Win('Negative void'); if (Game.cookiesEarned >= 1000000000000000000000000000000000) CM.Sim.Win('To crumbs, you say?'); + if (CM.Sim.Upgrades['Heavenly chip secret'].bought == 0) { + CM.Sim.Upgrades['Heavenly chip secret'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly cookie stand'].bought == 0) { + CM.Sim.Upgrades['Heavenly cookie stand'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly bakery'].bought == 0) { + CM.Sim.Upgrades['Heavenly bakery'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly confectionery'].bought == 0) { + CM.Sim.Upgrades['Heavenly confectionery'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly key'].bought == 0) { + CM.Sim.Upgrades['Heavenly key'].bought = 1; + CM.Sim.UpgradesOwned++; + } + + CM.Sim.prestige = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); + var lastAchievementsOwned = CM.Sim.AchievementsOwned; CM.Sim.CalculateGains(); + CM.Sim.CheckOtherAchiev(); + if (lastAchievementsOwned != CM.Sim.AchievementsOwned) { CM.Sim.CalculateGains(); } diff --git a/src/Disp.js b/src/Disp.js index 08db53c..0d50605 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -754,11 +754,11 @@ CM.Disp.UpdateTitle = function() { CM.Disp.CreateResetTooltip = function() { CM.Disp.ResetTooltipPlaceholder = document.createElement('div'); var resetTitleDesc = document.createElement('div'); - resetTitleDesc.style.minWidth = '260px'; + resetTitleDesc.style.minWidth = '340px'; resetTitleDesc.style.marginBottom = '4px'; var div = document.createElement('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'; + div.textContent = 'The bonus income you would get from new prestige levels at 100% of its potential and from reset achievements if you have the same buildings/upgrades after reset'; resetTitleDesc.appendChild(div); CM.Disp.ResetTooltipPlaceholder.appendChild(resetTitleDesc); } @@ -1037,22 +1037,19 @@ CM.Disp.AddMenuStats = function(title) { stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath)))); } - // Useless for now; cleanup later - /*stats.appendChild(header('Heavenly Chips', 'HC')); - if (CM.Config.StatsPref.HC) { - var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset); - var neededCook = Game.HowManyCookiesReset(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset); + stats.appendChild(header('Prestige', 'Prestige')); + if (CM.Config.StatsPref.Prestige) { + var possiblePres = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); + var neededCook = Game.HowManyCookiesReset(possiblePres + 1) - (Game.cookiesEarned + Game.cookiesReset); - var hcMaxFrag = document.createDocumentFragment(); - hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC))); - stats.appendChild(listing('Heavenly Chips (MAX)', hcMaxFrag)); - var hcCurFrag = document.createDocumentFragment(); - // Remove all chip stats? - //hcCurFrag.appendChild(document.createTextNode(Beautify(Game.heavenlyChipsEarned))); - //stats.appendChild(listing('Heavenly Chips (CUR)', hcCurFrag)); - 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)))); - // Unneeded? + var presMaxFrag = document.createDocumentFragment(); + presMaxFrag.appendChild(document.createTextNode(Beautify(possiblePres))); + stats.appendChild(listing('Prestige (MAX)', presMaxFrag)); + var presCurFrag = document.createDocumentFragment(); + presCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige))); + stats.appendChild(listing('Prestige (CUR)', presCurFrag)); + stats.appendChild(listing('Cookies To Next Level', document.createTextNode(Beautify(neededCook)))); + stats.appendChild(listing('Time To Next Level', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); var resetTitleFrag = document.createDocumentFragment(); resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income ')) var resetTitleSpan = document.createElement('span'); @@ -1079,8 +1076,8 @@ CM.Disp.AddMenuStats = function(title) { resetSmall.textContent = ' (' + (increase / 100) + '% of income)'; resetFrag.appendChild(resetSmall); } - //stats.appendChild(listing(resetTitleFrag, resetFrag)); - }*/ + stats.appendChild(listing(resetTitleFrag, resetFrag)); + } var choEgg = (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg')); // Needs to be done for the checking below @@ -1092,7 +1089,7 @@ CM.Disp.AddMenuStats = function(title) { var sucked = Game.wrinklers[i].sucked; var toSuck = 1.1; if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; - if (Game.wrinklers[i].type==1) toSuck *= 3; //shiny wrinklers are an elusive, profitable breed + if (Game.wrinklers[i].type==1) toSuck *= 3; // Shiny wrinklers sucked *= toSuck; if (Game.Has('Wrinklerspawn')) sucked *= 1.05; totalSucked += sucked; @@ -1261,7 +1258,7 @@ CM.Disp.UpdateTooltipLocation = function() { } // Kept for future possible use if the code changes again /*else if (!Game.onCrate && !Game.OnAscend && CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 0) { - //Game.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px'; + Game.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px'; }*/ } @@ -1598,7 +1595,7 @@ CM.Disp.UpdateWrinklerTooltip = function() { var sucked = Game.wrinklers[CM.Disp.TooltipWrinkler].sucked; var toSuck = 1.1; if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; - if (Game.wrinklers[CM.Disp.TooltipWrinkler].type == 1) toSuck *= 3; //shiny wrinklers are an elusive, profitable breed + if (Game.wrinklers[CM.Disp.TooltipWrinkler].type == 1) toSuck *= 3; // Shiny wrinklers sucked *= toSuck; if (Game.Has('Wrinklerspawn')) sucked *= 1.05; l('CMTooltipWrinkler').textContent = Beautify(sucked); diff --git a/src/Main.js b/src/Main.js index de07b0a..75ac7a9 100644 --- a/src/Main.js +++ b/src/Main.js @@ -164,7 +164,7 @@ CM.DelayInit = function() { Game.Win('Third-party'); } -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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513'}}; +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, Favicon: 1, Tooltip: 1, TooltipAmor: 0, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWarnCautBon: 0, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, Prestige: 1, Wrink: 1, Sea: 1, Misc: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513'}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '2'; diff --git a/src/Sim.js b/src/Sim.js index 6c67d0b..60d46a8 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -375,10 +375,35 @@ CM.Sim.ResetBonus = function() { if (Game.cookiesEarned >= 1000000000000000000000000000000) CM.Sim.Win('Negative void'); if (Game.cookiesEarned >= 1000000000000000000000000000000000) CM.Sim.Win('To crumbs, you say?'); + if (CM.Sim.Upgrades['Heavenly chip secret'].bought == 0) { + CM.Sim.Upgrades['Heavenly chip secret'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly cookie stand'].bought == 0) { + CM.Sim.Upgrades['Heavenly cookie stand'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly bakery'].bought == 0) { + CM.Sim.Upgrades['Heavenly bakery'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly confectionery'].bought == 0) { + CM.Sim.Upgrades['Heavenly confectionery'].bought = 1; + CM.Sim.UpgradesOwned++; + } + if (CM.Sim.Upgrades['Heavenly key'].bought == 0) { + CM.Sim.Upgrades['Heavenly key'].bought = 1; + CM.Sim.UpgradesOwned++; + } + + CM.Sim.prestige = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); + var lastAchievementsOwned = CM.Sim.AchievementsOwned; CM.Sim.CalculateGains(); + CM.Sim.CheckOtherAchiev(); + if (lastAchievementsOwned != CM.Sim.AchievementsOwned) { CM.Sim.CalculateGains(); } From bb776eb477a50581b8eb13dcb679dfcd8df3f796 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sun, 28 Feb 2016 23:23:41 -0500 Subject: [PATCH 14/17] GC calculations account for auras now, added more info on require cookies for Chains (Issue #37), and did some stats cleanup --- CookieMonster.js | 131 ++++++++++++++++++++++++++++++++++------------- src/Cache.js | 35 +++++++------ src/Disp.js | 96 +++++++++++++++++++++++++++------- 3 files changed, 190 insertions(+), 72 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 6516471..dfc61f9 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -136,35 +136,34 @@ CM.Cache.RemakeChain = function() { 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; - } - if (maxPayout < base) { + if (maxPayout < CM.Cache.ChainReward) { CM.Cache.Chain = 0; } else { - CM.Cache.Chain = CM.Cache.NextNumber(base) / 0.25; + CM.Cache.Chain = CM.Cache.NextNumber(CM.Cache.ChainReward) / 0.25; + } + if (maxPayout < CM.Cache.ChainWrathReward) { + CM.Cache.Chain = 0; + } + else { + CM.Cache.ChainWrath = CM.Cache.NextNumber(CM.Cache.ChainWrathReward) / 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) { + if ((maxPayout * 7) < CM.Cache.ChainFrenzyReward) { CM.Cache.ChainFrenzy = 0; } else { - CM.Cache.ChainFrenzy = CM.Cache.NextNumber(base) / 0.25; + CM.Cache.ChainFrenzy = CM.Cache.NextNumber(CM.Cache.ChainFrenzyReward) / 0.25; + } + if ((maxPayout * 7) < CM.Cache.ChainFrenzyWrathReward) { + CM.Cache.ChainFrenzy = 0; + } + else { + CM.Cache.ChainFrenzyWrath = CM.Cache.NextNumber(CM.Cache.ChainFrenzyWrathReward) / 0.25; } } @@ -190,9 +189,11 @@ CM.Cache.LuckyFrenzy = 0; CM.Cache.LuckyRewardFrenzy = 0; CM.Cache.SeaSpec = 0; CM.Cache.Chain = 0; +CM.Cache.ChainWrath = 0; CM.Cache.ChainReward = 0; CM.Cache.ChainWrathReward = 0; CM.Cache.ChainFrenzy = 0; +CM.Cache.ChainFrenzyWrath = 0; CM.Cache.ChainFrenzyReward = 0; CM.Cache.ChainFrenzyWrathReward = 0; CM.Cache.SellAllTotal = 0; @@ -1303,7 +1304,23 @@ CM.Disp.AddMenuStats = function(title) { 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 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.15, Game.cookiesPs * 60 * 15) + 13; + var luckyCurBase = Math.min(Game.cookies * 0.15, Game.cookiesPs * 60 * 15) + 13; + var luckyRewardMax = CM.Cache.LuckyReward; + var luckyRewardMaxWrath = CM.Cache.LuckyReward; + var luckyRewardFrenzyMax = CM.Cache.LuckyRewardFrenzy; + var luckyRewardFrenzyMaxWrath = CM.Cache.LuckyRewardFrenzy; + var luckyCur = luckyCurBase; + var luckyCurWrath = luckyCurBase; + if (Game.hasAura('Ancestral Metamorphosis')) { + luckyRewardMax *= 1.1; + luckyRewardFrenzyMax *= 1.1; + luckyCur *= 1.1; + } + if (Game.hasAura('Unholy Dominion')) { + luckyRewardMaxWrath *= 1.1; + luckyRewardFrenzyMaxWrath *= 1.1; + luckyCurWrath *= 1.1; + } var luckyReqFrag = document.createDocumentFragment(); var luckyReqSpan = document.createElement('span'); @@ -1329,9 +1346,9 @@ CM.Disp.AddMenuStats = function(title) { luckyReqFrenFrag.appendChild(luckyReqFrenSmall); } 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) (Frenzy)', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy)))); - stats.appendChild(listing('\"Lucky!\" Reward (CUR)', document.createTextNode(Beautify(luckyCur)))); + stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Golden / Wrath)', document.createTextNode(Beautify(luckyRewardMax) + ' / ' + Beautify(luckyRewardMaxWrath)))); + stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy) (Golden / Wrath)', document.createTextNode(Beautify(luckyRewardFrenzyMax) + ' / ' + Beautify(luckyRewardFrenzyMaxWrath)))); + stats.appendChild(listing('\"Lucky!\" Reward (CUR) (Golden / Wrath)', document.createTextNode(Beautify(luckyCur) + ' / ' + Beautify(luckyCurWrath)))); } stats.appendChild(header('Chain Cookies', 'Chain')); @@ -1340,10 +1357,29 @@ CM.Disp.AddMenuStats = function(title) { 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 chainWrathColor = (Game.cookies < CM.Cache.ChainWrath) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainWrathTime = (Game.cookies < CM.Cache.ChainWrath) ? CM.Disp.FormatTime((CM.Cache.ChainWrath - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + var chainWrathColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzyWrath) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainWrathTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzyWrath) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzyWrath - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + + var chainRewardMax = CM.Cache.ChainReward; + var chainWrathRewardMax = CM.Cache.ChainWrathReward; + var chainFrenzyRewardMax = CM.Cache.ChainFrenzyReward; + var chainFrenzyWrathRewardMax = CM.Cache.ChainFrenzyWrathReward; var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 6, Game.cookies * 0.25); var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax); var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax); - + if (Game.hasAura('Ancestral Metamorphosis')) { + chainRewardMax *= 1.1; + chainFrenzyRewardMax *= 1.1; + chainCur *= 1.1; + } + if (Game.hasAura('Unholy Dominion')) { + chainWrathRewardMax *= 1.1; + chainFrenzyWrathRewardMax *= 1.1; + chainCurWrath *= 1.1; + } + var chainReqFrag = document.createDocumentFragment(); var chainReqSpan = document.createElement('span'); chainReqSpan.style.fontWeight = 'bold'; @@ -1356,6 +1392,18 @@ CM.Disp.AddMenuStats = function(title) { chainReqFrag.appendChild(chainReqSmall); } stats.appendChild(listing('\"Chain\" Cookies Required', chainReqFrag)); + var chainWrathReqFrag = document.createDocumentFragment(); + var chainWrathReqSpan = document.createElement('span'); + chainWrathReqSpan.style.fontWeight = 'bold'; + chainWrathReqSpan.className = CM.Disp.colorTextPre + chainWrathColor; + chainWrathReqSpan.textContent = Beautify(CM.Cache.ChainWrath); + chainWrathReqFrag.appendChild(chainWrathReqSpan); + if (chainWrathTime != '') { + var chainWrathReqSmall = document.createElement('small'); + chainWrathReqSmall.textContent = ' (' + chainWrathTime + ')'; + chainWrathReqFrag.appendChild(chainWrathReqSmall); + } + stats.appendChild(listing('\"Chain\" Cookies Required (Wrath)', chainWrathReqFrag)); var chainReqFrenFrag = document.createDocumentFragment(); var chainReqFrenSpan = document.createElement('span'); chainReqFrenSpan.style.fontWeight = 'bold'; @@ -1368,12 +1416,22 @@ CM.Disp.AddMenuStats = function(title) { 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)))); + var chainWrathReqFrenFrag = document.createDocumentFragment(); + var chainWrathReqFrenFrag = document.createDocumentFragment(); + var chainWrathReqFrenSpan = document.createElement('span'); + chainWrathReqFrenSpan.style.fontWeight = 'bold'; + chainWrathReqFrenSpan.className = CM.Disp.colorTextPre + chainWrathColorFrenzy; + chainWrathReqFrenSpan.textContent = Beautify(CM.Cache.ChainFrenzyWrath); + chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan); + if (chainWrathTimeFrenzy != '') { + var chainWrathReqFrenSmall = document.createElement('small'); + chainWrathReqFrenSmall.textContent = ' (' + chainWrathTimeFrenzy + ')'; + chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall); + } + stats.appendChild(listing('\"Chain\" Cookies Required (Frenzy) (Wrath)', chainWrathReqFrenFrag)); + stats.appendChild(listing('\"Chain\" Reward (MAX) (Golden / Wrath)', document.createTextNode(Beautify(chainRewardMax) + ' / ' + Beautify(chainWrathRewardMax)))); + stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy) (Golden / Wrath)', document.createTextNode(Beautify(chainFrenzyRewardMax) + ' / ' + Beautify(chainFrenzyWrathRewardMax)))); + stats.appendChild(listing('\"Chain\" Reward (CUR) (Golden / Wrath)', document.createTextNode(Beautify(chainCur) + ' / ' + Beautify(chainCurWrath)))); } stats.appendChild(header('Prestige', 'Prestige')); @@ -1381,14 +1439,15 @@ CM.Disp.AddMenuStats = function(title) { var possiblePres = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); var neededCook = Game.HowManyCookiesReset(possiblePres + 1) - (Game.cookiesEarned + Game.cookiesReset); - var presMaxFrag = document.createDocumentFragment(); - presMaxFrag.appendChild(document.createTextNode(Beautify(possiblePres))); - stats.appendChild(listing('Prestige (MAX)', presMaxFrag)); - var presCurFrag = document.createDocumentFragment(); - presCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige))); - stats.appendChild(listing('Prestige (CUR)', presCurFrag)); - stats.appendChild(listing('Cookies To Next Level', document.createTextNode(Beautify(neededCook)))); - stats.appendChild(listing('Time To Next Level', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); + var presCurMaxFrag = document.createDocumentFragment(); + presCurMaxFrag.appendChild(document.createTextNode(Beautify(Game.prestige) + ' / ' + Beautify(possiblePres))); + stats.appendChild(listing('Prestige Level (CUR / MAX)', presCurMaxFrag)); + var cookiesNextFrag = document.createDocumentFragment(); + cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook))); + var cookiesNextSmall = document.createElement('small'); + cookiesNextSmall.textContent = ' (' + (CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)) + ')'; + cookiesNextFrag.appendChild(cookiesNextSmall); + stats.appendChild(listing('Cookies To Next Level', cookiesNextFrag)); var resetTitleFrag = document.createDocumentFragment(); resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income ')) var resetTitleSpan = document.createElement('span'); diff --git a/src/Cache.js b/src/Cache.js index 2c7aa26..7e3df6a 100644 --- a/src/Cache.js +++ b/src/Cache.js @@ -116,35 +116,34 @@ CM.Cache.RemakeChain = function() { 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; - } - if (maxPayout < base) { + if (maxPayout < CM.Cache.ChainReward) { CM.Cache.Chain = 0; } else { - CM.Cache.Chain = CM.Cache.NextNumber(base) / 0.25; + CM.Cache.Chain = CM.Cache.NextNumber(CM.Cache.ChainReward) / 0.25; + } + if (maxPayout < CM.Cache.ChainWrathReward) { + CM.Cache.Chain = 0; + } + else { + CM.Cache.ChainWrath = CM.Cache.NextNumber(CM.Cache.ChainWrathReward) / 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) { + if ((maxPayout * 7) < CM.Cache.ChainFrenzyReward) { CM.Cache.ChainFrenzy = 0; } else { - CM.Cache.ChainFrenzy = CM.Cache.NextNumber(base) / 0.25; + CM.Cache.ChainFrenzy = CM.Cache.NextNumber(CM.Cache.ChainFrenzyReward) / 0.25; + } + if ((maxPayout * 7) < CM.Cache.ChainFrenzyWrathReward) { + CM.Cache.ChainFrenzy = 0; + } + else { + CM.Cache.ChainFrenzyWrath = CM.Cache.NextNumber(CM.Cache.ChainFrenzyWrathReward) / 0.25; } } @@ -170,9 +169,11 @@ CM.Cache.LuckyFrenzy = 0; CM.Cache.LuckyRewardFrenzy = 0; CM.Cache.SeaSpec = 0; CM.Cache.Chain = 0; +CM.Cache.ChainWrath = 0; CM.Cache.ChainReward = 0; CM.Cache.ChainWrathReward = 0; CM.Cache.ChainFrenzy = 0; +CM.Cache.ChainFrenzyWrath = 0; CM.Cache.ChainFrenzyReward = 0; CM.Cache.ChainFrenzyWrathReward = 0; CM.Cache.SellAllTotal = 0; diff --git a/src/Disp.js b/src/Disp.js index 0d50605..e86fd7f 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -964,7 +964,23 @@ CM.Disp.AddMenuStats = function(title) { 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 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.15, Game.cookiesPs * 60 * 15) + 13; + var luckyCurBase = Math.min(Game.cookies * 0.15, Game.cookiesPs * 60 * 15) + 13; + var luckyRewardMax = CM.Cache.LuckyReward; + var luckyRewardMaxWrath = CM.Cache.LuckyReward; + var luckyRewardFrenzyMax = CM.Cache.LuckyRewardFrenzy; + var luckyRewardFrenzyMaxWrath = CM.Cache.LuckyRewardFrenzy; + var luckyCur = luckyCurBase; + var luckyCurWrath = luckyCurBase; + if (Game.hasAura('Ancestral Metamorphosis')) { + luckyRewardMax *= 1.1; + luckyRewardFrenzyMax *= 1.1; + luckyCur *= 1.1; + } + if (Game.hasAura('Unholy Dominion')) { + luckyRewardMaxWrath *= 1.1; + luckyRewardFrenzyMaxWrath *= 1.1; + luckyCurWrath *= 1.1; + } var luckyReqFrag = document.createDocumentFragment(); var luckyReqSpan = document.createElement('span'); @@ -990,9 +1006,9 @@ CM.Disp.AddMenuStats = function(title) { luckyReqFrenFrag.appendChild(luckyReqFrenSmall); } 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) (Frenzy)', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy)))); - stats.appendChild(listing('\"Lucky!\" Reward (CUR)', document.createTextNode(Beautify(luckyCur)))); + stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Golden / Wrath)', document.createTextNode(Beautify(luckyRewardMax) + ' / ' + Beautify(luckyRewardMaxWrath)))); + stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy) (Golden / Wrath)', document.createTextNode(Beautify(luckyRewardFrenzyMax) + ' / ' + Beautify(luckyRewardFrenzyMaxWrath)))); + stats.appendChild(listing('\"Lucky!\" Reward (CUR) (Golden / Wrath)', document.createTextNode(Beautify(luckyCur) + ' / ' + Beautify(luckyCurWrath)))); } stats.appendChild(header('Chain Cookies', 'Chain')); @@ -1001,10 +1017,29 @@ CM.Disp.AddMenuStats = function(title) { 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 chainWrathColor = (Game.cookies < CM.Cache.ChainWrath) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainWrathTime = (Game.cookies < CM.Cache.ChainWrath) ? CM.Disp.FormatTime((CM.Cache.ChainWrath - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + var chainWrathColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzyWrath) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainWrathTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzyWrath) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzyWrath - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + + var chainRewardMax = CM.Cache.ChainReward; + var chainWrathRewardMax = CM.Cache.ChainWrathReward; + var chainFrenzyRewardMax = CM.Cache.ChainFrenzyReward; + var chainFrenzyWrathRewardMax = CM.Cache.ChainFrenzyWrathReward; var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 6, Game.cookies * 0.25); var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax); var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax); - + if (Game.hasAura('Ancestral Metamorphosis')) { + chainRewardMax *= 1.1; + chainFrenzyRewardMax *= 1.1; + chainCur *= 1.1; + } + if (Game.hasAura('Unholy Dominion')) { + chainWrathRewardMax *= 1.1; + chainFrenzyWrathRewardMax *= 1.1; + chainCurWrath *= 1.1; + } + var chainReqFrag = document.createDocumentFragment(); var chainReqSpan = document.createElement('span'); chainReqSpan.style.fontWeight = 'bold'; @@ -1017,6 +1052,18 @@ CM.Disp.AddMenuStats = function(title) { chainReqFrag.appendChild(chainReqSmall); } stats.appendChild(listing('\"Chain\" Cookies Required', chainReqFrag)); + var chainWrathReqFrag = document.createDocumentFragment(); + var chainWrathReqSpan = document.createElement('span'); + chainWrathReqSpan.style.fontWeight = 'bold'; + chainWrathReqSpan.className = CM.Disp.colorTextPre + chainWrathColor; + chainWrathReqSpan.textContent = Beautify(CM.Cache.ChainWrath); + chainWrathReqFrag.appendChild(chainWrathReqSpan); + if (chainWrathTime != '') { + var chainWrathReqSmall = document.createElement('small'); + chainWrathReqSmall.textContent = ' (' + chainWrathTime + ')'; + chainWrathReqFrag.appendChild(chainWrathReqSmall); + } + stats.appendChild(listing('\"Chain\" Cookies Required (Wrath)', chainWrathReqFrag)); var chainReqFrenFrag = document.createDocumentFragment(); var chainReqFrenSpan = document.createElement('span'); chainReqFrenSpan.style.fontWeight = 'bold'; @@ -1029,12 +1076,22 @@ CM.Disp.AddMenuStats = function(title) { 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)))); + var chainWrathReqFrenFrag = document.createDocumentFragment(); + var chainWrathReqFrenFrag = document.createDocumentFragment(); + var chainWrathReqFrenSpan = document.createElement('span'); + chainWrathReqFrenSpan.style.fontWeight = 'bold'; + chainWrathReqFrenSpan.className = CM.Disp.colorTextPre + chainWrathColorFrenzy; + chainWrathReqFrenSpan.textContent = Beautify(CM.Cache.ChainFrenzyWrath); + chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan); + if (chainWrathTimeFrenzy != '') { + var chainWrathReqFrenSmall = document.createElement('small'); + chainWrathReqFrenSmall.textContent = ' (' + chainWrathTimeFrenzy + ')'; + chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall); + } + stats.appendChild(listing('\"Chain\" Cookies Required (Frenzy) (Wrath)', chainWrathReqFrenFrag)); + stats.appendChild(listing('\"Chain\" Reward (MAX) (Golden / Wrath)', document.createTextNode(Beautify(chainRewardMax) + ' / ' + Beautify(chainWrathRewardMax)))); + stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy) (Golden / Wrath)', document.createTextNode(Beautify(chainFrenzyRewardMax) + ' / ' + Beautify(chainFrenzyWrathRewardMax)))); + stats.appendChild(listing('\"Chain\" Reward (CUR) (Golden / Wrath)', document.createTextNode(Beautify(chainCur) + ' / ' + Beautify(chainCurWrath)))); } stats.appendChild(header('Prestige', 'Prestige')); @@ -1042,14 +1099,15 @@ CM.Disp.AddMenuStats = function(title) { var possiblePres = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); var neededCook = Game.HowManyCookiesReset(possiblePres + 1) - (Game.cookiesEarned + Game.cookiesReset); - var presMaxFrag = document.createDocumentFragment(); - presMaxFrag.appendChild(document.createTextNode(Beautify(possiblePres))); - stats.appendChild(listing('Prestige (MAX)', presMaxFrag)); - var presCurFrag = document.createDocumentFragment(); - presCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige))); - stats.appendChild(listing('Prestige (CUR)', presCurFrag)); - stats.appendChild(listing('Cookies To Next Level', document.createTextNode(Beautify(neededCook)))); - stats.appendChild(listing('Time To Next Level', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); + var presCurMaxFrag = document.createDocumentFragment(); + presCurMaxFrag.appendChild(document.createTextNode(Beautify(Game.prestige) + ' / ' + Beautify(possiblePres))); + stats.appendChild(listing('Prestige Level (CUR / MAX)', presCurMaxFrag)); + var cookiesNextFrag = document.createDocumentFragment(); + cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook))); + var cookiesNextSmall = document.createElement('small'); + cookiesNextSmall.textContent = ' (' + (CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)) + ')'; + cookiesNextFrag.appendChild(cookiesNextSmall); + stats.appendChild(listing('Cookies To Next Level', cookiesNextFrag)); var resetTitleFrag = document.createDocumentFragment(); resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income ')) var resetTitleSpan = document.createElement('span'); From ddd52c9583c48631802c4d806d202b81a4c45920 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Wed, 2 Mar 2016 16:01:35 -0500 Subject: [PATCH 15/17] Changed the look of CM toggle settings to be like CC, minor code cleanup, added a missing calculation --- CookieMonster.js | 69 ++++++++++++++++++++++++++++++------------------ src/Config.js | 52 ++++++++++++++++++++++-------------- src/Disp.js | 13 +++++---- src/Sim.js | 4 ++- 4 files changed, 86 insertions(+), 52 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index dfc61f9..f0f07c2 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -268,6 +268,18 @@ CM.RestoreDefault = function() { Game.UpdateMenu(); } +CM.ToggleConfig = function(config) { + CM.ToggleConfigUp(config); + if (CM.ConfigData[config].toggle) { + if (CM.Config[config] == 0) { + l(CM.ConfigPrefix + config).className = 'option off'; + } + else { + l(CM.ConfigPrefix + config).className = 'option'; + } + } +} + CM.ToggleConfigUp = function(config) { CM.Config[config]++; if (CM.Config[config] == CM.ConfigData[config].label.length) { @@ -302,33 +314,33 @@ CM.ToggleStatsConfig = function(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.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.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.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', toggle: true, 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', toggle: true, func: function() {CM.Disp.ToggleTimerBar();}}; +CM.ConfigData.TimerBarPos = {label: ['Timer Bar Position (Top Left)', 'Timer Bar Position (Bottom)'], desc: 'Placement of the Timer Bar', toggle: false, func: function() {CM.Disp.ToggleTimerBarPos();}}; +CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', toggle: true, 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', toggle: true, func: function() {CM.Disp.ToggleUpBarColor();}}; CM.ConfigData.Colors = {desc: {Blue: 'Color Blue. Used to show better than best BCI building, for Click Frenzy bar, and for various labels', Green: 'Color Green. Used to show best BCI building, for Blood Frenzy bar, and for various labels', Yellow: 'Color Yellow. Used to show between best and worst BCI buildings closer to best, for Frenzy bar, and for various labels', Orange: 'Color Orange. Used to show between best and worst BCI buildings closer to worst, for Next Reindeer bar, and for various labels', Red: 'Color Red. Used to show worst BCI building, for Clot bar, and for various labels', Purple: 'Color Purple. Used to show worse than worst BCI building, for Next Cookie bar, and for various labels', Gray: 'Color Gray. Used to show negative or infinity BCI, and for Next Cookie/Next Reindeer bar', Pink: 'Color Pink. Used for Dragonflight bar', Brown: 'Color Brown. Used for Dragon Harvest bar'}, func: function() {CM.Disp.UpdateColors();}}; -CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'}; -CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup'}; +CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup', toggle: true}; +CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup', toggle: true}; CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'}; for (var i = 0; i < 101; i++) { CM.ConfigData.Volume.label[i] = i + '%'; } 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.Favicon = {label: ['Favicon OFF', 'Favicon ON'], desc: 'Update favicon with Golden/Wrath Cookie', func: function() {CM.Disp.UpdateFavicon();}}; -CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'}; -CM.ConfigData.TooltipAmor = {label: ['Tooltip Amortization Information OFF', 'Tooltip Amortization Information ON'], desc: 'Add amortization information to buildings tooltip'}; -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.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying'}; -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.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 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.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', func: function() {CM.Disp.RefreshScale();}}; +CM.ConfigData.GCTimer = {label: ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], desc: 'A timer on the Golden Cookie when it has been spawned', toggle: true, func: function() {CM.Disp.ToggleGCTimer();}}; +CM.ConfigData.Title = {label: ['Title OFF', 'Title ON'], desc: 'Update title with Golden Cookie/Season Popup timers', toggle: true}; +CM.ConfigData.Favicon = {label: ['Favicon OFF', 'Favicon ON'], desc: 'Update favicon with Golden/Wrath Cookie', toggle: true, func: function() {CM.Disp.UpdateFavicon();}}; +CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades', toggle: true}; +CM.ConfigData.TooltipAmor = {label: ['Tooltip Amortization Information OFF', 'Tooltip Amortization Information ON'], desc: 'Add amortization information to buildings tooltip', toggle: true}; +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', toggle: true, 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', toggle: false, func: function() {CM.Disp.ToggleToolWarnCautPos();}}; +CM.ConfigData.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying', toggle: true}; +CM.ConfigData.ToolWrink = {label: ['Wrinkler Tooltip OFF', 'Wrinkler Tooltip ON'], desc: 'Shows the amount of cookies a wrinkler will give when popping it', toggle: true}; +CM.ConfigData.Stats = {label: ['Statistics OFF', 'Statistics ON'], desc: 'Extra Cookie Monster statistics!', toggle: true}; +CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 seconds', toggle: false}; +CM.ConfigData.SayTime = {label: ['Format Time OFF', 'Format Time ON'], desc: 'Change how time is displayed in statistics', toggle: true, func: function() {CM.Disp.ToggleSayTime();}}; +CM.ConfigData.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', toggle: false, func: function() {CM.Disp.RefreshScale();}}; /******** * Data * @@ -1135,9 +1147,14 @@ CM.Disp.AddMenuPref = function(title) { var div = document.createElement('div'); div.className = 'listing'; var a = document.createElement('a'); - a.className = 'option'; + if (CM.ConfigData[config].toggle && CM.Config[config] == 0) { + a.className = 'option off'; + } + else { + a.className = 'option'; + } a.id = CM.ConfigPrefix + config; - a.onclick = function() {CM.ToggleConfigUp(config);}; + a.onclick = function() {CM.ToggleConfig(config);}; a.textContent = CM.Disp.GetConfigDisplay(config); div.appendChild(a); var label = document.createElement('label'); @@ -1439,9 +1456,7 @@ CM.Disp.AddMenuStats = function(title) { var possiblePres = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); var neededCook = Game.HowManyCookiesReset(possiblePres + 1) - (Game.cookiesEarned + Game.cookiesReset); - var presCurMaxFrag = document.createDocumentFragment(); - presCurMaxFrag.appendChild(document.createTextNode(Beautify(Game.prestige) + ' / ' + Beautify(possiblePres))); - stats.appendChild(listing('Prestige Level (CUR / MAX)', presCurMaxFrag)); + stats.appendChild(listing('Prestige Level (CUR / MAX)', document.createTextNode(Beautify(Game.prestige) + ' / ' + Beautify(possiblePres)))); var cookiesNextFrag = document.createDocumentFragment(); cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook))); var cookiesNextSmall = document.createElement('small'); @@ -2470,9 +2485,11 @@ CM.Sim.CheckOtherAchiev = function() { if (CM.Sim.Has('Grandmas\' grandmas')) grandmas++; if (CM.Sim.Has('Antigrandmas')) grandmas++; if (CM.Sim.Has('Rainbow grandmas')) grandmas++; + if (CM.Sim.Has('Banker grandmas')) grandmas++; + if (CM.Sim.Has('Priestess grandmas')) grandmas++; + if (CM.Sim.Has('Witch grandmas')) grandmas++; if (!CM.Sim.HasAchiev('Elder') && grandmas >= 7) CM.Sim.Win('Elder'); - // Redo? var buildingsOwned = 0; var mathematician = 1; var base10 = 1; diff --git a/src/Config.js b/src/Config.js index 3100d65..e0d2678 100644 --- a/src/Config.js +++ b/src/Config.js @@ -68,6 +68,18 @@ CM.RestoreDefault = function() { Game.UpdateMenu(); } +CM.ToggleConfig = function(config) { + CM.ToggleConfigUp(config); + if (CM.ConfigData[config].toggle) { + if (CM.Config[config] == 0) { + l(CM.ConfigPrefix + config).className = 'option off'; + } + else { + l(CM.ConfigPrefix + config).className = 'option'; + } + } +} + CM.ToggleConfigUp = function(config) { CM.Config[config]++; if (CM.Config[config] == CM.ConfigData[config].label.length) { @@ -102,31 +114,31 @@ CM.ToggleStatsConfig = function(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.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.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.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', toggle: true, 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', toggle: true, func: function() {CM.Disp.ToggleTimerBar();}}; +CM.ConfigData.TimerBarPos = {label: ['Timer Bar Position (Top Left)', 'Timer Bar Position (Bottom)'], desc: 'Placement of the Timer Bar', toggle: false, func: function() {CM.Disp.ToggleTimerBarPos();}}; +CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', toggle: true, 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', toggle: true, func: function() {CM.Disp.ToggleUpBarColor();}}; CM.ConfigData.Colors = {desc: {Blue: 'Color Blue. Used to show better than best BCI building, for Click Frenzy bar, and for various labels', Green: 'Color Green. Used to show best BCI building, for Blood Frenzy bar, and for various labels', Yellow: 'Color Yellow. Used to show between best and worst BCI buildings closer to best, for Frenzy bar, and for various labels', Orange: 'Color Orange. Used to show between best and worst BCI buildings closer to worst, for Next Reindeer bar, and for various labels', Red: 'Color Red. Used to show worst BCI building, for Clot bar, and for various labels', Purple: 'Color Purple. Used to show worse than worst BCI building, for Next Cookie bar, and for various labels', Gray: 'Color Gray. Used to show negative or infinity BCI, and for Next Cookie/Next Reindeer bar', Pink: 'Color Pink. Used for Dragonflight bar', Brown: 'Color Brown. Used for Dragon Harvest bar'}, func: function() {CM.Disp.UpdateColors();}}; -CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'}; -CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup'}; +CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup', toggle: true}; +CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup', toggle: true}; CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'}; for (var i = 0; i < 101; i++) { CM.ConfigData.Volume.label[i] = i + '%'; } 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.Favicon = {label: ['Favicon OFF', 'Favicon ON'], desc: 'Update favicon with Golden/Wrath Cookie', func: function() {CM.Disp.UpdateFavicon();}}; -CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'}; -CM.ConfigData.TooltipAmor = {label: ['Tooltip Amortization Information OFF', 'Tooltip Amortization Information ON'], desc: 'Add amortization information to buildings tooltip'}; -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.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying'}; -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.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 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.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', func: function() {CM.Disp.RefreshScale();}}; +CM.ConfigData.GCTimer = {label: ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], desc: 'A timer on the Golden Cookie when it has been spawned', toggle: true, func: function() {CM.Disp.ToggleGCTimer();}}; +CM.ConfigData.Title = {label: ['Title OFF', 'Title ON'], desc: 'Update title with Golden Cookie/Season Popup timers', toggle: true}; +CM.ConfigData.Favicon = {label: ['Favicon OFF', 'Favicon ON'], desc: 'Update favicon with Golden/Wrath Cookie', toggle: true, func: function() {CM.Disp.UpdateFavicon();}}; +CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades', toggle: true}; +CM.ConfigData.TooltipAmor = {label: ['Tooltip Amortization Information OFF', 'Tooltip Amortization Information ON'], desc: 'Add amortization information to buildings tooltip', toggle: true}; +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', toggle: true, 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', toggle: false, func: function() {CM.Disp.ToggleToolWarnCautPos();}}; +CM.ConfigData.ToolWarnCautBon = {label: ['Calculate Tooltip Warning/Caution With Bonus CPS OFF', 'Calculate Tooltip Warning/Caution With Bonus CPS ON'], desc: 'Calculate the warning/caution with or without the bonus CPS you get from buying', toggle: true}; +CM.ConfigData.ToolWrink = {label: ['Wrinkler Tooltip OFF', 'Wrinkler Tooltip ON'], desc: 'Shows the amount of cookies a wrinkler will give when popping it', toggle: true}; +CM.ConfigData.Stats = {label: ['Statistics OFF', 'Statistics ON'], desc: 'Extra Cookie Monster statistics!', toggle: true}; +CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 5 seconds', toggle: false}; +CM.ConfigData.SayTime = {label: ['Format Time OFF', 'Format Time ON'], desc: 'Change how time is displayed in statistics', toggle: true, func: function() {CM.Disp.ToggleSayTime();}}; +CM.ConfigData.Scale = {label: ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Scientific Notation'], desc: 'Change how long numbers are handled', toggle: false, func: function() {CM.Disp.RefreshScale();}}; diff --git a/src/Disp.js b/src/Disp.js index e86fd7f..44f3439 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -795,9 +795,14 @@ CM.Disp.AddMenuPref = function(title) { var div = document.createElement('div'); div.className = 'listing'; var a = document.createElement('a'); - a.className = 'option'; + if (CM.ConfigData[config].toggle && CM.Config[config] == 0) { + a.className = 'option off'; + } + else { + a.className = 'option'; + } a.id = CM.ConfigPrefix + config; - a.onclick = function() {CM.ToggleConfigUp(config);}; + a.onclick = function() {CM.ToggleConfig(config);}; a.textContent = CM.Disp.GetConfigDisplay(config); div.appendChild(a); var label = document.createElement('label'); @@ -1099,9 +1104,7 @@ CM.Disp.AddMenuStats = function(title) { var possiblePres = Math.floor(Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset)); var neededCook = Game.HowManyCookiesReset(possiblePres + 1) - (Game.cookiesEarned + Game.cookiesReset); - var presCurMaxFrag = document.createDocumentFragment(); - presCurMaxFrag.appendChild(document.createTextNode(Beautify(Game.prestige) + ' / ' + Beautify(possiblePres))); - stats.appendChild(listing('Prestige Level (CUR / MAX)', presCurMaxFrag)); + stats.appendChild(listing('Prestige Level (CUR / MAX)', document.createTextNode(Beautify(Game.prestige) + ' / ' + Beautify(possiblePres)))); var cookiesNextFrag = document.createDocumentFragment(); cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook))); var cookiesNextSmall = document.createElement('small'); diff --git a/src/Sim.js b/src/Sim.js index 60d46a8..3f8afeb 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -230,9 +230,11 @@ CM.Sim.CheckOtherAchiev = function() { if (CM.Sim.Has('Grandmas\' grandmas')) grandmas++; if (CM.Sim.Has('Antigrandmas')) grandmas++; if (CM.Sim.Has('Rainbow grandmas')) grandmas++; + if (CM.Sim.Has('Banker grandmas')) grandmas++; + if (CM.Sim.Has('Priestess grandmas')) grandmas++; + if (CM.Sim.Has('Witch grandmas')) grandmas++; if (!CM.Sim.HasAchiev('Elder') && grandmas >= 7) CM.Sim.Win('Elder'); - // Redo? var buildingsOwned = 0; var mathematician = 1; var base10 = 1; From be4587a9055b6495344a00d1d6eed8c14355ea47 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Thu, 3 Mar 2016 21:26:25 -0500 Subject: [PATCH 16/17] Added tooltip information and building colors for bulk buying/selling and fixed a bug in Chocolate Egg calculation (it's still wrong, but will fix more in next commit) --- CookieMonster.js | 195 +++++++++++++++++++++++++++-------------------- src/Cache.js | 32 ++++---- src/Disp.js | 98 +++++++++++++----------- src/Main.js | 17 ++++- src/Sim.js | 48 ++++++------ 5 files changed, 228 insertions(+), 162 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index f0f07c2..23f3f59 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -39,6 +39,9 @@ CM.Cache.RemakeIncome = function() { // Simulate Building Buys for 10 amount CM.Sim.BuyBuildings(10, 'Objects10'); + + // Simulate Building Buys for 100 amount + CM.Sim.BuyBuildings(100, 'Objects100'); } CM.Cache.RemakeBuildingsBCI = function() { @@ -77,19 +80,19 @@ 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; +CM.Cache.RemakeBuildingsOtherBCI = function(amount, target) { + for (var i in CM.Cache[target]) { + CM.Cache[target][i].price = CM.Sim.BuildingGetPrice(Game.Objects[i].basePrice, Game.Objects[i].amount, Game.Objects[i].free, amount); + CM.Cache[target][i].bci = CM.Cache[target][i].price / CM.Cache[target][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; + if (CM.Cache[target][i].bci <= 0 || CM.Cache[target][i].bci == 'Infinity') color = CM.Disp.colorGray; + else if (CM.Cache[target][i].bci < CM.Disp.min) color = CM.Disp.colorBlue; + else if (CM.Cache[target][i].bci == CM.Disp.min) color = CM.Disp.colorGreen; + else if (CM.Cache[target][i].bci == CM.Disp.max) color = CM.Disp.colorRed; + else if (CM.Cache[target][i].bci > CM.Disp.max) color = CM.Disp.colorPurple; + else if (CM.Cache[target][i].bci > CM.Disp.mid) color = CM.Disp.colorOrange; else color = CM.Disp.colorYellow; - CM.Cache.Objects10[i].color = color; + CM.Cache[target][i].color = color; } } @@ -101,7 +104,10 @@ CM.Cache.RemakeBCI = function() { CM.Cache.RemakeUpgradeBCI(); // Buildings for 10 amount - CM.Cache.RemakeBuildings10BCI(); + CM.Cache.RemakeBuildingsOtherBCI(10, 'Objects10'); + + // Buildings for 100 amount + CM.Cache.RemakeBuildingsOtherBCI(100, 'Objects100'); } CM.Cache.RemakeLucky = function() { @@ -178,7 +184,7 @@ CM.Cache.RemakeSellAllTotal = function() { var sellTotal = 0; for (var i in Game.Objects) { var me = Game.Objects[i]; - sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.amount); + sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.free, me.amount); } CM.Cache.SellAllTotal = sellTotal; } @@ -795,9 +801,19 @@ CM.Disp.UpdateBotTimerBarDisplay = function() { } CM.Disp.UpdateBuildings = function() { - if (CM.Config.BuildColor == 1) { - for (var i in CM.Cache.Objects) { - l('productPrice' + Game.Objects[i].id).style.color = CM.Config.Colors[CM.Cache.Objects[i].color]; + if (CM.Config.BuildColor == 1 && Game.buyMode == 1) { + var target = ''; + if (Game.buyBulk == 10) { + target = 'Objects10' + } + else if (Game.buyBulk == 100) { + target = 'Objects100' + } + else { + target = 'Objects' + } + for (var i in CM.Cache[target]) { + l('productPrice' + Game.Objects[i].id).style.color = CM.Config.Colors[CM.Cache[target][i].color]; } } else { @@ -1497,7 +1513,7 @@ CM.Disp.AddMenuStats = function(title) { if (Game.cpsSucked > 0) { stats.appendChild(header('Wrinklers', 'Wrink')); if (CM.Config.StatsPref.Wrink || (CM.Config.StatsPref.Sea && choEgg)) { - var totalSucked = 0; + var totalSucked = 0; // Used in Chocolate Egg calculation below also for (var i in Game.wrinklers) { var sucked = Game.wrinklers[i].sucked; var toSuck = 1.1; @@ -1627,7 +1643,7 @@ CM.Disp.AddMenuStats = function(title) { choEggTitleFrag.appendChild(choEggTitleSpan); var choEggTotal = Game.cookies + CM.Cache.SellAllTotal; if (Game.cpsSucked > 0) { - choEggTotal += sucked; + choEggTotal += totalSucked; } choEggTotal *= 0.05; stats.appendChild(listing(choEggTitleFrag, document.createTextNode(Beautify(choEggTotal)))); @@ -1761,36 +1777,33 @@ CM.Disp.AddTooltipUpgrade = function() { } } -CM.Disp.AddTooltipBuildExtra = 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;}; - l('buttonSell-' + me.id).onmouseover = function() {CM.Disp.TooltipSell = true;}; - l('buttonSell-' + me.id).onmouseout = function() {CM.Disp.TooltipSell = false;}; - l('buttonSellAll-' + me.id).onmouseover = function() {CM.Disp.TooltipSellAll = true;}; - l('buttonSellAll-' + me.id).onmouseout = function() {CM.Disp.TooltipSellAll = false;}; - } -} - CM.Disp.Tooltip = function(type, name) { if (type == 'b') { l('tooltip').innerHTML = Game.Objects[name].tooltip(); if (CM.Config.TooltipAmor == 1) { - var buildPrice = CM.Sim.BuildingGetPrice(Game.Objects[name].basePrice, 0, Game.Objects[name].amount); + var buildPrice = CM.Sim.BuildingGetPrice(Game.Objects[name].basePrice, 0, Game.Objects[name].free, Game.Objects[name].amount); var amortizeAmount = buildPrice - Game.Objects[name].totalCookies; if (amortizeAmount > 0) { l('tooltip').innerHTML = l('tooltip').innerHTML.split('so far').join('so far
' + Beautify(amortizeAmount) + ' ' + (Math.floor(amortizeAmount) == 1 ? 'cookie' : 'cookies') + ' left to amortize (' + CM.Disp.GetTimeColor(buildPrice, Game.Objects[name].totalCookies, (Game.Objects[name].storedTotalCps * Game.globalCpsMult)).text + ')'); } } - if (CM.Disp.TooltipBuy10) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join(Beautify(CM.Cache.Objects10[name].price)); + if (Game.buyMode == 1) { + var target = ''; + var change = false; + if (Game.buyBulk == 10) { + target = 'Objects10'; + change = true; + } + else if (Game.buyBulk == 100) { + target = 'Objects100'; + change = true; + } + if (change) { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join(Beautify(CM.Cache[target][name].price)); + } } - if (CM.Disp.TooltipSell) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, 1))); - } - if (CM.Disp.TooltipSellAll) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].amount))); + else if (Game.buyMode == -1) { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + l('productPrice' + Game.Objects[name].id).innerHTML); } } else { // Upgrades @@ -1802,7 +1815,7 @@ CM.Disp.Tooltip = function(type, name) { area.id = 'CMTooltipArea'; l('tooltip').appendChild(area); - if (CM.Config.Tooltip == 1) { + if (CM.Config.Tooltip == 1 && (type != 'b' || Game.buyMode == 1)) { l('tooltip').firstChild.style.paddingBottom = '4px'; var tooltip = document.createElement('div'); tooltip.style.border = '1px solid'; @@ -1849,23 +1862,24 @@ CM.Disp.UpdateTooltip = function() { var price; var bonus; if (CM.Disp.tooltipType == 'b') { - if (!CM.Disp.TooltipBuy10) { - bonus = CM.Cache.Objects[CM.Disp.tooltipName].bonus; - price = Game.Objects[CM.Disp.tooltipName].getPrice(); - if (CM.Config.Tooltip == 1) { - l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Objects[CM.Disp.tooltipName].color; - l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects[CM.Disp.tooltipName].bci, 2); - l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Objects[CM.Disp.tooltipName].color; - } + var target = ''; + if (Game.buyMode == 1 && Game.buyBulk == 10) { + target = 'Objects10'; + price = CM.Cache[target][CM.Disp.tooltipName].price; + } + else if (Game.buyMode == 1 && Game.buyBulk == 100) { + target = 'Objects100'; + price = CM.Cache[target][CM.Disp.tooltipName].price; } else { - bonus = CM.Cache.Objects10[CM.Disp.tooltipName].bonus; - price = CM.Cache.Objects10[CM.Disp.tooltipName].price; - if (CM.Config.Tooltip == 1) { - l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Objects10[CM.Disp.tooltipName].color; - l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects10[CM.Disp.tooltipName].bci, 2); - l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Objects10[CM.Disp.tooltipName].color; - } + target = 'Objects'; + price = Game.Objects[CM.Disp.tooltipName].getPrice(); + } + bonus = CM.Cache[target][CM.Disp.tooltipName].bonus; + if (CM.Config.Tooltip == 1 && Game.buyMode == 1) { + l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; + l('CMTooltipBCI').textContent = Beautify(CM.Cache[target][CM.Disp.tooltipName].bci, 2); + l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; } } else { // Upgrades @@ -1877,7 +1891,7 @@ CM.Disp.UpdateTooltip = function() { l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; } } - if (CM.Config.Tooltip == 1) { + if (CM.Config.Tooltip == 1 && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { l('CMTooltipIncome').textContent = Beautify(bonus, 2); var increase = Math.round(bonus / Game.cookiesPs * 10000); @@ -1901,7 +1915,7 @@ CM.Disp.UpdateTooltip = function() { } var caut = warn * 7; var amount = Game.cookies - price; - if (amount < warn || amount < caut) { + if ((amount < warn || amount < caut) && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { if (CM.Config.ToolWarnCautPos == 0) { CM.Disp.TooltipWarnCaut.style.right = '0px'; } @@ -2066,13 +2080,13 @@ CM.Disp.colorBrown = 'Brown'; CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray, CM.Disp.colorPink, CM.Disp.colorBrown]; CM.Disp.lastGoldenCookieState = 'none'; CM.Disp.lastAscendState = -1; +CM.Disp.lastBuyMode = -1; +CM.Disp.lastBuyBulk = -1; 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.TooltipBuy10 = false; -CM.Disp.TooltipSell = false; -CM.Disp.TooltipSellAll = false; CM.Disp.TooltipWrinklerArea = 0; CM.Disp.TooltipWrinkler = -1; @@ -2181,6 +2195,20 @@ CM.Loop = function() { CM.Sim.DoSims = 0; } + + // Update Buildings Color for different buy/sell modes + var updateBuildings = false; + if (CM.Disp.lastBuyMode != Game.buyMode) { + CM.Disp.lastBuyMode = Game.buyMode; + updateBuildings = true; + } + if (CM.Disp.lastBuyBulk != Game.buyBulk) { + CM.Disp.lastBuyBulk = Game.buyBulk; + updateBuildings = true; + } + if (updateBuildings) { + CM.Disp.UpdateBuildings(); + } // Redraw timers CM.Disp.UpdateBotBarTime(); @@ -2234,12 +2262,13 @@ CM.DelayInit = function() { CM.Disp.CreateChoEggTooltip(); CM.Disp.CreateTooltipWarnCaut(); CM.Disp.AddTooltipBuild(); - //CM.Disp.AddTooltipBuildExtra(); // The extra per building was removed CM.Disp.AddWrinklerAreaDetect(); CM.ReplaceNative(); Game.CalculateGains(); CM.LoadConfig(); // Must be after all things are created! CM.Disp.lastAscendState = Game.OnAscend; + CM.Disp.lastBuyMode = Game.buyMode; + CM.Disp.lastBuyBulk = Game.buyBulk; if (Game.prefs.popups) Game.Popup('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!'); else Game.Notify('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!', '', '', 1, 1); @@ -2257,32 +2286,36 @@ CM.VersionMinor = '3'; * 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; - if (Game.Has('Divine discount')) price *= 0.99; - if (Game.hasAura('Fierce Hoarder')) price *= 0.98; - totalPrice += Math.ceil(price); - count++; +CM.Sim.BuildingGetPrice = function(basePrice, start, free, increase) { + var price=0; + for (var i = Math.max(0 , start); i < Math.max(0, start + increase); i++) { + price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } - return totalPrice; + 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; + if (Game.Has('Divine discount')) price *= 0.99; + if (Game.hasAura('Fierce Hoarder')) price *= 0.98; + return Math.ceil(price); } -CM.Sim.BuildingSell = function(basePrice, start, amount) { - var totalMoni = 0; - while (amount > 0) { - var giveBack = 0.5; - if (Game.hasAura('Earth Shatterer')) giveBack = 0.85; - totalMoni += Math.floor(CM.Sim.BuildingGetPrice(basePrice, start, 1) * giveBack); - start--; - amount--; +CM.Sim.BuildingSell = function(basePrice, start, free, amount) { + var price=0; + for (var i = Math.max(0, start - amount); i < Math.max(0, start); i++) { + price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } - return totalMoni; + 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; + if (Game.Has('Divine discount')) price*=0.99; + if (Game.hasAura('Fierce Hoarder')) price*=0.98; + if (Game.hasAura('Earth Shatterer')) { + price *= 0.85; + } + else { + price *= 0.5; + } + return Math.ceil(price); } CM.Sim.Has = function(what) { diff --git a/src/Cache.js b/src/Cache.js index 7e3df6a..05baeb1 100644 --- a/src/Cache.js +++ b/src/Cache.js @@ -19,6 +19,9 @@ CM.Cache.RemakeIncome = function() { // Simulate Building Buys for 10 amount CM.Sim.BuyBuildings(10, 'Objects10'); + + // Simulate Building Buys for 100 amount + CM.Sim.BuyBuildings(100, 'Objects100'); } CM.Cache.RemakeBuildingsBCI = function() { @@ -57,19 +60,19 @@ 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; +CM.Cache.RemakeBuildingsOtherBCI = function(amount, target) { + for (var i in CM.Cache[target]) { + CM.Cache[target][i].price = CM.Sim.BuildingGetPrice(Game.Objects[i].basePrice, Game.Objects[i].amount, Game.Objects[i].free, amount); + CM.Cache[target][i].bci = CM.Cache[target][i].price / CM.Cache[target][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; + if (CM.Cache[target][i].bci <= 0 || CM.Cache[target][i].bci == 'Infinity') color = CM.Disp.colorGray; + else if (CM.Cache[target][i].bci < CM.Disp.min) color = CM.Disp.colorBlue; + else if (CM.Cache[target][i].bci == CM.Disp.min) color = CM.Disp.colorGreen; + else if (CM.Cache[target][i].bci == CM.Disp.max) color = CM.Disp.colorRed; + else if (CM.Cache[target][i].bci > CM.Disp.max) color = CM.Disp.colorPurple; + else if (CM.Cache[target][i].bci > CM.Disp.mid) color = CM.Disp.colorOrange; else color = CM.Disp.colorYellow; - CM.Cache.Objects10[i].color = color; + CM.Cache[target][i].color = color; } } @@ -81,7 +84,10 @@ CM.Cache.RemakeBCI = function() { CM.Cache.RemakeUpgradeBCI(); // Buildings for 10 amount - CM.Cache.RemakeBuildings10BCI(); + CM.Cache.RemakeBuildingsOtherBCI(10, 'Objects10'); + + // Buildings for 100 amount + CM.Cache.RemakeBuildingsOtherBCI(100, 'Objects100'); } CM.Cache.RemakeLucky = function() { @@ -158,7 +164,7 @@ CM.Cache.RemakeSellAllTotal = function() { var sellTotal = 0; for (var i in Game.Objects) { var me = Game.Objects[i]; - sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.amount); + sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.free, me.amount); } CM.Cache.SellAllTotal = sellTotal; } diff --git a/src/Disp.js b/src/Disp.js index 44f3439..c719157 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -443,9 +443,19 @@ CM.Disp.UpdateBotTimerBarDisplay = function() { } CM.Disp.UpdateBuildings = function() { - if (CM.Config.BuildColor == 1) { - for (var i in CM.Cache.Objects) { - l('productPrice' + Game.Objects[i].id).style.color = CM.Config.Colors[CM.Cache.Objects[i].color]; + if (CM.Config.BuildColor == 1 && Game.buyMode == 1) { + var target = ''; + if (Game.buyBulk == 10) { + target = 'Objects10' + } + else if (Game.buyBulk == 100) { + target = 'Objects100' + } + else { + target = 'Objects' + } + for (var i in CM.Cache[target]) { + l('productPrice' + Game.Objects[i].id).style.color = CM.Config.Colors[CM.Cache[target][i].color]; } } else { @@ -1145,7 +1155,7 @@ CM.Disp.AddMenuStats = function(title) { if (Game.cpsSucked > 0) { stats.appendChild(header('Wrinklers', 'Wrink')); if (CM.Config.StatsPref.Wrink || (CM.Config.StatsPref.Sea && choEgg)) { - var totalSucked = 0; + var totalSucked = 0; // Used in Chocolate Egg calculation below also for (var i in Game.wrinklers) { var sucked = Game.wrinklers[i].sucked; var toSuck = 1.1; @@ -1275,7 +1285,7 @@ CM.Disp.AddMenuStats = function(title) { choEggTitleFrag.appendChild(choEggTitleSpan); var choEggTotal = Game.cookies + CM.Cache.SellAllTotal; if (Game.cpsSucked > 0) { - choEggTotal += sucked; + choEggTotal += totalSucked; } choEggTotal *= 0.05; stats.appendChild(listing(choEggTitleFrag, document.createTextNode(Beautify(choEggTotal)))); @@ -1409,36 +1419,33 @@ CM.Disp.AddTooltipUpgrade = function() { } } -CM.Disp.AddTooltipBuildExtra = 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;}; - l('buttonSell-' + me.id).onmouseover = function() {CM.Disp.TooltipSell = true;}; - l('buttonSell-' + me.id).onmouseout = function() {CM.Disp.TooltipSell = false;}; - l('buttonSellAll-' + me.id).onmouseover = function() {CM.Disp.TooltipSellAll = true;}; - l('buttonSellAll-' + me.id).onmouseout = function() {CM.Disp.TooltipSellAll = false;}; - } -} - CM.Disp.Tooltip = function(type, name) { if (type == 'b') { l('tooltip').innerHTML = Game.Objects[name].tooltip(); if (CM.Config.TooltipAmor == 1) { - var buildPrice = CM.Sim.BuildingGetPrice(Game.Objects[name].basePrice, 0, Game.Objects[name].amount); + var buildPrice = CM.Sim.BuildingGetPrice(Game.Objects[name].basePrice, 0, Game.Objects[name].free, Game.Objects[name].amount); var amortizeAmount = buildPrice - Game.Objects[name].totalCookies; if (amortizeAmount > 0) { l('tooltip').innerHTML = l('tooltip').innerHTML.split('so far').join('so far
' + Beautify(amortizeAmount) + ' ' + (Math.floor(amortizeAmount) == 1 ? 'cookie' : 'cookies') + ' left to amortize (' + CM.Disp.GetTimeColor(buildPrice, Game.Objects[name].totalCookies, (Game.Objects[name].storedTotalCps * Game.globalCpsMult)).text + ')'); } } - if (CM.Disp.TooltipBuy10) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join(Beautify(CM.Cache.Objects10[name].price)); + if (Game.buyMode == 1) { + var target = ''; + var change = false; + if (Game.buyBulk == 10) { + target = 'Objects10'; + change = true; + } + else if (Game.buyBulk == 100) { + target = 'Objects100'; + change = true; + } + if (change) { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join(Beautify(CM.Cache[target][name].price)); + } } - if (CM.Disp.TooltipSell) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, 1))); - } - if (CM.Disp.TooltipSellAll) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].amount))); + else if (Game.buyMode == -1) { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + l('productPrice' + Game.Objects[name].id).innerHTML); } } else { // Upgrades @@ -1450,7 +1457,7 @@ CM.Disp.Tooltip = function(type, name) { area.id = 'CMTooltipArea'; l('tooltip').appendChild(area); - if (CM.Config.Tooltip == 1) { + if (CM.Config.Tooltip == 1 && (type != 'b' || Game.buyMode == 1)) { l('tooltip').firstChild.style.paddingBottom = '4px'; var tooltip = document.createElement('div'); tooltip.style.border = '1px solid'; @@ -1497,23 +1504,24 @@ CM.Disp.UpdateTooltip = function() { var price; var bonus; if (CM.Disp.tooltipType == 'b') { - if (!CM.Disp.TooltipBuy10) { - bonus = CM.Cache.Objects[CM.Disp.tooltipName].bonus; - price = Game.Objects[CM.Disp.tooltipName].getPrice(); - if (CM.Config.Tooltip == 1) { - l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Objects[CM.Disp.tooltipName].color; - l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects[CM.Disp.tooltipName].bci, 2); - l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Objects[CM.Disp.tooltipName].color; - } + var target = ''; + if (Game.buyMode == 1 && Game.buyBulk == 10) { + target = 'Objects10'; + price = CM.Cache[target][CM.Disp.tooltipName].price; + } + else if (Game.buyMode == 1 && Game.buyBulk == 100) { + target = 'Objects100'; + price = CM.Cache[target][CM.Disp.tooltipName].price; } else { - bonus = CM.Cache.Objects10[CM.Disp.tooltipName].bonus; - price = CM.Cache.Objects10[CM.Disp.tooltipName].price; - if (CM.Config.Tooltip == 1) { - l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Objects10[CM.Disp.tooltipName].color; - l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects10[CM.Disp.tooltipName].bci, 2); - l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Objects10[CM.Disp.tooltipName].color; - } + target = 'Objects'; + price = Game.Objects[CM.Disp.tooltipName].getPrice(); + } + bonus = CM.Cache[target][CM.Disp.tooltipName].bonus; + if (CM.Config.Tooltip == 1 && Game.buyMode == 1) { + l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; + l('CMTooltipBCI').textContent = Beautify(CM.Cache[target][CM.Disp.tooltipName].bci, 2); + l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; } } else { // Upgrades @@ -1525,7 +1533,7 @@ CM.Disp.UpdateTooltip = function() { l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; } } - if (CM.Config.Tooltip == 1) { + if (CM.Config.Tooltip == 1 && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { l('CMTooltipIncome').textContent = Beautify(bonus, 2); var increase = Math.round(bonus / Game.cookiesPs * 10000); @@ -1549,7 +1557,7 @@ CM.Disp.UpdateTooltip = function() { } var caut = warn * 7; var amount = Game.cookies - price; - if (amount < warn || amount < caut) { + if ((amount < warn || amount < caut) && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { if (CM.Config.ToolWarnCautPos == 0) { CM.Disp.TooltipWarnCaut.style.right = '0px'; } @@ -1714,13 +1722,13 @@ CM.Disp.colorBrown = 'Brown'; CM.Disp.colors = [CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray, CM.Disp.colorPink, CM.Disp.colorBrown]; CM.Disp.lastGoldenCookieState = 'none'; CM.Disp.lastAscendState = -1; +CM.Disp.lastBuyMode = -1; +CM.Disp.lastBuyBulk = -1; 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.TooltipBuy10 = false; -CM.Disp.TooltipSell = false; -CM.Disp.TooltipSellAll = false; CM.Disp.TooltipWrinklerArea = 0; CM.Disp.TooltipWrinkler = -1; diff --git a/src/Main.js b/src/Main.js index 75ac7a9..7542a33 100644 --- a/src/Main.js +++ b/src/Main.js @@ -98,6 +98,20 @@ CM.Loop = function() { CM.Sim.DoSims = 0; } + + // Update Buildings Color for different buy/sell modes + var updateBuildings = false; + if (CM.Disp.lastBuyMode != Game.buyMode) { + CM.Disp.lastBuyMode = Game.buyMode; + updateBuildings = true; + } + if (CM.Disp.lastBuyBulk != Game.buyBulk) { + CM.Disp.lastBuyBulk = Game.buyBulk; + updateBuildings = true; + } + if (updateBuildings) { + CM.Disp.UpdateBuildings(); + } // Redraw timers CM.Disp.UpdateBotBarTime(); @@ -151,12 +165,13 @@ CM.DelayInit = function() { CM.Disp.CreateChoEggTooltip(); CM.Disp.CreateTooltipWarnCaut(); CM.Disp.AddTooltipBuild(); - //CM.Disp.AddTooltipBuildExtra(); // The extra per building was removed CM.Disp.AddWrinklerAreaDetect(); CM.ReplaceNative(); Game.CalculateGains(); CM.LoadConfig(); // Must be after all things are created! CM.Disp.lastAscendState = Game.OnAscend; + CM.Disp.lastBuyMode = Game.buyMode; + CM.Disp.lastBuyBulk = Game.buyBulk; if (Game.prefs.popups) Game.Popup('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!'); else Game.Notify('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' loaded!', '', '', 1, 1); diff --git a/src/Sim.js b/src/Sim.js index 3f8afeb..695aed7 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -2,32 +2,36 @@ * 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; - if (Game.Has('Divine discount')) price *= 0.99; - if (Game.hasAura('Fierce Hoarder')) price *= 0.98; - totalPrice += Math.ceil(price); - count++; +CM.Sim.BuildingGetPrice = function(basePrice, start, free, increase) { + var price=0; + for (var i = Math.max(0 , start); i < Math.max(0, start + increase); i++) { + price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } - return totalPrice; + 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; + if (Game.Has('Divine discount')) price *= 0.99; + if (Game.hasAura('Fierce Hoarder')) price *= 0.98; + return Math.ceil(price); } -CM.Sim.BuildingSell = function(basePrice, start, amount) { - var totalMoni = 0; - while (amount > 0) { - var giveBack = 0.5; - if (Game.hasAura('Earth Shatterer')) giveBack = 0.85; - totalMoni += Math.floor(CM.Sim.BuildingGetPrice(basePrice, start, 1) * giveBack); - start--; - amount--; +CM.Sim.BuildingSell = function(basePrice, start, free, amount) { + var price=0; + for (var i = Math.max(0, start - amount); i < Math.max(0, start); i++) { + price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } - return totalMoni; + 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; + if (Game.Has('Divine discount')) price*=0.99; + if (Game.hasAura('Fierce Hoarder')) price*=0.98; + if (Game.hasAura('Earth Shatterer')) { + price *= 0.85; + } + else { + price *= 0.5; + } + return Math.ceil(price); } CM.Sim.Has = function(what) { From 58e4b7d32803b917c2f151d8454279a84f36da27 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sat, 5 Mar 2016 10:19:12 -0500 Subject: [PATCH 17/17] Accounted for Golden Switch in Title and GC bars, Chocolate Egg stats now accounts for aura, fixed buy/sell function to reflect the real price, not the display price --- CookieMonster.js | 101 +++++++++++++++++++++++++++++++++++++---------- src/Cache.js | 34 ++++++++++++---- src/Disp.js | 20 +++++++--- src/Main.js | 2 +- src/Sim.js | 45 ++++++++++++++++++--- 5 files changed, 162 insertions(+), 40 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 23f3f59..d0801c9 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -180,13 +180,33 @@ CM.Cache.RemakeSeaSpec = function() { } } -CM.Cache.RemakeSellAllTotal = function() { - var sellTotal = 0; - for (var i in Game.Objects) { - var me = Game.Objects[i]; - sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.free, me.amount); +CM.Cache.RemakeSellForChoEgg = function() { + if (Game.hasAura('Earth Shatterer') || Game.dragonLevel < 9) { + var sellTotal = 0; + for (var i in Game.Objects) { + var me = Game.Objects[i]; + sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.free, me.amount, 0); + } } - CM.Cache.SellAllTotal = sellTotal; + else { + var highestBuilding = ''; + for (var i in Game.Objects) { + if (Game.Objects[i].amount > 0) highestBuilding = i; + } + var sellTotal = 0; + for (var i in Game.Objects) { + var me = Game.Objects[i]; + var amount = 0; + if (i == highestBuilding) { + amount = me.amount - 1; + } + else { + amount = me.amount; + } + sellTotal += CM.Sim.BuildingSell(me.basePrice, amount, me.free, amount, 1); + } + } + CM.Cache.SellForChoEgg = sellTotal; } CM.Cache.Lucky = 0; @@ -202,7 +222,7 @@ CM.Cache.ChainFrenzy = 0; CM.Cache.ChainFrenzyWrath = 0; CM.Cache.ChainFrenzyReward = 0; CM.Cache.ChainFrenzyWrathReward = 0; -CM.Cache.SellAllTotal = 0; +CM.Cache.SellForChoEgg = 0; /********** * Config * @@ -690,7 +710,7 @@ CM.Disp.UpdateTimerBar = function() { var maxWidth = CM.Disp.TimerBar.offsetWidth - 129; var count = 0; - if (Game.goldenCookie.life <= 0 && Game.goldenCookie.toDie == 0) { + if (Game.goldenCookie.life <= 0 && Game.goldenCookie.toDie == 0 && !Game.Has('Golden switch [off]')) { CM.Disp.TimerBarGC.style.display = ''; l('CMTimerBarGCMinBar').style.width = Math.round(Math.max(0, Game.goldenCookie.minTime - Game.goldenCookie.time) * maxWidth / Game.goldenCookie.maxTime) + 'px'; if (Game.goldenCookie.minTime == Game.goldenCookie.maxTime) { @@ -1097,9 +1117,12 @@ CM.Disp.UpdateTitle = function() { titleGC = '[G ' + Math.ceil(Game.goldenCookie.life / Game.fps) + ']'; } } - else { + else if (!Game.Has('Golden switch [off]')) { titleGC = '[' + Math.ceil((Game.goldenCookie.maxTime - Game.goldenCookie.time) / Game.fps) + ']'; } + else { + titleGC = '[GS]' + } if (Game.season=='christmas') { addSP = true; if (l('seasonPopup').style.display != 'none') { @@ -1134,11 +1157,11 @@ CM.Disp.CreateResetTooltip = function() { CM.Disp.CreateChoEggTooltip = function() { CM.Disp.ChoEggTooltipPlaceholder = document.createElement('div'); var choEggTitleDesc = document.createElement('div'); - choEggTitleDesc.style.minWidth = '240px'; + choEggTitleDesc.style.minWidth = '310px'; choEggTitleDesc.style.marginBottom = '4px'; var div = document.createElement('div'); div.style.textAlign = 'left'; - div.textContent = 'The amount of cookies you would get from selling all buildings, popping all wrinklers, and then buying Chocolate egg'; + div.textContent = 'The amount of cookies you would get from selling all buildings with Earth Shatterer aura (if possible), popping all wrinklers, and then buying Chocolate egg'; choEggTitleDesc.appendChild(div); CM.Disp.ChoEggTooltipPlaceholder.appendChild(choEggTitleDesc); } @@ -1641,7 +1664,7 @@ CM.Disp.AddMenuStats = function(title) { choEggTitleSpan.style.verticalAlign = 'bottom'; choEggTitleSpan.textContent = '?'; choEggTitleFrag.appendChild(choEggTitleSpan); - var choEggTotal = Game.cookies + CM.Cache.SellAllTotal; + var choEggTotal = Game.cookies + CM.Cache.SellForChoEgg; if (Game.cpsSucked > 0) { choEggTotal += totalSucked; } @@ -1803,7 +1826,12 @@ CM.Disp.Tooltip = function(type, name) { } } else if (Game.buyMode == -1) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + l('productPrice' + Game.Objects[name].id).innerHTML); + if (Game.buyBulk == -1) { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].free, Game.Objects[name].amount, 0))); + } + else { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].free, Game.buyBulk, 0))); + } } } else { // Upgrades @@ -2187,7 +2215,7 @@ CM.Loop = function() { CM.Cache.RemakeLucky(); CM.Cache.RemakeChain(); CM.Cache.RemakeSeaSpec(); - CM.Cache.RemakeSellAllTotal(); + CM.Cache.RemakeSellForChoEgg(); CM.Disp.UpdateBotBarOther(); CM.Disp.UpdateBuildings(); @@ -2287,7 +2315,7 @@ CM.VersionMinor = '3'; *******/ CM.Sim.BuildingGetPrice = function(basePrice, start, free, increase) { - var price=0; + /*var price=0; for (var i = Math.max(0 , start); i < Math.max(0, start + increase); i++) { price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } @@ -2296,11 +2324,25 @@ CM.Sim.BuildingGetPrice = function(basePrice, start, free, increase) { if (Game.Has('Faberge egg')) price *= 0.99; if (Game.Has('Divine discount')) price *= 0.99; if (Game.hasAura('Fierce Hoarder')) price *= 0.98; - return Math.ceil(price); + return Math.ceil(price);*/ + + var moni = 0; + for (var i = 0; i < increase; i++) { + var price = basePrice * Math.pow(Game.priceIncrease, Math.max(0, start - free)); + 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; + if (Game.Has('Divine discount')) price *= 0.99; + if (Game.hasAura('Fierce Hoarder')) price *= 0.98; + price = Math.ceil(price); + moni+=price; + start++; + } + return moni; } -CM.Sim.BuildingSell = function(basePrice, start, free, amount) { - var price=0; +CM.Sim.BuildingSell = function(basePrice, start, free, amount, emuAura) { + /*var price=0; for (var i = Math.max(0, start - amount); i < Math.max(0, start); i++) { price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } @@ -2309,13 +2351,32 @@ CM.Sim.BuildingSell = function(basePrice, start, free, amount) { if (Game.Has('Faberge egg')) price*=0.99; if (Game.Has('Divine discount')) price*=0.99; if (Game.hasAura('Fierce Hoarder')) price*=0.98; - if (Game.hasAura('Earth Shatterer')) { + if (Game.hasAura('Earth Shatterer') || emuAura) { price *= 0.85; } else { price *= 0.5; } - return Math.ceil(price); + return Math.ceil(price);*/ + + var moni=0; + for (var i = 0; i < amount; i++) { + var price = basePrice * Math.pow(Game.priceIncrease, Math.max(0, start - free)); + 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; + if (Game.Has('Divine discount')) price *= 0.99; + if (Game.hasAura('Fierce Hoarder')) price *= 0.98; + price = Math.ceil(price); + var giveBack = 0.5; + if (Game.hasAura('Earth Shatterer') || emuAura) giveBack=0.85; + price = Math.floor(price * giveBack); + if (start > 0) { + moni += price; + start--; + } + } + return moni; } CM.Sim.Has = function(what) { diff --git a/src/Cache.js b/src/Cache.js index 05baeb1..eb7eecc 100644 --- a/src/Cache.js +++ b/src/Cache.js @@ -160,13 +160,33 @@ CM.Cache.RemakeSeaSpec = function() { } } -CM.Cache.RemakeSellAllTotal = function() { - var sellTotal = 0; - for (var i in Game.Objects) { - var me = Game.Objects[i]; - sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.free, me.amount); +CM.Cache.RemakeSellForChoEgg = function() { + if (Game.hasAura('Earth Shatterer') || Game.dragonLevel < 9) { + var sellTotal = 0; + for (var i in Game.Objects) { + var me = Game.Objects[i]; + sellTotal += CM.Sim.BuildingSell(me.basePrice, me.amount, me.free, me.amount, 0); + } } - CM.Cache.SellAllTotal = sellTotal; + else { + var highestBuilding = ''; + for (var i in Game.Objects) { + if (Game.Objects[i].amount > 0) highestBuilding = i; + } + var sellTotal = 0; + for (var i in Game.Objects) { + var me = Game.Objects[i]; + var amount = 0; + if (i == highestBuilding) { + amount = me.amount - 1; + } + else { + amount = me.amount; + } + sellTotal += CM.Sim.BuildingSell(me.basePrice, amount, me.free, amount, 1); + } + } + CM.Cache.SellForChoEgg = sellTotal; } CM.Cache.Lucky = 0; @@ -182,5 +202,5 @@ CM.Cache.ChainFrenzy = 0; CM.Cache.ChainFrenzyWrath = 0; CM.Cache.ChainFrenzyReward = 0; CM.Cache.ChainFrenzyWrathReward = 0; -CM.Cache.SellAllTotal = 0; +CM.Cache.SellForChoEgg = 0; diff --git a/src/Disp.js b/src/Disp.js index c719157..4874ab3 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -332,7 +332,7 @@ CM.Disp.UpdateTimerBar = function() { var maxWidth = CM.Disp.TimerBar.offsetWidth - 129; var count = 0; - if (Game.goldenCookie.life <= 0 && Game.goldenCookie.toDie == 0) { + if (Game.goldenCookie.life <= 0 && Game.goldenCookie.toDie == 0 && !Game.Has('Golden switch [off]')) { CM.Disp.TimerBarGC.style.display = ''; l('CMTimerBarGCMinBar').style.width = Math.round(Math.max(0, Game.goldenCookie.minTime - Game.goldenCookie.time) * maxWidth / Game.goldenCookie.maxTime) + 'px'; if (Game.goldenCookie.minTime == Game.goldenCookie.maxTime) { @@ -739,9 +739,12 @@ CM.Disp.UpdateTitle = function() { titleGC = '[G ' + Math.ceil(Game.goldenCookie.life / Game.fps) + ']'; } } - else { + else if (!Game.Has('Golden switch [off]')) { titleGC = '[' + Math.ceil((Game.goldenCookie.maxTime - Game.goldenCookie.time) / Game.fps) + ']'; } + else { + titleGC = '[GS]' + } if (Game.season=='christmas') { addSP = true; if (l('seasonPopup').style.display != 'none') { @@ -776,11 +779,11 @@ CM.Disp.CreateResetTooltip = function() { CM.Disp.CreateChoEggTooltip = function() { CM.Disp.ChoEggTooltipPlaceholder = document.createElement('div'); var choEggTitleDesc = document.createElement('div'); - choEggTitleDesc.style.minWidth = '240px'; + choEggTitleDesc.style.minWidth = '310px'; choEggTitleDesc.style.marginBottom = '4px'; var div = document.createElement('div'); div.style.textAlign = 'left'; - div.textContent = 'The amount of cookies you would get from selling all buildings, popping all wrinklers, and then buying Chocolate egg'; + div.textContent = 'The amount of cookies you would get from selling all buildings with Earth Shatterer aura (if possible), popping all wrinklers, and then buying Chocolate egg'; choEggTitleDesc.appendChild(div); CM.Disp.ChoEggTooltipPlaceholder.appendChild(choEggTitleDesc); } @@ -1283,7 +1286,7 @@ CM.Disp.AddMenuStats = function(title) { choEggTitleSpan.style.verticalAlign = 'bottom'; choEggTitleSpan.textContent = '?'; choEggTitleFrag.appendChild(choEggTitleSpan); - var choEggTotal = Game.cookies + CM.Cache.SellAllTotal; + var choEggTotal = Game.cookies + CM.Cache.SellForChoEgg; if (Game.cpsSucked > 0) { choEggTotal += totalSucked; } @@ -1445,7 +1448,12 @@ CM.Disp.Tooltip = function(type, name) { } } else if (Game.buyMode == -1) { - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + l('productPrice' + Game.Objects[name].id).innerHTML); + if (Game.buyBulk == -1) { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].free, Game.Objects[name].amount, 0))); + } + else { + l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join('-' + Beautify(CM.Sim.BuildingSell(Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].free, Game.buyBulk, 0))); + } } } else { // Upgrades diff --git a/src/Main.js b/src/Main.js index 7542a33..a126629 100644 --- a/src/Main.js +++ b/src/Main.js @@ -90,7 +90,7 @@ CM.Loop = function() { CM.Cache.RemakeLucky(); CM.Cache.RemakeChain(); CM.Cache.RemakeSeaSpec(); - CM.Cache.RemakeSellAllTotal(); + CM.Cache.RemakeSellForChoEgg(); CM.Disp.UpdateBotBarOther(); CM.Disp.UpdateBuildings(); diff --git a/src/Sim.js b/src/Sim.js index 695aed7..1c98632 100644 --- a/src/Sim.js +++ b/src/Sim.js @@ -3,7 +3,7 @@ *******/ CM.Sim.BuildingGetPrice = function(basePrice, start, free, increase) { - var price=0; + /*var price=0; for (var i = Math.max(0 , start); i < Math.max(0, start + increase); i++) { price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } @@ -12,11 +12,25 @@ CM.Sim.BuildingGetPrice = function(basePrice, start, free, increase) { if (Game.Has('Faberge egg')) price *= 0.99; if (Game.Has('Divine discount')) price *= 0.99; if (Game.hasAura('Fierce Hoarder')) price *= 0.98; - return Math.ceil(price); + return Math.ceil(price);*/ + + var moni = 0; + for (var i = 0; i < increase; i++) { + var price = basePrice * Math.pow(Game.priceIncrease, Math.max(0, start - free)); + 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; + if (Game.Has('Divine discount')) price *= 0.99; + if (Game.hasAura('Fierce Hoarder')) price *= 0.98; + price = Math.ceil(price); + moni+=price; + start++; + } + return moni; } -CM.Sim.BuildingSell = function(basePrice, start, free, amount) { - var price=0; +CM.Sim.BuildingSell = function(basePrice, start, free, amount, emuAura) { + /*var price=0; for (var i = Math.max(0, start - amount); i < Math.max(0, start); i++) { price += basePrice * Math.pow(Game.priceIncrease, Math.max(0, i - free)); } @@ -25,13 +39,32 @@ CM.Sim.BuildingSell = function(basePrice, start, free, amount) { if (Game.Has('Faberge egg')) price*=0.99; if (Game.Has('Divine discount')) price*=0.99; if (Game.hasAura('Fierce Hoarder')) price*=0.98; - if (Game.hasAura('Earth Shatterer')) { + if (Game.hasAura('Earth Shatterer') || emuAura) { price *= 0.85; } else { price *= 0.5; } - return Math.ceil(price); + return Math.ceil(price);*/ + + var moni=0; + for (var i = 0; i < amount; i++) { + var price = basePrice * Math.pow(Game.priceIncrease, Math.max(0, start - free)); + 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; + if (Game.Has('Divine discount')) price *= 0.99; + if (Game.hasAura('Fierce Hoarder')) price *= 0.98; + price = Math.ceil(price); + var giveBack = 0.5; + if (Game.hasAura('Earth Shatterer') || emuAura) giveBack=0.85; + price = Math.floor(price * giveBack); + if (start > 0) { + moni += price; + start--; + } + } + return moni; } CM.Sim.Has = function(what) {