diff --git a/.eslintrc.js b/.eslintrc.js index 3da7a30..8c45ee6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,40 +1,35 @@ module.exports = { - env: { - browser: true, - es2021: true, - }, - globals: { - Game: 'writable', - l: 'readonly', - b64_to_utf8: 'readonly', - utf8_to_b64: 'readonly', - realAudio: 'readonly', - BeautifyAll: 'readonly', - CM: 'writable', - unsafeWindow: 'readonly', - }, - extends: 'airbnb-base', - parserOptions: { - ecmaVersion: 12, - }, - rules: { - indent: ['error', 'tab'], - 'import/no-named-default': 'off', - 'import/no-mutable-exports': 'off', - 'no-tabs': 'off', - 'max-len': 'off', - 'no-param-reassign': 'off', - 'no-plusplus': 'off', - 'no-new-func': 'off', - 'no-restricted-syntax': 'off', - 'no-mixed-operators': 'off', - 'prefer-destructuring': 'off', - 'func-names': 'off', - 'no-console': 'off', - 'no-nested-ternary': 'off', - 'prefer-arrow-callback': 'off', - 'no-new': 'off', - 'no-alert': 'off', - 'no-restricted-globals': 'off', - }, + env: { + browser: true, + es2021: true, + }, + globals: { + Game: 'writable', + l: 'readonly', + b64_to_utf8: 'readonly', + utf8_to_b64: 'readonly', + realAudio: 'readonly', + BeautifyAll: 'readonly', + CM: 'writable', + unsafeWindow: 'readonly', + }, + extends: ['airbnb-base', 'plugin:prettier/recommended'], + parserOptions: { + ecmaVersion: 12, + }, + rules: { + 'import/no-named-default': 'off', + 'import/no-mutable-exports': 'off', + 'no-param-reassign': 'off', + 'no-plusplus': 'off', + 'no-new-func': 'off', + 'no-restricted-syntax': 'off', + 'prefer-destructuring': 'off', + 'func-names': 'off', + 'no-console': 'off', + 'no-nested-ternary': 'off', + 'no-new': 'off', + 'no-alert': 'off', + 'no-restricted-globals': 'off', + }, }; diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..9409967 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "printWidth": 80 +} diff --git a/dist/CookieMonster.js.map b/dist/CookieMonster.js.map index 7ef5638..2daef30 100644 --- a/dist/CookieMonster.js.map +++ b/dist/CookieMonster.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://cookiemonster-mod/CookieMonster.js"],"names":["__webpack_modules__","877","module","global","factory","exports","document","win","Error","window","this","BoxShadow","funcName","elm","jsc","jscolor","initialized","instances","readyQueue","register","addEventListener","pub","init","installBySelector","selector","rootNode","node","elms","querySelectorAll","matchClass","RegExp","lookupClass","i","length","dataOpts","m","undefined","type","toLowerCase","isColorAttrSupported","getDataAttr","className","match","targetElm","optsStr","console","warn","docsRef","opts","trim","parseOptionsStr","e","str","JSON","parse","eParse","looseJSON","Function","eEval","getInstances","inst","targetElement","push","createEl","tagName","el","createElement","setData","nodeOrSelector","sel","querySelector","isNode","val","Node","nodeType","nodeName","removeChildren","firstChild","removeChild","isTextInput","isButton","n","indexOf","isButtonEmpty","value","textContent","isPassiveEventSupported","supported","Object","defineProperty","get","removeEventListener","setAttribute","dataProp","obj","arguments","data","hasOwnProperty","prop","map","removeData","getData","setDefault","name","attrName","getAttribute","setDataAttr","_attachedGroupEvents","attachGroupEvent","groupName","evnt","func","detachGroupEvents","evt","preventDefault","returnValue","captureTarget","target","setCapture","_capturedTarget","releaseTarget","releaseCapture","triggerEvent","eventName","bubbles","cancelable","ev","Event","createEvent","initEvent","dispatchEvent","triggerInputEvent","eventKey","keys","9","13","27","code","keyCode","strList","replace","split","hasClass","classList","contains","addClass","classNames","add","removeClass","repl","remove","getCompStyle","getComputedStyle","currentStyle","setStyle","styles","important","reversible","priority","origStyle","setVal","style","setProperty","hexColor","r","g","b","Math","round","toString","substr","toUpperCase","hexaColor","a","rgbColor","rgbaColor","linearGradient","stdName","prefixes","helper","tryFunc","tryVal","background","getFuncName","Array","prototype","join","call","setBorderRadius","border-radius","setBoxShadow","box-shadow","getElementPos","relativeToViewport","x","y","rect","getBoundingClientRect","left","top","viewPos","getViewPos","getElementSize","offsetWidth","offsetHeight","getAbsPointerPos","changedTouches","clientX","clientY","getRelPointerPos","targetRect","srcElement","doc","documentElement","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","getViewSize","innerWidth","clientWidth","innerHeight","clientHeight","RGB_HSV","min","v","max","h","HSV_RGB","s","u","floor","parseColorString","ret","rgba","format","parseInt","charAt","mR","mG","mB","mA","par","re","parseFloat","parsePaletteValue","mixed","vals","isArray","colors","color","containsTranparentColor","isAlphaFormat","scaleCanvasForHighDPR","canvas","dpr","devicePixelRatio","width","height","getContext","scale","genColorPreviewCanvas","separatorPos","specWidth","scaleForHighDPR","sepW","previewSeparator","sqSize","chessboardSize","sqColor1","chessboardColor1","sqColor2","chessboardColor2","cWidth","cHeight","ctx","fillStyle","fillRect","start","clearRect","lineWidth","beginPath","strokeStyle","moveTo","lineTo","stroke","genColorPreviewGradient","position","params","right","apply","redrawPosition","picker","owner","tp","vp","thisObj","fixed","c","ts","vs","pd","getPickerDims","ps","borderW","borderH","l","smartPosition","pp","positionValue","contractShadow","_drawPosition","vShadow","shadowBlur","wrap","boxS","shadow","shadowColor","w","controlBorderWidth","sliderSpace","getControlPadding","sliderSize","getSliderChannel","hasAlphaChannel","pal","getPaletteDims","padding","closeButton","buttonHeight","pW","pH","contentW","contentH","paddedW","paddedH","borderWidth","palette","cols","rows","cellW","cellH","sampleCount","_palette","paletteCols","ceil","paletteSpacing","paletteHeight","pointerBorderWidth","pointerThickness","getPadYChannel","mode","triggerCallback","callback","error","triggerGlobal","eventNames","trigger","_pointerMoveEvent","mouse","touch","_pointerEndEvent","_pointerOrigin","onDocumentKeyUp","tryHide","onWindowResize","onWindowScroll","onParentScroll","onDocumentMouseDown","showOnClick","disabled","show","onControlPointerStart","onPickerTouchStart","controlName","pointerType","registerDragEvents","offset","onDocumentPointerMove","onDocumentPointerEnd","parent","frameElement","ofs","abs","rel","channels","fromHSVA","setPad","setSld","setASld","onPaletteSampleClick","currentTarget","_setFormat","getFormat","paletteSetsAlpha","_paletteHasTransparency","fromRGBA","hideOnPaletteClick","hide","ofsX","ofsY","pointerAbs","xVal","yVal","fmt","createPadCanvas","draw","hGrad","createLinearGradient","addColorStop","vGrad","createSliderGradient","color1","color2","grad","createASliderGradient","hShadow","blur","spread","inset","flags","leaveValue","leaveAlpha","leavePreview","enumOpts","previewPosition","alphaChannel","deprecatedOpts","styleElement","onFineChange","overwriteImportant","closable","insetWidth","insetColor","refine","THIS","setOption","option","oldOpt","newOpt","setter","getOption","getter","drawPicker","_processParentElementsInDOM","box","boxB","pad","padB","padM","padCanvas","cross","crossBY","crossBX","crossLY","crossLX","sld","sldB","sldM","sldGrad","sldPtrS","sldPtrIB","sldPtrMB","sldPtrOB","asld","asldB","asldM","asldGrad","asldPtrS","asldPtrIB","asldPtrMB","asldPtrOB","btn","btnT","appendChild","passive","insetColors","outsetColor","p","displaySlider","displayAlphaSlider","pickerDims","crossOuterSize","crossSize","controlPadding","borderRadius","PI","clear","zIndex","border","borderColor","backgroundColor","opacity","controlBorderColor","cursor","instance","control","pointerBorderColor","pointerColor","overflow","display","sliderInnerSpace","innerHTML","chessboard","si","sampleColor","sampleCssColor","sc","sw","backgroundImage","toDataURL","backgroundRepeat","backgroundPosition","bottom","maxWidth","whiteSpace","buttonColor","font","textAlign","onmousedown","lineHeight","createTextNode","closeText","redrawPad","redrawSld","redrawASld","activeClassName","container","body","parentNode","yChannel","rgb1","rgb2","rgb","toHEXString","sldChannel","isPickerOwner","alpha","onChange","onInput","valueElement","alphaElement","previewElement","previewSize","previewPadding","required","hash","uppercase","forceStyle","hideOnLeave","minS","maxS","minV","maxV","minA","maxA","redraw","exposeColor","success","opt","channel","res","evs","callbackProp","isNaN","hsv","fromHSV","fromRGB","fromString","setPreviewElementBg","setValueElementValue","toHEXAString","toRGBString","toRGBAString","toGrayscale","toCanvas","toBackground","isLight","_currentFormat","processValueInput","processAlphaInput","colorStr","alphaVal","setAlphaElementValue","backgrounds","image","size","repeat","origin","preview","bg","sty","background-image","background-position","background-size","background-repeat","background-origin","padding-left","padding-right","_parentElementsProcessed","compStyle","set__palette","options","presetsArr","preset","slice","pres","presets","nonProperties","test","min-width","valueElementOrigEvents","oninput","oldVal","initValue","initAlpha","install","shift","ready","triggerNow","installByClassName","JSColor","__webpack_module_cache__","__webpack_require__","moduleId","__esModule","d","definition","key","o","enumerable","CMOptions","metric","shortScale","shortScaleAbbreviated","LastModCount","TooltipLumpBackup","BackupGrimoireLaunch","BackupGrimoireLaunchMod","BackupGrimoireDraw","HasReplaceNativeGrimoireLaunch","HasReplaceNativeGrimoireDraw","LoadMinigames","LastSeasonPopupState","LastTickerFortuneState","LastGardenNextStep","LastGoldenCookieState","LastSpawnedGoldenCookieState","LastMagicBarFull","CurrSpawnedGoldenCookieState","LastWrinklerCount","DispCSS","TooltipBuildBackup","TooltipGrimoireBackup","TooltipUpgradeBackup","BackupFunctions","ColorTextPre","ColorBackPre","ColorBlue","ColorGreen","ColorYellow","ColorOrange","ColorRed","ColorPurple","ColorGray","ColorPink","ColorBrown","Colors","TooltipText","CMLastAscendState","CMSayTime","TooltipWrinklerArea","TooltipWrinkler","TooltipWrinklerBeingShown","LastTargetBotBar","LastTargetBuildings","LastTargetTooltipBuilding","CookieTimes","ClickTimes","BuffColors","Frenzy","Dragon Harvest","Elder frenzy","Clot","Click frenzy","Dragonflight","TooltipPrice","TooltipBonusIncome","TooltipType","TooltipName","TooltipBonusMouse","LastAscendState","LastNumberOfTimers","GCTimers","Title","BeautifyFormatting_Beautify","num","floats","forced","decimals","ScaleDecimals","Infinity","Scale","Beautify","Number","isFinite","answer","ScaleCutoff","ScaleSeparator","toLocaleString","toExponential","exponential","AmountOfTenPowerThree","toFixed","log","FormatTime","time","longFormat","TimeFormat","GetTimeColor","text","CookiesDiff","WrinkDiff","WrinkFattestDiff","ChoEggDiff","ClicksDiff","HeavenlyChipsDiff","CacheLastCPSCheck","CacheLastCookies","CacheLastWrinkCookies","CacheLastWrinkFattestCookies","CacheLastClicks","CacheAverageGainBank","CacheAverageGainWrink","CacheAverageGainWrinkFattest","CacheAverageGainChoEgg","CacheAverageCPS","CacheLastHeavenlyCheck","CacheLastHeavenlyChips","CacheDoRemakeBuildPrices","CacheHadBuildAura","SimBuildingsOwned","SimUpgradesOwned","SimPledges","SimAchievementsOwned","SimHeavenlyPower","SimPrestige","SimDragonAura","SimDragonAura2","SimDoSims","SimEffs","SimCookiesPs","SimCookiesPsRaw","CacheDragonAura","CacheDragonAura2","CacheLastDragonLevel","CacheCostDragonUpgrade","CacheLucky","CacheLuckyReward","CacheLuckyWrathReward","CacheLuckyFrenzy","CacheLuckyRewardFrenzy","CacheLuckyWrathRewardFrenzy","CacheConjure","CacheConjureReward","CacheEdifice","CacheEdificeBuilding","CacheNoGoldSwitchCookiesPS","CacheDragonsFortuneMultAdjustment","CacheGoldenCookiesMult","CacheWrathCookiesMult","CacheHCPerSecond","CacheCentEgg","CacheSeaSpec","CacheLastChoEgg","CacheObjects1","CacheObjects10","CacheObjects100","CacheWrinklersTotal","CacheWrinklersNormal","CacheWrinklersFattest","CacheCurrWrinklerCPSMult","CacheCurrWrinklerCount","CacheUpgrades","CacheAverageClicks","CacheMissingUpgrades","CacheMissingUpgradesPrestige","CacheMissingUpgradesCookies","CacheChainRequired","CacheChainRequiredNext","CacheChainMaxReward","CacheChainWrathRequired","CacheChainWrathRequiredNext","CacheChainWrathMaxReward","CacheChainFrenzyRequired","CacheChainFrenzyRequiredNext","CacheChainFrenzyMaxReward","CacheChainFrenzyWrathRequired","CacheChainFrenzyWrathRequiredNext","CacheChainFrenzyWrathMaxReward","CacheRealCookiesEarned","CacheAvgCPSWithChoEgg","CacheSpawnedGoldenShimmer","CacheSeasonPopShimmer","CacheTimeTillNextPrestige","CacheMinPP","CacheMidPP","CacheMaxPP","CacheArrayOfPPs","CacheGoldenShimmersByID","CacheSellForChoEgg","SimObjects","SimUpgrades","SimAchievements","SimDateCentury","Game","startDate","SimDateAges","SimAuraMult","what","dragonAuras","SimGetSellMultiplier","giveBack","SimEff","def","SimHas","it","ascensionMode","pool","tier","bought","SimHasGod","hasGod","Temple","minigame","Objects","god","gods","slot","id","SimModifyBuildingPrice","building","price","hasBuff","fortune","minigameLoaded","godLvl","BuildingSell","build","basePrice","free","amount","noSim","moni","buyBulk","priceIncrease","modifyBuildingPrice","getSellMultiplier","UpdateBuildings","buyMode","BuildColor","removeProperty","SortBuildings","arr","k","sort","gridRow","UpdateUpgrades","UpBarColor","blue","green","yellow","orange","red","purple","gray","UpgradesInStore","me","addedColor","j","childNodes","div","SortUpgrades","nameChecker","arr2","upgrade","findIndex","order","GetCPS","CPSMode","CalcWrink","cookiesPs","cpsSucked","wrinklers","GetWrinkConfigBank","CreateTimer","bars","timerBar","margin","fontSize","marginRight","verticalAlign","colorBar","borderTopRightRadius","borderBottomRightRadius","timer","marginLeft","CreateBotBarBuildingColumn","buildingName","bonus","header","substring","UpdateBotBar","BotBar","count","timeColor","bulkPrice","cookies","UpdateBackground","Background","LeftBackground","UpdateBotTimerBarPosition","TimerBar","TimerBarPos","ToggleTimerBar","GetCPSBuffMult","mult","buffs","multCpS","ToggleToolWarnPos","ToolWarnPos","CalculateGrimoireRefillTime","currentMagic","maxMagic","targetMagic","fps","TooltipCreateHeader","fontWeight","TooltipCreateCalculationSection","tooltip","income","marginBottom","lastChild","click","production","CacheDragonAuras","dragonAura","dragonAura2","InitAchievement","achievementName","Achievements","you","SimGetTieredCpsMult","tieredUpgrades","Tiers","special","synergies","syn","buildingTie1","buildingTie2","grandma","Grandma","misfortune","vanilla","elderWrath","InitialBuildingData","cps","magicCpS","ComputeCps","GrandmaSynergies","UpgradesByPool","kitten","Portal","baseCps","baseCPS","InitUpgrade","upgradeName","Upgrades","power","level","pow","CopyData","UpgradesOwned","pledges","AchievementsOwned","heavenlyPower","prestige","totalCookies","won","BuildingGetPrice","increase","CreateSimpleTooltip","placeholder","minWidth","Tooltip","desc","UpdateTooltips","tooltipBox","paddingBottom","TooltipCreateTooltipBox","TooltipBuildUpgrade","productionAchievs","HasAchiev","achiev","nextProductionAchiev","Building","getPrice","bonusMouse","previousSibling","chocolate","Upgrade","TooltipLump","lumpType","lumpColor","lumpCurrentType","SugarLump","spellCost","getSpellCost","spellsById","TooltipGrim","magicM","magic","recover","recoverColor","conjure","reward","seperator","loss","Grimoire","Farm","TooltipPlots","plot","mature","plantsById","matureBase","plantName","GardenPlots","totalGain","mortal","tile","immortal","HarvestAll","getElementById","TooltipWarn","create","boxId","labelTextFront","labelTextBack","deficitId","transition","labelDiv","labelSpan","deficitDiv","deficitSpan","ToolWarnUser","TooltipCreateWarningSection","bonusIncomeUsed","ToolWarnBon","limitLucky","bonusNoFren","ToolWarnLucky","ToolWarnLuckyFrenzy","limitLuckyFrenzy","ToolWarnConjure","limitConjure","ToolWarnConjureFrenzy","limitConjureFrenzy","ToolWarnEdifice","children","Warnings","CreateTooltip","TooltipAmor","buildPrice","amortizeAmount","storedTotalCps","globalCpsMult","crateTooltip","lumpTooltip","spellTooltip","ObjectsById","tileTooltip","toolTooltip","area","Draw","prefs","autosave","drawT","onMenu","Stats","innerText","sayTime","T","maxWidthTwoBar","maxWidthOneBar","numberOfTimers","shimmerTypes","golden","spawned","Has","minTime","maxTime","TimerBarOverlay","season","reindeer","BuffTimerBars","classColor","UpdateTimerBar","TooltipWrink","showingTooltip","phase","selected","wrinkler","escape","CheckWrinklerTooltip","sucked","toSuck","UpdateWrinklerTooltip","UpStats","UpdateMenu","CMAvgQueue","[object Object]","maxLength","queue","newValue","timePeriod","CacheAvgCPS","currDate","Date","now","choEggTotal","cookiesEarned","timeDiff","bankDiffAvg","wrinkDiffAvg","wrinkFattestDiffAvg","choEggDiffAvg","clicksDiffAvg","cookieClicks","addLatest","cpsLength","AvgCPSHist","calcAverage","choEgg","HasUnlocked","AvgClicksHist","ColourOfPP","PPSecondsLowerLimit","PPOnlyConsiderBuyable","CacheBuildingsBulkPP","CachePP","PPExcludeTop","ColorPPBulkMode","CacheBuildingsPP","CacheUpgradePP","SimWin","CalculateGains","effs","myEffs","ii","heavenlyMult","SimGetHeavenlyMultiplier","heralds","cookieUpgrades","buildMult","sin","santaLevel","milkProgress","milkMult","catMult","storedCps","eggMult","day","lumps","rawCookiesPs","CpsAchievements","threshold","auraMult","bakeryName","goldenSwitchMult","upgrades","goldenCookieUpgrades","veilMult","runModHookOnValue","Fortunes","HalloCookies","ChristCookies","ValCookies","PlantDrops","SimHasAchiev","CheckOtherAchiev","grandmas","buildingsOwned","mathematician","base10","minAmount","Cursor","hasAllHalloCook","hasAllChristCook","list","fortunes","BuyBuildingsBonusIncome","tieredAchievs","achievUnlock","lastAchievementsOwned","BuyUpgradesBonusIncome","unlocked","CountsAsUpgradeOwned","diffMouseCPS","multClick","out","MouseCps","computedMouseCps","CacheBuildingIncome","result","CacheBuildingsPrices","CacheIncome","bonusIncome","CacheUpgradeIncome","MaxChainCookieReward","digit","maxPayout","totalFromChain","nextMoni","nextRequired","chain","LN10","CacheChain","cpsBuffMult","CacheHeavenlyChipsPS","chipsOwned","HowMuchPrestige","cookiesReset","ascendNowToGet","heavenlyChipsDiffAvg","crateMissing","classes","noFrame","crates","icon","iconFunction","getDynamicTooltip","CacheAllMissingUpgrades","CacheSeasonSpec","CacheStatsCookies","CacheGoldenAndWrathCookiesMults","goldenMult","wrathMult","eff","CacheWrinklers","InitCache","SettingsDefault","BulkBuildColor","UpgradeBarFixedPos","GeneralSound","GCNotification","GCFlash","GCSound","GCVolume","GCSoundURL","FortuneNotification","FortuneFlash","FortuneSound","FortuneVolume","FortuneSoundURL","SeaNotification","SeaFlash","SeaSound","SeaVolume","SeaSoundURL","GardFlash","GardSound","GardVolume","GardSoundURL","MagicNotification","MagicFlash","MagicSound","MagicVolume","MagicSoundURL","WrinklerNotification","WrinklerFlash","WrinklerSound","WrinklerVolume","WrinklerSoundURL","WrinklerMaxNotification","WrinklerMaxFlash","WrinklerMaxSound","WrinklerMaxVolume","WrinklerMaxSoundURL","DragonAuraInfo","TooltipAscendButton","MissingUpgrades","DetailedTime","GrimoireBar","HeavenlyChipsTarget","ShowMissedGC","Blue","Green","Yellow","Orange","Red","Purple","Gray","Pink","Brown","GCTimer","Favicon","WrinklerButtons","BulkBuyBlock","Header","BarsColors","Calculation","Notification","NotificationGeneral","NotificationGC","NotificationFC","NotificationSea","NotificationGard","NotificationMagi","NotificationWrink","NotificationWrinkMax","Statistics","Notation","Miscellaneous","Lucky","Chain","Spells","Garden","Prestige","Wrink","Sea","Misc","InfoTab","Config_CheckNotificationPermissions","ToggleOnOff","checkNotificationPromise","requestPermission","then","ToggleBotBar","RefreshScale","BeautifyAll","RefreshStore","RebuildUpgrades","UpdateColors","UpdateFavicon","wrath","href","Setting","group","SettingStandard","label","toggle","super","SettingVolume","SettingInputNumber","SettingsData","insertBefore","ToggleGCTimer","save","stringify","settings","version","CacheDragonCost","dragonLevel","dragonLevels","buy","includes","replaceAll","cost","InitData","isInitializing","Flash","config","setTimeout","PlaySound","url","sndConfig","volConfig","sound","realAudio","volume","play","CreateGCTimer","cookie","fontFamily","onclick","pop","onmouseover","filter","webkitFilter","onmouseout","Notification_Notification","notifyConfig","title","message","visibilityState","badge","CMLoop","OnAscend","AscendTimer","mods","sellTotal","Bank","marketGoods","goods","goodsVal","marketGood","stock","cookiesPsRawHighest","buildingsToSacrifice","highestBuilding","SellBuildingsForChoEgg","CacheSellAllForChoEgg","hasBuildAura","godMult","CacheCurrWrinklerCPS","cookiesToNext","HowManyCookiesReset","LoopCache","shimmers","spawnLead","FindShimmer","transform","life","CheckGoldenCookie","TickerEffect","CM","Options","CheckSeasonPopup","nextStep","CheckMagicMeter","CurrentWrinklers","getWrinklersMax","CheckWrinklerCount","SaveConfig","saveString","b64_to_utf8","unescape","localStorage","getItem","CookieMonsterSave","newSaveString","setItem","utf8_to_b64","LoadConfig","CMConfig","mod","PopAllNormalWrinklers","hp","ReplaceTooltipGrimoire","dynamic","wobble","ReplaceNativeGrimoireDraw","magicBarTextL","ReplaceNativeGrimoire","launch","ReplaceNativeGrimoireLaunch","jscolor_default","ToggleSetting_ConfigPrefix","ToggleConfigVolume","ToggleHeader","StatsHeader","span","StatsListing","listingName","StatsMissDisp","theMissDisp","frag","createDocumentFragment","missing","AddMenuStats","stats","goldCookTooltip","section","luckyColor","luckyTime","luckyReqFrag","luckyReqSpan","luckyReqSmall","luckyColorFrenzy","luckyTimeFrenzy","luckyReqFrenFrag","luckyReqFrenSpan","luckyReqFrenSmall","luckySplit","luckyRewardMaxSpan","luckyRewardFrenzyMaxSpan","luckyCurBase","luckyCurSpan","LuckySection","chainColor","chainTime","chainReqFrag","chainReqSpan","chainReqSmall","chainWrathColor","chainWrathTime","chainWrathReqFrag","chainWrathReqSpan","chainWrathReqSmall","chainColorFrenzy","chainTimeFrenzy","chainReqFrenFrag","chainReqFrenSpan","chainReqFrenSmall","chainWrathColorFrenzy","chainWrathTimeFrenzy","chainWrathReqFrenFrag","chainWrathReqFrenSpan","chainWrathReqFrenSmall","chainCurMax","chainCur","chainCurWrath","ChainSection","conjureColor","conjureTime","conjureReqFrag","conjureReqSpan","conjureReqSmall","conjureFrenzyColor","conjureFrenzyCur","conjureFrenzyTime","conjureFrenzyReqFrag","conjureFrenzyReqSpan","conjureFrenzyReqSmall","SpellsSection","bakeberryColor","bakeberryFrag","chocorootColor","chocorootFrag","queenbeetColor","queenbeetFrag","duketaterColor","duketaterFrag","GardenSection","possiblePresMax","neededCook","cookiesNextFrag","cookiesNextSmall","heavenlyChips","HCTarget","CookiesTillTarget","resetBonus","newHeavenlyChips","curCPS","ResetCPS","ResetBonus","resetFrag","resetSmall","currentPrestige","willHave","willGet","delta7","next7Reset","next7Total","frag7","delta777","next777Reset","next777Total","frag777","delta777777","next777777Reset","next777777Total","frag777777","PrestigeSection","popAllFrag","popAllA","popFattestFrag","popFattestA","specDisp","missingHalloweenCookies","missingChristmasCookies","missingValentineCookies","missingNormalEggs","eggDrops","missingRareEggs","rareEggDrops","missingPlantDrops","centEgg","missedGoldenClicks","menuSection","prestigeUpgradesMissing","titlefrag","PrestigeUpgrades","normalUpgradesMissing","tech","nextSibling","cookieUpgradesMissing","AddMissingUpgrades","ConfigGroups","ConfigGroupsNotification","CreatePrefHeader","CreatePrefOption","ToggleConfig","float","percent","slider","step","onchange","input","readOnly","inputPrompt","Prompt","outerHTML","ClosePrompt","innerDiv","FixMouseY","timerBarHeight","mouseY","ReplaceNative","drawMod","from","update","updateMod","warnOffset","tta","tt","UpdateTooltipLocation","UpdateWrinklers","UpdateSpecial","ClickCookie","mouseDown","setOnCrate","ReplaceTooltipUpgrade","ClickProduct","DescribeDragonAura","aura","bonusCPS","priceOfChange","CalculateChangeAura","timeToRecover","bonusCPSPercentage","minHeight","div2","AddAuraInfo","ToggleSpecialMenu","on","shouldHide","AddDragonLevelUpTooltip","groupObject","subGroup","subGroupObject","resDef","resDefBut","AddMenuPref","info","description","notes","menu","AddMenuInfo","AddMenu","detail","Logic","titleGC","titleFC","titleSP","addFC","addSP","lastIndexOf","spawn","UpdateTitle","ReplaceAscendTooltip","InitializeCookieMonster","head","borderTop","textShadow","table","tbody","firstCol","td","CreateBotBar","CMTimerBarGC","CMTimerBarRen","TimerBarBuffTimers","CreateTimerBar","UpgradeBar","legend","legendLine","CreateUpgradeBarLegend","upgradeNumber","CreateUpgradeBar","WhiteScreen","CreateWhiteScreen","getElementsByTagName","CreateFavicon","append","CreateWrinklerButtons","ReplaceTooltipBuild","canLumps","forEach","child","coords","popups","Popup","Notify","Win","CookieMonster_CM","proceed","confirm","registerHook","load","registerMod"],"mappings":";AAAS,MACC,IAAIA,EAAsB,CAE9BC,IACA,SAAUC,IAchB,SAAWC,EAAQC,GAElB,aAEuC,iBAAnBF,EAAOG,QAc3BD,EAAQD,GAZPD,EAAOG,QAAUF,EAAOG,SACvBF,EAASD,GACT,SAAUI,GACT,IAAKA,EAAID,SACR,MAAM,IAAIE,MAAM,wCAEjB,OAAOJ,EAAQG,IAZnB,CAoBqB,oBAAXE,OAAyBA,OAASC,MAAM,SAAUD,GAK5D,aAGA,IAwgDME,EAt7BAC,EAzXAC,EAvNFC,EAFAC,IAEAD,EAAM,CAGTE,aAAc,EAEdC,UAAY,GAEZC,WAAa,GAGbC,SAAW,gBACY,IAAXV,GAA0BA,EAAOH,UAC3CG,EAAOH,SAASc,iBAAiB,mBAAoBN,EAAIO,IAAIC,MAAM,IAKrEC,kBAAoB,SAAUC,EAAUC,GAEvC,KADAA,EAAWA,EAAWX,EAAIY,KAAKD,GAAYhB,EAAOH,UAEjD,MAAM,IAAIE,MAAM,qBAQjB,IALA,IAAImB,EAAOF,EAASG,iBAAiBJ,GAGjCK,EAAa,IAAIC,OAAO,WAAahB,EAAIO,IAAIU,YAAc,6BAA8B,KAEpFC,EAAI,EAAGA,EAAIL,EAAKM,OAAQD,GAAK,EAAG,CAUxC,IAAIE,EAAUC,EARd,KAAIR,EAAKK,GAAGjB,SAAWY,EAAKK,GAAGjB,mBAAmBD,EAAIO,YAIjCe,IAAjBT,EAAKK,GAAGK,MAAoD,SAA9BV,EAAKK,GAAGK,KAAKC,gBAA4BxB,EAAIyB,wBAOzB,QAApDL,EAAWpB,EAAI0B,YAAYb,EAAKK,GAAI,aACpCL,EAAKK,GAAGS,YAAcN,EAAIR,EAAKK,GAAGS,UAAUC,MAAMb,KAClD,CACD,IAAIc,EAAYhB,EAAKK,GAEjBY,EAAU,GACG,OAAbV,EACHU,EAAUV,EAEAC,IACVU,QAAQC,KAAK,sFAAwFhC,EAAIiC,SACrGZ,EAAE,KACLS,EAAUT,EAAE,KAId,IAAIa,EAAO,KACX,GAAIJ,EAAQK,OACX,IACCD,EAAOlC,EAAIoC,gBAAgBN,GAC1B,MAAOO,GACRN,QAAQC,KAAKK,EAAI,KAAOP,GAI1B,IACC,IAAI9B,EAAIO,IAAIsB,EAAWK,GACtB,MAAOG,GACRN,QAAQC,KAAKK,OAOjBD,gBAAkB,SAAUE,GAC3B,IAAIJ,EAAO,KAEX,IACCA,EAAOK,KAAKC,MAAMF,GAEjB,MAAOG,GACR,IAAKzC,EAAIO,IAAImC,UACZ,MAAM,IAAIhD,MAAM,4CAA8C+C,GAG9D,IACCP,EAAO,IAAKS,SAAU,eAAiBL,EAAM,kDAAtC,GACN,MAAOM,GACR,MAAM,IAAIlD,MAAM,uCAAyCkD,IAI5D,OAAOV,GAIRW,aAAe,WAEd,IADA,IAAIC,EAAO,GACF5B,EAAI,EAAGA,EAAIlB,EAAIG,UAAUgB,OAAQD,GAAK,EAE1ClB,EAAIG,UAAUe,IAAMlB,EAAIG,UAAUe,GAAG6B,eACxCD,EAAKE,KAAKhD,EAAIG,UAAUe,IAG1B,OAAO4B,GAIRG,SAAW,SAAUC,GACpB,IAAIC,EAAKxD,EAAOH,SAAS4D,cAAcF,GAEvC,OADAlD,EAAIqD,QAAQF,EAAI,OAAO,GAChBA,GAIRvC,KAAO,SAAU0C,GAChB,IAAKA,EACJ,OAAO,KAGR,GAA8B,iBAAnBA,EAA6B,CAEvC,IAAIC,EAAMD,EACNH,EAAK,KACT,IACCA,EAAKxD,EAAOH,SAASgE,cAAcD,GAClC,MAAOlB,GAER,OADAN,QAAQC,KAAKK,GACN,KAKR,OAHKc,GACJpB,QAAQC,KAAK,sCAAuCuB,GAE9CJ,EAGR,OAAInD,EAAIyD,OAAOH,GAEPA,GAGRvB,QAAQC,KAAK,qCAAsCsB,EAAgBA,GAC5D,OAKRG,OAAS,SAAUC,GAClB,MAAoB,iBAATC,KACHD,aAAeC,KAEhBD,GAAsB,iBAARA,GAA4C,iBAAjBA,EAAIE,UAAiD,iBAAjBF,EAAIG,UAIzFA,SAAW,SAAUjD,GACpB,SAAIA,IAAQA,EAAKiD,WACTjD,EAAKiD,SAASrC,eAMvBsC,eAAiB,SAAUlD,GAC1B,KAAOA,EAAKmD,YACXnD,EAAKoD,YAAYpD,EAAKmD,aAKxBE,YAAc,SAAUd,GACvB,OAAOA,GAA2B,UAArBnD,EAAI6D,SAASV,IAA6C,SAA1BA,EAAG5B,KAAKC,eAItD0C,SAAW,SAAUf,GACpB,IAAKA,EACJ,OAAO,EAER,IAAIgB,EAAInE,EAAI6D,SAASV,GACrB,MACQ,WAANgB,GACM,UAANA,GAAiB,CAAC,SAAU,SAAU,SAASC,QAAQjB,EAAG5B,KAAKC,gBAAkB,GAKpF6C,cAAgB,SAAUlB,GACzB,OAAQnD,EAAI6D,SAASV,IACpB,IAAK,QAAS,OAASA,EAAGmB,OAA6B,KAApBnB,EAAGmB,MAAMnC,OAC5C,IAAK,SAAU,MAAkC,KAA1BgB,EAAGoB,YAAYpC,OAEvC,OAAO,MAKRqC,wBAA0B,WACzB,IAAIC,GAAY,EAEhB,IACC,IAAIvC,EAAOwC,OAAOC,eAAe,GAAI,UAAW,CAC/CC,IAAK,WAAcH,GAAY,KAEhC9E,EAAOW,iBAAiB,cAAe,KAAM4B,GAC7CvC,EAAOkF,oBAAoB,cAAe,KAAM3C,GAC/C,MAAOG,IAET,OAAOoC,EAXkB,GAe1BhD,sBACK1B,EAAMJ,EAAOH,SAAS4D,cAAc,YACpCrD,EAAI+E,eACP/E,EAAI+E,aAAa,OAAQ,SACK,SAA1B/E,EAAIwB,KAAKC,iBAQfuD,SAAW,gBAOX1B,QAAU,WACT,IAAI2B,EAAMC,UAAU,GAEpB,GAAyB,IAArBA,UAAU9D,OAAc,CAE3B,IAAI+D,EAAOF,EAAIG,eAAenF,EAAI+E,UAAYC,EAAIhF,EAAI+E,UAAaC,EAAIhF,EAAI+E,UAAY,GAEnFT,EAAQW,UAAU,GAGtB,OADAC,EAHIE,EAAOH,UAAU,IAGRX,GACN,EAED,GAAyB,IAArBW,UAAU9D,QAAwC,iBAAjB8D,UAAU,GAAiB,CAElEC,EAAOF,EAAIG,eAAenF,EAAI+E,UAAYC,EAAIhF,EAAI+E,UAAaC,EAAIhF,EAAI+E,UAAY,GAAvF,IACIM,EAAMJ,UAAU,GAEpB,IAAK,IAAIG,KAAQC,EACZA,EAAIF,eAAeC,KACtBF,EAAKE,GAAQC,EAAID,IAGnB,OAAO,EAGR,MAAM,IAAI1F,MAAM,sBAOjB4F,WAAa,WACZ,IAAIN,EAAMC,UAAU,GACpB,IAAKD,EAAIG,eAAenF,EAAI+E,UAC3B,OAAO,EAER,IAAK,IAAI7D,EAAI,EAAGA,EAAI+D,UAAU9D,OAAQD,GAAK,EAAG,CAC7C,IAAIkE,EAAOH,UAAU/D,UACd8D,EAAIhF,EAAI+E,UAAUK,GAE1B,OAAO,GAIRG,QAAU,SAAUP,EAAKI,EAAMI,GAC9B,IAAKR,EAAIG,eAAenF,EAAI+E,UAAW,CAEtC,QAAmBzD,IAAfkE,EAGH,OAFAR,EAAIhF,EAAI+E,UAAY,GAKtB,IAAIG,EAAOF,EAAIhF,EAAI+E,UAKnB,OAHKG,EAAKC,eAAeC,SAAwB9D,IAAfkE,IACjCN,EAAKE,GAAQI,GAEPN,EAAKE,IAIb1D,YAAc,SAAUyB,EAAIsC,GAC3B,IAAIC,EAAW,QAAUD,EAEzB,OADgBtC,EAAGwC,aAAaD,IAKjCE,YAAc,SAAUzC,EAAIsC,EAAMnB,GACjC,IAAIoB,EAAW,QAAUD,EACzBtC,EAAG2B,aAAaY,EAAUpB,IAI3BuB,qBAAuB,GAGvBC,iBAAmB,SAAUC,EAAW5C,EAAI6C,EAAMC,GAC5CjG,EAAI6F,qBAAqBV,eAAeY,KAC5C/F,EAAI6F,qBAAqBE,GAAa,IAEvC/F,EAAI6F,qBAAqBE,GAAW/C,KAAK,CAACG,EAAI6C,EAAMC,IACpD9C,EAAG7C,iBAAiB0F,EAAMC,GAAM,IAIjCC,kBAAoB,SAAUH,GAC7B,GAAI/F,EAAI6F,qBAAqBV,eAAeY,GAAY,CACvD,IAAK,IAAI7E,EAAI,EAAGA,EAAIlB,EAAI6F,qBAAqBE,GAAW5E,OAAQD,GAAK,EAAG,CACvE,IAAIiF,EAAMnG,EAAI6F,qBAAqBE,GAAW7E,GAC9CiF,EAAI,GAAGtB,oBAAoBsB,EAAI,GAAIA,EAAI,IAAI,UAErCnG,EAAI6F,qBAAqBE,KAKlCK,eAAiB,SAAU/D,GACtBA,EAAE+D,gBAAkB/D,EAAE+D,iBAC1B/D,EAAEgE,aAAc,GAIjBC,cAAgB,SAAUC,GAErBA,EAAOC,aACVxG,EAAIyG,gBAAkBF,EACtBvG,EAAIyG,gBAAgBD,eAKtBE,cAAgB,WAEX1G,EAAIyG,kBACPzG,EAAIyG,gBAAgBE,iBACpB3G,EAAIyG,gBAAkB,OAKxBG,aAAe,SAAUzD,EAAI0D,EAAWC,EAASC,GAChD,GAAK5D,EAAL,CAIA,IAAI6D,EAAK,KAaT,MAXqB,mBAAVC,MACVD,EAAK,IAAIC,MAAMJ,EAAW,CACzBC,QAASA,EACTC,WAAYA,KAIbC,EAAKrH,EAAOH,SAAS0H,YAAY,UAC9BC,UAAUN,EAAWC,EAASC,KAG7BC,IAKLhH,EAAIqD,QAAQ2D,EAAI,YAAY,GAE5B7D,EAAGiE,cAAcJ,IACV,KAIRK,kBAAoB,SAAUlE,EAAI0D,EAAWC,EAASC,GAChD5D,GAGDnD,EAAIiE,YAAYd,IACnBnD,EAAI4G,aAAazD,EAAI0D,EAAWC,EAASC,IAK3CO,SAAW,SAAUN,GACpB,IAAIO,EAAO,CACVC,EAAG,MACHC,GAAI,QACJC,GAAI,UAEL,MAAuB,iBAAZV,EAAGW,KACNX,EAAGW,UACerG,IAAf0F,EAAGY,SAAyBL,EAAKpC,eAAe6B,EAAGY,SACtDL,EAAKP,EAAGY,SAET,MAIRC,QAAU,SAAUvF,GACnB,OAAKA,EAGEA,EAAIwF,QAAQ,aAAc,IAAIC,MAAM,OAFnC,IAOTC,SAAW,SAAUjI,EAAK4B,GACzB,QAAKA,SAGiBL,IAAlBvB,EAAIkI,UACAlI,EAAIkI,UAAUC,SAASvG,IAGvB,IAAM,IAAM5B,EAAI4B,UAAUmG,QAAQ,OAAQ,KAAO,KAAK1D,QAAQ,IAAMzC,EAAY,OAKzFwG,SAAW,SAAUpI,EAAK4B,GACzB,IAAIyG,EAAapI,EAAI6H,QAAQlG,GAE7B,QAAsBL,IAAlBvB,EAAIkI,UAOR,IAAS/G,EAAI,EAAGA,EAAIkH,EAAWjH,OAAQD,GAAK,EACtClB,EAAIgI,SAASjI,EAAKqI,EAAWlH,MACjCnB,EAAI4B,YAAc5B,EAAI4B,UAAY,IAAM,IAAMyG,EAAWlH,SAR1D,IAAK,IAAIA,EAAI,EAAGA,EAAIkH,EAAWjH,OAAQD,GAAK,EAC3CnB,EAAIkI,UAAUI,IAAID,EAAWlH,KAchCoH,YAAc,SAAUvI,EAAK4B,GAC5B,IAAIyG,EAAapI,EAAI6H,QAAQlG,GAE7B,QAAsBL,IAAlBvB,EAAIkI,UAOR,IAAS/G,EAAI,EAAGA,EAAIkH,EAAWjH,OAAQD,GAAK,EAAG,CAC9C,IAAIqH,EAAO,IAAIvH,OACd,QAAUoH,EAAWlH,GAArB,YACSkH,EAAWlH,GADpB,aAESkH,EAAWlH,GAAK,SACzB,KAEDnB,EAAI4B,UAAY5B,EAAI4B,UAAUmG,QAAQS,EAAM,WAb5C,IAAK,IAAIrH,EAAI,EAAGA,EAAIkH,EAAWjH,OAAQD,GAAK,EAC3CnB,EAAIkI,UAAUO,OAAOJ,EAAWlH,KAiBnCuH,aAAe,SAAU1I,GAKxB,OAJgBJ,EAAO+I,iBAAmB/I,EAAO+I,iBAAiB3I,GAAOA,EAAI4I,eAKrE,IAUTC,SAAW,SAAU7I,EAAK8I,EAAQC,EAAWC,GAE5C,IAAIC,EAAWF,EAAY,YAAc,GACrCG,EAAY,KAEhB,IAAK,IAAI7D,KAAQyD,EAChB,GAAIA,EAAO1D,eAAeC,GAAO,CAChC,IAAI8D,EAAS,KAEQ,OAAjBL,EAAOzD,IAGL6D,IAEJA,EAAYjJ,EAAIuF,QAAQxF,EAAK,cAE1BkJ,GAAaA,EAAU9D,eAAeC,KAEzC8D,EAASD,EAAU7D,MAMhB2D,IACEE,IAEJA,EAAYjJ,EAAIuF,QAAQxF,EAAK,YAAa,KAEtCkJ,EAAU9D,eAAeC,KAE7B6D,EAAU7D,GAAQrF,EAAIoJ,MAAM/D,KAG9B8D,EAASL,EAAOzD,IAGF,OAAX8D,GACHnJ,EAAIoJ,MAAMC,YAAYhE,EAAM8D,EAAQF,KAOxCK,SAAW,SAAUC,EAAGC,EAAGC,GAC1B,MAAO,MACL,IAAMC,KAAKC,MAAMJ,GAAGK,SAAS,KAAKC,QAAQ,IAC1C,IAAMH,KAAKC,MAAMH,GAAGI,SAAS,KAAKC,QAAQ,IAC1C,IAAMH,KAAKC,MAAMF,GAAGG,SAAS,KAAKC,QAAQ,IAC1CC,eAIHC,UAAY,SAAUR,EAAGC,EAAGC,EAAGO,GAC9B,MAAO,MACL,IAAMN,KAAKC,MAAMJ,GAAGK,SAAS,KAAKC,QAAQ,IAC1C,IAAMH,KAAKC,MAAMH,GAAGI,SAAS,KAAKC,QAAQ,IAC1C,IAAMH,KAAKC,MAAMF,GAAGG,SAAS,KAAKC,QAAQ,IAC1C,IAAMH,KAAKC,MAAU,IAAJK,GAASJ,SAAS,KAAKC,QAAQ,IAChDC,eAIHG,SAAW,SAAUV,EAAGC,EAAGC,GAC1B,MAAO,OACNC,KAAKC,MAAMJ,GAAK,IAChBG,KAAKC,MAAMH,GAAK,IAChBE,KAAKC,MAAMF,GACZ,KAIDS,UAAY,SAAUX,EAAGC,EAAGC,EAAGO,GAC9B,MAAO,QACNN,KAAKC,MAAMJ,GAAK,IAChBG,KAAKC,MAAMH,GAAK,IAChBE,KAAKC,MAAMF,GAAK,IACfC,KAAKC,MAA4C,KAArCK,QAA4B,EAAIA,IAAY,IAC1D,KAIDG,gBAmBKpK,EAjBJ,WAKC,IAJA,IAAIqK,EAAU,kBACVC,EAAW,CAAC,GAAI,WAAY,QAAS,MAAO,QAC5CC,EAAS1K,EAAOH,SAAS4D,cAAc,OAElClC,EAAI,EAAGA,EAAIkJ,EAASjJ,OAAQD,GAAK,EAAG,CAC5C,IAAIoJ,EAAUF,EAASlJ,GAAKiJ,EACxBI,EAASD,EAAU,2CAGvB,GADAD,EAAOlB,MAAMqB,WAAaD,EACtBF,EAAOlB,MAAMqB,WAChB,OAAOF,EAGT,OAAOH,EAGOM,GAER,WACN,OAAO3K,EAAW,IAAM4K,MAAMC,UAAUC,KAAKC,KAAK5F,UAAW,MAAQ,MAMvE6F,gBAAkB,SAAU/K,EAAKuE,GAChCtE,EAAI4I,SAAS7I,EAAK,CAACgL,gBAAkBzG,GAAS,OAI/C0G,aAAe,SAAUjL,EAAKuE,GAC7BtE,EAAI4I,SAAS7I,EAAK,CAACkL,aAAc3G,GAAS,UAI3C4G,cAAgB,SAAU7I,EAAG8I,GAC5B,IAAIC,EAAE,EAAGC,EAAE,EACPC,EAAOjJ,EAAEkJ,wBAGb,GAFAH,EAAIE,EAAKE,KACTH,EAAIC,EAAKG,KACJN,EAAoB,CACxB,IAAIO,EAAU1L,EAAI2L,aAClBP,GAAKM,EAAQ,GACbL,GAAKK,EAAQ,GAEd,MAAO,CAACN,EAAGC,IAIZO,eAAiB,SAAUvJ,GAC1B,MAAO,CAACA,EAAEwJ,YAAaxJ,EAAEyJ,eAK1BC,iBAAmB,SAAU1J,GAC5B,IAAI+I,EAAI,EAAGC,EAAI,EASf,YARgC,IAArBhJ,EAAE2J,gBAAkC3J,EAAE2J,eAAe7K,QAE/DiK,EAAI/I,EAAE2J,eAAe,GAAGC,QACxBZ,EAAIhJ,EAAE2J,eAAe,GAAGE,SACO,iBAAd7J,EAAE4J,UACnBb,EAAI/I,EAAE4J,QACNZ,EAAIhJ,EAAE6J,SAEA,CAAEd,EAAGA,EAAGC,EAAGA,IAKnBc,iBAAmB,SAAU9J,GAC5B,IACI+J,GADS/J,EAAEkE,QAAUlE,EAAEgK,YACHd,wBAIpBU,EAAU,EAAGC,EAAU,EAY3B,YAXgC,IAArB7J,EAAE2J,gBAAkC3J,EAAE2J,eAAe7K,QAE/D8K,EAAU5J,EAAE2J,eAAe,GAAGC,QAC9BC,EAAU7J,EAAE2J,eAAe,GAAGE,SACC,iBAAd7J,EAAE4J,UACnBA,EAAU5J,EAAE4J,QACZC,EAAU7J,EAAE6J,SAKN,CAAEd,EAFLa,EAAUG,EAAWZ,KAEVH,EADXa,EAAUE,EAAWX,MAK1BE,WAAa,WACZ,IAAIW,EAAM3M,EAAOH,SAAS+M,gBAC1B,MAAO,EACL5M,EAAO6M,aAAeF,EAAIG,aAAeH,EAAII,YAAc,IAC3D/M,EAAOgN,aAAeL,EAAIM,YAAcN,EAAIO,WAAa,KAK5DC,YAAc,WACb,IAAIR,EAAM3M,EAAOH,SAAS+M,gBAC1B,MAAO,CACL5M,EAAOoN,YAAcT,EAAIU,YACzBrN,EAAOsN,aAAeX,EAAIY,eAW7BC,QAAU,SAAU7D,EAAGC,EAAGC,GACzBF,GAAK,IACLC,GAAK,IACLC,GAAK,IACL,IAAIrF,EAAIsF,KAAK2D,IAAI3D,KAAK2D,IAAI9D,EAAEC,GAAGC,GAC3B6D,EAAI5D,KAAK6D,IAAI7D,KAAK6D,IAAIhE,EAAEC,GAAGC,GAC3BnI,EAAIgM,EAAIlJ,EACZ,GAAU,IAAN9C,EAAW,MAAO,CAAE,KAAM,EAAG,IAAMgM,GACvC,IAAIE,EAAIjE,IAAInF,EAAI,GAAGqF,EAAED,GAAGlI,EAAKkI,IAAIpF,EAAI,GAAGmF,EAAEE,GAAGnI,EAAI,GAAGkI,EAAED,GAAGjI,EACzD,MAAO,CACN,IAAU,IAAJkM,EAAM,EAAEA,GACPlM,EAAEgM,EAAT,IACA,IAAMA,IAWRG,QAAU,SAAUD,EAAGE,EAAGJ,GACzB,IAAIK,EAAWL,EAAI,IAAX,IAER,GAAU,OAANE,EACH,MAAO,CAAEG,EAAGA,EAAGA,GAGhBH,GAAK,GACLE,GAAK,IAEL,IAAIvM,EAAIuI,KAAKkE,MAAMJ,GAEflM,EAAIqM,GAAK,EAAID,GACbtJ,EAAIuJ,GAAK,EAAID,GAFTvM,EAAE,EAAIqM,EAAErM,EAAI,GAAGqM,EAAErM,KAGzB,OAAQA,GACP,KAAK,EACL,KAAK,EAAG,MAAO,CAACwM,EAAEvJ,EAAE9C,GACpB,KAAK,EAAG,MAAO,CAAC8C,EAAEuJ,EAAErM,GACpB,KAAK,EAAG,MAAO,CAACA,EAAEqM,EAAEvJ,GACpB,KAAK,EAAG,MAAO,CAAC9C,EAAE8C,EAAEuJ,GACpB,KAAK,EAAG,MAAO,CAACvJ,EAAE9C,EAAEqM,GACpB,KAAK,EAAG,MAAO,CAACA,EAAErM,EAAE8C,KAKtByJ,iBAAmB,SAAUtL,GAC5B,IAKIjB,EALAwM,EAAM,CACTC,KAAM,KACNC,OAAQ,MAKT,GAAI1M,EAAIiB,EAAIV,MAAM,4BAA6B,CAG9C,GAAoB,IAAhBP,EAAE,GAAGF,OAER0M,EAAIE,OAAS,OACbF,EAAIC,KAAO,CACVE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAC1BoE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAC1BoE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAC1BoE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAAM,UAG3B,GAAoB,IAAhBvI,EAAE,GAAGF,OAEf0M,EAAIE,OAAS,MACbF,EAAIC,KAAO,CACVE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAC1BoE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAC1BoE,SAAS3M,EAAE,GAAGuI,OAAO,EAAE,GAAG,IAC1B,UAGK,IAAoB,IAAhBvI,EAAE,GAAGF,OAWf,OAAO,EATP0M,EAAIE,OAAS,MACbF,EAAIC,KAAO,CACVE,SAAS3M,EAAE,GAAG4M,OAAO,GAAK5M,EAAE,GAAG4M,OAAO,GAAG,IACzCD,SAAS3M,EAAE,GAAG4M,OAAO,GAAK5M,EAAE,GAAG4M,OAAO,GAAG,IACzCD,SAAS3M,EAAE,GAAG4M,OAAO,GAAK5M,EAAE,GAAG4M,OAAO,GAAG,IACzC,MAOF,OAAOJ,EAGR,GAAIxM,EAAIiB,EAAIV,MAAM,6BAA8B,CAG/C,IAEIsM,EAAIC,EAAIC,EAAIC,EAFZC,EAAMjN,EAAE,GAAG0G,MAAM,KACjBwG,EAAK,kCAET,GACCD,EAAInN,QAAU,IACb+M,EAAKI,EAAI,GAAG1M,MAAM2M,MAClBJ,EAAKG,EAAI,GAAG1M,MAAM2M,MAClBH,EAAKE,EAAI,GAAG1M,MAAM2M,IAiBnB,OAfAV,EAAIE,OAAS,MACbF,EAAIC,KAAO,CACVU,WAAWN,EAAG,KAAO,EACrBM,WAAWL,EAAG,KAAO,EACrBK,WAAWJ,EAAG,KAAO,EACrB,MAIAE,EAAInN,QAAU,IACbkN,EAAKC,EAAI,GAAG1M,MAAM2M,MAEnBV,EAAIE,OAAS,OACbF,EAAIC,KAAK,GAAKU,WAAWH,EAAG,KAAO,GAE7BR,EAIT,OAAO,GAIRY,kBAAoB,SAAUC,GAC7B,IAAIC,EAAO,GAEU,iBAAVD,EAEVA,EAAM5G,QAAQ,iDAAiD,SAAUpE,GACxEiL,EAAK3L,KAAKU,MAEDgH,MAAMkE,QAAQF,KACxBC,EAAOD,GAOR,IAFA,IAAIG,EAAS,GAEJ3N,EAAI,EAAGA,EAAIyN,EAAKxN,OAAQD,IAAK,CACrC,IAAI4N,EAAQ9O,EAAI4N,iBAAiBe,EAAKzN,IAClC4N,GACHD,EAAO7L,KAAK8L,GAId,OAAOD,GAIRE,wBAA0B,SAAUF,GACnC,IAAK,IAAI3N,EAAI,EAAGA,EAAI2N,EAAO1N,OAAQD,IAAK,CACvC,IAAI6I,EAAI8E,EAAO3N,GAAG4M,KAAK,GACvB,GAAU,OAAN/D,GAAcA,EAAI,EACrB,OAAO,EAGT,OAAO,GAIRiF,cAAgB,SAAUjB,GACzB,OAAQA,EAAOvM,eACf,IAAK,OACL,IAAK,OACJ,OAAO,EAER,OAAO,GAQRyN,sBAAwB,SAAUC,GACjC,IAAIC,EAAMxP,EAAOyP,kBAAoB,EACrCF,EAAOG,OAASF,EAChBD,EAAOI,QAAUH,EACPD,EAAOK,WAAW,MACxBC,MAAML,EAAKA,IAIhBM,sBAAwB,SAAUX,EAAOY,EAAcC,EAAWC,GAEjE,IAAIC,EAAOpG,KAAKC,MAAM1J,EAAIO,IAAIuP,iBAAiB3O,QAC3C4O,EAAS/P,EAAIO,IAAIyP,eACjBC,EAAWjQ,EAAIO,IAAI2P,iBACnBC,EAAWnQ,EAAIO,IAAI6P,iBAEnBC,EAASV,GAAiC,EAATI,EACjCO,EAAmB,EAATP,EAEVb,EAASlP,EAAIiD,SAAS,UACtBsN,EAAMrB,EAAOK,WAAW,MAE5BL,EAAOG,MAAQgB,EACfnB,EAAOI,OAASgB,EACZV,GACH5P,EAAIiP,sBAAsBC,GAI3BqB,EAAIC,UAAYP,EAChBM,EAAIE,SAAS,EAAG,EAAGJ,EAAQC,GAG3BC,EAAIC,UAAYL,EAChB,IAAK,IAAI/E,EAAI,EAAGA,EAAIiF,EAAQjF,GAAc,EAAT2E,EAChCQ,EAAIE,SAASrF,EAAG,EAAG2E,EAAQA,GAC3BQ,EAAIE,SAASrF,EAAI2E,EAAQA,EAAQA,EAAQA,GAGtCjB,IAEHyB,EAAIC,UAAY1B,EAChByB,EAAIE,SAAS,EAAG,EAAGJ,EAAQC,IAG5B,IAAII,EAAQ,KACZ,OAAQhB,GACP,IAAK,OACJgB,EAAQ,EACRH,EAAII,UAAU,EAAG,EAAGd,EAAK,EAAGS,GAC5B,MACD,IAAK,QACJI,EAAQL,EAASR,EACjBU,EAAII,UAAUN,EAAUR,EAAK,EAAI,EAAGA,EAAK,EAAGS,GAG9C,GAAc,OAAVI,EAAgB,CACnBH,EAAIK,UAAY,EAChB,IAAK,IAAI1P,EAAI,EAAGA,EAAIlB,EAAIO,IAAIuP,iBAAiB3O,OAAQD,GAAK,EACzDqP,EAAIM,YACJN,EAAIO,YAAc9Q,EAAIO,IAAIuP,iBAAiB5O,GAC3CqP,EAAIQ,OAAO,GAAML,EAAQxP,EAAG,GAC5BqP,EAAIS,OAAO,GAAMN,EAAQxP,EAAGoP,GAC5BC,EAAIU,SAIN,MAAO,CACN/B,OAAQA,EACRG,MAAOgB,EACPf,OAAQgB,IAMVY,wBAA0B,SAAUpC,EAAOqC,EAAU9B,GACpD,IAAI+B,EAkBJ,OAfCA,EADGD,GAAY9B,EACN,CACR,MAAQ,CAAC7D,KAAO,QAAS6F,MAAQ,QAAQF,GACzCrC,EAAQ,MACRA,EAAQ,IAAMO,EAAQ,KACtB,kBAAoBA,EAAQ,GAAK,KACjC,sBAGQ,CACR,WACAP,EAAQ,MACRA,EAAQ,SAIH9O,EAAIkK,eAAeoH,MAAM1R,KAAMwR,IAIvCG,eAAiB,WAEhB,GAAKvR,EAAIwR,QAAWxR,EAAIwR,OAAOC,MAA/B,CAIA,IAEIC,EAAIC,EAFJC,EAAU5R,EAAIwR,OAAOC,MAIrBG,EAAQC,OAGXH,EAAK1R,EAAIkL,cAAc0G,EAAQ7O,eAAe,GAC9C4O,EAAK,CAAC,EAAG,KAETD,EAAK1R,EAAIkL,cAAc0G,EAAQ7O,eAC/B4O,EAAK3R,EAAI2L,cAGV,IAII5B,EAAGP,EAAGsI,EAJNC,EAAK/R,EAAI4L,eAAegG,EAAQ7O,eAChCiP,EAAKhS,EAAI8M,cACTmF,EAAKjS,EAAIkS,cAAcN,GACvBO,EAAK,CAACF,EAAGG,QAASH,EAAGI,SAEzB,OAAQT,EAAQT,SAAS3P,eACxB,IAAK,OAAQuI,EAAE,EAAGP,EAAE,EAAGsI,GAAG,EAAG,MAC7B,IAAK,QAAQ/H,EAAE,EAAGP,EAAE,EAAGsI,EAAE,EAAG,MAC5B,IAAK,MAAQ/H,EAAE,EAAGP,EAAE,EAAGsI,GAAG,EAAG,MAC7B,QAAa/H,EAAE,EAAGP,EAAE,EAAGsI,EAAE,EAE1B,IAAIQ,GAAKP,EAAGvI,GAAG2I,EAAG3I,IAAI,EAGtB,GAAKoI,EAAQW,cAMRC,EAAK,EACPb,EAAG5H,GAAG2H,EAAG3H,GAAGoI,EAAGpI,GAAKiI,EAAGjI,KACrB4H,EAAG5H,GAAG2H,EAAG3H,GAAGgI,EAAGhI,GAAG,EAAIiI,EAAGjI,GAAG,GAAK2H,EAAG3H,GAAGgI,EAAGhI,GAAGoI,EAAGpI,IAAM,EAAI2H,EAAG3H,GAAGgI,EAAGhI,GAAGoI,EAAGpI,GAC3E2H,EAAG3H,IACH4H,EAAGnI,GAAGkI,EAAGlI,GAAGuI,EAAGvI,GAAG2I,EAAG3I,GAAG8I,EAAEA,EAAER,EAAIE,EAAGxI,IACjCmI,EAAGnI,GAAGkI,EAAGlI,GAAGuI,EAAGvI,GAAG,EAAIwI,EAAGxI,GAAG,GAAKkI,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,GAAK,EAAIJ,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,EAAIJ,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,EAC/FJ,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,GAAK,EAAIJ,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,EAAIJ,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,QAXhE,IAAIU,EAAK,CACRd,EAAG3H,GACH2H,EAAGlI,GAAGuI,EAAGvI,GAAG8I,EAAEA,EAAER,GAalB,IAAI1G,EAAIoH,EAAGzI,GACPsB,EAAImH,EAAGhJ,GACPiJ,EAAgBb,EAAQC,MAAQ,QAAU,WAC1Ca,GACFF,EAAG,GAAKL,EAAG,GAAKT,EAAG,IAAMc,EAAG,GAAKd,EAAG,GAAKK,EAAG,KAC5CS,EAAG,GAAKL,EAAG,GAAKT,EAAG,GAAKK,EAAG,GAE7B/R,EAAI2S,cAAcf,EAASxG,EAAGC,EAAGoH,EAAeC,KAIjDC,cAAgB,SAAUf,EAASxG,EAAGC,EAAGoH,EAAeC,GACvD,IAAIE,EAAUF,EAAiB,EAAId,EAAQiB,WAE3C7S,EAAIwR,OAAOsB,KAAK3J,MAAMgI,SAAWsB,EACjCzS,EAAIwR,OAAOsB,KAAK3J,MAAMqC,KAAOJ,EAAI,KACjCpL,EAAIwR,OAAOsB,KAAK3J,MAAMsC,IAAMJ,EAAI,KAEhCrL,EAAIgL,aACHhL,EAAIwR,OAAOuB,KACXnB,EAAQoB,OACP,IAAIhT,EAAIH,UAAU,EAAG+S,EAAShB,EAAQiB,WAAY,EAAGjB,EAAQqB,aAC7D,OAIHf,cAAgB,SAAUN,GACzB,IAAIsB,EAAI,EAAItB,EAAQuB,mBAAqBvB,EAAQvC,MAC7C9B,EAAI,EAAIqE,EAAQuB,mBAAqBvB,EAAQtC,OAE7C8D,EAAc,EAAIxB,EAAQuB,mBAAqB,EAAInT,EAAIqT,kBAAkBzB,GAAWA,EAAQ0B,WAE5FtT,EAAIuT,iBAAiB3B,KACxBsB,GAAKE,GAEFxB,EAAQ4B,oBACXN,GAAKE,GAGN,IAAIK,EAAMzT,EAAI0T,eAAe9B,EAASsB,GAElCO,EAAInE,SACP/B,GAAKkG,EAAInE,OAASsC,EAAQ+B,SAEvB/B,EAAQgC,cACXrG,GAAK,EAAIqE,EAAQuB,mBAAqBvB,EAAQ+B,QAAU/B,EAAQiC,cAGjE,IAAIC,EAAKZ,EAAK,EAAItB,EAAQ+B,QACtBI,EAAKxG,EAAK,EAAIqE,EAAQ+B,QAE1B,MAAO,CACNK,SAAUd,EACVe,SAAU1G,EACV2G,QAASJ,EACTK,QAASJ,EACT3B,QAAS0B,EAAM,EAAIlC,EAAQwC,YAC3B/B,QAAS0B,EAAM,EAAInC,EAAQwC,YAC3BC,QAASZ,IAKXC,eAAiB,SAAU9B,EAASvC,GACnC,IAAIiF,EAAO,EAAGC,EAAO,EAAGC,EAAQ,EAAGC,EAAQ,EAAGnF,EAAS,EACnDoF,EAAc9C,EAAQ+C,SAAW/C,EAAQ+C,SAASxT,OAAS,EAiB/D,OAfIuT,IAEHH,GADAD,EAAO1C,EAAQgD,aACD,EAAInL,KAAKoL,KAAKH,EAAcJ,GAAQ,EAGlDE,EAAQ/K,KAAK6D,IAAI,EAAG7D,KAAKkE,OAAO0B,GAAUiF,EAAO,GAAK1C,EAAQkD,gBAAmBR,IACjFG,EAAQ7C,EAAQmD,cAAgBtL,KAAK2D,IAAIwE,EAAQmD,cAAeP,GAASA,GAGtED,IACHjF,EACCiF,EAAOE,GACNF,EAAO,GAAK3C,EAAQkD,gBAGhB,CACNR,KAAMA,EACNC,KAAMA,EACNC,MAAOA,EACPC,MAAOA,EACPpF,MAAOA,EACPC,OAAQA,IAKV+D,kBAAoB,SAAUzB,GAC7B,OAAOnI,KAAK6D,IACXsE,EAAQ+B,QAAU,EACjB,EAAI/B,EAAQoD,mBAAqBpD,EAAQqD,iBAAoBrD,EAAQuB,qBAKxE+B,eAAiB,SAAUtD,GAC1B,OAAQA,EAAQuD,KAAKlH,OAAO,GAAGzM,eAC9B,IAAK,IAAK,MAAO,IAElB,MAAO,KAIR+R,iBAAmB,SAAU3B,GAC5B,GAAIA,EAAQuD,KAAKhU,OAAS,EACzB,OAAQyQ,EAAQuD,KAAKlH,OAAO,GAAGzM,eAC9B,IAAK,IAAK,MAAO,IACjB,IAAK,IAAK,MAAO,IAGnB,OAAO,MAKR4T,gBAAkB,SAAUxD,EAASxM,GACpC,GAAKwM,EAAQxM,GAAb,CAGA,IAAIiQ,EAAW,KAEf,GAA6B,iBAAlBzD,EAAQxM,GAElB,IACCiQ,EAAW,IAAI1S,SAAUiP,EAAQxM,IAChC,MAAO/C,GACRN,QAAQuT,MAAMjT,QAIfgT,EAAWzD,EAAQxM,GAGhBiQ,GACHA,EAASxK,KAAK+G,KAOhB2D,cAAgB,SAAUC,GAEzB,IADA,IAAI1S,EAAO9C,EAAI6C,eACN3B,EAAI,EAAGA,EAAI4B,EAAK3B,OAAQD,GAAK,EACrC4B,EAAK5B,GAAGuU,QAAQD,IAKlBE,kBAAoB,CACnBC,MAAO,YACPC,MAAO,aAERC,iBAAmB,CAClBF,MAAO,UACPC,MAAO,YAIRE,eAAiB,KACjBrP,gBAAkB,KAGlBsP,gBAAkB,SAAU1T,IACyB,IAAhD,CAAC,MAAO,UAAU+B,QAAQpE,EAAIsH,SAASjF,KACtCrC,EAAIwR,QAAUxR,EAAIwR,OAAOC,OAC5BzR,EAAIwR,OAAOC,MAAMuE,WAMpBC,eAAiB,SAAU5T,GAC1BrC,EAAIuR,kBAIL2E,eAAiB,SAAU7T,GAC1BrC,EAAIuR,kBAIL4E,eAAiB,SAAU9T,GAEtBrC,EAAIwR,QAAUxR,EAAIwR,OAAOC,OAC5BzR,EAAIwR,OAAOC,MAAMuE,WAKnBI,oBAAsB,SAAU/T,GAC/B,IAAIkE,EAASlE,EAAEkE,QAAUlE,EAAEgK,WAEvB9F,EAAOtG,SAAWsG,EAAOtG,mBAAmBD,EAAIO,IAC/CgG,EAAOtG,QAAQoW,cAAgB9P,EAAO+P,UACzC/P,EAAOtG,QAAQsW,OAENvW,EAAIuF,QAAQgB,EAAQ,OAChBvG,EAAIuF,QAAQgB,EAAQ,YAGjCvG,EAAIwW,sBAAsBnU,EAAGkE,EAAQvG,EAAIuF,QAAQgB,EAAQ,WAAY,SAIlEvG,EAAIwR,QAAUxR,EAAIwR,OAAOC,OAC5BzR,EAAIwR,OAAOC,MAAMuE,WAMpBS,mBAAqB,SAAUpU,GAC9B,IAAIkE,EAASlE,EAAEkE,QAAUlE,EAAEgK,WAEvBrM,EAAIuF,QAAQgB,EAAQ,YACvBvG,EAAIwW,sBAAsBnU,EAAGkE,EAAQvG,EAAIuF,QAAQgB,EAAQ,WAAY,UAKvEiQ,sBAAwB,SAAUnU,EAAGkE,EAAQmQ,EAAaC,GACzD,IAAI/E,EAAU5R,EAAIuF,QAAQgB,EAAQ,YAElCvG,EAAIoG,eAAe/D,GACnBrC,EAAIsG,cAAcC,GAElB,IAAIqQ,EAAqB,SAAUtK,EAAKuK,GACvC7W,EAAI8F,iBAAiB,OAAQwG,EAAKtM,EAAI0V,kBAAkBiB,GACvD3W,EAAI8W,sBAAsBzU,EAAGkE,EAAQmQ,EAAaC,EAAaE,IAChE7W,EAAI8F,iBAAiB,OAAQwG,EAAKtM,EAAI6V,iBAAiBc,GACtD3W,EAAI+W,qBAAqB1U,EAAGkE,EAAQmQ,EAAaC,KAKnD,GAFAC,EAAmBjX,EAAOH,SAAU,CAAC,EAAG,IAEpCG,EAAOqX,QAAUrX,EAAOsX,aAAc,CACzC,IAAI3L,EAAO3L,EAAOsX,aAAa1L,wBAC3B2L,EAAM,EAAE5L,EAAKE,MAAOF,EAAKG,KAC7BmL,EAAmBjX,EAAOqX,OAAOrX,OAAOH,SAAU0X,GAGnD,IAAIC,EAAMnX,EAAI+L,iBAAiB1J,GAC3B+U,EAAMpX,EAAImM,iBAAiB9J,GAM/B,OALArC,EAAI8V,eAAiB,CACpB1K,EAAG+L,EAAI/L,EAAIgM,EAAIhM,EACfC,EAAG8L,EAAI9L,EAAI+L,EAAI/L,GAGRqL,GACR,IAAK,MAEkC,MAAlC1W,EAAIuT,iBAAiB3B,IAA2C,IAAvBA,EAAQyF,SAAShK,GAC7DuE,EAAQ0F,SAAS,KAAM,KAAM,IAAK,MAEnCtX,EAAIuX,OAAO3F,EAASvP,EAAG,EAAG,GAC1B,MAED,IAAK,MACJrC,EAAIwX,OAAO5F,EAASvP,EAAG,GACvB,MAED,IAAK,OACJrC,EAAIyX,QAAQ7F,EAASvP,EAAG,GAGzBuP,EAAQ6D,QAAQ,UAIjBqB,sBAAwB,SAAUzU,EAAGkE,EAAQmQ,EAAaC,EAAaE,GACtE,OAAO,SAAUxU,GAChB,IAAIuP,EAAU5R,EAAIuF,QAAQgB,EAAQ,YAClC,OAAQmQ,GACR,IAAK,MACJ1W,EAAIuX,OAAO3F,EAASvP,EAAGwU,EAAO,GAAIA,EAAO,IACzC,MAED,IAAK,MACJ7W,EAAIwX,OAAO5F,EAASvP,EAAGwU,EAAO,IAC9B,MAED,IAAK,OACJ7W,EAAIyX,QAAQ7F,EAASvP,EAAGwU,EAAO,IAGhCjF,EAAQ6D,QAAQ,WAKlBsB,qBAAuB,SAAU1U,EAAGkE,EAAQmQ,EAAaC,GACxD,OAAO,SAAUtU,GAChB,IAAIuP,EAAU5R,EAAIuF,QAAQgB,EAAQ,YAClCvG,EAAIkG,kBAAkB,QACtBlG,EAAI0G,gBAKJkL,EAAQ6D,QAAQ,SAChB7D,EAAQ6D,QAAQ,YAKlBiC,qBAAuB,SAAUrV,GAChC,IAAIkE,EAASlE,EAAEsV,cACX/F,EAAU5R,EAAIuF,QAAQgB,EAAQ,YAC9BuI,EAAQ9O,EAAIuF,QAAQgB,EAAQ,SAGK,QAAjCqL,EAAQ7D,OAAOvM,gBAClBoQ,EAAQgG,WAAW9I,EAAMf,QACpB/N,EAAIgP,cAAc4C,EAAQiG,eAC9B/I,EAAMhB,KAAK,GAAK,IAKI,OAAlBgB,EAAMhB,KAAK,MACmB,IAA7B8D,EAAQkG,kBAA2D,SAA7BlG,EAAQkG,kBAA+BlG,EAAQmG,2BACxFjJ,EAAMhB,KAAK,GAAK,GAIlB8D,EAAQoG,SAAS1G,MAAMM,EAAS9C,EAAMhB,MAEtC8D,EAAQ6D,QAAQ,SAChB7D,EAAQ6D,QAAQ,UAEZ7D,EAAQqG,oBACXrG,EAAQsG,QAKVX,OAAS,SAAU3F,EAASvP,EAAG8V,EAAMC,GACpC,IAAIC,EAAarY,EAAI+L,iBAAiB1J,GAClC+I,EAAI+M,EAAOE,EAAWjN,EAAIpL,EAAI8V,eAAe1K,EAAIwG,EAAQ+B,QAAU/B,EAAQuB,mBAC3E9H,EAAI+M,EAAOC,EAAWhN,EAAIrL,EAAI8V,eAAezK,EAAIuG,EAAQ+B,QAAU/B,EAAQuB,mBAE3EmF,EAAOlN,GAAK,KAAOwG,EAAQvC,MAAQ,IACnCkJ,EAAO,IAAOlN,GAAK,KAAOuG,EAAQtC,OAAS,IAE/C,OAAQtP,EAAIkV,eAAetD,IAC3B,IAAK,IAAKA,EAAQ0F,SAASgB,EAAMC,EAAM,KAAM,MAAO,MACpD,IAAK,IAAK3G,EAAQ0F,SAASgB,EAAM,KAAMC,EAAM,QAK9Cf,OAAS,SAAU5F,EAASvP,EAAG+V,GAC9B,IAEIG,EAAO,KADHH,EADSpY,EAAI+L,iBAAiB1J,GACZgJ,EAAIrL,EAAI8V,eAAezK,EAAIuG,EAAQ+B,QAAU/B,EAAQuB,qBACxD,KAAOvB,EAAQtC,OAAS,IAE/C,OAAQtP,EAAIuT,iBAAiB3B,IAC7B,IAAK,IAAKA,EAAQ0F,SAAS,KAAMiB,EAAM,KAAM,MAAO,MACpD,IAAK,IAAK3G,EAAQ0F,SAAS,KAAM,KAAMiB,EAAM,QAK9Cd,QAAU,SAAU7F,EAASvP,EAAG+V,GAC/B,IAEIG,EAAO,GADHH,EADSpY,EAAI+L,iBAAiB1J,GACZgJ,EAAIrL,EAAI8V,eAAezK,EAAIuG,EAAQ+B,QAAU/B,EAAQuB,qBACxD,GAAOvB,EAAQtC,OAAS,IAE/C,GAAIiJ,EAAO,EAAK,CAEf,IAAIC,EAAM5G,EAAQiG,YACmB,QAAjCjG,EAAQ7D,OAAOvM,eAA4BxB,EAAIgP,cAAcwJ,IAChE5G,EAAQgG,WAAmB,QAARY,EAAgB,OAAS,QAI9C5G,EAAQ0F,SAAS,KAAM,KAAM,KAAMiB,IAIpCE,gBAAkB,WAEjB,IAAI5K,EAAM,CACT9N,IAAK,KACL2Y,KAAM,MAGHxJ,EAASlP,EAAIiD,SAAS,UACtBsN,EAAMrB,EAAOK,WAAW,MAsC5B,OAHA1B,EAAI9N,IAAMmP,EACVrB,EAAI6K,KAlCW,SAAUrJ,EAAOC,EAAQ/N,GACvC2N,EAAOG,MAAQA,EACfH,EAAOI,OAASA,EAEhBiB,EAAII,UAAU,EAAG,EAAGzB,EAAOG,MAAOH,EAAOI,QAEzC,IAAIqJ,EAAQpI,EAAIqI,qBAAqB,EAAG,EAAG1J,EAAOG,MAAO,GACzDsJ,EAAME,aAAa,EAAO,QAC1BF,EAAME,aAAa,EAAI,EAAG,QAC1BF,EAAME,aAAa,EAAI,EAAG,QAC1BF,EAAME,aAAa,GAAO,QAC1BF,EAAME,aAAa,EAAI,EAAG,QAC1BF,EAAME,aAAa,EAAI,EAAG,QAC1BF,EAAME,aAAa,EAAO,QAE1BtI,EAAIC,UAAYmI,EAChBpI,EAAIE,SAAS,EAAG,EAAGvB,EAAOG,MAAOH,EAAOI,QAExC,IAAIwJ,EAAQvI,EAAIqI,qBAAqB,EAAG,EAAG,EAAG1J,EAAOI,QACrD,OAAQ/N,EAAKC,eACb,IAAK,IACJsX,EAAMD,aAAa,EAAG,uBACtBC,EAAMD,aAAa,EAAG,uBACtB,MACD,IAAK,IACJC,EAAMD,aAAa,EAAG,iBACtBC,EAAMD,aAAa,EAAG,iBAGvBtI,EAAIC,UAAYsI,EAChBvI,EAAIE,SAAS,EAAG,EAAGvB,EAAOG,MAAOH,EAAOI,SAMlCzB,GAIRkL,qBAAuB,WAEtB,IAAIlL,EAAM,CACT9N,IAAK,KACL2Y,KAAM,MAGHxJ,EAASlP,EAAIiD,SAAS,UACtBsN,EAAMrB,EAAOK,WAAW,MAmB5B,OAHA1B,EAAI9N,IAAMmP,EACVrB,EAAI6K,KAfW,SAAUrJ,EAAOC,EAAQ0J,EAAQC,GAC/C/J,EAAOG,MAAQA,EACfH,EAAOI,OAASA,EAEhBiB,EAAII,UAAU,EAAG,EAAGzB,EAAOG,MAAOH,EAAOI,QAEzC,IAAI4J,EAAO3I,EAAIqI,qBAAqB,EAAG,EAAG,EAAG1J,EAAOI,QACpD4J,EAAKL,aAAa,EAAGG,GACrBE,EAAKL,aAAa,EAAGI,GAErB1I,EAAIC,UAAY0I,EAChB3I,EAAIE,SAAS,EAAG,EAAGvB,EAAOG,MAAOH,EAAOI,SAMlCzB,GAIRsL,sBAAwB,WAEvB,IAAItL,EAAM,CACT9N,IAAK,KACL2Y,KAAM,MAGHxJ,EAASlP,EAAIiD,SAAS,UACtBsN,EAAMrB,EAAOK,WAAW,MAoC5B,OAHA1B,EAAI9N,IAAMmP,EACVrB,EAAI6K,KAhCW,SAAUrJ,EAAOC,EAAQR,GACvCI,EAAOG,MAAQA,EACfH,EAAOI,OAASA,EAEhBiB,EAAII,UAAU,EAAG,EAAGzB,EAAOG,MAAOH,EAAOI,QAEzC,IAAIS,EAASb,EAAOG,MAAQ,EACxBY,EAAWjQ,EAAIO,IAAI2P,iBACnBC,EAAWnQ,EAAIO,IAAI6P,iBAMvB,GAHAG,EAAIC,UAAYP,EAChBM,EAAIE,SAAS,EAAG,EAAGvB,EAAOG,MAAOH,EAAOI,QAEpCS,EAAS,EACZ,IAAK,IAAI1E,EAAI,EAAGA,EAAI6D,EAAOI,OAAQjE,GAAc,EAAT0E,EAEvCQ,EAAIC,UAAYL,EAChBI,EAAIE,SAAS,EAAGpF,EAAG0E,EAAQA,GAC3BQ,EAAIE,SAASV,EAAQ1E,EAAI0E,EAAQA,EAAQA,GAI3C,IAAImJ,EAAO3I,EAAIqI,qBAAqB,EAAG,EAAG,EAAG1J,EAAOI,QACpD4J,EAAKL,aAAa,EAAG/J,GACrBoK,EAAKL,aAAa,EAAG,iBAErBtI,EAAIC,UAAY0I,EAChB3I,EAAIE,SAAS,EAAG,EAAGvB,EAAOG,MAAOH,EAAOI,SAMlCzB,GAIRhO,WACKA,EAAY,SAAUuZ,EAASxG,EAASyG,EAAMC,EAAQxK,EAAOyK,GAChE3Z,KAAKwZ,QAAUA,EACfxZ,KAAKgT,QAAUA,EACfhT,KAAKyZ,KAAOA,EACZzZ,KAAK0Z,OAASA,EACd1Z,KAAKkP,MAAQA,EACblP,KAAK2Z,QAAUA,GAGhB1Z,EAAU8K,UAAUhB,SAAW,WAC9B,IAAIgF,EAAO,CACVlF,KAAKC,MAAM9J,KAAKwZ,SAAW,KAC3B3P,KAAKC,MAAM9J,KAAKgT,SAAW,KAC3BnJ,KAAKC,MAAM9J,KAAKyZ,MAAQ,KACxB5P,KAAKC,MAAM9J,KAAK0Z,QAAU,KAC1B1Z,KAAKkP,OAKN,OAHIlP,KAAK2Z,OACR5K,EAAK3L,KAAK,SAEJ2L,EAAK/D,KAAK,MAGX/K,GAIR2Z,MAAQ,CACPC,WAAa,EACbC,WAAa,EACbC,aAAe,GAIhBC,SAAW,CACV7L,OAAQ,CAAC,OAAQ,MAAO,MAAO,OAAQ,MAAO,QAC9C8L,gBAAiB,CAAC,OAAQ,SAC1B1E,KAAM,CAAC,MAAO,MAAO,KAAM,MAC3BhE,SAAU,CAAC,OAAQ,QAAS,MAAO,UACnC2I,aAAc,CAAC,QAAQ,GAAM,GAC7BhC,iBAAkB,CAAC,QAAQ,GAAM,IAIlCiC,eAAiB,CAEhBC,aAAgB,iBAChBC,aAAgB,UAChBC,mBAAsB,aACtBC,SAAY,cACZC,WAAc,qBACdC,WAAc,qBACdC,OAAU,MAIXrY,QAAU,iCAUV1B,IAAM,SAAUwC,EAAeb,GAE9B,IAAIqY,EAAO3a,KAurBX,SAAS4a,EAAWC,EAAQnW,GAC3B,GAAsB,iBAAXmW,EACV,MAAM,IAAI/a,MAAM,kCAAoC+a,GAIrD,GAAIza,EAAI4Z,SAASzU,eAAesV,KACV,iBAAVnW,IACVA,EAAQA,EAAM9C,gBAE8B,IAAzCxB,EAAI4Z,SAASa,GAAQrW,QAAQE,IAChC,MAAM,IAAI5E,MAAM,WAAc+a,EAAS,wBAA2BnW,GAKpE,GAAItE,EAAI+Z,eAAe5U,eAAesV,GAAS,CAC9C,IAAIC,EAASD,EACTE,EAAS3a,EAAI+Z,eAAeU,GAChC,IAAIE,EAMH,MAAM,IAAIjb,MAAM,WAAc+a,EAAS,mBAJvC1Y,QAAQC,KAAK,iDAAuDhC,EAAIiC,QAASyY,EAAQC,GACzFF,EAASE,EAOX,IAAIC,EAAS,QAAUH,EAEvB,GAA4B,mBAAjBF,EAAKK,GAEf,OADAL,EAAKK,GAAQtW,IACN,EAED,GAAImW,KAAUF,EAEpB,OADAA,EAAKE,GAAUnW,GACR,EAGR,MAAM,IAAI5E,MAAM,sCAAwC+a,GAIzD,SAASI,EAAWJ,GACnB,GAAsB,iBAAXA,EACV,MAAM,IAAI/a,MAAM,kCAAoC+a,GAIrD,GAAIza,EAAI+Z,eAAe5U,eAAesV,GAAS,CAC9C,IAAIC,EAASD,EACTE,EAAS3a,EAAI+Z,eAAeU,GAChC,IAAIE,EAMH,MAAM,IAAIjb,MAAM,WAAc+a,EAAS,mBAJvC1Y,QAAQC,KAAK,iDAAuDhC,EAAIiC,QAASyY,EAAQC,GACzFF,EAASE,EAOX,IAAIG,EAAS,QAAUL,EAEvB,GAA4B,mBAAjBF,EAAKO,GACf,OAAOP,EAAKO,GAAQxW,OAEd,GAAImW,KAAUF,EACpB,OAAOA,EAAKE,GAGb,MAAM,IAAI/a,MAAM,sCAAwC+a,GAWzD,SAASM,IAKRR,EAAKS,8BAEAhb,EAAIwR,SACRxR,EAAIwR,OAAS,CACZC,MAAO,KACPqB,KAAO9S,EAAIiD,SAAS,OACpBgY,IAAMjb,EAAIiD,SAAS,OACnB8P,KAAO/S,EAAIiD,SAAS,OACpBiY,KAAOlb,EAAIiD,SAAS,OACpBkY,IAAMnb,EAAIiD,SAAS,OACnBmY,KAAOpb,EAAIiD,SAAS,OACpBoY,KAAOrb,EAAIiD,SAAS,OACpBqY,UAAYtb,EAAIyY,kBAChB8C,MAAQvb,EAAIiD,SAAS,OACrBuY,QAAUxb,EAAIiD,SAAS,OACvBwY,QAAUzb,EAAIiD,SAAS,OACvByY,QAAU1b,EAAIiD,SAAS,OACvB0Y,QAAU3b,EAAIiD,SAAS,OACvB2Y,IAAM5b,EAAIiD,SAAS,OACnB4Y,KAAO7b,EAAIiD,SAAS,OACpB6Y,KAAO9b,EAAIiD,SAAS,OACpB8Y,QAAU/b,EAAI+Y,uBACdiD,QAAUhc,EAAIiD,SAAS,OACvBgZ,SAAWjc,EAAIiD,SAAS,OACxBiZ,SAAWlc,EAAIiD,SAAS,OACxBkZ,SAAWnc,EAAIiD,SAAS,OACxBmZ,KAAOpc,EAAIiD,SAAS,OACpBoZ,MAAQrc,EAAIiD,SAAS,OACrBqZ,MAAQtc,EAAIiD,SAAS,OACrBsZ,SAAWvc,EAAImZ,wBACfqD,SAAWxc,EAAIiD,SAAS,OACxBwZ,UAAYzc,EAAIiD,SAAS,OACzByZ,UAAY1c,EAAIiD,SAAS,OACzB0Z,UAAY3c,EAAIiD,SAAS,OACzBwQ,IAAMzT,EAAIiD,SAAS,OACnB2Z,IAAM5c,EAAIiD,SAAS,OACnB4Z,KAAO7c,EAAIiD,SAAS,SAGrBjD,EAAIwR,OAAO2J,IAAI2B,YAAY9c,EAAIwR,OAAO8J,UAAUvb,KAChDC,EAAIwR,OAAO4J,KAAK0B,YAAY9c,EAAIwR,OAAO2J,KACvCnb,EAAIwR,OAAO+J,MAAMuB,YAAY9c,EAAIwR,OAAOgK,SACxCxb,EAAIwR,OAAO+J,MAAMuB,YAAY9c,EAAIwR,OAAOiK,SACxCzb,EAAIwR,OAAO+J,MAAMuB,YAAY9c,EAAIwR,OAAOkK,SACxC1b,EAAIwR,OAAO+J,MAAMuB,YAAY9c,EAAIwR,OAAOmK,SACxC3b,EAAIwR,OAAO4J,KAAK0B,YAAY9c,EAAIwR,OAAO+J,OACvCvb,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAO4J,MACtCpb,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAO6J,MAEtCrb,EAAIwR,OAAOoK,IAAIkB,YAAY9c,EAAIwR,OAAOuK,QAAQhc,KAC9CC,EAAIwR,OAAOqK,KAAKiB,YAAY9c,EAAIwR,OAAOoK,KACvC5b,EAAIwR,OAAOqK,KAAKiB,YAAY9c,EAAIwR,OAAO2K,UACvCnc,EAAIwR,OAAO2K,SAASW,YAAY9c,EAAIwR,OAAO0K,UAC3Clc,EAAIwR,OAAO0K,SAASY,YAAY9c,EAAIwR,OAAOyK,UAC3Cjc,EAAIwR,OAAOyK,SAASa,YAAY9c,EAAIwR,OAAOwK,SAC3Chc,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAOqK,MACtC7b,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAOsK,MAEtC9b,EAAIwR,OAAO4K,KAAKU,YAAY9c,EAAIwR,OAAO+K,SAASxc,KAChDC,EAAIwR,OAAO6K,MAAMS,YAAY9c,EAAIwR,OAAO4K,MACxCpc,EAAIwR,OAAO6K,MAAMS,YAAY9c,EAAIwR,OAAOmL,WACxC3c,EAAIwR,OAAOmL,UAAUG,YAAY9c,EAAIwR,OAAOkL,WAC5C1c,EAAIwR,OAAOkL,UAAUI,YAAY9c,EAAIwR,OAAOiL,WAC5Czc,EAAIwR,OAAOiL,UAAUK,YAAY9c,EAAIwR,OAAOgL,UAC5Cxc,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAO6K,OACtCrc,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAO8K,OAEtCtc,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAOiC,KAEtCzT,EAAIwR,OAAOoL,IAAIE,YAAY9c,EAAIwR,OAAOqL,MACtC7c,EAAIwR,OAAOyJ,IAAI6B,YAAY9c,EAAIwR,OAAOoL,KAEtC5c,EAAIwR,OAAO0J,KAAK4B,YAAY9c,EAAIwR,OAAOyJ,KACvCjb,EAAIwR,OAAOsB,KAAKgK,YAAY9c,EAAIwR,OAAOuB,MACvC/S,EAAIwR,OAAOsB,KAAKgK,YAAY9c,EAAIwR,OAAO0J,MAEvClb,EAAIwR,OAAOsB,KAAKxS,iBAAiB,aAAcN,EAAIyW,qBAClDzW,EAAIwE,yBAA0B,CAACuY,SAAS,KAG1C,IAoSKC,EACAC,EArSDC,EAAIld,EAAIwR,OAER2L,IAAkBnd,EAAIuT,iBAAiBgH,GACvC6C,EAAqB7C,EAAK/G,kBAC1B6J,EAAard,EAAIkS,cAAcqI,GAC/B+C,EAAkB,EAAI/C,EAAKvF,mBAAqBuF,EAAKtF,iBAAmB,EAAIsF,EAAKgD,UACjFC,EAAiBxd,EAAIqT,kBAAkBkH,GACvCkD,EAAehU,KAAK2D,IACvBmN,EAAKkD,aACLhU,KAAKC,MAAM6Q,EAAK5G,QAAUlK,KAAKiU,KAIhCR,EAAEpK,KAAKnR,UAAY,sBACnBub,EAAEpK,KAAK3J,MAAMwU,MAAQ,OACrBT,EAAEpK,KAAK3J,MAAMkG,MAAQgO,EAAWjL,QAAU,KAC1C8K,EAAEpK,KAAK3J,MAAMmG,OAAS+N,EAAWhL,QAAU,KAC3C6K,EAAEpK,KAAK3J,MAAMyU,OAASrD,EAAKqD,OAG3BV,EAAEjC,IAAItZ,UAAY,iBAClBub,EAAEjC,IAAI9R,MAAMkG,MAAQgO,EAAWnJ,QAAU,KACzCgJ,EAAEjC,IAAI9R,MAAMmG,OAAS+N,EAAWlJ,QAAU,KAC1C+I,EAAEjC,IAAI9R,MAAMgI,SAAW,WAGvB+L,EAAEnK,KAAKpR,UAAY,wBACnBub,EAAEnK,KAAK5J,MAAMgI,SAAW,WACxB+L,EAAEnK,KAAK5J,MAAMqC,KAAO,IACpB0R,EAAEnK,KAAK5J,MAAMsC,IAAM,IACnByR,EAAEnK,KAAK5J,MAAMkG,MAAQ,OACrB6N,EAAEnK,KAAK5J,MAAMmG,OAAS,OACtBtP,EAAI8K,gBAAgBoS,EAAEnK,KAAM0K,EAAe,MAG3CP,EAAEhC,KAAKvZ,UAAY,wBACnBub,EAAEhC,KAAK/R,MAAMgI,SAAW,WACxB+L,EAAEhC,KAAK/R,MAAM0U,OAAStD,EAAKnG,YAAc,WACzC8I,EAAEhC,KAAK/R,MAAM2U,YAAcvD,EAAKuD,YAChCZ,EAAEhC,KAAK/R,MAAMqB,WAAa+P,EAAKwD,gBAC/B/d,EAAI8K,gBAAgBoS,EAAEhC,KAAMuC,EAAe,MAK3CP,EAAE7B,KAAKlS,MAAMqB,WAAa,mBAC1B0S,EAAEpB,KAAK3S,MAAMqB,WAAa,mBAC1B0S,EAAEZ,MAAMnT,MAAMqB,WAAa,mBAE3B0S,EAAE7B,KAAKlS,MAAM6U,QACbd,EAAEpB,KAAK3S,MAAM6U,QACbd,EAAEZ,MAAMnT,MAAM6U,QACb,IAGDd,EAAE/B,IAAIhS,MAAMgI,SAAW,WACvB+L,EAAE/B,IAAIhS,MAAMkG,MAAQkL,EAAKlL,MAAQ,KACjC6N,EAAE/B,IAAIhS,MAAMmG,OAASiL,EAAKjL,OAAS,KAGnC4N,EAAE5B,UAAU5C,KAAK6B,EAAKlL,MAAOkL,EAAKjL,OAAQtP,EAAIkV,eAAeqF,IAG7D2C,EAAE9B,KAAKjS,MAAMgI,SAAW,WACxB+L,EAAE9B,KAAKjS,MAAMqC,KAAO+O,EAAK5G,QAAU,KACnCuJ,EAAE9B,KAAKjS,MAAMsC,IAAM8O,EAAK5G,QAAU,KAClCuJ,EAAE9B,KAAKjS,MAAM0U,OAAStD,EAAKpH,mBAAqB,WAChD+J,EAAE9B,KAAKjS,MAAM2U,YAAcvD,EAAK0D,mBAGhCf,EAAE7B,KAAKlS,MAAMgI,SAAW,WACxB+L,EAAE7B,KAAKlS,MAAMqC,KAAO,MACpB0R,EAAE7B,KAAKlS,MAAMsC,IAAM,MACnByR,EAAE7B,KAAKlS,MAAMkG,MAASkL,EAAK5G,QAAU,EAAI4G,EAAKpH,mBAAqBoH,EAAKlL,MAAQmO,EAAkB,KAClGN,EAAE7B,KAAKlS,MAAMmG,OAAU,EAAIiL,EAAKpH,mBAAqB,EAAIoH,EAAK5G,QAAU4G,EAAKjL,OAAU,KACvF4N,EAAE7B,KAAKlS,MAAM+U,OAjEG,YAkEhBle,EAAIqD,QAAQ6Z,EAAE7B,KAAM,CACnB8C,SAAU5D,EACV6D,QAAS,QAIVlB,EAAE3B,MAAMpS,MAAMgI,SAAW,WACzB+L,EAAE3B,MAAMpS,MAAMqC,KACd0R,EAAE3B,MAAMpS,MAAMsC,IACb,IACDyR,EAAE3B,MAAMpS,MAAMkG,MACd6N,EAAE3B,MAAMpS,MAAMmG,OACbgO,EAAiB,KAGlBJ,EAAE1B,QAAQrS,MAAMgI,SAChB+L,EAAEzB,QAAQtS,MAAMgI,SACf,WACD+L,EAAE1B,QAAQrS,MAAMqB,WAChB0S,EAAEzB,QAAQtS,MAAMqB,WACf+P,EAAK8D,mBACNnB,EAAE1B,QAAQrS,MAAMkG,MAChB6N,EAAEzB,QAAQtS,MAAMmG,OACd,EAAIiL,EAAKvF,mBAAqBuF,EAAKtF,iBAAoB,KACzDiI,EAAE1B,QAAQrS,MAAMmG,OAChB4N,EAAEzB,QAAQtS,MAAMkG,MACfiO,EAAiB,KAClBJ,EAAE1B,QAAQrS,MAAMqC,KAChB0R,EAAEzB,QAAQtS,MAAMsC,IACdhC,KAAKkE,MAAM2P,EAAiB,GAAK7T,KAAKkE,MAAM4M,EAAKtF,iBAAmB,GAAKsF,EAAKvF,mBAAsB,KACtGkI,EAAE1B,QAAQrS,MAAMsC,IAChByR,EAAEzB,QAAQtS,MAAMqC,KACf,IAGD0R,EAAExB,QAAQvS,MAAMgI,SAChB+L,EAAEvB,QAAQxS,MAAMgI,SACf,WACD+L,EAAExB,QAAQvS,MAAMqB,WAChB0S,EAAEvB,QAAQxS,MAAMqB,WACf+P,EAAK+D,aACNpB,EAAExB,QAAQvS,MAAMmG,OAChB4N,EAAEvB,QAAQxS,MAAMkG,MACdiO,EAAiB,EAAI/C,EAAKvF,mBAAsB,KAClDkI,EAAExB,QAAQvS,MAAMkG,MAChB6N,EAAEvB,QAAQxS,MAAMmG,OACfiL,EAAKtF,iBAAmB,KACzBiI,EAAExB,QAAQvS,MAAMqC,KAChB0R,EAAEvB,QAAQxS,MAAMsC,IACdhC,KAAKkE,MAAM2P,EAAiB,GAAK7T,KAAKkE,MAAM4M,EAAKtF,iBAAmB,GAAM,KAC5EiI,EAAExB,QAAQvS,MAAMsC,IAChByR,EAAEvB,QAAQxS,MAAMqC,KACf+O,EAAKvF,mBAAqB,KAI3BkI,EAAEtB,IAAIzS,MAAMoV,SAAW,SACvBrB,EAAEtB,IAAIzS,MAAMkG,MAAQkL,EAAKjH,WAAa,KACtC4J,EAAEtB,IAAIzS,MAAMmG,OAASiL,EAAKjL,OAAS,KAGnC4N,EAAEnB,QAAQrD,KAAK6B,EAAKjH,WAAYiH,EAAKjL,OAAQ,OAAQ,QAGrD4N,EAAErB,KAAK1S,MAAMqV,QAAUrB,EAAgB,QAAU,OACjDD,EAAErB,KAAK1S,MAAMgI,SAAW,WACxB+L,EAAErB,KAAK1S,MAAMqC,KAAQ+O,EAAK5G,QAAU4G,EAAKlL,MAAQ,EAAIkL,EAAKpH,mBAAqB,EAAIqK,EAAkB,KACrGN,EAAErB,KAAK1S,MAAMsC,IAAM8O,EAAK5G,QAAU,KAClCuJ,EAAErB,KAAK1S,MAAM0U,OAAStD,EAAKpH,mBAAqB,WAChD+J,EAAErB,KAAK1S,MAAM2U,YAAcvD,EAAK0D,mBAGhCf,EAAEpB,KAAK3S,MAAMqV,QAAUrB,EAAgB,QAAU,OACjDD,EAAEpB,KAAK3S,MAAMgI,SAAW,WACxB+L,EAAEpB,KAAK3S,MAAMqC,KAAQ+O,EAAK5G,QAAU4G,EAAKlL,MAAQ,EAAIkL,EAAKpH,mBAAqBqK,EAAkB,KACjGN,EAAEpB,KAAK3S,MAAMsC,IAAM,MACnByR,EAAEpB,KAAK3S,MAAMkG,MACVkL,EAAKjH,WAAa,EAAIkK,EAAiB,EAAIjD,EAAKpH,oBAChDiK,EAAqB,EAAI3T,KAAK6D,IAAI,EAAGiN,EAAK5G,QAAU6J,IAClD,KACLN,EAAEpB,KAAK3S,MAAMmG,OAAU,EAAIiL,EAAKpH,mBAAqB,EAAIoH,EAAK5G,QAAU4G,EAAKjL,OAAU,KACvF4N,EAAEpB,KAAK3S,MAAM+U,OAAS,UACtBle,EAAIqD,QAAQ6Z,EAAEpB,KAAM,CACnBqC,SAAU5D,EACV6D,QAAS,QAIVlB,EAAEjB,SAAS9S,MAAM0U,OACjBX,EAAEf,SAAShT,MAAM0U,OAChBtD,EAAKvF,mBAAqB,YAAcuF,EAAK8D,mBAG9CnB,EAAEf,SAAShT,MAAMgI,SAAW,WAC5B+L,EAAEf,SAAShT,MAAMqC,OAAS,EAAI+O,EAAKvF,mBAAqBuF,EAAKtF,kBAAoB,KACjFiI,EAAEf,SAAShT,MAAMsC,IAAM,IAGvByR,EAAEhB,SAAS/S,MAAM0U,OAAStD,EAAKtF,iBAAmB,YAAcsF,EAAK+D,aAGrEpB,EAAElB,QAAQ7S,MAAMkG,MAAQkL,EAAKjH,WAAa,KAC1C4J,EAAElB,QAAQ7S,MAAMmG,OAAStP,EAAIO,IAAIke,iBAAmB,KAIpDvB,EAAEd,KAAKjT,MAAMoV,SAAW,SACxBrB,EAAEd,KAAKjT,MAAMkG,MAAQkL,EAAKjH,WAAa,KACvC4J,EAAEd,KAAKjT,MAAMmG,OAASiL,EAAKjL,OAAS,KAGpC4N,EAAEX,SAAS7D,KAAK6B,EAAKjH,WAAYiH,EAAKjL,OAAQ,QAG9C4N,EAAEb,MAAMlT,MAAMqV,QAAUpB,EAAqB,QAAU,OACvDF,EAAEb,MAAMlT,MAAMgI,SAAW,WACzB+L,EAAEb,MAAMlT,MAAMqC,KACX+O,EAAK5G,QAAU4G,EAAKlL,MAAQ,EAAIkL,EAAKpH,mBAAqBqK,GAC1DL,EAAiB5C,EAAKjH,WAAa,EAAIkK,EAAiB,EAAIjD,EAAKpH,mBAAsB,GACrF,KACL+J,EAAEb,MAAMlT,MAAMsC,IAAM8O,EAAK5G,QAAU,KACnCuJ,EAAEb,MAAMlT,MAAM0U,OAAStD,EAAKpH,mBAAqB,WACjD+J,EAAEb,MAAMlT,MAAM2U,YAAcvD,EAAK0D,mBAGjCf,EAAEZ,MAAMnT,MAAMqV,QAAUpB,EAAqB,QAAU,OACvDF,EAAEZ,MAAMnT,MAAMgI,SAAW,WACzB+L,EAAEZ,MAAMnT,MAAMqC,KACX+O,EAAK5G,QAAU4G,EAAKlL,MAAQ,EAAIkL,EAAKpH,mBAAqBqK,GAC1DL,EAAiB5C,EAAKjH,WAAa,EAAIkK,EAAiB,EAAIjD,EAAKpH,mBAAsB,GACrF,KACL+J,EAAEZ,MAAMnT,MAAMsC,IAAM,MACpByR,EAAEZ,MAAMnT,MAAMkG,MACXkL,EAAKjH,WAAa,EAAIkK,EAAiB,EAAIjD,EAAKpH,mBACjD1J,KAAK6D,IAAI,EAAGiN,EAAK5G,QAAU6J,GACxB,KACLN,EAAEZ,MAAMnT,MAAMmG,OAAU,EAAIiL,EAAKpH,mBAAqB,EAAIoH,EAAK5G,QAAU4G,EAAKjL,OAAU,KACxF4N,EAAEZ,MAAMnT,MAAM+U,OAAS,UACvBle,EAAIqD,QAAQ6Z,EAAEZ,MAAO,CACpB6B,SAAU5D,EACV6D,QAAS,SAIVlB,EAAET,UAAUtT,MAAM0U,OAClBX,EAAEP,UAAUxT,MAAM0U,OACjBtD,EAAKvF,mBAAqB,YAAcuF,EAAK8D,mBAG9CnB,EAAEP,UAAUxT,MAAMgI,SAAW,WAC7B+L,EAAEP,UAAUxT,MAAMqC,OAAS,EAAI+O,EAAKvF,mBAAqBuF,EAAKtF,kBAAoB,KAClFiI,EAAEP,UAAUxT,MAAMsC,IAAM,IAGxByR,EAAER,UAAUvT,MAAM0U,OAAStD,EAAKtF,iBAAmB,YAAcsF,EAAK+D,aAGtEpB,EAAEV,SAASrT,MAAMkG,MAAQkL,EAAKjH,WAAa,KAC3C4J,EAAEV,SAASrT,MAAMmG,OAAStP,EAAIO,IAAIke,iBAAmB,KAIrDvB,EAAEzJ,IAAI9R,UAAY,kBAClBub,EAAEzJ,IAAItK,MAAMqV,QAAUnB,EAAWhJ,QAAQE,KAAO,QAAU,OAC1D2I,EAAEzJ,IAAItK,MAAMgI,SAAW,WACvB+L,EAAEzJ,IAAItK,MAAMqC,KAAO+O,EAAK5G,QAAU,KAClCuJ,EAAEzJ,IAAItK,MAAMsC,IAAO,EAAI8O,EAAKpH,mBAAqB,EAAIoH,EAAK5G,QAAU4G,EAAKjL,OAAU,KAInF4N,EAAEzJ,IAAIiL,UAAY,GAKlB,IAHA,IAAIC,EAAa3e,EAAIyP,sBAAsB,iBAEvCmP,EAAK,EACAtV,EAAI,EAAGA,EAAI+T,EAAWhJ,QAAQE,KAAMjL,IAC5C,IAAK,IAAIwI,EAAI,EAAGA,EAAIuL,EAAWhJ,QAAQC,MAAQsK,EAAKrE,EAAK5F,SAASxT,OAAQ2Q,IAAK8M,IAAM,CACpF,IAAIC,EAActE,EAAK5F,SAASiK,GAC5BE,EAAiB9e,EAAIiK,UAAUqH,MAAM,KAAMuN,EAAY/Q,MAEvDiR,EAAK/e,EAAIiD,SAAS,OACtB8b,EAAG5V,MAAMkG,MAASgO,EAAWhJ,QAAQG,MAAQ,EAAI+F,EAAKpH,mBAAsB,KAC5E4L,EAAG5V,MAAMmG,OAAU+N,EAAWhJ,QAAQI,MAAQ,EAAI8F,EAAKpH,mBAAsB,KAC7E4L,EAAG5V,MAAM4U,gBAAkBe,EAE3B,IAAIE,EAAKhf,EAAIiD,SAAS,OACtB+b,EAAGrd,UAAY,yBACfqd,EAAG7V,MAAMqV,QAAU,QACnBQ,EAAG7V,MAAMgI,SAAW,WACpB6N,EAAG7V,MAAMqC,MACP6R,EAAWhJ,QAAQC,MAAQ,EAAI,EAC/B7K,KAAKC,MAAYoI,IAAMuL,EAAWrJ,SAAWqJ,EAAWhJ,QAAQG,QAAU6I,EAAWhJ,QAAQC,KAAO,IAAzF,IAAiG,IACzG,KACL0K,EAAG7V,MAAMsC,IAAOnC,GAAK+T,EAAWhJ,QAAQI,MAAQ8F,EAAKzF,gBAAmB,KACxEkK,EAAG7V,MAAM0U,OAAStD,EAAKpH,mBAAqB,WAC5C6L,EAAG7V,MAAM2U,YAAcvD,EAAK0D,mBAC5Be,EAAG7V,MAAM+U,OAAS,UACU,OAAxBW,EAAY/Q,KAAK,IAAe+Q,EAAY/Q,KAAK,GAAK,IACzDkR,EAAG7V,MAAM8V,gBAAkB,QAAWN,EAAWzP,OAAOgQ,YAAc,KACtEF,EAAG7V,MAAMgW,iBAAmB,SAC5BH,EAAG7V,MAAMiW,mBAAqB,iBAE/Bpf,EAAIqD,QAAQ2b,EAAI,CACfb,SAAU5D,EACV6D,QAAS,iBACTtP,MAAO+P,IAERG,EAAG1e,iBAAiB,QAASN,EAAI0X,sBAAsB,GACvDsH,EAAGlC,YAAYiC,GACf7B,EAAEzJ,IAAIqJ,YAAYkC,GAYpB9B,EAAEN,IAAIjb,UAAY,oBAClBub,EAAEN,IAAIzT,MAAMqV,QAAUjE,EAAK3G,YAAc,QAAU,OACnDsJ,EAAEN,IAAIzT,MAAMgI,SAAW,WACvB+L,EAAEN,IAAIzT,MAAMqC,KAAO+O,EAAK5G,QAAU,KAClCuJ,EAAEN,IAAIzT,MAAMkW,OAAS9E,EAAK5G,QAAU,KACpCuJ,EAAEN,IAAIzT,MAAMwK,QAAU,SACtBuJ,EAAEN,IAAIzT,MAAMmW,SAAYjC,EAAWrJ,SAAW,EAAIuG,EAAKpH,mBAAqB,GAAkB,KAC9F+J,EAAEN,IAAIzT,MAAMoV,SAAW,SACvBrB,EAAEN,IAAIzT,MAAMmG,OAASiL,EAAK1G,aAAe,KACzCqJ,EAAEN,IAAIzT,MAAMoW,WAAa,SACzBrC,EAAEN,IAAIzT,MAAM0U,OAAStD,EAAKpH,mBAAqB,WAd1C8J,GADAD,EAAczC,EAAK0D,mBAAmBlW,MAAM,QAClB5G,OAAS,EAAI6b,EAAY,GAAKA,EAAY,GAAK,IAAMA,EAAY,GAAK,IAAMA,EAAY,GAAK,IAAMA,EAAY,GAC7IE,EAAEN,IAAIzT,MAAM2U,YAAcb,EAe3BC,EAAEN,IAAIzT,MAAM2F,MAAQyL,EAAKiF,YACzBtC,EAAEN,IAAIzT,MAAMsW,KAAO,kBACnBvC,EAAEN,IAAIzT,MAAMuW,UAAY,SACxBxC,EAAEN,IAAIzT,MAAM+U,OAAS,UACrBhB,EAAEN,IAAI+C,YAAc,WACnBpF,EAAKrC,QAENgF,EAAEL,KAAK1T,MAAMyW,WAAarF,EAAK1G,aAAe,KAC9CqJ,EAAEL,KAAK6B,UAAY,GACnBxB,EAAEL,KAAKC,YAAYnd,EAAOH,SAASqgB,eAAetF,EAAKuF,YAGvDC,IACAC,IACAC,IAIIjgB,EAAIwR,OAAOC,OAASzR,EAAIwR,OAAOC,QAAU8I,GAC5Cva,EAAIsI,YAAYtI,EAAIwR,OAAOC,MAAM1O,cAAe/C,EAAIO,IAAI2f,iBAIzDlgB,EAAIwR,OAAOC,MAAQ8I,EAIfA,EAAK4F,YAAcxgB,EAAOH,SAAS4gB,KACtCpgB,EAAIuR,iBAEJvR,EAAI2S,cAAc4H,EAAM,EAAG,EAAG,YAAY,GAGvC2C,EAAEpK,KAAKuN,aAAe9F,EAAK4F,WAC9B5F,EAAK4F,UAAUrD,YAAYI,EAAEpK,MAG9B9S,EAAImI,SAASoS,EAAKxX,cAAe/C,EAAIO,IAAI2f,iBAI1C,SAASH,IAER,IAAIO,EAAWtgB,EAAIkV,eAAeqF,GAC9BnP,EAAI3B,KAAKC,MAAO6Q,EAAKlD,SAAS9J,EAAI,KAAQgN,EAAKlL,MAAQ,IACvDhE,EAAI5B,KAAKC,OAAO,EAAI6Q,EAAKlD,SAASiJ,GAAY,MAAQ/F,EAAKjL,OAAS,IACpEgO,EAAkB,EAAI/C,EAAKvF,mBAAqBuF,EAAKtF,iBAAmB,EAAIsF,EAAKgD,UACjFrG,GAAOzN,KAAKkE,MAAM2P,EAAiB,GAKvC,OAJAtd,EAAIwR,OAAO+J,MAAMpS,MAAMqC,KAAQJ,EAAI8L,EAAO,KAC1ClX,EAAIwR,OAAO+J,MAAMpS,MAAMsC,IAAOJ,EAAI6L,EAAO,KAGjClX,EAAIuT,iBAAiBgH,IAC7B,IAAK,IACJ,IAAIgG,EAAOvgB,EAAIwN,QAAQ+M,EAAKlD,SAAS9J,EAAG,IAAKgN,EAAKlD,SAAShK,GACvDmT,EAAOxgB,EAAIwN,QAAQ+M,EAAKlD,SAAS9J,EAAG,EAAGgN,EAAKlD,SAAShK,GACrD2L,EAAS,OACZvP,KAAKC,MAAM6W,EAAK,IAAM,IACtB9W,KAAKC,MAAM6W,EAAK,IAAM,IACtB9W,KAAKC,MAAM6W,EAAK,IAAM,IACnBtH,EAAS,OACZxP,KAAKC,MAAM8W,EAAK,IAAM,IACtB/W,KAAKC,MAAM8W,EAAK,IAAM,IACtB/W,KAAKC,MAAM8W,EAAK,IAAM,IACvBxgB,EAAIwR,OAAOuK,QAAQrD,KAAK6B,EAAKjH,WAAYiH,EAAKjL,OAAQ0J,EAAQC,GAC9D,MACD,IAAK,IACJ,IAAIwH,EAAMzgB,EAAIwN,QAAQ+M,EAAKlD,SAAS9J,EAAGgN,EAAKlD,SAAS5J,EAAG,KACpDuL,EAAS,OACZvP,KAAKC,MAAM+W,EAAI,IAAM,IACrBhX,KAAKC,MAAM+W,EAAI,IAAM,IACrBhX,KAAKC,MAAM+W,EAAI,IAAM,IAClBxH,EAAS,OACbjZ,EAAIwR,OAAOuK,QAAQrD,KAAK6B,EAAKjH,WAAYiH,EAAKjL,OAAQ0J,EAAQC,GAK/DjZ,EAAIwR,OAAO+K,SAAS7D,KAAK6B,EAAKjH,WAAYiH,EAAKjL,OAAQiL,EAAKmG,eAI7D,SAASV,IACR,IAAIW,EAAa3gB,EAAIuT,iBAAiBgH,GACtC,GAAIoG,EAAY,CAEf,IAAItV,EAAI5B,KAAKC,OAAO,EAAI6Q,EAAKlD,SAASsJ,GAAc,MAAQpG,EAAKjL,OAAS,IAC1EtP,EAAIwR,OAAO2K,SAAShT,MAAMsC,IAAOJ,GAAK,EAAIkP,EAAKvF,mBAAqBuF,EAAKtF,kBAAoBxL,KAAKkE,MAAM3N,EAAIO,IAAIke,iBAAmB,GAAM,KAI1Ize,EAAIwR,OAAO+K,SAAS7D,KAAK6B,EAAKjH,WAAYiH,EAAKjL,OAAQiL,EAAKmG,eAI7D,SAAST,IACR,IAAI5U,EAAI5B,KAAKC,OAAO,EAAI6Q,EAAKlD,SAAStN,IAAMwQ,EAAKjL,OAAS,IAC1DtP,EAAIwR,OAAOmL,UAAUxT,MAAMsC,IAAOJ,GAAK,EAAIkP,EAAKvF,mBAAqBuF,EAAKtF,kBAAoBxL,KAAKkE,MAAM3N,EAAIO,IAAIke,iBAAmB,GAAM,KAI3I,SAASmC,IACR,OAAO5gB,EAAIwR,QAAUxR,EAAIwR,OAAOC,QAAU8I,EAgG3C,GAx1CKrY,IACJA,EAAO,IAGRtC,KAAKyX,SAAW,CACf/N,EAAG,IACHC,EAAG,IACHC,EAAG,IACH+D,EAAG,EACHE,EAAG,EACHJ,EAAG,IACHtD,EAAG,GAKJnK,KAAKmO,OAAS,OACdnO,KAAK0E,WAAQhD,EACb1B,KAAKihB,WAAQvf,EACb1B,KAAKkhB,cAAWxf,EAChB1B,KAAKmhB,aAAUzf,EACf1B,KAAKohB,kBAAe1f,EACpB1B,KAAKqhB,kBAAe3f,EACpB1B,KAAKshB,oBAAiB5f,EACtB1B,KAAKia,gBAAkB,OACvBja,KAAKuhB,YAAc,GACnBvhB,KAAKwhB,eAAiB,EACtBxhB,KAAKyhB,UAAW,EAChBzhB,KAAK0hB,MAAO,EACZ1hB,KAAK2hB,WAAY,EACjB3hB,KAAK4hB,YAAa,EAIlB5hB,KAAKyP,MAAQ,IACbzP,KAAK0P,OAAS,IACd1P,KAAKuV,KAAO,MACZvV,KAAKka,aAAe,OACpBla,KAAKuR,SAAW,SAChBvR,KAAK2S,eAAgB,EACrB3S,KAAKyW,aAAc,EACnBzW,KAAK6hB,aAAc,EACnB7hB,KAAKyU,QAAU,GACfzU,KAAKgV,YAAc,GACnBhV,KAAKkY,iBAAmB,OACxBlY,KAAKmV,cAAgB,GACrBnV,KAAKkV,eAAiB,EACtBlV,KAAKqY,oBAAqB,EAC1BrY,KAAK0T,WAAa,GAClB1T,KAAK2d,UAAY,EACjB3d,KAAKgU,aAAc,EACnBhU,KAAKkgB,UAAY,QACjBlgB,KAAK4f,YAAc,gBACnB5f,KAAKiU,aAAe,GACpBjU,KAAK+T,QAAU,GACf/T,KAAKme,gBAAkB,sBACvBne,KAAKwU,YAAc,EACnBxU,KAAKke,YAAc,sBACnBle,KAAK6d,aAAe,EACpB7d,KAAKuT,mBAAqB,EAC1BvT,KAAKqe,mBAAqB,sBAC1Bre,KAAKoT,QAAS,EACdpT,KAAKiT,WAAa,GAClBjT,KAAKqT,YAAc,kBACnBrT,KAAK0e,aAAe,mBACpB1e,KAAKoV,mBAAqB,EAC1BpV,KAAKye,mBAAqB,sBAC1Bze,KAAKqV,iBAAmB,EACxBrV,KAAKge,OAAS,IACdhe,KAAKugB,eAAY7e,EAIjB1B,KAAK8hB,KAAO,EACZ9hB,KAAK+hB,KAAO,IACZ/hB,KAAKgiB,KAAO,EACZhiB,KAAKiiB,KAAO,IACZjiB,KAAKkiB,KAAO,EACZliB,KAAKmiB,KAAO,EAOZniB,KAAK6a,OAAS,WACb,IAAKxV,UAAU9D,OACd,MAAM,IAAIzB,MAAM,uBAGjB,GAAyB,IAArBuF,UAAU9D,QAAwC,iBAAjB8D,UAAU,GAAiB,CAE/D,IACC,OAAO4V,EAAU5V,UAAU,IAC1B,MAAO5C,GACRN,QAAQC,KAAKK,GAEd,OAAO,EAED,GAAI4C,UAAU9D,QAAU,GAA6B,iBAAjB8D,UAAU,GAAiB,CAErE,IACC,IAAKuV,EAAUvV,UAAU,GAAIA,UAAU,IACtC,OAAO,EAEP,MAAO5C,GAER,OADAN,QAAQC,KAAKK,IACN,EAIR,OAFAzC,KAAKoiB,SACLpiB,KAAKqiB,eACE,EAED,GAAyB,IAArBhd,UAAU9D,QAAwC,iBAAjB8D,UAAU,GAAiB,CAEtE,IAAI/C,EAAO+C,UAAU,GACjBid,GAAU,EACd,IAAK,IAAIC,KAAOjgB,EACf,GAAIA,EAAKiD,eAAegd,GACvB,IACM3H,EAAU2H,EAAKjgB,EAAKigB,MACxBD,GAAU,GAEV,MAAO7f,GACRN,QAAQC,KAAKK,GACb6f,GAAU,EAMb,OAFAtiB,KAAKoiB,SACLpiB,KAAKqiB,cACEC,EAGR,MAAM,IAAIxiB,MAAM,sBAOjBE,KAAKwiB,QAAU,SAAU3c,EAAMnB,GAC9B,GAAoB,iBAATmB,EACV,MAAM,IAAI/F,MAAM,mCAAqC+F,GAGtD,QAAcnE,IAAVgD,EAEH,OAAK1E,KAAKyX,SAASlS,eAAeM,EAAKjE,eAIhC5B,KAAKyX,SAAS5R,EAAKjE,gBAHzBO,QAAQC,KAAK,4BAA8ByD,IACpC,GAMR,IAAI4c,GAAM,EACV,OAAQ5c,EAAKjE,eACZ,IAAK,IAAK6gB,EAAMziB,KAAKoY,SAAS1T,EAAO,KAAM,KAAM,MAAO,MACxD,IAAK,IAAK+d,EAAMziB,KAAKoY,SAAS,KAAM1T,EAAO,KAAM,MAAO,MACxD,IAAK,IAAK+d,EAAMziB,KAAKoY,SAAS,KAAM,KAAM1T,EAAO,MAAO,MACxD,IAAK,IAAK+d,EAAMziB,KAAK0X,SAAShT,EAAO,KAAM,KAAM,MAAO,MACxD,IAAK,IAAK+d,EAAMziB,KAAK0X,SAAS,KAAMhT,EAAO,KAAM,MAAO,MACxD,IAAK,IAAK+d,EAAMziB,KAAK0X,SAAS,KAAM,KAAMhT,EAAO,MAAO,MACxD,IAAK,IAAK+d,EAAMziB,KAAK0X,SAAS,KAAM,KAAM,KAAMhT,GAAQ,MACxD,QAEC,OADAvC,QAAQC,KAAK,4BAA8ByD,IACpC,EAET,QAAI4c,IACHziB,KAAKoiB,UACE,IAcVpiB,KAAK6V,QAAU,SAAUD,GAExB,IADA,IAAI8M,EAAMtiB,EAAI6H,QAAQ2N,GACbtU,EAAI,EAAGA,EAAIohB,EAAInhB,OAAQD,GAAK,EAAG,CACvC,IAAI8F,EAAKsb,EAAIphB,GAAGM,cAGZ+gB,EAAe,KACnB,OAAQvb,GACP,IAAK,QAASub,EAAe,UAAW,MACxC,IAAK,SAAUA,EAAe,WAE3BA,GACHviB,EAAIoV,gBAAgBxV,KAAM2iB,GAI3BviB,EAAIqH,kBAAkBzH,KAAKohB,aAAcha,GAAI,GAAM,KAUrDpH,KAAK0X,SAAW,SAAU/J,EAAGE,EAAGJ,EAAGtD,EAAGyP,GAMrC,QALUlY,IAANiM,IAAmBA,EAAI,WACjBjM,IAANmM,IAAmBA,EAAI,WACjBnM,IAAN+L,IAAmBA,EAAI,WACjB/L,IAANyI,IAAmBA,EAAI,MAEjB,OAANwD,EAAY,CACf,GAAIiV,MAAMjV,GAAM,OAAO,EACvB3N,KAAKyX,SAAS9J,EAAI9D,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAKG,IAE7C,GAAU,OAANE,EAAY,CACf,GAAI+U,MAAM/U,GAAM,OAAO,EACvB7N,KAAKyX,SAAS5J,EAAIhE,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAKxN,KAAK+hB,KAAMlU,GAAI7N,KAAK8hB,MAEjE,GAAU,OAANrU,EAAY,CACf,GAAImV,MAAMnV,GAAM,OAAO,EACvBzN,KAAKyX,SAAShK,EAAI5D,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAKxN,KAAKiiB,KAAMxU,GAAIzN,KAAKgiB,MAEjE,GAAU,OAAN7X,EAAY,CACf,GAAIyY,MAAMzY,GAAM,OAAO,EACvBnK,KAAKyX,SAAStN,EAAInK,KAAK4T,kBACtB/J,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,EAAGxN,KAAKmiB,KAAMhY,GAAInK,KAAKkiB,MAC5C,EAGF,IAAIrB,EAAMzgB,EAAIwN,QACb5N,KAAKyX,SAAS9J,EACd3N,KAAKyX,SAAS5J,EACd7N,KAAKyX,SAAShK,GAOf,OALAzN,KAAKyX,SAAS/N,EAAImX,EAAI,GACtB7gB,KAAKyX,SAAS9N,EAAIkX,EAAI,GACtB7gB,KAAKyX,SAAS7N,EAAIiX,EAAI,GAEtB7gB,KAAKqiB,YAAYzI,IACV,GASR5Z,KAAKoY,SAAW,SAAU1O,EAAGC,EAAGC,EAAGO,EAAGyP,GAMrC,QALUlY,IAANgI,IAAmBA,EAAI,WACjBhI,IAANiI,IAAmBA,EAAI,WACjBjI,IAANkI,IAAmBA,EAAI,WACjBlI,IAANyI,IAAmBA,EAAI,MAEjB,OAANT,EAAY,CACf,GAAIkZ,MAAMlZ,GAAM,OAAO,EACvBA,EAAIG,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAK9D,IAE/B,GAAU,OAANC,EAAY,CACf,GAAIiZ,MAAMjZ,GAAM,OAAO,EACvBA,EAAIE,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAK7D,IAE/B,GAAU,OAANC,EAAY,CACf,GAAIgZ,MAAMhZ,GAAM,OAAO,EACvBA,EAAIC,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAK5D,IAE/B,GAAU,OAANO,EAAY,CACf,GAAIyY,MAAMzY,GAAM,OAAO,EACvBnK,KAAKyX,SAAStN,EAAInK,KAAK4T,kBACtB/J,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,EAAGxN,KAAKmiB,KAAMhY,GAAInK,KAAKkiB,MAC5C,EAGF,IAAIW,EAAMziB,EAAImN,QACT,OAAJ7D,EAAW1J,KAAKyX,SAAS/N,EAAIA,EACzB,OAAJC,EAAW3J,KAAKyX,SAAS9N,EAAIA,EACzB,OAAJC,EAAW5J,KAAKyX,SAAS7N,EAAIA,GAEf,OAAXiZ,EAAI,KACP7iB,KAAKyX,SAAS9J,EAAI9D,KAAK6D,IAAI,EAAG7D,KAAK2D,IAAI,IAAKqV,EAAI,MAElC,IAAXA,EAAI,KACP7iB,KAAKyX,SAAS5J,EAAIhE,KAAK6D,IAAI,EAAG1N,KAAK8hB,KAAMjY,KAAK2D,IAAI,IAAKxN,KAAK+hB,KAAMc,EAAI,MAEvE7iB,KAAKyX,SAAShK,EAAI5D,KAAK6D,IAAI,EAAG1N,KAAKgiB,KAAMnY,KAAK2D,IAAI,IAAKxN,KAAKiiB,KAAMY,EAAI,KAGtE,IAAIhC,EAAMzgB,EAAIwN,QAAQ5N,KAAKyX,SAAS9J,EAAG3N,KAAKyX,SAAS5J,EAAG7N,KAAKyX,SAAShK,GAMtE,OALAzN,KAAKyX,SAAS/N,EAAImX,EAAI,GACtB7gB,KAAKyX,SAAS9N,EAAIkX,EAAI,GACtB7gB,KAAKyX,SAAS7N,EAAIiX,EAAI,GAEtB7gB,KAAKqiB,YAAYzI,IACV,GAMR5Z,KAAK8iB,QAAU,SAAUnV,EAAGE,EAAGJ,EAAGmM,GAEjC,OADAzX,QAAQC,KAAK,4DAA8DhC,EAAIiC,SACxErC,KAAK0X,SAAS/J,EAAGE,EAAGJ,EAAG,KAAMmM,IAMrC5Z,KAAK+iB,QAAU,SAAUrZ,EAAGC,EAAGC,EAAGgQ,GAEjC,OADAzX,QAAQC,KAAK,4DAA8DhC,EAAIiC,SACxErC,KAAKoY,SAAS1O,EAAGC,EAAGC,EAAG,KAAMgQ,IAIrC5Z,KAAKgjB,WAAa,SAAUtgB,EAAKkX,GAChC,IAAK5Z,KAAKyhB,UAA2B,KAAf/e,EAAIH,OAIzB,OAFAvC,KAAKijB,oBAAoB,MACzBjjB,KAAKkjB,qBAAqB,KACnB,EAGR,IAAIhU,EAAQ9O,EAAI4N,iBAAiBtL,GACjC,QAAKwM,IAG6B,QAA9BlP,KAAKmO,OAAOvM,gBACf5B,KAAKgY,WAAW9I,EAAMf,QACjB/N,EAAIgP,cAAcpP,KAAKiY,eAC3B/I,EAAMhB,KAAK,GAAK,IAGlBlO,KAAKoY,SACJlJ,EAAMhB,KAAK,GACXgB,EAAMhB,KAAK,GACXgB,EAAMhB,KAAK,GACXgB,EAAMhB,KAAK,GACX0L,IAEM,IAIR5Z,KAAK+J,SAAW,SAAUoE,GAIzB,YAHezM,IAAXyM,IACHA,EAASnO,KAAKiY,aAEP9J,EAAOvM,eACd,IAAK,MAAO,OAAO5B,KAAK8gB,cACxB,IAAK,OAAQ,OAAO9gB,KAAKmjB,eACzB,IAAK,MAAO,OAAOnjB,KAAKojB,cACxB,IAAK,OAAQ,OAAOpjB,KAAKqjB,eAE1B,OAAO,GAIRrjB,KAAK8gB,YAAc,WAClB,OAAO1gB,EAAIqJ,SACVzJ,KAAKyX,SAAS/N,EACd1J,KAAKyX,SAAS9N,EACd3J,KAAKyX,SAAS7N,IAKhB5J,KAAKmjB,aAAe,WACnB,OAAO/iB,EAAI8J,UACVlK,KAAKyX,SAAS/N,EACd1J,KAAKyX,SAAS9N,EACd3J,KAAKyX,SAAS7N,EACd5J,KAAKyX,SAAStN,IAKhBnK,KAAKojB,YAAc,WAClB,OAAOhjB,EAAIgK,SACVpK,KAAKyX,SAAS/N,EACd1J,KAAKyX,SAAS9N,EACd3J,KAAKyX,SAAS7N,IAKhB5J,KAAKqjB,aAAe,WACnB,OAAOjjB,EAAIiK,UACVrK,KAAKyX,SAAS/N,EACd1J,KAAKyX,SAAS9N,EACd3J,KAAKyX,SAAS7N,EACd5J,KAAKyX,SAAStN,IAKhBnK,KAAKsjB,YAAc,WAClB,MACC,KAAQtjB,KAAKyX,SAAS/N,EACtB,KAAQ1J,KAAKyX,SAAS9N,EACtB,KAAQ3J,KAAKyX,SAAS7N,GAKxB5J,KAAKujB,SAAW,WACf,OAAOnjB,EAAIyP,sBAAsB7P,KAAKqjB,gBAAgB/T,QAIvDtP,KAAKsf,UAAY,WAChB,OAAOtf,KAAKujB,WAAWjE,aAIxBtf,KAAKwjB,aAAe,WACnB,OAAOpjB,EAAIO,IAAIiK,WAAW5K,KAAKqjB,iBAIhCrjB,KAAKyjB,QAAU,WACd,OAAOzjB,KAAKsjB,cAAgB,OAI7BtjB,KAAKsY,KAAO,WACP0I,MAmVJ5gB,EAAIsI,YAAYiS,EAAKxX,cAAe/C,EAAIO,IAAI2f,iBAC5ClgB,EAAIwR,OAAOsB,KAAKuN,WAAWrc,YAAYhE,EAAIwR,OAAOsB,aAC3C9S,EAAIwR,OAAOC,QA/UnB7R,KAAK2W,KAAO,WACXwE,KAIDnb,KAAKoiB,OAAS,WACTpB,KACH7F,KAKFnb,KAAKiY,UAAY,WAChB,OAAOjY,KAAK0jB,gBAIb1jB,KAAKgY,WAAa,SAAU7J,GAC3BnO,KAAK0jB,eAAiBvV,EAAOvM,eAI9B5B,KAAK4T,gBAAkB,WACtB,MAA0B,SAAtB5T,KAAKka,aAEuB,QAA9Bla,KAAKmO,OAAOvM,eACZxB,EAAIgP,cAAcpP,KAAKiY,mBACRvW,IAAf1B,KAAKihB,YACiBvf,IAAtB1B,KAAKqhB,aAIArhB,KAAKka,cAIbla,KAAK2jB,kBAAoB,SAAUjhB,GAC7B1C,KAAKgjB,WAAWtgB,IAEpB1C,KAAKqiB,eAKPriB,KAAK4jB,kBAAoB,SAAUlhB,GAC7B1C,KAAK0X,SAAS,KAAM,KAAM,KAAM9I,WAAWlM,KAE/C1C,KAAKqiB,eAKPriB,KAAKqiB,YAAc,SAAUzI,GAC5B,IAAIiK,EAAW7jB,KAAK+J,WAChB6O,EAAM5Y,KAAKiY,YAaf,GAVA7X,EAAI4F,YAAYhG,KAAKmD,cAAe,gBAAiB0gB,GAE/CjK,EAAQxZ,EAAIwZ,MAAMC,aAAe7Z,KAAKohB,eAC/B,QAARxI,GAAyB,SAARA,IACf5Y,KAAK2hB,YAAakC,EAAWA,EAASjiB,eACtC5B,KAAK0hB,OAAQmC,EAAWA,EAAS3b,QAAQ,KAAM,MAErDlI,KAAKkjB,qBAAqBW,MAGrBjK,EAAQxZ,EAAIwZ,MAAME,aAAe9Z,KAAKqhB,aAAc,CACzD,IAAIyC,EAAWja,KAAKC,MAAwB,IAAlB9J,KAAKyX,SAAStN,GAAW,IACnDnK,KAAK+jB,qBAAqBD,GAGrBlK,EAAQxZ,EAAIwZ,MAAMG,eAAiB/Z,KAAKshB,kBAI5ClhB,EAAIiE,YAAYrE,KAAKshB,iBACpBlhB,EAAIkE,SAAStE,KAAKshB,kBAAoBlhB,EAAIqE,cAAczE,KAAKshB,kBAEjDthB,KAAKia,gBAGnBja,KAAKijB,oBAAoBjjB,KAAKqjB,iBAG3BrC,MACHb,IACAC,IACAC,MAKFrgB,KAAKijB,oBAAsB,SAAU/T,GACpC,GAAKlP,KAAKshB,eAAV,CAIA,IAAI/P,EAAW,KACX9B,EAAQ,MAEXrP,EAAIiE,YAAYrE,KAAKshB,iBACpBlhB,EAAIkE,SAAStE,KAAKshB,kBAAoBlhB,EAAIqE,cAAczE,KAAKshB,mBAE9D/P,EAAWvR,KAAKia,gBAChBxK,EAAQzP,KAAKuhB,aAGd,IAAIyC,EAAc,GAElB,GAAK9U,EASE,CAEN8U,EAAY5gB,KAAK,CAChB6gB,MAAO7jB,EAAIkR,wBACVpC,EACAqC,EACA9B,EAAQA,EAAQrP,EAAIO,IAAIuP,iBAAiB3O,OAAS,MAEnDgQ,SAAU,WACV2S,KAAM,OACNC,OAAQ5S,EAAW,WAAa,SAChC6S,OAAQ,gBAIT,IAAIC,EAAUjkB,EAAIyP,sBACjB,gBACA0B,EAAW,CAAC3F,KAAO,QAAS6F,MAAQ,QAAQF,GAAY,KACxD9B,GACA,GAEDuU,EAAY5gB,KAAK,CAChB6gB,MAAO,QAAWI,EAAQ/U,OAAOgQ,YAAc,KAC/C/N,UAAWA,GAAY,QAAU,OACjC2S,KAAMG,EAAQ5U,MAAQ,MAAQ4U,EAAQ3U,OAAS,KAC/CyU,OAAQ5S,EAAW,WAAa,SAChC6S,OAAQ,qBAjCTJ,EAAY5gB,KAAK,CAChB6gB,MAAO,OACP1S,SAAU,WACV2S,KAAM,OACNC,OAAQ,YACRC,OAAQ,gBAuCV,IAPA,IAAIE,EAAK,CACRL,MAAO,GACP1S,SAAU,GACV2S,KAAM,GACNC,OAAQ,GACRC,OAAQ,IAEA9iB,EAAI,EAAGA,EAAI0iB,EAAYziB,OAAQD,GAAK,EAC5CgjB,EAAGL,MAAM7gB,KAAK4gB,EAAY1iB,GAAG2iB,OAC7BK,EAAG/S,SAASnO,KAAK4gB,EAAY1iB,GAAGiQ,UAChC+S,EAAGJ,KAAK9gB,KAAK4gB,EAAY1iB,GAAG4iB,MAC5BI,EAAGH,OAAO/gB,KAAK4gB,EAAY1iB,GAAG6iB,QAC9BG,EAAGF,OAAOhhB,KAAK4gB,EAAY1iB,GAAG8iB,QAI/B,IAAIG,EAAM,CACTC,mBAAoBF,EAAGL,MAAMjZ,KAAK,MAClCyZ,sBAAuBH,EAAG/S,SAASvG,KAAK,MACxC0Z,kBAAmBJ,EAAGJ,KAAKlZ,KAAK,MAChC2Z,oBAAqBL,EAAGH,OAAOnZ,KAAK,MACpC4Z,oBAAqBN,EAAGF,OAAOpZ,KAAK,OAErC5K,EAAI4I,SAAShJ,KAAKshB,eAAgBiD,EAAKvkB,KAAK4hB,YAI5C,IAAI7N,EAAU,CACbnI,KAAM,KACN6F,MAAO,MAEJF,IACHwC,EAAQxC,GAAavR,KAAKuhB,YAAcvhB,KAAKwhB,eAAkB,MAG5D+C,EAAM,CACTM,eAAgB9Q,EAAQnI,KACxBkZ,gBAAiB/Q,EAAQtC,OAE1BrR,EAAI4I,SAAShJ,KAAKshB,eAAgBiD,EAAKvkB,KAAK4hB,YAAY,KAIzD5hB,KAAKkjB,qBAAuB,SAAUxgB,GACjC1C,KAAKohB,eACgC,UAApChhB,EAAI6D,SAASjE,KAAKohB,cACrBphB,KAAKohB,aAAa1c,MAAQhC,EAE1B1C,KAAKohB,aAAatC,UAAYpc,IAMjC1C,KAAK+jB,qBAAuB,SAAUrhB,GACjC1C,KAAKqhB,eACgC,UAApCjhB,EAAI6D,SAASjE,KAAKqhB,cACrBrhB,KAAKqhB,aAAa3c,MAAQhC,EAE1B1C,KAAKqhB,aAAavC,UAAYpc,IAMjC1C,KAAKob,4BAA8B,WAClC,IAAIpb,KAAK+kB,yBAAT,CACA/kB,KAAK+kB,0BAA2B,EAEhC,IAAI5kB,EAAMH,KAAKmD,cACf,EAAG,CAGF,IAAI6hB,EAAY5kB,EAAIyI,aAAa1I,GAC7B6kB,EAAUzT,UAAiD,UAArCyT,EAAUzT,SAAS3P,gBAC5C5B,KAAKiS,OAAQ,GAGV9R,IAAQH,KAAKmD,gBAMX/C,EAAIuF,QAAQxF,EAAK,uBACrBA,EAAIO,iBAAiB,SAAUN,EAAImW,gBAAgB,GACnDnW,EAAIqD,QAAQtD,EAAK,qBAAqB,YAG/BA,EAAMA,EAAIsgB,aAAqC,SAAtBrgB,EAAI6D,SAAS9D,MAIjDH,KAAKoW,QAAU,WACVpW,KAAK6hB,aACR7hB,KAAKsY,QAKPtY,KAAKilB,aAAe,SAAUnhB,GAC7B9D,KAAKyU,QAAU3Q,EACf9D,KAAK+U,SAAW3U,EAAIyO,kBAAkB/K,GACtC9D,KAAKmY,wBAA0B/X,EAAI+O,wBAAwBnP,KAAK+U,WAuqB7D3U,EAAIO,IAAIukB,QAEX,IAAK,IAAI3C,KAAOniB,EAAIO,IAAIukB,QACvB,GAAI9kB,EAAIO,IAAIukB,QAAQ3f,eAAegd,GAClC,IACC3H,EAAU2H,EAAKniB,EAAIO,IAAIukB,QAAQ3C,IAC9B,MAAO9f,GACRN,QAAQC,KAAKK,GASjB,IAAI0iB,EAAa,GAEb7iB,EAAK8iB,SACmB,iBAAhB9iB,EAAK8iB,OACfD,EAAa7iB,EAAK8iB,OAAOjd,MAAM,OACrB2C,MAAMkE,QAAQ1M,EAAK8iB,QAC7BD,EAAa7iB,EAAK8iB,OAAOC,QAEzBljB,QAAQC,KAAK,+BAKwB,IAAnC+iB,EAAW3gB,QAAQ,YACtB2gB,EAAW/hB,KAAK,WAKjB,IAAK,IAAI9B,EAAI6jB,EAAW5jB,OAAS,EAAGD,GAAK,EAAGA,GAAK,EAAG,CACnD,IAAIgkB,EAAOH,EAAW7jB,GACtB,GAAKgkB,EAGL,GAAKllB,EAAIO,IAAI4kB,QAAQhgB,eAAe+f,IAIpC,IAAK,IAAI/C,KAAOniB,EAAIO,IAAI4kB,QAAQD,GAC/B,GAAIllB,EAAIO,IAAI4kB,QAAQD,GAAM/f,eAAegd,GACxC,IACC3H,EAAU2H,EAAKniB,EAAIO,IAAI4kB,QAAQD,GAAM/C,IACpC,MAAO9f,GACRN,QAAQC,KAAKK,SARfN,QAAQC,KAAK,qBAAsBkjB,GAgBrC,IAAIE,EAAgB,CAEnB,UAED,IAAK,IAAIjD,KAAOjgB,EACf,GAAIA,EAAKiD,eAAegd,KACa,IAAhCiD,EAAchhB,QAAQ+d,GACzB,IACC3H,EAAU2H,EAAKjgB,EAAKigB,IACnB,MAAO9f,GACRN,QAAQC,KAAKK,GAoBjB,QAPuBf,IAAnB1B,KAAKugB,UACRvgB,KAAKugB,UAAYxgB,EAAOH,SAAS4gB,KAGjCxgB,KAAKugB,UAAYngB,EAAIY,KAAKhB,KAAKugB,YAG3BvgB,KAAKugB,UACT,MAAM,IAAIzgB,MAAM,+DAOjB,GAFAE,KAAKmD,cAAgB/C,EAAIY,KAAKmC,IAEzBnD,KAAKmD,cAAe,CAExB,GAA6B,iBAAlBA,GAA8B,qBAAqBsiB,KAAKtiB,GAGlE,MAAM,IAAIrD,MAAM,OADCqD,EACsB,2CADtBA,EACkF,gCAGpG,MAAM,IAAIrD,MAAM,4DAGjB,GAAIE,KAAKmD,cAAc9C,SAAWL,KAAKmD,cAAc9C,mBAAmBD,EAAIO,IAC3E,MAAM,IAAIb,MAAM,kDAajB,GARAE,KAAKmD,cAAc9C,QAAUL,KAC7BI,EAAImI,SAASvI,KAAKmD,cAAe/C,EAAIO,IAAIoB,WAGzC3B,EAAIG,UAAU6C,KAAKpD,MAIfI,EAAIkE,SAAStE,KAAKmD,iBAEyB,WAA1CnD,KAAKmD,cAAcxB,KAAKC,gBAG3B5B,KAAKmD,cAAcxB,KAAO,UAGvBvB,EAAIqE,cAAczE,KAAKmD,gBAAgB,CAK1C/C,EAAI8D,eAAelE,KAAKmD,eAGxBnD,KAAKmD,cAAc+Z,YAAYnd,EAAOH,SAASqgB,eAAe,MAG9D,IAAI+E,EAAY5kB,EAAIyI,aAAa7I,KAAKmD,gBACnByL,WAAWoW,EAAU,eAAiB,GACtChlB,KAAKuhB,aACvBnhB,EAAI4I,SAAShJ,KAAKmD,cAAe,CAChCuiB,YAAa1lB,KAAKuhB,YAAc,MAC9BvhB,KAAK4hB,YAsCX,QAhC0BlgB,IAAtB1B,KAAKohB,aACJhhB,EAAIiE,YAAYrE,KAAKmD,iBAExBnD,KAAKohB,aAAephB,KAAKmD,eAKM,OAAtBnD,KAAKohB,eAIfphB,KAAKohB,aAAehhB,EAAIY,KAAKhB,KAAKohB,eAI/BphB,KAAKqhB,eACRrhB,KAAKqhB,aAAejhB,EAAIY,KAAKhB,KAAKqhB,oBAIP3f,IAAxB1B,KAAKshB,eACRthB,KAAKshB,eAAiBthB,KAAKmD,cAEO,OAAxBnD,KAAKshB,iBAIfthB,KAAKshB,eAAiBlhB,EAAIY,KAAKhB,KAAKshB,iBAIjCthB,KAAKohB,cAAgBhhB,EAAIiE,YAAYrE,KAAKohB,cAAe,CAI5D,IAAIuE,EAAyB,CAC5BxE,QAASnhB,KAAKohB,aAAawE,SAE5B5lB,KAAKohB,aAAawE,QAAU,KAE5B5lB,KAAKohB,aAAa1gB,iBAAiB,WA3RpC,SAAyB0G,GACC,UAArBhH,EAAIsH,SAASN,KACZuT,EAAKyG,cACRzG,EAAKgJ,kBAAkBhJ,EAAKyG,aAAa1c,OAE1CiW,EAAKvE,cAsRwD,GAC9DpW,KAAKohB,aAAa1gB,iBAAiB,UAxQpC,SAAwB0G,GACvB,IAAIhH,EAAIuF,QAAQyB,EAAI,YAApB,CAIA,IAAIye,EAASlL,EAAKyG,aAAa1c,MAE/BiW,EAAKgJ,kBAAkBhJ,EAAKyG,aAAa1c,OAEzCtE,EAAIoV,gBAAgBmF,EAAM,YAEtBA,EAAKyG,aAAa1c,QAAUmhB,GAE/BzlB,EAAIqH,kBAAkBkT,EAAKyG,aAAc,UAAU,GAAM,OA2PE,GAC5DphB,KAAKohB,aAAa1gB,iBAAiB,SAlOpC,SAAuB0G,GAClBhH,EAAIuF,QAAQyB,EAAI,cAIhBuT,EAAKyG,cACRzG,EAAKqI,WAAWrI,EAAKyG,aAAa1c,MAAOtE,EAAIwZ,MAAMC,YAGpDzZ,EAAIoV,gBAAgBmF,EAAM,eAyNgC,GAEtDgL,EAAuBxE,SAC1BnhB,KAAKohB,aAAa1gB,iBAAiB,QAASilB,EAAuBxE,SAAS,GAG7EnhB,KAAKohB,aAAalc,aAAa,eAAgB,OAC/ClF,KAAKohB,aAAalc,aAAa,cAAe,OAC9ClF,KAAKohB,aAAalc,aAAa,iBAAkB,OACjDlF,KAAKohB,aAAalc,aAAa,cAAc,GAI1ClF,KAAKqhB,cAAgBjhB,EAAIiE,YAAYrE,KAAKqhB,gBAC7CrhB,KAAKqhB,aAAa3gB,iBAAiB,WAjSpC,SAAyB0G,GACC,UAArBhH,EAAIsH,SAASN,KACZuT,EAAK0G,cACR1G,EAAKiJ,kBAAkBjJ,EAAK0G,aAAa3c,OAE1CiW,EAAKvE,cA4RwD,GAC9DpW,KAAKqhB,aAAa3gB,iBAAiB,UAtQpC,SAAwB0G,GACvB,IAAIhH,EAAIuF,QAAQyB,EAAI,YAApB,CAIA,IAAIye,EAASlL,EAAK0G,aAAa3c,MAE/BiW,EAAKiJ,kBAAkBjJ,EAAK0G,aAAa3c,OAEzCtE,EAAIoV,gBAAgBmF,EAAM,YAG1Bva,EAAIqH,kBAAkBkT,EAAKyG,aAAc,UAAU,GAAM,GAErDzG,EAAK0G,aAAa3c,QAAUmhB,GAE/BzlB,EAAIqH,kBAAkBkT,EAAK0G,aAAc,UAAU,GAAM,OAsPE,GAC5DrhB,KAAKqhB,aAAa3gB,iBAAiB,SAlOpC,SAAuB0G,GAClBhH,EAAIuF,QAAQyB,EAAI,cAIhBuT,EAAK0G,cACR1G,EAAKjD,SAAS,KAAM,KAAM,KAAM9I,WAAW+L,EAAK0G,aAAa3c,OAAQtE,EAAIwZ,MAAME,YAGhF1Z,EAAIoV,gBAAgBmF,EAAM,WAG1Bva,EAAIqH,kBAAkBkT,EAAKyG,aAAc,SAAS,GAAM,OAsNE,GAE1DphB,KAAKqhB,aAAanc,aAAa,eAAgB,OAC/ClF,KAAKqhB,aAAanc,aAAa,cAAe,OAC9ClF,KAAKqhB,aAAanc,aAAa,iBAAkB,OACjDlF,KAAKqhB,aAAanc,aAAa,cAAc,IAK9C,IAAI4gB,EAAY,cAEGpkB,IAAf1B,KAAK0E,MACRohB,EAAY9lB,KAAK0E,MACP1E,KAAKohB,mBAA4C1f,IAA5B1B,KAAKohB,aAAa1c,QACjDohB,EAAY9lB,KAAKohB,aAAa1c,OAK/B,IAAIqhB,OAAYrkB,EAYhB,QAVmBA,IAAf1B,KAAKihB,MACR8E,EAAa,GAAG/lB,KAAKihB,MACXjhB,KAAKqhB,mBAA4C3f,IAA5B1B,KAAKqhB,aAAa3c,QACjDqhB,EAAY/lB,KAAKqhB,aAAa3c,OAK/B1E,KAAK0jB,eAAiB,KAElB,CAAC,OAAQ,OAAOlf,QAAQxE,KAAKmO,OAAOvM,gBAAkB,EAAG,CAE5D,IAAIsN,EAAQ9O,EAAI4N,iBAAiB8X,GACjC9lB,KAAK0jB,eAAiBxU,EAAQA,EAAMf,OAAS,WAG7CnO,KAAK0jB,eAAiB1jB,KAAKmO,OAAOvM,cAKnC5B,KAAK2jB,kBAAkBmC,QAOLpkB,IAAdqkB,GACH/lB,KAAK4jB,kBAAkBmC,MAkBtBplB,IAAIoB,UAAY,UAIpB3B,EAAIO,IAAI2f,gBAAkB,iBAK1BlgB,EAAIO,IAAImC,WAAY,EAIpB1C,EAAIO,IAAI4kB,QAAU,GAGlBnlB,EAAIO,IAAI4kB,QAAiB,QAAI,GAE7BnlB,EAAIO,IAAI4kB,QAAe,MAAI,CAC1BpH,gBAAiB,sBACjBE,mBAAoB,sBACpBuB,YAAa,iBAEdxf,EAAIO,IAAI4kB,QAAc,KAAI,CACzBpH,gBAAiB,mBACjBE,mBAAoB,sBACpBuB,YAAa,uBAGdxf,EAAIO,IAAI4kB,QAAe,MAAI,CAAE9V,MAAM,IAAKC,OAAO,IAAKqE,QAAQ,GAAIL,WAAW,GAAIsB,YAAY,GAC3F5U,EAAIO,IAAI4kB,QAAgB,OAAI,CAAE9V,MAAM,IAAKC,OAAO,IAAKqE,QAAQ,GAAIL,WAAW,GAAIsB,YAAY,IAC5F5U,EAAIO,IAAI4kB,QAAe,MAAI,CAAE9V,MAAM,IAAKC,OAAO,IAAKqE,QAAQ,GAAIL,WAAW,GAAIsB,YAAY,IAE3F5U,EAAIO,IAAI4kB,QAAc,KAAI,CAAE/Q,YAAY,EAAGjB,mBAAmB,EAAG6B,mBAAmB,GACpFhV,EAAIO,IAAI4kB,QAAe,MAAI,CAAE/Q,YAAY,EAAGjB,mBAAmB,EAAG6B,mBAAmB,GAIrFhV,EAAIO,IAAIke,iBAAmB,EAG3Bze,EAAIO,IAAIyP,eAAiB,EACzBhQ,EAAIO,IAAI2P,iBAAmB,UAC3BlQ,EAAIO,IAAI6P,iBAAmB,UAG3BpQ,EAAIO,IAAIuP,iBAAmB,CAAC,wBAAyB,yBAIrD9P,EAAIO,IAAIC,KAAO,WACd,IAAIR,EAAIE,YAgBR,IAXAP,EAAOH,SAASc,iBAAiB,YAAaN,EAAIoW,qBAAqB,GACvEzW,EAAOH,SAASc,iBAAiB,QAASN,EAAI+V,iBAAiB,GAC/DpW,EAAOW,iBAAiB,SAAUN,EAAIiW,gBAAgB,GACtDtW,EAAOW,iBAAiB,SAAUN,EAAIkW,gBAAgB,GAGtDlW,EAAIO,IAAIqlB,UAER5lB,EAAIE,aAAc,EAGXF,EAAII,WAAWe,QACVnB,EAAII,WAAWylB,OAC1B5f,IAMFjG,EAAIO,IAAIqlB,QAAU,SAAUjlB,GAC3B,IAAIuhB,GAAU,EAEd,IACCliB,EAAIS,kBAAkB,iBAAkBE,GACvC,MAAO0B,GACR6f,GAAU,EACVngB,QAAQC,KAAKK,GAId,GAAIrC,EAAIO,IAAIU,YACX,IACCjB,EAAIS,kBAEF,SAAWT,EAAIO,IAAIU,YAAnB,YACYjB,EAAIO,IAAIU,YAErBN,GAEA,MAAO0B,IAGV,OAAO6f,GAMRliB,EAAIO,IAAIulB,MAAQ,SAAU7f,GACzB,MAAoB,mBAATA,GACVlE,QAAQC,KAAK,mCACN,IAGJhC,EAAIE,YACP+F,IAEAjG,EAAII,WAAW4C,KAAKiD,IAEd,IASRjG,EAAIO,IAAIkV,QAAU,SAAUD,GAC3B,IAAIuQ,EAAa,WAChB/lB,EAAIuV,cAAcC,IAGfxV,EAAIE,YACP6lB,IAEA/lB,EAAIO,IAAIulB,MAAMC,IAMhB/lB,EAAIO,IAAI2X,KAAO,WACVlY,EAAIwR,QAAUxR,EAAIwR,OAAOC,OAC5BzR,EAAIwR,OAAOC,MAAMyG,QAMnBlY,EAAIO,IAAIoe,WAAa,SAAU7P,GAK9B,OAJKA,IACJA,EAAQ,iBAEK9O,EAAIyP,sBAAsBX,GACzBI,OAAOgQ,aAKvBlf,EAAIO,IAAIiK,WAAa,SAAUsE,GAC9B,IAAI8U,EAAc,GAGlBA,EAAY5gB,KAAKhD,EAAIkR,wBAAwBpC,IAG7C,IAAImV,EAAUjkB,EAAIyP,wBAOlB,OANAmU,EAAY5gB,KAAK,CAChB,QAAWihB,EAAQ/U,OAAOgQ,YAAc,KACxC,WACA,UACCtU,KAAK,MAEAgZ,EAAYhZ,KAAK,OAYzB5K,EAAIO,IAAIukB,QAAU,GAUlB9kB,EAAIO,IAAIU,YAAc,UAMtBjB,EAAIO,IAAIylB,mBAAqB,WAE5B,OADAjkB,QAAQuT,MAAM,qGAAuGtV,EAAIiC,UAClH,GAIRjC,EAAIK,WAGGL,EAAIO,KAaX,YAP8B,IAAnBZ,EAAOM,UACjBN,EAAOM,QAAUN,EAAOsmB,QAAUhmB,GAM5BA,OAUOimB,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,GAAGF,EAAyBE,GAC3B,OAAOF,EAAyBE,GAAU7mB,QAG3C,IAAIH,EAAS8mB,EAAyBE,GAAY,CAGjD7mB,QAAS,IAOV,OAHAL,EAAoBknB,GAAUvb,KAAKzL,EAAOG,QAASH,EAAQA,EAAOG,QAAS4mB,GAGpE/mB,EAAOG,QAOd4mB,EAAoBhiB,EAAK/E,IACxB,IAAI0b,EAAS1b,GAAUA,EAAOinB,WAC7B,IAAOjnB,EAAiB,QACxB,IAAM,EAEP,OADA+mB,EAAoBG,EAAExL,EAAQ,CAAE/Q,EAAG+Q,IAC5BA,GAORqL,EAAoBG,EAAI,CAAC/mB,EAASgnB,KACjC,IAAI,IAAIC,KAAOD,EACXJ,EAAoBM,EAAEF,EAAYC,KAASL,EAAoBM,EAAElnB,EAASinB,IAC5E9hB,OAAOC,eAAepF,EAASinB,EAAK,CAAEE,YAAY,EAAM9hB,IAAK2hB,EAAWC,MAQ3EL,EAAoBM,EAAI,CAACzhB,EAAKI,IAAUV,OAAOiG,UAAUxF,eAAe0F,KAAK7F,EAAKI,GAM7F,MACA,aAoCA,IAAIuhB,EAAY,GAChB,MAMMC,EAAS,CAAC,GACf,GACA,IACA,IACA,IACA,IACA,IACA,IACA,KAIKC,EAAa,CAAC,GACnB,GACA,IACA,IACA,KACA,QACA,QACA,OACA,OACA,MACA,MACA,MACA,QACA,SACA,SACA,cACA,UACA,SACA,YACA,UACA,WACA,SACA,WACA,YACA,YACA,kBAIKC,EAAwB,CAAC,GAC9B,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,KACA,OAMD,IAAIC,EAEAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAOAC,EA1BAC,EAAqB,GAErBC,EAAwB,GACxBC,EAAuB,GAOvBC,EAAkB,GAqBtB,MAAMC,EAAe,SACfC,EAAe,SAMfC,EAAY,OACZC,EAAa,QACbC,EAAc,SACdC,EAAc,SACdC,EAAW,MACXC,EAAc,SACdC,EAAY,OACZC,EAAY,OACZC,EAAa,QACbC,EAAS,CAACH,EAAWN,EAAWC,EAAYC,EAAaC,EAAaC,EAAUC,EAAaE,EAAWC,GASxGE,EAAc,CACnB,CAAC,6BAA8B,oCAAqC,SACpE,CAAC,2CAA4C,6EAA8E,SAC3H,CAAC,6BAA8B,qPAAsP,SACrR,CAAC,8BAA+B,kEAAmE,SACnG,CAAC,kCAAmC,2PAA4P,SAChS,CAAC,0BAA2B,gLAAiL,SAC7M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CAAC,+CAAgD,+CACjD,2EACA,GAID9oB,MAAO,IAAI8oB,GACV,OACA,sBACA,CAAC,YAAa,WAAY,8BAC1B,8LACA,GAED/F,aAAc,IAAI+F,GACjB,OACA,sBACA,CAAC,mCAAoC,mCACrC,kLACA,GAED9F,eAAgB,IAAI8F,GACnB,OACA,iBACA,CAAC,mBAAoB,mBACrB,mDACA,GACA,WAAchB,GAAoC7rB,EAAU+mB,mBAE7DC,QAAS,IAAI6F,GACZ,OACA,iBACA,CAAC,YAAa,YACd,iCACA,GAED5F,QAAS,IAAI4F,GACZ,OACA,iBACA,CAAC,YAAa,YACd,iCACA,GAED3F,SAAU,IAAI+F,GACb,MACA,iBACA,GACA,UAED9F,WAAY,IAAI0F,GACf,MACA,iBACA,aACA,6DAEDzF,oBAAqB,IAAIyF,GACxB,OACA,iBACA,CAAC,mBAAoB,mBACrB,8DACA,GACA,WAAchB,GAAoC7rB,EAAUonB,wBAE7DC,aAAc,IAAIwF,GACjB,OACA,iBACA,CAAC,YAAa,YACd,kCACA,GAEDvF,aAAc,IAAIuF,GACjB,OACA,iBACA,CAAC,YAAa,YACd,kCACA,GAEDtF,cAAe,IAAI0F,GAClB,MACA,iBACA,GACA,UAGDzF,gBAAiB,IAAIqF,GACpB,MACA,iBACA,aACA,sEAEDpF,gBAAiB,IAAIoF,GACpB,OACA,kBACA,CAAC,mBAAoB,mBACrB,yCACA,GACA,WAAchB,GAAoC7rB,EAAUynB,oBAE7DC,SAAU,IAAImF,GACb,OACA,kBACA,CAAC,YAAa,YACd,gCACA,GAEDlF,SAAU,IAAIkF,GACb,OACA,kBACA,CAAC,YAAa,YACd,gCACA,GAEDjF,UAAW,IAAIqF,GACd,MACA,kBACA,GACA,UAEDpF,YAAa,IAAIgF,GAChB,MACA,kBACA,aACA,8DAED/E,UAAW,IAAI+E,GACd,OACA,mBACA,CAAC,wBAAyB,YAC1B,+BACA,GAED9E,UAAW,IAAI8E,GACd,OACA,mBACA,CAAC,YAAa,YACd,+BACA,GAED7E,WAAY,IAAIiF,GACf,MACA,mBACA,GACA,UAEDhF,aAAc,IAAI4E,GACjB,MACA,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","file":"./CookieMonster.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://cookiemonster-mod/CookieMonster.js"],"names":["__webpack_modules__","877","module","global","factory","exports","document","win","Error","window","this","BoxShadow","funcName","elm","jsc","jscolor","initialized","instances","readyQueue","register","addEventListener","pub","init","installBySelector","selector","rootNode","node","elms","querySelectorAll","matchClass","RegExp","lookupClass","i","length","dataOpts","m","undefined","type","toLowerCase","isColorAttrSupported","getDataAttr","className","match","targetElm","optsStr","console","warn","docsRef","opts","trim","parseOptionsStr","e","str","JSON","parse","eParse","looseJSON","Function","eEval","getInstances","inst","targetElement","push","createEl","tagName","el","createElement","setData","nodeOrSelector","sel","querySelector","isNode","val","Node","nodeType","nodeName","removeChildren","firstChild","removeChild","isTextInput","isButton","n","indexOf","isButtonEmpty","value","textContent","isPassiveEventSupported","supported","Object","defineProperty","get","removeEventListener","setAttribute","dataProp","obj","arguments","data","hasOwnProperty","prop","map","removeData","getData","setDefault","name","attrName","getAttribute","setDataAttr","_attachedGroupEvents","attachGroupEvent","groupName","evnt","func","detachGroupEvents","evt","preventDefault","returnValue","captureTarget","target","setCapture","_capturedTarget","releaseTarget","releaseCapture","triggerEvent","eventName","bubbles","cancelable","ev","Event","createEvent","initEvent","dispatchEvent","triggerInputEvent","eventKey","keys","9","13","27","code","keyCode","strList","replace","split","hasClass","classList","contains","addClass","classNames","add","removeClass","repl","remove","getCompStyle","getComputedStyle","currentStyle","setStyle","styles","important","reversible","priority","origStyle","setVal","style","setProperty","hexColor","r","g","b","Math","round","toString","substr","toUpperCase","hexaColor","a","rgbColor","rgbaColor","linearGradient","stdName","prefixes","helper","tryFunc","tryVal","background","getFuncName","Array","prototype","join","call","setBorderRadius","border-radius","setBoxShadow","box-shadow","getElementPos","relativeToViewport","x","y","rect","getBoundingClientRect","left","top","viewPos","getViewPos","getElementSize","offsetWidth","offsetHeight","getAbsPointerPos","changedTouches","clientX","clientY","getRelPointerPos","targetRect","srcElement","doc","documentElement","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","getViewSize","innerWidth","clientWidth","innerHeight","clientHeight","RGB_HSV","min","v","max","h","HSV_RGB","s","u","floor","parseColorString","ret","rgba","format","parseInt","charAt","mR","mG","mB","mA","par","re","parseFloat","parsePaletteValue","mixed","vals","isArray","colors","color","containsTranparentColor","isAlphaFormat","scaleCanvasForHighDPR","canvas","dpr","devicePixelRatio","width","height","getContext","scale","genColorPreviewCanvas","separatorPos","specWidth","scaleForHighDPR","sepW","previewSeparator","sqSize","chessboardSize","sqColor1","chessboardColor1","sqColor2","chessboardColor2","cWidth","cHeight","ctx","fillStyle","fillRect","start","clearRect","lineWidth","beginPath","strokeStyle","moveTo","lineTo","stroke","genColorPreviewGradient","position","params","right","apply","redrawPosition","picker","owner","tp","vp","thisObj","fixed","c","ts","vs","pd","getPickerDims","ps","borderW","borderH","l","smartPosition","pp","positionValue","contractShadow","_drawPosition","vShadow","shadowBlur","wrap","boxS","shadow","shadowColor","w","controlBorderWidth","sliderSpace","getControlPadding","sliderSize","getSliderChannel","hasAlphaChannel","pal","getPaletteDims","padding","closeButton","buttonHeight","pW","pH","contentW","contentH","paddedW","paddedH","borderWidth","palette","cols","rows","cellW","cellH","sampleCount","_palette","paletteCols","ceil","paletteSpacing","paletteHeight","pointerBorderWidth","pointerThickness","getPadYChannel","mode","triggerCallback","callback","error","triggerGlobal","eventNames","trigger","_pointerMoveEvent","mouse","touch","_pointerEndEvent","_pointerOrigin","onDocumentKeyUp","tryHide","onWindowResize","onWindowScroll","onParentScroll","onDocumentMouseDown","showOnClick","disabled","show","onControlPointerStart","onPickerTouchStart","controlName","pointerType","registerDragEvents","offset","onDocumentPointerMove","onDocumentPointerEnd","parent","frameElement","ofs","abs","rel","channels","fromHSVA","setPad","setSld","setASld","onPaletteSampleClick","currentTarget","_setFormat","getFormat","paletteSetsAlpha","_paletteHasTransparency","fromRGBA","hideOnPaletteClick","hide","ofsX","ofsY","pointerAbs","xVal","yVal","fmt","createPadCanvas","draw","hGrad","createLinearGradient","addColorStop","vGrad","createSliderGradient","color1","color2","grad","createASliderGradient","hShadow","blur","spread","inset","flags","leaveValue","leaveAlpha","leavePreview","enumOpts","previewPosition","alphaChannel","deprecatedOpts","styleElement","onFineChange","overwriteImportant","closable","insetWidth","insetColor","refine","THIS","setOption","option","oldOpt","newOpt","setter","getOption","getter","drawPicker","_processParentElementsInDOM","box","boxB","pad","padB","padM","padCanvas","cross","crossBY","crossBX","crossLY","crossLX","sld","sldB","sldM","sldGrad","sldPtrS","sldPtrIB","sldPtrMB","sldPtrOB","asld","asldB","asldM","asldGrad","asldPtrS","asldPtrIB","asldPtrMB","asldPtrOB","btn","btnT","appendChild","passive","insetColors","outsetColor","p","displaySlider","displayAlphaSlider","pickerDims","crossOuterSize","crossSize","controlPadding","borderRadius","PI","clear","zIndex","border","borderColor","backgroundColor","opacity","controlBorderColor","cursor","instance","control","pointerBorderColor","pointerColor","overflow","display","sliderInnerSpace","innerHTML","chessboard","si","sampleColor","sampleCssColor","sc","sw","backgroundImage","toDataURL","backgroundRepeat","backgroundPosition","bottom","maxWidth","whiteSpace","buttonColor","font","textAlign","onmousedown","lineHeight","createTextNode","closeText","redrawPad","redrawSld","redrawASld","activeClassName","container","body","parentNode","yChannel","rgb1","rgb2","rgb","toHEXString","sldChannel","isPickerOwner","alpha","onChange","onInput","valueElement","alphaElement","previewElement","previewSize","previewPadding","required","hash","uppercase","forceStyle","hideOnLeave","minS","maxS","minV","maxV","minA","maxA","redraw","exposeColor","success","opt","channel","res","evs","callbackProp","isNaN","hsv","fromHSV","fromRGB","fromString","setPreviewElementBg","setValueElementValue","toHEXAString","toRGBString","toRGBAString","toGrayscale","toCanvas","toBackground","isLight","_currentFormat","processValueInput","processAlphaInput","colorStr","alphaVal","setAlphaElementValue","backgrounds","image","size","repeat","origin","preview","bg","sty","background-image","background-position","background-size","background-repeat","background-origin","padding-left","padding-right","_parentElementsProcessed","compStyle","set__palette","options","presetsArr","preset","slice","pres","presets","nonProperties","test","min-width","valueElementOrigEvents","oninput","oldVal","initValue","initAlpha","install","shift","ready","triggerNow","installByClassName","JSColor","__webpack_module_cache__","__webpack_require__","moduleId","__esModule","d","definition","key","o","enumerable","CMOptions","metric","shortScale","shortScaleAbbreviated","LastModCount","TooltipLumpBackup","BackupGrimoireLaunch","BackupGrimoireLaunchMod","BackupGrimoireDraw","HasReplaceNativeGrimoireLaunch","HasReplaceNativeGrimoireDraw","LoadMinigames","LastSeasonPopupState","LastTickerFortuneState","LastGardenNextStep","LastGoldenCookieState","LastSpawnedGoldenCookieState","LastMagicBarFull","CurrSpawnedGoldenCookieState","LastWrinklerCount","DispCSS","TooltipBuildBackup","TooltipGrimoireBackup","TooltipUpgradeBackup","BackupFunctions","ColorTextPre","ColorBackPre","ColorBlue","ColorGreen","ColorYellow","ColorOrange","ColorRed","ColorPurple","ColorGray","ColorPink","ColorBrown","Colors","TooltipText","CMLastAscendState","CMSayTime","TooltipWrinklerArea","TooltipWrinkler","TooltipWrinklerBeingShown","LastTargetBotBar","LastTargetBuildings","LastTargetTooltipBuilding","CookieTimes","ClickTimes","BuffColors","Frenzy","Dragon Harvest","Elder frenzy","Clot","Click frenzy","Dragonflight","TooltipPrice","TooltipBonusIncome","TooltipType","TooltipName","TooltipBonusMouse","LastAscendState","LastNumberOfTimers","GCTimers","Title","BeautifyFormatting_Beautify","num","floats","forced","decimals","ScaleDecimals","Infinity","Scale","Beautify","Number","isFinite","answer","ScaleCutoff","ScaleSeparator","toLocaleString","toExponential","exponential","AmountOfTenPowerThree","toFixed","log","FormatTime","time","longFormat","TimeFormat","GetTimeColor","text","CookiesDiff","WrinkDiff","WrinkFattestDiff","ChoEggDiff","ClicksDiff","HeavenlyChipsDiff","CacheLastCPSCheck","CacheLastCookies","CacheLastWrinkCookies","CacheLastWrinkFattestCookies","CacheLastClicks","CacheAverageGainBank","CacheAverageGainWrink","CacheAverageGainWrinkFattest","CacheAverageGainChoEgg","CacheAverageCPS","CacheLastHeavenlyCheck","CacheLastHeavenlyChips","CacheDoRemakeBuildPrices","CacheHadBuildAura","SimBuildingsOwned","SimUpgradesOwned","SimPledges","SimAchievementsOwned","SimHeavenlyPower","SimPrestige","SimDragonAura","SimDragonAura2","SimDoSims","SimEffs","SimCookiesPs","SimCookiesPsRaw","CacheDragonAura","CacheDragonAura2","CacheLastDragonLevel","CacheCostDragonUpgrade","CacheLucky","CacheLuckyReward","CacheLuckyWrathReward","CacheLuckyFrenzy","CacheLuckyRewardFrenzy","CacheLuckyWrathRewardFrenzy","CacheConjure","CacheConjureReward","CacheEdifice","CacheEdificeBuilding","CacheNoGoldSwitchCookiesPS","CacheDragonsFortuneMultAdjustment","CacheGoldenCookiesMult","CacheWrathCookiesMult","CacheHCPerSecond","CacheCentEgg","CacheSeaSpec","CacheLastChoEgg","CacheObjects1","CacheObjects10","CacheObjects100","CacheWrinklersTotal","CacheWrinklersNormal","CacheWrinklersFattest","CacheCurrWrinklerCPSMult","CacheCurrWrinklerCount","CacheUpgrades","CacheAverageClicks","CacheMissingUpgrades","CacheMissingUpgradesPrestige","CacheMissingUpgradesCookies","CacheChainRequired","CacheChainRequiredNext","CacheChainMaxReward","CacheChainWrathRequired","CacheChainWrathRequiredNext","CacheChainWrathMaxReward","CacheChainFrenzyRequired","CacheChainFrenzyRequiredNext","CacheChainFrenzyMaxReward","CacheChainFrenzyWrathRequired","CacheChainFrenzyWrathRequiredNext","CacheChainFrenzyWrathMaxReward","CacheRealCookiesEarned","CacheAvgCPSWithChoEgg","CacheSpawnedGoldenShimmer","CacheSeasonPopShimmer","CacheTimeTillNextPrestige","CacheMinPP","CacheMidPP","CacheMaxPP","CacheArrayOfPPs","CacheGoldenShimmersByID","CacheSellForChoEgg","SimObjects","SimUpgrades","SimAchievements","SimDateCentury","Game","startDate","SimDateAges","SimAuraMult","what","dragonAuras","SimGetSellMultiplier","giveBack","SimEff","def","SimHas","it","ascensionMode","pool","tier","bought","SimHasGod","hasGod","Temple","minigame","Objects","god","gods","slot","id","SimModifyBuildingPrice","building","price","hasBuff","fortune","minigameLoaded","godLvl","BuildingSell","build","basePrice","free","amount","noSim","moni","buyBulk","priceIncrease","modifyBuildingPrice","getSellMultiplier","UpdateBuildings","buyMode","BuildColor","removeProperty","SortBuildings","arr","k","sort","gridRow","UpdateUpgrades","UpBarColor","blue","green","yellow","orange","red","purple","gray","UpgradesInStore","me","addedColor","j","childNodes","div","SortUpgrades","nameChecker","arr2","upgrade","findIndex","order","GetCPS","CPSMode","CalcWrink","cookiesPs","cpsSucked","wrinklers","GetWrinkConfigBank","CreateTimer","bars","timerBar","margin","fontSize","marginRight","verticalAlign","colorBar","borderTopRightRadius","borderBottomRightRadius","timer","marginLeft","CreateBotBarBuildingColumn","buildingName","bonus","header","substring","UpdateBotBar","BotBar","count","timeColor","bulkPrice","cookies","UpdateBackground","Background","LeftBackground","UpdateBotTimerBarPosition","TimerBar","TimerBarPos","ToggleTimerBar","GetCPSBuffMult","mult","buffs","multCpS","ToggleToolWarnPos","ToolWarnPos","CalculateGrimoireRefillTime","currentMagic","maxMagic","targetMagic","fps","TooltipCreateHeader","fontWeight","TooltipCreateCalculationSection","tooltip","income","marginBottom","lastChild","click","production","CacheDragonAuras","dragonAura","dragonAura2","InitAchievement","achievementName","Achievements","you","SimGetTieredCpsMult","tieredUpgrades","Tiers","special","synergies","syn","buildingTie1","buildingTie2","grandma","Grandma","misfortune","vanilla","elderWrath","InitialBuildingData","cps","magicCpS","ComputeCps","GrandmaSynergies","UpgradesByPool","kitten","Portal","baseCps","baseCPS","InitUpgrade","upgradeName","Upgrades","power","level","pow","CopyData","UpgradesOwned","pledges","AchievementsOwned","heavenlyPower","prestige","totalCookies","won","BuildingGetPrice","increase","CreateSimpleTooltip","placeholder","minWidth","Tooltip","desc","UpdateTooltips","tooltipBox","paddingBottom","TooltipCreateTooltipBox","TooltipBuildUpgrade","productionAchievs","HasAchiev","achiev","nextProductionAchiev","Building","getPrice","bonusMouse","previousSibling","chocolate","Upgrade","TooltipLump","lumpType","lumpColor","lumpCurrentType","SugarLump","spellCost","getSpellCost","spellsById","TooltipGrim","magicM","magic","recover","recoverColor","conjure","reward","seperator","loss","Grimoire","Farm","TooltipPlots","plot","mature","plantsById","matureBase","plantName","GardenPlots","totalGain","mortal","tile","immortal","HarvestAll","getElementById","TooltipWarn","create","boxId","labelTextFront","labelTextBack","deficitId","transition","labelDiv","labelSpan","deficitDiv","deficitSpan","ToolWarnUser","TooltipCreateWarningSection","bonusIncomeUsed","ToolWarnBon","limitLucky","bonusNoFren","ToolWarnLucky","ToolWarnLuckyFrenzy","limitLuckyFrenzy","ToolWarnConjure","limitConjure","ToolWarnConjureFrenzy","limitConjureFrenzy","ToolWarnEdifice","children","Warnings","CreateTooltip","TooltipAmor","buildPrice","amortizeAmount","storedTotalCps","globalCpsMult","crateTooltip","lumpTooltip","spellTooltip","ObjectsById","tileTooltip","toolTooltip","area","Draw","prefs","autosave","drawT","onMenu","Stats","innerText","sayTime","T","maxWidthTwoBar","maxWidthOneBar","numberOfTimers","shimmerTypes","golden","spawned","Has","minTime","maxTime","TimerBarOverlay","season","reindeer","BuffTimerBars","classColor","UpdateTimerBar","TooltipWrink","showingTooltip","phase","selected","wrinkler","escape","CheckWrinklerTooltip","sucked","toSuck","UpdateWrinklerTooltip","UpStats","UpdateMenu","CMAvgQueue","[object Object]","maxLength","queue","newValue","timePeriod","CacheAvgCPS","currDate","Date","now","choEggTotal","cookiesEarned","timeDiff","bankDiffAvg","wrinkDiffAvg","wrinkFattestDiffAvg","choEggDiffAvg","clicksDiffAvg","cookieClicks","addLatest","cpsLength","AvgCPSHist","calcAverage","choEgg","HasUnlocked","AvgClicksHist","ColourOfPP","PPSecondsLowerLimit","PPOnlyConsiderBuyable","CacheBuildingsBulkPP","CachePP","PPExcludeTop","ColorPPBulkMode","CacheBuildingsPP","CacheUpgradePP","SimWin","CalculateGains","effs","myEffs","ii","heavenlyMult","SimGetHeavenlyMultiplier","heralds","cookieUpgrades","buildMult","sin","santaLevel","milkProgress","milkMult","catMult","storedCps","eggMult","day","lumps","rawCookiesPs","CpsAchievements","threshold","auraMult","bakeryName","goldenSwitchMult","upgrades","goldenCookieUpgrades","veilMult","runModHookOnValue","Fortunes","HalloCookies","ChristCookies","ValCookies","PlantDrops","SimHasAchiev","CheckOtherAchiev","grandmas","buildingsOwned","mathematician","base10","minAmount","Cursor","hasAllHalloCook","hasAllChristCook","list","fortunes","BuyBuildingsBonusIncome","tieredAchievs","achievUnlock","lastAchievementsOwned","BuyUpgradesBonusIncome","unlocked","CountsAsUpgradeOwned","diffMouseCPS","multClick","out","MouseCps","computedMouseCps","CacheBuildingIncome","result","CacheBuildingsPrices","CacheIncome","bonusIncome","CacheUpgradeIncome","MaxChainCookieReward","digit","maxPayout","totalFromChain","nextMoni","nextRequired","chain","LN10","CacheChain","cpsBuffMult","CacheHeavenlyChipsPS","chipsOwned","HowMuchPrestige","cookiesReset","ascendNowToGet","heavenlyChipsDiffAvg","crateMissing","classes","noFrame","crates","icon","iconFunction","getDynamicTooltip","CacheAllMissingUpgrades","CacheSeasonSpec","CacheStatsCookies","CacheGoldenAndWrathCookiesMults","goldenMult","wrathMult","eff","CacheWrinklers","InitCache","SettingsDefault","BulkBuildColor","UpgradeBarFixedPos","GeneralSound","GCNotification","GCFlash","GCSound","GCVolume","GCSoundURL","FortuneNotification","FortuneFlash","FortuneSound","FortuneVolume","FortuneSoundURL","SeaNotification","SeaFlash","SeaSound","SeaVolume","SeaSoundURL","GardFlash","GardSound","GardVolume","GardSoundURL","MagicNotification","MagicFlash","MagicSound","MagicVolume","MagicSoundURL","WrinklerNotification","WrinklerFlash","WrinklerSound","WrinklerVolume","WrinklerSoundURL","WrinklerMaxNotification","WrinklerMaxFlash","WrinklerMaxSound","WrinklerMaxVolume","WrinklerMaxSoundURL","DragonAuraInfo","TooltipAscendButton","MissingUpgrades","DetailedTime","GrimoireBar","HeavenlyChipsTarget","ShowMissedGC","Blue","Green","Yellow","Orange","Red","Purple","Gray","Pink","Brown","GCTimer","Favicon","WrinklerButtons","BulkBuyBlock","Header","BarsColors","Calculation","Notification","NotificationGeneral","NotificationGC","NotificationFC","NotificationSea","NotificationGard","NotificationMagi","NotificationWrink","NotificationWrinkMax","Statistics","Notation","Miscellaneous","Lucky","Chain","Spells","Garden","Prestige","Wrink","Sea","Misc","InfoTab","Config_CheckNotificationPermissions","ToggleOnOff","checkNotificationPromise","requestPermission","then","ToggleBotBar","RefreshScale","BeautifyAll","RefreshStore","RebuildUpgrades","UpdateColors","UpdateFavicon","wrath","href","Setting","group","SettingStandard","label","toggle","super","SettingVolume","SettingInputNumber","SettingsData","insertBefore","ToggleGCTimer","save","stringify","settings","version","CacheDragonCost","dragonLevel","dragonLevels","buy","includes","replaceAll","cost","InitData","isInitializing","Flash","config","setTimeout","PlaySound","url","sndConfig","volConfig","sound","realAudio","volume","play","CreateGCTimer","cookie","fontFamily","onclick","pop","onmouseover","filter","webkitFilter","onmouseout","Notification_Notification","notifyConfig","title","message","visibilityState","badge","CMLoop","OnAscend","AscendTimer","mods","sellTotal","Bank","marketGoods","goods","goodsVal","marketGood","stock","cookiesPsRawHighest","buildingsToSacrifice","highestBuilding","SellBuildingsForChoEgg","CacheSellAllForChoEgg","hasBuildAura","godMult","CacheCurrWrinklerCPS","cookiesToNext","HowManyCookiesReset","LoopCache","shimmers","spawnLead","FindShimmer","transform","life","CheckGoldenCookie","TickerEffect","CM","Options","CheckSeasonPopup","nextStep","CheckMagicMeter","CurrentWrinklers","getWrinklersMax","CheckWrinklerCount","SaveConfig","saveString","b64_to_utf8","unescape","localStorage","getItem","CookieMonsterSave","newSaveString","setItem","utf8_to_b64","LoadConfig","CMConfig","mod","PopAllNormalWrinklers","hp","ReplaceTooltipGrimoire","dynamic","wobble","ReplaceNativeGrimoireDraw","magicBarTextL","ReplaceNativeGrimoire","launch","ReplaceNativeGrimoireLaunch","jscolor_default","ToggleSetting_ConfigPrefix","ToggleConfigVolume","ToggleHeader","StatsHeader","span","StatsListing","listingName","StatsMissDisp","theMissDisp","frag","createDocumentFragment","missing","AddMenuStats","stats","goldCookTooltip","section","luckyColor","luckyTime","luckyReqFrag","luckyReqSpan","luckyReqSmall","luckyColorFrenzy","luckyTimeFrenzy","luckyReqFrenFrag","luckyReqFrenSpan","luckyReqFrenSmall","luckySplit","luckyRewardMaxSpan","luckyRewardFrenzyMaxSpan","luckyCurBase","luckyCurSpan","LuckySection","chainColor","chainTime","chainReqFrag","chainReqSpan","chainReqSmall","chainWrathColor","chainWrathTime","chainWrathReqFrag","chainWrathReqSpan","chainWrathReqSmall","chainColorFrenzy","chainTimeFrenzy","chainReqFrenFrag","chainReqFrenSpan","chainReqFrenSmall","chainWrathColorFrenzy","chainWrathTimeFrenzy","chainWrathReqFrenFrag","chainWrathReqFrenSpan","chainWrathReqFrenSmall","chainCurMax","chainCur","chainCurWrath","ChainSection","conjureColor","conjureTime","conjureReqFrag","conjureReqSpan","conjureReqSmall","conjureFrenzyColor","conjureFrenzyCur","conjureFrenzyTime","conjureFrenzyReqFrag","conjureFrenzyReqSpan","conjureFrenzyReqSmall","SpellsSection","bakeberryColor","bakeberryFrag","chocorootColor","chocorootFrag","queenbeetColor","queenbeetFrag","duketaterColor","duketaterFrag","GardenSection","possiblePresMax","neededCook","cookiesNextFrag","cookiesNextSmall","heavenlyChips","HCTarget","CookiesTillTarget","resetBonus","newHeavenlyChips","curCPS","ResetCPS","ResetBonus","resetFrag","resetSmall","currentPrestige","willHave","willGet","delta7","next7Reset","next7Total","frag7","delta777","next777Reset","next777Total","frag777","delta777777","next777777Reset","next777777Total","frag777777","PrestigeSection","popAllFrag","popAllA","popFattestFrag","popFattestA","specDisp","missingHalloweenCookies","missingChristmasCookies","missingValentineCookies","missingNormalEggs","eggDrops","missingRareEggs","rareEggDrops","missingPlantDrops","centEgg","missedGoldenClicks","menuSection","prestigeUpgradesMissing","titlefrag","PrestigeUpgrades","normalUpgradesMissing","tech","nextSibling","cookieUpgradesMissing","AddMissingUpgrades","ConfigGroups","ConfigGroupsNotification","CreatePrefHeader","CreatePrefOption","ToggleConfig","float","percent","slider","step","onchange","input","readOnly","inputPrompt","Prompt","outerHTML","ClosePrompt","innerDiv","FixMouseY","timerBarHeight","mouseY","ReplaceNative","drawMod","from","update","updateMod","warnOffset","tta","tt","UpdateTooltipLocation","UpdateWrinklers","UpdateSpecial","ClickCookie","mouseDown","setOnCrate","ReplaceTooltipUpgrade","ClickProduct","DescribeDragonAura","aura","bonusCPS","priceOfChange","CalculateChangeAura","timeToRecover","bonusCPSPercentage","minHeight","div2","AddAuraInfo","ToggleSpecialMenu","on","shouldHide","AddDragonLevelUpTooltip","groupObject","subGroup","subGroupObject","resDef","resDefBut","AddMenuPref","info","description","notes","menu","AddMenuInfo","AddMenu","detail","Logic","titleGC","titleFC","titleSP","addFC","addSP","lastIndexOf","spawn","UpdateTitle","ReplaceAscendTooltip","InitializeCookieMonster","head","borderTop","textShadow","table","tbody","firstCol","td","CreateBotBar","CMTimerBarGC","CMTimerBarRen","TimerBarBuffTimers","CreateTimerBar","UpgradeBar","legend","legendLine","CreateUpgradeBarLegend","upgradeNumber","CreateUpgradeBar","WhiteScreen","CreateWhiteScreen","getElementsByTagName","CreateFavicon","append","CreateWrinklerButtons","ReplaceTooltipBuild","canLumps","forEach","child","coords","popups","Popup","Notify","Win","CookieMonster_CM","proceed","confirm","registerHook","load","registerMod"],"mappings":"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IAAK,IAAK,KAGhDC,EAAa,CACjB,GACA,GACA,IACA,IACA,KACA,QACA,QACA,OACA,OACA,MACA,MACA,MACA,QACA,SACA,SACA,cACA,UACA,SACA,YACA,UACA,WACA,SACA,WACA,YACA,YACA,kBAIIC,EAAwB,CAC5B,GACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,KACA,OAMF,IAAIC,EAEAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAOAC,EA1BAC,EAAqB,GAErBC,EAAwB,GACxBC,EAAuB,GAOvBC,EAAkB,GAqBtB,MAAMC,EAAe,SACfC,EAAe,SAMfC,EAAY,OACZC,EAAa,QACbC,EAAc,SACdC,EAAc,SACdC,EAAW,MACXC,EAAc,SACdC,EAAY,OACZC,EAAY,OACZC,EAAa,QACbC,EAAS,CACbH,EACAN,EACAC,EACAC,EACAC,EACAC,EACAC,EACAE,EACAC,GAUIE,EAAc,CAClB,CAAC,6BAA8B,oCAAqC,SACpE,CACE,2CACA,6EACA,SAEF,CACE,6BACA,qPACA,SAEF,CACE,8BACA,kEACA,SAEF,CACE,kCACA,2PACA,SAEF,CACE,0BACA,gLACA,SAEF,CACE,2BACA,uOA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","file":"./CookieMonster.js","sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ec2189b..6834be4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cookiemonster-mod", - "version": "2.031.5", + "version": "2.031.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "cookiemonster-mod", - "version": "2.031.5", + "version": "2.031.6", "license": "MIT", "dependencies": { "@eastdesire/jscolor": "^2.4.5" @@ -14,8 +14,11 @@ "devDependencies": { "eslint": "^7.19.0", "eslint-config-airbnb-base": "^14.2.1", + "eslint-config-prettier": "^8.1.0", "eslint-plugin-import": "^2.22.1", + "eslint-plugin-prettier": "^3.3.1", "npm-run-all": "^4.1.5", + "prettier": "2.2.1", "webpack": "^5.24.4", "webpack-cli": "^4.5.0" } @@ -857,6 +860,18 @@ "eslint-plugin-import": "^2.22.1" } }, + "node_modules/eslint-config-prettier": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz", + "integrity": "sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.4", "dev": true, @@ -954,6 +969,27 @@ "dev": true, "license": "MIT" }, + "node_modules/eslint-plugin-prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", + "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "dev": true, @@ -1118,6 +1154,12 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "dev": true, @@ -2271,6 +2313,30 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/progress": { "version": "2.0.3", "dev": true, @@ -3639,6 +3705,13 @@ "object.entries": "^1.1.2" } }, + "eslint-config-prettier": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz", + "integrity": "sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==", + "dev": true, + "requires": {} + }, "eslint-import-resolver-node": { "version": "0.3.4", "dev": true, @@ -3721,6 +3794,15 @@ } } }, + "eslint-plugin-prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", + "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-scope": { "version": "5.1.1", "dev": true, @@ -3822,6 +3904,12 @@ "version": "3.1.3", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.1.0", "dev": true @@ -4538,6 +4626,21 @@ "version": "1.2.1", "dev": true }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "progress": { "version": "2.0.3", "dev": true diff --git a/package.json b/package.json index 34c0e5a..d1f1410 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cookiemonster-mod", - "version": "2.031.6", + "version": "2.031.5", "description": "Cookie Monster is an add-on that you can load into Cookie Clicker which offers a wide range of tools and statistics to enhance the game. It is not a cheat interface – although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want. This is a helper and everything is an option.", "main": "CookieMonster.js", "keywords": [ @@ -45,8 +45,11 @@ "devDependencies": { "eslint": "^7.19.0", "eslint-config-airbnb-base": "^14.2.1", + "eslint-config-prettier": "^8.1.0", "eslint-plugin-import": "^2.22.1", + "eslint-plugin-prettier": "^3.3.1", "npm-run-all": "^4.1.5", + "prettier": "2.2.1", "webpack": "^5.24.4", "webpack-cli": "^4.5.0" }, diff --git a/src/Cache/CPS/AverageQueue.js b/src/Cache/CPS/AverageQueue.js index b056d90..b7932a2 100644 --- a/src/Cache/CPS/AverageQueue.js +++ b/src/Cache/CPS/AverageQueue.js @@ -1,7 +1,11 @@ /* eslint-disable no-unused-vars */ import { ClickTimes, CookieTimes } from '../../Disp/VariablesAndData'; import { - ChoEggDiff, ClicksDiff, CookiesDiff, WrinkDiff, WrinkFattestDiff, + ChoEggDiff, + ClicksDiff, + CookiesDiff, + WrinkDiff, + WrinkFattestDiff, } from '../VariablesAndData'; /** @@ -13,34 +17,38 @@ import { * @method calcAverage(timePeriod) Returns the average over the specified timeperiod */ export class CMAvgQueue { - constructor(maxLength) { - this.maxLength = maxLength; - this.queue = []; - } + constructor(maxLength) { + this.maxLength = maxLength; + this.queue = []; + } - addLatest(newValue) { - if (this.queue.push(newValue) > this.maxLength) { - this.queue.shift(); - } - } + addLatest(newValue) { + if (this.queue.push(newValue) > this.maxLength) { + this.queue.shift(); + } + } - /** - * This functions returns the average of the values in the queue - * @param {number} timePeriod The period in seconds to computer average over - * @returns {number} ret The average - */ - calcAverage(timePeriod) { - if (timePeriod > this.maxLength) timePeriod = this.maxLength; - if (timePeriod > this.queue.length) timePeriod = this.queue.length; - let ret = 0; - for (let i = this.queue.length - 1; i >= 0 && i > this.queue.length - 1 - timePeriod; i--) { - ret += this.queue[i]; - } - if (ret === 0) { - return 0; - } - return ret / timePeriod; - } + /** + * This functions returns the average of the values in the queue + * @param {number} timePeriod The period in seconds to computer average over + * @returns {number} ret The average + */ + calcAverage(timePeriod) { + if (timePeriod > this.maxLength) timePeriod = this.maxLength; + if (timePeriod > this.queue.length) timePeriod = this.queue.length; + let ret = 0; + for ( + let i = this.queue.length - 1; + i >= 0 && i > this.queue.length - 1 - timePeriod; + i-- + ) { + ret += this.queue[i]; + } + if (ret === 0) { + return 0; + } + return ret / timePeriod; + } } /** @@ -48,9 +56,9 @@ export class CMAvgQueue { * Called by CM.Cache.InitCache() */ export function InitCookiesDiff() { - CookiesDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); - WrinkDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); - WrinkFattestDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); - ChoEggDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); - ClicksDiff = new CMAvgQueue(ClickTimes[ClickTimes.length - 1]); + CookiesDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); + WrinkDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); + WrinkFattestDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); + ChoEggDiff = new CMAvgQueue(CookieTimes[CookieTimes.length - 1]); + ClicksDiff = new CMAvgQueue(ClickTimes[ClickTimes.length - 1]); } diff --git a/src/Cache/CPS/CPS.js b/src/Cache/CPS/CPS.js index 3bd44c3..7e4f8e6 100644 --- a/src/Cache/CPS/CPS.js +++ b/src/Cache/CPS/CPS.js @@ -3,7 +3,28 @@ import { CMOptions } from '../../Config/VariablesAndData'; import { ClickTimes, CookieTimes } from '../../Disp/VariablesAndData'; import { - CacheAverageClicks, CacheAverageCPS, CacheAverageGainBank, CacheAverageGainChoEgg, CacheAverageGainWrink, CacheAverageGainWrinkFattest, CacheAvgCPSWithChoEgg, CacheLastChoEgg, CacheLastClicks, CacheLastCookies, CacheLastCPSCheck, CacheLastWrinkCookies, CacheLastWrinkFattestCookies, CacheRealCookiesEarned, CacheSellForChoEgg, CacheWrinklersFattest, CacheWrinklersTotal, ChoEggDiff, ClicksDiff, CookiesDiff, WrinkDiff, WrinkFattestDiff, + CacheAverageClicks, + CacheAverageCPS, + CacheAverageGainBank, + CacheAverageGainChoEgg, + CacheAverageGainWrink, + CacheAverageGainWrinkFattest, + CacheAvgCPSWithChoEgg, + CacheLastChoEgg, + CacheLastClicks, + CacheLastCookies, + CacheLastCPSCheck, + CacheLastWrinkCookies, + CacheLastWrinkFattestCookies, + CacheRealCookiesEarned, + CacheSellForChoEgg, + CacheWrinklersFattest, + CacheWrinklersTotal, + ChoEggDiff, + ClicksDiff, + CookiesDiff, + WrinkDiff, + WrinkFattestDiff, } from '../VariablesAndData'; /** @@ -15,53 +36,63 @@ import { * @global {number} CM.Cache.AvgCPSChoEgg Average cookies from combination of normal CPS and average Chocolate Cookie CPS */ export default function CacheAvgCPS() { - const currDate = Math.floor(Date.now() / 1000); - // Only calculate every new second - if ((Game.T / Game.fps) % 1 === 0) { - let choEggTotal = Game.cookies + CacheSellForChoEgg; - if (Game.cpsSucked > 0) choEggTotal += CacheWrinklersTotal; - CacheRealCookiesEarned = Math.max(Game.cookiesEarned, choEggTotal); - choEggTotal *= 0.05; + const currDate = Math.floor(Date.now() / 1000); + // Only calculate every new second + if ((Game.T / Game.fps) % 1 === 0) { + let choEggTotal = Game.cookies + CacheSellForChoEgg; + if (Game.cpsSucked > 0) choEggTotal += CacheWrinklersTotal; + CacheRealCookiesEarned = Math.max(Game.cookiesEarned, choEggTotal); + choEggTotal *= 0.05; - // Add recent gains to AvgQueue's - const timeDiff = currDate - CacheLastCPSCheck; - const bankDiffAvg = Math.max(0, (Game.cookies - CacheLastCookies)) / timeDiff; - const wrinkDiffAvg = Math.max(0, (CacheWrinklersTotal - CacheLastWrinkCookies)) / timeDiff; - const wrinkFattestDiffAvg = Math.max(0, (CacheWrinklersFattest[0] - CacheLastWrinkFattestCookies)) / timeDiff; - const choEggDiffAvg = Math.max(0, (choEggTotal - CacheLastChoEgg)) / timeDiff; - const clicksDiffAvg = (Game.cookieClicks - CacheLastClicks) / timeDiff; - for (let i = 0; i < timeDiff; i++) { - CookiesDiff.addLatest(bankDiffAvg); - WrinkDiff.addLatest(wrinkDiffAvg); - WrinkFattestDiff.addLatest(wrinkFattestDiffAvg); - ChoEggDiff.addLatest(choEggDiffAvg); - ClicksDiff.addLatest(clicksDiffAvg); - } + // Add recent gains to AvgQueue's + const timeDiff = currDate - CacheLastCPSCheck; + const bankDiffAvg = Math.max(0, Game.cookies - CacheLastCookies) / timeDiff; + const wrinkDiffAvg = + Math.max(0, CacheWrinklersTotal - CacheLastWrinkCookies) / timeDiff; + const wrinkFattestDiffAvg = + Math.max(0, CacheWrinklersFattest[0] - CacheLastWrinkFattestCookies) / + timeDiff; + const choEggDiffAvg = Math.max(0, choEggTotal - CacheLastChoEgg) / timeDiff; + const clicksDiffAvg = (Game.cookieClicks - CacheLastClicks) / timeDiff; + for (let i = 0; i < timeDiff; i++) { + CookiesDiff.addLatest(bankDiffAvg); + WrinkDiff.addLatest(wrinkDiffAvg); + WrinkFattestDiff.addLatest(wrinkFattestDiffAvg); + ChoEggDiff.addLatest(choEggDiffAvg); + ClicksDiff.addLatest(clicksDiffAvg); + } - // Store current data for next loop - CacheLastCPSCheck = currDate; - CacheLastCookies = Game.cookies; - CacheLastWrinkCookies = CacheWrinklersTotal; - CacheLastWrinkFattestCookies = CacheWrinklersFattest[0]; - CacheLastChoEgg = choEggTotal; - CacheLastClicks = Game.cookieClicks; + // Store current data for next loop + CacheLastCPSCheck = currDate; + CacheLastCookies = Game.cookies; + CacheLastWrinkCookies = CacheWrinklersTotal; + CacheLastWrinkFattestCookies = CacheWrinklersFattest[0]; + CacheLastChoEgg = choEggTotal; + CacheLastClicks = Game.cookieClicks; - // Get average gain over period of cpsLength seconds - const cpsLength = CookieTimes[CMOptions.AvgCPSHist]; - CacheAverageGainBank = CookiesDiff.calcAverage(cpsLength); - CacheAverageGainWrink = WrinkDiff.calcAverage(cpsLength); - CacheAverageGainWrinkFattest = WrinkFattestDiff.calcAverage(cpsLength); - CacheAverageGainChoEgg = ChoEggDiff.calcAverage(cpsLength); - CacheAverageCPS = CacheAverageGainBank; - if (CMOptions.CalcWrink === 1) CacheAverageCPS += CacheAverageGainWrink; - if (CMOptions.CalcWrink === 2) CacheAverageCPS += CacheAverageGainWrinkFattest; + // Get average gain over period of cpsLength seconds + const cpsLength = CookieTimes[CMOptions.AvgCPSHist]; + CacheAverageGainBank = CookiesDiff.calcAverage(cpsLength); + CacheAverageGainWrink = WrinkDiff.calcAverage(cpsLength); + CacheAverageGainWrinkFattest = WrinkFattestDiff.calcAverage(cpsLength); + CacheAverageGainChoEgg = ChoEggDiff.calcAverage(cpsLength); + CacheAverageCPS = CacheAverageGainBank; + if (CMOptions.CalcWrink === 1) CacheAverageCPS += CacheAverageGainWrink; + if (CMOptions.CalcWrink === 2) + CacheAverageCPS += CacheAverageGainWrinkFattest; - const choEgg = (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg')); + const choEgg = + Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg'); - if (choEgg || CMOptions.CalcWrink === 0) { - CacheAvgCPSWithChoEgg = CacheAverageGainBank + CacheAverageGainWrink + (choEgg ? CacheAverageGainChoEgg : 0); - } else CacheAvgCPSWithChoEgg = CacheAverageCPS; + if (choEgg || CMOptions.CalcWrink === 0) { + CacheAvgCPSWithChoEgg = + CacheAverageGainBank + + CacheAverageGainWrink + + (choEgg ? CacheAverageGainChoEgg : 0); + } else CacheAvgCPSWithChoEgg = CacheAverageCPS; - CacheAverageClicks = ClicksDiff.calcAverage(ClickTimes[CMOptions.AvgClicksHist]); - } + CacheAverageClicks = ClicksDiff.calcAverage( + ClickTimes[CMOptions.AvgClicksHist], + ); + } } diff --git a/src/Cache/CPS/CurrWrinklerCPS.js b/src/Cache/CPS/CurrWrinklerCPS.js index 925dc54..e508c0b 100644 --- a/src/Cache/CPS/CurrWrinklerCPS.js +++ b/src/Cache/CPS/CurrWrinklerCPS.js @@ -1,6 +1,9 @@ /* eslint-disable no-unused-vars */ import { SimObjects } from '../../Sim/VariablesAndData'; -import { CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult } from '../VariablesAndData'; +import { + CacheCurrWrinklerCount, + CacheCurrWrinklerCPSMult, +} from '../VariablesAndData'; /** * This functions caches the current Wrinkler CPS multiplier @@ -8,18 +11,23 @@ import { CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult } from '../VariablesAn * @global {number} CM.Cache.CurrWrinklerCPSMult Current multiplier of CPS because of wrinklers (excluding their negative sucking effect) */ export default function CacheCurrWrinklerCPS() { - CacheCurrWrinklerCPSMult = 0; - let count = 0; - for (const i in Game.wrinklers) { - if (Game.wrinklers[i].phase === 2) count++; - } - let godMult = 1; - if (SimObjects.Temple.minigameLoaded) { - const godLvl = Game.hasGod('scorn'); - if (godLvl === 1) godMult *= 1.15; - else if (godLvl === 2) godMult *= 1.1; - else if (godLvl === 3) godMult *= 1.05; - } - CacheCurrWrinklerCount = count; - CacheCurrWrinklerCPSMult = count * (count * 0.05 * 1.1) * (Game.Has('Sacrilegious corruption') * 0.05 + 1) * (Game.Has('Wrinklerspawn') * 0.05 + 1) * godMult; + CacheCurrWrinklerCPSMult = 0; + let count = 0; + for (const i in Game.wrinklers) { + if (Game.wrinklers[i].phase === 2) count++; + } + let godMult = 1; + if (SimObjects.Temple.minigameLoaded) { + const godLvl = Game.hasGod('scorn'); + if (godLvl === 1) godMult *= 1.15; + else if (godLvl === 2) godMult *= 1.1; + else if (godLvl === 3) godMult *= 1.05; + } + CacheCurrWrinklerCount = count; + CacheCurrWrinklerCPSMult = + count * + (count * 0.05 * 1.1) * + (Game.Has('Sacrilegious corruption') * 0.05 + 1) * + (Game.Has('Wrinklerspawn') * 0.05 + 1) * + godMult; } diff --git a/src/Cache/CPS/GetCPSBuffMult.js b/src/Cache/CPS/GetCPSBuffMult.js index 5b3c465..4a458d8 100644 --- a/src/Cache/CPS/GetCPSBuffMult.js +++ b/src/Cache/CPS/GetCPSBuffMult.js @@ -3,9 +3,10 @@ * @returns {number} mult The multiplier */ export default function GetCPSBuffMult() { - let mult = 1; - for (const i of Object.keys(Game.buffs)) { - if (typeof Game.buffs[i].multCpS !== 'undefined') mult *= Game.buffs[i].multCpS; - } - return mult; + let mult = 1; + for (const i of Object.keys(Game.buffs)) { + if (typeof Game.buffs[i].multCpS !== 'undefined') + mult *= Game.buffs[i].multCpS; + } + return mult; } diff --git a/src/Cache/CPS/NoGoldSwitchCPS.js b/src/Cache/CPS/NoGoldSwitchCPS.js index 1fe2017..a3a5830 100644 --- a/src/Cache/CPS/NoGoldSwitchCPS.js +++ b/src/Cache/CPS/NoGoldSwitchCPS.js @@ -8,7 +8,7 @@ import { CacheNoGoldSwitchCookiesPS } from '../VariablesAndData'; * It is called at the end of any functions that simulates certain behaviour */ export default function CacheNoGoldSwitchCPS() { - if (Game.Has('Golden switch [off]')) { - CacheNoGoldSwitchCookiesPS = CalcNoGoldSwitchCPS(); - } else CacheNoGoldSwitchCookiesPS = Game.cookiesPs; + if (Game.Has('Golden switch [off]')) { + CacheNoGoldSwitchCookiesPS = CalcNoGoldSwitchCPS(); + } else CacheNoGoldSwitchCookiesPS = Game.cookiesPs; } diff --git a/src/Cache/CPS/SellChoEgg.js b/src/Cache/CPS/SellChoEgg.js index 89fbb51..4dfaaf5 100644 --- a/src/Cache/CPS/SellChoEgg.js +++ b/src/Cache/CPS/SellChoEgg.js @@ -8,18 +8,18 @@ import { CacheSellForChoEgg } from '../VariablesAndData'; * @global {number} CM.Cache.SellForChoEgg Total cookies to be gained from selling Chocolate egg */ export default function CacheSellAllForChoEgg() { - let sellTotal = 0; - // Compute cookies earned by selling stock market goods - if (Game.Objects.Bank.minigameLoaded) { - const marketGoods = Game.Objects.Bank.minigame.goods; - let goodsVal = 0; - for (const i of Object.keys(marketGoods)) { - const marketGood = marketGoods[i]; - goodsVal += marketGood.stock * marketGood.val; - } - sellTotal += goodsVal * Game.cookiesPsRawHighest; - } - // Compute cookies earned by selling all buildings with optimal auras (ES + RB) - sellTotal += SellBuildingsForChoEgg(); - CacheSellForChoEgg = sellTotal; + let sellTotal = 0; + // Compute cookies earned by selling stock market goods + if (Game.Objects.Bank.minigameLoaded) { + const marketGoods = Game.Objects.Bank.minigame.goods; + let goodsVal = 0; + for (const i of Object.keys(marketGoods)) { + const marketGood = marketGoods[i]; + goodsVal += marketGood.stock * marketGood.val; + } + sellTotal += goodsVal * Game.cookiesPsRawHighest; + } + // Compute cookies earned by selling all buildings with optimal auras (ES + RB) + sellTotal += SellBuildingsForChoEgg(); + CacheSellForChoEgg = sellTotal; } diff --git a/src/Cache/CacheInit.js b/src/Cache/CacheInit.js index 42ddf7b..728ad75 100644 --- a/src/Cache/CacheInit.js +++ b/src/Cache/CacheInit.js @@ -3,12 +3,18 @@ import { CMAvgQueue, InitCookiesDiff } from './CPS/AverageQueue'; import CacheAvgCPS from './CPS/CPS'; import CacheDragonAuras from './Dragon/CacheDragonAuras'; import CachePP from './PP/PP'; -import { CacheBuildingsPrices, CacheIncome } from './PriceAndIncome/PriceAndIncome'; +import { + CacheBuildingsPrices, + CacheIncome, +} from './PriceAndIncome/PriceAndIncome'; import { CacheChain } from './Stats/ChainCookies'; import CacheHeavenlyChipsPS from './Stats/HeavenlyChips'; import CacheAllMissingUpgrades from './Stats/MissingUpgrades'; import CacheSeasonSpec from './Stats/Reindeer'; -import { CacheGoldenAndWrathCookiesMults, CacheStatsCookies } from './Stats/Stats'; +import { + CacheGoldenAndWrathCookiesMults, + CacheStatsCookies, +} from './Stats/Stats'; import { HeavenlyChipsDiff } from './VariablesAndData'; import CacheWrinklers from './Wrinklers/Wrinklers'; @@ -16,18 +22,18 @@ import CacheWrinklers from './Wrinklers/Wrinklers'; * This functions runs all cache-functions to generate all "full" cache */ export default function InitCache() { - CacheDragonAuras(); - CacheWrinklers(); - CacheStatsCookies(); - CacheGoldenAndWrathCookiesMults(); - CacheChain(); - CacheAllMissingUpgrades(); - CacheSeasonSpec(); - InitCookiesDiff(); - HeavenlyChipsDiff = new CMAvgQueue(5); // Used by CM.Cache.CacheHeavenlyChipsPS() - CacheHeavenlyChipsPS(); - CacheAvgCPS(); - CacheIncome(); - CacheBuildingsPrices(); - CachePP(); + CacheDragonAuras(); + CacheWrinklers(); + CacheStatsCookies(); + CacheGoldenAndWrathCookiesMults(); + CacheChain(); + CacheAllMissingUpgrades(); + CacheSeasonSpec(); + InitCookiesDiff(); + HeavenlyChipsDiff = new CMAvgQueue(5); // Used by CM.Cache.CacheHeavenlyChipsPS() + CacheHeavenlyChipsPS(); + CacheAvgCPS(); + CacheIncome(); + CacheBuildingsPrices(); + CachePP(); } diff --git a/src/Cache/CacheLoop.js b/src/Cache/CacheLoop.js index df7b74f..e9e7af4 100644 --- a/src/Cache/CacheLoop.js +++ b/src/Cache/CacheLoop.js @@ -13,14 +13,19 @@ import CacheWrinklers from './Wrinklers/Wrinklers'; * @global {string} CM.Cache.TimeTillNextPrestige Time requried till next prestige level */ export default function LoopCache() { - // Update Wrinkler Bank - CacheWrinklers(); + // Update Wrinkler Bank + CacheWrinklers(); - CachePP(); - CacheCurrWrinklerCPS(); - CacheAvgCPS(); - CacheHeavenlyChipsPS(); + CachePP(); + CacheCurrWrinklerCPS(); + CacheAvgCPS(); + CacheHeavenlyChipsPS(); - const cookiesToNext = Game.HowManyCookiesReset(Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1) - (Game.cookiesEarned + Game.cookiesReset); - CacheTimeTillNextPrestige = FormatTime(cookiesToNext / GetCPS()); + const cookiesToNext = + Game.HowManyCookiesReset( + Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + + 1, + ) - + (Game.cookiesEarned + Game.cookiesReset); + CacheTimeTillNextPrestige = FormatTime(cookiesToNext / GetCPS()); } diff --git a/src/Cache/Dragon/CacheDragonAuras.js b/src/Cache/Dragon/CacheDragonAuras.js index 620e7ea..0490482 100644 --- a/src/Cache/Dragon/CacheDragonAuras.js +++ b/src/Cache/Dragon/CacheDragonAuras.js @@ -5,6 +5,6 @@ import { CacheDragonAura, CacheDragonAura2 } from '../VariablesAndData'; * This functions caches the currently selected Dragon Auras */ export default function CacheDragonAuras() { - CacheDragonAura = Game.dragonAura; - CacheDragonAura2 = Game.dragonAura2; + CacheDragonAura = Game.dragonAura; + CacheDragonAura2 = Game.dragonAura2; } diff --git a/src/Cache/Dragon/Dragon.js b/src/Cache/Dragon/Dragon.js index f1bd0e9..25e8002 100644 --- a/src/Cache/Dragon/Dragon.js +++ b/src/Cache/Dragon/Dragon.js @@ -5,54 +5,76 @@ import { Beautify } from '../../Disp/BeautifyAndFormatting/BeautifyFormatting'; import CopyData from '../../Sim/SimulationData/CopyData'; import { SimDoSims, SimObjects } from '../../Sim/VariablesAndData'; import { - CacheCostDragonUpgrade, CacheDragonAura, CacheDragonAura2, CacheLastDragonLevel, + CacheCostDragonUpgrade, + CacheDragonAura, + CacheDragonAura2, + CacheLastDragonLevel, } from '../VariablesAndData'; /** * This functions caches the current cost of upgrading the dragon level so it can be displayed in the tooltip */ export default function CacheDragonCost() { - if (CacheLastDragonLevel !== Game.dragonLevel || SimDoSims) { - if (Game.dragonLevel < 25 && Game.dragonLevels[Game.dragonLevel].buy.toString().includes('sacrifice')) { - let target = Game.dragonLevels[Game.dragonLevel].buy.toString().match(/Objects\[(.*)\]/)[1]; - const amount = Game.dragonLevels[Game.dragonLevel].buy.toString().match(/sacrifice\((.*?)\)/)[1]; - if (target !== 'i') { - target = target.replaceAll("'", ''); - if (Game.Objects[target].amount < amount) { - CacheCostDragonUpgrade = 'Not enough buildings to sell'; - } else { - let cost = 0; - CopyData(); - for (let i = 0; i < amount; i++) { - let price = SimObjects[target].basePrice * Game.priceIncrease ** Math.max(0, SimObjects[target].amount - 1 - SimObjects[target].free); - price = Game.modifyBuildingPrice(SimObjects[target], price); - price = Math.ceil(price); - cost += price; - SimObjects[target].amount--; - } - CacheCostDragonUpgrade = `Cost to rebuy: ${(cost)}`; - } - } else { - let cost = 0; - CopyData(); - for (const j of Object.keys(Game.Objects)) { - target = j; - if (Game.Objects[target].amount < amount) { - CacheCostDragonUpgrade = 'Not enough buildings to sell'; - break; - } else { - for (let i = 0; i < amount; i++) { - let price = SimObjects[target].basePrice * Game.priceIncrease ** Math.max(0, SimObjects[target].amount - 1 - SimObjects[target].free); - price = Game.modifyBuildingPrice(SimObjects[target], price); - price = Math.ceil(price); - cost += price; - SimObjects[target].amount--; - } - } - CacheCostDragonUpgrade = `Cost to rebuy: ${Beautify(cost)}`; - } - } - } - CacheLastDragonLevel = Game.dragonLevel; - } + if (CacheLastDragonLevel !== Game.dragonLevel || SimDoSims) { + if ( + Game.dragonLevel < 25 && + Game.dragonLevels[Game.dragonLevel].buy.toString().includes('sacrifice') + ) { + let target = Game.dragonLevels[Game.dragonLevel].buy + .toString() + .match(/Objects\[(.*)\]/)[1]; + const amount = Game.dragonLevels[Game.dragonLevel].buy + .toString() + .match(/sacrifice\((.*?)\)/)[1]; + if (target !== 'i') { + target = target.replaceAll("'", ''); + if (Game.Objects[target].amount < amount) { + CacheCostDragonUpgrade = 'Not enough buildings to sell'; + } else { + let cost = 0; + CopyData(); + for (let i = 0; i < amount; i++) { + let price = + SimObjects[target].basePrice * + Game.priceIncrease ** + Math.max( + 0, + SimObjects[target].amount - 1 - SimObjects[target].free, + ); + price = Game.modifyBuildingPrice(SimObjects[target], price); + price = Math.ceil(price); + cost += price; + SimObjects[target].amount--; + } + CacheCostDragonUpgrade = `Cost to rebuy: ${cost}`; + } + } else { + let cost = 0; + CopyData(); + for (const j of Object.keys(Game.Objects)) { + target = j; + if (Game.Objects[target].amount < amount) { + CacheCostDragonUpgrade = 'Not enough buildings to sell'; + break; + } else { + for (let i = 0; i < amount; i++) { + let price = + SimObjects[target].basePrice * + Game.priceIncrease ** + Math.max( + 0, + SimObjects[target].amount - 1 - SimObjects[target].free, + ); + price = Game.modifyBuildingPrice(SimObjects[target], price); + price = Math.ceil(price); + cost += price; + SimObjects[target].amount--; + } + } + CacheCostDragonUpgrade = `Cost to rebuy: ${Beautify(cost)}`; + } + } + } + CacheLastDragonLevel = Game.dragonLevel; + } } diff --git a/src/Cache/PP/Building.js b/src/Cache/PP/Building.js index a5d286a..2049575 100644 --- a/src/Cache/PP/Building.js +++ b/src/Cache/PP/Building.js @@ -3,8 +3,13 @@ import { CMOptions } from '../../Config/VariablesAndData'; import GetWrinkConfigBank from '../../Disp/HelperFunctions/GetWrinkConfigBank'; import { ColorGray } from '../../Disp/VariablesAndData'; import { - CacheArrayOfPPs, - CacheMaxPP, CacheMidPP, CacheMinPP, CacheObjects1, CacheObjects10, CacheObjects100, + CacheArrayOfPPs, + CacheMaxPP, + CacheMidPP, + CacheMinPP, + CacheObjects1, + CacheObjects10, + CacheObjects100, } from '../VariablesAndData'; import ColourOfPP from './ColourOfPP'; @@ -14,13 +19,16 @@ import ColourOfPP from './ColourOfPP'; * It is called by CM.Cache.CacheBuildingsPP() */ function CacheBuildingsBulkPP(target) { - for (const i of Object.keys(target)) { - if (Game.cookiesPs) { - target[i].pp = (Math.max(target[i].price - (Game.cookies + GetWrinkConfigBank()), 0) / Game.cookiesPs) + (target[i].price / target[i].bonus); - } else target[i].pp = (target[i].price / target[i].bonus); + for (const i of Object.keys(target)) { + if (Game.cookiesPs) { + target[i].pp = + Math.max(target[i].price - (Game.cookies + GetWrinkConfigBank()), 0) / + Game.cookiesPs + + target[i].price / target[i].bonus; + } else target[i].pp = target[i].price / target[i].bonus; - target[i].color = ColourOfPP(target[i], target[i].price); - } + target[i].color = ColourOfPP(target[i], target[i].price); + } } /** @@ -28,74 +36,92 @@ function CacheBuildingsBulkPP(target) { * It is called by CM.Cache.CachePP() */ export default function CacheBuildingsPP() { - CacheMinPP = Infinity; - CacheMaxPP = 1; - CacheArrayOfPPs = []; - if (typeof CMOptions.PPExcludeTop === 'undefined') CMOptions.PPExcludeTop = 0; // Otherwise breaks during initialization + CacheMinPP = Infinity; + CacheMaxPP = 1; + CacheArrayOfPPs = []; + if (typeof CMOptions.PPExcludeTop === 'undefined') CMOptions.PPExcludeTop = 0; // Otherwise breaks during initialization - // Calculate PP and colors when compared to purchase of optimal building in single-purchase mode - if (CMOptions.ColorPPBulkMode === 0 && Game.buyMode > 0) { - for (const i of Object.keys(CacheObjects1)) { - if (Game.cookiesPs) { - CacheObjects1[i].pp = (Math.max(Game.Objects[i].getPrice() - (Game.cookies + GetWrinkConfigBank()), 0) / Game.cookiesPs) + (Game.Objects[i].getPrice() / CacheObjects1[i].bonus); - } else CacheObjects1[i].pp = (Game.Objects[i].getPrice() / CacheObjects1[i].bonus); - CacheArrayOfPPs.push([CacheObjects1[i].pp, Game.Objects[i].getPrice()]); - } - // Set CM.Cache.min to best non-excluded buidliung - CacheArrayOfPPs.sort((a, b) => a[0] - b[0]); - if (CMOptions.PPOnlyConsiderBuyable) { - while (CacheArrayOfPPs[0][1] > Game.cookies) { - if (CacheArrayOfPPs.length === 1) { - break; - } - CacheArrayOfPPs.shift(); - } - } - CacheMinPP = CacheArrayOfPPs[CMOptions.PPExcludeTop][0]; - CacheMaxPP = CacheArrayOfPPs[CacheArrayOfPPs.length - 1][0]; - CacheMidPP = ((CacheMaxPP - CacheMinPP) / 2) + CacheMinPP; - for (const i of Object.keys(CacheObjects1)) { - CacheObjects1[i].color = ColourOfPP(CacheObjects1[i], Game.Objects[i].getPrice()); - // Colour based on excluding certain top-buildings - for (let j = 0; j < CMOptions.PPExcludeTop; j++) { - if (CacheObjects1[i].pp === CacheArrayOfPPs[j][0]) CacheObjects1[i].color = ColorGray; - } - } - // Calculate PP of bulk-buy modes - CacheBuildingsBulkPP(CacheObjects10); - CacheBuildingsBulkPP(CacheObjects100); - } else if (Game.buyMode > 0) { - // Calculate PP and colors when compared to purchase of selected bulk mode - let target; - if (Game.buyBulk === 1) target = CacheObjects1; - else if (Game.buyBulk === 10) target = CacheObjects10; - else if (Game.buyBulk === 100) target = CacheObjects100; - for (const i of Object.keys(target)) { - if (Game.cookiesPs) { - target[i].pp = (Math.max(Game.Objects[i].bulkPrice - (Game.cookies + GetWrinkConfigBank()), 0) / Game.cookiesPs) + (Game.Objects[i].bulkPrice / target[i].bonus); - } else target[i].pp = (Game.Objects[i].bulkPrice / target[i].bonus); - CacheArrayOfPPs.push([target[i].pp, Game.Objects[i].bulkPrice]); - } - // Set CM.Cache.min to best non-excluded buidliung - CacheArrayOfPPs.sort((a, b) => a[0] - b[0]); - if (CMOptions.PPOnlyConsiderBuyable) { - while (CacheArrayOfPPs[0][1] > Game.cookies) { - if (CacheArrayOfPPs.length === 1) { - break; - } - CacheArrayOfPPs.shift(); - } - } - CacheMinPP = CacheArrayOfPPs[CMOptions.PPExcludeTop][0]; - CacheMaxPP = CacheArrayOfPPs[CacheArrayOfPPs.length - 1][0]; - CacheMidPP = ((CacheMaxPP - CacheMinPP) / 2) + CacheMinPP; + // Calculate PP and colors when compared to purchase of optimal building in single-purchase mode + if (CMOptions.ColorPPBulkMode === 0 && Game.buyMode > 0) { + for (const i of Object.keys(CacheObjects1)) { + if (Game.cookiesPs) { + CacheObjects1[i].pp = + Math.max( + Game.Objects[i].getPrice() - (Game.cookies + GetWrinkConfigBank()), + 0, + ) / + Game.cookiesPs + + Game.Objects[i].getPrice() / CacheObjects1[i].bonus; + } else + CacheObjects1[i].pp = + Game.Objects[i].getPrice() / CacheObjects1[i].bonus; + CacheArrayOfPPs.push([CacheObjects1[i].pp, Game.Objects[i].getPrice()]); + } + // Set CM.Cache.min to best non-excluded buidliung + CacheArrayOfPPs.sort((a, b) => a[0] - b[0]); + if (CMOptions.PPOnlyConsiderBuyable) { + while (CacheArrayOfPPs[0][1] > Game.cookies) { + if (CacheArrayOfPPs.length === 1) { + break; + } + CacheArrayOfPPs.shift(); + } + } + CacheMinPP = CacheArrayOfPPs[CMOptions.PPExcludeTop][0]; + CacheMaxPP = CacheArrayOfPPs[CacheArrayOfPPs.length - 1][0]; + CacheMidPP = (CacheMaxPP - CacheMinPP) / 2 + CacheMinPP; + for (const i of Object.keys(CacheObjects1)) { + CacheObjects1[i].color = ColourOfPP( + CacheObjects1[i], + Game.Objects[i].getPrice(), + ); + // Colour based on excluding certain top-buildings + for (let j = 0; j < CMOptions.PPExcludeTop; j++) { + if (CacheObjects1[i].pp === CacheArrayOfPPs[j][0]) + CacheObjects1[i].color = ColorGray; + } + } + // Calculate PP of bulk-buy modes + CacheBuildingsBulkPP(CacheObjects10); + CacheBuildingsBulkPP(CacheObjects100); + } else if (Game.buyMode > 0) { + // Calculate PP and colors when compared to purchase of selected bulk mode + let target; + if (Game.buyBulk === 1) target = CacheObjects1; + else if (Game.buyBulk === 10) target = CacheObjects10; + else if (Game.buyBulk === 100) target = CacheObjects100; + for (const i of Object.keys(target)) { + if (Game.cookiesPs) { + target[i].pp = + Math.max( + Game.Objects[i].bulkPrice - (Game.cookies + GetWrinkConfigBank()), + 0, + ) / + Game.cookiesPs + + Game.Objects[i].bulkPrice / target[i].bonus; + } else target[i].pp = Game.Objects[i].bulkPrice / target[i].bonus; + CacheArrayOfPPs.push([target[i].pp, Game.Objects[i].bulkPrice]); + } + // Set CM.Cache.min to best non-excluded buidliung + CacheArrayOfPPs.sort((a, b) => a[0] - b[0]); + if (CMOptions.PPOnlyConsiderBuyable) { + while (CacheArrayOfPPs[0][1] > Game.cookies) { + if (CacheArrayOfPPs.length === 1) { + break; + } + CacheArrayOfPPs.shift(); + } + } + CacheMinPP = CacheArrayOfPPs[CMOptions.PPExcludeTop][0]; + CacheMaxPP = CacheArrayOfPPs[CacheArrayOfPPs.length - 1][0]; + CacheMidPP = (CacheMaxPP - CacheMinPP) / 2 + CacheMinPP; - for (const i of Object.keys(CacheObjects1)) { - target[i].color = ColourOfPP(target[i], Game.Objects[i].bulkPrice); - // Colour based on excluding certain top-buildings - for (let j = 0; j < CMOptions.PPExcludeTop; j++) { - if (target[i].pp === CacheArrayOfPPs[j][0]) target[i].color = ColorGray; - } - } - } + for (const i of Object.keys(CacheObjects1)) { + target[i].color = ColourOfPP(target[i], Game.Objects[i].bulkPrice); + // Colour based on excluding certain top-buildings + for (let j = 0; j < CMOptions.PPExcludeTop; j++) { + if (target[i].pp === CacheArrayOfPPs[j][0]) target[i].color = ColorGray; + } + } + } } diff --git a/src/Cache/PP/ColourOfPP.js b/src/Cache/PP/ColourOfPP.js index 1177d26..2c0c722 100644 --- a/src/Cache/PP/ColourOfPP.js +++ b/src/Cache/PP/ColourOfPP.js @@ -1,7 +1,13 @@ import { CMOptions } from '../../Config/VariablesAndData'; import GetCPS from '../../Disp/HelperFunctions/GetCPS'; import { - ColorBlue, ColorGray, ColorGreen, ColorOrange, ColorPurple, ColorRed, ColorYellow, + ColorBlue, + ColorGray, + ColorGreen, + ColorOrange, + ColorPurple, + ColorRed, + ColorYellow, } from '../../Disp/VariablesAndData'; import { CacheMaxPP, CacheMidPP, CacheMinPP } from '../VariablesAndData'; @@ -13,23 +19,24 @@ import { CacheMaxPP, CacheMidPP, CacheMinPP } from '../VariablesAndData'; * @returns {string} color The colour assosciated with the pp value */ export default function ColourOfPP(me, price) { - let color = ''; - // Colour based on PP - if (me.pp <= 0 || me.pp === Infinity) color = ColorGray; - else if (me.pp < CacheMinPP) color = ColorBlue; - else if (me.pp === CacheMinPP) color = ColorGreen; - else if (me.pp === CacheMaxPP) color = ColorRed; - else if (me.pp > CacheMaxPP) color = ColorPurple; - else if (me.pp > CacheMidPP) color = ColorOrange; - else color = ColorYellow; + let color = ''; + // Colour based on PP + if (me.pp <= 0 || me.pp === Infinity) color = ColorGray; + else if (me.pp < CacheMinPP) color = ColorBlue; + else if (me.pp === CacheMinPP) color = ColorGreen; + else if (me.pp === CacheMaxPP) color = ColorRed; + else if (me.pp > CacheMaxPP) color = ColorPurple; + else if (me.pp > CacheMidPP) color = ColorOrange; + else color = ColorYellow; - // Colour based on price in terms of CPS - if (Number(CMOptions.PPSecondsLowerLimit) !== 0) { - if (price / GetCPS() < Number(CMOptions.PPSecondsLowerLimit)) color = ColorBlue; - } - // Colour based on being able to purchase - if (CMOptions.PPOnlyConsiderBuyable) { - if (price - Game.cookies > 0) color = ColorRed; - } - return color; + // Colour based on price in terms of CPS + if (Number(CMOptions.PPSecondsLowerLimit) !== 0) { + if (price / GetCPS() < Number(CMOptions.PPSecondsLowerLimit)) + color = ColorBlue; + } + // Colour based on being able to purchase + if (CMOptions.PPOnlyConsiderBuyable) { + if (price - Game.cookies > 0) color = ColorRed; + } + return color; } diff --git a/src/Cache/PP/PP.js b/src/Cache/PP/PP.js index 66ad2bf..24cf958 100644 --- a/src/Cache/PP/PP.js +++ b/src/Cache/PP/PP.js @@ -9,6 +9,6 @@ import CacheUpgradePP from './Upgrade'; * It is called by CM.Cache.LoopCache() and CM.Cache.InitCache() */ export default function CachePP() { - CacheBuildingsPP(); - CacheUpgradePP(); + CacheBuildingsPP(); + CacheUpgradePP(); } diff --git a/src/Cache/PP/Upgrade.js b/src/Cache/PP/Upgrade.js index 3a97245..17d3954 100644 --- a/src/Cache/PP/Upgrade.js +++ b/src/Cache/PP/Upgrade.js @@ -7,12 +7,23 @@ import ColourOfPP from './ColourOfPP'; * It is called by CM.Cache.CachePP() */ export default function CacheUpgradePP() { - for (const i of Object.keys(CacheUpgrades)) { - if (Game.cookiesPs) { - CacheUpgrades[i].pp = (Math.max(Game.Upgrades[i].getPrice() - (Game.cookies + GetWrinkConfigBank()), 0) / Game.cookiesPs) + (Game.Upgrades[i].getPrice() / CacheUpgrades[i].bonus); - } else CacheUpgrades[i].pp = (Game.Upgrades[i].getPrice() / CacheUpgrades[i].bonus); - if (Number.isNaN(CacheUpgrades[i].pp)) CacheUpgrades[i].pp = Infinity; + for (const i of Object.keys(CacheUpgrades)) { + if (Game.cookiesPs) { + CacheUpgrades[i].pp = + Math.max( + Game.Upgrades[i].getPrice() - (Game.cookies + GetWrinkConfigBank()), + 0, + ) / + Game.cookiesPs + + Game.Upgrades[i].getPrice() / CacheUpgrades[i].bonus; + } else + CacheUpgrades[i].pp = + Game.Upgrades[i].getPrice() / CacheUpgrades[i].bonus; + if (Number.isNaN(CacheUpgrades[i].pp)) CacheUpgrades[i].pp = Infinity; - CacheUpgrades[i].color = ColourOfPP(CacheUpgrades[i], Game.Upgrades[i].getPrice()); - } + CacheUpgrades[i].color = ColourOfPP( + CacheUpgrades[i], + Game.Upgrades[i].getPrice(), + ); + } } diff --git a/src/Cache/PriceAndIncome/PriceAndIncome.js b/src/Cache/PriceAndIncome/PriceAndIncome.js index ce2f69d..cefff60 100644 --- a/src/Cache/PriceAndIncome/PriceAndIncome.js +++ b/src/Cache/PriceAndIncome/PriceAndIncome.js @@ -5,7 +5,11 @@ import BuildingGetPrice from '../../Sim/SimulationEvents/BuyBuilding'; import BuyBuildingsBonusIncome from '../../Sim/SimulationEvents/BuyBuildingBonusIncome'; import BuyUpgradesBonusIncome from '../../Sim/SimulationEvents/BuyUpgrades'; import { - CacheDoRemakeBuildPrices, CacheObjects1, CacheObjects10, CacheObjects100, CacheUpgrades, + CacheDoRemakeBuildPrices, + CacheObjects1, + CacheObjects10, + CacheObjects100, + CacheUpgrades, } from '../VariablesAndData'; /** @@ -15,15 +19,15 @@ import { * @parem {string} target The target Cache object ("Objects1", "Objects10" or "Objects100") */ function CacheBuildingIncome(amount, target) { - const result = []; - for (const i of Object.keys(Game.Objects)) { - result[i] = {}; - result[i].bonus = BuyBuildingsBonusIncome(i, amount); - if (amount !== 1) { - CacheDoRemakeBuildPrices = 1; - } - } - return result; + const result = []; + for (const i of Object.keys(Game.Objects)) { + result[i] = {}; + result[i].bonus = BuyBuildingsBonusIncome(i, amount); + if (amount !== 1) { + CacheDoRemakeBuildPrices = 1; + } + } + return result; } /** @@ -31,24 +35,42 @@ function CacheBuildingIncome(amount, target) { * It is called by CM.Cache.CacheIncome() */ function CacheUpgradeIncome() { - CacheUpgrades = []; - for (const i of Object.keys(Game.Upgrades)) { - const bonusIncome = BuyUpgradesBonusIncome(i); - CacheUpgrades[i] = {}; - if (bonusIncome[0]) CacheUpgrades[i].bonus = bonusIncome[0]; - if (bonusIncome[1]) CacheUpgrades[i].bonusMouse = bonusIncome[1]; - } + CacheUpgrades = []; + for (const i of Object.keys(Game.Upgrades)) { + const bonusIncome = BuyUpgradesBonusIncome(i); + CacheUpgrades[i] = {}; + if (bonusIncome[0]) CacheUpgrades[i].bonus = bonusIncome[0]; + if (bonusIncome[1]) CacheUpgrades[i].bonusMouse = bonusIncome[1]; + } } /** * This functions caches the price of each building and stores it in the cache */ export function CacheBuildingsPrices() { - for (const i of Object.keys(Game.Objects)) { - CacheObjects1[i].price = BuildingGetPrice(Game.Objects[i], Game.Objects[i].basePrice, Game.Objects[i].amount, Game.Objects[i].free, 1); - CacheObjects10[i].price = BuildingGetPrice(Game.Objects[i], Game.Objects[i].basePrice, Game.Objects[i].amount, Game.Objects[i].free, 10); - CacheObjects100[i].price = BuildingGetPrice(Game.Objects[i], Game.Objects[i].basePrice, Game.Objects[i].amount, Game.Objects[i].free, 100); - } + for (const i of Object.keys(Game.Objects)) { + CacheObjects1[i].price = BuildingGetPrice( + Game.Objects[i], + Game.Objects[i].basePrice, + Game.Objects[i].amount, + Game.Objects[i].free, + 1, + ); + CacheObjects10[i].price = BuildingGetPrice( + Game.Objects[i], + Game.Objects[i].basePrice, + Game.Objects[i].amount, + Game.Objects[i].free, + 10, + ); + CacheObjects100[i].price = BuildingGetPrice( + Game.Objects[i], + Game.Objects[i].basePrice, + Game.Objects[i].amount, + Game.Objects[i].free, + 100, + ); + } } /** @@ -56,11 +78,11 @@ export function CacheBuildingsPrices() { * It is called by CM.Main.Loop() and CM.Cache.InitCache() */ export function CacheIncome() { - // Simulate Building Buys for 1, 10 and 100 amount - CacheObjects1 = CacheBuildingIncome(1); - CacheObjects10 = CacheBuildingIncome(10); - CacheObjects100 = CacheBuildingIncome(100); + // Simulate Building Buys for 1, 10 and 100 amount + CacheObjects1 = CacheBuildingIncome(1); + CacheObjects10 = CacheBuildingIncome(10); + CacheObjects100 = CacheBuildingIncome(100); - // Simulate Upgrade Buys - CacheUpgradeIncome(); + // Simulate Upgrade Buys + CacheUpgradeIncome(); } diff --git a/src/Cache/Stats/ChainCookies.js b/src/Cache/Stats/ChainCookies.js index 1478b40..0af5d5d 100644 --- a/src/Cache/Stats/ChainCookies.js +++ b/src/Cache/Stats/ChainCookies.js @@ -1,7 +1,22 @@ /* eslint-disable no-unused-vars */ import GetCPSBuffMult from '../CPS/GetCPSBuffMult'; import { - CacheChainFrenzyMaxReward, CacheChainFrenzyRequired, CacheChainFrenzyRequiredNext, CacheChainFrenzyWrathMaxReward, CacheChainFrenzyWrathRequired, CacheChainFrenzyWrathRequiredNext, CacheChainMaxReward, CacheChainRequired, CacheChainRequiredNext, CacheChainWrathMaxReward, CacheChainWrathRequired, CacheChainWrathRequiredNext, CacheDragonsFortuneMultAdjustment, CacheGoldenCookiesMult, CacheNoGoldSwitchCookiesPS, CacheWrathCookiesMult, + CacheChainFrenzyMaxReward, + CacheChainFrenzyRequired, + CacheChainFrenzyRequiredNext, + CacheChainFrenzyWrathMaxReward, + CacheChainFrenzyWrathRequired, + CacheChainFrenzyWrathRequiredNext, + CacheChainMaxReward, + CacheChainRequired, + CacheChainRequiredNext, + CacheChainWrathMaxReward, + CacheChainWrathRequired, + CacheChainWrathRequiredNext, + CacheDragonsFortuneMultAdjustment, + CacheGoldenCookiesMult, + CacheNoGoldSwitchCookiesPS, + CacheWrathCookiesMult, } from '../VariablesAndData'; /** @@ -13,19 +28,32 @@ import { * @returns [{number, number, number}] Total cookies earned, cookie needed for this and next level */ export function MaxChainCookieReward(digit, maxPayout, mult) { - let totalFromChain = 0; - let moni = 0; - let nextMoni = 0; - let nextRequired = 0; - let chain = 1 + Math.max(0, Math.ceil(Math.log(Game.cookies) / Math.LN10) - 10); - while (nextMoni < maxPayout) { - moni = Math.max(digit, Math.min(Math.floor(1 / 9 * 10 ** chain * digit * mult), maxPayout * mult)); - nextMoni = Math.max(digit, Math.min(Math.floor(1 / 9 * 10 ** (chain + 1) * digit * mult), maxPayout * mult)); - nextRequired = Math.floor(1 / 9 * 10 ** (chain + 1) * digit * mult); - totalFromChain += moni; - chain++; - } - return [totalFromChain, moni, nextRequired]; + let totalFromChain = 0; + let moni = 0; + let nextMoni = 0; + let nextRequired = 0; + let chain = + 1 + Math.max(0, Math.ceil(Math.log(Game.cookies) / Math.LN10) - 10); + while (nextMoni < maxPayout) { + moni = Math.max( + digit, + Math.min( + Math.floor((1 / 9) * 10 ** chain * digit * mult), + maxPayout * mult, + ), + ); + nextMoni = Math.max( + digit, + Math.min( + Math.floor((1 / 9) * 10 ** (chain + 1) * digit * mult), + maxPayout * mult, + ), + ); + nextRequired = Math.floor((1 / 9) * 10 ** (chain + 1) * digit * mult); + totalFromChain += moni; + chain++; + } + return [totalFromChain, moni, nextRequired]; } /** @@ -45,25 +73,65 @@ export function MaxChainCookieReward(digit, maxPayout, mult) { * @global {number} CM.Cache.ChainFrenzyWrathRequiredNext Total cookies needed for next level for wrath frenzy chain */ export function CacheChain() { - let maxPayout = CacheNoGoldSwitchCookiesPS * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment; - // Removes effect of Frenzy etc. - const cpsBuffMult = GetCPSBuffMult(); - if (cpsBuffMult > 0) maxPayout /= cpsBuffMult; - else maxPayout = 0; + let maxPayout = + CacheNoGoldSwitchCookiesPS * + 60 * + 60 * + 6 * + CacheDragonsFortuneMultAdjustment; + // Removes effect of Frenzy etc. + const cpsBuffMult = GetCPSBuffMult(); + if (cpsBuffMult > 0) maxPayout /= cpsBuffMult; + else maxPayout = 0; - CacheChainMaxReward = MaxChainCookieReward(7, maxPayout, CacheGoldenCookiesMult); - CacheChainRequired = CacheChainMaxReward[1] * 2 / CacheGoldenCookiesMult; - CacheChainRequiredNext = CacheChainMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment; + CacheChainMaxReward = MaxChainCookieReward( + 7, + maxPayout, + CacheGoldenCookiesMult, + ); + CacheChainRequired = (CacheChainMaxReward[1] * 2) / CacheGoldenCookiesMult; + CacheChainRequiredNext = + CacheChainMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment; - CacheChainWrathMaxReward = MaxChainCookieReward(6, maxPayout, CacheWrathCookiesMult); - CacheChainWrathRequired = CacheChainWrathMaxReward[1] * 2 / CacheWrathCookiesMult; - CacheChainWrathRequiredNext = CacheChainWrathMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment; + CacheChainWrathMaxReward = MaxChainCookieReward( + 6, + maxPayout, + CacheWrathCookiesMult, + ); + CacheChainWrathRequired = + (CacheChainWrathMaxReward[1] * 2) / CacheWrathCookiesMult; + CacheChainWrathRequiredNext = + CacheChainWrathMaxReward[2] / + 60 / + 60 / + 6 / + CacheDragonsFortuneMultAdjustment; - CacheChainFrenzyMaxReward = MaxChainCookieReward(7, maxPayout * 7, CacheGoldenCookiesMult); - CacheChainFrenzyRequired = CacheChainFrenzyMaxReward[1] * 2 / CacheGoldenCookiesMult; - CacheChainFrenzyRequiredNext = CacheChainFrenzyMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment; + CacheChainFrenzyMaxReward = MaxChainCookieReward( + 7, + maxPayout * 7, + CacheGoldenCookiesMult, + ); + CacheChainFrenzyRequired = + (CacheChainFrenzyMaxReward[1] * 2) / CacheGoldenCookiesMult; + CacheChainFrenzyRequiredNext = + CacheChainFrenzyMaxReward[2] / + 60 / + 60 / + 6 / + CacheDragonsFortuneMultAdjustment; - CacheChainFrenzyWrathMaxReward = MaxChainCookieReward(6, maxPayout * 7, CacheWrathCookiesMult); - CacheChainFrenzyWrathRequired = CacheChainFrenzyWrathMaxReward[1] * 2 / CacheWrathCookiesMult; - CacheChainFrenzyWrathRequiredNext = CacheChainFrenzyWrathMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment; + CacheChainFrenzyWrathMaxReward = MaxChainCookieReward( + 6, + maxPayout * 7, + CacheWrathCookiesMult, + ); + CacheChainFrenzyWrathRequired = + (CacheChainFrenzyWrathMaxReward[1] * 2) / CacheWrathCookiesMult; + CacheChainFrenzyWrathRequiredNext = + CacheChainFrenzyWrathMaxReward[2] / + 60 / + 60 / + 6 / + CacheDragonsFortuneMultAdjustment; } diff --git a/src/Cache/Stats/HeavenlyChips.js b/src/Cache/Stats/HeavenlyChips.js index 5b1301e..ec4aff8 100644 --- a/src/Cache/Stats/HeavenlyChips.js +++ b/src/Cache/Stats/HeavenlyChips.js @@ -1,6 +1,9 @@ /* eslint-disable no-unused-vars */ import { - CacheHCPerSecond, CacheLastHeavenlyCheck, CacheLastHeavenlyChips, HeavenlyChipsDiff, + CacheHCPerSecond, + CacheLastHeavenlyCheck, + CacheLastHeavenlyChips, + HeavenlyChipsDiff, } from '../VariablesAndData'; /** @@ -9,25 +12,28 @@ import { * @global {number} CM.Cache.HCPerSecond The Heavenly Chips per second in the last five seconds */ export default function CacheHeavenlyChipsPS() { - const currDate = Math.floor(Date.now() / 1000); - // Only calculate every new second - if ((Game.T / Game.fps) % 1 === 0) { - const chipsOwned = Game.HowMuchPrestige(Game.cookiesReset); - const ascendNowToOwn = Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)); - const ascendNowToGet = ascendNowToOwn - Math.floor(chipsOwned); + const currDate = Math.floor(Date.now() / 1000); + // Only calculate every new second + if ((Game.T / Game.fps) % 1 === 0) { + const chipsOwned = Game.HowMuchPrestige(Game.cookiesReset); + const ascendNowToOwn = Math.floor( + Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned), + ); + const ascendNowToGet = ascendNowToOwn - Math.floor(chipsOwned); - // Add recent gains to AvgQueue's - const timeDiff = currDate - CacheLastHeavenlyCheck; - const heavenlyChipsDiffAvg = Math.max(0, (ascendNowToGet - CacheLastHeavenlyChips)) / timeDiff; - for (let i = 0; i < timeDiff; i++) { - HeavenlyChipsDiff.addLatest(heavenlyChipsDiffAvg); - } + // Add recent gains to AvgQueue's + const timeDiff = currDate - CacheLastHeavenlyCheck; + const heavenlyChipsDiffAvg = + Math.max(0, ascendNowToGet - CacheLastHeavenlyChips) / timeDiff; + for (let i = 0; i < timeDiff; i++) { + HeavenlyChipsDiff.addLatest(heavenlyChipsDiffAvg); + } - // Store current data for next loop - CacheLastHeavenlyCheck = currDate; - CacheLastHeavenlyChips = ascendNowToGet; + // Store current data for next loop + CacheLastHeavenlyCheck = currDate; + CacheLastHeavenlyChips = ascendNowToGet; - // Get average gain over period of 5 seconds - CacheHCPerSecond = HeavenlyChipsDiff.calcAverage(5); - } + // Get average gain over period of 5 seconds + CacheHCPerSecond = HeavenlyChipsDiff.calcAverage(5); + } } diff --git a/src/Cache/Stats/MissingUpgrades.js b/src/Cache/Stats/MissingUpgrades.js index abaa034..c7bd672 100644 --- a/src/Cache/Stats/MissingUpgrades.js +++ b/src/Cache/Stats/MissingUpgrades.js @@ -1,6 +1,10 @@ /* eslint-disable no-unused-vars */ import { crateMissing } from '../../Disp/MenuSections/CreateMissingUpgrades'; -import { CacheMissingUpgrades, CacheMissingUpgradesCookies, CacheMissingUpgradesPrestige } from '../VariablesAndData'; +import { + CacheMissingUpgrades, + CacheMissingUpgradesCookies, + CacheMissingUpgradesPrestige, +} from '../VariablesAndData'; /** * This functions caches variables related to missing upgrades @@ -10,31 +14,36 @@ import { CacheMissingUpgrades, CacheMissingUpgradesCookies, CacheMissingUpgrades * @global {string} CM.Cache.MissingUpgradesPrestige String containig the HTML to create the "crates" for missing prestige upgrades */ export default function CacheAllMissingUpgrades() { - CacheMissingUpgrades = ''; - CacheMissingUpgradesCookies = ''; - CacheMissingUpgradesPrestige = ''; - const list = []; - // sort the upgrades - for (const i of Object.keys(Game.Upgrades)) { - list.push(Game.Upgrades[i]); - } - const sortMap = function (a, b) { - if (a.order > b.order) return 1; - if (a.order < b.order) return -1; - return 0; - }; - list.sort(sortMap); + CacheMissingUpgrades = ''; + CacheMissingUpgradesCookies = ''; + CacheMissingUpgradesPrestige = ''; + const list = []; + // sort the upgrades + for (const i of Object.keys(Game.Upgrades)) { + list.push(Game.Upgrades[i]); + } + const sortMap = function (a, b) { + if (a.order > b.order) return 1; + if (a.order < b.order) return -1; + return 0; + }; + list.sort(sortMap); - for (const i of Object.keys(list)) { - const me = list[i]; + for (const i of Object.keys(list)) { + const me = list[i]; - if (me.bought === 0) { - let str = ''; + if (me.bought === 0) { + let str = ''; - str += crateMissing(me); - if (me.pool === 'prestige') CacheMissingUpgradesPrestige += str; - else if (me.pool === 'cookie') CacheMissingUpgradesCookies += str; - else if (me.pool !== 'toggle' && me.pool !== 'unused' && me.pool !== 'debug') CacheMissingUpgrades += str; - } - } + str += crateMissing(me); + if (me.pool === 'prestige') CacheMissingUpgradesPrestige += str; + else if (me.pool === 'cookie') CacheMissingUpgradesCookies += str; + else if ( + me.pool !== 'toggle' && + me.pool !== 'unused' && + me.pool !== 'debug' + ) + CacheMissingUpgrades += str; + } + } } diff --git a/src/Cache/Stats/Reindeer.js b/src/Cache/Stats/Reindeer.js index 0a13ffa..77d4cb1 100644 --- a/src/Cache/Stats/Reindeer.js +++ b/src/Cache/Stats/Reindeer.js @@ -7,11 +7,11 @@ import { CacheSeaSpec } from '../VariablesAndData'; * @global {number} CM.Cache.SeaSpec The reward for popping a reindeer */ export default function CacheSeasonSpec() { - if (Game.season === 'christmas') { - let val = Game.cookiesPs * 60; - if (Game.hasBuff('Elder frenzy')) val *= 0.5; - if (Game.hasBuff('Frenzy')) val *= 0.75; - CacheSeaSpec = Math.max(25, val); - if (Game.Has('Ho ho ho-flavored frosting')) CacheSeaSpec *= 2; - } + if (Game.season === 'christmas') { + let val = Game.cookiesPs * 60; + if (Game.hasBuff('Elder frenzy')) val *= 0.5; + if (Game.hasBuff('Frenzy')) val *= 0.75; + CacheSeaSpec = Math.max(25, val); + if (Game.Has('Ho ho ho-flavored frosting')) CacheSeaSpec *= 2; + } } diff --git a/src/Cache/Stats/Stats.js b/src/Cache/Stats/Stats.js index 3253fe3..9ba480a 100644 --- a/src/Cache/Stats/Stats.js +++ b/src/Cache/Stats/Stats.js @@ -4,70 +4,88 @@ import SimHas from '../../Sim/ReplacedGameFunctions/SimHas'; import GetCPSBuffMult from '../CPS/GetCPSBuffMult'; import { - CacheConjure, CacheConjureReward, CacheDragonsFortuneMultAdjustment, CacheEdifice, CacheEdificeBuilding, CacheGoldenCookiesMult, CacheLucky, CacheLuckyFrenzy, CacheLuckyReward, CacheLuckyRewardFrenzy, CacheLuckyWrathReward, CacheLuckyWrathRewardFrenzy, CacheNoGoldSwitchCookiesPS, CacheWrathCookiesMult, + CacheConjure, + CacheConjureReward, + CacheDragonsFortuneMultAdjustment, + CacheEdifice, + CacheEdificeBuilding, + CacheGoldenCookiesMult, + CacheLucky, + CacheLuckyFrenzy, + CacheLuckyReward, + CacheLuckyRewardFrenzy, + CacheLuckyWrathReward, + CacheLuckyWrathRewardFrenzy, + CacheNoGoldSwitchCookiesPS, + CacheWrathCookiesMult, } from '../VariablesAndData'; /** * This functions caches variables related to the stats page */ export function CacheStatsCookies() { - CacheLucky = (CacheNoGoldSwitchCookiesPS * 900) / 0.15; - CacheLucky *= CacheDragonsFortuneMultAdjustment; - const cpsBuffMult = GetCPSBuffMult(); - if (cpsBuffMult > 0) CacheLucky /= cpsBuffMult; - else CacheLucky = 0; - CacheLuckyReward = CacheGoldenCookiesMult * (CacheLucky * 0.15) + 13; - CacheLuckyWrathReward = CacheWrathCookiesMult * (CacheLucky * 0.15) + 13; - CacheLuckyFrenzy = CacheLucky * 7; - CacheLuckyRewardFrenzy = CacheGoldenCookiesMult * (CacheLuckyFrenzy * 0.15) + 13; - CacheLuckyWrathRewardFrenzy = CacheWrathCookiesMult * (CacheLuckyFrenzy * 0.15) + 13; - CacheConjure = CacheLucky * 2; - CacheConjureReward = CacheConjure * 0.15; + CacheLucky = (CacheNoGoldSwitchCookiesPS * 900) / 0.15; + CacheLucky *= CacheDragonsFortuneMultAdjustment; + const cpsBuffMult = GetCPSBuffMult(); + if (cpsBuffMult > 0) CacheLucky /= cpsBuffMult; + else CacheLucky = 0; + CacheLuckyReward = CacheGoldenCookiesMult * (CacheLucky * 0.15) + 13; + CacheLuckyWrathReward = CacheWrathCookiesMult * (CacheLucky * 0.15) + 13; + CacheLuckyFrenzy = CacheLucky * 7; + CacheLuckyRewardFrenzy = + CacheGoldenCookiesMult * (CacheLuckyFrenzy * 0.15) + 13; + CacheLuckyWrathRewardFrenzy = + CacheWrathCookiesMult * (CacheLuckyFrenzy * 0.15) + 13; + CacheConjure = CacheLucky * 2; + CacheConjureReward = CacheConjure * 0.15; - CacheEdifice = 0; - let max = 0; - let n = 0; - for (const i of Object.keys(Game.Objects)) { - if (Game.Objects[i].amount > max) max = Game.Objects[i].amount; - if (Game.Objects[i].amount > 0) n++; - } - for (const i of Object.keys(Game.Objects)) { - if ((Game.Objects[i].amount < max || n === 1) - && Game.Objects[i].amount < 400 - && Game.Objects[i].price * 2 > CacheEdifice) { - CacheEdifice = Game.Objects[i].price * 2; - CacheEdificeBuilding = i; - } - } + CacheEdifice = 0; + let max = 0; + let n = 0; + for (const i of Object.keys(Game.Objects)) { + if (Game.Objects[i].amount > max) max = Game.Objects[i].amount; + if (Game.Objects[i].amount > 0) n++; + } + for (const i of Object.keys(Game.Objects)) { + if ( + (Game.Objects[i].amount < max || n === 1) && + Game.Objects[i].amount < 400 && + Game.Objects[i].price * 2 > CacheEdifice + ) { + CacheEdifice = Game.Objects[i].price * 2; + CacheEdificeBuilding = i; + } + } } /** * This functions calculates the multipliers of Golden and Wrath cookie rewards */ export function CacheGoldenAndWrathCookiesMults() { - let goldenMult = 1; - let wrathMult = 1; - let mult = 1; + let goldenMult = 1; + let wrathMult = 1; + let mult = 1; - // Factor auras and upgrade in mults - if (SimHas('Green yeast digestives')) mult *= 1.01; - if (SimHas('Dragon fang')) mult *= 1.03; + // Factor auras and upgrade in mults + if (SimHas('Green yeast digestives')) mult *= 1.01; + if (SimHas('Dragon fang')) mult *= 1.03; - goldenMult *= 1 + Game.auraMult('Ancestral Metamorphosis') * 0.1; - goldenMult *= Game.eff('goldenCookieGain'); - wrathMult *= 1 + Game.auraMult('Unholy Dominion') * 0.1; - wrathMult *= Game.eff('wrathCookieGain'); + goldenMult *= 1 + Game.auraMult('Ancestral Metamorphosis') * 0.1; + goldenMult *= Game.eff('goldenCookieGain'); + wrathMult *= 1 + Game.auraMult('Unholy Dominion') * 0.1; + wrathMult *= Game.eff('wrathCookieGain'); - // Calculate final golden and wrath multipliers - CacheGoldenCookiesMult = mult * goldenMult; - CacheWrathCookiesMult = mult * wrathMult; + // Calculate final golden and wrath multipliers + CacheGoldenCookiesMult = mult * goldenMult; + CacheWrathCookiesMult = mult * wrathMult; - // Calculate Dragon's Fortune multiplier adjustment: - // If Dragon's Fortune (or Reality Bending) aura is active and there are currently no golden cookies, - // compute a multiplier adjustment to apply on the current CPS to simulate 1 golden cookie on screen. - // Otherwise, the aura effect will be factored in the base CPS making the multiplier not requiring adjustment. - CacheDragonsFortuneMultAdjustment = 1; - if (Game.shimmerTypes.golden.n === 0) { - CacheDragonsFortuneMultAdjustment *= 1 + Game.auraMult('Dragon\'s Fortune') * 1.23; - } + // Calculate Dragon's Fortune multiplier adjustment: + // If Dragon's Fortune (or Reality Bending) aura is active and there are currently no golden cookies, + // compute a multiplier adjustment to apply on the current CPS to simulate 1 golden cookie on screen. + // Otherwise, the aura effect will be factored in the base CPS making the multiplier not requiring adjustment. + CacheDragonsFortuneMultAdjustment = 1; + if (Game.shimmerTypes.golden.n === 0) { + CacheDragonsFortuneMultAdjustment *= + 1 + Game.auraMult("Dragon's Fortune") * 1.23; + } } diff --git a/src/Cache/Wrinklers/Wrinklers.js b/src/Cache/Wrinklers/Wrinklers.js index 4d13bf0..7b0e965 100644 --- a/src/Cache/Wrinklers/Wrinklers.js +++ b/src/Cache/Wrinklers/Wrinklers.js @@ -3,7 +3,9 @@ import { SimObjects } from '../../Sim/VariablesAndData'; import { - CacheWrinklersFattest, CacheWrinklersNormal, CacheWrinklersTotal, + CacheWrinklersFattest, + CacheWrinklersNormal, + CacheWrinklersTotal, } from '../VariablesAndData'; /** @@ -14,23 +16,24 @@ import { * @global {[{number}, {number}]} CM.Cache.WrinklersFattest A list containing the cookies and the id of the fattest non-shiny wrinkler */ export default function CacheWrinklers() { - for (let i = 0; i < Game.wrinklers.length; i++) { - let sucked = Game.wrinklers[i].sucked; - let toSuck = 1.1; - if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; - if (Game.wrinklers[i].type === 1) toSuck *= 3; // Shiny wrinklers - sucked *= toSuck; - if (Game.Has('Wrinklerspawn')) sucked *= 1.05; - if (SimObjects.Temple.minigameLoaded) { - const godLvl = Game.hasGod('scorn'); - if (godLvl === 1) sucked *= 1.15; - else if (godLvl === 2) sucked *= 1.1; - else if (godLvl === 3) sucked *= 1.05; - } - CacheWrinklersTotal += sucked; - if (Game.wrinklers[i].type === 0) { - CacheWrinklersNormal += sucked; - if (sucked > CacheWrinklersFattest[0]) CacheWrinklersFattest = [sucked, i]; - } - } + for (let i = 0; i < Game.wrinklers.length; i++) { + let sucked = Game.wrinklers[i].sucked; + let toSuck = 1.1; + if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; + if (Game.wrinklers[i].type === 1) toSuck *= 3; // Shiny wrinklers + sucked *= toSuck; + if (Game.Has('Wrinklerspawn')) sucked *= 1.05; + if (SimObjects.Temple.minigameLoaded) { + const godLvl = Game.hasGod('scorn'); + if (godLvl === 1) sucked *= 1.15; + else if (godLvl === 2) sucked *= 1.1; + else if (godLvl === 3) sucked *= 1.05; + } + CacheWrinklersTotal += sucked; + if (Game.wrinklers[i].type === 0) { + CacheWrinklersNormal += sucked; + if (sucked > CacheWrinklersFattest[0]) + CacheWrinklersFattest = [sucked, i]; + } + } } diff --git a/src/Config/CheckNotificationPermissions.js b/src/Config/CheckNotificationPermissions.js index 3fd191c..c20a0b0 100644 --- a/src/Config/CheckNotificationPermissions.js +++ b/src/Config/CheckNotificationPermissions.js @@ -5,26 +5,26 @@ * @param {number} ToggleOnOff A number indicating whether the option has been turned off (0) or on (1) */ function CheckNotificationPermissions(ToggleOnOff) { - if (ToggleOnOff === 1) { - // Check if browser support Promise version of Notification Permissions - const checkNotificationPromise = function () { - try { - Notification.requestPermission().then(); - } catch (e) { - return false; - } - return true; - }; + if (ToggleOnOff === 1) { + // Check if browser support Promise version of Notification Permissions + const checkNotificationPromise = function () { + try { + Notification.requestPermission().then(); + } catch (e) { + return false; + } + return true; + }; - // Check if the browser supports notifications and which type - if (!('Notification' in window)) { - console.log('This browser does not support notifications.'); - } else if (checkNotificationPromise()) { - Notification.requestPermission().then(); - } else { - Notification.requestPermission(); - } - } + // Check if the browser supports notifications and which type + if (!('Notification' in window)) { + console.log('This browser does not support notifications.'); + } else if (checkNotificationPromise()) { + Notification.requestPermission().then(); + } else { + Notification.requestPermission(); + } + } } export default CheckNotificationPermissions; diff --git a/src/Config/SaveLoadReload/SaveLoadReloadSettings.js b/src/Config/SaveLoadReload/SaveLoadReloadSettings.js index 6f0a0cb..1a70897 100644 --- a/src/Config/SaveLoadReload/SaveLoadReloadSettings.js +++ b/src/Config/SaveLoadReload/SaveLoadReloadSettings.js @@ -13,12 +13,20 @@ import CMLoop from '../../Main/Loop'; * CM.ToggleConfigVolume() and changes in options with type "url", "color" or "numscale" */ export function SaveConfig() { - const saveString = b64_to_utf8(unescape(localStorage.getItem('CookieClickerGame')).split('!END!')[0]); - const CookieMonsterSave = saveString.match(/CookieMonster.*(;|$)/); - if (CookieMonsterSave !== null) { - const newSaveString = saveString.replace(CookieMonsterSave[0], `CookieMonster:${save()}`); - localStorage.setItem('CookieClickerGame', escape(`${utf8_to_b64(newSaveString)}!END!`)); - } + const saveString = b64_to_utf8( + unescape(localStorage.getItem('CookieClickerGame')).split('!END!')[0], + ); + const CookieMonsterSave = saveString.match(/CookieMonster.*(;|$)/); + if (CookieMonsterSave !== null) { + const newSaveString = saveString.replace( + CookieMonsterSave[0], + `CookieMonster:${save()}`, + ); + localStorage.setItem( + 'CookieClickerGame', + escape(`${utf8_to_b64(newSaveString)}!END!`), + ); + } } /** @@ -26,53 +34,64 @@ export function SaveConfig() { * It is called by CM.Main.DelayInit() and CM.Config.RestoreDefault() */ export function LoadConfig(settings) { - // This removes cookies left from earlier versions of CookieMonster - if (typeof localStorage.CMConfig !== 'undefined') { - delete localStorage.CMConfig; - } - if (settings !== undefined) { - CMOptions = settings; + // This removes cookies left from earlier versions of CookieMonster + if (typeof localStorage.CMConfig !== 'undefined') { + delete localStorage.CMConfig; + } + if (settings !== undefined) { + CMOptions = settings; - // Check values - let mod = false; - for (const i in ConfigDefault) { - if (typeof CMOptions[i] === 'undefined') { - mod = true; - CMOptions[i] = ConfigDefault[i]; - } else if (i !== 'Header' && i !== 'Colors') { - if (i.indexOf('SoundURL') === -1) { - if (!(CMOptions[i] > -1 && CMOptions[i] < ConfigData[i].label.length)) { - mod = true; - CMOptions[i] = ConfigDefault[i]; - } - } else if (typeof CMOptions[i] !== 'string') { // Sound URLs - mod = true; - CMOptions[i] = ConfigDefault[i]; - } - } else if (i === 'Header') { - for (const j in ConfigDefault.Header) { - if (typeof CMOptions[i][j] === 'undefined' || !(CMOptions[i][j] > -1 && CMOptions[i][j] < 2)) { - mod = true; - CMOptions[i][j] = ConfigDefault[i][j]; - } - } - } else { // Colors - for (const j in ConfigDefault.Colors) { - if (typeof CMOptions[i][j] === 'undefined' || typeof CMOptions[i][j] !== 'string') { - mod = true; - CMOptions[i][j] = ConfigDefault[i][j]; - } - } - } - } - if (mod) SaveConfig(); - CMLoop(); // Do loop once - for (const i in ConfigDefault) { - if (i !== 'Header' && typeof ConfigData[i].func !== 'undefined') { - ConfigData[i].func(); - } - } - } else { // Default values - LoadConfig(ConfigDefault); - } + // Check values + let mod = false; + for (const i in ConfigDefault) { + if (typeof CMOptions[i] === 'undefined') { + mod = true; + CMOptions[i] = ConfigDefault[i]; + } else if (i !== 'Header' && i !== 'Colors') { + if (i.indexOf('SoundURL') === -1) { + if ( + !(CMOptions[i] > -1 && CMOptions[i] < ConfigData[i].label.length) + ) { + mod = true; + CMOptions[i] = ConfigDefault[i]; + } + } else if (typeof CMOptions[i] !== 'string') { + // Sound URLs + mod = true; + CMOptions[i] = ConfigDefault[i]; + } + } else if (i === 'Header') { + for (const j in ConfigDefault.Header) { + if ( + typeof CMOptions[i][j] === 'undefined' || + !(CMOptions[i][j] > -1 && CMOptions[i][j] < 2) + ) { + mod = true; + CMOptions[i][j] = ConfigDefault[i][j]; + } + } + } else { + // Colors + for (const j in ConfigDefault.Colors) { + if ( + typeof CMOptions[i][j] === 'undefined' || + typeof CMOptions[i][j] !== 'string' + ) { + mod = true; + CMOptions[i][j] = ConfigDefault[i][j]; + } + } + } + } + if (mod) SaveConfig(); + CMLoop(); // Do loop once + for (const i in ConfigDefault) { + if (i !== 'Header' && typeof ConfigData[i].func !== 'undefined') { + ConfigData[i].func(); + } + } + } else { + // Default values + LoadConfig(ConfigDefault); + } } diff --git a/src/Config/SpecificToggles.js b/src/Config/SpecificToggles.js index 60b29a2..17cd072 100644 --- a/src/Config/SpecificToggles.js +++ b/src/Config/SpecificToggles.js @@ -7,48 +7,55 @@ import { CMOptions } from './VariablesAndData'; * This function changes the position of both the bottom and timer bar */ export function UpdateBotTimerBarPosition() { - if (CMOptions.BotBar === 1 && CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 1) { - l('CMBotBar').style.bottom = l('CMTimerBar').style.height; - l('game').style.bottom = `${Number(l('CMTimerBar').style.height.replace('px', '')) + 70}px`; - } else if (CMOptions.BotBar === 1) { - l('CMBotBar').style.bottom = '0px'; - l('game').style.bottom = '70px'; - } else if (CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 1) { - l('game').style.bottom = l('CMTimerBar').style.height; - } else { // No bars - l('game').style.bottom = '0px'; - } + if ( + CMOptions.BotBar === 1 && + CMOptions.TimerBar === 1 && + CMOptions.TimerBarPos === 1 + ) { + l('CMBotBar').style.bottom = l('CMTimerBar').style.height; + l('game').style.bottom = `${ + Number(l('CMTimerBar').style.height.replace('px', '')) + 70 + }px`; + } else if (CMOptions.BotBar === 1) { + l('CMBotBar').style.bottom = '0px'; + l('game').style.bottom = '70px'; + } else if (CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 1) { + l('game').style.bottom = l('CMTimerBar').style.height; + } else { + // No bars + l('game').style.bottom = '0px'; + } - if (CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 0) { - l('sectionLeft').style.top = l('CMTimerBar').style.height; - } else { - l('sectionLeft').style.top = ''; - } + if (CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 0) { + l('sectionLeft').style.top = l('CMTimerBar').style.height; + } else { + l('sectionLeft').style.top = ''; + } - UpdateBackground(); + UpdateBackground(); } /** * This function changes the visibility of the timer bar */ export function ToggleTimerBar() { - if (CMOptions.TimerBar === 1) l('CMTimerBar').style.display = ''; - else l('CMTimerBar').style.display = 'none'; - UpdateBotTimerBarPosition(); + if (CMOptions.TimerBar === 1) l('CMTimerBar').style.display = ''; + else l('CMTimerBar').style.display = 'none'; + UpdateBotTimerBarPosition(); } /** * This function changes the position of the timer bar */ export function ToggleTimerBarPos() { - if (CMOptions.TimerBarPos === 0) { - l('CMTimerBar').style.width = '30%'; - l('CMTimerBar').style.bottom = ''; - l('game').insertBefore(l('CMTimerBar'), l('sectionLeft')); - } else { - l('CMTimerBar').style.width = '100%'; - l('CMTimerBar').style.bottom = '0px'; - l('wrapper').appendChild(l('CMTimerBar')); - } - UpdateBotTimerBarPosition(); + if (CMOptions.TimerBarPos === 0) { + l('CMTimerBar').style.width = '30%'; + l('CMTimerBar').style.bottom = ''; + l('game').insertBefore(l('CMTimerBar'), l('sectionLeft')); + } else { + l('CMTimerBar').style.width = '100%'; + l('CMTimerBar').style.bottom = '0px'; + l('wrapper').appendChild(l('CMTimerBar')); + } + UpdateBotTimerBarPosition(); } diff --git a/src/Config/ToggleSetting.js b/src/Config/ToggleSetting.js index 9df84b9..3cd48b9 100644 --- a/src/Config/ToggleSetting.js +++ b/src/Config/ToggleSetting.js @@ -13,19 +13,21 @@ export const ConfigPrefix = 'CMConfig'; * @param {string} config The name of the option */ export function ToggleConfig(config) { - CMOptions[config]++; + CMOptions[config]++; - if (CMOptions[config] === ConfigData[config].label.length) { - CMOptions[config] = 0; - if (ConfigData[config].toggle) l(ConfigPrefix + config).className = 'option off'; - } else l(ConfigPrefix + config).className = 'option'; + if (CMOptions[config] === ConfigData[config].label.length) { + CMOptions[config] = 0; + if (ConfigData[config].toggle) + l(ConfigPrefix + config).className = 'option off'; + } else l(ConfigPrefix + config).className = 'option'; - if (typeof ConfigData[config].func !== 'undefined') { - ConfigData[config].func(); - } + if (typeof ConfigData[config].func !== 'undefined') { + ConfigData[config].func(); + } - l(ConfigPrefix + config).innerHTML = ConfigData[config].label[CMOptions[config]]; - SaveConfig(); + l(ConfigPrefix + config).innerHTML = + ConfigData[config].label[CMOptions[config]]; + SaveConfig(); } /** @@ -34,11 +36,11 @@ export function ToggleConfig(config) { * @param {string} config The name of the option */ export function ToggleConfigVolume(config) { - if (l(`slider${config}`) !== null) { - l(`slider${config}right`).innerHTML = `${l(`slider${config}`).value}%`; - CMOptions[config] = Math.round(l(`slider${config}`).value); - } - SaveConfig(); + if (l(`slider${config}`) !== null) { + l(`slider${config}right`).innerHTML = `${l(`slider${config}`).value}%`; + CMOptions[config] = Math.round(l(`slider${config}`).value); + } + SaveConfig(); } /** @@ -47,7 +49,7 @@ export function ToggleConfigVolume(config) { * @param {string} config The name of the header */ export function ToggleHeader(config) { - CMOptions.Header[config]++; - if (CMOptions.Header[config] > 1) CMOptions.Header[config] = 0; - SaveConfig(); + CMOptions.Header[config]++; + if (CMOptions.Header[config] > 1) CMOptions.Header[config] = 0; + SaveConfig(); } diff --git a/src/Config/Toggles/ToggleBotBar.js b/src/Config/Toggles/ToggleBotBar.js index 267b774..9295691 100644 --- a/src/Config/Toggles/ToggleBotBar.js +++ b/src/Config/Toggles/ToggleBotBar.js @@ -7,11 +7,11 @@ import { CMOptions } from '../VariablesAndData'; * It is called by CM.Disp.UpdateAscendState() and a change in CMOptions.BotBar */ export default function ToggleBotBar() { - if (CMOptions.BotBar === 1) { - l('CMBotBar').style.display = ''; - UpdateBotBar(); - } else { - l('CMBotBar').style.display = 'none'; - } - UpdateBotTimerBarPosition(); + if (CMOptions.BotBar === 1) { + l('CMBotBar').style.display = ''; + UpdateBotBar(); + } else { + l('CMBotBar').style.display = 'none'; + } + UpdateBotTimerBarPosition(); } diff --git a/src/Config/Toggles/ToggleDetailedTime.js b/src/Config/Toggles/ToggleDetailedTime.js index a01c15f..6753d7f 100644 --- a/src/Config/Toggles/ToggleDetailedTime.js +++ b/src/Config/Toggles/ToggleDetailedTime.js @@ -7,6 +7,6 @@ import { CMOptions } from '../VariablesAndData'; * It is called by a change in CM.Options.DetailedTime */ export default function ToggleDetailedTime() { - if (CMOptions.DetailedTime === 1) Game.sayTime = CMSayTime; - else Game.sayTime = BackupFunctions.sayTime; + if (CMOptions.DetailedTime === 1) Game.sayTime = CMSayTime; + else Game.sayTime = BackupFunctions.sayTime; } diff --git a/src/Config/Toggles/ToggleGCTimer.js b/src/Config/Toggles/ToggleGCTimer.js index 87db4cb..3f0f983 100644 --- a/src/Config/Toggles/ToggleGCTimer.js +++ b/src/Config/Toggles/ToggleGCTimer.js @@ -7,13 +7,13 @@ import { CMOptions } from '../VariablesAndData'; * It is called by a change in CM.Options.GCTimer */ export default function ToggleGCTimer() { - if (CMOptions.GCTimer === 1) { - for (const i of Object.keys(GCTimers)) { - GCTimers[i].style.display = 'block'; - GCTimers[i].style.left = CacheGoldenShimmersByID[i].l.style.left; - GCTimers[i].style.top = CacheGoldenShimmersByID[i].l.style.top; - } - } else { - for (const i of Object.keys(GCTimers)) GCTimers[i].style.display = 'none'; - } + if (CMOptions.GCTimer === 1) { + for (const i of Object.keys(GCTimers)) { + GCTimers[i].style.display = 'block'; + GCTimers[i].style.left = CacheGoldenShimmersByID[i].l.style.left; + GCTimers[i].style.top = CacheGoldenShimmersByID[i].l.style.top; + } + } else { + for (const i of Object.keys(GCTimers)) GCTimers[i].style.display = 'none'; + } } diff --git a/src/Config/Toggles/ToggleToolWarnPos.js b/src/Config/Toggles/ToggleToolWarnPos.js index 08ccada..d77c485 100644 --- a/src/Config/Toggles/ToggleToolWarnPos.js +++ b/src/Config/Toggles/ToggleToolWarnPos.js @@ -6,15 +6,15 @@ import { CMOptions } from '../VariablesAndData'; * and upon creation of the warning tooltip by CM.Disp.UpdateTooltipWarnings() */ export default function ToggleToolWarnPos() { - if (l('CMDispTooltipWarningParent') !== null) { - if (CMOptions.ToolWarnPos === 0) { - l('CMDispTooltipWarningParent').style.top = 'auto'; - l('CMDispTooltipWarningParent').style.margin = '4px -4px'; - l('CMDispTooltipWarningParent').style.padding = '3px 4px'; - } else { - l('CMDispTooltipWarningParent').style.right = 'auto'; - l('CMDispTooltipWarningParent').style.margin = '4px'; - l('CMDispTooltipWarningParent').style.padding = '4px 3px'; - } - } + if (l('CMDispTooltipWarningParent') !== null) { + if (CMOptions.ToolWarnPos === 0) { + l('CMDispTooltipWarningParent').style.top = 'auto'; + l('CMDispTooltipWarningParent').style.margin = '4px -4px'; + l('CMDispTooltipWarningParent').style.padding = '3px 4px'; + } else { + l('CMDispTooltipWarningParent').style.right = 'auto'; + l('CMDispTooltipWarningParent').style.margin = '4px'; + l('CMDispTooltipWarningParent').style.padding = '4px 3px'; + } + } } diff --git a/src/Config/Toggles/ToggleUpgradeBarAndColor.js b/src/Config/Toggles/ToggleUpgradeBarAndColor.js index 856c25c..227b0e1 100644 --- a/src/Config/Toggles/ToggleUpgradeBarAndColor.js +++ b/src/Config/Toggles/ToggleUpgradeBarAndColor.js @@ -9,14 +9,17 @@ import { CMOptions } from '../VariablesAndData'; * It is called by a change in CM.Options.UpBarColor */ export default function ToggleUpgradeBarAndColor() { - if (CMOptions.UpBarColor === 1) { // Colours and bar on - l('CMUpgradeBar').style.display = ''; - UpdateUpgrades(); - } else if (CMOptions.UpBarColor === 2) { // Colours on and bar off - l('CMUpgradeBar').style.display = 'none'; - UpdateUpgrades(); - } else { // Colours and bar off - l('CMUpgradeBar').style.display = 'none'; - Game.RebuildUpgrades(); - } + if (CMOptions.UpBarColor === 1) { + // Colours and bar on + l('CMUpgradeBar').style.display = ''; + UpdateUpgrades(); + } else if (CMOptions.UpBarColor === 2) { + // Colours on and bar off + l('CMUpgradeBar').style.display = 'none'; + UpdateUpgrades(); + } else { + // Colours and bar off + l('CMUpgradeBar').style.display = 'none'; + Game.RebuildUpgrades(); + } } diff --git a/src/Config/Toggles/ToggleUpgradeBarFixedPos.js b/src/Config/Toggles/ToggleUpgradeBarFixedPos.js index 8c2b6fb..94ffc9e 100644 --- a/src/Config/Toggles/ToggleUpgradeBarFixedPos.js +++ b/src/Config/Toggles/ToggleUpgradeBarFixedPos.js @@ -5,10 +5,11 @@ import { CMOptions } from '../VariablesAndData'; * It is called by a change in CM.Options.UpgradeBarFixedPos */ export default function ToggleUpgradeBarFixedPos() { - if (CMOptions.UpgradeBarFixedPos === 1) { // Fix to top of screen when scrolling - l('CMUpgradeBar').style.position = 'sticky'; - l('CMUpgradeBar').style.top = '0px'; - } else { - l('CMUpgradeBar').style.position = ''; // Possible to scroll offscreen - } + if (CMOptions.UpgradeBarFixedPos === 1) { + // Fix to top of screen when scrolling + l('CMUpgradeBar').style.position = 'sticky'; + l('CMUpgradeBar').style.top = '0px'; + } else { + l('CMUpgradeBar').style.position = ''; // Possible to scroll offscreen + } } diff --git a/src/Config/Toggles/ToggleWrinklerButtons.js b/src/Config/Toggles/ToggleWrinklerButtons.js index 1684ead..1612853 100644 --- a/src/Config/Toggles/ToggleWrinklerButtons.js +++ b/src/Config/Toggles/ToggleWrinklerButtons.js @@ -5,11 +5,11 @@ import { CMOptions } from '../VariablesAndData'; * It is called by changes in CM.Options.WrinklerButtons */ export default function ToggleWrinklerButtons() { - if (CMOptions.WrinklerButtons) { - l('PopAllNormalWrinklerButton').style.display = ''; - l('PopFattestWrinklerButton').style.display = ''; - } else { - l('PopAllNormalWrinklerButton').style.display = 'none'; - l('PopFattestWrinklerButton').style.display = 'none'; - } + if (CMOptions.WrinklerButtons) { + l('PopAllNormalWrinklerButton').style.display = ''; + l('PopFattestWrinklerButton').style.display = ''; + } else { + l('PopAllNormalWrinklerButton').style.display = 'none'; + l('PopFattestWrinklerButton').style.display = 'none'; + } } diff --git a/src/CookieMonster.js b/src/CookieMonster.js index df76bd4..658c81d 100644 --- a/src/CookieMonster.js +++ b/src/CookieMonster.js @@ -4,9 +4,9 @@ import load from './InitSaveLoad/load'; import save from './InitSaveLoad/save'; const CM = { - init, - load, - save, + init, + load, + save, }; Game.registerMod('CookieMonster', CM); diff --git a/src/Data/Gamedata.js b/src/Data/Gamedata.js index 95e64b6..82629c4 100644 --- a/src/Data/Gamedata.js +++ b/src/Data/Gamedata.js @@ -2,93 +2,96 @@ /** Array of the names of all fortune cookies obtainable from the ticker */ export const Fortunes = [ - 'Fortune #001', - 'Fortune #002', - 'Fortune #003', - 'Fortune #004', - 'Fortune #005', - 'Fortune #006', - 'Fortune #007', - 'Fortune #008', - 'Fortune #009', - 'Fortune #010', - 'Fortune #011', - 'Fortune #012', - 'Fortune #013', - 'Fortune #014', - 'Fortune #015', - 'Fortune #016', - 'Fortune #017', - 'Fortune #018', - 'Fortune #100', - 'Fortune #101', - 'Fortune #102', - 'Fortune #103', - 'Fortune #104', + 'Fortune #001', + 'Fortune #002', + 'Fortune #003', + 'Fortune #004', + 'Fortune #005', + 'Fortune #006', + 'Fortune #007', + 'Fortune #008', + 'Fortune #009', + 'Fortune #010', + 'Fortune #011', + 'Fortune #012', + 'Fortune #013', + 'Fortune #014', + 'Fortune #015', + 'Fortune #016', + 'Fortune #017', + 'Fortune #018', + 'Fortune #100', + 'Fortune #101', + 'Fortune #102', + 'Fortune #103', + 'Fortune #104', ]; /** Array of the names of all Halloween cookies */ export const HalloCookies = [ - 'Skull cookies', - 'Ghost cookies', - 'Bat cookies', - 'Slime cookies', - 'Pumpkin cookies', - 'Eyeball cookies', - 'Spider cookies', + 'Skull cookies', + 'Ghost cookies', + 'Bat cookies', + 'Slime cookies', + 'Pumpkin cookies', + 'Eyeball cookies', + 'Spider cookies', ]; /** Array of the names of all Christmas cookies */ -export const ChristCookies = ['Christmas tree biscuits', - 'Snowflake biscuits', - 'Snowman biscuits', - 'Holly biscuits', - 'Candy cane biscuits', - 'Bell biscuits', - 'Present biscuits', +export const ChristCookies = [ + 'Christmas tree biscuits', + 'Snowflake biscuits', + 'Snowman biscuits', + 'Holly biscuits', + 'Candy cane biscuits', + 'Bell biscuits', + 'Present biscuits', ]; /** Array of the names of all Valentine cookies */ -export const ValCookies = ['Pure heart biscuits', - 'Ardent heart biscuits', - 'Sour heart biscuits', - 'Weeping heart biscuits', - 'Golden heart biscuits', - 'Eternal heart biscuits', - 'Prism heart biscuits', +export const ValCookies = [ + 'Pure heart biscuits', + 'Ardent heart biscuits', + 'Sour heart biscuits', + 'Weeping heart biscuits', + 'Golden heart biscuits', + 'Eternal heart biscuits', + 'Prism heart biscuits', ]; /** Array of the names of all plant drops */ -export const PlantDrops = ['Elderwort biscuits', - 'Bakeberry cookies', - 'Duketater cookies', - 'Green yeast digestives', - 'Wheat slims', - 'Fern tea', - 'Ichor syrup', +export const PlantDrops = [ + 'Elderwort biscuits', + 'Bakeberry cookies', + 'Duketater cookies', + 'Green yeast digestives', + 'Wheat slims', + 'Fern tea', + 'Ichor syrup', ]; /** All possible effects plants and other items can have with a display-title */ export const Effects = { - buildingCost: 'Building prices', - click: 'Cookies per click', - cps: 'Total CPS', - cursorCps: 'Cursor CPS', - goldenCookieDur: 'Golden cookie duration', - goldenCookieEffDur: 'Golden cookie effect duration', - goldenCookieFreq: 'Golden cookie frequency', - goldenCookieGain: 'Golden cookie gains', - grandmaCps: 'Grandma CPS', - itemDrops: 'Random item drop chance', - milk: 'Effect from milk', - reindeerDur: 'Reindeer duration', - reindeerFreq: 'Reindeer frequency', - reindeerGain: 'Reindeer gains', - upgradeCost: 'Upgrade prices', - wrathCookieDur: 'Wrath cookie duration', - wrathCookieEffDur: 'Wrath cookie effect duration', - wrathCookieFreq: 'Wrath cookie frequency', - wrathCookieGain: 'Wrath cookie gains', - wrinklerEat: 'Wrinkler ', - wrinklerSpawn: 'Wrinkler spawn frequency', + buildingCost: 'Building prices', + click: 'Cookies per click', + cps: 'Total CPS', + cursorCps: 'Cursor CPS', + goldenCookieDur: 'Golden cookie duration', + goldenCookieEffDur: 'Golden cookie effect duration', + goldenCookieFreq: 'Golden cookie frequency', + goldenCookieGain: 'Golden cookie gains', + grandmaCps: 'Grandma CPS', + itemDrops: 'Random item drop chance', + milk: 'Effect from milk', + reindeerDur: 'Reindeer duration', + reindeerFreq: 'Reindeer frequency', + reindeerGain: 'Reindeer gains', + upgradeCost: 'Upgrade prices', + wrathCookieDur: 'Wrath cookie duration', + wrathCookieEffDur: 'Wrath cookie effect duration', + wrathCookieFreq: 'Wrath cookie frequency', + wrathCookieGain: 'Wrath cookie gains', + wrinklerEat: 'Wrinkler ', + wrinklerSpawn: 'Wrinkler spawn frequency', }; diff --git a/src/Data/Moddata.js b/src/Data/Moddata.js index 85b6a6d..f03a734 100644 --- a/src/Data/Moddata.js +++ b/src/Data/Moddata.js @@ -1,7 +1,7 @@ /** Data related directly to Cookie Monster */ export const VersionMajor = '2.031'; -export const VersionMinor = '6'; +export const VersionMinor = '5'; /** Information about Cookie Monster to be displayed in the info section */ export const ModDescription = `
diff --git a/src/Data/Scales.js b/src/Data/Scales.js index 8c5e794..f6510f9 100644 --- a/src/Data/Scales.js +++ b/src/Data/Scales.js @@ -1,148 +1,141 @@ /** Data related directly to the scales used by Cookie Monster */ /** Array of abbreviations used in the "Metric" scale */ -export const metric = ['', - '', - 'M', - 'G', - 'T', - 'P', - 'E', - 'Z', - 'Y', -]; +export const metric = ['', '', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']; /** Array of abbreviations used in the "Short" scale */ -export const shortScale = ['', - '', - 'M', - 'B', - 'Tr', - 'Quadr', - 'Quint', - 'Sext', - 'Sept', - 'Oct', - 'Non', - 'Dec', - 'Undec', - 'Duodec', - 'Tredec', - 'Quattuordec', - 'Quindec', - 'Sexdec', - 'Septendec', - 'Octodec', - 'Novemdec', - 'Vigint', - 'Unvigint', - 'Duovigint', - 'Trevigint', - 'Quattuorvigint', +export const shortScale = [ + '', + '', + 'M', + 'B', + 'Tr', + 'Quadr', + 'Quint', + 'Sext', + 'Sept', + 'Oct', + 'Non', + 'Dec', + 'Undec', + 'Duodec', + 'Tredec', + 'Quattuordec', + 'Quindec', + 'Sexdec', + 'Septendec', + 'Octodec', + 'Novemdec', + 'Vigint', + 'Unvigint', + 'Duovigint', + 'Trevigint', + 'Quattuorvigint', ]; /** Array of abbreviations used in the "Abbreviated Short" scale */ -export const shortScaleAbbreviated = ['', - 'K', - 'M', - 'B', - 'T', - 'Qa', - 'Qi', - 'Sx', - 'Sp', - 'Oc', - 'No', - 'De', - 'UDe', - 'DDe', - 'TDe', - 'QaDe', - 'QiDe', - 'SxDe', - 'SpDe', - 'ODe', - 'NDe', - 'Vi', - 'UVi', - 'DVi', - 'TVi', - 'QaVi', - 'QiVi', - 'SxVi', - 'SpVi', - 'OVi', - 'NVi', - 'Tr', - 'UTr', - 'DTr', - 'TTr', - 'QaTr', - 'QiTr', - 'SxTr', - 'SpTr', - 'OTr', - 'NTr', - 'Qaa', - 'UQa', - 'DQa', - 'TQa', - 'QaQa', - 'QiQa', - 'SxQa', - 'SpQa', - 'OQa', - 'NQa', - 'Qia', - 'UQi', - 'DQi', - 'TQi', - 'QaQi', - 'QiQi', - 'SxQi', - 'SpQi', - 'OQi', - 'NQi', - 'Sxa', - 'USx', - 'DSx', - 'TSx', - 'QaSx', - 'QiSx', - 'SxSx', - 'SpSx', - 'OSx', - 'NSx', - 'Spa', - 'USp', - 'DSp', - 'TSp', - 'QaSp', - 'QiSp', - 'SxSp', - 'SpSp', - 'OSp', - 'NSp', - 'Oco', - 'UOc', - 'DOc', - 'TOc', - 'QaOc', - 'QiOc', - 'SxOc', - 'SpOc', - 'OOc', - 'NOc', - 'Noa', - 'UNo', - 'DNo', - 'TNo', - 'QaNo', - 'QiNo', - 'SxNo', - 'SpNo', - 'ONo', - 'NNo', - 'Ct', - 'UCt', +export const shortScaleAbbreviated = [ + '', + 'K', + 'M', + 'B', + 'T', + 'Qa', + 'Qi', + 'Sx', + 'Sp', + 'Oc', + 'No', + 'De', + 'UDe', + 'DDe', + 'TDe', + 'QaDe', + 'QiDe', + 'SxDe', + 'SpDe', + 'ODe', + 'NDe', + 'Vi', + 'UVi', + 'DVi', + 'TVi', + 'QaVi', + 'QiVi', + 'SxVi', + 'SpVi', + 'OVi', + 'NVi', + 'Tr', + 'UTr', + 'DTr', + 'TTr', + 'QaTr', + 'QiTr', + 'SxTr', + 'SpTr', + 'OTr', + 'NTr', + 'Qaa', + 'UQa', + 'DQa', + 'TQa', + 'QaQa', + 'QiQa', + 'SxQa', + 'SpQa', + 'OQa', + 'NQa', + 'Qia', + 'UQi', + 'DQi', + 'TQi', + 'QaQi', + 'QiQi', + 'SxQi', + 'SpQi', + 'OQi', + 'NQi', + 'Sxa', + 'USx', + 'DSx', + 'TSx', + 'QaSx', + 'QiSx', + 'SxSx', + 'SpSx', + 'OSx', + 'NSx', + 'Spa', + 'USp', + 'DSp', + 'TSp', + 'QaSp', + 'QiSp', + 'SxSp', + 'SpSp', + 'OSp', + 'NSp', + 'Oco', + 'UOc', + 'DOc', + 'TOc', + 'QaOc', + 'QiOc', + 'SxOc', + 'SpOc', + 'OOc', + 'NOc', + 'Noa', + 'UNo', + 'DNo', + 'TNo', + 'QaNo', + 'QiNo', + 'SxNo', + 'SpNo', + 'ONo', + 'NNo', + 'Ct', + 'UCt', ]; diff --git a/src/Data/Sectionheaders.js b/src/Data/Sectionheaders.js index 28b6f55..9c8e9ec 100644 --- a/src/Data/Sectionheaders.js +++ b/src/Data/Sectionheaders.js @@ -2,23 +2,23 @@ /** Display titles of the headers of the Cookie Monster settings section */ export const ConfigGroups = { - BarsColors: 'Bars/Colors', - Calculation: 'Calculation', - Notification: 'Notification', - Tooltip: 'Tooltips and additional insights', - Statistics: 'Statistics', - Notation: 'Notation', - Miscellaneous: 'Miscellaneous', + BarsColors: 'Bars/Colors', + Calculation: 'Calculation', + Notification: 'Notification', + Tooltip: 'Tooltips and additional insights', + Statistics: 'Statistics', + Notation: 'Notation', + Miscellaneous: 'Miscellaneous', }; /** Display titles of the headers of the notification section of the Cookie Monster settings */ export const ConfigGroupsNotification = { - NotificationGeneral: 'General Notifications', - NotificationGC: 'Golden Cookie', - NotificationFC: 'Fortune Cookie', - NotificationSea: 'Season Special', - NotificationGard: 'Garden Tick', - NotificationMagi: 'Full Magic Bar', - NotificationWrink: 'Wrinkler', - NotificationWrinkMax: 'Maximum Wrinklers', + NotificationGeneral: 'General Notifications', + NotificationGC: 'Golden Cookie', + NotificationFC: 'Fortune Cookie', + NotificationSea: 'Season Special', + NotificationGard: 'Garden Tick', + NotificationMagi: 'Full Magic Bar', + NotificationWrink: 'Wrinkler', + NotificationWrinkMax: 'Maximum Wrinklers', }; diff --git a/src/Data/SettingClasses.js b/src/Data/SettingClasses.js index 4273611..5c41036 100644 --- a/src/Data/SettingClasses.js +++ b/src/Data/SettingClasses.js @@ -3,52 +3,52 @@ /** The basic setting class */ export class Setting { - constructor(type, group) { - this.type = type; - this.group = group; - } + constructor(type, group) { + this.type = type; + this.group = group; + } } /** The standard toggle setting class */ export class SettingStandard extends Setting { - constructor(type, group, label, desc, toggle, func = null) { - super(type, group); - this.label = label; - this.desc = desc; - this.toggle = toggle; - if (func) { - this.func = func; - } - } + constructor(type, group, label, desc, toggle, func = null) { + super(type, group); + this.label = label; + this.desc = desc; + this.toggle = toggle; + if (func) { + this.func = func; + } + } } /** The colour picker setting class */ export class SettingColours extends Setting { - constructor(type, group, desc, func) { - super(type, group); - this.desc = desc; - this.func = func; - } + constructor(type, group, desc, func) { + super(type, group); + this.desc = desc; + this.func = func; + } } /** The volume level setting class */ export class SettingVolume extends Setting { - constructor(type, group, label, desc) { - super(type, group); - this.label = label; - this.desc = desc; - for (let i = 0; i < 101; i++) { - this.label[i] = `${i}%`; - } - } + constructor(type, group, label, desc) { + super(type, group); + this.label = label; + this.desc = desc; + for (let i = 0; i < 101; i++) { + this.label[i] = `${i}%`; + } + } } /** The number input setting class */ export class SettingInputNumber extends Setting { - constructor(type, group, label, desc, min, max) { - super(type, group); - this.label = label; - this.desc = desc; - this.min = min; - this.max = max; - } + constructor(type, group, label, desc, min, max) { + super(type, group); + this.label = label; + this.desc = desc; + this.min = min; + this.max = max; + } } diff --git a/src/Data/SettingsData.js b/src/Data/SettingsData.js index 7b48eed..aafe5bb 100644 --- a/src/Data/SettingsData.js +++ b/src/Data/SettingsData.js @@ -15,657 +15,738 @@ import RefreshScale from '../Disp/HelperFunctions/RefreshScale'; import UpdateColors from '../Disp/HelperFunctions/UpdateColors'; import { UpdateFavicon } from '../Disp/TabTitle/FavIcon'; import { - SettingStandard, SettingColours, SettingVolume, SettingInputNumber, + SettingStandard, + SettingColours, + SettingVolume, + SettingInputNumber, } from './SettingClasses'; /** This includes all options of CookieMonster and their relevant data */ const Config = { - // Barscolors - BotBar: new SettingStandard( - 'bool', - 'BarsColors', - ['Bottom Bar OFF', 'Bottom Bar ON'], - 'Building Information', - true, - function () { ToggleBotBar(); }, - ), - TimerBar: new SettingStandard( - 'bool', - 'BarsColors', - ['Timer Bar OFF', 'Timer Bar ON'], - 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', - true, - function () { ToggleTimerBar(); }, - ), - TimerBarPos: new SettingStandard( - 'bool', - 'BarsColors', - ['Timer Bar Position (Top Left)', 'Timer Bar Position (Bottom)'], - 'Placement of the Timer Bar', - false, - function () { ToggleTimerBarPos(); }, - ), - TimerBarOverlay: new SettingStandard( - 'bool', - 'BarsColors', - ['Timer Bar Overlay OFF', 'Timer Bar Overlay Only Seconds', 'Timer Bar Overlay Full'], - 'Overlay on timers displaying seconds and/or percentage left', - true, - ), - SortBuildings: new SettingStandard( - 'bool', - 'BarsColors', - ['Sort Buildings: Default', 'Sort Buildings: PP'], - 'Sort the display of buildings in either default order or by PP', - false, - function () { UpdateBuildings(); }, - ), - SortUpgrades: new SettingStandard( - 'bool', - 'BarsColors', - ['Sort Upgrades: Default', 'Sort Upgrades: PP'], - 'Sort the display of upgrades in either default order or by PP', - false, - function () { UpdateUpgrades(); }, - ), - BuildColor: new SettingStandard( - 'bool', - 'BarsColors', - ['Building Colors OFF', 'Building Colors ON'], - 'Color code buildings', - true, - function () { UpdateBuildings(); }, - ), - BulkBuildColor: new SettingStandard( - 'bool', - 'BarsColors', - ['Bulk Building Colors (Single Building Color)', 'Bulk Building Colors (Calculated Bulk Color)'], - 'Color code bulk buildings based on single buildings color or calculated bulk value color', - false, - function () { UpdateBuildings(); }, - ), - UpBarColor: new SettingStandard( - 'bool', - 'BarsColors', - ['Upgrade Colors/Bar OFF', 'Upgrade Colors with Bar ON', 'Upgrade Colors without Bar ON'], - 'Color code upgrades and optionally add a counter bar', - false, - function () { ToggleUpgradeBarAndColor(); }, - ), - Colors: new SettingColours( - 'color', - 'BarsColors', - { - Blue: 'Color Blue. Used to show better than best PP building, for Click Frenzy bar, and for various labels', - Green: 'Color Green. Used to show best PP building, for Blood Frenzy bar, and for various labels', - Yellow: 'Color Yellow. Used to show between best and worst PP buildings closer to best, for Frenzy bar, and for various labels', - Orange: 'Color Orange. Used to show between best and worst PP buildings closer to worst, for Next Reindeer bar, and for various labels', - Red: 'Color Red. Used to show worst PP building, for Clot bar, and for various labels', - Purple: 'Color Purple. Used to show worse than worst PP building, for Next Cookie bar, and for various labels', - Gray: 'Color Gray. Used to show negative or infinity PP, and for Next Cookie/Next Reindeer bar', - Pink: 'Color Pink. Used for Dragonflight bar', - Brown: 'Color Brown. Used for Dragon Harvest bar', - }, - function () { UpdateColors(); }, - ), - UpgradeBarFixedPos: new SettingStandard( - 'bool', - 'BarsColors', - ['Upgrade Bar Fixed Position OFF', 'Upgrade Bar Fixed Position ON'], - 'Lock the upgrade bar at top of the screen to prevent it from moving ofscreen when scrolling', - true, - function () { ToggleUpgradeBarFixedPos(); }, - ), + // Barscolors + BotBar: new SettingStandard( + 'bool', + 'BarsColors', + ['Bottom Bar OFF', 'Bottom Bar ON'], + 'Building Information', + true, + function () { + ToggleBotBar(); + }, + ), + TimerBar: new SettingStandard( + 'bool', + 'BarsColors', + ['Timer Bar OFF', 'Timer Bar ON'], + 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', + true, + function () { + ToggleTimerBar(); + }, + ), + TimerBarPos: new SettingStandard( + 'bool', + 'BarsColors', + ['Timer Bar Position (Top Left)', 'Timer Bar Position (Bottom)'], + 'Placement of the Timer Bar', + false, + function () { + ToggleTimerBarPos(); + }, + ), + TimerBarOverlay: new SettingStandard( + 'bool', + 'BarsColors', + [ + 'Timer Bar Overlay OFF', + 'Timer Bar Overlay Only Seconds', + 'Timer Bar Overlay Full', + ], + 'Overlay on timers displaying seconds and/or percentage left', + true, + ), + SortBuildings: new SettingStandard( + 'bool', + 'BarsColors', + ['Sort Buildings: Default', 'Sort Buildings: PP'], + 'Sort the display of buildings in either default order or by PP', + false, + function () { + UpdateBuildings(); + }, + ), + SortUpgrades: new SettingStandard( + 'bool', + 'BarsColors', + ['Sort Upgrades: Default', 'Sort Upgrades: PP'], + 'Sort the display of upgrades in either default order or by PP', + false, + function () { + UpdateUpgrades(); + }, + ), + BuildColor: new SettingStandard( + 'bool', + 'BarsColors', + ['Building Colors OFF', 'Building Colors ON'], + 'Color code buildings', + true, + function () { + UpdateBuildings(); + }, + ), + BulkBuildColor: new SettingStandard( + 'bool', + 'BarsColors', + [ + 'Bulk Building Colors (Single Building Color)', + 'Bulk Building Colors (Calculated Bulk Color)', + ], + 'Color code bulk buildings based on single buildings color or calculated bulk value color', + false, + function () { + UpdateBuildings(); + }, + ), + UpBarColor: new SettingStandard( + 'bool', + 'BarsColors', + [ + 'Upgrade Colors/Bar OFF', + 'Upgrade Colors with Bar ON', + 'Upgrade Colors without Bar ON', + ], + 'Color code upgrades and optionally add a counter bar', + false, + function () { + ToggleUpgradeBarAndColor(); + }, + ), + Colors: new SettingColours( + 'color', + 'BarsColors', + { + Blue: + 'Color Blue. Used to show better than best PP building, for Click Frenzy bar, and for various labels', + Green: + 'Color Green. Used to show best PP building, for Blood Frenzy bar, and for various labels', + Yellow: + 'Color Yellow. Used to show between best and worst PP buildings closer to best, for Frenzy bar, and for various labels', + Orange: + 'Color Orange. Used to show between best and worst PP buildings closer to worst, for Next Reindeer bar, and for various labels', + Red: + 'Color Red. Used to show worst PP building, for Clot bar, and for various labels', + Purple: + 'Color Purple. Used to show worse than worst PP building, for Next Cookie bar, and for various labels', + Gray: + 'Color Gray. Used to show negative or infinity PP, and for Next Cookie/Next Reindeer bar', + Pink: 'Color Pink. Used for Dragonflight bar', + Brown: 'Color Brown. Used for Dragon Harvest bar', + }, + function () { + UpdateColors(); + }, + ), + UpgradeBarFixedPos: new SettingStandard( + 'bool', + 'BarsColors', + ['Upgrade Bar Fixed Position OFF', 'Upgrade Bar Fixed Position ON'], + 'Lock the upgrade bar at top of the screen to prevent it from moving ofscreen when scrolling', + true, + function () { + ToggleUpgradeBarFixedPos(); + }, + ), - // Calculation - CalcWrink: new SettingStandard( - 'bool', - 'Calculation', - ['Calculate with Wrinklers OFF', 'Calculate with Wrinklers ON', 'Calculate with Single Fattest Wrinkler ON'], - 'Calculate times and average Cookies Per Second with (only the single non-shiny fattest) Wrinklers', - true, - ), - CPSMode: new SettingStandard( - 'bool', - 'Calculation', - ['Current Cookies Per Second', 'Average Cookies Per Second'], - 'Calculate times using current Cookies Per Second or average Cookies Per Second', - false, - ), - AvgCPSHist: new SettingStandard( - 'bool', - 'Calculation', - ['Average CPS for past 10s', 'Average CPS for past 15s', 'Average CPS for past 30s', 'Average CPS for past 1m', 'Average CPS for past 5m', 'Average CPS for past 10m', 'Average CPS for past 15m', 'Average CPS for past 30m'], - 'How much time average Cookies Per Second should consider', - false, - ), - AvgClicksHist: new SettingStandard( - 'bool', - 'Calculation', - ['Average Cookie Clicks for past 1s', 'Average Cookie Clicks for past 5s', 'Average Cookie Clicks for past 10s', 'Average Cookie Clicks for past 15s', 'Average Cookie Clicks for past 30s'], - 'How much time average Cookie Clicks should consider', - false, - ), - ColorPPBulkMode: new SettingStandard( - 'bool', - 'Calculation', - ['Color of PP (Compared to Single)', 'Color of PP (Compared to Bulk)'], - 'Color PP-values based on comparison with single purchase or with selected bulk-buy mode', - false, - function () { CachePP(); }, - ), - PPExcludeTop: new SettingStandard( - 'bool', - 'Calculation', - ["Don't Ignore Any", 'Ignore 1st Best', 'Ignore 1st and 2nd Best', 'Ignore 1st, 2nd and 3rd Best'], - 'Makes CookieMonster ignore the 1st, 2nd or 3rd best buildings in labeling and colouring PP values', - true, - ), - PPSecondsLowerLimit: new SettingInputNumber( - 'numscale', - 'Calculation', - 'Lower limit for PP (in seconds): ', - 'If a building or upgrade costs less than the specified seconds of CPS it will also be considered optimal and label it as such ("PP is less than xx seconds of CPS"); setting to 0 ignores this option', - 0, - Infinity, - ), - PPOnlyConsiderBuyable: new SettingStandard( - 'bool', - 'Calculation', - ["Don't Ignore Non-Buyable", 'Ignore Non-Buyable'], - "Makes CookieMonster label buildings and upgrades you can't buy right now red, useful in those situations where you just want to spend your full bank 'most optimally'", - true, - ), - ToolWarnBon: new SettingStandard( - 'bool', - 'Calculation', - ['Calculate Tooltip Warning With Bonus CPS OFF', 'Calculate Tooltip Warning With Bonus CPS ON'], - 'Calculate the warning with or without the bonus CPS you get from buying', - true, - ), + // Calculation + CalcWrink: new SettingStandard( + 'bool', + 'Calculation', + [ + 'Calculate with Wrinklers OFF', + 'Calculate with Wrinklers ON', + 'Calculate with Single Fattest Wrinkler ON', + ], + 'Calculate times and average Cookies Per Second with (only the single non-shiny fattest) Wrinklers', + true, + ), + CPSMode: new SettingStandard( + 'bool', + 'Calculation', + ['Current Cookies Per Second', 'Average Cookies Per Second'], + 'Calculate times using current Cookies Per Second or average Cookies Per Second', + false, + ), + AvgCPSHist: new SettingStandard( + 'bool', + 'Calculation', + [ + 'Average CPS for past 10s', + 'Average CPS for past 15s', + 'Average CPS for past 30s', + 'Average CPS for past 1m', + 'Average CPS for past 5m', + 'Average CPS for past 10m', + 'Average CPS for past 15m', + 'Average CPS for past 30m', + ], + 'How much time average Cookies Per Second should consider', + false, + ), + AvgClicksHist: new SettingStandard( + 'bool', + 'Calculation', + [ + 'Average Cookie Clicks for past 1s', + 'Average Cookie Clicks for past 5s', + 'Average Cookie Clicks for past 10s', + 'Average Cookie Clicks for past 15s', + 'Average Cookie Clicks for past 30s', + ], + 'How much time average Cookie Clicks should consider', + false, + ), + ColorPPBulkMode: new SettingStandard( + 'bool', + 'Calculation', + ['Color of PP (Compared to Single)', 'Color of PP (Compared to Bulk)'], + 'Color PP-values based on comparison with single purchase or with selected bulk-buy mode', + false, + function () { + CachePP(); + }, + ), + PPExcludeTop: new SettingStandard( + 'bool', + 'Calculation', + [ + "Don't Ignore Any", + 'Ignore 1st Best', + 'Ignore 1st and 2nd Best', + 'Ignore 1st, 2nd and 3rd Best', + ], + 'Makes CookieMonster ignore the 1st, 2nd or 3rd best buildings in labeling and colouring PP values', + true, + ), + PPSecondsLowerLimit: new SettingInputNumber( + 'numscale', + 'Calculation', + 'Lower limit for PP (in seconds): ', + 'If a building or upgrade costs less than the specified seconds of CPS it will also be considered optimal and label it as such ("PP is less than xx seconds of CPS"); setting to 0 ignores this option', + 0, + Infinity, + ), + PPOnlyConsiderBuyable: new SettingStandard( + 'bool', + 'Calculation', + ["Don't Ignore Non-Buyable", 'Ignore Non-Buyable'], + "Makes CookieMonster label buildings and upgrades you can't buy right now red, useful in those situations where you just want to spend your full bank 'most optimally'", + true, + ), + ToolWarnBon: new SettingStandard( + 'bool', + 'Calculation', + [ + 'Calculate Tooltip Warning With Bonus CPS OFF', + 'Calculate Tooltip Warning With Bonus CPS ON', + ], + 'Calculate the warning with or without the bonus CPS you get from buying', + true, + ), - // Notification - Title: new SettingStandard( - 'bool', - 'NotificationGeneral', - ['Title OFF', 'Title ON', 'Title Pinned Tab Highlight'], - 'Update title with Golden Cookie/Season Popup timers; pinned tab highlight only changes the title when a Golden Cookie/Season Popup spawns; "!" means that Golden Cookie/Reindeer can spawn', - true, - ), - GeneralSound: new SettingStandard( - 'bool', - 'NotificationGeneral', - ['Consider Game Volume Setting OFF', 'Consider Game Volume Setting ON'], - 'Turning this toggle to "off" makes Cookie Monster no longer consider the volume setting of the base game, allowing mod notifications to play with base game volume turned down', - true, - ), - GCNotification: new SettingStandard( - 'bool', - 'NotificationGC', - ['Notification OFF', 'Notification ON'], - 'Create a notification when Golden Cookie spawns', - true, - function () { CheckNotificationPermissions(CMOptions.GCNotification); }, - ), - GCFlash: new SettingStandard( - 'bool', - 'NotificationGC', - ['Flash OFF', 'Flash ON'], - 'Flash screen on Golden Cookie', - true, - ), - GCSound: new SettingStandard( - 'bool', - 'NotificationGC', - ['Sound OFF', 'Sound ON'], - 'Play a sound on Golden Cookie', - true, - ), - GCVolume: new SettingVolume( - 'vol', - 'NotificationGC', - [], - 'Volume', - ), - GCSoundURL: new SettingStandard( - 'url', - 'NotificationGC', - 'Sound URL:', - 'URL of the sound to be played when a Golden Cookie spawns', - ), - FortuneNotification: new SettingStandard( - 'bool', - 'NotificationFC', - ['Notification OFF', 'Notification ON'], - 'Create a notification when Fortune Cookie is on the Ticker', - true, - function () { CheckNotificationPermissions(CMOptions.FortuneNotification); }, - ), - FortuneFlash: new SettingStandard( - 'bool', - 'NotificationFC', - ['Flash OFF', 'Flash ON'], - 'Flash screen on Fortune Cookie', - true, - ), - FortuneSound: new SettingStandard( - 'bool', - 'NotificationFC', - ['Sound OFF', 'Sound ON'], - 'Play a sound on Fortune Cookie', - true, - ), - FortuneVolume: new SettingVolume( - 'vol', - 'NotificationFC', - [], - 'Volume', - ), + // Notification + Title: new SettingStandard( + 'bool', + 'NotificationGeneral', + ['Title OFF', 'Title ON', 'Title Pinned Tab Highlight'], + 'Update title with Golden Cookie/Season Popup timers; pinned tab highlight only changes the title when a Golden Cookie/Season Popup spawns; "!" means that Golden Cookie/Reindeer can spawn', + true, + ), + GeneralSound: new SettingStandard( + 'bool', + 'NotificationGeneral', + ['Consider Game Volume Setting OFF', 'Consider Game Volume Setting ON'], + 'Turning this toggle to "off" makes Cookie Monster no longer consider the volume setting of the base game, allowing mod notifications to play with base game volume turned down', + true, + ), + GCNotification: new SettingStandard( + 'bool', + 'NotificationGC', + ['Notification OFF', 'Notification ON'], + 'Create a notification when Golden Cookie spawns', + true, + function () { + CheckNotificationPermissions(CMOptions.GCNotification); + }, + ), + GCFlash: new SettingStandard( + 'bool', + 'NotificationGC', + ['Flash OFF', 'Flash ON'], + 'Flash screen on Golden Cookie', + true, + ), + GCSound: new SettingStandard( + 'bool', + 'NotificationGC', + ['Sound OFF', 'Sound ON'], + 'Play a sound on Golden Cookie', + true, + ), + GCVolume: new SettingVolume('vol', 'NotificationGC', [], 'Volume'), + GCSoundURL: new SettingStandard( + 'url', + 'NotificationGC', + 'Sound URL:', + 'URL of the sound to be played when a Golden Cookie spawns', + ), + FortuneNotification: new SettingStandard( + 'bool', + 'NotificationFC', + ['Notification OFF', 'Notification ON'], + 'Create a notification when Fortune Cookie is on the Ticker', + true, + function () { + CheckNotificationPermissions(CMOptions.FortuneNotification); + }, + ), + FortuneFlash: new SettingStandard( + 'bool', + 'NotificationFC', + ['Flash OFF', 'Flash ON'], + 'Flash screen on Fortune Cookie', + true, + ), + FortuneSound: new SettingStandard( + 'bool', + 'NotificationFC', + ['Sound OFF', 'Sound ON'], + 'Play a sound on Fortune Cookie', + true, + ), + FortuneVolume: new SettingVolume('vol', 'NotificationFC', [], 'Volume'), - FortuneSoundURL: new SettingStandard( - 'url', - 'NotificationFC', - 'Sound URL:', - 'URL of the sound to be played when the Ticker has a Fortune Cookie', - ), - SeaNotification: new SettingStandard( - 'bool', - 'NotificationSea', - ['Notification OFF', 'Notification ON'], - 'Create a notification on Season Popup', - true, - function () { CheckNotificationPermissions(CMOptions.SeaNotification); }, - ), - SeaFlash: new SettingStandard( - 'bool', - 'NotificationSea', - ['Flash OFF', 'Flash ON'], - 'Flash screen on Season Popup', - true, - ), - SeaSound: new SettingStandard( - 'bool', - 'NotificationSea', - ['Sound OFF', 'Sound ON'], - 'Play a sound on Season Popup', - true, - ), - SeaVolume: new SettingVolume( - 'vol', - 'NotificationSea', - [], - 'Volume', - ), - SeaSoundURL: new SettingStandard( - 'url', - 'NotificationSea', - 'Sound URL:', - 'URL of the sound to be played when a Season Special spawns', - ), - GardFlash: new SettingStandard( - 'bool', - 'NotificationGard', - ['Garden Tick Flash OFF', 'Flash ON'], - 'Flash screen on Garden Tick', - true, - ), - GardSound: new SettingStandard( - 'bool', - 'NotificationGard', - ['Sound OFF', 'Sound ON'], - 'Play a sound on Garden Tick', - true, - ), - GardVolume: new SettingVolume( - 'vol', - 'NotificationGard', - [], - 'Volume', - ), - GardSoundURL: new SettingStandard( - 'url', - 'NotificationGard', - 'Garden Tick Sound URL:', - 'URL of the sound to be played when the garden ticks', - ), - MagicNotification: new SettingStandard( - 'bool', - 'NotificationMagi', - ['Notification OFF', 'Notification ON'], - 'Create a notification when magic reaches maximum', - true, - function () { CheckNotificationPermissions(CMOptions.MagicNotification); }, - ), - MagicFlash: new SettingStandard( - 'bool', - 'NotificationMagi', - ['Flash OFF', 'Flash ON'], - 'Flash screen when magic reaches maximum', - true, - ), - MagicSound: new SettingStandard( - 'bool', - 'NotificationMagi', - ['Sound OFF', 'Sound ON'], - 'Play a sound when magic reaches maximum', - true, - ), - MagicVolume: new SettingVolume( - 'vol', - 'NotificationMagi', - [], - 'Volume', - ), - MagicSoundURL: new SettingStandard( - 'url', - 'NotificationMagi', - 'Sound URL:', - 'URL of the sound to be played when magic reaches maxium', - ), - WrinklerNotification: new SettingStandard( - 'bool', - 'NotificationWrink', - ['Notification OFF', 'Notification ON'], - 'Create a notification when a Wrinkler appears', - true, - function () { CheckNotificationPermissions(CMOptions.WrinklerNotification); }, - ), - WrinklerFlash: new SettingStandard( - 'bool', - 'NotificationWrink', - ['Flash OFF', 'Flash ON'], - 'Flash screen when a Wrinkler appears', - true, - ), - WrinklerSound: new SettingStandard( - 'bool', - 'NotificationWrink', - ['Sound OFF', 'Sound ON'], - 'Play a sound when a Wrinkler appears', - true, - ), - WrinklerVolume: new SettingVolume( - 'vol', - 'NotificationWrink', - [], - 'Volume', - ), - WrinklerSoundURL: new SettingStandard( - 'url', - 'NotificationWrink', - 'Sound URL:', - 'URL of the sound to be played when a Wrinkler appears', - ), - WrinklerMaxNotification: new SettingStandard( - 'bool', - 'NotificationWrinkMax', - ['Notification OFF', 'Notification ON'], - 'Create a notification when the maximum amount of Wrinklers has appeared', - true, - function () { CheckNotificationPermissions(CMOptions.WrinklerMaxNotification); }, - ), - WrinklerMaxFlash: new SettingStandard( - 'bool', - 'NotificationWrinkMax', - ['Flash OFF', 'Flash ON'], - 'Flash screen when the maximum amount of Wrinklers has appeared', - true, - ), - WrinklerMaxSound: new SettingStandard( - 'bool', - 'NotificationWrinkMax', - ['Sound OFF', 'Sound ON'], - 'Play a sound when the maximum amount of Wrinklers has appeared', - true, - ), - WrinklerMaxVolume: new SettingVolume( - 'vol', - 'NotificationWrinkMax', - [], - 'Volume', - ), - WrinklerMaxSoundURL: new SettingStandard( - 'url', - 'NotificationWrinkMax', - 'Sound URL:', - 'URL of the sound to be played when the maximum amount of Wrinklers has appeared', - ), + FortuneSoundURL: new SettingStandard( + 'url', + 'NotificationFC', + 'Sound URL:', + 'URL of the sound to be played when the Ticker has a Fortune Cookie', + ), + SeaNotification: new SettingStandard( + 'bool', + 'NotificationSea', + ['Notification OFF', 'Notification ON'], + 'Create a notification on Season Popup', + true, + function () { + CheckNotificationPermissions(CMOptions.SeaNotification); + }, + ), + SeaFlash: new SettingStandard( + 'bool', + 'NotificationSea', + ['Flash OFF', 'Flash ON'], + 'Flash screen on Season Popup', + true, + ), + SeaSound: new SettingStandard( + 'bool', + 'NotificationSea', + ['Sound OFF', 'Sound ON'], + 'Play a sound on Season Popup', + true, + ), + SeaVolume: new SettingVolume('vol', 'NotificationSea', [], 'Volume'), + SeaSoundURL: new SettingStandard( + 'url', + 'NotificationSea', + 'Sound URL:', + 'URL of the sound to be played when a Season Special spawns', + ), + GardFlash: new SettingStandard( + 'bool', + 'NotificationGard', + ['Garden Tick Flash OFF', 'Flash ON'], + 'Flash screen on Garden Tick', + true, + ), + GardSound: new SettingStandard( + 'bool', + 'NotificationGard', + ['Sound OFF', 'Sound ON'], + 'Play a sound on Garden Tick', + true, + ), + GardVolume: new SettingVolume('vol', 'NotificationGard', [], 'Volume'), + GardSoundURL: new SettingStandard( + 'url', + 'NotificationGard', + 'Garden Tick Sound URL:', + 'URL of the sound to be played when the garden ticks', + ), + MagicNotification: new SettingStandard( + 'bool', + 'NotificationMagi', + ['Notification OFF', 'Notification ON'], + 'Create a notification when magic reaches maximum', + true, + function () { + CheckNotificationPermissions(CMOptions.MagicNotification); + }, + ), + MagicFlash: new SettingStandard( + 'bool', + 'NotificationMagi', + ['Flash OFF', 'Flash ON'], + 'Flash screen when magic reaches maximum', + true, + ), + MagicSound: new SettingStandard( + 'bool', + 'NotificationMagi', + ['Sound OFF', 'Sound ON'], + 'Play a sound when magic reaches maximum', + true, + ), + MagicVolume: new SettingVolume('vol', 'NotificationMagi', [], 'Volume'), + MagicSoundURL: new SettingStandard( + 'url', + 'NotificationMagi', + 'Sound URL:', + 'URL of the sound to be played when magic reaches maxium', + ), + WrinklerNotification: new SettingStandard( + 'bool', + 'NotificationWrink', + ['Notification OFF', 'Notification ON'], + 'Create a notification when a Wrinkler appears', + true, + function () { + CheckNotificationPermissions(CMOptions.WrinklerNotification); + }, + ), + WrinklerFlash: new SettingStandard( + 'bool', + 'NotificationWrink', + ['Flash OFF', 'Flash ON'], + 'Flash screen when a Wrinkler appears', + true, + ), + WrinklerSound: new SettingStandard( + 'bool', + 'NotificationWrink', + ['Sound OFF', 'Sound ON'], + 'Play a sound when a Wrinkler appears', + true, + ), + WrinklerVolume: new SettingVolume('vol', 'NotificationWrink', [], 'Volume'), + WrinklerSoundURL: new SettingStandard( + 'url', + 'NotificationWrink', + 'Sound URL:', + 'URL of the sound to be played when a Wrinkler appears', + ), + WrinklerMaxNotification: new SettingStandard( + 'bool', + 'NotificationWrinkMax', + ['Notification OFF', 'Notification ON'], + 'Create a notification when the maximum amount of Wrinklers has appeared', + true, + function () { + CheckNotificationPermissions(CMOptions.WrinklerMaxNotification); + }, + ), + WrinklerMaxFlash: new SettingStandard( + 'bool', + 'NotificationWrinkMax', + ['Flash OFF', 'Flash ON'], + 'Flash screen when the maximum amount of Wrinklers has appeared', + true, + ), + WrinklerMaxSound: new SettingStandard( + 'bool', + 'NotificationWrinkMax', + ['Sound OFF', 'Sound ON'], + 'Play a sound when the maximum amount of Wrinklers has appeared', + true, + ), + WrinklerMaxVolume: new SettingVolume( + 'vol', + 'NotificationWrinkMax', + [], + 'Volume', + ), + WrinklerMaxSoundURL: new SettingStandard( + 'url', + 'NotificationWrinkMax', + 'Sound URL:', + 'URL of the sound to be played when the maximum amount of Wrinklers has appeared', + ), - // Tooltip - TooltipBuildUpgrade: new SettingStandard( - 'bool', - 'Tooltip', - ['Building/Upgrade Tooltip Information OFF', 'Building/Upgrade Tooltip Information ON'], - 'Extra information in Building/Upgrade tooltips', - true, - ), - TooltipAmor: new SettingStandard( - 'bool', - 'Tooltip', - ['Buildings Tooltip Amortization Information OFF', 'Buildings Tooltip Amortization Information ON'], - 'Add amortization information to buildings tooltip', - true, - ), - ToolWarnLucky: new SettingStandard( - 'bool', - 'Tooltip', - ['Tooltip Lucky Warning OFF', 'Tooltip Lucky Warning ON'], - 'A warning when buying if it will put the bank under the amount needed for max "Lucky!" rewards', - true, - ), - ToolWarnLuckyFrenzy: new SettingStandard( - 'bool', - 'Tooltip', - ['Tooltip Lucky Frenzy Warning OFF', 'Tooltip Lucky Frenzy Warning ON'], - 'A warning when buying if it will put the bank under the amount needed for max "Lucky!" (Frenzy) rewards', - true, - ), - ToolWarnConjure: new SettingStandard( - 'bool', - 'Tooltip', - ['Tooltip Conjure Warning OFF', 'Tooltip Conjure Warning ON'], - 'A warning when buying if it will put the bank under the amount needed for max "Conjure Baked Goods" rewards', - true, - ), - ToolWarnConjureFrenzy: new SettingStandard( - 'bool', - 'Tooltip', - ['Tooltip Conjure Frenzy Warning OFF', 'Tooltip Conjure Frenzy Warning ON'], - 'A warning when buying if it will put the bank under the amount needed for max "Conjure Baked Goods" rewards with Frenzy active', - true, - ), - ToolWarnEdifice: new SettingStandard( - 'bool', - 'Tooltip', - ['Tooltip Edifice Warning OFF', 'Tooltip Edifice Warning ON'], - 'A warning when buying if it will put the bank under the amount needed for "Spontaneous Edifice" to possibly give you your most expensive building', - true, - ), - ToolWarnUser: new SettingInputNumber( - 'numscale', - 'Tooltip', - 'Tooltip Warning At x times CPS: ', - 'Use this to show a customized warning if buying it will put the bank under the amount equal to value times cps; setting to 0 disables the function altogether', - 0, - Infinity, - ), - ToolWarnPos: new SettingStandard( - 'bool', - 'Tooltip', - ['Tooltip Warning Position (Left)', 'Tooltip Warning Position (Bottom)'], - 'Placement of the warning boxes', - false, - function () { ToggleToolWarnPos(); }, - ), - TooltipGrim: new SettingStandard( - 'bool', - 'Tooltip', - ['Grimoire Tooltip Information OFF', 'Grimoire Tooltip Information ON'], - 'Extra information in tooltip for grimoire', - true, - ), - TooltipWrink: new SettingStandard( - 'bool', - 'Tooltip', - ['Wrinkler Tooltip OFF', 'Wrinkler Tooltip ON'], - 'Shows the amount of cookies a wrinkler will give when popping it', - true, - ), - TooltipLump: new SettingStandard( - 'bool', - 'Tooltip', - ['Sugar Lump Tooltip OFF', 'Sugar Lump Tooltip ON'], - 'Shows the current Sugar Lump type in Sugar lump tooltip.', - true, - ), - TooltipPlots: new SettingStandard( - 'bool', - 'Tooltip', - ['Garden Plots Tooltip OFF', 'Garden Plots Tooltip ON'], - 'Shows a tooltip for plants that have a cookie reward.', - true, - ), - DragonAuraInfo: new SettingStandard( - 'bool', - 'Tooltip', - ['Extra Dragon Aura Info OFF', 'Extra Dragon Aura Info ON'], - 'Shows information about changes in CPS and costs in the dragon aura interface.', - true, - ), - TooltipAscendButton: new SettingStandard( - 'bool', - 'Tooltip', - ['Show Extra Info Ascend Tooltip OFF', 'Show Extra Info Ascend Tooltip ON'], - 'Shows additional info in the ascend tooltip', - true, - ), + // Tooltip + TooltipBuildUpgrade: new SettingStandard( + 'bool', + 'Tooltip', + [ + 'Building/Upgrade Tooltip Information OFF', + 'Building/Upgrade Tooltip Information ON', + ], + 'Extra information in Building/Upgrade tooltips', + true, + ), + TooltipAmor: new SettingStandard( + 'bool', + 'Tooltip', + [ + 'Buildings Tooltip Amortization Information OFF', + 'Buildings Tooltip Amortization Information ON', + ], + 'Add amortization information to buildings tooltip', + true, + ), + ToolWarnLucky: new SettingStandard( + 'bool', + 'Tooltip', + ['Tooltip Lucky Warning OFF', 'Tooltip Lucky Warning ON'], + 'A warning when buying if it will put the bank under the amount needed for max "Lucky!" rewards', + true, + ), + ToolWarnLuckyFrenzy: new SettingStandard( + 'bool', + 'Tooltip', + ['Tooltip Lucky Frenzy Warning OFF', 'Tooltip Lucky Frenzy Warning ON'], + 'A warning when buying if it will put the bank under the amount needed for max "Lucky!" (Frenzy) rewards', + true, + ), + ToolWarnConjure: new SettingStandard( + 'bool', + 'Tooltip', + ['Tooltip Conjure Warning OFF', 'Tooltip Conjure Warning ON'], + 'A warning when buying if it will put the bank under the amount needed for max "Conjure Baked Goods" rewards', + true, + ), + ToolWarnConjureFrenzy: new SettingStandard( + 'bool', + 'Tooltip', + ['Tooltip Conjure Frenzy Warning OFF', 'Tooltip Conjure Frenzy Warning ON'], + 'A warning when buying if it will put the bank under the amount needed for max "Conjure Baked Goods" rewards with Frenzy active', + true, + ), + ToolWarnEdifice: new SettingStandard( + 'bool', + 'Tooltip', + ['Tooltip Edifice Warning OFF', 'Tooltip Edifice Warning ON'], + 'A warning when buying if it will put the bank under the amount needed for "Spontaneous Edifice" to possibly give you your most expensive building', + true, + ), + ToolWarnUser: new SettingInputNumber( + 'numscale', + 'Tooltip', + 'Tooltip Warning At x times CPS: ', + 'Use this to show a customized warning if buying it will put the bank under the amount equal to value times cps; setting to 0 disables the function altogether', + 0, + Infinity, + ), + ToolWarnPos: new SettingStandard( + 'bool', + 'Tooltip', + ['Tooltip Warning Position (Left)', 'Tooltip Warning Position (Bottom)'], + 'Placement of the warning boxes', + false, + function () { + ToggleToolWarnPos(); + }, + ), + TooltipGrim: new SettingStandard( + 'bool', + 'Tooltip', + ['Grimoire Tooltip Information OFF', 'Grimoire Tooltip Information ON'], + 'Extra information in tooltip for grimoire', + true, + ), + TooltipWrink: new SettingStandard( + 'bool', + 'Tooltip', + ['Wrinkler Tooltip OFF', 'Wrinkler Tooltip ON'], + 'Shows the amount of cookies a wrinkler will give when popping it', + true, + ), + TooltipLump: new SettingStandard( + 'bool', + 'Tooltip', + ['Sugar Lump Tooltip OFF', 'Sugar Lump Tooltip ON'], + 'Shows the current Sugar Lump type in Sugar lump tooltip.', + true, + ), + TooltipPlots: new SettingStandard( + 'bool', + 'Tooltip', + ['Garden Plots Tooltip OFF', 'Garden Plots Tooltip ON'], + 'Shows a tooltip for plants that have a cookie reward.', + true, + ), + DragonAuraInfo: new SettingStandard( + 'bool', + 'Tooltip', + ['Extra Dragon Aura Info OFF', 'Extra Dragon Aura Info ON'], + 'Shows information about changes in CPS and costs in the dragon aura interface.', + true, + ), + TooltipAscendButton: new SettingStandard( + 'bool', + 'Tooltip', + ['Show Extra Info Ascend Tooltip OFF', 'Show Extra Info Ascend Tooltip ON'], + 'Shows additional info in the ascend tooltip', + true, + ), - // Statistics - Stats: new SettingStandard( - 'bool', - 'Statistics', - ['Statistics OFF', 'Statistics ON'], - 'Extra Cookie Monster statistics!', - true, - ), - MissingUpgrades: new SettingStandard( - 'bool', - 'Statistics', - ['Missing Upgrades OFF', 'Missing Upgrades ON'], - 'Shows Missing upgrades in Stats Menu. This feature can be laggy for users with a low amount of unlocked achievements.', - true, - ), - UpStats: new SettingStandard( - 'bool', - 'Statistics', - ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], - 'Default Game rate is once every 5 seconds', - false, - ), - TimeFormat: new SettingStandard( - 'bool', - 'Statistics', - ['Time XXd, XXh, XXm, XXs', 'Time XX:XX:XX:XX:XX'], - 'Change the time format', - false, - ), - DetailedTime: new SettingStandard( - 'bool', - 'Statistics', - ['Detailed Time OFF', 'Detailed Time ON'], - 'Change how time is displayed in certain statistics and tooltips', - true, - function () { ToggleDetailedTime(); }, - ), - GrimoireBar: new SettingStandard( - 'bool', - 'Statistics', - ['Grimoire Magic Meter Timer OFF', 'Grimoire Magic Meter Timer ON'], - 'A timer on how long before the Grimoire magic meter is full', - true, - ), - HeavenlyChipsTarget: new SettingInputNumber( - 'numscale', - 'Statistics', - 'Heavenly Chips Target: ', - 'Use this to set a Heavenly Chips target that will be counted towards in the "prestige" statsistics sections', - 1, - Infinity, - ), - ShowMissedGC: new SettingStandard( - 'bool', - 'Statistics', - ['Missed GC OFF', 'Missed GC ON'], - 'Show a stat in the statistics screen that counts how many Golden Cookies you have missed', - true, - ), + // Statistics + Stats: new SettingStandard( + 'bool', + 'Statistics', + ['Statistics OFF', 'Statistics ON'], + 'Extra Cookie Monster statistics!', + true, + ), + MissingUpgrades: new SettingStandard( + 'bool', + 'Statistics', + ['Missing Upgrades OFF', 'Missing Upgrades ON'], + 'Shows Missing upgrades in Stats Menu. This feature can be laggy for users with a low amount of unlocked achievements.', + true, + ), + UpStats: new SettingStandard( + 'bool', + 'Statistics', + ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], + 'Default Game rate is once every 5 seconds', + false, + ), + TimeFormat: new SettingStandard( + 'bool', + 'Statistics', + ['Time XXd, XXh, XXm, XXs', 'Time XX:XX:XX:XX:XX'], + 'Change the time format', + false, + ), + DetailedTime: new SettingStandard( + 'bool', + 'Statistics', + ['Detailed Time OFF', 'Detailed Time ON'], + 'Change how time is displayed in certain statistics and tooltips', + true, + function () { + ToggleDetailedTime(); + }, + ), + GrimoireBar: new SettingStandard( + 'bool', + 'Statistics', + ['Grimoire Magic Meter Timer OFF', 'Grimoire Magic Meter Timer ON'], + 'A timer on how long before the Grimoire magic meter is full', + true, + ), + HeavenlyChipsTarget: new SettingInputNumber( + 'numscale', + 'Statistics', + 'Heavenly Chips Target: ', + 'Use this to set a Heavenly Chips target that will be counted towards in the "prestige" statsistics sections', + 1, + Infinity, + ), + ShowMissedGC: new SettingStandard( + 'bool', + 'Statistics', + ['Missed GC OFF', 'Missed GC ON'], + 'Show a stat in the statistics screen that counts how many Golden Cookies you have missed', + true, + ), - // Notation - Scale: new SettingStandard( - 'bool', - 'Notation', - ['Game\'s Setting Scale', 'Metric', 'Short Scale', 'Short Scale (Abbreviated)', 'Scientific Notation', 'Engineering Notation'], - 'Change how long numbers are handled', - false, - function () { RefreshScale(); }, - ), - ScaleDecimals: new SettingStandard( - 'bool', - 'Notation', - ['1 decimals', '2 decimals', '3 decimals'], - 'Set the number of decimals used when applicable', - false, - function () { RefreshScale(); }, - ), - ScaleSeparator: new SettingStandard( - 'bool', - 'Notation', - ['. for decimals (Standard)', '. for thousands'], - 'Set the separator used for decimals and thousands', - false, - function () { RefreshScale(); }, - ), - ScaleCutoff: new SettingInputNumber( - 'numscale', - 'Notation', - 'Notation Cut-off Point: ', - 'The number from which CookieMonster will start formatting numbers based on chosen scale. Standard is 999,999. Setting this above 999,999,999 might break certain notations', - 1, - 999999999, - ), + // Notation + Scale: new SettingStandard( + 'bool', + 'Notation', + [ + "Game's Setting Scale", + 'Metric', + 'Short Scale', + 'Short Scale (Abbreviated)', + 'Scientific Notation', + 'Engineering Notation', + ], + 'Change how long numbers are handled', + false, + function () { + RefreshScale(); + }, + ), + ScaleDecimals: new SettingStandard( + 'bool', + 'Notation', + ['1 decimals', '2 decimals', '3 decimals'], + 'Set the number of decimals used when applicable', + false, + function () { + RefreshScale(); + }, + ), + ScaleSeparator: new SettingStandard( + 'bool', + 'Notation', + ['. for decimals (Standard)', '. for thousands'], + 'Set the separator used for decimals and thousands', + false, + function () { + RefreshScale(); + }, + ), + ScaleCutoff: new SettingInputNumber( + 'numscale', + 'Notation', + 'Notation Cut-off Point: ', + 'The number from which CookieMonster will start formatting numbers based on chosen scale. Standard is 999,999. Setting this above 999,999,999 might break certain notations', + 1, + 999999999, + ), - // Miscellaneous - GCTimer: new SettingStandard( - 'bool', - 'Miscellaneous', - ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], - 'A timer on the Golden Cookie when it has been spawned', - true, - function () { ToggleGCTimer(); }, - ), - Favicon: new SettingStandard( - 'bool', - 'Miscellaneous', - ['Favicon OFF', 'Favicon ON'], - 'Update favicon with Golden/Wrath Cookie', - true, - function () { UpdateFavicon(); }, - ), - WrinklerButtons: new SettingStandard( - 'bool', - 'Miscellaneous', - ['Extra Buttons OFF', 'Extra Buttons ON'], - 'Show buttons for popping wrinklers at bottom of cookie section', - true, - function () { ToggleWrinklerButtons(); }, - ), - BulkBuyBlock: new SettingStandard( - 'bool', - 'Miscellaneous', - ['Block Bulk Buying OFF', 'Block Bulk Buying ON'], - "Block clicking bulk buying when you can't buy all. This prevents buying 7 of a building when you are in buy-10 or buy-100 mode.", - true, - ), + // Miscellaneous + GCTimer: new SettingStandard( + 'bool', + 'Miscellaneous', + ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], + 'A timer on the Golden Cookie when it has been spawned', + true, + function () { + ToggleGCTimer(); + }, + ), + Favicon: new SettingStandard( + 'bool', + 'Miscellaneous', + ['Favicon OFF', 'Favicon ON'], + 'Update favicon with Golden/Wrath Cookie', + true, + function () { + UpdateFavicon(); + }, + ), + WrinklerButtons: new SettingStandard( + 'bool', + 'Miscellaneous', + ['Extra Buttons OFF', 'Extra Buttons ON'], + 'Show buttons for popping wrinklers at bottom of cookie section', + true, + function () { + ToggleWrinklerButtons(); + }, + ), + BulkBuyBlock: new SettingStandard( + 'bool', + 'Miscellaneous', + ['Block Bulk Buying OFF', 'Block Bulk Buying ON'], + "Block clicking bulk buying when you can't buy all. This prevents buying 7 of a building when you are in buy-10 or buy-100 mode.", + true, + ), }; export default Config; diff --git a/src/Data/SettingsDefault.js b/src/Data/SettingsDefault.js index de84c31..65da2d4 100644 --- a/src/Data/SettingsDefault.js +++ b/src/Data/SettingsDefault.js @@ -1,97 +1,133 @@ /** This array describes all default settings */ const ConfigDefault = { - BotBar: 1, - TimerBar: 1, - TimerBarPos: 0, - TimerBarOverlay: 2, - BuildColor: 1, - BulkBuildColor: 0, - UpBarColor: 1, - UpgradeBarFixedPos: 1, - CalcWrink: 0, - CPSMode: 1, - AvgCPSHist: 3, - AvgClicksHist: 0, - ColorPPBulkMode: 1, - PPExcludeTop: 0, - PPSecondsLowerLimit: 0, - PPOnlyConsiderBuyable: 0, - ToolWarnBon: 0, - Title: 1, - GeneralSound: 1, - GCNotification: 0, - GCFlash: 1, - GCSound: 1, - GCVolume: 100, - GCSoundURL: 'https://freesound.org/data/previews/66/66717_931655-lq.mp3', - FortuneNotification: 0, - FortuneFlash: 1, - FortuneSound: 1, - FortuneVolume: 100, - FortuneSoundURL: 'https://freesound.org/data/previews/174/174027_3242494-lq.mp3', - SeaNotification: 0, - SeaFlash: 1, - SeaSound: 1, - SeaVolume: 100, - SeaSoundURL: 'https://www.freesound.org/data/previews/121/121099_2193266-lq.mp3', - GardFlash: 1, - GardSound: 1, - GardVolume: 100, - GardSoundURL: 'https://freesound.org/data/previews/103/103046_861714-lq.mp3', - MagicNotification: 0, - MagicFlash: 1, - MagicSound: 1, - MagicVolume: 100, - MagicSoundURL: 'https://freesound.org/data/previews/221/221683_1015240-lq.mp3', - WrinklerNotification: 0, - WrinklerFlash: 1, - WrinklerSound: 1, - WrinklerVolume: 100, - WrinklerSoundURL: 'https://freesound.org/data/previews/124/124186_8043-lq.mp3', - WrinklerMaxNotification: 0, - WrinklerMaxFlash: 1, - WrinklerMaxSound: 1, - WrinklerMaxVolume: 100, - WrinklerMaxSoundURL: 'https://freesound.org/data/previews/152/152743_15663-lq.mp3', - TooltipBuildUpgrade: 1, - TooltipAmor: 0, - ToolWarnLucky: 1, - ToolWarnLuckyFrenzy: 1, - ToolWarnConjure: 1, - ToolWarnConjureFrenzy: 1, - ToolWarnEdifice: 1, - ToolWarnUser: 0, - ToolWarnPos: 1, - TooltipGrim: 1, - TooltipWrink: 1, - TooltipLump: 1, - TooltipPlots: 1, - DragonAuraInfo: 1, - TooltipAscendButton: 1, - Stats: 1, - MissingUpgrades: 1, - UpStats: 1, - TimeFormat: 0, - DetailedTime: 1, - GrimoireBar: 1, - HeavenlyChipsTarget: 1, - ShowMissedGC: 1, - Scale: 2, - ScaleDecimals: 2, - ScaleSeparator: 0, - ScaleCutoff: 999999, - Colors: { - Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3', Pink: '#ff1493', Brown: '#8b4513', - }, - SortBuildings: 0, - SortUpgrades: 0, - GCTimer: 1, - Favicon: 1, - WrinklerButtons: 1, - BulkBuyBlock: 0, - Header: { - BarsColors: 1, Calculation: 1, Notification: 1, NotificationGeneral: 1, NotificationGC: 1, NotificationFC: 1, NotificationSea: 1, NotificationGard: 1, NotificationMagi: 1, NotificationWrink: 1, NotificationWrinkMax: 1, Tooltip: 1, Statistics: 1, Notation: 1, Miscellaneous: 1, Lucky: 1, Chain: 1, Spells: 1, Garden: 1, Prestige: 1, Wrink: 1, Sea: 1, Misc: 1, InfoTab: 1, - }, + BotBar: 1, + TimerBar: 1, + TimerBarPos: 0, + TimerBarOverlay: 2, + BuildColor: 1, + BulkBuildColor: 0, + UpBarColor: 1, + UpgradeBarFixedPos: 1, + CalcWrink: 0, + CPSMode: 1, + AvgCPSHist: 3, + AvgClicksHist: 0, + ColorPPBulkMode: 1, + PPExcludeTop: 0, + PPSecondsLowerLimit: 0, + PPOnlyConsiderBuyable: 0, + ToolWarnBon: 0, + Title: 1, + GeneralSound: 1, + GCNotification: 0, + GCFlash: 1, + GCSound: 1, + GCVolume: 100, + GCSoundURL: 'https://freesound.org/data/previews/66/66717_931655-lq.mp3', + FortuneNotification: 0, + FortuneFlash: 1, + FortuneSound: 1, + FortuneVolume: 100, + FortuneSoundURL: + 'https://freesound.org/data/previews/174/174027_3242494-lq.mp3', + SeaNotification: 0, + SeaFlash: 1, + SeaSound: 1, + SeaVolume: 100, + SeaSoundURL: + 'https://www.freesound.org/data/previews/121/121099_2193266-lq.mp3', + GardFlash: 1, + GardSound: 1, + GardVolume: 100, + GardSoundURL: 'https://freesound.org/data/previews/103/103046_861714-lq.mp3', + MagicNotification: 0, + MagicFlash: 1, + MagicSound: 1, + MagicVolume: 100, + MagicSoundURL: + 'https://freesound.org/data/previews/221/221683_1015240-lq.mp3', + WrinklerNotification: 0, + WrinklerFlash: 1, + WrinklerSound: 1, + WrinklerVolume: 100, + WrinklerSoundURL: + 'https://freesound.org/data/previews/124/124186_8043-lq.mp3', + WrinklerMaxNotification: 0, + WrinklerMaxFlash: 1, + WrinklerMaxSound: 1, + WrinklerMaxVolume: 100, + WrinklerMaxSoundURL: + 'https://freesound.org/data/previews/152/152743_15663-lq.mp3', + TooltipBuildUpgrade: 1, + TooltipAmor: 0, + ToolWarnLucky: 1, + ToolWarnLuckyFrenzy: 1, + ToolWarnConjure: 1, + ToolWarnConjureFrenzy: 1, + ToolWarnEdifice: 1, + ToolWarnUser: 0, + ToolWarnPos: 1, + TooltipGrim: 1, + TooltipWrink: 1, + TooltipLump: 1, + TooltipPlots: 1, + DragonAuraInfo: 1, + TooltipAscendButton: 1, + Stats: 1, + MissingUpgrades: 1, + UpStats: 1, + TimeFormat: 0, + DetailedTime: 1, + GrimoireBar: 1, + HeavenlyChipsTarget: 1, + ShowMissedGC: 1, + Scale: 2, + ScaleDecimals: 2, + ScaleSeparator: 0, + ScaleCutoff: 999999, + Colors: { + Blue: '#4bb8f0', + Green: '#00ff00', + Yellow: '#ffff00', + Orange: '#ff7f00', + Red: '#ff0000', + Purple: '#ff00ff', + Gray: '#b3b3b3', + Pink: '#ff1493', + Brown: '#8b4513', + }, + SortBuildings: 0, + SortUpgrades: 0, + GCTimer: 1, + Favicon: 1, + WrinklerButtons: 1, + BulkBuyBlock: 0, + Header: { + BarsColors: 1, + Calculation: 1, + Notification: 1, + NotificationGeneral: 1, + NotificationGC: 1, + NotificationFC: 1, + NotificationSea: 1, + NotificationGard: 1, + NotificationMagi: 1, + NotificationWrink: 1, + NotificationWrinkMax: 1, + Tooltip: 1, + Statistics: 1, + Notation: 1, + Miscellaneous: 1, + Lucky: 1, + Chain: 1, + Spells: 1, + Garden: 1, + Prestige: 1, + Wrink: 1, + Sea: 1, + Misc: 1, + InfoTab: 1, + }, }; export default ConfigDefault; diff --git a/src/Disp/BeautifyAndFormatting/BeautifyFormatting.js b/src/Disp/BeautifyAndFormatting/BeautifyFormatting.js index 581a39f..976f679 100644 --- a/src/Disp/BeautifyAndFormatting/BeautifyFormatting.js +++ b/src/Disp/BeautifyAndFormatting/BeautifyFormatting.js @@ -4,7 +4,10 @@ import { CMOptions } from '../../Config/VariablesAndData'; import { metric, shortScale, shortScaleAbbreviated } from '../../Data/Scales'; import { BackupFunctions } from '../../Main/VariablesAndData'; import { - ColorGreen, ColorOrange, ColorRed, ColorYellow, + ColorGreen, + ColorOrange, + ColorRed, + ColorYellow, } from '../VariablesAndData'; /** @@ -15,53 +18,70 @@ import { * @returns {string} Formatted number */ export function Beautify(num, floats, forced) { - const decimals = CMOptions.ScaleDecimals + 1; - if (num === Infinity) { - return 'Infinity'; - } if (typeof num === 'undefined') { - return '0'; - } if (CMOptions.Scale === 0) { - return BackupFunctions.Beautify(num, floats); - } if (Number.isFinite(num)) { - let answer = ''; - if (num === 0) { - return num.toString(); - } if (num > 0.001 && num < CMOptions.ScaleCutoff) { - if (CMOptions.ScaleSeparator) answer = num.toLocaleString('nl'); - else answer = num.toLocaleString('en'); - return answer; - } if (CMOptions.Scale === 4 && !forced || forced === 4) { // Scientific notation, 123456789 => 1.235E+8 - answer = num.toExponential(decimals).toString().replace('e', 'E'); - } else { - const exponential = num.toExponential().toString(); - const AmountOfTenPowerThree = Math.floor(exponential.slice(exponential.indexOf('e') + 1) / 3); - answer = (num / Number(`1e${AmountOfTenPowerThree * 3}`)).toFixed(decimals); - // answer is now "xxx.xx" (e.g., 123456789 would be 123.46) - if (CMOptions.Scale === 1 && !forced || forced === 1) { // Metric scale, 123456789 => 123.457 M - if (num >= 0.01 && num < Number(`1e${metric.length * 3}`)) { - answer += ` ${metric[AmountOfTenPowerThree]}`; - } else answer = Beautify(num, 0, 4); // If number is too large or little, revert to scientific notation - } else if (CMOptions.Scale === 2 && !forced || forced === 2) { // Short scale, 123456789 => 123.457 M - if (num >= 0.01 && num < Number(`1e${shortScale.length * 3}`)) { - answer += ` ${shortScale[AmountOfTenPowerThree]}`; - } else answer = Beautify(num, 0, 4); // If number is too large or little, revert to scientific notation - } else if (CMOptions.Scale === 3 && !forced || forced === 3) { // Short scale, 123456789 => 123.457 M - if (num >= 0.01 && num < Number(`1e${shortScaleAbbreviated.length * 3}`)) { - answer += ` ${shortScaleAbbreviated[AmountOfTenPowerThree]}`; - } else answer = Beautify(num, 0, 4); // If number is too large or little, revert to scientific notation - } else if (CMOptions.Scale === 5 && !forced || forced === 5) { // Engineering notation, 123456789 => 123.457E+6 - answer += `E${AmountOfTenPowerThree * 3}`; - } - } - if (answer === '') { - console.log(`Could not beautify number with CM.Disp.Beautify: ${num}`); - answer = BackupFunctions.Beautify(num, floats); - } - if (CMOptions.ScaleSeparator) answer = answer.replace('.', ','); - return answer; - } - console.log(`Could not beautify number with CM.Disp.Beautify: ${num}`); - return BackupFunctions.Beautify(num, floats); + const decimals = CMOptions.ScaleDecimals + 1; + if (num === Infinity) { + return 'Infinity'; + } + if (typeof num === 'undefined') { + return '0'; + } + if (CMOptions.Scale === 0) { + return BackupFunctions.Beautify(num, floats); + } + if (Number.isFinite(num)) { + let answer = ''; + if (num === 0) { + return num.toString(); + } + if (num > 0.001 && num < CMOptions.ScaleCutoff) { + if (CMOptions.ScaleSeparator) answer = num.toLocaleString('nl'); + else answer = num.toLocaleString('en'); + return answer; + } + if ((CMOptions.Scale === 4 && !forced) || forced === 4) { + // Scientific notation, 123456789 => 1.235E+8 + answer = num.toExponential(decimals).toString().replace('e', 'E'); + } else { + const exponential = num.toExponential().toString(); + const AmountOfTenPowerThree = Math.floor( + exponential.slice(exponential.indexOf('e') + 1) / 3, + ); + answer = (num / Number(`1e${AmountOfTenPowerThree * 3}`)).toFixed( + decimals, + ); + // answer is now "xxx.xx" (e.g., 123456789 would be 123.46) + if ((CMOptions.Scale === 1 && !forced) || forced === 1) { + // Metric scale, 123456789 => 123.457 M + if (num >= 0.01 && num < Number(`1e${metric.length * 3}`)) { + answer += ` ${metric[AmountOfTenPowerThree]}`; + } else answer = Beautify(num, 0, 4); // If number is too large or little, revert to scientific notation + } else if ((CMOptions.Scale === 2 && !forced) || forced === 2) { + // Short scale, 123456789 => 123.457 M + if (num >= 0.01 && num < Number(`1e${shortScale.length * 3}`)) { + answer += ` ${shortScale[AmountOfTenPowerThree]}`; + } else answer = Beautify(num, 0, 4); // If number is too large or little, revert to scientific notation + } else if ((CMOptions.Scale === 3 && !forced) || forced === 3) { + // Short scale, 123456789 => 123.457 M + if ( + num >= 0.01 && + num < Number(`1e${shortScaleAbbreviated.length * 3}`) + ) { + answer += ` ${shortScaleAbbreviated[AmountOfTenPowerThree]}`; + } else answer = Beautify(num, 0, 4); // If number is too large or little, revert to scientific notation + } else if ((CMOptions.Scale === 5 && !forced) || forced === 5) { + // Engineering notation, 123456789 => 123.457E+6 + answer += `E${AmountOfTenPowerThree * 3}`; + } + } + if (answer === '') { + console.log(`Could not beautify number with CM.Disp.Beautify: ${num}`); + answer = BackupFunctions.Beautify(num, floats); + } + if (CMOptions.ScaleSeparator) answer = answer.replace('.', ','); + return answer; + } + console.log(`Could not beautify number with CM.Disp.Beautify: ${num}`); + return BackupFunctions.Beautify(num, floats); } /** @@ -71,30 +91,36 @@ export function Beautify(num, floats, forced) { * @returns {string} Formatted time */ export function FormatTime(time, longFormat) { - if (time === Infinity) return time; - time = Math.ceil(time); - const y = Math.floor(time / 31557600); - const d = Math.floor(time % 31557600 / 86400); - const h = Math.floor(time % 86400 / 3600); - const m = Math.floor(time % 3600 / 60); - const s = Math.floor(time % 60); - let str = ''; - if (CMOptions.TimeFormat) { - if (time > 3155760000) return 'XX:XX:XX:XX:XX'; - str += `${(y < 10 ? '0' : '') + y}:`; - str += `${(d < 10 ? '0' : '') + d}:`; - str += `${(h < 10 ? '0' : '') + h}:`; - str += `${(m < 10 ? '0' : '') + m}:`; - str += (s < 10 ? '0' : '') + s; - } else { - if (time > 777600000) return longFormat ? 'Over 9000 days!' : '>9000d'; - str += (y > 0 ? `${y + (longFormat ? (y === 1 ? ' year' : ' years') : 'y')}, ` : ''); - str += (d > 0 ? `${d + (longFormat ? (d === 1 ? ' day' : ' days') : 'd')}, ` : ''); - if (str.length > 0 || h > 0) str += `${h + (longFormat ? (h === 1 ? ' hour' : ' hours') : 'h')}, `; - if (str.length > 0 || m > 0) str += `${m + (longFormat ? (m === 1 ? ' minute' : ' minutes') : 'm')}, `; - str += s + (longFormat ? (s === 1 ? ' second' : ' seconds') : 's'); - } - return str; + if (time === Infinity) return time; + time = Math.ceil(time); + const y = Math.floor(time / 31557600); + const d = Math.floor((time % 31557600) / 86400); + const h = Math.floor((time % 86400) / 3600); + const m = Math.floor((time % 3600) / 60); + const s = Math.floor(time % 60); + let str = ''; + if (CMOptions.TimeFormat) { + if (time > 3155760000) return 'XX:XX:XX:XX:XX'; + str += `${(y < 10 ? '0' : '') + y}:`; + str += `${(d < 10 ? '0' : '') + d}:`; + str += `${(h < 10 ? '0' : '') + h}:`; + str += `${(m < 10 ? '0' : '') + m}:`; + str += (s < 10 ? '0' : '') + s; + } else { + if (time > 777600000) return longFormat ? 'Over 9000 days!' : '>9000d'; + str += + y > 0 + ? `${y + (longFormat ? (y === 1 ? ' year' : ' years') : 'y')}, ` + : ''; + str += + d > 0 ? `${d + (longFormat ? (d === 1 ? ' day' : ' days') : 'd')}, ` : ''; + if (str.length > 0 || h > 0) + str += `${h + (longFormat ? (h === 1 ? ' hour' : ' hours') : 'h')}, `; + if (str.length > 0 || m > 0) + str += `${m + (longFormat ? (m === 1 ? ' minute' : ' minutes') : 'm')}, `; + str += s + (longFormat ? (s === 1 ? ' second' : ' seconds') : 's'); + } + return str; } /** @@ -103,17 +129,17 @@ export function FormatTime(time, longFormat) { * @returns {{string, string}} {text, color} Both the formatted time and color as strings in an array */ export function GetTimeColor(time) { - let color; - let text; - if (time <= 0) { - if (CMOptions.TimeFormat) text = '00:00:00:00:00'; - else text = 'Done!'; - color = ColorGreen; - } else { - text = FormatTime(time); - if (time > 300) color = ColorRed; - else if (time > 60) color = ColorOrange; - else color = ColorYellow; - } - return { text, color }; + let color; + let text; + if (time <= 0) { + if (CMOptions.TimeFormat) text = '00:00:00:00:00'; + else text = 'Done!'; + color = ColorGreen; + } else { + text = FormatTime(time); + if (time > 300) color = ColorRed; + else if (time > 60) color = ColorOrange; + else color = ColorYellow; + } + return { text, color }; } diff --git a/src/Disp/BuildingsUpgrades/Buildings.js b/src/Disp/BuildingsUpgrades/Buildings.js index f2b9cca..2fef533 100644 --- a/src/Disp/BuildingsUpgrades/Buildings.js +++ b/src/Disp/BuildingsUpgrades/Buildings.js @@ -1,4 +1,8 @@ -import { CacheObjects1, CacheObjects10, CacheObjects100 } from '../../Cache/VariablesAndData'; +import { + CacheObjects1, + CacheObjects10, + CacheObjects100, +} from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import BuildingSell from '../../Sim/SimulationEvents/SellBuilding'; import { Beautify } from '../BeautifyAndFormatting/BeautifyFormatting'; @@ -14,68 +18,79 @@ import { Colors, LastTargetBuildings } from '../VariablesAndData'; * And by changes in CM.Options.BuildColor, CM.Options.SortBuild & CM.Data.Config.BulkBuildColor */ export default function UpdateBuildings() { - let target = Game.buyBulk; - if (Game.buyMode === 1) { - LastTargetBuildings = target; - } else { - target = LastTargetBuildings; - } - if (target === 1) target = CacheObjects1; - else if (target === 10) target = CacheObjects10; - else if (target === 100) target = CacheObjects100; + let target = Game.buyBulk; + if (Game.buyMode === 1) { + LastTargetBuildings = target; + } else { + target = LastTargetBuildings; + } + if (target === 1) target = CacheObjects1; + else if (target === 10) target = CacheObjects10; + else if (target === 100) target = CacheObjects100; - if (Game.buyMode === 1) { - if (CMOptions.BuildColor === 1) { - for (const i of Object.keys(target)) { - l(`productPrice${Game.Objects[i].id}`).style.color = CMOptions.Colors[target[i].color]; - } - } else { - for (const i of Object.keys(Game.Objects)) { - l(`productPrice${Game.Objects[i].id}`).style.removeProperty('color'); - } - } - } else if (Game.buyMode === -1) { - for (const i of Object.keys(CacheObjects1)) { - const o = Game.Objects[i]; - l(`productPrice${o.id}`).style.color = ''; - /* - * Fix sell price displayed in the object in the store. - * - * The buildings sell price displayed by the game itself (without any mod) is incorrect. - * The following line of code fixes this issue, and can be safely removed when the game gets fixed. - * - * This issue is extensively detailed here: https://github.com/Aktanusa/CookieMonster/issues/359#issuecomment-735658262 - */ - l(`productPrice${o.id}`).innerHTML = Beautify(BuildingSell(o, o.basePrice, o.amount, o.free, Game.buyBulk, 1)); - } - } + if (Game.buyMode === 1) { + if (CMOptions.BuildColor === 1) { + for (const i of Object.keys(target)) { + l(`productPrice${Game.Objects[i].id}`).style.color = + CMOptions.Colors[target[i].color]; + } + } else { + for (const i of Object.keys(Game.Objects)) { + l(`productPrice${Game.Objects[i].id}`).style.removeProperty('color'); + } + } + } else if (Game.buyMode === -1) { + for (const i of Object.keys(CacheObjects1)) { + const o = Game.Objects[i]; + l(`productPrice${o.id}`).style.color = ''; + /* + * Fix sell price displayed in the object in the store. + * + * The buildings sell price displayed by the game itself (without any mod) is incorrect. + * The following line of code fixes this issue, and can be safely removed when the game gets fixed. + * + * This issue is extensively detailed here: https://github.com/Aktanusa/CookieMonster/issues/359#issuecomment-735658262 + */ + l(`productPrice${o.id}`).innerHTML = Beautify( + BuildingSell(o, o.basePrice, o.amount, o.free, Game.buyBulk, 1), + ); + } + } - // Build array of pointers, sort by pp, use array index (+2) as the grid row number - // (grid rows are 1-based indexing, and row 1 is the bulk buy/sell options) - // This regulates sorting of buildings - if (Game.buyMode === 1 && CMOptions.SortBuildings) { - const arr = Object.keys(target).map((k) => { - const o = target[k]; - o.name = k; - o.id = Game.Objects[k].id; - return o; - }); + // Build array of pointers, sort by pp, use array index (+2) as the grid row number + // (grid rows are 1-based indexing, and row 1 is the bulk buy/sell options) + // This regulates sorting of buildings + if (Game.buyMode === 1 && CMOptions.SortBuildings) { + const arr = Object.keys(target).map((k) => { + const o = target[k]; + o.name = k; + o.id = Game.Objects[k].id; + return o; + }); - arr.sort(function (a, b) { return (Colors.indexOf(a.color) > Colors.indexOf(b.color) ? 1 : (Colors.indexOf(a.color) < Colors.indexOf(b.color) ? -1 : (a.pp < b.pp) ? -1 : 0)); }); + arr.sort(function (a, b) { + return Colors.indexOf(a.color) > Colors.indexOf(b.color) + ? 1 + : Colors.indexOf(a.color) < Colors.indexOf(b.color) + ? -1 + : a.pp < b.pp + ? -1 + : 0; + }); - for (let x = 0; x < arr.length; x++) { - Game.Objects[arr[x].name].l.style.gridRow = `${x + 2}/${x + 2}`; - } - } else { - const arr = Object.keys(CacheObjects1).map((k) => { - const o = CacheObjects1[k]; - o.name = k; - o.id = Game.Objects[k].id; - return o; - }); - arr.sort((a, b) => a.id - b.id); - for (let x = 0; x < arr.length; x++) { - Game.Objects[arr[x].name].l.style.gridRow = `${x + 2}/${x + 2}`; - } - } + for (let x = 0; x < arr.length; x++) { + Game.Objects[arr[x].name].l.style.gridRow = `${x + 2}/${x + 2}`; + } + } else { + const arr = Object.keys(CacheObjects1).map((k) => { + const o = CacheObjects1[k]; + o.name = k; + o.id = Game.Objects[k].id; + return o; + }); + arr.sort((a, b) => a.id - b.id); + for (let x = 0; x < arr.length; x++) { + Game.Objects[arr[x].name].l.style.gridRow = `${x + 2}/${x + 2}`; + } + } } diff --git a/src/Disp/BuildingsUpgrades/UpgradeBar.js b/src/Disp/BuildingsUpgrades/UpgradeBar.js index cf12c0e..80e0eb3 100644 --- a/src/Disp/BuildingsUpgrades/UpgradeBar.js +++ b/src/Disp/BuildingsUpgrades/UpgradeBar.js @@ -1,5 +1,13 @@ import { - ColorBackPre, ColorBlue, ColorGray, ColorGreen, ColorOrange, ColorPurple, ColorRed, ColorTextPre, ColorYellow, + ColorBackPre, + ColorBlue, + ColorGray, + ColorGreen, + ColorOrange, + ColorPurple, + ColorRed, + ColorTextPre, + ColorYellow, } from '../VariablesAndData'; /** @@ -7,73 +15,90 @@ import { * @returns {object} legend The legend-object to be added */ function CreateUpgradeBarLegend() { - const legend = document.createElement('div'); - legend.style.minWidth = '330px'; - legend.style.marginBottom = '4px'; - const title = document.createElement('div'); - title.className = 'name'; - title.style.marginBottom = '4px'; - title.textContent = 'Legend'; - legend.appendChild(title); + const legend = document.createElement('div'); + legend.style.minWidth = '330px'; + legend.style.marginBottom = '4px'; + const title = document.createElement('div'); + title.className = 'name'; + title.style.marginBottom = '4px'; + title.textContent = 'Legend'; + legend.appendChild(title); - const legendLine = function (color, text) { - const div = document.createElement('div'); - div.style.verticalAlign = 'middle'; - const span = document.createElement('span'); - span.className = ColorBackPre + color; - span.style.display = 'inline-block'; - span.style.height = '10px'; - span.style.width = '10px'; - span.style.marginRight = '4px'; - div.appendChild(span); - div.appendChild(document.createTextNode(text)); - return div; - }; + const legendLine = function (color, text) { + const div = document.createElement('div'); + div.style.verticalAlign = 'middle'; + const span = document.createElement('span'); + span.className = ColorBackPre + color; + span.style.display = 'inline-block'; + span.style.height = '10px'; + span.style.width = '10px'; + span.style.marginRight = '4px'; + div.appendChild(span); + div.appendChild(document.createTextNode(text)); + return div; + }; - legend.appendChild(legendLine(ColorBlue, 'Better than best PP building')); - legend.appendChild(legendLine(ColorGreen, 'Same as best PP building')); - legend.appendChild(legendLine(ColorYellow, 'Between best and worst PP buildings closer to best')); - legend.appendChild(legendLine(ColorOrange, 'Between best and worst PP buildings closer to worst')); - legend.appendChild(legendLine(ColorRed, 'Same as worst PP building')); - legend.appendChild(legendLine(ColorPurple, 'Worse than worst PP building')); - legend.appendChild(legendLine(ColorGray, 'Negative or infinity PP')); - return legend; + legend.appendChild(legendLine(ColorBlue, 'Better than best PP building')); + legend.appendChild(legendLine(ColorGreen, 'Same as best PP building')); + legend.appendChild( + legendLine( + ColorYellow, + 'Between best and worst PP buildings closer to best', + ), + ); + legend.appendChild( + legendLine( + ColorOrange, + 'Between best and worst PP buildings closer to worst', + ), + ); + legend.appendChild(legendLine(ColorRed, 'Same as worst PP building')); + legend.appendChild(legendLine(ColorPurple, 'Worse than worst PP building')); + legend.appendChild(legendLine(ColorGray, 'Negative or infinity PP')); + return legend; } /** * This function creates the upgrade bar above the upgrade-section in the right section of the screen */ export default function CreateUpgradeBar() { - const UpgradeBar = document.createElement('div'); - UpgradeBar.id = 'CMUpgradeBar'; - UpgradeBar.style.width = '100%'; - UpgradeBar.style.backgroundColor = 'black'; - UpgradeBar.style.textAlign = 'center'; - UpgradeBar.style.fontWeight = 'bold'; - UpgradeBar.style.display = 'none'; - UpgradeBar.style.zIndex = '21'; - UpgradeBar.onmouseout = function () { Game.tooltip.hide(); }; + const UpgradeBar = document.createElement('div'); + UpgradeBar.id = 'CMUpgradeBar'; + UpgradeBar.style.width = '100%'; + UpgradeBar.style.backgroundColor = 'black'; + UpgradeBar.style.textAlign = 'center'; + UpgradeBar.style.fontWeight = 'bold'; + UpgradeBar.style.display = 'none'; + UpgradeBar.style.zIndex = '21'; + UpgradeBar.onmouseout = function () { + Game.tooltip.hide(); + }; - const placeholder = document.createElement('div'); - placeholder.appendChild(CreateUpgradeBarLegend()); - UpgradeBar.onmouseover = function () { Game.tooltip.draw(this, escape(placeholder.innerHTML), 'store'); }; + const placeholder = document.createElement('div'); + placeholder.appendChild(CreateUpgradeBarLegend()); + UpgradeBar.onmouseover = function () { + Game.tooltip.draw(this, escape(placeholder.innerHTML), 'store'); + }; - const upgradeNumber = function (id, color) { - const span = document.createElement('span'); - span.id = id; - span.className = ColorTextPre + color; - span.style.width = '14.28571428571429%'; - span.style.display = 'inline-block'; - span.textContent = '0'; - return span; - }; - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarBlue', ColorBlue)); - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGreen', ColorGreen)); - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarYellow', ColorYellow)); - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarOrange', ColorOrange)); - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarRed', ColorRed)); - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarPurple', ColorPurple)); - UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGray', ColorGray)); + const upgradeNumber = function (id, color) { + const span = document.createElement('span'); + span.id = id; + span.className = ColorTextPre + color; + span.style.width = '14.28571428571429%'; + span.style.display = 'inline-block'; + span.textContent = '0'; + return span; + }; + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarBlue', ColorBlue)); + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGreen', ColorGreen)); + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarYellow', ColorYellow)); + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarOrange', ColorOrange)); + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarRed', ColorRed)); + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarPurple', ColorPurple)); + UpgradeBar.appendChild(upgradeNumber('CMUpgradeBarGray', ColorGray)); - l('upgrades').parentNode.insertBefore(UpgradeBar, l('upgrades').parentNode.childNodes[3]); + l('upgrades').parentNode.insertBefore( + UpgradeBar, + l('upgrades').parentNode.childNodes[3], + ); } diff --git a/src/Disp/BuildingsUpgrades/Upgrades.js b/src/Disp/BuildingsUpgrades/Upgrades.js index 36b5191..37792bb 100644 --- a/src/Disp/BuildingsUpgrades/Upgrades.js +++ b/src/Disp/BuildingsUpgrades/Upgrades.js @@ -1,7 +1,15 @@ import { CacheUpgrades } from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import { - ColorBackPre, ColorBlue, ColorGray, ColorGreen, ColorOrange, ColorPurple, ColorRed, Colors, ColorYellow, + ColorBackPre, + ColorBlue, + ColorGray, + ColorGreen, + ColorOrange, + ColorPurple, + ColorRed, + Colors, + ColorYellow, } from '../VariablesAndData'; /** @@ -11,72 +19,84 @@ import { * And by changes in CM.Options.SortUpgrades */ export default function UpdateUpgrades() { - // This counts the amount of upgrades for each pp group and updates the Upgrade Bar - if (CMOptions.UpBarColor > 0) { - let blue = 0; - let green = 0; - let yellow = 0; - let orange = 0; - let red = 0; - let purple = 0; - let gray = 0; + // This counts the amount of upgrades for each pp group and updates the Upgrade Bar + if (CMOptions.UpBarColor > 0) { + let blue = 0; + let green = 0; + let yellow = 0; + let orange = 0; + let red = 0; + let purple = 0; + let gray = 0; - for (const i of Object.keys(Game.UpgradesInStore)) { - const me = Game.UpgradesInStore[i]; - let addedColor = false; - for (let j = 0; j < l(`upgrade${i}`).childNodes.length; j++) { - if (l(`upgrade${i}`).childNodes[j].className.indexOf(ColorBackPre) !== -1) { - l(`upgrade${i}`).childNodes[j].className = ColorBackPre + CacheUpgrades[me.name].color; - addedColor = true; - break; - } - } - if (!addedColor) { - const div = document.createElement('div'); - div.style.width = '10px'; - div.style.height = '10px'; - div.className = ColorBackPre + CacheUpgrades[me.name].color; - l(`upgrade${i}`).appendChild(div); - } - if (CacheUpgrades[me.name].color === ColorBlue) blue++; - else if (CacheUpgrades[me.name].color === ColorGreen) green++; - else if (CacheUpgrades[me.name].color === ColorYellow) yellow++; - else if (CacheUpgrades[me.name].color === ColorOrange) orange++; - else if (CacheUpgrades[me.name].color === ColorRed) red++; - else if (CacheUpgrades[me.name].color === ColorPurple) purple++; - else if (CacheUpgrades[me.name].color === ColorGray) gray++; - } + for (const i of Object.keys(Game.UpgradesInStore)) { + const me = Game.UpgradesInStore[i]; + let addedColor = false; + for (let j = 0; j < l(`upgrade${i}`).childNodes.length; j++) { + if ( + l(`upgrade${i}`).childNodes[j].className.indexOf(ColorBackPre) !== -1 + ) { + l(`upgrade${i}`).childNodes[j].className = + ColorBackPre + CacheUpgrades[me.name].color; + addedColor = true; + break; + } + } + if (!addedColor) { + const div = document.createElement('div'); + div.style.width = '10px'; + div.style.height = '10px'; + div.className = ColorBackPre + CacheUpgrades[me.name].color; + l(`upgrade${i}`).appendChild(div); + } + if (CacheUpgrades[me.name].color === ColorBlue) blue++; + else if (CacheUpgrades[me.name].color === ColorGreen) green++; + else if (CacheUpgrades[me.name].color === ColorYellow) yellow++; + else if (CacheUpgrades[me.name].color === ColorOrange) orange++; + else if (CacheUpgrades[me.name].color === ColorRed) red++; + else if (CacheUpgrades[me.name].color === ColorPurple) purple++; + else if (CacheUpgrades[me.name].color === ColorGray) gray++; + } - l('CMUpgradeBarBlue').textContent = blue; - l('CMUpgradeBarGreen').textContent = green; - l('CMUpgradeBarYellow').textContent = yellow; - l('CMUpgradeBarOrange').textContent = orange; - l('CMUpgradeBarRed').textContent = red; - l('CMUpgradeBarPurple').textContent = purple; - l('CMUpgradeBarGray').textContent = gray; - } + l('CMUpgradeBarBlue').textContent = blue; + l('CMUpgradeBarGreen').textContent = green; + l('CMUpgradeBarYellow').textContent = yellow; + l('CMUpgradeBarOrange').textContent = orange; + l('CMUpgradeBarRed').textContent = red; + l('CMUpgradeBarPurple').textContent = purple; + l('CMUpgradeBarGray').textContent = gray; + } - const arr = []; - // Build array of pointers, sort by pp, set flex positions - // This regulates sorting of upgrades - for (let x = 0; x < Game.UpgradesInStore.length; x++) { - const o = {}; - o.name = Game.UpgradesInStore[x].name; - o.price = Game.UpgradesInStore[x].basePrice; - o.pp = CacheUpgrades[o.name].pp; - arr.push(o); - } + const arr = []; + // Build array of pointers, sort by pp, set flex positions + // This regulates sorting of upgrades + for (let x = 0; x < Game.UpgradesInStore.length; x++) { + const o = {}; + o.name = Game.UpgradesInStore[x].name; + o.price = Game.UpgradesInStore[x].basePrice; + o.pp = CacheUpgrades[o.name].pp; + arr.push(o); + } - if (CMOptions.SortUpgrades) { - arr.sort(function (a, b) { return (Colors.indexOf(a.color) > Colors.indexOf(b.color) ? 1 : (Colors.indexOf(a.color) < Colors.indexOf(b.color) ? -1 : (a.pp < b.pp) ? -1 : 0)); }); - } else { - arr.sort((a, b) => a.price - b.price); - } + if (CMOptions.SortUpgrades) { + arr.sort(function (a, b) { + return Colors.indexOf(a.color) > Colors.indexOf(b.color) + ? 1 + : Colors.indexOf(a.color) < Colors.indexOf(b.color) + ? -1 + : a.pp < b.pp + ? -1 + : 0; + }); + } else { + arr.sort((a, b) => a.price - b.price); + } - const nameChecker = function (arr2, upgrade) { - return arr2.findIndex((e) => e.name === upgrade.name); - }; - for (let x = 0; x < Game.UpgradesInStore.length; x++) { - l(`upgrade${x}`).style.order = nameChecker(arr, Game.UpgradesInStore[x]) + 1; - } + const nameChecker = function (arr2, upgrade) { + return arr2.findIndex((e) => e.name === upgrade.name); + }; + for (let x = 0; x < Game.UpgradesInStore.length; x++) { + l(`upgrade${x}`).style.order = + nameChecker(arr, Game.UpgradesInStore[x]) + 1; + } } diff --git a/src/Disp/Dragon/Dragon.js b/src/Disp/Dragon/Dragon.js index 2a81adf..b6b4a33 100644 --- a/src/Disp/Dragon/Dragon.js +++ b/src/Disp/Dragon/Dragon.js @@ -4,32 +4,40 @@ import CacheDragonCost from '../../Cache/Dragon/Dragon'; import { CacheCostDragonUpgrade } from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import CalculateChangeAura from '../../Sim/SimulationEvents/AuraChange'; -import { Beautify, FormatTime } from '../BeautifyAndFormatting/BeautifyFormatting'; +import { + Beautify, + FormatTime, +} from '../BeautifyAndFormatting/BeautifyFormatting'; /** * This functions adds the two extra lines about CPS and time to recover to the aura picker infoscreen * @param {number} aura The number of the aura currently selected by the mouse/user */ export function AddAuraInfo(aura) { - if (CMOptions.DragonAuraInfo === 1) { - const [bonusCPS, priceOfChange] = CalculateChangeAura(aura); - const timeToRecover = FormatTime(priceOfChange / (bonusCPS + Game.cookiesPs)); - const bonusCPSPercentage = Beautify(bonusCPS / Game.cookiesPs); + if (CMOptions.DragonAuraInfo === 1) { + const [bonusCPS, priceOfChange] = CalculateChangeAura(aura); + const timeToRecover = FormatTime( + priceOfChange / (bonusCPS + Game.cookiesPs), + ); + const bonusCPSPercentage = Beautify(bonusCPS / Game.cookiesPs); - l('dragonAuraInfo').style.minHeight = '60px'; - l('dragonAuraInfo').style.margin = '8px'; - l('dragonAuraInfo').appendChild(document.createElement('div')).className = 'line'; - const div = document.createElement('div'); - div.style.minWidth = '200px'; - div.style.textAlign = 'center'; - div.textContent = `Picking this aura will change CPS by ${Beautify(bonusCPS)} (${bonusCPSPercentage}% of current CPS).`; - l('dragonAuraInfo').appendChild(div); - const div2 = document.createElement('div'); - div2.style.minWidth = '200px'; - div2.style.textAlign = 'center'; - div2.textContent = `It will take ${timeToRecover} to recover the cost.`; - l('dragonAuraInfo').appendChild(div2); - } + l('dragonAuraInfo').style.minHeight = '60px'; + l('dragonAuraInfo').style.margin = '8px'; + l('dragonAuraInfo').appendChild(document.createElement('div')).className = + 'line'; + const div = document.createElement('div'); + div.style.minWidth = '200px'; + div.style.textAlign = 'center'; + div.textContent = `Picking this aura will change CPS by ${Beautify( + bonusCPS, + )} (${bonusCPSPercentage}% of current CPS).`; + l('dragonAuraInfo').appendChild(div); + const div2 = document.createElement('div'); + div2.style.minWidth = '200px'; + div2.style.textAlign = 'center'; + div2.textContent = `It will take ${timeToRecover} to recover the cost.`; + l('dragonAuraInfo').appendChild(div2); + } } /** @@ -37,18 +45,27 @@ export function AddAuraInfo(aura) { * It is called by Game.ToggleSpecialMenu() after CM.Main.ReplaceNative() */ export function AddDragonLevelUpTooltip() { - // Check if it is the dragon popup that is on screen - if ((l('specialPopup').className.match(/onScreen/) && l('specialPopup').children[0].style.background.match(/dragon/)) !== null) { - for (let i = 0; i < l('specialPopup').childNodes.length; i++) { - if (l('specialPopup').childNodes[i].className === 'optionBox') { - l('specialPopup').children[i].onmouseover = function () { - CacheDragonCost(); - Game.tooltip.dynamic = 1; - Game.tooltip.draw(l('specialPopup'), `
${CacheCostDragonUpgrade}
`, 'this'); - Game.tooltip.wobble(); - }; - l('specialPopup').children[i].onmouseout = function () { Game.tooltip.shouldHide = 1; }; - } - } - } + // Check if it is the dragon popup that is on screen + if ( + (l('specialPopup').className.match(/onScreen/) && + l('specialPopup').children[0].style.background.match(/dragon/)) !== null + ) { + for (let i = 0; i < l('specialPopup').childNodes.length; i++) { + if (l('specialPopup').childNodes[i].className === 'optionBox') { + l('specialPopup').children[i].onmouseover = function () { + CacheDragonCost(); + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + l('specialPopup'), + `
${CacheCostDragonUpgrade}
`, + 'this', + ); + Game.tooltip.wobble(); + }; + l('specialPopup').children[i].onmouseout = function () { + Game.tooltip.shouldHide = 1; + }; + } + } + } } diff --git a/src/Disp/Draw.js b/src/Disp/Draw.js index 111eb36..2d7261c 100644 --- a/src/Disp/Draw.js +++ b/src/Disp/Draw.js @@ -6,44 +6,55 @@ import { UpdateBotBar } from './InfoBars/BottomBar'; import { UpdateTimerBar } from './InfoBars/TimerBar'; import RefreshMenu from './MenuSections/Refreshmenu'; import { UpdateTooltips } from './Tooltips/Tooltip'; -import { CheckWrinklerTooltip, UpdateWrinklerTooltip } from './Tooltips/WrinklerTooltips'; +import { + CheckWrinklerTooltip, + UpdateWrinklerTooltip, +} from './Tooltips/WrinklerTooltips'; /** * This function handles all custom drawing for the Game.Draw() function. * It is hooked on 'draw' by CM.RegisterHooks() */ export default function Draw() { - // Draw autosave timer in stats menu, this must be done here to make it count down correctly - if ( - (Game.prefs.autosave && Game.drawT % 10 === 0) // with autosave ON and every 10 ticks - && (Game.onMenu === 'stats' && CMOptions.Stats) // while being on the stats menu only - ) { - const timer = document.getElementById('CMStatsAutosaveTimer'); - if (timer) { - timer.innerText = Game.sayTime(Game.fps * 60 - (Game.T % (Game.fps * 60)), 4); - } - } + // Draw autosave timer in stats menu, this must be done here to make it count down correctly + if ( + Game.prefs.autosave && + Game.drawT % 10 === 0 && // with autosave ON and every 10 ticks + Game.onMenu === 'stats' && + CMOptions.Stats // while being on the stats menu only + ) { + const timer = document.getElementById('CMStatsAutosaveTimer'); + if (timer) { + timer.innerText = Game.sayTime( + Game.fps * 60 - (Game.T % (Game.fps * 60)), + 4, + ); + } + } - // Update colors - UpdateBuildings(); - UpdateUpgrades(); + // Update colors + UpdateBuildings(); + UpdateUpgrades(); - // Redraw timers - UpdateTimerBar(); + // Redraw timers + UpdateTimerBar(); - // Update Bottom Bar - UpdateBotBar(); + // Update Bottom Bar + UpdateBotBar(); - // Update Tooltip - UpdateTooltips(); + // Update Tooltip + UpdateTooltips(); - // Update Wrinkler Tooltip - CheckWrinklerTooltip(); - UpdateWrinklerTooltip(); + // Update Wrinkler Tooltip + CheckWrinklerTooltip(); + UpdateWrinklerTooltip(); - // Change menu refresh interval - RefreshMenu(); + // Change menu refresh interval + RefreshMenu(); - // Replace Cookies counter because Orteil uses very weird code to "pad" it... - l('cookies').innerHTML = l('cookies').innerHTML.replace(/.*(?=
)/i, Beautify(Game.cookies)); + // Replace Cookies counter because Orteil uses very weird code to "pad" it... + l('cookies').innerHTML = l('cookies').innerHTML.replace( + /.*(?=
)/i, + Beautify(Game.cookies), + ); } diff --git a/src/Disp/GoldenCookieTimers/GoldenCookieTimers.js b/src/Disp/GoldenCookieTimers/GoldenCookieTimers.js index b350058..dc34f2c 100644 --- a/src/Disp/GoldenCookieTimers/GoldenCookieTimers.js +++ b/src/Disp/GoldenCookieTimers/GoldenCookieTimers.js @@ -8,25 +8,35 @@ import { GCTimers } from '../VariablesAndData'; * @param {object} cookie A Golden Cookie object */ export default function CreateGCTimer(cookie) { - const GCTimer = document.createElement('div'); - GCTimer.id = `GCTimer${cookie.id}`; - GCTimer.style.width = '96px'; - GCTimer.style.height = '96px'; - GCTimer.style.position = 'absolute'; - GCTimer.style.zIndex = '10000000001'; - GCTimer.style.textAlign = 'center'; - GCTimer.style.lineHeight = '96px'; - GCTimer.style.fontFamily = '"Kavoon", Georgia, serif'; - GCTimer.style.fontSize = '35px'; - GCTimer.style.cursor = 'pointer'; - GCTimer.style.display = 'block'; - if (CMOptions.GCTimer === 0) GCTimer.style.display = 'none'; - GCTimer.style.left = cookie.l.style.left; - GCTimer.style.top = cookie.l.style.top; - GCTimer.onclick = function () { cookie.pop(); }; - GCTimer.onmouseover = function () { cookie.l.style.filter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; cookie.l.style.webkitFilter = 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; }; - GCTimer.onmouseout = function () { cookie.l.style.filter = ''; cookie.l.style.webkitFilter = ''; }; + const GCTimer = document.createElement('div'); + GCTimer.id = `GCTimer${cookie.id}`; + GCTimer.style.width = '96px'; + GCTimer.style.height = '96px'; + GCTimer.style.position = 'absolute'; + GCTimer.style.zIndex = '10000000001'; + GCTimer.style.textAlign = 'center'; + GCTimer.style.lineHeight = '96px'; + GCTimer.style.fontFamily = '"Kavoon", Georgia, serif'; + GCTimer.style.fontSize = '35px'; + GCTimer.style.cursor = 'pointer'; + GCTimer.style.display = 'block'; + if (CMOptions.GCTimer === 0) GCTimer.style.display = 'none'; + GCTimer.style.left = cookie.l.style.left; + GCTimer.style.top = cookie.l.style.top; + GCTimer.onclick = function () { + cookie.pop(); + }; + GCTimer.onmouseover = function () { + cookie.l.style.filter = + 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; + cookie.l.style.webkitFilter = + 'brightness(125%) drop-shadow(0px 0px 3px rgba(255,255,255,1))'; + }; + GCTimer.onmouseout = function () { + cookie.l.style.filter = ''; + cookie.l.style.webkitFilter = ''; + }; - GCTimers[cookie.id] = GCTimer; - l('shimmers').appendChild(GCTimer); + GCTimers[cookie.id] = GCTimer; + l('shimmers').appendChild(GCTimer); } diff --git a/src/Disp/HelperFunctions/CalculateGrimoireRefillTime.js b/src/Disp/HelperFunctions/CalculateGrimoireRefillTime.js index fa864ea..f7598ae 100644 --- a/src/Disp/HelperFunctions/CalculateGrimoireRefillTime.js +++ b/src/Disp/HelperFunctions/CalculateGrimoireRefillTime.js @@ -5,11 +5,16 @@ * @param {number} targetMagic The target magic level * @returns {number} count / Game.fps The time it takes to reach targetMagic */ -export default function CalculateGrimoireRefillTime(currentMagic, maxMagic, targetMagic) { - let count = 0; - while (currentMagic < targetMagic) { - currentMagic += Math.max(0.002, (currentMagic / Math.max(maxMagic, 100)) ** 0.5) * 0.002; - count++; - } - return count / Game.fps; +export default function CalculateGrimoireRefillTime( + currentMagic, + maxMagic, + targetMagic, +) { + let count = 0; + while (currentMagic < targetMagic) { + currentMagic += + Math.max(0.002, (currentMagic / Math.max(maxMagic, 100)) ** 0.5) * 0.002; + count++; + } + return count / Game.fps; } diff --git a/src/Disp/HelperFunctions/GetCPS.js b/src/Disp/HelperFunctions/GetCPS.js index 2a495ae..f8522b5 100644 --- a/src/Disp/HelperFunctions/GetCPS.js +++ b/src/Disp/HelperFunctions/GetCPS.js @@ -1,5 +1,8 @@ import { - CacheAverageCPS, CacheCurrWrinklerCount, CacheCurrWrinklerCPSMult, CacheWrinklersFattest, + CacheAverageCPS, + CacheCurrWrinklerCount, + CacheCurrWrinklerCPSMult, + CacheWrinklersFattest, } from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; @@ -8,14 +11,31 @@ import { CMOptions } from '../../Config/VariablesAndData'; * @returns {number} The average or current cps */ export default function GetCPS() { - if (CMOptions.CPSMode) { - return CacheAverageCPS; - } if (CMOptions.CalcWrink === 0) { - return (Game.cookiesPs * (1 - Game.cpsSucked)); - } if (CMOptions.CalcWrink === 1) { - return Game.cookiesPs * (CacheCurrWrinklerCPSMult + (1 - (CacheCurrWrinklerCount * 0.05))); - } if (CMOptions.CalcWrink === 2 && Game.wrinklers[CacheWrinklersFattest[1]].type === 1) { - return Game.cookiesPs * ((CacheCurrWrinklerCPSMult * 3 / CacheCurrWrinklerCount) + (1 - (CacheCurrWrinklerCount * 0.05))); - } - return Game.cookiesPs * ((CacheCurrWrinklerCPSMult / CacheCurrWrinklerCount) + (1 - (CacheCurrWrinklerCount * 0.05))); + if (CMOptions.CPSMode) { + return CacheAverageCPS; + } + if (CMOptions.CalcWrink === 0) { + return Game.cookiesPs * (1 - Game.cpsSucked); + } + if (CMOptions.CalcWrink === 1) { + return ( + Game.cookiesPs * + (CacheCurrWrinklerCPSMult + (1 - CacheCurrWrinklerCount * 0.05)) + ); + } + if ( + CMOptions.CalcWrink === 2 && + Game.wrinklers[CacheWrinklersFattest[1]].type === 1 + ) { + return ( + Game.cookiesPs * + ((CacheCurrWrinklerCPSMult * 3) / CacheCurrWrinklerCount + + (1 - CacheCurrWrinklerCount * 0.05)) + ); + } + return ( + Game.cookiesPs * + (CacheCurrWrinklerCPSMult / CacheCurrWrinklerCount + + (1 - CacheCurrWrinklerCount * 0.05)) + ); } diff --git a/src/Disp/HelperFunctions/GetLumpColor.js b/src/Disp/HelperFunctions/GetLumpColor.js index 75d2606..8da19d6 100644 --- a/src/Disp/HelperFunctions/GetLumpColor.js +++ b/src/Disp/HelperFunctions/GetLumpColor.js @@ -1,5 +1,10 @@ import { - ColorGray, ColorGreen, ColorOrange, ColorPurple, ColorRed, ColorYellow, + ColorGray, + ColorGreen, + ColorOrange, + ColorPurple, + ColorRed, + ColorYellow, } from '../VariablesAndData'; /** @@ -9,16 +14,20 @@ import { * @returns {{string}, {string}} text, color An array containing the text and display-color of the sugar lump */ export default function GetLumpColor(type) { - if (type === 0) { - return { text: 'Normal', color: ColorGray }; - } if (type === 1) { - return { text: 'Bifurcated', color: ColorGreen }; - } if (type === 2) { - return { text: 'Golden', color: ColorYellow }; - } if (type === 3) { - return { text: 'Meaty', color: ColorOrange }; - } if (type === 4) { - return { text: 'Caramelized', color: ColorPurple }; - } - return { text: 'Unknown Sugar Lump', color: ColorRed }; + if (type === 0) { + return { text: 'Normal', color: ColorGray }; + } + if (type === 1) { + return { text: 'Bifurcated', color: ColorGreen }; + } + if (type === 2) { + return { text: 'Golden', color: ColorYellow }; + } + if (type === 3) { + return { text: 'Meaty', color: ColorOrange }; + } + if (type === 4) { + return { text: 'Caramelized', color: ColorPurple }; + } + return { text: 'Unknown Sugar Lump', color: ColorRed }; } diff --git a/src/Disp/HelperFunctions/GetWrinkConfigBank.js b/src/Disp/HelperFunctions/GetWrinkConfigBank.js index effac3c..9c03987 100644 --- a/src/Disp/HelperFunctions/GetWrinkConfigBank.js +++ b/src/Disp/HelperFunctions/GetWrinkConfigBank.js @@ -1,4 +1,7 @@ -import { CacheWrinklersFattest, CacheWrinklersTotal } from '../../Cache/VariablesAndData'; +import { + CacheWrinklersFattest, + CacheWrinklersTotal, +} from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; /** @@ -7,10 +10,11 @@ import { CMOptions } from '../../Config/VariablesAndData'; * @returns {number} 0 or the amount of cookies stored (CM.Cache.WrinklersTotal) */ export default function GetWrinkConfigBank() { - if (CMOptions.CalcWrink === 1) { - return CacheWrinklersTotal; - } if (CMOptions.CalcWrink === 2) { - return CacheWrinklersFattest[0]; - } - return 0; + if (CMOptions.CalcWrink === 1) { + return CacheWrinklersTotal; + } + if (CMOptions.CalcWrink === 2) { + return CacheWrinklersFattest[0]; + } + return 0; } diff --git a/src/Disp/HelperFunctions/PopWrinklers.js b/src/Disp/HelperFunctions/PopWrinklers.js index ebb980c..fb97fcf 100644 --- a/src/Disp/HelperFunctions/PopWrinklers.js +++ b/src/Disp/HelperFunctions/PopWrinklers.js @@ -3,9 +3,9 @@ * It is called by a click of the 'pop all' button created by CM.Disp.AddMenuStats() */ export default function PopAllNormalWrinklers() { - for (const i of Object.keys(Game.wrinklers)) { - if (Game.wrinklers[i].sucked > 0 && Game.wrinklers[i].type === 0) { - Game.wrinklers[i].hp = 0; - } - } + for (const i of Object.keys(Game.wrinklers)) { + if (Game.wrinklers[i].sucked > 0 && Game.wrinklers[i].type === 0) { + Game.wrinklers[i].hp = 0; + } + } } diff --git a/src/Disp/HelperFunctions/RefreshScale.js b/src/Disp/HelperFunctions/RefreshScale.js index 4a8d412..2346850 100644 --- a/src/Disp/HelperFunctions/RefreshScale.js +++ b/src/Disp/HelperFunctions/RefreshScale.js @@ -7,11 +7,11 @@ import { UpdateBotBar } from '../InfoBars/BottomBar'; * It is therefore called by a changes in CM.Options.Scale, CM.Options.ScaleDecimals, CM.Options.ScaleSeparator and CM.Options.ScaleCutoff */ export default function RefreshScale() { - BeautifyAll(); - Game.RefreshStore(); - Game.RebuildUpgrades(); + BeautifyAll(); + Game.RefreshStore(); + Game.RebuildUpgrades(); - UpdateBotBar(); - UpdateBuildings(); - UpdateUpgrades(); + UpdateBotBar(); + UpdateBuildings(); + UpdateUpgrades(); } diff --git a/src/Disp/HelperFunctions/UpdateAscendState.js b/src/Disp/HelperFunctions/UpdateAscendState.js index c12cc66..afd6ebc 100644 --- a/src/Disp/HelperFunctions/UpdateAscendState.js +++ b/src/Disp/HelperFunctions/UpdateAscendState.js @@ -8,13 +8,13 @@ import UpdateBackground from './UpdateBackground'; * It is called by CM.Disp.Draw() */ export default function UpdateAscendState() { - if (Game.OnAscend) { - l('game').style.bottom = '0px'; - if (CMOptions.BotBar === 1) l('CMBotBar').style.display = 'none'; - if (CMOptions.TimerBar === 1) l('CMTimerBar').style.display = 'none'; - } else { - ToggleBotBar(); - ToggleTimerBar(); - } - UpdateBackground(); + if (Game.OnAscend) { + l('game').style.bottom = '0px'; + if (CMOptions.BotBar === 1) l('CMBotBar').style.display = 'none'; + if (CMOptions.TimerBar === 1) l('CMTimerBar').style.display = 'none'; + } else { + ToggleBotBar(); + ToggleTimerBar(); + } + UpdateBackground(); } diff --git a/src/Disp/HelperFunctions/UpdateBackground.js b/src/Disp/HelperFunctions/UpdateBackground.js index 5d5cd00..50a3336 100644 --- a/src/Disp/HelperFunctions/UpdateBackground.js +++ b/src/Disp/HelperFunctions/UpdateBackground.js @@ -4,8 +4,11 @@ * It is called by CM.Disp.UpdateAscendState() and CM.Disp.UpdateBotTimerBarPosition() */ export default function UpdateBackground() { - Game.Background.canvas.width = Game.Background.canvas.parentNode.offsetWidth; - Game.Background.canvas.height = Game.Background.canvas.parentNode.offsetHeight; - Game.LeftBackground.canvas.width = Game.LeftBackground.canvas.parentNode.offsetWidth; - Game.LeftBackground.canvas.height = Game.LeftBackground.canvas.parentNode.offsetHeight; + Game.Background.canvas.width = Game.Background.canvas.parentNode.offsetWidth; + Game.Background.canvas.height = + Game.Background.canvas.parentNode.offsetHeight; + Game.LeftBackground.canvas.width = + Game.LeftBackground.canvas.parentNode.offsetWidth; + Game.LeftBackground.canvas.height = + Game.LeftBackground.canvas.parentNode.offsetHeight; } diff --git a/src/Disp/HelperFunctions/UpdateColors.js b/src/Disp/HelperFunctions/UpdateColors.js index b92813c..c80fa7c 100644 --- a/src/Disp/HelperFunctions/UpdateColors.js +++ b/src/Disp/HelperFunctions/UpdateColors.js @@ -1,7 +1,10 @@ import { CMOptions } from '../../Config/VariablesAndData'; import UpdateBuildings from '../BuildingsUpgrades/Buildings'; import { - ColorBackPre, ColorBorderPre, Colors, ColorTextPre, + ColorBackPre, + ColorBorderPre, + Colors, + ColorTextPre, } from '../VariablesAndData'; /** @@ -9,16 +12,22 @@ import { * The function is therefore called by a change in CM.Options.Colors */ export default function UpdateColors() { - let str = ''; - for (let i = 0; i < Colors.length; i++) { - str += `.${ColorTextPre}${Colors[i]} { color: ${CMOptions.Colors[Colors[i]]}; }\n`; - } - for (let i = 0; i < Colors.length; i++) { - str += `.${ColorBackPre}${Colors[i]} { background-color: ${CMOptions.Colors[Colors[i]]}; }\n`; - } - for (let i = 0; i < Colors.length; i++) { - str += `.${ColorBorderPre}${Colors[i]} { border: 1px solid ${CMOptions.Colors[Colors[i]]}; }\n`; - } - l('CMCSS').textContent = str; - UpdateBuildings(); // Class has been already set + let str = ''; + for (let i = 0; i < Colors.length; i++) { + str += `.${ColorTextPre}${Colors[i]} { color: ${ + CMOptions.Colors[Colors[i]] + }; }\n`; + } + for (let i = 0; i < Colors.length; i++) { + str += `.${ColorBackPre}${Colors[i]} { background-color: ${ + CMOptions.Colors[Colors[i]] + }; }\n`; + } + for (let i = 0; i < Colors.length; i++) { + str += `.${ColorBorderPre}${Colors[i]} { border: 1px solid ${ + CMOptions.Colors[Colors[i]] + }; }\n`; + } + l('CMCSS').textContent = str; + UpdateBuildings(); // Class has been already set } diff --git a/src/Disp/InfoBars/BottomBar.js b/src/Disp/InfoBars/BottomBar.js index 80527dd..2aee587 100644 --- a/src/Disp/InfoBars/BottomBar.js +++ b/src/Disp/InfoBars/BottomBar.js @@ -1,13 +1,23 @@ /** Functions related to the Bottom Bar */ -import { CacheObjects1, CacheObjects10, CacheObjects100 } from '../../Cache/VariablesAndData'; +import { + CacheObjects1, + CacheObjects10, + CacheObjects100, +} from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import { VersionMajor, VersionMinor } from '../../Data/Moddata'; -import { Beautify, GetTimeColor } from '../BeautifyAndFormatting/BeautifyFormatting'; +import { + Beautify, + GetTimeColor, +} from '../BeautifyAndFormatting/BeautifyFormatting'; import GetCPS from '../HelperFunctions/GetCPS'; import GetWrinkConfigBank from '../HelperFunctions/GetWrinkConfigBank'; import { - ColorBlue, ColorTextPre, ColorYellow, LastTargetBotBar, + ColorBlue, + ColorTextPre, + ColorYellow, + LastTargetBotBar, } from '../VariablesAndData'; import { CreateBotBarBuildingColumn } from './CreateDOMElements'; @@ -15,74 +25,96 @@ import { CreateBotBarBuildingColumn } from './CreateDOMElements'; * This function creates the bottom bar and appends it to l('wrapper') */ export function CreateBotBar() { - const BotBar = document.createElement('div'); - BotBar.id = 'CMBotBar'; - BotBar.style.height = '69px'; - BotBar.style.width = '100%'; - BotBar.style.position = 'absolute'; - BotBar.style.display = 'none'; - BotBar.style.backgroundColor = '#262224'; - BotBar.style.backgroundImage = 'linear-gradient(to bottom, #4d4548, #000000)'; - BotBar.style.borderTop = '1px solid black'; - BotBar.style.overflow = 'auto'; - BotBar.style.textShadow = '-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black'; + const BotBar = document.createElement('div'); + BotBar.id = 'CMBotBar'; + BotBar.style.height = '69px'; + BotBar.style.width = '100%'; + BotBar.style.position = 'absolute'; + BotBar.style.display = 'none'; + BotBar.style.backgroundColor = '#262224'; + BotBar.style.backgroundImage = 'linear-gradient(to bottom, #4d4548, #000000)'; + BotBar.style.borderTop = '1px solid black'; + BotBar.style.overflow = 'auto'; + BotBar.style.textShadow = + '-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black'; - const table = BotBar.appendChild(document.createElement('table')); - table.style.width = '100%'; - table.style.textAlign = 'center'; - table.style.whiteSpace = 'nowrap'; - const tbody = table.appendChild(document.createElement('tbody')); + const table = BotBar.appendChild(document.createElement('table')); + table.style.width = '100%'; + table.style.textAlign = 'center'; + table.style.whiteSpace = 'nowrap'; + const tbody = table.appendChild(document.createElement('tbody')); - const firstCol = function (text, color) { - const td = document.createElement('td'); - td.style.textAlign = 'right'; - td.className = ColorTextPre + color; - td.textContent = text; - return td; - }; - const type = tbody.appendChild(document.createElement('tr')); - type.style.fontWeight = 'bold'; - type.appendChild(firstCol(`CM ${VersionMajor}.${VersionMinor}`, ColorYellow)); - const bonus = tbody.appendChild(document.createElement('tr')); - bonus.appendChild(firstCol('Bonus Income', ColorBlue)); - const pp = tbody.appendChild(document.createElement('tr')); - pp.appendChild(firstCol('Payback Period', ColorBlue)); - const time = tbody.appendChild(document.createElement('tr')); - time.appendChild(firstCol('Time Left', ColorBlue)); + const firstCol = function (text, color) { + const td = document.createElement('td'); + td.style.textAlign = 'right'; + td.className = ColorTextPre + color; + td.textContent = text; + return td; + }; + const type = tbody.appendChild(document.createElement('tr')); + type.style.fontWeight = 'bold'; + type.appendChild(firstCol(`CM ${VersionMajor}.${VersionMinor}`, ColorYellow)); + const bonus = tbody.appendChild(document.createElement('tr')); + bonus.appendChild(firstCol('Bonus Income', ColorBlue)); + const pp = tbody.appendChild(document.createElement('tr')); + pp.appendChild(firstCol('Payback Period', ColorBlue)); + const time = tbody.appendChild(document.createElement('tr')); + time.appendChild(firstCol('Time Left', ColorBlue)); - l('wrapper').appendChild(BotBar); + l('wrapper').appendChild(BotBar); - for (const i of Object.keys(Game.Objects)) { - CreateBotBarBuildingColumn(i); - } + for (const i of Object.keys(Game.Objects)) { + CreateBotBarBuildingColumn(i); + } } /** * This function updates the bonus-, pp-, and time-rows in the the bottom bar */ export function UpdateBotBar() { - if (CMOptions.BotBar === 1 && CacheObjects1 && Game.buyMode === 1) { - let count = 0; - for (const i of Object.keys(CacheObjects1)) { - let target = Game.buyBulk; - if (Game.buyMode === 1) { - LastTargetBotBar = target; - } else { - target = LastTargetBotBar; - } - if (target === 1) target = CacheObjects1; - if (target === 10) target = CacheObjects10; - if (target === 100) target = CacheObjects100; - count++; - l('CMBotBar').firstChild.firstChild.childNodes[0].childNodes[count].childNodes[1].textContent = Game.Objects[i].amount; - l('CMBotBar').firstChild.firstChild.childNodes[1].childNodes[count].textContent = Beautify(target[i].bonus, 2); - l('CMBotBar').firstChild.firstChild.childNodes[2].childNodes[count].className = ColorTextPre + target[i].color; - l('CMBotBar').firstChild.firstChild.childNodes[2].childNodes[count].textContent = Beautify(target[i].pp, 2); - const timeColor = GetTimeColor((Game.Objects[i].bulkPrice - (Game.cookies + GetWrinkConfigBank())) / GetCPS()); - l('CMBotBar').firstChild.firstChild.childNodes[3].childNodes[count].className = ColorTextPre + timeColor.color; - if (timeColor.text === 'Done!' && Game.cookies < Game.Objects[i].bulkPrice) { - l('CMBotBar').firstChild.firstChild.childNodes[3].childNodes[count].textContent = `${timeColor.text} (with Wrink)`; - } else l('CMBotBar').firstChild.firstChild.childNodes[3].childNodes[count].textContent = timeColor.text; - } - } + if (CMOptions.BotBar === 1 && CacheObjects1 && Game.buyMode === 1) { + let count = 0; + for (const i of Object.keys(CacheObjects1)) { + let target = Game.buyBulk; + if (Game.buyMode === 1) { + LastTargetBotBar = target; + } else { + target = LastTargetBotBar; + } + if (target === 1) target = CacheObjects1; + if (target === 10) target = CacheObjects10; + if (target === 100) target = CacheObjects100; + count++; + l('CMBotBar').firstChild.firstChild.childNodes[0].childNodes[ + count + ].childNodes[1].textContent = Game.Objects[i].amount; + l('CMBotBar').firstChild.firstChild.childNodes[1].childNodes[ + count + ].textContent = Beautify(target[i].bonus, 2); + l('CMBotBar').firstChild.firstChild.childNodes[2].childNodes[ + count + ].className = ColorTextPre + target[i].color; + l('CMBotBar').firstChild.firstChild.childNodes[2].childNodes[ + count + ].textContent = Beautify(target[i].pp, 2); + const timeColor = GetTimeColor( + (Game.Objects[i].bulkPrice - (Game.cookies + GetWrinkConfigBank())) / + GetCPS(), + ); + l('CMBotBar').firstChild.firstChild.childNodes[3].childNodes[ + count + ].className = ColorTextPre + timeColor.color; + if ( + timeColor.text === 'Done!' && + Game.cookies < Game.Objects[i].bulkPrice + ) { + l('CMBotBar').firstChild.firstChild.childNodes[3].childNodes[ + count + ].textContent = `${timeColor.text} (with Wrink)`; + } else + l('CMBotBar').firstChild.firstChild.childNodes[3].childNodes[ + count + ].textContent = timeColor.text; + } + } } diff --git a/src/Disp/InfoBars/CreateDOMElements.js b/src/Disp/InfoBars/CreateDOMElements.js index 0bad85f..15ced10 100644 --- a/src/Disp/InfoBars/CreateDOMElements.js +++ b/src/Disp/InfoBars/CreateDOMElements.js @@ -9,58 +9,58 @@ import { ColorBackPre, ColorBlue, ColorTextPre } from '../VariablesAndData'; * @param [{{string}, {string}}, ...] bars ([id, color]) The id and colours of individual parts of the timer */ export function CreateTimer(id, name, bars) { - const timerBar = document.createElement('div'); - timerBar.id = id; - timerBar.style.height = '12px'; - timerBar.style.margin = '0px 10px'; - timerBar.style.position = 'relative'; + const timerBar = document.createElement('div'); + timerBar.id = id; + timerBar.style.height = '12px'; + timerBar.style.margin = '0px 10px'; + timerBar.style.position = 'relative'; - const div = document.createElement('div'); - div.style.width = '100%'; - div.style.height = '10px'; - div.style.margin = 'auto'; - div.style.position = 'absolute'; - div.style.left = '0px'; - div.style.top = '0px'; - div.style.right = '0px'; - div.style.bottom = '0px'; + const div = document.createElement('div'); + div.style.width = '100%'; + div.style.height = '10px'; + div.style.margin = 'auto'; + div.style.position = 'absolute'; + div.style.left = '0px'; + div.style.top = '0px'; + div.style.right = '0px'; + div.style.bottom = '0px'; - const type = document.createElement('span'); - type.style.display = 'inline-block'; - type.style.textAlign = 'right'; - type.style.fontSize = '10px'; - type.style.width = '108px'; - type.style.marginRight = '5px'; - type.style.verticalAlign = 'text-top'; - type.textContent = name; - div.appendChild(type); + const type = document.createElement('span'); + type.style.display = 'inline-block'; + type.style.textAlign = 'right'; + type.style.fontSize = '10px'; + type.style.width = '108px'; + type.style.marginRight = '5px'; + type.style.verticalAlign = 'text-top'; + type.textContent = name; + div.appendChild(type); - for (let i = 0; i < bars.length; i++) { - const colorBar = document.createElement('span'); - colorBar.id = bars[i].id; - colorBar.style.display = 'inline-block'; - colorBar.style.height = '10px'; - colorBar.style.verticalAlign = 'text-top'; - colorBar.style.textAlign = 'center'; - if (bars.length - 1 === i) { - colorBar.style.borderTopRightRadius = '10px'; - colorBar.style.borderBottomRightRadius = '10px'; - } - if (typeof bars[i].color !== 'undefined') { - colorBar.className = ColorBackPre + bars[i].color; - } - div.appendChild(colorBar); - } + for (let i = 0; i < bars.length; i++) { + const colorBar = document.createElement('span'); + colorBar.id = bars[i].id; + colorBar.style.display = 'inline-block'; + colorBar.style.height = '10px'; + colorBar.style.verticalAlign = 'text-top'; + colorBar.style.textAlign = 'center'; + if (bars.length - 1 === i) { + colorBar.style.borderTopRightRadius = '10px'; + colorBar.style.borderBottomRightRadius = '10px'; + } + if (typeof bars[i].color !== 'undefined') { + colorBar.className = ColorBackPre + bars[i].color; + } + div.appendChild(colorBar); + } - const timer = document.createElement('span'); - timer.id = `${id}Time`; - timer.style.marginLeft = '5px'; - timer.style.verticalAlign = 'text-top'; - div.appendChild(timer); + const timer = document.createElement('span'); + timer.id = `${id}Time`; + timer.style.marginLeft = '5px'; + timer.style.verticalAlign = 'text-top'; + div.appendChild(timer); - timerBar.appendChild(div); + timerBar.appendChild(div); - return timerBar; + return timerBar; } /** @@ -68,22 +68,26 @@ export function CreateTimer(id, name, bars) { * @param {string} buildingName Objectname to be added (e.g., "Cursor") */ export function CreateBotBarBuildingColumn(buildingName) { - if (l('CMBotBar') !== null) { - const type = l('CMBotBar').firstChild.firstChild.childNodes[0]; - const bonus = l('CMBotBar').firstChild.firstChild.childNodes[1]; - const pp = l('CMBotBar').firstChild.firstChild.childNodes[2]; - const time = l('CMBotBar').firstChild.firstChild.childNodes[3]; + if (l('CMBotBar') !== null) { + const type = l('CMBotBar').firstChild.firstChild.childNodes[0]; + const bonus = l('CMBotBar').firstChild.firstChild.childNodes[1]; + const pp = l('CMBotBar').firstChild.firstChild.childNodes[2]; + const time = l('CMBotBar').firstChild.firstChild.childNodes[3]; - const i = buildingName; - const header = type.appendChild(document.createElement('td')); - header.appendChild(document.createTextNode(`${i.indexOf(' ') !== -1 ? i.substring(0, i.indexOf(' ')) : i} (`)); + const i = buildingName; + const header = type.appendChild(document.createElement('td')); + header.appendChild( + document.createTextNode( + `${i.indexOf(' ') !== -1 ? i.substring(0, i.indexOf(' ')) : i} (`, + ), + ); - const span = header.appendChild(document.createElement('span')); - span.className = ColorTextPre + ColorBlue; + const span = header.appendChild(document.createElement('span')); + span.className = ColorTextPre + ColorBlue; - header.appendChild(document.createTextNode(')')); - bonus.appendChild(document.createElement('td')); - pp.appendChild(document.createElement('td')); - time.appendChild(document.createElement('td')); - } + header.appendChild(document.createTextNode(')')); + bonus.appendChild(document.createElement('td')); + pp.appendChild(document.createElement('td')); + time.appendChild(document.createElement('td')); + } } diff --git a/src/Disp/InfoBars/TimerBar.js b/src/Disp/InfoBars/TimerBar.js index ac9f0db..fb0677c 100644 --- a/src/Disp/InfoBars/TimerBar.js +++ b/src/Disp/InfoBars/TimerBar.js @@ -3,8 +3,12 @@ import { UpdateBotTimerBarPosition } from '../../Config/SpecificToggles'; import { CMOptions } from '../../Config/VariablesAndData'; import { - BuffColors, - ColorBackPre, ColorGray, ColorOrange, ColorPurple, LastNumberOfTimers, + BuffColors, + ColorBackPre, + ColorGray, + ColorOrange, + ColorPurple, + LastNumberOfTimers, } from '../VariablesAndData'; import { CreateTimer } from './CreateDOMElements'; @@ -12,111 +16,191 @@ import { CreateTimer } from './CreateDOMElements'; * This function creates the TimerBar and appends it to l('wrapper') */ export function CreateTimerBar() { - const TimerBar = document.createElement('div'); - TimerBar.id = 'CMTimerBar'; - TimerBar.style.position = 'absolute'; - TimerBar.style.display = 'none'; - TimerBar.style.height = '0px'; - TimerBar.style.fontSize = '10px'; - TimerBar.style.fontWeight = 'bold'; - TimerBar.style.backgroundColor = 'black'; + const TimerBar = document.createElement('div'); + TimerBar.id = 'CMTimerBar'; + TimerBar.style.position = 'absolute'; + TimerBar.style.display = 'none'; + TimerBar.style.height = '0px'; + TimerBar.style.fontSize = '10px'; + TimerBar.style.fontWeight = 'bold'; + TimerBar.style.backgroundColor = 'black'; - // Create standard Golden Cookie bar - const CMTimerBarGC = CreateTimer('CMTimerBarGC', - 'Next Cookie', - [{ id: 'CMTimerBarGCMinBar', color: ColorGray }, { id: 'CMTimerBarGCBar', color: ColorPurple }]); - TimerBar.appendChild(CMTimerBarGC); + // Create standard Golden Cookie bar + const CMTimerBarGC = CreateTimer('CMTimerBarGC', 'Next Cookie', [ + { id: 'CMTimerBarGCMinBar', color: ColorGray }, + { id: 'CMTimerBarGCBar', color: ColorPurple }, + ]); + TimerBar.appendChild(CMTimerBarGC); - // Create standard Reindeer bar - const CMTimerBarRen = CreateTimer('CMTimerBarRen', - 'Next Reindeer', - [{ id: 'CMTimerBarRenMinBar', color: ColorGray }, { id: 'CMTimerBarRenBar', color: ColorOrange }]); - TimerBar.appendChild(CMTimerBarRen); - const TimerBarBuffTimers = document.createElement('div'); - TimerBarBuffTimers.id = 'CMTimerBarBuffTimers'; - TimerBar.appendChild(TimerBarBuffTimers); + // Create standard Reindeer bar + const CMTimerBarRen = CreateTimer('CMTimerBarRen', 'Next Reindeer', [ + { id: 'CMTimerBarRenMinBar', color: ColorGray }, + { id: 'CMTimerBarRenBar', color: ColorOrange }, + ]); + TimerBar.appendChild(CMTimerBarRen); + const TimerBarBuffTimers = document.createElement('div'); + TimerBarBuffTimers.id = 'CMTimerBarBuffTimers'; + TimerBar.appendChild(TimerBarBuffTimers); - l('wrapper').appendChild(TimerBar); + l('wrapper').appendChild(TimerBar); } /** * This function updates indivudual timers in the timer bar */ export function UpdateTimerBar() { - if (CMOptions.TimerBar === 1) { - // label width: 113, timer width: 30, div margin: 20 - const maxWidthTwoBar = l('CMTimerBar').offsetWidth - 163; - // label width: 113, div margin: 20, calculate timer width at runtime - const maxWidthOneBar = l('CMTimerBar').offsetWidth - 133; - let numberOfTimers = 0; + if (CMOptions.TimerBar === 1) { + // label width: 113, timer width: 30, div margin: 20 + const maxWidthTwoBar = l('CMTimerBar').offsetWidth - 163; + // label width: 113, div margin: 20, calculate timer width at runtime + const maxWidthOneBar = l('CMTimerBar').offsetWidth - 133; + let numberOfTimers = 0; - // Regulates visibility of Golden Cookie timer - if (Game.shimmerTypes.golden.spawned === 0 && !Game.Has('Golden switch [off]')) { - l('CMTimerBarGC').style.display = ''; - l('CMTimerBarGCMinBar').style.width = `${Math.round(Math.max(0, Game.shimmerTypes.golden.minTime - Game.shimmerTypes.golden.time) * maxWidthTwoBar / Game.shimmerTypes.golden.maxTime)}px`; - if (CMOptions.TimerBarOverlay >= 1) l('CMTimerBarGCMinBar').textContent = Math.ceil((Game.shimmerTypes.golden.minTime - Game.shimmerTypes.golden.time) / Game.fps); - else l('CMTimerBarGCMinBar').textContent = ''; - if (Game.shimmerTypes.golden.minTime === Game.shimmerTypes.golden.maxTime) { - l('CMTimerBarGCMinBar').style.borderTopRightRadius = '10px'; - l('CMTimerBarGCMinBar').style.borderBottomRightRadius = '10px'; - } else { - l('CMTimerBarGCMinBar').style.borderTopRightRadius = ''; - l('CMTimerBarGCMinBar').style.borderBottomRightRadius = ''; - } - l('CMTimerBarGCBar').style.width = `${Math.round(Math.min(Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.minTime, Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) * maxWidthTwoBar / Game.shimmerTypes.golden.maxTime)}px`; - if (CMOptions.TimerBarOverlay >= 1) l('CMTimerBarGCBar').textContent = Math.ceil(Math.min(Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.minTime, Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / Game.fps); - else l('CMTimerBarGCBar').textContent = ''; - l('CMTimerBarGCTime').textContent = Math.ceil((Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / Game.fps); - numberOfTimers++; - } else l('CMTimerBarGC').style.display = 'none'; + // Regulates visibility of Golden Cookie timer + if ( + Game.shimmerTypes.golden.spawned === 0 && + !Game.Has('Golden switch [off]') + ) { + l('CMTimerBarGC').style.display = ''; + l('CMTimerBarGCMinBar').style.width = `${Math.round( + (Math.max( + 0, + Game.shimmerTypes.golden.minTime - Game.shimmerTypes.golden.time, + ) * + maxWidthTwoBar) / + Game.shimmerTypes.golden.maxTime, + )}px`; + if (CMOptions.TimerBarOverlay >= 1) + l('CMTimerBarGCMinBar').textContent = Math.ceil( + (Game.shimmerTypes.golden.minTime - Game.shimmerTypes.golden.time) / + Game.fps, + ); + else l('CMTimerBarGCMinBar').textContent = ''; + if ( + Game.shimmerTypes.golden.minTime === Game.shimmerTypes.golden.maxTime + ) { + l('CMTimerBarGCMinBar').style.borderTopRightRadius = '10px'; + l('CMTimerBarGCMinBar').style.borderBottomRightRadius = '10px'; + } else { + l('CMTimerBarGCMinBar').style.borderTopRightRadius = ''; + l('CMTimerBarGCMinBar').style.borderBottomRightRadius = ''; + } + l('CMTimerBarGCBar').style.width = `${Math.round( + (Math.min( + Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.minTime, + Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time, + ) * + maxWidthTwoBar) / + Game.shimmerTypes.golden.maxTime, + )}px`; + if (CMOptions.TimerBarOverlay >= 1) + l('CMTimerBarGCBar').textContent = Math.ceil( + Math.min( + Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.minTime, + Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time, + ) / Game.fps, + ); + else l('CMTimerBarGCBar').textContent = ''; + l('CMTimerBarGCTime').textContent = Math.ceil( + (Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / + Game.fps, + ); + numberOfTimers++; + } else l('CMTimerBarGC').style.display = 'none'; - // Regulates visibility of Reindeer timer - if (Game.season === 'christmas' && Game.shimmerTypes.reindeer.spawned === 0) { - l('CMTimerBarRen').style.display = ''; - l('CMTimerBarRenMinBar').style.width = `${Math.round(Math.max(0, Game.shimmerTypes.reindeer.minTime - Game.shimmerTypes.reindeer.time) * maxWidthTwoBar / Game.shimmerTypes.reindeer.maxTime)}px`; - if (CMOptions.TimerBarOverlay >= 1) l('CMTimerBarRenMinBar').textContent = Math.ceil((Game.shimmerTypes.reindeer.minTime - Game.shimmerTypes.reindeer.time) / Game.fps); - else l('CMTimerBarRenMinBar').textContent = ''; - l('CMTimerBarRenBar').style.width = `${Math.round(Math.min(Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.minTime, Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) * maxWidthTwoBar / Game.shimmerTypes.reindeer.maxTime)}px`; - if (CMOptions.TimerBarOverlay >= 1) l('CMTimerBarRenBar').textContent = Math.ceil(Math.min(Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.minTime, Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / Game.fps); - else l('CMTimerBarRenBar').textContent = ''; - l('CMTimerBarRenTime').textContent = Math.ceil((Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / Game.fps); - numberOfTimers++; - } else { - l('CMTimerBarRen').style.display = 'none'; - } + // Regulates visibility of Reindeer timer + if ( + Game.season === 'christmas' && + Game.shimmerTypes.reindeer.spawned === 0 + ) { + l('CMTimerBarRen').style.display = ''; + l('CMTimerBarRenMinBar').style.width = `${Math.round( + (Math.max( + 0, + Game.shimmerTypes.reindeer.minTime - Game.shimmerTypes.reindeer.time, + ) * + maxWidthTwoBar) / + Game.shimmerTypes.reindeer.maxTime, + )}px`; + if (CMOptions.TimerBarOverlay >= 1) + l('CMTimerBarRenMinBar').textContent = Math.ceil( + (Game.shimmerTypes.reindeer.minTime - + Game.shimmerTypes.reindeer.time) / + Game.fps, + ); + else l('CMTimerBarRenMinBar').textContent = ''; + l('CMTimerBarRenBar').style.width = `${Math.round( + (Math.min( + Game.shimmerTypes.reindeer.maxTime - + Game.shimmerTypes.reindeer.minTime, + Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time, + ) * + maxWidthTwoBar) / + Game.shimmerTypes.reindeer.maxTime, + )}px`; + if (CMOptions.TimerBarOverlay >= 1) + l('CMTimerBarRenBar').textContent = Math.ceil( + Math.min( + Game.shimmerTypes.reindeer.maxTime - + Game.shimmerTypes.reindeer.minTime, + Game.shimmerTypes.reindeer.maxTime - + Game.shimmerTypes.reindeer.time, + ) / Game.fps, + ); + else l('CMTimerBarRenBar').textContent = ''; + l('CMTimerBarRenTime').textContent = Math.ceil( + (Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / + Game.fps, + ); + numberOfTimers++; + } else { + l('CMTimerBarRen').style.display = 'none'; + } - // On every frame all buff-timers are deleted and re-created - const BuffTimerBars = {}; - l('CMTimerBarBuffTimers').innerHTML = ''; - for (const i of Object.keys(Game.buffs)) { - if (Game.buffs[i]) { - const timer = CreateTimer(Game.buffs[i].name, Game.buffs[i].name, [{ id: `${Game.buffs[i].name}Bar` }]); - timer.style.display = ''; - let classColor = ''; - // Gives specific timers specific colors - if (typeof BuffColors[Game.buffs[i].name] !== 'undefined') { - classColor = BuffColors[Game.buffs[i].name]; - } else classColor = ColorPurple; - timer.lastChild.children[1].className = ColorBackPre + classColor; - timer.lastChild.children[1].style.color = 'black'; - if (CMOptions.TimerBarOverlay === 2) timer.lastChild.children[1].textContent = `${Math.round(100 * (Game.buffs[i].time / Game.buffs[i].maxTime))}%`; - else timer.lastChild.children[1].textContent = ''; - timer.lastChild.children[1].style.width = `${Math.round(Game.buffs[i].time * (maxWidthOneBar - Math.ceil(Game.buffs[i].time / Game.fps).toString().length * 8) / Game.buffs[i].maxTime)}px`; - timer.lastChild.children[2].textContent = Math.ceil(Game.buffs[i].time / Game.fps); - numberOfTimers++; - BuffTimerBars[Game.buffs[i].name] = timer; - } - } - for (const i of Object.keys(BuffTimerBars)) { - l('CMTimerBarBuffTimers').appendChild(BuffTimerBars[i]); - } + // On every frame all buff-timers are deleted and re-created + const BuffTimerBars = {}; + l('CMTimerBarBuffTimers').innerHTML = ''; + for (const i of Object.keys(Game.buffs)) { + if (Game.buffs[i]) { + const timer = CreateTimer(Game.buffs[i].name, Game.buffs[i].name, [ + { id: `${Game.buffs[i].name}Bar` }, + ]); + timer.style.display = ''; + let classColor = ''; + // Gives specific timers specific colors + if (typeof BuffColors[Game.buffs[i].name] !== 'undefined') { + classColor = BuffColors[Game.buffs[i].name]; + } else classColor = ColorPurple; + timer.lastChild.children[1].className = ColorBackPre + classColor; + timer.lastChild.children[1].style.color = 'black'; + if (CMOptions.TimerBarOverlay === 2) + timer.lastChild.children[1].textContent = `${Math.round( + 100 * (Game.buffs[i].time / Game.buffs[i].maxTime), + )}%`; + else timer.lastChild.children[1].textContent = ''; + timer.lastChild.children[1].style.width = `${Math.round( + (Game.buffs[i].time * + (maxWidthOneBar - + Math.ceil(Game.buffs[i].time / Game.fps).toString().length * 8)) / + Game.buffs[i].maxTime, + )}px`; + timer.lastChild.children[2].textContent = Math.ceil( + Game.buffs[i].time / Game.fps, + ); + numberOfTimers++; + BuffTimerBars[Game.buffs[i].name] = timer; + } + } + for (const i of Object.keys(BuffTimerBars)) { + l('CMTimerBarBuffTimers').appendChild(BuffTimerBars[i]); + } - if (numberOfTimers !== 0) { - l('CMTimerBar').style.height = `${numberOfTimers * 12 + 2}px`; - } - if (LastNumberOfTimers !== numberOfTimers) { - LastNumberOfTimers = numberOfTimers; - UpdateBotTimerBarPosition(); - } - } + if (numberOfTimers !== 0) { + l('CMTimerBar').style.height = `${numberOfTimers * 12 + 2}px`; + } + if (LastNumberOfTimers !== numberOfTimers) { + LastNumberOfTimers = numberOfTimers; + UpdateBotTimerBarPosition(); + } + } } diff --git a/src/Disp/Initialization/CreateWrinklerButton.js b/src/Disp/Initialization/CreateWrinklerButton.js index 0d28691..3b783b7 100644 --- a/src/Disp/Initialization/CreateWrinklerButton.js +++ b/src/Disp/Initialization/CreateWrinklerButton.js @@ -5,16 +5,21 @@ import PopAllNormalWrinklers from '../HelperFunctions/PopWrinklers'; * This function creates two objects at the bottom of the left column that allowing popping of wrinklers */ export default function CreateWrinklerButtons() { - const popAllA = document.createElement('a'); - popAllA.id = 'PopAllNormalWrinklerButton'; - popAllA.textContent = 'Pop All Normal'; - popAllA.className = 'option'; - popAllA.onclick = function () { PopAllNormalWrinklers(); }; - l('sectionLeftExtra').children[0].append(popAllA); - const popFattestA = document.createElement('a'); - popFattestA.id = 'PopFattestWrinklerButton'; - popFattestA.textContent = 'Pop Single Fattest'; - popFattestA.className = 'option'; - popFattestA.onclick = function () { if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0; }; - l('sectionLeftExtra').children[0].append(popFattestA); + const popAllA = document.createElement('a'); + popAllA.id = 'PopAllNormalWrinklerButton'; + popAllA.textContent = 'Pop All Normal'; + popAllA.className = 'option'; + popAllA.onclick = function () { + PopAllNormalWrinklers(); + }; + l('sectionLeftExtra').children[0].append(popAllA); + const popFattestA = document.createElement('a'); + popFattestA.id = 'PopFattestWrinklerButton'; + popFattestA.textContent = 'Pop Single Fattest'; + popFattestA.className = 'option'; + popFattestA.onclick = function () { + if (CacheWrinklersFattest[1] !== null) + Game.wrinklers[CacheWrinklersFattest[1]].hp = 0; + }; + l('sectionLeftExtra').children[0].append(popFattestA); } diff --git a/src/Disp/Initialization/CssArea.js b/src/Disp/Initialization/CssArea.js index 8008aab..878d405 100644 --- a/src/Disp/Initialization/CssArea.js +++ b/src/Disp/Initialization/CssArea.js @@ -5,9 +5,9 @@ import { DispCSS } from '../VariablesAndData'; */ export default function CreateCssArea() { - DispCSS = document.createElement('style'); - DispCSS.type = 'text/css'; - DispCSS.id = 'CMCSS'; + DispCSS = document.createElement('style'); + DispCSS.type = 'text/css'; + DispCSS.id = 'CMCSS'; - document.head.appendChild(DispCSS); + document.head.appendChild(DispCSS); } diff --git a/src/Disp/Initialization/UpdateBuildingUpgradeStyle.js b/src/Disp/Initialization/UpdateBuildingUpgradeStyle.js index 32ffb4f..205b689 100644 --- a/src/Disp/Initialization/UpdateBuildingUpgradeStyle.js +++ b/src/Disp/Initialization/UpdateBuildingUpgradeStyle.js @@ -2,9 +2,9 @@ * This function updates the style of the building and upgrade sections to make these sortable */ export default function UpdateBuildingUpgradeStyle() { - l('products').style.display = 'grid'; - l('storeBulk').style.gridRow = '1/1'; + l('products').style.display = 'grid'; + l('storeBulk').style.gridRow = '1/1'; - l('upgrades').style.display = 'flex'; - l('upgrades').style['flex-wrap'] = 'wrap'; + l('upgrades').style.display = 'flex'; + l('upgrades').style['flex-wrap'] = 'wrap'; } diff --git a/src/Disp/Initialization/WhiteScreen.js b/src/Disp/Initialization/WhiteScreen.js index 55ba72a..6a41828 100644 --- a/src/Disp/Initialization/WhiteScreen.js +++ b/src/Disp/Initialization/WhiteScreen.js @@ -2,13 +2,13 @@ * This function creates a white square over the full screen and appends it to l('wrapper') */ export default function CreateWhiteScreen() { - const WhiteScreen = document.createElement('div'); - WhiteScreen.id = 'CMWhiteScreen'; - WhiteScreen.style.width = '100%'; - WhiteScreen.style.height = '100%'; - WhiteScreen.style.backgroundColor = 'white'; - WhiteScreen.style.display = 'none'; - WhiteScreen.style.zIndex = '9999999999'; - WhiteScreen.style.position = 'absolute'; - l('wrapper').appendChild(WhiteScreen); + const WhiteScreen = document.createElement('div'); + WhiteScreen.id = 'CMWhiteScreen'; + WhiteScreen.style.width = '100%'; + WhiteScreen.style.height = '100%'; + WhiteScreen.style.backgroundColor = 'white'; + WhiteScreen.style.display = 'none'; + WhiteScreen.style.zIndex = '9999999999'; + WhiteScreen.style.position = 'absolute'; + l('wrapper').appendChild(WhiteScreen); } diff --git a/src/Disp/MenuSections/AddMenus.js b/src/Disp/MenuSections/AddMenus.js index e00f1cb..6146437 100644 --- a/src/Disp/MenuSections/AddMenus.js +++ b/src/Disp/MenuSections/AddMenus.js @@ -7,19 +7,19 @@ import AddMenuPref from './SettingsPage'; * This function adds the calll the functions to add extra info to the stats and options pages */ export default function AddMenu() { - const title = document.createElement('div'); - title.className = 'title'; + const title = document.createElement('div'); + title.className = 'title'; - if (Game.onMenu === 'prefs') { - title.textContent = 'Cookie Monster Settings'; - AddMenuPref(title); - } else if (Game.onMenu === 'stats') { - if (CMOptions.Stats) { - title.textContent = 'Cookie Monster Statistics'; - AddMenuStats(title); - } - } else if (Game.onMenu === 'log') { - title.textContent = 'Cookie Monster '; // To create space between name and button - AddMenuInfo(title); - } + if (Game.onMenu === 'prefs') { + title.textContent = 'Cookie Monster Settings'; + AddMenuPref(title); + } else if (Game.onMenu === 'stats') { + if (CMOptions.Stats) { + title.textContent = 'Cookie Monster Statistics'; + AddMenuStats(title); + } + } else if (Game.onMenu === 'log') { + title.textContent = 'Cookie Monster '; // To create space between name and button + AddMenuInfo(title); + } } diff --git a/src/Disp/MenuSections/AddStatsPage.js b/src/Disp/MenuSections/AddStatsPage.js index 55e942c..0c7c518 100644 --- a/src/Disp/MenuSections/AddStatsPage.js +++ b/src/Disp/MenuSections/AddStatsPage.js @@ -7,7 +7,13 @@ import * as GameData from '../../Data/Gamedata'; import { CMOptions } from '../../Config/VariablesAndData'; import { - CacheAverageClicks, CacheCentEgg, CacheLastChoEgg, CacheSeaSpec, CacheWrinklersFattest, CacheWrinklersNormal, CacheWrinklersTotal, + CacheAverageClicks, + CacheCentEgg, + CacheLastChoEgg, + CacheSeaSpec, + CacheWrinklersFattest, + CacheWrinklersNormal, + CacheWrinklersTotal, } from '../../Cache/VariablesAndData'; import PopAllNormalWrinklers from '../HelperFunctions/PopWrinklers'; import { ClickTimes, CookieTimes } from '../VariablesAndData'; @@ -20,156 +26,285 @@ import { Beautify } from '../BeautifyAndFormatting/BeautifyFormatting'; * @param {object} title On object that includes the title of the menu */ export default function AddMenuStats(title) { - const stats = document.createElement('div'); - stats.className = 'subsection'; - stats.appendChild(title); + const stats = document.createElement('div'); + stats.className = 'subsection'; + stats.appendChild(title); - stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky')); - if (CMOptions.Header.Lucky) { - stats.appendChild(CreateSections.LuckySection()); - } + stats.appendChild(CreateElements.StatsHeader('Lucky Cookies', 'Lucky')); + if (CMOptions.Header.Lucky) { + stats.appendChild(CreateSections.LuckySection()); + } - stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain')); - if (CMOptions.Header.Chain) { - stats.appendChild(CreateSections.ChainSection()); - } + stats.appendChild(CreateElements.StatsHeader('Chain Cookies', 'Chain')); + if (CMOptions.Header.Chain) { + stats.appendChild(CreateSections.ChainSection()); + } - if (Game.Objects['Wizard tower'].minigameLoaded) { - stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells')); - if (CMOptions.Header.Spells) { - stats.appendChild(CreateSections.SpellsSection()); - } - } + if (Game.Objects['Wizard tower'].minigameLoaded) { + stats.appendChild(CreateElements.StatsHeader('Spells', 'Spells')); + if (CMOptions.Header.Spells) { + stats.appendChild(CreateSections.SpellsSection()); + } + } - if (Game.Objects.Farm.minigameLoaded) { - stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden')); - if (CMOptions.Header.Garden) { - stats.appendChild(CreateSections.GardenSection()); - } - } + if (Game.Objects.Farm.minigameLoaded) { + stats.appendChild(CreateElements.StatsHeader('Garden', 'Garden')); + if (CMOptions.Header.Garden) { + stats.appendChild(CreateSections.GardenSection()); + } + } - stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige')); - if (CMOptions.Header.Prestige) { - stats.appendChild(CreateSections.PrestigeSection()); - } + stats.appendChild(CreateElements.StatsHeader('Prestige', 'Prestige')); + if (CMOptions.Header.Prestige) { + stats.appendChild(CreateSections.PrestigeSection()); + } - if (Game.cpsSucked > 0) { - stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink')); - if (CMOptions.Header.Wrink) { - const popAllFrag = document.createDocumentFragment(); - popAllFrag.appendChild(document.createTextNode(`${Beautify(CacheWrinklersTotal)} / ${Beautify(CacheWrinklersNormal)} `)); - const popAllA = document.createElement('a'); - popAllA.textContent = 'Pop All Normal'; - popAllA.className = 'option'; - popAllA.onclick = function () { PopAllNormalWrinklers(); }; - popAllFrag.appendChild(popAllA); - stats.appendChild(CreateElements.StatsListing('basic', 'Rewards of Popping (All/Normal)', popAllFrag)); - const popFattestFrag = document.createDocumentFragment(); - popFattestFrag.appendChild(document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `)); - const popFattestA = document.createElement('a'); - popFattestA.textContent = 'Pop Single Fattest'; - popFattestA.className = 'option'; - popFattestA.onclick = function () { if (CacheWrinklersFattest[1] !== null) Game.wrinklers[CacheWrinklersFattest[1]].hp = 0; }; - popFattestFrag.appendChild(popFattestA); - stats.appendChild(CreateElements.StatsListing('basic', `Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${CacheWrinklersFattest[1] !== null ? CacheWrinklersFattest[1] : 'None'})`, popFattestFrag)); - } - } + if (Game.cpsSucked > 0) { + stats.appendChild(CreateElements.StatsHeader('Wrinklers', 'Wrink')); + if (CMOptions.Header.Wrink) { + const popAllFrag = document.createDocumentFragment(); + popAllFrag.appendChild( + document.createTextNode( + `${Beautify(CacheWrinklersTotal)} / ${Beautify( + CacheWrinklersNormal, + )} `, + ), + ); + const popAllA = document.createElement('a'); + popAllA.textContent = 'Pop All Normal'; + popAllA.className = 'option'; + popAllA.onclick = function () { + PopAllNormalWrinklers(); + }; + popAllFrag.appendChild(popAllA); + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Rewards of Popping (All/Normal)', + popAllFrag, + ), + ); + const popFattestFrag = document.createDocumentFragment(); + popFattestFrag.appendChild( + document.createTextNode(`${Beautify(CacheWrinklersFattest[0])} `), + ); + const popFattestA = document.createElement('a'); + popFattestA.textContent = 'Pop Single Fattest'; + popFattestA.className = 'option'; + popFattestA.onclick = function () { + if (CacheWrinklersFattest[1] !== null) + Game.wrinklers[CacheWrinklersFattest[1]].hp = 0; + }; + popFattestFrag.appendChild(popFattestA); + stats.appendChild( + CreateElements.StatsListing( + 'basic', + `Rewards of Popping Single Fattest Non-Shiny Wrinkler (id: ${ + CacheWrinklersFattest[1] !== null + ? CacheWrinklersFattest[1] + : 'None' + })`, + popFattestFrag, + ), + ); + } + } - let specDisp = false; - const missingHalloweenCookies = []; - for (const i of Object.keys(GameData.HalloCookies)) { - if (!Game.Has(GameData.HalloCookies[i])) { - missingHalloweenCookies.push(GameData.HalloCookies[i]); - specDisp = true; - } - } - const missingChristmasCookies = []; - for (const i of Object.keys(GameData.ChristCookies)) { - if (!Game.Has(GameData.ChristCookies[i])) { - missingChristmasCookies.push(GameData.ChristCookies[i]); - specDisp = true; - } - } - const missingValentineCookies = []; - for (const i of Object.keys(GameData.ValCookies)) { - if (!Game.Has(GameData.ValCookies[i])) { - missingValentineCookies.push(GameData.ValCookies[i]); - specDisp = true; - } - } - const missingNormalEggs = []; - for (const i of Object.keys(Game.eggDrops)) { - if (!Game.HasUnlocked(Game.eggDrops[i])) { - missingNormalEggs.push(Game.eggDrops[i]); - specDisp = true; - } - } - const missingRareEggs = []; - for (const i of Object.keys(Game.rareEggDrops)) { - if (!Game.HasUnlocked(Game.rareEggDrops[i])) { - missingRareEggs.push(Game.rareEggDrops[i]); - specDisp = true; - } - } - const missingPlantDrops = []; - for (const i of Object.keys(GameData.PlantDrops)) { - if (!Game.HasUnlocked(GameData.PlantDrops[i])) { - missingPlantDrops.push(GameData.PlantDrops[i]); - specDisp = true; - } - } - const choEgg = (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg')); - const centEgg = Game.Has('Century egg'); + let specDisp = false; + const missingHalloweenCookies = []; + for (const i of Object.keys(GameData.HalloCookies)) { + if (!Game.Has(GameData.HalloCookies[i])) { + missingHalloweenCookies.push(GameData.HalloCookies[i]); + specDisp = true; + } + } + const missingChristmasCookies = []; + for (const i of Object.keys(GameData.ChristCookies)) { + if (!Game.Has(GameData.ChristCookies[i])) { + missingChristmasCookies.push(GameData.ChristCookies[i]); + specDisp = true; + } + } + const missingValentineCookies = []; + for (const i of Object.keys(GameData.ValCookies)) { + if (!Game.Has(GameData.ValCookies[i])) { + missingValentineCookies.push(GameData.ValCookies[i]); + specDisp = true; + } + } + const missingNormalEggs = []; + for (const i of Object.keys(Game.eggDrops)) { + if (!Game.HasUnlocked(Game.eggDrops[i])) { + missingNormalEggs.push(Game.eggDrops[i]); + specDisp = true; + } + } + const missingRareEggs = []; + for (const i of Object.keys(Game.rareEggDrops)) { + if (!Game.HasUnlocked(Game.rareEggDrops[i])) { + missingRareEggs.push(Game.rareEggDrops[i]); + specDisp = true; + } + } + const missingPlantDrops = []; + for (const i of Object.keys(GameData.PlantDrops)) { + if (!Game.HasUnlocked(GameData.PlantDrops[i])) { + missingPlantDrops.push(GameData.PlantDrops[i]); + specDisp = true; + } + } + const choEgg = + Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg'); + const centEgg = Game.Has('Century egg'); - if (Game.season === 'christmas' || specDisp || choEgg || centEgg) { - stats.appendChild(CreateElements.StatsHeader('Season Specials', 'Sea')); - if (CMOptions.Header.Sea) { - if (missingHalloweenCookies.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Halloween Cookies Left to Buy', CreateElements.StatsMissDisp(missingHalloweenCookies))); - if (missingChristmasCookies.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Christmas Cookies Left to Buy', CreateElements.StatsMissDisp(missingChristmasCookies))); - if (missingValentineCookies.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Valentine Cookies Left to Buy', CreateElements.StatsMissDisp(missingValentineCookies))); - if (missingNormalEggs.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Normal Easter Eggs Left to Unlock', CreateElements.StatsMissDisp(missingNormalEggs))); - if (missingRareEggs.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Rare Easter Eggs Left to Unlock', CreateElements.StatsMissDisp(missingRareEggs))); - if (missingPlantDrops.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Rare Plant Drops Left to Unlock', CreateElements.StatsMissDisp(missingPlantDrops))); + if (Game.season === 'christmas' || specDisp || choEgg || centEgg) { + stats.appendChild(CreateElements.StatsHeader('Season Specials', 'Sea')); + if (CMOptions.Header.Sea) { + if (missingHalloweenCookies.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Halloween Cookies Left to Buy', + CreateElements.StatsMissDisp(missingHalloweenCookies), + ), + ); + if (missingChristmasCookies.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Christmas Cookies Left to Buy', + CreateElements.StatsMissDisp(missingChristmasCookies), + ), + ); + if (missingValentineCookies.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Valentine Cookies Left to Buy', + CreateElements.StatsMissDisp(missingValentineCookies), + ), + ); + if (missingNormalEggs.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Normal Easter Eggs Left to Unlock', + CreateElements.StatsMissDisp(missingNormalEggs), + ), + ); + if (missingRareEggs.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Rare Easter Eggs Left to Unlock', + CreateElements.StatsMissDisp(missingRareEggs), + ), + ); + if (missingPlantDrops.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Rare Plant Drops Left to Unlock', + CreateElements.StatsMissDisp(missingPlantDrops), + ), + ); - if (Game.season === 'christmas') stats.appendChild(CreateElements.StatsListing('basic', 'Reindeer Reward', document.createTextNode(Beautify(CacheSeaSpec)))); - if (choEgg) { - stats.appendChild(CreateElements.StatsListing('withTooltip', 'Chocolate Egg Cookies', document.createTextNode(Beautify(CacheLastChoEgg)), 'ChoEggTooltipPlaceholder')); - } - if (centEgg) { - stats.appendChild(CreateElements.StatsListing('basic', 'Century Egg Multiplier', document.createTextNode(`${Math.round((CacheCentEgg - 1) * 10000) / 100}%`))); - } - } - } + if (Game.season === 'christmas') + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Reindeer Reward', + document.createTextNode(Beautify(CacheSeaSpec)), + ), + ); + if (choEgg) { + stats.appendChild( + CreateElements.StatsListing( + 'withTooltip', + 'Chocolate Egg Cookies', + document.createTextNode(Beautify(CacheLastChoEgg)), + 'ChoEggTooltipPlaceholder', + ), + ); + } + if (centEgg) { + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Century Egg Multiplier', + document.createTextNode( + `${Math.round((CacheCentEgg - 1) * 10000) / 100}%`, + ), + ), + ); + } + } + } - stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc')); - if (CMOptions.Header.Misc) { - stats.appendChild(CreateElements.StatsListing('basic', - `Average Cookies Per Second (Past ${CookieTimes[CMOptions.AvgCPSHist] < 60 ? (`${CookieTimes[CMOptions.AvgCPSHist]} seconds`) : ((CookieTimes[CMOptions.AvgCPSHist] / 60) + (CMOptions.AvgCPSHist === 3 ? ' minute' : ' minutes'))})`, - document.createTextNode(Beautify(GetCPS(), 3)))); - stats.appendChild(CreateElements.StatsListing('basic', `Average Cookie Clicks Per Second (Past ${ClickTimes[CMOptions.AvgClicksHist]}${CMOptions.AvgClicksHist === 0 ? ' second' : ' seconds'})`, document.createTextNode(Beautify(CacheAverageClicks, 1)))); - if (Game.Has('Fortune cookies')) { - const fortunes = []; - for (const i of Object.keys(GameData.Fortunes)) { - if (!Game.Has(GameData.Fortunes[i])) { - fortunes.push(GameData.Fortunes[i]); - } - } - if (fortunes.length !== 0) stats.appendChild(CreateElements.StatsListing('basic', 'Fortune Upgrades Left to Buy', CreateElements.StatsMissDisp(fortunes))); - } - if (CMOptions.ShowMissedGC) { - stats.appendChild(CreateElements.StatsListing('basic', 'Missed Golden Cookies', document.createTextNode(Beautify(Game.missedGoldenClicks)))); - } - if (Game.prefs.autosave) { - const timer = document.createElement('span'); - timer.id = 'CMStatsAutosaveTimer'; - timer.innerText = Game.sayTime(Game.fps * 60 - (Game.OnAscend ? 0 : (Game.T % (Game.fps * 60))), 4); - stats.appendChild(CreateElements.StatsListing('basic', 'Time till autosave', timer)); - } - } + stats.appendChild(CreateElements.StatsHeader('Miscellaneous', 'Misc')); + if (CMOptions.Header.Misc) { + stats.appendChild( + CreateElements.StatsListing( + 'basic', + `Average Cookies Per Second (Past ${ + CookieTimes[CMOptions.AvgCPSHist] < 60 + ? `${CookieTimes[CMOptions.AvgCPSHist]} seconds` + : CookieTimes[CMOptions.AvgCPSHist] / 60 + + (CMOptions.AvgCPSHist === 3 ? ' minute' : ' minutes') + })`, + document.createTextNode(Beautify(GetCPS(), 3)), + ), + ); + stats.appendChild( + CreateElements.StatsListing( + 'basic', + `Average Cookie Clicks Per Second (Past ${ + ClickTimes[CMOptions.AvgClicksHist] + }${CMOptions.AvgClicksHist === 0 ? ' second' : ' seconds'})`, + document.createTextNode(Beautify(CacheAverageClicks, 1)), + ), + ); + if (Game.Has('Fortune cookies')) { + const fortunes = []; + for (const i of Object.keys(GameData.Fortunes)) { + if (!Game.Has(GameData.Fortunes[i])) { + fortunes.push(GameData.Fortunes[i]); + } + } + if (fortunes.length !== 0) + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Fortune Upgrades Left to Buy', + CreateElements.StatsMissDisp(fortunes), + ), + ); + } + if (CMOptions.ShowMissedGC) { + stats.appendChild( + CreateElements.StatsListing( + 'basic', + 'Missed Golden Cookies', + document.createTextNode(Beautify(Game.missedGoldenClicks)), + ), + ); + } + if (Game.prefs.autosave) { + const timer = document.createElement('span'); + timer.id = 'CMStatsAutosaveTimer'; + timer.innerText = Game.sayTime( + Game.fps * 60 - (Game.OnAscend ? 0 : Game.T % (Game.fps * 60)), + 4, + ); + stats.appendChild( + CreateElements.StatsListing('basic', 'Time till autosave', timer), + ); + } + } - l('menu').insertBefore(stats, l('menu').childNodes[2]); + l('menu').insertBefore(stats, l('menu').childNodes[2]); - if (CMOptions.MissingUpgrades) { - AddMissingUpgrades(); - } + if (CMOptions.MissingUpgrades) { + AddMissingUpgrades(); + } } diff --git a/src/Disp/MenuSections/CreateDOMElements.js b/src/Disp/MenuSections/CreateDOMElements.js index 02809de..84ded84 100644 --- a/src/Disp/MenuSections/CreateDOMElements.js +++ b/src/Disp/MenuSections/CreateDOMElements.js @@ -12,28 +12,31 @@ import { TooltipText } from '../VariablesAndData'; * @returns {object} div The header object */ export function StatsHeader(text, config) { - const div = document.createElement('div'); - div.className = 'title'; - div.style.padding = '0px 16px'; - div.style.opacity = '0.7'; - div.style.fontSize = '17px'; - div.style.fontFamily = '"Kavoon", Georgia, serif'; - div.appendChild(document.createTextNode(`${text} `)); - const span = document.createElement('span'); - span.style.cursor = 'pointer'; - span.style.display = 'inline-block'; - span.style.height = '14px'; - span.style.width = '14px'; - span.style.borderRadius = '7px'; - span.style.textAlign = 'center'; - span.style.backgroundColor = '#C0C0C0'; - span.style.color = 'black'; - span.style.fontSize = '13px'; - span.style.verticalAlign = 'middle'; - span.textContent = CMOptions.Header[config] ? '-' : '+'; - span.onclick = function () { ToggleHeader(config); Game.UpdateMenu(); }; - div.appendChild(span); - return div; + const div = document.createElement('div'); + div.className = 'title'; + div.style.padding = '0px 16px'; + div.style.opacity = '0.7'; + div.style.fontSize = '17px'; + div.style.fontFamily = '"Kavoon", Georgia, serif'; + div.appendChild(document.createTextNode(`${text} `)); + const span = document.createElement('span'); + span.style.cursor = 'pointer'; + span.style.display = 'inline-block'; + span.style.height = '14px'; + span.style.width = '14px'; + span.style.borderRadius = '7px'; + span.style.textAlign = 'center'; + span.style.backgroundColor = '#C0C0C0'; + span.style.color = 'black'; + span.style.fontSize = '13px'; + span.style.verticalAlign = 'middle'; + span.textContent = CMOptions.Header[config] ? '-' : '+'; + span.onclick = function () { + ToggleHeader(config); + Game.UpdateMenu(); + }; + div.appendChild(span); + return div; } /** @@ -46,35 +49,39 @@ export function StatsHeader(text, config) { * @returns {object} div The option object */ export function StatsListing(type, name, text, placeholder) { - const div = document.createElement('div'); - div.className = 'listing'; + const div = document.createElement('div'); + div.className = 'listing'; - const listingName = document.createElement('b'); - listingName.textContent = name; - div.appendChild(listingName); - if (type === 'withTooltip') { - div.className = 'listing'; - div.appendChild(document.createTextNode(' ')); + const listingName = document.createElement('b'); + listingName.textContent = name; + div.appendChild(listingName); + if (type === 'withTooltip') { + div.className = 'listing'; + div.appendChild(document.createTextNode(' ')); - const tooltip = document.createElement('span'); - tooltip.onmouseout = function () { Game.tooltip.hide(); }; - tooltip.onmouseover = function () { Game.tooltip.draw(this, escape(TooltipText[placeholder].innerHTML)); }; - tooltip.style.cursor = 'default'; - tooltip.style.display = 'inline-block'; - tooltip.style.height = '10px'; - tooltip.style.width = '10px'; - tooltip.style.borderRadius = '5px'; - tooltip.style.textAlign = 'center'; - tooltip.style.backgroundColor = '#C0C0C0'; - tooltip.style.color = 'black'; - tooltip.style.fontSize = '9px'; - tooltip.style.verticalAlign = 'bottom'; - tooltip.textContent = '?'; - div.appendChild(tooltip); - } - div.appendChild(document.createTextNode(': ')); - div.appendChild(text); - return div; + const tooltip = document.createElement('span'); + tooltip.onmouseout = function () { + Game.tooltip.hide(); + }; + tooltip.onmouseover = function () { + Game.tooltip.draw(this, escape(TooltipText[placeholder].innerHTML)); + }; + tooltip.style.cursor = 'default'; + tooltip.style.display = 'inline-block'; + tooltip.style.height = '10px'; + tooltip.style.width = '10px'; + tooltip.style.borderRadius = '5px'; + tooltip.style.textAlign = 'center'; + tooltip.style.backgroundColor = '#C0C0C0'; + tooltip.style.color = 'black'; + tooltip.style.fontSize = '9px'; + tooltip.style.verticalAlign = 'bottom'; + tooltip.textContent = '?'; + div.appendChild(tooltip); + } + div.appendChild(document.createTextNode(': ')); + div.appendChild(text); + return div; } /** @@ -83,39 +90,43 @@ export function StatsListing(type, name, text, placeholder) { * @returns {object} frag The tooltip object */ export function StatsMissDisp(theMissDisp) { - const frag = document.createDocumentFragment(); - frag.appendChild(document.createTextNode(`${theMissDisp.length} `)); - const span = document.createElement('span'); - span.onmouseout = function () { Game.tooltip.hide(); }; - const placeholder = document.createElement('div'); - const missing = document.createElement('div'); - missing.style.minWidth = '140px'; - missing.style.marginBottom = '4px'; - const title = document.createElement('div'); - title.className = 'name'; - title.style.marginBottom = '4px'; - title.style.textAlign = 'center'; - title.textContent = 'Missing'; - missing.appendChild(title); - for (const i of Object.keys(theMissDisp)) { - const div = document.createElement('div'); - div.style.textAlign = 'center'; - div.appendChild(document.createTextNode(theMissDisp[i])); - missing.appendChild(div); - } - placeholder.appendChild(missing); - span.onmouseover = function () { Game.tooltip.draw(this, escape(placeholder.innerHTML)); }; - span.style.cursor = 'default'; - span.style.display = 'inline-block'; - span.style.height = '10px'; - span.style.width = '10px'; - span.style.borderRadius = '5px'; - span.style.textAlign = 'center'; - span.style.backgroundColor = '#C0C0C0'; - span.style.color = 'black'; - span.style.fontSize = '9px'; - span.style.verticalAlign = 'bottom'; - span.textContent = '?'; - frag.appendChild(span); - return frag; + const frag = document.createDocumentFragment(); + frag.appendChild(document.createTextNode(`${theMissDisp.length} `)); + const span = document.createElement('span'); + span.onmouseout = function () { + Game.tooltip.hide(); + }; + const placeholder = document.createElement('div'); + const missing = document.createElement('div'); + missing.style.minWidth = '140px'; + missing.style.marginBottom = '4px'; + const title = document.createElement('div'); + title.className = 'name'; + title.style.marginBottom = '4px'; + title.style.textAlign = 'center'; + title.textContent = 'Missing'; + missing.appendChild(title); + for (const i of Object.keys(theMissDisp)) { + const div = document.createElement('div'); + div.style.textAlign = 'center'; + div.appendChild(document.createTextNode(theMissDisp[i])); + missing.appendChild(div); + } + placeholder.appendChild(missing); + span.onmouseover = function () { + Game.tooltip.draw(this, escape(placeholder.innerHTML)); + }; + span.style.cursor = 'default'; + span.style.display = 'inline-block'; + span.style.height = '10px'; + span.style.width = '10px'; + span.style.borderRadius = '5px'; + span.style.textAlign = 'center'; + span.style.backgroundColor = '#C0C0C0'; + span.style.color = 'black'; + span.style.fontSize = '9px'; + span.style.verticalAlign = 'bottom'; + span.textContent = '?'; + frag.appendChild(span); + return frag; } diff --git a/src/Disp/MenuSections/CreateMissingUpgrades.js b/src/Disp/MenuSections/CreateMissingUpgrades.js index 7c7281b..bdd0d45 100644 --- a/src/Disp/MenuSections/CreateMissingUpgrades.js +++ b/src/Disp/MenuSections/CreateMissingUpgrades.js @@ -1,58 +1,88 @@ /** Functions related to displaying the missing upgrades in the Statistics page */ -import { CacheMissingUpgrades, CacheMissingUpgradesCookies, CacheMissingUpgradesPrestige } from '../../Cache/VariablesAndData'; +import { + CacheMissingUpgrades, + CacheMissingUpgradesCookies, + CacheMissingUpgradesPrestige, +} from '../../Cache/VariablesAndData'; /** * This function creates the missing upgrades sections for prestige, normal and cookie upgrades */ export function AddMissingUpgrades() { - for (const menuSection of (l('menu').children)) { - if (menuSection.children[0]) { - if (menuSection.children[0].innerHTML === 'Prestige' && CacheMissingUpgradesPrestige) { - const prestigeUpgradesMissing = CacheMissingUpgradesPrestige.match(new RegExp('div', 'g') || []).length / 2; - const title = document.createElement('div'); - title.id = 'CMMissingUpgradesPrestigeTitle'; - title.className = 'listing'; - const titlefrag = document.createElement('div'); - titlefrag.innerHTML = `Missing Prestige upgrades: ${prestigeUpgradesMissing}/${Game.PrestigeUpgrades.length} (${Math.floor((prestigeUpgradesMissing / Game.PrestigeUpgrades.length) * 100)}%)`; - title.appendChild(titlefrag); - menuSection.appendChild(title); - const upgrades = document.createElement('div'); - upgrades.className = 'listing crateBox'; - upgrades.innerHTML = CacheMissingUpgradesPrestige; - menuSection.appendChild(upgrades); - } else if (menuSection.children[0].innerHTML === 'Upgrades') { - if (CacheMissingUpgrades) { - const normalUpgradesMissing = CacheMissingUpgrades.match(new RegExp('div', 'g') || []).length / 2; - const title = document.createElement('div'); - title.id = 'CMMissingUpgradesTitle'; - title.className = 'listing'; - const titlefrag = document.createElement('div'); - titlefrag.innerHTML = `Missing normal upgrades: ${normalUpgradesMissing}/${Game.UpgradesByPool[''].length + Game.UpgradesByPool.tech.length} (${Math.floor((normalUpgradesMissing / (Game.UpgradesByPool[''].length + Game.UpgradesByPool.tech.length)) * 100)}%)`; - title.appendChild(titlefrag); - menuSection.insertBefore(title, menuSection.childNodes[3]); - const upgrades = document.createElement('div'); - upgrades.className = 'listing crateBox'; - upgrades.innerHTML = CacheMissingUpgrades; - menuSection.insertBefore(upgrades, document.getElementById('CMMissingUpgradesTitle').nextSibling); - } - if (CacheMissingUpgradesCookies) { - const cookieUpgradesMissing = CacheMissingUpgradesCookies.match(new RegExp('div', 'g') || []).length / 2; - const title = document.createElement('div'); - title.id = 'CMMissingUpgradesCookiesTitle'; - title.className = 'listing'; - const titlefrag = document.createElement('div'); - titlefrag.innerHTML = `Missing Cookie upgrades: ${cookieUpgradesMissing}/${Game.UpgradesByPool.cookie.length} (${Math.floor((cookieUpgradesMissing / Game.UpgradesByPool.cookie.length) * 100)}%)`; - title.appendChild(titlefrag); - menuSection.appendChild(title); - const upgrades = document.createElement('div'); - upgrades.className = 'listing crateBox'; - upgrades.innerHTML = CacheMissingUpgradesCookies; - menuSection.appendChild(upgrades); - } - } - } - } + for (const menuSection of l('menu').children) { + if (menuSection.children[0]) { + if ( + menuSection.children[0].innerHTML === 'Prestige' && + CacheMissingUpgradesPrestige + ) { + const prestigeUpgradesMissing = + CacheMissingUpgradesPrestige.match(new RegExp('div', 'g') || []) + .length / 2; + const title = document.createElement('div'); + title.id = 'CMMissingUpgradesPrestigeTitle'; + title.className = 'listing'; + const titlefrag = document.createElement('div'); + titlefrag.innerHTML = `Missing Prestige upgrades: ${prestigeUpgradesMissing}/${ + Game.PrestigeUpgrades.length + } (${Math.floor( + (prestigeUpgradesMissing / Game.PrestigeUpgrades.length) * 100, + )}%)`; + title.appendChild(titlefrag); + menuSection.appendChild(title); + const upgrades = document.createElement('div'); + upgrades.className = 'listing crateBox'; + upgrades.innerHTML = CacheMissingUpgradesPrestige; + menuSection.appendChild(upgrades); + } else if (menuSection.children[0].innerHTML === 'Upgrades') { + if (CacheMissingUpgrades) { + const normalUpgradesMissing = + CacheMissingUpgrades.match(new RegExp('div', 'g') || []).length / 2; + const title = document.createElement('div'); + title.id = 'CMMissingUpgradesTitle'; + title.className = 'listing'; + const titlefrag = document.createElement('div'); + titlefrag.innerHTML = `Missing normal upgrades: ${normalUpgradesMissing}/${ + Game.UpgradesByPool[''].length + Game.UpgradesByPool.tech.length + } (${Math.floor( + (normalUpgradesMissing / + (Game.UpgradesByPool[''].length + + Game.UpgradesByPool.tech.length)) * + 100, + )}%)`; + title.appendChild(titlefrag); + menuSection.insertBefore(title, menuSection.childNodes[3]); + const upgrades = document.createElement('div'); + upgrades.className = 'listing crateBox'; + upgrades.innerHTML = CacheMissingUpgrades; + menuSection.insertBefore( + upgrades, + document.getElementById('CMMissingUpgradesTitle').nextSibling, + ); + } + if (CacheMissingUpgradesCookies) { + const cookieUpgradesMissing = + CacheMissingUpgradesCookies.match(new RegExp('div', 'g') || []) + .length / 2; + const title = document.createElement('div'); + title.id = 'CMMissingUpgradesCookiesTitle'; + title.className = 'listing'; + const titlefrag = document.createElement('div'); + titlefrag.innerHTML = `Missing Cookie upgrades: ${cookieUpgradesMissing}/${ + Game.UpgradesByPool.cookie.length + } (${Math.floor( + (cookieUpgradesMissing / Game.UpgradesByPool.cookie.length) * 100, + )}%)`; + title.appendChild(titlefrag); + menuSection.appendChild(title); + const upgrades = document.createElement('div'); + upgrades.className = 'listing crateBox'; + upgrades.innerHTML = CacheMissingUpgradesCookies; + menuSection.appendChild(upgrades); + } + } + } + } } /** @@ -62,18 +92,20 @@ export function AddMissingUpgrades() { * @returns {string} ? The HTML string that creates the icon. */ export function crateMissing(me) { - let classes = 'crate upgrade missing'; - if (me.pool === 'prestige') classes += ' heavenly'; + let classes = 'crate upgrade missing'; + if (me.pool === 'prestige') classes += ' heavenly'; - let noFrame = 0; - if (!Game.prefs.crates) noFrame = 1; - if (noFrame) classes += ' noFrame'; + let noFrame = 0; + if (!Game.prefs.crates) noFrame = 1; + if (noFrame) classes += ' noFrame'; - let icon = me.icon; - if (me.iconFunction) icon = me.iconFunction(); - const tooltip = `function() {return Game.crateTooltip(Game.UpgradesById[${me.id}], 'stats');}`; - return `
+ style = "${`${ + icon[2] ? `background-image: url(${icon[2]});` : '' + }background-position:${-icon[0] * 48}px ${-icon[1] * 48}px`};">
`; } diff --git a/src/Disp/MenuSections/CreateStatsSections.js b/src/Disp/MenuSections/CreateStatsSections.js index 789b43e..e5ce1e4 100644 --- a/src/Disp/MenuSections/CreateStatsSections.js +++ b/src/Disp/MenuSections/CreateStatsSections.js @@ -2,29 +2,43 @@ import { MaxChainCookieReward } from '../../Cache/Stats/ChainCookies'; import { - CacheAvgCPSWithChoEgg, - CacheChainFrenzyMaxReward, - CacheChainFrenzyRequired, - CacheChainFrenzyRequiredNext, - CacheChainFrenzyWrathRequired, - CacheChainFrenzyWrathRequiredNext, - CacheChainMaxReward, - CacheChainRequired, - CacheChainRequiredNext, - CacheChainWrathMaxReward, - CacheChainWrathRequired, - CacheChainWrathRequiredNext, - CacheConjure, - CacheConjureReward, - CacheDragonsFortuneMultAdjustment, - CacheEdifice, - CacheEdificeBuilding, - CacheGoldenCookiesMult, - CacheHCPerSecond, CacheLastChoEgg, CacheLucky, CacheLuckyFrenzy, CacheLuckyReward, CacheLuckyRewardFrenzy, CacheLuckyWrathReward, CacheLuckyWrathRewardFrenzy, CacheNoGoldSwitchCookiesPS, CacheRealCookiesEarned, CacheWrathCookiesMult, CacheWrinklersTotal, + CacheAvgCPSWithChoEgg, + CacheChainFrenzyMaxReward, + CacheChainFrenzyRequired, + CacheChainFrenzyRequiredNext, + CacheChainFrenzyWrathRequired, + CacheChainFrenzyWrathRequiredNext, + CacheChainMaxReward, + CacheChainRequired, + CacheChainRequiredNext, + CacheChainWrathMaxReward, + CacheChainWrathRequired, + CacheChainWrathRequiredNext, + CacheConjure, + CacheConjureReward, + CacheDragonsFortuneMultAdjustment, + CacheEdifice, + CacheEdificeBuilding, + CacheGoldenCookiesMult, + CacheHCPerSecond, + CacheLastChoEgg, + CacheLucky, + CacheLuckyFrenzy, + CacheLuckyReward, + CacheLuckyRewardFrenzy, + CacheLuckyWrathReward, + CacheLuckyWrathRewardFrenzy, + CacheNoGoldSwitchCookiesPS, + CacheRealCookiesEarned, + CacheWrathCookiesMult, + CacheWrinklersTotal, } from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import ResetBonus from '../../Sim/SimulationEvents/ResetAscension'; -import { Beautify, FormatTime } from '../BeautifyAndFormatting/BeautifyFormatting'; +import { + Beautify, + FormatTime, +} from '../BeautifyAndFormatting/BeautifyFormatting'; import GetCPS from '../HelperFunctions/GetCPS'; import GetWrinkConfigBank from '../HelperFunctions/GetWrinkConfigBank'; @@ -36,63 +50,124 @@ import { StatsListing } from './CreateDOMElements'; * @returns {object} section The object contating the Lucky section */ export function LuckySection() { - // This sets which tooltip to display for certain stats - const goldCookTooltip = Game.auraMult('Dragon\'s Fortune') ? 'GoldCookDragonsFortuneTooltipPlaceholder' : 'GoldCookTooltipPlaceholder'; + // This sets which tooltip to display for certain stats + const goldCookTooltip = Game.auraMult("Dragon's Fortune") + ? 'GoldCookDragonsFortuneTooltipPlaceholder' + : 'GoldCookTooltipPlaceholder'; - const section = document.createElement('div'); - section.className = 'CMStatsLuckySection'; + const section = document.createElement('div'); + section.className = 'CMStatsLuckySection'; - const luckyColor = ((Game.cookies + GetWrinkConfigBank()) < CacheLucky) ? ColorRed : ColorGreen; - const luckyTime = ((Game.cookies + GetWrinkConfigBank()) < CacheLucky) ? FormatTime((CacheLucky - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; - const luckyReqFrag = document.createDocumentFragment(); - const luckyReqSpan = document.createElement('span'); - luckyReqSpan.style.fontWeight = 'bold'; - luckyReqSpan.className = ColorTextPre + luckyColor; - luckyReqSpan.textContent = Beautify(CacheLucky); - luckyReqFrag.appendChild(luckyReqSpan); - if (luckyTime !== '') { - const luckyReqSmall = document.createElement('small'); - luckyReqSmall.textContent = ` (${luckyTime})`; - luckyReqFrag.appendChild(luckyReqSmall); - } - section.appendChild(StatsListing('withTooltip', '"Lucky!" Cookies Required', luckyReqFrag, goldCookTooltip)); + const luckyColor = + Game.cookies + GetWrinkConfigBank() < CacheLucky ? ColorRed : ColorGreen; + const luckyTime = + Game.cookies + GetWrinkConfigBank() < CacheLucky + ? FormatTime( + (CacheLucky - (Game.cookies + GetWrinkConfigBank())) / GetCPS(), + ) + : ''; + const luckyReqFrag = document.createDocumentFragment(); + const luckyReqSpan = document.createElement('span'); + luckyReqSpan.style.fontWeight = 'bold'; + luckyReqSpan.className = ColorTextPre + luckyColor; + luckyReqSpan.textContent = Beautify(CacheLucky); + luckyReqFrag.appendChild(luckyReqSpan); + if (luckyTime !== '') { + const luckyReqSmall = document.createElement('small'); + luckyReqSmall.textContent = ` (${luckyTime})`; + luckyReqFrag.appendChild(luckyReqSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Lucky!" Cookies Required', + luckyReqFrag, + goldCookTooltip, + ), + ); - const luckyColorFrenzy = ((Game.cookies + GetWrinkConfigBank()) < CacheLuckyFrenzy) ? ColorRed : ColorGreen; - const luckyTimeFrenzy = ((Game.cookies + GetWrinkConfigBank()) < CacheLuckyFrenzy) ? FormatTime((CacheLuckyFrenzy - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; - const luckyReqFrenFrag = document.createDocumentFragment(); - const luckyReqFrenSpan = document.createElement('span'); - luckyReqFrenSpan.style.fontWeight = 'bold'; - luckyReqFrenSpan.className = ColorTextPre + luckyColorFrenzy; - luckyReqFrenSpan.textContent = Beautify(CacheLuckyFrenzy); - luckyReqFrenFrag.appendChild(luckyReqFrenSpan); - if (luckyTimeFrenzy !== '') { - const luckyReqFrenSmall = document.createElement('small'); - luckyReqFrenSmall.textContent = ` (${luckyTimeFrenzy})`; - luckyReqFrenFrag.appendChild(luckyReqFrenSmall); - } - section.appendChild(StatsListing('withTooltip', '"Lucky!" Cookies Required (Frenzy)', luckyReqFrenFrag, goldCookTooltip)); + const luckyColorFrenzy = + Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy + ? ColorRed + : ColorGreen; + const luckyTimeFrenzy = + Game.cookies + GetWrinkConfigBank() < CacheLuckyFrenzy + ? FormatTime( + (CacheLuckyFrenzy - (Game.cookies + GetWrinkConfigBank())) / GetCPS(), + ) + : ''; + const luckyReqFrenFrag = document.createDocumentFragment(); + const luckyReqFrenSpan = document.createElement('span'); + luckyReqFrenSpan.style.fontWeight = 'bold'; + luckyReqFrenSpan.className = ColorTextPre + luckyColorFrenzy; + luckyReqFrenSpan.textContent = Beautify(CacheLuckyFrenzy); + luckyReqFrenFrag.appendChild(luckyReqFrenSpan); + if (luckyTimeFrenzy !== '') { + const luckyReqFrenSmall = document.createElement('small'); + luckyReqFrenSmall.textContent = ` (${luckyTimeFrenzy})`; + luckyReqFrenFrag.appendChild(luckyReqFrenSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Lucky!" Cookies Required (Frenzy)', + luckyReqFrenFrag, + goldCookTooltip, + ), + ); - const luckySplit = CacheLuckyReward !== CacheLuckyWrathReward; + const luckySplit = CacheLuckyReward !== CacheLuckyWrathReward; - const luckyRewardMaxSpan = document.createElement('span'); - luckyRewardMaxSpan.style.fontWeight = 'bold'; - luckyRewardMaxSpan.className = ColorTextPre + CacheLuckyReward; - luckyRewardMaxSpan.textContent = Beautify(CacheLuckyReward) + (luckySplit ? (` / ${Beautify(CacheLuckyWrathReward)}`) : ''); - section.appendChild(StatsListing('withTooltip', `"Lucky!" Reward (MAX)${luckySplit ? ' (Golden / Wrath)' : ''}`, luckyRewardMaxSpan, goldCookTooltip)); + const luckyRewardMaxSpan = document.createElement('span'); + luckyRewardMaxSpan.style.fontWeight = 'bold'; + luckyRewardMaxSpan.className = ColorTextPre + CacheLuckyReward; + luckyRewardMaxSpan.textContent = + Beautify(CacheLuckyReward) + + (luckySplit ? ` / ${Beautify(CacheLuckyWrathReward)}` : ''); + section.appendChild( + StatsListing( + 'withTooltip', + `"Lucky!" Reward (MAX)${luckySplit ? ' (Golden / Wrath)' : ''}`, + luckyRewardMaxSpan, + goldCookTooltip, + ), + ); - const luckyRewardFrenzyMaxSpan = document.createElement('span'); - luckyRewardFrenzyMaxSpan.style.fontWeight = 'bold'; - luckyRewardFrenzyMaxSpan.className = ColorTextPre + luckyRewardFrenzyMaxSpan; - luckyRewardFrenzyMaxSpan.textContent = Beautify(CacheLuckyRewardFrenzy) + (luckySplit ? (` / ${Beautify(CacheLuckyWrathRewardFrenzy)}`) : ''); - section.appendChild(StatsListing('withTooltip', `"Lucky!" Reward (MAX) (Frenzy)${luckySplit ? ' (Golden / Wrath)' : ''}`, luckyRewardFrenzyMaxSpan, goldCookTooltip)); + const luckyRewardFrenzyMaxSpan = document.createElement('span'); + luckyRewardFrenzyMaxSpan.style.fontWeight = 'bold'; + luckyRewardFrenzyMaxSpan.className = ColorTextPre + luckyRewardFrenzyMaxSpan; + luckyRewardFrenzyMaxSpan.textContent = + Beautify(CacheLuckyRewardFrenzy) + + (luckySplit ? ` / ${Beautify(CacheLuckyWrathRewardFrenzy)}` : ''); + section.appendChild( + StatsListing( + 'withTooltip', + `"Lucky!" Reward (MAX) (Frenzy)${luckySplit ? ' (Golden / Wrath)' : ''}`, + luckyRewardFrenzyMaxSpan, + goldCookTooltip, + ), + ); - const luckyCurBase = Math.min((Game.cookies + GetWrinkConfigBank()) * 0.15, CacheNoGoldSwitchCookiesPS * CacheDragonsFortuneMultAdjustment * 60 * 15) + 13; - const luckyCurSpan = document.createElement('span'); - luckyCurSpan.style.fontWeight = 'bold'; - luckyCurSpan.className = ColorTextPre + luckyCurSpan; - luckyCurSpan.textContent = Beautify(CacheGoldenCookiesMult * luckyCurBase) + (luckySplit ? (` / ${Beautify(CacheWrathCookiesMult * luckyCurBase)}`) : ''); - section.appendChild(StatsListing('withTooltip', `"Lucky!" Reward (CUR)${luckySplit ? ' (Golden / Wrath)' : ''}`, luckyCurSpan, goldCookTooltip)); - return section; + const luckyCurBase = + Math.min( + (Game.cookies + GetWrinkConfigBank()) * 0.15, + CacheNoGoldSwitchCookiesPS * CacheDragonsFortuneMultAdjustment * 60 * 15, + ) + 13; + const luckyCurSpan = document.createElement('span'); + luckyCurSpan.style.fontWeight = 'bold'; + luckyCurSpan.className = ColorTextPre + luckyCurSpan; + luckyCurSpan.textContent = + Beautify(CacheGoldenCookiesMult * luckyCurBase) + + (luckySplit ? ` / ${Beautify(CacheWrathCookiesMult * luckyCurBase)}` : ''); + section.appendChild( + StatsListing( + 'withTooltip', + `"Lucky!" Reward (CUR)${luckySplit ? ' (Golden / Wrath)' : ''}`, + luckyCurSpan, + goldCookTooltip, + ), + ); + return section; } /** @@ -100,84 +175,215 @@ export function LuckySection() { * @returns {object} section The object contating the Chain section */ export function ChainSection() { - // This sets which tooltip to display for certain stats - const goldCookTooltip = Game.auraMult('Dragon\'s Fortune') ? 'GoldCookDragonsFortuneTooltipPlaceholder' : 'GoldCookTooltipPlaceholder'; + // This sets which tooltip to display for certain stats + const goldCookTooltip = Game.auraMult("Dragon's Fortune") + ? 'GoldCookDragonsFortuneTooltipPlaceholder' + : 'GoldCookTooltipPlaceholder'; - const section = document.createElement('div'); - section.className = 'CMStatsChainSection'; + const section = document.createElement('div'); + section.className = 'CMStatsChainSection'; - const chainColor = ((Game.cookies + GetWrinkConfigBank()) < CacheChainRequired) ? ColorRed : ColorGreen; - const chainTime = ((Game.cookies + GetWrinkConfigBank()) < CacheChainRequired) ? FormatTime((CacheChainRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; - const chainReqFrag = document.createDocumentFragment(); - const chainReqSpan = document.createElement('span'); - chainReqSpan.style.fontWeight = 'bold'; - chainReqSpan.className = ColorTextPre + chainColor; - chainReqSpan.textContent = Beautify(CacheChainRequired); - chainReqFrag.appendChild(chainReqSpan); - if (chainTime !== '') { - const chainReqSmall = document.createElement('small'); - chainReqSmall.textContent = ` (${chainTime})`; - chainReqFrag.appendChild(chainReqSmall); - } - section.appendChild(StatsListing('withTooltip', '"Chain" Cookies Required', chainReqFrag, goldCookTooltip)); + const chainColor = + Game.cookies + GetWrinkConfigBank() < CacheChainRequired + ? ColorRed + : ColorGreen; + const chainTime = + Game.cookies + GetWrinkConfigBank() < CacheChainRequired + ? FormatTime( + (CacheChainRequired - (Game.cookies + GetWrinkConfigBank())) / + GetCPS(), + ) + : ''; + const chainReqFrag = document.createDocumentFragment(); + const chainReqSpan = document.createElement('span'); + chainReqSpan.style.fontWeight = 'bold'; + chainReqSpan.className = ColorTextPre + chainColor; + chainReqSpan.textContent = Beautify(CacheChainRequired); + chainReqFrag.appendChild(chainReqSpan); + if (chainTime !== '') { + const chainReqSmall = document.createElement('small'); + chainReqSmall.textContent = ` (${chainTime})`; + chainReqFrag.appendChild(chainReqSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Cookies Required', + chainReqFrag, + goldCookTooltip, + ), + ); - const chainWrathColor = ((Game.cookies + GetWrinkConfigBank()) < CacheChainWrathRequired) ? ColorRed : ColorGreen; - const chainWrathTime = ((Game.cookies + GetWrinkConfigBank()) < CacheChainWrathRequired) ? FormatTime((CacheChainWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; - const chainWrathReqFrag = document.createDocumentFragment(); - const chainWrathReqSpan = document.createElement('span'); - chainWrathReqSpan.style.fontWeight = 'bold'; - chainWrathReqSpan.className = ColorTextPre + chainWrathColor; - chainWrathReqSpan.textContent = Beautify(CacheChainWrathRequired); - chainWrathReqFrag.appendChild(chainWrathReqSpan); - if (chainWrathTime !== '') { - const chainWrathReqSmall = document.createElement('small'); - chainWrathReqSmall.textContent = ` (${chainWrathTime})`; - chainWrathReqFrag.appendChild(chainWrathReqSmall); - } - section.appendChild(StatsListing('withTooltip', '"Chain" Cookies Required (Wrath)', chainWrathReqFrag, goldCookTooltip)); + const chainWrathColor = + Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired + ? ColorRed + : ColorGreen; + const chainWrathTime = + Game.cookies + GetWrinkConfigBank() < CacheChainWrathRequired + ? FormatTime( + (CacheChainWrathRequired - (Game.cookies + GetWrinkConfigBank())) / + GetCPS(), + ) + : ''; + const chainWrathReqFrag = document.createDocumentFragment(); + const chainWrathReqSpan = document.createElement('span'); + chainWrathReqSpan.style.fontWeight = 'bold'; + chainWrathReqSpan.className = ColorTextPre + chainWrathColor; + chainWrathReqSpan.textContent = Beautify(CacheChainWrathRequired); + chainWrathReqFrag.appendChild(chainWrathReqSpan); + if (chainWrathTime !== '') { + const chainWrathReqSmall = document.createElement('small'); + chainWrathReqSmall.textContent = ` (${chainWrathTime})`; + chainWrathReqFrag.appendChild(chainWrathReqSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Cookies Required (Wrath)', + chainWrathReqFrag, + goldCookTooltip, + ), + ); - const chainColorFrenzy = ((Game.cookies + GetWrinkConfigBank()) < CacheChainFrenzyRequired) ? ColorRed : ColorGreen; - const chainTimeFrenzy = ((Game.cookies + GetWrinkConfigBank()) < CacheChainFrenzyRequired) ? FormatTime((CacheChainFrenzyRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; - const chainReqFrenFrag = document.createDocumentFragment(); - const chainReqFrenSpan = document.createElement('span'); - chainReqFrenSpan.style.fontWeight = 'bold'; - chainReqFrenSpan.className = ColorTextPre + chainColorFrenzy; - chainReqFrenSpan.textContent = Beautify(CacheChainFrenzyRequired); - chainReqFrenFrag.appendChild(chainReqFrenSpan); - if (chainTimeFrenzy !== '') { - const chainReqFrenSmall = document.createElement('small'); - chainReqFrenSmall.textContent = ` (${chainTimeFrenzy})`; - chainReqFrenFrag.appendChild(chainReqFrenSmall); - } - section.appendChild(StatsListing('withTooltip', '"Chain" Cookies Required (Frenzy)', chainReqFrenFrag, goldCookTooltip)); + const chainColorFrenzy = + Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired + ? ColorRed + : ColorGreen; + const chainTimeFrenzy = + Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyRequired + ? FormatTime( + (CacheChainFrenzyRequired - (Game.cookies + GetWrinkConfigBank())) / + GetCPS(), + ) + : ''; + const chainReqFrenFrag = document.createDocumentFragment(); + const chainReqFrenSpan = document.createElement('span'); + chainReqFrenSpan.style.fontWeight = 'bold'; + chainReqFrenSpan.className = ColorTextPre + chainColorFrenzy; + chainReqFrenSpan.textContent = Beautify(CacheChainFrenzyRequired); + chainReqFrenFrag.appendChild(chainReqFrenSpan); + if (chainTimeFrenzy !== '') { + const chainReqFrenSmall = document.createElement('small'); + chainReqFrenSmall.textContent = ` (${chainTimeFrenzy})`; + chainReqFrenFrag.appendChild(chainReqFrenSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Cookies Required (Frenzy)', + chainReqFrenFrag, + goldCookTooltip, + ), + ); - const chainWrathColorFrenzy = ((Game.cookies + GetWrinkConfigBank()) < CacheChainFrenzyWrathRequired) ? ColorRed : ColorGreen; - const chainWrathTimeFrenzy = ((Game.cookies + GetWrinkConfigBank()) < CacheChainFrenzyWrathRequired) ? FormatTime((CacheChainFrenzyWrathRequired - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; - const chainWrathReqFrenFrag = document.createDocumentFragment(); - const chainWrathReqFrenSpan = document.createElement('span'); - chainWrathReqFrenSpan.style.fontWeight = 'bold'; - chainWrathReqFrenSpan.className = ColorTextPre + chainWrathColorFrenzy; - chainWrathReqFrenSpan.textContent = Beautify(CacheChainFrenzyWrathRequired); - chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan); - if (chainWrathTimeFrenzy !== '') { - const chainWrathReqFrenSmall = document.createElement('small'); - chainWrathReqFrenSmall.textContent = ` (${chainWrathTimeFrenzy})`; - chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall); - } - section.appendChild(StatsListing('withTooltip', '"Chain" Cookies Required (Frenzy) (Wrath)', chainWrathReqFrenFrag, goldCookTooltip)); + const chainWrathColorFrenzy = + Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired + ? ColorRed + : ColorGreen; + const chainWrathTimeFrenzy = + Game.cookies + GetWrinkConfigBank() < CacheChainFrenzyWrathRequired + ? FormatTime( + (CacheChainFrenzyWrathRequired - + (Game.cookies + GetWrinkConfigBank())) / + GetCPS(), + ) + : ''; + const chainWrathReqFrenFrag = document.createDocumentFragment(); + const chainWrathReqFrenSpan = document.createElement('span'); + chainWrathReqFrenSpan.style.fontWeight = 'bold'; + chainWrathReqFrenSpan.className = ColorTextPre + chainWrathColorFrenzy; + chainWrathReqFrenSpan.textContent = Beautify(CacheChainFrenzyWrathRequired); + chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSpan); + if (chainWrathTimeFrenzy !== '') { + const chainWrathReqFrenSmall = document.createElement('small'); + chainWrathReqFrenSmall.textContent = ` (${chainWrathTimeFrenzy})`; + chainWrathReqFrenFrag.appendChild(chainWrathReqFrenSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Cookies Required (Frenzy) (Wrath)', + chainWrathReqFrenFrag, + goldCookTooltip, + ), + ); - section.appendChild(StatsListing('withTooltip', '"Chain" Reward (MAX) (Golden / Wrath)', document.createTextNode(`${Beautify(CacheChainMaxReward[0])} / ${Beautify(CacheChainWrathMaxReward[0])}`), goldCookTooltip)); + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Reward (MAX) (Golden / Wrath)', + document.createTextNode( + `${Beautify(CacheChainMaxReward[0])} / ${Beautify( + CacheChainWrathMaxReward[0], + )}`, + ), + goldCookTooltip, + ), + ); - section.appendChild(StatsListing('withTooltip', '"Chain" Reward (MAX) (Frenzy) (Golden / Wrath)', document.createTextNode((`${Beautify(CacheChainFrenzyMaxReward[0])} / ${Beautify(CacheChainFrenzyMaxReward[0])}`)), goldCookTooltip)); + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Reward (MAX) (Frenzy) (Golden / Wrath)', + document.createTextNode( + `${Beautify(CacheChainFrenzyMaxReward[0])} / ${Beautify( + CacheChainFrenzyMaxReward[0], + )}`, + ), + goldCookTooltip, + ), + ); - const chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment, Game.cookies * 0.5); - const chainCur = MaxChainCookieReward(7, chainCurMax, CacheGoldenCookiesMult)[0]; - const chainCurWrath = MaxChainCookieReward(6, chainCurMax, CacheWrathCookiesMult)[0]; - section.appendChild(StatsListing('withTooltip', '"Chain" Reward (CUR) (Golden / Wrath)', document.createTextNode((`${Beautify(chainCur)} / ${Beautify(chainCurWrath)}`)), goldCookTooltip)); + const chainCurMax = Math.min( + Game.cookiesPs * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment, + Game.cookies * 0.5, + ); + const chainCur = MaxChainCookieReward( + 7, + chainCurMax, + CacheGoldenCookiesMult, + )[0]; + const chainCurWrath = MaxChainCookieReward( + 6, + chainCurMax, + CacheWrathCookiesMult, + )[0]; + section.appendChild( + StatsListing( + 'withTooltip', + '"Chain" Reward (CUR) (Golden / Wrath)', + document.createTextNode( + `${Beautify(chainCur)} / ${Beautify(chainCurWrath)}`, + ), + goldCookTooltip, + ), + ); - section.appendChild(StatsListing('withTooltip', 'CPS Needed For Next Level (G / W)', document.createTextNode((`${Beautify(CacheChainRequiredNext)} / ${Beautify(CacheChainWrathRequiredNext)}`)), 'ChainNextLevelPlaceholder')); - section.appendChild(StatsListing('withTooltip', 'CPS Needed For Next Level (Frenzy) (G / W)', document.createTextNode((`${Beautify(CacheChainFrenzyRequiredNext)} / ${Beautify(CacheChainFrenzyWrathRequiredNext)}`)), 'ChainNextLevelPlaceholder')); - return section; + section.appendChild( + StatsListing( + 'withTooltip', + 'CPS Needed For Next Level (G / W)', + document.createTextNode( + `${Beautify(CacheChainRequiredNext)} / ${Beautify( + CacheChainWrathRequiredNext, + )}`, + ), + 'ChainNextLevelPlaceholder', + ), + ); + section.appendChild( + StatsListing( + 'withTooltip', + 'CPS Needed For Next Level (Frenzy) (G / W)', + document.createTextNode( + `${Beautify(CacheChainFrenzyRequiredNext)} / ${Beautify( + CacheChainFrenzyWrathRequiredNext, + )}`, + ), + 'ChainNextLevelPlaceholder', + ), + ); + return section; } /** @@ -185,48 +391,109 @@ export function ChainSection() { * @returns {object} section The object contating the Spells section */ export function SpellsSection() { - const section = document.createElement('div'); - section.className = 'CMStatsSpellsSection'; + const section = document.createElement('div'); + section.className = 'CMStatsSpellsSection'; - const conjureColor = ((Game.cookies + GetWrinkConfigBank()) < CacheConjure) ? ColorRed : ColorGreen; - const conjureTime = ((Game.cookies + GetWrinkConfigBank()) < CacheConjure) ? FormatTime((CacheConjure - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; + const conjureColor = + Game.cookies + GetWrinkConfigBank() < CacheConjure ? ColorRed : ColorGreen; + const conjureTime = + Game.cookies + GetWrinkConfigBank() < CacheConjure + ? FormatTime( + (CacheConjure - (Game.cookies + GetWrinkConfigBank())) / GetCPS(), + ) + : ''; - const conjureReqFrag = document.createDocumentFragment(); - const conjureReqSpan = document.createElement('span'); - conjureReqSpan.style.fontWeight = 'bold'; - conjureReqSpan.className = ColorTextPre + conjureColor; - conjureReqSpan.textContent = Beautify(CacheConjure); - conjureReqFrag.appendChild(conjureReqSpan); - if (conjureTime !== '') { - const conjureReqSmall = document.createElement('small'); - conjureReqSmall.textContent = ` (${conjureTime})`; - conjureReqFrag.appendChild(conjureReqSmall); - } - section.appendChild(StatsListing('withTooltip', '"Conjure Baked Goods" Cookies Required', conjureReqFrag, 'GoldCookTooltipPlaceholder')); - section.appendChild(StatsListing('withTooltip', '"Conjure Baked Goods" Reward (MAX)', document.createTextNode(Beautify(CacheConjureReward)), 'GoldCookTooltipPlaceholder')); + const conjureReqFrag = document.createDocumentFragment(); + const conjureReqSpan = document.createElement('span'); + conjureReqSpan.style.fontWeight = 'bold'; + conjureReqSpan.className = ColorTextPre + conjureColor; + conjureReqSpan.textContent = Beautify(CacheConjure); + conjureReqFrag.appendChild(conjureReqSpan); + if (conjureTime !== '') { + const conjureReqSmall = document.createElement('small'); + conjureReqSmall.textContent = ` (${conjureTime})`; + conjureReqFrag.appendChild(conjureReqSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Conjure Baked Goods" Cookies Required', + conjureReqFrag, + 'GoldCookTooltipPlaceholder', + ), + ); + section.appendChild( + StatsListing( + 'withTooltip', + '"Conjure Baked Goods" Reward (MAX)', + document.createTextNode(Beautify(CacheConjureReward)), + 'GoldCookTooltipPlaceholder', + ), + ); - const conjureFrenzyColor = ((Game.cookies + GetWrinkConfigBank()) < CacheConjure * 7) ? ColorRed : ColorGreen; - const conjureFrenzyCur = Math.min((Game.cookies + GetWrinkConfigBank()) * 0.15, CacheNoGoldSwitchCookiesPS * 60 * 30); - const conjureFrenzyTime = ((Game.cookies + GetWrinkConfigBank()) < CacheConjure * 7) ? FormatTime((CacheConjure * 7 - (Game.cookies + GetWrinkConfigBank())) / GetCPS()) : ''; + const conjureFrenzyColor = + Game.cookies + GetWrinkConfigBank() < CacheConjure * 7 + ? ColorRed + : ColorGreen; + const conjureFrenzyCur = Math.min( + (Game.cookies + GetWrinkConfigBank()) * 0.15, + CacheNoGoldSwitchCookiesPS * 60 * 30, + ); + const conjureFrenzyTime = + Game.cookies + GetWrinkConfigBank() < CacheConjure * 7 + ? FormatTime( + (CacheConjure * 7 - (Game.cookies + GetWrinkConfigBank())) / GetCPS(), + ) + : ''; - const conjureFrenzyReqFrag = document.createDocumentFragment(); - const conjureFrenzyReqSpan = document.createElement('span'); - conjureFrenzyReqSpan.style.fontWeight = 'bold'; - conjureFrenzyReqSpan.className = ColorTextPre + conjureFrenzyColor; - conjureFrenzyReqSpan.textContent = Beautify(CacheConjure * 7); - conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSpan); - if (conjureFrenzyTime !== '') { - const conjureFrenzyReqSmall = document.createElement('small'); - conjureFrenzyReqSmall.textContent = ` (${conjureFrenzyTime})`; - conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSmall); - } - section.appendChild(StatsListing('withTooltip', '"Conjure Baked Goods" Cookies Required (Frenzy)', conjureFrenzyReqFrag, 'GoldCookTooltipPlaceholder')); - section.appendChild(StatsListing('withTooltip', '"Conjure Baked Goods" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CacheConjureReward * 7)), 'GoldCookTooltipPlaceholder')); - section.appendChild(StatsListing('withTooltip', '"Conjure Baked Goods" Reward (CUR)', document.createTextNode(Beautify(conjureFrenzyCur)), 'GoldCookTooltipPlaceholder')); - if (CacheEdifice) { - section.appendChild(StatsListing('withTooltip', '"Spontaneous Edifice" Cookies Required (most expensive building)', document.createTextNode(`${Beautify(CacheEdifice)} (${CacheEdificeBuilding})`), 'GoldCookTooltipPlaceholder')); - } - return section; + const conjureFrenzyReqFrag = document.createDocumentFragment(); + const conjureFrenzyReqSpan = document.createElement('span'); + conjureFrenzyReqSpan.style.fontWeight = 'bold'; + conjureFrenzyReqSpan.className = ColorTextPre + conjureFrenzyColor; + conjureFrenzyReqSpan.textContent = Beautify(CacheConjure * 7); + conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSpan); + if (conjureFrenzyTime !== '') { + const conjureFrenzyReqSmall = document.createElement('small'); + conjureFrenzyReqSmall.textContent = ` (${conjureFrenzyTime})`; + conjureFrenzyReqFrag.appendChild(conjureFrenzyReqSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + '"Conjure Baked Goods" Cookies Required (Frenzy)', + conjureFrenzyReqFrag, + 'GoldCookTooltipPlaceholder', + ), + ); + section.appendChild( + StatsListing( + 'withTooltip', + '"Conjure Baked Goods" Reward (MAX) (Frenzy)', + document.createTextNode(Beautify(CacheConjureReward * 7)), + 'GoldCookTooltipPlaceholder', + ), + ); + section.appendChild( + StatsListing( + 'withTooltip', + '"Conjure Baked Goods" Reward (CUR)', + document.createTextNode(Beautify(conjureFrenzyCur)), + 'GoldCookTooltipPlaceholder', + ), + ); + if (CacheEdifice) { + section.appendChild( + StatsListing( + 'withTooltip', + '"Spontaneous Edifice" Cookies Required (most expensive building)', + document.createTextNode( + `${Beautify(CacheEdifice)} (${CacheEdificeBuilding})`, + ), + 'GoldCookTooltipPlaceholder', + ), + ); + } + return section; } /** @@ -234,37 +501,65 @@ export function SpellsSection() { * @returns {object} section The object contating the Spells section */ export function GardenSection() { - const section = document.createElement('div'); - section.className = 'CMStatsGardenSection'; + const section = document.createElement('div'); + section.className = 'CMStatsGardenSection'; - const bakeberryColor = (Game.cookies < Game.cookiesPs * 60 * 30) ? ColorRed : ColorGreen; - const bakeberryFrag = document.createElement('span'); - bakeberryFrag.style.fontWeight = 'bold'; - bakeberryFrag.className = ColorTextPre + bakeberryColor; - bakeberryFrag.textContent = Beautify(Game.cookiesPs * 60 * 30); - section.appendChild(StatsListing('basic', 'Cookies required for max reward of Bakeberry: ', bakeberryFrag)); + const bakeberryColor = + Game.cookies < Game.cookiesPs * 60 * 30 ? ColorRed : ColorGreen; + const bakeberryFrag = document.createElement('span'); + bakeberryFrag.style.fontWeight = 'bold'; + bakeberryFrag.className = ColorTextPre + bakeberryColor; + bakeberryFrag.textContent = Beautify(Game.cookiesPs * 60 * 30); + section.appendChild( + StatsListing( + 'basic', + 'Cookies required for max reward of Bakeberry: ', + bakeberryFrag, + ), + ); - const chocorootColor = (Game.cookies < Game.cookiesPs * 60 * 3) ? ColorRed : ColorGreen; - const chocorootFrag = document.createElement('span'); - chocorootFrag.style.fontWeight = 'bold'; - chocorootFrag.className = ColorTextPre + chocorootColor; - chocorootFrag.textContent = Beautify(Game.cookiesPs * 60 * 3); - section.appendChild(StatsListing('basic', 'Cookies required for max reward of Chocoroot: ', chocorootFrag)); + const chocorootColor = + Game.cookies < Game.cookiesPs * 60 * 3 ? ColorRed : ColorGreen; + const chocorootFrag = document.createElement('span'); + chocorootFrag.style.fontWeight = 'bold'; + chocorootFrag.className = ColorTextPre + chocorootColor; + chocorootFrag.textContent = Beautify(Game.cookiesPs * 60 * 3); + section.appendChild( + StatsListing( + 'basic', + 'Cookies required for max reward of Chocoroot: ', + chocorootFrag, + ), + ); - const queenbeetColor = (Game.cookies < Game.cookiesPs * 60 * 60) ? ColorRed : ColorGreen; - const queenbeetFrag = document.createElement('span'); - queenbeetFrag.style.fontWeight = 'bold'; - queenbeetFrag.className = ColorTextPre + queenbeetColor; - queenbeetFrag.textContent = Beautify(Game.cookiesPs * 60 * 60); - section.appendChild(StatsListing('basic', 'Cookies required for max reward of Queenbeet: ', queenbeetFrag)); + const queenbeetColor = + Game.cookies < Game.cookiesPs * 60 * 60 ? ColorRed : ColorGreen; + const queenbeetFrag = document.createElement('span'); + queenbeetFrag.style.fontWeight = 'bold'; + queenbeetFrag.className = ColorTextPre + queenbeetColor; + queenbeetFrag.textContent = Beautify(Game.cookiesPs * 60 * 60); + section.appendChild( + StatsListing( + 'basic', + 'Cookies required for max reward of Queenbeet: ', + queenbeetFrag, + ), + ); - const duketaterColor = (Game.cookies < Game.cookiesPs * 60 * 120) ? ColorRed : ColorGreen; - const duketaterFrag = document.createElement('span'); - duketaterFrag.style.fontWeight = 'bold'; - duketaterFrag.className = ColorTextPre + duketaterColor; - duketaterFrag.textContent = Beautify(Game.cookiesPs * 60 * 120); - section.appendChild(StatsListing('basic', 'Cookies required for max reward of Duketater: ', duketaterFrag)); - return section; + const duketaterColor = + Game.cookies < Game.cookiesPs * 60 * 120 ? ColorRed : ColorGreen; + const duketaterFrag = document.createElement('span'); + duketaterFrag.style.fontWeight = 'bold'; + duketaterFrag.className = ColorTextPre + duketaterColor; + duketaterFrag.textContent = Beautify(Game.cookiesPs * 60 * 120); + section.appendChild( + StatsListing( + 'basic', + 'Cookies required for max reward of Duketater: ', + duketaterFrag, + ), + ); + return section; } /** @@ -272,78 +567,175 @@ export function GardenSection() { * @returns {object} section The object contating the Prestige section */ export function PrestigeSection() { - const section = document.createElement('div'); - section.className = 'CMStatsPrestigeSection'; + const section = document.createElement('div'); + section.className = 'CMStatsPrestigeSection'; - const possiblePresMax = Math.floor(Game.HowMuchPrestige(CacheRealCookiesEarned - + Game.cookiesReset + CacheWrinklersTotal - + (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0))); - section.appendChild(StatsListing('withTooltip', 'Prestige Level (CUR / MAX)', document.createTextNode(`${Beautify(Game.prestige)} / ${Beautify(possiblePresMax)}`), 'PrestMaxTooltipPlaceholder')); + const possiblePresMax = Math.floor( + Game.HowMuchPrestige( + CacheRealCookiesEarned + + Game.cookiesReset + + CacheWrinklersTotal + + (Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') + ? CacheLastChoEgg + : 0), + ), + ); + section.appendChild( + StatsListing( + 'withTooltip', + 'Prestige Level (CUR / MAX)', + document.createTextNode( + `${Beautify(Game.prestige)} / ${Beautify(possiblePresMax)}`, + ), + 'PrestMaxTooltipPlaceholder', + ), + ); - const neededCook = Game.HowManyCookiesReset(possiblePresMax + 1) - (CacheRealCookiesEarned + Game.cookiesReset + CacheWrinklersTotal + ((Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') ? CacheLastChoEgg : 0) ? CacheLastChoEgg : 0)); - const cookiesNextFrag = document.createDocumentFragment(); - cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook))); - const cookiesNextSmall = document.createElement('small'); - cookiesNextSmall.textContent = ` (${FormatTime(neededCook / CacheAvgCPSWithChoEgg, 1)})`; - cookiesNextFrag.appendChild(cookiesNextSmall); - section.appendChild(StatsListing('withTooltip', 'Cookies To Next Level', cookiesNextFrag, 'NextPrestTooltipPlaceholder')); + const neededCook = + Game.HowManyCookiesReset(possiblePresMax + 1) - + (CacheRealCookiesEarned + + Game.cookiesReset + + CacheWrinklersTotal + + (( + Game.HasUnlocked('Chocolate egg') && !Game.Has('Chocolate egg') + ? CacheLastChoEgg + : 0 + ) + ? CacheLastChoEgg + : 0)); + const cookiesNextFrag = document.createDocumentFragment(); + cookiesNextFrag.appendChild(document.createTextNode(Beautify(neededCook))); + const cookiesNextSmall = document.createElement('small'); + cookiesNextSmall.textContent = ` (${FormatTime( + neededCook / CacheAvgCPSWithChoEgg, + 1, + )})`; + cookiesNextFrag.appendChild(cookiesNextSmall); + section.appendChild( + StatsListing( + 'withTooltip', + 'Cookies To Next Level', + cookiesNextFrag, + 'NextPrestTooltipPlaceholder', + ), + ); - section.appendChild(StatsListing('withTooltip', 'Heavenly Chips (CUR / MAX)', document.createTextNode(`${Beautify(Game.heavenlyChips)} / ${Beautify((possiblePresMax - Game.prestige) + Game.heavenlyChips)}`), 'HeavenChipMaxTooltipPlaceholder')); + section.appendChild( + StatsListing( + 'withTooltip', + 'Heavenly Chips (CUR / MAX)', + document.createTextNode( + `${Beautify(Game.heavenlyChips)} / ${Beautify( + possiblePresMax - Game.prestige + Game.heavenlyChips, + )}`, + ), + 'HeavenChipMaxTooltipPlaceholder', + ), + ); - section.appendChild(StatsListing('basic', 'Heavenly Chips Per Second (last 5 seconds)', document.createTextNode(Beautify(CacheHCPerSecond, 2)))); + section.appendChild( + StatsListing( + 'basic', + 'Heavenly Chips Per Second (last 5 seconds)', + document.createTextNode(Beautify(CacheHCPerSecond, 2)), + ), + ); - const HCTarget = Number(CMOptions.HeavenlyChipsTarget); - if (!Number.isNaN(HCTarget)) { - const CookiesTillTarget = HCTarget - Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)); - if (CookiesTillTarget > 0) { - section.appendChild(StatsListing('basic', 'Heavenly Chips To Target Set In Settings (CUR)', document.createTextNode(Beautify(CookiesTillTarget)))); - section.appendChild(StatsListing('basic', 'Time To Target (CUR, Current 5 Second Average)', document.createTextNode(FormatTime(CookiesTillTarget / CacheHCPerSecond)))); - } - } + const HCTarget = Number(CMOptions.HeavenlyChipsTarget); + if (!Number.isNaN(HCTarget)) { + const CookiesTillTarget = + HCTarget - + Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)); + if (CookiesTillTarget > 0) { + section.appendChild( + StatsListing( + 'basic', + 'Heavenly Chips To Target Set In Settings (CUR)', + document.createTextNode(Beautify(CookiesTillTarget)), + ), + ); + section.appendChild( + StatsListing( + 'basic', + 'Time To Target (CUR, Current 5 Second Average)', + document.createTextNode( + FormatTime(CookiesTillTarget / CacheHCPerSecond), + ), + ), + ); + } + } - const resetBonus = ResetBonus(possiblePresMax); - const resetFrag = document.createDocumentFragment(); - resetFrag.appendChild(document.createTextNode(Beautify(resetBonus))); - const increase = Math.round(resetBonus / Game.cookiesPs * 10000); - if (Number.isFinite(increase) && increase !== 0) { - const resetSmall = document.createElement('small'); - resetSmall.textContent = ` (${increase / 100}% of income)`; - resetFrag.appendChild(resetSmall); - } - section.appendChild(StatsListing('withTooltip', 'Reset Bonus Income', resetFrag, 'ResetTooltipPlaceholder')); + const resetBonus = ResetBonus(possiblePresMax); + const resetFrag = document.createDocumentFragment(); + resetFrag.appendChild(document.createTextNode(Beautify(resetBonus))); + const increase = Math.round((resetBonus / Game.cookiesPs) * 10000); + if (Number.isFinite(increase) && increase !== 0) { + const resetSmall = document.createElement('small'); + resetSmall.textContent = ` (${increase / 100}% of income)`; + resetFrag.appendChild(resetSmall); + } + section.appendChild( + StatsListing( + 'withTooltip', + 'Reset Bonus Income', + resetFrag, + 'ResetTooltipPlaceholder', + ), + ); - const currentPrestige = Math.floor(Game.HowMuchPrestige(Game.cookiesReset)); - const willHave = Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)); - const willGet = willHave - currentPrestige; - if (!Game.Has('Lucky digit')) { - let delta7 = 7 - (willHave % 10); - if (delta7 < 0) delta7 += 10; - const next7Reset = willGet + delta7; - const next7Total = willHave + delta7; - const frag7 = document.createDocumentFragment(); - frag7.appendChild(document.createTextNode(`${next7Total.toLocaleString()} / ${next7Reset.toLocaleString()} (+${delta7})`)); - section.appendChild(StatsListing('basic', 'Next "Lucky Digit" (total / reset)', frag7)); - } + const currentPrestige = Math.floor(Game.HowMuchPrestige(Game.cookiesReset)); + const willHave = Math.floor( + Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned), + ); + const willGet = willHave - currentPrestige; + if (!Game.Has('Lucky digit')) { + let delta7 = 7 - (willHave % 10); + if (delta7 < 0) delta7 += 10; + const next7Reset = willGet + delta7; + const next7Total = willHave + delta7; + const frag7 = document.createDocumentFragment(); + frag7.appendChild( + document.createTextNode( + `${next7Total.toLocaleString()} / ${next7Reset.toLocaleString()} (+${delta7})`, + ), + ); + section.appendChild( + StatsListing('basic', 'Next "Lucky Digit" (total / reset)', frag7), + ); + } - if (!Game.Has('Lucky number')) { - let delta777 = 777 - (willHave % 1000); - if (delta777 < 0) delta777 += 1000; - const next777Reset = willGet + delta777; - const next777Total = willHave + delta777; - const frag777 = document.createDocumentFragment(); - frag777.appendChild(document.createTextNode(`${next777Total.toLocaleString()} / ${next777Reset.toLocaleString()} (+${delta777})`)); - section.appendChild(StatsListing('basic', 'Next "Lucky Number" (total / reset)', frag777)); - } + if (!Game.Has('Lucky number')) { + let delta777 = 777 - (willHave % 1000); + if (delta777 < 0) delta777 += 1000; + const next777Reset = willGet + delta777; + const next777Total = willHave + delta777; + const frag777 = document.createDocumentFragment(); + frag777.appendChild( + document.createTextNode( + `${next777Total.toLocaleString()} / ${next777Reset.toLocaleString()} (+${delta777})`, + ), + ); + section.appendChild( + StatsListing('basic', 'Next "Lucky Number" (total / reset)', frag777), + ); + } - if (!Game.Has('Lucky payout')) { - let delta777777 = 777777 - (willHave % 1000000); - if (delta777777 < 0) delta777777 += 1000000; - const next777777Reset = willGet + delta777777; - const next777777Total = willHave + delta777777; - const frag777777 = document.createDocumentFragment(); - frag777777.appendChild(document.createTextNode(`${next777777Total.toLocaleString()} / ${next777777Reset.toLocaleString()} (+${delta777777})`)); - section.appendChild(StatsListing('basic', 'Next "Lucky Payout" (total / reset)', frag777777)); - } + if (!Game.Has('Lucky payout')) { + let delta777777 = 777777 - (willHave % 1000000); + if (delta777777 < 0) delta777777 += 1000000; + const next777777Reset = willGet + delta777777; + const next777777Total = willHave + delta777777; + const frag777777 = document.createDocumentFragment(); + frag777777.appendChild( + document.createTextNode( + `${next777777Total.toLocaleString()} / ${next777777Reset.toLocaleString()} (+${delta777777})`, + ), + ); + section.appendChild( + StatsListing('basic', 'Next "Lucky Payout" (total / reset)', frag777777), + ); + } - return section; + return section; } diff --git a/src/Disp/MenuSections/InfoPage.js b/src/Disp/MenuSections/InfoPage.js index 653edac..3c1cd3b 100644 --- a/src/Disp/MenuSections/InfoPage.js +++ b/src/Disp/MenuSections/InfoPage.js @@ -9,34 +9,37 @@ import { LatestReleaseNotes, ModDescription } from '../../Data/Moddata'; * @param {object} title On object that includes the title of the menu */ export default function AddMenuInfo(title) { - const info = document.createElement('div'); - info.className = 'subsection'; + const info = document.createElement('div'); + info.className = 'subsection'; - const span = document.createElement('span'); - span.style.cursor = 'pointer'; - span.style.display = 'inline-block'; - span.style.height = '14px'; - span.style.width = '14px'; - span.style.borderRadius = '7px'; - span.style.textAlign = 'center'; - span.style.backgroundColor = '#C0C0C0'; - span.style.color = 'black'; - span.style.fontSize = '13px'; - span.style.verticalAlign = 'middle'; - span.textContent = CMOptions.Header.InfoTab ? '-' : '+'; - span.onclick = function () { ToggleHeader('InfoTab'); Game.UpdateMenu(); }; - title.appendChild(span); - info.appendChild(title); + const span = document.createElement('span'); + span.style.cursor = 'pointer'; + span.style.display = 'inline-block'; + span.style.height = '14px'; + span.style.width = '14px'; + span.style.borderRadius = '7px'; + span.style.textAlign = 'center'; + span.style.backgroundColor = '#C0C0C0'; + span.style.color = 'black'; + span.style.fontSize = '13px'; + span.style.verticalAlign = 'middle'; + span.textContent = CMOptions.Header.InfoTab ? '-' : '+'; + span.onclick = function () { + ToggleHeader('InfoTab'); + Game.UpdateMenu(); + }; + title.appendChild(span); + info.appendChild(title); - if (CMOptions.Header.InfoTab) { - const description = document.createElement('div'); - description.innerHTML = ModDescription; - info.appendChild(description); - const notes = document.createElement('div'); - notes.innerHTML = LatestReleaseNotes; - info.appendChild(notes); - } + if (CMOptions.Header.InfoTab) { + const description = document.createElement('div'); + description.innerHTML = ModDescription; + info.appendChild(description); + const notes = document.createElement('div'); + notes.innerHTML = LatestReleaseNotes; + info.appendChild(notes); + } - const menu = l('menu').children[1]; - menu.insertBefore(info, menu.children[1]); + const menu = l('menu').children[1]; + menu.insertBefore(info, menu.children[1]); } diff --git a/src/Disp/MenuSections/Refreshmenu.js b/src/Disp/MenuSections/Refreshmenu.js index 445f9a3..492fb66 100644 --- a/src/Disp/MenuSections/Refreshmenu.js +++ b/src/Disp/MenuSections/Refreshmenu.js @@ -5,5 +5,11 @@ import { CMOptions } from '../../Config/VariablesAndData'; * It is called by CM.Disp.Draw() */ export default function RefreshMenu() { - if (CMOptions.UpStats && Game.onMenu === 'stats' && (Game.drawT - 1) % (Game.fps * 5) !== 0 && (Game.drawT - 1) % Game.fps === 0) Game.UpdateMenu(); + if ( + CMOptions.UpStats && + Game.onMenu === 'stats' && + (Game.drawT - 1) % (Game.fps * 5) !== 0 && + (Game.drawT - 1) % Game.fps === 0 + ) + Game.UpdateMenu(); } diff --git a/src/Disp/MenuSections/SettingsPage.js b/src/Disp/MenuSections/SettingsPage.js index 2f1dd48..669b0c9 100644 --- a/src/Disp/MenuSections/SettingsPage.js +++ b/src/Disp/MenuSections/SettingsPage.js @@ -1,12 +1,21 @@ /** Functions related to the Options/Preferences page */ import jscolor, * as JsColor from '@eastdesire/jscolor'; -import { LoadConfig, SaveConfig } from '../../Config/SaveLoadReload/SaveLoadReloadSettings'; import { - ConfigPrefix, ToggleConfig, ToggleConfigVolume, ToggleHeader, + LoadConfig, + SaveConfig, +} from '../../Config/SaveLoadReload/SaveLoadReloadSettings'; +import { + ConfigPrefix, + ToggleConfig, + ToggleConfigVolume, + ToggleHeader, } from '../../Config/ToggleSetting'; import { CMOptions } from '../../Config/VariablesAndData'; -import { ConfigGroups, ConfigGroupsNotification } from '../../Data/Sectionheaders'; +import { + ConfigGroups, + ConfigGroupsNotification, +} from '../../Data/Sectionheaders'; import Config from '../../Data/SettingsData'; import ConfigDefault from '../../Data/SettingsDefault'; import RefreshScale from '../HelperFunctions/RefreshScale'; @@ -20,27 +29,30 @@ import { Colors } from '../VariablesAndData'; * @returns {object} div The header object */ function CreatePrefHeader(config, text) { - const div = document.createElement('div'); - div.className = 'title'; + const div = document.createElement('div'); + div.className = 'title'; - div.style.opacity = '0.7'; - div.style.fontSize = '17px'; - div.appendChild(document.createTextNode(`${text} `)); - const span = document.createElement('span'); // Creates the +/- button - span.style.cursor = 'pointer'; - span.style.display = 'inline-block'; - span.style.height = '14px'; - span.style.width = '14px'; - span.style.borderRadius = '7px'; - span.style.textAlign = 'center'; - span.style.backgroundColor = '#C0C0C0'; - span.style.color = 'black'; - span.style.fontSize = '13px'; - span.style.verticalAlign = 'middle'; - span.textContent = CMOptions.Header[config] ? '-' : '+'; - span.onclick = function () { ToggleHeader(config); Game.UpdateMenu(); }; - div.appendChild(span); - return div; + div.style.opacity = '0.7'; + div.style.fontSize = '17px'; + div.appendChild(document.createTextNode(`${text} `)); + const span = document.createElement('span'); // Creates the +/- button + span.style.cursor = 'pointer'; + span.style.display = 'inline-block'; + span.style.height = '14px'; + span.style.width = '14px'; + span.style.borderRadius = '7px'; + span.style.textAlign = 'center'; + span.style.backgroundColor = '#C0C0C0'; + span.style.color = 'black'; + span.style.fontSize = '13px'; + span.style.verticalAlign = 'middle'; + span.textContent = CMOptions.Header[config] ? '-' : '+'; + span.onclick = function () { + ToggleHeader(config); + Game.UpdateMenu(); + }; + div.appendChild(span); + return div; } /** @@ -49,129 +61,150 @@ function CreatePrefHeader(config, text) { * @returns {object} div The option object */ function CreatePrefOption(config) { - const div = document.createElement('div'); - div.className = 'listing'; - if (Config[config].type === 'bool') { - const a = document.createElement('a'); - if (Config[config].toggle && CMOptions[config] === 0) { - a.className = 'option off'; - } else { - a.className = 'option'; - } - a.id = ConfigPrefix + config; - a.onclick = function () { ToggleConfig(config); }; - a.textContent = Config[config].label[CMOptions[config]]; - div.appendChild(a); - const label = document.createElement('label'); - label.textContent = Config[config].desc; - div.appendChild(label); - return div; - } if (Config[config].type === 'vol') { - const volume = document.createElement('div'); - volume.className = 'sliderBox'; - const title = document.createElement('div'); - title.style.float = 'left'; - title.innerHTML = Config[config].desc; - volume.appendChild(title); - const percent = document.createElement('div'); - percent.id = `slider${config}right`; - percent.style.float = 'right'; - percent.innerHTML = `${CMOptions[config]}%`; - volume.appendChild(percent); - const slider = document.createElement('input'); - slider.className = 'slider'; - slider.id = `slider${config}`; - slider.style.clear = 'both'; - slider.type = 'range'; - slider.min = '0'; - slider.max = '100'; - slider.step = '1'; - slider.value = CMOptions[config]; - slider.oninput = function () { ToggleConfigVolume(config); }; - slider.onchange = function () { ToggleConfigVolume(config); }; - volume.appendChild(slider); - div.appendChild(volume); - return div; - } if (Config[config].type === 'url') { - const span = document.createElement('span'); - span.className = 'option'; - span.textContent = `${Config[config].label} `; - div.appendChild(span); - const input = document.createElement('input'); - input.id = ConfigPrefix + config; - input.className = 'option'; - input.type = 'text'; - input.readOnly = true; - input.setAttribute('value', CMOptions[config]); - input.style.width = '300px'; - div.appendChild(input); - div.appendChild(document.createTextNode(' ')); - const inputPrompt = document.createElement('input'); - inputPrompt.id = `${ConfigPrefix + config}Prompt`; - inputPrompt.className = 'option'; - inputPrompt.type = 'text'; - inputPrompt.setAttribute('value', CMOptions[config]); - const a = document.createElement('a'); - a.className = 'option'; - a.onclick = function () { - Game.Prompt(inputPrompt.outerHTML, [['Save', function () { CMOptions[`${config}`] = l(`${ConfigPrefix}${config}Prompt`).value; SaveConfig(); Game.ClosePrompt(); Game.UpdateMenu(); }], 'Cancel']); - }; - a.textContent = 'Edit'; - div.appendChild(a); - const label = document.createElement('label'); - label.textContent = Config[config].desc; - div.appendChild(label); - return div; - } if (Config[config].type === 'color') { - div.className = ''; - for (let i = 0; i < Colors.length; i++) { - const innerDiv = document.createElement('div'); - innerDiv.className = 'listing'; - const input = document.createElement('input'); - input.id = Colors[i]; - input.style.width = '65px'; - input.setAttribute('value', CMOptions.Colors[Colors[i]]); - innerDiv.appendChild(input); - const change = function () { - CMOptions.Colors[this.targetElement.id] = this.toHEXString(); - UpdateColors(); - SaveConfig(); - Game.UpdateMenu(); - }; - new JsColor(input, { hash: true, position: 'right', onInput: change }); - const label = document.createElement('label'); - label.textContent = Config.Colors.desc[Colors[i]]; - innerDiv.appendChild(label); - div.appendChild(innerDiv); - } - jscolor.init(); - return div; - } if (Config[config].type === 'numscale') { - const span = document.createElement('span'); - span.className = 'option'; - span.textContent = `${Config[config].label} `; - div.appendChild(span); - const input = document.createElement('input'); - input.id = ConfigPrefix + config; - input.className = 'option'; - input.type = 'number'; - input.value = (CMOptions[config]); - input.min = Config[config].min; - input.max = Config[config].max; - input.oninput = function () { - if (this.value > this.max) console.log('TEST'); - CMOptions[config] = this.value; - SaveConfig(); - RefreshScale(); - }; - div.appendChild(input); - div.appendChild(document.createTextNode(' ')); - const label = document.createElement('label'); - label.textContent = Config[config].desc; - div.appendChild(label); - return div; - } - return div; + const div = document.createElement('div'); + div.className = 'listing'; + if (Config[config].type === 'bool') { + const a = document.createElement('a'); + if (Config[config].toggle && CMOptions[config] === 0) { + a.className = 'option off'; + } else { + a.className = 'option'; + } + a.id = ConfigPrefix + config; + a.onclick = function () { + ToggleConfig(config); + }; + a.textContent = Config[config].label[CMOptions[config]]; + div.appendChild(a); + const label = document.createElement('label'); + label.textContent = Config[config].desc; + div.appendChild(label); + return div; + } + if (Config[config].type === 'vol') { + const volume = document.createElement('div'); + volume.className = 'sliderBox'; + const title = document.createElement('div'); + title.style.float = 'left'; + title.innerHTML = Config[config].desc; + volume.appendChild(title); + const percent = document.createElement('div'); + percent.id = `slider${config}right`; + percent.style.float = 'right'; + percent.innerHTML = `${CMOptions[config]}%`; + volume.appendChild(percent); + const slider = document.createElement('input'); + slider.className = 'slider'; + slider.id = `slider${config}`; + slider.style.clear = 'both'; + slider.type = 'range'; + slider.min = '0'; + slider.max = '100'; + slider.step = '1'; + slider.value = CMOptions[config]; + slider.oninput = function () { + ToggleConfigVolume(config); + }; + slider.onchange = function () { + ToggleConfigVolume(config); + }; + volume.appendChild(slider); + div.appendChild(volume); + return div; + } + if (Config[config].type === 'url') { + const span = document.createElement('span'); + span.className = 'option'; + span.textContent = `${Config[config].label} `; + div.appendChild(span); + const input = document.createElement('input'); + input.id = ConfigPrefix + config; + input.className = 'option'; + input.type = 'text'; + input.readOnly = true; + input.setAttribute('value', CMOptions[config]); + input.style.width = '300px'; + div.appendChild(input); + div.appendChild(document.createTextNode(' ')); + const inputPrompt = document.createElement('input'); + inputPrompt.id = `${ConfigPrefix + config}Prompt`; + inputPrompt.className = 'option'; + inputPrompt.type = 'text'; + inputPrompt.setAttribute('value', CMOptions[config]); + const a = document.createElement('a'); + a.className = 'option'; + a.onclick = function () { + Game.Prompt(inputPrompt.outerHTML, [ + [ + 'Save', + function () { + CMOptions[`${config}`] = l(`${ConfigPrefix}${config}Prompt`).value; + SaveConfig(); + Game.ClosePrompt(); + Game.UpdateMenu(); + }, + ], + 'Cancel', + ]); + }; + a.textContent = 'Edit'; + div.appendChild(a); + const label = document.createElement('label'); + label.textContent = Config[config].desc; + div.appendChild(label); + return div; + } + if (Config[config].type === 'color') { + div.className = ''; + for (let i = 0; i < Colors.length; i++) { + const innerDiv = document.createElement('div'); + innerDiv.className = 'listing'; + const input = document.createElement('input'); + input.id = Colors[i]; + input.style.width = '65px'; + input.setAttribute('value', CMOptions.Colors[Colors[i]]); + innerDiv.appendChild(input); + const change = function () { + CMOptions.Colors[this.targetElement.id] = this.toHEXString(); + UpdateColors(); + SaveConfig(); + Game.UpdateMenu(); + }; + new JsColor(input, { hash: true, position: 'right', onInput: change }); + const label = document.createElement('label'); + label.textContent = Config.Colors.desc[Colors[i]]; + innerDiv.appendChild(label); + div.appendChild(innerDiv); + } + jscolor.init(); + return div; + } + if (Config[config].type === 'numscale') { + const span = document.createElement('span'); + span.className = 'option'; + span.textContent = `${Config[config].label} `; + div.appendChild(span); + const input = document.createElement('input'); + input.id = ConfigPrefix + config; + input.className = 'option'; + input.type = 'number'; + input.value = CMOptions[config]; + input.min = Config[config].min; + input.max = Config[config].max; + input.oninput = function () { + if (this.value > this.max) console.log('TEST'); + CMOptions[config] = this.value; + SaveConfig(); + RefreshScale(); + }; + div.appendChild(input); + div.appendChild(document.createTextNode(' ')); + const label = document.createElement('label'); + label.textContent = Config[config].desc; + div.appendChild(label); + return div; + } + return div; } /** @@ -180,42 +213,55 @@ function CreatePrefOption(config) { * @param {object} title On object that includes the title of the menu */ export default function AddMenuPref(title) { - const frag = document.createDocumentFragment(); - frag.appendChild(title); + const frag = document.createDocumentFragment(); + frag.appendChild(title); - for (const group of Object.keys(ConfigGroups)) { - const groupObject = CreatePrefHeader(group, ConfigGroups[group]); // (group, display-name of group) - frag.appendChild(groupObject); - if (CMOptions.Header[group]) { // 0 is show, 1 is collapsed - // Make sub-sections of Notification section - if (group === 'Notification') { - for (const subGroup of Object.keys(ConfigGroupsNotification)) { - const subGroupObject = CreatePrefHeader(subGroup, ConfigGroupsNotification[subGroup]); // (group, display-name of group) - subGroupObject.style.fontSize = '15px'; - subGroupObject.style.opacity = '0.5'; - frag.appendChild(subGroupObject); - if (CMOptions.Header[subGroup]) { - for (const option in Config) { - if (Config[option].group === subGroup) frag.appendChild(CreatePrefOption(option)); - } - } - } - } else { - for (const option of Object.keys(Config)) { - if (Config[option].group === group) frag.appendChild(CreatePrefOption(option)); - } - } - } - } + for (const group of Object.keys(ConfigGroups)) { + const groupObject = CreatePrefHeader(group, ConfigGroups[group]); // (group, display-name of group) + frag.appendChild(groupObject); + if (CMOptions.Header[group]) { + // 0 is show, 1 is collapsed + // Make sub-sections of Notification section + if (group === 'Notification') { + for (const subGroup of Object.keys(ConfigGroupsNotification)) { + const subGroupObject = CreatePrefHeader( + subGroup, + ConfigGroupsNotification[subGroup], + ); // (group, display-name of group) + subGroupObject.style.fontSize = '15px'; + subGroupObject.style.opacity = '0.5'; + frag.appendChild(subGroupObject); + if (CMOptions.Header[subGroup]) { + for (const option in Config) { + if (Config[option].group === subGroup) + frag.appendChild(CreatePrefOption(option)); + } + } + } + } else { + for (const option of Object.keys(Config)) { + if (Config[option].group === group) + frag.appendChild(CreatePrefOption(option)); + } + } + } + } - const resDef = document.createElement('div'); - resDef.className = 'listing'; - const resDefBut = document.createElement('a'); - resDefBut.className = 'option'; - resDefBut.onclick = function () { LoadConfig(ConfigDefault); }; - resDefBut.textContent = 'Restore Default'; - resDef.appendChild(resDefBut); - frag.appendChild(resDef); + const resDef = document.createElement('div'); + resDef.className = 'listing'; + const resDefBut = document.createElement('a'); + resDefBut.className = 'option'; + resDefBut.onclick = function () { + LoadConfig(ConfigDefault); + }; + resDefBut.textContent = 'Restore Default'; + resDef.appendChild(resDefBut); + frag.appendChild(resDef); - l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]); + l('menu').childNodes[2].insertBefore( + frag, + l('menu').childNodes[2].childNodes[ + l('menu').childNodes[2].childNodes.length - 1 + ], + ); } diff --git a/src/Disp/Notifications/Flash.js b/src/Disp/Notifications/Flash.js index d185681..ad258da 100644 --- a/src/Disp/Notifications/Flash.js +++ b/src/Disp/Notifications/Flash.js @@ -9,17 +9,26 @@ import { isInitializing } from '../../InitSaveLoad/Variables'; * @param {string} config The setting in CM.Options that is checked before creating the flash */ export default function Flash(mode, config) { - // The arguments check makes the sound not play upon initialization of the mod - if ((CMOptions[config] === 1 && mode === 3 && isInitializing === false) || mode === 1) { - l('CMWhiteScreen').style.opacity = '0.5'; - if (mode === 3) { - l('CMWhiteScreen').style.display = 'inline'; - setTimeout(function () { Flash(2, config); }, 1000 / Game.fps); - } else { - setTimeout(function () { Flash(0, config); }, 1000 / Game.fps); - } - } else if (mode === 2) { - l('CMWhiteScreen').style.opacity = '1'; - setTimeout(function () { Flash(1, config); }, 1000 / Game.fps); - } else if (mode === 0) l('CMWhiteScreen').style.display = 'none'; + // The arguments check makes the sound not play upon initialization of the mod + if ( + (CMOptions[config] === 1 && mode === 3 && isInitializing === false) || + mode === 1 + ) { + l('CMWhiteScreen').style.opacity = '0.5'; + if (mode === 3) { + l('CMWhiteScreen').style.display = 'inline'; + setTimeout(function () { + Flash(2, config); + }, 1000 / Game.fps); + } else { + setTimeout(function () { + Flash(0, config); + }, 1000 / Game.fps); + } + } else if (mode === 2) { + l('CMWhiteScreen').style.opacity = '1'; + setTimeout(function () { + Flash(1, config); + }, 1000 / Game.fps); + } else if (mode === 0) l('CMWhiteScreen').style.display = 'none'; } diff --git a/src/Disp/Notifications/Notification.js b/src/Disp/Notifications/Notification.js index 3ef602e..7f64697 100644 --- a/src/Disp/Notifications/Notification.js +++ b/src/Disp/Notifications/Notification.js @@ -11,9 +11,13 @@ import { isInitializing } from '../../InitSaveLoad/Variables'; * @param {string} message The text of the to-be created notifications */ export default function Notification(notifyConfig, title, message) { - // The arguments check makes the sound not play upon initialization of the mod - if (CMOptions[notifyConfig] === 1 && document.visibilityState === 'hidden' && isInitializing === false) { - const CookieIcon = 'https://orteil.dashnet.org/cookieclicker/favicon.ico'; - new Notification(title, { body: message, badge: CookieIcon }); - } + // The arguments check makes the sound not play upon initialization of the mod + if ( + CMOptions[notifyConfig] === 1 && + document.visibilityState === 'hidden' && + isInitializing === false + ) { + const CookieIcon = 'https://orteil.dashnet.org/cookieclicker/favicon.ico'; + new Notification(title, { body: message, badge: CookieIcon }); + } } diff --git a/src/Disp/Notifications/Sound.js b/src/Disp/Notifications/Sound.js index 0d0f9d1..e406392 100644 --- a/src/Disp/Notifications/Sound.js +++ b/src/Disp/Notifications/Sound.js @@ -9,12 +9,13 @@ import { isInitializing } from '../../InitSaveLoad/Variables'; * @param {string} volConfig The setting in CM.Options that is checked to determine volume */ export default function PlaySound(url, sndConfig, volConfig) { - // The arguments check makes the sound not play upon initialization of the mod - if (CMOptions[sndConfig] === 1 && isInitializing === false) { - // eslint-disable-next-line new-cap - const sound = new realAudio(url); - if (CMOptions.GeneralSound) sound.volume = (CMOptions[volConfig] / 100) * (Game.volume / 100); - else sound.volume = (CMOptions[volConfig] / 100); - sound.play(); - } + // The arguments check makes the sound not play upon initialization of the mod + if (CMOptions[sndConfig] === 1 && isInitializing === false) { + // eslint-disable-next-line new-cap + const sound = new realAudio(url); + if (CMOptions.GeneralSound) + sound.volume = (CMOptions[volConfig] / 100) * (Game.volume / 100); + else sound.volume = CMOptions[volConfig] / 100; + sound.play(); + } } diff --git a/src/Disp/TabTitle/FavIcon.js b/src/Disp/TabTitle/FavIcon.js index dcecaba..f80bc24 100644 --- a/src/Disp/TabTitle/FavIcon.js +++ b/src/Disp/TabTitle/FavIcon.js @@ -6,11 +6,11 @@ import { LastGoldenCookieState } from '../../Main/VariablesAndData'; * This function creates the Favicon, it is called by CM.Main.DelayInit() */ export function CreateFavicon() { - const Favicon = document.createElement('link'); - Favicon.id = 'CMFavicon'; - Favicon.rel = 'shortcut icon'; - Favicon.href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico'; - document.getElementsByTagName('head')[0].appendChild(Favicon); + const Favicon = document.createElement('link'); + Favicon.id = 'CMFavicon'; + Favicon.rel = 'shortcut icon'; + Favicon.href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico'; + document.getElementsByTagName('head')[0].appendChild(Favicon); } /** @@ -18,8 +18,14 @@ export function CreateFavicon() { * By relying on CM.Cache.spawnedGoldenShimmer it only changes for non-user spawned cookie */ export function UpdateFavicon() { - if (CMOptions.Favicon === 1 && LastGoldenCookieState > 0) { - if (CacheSpawnedGoldenShimmer.wrath) l('CMFavicon').href = 'https://aktanusa.github.io/CookieMonster/favicon/wrathCookie.ico'; - else l('CMFavicon').href = 'https://aktanusa.github.io/CookieMonster/favicon/goldenCookie.ico'; - } else l('CMFavicon').href = 'https://orteil.dashnet.org/cookieclicker/favicon.ico'; + if (CMOptions.Favicon === 1 && LastGoldenCookieState > 0) { + if (CacheSpawnedGoldenShimmer.wrath) + l('CMFavicon').href = + 'https://aktanusa.github.io/CookieMonster/favicon/wrathCookie.ico'; + else + l('CMFavicon').href = + 'https://aktanusa.github.io/CookieMonster/favicon/goldenCookie.ico'; + } else + l('CMFavicon').href = + 'https://orteil.dashnet.org/cookieclicker/favicon.ico'; } diff --git a/src/Disp/TabTitle/TabTitle.js b/src/Disp/TabTitle/TabTitle.js index ec227ef..8dd4259 100644 --- a/src/Disp/TabTitle/TabTitle.js +++ b/src/Disp/TabTitle/TabTitle.js @@ -1,8 +1,14 @@ /** Functions related to updating the tab in the browser's tab-bar */ -import { CacheSeasonPopShimmer, CacheSpawnedGoldenShimmer } from '../../Cache/VariablesAndData'; +import { + CacheSeasonPopShimmer, + CacheSpawnedGoldenShimmer, +} from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; -import { LastSeasonPopupState, LastTickerFortuneState } from '../../Main/VariablesAndData'; +import { + LastSeasonPopupState, + LastTickerFortuneState, +} from '../../Main/VariablesAndData'; import { Title } from '../VariablesAndData'; /** @@ -10,61 +16,78 @@ import { Title } from '../VariablesAndData'; * It is called on every loop by Game.Logic() which also sets CM.Disp.Title to Game.cookies */ export default function UpdateTitle() { - if (Game.OnAscend || CMOptions.Title === 0) { - document.title = Title; - } else if (CMOptions.Title === 1) { - let addFC = false; - let addSP = false; - let titleGC; - let titleFC; - let titleSP; + if (Game.OnAscend || CMOptions.Title === 0) { + document.title = Title; + } else if (CMOptions.Title === 1) { + let addFC = false; + let addSP = false; + let titleGC; + let titleFC; + let titleSP; - if (CacheSpawnedGoldenShimmer) { - if (CacheSpawnedGoldenShimmer.wrath) titleGC = `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; - else titleGC = `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; - } else if (!Game.Has('Golden switch [off]')) { - titleGC = `[${Number(l('CMTimerBarGCMinBar').textContent) < 0 ? '!' : ''}${Math.ceil((Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / Game.fps)}]`; - } else titleGC = '[GS]'; + if (CacheSpawnedGoldenShimmer) { + if (CacheSpawnedGoldenShimmer.wrath) + titleGC = `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; + else + titleGC = `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; + } else if (!Game.Has('Golden switch [off]')) { + titleGC = `[${ + Number(l('CMTimerBarGCMinBar').textContent) < 0 ? '!' : '' + }${Math.ceil( + (Game.shimmerTypes.golden.maxTime - Game.shimmerTypes.golden.time) / + Game.fps, + )}]`; + } else titleGC = '[GS]'; - if (LastTickerFortuneState) { - addFC = true; - titleFC = '[F]'; - } + if (LastTickerFortuneState) { + addFC = true; + titleFC = '[F]'; + } - if (Game.season === 'christmas') { - addSP = true; - if (LastSeasonPopupState) titleSP = `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`; - else { - titleSP = `[${Number(l('CMTimerBarRenMinBar').textContent) < 0 ? '!' : ''}${Math.ceil((Game.shimmerTypes.reindeer.maxTime - Game.shimmerTypes.reindeer.time) / Game.fps)}]`; - } - } + if (Game.season === 'christmas') { + addSP = true; + if (LastSeasonPopupState) + titleSP = `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`; + else { + titleSP = `[${ + Number(l('CMTimerBarRenMinBar').textContent) < 0 ? '!' : '' + }${Math.ceil( + (Game.shimmerTypes.reindeer.maxTime - + Game.shimmerTypes.reindeer.time) / + Game.fps, + )}]`; + } + } - // Remove previous timers and add current cookies - let str = Title; - if (str.charAt(0) === '[') { - str = str.substring(str.lastIndexOf(']') + 1); - } - document.title = `${titleGC + (addFC ? titleFC : '') + (addSP ? titleSP : '')} ${str}`; - } else if (CMOptions.Title === 2) { - let str = ''; - let spawn = false; - if (CacheSpawnedGoldenShimmer) { - spawn = true; - if (CacheSpawnedGoldenShimmer.wrath) str += `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; - else str += `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; - } - if (LastTickerFortuneState) { - spawn = true; - str += '[F]'; - } - if (Game.season === 'christmas' && LastSeasonPopupState) { - str += `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`; - spawn = true; - } - if (spawn) str += ' - '; - let title = 'Cookie Clicker'; - if (Game.season === 'fools') title = 'Cookie Baker'; - str += title; - document.title = str; - } + // Remove previous timers and add current cookies + let str = Title; + if (str.charAt(0) === '[') { + str = str.substring(str.lastIndexOf(']') + 1); + } + document.title = `${ + titleGC + (addFC ? titleFC : '') + (addSP ? titleSP : '') + } ${str}`; + } else if (CMOptions.Title === 2) { + let str = ''; + let spawn = false; + if (CacheSpawnedGoldenShimmer) { + spawn = true; + if (CacheSpawnedGoldenShimmer.wrath) + str += `[W${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; + else str += `[G${Math.ceil(CacheSpawnedGoldenShimmer.life / Game.fps)}]`; + } + if (LastTickerFortuneState) { + spawn = true; + str += '[F]'; + } + if (Game.season === 'christmas' && LastSeasonPopupState) { + str += `[R${Math.ceil(CacheSeasonPopShimmer.life / Game.fps)}]`; + spawn = true; + } + if (spawn) str += ' - '; + let title = 'Cookie Clicker'; + if (Game.season === 'fools') title = 'Cookie Baker'; + str += title; + document.title = str; + } } diff --git a/src/Disp/Tooltips/AscendButton.js b/src/Disp/Tooltips/AscendButton.js index 8c0530a..c4f6cc9 100644 --- a/src/Disp/Tooltips/AscendButton.js +++ b/src/Disp/Tooltips/AscendButton.js @@ -1,4 +1,7 @@ -import { CacheHCPerSecond, CacheTimeTillNextPrestige } from '../../Cache/VariablesAndData'; +import { + CacheHCPerSecond, + CacheTimeTillNextPrestige, +} from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import { Beautify } from '../BeautifyAndFormatting/BeautifyFormatting'; @@ -8,21 +11,53 @@ import { Beautify } from '../BeautifyAndFormatting/BeautifyFormatting'; * @returns {object} div An object containing the stylized header */ export default function ReplaceAscendTooltip() { - const ascendNowToGet = Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) - Math.floor(Game.HowMuchPrestige(Game.cookiesReset)); - const cookiesToNext = Game.HowManyCookiesReset(Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + 1) - (Game.cookiesEarned + Game.cookiesReset); - const startDate = Game.sayTime(((Date.now() - Game.startDate) / 1000) * Game.fps, -1); - let str = ''; - str += `You've been on this run for ${startDate === '' ? 'not very long' : (startDate)}.
`; - str += '
'; - if (Game.prestige > 0) { - str += `Your prestige level is currently ${Beautify(Game.prestige)}.
(CpS +${Beautify(Game.prestige)}%)`; - str += '
'; - } - if (ascendNowToGet < 1) str += 'Ascending now would grant you no prestige.'; - else if (ascendNowToGet < 2) str += 'Ascending now would grant you
1 prestige level (+1% CpS)
and 1 heavenly chip to spend.'; - else str += `Ascending now would grant you
${Beautify(ascendNowToGet)} prestige levels (+${Beautify(ascendNowToGet)}% CpS)
and ${Beautify(ascendNowToGet)} heavenly chips to spend.`; - str += '
'; - str += `You need ${Beautify(cookiesToNext)} more cookies for the next level.
`; - str += `${CMOptions.TooltipAscendButton ? `
It takes ${CacheTimeTillNextPrestige} to reach the next level and you are making ${Beautify(CacheHCPerSecond, 2)} chips on average in the last 5 seconds.
` : ''}`; - l('ascendTooltip').innerHTML = str; + const ascendNowToGet = + Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) - + Math.floor(Game.HowMuchPrestige(Game.cookiesReset)); + const cookiesToNext = + Game.HowManyCookiesReset( + Math.floor(Game.HowMuchPrestige(Game.cookiesReset + Game.cookiesEarned)) + + 1, + ) - + (Game.cookiesEarned + Game.cookiesReset); + const startDate = Game.sayTime( + ((Date.now() - Game.startDate) / 1000) * Game.fps, + -1, + ); + let str = ''; + str += `You've been on this run for ${ + startDate === '' ? 'not very long' : startDate + }.
`; + str += '
'; + if (Game.prestige > 0) { + str += `Your prestige level is currently ${Beautify( + Game.prestige, + )}.
(CpS +${Beautify(Game.prestige)}%)`; + str += '
'; + } + if (ascendNowToGet < 1) str += 'Ascending now would grant you no prestige.'; + else if (ascendNowToGet < 2) + str += + 'Ascending now would grant you
1 prestige level (+1% CpS)
and 1 heavenly chip to spend.'; + else + str += `Ascending now would grant you
${Beautify( + ascendNowToGet, + )} prestige levels (+${Beautify( + ascendNowToGet, + )}% CpS)
and ${Beautify( + ascendNowToGet, + )} heavenly chips to spend.`; + str += '
'; + str += `You need ${Beautify( + cookiesToNext, + )} more cookies for the next level.
`; + str += `${ + CMOptions.TooltipAscendButton + ? `
It takes ${CacheTimeTillNextPrestige} to reach the next level and you are making ${Beautify( + CacheHCPerSecond, + 2, + )} chips on average in the last 5 seconds.
` + : '' + }`; + l('ascendTooltip').innerHTML = str; } diff --git a/src/Disp/Tooltips/CreateTooltip.js b/src/Disp/Tooltips/CreateTooltip.js index 607a101..cb18d6a 100644 --- a/src/Disp/Tooltips/CreateTooltip.js +++ b/src/Disp/Tooltips/CreateTooltip.js @@ -1,6 +1,13 @@ import { CMOptions } from '../../Config/VariablesAndData'; import { - ColorTextPre, ColorBorderPre, ColorGray, ColorBlue, ColorRed, ColorYellow, ColorPurple, TooltipType, + ColorTextPre, + ColorBorderPre, + ColorGray, + ColorBlue, + ColorRed, + ColorYellow, + ColorPurple, + TooltipType, } from '../VariablesAndData'; /** Creates various sections of tooltips */ @@ -10,14 +17,14 @@ import { * @returns {object} div An object containing the stylized box */ export function TooltipCreateTooltipBox() { - l('tooltip').firstChild.style.paddingBottom = '4px'; // Sets padding on base-tooltip - const tooltipBox = document.createElement('div'); - tooltipBox.style.border = '1px solid'; - tooltipBox.style.padding = '4px'; - tooltipBox.style.margin = '0px -4px'; - tooltipBox.id = 'CMTooltipBorder'; - tooltipBox.className = ColorTextPre + ColorGray; - return tooltipBox; + l('tooltip').firstChild.style.paddingBottom = '4px'; // Sets padding on base-tooltip + const tooltipBox = document.createElement('div'); + tooltipBox.style.border = '1px solid'; + tooltipBox.style.padding = '4px'; + tooltipBox.style.margin = '0px -4px'; + tooltipBox.id = 'CMTooltipBorder'; + tooltipBox.className = ColorTextPre + ColorGray; + return tooltipBox; } /** @@ -26,12 +33,12 @@ export function TooltipCreateTooltipBox() { * @returns {object} div An object containing the stylized header */ export function TooltipCreateHeader(text) { - const div = document.createElement('div'); - div.style.fontWeight = 'bold'; - div.id = `${text}Title`; - div.className = ColorTextPre + ColorBlue; - div.textContent = text; - return div; + const div = document.createElement('div'); + div.style.fontWeight = 'bold'; + div.id = `${text}Title`; + div.className = ColorTextPre + ColorBlue; + div.textContent = text; + return div; } /** @@ -40,51 +47,105 @@ export function TooltipCreateHeader(text) { * @returns {object} TooltipWarn The Warnings-tooltip object */ export function TooltipCreateWarningSection() { - const TooltipWarn = document.createElement('div'); - TooltipWarn.style.position = 'absolute'; - TooltipWarn.style.display = 'block'; - TooltipWarn.style.left = 'auto'; - TooltipWarn.style.bottom = 'auto'; - TooltipWarn.id = 'CMDispTooltipWarningParent'; + const TooltipWarn = document.createElement('div'); + TooltipWarn.style.position = 'absolute'; + TooltipWarn.style.display = 'block'; + TooltipWarn.style.left = 'auto'; + TooltipWarn.style.bottom = 'auto'; + TooltipWarn.id = 'CMDispTooltipWarningParent'; - const create = function (boxId, color, labelTextFront, labelTextBack, deficitId) { - const box = document.createElement('div'); - box.id = boxId; - box.style.display = 'none'; - box.style.transition = 'opacity 0.1s ease-out'; - box.className = ColorBorderPre + color; - box.style.padding = '2px'; - box.style.background = '#000 url(img/darkNoise.png)'; - const labelDiv = document.createElement('div'); - box.appendChild(labelDiv); - const labelSpan = document.createElement('span'); - labelSpan.className = ColorTextPre + color; - labelSpan.style.fontWeight = 'bold'; - labelSpan.textContent = labelTextFront; - labelDiv.appendChild(labelSpan); - labelDiv.appendChild(document.createTextNode(labelTextBack)); - const deficitDiv = document.createElement('div'); - box.appendChild(deficitDiv); - const deficitSpan = document.createElement('span'); - deficitSpan.id = deficitId; - deficitDiv.appendChild(document.createTextNode('Deficit: ')); - deficitDiv.appendChild(deficitSpan); - return box; - }; + const create = function ( + boxId, + color, + labelTextFront, + labelTextBack, + deficitId, + ) { + const box = document.createElement('div'); + box.id = boxId; + box.style.display = 'none'; + box.style.transition = 'opacity 0.1s ease-out'; + box.className = ColorBorderPre + color; + box.style.padding = '2px'; + box.style.background = '#000 url(img/darkNoise.png)'; + const labelDiv = document.createElement('div'); + box.appendChild(labelDiv); + const labelSpan = document.createElement('span'); + labelSpan.className = ColorTextPre + color; + labelSpan.style.fontWeight = 'bold'; + labelSpan.textContent = labelTextFront; + labelDiv.appendChild(labelSpan); + labelDiv.appendChild(document.createTextNode(labelTextBack)); + const deficitDiv = document.createElement('div'); + box.appendChild(deficitDiv); + const deficitSpan = document.createElement('span'); + deficitSpan.id = deficitId; + deficitDiv.appendChild(document.createTextNode('Deficit: ')); + deficitDiv.appendChild(deficitSpan); + return box; + }; - TooltipWarn.appendChild(create('CMDispTooltipWarnLucky', ColorRed, 'Warning: ', 'Purchase of this item will put you under the number of Cookies required for "Lucky!"', 'CMDispTooltipWarnLuckyText')); - TooltipWarn.firstChild.style.marginBottom = '4px'; - TooltipWarn.appendChild(create('CMDispTooltipWarnLuckyFrenzy', ColorYellow, 'Warning: ', 'Purchase of this item will put you under the number of Cookies required for "Lucky!" (Frenzy)', 'CMDispTooltipWarnLuckyFrenzyText')); - TooltipWarn.lastChild.style.marginBottom = '4px'; - TooltipWarn.appendChild(create('CMDispTooltipWarnConjure', ColorPurple, 'Warning: ', 'Purchase of this item will put you under the number of Cookies required for "Conjure Baked Goods"', 'CMDispTooltipWarnConjureText')); - TooltipWarn.lastChild.style.marginBottom = '4px'; - TooltipWarn.appendChild(create('CMDispTooltipWarnConjureFrenzy', ColorPurple, 'Warning: ', 'Purchase of this item will put you under the number of Cookies required for "Conjure Baked Goods" (Frenzy)', 'CMDispTooltipWarnConjureFrenzyText')); - TooltipWarn.lastChild.style.marginBottom = '4px'; - TooltipWarn.appendChild(create('CMDispTooltipWarnEdifice', ColorPurple, 'Warning: ', 'Purchase of this item will put you under the number of Cookies needed for "Spontaneous Edifice" to possibly give you your most expensive building"', 'CMDispTooltipWarnEdificeText')); - TooltipWarn.lastChild.style.marginBottom = '4px'; - TooltipWarn.appendChild(create('CMDispTooltipWarnUser', ColorRed, 'Warning: ', `Purchase of this item will put you under the number of Cookies equal to ${CMOptions.ToolWarnUser} seconds of CPS`, 'CMDispTooltipWarnUserText')); + TooltipWarn.appendChild( + create( + 'CMDispTooltipWarnLucky', + ColorRed, + 'Warning: ', + 'Purchase of this item will put you under the number of Cookies required for "Lucky!"', + 'CMDispTooltipWarnLuckyText', + ), + ); + TooltipWarn.firstChild.style.marginBottom = '4px'; + TooltipWarn.appendChild( + create( + 'CMDispTooltipWarnLuckyFrenzy', + ColorYellow, + 'Warning: ', + 'Purchase of this item will put you under the number of Cookies required for "Lucky!" (Frenzy)', + 'CMDispTooltipWarnLuckyFrenzyText', + ), + ); + TooltipWarn.lastChild.style.marginBottom = '4px'; + TooltipWarn.appendChild( + create( + 'CMDispTooltipWarnConjure', + ColorPurple, + 'Warning: ', + 'Purchase of this item will put you under the number of Cookies required for "Conjure Baked Goods"', + 'CMDispTooltipWarnConjureText', + ), + ); + TooltipWarn.lastChild.style.marginBottom = '4px'; + TooltipWarn.appendChild( + create( + 'CMDispTooltipWarnConjureFrenzy', + ColorPurple, + 'Warning: ', + 'Purchase of this item will put you under the number of Cookies required for "Conjure Baked Goods" (Frenzy)', + 'CMDispTooltipWarnConjureFrenzyText', + ), + ); + TooltipWarn.lastChild.style.marginBottom = '4px'; + TooltipWarn.appendChild( + create( + 'CMDispTooltipWarnEdifice', + ColorPurple, + 'Warning: ', + 'Purchase of this item will put you under the number of Cookies needed for "Spontaneous Edifice" to possibly give you your most expensive building"', + 'CMDispTooltipWarnEdificeText', + ), + ); + TooltipWarn.lastChild.style.marginBottom = '4px'; + TooltipWarn.appendChild( + create( + 'CMDispTooltipWarnUser', + ColorRed, + 'Warning: ', + `Purchase of this item will put you under the number of Cookies equal to ${CMOptions.ToolWarnUser} seconds of CPS`, + 'CMDispTooltipWarnUserText', + ), + ); - return TooltipWarn; + return TooltipWarn; } /** @@ -93,38 +154,40 @@ export function TooltipCreateWarningSection() { * @param {object} tooltip Object of a TooltipBox, normally created by a call to CM.Disp.TooltipCreateTooltipBox() */ export function TooltipCreateCalculationSection(tooltip) { - tooltip.appendChild(TooltipCreateHeader('Bonus Income')); - const income = document.createElement('div'); - income.style.marginBottom = '4px'; - income.style.color = 'white'; - income.id = 'CMTooltipIncome'; - tooltip.appendChild(income); + tooltip.appendChild(TooltipCreateHeader('Bonus Income')); + const income = document.createElement('div'); + income.style.marginBottom = '4px'; + income.style.color = 'white'; + income.id = 'CMTooltipIncome'; + tooltip.appendChild(income); - tooltip.appendChild(TooltipCreateHeader('Bonus Cookies per Click')); - tooltip.lastChild.style.display = 'none'; - const click = document.createElement('div'); - click.style.marginBottom = '4px'; - click.style.color = 'white'; - click.style.display = 'none'; - click.id = 'CMTooltipCookiePerClick'; - tooltip.appendChild(click); + tooltip.appendChild(TooltipCreateHeader('Bonus Cookies per Click')); + tooltip.lastChild.style.display = 'none'; + const click = document.createElement('div'); + click.style.marginBottom = '4px'; + click.style.color = 'white'; + click.style.display = 'none'; + click.id = 'CMTooltipCookiePerClick'; + tooltip.appendChild(click); - tooltip.appendChild(TooltipCreateHeader('Payback Period')); - const pp = document.createElement('div'); - pp.style.marginBottom = '4px'; - pp.id = 'CMTooltipPP'; - tooltip.appendChild(pp); + tooltip.appendChild(TooltipCreateHeader('Payback Period')); + const pp = document.createElement('div'); + pp.style.marginBottom = '4px'; + pp.id = 'CMTooltipPP'; + tooltip.appendChild(pp); - tooltip.appendChild(TooltipCreateHeader('Time Left')); - const time = document.createElement('div'); - time.id = 'CMTooltipTime'; - tooltip.appendChild(time); + tooltip.appendChild(TooltipCreateHeader('Time Left')); + const time = document.createElement('div'); + time.id = 'CMTooltipTime'; + tooltip.appendChild(time); - if (TooltipType === 'b') { - tooltip.appendChild(TooltipCreateHeader('Production left till next achievement')); - tooltip.lastChild.id = 'CMTooltipProductionHeader'; // Assign a id in order to hid when no achiev's are left - const production = document.createElement('div'); - production.id = 'CMTooltipProduction'; - tooltip.appendChild(production); - } + if (TooltipType === 'b') { + tooltip.appendChild( + TooltipCreateHeader('Production left till next achievement'), + ); + tooltip.lastChild.id = 'CMTooltipProductionHeader'; // Assign a id in order to hid when no achiev's are left + const production = document.createElement('div'); + production.id = 'CMTooltipProduction'; + tooltip.appendChild(production); + } } diff --git a/src/Disp/Tooltips/PositionLocation.js b/src/Disp/Tooltips/PositionLocation.js index f35b9f0..cfaed6d 100644 --- a/src/Disp/Tooltips/PositionLocation.js +++ b/src/Disp/Tooltips/PositionLocation.js @@ -5,15 +5,26 @@ import { CMOptions } from '../../Config/VariablesAndData'; * It is called by Game.tooltip.update() because of CM.Main.ReplaceNative() */ export default function UpdateTooltipLocation() { - if (Game.tooltip.origin === 'store') { - let warnOffset = 0; - if (CMOptions.ToolWarnLucky === 1 && CMOptions.ToolWarnPos === 1 && l('CMDispTooltipWarningParent') !== null) { - warnOffset = l('CMDispTooltipWarningParent').clientHeight - 4; - } - Game.tooltip.tta.style.top = `${Math.min(parseInt(Game.tooltip.tta.style.top, 10), (l('game').clientHeight + l('topBar').clientHeight) - Game.tooltip.tt.clientHeight - warnOffset - 46)}px`; - } - // Kept for future possible use if the code changes again - /* else if (!Game.onCrate && !Game.OnAscend && CM.Options.TimerBar === 1 && CM.Options.TimerBarPos === 0) { + if (Game.tooltip.origin === 'store') { + let warnOffset = 0; + if ( + CMOptions.ToolWarnLucky === 1 && + CMOptions.ToolWarnPos === 1 && + l('CMDispTooltipWarningParent') !== null + ) { + warnOffset = l('CMDispTooltipWarningParent').clientHeight - 4; + } + Game.tooltip.tta.style.top = `${Math.min( + parseInt(Game.tooltip.tta.style.top, 10), + l('game').clientHeight + + l('topBar').clientHeight - + Game.tooltip.tt.clientHeight - + warnOffset - + 46, + )}px`; + } + // Kept for future possible use if the code changes again + /* else if (!Game.onCrate && !Game.OnAscend && CM.Options.TimerBar === 1 && CM.Options.TimerBarPos === 0) { Game.tooltip.tta.style.top = (parseInt(Game.tooltip.tta.style.top) + parseInt(CM.Disp.TimerBar.style.height)) + 'px'; } */ } diff --git a/src/Disp/Tooltips/Tooltip.js b/src/Disp/Tooltips/Tooltip.js index 42957a1..cd044da 100644 --- a/src/Disp/Tooltips/Tooltip.js +++ b/src/Disp/Tooltips/Tooltip.js @@ -1,7 +1,10 @@ /* eslint-disable no-unused-vars */ import * as UpdateTooltip from './UpdateTooltips'; import { TooltipCreateTooltipBox } from './CreateTooltip'; -import { Beautify, GetTimeColor } from '../BeautifyAndFormatting/BeautifyFormatting'; +import { + Beautify, + GetTimeColor, +} from '../BeautifyAndFormatting/BeautifyFormatting'; import CopyData from '../../Sim/SimulationData/CopyData'; import { TooltipName, TooltipType } from '../VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; @@ -17,47 +20,48 @@ import BuildingGetPrice from '../../Sim/SimulationEvents/BuyBuilding'; * @param {string} minWidth The minimum width of the tooltip */ export function CreateSimpleTooltip(placeholder, text, minWidth) { - const Tooltip = document.createElement('div'); - Tooltip.id = placeholder; - const desc = document.createElement('div'); - desc.style.minWidth = minWidth; - desc.style.marginBottom = '4px'; - const div = document.createElement('div'); - div.style.textAlign = 'left'; - div.textContent = text; - desc.appendChild(div); - Tooltip.appendChild(desc); + const Tooltip = document.createElement('div'); + Tooltip.id = placeholder; + const desc = document.createElement('div'); + desc.style.minWidth = minWidth; + desc.style.marginBottom = '4px'; + const div = document.createElement('div'); + div.style.textAlign = 'left'; + div.textContent = text; + desc.appendChild(div); + Tooltip.appendChild(desc); } /** * This function updates the sections of the tooltips created by CookieMonster */ export function UpdateTooltips() { - CopyData(); - if (l('tooltipAnchor').style.display !== 'none' && l('CMTooltipArea')) { - l('CMTooltipArea').innerHTML = ''; - const tooltipBox = TooltipCreateTooltipBox(); - l('CMTooltipArea').appendChild(tooltipBox); + CopyData(); + if (l('tooltipAnchor').style.display !== 'none' && l('CMTooltipArea')) { + l('CMTooltipArea').innerHTML = ''; + const tooltipBox = TooltipCreateTooltipBox(); + l('CMTooltipArea').appendChild(tooltipBox); - if (TooltipType === 'b') { - UpdateTooltip.Building(); - } else if (TooltipType === 'u') { - UpdateTooltip.Upgrade(); - } else if (TooltipType === 's') { - UpdateTooltip.SugarLump(); - } else if (TooltipType === 'g') { - UpdateTooltip.Grimoire(); - } else if (TooltipType === 'p') { - UpdateTooltip.GardenPlots(); - } else if (TooltipType === 'ha') { - UpdateTooltip.HarvestAll(); - } - UpdateTooltip.Warnings(); - } else if (l('CMTooltipArea') === null) { // Remove warnings if its a basic tooltip - if (l('CMDispTooltipWarningParent') !== null) { - l('CMDispTooltipWarningParent').remove(); - } - } + if (TooltipType === 'b') { + UpdateTooltip.Building(); + } else if (TooltipType === 'u') { + UpdateTooltip.Upgrade(); + } else if (TooltipType === 's') { + UpdateTooltip.SugarLump(); + } else if (TooltipType === 'g') { + UpdateTooltip.Grimoire(); + } else if (TooltipType === 'p') { + UpdateTooltip.GardenPlots(); + } else if (TooltipType === 'ha') { + UpdateTooltip.HarvestAll(); + } + UpdateTooltip.Warnings(); + } else if (l('CMTooltipArea') === null) { + // Remove warnings if its a basic tooltip + if (l('CMDispTooltipWarningParent') !== null) { + l('CMDispTooltipWarningParent').remove(); + } + } } /** @@ -68,49 +72,98 @@ export function UpdateTooltips() { * @returns {string} l('tooltip').innerHTML The HTML of the l('tooltip')-object */ export function CreateTooltip(type, name) { - if (type === 'b') { // Buildings - l('tooltip').innerHTML = Game.Objects[name].tooltip(); - // Adds amortization info to the list of info per building - if (CMOptions.TooltipAmor === 1) { - const buildPrice = BuildingGetPrice(Game.Objects[name], Game.Objects[name].basePrice, 0, Game.Objects[name].free, Game.Objects[name].amount); - const 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 (${GetTimeColor((buildPrice - Game.Objects[name].totalCookies) / (Game.Objects[name].storedTotalCps * Game.globalCpsMult)).text})`); - } - } - if (Game.buyMode === -1) { - /* - * Fix sell price displayed in the object tooltip. - * - * The buildings sell price displayed by the game itself (without any mod) is incorrect. - * The following line of code fixes this issue, and can be safely removed when the game gets fixed. - * - * This issue is extensively detailed here: https://github.com/Aktanusa/CookieMonster/issues/359#issuecomment-735658262 - */ - l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].bulkPrice)).join(Beautify((Game.Objects[name], Game.Objects[name].basePrice, Game.Objects[name].amount, Game.Objects[name].free, Game.buyBulk, 1))); - } - } else if (type === 'u') { // Upgrades - if (!Game.UpgradesInStore[name]) return ''; - l('tooltip').innerHTML = Game.crateTooltip(Game.UpgradesInStore[name], 'store'); - } else if (type === 's') l('tooltip').innerHTML = Game.lumpTooltip(); // Sugar Lumps - else if (type === 'g') l('tooltip').innerHTML = Game.Objects['Wizard tower'].minigame.spellTooltip(name)(); // Grimoire - else if (type === 'p') l('tooltip').innerHTML = Game.ObjectsById[2].minigame.tileTooltip(name[0], name[1])(); // Garden plots - else if (type === 'ha') l('tooltip').innerHTML = Game.ObjectsById[2].minigame.toolTooltip(1)(); // Harvest all button in garden + if (type === 'b') { + // Buildings + l('tooltip').innerHTML = Game.Objects[name].tooltip(); + // Adds amortization info to the list of info per building + if (CMOptions.TooltipAmor === 1) { + const buildPrice = BuildingGetPrice( + Game.Objects[name], + Game.Objects[name].basePrice, + 0, + Game.Objects[name].free, + Game.Objects[name].amount, + ); + const 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 (${ + GetTimeColor( + (buildPrice - Game.Objects[name].totalCookies) / + (Game.Objects[name].storedTotalCps * Game.globalCpsMult), + ).text + })`, + ); + } + } + if (Game.buyMode === -1) { + /* + * Fix sell price displayed in the object tooltip. + * + * The buildings sell price displayed by the game itself (without any mod) is incorrect. + * The following line of code fixes this issue, and can be safely removed when the game gets fixed. + * + * This issue is extensively detailed here: https://github.com/Aktanusa/CookieMonster/issues/359#issuecomment-735658262 + */ + l('tooltip').innerHTML = l('tooltip') + .innerHTML.split(Beautify(Game.Objects[name].bulkPrice)) + .join( + Beautify( + (Game.Objects[name], + Game.Objects[name].basePrice, + Game.Objects[name].amount, + Game.Objects[name].free, + Game.buyBulk, + 1), + ), + ); + } + } else if (type === 'u') { + // Upgrades + if (!Game.UpgradesInStore[name]) return ''; + l('tooltip').innerHTML = Game.crateTooltip( + Game.UpgradesInStore[name], + 'store', + ); + } else if (type === 's') l('tooltip').innerHTML = Game.lumpTooltip(); + // Sugar Lumps + else if (type === 'g') + l('tooltip').innerHTML = Game.Objects['Wizard tower'].minigame.spellTooltip( + name, + )(); + // Grimoire + else if (type === 'p') + l('tooltip').innerHTML = Game.ObjectsById[2].minigame.tileTooltip( + name[0], + name[1], + )(); + // Garden plots + else if (type === 'ha') + l('tooltip').innerHTML = Game.ObjectsById[2].minigame.toolTooltip(1)(); // Harvest all button in garden - // Adds area for extra tooltip-sections - if ((type === 'b' && Game.buyMode === 1) || type === 'u' || type === 's' || type === 'g' || (type === 'p' && !Game.keys[16]) || type === 'ha') { - const area = document.createElement('div'); - area.id = 'CMTooltipArea'; - l('tooltip').appendChild(area); - } + // Adds area for extra tooltip-sections + if ( + (type === 'b' && Game.buyMode === 1) || + type === 'u' || + type === 's' || + type === 'g' || + (type === 'p' && !Game.keys[16]) || + type === 'ha' + ) { + const area = document.createElement('div'); + area.id = 'CMTooltipArea'; + l('tooltip').appendChild(area); + } - // Sets global variables used by CM.Disp.UpdateTooltip() - TooltipType = type; - TooltipName = name; + // Sets global variables used by CM.Disp.UpdateTooltip() + TooltipType = type; + TooltipName = name; - UpdateTooltips(); + UpdateTooltips(); - return l('tooltip').innerHTML; + return l('tooltip').innerHTML; } diff --git a/src/Disp/Tooltips/UpdateTooltips.js b/src/Disp/Tooltips/UpdateTooltips.js index 09c0f41..4476e2c 100644 --- a/src/Disp/Tooltips/UpdateTooltips.js +++ b/src/Disp/Tooltips/UpdateTooltips.js @@ -1,17 +1,34 @@ import GetCPSBuffMult from '../../Cache/CPS/GetCPSBuffMult'; import { - CacheEdifice, CacheLastChoEgg, CacheLucky, CacheNoGoldSwitchCookiesPS, CacheObjects1, CacheObjects10, CacheObjects100, CacheUpgrades, + CacheEdifice, + CacheLastChoEgg, + CacheLucky, + CacheNoGoldSwitchCookiesPS, + CacheObjects1, + CacheObjects10, + CacheObjects100, + CacheUpgrades, } from '../../Cache/VariablesAndData'; import ToggleToolWarnPos from '../../Config/Toggles/ToggleToolWarnPos'; import { CMOptions } from '../../Config/VariablesAndData'; import { SimObjects } from '../../Sim/VariablesAndData'; -import { Beautify, FormatTime, GetTimeColor } from '../BeautifyAndFormatting/BeautifyFormatting'; +import { + Beautify, + FormatTime, + GetTimeColor, +} from '../BeautifyAndFormatting/BeautifyFormatting'; import CalculateGrimoireRefillTime from '../HelperFunctions/CalculateGrimoireRefillTime'; import GetCPS from '../HelperFunctions/GetCPS'; import GetLumpColor from '../HelperFunctions/GetLumpColor'; import GetWrinkConfigBank from '../HelperFunctions/GetWrinkConfigBank'; import { - ColorTextPre, LastTargetTooltipBuilding, TooltipBonusIncome, TooltipBonusMouse, TooltipName, TooltipPrice, TooltipType, + ColorTextPre, + LastTargetTooltipBuilding, + TooltipBonusIncome, + TooltipBonusMouse, + TooltipName, + TooltipPrice, + TooltipType, } from '../VariablesAndData'; import * as Create from './CreateTooltip'; @@ -21,114 +38,154 @@ import * as Create from './CreateTooltip'; * This function adds extra info to the Building tooltips */ export function Building() { - if (CMOptions.TooltipBuildUpgrade === 1 && Game.buyMode === 1) { - const tooltipBox = l('CMTooltipBorder'); - Create.TooltipCreateCalculationSection(tooltipBox); + if (CMOptions.TooltipBuildUpgrade === 1 && Game.buyMode === 1) { + const tooltipBox = l('CMTooltipBorder'); + Create.TooltipCreateCalculationSection(tooltipBox); - let target; - if (Game.buyMode === 1) { - LastTargetTooltipBuilding = target; - } else { - target = LastTargetTooltipBuilding; - } - if (Game.buyBulk === 1) target = CacheObjects1; - else if (Game.buyBulk === 10) target = CacheObjects10; - else if (Game.buyBulk === 100) target = CacheObjects100; + let target; + if (Game.buyMode === 1) { + LastTargetTooltipBuilding = target; + } else { + target = LastTargetTooltipBuilding; + } + if (Game.buyBulk === 1) target = CacheObjects1; + else if (Game.buyBulk === 10) target = CacheObjects10; + else if (Game.buyBulk === 100) target = CacheObjects100; - TooltipPrice = Game.Objects[TooltipName].bulkPrice; - TooltipBonusIncome = target[TooltipName].bonus; + TooltipPrice = Game.Objects[TooltipName].bulkPrice; + TooltipBonusIncome = target[TooltipName].bonus; - if (CMOptions.TooltipBuildUpgrade === 1 && Game.buyMode === 1) { - l('CMTooltipIncome').textContent = Beautify(TooltipBonusIncome, 2); - const increase = Math.round(TooltipBonusIncome / Game.cookiesPs * 10000); - if (Number.isFinite(increase) && increase !== 0) { - l('CMTooltipIncome').textContent += ` (${increase / 100}% of income)`; - } - l('CMTooltipBorder').className = ColorTextPre + target[TooltipName].color; - l('CMTooltipPP').textContent = Beautify(target[TooltipName].pp, 2); - l('CMTooltipPP').className = ColorTextPre + target[TooltipName].color; - const timeColor = GetTimeColor((TooltipPrice - (Game.cookies + GetWrinkConfigBank())) / GetCPS()); - l('CMTooltipTime').textContent = timeColor.text; - if (timeColor.text === 'Done!' && Game.cookies < target[TooltipName].price) { - l('CMTooltipTime').textContent = `${timeColor.text} (with Wrink)`; - } else l('CMTooltipTime').textContent = timeColor.text; - l('CMTooltipTime').className = ColorTextPre + timeColor.color; - } + if (CMOptions.TooltipBuildUpgrade === 1 && Game.buyMode === 1) { + l('CMTooltipIncome').textContent = Beautify(TooltipBonusIncome, 2); + const increase = Math.round( + (TooltipBonusIncome / Game.cookiesPs) * 10000, + ); + if (Number.isFinite(increase) && increase !== 0) { + l('CMTooltipIncome').textContent += ` (${increase / 100}% of income)`; + } + l('CMTooltipBorder').className = ColorTextPre + target[TooltipName].color; + l('CMTooltipPP').textContent = Beautify(target[TooltipName].pp, 2); + l('CMTooltipPP').className = ColorTextPre + target[TooltipName].color; + const timeColor = GetTimeColor( + (TooltipPrice - (Game.cookies + GetWrinkConfigBank())) / GetCPS(), + ); + l('CMTooltipTime').textContent = timeColor.text; + if ( + timeColor.text === 'Done!' && + Game.cookies < target[TooltipName].price + ) { + l('CMTooltipTime').textContent = `${timeColor.text} (with Wrink)`; + } else l('CMTooltipTime').textContent = timeColor.text; + l('CMTooltipTime').className = ColorTextPre + timeColor.color; + } - // Add "production left till next achievement"-bar - l('CMTooltipProductionHeader').style.display = 'none'; - l('CMTooltipTime').style.marginBottom = '0px'; - for (const i of Object.keys(Game.Objects[TooltipName].productionAchievs)) { - if (!Game.HasAchiev(Game.Objects[TooltipName].productionAchievs[i].achiev.name)) { - const nextProductionAchiev = Game.Objects[TooltipName].productionAchievs[i]; - l('CMTooltipTime').style.marginBottom = '4px'; - l('CMTooltipProductionHeader').style.display = ''; - l('CMTooltipProduction').className = `ProdAchievement${TooltipName}`; - l('CMTooltipProduction').textContent = Beautify(nextProductionAchiev.pow - SimObjects[TooltipName].totalCookies, 15); - l('CMTooltipProduction').style.color = 'white'; - break; - } - } - } else l('CMTooltipArea').style.display = 'none'; + // Add "production left till next achievement"-bar + l('CMTooltipProductionHeader').style.display = 'none'; + l('CMTooltipTime').style.marginBottom = '0px'; + for (const i of Object.keys(Game.Objects[TooltipName].productionAchievs)) { + if ( + !Game.HasAchiev( + Game.Objects[TooltipName].productionAchievs[i].achiev.name, + ) + ) { + const nextProductionAchiev = + Game.Objects[TooltipName].productionAchievs[i]; + l('CMTooltipTime').style.marginBottom = '4px'; + l('CMTooltipProductionHeader').style.display = ''; + l('CMTooltipProduction').className = `ProdAchievement${TooltipName}`; + l('CMTooltipProduction').textContent = Beautify( + nextProductionAchiev.pow - SimObjects[TooltipName].totalCookies, + 15, + ); + l('CMTooltipProduction').style.color = 'white'; + break; + } + } + } else l('CMTooltipArea').style.display = 'none'; } /** * This function adds extra info to the Upgrade tooltips */ export function Upgrade() { - const tooltipBox = l('CMTooltipBorder'); - Create.TooltipCreateCalculationSection(tooltipBox); + const tooltipBox = l('CMTooltipBorder'); + Create.TooltipCreateCalculationSection(tooltipBox); - TooltipBonusIncome = CacheUpgrades[Game.UpgradesInStore[TooltipName].name].bonus; - TooltipPrice = Game.Upgrades[Game.UpgradesInStore[TooltipName].name].getPrice(); - TooltipBonusMouse = CacheUpgrades[Game.UpgradesInStore[TooltipName].name].bonusMouse; + TooltipBonusIncome = + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].bonus; + TooltipPrice = Game.Upgrades[ + Game.UpgradesInStore[TooltipName].name + ].getPrice(); + TooltipBonusMouse = + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].bonusMouse; - if (CMOptions.TooltipBuildUpgrade === 1) { - l('CMTooltipIncome').textContent = Beautify(TooltipBonusIncome, 2); - const increase = Math.round(TooltipBonusIncome / Game.cookiesPs * 10000); - // Don't display certain parts of tooltip if not applicable - if (l('CMTooltipIncome').textContent === '0' && (TooltipType === 'b' || TooltipType === 'u')) { - l('Bonus IncomeTitle').style.display = 'none'; - l('CMTooltipIncome').style.display = 'none'; - l('Payback PeriodTitle').style.display = 'none'; - l('CMTooltipPP').style.display = 'none'; - } else { - if (Number.isFinite(increase) && increase !== 0) { - l('CMTooltipIncome').textContent += ` (${increase / 100}% of income)`; - } - l('CMTooltipBorder').className = ColorTextPre + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].color; - // If clicking power upgrade - if (TooltipBonusMouse) { - l('CMTooltipCookiePerClick').textContent = Beautify(TooltipBonusMouse); - l('CMTooltipCookiePerClick').style.display = 'block'; - l('CMTooltipCookiePerClick').previousSibling.style.display = 'block'; - } - // If only a clicking power upgrade change PP to click-based period - if (TooltipBonusIncome === 0 && TooltipBonusMouse) { - l('CMTooltipPP').textContent = `${Beautify(TooltipPrice / TooltipBonusMouse)} Clicks`; - l('CMTooltipPP').style.color = 'white'; - } else { - l('CMTooltipPP').textContent = Beautify(CacheUpgrades[Game.UpgradesInStore[TooltipName].name].pp, 2); - l('CMTooltipPP').className = ColorTextPre + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].color; - } - } - const timeColor = GetTimeColor((TooltipPrice - (Game.cookies + GetWrinkConfigBank())) / GetCPS()); - l('CMTooltipTime').textContent = timeColor.text; - if (timeColor.text === 'Done!' && Game.cookies < Game.UpgradesInStore[TooltipName].getPrice()) { - l('CMTooltipTime').textContent = `${timeColor.text} (with Wrink)`; - } else l('CMTooltipTime').textContent = timeColor.text; - l('CMTooltipTime').className = ColorTextPre + timeColor.color; + if (CMOptions.TooltipBuildUpgrade === 1) { + l('CMTooltipIncome').textContent = Beautify(TooltipBonusIncome, 2); + const increase = Math.round((TooltipBonusIncome / Game.cookiesPs) * 10000); + // Don't display certain parts of tooltip if not applicable + if ( + l('CMTooltipIncome').textContent === '0' && + (TooltipType === 'b' || TooltipType === 'u') + ) { + l('Bonus IncomeTitle').style.display = 'none'; + l('CMTooltipIncome').style.display = 'none'; + l('Payback PeriodTitle').style.display = 'none'; + l('CMTooltipPP').style.display = 'none'; + } else { + if (Number.isFinite(increase) && increase !== 0) { + l('CMTooltipIncome').textContent += ` (${increase / 100}% of income)`; + } + l('CMTooltipBorder').className = + ColorTextPre + + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].color; + // If clicking power upgrade + if (TooltipBonusMouse) { + l('CMTooltipCookiePerClick').textContent = Beautify(TooltipBonusMouse); + l('CMTooltipCookiePerClick').style.display = 'block'; + l('CMTooltipCookiePerClick').previousSibling.style.display = 'block'; + } + // If only a clicking power upgrade change PP to click-based period + if (TooltipBonusIncome === 0 && TooltipBonusMouse) { + l('CMTooltipPP').textContent = `${Beautify( + TooltipPrice / TooltipBonusMouse, + )} Clicks`; + l('CMTooltipPP').style.color = 'white'; + } else { + l('CMTooltipPP').textContent = Beautify( + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].pp, + 2, + ); + l('CMTooltipPP').className = + ColorTextPre + + CacheUpgrades[Game.UpgradesInStore[TooltipName].name].color; + } + } + const timeColor = GetTimeColor( + (TooltipPrice - (Game.cookies + GetWrinkConfigBank())) / GetCPS(), + ); + l('CMTooltipTime').textContent = timeColor.text; + if ( + timeColor.text === 'Done!' && + Game.cookies < Game.UpgradesInStore[TooltipName].getPrice() + ) { + l('CMTooltipTime').textContent = `${timeColor.text} (with Wrink)`; + } else l('CMTooltipTime').textContent = timeColor.text; + l('CMTooltipTime').className = ColorTextPre + timeColor.color; - // Add extra info to Chocolate egg tooltip - if (Game.UpgradesInStore[TooltipName].name === 'Chocolate egg') { - l('CMTooltipBorder').lastChild.style.marginBottom = '4px'; - l('CMTooltipBorder').appendChild(Create.TooltipCreateHeader('Cookies to be gained (Currently/Max)')); - const chocolate = document.createElement('div'); - chocolate.style.color = 'white'; - chocolate.textContent = `${Beautify(Game.cookies * 0.05)} / ${Beautify(CacheLastChoEgg)}`; - l('CMTooltipBorder').appendChild(chocolate); - } - } else l('CMTooltipArea').style.display = 'none'; + // Add extra info to Chocolate egg tooltip + if (Game.UpgradesInStore[TooltipName].name === 'Chocolate egg') { + l('CMTooltipBorder').lastChild.style.marginBottom = '4px'; + l('CMTooltipBorder').appendChild( + Create.TooltipCreateHeader('Cookies to be gained (Currently/Max)'), + ); + const chocolate = document.createElement('div'); + chocolate.style.color = 'white'; + chocolate.textContent = `${Beautify(Game.cookies * 0.05)} / ${Beautify( + CacheLastChoEgg, + )}`; + l('CMTooltipBorder').appendChild(chocolate); + } + } else l('CMTooltipArea').style.display = 'none'; } /** @@ -136,18 +193,18 @@ export function Upgrade() { * It adds to the additional information to l('CMTooltipArea') */ export function SugarLump() { - if (CMOptions.TooltipLump === 1) { - const tooltipBox = l('CMTooltipBorder'); + if (CMOptions.TooltipLump === 1) { + const tooltipBox = l('CMTooltipBorder'); - tooltipBox.appendChild(Create.TooltipCreateHeader('Current Sugar Lump')); + tooltipBox.appendChild(Create.TooltipCreateHeader('Current Sugar Lump')); - const lumpType = document.createElement('div'); - lumpType.id = 'CMTooltipTime'; - tooltipBox.appendChild(lumpType); - const lumpColor = GetLumpColor(Game.lumpCurrentType); - lumpType.textContent = lumpColor.text; - lumpType.className = ColorTextPre + lumpColor.color; - } else l('CMTooltipArea').style.display = 'none'; + const lumpType = document.createElement('div'); + lumpType.id = 'CMTooltipTime'; + tooltipBox.appendChild(lumpType); + const lumpColor = GetLumpColor(Game.lumpCurrentType); + lumpType.textContent = lumpColor.text; + lumpType.className = ColorTextPre + lumpColor.color; + } else l('CMTooltipArea').style.display = 'none'; } /** @@ -155,53 +212,69 @@ export function SugarLump() { * It adds to the additional information to l('CMTooltipArea') */ export function Grimoire() { - const minigame = Game.Objects['Wizard tower'].minigame; - const spellCost = minigame.getSpellCost(minigame.spellsById[TooltipName]); + const minigame = Game.Objects['Wizard tower'].minigame; + const spellCost = minigame.getSpellCost(minigame.spellsById[TooltipName]); - if (CMOptions.TooltipGrim === 1 && spellCost <= minigame.magicM) { - const tooltipBox = l('CMTooltipBorder'); + if (CMOptions.TooltipGrim === 1 && spellCost <= minigame.magicM) { + const tooltipBox = l('CMTooltipBorder'); - // Time left till enough magic for spell - tooltipBox.appendChild(Create.TooltipCreateHeader('Time Left')); - const time = document.createElement('div'); - time.id = 'CMTooltipTime'; - tooltipBox.appendChild(time); - const timeColor = GetTimeColor(CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, spellCost)); - time.textContent = timeColor.text; - time.className = ColorTextPre + timeColor.color; + // Time left till enough magic for spell + tooltipBox.appendChild(Create.TooltipCreateHeader('Time Left')); + const time = document.createElement('div'); + time.id = 'CMTooltipTime'; + tooltipBox.appendChild(time); + const timeColor = GetTimeColor( + CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, spellCost), + ); + time.textContent = timeColor.text; + time.className = ColorTextPre + timeColor.color; - // Time left untill magic spent is recovered - if (spellCost <= minigame.magic) { - tooltipBox.appendChild(Create.TooltipCreateHeader('Recover Time')); - const recover = document.createElement('div'); - recover.id = 'CMTooltipRecover'; - tooltipBox.appendChild(recover); - const recoverColor = GetTimeColor(CalculateGrimoireRefillTime(Math.max(0, minigame.magic - spellCost), minigame.magicM, minigame.magic)); - recover.textContent = recoverColor.text; - recover.className = ColorTextPre + recoverColor.color; - } + // Time left untill magic spent is recovered + if (spellCost <= minigame.magic) { + tooltipBox.appendChild(Create.TooltipCreateHeader('Recover Time')); + const recover = document.createElement('div'); + recover.id = 'CMTooltipRecover'; + tooltipBox.appendChild(recover); + const recoverColor = GetTimeColor( + CalculateGrimoireRefillTime( + Math.max(0, minigame.magic - spellCost), + minigame.magicM, + minigame.magic, + ), + ); + recover.textContent = recoverColor.text; + recover.className = ColorTextPre + recoverColor.color; + } - // Extra information on cookies gained when spell is Conjure Baked Goods (Name === 0) - if (TooltipName === '0') { - tooltipBox.appendChild(Create.TooltipCreateHeader('Cookies to be gained/lost')); - const conjure = document.createElement('div'); - conjure.id = 'x'; - tooltipBox.appendChild(conjure); - const reward = document.createElement('span'); - reward.style.color = '#33FF00'; - reward.textContent = Beautify(Math.min((Game.cookies + GetWrinkConfigBank()) * 0.15, CacheNoGoldSwitchCookiesPS * 60 * 30), 2); - conjure.appendChild(reward); - const seperator = document.createElement('span'); - seperator.textContent = ' / '; - conjure.appendChild(seperator); - const loss = document.createElement('span'); - loss.style.color = 'red'; - loss.textContent = Beautify((CacheNoGoldSwitchCookiesPS * 60 * 15), 2); - conjure.appendChild(loss); - } + // Extra information on cookies gained when spell is Conjure Baked Goods (Name === 0) + if (TooltipName === '0') { + tooltipBox.appendChild( + Create.TooltipCreateHeader('Cookies to be gained/lost'), + ); + const conjure = document.createElement('div'); + conjure.id = 'x'; + tooltipBox.appendChild(conjure); + const reward = document.createElement('span'); + reward.style.color = '#33FF00'; + reward.textContent = Beautify( + Math.min( + (Game.cookies + GetWrinkConfigBank()) * 0.15, + CacheNoGoldSwitchCookiesPS * 60 * 30, + ), + 2, + ); + conjure.appendChild(reward); + const seperator = document.createElement('span'); + seperator.textContent = ' / '; + conjure.appendChild(seperator); + const loss = document.createElement('span'); + loss.style.color = 'red'; + loss.textContent = Beautify(CacheNoGoldSwitchCookiesPS * 60 * 15, 2); + conjure.appendChild(loss); + } - l('CMTooltipArea').appendChild(tooltipBox); - } else l('CMTooltipArea').style.display = 'none'; + l('CMTooltipArea').appendChild(tooltipBox); + } else l('CMTooltipArea').style.display = 'none'; } /** @@ -209,24 +282,50 @@ export function Grimoire() { * It adds to the additional information to l('CMTooltipArea') */ export function GardenPlots() { - const minigame = Game.Objects.Farm.minigame; - if (CMOptions.TooltipPlots && minigame.plot[TooltipName[1]][TooltipName[0]][0] !== 0) { - const mature = minigame.plot[TooltipName[1]][TooltipName[0]][1] > minigame.plantsById[minigame.plot[TooltipName[1]][TooltipName[0]][0] - 1].matureBase; - const plantName = minigame.plantsById[minigame.plot[TooltipName[1]][TooltipName[0]][0] - 1].name; - l('CMTooltipBorder').appendChild(Create.TooltipCreateHeader('Reward (Current / Maximum)')); - const reward = document.createElement('div'); - reward.id = 'CMTooltipPlantReward'; - l('CMTooltipBorder').appendChild(reward); - if (plantName === 'Bakeberry') { - l('CMTooltipPlantReward').textContent = `${mature ? Beautify(Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 30)) : '0'} / ${Beautify(Game.cookiesPs * 60 * 30)}`; - } else if (plantName === 'Chocoroot' || plantName === 'White chocoroot') { - l('CMTooltipPlantReward').textContent = `${mature ? Beautify(Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 3)) : '0'} / ${Beautify(Game.cookiesPs * 60 * 3)}`; - } else if (plantName === 'Queenbeet') { - l('CMTooltipPlantReward').textContent = `${mature ? Beautify(Math.min(Game.cookies * 0.04, Game.cookiesPs * 60 * 60)) : '0'} / ${Beautify(Game.cookiesPs * 60 * 60)}`; - } else if (plantName === 'Duketater') { - l('CMTooltipPlantReward').textContent = `${mature ? Beautify(Math.min(Game.cookies * 0.08, Game.cookiesPs * 60 * 120)) : '0'} / ${Beautify(Game.cookiesPs * 60 * 120)}`; - } else l('CMTooltipArea').style.display = 'none'; - } else l('CMTooltipArea').style.display = 'none'; + const minigame = Game.Objects.Farm.minigame; + if ( + CMOptions.TooltipPlots && + minigame.plot[TooltipName[1]][TooltipName[0]][0] !== 0 + ) { + const mature = + minigame.plot[TooltipName[1]][TooltipName[0]][1] > + minigame.plantsById[minigame.plot[TooltipName[1]][TooltipName[0]][0] - 1] + .matureBase; + const plantName = + minigame.plantsById[minigame.plot[TooltipName[1]][TooltipName[0]][0] - 1] + .name; + l('CMTooltipBorder').appendChild( + Create.TooltipCreateHeader('Reward (Current / Maximum)'), + ); + const reward = document.createElement('div'); + reward.id = 'CMTooltipPlantReward'; + l('CMTooltipBorder').appendChild(reward); + if (plantName === 'Bakeberry') { + l('CMTooltipPlantReward').textContent = `${ + mature + ? Beautify(Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 30)) + : '0' + } / ${Beautify(Game.cookiesPs * 60 * 30)}`; + } else if (plantName === 'Chocoroot' || plantName === 'White chocoroot') { + l('CMTooltipPlantReward').textContent = `${ + mature + ? Beautify(Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 3)) + : '0' + } / ${Beautify(Game.cookiesPs * 60 * 3)}`; + } else if (plantName === 'Queenbeet') { + l('CMTooltipPlantReward').textContent = `${ + mature + ? Beautify(Math.min(Game.cookies * 0.04, Game.cookiesPs * 60 * 60)) + : '0' + } / ${Beautify(Game.cookiesPs * 60 * 60)}`; + } else if (plantName === 'Duketater') { + l('CMTooltipPlantReward').textContent = `${ + mature + ? Beautify(Math.min(Game.cookies * 0.08, Game.cookiesPs * 60 * 120)) + : '0' + } / ${Beautify(Game.cookiesPs * 60 * 120)}`; + } else l('CMTooltipArea').style.display = 'none'; + } else l('CMTooltipArea').style.display = 'none'; } /** @@ -235,36 +334,52 @@ export function GardenPlots() { * It adds to the additional information to l('CMTooltipArea') */ export function HarvestAll() { - const minigame = Game.Objects.Farm.minigame; - if (CMOptions.TooltipLump) { - l('CMTooltipBorder').appendChild(Create.TooltipCreateHeader('Cookies gained from harvesting:')); - let totalGain = 0; - let mortal = 0; - if (Game.keys[16] && Game.keys[17]) mortal = 1; - for (let y = 0; y < 6; y++) { - for (let x = 0; x < 6; x++) { - if (minigame.plot[y][x][0] >= 1) { - const tile = minigame.plot[y][x]; - const me = minigame.plantsById[tile[0] - 1]; - const plantName = me.name; + const minigame = Game.Objects.Farm.minigame; + if (CMOptions.TooltipLump) { + l('CMTooltipBorder').appendChild( + Create.TooltipCreateHeader('Cookies gained from harvesting:'), + ); + let totalGain = 0; + let mortal = 0; + if (Game.keys[16] && Game.keys[17]) mortal = 1; + for (let y = 0; y < 6; y++) { + for (let x = 0; x < 6; x++) { + if (minigame.plot[y][x][0] >= 1) { + const tile = minigame.plot[y][x]; + const me = minigame.plantsById[tile[0] - 1]; + const plantName = me.name; - let count = true; - if (mortal && me.immortal) count = false; - if (tile[1] < me.matureBase) count = false; - if (count && plantName === 'Bakeberry') { - totalGain += Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 30); - } else if (count && plantName === 'Chocoroot' || plantName === 'White chocoroot') { - totalGain += Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 3); - } else if (count && plantName === 'Queenbeet') { - totalGain += Math.min(Game.cookies * 0.04, Game.cookiesPs * 60 * 60); - } else if (count && plantName === 'Duketater') { - totalGain += Math.min(Game.cookies * 0.08, Game.cookiesPs * 60 * 120); - } - } - } - } - l('CMTooltipBorder').appendChild(document.createTextNode(Beautify(totalGain))); - } else l('CMTooltipArea').style.display = 'none'; + let count = true; + if (mortal && me.immortal) count = false; + if (tile[1] < me.matureBase) count = false; + if (count && plantName === 'Bakeberry') { + totalGain += Math.min( + Game.cookies * 0.03, + Game.cookiesPs * 60 * 30, + ); + } else if ( + (count && plantName === 'Chocoroot') || + plantName === 'White chocoroot' + ) { + totalGain += Math.min(Game.cookies * 0.03, Game.cookiesPs * 60 * 3); + } else if (count && plantName === 'Queenbeet') { + totalGain += Math.min( + Game.cookies * 0.04, + Game.cookiesPs * 60 * 60, + ); + } else if (count && plantName === 'Duketater') { + totalGain += Math.min( + Game.cookies * 0.08, + Game.cookiesPs * 60 * 120, + ); + } + } + } + } + l('CMTooltipBorder').appendChild( + document.createTextNode(Beautify(totalGain)), + ); + } else l('CMTooltipArea').style.display = 'none'; } /** @@ -272,73 +387,125 @@ export function HarvestAll() { * It is called by CM.Disp.UpdateTooltip() */ export function Warnings() { - if (TooltipType === 'b' || TooltipType === 'u') { - if (document.getElementById('CMDispTooltipWarningParent') === null) { - l('tooltipAnchor').appendChild(Create.TooltipCreateWarningSection()); - ToggleToolWarnPos(); - } + if (TooltipType === 'b' || TooltipType === 'u') { + if (document.getElementById('CMDispTooltipWarningParent') === null) { + l('tooltipAnchor').appendChild(Create.TooltipCreateWarningSection()); + ToggleToolWarnPos(); + } - if (CMOptions.ToolWarnPos === 0) l('CMDispTooltipWarningParent').style.right = '0px'; - else l('CMDispTooltipWarningParent').style.top = `${l('tooltip').offsetHeight}px`; + if (CMOptions.ToolWarnPos === 0) + l('CMDispTooltipWarningParent').style.right = '0px'; + else + l('CMDispTooltipWarningParent').style.top = `${ + l('tooltip').offsetHeight + }px`; - l('CMDispTooltipWarningParent').style.width = `${l('tooltip').offsetWidth - 6}px`; + l('CMDispTooltipWarningParent').style.width = `${ + l('tooltip').offsetWidth - 6 + }px`; - const amount = (Game.cookies + GetWrinkConfigBank()) - TooltipPrice; - const bonusIncomeUsed = CMOptions.ToolWarnBon ? TooltipBonusIncome : 0; - let limitLucky = CacheLucky; - if (CMOptions.ToolWarnBon === 1) { - let bonusNoFren = TooltipBonusIncome; - bonusNoFren /= GetCPSBuffMult(); - limitLucky += ((bonusNoFren * 60 * 15) / 0.15); - } + const amount = Game.cookies + GetWrinkConfigBank() - TooltipPrice; + const bonusIncomeUsed = CMOptions.ToolWarnBon ? TooltipBonusIncome : 0; + let limitLucky = CacheLucky; + if (CMOptions.ToolWarnBon === 1) { + let bonusNoFren = TooltipBonusIncome; + bonusNoFren /= GetCPSBuffMult(); + limitLucky += (bonusNoFren * 60 * 15) / 0.15; + } - if (CMOptions.ToolWarnLucky === 1) { - if (amount < limitLucky && (TooltipType !== 'b' || Game.buyMode === 1)) { - l('CMDispTooltipWarnLucky').style.display = ''; - l('CMDispTooltipWarnLuckyText').textContent = `${Beautify(limitLucky - amount)} (${FormatTime((limitLucky - amount) / (GetCPS() + bonusIncomeUsed))})`; - } else l('CMDispTooltipWarnLucky').style.display = 'none'; - } else l('CMDispTooltipWarnLucky').style.display = 'none'; + if (CMOptions.ToolWarnLucky === 1) { + if (amount < limitLucky && (TooltipType !== 'b' || Game.buyMode === 1)) { + l('CMDispTooltipWarnLucky').style.display = ''; + l('CMDispTooltipWarnLuckyText').textContent = `${Beautify( + limitLucky - amount, + )} (${FormatTime( + (limitLucky - amount) / (GetCPS() + bonusIncomeUsed), + )})`; + } else l('CMDispTooltipWarnLucky').style.display = 'none'; + } else l('CMDispTooltipWarnLucky').style.display = 'none'; - if (CMOptions.ToolWarnLuckyFrenzy === 1) { - const limitLuckyFrenzy = limitLucky * 7; - if (amount < limitLuckyFrenzy && (TooltipType !== 'b' || Game.buyMode === 1)) { - l('CMDispTooltipWarnLuckyFrenzy').style.display = ''; - l('CMDispTooltipWarnLuckyFrenzyText').textContent = `${Beautify(limitLuckyFrenzy - amount)} (${FormatTime((limitLuckyFrenzy - amount) / (GetCPS() + bonusIncomeUsed))})`; - } else l('CMDispTooltipWarnLuckyFrenzy').style.display = 'none'; - } else l('CMDispTooltipWarnLuckyFrenzy').style.display = 'none'; + if (CMOptions.ToolWarnLuckyFrenzy === 1) { + const limitLuckyFrenzy = limitLucky * 7; + if ( + amount < limitLuckyFrenzy && + (TooltipType !== 'b' || Game.buyMode === 1) + ) { + l('CMDispTooltipWarnLuckyFrenzy').style.display = ''; + l('CMDispTooltipWarnLuckyFrenzyText').textContent = `${Beautify( + limitLuckyFrenzy - amount, + )} (${FormatTime( + (limitLuckyFrenzy - amount) / (GetCPS() + bonusIncomeUsed), + )})`; + } else l('CMDispTooltipWarnLuckyFrenzy').style.display = 'none'; + } else l('CMDispTooltipWarnLuckyFrenzy').style.display = 'none'; - if (CMOptions.ToolWarnConjure === 1) { - const limitConjure = limitLucky * 2; - if ((amount < limitConjure) && (TooltipType !== 'b' || Game.buyMode === 1)) { - l('CMDispTooltipWarnConjure').style.display = ''; - l('CMDispTooltipWarnConjureText').textContent = `${Beautify(limitConjure - amount)} (${FormatTime((limitConjure - amount) / (GetCPS() + bonusIncomeUsed))})`; - } else l('CMDispTooltipWarnConjure').style.display = 'none'; - } else l('CMDispTooltipWarnConjure').style.display = 'none'; + if (CMOptions.ToolWarnConjure === 1) { + const limitConjure = limitLucky * 2; + if ( + amount < limitConjure && + (TooltipType !== 'b' || Game.buyMode === 1) + ) { + l('CMDispTooltipWarnConjure').style.display = ''; + l('CMDispTooltipWarnConjureText').textContent = `${Beautify( + limitConjure - amount, + )} (${FormatTime( + (limitConjure - amount) / (GetCPS() + bonusIncomeUsed), + )})`; + } else l('CMDispTooltipWarnConjure').style.display = 'none'; + } else l('CMDispTooltipWarnConjure').style.display = 'none'; - if (CMOptions.ToolWarnConjureFrenzy === 1) { - const limitConjureFrenzy = limitLucky * 2 * 7; - if ((amount < limitConjureFrenzy) && (TooltipType !== 'b' || Game.buyMode === 1)) { - l('CMDispTooltipWarnConjureFrenzy').style.display = ''; - l('CMDispTooltipWarnConjureFrenzyText').textContent = `${Beautify(limitConjureFrenzy - amount)} (${FormatTime((limitConjureFrenzy - amount) / (GetCPS() + bonusIncomeUsed))})`; - } else l('CMDispTooltipWarnConjureFrenzy').style.display = 'none'; - } else l('CMDispTooltipWarnConjureFrenzy').style.display = 'none'; + if (CMOptions.ToolWarnConjureFrenzy === 1) { + const limitConjureFrenzy = limitLucky * 2 * 7; + if ( + amount < limitConjureFrenzy && + (TooltipType !== 'b' || Game.buyMode === 1) + ) { + l('CMDispTooltipWarnConjureFrenzy').style.display = ''; + l('CMDispTooltipWarnConjureFrenzyText').textContent = `${Beautify( + limitConjureFrenzy - amount, + )} (${FormatTime( + (limitConjureFrenzy - amount) / (GetCPS() + bonusIncomeUsed), + )})`; + } else l('CMDispTooltipWarnConjureFrenzy').style.display = 'none'; + } else l('CMDispTooltipWarnConjureFrenzy').style.display = 'none'; - if (CMOptions.ToolWarnEdifice === 1 && Game.Objects['Wizard tower'].minigameLoaded) { - if (CacheEdifice && amount < CacheEdifice && (TooltipType !== 'b' || Game.buyMode === 1)) { - l('CMDispTooltipWarnEdifice').style.display = ''; - l('CMDispTooltipWarnEdificeText').textContent = `${Beautify(CacheEdifice - amount)} (${FormatTime((CacheEdifice - amount) / (GetCPS() + bonusIncomeUsed))})`; - } else l('CMDispTooltipWarnEdifice').style.display = 'none'; - } else l('CMDispTooltipWarnEdifice').style.display = 'none'; + if ( + CMOptions.ToolWarnEdifice === 1 && + Game.Objects['Wizard tower'].minigameLoaded + ) { + if ( + CacheEdifice && + amount < CacheEdifice && + (TooltipType !== 'b' || Game.buyMode === 1) + ) { + l('CMDispTooltipWarnEdifice').style.display = ''; + l('CMDispTooltipWarnEdificeText').textContent = `${Beautify( + CacheEdifice - amount, + )} (${FormatTime( + (CacheEdifice - amount) / (GetCPS() + bonusIncomeUsed), + )})`; + } else l('CMDispTooltipWarnEdifice').style.display = 'none'; + } else l('CMDispTooltipWarnEdifice').style.display = 'none'; - if (CMOptions.ToolWarnUser > 0) { - if (amount < CMOptions.ToolWarnUser * GetCPS() && (TooltipType !== 'b' || Game.buyMode === 1)) { - l('CMDispTooltipWarnUser').style.display = ''; - // Need to update tooltip text dynamically - l('CMDispTooltipWarnUser').children[0].textContent = `Purchase of this item will put you under the number of Cookies equal to ${CMOptions.ToolWarnUser} seconds of CPS`; - l('CMDispTooltipWarnUserText').textContent = `${Beautify(CMOptions.ToolWarnUser * GetCPS() - amount)} (${FormatTime((CMOptions.ToolWarnUser * GetCPS() - amount) / (GetCPS() + bonusIncomeUsed))})`; - } else l('CMDispTooltipWarnUser').style.display = 'none'; - } else l('CMDispTooltipWarnUser').style.display = 'none'; - } else if (l('CMDispTooltipWarningParent') !== null) { - l('CMDispTooltipWarningParent').remove(); - } + if (CMOptions.ToolWarnUser > 0) { + if ( + amount < CMOptions.ToolWarnUser * GetCPS() && + (TooltipType !== 'b' || Game.buyMode === 1) + ) { + l('CMDispTooltipWarnUser').style.display = ''; + // Need to update tooltip text dynamically + l( + 'CMDispTooltipWarnUser', + ).children[0].textContent = `Purchase of this item will put you under the number of Cookies equal to ${CMOptions.ToolWarnUser} seconds of CPS`; + l('CMDispTooltipWarnUserText').textContent = `${Beautify( + CMOptions.ToolWarnUser * GetCPS() - amount, + )} (${FormatTime( + (CMOptions.ToolWarnUser * GetCPS() - amount) / + (GetCPS() + bonusIncomeUsed), + )})`; + } else l('CMDispTooltipWarnUser').style.display = 'none'; + } else l('CMDispTooltipWarnUser').style.display = 'none'; + } else if (l('CMDispTooltipWarningParent') !== null) { + l('CMDispTooltipWarningParent').remove(); + } } diff --git a/src/Disp/Tooltips/WrinklerTooltips.js b/src/Disp/Tooltips/WrinklerTooltips.js index 815c5cc..cb48499 100644 --- a/src/Disp/Tooltips/WrinklerTooltips.js +++ b/src/Disp/Tooltips/WrinklerTooltips.js @@ -1,7 +1,11 @@ import { CMOptions } from '../../Config/VariablesAndData'; import { SimObjects } from '../../Sim/VariablesAndData'; import { Beautify } from '../BeautifyAndFormatting/BeautifyFormatting'; -import { TooltipWrinkler, TooltipWrinklerArea, TooltipWrinklerBeingShown } from '../VariablesAndData'; +import { + TooltipWrinkler, + TooltipWrinklerArea, + TooltipWrinklerBeingShown, +} from '../VariablesAndData'; /** * This function checks and create a tooltip for the wrinklers @@ -9,34 +13,38 @@ import { TooltipWrinkler, TooltipWrinklerArea, TooltipWrinklerBeingShown } from * As wrinklers are not appended to the DOM we us a different system than for other tooltips */ export function CheckWrinklerTooltip() { - if (CMOptions.TooltipWrink === 1 && TooltipWrinklerArea === 1) { // Latter is set by CM.Main.AddWrinklerAreaDetect - let showingTooltip = false; - for (const i of Object.keys(Game.wrinklers)) { - const me = Game.wrinklers[i]; - if (me.phase > 0 && me.selected) { - showingTooltip = true; - if (TooltipWrinklerBeingShown[i] === 0 || TooltipWrinklerBeingShown[i] === undefined) { - const placeholder = document.createElement('div'); - const wrinkler = document.createElement('div'); - wrinkler.style.minWidth = '120px'; - wrinkler.style.marginBottom = '4px'; - const div = document.createElement('div'); - div.style.textAlign = 'center'; - div.id = 'CMTooltipWrinkler'; - wrinkler.appendChild(div); - placeholder.appendChild(wrinkler); - Game.tooltip.draw(this, escape(placeholder.innerHTML)); - TooltipWrinkler = i; - TooltipWrinklerBeingShown[i] = 1; - } else break; - } else { - TooltipWrinklerBeingShown[i] = 0; - } - } - if (!showingTooltip) { - Game.tooltip.hide(); - } - } + if (CMOptions.TooltipWrink === 1 && TooltipWrinklerArea === 1) { + // Latter is set by CM.Main.AddWrinklerAreaDetect + let showingTooltip = false; + for (const i of Object.keys(Game.wrinklers)) { + const me = Game.wrinklers[i]; + if (me.phase > 0 && me.selected) { + showingTooltip = true; + if ( + TooltipWrinklerBeingShown[i] === 0 || + TooltipWrinklerBeingShown[i] === undefined + ) { + const placeholder = document.createElement('div'); + const wrinkler = document.createElement('div'); + wrinkler.style.minWidth = '120px'; + wrinkler.style.marginBottom = '4px'; + const div = document.createElement('div'); + div.style.textAlign = 'center'; + div.id = 'CMTooltipWrinkler'; + wrinkler.appendChild(div); + placeholder.appendChild(wrinkler); + Game.tooltip.draw(this, escape(placeholder.innerHTML)); + TooltipWrinkler = i; + TooltipWrinklerBeingShown[i] = 1; + } else break; + } else { + TooltipWrinklerBeingShown[i] = 0; + } + } + if (!showingTooltip) { + Game.tooltip.hide(); + } + } } /** @@ -45,19 +53,19 @@ export function CheckWrinklerTooltip() { * As wrinklers are not appended to the DOM we us a different system than for other tooltips */ export function UpdateWrinklerTooltip() { - if (CMOptions.TooltipWrink === 1 && l('CMTooltipWrinkler') !== null) { - let sucked = Game.wrinklers[TooltipWrinkler].sucked; - let toSuck = 1.1; - if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; - if (Game.wrinklers[TooltipWrinkler].type === 1) toSuck *= 3; // Shiny wrinklers - sucked *= toSuck; - if (Game.Has('Wrinklerspawn')) sucked *= 1.05; - if (SimObjects.Temple.minigameLoaded) { - const godLvl = Game.hasGod('scorn'); - if (godLvl === 1) sucked *= 1.15; - else if (godLvl === 2) sucked *= 1.1; - else if (godLvl === 3) sucked *= 1.05; - } - l('CMTooltipWrinkler').textContent = Beautify(sucked); - } + if (CMOptions.TooltipWrink === 1 && l('CMTooltipWrinkler') !== null) { + let sucked = Game.wrinklers[TooltipWrinkler].sucked; + let toSuck = 1.1; + if (Game.Has('Sacrilegious corruption')) toSuck *= 1.05; + if (Game.wrinklers[TooltipWrinkler].type === 1) toSuck *= 3; // Shiny wrinklers + sucked *= toSuck; + if (Game.Has('Wrinklerspawn')) sucked *= 1.05; + if (SimObjects.Temple.minigameLoaded) { + const godLvl = Game.hasGod('scorn'); + if (godLvl === 1) sucked *= 1.15; + else if (godLvl === 2) sucked *= 1.1; + else if (godLvl === 3) sucked *= 1.05; + } + l('CMTooltipWrinkler').textContent = Beautify(sucked); + } } diff --git a/src/Disp/VariablesAndData.js b/src/Disp/VariablesAndData.js index ddf8c89..1423ff9 100644 --- a/src/Disp/VariablesAndData.js +++ b/src/Disp/VariablesAndData.js @@ -23,7 +23,17 @@ export const ColorPurple = 'Purple'; export const ColorGray = 'Gray'; export const ColorPink = 'Pink'; export const ColorBrown = 'Brown'; -export const Colors = [ColorGray, ColorBlue, ColorGreen, ColorYellow, ColorOrange, ColorRed, ColorPurple, ColorPink, ColorBrown]; +export const Colors = [ + ColorGray, + ColorBlue, + ColorGreen, + ColorYellow, + ColorOrange, + ColorRed, + ColorPurple, + ColorPink, + ColorBrown, +]; /** * This list is used to make some very basic tooltips. @@ -33,14 +43,42 @@ export const Colors = [ColorGray, ColorBlue, ColorGreen, ColorYellow, ColorOrang * @item {string} minWidth */ export const TooltipText = [ - ['GoldCookTooltipPlaceholder', 'Calculated with Golden Switch off', '200px'], - ['GoldCookDragonsFortuneTooltipPlaceholder', 'Calculated with Golden Switch off and at least one golden cookie on-screen', '240px'], - ['PrestMaxTooltipPlaceholder', 'The MAX prestige is calculated with the cookies gained from popping all wrinklers with Skruuia god in Diamond slot, selling all stock market goods, selling all buildings with Earth Shatterer and Reality Bending auras, and buying Chocolate egg', '320px'], - ['NextPrestTooltipPlaceholder', 'Calculated with cookies gained from wrinklers and Chocolate egg', '200px'], - ['HeavenChipMaxTooltipPlaceholder', 'The MAX heavenly chips is calculated with the cookies gained from popping all wrinklers with Skruuia god in Diamond slot, selling all stock market goods, selling all buildings with Earth Shatterer and Reality Bending auras, and buying Chocolate egg', '330px'], - ['ResetTooltipPlaceholder', 'The bonus income you would get from new prestige levels unlocked at 100% of its potential and from ascension achievements if you have the same buildings/upgrades after reset', '370px'], - ['ChoEggTooltipPlaceholder', 'The amount of cookies you would get from popping all wrinklers with Skruuia god in Diamond slot, selling all stock market goods, selling all buildings with Earth Shatterer and Reality Bending auras, and then buying Chocolate egg', '300px'], - ['ChainNextLevelPlaceholder', 'Cheated cookies might break this formula', '250px'], + ['GoldCookTooltipPlaceholder', 'Calculated with Golden Switch off', '200px'], + [ + 'GoldCookDragonsFortuneTooltipPlaceholder', + 'Calculated with Golden Switch off and at least one golden cookie on-screen', + '240px', + ], + [ + 'PrestMaxTooltipPlaceholder', + 'The MAX prestige is calculated with the cookies gained from popping all wrinklers with Skruuia god in Diamond slot, selling all stock market goods, selling all buildings with Earth Shatterer and Reality Bending auras, and buying Chocolate egg', + '320px', + ], + [ + 'NextPrestTooltipPlaceholder', + 'Calculated with cookies gained from wrinklers and Chocolate egg', + '200px', + ], + [ + 'HeavenChipMaxTooltipPlaceholder', + 'The MAX heavenly chips is calculated with the cookies gained from popping all wrinklers with Skruuia god in Diamond slot, selling all stock market goods, selling all buildings with Earth Shatterer and Reality Bending auras, and buying Chocolate egg', + '330px', + ], + [ + 'ResetTooltipPlaceholder', + 'The bonus income you would get from new prestige levels unlocked at 100% of its potential and from ascension achievements if you have the same buildings/upgrades after reset', + '370px', + ], + [ + 'ChoEggTooltipPlaceholder', + 'The amount of cookies you would get from popping all wrinklers with Skruuia god in Diamond slot, selling all stock market goods, selling all buildings with Earth Shatterer and Reality Bending auras, and then buying Chocolate egg', + '300px', + ], + [ + 'ChainNextLevelPlaceholder', + 'Cheated cookies might break this formula', + '250px', + ], ]; /** @@ -78,7 +116,12 @@ export const ClickTimes = [1, 5, 10, 15, 30]; * This array is used to give certain timers specific colours */ export const BuffColors = { - Frenzy: ColorYellow, 'Dragon Harvest': ColorBrown, 'Elder frenzy': ColorGreen, Clot: ColorRed, 'Click frenzy': ColorBlue, Dragonflight: ColorPink, + Frenzy: ColorYellow, + 'Dragon Harvest': ColorBrown, + 'Elder frenzy': ColorGreen, + Clot: ColorRed, + 'Click frenzy': ColorBlue, + Dragonflight: ColorPink, }; /** diff --git a/src/InitSaveLoad/init.js b/src/InitSaveLoad/init.js index e70ae84..3a8fa49 100644 --- a/src/InitSaveLoad/init.js +++ b/src/InitSaveLoad/init.js @@ -6,21 +6,23 @@ import CMLoop from '../Main/Loop'; import { isInitializing } from './Variables'; /** - * This creates a init function for the CM object. Per Game code/comments: - * "this function is called as soon as the mod is registered - * declare hooks here" - * It starts the further initialization of CookieMonster and registers hooks - */ + * This creates a init function for the CM object. Per Game code/comments: + * "this function is called as soon as the mod is registered + * declare hooks here" + * It starts the further initialization of CookieMonster and registers hooks + */ export default function init() { - isInitializing = true; - let proceed = true; - if (Game.version !== Number(VersionMajor)) { - proceed = confirm(`Cookie Monster version ${VersionMajor}.${VersionMinor} is meant for Game version ${VersionMajor}. Loading a different version may cause errors. Do you still want to load Cookie Monster?`); - } - if (proceed) { - InitializeCookieMonster(); - Game.registerHook('draw', Draw); - Game.registerHook('logic', CMLoop); - isInitializing = false; - } + isInitializing = true; + let proceed = true; + if (Game.version !== Number(VersionMajor)) { + proceed = confirm( + `Cookie Monster version ${VersionMajor}.${VersionMinor} is meant for Game version ${VersionMajor}. Loading a different version may cause errors. Do you still want to load Cookie Monster?`, + ); + } + if (proceed) { + InitializeCookieMonster(); + Game.registerHook('draw', Draw); + Game.registerHook('logic', CMLoop); + isInitializing = false; + } } diff --git a/src/InitSaveLoad/load.js b/src/InitSaveLoad/load.js index 4fc4d5a..6942eb8 100644 --- a/src/InitSaveLoad/load.js +++ b/src/InitSaveLoad/load.js @@ -7,11 +7,21 @@ import InitData from '../Sim/InitializeData/InitData'; * "do stuff with the string data you saved previously" */ export default function load(str) { - const save = JSON.parse(str); - InitData(); - LoadConfig(save.settings); - if (save.version !== `${VersionMajor}.${VersionMinor}`) { - if (Game.prefs.popups) Game.Popup('A new version of Cookie Monster has been loaded, check out the release notes in the info tab!'); - else Game.Notify('A new version of Cookie Monster has been loaded, check out the release notes in the info tab!', '', '', 0, 1); - } + const save = JSON.parse(str); + InitData(); + LoadConfig(save.settings); + if (save.version !== `${VersionMajor}.${VersionMinor}`) { + if (Game.prefs.popups) + Game.Popup( + 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!', + ); + else + Game.Notify( + 'A new version of Cookie Monster has been loaded, check out the release notes in the info tab!', + '', + '', + 0, + 1, + ); + } } diff --git a/src/InitSaveLoad/save.js b/src/InitSaveLoad/save.js index a42befa..7f2e523 100644 --- a/src/InitSaveLoad/save.js +++ b/src/InitSaveLoad/save.js @@ -7,8 +7,8 @@ import { VersionMajor, VersionMinor } from '../Data/Moddata'; * return 'a string to be saved';" */ export default function save() { - return JSON.stringify({ - settings: CMOptions, - version: `${VersionMajor}.${VersionMinor}`, - }); + return JSON.stringify({ + settings: CMOptions, + version: `${VersionMajor}.${VersionMinor}`, + }); } diff --git a/src/Main/CheckStates/Garden.js b/src/Main/CheckStates/Garden.js index 5675113..808f806 100644 --- a/src/Main/CheckStates/Garden.js +++ b/src/Main/CheckStates/Garden.js @@ -7,11 +7,14 @@ import { LastGardenNextStep } from '../VariablesAndData'; * This function checks if a garden tick has happened */ export default function CheckGardenTick() { - if (Game.Objects.Farm.minigameLoaded && LastGardenNextStep !== Game.Objects.Farm.minigame.nextStep) { - if (LastGardenNextStep !== 0 && LastGardenNextStep < Date.now()) { - Flash(3, 'GardFlash'); - PlaySound(CMOptions.GardSoundURL, 'GardSound', 'GardVolume'); - } - LastGardenNextStep = Game.Objects.Farm.minigame.nextStep; - } + if ( + Game.Objects.Farm.minigameLoaded && + LastGardenNextStep !== Game.Objects.Farm.minigame.nextStep + ) { + if (LastGardenNextStep !== 0 && LastGardenNextStep < Date.now()) { + Flash(3, 'GardFlash'); + PlaySound(CMOptions.GardSoundURL, 'GardSound', 'GardVolume'); + } + LastGardenNextStep = Game.Objects.Farm.minigame.nextStep; + } } diff --git a/src/Main/CheckStates/GoldenCookie.js b/src/Main/CheckStates/GoldenCookie.js index 0da1e54..18d1727 100644 --- a/src/Main/CheckStates/GoldenCookie.js +++ b/src/Main/CheckStates/GoldenCookie.js @@ -1,5 +1,8 @@ /* eslint-disable no-unused-vars */ -import { CacheSpawnedGoldenShimmer, CacheGoldenShimmersByID } from '../../Cache/VariablesAndData'; +import { + CacheSpawnedGoldenShimmer, + CacheGoldenShimmersByID, +} from '../../Cache/VariablesAndData'; import { CMOptions } from '../../Config/VariablesAndData'; import CreateGCTimer from '../../Disp/GoldenCookieTimers/GoldenCookieTimers'; import Flash from '../../Disp/Notifications/Flash'; @@ -7,7 +10,11 @@ import Notification from '../../Disp/Notifications/Notification'; import PlaySound from '../../Disp/Notifications/Sound'; import { UpdateFavicon } from '../../Disp/TabTitle/FavIcon'; import { GCTimers } from '../../Disp/VariablesAndData'; -import { CurrSpawnedGoldenCookieState, LastGoldenCookieState, LastSpawnedGoldenCookieState } from '../VariablesAndData'; +import { + CurrSpawnedGoldenCookieState, + LastGoldenCookieState, + LastSpawnedGoldenCookieState, +} from '../VariablesAndData'; /** * Auxilirary function that finds all currently spawned shimmers. @@ -15,15 +22,15 @@ import { CurrSpawnedGoldenCookieState, LastGoldenCookieState, LastSpawnedGoldenC * It is called by CM.CM.Main.CheckGoldenCookie */ function FindShimmer() { - CurrSpawnedGoldenCookieState = 0; - CacheGoldenShimmersByID = {}; - for (const i of Object.keys(Game.shimmers)) { - CacheGoldenShimmersByID[Game.shimmers[i].id] = Game.shimmers[i]; - if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'golden') { - CacheSpawnedGoldenShimmer = Game.shimmers[i]; - CurrSpawnedGoldenCookieState += 1; - } - } + CurrSpawnedGoldenCookieState = 0; + CacheGoldenShimmersByID = {}; + for (const i of Object.keys(Game.shimmers)) { + CacheGoldenShimmersByID[Game.shimmers[i].id] = Game.shimmers[i]; + if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'golden') { + CacheSpawnedGoldenShimmer = Game.shimmers[i]; + CurrSpawnedGoldenCookieState += 1; + } + } } /** @@ -31,36 +38,43 @@ function FindShimmer() { * It is called by CM.Main.Loop */ export default function CheckGoldenCookie() { - FindShimmer(); - for (const i of Object.keys(GCTimers)) { - if (typeof CacheGoldenShimmersByID[i] === 'undefined') { - GCTimers[i].parentNode.removeChild(GCTimers[i]); - delete GCTimers[i]; - } - } - if (LastGoldenCookieState !== Game.shimmerTypes.golden.n) { - LastGoldenCookieState = Game.shimmerTypes.golden.n; - if (LastGoldenCookieState) { - if (LastSpawnedGoldenCookieState < CurrSpawnedGoldenCookieState) { - Flash(3, 'GCFlash'); - PlaySound(CMOptions.GCSoundURL, 'GCSound', 'GCVolume'); - Notification('GCNotification', 'Golden Cookie Spawned', 'A Golden Cookie has spawned. Click it now!'); - } + FindShimmer(); + for (const i of Object.keys(GCTimers)) { + if (typeof CacheGoldenShimmersByID[i] === 'undefined') { + GCTimers[i].parentNode.removeChild(GCTimers[i]); + delete GCTimers[i]; + } + } + if (LastGoldenCookieState !== Game.shimmerTypes.golden.n) { + LastGoldenCookieState = Game.shimmerTypes.golden.n; + if (LastGoldenCookieState) { + if (LastSpawnedGoldenCookieState < CurrSpawnedGoldenCookieState) { + Flash(3, 'GCFlash'); + PlaySound(CMOptions.GCSoundURL, 'GCSound', 'GCVolume'); + Notification( + 'GCNotification', + 'Golden Cookie Spawned', + 'A Golden Cookie has spawned. Click it now!', + ); + } - for (const i of Object.keys(Game.shimmers)) { - if (typeof GCTimers[Game.shimmers[i].id] === 'undefined') { - CreateGCTimer(Game.shimmers[i]); - } - } - } - UpdateFavicon(); - LastSpawnedGoldenCookieState = CurrSpawnedGoldenCookieState; - if (CurrSpawnedGoldenCookieState === 0) CacheSpawnedGoldenShimmer = 0; - } else if (CMOptions.GCTimer === 1 && LastGoldenCookieState) { - for (const i of Object.keys(GCTimers)) { - GCTimers[i].style.opacity = CacheGoldenShimmersByID[i].l.style.opacity; - GCTimers[i].style.transform = CacheGoldenShimmersByID[i].l.style.transform; - GCTimers[i].textContent = Math.ceil(CacheGoldenShimmersByID[i].life / Game.fps); - } - } + for (const i of Object.keys(Game.shimmers)) { + if (typeof GCTimers[Game.shimmers[i].id] === 'undefined') { + CreateGCTimer(Game.shimmers[i]); + } + } + } + UpdateFavicon(); + LastSpawnedGoldenCookieState = CurrSpawnedGoldenCookieState; + if (CurrSpawnedGoldenCookieState === 0) CacheSpawnedGoldenShimmer = 0; + } else if (CMOptions.GCTimer === 1 && LastGoldenCookieState) { + for (const i of Object.keys(GCTimers)) { + GCTimers[i].style.opacity = CacheGoldenShimmersByID[i].l.style.opacity; + GCTimers[i].style.transform = + CacheGoldenShimmersByID[i].l.style.transform; + GCTimers[i].textContent = Math.ceil( + CacheGoldenShimmersByID[i].life / Game.fps, + ); + } + } } diff --git a/src/Main/CheckStates/Grimoire.js b/src/Main/CheckStates/Grimoire.js index c6669e2..3835b72 100644 --- a/src/Main/CheckStates/Grimoire.js +++ b/src/Main/CheckStates/Grimoire.js @@ -9,14 +9,21 @@ import { LastMagicBarFull } from '../VariablesAndData'; * It is called by CM.Main.Loop */ export default function CheckMagicMeter() { - if (Game.Objects['Wizard tower'].minigameLoaded && CMOptions.GrimoireBar === 1) { - const minigame = Game.Objects['Wizard tower'].minigame; - if (minigame.magic < minigame.magicM) LastMagicBarFull = false; - else if (!LastMagicBarFull) { - LastMagicBarFull = true; - Flash(3, 'MagicFlash'); - PlaySound(CMOptions.MagicSoundURL, 'MagicSound', 'MagicVolume'); - Notification('MagicNotification', 'Magic Meter full', 'Your Magic Meter is full. Cast a spell!'); - } - } + if ( + Game.Objects['Wizard tower'].minigameLoaded && + CMOptions.GrimoireBar === 1 + ) { + const minigame = Game.Objects['Wizard tower'].minigame; + if (minigame.magic < minigame.magicM) LastMagicBarFull = false; + else if (!LastMagicBarFull) { + LastMagicBarFull = true; + Flash(3, 'MagicFlash'); + PlaySound(CMOptions.MagicSoundURL, 'MagicSound', 'MagicVolume'); + Notification( + 'MagicNotification', + 'Magic Meter full', + 'Your Magic Meter is full. Cast a spell!', + ); + } + } } diff --git a/src/Main/CheckStates/Season.js b/src/Main/CheckStates/Season.js index c9023d5..958a0b4 100644 --- a/src/Main/CheckStates/Season.js +++ b/src/Main/CheckStates/Season.js @@ -11,16 +11,20 @@ import { LastSeasonPopupState } from '../VariablesAndData'; * It is called by CM.Main.Loop */ export default function CheckSeasonPopup() { - if (LastSeasonPopupState !== Game.shimmerTypes.reindeer.spawned) { - LastSeasonPopupState = Game.shimmerTypes.reindeer.spawned; - for (const i of Object.keys(Game.shimmers)) { - if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'reindeer') { - CacheSeasonPopShimmer = Game.shimmers[i]; - break; - } - } - Flash(3, 'SeaFlash'); - PlaySound(CMOptions.SeaSoundURL, 'SeaSound', 'SeaVolume'); - Notification('SeaNotification', 'Reindeer sighted!', 'A Reindeer has spawned. Click it now!'); - } + if (LastSeasonPopupState !== Game.shimmerTypes.reindeer.spawned) { + LastSeasonPopupState = Game.shimmerTypes.reindeer.spawned; + for (const i of Object.keys(Game.shimmers)) { + if (Game.shimmers[i].spawnLead && Game.shimmers[i].type === 'reindeer') { + CacheSeasonPopShimmer = Game.shimmers[i]; + break; + } + } + Flash(3, 'SeaFlash'); + PlaySound(CMOptions.SeaSoundURL, 'SeaSound', 'SeaVolume'); + Notification( + 'SeaNotification', + 'Reindeer sighted!', + 'A Reindeer has spawned. Click it now!', + ); + } } diff --git a/src/Main/CheckStates/Ticker.js b/src/Main/CheckStates/Ticker.js index 03b0899..f515d67 100644 --- a/src/Main/CheckStates/Ticker.js +++ b/src/Main/CheckStates/Ticker.js @@ -8,12 +8,20 @@ import { LastTickerFortuneState } from '../VariablesAndData'; * It is called by CM.Main.Loop */ export default function CheckTickerFortune() { - if (LastTickerFortuneState !== (Game.TickerEffect && Game.TickerEffect.type === 'fortune')) { - LastTickerFortuneState = (Game.TickerEffect && Game.TickerEffect.type === 'fortune'); - if (LastTickerFortuneState) { - Flash(3, 'FortuneFlash'); - PlaySound(CM.Options.FortuneSoundURL, 'FortuneSound', 'FortuneVolume'); - Notification('FortuneNotification', 'Fortune Cookie found', 'A Fortune Cookie has appeared on the Ticker.'); - } - } + if ( + LastTickerFortuneState !== + (Game.TickerEffect && Game.TickerEffect.type === 'fortune') + ) { + LastTickerFortuneState = + Game.TickerEffect && Game.TickerEffect.type === 'fortune'; + if (LastTickerFortuneState) { + Flash(3, 'FortuneFlash'); + PlaySound(CM.Options.FortuneSoundURL, 'FortuneSound', 'FortuneVolume'); + Notification( + 'FortuneNotification', + 'Fortune Cookie found', + 'A Fortune Cookie has appeared on the Ticker.', + ); + } + } } diff --git a/src/Main/CheckStates/Wrinkler.js b/src/Main/CheckStates/Wrinkler.js index 3712cbd..6c1cf1b 100644 --- a/src/Main/CheckStates/Wrinkler.js +++ b/src/Main/CheckStates/Wrinkler.js @@ -9,30 +9,55 @@ import { LastWrinklerCount } from '../VariablesAndData'; * It is called by CM.Main.Loop */ export default function CheckWrinklerCount() { - if (Game.elderWrath > 0) { - let CurrentWrinklers = 0; - for (const i in Game.wrinklers) { - if (Game.wrinklers[i].phase === 2) CurrentWrinklers++; - } - if (CurrentWrinklers > LastWrinklerCount) { - LastWrinklerCount = CurrentWrinklers; - if (CurrentWrinklers === Game.getWrinklersMax() && CMOptions.WrinklerMaxFlash) { - Flash(3, 'WrinklerMaxFlash'); - } else { - Flash(3, 'WrinklerFlash'); - } - if (CurrentWrinklers === Game.getWrinklersMax() && CMOptions.WrinklerMaxSound) { - PlaySound(CMOptions.WrinklerMaxSoundURL, 'WrinklerMaxSound', 'WrinklerMaxVolume'); - } else { - PlaySound(CMOptions.WrinklerSoundURL, 'WrinklerSound', 'WrinklerVolume'); - } - if (CurrentWrinklers === Game.getWrinklersMax() && CMOptions.WrinklerMaxNotification) { - Notification('WrinklerMaxNotification', 'Maximum Wrinklers Reached', 'You have reached your maximum ammount of wrinklers'); - } else { - Notification('WrinklerNotification', 'A Wrinkler appeared', 'A new wrinkler has appeared'); - } - } else { - LastWrinklerCount = CurrentWrinklers; - } - } + if (Game.elderWrath > 0) { + let CurrentWrinklers = 0; + for (const i in Game.wrinklers) { + if (Game.wrinklers[i].phase === 2) CurrentWrinklers++; + } + if (CurrentWrinklers > LastWrinklerCount) { + LastWrinklerCount = CurrentWrinklers; + if ( + CurrentWrinklers === Game.getWrinklersMax() && + CMOptions.WrinklerMaxFlash + ) { + Flash(3, 'WrinklerMaxFlash'); + } else { + Flash(3, 'WrinklerFlash'); + } + if ( + CurrentWrinklers === Game.getWrinklersMax() && + CMOptions.WrinklerMaxSound + ) { + PlaySound( + CMOptions.WrinklerMaxSoundURL, + 'WrinklerMaxSound', + 'WrinklerMaxVolume', + ); + } else { + PlaySound( + CMOptions.WrinklerSoundURL, + 'WrinklerSound', + 'WrinklerVolume', + ); + } + if ( + CurrentWrinklers === Game.getWrinklersMax() && + CMOptions.WrinklerMaxNotification + ) { + Notification( + 'WrinklerMaxNotification', + 'Maximum Wrinklers Reached', + 'You have reached your maximum ammount of wrinklers', + ); + } else { + Notification( + 'WrinklerNotification', + 'A Wrinkler appeared', + 'A new wrinkler has appeared', + ); + } + } else { + LastWrinklerCount = CurrentWrinklers; + } + } } diff --git a/src/Main/Initialization.js b/src/Main/Initialization.js index 0636f3b..71227fd 100644 --- a/src/Main/Initialization.js +++ b/src/Main/Initialization.js @@ -24,39 +24,53 @@ import AddWrinklerAreaDetect from './WrinklerArea/AddDetectArea'; * Initialization loop of Cookie Monster */ export default function InitializeCookieMonster() { - InitData(); - CacheStatsCookies(); - InitCache(); + InitData(); + CacheStatsCookies(); + InitCache(); - // Stored to check if we need to re-initiliaze data - LastModCount = Object.keys(Game.mods).length; + // Stored to check if we need to re-initiliaze data + LastModCount = Object.keys(Game.mods).length; - // Creating visual elements - CreateCssArea(); - CreateBotBar(); - CreateTimerBar(); - CreateUpgradeBar(); - CreateWhiteScreen(); - CreateFavicon(); - for (const i of Object.keys(TooltipText)) { - CreateSimpleTooltip(TooltipText[i][0], TooltipText[i][1], TooltipText[i][2]); - } - CreateWrinklerButtons(); - UpdateBuildingUpgradeStyle(); + // Creating visual elements + CreateCssArea(); + CreateBotBar(); + CreateTimerBar(); + CreateUpgradeBar(); + CreateWhiteScreen(); + CreateFavicon(); + for (const i of Object.keys(TooltipText)) { + CreateSimpleTooltip( + TooltipText[i][0], + TooltipText[i][1], + TooltipText[i][2], + ); + } + CreateWrinklerButtons(); + UpdateBuildingUpgradeStyle(); - ReplaceTooltips(); - AddWrinklerAreaDetect(); + ReplaceTooltips(); + AddWrinklerAreaDetect(); - // Replace native functions - ReplaceNative(); - ReplaceNativeGrimoire(); - Game.CalculateGains(); + // Replace native functions + ReplaceNative(); + ReplaceNativeGrimoire(); + Game.CalculateGains(); - LoadConfig(); // Must be after all things are created! - CMLastAscendState = Game.OnAscend; + LoadConfig(); // Must be after all things are created! + CMLastAscendState = Game.OnAscend; - if (Game.prefs.popups) Game.Popup(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`); - else Game.Notify(`Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`, '', '', 1, 1); + if (Game.prefs.popups) + Game.Popup( + `Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`, + ); + else + Game.Notify( + `Cookie Monster version ${VersionMajor}.${VersionMinor} loaded!`, + '', + '', + 1, + 1, + ); - Game.Win('Third-party'); + Game.Win('Third-party'); } diff --git a/src/Main/Loop.js b/src/Main/Loop.js index f731a86..1718873 100644 --- a/src/Main/Loop.js +++ b/src/Main/Loop.js @@ -3,13 +3,20 @@ import LoopCache from '../Cache/CacheLoop'; import CacheNoGoldSwitchCPS from '../Cache/CPS/NoGoldSwitchCPS'; import CacheSellAllForChoEgg from '../Cache/CPS/SellChoEgg'; import CacheDragonCost from '../Cache/Dragon/Dragon'; -import { CacheBuildingsPrices, CacheIncome } from '../Cache/PriceAndIncome/PriceAndIncome'; +import { + CacheBuildingsPrices, + CacheIncome, +} from '../Cache/PriceAndIncome/PriceAndIncome'; import { CacheChain } from '../Cache/Stats/ChainCookies'; import CacheAllMissingUpgrades from '../Cache/Stats/MissingUpgrades'; import CacheSeasonSpec from '../Cache/Stats/Reindeer'; -import { CacheGoldenAndWrathCookiesMults, CacheStatsCookies } from '../Cache/Stats/Stats'; import { - CacheDoRemakeBuildPrices, CacheHadBuildAura, + CacheGoldenAndWrathCookiesMults, + CacheStatsCookies, +} from '../Cache/Stats/Stats'; +import { + CacheDoRemakeBuildPrices, + CacheHadBuildAura, } from '../Cache/VariablesAndData'; import UpdateAscendState from '../Disp/HelperFunctions/UpdateAscendState'; import { LastAscendState } from '../Disp/VariablesAndData'; @@ -28,58 +35,58 @@ import { LastModCount } from './VariablesAndData'; * CM.init registers it to the "logic" hook provided by the modding api */ export default function CMLoop() { - if (LastAscendState !== Game.OnAscend) { - LastAscendState = Game.OnAscend; - UpdateAscendState(); - } - if (!Game.OnAscend && Game.AscendTimer === 0) { - // Check if any other mods have been loaded - if (LastModCount !== Object.keys(Game.mods).length) { - InitData(); - InitCache(); - LastModCount = Object.keys(Game.mods).length; - } + if (LastAscendState !== Game.OnAscend) { + LastAscendState = Game.OnAscend; + UpdateAscendState(); + } + if (!Game.OnAscend && Game.AscendTimer === 0) { + // Check if any other mods have been loaded + if (LastModCount !== Object.keys(Game.mods).length) { + InitData(); + InitCache(); + LastModCount = Object.keys(Game.mods).length; + } - // CM.Sim.DoSims is set whenever CPS has changed - if (SimDoSims) { - CacheIncome(); + // CM.Sim.DoSims is set whenever CPS has changed + if (SimDoSims) { + CacheIncome(); - CacheNoGoldSwitchCPS(); // Needed first - CacheGoldenAndWrathCookiesMults(); - CacheStatsCookies(); - CacheAllMissingUpgrades(); - CacheChain(); - CacheDragonCost(); + CacheNoGoldSwitchCPS(); // Needed first + CacheGoldenAndWrathCookiesMults(); + CacheStatsCookies(); + CacheAllMissingUpgrades(); + CacheChain(); + CacheDragonCost(); - CacheSeasonSpec(); - CacheSellAllForChoEgg(); + CacheSeasonSpec(); + CacheSellAllForChoEgg(); - SimDoSims = 0; - } + SimDoSims = 0; + } - // Check for aura change to recalculate buildings prices - const hasBuildAura = Game.auraMult('Fierce Hoarder') > 0; - if (!CacheHadBuildAura && hasBuildAura) { - CacheHadBuildAura = true; - CacheDoRemakeBuildPrices = 1; - } else if (CacheHadBuildAura && !hasBuildAura) { - CacheHadBuildAura = false; - CacheDoRemakeBuildPrices = 1; - } + // Check for aura change to recalculate buildings prices + const hasBuildAura = Game.auraMult('Fierce Hoarder') > 0; + if (!CacheHadBuildAura && hasBuildAura) { + CacheHadBuildAura = true; + CacheDoRemakeBuildPrices = 1; + } else if (CacheHadBuildAura && !hasBuildAura) { + CacheHadBuildAura = false; + CacheDoRemakeBuildPrices = 1; + } - if (CacheDoRemakeBuildPrices) { - CacheBuildingsPrices(); - CacheDoRemakeBuildPrices = 0; - } + if (CacheDoRemakeBuildPrices) { + CacheBuildingsPrices(); + CacheDoRemakeBuildPrices = 0; + } - LoopCache(); + LoopCache(); - // Check all changing minigames and game-states - CheckGoldenCookie(); - CheckTickerFortune(); - CheckSeasonPopup(); - CheckGardenTick(); - CheckMagicMeter(); - CheckWrinklerCount(); - } + // Check all changing minigames and game-states + CheckGoldenCookie(); + CheckTickerFortune(); + CheckSeasonPopup(); + CheckGardenTick(); + CheckMagicMeter(); + CheckWrinklerCount(); + } } diff --git a/src/Main/ReplaceGameElements/NativeGrimoire.js b/src/Main/ReplaceGameElements/NativeGrimoire.js index 298c55d..1f5a9f4 100644 --- a/src/Main/ReplaceGameElements/NativeGrimoire.js +++ b/src/Main/ReplaceGameElements/NativeGrimoire.js @@ -4,7 +4,11 @@ import { FormatTime } from '../../Disp/BeautifyAndFormatting/BeautifyFormatting' import CalculateGrimoireRefillTime from '../../Disp/HelperFunctions/CalculateGrimoireRefillTime'; import { - BackupGrimoireDraw, BackupGrimoireLaunch, BackupGrimoireLaunchMod, HasReplaceNativeGrimoireDraw, HasReplaceNativeGrimoireLaunch, + BackupGrimoireDraw, + BackupGrimoireLaunch, + BackupGrimoireLaunchMod, + HasReplaceNativeGrimoireDraw, + HasReplaceNativeGrimoireLaunch, } from '../VariablesAndData'; import ReplaceTooltipGrimoire from './TooltipGrimoire'; @@ -12,42 +16,59 @@ import ReplaceTooltipGrimoire from './TooltipGrimoire'; * This function fixes replaces the .draw function of the Grimoire */ function ReplaceNativeGrimoireDraw() { - if (!HasReplaceNativeGrimoireDraw && Game.Objects['Wizard tower'].minigameLoaded) { - const minigame = Game.Objects['Wizard tower'].minigame; - BackupGrimoireDraw = minigame.draw; - Game.Objects['Wizard tower'].minigame.draw = function () { - BackupGrimoireDraw(); - if (CMOptions.GrimoireBar === 1 && minigame.magic < minigame.magicM) { - minigame.magicBarTextL.innerHTML += ` (${FormatTime(CalculateGrimoireRefillTime(minigame.magic, minigame.magicM, minigame.magicM))})`; - } - }; - HasReplaceNativeGrimoireDraw = true; - } + if ( + !HasReplaceNativeGrimoireDraw && + Game.Objects['Wizard tower'].minigameLoaded + ) { + const minigame = Game.Objects['Wizard tower'].minigame; + BackupGrimoireDraw = minigame.draw; + Game.Objects['Wizard tower'].minigame.draw = function () { + BackupGrimoireDraw(); + if (CMOptions.GrimoireBar === 1 && minigame.magic < minigame.magicM) { + minigame.magicBarTextL.innerHTML += ` (${FormatTime( + CalculateGrimoireRefillTime( + minigame.magic, + minigame.magicM, + minigame.magicM, + ), + )})`; + } + }; + HasReplaceNativeGrimoireDraw = true; + } } /** * This function fixes replaces the .launch function of the Grimoire */ function ReplaceNativeGrimoireLaunch() { - if (!HasReplaceNativeGrimoireLaunch && Game.Objects['Wizard tower'].minigameLoaded) { - const minigame = Game.Objects['Wizard tower'].minigame; - BackupGrimoireLaunch = minigame.launch; - BackupGrimoireLaunchMod = new Function(`return ${minigame.launch.toString().split('=this').join('= Game.Objects[\'Wizard tower\'].minigame')}`); - Game.Objects['Wizard tower'].minigame.launch = function () { - BackupGrimoireLaunchMod(); - ReplaceTooltipGrimoire(); - HasReplaceNativeGrimoireDraw = false; - ReplaceNativeGrimoireDraw(); + if ( + !HasReplaceNativeGrimoireLaunch && + Game.Objects['Wizard tower'].minigameLoaded + ) { + const minigame = Game.Objects['Wizard tower'].minigame; + BackupGrimoireLaunch = minigame.launch; + BackupGrimoireLaunchMod = new Function( + `return ${minigame.launch + .toString() + .split('=this') + .join("= Game.Objects['Wizard tower'].minigame")}`, + ); + Game.Objects['Wizard tower'].minigame.launch = function () { + BackupGrimoireLaunchMod(); + ReplaceTooltipGrimoire(); + HasReplaceNativeGrimoireDraw = false; + ReplaceNativeGrimoireDraw(); - HasReplaceNativeGrimoireLaunch = true; - }; - } + HasReplaceNativeGrimoireLaunch = true; + }; + } } /** * This function fixes replaces the Launch and Draw functions of the Grimoire */ export default function ReplaceNativeGrimoire() { - ReplaceNativeGrimoireLaunch(); - ReplaceNativeGrimoireDraw(); + ReplaceNativeGrimoireLaunch(); + ReplaceNativeGrimoireDraw(); } diff --git a/src/Main/ReplaceGameElements/TooltipGrimoire.js b/src/Main/ReplaceGameElements/TooltipGrimoire.js index 9f52f49..ac45ece 100644 --- a/src/Main/ReplaceGameElements/TooltipGrimoire.js +++ b/src/Main/ReplaceGameElements/TooltipGrimoire.js @@ -5,16 +5,22 @@ import { TooltipGrimoireBackup } from '../VariablesAndData'; * This function replaces the original .onmouseover functions of the Grimoire minigame */ export default function ReplaceTooltipGrimoire() { - if (Game.Objects['Wizard tower'].minigameLoaded) { - for (const i in Game.Objects['Wizard tower'].minigame.spellsById) { - if (l(`grimoireSpell${i}`).onmouseover !== null) { - TooltipGrimoireBackup[i] = l(`grimoireSpell${i}`).onmouseover; - l(`grimoireSpell${i}`).onmouseover = function () { - Game.tooltip.dynamic = 1; - Game.tooltip.draw(this, function () { return CreateTooltip('g', `${i}`); }, 'this'); - Game.tooltip.wobble(); - }; - } - } - } + if (Game.Objects['Wizard tower'].minigameLoaded) { + for (const i in Game.Objects['Wizard tower'].minigame.spellsById) { + if (l(`grimoireSpell${i}`).onmouseover !== null) { + TooltipGrimoireBackup[i] = l(`grimoireSpell${i}`).onmouseover; + l(`grimoireSpell${i}`).onmouseover = function () { + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + this, + function () { + return CreateTooltip('g', `${i}`); + }, + 'this', + ); + Game.tooltip.wobble(); + }; + } + } + } } diff --git a/src/Main/ReplaceGameElements/TooltipUpgrades.js b/src/Main/ReplaceGameElements/TooltipUpgrades.js index 99de0a1..c349dae 100644 --- a/src/Main/ReplaceGameElements/TooltipUpgrades.js +++ b/src/Main/ReplaceGameElements/TooltipUpgrades.js @@ -7,20 +7,24 @@ import { TooltipUpgradeBackup } from '../VariablesAndData'; * It is called by Game.RebuildUpgrades() through CM.Main.ReplaceNative() and is therefore not permanent like the other ReplaceTooltip functions */ export default function ReplaceTooltipUpgrade() { - TooltipUpgradeBackup = []; - for (const i of Object.keys(Game.UpgradesInStore)) { - if (l(`upgrade${i}`).onmouseover !== null) { - TooltipUpgradeBackup[i] = l(`upgrade${i}`).onmouseover; - l(`upgrade${i}`).onmouseover = function () { - if (!Game.mouseDown) { - Game.setOnCrate(this); - Game.tooltip.dynamic = 1; - Game.tooltip.draw(this, function () { - return CreateTooltip('u', `${i}`); - }, 'store'); - Game.tooltip.wobble(); - } - }; - } - } + TooltipUpgradeBackup = []; + for (const i of Object.keys(Game.UpgradesInStore)) { + if (l(`upgrade${i}`).onmouseover !== null) { + TooltipUpgradeBackup[i] = l(`upgrade${i}`).onmouseover; + l(`upgrade${i}`).onmouseover = function () { + if (!Game.mouseDown) { + Game.setOnCrate(this); + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + this, + function () { + return CreateTooltip('u', `${i}`); + }, + 'store', + ); + Game.tooltip.wobble(); + } + }; + } + } } diff --git a/src/Main/ReplaceGameElements/Tooltips.js b/src/Main/ReplaceGameElements/Tooltips.js index 64d9740..d9f764d 100644 --- a/src/Main/ReplaceGameElements/Tooltips.js +++ b/src/Main/ReplaceGameElements/Tooltips.js @@ -3,7 +3,9 @@ import { CreateTooltip } from '../../Disp/Tooltips/Tooltip'; import { - LoadMinigames, TooltipBuildBackup, TooltipLumpBackup, + LoadMinigames, + TooltipBuildBackup, + TooltipLumpBackup, } from '../VariablesAndData'; import ReplaceNativeGrimoire from './NativeGrimoire'; import ReplaceTooltipGrimoire from './TooltipGrimoire'; @@ -12,65 +14,93 @@ import ReplaceTooltipGrimoire from './TooltipGrimoire'; * This function replaces the original .onmouseover functions of buildings */ function ReplaceTooltipBuild() { - for (const i of Object.keys(Game.Objects)) { - const me = Game.Objects[i]; - if (l(`product${me.id}`).onmouseover !== null) { - TooltipBuildBackup[i] = l(`product${me.id}`).onmouseover; - l(`product${me.id}`).onmouseover = function () { - Game.tooltip.dynamic = 1; - Game.tooltip.draw(this, function () { return CreateTooltip('b', `${i}`); }, 'store'); - Game.tooltip.wobble(); - }; - } - } + for (const i of Object.keys(Game.Objects)) { + const me = Game.Objects[i]; + if (l(`product${me.id}`).onmouseover !== null) { + TooltipBuildBackup[i] = l(`product${me.id}`).onmouseover; + l(`product${me.id}`).onmouseover = function () { + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + this, + function () { + return CreateTooltip('b', `${i}`); + }, + 'store', + ); + Game.tooltip.wobble(); + }; + } + } } /** * This function replaces the original .onmouseover functions of sugar lumps */ function ReplaceTooltipLump() { - if (Game.canLumps()) { - TooltipLumpBackup = l('lumps').onmouseover; - l('lumps').onmouseover = function () { - Game.tooltip.dynamic = 1; - Game.tooltip.draw(this, function () { return CreateTooltip('s', 'Lump'); }, 'this'); - Game.tooltip.wobble(); - }; - } + if (Game.canLumps()) { + TooltipLumpBackup = l('lumps').onmouseover; + l('lumps').onmouseover = function () { + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + this, + function () { + return CreateTooltip('s', 'Lump'); + }, + 'this', + ); + Game.tooltip.wobble(); + }; + } } /** * This function replaces the original .onmouseover functions of all garden plants */ function ReplaceTooltipGarden() { - if (Game.Objects.Farm.minigameLoaded) { - l('gardenTool-1').onmouseover = function () { Game.tooltip.dynamic = 1; Game.tooltip.draw(this, function () { return CreateTooltip('ha', 'HarvestAllButton'); }, 'this'); Game.tooltip.wobble(); }; - Array.from(l('gardenPlot').children).forEach((child) => { - const coords = child.id.slice(-3); - child.onmouseover = function () { - Game.tooltip.dynamic = 1; - Game.tooltip.draw(this, function () { return CreateTooltip('p', [`${coords[0]}`, `${coords[2]}`]); }, 'this'); - Game.tooltip.wobble(); - }; - }); - } + if (Game.Objects.Farm.minigameLoaded) { + l('gardenTool-1').onmouseover = function () { + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + this, + function () { + return CreateTooltip('ha', 'HarvestAllButton'); + }, + 'this', + ); + Game.tooltip.wobble(); + }; + Array.from(l('gardenPlot').children).forEach((child) => { + const coords = child.id.slice(-3); + child.onmouseover = function () { + Game.tooltip.dynamic = 1; + Game.tooltip.draw( + this, + function () { + return CreateTooltip('p', [`${coords[0]}`, `${coords[2]}`]); + }, + 'this', + ); + Game.tooltip.wobble(); + }; + }); + } } /** * This function call all functions that replace Game-tooltips with Cookie Monster enhanced tooltips */ export default function ReplaceTooltips() { - ReplaceTooltipBuild(); - ReplaceTooltipLump(); + ReplaceTooltipBuild(); + ReplaceTooltipLump(); - // Replace Tooltips of Minigames. Nesting it in LoadMinigames makes sure to replace them even if - // they were not loaded initially - LoadMinigames = Game.LoadMinigames; - Game.LoadMinigames = function () { - LoadMinigames(); - ReplaceTooltipGarden(); - ReplaceTooltipGrimoire(); - ReplaceNativeGrimoire(); - }; - Game.LoadMinigames(); + // Replace Tooltips of Minigames. Nesting it in LoadMinigames makes sure to replace them even if + // they were not loaded initially + LoadMinigames = Game.LoadMinigames; + Game.LoadMinigames = function () { + LoadMinigames(); + ReplaceTooltipGarden(); + ReplaceTooltipGrimoire(); + ReplaceNativeGrimoire(); + }; + Game.LoadMinigames(); } diff --git a/src/Main/ReplaceGameFunctions/FixMouse.js b/src/Main/ReplaceGameFunctions/FixMouse.js index 938b095..acf9529 100644 --- a/src/Main/ReplaceGameFunctions/FixMouse.js +++ b/src/Main/ReplaceGameFunctions/FixMouse.js @@ -6,12 +6,12 @@ import { CMOptions } from '../../Config/VariablesAndData'; * before execution of their actual function */ export default function FixMouseY(target) { - if (CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 0) { - const timerBarHeight = parseInt(l('CMTimerBar').style.height, 10); - Game.mouseY -= timerBarHeight; - target(); - Game.mouseY += timerBarHeight; - } else { - target(); - } + if (CMOptions.TimerBar === 1 && CMOptions.TimerBarPos === 0) { + const timerBarHeight = parseInt(l('CMTimerBar').style.height, 10); + Game.mouseY -= timerBarHeight; + target(); + Game.mouseY += timerBarHeight; + } else { + target(); + } } diff --git a/src/Main/ReplaceGameFunctions/ReplaceNative.js b/src/Main/ReplaceGameFunctions/ReplaceNative.js index b8f158b..bed5ef1 100644 --- a/src/Main/ReplaceGameFunctions/ReplaceNative.js +++ b/src/Main/ReplaceGameFunctions/ReplaceNative.js @@ -1,14 +1,21 @@ /* eslint-disable no-unused-vars */ import jscolor from '@eastdesire/jscolor'; import { CMOptions } from '../../Config/VariablesAndData'; -import { Beautify as CMBeautify, FormatTime } from '../../Disp/BeautifyAndFormatting/BeautifyFormatting'; +import { + Beautify as CMBeautify, + FormatTime, +} from '../../Disp/BeautifyAndFormatting/BeautifyFormatting'; import { AddAuraInfo, AddDragonLevelUpTooltip } from '../../Disp/Dragon/Dragon'; import AddMenu from '../../Disp/MenuSections/AddMenus'; import UpdateTitle from '../../Disp/TabTitle/TabTitle'; import ReplaceAscendTooltip from '../../Disp/Tooltips/AscendButton'; import UpdateTooltipLocation from '../../Disp/Tooltips/PositionLocation'; import { CMSayTime, Title } from '../../Disp/VariablesAndData'; -import { SimDateAges, SimDateCentury, SimDoSims } from '../../Sim/VariablesAndData'; +import { + SimDateAges, + SimDateCentury, + SimDoSims, +} from '../../Sim/VariablesAndData'; import ReplaceTooltipUpgrade from '../ReplaceGameElements/TooltipUpgrades'; import { BackupFunctions } from '../VariablesAndData'; import FixMouseY from './FixMouse'; @@ -17,110 +24,133 @@ import FixMouseY from './FixMouse'; * This function replaces certain native (from the base-game) functions */ export default function ReplaceNative() { - // eslint-disable-next-line no-undef - BackupFunctions.Beautify = Beautify; - // eslint-disable-next-line no-undef - Beautify = CMBeautify; + // eslint-disable-next-line no-undef + BackupFunctions.Beautify = Beautify; + // eslint-disable-next-line no-undef + Beautify = CMBeautify; - BackupFunctions.CalculateGains = Game.CalculateGains; - Game.CalculateGains = function () { - BackupFunctions.CalculateGains(); - SimDoSims = 1; - SimDateAges = Date.now(); - SimDateCentury = Date.now(); - }; + BackupFunctions.CalculateGains = Game.CalculateGains; + Game.CalculateGains = function () { + BackupFunctions.CalculateGains(); + SimDoSims = 1; + SimDateAges = Date.now(); + SimDateCentury = Date.now(); + }; - BackupFunctions.tooltip = {}; - BackupFunctions.tooltip.draw = Game.tooltip.draw; - BackupFunctions.tooltip.drawMod = new Function(`return ${Game.tooltip.draw.toString().split('this').join('Game.tooltip')}`)(); - Game.tooltip.draw = function (from, text, origin) { - BackupFunctions.tooltip.drawMod(from, text, origin); - }; + BackupFunctions.tooltip = {}; + BackupFunctions.tooltip.draw = Game.tooltip.draw; + BackupFunctions.tooltip.drawMod = new Function( + `return ${Game.tooltip.draw.toString().split('this').join('Game.tooltip')}`, + )(); + Game.tooltip.draw = function (from, text, origin) { + BackupFunctions.tooltip.drawMod(from, text, origin); + }; - BackupFunctions.tooltip.update = Game.tooltip.update; - BackupFunctions.tooltip.updateMod = new Function(`return ${Game.tooltip.update.toString().split('this.').join('Game.tooltip.')}`)(); - Game.tooltip.update = function () { - BackupFunctions.tooltip.updateMod(); - UpdateTooltipLocation(); - }; + BackupFunctions.tooltip.update = Game.tooltip.update; + BackupFunctions.tooltip.updateMod = new Function( + `return ${Game.tooltip.update + .toString() + .split('this.') + .join('Game.tooltip.')}`, + )(); + Game.tooltip.update = function () { + BackupFunctions.tooltip.updateMod(); + UpdateTooltipLocation(); + }; - BackupFunctions.UpdateWrinklers = Game.UpdateWrinklers; - Game.UpdateWrinklers = function () { - FixMouseY(BackupFunctions.UpdateWrinklers); - }; + BackupFunctions.UpdateWrinklers = Game.UpdateWrinklers; + Game.UpdateWrinklers = function () { + FixMouseY(BackupFunctions.UpdateWrinklers); + }; - BackupFunctions.UpdateSpecial = Game.UpdateSpecial; - Game.UpdateSpecial = function () { - FixMouseY(BackupFunctions.UpdateSpecial); - }; + BackupFunctions.UpdateSpecial = Game.UpdateSpecial; + Game.UpdateSpecial = function () { + FixMouseY(BackupFunctions.UpdateSpecial); + }; - // Assumes newer browsers - l('bigCookie').removeEventListener('click', Game.ClickCookie, false); - l('bigCookie').addEventListener('click', function () { FixMouseY(Game.ClickCookie); }, false); + // Assumes newer browsers + l('bigCookie').removeEventListener('click', Game.ClickCookie, false); + l('bigCookie').addEventListener( + 'click', + function () { + FixMouseY(Game.ClickCookie); + }, + false, + ); - BackupFunctions.RebuildUpgrades = Game.RebuildUpgrades; - Game.RebuildUpgrades = function () { - BackupFunctions.RebuildUpgrades(); - ReplaceTooltipUpgrade(); - Game.CalculateGains(); - }; + BackupFunctions.RebuildUpgrades = Game.RebuildUpgrades; + Game.RebuildUpgrades = function () { + BackupFunctions.RebuildUpgrades(); + ReplaceTooltipUpgrade(); + Game.CalculateGains(); + }; - BackupFunctions.ClickProduct = Game.ClickProduct; - /** - * This function adds a check to the purchase of a building to allow BulkBuyBlock to work. - * If the options is 1 (on) bulkPrice is under cookies you can't buy the building. - */ - Game.ClickProduct = function (what) { - if (!CMOptions.BulkBuyBlock || (Game.ObjectsById[what].bulkPrice < Game.cookies || Game.buyMode === -1)) { - BackupFunctions.ClickProduct(what); - } - }; + BackupFunctions.ClickProduct = Game.ClickProduct; + /** + * This function adds a check to the purchase of a building to allow BulkBuyBlock to work. + * If the options is 1 (on) bulkPrice is under cookies you can't buy the building. + */ + Game.ClickProduct = function (what) { + if ( + !CMOptions.BulkBuyBlock || + Game.ObjectsById[what].bulkPrice < Game.cookies || + Game.buyMode === -1 + ) { + BackupFunctions.ClickProduct(what); + } + }; - BackupFunctions.DescribeDragonAura = Game.DescribeDragonAura; - /** - * This function adds the function CM.Disp.AddAuraInfo() to Game.DescribeDragonAura() - * This adds information about CPS differences and costs to the aura choosing interface - * @param {number} aura The number of the aura currently selected by the mouse/user - */ - Game.DescribeDragonAura = function (aura) { - BackupFunctions.DescribeDragonAura(aura); - AddAuraInfo(aura); - }; + BackupFunctions.DescribeDragonAura = Game.DescribeDragonAura; + /** + * This function adds the function CM.Disp.AddAuraInfo() to Game.DescribeDragonAura() + * This adds information about CPS differences and costs to the aura choosing interface + * @param {number} aura The number of the aura currently selected by the mouse/user + */ + Game.DescribeDragonAura = function (aura) { + BackupFunctions.DescribeDragonAura(aura); + AddAuraInfo(aura); + }; - BackupFunctions.ToggleSpecialMenu = Game.ToggleSpecialMenu; - /** - * This function adds the code to display the tooltips for the levelUp button of the dragon - */ - Game.ToggleSpecialMenu = function (on) { - BackupFunctions.ToggleSpecialMenu(on); - AddDragonLevelUpTooltip(); - }; + BackupFunctions.ToggleSpecialMenu = Game.ToggleSpecialMenu; + /** + * This function adds the code to display the tooltips for the levelUp button of the dragon + */ + Game.ToggleSpecialMenu = function (on) { + BackupFunctions.ToggleSpecialMenu(on); + AddDragonLevelUpTooltip(); + }; - BackupFunctions.UpdateMenu = Game.UpdateMenu; - Game.UpdateMenu = function () { - if (typeof jscolor.picker === 'undefined' || typeof jscolor.picker.owner === 'undefined') { - BackupFunctions.UpdateMenu(); - AddMenu(); - } - }; + BackupFunctions.UpdateMenu = Game.UpdateMenu; + Game.UpdateMenu = function () { + if ( + typeof jscolor.picker === 'undefined' || + typeof jscolor.picker.owner === 'undefined' + ) { + BackupFunctions.UpdateMenu(); + AddMenu(); + } + }; - BackupFunctions.sayTime = Game.sayTime; - CMSayTime = function (time, detail) { - if (Number.isNaN(time) || time <= 0) return BackupFunctions.sayTime(time, detail); - return FormatTime(time / Game.fps, 1); - }; + BackupFunctions.sayTime = Game.sayTime; + CMSayTime = function (time, detail) { + if (Number.isNaN(time) || time <= 0) + return BackupFunctions.sayTime(time, detail); + return FormatTime(time / Game.fps, 1); + }; - BackupFunctions.Logic = Game.Logic; - Game.Logic = function () { - BackupFunctions.Logic(); + BackupFunctions.Logic = Game.Logic; + Game.Logic = function () { + BackupFunctions.Logic(); - // Update tab title - let title = 'Cookie Clicker'; - if (Game.season === 'fools') title = 'Cookie Baker'; - Title = `${(Game.OnAscend ? 'Ascending! ' : '')}${CMBeautify(Game.cookies)} ${(Game.cookies === 1 ? 'cookie' : 'cookies')} - ${title}`; - UpdateTitle(); + // Update tab title + let title = 'Cookie Clicker'; + if (Game.season === 'fools') title = 'Cookie Baker'; + Title = `${Game.OnAscend ? 'Ascending! ' : ''}${CMBeautify(Game.cookies)} ${ + Game.cookies === 1 ? 'cookie' : 'cookies' + } - ${title}`; + UpdateTitle(); - // Since the Ascend Tooltip is not actually a tooltip we need to add our additional info here... - ReplaceAscendTooltip(); - }; + // Since the Ascend Tooltip is not actually a tooltip we need to add our additional info here... + ReplaceAscendTooltip(); + }; } diff --git a/src/Main/WrinklerArea/AddDetectArea.js b/src/Main/WrinklerArea/AddDetectArea.js index b075e16..c44f2ed 100644 --- a/src/Main/WrinklerArea/AddDetectArea.js +++ b/src/Main/WrinklerArea/AddDetectArea.js @@ -1,17 +1,22 @@ /* eslint-disable no-unused-vars */ -import { TooltipWrinklerArea, TooltipWrinklerBeingShown } from '../../Disp/VariablesAndData'; +import { + TooltipWrinklerArea, + TooltipWrinklerBeingShown, +} from '../../Disp/VariablesAndData'; /** * This function creates .onmouseover/out events that determine if the mouse is hovering-over a Wrinkler * As wrinklers are not appended to the DOM we us a different system than for other tooltips */ export default function AddWrinklerAreaDetect() { - l('backgroundLeftCanvas').onmouseover = function () { TooltipWrinklerArea = 1; }; - l('backgroundLeftCanvas').onmouseout = function () { - TooltipWrinklerArea = 0; - Game.tooltip.hide(); - for (const i of Object.keys(Game.wrinklers)) { - TooltipWrinklerBeingShown[i] = 0; - } - }; + l('backgroundLeftCanvas').onmouseover = function () { + TooltipWrinklerArea = 1; + }; + l('backgroundLeftCanvas').onmouseout = function () { + TooltipWrinklerArea = 0; + Game.tooltip.hide(); + for (const i of Object.keys(Game.wrinklers)) { + TooltipWrinklerBeingShown[i] = 0; + } + }; } diff --git a/src/Sim/Calculations/CalculateGains.js b/src/Sim/Calculations/CalculateGains.js index 8f5b264..70ed3fe 100644 --- a/src/Sim/Calculations/CalculateGains.js +++ b/src/Sim/Calculations/CalculateGains.js @@ -8,7 +8,16 @@ import SimHas from '../ReplacedGameFunctions/SimHas'; import SimHasGod from '../ReplacedGameFunctions/SimHasGod'; import SimWin from '../SimulationData/SimWin'; import { - SimAchievementsOwned, SimCookiesPs, SimCookiesPsRaw, SimDateAges, SimDateCentury, SimEffs, SimHeavenlyPower, SimObjects, SimPrestige, SimUpgrades, + SimAchievementsOwned, + SimCookiesPs, + SimCookiesPsRaw, + SimDateAges, + SimDateCentury, + SimEffs, + SimHeavenlyPower, + SimObjects, + SimPrestige, + SimUpgrades, } from '../VariablesAndData'; /** @@ -18,201 +27,232 @@ import { * @global {number} CM.Sim.cookiesPs The CPS of the current sim data */ export default function CalculateGains() { - SimCookiesPs = 0; - let mult = 1; - // Include minigame effects - const effs = {}; - for (const i of Object.keys(Game.Objects)) { - if (Game.Objects[i].minigameLoaded && Game.Objects[i].minigame.effs) { - const myEffs = Game.Objects[i].minigame.effs; - for (const ii in myEffs) { - if (effs[ii]) effs[ii] *= myEffs[ii]; - else effs[ii] = myEffs[ii]; - } - } - } - SimEffs = effs; + SimCookiesPs = 0; + let mult = 1; + // Include minigame effects + const effs = {}; + for (const i of Object.keys(Game.Objects)) { + if (Game.Objects[i].minigameLoaded && Game.Objects[i].minigame.effs) { + const myEffs = Game.Objects[i].minigame.effs; + for (const ii in myEffs) { + if (effs[ii]) effs[ii] *= myEffs[ii]; + else effs[ii] = myEffs[ii]; + } + } + } + SimEffs = effs; - if (Game.ascensionMode !== 1) mult += parseFloat(SimPrestige) * 0.01 * SimHeavenlyPower * SimGetHeavenlyMultiplier(); + if (Game.ascensionMode !== 1) + mult += + parseFloat(SimPrestige) * + 0.01 * + SimHeavenlyPower * + SimGetHeavenlyMultiplier(); - mult *= SimEff('cps'); + mult *= SimEff('cps'); - if (SimHas('Heralds') && Game.ascensionMode !== 1) mult *= 1 + 0.01 * Game.heralds; + if (SimHas('Heralds') && Game.ascensionMode !== 1) + mult *= 1 + 0.01 * Game.heralds; - for (const i of Object.keys(Game.cookieUpgrades)) { - const me = Game.cookieUpgrades[i]; - if (SimHas(me.name)) { - // Some upgrades have a functio as .power (notably the valentine cookies) - // CM.Sim.InitialBuildingData has changed to use CM.Sim.Has instead of Game.Has etc. - // Therefore this call is to the .power of the Sim.Object - if (typeof (me.power) === 'function') { - mult *= 1 + (SimUpgrades[me.name].power(SimUpgrades[me.name]) * 0.01); - } else mult *= 1 + (me.power * 0.01); - } - } + for (const i of Object.keys(Game.cookieUpgrades)) { + const me = Game.cookieUpgrades[i]; + if (SimHas(me.name)) { + // Some upgrades have a functio as .power (notably the valentine cookies) + // CM.Sim.InitialBuildingData has changed to use CM.Sim.Has instead of Game.Has etc. + // Therefore this call is to the .power of the Sim.Object + if (typeof me.power === 'function') { + mult *= 1 + SimUpgrades[me.name].power(SimUpgrades[me.name]) * 0.01; + } else mult *= 1 + me.power * 0.01; + } + } - if (SimHas('Specialized chocolate chips')) mult *= 1.01; - if (SimHas('Designer cocoa beans')) mult *= 1.02; - if (SimHas('Underworld ovens')) mult *= 1.03; - if (SimHas('Exotic nuts')) mult *= 1.04; - if (SimHas('Arcane sugar')) mult *= 1.05; + if (SimHas('Specialized chocolate chips')) mult *= 1.01; + if (SimHas('Designer cocoa beans')) mult *= 1.02; + if (SimHas('Underworld ovens')) mult *= 1.03; + if (SimHas('Exotic nuts')) mult *= 1.04; + if (SimHas('Arcane sugar')) mult *= 1.05; - if (SimHas('Increased merriness')) mult *= 1.15; - if (SimHas('Improved jolliness')) mult *= 1.15; - if (SimHas('A lump of coal')) mult *= 1.01; - if (SimHas('An itchy sweater')) mult *= 1.01; - if (SimHas('Santa\'s dominion')) mult *= 1.2; + if (SimHas('Increased merriness')) mult *= 1.15; + if (SimHas('Improved jolliness')) mult *= 1.15; + if (SimHas('A lump of coal')) mult *= 1.01; + if (SimHas('An itchy sweater')) mult *= 1.01; + if (SimHas("Santa's dominion")) mult *= 1.2; - if (SimHas('Fortune #100')) mult *= 1.01; - if (SimHas('Fortune #101')) mult *= 1.07; + if (SimHas('Fortune #100')) mult *= 1.01; + if (SimHas('Fortune #101')) mult *= 1.07; - if (SimHas('Dragon scale')) mult *= 1.03; + if (SimHas('Dragon scale')) mult *= 1.03; - // Check effect of chosen Gods - let buildMult = 1; - if (SimHasGod) { - let godLvl = SimHasGod('asceticism'); - if (godLvl === 1) mult *= 1.15; - else if (godLvl === 2) mult *= 1.1; - else if (godLvl === 3) mult *= 1.05; + // Check effect of chosen Gods + let buildMult = 1; + if (SimHasGod) { + let godLvl = SimHasGod('asceticism'); + if (godLvl === 1) mult *= 1.15; + else if (godLvl === 2) mult *= 1.1; + else if (godLvl === 3) mult *= 1.05; - godLvl = SimHasGod('ages'); - if (godLvl === 1) mult *= 1 + 0.15 * Math.sin((SimDateAges / 1000 / (60 * 60 * 3)) * Math.PI * 2); - else if (godLvl === 2) mult *= 1 + 0.15 * Math.sin((SimDateAges / 1000 / (60 * 60 * 12)) * Math.PI * 2); - else if (godLvl === 3) mult *= 1 + 0.15 * Math.sin((SimDateAges / 1000 / (60 * 60 * 24)) * Math.PI * 2); + godLvl = SimHasGod('ages'); + if (godLvl === 1) + mult *= + 1 + 0.15 * Math.sin((SimDateAges / 1000 / (60 * 60 * 3)) * Math.PI * 2); + else if (godLvl === 2) + mult *= + 1 + + 0.15 * Math.sin((SimDateAges / 1000 / (60 * 60 * 12)) * Math.PI * 2); + else if (godLvl === 3) + mult *= + 1 + + 0.15 * Math.sin((SimDateAges / 1000 / (60 * 60 * 24)) * Math.PI * 2); - godLvl = SimHasGod('decadence'); - if (godLvl === 1) buildMult *= 0.93; - else if (godLvl === 2) buildMult *= 0.95; - else if (godLvl === 3) buildMult *= 0.98; + godLvl = SimHasGod('decadence'); + if (godLvl === 1) buildMult *= 0.93; + else if (godLvl === 2) buildMult *= 0.95; + else if (godLvl === 3) buildMult *= 0.98; - godLvl = SimHasGod('industry'); - if (godLvl === 1) buildMult *= 1.1; - else if (godLvl === 2) buildMult *= 1.06; - else if (godLvl === 3) buildMult *= 1.03; + godLvl = SimHasGod('industry'); + if (godLvl === 1) buildMult *= 1.1; + else if (godLvl === 2) buildMult *= 1.06; + else if (godLvl === 3) buildMult *= 1.03; - godLvl = SimHasGod('labor'); - if (godLvl === 1) buildMult *= 0.97; - else if (godLvl === 2) buildMult *= 0.98; - else if (godLvl === 3) buildMult *= 0.99; - } + godLvl = SimHasGod('labor'); + if (godLvl === 1) buildMult *= 0.97; + else if (godLvl === 2) buildMult *= 0.98; + else if (godLvl === 3) buildMult *= 0.99; + } - if (SimHas('Santa\'s legacy')) mult *= 1 + (Game.santaLevel + 1) * 0.03; + if (SimHas("Santa's legacy")) mult *= 1 + (Game.santaLevel + 1) * 0.03; - const milkProgress = SimAchievementsOwned / 25; - let milkMult = 1; - if (SimHas('Santa\'s milk and cookies')) milkMult *= 1.05; - // if (CM.Sim.hasAura('Breath of Milk')) milkMult *= 1.05; - milkMult *= 1 + SimAuraMult('Breath of Milk') * 0.05; - if (SimHasGod) { - const godLvl = SimHasGod('mother'); - if (godLvl === 1) milkMult *= 1.1; - else if (godLvl === 2) milkMult *= 1.05; - else if (godLvl === 3) milkMult *= 1.03; - } - milkMult *= SimEff('milk'); + const milkProgress = SimAchievementsOwned / 25; + let milkMult = 1; + if (SimHas("Santa's milk and cookies")) milkMult *= 1.05; + // if (CM.Sim.hasAura('Breath of Milk')) milkMult *= 1.05; + milkMult *= 1 + SimAuraMult('Breath of Milk') * 0.05; + if (SimHasGod) { + const godLvl = SimHasGod('mother'); + if (godLvl === 1) milkMult *= 1.1; + else if (godLvl === 2) milkMult *= 1.05; + else if (godLvl === 3) milkMult *= 1.03; + } + milkMult *= SimEff('milk'); - let catMult = 1; + let catMult = 1; - if (SimHas('Kitten helpers')) catMult *= (1 + milkProgress * 0.1 * milkMult); - if (SimHas('Kitten workers')) catMult *= (1 + milkProgress * 0.125 * milkMult); - if (SimHas('Kitten engineers')) catMult *= (1 + milkProgress * 0.15 * milkMult); - if (SimHas('Kitten overseers')) catMult *= (1 + milkProgress * 0.175 * milkMult); - if (SimHas('Kitten managers')) catMult *= (1 + milkProgress * 0.2 * milkMult); - if (SimHas('Kitten accountants')) catMult *= (1 + milkProgress * 0.2 * milkMult); - if (SimHas('Kitten specialists')) catMult *= (1 + milkProgress * 0.2 * milkMult); - if (SimHas('Kitten experts')) catMult *= (1 + milkProgress * 0.2 * milkMult); - if (SimHas('Kitten consultants')) catMult *= (1 + milkProgress * 0.2 * milkMult); - if (SimHas('Kitten assistants to the regional manager')) catMult *= (1 + milkProgress * 0.175 * milkMult); - if (SimHas('Kitten marketeers')) catMult *= (1 + milkProgress * 0.15 * milkMult); - if (SimHas('Kitten analysts')) catMult *= (1 + milkProgress * 0.125 * milkMult); - if (SimHas('Kitten executives')) catMult *= (1 + milkProgress * 0.115 * milkMult); - if (SimHas('Kitten angels')) catMult *= (1 + milkProgress * 0.1 * milkMult); - if (SimHas('Fortune #103')) catMult *= (1 + milkProgress * 0.05 * milkMult); + if (SimHas('Kitten helpers')) catMult *= 1 + milkProgress * 0.1 * milkMult; + if (SimHas('Kitten workers')) catMult *= 1 + milkProgress * 0.125 * milkMult; + if (SimHas('Kitten engineers')) catMult *= 1 + milkProgress * 0.15 * milkMult; + if (SimHas('Kitten overseers')) + catMult *= 1 + milkProgress * 0.175 * milkMult; + if (SimHas('Kitten managers')) catMult *= 1 + milkProgress * 0.2 * milkMult; + if (SimHas('Kitten accountants')) + catMult *= 1 + milkProgress * 0.2 * milkMult; + if (SimHas('Kitten specialists')) + catMult *= 1 + milkProgress * 0.2 * milkMult; + if (SimHas('Kitten experts')) catMult *= 1 + milkProgress * 0.2 * milkMult; + if (SimHas('Kitten consultants')) + catMult *= 1 + milkProgress * 0.2 * milkMult; + if (SimHas('Kitten assistants to the regional manager')) + catMult *= 1 + milkProgress * 0.175 * milkMult; + if (SimHas('Kitten marketeers')) + catMult *= 1 + milkProgress * 0.15 * milkMult; + if (SimHas('Kitten analysts')) catMult *= 1 + milkProgress * 0.125 * milkMult; + if (SimHas('Kitten executives')) + catMult *= 1 + milkProgress * 0.115 * milkMult; + if (SimHas('Kitten angels')) catMult *= 1 + milkProgress * 0.1 * milkMult; + if (SimHas('Fortune #103')) catMult *= 1 + milkProgress * 0.05 * milkMult; - for (const i of Object.keys(SimObjects)) { - const me = SimObjects[i]; - let storedCps = me.cps(me); - if (Game.ascensionMode !== 1) storedCps *= (1 + me.level * 0.01) * buildMult; - if (me.name === 'Grandma' && SimHas('Milkhelp® lactose intolerance relief tablets')) storedCps *= 1 + 0.05 * milkProgress * milkMult; - SimCookiesPs += me.amount * storedCps; - } + for (const i of Object.keys(SimObjects)) { + const me = SimObjects[i]; + let storedCps = me.cps(me); + if (Game.ascensionMode !== 1) + storedCps *= (1 + me.level * 0.01) * buildMult; + if ( + me.name === 'Grandma' && + SimHas('Milkhelp® lactose intolerance relief tablets') + ) + storedCps *= 1 + 0.05 * milkProgress * milkMult; + SimCookiesPs += me.amount * storedCps; + } - if (SimHas('"egg"')) SimCookiesPs += 9;// "egg" + if (SimHas('"egg"')) SimCookiesPs += 9; // "egg" - mult *= catMult; + mult *= catMult; - let eggMult = 1; - if (SimHas('Chicken egg')) eggMult *= 1.01; - if (SimHas('Duck egg')) eggMult *= 1.01; - if (SimHas('Turkey egg')) eggMult *= 1.01; - if (SimHas('Quail egg')) eggMult *= 1.01; - if (SimHas('Robin egg')) eggMult *= 1.01; - if (SimHas('Ostrich egg')) eggMult *= 1.01; - if (SimHas('Cassowary egg')) eggMult *= 1.01; - if (SimHas('Salmon roe')) eggMult *= 1.01; - if (SimHas('Frogspawn')) eggMult *= 1.01; - if (SimHas('Shark egg')) eggMult *= 1.01; - if (SimHas('Turtle egg')) eggMult *= 1.01; - if (SimHas('Ant larva')) eggMult *= 1.01; - if (SimHas('Century egg')) { - // The boost increases a little every day, with diminishing returns up to +10% on the 100th day - let day = Math.floor((SimDateCentury - Game.startDate) / 1000 / 10) * 10 / 60 / 60 / 24; - day = Math.min(day, 100); - // Sets a Cache value to be displayed in the Stats page, could be moved... - CacheCentEgg = 1 + (1 - (1 - day / 100) ** 3) * 0.1; - eggMult *= CacheCentEgg; - } - mult *= eggMult; + let eggMult = 1; + if (SimHas('Chicken egg')) eggMult *= 1.01; + if (SimHas('Duck egg')) eggMult *= 1.01; + if (SimHas('Turkey egg')) eggMult *= 1.01; + if (SimHas('Quail egg')) eggMult *= 1.01; + if (SimHas('Robin egg')) eggMult *= 1.01; + if (SimHas('Ostrich egg')) eggMult *= 1.01; + if (SimHas('Cassowary egg')) eggMult *= 1.01; + if (SimHas('Salmon roe')) eggMult *= 1.01; + if (SimHas('Frogspawn')) eggMult *= 1.01; + if (SimHas('Shark egg')) eggMult *= 1.01; + if (SimHas('Turtle egg')) eggMult *= 1.01; + if (SimHas('Ant larva')) eggMult *= 1.01; + if (SimHas('Century egg')) { + // The boost increases a little every day, with diminishing returns up to +10% on the 100th day + let day = + (Math.floor((SimDateCentury - Game.startDate) / 1000 / 10) * 10) / + 60 / + 60 / + 24; + day = Math.min(day, 100); + // Sets a Cache value to be displayed in the Stats page, could be moved... + CacheCentEgg = 1 + (1 - (1 - day / 100) ** 3) * 0.1; + eggMult *= CacheCentEgg; + } + mult *= eggMult; - if (SimHas('Sugar baking')) mult *= (1 + Math.min(100, Game.lumps) * 0.01); + if (SimHas('Sugar baking')) mult *= 1 + Math.min(100, Game.lumps) * 0.01; - // if (CM.Sim.hasAura('Radiant Appetite')) mult *= 2; - mult *= 1 + SimAuraMult('Radiant Appetite'); + // if (CM.Sim.hasAura('Radiant Appetite')) mult *= 2; + mult *= 1 + SimAuraMult('Radiant Appetite'); - const rawCookiesPs = SimCookiesPs * mult; - for (const i of Object.keys(Game.CpsAchievements)) { - if (rawCookiesPs >= Game.CpsAchievements[i].threshold) SimWin(Game.CpsAchievements[i].name); - } + const rawCookiesPs = SimCookiesPs * mult; + for (const i of Object.keys(Game.CpsAchievements)) { + if (rawCookiesPs >= Game.CpsAchievements[i].threshold) + SimWin(Game.CpsAchievements[i].name); + } - SimCookiesPsRaw = rawCookiesPs; + SimCookiesPsRaw = rawCookiesPs; - const n = Game.shimmerTypes.golden.n; - const auraMult = SimAuraMult('Dragon\'s Fortune'); - for (let i = 0; i < n; i++) { - mult *= 1 + auraMult * 1.23; - } + const n = Game.shimmerTypes.golden.n; + const auraMult = SimAuraMult("Dragon's Fortune"); + for (let i = 0; i < n; i++) { + mult *= 1 + auraMult * 1.23; + } - const name = Game.bakeryName.toLowerCase(); - if (name === 'orteil') mult *= 0.99; - else if (name === 'ortiel') mult *= 0.98; + const name = Game.bakeryName.toLowerCase(); + if (name === 'orteil') mult *= 0.99; + else if (name === 'ortiel') mult *= 0.98; - if (SimHas('Elder Covenant')) mult *= 0.95; + if (SimHas('Elder Covenant')) mult *= 0.95; - if (SimHas('Golden switch [off]')) { - let goldenSwitchMult = 1.5; - if (SimHas('Residual luck')) { - const upgrades = Game.goldenCookieUpgrades; - for (const i of Object.keys(upgrades)) { - if (SimHas(upgrades[i])) goldenSwitchMult += 0.1; - } - } - mult *= goldenSwitchMult; - } - if (SimHas('Shimmering veil [off]')) { - let veilMult = 0.5; - if (SimHas('Reinforced membrane')) veilMult += 0.1; - mult *= 1 + veilMult; - } + if (SimHas('Golden switch [off]')) { + let goldenSwitchMult = 1.5; + if (SimHas('Residual luck')) { + const upgrades = Game.goldenCookieUpgrades; + for (const i of Object.keys(upgrades)) { + if (SimHas(upgrades[i])) goldenSwitchMult += 0.1; + } + } + mult *= goldenSwitchMult; + } + if (SimHas('Shimmering veil [off]')) { + let veilMult = 0.5; + if (SimHas('Reinforced membrane')) veilMult += 0.1; + mult *= 1 + veilMult; + } - if (SimHas('Magic shenanigans')) mult *= 1000; - if (SimHas('Occult obstruction')) mult *= 0; + if (SimHas('Magic shenanigans')) mult *= 1000; + if (SimHas('Occult obstruction')) mult *= 0; - SimCookiesPs = Game.runModHookOnValue('cps', SimCookiesPs); + SimCookiesPs = Game.runModHookOnValue('cps', SimCookiesPs); - mult *= GetCPSBuffMult(); + mult *= GetCPSBuffMult(); - SimCookiesPs *= mult; + SimCookiesPs *= mult; - // if (Game.hasBuff('Cursed finger')) Game.cookiesPs = 0; + // if (Game.hasBuff('Cursed finger')) Game.cookiesPs = 0; } diff --git a/src/Sim/Calculations/CheckOtherAchiev.js b/src/Sim/Calculations/CheckOtherAchiev.js index b3c1a21..300ae6d 100644 --- a/src/Sim/Calculations/CheckOtherAchiev.js +++ b/src/Sim/Calculations/CheckOtherAchiev.js @@ -10,79 +10,89 @@ import { SimObjects, SimUpgradesOwned } from '../VariablesAndData'; * It is called at the end of any functions that simulates certain behaviour */ export default function CheckOtherAchiev() { - let grandmas = 0; - for (const i of Object.keys(Game.GrandmaSynergies)) { - if (SimHas(Game.GrandmaSynergies[i])) grandmas++; - } - if (!SimHasAchiev('Elder') && grandmas >= 7) SimWin('Elder'); - if (!SimHasAchiev('Veteran') && grandmas >= 14) SimWin('Veteran'); + let grandmas = 0; + for (const i of Object.keys(Game.GrandmaSynergies)) { + if (SimHas(Game.GrandmaSynergies[i])) grandmas++; + } + if (!SimHasAchiev('Elder') && grandmas >= 7) SimWin('Elder'); + if (!SimHasAchiev('Veteran') && grandmas >= 14) SimWin('Veteran'); - let buildingsOwned = 0; - let mathematician = 1; - let base10 = 1; - let minAmount = 100000; - for (const i of Object.keys(SimObjects)) { - buildingsOwned += SimObjects[i].amount; - minAmount = Math.min(SimObjects[i].amount, minAmount); - if (!SimHasAchiev('Mathematician')) { - if (SimObjects[i].amount < Math.min(128, 2 ** ((Game.ObjectsById.length - Game.Objects[i].id) - 1))) mathematician = 0; - } - if (!SimHasAchiev('Base 10')) { - if (SimObjects[i].amount < (Game.ObjectsById.length - Game.Objects[i].id) * 10) base10 = 0; - } - } - if (minAmount >= 1) SimWin('One with everything'); - if (mathematician === 1) SimWin('Mathematician'); - if (base10 === 1) SimWin('Base 10'); - if (minAmount >= 100) SimWin('Centennial'); - if (minAmount >= 150) SimWin('Centennial and a half'); - if (minAmount >= 200) SimWin('Bicentennial'); - if (minAmount >= 250) SimWin('Bicentennial and a half'); - if (minAmount >= 300) SimWin('Tricentennial'); - if (minAmount >= 350) SimWin('Tricentennial and a half'); - if (minAmount >= 400) SimWin('Quadricentennial'); - if (minAmount >= 450) SimWin('Quadricentennial and a half'); - if (minAmount >= 500) SimWin('Quincentennial'); - if (minAmount >= 550) SimWin('Quincentennial and a half'); - if (minAmount >= 600) SimWin('Sexcentennial'); + let buildingsOwned = 0; + let mathematician = 1; + let base10 = 1; + let minAmount = 100000; + for (const i of Object.keys(SimObjects)) { + buildingsOwned += SimObjects[i].amount; + minAmount = Math.min(SimObjects[i].amount, minAmount); + if (!SimHasAchiev('Mathematician')) { + if ( + SimObjects[i].amount < + Math.min(128, 2 ** (Game.ObjectsById.length - Game.Objects[i].id - 1)) + ) + mathematician = 0; + } + if (!SimHasAchiev('Base 10')) { + if ( + SimObjects[i].amount < + (Game.ObjectsById.length - Game.Objects[i].id) * 10 + ) + base10 = 0; + } + } + if (minAmount >= 1) SimWin('One with everything'); + if (mathematician === 1) SimWin('Mathematician'); + if (base10 === 1) SimWin('Base 10'); + if (minAmount >= 100) SimWin('Centennial'); + if (minAmount >= 150) SimWin('Centennial and a half'); + if (minAmount >= 200) SimWin('Bicentennial'); + if (minAmount >= 250) SimWin('Bicentennial and a half'); + if (minAmount >= 300) SimWin('Tricentennial'); + if (minAmount >= 350) SimWin('Tricentennial and a half'); + if (minAmount >= 400) SimWin('Quadricentennial'); + if (minAmount >= 450) SimWin('Quadricentennial and a half'); + if (minAmount >= 500) SimWin('Quincentennial'); + if (minAmount >= 550) SimWin('Quincentennial and a half'); + if (minAmount >= 600) SimWin('Sexcentennial'); - if (buildingsOwned >= 100) SimWin('Builder'); - if (buildingsOwned >= 500) SimWin('Architect'); - if (buildingsOwned >= 1000) SimWin('Engineer'); - if (buildingsOwned >= 2000) SimWin('Lord of Constructs'); - if (buildingsOwned >= 4000) SimWin('Grand design'); - if (buildingsOwned >= 8000) SimWin('Ecumenopolis'); + if (buildingsOwned >= 100) SimWin('Builder'); + if (buildingsOwned >= 500) SimWin('Architect'); + if (buildingsOwned >= 1000) SimWin('Engineer'); + if (buildingsOwned >= 2000) SimWin('Lord of Constructs'); + if (buildingsOwned >= 4000) SimWin('Grand design'); + if (buildingsOwned >= 8000) SimWin('Ecumenopolis'); - if (SimUpgradesOwned >= 20) SimWin('Enhancer'); - if (SimUpgradesOwned >= 50) SimWin('Augmenter'); - if (SimUpgradesOwned >= 100) SimWin('Upgrader'); - if (SimUpgradesOwned >= 200) SimWin('Lord of Progress'); - if (SimUpgradesOwned >= 300) SimWin('The full picture'); - if (SimUpgradesOwned >= 400) SimWin('When there\'s nothing left to add'); + if (SimUpgradesOwned >= 20) SimWin('Enhancer'); + if (SimUpgradesOwned >= 50) SimWin('Augmenter'); + if (SimUpgradesOwned >= 100) SimWin('Upgrader'); + if (SimUpgradesOwned >= 200) SimWin('Lord of Progress'); + if (SimUpgradesOwned >= 300) SimWin('The full picture'); + if (SimUpgradesOwned >= 400) SimWin("When there's nothing left to add"); - if (buildingsOwned >= 4000 && SimUpgradesOwned >= 300) SimWin('Polymath'); - if (buildingsOwned >= 8000 && SimUpgradesOwned >= 400) SimWin('Renaissance baker'); + if (buildingsOwned >= 4000 && SimUpgradesOwned >= 300) SimWin('Polymath'); + if (buildingsOwned >= 8000 && SimUpgradesOwned >= 400) + SimWin('Renaissance baker'); - if (SimObjects.Cursor.amount + SimObjects.Grandma.amount >= 777) SimWin('The elder scrolls'); + if (SimObjects.Cursor.amount + SimObjects.Grandma.amount >= 777) + SimWin('The elder scrolls'); - let hasAllHalloCook = true; - for (const i of Object.keys(HalloCookies)) { - if (!SimHas(HalloCookies[i])) hasAllHalloCook = false; - } - if (hasAllHalloCook) SimWin('Spooky cookies'); + let hasAllHalloCook = true; + for (const i of Object.keys(HalloCookies)) { + if (!SimHas(HalloCookies[i])) hasAllHalloCook = false; + } + if (hasAllHalloCook) SimWin('Spooky cookies'); - let hasAllChristCook = true; - for (const i of Object.keys(ChristCookies)) { - if (!SimHas(ChristCookies[i])) hasAllChristCook = false; - } - if (hasAllChristCook) SimWin('Let it snow'); + let hasAllChristCook = true; + for (const i of Object.keys(ChristCookies)) { + if (!SimHas(ChristCookies[i])) hasAllChristCook = false; + } + if (hasAllChristCook) SimWin('Let it snow'); - if (SimHas('Fortune cookies')) { - const list = Game.Tiers.fortune.upgrades; - let fortunes = 0; - for (const i of Object.keys(list)) { - if (SimHas(list[i].name)) fortunes++; - } - if (fortunes >= list.length) SimWin('O Fortuna'); - } + if (SimHas('Fortune cookies')) { + const list = Game.Tiers.fortune.upgrades; + let fortunes = 0; + for (const i of Object.keys(list)) { + if (SimHas(list[i].name)) fortunes++; + } + if (fortunes >= list.length) SimWin('O Fortuna'); + } } diff --git a/src/Sim/Calculations/NoGoldenSwitchCalc.js b/src/Sim/Calculations/NoGoldenSwitchCalc.js index 586d5d5..b92ebad 100644 --- a/src/Sim/Calculations/NoGoldenSwitchCalc.js +++ b/src/Sim/Calculations/NoGoldenSwitchCalc.js @@ -7,8 +7,8 @@ import CalculateGains from './CalculateGains'; * It is called by CM.Cache.NoGoldSwitchCPS() */ export default function CalcNoGoldSwitchCPS() { - CopyData(); - SimUpgrades['Golden switch [off]'].bought = 0; - CalculateGains(); - return SimCookiesPs; + CopyData(); + SimUpgrades['Golden switch [off]'].bought = 0; + CalculateGains(); + return SimCookiesPs; } diff --git a/src/Sim/InitializeData/InitAchievement.js b/src/Sim/InitializeData/InitAchievement.js index ef53db4..c3805a8 100644 --- a/src/Sim/InitializeData/InitAchievement.js +++ b/src/Sim/InitializeData/InitAchievement.js @@ -4,8 +4,8 @@ * @returns {Object} you The static object */ export default function InitAchievement(achievementName) { - const me = Game.Achievements[achievementName]; - const you = {}; - you.name = me.name; - return you; + const me = Game.Achievements[achievementName]; + const you = {}; + you.name = me.name; + return you; } diff --git a/src/Sim/InitializeData/InitData.js b/src/Sim/InitializeData/InitData.js index d3c4e5e..6a1f1ec 100644 --- a/src/Sim/InitializeData/InitData.js +++ b/src/Sim/InitializeData/InitData.js @@ -10,22 +10,22 @@ import InitUpgrade from './InitUpgrade'; * This function creates static objects for Buildings, Upgrades and Achievements */ export default function InitData() { - // Buildings - SimObjects = []; - for (const i of Object.keys(Game.Objects)) { - SimObjects[i] = InitialBuildingData(i); - } + // Buildings + SimObjects = []; + for (const i of Object.keys(Game.Objects)) { + SimObjects[i] = InitialBuildingData(i); + } - // Upgrades - SimUpgrades = []; - for (const i of Object.keys(Game.Upgrades)) { - SimUpgrades[i] = InitUpgrade(i); - } + // Upgrades + SimUpgrades = []; + for (const i of Object.keys(Game.Upgrades)) { + SimUpgrades[i] = InitUpgrade(i); + } - // Achievements - SimAchievements = []; - for (const i of Object.keys(Game.Achievements)) { - SimAchievements[i] = InitAchievement(i); - } - CopyData(); + // Achievements + SimAchievements = []; + for (const i of Object.keys(Game.Achievements)) { + SimAchievements[i] = InitAchievement(i); + } + CopyData(); } diff --git a/src/Sim/InitializeData/InitUpgrade.js b/src/Sim/InitializeData/InitUpgrade.js index 640f296..0d8184a 100644 --- a/src/Sim/InitializeData/InitUpgrade.js +++ b/src/Sim/InitializeData/InitUpgrade.js @@ -8,33 +8,33 @@ import { SimObjects } from '../VariablesAndData'; * @returns {Object} you The static object */ export default function InitUpgrade(upgradeName) { - const me = Game.Upgrades[upgradeName]; - const you = {}; - // Some upgrades have a function for .power (notably the valentine cookies) - you.power = me.power; - if (typeof (me.power) === 'function') { - if (me.name === 'Sugar crystal cookies') { - me.power = function () { - let n = 5; - for (const i in SimObjects) { - if (SimObjects[i].level >= 10) n += 1; - } - return n; - }; - } - me.power = function () { - let pow = 2; - if (SimHas('Starlove')) pow = 3; - if (Game.hasGod) { - const godLvl = SimHasGod('seasons'); - if (godLvl === 1) pow *= 1.3; - else if (godLvl === 2) pow *= 1.2; - else if (godLvl === 3) pow *= 1.1; - } - return pow; - }; - } - you.pool = me.pool; - you.name = me.name; - return you; + const me = Game.Upgrades[upgradeName]; + const you = {}; + // Some upgrades have a function for .power (notably the valentine cookies) + you.power = me.power; + if (typeof me.power === 'function') { + if (me.name === 'Sugar crystal cookies') { + me.power = function () { + let n = 5; + for (const i in SimObjects) { + if (SimObjects[i].level >= 10) n += 1; + } + return n; + }; + } + me.power = function () { + let pow = 2; + if (SimHas('Starlove')) pow = 3; + if (Game.hasGod) { + const godLvl = SimHasGod('seasons'); + if (godLvl === 1) pow *= 1.3; + else if (godLvl === 2) pow *= 1.2; + else if (godLvl === 3) pow *= 1.1; + } + return pow; + }; + } + you.pool = me.pool; + you.name = me.name; + return you; } diff --git a/src/Sim/InitializeData/InitialBuildingData.js b/src/Sim/InitializeData/InitialBuildingData.js index 010ba40..aee003e 100644 --- a/src/Sim/InitializeData/InitialBuildingData.js +++ b/src/Sim/InitializeData/InitialBuildingData.js @@ -12,84 +12,97 @@ import { SimObjects } from '../VariablesAndData'; * @returns {Object} you The static object */ export default function InitialBuildingData(buildingName) { - const me = Game.Objects[buildingName]; - const you = {}; - if (me.name === 'Cursor') { - you.cps = function (it) { - let add = 0; - if (SimHas('Thousand fingers')) add += 0.1; - if (SimHas('Million fingers')) add *= 5; - if (SimHas('Billion fingers')) add *= 10; - if (SimHas('Trillion fingers')) add *= 20; - if (SimHas('Quadrillion fingers')) add *= 20; - if (SimHas('Quintillion fingers')) add *= 20; - if (SimHas('Sextillion fingers')) add *= 20; - if (SimHas('Septillion fingers')) add *= 20; - if (SimHas('Octillion fingers')) add *= 20; - if (SimHas('Nonillion fingers')) add *= 20; - let mult = 1; - let num = 0; - for (const i in SimObjects) { if (SimObjects[i].name !== 'Cursor') num += SimObjects[i].amount; } - add *= num; - mult *= SimGetTieredCpsMult(it); - mult *= Game.magicCpS('Cursor'); - mult *= SimEff('cursorCps'); - return Game.ComputeCps(0.1, SimHas('Reinforced index finger') + SimHas('Carpal tunnel prevention cream') + SimHas('Ambidextrous'), add) * mult; - }; - } else if (me.name === 'Grandma') { - you.cps = function (it) { - let mult = 1; - for (const i in Game.GrandmaSynergies) { - if (SimHas(Game.GrandmaSynergies[i])) mult *= 2; - } - if (SimHas('Bingo center/Research facility')) mult *= 4; - if (SimHas('Ritual rolling pins')) mult *= 2; - if (SimHas('Naughty list')) mult *= 2; + const me = Game.Objects[buildingName]; + const you = {}; + if (me.name === 'Cursor') { + you.cps = function (it) { + let add = 0; + if (SimHas('Thousand fingers')) add += 0.1; + if (SimHas('Million fingers')) add *= 5; + if (SimHas('Billion fingers')) add *= 10; + if (SimHas('Trillion fingers')) add *= 20; + if (SimHas('Quadrillion fingers')) add *= 20; + if (SimHas('Quintillion fingers')) add *= 20; + if (SimHas('Sextillion fingers')) add *= 20; + if (SimHas('Septillion fingers')) add *= 20; + if (SimHas('Octillion fingers')) add *= 20; + if (SimHas('Nonillion fingers')) add *= 20; + let mult = 1; + let num = 0; + for (const i in SimObjects) { + if (SimObjects[i].name !== 'Cursor') num += SimObjects[i].amount; + } + add *= num; + mult *= SimGetTieredCpsMult(it); + mult *= Game.magicCpS('Cursor'); + mult *= SimEff('cursorCps'); + return ( + Game.ComputeCps( + 0.1, + SimHas('Reinforced index finger') + + SimHas('Carpal tunnel prevention cream') + + SimHas('Ambidextrous'), + add, + ) * mult + ); + }; + } else if (me.name === 'Grandma') { + you.cps = function (it) { + let mult = 1; + for (const i in Game.GrandmaSynergies) { + if (SimHas(Game.GrandmaSynergies[i])) mult *= 2; + } + if (SimHas('Bingo center/Research facility')) mult *= 4; + if (SimHas('Ritual rolling pins')) mult *= 2; + if (SimHas('Naughty list')) mult *= 2; - if (SimHas('Elderwort biscuits')) mult *= 1.02; + if (SimHas('Elderwort biscuits')) mult *= 1.02; - mult *= SimEff('grandmaCps'); + mult *= SimEff('grandmaCps'); - if (SimHas('Cat ladies')) { - for (let i = 0; i < Game.UpgradesByPool.kitten.length; i++) { - if (SimHas(Game.UpgradesByPool.kitten[i].name)) mult *= 1.29; - } - } + if (SimHas('Cat ladies')) { + for (let i = 0; i < Game.UpgradesByPool.kitten.length; i++) { + if (SimHas(Game.UpgradesByPool.kitten[i].name)) mult *= 1.29; + } + } - mult *= SimGetTieredCpsMult(it); + mult *= SimGetTieredCpsMult(it); - let add = 0; - if (SimHas('One mind')) add += SimObjects.Grandma.amount * 0.02; - if (SimHas('Communal brainsweep')) add += SimObjects.Grandma.amount * 0.02; - if (SimHas('Elder Pact')) add += SimObjects.Portal.amount * 0.05; + let add = 0; + if (SimHas('One mind')) add += SimObjects.Grandma.amount * 0.02; + if (SimHas('Communal brainsweep')) + add += SimObjects.Grandma.amount * 0.02; + if (SimHas('Elder Pact')) add += SimObjects.Portal.amount * 0.05; - let num = 0; - for (const i in SimObjects) { if (SimObjects[i].name !== 'Grandma') num += SimObjects[i].amount; } - // if (Game.hasAura('Elder Battalion')) mult*=1+0.01*num; - mult *= 1 + SimAuraMult('Elder Battalion') * 0.01 * num; + let num = 0; + for (const i in SimObjects) { + if (SimObjects[i].name !== 'Grandma') num += SimObjects[i].amount; + } + // if (Game.hasAura('Elder Battalion')) mult*=1+0.01*num; + mult *= 1 + SimAuraMult('Elder Battalion') * 0.01 * num; - mult *= Game.magicCpS(me.name); + mult *= Game.magicCpS(me.name); - return (me.baseCps + add) * mult; - }; - } else { - you.cps = function (it) { - let mult = 1; - mult *= SimGetTieredCpsMult(it); - mult *= Game.magicCpS(it.name); - return it.baseCPS * mult; - }; - } + return (me.baseCps + add) * mult; + }; + } else { + you.cps = function (it) { + let mult = 1; + mult *= SimGetTieredCpsMult(it); + mult *= Game.magicCpS(it.name); + return it.baseCPS * mult; + }; + } - // Below is needed for above eval, specifically for the GetTieredCpsMult function - you.baseCps = me.baseCps; - you.name = me.name; - you.tieredUpgrades = me.tieredUpgrades; - you.synergies = me.synergies; - you.fortune = me.fortune; - you.grandma = me.grandma; - you.baseCPS = me.baseCps; - you.id = me.id; - you.vanilla = me.vanilla; - return you; + // Below is needed for above eval, specifically for the GetTieredCpsMult function + you.baseCps = me.baseCps; + you.name = me.name; + you.tieredUpgrades = me.tieredUpgrades; + you.synergies = me.synergies; + you.fortune = me.fortune; + you.grandma = me.grandma; + you.baseCPS = me.baseCps; + you.id = me.id; + you.vanilla = me.vanilla; + return you; } diff --git a/src/Sim/ReplacedGameFunctions/SimAuraMult.js b/src/Sim/ReplacedGameFunctions/SimAuraMult.js index 7b1f713..9917804 100644 --- a/src/Sim/ReplacedGameFunctions/SimAuraMult.js +++ b/src/Sim/ReplacedGameFunctions/SimAuraMult.js @@ -4,8 +4,16 @@ import { SimDragonAura, SimDragonAura2 } from '../VariablesAndData'; * This functions creates functions similarly to Game.auraMult but checks Sim Data instead of Game Data */ export default function SimAuraMult(what) { - let n = 0; - if (Game.dragonAuras[SimDragonAura].name === what || Game.dragonAuras[SimDragonAura2].name === what) n = 1; - if (Game.dragonAuras[SimDragonAura].name === 'Reality Bending' || Game.dragonAuras[SimDragonAura2].name === 'Reality Bending') n += 0.1; - return n; + let n = 0; + if ( + Game.dragonAuras[SimDragonAura].name === what || + Game.dragonAuras[SimDragonAura2].name === what + ) + n = 1; + if ( + Game.dragonAuras[SimDragonAura].name === 'Reality Bending' || + Game.dragonAuras[SimDragonAura2].name === 'Reality Bending' + ) + n += 0.1; + return n; } diff --git a/src/Sim/ReplacedGameFunctions/SimEff.js b/src/Sim/ReplacedGameFunctions/SimEff.js index 6e8c7d3..6e856ba 100644 --- a/src/Sim/ReplacedGameFunctions/SimEff.js +++ b/src/Sim/ReplacedGameFunctions/SimEff.js @@ -4,7 +4,8 @@ import { SimEffs } from '../VariablesAndData'; * This functions creates functions similarly to Game.Eff but checks Sim Data instead of Game Data */ export default function SimEff(name, def) { - if (typeof SimEffs[name] === 'undefined') { - return (typeof def === 'undefined' ? 1 : def); - } return SimEffs[name]; + if (typeof SimEffs[name] === 'undefined') { + return typeof def === 'undefined' ? 1 : def; + } + return SimEffs[name]; } diff --git a/src/Sim/ReplacedGameFunctions/SimGetHeavenlyMultiplier.js b/src/Sim/ReplacedGameFunctions/SimGetHeavenlyMultiplier.js index 74517b6..6b1fae6 100644 --- a/src/Sim/ReplacedGameFunctions/SimGetHeavenlyMultiplier.js +++ b/src/Sim/ReplacedGameFunctions/SimGetHeavenlyMultiplier.js @@ -6,22 +6,22 @@ import SimHasGod from './SimHasGod'; * This functions creates functions similarly to Game.GetHeavenlyMultiplier but checks Sim Data instead of Game Data */ export default function SimGetHeavenlyMultiplier() { - let heavenlyMult = 0; - if (SimHas('Heavenly chip secret')) heavenlyMult += 0.05; - if (SimHas('Heavenly cookie stand')) heavenlyMult += 0.20; - if (SimHas('Heavenly bakery')) heavenlyMult += 0.25; - if (SimHas('Heavenly confectionery')) heavenlyMult += 0.25; - if (SimHas('Heavenly key')) heavenlyMult += 0.25; - // if (SimHasAura('Dragon God')) heavenlyMult*=1.05; - heavenlyMult *= 1 + SimAuraMult('Dragon God') * 0.05; - if (SimHas('Lucky digit')) heavenlyMult *= 1.01; - if (SimHas('Lucky number')) heavenlyMult *= 1.01; - if (SimHas('Lucky payout')) heavenlyMult *= 1.01; - if (Game.hasGod) { - const godLvl = SimHasGod('creation'); - if (godLvl === 1) heavenlyMult *= 0.7; - else if (godLvl === 2) heavenlyMult *= 0.8; - else if (godLvl === 3) heavenlyMult *= 0.9; - } - return heavenlyMult; + let heavenlyMult = 0; + if (SimHas('Heavenly chip secret')) heavenlyMult += 0.05; + if (SimHas('Heavenly cookie stand')) heavenlyMult += 0.2; + if (SimHas('Heavenly bakery')) heavenlyMult += 0.25; + if (SimHas('Heavenly confectionery')) heavenlyMult += 0.25; + if (SimHas('Heavenly key')) heavenlyMult += 0.25; + // if (SimHasAura('Dragon God')) heavenlyMult*=1.05; + heavenlyMult *= 1 + SimAuraMult('Dragon God') * 0.05; + if (SimHas('Lucky digit')) heavenlyMult *= 1.01; + if (SimHas('Lucky number')) heavenlyMult *= 1.01; + if (SimHas('Lucky payout')) heavenlyMult *= 1.01; + if (Game.hasGod) { + const godLvl = SimHasGod('creation'); + if (godLvl === 1) heavenlyMult *= 0.7; + else if (godLvl === 2) heavenlyMult *= 0.8; + else if (godLvl === 3) heavenlyMult *= 0.9; + } + return heavenlyMult; } diff --git a/src/Sim/ReplacedGameFunctions/SimGetSellMultiplier.js b/src/Sim/ReplacedGameFunctions/SimGetSellMultiplier.js index 9c292f5..b8309c1 100644 --- a/src/Sim/ReplacedGameFunctions/SimGetSellMultiplier.js +++ b/src/Sim/ReplacedGameFunctions/SimGetSellMultiplier.js @@ -6,7 +6,7 @@ import SimAuraMult from './SimAuraMult'; * @returns {number} giveBack The multiplier */ export default function SimGetSellMultiplier() { - let giveBack = 0.25; - giveBack *= 1 + SimAuraMult('Earth Shatterer'); - return giveBack; + let giveBack = 0.25; + giveBack *= 1 + SimAuraMult('Earth Shatterer'); + return giveBack; } diff --git a/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js b/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js index 3f00c96..bc5009d 100644 --- a/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js +++ b/src/Sim/ReplacedGameFunctions/SimGetTieredCpsMult.js @@ -5,28 +5,43 @@ import SimHas from './SimHas'; * This functions creates functions similarly to Game.GetTieredCpsMult but checks Sim Data instead of Game Data */ export default function SimGetTieredCpsMult(me) { - let mult = 1; - for (const i in me.tieredUpgrades) { - if (!Game.Tiers[me.tieredUpgrades[i].tier].special && SimHas(me.tieredUpgrades[i].name)) mult *= 2; - } - for (const i in me.synergies) { - if (SimHas(me.synergies[i].name)) { - const syn = me.synergies[i]; - if (syn.buildingTie1.name === me.name) mult *= (1 + 0.05 * syn.buildingTie2.amount); - else if (syn.buildingTie2.name === me.name) mult *= (1 + 0.001 * syn.buildingTie1.amount); - } - } - if (me.fortune && SimHas(me.fortune.name)) mult *= 1.07; - if (me.grandma && SimHas(me.grandma.name)) mult *= (1 + SimObjects.Grandma.amount * 0.01 * (1 / (me.id - 1))); - if (typeof me.tieredUpgrades.misfortune === 'object') { - if (me.vanilla === 1 && SimHas(me.tieredUpgrades.misfortune.name)) { - switch (Game.elderWrath) { - default: mult *= 1; break; - case 1: mult *= 1.02; break; - case 2: mult *= 1.04; break; - case 3: mult *= 1.06; break; - } - } - } - return mult; + let mult = 1; + for (const i in me.tieredUpgrades) { + if ( + !Game.Tiers[me.tieredUpgrades[i].tier].special && + SimHas(me.tieredUpgrades[i].name) + ) + mult *= 2; + } + for (const i in me.synergies) { + if (SimHas(me.synergies[i].name)) { + const syn = me.synergies[i]; + if (syn.buildingTie1.name === me.name) + mult *= 1 + 0.05 * syn.buildingTie2.amount; + else if (syn.buildingTie2.name === me.name) + mult *= 1 + 0.001 * syn.buildingTie1.amount; + } + } + if (me.fortune && SimHas(me.fortune.name)) mult *= 1.07; + if (me.grandma && SimHas(me.grandma.name)) + mult *= 1 + SimObjects.Grandma.amount * 0.01 * (1 / (me.id - 1)); + if (typeof me.tieredUpgrades.misfortune === 'object') { + if (me.vanilla === 1 && SimHas(me.tieredUpgrades.misfortune.name)) { + switch (Game.elderWrath) { + default: + mult *= 1; + break; + case 1: + mult *= 1.02; + break; + case 2: + mult *= 1.04; + break; + case 3: + mult *= 1.06; + break; + } + } + } + return mult; } diff --git a/src/Sim/ReplacedGameFunctions/SimHas.js b/src/Sim/ReplacedGameFunctions/SimHas.js index 746ce9b..50f8436 100644 --- a/src/Sim/ReplacedGameFunctions/SimHas.js +++ b/src/Sim/ReplacedGameFunctions/SimHas.js @@ -4,7 +4,11 @@ import { SimUpgrades } from '../VariablesAndData'; * This functions creates functions similarly to Game.Has but checks Sim Data instead of Game Data */ export default function SimHas(what) { - const it = SimUpgrades[what]; - if (Game.ascensionMode === 1 && (it.pool === 'prestige' || it.tier === 'fortune')) return 0; - return (it ? it.bought : 0); + const it = SimUpgrades[what]; + if ( + Game.ascensionMode === 1 && + (it.pool === 'prestige' || it.tier === 'fortune') + ) + return 0; + return it ? it.bought : 0; } diff --git a/src/Sim/ReplacedGameFunctions/SimHasAchiev.js b/src/Sim/ReplacedGameFunctions/SimHasAchiev.js index e7542ea..d52450e 100644 --- a/src/Sim/ReplacedGameFunctions/SimHasAchiev.js +++ b/src/Sim/ReplacedGameFunctions/SimHasAchiev.js @@ -4,5 +4,5 @@ import { SimAchievements } from '../VariablesAndData'; * This functions creates functions similarly to Game.HasAchiev but checks Sim Data instead of Game Data */ export default function SimHasAchiev(what) { - return (SimAchievements[what] ? SimAchievements[what].won : 0); + return SimAchievements[what] ? SimAchievements[what].won : 0; } diff --git a/src/Sim/ReplacedGameFunctions/SimHasAura.js b/src/Sim/ReplacedGameFunctions/SimHasAura.js index cb77bc0..87df5ee 100644 --- a/src/Sim/ReplacedGameFunctions/SimHasAura.js +++ b/src/Sim/ReplacedGameFunctions/SimHasAura.js @@ -4,8 +4,11 @@ import { SimDragonAura, SimDragonAura2 } from '../VariablesAndData'; * This functions creates functions similarly to Game.hasAura but checks Sim Data instead of Game Data */ export default function SimHasAura(what) { - if (Game.dragonAuras[SimDragonAura].name === what || Game.dragonAuras[SimDragonAura2].name === what) { - return true; - } - return false; + if ( + Game.dragonAuras[SimDragonAura].name === what || + Game.dragonAuras[SimDragonAura2].name === what + ) { + return true; + } + return false; } diff --git a/src/Sim/ReplacedGameFunctions/SimHasGod.js b/src/Sim/ReplacedGameFunctions/SimHasGod.js index d6dcba9..c863875 100644 --- a/src/Sim/ReplacedGameFunctions/SimHasGod.js +++ b/src/Sim/ReplacedGameFunctions/SimHasGod.js @@ -6,16 +6,16 @@ import { SimObjects } from '../VariablesAndData'; * @param {string} what Name of the achievement */ export default function SimHasGod(what) { - if (Game.hasGod) { - if (SimObjects.Temple.minigame === undefined) { - SimObjects.Temple.minigame = Game.Objects.Temple.minigame; - } - const god = SimObjects.Temple.minigame.gods[what]; - for (let i = 0; i < 3; i++) { - if (SimObjects.Temple.minigame.slot[i] === god.id) { - return i + 1; - } - } - } - return false; + if (Game.hasGod) { + if (SimObjects.Temple.minigame === undefined) { + SimObjects.Temple.minigame = Game.Objects.Temple.minigame; + } + const god = SimObjects.Temple.minigame.gods[what]; + for (let i = 0; i < 3; i++) { + if (SimObjects.Temple.minigame.slot[i] === god.id) { + return i + 1; + } + } + } + return false; } diff --git a/src/Sim/ReplacedGameFunctions/SimModifyBuidlingPrice.js b/src/Sim/ReplacedGameFunctions/SimModifyBuidlingPrice.js index 2efc09c..bda3b83 100644 --- a/src/Sim/ReplacedGameFunctions/SimModifyBuidlingPrice.js +++ b/src/Sim/ReplacedGameFunctions/SimModifyBuidlingPrice.js @@ -11,23 +11,23 @@ import SimHasGod from './SimHasGod'; * @returns {number} price The modified building price */ export default function SimModifyBuildingPrice(building, price) { - if (SimHas('Season savings')) price *= 0.99; - if (SimHas('Santa\'s dominion')) price *= 0.99; - if (SimHas('Faberge egg')) price *= 0.99; - if (SimHas('Divine discount')) price *= 0.99; - if (SimHas('Fortune #100')) price *= 0.99; - // if (SimHasAura('Fierce Hoarder')) price *= 0.98; - price *= 1 - SimAuraMult('Fierce Hoarder') * 0.02; - if (Game.hasBuff('Everything must go')) price *= 0.95; - if (Game.hasBuff('Crafty pixies')) price *= 0.98; - if (Game.hasBuff('Nasty goblins')) price *= 1.02; - if (building.fortune && SimHas(building.fortune.name)) price *= 0.93; - price *= SimEff('buildingCost'); - if (SimObjects.Temple.minigameLoaded) { - const godLvl = SimHasGod('creation'); - if (godLvl === 1) price *= 0.93; - else if (godLvl === 2) price *= 0.95; - else if (godLvl === 3) price *= 0.98; - } - return price; + if (SimHas('Season savings')) price *= 0.99; + if (SimHas("Santa's dominion")) price *= 0.99; + if (SimHas('Faberge egg')) price *= 0.99; + if (SimHas('Divine discount')) price *= 0.99; + if (SimHas('Fortune #100')) price *= 0.99; + // if (SimHasAura('Fierce Hoarder')) price *= 0.98; + price *= 1 - SimAuraMult('Fierce Hoarder') * 0.02; + if (Game.hasBuff('Everything must go')) price *= 0.95; + if (Game.hasBuff('Crafty pixies')) price *= 0.98; + if (Game.hasBuff('Nasty goblins')) price *= 1.02; + if (building.fortune && SimHas(building.fortune.name)) price *= 0.93; + price *= SimEff('buildingCost'); + if (SimObjects.Temple.minigameLoaded) { + const godLvl = SimHasGod('creation'); + if (godLvl === 1) price *= 0.93; + else if (godLvl === 2) price *= 0.95; + else if (godLvl === 3) price *= 0.98; + } + return price; } diff --git a/src/Sim/SimulationData/CopyData.js b/src/Sim/SimulationData/CopyData.js index 340492c..3af0ea4 100644 --- a/src/Sim/SimulationData/CopyData.js +++ b/src/Sim/SimulationData/CopyData.js @@ -1,12 +1,24 @@ /* eslint-disable no-unused-vars */ import CacheDragonAuras from '../../Cache/Dragon/CacheDragonAuras'; -import { CacheDragonAura, CacheDragonAura2 } from '../../Cache/VariablesAndData'; +import { + CacheDragonAura, + CacheDragonAura2, +} from '../../Cache/VariablesAndData'; import { CreateBotBarBuildingColumn } from '../../Disp/InfoBars/CreateDOMElements'; import InitAchievement from '../InitializeData/InitAchievement'; import InitialBuildingData from '../InitializeData/InitialBuildingData'; import InitUpgrade from '../InitializeData/InitUpgrade'; import { - SimAchievements, SimAchievementsOwned, SimDragonAura, SimDragonAura2, SimHeavenlyPower, SimObjects, SimPledges, SimPrestige, SimUpgrades, SimUpgradesOwned, + SimAchievements, + SimAchievementsOwned, + SimDragonAura, + SimDragonAura2, + SimHeavenlyPower, + SimObjects, + SimPledges, + SimPrestige, + SimUpgrades, + SimUpgradesOwned, } from '../VariablesAndData'; /** @@ -14,60 +26,61 @@ import { * It is called at the start of any function that simulates certain behaviour or actions */ export default function CopyData() { - // Other variables - SimUpgradesOwned = Game.UpgradesOwned; - SimPledges = Game.pledges; - SimAchievementsOwned = Game.AchievementsOwned; - SimHeavenlyPower = Game.heavenlyPower; - SimPrestige = Game.prestige; + // Other variables + SimUpgradesOwned = Game.UpgradesOwned; + SimPledges = Game.pledges; + SimAchievementsOwned = Game.AchievementsOwned; + SimHeavenlyPower = Game.heavenlyPower; + SimPrestige = Game.prestige; - // Buildings - for (const i of Object.keys(Game.Objects)) { - const me = Game.Objects[i]; - let you = SimObjects[i]; - if (you === undefined) { // New building! - SimObjects[i] = InitialBuildingData(i); - you = SimObjects[i]; - CreateBotBarBuildingColumn(i); // Add new building to the bottom bar - } - you.amount = me.amount; - you.level = me.level; - you.totalCookies = me.totalCookies; - you.basePrice = me.basePrice; - you.free = me.free; - if (me.minigameLoaded) { - you.minigameLoaded = me.minigameLoaded; - you.minigame = me.minigame; - } - SimObjects[i] = you; - } + // Buildings + for (const i of Object.keys(Game.Objects)) { + const me = Game.Objects[i]; + let you = SimObjects[i]; + if (you === undefined) { + // New building! + SimObjects[i] = InitialBuildingData(i); + you = SimObjects[i]; + CreateBotBarBuildingColumn(i); // Add new building to the bottom bar + } + you.amount = me.amount; + you.level = me.level; + you.totalCookies = me.totalCookies; + you.basePrice = me.basePrice; + you.free = me.free; + if (me.minigameLoaded) { + you.minigameLoaded = me.minigameLoaded; + you.minigame = me.minigame; + } + SimObjects[i] = you; + } - // Upgrades - for (const i of Object.keys(Game.Upgrades)) { - const me = Game.Upgrades[i]; - let you = SimUpgrades[i]; - if (you === undefined) { - SimUpgrades[i] = InitUpgrade(i); - you = SimUpgrades[i]; - } - you.bought = me.bought; - SimUpgrades[i] = you; - } + // Upgrades + for (const i of Object.keys(Game.Upgrades)) { + const me = Game.Upgrades[i]; + let you = SimUpgrades[i]; + if (you === undefined) { + SimUpgrades[i] = InitUpgrade(i); + you = SimUpgrades[i]; + } + you.bought = me.bought; + SimUpgrades[i] = you; + } - // Achievements - for (const i of Object.keys(Game.Achievements)) { - const me = Game.Achievements[i]; - let you = SimAchievements[i]; - if (you === undefined) { - SimAchievements[i] = InitAchievement(i); - you = SimAchievements[i]; - } - you.won = me.won; - SimAchievements[i] = you; - } + // Achievements + for (const i of Object.keys(Game.Achievements)) { + const me = Game.Achievements[i]; + let you = SimAchievements[i]; + if (you === undefined) { + SimAchievements[i] = InitAchievement(i); + you = SimAchievements[i]; + } + you.won = me.won; + SimAchievements[i] = you; + } - // Auras - CacheDragonAuras(); - SimDragonAura = CacheDragonAura; - SimDragonAura2 = CacheDragonAura2; + // Auras + CacheDragonAuras(); + SimDragonAura = CacheDragonAura; + SimDragonAura2 = CacheDragonAura2; } diff --git a/src/Sim/SimulationData/SimWin.js b/src/Sim/SimulationData/SimWin.js index b982e36..fa1b61b 100644 --- a/src/Sim/SimulationData/SimWin.js +++ b/src/Sim/SimulationData/SimWin.js @@ -8,10 +8,10 @@ import { SimAchievements, SimAchievementsOwned } from '../VariablesAndData'; * @param {string} what Name of the achievement */ export default function SimWin(what) { - if (SimAchievements[what]) { - if (SimAchievements[what].won === 0) { - SimAchievements[what].won = 1; - if (Game.Achievements[what].pool !== 'shadow') SimAchievementsOwned++; - } - } + if (SimAchievements[what]) { + if (SimAchievements[what].won === 0) { + SimAchievements[what].won = 1; + if (Game.Achievements[what].pool !== 'shadow') SimAchievementsOwned++; + } + } } diff --git a/src/Sim/SimulationEvents/AuraChange.js b/src/Sim/SimulationEvents/AuraChange.js index e972240..856b265 100644 --- a/src/Sim/SimulationEvents/AuraChange.js +++ b/src/Sim/SimulationEvents/AuraChange.js @@ -1,10 +1,18 @@ /* eslint-disable no-unused-vars */ -import { CacheDragonAura, CacheDragonAura2 } from '../../Cache/VariablesAndData'; +import { + CacheDragonAura, + CacheDragonAura2, +} from '../../Cache/VariablesAndData'; import CalculateGains from '../Calculations/CalculateGains'; import CheckOtherAchiev from '../Calculations/CheckOtherAchiev'; import CopyData from '../SimulationData/CopyData'; import { - SimAchievementsOwned, SimBuildingsOwned, SimCookiesPs, SimDragonAura, SimDragonAura2, SimObjects, + SimAchievementsOwned, + SimBuildingsOwned, + SimCookiesPs, + SimDragonAura, + SimDragonAura2, + SimObjects, } from '../VariablesAndData'; /** @@ -14,35 +22,48 @@ import { * @returns {[number, number]} [CM.Sim.cookiesPs - Game.cookiesPs, price] The bonus cps and the price of the change */ export default function CalculateChangeAura(aura) { - CopyData(); + CopyData(); - // Check if aura being changed is first or second aura - const auraToBeChanged = l('promptContent').children[0].innerHTML.includes('secondary'); - if (auraToBeChanged) SimDragonAura2 = aura; - else SimDragonAura = aura; + // Check if aura being changed is first or second aura + const auraToBeChanged = l('promptContent').children[0].innerHTML.includes( + 'secondary', + ); + if (auraToBeChanged) SimDragonAura2 = aura; + else SimDragonAura = aura; - // Sell highest building but only if aura is different - let price = 0; - if (SimDragonAura !== CacheDragonAura || SimDragonAura2 !== CacheDragonAura2) { - for (let i = Game.ObjectsById.length - 1; i > -1; --i) { - if (Game.ObjectsById[i - 1].amount > 0) { - const highestBuilding = SimObjects[Game.ObjectsById[i].name].name; - SimObjects[highestBuilding].amount -= 1; - SimBuildingsOwned -= 1; - price = SimObjects[highestBuilding].basePrice * Game.priceIncrease ** Math.max(0, SimObjects[highestBuilding].amount - 1 - SimObjects[highestBuilding].free); - price = Game.modifyBuildingPrice(SimObjects[highestBuilding], price); - price = Math.ceil(price); - break; - } - } - } + // Sell highest building but only if aura is different + let price = 0; + if ( + SimDragonAura !== CacheDragonAura || + SimDragonAura2 !== CacheDragonAura2 + ) { + for (let i = Game.ObjectsById.length - 1; i > -1; --i) { + if (Game.ObjectsById[i - 1].amount > 0) { + const highestBuilding = SimObjects[Game.ObjectsById[i].name].name; + SimObjects[highestBuilding].amount -= 1; + SimBuildingsOwned -= 1; + price = + SimObjects[highestBuilding].basePrice * + Game.priceIncrease ** + Math.max( + 0, + SimObjects[highestBuilding].amount - + 1 - + SimObjects[highestBuilding].free, + ); + price = Game.modifyBuildingPrice(SimObjects[highestBuilding], price); + price = Math.ceil(price); + break; + } + } + } - const lastAchievementsOwned = SimAchievementsOwned; - CalculateGains(); + const lastAchievementsOwned = SimAchievementsOwned; + CalculateGains(); - CheckOtherAchiev(); - if (lastAchievementsOwned !== SimAchievementsOwned) { - CalculateGains(); - } - return [SimCookiesPs - Game.cookiesPs, price]; + CheckOtherAchiev(); + if (lastAchievementsOwned !== SimAchievementsOwned) { + CalculateGains(); + } + return [SimCookiesPs - Game.cookiesPs, price]; } diff --git a/src/Sim/SimulationEvents/BuyBuilding.js b/src/Sim/SimulationEvents/BuyBuilding.js index 2df9117..9609eae 100644 --- a/src/Sim/SimulationEvents/BuyBuilding.js +++ b/src/Sim/SimulationEvents/BuyBuilding.js @@ -9,14 +9,20 @@ * @param {number} increase Increase of building * @returns {number} moni Total price */ -export default function BuildingGetPrice(build, basePrice, start, free, increase) { - let moni = 0; - for (let i = 0; i < increase; i++) { - let price = basePrice * Game.priceIncrease ** Math.max(0, start - free); - price = Game.modifyBuildingPrice(build, price); - price = Math.ceil(price); - moni += price; - start++; - } - return moni; +export default function BuildingGetPrice( + build, + basePrice, + start, + free, + increase, +) { + let moni = 0; + for (let i = 0; i < increase; i++) { + let price = basePrice * Game.priceIncrease ** Math.max(0, start - free); + price = Game.modifyBuildingPrice(build, price); + price = Math.ceil(price); + moni += price; + start++; + } + return moni; } diff --git a/src/Sim/SimulationEvents/BuyBuildingBonusIncome.js b/src/Sim/SimulationEvents/BuyBuildingBonusIncome.js index c4d38a6..0e8539e 100644 --- a/src/Sim/SimulationEvents/BuyBuildingBonusIncome.js +++ b/src/Sim/SimulationEvents/BuyBuildingBonusIncome.js @@ -2,7 +2,11 @@ import CalculateGains from '../Calculations/CalculateGains'; import CheckOtherAchiev from '../Calculations/CheckOtherAchiev'; import CopyData from '../SimulationData/CopyData'; import SimWin from '../SimulationData/SimWin'; -import { SimAchievementsOwned, SimCookiesPs, SimObjects } from '../VariablesAndData'; +import { + SimAchievementsOwned, + SimCookiesPs, + SimObjects, +} from '../VariablesAndData'; /** * This function calculates the bonus income of buying a building @@ -12,39 +16,42 @@ import { SimAchievementsOwned, SimCookiesPs, SimObjects } from '../VariablesAndD * @returns {number} The bonus income of the building */ export default function BuyBuildingsBonusIncome(building, amount) { - CopyData(); - SimObjects[building].amount += amount; - const me = SimObjects[building]; + CopyData(); + SimObjects[building].amount += amount; + const me = SimObjects[building]; - if (building === 'Cursor') { - if (me.amount >= 1) SimWin('Click'); - if (me.amount >= 2) SimWin('Double-click'); - if (me.amount >= 50) SimWin('Mouse wheel'); - if (me.amount >= 100) SimWin('Of Mice and Men'); - if (me.amount >= 200) SimWin('The Digital'); - if (me.amount >= 300) SimWin('Extreme polydactyly'); - if (me.amount >= 400) SimWin('Dr. T'); - if (me.amount >= 500) SimWin('Thumbs, phalanges, metacarpals'); - if (me.amount >= 600) SimWin('With her finger and her thumb'); - if (me.amount >= 700) SimWin('Gotta hand it to you'); - if (me.amount >= 800) SimWin('The devil\'s workshop'); - } else { - for (const j in Game.Objects[me.name].tieredAchievs) { - if (me.amount >= Game.Tiers[Game.Objects[me.name].tieredAchievs[j].tier].achievUnlock) { - SimWin(Game.Objects[me.name].tieredAchievs[j].name); - } - } - } + if (building === 'Cursor') { + if (me.amount >= 1) SimWin('Click'); + if (me.amount >= 2) SimWin('Double-click'); + if (me.amount >= 50) SimWin('Mouse wheel'); + if (me.amount >= 100) SimWin('Of Mice and Men'); + if (me.amount >= 200) SimWin('The Digital'); + if (me.amount >= 300) SimWin('Extreme polydactyly'); + if (me.amount >= 400) SimWin('Dr. T'); + if (me.amount >= 500) SimWin('Thumbs, phalanges, metacarpals'); + if (me.amount >= 600) SimWin('With her finger and her thumb'); + if (me.amount >= 700) SimWin('Gotta hand it to you'); + if (me.amount >= 800) SimWin("The devil's workshop"); + } else { + for (const j in Game.Objects[me.name].tieredAchievs) { + if ( + me.amount >= + Game.Tiers[Game.Objects[me.name].tieredAchievs[j].tier].achievUnlock + ) { + SimWin(Game.Objects[me.name].tieredAchievs[j].name); + } + } + } - const lastAchievementsOwned = SimAchievementsOwned; + const lastAchievementsOwned = SimAchievementsOwned; - CalculateGains(); + CalculateGains(); - CheckOtherAchiev(); + CheckOtherAchiev(); - if (lastAchievementsOwned !== SimAchievementsOwned) { - CalculateGains(); - } + if (lastAchievementsOwned !== SimAchievementsOwned) { + CalculateGains(); + } - return SimCookiesPs - Game.cookiesPs; + return SimCookiesPs - Game.cookiesPs; } diff --git a/src/Sim/SimulationEvents/BuyUpgrades.js b/src/Sim/SimulationEvents/BuyUpgrades.js index 61731cd..e5448bd 100644 --- a/src/Sim/SimulationEvents/BuyUpgrades.js +++ b/src/Sim/SimulationEvents/BuyUpgrades.js @@ -8,7 +8,12 @@ import SimHasGod from '../ReplacedGameFunctions/SimHasGod'; import CopyData from '../SimulationData/CopyData'; import SimWin from '../SimulationData/SimWin'; import { - SimAchievementsOwned, SimCookiesPs, SimObjects, SimPledges, SimUpgrades, SimUpgradesOwned, + SimAchievementsOwned, + SimCookiesPs, + SimObjects, + SimPledges, + SimUpgrades, + SimUpgradesOwned, } from '../VariablesAndData'; /** @@ -17,74 +22,91 @@ import { * @returns {number} out The clicking power */ function MouseCps() { - let add = 0; - if (SimHas('Thousand fingers')) add += 0.1; - if (SimHas('Million fingers')) add *= 5; - if (SimHas('Billion fingers')) add *= 10; - if (SimHas('Trillion fingers')) add *= 20; - if (SimHas('Quadrillion fingers')) add *= 20; - if (SimHas('Quintillion fingers')) add *= 20; - if (SimHas('Sextillion fingers')) add *= 20; - if (SimHas('Septillion fingers')) add *= 20; - if (SimHas('Octillion fingers')) add *= 20; - if (SimHas('Nonillion fingers')) add *= 20; - let num = 0; - for (const i of Object.keys(SimObjects)) { num += SimObjects[i].amount; } - num -= SimObjects.Cursor.amount; - add *= num; + let add = 0; + if (SimHas('Thousand fingers')) add += 0.1; + if (SimHas('Million fingers')) add *= 5; + if (SimHas('Billion fingers')) add *= 10; + if (SimHas('Trillion fingers')) add *= 20; + if (SimHas('Quadrillion fingers')) add *= 20; + if (SimHas('Quintillion fingers')) add *= 20; + if (SimHas('Sextillion fingers')) add *= 20; + if (SimHas('Septillion fingers')) add *= 20; + if (SimHas('Octillion fingers')) add *= 20; + if (SimHas('Nonillion fingers')) add *= 20; + let num = 0; + for (const i of Object.keys(SimObjects)) { + num += SimObjects[i].amount; + } + num -= SimObjects.Cursor.amount; + add *= num; - // Can use SimCookiesPs as function is always called after CM.Sim.CalculateGains() - if (SimHas('Plastic mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Iron mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Titanium mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Adamantium mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Unobtainium mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Eludium mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Wishalloy mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Fantasteel mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Nevercrack mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Armythril mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Technobsidian mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Plasmarble mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Miraculite mouse')) add += SimCookiesPs * 0.01; + // Can use SimCookiesPs as function is always called after CM.Sim.CalculateGains() + if (SimHas('Plastic mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Iron mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Titanium mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Adamantium mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Unobtainium mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Eludium mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Wishalloy mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Fantasteel mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Nevercrack mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Armythril mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Technobsidian mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Plasmarble mouse')) add += SimCookiesPs * 0.01; + if (SimHas('Miraculite mouse')) add += SimCookiesPs * 0.01; - if (SimHas('Fortune #104')) add += SimCookiesPs * 0.01; + if (SimHas('Fortune #104')) add += SimCookiesPs * 0.01; - let mult = 1; - if (SimHas('Santa\'s helpers')) mult *= 1.1; - if (SimHas('Cookie egg')) mult *= 1.1; - if (SimHas('Halo gloves')) mult *= 1.1; - if (SimHas('Dragon claw')) mult *= 1.03; + let mult = 1; + if (SimHas("Santa's helpers")) mult *= 1.1; + if (SimHas('Cookie egg')) mult *= 1.1; + if (SimHas('Halo gloves')) mult *= 1.1; + if (SimHas('Dragon claw')) mult *= 1.03; - if (SimHas('Aura gloves')) { - mult *= 1 + 0.05 * Math.min(Game.Objects.Cursor.level, SimHas('Luminous gloves') ? 20 : 10); - } + if (SimHas('Aura gloves')) { + mult *= + 1 + + 0.05 * + Math.min( + Game.Objects.Cursor.level, + SimHas('Luminous gloves') ? 20 : 10, + ); + } - mult *= SimEff('click'); - if (SimObjects.Temple.minigameLoaded) { - if (SimHasGod) { - const godLvl = SimHasGod('labor'); - if (godLvl === 1) mult *= 1.15; - else if (godLvl === 2) mult *= 1.1; - else if (godLvl === 3) mult *= 1.05; - } - } + mult *= SimEff('click'); + if (SimObjects.Temple.minigameLoaded) { + if (SimHasGod) { + const godLvl = SimHasGod('labor'); + if (godLvl === 1) mult *= 1.15; + else if (godLvl === 2) mult *= 1.1; + else if (godLvl === 3) mult *= 1.05; + } + } - for (const i of Object.keys(Game.buffs)) { - if (typeof Game.buffs[i].multClick !== 'undefined') mult *= Game.buffs[i].multClick; - } + for (const i of Object.keys(Game.buffs)) { + if (typeof Game.buffs[i].multClick !== 'undefined') + mult *= Game.buffs[i].multClick; + } - // if (CM.Sim.auraMult('Dragon Cursor')) mult*=1.05; - mult *= 1 + SimAuraMult('Dragon Cursor') * 0.05; + // if (CM.Sim.auraMult('Dragon Cursor')) mult*=1.05; + mult *= 1 + SimAuraMult('Dragon Cursor') * 0.05; - // No need to make this function a CM function - let out = mult * Game.ComputeCps(1, SimHas('Reinforced index finger') + SimHas('Carpal tunnel prevention cream') + SimHas('Ambidextrous'), add); + // No need to make this function a CM function + let out = + mult * + Game.ComputeCps( + 1, + SimHas('Reinforced index finger') + + SimHas('Carpal tunnel prevention cream') + + SimHas('Ambidextrous'), + add, + ); - out = Game.runModHookOnValue('cookiesPerClick', out); + out = Game.runModHookOnValue('cookiesPerClick', out); - if (Game.hasBuff('Cursed finger')) out = Game.buffs['Cursed finger'].power; + if (Game.hasBuff('Cursed finger')) out = Game.buffs['Cursed finger'].power; - return out; + return out; } /** @@ -94,45 +116,51 @@ function MouseCps() { * @returns {[{number, number}]} The bonus income of the upgrade and the difference in MouseCPS */ export default function BuyUpgradesBonusIncome(upgrade) { - if (Game.Upgrades[upgrade].pool === 'toggle' || (Game.Upgrades[upgrade].bought === 0 && Game.Upgrades[upgrade].unlocked && Game.Upgrades[upgrade].pool !== 'prestige')) { - CopyData(); - if (SimUpgrades[upgrade].name === 'Shimmering veil [on]') { - SimUpgrades['Shimmering veil [off]'].bought = 0; - } else if (SimUpgrades[upgrade].name === 'Golden switch [on]') { - SimUpgrades['Golden switch [off]'].bought = 0; - } else { - SimUpgrades[upgrade].bought = (SimUpgrades[upgrade].bought + 1) % 2; - } - const me = SimUpgrades[upgrade]; - if (Game.CountsAsUpgradeOwned(Game.Upgrades[upgrade].pool)) SimUpgradesOwned++; + if ( + Game.Upgrades[upgrade].pool === 'toggle' || + (Game.Upgrades[upgrade].bought === 0 && + Game.Upgrades[upgrade].unlocked && + Game.Upgrades[upgrade].pool !== 'prestige') + ) { + CopyData(); + if (SimUpgrades[upgrade].name === 'Shimmering veil [on]') { + SimUpgrades['Shimmering veil [off]'].bought = 0; + } else if (SimUpgrades[upgrade].name === 'Golden switch [on]') { + SimUpgrades['Golden switch [off]'].bought = 0; + } else { + SimUpgrades[upgrade].bought = (SimUpgrades[upgrade].bought + 1) % 2; + } + const me = SimUpgrades[upgrade]; + if (Game.CountsAsUpgradeOwned(Game.Upgrades[upgrade].pool)) + SimUpgradesOwned++; - if (upgrade === 'Elder Pledge') { - SimPledges++; - if (SimPledges > 0) SimWin('Elder nap'); - if (SimPledges >= 5) SimWin('Elder slumber'); - } else if (upgrade === 'Elder Covenant') { - SimWin('Elder calm'); - } else if (upgrade === 'Prism heart biscuits') { - SimWin('Lovely cookies'); - } else if (upgrade === 'Heavenly key') { - SimWin('Wholesome'); - } + if (upgrade === 'Elder Pledge') { + SimPledges++; + if (SimPledges > 0) SimWin('Elder nap'); + if (SimPledges >= 5) SimWin('Elder slumber'); + } else if (upgrade === 'Elder Covenant') { + SimWin('Elder calm'); + } else if (upgrade === 'Prism heart biscuits') { + SimWin('Lovely cookies'); + } else if (upgrade === 'Heavenly key') { + SimWin('Wholesome'); + } - const lastAchievementsOwned = SimAchievementsOwned; + const lastAchievementsOwned = SimAchievementsOwned; - CalculateGains(); + CalculateGains(); - CheckOtherAchiev(); + CheckOtherAchiev(); - if (lastAchievementsOwned !== SimAchievementsOwned) { - CalculateGains(); - } + if (lastAchievementsOwned !== SimAchievementsOwned) { + CalculateGains(); + } - const diffMouseCPS = MouseCps() - Game.computedMouseCps; - if (diffMouseCPS) { - return [SimCookiesPs - Game.cookiesPs, diffMouseCPS]; - } - return [SimCookiesPs - Game.cookiesPs]; - } - return []; + const diffMouseCPS = MouseCps() - Game.computedMouseCps; + if (diffMouseCPS) { + return [SimCookiesPs - Game.cookiesPs, diffMouseCPS]; + } + return [SimCookiesPs - Game.cookiesPs]; + } + return []; } diff --git a/src/Sim/SimulationEvents/ResetAscension.js b/src/Sim/SimulationEvents/ResetAscension.js index 8525e67..86be138 100644 --- a/src/Sim/SimulationEvents/ResetAscension.js +++ b/src/Sim/SimulationEvents/ResetAscension.js @@ -5,7 +5,10 @@ import CheckOtherAchiev from '../Calculations/CheckOtherAchiev'; import CopyData from '../SimulationData/CopyData'; import SimWin from '../SimulationData/SimWin'; import { - SimAchievementsOwned, SimCookiesPs, SimPrestige, SimUpgrades, + SimAchievementsOwned, + SimCookiesPs, + SimPrestige, + SimUpgrades, } from '../VariablesAndData'; /** @@ -15,65 +18,85 @@ import { * @returns {number} ResetCPS The CPS difference after reset */ export default function ResetBonus(newHeavenlyChips) { - // Calculate CPS with all Heavenly upgrades - let curCPS = Game.cookiesPs; + // Calculate CPS with all Heavenly upgrades + let curCPS = Game.cookiesPs; - CopyData(); + CopyData(); - if (SimUpgrades['Heavenly key'].bought === 0) { - SimUpgrades['Heavenly chip secret'].bought = 1; - SimUpgrades['Heavenly cookie stand'].bought = 1; - SimUpgrades['Heavenly bakery'].bought = 1; - SimUpgrades['Heavenly confectionery'].bought = 1; - SimUpgrades['Heavenly key'].bought = 1; + if (SimUpgrades['Heavenly key'].bought === 0) { + SimUpgrades['Heavenly chip secret'].bought = 1; + SimUpgrades['Heavenly cookie stand'].bought = 1; + SimUpgrades['Heavenly bakery'].bought = 1; + SimUpgrades['Heavenly confectionery'].bought = 1; + SimUpgrades['Heavenly key'].bought = 1; - CalculateGains(); + CalculateGains(); - curCPS = SimCookiesPs; + curCPS = SimCookiesPs; - CopyData(); - } + CopyData(); + } - if (CacheRealCookiesEarned >= 1000000) SimWin('Sacrifice'); - if (CacheRealCookiesEarned >= 1000000000) SimWin('Oblivion'); - if (CacheRealCookiesEarned >= 1000000000000) SimWin('From scratch'); - if (CacheRealCookiesEarned >= 1000000000000000) SimWin('Nihilism'); - if (CacheRealCookiesEarned >= 1000000000000000000) SimWin('Dematerialize'); - if (CacheRealCookiesEarned >= 1000000000000000000000) SimWin('Nil zero zilch'); - if (CacheRealCookiesEarned >= 1000000000000000000000000) SimWin('Transcendence'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000) SimWin('Obliterate'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000) SimWin('Negative void'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000) SimWin('To crumbs, you say?'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000) SimWin('You get nothing'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000) SimWin('Humble rebeginnings'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000) SimWin('The end of the world'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000) SimWin('Oh, you\'re back'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000) SimWin('Lazarus'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000) SimWin('Smurf account'); - if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000000000) SimWin('If at first you don\'t succeed'); + if (CacheRealCookiesEarned >= 1000000) SimWin('Sacrifice'); + if (CacheRealCookiesEarned >= 1000000000) SimWin('Oblivion'); + if (CacheRealCookiesEarned >= 1000000000000) SimWin('From scratch'); + if (CacheRealCookiesEarned >= 1000000000000000) SimWin('Nihilism'); + if (CacheRealCookiesEarned >= 1000000000000000000) SimWin('Dematerialize'); + if (CacheRealCookiesEarned >= 1000000000000000000000) + SimWin('Nil zero zilch'); + if (CacheRealCookiesEarned >= 1000000000000000000000000) + SimWin('Transcendence'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000) + SimWin('Obliterate'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000000) + SimWin('Negative void'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000000000) + SimWin('To crumbs, you say?'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000) + SimWin('You get nothing'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000) + SimWin('Humble rebeginnings'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000) + SimWin('The end of the world'); + if (CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000) + SimWin("Oh, you're back"); + if ( + CacheRealCookiesEarned >= 1000000000000000000000000000000000000000000000000 + ) + SimWin('Lazarus'); + if ( + CacheRealCookiesEarned >= + 1000000000000000000000000000000000000000000000000000 + ) + SimWin('Smurf account'); + if ( + CacheRealCookiesEarned >= + 1000000000000000000000000000000000000000000000000000000 + ) + SimWin("If at first you don't succeed"); - SimUpgrades['Heavenly chip secret'].bought = 1; - SimUpgrades['Heavenly cookie stand'].bought = 1; - SimUpgrades['Heavenly bakery'].bought = 1; - SimUpgrades['Heavenly confectionery'].bought = 1; - SimUpgrades['Heavenly key'].bought = 1; + SimUpgrades['Heavenly chip secret'].bought = 1; + SimUpgrades['Heavenly cookie stand'].bought = 1; + SimUpgrades['Heavenly bakery'].bought = 1; + SimUpgrades['Heavenly confectionery'].bought = 1; + SimUpgrades['Heavenly key'].bought = 1; - SimPrestige = newHeavenlyChips; + SimPrestige = newHeavenlyChips; - const lastAchievementsOwned = SimAchievementsOwned; + const lastAchievementsOwned = SimAchievementsOwned; - CalculateGains(); + CalculateGains(); - CheckOtherAchiev(); + CheckOtherAchiev(); - if (lastAchievementsOwned !== SimAchievementsOwned) { - CalculateGains(); - } + if (lastAchievementsOwned !== SimAchievementsOwned) { + CalculateGains(); + } - const ResetCPS = SimCookiesPs - curCPS; + const ResetCPS = SimCookiesPs - curCPS; - // Reset Pretige level after calculation as it is used in CM.Sim.CalculateGains() so can't be local - SimPrestige = Game.prestige; + // Reset Pretige level after calculation as it is used in CM.Sim.CalculateGains() so can't be local + SimPrestige = Game.prestige; - return ResetCPS; + return ResetCPS; } diff --git a/src/Sim/SimulationEvents/SellBuilding.js b/src/Sim/SimulationEvents/SellBuilding.js index 92d9fce..81e01e7 100644 --- a/src/Sim/SimulationEvents/SellBuilding.js +++ b/src/Sim/SimulationEvents/SellBuilding.js @@ -12,23 +12,32 @@ import SimModifyBuildingPrice from '../ReplacedGameFunctions/SimModifyBuidlingPr * @param {number} noSim 1 of 0 depending on if function is called from CM.Sim * @returns {number} moni Total price gained */ -export default function BuildingSell(build, basePrice, start, free, amount, noSim) { - // Calculate money gains from selling buildings - // If noSim is set, use Game methods to compute price instead of Sim ones. - noSim = typeof noSim === 'undefined' ? 0 : noSim; - let moni = 0; - if (amount === -1) amount = start; - if (!amount) amount = Game.buyBulk; - for (let i = 0; i < amount; i++) { - let price = basePrice * Game.priceIncrease ** Math.max(0, start - free); - price = noSim ? Game.modifyBuildingPrice(build, price) : SimModifyBuildingPrice(build, price); - price = Math.ceil(price); - const giveBack = noSim ? build.getSellMultiplier() : SimGetSellMultiplier(); - price = Math.floor(price * giveBack); - if (start > 0) { - moni += price; - start--; - } - } - return moni; +export default function BuildingSell( + build, + basePrice, + start, + free, + amount, + noSim, +) { + // Calculate money gains from selling buildings + // If noSim is set, use Game methods to compute price instead of Sim ones. + noSim = typeof noSim === 'undefined' ? 0 : noSim; + let moni = 0; + if (amount === -1) amount = start; + if (!amount) amount = Game.buyBulk; + for (let i = 0; i < amount; i++) { + let price = basePrice * Game.priceIncrease ** Math.max(0, start - free); + price = noSim + ? Game.modifyBuildingPrice(build, price) + : SimModifyBuildingPrice(build, price); + price = Math.ceil(price); + const giveBack = noSim ? build.getSellMultiplier() : SimGetSellMultiplier(); + price = Math.floor(price * giveBack); + if (start > 0) { + moni += price; + start--; + } + } + return moni; } diff --git a/src/Sim/SimulationEvents/SellBuildingForChoEgg.js b/src/Sim/SimulationEvents/SellBuildingForChoEgg.js index 014be12..8f0e5b3 100644 --- a/src/Sim/SimulationEvents/SellBuildingForChoEgg.js +++ b/src/Sim/SimulationEvents/SellBuildingForChoEgg.js @@ -1,7 +1,10 @@ /* eslint-disable no-unused-vars */ import CopyData from '../SimulationData/CopyData'; import { - SimBuildingsOwned, SimDragonAura, SimDragonAura2, SimObjects, + SimBuildingsOwned, + SimDragonAura, + SimDragonAura2, + SimObjects, } from '../VariablesAndData'; import BuildingSell from './SellBuilding'; @@ -11,38 +14,44 @@ import BuildingSell from './SellBuilding'; * @returns {number} sellTotal The maximum cookies to be earned */ export default function SellBuildingsForChoEgg() { - let sellTotal = 0; + let sellTotal = 0; - CopyData(); + CopyData(); - // Change auras to Earth Shatterer + Reality bending to optimize money made by selling - let buildingsToSacrifice = 2; - if (SimDragonAura === 5 || SimDragonAura === 18) { - --buildingsToSacrifice; - } - if (SimDragonAura2 === 5 || SimDragonAura2 === 18) { - --buildingsToSacrifice; - } - SimDragonAura = 5; - SimDragonAura2 = 18; + // Change auras to Earth Shatterer + Reality bending to optimize money made by selling + let buildingsToSacrifice = 2; + if (SimDragonAura === 5 || SimDragonAura === 18) { + --buildingsToSacrifice; + } + if (SimDragonAura2 === 5 || SimDragonAura2 === 18) { + --buildingsToSacrifice; + } + SimDragonAura = 5; + SimDragonAura2 = 18; - // Sacrifice highest buildings for the aura switch - for (let i = 0; i < buildingsToSacrifice; ++i) { - let highestBuilding = 'Cursor'; - for (const j in SimObjects) { - if (SimObjects[j].amount > 0) { - highestBuilding = j; - } - } - SimObjects[highestBuilding].amount--; - SimBuildingsOwned--; - } + // Sacrifice highest buildings for the aura switch + for (let i = 0; i < buildingsToSacrifice; ++i) { + let highestBuilding = 'Cursor'; + for (const j in SimObjects) { + if (SimObjects[j].amount > 0) { + highestBuilding = j; + } + } + SimObjects[highestBuilding].amount--; + SimBuildingsOwned--; + } - // Get money made by selling all remaining buildings - for (const i of Object.keys(SimObjects)) { - const me = SimObjects[i]; - sellTotal += BuildingSell(Game.Objects[me.name], Game.Objects[i].basePrice, me.amount, Game.Objects[i].free, me.amount); - } + // Get money made by selling all remaining buildings + for (const i of Object.keys(SimObjects)) { + const me = SimObjects[i]; + sellTotal += BuildingSell( + Game.Objects[me.name], + Game.Objects[i].basePrice, + me.amount, + Game.Objects[i].free, + me.amount, + ); + } - return sellTotal; + return sellTotal; }