From bd2b59efde10d66bf57035754bc1876f89d7e1ae Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Tue, 12 Sep 2017 17:09:24 -0400 Subject: [PATCH] Added timer to Grimoire spells (Issue #136) with the help from @Hoten pull request (Issue #138) and fixed a very minor tooltip bug --- CookieMonster.js | 288 ++++++++++++++++++++++++++++++++++------------- src/Disp.js | 239 ++++++++++++++++++++++++++------------- src/Main.js | 49 +++++++- 3 files changed, 414 insertions(+), 162 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 14c8593..34b2844 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -605,7 +605,7 @@ CM.Disp.FormatTime = function(time, format) { return str; } -CM.Disp.GetTimeColor = function(price, bank, cps) { +CM.Disp.GetTimeColor = function(price, bank, cps, time) { var color; var text; if (bank >= price) { @@ -618,7 +618,12 @@ CM.Disp.GetTimeColor = function(price, bank, cps) { } } else { - var time = (price - bank) / cps; + if (typeof time !== 'undefined') { + var time = time; + } + else { + var time = (price - bank) / cps; + } text = CM.Disp.FormatTime(time); if (time > 300) { color = CM.Disp.colorRed; @@ -2064,6 +2069,15 @@ CM.Disp.ToggleToolWarnCautPos = function() { } } +CM.Disp.CalculateGrimoireRefillTime = function(currentMagic, maxMagic, targetMagic) { + var count = 0; + while (currentMagic < targetMagic) { + currentMagic += Math.max(0.002, Math.pow(currentMagic / Math.max(maxMagic, 100), 0.5)) * 0.002; + count++; + } + return count / Game.fps; +} + CM.Disp.AddTooltipBuild = function() { CM.Disp.TooltipBuildBack = []; for (var i in Game.Objects) { @@ -2086,6 +2100,18 @@ CM.Disp.AddTooltipUpgrade = function() { } } +CM.Disp.AddTooltipGrimoire = function() { + if (Game.Objects['Wizard tower'].minigameLoaded) { + CM.Disp.TooltipGrimoireBack = []; + for (var i in Game.Objects['Wizard tower'].minigame.spellsById) { + if (l('grimoireSpell' + i).onmouseover != null) { + CM.Disp.TooltipGrimoireBack[i] = l('grimoireSpell' + i).onmouseover; + eval('l(\'grimoireSpell\' + i).onmouseover = function() {Game.tooltip.dynamic = 1; Game.tooltip.draw(this, function() {return CM.Disp.Tooltip(\'g\', \'' + i + '\');}, \'this\'); Game.tooltip.wobble();}'); + } + } + } +} + CM.Disp.Tooltip = function(type, name) { if (type == 'b') { l('tooltip').innerHTML = Game.Objects[name].tooltip(); @@ -2120,16 +2146,19 @@ CM.Disp.Tooltip = function(type, name) { } } } - else { // Upgrades + else if (type == 'u') { if (!Game.UpgradesInStore[name]) return ''; l('tooltip').innerHTML = Game.crate(Game.UpgradesInStore[name], 'store', undefined, undefined, 1)(); } + else { // Grimoire + l('tooltip').innerHTML = Game.Objects['Wizard tower'].minigame.spellTooltip(name)(); + } var area = document.createElement('div'); area.id = 'CMTooltipArea'; l('tooltip').appendChild(area); - if (CM.Config.Tooltip == 1 && (type != 'b' || Game.buyMode == 1)) { + if (CM.Config.Tooltip == 1 && (type == 'u' || (type == 'b' && Game.buyMode == 1))) { l('tooltip').firstChild.style.paddingBottom = '4px'; var tooltip = document.createElement('div'); tooltip.style.border = '1px solid'; @@ -2144,6 +2173,7 @@ CM.Disp.Tooltip = function(type, name) { div.textContent = text; return div; } + tooltip.appendChild(header('Bonus Income')); var income = document.createElement('div'); income.style.marginBottom = '4px'; @@ -2160,7 +2190,7 @@ CM.Disp.Tooltip = function(type, name) { time.id = 'CMTooltipTime'; tooltip.appendChild(time); - l('tooltip').appendChild(tooltip); + area.appendChild(tooltip); } CM.Disp.tooltipType = type; @@ -2174,92 +2204,141 @@ CM.Disp.Tooltip = function(type, name) { CM.Disp.UpdateTooltip = function() { if (l('tooltipAnchor').style.display != 'none' && l('CMTooltipArea') != null) { - // Error checking - if (CM.Disp.tooltipType == 'u' && (typeof Game.UpgradesInStore[CM.Disp.tooltipName] === 'undefined' || typeof CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name] === 'undefined')) { - return; - } - var price; - var bonus; - if (CM.Disp.tooltipType == 'b') { - var target = ''; - if (Game.buyMode == 1 && Game.buyBulk == 10) { - target = 'Objects10'; - price = CM.Cache[target][CM.Disp.tooltipName].price; + if (CM.Disp.tooltipType == 'b' || CM.Disp.tooltipType == 'u') { + // Error checking + if (CM.Disp.tooltipType == 'u' && (typeof Game.UpgradesInStore[CM.Disp.tooltipName] === 'undefined' || typeof CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name] === 'undefined')) { + return; } - else if (Game.buyMode == 1 && Game.buyBulk == 100) { - target = 'Objects100'; - price = CM.Cache[target][CM.Disp.tooltipName].price; - } - else { - 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('CMTooltipPP').textContent = Beautify(CM.Cache[target][CM.Disp.tooltipName].pp, 2); - l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; - } - } - else { // Upgrades - bonus = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bonus; - price = Game.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].getPrice(); - if (CM.Config.Tooltip == 1) { - l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; - l('CMTooltipPP').textContent = Beautify(CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].pp, 2); - l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; - } - } - 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); - if (isFinite(increase) && increase != 0) { - l('CMTooltipIncome').textContent += ' (' + (increase / 100) + '% of income)'; - } - - var timeColor = CM.Disp.GetTimeColor(price, (Game.cookies + CM.Disp.GetWrinkConfigBank()), CM.Disp.GetCPS()); - l('CMTooltipTime').textContent = timeColor.text; - l('CMTooltipTime').className = CM.Disp.colorTextPre + timeColor.color; - } - - if (CM.Config.ToolWarnCaut == 1) { - var warn = CM.Cache.Lucky; - if (CM.Config.ToolWarnCautBon == 1) { - var bonusNoFren = bonus; - bonusNoFren /= CM.Sim.getCPSBuffMult(); - warn += ((bonusNoFren * 60 * 15) / 0.15); - } - var caut = warn * 7; - var amount = (Game.cookies + CM.Disp.GetWrinkConfigBank()) - price; - if ((amount < warn || amount < caut) && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { - if (CM.Config.ToolWarnCautPos == 0) { - CM.Disp.TooltipWarnCaut.style.right = '0px'; + var price; + var bonus; + if (CM.Disp.tooltipType == 'b') { + 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 { - CM.Disp.TooltipWarnCaut.style.top = (l('tooltip').offsetHeight) + 'px'; + target = 'Objects'; + price = Game.Objects[CM.Disp.tooltipName].getPrice(); } - CM.Disp.TooltipWarnCaut.style.width = (l('tooltip').offsetWidth - 6) + 'px'; - - if (amount < warn) { - l('CMDispTooltipWarn').style.display = ''; - l('CMDispTooltipWarnText').textContent = Beautify(warn - amount) + ' (' + CM.Disp.FormatTime((warn - amount) / CM.Disp.GetCPS()) + ')'; - l('CMDispTooltipCaut').style.display = ''; - l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; + 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('CMTooltipPP').textContent = Beautify(CM.Cache[target][CM.Disp.tooltipName].pp, 2); + l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; } - else if (amount < caut) { - l('CMDispTooltipCaut').style.display = ''; - l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; - l('CMDispTooltipWarn').style.display = 'none'; + } + else { // Upgrades + bonus = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bonus; + price = Game.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].getPrice(); + if (CM.Config.Tooltip == 1) { + l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; + l('CMTooltipPP').textContent = Beautify(CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].pp, 2); + l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; + } + } + 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); + if (isFinite(increase) && increase != 0) { + l('CMTooltipIncome').textContent += ' (' + (increase / 100) + '% of income)'; + } + + var timeColor = CM.Disp.GetTimeColor(price, (Game.cookies + CM.Disp.GetWrinkConfigBank()), CM.Disp.GetCPS()); + l('CMTooltipTime').textContent = timeColor.text; + l('CMTooltipTime').className = CM.Disp.colorTextPre + timeColor.color; + } + + if (CM.Config.ToolWarnCaut == 1) { + var warn = CM.Cache.Lucky; + if (CM.Config.ToolWarnCautBon == 1) { + var bonusNoFren = bonus; + bonusNoFren /= CM.Sim.getCPSBuffMult(); + warn += ((bonusNoFren * 60 * 15) / 0.15); + } + var caut = warn * 7; + var amount = (Game.cookies + CM.Disp.GetWrinkConfigBank()) - price; + if ((amount < warn || amount < caut) && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { + if (CM.Config.ToolWarnCautPos == 0) { + CM.Disp.TooltipWarnCaut.style.right = '0px'; + } + else { + CM.Disp.TooltipWarnCaut.style.top = (l('tooltip').offsetHeight) + 'px'; + } + CM.Disp.TooltipWarnCaut.style.width = (l('tooltip').offsetWidth - 6) + 'px'; + + if (amount < warn) { + l('CMDispTooltipWarn').style.display = ''; + l('CMDispTooltipWarnText').textContent = Beautify(warn - amount) + ' (' + CM.Disp.FormatTime((warn - amount) / CM.Disp.GetCPS()) + ')'; + l('CMDispTooltipCaut').style.display = ''; + l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; + } + else if (amount < caut) { + l('CMDispTooltipCaut').style.display = ''; + l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; + l('CMDispTooltipWarn').style.display = 'none'; + } + else { + l('CMDispTooltipWarn').style.display = 'none'; + l('CMDispTooltipCaut').style.display = 'none'; + } } else { l('CMDispTooltipWarn').style.display = 'none'; l('CMDispTooltipCaut').style.display = 'none'; } } - else { - l('CMDispTooltipWarn').style.display = 'none'; - l('CMDispTooltipCaut').style.display = 'none'; + } + else { // Grimoire + l('CMDispTooltipWarn').style.display = 'none'; + l('CMDispTooltipCaut').style.display = 'none'; + + var minigame = Game.Objects['Wizard tower'].minigame; + var spellCost = minigame.getSpellCost(minigame.spellsById[CM.Disp.tooltipName]); + + if (CM.Config.Tooltip == 1 && spellCost <= minigame.magicM) { + l('CMTooltipArea').innerHTML = ''; + + l('tooltip').firstChild.style.paddingBottom = '4px'; + var tooltip = document.createElement('div'); + tooltip.style.border = '1px solid'; + tooltip.style.padding = '4px'; + tooltip.style.margin = '0px -4px'; + tooltip.id = 'CMTooltipBorder'; + tooltip.className = CM.Disp.colorTextPre + CM.Disp.colorGray; + + var header = function(text) { + var div = document.createElement('div'); + div.style.fontWeight = 'bold'; + div.className = CM.Disp.colorTextPre + CM.Disp.colorBlue; + div.textContent = text; + return div; + } + + tooltip.appendChild(header('Time Left')); + var time = document.createElement('div'); + time.id = 'CMTooltipTime'; + tooltip.appendChild(time); + var timeColor = CM.Disp.GetTimeColor(spellCost, minigame.magic, undefined, CM.Disp.CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, spellCost)); + time.textContent = timeColor.text; + time.className = CM.Disp.colorTextPre + timeColor.color; + + if (spellCost <= minigame.magic) { + tooltip.appendChild(header('Recover Time')); + var recover = document.createElement('div'); + recover.id = 'CMTooltipRecover'; + tooltip.appendChild(recover); + var recoverColor = CM.Disp.GetTimeColor(minigame.magic, Math.max(0, minigame.magic - spellCost), undefined, CM.Disp.CalculateGrimoireRefillTime(Math.max(0, minigame.magic - spellCost), minigame.magicM, minigame.magic)); + recover.textContent = recoverColor.text; + recover.className = CM.Disp.colorTextPre + recoverColor.color; + } + + l('CMTooltipArea').appendChild(tooltip); } } } @@ -2460,7 +2539,15 @@ CM.ReplaceNative = function() { CM.Backup.UpdateSpecial(); } } - + + // Probably better to load per minigame + CM.Backup.scriptLoaded = Game.scriptLoaded; + Game.scriptLoaded = function(who, script) { + CM.Backup.scriptLoaded(who, script); + CM.Disp.AddTooltipGrimoire() + CM.ReplaceNativeGrimoire(); + } + CM.Backup.RebuildUpgrades = Game.RebuildUpgrades; Game.RebuildUpgrades = function() { CM.Backup.RebuildUpgrades(); @@ -2498,6 +2585,40 @@ CM.ReplaceNative = function() { } } +CM.ReplaceNativeGrimoire = function() { + CM.ReplaceNativeGrimoireLaunch(); + CM.ReplaceNativeGrimoireDraw(); +} + +CM.ReplaceNativeGrimoireLaunch = function() { + if (!CM.HasReplaceNativeGrimoireLaunch && Game.Objects['Wizard tower'].minigameLoaded) { + var minigame = Game.Objects['Wizard tower'].minigame; + CM.Backup.GrimoireLaunch = minigame.launch; + eval('CM.Backup.GrimoireLaunchMod = ' + minigame.launch.toString().split('=this').join('= Game.Objects[\'Wizard tower\'].minigame')); + Game.Objects['Wizard tower'].minigame.launch = function() { + CM.Backup.GrimoireLaunchMod(); + CM.Disp.AddTooltipGrimoire(); + CM.HasReplaceNativeGrimoireDraw = false; + CM.ReplaceNativeGrimoireDraw(); + } + CM.HasReplaceNativeGrimoireLaunch = true; + } +} + +CM.ReplaceNativeGrimoireDraw = function() { + if (!CM.HasReplaceNativeGrimoireDraw && Game.Objects['Wizard tower'].minigameLoaded) { + var minigame = Game.Objects['Wizard tower'].minigame; + CM.Backup.GrimoireDraw = minigame.draw; + Game.Objects['Wizard tower'].minigame.draw = function() { + CM.Backup.GrimoireDraw(); + if (minigame.magic < minigame.magicM) { + minigame.magicBarTextL.innerHTML += ' (' + CM.Disp.FormatTime(CM.Disp.CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, minigame.magicM)) + ')'; + } + } + CM.HasReplaceNativeGrimoireDraw = true; + } +} + CM.Loop = function() { if (CM.Disp.lastAscendState != Game.OnAscend) { CM.Disp.lastAscendState = Game.OnAscend; @@ -2604,9 +2725,11 @@ CM.DelayInit = function() { CM.Disp.CreateTooltip('ChoEggTooltipPlaceholder', 'The amount of cookies you would get from popping all wrinklers with Skruuia god in Diamind slot, selling all buildings with Earth Shatterer aura, and then buying Chocolate egg', '360px'); CM.Disp.CreateTooltipWarnCaut(); CM.Disp.AddTooltipBuild(); + CM.Disp.AddTooltipGrimoire(); CM.Disp.AddWrinklerAreaDetect(); CM.Cache.InitCookiesDiff(); CM.ReplaceNative(); + CM.ReplaceNativeGrimoire(); Game.CalculateGains(); CM.LoadConfig(); // Must be after all things are created! CM.Disp.lastAscendState = Game.OnAscend; @@ -2619,6 +2742,9 @@ CM.DelayInit = function() { Game.Win('Third-party'); } +CM.HasReplaceNativeGrimoireLaunch = false; +CM.HasReplaceNativeGrimoireDraw = false; + CM.ConfigDefault = {BotBar: 1, TimerBar: 1, TimerBarPos: 0, BuildColor: 1, BulkBuildColor: 0, UpBarColor: 1, CalcWrink: 0, CPSMode: 1, AvgCPSHist: 0, AvgClicksHist: 0, ToolWarnCautBon: 0, 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, ToolWrink: 1, Stats: 1, UpStats: 1, TimeFormat: 0, 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'; diff --git a/src/Disp.js b/src/Disp.js index 18895ed..a91aab5 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -55,7 +55,7 @@ CM.Disp.FormatTime = function(time, format) { return str; } -CM.Disp.GetTimeColor = function(price, bank, cps) { +CM.Disp.GetTimeColor = function(price, bank, cps, time) { var color; var text; if (bank >= price) { @@ -68,7 +68,12 @@ CM.Disp.GetTimeColor = function(price, bank, cps) { } } else { - var time = (price - bank) / cps; + if (typeof time !== 'undefined') { + var time = time; + } + else { + var time = (price - bank) / cps; + } text = CM.Disp.FormatTime(time); if (time > 300) { color = CM.Disp.colorRed; @@ -1514,6 +1519,15 @@ CM.Disp.ToggleToolWarnCautPos = function() { } } +CM.Disp.CalculateGrimoireRefillTime = function(currentMagic, maxMagic, targetMagic) { + var count = 0; + while (currentMagic < targetMagic) { + currentMagic += Math.max(0.002, Math.pow(currentMagic / Math.max(maxMagic, 100), 0.5)) * 0.002; + count++; + } + return count / Game.fps; +} + CM.Disp.AddTooltipBuild = function() { CM.Disp.TooltipBuildBack = []; for (var i in Game.Objects) { @@ -1536,6 +1550,18 @@ CM.Disp.AddTooltipUpgrade = function() { } } +CM.Disp.AddTooltipGrimoire = function() { + if (Game.Objects['Wizard tower'].minigameLoaded) { + CM.Disp.TooltipGrimoireBack = []; + for (var i in Game.Objects['Wizard tower'].minigame.spellsById) { + if (l('grimoireSpell' + i).onmouseover != null) { + CM.Disp.TooltipGrimoireBack[i] = l('grimoireSpell' + i).onmouseover; + eval('l(\'grimoireSpell\' + i).onmouseover = function() {Game.tooltip.dynamic = 1; Game.tooltip.draw(this, function() {return CM.Disp.Tooltip(\'g\', \'' + i + '\');}, \'this\'); Game.tooltip.wobble();}'); + } + } + } +} + CM.Disp.Tooltip = function(type, name) { if (type == 'b') { l('tooltip').innerHTML = Game.Objects[name].tooltip(); @@ -1570,16 +1596,19 @@ CM.Disp.Tooltip = function(type, name) { } } } - else { // Upgrades + else if (type == 'u') { if (!Game.UpgradesInStore[name]) return ''; l('tooltip').innerHTML = Game.crate(Game.UpgradesInStore[name], 'store', undefined, undefined, 1)(); } + else { // Grimoire + l('tooltip').innerHTML = Game.Objects['Wizard tower'].minigame.spellTooltip(name)(); + } var area = document.createElement('div'); area.id = 'CMTooltipArea'; l('tooltip').appendChild(area); - if (CM.Config.Tooltip == 1 && (type != 'b' || Game.buyMode == 1)) { + if (CM.Config.Tooltip == 1 && (type == 'u' || (type == 'b' && Game.buyMode == 1))) { l('tooltip').firstChild.style.paddingBottom = '4px'; var tooltip = document.createElement('div'); tooltip.style.border = '1px solid'; @@ -1594,6 +1623,7 @@ CM.Disp.Tooltip = function(type, name) { div.textContent = text; return div; } + tooltip.appendChild(header('Bonus Income')); var income = document.createElement('div'); income.style.marginBottom = '4px'; @@ -1610,7 +1640,7 @@ CM.Disp.Tooltip = function(type, name) { time.id = 'CMTooltipTime'; tooltip.appendChild(time); - l('tooltip').appendChild(tooltip); + area.appendChild(tooltip); } CM.Disp.tooltipType = type; @@ -1624,92 +1654,141 @@ CM.Disp.Tooltip = function(type, name) { CM.Disp.UpdateTooltip = function() { if (l('tooltipAnchor').style.display != 'none' && l('CMTooltipArea') != null) { - // Error checking - if (CM.Disp.tooltipType == 'u' && (typeof Game.UpgradesInStore[CM.Disp.tooltipName] === 'undefined' || typeof CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name] === 'undefined')) { - return; - } - var price; - var bonus; - if (CM.Disp.tooltipType == 'b') { - var target = ''; - if (Game.buyMode == 1 && Game.buyBulk == 10) { - target = 'Objects10'; - price = CM.Cache[target][CM.Disp.tooltipName].price; + if (CM.Disp.tooltipType == 'b' || CM.Disp.tooltipType == 'u') { + // Error checking + if (CM.Disp.tooltipType == 'u' && (typeof Game.UpgradesInStore[CM.Disp.tooltipName] === 'undefined' || typeof CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name] === 'undefined')) { + return; } - else if (Game.buyMode == 1 && Game.buyBulk == 100) { - target = 'Objects100'; - price = CM.Cache[target][CM.Disp.tooltipName].price; - } - else { - 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('CMTooltipPP').textContent = Beautify(CM.Cache[target][CM.Disp.tooltipName].pp, 2); - l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; - } - } - else { // Upgrades - bonus = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bonus; - price = Game.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].getPrice(); - if (CM.Config.Tooltip == 1) { - l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; - l('CMTooltipPP').textContent = Beautify(CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].pp, 2); - l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; - } - } - 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); - if (isFinite(increase) && increase != 0) { - l('CMTooltipIncome').textContent += ' (' + (increase / 100) + '% of income)'; - } - - var timeColor = CM.Disp.GetTimeColor(price, (Game.cookies + CM.Disp.GetWrinkConfigBank()), CM.Disp.GetCPS()); - l('CMTooltipTime').textContent = timeColor.text; - l('CMTooltipTime').className = CM.Disp.colorTextPre + timeColor.color; - } - - if (CM.Config.ToolWarnCaut == 1) { - var warn = CM.Cache.Lucky; - if (CM.Config.ToolWarnCautBon == 1) { - var bonusNoFren = bonus; - bonusNoFren /= CM.Sim.getCPSBuffMult(); - warn += ((bonusNoFren * 60 * 15) / 0.15); - } - var caut = warn * 7; - var amount = (Game.cookies + CM.Disp.GetWrinkConfigBank()) - price; - if ((amount < warn || amount < caut) && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { - if (CM.Config.ToolWarnCautPos == 0) { - CM.Disp.TooltipWarnCaut.style.right = '0px'; + var price; + var bonus; + if (CM.Disp.tooltipType == 'b') { + 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 { - CM.Disp.TooltipWarnCaut.style.top = (l('tooltip').offsetHeight) + 'px'; + target = 'Objects'; + price = Game.Objects[CM.Disp.tooltipName].getPrice(); } - CM.Disp.TooltipWarnCaut.style.width = (l('tooltip').offsetWidth - 6) + 'px'; - - if (amount < warn) { - l('CMDispTooltipWarn').style.display = ''; - l('CMDispTooltipWarnText').textContent = Beautify(warn - amount) + ' (' + CM.Disp.FormatTime((warn - amount) / CM.Disp.GetCPS()) + ')'; - l('CMDispTooltipCaut').style.display = ''; - l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; + 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('CMTooltipPP').textContent = Beautify(CM.Cache[target][CM.Disp.tooltipName].pp, 2); + l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache[target][CM.Disp.tooltipName].color; } - else if (amount < caut) { - l('CMDispTooltipCaut').style.display = ''; - l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; - l('CMDispTooltipWarn').style.display = 'none'; + } + else { // Upgrades + bonus = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bonus; + price = Game.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].getPrice(); + if (CM.Config.Tooltip == 1) { + l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; + l('CMTooltipPP').textContent = Beautify(CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].pp, 2); + l('CMTooltipPP').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color; + } + } + 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); + if (isFinite(increase) && increase != 0) { + l('CMTooltipIncome').textContent += ' (' + (increase / 100) + '% of income)'; + } + + var timeColor = CM.Disp.GetTimeColor(price, (Game.cookies + CM.Disp.GetWrinkConfigBank()), CM.Disp.GetCPS()); + l('CMTooltipTime').textContent = timeColor.text; + l('CMTooltipTime').className = CM.Disp.colorTextPre + timeColor.color; + } + + if (CM.Config.ToolWarnCaut == 1) { + var warn = CM.Cache.Lucky; + if (CM.Config.ToolWarnCautBon == 1) { + var bonusNoFren = bonus; + bonusNoFren /= CM.Sim.getCPSBuffMult(); + warn += ((bonusNoFren * 60 * 15) / 0.15); + } + var caut = warn * 7; + var amount = (Game.cookies + CM.Disp.GetWrinkConfigBank()) - price; + if ((amount < warn || amount < caut) && (CM.Disp.tooltipType != 'b' || Game.buyMode == 1)) { + if (CM.Config.ToolWarnCautPos == 0) { + CM.Disp.TooltipWarnCaut.style.right = '0px'; + } + else { + CM.Disp.TooltipWarnCaut.style.top = (l('tooltip').offsetHeight) + 'px'; + } + CM.Disp.TooltipWarnCaut.style.width = (l('tooltip').offsetWidth - 6) + 'px'; + + if (amount < warn) { + l('CMDispTooltipWarn').style.display = ''; + l('CMDispTooltipWarnText').textContent = Beautify(warn - amount) + ' (' + CM.Disp.FormatTime((warn - amount) / CM.Disp.GetCPS()) + ')'; + l('CMDispTooltipCaut').style.display = ''; + l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; + } + else if (amount < caut) { + l('CMDispTooltipCaut').style.display = ''; + l('CMDispTooltipCautText').textContent = Beautify(caut - amount) + ' (' + CM.Disp.FormatTime((caut - amount) / CM.Disp.GetCPS()) + ')'; + l('CMDispTooltipWarn').style.display = 'none'; + } + else { + l('CMDispTooltipWarn').style.display = 'none'; + l('CMDispTooltipCaut').style.display = 'none'; + } } else { l('CMDispTooltipWarn').style.display = 'none'; l('CMDispTooltipCaut').style.display = 'none'; } } - else { - l('CMDispTooltipWarn').style.display = 'none'; - l('CMDispTooltipCaut').style.display = 'none'; + } + else { // Grimoire + l('CMDispTooltipWarn').style.display = 'none'; + l('CMDispTooltipCaut').style.display = 'none'; + + var minigame = Game.Objects['Wizard tower'].minigame; + var spellCost = minigame.getSpellCost(minigame.spellsById[CM.Disp.tooltipName]); + + if (CM.Config.Tooltip == 1 && spellCost <= minigame.magicM) { + l('CMTooltipArea').innerHTML = ''; + + l('tooltip').firstChild.style.paddingBottom = '4px'; + var tooltip = document.createElement('div'); + tooltip.style.border = '1px solid'; + tooltip.style.padding = '4px'; + tooltip.style.margin = '0px -4px'; + tooltip.id = 'CMTooltipBorder'; + tooltip.className = CM.Disp.colorTextPre + CM.Disp.colorGray; + + var header = function(text) { + var div = document.createElement('div'); + div.style.fontWeight = 'bold'; + div.className = CM.Disp.colorTextPre + CM.Disp.colorBlue; + div.textContent = text; + return div; + } + + tooltip.appendChild(header('Time Left')); + var time = document.createElement('div'); + time.id = 'CMTooltipTime'; + tooltip.appendChild(time); + var timeColor = CM.Disp.GetTimeColor(spellCost, minigame.magic, undefined, CM.Disp.CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, spellCost)); + time.textContent = timeColor.text; + time.className = CM.Disp.colorTextPre + timeColor.color; + + if (spellCost <= minigame.magic) { + tooltip.appendChild(header('Recover Time')); + var recover = document.createElement('div'); + recover.id = 'CMTooltipRecover'; + tooltip.appendChild(recover); + var recoverColor = CM.Disp.GetTimeColor(minigame.magic, Math.max(0, minigame.magic - spellCost), undefined, CM.Disp.CalculateGrimoireRefillTime(Math.max(0, minigame.magic - spellCost), minigame.magicM, minigame.magic)); + recover.textContent = recoverColor.text; + recover.className = CM.Disp.colorTextPre + recoverColor.color; + } + + l('CMTooltipArea').appendChild(tooltip); } } } diff --git a/src/Main.js b/src/Main.js index 96db461..f4ba933 100644 --- a/src/Main.js +++ b/src/Main.js @@ -41,7 +41,15 @@ CM.ReplaceNative = function() { CM.Backup.UpdateSpecial(); } } - + + // Probably better to load per minigame + CM.Backup.scriptLoaded = Game.scriptLoaded; + Game.scriptLoaded = function(who, script) { + CM.Backup.scriptLoaded(who, script); + CM.Disp.AddTooltipGrimoire() + CM.ReplaceNativeGrimoire(); + } + CM.Backup.RebuildUpgrades = Game.RebuildUpgrades; Game.RebuildUpgrades = function() { CM.Backup.RebuildUpgrades(); @@ -79,6 +87,40 @@ CM.ReplaceNative = function() { } } +CM.ReplaceNativeGrimoire = function() { + CM.ReplaceNativeGrimoireLaunch(); + CM.ReplaceNativeGrimoireDraw(); +} + +CM.ReplaceNativeGrimoireLaunch = function() { + if (!CM.HasReplaceNativeGrimoireLaunch && Game.Objects['Wizard tower'].minigameLoaded) { + var minigame = Game.Objects['Wizard tower'].minigame; + CM.Backup.GrimoireLaunch = minigame.launch; + eval('CM.Backup.GrimoireLaunchMod = ' + minigame.launch.toString().split('=this').join('= Game.Objects[\'Wizard tower\'].minigame')); + Game.Objects['Wizard tower'].minigame.launch = function() { + CM.Backup.GrimoireLaunchMod(); + CM.Disp.AddTooltipGrimoire(); + CM.HasReplaceNativeGrimoireDraw = false; + CM.ReplaceNativeGrimoireDraw(); + } + CM.HasReplaceNativeGrimoireLaunch = true; + } +} + +CM.ReplaceNativeGrimoireDraw = function() { + if (!CM.HasReplaceNativeGrimoireDraw && Game.Objects['Wizard tower'].minigameLoaded) { + var minigame = Game.Objects['Wizard tower'].minigame; + CM.Backup.GrimoireDraw = minigame.draw; + Game.Objects['Wizard tower'].minigame.draw = function() { + CM.Backup.GrimoireDraw(); + if (minigame.magic < minigame.magicM) { + minigame.magicBarTextL.innerHTML += ' (' + CM.Disp.FormatTime(CM.Disp.CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, minigame.magicM)) + ')'; + } + } + CM.HasReplaceNativeGrimoireDraw = true; + } +} + CM.Loop = function() { if (CM.Disp.lastAscendState != Game.OnAscend) { CM.Disp.lastAscendState = Game.OnAscend; @@ -185,9 +227,11 @@ CM.DelayInit = function() { CM.Disp.CreateTooltip('ChoEggTooltipPlaceholder', 'The amount of cookies you would get from popping all wrinklers with Skruuia god in Diamind slot, selling all buildings with Earth Shatterer aura, and then buying Chocolate egg', '360px'); CM.Disp.CreateTooltipWarnCaut(); CM.Disp.AddTooltipBuild(); + CM.Disp.AddTooltipGrimoire(); CM.Disp.AddWrinklerAreaDetect(); CM.Cache.InitCookiesDiff(); CM.ReplaceNative(); + CM.ReplaceNativeGrimoire(); Game.CalculateGains(); CM.LoadConfig(); // Must be after all things are created! CM.Disp.lastAscendState = Game.OnAscend; @@ -200,6 +244,9 @@ CM.DelayInit = function() { Game.Win('Third-party'); } +CM.HasReplaceNativeGrimoireLaunch = false; +CM.HasReplaceNativeGrimoireDraw = false; + CM.ConfigDefault = {BotBar: 1, TimerBar: 1, TimerBarPos: 0, BuildColor: 1, BulkBuildColor: 0, UpBarColor: 1, CalcWrink: 0, CPSMode: 1, AvgCPSHist: 0, AvgClicksHist: 0, ToolWarnCautBon: 0, 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, ToolWrink: 1, Stats: 1, UpStats: 1, TimeFormat: 0, 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';