\"\r\n].join(\"\\n\");\r\n\r\nlet pSpan = \"\";\r\n\r\n/* let benchHKCCBegin, benchHKCCEnd; */\r\n\r\n/* -------------------------- Functions ------------------------------------------------------------------------------------------- */\r\n\r\n/**\r\n * Main Function. Checks Hollow Knight game completion by analyzing the save file\r\n * @param {object} jsonObject Decoded save data in JavaScript Object Notation form (JSON)\r\n */\r\nfunction HKCheckCompletion(jsonObject, benchStart = performance.now()) {\r\n\r\n // start benchmark\r\n // benchHKCCBegin = new Date();\r\n benchmarkTimes.CheckCompletion.timeStart = benchStart;\r\n\r\n let HKPlayerData;\r\n let HKWorldItems;\r\n let HKSceneData;\r\n\r\n if (jsonObject.hasOwnProperty(\"playerData\")) {\r\n HKPlayerData = jsonObject.playerData;\r\n } else {\r\n HK.saveAnalyzed = false;\r\n return false;\r\n }\r\n\r\n if (jsonObject.hasOwnProperty(\"sceneData\")) {\r\n HKSceneData = jsonObject.sceneData;\r\n if (jsonObject.sceneData.hasOwnProperty(\"persistentBools\")) {\r\n HKWorldItems = jsonObject.sceneData.persistentBools;\r\n } else {\r\n HK.saveAnalyzed = false;\r\n return false;\r\n }\r\n } else {\r\n HK.saveAnalyzed = false;\r\n return false;\r\n }\r\n\r\n // Generate database entries\r\n // console.log(GenerateDatabaseEntries(HKWorldItems, \"Shiny\", \"Note\", \"corniferNote\", \"Cornifer#Locations\"));\r\n\r\n /* Initialize DataChecker object for checking status of items in save file */\r\n let saveDataChecker = new DataChecker(jsonObject);\r\n\r\n // Pre-Cleaning and filling initial data (h2, id) needed for PrepareHTMLString()\r\n // PrefillHTML(HK.sections);\r\n\r\n // Prevents adding current percent data after each function call and resets what the analyzing has done to the original object. Prevents wrong data display after subsequent save analyzing.\r\n ResetCompletion(HK);\r\n\r\n // ============================================================================================================================= //\r\n\r\n // ---------------- Time Played ----------------------------------------------------------------------------------------------- //\r\n\r\n CheckPlayTime(HK.sections.intro, HKPlayerData.playTime);\r\n\r\n // ---------------- Game Completion Status ------------------------------------------------------------------------------------ //\r\n\r\n CheckCompletionPercent(HK.sections.intro, HKPlayerData);\r\n\r\n // ---------------- Game Completion Status ------------------------------------------------------------------------------------ //\r\n\r\n CheckSaveFileVersion(HK.sections.intro, HKPlayerData.version);\r\n\r\n // ---------------- Health Masks ---------------------------------------------------------------------------------------------- //\r\n\r\n CheckHealthMasks(HK.sections.intro, HKPlayerData.maxHealthBase, HKPlayerData.permadeathMode);\r\n\r\n // ---------------- Silk Bars ------------------------------------------------------------------------------------------------- //\r\n\r\n CheckSilkBar(HK.sections.intro, HKPlayerData.silkMax);\r\n\r\n // ---------------- Check Crests ------------------------------------------------------------------------------------- //\r\n\r\n CheckCrests(HK.sections.intro, HKPlayerData);\r\n\r\n // ---------------- Rosary Amount ------------------------------------------------------------------------------------------------ //\r\n\r\n CheckRosary(HK.sections.intro, HKPlayerData.geo, HKPlayerData.HeroCorpseMoneyPool);\r\n\r\n // ---------------- Shell Shards Amount ------------------------------------------------------------------------------------------------ //\r\n\r\n CheckshellShards(HK.sections.intro, HKPlayerData.ShellShards);\r\n\r\n // ---------------- Crests Crests Crests Crests Crests Crests ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.crests, HK.sections.crests.entries, HKPlayerData);\r\n\r\n // ---------------- Needle Upgrades --------------------------------------------------------------------------------------------- //\r\n\r\n CheckNeedleUpgrades(HK.sections.NeedleUpgrades, HK.sections.NeedleUpgrades.entries, HKPlayerData);\r\n\r\n // ---------------- Silk Heart --------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.silkHeart, HK.sections.silkHeart.entries, HKPlayerData);\r\n\r\n // ---------------- Tools ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.redTools, HK.sections.redTools.entries, HKPlayerData.Tools.savedData);\r\n CheckIfDataTrue(HK.sections.blueTools, HK.sections.blueTools.entries, HKPlayerData.Tools.savedData);\r\n CheckIfDataTrue(HK.sections.yellowTools, HK.sections.yellowTools.entries, HKPlayerData.Tools.savedData);\r\n\r\n // ---------------- Equipment (Abilities) ------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.equipment, HK.sections.equipment.entries, HKPlayerData.Tools.savedData);\r\n\r\n // ---------------- skills ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.skills, HK.sections.skills.entries, HKPlayerData);\r\n\r\n // ---------------- Miscellaneous ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.miscellaneous, HK.sections.miscellaneous.entries, HKPlayerData);\r\n\r\n // ---------------- Mask Shards ----------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.maskShards, HK.sections.maskShards.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Spool Fragments ------------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.spoolFragments, HK.sections.spoolFragments.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Crafting Kit Upgrades ------------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.craftingKitUpgrades, HK.sections.craftingKitUpgrades.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Tool Pouch Upgrades ------------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.toolPouchUpgrades, HK.sections.toolPouchUpgrades.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- flea ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.flea, HK.sections.flea.entries, HKPlayerData);\r\n\r\n \r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n/*\r\n // ---------------- Bosses (Base Game) ---------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.bosses, HK.sections.bosses.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Colosseum of Fools ---------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.colosseum, HK.sections.colosseum.entries, HKPlayerData);\r\n\r\n // ---------------- Dreamers -------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.dreamers, HK.sections.dreamers.entries, HKPlayerData);\r\n\r\n // ---------------- Dream Nail and Essence ------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.dreamNail, HK.sections.dreamNail.entries, HKPlayerData);\r\n\r\n\r\n // ---------------- Nail Arts ------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.nailArts, HK.sections.nailArts.entries, HKPlayerData);\r\n\r\n // ---------------- Warrior Dreams -------------------------------------------------------------------------------------------- //\r\n\r\n CheckWarriorDreams(HK.sections.warriorDreams, HK.sections.warriorDreams.entries, HKPlayerData);\r\n\r\n // ---------------- Grimm Troupe Content Pack --------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.grimmTroupe, HK.sections.grimmTroupe.entries, HKPlayerData);\r\n\r\n // ---------------- Lifeblood Content Pack ------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.lifeblood, HK.sections.lifeblood.entries, HKPlayerData);\r\n\r\n // ---------------- Godmaster Content Pack ------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.godmaster, HK.sections.godmaster.entries, HKPlayerData);\r\n*/\r\n // ------------------------- Hunter's Journal --------------------------------------------------------------------------------- //\r\n /* Must be checked before Statistics (for correct entry numbers) */\r\n\r\n CheckHuntersJournal(HK, \"huntersJournal\", HKPlayerData);\r\n //CheckHuntersJournal(HK, \"huntersJournalOptional\", HKPlayerData);\r\n\r\n/*\r\n \r\n // ------------------------- Essentials % -> Collectibles --------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsCollectibles, jsonObject);\r\n\r\n // ------------------------- Essentials % -> Stag Stations -------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsStagStations, jsonObject);\r\n\r\n // ------------------------- Essentials % -> World Interactions -------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsWorldInteractions, jsonObject);\r\n\r\n // ------------------------- Essentials % -> Bosses --------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsBosses, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> Collectibles --------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsCollectibles, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> Maps ----------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsMaps, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> World Interactions --------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsWorldInteractions, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> Bosses ----------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsBosses, jsonObject);\r\n\r\n // ------------------------- Collectibles -> Charm Notches ------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.charmNotches, jsonObject);\r\n\r\n // ------------------------- Collectibles -> Grubs ---------------------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.grubs);\r\n\r\n // ------------------------- Collectibles -> Whispering Roots ---------------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.whisperingRoots);\r\n\r\n // ------------------------- Collectibles -> Relics - Wanderer's Journal ------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsWanderersJournal);\r\n\r\n // ------------------------- Collectibles -> Relics - Hallownest Seal ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsHallownestSeal);\r\n\r\n // ------------------------- Collectibles -> Relics - King's Idol ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsKingsIdol);\r\n\r\n // ------------------------- Collectibles -> Relics - Arcane Egg ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsArcaneEgg);\r\n\r\n // ------------------------- Collectibles -> Rancid Eggs ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.rancidEggs);\r\n\r\n // ------------------------- Collectibles -> Items ---------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.items, jsonObject);\r\n\r\n // ------------------------- Geo Caches -> Geo Chests ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.geoChests);\r\n\r\n // ------------------------- Geo Caches -> Geo Rocks ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkGeoRocks(HK.sections.geoRocks);\r\n\r\n // ------------------------- Secrets -> World Interactions ---------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.worldInteractions, jsonObject);\r\n\r\n // ------------------------- Secrets -> Secret Rooms ---------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.secretRooms, jsonObject);\r\n\r\n // ------------------------- Secrets -> Cornifer's Notes ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.corniferNotes);\r\n\r\n // ------------------------- Game Statistics ---------------------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.statistics, jsonObject);\r\n\r\n // ------------------------- Godhome Statistics ------------------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.godhomeStatistics, jsonObject);\r\n\r\n */\r\n\r\n /* ------------------------- Pantheon Statistics ------------------------------------------------------------------------------ */\r\n\r\n /*CheckPantheon(HK, \"pantheonOfTheArtist\", HKPlayerData);\r\n CheckPantheon(HK, \"pantheonOfTheSage\", HKPlayerData);\r\n CheckPantheon(HK, \"pantheonOfTheKnight\", HKPlayerData);\r\n CheckPantheon(HK, \"pantheonOfHallownest\", HKPlayerData);\r\n\r\n CheckHallOfGods(HK, HKPlayerData);*/\r\n\r\n // ------------------------- Hints ---------------------------------------------------------------------------------------------- //\r\n\r\n CheckHintsTrue(HK.sections.hints, HK.sections.hints.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ------------------------- Extended game completion check --------------------------------------------------------------------- //\r\n\r\n /* Percent completion is filled inside GenerateInnerHTML() using CompletionFill() */\r\n CheckExtendedCompletion(HK);\r\n\r\n // ------------------------- Indicate that the save file was loaded and analyzed correctly -------------------------------------- //\r\n\r\n HK.saveAnalyzed = true;\r\n\r\n // ------------------------- Generate everything on the page with updated values ------------------------------------------------ //\r\n\r\n GenerateInnerHTML(HK);\r\n\r\n // Prevents wrong checkbox behaviour (must run after everything is finished)\r\n CheckboxHintsToggle();\r\n CheckboxSpoilersToggle();\r\n\r\n /* focus the text area after analyzing the save, without scrolling the document (too slow) */\r\n /* document.getElementById(\"save-area\").focus({preventScroll: true}); */\r\n\r\n // finish and show benchmark\r\n // benchHKCCEnd = new Date();\r\n benchmarkTimes.CheckCompletion.timeEnd = performance.now();\r\n // console.info(\"HKCheckCompletion() time (ms) =\", benchHKCCEnd - benchHKCCBegin);\r\n\r\n // Benchmark(benchmarkTimes);\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Generates and appends a new entry inside the HTML of a given ID\r\n * @param {object} section object containing div ID and h2 title of the HTML element\r\n * @param {string} textPrefix Main name of the entry\r\n * @param {string} textSuffix Optional suffix after the main name (spoilers: locations, costs etc.)\r\n */\r\nfunction PrepareHTMLString(section, textPrefix = \"Unknown Completion Element: \", textSuffix = \"Unknown Description Element\", wiki = \"\") {\r\n\r\n let icon = completionSymbol;\r\n let b = [\"\", \"\"];\r\n if (!textPrefix.length) b = [\"\", \"\"];\r\n if (wiki.length) b = [``, \"\"];\r\n\r\n let span = [\"\", \"\"];\r\n let spoilerSpan = [\"\", \"\"];\r\n if (section.id === \"hk-hints\") {\r\n span[0] = \"\";\r\n icon = \"\";\r\n }\r\n\r\n // let dash = \"\";\r\n if (textSuffix.length && textPrefix.length) textSuffix = \"— \" + textSuffix;\r\n if (textPrefix.includes(\"\")) textSuffix = `${textSuffix}`;\r\n\r\n // return divStart + icon + b[0] + textPrefix + b[1] + span[0] + pSpan + spoilerSpan[0] + dash + textSuffix + spoilerSpan[1] + span[1] + divEnd;\r\n return `\r\n ${divStart}\r\n ${icon}${b[0]}${textPrefix}${b[1]}${span[0]}${pSpan}${spoilerSpan[0]}${textSuffix}${spoilerSpan[1]}${span[1]}\r\n ${divEnd}\r\n `;\r\n}\r\n\r\n/**\r\n * Fills HTML with the playTime value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} playTime Number of total gameplay time in seconds\r\n */\r\nfunction CheckPlayTime(section, playTime) {\r\n\r\n let seconds = Math.floor(playTime);\r\n let minutes = Math.floor((seconds / 60) % 60);\r\n let hours = Math.floor(seconds / 3600);\r\n let sec = Math.floor(seconds % 60);\r\n\r\n section.entries.timePlayed.timeH = hours;\r\n section.entries.timePlayed.timeM = minutes;\r\n section.entries.timePlayed.timeS = sec;\r\n\r\n if (sec < 10) sec = \"0\" + sec;\r\n if (minutes < 10) minutes = \"0\" + minutes;\r\n\r\n let textFill = \"Time Played:\" + pSpan + \"\" + hours + \" h \" + minutes + \" min \" + sec + \" sec\";\r\n\r\n section.entries.timePlayed.spoiler = hours + \" h \" + minutes + \" min \" + sec + \" sec\";\r\n\r\n // document.getElementById(section.id).innerHTML += divStart + SYMBOL_CLOCK + textFill + divEnd;\r\n}\r\n\r\n/**\r\n * Searches for completionPercentage in playerData and fills HTML with the value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} completionPercentage Number of completion percentage\r\n */\r\nfunction CheckCompletionPercent(section, playerData) {\r\n\r\n let completionPercentage = Math.round(playerData.completionPercentage);\r\n let maxPercent = 0;\r\n\r\n\r\n // Normal (current) game version behaviour: 112%\r\n section.maxPercent = section.maxPercentDefault;\r\n maxPercent = section.maxPercentDefault;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterDefault;\r\n\r\n section.percent = completionPercentage;\r\n section.entries.gameCompletion.spoiler = completionPercentage;\r\n/*\r\n // Lifeblood behaviour: 107%\r\n if (!playerData.hasOwnProperty(\"hasGodfinder\")) {\r\n\r\n section.maxPercent = section.maxPercentLifeblood;\r\n maxPercent = section.maxPercentLifeblood;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterLifeblood;\r\n }\r\n\r\n // Grimm Troupe bahaviour: 106%\r\n if (!playerData.hasOwnProperty(\"killedHiveKnight\")) {\r\n\r\n section.maxPercent = section.maxPercentGrimmTroupe;\r\n maxPercent = section.maxPercentGrimmTroupe;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterGrimmTroupe;\r\n }\r\n*/\r\n\r\n /* Base Game behaviour with no Content Packs: 100% */\r\n //if (!playerData.hasOwnProperty(\"gotCharm_37\")) {\r\n\r\n section.maxPercent = section.maxPercentBaseGame;\r\n maxPercent = section.maxPercentBaseGame;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterBaseGame;\r\n //}\r\n\r\n (completionPercentage >= maxPercent) ? SetIconGreen(section, \"gameCompletion\"): SetIconRed(section, \"gameCompletion\");\r\n\r\n}\r\n\r\n/**\r\n * Calculates the amount of all green ticks and total entries. Saves them to database for later display.\r\n * @param {object} db reference to the main HK database\r\n */\r\nfunction CheckExtendedCompletion(db) {\r\n\r\n let sections = db.sections;\r\n let entries = {};\r\n let gameCompletionExtended = db.sections.intro.entries.gameCompletionExtended;\r\n let intro = db.sections.intro;\r\n\r\n let amount = 0;\r\n let max = 0;\r\n\r\n for (let section in sections) {\r\n\r\n entries = sections[section].entries;\r\n\r\n switch (section) {\r\n\r\n /* Ignore these sections totally */\r\n case \"intro\":\r\n case \"hints\":\r\n case \"huntersJournal\":\r\n //case \"huntersJournalOptional\":\r\n //case \"flea\":\r\n\r\n continue;\r\n\r\n default:\r\n\r\n // console.info(\"Section loop:\", section);\r\n\r\n for (let entry in entries) {\r\n\r\n // console.info(\"Entry loop:\", entry);\r\n\r\n switch (entry) {\r\n\r\n /* Do not count (ignore) these entries at all */\r\n case \"oldNail\":\r\n case \"pantheonMaster\": // Pantheons are counted in Godmaster section\r\n case \"pantheonArtist\":\r\n case \"pantheonSage\":\r\n case \"pantheonKnight\":\r\n case \"pantheonHallownest\":\r\n case \"geoPool\":\r\n case \"dreamOrbs\":\r\n case \"charmsOwned\":\r\n case \"nailDamage\":\r\n case \"jinnEggsSold\":\r\n case \"xunFlowerBrokeTimes\":\r\n case \"itemsDiscovered\":\r\n case \"stagStationsOpened\":\r\n case \"areaMaps\":\r\n case \"killedMegaMossCharger\":\r\n case \"killedBigBuzzer\":\r\n case \"killedOblobble\":\r\n case \"killedLobsterLancer\":\r\n case \"killedFlukeMother\":\r\n case \"killedNailBros\":\r\n case \"killedPaintmaster\":\r\n case \"killedNailsage\":\r\n case \"killedHollowKnightPrime\":\r\n case \"killsBigBuzzer\":\r\n case \"whiteDefenderDefeated\":\r\n case \"greyPrinceDefeated\":\r\n case \"killedHollowKnight\":\r\n case \"killedFinalBoss\":\r\n // Collectibles are counted in their own sections\r\n // falls through\r\n case \"grubsCollected\":\r\n case \"whisperingRoots\":\r\n case \"relicsWandererJournal\":\r\n case \"relicsHallownestSeal\":\r\n case \"relicsKingsIdol\":\r\n case \"relicsArcaneEgg\":\r\n case \"soldTrinket1\":\r\n case \"soldTrinket2\":\r\n case \"soldTrinket3\":\r\n case \"soldTrinket4\":\r\n case \"relicsSoldTotalGeo\":\r\n case \"bankerBalance\":\r\n case \"rancidEggs\":\r\n case \"geoRocks\":\r\n case \"ore\":\r\n case \"simpleKeys\":\r\n\r\n // console.info(\"Ignored:\", entry);\r\n\r\n continue;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n\r\n switch (entry) {\r\n\r\n /* Do not add these to total and done (they will be added as amount/max later instead) */\r\n case \"grubsCollected\":\r\n case \"grubRewards\":\r\n case \"areaMaps\":\r\n case \"journalEntriesCompleted\":\r\n case \"journalNotesCompleted\":\r\n case \"whisperingRoots\":\r\n case \"relicsWandererJournal\":\r\n case \"relicsHallownestSeal\":\r\n case \"relicsKingsIdol\":\r\n case \"relicsArcaneEgg\":\r\n case \"geoRocks\":\r\n case \"whiteDefenderDefeats\":\r\n case \"greyPrinceDefeats\":\r\n\r\n /* console.info(\"Ignored:\", entry); */\r\n\r\n break;\r\n\r\n default:\r\n\r\n if (entries[entry].icon !== \"none\") {\r\n intro.extendedCompletionTotal++;\r\n\r\n // console.info(\"Counted Total:\", entry);\r\n } /* else {\r\n console.info(\"Not Counted Total:\", entry);\r\n } */\r\n\r\n /* Missable Arcane Egg exception, subtract from total */\r\n if (entries[entry].icon === \"none\" && entry === \"arcaneEggLifebloodCoreRoom\") {\r\n\r\n /* console.info(`${entry} has passed:`, entries[entry].icon); */\r\n\r\n /* When got the Lifeblood Core charm, but didn't pick up the Arcane Egg */\r\n if (sections.charms.entries.gotCharm_9.icon === \"green\") {\r\n intro.extendedCompletionTotal--;\r\n\r\n /* console.info(`${entry} completion Total subtracted`); */\r\n }\r\n }\r\n\r\n switch (entries[entry].icon) {\r\n\r\n case \"red\":\r\n case \"none\":\r\n case \"partial\":\r\n case \"partialJournal\":\r\n continue;\r\n\r\n default:\r\n\r\n intro.extendedCompletionDone++;\r\n\r\n // console.info(\"Counted (Done):\", entry);\r\n }\r\n }\r\n\r\n /* Skip disabled entries entirely from counting (subtract a point from Total) */\r\n if (entries[entry].hasOwnProperty(\"disabled\") && entries[entry].disabled === true) {\r\n\r\n /* Do not subtract a point for WD/GPZ Defeats nr if they were not added to Total in the first place */\r\n if (entry === \"greyPrinceDefeats\" || entry === \"whiteDefenderDefeats\") {\r\n continue;\r\n }\r\n\r\n intro.extendedCompletionTotal--;\r\n\r\n // console.info(\"Subtracted Total:\", entry);\r\n }\r\n /* Counting amount/max for several entries */\r\n else if (entries[entry].hasOwnProperty(\"amount\") && entries[entry].hasOwnProperty(\"max\")) {\r\n\r\n /* Skip counting 3000 Fountain Geo, too much */\r\n if (entry === \"fountainGeo\") {\r\n continue; // continue to next entry loop\r\n }\r\n\r\n amount = entries[entry].amount;\r\n max = entries[entry].max;\r\n\r\n /* Prevent overflowing the counter */\r\n if (amount > max) {\r\n amount = max;\r\n }\r\n\r\n intro.extendedCompletionDone += amount;\r\n intro.extendedCompletionTotal += max;\r\n\r\n // console.info(`${entry}: ${amount}/${max}`, entries[entry].name);\r\n\r\n amount = 0;\r\n max = 0;\r\n }\r\n /* Counting Geo Rocks */\r\n /* else if (entries[entry].hasOwnProperty(\"activated\") && entries[entry].hasOwnProperty(\"max\")) {\r\n\r\n amount = entries[entry].activated;\r\n max = entries[entry].max;\r\n\r\n // Check in case the player has discovered more than 205 (max) Geo Rocks\r\n if (max < entries[entry].discoveredTotal) {\r\n max = entries[entry].discoveredTotal;\r\n }\r\n\r\n intro.extendedCompletionDone += amount;\r\n intro.extendedCompletionTotal += max;\r\n\r\n console.info(`${entry}: ${amount}/${max}`, entries[entry].name);\r\n\r\n amount = 0;\r\n max = 0;\r\n } */\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n if (intro.extendedCompletionDone >= intro.extendedCompletionTotal) {\r\n gameCompletionExtended.icon = \"green\";\r\n } else {\r\n gameCompletionExtended.icon = \"red\";\r\n }\r\n\r\n let percent = (intro.extendedCompletionDone / intro.extendedCompletionTotal) * 100;\r\n\r\n gameCompletionExtended.spoiler = intro.extendedCompletionDone;\r\n gameCompletionExtended.spoilerAfter = ` / ${intro.extendedCompletionTotal} = ${percent.toFixed(2)} %`;\r\n}\r\n\r\n/**\r\n * Reads the \"version\" string from the save file and appends it to the selected div ID element\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {string} saveVersion Save File version in format 0.0.0.0\r\n */\r\nfunction CheckSaveFileVersion(section, saveVersion = HK.sections.intro.entries.saveVersion.spoiler) {\r\n\r\n SetIconNone(section, section.entries.saveVersion.id);\r\n\r\n section.entries.saveVersion.spoiler = `${saveVersion}`;\r\n\r\n /* let textFill = `Save Version:${pSpan}${saveVersion}${pSpan}`; */\r\n // document.getElementById(section.id).innerHTML += divStart + completionSymbol + textFill + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with appropriate number of health mask images\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} masks Number of max health masks from the save (baseline without tools and lifeblood)\r\n * @param {number} permadeathMode Value of permadeathMode property. 0 = Normal, 1 = Steel Soul, 2 = Steel Soul broken save\r\n */\r\nfunction CheckHealthMasks(section, masks = 5, permadeathMode = 0) {\r\n\r\n section.entries.health.amountTotal = masks;\r\n\r\n if (permadeathMode > 0) {\r\n section.entries.health.permadeathMode = true;\r\n } else {\r\n section.entries.health.permadeathMode = false;\r\n }\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = \"Health:\";\r\n let maskImages = \"\";\r\n let maskNormal = ``;\r\n let maskSteel = ``;\r\n let maskImg = \"\";\r\n\r\n (permadeathMode > 0) ? maskImg = maskSteel: maskImg = maskNormal;\r\n\r\n for (let i = 0; i < masks; i++) {\r\n maskImages += maskImg;\r\n } */\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + maskImages + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with appropriate number of soul orbs images\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} totalSilk Number of max Silk reserve from the save. 18 = full Silk Bar\r\n */\r\nfunction CheckSilkBar(section, totalSilk) {\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = \"Soul:\";\r\n let soulImages = \"\";\r\n let soulNormal = ``;\r\n let soulImg = soulNormal;\r\n\r\n for (let i = 0, total = totalSoul / 33; i < total; i++) {\r\n soulImages += soulImg;\r\n } */\r\n\r\n section.entries.silk.amountTotal = totalSilk;\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + soulImages + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with the Geo value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} geoValue Number of total rosaries value\r\n */\r\nfunction CheckRosary(section, geoValue = 0, geoPoolValue = 0) {\r\n\r\n section.entries.rosaries.amount = geoValue;\r\n section.entries.rosaries.amountShade = geoPoolValue;\r\n section.entries.rosaries.amountTotal = geoValue + geoPoolValue;\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = `Geo:${geoValue}`;\r\n\r\n // Show Shade Geo value and image only if Shade has at least 1 Geo on it\r\n if (geoPoolValue > 0) textFill += `\r\n ${pSpan}+${geoPoolValue}`;\r\n\r\n // Show also total Geo (Geo + Shade Geo) if player has at least 1 geo alongside the shade geo\r\n if (geoValue > 0 && geoPoolValue > 0) textFill += `${pSpan}=${pSpan}${geoValue+geoPoolValue}`; */\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with the shell shards value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} geoValue Number of total shellShards value\r\n */\r\nfunction CheckshellShards(section, shellShardsValue = 0) {\r\n\r\n section.entries.shellShards.amount = shellShardsValue;\r\n \r\n}\r\n\r\n/**\r\n * Fills HTML with appropriate number of notch images\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} PlayerData Contain the memory of the cerst.\r\n */\r\nfunction CheckCrests(section, PlayerData) {\r\n\r\n let amountTotal = 1\r\n\r\n section.entries.crests.reaper = PlayerData.completedMemory_reaper;\r\n section.entries.crests.wanderer = PlayerData.completedMemory_wanderer;\r\n section.entries.crests.beast = PlayerData.completedMemory_beast;\r\n section.entries.crests.witch = PlayerData.completedMemory_witch;\r\n section.entries.crests.toolmaster = PlayerData.completedMemory_toolmaster;\r\n section.entries.crests.shaman = PlayerData.completedMemory_shaman;\r\n \r\n if(PlayerData.completedMemory_reaper) amountTotal++;\r\n if(PlayerData.completedMemory_wanderer) amountTotal++;\r\n if(PlayerData.completedMemory_beast) amountTotal++;\r\n if(PlayerData.completedMemory_witch) amountTotal++;\r\n if(PlayerData.completedMemory_toolmaster) amountTotal++;\r\n if(PlayerData.completedMemory_shaman) amountTotal++;\r\n \r\n section.entries.crests.amountTotal = amountTotal;\r\n\r\n /* // How many overcharmed notches images to show\r\n notchesOvercharmed = notchesFilled - notchesTotal;\r\n if (notchesOvercharmed < 1) notchesOvercharmed = 0;\r\n\r\n section.entries.notches.amountOvercharmed = notchesOvercharmed;\r\n\r\n // How many unused notches images to show\r\n notchesUnused = notchesTotal - notchesFilled;\r\n if (notchesUnused < 1) notchesUnused = 0;\r\n\r\n section.entries.notches.amountUnused = notchesUnused;\r\n\r\n // Correct number of filled/used notches images to show when player is overcharmed\r\n if (notchesFilled > notchesTotal) notchesFilled = notchesTotal;\r\n\r\n section.entries.notches.amountFilled = notchesFilled;*/\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = `Notches:${pSpan}`;\r\n\r\n let notchImages = \"\";\r\n let notchNormalImage = ``;\r\n let notchFilledImage = ``;\r\n let notchOvercharmedImage = ``;\r\n\r\n // First check filled (used) notches and fill them (skips if no filled notches)\r\n if (notchesFilled > 0) {\r\n for (let i = 0; i < notchesFilled; i++) {\r\n notchImages += notchFilledImage;\r\n }\r\n }\r\n\r\n // Second check overcharmed notches and fill them (skips if player is not overcharmed)\r\n if (notchesOvercharmed > 0) {\r\n for (let i = 0; i < notchesOvercharmed; i++) {\r\n notchImages += notchOvercharmedImage;\r\n }\r\n }\r\n\r\n // Lastly, fill all unused notches\r\n if (notchesUnused > 0) {\r\n for (let i = 0; i < notchesUnused; i++) {\r\n notchImages += notchNormalImage;\r\n }\r\n } */\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + notchImages + divEnd;\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific object is true or false, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing data to be verified (use copy - data inside this object will be deleted)\r\n * @param {object} playerData Reference/pointer to specific data where to search (playerData)\r\n * @param {Array} worldData Reference/pointer to specific data where to search (sceneData.persistentBoolItems)\r\n */\r\nfunction CheckIfDataTrue(section, dataObject, playerData, worldData = []) {\r\n\r\n /* let {\r\n textPrefix,\r\n textSuffix,\r\n } = \"\";\r\n let sFillText = \"\";\r\n let wiki = \"\"; */\r\n let checkText = \"\";\r\n\r\n for (let i in dataObject) {\r\n\r\n /* textPrefix = dataObject[i].name;\r\n textSuffix = dataObject[i].spoiler;\r\n (dataObject[i].hasOwnProperty(\"wiki\")) ? wiki = dataObject[i].wiki: wiki = \"\"; */\r\n\r\n if (section.id === \"hk-redTools\" \r\n || section.id === \"hk-blueTools\"\r\n || section.id === \"hk-yellowTools\"\r\n || section.id === \"hk-equipment\")\r\n {\r\n switch (i)\r\n {\r\n case \"webShot\":\r\n //check if he have any type of webshot which count as 1% (the player cant have multiple of it)\r\n let foundArchitect = playerData.find(playerData => playerData.Name === \"WebShot Architect\");\r\n let foundForge = playerData.find(playerData => playerData.Name === \"WebShot Forge\");\r\n let foundWeaver = playerData.find(playerData => playerData.Name === \"WebShot Weaver\");\r\n ((foundArchitect !== undefined && foundArchitect.Data.IsUnlocked === true)\r\n || (foundForge !== undefined && foundForge.Data.IsUnlocked === true)\r\n || (foundWeaver !== undefined && foundWeaver.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"curveClaws\":\r\n //check if he have any type of curveClaws which count as 1% (normal or upgraded one)\r\n let foundClaws = playerData.find(playerData => playerData.Name === \"Curve Claws\");\r\n let foundClawsUpgrade = playerData.find(playerData => playerData.Name === \"Curve Claws Upgraded\");\r\n ((foundClaws !== undefined && foundClaws.Data.IsUnlocked === true)\r\n || (foundClawsUpgrade !== undefined && foundClawsUpgrade.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"mosscreepTool\":\r\n //check if he have any type of Mosscreep which count as 1% (normal or upgraded one)\r\n let foundMosscreep = playerData.find(playerData => playerData.Name === \"Mosscreep Tool 1\");\r\n let foundMosscreepUpgrade = playerData.find(playerData => playerData.Name === \"Mosscreep Tool 2\");\r\n ((foundMosscreep !== undefined && foundMosscreep.Data.IsUnlocked === true)\r\n || (foundMosscreepUpgrade !== undefined && foundMosscreepUpgrade.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"DazzleBind\":\r\n //check if he have any type of Dazzle Bind which count as 1% (normal or upgraded one)\r\n let foundDazzle = playerData.find(playerData => playerData.Name === \"Dazzle Bind\");\r\n let foundDazzleUpgrade = playerData.find(playerData => playerData.Name === \"Dazzle Bind Upgraded\");\r\n ((foundDazzle !== undefined && foundDazzle.Data.IsUnlocked === true)\r\n || (foundDazzleUpgrade !== undefined && foundDazzleUpgrade.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"deadMansPurse\":\r\n //check if he have any type of Bomb for normal and steel mod which count as 1% (normal or upgraded one)\r\n let foundBombNormal = playerData.find(playerData => playerData.Name === \"Dead Mans Purse\");\r\n let foundBombSteel = playerData.find(playerData => playerData.Name === \"Shell Satchel\");\r\n ((foundBombNormal !== undefined && foundBombNormal.Data.IsUnlocked === true)\r\n || (foundBombSteel !== undefined && foundBombSteel.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n \r\n\r\n default:\r\n let foundData = playerData.find(playerData => playerData.Name === dataObject[i].id);\r\n (foundData !== undefined && foundData.Data.IsUnlocked === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n\r\n }\r\n\r\n\r\n\r\n \r\n }\r\n // CHECK SILK HEART\r\n else if (section.id === \"hk-silkHeart\")\r\n {\r\n let exist = playerData.scenesVisited.indexOf(i);\r\n (exist >= 0) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }\r\n //CHECK SILK HEART MASK AND SPOOL SILK (they change it from old design)\r\n else if (section.id === \"hk-maskshards\" \r\n || section.id === \"hk-spoolFragments\"\r\n || section.id === \"hk-toolPouchUpgrades\"\r\n || section.id === \"hk-craftingKitUpgrades\")\r\n {\r\n switch (i) {\r\n //buy from sellers\r\n case \"PurchasedBonebottomHeartPiece\":\r\n case \"MerchantEnclaveShellFragment\":\r\n case \"PurchasedBelltownSpoolSegment\":\r\n case \"MetCaravanTroupeLeaderJudge\":\r\n case \"MerchantEnclaveSpoolPiece\":\r\n case \"purchasedGrindleSpoolPiece\":\r\n case \"PurchasedForgeToolKit\":\r\n case \"PurchasedArchitectToolKit\":\r\n case \"purchasedGrindleToolKit\":\r\n case \"PurchasedPilgrimsRestToolPouch\":\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n //Finishing wishes\r\n case \"beastflyHuntWish\":\r\n case \"sprintmasterRaceWish\":\r\n case \"destroyThreadCoresWish\":\r\n case \"destroyThreadCoresWish\":\r\n case \"antTrapperWish\":\r\n case \"saveShermaWish\":\r\n case \"crowFeathersWish\":\r\n case \"journalWish\":\r\n let wishList = playerData.QuestCompletionData.savedData;\r\n let foundWish = wishList.find(wishList => wishList.Name === dataObject[i].sceneName);\r\n (foundWish !== undefined && foundWish.Data.IsCompleted === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n //I hate that caravan....\r\n case \"CaravanTroupeLocation\":\r\n (playerData[i] === 3) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n //World Scene\r\n default:\r\n let sceneList = worldData.serializedList;\r\n let sceneInfo = sceneList.find(sceneList => sceneList.SceneName === dataObject[i].sceneName && sceneList.ID === dataObject[i].id);\r\n (sceneInfo !== undefined && sceneInfo.Value === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n }\r\n }\r\n else\r\n {\r\n \r\n /*switch (i) {\r\n case \"gotCharm_36\":\r\n // prevents green checkbox and adding 1% when only got one white fragment\r\n (playerData.gotQueenFragment === true && playerData.gotKingFragment === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"gotCharm_37\":\r\n case \"gotCharm_38\":\r\n case \"gotCharm_39\":\r\n case \"gotCharm_40\":\r\n case \"killedGrimm\":\r\n case \"grimmChildLevel\":\r\n case \"killedHiveKnight\":\r\n case \"hasGodfinder\":\r\n\r\n // fades out the entries if save file is from older game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n dataObject[i].disabled = true;\r\n //textPrefix = `${textPrefix}`;\r\n\r\n break;\r\n }\r\n\r\n // Checks for Nightmare King (4) or Banishment (5)\r\n if (i === \"grimmChildLevel\") {\r\n // (playerData.grimmChildLevel >= 4) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n // Check if Nightmare King or Banishment by looking at grimmChildLevel\r\n switch (playerData[i]) {\r\n\r\n case 4:\r\n dataObject[i].name = dataObject[i].nameNightmareKing;\r\n dataObject[i].spoiler = dataObject[i].spoilerNightmareKing;\r\n dataObject[i].wiki = dataObject[i].wikiNightmareKing;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n\r\n case 5:\r\n dataObject[i].name = dataObject[i].nameBanishment;\r\n dataObject[i].spoiler = dataObject[i].spoilerBanishment;\r\n dataObject[i].wiki = dataObject[i].wikiBanishment;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n\r\n default:\r\n SetIconRed(section, i);\r\n dataObject[i].name = dataObject[i].nameDefault;\r\n dataObject[i].spoiler = dataObject[i].spoilerDefault;\r\n dataObject[i].wiki = dataObject[i].wikiDefault;\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (i === \"gotCharm_40\") {\r\n SetIconRed(section, i);\r\n dataObject[i].name = dataObject[i].nameDefault;\r\n dataObject[i].spoiler = dataObject[i].spoilerDefault;\r\n dataObject[i].wiki = dataObject[i].wikiDefault;\r\n\r\n switch (playerData.grimmChildLevel) {\r\n\r\n case 1:\r\n if (playerData[i] === true) {\r\n dataObject[i].name = dataObject[i].nameGrimmchildP1;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP1;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n }\r\n\r\n break;\r\n case 2:\r\n dataObject[i].name = dataObject[i].nameGrimmchildP2;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP2;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n case 3:\r\n dataObject[i].name = dataObject[i].nameGrimmchildP3;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP3;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n case 4:\r\n dataObject[i].name = dataObject[i].nameGrimmchildP4;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP4;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n case 5:\r\n dataObject[i].name = dataObject[i].nameCarefreeMelody;\r\n dataObject[i].spoiler = dataObject[i].spoilerCarefreeMelody;\r\n dataObject[i].wiki = dataObject[i].wikiCarefreeMelody;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n default:\r\n dataObject[i].name = dataObject[i].nameDefault;\r\n dataObject[i].spoiler = dataObject[i].spoilerDefault;\r\n dataObject[i].wiki = dataObject[i].wikiDefault;\r\n }\r\n\r\n break;\r\n }\r\n\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"bossGruzMother\":\r\n case \"bossBroodingMawlek\":\r\n case \"maskShardCrossroadsSprings\":\r\n case \"maskShardCrossroadsMawlek\":\r\n case \"maskShardGrubfather\":\r\n case \"maskShardBretta\":\r\n case \"maskShardQueensStation\":\r\n case \"maskShardWaterways\":\r\n case \"maskShardStoneSanctuary\":\r\n case \"maskShardCrystalPeak\":\r\n case \"maskShardDeepnest\":\r\n case \"maskShardHive\":\r\n case \"maskShardDelicateFlower\":\r\n case \"vesselFragmentGreenpath\":\r\n case \"vesselFragmentCrossroads\":\r\n case \"vesselFragmentCityOfTears\":\r\n case \"vesselFragmentDeepnest\":\r\n case \"vesselFragmentFountain\":\r\n (WorldDataActivated(dataObject[i].id, dataObject[i].sceneName, worldData)) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"pantheonMaster\":\r\n case \"pantheonArtist\":\r\n case \"pantheonSage\":\r\n case \"pantheonKnight\":\r\n checkText = CheckGodmasterDoors(dataObject[i], playerData);\r\n\r\n if (checkText === \"PropertyNotFound\") {\r\n SetIconNone(section, i);\r\n dataObject[i].disabled = true;\r\n //textPrefix = `${textPrefix}`;\r\n break;\r\n\r\n } else if (checkText === \"PantheonCompleted\") {\r\n SetIconGreen(section, i);\r\n break;\r\n\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n break;\r\n\r\n default:\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }*/\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }\r\n\r\n /* sFillText += PrepareHTMLString(section, textPrefix, textSuffix, wiki); */\r\n }\r\n\r\n // AppendHTML(section, sFillText);\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific object is 0 or > 0, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing data to be verified (use copy - data inside this object will be deleted)\r\n * @param {object} playerData Reference/pointer to specific data where to search\r\n */\r\nfunction CheckSpellLevel(section, dataObject, playerData) {\r\n\r\n // let sFillText = \"\";\r\n\r\n for (let i in dataObject) {\r\n switch (i) {\r\n case \"vengefulSpirit\":\r\n case \"shadeSoul\":\r\n (playerData.fireballLevel >= dataObject[i].fireballLevel) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n // sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n break;\r\n case \"desolateDive\":\r\n case \"descendingDark\":\r\n (playerData.quakeLevel >= dataObject[i].quakeLevel) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n // sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n break;\r\n case \"howlingWraiths\":\r\n case \"abyssShriek\":\r\n (playerData.screamLevel >= dataObject[i].screamLevel) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n // sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // AppendHTML(section, sFillText);\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific object is 0 or > 0, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing data to be verified\r\n * @param {object} playerData Reference/pointer to specific data where to search\r\n */\r\nfunction CheckWarriorDreams(section, dataObject, playerData) {\r\n\r\n let sFillText = \"\";\r\n\r\n for (let i in dataObject) {\r\n (playerData[i] >= 2) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n }\r\n\r\n // AppendHTML(section, sFillText);\r\n}\r\n\r\n/**\r\n * Verifies if the Godmaster Pantheons 1-4 are completed by the player, and appends HTML accordingly.\r\n * @param {object} dataObject Object containing pantheon data to be verified (with property)\r\n * @param {object} playerData Reference/pointer to specific data where to search in the save file\r\n */\r\nfunction CheckGodmasterDoors(dataObject, playerData) {\r\n\r\n if (playerData.hasOwnProperty(dataObject.property) === false) {\r\n return \"PropertyNotFound\";\r\n } else if (playerData[dataObject.property].completed === true) {\r\n return \"PantheonCompleted\";\r\n } else {\r\n return \"PantheonNotCompleted\";\r\n }\r\n}\r\n\r\n/**\r\n * Verifies the level of player's needle upgrades, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing needle upgrades data to be verified\r\n * @param {object} playerData Reference/pointer to specific data where to search in the save file\r\n */\r\nfunction CheckNeedleUpgrades(section, dataObject, playerData) {\r\n\r\n // appends \"Nail\" to every array element\r\n // same as names in the database object\r\n let Needle = [\"starting\", \"sharpened\", \"shining\", \"hivesteel\", \"paleSteel\"].map((element) => element + \"Needle\");\r\n\r\n let sFillText = \"\";\r\n\r\n for (let i = 0; i < 5; i++) {\r\n (playerData.nailUpgrades >= i) ? SetIconGreen(section, Needle[i]): SetIconRed(section, Needle[i]);\r\n sFillText += PrepareHTMLString(section, dataObject[Needle[i]].name, dataObject[Needle[i]].spoiler, dataObject[Needle[i]].wiki);\r\n }\r\n if (section.percent) section.percent--; // subject one for the Old Nail\r\n}\r\n\r\n/**\r\n * Verifies if the specific Interactable (Item, Boss, Chest etc.) is activated. Returns true or false.\r\n * @param {string} idText ID text of the Interactable (id in sceneData)\r\n * @param {string} sceneNameText Map codename of the Interactable (sceneName in sceneData)\r\n * @param {Array} worldData Array of Interactable data to search in (sceneData.persistentBoolItems)\r\n */\r\nfunction WorldDataActivated(idText, sceneNameText, worldData) {\r\n\r\n // Search for the Interactable\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n // Verify if the Interactable is activated and return the result\r\n if (worldData[i].id === idText && worldData[i].sceneName === sceneNameText && worldData[i].activated === true) {\r\n return true;\r\n }\r\n }\r\n // If not, return false\r\n return false;\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific section is true or false, or checks what values they have.\r\n * @param {object} section Reference/pointer to the specific section of the whole hk-database\r\n * @param {object} saveFile Reference/pointer to the whole Hollow Knight save file object (jsonObject)\r\n */\r\nfunction CheckAdditionalThings(section, saveFile) {\r\n\r\n let entries = section.entries;\r\n let playerData = saveFile.playerData;\r\n let sceneData = saveFile.sceneData;\r\n let worldData = saveFile.sceneData.persistentBoolItems;\r\n\r\n // Start main loop\r\n for (let i in entries) {\r\n\r\n let {\r\n amount,\r\n countTotal,\r\n total,\r\n notActivated,\r\n activated,\r\n discoveredTotal\r\n } = 0;\r\n\r\n switch (i) {\r\n case \"grubsCollected\":\r\n case \"grubRewards\":\r\n case \"charmsOwned\":\r\n case \"dreamOrbs\":\r\n case \"whisperingRoots\":\r\n case \"fountainGeo\":\r\n case \"nailDamage\":\r\n case \"journalEntriesCompleted\":\r\n case \"journalNotesCompleted\":\r\n case \"whiteDefenderDefeats\":\r\n case \"greyPrinceDefeats\":\r\n if (i === \"whisperingRoots\") {\r\n amount = CountWorldItem(\"Dream Plant\");\r\n } else {\r\n amount = playerData[i];\r\n }\r\n\r\n countTotal = amount;\r\n entries[i].amount = amount;\r\n\r\n if (i === \"journalEntriesCompleted\" || i === \"journalNotesCompleted\") {\r\n countTotal = `${amount} / ${playerData.journalEntriesTotal}`;\r\n entries[i].amountTotal = playerData.journalEntriesTotal;\r\n\r\n entries[i].spoiler = `${entries[i].spoilerDefault} (${entries[i].max} max)`;\r\n\r\n /* when Zote is dead, the max Journal entries will equal 4 less instead of 164. For the green tick */\r\n if (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {\r\n\r\n if (playerData.hasOwnProperty(\"killedGreyPrince\")) {\r\n entries[i].max -= 4; // Subtract GPZ and 3 Zotelings from max\r\n }\r\n entries[i].spoiler = `${entries[i].spoilerDefault} (${entries[i].max} max)`; /* Change spoiler for less confusion */\r\n }\r\n\r\n /* when Grimm Troupe is banished, max Journal entries will be 1 or 2 less */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") && playerData.destroyedNightmareLantern === true) {\r\n\r\n entries[i].max--; // Subtract Nightmare King from max\r\n\r\n /* if the player didn't defeat any Grimmkin Nightmare before banishing, subtract it from max */\r\n if (playerData.killedFlameBearerLarge === false) {\r\n entries[i].max--; // Subtract Grimmkin Nightmare from max\r\n entries[i].spoiler = `${entries[i].spoilerDefault} (${entries[i].max} max)`; /* Change spoiler for less confusion */\r\n }\r\n }\r\n }\r\n\r\n if (i === \"grubRewards\") {\r\n entries[i].amountTotal = playerData.grubsCollected;\r\n }\r\n\r\n if (i === \"greyPrinceDefeats\") {\r\n // backwards compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n\r\n } else if (playerData.zoteDead === true || (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true)) {\r\n entries[i].disabled = true;\r\n }\r\n }\r\n\r\n if (i === \"whiteDefenderDefeats\") {\r\n // backwards compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n }\r\n\r\n if (amount >= entries[i].max) {\r\n\r\n SetIconGreen(section, i);\r\n } else if (amount > 0) {\r\n\r\n SetIconPartial(section, i);\r\n } else {\r\n\r\n SetIconNone(section, i);\r\n }\r\n break;\r\n\r\n case \"geoPool\":\r\n amount = Math.abs(playerData[i]);\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0) {\r\n SetIconPartial(section, i);\r\n } else {\r\n SetIcon(section, i, \"revealed\");\r\n }\r\n\r\n break;\r\n\r\n case \"rancidEggs\":\r\n case \"jinnEggsSold\":\r\n case \"xunFlowerBrokeTimes\":\r\n case \"soldTrinket1\":\r\n case \"soldTrinket2\":\r\n case \"soldTrinket3\":\r\n case \"soldTrinket4\":\r\n case \"ore\":\r\n case \"simpleKeys\":\r\n amount = Math.abs(playerData[i]);\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n\r\n if (i === \"jinnEggsSold\") {\r\n // fade out if not on Steel Soul\r\n if (playerData.permadeathMode < 1) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n SetIcon(section, i, \"revealed\");\r\n }\r\n }\r\n\r\n if (i === \"xunFlowerBrokeTimes\") {\r\n if (amount < 1 && playerData.xunFlowerGiven === true) {\r\n SetIcon(section, i, \"revealed\");\r\n } else if (amount > 0) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"tukDungEgg\":\r\n\r\n // fade out if on Steel Soul\r\n if (playerData.permadeathMode > 0) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n\r\n continue;\r\n }\r\n\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"relicsSoldTotalGeo\":\r\n\r\n amount = 0;\r\n\r\n for (let i = 1; i <= 4; i++) {\r\n amount += (entries[`soldTrinket${i}`].amount * entries[`soldTrinket${i}`].geoValue);\r\n }\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"bankerBalance\":\r\n\r\n amount = playerData[i];\r\n\r\n /* When value is negative, reset to zero */\r\n if (amount < 0) {\r\n amount = 0;\r\n }\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0 || playerData.bankerAccountPurchased === true) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"millibelleLeft\":\r\n\r\n if (playerData.bankerTheft >= 1) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"millibelleCheckedStand\":\r\n\r\n if (playerData.bankerTheft >= 2) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"millibelleReclaimedAllGeo\":\r\n\r\n if (playerData.bankerTheft >= 1 && playerData.bankerBalance <= 0) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"itemsDiscovered\":\r\n discoveredTotal = sceneData.persistentBoolItems.length;\r\n\r\n notActivated = CountItems(discoveredTotal, \"notActivated\");\r\n activated = CountItems(discoveredTotal, \"active\");\r\n\r\n entries[i].discoveredTotal = discoveredTotal;\r\n entries[i].notActivated = notActivated;\r\n entries[i].activated = activated;\r\n\r\n SetIcon(section, i, \"revealed\");\r\n break;\r\n\r\n case \"shopkeeperKey\":\r\n (playerData.hasSlykey === true || playerData.gaveSlykey === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"elegantKey\":\r\n (playerData.hasWhiteKey === true || playerData.usedWhiteKey === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"loveKey\":\r\n (playerData.hasLoveKey === true || playerData.openedLoveDoor === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"paleOreSeer\": // #2\r\n (playerData.dreamReward3 === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n /* -------------------- World Interactables ------------------------------- */\r\n case \"simpleKeyCityOfTears\": // #2\r\n case \"simpleKeyAncientBasin\": // #3\r\n case \"paleOreAncientBasin\": // #1\r\n case \"paleOreCrystalPeak\": // #3\r\n case \"paleOreDeepnest\": // #4\r\n case \"paleOreGrubfather\": // #5\r\n case \"paleOreColosseum\": // #6\r\n case \"pantheonSoulWarrior\":\r\n case \"shadeSoulWarrior\":\r\n case \"pantheonCrystalGuardian\":\r\n case \"pantheonEnragedGuardian\":\r\n case \"mantisVillageFloorLever\":\r\n case \"whiteLadyRoom\":\r\n case \"throneRoomLoreTablet\":\r\n case \"towerOfLoveSecretRoom\":\r\n case \"weaversDenSecretRoom1\":\r\n case \"weaversDenSecretRoom2\":\r\n case \"cityCrest\":\r\n case \"soulSanctumShortcut\":\r\n case \"colosseumHiddenHotSpring\":\r\n (FindWorldItem(entries[i].id, entries[i].sceneName)) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"pathOfPainEntrance\":\r\n\r\n /* Backwards compatibility with older save files (before Grimm Troupe) */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"paleLurkersRetreat\":\r\n\r\n /* Backwards compatibility with older save files (before Godmaster) */\r\n if (playerData.hasOwnProperty(\"hasGodfinder\") === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"grimmTentSecretRoom\":\r\n\r\n /* Backwards compatibility with older save files */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {\r\n SetIconGreen(section, i);\r\n } else {\r\n\r\n /* When the Ritual has been completed or Grimm Troupe has been Banished, the secret is no longer possible to discover */\r\n if (playerData.grimmChildLevel >= 4) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"relicsWandererJournal\":\r\n case \"relicsHallownestSeal\":\r\n case \"relicsKingsIdol\":\r\n case \"relicsArcaneEgg\":\r\n total = playerData[entries[i].nameHeld] + playerData[entries[i].nameSold];\r\n\r\n if (total >= entries[i].max) {\r\n\r\n SetIconGreen(section, i);\r\n } else if (total > 0) {\r\n\r\n SetIconPartial(section, i);\r\n } else {\r\n\r\n SetIconNone(section, i);\r\n }\r\n\r\n entries[i].amount = total;\r\n\r\n break;\r\n\r\n case \"arcaneEggLifebloodCoreRoom\":\r\n (FindWorldItem(entries[i].id, entries[i].sceneName)) ? SetIconGreen(section, i): SetIconNone(section, i);\r\n break;\r\n\r\n case \"pantheonHallownest\":\r\n if (playerData.hasOwnProperty(\"bossDoorStateTier5\") === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n (playerData.bossDoorStateTier5.completed === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }\r\n break;\r\n\r\n case \"killsBindingSeal\":\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n (playerData[i] == 0) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"killsBigBuzzer\":\r\n (playerData[i] == 0) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"killedVoidIdol_1\":\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n if (playerData[i] === false && (playerData.killedVoidIdol_2 === true || playerData.killedVoidIdol_3 === true)) SetIconGreen(section, i);\r\n break;\r\n\r\n case \"killedVoidIdol_2\":\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n if (playerData[i] === false && playerData.killedVoidIdol_3 === true) SetIconGreen(section, i);\r\n break;\r\n\r\n case \"greyPrinceDefeated\":\r\n // compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n\r\n } else if (playerData.zoteDead === true ||\r\n (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true)) {\r\n entries[i].disabled = true;\r\n }\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconNone(section, i);\r\n if (playerData.zoteRescuedBuzzer === true && playerData[i] === false) SetIconRed(section, i);\r\n break;\r\n\r\n case \"zoteStatus\":\r\n SetIconRed(section, i);\r\n entries[i].name = entries[i].nameDefault;\r\n entries[i].spoiler = entries[i].spoilerDefault;\r\n\r\n if (playerData.zoteDead === true) {\r\n entries[i].name = entries[i].nameNeglect;\r\n entries[i].spoiler = entries[i].spoilerNeglect;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.killedZote === true) {\r\n entries[i].name = entries[i].nameRivalry;\r\n entries[i].spoiler = entries[i].spoilerRivalry;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.zoteRescuedBuzzer === false) {\r\n if (playerData.hasWalljump === false) {\r\n entries[i].name = entries[i].nameTrappedVengefly;\r\n entries[i].spoiler = entries[i].spoilerTrappedVengefly;\r\n\r\n } else if (playerData.hasWalljump === true) {\r\n entries[i].name = entries[i].nameNotRescuedVengefly;\r\n entries[i].spoiler = entries[i].spoilerNotRescuedVengefly;\r\n }\r\n } else if (playerData.zoteRescuedBuzzer === true) {\r\n if (playerData.zoteRescuedDeepnest === false) {\r\n entries[i].name = entries[i].nameTrappedDeepnest;\r\n entries[i].spoiler = entries[i].spoilerTrappedDeepnest;\r\n\r\n } else if (playerData.zoteRescuedDeepnest === true) {\r\n if (playerData.killedZote === false) {\r\n entries[i].name = entries[i].nameColosseum;\r\n entries[i].spoiler = entries[i].spoilerColosseum;\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"nailsmithStatus\":\r\n SetIconRed(section, i);\r\n entries[i].name = entries[i].nameDefault;\r\n entries[i].spoiler = entries[i].spoilerDefault;\r\n\r\n if (playerData.nailsmithKilled === true) {\r\n entries[i].name = entries[i].namePurity;\r\n entries[i].spoiler = entries[i].spoilerPurity;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.nailsmithConvoArt === true) {\r\n entries[i].name = entries[i].nameHappyCouple;\r\n entries[i].spoiler = entries[i].spoilerHappyCouple;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.nailsmithSpared === true) {\r\n entries[i].name = entries[i].nameSheoHutWaiting;\r\n entries[i].spoiler = entries[i].spoilerSheoHutWaiting;\r\n\r\n } else {\r\n entries[i].name = entries[i].nameUpgradeNail;\r\n entries[i].spoiler = entries[i].spoilerUpgradeNail;\r\n }\r\n break;\r\n\r\n case \"mrMushroomState1\":\r\n case \"mrMushroomState2\":\r\n case \"mrMushroomState3\":\r\n case \"mrMushroomState4\":\r\n case \"mrMushroomState5\":\r\n case \"mrMushroomState6\":\r\n case \"mrMushroomState7\":\r\n CheckMrMushroomState(section, entries[i], playerData[\"mrMushroomState\"]);\r\n break;\r\n\r\n case \"openedTownBuilding\":\r\n case \"openedCrossroads\":\r\n case \"openedGreenpath\":\r\n case \"openedRuins1\":\r\n case \"openedRuins2\":\r\n case \"openedFungalWastes\":\r\n case \"openedRoyalGardens\":\r\n case \"openedRestingGrounds\":\r\n case \"openedDeepnest\":\r\n case \"openedHiddenStation\":\r\n case \"openedStagNest\":\r\n\r\n /* backwards compatibility with earlier game versions */\r\n if (playerData.hasOwnProperty(i) === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n\r\n break;\r\n\r\n } else if (playerData[i] === true) {\r\n\r\n SetIconGreen(section, i);\r\n\r\n /* Create amount property before incrementing (avoids NaN) */\r\n if (!entries.stagStationsOpened.hasOwnProperty(\"amount\")) {\r\n entries.stagStationsOpened.amount = 0;\r\n }\r\n\r\n /* increment the stag stations amount by one */\r\n entries.stagStationsOpened.amount++;\r\n\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"stagStationsOpened\":\r\n\r\n /* backwards compatibility check */\r\n if (!playerData.hasOwnProperty(\"openedHiddenStation\")) {\r\n\r\n /* Subtract one from maximum for extended completion counting */\r\n entries[i].max--;\r\n }\r\n\r\n if (entries[i].amount >= entries[i].max) {\r\n SetIconGreen(section, i);\r\n } else if (entries[i].amount > 0) {\r\n SetIconPartial(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"mapCrossroads\":\r\n case \"mapGreenpath\":\r\n case \"mapFungalWastes\":\r\n case \"mapCliffs\":\r\n case \"mapCity\":\r\n case \"mapMines\":\r\n case \"mapWaterways\":\r\n case \"mapRestingGrounds\":\r\n case \"mapAbyss\":\r\n case \"mapOutskirts\":\r\n case \"mapFogCanyon\":\r\n case \"mapRoyalGardens\":\r\n case \"mapDeepnest\":\r\n\r\n if (playerData[i] === true) {\r\n\r\n SetIconGreen(section, i);\r\n\r\n /* Create amount property before incrementing (avoids NaN) */\r\n if (!entries.areaMaps.hasOwnProperty(\"amount\")) {\r\n entries.areaMaps.amount = 0;\r\n }\r\n\r\n /* increment the area maps amount by one */\r\n entries.areaMaps.amount++;\r\n\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"areaMaps\":\r\n\r\n if (entries[i].amount >= entries[i].max) {\r\n SetIconGreen(section, i);\r\n } else if (entries[i].amount > 0) {\r\n SetIconPartial(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n /* Unobtainable Unbreakable Charms after Grimm Troupe Banishment */\r\n case \"fragileGreed_unbreakable\":\r\n case \"fragileHealth_unbreakable\":\r\n case \"fragileStrength_unbreakable\":\r\n\r\n /* backwards compatibility with earlier game versions */\r\n if (playerData.hasOwnProperty(i) === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n\r\n } else if (playerData[i] === true) {\r\n SetIconGreen(section, i);\r\n } else {\r\n\r\n /* If player doesn't have an Unbreakable Charm, and they Banished the Grimm Troupe, the entry needs to be disabled */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") && playerData.destroyedNightmareLantern === true) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n }\r\n\r\n break;\r\n\r\n default:\r\n\r\n // backwards compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n\r\n } else if (playerData[i] === true) {\r\n\r\n SetIconGreen(section, i);\r\n } else {\r\n\r\n SetIconRed(section, i);\r\n }\r\n } // end switch (i)\r\n } // end for (let i in dataObject)\r\n\r\n // ==========================================\r\n // -------------- Methods ---------------- //\r\n\r\n /**\r\n * Verifies if the specific Interactable (Item, Boss, Chest etc.) is activated (completed). Returns true or false.\r\n * @param {string} idText ID text of the Interactable (id in sceneData)\r\n * @param {string} sceneNameText Map codename of the Interactable (sceneName in sceneData)\r\n * @returns {boolean}\r\n */\r\n function FindWorldItem(idText = \"\", sceneNameText = \"\") {\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n if (worldData[i].id === idText && worldData[i].sceneName === sceneNameText && worldData[i].activated === true) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Searches for a given item that the player has found and returns the amount of them that the player completed.\r\n * @param {string} itemId Name of the item\r\n * @returns {number}\r\n */\r\n function CountWorldItem(itemId = \"\") {\r\n let total = 0;\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n if (worldData[i].id === itemId) {\r\n if (worldData[i].activated === true) total++;\r\n }\r\n }\r\n return total;\r\n }\r\n\r\n /**\r\n * Counts the total amount of Geo Rocks Unbroken or Broken. Logs to console all the Unbroken IDs and Map locations.\r\n * @param {number} arrayLength How many items the Geo Rocks array is currently storing (for iteration)\r\n * @param {string} mode Choose which Geo Rocks to count (broken or unbroken)\r\n */\r\n /* function CountGeoRocks(arrayLength, mode = \"unbroken\") {\r\n\r\n let countTotal = 0;\r\n let geoRocksLog = [];\r\n\r\n if (mode === \"unbroken\") {\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (sceneData.geoRocks[i].hitsLeft > 0) {\r\n countTotal++;\r\n geoRocksLog.push(`#${countTotal} 🏔️ ${sceneData.geoRocks[i].id} 🗺️ ${TranslateMapName(sceneData.geoRocks[i].sceneName)} ⌨️ ${sceneData.geoRocks[i].sceneName}`);\r\n }\r\n }\r\n\r\n if (!countTotal) {\r\n console.log(\"%cAll Geo Rocks Broken!\", \"color: #16c60c; font-weight: 700;\");\r\n } else {\r\n console.groupCollapsed(`%cUnbroken Geo Rocks (${countTotal}):`, \"color: #16c60c; font-weight: 700;\");\r\n\r\n for (let i = 0, length = geoRocksLog.length; i < length; i++) {\r\n console.log(geoRocksLog[i]);\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n } else {\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (sceneData.geoRocks[i].hitsLeft === 0) countTotal++;\r\n }\r\n }\r\n\r\n return countTotal;\r\n } */\r\n\r\n /**\r\n * Counts the amount of in-game Interactables Activated or Not Activated. Logs to console all the Not Activated IDs and Map locations.\r\n * @param {number} arrayLength How many items the Interactables array is currently storing (for iteration)\r\n * @param {string} mode Choose which Interactables to count (notActivated or activated)\r\n */\r\n function CountItems(arrayLength, mode = \"notActivated\") {\r\n\r\n let countTotal = 0;\r\n let itemsLog = [];\r\n\r\n if (mode === \"notActivated\") {\r\n\r\n /* \r\n let list = new ItemListBox(worldData);\r\n \r\n */\r\n\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (worldData[i].activated === false &&\r\n worldData[i].semiPersistent === false) {\r\n countTotal++;\r\n itemsLog.push(`#${countTotal} ${worldData[i].id} 🗺️ ${TranslateMapName(worldData[i].sceneName)} ⌨️ ${worldData[i].sceneName}`);\r\n }\r\n }\r\n\r\n if (!countTotal) {\r\n console.log(\"%cAll Interactables Activated!\", \"color: #16c60c; font-weight: 700;\");\r\n } else {\r\n console.groupCollapsed(`%cInteractables Not Activated (${countTotal}):`, \"color: #16c60c; font-weight: 700;\");\r\n\r\n for (let i = 0, length = itemsLog.length; i < length; i++) {\r\n console.log(itemsLog[i]);\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n } else {\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (worldData[i].activated === true) countTotal++;\r\n }\r\n }\r\n\r\n return countTotal;\r\n }\r\n\r\n /**\r\n * Compares and logs all unrescued Grubs in a list: IDs and map locations\r\n */\r\n /* function LogMissingGrubs() {\r\n\r\n let rescuedGrubsSceneList = [];\r\n\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n if (worldData[i].id.includes(\"Grub Bottle\")) {\r\n if (worldData[i].activated === true) {\r\n // There are 3 duplicates of the same map scene name from older game save files. Prevents adding duplicates\r\n // if (worldData[i].sceneName === \"Ruins2_11\" && worldData[i].id === \"Grub Bottle (1)\") {\r\n // continue;\r\n // } else if (worldData[i].sceneName === \"Ruins2_11\" && worldData[i].id === \"Grub Bottle (2)\") {\r\n // continue;\r\n // } else { \r\n rescuedGrubsSceneList.push(worldData[i].sceneName);\r\n // }\r\n }\r\n }\r\n }\r\n\r\n // Filtering the reference database Grub list to include only the missing values\r\n let missingGrubsList = section.grubsList.filter(x => !rescuedGrubsSceneList.includes(x));\r\n let length = missingGrubsList.length;\r\n\r\n if (!length) {\r\n console.log(\"%cAll Grubs Rescued!\", \"color: #16c60c; font-weight: 700;\");\r\n } else {\r\n console.groupCollapsed(`%cUnrescued Grubs (${length}):`, \"color: #16c60c; font-weight: 700;\");\r\n\r\n for (let i = 0; i < length; i++) {\r\n console.log(`#${section.grubsList.indexOf(missingGrubsList[i]) + 1} 🗺️ ${TranslateMapName(missingGrubsList[i])} ⌨️ ${missingGrubsList[i]}`);\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n\r\n return false;\r\n } */\r\n} // end function CheckAdditionalThings()\r\n\r\n/**\r\n * Checks and fills all the 7 locations of Mr Mushroom.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} entry object containing the Mr Mushroom name and spoilers/locations\r\n * @param {number} mrMushroomState playerData.mrMushroomState read from the save file. (0-8)\r\n */\r\nfunction CheckMrMushroomState(section, entry, mrMushroomState = 0) {\r\n\r\n if (mrMushroomState >= entry.state) {\r\n SetIconGreen(section, `mrMushroomState${entry.state - 1}`);\r\n } else {\r\n SetIconRed(section, `mrMushroomState${entry.state - 1}`);\r\n }\r\n}\r\n\r\n/**\r\n * Checks and marks all the Hunter's Journal creatures entries with amounts, partial completion etc.\r\n * @param {object} db Reference to the HK database\r\n * @param {object} playerData Reference to the player's save data\r\n */\r\nfunction CheckHuntersJournal(db, sectionName, playerData) {\r\n\r\n let section = db.sections[sectionName];\r\n let entries = db.sections[sectionName].entries;\r\n //let entriesStatistics = db.sections.statistics.entries; // Alba: disabled for future use\r\n let name = \"\";\r\n let nameDefault = \"\";\r\n let amountKillsLeft = 0;\r\n let journalPlayerList = playerData.EnemyJournalKillData.list\r\n\r\n for (let entry in entries) {\r\n\r\n let MonsterInfo = journalPlayerList.find(journalPlayerList => journalPlayerList.Name === entries[entry].databaseName);\r\n\r\n //recorded and founded and reached to the requirement\r\n if (MonsterInfo !== undefined \r\n && MonsterInfo.Record.HasBeenSeen\r\n && MonsterInfo.Record.Kills >= entries[entry].killRequire) \r\n {\r\n entries[entry].name = entries[entry].gameName;\r\n SetIconGreen(section, entry);\r\n } \r\n // didnt reach the limit but at least kill him once.\r\n else if (MonsterInfo !== undefined \r\n && MonsterInfo.Record.HasBeenSeen\r\n && MonsterInfo.Record.Kills >= 1) \r\n {\r\n name = entries[entry].gameName + ` (${(entries[entry].killRequire-MonsterInfo.Record.Kills)})`;\r\n entries[entry].name = name;\r\n SetIconPartialJournal(section, entry);\r\n }\r\n else \r\n {\r\n name = entries[entry].gameName + ` (${(entries[entry].killRequire)})`;\r\n entries[entry].name = name;\r\n SetIconRed(section, entry);\r\n }\r\n\r\n\r\n }\r\n}\r\n\r\n\r\nfunction CheckPantheon(db, sectionName, playerData) {\r\n\r\n let section = db.sections[sectionName];\r\n let property = db.sections[sectionName].property;\r\n let entries = db.sections[sectionName].entries;\r\n\r\n for (let entry in entries) {\r\n\r\n /* Backwards compatibility, disable and skip to next when not found */\r\n if (!playerData.hasOwnProperty(property)) {\r\n\r\n SetIconNone(section, entry);\r\n entries[entry].disabled = true;\r\n\r\n continue;\r\n }\r\n\r\n if (playerData[property][entry] === true) {\r\n\r\n switch (entry) {\r\n\r\n case \"boundNail\":\r\n SetIcon(section, entry, \"bindingNail\");\r\n break;\r\n\r\n case \"boundShell\":\r\n SetIcon(section, entry, \"bindingShell\");\r\n break;\r\n\r\n case \"boundCharms\":\r\n SetIcon(section, entry, \"bindingCharms\");\r\n break;\r\n\r\n case \"boundSoul\":\r\n SetIcon(section, entry, \"bindingSoul\");\r\n break;\r\n\r\n case \"allBindings\":\r\n SetIcon(section, entry, \"bindingAll\");\r\n break;\r\n\r\n default:\r\n SetIconGreen(section, entry);\r\n }\r\n } else {\r\n SetIconRed(section, entry);\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction CheckHallOfGods(db, playerData) {\r\n\r\n let section = db.sections.hallOfGods;\r\n let entries = db.sections.hallOfGods.entries;\r\n let id = \"\";\r\n let check = \"\";\r\n let isUnlocked = false;\r\n\r\n for (let entry in entries) {\r\n\r\n id = entries[entry].id;\r\n\r\n /* Backwards compatibility, disable and skip to next when not found */\r\n if (!playerData.hasOwnProperty(`statueState${id}`)) {\r\n\r\n SetIconNone(section, entry);\r\n entries[entry].disabled = true;\r\n\r\n continue;\r\n }\r\n\r\n check = entries[entry].check;\r\n isUnlocked = playerData[`statueState${id}`].isUnlocked;\r\n\r\n switch (entry) {\r\n\r\n case \"GreyPrinceUnlocked\":\r\n case \"GreyPrinceAttuned\":\r\n case \"GreyPrinceAscended\":\r\n case \"GreyPrinceRadiant\":\r\n\r\n /* When Zote OFF, disable entry and skip to next entry */\r\n if (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {\r\n\r\n SetIconNone(section, entry);\r\n entries[entry].disabled = true;\r\n\r\n continue;\r\n }\r\n }\r\n\r\n if (playerData[`statueState${id}`][check] === true) {\r\n\r\n switch (check) {\r\n\r\n case \"isUnlocked\":\r\n SetIconGreen(section, entry);\r\n break;\r\n\r\n case \"completedTier1\":\r\n SetIcon(section, entry, \"attuned\");\r\n break;\r\n\r\n case \"completedTier2\":\r\n SetIcon(section, entry, \"ascended\");\r\n break;\r\n\r\n case \"completedTier3\":\r\n SetIcon(section, entry, \"radiant\");\r\n break;\r\n\r\n default:\r\n SetIcon(section, entry, \"partial\");\r\n break;\r\n }\r\n\r\n }\r\n /* When boss is only unlocked, other entries get a gray icon (awaiting completion) */\r\n else if (isUnlocked) {\r\n SetIcon(section, entry, \"partial\");\r\n }\r\n /* When not unlocked, every entry gets a red icon */\r\n else {\r\n SetIconRed(section, entry);\r\n }\r\n\r\n } /* end for (let entry in entries) */\r\n\r\n}\r\n\r\n\r\n/**\r\n * Checks, validates and shows hints to the player depending on their save progression, in chronological order. Shows only hint for the last uncompleted event. If Hollow Knight is defeated, shows a dummy text.\r\n * @param {object} section object containing div hints ID and h2 title\r\n * @param {object} dataObject object containing all hints data\r\n * @param {object} playerData object containing HK Player Data to look in\r\n * @param {object} worldData object containing HK World Data to look in\r\n * @returns {boolean} true when defeated Hollow Knight, false if not\r\n */\r\nfunction CheckHintsTrue(section, dataObject, playerData, worldData) {\r\n\r\n if (playerData.killedHollowKnight === true) {\r\n // a text to show when player already finished their first playthrough (killed Hollow Knight first time)\r\n section.current = \"endOfHints\";\r\n return true;\r\n }\r\n\r\n for (let i in dataObject) {\r\n\r\n if (i === \"endOfHints\") {\r\n break;\r\n\r\n } else if (playerData[i] === true) {\r\n continue;\r\n\r\n } else if (i === \"fireballLevel\") {\r\n if (playerData[i] >= 1) {\r\n continue;\r\n\r\n } else {\r\n section.current = i;\r\n break;\r\n }\r\n } else if (i === \"Crossroads_04\") {\r\n let GruzMotherDefeated = false;\r\n\r\n for (let k = 0, length = worldData.length; k < length; k++) {\r\n if (worldData[k].id === \"Battle Scene\" && worldData[k].sceneName === \"Crossroads_04\" && worldData[k].activated === true) {\r\n GruzMotherDefeated = true;\r\n break;\r\n }\r\n }\r\n if (GruzMotherDefeated) {\r\n continue; // next dataObject (i)\r\n\r\n } else {\r\n section.current = i;\r\n break;\r\n }\r\n } else if (i === \"dungDefenderOrHornet2\") {\r\n if (playerData.defeatedDungDefender === true) {\r\n continue;\r\n\r\n } else if (playerData.hornetOutskirtsDefeated === true) {\r\n continue;\r\n\r\n } else { // if no Dung Defender or Hornet 2\r\n section.current = i;\r\n break;\r\n }\r\n } else if (i === \"ismaTearOrShadeCloak\") {\r\n if (playerData.hasAcidArmour === true) {\r\n continue;\r\n\r\n } else if (playerData.hasKingsBrand === true) {\r\n if (playerData.hasShadowDash === true) {\r\n continue;\r\n\r\n } else { // if Kings Brand but no Shade Cloak\r\n section.current = i;\r\n break;\r\n }\r\n } else { // if no Isma's Tear or Kings Brand\r\n section.current = i;\r\n break;\r\n }\r\n /* \r\n After killing Hollow Knight:\r\n - gather 1800 Essence (Essence sources)\r\n - get Awoken Dream Nail from Seer\r\n - use Awoken Dream Nail on the knight corpse in Ancient Basin/Palace Grounds (discover White Palace)\r\n - acquire White Fragment from White Palace\r\n - defeat Hornet 2\r\n - get King's Brand\r\n - open door to the Abyss\r\n - light the lighthouse\r\n - get Shade Cloak\r\n - visit Queen's Gardens\r\n - defeat Traitor Lord\r\n - get White Fragment from White Lady\r\n - equip Kingsoul and visit Birthplace\r\n - get Void Heart\r\n - go to Black Egg Temple, Dream Nail Hollow Knight and defeat Radiance (end of hints)\r\n */\r\n } else { // if anything from the hints list is not done\r\n section.current = i;\r\n break;\r\n }\r\n } // end: for (let i in dataObject)\r\n} // function CheckHintsTrue()\r\n\r\n/**\r\n * Pre-Cleans HTML. Reads contents inside text area and parses it to a JavaScript object. If not empty, runs HKCheckCompletion() to check data.\r\n */\r\nfunction HKReadTextArea(textAreaId = \"\") {\r\n\r\n // start benchmark\r\n benchmarkTimes.HKReadTextArea.timeStart = performance.now();\r\n\r\n let contents = document.getElementById(textAreaId).value;\r\n\r\n if (contents.length) {\r\n\r\n // starts the main HTML generating function GenerateInnerHTML() and ensures proper checkbox behaviour\r\n InitializeHTMLPopulation(HK);\r\n\r\n try {\r\n let jsonObject = JSON.parse(contents);\r\n // console.log(jsonObject);\r\n if (jsonObject.hasOwnProperty(\"playerData\")) {\r\n\r\n HKCheckCompletion(jsonObject);\r\n }\r\n\r\n // end benchmark and show results\r\n benchmarkTimes.HKReadTextArea.timeEnd = performance.now();\r\n\r\n let result = benchmarkTimes.HKReadTextArea.timeEnd - benchmarkTimes.HKReadTextArea.timeStart;\r\n\r\n console.info(`HKReadTextArea() time (ms) = %c${result.toFixed(2)}`, `color: #008cdc; font-weight: 700;`);\r\n\r\n } catch (error) {\r\n HK.saveAnalyzed = false;\r\n alert(`This seems like not a valid Hollow Knight save.\\n${error}`);\r\n console.info(`This seems like not a valid Hollow Knight save.\\n${error}`);\r\n }\r\n } else {\r\n /* reset timer */\r\n benchmarkTimes.HKReadTextArea.timeStart = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Populate all HTML with given ID and their initial data set as false (used at DOM load)\r\n * @param {object} db JavaScript Object containing all HTML IDs to populate\r\n */\r\nfunction InitializeHTMLPopulation(db) {\r\n\r\n GenerateInnerHTML(db);\r\n\r\n // Check local storage first to set proper checkbox state before the below functions start (default is always unchecked)\r\n if (StorageAvailable('localStorage')) {\r\n if (localStorage.getItem(\"hkCheckboxHints\") === \"checked\") document.getElementById(\"checkbox-hints\").checked = true;\r\n if (localStorage.getItem(\"hkCheckboxSpoilers\") === \"checked\") document.getElementById(\"checkbox-spoilers\").checked = true;\r\n }\r\n\r\n // Prevents wrong checkbox behaviour (must run after everything is finished)\r\n CheckboxHintsToggle();\r\n CheckboxSpoilersToggle();\r\n}\r\n\r\n/**\r\n * Reset the object state in memory to default values, like before first save analyzing. Undo all changes.\r\n * @param {object} db database object reference\r\n */\r\nfunction ResetCompletion(db) {\r\n\r\n let sections = db.sections;\r\n let entries = {};\r\n\r\n db.saveAnalyzed = false;\r\n\r\n /* Bring Extended Completion to default values (0) */\r\n let gameCompletionExtended = db.sections.intro.entries.gameCompletionExtended;\r\n let intro = db.sections.intro;\r\n\r\n intro.extendedCompletionDone = 0;\r\n intro.extendedCompletionTotal = 0;\r\n gameCompletionExtended.spoiler = 0;\r\n gameCompletionExtended.spoilerAfter = \"\";\r\n\r\n for (let section in sections) {\r\n entries = sections[section].entries;\r\n\r\n if (sections[section].hasOwnProperty(\"percent\")) sections[section].percent = 0;\r\n\r\n if (sections[section].hasOwnProperty(\"midPercent\")) sections[section].midPercent = 0;\r\n\r\n switch (section) {\r\n case \"intro\":\r\n case \"hints\":\r\n break;\r\n\r\n default:\r\n\r\n for (let entry in entries) {\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n entries[entry].icon = \"red\";\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"disabled\")) {\r\n entries[entry].disabled = false;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"amount\")) {\r\n entries[entry].amount = 0;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"amountTotal\")) {\r\n entries[entry].amountTotal = 0;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"max\")) {\r\n entries[entry].max = entries[entry].maxDefault;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/* -------------------------- Classes --------------------------------------------------------------------------------------- */\r\n\r\nclass DataChecker {\r\n\r\n /**\r\n * Used for checking and verifying data (like Grubs, Items or Geo Rocks) inside a player's save file.\r\n * Pass a save to the object and it will be split automatically to playerData, boolData and geoRocksData.\r\n * @param {object} saveFile The whole player's save file, in JSON format\r\n */\r\n constructor(saveFile) {\r\n this.saveFile = saveFile;\r\n this.playerData = saveFile.playerData;\r\n this.boolData = saveFile.sceneData.persistentBoolItems;\r\n this.geoRocksData = saveFile.sceneData.geoRocks;\r\n }\r\n\r\n /**\r\n * Verifies if a specific Collectible is found in boolData and returns true/false.\r\n * @param {string} id the Collectible's id in the database.\r\n * @param {string} sceneName the Collectible's sceneName in the database.\r\n * @returns {boolean}\r\n */\r\n _FindItem(entry = {}) {\r\n\r\n for (let i = 0, length = this.boolData.length; i < length; i++) {\r\n if (this.boolData[i].id === entry.id &&\r\n this.boolData[i].sceneName === entry.sceneName &&\r\n this.boolData[i].activated === true) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n } // end _FindItem\r\n\r\n /**\r\n * Verifies if a specific Geo Rock is destroyed and returns true/false.\r\n * @param {string} id the Geo Rock's id in the database.\r\n * @param {string} sceneName the Geo Rock's sceneName in the database.\r\n * @returns {boolean}\r\n */\r\n _FindGeoRock(entry = {}) {\r\n\r\n for (let i = 0, length = this.geoRocksData.length; i < length; i++) {\r\n if (this.geoRocksData[i].id === entry.id &&\r\n this.geoRocksData[i].sceneName === entry.sceneName &&\r\n this.geoRocksData[i].hitsLeft === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n } // end _FindGeoRock\r\n\r\n /**\r\n * Verifies the status of all items in a given section (e.g. Grubs or Whispering Roots) from the database.\r\n * @param {object} section Provide a section object to check.\r\n */\r\n checkItems(section) {\r\n this.section = section;\r\n this.entries = section.entries;\r\n\r\n for (let entry in this.entries) {\r\n\r\n switch (entry) {\r\n\r\n // The Collector: Tower of Love Grubs activation Bug in the game - needs a workaround.\r\n // All 3 Grubs in the Tower of Love must be treated as one.\r\n case \"grub33\":\r\n case \"grub34\":\r\n\r\n if (this.entries.grub32.icon === \"green\") {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n break;\r\n\r\n // playerData activation checks true/false\r\n case \"hallownestSeal17\": // The Seer's Essence Reward - Hallownest Seal\r\n case \"arcaneEgg2\": // The Seer's Essence Reward - Arcane Egg\r\n case \"rancidEgg20\": // Sly's Rancid Egg shop item\r\n\r\n if (this.playerData[this.entries[entry].id] === true) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n break;\r\n\r\n // Tuk's Rancid Egg - Normal or Steel Soul mode behaviour\r\n case \"rancidEgg21\":\r\n\r\n // Steel Soul\r\n if (this.playerData.permadeathMode > 0) {\r\n\r\n // id: \"Shiny Item\", sceneName: \"Waterways_03\"\r\n if (this._FindItem(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n // Set Steel Soul text description\r\n this.entries[entry].spoiler = this.entries[entry].spoilerSteelSoul;\r\n }\r\n // Normal Mode\r\n else {\r\n\r\n // playerData.tukDungEgg\r\n if (this.playerData[this.entries[entry].idPlayerData] === true) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n // Set Normal Mode text description\r\n this.entries[entry].spoiler = this.entries[entry].spoilerNormal;\r\n }\r\n\r\n break;\r\n\r\n // missable Arcane Egg in Lifeblood Core Room\r\n case \"arcaneEgg4\":\r\n\r\n if (this._FindItem(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n }\r\n // When got the Lifeblood Core charm, but didn't pick up the Arcane Egg\r\n else if (this.playerData.gotCharm_9 === true) {\r\n SetIconNone(this.section, entry);\r\n this.entries[entry].disabled = true;\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n break;\r\n\r\n // boolData activation checks\r\n default:\r\n\r\n if (this._FindItem(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n }\r\n }\r\n } // end checkItems\r\n\r\n /**\r\n * Verifies the status of all Geo Rocks from the database.\r\n * @param {object} section Provide a Geo Rocks section object to check.\r\n */\r\n checkGeoRocks(section) {\r\n this.section = section;\r\n this.entries = section.entries;\r\n\r\n for (let entry in this.entries) {\r\n\r\n switch (entry) {\r\n\r\n default:\r\n\r\n if (this._FindGeoRock(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n }\r\n }\r\n } // end checkGeoRocks\r\n\r\n} // end class DataChecker\r\n\r\n/* ----------------------- Event Listeners -------------------------- */\r\n\r\n// Populate HTML at load (before img and css)\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n InitializeHTMLPopulation(HK);\r\n});\r\n\r\n// Analyze Text button\r\ndocument.getElementById(\"save-area-read\").addEventListener(\"click\", () => {\r\n HKReadTextArea(\"save-area\");\r\n}, false);\r\n\r\nexport {\r\n // to use in LoadSaveFile.js for auto-analyzing file after decoding\r\n HKCheckCompletion\r\n};","/* \r\n Parts of the code thanks to bloodorca https://github.com/bloodorca/hollow (base64.js, functions.js) with slight modifications.\r\n The steps used there for decryption were taken from KayDeeTee https://github.com/KayDeeTee/Hollow-Knight-SaveManager\r\n Without these two people the existence of this tool wouldn't be possible :)\r\n*/\r\n\r\n// ---------------- Constants ----------------- //\r\n\r\n// AES JS for file decryption\r\nconst aesjs = require(\"./aes-js.js\");\r\n// For reading the text area after save decoding\r\nimport {\r\n HKCheckCompletion\r\n} from \"./HKCheckCompletion.js\";\r\n\r\nimport {\r\n Benchmark,\r\n benchmarkTimes\r\n} from \"./page-functions.js\";\r\n\r\nconst CSHARP_HEADER = [0, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0]; // 22 bytes\r\n\r\nconst BASE64_ARRAY = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".split(\"\").map(c => c.charCodeAt(0));\r\nconst BASE64_DECODE_TABLE = new Map(BASE64_ARRAY.map((ord, i) => [ord, i]));\r\n\r\nconst AES_KEY = new TextEncoder().encode('UKu52ePUBwetZ9wNX88o54dnfKRu0T1l'); // encodes a string to Uint8Array (prepare for AES JS)\r\nconst ECB_STREAM_CIPHER = new aesjs.ModeOfOperation.ecb(AES_KEY); // create a new AES stream cipher object using the encoded key\r\n\r\n// ---------------- Variables ----------------- //\r\n\r\n/* let benchLSFBegin, benchLSFEnd, benchTotal; */\r\n\r\n// ---------------- Functions ----------------- //\r\n\r\n/**\r\n * Main input tag file function. Selects the first file, reads it as an Array Buffer, starts the processing of the file when loaded.\r\n * Starts benchmarking.\r\n * @param {FileList} input FileList object containing a list of File objects. The FileList behaves like an array, so you can check its length property to get the number of selected files.\r\n */\r\n// eslint-disable-next-line no-unused-vars\r\nfunction LoadSaveFile(input, time) {\r\n\r\n const inputFileList = input.files;\r\n // console.info(\"Input length: \" + input.files.length)\r\n // Cease further processing if user canceled the file input dialog\r\n if (inputFileList.length < 1) return false;\r\n\r\n // start benchmark\r\n benchmarkTimes.LoadSaveFile.timeStart = time;\r\n benchmarkTimes.Total.timeStart = time;\r\n benchmarkTimes.HKReadTextArea.timeStart = 0;\r\n benchmarkTimes.HKReadTextArea.timeEnd = 0;\r\n\r\n // Prepares a File object from the first file of the input files for reading as an Array Buffer\r\n let inputFileObject = inputFileList[0];\r\n\r\n // Cleans the file list to avoid problems after subsequent use\r\n // document.getElementById(\"save-area-file\").value = \"\";\r\n\r\n // 1. read file\r\n // The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.\r\n // It is an array of bytes, often referred to in other languages as a \"byte array\".\r\n\r\n // new FileReader()\r\n let inputReader = new FileReader();\r\n // readAsArrayBuffer(file)\r\n inputReader.readAsArrayBuffer(inputFileObject);\r\n // addEventListener(\"load\", function) - to decode the file when loaded\r\n inputReader.addEventListener(\"load\", ProcessFileObject);\r\n}\r\n\r\n/**\r\n * Reads the File object as an Array Buffer and does all other operations (decoding, decryption, conversion to string, pasting to text area).\r\n * Launches the HKReadTextArea() function automatically after pasting the string to text area\r\n */\r\nfunction ProcessFileObject() {\r\n let inputArrayBuffer = this.result;\r\n let decodedString;\r\n\r\n // 2. Decode file\r\n\r\n try {\r\n // Uint8Array(ArrayBuffer) uint8_t equivalent in C\r\n inputArrayBuffer = new Uint8Array(inputArrayBuffer);\r\n\r\n // ArrayBuffer.slice()\r\n // The slice() method copies up to, but not including, the byte indicated by the end parameter.\r\n inputArrayBuffer.slice();\r\n\r\n // remove C# header and LengthPrefixedString header (ArrayBuffer)\r\n inputArrayBuffer = RemoveHeaders(inputArrayBuffer);\r\n\r\n // base64 Decoding (ArrayBuffer)\r\n inputArrayBuffer = Base64Decode(inputArrayBuffer);\r\n\r\n // AES decryption (ECB) removes pkcs7 padding (ArrayBuffer)\r\n inputArrayBuffer = AESDecryption(inputArrayBuffer);\r\n\r\n // Convert ArrayBuffer to string/text TextDecoder().decode(ArrayBuffer)\r\n decodedString = new TextDecoder().decode(inputArrayBuffer);\r\n\r\n // finish and show benchmark\r\n /* benchLSFEnd = new Date(); */\r\n benchmarkTimes.LoadSaveFile.timeEnd = performance.now();\r\n /* console.info(\"LoadSaveFile() time (ms) =\", benchLSFEnd - benchLSFBegin); */\r\n\r\n // 4. Analyze the decoded string immediately\r\n try {\r\n HKCheckCompletion(JSON.parse(decodedString));\r\n } catch (error) {\r\n alert(`This seems like not a valid Hollow Knight save. ${error}`);\r\n console.info(`This seems like not a valid Hollow Knight save. ${error}`);\r\n }\r\n\r\n // 5. Paste decoded string file to text area\r\n (async () => {\r\n document.getElementById(\"save-area\").value = \"\";\r\n document.getElementById(\"save-area\").value = await decodedString;\r\n })();\r\n\r\n // finish total and show benchmark\r\n benchmarkTimes.Total.timeEnd = performance.now();\r\n\r\n Benchmark(benchmarkTimes);\r\n /* console.info(\"Total time (ms) =\", benchTotal - benchLSFBegin); */\r\n\r\n // alert(`Decoded String: ${decodedString}`);\r\n // alert(`Array Buffer: ${inputArrayBuffer}`);\r\n } catch (error) {\r\n alert(`The file cannot be decoded. ${error}`);\r\n console.info(`The file cannot be decoded. ${error}`);\r\n }\r\n}\r\n\r\n/**\r\n * Removes C# header, LengthPrefixedString header and byte 11 at the end of the Uint8 Array Buffer\r\n * @param {Uint8Array} buffer Uint8Array buffer for removing the header from\r\n * @param {Uint8Array} csHeader Uint8Array for the C# header length calculation\r\n * @returns {Uint8Array}\r\n */\r\nfunction RemoveHeaders(buffer, csHeader = CSHARP_HEADER) {\r\n // Remove the fixed C# header and byte 11 at the end. \r\n buffer = buffer.subarray(csHeader.length, buffer.length - 1);\r\n\r\n // Remove LengthPrefixedString header\r\n let lengthCount = 0;\r\n for (let i = 0; i < 5; i++) {\r\n lengthCount++;\r\n if ((buffer[i] & 0x80) == 0) {\r\n break;\r\n }\r\n }\r\n\r\n return buffer.subarray(lengthCount);\r\n}\r\n\r\n/**\r\n * Decodes an Array Buffer using a Base64 decode table\r\n * @param {Uint8Array} buffer Uint8Array Buffer to decode\r\n * @returns {Uint8Array}\r\n */\r\nfunction Base64Decode(buffer) {\r\n buffer = new Uint8Array(buffer).slice();\r\n buffer = buffer.map(v => BASE64_DECODE_TABLE.get(v));\r\n\r\n // The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.\r\n let p = buffer.indexOf(64);\r\n let end;\r\n\r\n if (p != -1) {\r\n end = p;\r\n } else {\r\n end = buffer.length;\r\n }\r\n\r\n buffer = buffer.subarray(0, end);\r\n\r\n let output = new Uint8Array(3 * buffer.length / 4);\r\n let continuous = Math.floor(buffer.length / 4) * 4;\r\n\r\n for (let i = 0; i < continuous; i += 4) {\r\n let k = 3 * i / 4;\r\n output[k] = buffer[i] << 2 | buffer[i + 1] >> 4;\r\n output[k + 1] = (buffer[i + 1] & 0x0F) << 4 | buffer[i + 2] >> 2;\r\n output[k + 2] = (buffer[i + 2] & 0x03) << 6 | buffer[i + 3];\r\n }\r\n if (buffer[continuous] != undefined) {\r\n let k = 3 * continuous / 4;\r\n output[k] = buffer[continuous] << 2 | buffer[continuous + 1] >> 4;\r\n if (buffer[continuous + 2] != undefined) {\r\n output[k + 1] = (buffer[continuous + 1] & 0x0F) << 4 | buffer[continuous + 2] >> 2;\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n * Decrypt an Uint8Array Buffer using aesjs (ECB) and a predefined AES key + remove pkcs7 padding\r\n * @param {Uint8Array} buffer Uint8Array buffer to decrypt\r\n * @returns {Uint8Array}\r\n */\r\nfunction AESDecryption(buffer, cipherObject = ECB_STREAM_CIPHER) {\r\n let output = cipherObject.decrypt(buffer);\r\n return output.subarray(0, -output[output.length - 1]);\r\n}\r\n\r\n// Assign actions (functions) to launch when a specific element is used\r\ndocument.getElementById(\"save-area-file\").addEventListener(\"change\", (event) => {\r\n LoadSaveFile(event.target, performance.now());\r\n});\r\ndocument.getElementById(\"save-area-file\").addEventListener(\"click\", (mouseEvent) => {\r\n mouseEvent.target.value = \"\";\r\n});\r\n\r\nexport {\r\n LoadSaveFile\r\n};","/* eslint-disable */\r\n\"use strict\";\r\n\r\n(function (root) {\r\n\r\n function checkInt(value) {\r\n return (parseInt(value) === value);\r\n }\r\n\r\n function checkInts(arrayish) {\r\n if (!checkInt(arrayish.length)) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < arrayish.length; i++) {\r\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function coerceArray(arg, copy) {\r\n\r\n // ArrayBuffer view\r\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\r\n\r\n if (copy) {\r\n if (arg.slice) {\r\n arg = arg.slice();\r\n } else {\r\n arg = Array.prototype.slice.call(arg);\r\n }\r\n }\r\n\r\n return arg;\r\n }\r\n\r\n // It's an array; check it is a valid representation of a byte\r\n if (Array.isArray(arg)) {\r\n if (!checkInts(arg)) {\r\n throw new Error('Array contains invalid value: ' + arg);\r\n }\r\n\r\n return new Uint8Array(arg);\r\n }\r\n\r\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\r\n if (checkInt(arg.length) && checkInts(arg)) {\r\n return new Uint8Array(arg);\r\n }\r\n\r\n throw new Error('unsupported array-like object');\r\n }\r\n\r\n function createArray(length) {\r\n return new Uint8Array(length);\r\n }\r\n\r\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\r\n if (sourceStart != null || sourceEnd != null) {\r\n if (sourceArray.slice) {\r\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\r\n } else {\r\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\r\n }\r\n }\r\n targetArray.set(sourceArray, targetStart);\r\n }\r\n\r\n\r\n\r\n var convertUtf8 = (function () {\r\n function toBytes(text) {\r\n var result = [],\r\n i = 0;\r\n text = encodeURI(text);\r\n while (i < text.length) {\r\n var c = text.charCodeAt(i++);\r\n\r\n // if it is a % sign, encode the following 2 bytes as a hex value\r\n if (c === 37) {\r\n result.push(parseInt(text.substr(i, 2), 16))\r\n i += 2;\r\n\r\n // otherwise, just the actual byte\r\n } else {\r\n result.push(c)\r\n }\r\n }\r\n\r\n return coerceArray(result);\r\n }\r\n\r\n function fromBytes(bytes) {\r\n var result = [],\r\n i = 0;\r\n\r\n while (i < bytes.length) {\r\n var c = bytes[i];\r\n\r\n if (c < 128) {\r\n result.push(String.fromCharCode(c));\r\n i++;\r\n } else if (c > 191 && c < 224) {\r\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\r\n i += 2;\r\n } else {\r\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\r\n i += 3;\r\n }\r\n }\r\n\r\n return result.join('');\r\n }\r\n\r\n return {\r\n toBytes: toBytes,\r\n fromBytes: fromBytes,\r\n }\r\n })();\r\n\r\n var convertHex = (function () {\r\n function toBytes(text) {\r\n var result = [];\r\n for (var i = 0; i < text.length; i += 2) {\r\n result.push(parseInt(text.substr(i, 2), 16));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\r\n var Hex = '0123456789abcdef';\r\n\r\n function fromBytes(bytes) {\r\n var result = [];\r\n for (var i = 0; i < bytes.length; i++) {\r\n var v = bytes[i];\r\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\r\n }\r\n return result.join('');\r\n }\r\n\r\n return {\r\n toBytes: toBytes,\r\n fromBytes: fromBytes,\r\n }\r\n })();\r\n\r\n\r\n // Number of rounds by keysize\r\n var numberOfRounds = {\r\n 16: 10,\r\n 24: 12,\r\n 32: 14\r\n }\r\n\r\n // Round constant words\r\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\r\n\r\n // S-box and Inverse S-box (S is for Substitution)\r\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\r\n var Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\r\n\r\n // Transformations for encryption\r\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\r\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\r\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\r\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\r\n\r\n // Transformations for decryption\r\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\r\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\r\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\r\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\r\n\r\n // Transformations for decryption key expansion\r\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\r\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\r\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\r\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\r\n\r\n function convertToInt32(bytes) {\r\n var result = [];\r\n for (var i = 0; i < bytes.length; i += 4) {\r\n result.push(\r\n (bytes[i] << 24) |\r\n (bytes[i + 1] << 16) |\r\n (bytes[i + 2] << 8) |\r\n bytes[i + 3]\r\n );\r\n }\r\n return result;\r\n }\r\n\r\n var AES = function (key) {\r\n if (!(this instanceof AES)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n Object.defineProperty(this, 'key', {\r\n value: coerceArray(key, true)\r\n });\r\n\r\n this._prepare();\r\n }\r\n\r\n\r\n AES.prototype._prepare = function () {\r\n\r\n var rounds = numberOfRounds[this.key.length];\r\n if (rounds == null) {\r\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\r\n }\r\n\r\n // encryption round keys\r\n this._Ke = [];\r\n\r\n // decryption round keys\r\n this._Kd = [];\r\n\r\n for (var i = 0; i <= rounds; i++) {\r\n this._Ke.push([0, 0, 0, 0]);\r\n this._Kd.push([0, 0, 0, 0]);\r\n }\r\n\r\n var roundKeyCount = (rounds + 1) * 4;\r\n var KC = this.key.length / 4;\r\n\r\n // convert the key into ints\r\n var tk = convertToInt32(this.key);\r\n\r\n // copy values into round key arrays\r\n var index;\r\n for (var i = 0; i < KC; i++) {\r\n index = i >> 2;\r\n this._Ke[index][i % 4] = tk[i];\r\n this._Kd[rounds - index][i % 4] = tk[i];\r\n }\r\n\r\n // key expansion (fips-197 section 5.2)\r\n var rconpointer = 0;\r\n var t = KC,\r\n tt;\r\n while (t < roundKeyCount) {\r\n tt = tk[KC - 1];\r\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\r\n (S[(tt >> 8) & 0xFF] << 16) ^\r\n (S[tt & 0xFF] << 8) ^\r\n S[(tt >> 24) & 0xFF] ^\r\n (rcon[rconpointer] << 24));\r\n rconpointer += 1;\r\n\r\n // key expansion (for non-256 bit)\r\n if (KC != 8) {\r\n for (var i = 1; i < KC; i++) {\r\n tk[i] ^= tk[i - 1];\r\n }\r\n\r\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\r\n } else {\r\n for (var i = 1; i < (KC / 2); i++) {\r\n tk[i] ^= tk[i - 1];\r\n }\r\n tt = tk[(KC / 2) - 1];\r\n\r\n tk[KC / 2] ^= (S[tt & 0xFF] ^\r\n (S[(tt >> 8) & 0xFF] << 8) ^\r\n (S[(tt >> 16) & 0xFF] << 16) ^\r\n (S[(tt >> 24) & 0xFF] << 24));\r\n\r\n for (var i = (KC / 2) + 1; i < KC; i++) {\r\n tk[i] ^= tk[i - 1];\r\n }\r\n }\r\n\r\n // copy values into round key arrays\r\n var i = 0,\r\n r, c;\r\n while (i < KC && t < roundKeyCount) {\r\n r = t >> 2;\r\n c = t % 4;\r\n this._Ke[r][c] = tk[i];\r\n this._Kd[rounds - r][c] = tk[i++];\r\n t++;\r\n }\r\n }\r\n\r\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\r\n for (var r = 1; r < rounds; r++) {\r\n for (var c = 0; c < 4; c++) {\r\n tt = this._Kd[r][c];\r\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\r\n U2[(tt >> 16) & 0xFF] ^\r\n U3[(tt >> 8) & 0xFF] ^\r\n U4[tt & 0xFF]);\r\n }\r\n }\r\n }\r\n\r\n AES.prototype.encrypt = function (plaintext) {\r\n if (plaintext.length != 16) {\r\n throw new Error('invalid plaintext size (must be 16 bytes)');\r\n }\r\n\r\n var rounds = this._Ke.length - 1;\r\n var a = [0, 0, 0, 0];\r\n\r\n // convert plaintext to (ints ^ key)\r\n var t = convertToInt32(plaintext);\r\n for (var i = 0; i < 4; i++) {\r\n t[i] ^= this._Ke[0][i];\r\n }\r\n\r\n // apply round transforms\r\n for (var r = 1; r < rounds; r++) {\r\n for (var i = 0; i < 4; i++) {\r\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\r\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\r\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\r\n T4[t[(i + 3) % 4] & 0xff] ^\r\n this._Ke[r][i]);\r\n }\r\n t = a.slice();\r\n }\r\n\r\n // the last round is special\r\n var result = createArray(16),\r\n tt;\r\n for (var i = 0; i < 4; i++) {\r\n tt = this._Ke[rounds][i];\r\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\r\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\r\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\r\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n AES.prototype.decrypt = function (ciphertext) {\r\n if (ciphertext.length != 16) {\r\n throw new Error('invalid ciphertext size (must be 16 bytes)');\r\n }\r\n\r\n var rounds = this._Kd.length - 1;\r\n var a = [0, 0, 0, 0];\r\n\r\n // convert plaintext to (ints ^ key)\r\n var t = convertToInt32(ciphertext);\r\n for (var i = 0; i < 4; i++) {\r\n t[i] ^= this._Kd[0][i];\r\n }\r\n\r\n // apply round transforms\r\n for (var r = 1; r < rounds; r++) {\r\n for (var i = 0; i < 4; i++) {\r\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\r\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\r\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\r\n T8[t[(i + 1) % 4] & 0xff] ^\r\n this._Kd[r][i]);\r\n }\r\n t = a.slice();\r\n }\r\n\r\n // the last round is special\r\n var result = createArray(16),\r\n tt;\r\n for (var i = 0; i < 4; i++) {\r\n tt = this._Kd[rounds][i];\r\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\r\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\r\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\r\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Electonic Codebook (ECB)\r\n */\r\n var ModeOfOperationECB = function (key) {\r\n if (!(this instanceof ModeOfOperationECB)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Electronic Code Block\";\r\n this.name = \"ecb\";\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationECB.prototype.encrypt = function (plaintext) {\r\n plaintext = coerceArray(plaintext);\r\n\r\n if ((plaintext.length % 16) !== 0) {\r\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var ciphertext = createArray(plaintext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < plaintext.length; i += 16) {\r\n copyArray(plaintext, block, 0, i, i + 16);\r\n block = this._aes.encrypt(block);\r\n copyArray(block, ciphertext, i);\r\n }\r\n\r\n return ciphertext;\r\n }\r\n\r\n ModeOfOperationECB.prototype.decrypt = function (ciphertext) {\r\n ciphertext = coerceArray(ciphertext);\r\n\r\n if ((ciphertext.length % 16) !== 0) {\r\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var plaintext = createArray(ciphertext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < ciphertext.length; i += 16) {\r\n copyArray(ciphertext, block, 0, i, i + 16);\r\n block = this._aes.decrypt(block);\r\n copyArray(block, plaintext, i);\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Cipher Block Chaining (CBC)\r\n */\r\n var ModeOfOperationCBC = function (key, iv) {\r\n if (!(this instanceof ModeOfOperationCBC)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Cipher Block Chaining\";\r\n this.name = \"cbc\";\r\n\r\n if (!iv) {\r\n iv = createArray(16);\r\n\r\n } else if (iv.length != 16) {\r\n throw new Error('invalid initialation vector size (must be 16 bytes)');\r\n }\r\n\r\n this._lastCipherblock = coerceArray(iv, true);\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationCBC.prototype.encrypt = function (plaintext) {\r\n plaintext = coerceArray(plaintext);\r\n\r\n if ((plaintext.length % 16) !== 0) {\r\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var ciphertext = createArray(plaintext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < plaintext.length; i += 16) {\r\n copyArray(plaintext, block, 0, i, i + 16);\r\n\r\n for (var j = 0; j < 16; j++) {\r\n block[j] ^= this._lastCipherblock[j];\r\n }\r\n\r\n this._lastCipherblock = this._aes.encrypt(block);\r\n copyArray(this._lastCipherblock, ciphertext, i);\r\n }\r\n\r\n return ciphertext;\r\n }\r\n\r\n ModeOfOperationCBC.prototype.decrypt = function (ciphertext) {\r\n ciphertext = coerceArray(ciphertext);\r\n\r\n if ((ciphertext.length % 16) !== 0) {\r\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var plaintext = createArray(ciphertext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < ciphertext.length; i += 16) {\r\n copyArray(ciphertext, block, 0, i, i + 16);\r\n block = this._aes.decrypt(block);\r\n\r\n for (var j = 0; j < 16; j++) {\r\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\r\n }\r\n\r\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Cipher Feedback (CFB)\r\n */\r\n var ModeOfOperationCFB = function (key, iv, segmentSize) {\r\n if (!(this instanceof ModeOfOperationCFB)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Cipher Feedback\";\r\n this.name = \"cfb\";\r\n\r\n if (!iv) {\r\n iv = createArray(16);\r\n\r\n } else if (iv.length != 16) {\r\n throw new Error('invalid initialation vector size (must be 16 size)');\r\n }\r\n\r\n if (!segmentSize) {\r\n segmentSize = 1;\r\n }\r\n\r\n this.segmentSize = segmentSize;\r\n\r\n this._shiftRegister = coerceArray(iv, true);\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationCFB.prototype.encrypt = function (plaintext) {\r\n if ((plaintext.length % this.segmentSize) != 0) {\r\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\r\n }\r\n\r\n var encrypted = coerceArray(plaintext, true);\r\n\r\n var xorSegment;\r\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\r\n xorSegment = this._aes.encrypt(this._shiftRegister);\r\n for (var j = 0; j < this.segmentSize; j++) {\r\n encrypted[i + j] ^= xorSegment[j];\r\n }\r\n\r\n // Shift the register\r\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\r\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\r\n }\r\n\r\n return encrypted;\r\n }\r\n\r\n ModeOfOperationCFB.prototype.decrypt = function (ciphertext) {\r\n if ((ciphertext.length % this.segmentSize) != 0) {\r\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\r\n }\r\n\r\n var plaintext = coerceArray(ciphertext, true);\r\n\r\n var xorSegment;\r\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\r\n xorSegment = this._aes.encrypt(this._shiftRegister);\r\n\r\n for (var j = 0; j < this.segmentSize; j++) {\r\n plaintext[i + j] ^= xorSegment[j];\r\n }\r\n\r\n // Shift the register\r\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\r\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n /**\r\n * Mode Of Operation - Output Feedback (OFB)\r\n */\r\n var ModeOfOperationOFB = function (key, iv) {\r\n if (!(this instanceof ModeOfOperationOFB)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Output Feedback\";\r\n this.name = \"ofb\";\r\n\r\n if (!iv) {\r\n iv = createArray(16);\r\n\r\n } else if (iv.length != 16) {\r\n throw new Error('invalid initialation vector size (must be 16 bytes)');\r\n }\r\n\r\n this._lastPrecipher = coerceArray(iv, true);\r\n this._lastPrecipherIndex = 16;\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationOFB.prototype.encrypt = function (plaintext) {\r\n var encrypted = coerceArray(plaintext, true);\r\n\r\n for (var i = 0; i < encrypted.length; i++) {\r\n if (this._lastPrecipherIndex === 16) {\r\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\r\n this._lastPrecipherIndex = 0;\r\n }\r\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n\r\n // Decryption is symetric\r\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\r\n\r\n\r\n /**\r\n * Counter object for CTR common mode of operation\r\n */\r\n var Counter = function (initialValue) {\r\n if (!(this instanceof Counter)) {\r\n throw Error('Counter must be instanitated with `new`');\r\n }\r\n\r\n // We allow 0, but anything false-ish uses the default 1\r\n if (initialValue !== 0 && !initialValue) {\r\n initialValue = 1;\r\n }\r\n\r\n if (typeof (initialValue) === 'number') {\r\n this._counter = createArray(16);\r\n this.setValue(initialValue);\r\n\r\n } else {\r\n this.setBytes(initialValue);\r\n }\r\n }\r\n\r\n Counter.prototype.setValue = function (value) {\r\n if (typeof (value) !== 'number' || parseInt(value) != value) {\r\n throw new Error('invalid counter value (must be an integer)');\r\n }\r\n\r\n for (var index = 15; index >= 0; --index) {\r\n this._counter[index] = value % 256;\r\n value = value >> 8;\r\n }\r\n }\r\n\r\n Counter.prototype.setBytes = function (bytes) {\r\n bytes = coerceArray(bytes, true);\r\n\r\n if (bytes.length != 16) {\r\n throw new Error('invalid counter bytes size (must be 16 bytes)');\r\n }\r\n\r\n this._counter = bytes;\r\n };\r\n\r\n Counter.prototype.increment = function () {\r\n for (var i = 15; i >= 0; i--) {\r\n if (this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Counter (CTR)\r\n */\r\n var ModeOfOperationCTR = function (key, counter) {\r\n if (!(this instanceof ModeOfOperationCTR)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Counter\";\r\n this.name = \"ctr\";\r\n\r\n if (!(counter instanceof Counter)) {\r\n counter = new Counter(counter)\r\n }\r\n\r\n this._counter = counter;\r\n\r\n this._remainingCounter = null;\r\n this._remainingCounterIndex = 16;\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationCTR.prototype.encrypt = function (plaintext) {\r\n var encrypted = coerceArray(plaintext, true);\r\n\r\n for (var i = 0; i < encrypted.length; i++) {\r\n if (this._remainingCounterIndex === 16) {\r\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n\r\n // Decryption is symetric\r\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\r\n\r\n\r\n ///////////////////////\r\n // Padding\r\n\r\n // See:https://tools.ietf.org/html/rfc2315\r\n function pkcs7pad(data) {\r\n data = coerceArray(data, true);\r\n var padder = 16 - (data.length % 16);\r\n var result = createArray(data.length + padder);\r\n copyArray(data, result);\r\n for (var i = data.length; i < result.length; i++) {\r\n result[i] = padder;\r\n }\r\n return result;\r\n }\r\n\r\n function pkcs7strip(data) {\r\n data = coerceArray(data, true);\r\n if (data.length < 16) {\r\n throw new Error('PKCS#7 invalid length');\r\n }\r\n\r\n var padder = data[data.length - 1];\r\n if (padder > 16) {\r\n throw new Error('PKCS#7 padding byte out of range');\r\n }\r\n\r\n var length = data.length - padder;\r\n for (var i = 0; i < padder; i++) {\r\n if (data[length + i] !== padder) {\r\n throw new Error('PKCS#7 invalid padding byte');\r\n }\r\n }\r\n\r\n var result = createArray(length);\r\n copyArray(data, result, 0, 0, length);\r\n return result;\r\n }\r\n\r\n ///////////////////////\r\n // Exporting\r\n\r\n\r\n // The block cipher\r\n var aesjs = {\r\n AES: AES,\r\n Counter: Counter,\r\n\r\n ModeOfOperation: {\r\n ecb: ModeOfOperationECB,\r\n cbc: ModeOfOperationCBC,\r\n cfb: ModeOfOperationCFB,\r\n ofb: ModeOfOperationOFB,\r\n ctr: ModeOfOperationCTR\r\n },\r\n\r\n utils: {\r\n hex: convertHex,\r\n utf8: convertUtf8\r\n },\r\n\r\n padding: {\r\n pkcs7: {\r\n pad: pkcs7pad,\r\n strip: pkcs7strip\r\n }\r\n },\r\n\r\n _arrayTest: {\r\n coerceArray: coerceArray,\r\n createArray: createArray,\r\n copyArray: copyArray,\r\n }\r\n };\r\n\r\n\r\n // node.js\r\n if (typeof exports !== 'undefined') {\r\n module.exports = aesjs\r\n\r\n // RequireJS/AMD\r\n // http://www.requirejs.org/docs/api.html\r\n // https://github.com/amdjs/amdjs-api/wiki/AMD\r\n } else if (typeof (define) === 'function' && define.amd) {\r\n define(aesjs);\r\n\r\n // Web Browsers\r\n } else {\r\n\r\n // If there was an existing library at \"aesjs\" make sure it's still available\r\n if (root.aesjs) {\r\n aesjs._aesjs = root.aesjs;\r\n }\r\n\r\n root.aesjs = aesjs;\r\n }\r\n\r\n\r\n})(this);","// ---------------- Hollow Knight Data Constant Objects ----------------- //\r\n/*\r\n This is the whole database for the tool, based on the .json save file data\r\n*/\r\n\r\nconst HK = {\r\n\r\n saveAnalyzed: false,\r\n\r\n sections: {\r\n\r\n /* ################ Intro ################### */\r\n\r\n intro: {\r\n h2: \"Game Status\",\r\n id: \"hk-intro\",\r\n\r\n percent: 0,\r\n maxPercent: 100,\r\n maxPercentDefault: 100,\r\n maxPercentBaseGame: 100,\r\n\r\n /*percent: 0,\r\n maxPercent: 112,\r\n maxPercentDefault: 112,\r\n maxPercentBaseGame: 100,\r\n maxPercentGrimmTroupe: 106,\r\n maxPercentLifeblood: 107,*/\r\n\r\n extendedCompletionDone: 0,\r\n extendedCompletionTotal: 0,\r\n\r\n entries: {\r\n timePlayed: {\r\n id: \"timePlayed\",\r\n icon: \"clock\",\r\n name: \"Time Played:\",\r\n spoiler: \"0 h 00 min 00 sec\",\r\n timeH: 0,\r\n timeM: 0,\r\n timeS: 0,\r\n },\r\n gameCompletion: {\r\n id: \"gameCompletion\",\r\n icon: \"red\",\r\n name: \"Game Completion:\",\r\n spoiler: 0,\r\n spoilerAfter: \"(out of 100 %)\",\r\n spoilerAfterDefault: \"(out of 100 %)\",\r\n spoilerAfterBaseGame: \"(out of 100 %)\",\r\n /*spoilerAfter: \"(out of 112 %)\",\r\n spoilerAfterDefault: \"(out of 112 %)\",\r\n spoilerAfterBaseGame: \"(out of 100 %)\",\r\n spoilerAfterGrimmTroupe: \"(out of 106 %)\",\r\n spoilerAfterLifeblood: \"(out of 107 %)\",*/\r\n },\r\n gameCompletionExtended: {\r\n id: \"gameCompletionExtended\",\r\n icon: \"red\",\r\n name: \"True Completion:\",\r\n spoiler: 0,\r\n spoilerAfter: \" / 0 = 0.00 %\",\r\n spoilerAfterDefault: \" / 0 = 0.00 %\",\r\n },\r\n saveVersion: {\r\n id: \"saveVersion\",\r\n icon: \"none\",\r\n name: \"Save Version:\",\r\n spoiler: \"0.0.0.0\"\r\n },\r\n health: {\r\n id: \"health\",\r\n icon: \"none\",\r\n name: \"Health:\",\r\n spoiler: \"\",\r\n amountTotal: 5,\r\n permadeathMode: false,\r\n },\r\n silk: {\r\n id: \"silk\",\r\n icon: \"none\",\r\n name: \"Silk:\",\r\n spoiler: \"\",\r\n amountTotal: 5\r\n },\r\n crests: {\r\n id: \"crests\",\r\n icon: \"none\",\r\n name: \"Crests:\",\r\n spoiler: \"\",\r\n amountTotal: 1,\r\n hunter:true,\r\n reaper:false,\r\n wanderer:false,\r\n beast:false,\r\n witch:false,\r\n toolmaster:false,\r\n shaman:false,\r\n\r\n /*amountFilled: 0,\r\n amountUnused: 3,\r\n amountOvercharmed: 0*/\r\n },\r\n rosaries: {\r\n id: \"rosaries\",\r\n icon: \"none\",\r\n name: \"Rosaries:\",\r\n spoiler: \"\",\r\n amount: 0,\r\n amountShade: 0,\r\n amountTotal: 0\r\n },\r\n shellShards: {\r\n id: \"shellShards\",\r\n icon: \"none\",\r\n name: \"Shell Shards:\",\r\n spoiler: \"\",\r\n amount: 0\r\n }\r\n },\r\n },\r\n\r\n /* ################ Hints ################### */\r\n\r\n hints: {\r\n h2: \"Elderbug once told me...\",\r\n id: \"hk-hints\",\r\n current: \"fireballLevel\",\r\n entries: {\r\n fireballLevel: {\r\n spoiler: \"A mysterious shaman is living in a dwelling, somewhere below the town of Dirtmouth.\"\r\n },\r\n hornet1Defeated: {\r\n spoiler: \"A skilled protector is guarding old ruins in a lush green forest.\"\r\n },\r\n hasDash: {\r\n spoiler: \"An old cloak is lying on a green path near a broken shell.\"\r\n },\r\n hasWalljump: {\r\n spoiler: \"A sharp claw is lying forgotten, somewhere amidst the insect village.\"\r\n },\r\n Crossroads_04: {\r\n spoiler: \"A mother is sleeping peacefully, somewhere below the town of Dirtmouth.\"\r\n },\r\n slyRescued: {\r\n spoiler: \"Our fellow town bug seems to be lost, somewhere in the crossroads.\"\r\n },\r\n hasLantern: {\r\n spoiler: \"Did you know? A bright little crystal companion is able to light a way through the thickest dark places.\"\r\n },\r\n hasSuperDash: {\r\n spoiler: \"There is some powerful crystal beating somewhere deep inside the mines.\"\r\n },\r\n hasDreamNail: {\r\n spoiler: \"A weapon from a dream world can only be found, where the souls can peacefully rest.\"\r\n },\r\n /* \r\n Either:\r\n - used the elevator in Resting Grounds to City of Tears\r\n - opened the Fungal Wastes city gate\r\n */\r\n killedInfectedKnight: {\r\n spoiler: \"A shattered corpse forgotten in a windy cave is lying somewhere in the ancient depths below the rainy city.\"\r\n },\r\n hasDoubleJump: {\r\n spoiler: \"Something incredibly light was dropped by a monarchfly in the ancient depths below the rainy city.\"\r\n },\r\n dungDefenderOrHornet2: {\r\n spoiler: \"There are two skilled combatants. One is living at the heart of the sewers. One is watching over a shell amidst ash falling from the sky.\"\r\n },\r\n ismaTearOrShadeCloak: {\r\n spoiler: \"There are two precious items. One in a grove accessed from the waterways. One guarded by a massive royal door behind the darkness.\"\r\n },\r\n defeatedMegaJelly: {\r\n spoiler: \"An intelligent being is floating inside hidden archives, behind the fog.\"\r\n },\r\n monomonDefeated: {\r\n spoiler: \"A dreamer is sleeping somewhere, hidden in a foggy area.\"\r\n },\r\n hegemolDefeated: {\r\n spoiler: \"A dreamer is sleeping near a spider nest area.\"\r\n },\r\n killedBlackKnight: {\r\n spoiler: \"Discarded shells of black guards can be seen lying on the floor of a high spire.\"\r\n },\r\n lurienDefeated: {\r\n spoiler: \"A dreamer is sleeping somewhere, at the top of a high spire.\"\r\n },\r\n killedHollowKnight: {\r\n spoiler: \"He heard a disturbance from inside a black temple. Maybe it's worth investigating.\"\r\n },\r\n endOfHints: {\r\n spoiler: `The Knight still explores the world of Hallownest patiently, in constant search of its remaining secrets. [this is the end of the hint system (for the moment). The rest is up to you]`\r\n },\r\n },\r\n },\r\n\r\n /* ################ Crests ################### */\r\n\r\n crests: {\r\n h2: \"Crests\",\r\n id: \"hk-crests\",\r\n description: \"special implements help you to progress in the game. Each new Crest learned provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n completedMemory_reaper: {\r\n name: \"Reaper\",\r\n spoiler: \"Greymoor, west\",\r\n wiki: \"Reaper\"\r\n },\r\n completedMemory_wanderer: {\r\n name: \"Wanderer\",\r\n spoiler: \"Moss Grotto, Bonegrave\",\r\n wiki: \"Wanderer\"\r\n },\r\n completedMemory_beast: {\r\n name: \"Beast\",\r\n spoiler: \"Hunter's March, defeat Savage Beastfly boss\",\r\n wiki: \"Beast\"\r\n },\r\n completedMemory_witch: {\r\n name: \"Witch\",\r\n spoiler: \"Greymoor, complete Twisted Bud and Infestation Operation Wishs\",\r\n wiki: \"Witch\"\r\n },\r\n completedMemory_toolmaster: {\r\n name: \"Architect\",\r\n spoiler: \"Underworks, (must have 30 tools to buy architect key from Twelfth architect) \",\r\n wiki: \"Architect\"\r\n },\r\n completedMemory_shaman: {\r\n name: \"Shaman\",\r\n spoiler: \"Moss Grotto, Ruined Chapel, Act 3\",\r\n wiki: \"Shaman\"\r\n }\r\n },\r\n },\r\n\r\n /* ################ Needle Upgrades ################### */\r\n\r\n NeedleUpgrades: {\r\n h2: \"Needle Upgrades\",\r\n id: \"hk-Needleupgrades\",\r\n description: \"Upgrades to the Hornet's main weapon damage. Each upgrade provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n startingNeedle: {\r\n name: \"#0 Starting Needle\",\r\n spoiler: \"Starting Weapon\",\r\n wiki: \"Needle\"\r\n },\r\n sharpenedNeedle: {\r\n name: \"#1 Sharpened Needle\",\r\n spoiler: \"Pinmaster Plinney on Bellhart for free\",\r\n wiki: \"Pinmaster+Plinney\"\r\n },\r\n shiningNeedle: {\r\n name: \"#2 Shining Needle\",\r\n spoiler: \"find missing pale oil\",\r\n wiki: \"Pale+Oil\"\r\n },\r\n hivesteelNeedle: {\r\n name: \"#3 Hivesteel Needle\",\r\n spoiler: \"find missing pale oil\",\r\n wiki: \"Pale+Oil\"\r\n },\r\n paleSteelNeedle: {\r\n name: \"#4 Pale Steel Needle\",\r\n spoiler: \"find missing pale oil\",\r\n wiki: \"Pale+Oil\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Silk Heart ################### */\r\n\r\n silkHeart: {\r\n h2: \"Silk Heart\",\r\n id: \"hk-silkHeart\",\r\n description: `Item that grant Hornet automatic Silk regeneration.. \r\n Each new Silk Heart learned provides 1% Game Completion.`,\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n Memory_Silk_Heart_BellBeast: {\r\n name: \"#1 Silk Heart\",\r\n spoiler: \"The Marrow, Defeating the Bell Beast\",\r\n wiki: \"Silk+Heart\"\r\n },\r\n Memory_Silk_Heart_WardBoss: {\r\n name: \"#2 Silk Heart\",\r\n spoiler: \"Whiteward, Defeating The Unravelled, requires the Surgeon's Key\",\r\n wiki: \"Silk+Heart\"\r\n },\r\n Memory_Silk_Heart_LaceTower: {\r\n name: \"#3 Silk Heart\",\r\n spoiler: \"The Cradle, Defeating Lace for the second time\",\r\n wiki: \"Silk+Heart\"\r\n },\r\n },\r\n },\r\n\r\n /* #################### Red Tools ################### */\r\n\r\n redTools: {\r\n h2: \"Red Tools\",\r\n id: \"hk-redTools\",\r\n description: `Active tools that are almost always limited-use consumables. \r\n Each Tool found in the game provides 1% Game Completion.`,\r\n /*description: `Each Charm found in the game provides 1% Game Completion. \r\n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/\r\n percent: 0,\r\n maxPercent: 18,\r\n // reference: https://radiance.host/apidocs/Charms.html\r\n entries: {\r\n straightPin: {\r\n id: \"Straight Pin\",\r\n name: \"#1 Straight Pin\",\r\n spoiler: \"The Marrow, inside of Grindle's cell\",\r\n wiki: \"Straight+Pin\"\r\n },\r\n triPin: {\r\n id: \"Tri Pin\", \r\n name: \"#2 Threefold Pin\",\r\n spoiler: \"Greymoor, above Craw Lake, hidden cave\",\r\n wiki: \"Threefold+Pin\"\r\n },\r\n stingShard: {\r\n id: \"Sting Shard\",\r\n name: \"#3 Sting Shard\",\r\n spoiler: \"Forge Daughter: 140 Rosaries and 1 Craftmetal\",\r\n wiki: \"Sting+Shard\"\r\n },\r\n Tack: {\r\n id:\"Tack\",\r\n name: \"#4 Tacks\",\r\n spoiler: \"complete the Roach Guts Wish\",\r\n wiki: \"Tacks\"\r\n },\r\n harpoon: {\r\n id: \"Harpoon\",\r\n name: \"#5 Longpin\",\r\n spoiler: \"Shellwood, main Bellhart entrance, behind Wood Wasp\",\r\n wiki: \"Longpin\"\r\n },\r\n curveClaws: {\r\n id: \"Curve Claws\",\r\n name: \"#6 Curveclaw\",\r\n spoiler: \"Skarr: 140 Rosaries, or gauntlet north of skarr main location\",\r\n wiki: \"Curveclaw\"\r\n },\r\n shakraRing: {\r\n id: \"Shakra Ring\",\r\n name: \"#7 Throwing Ring\",\r\n spoiler: \"complete Trail's End wish\",\r\n wiki: \"Throwing+Ring\"\r\n },\r\n pimpilo: {\r\n id: \"Pimpilo\",\r\n name: \"#8 Pimpillo\",\r\n spoiler: \"Greymoor, northwest, above Yarnaby's home\",\r\n wiki: \"Pimpillo\"\r\n },\r\n conchDrill: {\r\n id: \"Conch Drill\",\r\n name: \"#9 Conchcutter\",\r\n spoiler: \"Sands of Karak, Coral Tower\",\r\n wiki: \"Conchcutter\"\r\n },\r\n webShot: {\r\n id: \"WebShot\",\r\n name: \"#10 Silkshot\",\r\n spoiler: \"Royal Waterways, defeat Dung Defender\",\r\n wiki: \"Silkshot\"\r\n },\r\n screwAttack: {\r\n id: \"Screw Attack\",\r\n name: \"#11 Delver's Drill\",\r\n spoiler: \"Underworks, bottom left\",\r\n wiki: \"Delver's+Drill\"\r\n },\r\n cogworkSaw: {\r\n id: \"Cogwork Saw\",\r\n name: \"#12 Cogwork Wheel\",\r\n spoiler: \"Twelfth Architect: 360 Rosaries and 1 Craftmetal.\",\r\n wiki: \"Cogwork+Wheel\"\r\n },\r\n cogworkFlier: {\r\n id: \"Cogwork Flier\",\r\n name: \"#13 Cogfly\",\r\n spoiler: \"High Halls, crafting bench, Requires 1 Craftmetal\",\r\n wiki: \"Cogfly\"\r\n },\r\n rosaryCannon: {\r\n id: \"Rosary Cannon\",\r\n name: \"#14 Rosary Cannon\",\r\n spoiler: \" High Halls, est of The Forum, behind locked door\",\r\n wiki: \"Rosary+Cannon\"\r\n },\r\n lightningRod: {\r\n id: \"Lightning Rod\",\r\n name: \"#15 Voltvessels\",\r\n spoiler: \"Memorium, top-right, behind a hidden wall\",\r\n wiki: \"Voltvessels\"\r\n }, \r\n flintstone: {\r\n id: \"Flintstone\",\r\n name: \"#16 Flintslate\",\r\n spoiler: \"Deep Docks, behind the Simple Key door\",\r\n wiki: \"Flintslate\"\r\n },\r\n fleaBrew: {\r\n id: \"Flea Brew\",\r\n name: \"#17 Flea Brew\",\r\n spoiler: \"Helping out the Flea Caravan\",\r\n wiki: \"Flea+Brew\"\r\n },\r\n lifebloodSyringe: {\r\n id: \"Lifeblood Syringe\",\r\n name: \"#18 Plasmium Phial\",\r\n spoiler: \"Complete Alchemist's Assistant Wish\",\r\n wiki: \"Plasmium+Phial\"\r\n },\r\n },\r\n },\r\n\r\n /* #################### Blue Tools ################### */\r\n\r\n blueTools: {\r\n h2: \"Blue Tools\",\r\n id: \"hk-blueTools\",\r\n description: `Combat-focused passive tools. Each Tool found in the game provides 1% Game Completion.`,\r\n /*description: `Each Charm found in the game provides 1% Game Completion. \r\n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/\r\n percent: 0,\r\n maxPercent: 21,\r\n // reference: https://radiance.host/apidocs/Charms.html\r\n entries: {\r\n mosscreepTool: {\r\n id: \"Mosscreep Tool\",\r\n name: \"#1 Druid's Eye\",\r\n spoiler: \"Salubra: 220 Geo\",\r\n wiki: \"Druid's+Eye\"\r\n },\r\n lavaCharm: {\r\n id: \"Lava Charm\",\r\n name: \"#2 Magma Bell\",\r\n spoiler: \"Complete Rite of the Pollip Wish\",\r\n wiki: \"Magma+Bell\"\r\n },\r\n bellBind: {\r\n id: \"Bell Bind\",\r\n name: \"#3 Warding Bell\",\r\n spoiler: \"lower Far Fields\",\r\n wiki: \"Warding+Bell\"\r\n },\r\n poisonPouch: {\r\n id: \"Poison Pouch\",\r\n name: \"#4 Pollip Pouch\",\r\n spoiler: \"Forgotten Crossroads, requires Crystal Heart\",\r\n wiki: \"Pollip+Pouch\"\r\n },\r\n fracturedMask: {\r\n id: \"Fractured Mask\",\r\n name: \"#5 Fractured Mask\",\r\n spoiler: \"Skarr: 260 Rosaries, or gauntlet north of skarr main location\",\r\n wiki: \"Fractured+Mask\"\r\n },\r\n multibind: {\r\n id: \"Multibind\",\r\n name: \"#6 Multibinder\",\r\n spoiler: \"Frey: 800 after comleting My Missing Courier Wish\",\r\n wiki: \"Multibinder\"\r\n },\r\n whiteRing: {\r\n id: \"White Ring\",\r\n name: \"#7 Weavelight\",\r\n spoiler: \"Weavenest Atla, defeating the 2nd Moss Mother\",\r\n wiki: \"Weavelight\"\r\n },\r\n brollySpike: {\r\n id: \"Brolly Spike\",\r\n name: \"#8 Sawtooth Circlet\",\r\n spoiler: \"Twelfth Architect: 230 Rosaries and 1 Craftmetal\",\r\n wiki: \"Sawtooth+Circlet\"\r\n },\r\n quickbind: {\r\n id: \"Quickbind\",\r\n name: \"#9 Injector Band\",\r\n spoiler: \"Whiteward\",\r\n wiki: \"Injector+Band\"\r\n },\r\n spoolExtender: {\r\n id: \"Spool Extender\",\r\n name: \"#10 Spool Extender\",\r\n spoiler: \"Jubilana: 720 Rosaries\",\r\n wiki: \"Spool+Extender\"\r\n },\r\n reserveBind: {\r\n id: \"Reserve Bind\",\r\n name: \"#11 Reserve Bind\",\r\n spoiler: \"complete Final Audience Wish\",\r\n wiki: \"Reserve+Bind\"\r\n },\r\n DazzleBind: {\r\n id: \"Dazzle Bind\",\r\n name: \"#12 Claw Mirror\",\r\n spoiler: \"Defeat Trobbio\",\r\n wiki: \"Claw+Mirror\"\r\n },\r\n revengeCrystal: {\r\n id: \"Revenge Crystal\",\r\n name: \"#13 Memory Crystal\",\r\n spoiler: \"Mount Fay, southwest, breakable wall next to bench\",\r\n wiki: \"Memory+Crystal\"\r\n },\r\n thiefClaw: {\r\n id: \"Thief Claw\",\r\n name: \"#14 Snitch Pick\",\r\n spoiler: \"Grindle : 740 Rosaries\",\r\n wiki: \"Snitch Pick\"\r\n },\r\n zapImbuement: {\r\n id: \"Zap Imbuement\",\r\n name: \"#15 Volt Filament\",\r\n spoiler: \"Defeat Voltvyrm\",\r\n wiki: \"Volt+Filament\"\r\n },\r\n quickSling: {\r\n id: \"Quick Sling\",\r\n name: \"#16 Quick Sling\",\r\n spoiler: \"2nd room above Bilewater word, breakable ceiling\",\r\n wiki: \"Quick+Sling\"\r\n },\r\n maggotCharm: {\r\n id: \"Maggot Charm\",\r\n name: \"#17 Wreath of Purity\",\r\n spoiler: \"Putrified Ducts, secret passage\",\r\n wiki: \"Wreath+of+Purity\"\r\n },\r\n longneedle: {\r\n id: \"Longneedle\",\r\n name: \"#18 Longclaw\",\r\n spoiler: \"complete Broodfeast or Runtfeast Wish\",\r\n wiki: \"Longclaw\"\r\n },\r\n wispLantern: {\r\n id: \"Wisp Lantern\",\r\n name: \"#19 Wispfire Lantern\",\r\n spoiler: \"Defeat Father of the Flame in Wisp Thicket\",\r\n wiki: \"Wispfire+Lantern\"\r\n },\r\n fleaCharm: {\r\n id: \"Flea Charm\",\r\n name: \"#20 Egg of Flealia\",\r\n spoiler: \"Fleamaster Mooshka: Find all the 30 fleas\",\r\n wiki: \"Egg+of+Flealia\"\r\n },\r\n pinstressTool: {\r\n id: \"Pinstress Tool\",\r\n name: \"#21 Pin Badge\",\r\n spoiler: \"Defeat Pinstress\",\r\n wiki: \"Pin+Badge\"\r\n },\r\n },\r\n },\r\n\r\n /* #################### Red tools ################### */\r\n\r\n yellowTools: {\r\n h2: \"Yellow Tools\",\r\n id: \"hk-yellowTools\",\r\n description: `miscellaneous passive tools. Each Tool found in the game provides 1% Game Completion.`,\r\n /*description: `Each Charm found in the game provides 1% Game Completion. \r\n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/\r\n percent: 0,\r\n maxPercent: 12,\r\n // reference: https://radiance.host/apidocs/Charms.html\r\n entries: {\r\n compass: {\r\n id: \"Compass\",\r\n name: \"#1 Compass\",\r\n spoiler: \"Shakra: 70 Rosaries\",\r\n wiki: \"Compass\"\r\n },\r\n boneNecklace: {\r\n id: \"Bone Necklace\",\r\n name: \"#2 Shard Pendant\",\r\n spoiler: \"The Marrow, left side of the collapsing platforms\",\r\n wiki: \"Magnetite+Brooch\"\r\n },\r\n rosaryMagnet: {\r\n id: \"Rosary Magnet\",\r\n name: \"#3 Magnetite Brooch\",\r\n spoiler: \"Pebb: 120 Rosaries\",\r\n wiki: \"Grubberfly's+Elegy\"\r\n },\r\n weightedAnklet: {\r\n id: \"Weighted Anklet\",\r\n name: \"#4 Weighted Belt\",\r\n spoiler: \"Mort: 160\",\r\n wiki: \"Weighted+Belt\"\r\n },\r\n barbedWire: {\r\n id: \"Barbed Wire\",\r\n name: \"#5 Barbed Bracelet\",\r\n spoiler: \"Sinner's Road, souteast\",\r\n wiki: \"Barbed+Bracelet\"\r\n },\r\n deadMansPurse: {\r\n id: \"Dead Mans Purse\",\r\n name: \"#6 Dead Bug's Purse\",\r\n spoiler: \"Wormways\",\r\n wiki: \"Dead+Bug's+Purse\"\r\n },\r\n magnetiteDice: {\r\n id: \"Magnetite Dice\",\r\n name: \"#7 Magnetite Dice\",\r\n spoiler: \"Given by Lumble the Lucky, or Grindle: 300 on Act 3\",\r\n wiki: \"Magnetite+Dice\"\r\n },\r\n scuttlebrace: {\r\n id: \"Scuttlebrace\",\r\n name: \"#8 Scuttlebrace\",\r\n spoiler: \"Twelfth Architect: 140 Rosaries and 1 Craftmetal\",\r\n wiki: \"Scuttlebrace\"\r\n },\r\n Wallcling: {\r\n id: \"Wallcling\",\r\n name: \"#9 Ascendant's Grip\",\r\n spoiler: \"Jubilana: 350 Rosaries\",\r\n wiki: \"Ascendant's+Grip\"\r\n },\r\n musicianCharm: {\r\n id: \"Musician Charm\",\r\n name: \"#10 Silkspeed Anklets\",\r\n spoiler: \"Jubilana: 350 Rosaries after Lost Merchant Wish\",\r\n wiki: \"Silkspeed+Anklets\"\r\n },\r\n sprintmaster: {\r\n id: \"Sprintmaster\",\r\n name: \"#11 Silkspeed Anklets\",\r\n spoiler: \"Far Fields, inside Weavenest Cindril\",\r\n wiki: \"Silkspeed+Anklets\"\r\n },\r\n thiefCharm: {\r\n id: \"Thief Charm\",\r\n name: \"#12 Thief's Mark\",\r\n spoiler: \"Grindle: 350 Rosaries\",\r\n wiki: \"Thief's+Mark\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Equipment ################### */\r\n\r\n equipment: {\r\n h2: \"Equipment\",\r\n id: \"hk-equipment\",\r\n description: \"Also known as Abilities. Each piece of equipment collected provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n silkSpear: {\r\n id: \"Silk Spear\",\r\n name: \"Silkspear\",\r\n spoiler: \"Mosshome\",\r\n wiki: \"Silkspear\"\r\n },\r\n threadSphere: {\r\n id: \"Thread Sphere\",\r\n name: \"Thread Storm\",\r\n spoiler: \"Greymoor\",\r\n wiki: \"Thread+Storm\"\r\n },\r\n Parry: {\r\n id: \"Parry\",\r\n name: \"Cross Stitch\",\r\n spoiler: \"Bilewater, Exhaust Organ, Defeat Phantom\",\r\n wiki: \"Cross+Stitch\"\r\n },\r\n silkCharge: {\r\n id: \"Silk Charge\",\r\n name: \"Sharpdart\",\r\n spoiler: \"Wormways\",\r\n wiki: \"Sharpdart\"\r\n },\r\n silkBomb: {\r\n id: \"Silk Bomb\",\r\n name: \"Rune Rage\",\r\n spoiler: \"The Slab, Kill the First Sinner\",\r\n wiki: \"Rune Rage\"\r\n },\r\n silkBossNeedle: {\r\n id: \"Silk Boss Needle\",\r\n name: \"Pale Nails\",\r\n spoiler: \"Kingdom's Edge, defeat Hornet Sentinel\",\r\n wiki: \"Pale+Nails\"\r\n },\r\n },\r\n\r\n /*\r\n entries: {\r\n hasDash: {\r\n name: \"Mothwing Cloak\",\r\n spoiler: \"Greenpath: Dash ability\",\r\n wiki: \"Mothwing_Cloak\"\r\n },\r\n hasWalljump: {\r\n name: \"Mantis Claw\",\r\n spoiler: \"Mantis Village: Wall Jump ability\",\r\n wiki: \"Mantis_Claw\"\r\n },\r\n hasSuperDash: {\r\n name: \"Crystal Heart\",\r\n spoiler: \"Crystal Peak: Super Dash ability\",\r\n wiki: \"Crystal_Heart\"\r\n },\r\n hasDoubleJump: {\r\n name: \"Monarch Wings\",\r\n spoiler: \"Ancient Basin: Double Jump ability\",\r\n wiki: \"Monarch_Wings\"\r\n },\r\n hasAcidArmour: {\r\n name: \"Isma's Tear\",\r\n spoiler: \"Royal Waterways: Acid Armour ability\",\r\n wiki: \"Isma's_Tear\"\r\n },\r\n hasKingsBrand: {\r\n name: \"King's Brand\",\r\n spoiler: \"Kingdom's Edge, defeat Hornet Sentinel\",\r\n wiki: \"King's_Brand\"\r\n },\r\n hasShadowDash: {\r\n name: \"Shade Cloak\",\r\n spoiler: \"The Abyss: Shadow Dash ability\",\r\n wiki: \"Shade_Cloak\"\r\n }\r\n },\r\n */\r\n },\r\n\r\n /* ################ Skills ################### */\r\n\r\n skills: {\r\n h2: \"Skills\",\r\n id: \"hk-skills\",\r\n description: \"Skills help you to progress in the game. Each new Skill learned provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n hasDash: {\r\n name: \"Swift Step\",\r\n spoiler: \"Deep Docks\",\r\n wiki: \"Swift+Step\"\r\n },\r\n hasWalljump: {\r\n name: \"Cling Grip\",\r\n spoiler: \"Shellwood\",\r\n wiki: \"Cling+Grip\"\r\n },\r\n hasHarpoonDash: {\r\n name: \"Clawline\",\r\n spoiler: \"Underworks\",\r\n wiki: \"Clawline\"\r\n },\r\n hasNeedolin: {\r\n name: \"Needolin\",\r\n spoiler: \"Bellhart, defeat Widow\",\r\n wiki: \"Needolin\"\r\n },\r\n hasChargeSlash: {\r\n name: \"Needle Strike\",\r\n spoiler: \"Blasted Steps: from the Pinstress\",\r\n wiki: \"Needle+Strike\"\r\n },\r\n hasSuperJump: {\r\n name: \"Silk Soar\",\r\n spoiler: \"The Abyss, Weavenest Absolom, Act 3\",\r\n wiki: \"Silk+Soar\"\r\n }\r\n },\r\n },\r\n\r\n /* ################ Miscellaneous ################### */\r\n\r\n miscellaneous : {\r\n h2: \"Miscellaneous\",\r\n id: \"hk-miscellaneous\",\r\n description: \"Extra miscellaneous. Each miscellaneous provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 2,\r\n entries: {\r\n HasSeenEvaHeal: {\r\n name: \"Sylphsong Step\",\r\n spoiler: \"Eva: Require 6 crests and 18 memory lockets.\",\r\n wiki: \"Sylphsong\"\r\n },\r\n CompletedRedMemory: {\r\n name: \"Everbloom\",\r\n spoiler: \"Complete The Old Hearts Wish, Act 3\",\r\n wiki: \"Everbloom\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Mask Shards ################### */\r\n\r\n maskShards: {\r\n h2: \"Mask Shards\",\r\n id: \"hk-maskshards\",\r\n description: \"Shards for increasing max health. Each 4 Mask Fragments collected (a full Mask) provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 5,\r\n entries: {\r\n PurchasedBonebottomHeartPiece: {\r\n name: \"#1 Mask Shards\",\r\n spoiler: \"Pebb: 300 Rosariy, or Grindle: 320 Rosairy if Pebb left\",\r\n wiki: \"All+Mask+Shard+Locations#BoneBottom\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n wormwayMask: {\r\n name: \"#2 Mask Shards\",\r\n spoiler: \"Wormways, Behind a breakable wall, just in front of the door.\",\r\n wiki: \"All+Mask+Shard+Locations#Wormways\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Crawl_02\"\r\n },\r\n deepDocksMask: {\r\n name: \"#3 Mask Shards \",\r\n spoiler: \"Between the Marrow and Deep Docks, Cling Grip recommended\",\r\n wiki: \"All+Mask+Shard+Locations#DeepDocks\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Dock_08\"\r\n },\r\n farFieldsMask1: {\r\n name: \"#4 Mask Shards\",\r\n spoiler: \"Area above Seamstress's home in Far Fields, requires Drifter's Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#FarFields\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Bone_East_20\"\r\n },\r\n shellwoodMask: {\r\n name: \"#5 Mask Shard\",\r\n spoiler: \"Centre of Shellwood, behind a breakable wall\",\r\n wiki: \"All+Mask+Shard+Locations#Shellwood\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Shellwood_14\"\r\n },\r\n weavenestAtlaMask: {\r\n name: \"#6 Mask Shard\",\r\n spoiler: \"East Weavenest Atla, behind breakable wall, requires Cling Grip\",\r\n wiki: \"All+Mask+Shard+Locations#WeavenestAtla\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Weave_05b\"\r\n },\r\n MerchantEnclaveShellFragment: {\r\n name: \"#7 Mask Shard\",\r\n spoiler: \"Jubilana: 750 Rosaries, after complete The Wandering Merchant Wish\",\r\n wiki: \"All+Mask+Shard+Locations#ChoralChambers\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n cogworkCoreMask: {\r\n name: \"#8 Mask Shard\",\r\n spoiler: \"West Cogwork Core past enemy gauntlet, defeat Cogwork Dancers\",\r\n wiki: \"All+Mask+Shard+Locations#CogworkCore\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Song_09\"\r\n },\r\n libraryMask: {\r\n name: \"#9 Mask Shard\",\r\n spoiler: \"Behind moving box puzzle in central Whispering Vaults\",\r\n wiki: \"All+Mask+Shard+Locations#WhisperingVaults\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Library_05\"\r\n },\r\n beastflyHuntWish: {\r\n name: \"#10 Mask Shard\",\r\n spoiler: \"Reward for completing the Savage Beastfly Wish\",\r\n wiki: \"All+Mask+Shard+Locations#Bellhart\",\r\n id: \"\",\r\n sceneName: \"Beastfly Hunt\"\r\n },\r\n boneBuildingMask: {\r\n name: \"#11 Mask Shard\",\r\n spoiler: \"East Far Fields, inside bone building, requires Clawline and Drifter's Cloak \",\r\n wiki: \"All+Mask+Shard+Locations#FarFields\",\r\n id: \"Heart Piece (1)\",\r\n sceneName: \"Bone_East_LavaChallenge\"\r\n },\r\n mountFayMask: {\r\n name: \"#12 Mask Shard\",\r\n spoiler: \"Mount Fay, soutwest, west of the bench, requires Faydown Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#MountFay\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Peak_04c\"\r\n },\r\n slabMask: {\r\n name: \"#13 Mask Shard\",\r\n spoiler: \"the Slab, Northeast, require key of Apostate and Faydown Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#TheSlab\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Slab_17\"\r\n },\r\n bilewaterMask: {\r\n name: \"#14 Mask Shard\",\r\n spoiler: \"Bilewater, east, end of a hallway filled with Slubberlugs\",\r\n wiki: \"All+Mask+Shard+Locations#Bilewater\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Shadow_13\"\r\n },\r\n wispThicketMask: {\r\n name: \"#15 Mask Shard\",\r\n spoiler: \"Wisp Thicket, east, requires Faydown Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#WispThicket\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Wisp_07\"\r\n },\r\n blastedStepsMask: {\r\n name: \"#16 Mask Shard\",\r\n spoiler: \"Blasted Steps, west, requires Clawline and Faydown Cloak.\",\r\n wiki: \"All+Mask+Shard+Locations#BlastedSteps\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Coral_19b\"\r\n },\r\n brightveinMask: {\r\n name: \"#17 Mask Shard\",\r\n spoiler: \"Brightvein, requires Silk Soar\",\r\n wiki: \"All+Mask+Shard+Locations#MountFay\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Peak_06\"\r\n },\r\n sprintmasterRaceWish: {\r\n name: \"#18 Mask Shard\",\r\n spoiler: \"Far Fields, east, complete Fastest in Pharloom wish\",\r\n wiki: \"All+Mask+Shard+Locations#FarFields\",\r\n id: \"\",\r\n sceneName: \"Sprintmaster Race\"\r\n },\r\n destroyThreadCoresWish: {\r\n name: \"#19 Mask Shard\",\r\n spoiler: \"Bellhart Wishwall, complete Dark Hearts wish\",\r\n wiki: \"All+Mask+Shard+Locations#Bellhart\",\r\n id: \"\",\r\n sceneName: \"Destroy Thread Cores\"\r\n },\r\n antTrapperWish: {\r\n name: \"#20 Mask Shard\",\r\n spoiler: \"Bellhart Wishwall, complete Hidden Hunter wish\",\r\n wiki: \"All+Mask+Shard+Locations#Bellhart\",\r\n id: \"\",\r\n sceneName: \"Ant Trapper\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Spool Fragments ################### */\r\n\r\n spoolFragments: {\r\n h2: \"Spool Fragments\",\r\n id: \"hk-spoolFragments\",\r\n description: \"Fragments for increasing max silk capacity.. Each 2 Spool Fragments collected (a full spool) provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 9,\r\n entries: {\r\n boneBottomSpool: {\r\n name: \"#1 Fragments\",\r\n spoiler: \"Bone Bottom, Mosshome, behind a breakable wall\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Bone_11b\"\r\n },\r\n deepDocksSpool1: {\r\n name: \"#2 Fragments\",\r\n spoiler: \"Deep Docks, lower left (too lazy to explane the location..)\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Bone_East_13\"\r\n },\r\n greymoorSpool: {\r\n name: \"#3 Fragments\",\r\n spoiler: \"Greymoor, above Shakra's bench\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Greymoor_02\"\r\n },\r\n PurchasedBelltownSpoolSegment: {\r\n name: \"#4 Fragments\",\r\n spoiler: \"Frey: 270 Rosaries, Complete My Missing Courier Wish\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n weavenestAtlaSpool: {\r\n name: \"#5 Fragments\",\r\n spoiler: \"Weavenest Atla, require Needolin\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Weave_11\"\r\n },\r\n slabSpool: {\r\n name: \"#6 Fragments\",\r\n spoiler: \"The Slab, west, require Cling Grip\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Peak_01\"\r\n },\r\n grandGateSpool: {\r\n name: \"#7 Fragments\",\r\n spoiler: \"Grand Gate, top\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Song_19_entrance\"\r\n },\r\n UnderworksSpool1: {\r\n name: \"#8 Fragments\",\r\n spoiler: \"Underworks, pass a challenging battle area\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Under_10\"\r\n },\r\n MetCaravanTroupeLeaderJudge: {\r\n name: \"#9 Fragments\",\r\n spoiler: \"Grand Gate, Flea Caravan, requires 12 fleas and Last Judge defeated\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n whitewardSpool: {\r\n name: \"#10 Fragments\",\r\n spoiler: \"Whiteward, under the lift, require White Key\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Ward_01\"\r\n },\r\n cogworkCoreSpool: {\r\n name: \"#11 Fragments\",\r\n spoiler: \"Cogwork Core, Southeast\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Cog_07\"\r\n },\r\n UnderworksSpool2: {\r\n name: \"#12 Fragments\",\r\n spoiler: \"Underworks, east of the Cauldron\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Library_11b\"\r\n },\r\n saveShermaWish: {\r\n name: \"#13 Fragments\",\r\n spoiler: \"complete Balm For The Wounded Wish\",\r\n wiki: \"Quests\",\r\n id: \"\",\r\n sceneName: \"Save Sherma\"\r\n },\r\n MerchantEnclaveSpoolPiece: {\r\n name: \"#14 Fragments\",\r\n spoiler: \"Jubilana: 500 rosaries, after complete Lost Merchant Wish\",\r\n wiki: \"Quests\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n deepDocksSpool2: {\r\n name: \"#15 Fragments\",\r\n spoiler: \"Deep Docks, Southeast, require Clawline and Cling Grip\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Dock_03c\"\r\n },\r\n highHallsSpool: {\r\n name: \"#16 Fragments\",\r\n spoiler: \"High Halls, top of left vertical room, require Faydown Cloak and Clawline\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Hang_03_top\"\r\n },\r\n MemoriumSpool: {\r\n name: \"#17 Fragments\",\r\n spoiler: \"Memorium, western section, requires Faydown Cloak and Clawline\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Arborium_09\"\r\n },\r\n purchasedGrindleSpoolPiece: {\r\n name: \"#18 Fragments\",\r\n spoiler: \"Grindle: 680 rosaries, requires Faydown Cloak and Cling Grip\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n },\r\n },\r\n\r\n\r\n /* ################ Crafting Kit Upgrades ################### */\r\n\r\n craftingKitUpgrades: {\r\n h2: \"Crafting Kit Upgrades\",\r\n id: \"hk-craftingKitUpgrades\",\r\n description: \"Upgrade that increase Red Tool damage by +60%.. Each upgrade provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n PurchasedForgeToolKit: {\r\n name: \"#1 Upgrades\",\r\n spoiler: \"Forge Daughter: 180 rosaries\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n crowFeathersWish: {\r\n name: \"#2 Upgrades\",\r\n spoiler: \"complete Crawbug Clearing Wish\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"Crow Feathers\"\r\n },\r\n PurchasedArchitectToolKit: {\r\n name: \"#3 Upgrades\",\r\n spoiler: \"Twelfth Architect: 450 rosaries, requires Clawline\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n purchasedGrindleToolKit: {\r\n name: \"#4 Upgrades\",\r\n spoiler: \"Grindle: 700 rosaries, requires Faydown Cloak\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n \r\n }\r\n },\r\n\r\n /* ################ Tool Pouch Upgrades ################### */\r\n\r\n toolPouchUpgrades: {\r\n h2: \"Tool Pouch Upgrades\",\r\n id: \"hk-toolPouchUpgrades\",\r\n description: \"Upgrade that increase Red Tool damage by +60%.. Each upgrade provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n PurchasedPilgrimsRestToolPouch: {\r\n name: \"#1 Upgrades\",\r\n spoiler: \"Mort: 220 rosaries, or Grindle: 220 (Act 3)\",\r\n wiki: \"Tool+Pouch\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n ladybugCraftPickupToolPouch: {\r\n name: \"#2 Upgrades\",\r\n spoiler: \"The Marrow, Lodie Callange (Act 1 & 2), on table (Act 3)\",\r\n wiki: \"Tool+Pouch\",\r\n id: \"Ladybug Craft Pickup\",\r\n sceneName: \"Bone_12\"\r\n },\r\n journalWish: {\r\n name: \"#3 Upgrades\",\r\n spoiler: \"complete Nuu's Wish: Bugs of Pharloom\",\r\n wiki: \"Tool+Pouch\",\r\n id: \"\",\r\n sceneName: \"Journal\"\r\n },\r\n CaravanTroupeLocation: {\r\n name: \"#4 Upgrades\",\r\n spoiler: \"Mooshka after helping the Flea Caravan move to Putrified Ducts\",\r\n wiki: \"Tool+Pouch\",\r\n id: 3,\r\n sceneName: \"CaravanTroupeLocation\"\r\n },\r\n \r\n }\r\n },\r\n\r\n /* ################ Hunter's Journal ################### */\r\n\r\n huntersJournal: {\r\n h2: \"Hunter's Journal\",\r\n id: \"hk-journal\",\r\n description: `All the 146 base-game Hunter's Journal entries that are counted for Hunter's Mark and Keen Hunter/True Hunter achievements. The 17 most commonly missed Journal entries are right at the top of this list. \r\n Numbers above: Completed/Encountered of 146 Base Total \r\n = note completed. \r\n = entry discovered, but note not completed. \r\n = entry not yet discovered. \r\n (no.) = amount left to complete note.`,\r\n percent: 0,\r\n midPercent: 0,\r\n maxPercent: 146,\r\n entries: {\r\n mossBoneCrawler: {\r\n gameName: \"Mossgrub\",\r\n databaseName: \"MossBone Crawler\",\r\n name: \"\",\r\n spoiler: \"aaaaaaaaaaa\",\r\n killRequire: 100,\r\n wiki: \"Mossgrub\"\r\n },\r\n mossBoneCrawlerFat: {\r\n gameName: \"Massive Mossgrub\",\r\n databaseName: \"MossBone Crawler Fat\",\r\n name: \"\",\r\n spoiler: \"bbbbbbbbb\",\r\n killRequire: 3,\r\n wiki: \"Mossgrub\"\r\n },\r\n\r\n },\r\n },\r\n\r\n /* ################### Flea Save ################### */\r\n\r\n flea: {\r\n h2: \"Flea\",\r\n id: \"hk-flea\",\r\n description: `Flea that belong to Flea Caravan. Help them and the caravan will reward you. they dont count as part of the`,\r\n percent: 0,\r\n maxPercent: 30,\r\n entries: {\r\n SavedFlea_Bone_06: {\r\n name: \"#1 The Marrow\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#themarrow\"\r\n },\r\n SavedFlea_Dock_16: {\r\n name: \"#2 Deep Docks\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#deepdocks\"\r\n },\r\n SavedFlea_Bone_East_05: {\r\n name: \"#3 Deep Docks\",\r\n spoiler: \"Swift Step\",\r\n wiki: \"All+Lost+Flea+Locations#deepdocks\"\r\n },\r\n SavedFlea_Dock_03d: {\r\n name: \"#4 Deep Docks\",\r\n spoiler: \"Clawline\",\r\n wiki: \"All+Lost+Flea+Locations#deepdocks\"\r\n },\r\n SavedFlea_Ant_03: {\r\n name: \"#5 Hunter's March\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#huntersmarch\"\r\n },\r\n SavedFlea_Bone_East_17b: {\r\n name: \"#6 Far Fields\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#farfields\"\r\n },\r\n SavedFlea_Bone_East_10_Church: {\r\n name: \"#7 Far Fields\",\r\n spoiler: \"Require Drifter's Cloak and Cling Grip\",\r\n wiki: \"All+Lost+Flea+Locations#farfields\"\r\n },\r\n SavedFlea_Crawl_06: {\r\n name: \"#8 Wormways\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#wormways\"\r\n }, \r\n SavedFlea_Greymoor_15b: {\r\n name: \"#9 Greymoor\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#crawlake\"\r\n }, \r\n SavedFlea_Greymoor_06: {\r\n name: \"#10 Greymoor\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#greymoor\"\r\n }, \r\n CaravanLechReturnedToCaravan: {\r\n name: \"#11 Greymoor (Kratt)\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"Kratt\"\r\n }, \r\n SavedFlea_Belltown_04: {\r\n name: \"#12 Bellhart\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#bellhart\"\r\n }, \r\n SavedFlea_Shellwood_03: {\r\n name: \"#13 Shellwood\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#shellwood\"\r\n }, \r\n SavedFlea_Coral_35: {\r\n name: \"#14 Blasted Steps\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#blastedsteps\"\r\n }, \r\n SavedFlea_Dust_12: {\r\n name: \"#15 Sinner's Road\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#sinnersroad\"\r\n }, \r\n SavedFlea_Shadow_28: {\r\n name: \"#16 Bilewater\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#bilewater\"\r\n }, \r\n SavedFlea_Dust_09: {\r\n name: \"#17 Bilewater\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#bilewater\"\r\n }, \r\n SavedFlea_Shadow_10: {\r\n name: \"#18 Bilewater\",\r\n spoiler: \"Require Cling Grip\",\r\n wiki: \"All+Lost+Flea+Locations#bilewater\"\r\n }, \r\n SavedFlea_Under_23: {\r\n name: \"#19 Underworks\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#wispthicket\"\r\n }, \r\n SavedFlea_Under_21: {\r\n name: \"#20 Underworks\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#underworks\"\r\n }, \r\n SavedFlea_Song_14: {\r\n name: \"#21 Choral Chambers\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#choralchambers\"\r\n }, \r\n SavedFlea_Song_11: {\r\n name: \"#22 Choral Chambers\",\r\n spoiler: \"Drifter's Cloak (or needle-bounce)\",\r\n wiki: \"All+Lost+Flea+Locations#choralchambers\"\r\n }, \r\n SavedFlea_Library_09: {\r\n name: \"#23 Choral Chambers\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#songclave\"\r\n }, \r\n tamedGiantFlea: {\r\n name: \"#24 Memorium\",\r\n spoiler: \"Defeat the Huge Flea in the top\",\r\n wiki: \"All+Lost+Flea+Locations#memorium\"\r\n }, \r\n SavedFlea_Slab_Cell: {\r\n name: \"#25 The Slab\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#theslab\"\r\n }, \r\n SavedFlea_Slab_06: {\r\n name: \"#26 The Slab\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#theslab\"\r\n }, \r\n SavedFlea_Peak_05c: {\r\n name: \"#27 Mount Fay\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#mountfay\"\r\n }, \r\n SavedFlea_Coral_24: {\r\n name: \"#28 Sands of Karak\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#sandsofkarak\"\r\n }, \r\n MetTroupeHunterWild: {\r\n name: \"#29 Putrified Ducts (Vog)\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#putrifiedducts\"\r\n }, \r\n SavedFlea_Library_01: {\r\n name: \"#30 Whispering Vaults\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#whisperingvaults\"\r\n },\r\n },\r\n },\r\n \r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n\r\n /* ################### Bosses ################### */\r\n\r\n /*bosses: {\r\n h2: \"Bosses\",\r\n id: \"hk-bosses\",\r\n description: `Each boss from this list provides 1% Game Completion. \r\n Note: There are many other bosses in the game. Only about ~half of the total bosses count directly towards % Game Completion stat. \r\n P1-P4 = difficulty level and which Pantheon a given boss unlocks.`,\r\n percent: 0,\r\n maxPercent: 14,\r\n entries: {\r\n // killedBigFly\r\n bossGruzMother: {\r\n name: \"P1 Gruz Mother\",\r\n spoiler: \"Forgotten Crossroads, lower right area\",\r\n id: \"Battle Scene\",\r\n sceneName: \"Crossroads_04\",\r\n wiki: \"Gruz_Mother\"\r\n },\r\n falseKnightDefeated: {\r\n name: \"P1 False Knight\",\r\n spoiler: \"Forgotten Crossroads, middle area map symbol\",\r\n wiki: \"False_Knight\"\r\n }, // \"Battle Scene\" - \"Crossroads_10\" ?\r\n hornet1Defeated: {\r\n name: \"P1 Hornet Protector\",\r\n spoiler: \"Greenpath, above Stag Station\",\r\n wiki: \"Hornet_Protector\"\r\n },\r\n defeatedDungDefender: {\r\n name: \"P1 Dung Defender\",\r\n spoiler: \"Royal Waterways, right area\",\r\n wiki: \"Dung_Defender\"\r\n },\r\n // killedMawlek\r\n bossBroodingMawlek: {\r\n name: \"P1 Brooding Mawlek\",\r\n spoiler: \"Forgotten Crossroads, use Mantis Claw\",\r\n id: \"Battle Scene\",\r\n sceneName: \"Crossroads_09\",\r\n wiki: \"Brooding_Mawlek\"\r\n },\r\n mageLordDefeated: {\r\n name: \"P2 Soul Master\",\r\n spoiler: \"City of Tears: Soul Sanctum\",\r\n wiki: \"Soul_Master\"\r\n },\r\n defeatedMantisLords: {\r\n name: \"P2 Mantis Lords\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n wiki: \"Mantis_Lords\"\r\n },\r\n // \"Battle Scene\" - \"Deepnest_32\" ?\r\n killedMimicSpider: {\r\n name: \"P2 Nosk\",\r\n spoiler: \"Deepnest, use Crystal Heart, left of Hot Spring\",\r\n wiki: \"Nosk\"\r\n },\r\n killedInfectedKnight: {\r\n name: \"P2 Broken Vessel\",\r\n spoiler: \"Ancient Basin, lower left, use Crystal Heart\",\r\n wiki: \"Broken_Vessel\"\r\n },\r\n collectorDefeated: {\r\n name: \"P3 The Collector\",\r\n spoiler: \"City of Tears: Tower of Love\",\r\n wiki: \"Collector\"\r\n },\r\n defeatedMegaJelly: {\r\n name: \"P3 Uumuu\",\r\n spoiler: \"Fog Canyon: Teacher's Archives\",\r\n wiki: \"Uumuu\"\r\n },\r\n hornetOutskirtsDefeated: {\r\n name: \"P3 Hornet Sentinel\",\r\n spoiler: \"Kingdom's Edge, requires Monarch Wings\",\r\n wiki: \"Hornet_Sentinel\"\r\n },\r\n // \"Battle Scene\" - \"Fungus3_23\" ?\r\n killedTraitorLord: {\r\n name: \"P4 Traitor Lord\",\r\n spoiler: \"Queen's Gardens, requires Shade Cloak\",\r\n wiki: \"Traitor_Lord\"\r\n },\r\n killedBlackKnight: {\r\n name: \"P4 Watcher Knights\",\r\n spoiler: \"City of Tears: Watcher's Spire\",\r\n wiki: \"Watcher_Knight\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Nail Arts ################### */\r\n\r\n /*nailArts: {\r\n h2: \"Nail Arts\",\r\n id: \"hk-nailarts\",\r\n description: \"Advanced weapon combat techniques. Each new technique learned provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n // this is correct - somehow Team Cherry switched the names here\r\n hasDashSlash: {\r\n name: \"Great Slash\",\r\n spoiler: \"Nailmaster Sheo: Greenpath\",\r\n wiki: \"Great_Slash\"\r\n },\r\n // this is correct - somehow Team Cherry switched the names here \r\n hasUpwardSlash: {\r\n name: \"Dash Slash\",\r\n spoiler: \"Nailmaster Oro: Kingdom's Edge, 800 Geo\",\r\n wiki: \"Dash_Slash\"\r\n },\r\n hasCyclone: {\r\n name: \"Cyclone Slash\",\r\n spoiler: \"Nailmaster Mato: Howling Cliffs\",\r\n wiki: \"Cyclone_Slash\"\r\n },\r\n },\r\n },*/\r\n\r\n\r\n /* ################ Dream Nail and Essence ################### */\r\n\r\n /*dreamNail: {\r\n h2: \"Dream Nail and Essence\",\r\n id: \"hk-dreamnail\",\r\n description: \"A special dream Ability. Can collect Essence and enter dreams. Each milestone here will provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n hasDreamNail: {\r\n name: \"Dream Nail Acquired\",\r\n spoiler: \"Resting Grounds\",\r\n wiki: \"Dream_Nail\"\r\n },\r\n dreamNailUpgraded: {\r\n name: \"Awoken Dream Nail\",\r\n spoiler: \"Seer: 1800 Essence\",\r\n wiki: \"Dream_Nail#Awoken_Dream_Nail\"\r\n },\r\n mothDeparted: {\r\n name: \"Hear the Seer's Final Words\",\r\n spoiler: \"Seer: 2400 Essence\",\r\n wiki: \"Seer\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Warrior Dreams ################### */\r\n\r\n /*warriorDreams: {\r\n h2: \"Warrior Dreams\",\r\n id: \"hk-warriordreams\",\r\n description: `Special kind of bosses in Hollow Knight, which provide Essence and 1% Game Completion after defeat. \r\n Note: The Essence must be collected before each boss will provide 1% Game Completion. Uncollected Essence will be marked as not completed.`,\r\n percent: 0,\r\n maxPercent: 7,\r\n entries: {\r\n aladarSlugDefeated: {\r\n name: \"P1 Gorb\",\r\n spoiler: \"Howling Cliffs, top middle area\",\r\n wiki: \"Gorb\"\r\n },\r\n xeroDefeated: {\r\n name: \"P2 Xero\",\r\n spoiler: \"Resting Grounds, below Crystal Peak drop\",\r\n wiki: \"Xero\"\r\n },\r\n mumCaterpillarDefeated: {\r\n name: \"P2 Marmu\",\r\n spoiler: \"Queen's Gardens, left of Stag Station\",\r\n wiki: \"Marmu\"\r\n },\r\n elderHuDefeated: {\r\n name: \"P3 Elder Hu\",\r\n spoiler: \"Fungal Wastes, above acid bridge\",\r\n wiki: \"Elder_Hu\"\r\n },\r\n galienDefeated: {\r\n name: \"P3 Galien\",\r\n spoiler: \"Deepnest, below Failed Tramway\",\r\n wiki: \"Galien\"\r\n },\r\n noEyesDefeated: {\r\n name: \"P4 No Eyes\",\r\n spoiler: \"Greenpath: Stone Sanctuary, requires Lumafly Lantern\",\r\n wiki: \"No_Eyes\"\r\n },\r\n markothDefeated: {\r\n name: \"P4 Markoth\",\r\n spoiler: \"Kingdom's Edge, requires Shade Cloak\",\r\n wiki: \"Markoth\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Dreamers ################### */\r\n\r\n /*dreamers: {\r\n h2: \"Dreamers\",\r\n id: \"hk-dreamers\",\r\n description: \"Each Dreamer will provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n lurienDefeated: {\r\n name: \"Lurien the Watcher\",\r\n spoiler: \"City of Tears: Watcher's Spire\",\r\n wiki: \"Lurien\"\r\n },\r\n monomonDefeated: {\r\n name: \"Monomon the Teacher\",\r\n spoiler: \"Fog Canyon: Teacher's Archives\",\r\n wiki: \"Monomon\"\r\n },\r\n hegemolDefeated: {\r\n name: \"Herrah the Beast\",\r\n spoiler: \"Deepnest: Distant Village\",\r\n wiki: \"Herrah\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Colosseum of Fools ################### */\r\n\r\n /*colosseum: {\r\n h2: \"Colosseum of Fools\",\r\n id: \"hk-colosseum\",\r\n description: \"Completing each Trial in the Colosseum provides 1% Game Completion. This section sums up the original 100% Game Completion Percentage from Hollow Knight in 2017 (without Content Packs).\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n colosseumBronzeCompleted: {\r\n name: \"Trial of the Warrior\",\r\n spoiler: \"Kingdom's Edge: top area, Little Fool: 100 Geo\",\r\n wiki: \"Trial_of_the_Warrior\"\r\n },\r\n colosseumSilverCompleted: {\r\n name: \"Trial of the Conqueror\",\r\n spoiler: \"Little Fool: 450 Geo + Warrior completed\",\r\n wiki: \"Trial_of_the_Conqueror\"\r\n },\r\n colosseumGoldCompleted: {\r\n name: \"Trial of the Fool\",\r\n spoiler: \"Little Fool: 800 Geo + Conqueror completed\",\r\n wiki: \"Trial_of_the_Fool\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Grimm Troupe Content Pack ################### */\r\n\r\n /*grimmTroupe: {\r\n h2: \"Grimm Troupe Content Pack\",\r\n id: \"hk-grimmtroupe\",\r\n description: `The first Content Pack. Released October 26th, 2017 (1.2.1.0 Game Update). It added additional +6% to max Game Completion Percentage. \r\n Note: It requires making a choice, but no matter what you will choose, you will still get the same +1%.`,\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n gotCharm_37: {\r\n name: \"Charm #37 Sprintmaster\",\r\n spoiler: \"Sly: 400 Geo + Shopkeeper's Key\",\r\n wiki: \"Sprintmaster\"\r\n },\r\n gotCharm_38: {\r\n name: \"Charm #38 Dreamshield\",\r\n spoiler: \"Resting Grounds, go left below Seer\",\r\n wiki: \"Dreamshield\"\r\n },\r\n gotCharm_39: {\r\n name: \"Charm #39 Weaversong\",\r\n spoiler: \"Deepnest: Weaver's Den\",\r\n wiki: \"Weaversong\"\r\n },\r\n gotCharm_40: {\r\n name: \"Charm #40 Grimmchild or Carefree Melody\",\r\n nameDefault: \"Charm #40 Grimmchild or Carefree Melody\",\r\n nameGrimmchildP1: \"Charm #40: Grimmchild (Phase 1)\",\r\n nameGrimmchildP2: \"Charm #40: Grimmchild (Phase 2)\",\r\n nameGrimmchildP3: \"Charm #40: Grimmchild (Phase 3)\",\r\n nameGrimmchildP4: \"Charm #40: Grimmchild (Phase 4)\",\r\n nameCarefreeMelody: \"Charm #40: Carefree Melody\",\r\n spoiler: \"Dirtmouth\",\r\n spoilerDefault: \"Dirtmouth\",\r\n spoilerGrimmchildP1: \"Collect 3 flames\",\r\n spoilerGrimmchildP2: \"Collect 3 flames\",\r\n spoilerGrimmchildP3: \"Collect 3 flames\",\r\n spoilerGrimmchildP4: \"Completed the Ritual\",\r\n spoilerCarefreeMelody: \"Banished Grimm Troupe\",\r\n wiki: \"Grimmchild\",\r\n wikiDefault: \"Grimmchild\",\r\n wikiGrimmchild: \"Grimmchild\",\r\n wikiCarefreeMelody: \"Carefree_Melody\"\r\n },\r\n killedGrimm: {\r\n name: \"P3 Troupe Master Grimm\",\r\n spoiler: \"Dirtmouth, collect 6 flames\",\r\n wiki: \"Grimm\"\r\n },\r\n grimmChildLevel: {\r\n name: \"Complete Ritual or Banish Troupe\",\r\n nameDefault: \"Complete Ritual or Banish Troupe\",\r\n nameNightmareKing: \"Grimm Troupe Choice: Nightmare King\",\r\n nameBanishment: \"Grimm Troupe Choice: Banishment\",\r\n spoiler: \"One choice per save file: Dirtmouth or Howling Cliffs\",\r\n spoilerDefault: \"One choice per save file: Dirtmouth or Howling Cliffs\",\r\n spoilerNightmareKing: \"Completed the Ritual\",\r\n spoilerBanishment: \"Banished Grimm Troupe\",\r\n wiki: \"Grimm_Troupe_(Quest)\",\r\n wikiDefault: \"Grimm_Troupe_(Quest)\",\r\n wikiNightmareKing: \"Nightmare_King_Grimm\",\r\n wikiBanishment: \"Nymm\",\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Lifeblood Content Pack ################### */\r\n\r\n /*lifeblood: {\r\n h2: \"Lifeblood Content Pack\",\r\n id: \"hk-lifeblood\",\r\n description: `The second Content Pack. Released April 20th, 2018 (1.3.1.5 Game Update). Among many quality changes, it added one new boss, which increased the max Game Completion Percentage by +1%.`,\r\n percent: 0,\r\n maxPercent: 1,\r\n entries: {\r\n killedHiveKnight: {\r\n name: \"P3 Hive Knight\",\r\n spoiler: \"The Hive, guards Hiveblood charm\",\r\n wiki: \"Hive_Knight\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Godmaster Content Pack ################### */\r\n\r\n /*godmaster: {\r\n h2: \"Godmaster Content Pack\",\r\n id: \"hk-godmaster\",\r\n description: `The third Content Pack. Released August 23rd, 2018 (1.4.2.4 Game Update). It added additional +5% to max Game Completion Percentage (up to a total of 112%).`,\r\n percent: 0,\r\n maxPercent: 5,\r\n entries: {\r\n hasGodfinder: {\r\n name: \"Godtuner\",\r\n spoiler: \"Royal Waterways: Junk Pit, requires Simple Key\",\r\n wiki: \"Godtuner\"\r\n },\r\n // ########## Godmaster doors ##########\r\n pantheonMaster: {\r\n name: \"P1 Pantheon of the Master\",\r\n spoiler: \"Godhome: defeat P1 bosses\",\r\n wiki: \"Pantheon_of_the_Master\",\r\n property: \"bossDoorStateTier1\"\r\n },\r\n pantheonArtist: {\r\n name: \"P2 Pantheon of the Artist\",\r\n spoiler: \"Godhome: defeat P2 bosses\",\r\n wiki: \"Pantheon_of_the_Artist\",\r\n property: \"bossDoorStateTier2\"\r\n },\r\n pantheonSage: {\r\n name: \"P3 Pantheon of the Sage\",\r\n spoiler: \"Godhome: defeat P3 bosses\",\r\n wiki: \"Pantheon_of_the_Sage\",\r\n property: \"bossDoorStateTier3\"\r\n },\r\n pantheonKnight: {\r\n name: \"P4 Pantheon of the Knight\",\r\n spoiler: \"Godhome: complete P1, P2 and P3\",\r\n wiki: \"Pantheon_of_the_Knight\",\r\n property: \"bossDoorStateTier4\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Essentials % -> Collectibles ################### */\r\n\r\n /*essentialsCollectibles: {\r\n h2: \"Game Completion % Essentials – Collectibles\",\r\n id: \"hk-essentials-collectibles\",\r\n description: \"Collectibles that don't count directly towards 112% Game Completion, but are required to achieve full 112%.\",\r\n entries: {\r\n grubsCollected: {\r\n name: \"Grubs Rescued\",\r\n spoiler: \"46 Grubs total\",\r\n max: 46,\r\n maxDefault: 46,\r\n wiki: \"Grub\"\r\n },\r\n grubRewards: {\r\n name: \"Grubfather Rewards Awarded\",\r\n spoiler: \"46 Rewards total\",\r\n max: 46,\r\n maxDefault: 46,\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n charmsOwned: {\r\n name: \"Charms Owned\",\r\n spoiler: \"40 Charms total, useful for Salubra Notches\",\r\n max: 40,\r\n maxDefault: 40,\r\n wiki: \"Category:Charms#List_of_Charms\"\r\n },\r\n dreamOrbs: {\r\n name: \"Essence Collected\",\r\n spoiler: \"Dream Nail (2400 for completion)\",\r\n max: 2400,\r\n maxDefault: 2400,\r\n wiki: \"Dream_Nail#Essence\"\r\n },\r\n hasLantern: {\r\n name: \"Lumafly Lantern\",\r\n spoiler: \"Sly: 1800 Geo\",\r\n wiki: \"Lumafly_Lantern\"\r\n },\r\n shopkeeperKey: {\r\n name: \"Shopkeeper's Key\",\r\n spoiler: \"Crystal Peak, below Quirrel location\",\r\n wiki: \"Shopkeeper's_Key\"\r\n },\r\n elegantKey: {\r\n name: \"Elegant Key\",\r\n spoiler: \"Sly: 800 Geo + Shopkeeper's Key\",\r\n wiki: \"Elegant_Key\"\r\n },\r\n loveKey: {\r\n name: \"Love Key\",\r\n spoiler: \"Queen's Gardens, near Fungal Wastes\",\r\n wiki: \"Love_Key\"\r\n },\r\n slySimpleKey: {\r\n name: \"Simple Key #1\",\r\n spoiler: \"Sly: 950 Geo\",\r\n wiki: \"Simple_Key\"\r\n },\r\n simpleKeyCityOfTears: {\r\n name: \"Simple Key #2\",\r\n spoiler: \"City of Tears, below left Stag Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_17\",\r\n wiki: \"Simple_Key#How_to_Acquire\"\r\n },\r\n simpleKeyAncientBasin: {\r\n name: \"Simple Key #3\",\r\n spoiler: \"Ancient Basin, below Broken Vessel\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Abyss_20\",\r\n wiki: \"Simple_Key#How_to_Acquire\"\r\n },\r\n gotLurkerKey: {\r\n name: \"Simple Key #4\",\r\n spoiler: \"Colosseum of Fools: Pale Lurker's Retreat\",\r\n wiki: \"Simple_Key#How_to_Acquire\"\r\n },\r\n paleOreAncientBasin: {\r\n name: \"Pale Ore #1\",\r\n spoiler: \"Ancient Basin, left of Tram Station\",\r\n id: \"Battle Scene Ore\",\r\n sceneName: \"Abyss_17\",\r\n wiki: \"Pale_Ore\"\r\n },\r\n paleOreSeer: {\r\n name: \"Pale Ore #2\",\r\n spoiler: \"Seer: 300 Essence\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreCrystalPeak: {\r\n name: \"Pale Ore #3\",\r\n spoiler: \"Top of Crystal Peak, use Monarch Wings\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Mines_34\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreDeepnest: {\r\n name: \"Pale Ore #4\",\r\n spoiler: \"Deepnest, Nosk reward\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Deepnest_32\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreGrubfather: {\r\n name: \"Pale Ore #5\",\r\n spoiler: \"Grubfather: 31 Grubs rescued\",\r\n id: \"Shiny Item Ore\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreColosseum: {\r\n name: \"Pale Ore #6\",\r\n spoiler: \"Colosseum of Fools: Trial of the Conqueror\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Room_Colosseum_Silver\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n hasTramPass: {\r\n name: \"Tram Pass\",\r\n spoiler: \"Deepnest: Failed Tramway\",\r\n wiki: \"Tram_Pass\"\r\n },\r\n gotQueenFragment: {\r\n name: \"White Fragment: Queen\",\r\n spoiler: \"White Lady: Queen's Gardens\",\r\n wiki: \"Kingsoul#How_to_Acquire\"\r\n },\r\n gotKingFragment: {\r\n name: \"White Fragment: King\",\r\n spoiler: \"Pale King: White Palace\",\r\n wiki: \"Kingsoul#How_to_Acquire\"\r\n },\r\n },\r\n grubsList: [\"Crossroads_35\", \"Crossroads_03\", \"Crossroads_05\", \"Crossroads_48\", \"Crossroads_31\", \"Fungus1_06\", \"Fungus1_07\", \"Fungus1_21\", \"Fungus1_28\", \"Fungus2_18\", \"Ruins1_05\", \"Mines_04\", \"Mines_03\", \"Mines_31\", \"Mines_19\", \"Ruins1_32\", \"RestingGrounds_10\", \"Ruins_House_01\", \"Mines_35\", \"Mines_16\", \"Waterways_04\", \"Waterways_13\", \"Abyss_19\", \"Abyss_17\", \"Mines_24\", \"Fungus1_13\", \"Fungus3_47\", \"Fungus3_10\", \"Fungus3_48\", \"Fungus3_22\", \"Ruins2_07\", \"Ruins2_11\", \"Ruins2_11\", \"Ruins2_11\", \"Deepnest_East_11\", \"Deepnest_East_14\", \"Fungus2_20\", \"Ruins2_03\", \"Deepnest_36\", \"Deepnest_03\", \"Deepnest_31\", \"Deepnest_39\", \"Deepnest_Spider_Town\", \"Waterways_14\", \"Hive_03\", \"Hive_04\"],\r\n },*/\r\n\r\n /* ################ Essentials % -> Stag Stations ################### */\r\n\r\n /*essentialsStagStations: {\r\n h2: \"Game Completion % Essentials – Stag Stations\",\r\n id: \"hk-essentials-stag-stations\",\r\n description: `Opened Stag Stations don't count directly towards 112% Game Completion, but are required to achieve full 112% by discovering the Stag Nest for the Vessel Fragment.`,\r\n entries: {\r\n openedTownBuilding: {\r\n name: \"Stag Station: Dirtmouth\",\r\n spoiler: \"Opened from inside after travelling\",\r\n wiki: \"Dirtmouth\"\r\n },\r\n openedCrossroads: {\r\n name: \"Stag Station: Forgotten Crossroads\",\r\n spoiler: \"50 Geo: Right middle-bottom area\",\r\n wiki: \"Forgotten_Crossroads\"\r\n },\r\n openedGreenpath: {\r\n name: \"Stag Station: Greenpath\",\r\n spoiler: \"140 Geo: Top middle area, below Hornet\",\r\n wiki: \"Greenpath\"\r\n },\r\n openedFungalWastes: {\r\n name: \"Stag Station: Queen's Station\",\r\n spoiler: \"120 Geo: Fungal Wastes, near Fog Canyon\",\r\n wiki: \"Fungal_Wastes#Sub-area:_Queen.27s_Station\"\r\n },\r\n openedRuins1: {\r\n name: \"Stag Station: City Storerooms\",\r\n spoiler: \"200 Geo: City of Tears, top left area\",\r\n wiki: \"City_of_Tears#City_Storerooms\"\r\n },\r\n openedRestingGrounds: {\r\n name: \"Stag Station: Resting Grounds\",\r\n spoiler: \"0 Geo: Right middle area, near Seer\",\r\n wiki: \"Resting_Grounds\"\r\n },\r\n openedRuins2: {\r\n name: \"Stag Station: King's Station\",\r\n spoiler: \"300 Geo: City of Tears, far right area\",\r\n wiki: \"City_of_Tears#Sub-area:_King.27s_Station\"\r\n },\r\n openedRoyalGardens: {\r\n name: \"Stag Station: Queen's Gardens\",\r\n spoiler: \"200 Geo: Middle area, near Traitor's Grave\",\r\n wiki: \"Queen's_Gardens\"\r\n },\r\n openedDeepnest: {\r\n name: \"Stag Station: Distant Village\",\r\n spoiler: \"250 Geo: Deepnest, far left area\",\r\n wiki: \"Deepnest#Sub-area:_Distant_Village\"\r\n },\r\n openedHiddenStation: {\r\n name: \"Stag Station: Hidden Station\",\r\n spoiler: \"300 Geo: Ancient Basin: Palace Grounds\",\r\n wiki: \"Ancient_Basin#Sub-Area:_Palace_Grounds\"\r\n },\r\n openedStagNest: {\r\n name: \"Stag Station: Stag Nest\",\r\n spoiler: \"Open all stations: Howling Cliffs, top area\",\r\n wiki: \"Howling_Cliffs#Sub-area:_Stag_Nest\"\r\n },\r\n stagStationsOpened: {\r\n name: \"Stag Stations Opened\",\r\n spoiler: \"11 Stag Stations total including Dirtmouth\",\r\n max: 11,\r\n maxDefault: 11,\r\n wiki: \"Fast_Travel_(Hollow_Knight)#Locations_and_Prices\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Essentials % -> World Interactions ################### */\r\n\r\n /*essentialsWorldInteractions: {\r\n h2: \"Game Completion % Essentials – World Interactions\",\r\n id: \"hk-essentials-world-interactions\",\r\n description: `Certain interactions the player can make with NPCs in the game or world objects which don't count directly towards 112% Game Completion, but are required to achieve full 112%.`,\r\n entries: {\r\n slyRescued: {\r\n name: \"Sly Rescued\",\r\n spoiler: \"Forgotten Crossroads, near Gruz Mother\",\r\n wiki: \"Sly\"\r\n },\r\n brettaRescued: {\r\n name: \"Bretta Rescued\",\r\n spoiler: \"Fungal Wastes, near Dashmaster charm statue\",\r\n wiki: \"Bretta\"\r\n },\r\n paidLegEater: {\r\n name: \"Paid to See Something Nice\",\r\n spoiler: \"Fungal Wastes, Leg Eater: 86 Geo\",\r\n wiki: \"Leg_Eater#In-game_events\"\r\n },\r\n gaveSlykey: {\r\n name: \"Shopkeeper's Key Returned to Sly\",\r\n spoiler: \"Dirtmouth, Sly's Shop\",\r\n wiki: \"Sly\"\r\n },\r\n mantisVillageFloorLever: {\r\n name: \"Mantis Village Floor Lever\",\r\n spoiler: \"Fungal Wastes, right of Mantis Claw\",\r\n id: \"Mantis Lever (1)\",\r\n sceneName: \"Fungus2_14\",\r\n wiki: \"Fungal_Wastes#Sub-area:_Mantis_Village\"\r\n },\r\n xunFlowerGiven: {\r\n name: \"Delicate Flower Accepted\",\r\n spoiler: \"Resting Grounds: listen to Grey Mourner\",\r\n wiki: \"Grey_Mourner#In-game_events\"\r\n },\r\n waterwaysAcidDrained: {\r\n name: \"Acid Drained\",\r\n spoiler: \"Royal Waterways, lever after Dung Defender\",\r\n wiki: \"Royal_Waterways#Sub-area:_Isma.27s_Grove\"\r\n },\r\n openedMageDoor_v2: {\r\n name: \"Elegant Door Unlocked\",\r\n spoiler: \"City of Tears: Soul Sanctum, requires Elegant Key\",\r\n wiki: \"Elegant_Key#Use\"\r\n },\r\n openedLoveDoor: {\r\n name: \"Tower of Love Door Unlocked\",\r\n spoiler: \"City of Tears, requires Love Key\",\r\n wiki: \"City_of_Tears#Sub-area:_Tower_of_Love\"\r\n },\r\n abyssGateOpened: {\r\n name: \"The Abyss Gate Opened\",\r\n spoiler: \"Ancient Basin, requires King's Brand\",\r\n wiki: \"Ancient_Basin#Description\"\r\n },\r\n blueVineDoor: {\r\n name: \"Lifeblood Door Opened\",\r\n spoiler: \"The Abyss, requires 14–15+ Lifeblood Masks\",\r\n wiki: \"Lifeblood_Core#How_to_Acquire\"\r\n },\r\n nightmareLanternLit: {\r\n name: \"Nightmare Lantern Lit\",\r\n spoiler: \"Howling Cliffs, corpse of a large bug\",\r\n wiki: \"Howling_Cliffs#Nightmare_Lantern_Chamber\"\r\n },\r\n paleLurkersRetreat: {\r\n name: \"Pale Lurker's Retreat\",\r\n spoiler: \"Colosseum of Fools, Room above Bench, break wall\",\r\n id: \"Breakable Wall_Silhouette\",\r\n sceneName: \"Room_Colosseum_Spectate\",\r\n wiki: \"Colosseum_of_Fools#Description\"\r\n },\r\n godseekerUnlocked: {\r\n name: \"Godseeker Cocoon Unlocked\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n wiki: \"Royal_Waterways#Sub-area:_Junk_Pit\"\r\n },\r\n fountainGeo: {\r\n name: \"Geo in Fountain\",\r\n spoiler: \"Ancient Basin: 3000 Geo maximum\",\r\n max: 3000,\r\n maxDefault: 3000,\r\n wiki: \"Ancient_Basin#Description\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Essentials % -> Bosses ################### */\r\n\r\n /*essentialsBosses: {\r\n h2: \"Game Completion % Essentials – Bosses\",\r\n id: \"hk-essentials-bosses\",\r\n description: \"Bosses that don't count directly towards 112% Game Completion, but are required to defeat to achieve full 112%.\",\r\n entries: {\r\n killedMegaMossCharger: {\r\n name: \"P1 Massive Moss Charger\",\r\n spoiler: \"Greenpath, near Fog Canyon\",\r\n wiki: \"Massive_Moss_Charger\"\r\n },\r\n pantheonSoulWarrior: {\r\n name: \"P1 Soul Warrior\",\r\n spoiler: \"City of Tears: Soul Sanctum\",\r\n id: \"Battle Scene v2\",\r\n sceneName: \"Ruins1_23\",\r\n wiki: \"Soul_Warrior#Location\"\r\n },\r\n shadeSoulWarrior: {\r\n name: \"Shade Soul Warrior\",\r\n spoiler: \"City of Tears: Soul Sanctum, use Elegant Key\",\r\n id: \"Battle Scene v2\",\r\n sceneName: \"Ruins1_31\",\r\n wiki: \"Shade_Soul#How_to_Acquire\"\r\n },\r\n pantheonCrystalGuardian: {\r\n name: \"P2 Crystal Guardian\",\r\n spoiler: \"Crystal Peak, guards Central Bench\",\r\n id: \"Mega Zombie Beam Miner (1)\",\r\n sceneName: \"Mines_18\",\r\n wiki: \"Crystal_Guardian\"\r\n },\r\n killedBigBuzzer: {\r\n name: \"Vengefly King\",\r\n spoiler: \"Colosseum of Fools: Trial of the Warrior, Greenpath\",\r\n wiki: \"Vengefly_King\"\r\n },\r\n killedOblobble: {\r\n name: \"P2 Oblobble\",\r\n spoiler: \"Colosseum of Fools: Trial of the Conqueror\",\r\n wiki: \"Oblobbles\"\r\n },\r\n killedLobsterLancer: {\r\n name: \"God Tamer\",\r\n spoiler: \"Colosseum of Fools: Trial of the Fool\",\r\n wiki: \"God_Tamer\"\r\n },\r\n killedFlukeMother: {\r\n name: \"P2 Flukemarm\",\r\n spoiler: \"Royal Waterways, requires Desolate Dive\",\r\n wiki: \"Flukemarm\"\r\n },\r\n pantheonEnragedGuardian: {\r\n name: \"P4 Enraged Guardian\",\r\n spoiler: \"Crystal Peak, requires Monarch Wings\",\r\n id: \"Zombie Beam Miner Rematch\",\r\n sceneName: \"Mines_32\",\r\n wiki: \"Enraged_Guardian\"\r\n },\r\n killedNailBros: {\r\n name: \"Nailmasters Oro & Mato\",\r\n spoiler: \"Godhome: Pantheon of the Master\",\r\n wiki: \"Brothers_Oro_%26_Mato\"\r\n },\r\n killedPaintmaster: {\r\n name: \"Paintmaster Sheo\",\r\n spoiler: \"Godhome: Pantheon of the Artist\",\r\n wiki: \"Paintmaster_Sheo\"\r\n },\r\n killedNailsage: {\r\n name: \"Great Nailsage Sly\",\r\n spoiler: \"Godhome: Pantheon of the Sage\",\r\n wiki: \"Great_Nailsage_Sly\"\r\n },\r\n killedHollowKnightPrime: {\r\n name: \"Pure Vessel\",\r\n spoiler: \"Godhome: Pantheon of the Knight\",\r\n wiki: \"Pure_Vessel\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> Collectibles ################### */\r\n\r\n /*achievementsCollectibles: {\r\n h2: \"Achievements Essentials – Collectibles\",\r\n id: \"hk-achievements-collectibles\",\r\n description: `Collectibles important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,\r\n entries: {\r\n hasMap: {\r\n name: \"Inventory Map\",\r\n spoiler: \"First map bought from Cornifer or Iselda\",\r\n wiki: \"Map_and_Quill\"\r\n },\r\n hasJournal: {\r\n name: \"Hunter's Journal\",\r\n spoiler: \"Greenpath: Hunter, above Stone Sanctuary\",\r\n wiki: \"Hunter's_Journal\"\r\n },\r\n hasHuntersMark: {\r\n name: \"Hunter's Mark\",\r\n spoiler: \"Greenpath: Hunter, complete base 146 Hunter Notes\",\r\n wiki: \"Hunter's_Mark\"\r\n },\r\n killsBigBuzzer: {\r\n name: \"Vengefly King Journal Note\",\r\n spoiler: \"Colosseum: Trial of the Warrior\",\r\n wiki: \"Vengefly_King\"\r\n },\r\n salubraBlessing: {\r\n name: \"Salubra's Blessing\",\r\n spoiler: \"Salubra: 800 Geo + all 40 Charms Owned\",\r\n wiki: \"Salubra's_Blessing\"\r\n },\r\n gotShadeCharm: {\r\n name: \"Void Heart\",\r\n spoiler: \"Equip Kingsoul Charm and find Birthplace\",\r\n wiki: \"Void_Heart\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> Maps ################### */\r\n\r\n /*achievementsMaps: {\r\n h2: \"Achievements Essentials – Maps\",\r\n id: \"hk-achievements-maps\",\r\n description: `Acquired maps are important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,\r\n entries: {\r\n mapCrossroads: {\r\n name: \"Map: Forgotten Crossroads\",\r\n spoiler: \"30/40 Geo: below Gruzzer area\",\r\n wiki: \"Forgotten_Crossroads\"\r\n },\r\n mapGreenpath: {\r\n name: \"Map: Greenpath\",\r\n spoiler: \"60/80 Geo: just below Greenpath entrance\",\r\n wiki: \"Greenpath\"\r\n },\r\n mapFungalWastes: {\r\n name: \"Map: Fungal Wastes\",\r\n spoiler: \"75/100 Geo: right of Queen's Station\",\r\n wiki: \"Fungal_Wastes\"\r\n },\r\n mapCliffs: {\r\n name: \"Map: Howling Cliffs\",\r\n spoiler: \"75/100 Geo: left middle area, near Journal\",\r\n wiki: \"Howling_Cliffs\"\r\n },\r\n mapCity: {\r\n name: \"Map: City of Tears\",\r\n spoiler: \"90/120 Geo: left of Soul Sanctum\",\r\n wiki: \"City_of_Tears\"\r\n },\r\n mapMines: {\r\n name: \"Map: Crystal Peak\",\r\n spoiler: \"120/150 Geo: top left area\",\r\n wiki: \"Crystal_Peak\"\r\n },\r\n mapWaterways: {\r\n name: \"Map: Royal Waterways\",\r\n spoiler: \"75/100 Geo: far left area, near Fungal\",\r\n wiki: \"Royal_Waterways\"\r\n },\r\n mapRestingGrounds: {\r\n name: \"Map: Resting Grounds\",\r\n spoiler: \"75 Geo: Iselda's Shop\",\r\n wiki: \"Resting_Grounds\"\r\n },\r\n mapAbyss: {\r\n name: \"Map: Ancient Basin\",\r\n spoiler: \"112/150 Geo: center area, near fountain\",\r\n wiki: \"Ancient_Basin\"\r\n },\r\n mapOutskirts: {\r\n name: \"Map: Kingdom's Edge\",\r\n spoiler: \"112/150 Geo: left bottom area, inside pipe\",\r\n wiki: \"Kingdom's_Edge\"\r\n },\r\n mapFogCanyon: {\r\n name: \"Map: Fog Canyon\",\r\n spoiler: \"150/200 Geo: above Teacher's Archives\",\r\n wiki: \"Fog_Canyon\"\r\n },\r\n mapRoyalGardens: {\r\n name: \"Map: Queen's Gardens\",\r\n spoiler: \"150/200 Geo: below Fog Canyon entrance\",\r\n wiki: \"Queen's_Gardens\"\r\n },\r\n mapDeepnest: {\r\n name: \"Map: Deepnest\",\r\n spoiler: \"38/50 Geo: near both Fungal Wastes entrances\",\r\n wiki: \"Deepnest\"\r\n },\r\n areaMaps: {\r\n name: \"Area Maps\",\r\n spoiler: \"Cornifer and Iselda, 13 Area Maps total\",\r\n max: 13,\r\n maxDefault: 13,\r\n wiki: \"Map_and_Quill#Maps\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> World Interactions ################### */\r\n\r\n /*achievementsWorldInteractions: {\r\n h2: \"Achievements Essentials – World Interactions\",\r\n id: \"hk-achievements-world-interactions\",\r\n description: `Certain interactions the player can make with NPCs in the game or world objects important for unlocking achievements. They don't count or matter towards 112% Game Completion. This section includes some choices that the player can make in the game.`,\r\n entries: {\r\n quirrelEpilogueCompleted: {\r\n name: \"Quirrel: Witness\",\r\n spoiler: \"Blue Lake: after defeating Monomon the Teacher\",\r\n wiki: \"Quirrel\"\r\n },\r\n xunRewardGiven: {\r\n name: \"Grey Mourner: Solace\",\r\n spoiler: \"Resting Grounds: Complete Delicate Flower quest\",\r\n wiki: \"Grey_Mourner\"\r\n },\r\n zoteStatus: {\r\n id: \"zoteStatus\",\r\n name: \"Zote Status\",\r\n nameDefault: \"Zote Status\",\r\n nameNeglect: \"Zote Choice: Neglect\",\r\n nameRivalry: \"Zote Choice: Rivalry\",\r\n nameTrappedVengefly: \"Zote Status: Vengefly\",\r\n nameNotRescuedVengefly: \"Zote Status: Greenpath\",\r\n nameTrappedDeepnest: \"Zote Status: Deepnest\",\r\n nameColosseum: \"Zote Status: Colosseum of Fools\",\r\n spoiler: \"One achievement per save file\",\r\n spoilerDefault: \"One achievement per save file\",\r\n spoilerNeglect: \"Left Zote to die\",\r\n spoilerRivalry: \"Defeated Zote in the Colosseum of Fools\",\r\n spoilerTrappedVengefly: \"Greenpath, defeat Vengefly King\",\r\n spoilerNotRescuedVengefly: \"Check what happened with Zote\",\r\n spoilerTrappedDeepnest: \"Deepnest, free from cobwebs\",\r\n spoilerColosseum: \"Trial of the Warrior\",\r\n wiki: \"Zote\"\r\n },\r\n nailsmithStatus: {\r\n id: \"nailsmithStatus\",\r\n name: \"Nailsmith Status\",\r\n nameDefault: \"Nailsmith Status\",\r\n nameHappyCouple: \"Nailsmith Choice: Happy Couple\",\r\n namePurity: \"Nailsmith Choice: Purity\",\r\n nameSheoHutWaiting: \"Nailsmith Status: Sheo\",\r\n nameUpgradeNail: \"Nailsmith Status: Waiting\",\r\n spoiler: \"One achievement per save file\",\r\n spoilerDefault: \"One achievement per save file\",\r\n spoilerHappyCouple: \"Found a new calling\",\r\n spoilerPurity: \"Slain with Pure Nail\",\r\n spoilerSheoHutWaiting: \"Waiting at Sheo's Hut\",\r\n spoilerUpgradeNail: \"Upgrade Nail to Pure Nail\",\r\n wiki: \"Nailsmith\"\r\n },\r\n mrMushroomState1: {\r\n name: \"Mr Mushroom #1\",\r\n spoiler: \"Fungal Wastes, near Cornifer\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 2\r\n },\r\n mrMushroomState2: {\r\n name: \"Mr Mushroom #2\",\r\n spoiler: \"Kingdom's Edge, near Isma's Grove\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 3\r\n },\r\n mrMushroomState3: {\r\n name: \"Mr Mushroom #3\",\r\n spoiler: \"Deepnest, near Galien\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 4\r\n },\r\n mrMushroomState4: {\r\n name: \"Mr Mushroom #4\",\r\n spoiler: \"Howling Cliffs, near Nailmaster Mato\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 5\r\n },\r\n mrMushroomState5: {\r\n name: \"Mr Mushroom #5\",\r\n spoiler: \"Ancient Basin, near Monarch Wings\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 6\r\n },\r\n mrMushroomState6: {\r\n name: \"Mr Mushroom #6\",\r\n spoiler: \"Fog Canyon, near Overgrown Mound\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 7\r\n },\r\n mrMushroomState7: {\r\n name: \"Mr Mushroom #7\",\r\n spoiler: \"King's Pass, game starting location\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 8\r\n },\r\n pantheonHallownest: {\r\n name: \"P5 Embrace the Void\",\r\n spoiler: \"Godhome: Pantheon of Hallownest\",\r\n wiki: \"Pantheon_of_Hallownest\"\r\n },\r\n /* \r\n Mr Mushroom data\r\n case SplitName.MrMushroom1: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 2; break;\r\n case SplitName.MrMushroom2: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 3; break;\r\n case SplitName.MrMushroom3: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 4; break;\r\n case SplitName.MrMushroom4: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 5; break;\r\n case SplitName.MrMushroom5: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 6; break;\r\n case SplitName.MrMushroom6: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 7; break;\r\n case SplitName.MrMushroom7: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 8; break;\r\n \r\n \"mrMushroomState\": 4, < this is the current location of Mr Mushroom (Howling Cliffs)\r\n \r\n 1. Spawn of self, their minds unite, (Fungal Wastes)\r\n 2. Aside the source of acid blight, (Kingdom's Edge, near Isma's Grove)\r\n 3. Aglow in darkest, winding depths, (Deepnest, near Galien)\r\n 4. Winds all howl above fossilstone steps, (Howling Cliffs)\r\n 5. Monarchflys in air set still, (Ancient Basin, near the Monarch Wings location)\r\n 6. To Root's domain and snail once shrill, (Fog Canyon, near Overgrown Mound)\r\n 7. Path of Wyrm, at new lands entered, (King's Pass)\r\n 8. There journeys end. The kingdom ventured.\r\n */\r\n /*},\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> Bosses ################### */\r\n\r\n /*achievementsBosses: {\r\n h2: \"Achievements Essentials – Bosses\",\r\n id: \"hk-achievements-bosses\",\r\n description: `Bosses important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,\r\n entries: {\r\n falseKnightDreamDefeated: {\r\n name: \"Failed Champion\",\r\n spoiler: \"Forgotten Crossroads, near False Knight\",\r\n wiki: \"Failed_Champion\"\r\n },\r\n mageLordDreamDefeated: {\r\n name: \"Soul Tyrant\",\r\n spoiler: \"City of Tears: Soul Sanctum, near Soul Master\",\r\n wiki: \"Soul_Tyrant\"\r\n },\r\n infectedKnightDreamDefeated: {\r\n name: \"Lost Kin\",\r\n spoiler: \"Ancient Basin, Broken Vessel location\",\r\n wiki: \"Lost_Kin\"\r\n },\r\n whiteDefenderDefeated: {\r\n name: \"White Defender\",\r\n spoiler: \"Royal Waterways, Dung Defender, use Desolate Dive\",\r\n wiki: \"White_Defender\"\r\n },\r\n greyPrinceDefeated: {\r\n name: \"Grey Prince Zote\",\r\n spoiler: \"Dirtmouth: Bretta's Room (per save choice)\",\r\n wiki: \"Grey_Prince_Zote\"\r\n },\r\n killedHollowKnight: {\r\n name: \"Hollow Knight\",\r\n spoiler: \"Forgotten Crossroads: Black Egg Temple\",\r\n wiki: \"Hollow_Knight\"\r\n },\r\n \r\n //Absolute Radiance (for P5, achievements)\r\n //Sisters of Battle (for P5, achievements)\r\n //Winged Nosk (for P5, achievements)\r\n \r\n killedFinalBoss: {\r\n name: \"The Radiance\",\r\n spoiler: \"Requires Void Heart & Dream Nail Hollow Knight\",\r\n wiki: \"Radiance\"\r\n },\r\n },\r\n },*/\r\n\r\n \r\n /* ################ Optional Journal Entries ################### */\r\n\r\n /*huntersJournalOptional: {\r\n h2: \"Optional Journal Entries\",\r\n id: \"hk-journal-optional\",\r\n description: \"The remaining Hunter's Journal entries which don't count for Hunter's Mark and Keen/True Hunter achievements. Note: 6 entries can be permanently unobtainable, depending on your choices in the save file (Grey Prince Zote, all 3 Zotelings, Grimmkin Nightmare and Nightmare King).\",\r\n entries: {\r\n HunterMark: {\r\n name: \"Hunter's Mark (1)\",\r\n nameDefault: \"Hunter's Mark\",\r\n spoiler: \"Greenpath: Hunter, complete base 146 Hunter Notes\",\r\n wiki: \"Hunter's_Mark\"\r\n },\r\n MenderBug: {\r\n name: \"Menderbug (1)\",\r\n nameDefault: \"Menderbug\",\r\n spoiler: \"Forgotten Crossroads: destroy sign\",\r\n wiki: \"Menderbug\"\r\n },\r\n Zote: {\r\n name: \"Zote (1)\",\r\n nameDefault: \"Zote\",\r\n spoiler: \"Colosseum: Trial of the Warrior or The Eternal Ordeal\",\r\n wiki: \"Zote\"\r\n },\r\n HollowKnight: {\r\n name: \"Hollow Knight (1)\",\r\n nameDefault: \"Hollow Knight\",\r\n spoiler: \"Forgotten Crossroads: Black Egg Temple\",\r\n wiki: \"Hollow_Knight\"\r\n },\r\n FinalBoss: {\r\n name: \"The Radiance (1)\",\r\n nameDefault: \"The Radiance\",\r\n spoiler: \"Requires Void Heart & Dream Nail Hollow Knight\",\r\n wiki: \"Radiance\"\r\n },\r\n WhiteDefender: {\r\n name: \"White Defender (1)\",\r\n nameDefault: \"White Defender\",\r\n spoiler: \"Royal Waterways: Dung Defender, Desolate Dive\",\r\n wiki: \"White_Defender\"\r\n },\r\n GreyPrince: {\r\n name: \"Grey Prince Zote (1)\",\r\n nameDefault: \"Grey Prince Zote\",\r\n spoiler: \"Dirtmouth: Bretta's Room (per save choice)\",\r\n wiki: \"Grey_Prince_Zote\"\r\n },\r\n ZotelingBalloon: {\r\n name: \"Volatile Zoteling (1)\",\r\n nameDefault: \"Volatile Zoteling\",\r\n spoiler: \"Only from Grey Prince Zote, Battle 3+\",\r\n wiki: \"Volatile_Zoteling\"\r\n },\r\n ZotelingHopper: {\r\n name: \"Hopping Zoteling (1)\",\r\n nameDefault: \"Hopping Zoteling\",\r\n spoiler: \"Only from Grey Prince Zote, Battle 2+\",\r\n wiki: \"Hopping_Zoteling\"\r\n },\r\n ZotelingBuzzer: {\r\n name: \"Winged Zoteling (1)\",\r\n nameDefault: \"Winged Zoteling\",\r\n spoiler: \"Only from Grey Prince Zote, Battle 1+\",\r\n wiki: \"Winged_Zoteling\"\r\n },\r\n FlameBearerSmall: {\r\n name: \"Grimmkin Novice (3)\",\r\n nameDefault: \"Grimmkin Novice\",\r\n spoiler: \"Greenpath, Crystal Peak, City of Tears\",\r\n wiki: \"Grimmkin_Novice\"\r\n },\r\n FlameBearerMed: {\r\n name: \"Grimmkin Master (4)\",\r\n nameDefault: \"Grimmkin Master\",\r\n spoiler: \"King's Pass, Resting Grounds, Kingdom's Edge\",\r\n wiki: \"Grimmkin_Master\"\r\n },\r\n FlameBearerLarge: {\r\n name: \"Grimmkin Nightmare (5)\",\r\n nameDefault: \"Grimmkin Nightmare\",\r\n spoiler: \"Fungal Core, Royal Waterways, Hive\",\r\n wiki: \"Grimmkin_Nightmare\"\r\n },\r\n Grimm: {\r\n name: \"Troupe Master Grimm (1)\",\r\n nameDefault: \"Troupe Master Grimm\",\r\n spoiler: \"Dirtmouth: collect 6 flames\",\r\n wiki: \"Grimm\"\r\n },\r\n NightmareGrimm: {\r\n name: \"Nightmare King (1)\",\r\n nameDefault: \"Nightmare King\",\r\n spoiler: \"Dirtmouth: collect 9 flames\",\r\n wiki: \"Nightmare_King\"\r\n },\r\n BindingSeal: {\r\n name: \"Seal of Binding (1)\",\r\n nameDefault: \"Seal of Binding\",\r\n spoiler: \"White Palace: Path of Pain completion\",\r\n wiki: \"Seal_of_Binding\"\r\n },\r\n NailBros: {\r\n name: \"Nailmasters Oro & Mato (1)\",\r\n nameDefault: \"Nailmasters Oro & Mato\",\r\n spoiler: \"Godhome: Pantheon of the Master\",\r\n wiki: \"Brothers_Oro_%26_Mato\"\r\n },\r\n Paintmaster: {\r\n name: \"Paintmaster Sheo (1)\",\r\n nameDefault: \"Paintmaster Sheo\",\r\n spoiler: \"Godhome: Pantheon of the Artist\",\r\n wiki: \"Paintmaster_Sheo\"\r\n },\r\n Nailsage: {\r\n name: \"Great Nailsage Sly (1)\",\r\n nameDefault: \"Great Nailsage Sly\",\r\n spoiler: \"Godhome: Pantheon of the Sage\",\r\n wiki: \"Great_Nailsage_Sly\"\r\n },\r\n HollowKnightPrime: {\r\n name: \"Pure Vessel (1)\",\r\n nameDefault: \"Pure Vessel\",\r\n spoiler: \"Godhome: Pantheon of the Knight\",\r\n wiki: \"Pure_Vessel\"\r\n },\r\n GodseekerMask: {\r\n name: \"Weathered Mask (1)\",\r\n nameDefault: \"Weathered Mask\",\r\n spoiler: \"Land of Storms: All Pantheons & Bindings\",\r\n wiki: \"Weathered_Mask\"\r\n },\r\n VoidIdol_1: {\r\n name: \"Void Idol Attuned (1)\",\r\n nameDefault: \"Void Idol Attuned\",\r\n spoiler: \"Hall of Gods: Defeat All (Attuned)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n VoidIdol_2: {\r\n name: \"Void Idol Ascended (1)\",\r\n nameDefault: \"Void Idol Ascended\",\r\n spoiler: \"Hall of Gods: Defeat All (Ascended)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n VoidIdol_3: {\r\n name: \"Void Idol Radiant (1)\",\r\n nameDefault: \"Void Idol Radiant\",\r\n spoiler: \"Hall of Gods: Defeat All (Radiant)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Charm Notches ############################################## */\r\n\r\n /*charmNotches: {\r\n h2: \"Charm Notches\",\r\n id: \"hk-charm-notches\",\r\n description: `Charm Notches are required to equip Charms. They can be found in the game world, bought from Salubra or won from certain challenges.`,\r\n percent: 0,\r\n maxPercent: 8,\r\n entries: {\r\n notchShroomOgres: {\r\n name: \"Charm Notch #1\",\r\n spoiler: \"Fungal Wastes: Shroom Ogres room\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch1: {\r\n name: \"Charm Notch #2\",\r\n spoiler: \"Salubra: 120 Geo + 5 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch2: {\r\n name: \"Charm Notch #3\",\r\n spoiler: \"Salubra: 500 Geo + 10 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch3: {\r\n name: \"Charm Notch #4\",\r\n spoiler: \"Salubra: 900 Geo + 18 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch4: {\r\n name: \"Charm Notch #5\",\r\n spoiler: \"Salubra: 1400 Geo + 25 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n colosseumBronzeCompleted: {\r\n name: \"Charm Notch #6\",\r\n spoiler: \"Colosseum of Fools: Trial of the Warrior\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n notchFogCanyon: {\r\n name: \"Charm Notch #7\",\r\n spoiler: \"Fog Canyon: explosive eggs room\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n gotGrimmNotch: {\r\n name: \"Charm Notch #8\",\r\n spoiler: \"Dirtmouth: Troupe Leader Grimm\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Grubs ############################################## */\r\n\r\n /*grubs: {\r\n h2: \"Grubs\",\r\n id: \"hk-grubs\",\r\n description: `Creatures found trapped in glass jars throughout Hallownest. They can be freed from their jar after which the Grubfather grants a reward for each Grub that is saved. \r\n Note: Due to a bug in recent versions of Hollow Knight, Grubs #33 and #34 (The Collector/Tower of Love) are not marked as released correctly in the save file. As a workaround for this bug, when Grub #32 is detected as released, #33 and #34 are automatically marked as released too in this app.`,\r\n percent: 0,\r\n maxPercent: 46,\r\n entries: {\r\n grub1: {\r\n name: \"Grub #1\",\r\n spoiler: \"Forgotten Crossroads: Acid Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_35\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub2: {\r\n name: \"Grub #2\",\r\n spoiler: \"Forgotten Crossroads: Left of Dark Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub3: {\r\n name: \"Grub #3\",\r\n spoiler: \"Forgotten Crossroads: Above Ancestral Mound\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_05\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub4: {\r\n name: \"Grub #4\",\r\n spoiler: \"Forgotten Crossroads: Husk Guard Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_48\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub5: {\r\n name: \"Grub #5\",\r\n spoiler: \"Forgotten Crossroads: Spikes Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_31\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub6: {\r\n name: \"Grub #6\",\r\n spoiler: \"Greenpath: Cornifer Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_06\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub7: {\r\n name: \"Grub #7\",\r\n spoiler: \"Greenpath: Outside Hunter\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_07\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub8: {\r\n name: \"Grub #8\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_21\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub9: {\r\n name: \"Grub #9\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_28\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub10: {\r\n name: \"Grub #10\",\r\n spoiler: \"Fungal Wastes: Cornifer Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus2_18\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub11: {\r\n name: \"Grub #11\",\r\n spoiler: \"City of Tears: Above Lemm\",\r\n id: \"Grub Bottle (1)\",\r\n sceneName: \"Ruins1_05\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub12: {\r\n name: \"Grub #12\",\r\n spoiler: \"Crystal Peak: Left of Dark Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_04\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub13: {\r\n name: \"Grub #13\",\r\n spoiler: \"Crystal Peak: Spiked Conveyor Belts\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub14: {\r\n name: \"Grub #14\",\r\n spoiler: \"Crystal Peak: Crystal Heart Gauntlet\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_31\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub15: {\r\n name: \"Grub #15\",\r\n spoiler: \"Crystal Peak: Crushers Below Top Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_19\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub16: {\r\n name: \"Grub #16\",\r\n spoiler: \"City of Tears: Soul Master Rewards Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins1_32\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub17: {\r\n name: \"Grub #17\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub18: {\r\n name: \"Grub #18\",\r\n spoiler: \"City of Tears: Guarded House Room in Main Hub\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins_House_01\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub19: {\r\n name: \"Grub #19\",\r\n spoiler: \"Crystal Peak: Crystallized Mound\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_35\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub20: {\r\n name: \"Grub #20\",\r\n spoiler: \"Crystal Peak: Down from Dirtmouth entrance\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_16\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub21: {\r\n name: \"Grub #21\",\r\n spoiler: \"Royal Waterways: Top Left Corridor Above Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Waterways_04\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub22: {\r\n name: \"Grub #22\",\r\n spoiler: \"Royal Waterways: Isma's Grove\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Waterways_13\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub23: {\r\n name: \"Grub #23\",\r\n spoiler: \"Ancient Basin: Broken Vessel Top Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Abyss_19\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub24: {\r\n name: \"Grub #24\",\r\n spoiler: \"Ancient Basin: Cloth/Pale Ore Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Abyss_17\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub25: {\r\n name: \"Grub #25\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_24\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub26: {\r\n name: \"Grub #26\",\r\n spoiler: \"Greenpath: Whispering Root Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_13\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub27: {\r\n name: \"Grub #27\",\r\n spoiler: \"Fog Canyon: Teacher's Archives Entrance\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_47\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub28: {\r\n name: \"Grub #28\",\r\n spoiler: \"Queen's Gardens: Main Arena Above Left Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_10\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub29: {\r\n name: \"Grub #29\",\r\n spoiler: \"Queen's Gardens: Near White Lady\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_48\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub30: {\r\n name: \"Grub #30\",\r\n spoiler: \"Queen's Gardens: Upper Room near Greenpath\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_22\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub31: {\r\n name: \"Grub #31\",\r\n spoiler: \"City of Tears: Below King's Station\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins2_07\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub32: {\r\n name: \"Grub #32\",\r\n spoiler: \"City of Tears: The Collector Arena\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub33: {\r\n name: \"Grub #33\",\r\n spoiler: \"City of Tears: The Collector Arena\",\r\n id: \"Grub Bottle (1)\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub34: {\r\n name: \"Grub #34\",\r\n spoiler: \"City of Tears: The Collector Arena\",\r\n id: \"Grub Bottle (2)\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub35: {\r\n name: \"Grub #35\",\r\n spoiler: \"Kingdom's Edge: Below Camp Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_East_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub36: {\r\n name: \"Grub #36\",\r\n spoiler: \"Kingdom's Edge: Below Nailmaster Oro\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_East_14\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub37: {\r\n name: \"Grub #37\",\r\n spoiler: \"Fungal Wastes: Spore Shroom Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus2_20\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub38: {\r\n name: \"Grub #38\",\r\n spoiler: \"City of Tears: Watcher's Spire Fourth Floor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins2_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub39: {\r\n name: \"Grub #39\",\r\n spoiler: \"Deepnest: Right of Fungal Wastes Drop\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_36\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub40: {\r\n name: \"Grub #40\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub41: {\r\n name: \"Grub #41\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_31\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub42: {\r\n name: \"Grub #42\",\r\n spoiler: \"Deepnest: Whispering Root Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_39\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub43: {\r\n name: \"Grub #43\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub44: {\r\n name: \"Grub #44\",\r\n spoiler: \"Royal Waterways: Kingdom's Edge Acid Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Waterways_14\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub45: {\r\n name: \"Grub #45\",\r\n spoiler: \"The Hive: Kingdom's Edge Secret\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Hive_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub46: {\r\n name: \"Grub #46\",\r\n spoiler: \"The Hive: Mask Shard Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Hive_04\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n },\r\n },*/\r\n\r\n\r\n /* ###################################### Collectibles -> Whispering Roots ############################################## */\r\n\r\n /*whisperingRoots: {\r\n h2: \"Whispering Roots\",\r\n id: \"hk-whispering-roots\",\r\n description: `There are 15 Whispering Roots in the game, containing a total of 482 Essence. Whispering Root Pin from Iselda reveals the locations of every Whispering Root in an area after that area's Map has been purchased.`,\r\n percent: 0,\r\n maxPercent: 15,\r\n entries: {\r\n whisperingRoot1: {\r\n name: \"Whispering Root #1: 29 Orbs\",\r\n spoiler: \"Forgotten Crossroads: Right of Grubfather\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Crossroads_07\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot2: {\r\n name: \"Whispering Root #2: 42 Orbs\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot3: {\r\n name: \"Whispering Root #3: 18 Orbs\",\r\n spoiler: \"Fungal Wastes: Above Mantis Village\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus2_17\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot4: {\r\n name: \"Whispering Root #4: 28 Orbs\",\r\n spoiler: \"City of Tears: Below Stag Station\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Ruins1_17\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot5: {\r\n name: \"Whispering Root #5: 46 Orbs\",\r\n spoiler: \"Howling Cliffs: Big Main Area\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot6: {\r\n name: \"Whispering Root #6: 21 Orbs\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Big Area\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Mines_23\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot7: {\r\n name: \"Whispering Root #7: 20 Orbs\",\r\n spoiler: \"Resting Grounds: Right of Seer, Main Area\",\r\n id: \"Dream Plant\",\r\n sceneName: \"RestingGrounds_05\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot8: {\r\n name: \"Whispering Root #8: 34 Orbs\",\r\n spoiler: \"Resting Grounds: Spirit's Glade\",\r\n id: \"Dream Plant\",\r\n sceneName: \"RestingGrounds_08\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot9: {\r\n name: \"Whispering Root #9: 35 Orbs\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Abyss_01\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot10: {\r\n name: \"Whispering Root #10: 44 Orbs\",\r\n spoiler: \"Greenpath: Right of Queen's Gardens\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus1_13\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot11: {\r\n name: \"Whispering Root #11: 20 Orbs\",\r\n spoiler: \"Fungal Wastes: Left of Leg Eater\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus2_33\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot12: {\r\n name: \"Whispering Root #12: 29 Orbs\",\r\n spoiler: \"Queen's Gardens: Below Right Bench\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus3_11\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot13: {\r\n name: \"Whispering Root #13: 51 Orbs\",\r\n spoiler: \"Kingdom's Edge: Right of Tower of Love\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Deepnest_East_07\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot14: {\r\n name: \"Whispering Root #14: 45 Orbs\",\r\n spoiler: \"Deepnest: Below Queen's Gardens\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Deepnest_39\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot15: {\r\n name: \"Whispering Root #15: 20 Orbs\",\r\n spoiler: \"The Hive: Right of Bench\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Hive_02\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - Wanderer's Journal ############################################## */\r\n\r\n /*relicsWanderersJournal: {\r\n h2: \"Relics - Wanderer's Journal\",\r\n id: \"hk-relics-journal\",\r\n description: `Tablets found commonly throughout Hallownest. They are always found next to corpses that are assumed to be the authors of the journal. Can be sold to Relic Seeker Lemm for 200 Geo. \r\n 14 x 200 = 2800 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 14,\r\n entries: {\r\n wanderersJournal1: {\r\n name: \"Wanderer's Journal #1\",\r\n spoiler: \"Greenpath: Room Above Fog Canyon\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_11\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal2: {\r\n name: \"Wanderer's Journal #2\",\r\n spoiler: \"Greenpath: Right of Stag Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_22\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal3: {\r\n name: \"Wanderer's Journal #3\",\r\n spoiler: \"Fungal Wastes: Below Shrumal Ogres\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_04\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal4: {\r\n name: \"Wanderer's Journal #4\",\r\n spoiler: \"Fungal Wastes: Room Above Mantis Village\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_17\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal5: {\r\n name: \"Wanderer's Journal #5\",\r\n spoiler: \"City of Tears: City Storerooms\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_28\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal6: {\r\n name: \"Wanderer's Journal #6\",\r\n spoiler: \"Howling Cliffs: Main Open Air Area\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal7: {\r\n name: \"Wanderer's Journal #7\",\r\n spoiler: \"Crystal Peak: Right Tall Room\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Mines_20\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal8: {\r\n name: \"Wanderer's Journal #8\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Shiny Item\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal9: {\r\n name: \"Wanderer's Journal #9\",\r\n spoiler: \"City of Tears: Room Above King's Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins2_05\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal10: {\r\n name: \"Wanderer's Journal #10\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Abyss_02\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal11: {\r\n name: \"Wanderer's Journal #11\",\r\n spoiler: \"City of Tears: Pleasure House Elevator\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Ruins_Elevator\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal12: {\r\n name: \"Wanderer's Journal #12\",\r\n spoiler: \"Kingdom's Edge: Whispering Root Area\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_07\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal13: {\r\n name: \"Wanderer's Journal #13\",\r\n spoiler: \"Kingdom's Edge: Camp Bench\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_13\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal14: {\r\n name: \"Wanderer's Journal #14\",\r\n spoiler: \"Kingdom's Edge: Left of Markoth\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_18\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - Hallownest Seal ############################################## */\r\n\r\n /*relicsHallownestSeal: {\r\n h2: \"Relics - Hallownest Seal\",\r\n id: \"hk-relics-seal\",\r\n description: `Official symbols of the Pale King and the Five Great Knights. The seals can be found in various locations throughout the world. Can be sold to Relic Seeker Lemm for 450 Geo. Seal #16 is missable when a player enters the Beast's Den through the secret path without being trapped by using the bench. \r\n 17 x 450 = 7650 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 17,\r\n entries: {\r\n hallownestSeal1: {\r\n name: \"Hallownest Seal #1\",\r\n spoiler: \"Forgotten Crossroads: Inside the Well\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Crossroads_01\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal2: {\r\n name: \"Hallownest Seal #2\",\r\n spoiler: \"Fungal Wastes: Willoh's Room above Queen's Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_34\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal3: {\r\n name: \"Hallownest Seal #3\",\r\n spoiler: \"Greenpath: Acid Bridge\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_10\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal4: {\r\n name: \"Hallownest Seal #4\",\r\n spoiler: \"Fungal Wastes: Right of Queen's Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_03\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal5: {\r\n name: \"Hallownest Seal #5\",\r\n spoiler: \"City of Tears: Open Air Rafters\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_03\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal6: {\r\n name: \"Hallownest Seal #6\",\r\n spoiler: \"City of Tears: Soul Master Rewards Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_32\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal7: {\r\n name: \"Hallownest Seal #7\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal8: {\r\n name: \"Hallownest Seal #8\",\r\n spoiler: \"City of Tears: King's Station Stag Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins2_08\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal9: {\r\n name: \"Hallownest Seal #9\",\r\n spoiler: \"Grubfather: 23 Grubs rescued\",\r\n id: \"Shiny Item Relic2\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal10: {\r\n name: \"Hallownest Seal #10\",\r\n spoiler: \"Fog Canyon: Right Tall Area\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus3_26\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal11: {\r\n name: \"Hallownest Seal #11\",\r\n spoiler: \"Fog Canyon: Lifeblood Cocoon Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus3_30\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal12: {\r\n name: \"Hallownest Seal #12\",\r\n spoiler: \"Queen's Gardens: Outside White Lady\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus3_48\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal13: {\r\n name: \"Hallownest Seal #13\",\r\n spoiler: \"Fungal Wastes: Mantis Lords Reward Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_31\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal14: {\r\n name: \"Hallownest Seal #14\",\r\n spoiler: \"City of Tears: Watcher's Spire Fourth Floor\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins2_03\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal15: {\r\n name: \"Hallownest Seal #15\",\r\n spoiler: \"Deepnest: Room Above Lower Cornifer\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_16\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal16: {\r\n name: \"Hallownest Seal #16 (missable)\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal17: {\r\n name: \"Hallownest Seal #17\",\r\n spoiler: \"Seer: 100 Essence collected\",\r\n id: \"dreamReward1\",\r\n sceneName: \"\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - King's Idol ############################################## */\r\n\r\n /*relicsKingsIdol: {\r\n h2: \"Relics - King's Idol\",\r\n id: \"hk-relics-idol\",\r\n description: `Idols made of a mysterious white metal that depict the Pale King. They are found in various locations throughout Hallownest. Can be sold to Relic Seeker Lemm for 800 Geo. \r\n 8 x 800 = 6400 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 8,\r\n entries: {\r\n kingsIdol1: {\r\n name: \"King's Idol #1\",\r\n spoiler: \"Howling Cliffs: Main Open Air Area\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"King%27s_Idol\"\r\n }, \r\n kingsIdol2: {\r\n name: \"King's Idol #2\",\r\n spoiler: \"Crystal Peak: Cornifer Room, use Monarch Wings\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Mines_30\",\r\n wiki: \"King%27s_Idol\"\r\n }, \r\n kingsIdol3: {\r\n name: \"King's Idol #3\",\r\n spoiler: \"Resting Grounds: Spirit's Glade, Waterfall\",\r\n id: \"Shiny Item\",\r\n sceneName: \"RestingGrounds_08\",\r\n wiki: \"King%27s_Idol\"\r\n }, \r\n kingsIdol4: {\r\n name: \"King's Idol #4\",\r\n spoiler: \"Royal Waterways: Dung Defender's Cave\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Waterways_15\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol5: {\r\n name: \"King's Idol #5\",\r\n spoiler: \"Kingdom's Edge: Great Hopper Below Colosseum Entrance\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_08\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol6: {\r\n name: \"King's Idol #6\",\r\n spoiler: \"Deepnest: Zote Arena Left Side\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_33\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol7: {\r\n name: \"King's Idol #7\",\r\n spoiler: \"Grubfather: 38 Grubs rescued\",\r\n id: \"Shiny Item Relic3\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol8: {\r\n name: \"King's Idol #8\",\r\n spoiler: \"Kingdom's Edge: Pale Lurker Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"GG_Lurker\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - Arcane Egg ############################################## */\r\n\r\n /*relicsArcaneEgg: {\r\n h2: \"Relics - Arcane Egg\",\r\n id: \"hk-relics-egg\",\r\n description: `Jet black stone eggs originating from a civilisation that existed before the Kingdom of Hallownest was founded. Egg #4 is missable when the player will go right instead of left in the Lifeblood Core room in the Abyss and will touch the Charm. Can be sold to Relic Seeker Lemm for 1200 Geo. \r\n 4 x 1200 = 4800 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n arcaneEgg1: {\r\n name: \"Arcane Egg #1\",\r\n spoiler: \"The Abyss: Shade Cloak Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Abyss_10\",\r\n wiki: \"Arcane_Egg\"\r\n },\r\n arcaneEgg2: {\r\n name: \"Arcane Egg #2\",\r\n spoiler: \"Seer: 1200 Essence\",\r\n id: \"dreamReward6\",\r\n sceneName: \"\",\r\n wiki: \"Arcane_Egg\"\r\n },\r\n arcaneEgg3: {\r\n name: \"Arcane Egg #3\",\r\n spoiler: \"The Abyss: Birthplace, requires Kingsoul\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Abyss_15\",\r\n wiki: \"Arcane_Egg\"\r\n },\r\n arcaneEgg4: {\r\n name: \"Arcane Egg #4 (missable)\",\r\n spoiler: \"The Abyss: Lifeblood Core Room\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Abyss_08\",\r\n wiki: \"Abyss#Lifeblood_Chamber\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Rancid Eggs ############################################## */\r\n\r\n /*rancidEggs: {\r\n h2: \"Rancid Eggs\",\r\n id: \"hk-rancid-eggs\",\r\n description: `A collectable item recovered from the corpses of Bluggsacs. Either an already-dead Bluggsac has to be found or a living one has to be killed to make it drop a Rancid Egg. A certain NPC in the game may be very interested in these... Egg #16 is missable when a player enters the Beast's Den through the secret path without being trapped by using the bench.`,\r\n percent: 0,\r\n maxPercent: 21,\r\n entries: {\r\n rancidEgg1: {\r\n name: \"Rancid Egg #1\",\r\n spoiler: \"Fungal Wastes: Fungal Core Upper Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_29\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg2: {\r\n name: \"Rancid Egg #2\",\r\n spoiler: \"City of Tears: Room Above Lemm\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_05\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg3: {\r\n name: \"Rancid Egg #3\",\r\n spoiler: \"Crystal Peak: Dark Bench Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Mines_29\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg4: {\r\n name: \"Rancid Egg #4\",\r\n spoiler: \"Resting Grounds: Blue Lake\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Crossroads_50\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg5: {\r\n name: \"Rancid Egg #5\",\r\n spoiler: \"Crystal Peak: Desolate Dive Entrance\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Mines_01\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg6: {\r\n name: \"Rancid Egg #6\",\r\n spoiler: \"Royal Waterways: Mask Shard Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Waterways_04b\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg7: {\r\n name: \"Rancid Egg #7\",\r\n spoiler: \"Royal Waterways: Hidden Grub Room\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Waterways_04\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg8: {\r\n name: \"Rancid Egg #8\",\r\n spoiler: \"Royal Waterways: Left of Isma's Grove\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Waterways_07\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg9: {\r\n name: \"Rancid Egg #9\",\r\n spoiler: \"Greenpath: Outside Sheo's Hut\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_15\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg10: {\r\n name: \"Rancid Egg #10\",\r\n spoiler: \"Grubfather: 16 Grubs rescued\",\r\n id: \"Shiny Item Rancid Egg\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg11: {\r\n name: \"Rancid Egg #11\",\r\n spoiler: \"Queen's Gardens: Entrance from Fog Canyon\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Fungus3_34\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg12: {\r\n name: \"Rancid Egg #12\",\r\n spoiler: \"City of Tears: Pleasure House Elevator\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins_Elevator\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg13: {\r\n name: \"Rancid Egg #13\",\r\n spoiler: \"Kingdom's Edge: Whispering Root Area\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Deepnest_East_07\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg14: {\r\n name: \"Rancid Egg #14\",\r\n spoiler: \"Deepnest: Weaver's Den\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg15: {\r\n name: \"Rancid Egg #15\",\r\n spoiler: \"Deepnest: Whispering Root Big Area Left Side\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Deepnest_39\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg16: {\r\n name: \"Rancid Egg #16 (missable)\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg17: {\r\n name: \"Rancid Egg #17\",\r\n spoiler: \"Crystal Peak: Right Tall Room\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Mines_20\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg18: {\r\n name: \"Rancid Egg #18\",\r\n spoiler: \"Royal Waterways: Main Bench Area\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Waterways_02\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg19: {\r\n name: \"Rancid Egg #19\",\r\n spoiler: \"Kingdom's Edge: Below Nailmaster Oro\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Deepnest_East_14\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg20: {\r\n name: \"Rancid Egg #20\",\r\n spoiler: \"Sly: 60 Geo\",\r\n id: \"slyRancidEgg\",\r\n sceneName: \"\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg21: {\r\n name: \"Rancid Egg #21\",\r\n spoiler: \"Royal Waterways: Tuk's free Egg\",\r\n spoilerNormal: \"Royal Waterways: Tuk, with Defender's Crest\",\r\n spoilerSteelSoul: \"Royal Waterways: Inspect Tuk\",\r\n idPlayerData: \"tukDungEgg\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Waterways_03\",\r\n wiki: \"Tuk\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Items ############################################## */\r\n\r\n /*items: {\r\n h2: \"Items\",\r\n id: \"hk-items\",\r\n description: `Certain acquirable items, map markers or collectibles in the game that won't fit any specific category. Using custom map pins to mark interesting locations on the map is very useful while playing Hollow Knight. 1440 Geo is needed to buy all map pins from Iselda.`,\r\n percent: 0,\r\n maxPercent: 21,\r\n entries: {\r\n hasQuill: {\r\n name: \"Quill\",\r\n spoiler: \"120 Geo: Iselda's Shop, updates map with explored areas\",\r\n wiki: \"Map_and_Quill#Mapping_Tools\"\r\n },\r\n hasPinBench: {\r\n name: \"Map Pin: Bench\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Bench_(Hollow_Knight)\"\r\n },\r\n hasPinShop: {\r\n name: \"Map Pin: Vendor\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Category:NPCs_(Hollow_Knight)#Merchants\"\r\n },\r\n hasPinCocoon: {\r\n name: \"Map Pin: Lifeblood Cocoon\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Lifeblood_Cocoon\"\r\n },\r\n hasPinSpa: {\r\n name: \"Map Pin: Hot Springs\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Hot_Springs\"\r\n },\r\n hasPinStag: {\r\n name: \"Map Pin: Stag Station\",\r\n spoiler: \"100 Geo: Iselda's Shop, unlock first Station\",\r\n wiki: \"Stag_Station\"\r\n },\r\n hasPinGhost: {\r\n name: \"Map Pin: Warrior's Grave\",\r\n spoiler: \"180 Geo: Iselda's Shop, acquire Dream Nail\",\r\n wiki: \"Warrior_Dreams\"\r\n },\r\n hasPinDreamPlant: {\r\n name: \"Map Pin: Whispering Root\",\r\n spoiler: \"150 Geo: Iselda's Shop, acquire Dream Nail\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n hasPinTram: {\r\n name: \"Map Pin: Tram\",\r\n spoiler: \"100 Geo: Iselda's Shop, acquire Tram Pass\",\r\n wiki: \"Tram\"\r\n },\r\n hasMarker_r: {\r\n name: \"Map Pin: Shell Marker\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasMarker_b: {\r\n name: \"Map Pin: Scarab Marker\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasMarker_y: {\r\n name: \"Map Pin: Token Marker\",\r\n spoiler: \"100 Geo: Iselda's Shop, acquire Mothwing Cloak\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasMarker_w: {\r\n name: \"Map Pin: Gleaming Marker\",\r\n spoiler: \"210 Geo: Iselda, acquire Mothwing Cloak\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasPinGuardian: {\r\n name: \"Map Pin: Dreamers\",\r\n spoiler: \"Resting Grounds: Inspect the shrine\",\r\n wiki: \"Dreamers\"\r\n },\r\n hasPinBlackEgg: {\r\n name: \"Map Pin: Temple of the Black Egg\",\r\n spoiler: \"City of Tears: Inspect fountain\",\r\n wiki: \"Temple_of_the_Black_Egg\"\r\n },\r\n hasPinGrub: {\r\n name: \"Collector's Map\",\r\n spoiler: \"Kingdom's Edge: Tower of Love, Love Key\",\r\n wiki: \"Map_and_Quill#The_Collector's_Map\"\r\n },\r\n cityCrest: {\r\n name: \"City Crest\",\r\n spoiler: \"Forgotten Crossroads: False Knight Reward\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Crossroads_10\",\r\n wiki: \"City_Crest\"\r\n },\r\n hasDreamGate: {\r\n name: \"Dreamgate\",\r\n spoiler: \"Seer: 900 Essence\",\r\n wiki: \"Dreamgate\"\r\n },\r\n fragileGreed_unbreakable: {\r\n name: \"Unbreakable Greed\",\r\n spoiler: \"Divine: Fragile Greed + 9000 Geo\",\r\n wiki: \"Divine#Unbreakable_Charms\"\r\n },\r\n fragileHealth_unbreakable: {\r\n name: \"Unbreakable Heart\",\r\n spoiler: \"Divine: Fragile Heart + 12000 Geo\",\r\n wiki: \"Divine#Unbreakable_Charms\"\r\n },\r\n fragileStrength_unbreakable: {\r\n name: \"Unbreakable Strength\",\r\n spoiler: \"Divine: Fragile Strength + 15000 Geo\",\r\n wiki: \"Divine#Unbreakable_Charms\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Geo Caches -> Geo Chests ############################################## */\r\n\r\n /*geoChests: {\r\n h2: \"Geo Chests\",\r\n id: \"hk-geo-chests\",\r\n description: `All Geo Chests in the game, including one empty one and one with 1 Geo. A total of 2380 Geo can be collected from Geo Chests. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Chests.`,\r\n percent: 0,\r\n maxPercent: 14,\r\n entries: {\r\n chest1: {\r\n name: \"Chest #1: 200 Geo\",\r\n spoiler: \"Forgotten Crossroads: False Knight Reward\",\r\n id: \"Chest\",\r\n sceneName: \"Crossroads_10\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest2: {\r\n name: \"Chest #2: 1 Geo\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell Room\",\r\n id: \"Chest\",\r\n sceneName: \"Fungus1_28\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest3: {\r\n name: \"Chest #3: 78 Geo\",\r\n spoiler: \"Crystal Peak: Crushers Room\",\r\n id: \"Chest\",\r\n sceneName: \"Mines_37\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest4: {\r\n name: \"Chest #4: 380 Geo\",\r\n spoiler: \"City of Tears: Soul Master Reward\",\r\n id: \"Chest\",\r\n sceneName: \"Ruins1_32\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest5: {\r\n name: \"Chest #5: 150 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Chest\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest6: {\r\n name: \"Chest #6: 85 Geo\",\r\n spoiler: \"Greenpath: Whispering Root Room\",\r\n id: \"Chest\",\r\n sceneName: \"Fungus1_13\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest7: {\r\n name: \"Chest #7: 620 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Lords Reward\",\r\n id: \"Mantis Chest (2)\",\r\n sceneName: \"Fungus2_31\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest8: {\r\n name: \"Chest #8: 655 Geo\",\r\n spoiler: \"City of Tears: Watcher Knight Reward\",\r\n id: \"Chest\",\r\n sceneName: \"Ruins2_03\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest9: {\r\n name: \"Chest #9: 160 Geo\",\r\n spoiler: \"Deepnest: Weaver's Den, Secret Room\",\r\n id: \"Chest\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest10: {\r\n name: \"Chest #10: 8 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest11: {\r\n name: \"Chest #11: 8 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (1)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest12: {\r\n name: \"Chest #12: 25 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (2)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest13: {\r\n name: \"Chest #13: 0 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (3)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest14: {\r\n name: \"Chest #14: 10 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (4)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Geo Caches -> Geo Rocks ############################################## */\r\n\r\n /*geoRocks: {\r\n h2: \"Geo Rocks\",\r\n id: \"hk-geo-rocks\",\r\n description: `All Geo Rocks that can be found in the game. Only fully destroyed Geo Rocks are counted. Partially hit Geo Rocks won't be counted. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Rocks. A total of 5074 Geo can be collected from Geo Rocks (credit: Araraura).`,\r\n percent: 0,\r\n maxPercent: 207,\r\n entries: {\r\n geoRock1: {\r\n name: \"Geo Rock #1: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 4\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock2: {\r\n name: \"Geo Rock #2: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock3: {\r\n name: \"Geo Rock #3: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 3\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock4: {\r\n name: \"Geo Rock #4: 18 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock5: {\r\n name: \"Geo Rock #5: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 5\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock6: {\r\n name: \"Geo Rock #6: 19 Geo\",\r\n spoiler: \"Forgotten Crossroads: Well\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock7: {\r\n name: \"Geo Rock #7: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock8: {\r\n name: \"Geo Rock #8: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n id: \"Geo Rock 1 (2)\",\r\n sceneName: \"Crossroads_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock9: {\r\n name: \"Geo Rock #9: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Crossroads_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock10: {\r\n name: \"Geo Rock #10: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Corridor to Acid Grub\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock11: {\r\n name: \"Geo Rock #11: 10 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1 (3)\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock12: {\r\n name: \"Geo Rock #12: 10 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1 (2)\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock13: {\r\n name: \"Geo Rock #13: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock14: {\r\n name: \"Geo Rock #14: 10 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock15: {\r\n name: \"Geo Rock #15: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock16: {\r\n name: \"Geo Rock #16: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock17: {\r\n name: \"Geo Rock #17: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n id: \"Geo Rock 3\",\r\n sceneName: \"Crossroads_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock18: {\r\n name: \"Geo Rock #18: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Mask Shard\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock19: {\r\n name: \"Geo Rock #19: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Mask Shard\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock20: {\r\n name: \"Geo Rock #20: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Right of Mask Shard\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_42\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock21: {\r\n name: \"Geo Rock #21: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Right of Mask Shard\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_42\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock22: {\r\n name: \"Geo Rock #22: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Before Gruz Mother\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock23: {\r\n name: \"Geo Rock #23: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Outside False Knight\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock24: {\r\n name: \"Geo Rock #24: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Mines_33\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock25: {\r\n name: \"Geo Rock #25: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Mines_33\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock26: {\r\n name: \"Geo Rock #26: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n id: \"Geo Rock 2 (2)\",\r\n sceneName: \"Mines_33\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock27: {\r\n name: \"Geo Rock #27: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Above Lever\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock28: {\r\n name: \"Geo Rock #28: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Central Grub\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock29: {\r\n name: \"Geo Rock #29: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Outside Tram\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_27\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock30: {\r\n name: \"Geo Rock #30: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Tram\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_46\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock31: {\r\n name: \"Geo Rock #31: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: False Knight Arena\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock32: {\r\n name: \"Geo Rock #32: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock33: {\r\n name: \"Geo Rock #33: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock34: {\r\n name: \"Geo Rock #34: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock35: {\r\n name: \"Geo Rock #35: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock36: {\r\n name: \"Geo Rock #36: 26 Geo\",\r\n spoiler: \"Greenpath: Entrance\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock37: {\r\n name: \"Geo Rock #37: 26 Geo\",\r\n spoiler: \"Greenpath: Waterfall Bench\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_01b\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock38: {\r\n name: \"Geo Rock #38: 26 Geo\",\r\n spoiler: \"Greenpath: First Hornet Sighting\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock39: {\r\n name: \"Geo Rock #39: 26 Geo\",\r\n spoiler: \"Greenpath: First Hornet Sighting\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock40: {\r\n name: \"Geo Rock #40: 26 Geo\",\r\n spoiler: \"Greenpath: Outside Hunter\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock41: {\r\n name: \"Geo Rock #41: 26 Geo\",\r\n spoiler: \"Greenpath: Above Sanctuary Bench\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock42: {\r\n name: \"Geo Rock #42: 26 Geo\",\r\n spoiler: \"Greenpath: Acid Bridge\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock43: {\r\n name: \"Geo Rock #43: 26 Geo\",\r\n spoiler: \"Greenpath: Outside Stag Station\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_22\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock44: {\r\n name: \"Geo Rock #44: 26 Geo\",\r\n spoiler: \"Greenpath: Outside Stag Station\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_22\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock45: {\r\n name: \"Geo Rock #45: 26 Geo\",\r\n spoiler: \"Greenpath: Toll\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock46: {\r\n name: \"Geo Rock #46: 15 Geo\",\r\n spoiler: \"Greenpath: Toll\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Fungus1_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock47: {\r\n name: \"Geo Rock #47: 15 Geo\",\r\n spoiler: \"Greenpath: Toll\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Fungus1_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock48: {\r\n name: \"Geo Rock #48: 26 Geo\",\r\n spoiler: \"Greenpath: Storerooms\",\r\n id: \"Geo Rock Green Path 01 (2)\",\r\n sceneName: \"Fungus1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock49: {\r\n name: \"Geo Rock #49: 26 Geo\",\r\n spoiler: \"Greenpath: Storerooms\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock50: {\r\n name: \"Geo Rock #50: 26 Geo\",\r\n spoiler: \"Greenpath: Storerooms\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock51: {\r\n name: \"Geo Rock #51: 15 Geo\",\r\n spoiler: \"Greenpath: Outside Thorns\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Fungus1_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock52: {\r\n name: \"Geo Rock #52: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Fungus1_28\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock53: {\r\n name: \"Geo Rock #53: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell\",\r\n id: \"Geo Rock 1 (2)\",\r\n sceneName: \"Fungus1_28\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock54: {\r\n name: \"Geo Rock #54: 30 Geo\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Fungus1_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock55: {\r\n name: \"Geo Rock #55: 30 Geo\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Geo Rock Green Path 02 (1)\",\r\n sceneName: \"Fungus1_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock56: {\r\n name: \"Geo Rock #56: 30 Geo\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Geo Rock Green Path 02 (2)\",\r\n sceneName: \"Fungus1_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock57: {\r\n name: \"Geo Rock #57: 26 Geo\",\r\n spoiler: \"Greenpath: Hornet\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock58: {\r\n name: \"Geo Rock #58: 26 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_29\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock59: {\r\n name: \"Geo Rock #59: 26 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger Corridor\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock60: {\r\n name: \"Geo Rock #60: 26 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger Corridor\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock61: {\r\n name: \"Geo Rock #61: 30 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger Corridor\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Fungus1_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock62: {\r\n name: \"Geo Rock #62: 26 Geo\",\r\n spoiler: \"Fog Canyon: Queen's Gardens Acid Entrance\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_03\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock63: {\r\n name: \"Geo Rock #63: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Below Shrumal Ogres\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock64: {\r\n name: \"Geo Rock #64: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 01 (1)\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock65: {\r\n name: \"Geo Rock #65: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock66: {\r\n name: \"Geo Rock #66: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 02 (1)\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock67: {\r\n name: \"Geo Rock #67: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 02 (2)\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock68: {\r\n name: \"Geo Rock #68: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Journal\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_52\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock69: {\r\n name: \"Geo Rock #69: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Journal\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_52\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock70: {\r\n name: \"Geo Rock #70: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Outside Elder Hu\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock71: {\r\n name: \"Geo Rock #71: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Left Of Pilgrim's Way\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock72: {\r\n name: \"Geo Rock #72: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Right of Bouncy Mushroom Grub\",\r\n id: \"Geo Rock Fung 02\",\r\n sceneName: \"Fungus2_11\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock73: {\r\n name: \"Geo Rock #73: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Right of Bouncy Mushroom Grub\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_11\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock74: {\r\n name: \"Geo Rock #74: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Bretta Bench\",\r\n id: \"Geo Rock Fung 01 (1)\",\r\n sceneName: \"Fungus2_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock75: {\r\n name: \"Geo Rock #75: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Bretta Bench\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock76: {\r\n name: \"Geo Rock #76: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Bretta Bench\",\r\n id: \"Geo Rock Fung 02\",\r\n sceneName: \"Fungus2_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock77: {\r\n name: \"Geo Rock #77: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2 (2)\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock78: {\r\n name: \"Geo Rock #78: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock79: {\r\n name: \"Geo Rock #79: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2 (3)\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock80: {\r\n name: \"Geo Rock #80: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock81: {\r\n name: \"Geo Rock #81: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock82: {\r\n name: \"Geo Rock #82: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Lords\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Fungus2_15\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock83: {\r\n name: \"Geo Rock #83: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Lords\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Fungus2_15\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock84: {\r\n name: \"Geo Rock #84: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Fungal Core Upper\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_29\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock85: {\r\n name: \"Geo Rock #85: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Pilgrim's Way\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Fungus2_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock86: {\r\n name: \"Geo Rock #86: 30 Geo\",\r\n spoiler: \"City of Tears: Rafters\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock87: {\r\n name: \"Geo Rock #87: 30 Geo\",\r\n spoiler: \"City of Tears: Lemm Room\",\r\n id: \"Geo Rock City 1 (1)\",\r\n sceneName: \"Ruins1_05b\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock88: {\r\n name: \"Geo Rock #88: 30 Geo\",\r\n spoiler: \"City of Tears: Rancid Egg Above Lemm\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins1_05c\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock89: {\r\n name: \"Geo Rock #89: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Vessel Fragment\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock90: {\r\n name: \"Geo Rock #90: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Brooding Mawlek Middle\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_36\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock91: {\r\n name: \"Geo Rock #91: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Gorb\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Cliffs_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock92: {\r\n name: \"Geo Rock #92: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Gorb\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Cliffs_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock93: {\r\n name: \"Geo Rock #93: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (2)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock94: {\r\n name: \"Geo Rock #94: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock95: {\r\n name: \"Geo Rock #95: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (4)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock96: {\r\n name: \"Geo Rock #96: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (3)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock97: {\r\n name: \"Geo Rock #97: 24 Geo\",\r\n spoiler: \"Crystal Peak: Dark Entrance\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock98: {\r\n name: \"Geo Rock #98: 15 Geo\",\r\n spoiler: \"Crystal Peak: Dark Entrance\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Mines_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock99: {\r\n name: \"Geo Rock #99: 22 Geo\",\r\n spoiler: \"Crystal Peak: Dark Entrance\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock100: {\r\n name: \"Geo Rock #100: 16 Geo\",\r\n spoiler: \"Crystal Peak: Conveyor Belts Entrance\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock101: {\r\n name: \"Geo Rock #101: 16 Geo\",\r\n spoiler: \"Crystal Peak: Conveyor Belts Entrance\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock102: {\r\n name: \"Geo Rock #102: 22 Geo\",\r\n spoiler: \"Crystal Peak: Above Spike Grub\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock103: {\r\n name: \"Geo Rock #103: 24 Geo\",\r\n spoiler: \"Crystal Peak: East Tall\",\r\n id: \"Geo Rock Mine (4)\",\r\n sceneName: \"Mines_20\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock104: {\r\n name: \"Geo Rock #104: 24 Geo\",\r\n spoiler: \"Crystal Peak: East Tall\",\r\n id: \"Geo Rock Mine (3)\",\r\n sceneName: \"Mines_20\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock105: {\r\n name: \"Geo Rock #105: 24 Geo\",\r\n spoiler: \"Crystal Peak: East Tall\",\r\n id: \"Geo Rock Mine (2)\",\r\n sceneName: \"Mines_20\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock106: {\r\n name: \"Geo Rock #106: 24 Geo\",\r\n spoiler: \"Crystal Peak: Chest Crushers\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock107: {\r\n name: \"Geo Rock #107: 24 Geo\",\r\n spoiler: \"Crystal Peak: Chest Crushers\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock108: {\r\n name: \"Geo Rock #108: 30 Geo\",\r\n spoiler: \"Royal Waterways: Entrance\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock109: {\r\n name: \"Geo Rock #109: 26 Geo\",\r\n spoiler: \"Royal Waterways: Entrance\",\r\n id: \"Geo Rock City 1 (1)\",\r\n sceneName: \"Waterways_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock110: {\r\n name: \"Geo Rock #110: 30 Geo\",\r\n spoiler: \"Royal Waterways: Mask Shard Room\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_04b\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock111: {\r\n name: \"Geo Rock #111: 15 Geo\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Abyss_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock112: {\r\n name: \"Geo Rock #112: 15 Geo\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Abyss_01\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock113: {\r\n name: \"Geo Rock #113: 15 Geo\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Abyss_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock114: {\r\n name: \"Geo Rock #114: 15 Geo\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Abyss_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock115: {\r\n name: \"Geo Rock #115: 15 Geo\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Abyss_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock116: {\r\n name: \"Geo Rock #116: 15 Geo\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Abyss_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock117: {\r\n name: \"Geo Rock #117: 30 Geo\",\r\n spoiler: \"City of Tears: King's Station\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins2_06\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock118: {\r\n name: \"Geo Rock #118: 30 Geo\",\r\n spoiler: \"City of Tears: Above King's Station\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins2_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock119: {\r\n name: \"Geo Rock #119: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Whispering Root\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock120: {\r\n name: \"Geo Rock #120: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Whispering Root\",\r\n id: \"Geo Rock Outskirts (1)\",\r\n sceneName: \"Deepnest_East_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock121: {\r\n name: \"Geo Rock #121: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Outside Nailmaster Oro\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_06\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock122: {\r\n name: \"Geo Rock #122: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Outside Nailmaster Oro\",\r\n id: \"Geo Rock Outskirts (1)\",\r\n sceneName: \"Deepnest_East_06\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock123: {\r\n name: \"Geo Rock #123: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Bardoon\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock124: {\r\n name: \"Geo Rock #124: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Great Hopper King's Idol\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock125: {\r\n name: \"Geo Rock #125: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Pale Lurker Arena\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"GG_Lurker\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock126: {\r\n name: \"Geo Rock #126: 30 Geo\",\r\n spoiler: \"Fog Canyon: Overgrown Mound\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Room_Fungus_Shaman\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock127: {\r\n name: \"Geo Rock #127: 30 Geo\",\r\n spoiler: \"City of Tears: Soul Master Rewards Room\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins1_32\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock128: {\r\n name: \"Geo Rock #128: 30 Geo\",\r\n spoiler: \"Royal Waterways: Outside Flukemarm\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock129: {\r\n name: \"Geo Rock #129: 30 Geo\",\r\n spoiler: \"Royal Waterways: Flukemunga Corridor\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"GG_Pipeway\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock130: {\r\n name: \"Geo Rock #130: 22 Geo\",\r\n spoiler: \"Royal Waterways: Fluke Hermit Room\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Room_GG_Shortcut\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock131: {\r\n name: \"Geo Rock #131: 17 Geo\",\r\n spoiler: \"Royal Waterways: Fluke Hermit Room\",\r\n id: \"Geo Rock Fung 02 (1)\",\r\n sceneName: \"Room_GG_Shortcut\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock132: {\r\n name: \"Geo Rock #132: 25 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Geo Rock Grave 02 (1)\",\r\n sceneName: \"RestingGrounds_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock133: {\r\n name: \"Geo Rock #133: 25 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Geo Rock Grave 02\",\r\n sceneName: \"RestingGrounds_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock134: {\r\n name: \"Geo Rock #134: 25 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Geo Rock Grave 01\",\r\n sceneName: \"RestingGrounds_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock135: {\r\n name: \"Geo Rock #135: 24 Geo\",\r\n spoiler: \"Crystal Peak: Crystal Heart Gauntlet\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock136: {\r\n name: \"Geo Rock #136: 24 Geo\",\r\n spoiler: \"Crystal Peak: Grub Mimic\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock137: {\r\n name: \"Geo Rock #137: 35 Geo\",\r\n spoiler: \"Ancient Basin: Corridor to Broken Vessel\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock138: {\r\n name: \"Geo Rock #138: 35 Geo\",\r\n spoiler: \"The Abyss: Main/Core Area\",\r\n id: \"Geo Rock Abyss (1)\",\r\n sceneName: \"Abyss_06_Core\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock139: {\r\n name: \"Geo Rock #139: 35 Geo\",\r\n spoiler: \"The Abyss: Main/Core Area\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_06_Core\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock140: {\r\n name: \"Geo Rock #140: 35 Geo\",\r\n spoiler: \"The Abyss: Main/Core Area\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_06_Core\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock141: {\r\n name: \"Geo Rock #141: 35 Geo\",\r\n spoiler: \"Ancient Basin: Broken Vessel Grub\",\r\n id: \"Geo Rock Abyss (1)\",\r\n sceneName: \"Abyss_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock142: {\r\n name: \"Geo Rock #142: 35 Geo\",\r\n spoiler: \"Ancient Basin: Broken Vessel Grub\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock143: {\r\n name: \"Geo Rock #143: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock144: {\r\n name: \"Geo Rock #144: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (4)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"4\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock145: {\r\n name: \"Geo Rock #145: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (2)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"4\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock146: {\r\n name: \"Geo Rock #146: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock147: {\r\n name: \"Geo Rock #147: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (3)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"4\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock148: {\r\n name: \"Geo Rock #148: 30 Geo\",\r\n spoiler: \"City of Tears: Watcher's Spire Second Floor\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins2_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock149: {\r\n name: \"Geo Rock #149: 30 Geo\",\r\n spoiler: \"Fog Canyon: East Tall\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_26\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock150: {\r\n name: \"Geo Rock #150: 26 Geo\",\r\n spoiler: \"Queen's Gardens: Main Arena\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock151: {\r\n name: \"Geo Rock #151: 30 Geo\",\r\n spoiler: \"Queen's Gardens: Outside White Lady\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Fungus3_48\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock152: {\r\n name: \"Geo Rock #152: 27 Geo\",\r\n spoiler: \"Queen's Gardens: Moss Prophet Room\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus3_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock153: {\r\n name: \"Geo Rock #153: 30 Geo\",\r\n spoiler: \"Queen's Gardens: Moss Prophet Room\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock154: {\r\n name: \"Geo Rock #154: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Deepnest Fall\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Deepnest_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock155: {\r\n name: \"Geo Rock #155: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Deepnest Fall\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Deepnest_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock156: {\r\n name: \"Geo Rock #156: 26 Geo\",\r\n spoiler: \"Queen's Gardens: Corridor To Deepnest\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Deepnest_43\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock157: {\r\n name: \"Geo Rock #157: 26 Geo\",\r\n spoiler: \"Queen's Gardens: Corridor To Deepnest\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Deepnest_43\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock158: {\r\n name: \"Geo Rock #158: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Fungal Core Lower\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_30\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock159: {\r\n name: \"Geo Rock #159: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Fungal Core Lower\",\r\n id: \"Geo Rock Fung 01 (1)\",\r\n sceneName: \"Fungus2_30\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock160: {\r\n name: \"Geo Rock #160: 15 Geo\",\r\n spoiler: \"Deepnest: Lower Cornifer\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Fungus2_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock161: {\r\n name: \"Geo Rock #161: 15 Geo\",\r\n spoiler: \"Deepnest: Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Fungus2_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock162: {\r\n name: \"Geo Rock #162: 15 Geo\",\r\n spoiler: \"Deepnest: Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Fungus2_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock163: {\r\n name: \"Geo Rock #163: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (4)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock164: {\r\n name: \"Geo Rock #164: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (3)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock165: {\r\n name: \"Geo Rock #165: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock166: {\r\n name: \"Geo Rock #166: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock167: {\r\n name: \"Geo Rock #167: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock168: {\r\n name: \"Geo Rock #168: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Grub Mimics\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_02\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock169: {\r\n name: \"Geo Rock #169: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Grub Mimics\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_02\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock170: {\r\n name: \"Geo Rock #170: 15 Geo\",\r\n spoiler: \"Deepnest: Whispering Root\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock171: {\r\n name: \"Geo Rock #171: 15 Geo\",\r\n spoiler: \"Deepnest: Whispering Root\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock172: {\r\n name: \"Geo Rock #172: 15 Geo\",\r\n spoiler: \"Deepnest: Whispering Root\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock173: {\r\n name: \"Geo Rock #173: 15 Geo\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_03\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock174: {\r\n name: \"Geo Rock #174: 15 Geo\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock175: {\r\n name: \"Geo Rock #175: 15 Geo\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_03\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock176: {\r\n name: \"Geo Rock #176: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Galien\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_35\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock177: {\r\n name: \"Geo Rock #177: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Galien\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_35\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock178: {\r\n name: \"Geo Rock #178: 15 Geo\",\r\n spoiler: \"Deepnest: Corridor to Tram\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock179: {\r\n name: \"Geo Rock #179: 15 Geo\",\r\n spoiler: \"Deepnest: Corridor to Tram\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock180: {\r\n name: \"Geo Rock #180: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Left of The Hive\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_East_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock181: {\r\n name: \"Geo Rock #181: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Left of The Hive\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_East_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock182: {\r\n name: \"Geo Rock #182: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Above The Hive\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_East_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock183: {\r\n name: \"Geo Rock #183: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Above The Hive\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_East_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock184: {\r\n name: \"Geo Rock #184: 30 Geo\",\r\n spoiler: \"Royal Waterways: Left of Isma's Grove\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock185: {\r\n name: \"Geo Rock #185: 56 Geo\",\r\n spoiler: \"The Hive: Outside Grub\",\r\n id: \"Geo Rock Hive (2)\",\r\n sceneName: \"Hive_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock186: {\r\n name: \"Geo Rock #186: 56 Geo\",\r\n spoiler: \"The Hive: Outside Grub\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock187: {\r\n name: \"Geo Rock #187: 56 Geo\",\r\n spoiler: \"The Hive: Outside Grub\",\r\n id: \"Geo Rock Hive (1)\",\r\n sceneName: \"Hive_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock188: {\r\n name: \"Geo Rock #188: 56 Geo\",\r\n spoiler: \"The Hive: Entrance\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock189: {\r\n name: \"Geo Rock #189: 56 Geo\",\r\n spoiler: \"The Hive: Whispering Root\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock190: {\r\n name: \"Geo Rock #190: 56 Geo\",\r\n spoiler: \"The Hive: Whispering Root\",\r\n id: \"Geo Rock Hive (2)\",\r\n sceneName: \"Hive_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock191: {\r\n name: \"Geo Rock #191: 56 Geo\",\r\n spoiler: \"The Hive: Whispering Root\",\r\n id: \"Geo Rock Hive (1)\",\r\n sceneName: \"Hive_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock192: {\r\n name: \"Geo Rock #192: 56 Geo\",\r\n spoiler: \"The Hive: Mask Shard Room\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock193: {\r\n name: \"Geo Rock #193: 56 Geo\",\r\n spoiler: \"The Hive: Mask Shard Room\",\r\n id: \"Geo Rock Hive (1)\",\r\n sceneName: \"Hive_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock194: {\r\n name: \"Geo Rock #194: 15 Geo\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock195: {\r\n name: \"Geo Rock #195: 15 Geo\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock196: {\r\n name: \"Geo Rock #196: 15 Geo\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_31\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock197: {\r\n name: \"Geo Rock #197: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (3)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock198: {\r\n name: \"Geo Rock #198: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (4)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock199: {\r\n name: \"Geo Rock #199: 20 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (5)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock200: {\r\n name: \"Geo Rock #200: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock201: {\r\n name: \"Geo Rock #201: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock202: {\r\n name: \"Geo Rock #202: 30 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (7)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock203: {\r\n name: \"Geo Rock #203: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock204: {\r\n name: \"Geo Rock #204: 20 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (6)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock205: {\r\n name: \"Geo Rock #205: 30 Geo\",\r\n spoiler: \"City of Tears: Pleasure House Elevator\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins_Elevator\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock206: {\r\n name: \"Geo Rock #206: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Near 420 Geo Rock\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_17\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock207: {\r\n name: \"Geo Rock #207: 420 Geo\",\r\n spoiler: \"Kingdom's Edge\",\r\n id: \"Giant Geo Egg\",\r\n sceneName: \"Deepnest_East_17\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Secrets -> World Interactions ############################################## */\r\n\r\n /*worldInteractions: {\r\n h2: \"World Interactions\",\r\n id: \"hk-world-interactions\",\r\n description: `Certain interactions the player can make with NPCs in the game or world objects. All these here don't count towards either 112% Game Completion or Achievements.`,\r\n entries: {\r\n unlockedCompletionRate: {\r\n name: \"World Sense Ability\",\r\n spoiler: \"Temple of the Black Egg: Lore Tablet\",\r\n wiki: \"World_Sense\"\r\n },\r\n spaBugsEncountered: {\r\n name: \"Gossipping Bugs\",\r\n spoiler: \"Forgotten Crossroads: Hot Springs, acquire Mantis Claw\",\r\n wiki: \"Hot_Spring#Forgotten_Crossroads\"\r\n },\r\n jijiDoorUnlocked: {\r\n name: \"Confessor Jiji's Cave Unlocked\",\r\n spoiler: \"Dirtmouth, requires Simple Key\",\r\n wiki: \"Jiji\"\r\n },\r\n bathHouseOpened: {\r\n name: \"Pleasure House Door Unlocked\",\r\n spoiler: \"City of Tears: Right Side Main Hub Area\",\r\n wiki: \"City_of_Tears#Sub-area:_Pleasure_House\"\r\n },\r\n openedWaterwaysManhole: {\r\n name: \"Waterways Manhole Unlocked\",\r\n spoiler: \"City of Tears: below Lemm, use Simple Key\",\r\n wiki: \"Royal_Waterways#How_to_access\"\r\n },\r\n gladeDoorOpened: {\r\n name: \"Spirits' Glade Door Opened\",\r\n spoiler: \"Resting Grounds, Seer: 200 Essence\",\r\n wiki: \"Resting_Grounds#Sub-area:_Spirits'_Glade\"\r\n },\r\n openedCityGate: {\r\n name: \"City of Tears Gate Opened\",\r\n spoiler: \"Fungal Wastes, requires City Crest\",\r\n wiki: \"Fungal_Wastes\"\r\n },\r\n soulSanctumShortcut: {\r\n name: \"Soul Sanctum Shortcut\",\r\n spoiler: \"City of Tears: Cornifer Lift Room, break left wall\",\r\n id: \"Breakable Wall Ruin Lift\",\r\n sceneName: \"Ruins1_31\",\r\n wiki: \"City_of_Tears#Sub-area:_Soul_Sanctum\"\r\n },\r\n waterwaysGate: {\r\n name: \"Waterways Gate Opened\",\r\n spoiler: \"Royal Waterways: Cornifer Room, use lever\",\r\n wiki: \"Royal_Waterways\"\r\n },\r\n watcherChandelier: {\r\n name: \"Chandelier Dropped\",\r\n spoiler: \"City of Tears: Watcher Knights Room, break ceiling\",\r\n wiki: \"Watcher_Knight#In-game_events\"\r\n },\r\n colosseumHiddenHotSpring: {\r\n name: \"Hidden Hot Spring\",\r\n spoiler: \"Colosseum of Fools, break wall right of Bench\",\r\n id: \"Breakable Wall_Silhouette\",\r\n sceneName: \"Room_Colosseum_02\",\r\n wiki: \"Colosseum_of_Fools#Description\"\r\n },\r\n stagEggInspected: {\r\n name: \"Stag Nest Egg Inspected\",\r\n spoiler: \"Howling Cliffs: Top of Stag Nest\",\r\n wiki: \"Howling_Cliffs#Sub-area:_Stag_Nest\"\r\n },\r\n deepnestBridgeCollapsed: {\r\n name: \"Deepnest Entry Bridge Collapsed\",\r\n spoiler: \"Fungal Wastes, left of Spore Shroom\",\r\n wiki: \"Deepnest#How_to_access\"\r\n },\r\n maskmakerUnmasked1: {\r\n name: \"Mask Maker Unmasked\",\r\n spoiler: \"Deepnest, use Desolate Dive on Mask Maker\",\r\n wiki: \"Mask_Maker#In-game_events\"\r\n },\r\n bankerAccountPurchased: {\r\n name: \"Bank Account Opened\",\r\n spoiler: \"100 Geo: Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n millibelleLeft: {\r\n name: \"Banker Disappeared\",\r\n spoiler: \"Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n millibelleCheckedStand: {\r\n name: \"Banker Stand Investigated\",\r\n spoiler: \"Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n bankerSpaMet: {\r\n name: \"Found & Talked to Millibelle\",\r\n spoiler: \"City of Tears: Hot Springs, Simple Key\",\r\n wiki: \"Millibelle\"\r\n },\r\n millibelleReclaimedAllGeo: {\r\n name: \"Reclaimed All Geo\",\r\n spoiler: \"City of Tears: Hot Springs, Millibelle the Thief\",\r\n wiki: \"Millibelle\"\r\n },\r\n elderbugGaveFlower: {\r\n name: \"Delicate Flower: Elderbug\",\r\n spoiler: \"Deliver from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenGodseekerFlower: {\r\n name: \"Delicate Flower: Godseeker\",\r\n spoiler: \"Possible after completing 2 Pantheons\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenOroFlower: {\r\n name: \"Delicate Flower: Nailmaster Oro\",\r\n spoiler: \"D. from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenWhiteLadyFlower: {\r\n name: \"Delicate Flower: White Lady\",\r\n spoiler: \"Deliver from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenEmilitiaFlower: {\r\n name: \"Delicate Flower: Emilitia\",\r\n spoiler: \"Deliver from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Secrets -> Secret Rooms ############################################## */\r\n\r\n /*secretRooms: {\r\n h2: \"Secret Rooms\",\r\n id: \"hk-secret-rooms\",\r\n description: `Certain Secret Rooms in the game. Grimm's Tent Secret is missable when the player will Banish the Troupe or complete the Ritual.`,\r\n entries: {\r\n grimmTentSecretRoom: {\r\n name: \"Grimm's Tent: Secret Room (missable)\",\r\n spoiler: \"Dirtmouth: inside Grimm's Tent\",\r\n id: \"Secret Mask\",\r\n sceneName: \"Grimm_Main_Tent\",\r\n wiki: \"Dirtmouth#The_Grimm_Troupe.27s_Tents\"\r\n },\r\n towerOfLoveSecretRoom: {\r\n name: \"Tower of Love: Secret Room\",\r\n spoiler: \"City of Tears: near The Collector's Map\",\r\n id: \"secret sound_grub room\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Collector#Trivia\"\r\n },\r\n weaversDenSecretRoom1: {\r\n name: \"Weaver's Den: Secret Room #1\",\r\n spoiler: \"Deepnest: inside Weaver's Den\",\r\n id: \"Breakable Wall\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Deepnest#Sub-area:_Weavers.27_Den\"\r\n },\r\n weaversDenSecretRoom2: {\r\n name: \"Weaver's Den: Secret Room #2\",\r\n spoiler: \"Deepnest: inside Weaver's Den\",\r\n id: \"Breakable Wall Waterways\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Deepnest#Sub-area:_Weavers.27_Den\"\r\n },\r\n pathOfPainEntrance: {\r\n name: \"White Palace: Path of Pain Entrance\",\r\n spoiler: \"Break left wall above lift area\",\r\n id: \"Breakable Wall Ruin Lift\",\r\n sceneName: \"White_Palace_06\",\r\n wiki: \"White_Palace#Sub-area:_Path_of_Pain\"\r\n },\r\n killsBindingSeal: {\r\n name: \"White Palace: Path of Pain\",\r\n spoiler: \"Main Secret Area, After Middle Lift\",\r\n wiki: \"White_Palace#Sub-area:_Path_of_Pain\"\r\n },\r\n whitePalaceSecretRoomVisited: {\r\n name: \"White Palace: Secret Room #1\",\r\n spoiler: \"The Pale King's Workshop\",\r\n wiki: \"White_Palace#The_Pale_King.27s_workshop\"\r\n },\r\n whiteLadyRoom: {\r\n name: \"White Palace: Secret Room #2\",\r\n spoiler: \"White Lady's Room, break floor\",\r\n id: \"Quake Floor\",\r\n sceneName: \"White_Palace_09\",\r\n wiki: \"White_Palace#White_Lady.27s_room\"\r\n },\r\n throneRoomLoreTablet: {\r\n name: \"White Palace: Secret Room #3\",\r\n spoiler: \"Throne Room, break right wall\",\r\n id: \"Breakable Wall Waterways\",\r\n sceneName: \"White_Palace_09\",\r\n wiki: \"White_Palace#Throne_room_Lore_Tablet\"\r\n },\r\n \r\n //#52 Quake Floor 🗺️ Palace Caged Lever ⌨️ White_Palace_15\r\n //#53 Breakable Wall Waterways 🗺️ Palace Spike Drop ⌨️ White_Palace_12\r\n //#54 Break Floor 1 🗺️ Palace Spike Drop ⌨️ White_Palace_12\r\n \r\n },\r\n },*/\r\n\r\n /* ###################################### Secrets -> Cornifer's Notes ############################################## */\r\n\r\n /*corniferNotes: {\r\n h2: \"Cornifer's Notes\",\r\n id: \"hk-cornifer-notes\",\r\n description: `Cornifer the Cartographer leaves his note on the ground every time he leaves the current area. The note will be at the same spot where Cornifer was met. He leaves an area once a specific condition from that area was met, like defeating a boss or learning a new ability. After reading a note it will stop glowing and the entry will be marked as completed.`,\r\n entries: {\r\n corniferNote1: {\r\n name: \"Note #1: Forgotten Crossroads\",\r\n spoiler: \"Below Big Gruzzer Room\",\r\n id: \"Shiny\",\r\n sceneName: \"Crossroads_33\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote2: {\r\n name: \"Note #2: Greenpath\",\r\n spoiler: \"Room below the Crossroads entrance\",\r\n id: \"Shiny\",\r\n sceneName: \"Fungus1_06\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote3: {\r\n name: \"Note #3: Fungal Wastes\",\r\n spoiler: \"Right of Queen's Station\",\r\n id: \"Shiny\",\r\n sceneName: \"Fungus2_18\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote4: {\r\n name: \"Note #4: Howling Cliffs\",\r\n spoiler: \"Big Main Area on the left side\",\r\n id: \"Shiny\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote5: {\r\n name: \"Note #5: City of Tears\",\r\n spoiler: \"Toll Bench left of Soul Sanctum\",\r\n id: \"Shiny\",\r\n sceneName: \"Ruins1_31\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote6: {\r\n name: \"Note #6: Crystal Peak\",\r\n spoiler: \"Left of Central Bench\",\r\n id: \"Shiny\",\r\n sceneName: \"Mines_30\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote7: {\r\n name: \"Note #7: Resting Grounds\",\r\n spoiler: \"Near the Stag Station\",\r\n id: \"Shiny\",\r\n sceneName: \"RestingGrounds_09\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote8: {\r\n name: \"Note #8: Royal Waterways\",\r\n spoiler: \"Near Fungal Wastes exit\",\r\n id: \"Shiny\",\r\n sceneName: \"Waterways_09\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote9: {\r\n name: \"Note #9: Ancient Basin\",\r\n spoiler: \"Below the Tram and Fountain\",\r\n id: \"Shiny\",\r\n sceneName: \"Abyss_04\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote10: {\r\n name: \"Note #10: Kingdom's Edge\",\r\n spoiler: \"Below the King's Station entrance\",\r\n id: \"Shiny\",\r\n sceneName: \"Deepnest_East_03\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Game Statistics ################### */\r\n\r\n /*statistics: {\r\n h2: \"Game Statistics\",\r\n id: \"hk-statistics\",\r\n description: \"Dedicated to numbers and stats fans. Everything what the game may not always tell you directly, but what can be read from a save file.\",\r\n entries: {\r\n journalEntriesCompleted: {\r\n name: \"Creatures Encountered\",\r\n spoiler: \"Hunter's Journal (158-164 max)\",\r\n spoilerDefault: \"Hunter's Journal\",\r\n max: 164,\r\n maxDefault: 164,\r\n wiki: \"Category:Enemies_(Hollow_Knight)#Compendium\"\r\n },\r\n \r\n //Add 4 remaining to Hunter Notes max\r\n\r\n journalNotesCompleted: {\r\n name: \"Hunter Notes Completed\",\r\n spoiler: \"Hunter's Journal (158-164 max)\",\r\n spoilerDefault: \"Hunter's Journal\",\r\n max: 164,\r\n maxDefault: 164,\r\n wiki: \"Category:Enemies_(Hollow_Knight)#Compendium\"\r\n },\r\n nailDamage: {\r\n name: \"Base Nail Damage\",\r\n spoiler: \"Nailsmith upgrades, City of Tears\",\r\n max: 21,\r\n maxDefault: 21,\r\n wiki: \"Nail#Nail_Upgrades\"\r\n },\r\n // not ghostCoins\r\n geoPool: {\r\n name: \"Shade Geo\",\r\n spoiler: \"Amount of Geo the Shade is currently holding\",\r\n min: 0,\r\n wiki: \"Shade\"\r\n },\r\n soldTrinket1: {\r\n name: \"Wanderer's Journals Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 200,\r\n wiki: \"Wanderer's_Journal\"\r\n },\r\n soldTrinket2: {\r\n name: \"Hallownest Seals Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 450,\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n soldTrinket3: {\r\n name: \"King's Idols Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 800,\r\n wiki: \"King's_Idol\"\r\n },\r\n soldTrinket4: {\r\n name: \"Arcane Eggs Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 1200,\r\n wiki: \"Arcane_Egg\"\r\n },\r\n relicsSoldTotalGeo: {\r\n name: \"Total Geo from Sold Relics\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n wiki: \"Lemm#Collectibles\"\r\n },\r\n ore: {\r\n name: \"Pale Ore\",\r\n spoiler: \"Current amount of Pale Ore in inventory\",\r\n wiki: \"Pale_Ore\"\r\n },\r\n simpleKeys: {\r\n name: \"Simple Keys\",\r\n spoiler: \"Current amount of Simple Keys in inventory\",\r\n wiki: \"Simple_Key\"\r\n },\r\n rancidEggs: {\r\n name: \"Rancid Eggs\",\r\n spoiler: \"Current amount of Rancid Eggs in inventory\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n jinnEggsSold: {\r\n name: \"Rancid Eggs Sold\",\r\n spoiler: \"Dirtmouth: Jinn, Steel Soul Mode only\",\r\n wiki: \"Jinn\"\r\n },\r\n xunFlowerBrokeTimes: {\r\n name: \"Delicate Flowers Destroyed\",\r\n spoiler: \"Grey Mourner, Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower\"\r\n },\r\n itemsDiscovered: {\r\n id: \"itemsDiscovered\",\r\n name: \"Interactables\",\r\n spoiler: \"Not A. | Activated | Discovered\",\r\n wiki: \"Category:Exploration_(Hollow_Knight)\",\r\n notActivated: 0,\r\n activated: 0,\r\n discoveredTotal: 0\r\n },\r\n bankerBalance: {\r\n name: \"Bank Account Balance\",\r\n spoiler: \"Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n whiteDefenderDefeats: {\r\n name: \"White Defender Times Defeated\",\r\n spoiler: \"Royal Waterways (5 max)\",\r\n max: 5,\r\n maxDefault: 5,\r\n wiki: \"White_Defender\"\r\n },\r\n greyPrinceDefeats: {\r\n name: \"Grey Prince Zote Times Defeated\",\r\n spoiler: \"Dirtmouth (10 max)\",\r\n max: 10,\r\n maxDefault: 10,\r\n wiki: \"Grey_Prince_Zote\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################################################# Godhome Statistics ############################################## */\r\n\r\n /*godhomeStatistics: {\r\n h2: \"Godhome Statistics\",\r\n id: \"hk-godhome-statistics\",\r\n description: \"Everything in Godhome, that didn't fit any other category.\",\r\n entries: {\r\n seenGGWastes: {\r\n name: \"Tuner Memory\",\r\n spoiler: \"Requires completing 3 Pantheons, 2% chance\",\r\n wiki: \"Godhome#Tuner_Memory\"\r\n },\r\n blueRoomDoorUnlocked: {\r\n name: \"Lifeblood Door Open\",\r\n spoiler: \"Complete any 8 Pantheon bindings total\",\r\n wiki: \"Godhome#Locked_Lifeblood_Room\"\r\n },\r\n killedVoidIdol_1: {\r\n name: \"Journal: Void Idol Attuned\",\r\n spoiler: \"Hall of Gods: Defeat All (Attuned)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n killedVoidIdol_2: {\r\n name: \"Journal: Void Idol Ascended\",\r\n spoiler: \"Hall of Gods: Defeat All (Ascended)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n killedVoidIdol_3: {\r\n name: \"Journal: Void Idol Radiant\",\r\n spoiler: \"Hall of Gods: Defeat All (Radiant)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n killedGodseekerMask: {\r\n name: \"Journal: Weathered Mask\",\r\n spoiler: \"Land of Storms: All Pantheons & Bindings\",\r\n wiki: \"Weathered_Mask\"\r\n },\r\n zoteStatueWallBroken: {\r\n name: \"Intruder Discovered\",\r\n spoiler: \"Hall of Gods: Zote Statue (upper right)\",\r\n wiki: \"Hall_of_Gods#Zote\"\r\n },\r\n ordealAchieved: {\r\n name: \"The Eternal Ordeal\",\r\n spoiler: \"Reach 57 Zotelings defeated\",\r\n wiki: \"Eternal_Ordeal\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Master #################################################### */\r\n\r\n /*pantheonOfTheMaster: {\r\n h2: \"P1 – Pantheon of the Master\",\r\n id: \"hk-pantheon-master\",\r\n property: \"bossDoorStateTier1\",\r\n description: \"Seek the Gods of Nail and Shell\",\r\n entries: {\r\n unlocked: {\r\n name: \"P1 Unlocked\",\r\n spoiler: \"Defeat P1 bosses in the game world to unlock\",\r\n wiki: \"Pantheon_of_the_Master\"\r\n },\r\n completed: {\r\n name: \"P1 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Master\"\r\n },\r\n boundNail: {\r\n name: \"P1 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P1 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P1 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P1 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P1 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P1 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Artist #################################################### */\r\n\r\n /*pantheonOfTheArtist: {\r\n h2: \"P2 – Pantheon of the Artist\",\r\n id: \"hk-pantheon-artist\",\r\n property: \"bossDoorStateTier2\",\r\n description: \"Seek the God Inspired\",\r\n entries: {\r\n unlocked: {\r\n name: \"P2 Unlocked\",\r\n spoiler: \"Defeat P2 bosses in the game world to unlock\",\r\n wiki: \"Pantheon_of_the_Artist\"\r\n },\r\n completed: {\r\n name: \"P2 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Artist\"\r\n },\r\n boundNail: {\r\n name: \"P2 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P2 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P2 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P2 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P2 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P2 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Sage #################################################### */\r\n\r\n /*pantheonOfTheSage: {\r\n h2: \"P3 – Pantheon of the Sage\",\r\n id: \"hk-pantheon-sage\",\r\n property: \"bossDoorStateTier3\",\r\n description: \"Seek the God of Wealth and Power\",\r\n entries: {\r\n unlocked: {\r\n name: \"P3 Unlocked\",\r\n spoiler: \"Defeat P3 bosses in the game world to unlock\",\r\n wiki: \"Pantheon_of_the_Sage\"\r\n },\r\n completed: {\r\n name: \"P3 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Sage\"\r\n },\r\n boundNail: {\r\n name: \"P3 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P3 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P3 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P3 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P3 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P3 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Knight #################################################### */\r\n\r\n /*pantheonOfTheKnight: {\r\n h2: \"P4 – Pantheon of the Knight\",\r\n id: \"hk-pantheon-knight\",\r\n property: \"bossDoorStateTier4\",\r\n description: \"Seek the Pure God\",\r\n entries: {\r\n unlocked: {\r\n name: \"P4 Unlocked\",\r\n spoiler: \"Complete 3 previous Pantheons to unlock\",\r\n wiki: \"Pantheon_of_the_Knight\"\r\n },\r\n completed: {\r\n name: \"P4 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Knight\"\r\n },\r\n boundNail: {\r\n name: \"P4 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P4 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P4 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P4 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P4 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P4 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of Hallownest #################################################### */\r\n\r\n /*pantheonOfHallownest: {\r\n h2: \"P5 – Pantheon of Hallownest\",\r\n id: \"hk-pantheon-hallownest\",\r\n property: \"bossDoorStateTier5\",\r\n description: \"Seek the Kingdom's Forgotten Light\",\r\n entries: {\r\n unlocked: {\r\n name: \"P5 Unlocked\",\r\n spoiler: \"Complete 4 previous Pantheons to unlock\",\r\n wiki: \"Pantheon_of_Hallownest\"\r\n },\r\n completed: {\r\n name: \"P5 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_Hallownest\"\r\n },\r\n boundNail: {\r\n name: \"P5 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P5 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P5 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P5 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P5 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P5 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Hall of Gods ############################################################# */\r\n\r\n /*hallOfGods: {\r\n h2: \"Hall of Gods\",\r\n id: \"hk-hall-of-gods\",\r\n property: \"statueState\",\r\n description: \"Bottom of Godhome. Detecting what bosses have been unlocked and defeated on all three difficulty levels: Attuned, Ascended and Radiant.\",\r\n entries: {\r\n GruzMotherUnlocked: {\r\n name: \"Gruz Mother: Unlocked\",\r\n spoiler: \"I sleep amongst winding roads\",\r\n id: \"GruzMother\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n GruzMotherAttuned: {\r\n name: \"Gruz Mother: Attuned\",\r\n spoiler: \"Slumbering god of fertility\",\r\n id: \"GruzMother\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n GruzMotherAscended: {\r\n name: \"Gruz Mother: Ascended\",\r\n spoiler: \"Slumbering god of fertility\",\r\n id: \"GruzMother\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n GruzMotherRadiant: {\r\n name: \"Gruz Mother: Radiant\",\r\n spoiler: \"Slumbering god of fertility\",\r\n id: \"GruzMother\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n VengeflyUnlocked: {\r\n name: \"Vengefly King: Unlocked\",\r\n spoiler: \"I keep guard above a verdant land\",\r\n id: \"Vengefly\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n VengeflyAttuned: {\r\n name: \"Vengefly King: Attuned\",\r\n spoiler: \"Vicious god of territories\",\r\n id: \"Vengefly\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n VengeflyAscended: {\r\n name: \"Vengefly King: Ascended\",\r\n spoiler: \"Vicious god of territories\",\r\n id: \"Vengefly\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n VengeflyRadiant: {\r\n name: \"Vengefly King: Radiant\",\r\n spoiler: \"Vicious god of territories\",\r\n id: \"Vengefly\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n BroodingMawlekUnlocked: {\r\n name: \"Brooding Mawlek: Unlocked\",\r\n spoiler: \"I call out to no one...\",\r\n id: \"BroodingMawlek\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n BroodingMawlekAttuned: {\r\n name: \"Brooding Mawlek: Attuned\",\r\n spoiler: \"...hidden by roads and highways\",\r\n id: \"BroodingMawlek\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n BroodingMawlekAscended: {\r\n name: \"Brooding Mawlek: Ascended\",\r\n spoiler: \"Lonely god of the nest\",\r\n id: \"BroodingMawlek\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n BroodingMawlekRadiant: {\r\n name: \"Brooding Mawlek: Radiant\",\r\n spoiler: \"Lonely god of the nest\",\r\n id: \"BroodingMawlek\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n FalseKnightUnlocked: {\r\n name: \"False Knight: Unlocked\",\r\n spoiler: \"I protect the weak in...\",\r\n id: \"FalseKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FalseKnightAttuned: {\r\n name: \"False Knight: Attuned\",\r\n spoiler: \"...the heart of the crossroads\",\r\n id: \"FalseKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FalseKnightAscended: {\r\n name: \"False Knight: Ascended\",\r\n spoiler: \"Angry god of the downtrodden\",\r\n id: \"FalseKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FalseKnightRadiant: {\r\n name: \"False Knight: Radiant\",\r\n spoiler: \"Angry god of the downtrodden\",\r\n id: \"FalseKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FailedChampionUnlocked: {\r\n name: \"Failed Champion: Unlocked\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n FailedChampionAttuned: {\r\n name: \"Failed Champion: Attuned\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n FailedChampionAscended: {\r\n name: \"Failed Champion: Ascended\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n FailedChampionRadiant: {\r\n name: \"Failed Champion: Radiant\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n Hornet1Unlocked: {\r\n name: \"Hornet Protector: Unlocked\",\r\n spoiler: \"I watch over lush pathways...\",\r\n id: \"Hornet1\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet1Attuned: {\r\n name: \"Hornet Protector: Attuned\",\r\n spoiler: \"...and distant ash-swept graves\",\r\n id: \"Hornet1\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet1Ascended: {\r\n name: \"Hornet Protector: Ascended\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet1\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet1Radiant: {\r\n name: \"Hornet Protector: Radiant\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet1\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet2Unlocked: {\r\n name: \"Hornet Sentinel: Unlocked\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n Hornet2Attuned: {\r\n name: \"Hornet Sentinel: Attuned\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n Hornet2Ascended: {\r\n name: \"Hornet Sentinel: Ascended\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n Hornet2Radiant: {\r\n name: \"Hornet Sentinel: Radiant\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n MegaMossChargerUnlocked: {\r\n name: \"Massive Moss Charger: Unlocked\",\r\n spoiler: \"Together we hunt in paths...\",\r\n id: \"MegaMossCharger\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n MegaMossChargerAttuned: {\r\n name: \"Massive Moss Charger: Attuned\",\r\n spoiler: \"...overgrown with green\",\r\n id: \"MegaMossCharger\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n MegaMossChargerAscended: {\r\n name: \"Massive Moss Charger: Ascended\",\r\n spoiler: \"Restless god of those...\",\r\n id: \"MegaMossCharger\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n MegaMossChargerRadiant: {\r\n name: \"Massive Moss Charger: Radiant\",\r\n spoiler: \"...who band together\",\r\n id: \"MegaMossCharger\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n FlukemarmUnlocked: {\r\n name: \"Flukemarm: Unlocked\",\r\n spoiler: \"I lie within a maze of pipes\",\r\n id: \"Flukemarm\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n FlukemarmAttuned: {\r\n name: \"Flukemarm: Attuned\",\r\n spoiler: \"Alluring god of motherhood\",\r\n id: \"Flukemarm\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n FlukemarmAscended: {\r\n name: \"Flukemarm: Ascended\",\r\n spoiler: \"Alluring god of motherhood\",\r\n id: \"Flukemarm\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n FlukemarmRadiant: {\r\n name: \"Flukemarm: Radiant\",\r\n spoiler: \"Alluring god of motherhood\",\r\n id: \"Flukemarm\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n MantisLordsUnlocked: {\r\n name: \"Mantis Lords: Unlocked\",\r\n spoiler: \"We watch over a village of warriors\",\r\n id: \"MantisLords\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsAttuned: {\r\n name: \"Mantis Lords: Attuned\",\r\n spoiler: \"Noble sister gods of combat\",\r\n id: \"MantisLords\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsAscended: {\r\n name: \"Mantis Lords: Ascended\",\r\n spoiler: \"Noble sister gods of combat\",\r\n id: \"MantisLords\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsRadiant: {\r\n name: \"Mantis Lords: Radiant\",\r\n spoiler: \"Noble sister gods of combat\",\r\n id: \"MantisLords\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsExtraUnlocked: {\r\n name: \"Sisters of Battle: Unlocked\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n MantisLordsExtraAttuned: {\r\n name: \"Sisters of Battle: Attuned\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n MantisLordsExtraAscended: {\r\n name: \"Sisters of Battle: Ascended\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n MantisLordsExtraRadiant: {\r\n name: \"Sisters of Battle: Radiant\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n OblobblesUnlocked: {\r\n name: \"Oblobbles: Unlocked\",\r\n spoiler: \"Together we are chained in a strange colosseum\",\r\n id: \"Oblobbles\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n OblobblesAttuned: {\r\n name: \"Oblobbles: Attuned\",\r\n spoiler: \"Lover gods of faith and devotion\",\r\n id: \"Oblobbles\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n OblobblesAscended: {\r\n name: \"Oblobbles: Ascended\",\r\n spoiler: \"Lover gods of faith and devotion\",\r\n id: \"Oblobbles\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n OblobblesRadiant: {\r\n name: \"Oblobbles: Radiant\",\r\n spoiler: \"Lover gods of faith and devotion\",\r\n id: \"Oblobbles\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n HiveKnightUnlocked: {\r\n name: \"Hive Knight: Unlocked\",\r\n spoiler: \"I guard the heart of the hive for my Queen\",\r\n id: \"HiveKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n HiveKnightAttuned: {\r\n name: \"Hive Knight: Attuned\",\r\n spoiler: \"Watchful god of duty\",\r\n id: \"HiveKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n HiveKnightAscended: {\r\n name: \"Hive Knight: Ascended\",\r\n spoiler: \"Watchful god of duty\",\r\n id: \"HiveKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n HiveKnightRadiant: {\r\n name: \"Hive Knight: Radiant\",\r\n spoiler: \"Watchful god of duty\",\r\n id: \"HiveKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n BrokenVesselUnlocked: {\r\n name: \"Broken Vessel: Unlocked\",\r\n spoiler: \"I sleep in the deep caves below the world\",\r\n id: \"BrokenVessel\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n BrokenVesselAttuned: {\r\n name: \"Broken Vessel: Attuned\",\r\n spoiler: \"Broken shell of an empty god\",\r\n id: \"BrokenVessel\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n BrokenVesselAscended: {\r\n name: \"Broken Vessel: Ascended\",\r\n spoiler: \"Broken shell of an empty god\",\r\n id: \"BrokenVessel\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n BrokenVesselRadiant: {\r\n name: \"Broken Vessel: Radiant\",\r\n spoiler: \"Broken shell of an empty god\",\r\n id: \"BrokenVessel\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n LostKinUnlocked: {\r\n name: \"Lost Kin: Unlocked\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n LostKinAttuned: {\r\n name: \"Lost Kin: Attuned\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n LostKinAscended: {\r\n name: \"Lost Kin: Ascended\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n LostKinRadiant: {\r\n name: \"Lost Kin: Radiant\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n NoskUnlocked: {\r\n name: \"Nosk: Unlocked\",\r\n spoiler: \"I wait patiently in a dark nest of predators\",\r\n id: \"Nosk\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskAttuned: {\r\n name: \"Nosk: Attuned\",\r\n spoiler: \"Everchanging god of the faceless\",\r\n id: \"Nosk\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskAscended: {\r\n name: \"Nosk: Ascended\",\r\n spoiler: \"Everchanging god of the faceless\",\r\n id: \"Nosk\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskRadiant: {\r\n name: \"Nosk: Radiant\",\r\n spoiler: \"Everchanging god of the faceless\",\r\n id: \"Nosk\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskHornetUnlocked: {\r\n name: \"Winged Nosk: Unlocked\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n NoskHornetAttuned: {\r\n name: \"Winged Nosk: Attuned\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n NoskHornetAscended: {\r\n name: \"Winged Nosk: Ascended\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n NoskHornetRadiant: {\r\n name: \"Winged Nosk: Radiant\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n CollectorUnlocked: {\r\n name: \"The Collector: Unlocked\",\r\n spoiler: \"I lurk at the peak of a forsaken tower\",\r\n id: \"Collector\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n CollectorAttuned: {\r\n name: \"The Collector: Attuned\",\r\n spoiler: \"Joyful god of protection\",\r\n id: \"Collector\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n CollectorAscended: {\r\n name: \"The Collector: Ascended\",\r\n spoiler: \"Joyful god of protection\",\r\n id: \"Collector\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n CollectorRadiant: {\r\n name: \"The Collector: Radiant\",\r\n spoiler: \"Joyful god of protection\",\r\n id: \"Collector\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n GodTamerUnlocked: {\r\n name: \"God Tamer: Unlocked\",\r\n spoiler: \"I wait, weapon in hand, within the colosseum\",\r\n id: \"GodTamer\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n GodTamerAttuned: {\r\n name: \"God Tamer: Attuned\",\r\n spoiler: \"Gallant god of the arena\",\r\n id: \"GodTamer\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n GodTamerAscended: {\r\n name: \"God Tamer: Ascended\",\r\n spoiler: \"Gallant god of the arena\",\r\n id: \"GodTamer\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n GodTamerRadiant: {\r\n name: \"God Tamer: Radiant\",\r\n spoiler: \"Gallant god of the arena\",\r\n id: \"GodTamer\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n CrystalGuardian1Unlocked: {\r\n name: \"Crystal Guardian: Unlocked\",\r\n spoiler: \"I rest amongst crystals...\",\r\n id: \"CrystalGuardian1\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian1Attuned: {\r\n name: \"Crystal Guardian: Attuned\",\r\n spoiler: \"...and strange machinery\",\r\n id: \"CrystalGuardian1\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian1Ascended: {\r\n name: \"Crystal Guardian: Ascended\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian1\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian1Radiant: {\r\n name: \"Crystal Guardian: Radiant\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian1\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian2Unlocked: {\r\n name: \"Enraged Guardian: Unlocked\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n CrystalGuardian2Attuned: {\r\n name: \"Enraged Guardian: Attuned\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n CrystalGuardian2Ascended: {\r\n name: \"Enraged Guardian: Ascended\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n CrystalGuardian2Radiant: {\r\n name: \"Enraged Guardian: Radiant\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n UumuuUnlocked: {\r\n name: \"Uumuu: Unlocked\",\r\n spoiler: \"I sleep submerged in the depths of the archive\",\r\n id: \"Uumuu\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n UumuuAttuned: {\r\n name: \"Uumuu: Attuned\",\r\n spoiler: \"Uncanny god of knowledge\",\r\n id: \"Uumuu\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n UumuuAscended: {\r\n name: \"Uumuu: Ascended\",\r\n spoiler: \"Uncanny god of knowledge\",\r\n id: \"Uumuu\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n UumuuRadiant: {\r\n name: \"Uumuu: Radiant\",\r\n spoiler: \"Uncanny god of knowledge\",\r\n id: \"Uumuu\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n TraitorLordUnlocked: {\r\n name: \"Traitor Lord: Unlocked\",\r\n spoiler: \"I defile the gardens of false royalty\",\r\n id: \"TraitorLord\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n TraitorLordAttuned: {\r\n name: \"Traitor Lord: Attuned\",\r\n spoiler: \"Treacherous god of anger\",\r\n id: \"TraitorLord\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n TraitorLordAscended: {\r\n name: \"Traitor Lord: Ascended\",\r\n spoiler: \"Treacherous god of anger\",\r\n id: \"TraitorLord\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n TraitorLordRadiant: {\r\n name: \"Traitor Lord: Radiant\",\r\n spoiler: \"Treacherous god of anger\",\r\n id: \"TraitorLord\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n GreyPrinceUnlocked: {\r\n name: \"Grey Prince Zote: Unlocked\",\r\n spoiler: \"I serve my Queen inside her dreams\",\r\n id: \"GreyPrince\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n GreyPrinceAttuned: {\r\n name: \"Grey Prince Zote: Attuned\",\r\n spoiler: \"False god conjured by the lonely\",\r\n id: \"GreyPrince\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n GreyPrinceAscended: {\r\n name: \"Grey Prince Zote: Ascended\",\r\n spoiler: \"False god conjured by the lonely\",\r\n id: \"GreyPrince\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n GreyPrinceRadiant: {\r\n name: \"Grey Prince Zote: Radiant\",\r\n spoiler: \"False god conjured by the lonely\",\r\n id: \"GreyPrince\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n MageKnightUnlocked: {\r\n name: \"Soul Warrior: Unlocked\",\r\n spoiler: \"I haunt the halls of a sanctum\",\r\n id: \"MageKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n MageKnightAttuned: {\r\n name: \"Soul Warrior: Attuned\",\r\n spoiler: \"Haunted god of the sanctum\",\r\n id: \"MageKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n MageKnightAscended: {\r\n name: \"Soul Warrior: Ascended\",\r\n spoiler: \"Haunted god of the sanctum\",\r\n id: \"MageKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n MageKnightRadiant: {\r\n name: \"Soul Warrior: Radiant\",\r\n spoiler: \"Haunted god of the sanctum\",\r\n id: \"MageKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n SoulMasterUnlocked: {\r\n name: \"Soul Master: Unlocked\",\r\n spoiler: \"Immortal, I rule the Sanctum\",\r\n id: \"SoulMaster\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulMasterAttuned: {\r\n name: \"Soul Master: Attuned\",\r\n spoiler: \"Covetous god of soul\",\r\n id: \"SoulMaster\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulMasterAscended: {\r\n name: \"Soul Master: Ascended\",\r\n spoiler: \"Covetous god of soul\",\r\n id: \"SoulMaster\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulMasterRadiant: {\r\n name: \"Soul Master: Radiant\",\r\n spoiler: \"Covetous god of soul\",\r\n id: \"SoulMaster\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulTyrantUnlocked: {\r\n name: \"Soul Tyrant: Unlocked\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n SoulTyrantAttuned: {\r\n name: \"Soul Tyrant: Attuned\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n SoulTyrantAscended: {\r\n name: \"Soul Tyrant: Ascended\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n SoulTyrantRadiant: {\r\n name: \"Soul Tyrant: Radiant\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n DungDefenderUnlocked: {\r\n name: \"Dung Defender: Unlocked\",\r\n spoiler: \"I protect the pipeways of the kingdom\",\r\n id: \"DungDefender\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n DungDefenderAttuned: {\r\n name: \"Dung Defender: Attuned\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"DungDefender\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n DungDefenderAscended: {\r\n name: \"Dung Defender: Ascended\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"DungDefender\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n DungDefenderRadiant: {\r\n name: \"Dung Defender: Radiant\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"DungDefender\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n WhiteDefenderUnlocked: {\r\n name: \"White Defender: Unlocked\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WhiteDefenderAttuned: {\r\n name: \"White Defender: Attuned\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WhiteDefenderAscended: {\r\n name: \"White Defender: Ascended\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WhiteDefenderRadiant: {\r\n name: \"White Defender: Radiant\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WatcherKnightsUnlocked: {\r\n name: \"Watcher Knight: Unlocked\",\r\n spoiler: \"We lie dormant, guarding the Spire's peak\",\r\n id: \"WatcherKnights\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n WatcherKnightsAttuned: {\r\n name: \"Watcher Knight: Attuned\",\r\n spoiler: \"Sentinel gods of the spire\",\r\n id: \"WatcherKnights\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n WatcherKnightsAscended: {\r\n name: \"Watcher Knight: Ascended\",\r\n spoiler: \"Sentinel gods of the spire\",\r\n id: \"WatcherKnights\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n WatcherKnightsRadiant: {\r\n name: \"Watcher Knight: Radiant\",\r\n spoiler: \"Sentinel gods of the spire\",\r\n id: \"WatcherKnights\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n NoEyesUnlocked: {\r\n name: \"No Eyes: Unlocked\",\r\n spoiler: \"I lie dreaming in a silent sanctuary\",\r\n id: \"NoEyes\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n NoEyesAttuned: {\r\n name: \"No Eyes: Attuned\",\r\n spoiler: \"Dreamborn god of fear and relief\",\r\n id: \"NoEyes\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n NoEyesAscended: {\r\n name: \"No Eyes: Ascended\",\r\n spoiler: \"Dreamborn god of fear and relief\",\r\n id: \"NoEyes\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n NoEyesRadiant: {\r\n name: \"No Eyes: Radiant\",\r\n spoiler: \"Dreamborn god of fear and relief\",\r\n id: \"NoEyes\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n MarmuUnlocked: {\r\n name: \"Marmu: Unlocked\",\r\n spoiler: \"I lie dreaming patiently in a garden\",\r\n id: \"Marmu\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n MarmuAttuned: {\r\n name: \"Marmu: Attuned\",\r\n spoiler: \"Dreamborn god of gardens\",\r\n id: \"Marmu\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n MarmuAscended: {\r\n name: \"Marmu: Ascended\",\r\n spoiler: \"Dreamborn god of gardens\",\r\n id: \"Marmu\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n MarmuRadiant: {\r\n name: \"Marmu: Radiant\",\r\n spoiler: \"Dreamborn god of gardens\",\r\n id: \"Marmu\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n GalienUnlocked: {\r\n name: \"Galien: Unlocked\",\r\n spoiler: \"I lie dreaming in darkness, surrounded by predators\",\r\n id: \"Galien\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n GalienAttuned: {\r\n name: \"Galien: Attuned\",\r\n spoiler: \"Dreamborn god of heroic hearts\",\r\n id: \"Galien\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n GalienAscended: {\r\n name: \"Galien: Ascended\",\r\n spoiler: \"Dreamborn god of heroic hearts\",\r\n id: \"Galien\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n GalienRadiant: {\r\n name: \"Galien: Radiant\",\r\n spoiler: \"Dreamborn god of heroic hearts\",\r\n id: \"Galien\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n MarkothUnlocked: {\r\n name: \"Markoth: Unlocked\",\r\n spoiler: \"I lie dreaming at the edge of the world\",\r\n id: \"Markoth\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n MarkothAttuned: {\r\n name: \"Markoth: Attuned\",\r\n spoiler: \"Dreamborn god of meditation and isolation\",\r\n id: \"Markoth\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n MarkothAscended: {\r\n name: \"Markoth: Ascended\",\r\n spoiler: \"Dreamborn god of meditation and isolation\",\r\n id: \"Markoth\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n MarkothRadiant: {\r\n name: \"Markoth: Radiant\",\r\n spoiler: \"Dreamborn god of meditation and isolation\",\r\n id: \"Markoth\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n XeroUnlocked: {\r\n name: \"Xero: Unlocked\",\r\n spoiler: \"I lie dreaming amongst peaceful graves\",\r\n id: \"Xero\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n XeroAttuned: {\r\n name: \"Xero: Attuned\",\r\n spoiler: \"Dreamborn god of faith and betrayal\",\r\n id: \"Xero\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n XeroAscended: {\r\n name: \"Xero: Ascended\",\r\n spoiler: \"Dreamborn god of faith and betrayal\",\r\n id: \"Xero\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n XeroRadiant: {\r\n name: \"Xero: Radiant\",\r\n spoiler: \"Dreamborn god of faith and betrayal\",\r\n id: \"Xero\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n GorbUnlocked: {\r\n name: \"Gorb: Unlocked\",\r\n spoiler: \"I lie dreaming at a wind-blasted peak\",\r\n id: \"Gorb\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n GorbAttuned: {\r\n name: \"Gorb: Attuned\",\r\n spoiler: \"Dreamborn god of the beyond\",\r\n id: \"Gorb\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n GorbAscended: {\r\n name: \"Gorb: Ascended\",\r\n spoiler: \"Dreamborn god of the beyond\",\r\n id: \"Gorb\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n GorbRadiant: {\r\n name: \"Gorb: Radiant\",\r\n spoiler: \"Dreamborn god of the beyond\",\r\n id: \"Gorb\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n ElderHuUnlocked: {\r\n name: \"Elder Hu: Unlocked\",\r\n spoiler: \"I lie dreaming in the wastes\",\r\n id: \"ElderHu\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n ElderHuAttuned: {\r\n name: \"Elder Hu: Attuned\",\r\n spoiler: \"Dreamborn god of travellers and sages\",\r\n id: \"ElderHu\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n ElderHuAscended: {\r\n name: \"Elder Hu: Ascended\",\r\n spoiler: \"Dreamborn god of travellers and sages\",\r\n id: \"ElderHu\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n ElderHuRadiant: {\r\n name: \"Elder Hu: Radiant\",\r\n spoiler: \"Dreamborn god of travellers and sages\",\r\n id: \"ElderHu\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n NailmastersUnlocked: {\r\n name: \"Oro & Mato: Unlocked\",\r\n spoiler: \"Together, we stand at a Pantheon's peak\",\r\n id: \"Nailmasters\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n NailmastersAttuned: {\r\n name: \"Oro & Mato: Attuned\",\r\n spoiler: \"Loyal brother gods of the nail\",\r\n id: \"Nailmasters\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n NailmastersAscended: {\r\n name: \"Oro & Mato: Ascended\",\r\n spoiler: \"Loyal brother gods of the nail\",\r\n id: \"Nailmasters\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n NailmastersRadiant: {\r\n name: \"Oro & Mato: Radiant\",\r\n spoiler: \"Loyal brother gods of the nail\",\r\n id: \"Nailmasters\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n PaintmasterUnlocked: {\r\n name: \"Paintmaster Sheo: Unlocked\",\r\n spoiler: \"I hone my craft at a Pantheon's peak\",\r\n id: \"Paintmaster\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n PaintmasterAttuned: {\r\n name: \"Paintmaster Sheo: Attuned\",\r\n spoiler: \"Talented god of artists and creators\",\r\n id: \"Paintmaster\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n PaintmasterAscended: {\r\n name: \"Paintmaster Sheo: Ascended\",\r\n spoiler: \"Talented god of artists and creators\",\r\n id: \"Paintmaster\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n PaintmasterRadiant: {\r\n name: \"Paintmaster Sheo: Radiant\",\r\n spoiler: \"Talented god of artists and creators\",\r\n id: \"Paintmaster\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n SlyUnlocked: {\r\n name: \"Nailsage Sly: Unlocked\",\r\n spoiler: \"I await you at a Pantheon's peak\",\r\n id: \"Sly\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n SlyAttuned: {\r\n name: \"Nailsage Sly: Attuned\",\r\n spoiler: \"Cunning god of opportunity\",\r\n id: \"Sly\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n SlyAscended: {\r\n name: \"Nailsage Sly: Ascended\",\r\n spoiler: \"Cunning god of opportunity\",\r\n id: \"Sly\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n SlyRadiant: {\r\n name: \"Nailsage Sly: Radiant\",\r\n spoiler: \"Cunning god of opportunity\",\r\n id: \"Sly\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n HollowKnightUnlocked: {\r\n name: \"Pure Vessel: Unlocked\",\r\n spoiler: \"This empty god stands at a Pantheon's peak\",\r\n id: \"HollowKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n HollowKnightAttuned: {\r\n name: \"Pure Vessel: Attuned\",\r\n spoiler: \"Mighty god of nothingness\",\r\n id: \"HollowKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n HollowKnightAscended: {\r\n name: \"Pure Vessel: Ascended\",\r\n spoiler: \"Mighty god of nothingness\",\r\n id: \"HollowKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n HollowKnightRadiant: {\r\n name: \"Pure Vessel: Radiant\",\r\n spoiler: \"Mighty god of nothingness\",\r\n id: \"HollowKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n GrimmUnlocked: {\r\n name: \"Grimm: Unlocked\",\r\n spoiler: \"I await the lighting of the lantern\",\r\n id: \"Grimm\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n GrimmAttuned: {\r\n name: \"Grimm: Attuned\",\r\n spoiler: \"Travelling god of the troupe\",\r\n id: \"Grimm\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n GrimmAscended: {\r\n name: \"Grimm: Ascended\",\r\n spoiler: \"Travelling god of the troupe\",\r\n id: \"Grimm\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n GrimmRadiant: {\r\n name: \"Grimm: Radiant\",\r\n spoiler: \"Travelling god of the troupe\",\r\n id: \"Grimm\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n NightmareGrimmUnlocked: {\r\n name: \"Nightmare King: Unlocked\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n NightmareGrimmAttuned: {\r\n name: \"Nightmare King: Attuned\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n NightmareGrimmAscended: {\r\n name: \"Nightmare King: Ascended\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n NightmareGrimmRadiant: {\r\n name: \"Nightmare King: Radiant\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n RadianceUnlocked: {\r\n name: \"Radiance: Unlocked\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n RadianceAttuned: {\r\n name: \"Radiance: Attuned\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n RadianceAscended: {\r\n name: \"Radiance: Ascended\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n RadianceRadiant: {\r\n name: \"Radiance: Radiant\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n },\r\n }*/\r\n\r\n\r\n },\r\n};\r\n\r\nexport default HK;","/* Huge thanks to ManicJamie for his HKTranslator: https://github.com/ManicJamie/HKTranslator */\r\n\r\nconst MAP = {\r\n \"Tutorial_01\": \"King's Pass\",\r\n \"Town\": \"Dirtmouth\",\r\n \"Room_shop\": \"Dirtmouth: Sly's Shop\",\r\n \"Room_Sly_Storeroom\": \"Dirtmouth: Sly's Shop Basement\",\r\n \"Room_Town_Stag_Station\": \"Dirtmouth: Stag Station\",\r\n \"Room_mapper\": \"Dirtmouth: Iselda's Shop\",\r\n \"Room_Bretta\": \"Dirtmouth: Bretta's Room\",\r\n \"Room_Bretta_Basement\": \"Dirtmouth: Bretta's Room Basement\",\r\n \"Room_Ouiji\": \"Dirtmouth: Jiji's Hut\",\r\n \"Room_Jinn\": \"Dirtmouth: Jinn's Hut\",\r\n \"Room_Tram_RG\": \"Upper Tram\",\r\n \"Room_Tram\": \"Lower Tram\",\r\n \"Crossroads_01\": \"Forgotten Crossroads: Well\",\r\n \"Crossroads_02\": \"Forgotten Crossroads: Outside Temple of the Black Egg\",\r\n \"Crossroads_03\": \"Forgotten Crossroads: Outside Stag Station\",\r\n \"Crossroads_04\": \"Forgotten Crossroads: Gruz Mother\",\r\n \"Crossroads_05\": \"Forgotten Crossroads: Central Grub\",\r\n \"Crossroads_06\": \"Forgotten Crossroads: Outside Ancestral Mound\",\r\n \"Crossroads_07\": \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n \"Crossroads_08\": \"Forgotten Crossroads: Aspid Arena\",\r\n \"Crossroads_09\": \"Forgotten Crossroads: Brooding Mawlek Boss\",\r\n \"Crossroads_10\": \"Forgotten Crossroads: False Knight Arena\",\r\n \"Crossroads_11_alt\": \"Forgotten Crossroads: Greenpath Entrance\",\r\n \"Crossroads_12\": \"Forgotten Crossroads: Corridor to Acid Grub\",\r\n \"Crossroads_13\": \"Forgotten Crossroads: Goam Mask Shard\",\r\n \"Crossroads_14\": \"Forgotten Crossroads: Outside Myla\",\r\n \"Crossroads_15\": \"Forgotten Crossroads: Corridor to Tram\",\r\n \"Crossroads_16\": \"Forgotten Crossroads: Above Lever\",\r\n \"Crossroads_18\": \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n \"Crossroads_19\": \"Forgotten Crossroads: Before Gruz Mother\",\r\n \"Crossroads_21\": \"Forgotten Crossroads: Outside False Knight\",\r\n \"Crossroads_22\": \"Forgotten Crossroads: Glowing Womb Arena\",\r\n \"Crossroads_25\": \"Forgotten Crossroads: Brooding Mawlek Entrance\",\r\n \"Crossroads_27\": \"Forgotten Crossroads: Outside Tram\",\r\n \"Crossroads_30\": \"Forgotten Crossroads: Hot Spring\",\r\n \"Crossroads_31\": \"Forgotten Crossroads: Spike Grub\",\r\n \"Crossroads_33\": \"Forgotten Crossroads: Cornifer\",\r\n \"Crossroads_35\": \"Forgotten Crossroads: Acid Grub\",\r\n \"Crossroads_36\": \"Forgotten Crossroads: Brooding Mawlek Middle\",\r\n \"Crossroads_37\": \"Forgotten Crossroads: Vessel Fragment\",\r\n \"Crossroads_38\": \"Forgotten Crossroads: Grubfather\",\r\n \"Crossroads_39\": \"Forgotten Crossroads: Corridor Right of Temple of the Black Egg\",\r\n \"Crossroads_40\": \"Forgotten Crossroads: Corridor Right of Central Grub\",\r\n \"Crossroads_42\": \"Forgotten Crossroads: Right of Mask Shard\",\r\n \"Crossroads_43\": \"Forgotten Crossroads: Corridor to Elevator\",\r\n \"Crossroads_45\": \"Forgotten Crossroads: Myla\",\r\n \"Crossroads_46\": \"Forgotten Crossroads: Tram\",\r\n \"Crossroads_47\": \"Forgotten Crossroads: Stag Station\",\r\n \"Crossroads_48\": \"Forgotten Crossroads: Husk Guard Grub\",\r\n \"Crossroads_49\": \"Forgotten Crossroads: Elevator\",\r\n \"Crossroads_52\": \"Forgotten Crossroads: Goam Journal\",\r\n \"Crossroads_ShamanTemple\": \"Forgotten Crossroads: Ancestral Mound\",\r\n \"Room_Mender_House\": \"Forgotten Crossroads: Menderbug House\",\r\n \"Room_Charm_Shop\": \"Forgotten Crossroads: Salubra's Shop\",\r\n \"Room_ruinhouse\": \"Forgotten Crossroads: Rescue Sly Hut\",\r\n \"Room_temple\": \"Forgotten Crossroads: Inside Temple of the Black Egg\",\r\n \"Fungus1_01\": \"Greenpath: Entrance\",\r\n \"Fungus1_01b\": \"Greenpath: Waterfall Bench\",\r\n \"Fungus1_02\": \"Greenpath: First Hornet Sighting\",\r\n \"Fungus1_03\": \"Greenpath: Storerooms\",\r\n \"Fungus1_04\": \"Greenpath: Hornet\",\r\n \"Fungus1_05\": \"Greenpath: Outside Thorns\",\r\n \"Fungus1_06\": \"Greenpath: Cornifer\",\r\n \"Fungus1_07\": \"Greenpath: Outside Hunter\",\r\n \"Fungus1_08\": \"Greenpath: Hunter\",\r\n \"Fungus1_09\": \"Greenpath: Sheo Gauntlet\",\r\n \"Fungus1_10\": \"Greenpath: Acid Bridge\",\r\n \"Fungus1_11\": \"Greenpath: Above Fog Canyon\",\r\n \"Fungus1_12\": \"Greenpath: Massive Moss Charger Corridor\",\r\n \"Fungus1_13\": \"Greenpath: Whispering Root\",\r\n \"Fungus1_14\": \"Greenpath: Thorns of Agony\",\r\n \"Fungus1_15\": \"Greenpath: Outside Sheo\",\r\n \"Fungus1_16_alt\": \"Greenpath: Stag Station\",\r\n \"Fungus1_17\": \"Greenpath: Moss Charger Corridor\",\r\n \"Fungus1_19\": \"Greenpath: Above Sanctuary Bench\",\r\n \"Fungus1_20_v02\": \"Greenpath: Vengefly King\",\r\n \"Fungus1_21\": \"Greenpath: Outside Hornet\",\r\n \"Fungus1_22\": \"Greenpath: Outside Stag Station\",\r\n \"Fungus1_25\": \"Greenpath: Corridor to Lake of Unn\",\r\n \"Fungus1_26\": \"Greenpath: Lake Of Unn\",\r\n \"Fungus1_29\": \"Greenpath: Massive Moss Charger\",\r\n \"Fungus1_30\": \"Greenpath: Below Toll Bench\",\r\n \"Fungus1_31\": \"Greenpath: Toll\",\r\n \"Fungus1_32\": \"Greenpath: Moss Knight Arena\",\r\n \"Fungus1_34\": \"Greenpath: Stone Sanctuary Entrance\",\r\n \"Fungus1_35\": \"Greenpath: Stone Sanctuary\",\r\n \"Fungus1_36\": \"Greenpath: Stone Sanctuary Mask Shard\",\r\n \"Fungus1_37\": \"Greenpath: Stone Sanctuary Bench\",\r\n \"Fungus1_Slug\": \"Greenpath: Unn\",\r\n \"Room_nailmaster_02\": \"Greenpath: Sheo\",\r\n \"Room_Slug_Shrine\": \"Greenpath: Lake of Unn Bench\",\r\n \"Deepnest_01\": \"Fungal Wastes: Deepnest Fall\",\r\n \"Fungus2_01\": \"Fungal Wastes: Queen's Station\",\r\n \"Fungus2_02\": \"Fungal Wastes: Queen's Station Stag\",\r\n \"Fungus2_03\": \"Fungal Wastes: Outside Queen's Station\",\r\n \"Fungus2_04\": \"Fungal Wastes: Below Shrumal Ogres\",\r\n \"Fungus2_05\": \"Fungal Wastes: Shrumal Ogres\",\r\n \"Fungus2_06\": \"Fungal Wastes: Outside Leg Eater\",\r\n \"Fungus2_07\": \"Fungal Wastes: Shrumal Warrior Acid Bridge\",\r\n \"Fungus2_08\": \"Fungal Wastes: Outside Elder Hu\",\r\n \"Fungus2_09\": \"Fungal Wastes: Cloth Corridor\",\r\n \"Fungus2_10\": \"Fungal Wastes: Left Of Pilgrim's Way\",\r\n \"Fungus2_11\": \"Fungal Wastes: Right of Bouncy Mushroom Grub\",\r\n \"Fungus2_12\": \"Fungal Wastes: Mantis Corridor\",\r\n \"Fungus2_13\": \"Fungal Wastes: Bretta Bench\",\r\n \"Fungus2_14\": \"Fungal Wastes: Mantis Village\",\r\n \"Fungus2_15\": \"Fungal Wastes: Mantis Lords\",\r\n \"Fungus2_17\": \"Fungal Wastes: Above Mantis Village\",\r\n \"Fungus2_18\": \"Fungal Wastes: Cornifer\",\r\n \"Fungus2_19\": \"Fungal Wastes: Right Of Spore Shroom\",\r\n \"Fungus2_20\": \"Fungal Wastes: Spore Shroom\",\r\n \"Fungus2_21\": \"Fungal Wastes: Pilgrim's Way\",\r\n \"Fungus2_23\": \"Fungal Wastes: Dashmaster\",\r\n \"Fungus2_26\": \"Fungal Wastes: Leg Eater\",\r\n \"Fungus2_28\": \"Fungal Wastes: Shrumal Warrior Loop\",\r\n \"Fungus2_29\": \"Fungal Wastes: Fungal Core Upper\",\r\n \"Fungus2_30\": \"Fungal Wastes: Fungal Core Lower\",\r\n \"Fungus2_31\": \"Fungal Wastes: Mantis Lords Rewards\",\r\n \"Fungus2_32\": \"Fungal Wastes: Elder Hu\",\r\n \"Fungus2_33\": \"Fungal Wastes: Whispering Root near Fog Canyon\",\r\n \"Fungus2_34\": \"Fungal Wastes: Willoh\",\r\n \"Fungus3_01\": \"Fog Canyon: Upper West Tall\",\r\n \"Fungus3_02\": \"Fog Canyon: Lower West Tall\",\r\n \"Fungus3_03\": \"Fog Canyon: Queen's Gardens Acid Entrance\",\r\n \"Fungus3_24\": \"Fog Canyon: Corridor to Overgrown Mound\",\r\n \"Fungus3_25\": \"Fog Canyon: Cornifer\",\r\n \"Fungus3_25b\": \"Fog Canyon: Corridor to Cornifer\",\r\n \"Fungus3_26\": \"Fog Canyon: Right Tall Area\",\r\n \"Fungus3_27\": \"Fog Canyon: Corridor to Archives\",\r\n \"Fungus3_28\": \"Fog Canyon: Charm Notch\",\r\n \"Fungus3_30\": \"Fog Canyon: Lifeblood Cocoon Room\",\r\n \"Fungus3_35\": \"Fog Canyon: Millibelle\",\r\n \"Fungus3_44\": \"Fog Canyon: Overgrown Mound Entrance\",\r\n \"Fungus3_47\": \"Fog Canyon: Teacher's Archives Entrance\",\r\n \"Fungus3_archive\": \"Fog Canyon: Teacher's Archives Bench\",\r\n \"Fungus3_archive_02\": \"Fog Canyon: Uumuu Arena\",\r\n \"Room_Fungus_Shaman\": \"Fog Canyon: Overgrown Mound\",\r\n \"Cliffs_01\": \"Howling Cliffs: Main\",\r\n \"Cliffs_02\": \"Howling Cliffs: Gorb\",\r\n \"Cliffs_03\": \"Howling Cliffs: Stag Nest\",\r\n \"Cliffs_04\": \"Howling Cliffs: Joni's Dark Passage\",\r\n \"Cliffs_05\": \"Howling Cliffs: Joni's Charm Room\",\r\n \"Cliffs_06\": \"Howling Cliffs: Grimm Lantern\",\r\n \"Fungus1_28\": \"Howling Cliffs: Baldur's Shell\",\r\n \"Room_nailmaster\": \"Howling Cliffs: Nailmaster Mato\",\r\n \"Mines_01\": \"Crystal Peak: Desolate Dive Entrance\",\r\n \"Mines_02\": \"Crystal Peak: Dark Entrance\",\r\n \"Mines_03\": \"Crystal Peak: Spike Grub\",\r\n \"Mines_04\": \"Crystal Peak: Conveyor Belts Entrance\",\r\n \"Mines_05\": \"Crystal Peak: Above Spike Grub\",\r\n \"Mines_06\": \"Crystal Peak: Deep Focus Gauntlet\",\r\n \"Mines_07\": \"Crystal Peak: Platform Dark Room to Resting Grounds\",\r\n \"Mines_10\": \"Crystal Peak: Dirtmouth Elevator Exit\",\r\n \"Mines_11\": \"Crystal Peak: Left Of Crystal Guardian\",\r\n \"Mines_13\": \"Crystal Peak: Top Corridor\",\r\n \"Mines_16\": \"Crystal Peak: Grub Mimic\",\r\n \"Mines_17\": \"Crystal Peak: Corridor to Spike Grub\",\r\n \"Mines_18\": \"Crystal Peak: Crystal Guardian Bench\",\r\n \"Mines_19\": \"Crystal Peak: Grub Crushers\",\r\n \"Mines_20\": \"Crystal Peak: Right Tall Room\",\r\n \"Mines_23\": \"Crystal Peak: Hallownest Crown Whispering Root\",\r\n \"Mines_24\": \"Crystal Peak: Hallownest Crown Grub\",\r\n \"Mines_25\": \"Crystal Peak: Hallownest Crown Climb\",\r\n \"Mines_28\": \"Crystal Peak: Outside Crystallized Mound\",\r\n \"Mines_29\": \"Crystal Peak: Dark Bench Room\",\r\n \"Mines_30\": \"Crystal Peak: Cornifer\",\r\n \"Mines_31\": \"Crystal Peak: Crystal Heart Gauntlet\",\r\n \"Mines_32\": \"Crystal Peak: Enraged Guardian Arena\",\r\n \"Mines_33\": \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n \"Mines_34\": \"Crystal Peak: Hallownest Crown Peak\",\r\n \"Mines_35\": \"Crystal Peak: Crystallized Mound\",\r\n \"Mines_36\": \"Crystal Peak: Deep Focus Room\",\r\n \"Mines_37\": \"Crystal Peak: Chest Crushers\",\r\n \"Abyss_02\": \"Ancient Basin: Broken Bridge\",\r\n \"Abyss_03\": \"Ancient Basin: Tram\",\r\n \"Abyss_04\": \"Ancient Basin: Fountain\",\r\n \"Abyss_05\": \"Ancient Basin: Palace Grounds\",\r\n \"Abyss_17\": \"Ancient Basin: Cloth\",\r\n \"Abyss_18\": \"Ancient Basin: Corridor to Broken Vessel\",\r\n \"Abyss_19\": \"Ancient Basin: Broken Vessel Grub\",\r\n \"Abyss_20\": \"Ancient Basin: Simple Key\",\r\n \"Abyss_21\": \"Ancient Basin: Monarch Wings\",\r\n \"Abyss_22\": \"Ancient Basin: Hidden Station\",\r\n \"Abyss_06_Core\": \"The Abyss: Main/Core Area\",\r\n \"Abyss_08\": \"The Abyss: Lifeblood Core Room\",\r\n \"Abyss_09\": \"The Abyss: Lighthouse Climb\",\r\n \"Abyss_10\": \"The Abyss: Shade Cloak\",\r\n \"Abyss_12\": \"The Abyss: Abyss Shriek Room\",\r\n \"Abyss_15\": \"The Abyss: Birthplace\",\r\n \"Abyss_16\": \"The Abyss: Corridor to Lighthouse\",\r\n \"Abyss_Lighthouse_room\": \"The Abyss: Inside Lighthouse\",\r\n \"Crossroads_46b\": \"Resting Grounds: Tram\",\r\n \"Crossroads_50\": \"Resting Grounds: Blue Lake\",\r\n \"RestingGrounds_02\": \"Resting Grounds: Xero\",\r\n \"RestingGrounds_04\": \"Resting Grounds: Dream Nail Entrance\",\r\n \"RestingGrounds_05\": \"Resting Grounds: Whispering Root\",\r\n \"RestingGrounds_06\": \"Resting Grounds: Corridor Below Xero\",\r\n \"RestingGrounds_07\": \"Resting Grounds: Seer\",\r\n \"RestingGrounds_08\": \"Resting Grounds: Spirit's Glade\",\r\n \"RestingGrounds_09\": \"Resting Grounds: Stag Station\",\r\n \"RestingGrounds_10\": \"Resting Grounds: Crypts\",\r\n \"RestingGrounds_12\": \"Resting Grounds: Grey Mourner Bench\",\r\n \"RestingGrounds_17\": \"Resting Grounds: Dreamshield Room\",\r\n \"Room_Mansion\": \"Resting Grounds: Grey Mourner Room\",\r\n \"Ruins2_10\": \"Resting Grounds: Elevator\",\r\n \"Abyss_03_c\": \"Kingdom's Edge: Tram\",\r\n \"Deepnest_East_01\": \"Kingdom's Edge: Left of The Hive\",\r\n \"Deepnest_East_02\": \"Kingdom's Edge: Above The Hive\",\r\n \"Deepnest_East_03\": \"Kingdom's Edge: Entrance\",\r\n \"Deepnest_East_04\": \"Kingdom's Edge: Bardoon\",\r\n \"Deepnest_East_06\": \"Kingdom's Edge: Outside Nailmaster Oro\",\r\n \"Deepnest_East_07\": \"Kingdom's Edge: Whispering Root\",\r\n \"Deepnest_East_08\": \"Kingdom's Edge: Great Hopper King's Idol\",\r\n \"Deepnest_East_09\": \"Kingdom's Edge: Corridor Outside Colosseum of Fools\",\r\n \"Deepnest_East_10\": \"Kingdom's Edge: Markoth Arena\",\r\n \"Deepnest_East_11\": \"Kingdom's Edge: Below Camp Bench\",\r\n \"Deepnest_East_12\": \"Kingdom's Edge: Hornet Sentinel Corridor\",\r\n \"Deepnest_East_13\": \"Kingdom's Edge: Camp Bench\",\r\n \"Deepnest_East_14\": \"Kingdom's Edge: Below Nailmaster Oro\",\r\n \"Deepnest_East_14b\": \"Kingdom's Edge: Quick Slash Room\",\r\n \"Deepnest_East_15\": \"Kingdom's Edge: Lifeblood Room\",\r\n \"Deepnest_East_16\": \"Kingdom's Edge: Nailmaster Oro Scarecrow\",\r\n \"Deepnest_East_17\": \"Kingdom's Edge: 420 Geo Rock\",\r\n \"Deepnest_East_18\": \"Kingdom's Edge: Left of Markoth\",\r\n \"Deepnest_East_Hornet\": \"Kingdom's Edge: Hornet Sentinel Arena\",\r\n \"GG_Lurker\": \"Kingdom's Edge: Pale Lurker Arena\",\r\n \"Room_Colosseum_01\": \"Kingdom's Edge: Colosseum of Fools Entrance\",\r\n \"Room_Colosseum_02\": \"Kingdom's Edge: Colosseum of Fools Bench\",\r\n \"Room_Colosseum_Bronze\": \"Colosseum of Fools: Trial of the Warrior Arena\",\r\n \"Room_Colosseum_Gold\": \"Colosseum of Fools: Trial of the Fool Arena\",\r\n \"Room_Colosseum_Silver\": \"Colosseum of Fools: Trial of the Conqueror Arena\",\r\n \"Room_Colosseum_Spectate\": \"Kingdom's Edge: Colosseum Spectators\",\r\n \"Room_nailmaster_03\": \"Kingdom's Edge: Nailmaster Oro Room\",\r\n \"Room_Wyrm\": \"Kingdom's Edge: Cast-Off Shell\",\r\n \"Abyss_01\": \"City of Tears: Broken Elevator\",\r\n \"Crossroads_49b\": \"City of Tears: Elevator to Forgotten Crossroads\",\r\n \"Room_nailsmith\": \"City of Tears: Nailsmith\",\r\n \"Ruins_Bathhouse\": \"City of Tears: Pleasure House Bench\",\r\n \"Ruins_Elevator\": \"City of Tears: Pleasure House Elevator\",\r\n \"Ruins_House_01\": \"City of Tears: Guarded Grub Room\",\r\n \"Ruins_House_02\": \"City of Tears: Gorgeous Husk Room\",\r\n \"Ruins_House_03\": \"City of Tears: Emilitia Room\",\r\n \"Ruins1_01\": \"City of Tears: Pilgrim's Way Entrance\",\r\n \"Ruins1_02\": \"City of Tears: Quirrel Bench\",\r\n \"Ruins1_03\": \"City of Tears: Rafters\",\r\n \"Ruins1_04\": \"City of Tears: Outside Nailsmith\",\r\n \"Ruins1_05\": \"City of Tears: Grub Above Lemm\",\r\n \"Ruins1_05b\": \"City of Tears: Lemm Room\",\r\n \"Ruins1_05c\": \"City of Tears: Rancid Egg Above Lemm\",\r\n \"Ruins1_06\": \"City of Tears: Corridor to City Storerooms\",\r\n \"Ruins1_09\": \"City of Tears: Soul Twister Arena\",\r\n \"Ruins1_17\": \"City of Tears: Whispering Root\",\r\n \"Ruins1_18\": \"City of Tears: Corridor to Watcher's Spire\",\r\n \"Ruins1_23\": \"City of Tears: Soul Sanctum Entrance\",\r\n \"Ruins1_24\": \"City of Tears: Soul Master Arena\",\r\n \"Ruins1_25\": \"City of Tears: Soul Sanctum Right Elevators\",\r\n \"Ruins1_27\": \"City of Tears: Hollow Knight Fountain\",\r\n \"Ruins1_28\": \"City of Tears: City Storerooms\",\r\n \"Ruins1_29\": \"City of Tears: City Storerooms Stag Station\",\r\n \"Ruins1_30\": \"City of Tears: Soul Sanctum Spell Twister Room\",\r\n \"Ruins1_31\": \"City of Tears: Toll Bench Cornifer\",\r\n \"Ruins1_31b\": \"City of Tears: Shade Soul Arena\",\r\n \"Ruins1_32\": \"City of Tears: Soul Master Rewards Room\",\r\n \"Ruins2_01\": \"City of Tears: Watcher's Spire Second Floor\",\r\n \"Ruins2_01_b\": \"City of Tears: Watcher's Spire First Floor\",\r\n \"Ruins2_03\": \"City of Tears: Watcher's Spire Fourth Floor\",\r\n \"Ruins2_03b\": \"City of Tears: Watcher's Spire Third Floor\",\r\n \"Ruins2_04\": \"City of Tears: Right Hub\",\r\n \"Ruins2_05\": \"City of Tears: Above King's Station\",\r\n \"Ruins2_06\": \"City of Tears: King's Station\",\r\n \"Ruins2_07\": \"City of Tears: Grub Below King's Station\",\r\n \"Ruins2_08\": \"City of Tears: King's Station Stag Station\",\r\n \"Ruins2_09\": \"City of Tears: King's Station Vessel Fragment\",\r\n \"Ruins2_10b\": \"City of Tears: Right Elevator\",\r\n \"Ruins2_11\": \"City of Tears: The Collector Arena\",\r\n \"Ruins2_11_b\": \"City of Tears: Tower of Love\",\r\n \"Ruins2_Watcher_Room\": \"City of Tears: Lurien Elevator\",\r\n \"Hive_01\": \"The Hive: Entrance\",\r\n \"Hive_02\": \"The Hive: Whispering Root\",\r\n \"Hive_03\": \"The Hive: Outside Grub\",\r\n \"Hive_03_c\": \"The Hive: Outside Shortcut\",\r\n \"Hive_04\": \"The Hive: Mask Shard Room\",\r\n \"Hive_05\": \"The Hive: Hive Knight Arena\",\r\n \"GG_Pipeway\": \"Royal Waterways: Flukemunga Corridor\",\r\n \"GG_Waterways\": \"Royal Waterways: Junk Pit\",\r\n \"Room_GG_Shortcut\": \"Royal Waterways: Fluke Hermit Room\",\r\n \"Waterways_01\": \"Royal Waterways: Entrance\",\r\n \"Waterways_02\": \"Royal Waterways: Main Bench\",\r\n \"Waterways_03\": \"Royal Waterways: Tuk Room\",\r\n \"Waterways_04\": \"Royal Waterways: Hidden Grub Room\",\r\n \"Waterways_04b\": \"Royal Waterways: Mask Shard Room\",\r\n \"Waterways_05\": \"Royal Waterways: Dung Defender Arena\",\r\n \"Waterways_06\": \"Royal Waterways: Corridor to Broken Elevator\",\r\n \"Waterways_07\": \"Royal Waterways: Left of Isma's Grove\",\r\n \"Waterways_08\": \"Royal Waterways: Outside Flukemarm\",\r\n \"Waterways_09\": \"Royal Waterways: Cornifer\",\r\n \"Waterways_12\": \"Royal Waterways: Flukemarm Arena\",\r\n \"Waterways_13\": \"Royal Waterways: Isma's Grove\",\r\n \"Waterways_14\": \"Royal Waterways: Kingdom's Edge Acid Corridor\",\r\n \"Waterways_15\": \"Royal Waterways: Dung Defender's Cave\",\r\n \"Abyss_03_b\": \"Deepnest: Tram\",\r\n \"Deepnest_01b\": \"Deepnest: Upper Cornifer\",\r\n \"Deepnest_02\": \"Deepnest: Outside Grub Mimics\",\r\n \"Deepnest_03\": \"Deepnest: Left of Hot Spring\",\r\n \"Deepnest_09\": \"Deepnest: Distant Village Stag Station\",\r\n \"Deepnest_10\": \"Deepnest: Distant Village\",\r\n \"Deepnest_14\": \"Deepnest: Failed Tramway Bench\",\r\n \"Deepnest_16\": \"Deepnest: Room Above Lower Cornifer\",\r\n \"Deepnest_17\": \"Deepnest: Garpede Corridor Below Cornifer\",\r\n \"Deepnest_26\": \"Deepnest: Failed Tramway Lifeblood\",\r\n \"Deepnest_26b\": \"Deepnest: Tram Pass Room\",\r\n \"Deepnest_30\": \"Deepnest: Hot Spring\",\r\n \"Deepnest_31\": \"Deepnest: Nosk Corridor\",\r\n \"Deepnest_32\": \"Deepnest: Nosk Arena\",\r\n \"Deepnest_33\": \"Deepnest: Zote Arena\",\r\n \"Deepnest_34\": \"Deepnest: First Devout\",\r\n \"Deepnest_35\": \"Deepnest: Outside Galien\",\r\n \"Deepnest_36\": \"Deepnest: Grub Mimics\",\r\n \"Deepnest_37\": \"Deepnest: Corridor to Tram\",\r\n \"Deepnest_38\": \"Deepnest: Vessel Fragment Challenge Room\",\r\n \"Deepnest_39\": \"Deepnest: Whispering Root\",\r\n \"Deepnest_40\": \"Deepnest: Galien Arena\",\r\n \"Deepnest_41\": \"Deepnest: Midwife Room\",\r\n \"Deepnest_42\": \"Deepnest: Outside Mask Maker\",\r\n \"Deepnest_44\": \"Deepnest: Sharp Shadow Room\",\r\n \"Deepnest_45_v02\": \"Deepnest: Weaver's Den\",\r\n \"Deepnest_Spider_Town\": \"Deepnest: Beast's Den\",\r\n \"Fungus2_25\": \"Deepnest: Lower Cornifer\",\r\n \"Room_Mask_Maker\": \"Deepnest: Mask Maker Room\",\r\n \"Room_spider_small\": \"Deepnest: Brumm Room\",\r\n \"Deepnest_43\": \"Queen's Gardens: Corridor To Deepnest\",\r\n \"Fungus1_23\": \"Queen's Gardens: First Loodle Corridor\",\r\n \"Fungus1_24\": \"Queen's Gardens: Cornifer Room\",\r\n \"Fungus3_04\": \"Queen's Gardens: Before Petra Arena\",\r\n \"Fungus3_05\": \"Queen's Gardens: Petra Arena\",\r\n \"Fungus3_08\": \"Queen's Gardens: Lower Petra Corridor\",\r\n \"Fungus3_10\": \"Queen's Gardens: Main Arena\",\r\n \"Fungus3_11\": \"Queen's Gardens: Whispering Root\",\r\n \"Fungus3_13\": \"Queen's Gardens: Outside Stag Station\",\r\n \"Fungus3_21\": \"Queen's Gardens: Corridor to Traitor Lord\",\r\n \"Fungus3_22\": \"Queen's Gardens: Upper Grub Room\",\r\n \"Fungus3_23\": \"Queen's Gardens: Traitor Lord Arena\",\r\n \"Fungus3_34\": \"Queen's Gardens: Entrance from Fog Canyon\",\r\n \"Fungus3_39\": \"Queen's Gardens: Moss Prophet Room\",\r\n \"Fungus3_49\": \"Queen's Gardens: Traitor's Child Grave\",\r\n \"Fungus3_40\": \"Queen's Gardens: Stag Station\",\r\n \"Fungus3_48\": \"Queen's Gardens: Outside White Lady\",\r\n \"Fungus3_50\": \"Queen's Gardens: Toll Bench\",\r\n \"Room_Queen\": \"Queen's Gardens: White Lady Room\",\r\n \"White_Palace_01\": \"White Palace: Entrance\",\r\n \"White_Palace_02\": \"White Palace: First Kingsmould\",\r\n \"White_Palace_03_hub\": \"White Palace: Main Hub\",\r\n \"White_Palace_04\": \"White Palace: Left of Main Hub\",\r\n \"White_Palace_05\": \"White Palace: Saw Room\",\r\n \"White_Palace_06\": \"White Palace: Balcony\",\r\n \"White_Palace_07\": \"White Palace: Lamp Pogo Room\",\r\n \"White_Palace_08\": \"White Palace: Pale King's Workshop\",\r\n \"White_Palace_09\": \"White Palace: Throne Room\",\r\n \"White_Palace_11\": \"White Palace: Outside\",\r\n \"White_Palace_12\": \"White Palace: Spike Drop Room\",\r\n \"White_Palace_13\": \"White Palace: Thorn Jump Room\",\r\n \"White_Palace_14\": \"White Palace: Hell Corridor\",\r\n \"White_Palace_15\": \"White Palace: Caged Lever Room\",\r\n \"White_Palace_16\": \"White Palace: Saw Climb Room\",\r\n \"White_Palace_17\": \"White Palace: Path of Pain, Lever\",\r\n \"White_Palace_18\": \"White Palace: Path of Pain, Entrance\",\r\n \"White_Palace_19\": \"White Palace: Path of Pain, Vertical\",\r\n \"White_Palace_20\": \"White Palace: Path of Pain, Final\",\r\n \"Dream_Final_Boss\": \"Temple of the Black Egg: Radiance Room\",\r\n \"Room_Final_Boss_Atrium\": \"Temple of the Black Egg: Bench Room\",\r\n \"Room_Final_Boss_Core\": \"Temple of the Black Egg: Hollow Knight Room\",\r\n \"Grimm_Divine\": \"Dirtmouth: Divine's Tent\",\r\n \"Grimm_Main_Tent\": \"Dirtmouth: Grimm's Tent\",\r\n \"Grimm_Nightmare\": \"Dream: Nightmare King Room\",\r\n \"Dream_01_False_Knight\": \"Dream: Failed Champion Room\",\r\n \"Dream_02_Mage_Lord\": \"Dream: Soul Tyrant Room\",\r\n \"Dream_03_Infected_Knight\": \"Dream: Lost Kin Room\",\r\n \"Dream_04_White_Defender\": \"Dream: White Defender Room\",\r\n \"Dream_Abyss\": \"Dream: Abyss\",\r\n \"Dream_Backer_Shrine\": \"Dream: Outside Shrine of Believers\",\r\n \"Dream_Guardian_Hegemol\": \"Dream: Herrah Room\",\r\n \"Dream_Guardian_Lurien\": \"Dream: Lurien Room\",\r\n \"Dream_Guardian_Monomon\": \"Dream: Monomon Room\",\r\n \"Dream_Mighty_Zote\": \"Dream: Grey Prince Zote Room\",\r\n \"Dream_Nailcollection\": \"Dream: Dreamnail Room\",\r\n \"Dream_Room_Believer_Shrine\": \"Dream: Shrine of Believers\",\r\n \"GG_Atrium\": \"Godhome: Atrium\",\r\n \"GG_Atrium_Roof\": \"Godhome: Roof\",\r\n \"GG_Blue_Room\": \"Godhome: Lifeblood Room\",\r\n \"GG_Land_Of_Storms\": \"Godhome: Land of Storms\",\r\n \"GG_Mighty_Zote\": \"Godhome: Zote Eternal Ordeal\",\r\n \"GG_Unlock_Wastes\": \"Godhome: Godtuner Room\",\r\n \"GG_Workshop\": \"Godhome: Hall of Gods\"\r\n};\r\n\r\nexport default MAP;","/* ---------------- Load main Hollow Knight database files ----------------- */\r\n\r\nimport MAP from \"./hk-dictionary.js\";\r\n\r\n/* -------------------------- Functions ----------------------------- */\r\n\r\n/**\r\n * Switches global variable to a \"completed\" symbol. Adds +1 or +2 to percent property.\r\n */\r\n function SetIconGreen(section = {}, entry = \"\") {\r\n\r\n /* Increase section percentage except the Game Status and Hints sections */\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n case \"hk-hints\":\r\n break;\r\n\r\n // Hunter's Journal entries\r\n case \"hk-journal\":\r\n section.percent++;\r\n section.midPercent++;\r\n break;\r\n\r\n default:\r\n section.percent++;\r\n }\r\n\r\n section.entries[entry].icon = \"green\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a \"partially completed\" symbol (prevents blurring the textPrefix).\r\n */\r\nfunction SetIconPartial(section = {}, entry = \"\") {\r\n\r\n section.entries[entry].icon = \"partial\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a \"partially completed\" symbol (prevents blurring whole entry).\r\n */\r\nfunction SetIconPartialJournal(section = {}, entry = \"\") {\r\n\r\n /* Increase Hunter's Journal entries discovered amount */\r\n switch (section.id) {\r\n\r\n case \"hk-journal\":\r\n section.midPercent++;\r\n break;\r\n }\r\n\r\n section.entries[entry].icon = \"partialJournal\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a \"not completed\" symbol\r\n */\r\nfunction SetIconRed(section = {}, entry = \"\") {\r\n\r\n section.entries[entry].icon = \"red\";\r\n}\r\n\r\n/**\r\n * Switches global variable to no symbol (span with left padding)\r\n */\r\nfunction SetIconNone(section = {}, entry = \"\") {\r\n\r\n section.entries[entry].icon = \"none\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a chosen symbol\r\n */\r\n function SetIcon(section = {}, entry = \"\", icon = \"\") {\r\n\r\n section.entries[entry].icon = icon;\r\n}\r\n\r\n/**\r\n * Checks the length of a JavaScript Object like Array.length\r\n * @param {object} object JavaScript Object\r\n * @return {number} length of the Object\r\n */\r\nfunction ObjectLength(object) {\r\n let length = 0;\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n ++length;\r\n }\r\n }\r\n return length;\r\n}\r\n\r\n/**\r\n * Returns a translated map location name string.\r\n * @param {string} mapCode Code of the Hollow Knight map location the game developers use\r\n * @param {object} dictionary Main data source for translation\r\n */\r\nfunction TranslateMapName(mapCode, dictionary = MAP) {\r\n\r\n let translation = mapCode;\r\n if (dictionary.hasOwnProperty(mapCode)) translation = dictionary[mapCode];\r\n\r\n return translation;\r\n}\r\n\r\n/**\r\n * Generates database entries text. Provides an easy filling solution.\r\n * @param {array} objectArray \r\n * @param {string} searchText \r\n * @param {string} entryName \r\n * @param {string} entryDB \r\n * @param {string} wiki \r\n */\r\nfunction GenerateDatabaseEntries(objectArray, searchText = \"\", entryName = \"\", entryDB = \"\", wiki = \"\") {\r\n\r\n let fillText = \"\";\r\n let count = 0;\r\n\r\n for (let i = 0, ln = objectArray.length; i < ln; i++) {\r\n\r\n /* if (objectArray[i].id.includes(searchText)) { */\r\n if (objectArray[i].id === searchText) {\r\n\r\n count++;\r\n\r\n fillText += `\r\n ${entryDB}${count}: {\r\n name: \"${entryName} #${count}\",\r\n spoiler: \"${TranslateMapName(objectArray[i].sceneName)}\",\r\n id: \"${objectArray[i].id}\",\r\n sceneName: \"${objectArray[i].sceneName}\",\r\n wiki: \"${wiki}\"\r\n },`;\r\n }\r\n }\r\n\r\n return fillText;\r\n}\r\n\r\n/* ------------------------- Exports ------------------------------- */\r\n\r\nexport {\r\n SetIconGreen,\r\n SetIconPartial,\r\n SetIconPartialJournal,\r\n SetIconRed,\r\n SetIconNone,\r\n SetIcon,\r\n ObjectLength,\r\n TranslateMapName,\r\n GenerateDatabaseEntries\r\n};","import {\r\n LoadSaveFile\r\n} from \"./LoadSaveFile.js\";\r\n\r\n/* ------------------------ Load image files (necessary for Webpack) ---------------------------------------------------------- */\r\n\r\nimport HEALTH_MASK_IMAGE from \"../img/health-mask.png\";\r\nimport HEALTH_MASK_STEEL_IMAGE from \"../img/health-mask-steel.png\";\r\nimport SILKBAR_LEFT_IMAGE from \"../img/silkbar-left.png\";\r\nimport SILKBAR_MIDDLE_IMAGE from \"../img/silkbar-middle.png\";\r\nimport SILKBAR_RIGHT_IMAGE from \"../img/silkbar-right.png\";\r\n/*import NOTCH_IMAGE from \"../img/notch.png\";\r\nimport NOTCH_FILLED_IMAGE from \"../img/notch-filled.png\";\r\nimport NOTCH_OVERCHARMED_IMAGE from \"../img/notch-overcharmed.png\";*/\r\nimport ROSARIES_IMAGE from \"../img/rosaries.png\";\r\nimport ROSARIES_SHADE_IMAGE from \"../img/cocoon.png\";\r\nimport SHELL_SHARDS_IMAGE from \"../img/shell-shards.png\";\r\n\r\n/* ------------------------ Crest Type ---------------------------------------------------------- */\r\n\r\nimport ARCHITECT_CREST_IMAGE from \"../img/architect-crest.png\";\r\nimport BEAST_CREST_IMAGE from \"../img/beast-crest.png\";\r\nimport HUNTER_CREST_IMAGE from \"../img/hunter-crest.png\";\r\nimport REAPER_CREST_IMAGE from \"../img/reaper-crest.png\";\r\nimport SHAMAN_CREST_IMAGE from \"../img/shaman-crest.png\";\r\nimport WANDERER_CREST_IMAGE from \"../img/wanderer-crest.png\";\r\nimport WITCH_CREST_IMAGE from \"../img/witch-crest.png\";\r\n\r\n/* ------------------------- Constants ---------------------------------------------------------------------------------------- */\r\n\r\n// const DATA_UNKNOWN = \"Data unknown\";\r\nconst SYMBOL_FALSE = \"\"; // \"❌ \"\r\nconst SYMBOL_TRUE = \"\"; // \"✅ \"\r\nconst SYMBOL_PARTIAL = \"\"; // \"✔ \"\r\nconst SYMBOL_CLOCK = \"\"; // \"🕑 \"\r\nconst SYMBOL_FILE = \"\"; // \"📁\"\r\nconst SYMBOL_BINDING_NAIL = \"\"; // Nail Binding\r\nconst SYMBOL_BINDING_SHELL = \"\"; // Shell Binding\r\nconst SYMBOL_BINDING_CHARMS = \"\"; // Charm Binding\r\nconst SYMBOL_BINDING_SOUL = \"\"; // Soul Binding\r\nconst SYMBOL_BINDING_ALL = \"\"; // All Bindings\r\nconst SYMBOL_ATTUNED = \"\"; // Attuned\r\nconst SYMBOL_ASCENDED = \"\"; // Ascended\r\nconst SYMBOL_RADIANT = \"\"; // Radiant\r\nconst SYMBOL_EMPTY = \"\"; // No symbol\r\nconst FLEUR_DIVIDE = \"\";\r\nconst WIKI_LINK = \"https://hollowknightsilksong.wiki.fextralife.com/\";\r\n\r\nconst ROOT = document.documentElement;\r\nconst SCROLL_BUTTON = document.querySelector(\".scroll-up-button\");\r\n\r\n/* -------------------------- Variables --------------------------------------------------------------------------------------- */\r\n\r\nlet benchmarkTimes = {\r\n LoadSaveFile: {\r\n name: \"LoadSaveFile()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n CheckCompletion: {\r\n name: \"HKCheckCompletion()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n GenerateInnerHTML: {\r\n name: \"GenerateInnerHTML()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n HKReadTextArea: {\r\n name: \"HKReadTextArea()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n Total: {\r\n name: \"Total\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n }\r\n};\r\n\r\n\r\n/* ######################################################################################### */\r\n\r\nfunction Benchmark(bench) {\r\n\r\n let result = 0;\r\n\r\n for (let time in bench) {\r\n\r\n if (bench[time].timeStart !== 0 && bench[time].timeEnd !== 0) {\r\n\r\n result = bench[time].timeEnd - bench[time].timeStart;\r\n console.info(`${bench[time].name} time (ms) = %c${result.toFixed(2)}`, `color: #008cdc; font-weight: 700;`);\r\n }\r\n bench[time].timeStart = 0;\r\n bench[time].timeEnd = 0;\r\n }\r\n}\r\n\r\nfunction ScrollToElement(element) {\r\n\r\n /* Scroll to the element top */\r\n element.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\"\r\n });\r\n}\r\n\r\nfunction ShowElement(element) {\r\n\r\n element.classList.add(\"visible-block\");\r\n element.classList.add(\"opacity-full\");\r\n element.classList.remove(\"hidden\");\r\n}\r\n\r\nfunction HideElement(element) {\r\n\r\n element.classList.remove(\"visible-block\");\r\n element.classList.remove(\"opacity-full\");\r\n element.classList.add(\"hidden\");\r\n}\r\n\r\nfunction TogglePageScrollElement(root, element, ratio) {\r\n\r\n /* Maximum number of pixels that can be scrolled by the user */\r\n let scrollTotal = root.scrollHeight - root.clientHeight;\r\n\r\n if ((root.scrollTop / scrollTotal) > ratio) {\r\n /* Show button */\r\n ShowElement(element);\r\n } else {\r\n /* Hide button */\r\n HideElement(element);\r\n }\r\n}\r\n\r\n\r\n/* ################################### Optimized Functions ########################################################################## */\r\n\r\n\r\nfunction GenerateInnerHTML(db) {\r\n\r\n // start benchmarking\r\n benchmarkTimes.GenerateInnerHTML.timeStart = performance.now();\r\n\r\n let sections = db.sections;\r\n\r\n /* console.log(sections); */\r\n\r\n let entries = {};\r\n let obj = {\r\n icon: \"\",\r\n iconClass: \"\",\r\n textPrefix: \"\",\r\n textSuffix: \"\",\r\n wiki: \"\",\r\n div: `
`,\r\n b: [\"\", \"\"],\r\n p: \"\",\r\n span: [\"\", \"\"],\r\n spoiler: [\"\", \"\"],\r\n spoilerAfter: \"\",\r\n };\r\n\r\n let finalHTMLFill = \"\";\r\n let textFill = \"\";\r\n\r\n let Img = \"\";SILKBAR_LEFT_IMAGE\r\n let maskNormal = ``;\r\n let maskSteel = ``;\r\n let silkBarLeft = ``;\r\n let silkBarMiddle = ``;\r\n let silkBarRight = ``;\r\n //let notchNormalImage = ``;\r\n //let notchFilledImage = ``;\r\n //let notchOvercharmedImage = ``;\r\n let rosariesNormalImage = ``;\r\n let rosariesShadeImage = ``;\r\n let shellShardsImage = ``;\r\n let div = `
`;\r\n let divFlex = `
`;\r\n\r\n //Crest\r\n let hunterCrestImage = ``;\r\n let architectCrestImage = ``;\r\n let beastCrestImage = ``;\r\n let reaperCrestImage = ``;\r\n let shamanCrestImage = ``;\r\n let wandererCrestImage = ``;\r\n let witchCrestImage = ``;\r\n\r\n\r\n SHELL_SHARDS_IMAGE\r\n\r\n /* ############################## create all main entries ########################################################################## */\r\n\r\n\r\n for (let section in sections) {\r\n\r\n textFill = \"\";\r\n\r\n /* ############################# Tab Switch buttons and Large Section
s for switching ############################## */\r\n /* Important: Ending Tab
s are at \"End the Tab divs\" */\r\n\r\n switch (section) {\r\n\r\n /* Main % */\r\n case \"crests\":\r\n\r\n textFill += [\r\n `
`;*/\r\n\r\n break;\r\n }\r\n\r\n entries = sections[section].entries;\r\n\r\n /* ####################### Section div id start ########################## */\r\n\r\n /* starts a new
with the current section id */\r\n textFill += SectionStart(sections[section]);\r\n\r\n /* creates a
tag for the current section and fills with current%/max%\r\n If the save file was not analyzed, then fill only max% on blue background */\r\n if (db.saveAnalyzed === true) {\r\n textFill += CompletionFill(sections[section]);\r\n } else {\r\n textFill += CompletionFillNoSave(sections[section]);\r\n }\r\n\r\n\r\n /* ######################## Different behaviour depending on the section ###################################################### */\r\n\r\n\r\n switch (section) {\r\n\r\n /* ############### Game Status (intro) ################ */\r\n\r\n case \"intro\":\r\n\r\n /* ############## Create each single entry (intro) ############### */\r\n\r\n for (let entry in entries) {\r\n\r\n obj.b = [\"\", \"\"];\r\n obj.p = \"\";\r\n obj.span = [\"\", \"\"];\r\n obj.div = div;\r\n\r\n /* -------- Icons (next to each entry) --------- */\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n\r\n switch (entries[entry].icon) {\r\n\r\n case \"clock\":\r\n obj.icon = SYMBOL_CLOCK;\r\n break;\r\n case \"green\":\r\n obj.icon = SYMBOL_TRUE;\r\n break;\r\n case \"partial\":\r\n obj.icon = SYMBOL_PARTIAL;\r\n break;\r\n case \"revealed\":\r\n obj.icon = SYMBOL_EMPTY;\r\n break;\r\n case \"red\":\r\n obj.icon = SYMBOL_FALSE;\r\n break;\r\n default:\r\n obj.icon = SYMBOL_EMPTY;\r\n }\r\n } else {\r\n obj.icon = SYMBOL_FALSE;\r\n }\r\n\r\n obj.textPrefix = entries[entry].name;\r\n obj.textSuffix = entries[entry].spoiler;\r\n obj.spoilerAfter = \"\";\r\n\r\n /* Different text and images for each entry in the \"Game Status\" (intro) section */\r\n\r\n switch (entry) {\r\n case \"gameCompletion\":\r\n obj.textSuffix = `${obj.textSuffix} %`;\r\n obj.spoilerAfter = ` ${entries[entry].spoilerAfter}`;\r\n obj.span[1] = \"\";\r\n\r\n break;\r\n\r\n case \"gameCompletionExtended\":\r\n obj.spoilerAfter = ` ${entries[entry].spoilerAfter}`;\r\n obj.span[1] = \"\";\r\n\r\n break;\r\n\r\n case \"health\":\r\n\r\n /* ----------------- Horizontal Line after save version ---------------- */\r\n textFill += FLEUR_DIVIDE;\r\n\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n (entries[entry].permadeathMode) ? Img = maskSteel: Img = maskNormal;\r\n\r\n for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += Img;\r\n }\r\n\r\n obj.textSuffix += `${obj.p}(${entries[entry].amountTotal})`;\r\n\r\n obj.p = \"\";\r\n break;\r\n\r\n case \"silk\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n Img = silkBarMiddle;\r\n\r\n obj.textSuffix += silkBarLeft;\r\n\r\n for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += Img;\r\n }\r\n obj.textSuffix += silkBarRight\r\n\r\n\r\n obj.textSuffix += `${obj.p}(${entries[entry].amountTotal})`;\r\n\r\n obj.p = \"\";\r\n break;\r\n\r\n case \"crests\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n /* First, check filled (used) notches and fill them (skips if no filled notches) */\r\n /*if (entries[entry].amountFilled > 0) {\r\n for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += notchFilledImage;\r\n }\r\n }*/\r\n\r\n /* Second, check overcharmed notches and fill them (skips if player is not overcharmed) */\r\n /*if (entries[entry].amountOvercharmed > 0) {\r\n for (let i = 0, total = entries[entry].amountOvercharmed; i < total; i++) {\r\n obj.textSuffix += notchOvercharmedImage;\r\n }\r\n }*/\r\n\r\n /* Last, fill all unused notches */\r\n /*if (entries[entry].amountUnused > 0) {\r\n for (let i = 0, total = entries[entry].amountUnused; i < total; i++) {\r\n obj.textSuffix += notchNormalImage;\r\n }\r\n }*/\r\n \r\n /*for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += notchNormalImage;\r\n }*/\r\n\r\n if (entries[entry].hunter) obj.textSuffix += hunterCrestImage;\r\n if (entries[entry].toolmaster) obj.textSuffix += architectCrestImage ;\r\n if (entries[entry].beast) obj.textSuffix += beastCrestImage ;\r\n if (entries[entry].reaper) obj.textSuffix += reaperCrestImage ;\r\n if (entries[entry].shaman) obj.textSuffix += shamanCrestImage ;\r\n if (entries[entry].wanderer) obj.textSuffix += wandererCrestImage ;\r\n if (entries[entry].witch) obj.textSuffix += witchCrestImage ;\r\n\r\n\r\n obj.textSuffix += `${obj.p}(${entries[entry].amountTotal})`;\r\n\r\n break;\r\n\r\n case \"rosaries\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n obj.textSuffix += `${rosariesNormalImage}${entries[entry].amount}`;\r\n // Show Shade Rosaries value and image only if Shade has at least 1 Rosary on it\r\n if (entries[entry].amountShade > 0) obj.textSuffix += `${obj.p}+${rosariesShadeImage}${entries[entry].amountShade}`;\r\n\r\n // Show also total Rosaries (Rosaries + Shade Rosaries) if player has at least 1 Rosary alongside the shade rosaries\r\n if (entries[entry].amount > 0 && entries[entry].amountShade > 0) {\r\n obj.textSuffix += `${obj.p}=${obj.p}${entries[entry].amountTotal}`;\r\n }\r\n\r\n obj.p = \"\";\r\n break;\r\n \r\n case \"shellShards\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n obj.textSuffix += `${shellShardsImage}${entries[entry].amount}`;\r\n\r\n obj.p = \"\";\r\n break;\r\n\r\n default:\r\n }\r\n\r\n textFill += SingleEntryFill(obj);\r\n }\r\n\r\n break;\r\n\r\n /* #################### Hints (hints) #################### */\r\n\r\n case \"hints\":\r\n obj.b = [\"\", \"\"];\r\n obj.span = [\"\", \"\"];\r\n obj.icon = \"\";\r\n obj.textPrefix = \"\";\r\n obj.div = div;\r\n\r\n /* display only one (current) hint */\r\n obj.textSuffix = entries[sections[section].current].spoiler;\r\n\r\n textFill += SingleEntryFill(obj);\r\n\r\n break;\r\n\r\n /* ######################### Create all other sections ################################################################## */\r\n\r\n default:\r\n\r\n /* ###################### Create section descriptions under each H2 title ##################### */\r\n\r\n if (sections[section].hasOwnProperty(\"description\")) {\r\n textFill += SectionDescription(sections[section]);\r\n }\r\n\r\n /* ###################### Create each single entry (from all other sections) ##################### */\r\n\r\n for (let entry in entries) {\r\n\r\n /* obj.p = \"\"; */\r\n obj.p = \"\";\r\n obj.span = [\"\", \"\"];\r\n obj.spoiler = [\"\", \"\"];\r\n obj.div = div;\r\n obj.textPrefix = entries[entry].name;\r\n obj.textSuffix = `— ${entries[entry].spoiler}`;\r\n obj.wiki = entries[entry].wiki;\r\n\r\n /* -------- Icons (next to each entry) --------- */\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n\r\n switch (entries[entry].icon) {\r\n\r\n case \"clock\":\r\n obj.icon = SYMBOL_CLOCK;\r\n break;\r\n\r\n case \"green\":\r\n obj.icon = SYMBOL_TRUE;\r\n\r\n /* -------- Prevents hiding as spoiler when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n\r\n case \"partial\":\r\n obj.icon = SYMBOL_PARTIAL;\r\n break;\r\n\r\n case \"revealed\":\r\n obj.icon = SYMBOL_EMPTY;\r\n /* -------- Prevents textSuffix blurring when a player has already discovered the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n\r\n case \"partialJournal\":\r\n obj.icon = SYMBOL_PARTIAL;\r\n\r\n /* -------- Prevents textSuffix blurring when a player has already discovered the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n\r\n case \"bindingNail\":\r\n obj.icon = SYMBOL_BINDING_NAIL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingShell\":\r\n obj.icon = SYMBOL_BINDING_SHELL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingCharms\":\r\n obj.icon = SYMBOL_BINDING_CHARMS;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingSoul\":\r\n obj.icon = SYMBOL_BINDING_SOUL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingAll\":\r\n obj.icon = SYMBOL_BINDING_ALL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"attuned\":\r\n obj.icon = SYMBOL_ATTUNED;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"ascended\":\r\n obj.icon = SYMBOL_ASCENDED;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"radiant\":\r\n obj.icon = SYMBOL_RADIANT;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"red\":\r\n obj.icon = SYMBOL_FALSE;\r\n break;\r\n\r\n default:\r\n obj.icon = SYMBOL_EMPTY;\r\n }\r\n } else {\r\n obj.icon = SYMBOL_FALSE;\r\n }\r\n\r\n /* assign the appropriate spoiler class name depending on the completion check (for blurring names) */\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n switch (entries[entry].icon) {\r\n\r\n case \"red\":\r\n case \"none\":\r\n obj.iconClass = \" spoiler-red blurred\";\r\n break;\r\n\r\n default:\r\n /* -------- Prevents TextPrefix blurring when a player has already discovered the entry --------- */\r\n obj.iconClass = \"\";\r\n }\r\n } else {\r\n obj.iconClass = \"\";\r\n }\r\n\r\n obj.b = [``, \"\"];\r\n\r\n if (entries[entry].hasOwnProperty(\"amount\")) {\r\n if (entries[entry].hasOwnProperty(\"disabled\")) {\r\n if (entries[entry].disabled !== true) {\r\n obj.textPrefix += `: ${entries[entry].amount}`;\r\n }\r\n } else {\r\n obj.textPrefix += `: ${entries[entry].amount}`;\r\n }\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"amountTotal\")) {\r\n obj.textPrefix += ` / ${entries[entry].amountTotal}`;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"id\")) {\r\n\r\n switch (entries[entry].id) {\r\n\r\n case \"geoRocks\":\r\n case \"itemsDiscovered\":\r\n obj.textPrefix += `: ${entries[entry].notActivated} | ${entries[entry].activated} | ${entries[entry].discoveredTotal}`;\r\n\r\n break;\r\n\r\n default:\r\n }\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"disabled\")) {\r\n if (entries[entry].disabled === true) {\r\n obj.textPrefix = `${obj.textPrefix}`;\r\n }\r\n }\r\n\r\n if (obj.textPrefix.includes(\"\")) obj.textSuffix = `${obj.textSuffix}`;\r\n\r\n /* textFill += SingleEntryFill(section, entries[entry]); */\r\n textFill += SingleEntryFill(obj);\r\n\r\n } /* end for (let entry in entries) */\r\n } /* end switch (section) - central */\r\n\r\n /* ############# Cumulate all section texts into one variable for final HTML filling. End section div tag ############### */\r\n\r\n finalHTMLFill += `${textFill}\\n
\\n\\n`;\r\n\r\n /* ################## End the Tab divs (must be after section ending div) ################# */\r\n\r\n switch (section) {\r\n\r\n /* ending the tabs */\r\n case \"toolPouchUpgrades\": // Main %\r\n case \"huntersJournal\": // Journal\r\n case \"flea\": // Collectibles\r\n\r\n /*case \"toolPouchUpgrades\": // Main %\r\n case \"achievementsBosses\": // Essentials %\r\n case \"huntersJournal\": // Journal\r\n case \"items\": // Collectibles\r\n case \"geoRocks\": // Geo Caches\r\n case \"corniferNotes\": // Secrets\r\n case \"statistics\": // Statistics\r\n case \"hallOfGods\": // Godmaster*/\r\n\r\n finalHTMLFill += `
`;\r\n\r\n break;\r\n\r\n }\r\n\r\n } /* end for (let section in sections) */\r\n\r\n /* console.groupCollapsed(\"finalHTMLFill\");\r\n console.log(finalHTMLFill);\r\n console.groupEnd(); */\r\n\r\n /* ################################## Horizontal line ############################################################################# */\r\n\r\n finalHTMLFill += FLEUR_DIVIDE;\r\n\r\n /* --------------- Final single HTML access and fill here ------------------ */\r\n\r\n document.getElementById(\"generated\").innerHTML = finalHTMLFill;\r\n\r\n /* make tab switch buttons working (on click) - must run after inner HTML generation is finished */\r\n\r\n document.querySelectorAll(\".tab-switch\").forEach((button) => {\r\n\r\n button.addEventListener(\"click\", (e) => {\r\n PageSwitchTab(e.target.name);\r\n });\r\n });\r\n\r\n /* Check local storage first, and set the last selected Tab on the page (remembers last clicked tab) */\r\n\r\n if (StorageAvailable('localStorage')) {\r\n\r\n if (localStorage.getItem(\"hkTabActive\")) {\r\n PageSwitchTab(localStorage.getItem(\"hkTabActive\"));\r\n } else {\r\n PageSwitchTab(\"main\");\r\n }\r\n }\r\n\r\n // finish benchmarking\r\n benchmarkTimes.GenerateInnerHTML.timeEnd = performance.now();\r\n}\r\n\r\nfunction SectionDescription(section) {\r\n\r\n return `
\\n`;\r\n}\r\n\r\n/**\r\n * Replaces the h2 titles with max percent values as read from the database\r\n */\r\nfunction CompletionFillNoSave(section) {\r\n\r\n let id = \"\";\r\n let h2 = \"\";\r\n let h2id = \"\";\r\n let percentBox = \"\"; // Percent Box\r\n let symbol = \"\";\r\n let fullString = \"\";\r\n\r\n id = section.id;\r\n h2 = section.h2;\r\n h2id = \"h2-\" + section.id;\r\n\r\n /* Display % only when showing Main Game Completion % sections */\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n case \"hk-crests\":\r\n case \"hk-Needleupgrades\":\r\n case \"hk-redTools\":\r\n case \"hk-blueTools\":\r\n case \"hk-yellowTools\":\r\n case \"hk-equipment\":\r\n case \"hk-skills\":\r\n case \"hk-silkHeart\":\r\n case \"hk-miscellaneous\":\r\n case \"hk-spoolFragments\":\r\n case \"hk-maskshards\":\r\n case \"hk-craftingKitUpgrades\":\r\n case \"hk-toolPouchUpgrades\":\r\n\r\n /*case \"hk-charms\":\r\n case \"hk-bosses\":\r\n case \"hk-nailupgrades\":\r\n case \"hk-nailarts\":\r\n case \"hk-spells\":\r\n case \"hk-vesselfragments\":\r\n case \"hk-dreamnail\":\r\n case \"hk-warriordreams\":\r\n case \"hk-dreamers\":\r\n case \"hk-colosseum\":\r\n case \"hk-grimmtroupe\":\r\n case \"hk-lifeblood\":\r\n case \"hk-godmaster\":*/\r\n\r\n symbol = \"%\";\r\n\r\n break;\r\n\r\n default:\r\n\r\n symbol = \"\";\r\n }\r\n\r\n percentBox = `
`;\r\n if (!section.hasOwnProperty(\"maxPercent\")) percentBox = \"\";\r\n\r\n fullString += `
${h2}${percentBox}
`;\r\n\r\n // ----------------- add True Completion h2 title ---------------- //\r\n switch (id) {\r\n\r\n case \"hk-intro\":\r\n fullString += `
True Completion
0.00%
`;\r\n break;\r\n default:\r\n }\r\n\r\n return fullString;\r\n}\r\n\r\n/**\r\n * Replaces the h2 titles with a current percent/max percent values as read from the database\r\n */\r\nfunction CompletionFill(section) {\r\n\r\n let h2 = section.h2;\r\n let h2id = `
`;\r\n let cl = \"\";\r\n let clGreen = \"box-green\";\r\n let clRed = \"box-red\";\r\n let cp = 0; // current Percent\r\n let midP = 0; // middle Percent\r\n let mp = 0; // max Percent\r\n let trueCompletionCurrent = 0;\r\n let trueCompletionTotal = 0;\r\n let trueCompletionPercent = 0; // True Completion %\r\n let symbol = \"\";\r\n let percentBox = \"\";\r\n let fullString = \"\";\r\n\r\n (section.hasOwnProperty(\"percent\")) ? cp = section.percent: cp = 0;\r\n\r\n (section.hasOwnProperty(\"midPercent\")) ? midP = section.midPercent: midP = 0;\r\n\r\n // Don't use percent-box for Essentials, Achievements, Statistics etc.\r\n if (!section.hasOwnProperty(\"maxPercent\")) {\r\n percentBox = \"\";\r\n }\r\n // otherwise use percent-box with values cp/mp%\r\n else {\r\n\r\n mp = section.maxPercent;\r\n\r\n // Shards and Fragments correct calculations\r\n if (section.id === \"hk-maskshards\") {\r\n let perc = section.percent;\r\n (perc % 4) ? cp = Math.floor(perc / 4): cp = perc / 4;\r\n } else if (section.id === \"hk-spoolFragments\") {\r\n let perc = section.percent;\r\n (perc % 2) ? cp = Math.floor(perc / 2): cp = perc / 2;\r\n }\r\n\r\n // switches the box to red when a section (h2) is 0\r\n if (cp === 0) {\r\n cl = ` ${clRed}`;\r\n }\r\n // switches the box to green when a section (h2) is completed\r\n else if (cp === mp) {\r\n cl = ` ${clGreen}`;\r\n }\r\n // default is blue (partially completed and starting value)\r\n else cl = \"\";\r\n\r\n // Select which symbol or text to display (/ or something else depending on the section)\r\n switch (section.id) {\r\n\r\n // needed for Game Status to show percentage properly (adds a slash for all boxes except the Game Status one)\r\n case \"hk-intro\":\r\n break;\r\n\r\n // Hunter's Journal entries, Completed/Encountered of Total, e.g. 23/134 of 146\r\n case \"hk-journal\":\r\n cp = `${cp}/${midP} of `;\r\n break;\r\n\r\n default:\r\n cp += \"/\";\r\n }\r\n\r\n /* Display % only when showing Main Game Completion % sections */\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n\r\n // True Completion % reading and calculation for percent-box and box colors\r\n trueCompletionCurrent = section.extendedCompletionDone;\r\n trueCompletionTotal = section.extendedCompletionTotal;\r\n trueCompletionPercent = (trueCompletionCurrent / trueCompletionTotal) * 100;\r\n symbol = \"%\";\r\n\r\n break;\r\n case \"hk-intro\":\r\n case \"hk-crests\":\r\n case \"hk-Needleupgrades\":\r\n case \"hk-redTools\":\r\n case \"hk-blueTools\":\r\n case \"hk-yellowTools\":\r\n case \"hk-equipment\":\r\n case \"hk-skills\":\r\n case \"hk-silkHeart\":\r\n case \"hk-miscellaneous\":\r\n case \"hk-spoolFragments\":\r\n case \"hk-maskshards\":\r\n case \"hk-craftingKitUpgrades\":\r\n case \"hk-toolPouchUpgrades\":\r\n\r\n /*case \"hk-charms\":\r\n case \"hk-bosses\":\r\n case \"hk-nailupgrades\":\r\n case \"hk-nailarts\":\r\n case \"hk-spells\":\r\n case \"hk-vesselfragments\":\r\n case \"hk-dreamnail\":\r\n case \"hk-warriordreams\":\r\n case \"hk-dreamers\":\r\n case \"hk-colosseum\":\r\n case \"hk-grimmtroupe\":\r\n case \"hk-lifeblood\":\r\n case \"hk-godmaster\":*/\r\n\r\n symbol = \"%\";\r\n\r\n break;\r\n\r\n default:\r\n\r\n symbol = \"\";\r\n }\r\n\r\n percentBox = `
\\n`;\r\n\r\n // ----------------- add True Completion h2 title ---------------- //\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n\r\n // switches the box to red when True Completion is 0\r\n if (trueCompletionCurrent === 0) {\r\n cl = ` ${clRed}`;\r\n }\r\n // switches the box to green when True Completion is 100.00%\r\n else if (trueCompletionCurrent === trueCompletionTotal) {\r\n cl = ` ${clGreen}`;\r\n }\r\n // default is blue (partially completed and starting value)\r\n else cl = \"\";\r\n\r\n fullString += `
\\n\"\r\n ].join(\"\");\r\n\r\n}\r\n\r\n/**\r\n * Adds HTML string to an element with a given ID.\r\n * @param {object} divId object containing div ID of the HTML element to append to\r\n * @param {string} content HTML contents to append\r\n */\r\nfunction AppendHTML(divId, content) {\r\n document.getElementById(divId.id).innerHTML += \"\\n\" + content;\r\n}\r\n\r\nfunction ToggleSaveModeSwitch() {\r\n\r\n let mode = this.value;\r\n\r\n let chooseFileButtonLabel = document.getElementById(\"file-input-label\");\r\n let analyzeTextButton = document.getElementById(\"save-area-read\");\r\n let saveTextArea = document.getElementById(\"save-area\");\r\n\r\n if (mode === \"modeText\") {\r\n this.value = \"modeFile\";\r\n\r\n chooseFileButtonLabel.classList.remove(\"hidden\");\r\n analyzeTextButton.classList.add(\"hidden\");\r\n saveTextArea.classList.add(\"hidden\");\r\n /* alert(this.value); */\r\n } else {\r\n this.value = \"modeText\";\r\n\r\n chooseFileButtonLabel.classList.add(\"hidden\");\r\n analyzeTextButton.classList.remove(\"hidden\");\r\n saveTextArea.classList.remove(\"hidden\");\r\n /* Warning! focus() somehow makes the textarea text offset to the left */\r\n /* saveTextArea.focus(); */\r\n /* alert(this.value); */\r\n }\r\n}\r\n\r\n/**\r\n * Toggles display of \"hk-hints\". On click with no parameters or on demand when called with a parameter\r\n * @param {string} param \"hide\", \"show\" or none (optional)\r\n */\r\nfunction CheckboxHintsToggle(param = \"none\") {\r\n let checkboxId = document.getElementById(\"checkbox-hints\");\r\n\r\n switch (param) {\r\n case \"hide\":\r\n document.getElementById(\"hk-hints\").classList.add(\"hidden\");\r\n checkboxId.value = \"hints-off\";\r\n checkboxId.checked = false;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"unchecked\");\r\n }\r\n break;\r\n case \"show\":\r\n document.getElementById(\"hk-hints\").classList.remove(\"hidden\");\r\n checkboxId.value = \"hints-on\";\r\n checkboxId.checked = true;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"checked\");\r\n }\r\n break;\r\n default:\r\n // This runs when the checkbox is not checked\r\n if (checkboxId.checked === false) {\r\n document.getElementById(\"hk-hints\").classList.add(\"hidden\");\r\n checkboxId.value = \"hints-off\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"unchecked\");\r\n }\r\n }\r\n // This runs when the checkbox is checked\r\n else {\r\n document.getElementById(\"hk-hints\").classList.remove(\"hidden\");\r\n checkboxId.value = \"hints-on\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"checked\");\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Toggles display of \".spoiler-span\" class. On click with no parameters or on demand when called with a parameter\r\n * @param {string} param \"hide\", \"show\" or none (optional)\r\n */\r\nfunction CheckboxSpoilersToggle(param = \"none\") {\r\n\r\n let checkboxId = document.getElementById(\"checkbox-spoilers\");\r\n let allClassElements = document.querySelectorAll(\".spoiler-span\");\r\n let allClassElementsRed = document.querySelectorAll(\".spoiler-red\");\r\n let length = allClassElements.length;\r\n let lengthRed = allClassElementsRed.length;\r\n\r\n switch (param) {\r\n case \"hide\":\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.add(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.add(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-off\";\r\n checkboxId.checked = false;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"unchecked\");\r\n }\r\n break;\r\n\r\n case \"show\":\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.remove(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.remove(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-on\";\r\n checkboxId.checked = true;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"checked\");\r\n }\r\n break;\r\n\r\n default:\r\n // This runs when the checkbox is not checked\r\n if (checkboxId.checked === false) {\r\n\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.add(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.add(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-off\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"unchecked\");\r\n }\r\n break;\r\n }\r\n // This runs when the checkbox is checked\r\n else {\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.remove(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.remove(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-on\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"checked\");\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Hides all other tabs, except the one which button was clicked (shows only the chosen tab)\r\n * @param {String} clickedButton The click target (button clicked)\r\n */\r\nfunction PageSwitchTab(clickedButton) {\r\n\r\n let sectionList = document.querySelectorAll(\".large-section\");\r\n let buttonList = document.querySelectorAll(\".tab-switch\");\r\n\r\n /* Make Active Tab Visible */\r\n for (let i = 0, length = sectionList.length; i < length; i++) {\r\n\r\n /* Other tabs except the clicked one */\r\n if (sectionList[i].id !== `tab-${clickedButton}`) {\r\n\r\n if (!sectionList[i].classList.contains(\"hidden\")) {\r\n sectionList[i].classList.add(\"hidden\");\r\n }\r\n }\r\n /* The clicked tab */\r\n else {\r\n\r\n if (sectionList[i].classList.contains(\"hidden\")) {\r\n sectionList[i].classList.remove(\"hidden\");\r\n }\r\n }\r\n }\r\n\r\n /* Make Active Button stand out */\r\n for (let i = 0, length = buttonList.length; i < length; i++) {\r\n\r\n /* Other buttons except the clicked one */\r\n if (buttonList[i].id !== `button-switch-${clickedButton}`) {\r\n\r\n if (buttonList[i].classList.contains(\"tab-active\")) {\r\n buttonList[i].classList.remove(\"tab-active\");\r\n }\r\n }\r\n /* The clicked button */\r\n else {\r\n\r\n if (!buttonList[i].classList.contains(\"tab-active\")) {\r\n buttonList[i].classList.add(\"tab-active\");\r\n }\r\n }\r\n }\r\n\r\n /* remember this choice for subsequent page visits and browser restarts */\r\n if (StorageAvailable('localStorage')) {\r\n\r\n if (clickedButton) {\r\n localStorage.setItem(\"hkTabActive\", clickedButton);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Detects whether Storage is both supported and available.\r\n * MDN WebDocs https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage\r\n * @param {Storage} type type of storage. Ex. \"localStorage\" or \"sessionStorage\"\r\n * @returns {Boolean}\r\n */\r\nfunction StorageAvailable(type) {\r\n var storage;\r\n try {\r\n storage = window[type];\r\n var x = '__storage_test__';\r\n storage.setItem(x, x);\r\n storage.removeItem(x);\r\n return true;\r\n } catch (e) {\r\n return e instanceof DOMException && (\r\n // everything except Firefox\r\n e.code === 22 ||\r\n // Firefox\r\n e.code === 1014 ||\r\n // test name field too, because code might not be present\r\n // everything except Firefox\r\n e.name === 'QuotaExceededError' ||\r\n // Firefox\r\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\r\n // acknowledge QuotaExceededError only if there's something already stored\r\n (storage && storage.length !== 0);\r\n }\r\n}\r\n\r\n/**\r\n * Fills the innerHTML of a given HTML Element with provided contents\r\n * @param {string} elementId Element ID to update\r\n * @param {string} textFill Updated contents (innerHTML)\r\n */\r\nfunction FillInnerHTML(elementId, textFill) {\r\n\r\n const element = document.getElementById(elementId);\r\n element.innerHTML = textFill;\r\n}\r\n\r\n/**\r\n * Focuses, selects and copies to clipboard contents inside a clicked element. Includes optional tooltip update after the copying is done.\r\n * @param {MouseEvent} mouseEvent from the clicked element (AddEventListener)\r\n * @param {string} tooltipId Element ID of the tooltip to update\r\n * @param {string} tooltipFill Updated contents of the tooltip\r\n */\r\nfunction SelectCopyInputText(mouseEvent, tooltipId = \"\", tooltipFill = \"\") {\r\n\r\n const element = document.getElementById(mouseEvent.target.id);\r\n\r\n // this prevents the un-selected effect after clicking the second time (clears all selection first)\r\n if (window.getSelection) {\r\n window.getSelection().removeAllRanges();\r\n }\r\n\r\n element.focus(); // best to focus the element first before selecting\r\n element.select();\r\n element.setSelectionRange(0, 99999); // for mobile devices\r\n\r\n // Copy the text inside the text field to clipboard\r\n document.execCommand(\"copy\");\r\n\r\n // optional tooltip showing\r\n if (tooltipFill.length && tooltipId.length) FillInnerHTML(tooltipId, tooltipFill);\r\n}\r\n\r\nfunction FileNameFormat(file, nameLength, beginLength, endLength) {\r\n\r\n var fileName = file.name;\r\n\r\n /* Shorten the file name if too long */\r\n if (fileName.length > nameLength) {\r\n\r\n let begin = fileName.slice(0, beginLength); // take X characters from the beginning (0)\r\n let end = fileName.slice(-endLength); // take X characters from the end (-)\r\n fileName = `${begin}..${end}`;\r\n }\r\n\r\n return fileName;\r\n}\r\n\r\nfunction FileDateFormat(file) {\r\n\r\n var fileDate = new Date(file.lastModified);\r\n\r\n var year = fileDate.getFullYear();\r\n var month = fileDate.getMonth() + 1;\r\n var day = fileDate.getDate();\r\n var hour = fileDate.getHours();\r\n var minutes = fileDate.getMinutes();\r\n /* var seconds = fileDate.getSeconds(); */\r\n\r\n if (month < 10) month = \"0\" + month;\r\n if (day < 10) day = \"0\" + day;\r\n if (hour < 10) hour = \"0\" + hour;\r\n if (minutes < 10) minutes = \"0\" + minutes;\r\n /* if (seconds < 10) seconds = \"0\" + seconds; */\r\n\r\n return `${year}.${month}.${day} ${hour}:${minutes}`;\r\n}\r\n\r\n/* ========================== Event Listeners ========================== */\r\n\r\n/* --------------- Toggle visibility of scroll arrow ------------------ */\r\n\r\ndocument.addEventListener(\"scroll\", () => {\r\n\r\n TogglePageScrollElement(\r\n /* the document element root () */\r\n ROOT,\r\n /* Which element to toggle visibility */\r\n SCROLL_BUTTON,\r\n /* How far the user has to scroll to show the element */\r\n 0.1);\r\n});\r\n\r\n/* ---------------- Scroll to top when clicked ------------------- */\r\n\r\nSCROLL_BUTTON.addEventListener(\"click\", () => {\r\n ScrollToElement(ROOT);\r\n});\r\n\r\n/* ------------- Auto select & copy to clipboard when the save file location input text is clicked once ------------- */\r\n\r\ndocument.getElementById(\"save-location-input\").addEventListener(\"click\", (e) => {\r\n\r\n let tooltip = document.getElementById(\"save-location-input-tooltip\");\r\n\r\n SelectCopyInputText(e, \"save-location-input-tooltip\", \"Copied save files location to clipboard\");\r\n\r\n /* make sure that the tooltip is centered */\r\n tooltip.style.marginLeft = `-${tooltip.offsetWidth / 2}px`;\r\n}, false);\r\n\r\n/* -------------- Switch text back to the default on mouse out -------------- */\r\n\r\ndocument.getElementById(\"save-location-input\").addEventListener(\"mouseout\", () => {\r\n\r\n let tooltip = document.getElementById(\"save-location-input-tooltip\");\r\n\r\n /* change the text and center only when the text was different */\r\n if (tooltip.innerHTML !== \"Click once to copy to clipboard\") {\r\n\r\n FillInnerHTML(\"save-location-input-tooltip\", \"Click once to copy to clipboard\");\r\n\r\n /* make sure that the tooltip is centered */\r\n tooltip.style.marginLeft = `-${tooltip.offsetWidth / 2}px`;\r\n }\r\n}, false);\r\n\r\n/* ------------ Toggle Save Mode Switch: Text Mode or File Mode -------------- */\r\n\r\ndocument.getElementById(\"toggle-mode\").addEventListener(\"click\", ToggleSaveModeSwitch, false);\r\n\r\n/* ------------- Checkbox functions ---------------------- */\r\n\r\ndocument.getElementById(\"checkbox-hints\").addEventListener(\"click\", CheckboxHintsToggle, false);\r\ndocument.getElementById(\"checkbox-spoilers\").addEventListener(\"click\", CheckboxSpoilersToggle, false);\r\n\r\n/* ------------ Drag & drop file to the window -------------- */\r\n\r\nwindow.addEventListener('dragover', (event) => {\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n // Style the drag-and-drop as a \"copy file\" operation.\r\n event.dataTransfer.dropEffect = 'copy';\r\n});\r\n\r\nwindow.addEventListener('drop', (event) => {\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n const dt = event.dataTransfer;\r\n\r\n /* Launch save file analyzing */\r\n LoadSaveFile(dt, performance.now());\r\n\r\n var label = document.getElementById(\"save-area-file\").nextElementSibling;\r\n var labelInitialText = label.innerHTML;\r\n\r\n /* Shorten the file name if longer than 16 characters. Display first 10 characters and last 4. */\r\n var fileName = FileNameFormat(dt.files[0], 16, 10, 4);\r\n\r\n /* Display a custom formatted last modified date. */\r\n var fileDate = FileDateFormat(dt.files[0]);\r\n\r\n /* Display the save file name and date on the button */\r\n if (fileName) {\r\n label.innerHTML = `${SYMBOL_FILE}${fileName}
${fileDate}
`;\r\n } else {\r\n label.innerHTML = labelInitialText;\r\n }\r\n});\r\n\r\n/* ---------- Monitor file input change and show the file name when file is loaded ----------- */\r\n\r\ndocument.getElementById(\"save-area-file\").addEventListener(\"change\", (event) => {\r\n\r\n var label = document.getElementById(\"save-area-file\").nextElementSibling;\r\n var labelInitialText = label.innerHTML;\r\n\r\n /* Shorten the file name if longer than 16 characters. Display first 10 characters and last 4. */\r\n var fileName = FileNameFormat(event.target.files[0], 16, 10, 4);\r\n\r\n /* Display a custom formatted last modified date. */\r\n var fileDate = FileDateFormat(event.target.files[0]);\r\n\r\n if (fileName) {\r\n label.innerHTML = `${SYMBOL_FILE}${fileName}
\"\r\n].join(\"\\n\");\r\n\r\nlet pSpan = \"\";\r\n\r\n/* let benchHKCCBegin, benchHKCCEnd; */\r\n\r\n/* -------------------------- Functions ------------------------------------------------------------------------------------------- */\r\n\r\n/**\r\n * Main Function. Checks Hollow Knight game completion by analyzing the save file\r\n * @param {object} jsonObject Decoded save data in JavaScript Object Notation form (JSON)\r\n */\r\nfunction HKCheckCompletion(jsonObject, benchStart = performance.now()) {\r\n\r\n // start benchmark\r\n // benchHKCCBegin = new Date();\r\n benchmarkTimes.CheckCompletion.timeStart = benchStart;\r\n\r\n let HKPlayerData;\r\n let HKWorldItems;\r\n let HKSceneData;\r\n\r\n if (jsonObject.hasOwnProperty(\"playerData\")) {\r\n HKPlayerData = jsonObject.playerData;\r\n } else {\r\n HK.saveAnalyzed = false;\r\n return false;\r\n }\r\n\r\n if (jsonObject.hasOwnProperty(\"sceneData\")) {\r\n HKSceneData = jsonObject.sceneData;\r\n if (jsonObject.sceneData.hasOwnProperty(\"persistentBools\")) {\r\n HKWorldItems = jsonObject.sceneData.persistentBools;\r\n } else {\r\n HK.saveAnalyzed = false;\r\n return false;\r\n }\r\n } else {\r\n HK.saveAnalyzed = false;\r\n return false;\r\n }\r\n\r\n // Generate database entries\r\n // console.log(GenerateDatabaseEntries(HKWorldItems, \"Shiny\", \"Note\", \"corniferNote\", \"Cornifer#Locations\"));\r\n\r\n /* Initialize DataChecker object for checking status of items in save file */\r\n let saveDataChecker = new DataChecker(jsonObject);\r\n\r\n // Pre-Cleaning and filling initial data (h2, id) needed for PrepareHTMLString()\r\n // PrefillHTML(HK.sections);\r\n\r\n // Prevents adding current percent data after each function call and resets what the analyzing has done to the original object. Prevents wrong data display after subsequent save analyzing.\r\n ResetCompletion(HK);\r\n\r\n // ============================================================================================================================= //\r\n\r\n // ---------------- Time Played ----------------------------------------------------------------------------------------------- //\r\n\r\n CheckPlayTime(HK.sections.intro, HKPlayerData.playTime);\r\n\r\n // ---------------- Game Completion Status ------------------------------------------------------------------------------------ //\r\n\r\n CheckCompletionPercent(HK.sections.intro, HKPlayerData);\r\n\r\n // ---------------- Game Completion Status ------------------------------------------------------------------------------------ //\r\n\r\n CheckSaveFileVersion(HK.sections.intro, HKPlayerData.version);\r\n\r\n // ---------------- Health Masks ---------------------------------------------------------------------------------------------- //\r\n\r\n CheckHealthMasks(HK.sections.intro, HKPlayerData.maxHealthBase, HKPlayerData.permadeathMode);\r\n\r\n // ---------------- Silk Bars ------------------------------------------------------------------------------------------------- //\r\n\r\n CheckSilkBar(HK.sections.intro, HKPlayerData.silkMax);\r\n\r\n // ---------------- Check Crests ------------------------------------------------------------------------------------- //\r\n\r\n CheckCrests(HK.sections.intro, HKPlayerData);\r\n\r\n // ---------------- Rosary Amount ------------------------------------------------------------------------------------------------ //\r\n\r\n CheckRosary(HK.sections.intro, HKPlayerData.geo, HKPlayerData.HeroCorpseMoneyPool);\r\n\r\n // ---------------- Shell Shards Amount ------------------------------------------------------------------------------------------------ //\r\n\r\n CheckshellShards(HK.sections.intro, HKPlayerData.ShellShards);\r\n\r\n // ---------------- Crests Crests Crests Crests Crests Crests ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.crests, HK.sections.crests.entries, HKPlayerData);\r\n\r\n // ---------------- Needle Upgrades --------------------------------------------------------------------------------------------- //\r\n\r\n CheckNeedleUpgrades(HK.sections.NeedleUpgrades, HK.sections.NeedleUpgrades.entries, HKPlayerData);\r\n\r\n // ---------------- Silk Heart --------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.silkHeart, HK.sections.silkHeart.entries, HKPlayerData);\r\n\r\n // ---------------- Tools ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.redTools, HK.sections.redTools.entries, HKPlayerData.Tools.savedData);\r\n CheckIfDataTrue(HK.sections.blueTools, HK.sections.blueTools.entries, HKPlayerData.Tools.savedData);\r\n CheckIfDataTrue(HK.sections.yellowTools, HK.sections.yellowTools.entries, HKPlayerData.Tools.savedData);\r\n\r\n // ---------------- Equipment (Abilities) ------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.equipment, HK.sections.equipment.entries, HKPlayerData.Tools.savedData);\r\n\r\n // ---------------- skills ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.skills, HK.sections.skills.entries, HKPlayerData);\r\n\r\n // ---------------- Miscellaneous ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.miscellaneous, HK.sections.miscellaneous.entries, HKPlayerData);\r\n\r\n // ---------------- Mask Shards ----------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.maskShards, HK.sections.maskShards.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Spool Fragments ------------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.spoolFragments, HK.sections.spoolFragments.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Crafting Kit Upgrades ------------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.craftingKitUpgrades, HK.sections.craftingKitUpgrades.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Tool Pouch Upgrades ------------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.toolPouchUpgrades, HK.sections.toolPouchUpgrades.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- flea ---------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.flea, HK.sections.flea.entries, HKPlayerData);\r\n\r\n \r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n ////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////\r\n/*\r\n // ---------------- Bosses (Base Game) ---------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.bosses, HK.sections.bosses.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ---------------- Colosseum of Fools ---------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.colosseum, HK.sections.colosseum.entries, HKPlayerData);\r\n\r\n // ---------------- Dreamers -------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.dreamers, HK.sections.dreamers.entries, HKPlayerData);\r\n\r\n // ---------------- Dream Nail and Essence ------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.dreamNail, HK.sections.dreamNail.entries, HKPlayerData);\r\n\r\n\r\n // ---------------- Nail Arts ------------------------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.nailArts, HK.sections.nailArts.entries, HKPlayerData);\r\n\r\n // ---------------- Warrior Dreams -------------------------------------------------------------------------------------------- //\r\n\r\n CheckWarriorDreams(HK.sections.warriorDreams, HK.sections.warriorDreams.entries, HKPlayerData);\r\n\r\n // ---------------- Grimm Troupe Content Pack --------------------------------------------------------------------------------- //\r\n\r\n CheckIfDataTrue(HK.sections.grimmTroupe, HK.sections.grimmTroupe.entries, HKPlayerData);\r\n\r\n // ---------------- Lifeblood Content Pack ------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.lifeblood, HK.sections.lifeblood.entries, HKPlayerData);\r\n\r\n // ---------------- Godmaster Content Pack ------------------------------------------------------------------------------------ //\r\n\r\n CheckIfDataTrue(HK.sections.godmaster, HK.sections.godmaster.entries, HKPlayerData);\r\n*/\r\n // ------------------------- Hunter's Journal --------------------------------------------------------------------------------- //\r\n /* Must be checked before Statistics (for correct entry numbers) */\r\n\r\n CheckHuntersJournal(HK, \"huntersJournal\", HKPlayerData);\r\n //CheckHuntersJournal(HK, \"huntersJournalOptional\", HKPlayerData);\r\n\r\n/*\r\n \r\n // ------------------------- Essentials % -> Collectibles --------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsCollectibles, jsonObject);\r\n\r\n // ------------------------- Essentials % -> Stag Stations -------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsStagStations, jsonObject);\r\n\r\n // ------------------------- Essentials % -> World Interactions -------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsWorldInteractions, jsonObject);\r\n\r\n // ------------------------- Essentials % -> Bosses --------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.essentialsBosses, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> Collectibles --------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsCollectibles, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> Maps ----------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsMaps, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> World Interactions --------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsWorldInteractions, jsonObject);\r\n\r\n // ------------------------- Achievements Essentials -> Bosses ----------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.achievementsBosses, jsonObject);\r\n\r\n // ------------------------- Collectibles -> Charm Notches ------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.charmNotches, jsonObject);\r\n\r\n // ------------------------- Collectibles -> Grubs ---------------------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.grubs);\r\n\r\n // ------------------------- Collectibles -> Whispering Roots ---------------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.whisperingRoots);\r\n\r\n // ------------------------- Collectibles -> Relics - Wanderer's Journal ------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsWanderersJournal);\r\n\r\n // ------------------------- Collectibles -> Relics - Hallownest Seal ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsHallownestSeal);\r\n\r\n // ------------------------- Collectibles -> Relics - King's Idol ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsKingsIdol);\r\n\r\n // ------------------------- Collectibles -> Relics - Arcane Egg ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.relicsArcaneEgg);\r\n\r\n // ------------------------- Collectibles -> Rancid Eggs ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.rancidEggs);\r\n\r\n // ------------------------- Collectibles -> Items ---------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.items, jsonObject);\r\n\r\n // ------------------------- Geo Caches -> Geo Chests ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.geoChests);\r\n\r\n // ------------------------- Geo Caches -> Geo Rocks ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkGeoRocks(HK.sections.geoRocks);\r\n\r\n // ------------------------- Secrets -> World Interactions ---------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.worldInteractions, jsonObject);\r\n\r\n // ------------------------- Secrets -> Secret Rooms ---------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.secretRooms, jsonObject);\r\n\r\n // ------------------------- Secrets -> Cornifer's Notes ----------------------------------------------------------- //\r\n\r\n saveDataChecker.checkItems(HK.sections.corniferNotes);\r\n\r\n // ------------------------- Game Statistics ---------------------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.statistics, jsonObject);\r\n\r\n // ------------------------- Godhome Statistics ------------------------------------------------------------------------------- //\r\n\r\n CheckAdditionalThings(HK.sections.godhomeStatistics, jsonObject);\r\n\r\n */\r\n\r\n /* ------------------------- Pantheon Statistics ------------------------------------------------------------------------------ */\r\n\r\n /*CheckPantheon(HK, \"pantheonOfTheArtist\", HKPlayerData);\r\n CheckPantheon(HK, \"pantheonOfTheSage\", HKPlayerData);\r\n CheckPantheon(HK, \"pantheonOfTheKnight\", HKPlayerData);\r\n CheckPantheon(HK, \"pantheonOfHallownest\", HKPlayerData);\r\n\r\n CheckHallOfGods(HK, HKPlayerData);*/\r\n\r\n // ------------------------- Hints ---------------------------------------------------------------------------------------------- //\r\n\r\n CheckHintsTrue(HK.sections.hints, HK.sections.hints.entries, HKPlayerData, HKWorldItems);\r\n\r\n // ------------------------- Extended game completion check --------------------------------------------------------------------- //\r\n\r\n /* Percent completion is filled inside GenerateInnerHTML() using CompletionFill() */\r\n CheckExtendedCompletion(HK);\r\n\r\n // ------------------------- Indicate that the save file was loaded and analyzed correctly -------------------------------------- //\r\n\r\n HK.saveAnalyzed = true;\r\n\r\n // ------------------------- Generate everything on the page with updated values ------------------------------------------------ //\r\n\r\n GenerateInnerHTML(HK);\r\n\r\n // Prevents wrong checkbox behaviour (must run after everything is finished)\r\n CheckboxHintsToggle();\r\n CheckboxSpoilersToggle();\r\n\r\n /* focus the text area after analyzing the save, without scrolling the document (too slow) */\r\n /* document.getElementById(\"save-area\").focus({preventScroll: true}); */\r\n\r\n // finish and show benchmark\r\n // benchHKCCEnd = new Date();\r\n benchmarkTimes.CheckCompletion.timeEnd = performance.now();\r\n // console.info(\"HKCheckCompletion() time (ms) =\", benchHKCCEnd - benchHKCCBegin);\r\n\r\n // Benchmark(benchmarkTimes);\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Generates and appends a new entry inside the HTML of a given ID\r\n * @param {object} section object containing div ID and h2 title of the HTML element\r\n * @param {string} textPrefix Main name of the entry\r\n * @param {string} textSuffix Optional suffix after the main name (spoilers: locations, costs etc.)\r\n */\r\nfunction PrepareHTMLString(section, textPrefix = \"Unknown Completion Element: \", textSuffix = \"Unknown Description Element\", wiki = \"\") {\r\n\r\n let icon = completionSymbol;\r\n let b = [\"\", \"\"];\r\n if (!textPrefix.length) b = [\"\", \"\"];\r\n if (wiki.length) b = [``, \"\"];\r\n\r\n let span = [\"\", \"\"];\r\n let spoilerSpan = [\"\", \"\"];\r\n if (section.id === \"hk-hints\") {\r\n span[0] = \"\";\r\n icon = \"\";\r\n }\r\n\r\n // let dash = \"\";\r\n if (textSuffix.length && textPrefix.length) textSuffix = \"— \" + textSuffix;\r\n if (textPrefix.includes(\"\")) textSuffix = `${textSuffix}`;\r\n\r\n // return divStart + icon + b[0] + textPrefix + b[1] + span[0] + pSpan + spoilerSpan[0] + dash + textSuffix + spoilerSpan[1] + span[1] + divEnd;\r\n return `\r\n ${divStart}\r\n ${icon}${b[0]}${textPrefix}${b[1]}${span[0]}${pSpan}${spoilerSpan[0]}${textSuffix}${spoilerSpan[1]}${span[1]}\r\n ${divEnd}\r\n `;\r\n}\r\n\r\n/**\r\n * Fills HTML with the playTime value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} playTime Number of total gameplay time in seconds\r\n */\r\nfunction CheckPlayTime(section, playTime) {\r\n\r\n let seconds = Math.floor(playTime);\r\n let minutes = Math.floor((seconds / 60) % 60);\r\n let hours = Math.floor(seconds / 3600);\r\n let sec = Math.floor(seconds % 60);\r\n\r\n section.entries.timePlayed.timeH = hours;\r\n section.entries.timePlayed.timeM = minutes;\r\n section.entries.timePlayed.timeS = sec;\r\n\r\n if (sec < 10) sec = \"0\" + sec;\r\n if (minutes < 10) minutes = \"0\" + minutes;\r\n\r\n let textFill = \"Time Played:\" + pSpan + \"\" + hours + \" h \" + minutes + \" min \" + sec + \" sec\";\r\n\r\n section.entries.timePlayed.spoiler = hours + \" h \" + minutes + \" min \" + sec + \" sec\";\r\n\r\n // document.getElementById(section.id).innerHTML += divStart + SYMBOL_CLOCK + textFill + divEnd;\r\n}\r\n\r\n/**\r\n * Searches for completionPercentage in playerData and fills HTML with the value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} completionPercentage Number of completion percentage\r\n */\r\nfunction CheckCompletionPercent(section, playerData) {\r\n\r\n let completionPercentage = Math.round(playerData.completionPercentage);\r\n let maxPercent = 0;\r\n\r\n\r\n // Normal (current) game version behaviour: 112%\r\n section.maxPercent = section.maxPercentDefault;\r\n maxPercent = section.maxPercentDefault;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterDefault;\r\n\r\n section.percent = completionPercentage;\r\n section.entries.gameCompletion.spoiler = completionPercentage;\r\n/*\r\n // Lifeblood behaviour: 107%\r\n if (!playerData.hasOwnProperty(\"hasGodfinder\")) {\r\n\r\n section.maxPercent = section.maxPercentLifeblood;\r\n maxPercent = section.maxPercentLifeblood;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterLifeblood;\r\n }\r\n\r\n // Grimm Troupe bahaviour: 106%\r\n if (!playerData.hasOwnProperty(\"killedHiveKnight\")) {\r\n\r\n section.maxPercent = section.maxPercentGrimmTroupe;\r\n maxPercent = section.maxPercentGrimmTroupe;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterGrimmTroupe;\r\n }\r\n*/\r\n\r\n /* Base Game behaviour with no Content Packs: 100% */\r\n //if (!playerData.hasOwnProperty(\"gotCharm_37\")) {\r\n\r\n section.maxPercent = section.maxPercentBaseGame;\r\n maxPercent = section.maxPercentBaseGame;\r\n section.entries.gameCompletion.spoilerAfter = section.entries.gameCompletion.spoilerAfterBaseGame;\r\n //}\r\n\r\n (completionPercentage >= maxPercent) ? SetIconGreen(section, \"gameCompletion\"): SetIconRed(section, \"gameCompletion\");\r\n\r\n}\r\n\r\n/**\r\n * Calculates the amount of all green ticks and total entries. Saves them to database for later display.\r\n * @param {object} db reference to the main HK database\r\n */\r\nfunction CheckExtendedCompletion(db) {\r\n\r\n let sections = db.sections;\r\n let entries = {};\r\n let gameCompletionExtended = db.sections.intro.entries.gameCompletionExtended;\r\n let intro = db.sections.intro;\r\n\r\n let amount = 0;\r\n let max = 0;\r\n\r\n for (let section in sections) {\r\n\r\n entries = sections[section].entries;\r\n\r\n switch (section) {\r\n\r\n /* Ignore these sections totally */\r\n case \"intro\":\r\n case \"hints\":\r\n case \"huntersJournal\":\r\n //case \"huntersJournalOptional\":\r\n //case \"flea\":\r\n\r\n continue;\r\n\r\n default:\r\n\r\n // console.info(\"Section loop:\", section);\r\n\r\n for (let entry in entries) {\r\n\r\n // console.info(\"Entry loop:\", entry);\r\n\r\n switch (entry) {\r\n\r\n /* Do not count (ignore) these entries at all */\r\n case \"oldNail\":\r\n case \"pantheonMaster\": // Pantheons are counted in Godmaster section\r\n case \"pantheonArtist\":\r\n case \"pantheonSage\":\r\n case \"pantheonKnight\":\r\n case \"pantheonHallownest\":\r\n case \"geoPool\":\r\n case \"dreamOrbs\":\r\n case \"charmsOwned\":\r\n case \"nailDamage\":\r\n case \"jinnEggsSold\":\r\n case \"xunFlowerBrokeTimes\":\r\n case \"itemsDiscovered\":\r\n case \"stagStationsOpened\":\r\n case \"areaMaps\":\r\n case \"killedMegaMossCharger\":\r\n case \"killedBigBuzzer\":\r\n case \"killedOblobble\":\r\n case \"killedLobsterLancer\":\r\n case \"killedFlukeMother\":\r\n case \"killedNailBros\":\r\n case \"killedPaintmaster\":\r\n case \"killedNailsage\":\r\n case \"killedHollowKnightPrime\":\r\n case \"killsBigBuzzer\":\r\n case \"whiteDefenderDefeated\":\r\n case \"greyPrinceDefeated\":\r\n case \"killedHollowKnight\":\r\n case \"killedFinalBoss\":\r\n // Collectibles are counted in their own sections\r\n // falls through\r\n case \"grubsCollected\":\r\n case \"whisperingRoots\":\r\n case \"relicsWandererJournal\":\r\n case \"relicsHallownestSeal\":\r\n case \"relicsKingsIdol\":\r\n case \"relicsArcaneEgg\":\r\n case \"soldTrinket1\":\r\n case \"soldTrinket2\":\r\n case \"soldTrinket3\":\r\n case \"soldTrinket4\":\r\n case \"relicsSoldTotalGeo\":\r\n case \"bankerBalance\":\r\n case \"rancidEggs\":\r\n case \"geoRocks\":\r\n case \"ore\":\r\n case \"simpleKeys\":\r\n\r\n // console.info(\"Ignored:\", entry);\r\n\r\n continue;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n\r\n switch (entry) {\r\n\r\n /* Do not add these to total and done (they will be added as amount/max later instead) */\r\n case \"grubsCollected\":\r\n case \"grubRewards\":\r\n case \"areaMaps\":\r\n case \"journalEntriesCompleted\":\r\n case \"journalNotesCompleted\":\r\n case \"whisperingRoots\":\r\n case \"relicsWandererJournal\":\r\n case \"relicsHallownestSeal\":\r\n case \"relicsKingsIdol\":\r\n case \"relicsArcaneEgg\":\r\n case \"geoRocks\":\r\n case \"whiteDefenderDefeats\":\r\n case \"greyPrinceDefeats\":\r\n\r\n /* console.info(\"Ignored:\", entry); */\r\n\r\n break;\r\n\r\n default:\r\n\r\n if (entries[entry].icon !== \"none\") {\r\n intro.extendedCompletionTotal++;\r\n\r\n // console.info(\"Counted Total:\", entry);\r\n } /* else {\r\n console.info(\"Not Counted Total:\", entry);\r\n } */\r\n\r\n /* Missable Arcane Egg exception, subtract from total */\r\n if (entries[entry].icon === \"none\" && entry === \"arcaneEggLifebloodCoreRoom\") {\r\n\r\n /* console.info(`${entry} has passed:`, entries[entry].icon); */\r\n\r\n /* When got the Lifeblood Core charm, but didn't pick up the Arcane Egg */\r\n if (sections.charms.entries.gotCharm_9.icon === \"green\") {\r\n intro.extendedCompletionTotal--;\r\n\r\n /* console.info(`${entry} completion Total subtracted`); */\r\n }\r\n }\r\n\r\n switch (entries[entry].icon) {\r\n\r\n case \"red\":\r\n case \"none\":\r\n case \"partial\":\r\n case \"partialJournal\":\r\n continue;\r\n\r\n default:\r\n\r\n intro.extendedCompletionDone++;\r\n\r\n // console.info(\"Counted (Done):\", entry);\r\n }\r\n }\r\n\r\n /* Skip disabled entries entirely from counting (subtract a point from Total) */\r\n if (entries[entry].hasOwnProperty(\"disabled\") && entries[entry].disabled === true) {\r\n\r\n /* Do not subtract a point for WD/GPZ Defeats nr if they were not added to Total in the first place */\r\n if (entry === \"greyPrinceDefeats\" || entry === \"whiteDefenderDefeats\") {\r\n continue;\r\n }\r\n\r\n intro.extendedCompletionTotal--;\r\n\r\n // console.info(\"Subtracted Total:\", entry);\r\n }\r\n /* Counting amount/max for several entries */\r\n else if (entries[entry].hasOwnProperty(\"amount\") && entries[entry].hasOwnProperty(\"max\")) {\r\n\r\n /* Skip counting 3000 Fountain Geo, too much */\r\n if (entry === \"fountainGeo\") {\r\n continue; // continue to next entry loop\r\n }\r\n\r\n amount = entries[entry].amount;\r\n max = entries[entry].max;\r\n\r\n /* Prevent overflowing the counter */\r\n if (amount > max) {\r\n amount = max;\r\n }\r\n\r\n intro.extendedCompletionDone += amount;\r\n intro.extendedCompletionTotal += max;\r\n\r\n // console.info(`${entry}: ${amount}/${max}`, entries[entry].name);\r\n\r\n amount = 0;\r\n max = 0;\r\n }\r\n /* Counting Geo Rocks */\r\n /* else if (entries[entry].hasOwnProperty(\"activated\") && entries[entry].hasOwnProperty(\"max\")) {\r\n\r\n amount = entries[entry].activated;\r\n max = entries[entry].max;\r\n\r\n // Check in case the player has discovered more than 205 (max) Geo Rocks\r\n if (max < entries[entry].discoveredTotal) {\r\n max = entries[entry].discoveredTotal;\r\n }\r\n\r\n intro.extendedCompletionDone += amount;\r\n intro.extendedCompletionTotal += max;\r\n\r\n console.info(`${entry}: ${amount}/${max}`, entries[entry].name);\r\n\r\n amount = 0;\r\n max = 0;\r\n } */\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n if (intro.extendedCompletionDone >= intro.extendedCompletionTotal) {\r\n gameCompletionExtended.icon = \"green\";\r\n } else {\r\n gameCompletionExtended.icon = \"red\";\r\n }\r\n\r\n let percent = (intro.extendedCompletionDone / intro.extendedCompletionTotal) * 100;\r\n\r\n gameCompletionExtended.spoiler = intro.extendedCompletionDone;\r\n gameCompletionExtended.spoilerAfter = ` / ${intro.extendedCompletionTotal} = ${percent.toFixed(2)} %`;\r\n}\r\n\r\n/**\r\n * Reads the \"version\" string from the save file and appends it to the selected div ID element\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {string} saveVersion Save File version in format 0.0.0.0\r\n */\r\nfunction CheckSaveFileVersion(section, saveVersion = HK.sections.intro.entries.saveVersion.spoiler) {\r\n\r\n SetIconNone(section, section.entries.saveVersion.id);\r\n\r\n section.entries.saveVersion.spoiler = `${saveVersion}`;\r\n\r\n /* let textFill = `Save Version:${pSpan}${saveVersion}${pSpan}`; */\r\n // document.getElementById(section.id).innerHTML += divStart + completionSymbol + textFill + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with appropriate number of health mask images\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} masks Number of max health masks from the save (baseline without tools and lifeblood)\r\n * @param {number} permadeathMode Value of permadeathMode property. 0 = Normal, 1 = Steel Soul, 2 = Steel Soul broken save\r\n */\r\nfunction CheckHealthMasks(section, masks = 5, permadeathMode = 0) {\r\n\r\n section.entries.health.amountTotal = masks;\r\n\r\n if (permadeathMode > 0) {\r\n section.entries.health.permadeathMode = true;\r\n } else {\r\n section.entries.health.permadeathMode = false;\r\n }\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = \"Health:\";\r\n let maskImages = \"\";\r\n let maskNormal = ``;\r\n let maskSteel = ``;\r\n let maskImg = \"\";\r\n\r\n (permadeathMode > 0) ? maskImg = maskSteel: maskImg = maskNormal;\r\n\r\n for (let i = 0; i < masks; i++) {\r\n maskImages += maskImg;\r\n } */\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + maskImages + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with appropriate number of soul orbs images\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} totalSilk Number of max Silk reserve from the save. 18 = full Silk Bar\r\n */\r\nfunction CheckSilkBar(section, totalSilk) {\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = \"Soul:\";\r\n let soulImages = \"\";\r\n let soulNormal = ``;\r\n let soulImg = soulNormal;\r\n\r\n for (let i = 0, total = totalSoul / 33; i < total; i++) {\r\n soulImages += soulImg;\r\n } */\r\n\r\n section.entries.silk.amountTotal = totalSilk;\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + soulImages + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with the Geo value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} geoValue Number of total rosaries value\r\n */\r\nfunction CheckRosary(section, geoValue = 0, geoPoolValue = 0) {\r\n\r\n section.entries.rosaries.amount = geoValue;\r\n section.entries.rosaries.amountShade = geoPoolValue;\r\n section.entries.rosaries.amountTotal = geoValue + geoPoolValue;\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = `Geo:${geoValue}`;\r\n\r\n // Show Shade Geo value and image only if Shade has at least 1 Geo on it\r\n if (geoPoolValue > 0) textFill += `\r\n ${pSpan}+${geoPoolValue}`;\r\n\r\n // Show also total Geo (Geo + Shade Geo) if player has at least 1 geo alongside the shade geo\r\n if (geoValue > 0 && geoPoolValue > 0) textFill += `${pSpan}=${pSpan}${geoValue+geoPoolValue}`; */\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + divEnd;\r\n}\r\n\r\n/**\r\n * Fills HTML with the shell shards value of the save file\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {number} geoValue Number of total shellShards value\r\n */\r\nfunction CheckshellShards(section, shellShardsValue = 0) {\r\n\r\n section.entries.shellShards.amount = shellShardsValue;\r\n \r\n}\r\n\r\n/**\r\n * Fills HTML with appropriate number of notch images\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} PlayerData Contain the memory of the cerst.\r\n */\r\nfunction CheckCrests(section, PlayerData) {\r\n\r\n let amountTotal = 1\r\n\r\n section.entries.crests.reaper = PlayerData.completedMemory_reaper;\r\n section.entries.crests.wanderer = PlayerData.completedMemory_wanderer;\r\n section.entries.crests.beast = PlayerData.completedMemory_beast;\r\n section.entries.crests.witch = PlayerData.completedMemory_witch;\r\n section.entries.crests.toolmaster = PlayerData.completedMemory_toolmaster;\r\n section.entries.crests.shaman = PlayerData.completedMemory_shaman;\r\n \r\n if(PlayerData.completedMemory_reaper) amountTotal++;\r\n if(PlayerData.completedMemory_wanderer) amountTotal++;\r\n if(PlayerData.completedMemory_beast) amountTotal++;\r\n if(PlayerData.completedMemory_witch) amountTotal++;\r\n if(PlayerData.completedMemory_toolmaster) amountTotal++;\r\n if(PlayerData.completedMemory_shaman) amountTotal++;\r\n \r\n section.entries.crests.amountTotal = amountTotal;\r\n\r\n /* // How many overcharmed notches images to show\r\n notchesOvercharmed = notchesFilled - notchesTotal;\r\n if (notchesOvercharmed < 1) notchesOvercharmed = 0;\r\n\r\n section.entries.notches.amountOvercharmed = notchesOvercharmed;\r\n\r\n // How many unused notches images to show\r\n notchesUnused = notchesTotal - notchesFilled;\r\n if (notchesUnused < 1) notchesUnused = 0;\r\n\r\n section.entries.notches.amountUnused = notchesUnused;\r\n\r\n // Correct number of filled/used notches images to show when player is overcharmed\r\n if (notchesFilled > notchesTotal) notchesFilled = notchesTotal;\r\n\r\n section.entries.notches.amountFilled = notchesFilled;*/\r\n\r\n /* let icon = SYMBOL_EMPTY;\r\n let textFill = `Notches:${pSpan}`;\r\n\r\n let notchImages = \"\";\r\n let notchNormalImage = ``;\r\n let notchFilledImage = ``;\r\n let notchOvercharmedImage = ``;\r\n\r\n // First check filled (used) notches and fill them (skips if no filled notches)\r\n if (notchesFilled > 0) {\r\n for (let i = 0; i < notchesFilled; i++) {\r\n notchImages += notchFilledImage;\r\n }\r\n }\r\n\r\n // Second check overcharmed notches and fill them (skips if player is not overcharmed)\r\n if (notchesOvercharmed > 0) {\r\n for (let i = 0; i < notchesOvercharmed; i++) {\r\n notchImages += notchOvercharmedImage;\r\n }\r\n }\r\n\r\n // Lastly, fill all unused notches\r\n if (notchesUnused > 0) {\r\n for (let i = 0; i < notchesUnused; i++) {\r\n notchImages += notchNormalImage;\r\n }\r\n } */\r\n\r\n // document.getElementById(section.id).innerHTML += divStartCenter + icon + textFill + notchImages + divEnd;\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific object is true or false, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing data to be verified (use copy - data inside this object will be deleted)\r\n * @param {object} playerData Reference/pointer to specific data where to search (playerData)\r\n * @param {Array} worldData Reference/pointer to specific data where to search (sceneData.persistentBoolItems)\r\n */\r\nfunction CheckIfDataTrue(section, dataObject, playerData, worldData = []) {\r\n\r\n /* let {\r\n textPrefix,\r\n textSuffix,\r\n } = \"\";\r\n let sFillText = \"\";\r\n let wiki = \"\"; */\r\n let checkText = \"\";\r\n\r\n for (let i in dataObject) {\r\n\r\n /* textPrefix = dataObject[i].name;\r\n textSuffix = dataObject[i].spoiler;\r\n (dataObject[i].hasOwnProperty(\"wiki\")) ? wiki = dataObject[i].wiki: wiki = \"\"; */\r\n\r\n if (section.id === \"hk-redTools\" \r\n || section.id === \"hk-blueTools\"\r\n || section.id === \"hk-yellowTools\"\r\n || section.id === \"hk-equipment\")\r\n {\r\n switch (i)\r\n {\r\n case \"webShot\":\r\n //check if he have any type of webshot which count as 1% (the player cant have multiple of it)\r\n let foundArchitect = playerData.find(playerData => playerData.Name === \"WebShot Architect\");\r\n let foundForge = playerData.find(playerData => playerData.Name === \"WebShot Forge\");\r\n let foundWeaver = playerData.find(playerData => playerData.Name === \"WebShot Weaver\");\r\n ((foundArchitect !== undefined && foundArchitect.Data.IsUnlocked === true)\r\n || (foundForge !== undefined && foundForge.Data.IsUnlocked === true)\r\n || (foundWeaver !== undefined && foundWeaver.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"curveClaws\":\r\n //check if he have any type of curveClaws which count as 1% (normal or upgraded one)\r\n let foundClaws = playerData.find(playerData => playerData.Name === \"Curve Claws\");\r\n let foundClawsUpgrade = playerData.find(playerData => playerData.Name === \"Curve Claws Upgraded\");\r\n ((foundClaws !== undefined && foundClaws.Data.IsUnlocked === true)\r\n || (foundClawsUpgrade !== undefined && foundClawsUpgrade.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"mosscreepTool\":\r\n //check if he have any type of Mosscreep which count as 1% (normal or upgraded one)\r\n let foundMosscreep = playerData.find(playerData => playerData.Name === \"Mosscreep Tool 1\");\r\n let foundMosscreepUpgrade = playerData.find(playerData => playerData.Name === \"Mosscreep Tool 2\");\r\n ((foundMosscreep !== undefined && foundMosscreep.Data.IsUnlocked === true)\r\n || (foundMosscreepUpgrade !== undefined && foundMosscreepUpgrade.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"DazzleBind\":\r\n //check if he have any type of Dazzle Bind which count as 1% (normal or upgraded one)\r\n let foundDazzle = playerData.find(playerData => playerData.Name === \"Dazzle Bind\");\r\n let foundDazzleUpgrade = playerData.find(playerData => playerData.Name === \"Dazzle Bind Upgraded\");\r\n ((foundDazzle !== undefined && foundDazzle.Data.IsUnlocked === true)\r\n || (foundDazzleUpgrade !== undefined && foundDazzleUpgrade.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"deadMansPurse\":\r\n //check if he have any type of Bomb for normal and steel mod which count as 1% (normal or upgraded one)\r\n let foundBombNormal = playerData.find(playerData => playerData.Name === \"Dead Mans Purse\");\r\n let foundBombSteel = playerData.find(playerData => playerData.Name === \"Shell Satchel\");\r\n ((foundBombNormal !== undefined && foundBombNormal.Data.IsUnlocked === true)\r\n || (foundBombSteel !== undefined && foundBombSteel.Data.IsUnlocked === true)\r\n ) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n \r\n\r\n default:\r\n let foundData = playerData.find(playerData => playerData.Name === dataObject[i].id);\r\n (foundData !== undefined && foundData.Data.IsUnlocked === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n\r\n }\r\n\r\n\r\n\r\n \r\n }\r\n // CHECK SILK HEART\r\n else if (section.id === \"hk-silkHeart\")\r\n {\r\n let exist = playerData.scenesVisited.indexOf(i);\r\n (exist >= 0) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }\r\n //CHECK SILK HEART MASK AND SPOOL SILK (they change it from old design)\r\n else if (section.id === \"hk-maskshards\" \r\n || section.id === \"hk-spoolFragments\"\r\n || section.id === \"hk-toolPouchUpgrades\"\r\n || section.id === \"hk-craftingKitUpgrades\")\r\n {\r\n switch (i) {\r\n //buy from sellers\r\n case \"PurchasedBonebottomHeartPiece\":\r\n case \"MerchantEnclaveShellFragment\":\r\n case \"PurchasedBelltownSpoolSegment\":\r\n case \"MetCaravanTroupeLeaderJudge\":\r\n case \"MerchantEnclaveSpoolPiece\":\r\n case \"purchasedGrindleSpoolPiece\":\r\n case \"PurchasedForgeToolKit\":\r\n case \"PurchasedArchitectToolKit\":\r\n case \"purchasedGrindleToolKit\":\r\n case \"PurchasedPilgrimsRestToolPouch\":\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n //Finishing wishes\r\n case \"beastflyHuntWish\":\r\n case \"sprintmasterRaceWish\":\r\n case \"destroyThreadCoresWish\":\r\n case \"destroyThreadCoresWish\":\r\n case \"antTrapperWish\":\r\n case \"saveShermaWish\":\r\n case \"crowFeathersWish\":\r\n case \"journalWish\":\r\n let wishList = playerData.QuestCompletionData.savedData;\r\n let foundWish = wishList.find(wishList => wishList.Name === dataObject[i].sceneName);\r\n (foundWish !== undefined && foundWish.Data.IsCompleted === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n //I hate that caravan....\r\n case \"CaravanTroupeLocation\":\r\n (playerData[i] === 3) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n //World Scene\r\n default:\r\n let sceneList = worldData.serializedList;\r\n let sceneInfo = sceneList.find(sceneList => sceneList.SceneName === dataObject[i].sceneName && sceneList.ID === dataObject[i].id);\r\n (sceneInfo !== undefined && sceneInfo.Value === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n }\r\n }\r\n else\r\n {\r\n \r\n /*switch (i) {\r\n case \"gotCharm_36\":\r\n // prevents green checkbox and adding 1% when only got one white fragment\r\n (playerData.gotQueenFragment === true && playerData.gotKingFragment === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"gotCharm_37\":\r\n case \"gotCharm_38\":\r\n case \"gotCharm_39\":\r\n case \"gotCharm_40\":\r\n case \"killedGrimm\":\r\n case \"grimmChildLevel\":\r\n case \"killedHiveKnight\":\r\n case \"hasGodfinder\":\r\n\r\n // fades out the entries if save file is from older game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n dataObject[i].disabled = true;\r\n //textPrefix = `${textPrefix}`;\r\n\r\n break;\r\n }\r\n\r\n // Checks for Nightmare King (4) or Banishment (5)\r\n if (i === \"grimmChildLevel\") {\r\n // (playerData.grimmChildLevel >= 4) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n // Check if Nightmare King or Banishment by looking at grimmChildLevel\r\n switch (playerData[i]) {\r\n\r\n case 4:\r\n dataObject[i].name = dataObject[i].nameNightmareKing;\r\n dataObject[i].spoiler = dataObject[i].spoilerNightmareKing;\r\n dataObject[i].wiki = dataObject[i].wikiNightmareKing;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n\r\n case 5:\r\n dataObject[i].name = dataObject[i].nameBanishment;\r\n dataObject[i].spoiler = dataObject[i].spoilerBanishment;\r\n dataObject[i].wiki = dataObject[i].wikiBanishment;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n\r\n default:\r\n SetIconRed(section, i);\r\n dataObject[i].name = dataObject[i].nameDefault;\r\n dataObject[i].spoiler = dataObject[i].spoilerDefault;\r\n dataObject[i].wiki = dataObject[i].wikiDefault;\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (i === \"gotCharm_40\") {\r\n SetIconRed(section, i);\r\n dataObject[i].name = dataObject[i].nameDefault;\r\n dataObject[i].spoiler = dataObject[i].spoilerDefault;\r\n dataObject[i].wiki = dataObject[i].wikiDefault;\r\n\r\n switch (playerData.grimmChildLevel) {\r\n\r\n case 1:\r\n if (playerData[i] === true) {\r\n dataObject[i].name = dataObject[i].nameGrimmchildP1;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP1;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n }\r\n\r\n break;\r\n case 2:\r\n dataObject[i].name = dataObject[i].nameGrimmchildP2;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP2;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n case 3:\r\n dataObject[i].name = dataObject[i].nameGrimmchildP3;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP3;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n case 4:\r\n dataObject[i].name = dataObject[i].nameGrimmchildP4;\r\n dataObject[i].spoiler = dataObject[i].spoilerGrimmchildP4;\r\n dataObject[i].wiki = dataObject[i].wikiGrimmchild;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n case 5:\r\n dataObject[i].name = dataObject[i].nameCarefreeMelody;\r\n dataObject[i].spoiler = dataObject[i].spoilerCarefreeMelody;\r\n dataObject[i].wiki = dataObject[i].wikiCarefreeMelody;\r\n\r\n SetIconGreen(section, i);\r\n\r\n break;\r\n default:\r\n dataObject[i].name = dataObject[i].nameDefault;\r\n dataObject[i].spoiler = dataObject[i].spoilerDefault;\r\n dataObject[i].wiki = dataObject[i].wikiDefault;\r\n }\r\n\r\n break;\r\n }\r\n\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"bossGruzMother\":\r\n case \"bossBroodingMawlek\":\r\n case \"maskShardCrossroadsSprings\":\r\n case \"maskShardCrossroadsMawlek\":\r\n case \"maskShardGrubfather\":\r\n case \"maskShardBretta\":\r\n case \"maskShardQueensStation\":\r\n case \"maskShardWaterways\":\r\n case \"maskShardStoneSanctuary\":\r\n case \"maskShardCrystalPeak\":\r\n case \"maskShardDeepnest\":\r\n case \"maskShardHive\":\r\n case \"maskShardDelicateFlower\":\r\n case \"vesselFragmentGreenpath\":\r\n case \"vesselFragmentCrossroads\":\r\n case \"vesselFragmentCityOfTears\":\r\n case \"vesselFragmentDeepnest\":\r\n case \"vesselFragmentFountain\":\r\n (WorldDataActivated(dataObject[i].id, dataObject[i].sceneName, worldData)) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"pantheonMaster\":\r\n case \"pantheonArtist\":\r\n case \"pantheonSage\":\r\n case \"pantheonKnight\":\r\n checkText = CheckGodmasterDoors(dataObject[i], playerData);\r\n\r\n if (checkText === \"PropertyNotFound\") {\r\n SetIconNone(section, i);\r\n dataObject[i].disabled = true;\r\n //textPrefix = `${textPrefix}`;\r\n break;\r\n\r\n } else if (checkText === \"PantheonCompleted\") {\r\n SetIconGreen(section, i);\r\n break;\r\n\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n break;\r\n\r\n default:\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }*/\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }\r\n\r\n /* sFillText += PrepareHTMLString(section, textPrefix, textSuffix, wiki); */\r\n }\r\n\r\n // AppendHTML(section, sFillText);\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific object is 0 or > 0, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing data to be verified (use copy - data inside this object will be deleted)\r\n * @param {object} playerData Reference/pointer to specific data where to search\r\n */\r\nfunction CheckSpellLevel(section, dataObject, playerData) {\r\n\r\n // let sFillText = \"\";\r\n\r\n for (let i in dataObject) {\r\n switch (i) {\r\n case \"vengefulSpirit\":\r\n case \"shadeSoul\":\r\n (playerData.fireballLevel >= dataObject[i].fireballLevel) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n // sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n break;\r\n case \"desolateDive\":\r\n case \"descendingDark\":\r\n (playerData.quakeLevel >= dataObject[i].quakeLevel) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n // sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n break;\r\n case \"howlingWraiths\":\r\n case \"abyssShriek\":\r\n (playerData.screamLevel >= dataObject[i].screamLevel) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n // sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // AppendHTML(section, sFillText);\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific object is 0 or > 0, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing data to be verified\r\n * @param {object} playerData Reference/pointer to specific data where to search\r\n */\r\nfunction CheckWarriorDreams(section, dataObject, playerData) {\r\n\r\n let sFillText = \"\";\r\n\r\n for (let i in dataObject) {\r\n (playerData[i] >= 2) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n sFillText += PrepareHTMLString(section, dataObject[i].name, dataObject[i].spoiler, dataObject[i].wiki);\r\n }\r\n\r\n // AppendHTML(section, sFillText);\r\n}\r\n\r\n/**\r\n * Verifies if the Godmaster Pantheons 1-4 are completed by the player, and appends HTML accordingly.\r\n * @param {object} dataObject Object containing pantheon data to be verified (with property)\r\n * @param {object} playerData Reference/pointer to specific data where to search in the save file\r\n */\r\nfunction CheckGodmasterDoors(dataObject, playerData) {\r\n\r\n if (playerData.hasOwnProperty(dataObject.property) === false) {\r\n return \"PropertyNotFound\";\r\n } else if (playerData[dataObject.property].completed === true) {\r\n return \"PantheonCompleted\";\r\n } else {\r\n return \"PantheonNotCompleted\";\r\n }\r\n}\r\n\r\n/**\r\n * Verifies the level of player's needle upgrades, and appends HTML accordingly.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} dataObject Object containing needle upgrades data to be verified\r\n * @param {object} playerData Reference/pointer to specific data where to search in the save file\r\n */\r\nfunction CheckNeedleUpgrades(section, dataObject, playerData) {\r\n\r\n // appends \"Nail\" to every array element\r\n // same as names in the database object\r\n let Needle = [\"starting\", \"sharpened\", \"shining\", \"hivesteel\", \"paleSteel\"].map((element) => element + \"Needle\");\r\n\r\n let sFillText = \"\";\r\n\r\n for (let i = 0; i < 5; i++) {\r\n (playerData.nailUpgrades >= i) ? SetIconGreen(section, Needle[i]): SetIconRed(section, Needle[i]);\r\n sFillText += PrepareHTMLString(section, dataObject[Needle[i]].name, dataObject[Needle[i]].spoiler, dataObject[Needle[i]].wiki);\r\n }\r\n if (section.percent) section.percent--; // subject one for the Old Nail\r\n}\r\n\r\n/**\r\n * Verifies if the specific Interactable (Item, Boss, Chest etc.) is activated. Returns true or false.\r\n * @param {string} idText ID text of the Interactable (id in sceneData)\r\n * @param {string} sceneNameText Map codename of the Interactable (sceneName in sceneData)\r\n * @param {Array} worldData Array of Interactable data to search in (sceneData.persistentBoolItems)\r\n */\r\nfunction WorldDataActivated(idText, sceneNameText, worldData) {\r\n\r\n // Search for the Interactable\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n // Verify if the Interactable is activated and return the result\r\n if (worldData[i].id === idText && worldData[i].sceneName === sceneNameText && worldData[i].activated === true) {\r\n return true;\r\n }\r\n }\r\n // If not, return false\r\n return false;\r\n}\r\n\r\n/**\r\n * Verifies if the data in a specific section is true or false, or checks what values they have.\r\n * @param {object} section Reference/pointer to the specific section of the whole hk-database\r\n * @param {object} saveFile Reference/pointer to the whole Hollow Knight save file object (jsonObject)\r\n */\r\nfunction CheckAdditionalThings(section, saveFile) {\r\n\r\n let entries = section.entries;\r\n let playerData = saveFile.playerData;\r\n let sceneData = saveFile.sceneData;\r\n let worldData = saveFile.sceneData.persistentBoolItems;\r\n\r\n // Start main loop\r\n for (let i in entries) {\r\n\r\n let {\r\n amount,\r\n countTotal,\r\n total,\r\n notActivated,\r\n activated,\r\n discoveredTotal\r\n } = 0;\r\n\r\n switch (i) {\r\n case \"grubsCollected\":\r\n case \"grubRewards\":\r\n case \"charmsOwned\":\r\n case \"dreamOrbs\":\r\n case \"whisperingRoots\":\r\n case \"fountainGeo\":\r\n case \"nailDamage\":\r\n case \"journalEntriesCompleted\":\r\n case \"journalNotesCompleted\":\r\n case \"whiteDefenderDefeats\":\r\n case \"greyPrinceDefeats\":\r\n if (i === \"whisperingRoots\") {\r\n amount = CountWorldItem(\"Dream Plant\");\r\n } else {\r\n amount = playerData[i];\r\n }\r\n\r\n countTotal = amount;\r\n entries[i].amount = amount;\r\n\r\n if (i === \"journalEntriesCompleted\" || i === \"journalNotesCompleted\") {\r\n countTotal = `${amount} / ${playerData.journalEntriesTotal}`;\r\n entries[i].amountTotal = playerData.journalEntriesTotal;\r\n\r\n entries[i].spoiler = `${entries[i].spoilerDefault} (${entries[i].max} max)`;\r\n\r\n /* when Zote is dead, the max Journal entries will equal 4 less instead of 164. For the green tick */\r\n if (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {\r\n\r\n if (playerData.hasOwnProperty(\"killedGreyPrince\")) {\r\n entries[i].max -= 4; // Subtract GPZ and 3 Zotelings from max\r\n }\r\n entries[i].spoiler = `${entries[i].spoilerDefault} (${entries[i].max} max)`; /* Change spoiler for less confusion */\r\n }\r\n\r\n /* when Grimm Troupe is banished, max Journal entries will be 1 or 2 less */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") && playerData.destroyedNightmareLantern === true) {\r\n\r\n entries[i].max--; // Subtract Nightmare King from max\r\n\r\n /* if the player didn't defeat any Grimmkin Nightmare before banishing, subtract it from max */\r\n if (playerData.killedFlameBearerLarge === false) {\r\n entries[i].max--; // Subtract Grimmkin Nightmare from max\r\n entries[i].spoiler = `${entries[i].spoilerDefault} (${entries[i].max} max)`; /* Change spoiler for less confusion */\r\n }\r\n }\r\n }\r\n\r\n if (i === \"grubRewards\") {\r\n entries[i].amountTotal = playerData.grubsCollected;\r\n }\r\n\r\n if (i === \"greyPrinceDefeats\") {\r\n // backwards compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n\r\n } else if (playerData.zoteDead === true || (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true)) {\r\n entries[i].disabled = true;\r\n }\r\n }\r\n\r\n if (i === \"whiteDefenderDefeats\") {\r\n // backwards compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n }\r\n\r\n if (amount >= entries[i].max) {\r\n\r\n SetIconGreen(section, i);\r\n } else if (amount > 0) {\r\n\r\n SetIconPartial(section, i);\r\n } else {\r\n\r\n SetIconNone(section, i);\r\n }\r\n break;\r\n\r\n case \"geoPool\":\r\n amount = Math.abs(playerData[i]);\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0) {\r\n SetIconPartial(section, i);\r\n } else {\r\n SetIcon(section, i, \"revealed\");\r\n }\r\n\r\n break;\r\n\r\n case \"rancidEggs\":\r\n case \"jinnEggsSold\":\r\n case \"xunFlowerBrokeTimes\":\r\n case \"soldTrinket1\":\r\n case \"soldTrinket2\":\r\n case \"soldTrinket3\":\r\n case \"soldTrinket4\":\r\n case \"ore\":\r\n case \"simpleKeys\":\r\n amount = Math.abs(playerData[i]);\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n\r\n if (i === \"jinnEggsSold\") {\r\n // fade out if not on Steel Soul\r\n if (playerData.permadeathMode < 1) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n SetIcon(section, i, \"revealed\");\r\n }\r\n }\r\n\r\n if (i === \"xunFlowerBrokeTimes\") {\r\n if (amount < 1 && playerData.xunFlowerGiven === true) {\r\n SetIcon(section, i, \"revealed\");\r\n } else if (amount > 0) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"tukDungEgg\":\r\n\r\n // fade out if on Steel Soul\r\n if (playerData.permadeathMode > 0) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n\r\n continue;\r\n }\r\n\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n\r\n break;\r\n\r\n case \"relicsSoldTotalGeo\":\r\n\r\n amount = 0;\r\n\r\n for (let i = 1; i <= 4; i++) {\r\n amount += (entries[`soldTrinket${i}`].amount * entries[`soldTrinket${i}`].geoValue);\r\n }\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"bankerBalance\":\r\n\r\n amount = playerData[i];\r\n\r\n /* When value is negative, reset to zero */\r\n if (amount < 0) {\r\n amount = 0;\r\n }\r\n\r\n entries[i].amount = amount;\r\n\r\n if (amount > 0 || playerData.bankerAccountPurchased === true) {\r\n SetIcon(section, i, \"revealed\");\r\n } else {\r\n SetIconNone(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"millibelleLeft\":\r\n\r\n if (playerData.bankerTheft >= 1) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"millibelleCheckedStand\":\r\n\r\n if (playerData.bankerTheft >= 2) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"millibelleReclaimedAllGeo\":\r\n\r\n if (playerData.bankerTheft >= 1 && playerData.bankerBalance <= 0) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"itemsDiscovered\":\r\n discoveredTotal = sceneData.persistentBoolItems.length;\r\n\r\n notActivated = CountItems(discoveredTotal, \"notActivated\");\r\n activated = CountItems(discoveredTotal, \"active\");\r\n\r\n entries[i].discoveredTotal = discoveredTotal;\r\n entries[i].notActivated = notActivated;\r\n entries[i].activated = activated;\r\n\r\n SetIcon(section, i, \"revealed\");\r\n break;\r\n\r\n case \"shopkeeperKey\":\r\n (playerData.hasSlykey === true || playerData.gaveSlykey === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"elegantKey\":\r\n (playerData.hasWhiteKey === true || playerData.usedWhiteKey === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"loveKey\":\r\n (playerData.hasLoveKey === true || playerData.openedLoveDoor === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"paleOreSeer\": // #2\r\n (playerData.dreamReward3 === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n /* -------------------- World Interactables ------------------------------- */\r\n case \"simpleKeyCityOfTears\": // #2\r\n case \"simpleKeyAncientBasin\": // #3\r\n case \"paleOreAncientBasin\": // #1\r\n case \"paleOreCrystalPeak\": // #3\r\n case \"paleOreDeepnest\": // #4\r\n case \"paleOreGrubfather\": // #5\r\n case \"paleOreColosseum\": // #6\r\n case \"pantheonSoulWarrior\":\r\n case \"shadeSoulWarrior\":\r\n case \"pantheonCrystalGuardian\":\r\n case \"pantheonEnragedGuardian\":\r\n case \"mantisVillageFloorLever\":\r\n case \"whiteLadyRoom\":\r\n case \"throneRoomLoreTablet\":\r\n case \"towerOfLoveSecretRoom\":\r\n case \"weaversDenSecretRoom1\":\r\n case \"weaversDenSecretRoom2\":\r\n case \"cityCrest\":\r\n case \"soulSanctumShortcut\":\r\n case \"colosseumHiddenHotSpring\":\r\n (FindWorldItem(entries[i].id, entries[i].sceneName)) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"pathOfPainEntrance\":\r\n\r\n /* Backwards compatibility with older save files (before Grimm Troupe) */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"paleLurkersRetreat\":\r\n\r\n /* Backwards compatibility with older save files (before Godmaster) */\r\n if (playerData.hasOwnProperty(\"hasGodfinder\") === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {\r\n SetIconGreen(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"grimmTentSecretRoom\":\r\n\r\n /* Backwards compatibility with older save files */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else if (FindWorldItem(entries[i].id, entries[i].sceneName)) {\r\n SetIconGreen(section, i);\r\n } else {\r\n\r\n /* When the Ritual has been completed or Grimm Troupe has been Banished, the secret is no longer possible to discover */\r\n if (playerData.grimmChildLevel >= 4) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n }\r\n\r\n break;\r\n\r\n case \"relicsWandererJournal\":\r\n case \"relicsHallownestSeal\":\r\n case \"relicsKingsIdol\":\r\n case \"relicsArcaneEgg\":\r\n total = playerData[entries[i].nameHeld] + playerData[entries[i].nameSold];\r\n\r\n if (total >= entries[i].max) {\r\n\r\n SetIconGreen(section, i);\r\n } else if (total > 0) {\r\n\r\n SetIconPartial(section, i);\r\n } else {\r\n\r\n SetIconNone(section, i);\r\n }\r\n\r\n entries[i].amount = total;\r\n\r\n break;\r\n\r\n case \"arcaneEggLifebloodCoreRoom\":\r\n (FindWorldItem(entries[i].id, entries[i].sceneName)) ? SetIconGreen(section, i): SetIconNone(section, i);\r\n break;\r\n\r\n case \"pantheonHallownest\":\r\n if (playerData.hasOwnProperty(\"bossDoorStateTier5\") === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n (playerData.bossDoorStateTier5.completed === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n }\r\n break;\r\n\r\n case \"killsBindingSeal\":\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n (playerData[i] == 0) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"killsBigBuzzer\":\r\n (playerData[i] == 0) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n break;\r\n\r\n case \"killedVoidIdol_1\":\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n if (playerData[i] === false && (playerData.killedVoidIdol_2 === true || playerData.killedVoidIdol_3 === true)) SetIconGreen(section, i);\r\n break;\r\n\r\n case \"killedVoidIdol_2\":\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n }\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);\r\n if (playerData[i] === false && playerData.killedVoidIdol_3 === true) SetIconGreen(section, i);\r\n break;\r\n\r\n case \"greyPrinceDefeated\":\r\n // compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n\r\n } else if (playerData.zoteDead === true ||\r\n (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true)) {\r\n entries[i].disabled = true;\r\n }\r\n (playerData[i] === true) ? SetIconGreen(section, i): SetIconNone(section, i);\r\n if (playerData.zoteRescuedBuzzer === true && playerData[i] === false) SetIconRed(section, i);\r\n break;\r\n\r\n case \"zoteStatus\":\r\n SetIconRed(section, i);\r\n entries[i].name = entries[i].nameDefault;\r\n entries[i].spoiler = entries[i].spoilerDefault;\r\n\r\n if (playerData.zoteDead === true) {\r\n entries[i].name = entries[i].nameNeglect;\r\n entries[i].spoiler = entries[i].spoilerNeglect;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.killedZote === true) {\r\n entries[i].name = entries[i].nameRivalry;\r\n entries[i].spoiler = entries[i].spoilerRivalry;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.zoteRescuedBuzzer === false) {\r\n if (playerData.hasWalljump === false) {\r\n entries[i].name = entries[i].nameTrappedVengefly;\r\n entries[i].spoiler = entries[i].spoilerTrappedVengefly;\r\n\r\n } else if (playerData.hasWalljump === true) {\r\n entries[i].name = entries[i].nameNotRescuedVengefly;\r\n entries[i].spoiler = entries[i].spoilerNotRescuedVengefly;\r\n }\r\n } else if (playerData.zoteRescuedBuzzer === true) {\r\n if (playerData.zoteRescuedDeepnest === false) {\r\n entries[i].name = entries[i].nameTrappedDeepnest;\r\n entries[i].spoiler = entries[i].spoilerTrappedDeepnest;\r\n\r\n } else if (playerData.zoteRescuedDeepnest === true) {\r\n if (playerData.killedZote === false) {\r\n entries[i].name = entries[i].nameColosseum;\r\n entries[i].spoiler = entries[i].spoilerColosseum;\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"nailsmithStatus\":\r\n SetIconRed(section, i);\r\n entries[i].name = entries[i].nameDefault;\r\n entries[i].spoiler = entries[i].spoilerDefault;\r\n\r\n if (playerData.nailsmithKilled === true) {\r\n entries[i].name = entries[i].namePurity;\r\n entries[i].spoiler = entries[i].spoilerPurity;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.nailsmithConvoArt === true) {\r\n entries[i].name = entries[i].nameHappyCouple;\r\n entries[i].spoiler = entries[i].spoilerHappyCouple;\r\n\r\n SetIconGreen(section, i);\r\n\r\n } else if (playerData.nailsmithSpared === true) {\r\n entries[i].name = entries[i].nameSheoHutWaiting;\r\n entries[i].spoiler = entries[i].spoilerSheoHutWaiting;\r\n\r\n } else {\r\n entries[i].name = entries[i].nameUpgradeNail;\r\n entries[i].spoiler = entries[i].spoilerUpgradeNail;\r\n }\r\n break;\r\n\r\n case \"mrMushroomState1\":\r\n case \"mrMushroomState2\":\r\n case \"mrMushroomState3\":\r\n case \"mrMushroomState4\":\r\n case \"mrMushroomState5\":\r\n case \"mrMushroomState6\":\r\n case \"mrMushroomState7\":\r\n CheckMrMushroomState(section, entries[i], playerData[\"mrMushroomState\"]);\r\n break;\r\n\r\n case \"openedTownBuilding\":\r\n case \"openedCrossroads\":\r\n case \"openedGreenpath\":\r\n case \"openedRuins1\":\r\n case \"openedRuins2\":\r\n case \"openedFungalWastes\":\r\n case \"openedRoyalGardens\":\r\n case \"openedRestingGrounds\":\r\n case \"openedDeepnest\":\r\n case \"openedHiddenStation\":\r\n case \"openedStagNest\":\r\n\r\n /* backwards compatibility with earlier game versions */\r\n if (playerData.hasOwnProperty(i) === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n\r\n break;\r\n\r\n } else if (playerData[i] === true) {\r\n\r\n SetIconGreen(section, i);\r\n\r\n /* Create amount property before incrementing (avoids NaN) */\r\n if (!entries.stagStationsOpened.hasOwnProperty(\"amount\")) {\r\n entries.stagStationsOpened.amount = 0;\r\n }\r\n\r\n /* increment the stag stations amount by one */\r\n entries.stagStationsOpened.amount++;\r\n\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"stagStationsOpened\":\r\n\r\n /* backwards compatibility check */\r\n if (!playerData.hasOwnProperty(\"openedHiddenStation\")) {\r\n\r\n /* Subtract one from maximum for extended completion counting */\r\n entries[i].max--;\r\n }\r\n\r\n if (entries[i].amount >= entries[i].max) {\r\n SetIconGreen(section, i);\r\n } else if (entries[i].amount > 0) {\r\n SetIconPartial(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"mapCrossroads\":\r\n case \"mapGreenpath\":\r\n case \"mapFungalWastes\":\r\n case \"mapCliffs\":\r\n case \"mapCity\":\r\n case \"mapMines\":\r\n case \"mapWaterways\":\r\n case \"mapRestingGrounds\":\r\n case \"mapAbyss\":\r\n case \"mapOutskirts\":\r\n case \"mapFogCanyon\":\r\n case \"mapRoyalGardens\":\r\n case \"mapDeepnest\":\r\n\r\n if (playerData[i] === true) {\r\n\r\n SetIconGreen(section, i);\r\n\r\n /* Create amount property before incrementing (avoids NaN) */\r\n if (!entries.areaMaps.hasOwnProperty(\"amount\")) {\r\n entries.areaMaps.amount = 0;\r\n }\r\n\r\n /* increment the area maps amount by one */\r\n entries.areaMaps.amount++;\r\n\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n case \"areaMaps\":\r\n\r\n if (entries[i].amount >= entries[i].max) {\r\n SetIconGreen(section, i);\r\n } else if (entries[i].amount > 0) {\r\n SetIconPartial(section, i);\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n\r\n break;\r\n\r\n /* Unobtainable Unbreakable Charms after Grimm Troupe Banishment */\r\n case \"fragileGreed_unbreakable\":\r\n case \"fragileHealth_unbreakable\":\r\n case \"fragileStrength_unbreakable\":\r\n\r\n /* backwards compatibility with earlier game versions */\r\n if (playerData.hasOwnProperty(i) === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n\r\n } else if (playerData[i] === true) {\r\n SetIconGreen(section, i);\r\n } else {\r\n\r\n /* If player doesn't have an Unbreakable Charm, and they Banished the Grimm Troupe, the entry needs to be disabled */\r\n if (playerData.hasOwnProperty(\"destroyedNightmareLantern\") && playerData.destroyedNightmareLantern === true) {\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n } else {\r\n SetIconRed(section, i);\r\n }\r\n }\r\n\r\n break;\r\n\r\n default:\r\n\r\n // backwards compatibility with earlier game versions\r\n if (playerData.hasOwnProperty(i) === false) {\r\n\r\n SetIconNone(section, i);\r\n entries[i].disabled = true;\r\n break;\r\n\r\n } else if (playerData[i] === true) {\r\n\r\n SetIconGreen(section, i);\r\n } else {\r\n\r\n SetIconRed(section, i);\r\n }\r\n } // end switch (i)\r\n } // end for (let i in dataObject)\r\n\r\n // ==========================================\r\n // -------------- Methods ---------------- //\r\n\r\n /**\r\n * Verifies if the specific Interactable (Item, Boss, Chest etc.) is activated (completed). Returns true or false.\r\n * @param {string} idText ID text of the Interactable (id in sceneData)\r\n * @param {string} sceneNameText Map codename of the Interactable (sceneName in sceneData)\r\n * @returns {boolean}\r\n */\r\n function FindWorldItem(idText = \"\", sceneNameText = \"\") {\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n if (worldData[i].id === idText && worldData[i].sceneName === sceneNameText && worldData[i].activated === true) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Searches for a given item that the player has found and returns the amount of them that the player completed.\r\n * @param {string} itemId Name of the item\r\n * @returns {number}\r\n */\r\n function CountWorldItem(itemId = \"\") {\r\n let total = 0;\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n if (worldData[i].id === itemId) {\r\n if (worldData[i].activated === true) total++;\r\n }\r\n }\r\n return total;\r\n }\r\n\r\n /**\r\n * Counts the total amount of Geo Rocks Unbroken or Broken. Logs to console all the Unbroken IDs and Map locations.\r\n * @param {number} arrayLength How many items the Geo Rocks array is currently storing (for iteration)\r\n * @param {string} mode Choose which Geo Rocks to count (broken or unbroken)\r\n */\r\n /* function CountGeoRocks(arrayLength, mode = \"unbroken\") {\r\n\r\n let countTotal = 0;\r\n let geoRocksLog = [];\r\n\r\n if (mode === \"unbroken\") {\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (sceneData.geoRocks[i].hitsLeft > 0) {\r\n countTotal++;\r\n geoRocksLog.push(`#${countTotal} 🏔️ ${sceneData.geoRocks[i].id} 🗺️ ${TranslateMapName(sceneData.geoRocks[i].sceneName)} ⌨️ ${sceneData.geoRocks[i].sceneName}`);\r\n }\r\n }\r\n\r\n if (!countTotal) {\r\n console.log(\"%cAll Geo Rocks Broken!\", \"color: #16c60c; font-weight: 700;\");\r\n } else {\r\n console.groupCollapsed(`%cUnbroken Geo Rocks (${countTotal}):`, \"color: #16c60c; font-weight: 700;\");\r\n\r\n for (let i = 0, length = geoRocksLog.length; i < length; i++) {\r\n console.log(geoRocksLog[i]);\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n } else {\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (sceneData.geoRocks[i].hitsLeft === 0) countTotal++;\r\n }\r\n }\r\n\r\n return countTotal;\r\n } */\r\n\r\n /**\r\n * Counts the amount of in-game Interactables Activated or Not Activated. Logs to console all the Not Activated IDs and Map locations.\r\n * @param {number} arrayLength How many items the Interactables array is currently storing (for iteration)\r\n * @param {string} mode Choose which Interactables to count (notActivated or activated)\r\n */\r\n function CountItems(arrayLength, mode = \"notActivated\") {\r\n\r\n let countTotal = 0;\r\n let itemsLog = [];\r\n\r\n if (mode === \"notActivated\") {\r\n\r\n /* \r\n let list = new ItemListBox(worldData);\r\n \r\n */\r\n\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (worldData[i].activated === false &&\r\n worldData[i].semiPersistent === false) {\r\n countTotal++;\r\n itemsLog.push(`#${countTotal} ${worldData[i].id} 🗺️ ${TranslateMapName(worldData[i].sceneName)} ⌨️ ${worldData[i].sceneName}`);\r\n }\r\n }\r\n\r\n if (!countTotal) {\r\n console.log(\"%cAll Interactables Activated!\", \"color: #16c60c; font-weight: 700;\");\r\n } else {\r\n console.groupCollapsed(`%cInteractables Not Activated (${countTotal}):`, \"color: #16c60c; font-weight: 700;\");\r\n\r\n for (let i = 0, length = itemsLog.length; i < length; i++) {\r\n console.log(itemsLog[i]);\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n } else {\r\n for (let i = 0; i < arrayLength; i++) {\r\n if (worldData[i].activated === true) countTotal++;\r\n }\r\n }\r\n\r\n return countTotal;\r\n }\r\n\r\n /**\r\n * Compares and logs all unrescued Grubs in a list: IDs and map locations\r\n */\r\n /* function LogMissingGrubs() {\r\n\r\n let rescuedGrubsSceneList = [];\r\n\r\n for (let i = 0, length = worldData.length; i < length; i++) {\r\n if (worldData[i].id.includes(\"Grub Bottle\")) {\r\n if (worldData[i].activated === true) {\r\n // There are 3 duplicates of the same map scene name from older game save files. Prevents adding duplicates\r\n // if (worldData[i].sceneName === \"Ruins2_11\" && worldData[i].id === \"Grub Bottle (1)\") {\r\n // continue;\r\n // } else if (worldData[i].sceneName === \"Ruins2_11\" && worldData[i].id === \"Grub Bottle (2)\") {\r\n // continue;\r\n // } else { \r\n rescuedGrubsSceneList.push(worldData[i].sceneName);\r\n // }\r\n }\r\n }\r\n }\r\n\r\n // Filtering the reference database Grub list to include only the missing values\r\n let missingGrubsList = section.grubsList.filter(x => !rescuedGrubsSceneList.includes(x));\r\n let length = missingGrubsList.length;\r\n\r\n if (!length) {\r\n console.log(\"%cAll Grubs Rescued!\", \"color: #16c60c; font-weight: 700;\");\r\n } else {\r\n console.groupCollapsed(`%cUnrescued Grubs (${length}):`, \"color: #16c60c; font-weight: 700;\");\r\n\r\n for (let i = 0; i < length; i++) {\r\n console.log(`#${section.grubsList.indexOf(missingGrubsList[i]) + 1} 🗺️ ${TranslateMapName(missingGrubsList[i])} ⌨️ ${missingGrubsList[i]}`);\r\n }\r\n\r\n console.groupEnd();\r\n }\r\n\r\n return false;\r\n } */\r\n} // end function CheckAdditionalThings()\r\n\r\n/**\r\n * Checks and fills all the 7 locations of Mr Mushroom.\r\n * @param {object} section ID of the HTML element for data appending\r\n * @param {object} entry object containing the Mr Mushroom name and spoilers/locations\r\n * @param {number} mrMushroomState playerData.mrMushroomState read from the save file. (0-8)\r\n */\r\nfunction CheckMrMushroomState(section, entry, mrMushroomState = 0) {\r\n\r\n if (mrMushroomState >= entry.state) {\r\n SetIconGreen(section, `mrMushroomState${entry.state - 1}`);\r\n } else {\r\n SetIconRed(section, `mrMushroomState${entry.state - 1}`);\r\n }\r\n}\r\n\r\n/**\r\n * Checks and marks all the Hunter's Journal creatures entries with amounts, partial completion etc.\r\n * @param {object} db Reference to the HK database\r\n * @param {object} playerData Reference to the player's save data\r\n */\r\nfunction CheckHuntersJournal(db, sectionName, playerData) {\r\n\r\n let section = db.sections[sectionName];\r\n let entries = db.sections[sectionName].entries;\r\n //let entriesStatistics = db.sections.statistics.entries; // Alba: disabled for future use\r\n let name = \"\";\r\n let nameDefault = \"\";\r\n let amountKillsLeft = 0;\r\n let journalPlayerList = playerData.EnemyJournalKillData.list\r\n\r\n for (let entry in entries) {\r\n\r\n let MonsterInfo = journalPlayerList.find(journalPlayerList => journalPlayerList.Name === entries[entry].databaseName);\r\n\r\n //recorded and founded and reached to the requirement\r\n if (MonsterInfo !== undefined \r\n && MonsterInfo.Record.Kills >= entries[entry].killRequire) \r\n {\r\n entries[entry].name = entries[entry].gameName;\r\n SetIconGreen(section, entry);\r\n } \r\n // didnt reach the limit but at least kill him once.\r\n else if (MonsterInfo !== undefined \r\n && MonsterInfo.Record.Kills >= 1) \r\n {\r\n name = entries[entry].gameName + ` (${(entries[entry].killRequire-MonsterInfo.Record.Kills)})`;\r\n entries[entry].name = name;\r\n SetIconPartialJournal(section, entry);\r\n }\r\n else \r\n {\r\n name = entries[entry].gameName + ` (${(entries[entry].killRequire)})`;\r\n entries[entry].name = name;\r\n SetIconRed(section, entry);\r\n }\r\n\r\n\r\n }\r\n}\r\n\r\n\r\nfunction CheckPantheon(db, sectionName, playerData) {\r\n\r\n let section = db.sections[sectionName];\r\n let property = db.sections[sectionName].property;\r\n let entries = db.sections[sectionName].entries;\r\n\r\n for (let entry in entries) {\r\n\r\n /* Backwards compatibility, disable and skip to next when not found */\r\n if (!playerData.hasOwnProperty(property)) {\r\n\r\n SetIconNone(section, entry);\r\n entries[entry].disabled = true;\r\n\r\n continue;\r\n }\r\n\r\n if (playerData[property][entry] === true) {\r\n\r\n switch (entry) {\r\n\r\n case \"boundNail\":\r\n SetIcon(section, entry, \"bindingNail\");\r\n break;\r\n\r\n case \"boundShell\":\r\n SetIcon(section, entry, \"bindingShell\");\r\n break;\r\n\r\n case \"boundCharms\":\r\n SetIcon(section, entry, \"bindingCharms\");\r\n break;\r\n\r\n case \"boundSoul\":\r\n SetIcon(section, entry, \"bindingSoul\");\r\n break;\r\n\r\n case \"allBindings\":\r\n SetIcon(section, entry, \"bindingAll\");\r\n break;\r\n\r\n default:\r\n SetIconGreen(section, entry);\r\n }\r\n } else {\r\n SetIconRed(section, entry);\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction CheckHallOfGods(db, playerData) {\r\n\r\n let section = db.sections.hallOfGods;\r\n let entries = db.sections.hallOfGods.entries;\r\n let id = \"\";\r\n let check = \"\";\r\n let isUnlocked = false;\r\n\r\n for (let entry in entries) {\r\n\r\n id = entries[entry].id;\r\n\r\n /* Backwards compatibility, disable and skip to next when not found */\r\n if (!playerData.hasOwnProperty(`statueState${id}`)) {\r\n\r\n SetIconNone(section, entry);\r\n entries[entry].disabled = true;\r\n\r\n continue;\r\n }\r\n\r\n check = entries[entry].check;\r\n isUnlocked = playerData[`statueState${id}`].isUnlocked;\r\n\r\n switch (entry) {\r\n\r\n case \"GreyPrinceUnlocked\":\r\n case \"GreyPrinceAttuned\":\r\n case \"GreyPrinceAscended\":\r\n case \"GreyPrinceRadiant\":\r\n\r\n /* When Zote OFF, disable entry and skip to next entry */\r\n if (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true) {\r\n\r\n SetIconNone(section, entry);\r\n entries[entry].disabled = true;\r\n\r\n continue;\r\n }\r\n }\r\n\r\n if (playerData[`statueState${id}`][check] === true) {\r\n\r\n switch (check) {\r\n\r\n case \"isUnlocked\":\r\n SetIconGreen(section, entry);\r\n break;\r\n\r\n case \"completedTier1\":\r\n SetIcon(section, entry, \"attuned\");\r\n break;\r\n\r\n case \"completedTier2\":\r\n SetIcon(section, entry, \"ascended\");\r\n break;\r\n\r\n case \"completedTier3\":\r\n SetIcon(section, entry, \"radiant\");\r\n break;\r\n\r\n default:\r\n SetIcon(section, entry, \"partial\");\r\n break;\r\n }\r\n\r\n }\r\n /* When boss is only unlocked, other entries get a gray icon (awaiting completion) */\r\n else if (isUnlocked) {\r\n SetIcon(section, entry, \"partial\");\r\n }\r\n /* When not unlocked, every entry gets a red icon */\r\n else {\r\n SetIconRed(section, entry);\r\n }\r\n\r\n } /* end for (let entry in entries) */\r\n\r\n}\r\n\r\n\r\n/**\r\n * Checks, validates and shows hints to the player depending on their save progression, in chronological order. Shows only hint for the last uncompleted event. If Hollow Knight is defeated, shows a dummy text.\r\n * @param {object} section object containing div hints ID and h2 title\r\n * @param {object} dataObject object containing all hints data\r\n * @param {object} playerData object containing HK Player Data to look in\r\n * @param {object} worldData object containing HK World Data to look in\r\n * @returns {boolean} true when defeated Hollow Knight, false if not\r\n */\r\nfunction CheckHintsTrue(section, dataObject, playerData, worldData) {\r\n\r\n if (playerData.killedHollowKnight === true) {\r\n // a text to show when player already finished their first playthrough (killed Hollow Knight first time)\r\n section.current = \"endOfHints\";\r\n return true;\r\n }\r\n\r\n for (let i in dataObject) {\r\n\r\n if (i === \"endOfHints\") {\r\n break;\r\n\r\n } else if (playerData[i] === true) {\r\n continue;\r\n\r\n } else if (i === \"fireballLevel\") {\r\n if (playerData[i] >= 1) {\r\n continue;\r\n\r\n } else {\r\n section.current = i;\r\n break;\r\n }\r\n } else if (i === \"Crossroads_04\") {\r\n let GruzMotherDefeated = false;\r\n\r\n for (let k = 0, length = worldData.length; k < length; k++) {\r\n if (worldData[k].id === \"Battle Scene\" && worldData[k].sceneName === \"Crossroads_04\" && worldData[k].activated === true) {\r\n GruzMotherDefeated = true;\r\n break;\r\n }\r\n }\r\n if (GruzMotherDefeated) {\r\n continue; // next dataObject (i)\r\n\r\n } else {\r\n section.current = i;\r\n break;\r\n }\r\n } else if (i === \"dungDefenderOrHornet2\") {\r\n if (playerData.defeatedDungDefender === true) {\r\n continue;\r\n\r\n } else if (playerData.hornetOutskirtsDefeated === true) {\r\n continue;\r\n\r\n } else { // if no Dung Defender or Hornet 2\r\n section.current = i;\r\n break;\r\n }\r\n } else if (i === \"ismaTearOrShadeCloak\") {\r\n if (playerData.hasAcidArmour === true) {\r\n continue;\r\n\r\n } else if (playerData.hasKingsBrand === true) {\r\n if (playerData.hasShadowDash === true) {\r\n continue;\r\n\r\n } else { // if Kings Brand but no Shade Cloak\r\n section.current = i;\r\n break;\r\n }\r\n } else { // if no Isma's Tear or Kings Brand\r\n section.current = i;\r\n break;\r\n }\r\n /* \r\n After killing Hollow Knight:\r\n - gather 1800 Essence (Essence sources)\r\n - get Awoken Dream Nail from Seer\r\n - use Awoken Dream Nail on the knight corpse in Ancient Basin/Palace Grounds (discover White Palace)\r\n - acquire White Fragment from White Palace\r\n - defeat Hornet 2\r\n - get King's Brand\r\n - open door to the Abyss\r\n - light the lighthouse\r\n - get Shade Cloak\r\n - visit Queen's Gardens\r\n - defeat Traitor Lord\r\n - get White Fragment from White Lady\r\n - equip Kingsoul and visit Birthplace\r\n - get Void Heart\r\n - go to Black Egg Temple, Dream Nail Hollow Knight and defeat Radiance (end of hints)\r\n */\r\n } else { // if anything from the hints list is not done\r\n section.current = i;\r\n break;\r\n }\r\n } // end: for (let i in dataObject)\r\n} // function CheckHintsTrue()\r\n\r\n/**\r\n * Pre-Cleans HTML. Reads contents inside text area and parses it to a JavaScript object. If not empty, runs HKCheckCompletion() to check data.\r\n */\r\nfunction HKReadTextArea(textAreaId = \"\") {\r\n\r\n // start benchmark\r\n benchmarkTimes.HKReadTextArea.timeStart = performance.now();\r\n\r\n let contents = document.getElementById(textAreaId).value;\r\n\r\n if (contents.length) {\r\n\r\n // starts the main HTML generating function GenerateInnerHTML() and ensures proper checkbox behaviour\r\n InitializeHTMLPopulation(HK);\r\n\r\n try {\r\n let jsonObject = JSON.parse(contents);\r\n // console.log(jsonObject);\r\n if (jsonObject.hasOwnProperty(\"playerData\")) {\r\n\r\n HKCheckCompletion(jsonObject);\r\n }\r\n\r\n // end benchmark and show results\r\n benchmarkTimes.HKReadTextArea.timeEnd = performance.now();\r\n\r\n let result = benchmarkTimes.HKReadTextArea.timeEnd - benchmarkTimes.HKReadTextArea.timeStart;\r\n\r\n console.info(`HKReadTextArea() time (ms) = %c${result.toFixed(2)}`, `color: #008cdc; font-weight: 700;`);\r\n\r\n } catch (error) {\r\n HK.saveAnalyzed = false;\r\n alert(`This seems like not a valid Hollow Knight save.\\n${error}`);\r\n console.info(`This seems like not a valid Hollow Knight save.\\n${error}`);\r\n }\r\n } else {\r\n /* reset timer */\r\n benchmarkTimes.HKReadTextArea.timeStart = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Populate all HTML with given ID and their initial data set as false (used at DOM load)\r\n * @param {object} db JavaScript Object containing all HTML IDs to populate\r\n */\r\nfunction InitializeHTMLPopulation(db) {\r\n\r\n GenerateInnerHTML(db);\r\n\r\n // Check local storage first to set proper checkbox state before the below functions start (default is always unchecked)\r\n if (StorageAvailable('localStorage')) {\r\n if (localStorage.getItem(\"hkCheckboxHints\") === \"checked\") document.getElementById(\"checkbox-hints\").checked = true;\r\n if (localStorage.getItem(\"hkCheckboxSpoilers\") === \"checked\") document.getElementById(\"checkbox-spoilers\").checked = true;\r\n }\r\n\r\n // Prevents wrong checkbox behaviour (must run after everything is finished)\r\n CheckboxHintsToggle();\r\n CheckboxSpoilersToggle();\r\n}\r\n\r\n/**\r\n * Reset the object state in memory to default values, like before first save analyzing. Undo all changes.\r\n * @param {object} db database object reference\r\n */\r\nfunction ResetCompletion(db) {\r\n\r\n let sections = db.sections;\r\n let entries = {};\r\n\r\n db.saveAnalyzed = false;\r\n\r\n /* Bring Extended Completion to default values (0) */\r\n let gameCompletionExtended = db.sections.intro.entries.gameCompletionExtended;\r\n let intro = db.sections.intro;\r\n\r\n intro.extendedCompletionDone = 0;\r\n intro.extendedCompletionTotal = 0;\r\n gameCompletionExtended.spoiler = 0;\r\n gameCompletionExtended.spoilerAfter = \"\";\r\n\r\n for (let section in sections) {\r\n entries = sections[section].entries;\r\n\r\n if (sections[section].hasOwnProperty(\"percent\")) sections[section].percent = 0;\r\n\r\n if (sections[section].hasOwnProperty(\"midPercent\")) sections[section].midPercent = 0;\r\n\r\n switch (section) {\r\n case \"intro\":\r\n case \"hints\":\r\n break;\r\n\r\n default:\r\n\r\n for (let entry in entries) {\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n entries[entry].icon = \"red\";\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"disabled\")) {\r\n entries[entry].disabled = false;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"amount\")) {\r\n entries[entry].amount = 0;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"amountTotal\")) {\r\n entries[entry].amountTotal = 0;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"max\")) {\r\n entries[entry].max = entries[entry].maxDefault;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/* -------------------------- Classes --------------------------------------------------------------------------------------- */\r\n\r\nclass DataChecker {\r\n\r\n /**\r\n * Used for checking and verifying data (like Grubs, Items or Geo Rocks) inside a player's save file.\r\n * Pass a save to the object and it will be split automatically to playerData, boolData and geoRocksData.\r\n * @param {object} saveFile The whole player's save file, in JSON format\r\n */\r\n constructor(saveFile) {\r\n this.saveFile = saveFile;\r\n this.playerData = saveFile.playerData;\r\n this.boolData = saveFile.sceneData.persistentBoolItems;\r\n this.geoRocksData = saveFile.sceneData.geoRocks;\r\n }\r\n\r\n /**\r\n * Verifies if a specific Collectible is found in boolData and returns true/false.\r\n * @param {string} id the Collectible's id in the database.\r\n * @param {string} sceneName the Collectible's sceneName in the database.\r\n * @returns {boolean}\r\n */\r\n _FindItem(entry = {}) {\r\n\r\n for (let i = 0, length = this.boolData.length; i < length; i++) {\r\n if (this.boolData[i].id === entry.id &&\r\n this.boolData[i].sceneName === entry.sceneName &&\r\n this.boolData[i].activated === true) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n } // end _FindItem\r\n\r\n /**\r\n * Verifies if a specific Geo Rock is destroyed and returns true/false.\r\n * @param {string} id the Geo Rock's id in the database.\r\n * @param {string} sceneName the Geo Rock's sceneName in the database.\r\n * @returns {boolean}\r\n */\r\n _FindGeoRock(entry = {}) {\r\n\r\n for (let i = 0, length = this.geoRocksData.length; i < length; i++) {\r\n if (this.geoRocksData[i].id === entry.id &&\r\n this.geoRocksData[i].sceneName === entry.sceneName &&\r\n this.geoRocksData[i].hitsLeft === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n } // end _FindGeoRock\r\n\r\n /**\r\n * Verifies the status of all items in a given section (e.g. Grubs or Whispering Roots) from the database.\r\n * @param {object} section Provide a section object to check.\r\n */\r\n checkItems(section) {\r\n this.section = section;\r\n this.entries = section.entries;\r\n\r\n for (let entry in this.entries) {\r\n\r\n switch (entry) {\r\n\r\n // The Collector: Tower of Love Grubs activation Bug in the game - needs a workaround.\r\n // All 3 Grubs in the Tower of Love must be treated as one.\r\n case \"grub33\":\r\n case \"grub34\":\r\n\r\n if (this.entries.grub32.icon === \"green\") {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n break;\r\n\r\n // playerData activation checks true/false\r\n case \"hallownestSeal17\": // The Seer's Essence Reward - Hallownest Seal\r\n case \"arcaneEgg2\": // The Seer's Essence Reward - Arcane Egg\r\n case \"rancidEgg20\": // Sly's Rancid Egg shop item\r\n\r\n if (this.playerData[this.entries[entry].id] === true) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n break;\r\n\r\n // Tuk's Rancid Egg - Normal or Steel Soul mode behaviour\r\n case \"rancidEgg21\":\r\n\r\n // Steel Soul\r\n if (this.playerData.permadeathMode > 0) {\r\n\r\n // id: \"Shiny Item\", sceneName: \"Waterways_03\"\r\n if (this._FindItem(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n // Set Steel Soul text description\r\n this.entries[entry].spoiler = this.entries[entry].spoilerSteelSoul;\r\n }\r\n // Normal Mode\r\n else {\r\n\r\n // playerData.tukDungEgg\r\n if (this.playerData[this.entries[entry].idPlayerData] === true) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n // Set Normal Mode text description\r\n this.entries[entry].spoiler = this.entries[entry].spoilerNormal;\r\n }\r\n\r\n break;\r\n\r\n // missable Arcane Egg in Lifeblood Core Room\r\n case \"arcaneEgg4\":\r\n\r\n if (this._FindItem(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n }\r\n // When got the Lifeblood Core charm, but didn't pick up the Arcane Egg\r\n else if (this.playerData.gotCharm_9 === true) {\r\n SetIconNone(this.section, entry);\r\n this.entries[entry].disabled = true;\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n\r\n break;\r\n\r\n // boolData activation checks\r\n default:\r\n\r\n if (this._FindItem(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n }\r\n }\r\n } // end checkItems\r\n\r\n /**\r\n * Verifies the status of all Geo Rocks from the database.\r\n * @param {object} section Provide a Geo Rocks section object to check.\r\n */\r\n checkGeoRocks(section) {\r\n this.section = section;\r\n this.entries = section.entries;\r\n\r\n for (let entry in this.entries) {\r\n\r\n switch (entry) {\r\n\r\n default:\r\n\r\n if (this._FindGeoRock(this.entries[entry])) {\r\n SetIconGreen(this.section, entry);\r\n } else {\r\n SetIconRed(this.section, entry);\r\n }\r\n }\r\n }\r\n } // end checkGeoRocks\r\n\r\n} // end class DataChecker\r\n\r\n/* ----------------------- Event Listeners -------------------------- */\r\n\r\n// Populate HTML at load (before img and css)\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n InitializeHTMLPopulation(HK);\r\n});\r\n\r\n// Analyze Text button\r\ndocument.getElementById(\"save-area-read\").addEventListener(\"click\", () => {\r\n HKReadTextArea(\"save-area\");\r\n}, false);\r\n\r\nexport {\r\n // to use in LoadSaveFile.js for auto-analyzing file after decoding\r\n HKCheckCompletion\r\n};","/* \r\n Parts of the code thanks to bloodorca https://github.com/bloodorca/hollow (base64.js, functions.js) with slight modifications.\r\n The steps used there for decryption were taken from KayDeeTee https://github.com/KayDeeTee/Hollow-Knight-SaveManager\r\n Without these two people the existence of this tool wouldn't be possible :)\r\n*/\r\n\r\n// ---------------- Constants ----------------- //\r\n\r\n// AES JS for file decryption\r\nconst aesjs = require(\"./aes-js.js\");\r\n// For reading the text area after save decoding\r\nimport {\r\n HKCheckCompletion\r\n} from \"./HKCheckCompletion.js\";\r\n\r\nimport {\r\n Benchmark,\r\n benchmarkTimes\r\n} from \"./page-functions.js\";\r\n\r\nconst CSHARP_HEADER = [0, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0]; // 22 bytes\r\n\r\nconst BASE64_ARRAY = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".split(\"\").map(c => c.charCodeAt(0));\r\nconst BASE64_DECODE_TABLE = new Map(BASE64_ARRAY.map((ord, i) => [ord, i]));\r\n\r\nconst AES_KEY = new TextEncoder().encode('UKu52ePUBwetZ9wNX88o54dnfKRu0T1l'); // encodes a string to Uint8Array (prepare for AES JS)\r\nconst ECB_STREAM_CIPHER = new aesjs.ModeOfOperation.ecb(AES_KEY); // create a new AES stream cipher object using the encoded key\r\n\r\n// ---------------- Variables ----------------- //\r\n\r\n/* let benchLSFBegin, benchLSFEnd, benchTotal; */\r\n\r\n// ---------------- Functions ----------------- //\r\n\r\n/**\r\n * Main input tag file function. Selects the first file, reads it as an Array Buffer, starts the processing of the file when loaded.\r\n * Starts benchmarking.\r\n * @param {FileList} input FileList object containing a list of File objects. The FileList behaves like an array, so you can check its length property to get the number of selected files.\r\n */\r\n// eslint-disable-next-line no-unused-vars\r\nfunction LoadSaveFile(input, time) {\r\n\r\n const inputFileList = input.files;\r\n // console.info(\"Input length: \" + input.files.length)\r\n // Cease further processing if user canceled the file input dialog\r\n if (inputFileList.length < 1) return false;\r\n\r\n // start benchmark\r\n benchmarkTimes.LoadSaveFile.timeStart = time;\r\n benchmarkTimes.Total.timeStart = time;\r\n benchmarkTimes.HKReadTextArea.timeStart = 0;\r\n benchmarkTimes.HKReadTextArea.timeEnd = 0;\r\n\r\n // Prepares a File object from the first file of the input files for reading as an Array Buffer\r\n let inputFileObject = inputFileList[0];\r\n\r\n // Cleans the file list to avoid problems after subsequent use\r\n // document.getElementById(\"save-area-file\").value = \"\";\r\n\r\n // 1. read file\r\n // The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.\r\n // It is an array of bytes, often referred to in other languages as a \"byte array\".\r\n\r\n // new FileReader()\r\n let inputReader = new FileReader();\r\n // readAsArrayBuffer(file)\r\n inputReader.readAsArrayBuffer(inputFileObject);\r\n // addEventListener(\"load\", function) - to decode the file when loaded\r\n inputReader.addEventListener(\"load\", ProcessFileObject);\r\n}\r\n\r\n/**\r\n * Reads the File object as an Array Buffer and does all other operations (decoding, decryption, conversion to string, pasting to text area).\r\n * Launches the HKReadTextArea() function automatically after pasting the string to text area\r\n */\r\nfunction ProcessFileObject() {\r\n let inputArrayBuffer = this.result;\r\n let decodedString;\r\n\r\n // 2. Decode file\r\n\r\n try {\r\n // Uint8Array(ArrayBuffer) uint8_t equivalent in C\r\n inputArrayBuffer = new Uint8Array(inputArrayBuffer);\r\n\r\n // ArrayBuffer.slice()\r\n // The slice() method copies up to, but not including, the byte indicated by the end parameter.\r\n inputArrayBuffer.slice();\r\n\r\n // remove C# header and LengthPrefixedString header (ArrayBuffer)\r\n inputArrayBuffer = RemoveHeaders(inputArrayBuffer);\r\n\r\n // base64 Decoding (ArrayBuffer)\r\n inputArrayBuffer = Base64Decode(inputArrayBuffer);\r\n\r\n // AES decryption (ECB) removes pkcs7 padding (ArrayBuffer)\r\n inputArrayBuffer = AESDecryption(inputArrayBuffer);\r\n\r\n // Convert ArrayBuffer to string/text TextDecoder().decode(ArrayBuffer)\r\n decodedString = new TextDecoder().decode(inputArrayBuffer);\r\n\r\n // finish and show benchmark\r\n /* benchLSFEnd = new Date(); */\r\n benchmarkTimes.LoadSaveFile.timeEnd = performance.now();\r\n /* console.info(\"LoadSaveFile() time (ms) =\", benchLSFEnd - benchLSFBegin); */\r\n\r\n // 4. Analyze the decoded string immediately\r\n try {\r\n HKCheckCompletion(JSON.parse(decodedString));\r\n } catch (error) {\r\n alert(`This seems like not a valid Hollow Knight save. ${error}`);\r\n console.info(`This seems like not a valid Hollow Knight save. ${error}`);\r\n }\r\n\r\n // 5. Paste decoded string file to text area\r\n (async () => {\r\n document.getElementById(\"save-area\").value = \"\";\r\n document.getElementById(\"save-area\").value = await decodedString;\r\n })();\r\n\r\n // finish total and show benchmark\r\n benchmarkTimes.Total.timeEnd = performance.now();\r\n\r\n Benchmark(benchmarkTimes);\r\n /* console.info(\"Total time (ms) =\", benchTotal - benchLSFBegin); */\r\n\r\n // alert(`Decoded String: ${decodedString}`);\r\n // alert(`Array Buffer: ${inputArrayBuffer}`);\r\n } catch (error) {\r\n alert(`The file cannot be decoded. ${error}`);\r\n console.info(`The file cannot be decoded. ${error}`);\r\n }\r\n}\r\n\r\n/**\r\n * Removes C# header, LengthPrefixedString header and byte 11 at the end of the Uint8 Array Buffer\r\n * @param {Uint8Array} buffer Uint8Array buffer for removing the header from\r\n * @param {Uint8Array} csHeader Uint8Array for the C# header length calculation\r\n * @returns {Uint8Array}\r\n */\r\nfunction RemoveHeaders(buffer, csHeader = CSHARP_HEADER) {\r\n // Remove the fixed C# header and byte 11 at the end. \r\n buffer = buffer.subarray(csHeader.length, buffer.length - 1);\r\n\r\n // Remove LengthPrefixedString header\r\n let lengthCount = 0;\r\n for (let i = 0; i < 5; i++) {\r\n lengthCount++;\r\n if ((buffer[i] & 0x80) == 0) {\r\n break;\r\n }\r\n }\r\n\r\n return buffer.subarray(lengthCount);\r\n}\r\n\r\n/**\r\n * Decodes an Array Buffer using a Base64 decode table\r\n * @param {Uint8Array} buffer Uint8Array Buffer to decode\r\n * @returns {Uint8Array}\r\n */\r\nfunction Base64Decode(buffer) {\r\n buffer = new Uint8Array(buffer).slice();\r\n buffer = buffer.map(v => BASE64_DECODE_TABLE.get(v));\r\n\r\n // The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.\r\n let p = buffer.indexOf(64);\r\n let end;\r\n\r\n if (p != -1) {\r\n end = p;\r\n } else {\r\n end = buffer.length;\r\n }\r\n\r\n buffer = buffer.subarray(0, end);\r\n\r\n let output = new Uint8Array(3 * buffer.length / 4);\r\n let continuous = Math.floor(buffer.length / 4) * 4;\r\n\r\n for (let i = 0; i < continuous; i += 4) {\r\n let k = 3 * i / 4;\r\n output[k] = buffer[i] << 2 | buffer[i + 1] >> 4;\r\n output[k + 1] = (buffer[i + 1] & 0x0F) << 4 | buffer[i + 2] >> 2;\r\n output[k + 2] = (buffer[i + 2] & 0x03) << 6 | buffer[i + 3];\r\n }\r\n if (buffer[continuous] != undefined) {\r\n let k = 3 * continuous / 4;\r\n output[k] = buffer[continuous] << 2 | buffer[continuous + 1] >> 4;\r\n if (buffer[continuous + 2] != undefined) {\r\n output[k + 1] = (buffer[continuous + 1] & 0x0F) << 4 | buffer[continuous + 2] >> 2;\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\n/**\r\n * Decrypt an Uint8Array Buffer using aesjs (ECB) and a predefined AES key + remove pkcs7 padding\r\n * @param {Uint8Array} buffer Uint8Array buffer to decrypt\r\n * @returns {Uint8Array}\r\n */\r\nfunction AESDecryption(buffer, cipherObject = ECB_STREAM_CIPHER) {\r\n let output = cipherObject.decrypt(buffer);\r\n return output.subarray(0, -output[output.length - 1]);\r\n}\r\n\r\n// Assign actions (functions) to launch when a specific element is used\r\ndocument.getElementById(\"save-area-file\").addEventListener(\"change\", (event) => {\r\n LoadSaveFile(event.target, performance.now());\r\n});\r\ndocument.getElementById(\"save-area-file\").addEventListener(\"click\", (mouseEvent) => {\r\n mouseEvent.target.value = \"\";\r\n});\r\n\r\nexport {\r\n LoadSaveFile\r\n};","/* eslint-disable */\r\n\"use strict\";\r\n\r\n(function (root) {\r\n\r\n function checkInt(value) {\r\n return (parseInt(value) === value);\r\n }\r\n\r\n function checkInts(arrayish) {\r\n if (!checkInt(arrayish.length)) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < arrayish.length; i++) {\r\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function coerceArray(arg, copy) {\r\n\r\n // ArrayBuffer view\r\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\r\n\r\n if (copy) {\r\n if (arg.slice) {\r\n arg = arg.slice();\r\n } else {\r\n arg = Array.prototype.slice.call(arg);\r\n }\r\n }\r\n\r\n return arg;\r\n }\r\n\r\n // It's an array; check it is a valid representation of a byte\r\n if (Array.isArray(arg)) {\r\n if (!checkInts(arg)) {\r\n throw new Error('Array contains invalid value: ' + arg);\r\n }\r\n\r\n return new Uint8Array(arg);\r\n }\r\n\r\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\r\n if (checkInt(arg.length) && checkInts(arg)) {\r\n return new Uint8Array(arg);\r\n }\r\n\r\n throw new Error('unsupported array-like object');\r\n }\r\n\r\n function createArray(length) {\r\n return new Uint8Array(length);\r\n }\r\n\r\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\r\n if (sourceStart != null || sourceEnd != null) {\r\n if (sourceArray.slice) {\r\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\r\n } else {\r\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\r\n }\r\n }\r\n targetArray.set(sourceArray, targetStart);\r\n }\r\n\r\n\r\n\r\n var convertUtf8 = (function () {\r\n function toBytes(text) {\r\n var result = [],\r\n i = 0;\r\n text = encodeURI(text);\r\n while (i < text.length) {\r\n var c = text.charCodeAt(i++);\r\n\r\n // if it is a % sign, encode the following 2 bytes as a hex value\r\n if (c === 37) {\r\n result.push(parseInt(text.substr(i, 2), 16))\r\n i += 2;\r\n\r\n // otherwise, just the actual byte\r\n } else {\r\n result.push(c)\r\n }\r\n }\r\n\r\n return coerceArray(result);\r\n }\r\n\r\n function fromBytes(bytes) {\r\n var result = [],\r\n i = 0;\r\n\r\n while (i < bytes.length) {\r\n var c = bytes[i];\r\n\r\n if (c < 128) {\r\n result.push(String.fromCharCode(c));\r\n i++;\r\n } else if (c > 191 && c < 224) {\r\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\r\n i += 2;\r\n } else {\r\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\r\n i += 3;\r\n }\r\n }\r\n\r\n return result.join('');\r\n }\r\n\r\n return {\r\n toBytes: toBytes,\r\n fromBytes: fromBytes,\r\n }\r\n })();\r\n\r\n var convertHex = (function () {\r\n function toBytes(text) {\r\n var result = [];\r\n for (var i = 0; i < text.length; i += 2) {\r\n result.push(parseInt(text.substr(i, 2), 16));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\r\n var Hex = '0123456789abcdef';\r\n\r\n function fromBytes(bytes) {\r\n var result = [];\r\n for (var i = 0; i < bytes.length; i++) {\r\n var v = bytes[i];\r\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\r\n }\r\n return result.join('');\r\n }\r\n\r\n return {\r\n toBytes: toBytes,\r\n fromBytes: fromBytes,\r\n }\r\n })();\r\n\r\n\r\n // Number of rounds by keysize\r\n var numberOfRounds = {\r\n 16: 10,\r\n 24: 12,\r\n 32: 14\r\n }\r\n\r\n // Round constant words\r\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\r\n\r\n // S-box and Inverse S-box (S is for Substitution)\r\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\r\n var Si = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\r\n\r\n // Transformations for encryption\r\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\r\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\r\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\r\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\r\n\r\n // Transformations for decryption\r\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\r\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\r\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\r\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\r\n\r\n // Transformations for decryption key expansion\r\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\r\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\r\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\r\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\r\n\r\n function convertToInt32(bytes) {\r\n var result = [];\r\n for (var i = 0; i < bytes.length; i += 4) {\r\n result.push(\r\n (bytes[i] << 24) |\r\n (bytes[i + 1] << 16) |\r\n (bytes[i + 2] << 8) |\r\n bytes[i + 3]\r\n );\r\n }\r\n return result;\r\n }\r\n\r\n var AES = function (key) {\r\n if (!(this instanceof AES)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n Object.defineProperty(this, 'key', {\r\n value: coerceArray(key, true)\r\n });\r\n\r\n this._prepare();\r\n }\r\n\r\n\r\n AES.prototype._prepare = function () {\r\n\r\n var rounds = numberOfRounds[this.key.length];\r\n if (rounds == null) {\r\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\r\n }\r\n\r\n // encryption round keys\r\n this._Ke = [];\r\n\r\n // decryption round keys\r\n this._Kd = [];\r\n\r\n for (var i = 0; i <= rounds; i++) {\r\n this._Ke.push([0, 0, 0, 0]);\r\n this._Kd.push([0, 0, 0, 0]);\r\n }\r\n\r\n var roundKeyCount = (rounds + 1) * 4;\r\n var KC = this.key.length / 4;\r\n\r\n // convert the key into ints\r\n var tk = convertToInt32(this.key);\r\n\r\n // copy values into round key arrays\r\n var index;\r\n for (var i = 0; i < KC; i++) {\r\n index = i >> 2;\r\n this._Ke[index][i % 4] = tk[i];\r\n this._Kd[rounds - index][i % 4] = tk[i];\r\n }\r\n\r\n // key expansion (fips-197 section 5.2)\r\n var rconpointer = 0;\r\n var t = KC,\r\n tt;\r\n while (t < roundKeyCount) {\r\n tt = tk[KC - 1];\r\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\r\n (S[(tt >> 8) & 0xFF] << 16) ^\r\n (S[tt & 0xFF] << 8) ^\r\n S[(tt >> 24) & 0xFF] ^\r\n (rcon[rconpointer] << 24));\r\n rconpointer += 1;\r\n\r\n // key expansion (for non-256 bit)\r\n if (KC != 8) {\r\n for (var i = 1; i < KC; i++) {\r\n tk[i] ^= tk[i - 1];\r\n }\r\n\r\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\r\n } else {\r\n for (var i = 1; i < (KC / 2); i++) {\r\n tk[i] ^= tk[i - 1];\r\n }\r\n tt = tk[(KC / 2) - 1];\r\n\r\n tk[KC / 2] ^= (S[tt & 0xFF] ^\r\n (S[(tt >> 8) & 0xFF] << 8) ^\r\n (S[(tt >> 16) & 0xFF] << 16) ^\r\n (S[(tt >> 24) & 0xFF] << 24));\r\n\r\n for (var i = (KC / 2) + 1; i < KC; i++) {\r\n tk[i] ^= tk[i - 1];\r\n }\r\n }\r\n\r\n // copy values into round key arrays\r\n var i = 0,\r\n r, c;\r\n while (i < KC && t < roundKeyCount) {\r\n r = t >> 2;\r\n c = t % 4;\r\n this._Ke[r][c] = tk[i];\r\n this._Kd[rounds - r][c] = tk[i++];\r\n t++;\r\n }\r\n }\r\n\r\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\r\n for (var r = 1; r < rounds; r++) {\r\n for (var c = 0; c < 4; c++) {\r\n tt = this._Kd[r][c];\r\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\r\n U2[(tt >> 16) & 0xFF] ^\r\n U3[(tt >> 8) & 0xFF] ^\r\n U4[tt & 0xFF]);\r\n }\r\n }\r\n }\r\n\r\n AES.prototype.encrypt = function (plaintext) {\r\n if (plaintext.length != 16) {\r\n throw new Error('invalid plaintext size (must be 16 bytes)');\r\n }\r\n\r\n var rounds = this._Ke.length - 1;\r\n var a = [0, 0, 0, 0];\r\n\r\n // convert plaintext to (ints ^ key)\r\n var t = convertToInt32(plaintext);\r\n for (var i = 0; i < 4; i++) {\r\n t[i] ^= this._Ke[0][i];\r\n }\r\n\r\n // apply round transforms\r\n for (var r = 1; r < rounds; r++) {\r\n for (var i = 0; i < 4; i++) {\r\n a[i] = (T1[(t[i] >> 24) & 0xff] ^\r\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\r\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\r\n T4[t[(i + 3) % 4] & 0xff] ^\r\n this._Ke[r][i]);\r\n }\r\n t = a.slice();\r\n }\r\n\r\n // the last round is special\r\n var result = createArray(16),\r\n tt;\r\n for (var i = 0; i < 4; i++) {\r\n tt = this._Ke[rounds][i];\r\n result[4 * i] = (S[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\r\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\r\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\r\n result[4 * i + 3] = (S[t[(i + 3) % 4] & 0xff] ^ tt) & 0xff;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n AES.prototype.decrypt = function (ciphertext) {\r\n if (ciphertext.length != 16) {\r\n throw new Error('invalid ciphertext size (must be 16 bytes)');\r\n }\r\n\r\n var rounds = this._Kd.length - 1;\r\n var a = [0, 0, 0, 0];\r\n\r\n // convert plaintext to (ints ^ key)\r\n var t = convertToInt32(ciphertext);\r\n for (var i = 0; i < 4; i++) {\r\n t[i] ^= this._Kd[0][i];\r\n }\r\n\r\n // apply round transforms\r\n for (var r = 1; r < rounds; r++) {\r\n for (var i = 0; i < 4; i++) {\r\n a[i] = (T5[(t[i] >> 24) & 0xff] ^\r\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\r\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\r\n T8[t[(i + 1) % 4] & 0xff] ^\r\n this._Kd[r][i]);\r\n }\r\n t = a.slice();\r\n }\r\n\r\n // the last round is special\r\n var result = createArray(16),\r\n tt;\r\n for (var i = 0; i < 4; i++) {\r\n tt = this._Kd[rounds][i];\r\n result[4 * i] = (Si[(t[i] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\r\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\r\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\r\n result[4 * i + 3] = (Si[t[(i + 1) % 4] & 0xff] ^ tt) & 0xff;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Electonic Codebook (ECB)\r\n */\r\n var ModeOfOperationECB = function (key) {\r\n if (!(this instanceof ModeOfOperationECB)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Electronic Code Block\";\r\n this.name = \"ecb\";\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationECB.prototype.encrypt = function (plaintext) {\r\n plaintext = coerceArray(plaintext);\r\n\r\n if ((plaintext.length % 16) !== 0) {\r\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var ciphertext = createArray(plaintext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < plaintext.length; i += 16) {\r\n copyArray(plaintext, block, 0, i, i + 16);\r\n block = this._aes.encrypt(block);\r\n copyArray(block, ciphertext, i);\r\n }\r\n\r\n return ciphertext;\r\n }\r\n\r\n ModeOfOperationECB.prototype.decrypt = function (ciphertext) {\r\n ciphertext = coerceArray(ciphertext);\r\n\r\n if ((ciphertext.length % 16) !== 0) {\r\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var plaintext = createArray(ciphertext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < ciphertext.length; i += 16) {\r\n copyArray(ciphertext, block, 0, i, i + 16);\r\n block = this._aes.decrypt(block);\r\n copyArray(block, plaintext, i);\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Cipher Block Chaining (CBC)\r\n */\r\n var ModeOfOperationCBC = function (key, iv) {\r\n if (!(this instanceof ModeOfOperationCBC)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Cipher Block Chaining\";\r\n this.name = \"cbc\";\r\n\r\n if (!iv) {\r\n iv = createArray(16);\r\n\r\n } else if (iv.length != 16) {\r\n throw new Error('invalid initialation vector size (must be 16 bytes)');\r\n }\r\n\r\n this._lastCipherblock = coerceArray(iv, true);\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationCBC.prototype.encrypt = function (plaintext) {\r\n plaintext = coerceArray(plaintext);\r\n\r\n if ((plaintext.length % 16) !== 0) {\r\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var ciphertext = createArray(plaintext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < plaintext.length; i += 16) {\r\n copyArray(plaintext, block, 0, i, i + 16);\r\n\r\n for (var j = 0; j < 16; j++) {\r\n block[j] ^= this._lastCipherblock[j];\r\n }\r\n\r\n this._lastCipherblock = this._aes.encrypt(block);\r\n copyArray(this._lastCipherblock, ciphertext, i);\r\n }\r\n\r\n return ciphertext;\r\n }\r\n\r\n ModeOfOperationCBC.prototype.decrypt = function (ciphertext) {\r\n ciphertext = coerceArray(ciphertext);\r\n\r\n if ((ciphertext.length % 16) !== 0) {\r\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\r\n }\r\n\r\n var plaintext = createArray(ciphertext.length);\r\n var block = createArray(16);\r\n\r\n for (var i = 0; i < ciphertext.length; i += 16) {\r\n copyArray(ciphertext, block, 0, i, i + 16);\r\n block = this._aes.decrypt(block);\r\n\r\n for (var j = 0; j < 16; j++) {\r\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\r\n }\r\n\r\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Cipher Feedback (CFB)\r\n */\r\n var ModeOfOperationCFB = function (key, iv, segmentSize) {\r\n if (!(this instanceof ModeOfOperationCFB)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Cipher Feedback\";\r\n this.name = \"cfb\";\r\n\r\n if (!iv) {\r\n iv = createArray(16);\r\n\r\n } else if (iv.length != 16) {\r\n throw new Error('invalid initialation vector size (must be 16 size)');\r\n }\r\n\r\n if (!segmentSize) {\r\n segmentSize = 1;\r\n }\r\n\r\n this.segmentSize = segmentSize;\r\n\r\n this._shiftRegister = coerceArray(iv, true);\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationCFB.prototype.encrypt = function (plaintext) {\r\n if ((plaintext.length % this.segmentSize) != 0) {\r\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\r\n }\r\n\r\n var encrypted = coerceArray(plaintext, true);\r\n\r\n var xorSegment;\r\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\r\n xorSegment = this._aes.encrypt(this._shiftRegister);\r\n for (var j = 0; j < this.segmentSize; j++) {\r\n encrypted[i + j] ^= xorSegment[j];\r\n }\r\n\r\n // Shift the register\r\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\r\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\r\n }\r\n\r\n return encrypted;\r\n }\r\n\r\n ModeOfOperationCFB.prototype.decrypt = function (ciphertext) {\r\n if ((ciphertext.length % this.segmentSize) != 0) {\r\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\r\n }\r\n\r\n var plaintext = coerceArray(ciphertext, true);\r\n\r\n var xorSegment;\r\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\r\n xorSegment = this._aes.encrypt(this._shiftRegister);\r\n\r\n for (var j = 0; j < this.segmentSize; j++) {\r\n plaintext[i + j] ^= xorSegment[j];\r\n }\r\n\r\n // Shift the register\r\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\r\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\r\n }\r\n\r\n return plaintext;\r\n }\r\n\r\n /**\r\n * Mode Of Operation - Output Feedback (OFB)\r\n */\r\n var ModeOfOperationOFB = function (key, iv) {\r\n if (!(this instanceof ModeOfOperationOFB)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Output Feedback\";\r\n this.name = \"ofb\";\r\n\r\n if (!iv) {\r\n iv = createArray(16);\r\n\r\n } else if (iv.length != 16) {\r\n throw new Error('invalid initialation vector size (must be 16 bytes)');\r\n }\r\n\r\n this._lastPrecipher = coerceArray(iv, true);\r\n this._lastPrecipherIndex = 16;\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationOFB.prototype.encrypt = function (plaintext) {\r\n var encrypted = coerceArray(plaintext, true);\r\n\r\n for (var i = 0; i < encrypted.length; i++) {\r\n if (this._lastPrecipherIndex === 16) {\r\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\r\n this._lastPrecipherIndex = 0;\r\n }\r\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n\r\n // Decryption is symetric\r\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\r\n\r\n\r\n /**\r\n * Counter object for CTR common mode of operation\r\n */\r\n var Counter = function (initialValue) {\r\n if (!(this instanceof Counter)) {\r\n throw Error('Counter must be instanitated with `new`');\r\n }\r\n\r\n // We allow 0, but anything false-ish uses the default 1\r\n if (initialValue !== 0 && !initialValue) {\r\n initialValue = 1;\r\n }\r\n\r\n if (typeof (initialValue) === 'number') {\r\n this._counter = createArray(16);\r\n this.setValue(initialValue);\r\n\r\n } else {\r\n this.setBytes(initialValue);\r\n }\r\n }\r\n\r\n Counter.prototype.setValue = function (value) {\r\n if (typeof (value) !== 'number' || parseInt(value) != value) {\r\n throw new Error('invalid counter value (must be an integer)');\r\n }\r\n\r\n for (var index = 15; index >= 0; --index) {\r\n this._counter[index] = value % 256;\r\n value = value >> 8;\r\n }\r\n }\r\n\r\n Counter.prototype.setBytes = function (bytes) {\r\n bytes = coerceArray(bytes, true);\r\n\r\n if (bytes.length != 16) {\r\n throw new Error('invalid counter bytes size (must be 16 bytes)');\r\n }\r\n\r\n this._counter = bytes;\r\n };\r\n\r\n Counter.prototype.increment = function () {\r\n for (var i = 15; i >= 0; i--) {\r\n if (this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Mode Of Operation - Counter (CTR)\r\n */\r\n var ModeOfOperationCTR = function (key, counter) {\r\n if (!(this instanceof ModeOfOperationCTR)) {\r\n throw Error('AES must be instanitated with `new`');\r\n }\r\n\r\n this.description = \"Counter\";\r\n this.name = \"ctr\";\r\n\r\n if (!(counter instanceof Counter)) {\r\n counter = new Counter(counter)\r\n }\r\n\r\n this._counter = counter;\r\n\r\n this._remainingCounter = null;\r\n this._remainingCounterIndex = 16;\r\n\r\n this._aes = new AES(key);\r\n }\r\n\r\n ModeOfOperationCTR.prototype.encrypt = function (plaintext) {\r\n var encrypted = coerceArray(plaintext, true);\r\n\r\n for (var i = 0; i < encrypted.length; i++) {\r\n if (this._remainingCounterIndex === 16) {\r\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n\r\n // Decryption is symetric\r\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\r\n\r\n\r\n ///////////////////////\r\n // Padding\r\n\r\n // See:https://tools.ietf.org/html/rfc2315\r\n function pkcs7pad(data) {\r\n data = coerceArray(data, true);\r\n var padder = 16 - (data.length % 16);\r\n var result = createArray(data.length + padder);\r\n copyArray(data, result);\r\n for (var i = data.length; i < result.length; i++) {\r\n result[i] = padder;\r\n }\r\n return result;\r\n }\r\n\r\n function pkcs7strip(data) {\r\n data = coerceArray(data, true);\r\n if (data.length < 16) {\r\n throw new Error('PKCS#7 invalid length');\r\n }\r\n\r\n var padder = data[data.length - 1];\r\n if (padder > 16) {\r\n throw new Error('PKCS#7 padding byte out of range');\r\n }\r\n\r\n var length = data.length - padder;\r\n for (var i = 0; i < padder; i++) {\r\n if (data[length + i] !== padder) {\r\n throw new Error('PKCS#7 invalid padding byte');\r\n }\r\n }\r\n\r\n var result = createArray(length);\r\n copyArray(data, result, 0, 0, length);\r\n return result;\r\n }\r\n\r\n ///////////////////////\r\n // Exporting\r\n\r\n\r\n // The block cipher\r\n var aesjs = {\r\n AES: AES,\r\n Counter: Counter,\r\n\r\n ModeOfOperation: {\r\n ecb: ModeOfOperationECB,\r\n cbc: ModeOfOperationCBC,\r\n cfb: ModeOfOperationCFB,\r\n ofb: ModeOfOperationOFB,\r\n ctr: ModeOfOperationCTR\r\n },\r\n\r\n utils: {\r\n hex: convertHex,\r\n utf8: convertUtf8\r\n },\r\n\r\n padding: {\r\n pkcs7: {\r\n pad: pkcs7pad,\r\n strip: pkcs7strip\r\n }\r\n },\r\n\r\n _arrayTest: {\r\n coerceArray: coerceArray,\r\n createArray: createArray,\r\n copyArray: copyArray,\r\n }\r\n };\r\n\r\n\r\n // node.js\r\n if (typeof exports !== 'undefined') {\r\n module.exports = aesjs\r\n\r\n // RequireJS/AMD\r\n // http://www.requirejs.org/docs/api.html\r\n // https://github.com/amdjs/amdjs-api/wiki/AMD\r\n } else if (typeof (define) === 'function' && define.amd) {\r\n define(aesjs);\r\n\r\n // Web Browsers\r\n } else {\r\n\r\n // If there was an existing library at \"aesjs\" make sure it's still available\r\n if (root.aesjs) {\r\n aesjs._aesjs = root.aesjs;\r\n }\r\n\r\n root.aesjs = aesjs;\r\n }\r\n\r\n\r\n})(this);","// ---------------- Hollow Knight Data Constant Objects ----------------- //\r\n/*\r\n This is the whole database for the tool, based on the .json save file data\r\n*/\r\n\r\nconst HK = {\r\n\r\n saveAnalyzed: false,\r\n\r\n sections: {\r\n\r\n /* ################ Intro ################### */\r\n\r\n intro: {\r\n h2: \"Game Status\",\r\n id: \"hk-intro\",\r\n\r\n percent: 0,\r\n maxPercent: 100,\r\n maxPercentDefault: 100,\r\n maxPercentBaseGame: 100,\r\n\r\n /*percent: 0,\r\n maxPercent: 112,\r\n maxPercentDefault: 112,\r\n maxPercentBaseGame: 100,\r\n maxPercentGrimmTroupe: 106,\r\n maxPercentLifeblood: 107,*/\r\n\r\n extendedCompletionDone: 0,\r\n extendedCompletionTotal: 0,\r\n\r\n entries: {\r\n timePlayed: {\r\n id: \"timePlayed\",\r\n icon: \"clock\",\r\n name: \"Time Played:\",\r\n spoiler: \"0 h 00 min 00 sec\",\r\n timeH: 0,\r\n timeM: 0,\r\n timeS: 0,\r\n },\r\n gameCompletion: {\r\n id: \"gameCompletion\",\r\n icon: \"red\",\r\n name: \"Game Completion:\",\r\n spoiler: 0,\r\n spoilerAfter: \"(out of 100 %)\",\r\n spoilerAfterDefault: \"(out of 100 %)\",\r\n spoilerAfterBaseGame: \"(out of 100 %)\",\r\n /*spoilerAfter: \"(out of 112 %)\",\r\n spoilerAfterDefault: \"(out of 112 %)\",\r\n spoilerAfterBaseGame: \"(out of 100 %)\",\r\n spoilerAfterGrimmTroupe: \"(out of 106 %)\",\r\n spoilerAfterLifeblood: \"(out of 107 %)\",*/\r\n },\r\n gameCompletionExtended: {\r\n id: \"gameCompletionExtended\",\r\n icon: \"red\",\r\n name: \"True Completion:\",\r\n spoiler: 0,\r\n spoilerAfter: \" / 0 = 0.00 %\",\r\n spoilerAfterDefault: \" / 0 = 0.00 %\",\r\n },\r\n saveVersion: {\r\n id: \"saveVersion\",\r\n icon: \"none\",\r\n name: \"Save Version:\",\r\n spoiler: \"0.0.0.0\"\r\n },\r\n health: {\r\n id: \"health\",\r\n icon: \"none\",\r\n name: \"Health:\",\r\n spoiler: \"\",\r\n amountTotal: 5,\r\n permadeathMode: false,\r\n },\r\n silk: {\r\n id: \"silk\",\r\n icon: \"none\",\r\n name: \"Silk:\",\r\n spoiler: \"\",\r\n amountTotal: 5\r\n },\r\n crests: {\r\n id: \"crests\",\r\n icon: \"none\",\r\n name: \"Crests:\",\r\n spoiler: \"\",\r\n amountTotal: 1,\r\n hunter:true,\r\n reaper:false,\r\n wanderer:false,\r\n beast:false,\r\n witch:false,\r\n toolmaster:false,\r\n shaman:false,\r\n\r\n /*amountFilled: 0,\r\n amountUnused: 3,\r\n amountOvercharmed: 0*/\r\n },\r\n rosaries: {\r\n id: \"rosaries\",\r\n icon: \"none\",\r\n name: \"Rosaries:\",\r\n spoiler: \"\",\r\n amount: 0,\r\n amountShade: 0,\r\n amountTotal: 0\r\n },\r\n shellShards: {\r\n id: \"shellShards\",\r\n icon: \"none\",\r\n name: \"Shell Shards:\",\r\n spoiler: \"\",\r\n amount: 0\r\n }\r\n },\r\n },\r\n\r\n /* ################ Hints ################### */\r\n\r\n hints: {\r\n h2: \"Elderbug once told me...\",\r\n id: \"hk-hints\",\r\n current: \"fireballLevel\",\r\n entries: {\r\n fireballLevel: {\r\n spoiler: \"A mysterious shaman is living in a dwelling, somewhere below the town of Dirtmouth.\"\r\n },\r\n hornet1Defeated: {\r\n spoiler: \"A skilled protector is guarding old ruins in a lush green forest.\"\r\n },\r\n hasDash: {\r\n spoiler: \"An old cloak is lying on a green path near a broken shell.\"\r\n },\r\n hasWalljump: {\r\n spoiler: \"A sharp claw is lying forgotten, somewhere amidst the insect village.\"\r\n },\r\n Crossroads_04: {\r\n spoiler: \"A mother is sleeping peacefully, somewhere below the town of Dirtmouth.\"\r\n },\r\n slyRescued: {\r\n spoiler: \"Our fellow town bug seems to be lost, somewhere in the crossroads.\"\r\n },\r\n hasLantern: {\r\n spoiler: \"Did you know? A bright little crystal companion is able to light a way through the thickest dark places.\"\r\n },\r\n hasSuperDash: {\r\n spoiler: \"There is some powerful crystal beating somewhere deep inside the mines.\"\r\n },\r\n hasDreamNail: {\r\n spoiler: \"A weapon from a dream world can only be found, where the souls can peacefully rest.\"\r\n },\r\n /* \r\n Either:\r\n - used the elevator in Resting Grounds to City of Tears\r\n - opened the Fungal Wastes city gate\r\n */\r\n killedInfectedKnight: {\r\n spoiler: \"A shattered corpse forgotten in a windy cave is lying somewhere in the ancient depths below the rainy city.\"\r\n },\r\n hasDoubleJump: {\r\n spoiler: \"Something incredibly light was dropped by a monarchfly in the ancient depths below the rainy city.\"\r\n },\r\n dungDefenderOrHornet2: {\r\n spoiler: \"There are two skilled combatants. One is living at the heart of the sewers. One is watching over a shell amidst ash falling from the sky.\"\r\n },\r\n ismaTearOrShadeCloak: {\r\n spoiler: \"There are two precious items. One in a grove accessed from the waterways. One guarded by a massive royal door behind the darkness.\"\r\n },\r\n defeatedMegaJelly: {\r\n spoiler: \"An intelligent being is floating inside hidden archives, behind the fog.\"\r\n },\r\n monomonDefeated: {\r\n spoiler: \"A dreamer is sleeping somewhere, hidden in a foggy area.\"\r\n },\r\n hegemolDefeated: {\r\n spoiler: \"A dreamer is sleeping near a spider nest area.\"\r\n },\r\n killedBlackKnight: {\r\n spoiler: \"Discarded shells of black guards can be seen lying on the floor of a high spire.\"\r\n },\r\n lurienDefeated: {\r\n spoiler: \"A dreamer is sleeping somewhere, at the top of a high spire.\"\r\n },\r\n killedHollowKnight: {\r\n spoiler: \"He heard a disturbance from inside a black temple. Maybe it's worth investigating.\"\r\n },\r\n endOfHints: {\r\n spoiler: `The Knight still explores the world of Hallownest patiently, in constant search of its remaining secrets. [this is the end of the hint system (for the moment). The rest is up to you]`\r\n },\r\n },\r\n },\r\n\r\n /* ################ Crests ################### */\r\n\r\n crests: {\r\n h2: \"Crests\",\r\n id: \"hk-crests\",\r\n description: \"special implements help you to progress in the game. Each new Crest learned provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n completedMemory_reaper: {\r\n name: \"Reaper\",\r\n spoiler: \"Greymoor, west\",\r\n wiki: \"Reaper\"\r\n },\r\n completedMemory_wanderer: {\r\n name: \"Wanderer\",\r\n spoiler: \"Moss Grotto, Bonegrave\",\r\n wiki: \"Wanderer\"\r\n },\r\n completedMemory_beast: {\r\n name: \"Beast\",\r\n spoiler: \"Hunter's March, defeat Savage Beastfly boss\",\r\n wiki: \"Beast\"\r\n },\r\n completedMemory_witch: {\r\n name: \"Witch\",\r\n spoiler: \"Greymoor, complete Twisted Bud and Infestation Operation Wishs\",\r\n wiki: \"Witch\"\r\n },\r\n completedMemory_toolmaster: {\r\n name: \"Architect\",\r\n spoiler: \"Underworks, (must have 30 tools to buy architect key from Twelfth architect) \",\r\n wiki: \"Architect\"\r\n },\r\n completedMemory_shaman: {\r\n name: \"Shaman\",\r\n spoiler: \"Moss Grotto, Ruined Chapel, Act 3\",\r\n wiki: \"Shaman\"\r\n }\r\n },\r\n },\r\n\r\n /* ################ Needle Upgrades ################### */\r\n\r\n NeedleUpgrades: {\r\n h2: \"Needle Upgrades\",\r\n id: \"hk-Needleupgrades\",\r\n description: \"Upgrades to the Hornet's main weapon damage. Each upgrade provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n startingNeedle: {\r\n name: \"#0 Starting Needle\",\r\n spoiler: \"Starting Weapon\",\r\n wiki: \"Needle\"\r\n },\r\n sharpenedNeedle: {\r\n name: \"#1 Sharpened Needle\",\r\n spoiler: \"Pinmaster Plinney on Bellhart for free\",\r\n wiki: \"Pinmaster+Plinney\"\r\n },\r\n shiningNeedle: {\r\n name: \"#2 Shining Needle\",\r\n spoiler: \"find missing pale oil\",\r\n wiki: \"Pale+Oil\"\r\n },\r\n hivesteelNeedle: {\r\n name: \"#3 Hivesteel Needle\",\r\n spoiler: \"find missing pale oil\",\r\n wiki: \"Pale+Oil\"\r\n },\r\n paleSteelNeedle: {\r\n name: \"#4 Pale Steel Needle\",\r\n spoiler: \"find missing pale oil\",\r\n wiki: \"Pale+Oil\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Silk Heart ################### */\r\n\r\n silkHeart: {\r\n h2: \"Silk Heart\",\r\n id: \"hk-silkHeart\",\r\n description: `Item that grant Hornet automatic Silk regeneration.. \r\n Each new Silk Heart learned provides 1% Game Completion.`,\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n Memory_Silk_Heart_BellBeast: {\r\n name: \"#1 Silk Heart\",\r\n spoiler: \"The Marrow, Defeating the Bell Beast\",\r\n wiki: \"Silk+Heart\"\r\n },\r\n Memory_Silk_Heart_WardBoss: {\r\n name: \"#2 Silk Heart\",\r\n spoiler: \"Whiteward, Defeating The Unravelled, requires Surgeon's Key\",\r\n wiki: \"Silk+Heart\"\r\n },\r\n Memory_Silk_Heart_LaceTower: {\r\n name: \"#3 Silk Heart\",\r\n spoiler: \"The Cradle, Defeating Lace for the second time\",\r\n wiki: \"Silk+Heart\"\r\n },\r\n },\r\n },\r\n\r\n /* #################### Red Tools ################### */\r\n\r\n redTools: {\r\n h2: \"Red Tools\",\r\n id: \"hk-redTools\",\r\n description: `Active tools that are almost always limited-use consumables. \r\n Each Tool found in the game provides 1% Game Completion.`,\r\n /*description: `Each Charm found in the game provides 1% Game Completion. \r\n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/\r\n percent: 0,\r\n maxPercent: 18,\r\n // reference: https://radiance.host/apidocs/Charms.html\r\n entries: {\r\n straightPin: {\r\n id: \"Straight Pin\",\r\n name: \"#1 Straight Pin\",\r\n spoiler: \"The Marrow, inside of Grindle's cell\",\r\n wiki: \"Straight+Pin\"\r\n },\r\n triPin: {\r\n id: \"Tri Pin\", \r\n name: \"#2 Threefold Pin\",\r\n spoiler: \"Greymoor, above Craw Lake, hidden cave\",\r\n wiki: \"Threefold+Pin\"\r\n },\r\n stingShard: {\r\n id: \"Sting Shard\",\r\n name: \"#3 Sting Shard\",\r\n spoiler: \"Forge Daughter: 140 Rosaries and 1 Craftmetal\",\r\n wiki: \"Sting+Shard\"\r\n },\r\n Tack: {\r\n id:\"Tack\",\r\n name: \"#4 Tacks\",\r\n spoiler: \"complete the Roach Guts Wish\",\r\n wiki: \"Tacks\"\r\n },\r\n harpoon: {\r\n id: \"Harpoon\",\r\n name: \"#5 Longpin\",\r\n spoiler: \"Shellwood, main Bellhart entrance, behind Wood Wasp\",\r\n wiki: \"Longpin\"\r\n },\r\n curveClaws: {\r\n id: \"Curve Claws\",\r\n name: \"#6 Curveclaw\",\r\n spoiler: \"Skarr: 140 Rosaries, or above skarr main location\",\r\n wiki: \"Curveclaw\"\r\n },\r\n shakraRing: {\r\n id: \"Shakra Ring\",\r\n name: \"#7 Throwing Ring\",\r\n spoiler: \"complete Trail's End wish\",\r\n wiki: \"Throwing+Ring\"\r\n },\r\n pimpilo: {\r\n id: \"Pimpilo\",\r\n name: \"#8 Pimpillo\",\r\n spoiler: \"Greymoor, northwest, above Yarnaby's home\",\r\n wiki: \"Pimpillo\"\r\n },\r\n conchDrill: {\r\n id: \"Conch Drill\",\r\n name: \"#9 Conchcutter\",\r\n spoiler: \"Sands of Karak, Coral Tower\",\r\n wiki: \"Conchcutter\"\r\n },\r\n webShot: {\r\n id: \"WebShot\",\r\n name: \"#10 Silkshot\",\r\n spoiler: \"Royal Waterways, defeat Dung Defender\",\r\n wiki: \"Silkshot\"\r\n },\r\n screwAttack: {\r\n id: \"Screw Attack\",\r\n name: \"#11 Delver's Drill\",\r\n spoiler: \"Underworks, bottom left\",\r\n wiki: \"Delver's+Drill\"\r\n },\r\n cogworkSaw: {\r\n id: \"Cogwork Saw\",\r\n name: \"#12 Cogwork Wheel\",\r\n spoiler: \"Twelfth Architect: 360 Rosaries and 1 Craftmetal.\",\r\n wiki: \"Cogwork+Wheel\"\r\n },\r\n cogworkFlier: {\r\n id: \"Cogwork Flier\",\r\n name: \"#13 Cogfly\",\r\n spoiler: \"High Halls, crafting bench, Requires 1 Craftmetal\",\r\n wiki: \"Cogfly\"\r\n },\r\n rosaryCannon: {\r\n id: \"Rosary Cannon\",\r\n name: \"#14 Rosary Cannon\",\r\n spoiler: \" High Halls, est of The Forum, behind locked door\",\r\n wiki: \"Rosary+Cannon\"\r\n },\r\n lightningRod: {\r\n id: \"Lightning Rod\",\r\n name: \"#15 Voltvessels\",\r\n spoiler: \"Memorium, top-right, behind a hidden wall\",\r\n wiki: \"Voltvessels\"\r\n }, \r\n flintstone: {\r\n id: \"Flintstone\",\r\n name: \"#16 Flintslate\",\r\n spoiler: \"Deep Docks, behind the Simple Key door\",\r\n wiki: \"Flintslate\"\r\n },\r\n fleaBrew: {\r\n id: \"Flea Brew\",\r\n name: \"#17 Flea Brew\",\r\n spoiler: \"Helping out the Flea Caravan\",\r\n wiki: \"Flea+Brew\"\r\n },\r\n lifebloodSyringe: {\r\n id: \"Lifeblood Syringe\",\r\n name: \"#18 Plasmium Phial\",\r\n spoiler: \"Complete Alchemist's Assistant Wish\",\r\n wiki: \"Plasmium+Phial\"\r\n },\r\n },\r\n },\r\n\r\n /* #################### Blue Tools ################### */\r\n\r\n blueTools: {\r\n h2: \"Blue Tools\",\r\n id: \"hk-blueTools\",\r\n description: `Combat-focused passive tools. Each Tool found in the game provides 1% Game Completion.`,\r\n /*description: `Each Charm found in the game provides 1% Game Completion. \r\n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/\r\n percent: 0,\r\n maxPercent: 21,\r\n // reference: https://radiance.host/apidocs/Charms.html\r\n entries: {\r\n mosscreepTool: {\r\n id: \"Mosscreep Tool\",\r\n name: \"#1 Druid's Eye\",\r\n spoiler: \"Salubra: 220 Geo\",\r\n wiki: \"Druid's+Eye\"\r\n },\r\n lavaCharm: {\r\n id: \"Lava Charm\",\r\n name: \"#2 Magma Bell\",\r\n spoiler: \"Complete Rite of the Pollip Wish\",\r\n wiki: \"Magma+Bell\"\r\n },\r\n bellBind: {\r\n id: \"Bell Bind\",\r\n name: \"#3 Warding Bell\",\r\n spoiler: \"lower Far Fields\",\r\n wiki: \"Warding+Bell\"\r\n },\r\n poisonPouch: {\r\n id: \"Poison Pouch\",\r\n name: \"#4 Pollip Pouch\",\r\n spoiler: \"Forgotten Crossroads, requires Crystal Heart\",\r\n wiki: \"Pollip+Pouch\"\r\n },\r\n fracturedMask: {\r\n id: \"Fractured Mask\",\r\n name: \"#5 Fractured Mask\",\r\n spoiler: \"Skarr: 260 Rosaries, or above skarr main location\",\r\n wiki: \"Fractured+Mask\"\r\n },\r\n multibind: {\r\n id: \"Multibind\",\r\n name: \"#6 Multibinder\",\r\n spoiler: \"Frey: 800 after comleting My Missing Courier Wish\",\r\n wiki: \"Multibinder\"\r\n },\r\n whiteRing: {\r\n id: \"White Ring\",\r\n name: \"#7 Weavelight\",\r\n spoiler: \"Weavenest Atla, defeating the 2nd Moss Mother\",\r\n wiki: \"Weavelight\"\r\n },\r\n brollySpike: {\r\n id: \"Brolly Spike\",\r\n name: \"#8 Sawtooth Circlet\",\r\n spoiler: \"Twelfth Architect: 230 Rosaries and 1 Craftmetal\",\r\n wiki: \"Sawtooth+Circlet\"\r\n },\r\n quickbind: {\r\n id: \"Quickbind\",\r\n name: \"#9 Injector Band\",\r\n spoiler: \"Whiteward\",\r\n wiki: \"Injector+Band\"\r\n },\r\n spoolExtender: {\r\n id: \"Spool Extender\",\r\n name: \"#10 Spool Extender\",\r\n spoiler: \"Jubilana: 720 Rosaries\",\r\n wiki: \"Spool+Extender\"\r\n },\r\n reserveBind: {\r\n id: \"Reserve Bind\",\r\n name: \"#11 Reserve Bind\",\r\n spoiler: \"complete Final Audience Wish\",\r\n wiki: \"Reserve+Bind\"\r\n },\r\n DazzleBind: {\r\n id: \"Dazzle Bind\",\r\n name: \"#12 Claw Mirror\",\r\n spoiler: \"Defeat Trobbio\",\r\n wiki: \"Claw+Mirror\"\r\n },\r\n revengeCrystal: {\r\n id: \"Revenge Crystal\",\r\n name: \"#13 Memory Crystal\",\r\n spoiler: \"Mount Fay, southwest, breakable wall next to bench\",\r\n wiki: \"Memory+Crystal\"\r\n },\r\n thiefClaw: {\r\n id: \"Thief Claw\",\r\n name: \"#14 Snitch Pick\",\r\n spoiler: \"Grindle : 740 Rosaries\",\r\n wiki: \"Snitch Pick\"\r\n },\r\n zapImbuement: {\r\n id: \"Zap Imbuement\",\r\n name: \"#15 Volt Filament\",\r\n spoiler: \"Defeat Voltvyrm\",\r\n wiki: \"Volt+Filament\"\r\n },\r\n quickSling: {\r\n id: \"Quick Sling\",\r\n name: \"#16 Quick Sling\",\r\n spoiler: \"2nd room above Bilewater word, breakable ceiling\",\r\n wiki: \"Quick+Sling\"\r\n },\r\n maggotCharm: {\r\n id: \"Maggot Charm\",\r\n name: \"#17 Wreath of Purity\",\r\n spoiler: \"Putrified Ducts, secret passage\",\r\n wiki: \"Wreath+of+Purity\"\r\n },\r\n longneedle: {\r\n id: \"Longneedle\",\r\n name: \"#18 Longclaw\",\r\n spoiler: \"complete Broodfeast or Runtfeast Wish\",\r\n wiki: \"Longclaw\"\r\n },\r\n wispLantern: {\r\n id: \"Wisp Lantern\",\r\n name: \"#19 Wispfire Lantern\",\r\n spoiler: \"Defeat Father of the Flame in Wisp Thicket\",\r\n wiki: \"Wispfire+Lantern\"\r\n },\r\n fleaCharm: {\r\n id: \"Flea Charm\",\r\n name: \"#20 Egg of Flealia\",\r\n spoiler: \"Fleamaster Mooshka: Find all the 30 fleas\",\r\n wiki: \"Egg+of+Flealia\"\r\n },\r\n pinstressTool: {\r\n id: \"Pinstress Tool\",\r\n name: \"#21 Pin Badge\",\r\n spoiler: \"Defeat Pinstress\",\r\n wiki: \"Pin+Badge\"\r\n },\r\n },\r\n },\r\n\r\n /* #################### Red tools ################### */\r\n\r\n yellowTools: {\r\n h2: \"Yellow Tools\",\r\n id: \"hk-yellowTools\",\r\n description: `miscellaneous passive tools. Each Tool found in the game provides 1% Game Completion.`,\r\n /*description: `Each Charm found in the game provides 1% Game Completion. \r\n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.`,*/\r\n percent: 0,\r\n maxPercent: 12,\r\n // reference: https://radiance.host/apidocs/Charms.html\r\n entries: {\r\n compass: {\r\n id: \"Compass\",\r\n name: \"#1 Compass\",\r\n spoiler: \"Shakra: 70 Rosaries\",\r\n wiki: \"Compass\"\r\n },\r\n boneNecklace: {\r\n id: \"Bone Necklace\",\r\n name: \"#2 Shard Pendant\",\r\n spoiler: \"The Marrow, left side of the collapsing platforms\",\r\n wiki: \"Magnetite+Brooch\"\r\n },\r\n rosaryMagnet: {\r\n id: \"Rosary Magnet\",\r\n name: \"#3 Magnetite Brooch\",\r\n spoiler: \"Pebb: 120 Rosaries\",\r\n wiki: \"Grubberfly's+Elegy\"\r\n },\r\n weightedAnklet: {\r\n id: \"Weighted Anklet\",\r\n name: \"#4 Weighted Belt\",\r\n spoiler: \"Mort: 160\",\r\n wiki: \"Weighted+Belt\"\r\n },\r\n barbedWire: {\r\n id: \"Barbed Wire\",\r\n name: \"#5 Barbed Bracelet\",\r\n spoiler: \"Sinner's Road, souteast\",\r\n wiki: \"Barbed+Bracelet\"\r\n },\r\n deadMansPurse: {\r\n id: \"Dead Mans Purse\",\r\n name: \"#6 Dead Bug's Purse\",\r\n spoiler: \"Wormways\",\r\n wiki: \"Dead+Bug's+Purse\"\r\n },\r\n magnetiteDice: {\r\n id: \"Magnetite Dice\",\r\n name: \"#7 Magnetite Dice\",\r\n spoiler: \"Given by Lumble the Lucky, or Grindle: 300 on Act 3\",\r\n wiki: \"Magnetite+Dice\"\r\n },\r\n scuttlebrace: {\r\n id: \"Scuttlebrace\",\r\n name: \"#8 Scuttlebrace\",\r\n spoiler: \"Twelfth Architect: 140 Rosaries and 1 Craftmetal\",\r\n wiki: \"Scuttlebrace\"\r\n },\r\n Wallcling: {\r\n id: \"Wallcling\",\r\n name: \"#9 Ascendant's Grip\",\r\n spoiler: \"Jubilana: 350 Rosaries\",\r\n wiki: \"Ascendant's+Grip\"\r\n },\r\n musicianCharm: {\r\n id: \"Musician Charm\",\r\n name: \"#10 Silkspeed Anklets\",\r\n spoiler: \"Jubilana: 350 Rosaries after Lost Merchant Wish\",\r\n wiki: \"Silkspeed+Anklets\"\r\n },\r\n sprintmaster: {\r\n id: \"Sprintmaster\",\r\n name: \"#11 Silkspeed Anklets\",\r\n spoiler: \"Far Fields, inside Weavenest Cindril\",\r\n wiki: \"Silkspeed+Anklets\"\r\n },\r\n thiefCharm: {\r\n id: \"Thief Charm\",\r\n name: \"#12 Thief's Mark\",\r\n spoiler: \"Grindle: 350 Rosaries\",\r\n wiki: \"Thief's+Mark\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Equipment ################### */\r\n\r\n equipment: {\r\n h2: \"Equipment\",\r\n id: \"hk-equipment\",\r\n description: \"Also known as Abilities. Each piece of equipment collected provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n silkSpear: {\r\n id: \"Silk Spear\",\r\n name: \"Silkspear\",\r\n spoiler: \"Mosshome\",\r\n wiki: \"Silkspear\"\r\n },\r\n threadSphere: {\r\n id: \"Thread Sphere\",\r\n name: \"Thread Storm\",\r\n spoiler: \"Greymoor\",\r\n wiki: \"Thread+Storm\"\r\n },\r\n Parry: {\r\n id: \"Parry\",\r\n name: \"Cross Stitch\",\r\n spoiler: \"Bilewater, Exhaust Organ, Defeat Phantom\",\r\n wiki: \"Cross+Stitch\"\r\n },\r\n silkCharge: {\r\n id: \"Silk Charge\",\r\n name: \"Sharpdart\",\r\n spoiler: \"Wormways\",\r\n wiki: \"Sharpdart\"\r\n },\r\n silkBomb: {\r\n id: \"Silk Bomb\",\r\n name: \"Rune Rage\",\r\n spoiler: \"The Slab, Kill the First Sinner\",\r\n wiki: \"Rune Rage\"\r\n },\r\n silkBossNeedle: {\r\n id: \"Silk Boss Needle\",\r\n name: \"Pale Nails\",\r\n spoiler: \"Kingdom's Edge, defeat Hornet Sentinel\",\r\n wiki: \"Pale+Nails\"\r\n },\r\n },\r\n\r\n /*\r\n entries: {\r\n hasDash: {\r\n name: \"Mothwing Cloak\",\r\n spoiler: \"Greenpath: Dash ability\",\r\n wiki: \"Mothwing_Cloak\"\r\n },\r\n hasWalljump: {\r\n name: \"Mantis Claw\",\r\n spoiler: \"Mantis Village: Wall Jump ability\",\r\n wiki: \"Mantis_Claw\"\r\n },\r\n hasSuperDash: {\r\n name: \"Crystal Heart\",\r\n spoiler: \"Crystal Peak: Super Dash ability\",\r\n wiki: \"Crystal_Heart\"\r\n },\r\n hasDoubleJump: {\r\n name: \"Monarch Wings\",\r\n spoiler: \"Ancient Basin: Double Jump ability\",\r\n wiki: \"Monarch_Wings\"\r\n },\r\n hasAcidArmour: {\r\n name: \"Isma's Tear\",\r\n spoiler: \"Royal Waterways: Acid Armour ability\",\r\n wiki: \"Isma's_Tear\"\r\n },\r\n hasKingsBrand: {\r\n name: \"King's Brand\",\r\n spoiler: \"Kingdom's Edge, defeat Hornet Sentinel\",\r\n wiki: \"King's_Brand\"\r\n },\r\n hasShadowDash: {\r\n name: \"Shade Cloak\",\r\n spoiler: \"The Abyss: Shadow Dash ability\",\r\n wiki: \"Shade_Cloak\"\r\n }\r\n },\r\n */\r\n },\r\n\r\n /* ################ Skills ################### */\r\n\r\n skills: {\r\n h2: \"Skills\",\r\n id: \"hk-skills\",\r\n description: \"Skills help you to progress in the game. Each new Skill learned provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n hasDash: {\r\n name: \"Swift Step\",\r\n spoiler: \"Deep Docks\",\r\n wiki: \"Swift+Step\"\r\n },\r\n hasWalljump: {\r\n name: \"Cling Grip\",\r\n spoiler: \"Shellwood\",\r\n wiki: \"Cling+Grip\"\r\n },\r\n hasHarpoonDash: {\r\n name: \"Clawline\",\r\n spoiler: \"Underworks\",\r\n wiki: \"Clawline\"\r\n },\r\n hasNeedolin: {\r\n name: \"Needolin\",\r\n spoiler: \"Bellhart, defeat Widow\",\r\n wiki: \"Needolin\"\r\n },\r\n hasChargeSlash: {\r\n name: \"Needle Strike\",\r\n spoiler: \"Blasted Steps: from the Pinstress\",\r\n wiki: \"Needle+Strike\"\r\n },\r\n hasSuperJump: {\r\n name: \"Silk Soar\",\r\n spoiler: \"The Abyss, Weavenest Absolom, Act 3\",\r\n wiki: \"Silk+Soar\"\r\n }\r\n },\r\n },\r\n\r\n /* ################ Miscellaneous ################### */\r\n\r\n miscellaneous : {\r\n h2: \"Miscellaneous\",\r\n id: \"hk-miscellaneous\",\r\n description: \"Extra miscellaneous. Each miscellaneous provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 2,\r\n entries: {\r\n HasSeenEvaHeal: {\r\n name: \"Sylphsong Step\",\r\n spoiler: \"Eva: Require 6 crests and 18 memory lockets.\",\r\n wiki: \"Sylphsong\"\r\n },\r\n CompletedRedMemory: {\r\n name: \"Everbloom\",\r\n spoiler: \"Complete The Old Hearts Wish, Act 3\",\r\n wiki: \"Everbloom\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Mask Shards ################### */\r\n\r\n maskShards: {\r\n h2: \"Mask Shards\",\r\n id: \"hk-maskshards\",\r\n description: \"Shards for increasing max health. Each 4 Mask Fragments collected (a full Mask) provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 5,\r\n entries: {\r\n PurchasedBonebottomHeartPiece: {\r\n name: \"#1 Mask Shards\",\r\n spoiler: \"Pebb: 300 Rosariy, or Grindle: 320 Rosairy if Pebb left\",\r\n wiki: \"All+Mask+Shard+Locations#BoneBottom\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n wormwayMask: {\r\n name: \"#2 Mask Shards\",\r\n spoiler: \"Wormways, Behind a breakable wall\",\r\n wiki: \"All+Mask+Shard+Locations#Wormways\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Crawl_02\"\r\n },\r\n deepDocksMask: {\r\n name: \"#3 Mask Shards \",\r\n spoiler: \"Between the Marrow and Deep Docks, Cling Grip recommended\",\r\n wiki: \"All+Mask+Shard+Locations#DeepDocks\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Dock_08\"\r\n },\r\n farFieldsMask1: {\r\n name: \"#4 Mask Shards\",\r\n spoiler: \"Area above Seamstress's home in Far Fields, requires Drifter's Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#FarFields\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Bone_East_20\"\r\n },\r\n shellwoodMask: {\r\n name: \"#5 Mask Shard\",\r\n spoiler: \"Centre of Shellwood, behind a breakable wall\",\r\n wiki: \"All+Mask+Shard+Locations#Shellwood\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Shellwood_14\"\r\n },\r\n weavenestAtlaMask: {\r\n name: \"#6 Mask Shard\",\r\n spoiler: \"East Weavenest Atla, behind breakable wall, requires Cling Grip\",\r\n wiki: \"All+Mask+Shard+Locations#WeavenestAtla\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Weave_05b\"\r\n },\r\n MerchantEnclaveShellFragment: {\r\n name: \"#7 Mask Shard\",\r\n spoiler: \"Jubilana: 750 Rosaries, after complete The Wandering Merchant Wish\",\r\n wiki: \"All+Mask+Shard+Locations#ChoralChambers\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n cogworkCoreMask: {\r\n name: \"#8 Mask Shard\",\r\n spoiler: \"West Cogwork Core past enemy gauntlet, defeat Cogwork Dancers\",\r\n wiki: \"All+Mask+Shard+Locations#CogworkCore\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Song_09\"\r\n },\r\n libraryMask: {\r\n name: \"#9 Mask Shard\",\r\n spoiler: \"Behind moving box puzzle in central Whispering Vaults\",\r\n wiki: \"All+Mask+Shard+Locations#WhisperingVaults\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Library_05\"\r\n },\r\n beastflyHuntWish: {\r\n name: \"#10 Mask Shard\",\r\n spoiler: \"Reward for completing the Savage Beastfly Wish\",\r\n wiki: \"All+Mask+Shard+Locations#Bellhart\",\r\n id: \"\",\r\n sceneName: \"Beastfly Hunt\"\r\n },\r\n boneBuildingMask: {\r\n name: \"#11 Mask Shard\",\r\n spoiler: \"East Far Fields, inside bone building, requires Clawline and Drifter's Cloak \",\r\n wiki: \"All+Mask+Shard+Locations#FarFields\",\r\n id: \"Heart Piece (1)\",\r\n sceneName: \"Bone_East_LavaChallenge\"\r\n },\r\n mountFayMask: {\r\n name: \"#12 Mask Shard\",\r\n spoiler: \"Mount Fay, soutwest, west of the bench, requires Faydown Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#MountFay\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Peak_04c\"\r\n },\r\n slabMask: {\r\n name: \"#13 Mask Shard\",\r\n spoiler: \"the Slab, Northeast, require key of Apostate and Faydown Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#TheSlab\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Slab_17\"\r\n },\r\n bilewaterMask: {\r\n name: \"#14 Mask Shard\",\r\n spoiler: \"Bilewater, east, end of a hallway filled with Slubberlugs\",\r\n wiki: \"All+Mask+Shard+Locations#Bilewater\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Shadow_13\"\r\n },\r\n wispThicketMask: {\r\n name: \"#15 Mask Shard\",\r\n spoiler: \"Wisp Thicket, east, requires Faydown Cloak\",\r\n wiki: \"All+Mask+Shard+Locations#WispThicket\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Wisp_07\"\r\n },\r\n blastedStepsMask: {\r\n name: \"#16 Mask Shard\",\r\n spoiler: \"Blasted Steps, west, requires Clawline and Faydown Cloak.\",\r\n wiki: \"All+Mask+Shard+Locations#BlastedSteps\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Coral_19b\"\r\n },\r\n brightveinMask: {\r\n name: \"#17 Mask Shard\",\r\n spoiler: \"Brightvein, requires Silk Soar\",\r\n wiki: \"All+Mask+Shard+Locations#MountFay\",\r\n id: \"Heart Piece\",\r\n sceneName: \"Peak_06\"\r\n },\r\n sprintmasterRaceWish: {\r\n name: \"#18 Mask Shard\",\r\n spoiler: \"Far Fields, east, complete Fastest in Pharloom wish\",\r\n wiki: \"All+Mask+Shard+Locations#FarFields\",\r\n id: \"\",\r\n sceneName: \"Sprintmaster Race\"\r\n },\r\n destroyThreadCoresWish: {\r\n name: \"#19 Mask Shard\",\r\n spoiler: \"Bellhart Wishwall, complete Dark Hearts wish\",\r\n wiki: \"All+Mask+Shard+Locations#Bellhart\",\r\n id: \"\",\r\n sceneName: \"Destroy Thread Cores\"\r\n },\r\n antTrapperWish: {\r\n name: \"#20 Mask Shard\",\r\n spoiler: \"Bellhart Wishwall, complete Hidden Hunter wish\",\r\n wiki: \"All+Mask+Shard+Locations#Bellhart\",\r\n id: \"\",\r\n sceneName: \"Ant Trapper\"\r\n },\r\n },\r\n },\r\n\r\n /* ################ Spool Fragments ################### */\r\n\r\n spoolFragments: {\r\n h2: \"Spool Fragments\",\r\n id: \"hk-spoolFragments\",\r\n description: \"Fragments for increasing max silk capacity.. Each 2 Spool Fragments collected (a full spool) provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 9,\r\n entries: {\r\n boneBottomSpool: {\r\n name: \"#1 Fragments\",\r\n spoiler: \"Bone Bottom, Mosshome, behind a breakable wall\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Bone_11b\"\r\n },\r\n deepDocksSpool1: {\r\n name: \"#2 Fragments\",\r\n spoiler: \"Deep Docks, lower left (too lazy to explane the location..)\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Bone_East_13\"\r\n },\r\n greymoorSpool: {\r\n name: \"#3 Fragments\",\r\n spoiler: \"Greymoor, above Shakra's bench\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Greymoor_02\"\r\n },\r\n PurchasedBelltownSpoolSegment: {\r\n name: \"#4 Fragments\",\r\n spoiler: \"Frey: 270 Rosaries, Complete My Missing Courier Wish\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n weavenestAtlaSpool: {\r\n name: \"#5 Fragments\",\r\n spoiler: \"Weavenest Atla, require Needolin\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Weave_11\"\r\n },\r\n slabSpool: {\r\n name: \"#6 Fragments\",\r\n spoiler: \"The Slab, west, require Cling Grip\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Peak_01\"\r\n },\r\n grandGateSpool: {\r\n name: \"#7 Fragments\",\r\n spoiler: \"Grand Gate, top\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Song_19_entrance\"\r\n },\r\n UnderworksSpool1: {\r\n name: \"#8 Fragments\",\r\n spoiler: \"Underworks, pass a challenging battle area\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Under_10\"\r\n },\r\n MetCaravanTroupeLeaderJudge: {\r\n name: \"#9 Fragments\",\r\n spoiler: \"Grand Gate, Flea Caravan, requires 12 fleas and Last Judge defeated\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n whitewardSpool: {\r\n name: \"#10 Fragments\",\r\n spoiler: \"Whiteward, under the lift, require White Key\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Ward_01\"\r\n },\r\n cogworkCoreSpool: {\r\n name: \"#11 Fragments\",\r\n spoiler: \"Cogwork Core, Southeast\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Cog_07\"\r\n },\r\n UnderworksSpool2: {\r\n name: \"#12 Fragments\",\r\n spoiler: \"Underworks, east of the Cauldron\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Library_11b\"\r\n },\r\n saveShermaWish: {\r\n name: \"#13 Fragments\",\r\n spoiler: \"complete Balm For The Wounded Wish\",\r\n wiki: \"Quests\",\r\n id: \"\",\r\n sceneName: \"Save Sherma\"\r\n },\r\n MerchantEnclaveSpoolPiece: {\r\n name: \"#14 Fragments\",\r\n spoiler: \"Jubilana: 500 rosaries, after complete Lost Merchant Wish\",\r\n wiki: \"Quests\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n deepDocksSpool2: {\r\n name: \"#15 Fragments\",\r\n spoiler: \"Deep Docks, Southeast, require Clawline and Cling Grip\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Dock_03c\"\r\n },\r\n highHallsSpool: {\r\n name: \"#16 Fragments\",\r\n spoiler: \"High Halls, top of left vertical room, require Faydown Cloak and Clawline\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Hang_03_top\"\r\n },\r\n MemoriumSpool: {\r\n name: \"#17 Fragments\",\r\n spoiler: \"Memorium, western section, requires Faydown Cloak and Clawline\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"Silk Spool\",\r\n sceneName: \"Arborium_09\"\r\n },\r\n purchasedGrindleSpoolPiece: {\r\n name: \"#18 Fragments\",\r\n spoiler: \"Grindle: 680 rosaries, requires Faydown Cloak and Cling Grip\",\r\n wiki: \"Spool+Fragment\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n },\r\n },\r\n\r\n\r\n /* ################ Crafting Kit Upgrades ################### */\r\n\r\n craftingKitUpgrades: {\r\n h2: \"Crafting Kit Upgrades\",\r\n id: \"hk-craftingKitUpgrades\",\r\n description: \"Upgrade that increase Red Tool damage by +60%.. Each upgrade provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n PurchasedForgeToolKit: {\r\n name: \"#1 Upgrades\",\r\n spoiler: \"Forge Daughter: 180 rosaries\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n crowFeathersWish: {\r\n name: \"#2 Upgrades\",\r\n spoiler: \"complete Crawbug Clearing Wish\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"Crow Feathers\"\r\n },\r\n PurchasedArchitectToolKit: {\r\n name: \"#3 Upgrades\",\r\n spoiler: \"Twelfth Architect: 450 rosaries, requires Clawline\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n purchasedGrindleToolKit: {\r\n name: \"#4 Upgrades\",\r\n spoiler: \"Grindle: 700 rosaries, requires Faydown Cloak\",\r\n wiki: \"Crafting+Kit\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n \r\n }\r\n },\r\n\r\n /* ################ Tool Pouch Upgrades ################### */\r\n\r\n toolPouchUpgrades: {\r\n h2: \"Tool Pouch Upgrades\",\r\n id: \"hk-toolPouchUpgrades\",\r\n description: \"Upgrade that increase Red Tool damage by +60%.. Each upgrade provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n PurchasedPilgrimsRestToolPouch: {\r\n name: \"#1 Upgrades\",\r\n spoiler: \"Mort: 220 rosaries, or Grindle: 220 (Act 3)\",\r\n wiki: \"Tool+Pouch\",\r\n id: \"\",\r\n sceneName: \"\"\r\n },\r\n ladybugCraftPickupToolPouch: {\r\n name: \"#2 Upgrades\",\r\n spoiler: \"The Marrow, Lodie Callange (Act 1 & 2), on table (Act 3)\",\r\n wiki: \"Tool+Pouch\",\r\n id: \"Ladybug Craft Pickup\",\r\n sceneName: \"Bone_12\"\r\n },\r\n journalWish: {\r\n name: \"#3 Upgrades\",\r\n spoiler: \"complete Nuu's Wish: Bugs of Pharloom\",\r\n wiki: \"Tool+Pouch\",\r\n id: \"\",\r\n sceneName: \"Journal\"\r\n },\r\n CaravanTroupeLocation: {\r\n name: \"#4 Upgrades\",\r\n spoiler: \"Mooshka after helping the Flea Caravan move to Putrified Ducts\",\r\n wiki: \"Tool+Pouch\",\r\n id: 3,\r\n sceneName: \"CaravanTroupeLocation\"\r\n },\r\n \r\n }\r\n },\r\n\r\n /* ################ Hunter's Journal ################### */\r\n\r\n huntersJournal: {\r\n h2: \"Hunter's Journal\",\r\n id: \"hk-journal\",\r\n description: `All the 146 base-game Hunter's Journal entries that are counted for Hunter's Mark and Keen Hunter/True Hunter achievements. The 17 most commonly missed Journal entries are right at the top of this list. \r\n Numbers above: Completed/Encountered of 146 Base Total \r\n = note completed. \r\n = entry discovered, but note not completed. \r\n = entry not yet discovered. \r\n (no.) = amount left to complete note.`,\r\n percent: 0,\r\n midPercent: 0,\r\n maxPercent: 237,\r\n entries: {\r\n mossBoneCrawler: {\r\n gameName: \"Mossgrub\",\r\n databaseName: \"MossBone Crawler\",\r\n name: \"Mossgrub (25)\",\r\n spoiler: \"Moss Grotto and Memorium\",\r\n killRequire: \"25\",\r\n wiki: \"Mossgrub\"\r\n },\r\n mossBoneCrawlerFat: {\r\n gameName: \"Massive Mossgrub\",\r\n databaseName: \"MossBone Crawler Fat\",\r\n name: \"Massive Mossgrub (3)\",\r\n spoiler: \"Memorium\",\r\n killRequire: \"3\",\r\n wiki: \"Massive+Mossgrub\"\r\n },\r\n mossBoneFly: {\r\n gameName: \"Mossmir\",\r\n databaseName: \"MossBone Fly\",\r\n name: \"Mossmir (20)\",\r\n spoiler: \"Moss Grotto\",\r\n killRequire: \"20\",\r\n wiki: \"Mossmir\"\r\n },\r\n mossboneMother: {\r\n gameName: \"Moss Mother\",\r\n databaseName: \"Mossbone Mother\",\r\n name: \"Moss Mother (3)\",\r\n spoiler: \"Ruined Chapel, Weavenest Atla (act 1/2), and Moss Grotto (Act3)\",\r\n killRequire: \"3\",\r\n wiki: \"Moss+Mother\"\r\n },\r\n aspidCollector: {\r\n gameName: \"Aknid\",\r\n databaseName: \"Aspid Collector\",\r\n name: \"Aknid (15)\",\r\n spoiler: \"Mosshome and Bone Bottom\",\r\n killRequire: \"15\",\r\n wiki: \"Aknid\"\r\n },\r\n boneGoomba: {\r\n gameName: \"Skull Scuttler\",\r\n databaseName: \"Bone Goomba\",\r\n name: \"Skull Scuttler (35)\",\r\n spoiler: \"The Marrows\",\r\n killRequire: \"35\",\r\n wiki: \"Skull+Scuttler\"\r\n },\r\n boneGoombaBounceFly: {\r\n gameName: \"Skullwing\",\r\n databaseName: \"Bone Goomba Bounce Fly\",\r\n name: \"Skullwing (15)\",\r\n spoiler: \"Weavenest Atla\",\r\n killRequire: \"15\",\r\n wiki: \"Skullwing\"\r\n },\r\n boneGoombaLarge: {\r\n gameName: \"Skull Brute\",\r\n databaseName: \"Bone Goomba Large\",\r\n name: \"Skull Brute (15)\",\r\n spoiler: \"The Marrow\",\r\n killRequire: \"15\",\r\n wiki: \"Skull+Brute\"\r\n },\r\n skullKing: {\r\n gameName: \"Skull Tyrant\",\r\n databaseName: \"Skull King\",\r\n name: \"Skull Tyrant (1)\",\r\n spoiler: \"The Marrow\",\r\n killRequire: \"1\",\r\n wiki: \"Skull+Tyrant\"\r\n },\r\n boneCrawler: {\r\n gameName: \"Kilik\",\r\n databaseName: \"Bone Crawler\",\r\n name: \"Kilik (25)\",\r\n spoiler: \"The Marrow\",\r\n killRequire: \"25\",\r\n wiki: \"Kilik\"\r\n },\r\n boneFlyer: {\r\n gameName: \"Beastfly\",\r\n databaseName: \"Bone Flyer\",\r\n name: \"Beastfly (30)\",\r\n spoiler: \"The Marrow\",\r\n killRequire: \"30\",\r\n wiki: \"Beastfly\"\r\n },\r\n boneFlyerGiant: {\r\n gameName: \"Savage Beastfly\",\r\n databaseName: \"Bone Flyer Giant\",\r\n name: \"Savage Beastfly (2)\",\r\n spoiler: \"Chapel of the Beast, and Savage Beastfly Wish\",\r\n killRequire: \"2\",\r\n wiki: \"Savage+Beastfly\"\r\n },\r\n boneCircler: {\r\n gameName: \"Caranid\",\r\n databaseName: \"Bone Circler\",\r\n name: \"Caranid (25)\",\r\n spoiler: \"Deep Docks, The Marrow, and Far Fields\",\r\n killRequire: \"25\",\r\n wiki: \"Caranid\"\r\n },\r\n boneCirclerVicious: {\r\n gameName: \"Vicious Caranid\",\r\n databaseName: \"Bone Circler Vicious\",\r\n name: \"Vicious Caranid (15)\",\r\n spoiler: \"Far Fields\",\r\n killRequire: \"15\",\r\n wiki: \"Vicious+Caranid\"\r\n },\r\n boneHopper: {\r\n gameName: \"Hardbone Hopper\",\r\n databaseName: \"Bone Hopper\",\r\n name: \"Hardbone Hopper (20)\",\r\n spoiler: \"northeast Deep Docks\",\r\n killRequire: \"20\",\r\n wiki: \"Hardbone+Hopper\"\r\n },\r\n boneHopperGiant: {\r\n gameName: \"Hardbone Elder\",\r\n databaseName: \"Bone Hopper Giant\",\r\n name: \"Hardbone Elder (10)\",\r\n spoiler: \"northeast Far Fields (Act 3)\",\r\n killRequire: \"10\",\r\n wiki: \"Hardbone+Elder\"\r\n },\r\n boneSpitter: {\r\n gameName: \"Tarmite\",\r\n databaseName: \"Bone Spitter\",\r\n name: \"Tarmite (10)\",\r\n spoiler: \"southeast Far Fields\",\r\n killRequire: \"10\",\r\n wiki: \"Tarmite\"\r\n },\r\n boneRoller: {\r\n gameName: \"Mawling\",\r\n databaseName: \"Bone Roller\",\r\n name: \"Mawling (30)\",\r\n spoiler: \"Moss Grotto, Weavenest Atla, and Memorium\",\r\n killRequire: \"30\",\r\n wiki: \"Mawling\"\r\n },\r\n boneThumper: {\r\n gameName: \"Marrowmaw\",\r\n databaseName: \"Bone Thumper\",\r\n name: \"Marrowmaw (8)\",\r\n spoiler: \"west Weavenest Atla and east of the bench in the Memorium\",\r\n killRequire: \"8\",\r\n wiki: \"Marrowmaw\"\r\n },\r\n spineFloater: {\r\n gameName: \"Hoker\",\r\n databaseName: \"Spine Floater\",\r\n name: \"Hoker (15)\",\r\n spoiler: \"Far Fields\",\r\n killRequire: \"15\",\r\n wiki: \"Hoker\"\r\n },\r\n rockRoller: {\r\n gameName: \"Flintbeetle\",\r\n databaseName: \"Rock Roller\",\r\n name: \"Flintbeetle (3)\",\r\n spoiler: \"Volatile Flintbeetles Wish\",\r\n killRequire: \"3\",\r\n wiki: \"Flintbeetle\"\r\n },\r\n rhino: {\r\n gameName: \"Rhinogrund\",\r\n databaseName: \"Rhino\",\r\n name: \"Rhinogrund (2)\",\r\n spoiler: \"The Memorium (Act 1/2), Far Fields (Act 3)\",\r\n killRequire: \"2\",\r\n wiki: \"Rhinogrund\"\r\n },\r\n cryptWorm: {\r\n gameName: \"Gromling\",\r\n databaseName: \"Crypt Worm\",\r\n name: \"Gromling (25)\",\r\n spoiler: \"north-east Wormways\",\r\n killRequire: \"25\",\r\n wiki: \"Gromling\"\r\n },\r\n boneWorm: {\r\n gameName: \"Grom\",\r\n databaseName: \"Bone Worm\",\r\n name: \"Grom (10)\",\r\n spoiler: \"Wormways\",\r\n killRequire: \"10\",\r\n wiki: \"Grom\"\r\n },\r\n boneBeast: {\r\n gameName: \"Bell Beast\",\r\n databaseName: \"Bone Beast\",\r\n name: \"Bell Beast (1)\",\r\n spoiler: \"The Marrow's Bellway Station\",\r\n killRequire: \"1\",\r\n wiki: \"Bell+Beast\"\r\n },\r\n pilgrim03: {\r\n gameName: \"Pilgrim Groveller\",\r\n databaseName: \"Pilgrim 03\",\r\n name: \"Pilgrim Groveller (35)\",\r\n spoiler: \"Mosshome\",\r\n killRequire: \"35\",\r\n wiki: \"Pilgrim+Groveller\"\r\n },\r\n pilgrim01: {\r\n gameName: \"Pilgrim Pouncer\",\r\n databaseName: \"Pilgrim 01\",\r\n name: \"Pilgrim Pouncer (35)\",\r\n spoiler: \"Mosshome\",\r\n killRequire: \"35\",\r\n wiki: \"Pilgrim+Pouncer\"\r\n },\r\n pilgrim04: {\r\n gameName: \"Pilgrim Hornfly\",\r\n databaseName: \"Pilgrim 04\",\r\n name: \"Pilgrim Hornfly (15)\",\r\n spoiler: \"East Far Fields and west Bone Bottom\",\r\n killRequire: \"15\",\r\n wiki: \"Pilgrim+Hornfly\"\r\n },\r\n pilgrim02: {\r\n gameName: \"Pilgrim Hulk\",\r\n databaseName: \"Pilgrim 02\",\r\n name: \"Pilgrim Hulk (10)\",\r\n spoiler: \"East of the balloon in Far Fields\",\r\n killRequire: \"10\",\r\n wiki: \"Pilgrim+Hulk\"\r\n },\r\n pilgrimBellThrower: {\r\n gameName: \"Pilgrim Bellbearer\",\r\n databaseName: \"Pilgrim Bell Thrower\",\r\n name: \"Pilgrim Bellbearer (10)\",\r\n spoiler: \"Wormways\",\r\n killRequire: \"10\",\r\n wiki: \"Pilgrim+Bellbearer\"\r\n },\r\n pilgrimFly: {\r\n gameName: \"Winged Pilgrim\",\r\n databaseName: \"Pilgrim Fly\",\r\n name: \"Winged Pilgrim (25)\",\r\n spoiler: \"The Marrow and east of the balloon in Far Fields\",\r\n killRequire: \"25\",\r\n wiki: \"Winged+Pilgrim\"\r\n },\r\n pilgrim05: {\r\n gameName: \"Elder Pilgrim\",\r\n databaseName: \"Pilgrim 05\",\r\n name: \"Elder Pilgrim (5)\",\r\n spoiler: \"Bonegrave\",\r\n killRequire: \"5\",\r\n wiki: \"Elder+Pilgrim\"\r\n },\r\n pilgrimBellthrowerFly: {\r\n gameName: \"Winged Pilgrim Bellbearer\",\r\n databaseName: \"Pilgrim Bellthrower Fly\",\r\n name: \"Winged Pilgrim Bellbearer (10)\",\r\n spoiler: \"Greymoor and west Shellwood\",\r\n killRequire: \"10\",\r\n wiki: \"Winged+Pilgrim+Bellbearer\"\r\n },\r\n pilgrimHiker: {\r\n gameName: \"Pilgrim Hiker\",\r\n databaseName: \"Pilgrim Hiker\",\r\n name: \"Pilgrim Hiker (10)\",\r\n spoiler: \"Blasted Steps\",\r\n killRequire: \"10\",\r\n wiki: \"Pilgrim+Hiker\"\r\n },\r\n pilgrimStaffWielder: {\r\n gameName: \"Pilgrim Guide\",\r\n databaseName: \"Pilgrim StaffWielder\",\r\n name: \"Pilgrim Guide (15)\",\r\n spoiler: \"Greymoor in east of Halfway Home\",\r\n killRequire: \"15\",\r\n wiki: \"Pilgrim+Guide\"\r\n },\r\n pilgrimMossSpitter: {\r\n gameName: \"Overgrown Pilgrim\",\r\n databaseName: \"Pilgrim Moss Spitter\",\r\n name: \"Overgrown Pilgrim (20)\",\r\n spoiler: \"Mosshome\",\r\n killRequire: \"20\",\r\n wiki: \"Overgrown+Pilgrim\"\r\n },\r\n rosaryPilgrim: {\r\n gameName: \"Covetous Pilgrim\",\r\n databaseName: \"Rosary Pilgrim\",\r\n name: \"Covetous Pilgrim (2)\",\r\n spoiler: \"Shellwood and Bilewater\",\r\n killRequire: \"2\",\r\n wiki: \"Covetous+Pilgrim\"\r\n },\r\n rosaryThief: {\r\n gameName: \"Snitchfly\",\r\n databaseName: \"Rosary Thief\",\r\n name: \"Snitchfly (4)\",\r\n spoiler: \"Bone Bottom (Act 3) and Pilgrim's Rest (Act 3)\",\r\n killRequire: \"4\",\r\n wiki: \"Snitchfly\"\r\n },\r\n tarSlug: {\r\n gameName: \"Lavalug\",\r\n databaseName: \"Tar Slug\",\r\n name: \"Lavalug (12)\",\r\n spoiler: \"Deep Docks\",\r\n killRequire: \"12\",\r\n wiki: \"Lavalug\"\r\n },\r\n tarSlugHuge: {\r\n gameName: \"Lavalarga\",\r\n databaseName: \"Tar Slug Huge\",\r\n name: \"Lavalarga (8)\",\r\n spoiler: \"Deep Docks in a room with magma-walls & platforms\",\r\n killRequire: \"8\",\r\n wiki: \"Lavalarga\"\r\n },\r\n dockWorker: {\r\n gameName: \"Smelt Shoveller\",\r\n databaseName: \"Dock Worker\",\r\n name: \"Smelt Shoveller (25)\",\r\n spoiler: \"Deep Docks and the eastern edge of The Marrow\",\r\n killRequire: \"25\",\r\n wiki: \"Smelt+Shoveller\"\r\n },\r\n dockFlyer: {\r\n gameName: \"Flintstone Flyer\",\r\n databaseName: \"Dock Flyer\",\r\n name: \"Flintstone Flyer (25)\",\r\n spoiler: \"Deep Docks\",\r\n killRequire: \"25\",\r\n wiki: \"Flintstone+Flyer\"\r\n },\r\n dockBomber: {\r\n gameName: \"Flintflame Flyer\",\r\n databaseName: \"Dock Bomber\",\r\n name: \"Flintflame Flyer (10)\",\r\n spoiler: \"Deep Docks, require Simple Key\",\r\n killRequire: \"10\",\r\n wiki: \"Flintflame+Flyer\"\r\n },\r\n shieldDockWorker: {\r\n gameName: \"Smokerock Sifter\",\r\n databaseName: \"Shield Dock Worker\",\r\n name: \"Smokerock Sifter (10)\",\r\n spoiler: \"Deep Docks\",\r\n killRequire: \"10\",\r\n wiki: \"Smokerock+Sifter\"\r\n },\r\n dockCharger: {\r\n gameName: \"Deep Diver\",\r\n databaseName: \"Dock Charger\",\r\n name: \"Deep Diver (5)\",\r\n spoiler: \"Deep Docks, require Simple Key\",\r\n killRequire: \"5\",\r\n wiki: \"Deep+Diver\"\r\n },\r\n dockGuardThrower: {\r\n gameName: \"Forebrothers Signis & Gron\",\r\n databaseName: \"Dock Guard Thrower\",\r\n name: \"Forebrothers Signis & Gron (1)\",\r\n spoiler: \"south Deep Docks, require Simple Key\",\r\n killRequire: \"1\",\r\n wiki: \"Forebrothers+Signis+&+Gron\"\r\n },\r\n smallCrab: {\r\n gameName: \"Cragglite\",\r\n databaseName: \"Small Crab\",\r\n name: \"Cragglite (3)\",\r\n spoiler: \"Wormways, must defeat Craggler\",\r\n killRequire: \"3\",\r\n wiki: \"Cragglite\"\r\n },\r\n roofCrab: {\r\n gameName: \"Craggler\",\r\n databaseName: \"Roof Crab\",\r\n name: \"Craggler (1)\",\r\n spoiler: \"Wormways\",\r\n killRequire: \"1\",\r\n wiki: \"Craggler\"\r\n },\r\n fieldsFlockFlyers: {\r\n gameName: \"Brushflit\",\r\n databaseName: \"Fields Flock Flyers\",\r\n name: \"Brushflit (15)\",\r\n spoiler: \"Far Fields\",\r\n killRequire: \"15\",\r\n wiki: \"Brushflit\"\r\n },\r\n fieldsGoomba: {\r\n gameName: \"Fertid\",\r\n databaseName: \"Fields Goomba\",\r\n name: \"Fertid (25)\",\r\n spoiler: \"Far Fields\",\r\n killRequire: \"25\",\r\n wiki: \"Fertid\"\r\n },\r\n fieldsFlyer: {\r\n gameName: \"Flapping Fertid\",\r\n databaseName: \"Fields Flyer\",\r\n name: \"Flapping Fertid (20)\",\r\n spoiler: \"Far Fields\",\r\n killRequire: \"20\",\r\n wiki: \"Flapping+Fertid\"\r\n },\r\n songGolem: {\r\n gameName: \"Fourth Chorus\",\r\n databaseName: \"Song Golem\",\r\n name: \"Fourth Chorus (1)\",\r\n spoiler: \"Far Fields\",\r\n killRequire: \"1\",\r\n wiki: \"Fourth+Chorus\"\r\n },\r\n boneHunterTiny: {\r\n gameName: \"Skarrlid\",\r\n databaseName: \"Bone Hunter Tiny\",\r\n name: \"Skarrlid (25)\",\r\n spoiler: \"Hunter's March\",\r\n killRequire: \"25\",\r\n wiki: \"Skarrlid\"\r\n },\r\n boneHunterBuzzer: {\r\n gameName: \"Skarrwing\",\r\n databaseName: \"Bone Hunter Buzzer\",\r\n name: \"Skarrwing (30)\",\r\n spoiler: \"Hunter's March\",\r\n killRequire: \"30\",\r\n wiki: \"Skarrwing\"\r\n },\r\n boneHunterChild: {\r\n gameName: \"Skarr Scout\",\r\n databaseName: \"Bone Hunter Child\",\r\n name: \"Skarr Scout (20)\",\r\n spoiler: \"Hunter's March\",\r\n killRequire: \"20\",\r\n wiki: \"Skarr+Scout\"\r\n },\r\n boneHunter: {\r\n gameName: \"Skarr Stalker\",\r\n databaseName: \"Bone Hunter\",\r\n name: \"Skarr Stalker (15)\",\r\n spoiler: \"Hunter's March\",\r\n killRequire: \"15\",\r\n wiki: \"Skarr+Stalker\"\r\n },\r\n boneHunterFly: {\r\n gameName: \"Spear Skarr\",\r\n databaseName: \"Bone Hunter Fly\",\r\n name: \"Spear Skarr (10)\",\r\n spoiler: \"Hunter's March\",\r\n killRequire: \"10\",\r\n wiki: \"Spear+Skarr\"\r\n },\r\n boneHunterThrow: {\r\n gameName: \"Skarrgard\",\r\n databaseName: \"Bone Hunter Throw\",\r\n name: \"Skarrgard (2)\",\r\n spoiler: \"Hunter's March\",\r\n killRequire: \"2\",\r\n wiki: \"Skarrgard\"\r\n },\r\n boneHunterTrapper: {\r\n gameName: \"Gurr the Outcast\",\r\n databaseName: \"Bone Hunter Trapper\",\r\n name: \"Gurr the Outcast (1)\",\r\n spoiler: \"Guarding between The Marrow and Hunter's March, and storeroom at the top of Hunter's March\",\r\n killRequire: \"1\",\r\n wiki: \"Gurr+the+Outcast\"\r\n },\r\n boneHunterChief: {\r\n gameName: \"Last Claw\",\r\n databaseName: \"Bone Hunter Chief\",\r\n name: \"Last Claw (6)\",\r\n spoiler: \"Skarrsinger Karmelita's arena\",\r\n killRequire: \"6\",\r\n wiki: \"Last+Claw\"\r\n },\r\n hunterQueen: {\r\n gameName: \"Skarrsinger Karmelita\",\r\n databaseName: \"Hunter Queen\",\r\n name: \"Skarrsinger Karmelita (1)\",\r\n spoiler: \"Start from her statue in Hunter's Marchm Silk Soar required.\",\r\n killRequire: \"1\",\r\n wiki: \"Skarrsinger+Karmelita\"\r\n },\r\n mite: {\r\n gameName: \"Mite\",\r\n databaseName: \"Mite\",\r\n name: \"Mite (30)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"30\",\r\n wiki: \"Mite\"\r\n },\r\n mitefly: {\r\n gameName: \"Fluttermite\",\r\n databaseName: \"Mitefly\",\r\n name: \"Fluttermite (25)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"25\",\r\n wiki: \"Fluttermite\"\r\n },\r\n gnatGiant: {\r\n gameName: \"Mitemother\",\r\n databaseName: \"Gnat Giant\",\r\n name: \"Mitemother (10)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"10\",\r\n wiki: \"Mitemother\"\r\n },\r\n farmerCatcher: {\r\n gameName: \"Dreg Catcher\",\r\n databaseName: \"Farmer Catcher\",\r\n name: \"Dreg Catcher (20)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"20\",\r\n wiki: \"Dreg+Catcher\"\r\n },\r\n farmerScissors: {\r\n gameName: \"Silk Snipper\",\r\n databaseName: \"Farmer Scissors\",\r\n name: \"Silk Snipper (25)\",\r\n spoiler: \"Western towers of Greymoor\",\r\n killRequire: \"25\",\r\n wiki: \"Silk+Snipper\"\r\n },\r\n farmerCentipede: {\r\n gameName: \"Thread Raker\",\r\n databaseName: \"Farmer Centipede\",\r\n name: \"Thread Raker (15)\",\r\n spoiler: \"Outside Greymoor Bellway station\",\r\n killRequire: \"15\",\r\n wiki: \"Thread+Raker\"\r\n },\r\n vampireGnat: {\r\n gameName: \"Moorwing\",\r\n databaseName: \"Vampire Gnat\",\r\n name: \"Moorwing (1)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"1\",\r\n wiki: \"Moorwing\"\r\n },\r\n wisp: {\r\n gameName: \"Wisp\",\r\n databaseName: \"Wisp\",\r\n name: \"Wisp (15)\",\r\n spoiler: \"Wisp Thicket\",\r\n killRequire: \"15\",\r\n wiki: \"Wisp\"\r\n },\r\n farmerWisp: {\r\n gameName: \"Burning Bug\",\r\n databaseName: \"Farmer Wisp\",\r\n name: \"Burning Bug (8)\",\r\n spoiler: \"Wisp Thicket\",\r\n killRequire: \"8\",\r\n wiki: \"Burning+Bug\"\r\n },\r\n wispPyreEffigy: {\r\n gameName: \"Father of the Flame\",\r\n databaseName: \"Wisp Pyre Effigy\",\r\n name: \"Father of the Flame (1)\",\r\n spoiler: \"Wisp Thicket\",\r\n killRequire: \"1\",\r\n wiki: \"Father+of+the+Flame\"\r\n },\r\n crow: {\r\n gameName: \"Craw\",\r\n databaseName: \"Crow\",\r\n name: \"Craw (25)\",\r\n spoiler: \"Greymoor, near Craw Lake\",\r\n killRequire: \"25\",\r\n wiki: \"Craw\"\r\n },\r\n crowman: {\r\n gameName: \"Tallcraw\",\r\n databaseName: \"Crowman\",\r\n name: \"Tallcraw (20)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"20\",\r\n wiki: \"Tallcraw\"\r\n },\r\n crowmanDagger: {\r\n gameName: \"Squatcraw\",\r\n databaseName: \"Crowman Dagger\",\r\n name: \"Squatcraw (15)\",\r\n spoiler: \"Greymoor\",\r\n killRequire: \"15\",\r\n wiki: \"Squatcraw\"\r\n },\r\n crowmanJurorTiny: {\r\n gameName: \"Craw Juror\",\r\n databaseName: \"Crowman Juror Tiny\",\r\n name: \"Craw Juror (15)\",\r\n spoiler: \"Greymoor, near Craw Lake, require Craw Summon\",\r\n killRequire: \"15\",\r\n wiki: \"Craw+Juror\"\r\n },\r\n crowmanJuror: {\r\n gameName: \"Tallcraw Juror\",\r\n databaseName: \"Crowman Juror\",\r\n name: \"Tallcraw Juror (10)\",\r\n spoiler: \"Greymoor, near Craw Lake, require Craw Summon\",\r\n killRequire: \"10\",\r\n wiki: \"Tallcraw+Juror\"\r\n },\r\n crowmanDaggerJuror: {\r\n gameName: \"Squatcraw Juror\",\r\n databaseName: \"Crowman Dagger Juror\",\r\n name: \"Squatcraw Juror (8)\",\r\n spoiler: \"Greymoor, near Craw Lake, require Craw Summon\",\r\n killRequire: \"8\",\r\n wiki: \"Squatcraw+Juror\"\r\n },\r\n crawfather: {\r\n gameName: \"Crawfather\",\r\n databaseName: \"Crawfather\",\r\n name: \"Crawfather (1)\",\r\n spoiler: \"Greymoor, near Craw Lake, require Craw Summon\",\r\n killRequire: \"1\",\r\n wiki: \"Crawfather\"\r\n },\r\n maggots: {\r\n gameName: \"Muckmaggot\",\r\n databaseName: \"Maggots\",\r\n name: \"Muckmaggot (80)\",\r\n spoiler: \"the waters of Sinner's Road, Bilewater, and Putrified Ducts\",\r\n killRequire: \"80\",\r\n wiki: \"Muckmaggot\"\r\n },\r\n dustroachPollywog: {\r\n gameName: \"Slubberlug\",\r\n databaseName: \"Dustroach Pollywog\",\r\n name: \"Slubberlug (12)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"12\",\r\n wiki: \"Slubberlug\"\r\n },\r\n dustroach: {\r\n gameName: \"Muckroach\",\r\n databaseName: \"Dustroach\",\r\n name: \"Muckroach (20)\",\r\n spoiler: \"Sinner's Road\",\r\n killRequire: \"20\",\r\n wiki: \"Muckroach\"\r\n },\r\n bloatRoach: {\r\n gameName: \"Bloatroach\",\r\n databaseName: \"Bloat Roach\",\r\n name: \"Bloatroach (12)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"12\",\r\n wiki: \"Bloatroach\"\r\n },\r\n roachfeederShort: {\r\n gameName: \"Roachcatcher\",\r\n databaseName: \"Roachfeeder Short\",\r\n name: \"Roachcatcher (20)\",\r\n spoiler: \"Sinner's Road\",\r\n killRequire: \"20\",\r\n wiki: \"Roachcatcher\"\r\n },\r\n roachfeederTall: {\r\n gameName: \"Roachfeeder\",\r\n databaseName: \"Roachfeeder Tall\",\r\n name: \"Roachfeeder (20)\",\r\n spoiler: \"Sinner's Road\",\r\n killRequire: \"20\",\r\n wiki: \"Roachfeeder\"\r\n },\r\n roachkeeper: {\r\n gameName: \"Roachkeeper\",\r\n databaseName: \"Roachkeeper\",\r\n name: \"Roachkeeper (10)\",\r\n spoiler: \"Sinner's Road\",\r\n killRequire: \"10\",\r\n wiki: \"Roachkeeper\"\r\n },\r\n roachkeeperChefTiny: {\r\n gameName: \"Roachserver\",\r\n databaseName: \"Roachkeeper Chef Tiny\",\r\n name: \"Roachserver (10)\",\r\n spoiler: \"Disgraced Chef Lugoli's arena\",\r\n killRequire: \"10\",\r\n wiki: \"Roachserver\"\r\n },\r\n roachkeeperChef: {\r\n gameName: \"Disgraced Chef Lugoli\",\r\n databaseName: \"Roachkeeper Chef\",\r\n name: \"Disgraced Chef Lugoli (1)\",\r\n spoiler: \"Eastern end of Sinner's Road, requires Faydown Cloak\",\r\n killRequire: \"1\",\r\n wiki: \"Disgraced+Chef+Lugoli\"\r\n },\r\n wraith: {\r\n gameName: \"Wraith\",\r\n databaseName: \"Wraith\",\r\n name: \"Wraith (10)\",\r\n spoiler: \"The Mist\",\r\n killRequire: \"10\",\r\n wiki: \"Wraith\"\r\n },\r\n swampDrifter: {\r\n gameName: \"Mothleaf Lagnia\",\r\n databaseName: \"Swamp Drifter\",\r\n name: \"Mothleaf Lagnia (25)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"25\",\r\n wiki: \"Mothleaf+Lagnia\"\r\n },\r\n swampGoomba: {\r\n gameName: \"Miremite\",\r\n databaseName: \"Swamp Goomba\",\r\n name: \"Miremite (20)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"20\",\r\n wiki: \"Miremite\"\r\n },\r\n swampMosquito: {\r\n gameName: \"Swamp Squit\",\r\n databaseName: \"Swamp Mosquito\",\r\n name: \"Swamp Squit (30)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"30\",\r\n wiki: \"Swamp+Squit\"\r\n },\r\n swampMosquitoSkinny: {\r\n gameName: \"Spit Squit\",\r\n databaseName: \"Swamp Mosquito Skinny\",\r\n name: \"Spit Squit (20)\",\r\n spoiler: \"Putrified Ducts\",\r\n killRequire: \"20\",\r\n wiki: \"Spit+Squit\"\r\n },\r\n swampMuckman: {\r\n gameName: \"Stilkin\",\r\n databaseName: \"Swamp Muckman\",\r\n name: \"Stilkin (15)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"15\",\r\n wiki: \"Stilkin\"\r\n },\r\n swampMuckmanTall: {\r\n gameName: \"Stilkin Trapper\",\r\n databaseName: \"Swamp Muckman Tall\",\r\n name: \"Stilkin Trapper (12)\",\r\n spoiler: \"Groal the Great's boss arena, and Bilewater after defeating him\",\r\n killRequire: \"12\",\r\n wiki: \"Stilkin+Trapper\"\r\n },\r\n swampShaman: {\r\n gameName: \"Groal the Great\",\r\n databaseName: \"Swamp Shaman\",\r\n name: \"Groal the Great (1)\",\r\n spoiler: \"Bilewater\",\r\n killRequire: \"1\",\r\n wiki: \"Groal+the+Great\"\r\n },\r\n swampBarnacle: {\r\n gameName: \"Barnak\",\r\n databaseName: \"Swamp Barnacle\",\r\n name: \"Barnak (8)\",\r\n spoiler: \"Putrified Ducts\",\r\n killRequire: \"8\",\r\n wiki: \"Barnak\"\r\n },\r\n swampDuctsucker: {\r\n gameName: \"Ductsucker\",\r\n databaseName: \"Swamp Ductsucker\",\r\n name: \"Ductsucker (6)\",\r\n spoiler: \"Putrified Ducts\",\r\n killRequire: \"6\",\r\n wiki: \"Ductsucker\"\r\n },\r\n pondSkater: {\r\n gameName: \"Pond Skipper\",\r\n databaseName: \"Pond Skater\",\r\n name: \"Pond Skipper (15)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"15\",\r\n wiki: \"Pond+Skipper\"\r\n },\r\n pilgrimFisher: {\r\n gameName: \"Pondcatcher\",\r\n databaseName: \"Pilgrim Fisher\",\r\n name: \"Pondcatcher (20)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"20\",\r\n wiki: \"Pondcatcher\"\r\n },\r\n shellwoodGnat: {\r\n gameName: \"Shellwood Gnat\",\r\n databaseName: \"Shellwood Gnat\",\r\n name: \"Shellwood Gnat (15)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"15\",\r\n wiki: \"Shellwood+Gnat\"\r\n },\r\n shellwoodWasp: {\r\n gameName: \"Wood Wasp\",\r\n databaseName: \"Shellwood Wasp\",\r\n name: \"Wood Wasp (12)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"12\",\r\n wiki: \"Wood+Wasp\"\r\n },\r\n stickInsect: {\r\n gameName: \"Splinter\",\r\n databaseName: \"Stick Insect\",\r\n name: \"Splinter (12)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"12\",\r\n wiki: \"Splinter\"\r\n },\r\n stickInsectCharger: {\r\n gameName: \"Splinterhorn\",\r\n databaseName: \"Stick Insect Charger\",\r\n name: \"Splinterhorn (10)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"10\",\r\n wiki: \"Splinterhorn\"\r\n },\r\n stickInsectFlyer: {\r\n gameName: \"Splinterbark\",\r\n databaseName: \"Stick Insect Flyer\",\r\n name: \"Splinterbark (10)\",\r\n spoiler: \"Shellwood, or Sister Splinter arena\",\r\n killRequire: \"10\",\r\n wiki: \"Splinterbark\"\r\n },\r\n splinterQueen: {\r\n gameName: \"Sister Splinter\",\r\n databaseName: \"Splinter Queen\",\r\n name: \"Sister Splinter (1)\",\r\n spoiler: \"top of Shellwood\",\r\n killRequire: \"1\",\r\n wiki: \"Sister+Splinter\"\r\n },\r\n flowerDrifter: {\r\n gameName: \"Phacia\",\r\n databaseName: \"Flower Drifter\",\r\n name: \"Phacia (25)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"25\",\r\n wiki: \"Phacia\"\r\n },\r\n bloomShooter: {\r\n gameName: \"Pollenica\",\r\n databaseName: \"Bloom Shooter\",\r\n name: \"Pollenica (10)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"10\",\r\n wiki: \"Pollenica\"\r\n },\r\n bloomPuncher: {\r\n gameName: \"Gahlia\",\r\n databaseName: \"Bloom Puncher\",\r\n name: \"Gahlia (20)\",\r\n spoiler: \"Shellwood\",\r\n killRequire: \"20\",\r\n wiki: \"Gahlia\"\r\n },\r\n seth: {\r\n gameName: \"Shrine Guardian Seth\",\r\n databaseName: \"Seth\",\r\n name: \"Shrine Guardian Seth (1)\",\r\n spoiler: \"hidden area in Shellwood\",\r\n killRequire: \"1\",\r\n wiki: \"Shrine+Guardian+Seth\"\r\n },\r\n flowerQueen: {\r\n gameName: \"Nyleth\",\r\n databaseName: \"Flower Queen\",\r\n name: \"Nyleth (1)\",\r\n spoiler: \"hidden area in Shellwood\",\r\n killRequire: \"1\",\r\n wiki: \"Nyleth\"\r\n },\r\n bellGoomba: {\r\n gameName: \"Furm\",\r\n databaseName: \"Bell Goomba\",\r\n name: \"Furm (25)\",\r\n spoiler: \"bell tunnels around Bellhart\",\r\n killRequire: \"25\",\r\n wiki: \"Furm\"\r\n },\r\n bellFly: {\r\n gameName: \"Winged Furm\",\r\n databaseName: \"Bell Fly\",\r\n name: \"Winged Furm (12)\",\r\n spoiler: \"bell tunnels around Bellhart\",\r\n killRequire: \"12\",\r\n wiki: \"Winged+Furm\"\r\n },\r\n bladeSpider: {\r\n gameName: \"Pharlid\",\r\n databaseName: \"Blade Spider\",\r\n name: \"Pharlid (20)\",\r\n spoiler: \"Blasted Steps\",\r\n killRequire: \"20\",\r\n wiki: \"Pharlid\"\r\n },\r\n bladeSpiderHang: {\r\n gameName: \"Pharlid Diver\",\r\n databaseName: \"Blade Spider Hang\",\r\n name: \"Pharlid Diver (10)\",\r\n spoiler: \"Weavenest Atla\",\r\n killRequire: \"10\",\r\n wiki: \"Pharlid+Diver\"\r\n },\r\n shellFossilMimic: {\r\n gameName: \"Shardillard\",\r\n databaseName: \"Shell Fossil Mimic\",\r\n name: \"Shardillard (3)\",\r\n spoiler: \"Deep Docks, Greymoor, Sands of Karak, The Marrow\",\r\n killRequire: \"3\",\r\n wiki: \"Shardillard\"\r\n },\r\n sandCentipede: {\r\n gameName: \"Sandcarver\",\r\n databaseName: \"Sand Centipede\",\r\n name: \"Sandcarver (40)\",\r\n spoiler: \"Blasted Steps and the Sands of Karak\",\r\n killRequire: \"40\",\r\n wiki: \"Sandcarver\"\r\n },\r\n coralJudgeChild: {\r\n gameName: \"Squirrm\",\r\n databaseName: \"Coral Judge Child\",\r\n name: \"Squirrm (4)\",\r\n spoiler: \"secret room in Blasted Steps\",\r\n killRequire: \"4\",\r\n wiki: \"Squirrm\"\r\n },\r\n coralJudge: {\r\n gameName: \"Judge\",\r\n databaseName: \"Coral Judge\",\r\n name: \"Judge (15)\",\r\n spoiler: \"Blasted Steps\",\r\n killRequire: \"15\",\r\n wiki: \"Judge\"\r\n },\r\n lastJudge: {\r\n gameName: \"Last Judge\",\r\n databaseName: \"Last Judge\",\r\n name: \"Last Judge (1)\",\r\n spoiler: \"Blasted Steps\",\r\n killRequire: \"1\",\r\n wiki: \"Last+Judge\"\r\n },\r\n coralSpikeGoomba: {\r\n gameName: \"Coral Furm\",\r\n databaseName: \"Coral Spike Goomba\",\r\n name: \"Coral Furm (15)\",\r\n spoiler: \"Sands of Karak\",\r\n killRequire: \"15\",\r\n wiki: \"Coral+Furm\"\r\n },\r\n coralConchShooter: {\r\n gameName: \"Driznit\",\r\n databaseName: \"Coral Conch Shooter\",\r\n name: \"Driznit (25)\",\r\n spoiler: \"Blasted Steps\",\r\n killRequire: \"25\",\r\n wiki: \"Driznit\"\r\n },\r\n coralConchShooterHeavy: {\r\n gameName: \"Driznarga\",\r\n databaseName: \"Coral Conch Shooter Heavy\",\r\n name: \"Driznarga (14)\",\r\n spoiler: \"Sands of Karak and Memorium\",\r\n killRequire: \"14\",\r\n wiki: \"Driznarga\"\r\n },\r\n coralConchStabber: {\r\n gameName: \"Pokenabbin\",\r\n databaseName: \"Coral Conch Stabber\",\r\n name: \"Pokenabbin (16)\",\r\n spoiler: \"Sands of Karak\",\r\n killRequire: \"16\",\r\n wiki: \"Pokenabbin\"\r\n },\r\n coralConchDriller: {\r\n gameName: \"Conchfly\",\r\n databaseName: \"Coral Conch Driller\",\r\n name: \"Conchfly (8)\",\r\n spoiler: \"Sands of Karak\",\r\n killRequire: \"8\",\r\n wiki: \"Conchfly\"\r\n },\r\n coralConchDrillerGiant: {\r\n gameName: \"Great Conchfly\",\r\n databaseName: \"Coral Conch Driller Giant\",\r\n name: \"Great Conchfly (2)\",\r\n spoiler: \"Blasted Steps\",\r\n killRequire: \"2\",\r\n wiki: \"Great+Conchfly\"\r\n },\r\n coralGoombas: {\r\n gameName: \"Crustcrawler\",\r\n databaseName: \"Coral Goombas\",\r\n name: \"Crustcrawler (10)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"10\",\r\n wiki: \"Crustcrawler\"\r\n },\r\n coralGoombaLarge: {\r\n gameName: \"Crustcrag\",\r\n databaseName: \"Coral Goomba Large\",\r\n name: \"Crustcrag (6)\",\r\n spoiler: \"Memorium\",\r\n killRequire: \"6\",\r\n wiki: \"Crustcrag\"\r\n },\r\n coralSwimmerFat: {\r\n gameName: \"Kai\",\r\n databaseName: \"Coral Swimmer Fat\",\r\n name: \"Kai (10)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"10\",\r\n wiki: \"Kai\"\r\n },\r\n pokeSwimmer: {\r\n gameName: \"Spinebeak Kai\",\r\n databaseName: \"Poke Swimmer\",\r\n name: \"Spinebeak Kai (10)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"10\",\r\n wiki: \"Spinebeak+Kai\"\r\n },\r\n spikeSwimmer: {\r\n gameName: \"Steelspine Kai\",\r\n databaseName: \"Spike Swimmer\",\r\n name: \"Steelspine Kai (15)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"15\",\r\n wiki: \"Steelspine+Kai\"\r\n },\r\n coralSwimmerSmall: {\r\n gameName: \"Yuma\",\r\n databaseName: \"Coral Swimmer Small\",\r\n name: \"Yuma (16)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"16\",\r\n wiki: \"Yuma\"\r\n },\r\n coralBigJellyfish: {\r\n gameName: \"Yumama\",\r\n databaseName: \"Coral Big Jellyfish\",\r\n name: \"Yumama (3)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"3\",\r\n wiki: \"Yumama\"\r\n },\r\n coralWarrior: {\r\n gameName: \"Karaka\",\r\n databaseName: \"Coral Warrior\",\r\n name: \"Karaka (10)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"10\",\r\n wiki: \"Karaka\"\r\n },\r\n coralFlyer: {\r\n gameName: \"Kakri\",\r\n databaseName: \"Coral Flyer\",\r\n name: \"Kakri (10)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"10\",\r\n wiki: \"Kakri\"\r\n },\r\n coralFlyerThrow: {\r\n gameName: \"Yago\",\r\n databaseName: \"Coral Flyer Throw\",\r\n name: \"Yago (12)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"12\",\r\n wiki: \"Yago\"\r\n },\r\n coralBrawler: {\r\n gameName: \"Karak Gor\",\r\n databaseName: \"Coral Brawler\",\r\n name: \"Karak Gor (8)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"8\",\r\n wiki: \"Karak+Gor\"\r\n },\r\n coralHunter: {\r\n gameName: \"Alita\",\r\n databaseName: \"Coral Hunter\",\r\n name: \"Alita (6)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"6\",\r\n wiki: \"Alita\"\r\n },\r\n coralBubbleBrute: {\r\n gameName: \"Corrcrust Karaka\",\r\n databaseName: \"Coral Bubble Brute\",\r\n name: \"Corrcrust Karaka (6)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"6\",\r\n wiki: \"Corrcrust+Karaka\"\r\n },\r\n coralKing: {\r\n gameName: \"Crust King Khann\",\r\n databaseName: \"Coral King\",\r\n name: \"Crust King Khann (1)\",\r\n spoiler: \"Coral Tower\",\r\n killRequire: \"1\",\r\n wiki: \"Crust+King+Khann\"\r\n },\r\n coralWarriorGrey: {\r\n gameName: \"Watcher at the Edge\",\r\n databaseName: \"Coral Warrior Grey\",\r\n name: \"Watcher at the Edge (1)\",\r\n spoiler: \"hidden zone inside of Sands of Karak, require Silk Soar (Act 3)\",\r\n killRequire: \"1\",\r\n wiki: \"Watcher+at+the+Edge\"\r\n },\r\n zapCoreEnemy: {\r\n gameName: \"Voltvyrm\",\r\n databaseName: \"Zap Core Enemy\",\r\n name: \"Voltvyrm (1)\",\r\n spoiler: \"Sands of Karak.\",\r\n killRequire: \"1\",\r\n wiki: \"Voltvyrm\"\r\n },\r\n citadelBat: {\r\n gameName: \"Drapefly\",\r\n databaseName: \"Citadel Bat\",\r\n name: \"Drapefly (30)\",\r\n spoiler: \"Underworks and Slab\",\r\n killRequire: \"30\",\r\n wiki: \"Drapefly\"\r\n },\r\n citadelBatLarge: {\r\n gameName: \"Drapelord\",\r\n databaseName: \"Citadel Bat Large\",\r\n name: \"Drapelord (4)\",\r\n spoiler: \"East Memorium\",\r\n killRequire: \"4\",\r\n wiki: \"Drapelord\"\r\n },\r\n miteHeavy: {\r\n gameName: \"Drapemite\",\r\n databaseName: \"Mite Heavy\",\r\n name: \"Drapemite (20)\",\r\n spoiler: \"Underworks and Slab\",\r\n killRequire: \"20\",\r\n wiki: \"Drapemite\"\r\n },\r\n understoreMiteGiant: {\r\n gameName: \"Giant Drapemite\",\r\n databaseName: \"Understore Mite Giant\",\r\n name: \"Giant Drapemite (6)\",\r\n spoiler: \"High Halls\",\r\n killRequire: \"6\",\r\n wiki: \"Giant+Drapemite\"\r\n },\r\n understoreSmall: {\r\n gameName: \"Underworker\",\r\n databaseName: \"Understore Small\",\r\n name: \"Underworker (15)\",\r\n spoiler: \"Underworks \",\r\n killRequire: \"15\",\r\n wiki: \"Underworker\"\r\n },\r\n pilgrim03Understore: {\r\n gameName: \"Underscrub\",\r\n databaseName: \"Pilgrim 03 Understore\",\r\n name: \"Underscrub (20)\",\r\n spoiler: \"Underworks \",\r\n killRequire: \"20\",\r\n wiki: \"Underscrub\"\r\n },\r\n pilgrimStaffUnderstore: {\r\n gameName: \"Undersweep\",\r\n databaseName: \"Pilgrim Staff Understore\",\r\n name: \"Undersweep (10)\",\r\n spoiler: \"Underworks \",\r\n killRequire: \"10\",\r\n wiki: \"Undersweep\"\r\n },\r\n understorePoker: {\r\n gameName: \"Underpoke\",\r\n databaseName: \"Understore Poker\",\r\n name: \"Underpoke (25)\",\r\n spoiler: \"Underworks \",\r\n killRequire: \"25\",\r\n wiki: \"Underpoke\"\r\n },\r\n understoreThrower: {\r\n gameName: \"Underloft\",\r\n databaseName: \"Understore Thrower\",\r\n name: \"Underloft (25)\",\r\n spoiler: \"Underworks \",\r\n killRequire: \"25\",\r\n wiki: \"Underloft\"\r\n },\r\n understoreHeavy: {\r\n gameName: \"Undercrank\",\r\n databaseName: \"Understore Heavy\",\r\n name: \"Undercrank (4)\",\r\n spoiler: \"Underworks \",\r\n killRequire: \"4\",\r\n wiki: \"Undercrank\"\r\n },\r\n songPilgrim01: {\r\n gameName: \"Envoy\",\r\n databaseName: \"Song Pilgrim 01\",\r\n name: \"Envoy (20)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"20\",\r\n wiki: \"Envoy\"\r\n },\r\n pilgrim01Song: {\r\n gameName: \"Choir Pouncer\",\r\n databaseName: \"Pilgrim 01 Song\",\r\n name: \"Choir Pouncer (30)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"30\",\r\n wiki: \"Choir+Pouncer\"\r\n },\r\n pilgrim02Song: {\r\n gameName: \"Choir Hornhead\",\r\n databaseName: \"Pilgrim 02 Song\",\r\n name: \"Choir Hornhead (15)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"15\",\r\n wiki: \"Choir+Hornhead\"\r\n },\r\n pilgrim03Song: {\r\n gameName: \"Choir Bellbearer\",\r\n databaseName: \"Pilgrim 03 Song\",\r\n name: \"Choir Bellbearer (25)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"25\",\r\n wiki: \"Choir+Bellbearer\"\r\n },\r\n pilgrim04Song: {\r\n gameName: \"Choir Flyer\",\r\n databaseName: \"Pilgrim 04 Song\",\r\n name: \"Choir Flyer (20)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"20\",\r\n wiki: \"Choir+Flyer\"\r\n },\r\n pilgrimStomperSong: {\r\n gameName: \"Choir Elder\",\r\n databaseName: \"Pilgrim Stomper Song\",\r\n name: \"Choir Elder (6)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"6\",\r\n wiki: \"Choir+Elder\"\r\n },\r\n songPilgrim03: {\r\n gameName: \"Choristor\",\r\n databaseName: \"Song Pilgrim 03\",\r\n name: \"Choristor (25)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"25\",\r\n wiki: \"Choristor\"\r\n },\r\n songReed: {\r\n gameName: \"Reed\",\r\n databaseName: \"Song Reed\",\r\n name: \"Reed (30)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"30\",\r\n wiki: \"Reed\"\r\n },\r\n songReedGrand: {\r\n gameName: \"Grand Reed\",\r\n databaseName: \"Song Reed Grand\",\r\n name: \"Grand Reed (12)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"12\",\r\n wiki: \"Grand+Reed\"\r\n },\r\n songHeavySentry: {\r\n gameName: \"Choir Clapper\",\r\n databaseName: \"Song Heavy Sentry\",\r\n name: \"Choir Clapper (3)\",\r\n spoiler: \"High Halls\",\r\n killRequire: \"3\",\r\n wiki: \"Choir+Clapper\"\r\n },\r\n songHandmaiden: {\r\n gameName: \"Clawmaiden\",\r\n databaseName: \"Song Handmaiden\",\r\n name: \"Clawmaiden (10)\",\r\n spoiler: \"Choral Chambers and High Halls\",\r\n killRequire: \"10\",\r\n wiki: \"Clawmaiden\"\r\n },\r\n arboriumKeeper: {\r\n gameName: \"Memoria\",\r\n databaseName: \"Arborium Keeper\",\r\n name: \"Memoria (2)\",\r\n spoiler: \"Memorium\",\r\n killRequire: \"2\",\r\n wiki: \"Memoria\"\r\n },\r\n songAdministrator: {\r\n gameName: \"Minister\",\r\n databaseName: \"Song Administrator\",\r\n name: \"Minister (15)\",\r\n spoiler: \"High Halls\",\r\n killRequire: \"15\",\r\n wiki: \"Minister\"\r\n },\r\n songPilgrimMaestro: {\r\n gameName: \"Maestro\",\r\n databaseName: \"Song Pilgrim Maestro\",\r\n name: \"Maestro (6)\",\r\n spoiler: \"High Halls\",\r\n killRequire: \"6\",\r\n wiki: \"Maestro\"\r\n },\r\n songKnight: {\r\n gameName: \"Second Sentinel\",\r\n databaseName: \"Song Knight\",\r\n name: \"Second Sentinel (1)\",\r\n spoiler: \"Final Audience Wish\",\r\n killRequire: \"1\",\r\n wiki: \"Second+Sentinel\"\r\n },\r\n songThreadedHusk: {\r\n gameName: \"Dreg Husk\",\r\n databaseName: \"Song Threaded Husk\",\r\n name: \"Dreg Husk (8)\",\r\n spoiler: \"The Unravelled\",\r\n killRequire: \"8\",\r\n wiki: \"Dreg+Husk\"\r\n },\r\n songThreadedHuskSpin: {\r\n gameName: \"Dregwheel\",\r\n databaseName: \"Song Threaded Husk Spin\",\r\n name: \"Dregwheel (8)\",\r\n spoiler: \"The Unravelled\",\r\n killRequire: \"8\",\r\n wiki: \"Dregwheel\"\r\n },\r\n songPilgrim02: {\r\n gameName: \"Surgeon\",\r\n databaseName: \"Song Pilgrim 02\",\r\n name: \"Surgeon (3)\",\r\n spoiler: \"Whiteward, specifically the Balm for the Wounded wish\",\r\n killRequire: \"3\",\r\n wiki: \"Surgeon\"\r\n },\r\n songCreeper: {\r\n gameName: \"Mortician\",\r\n databaseName: \"Song Creeper\",\r\n name: \"Mortician (10)\",\r\n spoiler: \"Whiteward\",\r\n killRequire: \"10\",\r\n wiki: \"Mortician\"\r\n },\r\n conductorBoss: {\r\n gameName: \"The Unravelled\",\r\n databaseName: \"Conductor Boss\",\r\n name: \"The Unravelled (1)\",\r\n spoiler: \"Whiteward, south-west, requires Surgeon's Key\",\r\n killRequire: \"1\",\r\n wiki: \"The+Unravelled\"\r\n },\r\n understoreAutomaton: {\r\n gameName: \"Cogwork Underfly\",\r\n databaseName: \"Understore Automaton\",\r\n name: \"Cogwork Underfly (25)\",\r\n spoiler: \"Underworks\",\r\n killRequire: \"25\",\r\n wiki: \"Cogwork+Underfly\"\r\n },\r\n understoreAutomatonEX: {\r\n gameName: \"Cogwork Hauler\",\r\n databaseName: \"Understore Automaton EX\",\r\n name: \"Cogwork Hauler (12)\",\r\n spoiler: \"Underworks\",\r\n killRequire: \"12\",\r\n wiki: \"Cogwork+Hauler\"\r\n },\r\n songAutomatonGoomba: {\r\n gameName: \"Cogwork Crawler\",\r\n databaseName: \"Song Automaton Goomba\",\r\n name: \"Cogwork Crawler (15)\",\r\n spoiler: \"Cogwork Core\",\r\n killRequire: \"15\",\r\n wiki: \"Cogwork+Crawler\"\r\n },\r\n songAutomatonFly: {\r\n gameName: \"Cogworker\",\r\n databaseName: \"Song Automaton Fly\",\r\n name: \"Cogworker (15)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"15\",\r\n wiki: \"Cogworker\"\r\n },\r\n songAutomatonFlySpike: {\r\n gameName: \"Cogwork Spine\",\r\n databaseName: \"Song Automaton Fly Spike\",\r\n name: \"Cogwork Spine (10)\",\r\n spoiler: \"Choral Chambers\",\r\n killRequire: \"10\",\r\n wiki: \"Cogwork+Spine\"\r\n },\r\n songAutomaton01: {\r\n gameName: \"Cogwork Choirbug\",\r\n databaseName: \"Song Automaton 01\",\r\n name: \"Cogwork Choirbug (20)\",\r\n spoiler: \"Cogwork Core\",\r\n killRequire: \"20\",\r\n wiki: \"Cogwork+Choirbug\"\r\n },\r\n songAutomaton02: {\r\n gameName: \"Cogwork Cleanser\",\r\n databaseName: \"Song Automaton 02\",\r\n name: \"Cogwork Cleanser (12)\",\r\n spoiler: \"Cogwork Core\",\r\n killRequire: \"12\",\r\n wiki: \"Cogwork+Cleanser\"\r\n },\r\n songAutomatonShield: {\r\n gameName: \"Cogwork Defender\",\r\n databaseName: \"Song Automaton Shield\",\r\n name: \"Cogwork Defender (8)\",\r\n spoiler: \"Cogwork Core\",\r\n killRequire: \"8\",\r\n wiki: \"Cogwork+Defender\"\r\n },\r\n songAutomatonBall: {\r\n gameName: \"Cogwork Clapper\",\r\n databaseName: \"Song Automaton Ball\",\r\n name: \"Cogwork Clapper (1)\",\r\n spoiler: \"southeast room in Cogwork Core\",\r\n killRequire: \"1\",\r\n wiki: \"Cogwork+Clapper\"\r\n },\r\n clockworkDancer: {\r\n gameName: \"Cogwork Dancers\",\r\n databaseName: \"Clockwork Dancer\",\r\n name: \"Cogwork Dancers (1)\",\r\n spoiler: \"Cogwork Core\",\r\n killRequire: \"1\",\r\n wiki: \"Cogwork+Dancers\"\r\n },\r\n songScholarAcolyte: {\r\n gameName: \"Vaultborn\",\r\n databaseName: \"Song Scholar Acolyte\",\r\n name: \"Vaultborn (20)\",\r\n spoiler: \"Whispering Vaults\",\r\n killRequire: \"20\",\r\n wiki: \"Vaultborn\"\r\n },\r\n lightbearer: {\r\n gameName: \"Lampbearer\",\r\n databaseName: \"Lightbearer\",\r\n name: \"Lampbearer (20)\",\r\n spoiler: \"Whispering Vaults\",\r\n killRequire: \"20\",\r\n wiki: \"Lampbearer\"\r\n },\r\n scrollkeeper: {\r\n gameName: \"Scrollreader\",\r\n databaseName: \"Scrollkeeper\",\r\n name: \"Scrollreader (15)\",\r\n spoiler: \"Whispering Vaults\",\r\n killRequire: \"15\",\r\n wiki: \"Scrollreader\"\r\n },\r\n scholar: {\r\n gameName: \"Vaultkeeper\",\r\n databaseName: \"Scholar\",\r\n name: \"Vaultkeeper (10)\",\r\n spoiler: \"Whispering Vaults\",\r\n killRequire: \"10\",\r\n wiki: \"Vaultkeeper\"\r\n },\r\n trobbio: {\r\n gameName: \"Trobbio\",\r\n databaseName: \"Trobbio\",\r\n name: \"Trobbio (1)\",\r\n spoiler: \"The Stage between Choral Chambers and Whispering Vaults\",\r\n killRequire: \"1\",\r\n wiki: \"Trobbio\"\r\n },\r\n tormentedTrobbio: {\r\n gameName: \"Tormented Trobbio\",\r\n databaseName: \"Tormented Trobbio\",\r\n name: \"Tormented Trobbio (1)\",\r\n spoiler: \"The Stage, Pain, Anguish and Misery wish\",\r\n killRequire: \"1\",\r\n wiki: \"Tormented+Trobbio\"\r\n },\r\n slabPrisonerLeaperNew: {\r\n gameName: \"Penitent\",\r\n databaseName: \"Slab Prisoner Leaper New\",\r\n name: \"Penitent (8)\",\r\n spoiler: \"The Slab\",\r\n killRequire: \"8\",\r\n wiki: \"Penitent\"\r\n },\r\n slabPrisonerFlyNew: {\r\n gameName: \"Puny Penitent\",\r\n databaseName: \"Slab Prisoner Fly New\",\r\n name: \"Puny Penitent (6)\",\r\n spoiler: \"The Slab\",\r\n killRequire: \"6\",\r\n wiki: \"Puny+Penitent\"\r\n },\r\n slabFlySmallFresh: {\r\n gameName: \"Freshfly\",\r\n databaseName: \"Slab Fly Small Fresh\",\r\n name: \"Freshfly (20)\",\r\n spoiler: \"The Wailing Mother Wish\",\r\n killRequire: \"20\",\r\n wiki: \"Freshfly\"\r\n },\r\n slabFlySmall: {\r\n gameName: \"Scabfly\",\r\n databaseName: \"Slab Fly Small\",\r\n name: \"Scabfly (15)\",\r\n spoiler: \"The Slab\",\r\n killRequire: \"15\",\r\n wiki: \"Scabfly\"\r\n },\r\n slabFlyMid: {\r\n gameName: \"Guardfly\",\r\n databaseName: \"Slab Fly Mid\",\r\n name: \"Guardfly (10)\",\r\n spoiler: \"The Slab\",\r\n killRequire: \"10\",\r\n wiki: \"Guardfly\"\r\n },\r\n slabFlyLarge: {\r\n gameName: \"Wardenfly\",\r\n databaseName: \"Slab Fly Large\",\r\n name: \"Wardenfly (8)\",\r\n spoiler: \"The Slab\",\r\n killRequire: \"8\",\r\n wiki: \"Wardenfly\"\r\n },\r\n slabFlyBroodmother: {\r\n gameName: \"Broodmother\",\r\n databaseName: \"Slab Fly Broodmother\",\r\n name: \"Broodmother (1)\",\r\n spoiler: \"Grand Hunt wish\",\r\n killRequire: \"1\",\r\n wiki: \"Broodmother\"\r\n },\r\n peaksDrifter: {\r\n gameName: \"Driftlin\",\r\n databaseName: \"Peaks Drifter\",\r\n name: \"Driftlin (20)\",\r\n spoiler: \"Mount Fay\",\r\n killRequire: \"20\",\r\n wiki: \"Driftlin\"\r\n },\r\n crystalDrifter: {\r\n gameName: \"Mnemonid\",\r\n databaseName: \"Crystal Drifter\",\r\n name: \"Mnemonid (10)\",\r\n spoiler: \"Mount Fay\",\r\n killRequire: \"10\",\r\n wiki: \"Mnemonid\"\r\n },\r\n crystalDrifterGiant: {\r\n gameName: \"Mnemonord\",\r\n databaseName: \"Crystal Drifter Giant\",\r\n name: \"Mnemonord (3)\",\r\n spoiler: \"Mount Fay in Brightvein\",\r\n killRequire: \"3\",\r\n wiki: \"Mnemonord\"\r\n },\r\n weaverServitor: {\r\n gameName: \"Servitor Ignim\",\r\n databaseName: \"Weaver Servitor\",\r\n name: \"Servitor Ignim (8)\",\r\n spoiler: \"Weavenest Atla\",\r\n killRequire: \"8\",\r\n wiki: \"Servitor+Ignim\"\r\n },\r\n weaverServitorLarge: {\r\n gameName: \"Servitor Boran\",\r\n databaseName: \"Weaver Servitor Large\",\r\n name: \"Servitor Boran (5)\",\r\n spoiler: \"Mount Fay\",\r\n killRequire: \"5\",\r\n wiki: \"Servitor+Boran\"\r\n },\r\n lifebloodFly: {\r\n gameName: \"Winged Lifeseed\",\r\n databaseName: \"Lifeblood Fly\",\r\n name: \"Winged Lifeseed (8)\",\r\n spoiler: \"Wormways\",\r\n killRequire: \"8\",\r\n wiki: \"Winged+Lifeseed\"\r\n },\r\n boneWormBlueBlood: {\r\n gameName: \"Plasmid\",\r\n databaseName: \"Bone Worm BlueBlood\",\r\n name: \"Plasmid (15)\",\r\n spoiler: \"Wormways (Act 3)\",\r\n killRequire: \"15\",\r\n wiki: \"Plasmid\"\r\n },\r\n boneWormBlueTurret: {\r\n gameName: \"Plasmidas\",\r\n databaseName: \"Bone Worm BlueTurret\",\r\n name: \"Plasmidas (6)\",\r\n spoiler: \"Wormways (Act 3)\",\r\n killRequire: \"6\",\r\n wiki: \"Plasmidas\"\r\n },\r\n blueAssistant: {\r\n gameName: \"Plasmified Zango\",\r\n databaseName: \"Blue Assistant\",\r\n name: \"Plasmified Zango (1)\",\r\n spoiler: \"Wormways (Act 3)\",\r\n killRequire: \"1\",\r\n wiki: \"Plasmified+Zango\"\r\n },\r\n lilypadFly: {\r\n gameName: \"Leaf Glider\",\r\n databaseName: \"Lilypad Fly\",\r\n name: \"Leaf Glider (12)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"12\",\r\n wiki: \"Leaf+Glider\"\r\n },\r\n grassGoomba: {\r\n gameName: \"Leaf Roller\",\r\n databaseName: \"Grass Goomba\",\r\n name: \"Leaf Roller (10)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"10\",\r\n wiki: \"Leaf+Roller\"\r\n },\r\n hornetDragonfly: {\r\n gameName: \"Pendra\",\r\n databaseName: \"Hornet Dragonfly\",\r\n name: \"Pendra (10)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"10\",\r\n wiki: \"Pendra\"\r\n },\r\n dragonflyLarge: {\r\n gameName: \"Pendragor\",\r\n databaseName: \"Dragonfly Large\",\r\n name: \"Pendragor (10)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"10\",\r\n wiki: \"Pendragor\"\r\n },\r\n lilypadTrap: {\r\n gameName: \"Nuphar\",\r\n databaseName: \"Lilypad Trap\",\r\n name: \"Nuphar (6)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"6\",\r\n wiki: \"Nuphar\"\r\n },\r\n cloverstag: {\r\n gameName: \"Cloverstag\",\r\n databaseName: \"Cloverstag\",\r\n name: \"Cloverstag (6)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"6\",\r\n wiki: \"Cloverstag\"\r\n },\r\n cloverstagWhite: {\r\n gameName: \"Palestag\",\r\n databaseName: \"Cloverstag White\",\r\n name: \"Palestag (1)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"1\",\r\n wiki: \"Palestag\"\r\n },\r\n grasshopperChild: {\r\n gameName: \"Kindanir\",\r\n databaseName: \"Grasshopper Child\",\r\n name: \"Kindanir (10)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"10\",\r\n wiki: \"Kindanir\"\r\n },\r\n grasshopperSlasher: {\r\n gameName: \"Verdanir\",\r\n databaseName: \"Grasshopper Slasher\",\r\n name: \"Verdanir (10)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"10\",\r\n wiki: \"Verdanir\"\r\n },\r\n grasshopperFly: {\r\n gameName: \"Escalion\",\r\n databaseName: \"Grasshopper Fly\",\r\n name: \"Escalion (10)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"10\",\r\n wiki: \"Escalion\"\r\n },\r\n cloverDancer: {\r\n gameName: \"Clover Dancers\",\r\n databaseName: \"Clover Dancer\",\r\n name: \"Clover Dancers (1)\",\r\n spoiler: \"Lost Verdania\",\r\n killRequire: \"1\",\r\n wiki: \"Clover+Dancers\"\r\n },\r\n abyssCrawler: {\r\n gameName: \"Shadow Creeper\",\r\n databaseName: \"Abyss Crawler\",\r\n name: \"Shadow Creeper (16)\",\r\n spoiler: \"The Abyss\",\r\n killRequire: \"16\",\r\n wiki: \"Shadow+Creeper\"\r\n },\r\n abyssCrawlerLarge: {\r\n gameName: \"Shadow Charger\",\r\n databaseName: \"Abyss Crawler Large\",\r\n name: \"Shadow Charger (6)\",\r\n spoiler: \"The Abyss\",\r\n killRequire: \"6\",\r\n wiki: \"Shadow+Charger\"\r\n },\r\n gloomfly: {\r\n gameName: \"Gloomsac\",\r\n databaseName: \"Gloomfly\",\r\n name: \"Gloomsac (15)\",\r\n spoiler: \"The Abyss\",\r\n killRequire: \"15\",\r\n wiki: \"Gloomsac\"\r\n },\r\n gloomBeast: {\r\n gameName: \"Gargant Gloom\",\r\n databaseName: \"Gloom Beast\",\r\n name: \"Gargant Gloom (4)\",\r\n spoiler: \"The Abyss\",\r\n killRequire: \"4\",\r\n wiki: \"Gargant+Gloom\"\r\n },\r\n voidTendrils: {\r\n gameName: \"Void Tendrils\",\r\n databaseName: \"Void Tendrils\",\r\n name: \"Void Tendrils (1)\",\r\n spoiler: \"Weavenest Absolom, in the lower eastern section of the Abyss\",\r\n killRequire: \"1\",\r\n wiki: \"Void+Tendrils\"\r\n },\r\n blackThreadCore: {\r\n gameName: \"Void Mass\",\r\n databaseName: \"Black Thread Core\",\r\n name: \"Void Mass (8)\",\r\n spoiler: \"Around the map (Act 3)\",\r\n killRequire: \"8\",\r\n wiki: \"Void+Mass\"\r\n },\r\n whitePalaceFly: {\r\n gameName: \"Wingmould\",\r\n databaseName: \"White Palace Fly\",\r\n name: \"Wingmould (10)\",\r\n spoiler: \"Red Memory\",\r\n killRequire: \"10\",\r\n wiki: \"Wingmould\"\r\n },\r\n centipedeTrap: {\r\n gameName: \"Garpid\",\r\n databaseName: \"Centipede Trap\",\r\n name: \"Garpid (30)\",\r\n spoiler: \"Secret area above The Cradle\",\r\n killRequire: \"30\",\r\n wiki: \"Garpid\"\r\n },\r\n spikeLazyFlyer: {\r\n gameName: \"Imoba\",\r\n databaseName: \"Spike Lazy Flyer\",\r\n name: \"Imoba (4)\",\r\n spoiler: \"Secret area above The Cradle\",\r\n killRequire: \"4\",\r\n wiki: \"Imoba\"\r\n },\r\n surfaceScuttler: {\r\n gameName: \"Skrill\",\r\n databaseName: \"Surface Scuttler\",\r\n name: \"Skrill (10)\",\r\n spoiler: \"The ruins of The Cradle\",\r\n killRequire: \"10\",\r\n wiki: \"Skrill\"\r\n },\r\n giantCentipede: {\r\n gameName: \"Bell Eater\",\r\n databaseName: \"Giant Centipede\",\r\n name: \"Bell Eater (1)\",\r\n spoiler: \"Any Bellway Station in beginning of Act 3 \",\r\n killRequire: \"1\",\r\n wiki: \"Bell+Eater\"\r\n },\r\n giantFlea: {\r\n gameName: \"Huge Flea\",\r\n databaseName: \"Giant Flea\",\r\n name: \"Huge Flea (1)\",\r\n spoiler: \"Memorium\",\r\n killRequire: \"1\",\r\n wiki: \"Huge+Flea\"\r\n },\r\n garmond: {\r\n gameName: \"Lost Garmond\",\r\n databaseName: \"Garmond\",\r\n name: \"Lost Garmond (1)\",\r\n spoiler: \"Hero's Call wish\",\r\n killRequire: \"1\",\r\n wiki: \"Lost+Garmond\"\r\n },\r\n pinstressBoss: {\r\n gameName: \"Pinstress\",\r\n databaseName: \"Pinstress Boss\",\r\n name: \"Pinstress (1)\",\r\n spoiler: \"Fatal Resolve wish\",\r\n killRequire: \"1\",\r\n wiki: \"Pinstress\"\r\n },\r\n spinnerBoss: {\r\n gameName: \"Widow\",\r\n databaseName: \"Spinner Boss\",\r\n name: \"Widow (1)\",\r\n spoiler: \"Bellhart above the town\",\r\n killRequire: \"1\",\r\n wiki: \"Widow\"\r\n },\r\n firstWeaver: {\r\n gameName: \"First Sinner\",\r\n databaseName: \"First Weaver\",\r\n name: \"First Sinner (1)\",\r\n spoiler: \"the Slab, require Key of Apostate\",\r\n killRequire: \"1\",\r\n wiki: \"First+Sinner\"\r\n },\r\n phantom: {\r\n gameName: \"Phantom\",\r\n databaseName: \"Phantom\",\r\n name: \"Phantom (1)\",\r\n spoiler: \"Bilewater through The Mist in Sinner's Road\",\r\n killRequire: \"1\",\r\n wiki: \"Phantom\"\r\n },\r\n lace: {\r\n gameName: \"Lace\",\r\n databaseName: \"Lace\",\r\n name: \"Lace (2)\",\r\n spoiler: \"Deep Docks and the Cradle\",\r\n killRequire: \"2\",\r\n wiki: \"Lace\"\r\n },\r\n silkBoss: {\r\n gameName: \"Grand Mother Silk\",\r\n databaseName: \"Silk Boss\",\r\n name: \"Grand Mother Silk (1)\",\r\n spoiler: \"the Cradle\",\r\n killRequire: \"1\",\r\n wiki: \"Grand+Mother+Silk\"\r\n },\r\n lostLace: {\r\n gameName: \"Lost Lace\",\r\n databaseName: \"Lost Lace\",\r\n name: \"Lost Lace (1)\",\r\n spoiler: \"The Abyss, require Everbloom\",\r\n killRequire: \"1\",\r\n wiki: \"Lost+Lace\"\r\n }\r\n },\r\n },\r\n\r\n /* ################### Flea Save ################### */\r\n\r\n flea: {\r\n h2: \"Flea\",\r\n id: \"hk-flea\",\r\n description: `Flea that belong to Flea Caravan. Help them and the caravan will reward you. they dont count as part of the`,\r\n percent: 0,\r\n maxPercent: 30,\r\n entries: {\r\n SavedFlea_Bone_06: {\r\n name: \"#1 The Marrow\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#themarrow\"\r\n },\r\n SavedFlea_Dock_16: {\r\n name: \"#2 Deep Docks\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#deepdocks\"\r\n },\r\n SavedFlea_Bone_East_05: {\r\n name: \"#3 Deep Docks\",\r\n spoiler: \"Swift Step\",\r\n wiki: \"All+Lost+Flea+Locations#deepdocks\"\r\n },\r\n SavedFlea_Dock_03d: {\r\n name: \"#4 Deep Docks\",\r\n spoiler: \"Clawline\",\r\n wiki: \"All+Lost+Flea+Locations#deepdocks\"\r\n },\r\n SavedFlea_Ant_03: {\r\n name: \"#5 Hunter's March\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#huntersmarch\"\r\n },\r\n SavedFlea_Bone_East_17b: {\r\n name: \"#6 Far Fields\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#farfields\"\r\n },\r\n SavedFlea_Bone_East_10_Church: {\r\n name: \"#7 Far Fields\",\r\n spoiler: \"Require Drifter's Cloak and Cling Grip\",\r\n wiki: \"All+Lost+Flea+Locations#farfields\"\r\n },\r\n SavedFlea_Crawl_06: {\r\n name: \"#8 Wormways\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#wormways\"\r\n }, \r\n SavedFlea_Greymoor_15b: {\r\n name: \"#9 Greymoor\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#crawlake\"\r\n }, \r\n SavedFlea_Greymoor_06: {\r\n name: \"#10 Greymoor\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#greymoor\"\r\n }, \r\n CaravanLechReturnedToCaravan: {\r\n name: \"#11 Greymoor (Kratt)\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"Kratt\"\r\n }, \r\n SavedFlea_Belltown_04: {\r\n name: \"#12 Bellhart\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#bellhart\"\r\n }, \r\n SavedFlea_Shellwood_03: {\r\n name: \"#13 Shellwood\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#shellwood\"\r\n }, \r\n SavedFlea_Coral_35: {\r\n name: \"#14 Blasted Steps\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#blastedsteps\"\r\n }, \r\n SavedFlea_Dust_12: {\r\n name: \"#15 Sinner's Road\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#sinnersroad\"\r\n }, \r\n SavedFlea_Shadow_28: {\r\n name: \"#16 Bilewater\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#bilewater\"\r\n }, \r\n SavedFlea_Dust_09: {\r\n name: \"#17 Bilewater\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#bilewater\"\r\n }, \r\n SavedFlea_Shadow_10: {\r\n name: \"#18 Bilewater\",\r\n spoiler: \"Require Cling Grip\",\r\n wiki: \"All+Lost+Flea+Locations#bilewater\"\r\n }, \r\n SavedFlea_Under_23: {\r\n name: \"#19 Underworks\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#wispthicket\"\r\n }, \r\n SavedFlea_Under_21: {\r\n name: \"#20 Underworks\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#underworks\"\r\n }, \r\n SavedFlea_Song_14: {\r\n name: \"#21 Choral Chambers\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#choralchambers\"\r\n }, \r\n SavedFlea_Song_11: {\r\n name: \"#22 Choral Chambers\",\r\n spoiler: \"Drifter's Cloak (or needle-bounce)\",\r\n wiki: \"All+Lost+Flea+Locations#choralchambers\"\r\n }, \r\n SavedFlea_Library_09: {\r\n name: \"#23 Choral Chambers\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#songclave\"\r\n }, \r\n tamedGiantFlea: {\r\n name: \"#24 Memorium\",\r\n spoiler: \"Defeat the Huge Flea in the top\",\r\n wiki: \"All+Lost+Flea+Locations#memorium\"\r\n }, \r\n SavedFlea_Slab_Cell: {\r\n name: \"#25 The Slab\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#theslab\"\r\n }, \r\n SavedFlea_Slab_06: {\r\n name: \"#26 The Slab\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#theslab\"\r\n }, \r\n SavedFlea_Peak_05c: {\r\n name: \"#27 Mount Fay\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#mountfay\"\r\n }, \r\n SavedFlea_Coral_24: {\r\n name: \"#28 Sands of Karak\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#sandsofkarak\"\r\n }, \r\n MetTroupeHunterWild: {\r\n name: \"#29 Putrified Ducts (Vog)\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#putrifiedducts\"\r\n }, \r\n SavedFlea_Library_01: {\r\n name: \"#30 Whispering Vaults\",\r\n spoiler: \"Nothing required\",\r\n wiki: \"All+Lost+Flea+Locations#whisperingvaults\"\r\n },\r\n },\r\n },\r\n \r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n /********************************************************************************************************* */\r\n\r\n /* ################### Bosses ################### */\r\n\r\n /*bosses: {\r\n h2: \"Bosses\",\r\n id: \"hk-bosses\",\r\n description: `Each boss from this list provides 1% Game Completion. \r\n Note: There are many other bosses in the game. Only about ~half of the total bosses count directly towards % Game Completion stat. \r\n P1-P4 = difficulty level and which Pantheon a given boss unlocks.`,\r\n percent: 0,\r\n maxPercent: 14,\r\n entries: {\r\n // killedBigFly\r\n bossGruzMother: {\r\n name: \"P1 Gruz Mother\",\r\n spoiler: \"Forgotten Crossroads, lower right area\",\r\n id: \"Battle Scene\",\r\n sceneName: \"Crossroads_04\",\r\n wiki: \"Gruz_Mother\"\r\n },\r\n falseKnightDefeated: {\r\n name: \"P1 False Knight\",\r\n spoiler: \"Forgotten Crossroads, middle area map symbol\",\r\n wiki: \"False_Knight\"\r\n }, // \"Battle Scene\" - \"Crossroads_10\" ?\r\n hornet1Defeated: {\r\n name: \"P1 Hornet Protector\",\r\n spoiler: \"Greenpath, above Stag Station\",\r\n wiki: \"Hornet_Protector\"\r\n },\r\n defeatedDungDefender: {\r\n name: \"P1 Dung Defender\",\r\n spoiler: \"Royal Waterways, right area\",\r\n wiki: \"Dung_Defender\"\r\n },\r\n // killedMawlek\r\n bossBroodingMawlek: {\r\n name: \"P1 Brooding Mawlek\",\r\n spoiler: \"Forgotten Crossroads, use Mantis Claw\",\r\n id: \"Battle Scene\",\r\n sceneName: \"Crossroads_09\",\r\n wiki: \"Brooding_Mawlek\"\r\n },\r\n mageLordDefeated: {\r\n name: \"P2 Soul Master\",\r\n spoiler: \"City of Tears: Soul Sanctum\",\r\n wiki: \"Soul_Master\"\r\n },\r\n defeatedMantisLords: {\r\n name: \"P2 Mantis Lords\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n wiki: \"Mantis_Lords\"\r\n },\r\n // \"Battle Scene\" - \"Deepnest_32\" ?\r\n killedMimicSpider: {\r\n name: \"P2 Nosk\",\r\n spoiler: \"Deepnest, use Crystal Heart, left of Hot Spring\",\r\n wiki: \"Nosk\"\r\n },\r\n killedInfectedKnight: {\r\n name: \"P2 Broken Vessel\",\r\n spoiler: \"Ancient Basin, lower left, use Crystal Heart\",\r\n wiki: \"Broken_Vessel\"\r\n },\r\n collectorDefeated: {\r\n name: \"P3 The Collector\",\r\n spoiler: \"City of Tears: Tower of Love\",\r\n wiki: \"Collector\"\r\n },\r\n defeatedMegaJelly: {\r\n name: \"P3 Uumuu\",\r\n spoiler: \"Fog Canyon: Teacher's Archives\",\r\n wiki: \"Uumuu\"\r\n },\r\n hornetOutskirtsDefeated: {\r\n name: \"P3 Hornet Sentinel\",\r\n spoiler: \"Kingdom's Edge, requires Monarch Wings\",\r\n wiki: \"Hornet_Sentinel\"\r\n },\r\n // \"Battle Scene\" - \"Fungus3_23\" ?\r\n killedTraitorLord: {\r\n name: \"P4 Traitor Lord\",\r\n spoiler: \"Queen's Gardens, requires Shade Cloak\",\r\n wiki: \"Traitor_Lord\"\r\n },\r\n killedBlackKnight: {\r\n name: \"P4 Watcher Knights\",\r\n spoiler: \"City of Tears: Watcher's Spire\",\r\n wiki: \"Watcher_Knight\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Nail Arts ################### */\r\n\r\n /*nailArts: {\r\n h2: \"Nail Arts\",\r\n id: \"hk-nailarts\",\r\n description: \"Advanced weapon combat techniques. Each new technique learned provides 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n // this is correct - somehow Team Cherry switched the names here\r\n hasDashSlash: {\r\n name: \"Great Slash\",\r\n spoiler: \"Nailmaster Sheo: Greenpath\",\r\n wiki: \"Great_Slash\"\r\n },\r\n // this is correct - somehow Team Cherry switched the names here \r\n hasUpwardSlash: {\r\n name: \"Dash Slash\",\r\n spoiler: \"Nailmaster Oro: Kingdom's Edge, 800 Geo\",\r\n wiki: \"Dash_Slash\"\r\n },\r\n hasCyclone: {\r\n name: \"Cyclone Slash\",\r\n spoiler: \"Nailmaster Mato: Howling Cliffs\",\r\n wiki: \"Cyclone_Slash\"\r\n },\r\n },\r\n },*/\r\n\r\n\r\n /* ################ Dream Nail and Essence ################### */\r\n\r\n /*dreamNail: {\r\n h2: \"Dream Nail and Essence\",\r\n id: \"hk-dreamnail\",\r\n description: \"A special dream Ability. Can collect Essence and enter dreams. Each milestone here will provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n hasDreamNail: {\r\n name: \"Dream Nail Acquired\",\r\n spoiler: \"Resting Grounds\",\r\n wiki: \"Dream_Nail\"\r\n },\r\n dreamNailUpgraded: {\r\n name: \"Awoken Dream Nail\",\r\n spoiler: \"Seer: 1800 Essence\",\r\n wiki: \"Dream_Nail#Awoken_Dream_Nail\"\r\n },\r\n mothDeparted: {\r\n name: \"Hear the Seer's Final Words\",\r\n spoiler: \"Seer: 2400 Essence\",\r\n wiki: \"Seer\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Warrior Dreams ################### */\r\n\r\n /*warriorDreams: {\r\n h2: \"Warrior Dreams\",\r\n id: \"hk-warriordreams\",\r\n description: `Special kind of bosses in Hollow Knight, which provide Essence and 1% Game Completion after defeat. \r\n Note: The Essence must be collected before each boss will provide 1% Game Completion. Uncollected Essence will be marked as not completed.`,\r\n percent: 0,\r\n maxPercent: 7,\r\n entries: {\r\n aladarSlugDefeated: {\r\n name: \"P1 Gorb\",\r\n spoiler: \"Howling Cliffs, top middle area\",\r\n wiki: \"Gorb\"\r\n },\r\n xeroDefeated: {\r\n name: \"P2 Xero\",\r\n spoiler: \"Resting Grounds, below Crystal Peak drop\",\r\n wiki: \"Xero\"\r\n },\r\n mumCaterpillarDefeated: {\r\n name: \"P2 Marmu\",\r\n spoiler: \"Queen's Gardens, left of Stag Station\",\r\n wiki: \"Marmu\"\r\n },\r\n elderHuDefeated: {\r\n name: \"P3 Elder Hu\",\r\n spoiler: \"Fungal Wastes, above acid bridge\",\r\n wiki: \"Elder_Hu\"\r\n },\r\n galienDefeated: {\r\n name: \"P3 Galien\",\r\n spoiler: \"Deepnest, below Failed Tramway\",\r\n wiki: \"Galien\"\r\n },\r\n noEyesDefeated: {\r\n name: \"P4 No Eyes\",\r\n spoiler: \"Greenpath: Stone Sanctuary, requires Lumafly Lantern\",\r\n wiki: \"No_Eyes\"\r\n },\r\n markothDefeated: {\r\n name: \"P4 Markoth\",\r\n spoiler: \"Kingdom's Edge, requires Shade Cloak\",\r\n wiki: \"Markoth\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Dreamers ################### */\r\n\r\n /*dreamers: {\r\n h2: \"Dreamers\",\r\n id: \"hk-dreamers\",\r\n description: \"Each Dreamer will provide 1% Game Completion.\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n lurienDefeated: {\r\n name: \"Lurien the Watcher\",\r\n spoiler: \"City of Tears: Watcher's Spire\",\r\n wiki: \"Lurien\"\r\n },\r\n monomonDefeated: {\r\n name: \"Monomon the Teacher\",\r\n spoiler: \"Fog Canyon: Teacher's Archives\",\r\n wiki: \"Monomon\"\r\n },\r\n hegemolDefeated: {\r\n name: \"Herrah the Beast\",\r\n spoiler: \"Deepnest: Distant Village\",\r\n wiki: \"Herrah\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Colosseum of Fools ################### */\r\n\r\n /*colosseum: {\r\n h2: \"Colosseum of Fools\",\r\n id: \"hk-colosseum\",\r\n description: \"Completing each Trial in the Colosseum provides 1% Game Completion. This section sums up the original 100% Game Completion Percentage from Hollow Knight in 2017 (without Content Packs).\",\r\n percent: 0,\r\n maxPercent: 3,\r\n entries: {\r\n colosseumBronzeCompleted: {\r\n name: \"Trial of the Warrior\",\r\n spoiler: \"Kingdom's Edge: top area, Little Fool: 100 Geo\",\r\n wiki: \"Trial_of_the_Warrior\"\r\n },\r\n colosseumSilverCompleted: {\r\n name: \"Trial of the Conqueror\",\r\n spoiler: \"Little Fool: 450 Geo + Warrior completed\",\r\n wiki: \"Trial_of_the_Conqueror\"\r\n },\r\n colosseumGoldCompleted: {\r\n name: \"Trial of the Fool\",\r\n spoiler: \"Little Fool: 800 Geo + Conqueror completed\",\r\n wiki: \"Trial_of_the_Fool\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Grimm Troupe Content Pack ################### */\r\n\r\n /*grimmTroupe: {\r\n h2: \"Grimm Troupe Content Pack\",\r\n id: \"hk-grimmtroupe\",\r\n description: `The first Content Pack. Released October 26th, 2017 (1.2.1.0 Game Update). It added additional +6% to max Game Completion Percentage. \r\n Note: It requires making a choice, but no matter what you will choose, you will still get the same +1%.`,\r\n percent: 0,\r\n maxPercent: 6,\r\n entries: {\r\n gotCharm_37: {\r\n name: \"Charm #37 Sprintmaster\",\r\n spoiler: \"Sly: 400 Geo + Shopkeeper's Key\",\r\n wiki: \"Sprintmaster\"\r\n },\r\n gotCharm_38: {\r\n name: \"Charm #38 Dreamshield\",\r\n spoiler: \"Resting Grounds, go left below Seer\",\r\n wiki: \"Dreamshield\"\r\n },\r\n gotCharm_39: {\r\n name: \"Charm #39 Weaversong\",\r\n spoiler: \"Deepnest: Weaver's Den\",\r\n wiki: \"Weaversong\"\r\n },\r\n gotCharm_40: {\r\n name: \"Charm #40 Grimmchild or Carefree Melody\",\r\n nameDefault: \"Charm #40 Grimmchild or Carefree Melody\",\r\n nameGrimmchildP1: \"Charm #40: Grimmchild (Phase 1)\",\r\n nameGrimmchildP2: \"Charm #40: Grimmchild (Phase 2)\",\r\n nameGrimmchildP3: \"Charm #40: Grimmchild (Phase 3)\",\r\n nameGrimmchildP4: \"Charm #40: Grimmchild (Phase 4)\",\r\n nameCarefreeMelody: \"Charm #40: Carefree Melody\",\r\n spoiler: \"Dirtmouth\",\r\n spoilerDefault: \"Dirtmouth\",\r\n spoilerGrimmchildP1: \"Collect 3 flames\",\r\n spoilerGrimmchildP2: \"Collect 3 flames\",\r\n spoilerGrimmchildP3: \"Collect 3 flames\",\r\n spoilerGrimmchildP4: \"Completed the Ritual\",\r\n spoilerCarefreeMelody: \"Banished Grimm Troupe\",\r\n wiki: \"Grimmchild\",\r\n wikiDefault: \"Grimmchild\",\r\n wikiGrimmchild: \"Grimmchild\",\r\n wikiCarefreeMelody: \"Carefree_Melody\"\r\n },\r\n killedGrimm: {\r\n name: \"P3 Troupe Master Grimm\",\r\n spoiler: \"Dirtmouth, collect 6 flames\",\r\n wiki: \"Grimm\"\r\n },\r\n grimmChildLevel: {\r\n name: \"Complete Ritual or Banish Troupe\",\r\n nameDefault: \"Complete Ritual or Banish Troupe\",\r\n nameNightmareKing: \"Grimm Troupe Choice: Nightmare King\",\r\n nameBanishment: \"Grimm Troupe Choice: Banishment\",\r\n spoiler: \"One choice per save file: Dirtmouth or Howling Cliffs\",\r\n spoilerDefault: \"One choice per save file: Dirtmouth or Howling Cliffs\",\r\n spoilerNightmareKing: \"Completed the Ritual\",\r\n spoilerBanishment: \"Banished Grimm Troupe\",\r\n wiki: \"Grimm_Troupe_(Quest)\",\r\n wikiDefault: \"Grimm_Troupe_(Quest)\",\r\n wikiNightmareKing: \"Nightmare_King_Grimm\",\r\n wikiBanishment: \"Nymm\",\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Lifeblood Content Pack ################### */\r\n\r\n /*lifeblood: {\r\n h2: \"Lifeblood Content Pack\",\r\n id: \"hk-lifeblood\",\r\n description: `The second Content Pack. Released April 20th, 2018 (1.3.1.5 Game Update). Among many quality changes, it added one new boss, which increased the max Game Completion Percentage by +1%.`,\r\n percent: 0,\r\n maxPercent: 1,\r\n entries: {\r\n killedHiveKnight: {\r\n name: \"P3 Hive Knight\",\r\n spoiler: \"The Hive, guards Hiveblood charm\",\r\n wiki: \"Hive_Knight\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Godmaster Content Pack ################### */\r\n\r\n /*godmaster: {\r\n h2: \"Godmaster Content Pack\",\r\n id: \"hk-godmaster\",\r\n description: `The third Content Pack. Released August 23rd, 2018 (1.4.2.4 Game Update). It added additional +5% to max Game Completion Percentage (up to a total of 112%).`,\r\n percent: 0,\r\n maxPercent: 5,\r\n entries: {\r\n hasGodfinder: {\r\n name: \"Godtuner\",\r\n spoiler: \"Royal Waterways: Junk Pit, requires Simple Key\",\r\n wiki: \"Godtuner\"\r\n },\r\n // ########## Godmaster doors ##########\r\n pantheonMaster: {\r\n name: \"P1 Pantheon of the Master\",\r\n spoiler: \"Godhome: defeat P1 bosses\",\r\n wiki: \"Pantheon_of_the_Master\",\r\n property: \"bossDoorStateTier1\"\r\n },\r\n pantheonArtist: {\r\n name: \"P2 Pantheon of the Artist\",\r\n spoiler: \"Godhome: defeat P2 bosses\",\r\n wiki: \"Pantheon_of_the_Artist\",\r\n property: \"bossDoorStateTier2\"\r\n },\r\n pantheonSage: {\r\n name: \"P3 Pantheon of the Sage\",\r\n spoiler: \"Godhome: defeat P3 bosses\",\r\n wiki: \"Pantheon_of_the_Sage\",\r\n property: \"bossDoorStateTier3\"\r\n },\r\n pantheonKnight: {\r\n name: \"P4 Pantheon of the Knight\",\r\n spoiler: \"Godhome: complete P1, P2 and P3\",\r\n wiki: \"Pantheon_of_the_Knight\",\r\n property: \"bossDoorStateTier4\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################ Essentials % -> Collectibles ################### */\r\n\r\n /*essentialsCollectibles: {\r\n h2: \"Game Completion % Essentials – Collectibles\",\r\n id: \"hk-essentials-collectibles\",\r\n description: \"Collectibles that don't count directly towards 112% Game Completion, but are required to achieve full 112%.\",\r\n entries: {\r\n grubsCollected: {\r\n name: \"Grubs Rescued\",\r\n spoiler: \"46 Grubs total\",\r\n max: 46,\r\n maxDefault: 46,\r\n wiki: \"Grub\"\r\n },\r\n grubRewards: {\r\n name: \"Grubfather Rewards Awarded\",\r\n spoiler: \"46 Rewards total\",\r\n max: 46,\r\n maxDefault: 46,\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n charmsOwned: {\r\n name: \"Charms Owned\",\r\n spoiler: \"40 Charms total, useful for Salubra Notches\",\r\n max: 40,\r\n maxDefault: 40,\r\n wiki: \"Category:Charms#List_of_Charms\"\r\n },\r\n dreamOrbs: {\r\n name: \"Essence Collected\",\r\n spoiler: \"Dream Nail (2400 for completion)\",\r\n max: 2400,\r\n maxDefault: 2400,\r\n wiki: \"Dream_Nail#Essence\"\r\n },\r\n hasLantern: {\r\n name: \"Lumafly Lantern\",\r\n spoiler: \"Sly: 1800 Geo\",\r\n wiki: \"Lumafly_Lantern\"\r\n },\r\n shopkeeperKey: {\r\n name: \"Shopkeeper's Key\",\r\n spoiler: \"Crystal Peak, below Quirrel location\",\r\n wiki: \"Shopkeeper's_Key\"\r\n },\r\n elegantKey: {\r\n name: \"Elegant Key\",\r\n spoiler: \"Sly: 800 Geo + Shopkeeper's Key\",\r\n wiki: \"Elegant_Key\"\r\n },\r\n loveKey: {\r\n name: \"Love Key\",\r\n spoiler: \"Queen's Gardens, near Fungal Wastes\",\r\n wiki: \"Love_Key\"\r\n },\r\n slySimpleKey: {\r\n name: \"Simple Key #1\",\r\n spoiler: \"Sly: 950 Geo\",\r\n wiki: \"Simple_Key\"\r\n },\r\n simpleKeyCityOfTears: {\r\n name: \"Simple Key #2\",\r\n spoiler: \"City of Tears, below left Stag Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_17\",\r\n wiki: \"Simple_Key#How_to_Acquire\"\r\n },\r\n simpleKeyAncientBasin: {\r\n name: \"Simple Key #3\",\r\n spoiler: \"Ancient Basin, below Broken Vessel\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Abyss_20\",\r\n wiki: \"Simple_Key#How_to_Acquire\"\r\n },\r\n gotLurkerKey: {\r\n name: \"Simple Key #4\",\r\n spoiler: \"Colosseum of Fools: Pale Lurker's Retreat\",\r\n wiki: \"Simple_Key#How_to_Acquire\"\r\n },\r\n paleOreAncientBasin: {\r\n name: \"Pale Ore #1\",\r\n spoiler: \"Ancient Basin, left of Tram Station\",\r\n id: \"Battle Scene Ore\",\r\n sceneName: \"Abyss_17\",\r\n wiki: \"Pale_Ore\"\r\n },\r\n paleOreSeer: {\r\n name: \"Pale Ore #2\",\r\n spoiler: \"Seer: 300 Essence\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreCrystalPeak: {\r\n name: \"Pale Ore #3\",\r\n spoiler: \"Top of Crystal Peak, use Monarch Wings\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Mines_34\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreDeepnest: {\r\n name: \"Pale Ore #4\",\r\n spoiler: \"Deepnest, Nosk reward\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Deepnest_32\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreGrubfather: {\r\n name: \"Pale Ore #5\",\r\n spoiler: \"Grubfather: 31 Grubs rescued\",\r\n id: \"Shiny Item Ore\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n paleOreColosseum: {\r\n name: \"Pale Ore #6\",\r\n spoiler: \"Colosseum of Fools: Trial of the Conqueror\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Room_Colosseum_Silver\",\r\n wiki: \"Pale_Ore#How_to_Acquire\"\r\n },\r\n hasTramPass: {\r\n name: \"Tram Pass\",\r\n spoiler: \"Deepnest: Failed Tramway\",\r\n wiki: \"Tram_Pass\"\r\n },\r\n gotQueenFragment: {\r\n name: \"White Fragment: Queen\",\r\n spoiler: \"White Lady: Queen's Gardens\",\r\n wiki: \"Kingsoul#How_to_Acquire\"\r\n },\r\n gotKingFragment: {\r\n name: \"White Fragment: King\",\r\n spoiler: \"Pale King: White Palace\",\r\n wiki: \"Kingsoul#How_to_Acquire\"\r\n },\r\n },\r\n grubsList: [\"Crossroads_35\", \"Crossroads_03\", \"Crossroads_05\", \"Crossroads_48\", \"Crossroads_31\", \"Fungus1_06\", \"Fungus1_07\", \"Fungus1_21\", \"Fungus1_28\", \"Fungus2_18\", \"Ruins1_05\", \"Mines_04\", \"Mines_03\", \"Mines_31\", \"Mines_19\", \"Ruins1_32\", \"RestingGrounds_10\", \"Ruins_House_01\", \"Mines_35\", \"Mines_16\", \"Waterways_04\", \"Waterways_13\", \"Abyss_19\", \"Abyss_17\", \"Mines_24\", \"Fungus1_13\", \"Fungus3_47\", \"Fungus3_10\", \"Fungus3_48\", \"Fungus3_22\", \"Ruins2_07\", \"Ruins2_11\", \"Ruins2_11\", \"Ruins2_11\", \"Deepnest_East_11\", \"Deepnest_East_14\", \"Fungus2_20\", \"Ruins2_03\", \"Deepnest_36\", \"Deepnest_03\", \"Deepnest_31\", \"Deepnest_39\", \"Deepnest_Spider_Town\", \"Waterways_14\", \"Hive_03\", \"Hive_04\"],\r\n },*/\r\n\r\n /* ################ Essentials % -> Stag Stations ################### */\r\n\r\n /*essentialsStagStations: {\r\n h2: \"Game Completion % Essentials – Stag Stations\",\r\n id: \"hk-essentials-stag-stations\",\r\n description: `Opened Stag Stations don't count directly towards 112% Game Completion, but are required to achieve full 112% by discovering the Stag Nest for the Vessel Fragment.`,\r\n entries: {\r\n openedTownBuilding: {\r\n name: \"Stag Station: Dirtmouth\",\r\n spoiler: \"Opened from inside after travelling\",\r\n wiki: \"Dirtmouth\"\r\n },\r\n openedCrossroads: {\r\n name: \"Stag Station: Forgotten Crossroads\",\r\n spoiler: \"50 Geo: Right middle-bottom area\",\r\n wiki: \"Forgotten_Crossroads\"\r\n },\r\n openedGreenpath: {\r\n name: \"Stag Station: Greenpath\",\r\n spoiler: \"140 Geo: Top middle area, below Hornet\",\r\n wiki: \"Greenpath\"\r\n },\r\n openedFungalWastes: {\r\n name: \"Stag Station: Queen's Station\",\r\n spoiler: \"120 Geo: Fungal Wastes, near Fog Canyon\",\r\n wiki: \"Fungal_Wastes#Sub-area:_Queen.27s_Station\"\r\n },\r\n openedRuins1: {\r\n name: \"Stag Station: City Storerooms\",\r\n spoiler: \"200 Geo: City of Tears, top left area\",\r\n wiki: \"City_of_Tears#City_Storerooms\"\r\n },\r\n openedRestingGrounds: {\r\n name: \"Stag Station: Resting Grounds\",\r\n spoiler: \"0 Geo: Right middle area, near Seer\",\r\n wiki: \"Resting_Grounds\"\r\n },\r\n openedRuins2: {\r\n name: \"Stag Station: King's Station\",\r\n spoiler: \"300 Geo: City of Tears, far right area\",\r\n wiki: \"City_of_Tears#Sub-area:_King.27s_Station\"\r\n },\r\n openedRoyalGardens: {\r\n name: \"Stag Station: Queen's Gardens\",\r\n spoiler: \"200 Geo: Middle area, near Traitor's Grave\",\r\n wiki: \"Queen's_Gardens\"\r\n },\r\n openedDeepnest: {\r\n name: \"Stag Station: Distant Village\",\r\n spoiler: \"250 Geo: Deepnest, far left area\",\r\n wiki: \"Deepnest#Sub-area:_Distant_Village\"\r\n },\r\n openedHiddenStation: {\r\n name: \"Stag Station: Hidden Station\",\r\n spoiler: \"300 Geo: Ancient Basin: Palace Grounds\",\r\n wiki: \"Ancient_Basin#Sub-Area:_Palace_Grounds\"\r\n },\r\n openedStagNest: {\r\n name: \"Stag Station: Stag Nest\",\r\n spoiler: \"Open all stations: Howling Cliffs, top area\",\r\n wiki: \"Howling_Cliffs#Sub-area:_Stag_Nest\"\r\n },\r\n stagStationsOpened: {\r\n name: \"Stag Stations Opened\",\r\n spoiler: \"11 Stag Stations total including Dirtmouth\",\r\n max: 11,\r\n maxDefault: 11,\r\n wiki: \"Fast_Travel_(Hollow_Knight)#Locations_and_Prices\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Essentials % -> World Interactions ################### */\r\n\r\n /*essentialsWorldInteractions: {\r\n h2: \"Game Completion % Essentials – World Interactions\",\r\n id: \"hk-essentials-world-interactions\",\r\n description: `Certain interactions the player can make with NPCs in the game or world objects which don't count directly towards 112% Game Completion, but are required to achieve full 112%.`,\r\n entries: {\r\n slyRescued: {\r\n name: \"Sly Rescued\",\r\n spoiler: \"Forgotten Crossroads, near Gruz Mother\",\r\n wiki: \"Sly\"\r\n },\r\n brettaRescued: {\r\n name: \"Bretta Rescued\",\r\n spoiler: \"Fungal Wastes, near Dashmaster charm statue\",\r\n wiki: \"Bretta\"\r\n },\r\n paidLegEater: {\r\n name: \"Paid to See Something Nice\",\r\n spoiler: \"Fungal Wastes, Leg Eater: 86 Geo\",\r\n wiki: \"Leg_Eater#In-game_events\"\r\n },\r\n gaveSlykey: {\r\n name: \"Shopkeeper's Key Returned to Sly\",\r\n spoiler: \"Dirtmouth, Sly's Shop\",\r\n wiki: \"Sly\"\r\n },\r\n mantisVillageFloorLever: {\r\n name: \"Mantis Village Floor Lever\",\r\n spoiler: \"Fungal Wastes, right of Mantis Claw\",\r\n id: \"Mantis Lever (1)\",\r\n sceneName: \"Fungus2_14\",\r\n wiki: \"Fungal_Wastes#Sub-area:_Mantis_Village\"\r\n },\r\n xunFlowerGiven: {\r\n name: \"Delicate Flower Accepted\",\r\n spoiler: \"Resting Grounds: listen to Grey Mourner\",\r\n wiki: \"Grey_Mourner#In-game_events\"\r\n },\r\n waterwaysAcidDrained: {\r\n name: \"Acid Drained\",\r\n spoiler: \"Royal Waterways, lever after Dung Defender\",\r\n wiki: \"Royal_Waterways#Sub-area:_Isma.27s_Grove\"\r\n },\r\n openedMageDoor_v2: {\r\n name: \"Elegant Door Unlocked\",\r\n spoiler: \"City of Tears: Soul Sanctum, requires Elegant Key\",\r\n wiki: \"Elegant_Key#Use\"\r\n },\r\n openedLoveDoor: {\r\n name: \"Tower of Love Door Unlocked\",\r\n spoiler: \"City of Tears, requires Love Key\",\r\n wiki: \"City_of_Tears#Sub-area:_Tower_of_Love\"\r\n },\r\n abyssGateOpened: {\r\n name: \"The Abyss Gate Opened\",\r\n spoiler: \"Ancient Basin, requires King's Brand\",\r\n wiki: \"Ancient_Basin#Description\"\r\n },\r\n blueVineDoor: {\r\n name: \"Lifeblood Door Opened\",\r\n spoiler: \"The Abyss, requires 14–15+ Lifeblood Masks\",\r\n wiki: \"Lifeblood_Core#How_to_Acquire\"\r\n },\r\n nightmareLanternLit: {\r\n name: \"Nightmare Lantern Lit\",\r\n spoiler: \"Howling Cliffs, corpse of a large bug\",\r\n wiki: \"Howling_Cliffs#Nightmare_Lantern_Chamber\"\r\n },\r\n paleLurkersRetreat: {\r\n name: \"Pale Lurker's Retreat\",\r\n spoiler: \"Colosseum of Fools, Room above Bench, break wall\",\r\n id: \"Breakable Wall_Silhouette\",\r\n sceneName: \"Room_Colosseum_Spectate\",\r\n wiki: \"Colosseum_of_Fools#Description\"\r\n },\r\n godseekerUnlocked: {\r\n name: \"Godseeker Cocoon Unlocked\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n wiki: \"Royal_Waterways#Sub-area:_Junk_Pit\"\r\n },\r\n fountainGeo: {\r\n name: \"Geo in Fountain\",\r\n spoiler: \"Ancient Basin: 3000 Geo maximum\",\r\n max: 3000,\r\n maxDefault: 3000,\r\n wiki: \"Ancient_Basin#Description\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Essentials % -> Bosses ################### */\r\n\r\n /*essentialsBosses: {\r\n h2: \"Game Completion % Essentials – Bosses\",\r\n id: \"hk-essentials-bosses\",\r\n description: \"Bosses that don't count directly towards 112% Game Completion, but are required to defeat to achieve full 112%.\",\r\n entries: {\r\n killedMegaMossCharger: {\r\n name: \"P1 Massive Moss Charger\",\r\n spoiler: \"Greenpath, near Fog Canyon\",\r\n wiki: \"Massive_Moss_Charger\"\r\n },\r\n pantheonSoulWarrior: {\r\n name: \"P1 Soul Warrior\",\r\n spoiler: \"City of Tears: Soul Sanctum\",\r\n id: \"Battle Scene v2\",\r\n sceneName: \"Ruins1_23\",\r\n wiki: \"Soul_Warrior#Location\"\r\n },\r\n shadeSoulWarrior: {\r\n name: \"Shade Soul Warrior\",\r\n spoiler: \"City of Tears: Soul Sanctum, use Elegant Key\",\r\n id: \"Battle Scene v2\",\r\n sceneName: \"Ruins1_31\",\r\n wiki: \"Shade_Soul#How_to_Acquire\"\r\n },\r\n pantheonCrystalGuardian: {\r\n name: \"P2 Crystal Guardian\",\r\n spoiler: \"Crystal Peak, guards Central Bench\",\r\n id: \"Mega Zombie Beam Miner (1)\",\r\n sceneName: \"Mines_18\",\r\n wiki: \"Crystal_Guardian\"\r\n },\r\n killedBigBuzzer: {\r\n name: \"Vengefly King\",\r\n spoiler: \"Colosseum of Fools: Trial of the Warrior, Greenpath\",\r\n wiki: \"Vengefly_King\"\r\n },\r\n killedOblobble: {\r\n name: \"P2 Oblobble\",\r\n spoiler: \"Colosseum of Fools: Trial of the Conqueror\",\r\n wiki: \"Oblobbles\"\r\n },\r\n killedLobsterLancer: {\r\n name: \"God Tamer\",\r\n spoiler: \"Colosseum of Fools: Trial of the Fool\",\r\n wiki: \"God_Tamer\"\r\n },\r\n killedFlukeMother: {\r\n name: \"P2 Flukemarm\",\r\n spoiler: \"Royal Waterways, requires Desolate Dive\",\r\n wiki: \"Flukemarm\"\r\n },\r\n pantheonEnragedGuardian: {\r\n name: \"P4 Enraged Guardian\",\r\n spoiler: \"Crystal Peak, requires Monarch Wings\",\r\n id: \"Zombie Beam Miner Rematch\",\r\n sceneName: \"Mines_32\",\r\n wiki: \"Enraged_Guardian\"\r\n },\r\n killedNailBros: {\r\n name: \"Nailmasters Oro & Mato\",\r\n spoiler: \"Godhome: Pantheon of the Master\",\r\n wiki: \"Brothers_Oro_%26_Mato\"\r\n },\r\n killedPaintmaster: {\r\n name: \"Paintmaster Sheo\",\r\n spoiler: \"Godhome: Pantheon of the Artist\",\r\n wiki: \"Paintmaster_Sheo\"\r\n },\r\n killedNailsage: {\r\n name: \"Great Nailsage Sly\",\r\n spoiler: \"Godhome: Pantheon of the Sage\",\r\n wiki: \"Great_Nailsage_Sly\"\r\n },\r\n killedHollowKnightPrime: {\r\n name: \"Pure Vessel\",\r\n spoiler: \"Godhome: Pantheon of the Knight\",\r\n wiki: \"Pure_Vessel\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> Collectibles ################### */\r\n\r\n /*achievementsCollectibles: {\r\n h2: \"Achievements Essentials – Collectibles\",\r\n id: \"hk-achievements-collectibles\",\r\n description: `Collectibles important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,\r\n entries: {\r\n hasMap: {\r\n name: \"Inventory Map\",\r\n spoiler: \"First map bought from Cornifer or Iselda\",\r\n wiki: \"Map_and_Quill\"\r\n },\r\n hasJournal: {\r\n name: \"Hunter's Journal\",\r\n spoiler: \"Greenpath: Hunter, above Stone Sanctuary\",\r\n wiki: \"Hunter's_Journal\"\r\n },\r\n hasHuntersMark: {\r\n name: \"Hunter's Mark\",\r\n spoiler: \"Greenpath: Hunter, complete base 146 Hunter Notes\",\r\n wiki: \"Hunter's_Mark\"\r\n },\r\n killsBigBuzzer: {\r\n name: \"Vengefly King Journal Note\",\r\n spoiler: \"Colosseum: Trial of the Warrior\",\r\n wiki: \"Vengefly_King\"\r\n },\r\n salubraBlessing: {\r\n name: \"Salubra's Blessing\",\r\n spoiler: \"Salubra: 800 Geo + all 40 Charms Owned\",\r\n wiki: \"Salubra's_Blessing\"\r\n },\r\n gotShadeCharm: {\r\n name: \"Void Heart\",\r\n spoiler: \"Equip Kingsoul Charm and find Birthplace\",\r\n wiki: \"Void_Heart\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> Maps ################### */\r\n\r\n /*achievementsMaps: {\r\n h2: \"Achievements Essentials – Maps\",\r\n id: \"hk-achievements-maps\",\r\n description: `Acquired maps are important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,\r\n entries: {\r\n mapCrossroads: {\r\n name: \"Map: Forgotten Crossroads\",\r\n spoiler: \"30/40 Geo: below Gruzzer area\",\r\n wiki: \"Forgotten_Crossroads\"\r\n },\r\n mapGreenpath: {\r\n name: \"Map: Greenpath\",\r\n spoiler: \"60/80 Geo: just below Greenpath entrance\",\r\n wiki: \"Greenpath\"\r\n },\r\n mapFungalWastes: {\r\n name: \"Map: Fungal Wastes\",\r\n spoiler: \"75/100 Geo: right of Queen's Station\",\r\n wiki: \"Fungal_Wastes\"\r\n },\r\n mapCliffs: {\r\n name: \"Map: Howling Cliffs\",\r\n spoiler: \"75/100 Geo: left middle area, near Journal\",\r\n wiki: \"Howling_Cliffs\"\r\n },\r\n mapCity: {\r\n name: \"Map: City of Tears\",\r\n spoiler: \"90/120 Geo: left of Soul Sanctum\",\r\n wiki: \"City_of_Tears\"\r\n },\r\n mapMines: {\r\n name: \"Map: Crystal Peak\",\r\n spoiler: \"120/150 Geo: top left area\",\r\n wiki: \"Crystal_Peak\"\r\n },\r\n mapWaterways: {\r\n name: \"Map: Royal Waterways\",\r\n spoiler: \"75/100 Geo: far left area, near Fungal\",\r\n wiki: \"Royal_Waterways\"\r\n },\r\n mapRestingGrounds: {\r\n name: \"Map: Resting Grounds\",\r\n spoiler: \"75 Geo: Iselda's Shop\",\r\n wiki: \"Resting_Grounds\"\r\n },\r\n mapAbyss: {\r\n name: \"Map: Ancient Basin\",\r\n spoiler: \"112/150 Geo: center area, near fountain\",\r\n wiki: \"Ancient_Basin\"\r\n },\r\n mapOutskirts: {\r\n name: \"Map: Kingdom's Edge\",\r\n spoiler: \"112/150 Geo: left bottom area, inside pipe\",\r\n wiki: \"Kingdom's_Edge\"\r\n },\r\n mapFogCanyon: {\r\n name: \"Map: Fog Canyon\",\r\n spoiler: \"150/200 Geo: above Teacher's Archives\",\r\n wiki: \"Fog_Canyon\"\r\n },\r\n mapRoyalGardens: {\r\n name: \"Map: Queen's Gardens\",\r\n spoiler: \"150/200 Geo: below Fog Canyon entrance\",\r\n wiki: \"Queen's_Gardens\"\r\n },\r\n mapDeepnest: {\r\n name: \"Map: Deepnest\",\r\n spoiler: \"38/50 Geo: near both Fungal Wastes entrances\",\r\n wiki: \"Deepnest\"\r\n },\r\n areaMaps: {\r\n name: \"Area Maps\",\r\n spoiler: \"Cornifer and Iselda, 13 Area Maps total\",\r\n max: 13,\r\n maxDefault: 13,\r\n wiki: \"Map_and_Quill#Maps\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> World Interactions ################### */\r\n\r\n /*achievementsWorldInteractions: {\r\n h2: \"Achievements Essentials – World Interactions\",\r\n id: \"hk-achievements-world-interactions\",\r\n description: `Certain interactions the player can make with NPCs in the game or world objects important for unlocking achievements. They don't count or matter towards 112% Game Completion. This section includes some choices that the player can make in the game.`,\r\n entries: {\r\n quirrelEpilogueCompleted: {\r\n name: \"Quirrel: Witness\",\r\n spoiler: \"Blue Lake: after defeating Monomon the Teacher\",\r\n wiki: \"Quirrel\"\r\n },\r\n xunRewardGiven: {\r\n name: \"Grey Mourner: Solace\",\r\n spoiler: \"Resting Grounds: Complete Delicate Flower quest\",\r\n wiki: \"Grey_Mourner\"\r\n },\r\n zoteStatus: {\r\n id: \"zoteStatus\",\r\n name: \"Zote Status\",\r\n nameDefault: \"Zote Status\",\r\n nameNeglect: \"Zote Choice: Neglect\",\r\n nameRivalry: \"Zote Choice: Rivalry\",\r\n nameTrappedVengefly: \"Zote Status: Vengefly\",\r\n nameNotRescuedVengefly: \"Zote Status: Greenpath\",\r\n nameTrappedDeepnest: \"Zote Status: Deepnest\",\r\n nameColosseum: \"Zote Status: Colosseum of Fools\",\r\n spoiler: \"One achievement per save file\",\r\n spoilerDefault: \"One achievement per save file\",\r\n spoilerNeglect: \"Left Zote to die\",\r\n spoilerRivalry: \"Defeated Zote in the Colosseum of Fools\",\r\n spoilerTrappedVengefly: \"Greenpath, defeat Vengefly King\",\r\n spoilerNotRescuedVengefly: \"Check what happened with Zote\",\r\n spoilerTrappedDeepnest: \"Deepnest, free from cobwebs\",\r\n spoilerColosseum: \"Trial of the Warrior\",\r\n wiki: \"Zote\"\r\n },\r\n nailsmithStatus: {\r\n id: \"nailsmithStatus\",\r\n name: \"Nailsmith Status\",\r\n nameDefault: \"Nailsmith Status\",\r\n nameHappyCouple: \"Nailsmith Choice: Happy Couple\",\r\n namePurity: \"Nailsmith Choice: Purity\",\r\n nameSheoHutWaiting: \"Nailsmith Status: Sheo\",\r\n nameUpgradeNail: \"Nailsmith Status: Waiting\",\r\n spoiler: \"One achievement per save file\",\r\n spoilerDefault: \"One achievement per save file\",\r\n spoilerHappyCouple: \"Found a new calling\",\r\n spoilerPurity: \"Slain with Pure Nail\",\r\n spoilerSheoHutWaiting: \"Waiting at Sheo's Hut\",\r\n spoilerUpgradeNail: \"Upgrade Nail to Pure Nail\",\r\n wiki: \"Nailsmith\"\r\n },\r\n mrMushroomState1: {\r\n name: \"Mr Mushroom #1\",\r\n spoiler: \"Fungal Wastes, near Cornifer\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 2\r\n },\r\n mrMushroomState2: {\r\n name: \"Mr Mushroom #2\",\r\n spoiler: \"Kingdom's Edge, near Isma's Grove\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 3\r\n },\r\n mrMushroomState3: {\r\n name: \"Mr Mushroom #3\",\r\n spoiler: \"Deepnest, near Galien\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 4\r\n },\r\n mrMushroomState4: {\r\n name: \"Mr Mushroom #4\",\r\n spoiler: \"Howling Cliffs, near Nailmaster Mato\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 5\r\n },\r\n mrMushroomState5: {\r\n name: \"Mr Mushroom #5\",\r\n spoiler: \"Ancient Basin, near Monarch Wings\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 6\r\n },\r\n mrMushroomState6: {\r\n name: \"Mr Mushroom #6\",\r\n spoiler: \"Fog Canyon, near Overgrown Mound\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 7\r\n },\r\n mrMushroomState7: {\r\n name: \"Mr Mushroom #7\",\r\n spoiler: \"King's Pass, game starting location\",\r\n wiki: \"Mister_Mushroom\",\r\n state: 8\r\n },\r\n pantheonHallownest: {\r\n name: \"P5 Embrace the Void\",\r\n spoiler: \"Godhome: Pantheon of Hallownest\",\r\n wiki: \"Pantheon_of_Hallownest\"\r\n },\r\n /* \r\n Mr Mushroom data\r\n case SplitName.MrMushroom1: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 2; break;\r\n case SplitName.MrMushroom2: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 3; break;\r\n case SplitName.MrMushroom3: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 4; break;\r\n case SplitName.MrMushroom4: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 5; break;\r\n case SplitName.MrMushroom5: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 6; break;\r\n case SplitName.MrMushroom6: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 7; break;\r\n case SplitName.MrMushroom7: shouldSplit = mem.PlayerData(Offset.mrMushroomState) == 8; break;\r\n \r\n \"mrMushroomState\": 4, < this is the current location of Mr Mushroom (Howling Cliffs)\r\n \r\n 1. Spawn of self, their minds unite, (Fungal Wastes)\r\n 2. Aside the source of acid blight, (Kingdom's Edge, near Isma's Grove)\r\n 3. Aglow in darkest, winding depths, (Deepnest, near Galien)\r\n 4. Winds all howl above fossilstone steps, (Howling Cliffs)\r\n 5. Monarchflys in air set still, (Ancient Basin, near the Monarch Wings location)\r\n 6. To Root's domain and snail once shrill, (Fog Canyon, near Overgrown Mound)\r\n 7. Path of Wyrm, at new lands entered, (King's Pass)\r\n 8. There journeys end. The kingdom ventured.\r\n */\r\n /*},\r\n },*/\r\n\r\n /* ################ Achievements Essentials -> Bosses ################### */\r\n\r\n /*achievementsBosses: {\r\n h2: \"Achievements Essentials – Bosses\",\r\n id: \"hk-achievements-bosses\",\r\n description: `Bosses important for unlocking achievements. They don't count or matter towards 112% Game Completion.`,\r\n entries: {\r\n falseKnightDreamDefeated: {\r\n name: \"Failed Champion\",\r\n spoiler: \"Forgotten Crossroads, near False Knight\",\r\n wiki: \"Failed_Champion\"\r\n },\r\n mageLordDreamDefeated: {\r\n name: \"Soul Tyrant\",\r\n spoiler: \"City of Tears: Soul Sanctum, near Soul Master\",\r\n wiki: \"Soul_Tyrant\"\r\n },\r\n infectedKnightDreamDefeated: {\r\n name: \"Lost Kin\",\r\n spoiler: \"Ancient Basin, Broken Vessel location\",\r\n wiki: \"Lost_Kin\"\r\n },\r\n whiteDefenderDefeated: {\r\n name: \"White Defender\",\r\n spoiler: \"Royal Waterways, Dung Defender, use Desolate Dive\",\r\n wiki: \"White_Defender\"\r\n },\r\n greyPrinceDefeated: {\r\n name: \"Grey Prince Zote\",\r\n spoiler: \"Dirtmouth: Bretta's Room (per save choice)\",\r\n wiki: \"Grey_Prince_Zote\"\r\n },\r\n killedHollowKnight: {\r\n name: \"Hollow Knight\",\r\n spoiler: \"Forgotten Crossroads: Black Egg Temple\",\r\n wiki: \"Hollow_Knight\"\r\n },\r\n \r\n //Absolute Radiance (for P5, achievements)\r\n //Sisters of Battle (for P5, achievements)\r\n //Winged Nosk (for P5, achievements)\r\n \r\n killedFinalBoss: {\r\n name: \"The Radiance\",\r\n spoiler: \"Requires Void Heart & Dream Nail Hollow Knight\",\r\n wiki: \"Radiance\"\r\n },\r\n },\r\n },*/\r\n\r\n \r\n /* ################ Optional Journal Entries ################### */\r\n\r\n /*huntersJournalOptional: {\r\n h2: \"Optional Journal Entries\",\r\n id: \"hk-journal-optional\",\r\n description: \"The remaining Hunter's Journal entries which don't count for Hunter's Mark and Keen/True Hunter achievements. Note: 6 entries can be permanently unobtainable, depending on your choices in the save file (Grey Prince Zote, all 3 Zotelings, Grimmkin Nightmare and Nightmare King).\",\r\n entries: {\r\n HunterMark: {\r\n name: \"Hunter's Mark (1)\",\r\n nameDefault: \"Hunter's Mark\",\r\n spoiler: \"Greenpath: Hunter, complete base 146 Hunter Notes\",\r\n wiki: \"Hunter's_Mark\"\r\n },\r\n MenderBug: {\r\n name: \"Menderbug (1)\",\r\n nameDefault: \"Menderbug\",\r\n spoiler: \"Forgotten Crossroads: destroy sign\",\r\n wiki: \"Menderbug\"\r\n },\r\n Zote: {\r\n name: \"Zote (1)\",\r\n nameDefault: \"Zote\",\r\n spoiler: \"Colosseum: Trial of the Warrior or The Eternal Ordeal\",\r\n wiki: \"Zote\"\r\n },\r\n HollowKnight: {\r\n name: \"Hollow Knight (1)\",\r\n nameDefault: \"Hollow Knight\",\r\n spoiler: \"Forgotten Crossroads: Black Egg Temple\",\r\n wiki: \"Hollow_Knight\"\r\n },\r\n FinalBoss: {\r\n name: \"The Radiance (1)\",\r\n nameDefault: \"The Radiance\",\r\n spoiler: \"Requires Void Heart & Dream Nail Hollow Knight\",\r\n wiki: \"Radiance\"\r\n },\r\n WhiteDefender: {\r\n name: \"White Defender (1)\",\r\n nameDefault: \"White Defender\",\r\n spoiler: \"Royal Waterways: Dung Defender, Desolate Dive\",\r\n wiki: \"White_Defender\"\r\n },\r\n GreyPrince: {\r\n name: \"Grey Prince Zote (1)\",\r\n nameDefault: \"Grey Prince Zote\",\r\n spoiler: \"Dirtmouth: Bretta's Room (per save choice)\",\r\n wiki: \"Grey_Prince_Zote\"\r\n },\r\n ZotelingBalloon: {\r\n name: \"Volatile Zoteling (1)\",\r\n nameDefault: \"Volatile Zoteling\",\r\n spoiler: \"Only from Grey Prince Zote, Battle 3+\",\r\n wiki: \"Volatile_Zoteling\"\r\n },\r\n ZotelingHopper: {\r\n name: \"Hopping Zoteling (1)\",\r\n nameDefault: \"Hopping Zoteling\",\r\n spoiler: \"Only from Grey Prince Zote, Battle 2+\",\r\n wiki: \"Hopping_Zoteling\"\r\n },\r\n ZotelingBuzzer: {\r\n name: \"Winged Zoteling (1)\",\r\n nameDefault: \"Winged Zoteling\",\r\n spoiler: \"Only from Grey Prince Zote, Battle 1+\",\r\n wiki: \"Winged_Zoteling\"\r\n },\r\n FlameBearerSmall: {\r\n name: \"Grimmkin Novice (3)\",\r\n nameDefault: \"Grimmkin Novice\",\r\n spoiler: \"Greenpath, Crystal Peak, City of Tears\",\r\n wiki: \"Grimmkin_Novice\"\r\n },\r\n FlameBearerMed: {\r\n name: \"Grimmkin Master (4)\",\r\n nameDefault: \"Grimmkin Master\",\r\n spoiler: \"King's Pass, Resting Grounds, Kingdom's Edge\",\r\n wiki: \"Grimmkin_Master\"\r\n },\r\n FlameBearerLarge: {\r\n name: \"Grimmkin Nightmare (5)\",\r\n nameDefault: \"Grimmkin Nightmare\",\r\n spoiler: \"Fungal Core, Royal Waterways, Hive\",\r\n wiki: \"Grimmkin_Nightmare\"\r\n },\r\n Grimm: {\r\n name: \"Troupe Master Grimm (1)\",\r\n nameDefault: \"Troupe Master Grimm\",\r\n spoiler: \"Dirtmouth: collect 6 flames\",\r\n wiki: \"Grimm\"\r\n },\r\n NightmareGrimm: {\r\n name: \"Nightmare King (1)\",\r\n nameDefault: \"Nightmare King\",\r\n spoiler: \"Dirtmouth: collect 9 flames\",\r\n wiki: \"Nightmare_King\"\r\n },\r\n BindingSeal: {\r\n name: \"Seal of Binding (1)\",\r\n nameDefault: \"Seal of Binding\",\r\n spoiler: \"White Palace: Path of Pain completion\",\r\n wiki: \"Seal_of_Binding\"\r\n },\r\n NailBros: {\r\n name: \"Nailmasters Oro & Mato (1)\",\r\n nameDefault: \"Nailmasters Oro & Mato\",\r\n spoiler: \"Godhome: Pantheon of the Master\",\r\n wiki: \"Brothers_Oro_%26_Mato\"\r\n },\r\n Paintmaster: {\r\n name: \"Paintmaster Sheo (1)\",\r\n nameDefault: \"Paintmaster Sheo\",\r\n spoiler: \"Godhome: Pantheon of the Artist\",\r\n wiki: \"Paintmaster_Sheo\"\r\n },\r\n Nailsage: {\r\n name: \"Great Nailsage Sly (1)\",\r\n nameDefault: \"Great Nailsage Sly\",\r\n spoiler: \"Godhome: Pantheon of the Sage\",\r\n wiki: \"Great_Nailsage_Sly\"\r\n },\r\n HollowKnightPrime: {\r\n name: \"Pure Vessel (1)\",\r\n nameDefault: \"Pure Vessel\",\r\n spoiler: \"Godhome: Pantheon of the Knight\",\r\n wiki: \"Pure_Vessel\"\r\n },\r\n GodseekerMask: {\r\n name: \"Weathered Mask (1)\",\r\n nameDefault: \"Weathered Mask\",\r\n spoiler: \"Land of Storms: All Pantheons & Bindings\",\r\n wiki: \"Weathered_Mask\"\r\n },\r\n VoidIdol_1: {\r\n name: \"Void Idol Attuned (1)\",\r\n nameDefault: \"Void Idol Attuned\",\r\n spoiler: \"Hall of Gods: Defeat All (Attuned)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n VoidIdol_2: {\r\n name: \"Void Idol Ascended (1)\",\r\n nameDefault: \"Void Idol Ascended\",\r\n spoiler: \"Hall of Gods: Defeat All (Ascended)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n VoidIdol_3: {\r\n name: \"Void Idol Radiant (1)\",\r\n nameDefault: \"Void Idol Radiant\",\r\n spoiler: \"Hall of Gods: Defeat All (Radiant)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Charm Notches ############################################## */\r\n\r\n /*charmNotches: {\r\n h2: \"Charm Notches\",\r\n id: \"hk-charm-notches\",\r\n description: `Charm Notches are required to equip Charms. They can be found in the game world, bought from Salubra or won from certain challenges.`,\r\n percent: 0,\r\n maxPercent: 8,\r\n entries: {\r\n notchShroomOgres: {\r\n name: \"Charm Notch #1\",\r\n spoiler: \"Fungal Wastes: Shroom Ogres room\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch1: {\r\n name: \"Charm Notch #2\",\r\n spoiler: \"Salubra: 120 Geo + 5 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch2: {\r\n name: \"Charm Notch #3\",\r\n spoiler: \"Salubra: 500 Geo + 10 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch3: {\r\n name: \"Charm Notch #4\",\r\n spoiler: \"Salubra: 900 Geo + 18 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n salubraNotch4: {\r\n name: \"Charm Notch #5\",\r\n spoiler: \"Salubra: 1400 Geo + 25 Charms found\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n colosseumBronzeCompleted: {\r\n name: \"Charm Notch #6\",\r\n spoiler: \"Colosseum of Fools: Trial of the Warrior\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n notchFogCanyon: {\r\n name: \"Charm Notch #7\",\r\n spoiler: \"Fog Canyon: explosive eggs room\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n gotGrimmNotch: {\r\n name: \"Charm Notch #8\",\r\n spoiler: \"Dirtmouth: Troupe Leader Grimm\",\r\n wiki: \"Category:Charms#Notches\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Grubs ############################################## */\r\n\r\n /*grubs: {\r\n h2: \"Grubs\",\r\n id: \"hk-grubs\",\r\n description: `Creatures found trapped in glass jars throughout Hallownest. They can be freed from their jar after which the Grubfather grants a reward for each Grub that is saved. \r\n Note: Due to a bug in recent versions of Hollow Knight, Grubs #33 and #34 (The Collector/Tower of Love) are not marked as released correctly in the save file. As a workaround for this bug, when Grub #32 is detected as released, #33 and #34 are automatically marked as released too in this app.`,\r\n percent: 0,\r\n maxPercent: 46,\r\n entries: {\r\n grub1: {\r\n name: \"Grub #1\",\r\n spoiler: \"Forgotten Crossroads: Acid Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_35\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub2: {\r\n name: \"Grub #2\",\r\n spoiler: \"Forgotten Crossroads: Left of Dark Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub3: {\r\n name: \"Grub #3\",\r\n spoiler: \"Forgotten Crossroads: Above Ancestral Mound\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_05\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub4: {\r\n name: \"Grub #4\",\r\n spoiler: \"Forgotten Crossroads: Husk Guard Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_48\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub5: {\r\n name: \"Grub #5\",\r\n spoiler: \"Forgotten Crossroads: Spikes Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Crossroads_31\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub6: {\r\n name: \"Grub #6\",\r\n spoiler: \"Greenpath: Cornifer Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_06\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub7: {\r\n name: \"Grub #7\",\r\n spoiler: \"Greenpath: Outside Hunter\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_07\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub8: {\r\n name: \"Grub #8\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_21\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub9: {\r\n name: \"Grub #9\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_28\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub10: {\r\n name: \"Grub #10\",\r\n spoiler: \"Fungal Wastes: Cornifer Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus2_18\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub11: {\r\n name: \"Grub #11\",\r\n spoiler: \"City of Tears: Above Lemm\",\r\n id: \"Grub Bottle (1)\",\r\n sceneName: \"Ruins1_05\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub12: {\r\n name: \"Grub #12\",\r\n spoiler: \"Crystal Peak: Left of Dark Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_04\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub13: {\r\n name: \"Grub #13\",\r\n spoiler: \"Crystal Peak: Spiked Conveyor Belts\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub14: {\r\n name: \"Grub #14\",\r\n spoiler: \"Crystal Peak: Crystal Heart Gauntlet\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_31\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub15: {\r\n name: \"Grub #15\",\r\n spoiler: \"Crystal Peak: Crushers Below Top Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_19\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub16: {\r\n name: \"Grub #16\",\r\n spoiler: \"City of Tears: Soul Master Rewards Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins1_32\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub17: {\r\n name: \"Grub #17\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub18: {\r\n name: \"Grub #18\",\r\n spoiler: \"City of Tears: Guarded House Room in Main Hub\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins_House_01\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub19: {\r\n name: \"Grub #19\",\r\n spoiler: \"Crystal Peak: Crystallized Mound\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_35\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub20: {\r\n name: \"Grub #20\",\r\n spoiler: \"Crystal Peak: Down from Dirtmouth entrance\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_16\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub21: {\r\n name: \"Grub #21\",\r\n spoiler: \"Royal Waterways: Top Left Corridor Above Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Waterways_04\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub22: {\r\n name: \"Grub #22\",\r\n spoiler: \"Royal Waterways: Isma's Grove\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Waterways_13\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub23: {\r\n name: \"Grub #23\",\r\n spoiler: \"Ancient Basin: Broken Vessel Top Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Abyss_19\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub24: {\r\n name: \"Grub #24\",\r\n spoiler: \"Ancient Basin: Cloth/Pale Ore Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Abyss_17\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub25: {\r\n name: \"Grub #25\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Mines_24\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub26: {\r\n name: \"Grub #26\",\r\n spoiler: \"Greenpath: Whispering Root Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus1_13\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub27: {\r\n name: \"Grub #27\",\r\n spoiler: \"Fog Canyon: Teacher's Archives Entrance\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_47\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub28: {\r\n name: \"Grub #28\",\r\n spoiler: \"Queen's Gardens: Main Arena Above Left Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_10\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub29: {\r\n name: \"Grub #29\",\r\n spoiler: \"Queen's Gardens: Near White Lady\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_48\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub30: {\r\n name: \"Grub #30\",\r\n spoiler: \"Queen's Gardens: Upper Room near Greenpath\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus3_22\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub31: {\r\n name: \"Grub #31\",\r\n spoiler: \"City of Tears: Below King's Station\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins2_07\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub32: {\r\n name: \"Grub #32\",\r\n spoiler: \"City of Tears: The Collector Arena\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub33: {\r\n name: \"Grub #33\",\r\n spoiler: \"City of Tears: The Collector Arena\",\r\n id: \"Grub Bottle (1)\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub34: {\r\n name: \"Grub #34\",\r\n spoiler: \"City of Tears: The Collector Arena\",\r\n id: \"Grub Bottle (2)\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub35: {\r\n name: \"Grub #35\",\r\n spoiler: \"Kingdom's Edge: Below Camp Bench\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_East_11\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub36: {\r\n name: \"Grub #36\",\r\n spoiler: \"Kingdom's Edge: Below Nailmaster Oro\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_East_14\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub37: {\r\n name: \"Grub #37\",\r\n spoiler: \"Fungal Wastes: Spore Shroom Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Fungus2_20\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub38: {\r\n name: \"Grub #38\",\r\n spoiler: \"City of Tears: Watcher's Spire Fourth Floor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Ruins2_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub39: {\r\n name: \"Grub #39\",\r\n spoiler: \"Deepnest: Right of Fungal Wastes Drop\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_36\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub40: {\r\n name: \"Grub #40\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub41: {\r\n name: \"Grub #41\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_31\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub42: {\r\n name: \"Grub #42\",\r\n spoiler: \"Deepnest: Whispering Root Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_39\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub43: {\r\n name: \"Grub #43\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub44: {\r\n name: \"Grub #44\",\r\n spoiler: \"Royal Waterways: Kingdom's Edge Acid Corridor\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Waterways_14\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub45: {\r\n name: \"Grub #45\",\r\n spoiler: \"The Hive: Kingdom's Edge Secret\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Hive_03\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n grub46: {\r\n name: \"Grub #46\",\r\n spoiler: \"The Hive: Mask Shard Room\",\r\n id: \"Grub Bottle\",\r\n sceneName: \"Hive_04\",\r\n wiki: \"Grub#Rewards_and_locations\"\r\n },\r\n },\r\n },*/\r\n\r\n\r\n /* ###################################### Collectibles -> Whispering Roots ############################################## */\r\n\r\n /*whisperingRoots: {\r\n h2: \"Whispering Roots\",\r\n id: \"hk-whispering-roots\",\r\n description: `There are 15 Whispering Roots in the game, containing a total of 482 Essence. Whispering Root Pin from Iselda reveals the locations of every Whispering Root in an area after that area's Map has been purchased.`,\r\n percent: 0,\r\n maxPercent: 15,\r\n entries: {\r\n whisperingRoot1: {\r\n name: \"Whispering Root #1: 29 Orbs\",\r\n spoiler: \"Forgotten Crossroads: Right of Grubfather\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Crossroads_07\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot2: {\r\n name: \"Whispering Root #2: 42 Orbs\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot3: {\r\n name: \"Whispering Root #3: 18 Orbs\",\r\n spoiler: \"Fungal Wastes: Above Mantis Village\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus2_17\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot4: {\r\n name: \"Whispering Root #4: 28 Orbs\",\r\n spoiler: \"City of Tears: Below Stag Station\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Ruins1_17\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot5: {\r\n name: \"Whispering Root #5: 46 Orbs\",\r\n spoiler: \"Howling Cliffs: Big Main Area\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot6: {\r\n name: \"Whispering Root #6: 21 Orbs\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Big Area\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Mines_23\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot7: {\r\n name: \"Whispering Root #7: 20 Orbs\",\r\n spoiler: \"Resting Grounds: Right of Seer, Main Area\",\r\n id: \"Dream Plant\",\r\n sceneName: \"RestingGrounds_05\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot8: {\r\n name: \"Whispering Root #8: 34 Orbs\",\r\n spoiler: \"Resting Grounds: Spirit's Glade\",\r\n id: \"Dream Plant\",\r\n sceneName: \"RestingGrounds_08\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot9: {\r\n name: \"Whispering Root #9: 35 Orbs\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Abyss_01\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot10: {\r\n name: \"Whispering Root #10: 44 Orbs\",\r\n spoiler: \"Greenpath: Right of Queen's Gardens\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus1_13\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot11: {\r\n name: \"Whispering Root #11: 20 Orbs\",\r\n spoiler: \"Fungal Wastes: Left of Leg Eater\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus2_33\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot12: {\r\n name: \"Whispering Root #12: 29 Orbs\",\r\n spoiler: \"Queen's Gardens: Below Right Bench\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Fungus3_11\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot13: {\r\n name: \"Whispering Root #13: 51 Orbs\",\r\n spoiler: \"Kingdom's Edge: Right of Tower of Love\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Deepnest_East_07\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot14: {\r\n name: \"Whispering Root #14: 45 Orbs\",\r\n spoiler: \"Deepnest: Below Queen's Gardens\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Deepnest_39\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n whisperingRoot15: {\r\n name: \"Whispering Root #15: 20 Orbs\",\r\n spoiler: \"The Hive: Right of Bench\",\r\n id: \"Dream Plant\",\r\n sceneName: \"Hive_02\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - Wanderer's Journal ############################################## */\r\n\r\n /*relicsWanderersJournal: {\r\n h2: \"Relics - Wanderer's Journal\",\r\n id: \"hk-relics-journal\",\r\n description: `Tablets found commonly throughout Hallownest. They are always found next to corpses that are assumed to be the authors of the journal. Can be sold to Relic Seeker Lemm for 200 Geo. \r\n 14 x 200 = 2800 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 14,\r\n entries: {\r\n wanderersJournal1: {\r\n name: \"Wanderer's Journal #1\",\r\n spoiler: \"Greenpath: Room Above Fog Canyon\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_11\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal2: {\r\n name: \"Wanderer's Journal #2\",\r\n spoiler: \"Greenpath: Right of Stag Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_22\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal3: {\r\n name: \"Wanderer's Journal #3\",\r\n spoiler: \"Fungal Wastes: Below Shrumal Ogres\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_04\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal4: {\r\n name: \"Wanderer's Journal #4\",\r\n spoiler: \"Fungal Wastes: Room Above Mantis Village\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_17\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal5: {\r\n name: \"Wanderer's Journal #5\",\r\n spoiler: \"City of Tears: City Storerooms\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_28\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal6: {\r\n name: \"Wanderer's Journal #6\",\r\n spoiler: \"Howling Cliffs: Main Open Air Area\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal7: {\r\n name: \"Wanderer's Journal #7\",\r\n spoiler: \"Crystal Peak: Right Tall Room\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Mines_20\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal8: {\r\n name: \"Wanderer's Journal #8\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Shiny Item\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal9: {\r\n name: \"Wanderer's Journal #9\",\r\n spoiler: \"City of Tears: Room Above King's Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins2_05\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal10: {\r\n name: \"Wanderer's Journal #10\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Abyss_02\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal11: {\r\n name: \"Wanderer's Journal #11\",\r\n spoiler: \"City of Tears: Pleasure House Elevator\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Ruins_Elevator\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal12: {\r\n name: \"Wanderer's Journal #12\",\r\n spoiler: \"Kingdom's Edge: Whispering Root Area\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_07\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal13: {\r\n name: \"Wanderer's Journal #13\",\r\n spoiler: \"Kingdom's Edge: Camp Bench\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_13\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n wanderersJournal14: {\r\n name: \"Wanderer's Journal #14\",\r\n spoiler: \"Kingdom's Edge: Left of Markoth\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_18\",\r\n wiki: \"Wanderer%27s_Journal\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - Hallownest Seal ############################################## */\r\n\r\n /*relicsHallownestSeal: {\r\n h2: \"Relics - Hallownest Seal\",\r\n id: \"hk-relics-seal\",\r\n description: `Official symbols of the Pale King and the Five Great Knights. The seals can be found in various locations throughout the world. Can be sold to Relic Seeker Lemm for 450 Geo. Seal #16 is missable when a player enters the Beast's Den through the secret path without being trapped by using the bench. \r\n 17 x 450 = 7650 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 17,\r\n entries: {\r\n hallownestSeal1: {\r\n name: \"Hallownest Seal #1\",\r\n spoiler: \"Forgotten Crossroads: Inside the Well\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Crossroads_01\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal2: {\r\n name: \"Hallownest Seal #2\",\r\n spoiler: \"Fungal Wastes: Willoh's Room above Queen's Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_34\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal3: {\r\n name: \"Hallownest Seal #3\",\r\n spoiler: \"Greenpath: Acid Bridge\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_10\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal4: {\r\n name: \"Hallownest Seal #4\",\r\n spoiler: \"Fungal Wastes: Right of Queen's Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_03\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal5: {\r\n name: \"Hallownest Seal #5\",\r\n spoiler: \"City of Tears: Open Air Rafters\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_03\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal6: {\r\n name: \"Hallownest Seal #6\",\r\n spoiler: \"City of Tears: Soul Master Rewards Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_32\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal7: {\r\n name: \"Hallownest Seal #7\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal8: {\r\n name: \"Hallownest Seal #8\",\r\n spoiler: \"City of Tears: King's Station Stag Station\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins2_08\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal9: {\r\n name: \"Hallownest Seal #9\",\r\n spoiler: \"Grubfather: 23 Grubs rescued\",\r\n id: \"Shiny Item Relic2\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal10: {\r\n name: \"Hallownest Seal #10\",\r\n spoiler: \"Fog Canyon: Right Tall Area\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus3_26\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal11: {\r\n name: \"Hallownest Seal #11\",\r\n spoiler: \"Fog Canyon: Lifeblood Cocoon Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus3_30\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal12: {\r\n name: \"Hallownest Seal #12\",\r\n spoiler: \"Queen's Gardens: Outside White Lady\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus3_48\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal13: {\r\n name: \"Hallownest Seal #13\",\r\n spoiler: \"Fungal Wastes: Mantis Lords Reward Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_31\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal14: {\r\n name: \"Hallownest Seal #14\",\r\n spoiler: \"City of Tears: Watcher's Spire Fourth Floor\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins2_03\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal15: {\r\n name: \"Hallownest Seal #15\",\r\n spoiler: \"Deepnest: Room Above Lower Cornifer\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_16\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal16: {\r\n name: \"Hallownest Seal #16 (missable)\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n hallownestSeal17: {\r\n name: \"Hallownest Seal #17\",\r\n spoiler: \"Seer: 100 Essence collected\",\r\n id: \"dreamReward1\",\r\n sceneName: \"\",\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - King's Idol ############################################## */\r\n\r\n /*relicsKingsIdol: {\r\n h2: \"Relics - King's Idol\",\r\n id: \"hk-relics-idol\",\r\n description: `Idols made of a mysterious white metal that depict the Pale King. They are found in various locations throughout Hallownest. Can be sold to Relic Seeker Lemm for 800 Geo. \r\n 8 x 800 = 6400 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 8,\r\n entries: {\r\n kingsIdol1: {\r\n name: \"King's Idol #1\",\r\n spoiler: \"Howling Cliffs: Main Open Air Area\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"King%27s_Idol\"\r\n }, \r\n kingsIdol2: {\r\n name: \"King's Idol #2\",\r\n spoiler: \"Crystal Peak: Cornifer Room, use Monarch Wings\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Mines_30\",\r\n wiki: \"King%27s_Idol\"\r\n }, \r\n kingsIdol3: {\r\n name: \"King's Idol #3\",\r\n spoiler: \"Resting Grounds: Spirit's Glade, Waterfall\",\r\n id: \"Shiny Item\",\r\n sceneName: \"RestingGrounds_08\",\r\n wiki: \"King%27s_Idol\"\r\n }, \r\n kingsIdol4: {\r\n name: \"King's Idol #4\",\r\n spoiler: \"Royal Waterways: Dung Defender's Cave\",\r\n id: \"Shiny Item Stand\",\r\n sceneName: \"Waterways_15\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol5: {\r\n name: \"King's Idol #5\",\r\n spoiler: \"Kingdom's Edge: Great Hopper Below Colosseum Entrance\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_East_08\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol6: {\r\n name: \"King's Idol #6\",\r\n spoiler: \"Deepnest: Zote Arena Left Side\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_33\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol7: {\r\n name: \"King's Idol #7\",\r\n spoiler: \"Grubfather: 38 Grubs rescued\",\r\n id: \"Shiny Item Relic3\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n kingsIdol8: {\r\n name: \"King's Idol #8\",\r\n spoiler: \"Kingdom's Edge: Pale Lurker Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"GG_Lurker\",\r\n wiki: \"King%27s_Idol\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Relics - Arcane Egg ############################################## */\r\n\r\n /*relicsArcaneEgg: {\r\n h2: \"Relics - Arcane Egg\",\r\n id: \"hk-relics-egg\",\r\n description: `Jet black stone eggs originating from a civilisation that existed before the Kingdom of Hallownest was founded. Egg #4 is missable when the player will go right instead of left in the Lifeblood Core room in the Abyss and will touch the Charm. Can be sold to Relic Seeker Lemm for 1200 Geo. \r\n 4 x 1200 = 4800 Geo Total.`,\r\n percent: 0,\r\n maxPercent: 4,\r\n entries: {\r\n arcaneEgg1: {\r\n name: \"Arcane Egg #1\",\r\n spoiler: \"The Abyss: Shade Cloak Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Abyss_10\",\r\n wiki: \"Arcane_Egg\"\r\n },\r\n arcaneEgg2: {\r\n name: \"Arcane Egg #2\",\r\n spoiler: \"Seer: 1200 Essence\",\r\n id: \"dreamReward6\",\r\n sceneName: \"\",\r\n wiki: \"Arcane_Egg\"\r\n },\r\n arcaneEgg3: {\r\n name: \"Arcane Egg #3\",\r\n spoiler: \"The Abyss: Birthplace, requires Kingsoul\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Abyss_15\",\r\n wiki: \"Arcane_Egg\"\r\n },\r\n arcaneEgg4: {\r\n name: \"Arcane Egg #4 (missable)\",\r\n spoiler: \"The Abyss: Lifeblood Core Room\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Abyss_08\",\r\n wiki: \"Abyss#Lifeblood_Chamber\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Rancid Eggs ############################################## */\r\n\r\n /*rancidEggs: {\r\n h2: \"Rancid Eggs\",\r\n id: \"hk-rancid-eggs\",\r\n description: `A collectable item recovered from the corpses of Bluggsacs. Either an already-dead Bluggsac has to be found or a living one has to be killed to make it drop a Rancid Egg. A certain NPC in the game may be very interested in these... Egg #16 is missable when a player enters the Beast's Den through the secret path without being trapped by using the bench.`,\r\n percent: 0,\r\n maxPercent: 21,\r\n entries: {\r\n rancidEgg1: {\r\n name: \"Rancid Egg #1\",\r\n spoiler: \"Fungal Wastes: Fungal Core Upper Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus2_29\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg2: {\r\n name: \"Rancid Egg #2\",\r\n spoiler: \"City of Tears: Room Above Lemm\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins1_05\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg3: {\r\n name: \"Rancid Egg #3\",\r\n spoiler: \"Crystal Peak: Dark Bench Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Mines_29\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg4: {\r\n name: \"Rancid Egg #4\",\r\n spoiler: \"Resting Grounds: Blue Lake\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Crossroads_50\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg5: {\r\n name: \"Rancid Egg #5\",\r\n spoiler: \"Crystal Peak: Desolate Dive Entrance\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Mines_01\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg6: {\r\n name: \"Rancid Egg #6\",\r\n spoiler: \"Royal Waterways: Mask Shard Room\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Waterways_04b\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg7: {\r\n name: \"Rancid Egg #7\",\r\n spoiler: \"Royal Waterways: Hidden Grub Room\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Waterways_04\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg8: {\r\n name: \"Rancid Egg #8\",\r\n spoiler: \"Royal Waterways: Left of Isma's Grove\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Waterways_07\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg9: {\r\n name: \"Rancid Egg #9\",\r\n spoiler: \"Greenpath: Outside Sheo's Hut\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Fungus1_15\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg10: {\r\n name: \"Rancid Egg #10\",\r\n spoiler: \"Grubfather: 16 Grubs rescued\",\r\n id: \"Shiny Item Rancid Egg\",\r\n sceneName: \"Crossroads_38\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg11: {\r\n name: \"Rancid Egg #11\",\r\n spoiler: \"Queen's Gardens: Entrance from Fog Canyon\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Fungus3_34\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg12: {\r\n name: \"Rancid Egg #12\",\r\n spoiler: \"City of Tears: Pleasure House Elevator\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Ruins_Elevator\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg13: {\r\n name: \"Rancid Egg #13\",\r\n spoiler: \"Kingdom's Edge: Whispering Root Area\",\r\n id: \"Shiny Item (1)\",\r\n sceneName: \"Deepnest_East_07\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg14: {\r\n name: \"Rancid Egg #14\",\r\n spoiler: \"Deepnest: Weaver's Den\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg15: {\r\n name: \"Rancid Egg #15\",\r\n spoiler: \"Deepnest: Whispering Root Big Area Left Side\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Deepnest_39\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg16: {\r\n name: \"Rancid Egg #16 (missable)\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg17: {\r\n name: \"Rancid Egg #17\",\r\n spoiler: \"Crystal Peak: Right Tall Room\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Mines_20\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg18: {\r\n name: \"Rancid Egg #18\",\r\n spoiler: \"Royal Waterways: Main Bench Area\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Waterways_02\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg19: {\r\n name: \"Rancid Egg #19\",\r\n spoiler: \"Kingdom's Edge: Below Nailmaster Oro\",\r\n id: \"Shiny Item(Clone)\",\r\n sceneName: \"Deepnest_East_14\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg20: {\r\n name: \"Rancid Egg #20\",\r\n spoiler: \"Sly: 60 Geo\",\r\n id: \"slyRancidEgg\",\r\n sceneName: \"\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n rancidEgg21: {\r\n name: \"Rancid Egg #21\",\r\n spoiler: \"Royal Waterways: Tuk's free Egg\",\r\n spoilerNormal: \"Royal Waterways: Tuk, with Defender's Crest\",\r\n spoilerSteelSoul: \"Royal Waterways: Inspect Tuk\",\r\n idPlayerData: \"tukDungEgg\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Waterways_03\",\r\n wiki: \"Tuk\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Collectibles -> Items ############################################## */\r\n\r\n /*items: {\r\n h2: \"Items\",\r\n id: \"hk-items\",\r\n description: `Certain acquirable items, map markers or collectibles in the game that won't fit any specific category. Using custom map pins to mark interesting locations on the map is very useful while playing Hollow Knight. 1440 Geo is needed to buy all map pins from Iselda.`,\r\n percent: 0,\r\n maxPercent: 21,\r\n entries: {\r\n hasQuill: {\r\n name: \"Quill\",\r\n spoiler: \"120 Geo: Iselda's Shop, updates map with explored areas\",\r\n wiki: \"Map_and_Quill#Mapping_Tools\"\r\n },\r\n hasPinBench: {\r\n name: \"Map Pin: Bench\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Bench_(Hollow_Knight)\"\r\n },\r\n hasPinShop: {\r\n name: \"Map Pin: Vendor\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Category:NPCs_(Hollow_Knight)#Merchants\"\r\n },\r\n hasPinCocoon: {\r\n name: \"Map Pin: Lifeblood Cocoon\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Lifeblood_Cocoon\"\r\n },\r\n hasPinSpa: {\r\n name: \"Map Pin: Hot Springs\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Hot_Springs\"\r\n },\r\n hasPinStag: {\r\n name: \"Map Pin: Stag Station\",\r\n spoiler: \"100 Geo: Iselda's Shop, unlock first Station\",\r\n wiki: \"Stag_Station\"\r\n },\r\n hasPinGhost: {\r\n name: \"Map Pin: Warrior's Grave\",\r\n spoiler: \"180 Geo: Iselda's Shop, acquire Dream Nail\",\r\n wiki: \"Warrior_Dreams\"\r\n },\r\n hasPinDreamPlant: {\r\n name: \"Map Pin: Whispering Root\",\r\n spoiler: \"150 Geo: Iselda's Shop, acquire Dream Nail\",\r\n wiki: \"Whispering_Root\"\r\n },\r\n hasPinTram: {\r\n name: \"Map Pin: Tram\",\r\n spoiler: \"100 Geo: Iselda's Shop, acquire Tram Pass\",\r\n wiki: \"Tram\"\r\n },\r\n hasMarker_r: {\r\n name: \"Map Pin: Shell Marker\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasMarker_b: {\r\n name: \"Map Pin: Scarab Marker\",\r\n spoiler: \"100 Geo: Iselda's Shop\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasMarker_y: {\r\n name: \"Map Pin: Token Marker\",\r\n spoiler: \"100 Geo: Iselda's Shop, acquire Mothwing Cloak\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasMarker_w: {\r\n name: \"Map Pin: Gleaming Marker\",\r\n spoiler: \"210 Geo: Iselda, acquire Mothwing Cloak\",\r\n wiki: \"Iselda#Map_Pins\"\r\n },\r\n hasPinGuardian: {\r\n name: \"Map Pin: Dreamers\",\r\n spoiler: \"Resting Grounds: Inspect the shrine\",\r\n wiki: \"Dreamers\"\r\n },\r\n hasPinBlackEgg: {\r\n name: \"Map Pin: Temple of the Black Egg\",\r\n spoiler: \"City of Tears: Inspect fountain\",\r\n wiki: \"Temple_of_the_Black_Egg\"\r\n },\r\n hasPinGrub: {\r\n name: \"Collector's Map\",\r\n spoiler: \"Kingdom's Edge: Tower of Love, Love Key\",\r\n wiki: \"Map_and_Quill#The_Collector's_Map\"\r\n },\r\n cityCrest: {\r\n name: \"City Crest\",\r\n spoiler: \"Forgotten Crossroads: False Knight Reward\",\r\n id: \"Shiny Item\",\r\n sceneName: \"Crossroads_10\",\r\n wiki: \"City_Crest\"\r\n },\r\n hasDreamGate: {\r\n name: \"Dreamgate\",\r\n spoiler: \"Seer: 900 Essence\",\r\n wiki: \"Dreamgate\"\r\n },\r\n fragileGreed_unbreakable: {\r\n name: \"Unbreakable Greed\",\r\n spoiler: \"Divine: Fragile Greed + 9000 Geo\",\r\n wiki: \"Divine#Unbreakable_Charms\"\r\n },\r\n fragileHealth_unbreakable: {\r\n name: \"Unbreakable Heart\",\r\n spoiler: \"Divine: Fragile Heart + 12000 Geo\",\r\n wiki: \"Divine#Unbreakable_Charms\"\r\n },\r\n fragileStrength_unbreakable: {\r\n name: \"Unbreakable Strength\",\r\n spoiler: \"Divine: Fragile Strength + 15000 Geo\",\r\n wiki: \"Divine#Unbreakable_Charms\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Geo Caches -> Geo Chests ############################################## */\r\n\r\n /*geoChests: {\r\n h2: \"Geo Chests\",\r\n id: \"hk-geo-chests\",\r\n description: `All Geo Chests in the game, including one empty one and one with 1 Geo. A total of 2380 Geo can be collected from Geo Chests. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Chests.`,\r\n percent: 0,\r\n maxPercent: 14,\r\n entries: {\r\n chest1: {\r\n name: \"Chest #1: 200 Geo\",\r\n spoiler: \"Forgotten Crossroads: False Knight Reward\",\r\n id: \"Chest\",\r\n sceneName: \"Crossroads_10\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest2: {\r\n name: \"Chest #2: 1 Geo\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell Room\",\r\n id: \"Chest\",\r\n sceneName: \"Fungus1_28\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest3: {\r\n name: \"Chest #3: 78 Geo\",\r\n spoiler: \"Crystal Peak: Crushers Room\",\r\n id: \"Chest\",\r\n sceneName: \"Mines_37\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest4: {\r\n name: \"Chest #4: 380 Geo\",\r\n spoiler: \"City of Tears: Soul Master Reward\",\r\n id: \"Chest\",\r\n sceneName: \"Ruins1_32\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest5: {\r\n name: \"Chest #5: 150 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Chest\",\r\n sceneName: \"RestingGrounds_10\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest6: {\r\n name: \"Chest #6: 85 Geo\",\r\n spoiler: \"Greenpath: Whispering Root Room\",\r\n id: \"Chest\",\r\n sceneName: \"Fungus1_13\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest7: {\r\n name: \"Chest #7: 620 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Lords Reward\",\r\n id: \"Mantis Chest (2)\",\r\n sceneName: \"Fungus2_31\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest8: {\r\n name: \"Chest #8: 655 Geo\",\r\n spoiler: \"City of Tears: Watcher Knight Reward\",\r\n id: \"Chest\",\r\n sceneName: \"Ruins2_03\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest9: {\r\n name: \"Chest #9: 160 Geo\",\r\n spoiler: \"Deepnest: Weaver's Den, Secret Room\",\r\n id: \"Chest\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest10: {\r\n name: \"Chest #10: 8 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest11: {\r\n name: \"Chest #11: 8 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (1)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest12: {\r\n name: \"Chest #12: 25 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (2)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest13: {\r\n name: \"Chest #13: 0 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (3)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n chest14: {\r\n name: \"Chest #14: 10 Geo\",\r\n spoiler: \"Royal Waterways: Junk Pit\",\r\n id: \"Chest (4)\",\r\n sceneName: \"GG_Waterways\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Geo Caches -> Geo Rocks ############################################## */\r\n\r\n /*geoRocks: {\r\n h2: \"Geo Rocks\",\r\n id: \"hk-geo-rocks\",\r\n description: `All Geo Rocks that can be found in the game. Only fully destroyed Geo Rocks are counted. Partially hit Geo Rocks won't be counted. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Rocks. A total of 5074 Geo can be collected from Geo Rocks (credit: Araraura).`,\r\n percent: 0,\r\n maxPercent: 207,\r\n entries: {\r\n geoRock1: {\r\n name: \"Geo Rock #1: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 4\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock2: {\r\n name: \"Geo Rock #2: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock3: {\r\n name: \"Geo Rock #3: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 3\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock4: {\r\n name: \"Geo Rock #4: 18 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock5: {\r\n name: \"Geo Rock #5: 15 Geo\",\r\n spoiler: \"King's Pass\",\r\n id: \"Geo Rock 5\",\r\n sceneName: \"Tutorial_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock6: {\r\n name: \"Geo Rock #6: 19 Geo\",\r\n spoiler: \"Forgotten Crossroads: Well\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock7: {\r\n name: \"Geo Rock #7: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock8: {\r\n name: \"Geo Rock #8: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n id: \"Geo Rock 1 (2)\",\r\n sceneName: \"Crossroads_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock9: {\r\n name: \"Geo Rock #9: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Crossroads_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock10: {\r\n name: \"Geo Rock #10: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Corridor to Acid Grub\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock11: {\r\n name: \"Geo Rock #11: 10 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1 (3)\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock12: {\r\n name: \"Geo Rock #12: 10 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1 (2)\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock13: {\r\n name: \"Geo Rock #13: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock14: {\r\n name: \"Geo Rock #14: 10 Geo\",\r\n spoiler: \"Forgotten Crossroads: Aspid Arena\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Crossroads_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock15: {\r\n name: \"Geo Rock #15: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock16: {\r\n name: \"Geo Rock #16: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock17: {\r\n name: \"Geo Rock #17: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n id: \"Geo Rock 3\",\r\n sceneName: \"Crossroads_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock18: {\r\n name: \"Geo Rock #18: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Mask Shard\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock19: {\r\n name: \"Geo Rock #19: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Mask Shard\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock20: {\r\n name: \"Geo Rock #20: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Right of Mask Shard\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_42\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock21: {\r\n name: \"Geo Rock #21: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Right of Mask Shard\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_42\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock22: {\r\n name: \"Geo Rock #22: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Before Gruz Mother\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock23: {\r\n name: \"Geo Rock #23: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Outside False Knight\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock24: {\r\n name: \"Geo Rock #24: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Mines_33\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock25: {\r\n name: \"Geo Rock #25: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Mines_33\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock26: {\r\n name: \"Geo Rock #26: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n id: \"Geo Rock 2 (2)\",\r\n sceneName: \"Mines_33\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock27: {\r\n name: \"Geo Rock #27: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Above Lever\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock28: {\r\n name: \"Geo Rock #28: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Central Grub\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock29: {\r\n name: \"Geo Rock #29: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Outside Tram\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_27\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock30: {\r\n name: \"Geo Rock #30: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Tram\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_46\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock31: {\r\n name: \"Geo Rock #31: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: False Knight Arena\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock32: {\r\n name: \"Geo Rock #32: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock33: {\r\n name: \"Geo Rock #33: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock34: {\r\n name: \"Geo Rock #34: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock35: {\r\n name: \"Geo Rock #35: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Ancestral Mound\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_ShamanTemple\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock36: {\r\n name: \"Geo Rock #36: 26 Geo\",\r\n spoiler: \"Greenpath: Entrance\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock37: {\r\n name: \"Geo Rock #37: 26 Geo\",\r\n spoiler: \"Greenpath: Waterfall Bench\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_01b\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock38: {\r\n name: \"Geo Rock #38: 26 Geo\",\r\n spoiler: \"Greenpath: First Hornet Sighting\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock39: {\r\n name: \"Geo Rock #39: 26 Geo\",\r\n spoiler: \"Greenpath: First Hornet Sighting\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock40: {\r\n name: \"Geo Rock #40: 26 Geo\",\r\n spoiler: \"Greenpath: Outside Hunter\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock41: {\r\n name: \"Geo Rock #41: 26 Geo\",\r\n spoiler: \"Greenpath: Above Sanctuary Bench\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock42: {\r\n name: \"Geo Rock #42: 26 Geo\",\r\n spoiler: \"Greenpath: Acid Bridge\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock43: {\r\n name: \"Geo Rock #43: 26 Geo\",\r\n spoiler: \"Greenpath: Outside Stag Station\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_22\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock44: {\r\n name: \"Geo Rock #44: 26 Geo\",\r\n spoiler: \"Greenpath: Outside Stag Station\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_22\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock45: {\r\n name: \"Geo Rock #45: 26 Geo\",\r\n spoiler: \"Greenpath: Toll\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock46: {\r\n name: \"Geo Rock #46: 15 Geo\",\r\n spoiler: \"Greenpath: Toll\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Fungus1_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock47: {\r\n name: \"Geo Rock #47: 15 Geo\",\r\n spoiler: \"Greenpath: Toll\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Fungus1_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock48: {\r\n name: \"Geo Rock #48: 26 Geo\",\r\n spoiler: \"Greenpath: Storerooms\",\r\n id: \"Geo Rock Green Path 01 (2)\",\r\n sceneName: \"Fungus1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock49: {\r\n name: \"Geo Rock #49: 26 Geo\",\r\n spoiler: \"Greenpath: Storerooms\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock50: {\r\n name: \"Geo Rock #50: 26 Geo\",\r\n spoiler: \"Greenpath: Storerooms\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock51: {\r\n name: \"Geo Rock #51: 15 Geo\",\r\n spoiler: \"Greenpath: Outside Thorns\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Fungus1_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock52: {\r\n name: \"Geo Rock #52: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Fungus1_28\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock53: {\r\n name: \"Geo Rock #53: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Baldur's Shell\",\r\n id: \"Geo Rock 1 (2)\",\r\n sceneName: \"Fungus1_28\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock54: {\r\n name: \"Geo Rock #54: 30 Geo\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Fungus1_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock55: {\r\n name: \"Geo Rock #55: 30 Geo\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Geo Rock Green Path 02 (1)\",\r\n sceneName: \"Fungus1_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock56: {\r\n name: \"Geo Rock #56: 30 Geo\",\r\n spoiler: \"Greenpath: Outside Hornet\",\r\n id: \"Geo Rock Green Path 02 (2)\",\r\n sceneName: \"Fungus1_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock57: {\r\n name: \"Geo Rock #57: 26 Geo\",\r\n spoiler: \"Greenpath: Hornet\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock58: {\r\n name: \"Geo Rock #58: 26 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_29\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock59: {\r\n name: \"Geo Rock #59: 26 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger Corridor\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus1_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock60: {\r\n name: \"Geo Rock #60: 26 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger Corridor\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus1_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock61: {\r\n name: \"Geo Rock #61: 30 Geo\",\r\n spoiler: \"Greenpath: Massive Moss Charger Corridor\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Fungus1_12\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock62: {\r\n name: \"Geo Rock #62: 26 Geo\",\r\n spoiler: \"Fog Canyon: Queen's Gardens Acid Entrance\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_03\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock63: {\r\n name: \"Geo Rock #63: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Below Shrumal Ogres\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock64: {\r\n name: \"Geo Rock #64: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 01 (1)\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock65: {\r\n name: \"Geo Rock #65: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock66: {\r\n name: \"Geo Rock #66: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 02 (1)\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock67: {\r\n name: \"Geo Rock #67: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Cornifer\",\r\n id: \"Geo Rock Fung 02 (2)\",\r\n sceneName: \"Fungus2_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock68: {\r\n name: \"Geo Rock #68: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Journal\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_52\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock69: {\r\n name: \"Geo Rock #69: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Goam Journal\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_52\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock70: {\r\n name: \"Geo Rock #70: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Outside Elder Hu\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock71: {\r\n name: \"Geo Rock #71: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Left Of Pilgrim's Way\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock72: {\r\n name: \"Geo Rock #72: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Right of Bouncy Mushroom Grub\",\r\n id: \"Geo Rock Fung 02\",\r\n sceneName: \"Fungus2_11\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock73: {\r\n name: \"Geo Rock #73: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Right of Bouncy Mushroom Grub\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_11\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock74: {\r\n name: \"Geo Rock #74: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Bretta Bench\",\r\n id: \"Geo Rock Fung 01 (1)\",\r\n sceneName: \"Fungus2_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock75: {\r\n name: \"Geo Rock #75: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Bretta Bench\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock76: {\r\n name: \"Geo Rock #76: 17 Geo\",\r\n spoiler: \"Fungal Wastes: Bretta Bench\",\r\n id: \"Geo Rock Fung 02\",\r\n sceneName: \"Fungus2_13\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock77: {\r\n name: \"Geo Rock #77: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2 (2)\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock78: {\r\n name: \"Geo Rock #78: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock79: {\r\n name: \"Geo Rock #79: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2 (3)\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock80: {\r\n name: \"Geo Rock #80: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock81: {\r\n name: \"Geo Rock #81: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Village\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Fungus2_14\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock82: {\r\n name: \"Geo Rock #82: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Lords\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Fungus2_15\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock83: {\r\n name: \"Geo Rock #83: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Mantis Lords\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Fungus2_15\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock84: {\r\n name: \"Geo Rock #84: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Fungal Core Upper\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_29\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock85: {\r\n name: \"Geo Rock #85: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Pilgrim's Way\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Fungus2_21\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock86: {\r\n name: \"Geo Rock #86: 30 Geo\",\r\n spoiler: \"City of Tears: Rafters\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins1_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock87: {\r\n name: \"Geo Rock #87: 30 Geo\",\r\n spoiler: \"City of Tears: Lemm Room\",\r\n id: \"Geo Rock City 1 (1)\",\r\n sceneName: \"Ruins1_05b\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock88: {\r\n name: \"Geo Rock #88: 30 Geo\",\r\n spoiler: \"City of Tears: Rancid Egg Above Lemm\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins1_05c\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock89: {\r\n name: \"Geo Rock #89: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Vessel Fragment\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Crossroads_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock90: {\r\n name: \"Geo Rock #90: 15 Geo\",\r\n spoiler: \"Forgotten Crossroads: Brooding Mawlek Middle\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Crossroads_36\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock91: {\r\n name: \"Geo Rock #91: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Gorb\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Cliffs_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock92: {\r\n name: \"Geo Rock #92: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Gorb\",\r\n id: \"Geo Rock 1 (1)\",\r\n sceneName: \"Cliffs_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock93: {\r\n name: \"Geo Rock #93: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (2)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock94: {\r\n name: \"Geo Rock #94: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock95: {\r\n name: \"Geo Rock #95: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (4)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock96: {\r\n name: \"Geo Rock #96: 15 Geo\",\r\n spoiler: \"Howling Cliffs: Main\",\r\n id: \"Geo Rock 2 (3)\",\r\n sceneName: \"Cliffs_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock97: {\r\n name: \"Geo Rock #97: 24 Geo\",\r\n spoiler: \"Crystal Peak: Dark Entrance\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock98: {\r\n name: \"Geo Rock #98: 15 Geo\",\r\n spoiler: \"Crystal Peak: Dark Entrance\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Mines_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock99: {\r\n name: \"Geo Rock #99: 22 Geo\",\r\n spoiler: \"Crystal Peak: Dark Entrance\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock100: {\r\n name: \"Geo Rock #100: 16 Geo\",\r\n spoiler: \"Crystal Peak: Conveyor Belts Entrance\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock101: {\r\n name: \"Geo Rock #101: 16 Geo\",\r\n spoiler: \"Crystal Peak: Conveyor Belts Entrance\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock102: {\r\n name: \"Geo Rock #102: 22 Geo\",\r\n spoiler: \"Crystal Peak: Above Spike Grub\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock103: {\r\n name: \"Geo Rock #103: 24 Geo\",\r\n spoiler: \"Crystal Peak: East Tall\",\r\n id: \"Geo Rock Mine (4)\",\r\n sceneName: \"Mines_20\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock104: {\r\n name: \"Geo Rock #104: 24 Geo\",\r\n spoiler: \"Crystal Peak: East Tall\",\r\n id: \"Geo Rock Mine (3)\",\r\n sceneName: \"Mines_20\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock105: {\r\n name: \"Geo Rock #105: 24 Geo\",\r\n spoiler: \"Crystal Peak: East Tall\",\r\n id: \"Geo Rock Mine (2)\",\r\n sceneName: \"Mines_20\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock106: {\r\n name: \"Geo Rock #106: 24 Geo\",\r\n spoiler: \"Crystal Peak: Chest Crushers\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock107: {\r\n name: \"Geo Rock #107: 24 Geo\",\r\n spoiler: \"Crystal Peak: Chest Crushers\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock108: {\r\n name: \"Geo Rock #108: 30 Geo\",\r\n spoiler: \"Royal Waterways: Entrance\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock109: {\r\n name: \"Geo Rock #109: 26 Geo\",\r\n spoiler: \"Royal Waterways: Entrance\",\r\n id: \"Geo Rock City 1 (1)\",\r\n sceneName: \"Waterways_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock110: {\r\n name: \"Geo Rock #110: 30 Geo\",\r\n spoiler: \"Royal Waterways: Mask Shard Room\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_04b\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock111: {\r\n name: \"Geo Rock #111: 15 Geo\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Geo Rock 2 (1)\",\r\n sceneName: \"Abyss_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock112: {\r\n name: \"Geo Rock #112: 15 Geo\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Abyss_01\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock113: {\r\n name: \"Geo Rock #113: 15 Geo\",\r\n spoiler: \"City of Tears: Broken Elevator\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Abyss_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock114: {\r\n name: \"Geo Rock #114: 15 Geo\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Abyss_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock115: {\r\n name: \"Geo Rock #115: 15 Geo\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Abyss_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock116: {\r\n name: \"Geo Rock #116: 15 Geo\",\r\n spoiler: \"Ancient Basin: Broken Bridge\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Abyss_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock117: {\r\n name: \"Geo Rock #117: 30 Geo\",\r\n spoiler: \"City of Tears: King's Station\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins2_06\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock118: {\r\n name: \"Geo Rock #118: 30 Geo\",\r\n spoiler: \"City of Tears: Above King's Station\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins2_05\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock119: {\r\n name: \"Geo Rock #119: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Whispering Root\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock120: {\r\n name: \"Geo Rock #120: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Whispering Root\",\r\n id: \"Geo Rock Outskirts (1)\",\r\n sceneName: \"Deepnest_East_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock121: {\r\n name: \"Geo Rock #121: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Outside Nailmaster Oro\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_06\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock122: {\r\n name: \"Geo Rock #122: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Outside Nailmaster Oro\",\r\n id: \"Geo Rock Outskirts (1)\",\r\n sceneName: \"Deepnest_East_06\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock123: {\r\n name: \"Geo Rock #123: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Bardoon\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock124: {\r\n name: \"Geo Rock #124: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Great Hopper King's Idol\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock125: {\r\n name: \"Geo Rock #125: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Pale Lurker Arena\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"GG_Lurker\",\r\n hitsLeft: \"5\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock126: {\r\n name: \"Geo Rock #126: 30 Geo\",\r\n spoiler: \"Fog Canyon: Overgrown Mound\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Room_Fungus_Shaman\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock127: {\r\n name: \"Geo Rock #127: 30 Geo\",\r\n spoiler: \"City of Tears: Soul Master Rewards Room\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins1_32\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock128: {\r\n name: \"Geo Rock #128: 30 Geo\",\r\n spoiler: \"Royal Waterways: Outside Flukemarm\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_08\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock129: {\r\n name: \"Geo Rock #129: 30 Geo\",\r\n spoiler: \"Royal Waterways: Flukemunga Corridor\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"GG_Pipeway\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock130: {\r\n name: \"Geo Rock #130: 22 Geo\",\r\n spoiler: \"Royal Waterways: Fluke Hermit Room\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Room_GG_Shortcut\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock131: {\r\n name: \"Geo Rock #131: 17 Geo\",\r\n spoiler: \"Royal Waterways: Fluke Hermit Room\",\r\n id: \"Geo Rock Fung 02 (1)\",\r\n sceneName: \"Room_GG_Shortcut\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock132: {\r\n name: \"Geo Rock #132: 25 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Geo Rock Grave 02 (1)\",\r\n sceneName: \"RestingGrounds_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock133: {\r\n name: \"Geo Rock #133: 25 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Geo Rock Grave 02\",\r\n sceneName: \"RestingGrounds_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock134: {\r\n name: \"Geo Rock #134: 25 Geo\",\r\n spoiler: \"Resting Grounds: Crypts\",\r\n id: \"Geo Rock Grave 01\",\r\n sceneName: \"RestingGrounds_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock135: {\r\n name: \"Geo Rock #135: 24 Geo\",\r\n spoiler: \"Crystal Peak: Crystal Heart Gauntlet\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock136: {\r\n name: \"Geo Rock #136: 24 Geo\",\r\n spoiler: \"Crystal Peak: Grub Mimic\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock137: {\r\n name: \"Geo Rock #137: 35 Geo\",\r\n spoiler: \"Ancient Basin: Corridor to Broken Vessel\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_18\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock138: {\r\n name: \"Geo Rock #138: 35 Geo\",\r\n spoiler: \"The Abyss: Main/Core Area\",\r\n id: \"Geo Rock Abyss (1)\",\r\n sceneName: \"Abyss_06_Core\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock139: {\r\n name: \"Geo Rock #139: 35 Geo\",\r\n spoiler: \"The Abyss: Main/Core Area\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_06_Core\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock140: {\r\n name: \"Geo Rock #140: 35 Geo\",\r\n spoiler: \"The Abyss: Main/Core Area\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_06_Core\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock141: {\r\n name: \"Geo Rock #141: 35 Geo\",\r\n spoiler: \"Ancient Basin: Broken Vessel Grub\",\r\n id: \"Geo Rock Abyss (1)\",\r\n sceneName: \"Abyss_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock142: {\r\n name: \"Geo Rock #142: 35 Geo\",\r\n spoiler: \"Ancient Basin: Broken Vessel Grub\",\r\n id: \"Geo Rock Abyss\",\r\n sceneName: \"Abyss_19\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock143: {\r\n name: \"Geo Rock #143: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock144: {\r\n name: \"Geo Rock #144: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (4)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"4\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock145: {\r\n name: \"Geo Rock #145: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (2)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"4\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock146: {\r\n name: \"Geo Rock #146: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (1)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock147: {\r\n name: \"Geo Rock #147: 24 Geo\",\r\n spoiler: \"Crystal Peak: Hallownest Crown Climb\",\r\n id: \"Geo Rock Mine (3)\",\r\n sceneName: \"Mines_25\",\r\n hitsLeft: \"4\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock148: {\r\n name: \"Geo Rock #148: 30 Geo\",\r\n spoiler: \"City of Tears: Watcher's Spire Second Floor\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins2_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock149: {\r\n name: \"Geo Rock #149: 30 Geo\",\r\n spoiler: \"Fog Canyon: East Tall\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_26\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock150: {\r\n name: \"Geo Rock #150: 26 Geo\",\r\n spoiler: \"Queen's Gardens: Main Arena\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_10\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock151: {\r\n name: \"Geo Rock #151: 30 Geo\",\r\n spoiler: \"Queen's Gardens: Outside White Lady\",\r\n id: \"Geo Rock Green Path 02\",\r\n sceneName: \"Fungus3_48\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock152: {\r\n name: \"Geo Rock #152: 27 Geo\",\r\n spoiler: \"Queen's Gardens: Moss Prophet Room\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Fungus3_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock153: {\r\n name: \"Geo Rock #153: 30 Geo\",\r\n spoiler: \"Queen's Gardens: Moss Prophet Room\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Fungus3_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock154: {\r\n name: \"Geo Rock #154: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Deepnest Fall\",\r\n id: \"Geo Rock 1\",\r\n sceneName: \"Deepnest_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock155: {\r\n name: \"Geo Rock #155: 15 Geo\",\r\n spoiler: \"Fungal Wastes: Deepnest Fall\",\r\n id: \"Geo Rock 2\",\r\n sceneName: \"Deepnest_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock156: {\r\n name: \"Geo Rock #156: 26 Geo\",\r\n spoiler: \"Queen's Gardens: Corridor To Deepnest\",\r\n id: \"Geo Rock Green Path 01 (1)\",\r\n sceneName: \"Deepnest_43\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock157: {\r\n name: \"Geo Rock #157: 26 Geo\",\r\n spoiler: \"Queen's Gardens: Corridor To Deepnest\",\r\n id: \"Geo Rock Green Path 01\",\r\n sceneName: \"Deepnest_43\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock158: {\r\n name: \"Geo Rock #158: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Fungal Core Lower\",\r\n id: \"Geo Rock Fung 01\",\r\n sceneName: \"Fungus2_30\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock159: {\r\n name: \"Geo Rock #159: 22 Geo\",\r\n spoiler: \"Fungal Wastes: Fungal Core Lower\",\r\n id: \"Geo Rock Fung 01 (1)\",\r\n sceneName: \"Fungus2_30\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock160: {\r\n name: \"Geo Rock #160: 15 Geo\",\r\n spoiler: \"Deepnest: Lower Cornifer\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Fungus2_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock161: {\r\n name: \"Geo Rock #161: 15 Geo\",\r\n spoiler: \"Deepnest: Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Fungus2_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock162: {\r\n name: \"Geo Rock #162: 15 Geo\",\r\n spoiler: \"Deepnest: Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Fungus2_25\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock163: {\r\n name: \"Geo Rock #163: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (4)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock164: {\r\n name: \"Geo Rock #164: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (3)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock165: {\r\n name: \"Geo Rock #165: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock166: {\r\n name: \"Geo Rock #166: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock167: {\r\n name: \"Geo Rock #167: 15 Geo\",\r\n spoiler: \"Deepnest: Top of Lower Cornifer\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_16\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock168: {\r\n name: \"Geo Rock #168: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Grub Mimics\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_02\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock169: {\r\n name: \"Geo Rock #169: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Grub Mimics\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_02\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock170: {\r\n name: \"Geo Rock #170: 15 Geo\",\r\n spoiler: \"Deepnest: Whispering Root\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock171: {\r\n name: \"Geo Rock #171: 15 Geo\",\r\n spoiler: \"Deepnest: Whispering Root\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock172: {\r\n name: \"Geo Rock #172: 15 Geo\",\r\n spoiler: \"Deepnest: Whispering Root\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_39\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock173: {\r\n name: \"Geo Rock #173: 15 Geo\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_03\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock174: {\r\n name: \"Geo Rock #174: 15 Geo\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock175: {\r\n name: \"Geo Rock #175: 15 Geo\",\r\n spoiler: \"Deepnest: Left of Hot Spring\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_03\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock176: {\r\n name: \"Geo Rock #176: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Galien\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_35\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock177: {\r\n name: \"Geo Rock #177: 15 Geo\",\r\n spoiler: \"Deepnest: Outside Galien\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_35\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock178: {\r\n name: \"Geo Rock #178: 15 Geo\",\r\n spoiler: \"Deepnest: Corridor to Tram\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock179: {\r\n name: \"Geo Rock #179: 15 Geo\",\r\n spoiler: \"Deepnest: Corridor to Tram\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_37\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock180: {\r\n name: \"Geo Rock #180: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Left of The Hive\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_East_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock181: {\r\n name: \"Geo Rock #181: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Left of The Hive\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_East_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock182: {\r\n name: \"Geo Rock #182: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Above The Hive\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_East_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock183: {\r\n name: \"Geo Rock #183: 15 Geo\",\r\n spoiler: \"Kingdom's Edge: Above The Hive\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_East_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock184: {\r\n name: \"Geo Rock #184: 30 Geo\",\r\n spoiler: \"Royal Waterways: Left of Isma's Grove\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Waterways_07\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock185: {\r\n name: \"Geo Rock #185: 56 Geo\",\r\n spoiler: \"The Hive: Outside Grub\",\r\n id: \"Geo Rock Hive (2)\",\r\n sceneName: \"Hive_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock186: {\r\n name: \"Geo Rock #186: 56 Geo\",\r\n spoiler: \"The Hive: Outside Grub\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock187: {\r\n name: \"Geo Rock #187: 56 Geo\",\r\n spoiler: \"The Hive: Outside Grub\",\r\n id: \"Geo Rock Hive (1)\",\r\n sceneName: \"Hive_03\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock188: {\r\n name: \"Geo Rock #188: 56 Geo\",\r\n spoiler: \"The Hive: Entrance\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_01\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock189: {\r\n name: \"Geo Rock #189: 56 Geo\",\r\n spoiler: \"The Hive: Whispering Root\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock190: {\r\n name: \"Geo Rock #190: 56 Geo\",\r\n spoiler: \"The Hive: Whispering Root\",\r\n id: \"Geo Rock Hive (2)\",\r\n sceneName: \"Hive_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock191: {\r\n name: \"Geo Rock #191: 56 Geo\",\r\n spoiler: \"The Hive: Whispering Root\",\r\n id: \"Geo Rock Hive (1)\",\r\n sceneName: \"Hive_02\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock192: {\r\n name: \"Geo Rock #192: 56 Geo\",\r\n spoiler: \"The Hive: Mask Shard Room\",\r\n id: \"Geo Rock Hive\",\r\n sceneName: \"Hive_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock193: {\r\n name: \"Geo Rock #193: 56 Geo\",\r\n spoiler: \"The Hive: Mask Shard Room\",\r\n id: \"Geo Rock Hive (1)\",\r\n sceneName: \"Hive_04\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock194: {\r\n name: \"Geo Rock #194: 15 Geo\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock195: {\r\n name: \"Geo Rock #195: 15 Geo\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_31\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock196: {\r\n name: \"Geo Rock #196: 15 Geo\",\r\n spoiler: \"Deepnest: Nosk Corridor\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_31\",\r\n hitsLeft: \"3\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock197: {\r\n name: \"Geo Rock #197: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (3)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock198: {\r\n name: \"Geo Rock #198: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (4)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock199: {\r\n name: \"Geo Rock #199: 20 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (5)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock200: {\r\n name: \"Geo Rock #200: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock201: {\r\n name: \"Geo Rock #201: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (1)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock202: {\r\n name: \"Geo Rock #202: 30 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (7)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock203: {\r\n name: \"Geo Rock #203: 15 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (2)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock204: {\r\n name: \"Geo Rock #204: 20 Geo\",\r\n spoiler: \"Deepnest: Beast's Den\",\r\n id: \"Geo Rock Deepnest (6)\",\r\n sceneName: \"Deepnest_Spider_Town\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock205: {\r\n name: \"Geo Rock #205: 30 Geo\",\r\n spoiler: \"City of Tears: Pleasure House Elevator\",\r\n id: \"Geo Rock City 1\",\r\n sceneName: \"Ruins_Elevator\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock206: {\r\n name: \"Geo Rock #206: 44 Geo\",\r\n spoiler: \"Kingdom's Edge: Near 420 Geo Rock\",\r\n id: \"Geo Rock Outskirts\",\r\n sceneName: \"Deepnest_East_17\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n geoRock207: {\r\n name: \"Geo Rock #207: 420 Geo\",\r\n spoiler: \"Kingdom's Edge\",\r\n id: \"Giant Geo Egg\",\r\n sceneName: \"Deepnest_East_17\",\r\n hitsLeft: \"0\",\r\n wiki: \"Geo#How_to_Acquire\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Secrets -> World Interactions ############################################## */\r\n\r\n /*worldInteractions: {\r\n h2: \"World Interactions\",\r\n id: \"hk-world-interactions\",\r\n description: `Certain interactions the player can make with NPCs in the game or world objects. All these here don't count towards either 112% Game Completion or Achievements.`,\r\n entries: {\r\n unlockedCompletionRate: {\r\n name: \"World Sense Ability\",\r\n spoiler: \"Temple of the Black Egg: Lore Tablet\",\r\n wiki: \"World_Sense\"\r\n },\r\n spaBugsEncountered: {\r\n name: \"Gossipping Bugs\",\r\n spoiler: \"Forgotten Crossroads: Hot Springs, acquire Mantis Claw\",\r\n wiki: \"Hot_Spring#Forgotten_Crossroads\"\r\n },\r\n jijiDoorUnlocked: {\r\n name: \"Confessor Jiji's Cave Unlocked\",\r\n spoiler: \"Dirtmouth, requires Simple Key\",\r\n wiki: \"Jiji\"\r\n },\r\n bathHouseOpened: {\r\n name: \"Pleasure House Door Unlocked\",\r\n spoiler: \"City of Tears: Right Side Main Hub Area\",\r\n wiki: \"City_of_Tears#Sub-area:_Pleasure_House\"\r\n },\r\n openedWaterwaysManhole: {\r\n name: \"Waterways Manhole Unlocked\",\r\n spoiler: \"City of Tears: below Lemm, use Simple Key\",\r\n wiki: \"Royal_Waterways#How_to_access\"\r\n },\r\n gladeDoorOpened: {\r\n name: \"Spirits' Glade Door Opened\",\r\n spoiler: \"Resting Grounds, Seer: 200 Essence\",\r\n wiki: \"Resting_Grounds#Sub-area:_Spirits'_Glade\"\r\n },\r\n openedCityGate: {\r\n name: \"City of Tears Gate Opened\",\r\n spoiler: \"Fungal Wastes, requires City Crest\",\r\n wiki: \"Fungal_Wastes\"\r\n },\r\n soulSanctumShortcut: {\r\n name: \"Soul Sanctum Shortcut\",\r\n spoiler: \"City of Tears: Cornifer Lift Room, break left wall\",\r\n id: \"Breakable Wall Ruin Lift\",\r\n sceneName: \"Ruins1_31\",\r\n wiki: \"City_of_Tears#Sub-area:_Soul_Sanctum\"\r\n },\r\n waterwaysGate: {\r\n name: \"Waterways Gate Opened\",\r\n spoiler: \"Royal Waterways: Cornifer Room, use lever\",\r\n wiki: \"Royal_Waterways\"\r\n },\r\n watcherChandelier: {\r\n name: \"Chandelier Dropped\",\r\n spoiler: \"City of Tears: Watcher Knights Room, break ceiling\",\r\n wiki: \"Watcher_Knight#In-game_events\"\r\n },\r\n colosseumHiddenHotSpring: {\r\n name: \"Hidden Hot Spring\",\r\n spoiler: \"Colosseum of Fools, break wall right of Bench\",\r\n id: \"Breakable Wall_Silhouette\",\r\n sceneName: \"Room_Colosseum_02\",\r\n wiki: \"Colosseum_of_Fools#Description\"\r\n },\r\n stagEggInspected: {\r\n name: \"Stag Nest Egg Inspected\",\r\n spoiler: \"Howling Cliffs: Top of Stag Nest\",\r\n wiki: \"Howling_Cliffs#Sub-area:_Stag_Nest\"\r\n },\r\n deepnestBridgeCollapsed: {\r\n name: \"Deepnest Entry Bridge Collapsed\",\r\n spoiler: \"Fungal Wastes, left of Spore Shroom\",\r\n wiki: \"Deepnest#How_to_access\"\r\n },\r\n maskmakerUnmasked1: {\r\n name: \"Mask Maker Unmasked\",\r\n spoiler: \"Deepnest, use Desolate Dive on Mask Maker\",\r\n wiki: \"Mask_Maker#In-game_events\"\r\n },\r\n bankerAccountPurchased: {\r\n name: \"Bank Account Opened\",\r\n spoiler: \"100 Geo: Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n millibelleLeft: {\r\n name: \"Banker Disappeared\",\r\n spoiler: \"Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n millibelleCheckedStand: {\r\n name: \"Banker Stand Investigated\",\r\n spoiler: \"Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n bankerSpaMet: {\r\n name: \"Found & Talked to Millibelle\",\r\n spoiler: \"City of Tears: Hot Springs, Simple Key\",\r\n wiki: \"Millibelle\"\r\n },\r\n millibelleReclaimedAllGeo: {\r\n name: \"Reclaimed All Geo\",\r\n spoiler: \"City of Tears: Hot Springs, Millibelle the Thief\",\r\n wiki: \"Millibelle\"\r\n },\r\n elderbugGaveFlower: {\r\n name: \"Delicate Flower: Elderbug\",\r\n spoiler: \"Deliver from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenGodseekerFlower: {\r\n name: \"Delicate Flower: Godseeker\",\r\n spoiler: \"Possible after completing 2 Pantheons\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenOroFlower: {\r\n name: \"Delicate Flower: Nailmaster Oro\",\r\n spoiler: \"D. from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenWhiteLadyFlower: {\r\n name: \"Delicate Flower: White Lady\",\r\n spoiler: \"Deliver from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n givenEmilitiaFlower: {\r\n name: \"Delicate Flower: Emilitia\",\r\n spoiler: \"Deliver from Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower#List_of_Possible_Recipients\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ###################################### Secrets -> Secret Rooms ############################################## */\r\n\r\n /*secretRooms: {\r\n h2: \"Secret Rooms\",\r\n id: \"hk-secret-rooms\",\r\n description: `Certain Secret Rooms in the game. Grimm's Tent Secret is missable when the player will Banish the Troupe or complete the Ritual.`,\r\n entries: {\r\n grimmTentSecretRoom: {\r\n name: \"Grimm's Tent: Secret Room (missable)\",\r\n spoiler: \"Dirtmouth: inside Grimm's Tent\",\r\n id: \"Secret Mask\",\r\n sceneName: \"Grimm_Main_Tent\",\r\n wiki: \"Dirtmouth#The_Grimm_Troupe.27s_Tents\"\r\n },\r\n towerOfLoveSecretRoom: {\r\n name: \"Tower of Love: Secret Room\",\r\n spoiler: \"City of Tears: near The Collector's Map\",\r\n id: \"secret sound_grub room\",\r\n sceneName: \"Ruins2_11\",\r\n wiki: \"Collector#Trivia\"\r\n },\r\n weaversDenSecretRoom1: {\r\n name: \"Weaver's Den: Secret Room #1\",\r\n spoiler: \"Deepnest: inside Weaver's Den\",\r\n id: \"Breakable Wall\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Deepnest#Sub-area:_Weavers.27_Den\"\r\n },\r\n weaversDenSecretRoom2: {\r\n name: \"Weaver's Den: Secret Room #2\",\r\n spoiler: \"Deepnest: inside Weaver's Den\",\r\n id: \"Breakable Wall Waterways\",\r\n sceneName: \"Deepnest_45_v02\",\r\n wiki: \"Deepnest#Sub-area:_Weavers.27_Den\"\r\n },\r\n pathOfPainEntrance: {\r\n name: \"White Palace: Path of Pain Entrance\",\r\n spoiler: \"Break left wall above lift area\",\r\n id: \"Breakable Wall Ruin Lift\",\r\n sceneName: \"White_Palace_06\",\r\n wiki: \"White_Palace#Sub-area:_Path_of_Pain\"\r\n },\r\n killsBindingSeal: {\r\n name: \"White Palace: Path of Pain\",\r\n spoiler: \"Main Secret Area, After Middle Lift\",\r\n wiki: \"White_Palace#Sub-area:_Path_of_Pain\"\r\n },\r\n whitePalaceSecretRoomVisited: {\r\n name: \"White Palace: Secret Room #1\",\r\n spoiler: \"The Pale King's Workshop\",\r\n wiki: \"White_Palace#The_Pale_King.27s_workshop\"\r\n },\r\n whiteLadyRoom: {\r\n name: \"White Palace: Secret Room #2\",\r\n spoiler: \"White Lady's Room, break floor\",\r\n id: \"Quake Floor\",\r\n sceneName: \"White_Palace_09\",\r\n wiki: \"White_Palace#White_Lady.27s_room\"\r\n },\r\n throneRoomLoreTablet: {\r\n name: \"White Palace: Secret Room #3\",\r\n spoiler: \"Throne Room, break right wall\",\r\n id: \"Breakable Wall Waterways\",\r\n sceneName: \"White_Palace_09\",\r\n wiki: \"White_Palace#Throne_room_Lore_Tablet\"\r\n },\r\n \r\n //#52 Quake Floor 🗺️ Palace Caged Lever ⌨️ White_Palace_15\r\n //#53 Breakable Wall Waterways 🗺️ Palace Spike Drop ⌨️ White_Palace_12\r\n //#54 Break Floor 1 🗺️ Palace Spike Drop ⌨️ White_Palace_12\r\n \r\n },\r\n },*/\r\n\r\n /* ###################################### Secrets -> Cornifer's Notes ############################################## */\r\n\r\n /*corniferNotes: {\r\n h2: \"Cornifer's Notes\",\r\n id: \"hk-cornifer-notes\",\r\n description: `Cornifer the Cartographer leaves his note on the ground every time he leaves the current area. The note will be at the same spot where Cornifer was met. He leaves an area once a specific condition from that area was met, like defeating a boss or learning a new ability. After reading a note it will stop glowing and the entry will be marked as completed.`,\r\n entries: {\r\n corniferNote1: {\r\n name: \"Note #1: Forgotten Crossroads\",\r\n spoiler: \"Below Big Gruzzer Room\",\r\n id: \"Shiny\",\r\n sceneName: \"Crossroads_33\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote2: {\r\n name: \"Note #2: Greenpath\",\r\n spoiler: \"Room below the Crossroads entrance\",\r\n id: \"Shiny\",\r\n sceneName: \"Fungus1_06\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote3: {\r\n name: \"Note #3: Fungal Wastes\",\r\n spoiler: \"Right of Queen's Station\",\r\n id: \"Shiny\",\r\n sceneName: \"Fungus2_18\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote4: {\r\n name: \"Note #4: Howling Cliffs\",\r\n spoiler: \"Big Main Area on the left side\",\r\n id: \"Shiny\",\r\n sceneName: \"Cliffs_01\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote5: {\r\n name: \"Note #5: City of Tears\",\r\n spoiler: \"Toll Bench left of Soul Sanctum\",\r\n id: \"Shiny\",\r\n sceneName: \"Ruins1_31\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote6: {\r\n name: \"Note #6: Crystal Peak\",\r\n spoiler: \"Left of Central Bench\",\r\n id: \"Shiny\",\r\n sceneName: \"Mines_30\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote7: {\r\n name: \"Note #7: Resting Grounds\",\r\n spoiler: \"Near the Stag Station\",\r\n id: \"Shiny\",\r\n sceneName: \"RestingGrounds_09\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote8: {\r\n name: \"Note #8: Royal Waterways\",\r\n spoiler: \"Near Fungal Wastes exit\",\r\n id: \"Shiny\",\r\n sceneName: \"Waterways_09\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote9: {\r\n name: \"Note #9: Ancient Basin\",\r\n spoiler: \"Below the Tram and Fountain\",\r\n id: \"Shiny\",\r\n sceneName: \"Abyss_04\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n corniferNote10: {\r\n name: \"Note #10: Kingdom's Edge\",\r\n spoiler: \"Below the King's Station entrance\",\r\n id: \"Shiny\",\r\n sceneName: \"Deepnest_East_03\",\r\n wiki: \"Cornifer#Locations\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################ Game Statistics ################### */\r\n\r\n /*statistics: {\r\n h2: \"Game Statistics\",\r\n id: \"hk-statistics\",\r\n description: \"Dedicated to numbers and stats fans. Everything what the game may not always tell you directly, but what can be read from a save file.\",\r\n entries: {\r\n journalEntriesCompleted: {\r\n name: \"Creatures Encountered\",\r\n spoiler: \"Hunter's Journal (158-164 max)\",\r\n spoilerDefault: \"Hunter's Journal\",\r\n max: 164,\r\n maxDefault: 164,\r\n wiki: \"Category:Enemies_(Hollow_Knight)#Compendium\"\r\n },\r\n \r\n //Add 4 remaining to Hunter Notes max\r\n\r\n journalNotesCompleted: {\r\n name: \"Hunter Notes Completed\",\r\n spoiler: \"Hunter's Journal (158-164 max)\",\r\n spoilerDefault: \"Hunter's Journal\",\r\n max: 164,\r\n maxDefault: 164,\r\n wiki: \"Category:Enemies_(Hollow_Knight)#Compendium\"\r\n },\r\n nailDamage: {\r\n name: \"Base Nail Damage\",\r\n spoiler: \"Nailsmith upgrades, City of Tears\",\r\n max: 21,\r\n maxDefault: 21,\r\n wiki: \"Nail#Nail_Upgrades\"\r\n },\r\n // not ghostCoins\r\n geoPool: {\r\n name: \"Shade Geo\",\r\n spoiler: \"Amount of Geo the Shade is currently holding\",\r\n min: 0,\r\n wiki: \"Shade\"\r\n },\r\n soldTrinket1: {\r\n name: \"Wanderer's Journals Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 200,\r\n wiki: \"Wanderer's_Journal\"\r\n },\r\n soldTrinket2: {\r\n name: \"Hallownest Seals Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 450,\r\n wiki: \"Hallownest_Seal\"\r\n },\r\n soldTrinket3: {\r\n name: \"King's Idols Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 800,\r\n wiki: \"King's_Idol\"\r\n },\r\n soldTrinket4: {\r\n name: \"Arcane Eggs Sold\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n geoValue: 1200,\r\n wiki: \"Arcane_Egg\"\r\n },\r\n relicsSoldTotalGeo: {\r\n name: \"Total Geo from Sold Relics\",\r\n spoiler: \"City of Tears: Relic Seeker Lemm\",\r\n wiki: \"Lemm#Collectibles\"\r\n },\r\n ore: {\r\n name: \"Pale Ore\",\r\n spoiler: \"Current amount of Pale Ore in inventory\",\r\n wiki: \"Pale_Ore\"\r\n },\r\n simpleKeys: {\r\n name: \"Simple Keys\",\r\n spoiler: \"Current amount of Simple Keys in inventory\",\r\n wiki: \"Simple_Key\"\r\n },\r\n rancidEggs: {\r\n name: \"Rancid Eggs\",\r\n spoiler: \"Current amount of Rancid Eggs in inventory\",\r\n wiki: \"Rancid_Egg\"\r\n },\r\n jinnEggsSold: {\r\n name: \"Rancid Eggs Sold\",\r\n spoiler: \"Dirtmouth: Jinn, Steel Soul Mode only\",\r\n wiki: \"Jinn\"\r\n },\r\n xunFlowerBrokeTimes: {\r\n name: \"Delicate Flowers Destroyed\",\r\n spoiler: \"Grey Mourner, Traitor's Child Grave\",\r\n wiki: \"Delicate_Flower\"\r\n },\r\n itemsDiscovered: {\r\n id: \"itemsDiscovered\",\r\n name: \"Interactables\",\r\n spoiler: \"Not A. | Activated | Discovered\",\r\n wiki: \"Category:Exploration_(Hollow_Knight)\",\r\n notActivated: 0,\r\n activated: 0,\r\n discoveredTotal: 0\r\n },\r\n bankerBalance: {\r\n name: \"Bank Account Balance\",\r\n spoiler: \"Fog Canyon: Millibelle the Banker\",\r\n wiki: \"Millibelle\"\r\n },\r\n whiteDefenderDefeats: {\r\n name: \"White Defender Times Defeated\",\r\n spoiler: \"Royal Waterways (5 max)\",\r\n max: 5,\r\n maxDefault: 5,\r\n wiki: \"White_Defender\"\r\n },\r\n greyPrinceDefeats: {\r\n name: \"Grey Prince Zote Times Defeated\",\r\n spoiler: \"Dirtmouth (10 max)\",\r\n max: 10,\r\n maxDefault: 10,\r\n wiki: \"Grey_Prince_Zote\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################################################# Godhome Statistics ############################################## */\r\n\r\n /*godhomeStatistics: {\r\n h2: \"Godhome Statistics\",\r\n id: \"hk-godhome-statistics\",\r\n description: \"Everything in Godhome, that didn't fit any other category.\",\r\n entries: {\r\n seenGGWastes: {\r\n name: \"Tuner Memory\",\r\n spoiler: \"Requires completing 3 Pantheons, 2% chance\",\r\n wiki: \"Godhome#Tuner_Memory\"\r\n },\r\n blueRoomDoorUnlocked: {\r\n name: \"Lifeblood Door Open\",\r\n spoiler: \"Complete any 8 Pantheon bindings total\",\r\n wiki: \"Godhome#Locked_Lifeblood_Room\"\r\n },\r\n killedVoidIdol_1: {\r\n name: \"Journal: Void Idol Attuned\",\r\n spoiler: \"Hall of Gods: Defeat All (Attuned)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n killedVoidIdol_2: {\r\n name: \"Journal: Void Idol Ascended\",\r\n spoiler: \"Hall of Gods: Defeat All (Ascended)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n killedVoidIdol_3: {\r\n name: \"Journal: Void Idol Radiant\",\r\n spoiler: \"Hall of Gods: Defeat All (Radiant)\",\r\n wiki: \"Void_Idol\"\r\n },\r\n killedGodseekerMask: {\r\n name: \"Journal: Weathered Mask\",\r\n spoiler: \"Land of Storms: All Pantheons & Bindings\",\r\n wiki: \"Weathered_Mask\"\r\n },\r\n zoteStatueWallBroken: {\r\n name: \"Intruder Discovered\",\r\n spoiler: \"Hall of Gods: Zote Statue (upper right)\",\r\n wiki: \"Hall_of_Gods#Zote\"\r\n },\r\n ordealAchieved: {\r\n name: \"The Eternal Ordeal\",\r\n spoiler: \"Reach 57 Zotelings defeated\",\r\n wiki: \"Eternal_Ordeal\"\r\n }\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Master #################################################### */\r\n\r\n /*pantheonOfTheMaster: {\r\n h2: \"P1 – Pantheon of the Master\",\r\n id: \"hk-pantheon-master\",\r\n property: \"bossDoorStateTier1\",\r\n description: \"Seek the Gods of Nail and Shell\",\r\n entries: {\r\n unlocked: {\r\n name: \"P1 Unlocked\",\r\n spoiler: \"Defeat P1 bosses in the game world to unlock\",\r\n wiki: \"Pantheon_of_the_Master\"\r\n },\r\n completed: {\r\n name: \"P1 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Master\"\r\n },\r\n boundNail: {\r\n name: \"P1 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P1 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P1 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P1 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P1 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P1 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Artist #################################################### */\r\n\r\n /*pantheonOfTheArtist: {\r\n h2: \"P2 – Pantheon of the Artist\",\r\n id: \"hk-pantheon-artist\",\r\n property: \"bossDoorStateTier2\",\r\n description: \"Seek the God Inspired\",\r\n entries: {\r\n unlocked: {\r\n name: \"P2 Unlocked\",\r\n spoiler: \"Defeat P2 bosses in the game world to unlock\",\r\n wiki: \"Pantheon_of_the_Artist\"\r\n },\r\n completed: {\r\n name: \"P2 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Artist\"\r\n },\r\n boundNail: {\r\n name: \"P2 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P2 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P2 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P2 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P2 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P2 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Sage #################################################### */\r\n\r\n /*pantheonOfTheSage: {\r\n h2: \"P3 – Pantheon of the Sage\",\r\n id: \"hk-pantheon-sage\",\r\n property: \"bossDoorStateTier3\",\r\n description: \"Seek the God of Wealth and Power\",\r\n entries: {\r\n unlocked: {\r\n name: \"P3 Unlocked\",\r\n spoiler: \"Defeat P3 bosses in the game world to unlock\",\r\n wiki: \"Pantheon_of_the_Sage\"\r\n },\r\n completed: {\r\n name: \"P3 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Sage\"\r\n },\r\n boundNail: {\r\n name: \"P3 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P3 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P3 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P3 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P3 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P3 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of the Knight #################################################### */\r\n\r\n /*pantheonOfTheKnight: {\r\n h2: \"P4 – Pantheon of the Knight\",\r\n id: \"hk-pantheon-knight\",\r\n property: \"bossDoorStateTier4\",\r\n description: \"Seek the Pure God\",\r\n entries: {\r\n unlocked: {\r\n name: \"P4 Unlocked\",\r\n spoiler: \"Complete 3 previous Pantheons to unlock\",\r\n wiki: \"Pantheon_of_the_Knight\"\r\n },\r\n completed: {\r\n name: \"P4 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_the_Knight\"\r\n },\r\n boundNail: {\r\n name: \"P4 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P4 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P4 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P4 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P4 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P4 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Pantheon of Hallownest #################################################### */\r\n\r\n /*pantheonOfHallownest: {\r\n h2: \"P5 – Pantheon of Hallownest\",\r\n id: \"hk-pantheon-hallownest\",\r\n property: \"bossDoorStateTier5\",\r\n description: \"Seek the Kingdom's Forgotten Light\",\r\n entries: {\r\n unlocked: {\r\n name: \"P5 Unlocked\",\r\n spoiler: \"Complete 4 previous Pantheons to unlock\",\r\n wiki: \"Pantheon_of_Hallownest\"\r\n },\r\n completed: {\r\n name: \"P5 Completed\",\r\n spoiler: \"Defeat all bosses in a row to complete\",\r\n wiki: \"Pantheon_of_Hallownest\"\r\n },\r\n boundNail: {\r\n name: \"P5 Binding: Nail\",\r\n spoiler: \"Complete with the Nail binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundShell: {\r\n name: \"P5 Binding: Shell\",\r\n spoiler: \"Complete with the Shell binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundCharms: {\r\n name: \"P5 Binding: Charms\",\r\n spoiler: \"Complete with the Charm binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n boundSoul: {\r\n name: \"P5 Binding: Soul\",\r\n spoiler: \"Complete with the Soul binding active\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n allBindings: {\r\n name: \"P5 All Bindings\",\r\n spoiler: \"Complete with all bindings active at once\",\r\n wiki: \"Pantheons#Bindings\"\r\n },\r\n noHits: {\r\n name: \"P5 No Damage\",\r\n spoiler: \"Complete without taking a single hit\",\r\n wiki: \"Pantheons\"\r\n },\r\n },\r\n },*/\r\n\r\n /* ################################################### Hall of Gods ############################################################# */\r\n\r\n /*hallOfGods: {\r\n h2: \"Hall of Gods\",\r\n id: \"hk-hall-of-gods\",\r\n property: \"statueState\",\r\n description: \"Bottom of Godhome. Detecting what bosses have been unlocked and defeated on all three difficulty levels: Attuned, Ascended and Radiant.\",\r\n entries: {\r\n GruzMotherUnlocked: {\r\n name: \"Gruz Mother: Unlocked\",\r\n spoiler: \"I sleep amongst winding roads\",\r\n id: \"GruzMother\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n GruzMotherAttuned: {\r\n name: \"Gruz Mother: Attuned\",\r\n spoiler: \"Slumbering god of fertility\",\r\n id: \"GruzMother\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n GruzMotherAscended: {\r\n name: \"Gruz Mother: Ascended\",\r\n spoiler: \"Slumbering god of fertility\",\r\n id: \"GruzMother\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n GruzMotherRadiant: {\r\n name: \"Gruz Mother: Radiant\",\r\n spoiler: \"Slumbering god of fertility\",\r\n id: \"GruzMother\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Gruz_Mother\"\r\n },\r\n VengeflyUnlocked: {\r\n name: \"Vengefly King: Unlocked\",\r\n spoiler: \"I keep guard above a verdant land\",\r\n id: \"Vengefly\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n VengeflyAttuned: {\r\n name: \"Vengefly King: Attuned\",\r\n spoiler: \"Vicious god of territories\",\r\n id: \"Vengefly\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n VengeflyAscended: {\r\n name: \"Vengefly King: Ascended\",\r\n spoiler: \"Vicious god of territories\",\r\n id: \"Vengefly\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n VengeflyRadiant: {\r\n name: \"Vengefly King: Radiant\",\r\n spoiler: \"Vicious god of territories\",\r\n id: \"Vengefly\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Vengefly_King\"\r\n },\r\n BroodingMawlekUnlocked: {\r\n name: \"Brooding Mawlek: Unlocked\",\r\n spoiler: \"I call out to no one...\",\r\n id: \"BroodingMawlek\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n BroodingMawlekAttuned: {\r\n name: \"Brooding Mawlek: Attuned\",\r\n spoiler: \"...hidden by roads and highways\",\r\n id: \"BroodingMawlek\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n BroodingMawlekAscended: {\r\n name: \"Brooding Mawlek: Ascended\",\r\n spoiler: \"Lonely god of the nest\",\r\n id: \"BroodingMawlek\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n BroodingMawlekRadiant: {\r\n name: \"Brooding Mawlek: Radiant\",\r\n spoiler: \"Lonely god of the nest\",\r\n id: \"BroodingMawlek\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Brooding_Mawlek\"\r\n },\r\n FalseKnightUnlocked: {\r\n name: \"False Knight: Unlocked\",\r\n spoiler: \"I protect the weak in...\",\r\n id: \"FalseKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FalseKnightAttuned: {\r\n name: \"False Knight: Attuned\",\r\n spoiler: \"...the heart of the crossroads\",\r\n id: \"FalseKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FalseKnightAscended: {\r\n name: \"False Knight: Ascended\",\r\n spoiler: \"Angry god of the downtrodden\",\r\n id: \"FalseKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FalseKnightRadiant: {\r\n name: \"False Knight: Radiant\",\r\n spoiler: \"Angry god of the downtrodden\",\r\n id: \"FalseKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#False_Knight\"\r\n },\r\n FailedChampionUnlocked: {\r\n name: \"Failed Champion: Unlocked\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n FailedChampionAttuned: {\r\n name: \"Failed Champion: Attuned\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n FailedChampionAscended: {\r\n name: \"Failed Champion: Ascended\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n FailedChampionRadiant: {\r\n name: \"Failed Champion: Radiant\",\r\n spoiler: \"Baleful god of regrets\",\r\n id: \"FailedChampion\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Failed_Champion\"\r\n },\r\n Hornet1Unlocked: {\r\n name: \"Hornet Protector: Unlocked\",\r\n spoiler: \"I watch over lush pathways...\",\r\n id: \"Hornet1\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet1Attuned: {\r\n name: \"Hornet Protector: Attuned\",\r\n spoiler: \"...and distant ash-swept graves\",\r\n id: \"Hornet1\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet1Ascended: {\r\n name: \"Hornet Protector: Ascended\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet1\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet1Radiant: {\r\n name: \"Hornet Protector: Radiant\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet1\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Hornet_Protector\"\r\n },\r\n Hornet2Unlocked: {\r\n name: \"Hornet Sentinel: Unlocked\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n Hornet2Attuned: {\r\n name: \"Hornet Sentinel: Attuned\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n Hornet2Ascended: {\r\n name: \"Hornet Sentinel: Ascended\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n Hornet2Radiant: {\r\n name: \"Hornet Sentinel: Radiant\",\r\n spoiler: \"God protector of a fading land\",\r\n id: \"Hornet2\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Hornet_Sentinel\"\r\n },\r\n MegaMossChargerUnlocked: {\r\n name: \"Massive Moss Charger: Unlocked\",\r\n spoiler: \"Together we hunt in paths...\",\r\n id: \"MegaMossCharger\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n MegaMossChargerAttuned: {\r\n name: \"Massive Moss Charger: Attuned\",\r\n spoiler: \"...overgrown with green\",\r\n id: \"MegaMossCharger\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n MegaMossChargerAscended: {\r\n name: \"Massive Moss Charger: Ascended\",\r\n spoiler: \"Restless god of those...\",\r\n id: \"MegaMossCharger\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n MegaMossChargerRadiant: {\r\n name: \"Massive Moss Charger: Radiant\",\r\n spoiler: \"...who band together\",\r\n id: \"MegaMossCharger\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Massive_Moss_Charger\"\r\n },\r\n FlukemarmUnlocked: {\r\n name: \"Flukemarm: Unlocked\",\r\n spoiler: \"I lie within a maze of pipes\",\r\n id: \"Flukemarm\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n FlukemarmAttuned: {\r\n name: \"Flukemarm: Attuned\",\r\n spoiler: \"Alluring god of motherhood\",\r\n id: \"Flukemarm\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n FlukemarmAscended: {\r\n name: \"Flukemarm: Ascended\",\r\n spoiler: \"Alluring god of motherhood\",\r\n id: \"Flukemarm\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n FlukemarmRadiant: {\r\n name: \"Flukemarm: Radiant\",\r\n spoiler: \"Alluring god of motherhood\",\r\n id: \"Flukemarm\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Flukemarm\"\r\n },\r\n MantisLordsUnlocked: {\r\n name: \"Mantis Lords: Unlocked\",\r\n spoiler: \"We watch over a village of warriors\",\r\n id: \"MantisLords\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsAttuned: {\r\n name: \"Mantis Lords: Attuned\",\r\n spoiler: \"Noble sister gods of combat\",\r\n id: \"MantisLords\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsAscended: {\r\n name: \"Mantis Lords: Ascended\",\r\n spoiler: \"Noble sister gods of combat\",\r\n id: \"MantisLords\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsRadiant: {\r\n name: \"Mantis Lords: Radiant\",\r\n spoiler: \"Noble sister gods of combat\",\r\n id: \"MantisLords\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Mantis_Lords\"\r\n },\r\n MantisLordsExtraUnlocked: {\r\n name: \"Sisters of Battle: Unlocked\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n MantisLordsExtraAttuned: {\r\n name: \"Sisters of Battle: Attuned\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n MantisLordsExtraAscended: {\r\n name: \"Sisters of Battle: Ascended\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n MantisLordsExtraRadiant: {\r\n name: \"Sisters of Battle: Radiant\",\r\n spoiler: \"Revered gods of a proud tribe\",\r\n id: \"MantisLordsExtra\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Sisters_of_Battle\"\r\n },\r\n OblobblesUnlocked: {\r\n name: \"Oblobbles: Unlocked\",\r\n spoiler: \"Together we are chained in a strange colosseum\",\r\n id: \"Oblobbles\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n OblobblesAttuned: {\r\n name: \"Oblobbles: Attuned\",\r\n spoiler: \"Lover gods of faith and devotion\",\r\n id: \"Oblobbles\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n OblobblesAscended: {\r\n name: \"Oblobbles: Ascended\",\r\n spoiler: \"Lover gods of faith and devotion\",\r\n id: \"Oblobbles\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n OblobblesRadiant: {\r\n name: \"Oblobbles: Radiant\",\r\n spoiler: \"Lover gods of faith and devotion\",\r\n id: \"Oblobbles\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Oblobbles\"\r\n },\r\n HiveKnightUnlocked: {\r\n name: \"Hive Knight: Unlocked\",\r\n spoiler: \"I guard the heart of the hive for my Queen\",\r\n id: \"HiveKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n HiveKnightAttuned: {\r\n name: \"Hive Knight: Attuned\",\r\n spoiler: \"Watchful god of duty\",\r\n id: \"HiveKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n HiveKnightAscended: {\r\n name: \"Hive Knight: Ascended\",\r\n spoiler: \"Watchful god of duty\",\r\n id: \"HiveKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n HiveKnightRadiant: {\r\n name: \"Hive Knight: Radiant\",\r\n spoiler: \"Watchful god of duty\",\r\n id: \"HiveKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Hive_Knight\"\r\n },\r\n BrokenVesselUnlocked: {\r\n name: \"Broken Vessel: Unlocked\",\r\n spoiler: \"I sleep in the deep caves below the world\",\r\n id: \"BrokenVessel\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n BrokenVesselAttuned: {\r\n name: \"Broken Vessel: Attuned\",\r\n spoiler: \"Broken shell of an empty god\",\r\n id: \"BrokenVessel\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n BrokenVesselAscended: {\r\n name: \"Broken Vessel: Ascended\",\r\n spoiler: \"Broken shell of an empty god\",\r\n id: \"BrokenVessel\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n BrokenVesselRadiant: {\r\n name: \"Broken Vessel: Radiant\",\r\n spoiler: \"Broken shell of an empty god\",\r\n id: \"BrokenVessel\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Broken_Vessel\"\r\n },\r\n LostKinUnlocked: {\r\n name: \"Lost Kin: Unlocked\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n LostKinAttuned: {\r\n name: \"Lost Kin: Attuned\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n LostKinAscended: {\r\n name: \"Lost Kin: Ascended\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n LostKinRadiant: {\r\n name: \"Lost Kin: Radiant\",\r\n spoiler: \"Lost god of the Abyss\",\r\n id: \"LostKin\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Lost_Kin\"\r\n },\r\n NoskUnlocked: {\r\n name: \"Nosk: Unlocked\",\r\n spoiler: \"I wait patiently in a dark nest of predators\",\r\n id: \"Nosk\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskAttuned: {\r\n name: \"Nosk: Attuned\",\r\n spoiler: \"Everchanging god of the faceless\",\r\n id: \"Nosk\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskAscended: {\r\n name: \"Nosk: Ascended\",\r\n spoiler: \"Everchanging god of the faceless\",\r\n id: \"Nosk\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskRadiant: {\r\n name: \"Nosk: Radiant\",\r\n spoiler: \"Everchanging god of the faceless\",\r\n id: \"Nosk\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Nosk\"\r\n },\r\n NoskHornetUnlocked: {\r\n name: \"Winged Nosk: Unlocked\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n NoskHornetAttuned: {\r\n name: \"Winged Nosk: Attuned\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n NoskHornetAscended: {\r\n name: \"Winged Nosk: Ascended\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n NoskHornetRadiant: {\r\n name: \"Winged Nosk: Radiant\",\r\n spoiler: \"Deceptive god assuming a protector's form\",\r\n id: \"NoskHornet\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Winged_Nosk\"\r\n },\r\n CollectorUnlocked: {\r\n name: \"The Collector: Unlocked\",\r\n spoiler: \"I lurk at the peak of a forsaken tower\",\r\n id: \"Collector\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n CollectorAttuned: {\r\n name: \"The Collector: Attuned\",\r\n spoiler: \"Joyful god of protection\",\r\n id: \"Collector\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n CollectorAscended: {\r\n name: \"The Collector: Ascended\",\r\n spoiler: \"Joyful god of protection\",\r\n id: \"Collector\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n CollectorRadiant: {\r\n name: \"The Collector: Radiant\",\r\n spoiler: \"Joyful god of protection\",\r\n id: \"Collector\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#The_Collector\"\r\n },\r\n GodTamerUnlocked: {\r\n name: \"God Tamer: Unlocked\",\r\n spoiler: \"I wait, weapon in hand, within the colosseum\",\r\n id: \"GodTamer\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n GodTamerAttuned: {\r\n name: \"God Tamer: Attuned\",\r\n spoiler: \"Gallant god of the arena\",\r\n id: \"GodTamer\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n GodTamerAscended: {\r\n name: \"God Tamer: Ascended\",\r\n spoiler: \"Gallant god of the arena\",\r\n id: \"GodTamer\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n GodTamerRadiant: {\r\n name: \"God Tamer: Radiant\",\r\n spoiler: \"Gallant god of the arena\",\r\n id: \"GodTamer\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#God_Tamer\"\r\n },\r\n CrystalGuardian1Unlocked: {\r\n name: \"Crystal Guardian: Unlocked\",\r\n spoiler: \"I rest amongst crystals...\",\r\n id: \"CrystalGuardian1\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian1Attuned: {\r\n name: \"Crystal Guardian: Attuned\",\r\n spoiler: \"...and strange machinery\",\r\n id: \"CrystalGuardian1\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian1Ascended: {\r\n name: \"Crystal Guardian: Ascended\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian1\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian1Radiant: {\r\n name: \"Crystal Guardian: Radiant\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian1\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Crystal_Guardian\"\r\n },\r\n CrystalGuardian2Unlocked: {\r\n name: \"Enraged Guardian: Unlocked\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n CrystalGuardian2Attuned: {\r\n name: \"Enraged Guardian: Attuned\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n CrystalGuardian2Ascended: {\r\n name: \"Enraged Guardian: Ascended\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n CrystalGuardian2Radiant: {\r\n name: \"Enraged Guardian: Radiant\",\r\n spoiler: \"Shining god of greed\",\r\n id: \"CrystalGuardian2\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Enraged_Guardian\"\r\n },\r\n UumuuUnlocked: {\r\n name: \"Uumuu: Unlocked\",\r\n spoiler: \"I sleep submerged in the depths of the archive\",\r\n id: \"Uumuu\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n UumuuAttuned: {\r\n name: \"Uumuu: Attuned\",\r\n spoiler: \"Uncanny god of knowledge\",\r\n id: \"Uumuu\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n UumuuAscended: {\r\n name: \"Uumuu: Ascended\",\r\n spoiler: \"Uncanny god of knowledge\",\r\n id: \"Uumuu\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n UumuuRadiant: {\r\n name: \"Uumuu: Radiant\",\r\n spoiler: \"Uncanny god of knowledge\",\r\n id: \"Uumuu\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Uumuu\"\r\n },\r\n TraitorLordUnlocked: {\r\n name: \"Traitor Lord: Unlocked\",\r\n spoiler: \"I defile the gardens of false royalty\",\r\n id: \"TraitorLord\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n TraitorLordAttuned: {\r\n name: \"Traitor Lord: Attuned\",\r\n spoiler: \"Treacherous god of anger\",\r\n id: \"TraitorLord\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n TraitorLordAscended: {\r\n name: \"Traitor Lord: Ascended\",\r\n spoiler: \"Treacherous god of anger\",\r\n id: \"TraitorLord\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n TraitorLordRadiant: {\r\n name: \"Traitor Lord: Radiant\",\r\n spoiler: \"Treacherous god of anger\",\r\n id: \"TraitorLord\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Traitor_Lord\"\r\n },\r\n GreyPrinceUnlocked: {\r\n name: \"Grey Prince Zote: Unlocked\",\r\n spoiler: \"I serve my Queen inside her dreams\",\r\n id: \"GreyPrince\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n GreyPrinceAttuned: {\r\n name: \"Grey Prince Zote: Attuned\",\r\n spoiler: \"False god conjured by the lonely\",\r\n id: \"GreyPrince\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n GreyPrinceAscended: {\r\n name: \"Grey Prince Zote: Ascended\",\r\n spoiler: \"False god conjured by the lonely\",\r\n id: \"GreyPrince\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n GreyPrinceRadiant: {\r\n name: \"Grey Prince Zote: Radiant\",\r\n spoiler: \"False god conjured by the lonely\",\r\n id: \"GreyPrince\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Grey_Prince_Zote\"\r\n },\r\n MageKnightUnlocked: {\r\n name: \"Soul Warrior: Unlocked\",\r\n spoiler: \"I haunt the halls of a sanctum\",\r\n id: \"MageKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n MageKnightAttuned: {\r\n name: \"Soul Warrior: Attuned\",\r\n spoiler: \"Haunted god of the sanctum\",\r\n id: \"MageKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n MageKnightAscended: {\r\n name: \"Soul Warrior: Ascended\",\r\n spoiler: \"Haunted god of the sanctum\",\r\n id: \"MageKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n MageKnightRadiant: {\r\n name: \"Soul Warrior: Radiant\",\r\n spoiler: \"Haunted god of the sanctum\",\r\n id: \"MageKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Soul_Warrior\"\r\n },\r\n SoulMasterUnlocked: {\r\n name: \"Soul Master: Unlocked\",\r\n spoiler: \"Immortal, I rule the Sanctum\",\r\n id: \"SoulMaster\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulMasterAttuned: {\r\n name: \"Soul Master: Attuned\",\r\n spoiler: \"Covetous god of soul\",\r\n id: \"SoulMaster\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulMasterAscended: {\r\n name: \"Soul Master: Ascended\",\r\n spoiler: \"Covetous god of soul\",\r\n id: \"SoulMaster\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulMasterRadiant: {\r\n name: \"Soul Master: Radiant\",\r\n spoiler: \"Covetous god of soul\",\r\n id: \"SoulMaster\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Soul_Master\"\r\n },\r\n SoulTyrantUnlocked: {\r\n name: \"Soul Tyrant: Unlocked\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n SoulTyrantAttuned: {\r\n name: \"Soul Tyrant: Attuned\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n SoulTyrantAscended: {\r\n name: \"Soul Tyrant: Ascended\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n SoulTyrantRadiant: {\r\n name: \"Soul Tyrant: Radiant\",\r\n spoiler: \"Frenzied god of mortality\",\r\n id: \"SoulTyrant\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Soul_Tyrant\"\r\n },\r\n DungDefenderUnlocked: {\r\n name: \"Dung Defender: Unlocked\",\r\n spoiler: \"I protect the pipeways of the kingdom\",\r\n id: \"DungDefender\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n DungDefenderAttuned: {\r\n name: \"Dung Defender: Attuned\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"DungDefender\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n DungDefenderAscended: {\r\n name: \"Dung Defender: Ascended\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"DungDefender\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n DungDefenderRadiant: {\r\n name: \"Dung Defender: Radiant\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"DungDefender\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Dung_Defender\"\r\n },\r\n WhiteDefenderUnlocked: {\r\n name: \"White Defender: Unlocked\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WhiteDefenderAttuned: {\r\n name: \"White Defender: Attuned\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WhiteDefenderAscended: {\r\n name: \"White Defender: Ascended\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WhiteDefenderRadiant: {\r\n name: \"White Defender: Radiant\",\r\n spoiler: \"Kindly god of bravery and honour\",\r\n id: \"WhiteDefender\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#White_Defender\"\r\n },\r\n WatcherKnightsUnlocked: {\r\n name: \"Watcher Knight: Unlocked\",\r\n spoiler: \"We lie dormant, guarding the Spire's peak\",\r\n id: \"WatcherKnights\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n WatcherKnightsAttuned: {\r\n name: \"Watcher Knight: Attuned\",\r\n spoiler: \"Sentinel gods of the spire\",\r\n id: \"WatcherKnights\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n WatcherKnightsAscended: {\r\n name: \"Watcher Knight: Ascended\",\r\n spoiler: \"Sentinel gods of the spire\",\r\n id: \"WatcherKnights\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n WatcherKnightsRadiant: {\r\n name: \"Watcher Knight: Radiant\",\r\n spoiler: \"Sentinel gods of the spire\",\r\n id: \"WatcherKnights\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Watcher_Knight\"\r\n },\r\n NoEyesUnlocked: {\r\n name: \"No Eyes: Unlocked\",\r\n spoiler: \"I lie dreaming in a silent sanctuary\",\r\n id: \"NoEyes\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n NoEyesAttuned: {\r\n name: \"No Eyes: Attuned\",\r\n spoiler: \"Dreamborn god of fear and relief\",\r\n id: \"NoEyes\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n NoEyesAscended: {\r\n name: \"No Eyes: Ascended\",\r\n spoiler: \"Dreamborn god of fear and relief\",\r\n id: \"NoEyes\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n NoEyesRadiant: {\r\n name: \"No Eyes: Radiant\",\r\n spoiler: \"Dreamborn god of fear and relief\",\r\n id: \"NoEyes\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#No_Eyes\"\r\n },\r\n MarmuUnlocked: {\r\n name: \"Marmu: Unlocked\",\r\n spoiler: \"I lie dreaming patiently in a garden\",\r\n id: \"Marmu\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n MarmuAttuned: {\r\n name: \"Marmu: Attuned\",\r\n spoiler: \"Dreamborn god of gardens\",\r\n id: \"Marmu\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n MarmuAscended: {\r\n name: \"Marmu: Ascended\",\r\n spoiler: \"Dreamborn god of gardens\",\r\n id: \"Marmu\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n MarmuRadiant: {\r\n name: \"Marmu: Radiant\",\r\n spoiler: \"Dreamborn god of gardens\",\r\n id: \"Marmu\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Marmu\"\r\n },\r\n GalienUnlocked: {\r\n name: \"Galien: Unlocked\",\r\n spoiler: \"I lie dreaming in darkness, surrounded by predators\",\r\n id: \"Galien\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n GalienAttuned: {\r\n name: \"Galien: Attuned\",\r\n spoiler: \"Dreamborn god of heroic hearts\",\r\n id: \"Galien\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n GalienAscended: {\r\n name: \"Galien: Ascended\",\r\n spoiler: \"Dreamborn god of heroic hearts\",\r\n id: \"Galien\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n GalienRadiant: {\r\n name: \"Galien: Radiant\",\r\n spoiler: \"Dreamborn god of heroic hearts\",\r\n id: \"Galien\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Galien\"\r\n },\r\n MarkothUnlocked: {\r\n name: \"Markoth: Unlocked\",\r\n spoiler: \"I lie dreaming at the edge of the world\",\r\n id: \"Markoth\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n MarkothAttuned: {\r\n name: \"Markoth: Attuned\",\r\n spoiler: \"Dreamborn god of meditation and isolation\",\r\n id: \"Markoth\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n MarkothAscended: {\r\n name: \"Markoth: Ascended\",\r\n spoiler: \"Dreamborn god of meditation and isolation\",\r\n id: \"Markoth\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n MarkothRadiant: {\r\n name: \"Markoth: Radiant\",\r\n spoiler: \"Dreamborn god of meditation and isolation\",\r\n id: \"Markoth\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Markoth\"\r\n },\r\n XeroUnlocked: {\r\n name: \"Xero: Unlocked\",\r\n spoiler: \"I lie dreaming amongst peaceful graves\",\r\n id: \"Xero\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n XeroAttuned: {\r\n name: \"Xero: Attuned\",\r\n spoiler: \"Dreamborn god of faith and betrayal\",\r\n id: \"Xero\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n XeroAscended: {\r\n name: \"Xero: Ascended\",\r\n spoiler: \"Dreamborn god of faith and betrayal\",\r\n id: \"Xero\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n XeroRadiant: {\r\n name: \"Xero: Radiant\",\r\n spoiler: \"Dreamborn god of faith and betrayal\",\r\n id: \"Xero\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Xero\"\r\n },\r\n GorbUnlocked: {\r\n name: \"Gorb: Unlocked\",\r\n spoiler: \"I lie dreaming at a wind-blasted peak\",\r\n id: \"Gorb\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n GorbAttuned: {\r\n name: \"Gorb: Attuned\",\r\n spoiler: \"Dreamborn god of the beyond\",\r\n id: \"Gorb\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n GorbAscended: {\r\n name: \"Gorb: Ascended\",\r\n spoiler: \"Dreamborn god of the beyond\",\r\n id: \"Gorb\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n GorbRadiant: {\r\n name: \"Gorb: Radiant\",\r\n spoiler: \"Dreamborn god of the beyond\",\r\n id: \"Gorb\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Gorb\"\r\n },\r\n ElderHuUnlocked: {\r\n name: \"Elder Hu: Unlocked\",\r\n spoiler: \"I lie dreaming in the wastes\",\r\n id: \"ElderHu\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n ElderHuAttuned: {\r\n name: \"Elder Hu: Attuned\",\r\n spoiler: \"Dreamborn god of travellers and sages\",\r\n id: \"ElderHu\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n ElderHuAscended: {\r\n name: \"Elder Hu: Ascended\",\r\n spoiler: \"Dreamborn god of travellers and sages\",\r\n id: \"ElderHu\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n ElderHuRadiant: {\r\n name: \"Elder Hu: Radiant\",\r\n spoiler: \"Dreamborn god of travellers and sages\",\r\n id: \"ElderHu\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Elder_Hu\"\r\n },\r\n NailmastersUnlocked: {\r\n name: \"Oro & Mato: Unlocked\",\r\n spoiler: \"Together, we stand at a Pantheon's peak\",\r\n id: \"Nailmasters\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n NailmastersAttuned: {\r\n name: \"Oro & Mato: Attuned\",\r\n spoiler: \"Loyal brother gods of the nail\",\r\n id: \"Nailmasters\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n NailmastersAscended: {\r\n name: \"Oro & Mato: Ascended\",\r\n spoiler: \"Loyal brother gods of the nail\",\r\n id: \"Nailmasters\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n NailmastersRadiant: {\r\n name: \"Oro & Mato: Radiant\",\r\n spoiler: \"Loyal brother gods of the nail\",\r\n id: \"Nailmasters\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Oro_.26_Mato\"\r\n },\r\n PaintmasterUnlocked: {\r\n name: \"Paintmaster Sheo: Unlocked\",\r\n spoiler: \"I hone my craft at a Pantheon's peak\",\r\n id: \"Paintmaster\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n PaintmasterAttuned: {\r\n name: \"Paintmaster Sheo: Attuned\",\r\n spoiler: \"Talented god of artists and creators\",\r\n id: \"Paintmaster\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n PaintmasterAscended: {\r\n name: \"Paintmaster Sheo: Ascended\",\r\n spoiler: \"Talented god of artists and creators\",\r\n id: \"Paintmaster\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n PaintmasterRadiant: {\r\n name: \"Paintmaster Sheo: Radiant\",\r\n spoiler: \"Talented god of artists and creators\",\r\n id: \"Paintmaster\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Paintmaster_Sheo\"\r\n },\r\n SlyUnlocked: {\r\n name: \"Nailsage Sly: Unlocked\",\r\n spoiler: \"I await you at a Pantheon's peak\",\r\n id: \"Sly\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n SlyAttuned: {\r\n name: \"Nailsage Sly: Attuned\",\r\n spoiler: \"Cunning god of opportunity\",\r\n id: \"Sly\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n SlyAscended: {\r\n name: \"Nailsage Sly: Ascended\",\r\n spoiler: \"Cunning god of opportunity\",\r\n id: \"Sly\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n SlyRadiant: {\r\n name: \"Nailsage Sly: Radiant\",\r\n spoiler: \"Cunning god of opportunity\",\r\n id: \"Sly\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Nailsage_Sly\"\r\n },\r\n HollowKnightUnlocked: {\r\n name: \"Pure Vessel: Unlocked\",\r\n spoiler: \"This empty god stands at a Pantheon's peak\",\r\n id: \"HollowKnight\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n HollowKnightAttuned: {\r\n name: \"Pure Vessel: Attuned\",\r\n spoiler: \"Mighty god of nothingness\",\r\n id: \"HollowKnight\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n HollowKnightAscended: {\r\n name: \"Pure Vessel: Ascended\",\r\n spoiler: \"Mighty god of nothingness\",\r\n id: \"HollowKnight\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n HollowKnightRadiant: {\r\n name: \"Pure Vessel: Radiant\",\r\n spoiler: \"Mighty god of nothingness\",\r\n id: \"HollowKnight\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Pure_Vessel\"\r\n },\r\n GrimmUnlocked: {\r\n name: \"Grimm: Unlocked\",\r\n spoiler: \"I await the lighting of the lantern\",\r\n id: \"Grimm\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n GrimmAttuned: {\r\n name: \"Grimm: Attuned\",\r\n spoiler: \"Travelling god of the troupe\",\r\n id: \"Grimm\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n GrimmAscended: {\r\n name: \"Grimm: Ascended\",\r\n spoiler: \"Travelling god of the troupe\",\r\n id: \"Grimm\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n GrimmRadiant: {\r\n name: \"Grimm: Radiant\",\r\n spoiler: \"Travelling god of the troupe\",\r\n id: \"Grimm\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Grimm\"\r\n },\r\n NightmareGrimmUnlocked: {\r\n name: \"Nightmare King: Unlocked\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n NightmareGrimmAttuned: {\r\n name: \"Nightmare King: Attuned\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n NightmareGrimmAscended: {\r\n name: \"Nightmare King: Ascended\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n NightmareGrimmRadiant: {\r\n name: \"Nightmare King: Radiant\",\r\n spoiler: \"God of nightmares\",\r\n id: \"NightmareGrimm\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Nightmare_King\"\r\n },\r\n RadianceUnlocked: {\r\n name: \"Radiance: Unlocked\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"isUnlocked\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n RadianceAttuned: {\r\n name: \"Radiance: Attuned\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"completedTier1\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n RadianceAscended: {\r\n name: \"Radiance: Ascended\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"completedTier2\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n RadianceRadiant: {\r\n name: \"Radiance: Radiant\",\r\n spoiler: \"Forgotten god of light\",\r\n id: \"Radiance\",\r\n check: \"completedTier3\",\r\n wiki: \"Hall_of_Gods#Radiance\"\r\n },\r\n },\r\n }*/\r\n\r\n\r\n },\r\n};\r\n\r\nexport default HK;","/* Huge thanks to ManicJamie for his HKTranslator: https://github.com/ManicJamie/HKTranslator */\r\n\r\nconst MAP = {\r\n \"Tutorial_01\": \"King's Pass\",\r\n \"Town\": \"Dirtmouth\",\r\n \"Room_shop\": \"Dirtmouth: Sly's Shop\",\r\n \"Room_Sly_Storeroom\": \"Dirtmouth: Sly's Shop Basement\",\r\n \"Room_Town_Stag_Station\": \"Dirtmouth: Stag Station\",\r\n \"Room_mapper\": \"Dirtmouth: Iselda's Shop\",\r\n \"Room_Bretta\": \"Dirtmouth: Bretta's Room\",\r\n \"Room_Bretta_Basement\": \"Dirtmouth: Bretta's Room Basement\",\r\n \"Room_Ouiji\": \"Dirtmouth: Jiji's Hut\",\r\n \"Room_Jinn\": \"Dirtmouth: Jinn's Hut\",\r\n \"Room_Tram_RG\": \"Upper Tram\",\r\n \"Room_Tram\": \"Lower Tram\",\r\n \"Crossroads_01\": \"Forgotten Crossroads: Well\",\r\n \"Crossroads_02\": \"Forgotten Crossroads: Outside Temple of the Black Egg\",\r\n \"Crossroads_03\": \"Forgotten Crossroads: Outside Stag Station\",\r\n \"Crossroads_04\": \"Forgotten Crossroads: Gruz Mother\",\r\n \"Crossroads_05\": \"Forgotten Crossroads: Central Grub\",\r\n \"Crossroads_06\": \"Forgotten Crossroads: Outside Ancestral Mound\",\r\n \"Crossroads_07\": \"Forgotten Crossroads: Gruzzer Vertical Room\",\r\n \"Crossroads_08\": \"Forgotten Crossroads: Aspid Arena\",\r\n \"Crossroads_09\": \"Forgotten Crossroads: Brooding Mawlek Boss\",\r\n \"Crossroads_10\": \"Forgotten Crossroads: False Knight Arena\",\r\n \"Crossroads_11_alt\": \"Forgotten Crossroads: Greenpath Entrance\",\r\n \"Crossroads_12\": \"Forgotten Crossroads: Corridor to Acid Grub\",\r\n \"Crossroads_13\": \"Forgotten Crossroads: Goam Mask Shard\",\r\n \"Crossroads_14\": \"Forgotten Crossroads: Outside Myla\",\r\n \"Crossroads_15\": \"Forgotten Crossroads: Corridor to Tram\",\r\n \"Crossroads_16\": \"Forgotten Crossroads: Above Lever\",\r\n \"Crossroads_18\": \"Forgotten Crossroads: Fungal Wastes Entrance\",\r\n \"Crossroads_19\": \"Forgotten Crossroads: Before Gruz Mother\",\r\n \"Crossroads_21\": \"Forgotten Crossroads: Outside False Knight\",\r\n \"Crossroads_22\": \"Forgotten Crossroads: Glowing Womb Arena\",\r\n \"Crossroads_25\": \"Forgotten Crossroads: Brooding Mawlek Entrance\",\r\n \"Crossroads_27\": \"Forgotten Crossroads: Outside Tram\",\r\n \"Crossroads_30\": \"Forgotten Crossroads: Hot Spring\",\r\n \"Crossroads_31\": \"Forgotten Crossroads: Spike Grub\",\r\n \"Crossroads_33\": \"Forgotten Crossroads: Cornifer\",\r\n \"Crossroads_35\": \"Forgotten Crossroads: Acid Grub\",\r\n \"Crossroads_36\": \"Forgotten Crossroads: Brooding Mawlek Middle\",\r\n \"Crossroads_37\": \"Forgotten Crossroads: Vessel Fragment\",\r\n \"Crossroads_38\": \"Forgotten Crossroads: Grubfather\",\r\n \"Crossroads_39\": \"Forgotten Crossroads: Corridor Right of Temple of the Black Egg\",\r\n \"Crossroads_40\": \"Forgotten Crossroads: Corridor Right of Central Grub\",\r\n \"Crossroads_42\": \"Forgotten Crossroads: Right of Mask Shard\",\r\n \"Crossroads_43\": \"Forgotten Crossroads: Corridor to Elevator\",\r\n \"Crossroads_45\": \"Forgotten Crossroads: Myla\",\r\n \"Crossroads_46\": \"Forgotten Crossroads: Tram\",\r\n \"Crossroads_47\": \"Forgotten Crossroads: Stag Station\",\r\n \"Crossroads_48\": \"Forgotten Crossroads: Husk Guard Grub\",\r\n \"Crossroads_49\": \"Forgotten Crossroads: Elevator\",\r\n \"Crossroads_52\": \"Forgotten Crossroads: Goam Journal\",\r\n \"Crossroads_ShamanTemple\": \"Forgotten Crossroads: Ancestral Mound\",\r\n \"Room_Mender_House\": \"Forgotten Crossroads: Menderbug House\",\r\n \"Room_Charm_Shop\": \"Forgotten Crossroads: Salubra's Shop\",\r\n \"Room_ruinhouse\": \"Forgotten Crossroads: Rescue Sly Hut\",\r\n \"Room_temple\": \"Forgotten Crossroads: Inside Temple of the Black Egg\",\r\n \"Fungus1_01\": \"Greenpath: Entrance\",\r\n \"Fungus1_01b\": \"Greenpath: Waterfall Bench\",\r\n \"Fungus1_02\": \"Greenpath: First Hornet Sighting\",\r\n \"Fungus1_03\": \"Greenpath: Storerooms\",\r\n \"Fungus1_04\": \"Greenpath: Hornet\",\r\n \"Fungus1_05\": \"Greenpath: Outside Thorns\",\r\n \"Fungus1_06\": \"Greenpath: Cornifer\",\r\n \"Fungus1_07\": \"Greenpath: Outside Hunter\",\r\n \"Fungus1_08\": \"Greenpath: Hunter\",\r\n \"Fungus1_09\": \"Greenpath: Sheo Gauntlet\",\r\n \"Fungus1_10\": \"Greenpath: Acid Bridge\",\r\n \"Fungus1_11\": \"Greenpath: Above Fog Canyon\",\r\n \"Fungus1_12\": \"Greenpath: Massive Moss Charger Corridor\",\r\n \"Fungus1_13\": \"Greenpath: Whispering Root\",\r\n \"Fungus1_14\": \"Greenpath: Thorns of Agony\",\r\n \"Fungus1_15\": \"Greenpath: Outside Sheo\",\r\n \"Fungus1_16_alt\": \"Greenpath: Stag Station\",\r\n \"Fungus1_17\": \"Greenpath: Moss Charger Corridor\",\r\n \"Fungus1_19\": \"Greenpath: Above Sanctuary Bench\",\r\n \"Fungus1_20_v02\": \"Greenpath: Vengefly King\",\r\n \"Fungus1_21\": \"Greenpath: Outside Hornet\",\r\n \"Fungus1_22\": \"Greenpath: Outside Stag Station\",\r\n \"Fungus1_25\": \"Greenpath: Corridor to Lake of Unn\",\r\n \"Fungus1_26\": \"Greenpath: Lake Of Unn\",\r\n \"Fungus1_29\": \"Greenpath: Massive Moss Charger\",\r\n \"Fungus1_30\": \"Greenpath: Below Toll Bench\",\r\n \"Fungus1_31\": \"Greenpath: Toll\",\r\n \"Fungus1_32\": \"Greenpath: Moss Knight Arena\",\r\n \"Fungus1_34\": \"Greenpath: Stone Sanctuary Entrance\",\r\n \"Fungus1_35\": \"Greenpath: Stone Sanctuary\",\r\n \"Fungus1_36\": \"Greenpath: Stone Sanctuary Mask Shard\",\r\n \"Fungus1_37\": \"Greenpath: Stone Sanctuary Bench\",\r\n \"Fungus1_Slug\": \"Greenpath: Unn\",\r\n \"Room_nailmaster_02\": \"Greenpath: Sheo\",\r\n \"Room_Slug_Shrine\": \"Greenpath: Lake of Unn Bench\",\r\n \"Deepnest_01\": \"Fungal Wastes: Deepnest Fall\",\r\n \"Fungus2_01\": \"Fungal Wastes: Queen's Station\",\r\n \"Fungus2_02\": \"Fungal Wastes: Queen's Station Stag\",\r\n \"Fungus2_03\": \"Fungal Wastes: Outside Queen's Station\",\r\n \"Fungus2_04\": \"Fungal Wastes: Below Shrumal Ogres\",\r\n \"Fungus2_05\": \"Fungal Wastes: Shrumal Ogres\",\r\n \"Fungus2_06\": \"Fungal Wastes: Outside Leg Eater\",\r\n \"Fungus2_07\": \"Fungal Wastes: Shrumal Warrior Acid Bridge\",\r\n \"Fungus2_08\": \"Fungal Wastes: Outside Elder Hu\",\r\n \"Fungus2_09\": \"Fungal Wastes: Cloth Corridor\",\r\n \"Fungus2_10\": \"Fungal Wastes: Left Of Pilgrim's Way\",\r\n \"Fungus2_11\": \"Fungal Wastes: Right of Bouncy Mushroom Grub\",\r\n \"Fungus2_12\": \"Fungal Wastes: Mantis Corridor\",\r\n \"Fungus2_13\": \"Fungal Wastes: Bretta Bench\",\r\n \"Fungus2_14\": \"Fungal Wastes: Mantis Village\",\r\n \"Fungus2_15\": \"Fungal Wastes: Mantis Lords\",\r\n \"Fungus2_17\": \"Fungal Wastes: Above Mantis Village\",\r\n \"Fungus2_18\": \"Fungal Wastes: Cornifer\",\r\n \"Fungus2_19\": \"Fungal Wastes: Right Of Spore Shroom\",\r\n \"Fungus2_20\": \"Fungal Wastes: Spore Shroom\",\r\n \"Fungus2_21\": \"Fungal Wastes: Pilgrim's Way\",\r\n \"Fungus2_23\": \"Fungal Wastes: Dashmaster\",\r\n \"Fungus2_26\": \"Fungal Wastes: Leg Eater\",\r\n \"Fungus2_28\": \"Fungal Wastes: Shrumal Warrior Loop\",\r\n \"Fungus2_29\": \"Fungal Wastes: Fungal Core Upper\",\r\n \"Fungus2_30\": \"Fungal Wastes: Fungal Core Lower\",\r\n \"Fungus2_31\": \"Fungal Wastes: Mantis Lords Rewards\",\r\n \"Fungus2_32\": \"Fungal Wastes: Elder Hu\",\r\n \"Fungus2_33\": \"Fungal Wastes: Whispering Root near Fog Canyon\",\r\n \"Fungus2_34\": \"Fungal Wastes: Willoh\",\r\n \"Fungus3_01\": \"Fog Canyon: Upper West Tall\",\r\n \"Fungus3_02\": \"Fog Canyon: Lower West Tall\",\r\n \"Fungus3_03\": \"Fog Canyon: Queen's Gardens Acid Entrance\",\r\n \"Fungus3_24\": \"Fog Canyon: Corridor to Overgrown Mound\",\r\n \"Fungus3_25\": \"Fog Canyon: Cornifer\",\r\n \"Fungus3_25b\": \"Fog Canyon: Corridor to Cornifer\",\r\n \"Fungus3_26\": \"Fog Canyon: Right Tall Area\",\r\n \"Fungus3_27\": \"Fog Canyon: Corridor to Archives\",\r\n \"Fungus3_28\": \"Fog Canyon: Charm Notch\",\r\n \"Fungus3_30\": \"Fog Canyon: Lifeblood Cocoon Room\",\r\n \"Fungus3_35\": \"Fog Canyon: Millibelle\",\r\n \"Fungus3_44\": \"Fog Canyon: Overgrown Mound Entrance\",\r\n \"Fungus3_47\": \"Fog Canyon: Teacher's Archives Entrance\",\r\n \"Fungus3_archive\": \"Fog Canyon: Teacher's Archives Bench\",\r\n \"Fungus3_archive_02\": \"Fog Canyon: Uumuu Arena\",\r\n \"Room_Fungus_Shaman\": \"Fog Canyon: Overgrown Mound\",\r\n \"Cliffs_01\": \"Howling Cliffs: Main\",\r\n \"Cliffs_02\": \"Howling Cliffs: Gorb\",\r\n \"Cliffs_03\": \"Howling Cliffs: Stag Nest\",\r\n \"Cliffs_04\": \"Howling Cliffs: Joni's Dark Passage\",\r\n \"Cliffs_05\": \"Howling Cliffs: Joni's Charm Room\",\r\n \"Cliffs_06\": \"Howling Cliffs: Grimm Lantern\",\r\n \"Fungus1_28\": \"Howling Cliffs: Baldur's Shell\",\r\n \"Room_nailmaster\": \"Howling Cliffs: Nailmaster Mato\",\r\n \"Mines_01\": \"Crystal Peak: Desolate Dive Entrance\",\r\n \"Mines_02\": \"Crystal Peak: Dark Entrance\",\r\n \"Mines_03\": \"Crystal Peak: Spike Grub\",\r\n \"Mines_04\": \"Crystal Peak: Conveyor Belts Entrance\",\r\n \"Mines_05\": \"Crystal Peak: Above Spike Grub\",\r\n \"Mines_06\": \"Crystal Peak: Deep Focus Gauntlet\",\r\n \"Mines_07\": \"Crystal Peak: Platform Dark Room to Resting Grounds\",\r\n \"Mines_10\": \"Crystal Peak: Dirtmouth Elevator Exit\",\r\n \"Mines_11\": \"Crystal Peak: Left Of Crystal Guardian\",\r\n \"Mines_13\": \"Crystal Peak: Top Corridor\",\r\n \"Mines_16\": \"Crystal Peak: Grub Mimic\",\r\n \"Mines_17\": \"Crystal Peak: Corridor to Spike Grub\",\r\n \"Mines_18\": \"Crystal Peak: Crystal Guardian Bench\",\r\n \"Mines_19\": \"Crystal Peak: Grub Crushers\",\r\n \"Mines_20\": \"Crystal Peak: Right Tall Room\",\r\n \"Mines_23\": \"Crystal Peak: Hallownest Crown Whispering Root\",\r\n \"Mines_24\": \"Crystal Peak: Hallownest Crown Grub\",\r\n \"Mines_25\": \"Crystal Peak: Hallownest Crown Climb\",\r\n \"Mines_28\": \"Crystal Peak: Outside Crystallized Mound\",\r\n \"Mines_29\": \"Crystal Peak: Dark Bench Room\",\r\n \"Mines_30\": \"Crystal Peak: Cornifer\",\r\n \"Mines_31\": \"Crystal Peak: Crystal Heart Gauntlet\",\r\n \"Mines_32\": \"Crystal Peak: Enraged Guardian Arena\",\r\n \"Mines_33\": \"Forgotten Crossroads: Crystal Peak Dark Toll\",\r\n \"Mines_34\": \"Crystal Peak: Hallownest Crown Peak\",\r\n \"Mines_35\": \"Crystal Peak: Crystallized Mound\",\r\n \"Mines_36\": \"Crystal Peak: Deep Focus Room\",\r\n \"Mines_37\": \"Crystal Peak: Chest Crushers\",\r\n \"Abyss_02\": \"Ancient Basin: Broken Bridge\",\r\n \"Abyss_03\": \"Ancient Basin: Tram\",\r\n \"Abyss_04\": \"Ancient Basin: Fountain\",\r\n \"Abyss_05\": \"Ancient Basin: Palace Grounds\",\r\n \"Abyss_17\": \"Ancient Basin: Cloth\",\r\n \"Abyss_18\": \"Ancient Basin: Corridor to Broken Vessel\",\r\n \"Abyss_19\": \"Ancient Basin: Broken Vessel Grub\",\r\n \"Abyss_20\": \"Ancient Basin: Simple Key\",\r\n \"Abyss_21\": \"Ancient Basin: Monarch Wings\",\r\n \"Abyss_22\": \"Ancient Basin: Hidden Station\",\r\n \"Abyss_06_Core\": \"The Abyss: Main/Core Area\",\r\n \"Abyss_08\": \"The Abyss: Lifeblood Core Room\",\r\n \"Abyss_09\": \"The Abyss: Lighthouse Climb\",\r\n \"Abyss_10\": \"The Abyss: Shade Cloak\",\r\n \"Abyss_12\": \"The Abyss: Abyss Shriek Room\",\r\n \"Abyss_15\": \"The Abyss: Birthplace\",\r\n \"Abyss_16\": \"The Abyss: Corridor to Lighthouse\",\r\n \"Abyss_Lighthouse_room\": \"The Abyss: Inside Lighthouse\",\r\n \"Crossroads_46b\": \"Resting Grounds: Tram\",\r\n \"Crossroads_50\": \"Resting Grounds: Blue Lake\",\r\n \"RestingGrounds_02\": \"Resting Grounds: Xero\",\r\n \"RestingGrounds_04\": \"Resting Grounds: Dream Nail Entrance\",\r\n \"RestingGrounds_05\": \"Resting Grounds: Whispering Root\",\r\n \"RestingGrounds_06\": \"Resting Grounds: Corridor Below Xero\",\r\n \"RestingGrounds_07\": \"Resting Grounds: Seer\",\r\n \"RestingGrounds_08\": \"Resting Grounds: Spirit's Glade\",\r\n \"RestingGrounds_09\": \"Resting Grounds: Stag Station\",\r\n \"RestingGrounds_10\": \"Resting Grounds: Crypts\",\r\n \"RestingGrounds_12\": \"Resting Grounds: Grey Mourner Bench\",\r\n \"RestingGrounds_17\": \"Resting Grounds: Dreamshield Room\",\r\n \"Room_Mansion\": \"Resting Grounds: Grey Mourner Room\",\r\n \"Ruins2_10\": \"Resting Grounds: Elevator\",\r\n \"Abyss_03_c\": \"Kingdom's Edge: Tram\",\r\n \"Deepnest_East_01\": \"Kingdom's Edge: Left of The Hive\",\r\n \"Deepnest_East_02\": \"Kingdom's Edge: Above The Hive\",\r\n \"Deepnest_East_03\": \"Kingdom's Edge: Entrance\",\r\n \"Deepnest_East_04\": \"Kingdom's Edge: Bardoon\",\r\n \"Deepnest_East_06\": \"Kingdom's Edge: Outside Nailmaster Oro\",\r\n \"Deepnest_East_07\": \"Kingdom's Edge: Whispering Root\",\r\n \"Deepnest_East_08\": \"Kingdom's Edge: Great Hopper King's Idol\",\r\n \"Deepnest_East_09\": \"Kingdom's Edge: Corridor Outside Colosseum of Fools\",\r\n \"Deepnest_East_10\": \"Kingdom's Edge: Markoth Arena\",\r\n \"Deepnest_East_11\": \"Kingdom's Edge: Below Camp Bench\",\r\n \"Deepnest_East_12\": \"Kingdom's Edge: Hornet Sentinel Corridor\",\r\n \"Deepnest_East_13\": \"Kingdom's Edge: Camp Bench\",\r\n \"Deepnest_East_14\": \"Kingdom's Edge: Below Nailmaster Oro\",\r\n \"Deepnest_East_14b\": \"Kingdom's Edge: Quick Slash Room\",\r\n \"Deepnest_East_15\": \"Kingdom's Edge: Lifeblood Room\",\r\n \"Deepnest_East_16\": \"Kingdom's Edge: Nailmaster Oro Scarecrow\",\r\n \"Deepnest_East_17\": \"Kingdom's Edge: 420 Geo Rock\",\r\n \"Deepnest_East_18\": \"Kingdom's Edge: Left of Markoth\",\r\n \"Deepnest_East_Hornet\": \"Kingdom's Edge: Hornet Sentinel Arena\",\r\n \"GG_Lurker\": \"Kingdom's Edge: Pale Lurker Arena\",\r\n \"Room_Colosseum_01\": \"Kingdom's Edge: Colosseum of Fools Entrance\",\r\n \"Room_Colosseum_02\": \"Kingdom's Edge: Colosseum of Fools Bench\",\r\n \"Room_Colosseum_Bronze\": \"Colosseum of Fools: Trial of the Warrior Arena\",\r\n \"Room_Colosseum_Gold\": \"Colosseum of Fools: Trial of the Fool Arena\",\r\n \"Room_Colosseum_Silver\": \"Colosseum of Fools: Trial of the Conqueror Arena\",\r\n \"Room_Colosseum_Spectate\": \"Kingdom's Edge: Colosseum Spectators\",\r\n \"Room_nailmaster_03\": \"Kingdom's Edge: Nailmaster Oro Room\",\r\n \"Room_Wyrm\": \"Kingdom's Edge: Cast-Off Shell\",\r\n \"Abyss_01\": \"City of Tears: Broken Elevator\",\r\n \"Crossroads_49b\": \"City of Tears: Elevator to Forgotten Crossroads\",\r\n \"Room_nailsmith\": \"City of Tears: Nailsmith\",\r\n \"Ruins_Bathhouse\": \"City of Tears: Pleasure House Bench\",\r\n \"Ruins_Elevator\": \"City of Tears: Pleasure House Elevator\",\r\n \"Ruins_House_01\": \"City of Tears: Guarded Grub Room\",\r\n \"Ruins_House_02\": \"City of Tears: Gorgeous Husk Room\",\r\n \"Ruins_House_03\": \"City of Tears: Emilitia Room\",\r\n \"Ruins1_01\": \"City of Tears: Pilgrim's Way Entrance\",\r\n \"Ruins1_02\": \"City of Tears: Quirrel Bench\",\r\n \"Ruins1_03\": \"City of Tears: Rafters\",\r\n \"Ruins1_04\": \"City of Tears: Outside Nailsmith\",\r\n \"Ruins1_05\": \"City of Tears: Grub Above Lemm\",\r\n \"Ruins1_05b\": \"City of Tears: Lemm Room\",\r\n \"Ruins1_05c\": \"City of Tears: Rancid Egg Above Lemm\",\r\n \"Ruins1_06\": \"City of Tears: Corridor to City Storerooms\",\r\n \"Ruins1_09\": \"City of Tears: Soul Twister Arena\",\r\n \"Ruins1_17\": \"City of Tears: Whispering Root\",\r\n \"Ruins1_18\": \"City of Tears: Corridor to Watcher's Spire\",\r\n \"Ruins1_23\": \"City of Tears: Soul Sanctum Entrance\",\r\n \"Ruins1_24\": \"City of Tears: Soul Master Arena\",\r\n \"Ruins1_25\": \"City of Tears: Soul Sanctum Right Elevators\",\r\n \"Ruins1_27\": \"City of Tears: Hollow Knight Fountain\",\r\n \"Ruins1_28\": \"City of Tears: City Storerooms\",\r\n \"Ruins1_29\": \"City of Tears: City Storerooms Stag Station\",\r\n \"Ruins1_30\": \"City of Tears: Soul Sanctum Spell Twister Room\",\r\n \"Ruins1_31\": \"City of Tears: Toll Bench Cornifer\",\r\n \"Ruins1_31b\": \"City of Tears: Shade Soul Arena\",\r\n \"Ruins1_32\": \"City of Tears: Soul Master Rewards Room\",\r\n \"Ruins2_01\": \"City of Tears: Watcher's Spire Second Floor\",\r\n \"Ruins2_01_b\": \"City of Tears: Watcher's Spire First Floor\",\r\n \"Ruins2_03\": \"City of Tears: Watcher's Spire Fourth Floor\",\r\n \"Ruins2_03b\": \"City of Tears: Watcher's Spire Third Floor\",\r\n \"Ruins2_04\": \"City of Tears: Right Hub\",\r\n \"Ruins2_05\": \"City of Tears: Above King's Station\",\r\n \"Ruins2_06\": \"City of Tears: King's Station\",\r\n \"Ruins2_07\": \"City of Tears: Grub Below King's Station\",\r\n \"Ruins2_08\": \"City of Tears: King's Station Stag Station\",\r\n \"Ruins2_09\": \"City of Tears: King's Station Vessel Fragment\",\r\n \"Ruins2_10b\": \"City of Tears: Right Elevator\",\r\n \"Ruins2_11\": \"City of Tears: The Collector Arena\",\r\n \"Ruins2_11_b\": \"City of Tears: Tower of Love\",\r\n \"Ruins2_Watcher_Room\": \"City of Tears: Lurien Elevator\",\r\n \"Hive_01\": \"The Hive: Entrance\",\r\n \"Hive_02\": \"The Hive: Whispering Root\",\r\n \"Hive_03\": \"The Hive: Outside Grub\",\r\n \"Hive_03_c\": \"The Hive: Outside Shortcut\",\r\n \"Hive_04\": \"The Hive: Mask Shard Room\",\r\n \"Hive_05\": \"The Hive: Hive Knight Arena\",\r\n \"GG_Pipeway\": \"Royal Waterways: Flukemunga Corridor\",\r\n \"GG_Waterways\": \"Royal Waterways: Junk Pit\",\r\n \"Room_GG_Shortcut\": \"Royal Waterways: Fluke Hermit Room\",\r\n \"Waterways_01\": \"Royal Waterways: Entrance\",\r\n \"Waterways_02\": \"Royal Waterways: Main Bench\",\r\n \"Waterways_03\": \"Royal Waterways: Tuk Room\",\r\n \"Waterways_04\": \"Royal Waterways: Hidden Grub Room\",\r\n \"Waterways_04b\": \"Royal Waterways: Mask Shard Room\",\r\n \"Waterways_05\": \"Royal Waterways: Dung Defender Arena\",\r\n \"Waterways_06\": \"Royal Waterways: Corridor to Broken Elevator\",\r\n \"Waterways_07\": \"Royal Waterways: Left of Isma's Grove\",\r\n \"Waterways_08\": \"Royal Waterways: Outside Flukemarm\",\r\n \"Waterways_09\": \"Royal Waterways: Cornifer\",\r\n \"Waterways_12\": \"Royal Waterways: Flukemarm Arena\",\r\n \"Waterways_13\": \"Royal Waterways: Isma's Grove\",\r\n \"Waterways_14\": \"Royal Waterways: Kingdom's Edge Acid Corridor\",\r\n \"Waterways_15\": \"Royal Waterways: Dung Defender's Cave\",\r\n \"Abyss_03_b\": \"Deepnest: Tram\",\r\n \"Deepnest_01b\": \"Deepnest: Upper Cornifer\",\r\n \"Deepnest_02\": \"Deepnest: Outside Grub Mimics\",\r\n \"Deepnest_03\": \"Deepnest: Left of Hot Spring\",\r\n \"Deepnest_09\": \"Deepnest: Distant Village Stag Station\",\r\n \"Deepnest_10\": \"Deepnest: Distant Village\",\r\n \"Deepnest_14\": \"Deepnest: Failed Tramway Bench\",\r\n \"Deepnest_16\": \"Deepnest: Room Above Lower Cornifer\",\r\n \"Deepnest_17\": \"Deepnest: Garpede Corridor Below Cornifer\",\r\n \"Deepnest_26\": \"Deepnest: Failed Tramway Lifeblood\",\r\n \"Deepnest_26b\": \"Deepnest: Tram Pass Room\",\r\n \"Deepnest_30\": \"Deepnest: Hot Spring\",\r\n \"Deepnest_31\": \"Deepnest: Nosk Corridor\",\r\n \"Deepnest_32\": \"Deepnest: Nosk Arena\",\r\n \"Deepnest_33\": \"Deepnest: Zote Arena\",\r\n \"Deepnest_34\": \"Deepnest: First Devout\",\r\n \"Deepnest_35\": \"Deepnest: Outside Galien\",\r\n \"Deepnest_36\": \"Deepnest: Grub Mimics\",\r\n \"Deepnest_37\": \"Deepnest: Corridor to Tram\",\r\n \"Deepnest_38\": \"Deepnest: Vessel Fragment Challenge Room\",\r\n \"Deepnest_39\": \"Deepnest: Whispering Root\",\r\n \"Deepnest_40\": \"Deepnest: Galien Arena\",\r\n \"Deepnest_41\": \"Deepnest: Midwife Room\",\r\n \"Deepnest_42\": \"Deepnest: Outside Mask Maker\",\r\n \"Deepnest_44\": \"Deepnest: Sharp Shadow Room\",\r\n \"Deepnest_45_v02\": \"Deepnest: Weaver's Den\",\r\n \"Deepnest_Spider_Town\": \"Deepnest: Beast's Den\",\r\n \"Fungus2_25\": \"Deepnest: Lower Cornifer\",\r\n \"Room_Mask_Maker\": \"Deepnest: Mask Maker Room\",\r\n \"Room_spider_small\": \"Deepnest: Brumm Room\",\r\n \"Deepnest_43\": \"Queen's Gardens: Corridor To Deepnest\",\r\n \"Fungus1_23\": \"Queen's Gardens: First Loodle Corridor\",\r\n \"Fungus1_24\": \"Queen's Gardens: Cornifer Room\",\r\n \"Fungus3_04\": \"Queen's Gardens: Before Petra Arena\",\r\n \"Fungus3_05\": \"Queen's Gardens: Petra Arena\",\r\n \"Fungus3_08\": \"Queen's Gardens: Lower Petra Corridor\",\r\n \"Fungus3_10\": \"Queen's Gardens: Main Arena\",\r\n \"Fungus3_11\": \"Queen's Gardens: Whispering Root\",\r\n \"Fungus3_13\": \"Queen's Gardens: Outside Stag Station\",\r\n \"Fungus3_21\": \"Queen's Gardens: Corridor to Traitor Lord\",\r\n \"Fungus3_22\": \"Queen's Gardens: Upper Grub Room\",\r\n \"Fungus3_23\": \"Queen's Gardens: Traitor Lord Arena\",\r\n \"Fungus3_34\": \"Queen's Gardens: Entrance from Fog Canyon\",\r\n \"Fungus3_39\": \"Queen's Gardens: Moss Prophet Room\",\r\n \"Fungus3_49\": \"Queen's Gardens: Traitor's Child Grave\",\r\n \"Fungus3_40\": \"Queen's Gardens: Stag Station\",\r\n \"Fungus3_48\": \"Queen's Gardens: Outside White Lady\",\r\n \"Fungus3_50\": \"Queen's Gardens: Toll Bench\",\r\n \"Room_Queen\": \"Queen's Gardens: White Lady Room\",\r\n \"White_Palace_01\": \"White Palace: Entrance\",\r\n \"White_Palace_02\": \"White Palace: First Kingsmould\",\r\n \"White_Palace_03_hub\": \"White Palace: Main Hub\",\r\n \"White_Palace_04\": \"White Palace: Left of Main Hub\",\r\n \"White_Palace_05\": \"White Palace: Saw Room\",\r\n \"White_Palace_06\": \"White Palace: Balcony\",\r\n \"White_Palace_07\": \"White Palace: Lamp Pogo Room\",\r\n \"White_Palace_08\": \"White Palace: Pale King's Workshop\",\r\n \"White_Palace_09\": \"White Palace: Throne Room\",\r\n \"White_Palace_11\": \"White Palace: Outside\",\r\n \"White_Palace_12\": \"White Palace: Spike Drop Room\",\r\n \"White_Palace_13\": \"White Palace: Thorn Jump Room\",\r\n \"White_Palace_14\": \"White Palace: Hell Corridor\",\r\n \"White_Palace_15\": \"White Palace: Caged Lever Room\",\r\n \"White_Palace_16\": \"White Palace: Saw Climb Room\",\r\n \"White_Palace_17\": \"White Palace: Path of Pain, Lever\",\r\n \"White_Palace_18\": \"White Palace: Path of Pain, Entrance\",\r\n \"White_Palace_19\": \"White Palace: Path of Pain, Vertical\",\r\n \"White_Palace_20\": \"White Palace: Path of Pain, Final\",\r\n \"Dream_Final_Boss\": \"Temple of the Black Egg: Radiance Room\",\r\n \"Room_Final_Boss_Atrium\": \"Temple of the Black Egg: Bench Room\",\r\n \"Room_Final_Boss_Core\": \"Temple of the Black Egg: Hollow Knight Room\",\r\n \"Grimm_Divine\": \"Dirtmouth: Divine's Tent\",\r\n \"Grimm_Main_Tent\": \"Dirtmouth: Grimm's Tent\",\r\n \"Grimm_Nightmare\": \"Dream: Nightmare King Room\",\r\n \"Dream_01_False_Knight\": \"Dream: Failed Champion Room\",\r\n \"Dream_02_Mage_Lord\": \"Dream: Soul Tyrant Room\",\r\n \"Dream_03_Infected_Knight\": \"Dream: Lost Kin Room\",\r\n \"Dream_04_White_Defender\": \"Dream: White Defender Room\",\r\n \"Dream_Abyss\": \"Dream: Abyss\",\r\n \"Dream_Backer_Shrine\": \"Dream: Outside Shrine of Believers\",\r\n \"Dream_Guardian_Hegemol\": \"Dream: Herrah Room\",\r\n \"Dream_Guardian_Lurien\": \"Dream: Lurien Room\",\r\n \"Dream_Guardian_Monomon\": \"Dream: Monomon Room\",\r\n \"Dream_Mighty_Zote\": \"Dream: Grey Prince Zote Room\",\r\n \"Dream_Nailcollection\": \"Dream: Dreamnail Room\",\r\n \"Dream_Room_Believer_Shrine\": \"Dream: Shrine of Believers\",\r\n \"GG_Atrium\": \"Godhome: Atrium\",\r\n \"GG_Atrium_Roof\": \"Godhome: Roof\",\r\n \"GG_Blue_Room\": \"Godhome: Lifeblood Room\",\r\n \"GG_Land_Of_Storms\": \"Godhome: Land of Storms\",\r\n \"GG_Mighty_Zote\": \"Godhome: Zote Eternal Ordeal\",\r\n \"GG_Unlock_Wastes\": \"Godhome: Godtuner Room\",\r\n \"GG_Workshop\": \"Godhome: Hall of Gods\"\r\n};\r\n\r\nexport default MAP;","/* ---------------- Load main Hollow Knight database files ----------------- */\r\n\r\nimport MAP from \"./hk-dictionary.js\";\r\n\r\n/* -------------------------- Functions ----------------------------- */\r\n\r\n/**\r\n * Switches global variable to a \"completed\" symbol. Adds +1 or +2 to percent property.\r\n */\r\n function SetIconGreen(section = {}, entry = \"\") {\r\n\r\n /* Increase section percentage except the Game Status and Hints sections */\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n case \"hk-hints\":\r\n break;\r\n\r\n // Hunter's Journal entries\r\n case \"hk-journal\":\r\n section.percent++;\r\n section.midPercent++;\r\n break;\r\n\r\n default:\r\n section.percent++;\r\n }\r\n\r\n section.entries[entry].icon = \"green\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a \"partially completed\" symbol (prevents blurring the textPrefix).\r\n */\r\nfunction SetIconPartial(section = {}, entry = \"\") {\r\n\r\n section.entries[entry].icon = \"partial\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a \"partially completed\" symbol (prevents blurring whole entry).\r\n */\r\nfunction SetIconPartialJournal(section = {}, entry = \"\") {\r\n\r\n /* Increase Hunter's Journal entries discovered amount */\r\n switch (section.id) {\r\n\r\n case \"hk-journal\":\r\n section.midPercent++;\r\n break;\r\n }\r\n\r\n section.entries[entry].icon = \"partialJournal\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a \"not completed\" symbol\r\n */\r\nfunction SetIconRed(section = {}, entry = \"\") {\r\n\r\n section.entries[entry].icon = \"red\";\r\n}\r\n\r\n/**\r\n * Switches global variable to no symbol (span with left padding)\r\n */\r\nfunction SetIconNone(section = {}, entry = \"\") {\r\n\r\n section.entries[entry].icon = \"none\";\r\n}\r\n\r\n/**\r\n * Switches global variable to a chosen symbol\r\n */\r\n function SetIcon(section = {}, entry = \"\", icon = \"\") {\r\n\r\n section.entries[entry].icon = icon;\r\n}\r\n\r\n/**\r\n * Checks the length of a JavaScript Object like Array.length\r\n * @param {object} object JavaScript Object\r\n * @return {number} length of the Object\r\n */\r\nfunction ObjectLength(object) {\r\n let length = 0;\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n ++length;\r\n }\r\n }\r\n return length;\r\n}\r\n\r\n/**\r\n * Returns a translated map location name string.\r\n * @param {string} mapCode Code of the Hollow Knight map location the game developers use\r\n * @param {object} dictionary Main data source for translation\r\n */\r\nfunction TranslateMapName(mapCode, dictionary = MAP) {\r\n\r\n let translation = mapCode;\r\n if (dictionary.hasOwnProperty(mapCode)) translation = dictionary[mapCode];\r\n\r\n return translation;\r\n}\r\n\r\n/**\r\n * Generates database entries text. Provides an easy filling solution.\r\n * @param {array} objectArray \r\n * @param {string} searchText \r\n * @param {string} entryName \r\n * @param {string} entryDB \r\n * @param {string} wiki \r\n */\r\nfunction GenerateDatabaseEntries(objectArray, searchText = \"\", entryName = \"\", entryDB = \"\", wiki = \"\") {\r\n\r\n let fillText = \"\";\r\n let count = 0;\r\n\r\n for (let i = 0, ln = objectArray.length; i < ln; i++) {\r\n\r\n /* if (objectArray[i].id.includes(searchText)) { */\r\n if (objectArray[i].id === searchText) {\r\n\r\n count++;\r\n\r\n fillText += `\r\n ${entryDB}${count}: {\r\n name: \"${entryName} #${count}\",\r\n spoiler: \"${TranslateMapName(objectArray[i].sceneName)}\",\r\n id: \"${objectArray[i].id}\",\r\n sceneName: \"${objectArray[i].sceneName}\",\r\n wiki: \"${wiki}\"\r\n },`;\r\n }\r\n }\r\n\r\n return fillText;\r\n}\r\n\r\n/* ------------------------- Exports ------------------------------- */\r\n\r\nexport {\r\n SetIconGreen,\r\n SetIconPartial,\r\n SetIconPartialJournal,\r\n SetIconRed,\r\n SetIconNone,\r\n SetIcon,\r\n ObjectLength,\r\n TranslateMapName,\r\n GenerateDatabaseEntries\r\n};","import {\r\n LoadSaveFile\r\n} from \"./LoadSaveFile.js\";\r\n\r\n/* ------------------------ Load image files (necessary for Webpack) ---------------------------------------------------------- */\r\n\r\nimport HEALTH_MASK_IMAGE from \"../img/health-mask.png\";\r\nimport HEALTH_MASK_STEEL_IMAGE from \"../img/health-mask-steel.png\";\r\nimport SILKBAR_LEFT_IMAGE from \"../img/silkbar-left.png\";\r\nimport SILKBAR_MIDDLE_IMAGE from \"../img/silkbar-middle.png\";\r\nimport SILKBAR_RIGHT_IMAGE from \"../img/silkbar-right.png\";\r\n/*import NOTCH_IMAGE from \"../img/notch.png\";\r\nimport NOTCH_FILLED_IMAGE from \"../img/notch-filled.png\";\r\nimport NOTCH_OVERCHARMED_IMAGE from \"../img/notch-overcharmed.png\";*/\r\nimport ROSARIES_IMAGE from \"../img/rosaries.png\";\r\nimport ROSARIES_SHADE_IMAGE from \"../img/cocoon.png\";\r\nimport SHELL_SHARDS_IMAGE from \"../img/shell-shards.png\";\r\n\r\n/* ------------------------ Crest Type ---------------------------------------------------------- */\r\n\r\nimport ARCHITECT_CREST_IMAGE from \"../img/architect-crest.png\";\r\nimport BEAST_CREST_IMAGE from \"../img/beast-crest.png\";\r\nimport HUNTER_CREST_IMAGE from \"../img/hunter-crest.png\";\r\nimport REAPER_CREST_IMAGE from \"../img/reaper-crest.png\";\r\nimport SHAMAN_CREST_IMAGE from \"../img/shaman-crest.png\";\r\nimport WANDERER_CREST_IMAGE from \"../img/wanderer-crest.png\";\r\nimport WITCH_CREST_IMAGE from \"../img/witch-crest.png\";\r\n\r\n/* ------------------------- Constants ---------------------------------------------------------------------------------------- */\r\n\r\n// const DATA_UNKNOWN = \"Data unknown\";\r\nconst SYMBOL_FALSE = \"\"; // \"❌ \"\r\nconst SYMBOL_TRUE = \"\"; // \"✅ \"\r\nconst SYMBOL_PARTIAL = \"\"; // \"✔ \"\r\nconst SYMBOL_CLOCK = \"\"; // \"🕑 \"\r\nconst SYMBOL_FILE = \"\"; // \"📁\"\r\nconst SYMBOL_BINDING_NAIL = \"\"; // Nail Binding\r\nconst SYMBOL_BINDING_SHELL = \"\"; // Shell Binding\r\nconst SYMBOL_BINDING_CHARMS = \"\"; // Charm Binding\r\nconst SYMBOL_BINDING_SOUL = \"\"; // Soul Binding\r\nconst SYMBOL_BINDING_ALL = \"\"; // All Bindings\r\nconst SYMBOL_ATTUNED = \"\"; // Attuned\r\nconst SYMBOL_ASCENDED = \"\"; // Ascended\r\nconst SYMBOL_RADIANT = \"\"; // Radiant\r\nconst SYMBOL_EMPTY = \"\"; // No symbol\r\nconst FLEUR_DIVIDE = \"\";\r\nconst WIKI_LINK = \"https://hollowknightsilksong.wiki.fextralife.com/\";\r\n\r\nconst ROOT = document.documentElement;\r\nconst SCROLL_BUTTON = document.querySelector(\".scroll-up-button\");\r\n\r\n/* -------------------------- Variables --------------------------------------------------------------------------------------- */\r\n\r\nlet benchmarkTimes = {\r\n LoadSaveFile: {\r\n name: \"LoadSaveFile()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n CheckCompletion: {\r\n name: \"HKCheckCompletion()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n GenerateInnerHTML: {\r\n name: \"GenerateInnerHTML()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n HKReadTextArea: {\r\n name: \"HKReadTextArea()\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n },\r\n Total: {\r\n name: \"Total\",\r\n timeStart: 0,\r\n timeEnd: 0\r\n }\r\n};\r\n\r\n\r\n/* ######################################################################################### */\r\n\r\nfunction Benchmark(bench) {\r\n\r\n let result = 0;\r\n\r\n for (let time in bench) {\r\n\r\n if (bench[time].timeStart !== 0 && bench[time].timeEnd !== 0) {\r\n\r\n result = bench[time].timeEnd - bench[time].timeStart;\r\n console.info(`${bench[time].name} time (ms) = %c${result.toFixed(2)}`, `color: #008cdc; font-weight: 700;`);\r\n }\r\n bench[time].timeStart = 0;\r\n bench[time].timeEnd = 0;\r\n }\r\n}\r\n\r\nfunction ScrollToElement(element) {\r\n\r\n /* Scroll to the element top */\r\n element.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\"\r\n });\r\n}\r\n\r\nfunction ShowElement(element) {\r\n\r\n element.classList.add(\"visible-block\");\r\n element.classList.add(\"opacity-full\");\r\n element.classList.remove(\"hidden\");\r\n}\r\n\r\nfunction HideElement(element) {\r\n\r\n element.classList.remove(\"visible-block\");\r\n element.classList.remove(\"opacity-full\");\r\n element.classList.add(\"hidden\");\r\n}\r\n\r\nfunction TogglePageScrollElement(root, element, ratio) {\r\n\r\n /* Maximum number of pixels that can be scrolled by the user */\r\n let scrollTotal = root.scrollHeight - root.clientHeight;\r\n\r\n if ((root.scrollTop / scrollTotal) > ratio) {\r\n /* Show button */\r\n ShowElement(element);\r\n } else {\r\n /* Hide button */\r\n HideElement(element);\r\n }\r\n}\r\n\r\n\r\n/* ################################### Optimized Functions ########################################################################## */\r\n\r\n\r\nfunction GenerateInnerHTML(db) {\r\n\r\n // start benchmarking\r\n benchmarkTimes.GenerateInnerHTML.timeStart = performance.now();\r\n\r\n let sections = db.sections;\r\n\r\n /* console.log(sections); */\r\n\r\n let entries = {};\r\n let obj = {\r\n icon: \"\",\r\n iconClass: \"\",\r\n textPrefix: \"\",\r\n textSuffix: \"\",\r\n wiki: \"\",\r\n div: `
`,\r\n b: [\"\", \"\"],\r\n p: \"\",\r\n span: [\"\", \"\"],\r\n spoiler: [\"\", \"\"],\r\n spoilerAfter: \"\",\r\n };\r\n\r\n let finalHTMLFill = \"\";\r\n let textFill = \"\";\r\n\r\n let Img = \"\";SILKBAR_LEFT_IMAGE\r\n let maskNormal = ``;\r\n let maskSteel = ``;\r\n let silkBarLeft = ``;\r\n let silkBarMiddle = ``;\r\n let silkBarRight = ``;\r\n //let notchNormalImage = ``;\r\n //let notchFilledImage = ``;\r\n //let notchOvercharmedImage = ``;\r\n let rosariesNormalImage = ``;\r\n let rosariesShadeImage = ``;\r\n let shellShardsImage = ``;\r\n let div = `
`;\r\n let divFlex = `
`;\r\n\r\n //Crest\r\n let hunterCrestImage = ``;\r\n let architectCrestImage = ``;\r\n let beastCrestImage = ``;\r\n let reaperCrestImage = ``;\r\n let shamanCrestImage = ``;\r\n let wandererCrestImage = ``;\r\n let witchCrestImage = ``;\r\n\r\n\r\n /* ############################## create all main entries ########################################################################## */\r\n\r\n\r\n for (let section in sections) {\r\n\r\n textFill = \"\";\r\n\r\n /* ############################# Tab Switch buttons and Large Section
s for switching ############################## */\r\n /* Important: Ending Tab
s are at \"End the Tab divs\" */\r\n\r\n switch (section) {\r\n\r\n /* Main % */\r\n case \"crests\":\r\n\r\n textFill += [\r\n `
`;*/\r\n\r\n break;\r\n }\r\n\r\n entries = sections[section].entries;\r\n\r\n /* ####################### Section div id start ########################## */\r\n\r\n /* starts a new
with the current section id */\r\n textFill += SectionStart(sections[section]);\r\n\r\n /* creates a
tag for the current section and fills with current%/max%\r\n If the save file was not analyzed, then fill only max% on blue background */\r\n if (db.saveAnalyzed === true) {\r\n textFill += CompletionFill(sections[section]);\r\n } else {\r\n textFill += CompletionFillNoSave(sections[section]);\r\n }\r\n\r\n\r\n /* ######################## Different behaviour depending on the section ###################################################### */\r\n\r\n\r\n switch (section) {\r\n\r\n /* ############### Game Status (intro) ################ */\r\n\r\n case \"intro\":\r\n\r\n /* ############## Create each single entry (intro) ############### */\r\n\r\n for (let entry in entries) {\r\n\r\n obj.b = [\"\", \"\"];\r\n obj.p = \"\";\r\n obj.span = [\"\", \"\"];\r\n obj.div = div;\r\n\r\n /* -------- Icons (next to each entry) --------- */\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n\r\n switch (entries[entry].icon) {\r\n\r\n case \"clock\":\r\n obj.icon = SYMBOL_CLOCK;\r\n break;\r\n case \"green\":\r\n obj.icon = SYMBOL_TRUE;\r\n break;\r\n case \"partial\":\r\n obj.icon = SYMBOL_PARTIAL;\r\n break;\r\n case \"revealed\":\r\n obj.icon = SYMBOL_EMPTY;\r\n break;\r\n case \"red\":\r\n obj.icon = SYMBOL_FALSE;\r\n break;\r\n default:\r\n obj.icon = SYMBOL_EMPTY;\r\n }\r\n } else {\r\n obj.icon = SYMBOL_FALSE;\r\n }\r\n\r\n obj.textPrefix = entries[entry].name;\r\n obj.textSuffix = entries[entry].spoiler;\r\n obj.spoilerAfter = \"\";\r\n\r\n /* Different text and images for each entry in the \"Game Status\" (intro) section */\r\n\r\n switch (entry) {\r\n case \"gameCompletion\":\r\n obj.textSuffix = `${obj.textSuffix} %`;\r\n obj.spoilerAfter = ` ${entries[entry].spoilerAfter}`;\r\n obj.span[1] = \"\";\r\n\r\n break;\r\n\r\n case \"gameCompletionExtended\":\r\n obj.spoilerAfter = ` ${entries[entry].spoilerAfter}`;\r\n obj.span[1] = \"\";\r\n\r\n break;\r\n\r\n case \"health\":\r\n\r\n /* ----------------- Horizontal Line after save version ---------------- */\r\n textFill += FLEUR_DIVIDE;\r\n\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n (entries[entry].permadeathMode) ? Img = maskSteel: Img = maskNormal;\r\n\r\n for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += Img;\r\n }\r\n\r\n obj.textSuffix += `${obj.p}(${entries[entry].amountTotal})`;\r\n\r\n obj.p = \"\";\r\n break;\r\n\r\n case \"silk\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n Img = silkBarMiddle;\r\n\r\n obj.textSuffix += silkBarLeft;\r\n\r\n for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += Img;\r\n }\r\n obj.textSuffix += silkBarRight\r\n\r\n\r\n obj.textSuffix += `${obj.p}(${entries[entry].amountTotal})`;\r\n\r\n obj.p = \"\";\r\n break;\r\n\r\n case \"crests\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n /* First, check filled (used) notches and fill them (skips if no filled notches) */\r\n /*if (entries[entry].amountFilled > 0) {\r\n for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += notchFilledImage;\r\n }\r\n }*/\r\n\r\n /* Second, check overcharmed notches and fill them (skips if player is not overcharmed) */\r\n /*if (entries[entry].amountOvercharmed > 0) {\r\n for (let i = 0, total = entries[entry].amountOvercharmed; i < total; i++) {\r\n obj.textSuffix += notchOvercharmedImage;\r\n }\r\n }*/\r\n\r\n /* Last, fill all unused notches */\r\n /*if (entries[entry].amountUnused > 0) {\r\n for (let i = 0, total = entries[entry].amountUnused; i < total; i++) {\r\n obj.textSuffix += notchNormalImage;\r\n }\r\n }*/\r\n \r\n /*for (let i = 0, total = entries[entry].amountTotal; i < total; i++) {\r\n obj.textSuffix += notchNormalImage;\r\n }*/\r\n\r\n if (entries[entry].hunter) obj.textSuffix += hunterCrestImage;\r\n if (entries[entry].toolmaster) obj.textSuffix += architectCrestImage ;\r\n if (entries[entry].beast) obj.textSuffix += beastCrestImage ;\r\n if (entries[entry].reaper) obj.textSuffix += reaperCrestImage ;\r\n if (entries[entry].shaman) obj.textSuffix += shamanCrestImage ;\r\n if (entries[entry].wanderer) obj.textSuffix += wandererCrestImage ;\r\n if (entries[entry].witch) obj.textSuffix += witchCrestImage ;\r\n\r\n\r\n obj.textSuffix += `${obj.p}(${entries[entry].amountTotal})`;\r\n\r\n break;\r\n\r\n case \"rosaries\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n obj.textSuffix += `${rosariesNormalImage}${entries[entry].amount}`;\r\n // Show Shade Rosaries value and image only if Shade has at least 1 Rosary on it\r\n if (entries[entry].amountShade > 0) obj.textSuffix += `${obj.p}+${rosariesShadeImage}${entries[entry].amountShade}`;\r\n\r\n // Show also total Rosaries (Rosaries + Shade Rosaries) if player has at least 1 Rosary alongside the shade rosaries\r\n if (entries[entry].amount > 0 && entries[entry].amountShade > 0) {\r\n obj.textSuffix += `${obj.p}=${obj.p}${entries[entry].amountTotal}`;\r\n }\r\n\r\n obj.p = \"\";\r\n break;\r\n \r\n case \"shellShards\":\r\n obj.div = divFlex;\r\n obj.span = [\"\", \"\"];\r\n\r\n obj.textSuffix += `${shellShardsImage}${entries[entry].amount}`;\r\n\r\n obj.p = \"\";\r\n break;\r\n\r\n default:\r\n }\r\n\r\n textFill += SingleEntryFill(obj);\r\n }\r\n\r\n break;\r\n\r\n /* #################### Hints (hints) #################### */\r\n\r\n case \"hints\":\r\n obj.b = [\"\", \"\"];\r\n obj.span = [\"\", \"\"];\r\n obj.icon = \"\";\r\n obj.textPrefix = \"\";\r\n obj.div = div;\r\n\r\n /* display only one (current) hint */\r\n obj.textSuffix = entries[sections[section].current].spoiler;\r\n\r\n textFill += SingleEntryFill(obj);\r\n\r\n break;\r\n\r\n /* ######################### Create all other sections ################################################################## */\r\n\r\n default:\r\n\r\n /* ###################### Create section descriptions under each H2 title ##################### */\r\n\r\n if (sections[section].hasOwnProperty(\"description\")) {\r\n textFill += SectionDescription(sections[section]);\r\n }\r\n\r\n /* ###################### Create each single entry (from all other sections) ##################### */\r\n\r\n for (let entry in entries) {\r\n\r\n /* obj.p = \"\"; */\r\n obj.p = \"\";\r\n obj.span = [\"\", \"\"];\r\n obj.spoiler = [\"\", \"\"];\r\n obj.div = div;\r\n obj.textPrefix = entries[entry].name;\r\n obj.textSuffix = `— ${entries[entry].spoiler}`;\r\n obj.wiki = entries[entry].wiki;\r\n\r\n /* -------- Icons (next to each entry) --------- */\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n\r\n switch (entries[entry].icon) {\r\n\r\n case \"clock\":\r\n obj.icon = SYMBOL_CLOCK;\r\n break;\r\n\r\n case \"green\":\r\n obj.icon = SYMBOL_TRUE;\r\n\r\n /* -------- Prevents hiding as spoiler when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n\r\n case \"partial\":\r\n obj.icon = SYMBOL_PARTIAL;\r\n break;\r\n\r\n case \"revealed\":\r\n obj.icon = SYMBOL_EMPTY;\r\n /* -------- Prevents textSuffix blurring when a player has already discovered the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n\r\n case \"partialJournal\":\r\n obj.icon = SYMBOL_PARTIAL;\r\n\r\n /* -------- Prevents textSuffix blurring when a player has already discovered the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n\r\n case \"bindingNail\":\r\n obj.icon = SYMBOL_BINDING_NAIL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingShell\":\r\n obj.icon = SYMBOL_BINDING_SHELL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingCharms\":\r\n obj.icon = SYMBOL_BINDING_CHARMS;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingSoul\":\r\n obj.icon = SYMBOL_BINDING_SOUL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"bindingAll\":\r\n obj.icon = SYMBOL_BINDING_ALL;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"attuned\":\r\n obj.icon = SYMBOL_ATTUNED;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"ascended\":\r\n obj.icon = SYMBOL_ASCENDED;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"radiant\":\r\n obj.icon = SYMBOL_RADIANT;\r\n\r\n /* -------- Prevents blurring when a player has already completed the entry --------- */\r\n obj.span[0] = \"\";\r\n break;\r\n \r\n case \"red\":\r\n obj.icon = SYMBOL_FALSE;\r\n break;\r\n\r\n default:\r\n obj.icon = SYMBOL_EMPTY;\r\n }\r\n } else {\r\n obj.icon = SYMBOL_FALSE;\r\n }\r\n\r\n /* assign the appropriate spoiler class name depending on the completion check (for blurring names) */\r\n if (entries[entry].hasOwnProperty(\"icon\")) {\r\n switch (entries[entry].icon) {\r\n\r\n case \"red\":\r\n case \"none\":\r\n obj.iconClass = \" spoiler-red blurred\";\r\n break;\r\n\r\n default:\r\n /* -------- Prevents TextPrefix blurring when a player has already discovered the entry --------- */\r\n obj.iconClass = \"\";\r\n }\r\n } else {\r\n obj.iconClass = \"\";\r\n }\r\n\r\n obj.b = [``, \"\"];\r\n\r\n if (entries[entry].hasOwnProperty(\"amount\")) {\r\n if (entries[entry].hasOwnProperty(\"disabled\")) {\r\n if (entries[entry].disabled !== true) {\r\n obj.textPrefix += `: ${entries[entry].amount}`;\r\n }\r\n } else {\r\n obj.textPrefix += `: ${entries[entry].amount}`;\r\n }\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"amountTotal\")) {\r\n obj.textPrefix += ` / ${entries[entry].amountTotal}`;\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"id\")) {\r\n\r\n switch (entries[entry].id) {\r\n\r\n case \"geoRocks\":\r\n case \"itemsDiscovered\":\r\n obj.textPrefix += `: ${entries[entry].notActivated} | ${entries[entry].activated} | ${entries[entry].discoveredTotal}`;\r\n\r\n break;\r\n\r\n default:\r\n }\r\n }\r\n\r\n if (entries[entry].hasOwnProperty(\"disabled\")) {\r\n if (entries[entry].disabled === true) {\r\n obj.textPrefix = `${obj.textPrefix}`;\r\n }\r\n }\r\n\r\n if (obj.textPrefix.includes(\"\")) obj.textSuffix = `${obj.textSuffix}`;\r\n\r\n /* textFill += SingleEntryFill(section, entries[entry]); */\r\n textFill += SingleEntryFill(obj);\r\n\r\n } /* end for (let entry in entries) */\r\n } /* end switch (section) - central */\r\n\r\n /* ############# Cumulate all section texts into one variable for final HTML filling. End section div tag ############### */\r\n\r\n finalHTMLFill += `${textFill}\\n
\\n\\n`;\r\n\r\n /* ################## End the Tab divs (must be after section ending div) ################# */\r\n\r\n switch (section) {\r\n\r\n /* ending the tabs */\r\n case \"toolPouchUpgrades\": // Main %\r\n case \"huntersJournal\": // Journal\r\n case \"flea\": // Collectibles\r\n\r\n /*case \"toolPouchUpgrades\": // Main %\r\n case \"achievementsBosses\": // Essentials %\r\n case \"huntersJournal\": // Journal\r\n case \"items\": // Collectibles\r\n case \"geoRocks\": // Geo Caches\r\n case \"corniferNotes\": // Secrets\r\n case \"statistics\": // Statistics\r\n case \"hallOfGods\": // Godmaster*/\r\n\r\n finalHTMLFill += `
`;\r\n\r\n break;\r\n\r\n }\r\n\r\n } /* end for (let section in sections) */\r\n\r\n /* console.groupCollapsed(\"finalHTMLFill\");\r\n console.log(finalHTMLFill);\r\n console.groupEnd(); */\r\n\r\n /* ################################## Horizontal line ############################################################################# */\r\n\r\n finalHTMLFill += FLEUR_DIVIDE;\r\n\r\n /* --------------- Final single HTML access and fill here ------------------ */\r\n\r\n document.getElementById(\"generated\").innerHTML = finalHTMLFill;\r\n\r\n /* make tab switch buttons working (on click) - must run after inner HTML generation is finished */\r\n\r\n document.querySelectorAll(\".tab-switch\").forEach((button) => {\r\n\r\n button.addEventListener(\"click\", (e) => {\r\n PageSwitchTab(e.target.name);\r\n });\r\n });\r\n\r\n /* Check local storage first, and set the last selected Tab on the page (remembers last clicked tab) */\r\n\r\n if (StorageAvailable('localStorage')) {\r\n\r\n if (localStorage.getItem(\"hkTabActive\")) {\r\n PageSwitchTab(localStorage.getItem(\"hkTabActive\"));\r\n } else {\r\n PageSwitchTab(\"main\");\r\n }\r\n }\r\n\r\n // finish benchmarking\r\n benchmarkTimes.GenerateInnerHTML.timeEnd = performance.now();\r\n}\r\n\r\nfunction SectionDescription(section) {\r\n\r\n return `
\\n`;\r\n}\r\n\r\n/**\r\n * Replaces the h2 titles with max percent values as read from the database\r\n */\r\nfunction CompletionFillNoSave(section) {\r\n\r\n let id = \"\";\r\n let h2 = \"\";\r\n let h2id = \"\";\r\n let percentBox = \"\"; // Percent Box\r\n let symbol = \"\";\r\n let fullString = \"\";\r\n\r\n id = section.id;\r\n h2 = section.h2;\r\n h2id = \"h2-\" + section.id;\r\n\r\n /* Display % only when showing Main Game Completion % sections */\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n case \"hk-crests\":\r\n case \"hk-Needleupgrades\":\r\n case \"hk-redTools\":\r\n case \"hk-blueTools\":\r\n case \"hk-yellowTools\":\r\n case \"hk-equipment\":\r\n case \"hk-skills\":\r\n case \"hk-silkHeart\":\r\n case \"hk-miscellaneous\":\r\n case \"hk-spoolFragments\":\r\n case \"hk-maskshards\":\r\n case \"hk-craftingKitUpgrades\":\r\n case \"hk-toolPouchUpgrades\":\r\n\r\n /*case \"hk-charms\":\r\n case \"hk-bosses\":\r\n case \"hk-nailupgrades\":\r\n case \"hk-nailarts\":\r\n case \"hk-spells\":\r\n case \"hk-vesselfragments\":\r\n case \"hk-dreamnail\":\r\n case \"hk-warriordreams\":\r\n case \"hk-dreamers\":\r\n case \"hk-colosseum\":\r\n case \"hk-grimmtroupe\":\r\n case \"hk-lifeblood\":\r\n case \"hk-godmaster\":*/\r\n\r\n symbol = \"%\";\r\n\r\n break;\r\n\r\n default:\r\n\r\n symbol = \"\";\r\n }\r\n\r\n percentBox = `
`;\r\n if (!section.hasOwnProperty(\"maxPercent\")) percentBox = \"\";\r\n\r\n fullString += `
${h2}${percentBox}
`;\r\n\r\n // ----------------- add True Completion h2 title ---------------- //\r\n switch (id) {\r\n\r\n case \"hk-intro\":\r\n fullString += `
True Completion
0.00%
`;\r\n break;\r\n default:\r\n }\r\n\r\n return fullString;\r\n}\r\n\r\n/**\r\n * Replaces the h2 titles with a current percent/max percent values as read from the database\r\n */\r\nfunction CompletionFill(section) {\r\n\r\n let h2 = section.h2;\r\n let h2id = `
`;\r\n let cl = \"\";\r\n let clGreen = \"box-green\";\r\n let clRed = \"box-red\";\r\n let cp = 0; // current Percent\r\n let midP = 0; // middle Percent\r\n let mp = 0; // max Percent\r\n let trueCompletionCurrent = 0;\r\n let trueCompletionTotal = 0;\r\n let trueCompletionPercent = 0; // True Completion %\r\n let symbol = \"\";\r\n let percentBox = \"\";\r\n let fullString = \"\";\r\n\r\n (section.hasOwnProperty(\"percent\")) ? cp = section.percent: cp = 0;\r\n\r\n (section.hasOwnProperty(\"midPercent\")) ? midP = section.midPercent: midP = 0;\r\n\r\n // Don't use percent-box for Essentials, Achievements, Statistics etc.\r\n if (!section.hasOwnProperty(\"maxPercent\")) {\r\n percentBox = \"\";\r\n }\r\n // otherwise use percent-box with values cp/mp%\r\n else {\r\n\r\n mp = section.maxPercent;\r\n\r\n // Shards and Fragments correct calculations\r\n if (section.id === \"hk-maskshards\") {\r\n let perc = section.percent;\r\n (perc % 4) ? cp = Math.floor(perc / 4): cp = perc / 4;\r\n } else if (section.id === \"hk-spoolFragments\") {\r\n let perc = section.percent;\r\n (perc % 2) ? cp = Math.floor(perc / 2): cp = perc / 2;\r\n }\r\n\r\n // switches the box to red when a section (h2) is 0\r\n if (cp === 0) {\r\n cl = ` ${clRed}`;\r\n }\r\n // switches the box to green when a section (h2) is completed\r\n else if (cp === mp) {\r\n cl = ` ${clGreen}`;\r\n }\r\n // default is blue (partially completed and starting value)\r\n else cl = \"\";\r\n\r\n // Select which symbol or text to display (/ or something else depending on the section)\r\n switch (section.id) {\r\n\r\n // needed for Game Status to show percentage properly (adds a slash for all boxes except the Game Status one)\r\n case \"hk-intro\":\r\n break;\r\n\r\n // Hunter's Journal entries, Completed/Encountered of Total, e.g. 23/134 of 146\r\n case \"hk-journal\":\r\n cp = `${cp}/${midP} of `;\r\n break;\r\n\r\n default:\r\n cp += \"/\";\r\n }\r\n\r\n /* Display % only when showing Main Game Completion % sections */\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n\r\n // True Completion % reading and calculation for percent-box and box colors\r\n trueCompletionCurrent = section.extendedCompletionDone;\r\n trueCompletionTotal = section.extendedCompletionTotal;\r\n trueCompletionPercent = (trueCompletionCurrent / trueCompletionTotal) * 100;\r\n symbol = \"%\";\r\n\r\n break;\r\n case \"hk-intro\":\r\n case \"hk-crests\":\r\n case \"hk-Needleupgrades\":\r\n case \"hk-redTools\":\r\n case \"hk-blueTools\":\r\n case \"hk-yellowTools\":\r\n case \"hk-equipment\":\r\n case \"hk-skills\":\r\n case \"hk-silkHeart\":\r\n case \"hk-miscellaneous\":\r\n case \"hk-spoolFragments\":\r\n case \"hk-maskshards\":\r\n case \"hk-craftingKitUpgrades\":\r\n case \"hk-toolPouchUpgrades\":\r\n\r\n /*case \"hk-charms\":\r\n case \"hk-bosses\":\r\n case \"hk-nailupgrades\":\r\n case \"hk-nailarts\":\r\n case \"hk-spells\":\r\n case \"hk-vesselfragments\":\r\n case \"hk-dreamnail\":\r\n case \"hk-warriordreams\":\r\n case \"hk-dreamers\":\r\n case \"hk-colosseum\":\r\n case \"hk-grimmtroupe\":\r\n case \"hk-lifeblood\":\r\n case \"hk-godmaster\":*/\r\n\r\n symbol = \"%\";\r\n\r\n break;\r\n\r\n default:\r\n\r\n symbol = \"\";\r\n }\r\n\r\n percentBox = `
\\n`;\r\n\r\n // ----------------- add True Completion h2 title ---------------- //\r\n switch (section.id) {\r\n\r\n case \"hk-intro\":\r\n\r\n // switches the box to red when True Completion is 0\r\n if (trueCompletionCurrent === 0) {\r\n cl = ` ${clRed}`;\r\n }\r\n // switches the box to green when True Completion is 100.00%\r\n else if (trueCompletionCurrent === trueCompletionTotal) {\r\n cl = ` ${clGreen}`;\r\n }\r\n // default is blue (partially completed and starting value)\r\n else cl = \"\";\r\n\r\n fullString += `
\\n\"\r\n ].join(\"\");\r\n\r\n}\r\n\r\n/**\r\n * Adds HTML string to an element with a given ID.\r\n * @param {object} divId object containing div ID of the HTML element to append to\r\n * @param {string} content HTML contents to append\r\n */\r\nfunction AppendHTML(divId, content) {\r\n document.getElementById(divId.id).innerHTML += \"\\n\" + content;\r\n}\r\n\r\nfunction ToggleSaveModeSwitch() {\r\n\r\n let mode = this.value;\r\n\r\n let chooseFileButtonLabel = document.getElementById(\"file-input-label\");\r\n let analyzeTextButton = document.getElementById(\"save-area-read\");\r\n let saveTextArea = document.getElementById(\"save-area\");\r\n\r\n if (mode === \"modeText\") {\r\n this.value = \"modeFile\";\r\n\r\n chooseFileButtonLabel.classList.remove(\"hidden\");\r\n analyzeTextButton.classList.add(\"hidden\");\r\n saveTextArea.classList.add(\"hidden\");\r\n /* alert(this.value); */\r\n } else {\r\n this.value = \"modeText\";\r\n\r\n chooseFileButtonLabel.classList.add(\"hidden\");\r\n analyzeTextButton.classList.remove(\"hidden\");\r\n saveTextArea.classList.remove(\"hidden\");\r\n /* Warning! focus() somehow makes the textarea text offset to the left */\r\n /* saveTextArea.focus(); */\r\n /* alert(this.value); */\r\n }\r\n}\r\n\r\n/**\r\n * Toggles display of \"hk-hints\". On click with no parameters or on demand when called with a parameter\r\n * @param {string} param \"hide\", \"show\" or none (optional)\r\n */\r\nfunction CheckboxHintsToggle(param = \"none\") {\r\n let checkboxId = document.getElementById(\"checkbox-hints\");\r\n\r\n switch (param) {\r\n case \"hide\":\r\n document.getElementById(\"hk-hints\").classList.add(\"hidden\");\r\n checkboxId.value = \"hints-off\";\r\n checkboxId.checked = false;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"unchecked\");\r\n }\r\n break;\r\n case \"show\":\r\n document.getElementById(\"hk-hints\").classList.remove(\"hidden\");\r\n checkboxId.value = \"hints-on\";\r\n checkboxId.checked = true;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"checked\");\r\n }\r\n break;\r\n default:\r\n // This runs when the checkbox is not checked\r\n if (checkboxId.checked === false) {\r\n document.getElementById(\"hk-hints\").classList.add(\"hidden\");\r\n checkboxId.value = \"hints-off\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"unchecked\");\r\n }\r\n }\r\n // This runs when the checkbox is checked\r\n else {\r\n document.getElementById(\"hk-hints\").classList.remove(\"hidden\");\r\n checkboxId.value = \"hints-on\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxHints\", \"checked\");\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Toggles display of \".spoiler-span\" class. On click with no parameters or on demand when called with a parameter\r\n * @param {string} param \"hide\", \"show\" or none (optional)\r\n */\r\nfunction CheckboxSpoilersToggle(param = \"none\") {\r\n\r\n let checkboxId = document.getElementById(\"checkbox-spoilers\");\r\n let allClassElements = document.querySelectorAll(\".spoiler-span\");\r\n let allClassElementsRed = document.querySelectorAll(\".spoiler-red\");\r\n let length = allClassElements.length;\r\n let lengthRed = allClassElementsRed.length;\r\n\r\n switch (param) {\r\n case \"hide\":\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.add(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.add(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-off\";\r\n checkboxId.checked = false;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"unchecked\");\r\n }\r\n break;\r\n\r\n case \"show\":\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.remove(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.remove(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-on\";\r\n checkboxId.checked = true;\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"checked\");\r\n }\r\n break;\r\n\r\n default:\r\n // This runs when the checkbox is not checked\r\n if (checkboxId.checked === false) {\r\n\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.add(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.add(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-off\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"unchecked\");\r\n }\r\n break;\r\n }\r\n // This runs when the checkbox is checked\r\n else {\r\n for (let i = 0; i < length; i++) {\r\n allClassElements[i].classList.remove(\"blurred\");\r\n }\r\n\r\n for (let i = 0; i < lengthRed; i++) {\r\n allClassElementsRed[i].classList.remove(\"blurred\");\r\n }\r\n\r\n checkboxId.value = \"spoilers-on\";\r\n\r\n // remember this choice for subsequent page visits and browser restarts\r\n if (StorageAvailable('localStorage')) {\r\n localStorage.setItem(\"hkCheckboxSpoilers\", \"checked\");\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Hides all other tabs, except the one which button was clicked (shows only the chosen tab)\r\n * @param {String} clickedButton The click target (button clicked)\r\n */\r\nfunction PageSwitchTab(clickedButton) {\r\n\r\n let sectionList = document.querySelectorAll(\".large-section\");\r\n let buttonList = document.querySelectorAll(\".tab-switch\");\r\n\r\n /* Make Active Tab Visible */\r\n for (let i = 0, length = sectionList.length; i < length; i++) {\r\n\r\n /* Other tabs except the clicked one */\r\n if (sectionList[i].id !== `tab-${clickedButton}`) {\r\n\r\n if (!sectionList[i].classList.contains(\"hidden\")) {\r\n sectionList[i].classList.add(\"hidden\");\r\n }\r\n }\r\n /* The clicked tab */\r\n else {\r\n\r\n if (sectionList[i].classList.contains(\"hidden\")) {\r\n sectionList[i].classList.remove(\"hidden\");\r\n }\r\n }\r\n }\r\n\r\n /* Make Active Button stand out */\r\n for (let i = 0, length = buttonList.length; i < length; i++) {\r\n\r\n /* Other buttons except the clicked one */\r\n if (buttonList[i].id !== `button-switch-${clickedButton}`) {\r\n\r\n if (buttonList[i].classList.contains(\"tab-active\")) {\r\n buttonList[i].classList.remove(\"tab-active\");\r\n }\r\n }\r\n /* The clicked button */\r\n else {\r\n\r\n if (!buttonList[i].classList.contains(\"tab-active\")) {\r\n buttonList[i].classList.add(\"tab-active\");\r\n }\r\n }\r\n }\r\n\r\n /* remember this choice for subsequent page visits and browser restarts */\r\n if (StorageAvailable('localStorage')) {\r\n\r\n if (clickedButton) {\r\n localStorage.setItem(\"hkTabActive\", clickedButton);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Detects whether Storage is both supported and available.\r\n * MDN WebDocs https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage\r\n * @param {Storage} type type of storage. Ex. \"localStorage\" or \"sessionStorage\"\r\n * @returns {Boolean}\r\n */\r\nfunction StorageAvailable(type) {\r\n var storage;\r\n try {\r\n storage = window[type];\r\n var x = '__storage_test__';\r\n storage.setItem(x, x);\r\n storage.removeItem(x);\r\n return true;\r\n } catch (e) {\r\n return e instanceof DOMException && (\r\n // everything except Firefox\r\n e.code === 22 ||\r\n // Firefox\r\n e.code === 1014 ||\r\n // test name field too, because code might not be present\r\n // everything except Firefox\r\n e.name === 'QuotaExceededError' ||\r\n // Firefox\r\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\r\n // acknowledge QuotaExceededError only if there's something already stored\r\n (storage && storage.length !== 0);\r\n }\r\n}\r\n\r\n/**\r\n * Fills the innerHTML of a given HTML Element with provided contents\r\n * @param {string} elementId Element ID to update\r\n * @param {string} textFill Updated contents (innerHTML)\r\n */\r\nfunction FillInnerHTML(elementId, textFill) {\r\n\r\n const element = document.getElementById(elementId);\r\n element.innerHTML = textFill;\r\n}\r\n\r\n/**\r\n * Focuses, selects and copies to clipboard contents inside a clicked element. Includes optional tooltip update after the copying is done.\r\n * @param {MouseEvent} mouseEvent from the clicked element (AddEventListener)\r\n * @param {string} tooltipId Element ID of the tooltip to update\r\n * @param {string} tooltipFill Updated contents of the tooltip\r\n */\r\nfunction SelectCopyInputText(mouseEvent, tooltipId = \"\", tooltipFill = \"\") {\r\n\r\n const element = document.getElementById(mouseEvent.target.id);\r\n\r\n // this prevents the un-selected effect after clicking the second time (clears all selection first)\r\n if (window.getSelection) {\r\n window.getSelection().removeAllRanges();\r\n }\r\n\r\n element.focus(); // best to focus the element first before selecting\r\n element.select();\r\n element.setSelectionRange(0, 99999); // for mobile devices\r\n\r\n // Copy the text inside the text field to clipboard\r\n document.execCommand(\"copy\");\r\n\r\n // optional tooltip showing\r\n if (tooltipFill.length && tooltipId.length) FillInnerHTML(tooltipId, tooltipFill);\r\n}\r\n\r\nfunction FileNameFormat(file, nameLength, beginLength, endLength) {\r\n\r\n var fileName = file.name;\r\n\r\n /* Shorten the file name if too long */\r\n if (fileName.length > nameLength) {\r\n\r\n let begin = fileName.slice(0, beginLength); // take X characters from the beginning (0)\r\n let end = fileName.slice(-endLength); // take X characters from the end (-)\r\n fileName = `${begin}..${end}`;\r\n }\r\n\r\n return fileName;\r\n}\r\n\r\nfunction FileDateFormat(file) {\r\n\r\n var fileDate = new Date(file.lastModified);\r\n\r\n var year = fileDate.getFullYear();\r\n var month = fileDate.getMonth() + 1;\r\n var day = fileDate.getDate();\r\n var hour = fileDate.getHours();\r\n var minutes = fileDate.getMinutes();\r\n /* var seconds = fileDate.getSeconds(); */\r\n\r\n if (month < 10) month = \"0\" + month;\r\n if (day < 10) day = \"0\" + day;\r\n if (hour < 10) hour = \"0\" + hour;\r\n if (minutes < 10) minutes = \"0\" + minutes;\r\n /* if (seconds < 10) seconds = \"0\" + seconds; */\r\n\r\n return `${year}.${month}.${day} ${hour}:${minutes}`;\r\n}\r\n\r\n/* ========================== Event Listeners ========================== */\r\n\r\n/* --------------- Toggle visibility of scroll arrow ------------------ */\r\n\r\ndocument.addEventListener(\"scroll\", () => {\r\n\r\n TogglePageScrollElement(\r\n /* the document element root () */\r\n ROOT,\r\n /* Which element to toggle visibility */\r\n SCROLL_BUTTON,\r\n /* How far the user has to scroll to show the element */\r\n 0.1);\r\n});\r\n\r\n/* ---------------- Scroll to top when clicked ------------------- */\r\n\r\nSCROLL_BUTTON.addEventListener(\"click\", () => {\r\n ScrollToElement(ROOT);\r\n});\r\n\r\n/* ------------- Auto select & copy to clipboard when the save file location input text is clicked once ------------- */\r\n\r\ndocument.getElementById(\"save-location-input\").addEventListener(\"click\", (e) => {\r\n\r\n let tooltip = document.getElementById(\"save-location-input-tooltip\");\r\n\r\n SelectCopyInputText(e, \"save-location-input-tooltip\", \"Copied save files location to clipboard\");\r\n\r\n /* make sure that the tooltip is centered */\r\n tooltip.style.marginLeft = `-${tooltip.offsetWidth / 2}px`;\r\n}, false);\r\n\r\n/* -------------- Switch text back to the default on mouse out -------------- */\r\n\r\ndocument.getElementById(\"save-location-input\").addEventListener(\"mouseout\", () => {\r\n\r\n let tooltip = document.getElementById(\"save-location-input-tooltip\");\r\n\r\n /* change the text and center only when the text was different */\r\n if (tooltip.innerHTML !== \"Click once to copy to clipboard\") {\r\n\r\n FillInnerHTML(\"save-location-input-tooltip\", \"Click once to copy to clipboard\");\r\n\r\n /* make sure that the tooltip is centered */\r\n tooltip.style.marginLeft = `-${tooltip.offsetWidth / 2}px`;\r\n }\r\n}, false);\r\n\r\n/* ------------ Toggle Save Mode Switch: Text Mode or File Mode -------------- */\r\n\r\ndocument.getElementById(\"toggle-mode\").addEventListener(\"click\", ToggleSaveModeSwitch, false);\r\n\r\n/* ------------- Checkbox functions ---------------------- */\r\n\r\ndocument.getElementById(\"checkbox-hints\").addEventListener(\"click\", CheckboxHintsToggle, false);\r\ndocument.getElementById(\"checkbox-spoilers\").addEventListener(\"click\", CheckboxSpoilersToggle, false);\r\n\r\n/* ------------ Drag & drop file to the window -------------- */\r\n\r\nwindow.addEventListener('dragover', (event) => {\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n // Style the drag-and-drop as a \"copy file\" operation.\r\n event.dataTransfer.dropEffect = 'copy';\r\n});\r\n\r\nwindow.addEventListener('drop', (event) => {\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n const dt = event.dataTransfer;\r\n\r\n /* Launch save file analyzing */\r\n LoadSaveFile(dt, performance.now());\r\n\r\n var label = document.getElementById(\"save-area-file\").nextElementSibling;\r\n var labelInitialText = label.innerHTML;\r\n\r\n /* Shorten the file name if longer than 16 characters. Display first 10 characters and last 4. */\r\n var fileName = FileNameFormat(dt.files[0], 16, 10, 4);\r\n\r\n /* Display a custom formatted last modified date. */\r\n var fileDate = FileDateFormat(dt.files[0]);\r\n\r\n /* Display the save file name and date on the button */\r\n if (fileName) {\r\n label.innerHTML = `${SYMBOL_FILE}${fileName}
${fileDate}
`;\r\n } else {\r\n label.innerHTML = labelInitialText;\r\n }\r\n});\r\n\r\n/* ---------- Monitor file input change and show the file name when file is loaded ----------- */\r\n\r\ndocument.getElementById(\"save-area-file\").addEventListener(\"change\", (event) => {\r\n\r\n var label = document.getElementById(\"save-area-file\").nextElementSibling;\r\n var labelInitialText = label.innerHTML;\r\n\r\n /* Shorten the file name if longer than 16 characters. Display first 10 characters and last 4. */\r\n var fileName = FileNameFormat(event.target.files[0], 16, 10, 4);\r\n\r\n /* Display a custom formatted last modified date. */\r\n var fileDate = FileDateFormat(event.target.files[0]);\r\n\r\n if (fileName) {\r\n label.innerHTML = `${SYMBOL_FILE}${fileName}
${fileDate}
`;\r\n } else {\r\n label.innerHTML = labelInitialText;\r\n }\r\n});\r\n\r\n/* -------- Clean the text area and file input from leftover save file if present (Firefox especially) -------- */\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n\r\n (async () => {\r\n document.getElementById(\"save-area\").value = \"\";\r\n document.getElementById(\"save-area-file\").value = \"\";\r\n })();\r\n});\r\n\r\n/* ------------------------- Exports ------------------------------- */\r\n\r\nexport {\r\n GenerateInnerHTML,\r\n AppendHTML,\r\n CheckboxHintsToggle,\r\n CheckboxSpoilersToggle,\r\n StorageAvailable,\r\n Benchmark,\r\n benchmarkTimes\r\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/^blob:/, \"\").replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// Handle cookies\r\n// require(\"./cookies.js\");\r\n\r\n// CSS\r\n// require(\"../css/cookieconsent.css\");\r\nrequire(\"../css/fontello.css\");\r\nrequire(\"../css/simpleicon.css\");\r\nrequire(\"../css/reznoricon.css\");\r\nrequire(\"../css/style.css\");\r\n\r\n// required for meta tags (social) to be visible by Webpack\r\nrequire(\"../img/thumbnail1200x628.jpg\");\r\n\r\nimport \"core-js\";\r\nimport \"regenerator-runtime/runtime.js\";\r\n\r\nrequire(\"./page-functions.js\");\r\n\r\n// Instantly load test save file from .json (fast Debugging script)\r\n// require(\"./LoadJson.js\");\r\n\r\n// Main script for analyzing the decoded save file and generating the page on the fly\r\nrequire(\"./HKCheckCompletion.js\");\r\n\r\n// Load Save File for opening files, decoding, decryption\r\nrequire(\"./LoadSaveFile.js\");"],"names":["HK","GenerateInnerHTML","AppendHTML","CheckboxHintsToggle","CheckboxSpoilersToggle","StorageAvailable","Benchmark","benchmarkTimes","SetIconGreen","SetIconPartial","SetIconPartialJournal","SetIconRed","SetIconNone","SetIcon","ObjectLength","TranslateMapName","GenerateDatabaseEntries","SYMBOL_FALSE","SYMBOL_TRUE","SYMBOL_CLOCK","SYMBOL_EMPTY","FLEUR_DIVIDE","WIKI_LINK","completionSymbol","divStart","join","divStartCenter","divEnd","pSpan","HKCheckCompletion","jsonObject","benchStart","arguments","length","undefined","performance","now","CheckCompletion","timeStart","HKPlayerData","HKWorldItems","HKSceneData","hasOwnProperty","playerData","saveAnalyzed","sceneData","persistentBools","saveDataChecker","DataChecker","ResetCompletion","CheckPlayTime","sections","intro","playTime","CheckCompletionPercent","CheckSaveFileVersion","version","CheckHealthMasks","maxHealthBase","permadeathMode","CheckSilkBar","silkMax","CheckCrests","CheckRosary","geo","HeroCorpseMoneyPool","CheckshellShards","ShellShards","CheckIfDataTrue","crests","entries","CheckNeedleUpgrades","NeedleUpgrades","silkHeart","redTools","Tools","savedData","blueTools","yellowTools","equipment","skills","miscellaneous","maskShards","spoolFragments","craftingKitUpgrades","toolPouchUpgrades","flea","CheckHuntersJournal","CheckHintsTrue","hints","CheckExtendedCompletion","timeEnd","PrepareHTMLString","section","textPrefix","textSuffix","wiki","icon","b","concat","span","spoilerSpan","id","includes","seconds","Math","floor","minutes","hours","sec","timePlayed","timeH","timeM","timeS","textFill","spoiler","completionPercentage","round","maxPercent","maxPercentDefault","gameCompletion","spoilerAfter","spoilerAfterDefault","percent","maxPercentBaseGame","spoilerAfterBaseGame","db","gameCompletionExtended","amount","max","entry","extendedCompletionTotal","charms","gotCharm_9","extendedCompletionDone","disabled","toFixed","saveVersion","masks","health","amountTotal","totalSilk","silk","geoValue","geoPoolValue","rosaries","amountShade","shellShardsValue","shellShards","PlayerData","reaper","completedMemory_reaper","wanderer","completedMemory_wanderer","beast","completedMemory_beast","witch","completedMemory_witch","toolmaster","completedMemory_toolmaster","shaman","completedMemory_shaman","dataObject","worldData","checkText","_loop","i","foundArchitect","find","Name","foundForge","foundWeaver","Data","IsUnlocked","foundClaws","foundClawsUpgrade","foundMosscreep","foundMosscreepUpgrade","foundDazzle","foundDazzleUpgrade","foundBombNormal","foundBombSteel","foundData","exist","scenesVisited","indexOf","wishList","QuestCompletionData","foundWish","sceneName","IsCompleted","sceneList","serializedList","sceneInfo","SceneName","ID","Value","CheckSpellLevel","fireballLevel","quakeLevel","screamLevel","CheckWarriorDreams","sFillText","name","CheckGodmasterDoors","property","completed","Needle","map","element","nailUpgrades","WorldDataActivated","idText","sceneNameText","activated","CheckAdditionalThings","saveFile","persistentBoolItems","_","countTotal","total","notActivated","discoveredTotal","CountWorldItem","journalEntriesTotal","spoilerDefault","zoteRescuedBuzzer","hasWalljump","destroyedNightmareLantern","killedFlameBearerLarge","grubsCollected","zoteDead","abs","xunFlowerGiven","bankerAccountPurchased","bankerTheft","bankerBalance","CountItems","hasSlykey","gaveSlykey","hasWhiteKey","usedWhiteKey","hasLoveKey","openedLoveDoor","dreamReward3","FindWorldItem","grimmChildLevel","nameHeld","nameSold","bossDoorStateTier5","killedVoidIdol_2","killedVoidIdol_3","nameDefault","nameNeglect","spoilerNeglect","killedZote","nameRivalry","spoilerRivalry","nameTrappedVengefly","spoilerTrappedVengefly","nameNotRescuedVengefly","spoilerNotRescuedVengefly","zoteRescuedDeepnest","nameTrappedDeepnest","spoilerTrappedDeepnest","nameColosseum","spoilerColosseum","nailsmithKilled","namePurity","spoilerPurity","nailsmithConvoArt","nameHappyCouple","spoilerHappyCouple","nailsmithSpared","nameSheoHutWaiting","spoilerSheoHutWaiting","nameUpgradeNail","spoilerUpgradeNail","CheckMrMushroomState","stagStationsOpened","areaMaps","itemId","arrayLength","mode","itemsLog","semiPersistent","push","console","log","groupCollapsed","groupEnd","mrMushroomState","state","sectionName","amountKillsLeft","journalPlayerList","EnemyJournalKillData","list","_loop2","MonsterInfo","databaseName","Record","Kills","killRequire","gameName","CheckPantheon","CheckHallOfGods","hallOfGods","check","isUnlocked","killedHollowKnight","current","GruzMotherDefeated","k","defeatedDungDefender","hornetOutskirtsDefeated","hasAcidArmour","hasKingsBrand","hasShadowDash","HKReadTextArea","textAreaId","contents","document","getElementById","value","InitializeHTMLPopulation","JSON","parse","result","info","error","alert","localStorage","getItem","checked","midPercent","maxDefault","_classCallCheck","boolData","geoRocksData","geoRocks","_createClass","key","_FindItem","_FindGeoRock","hitsLeft","checkItems","grub32","spoilerSteelSoul","idPlayerData","spoilerNormal","checkGeoRocks","addEventListener","e","t","r","Symbol","n","iterator","o","toStringTag","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","l","TypeError","call","done","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","apply","_next","_throw","aesjs","require","CSHARP_HEADER","BASE64_ARRAY","split","charCodeAt","BASE64_DECODE_TABLE","Map","ord","AES_KEY","TextEncoder","encode","ECB_STREAM_CIPHER","ModeOfOperation","ecb","LoadSaveFile","input","time","inputFileList","files","Total","inputFileObject","inputReader","FileReader","readAsArrayBuffer","ProcessFileObject","inputArrayBuffer","decodedString","Uint8Array","slice","RemoveHeaders","Base64Decode","AESDecryption","TextDecoder","decode","_callee","_context","buffer","csHeader","subarray","lengthCount","get","end","output","continuous","cipherObject","decrypt","event","target","mouseEvent","root","checkInt","parseInt","checkInts","arrayish","coerceArray","arg","copy","ArrayBuffer","isView","Array","isArray","Error","createArray","copyArray","sourceArray","targetArray","targetStart","sourceStart","sourceEnd","set","convertUtf8","toBytes","text","encodeURI","substr","fromBytes","bytes","String","fromCharCode","convertHex","Hex","numberOfRounds","rcon","S","Si","T1","T2","T3","T4","T5","T6","T7","T8","U1","U2","U3","U4","convertToInt32","AES","_prepare","rounds","_Ke","_Kd","roundKeyCount","KC","tk","index","rconpointer","tt","encrypt","plaintext","ciphertext","ModeOfOperationECB","description","_aes","block","ModeOfOperationCBC","iv","_lastCipherblock","j","ModeOfOperationCFB","segmentSize","_shiftRegister","encrypted","xorSegment","ModeOfOperationOFB","_lastPrecipher","_lastPrecipherIndex","Counter","initialValue","_counter","setValue","setBytes","increment","ModeOfOperationCTR","counter","_remainingCounter","_remainingCounterIndex","pkcs7pad","data","padder","pkcs7strip","cbc","cfb","ofb","ctr","utils","hex","utf8","padding","pkcs7","pad","strip","_arrayTest","exports","module","define","amd","_aesjs","h2","hunter","hornet1Defeated","hasDash","Crossroads_04","slyRescued","hasLantern","hasSuperDash","hasDreamNail","killedInfectedKnight","hasDoubleJump","dungDefenderOrHornet2","ismaTearOrShadeCloak","defeatedMegaJelly","monomonDefeated","hegemolDefeated","killedBlackKnight","lurienDefeated","endOfHints","startingNeedle","sharpenedNeedle","shiningNeedle","hivesteelNeedle","paleSteelNeedle","Memory_Silk_Heart_BellBeast","Memory_Silk_Heart_WardBoss","Memory_Silk_Heart_LaceTower","straightPin","triPin","stingShard","Tack","harpoon","curveClaws","shakraRing","pimpilo","conchDrill","webShot","screwAttack","cogworkSaw","cogworkFlier","rosaryCannon","lightningRod","flintstone","fleaBrew","lifebloodSyringe","mosscreepTool","lavaCharm","bellBind","poisonPouch","fracturedMask","multibind","whiteRing","brollySpike","quickbind","spoolExtender","reserveBind","DazzleBind","revengeCrystal","thiefClaw","zapImbuement","quickSling","maggotCharm","longneedle","wispLantern","fleaCharm","pinstressTool","compass","boneNecklace","rosaryMagnet","weightedAnklet","barbedWire","deadMansPurse","magnetiteDice","scuttlebrace","Wallcling","musicianCharm","sprintmaster","thiefCharm","silkSpear","threadSphere","Parry","silkCharge","silkBomb","silkBossNeedle","hasHarpoonDash","hasNeedolin","hasChargeSlash","hasSuperJump","HasSeenEvaHeal","CompletedRedMemory","PurchasedBonebottomHeartPiece","wormwayMask","deepDocksMask","farFieldsMask1","shellwoodMask","weavenestAtlaMask","MerchantEnclaveShellFragment","cogworkCoreMask","libraryMask","beastflyHuntWish","boneBuildingMask","mountFayMask","slabMask","bilewaterMask","wispThicketMask","blastedStepsMask","brightveinMask","sprintmasterRaceWish","destroyThreadCoresWish","antTrapperWish","boneBottomSpool","deepDocksSpool1","greymoorSpool","PurchasedBelltownSpoolSegment","weavenestAtlaSpool","slabSpool","grandGateSpool","UnderworksSpool1","MetCaravanTroupeLeaderJudge","whitewardSpool","cogworkCoreSpool","UnderworksSpool2","saveShermaWish","MerchantEnclaveSpoolPiece","deepDocksSpool2","highHallsSpool","MemoriumSpool","purchasedGrindleSpoolPiece","PurchasedForgeToolKit","crowFeathersWish","PurchasedArchitectToolKit","purchasedGrindleToolKit","PurchasedPilgrimsRestToolPouch","ladybugCraftPickupToolPouch","journalWish","CaravanTroupeLocation","huntersJournal","mossBoneCrawler","mossBoneCrawlerFat","mossBoneFly","mossboneMother","aspidCollector","boneGoomba","boneGoombaBounceFly","boneGoombaLarge","skullKing","boneCrawler","boneFlyer","boneFlyerGiant","boneCircler","boneCirclerVicious","boneHopper","boneHopperGiant","boneSpitter","boneRoller","boneThumper","spineFloater","rockRoller","rhino","cryptWorm","boneWorm","boneBeast","pilgrim03","pilgrim01","pilgrim04","pilgrim02","pilgrimBellThrower","pilgrimFly","pilgrim05","pilgrimBellthrowerFly","pilgrimHiker","pilgrimStaffWielder","pilgrimMossSpitter","rosaryPilgrim","rosaryThief","tarSlug","tarSlugHuge","dockWorker","dockFlyer","dockBomber","shieldDockWorker","dockCharger","dockGuardThrower","smallCrab","roofCrab","fieldsFlockFlyers","fieldsGoomba","fieldsFlyer","songGolem","boneHunterTiny","boneHunterBuzzer","boneHunterChild","boneHunter","boneHunterFly","boneHunterThrow","boneHunterTrapper","boneHunterChief","hunterQueen","mite","mitefly","gnatGiant","farmerCatcher","farmerScissors","farmerCentipede","vampireGnat","wisp","farmerWisp","wispPyreEffigy","crow","crowman","crowmanDagger","crowmanJurorTiny","crowmanJuror","crowmanDaggerJuror","crawfather","maggots","dustroachPollywog","dustroach","bloatRoach","roachfeederShort","roachfeederTall","roachkeeper","roachkeeperChefTiny","roachkeeperChef","wraith","swampDrifter","swampGoomba","swampMosquito","swampMosquitoSkinny","swampMuckman","swampMuckmanTall","swampShaman","swampBarnacle","swampDuctsucker","pondSkater","pilgrimFisher","shellwoodGnat","shellwoodWasp","stickInsect","stickInsectCharger","stickInsectFlyer","splinterQueen","flowerDrifter","bloomShooter","bloomPuncher","seth","flowerQueen","bellGoomba","bellFly","bladeSpider","bladeSpiderHang","shellFossilMimic","sandCentipede","coralJudgeChild","coralJudge","lastJudge","coralSpikeGoomba","coralConchShooter","coralConchShooterHeavy","coralConchStabber","coralConchDriller","coralConchDrillerGiant","coralGoombas","coralGoombaLarge","coralSwimmerFat","pokeSwimmer","spikeSwimmer","coralSwimmerSmall","coralBigJellyfish","coralWarrior","coralFlyer","coralFlyerThrow","coralBrawler","coralHunter","coralBubbleBrute","coralKing","coralWarriorGrey","zapCoreEnemy","citadelBat","citadelBatLarge","miteHeavy","understoreMiteGiant","understoreSmall","pilgrim03Understore","pilgrimStaffUnderstore","understorePoker","understoreThrower","understoreHeavy","songPilgrim01","pilgrim01Song","pilgrim02Song","pilgrim03Song","pilgrim04Song","pilgrimStomperSong","songPilgrim03","songReed","songReedGrand","songHeavySentry","songHandmaiden","arboriumKeeper","songAdministrator","songPilgrimMaestro","songKnight","songThreadedHusk","songThreadedHuskSpin","songPilgrim02","songCreeper","conductorBoss","understoreAutomaton","understoreAutomatonEX","songAutomatonGoomba","songAutomatonFly","songAutomatonFlySpike","songAutomaton01","songAutomaton02","songAutomatonShield","songAutomatonBall","clockworkDancer","songScholarAcolyte","lightbearer","scrollkeeper","scholar","trobbio","tormentedTrobbio","slabPrisonerLeaperNew","slabPrisonerFlyNew","slabFlySmallFresh","slabFlySmall","slabFlyMid","slabFlyLarge","slabFlyBroodmother","peaksDrifter","crystalDrifter","crystalDrifterGiant","weaverServitor","weaverServitorLarge","lifebloodFly","boneWormBlueBlood","boneWormBlueTurret","blueAssistant","lilypadFly","grassGoomba","hornetDragonfly","dragonflyLarge","lilypadTrap","cloverstag","cloverstagWhite","grasshopperChild","grasshopperSlasher","grasshopperFly","cloverDancer","abyssCrawler","abyssCrawlerLarge","gloomfly","gloomBeast","voidTendrils","blackThreadCore","whitePalaceFly","centipedeTrap","spikeLazyFlyer","surfaceScuttler","giantCentipede","giantFlea","garmond","pinstressBoss","spinnerBoss","firstWeaver","phantom","lace","silkBoss","lostLace","SavedFlea_Bone_06","SavedFlea_Dock_16","SavedFlea_Bone_East_05","SavedFlea_Dock_03d","SavedFlea_Ant_03","SavedFlea_Bone_East_17b","SavedFlea_Bone_East_10_Church","SavedFlea_Crawl_06","SavedFlea_Greymoor_15b","SavedFlea_Greymoor_06","CaravanLechReturnedToCaravan","SavedFlea_Belltown_04","SavedFlea_Shellwood_03","SavedFlea_Coral_35","SavedFlea_Dust_12","SavedFlea_Shadow_28","SavedFlea_Dust_09","SavedFlea_Shadow_10","SavedFlea_Under_23","SavedFlea_Under_21","SavedFlea_Song_14","SavedFlea_Song_11","SavedFlea_Library_09","tamedGiantFlea","SavedFlea_Slab_Cell","SavedFlea_Slab_06","SavedFlea_Peak_05c","SavedFlea_Coral_24","MetTroupeHunterWild","SavedFlea_Library_01","MAP","object","mapCode","dictionary","translation","objectArray","searchText","entryName","entryDB","fillText","count","ln","HEALTH_MASK_IMAGE","HEALTH_MASK_STEEL_IMAGE","SILKBAR_LEFT_IMAGE","SILKBAR_MIDDLE_IMAGE","SILKBAR_RIGHT_IMAGE","ROSARIES_IMAGE","ROSARIES_SHADE_IMAGE","SHELL_SHARDS_IMAGE","ARCHITECT_CREST_IMAGE","BEAST_CREST_IMAGE","HUNTER_CREST_IMAGE","REAPER_CREST_IMAGE","SHAMAN_CREST_IMAGE","WANDERER_CREST_IMAGE","WITCH_CREST_IMAGE","SYMBOL_PARTIAL","SYMBOL_FILE","SYMBOL_BINDING_NAIL","SYMBOL_BINDING_SHELL","SYMBOL_BINDING_CHARMS","SYMBOL_BINDING_SOUL","SYMBOL_BINDING_ALL","SYMBOL_ATTUNED","SYMBOL_ASCENDED","SYMBOL_RADIANT","ROOT","documentElement","SCROLL_BUTTON","querySelector","bench","ScrollToElement","scrollTo","top","behavior","ShowElement","classList","add","remove","HideElement","TogglePageScrollElement","ratio","scrollTotal","scrollHeight","clientHeight","scrollTop","obj","iconClass","div","finalHTMLFill","Img","maskNormal","maskSteel","silkBarLeft","silkBarMiddle","silkBarRight","rosariesNormalImage","rosariesShadeImage","shellShardsImage","divFlex","hunterCrestImage","architectCrestImage","beastCrestImage","reaperCrestImage","shamanCrestImage","wandererCrestImage","witchCrestImage","SectionStart","CompletionFill","CompletionFillNoSave","SingleEntryFill","SectionDescription","innerHTML","querySelectorAll","forEach","button","PageSwitchTab","h2id","percentBox","symbol","fullString","cl","clGreen","clRed","cp","midP","mp","trueCompletionCurrent","trueCompletionTotal","trueCompletionPercent","perc","divId","content","ToggleSaveModeSwitch","chooseFileButtonLabel","analyzeTextButton","saveTextArea","param","checkboxId","setItem","allClassElements","allClassElementsRed","lengthRed","clickedButton","sectionList","buttonList","contains","type","storage","window","x","removeItem","DOMException","code","FillInnerHTML","elementId","SelectCopyInputText","tooltipId","tooltipFill","getSelection","removeAllRanges","focus","select","setSelectionRange","execCommand","FileNameFormat","file","nameLength","beginLength","endLength","fileName","begin","FileDateFormat","fileDate","Date","lastModified","year","getFullYear","month","getMonth","day","getDate","hour","getHours","getMinutes","tooltip","style","marginLeft","offsetWidth","stopPropagation","preventDefault","dataTransfer","dropEffect","dt","label","nextElementSibling","labelInitialText"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/favicon.png b/build/favicon.png
index 6ebf7d6..97b152f 100644
Binary files a/build/favicon.png and b/build/favicon.png differ
diff --git a/build/index.html b/build/index.html
index 14c6a3a..89b2cbb 100644
--- a/build/index.html
+++ b/build/index.html
@@ -126,7 +126,7 @@
- Save Completion Analyzer for Hollow Knight Online
+ Save Completion Analyzer for Hollow Knight: Silksong Online
@@ -136,7 +136,7 @@
-
+
-
+
@@ -166,9 +166,14 @@
diff --git a/build/main.css b/build/main.css
index 7bfd974..7ee63d1 100644
--- a/build/main.css
+++ b/build/main.css
@@ -195,7 +195,7 @@
*/
:root {
- --rt-main: #1e4d6c;
+ --rt-main: #1e6c38;
cursor: default;
}
@@ -218,11 +218,11 @@ body {
}
::-webkit-scrollbar-thumb {
- background-color: #1e4d6c;
+ background-color: #1e6c38;
}
::-webkit-scrollbar-thumb:hover {
- background-color: #2e5d7c;
+ background-color: #2e7c38;
}
::-webkit-scrollbar-track,
@@ -231,8 +231,8 @@ body {
}
::-webkit-resizer {
- background-color: #050d19;
- color: #1e4d6c;
+ background-color: #051905;
+ color: #1e6c38;
}
#background {
@@ -261,7 +261,7 @@ body {
b {
font-weight: 500;
- color: #aac7d4;
+ color: #aad4b4;
}
p {
@@ -330,12 +330,12 @@ h6 {
font-weight: 400;
font-size: 1.6rem;
line-height: 1.6rem;
- color: rgb(0, 255, 221);
+ color: rgb(0, 255, 98);
margin-bottom: 1rem;
}
.hall-of-fame-border {
- border: 0.2rem solid rgba(0, 255, 220, 0.6);
+ border: 0.2rem solid rgba(0, 255, 106, 0.6);
border-radius: 1rem;
border-style: double;
padding: 0.7rem 1.3rem 0.7rem 1.3rem;
@@ -343,7 +343,7 @@ h6 {
}
#hk-hints {
- border: 0.2rem solid rgba(231, 251, 255, 0.33);
+ border: 0.2rem solid rgba(231, 255, 234, 0.33);
border-radius: 1rem;
border-style: double;
padding: 1.3rem;
@@ -366,7 +366,7 @@ h6 {
text-align: center;
font-size: 0.8rem;
margin: 0 1.3rem 1.3rem 1.3rem;
- color: rgba(129, 221, 224, 0.85);
+ color: rgba(129, 224, 134, 0.85);
}
#save-location-input {
@@ -374,8 +374,8 @@ h6 {
font-family: 'Consolas', monospace;
font-size: 0.75rem;
text-align: center;
- width: 32em;
- max-width: 32em;
+ width: 37em;
+ max-width: 37em;
color: #fff;
background-color: rgba(128, 128, 128, 0.5);
margin: 0.4rem auto 0.6rem auto;
@@ -563,9 +563,9 @@ input[type="file"] {
font-weight: 500;
font-family: 'Heebo', sans-serif;
text-align: center;
- background-color: #1e4d6c;
- color: #aac7d4;
- border: 2px solid #183c55;
+ background-color: #1e6c38;
+ color: #aad4b4;
+ border: 2px solid #185520;
border-radius: 2px;
padding: 0.3rem 1rem;
margin: 0.25rem 0.5rem 0.25rem 0.25rem;
@@ -577,17 +577,17 @@ input[type="file"] {
}
.button:hover {
- color: #d9f3ff;
- background-color: #2e5d7c;
- border-color: #2e5d7c;
+ color: #d9ffdc;
+ background-color: #2e7c38;
+ border-color: #2e7c38;
cursor: pointer;
}
.button:focus,
.input-file:focus+label {
- /* outline: 2px solid #5e8dac; */
+ /* outline: 2px solid #5eac65; */
outline: 0;
- border-color: #5e8dac;
+ border-color: #5eac65;
/* outline-offset: -2px; */
}
@@ -606,13 +606,13 @@ input[type="file"] {
.tab-switch {
background-color: rgba(0, 0, 0, 0);
- color: rgb(0, 180, 156);
+ color: rgb(0, 180, 69);
border: 2px solid rgba(0, 0, 0, 0);
border-radius: 1rem 0 1rem 0;
}
.tab-switch:hover {
- background-color: rgb(0, 180, 156);
+ background-color: rgb(0, 180, 69);
color: rgb(0, 0, 0);
border: 2px solid rgba(0, 0, 0, 0);
}
@@ -621,13 +621,13 @@ input[type="file"] {
background-color: rgb(235, 235, 235);
color: rgb(0, 39, 34);
border: 2px solid rgba(0, 0, 0, 0);
- box-shadow: 0 0 1rem rgb(0, 180, 156);
- text-shadow: 0 0 0.5rem #97fff1;
+ box-shadow: 0 0 1rem rgb(0, 180, 69);
+ text-shadow: 0 0 0.5rem #9aff97;
}
.tab-switch:focus {
outline: 0;
- border-color: rgb(0, 255, 221);
+ border-color: rgb(0, 255, 98);
}
.tab-switch:focus:not(:focus-visible) {
@@ -693,14 +693,14 @@ a,
a:active,
a:visited {
display: inline-block;
- color: #aac7d4;
+ color: #aad4b4;
font-weight: 700;
text-decoration: none;
transition: all 0.3s ease;
}
a:hover {
- color: #d9f3ff;
+ color: #d9ffdc;
text-decoration: none;
text-shadow: 0 0 0.6em #1bff73;
}
@@ -741,12 +741,12 @@ a.wiki {
}
.icon-info-circled {
- color: #479ae7;
+ color: #47e762;
}
.icon-download-cloud,
.icon-doc-text-inv {
- color: #d9f3ff;
+ color: #d9ffdc;
}
.flex-container {
@@ -811,7 +811,7 @@ a.wiki {
width: 50px;
height: 50px;
text-decoration: none;
- background-color: #1e4d6c;
+ background-color: #1e6c38;
border: 0;
border-radius: 2px;
outline: 0;
@@ -824,7 +824,7 @@ a.wiki {
}
.scroll-up-button:hover {
- background-color: #2e5d7c;
+ background-color: #2e7c38;
cursor: pointer;
}
@@ -834,7 +834,7 @@ a.wiki {
top: 3px;
width: 12px;
height: 12px;
- border: solid #aac7d4;
+ border: solid #aad4b4;
border-width: 2px 0px 0px 2px;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
@@ -938,8 +938,8 @@ input[type="radio"] {
left: 0.27em;
height: 1.3em;
width: 1.3em;
- background-color: #aac7d4;
- border: 1px solid #1e4d6c;
+ background-color: #aad4b4;
+ border: 1px solid #1e6c38;
border: 1px solid var(--rt-main);
transition: all 0.3s ease;
}
@@ -961,21 +961,21 @@ input[type="radio"] {
/* On mouse-over change background color */
.radio-label:hover .radiomark,
.checkbox-label:hover .checkmark {
- background-color: #d9f3ff;
+ background-color: #d9ffdc;
}
/* When the checkbox is checked change background color */
input:checked + label .radiomark,
input:checked + label .checkmark {
- background-color: #1e4d6c;
+ background-color: #1e6c38;
background-color: var(--rt-main);
}
/* When the checkbox is checked change background color on hover */
input:checked + label:hover .radiomark,
input:checked + label:hover .checkmark {
- background-color: #2e5d7c;
- border-color: #2e5d7c;
+ background-color: #2e7c38;
+ border-color: #2e7c38;
}
/* Create the checkmark/indicator (hidden when not checked) */
@@ -998,7 +998,7 @@ input:checked + label .checkmark:after {
top: 2px;
width: 6px;
height: 12px;
- border: solid #aac7d4;
+ border: solid #aad4b4;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
@@ -1018,7 +1018,7 @@ input:checked + label .checkmark:after {
input[type="checkbox"]:focus + label,
input[type="radio"]:focus + label {
outline: 0;
- box-shadow: 0 0 0.2rem #aac7d4;
+ box-shadow: 0 0 0.2rem #aad4b4;
}
input[type="checkbox"]:focus:not(:focus-visible) + label,
@@ -1037,8 +1037,8 @@ input[type="radio"]:focus:not(:focus-visible) + label {
.tooltip .tooltip-text {
visibility: hidden;
width: max-content;
- background-color: #1e4d6c;
- color: #d9f3ff;
+ background-color: #1e6c38;
+ color: #d9ffdc;
font-size: 0.85rem;
text-align: center;
border-radius: 3px;
@@ -1060,7 +1060,7 @@ input[type="radio"]:focus:not(:focus-visible) + label {
margin-left: -5px;
border-width: 5px;
border-style: solid;
- border-color: #1e4d6c transparent transparent transparent;
+ border-color: #1e6c38 transparent transparent transparent;
}
.tooltip:hover .tooltip-text {
@@ -1081,11 +1081,11 @@ input[type="radio"]:focus:not(:focus-visible) + label {
font-size: 1.1rem;
font-weight: 700;
vertical-align: middle;
- color: #d9f3ff;
+ color: #d9ffdc;
margin: 0 0.5rem 0rem 0.5rem;
padding: 0.2rem 1.2rem 0.2rem 1.2rem;
- background: #1e4d6c;
- border: 2px solid #3e6d8c;
+ background: #1e6c38;
+ border: 2px solid #3e8c4b;
border-radius: 4px;
}
diff --git a/build/main.css.map b/build/main.css.map
index 2cc8618..5493f78 100644
--- a/build/main.css.map
+++ b/build/main.css.map
@@ -1 +1 @@
-{"version":3,"file":"main.css","mappings":";;;AAAA;EACE,uBAAuB;EACvB,4CAAyC;EACzC;;;;4DAIgE;EAChE,mBAAmB;EACnB,kBAAkB;AACpB;AACA,gGAAgG;AAChG,2FAA2F;AAC3F;;;;;;;CAOC;AACD;EACE,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;EACnB,YAAY;;EAEZ,qBAAqB;EACrB,wBAAwB;EACxB,UAAU;EACV,kBAAkB;EAClB,kBAAkB;EAClB,iBAAiB;;EAEjB,gEAAgE;EAChE,oBAAoB;EACpB,oBAAoB;;EAEpB,8CAA8C;EAC9C,gBAAgB;;EAEhB,gEAAgE;EAChE,yBAAyB;EACzB,iBAAiB;;EAEjB,0DAA0D;EAC1D,qBAAqB;;EAErB,6CAA6C;EAC7C,mCAAmC;EACnC,kCAAkC;;EAElC,4BAA4B;EAC5B,uDAAuD;AACzD;;AAEA,sBAAsB,gBAAgB,EAAE,EAAE,QAAQ;AAClD,yBAAyB,gBAAgB,EAAE,EAAE,QAAQ;AACrD,qBAAqB,gBAAgB,EAAE,EAAE,QAAQ;AACjD,8BAA8B,gBAAgB,EAAE,EAAE,QAAQ;AAC1D,0BAA0B,gBAAgB,EAAE,EAAE,QAAQ;AACtD,4BAA4B,gBAAgB,EAAE,EAAE,QAAQ;;;;;AC7DxD,uEAAuE;;AAEvE;;IAEI,kBAAkB;IAClB,mBAAmB;AACvB;;AAEA;;IAEI,kBAAkB;IAClB,qBAAqB;IACrB,OAAO;IACP,MAAM;IACN,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,gDAAkC;AACtC;;AAEA;IACI,gDAAgC;AACpC;;AAEA;IACI,gDAAiC;AACrC;;AAEA;IACI,gDAAiC;AACrC;;AAEA;IACI,gDAAoC;AACxC;;AAEA;IACI,gDAAkC;AACtC,C;;;;AC7CA;;IAEI,kBAAkB;IAClB,oBAAoB;AACxB;;AAEA;;IAEI,kBAAkB;IAClB,qBAAqB;IACrB,OAAO;IACP,MAAM;IACN,YAAY;IACZ,aAAa;IACb,4BAA4B;IAC5B,SAAS;IACT,kBAAkB;IAClB,cAAc;IACd,WAAW;IACX,0BAA0B;IAC1B,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI,yDAAgD;AACpD;;AAEA;EACE,yDAAiD;AACnD;;AAEA;EACE,yDAAkD;AACpD;;AAEA;EACE,yDAAgD;AAClD;;AAEA;EACE,yDAA+C;AACjD;;AAEA;EACE,yDAA2C;AAC7C;;AAEA;EACE,yDAA4C;AAC9C;;AAEA;EACE,yDAA2C;AAC7C,C;;;;ACtDA;;;;;;;;;;;;;;;;;;CAkBC;;AAED;EACE,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,gCAAgC;EAChC,WAAW;EACX,yBAAyB;EACzB,SAAS;EACT,cAAc;AAChB;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;;EAEE,uEAAiE;AACnE;;AAEA;EACE,yBAAyB;EACzB,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,UAAU;EACV,SAAS;EACT,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,yDAAiD;EACjD,0BAA0B;EAC1B,+BAA+B;EAC/B,4BAA4B;EAC5B,4BAA4B;EAC5B,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,gBAAgB;EAChB,kBAAkB;EAClB,aAAa;AACf;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;EACrB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,iBAAiB;EACjB,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,aAAa;EACb,eAAe;EACf,qBAAqB;EACrB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,gBAAgB;EAChB,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,iBAAiB;EACjB,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,2CAA2C;EAC3C,mBAAmB;EACnB,oBAAoB;EACpB,oCAAoC;EACpC,cAAc;AAChB;;AAEA;EACE,8CAA8C;EAC9C,mBAAmB;EACnB,oBAAoB;EACpB,eAAe;EACf,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,+BAA+B;EAC/B,gBAAgB;EAChB,gBAAgB;EAChB,2BAA2B;AAC7B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,8BAA8B;EAC9B,gCAAgC;AAClC;;AAEA;EACE,cAAc;EACd,kCAAkC;EAClC,kBAAkB;EAClB,kBAAkB;EAClB,WAAW;EACX,eAAe;EACf,WAAW;EACX,0CAA0C;EAC1C,+BAA+B;EAC/B,sCAAsC;EACtC,0CAA0C;EAC1C,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,0CAA0C;AAC5C;;AAEA;EACE,gCAAgC;EAChC,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,cAAc;EACd,kCAAkC;EAClC,iBAAiB;EACjB,gBAAgB;EAChB,kCAAkC;EAClC,WAAW;EACX,iBAAiB;EACjB,yBAAyB;EACzB,YAAY;EACZ,6BAA6B;EAC7B,kBAAkB;EAClB,kBAAkB;;EAElB,iDAAiD;EACjD,yBAAyB;EACzB,qBAAqB;;EAErB,yBAAyB;EACzB,sEAAsE;EACtE,qBAAqB;EACrB,uCAAuC;EACvC,sBAAsB;;EAEtB,iEAAiE;EACjE,iBAAiB;EACjB,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;AACf;;AAEA;EACE,8BAA8B;EAC9B,4BAA4B;EAC5B,UAAU;EACV;0BACwB;AAC1B;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,0CAA0C;AAC5C;;AAEA;;EAEE,YAAY;EACZ,aAAa;EACb,UAAU;EACV,gBAAgB;EAChB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,OAAO;EACP,MAAM;EACN,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;EACxC,6CAA6C;EAC7C,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,OAAO;EACP,MAAM;EACN,aAAa;AACf;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,kCAAkC;EAClC,iBAAiB;EACjB,gBAAgB;EAChB,oBAAoB;EACpB,WAAW;AACb;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,UAAU;EACV,uBAAuB;EACvB,gBAAgB;EAChB,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,oBAAoB;AACtB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,kBAAkB;EAClB,mBAAmB;EACnB,eAAe;EACf,gBAAgB;EAChB,gCAAgC;EAChC,kBAAkB;EAClB,yBAAyB;EACzB,cAAc;EACd,yBAAyB;EACzB,kBAAkB;EAClB,oBAAoB;EACpB,sCAAsC;EACtC,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,cAAc;EACd,yBAAyB;EACzB,qBAAqB;EACrB,eAAe;AACjB;;AAEA;;EAEE,gCAAgC;EAChC,UAAU;EACV,qBAAqB;EACrB,0BAA0B;AAC5B;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,kCAAkC;EAClC,uBAAuB;EACvB,kCAAkC;EAClC,4BAA4B;AAC9B;;AAEA;EACE,kCAAkC;EAClC,mBAAmB;EACnB,kCAAkC;AACpC;;AAEA;EACE,oCAAoC;EACpC,qBAAqB;EACrB,kCAAkC;EAClC,qCAAqC;EACrC,+BAA+B;AACjC;;AAEA;EACE,UAAU;EACV,8BAA8B;AAChC;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE;IACE,sBAAsB;IACtB,mBAAmB;EACrB;AACF;;AAEA;EACE;IACE,sBAAsB;IACtB,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;IACnB,uBAAuB;EACzB;;EAEA;IACE,kBAAkB;EACpB;AACF;;AAEA;EACE,cAAc;EACd,cAAc;EACd,WAAW;EACX,yDAAgD;EAChD,0BAA0B;EAC1B,+BAA+B;EAC/B,4BAA4B;AAC9B;;AAEA;EACE;IACE,eAAe;EACjB;AACF;;AAEA;EACE;IACE,cAAc;EAChB;AACF;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;;;EAGE,qBAAqB;EACrB,cAAc;EACd,gBAAgB;EAChB,qBAAqB;EACrB,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,qBAAqB;EACrB,8BAA8B;AAChC;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;;AAEA;;EAEE,qBAAqB;AACvB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,cAAc;AAChB;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;;;;;EAKE,WAAW;EACX,eAAe;EACf,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;EACpB,uBAAuB;AACzB;;;AAGA;EACE,cAAc;EACd;yBACuB;AACzB;;AAEA;;EAEE,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;EACrB,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,oBAAoB;EACpB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,qBAAqB;EACrB,yBAAyB;EACzB,SAAS;EACT,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,UAAU;EACV,SAAS;EACT,aAAa;EACb,UAAU;EACV,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;EACzB,eAAe;AACjB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,qBAAqB;EACrB,6BAA6B;EAC7B,gCAAgC;EAChC,4BAA4B;EAC5B,wBAAwB;AAC1B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;EACZ,2BAA2B;EAC3B,yBAAyB;AAC3B;;AAEA;EACE,YAAY;EACZ,2BAA2B;AAC7B;8BAC8B;EAC5B,yBAAyB;AAC3B;;AAEA;EACE;yBACuB;EACvB,cAAc;EACd,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,iDAAiD;EACjD,yBAAyB;EACzB,qBAAqB;;EAErB,yBAAyB;EACzB,sEAAsE;EACtE,qBAAqB;EACrB,uCAAuC;EACvC,sBAAsB;;EAEtB,iEAAiE;EACjE,iBAAiB;EACjB,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;AACf;;AAEA;;EAEE,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;;EAEE,qBAAqB;EACrB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;EACpC,eAAe;EACf,eAAe;EACf,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,eAAe;AACjB;;AAEA;;EAEE,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,yBAAyB;EACzB,yBAAyB;EACzB,gCAAgC;EAChC,yBAAyB;AAC3B;;AAEA;EACE,kBAAkB;AACpB;;AAEA,wCAAwC;AACxC;;EAEE,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,SAAS;EACT,QAAQ;AACV;;AAEA,0CAA0C;AAC1C;;EAEE,yBAAyB;AAC3B;;AAEA,yDAAyD;AACzD;;EAEE,yBAAyB;EACzB,gCAAgC;AAClC;;AAEA,kEAAkE;AAClE;;EAEE,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA,6DAA6D;AAC7D;;EAEE,WAAW;EACX,kBAAkB;EAClB,aAAa;AACf;;AAEA,oCAAoC;AACpC;;EAEE,cAAc;AAChB;;AAEA,kCAAkC;AAClC;EACE,SAAS;EACT,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,qBAAqB;EACrB,yBAAyB;EACzB,gCAAgC;EAChC,4BAA4B;EAC5B,wBAAwB;AAC1B;;AAEA,kCAAkC;AAClC;EACE,QAAQ;EACR,SAAS;EACT,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;;IAEI,UAAU;IACV,8BAA8B;AAClC;;AAEA;;IAEI,UAAU;IACV,gBAAgB;AACpB;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;EACzB,cAAc;EACd,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,uBAAuB;EACvB,kBAAkB;EAClB,UAAU;EACV,YAAY;EACZ,SAAS;EACT,qBAAqB;EACrB,UAAU;EACV,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,SAAS;EACT,iBAAiB;EACjB,iBAAiB;EACjB,mBAAmB;EACnB,yDAAyD;AAC3D;;AAEA;EACE,mBAAmB;EACnB,UAAU;AACZ;;AAEA;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,qBAAqB;EACrB,gCAAgC;EAChC,kBAAkB;EAClB,iBAAiB;EACjB,gBAAgB;EAChB,sBAAsB;EACtB,cAAc;EACd,4BAA4B;EAC5B,oCAAoC;EACpC,mBAAmB;EACnB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,cAAc;EACd,mBAAmB;EACnB,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,mBAAmB;EACnB,yBAAyB;AAC3B;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,2BAA2B;EAC3B,8GAA8G;EAC9G,qBAAqB;EACrB,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,8BAA8B;EAC9B,sHAAsH;EACtH,qBAAqB;EACrB,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,4BAA4B;EAC5B,kHAAkH;EAClH,qBAAqB;EACrB,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,cAAc;AAChB,C","sources":["webpack://hollow-knight-completion-check/./src/css/fontello.css","webpack://hollow-knight-completion-check/./src/css/simpleicon.css","webpack://hollow-knight-completion-check/./src/css/reznoricon.css","webpack://hollow-knight-completion-check/./src/css/style.css"],"sourcesContent":["@font-face {\r\n font-family: 'fontello';\r\n src: url('../font/fontello.eot?59947760');\r\n src: url('../font/fontello.eot?59947760#iefix') format('embedded-opentype'),\r\n url('../font/fontello.woff2?59947760') format('woff2'),\r\n url('../font/fontello.woff?59947760') format('woff'),\r\n url('../font/fontello.ttf?59947760') format('truetype'),\r\n url('../font/fontello.svg?59947760#fontello') format('svg');\r\n font-weight: normal;\r\n font-style: normal;\r\n}\r\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\r\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\r\n/*\r\n@media screen and (-webkit-min-device-pixel-ratio:0) {\r\n @font-face {\r\n font-family: 'fontello';\r\n src: url('../font/fontello.svg?59947760#fontello') format('svg');\r\n }\r\n}\r\n*/\r\n[class^=\"icon-\"]:before, [class*=\" icon-\"]:before {\r\n font-family: \"fontello\";\r\n font-style: normal;\r\n font-weight: normal;\r\n speak: never;\r\n\r\n display: inline-block;\r\n text-decoration: inherit;\r\n width: 1em;\r\n margin-right: .2em;\r\n text-align: center;\r\n /* opacity: .8; */\r\n\r\n /* For safety - reset parent styles, that can break glyph codes*/\r\n font-variant: normal;\r\n text-transform: none;\r\n\r\n /* fix buttons height, for twitter bootstrap */\r\n line-height: 1em;\r\n\r\n /* Animation center compensation - margins should be symmetric */\r\n /* remove if not needed */\r\n margin-left: .2em;\r\n\r\n /* you can be more comfortable with increased icons size */\r\n /* font-size: 120%; */\r\n\r\n /* Font smoothing. That was taken from TWBS */\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n\r\n /* Uncomment for 3D effect */\r\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\r\n}\r\n\r\n.icon-cancel:before { content: '\\e800'; } /* '' */\r\n.icon-arrows-cw:before { content: '\\e801'; } /* '' */\r\n.icon-clock:before { content: '\\e804'; } /* '' */\r\n.icon-download-cloud:before { content: '\\f0ed'; } /* '' */\r\n.icon-ok-squared:before { content: '\\f14a'; } /* '' */\r\n.icon-doc-text-inv:before { content: '\\f15c'; } /* '' */\r\n","/* SVG from Simple Icons https://github.com/simple-icons/simple-icons */\r\n\r\n[class^=\"simpleicon-\"],\r\n[class*=\" simpleicon-\"] {\r\n position: relative;\r\n padding-left: 1.6em;\r\n}\r\n\r\n[class^=\"simpleicon-\"]:before,\r\n[class*=\" simpleicon-\"]:before {\r\n position: absolute;\r\n display: inline-block;\r\n left: 0;\r\n top: 0;\r\n width: 1.2em;\r\n height: 1.2em;\r\n margin-right: .2em;\r\n text-align: center;\r\n line-height: 0;\r\n margin-left: .2em;\r\n padding-top: 0.1em;\r\n}\r\n\r\n.simpleicon-youtube:before {\r\n content: url(\"../img/youtube.svg\");\r\n}\r\n\r\n.simpleicon-steam:before {\r\n content: url(\"../img/steam.svg\");\r\n}\r\n\r\n.simpleicon-paypal:before {\r\n content: url(\"../img/paypal.svg\");\r\n}\r\n\r\n.simpleicon-github:before {\r\n content: url(\"../img/github.svg\");\r\n}\r\n\r\n.simpleicon-instagram:before {\r\n content: url(\"../img/instagram.svg\");\r\n}\r\n\r\n.simpleicon-twitter:before {\r\n content: url(\"../img/twitter.svg\");\r\n}","[class^=\"reznoricon-\"],\r\n[class*=\" reznoricon-\"] {\r\n position: relative;\r\n padding-left: 1.48em;\r\n}\r\n\r\n[class^=\"reznoricon-\"]:before,\r\n[class*=\" reznoricon-\"]:before {\r\n position: absolute;\r\n display: inline-block;\r\n left: 0;\r\n top: 0;\r\n width: 1.2em;\r\n height: 1.2em;\r\n padding: 0.1em 0 0.1em 0.1em;\r\n margin: 0;\r\n text-align: center;\r\n line-height: 0;\r\n content: \"\";\r\n background-size: auto 100%;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n.reznoricon-binding-nail:before {\r\n background-image: url(\"../img/binding-nail.png\");\r\n}\r\n\r\n.reznoricon-binding-shell:before {\r\n background-image: url(\"../img/binding-shell.png\");\r\n}\r\n\r\n.reznoricon-binding-charms:before {\r\n background-image: url(\"../img/binding-charms.png\");\r\n}\r\n\r\n.reznoricon-binding-soul:before {\r\n background-image: url(\"../img/binding-soul.png\");\r\n}\r\n\r\n.reznoricon-binding-all:before {\r\n background-image: url(\"../img/binding-all.png\");\r\n}\r\n\r\n.reznoricon-attuned:before {\r\n background-image: url(\"../img/attuned.png\");\r\n}\r\n\r\n.reznoricon-ascended:before {\r\n background-image: url(\"../img/ascended.png\");\r\n}\r\n\r\n.reznoricon-radiant:before {\r\n background-image: url(\"../img/radiant.png\");\r\n}","/* Font license info\r\n\r\n## Font Awesome\r\n\r\n Copyright (C) 2016 by Dave Gandy\r\n\r\n Author: Dave Gandy\r\n License: SIL ()\r\n Homepage: http://fortawesome.github.com/Font-Awesome/\r\n\r\n\r\n## Entypo\r\n\r\n Copyright (C) 2012 by Daniel Bruce\r\n\r\n Author: Daniel Bruce\r\n License: SIL (http://scripts.sil.org/OFL)\r\n Homepage: http://www.entypo.com\r\n*/\r\n\r\n:root {\r\n --rt-main: #1e4d6c;\r\n cursor: default;\r\n}\r\n\r\nhtml {\r\n font-size: 17px;\r\n font-weight: 300;\r\n}\r\n\r\nbody {\r\n font-family: 'Heebo', sans-serif;\r\n color: #fff;\r\n background-color: #0c120f;\r\n margin: 0;\r\n overflow: auto;\r\n}\r\n\r\n::-webkit-scrollbar {\r\n width: 1rem;\r\n height: 1rem;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n background-color: #1e4d6c;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:hover {\r\n background-color: #2e5d7c;\r\n}\r\n\r\n::-webkit-scrollbar-track,\r\n::-webkit-scrollbar-track-piece {\r\n background: url(\"../img/scrollbar-track.png\") repeat-y !important;\r\n}\r\n\r\n::-webkit-resizer {\r\n background-color: #050d19;\r\n color: #1e4d6c;\r\n}\r\n\r\n#background {\r\n position: fixed;\r\n padding: 0;\r\n margin: 0;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-image: url(\"../img/hk-background.jpg\");\r\n background-size: auto 100%;\r\n background-position: center top;\r\n background-repeat: no-repeat;\r\n background-attachment: fixed;\r\n z-index: 1;\r\n}\r\n\r\n#content {\r\n max-width: 600px;\r\n margin: 0 auto;\r\n padding: 0 .6rem;\r\n position: relative;\r\n z-index: 1000;\r\n}\r\n\r\nb {\r\n font-weight: 500;\r\n color: #aac7d4;\r\n}\r\n\r\np {\r\n margin-top: 0.6rem;\r\n margin-bottom: 0.6rem;\r\n}\r\n\r\ndel {\r\n text-decoration: none;\r\n opacity: 0.5;\r\n}\r\n\r\nstrong {\r\n font-weight: 700;\r\n font-size: 1.03em;\r\n line-height: 1em;\r\n letter-spacing: 0.012em;\r\n}\r\n\r\nh1 {\r\n font-size: 2.3rem;\r\n color: #fff;\r\n margin: 2rem 0 0 0;\r\n}\r\n\r\n#h1-title {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n text-align: center;\r\n line-height: 2rem;\r\n}\r\n\r\n#sub-title {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n text-align: center;\r\n font-size: 1.2rem;\r\n margin: 0 0 1rem 0;\r\n line-height: 1.5rem;\r\n}\r\n\r\nh2 {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n font-size: 1.6rem;\r\n text-align: center;\r\n margin: 1.8rem 0 0.6rem 0;\r\n color: #fff;\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: center;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\nh6 {\r\n text-align: center;\r\n font-size: 1.2rem;\r\n font-weight: 500;\r\n margin: 0.6rem 0;\r\n color: rgba(231, 251, 255, 0.6);\r\n}\r\n\r\n.hall-of-fame {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n font-size: 1.6rem;\r\n line-height: 1.6rem;\r\n color: rgb(0, 255, 221);\r\n margin-bottom: 1rem;\r\n}\r\n\r\n.hall-of-fame-border {\r\n border: 0.2rem solid rgba(0, 255, 220, 0.6);\r\n border-radius: 1rem;\r\n border-style: double;\r\n padding: 0.7rem 1.3rem 0.7rem 1.3rem;\r\n margin: 1.3rem;\r\n}\r\n\r\n#hk-hints {\r\n border: 0.2rem solid rgba(231, 251, 255, 0.33);\r\n border-radius: 1rem;\r\n border-style: double;\r\n padding: 1.3rem;\r\n margin: 1.3rem;\r\n}\r\n\r\n#h2-hk-hints {\r\n margin-top: 0;\r\n color: rgba(255, 255, 255, 1.0);\r\n font-weight: 400;\r\n text-align: left;\r\n justify-content: flex-start;\r\n}\r\n\r\n#hk-true-completion {\r\n margin-top: 0;\r\n}\r\n\r\n.section-description {\r\n text-align: center;\r\n font-size: 0.8rem;\r\n margin: 0 1.3rem 1.3rem 1.3rem;\r\n color: rgba(129, 221, 224, 0.85);\r\n}\r\n\r\n#save-location-input {\r\n display: block;\r\n font-family: 'Consolas', monospace;\r\n font-size: 0.75rem;\r\n text-align: center;\r\n width: 32em;\r\n max-width: 32em;\r\n color: #fff;\r\n background-color: rgba(128, 128, 128, 0.5);\r\n margin: 0.4rem auto 0.6rem auto;\r\n padding: 0.16rem 0.5rem 0.25rem 0.5rem;\r\n border: 1px solid rgba(231, 251, 255, 0.6);\r\n border-radius: 3px;\r\n}\r\n\r\n#save-location-input:focus {\r\n outline: 0;\r\n border: 1px solid rgba(231, 251, 255, 0.8);\r\n}\r\n\r\ninput {\r\n font-family: 'Heebo', sans-serif;\r\n font-size: 1rem;\r\n text-align: left;\r\n}\r\n\r\ntextarea {\r\n display: block;\r\n font-family: 'Consolas', monospace;\r\n font-size: 0.8rem;\r\n text-align: left;\r\n background-color: rgba(0, 0, 0, 0);\r\n color: #fff;\r\n caret-color: #fff;\r\n border: 1px solid #e3ebf7;\r\n padding: 2px;\r\n margin: 0.5rem 2px 0.5rem 2px;\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n\r\n /* These are technically the same, but use both */\r\n overflow-wrap: break-word;\r\n word-wrap: break-word;\r\n\r\n -ms-word-break: break-all;\r\n /* This is the dangerous one in WebKit, as it breaks things wherever */\r\n word-break: break-all;\r\n /* Instead use this non-standard one: */\r\n word-break: break-word;\r\n\r\n /* Adds a hyphen where the word breaks, if supported (No Blink) */\r\n -ms-hyphens: none;\r\n -moz-hyphens: none;\r\n -webkit-hyphens: none;\r\n hyphens: none;\r\n}\r\n\r\ntextarea:focus {\r\n border-color: rgba(0, 0, 0, 0);\r\n box-shadow: 0 0 4px 2px #fff;\r\n outline: 0;\r\n /* outline: #fff 2px solid;\r\n outline-offset: 1px; */\r\n}\r\n\r\ntextarea::placeholder {\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 1rem;\r\n text-align: center;\r\n caret-color: #fff;\r\n}\r\n\r\ninput[type=\"file\"] {\r\n /* max-width: 500px; */\r\n /* margin: 0.5rem 0.5rem 0.5rem 0.25rem; */\r\n}\r\n\r\n.input-file,\r\n.input-button {\r\n width: 0.1px;\r\n height: 0.1px;\r\n opacity: 0;\r\n overflow: hidden;\r\n position: absolute;\r\n z-index: -1;\r\n}\r\n\r\n#file-input-label {\r\n max-width: 325px;\r\n}\r\n\r\n#save-area {\r\n width: 100%;\r\n max-width: 584px;\r\n height: 5.65rem;\r\n}\r\n\r\n#drop-area {\r\n position: fixed;\r\n width: 100%;\r\n height: 100%;\r\n left: 0;\r\n top: 0;\r\n z-index: 9999;\r\n visibility: hidden;\r\n}\r\n\r\n#drop-area-inside {\r\n background-color: rgba(38, 189, 38, 0.5);\r\n border: 0.3rem dashed rgba(38, 189, 38, 0.85);\r\n border-radius: 1rem;\r\n width: 100%;\r\n height: 100%;\r\n left: 0;\r\n top: 0;\r\n z-index: 9000;\r\n}\r\n\r\n#drop-area #drop-area-inside.highlight {\r\n border-color: rgb(61, 228, 61);\r\n}\r\n\r\n.code-little {\r\n font-family: 'Consolas', monospace;\r\n font-size: 0.7rem;\r\n text-align: left;\r\n margin: 0 0 0 0.5rem;\r\n color: #fff;\r\n}\r\n\r\n.hint {\r\n display: block;\r\n font-style: italic;\r\n}\r\n\r\n.single-entry .spoiler-span,\r\n.single-entry .spoiler-span-green {\r\n margin-left: 0.4rem;\r\n}\r\n\r\n.spoiler-span.blurred:hover {\r\n cursor: default;\r\n}\r\n\r\n.hint::first-letter {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n float: left;\r\n padding: 0;\r\n margin: 0.2em 0.1em 0 0;\r\n font-size: 2.8em;\r\n font-style: normal;\r\n line-height: 0.6em;\r\n font-weight: 500;\r\n}\r\n\r\n.buttons {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.input-buttons {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n align-items: inherit;\r\n}\r\n\r\n.tab-switch-buttons {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n margin: 1rem 0;\r\n}\r\n\r\n.checkboxes {\r\n margin-top: 0rem;\r\n}\r\n\r\n.button {\r\n display: inline-flex;\r\n align-content: center;\r\n align-items: center;\r\n width: max-content;\r\n height: max-content;\r\n font-size: 1rem;\r\n font-weight: 500;\r\n font-family: 'Heebo', sans-serif;\r\n text-align: center;\r\n background-color: #1e4d6c;\r\n color: #aac7d4;\r\n border: 2px solid #183c55;\r\n border-radius: 2px;\r\n padding: 0.3rem 1rem;\r\n margin: 0.25rem 0.5rem 0.25rem 0.25rem;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.button:first-child {\r\n margin-left: 0.25rem;\r\n}\r\n\r\n.button:hover {\r\n color: #d9f3ff;\r\n background-color: #2e5d7c;\r\n border-color: #2e5d7c;\r\n cursor: pointer;\r\n}\r\n\r\n.button:focus,\r\n.input-file:focus+label {\r\n /* outline: 2px solid #5e8dac; */\r\n outline: 0;\r\n border-color: #5e8dac;\r\n /* outline-offset: -2px; */\r\n}\r\n\r\n.button:focus:not(:focus-visible) {\r\n border-color: rgba(0, 0, 0, 0);\r\n}\r\n\r\n.button-large {\r\n border-width: 7px;\r\n border-radius: 4px;\r\n}\r\n\r\n.button-square {\r\n padding: 0.3rem;\r\n}\r\n\r\n.tab-switch {\r\n background-color: rgba(0, 0, 0, 0);\r\n color: rgb(0, 180, 156);\r\n border: 2px solid rgba(0, 0, 0, 0);\r\n border-radius: 1rem 0 1rem 0;\r\n}\r\n\r\n.tab-switch:hover {\r\n background-color: rgb(0, 180, 156);\r\n color: rgb(0, 0, 0);\r\n border: 2px solid rgba(0, 0, 0, 0);\r\n}\r\n\r\n.tab-active {\r\n background-color: rgb(235, 235, 235);\r\n color: rgb(0, 39, 34);\r\n border: 2px solid rgba(0, 0, 0, 0);\r\n box-shadow: 0 0 1rem rgb(0, 180, 156);\r\n text-shadow: 0 0 0.5rem #97fff1;\r\n}\r\n\r\n.tab-switch:focus {\r\n outline: 0;\r\n border-color: rgb(0, 255, 221);\r\n}\r\n\r\n.tab-switch:focus:not(:focus-visible) {\r\n border-color: rgba(0, 0, 0, 0);\r\n}\r\n\r\n.centered {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n@media screen and (max-width: 570px) {\r\n .centered {\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 400px) {\r\n .buttons {\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n\r\n .input-buttons {\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .checkboxes {\r\n margin-top: 0.8rem;\r\n }\r\n}\r\n\r\n.horizontal-line {\r\n margin: 1rem 0;\r\n height: 1.5rem;\r\n width: 100%;\r\n background-image: url(\"../img/fleur-divide.png\");\r\n background-size: auto 100%;\r\n background-position: center top;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n@media screen and (max-width: 460px) {\r\n .horizontal-line {\r\n height: 1.15rem;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 360px) {\r\n .horizontal-line {\r\n height: 0.9rem;\r\n }\r\n}\r\n\r\n.smalltext {\r\n font-size: 0.8rem;\r\n text-align: center;\r\n}\r\n\r\na,\r\na:active,\r\na:visited {\r\n display: inline-block;\r\n color: #aac7d4;\r\n font-weight: 700;\r\n text-decoration: none;\r\n transition: all 0.3s ease;\r\n}\r\n\r\na:hover {\r\n color: #d9f3ff;\r\n text-decoration: none;\r\n text-shadow: 0 0 0.6em #1bff73;\r\n}\r\n\r\na.button:active,\r\na.button:visited {\r\n font-weight: 500;\r\n}\r\n\r\na.button:hover {\r\n text-shadow: none;\r\n}\r\n\r\na.wiki {\r\n font-weight: 500;\r\n}\r\n\r\n.link-social {\r\n margin: 0.25rem;\r\n}\r\n\r\n[class^=\"icon-\"]:before,\r\n[class*=\" icon-\"]:before {\r\n margin-right: 0.275em;\r\n}\r\n\r\n.icon-cancel {\r\n color: #f03a17;\r\n}\r\n\r\n.icon-ok-squared {\r\n color: #16c60c;\r\n}\r\n\r\n.partial {\r\n color: rgba(255, 255, 255, 0.3);\r\n /* text-shadow: 0 0 0.3rem #fff; */\r\n}\r\n\r\n.icon-info-circled {\r\n color: #479ae7;\r\n}\r\n\r\n.icon-download-cloud,\r\n.icon-doc-text-inv {\r\n color: #d9f3ff;\r\n}\r\n\r\n.flex-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n align-items: normal;\r\n justify-content: left;\r\n}\r\n\r\n.flex-row {\r\n flex-direction: row;\r\n}\r\n\r\n.align-center {\r\n align-items: center;\r\n}\r\n\r\n.silk-bar:first-child {\r\n padding-left: 0.3rem;\r\n}\r\n\r\n.health-mask,\r\n/*.silk-bar,*/\r\n.rosaries-symbol,\r\n.shell-shards-symbol,\r\n.crest {\r\n width: auto;\r\n height: 1.48rem;\r\n margin: 0 0 0 0.3rem;\r\n}\r\n\r\n.crest {\r\n padding-left: 0.1rem;\r\n /*margin-left: 0.6rem;*/\r\n}\r\n\r\n\r\n.silk-bar {\r\n height: 1.3rem;\r\n /*padding-left: 0.3rem;\r\n margin-left: -0.15rem;*/\r\n}\r\n\r\n.shell-shards-symbol,\r\n.rosaries-symbol {\r\n margin-right: 0.15rem;\r\n}\r\n\r\n.padding-left {\r\n padding-left: 1.47rem;\r\n height: 1.47rem;\r\n}\r\n\r\n.p-left-small {\r\n display: inline;\r\n padding-left: 0.3rem;\r\n height: 1.47rem;\r\n}\r\n\r\n.scroll-up-button {\r\n width: 50px;\r\n height: 50px;\r\n text-decoration: none;\r\n background-color: #1e4d6c;\r\n border: 0;\r\n border-radius: 2px;\r\n outline: 0;\r\n position: fixed;\r\n right: 1px;\r\n bottom: 0;\r\n z-index: 1100;\r\n opacity: 0;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.scroll-up-button:hover {\r\n background-color: #2e5d7c;\r\n cursor: pointer;\r\n}\r\n\r\n.scroll-up-button-arrow {\r\n position: relative;\r\n left: 12px;\r\n top: 3px;\r\n width: 12px;\r\n height: 12px;\r\n border: solid #aac7d4;\r\n border-width: 2px 0px 0px 2px;\r\n -webkit-transform: rotate(45deg);\r\n -ms-transform: rotate(45deg);\r\n transform: rotate(45deg);\r\n}\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.visible-block {\r\n display: block;\r\n}\r\n\r\n.opacity-none {\r\n opacity: 0;\r\n}\r\n\r\n.opacity-full {\r\n opacity: 1;\r\n}\r\n\r\n.wiki.blurred {\r\n color: #0000;\r\n background-color: #cfffed2d;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.blurred {\r\n color: #0000;\r\n background-color: #ffffff1f;\r\n/* filter: blur(5px);\r\n -webkit-filter: blur(5px); */\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.blurred:hover {\r\n /* filter: none;\r\n -webkit-filter: none; */\r\n color: inherit;\r\n background-color: inherit;\r\n}\r\n\r\n.spoiler-text {\r\n display: inline;\r\n /* These are technically the same, but use both */\r\n overflow-wrap: break-word;\r\n word-wrap: break-word;\r\n\r\n -ms-word-break: break-all;\r\n /* This is the dangerous one in WebKit, as it breaks things wherever */\r\n word-break: break-all;\r\n /* Instead use this non-standard one: */\r\n word-break: break-word;\r\n\r\n /* Adds a hyphen where the word breaks, if supported (No Blink) */\r\n -ms-hyphens: auto;\r\n -moz-hyphens: auto;\r\n -webkit-hyphens: auto;\r\n hyphens: auto;\r\n}\r\n\r\n.radio,\r\n.checkbox {\r\n position: relative;\r\n display: block;\r\n left: -40px;\r\n padding: 4px;\r\n margin-left: 10px;\r\n}\r\n\r\ninput[type=\"checkbox\"],\r\ninput[type=\"radio\"] {\r\n margin-right: 10px;\r\n}\r\n\r\n.radio-label,\r\n.checkbox-label {\r\n display: inline-block;\r\n position: relative;\r\n margin: 0.4rem 0 0 0.5rem;\r\n padding: 0.25rem 0.5rem 0.25rem 2rem;\r\n cursor: pointer;\r\n font-size: 1rem;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n width: max-content;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.checkbox-label:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.radiomark,\r\n.checkmark {\r\n position: absolute;\r\n top: 0.27em;\r\n left: 0.27em;\r\n height: 1.3em;\r\n width: 1.3em;\r\n background-color: #aac7d4;\r\n border: 1px solid #1e4d6c;\r\n border: 1px solid var(--rt-main);\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.radiomark {\r\n border-radius: 50%;\r\n}\r\n\r\n/* Hide the browser's default checkbox */\r\ninput[type=\"checkbox\"],\r\ninput[type=\"radio\"] {\r\n position: absolute;\r\n opacity: 0;\r\n cursor: pointer;\r\n height: 0;\r\n width: 0;\r\n}\r\n\r\n/* On mouse-over change background color */\r\n.radio-label:hover .radiomark,\r\n.checkbox-label:hover .checkmark {\r\n background-color: #d9f3ff;\r\n}\r\n\r\n/* When the checkbox is checked change background color */\r\ninput:checked + label .radiomark,\r\ninput:checked + label .checkmark {\r\n background-color: #1e4d6c;\r\n background-color: var(--rt-main);\r\n}\r\n\r\n/* When the checkbox is checked change background color on hover */\r\ninput:checked + label:hover .radiomark,\r\ninput:checked + label:hover .checkmark {\r\n background-color: #2e5d7c;\r\n border-color: #2e5d7c;\r\n}\r\n\r\n/* Create the checkmark/indicator (hidden when not checked) */\r\n.radiomark:after,\r\n.checkmark:after {\r\n content: \"\";\r\n position: absolute;\r\n display: none;\r\n}\r\n\r\n/* Show the checkmark when checked */\r\ninput:checked + label .radiomark:after,\r\ninput:checked + label .checkmark:after {\r\n display: block;\r\n}\r\n\r\n/* Style the checkmark/indicator */\r\n.checkbox-label .checkmark:after {\r\n left: 7px;\r\n top: 2px;\r\n width: 6px;\r\n height: 12px;\r\n border: solid #aac7d4;\r\n border-width: 0 2px 2px 0;\r\n -webkit-transform: rotate(45deg);\r\n -ms-transform: rotate(45deg);\r\n transform: rotate(45deg);\r\n}\r\n\r\n/* Style the checkmark/indicator */\r\n.radio-label .radiomark:after {\r\n top: 7px;\r\n left: 7px;\r\n width: 10px;\r\n height: 10px;\r\n border-radius: 50%;\r\n background: #000;\r\n}\r\n\r\ninput[type=\"checkbox\"]:focus + label,\r\ninput[type=\"radio\"]:focus + label {\r\n outline: 0;\r\n box-shadow: 0 0 0.2rem #aac7d4;\r\n}\r\n\r\ninput[type=\"checkbox\"]:focus:not(:focus-visible) + label,\r\ninput[type=\"radio\"]:focus:not(:focus-visible) + label {\r\n outline: 0;\r\n box-shadow: none;\r\n}\r\n\r\n.tooltip {\r\n position: relative;\r\n display: block;\r\n margin: 0 auto;\r\n width: max-content;\r\n}\r\n\r\n.tooltip .tooltip-text {\r\n visibility: hidden;\r\n width: max-content;\r\n background-color: #1e4d6c;\r\n color: #d9f3ff;\r\n font-size: 0.85rem;\r\n text-align: center;\r\n border-radius: 3px;\r\n padding: 0.16rem 0.7rem;\r\n position: absolute;\r\n z-index: 1;\r\n bottom: 130%;\r\n left: 50%;\r\n margin-left: -108.5px;\r\n opacity: 0;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.tooltip .tooltip-text::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n margin-left: -5px;\r\n border-width: 5px;\r\n border-style: solid;\r\n border-color: #1e4d6c transparent transparent transparent;\r\n}\r\n\r\n.tooltip:hover .tooltip-text {\r\n visibility: visible;\r\n opacity: 1;\r\n}\r\n\r\n@media screen and (max-width: 570px) {\r\n .tooltip {\r\n display: none;\r\n }\r\n}\r\n\r\n.percent-box {\r\n display: inline-block;\r\n font-family: 'Heebo', sans-serif;\r\n text-align: center;\r\n font-size: 1.1rem;\r\n font-weight: 700;\r\n vertical-align: middle;\r\n color: #d9f3ff;\r\n margin: 0 0.5rem 0rem 0.5rem;\r\n padding: 0.2rem 1.2rem 0.2rem 1.2rem;\r\n background: #1e4d6c;\r\n border: 2px solid #3e6d8c;\r\n border-radius: 4px;\r\n}\r\n\r\n.box-red {\r\n color: #ffe2dd;\r\n background: #c22e14;\r\n border: 2px solid #e24e34;\r\n}\r\n\r\n.box-green {\r\n color: #ddffd9;\r\n background: #1e6c1e;\r\n border: 2px solid #2d8a49;\r\n}\r\n\r\n.pp-gold {\r\n font-weight: 700;\r\n color: #ffbc00;\r\n background: rgb(148, 81, 0);\r\n background: linear-gradient(90deg, rgba(148, 81, 0, 1) 0%, rgba(255, 188, 0, 1) 50%, rgba(148, 81, 0, 1) 100%);\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n}\r\n\r\n.pp-silver {\r\n font-weight: 700;\r\n color: #ebf9ff;\r\n background: rgb(183, 196, 201);\r\n background: linear-gradient(90deg, rgba(138, 151, 156, 1) 0%, rgba(235, 249, 255, 1) 50%, rgba(138, 151, 156, 1) 100%);\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n}\r\n\r\n.pp-bronze {\r\n font-weight: 700;\r\n color: #b98465;\r\n background: rgb(134, 85, 56);\r\n background: linear-gradient(90deg, rgba(134, 85, 56, 1) 0%, rgba(222, 168, 136, 1) 50%, rgba(134, 85, 56, 1) 100%);\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n}\r\n\r\n.t-green {\r\n font-weight: 700;\r\n color: #16c60c;\r\n}\r\n\r\n.t-red {\r\n font-weight: 700;\r\n color: #f03a17;\r\n}\r\n\r\n.t-gray {\r\n font-weight: 700;\r\n color: rgba(255, 255, 255, 0.18);\r\n}\r\n\r\n.test {\r\n color: #59d1da;\r\n}"],"names":[],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"main.css","mappings":";;;AAAA;EACE,uBAAuB;EACvB,4CAAyC;EACzC;;;;4DAIgE;EAChE,mBAAmB;EACnB,kBAAkB;AACpB;AACA,gGAAgG;AAChG,2FAA2F;AAC3F;;;;;;;CAOC;AACD;EACE,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;EACnB,YAAY;;EAEZ,qBAAqB;EACrB,wBAAwB;EACxB,UAAU;EACV,kBAAkB;EAClB,kBAAkB;EAClB,iBAAiB;;EAEjB,gEAAgE;EAChE,oBAAoB;EACpB,oBAAoB;;EAEpB,8CAA8C;EAC9C,gBAAgB;;EAEhB,gEAAgE;EAChE,yBAAyB;EACzB,iBAAiB;;EAEjB,0DAA0D;EAC1D,qBAAqB;;EAErB,6CAA6C;EAC7C,mCAAmC;EACnC,kCAAkC;;EAElC,4BAA4B;EAC5B,uDAAuD;AACzD;;AAEA,sBAAsB,gBAAgB,EAAE,EAAE,QAAQ;AAClD,yBAAyB,gBAAgB,EAAE,EAAE,QAAQ;AACrD,qBAAqB,gBAAgB,EAAE,EAAE,QAAQ;AACjD,8BAA8B,gBAAgB,EAAE,EAAE,QAAQ;AAC1D,0BAA0B,gBAAgB,EAAE,EAAE,QAAQ;AACtD,4BAA4B,gBAAgB,EAAE,EAAE,QAAQ;;;;;AC7DxD,uEAAuE;;AAEvE;;IAEI,kBAAkB;IAClB,mBAAmB;AACvB;;AAEA;;IAEI,kBAAkB;IAClB,qBAAqB;IACrB,OAAO;IACP,MAAM;IACN,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,gDAAkC;AACtC;;AAEA;IACI,gDAAgC;AACpC;;AAEA;IACI,gDAAiC;AACrC;;AAEA;IACI,gDAAiC;AACrC;;AAEA;IACI,gDAAoC;AACxC;;AAEA;IACI,gDAAkC;AACtC,C;;;;AC7CA;;IAEI,kBAAkB;IAClB,oBAAoB;AACxB;;AAEA;;IAEI,kBAAkB;IAClB,qBAAqB;IACrB,OAAO;IACP,MAAM;IACN,YAAY;IACZ,aAAa;IACb,4BAA4B;IAC5B,SAAS;IACT,kBAAkB;IAClB,cAAc;IACd,WAAW;IACX,0BAA0B;IAC1B,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;IACI,yDAAgD;AACpD;;AAEA;EACE,yDAAiD;AACnD;;AAEA;EACE,yDAAkD;AACpD;;AAEA;EACE,yDAAgD;AAClD;;AAEA;EACE,yDAA+C;AACjD;;AAEA;EACE,yDAA2C;AAC7C;;AAEA;EACE,yDAA4C;AAC9C;;AAEA;EACE,yDAA2C;AAC7C,C;;;;ACtDA;;;;;;;;;;;;;;;;;;CAkBC;;AAED;EACE,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,gCAAgC;EAChC,WAAW;EACX,yBAAyB;EACzB,SAAS;EACT,cAAc;AAChB;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;;EAEE,uEAAiE;AACnE;;AAEA;EACE,yBAAyB;EACzB,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,UAAU;EACV,SAAS;EACT,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,yDAAiD;EACjD,0BAA0B;EAC1B,+BAA+B;EAC/B,4BAA4B;EAC5B,4BAA4B;EAC5B,UAAU;AACZ;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,gBAAgB;EAChB,kBAAkB;EAClB,aAAa;AACf;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;EACrB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,iBAAiB;EACjB,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,aAAa;EACb,eAAe;EACf,qBAAqB;EACrB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,gBAAgB;EAChB,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,+CAA+C;EAC/C,gBAAgB;EAChB,iBAAiB;EACjB,mBAAmB;EACnB,sBAAsB;EACtB,mBAAmB;AACrB;;AAEA;EACE,2CAA2C;EAC3C,mBAAmB;EACnB,oBAAoB;EACpB,oCAAoC;EACpC,cAAc;AAChB;;AAEA;EACE,8CAA8C;EAC9C,mBAAmB;EACnB,oBAAoB;EACpB,eAAe;EACf,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,+BAA+B;EAC/B,gBAAgB;EAChB,gBAAgB;EAChB,2BAA2B;AAC7B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,8BAA8B;EAC9B,gCAAgC;AAClC;;AAEA;EACE,cAAc;EACd,kCAAkC;EAClC,kBAAkB;EAClB,kBAAkB;EAClB,WAAW;EACX,eAAe;EACf,WAAW;EACX,0CAA0C;EAC1C,+BAA+B;EAC/B,sCAAsC;EACtC,0CAA0C;EAC1C,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,0CAA0C;AAC5C;;AAEA;EACE,gCAAgC;EAChC,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,cAAc;EACd,kCAAkC;EAClC,iBAAiB;EACjB,gBAAgB;EAChB,kCAAkC;EAClC,WAAW;EACX,iBAAiB;EACjB,yBAAyB;EACzB,YAAY;EACZ,6BAA6B;EAC7B,kBAAkB;EAClB,kBAAkB;;EAElB,iDAAiD;EACjD,yBAAyB;EACzB,qBAAqB;;EAErB,yBAAyB;EACzB,sEAAsE;EACtE,qBAAqB;EACrB,uCAAuC;EACvC,sBAAsB;;EAEtB,iEAAiE;EACjE,iBAAiB;EACjB,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;AACf;;AAEA;EACE,8BAA8B;EAC9B,4BAA4B;EAC5B,UAAU;EACV;0BACwB;AAC1B;;AAEA;EACE,+BAA+B;EAC/B,eAAe;EACf,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,0CAA0C;AAC5C;;AAEA;;EAEE,YAAY;EACZ,aAAa;EACb,UAAU;EACV,gBAAgB;EAChB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,OAAO;EACP,MAAM;EACN,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,wCAAwC;EACxC,6CAA6C;EAC7C,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,OAAO;EACP,MAAM;EACN,aAAa;AACf;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,kCAAkC;EAClC,iBAAiB;EACjB,gBAAgB;EAChB,oBAAoB;EACpB,WAAW;AACb;;AAEA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,UAAU;EACV,uBAAuB;EACvB,gBAAgB;EAChB,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,eAAe;EACf,oBAAoB;AACtB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;EACvB,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,kBAAkB;EAClB,mBAAmB;EACnB,eAAe;EACf,gBAAgB;EAChB,gCAAgC;EAChC,kBAAkB;EAClB,yBAAyB;EACzB,cAAc;EACd,yBAAyB;EACzB,kBAAkB;EAClB,oBAAoB;EACpB,sCAAsC;EACtC,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,cAAc;EACd,yBAAyB;EACzB,qBAAqB;EACrB,eAAe;AACjB;;AAEA;;EAEE,gCAAgC;EAChC,UAAU;EACV,qBAAqB;EACrB,0BAA0B;AAC5B;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,kCAAkC;EAClC,sBAAsB;EACtB,kCAAkC;EAClC,4BAA4B;AAC9B;;AAEA;EACE,iCAAiC;EACjC,mBAAmB;EACnB,kCAAkC;AACpC;;AAEA;EACE,oCAAoC;EACpC,qBAAqB;EACrB,kCAAkC;EAClC,oCAAoC;EACpC,+BAA+B;AACjC;;AAEA;EACE,UAAU;EACV,6BAA6B;AAC/B;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE;IACE,sBAAsB;IACtB,mBAAmB;EACrB;AACF;;AAEA;EACE;IACE,sBAAsB;IACtB,mBAAmB;EACrB;;EAEA;IACE,mBAAmB;IACnB,uBAAuB;EACzB;;EAEA;IACE,kBAAkB;EACpB;AACF;;AAEA;EACE,cAAc;EACd,cAAc;EACd,WAAW;EACX,yDAAgD;EAChD,0BAA0B;EAC1B,+BAA+B;EAC/B,4BAA4B;AAC9B;;AAEA;EACE;IACE,eAAe;EACjB;AACF;;AAEA;EACE;IACE,cAAc;EAChB;AACF;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;;;EAGE,qBAAqB;EACrB,cAAc;EACd,gBAAgB;EAChB,qBAAqB;EACrB,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,qBAAqB;EACrB,8BAA8B;AAChC;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;;AAEA;;EAEE,qBAAqB;AACvB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,cAAc;AAChB;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;;;;;EAKE,WAAW;EACX,eAAe;EACf,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;EACpB,uBAAuB;AACzB;;;AAGA;EACE,cAAc;EACd;yBACuB;AACzB;;AAEA;;EAEE,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;EACrB,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,oBAAoB;EACpB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,qBAAqB;EACrB,yBAAyB;EACzB,SAAS;EACT,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,UAAU;EACV,SAAS;EACT,aAAa;EACb,UAAU;EACV,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;EACzB,eAAe;AACjB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,qBAAqB;EACrB,6BAA6B;EAC7B,gCAAgC;EAChC,4BAA4B;EAC5B,wBAAwB;AAC1B;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;EACZ,2BAA2B;EAC3B,yBAAyB;AAC3B;;AAEA;EACE,YAAY;EACZ,2BAA2B;AAC7B;8BAC8B;EAC5B,yBAAyB;AAC3B;;AAEA;EACE;yBACuB;EACvB,cAAc;EACd,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,iDAAiD;EACjD,yBAAyB;EACzB,qBAAqB;;EAErB,yBAAyB;EACzB,sEAAsE;EACtE,qBAAqB;EACrB,uCAAuC;EACvC,sBAAsB;;EAEtB,iEAAiE;EACjE,iBAAiB;EACjB,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;AACf;;AAEA;;EAEE,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;;EAEE,qBAAqB;EACrB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;EACpC,eAAe;EACf,eAAe;EACf,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,eAAe;AACjB;;AAEA;;EAEE,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,yBAAyB;EACzB,yBAAyB;EACzB,gCAAgC;EAChC,yBAAyB;AAC3B;;AAEA;EACE,kBAAkB;AACpB;;AAEA,wCAAwC;AACxC;;EAEE,kBAAkB;EAClB,UAAU;EACV,eAAe;EACf,SAAS;EACT,QAAQ;AACV;;AAEA,0CAA0C;AAC1C;;EAEE,yBAAyB;AAC3B;;AAEA,yDAAyD;AACzD;;EAEE,yBAAyB;EACzB,gCAAgC;AAClC;;AAEA,kEAAkE;AAClE;;EAEE,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA,6DAA6D;AAC7D;;EAEE,WAAW;EACX,kBAAkB;EAClB,aAAa;AACf;;AAEA,oCAAoC;AACpC;;EAEE,cAAc;AAChB;;AAEA,kCAAkC;AAClC;EACE,SAAS;EACT,QAAQ;EACR,UAAU;EACV,YAAY;EACZ,qBAAqB;EACrB,yBAAyB;EACzB,gCAAgC;EAChC,4BAA4B;EAC5B,wBAAwB;AAC1B;;AAEA,kCAAkC;AAClC;EACE,QAAQ;EACR,SAAS;EACT,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;;IAEI,UAAU;IACV,8BAA8B;AAClC;;AAEA;;IAEI,UAAU;IACV,gBAAgB;AACpB;;AAEA;EACE,kBAAkB;EAClB,cAAc;EACd,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;EACzB,cAAc;EACd,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,uBAAuB;EACvB,kBAAkB;EAClB,UAAU;EACV,YAAY;EACZ,SAAS;EACT,qBAAqB;EACrB,UAAU;EACV,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,SAAS;EACT,iBAAiB;EACjB,iBAAiB;EACjB,mBAAmB;EACnB,yDAAyD;AAC3D;;AAEA;EACE,mBAAmB;EACnB,UAAU;AACZ;;AAEA;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,qBAAqB;EACrB,gCAAgC;EAChC,kBAAkB;EAClB,iBAAiB;EACjB,gBAAgB;EAChB,sBAAsB;EACtB,cAAc;EACd,4BAA4B;EAC5B,oCAAoC;EACpC,mBAAmB;EACnB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,cAAc;EACd,mBAAmB;EACnB,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,mBAAmB;EACnB,yBAAyB;AAC3B;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,2BAA2B;EAC3B,8GAA8G;EAC9G,qBAAqB;EACrB,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,8BAA8B;EAC9B,sHAAsH;EACtH,qBAAqB;EACrB,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,4BAA4B;EAC5B,kHAAkH;EAClH,qBAAqB;EACrB,6BAA6B;EAC7B,oCAAoC;AACtC;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,cAAc;AAChB,C","sources":["webpack://hollow-knight-silksong-completion-check/./src/css/fontello.css","webpack://hollow-knight-silksong-completion-check/./src/css/simpleicon.css","webpack://hollow-knight-silksong-completion-check/./src/css/reznoricon.css","webpack://hollow-knight-silksong-completion-check/./src/css/style.css"],"sourcesContent":["@font-face {\r\n font-family: 'fontello';\r\n src: url('../font/fontello.eot?59947760');\r\n src: url('../font/fontello.eot?59947760#iefix') format('embedded-opentype'),\r\n url('../font/fontello.woff2?59947760') format('woff2'),\r\n url('../font/fontello.woff?59947760') format('woff'),\r\n url('../font/fontello.ttf?59947760') format('truetype'),\r\n url('../font/fontello.svg?59947760#fontello') format('svg');\r\n font-weight: normal;\r\n font-style: normal;\r\n}\r\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\r\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\r\n/*\r\n@media screen and (-webkit-min-device-pixel-ratio:0) {\r\n @font-face {\r\n font-family: 'fontello';\r\n src: url('../font/fontello.svg?59947760#fontello') format('svg');\r\n }\r\n}\r\n*/\r\n[class^=\"icon-\"]:before, [class*=\" icon-\"]:before {\r\n font-family: \"fontello\";\r\n font-style: normal;\r\n font-weight: normal;\r\n speak: never;\r\n\r\n display: inline-block;\r\n text-decoration: inherit;\r\n width: 1em;\r\n margin-right: .2em;\r\n text-align: center;\r\n /* opacity: .8; */\r\n\r\n /* For safety - reset parent styles, that can break glyph codes*/\r\n font-variant: normal;\r\n text-transform: none;\r\n\r\n /* fix buttons height, for twitter bootstrap */\r\n line-height: 1em;\r\n\r\n /* Animation center compensation - margins should be symmetric */\r\n /* remove if not needed */\r\n margin-left: .2em;\r\n\r\n /* you can be more comfortable with increased icons size */\r\n /* font-size: 120%; */\r\n\r\n /* Font smoothing. That was taken from TWBS */\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n\r\n /* Uncomment for 3D effect */\r\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\r\n}\r\n\r\n.icon-cancel:before { content: '\\e800'; } /* '' */\r\n.icon-arrows-cw:before { content: '\\e801'; } /* '' */\r\n.icon-clock:before { content: '\\e804'; } /* '' */\r\n.icon-download-cloud:before { content: '\\f0ed'; } /* '' */\r\n.icon-ok-squared:before { content: '\\f14a'; } /* '' */\r\n.icon-doc-text-inv:before { content: '\\f15c'; } /* '' */\r\n","/* SVG from Simple Icons https://github.com/simple-icons/simple-icons */\r\n\r\n[class^=\"simpleicon-\"],\r\n[class*=\" simpleicon-\"] {\r\n position: relative;\r\n padding-left: 1.6em;\r\n}\r\n\r\n[class^=\"simpleicon-\"]:before,\r\n[class*=\" simpleicon-\"]:before {\r\n position: absolute;\r\n display: inline-block;\r\n left: 0;\r\n top: 0;\r\n width: 1.2em;\r\n height: 1.2em;\r\n margin-right: .2em;\r\n text-align: center;\r\n line-height: 0;\r\n margin-left: .2em;\r\n padding-top: 0.1em;\r\n}\r\n\r\n.simpleicon-youtube:before {\r\n content: url(\"../img/youtube.svg\");\r\n}\r\n\r\n.simpleicon-steam:before {\r\n content: url(\"../img/steam.svg\");\r\n}\r\n\r\n.simpleicon-paypal:before {\r\n content: url(\"../img/paypal.svg\");\r\n}\r\n\r\n.simpleicon-github:before {\r\n content: url(\"../img/github.svg\");\r\n}\r\n\r\n.simpleicon-instagram:before {\r\n content: url(\"../img/instagram.svg\");\r\n}\r\n\r\n.simpleicon-twitter:before {\r\n content: url(\"../img/twitter.svg\");\r\n}","[class^=\"reznoricon-\"],\r\n[class*=\" reznoricon-\"] {\r\n position: relative;\r\n padding-left: 1.48em;\r\n}\r\n\r\n[class^=\"reznoricon-\"]:before,\r\n[class*=\" reznoricon-\"]:before {\r\n position: absolute;\r\n display: inline-block;\r\n left: 0;\r\n top: 0;\r\n width: 1.2em;\r\n height: 1.2em;\r\n padding: 0.1em 0 0.1em 0.1em;\r\n margin: 0;\r\n text-align: center;\r\n line-height: 0;\r\n content: \"\";\r\n background-size: auto 100%;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n.reznoricon-binding-nail:before {\r\n background-image: url(\"../img/binding-nail.png\");\r\n}\r\n\r\n.reznoricon-binding-shell:before {\r\n background-image: url(\"../img/binding-shell.png\");\r\n}\r\n\r\n.reznoricon-binding-charms:before {\r\n background-image: url(\"../img/binding-charms.png\");\r\n}\r\n\r\n.reznoricon-binding-soul:before {\r\n background-image: url(\"../img/binding-soul.png\");\r\n}\r\n\r\n.reznoricon-binding-all:before {\r\n background-image: url(\"../img/binding-all.png\");\r\n}\r\n\r\n.reznoricon-attuned:before {\r\n background-image: url(\"../img/attuned.png\");\r\n}\r\n\r\n.reznoricon-ascended:before {\r\n background-image: url(\"../img/ascended.png\");\r\n}\r\n\r\n.reznoricon-radiant:before {\r\n background-image: url(\"../img/radiant.png\");\r\n}","/* Font license info\r\n\r\n## Font Awesome\r\n\r\n Copyright (C) 2016 by Dave Gandy\r\n\r\n Author: Dave Gandy\r\n License: SIL ()\r\n Homepage: http://fortawesome.github.com/Font-Awesome/\r\n\r\n\r\n## Entypo\r\n\r\n Copyright (C) 2012 by Daniel Bruce\r\n\r\n Author: Daniel Bruce\r\n License: SIL (http://scripts.sil.org/OFL)\r\n Homepage: http://www.entypo.com\r\n*/\r\n\r\n:root {\r\n --rt-main: #1e6c38;\r\n cursor: default;\r\n}\r\n\r\nhtml {\r\n font-size: 17px;\r\n font-weight: 300;\r\n}\r\n\r\nbody {\r\n font-family: 'Heebo', sans-serif;\r\n color: #fff;\r\n background-color: #0c120f;\r\n margin: 0;\r\n overflow: auto;\r\n}\r\n\r\n::-webkit-scrollbar {\r\n width: 1rem;\r\n height: 1rem;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n background-color: #1e6c38;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:hover {\r\n background-color: #2e7c38;\r\n}\r\n\r\n::-webkit-scrollbar-track,\r\n::-webkit-scrollbar-track-piece {\r\n background: url(\"../img/scrollbar-track.png\") repeat-y !important;\r\n}\r\n\r\n::-webkit-resizer {\r\n background-color: #051905;\r\n color: #1e6c38;\r\n}\r\n\r\n#background {\r\n position: fixed;\r\n padding: 0;\r\n margin: 0;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-image: url(\"../img/hk-background.jpg\");\r\n background-size: auto 100%;\r\n background-position: center top;\r\n background-repeat: no-repeat;\r\n background-attachment: fixed;\r\n z-index: 1;\r\n}\r\n\r\n#content {\r\n max-width: 600px;\r\n margin: 0 auto;\r\n padding: 0 .6rem;\r\n position: relative;\r\n z-index: 1000;\r\n}\r\n\r\nb {\r\n font-weight: 500;\r\n color: #aad4b4;\r\n}\r\n\r\np {\r\n margin-top: 0.6rem;\r\n margin-bottom: 0.6rem;\r\n}\r\n\r\ndel {\r\n text-decoration: none;\r\n opacity: 0.5;\r\n}\r\n\r\nstrong {\r\n font-weight: 700;\r\n font-size: 1.03em;\r\n line-height: 1em;\r\n letter-spacing: 0.012em;\r\n}\r\n\r\nh1 {\r\n font-size: 2.3rem;\r\n color: #fff;\r\n margin: 2rem 0 0 0;\r\n}\r\n\r\n#h1-title {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n text-align: center;\r\n line-height: 2rem;\r\n}\r\n\r\n#sub-title {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n text-align: center;\r\n font-size: 1.2rem;\r\n margin: 0 0 1rem 0;\r\n line-height: 1.5rem;\r\n}\r\n\r\nh2 {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n font-size: 1.6rem;\r\n text-align: center;\r\n margin: 1.8rem 0 0.6rem 0;\r\n color: #fff;\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: center;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\nh6 {\r\n text-align: center;\r\n font-size: 1.2rem;\r\n font-weight: 500;\r\n margin: 0.6rem 0;\r\n color: rgba(231, 251, 255, 0.6);\r\n}\r\n\r\n.hall-of-fame {\r\n font-family: 'Cinzel', 'Times New Roman', serif;\r\n font-weight: 400;\r\n font-size: 1.6rem;\r\n line-height: 1.6rem;\r\n color: rgb(0, 255, 98);\r\n margin-bottom: 1rem;\r\n}\r\n\r\n.hall-of-fame-border {\r\n border: 0.2rem solid rgba(0, 255, 106, 0.6);\r\n border-radius: 1rem;\r\n border-style: double;\r\n padding: 0.7rem 1.3rem 0.7rem 1.3rem;\r\n margin: 1.3rem;\r\n}\r\n\r\n#hk-hints {\r\n border: 0.2rem solid rgba(231, 255, 234, 0.33);\r\n border-radius: 1rem;\r\n border-style: double;\r\n padding: 1.3rem;\r\n margin: 1.3rem;\r\n}\r\n\r\n#h2-hk-hints {\r\n margin-top: 0;\r\n color: rgba(255, 255, 255, 1.0);\r\n font-weight: 400;\r\n text-align: left;\r\n justify-content: flex-start;\r\n}\r\n\r\n#hk-true-completion {\r\n margin-top: 0;\r\n}\r\n\r\n.section-description {\r\n text-align: center;\r\n font-size: 0.8rem;\r\n margin: 0 1.3rem 1.3rem 1.3rem;\r\n color: rgba(129, 224, 134, 0.85);\r\n}\r\n\r\n#save-location-input {\r\n display: block;\r\n font-family: 'Consolas', monospace;\r\n font-size: 0.75rem;\r\n text-align: center;\r\n width: 37em;\r\n max-width: 37em;\r\n color: #fff;\r\n background-color: rgba(128, 128, 128, 0.5);\r\n margin: 0.4rem auto 0.6rem auto;\r\n padding: 0.16rem 0.5rem 0.25rem 0.5rem;\r\n border: 1px solid rgba(231, 251, 255, 0.6);\r\n border-radius: 3px;\r\n}\r\n\r\n#save-location-input:focus {\r\n outline: 0;\r\n border: 1px solid rgba(231, 251, 255, 0.8);\r\n}\r\n\r\ninput {\r\n font-family: 'Heebo', sans-serif;\r\n font-size: 1rem;\r\n text-align: left;\r\n}\r\n\r\ntextarea {\r\n display: block;\r\n font-family: 'Consolas', monospace;\r\n font-size: 0.8rem;\r\n text-align: left;\r\n background-color: rgba(0, 0, 0, 0);\r\n color: #fff;\r\n caret-color: #fff;\r\n border: 1px solid #e3ebf7;\r\n padding: 2px;\r\n margin: 0.5rem 2px 0.5rem 2px;\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n\r\n /* These are technically the same, but use both */\r\n overflow-wrap: break-word;\r\n word-wrap: break-word;\r\n\r\n -ms-word-break: break-all;\r\n /* This is the dangerous one in WebKit, as it breaks things wherever */\r\n word-break: break-all;\r\n /* Instead use this non-standard one: */\r\n word-break: break-word;\r\n\r\n /* Adds a hyphen where the word breaks, if supported (No Blink) */\r\n -ms-hyphens: none;\r\n -moz-hyphens: none;\r\n -webkit-hyphens: none;\r\n hyphens: none;\r\n}\r\n\r\ntextarea:focus {\r\n border-color: rgba(0, 0, 0, 0);\r\n box-shadow: 0 0 4px 2px #fff;\r\n outline: 0;\r\n /* outline: #fff 2px solid;\r\n outline-offset: 1px; */\r\n}\r\n\r\ntextarea::placeholder {\r\n color: rgba(255, 255, 255, 0.5);\r\n font-size: 1rem;\r\n text-align: center;\r\n caret-color: #fff;\r\n}\r\n\r\ninput[type=\"file\"] {\r\n /* max-width: 500px; */\r\n /* margin: 0.5rem 0.5rem 0.5rem 0.25rem; */\r\n}\r\n\r\n.input-file,\r\n.input-button {\r\n width: 0.1px;\r\n height: 0.1px;\r\n opacity: 0;\r\n overflow: hidden;\r\n position: absolute;\r\n z-index: -1;\r\n}\r\n\r\n#file-input-label {\r\n max-width: 325px;\r\n}\r\n\r\n#save-area {\r\n width: 100%;\r\n max-width: 584px;\r\n height: 5.65rem;\r\n}\r\n\r\n#drop-area {\r\n position: fixed;\r\n width: 100%;\r\n height: 100%;\r\n left: 0;\r\n top: 0;\r\n z-index: 9999;\r\n visibility: hidden;\r\n}\r\n\r\n#drop-area-inside {\r\n background-color: rgba(38, 189, 38, 0.5);\r\n border: 0.3rem dashed rgba(38, 189, 38, 0.85);\r\n border-radius: 1rem;\r\n width: 100%;\r\n height: 100%;\r\n left: 0;\r\n top: 0;\r\n z-index: 9000;\r\n}\r\n\r\n#drop-area #drop-area-inside.highlight {\r\n border-color: rgb(61, 228, 61);\r\n}\r\n\r\n.code-little {\r\n font-family: 'Consolas', monospace;\r\n font-size: 0.7rem;\r\n text-align: left;\r\n margin: 0 0 0 0.5rem;\r\n color: #fff;\r\n}\r\n\r\n.hint {\r\n display: block;\r\n font-style: italic;\r\n}\r\n\r\n.single-entry .spoiler-span,\r\n.single-entry .spoiler-span-green {\r\n margin-left: 0.4rem;\r\n}\r\n\r\n.spoiler-span.blurred:hover {\r\n cursor: default;\r\n}\r\n\r\n.hint::first-letter {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n float: left;\r\n padding: 0;\r\n margin: 0.2em 0.1em 0 0;\r\n font-size: 2.8em;\r\n font-style: normal;\r\n line-height: 0.6em;\r\n font-weight: 500;\r\n}\r\n\r\n.buttons {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.input-buttons {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n align-items: inherit;\r\n}\r\n\r\n.tab-switch-buttons {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n margin: 1rem 0;\r\n}\r\n\r\n.checkboxes {\r\n margin-top: 0rem;\r\n}\r\n\r\n.button {\r\n display: inline-flex;\r\n align-content: center;\r\n align-items: center;\r\n width: max-content;\r\n height: max-content;\r\n font-size: 1rem;\r\n font-weight: 500;\r\n font-family: 'Heebo', sans-serif;\r\n text-align: center;\r\n background-color: #1e6c38;\r\n color: #aad4b4;\r\n border: 2px solid #185520;\r\n border-radius: 2px;\r\n padding: 0.3rem 1rem;\r\n margin: 0.25rem 0.5rem 0.25rem 0.25rem;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.button:first-child {\r\n margin-left: 0.25rem;\r\n}\r\n\r\n.button:hover {\r\n color: #d9ffdc;\r\n background-color: #2e7c38;\r\n border-color: #2e7c38;\r\n cursor: pointer;\r\n}\r\n\r\n.button:focus,\r\n.input-file:focus+label {\r\n /* outline: 2px solid #5eac65; */\r\n outline: 0;\r\n border-color: #5eac65;\r\n /* outline-offset: -2px; */\r\n}\r\n\r\n.button:focus:not(:focus-visible) {\r\n border-color: rgba(0, 0, 0, 0);\r\n}\r\n\r\n.button-large {\r\n border-width: 7px;\r\n border-radius: 4px;\r\n}\r\n\r\n.button-square {\r\n padding: 0.3rem;\r\n}\r\n\r\n.tab-switch {\r\n background-color: rgba(0, 0, 0, 0);\r\n color: rgb(0, 180, 69);\r\n border: 2px solid rgba(0, 0, 0, 0);\r\n border-radius: 1rem 0 1rem 0;\r\n}\r\n\r\n.tab-switch:hover {\r\n background-color: rgb(0, 180, 69);\r\n color: rgb(0, 0, 0);\r\n border: 2px solid rgba(0, 0, 0, 0);\r\n}\r\n\r\n.tab-active {\r\n background-color: rgb(235, 235, 235);\r\n color: rgb(0, 39, 34);\r\n border: 2px solid rgba(0, 0, 0, 0);\r\n box-shadow: 0 0 1rem rgb(0, 180, 69);\r\n text-shadow: 0 0 0.5rem #9aff97;\r\n}\r\n\r\n.tab-switch:focus {\r\n outline: 0;\r\n border-color: rgb(0, 255, 98);\r\n}\r\n\r\n.tab-switch:focus:not(:focus-visible) {\r\n border-color: rgba(0, 0, 0, 0);\r\n}\r\n\r\n.centered {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n@media screen and (max-width: 570px) {\r\n .centered {\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 400px) {\r\n .buttons {\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n\r\n .input-buttons {\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .checkboxes {\r\n margin-top: 0.8rem;\r\n }\r\n}\r\n\r\n.horizontal-line {\r\n margin: 1rem 0;\r\n height: 1.5rem;\r\n width: 100%;\r\n background-image: url(\"../img/fleur-divide.png\");\r\n background-size: auto 100%;\r\n background-position: center top;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n@media screen and (max-width: 460px) {\r\n .horizontal-line {\r\n height: 1.15rem;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 360px) {\r\n .horizontal-line {\r\n height: 0.9rem;\r\n }\r\n}\r\n\r\n.smalltext {\r\n font-size: 0.8rem;\r\n text-align: center;\r\n}\r\n\r\na,\r\na:active,\r\na:visited {\r\n display: inline-block;\r\n color: #aad4b4;\r\n font-weight: 700;\r\n text-decoration: none;\r\n transition: all 0.3s ease;\r\n}\r\n\r\na:hover {\r\n color: #d9ffdc;\r\n text-decoration: none;\r\n text-shadow: 0 0 0.6em #1bff73;\r\n}\r\n\r\na.button:active,\r\na.button:visited {\r\n font-weight: 500;\r\n}\r\n\r\na.button:hover {\r\n text-shadow: none;\r\n}\r\n\r\na.wiki {\r\n font-weight: 500;\r\n}\r\n\r\n.link-social {\r\n margin: 0.25rem;\r\n}\r\n\r\n[class^=\"icon-\"]:before,\r\n[class*=\" icon-\"]:before {\r\n margin-right: 0.275em;\r\n}\r\n\r\n.icon-cancel {\r\n color: #f03a17;\r\n}\r\n\r\n.icon-ok-squared {\r\n color: #16c60c;\r\n}\r\n\r\n.partial {\r\n color: rgba(255, 255, 255, 0.3);\r\n /* text-shadow: 0 0 0.3rem #fff; */\r\n}\r\n\r\n.icon-info-circled {\r\n color: #47e762;\r\n}\r\n\r\n.icon-download-cloud,\r\n.icon-doc-text-inv {\r\n color: #d9ffdc;\r\n}\r\n\r\n.flex-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n align-items: normal;\r\n justify-content: left;\r\n}\r\n\r\n.flex-row {\r\n flex-direction: row;\r\n}\r\n\r\n.align-center {\r\n align-items: center;\r\n}\r\n\r\n.silk-bar:first-child {\r\n padding-left: 0.3rem;\r\n}\r\n\r\n.health-mask,\r\n/*.silk-bar,*/\r\n.rosaries-symbol,\r\n.shell-shards-symbol,\r\n.crest {\r\n width: auto;\r\n height: 1.48rem;\r\n margin: 0 0 0 0.3rem;\r\n}\r\n\r\n.crest {\r\n padding-left: 0.1rem;\r\n /*margin-left: 0.6rem;*/\r\n}\r\n\r\n\r\n.silk-bar {\r\n height: 1.3rem;\r\n /*padding-left: 0.3rem;\r\n margin-left: -0.15rem;*/\r\n}\r\n\r\n.shell-shards-symbol,\r\n.rosaries-symbol {\r\n margin-right: 0.15rem;\r\n}\r\n\r\n.padding-left {\r\n padding-left: 1.47rem;\r\n height: 1.47rem;\r\n}\r\n\r\n.p-left-small {\r\n display: inline;\r\n padding-left: 0.3rem;\r\n height: 1.47rem;\r\n}\r\n\r\n.scroll-up-button {\r\n width: 50px;\r\n height: 50px;\r\n text-decoration: none;\r\n background-color: #1e6c38;\r\n border: 0;\r\n border-radius: 2px;\r\n outline: 0;\r\n position: fixed;\r\n right: 1px;\r\n bottom: 0;\r\n z-index: 1100;\r\n opacity: 0;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.scroll-up-button:hover {\r\n background-color: #2e7c38;\r\n cursor: pointer;\r\n}\r\n\r\n.scroll-up-button-arrow {\r\n position: relative;\r\n left: 12px;\r\n top: 3px;\r\n width: 12px;\r\n height: 12px;\r\n border: solid #aad4b4;\r\n border-width: 2px 0px 0px 2px;\r\n -webkit-transform: rotate(45deg);\r\n -ms-transform: rotate(45deg);\r\n transform: rotate(45deg);\r\n}\r\n\r\n.hidden {\r\n display: none;\r\n}\r\n\r\n.visible-block {\r\n display: block;\r\n}\r\n\r\n.opacity-none {\r\n opacity: 0;\r\n}\r\n\r\n.opacity-full {\r\n opacity: 1;\r\n}\r\n\r\n.wiki.blurred {\r\n color: #0000;\r\n background-color: #cfffed2d;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.blurred {\r\n color: #0000;\r\n background-color: #ffffff1f;\r\n/* filter: blur(5px);\r\n -webkit-filter: blur(5px); */\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.blurred:hover {\r\n /* filter: none;\r\n -webkit-filter: none; */\r\n color: inherit;\r\n background-color: inherit;\r\n}\r\n\r\n.spoiler-text {\r\n display: inline;\r\n /* These are technically the same, but use both */\r\n overflow-wrap: break-word;\r\n word-wrap: break-word;\r\n\r\n -ms-word-break: break-all;\r\n /* This is the dangerous one in WebKit, as it breaks things wherever */\r\n word-break: break-all;\r\n /* Instead use this non-standard one: */\r\n word-break: break-word;\r\n\r\n /* Adds a hyphen where the word breaks, if supported (No Blink) */\r\n -ms-hyphens: auto;\r\n -moz-hyphens: auto;\r\n -webkit-hyphens: auto;\r\n hyphens: auto;\r\n}\r\n\r\n.radio,\r\n.checkbox {\r\n position: relative;\r\n display: block;\r\n left: -40px;\r\n padding: 4px;\r\n margin-left: 10px;\r\n}\r\n\r\ninput[type=\"checkbox\"],\r\ninput[type=\"radio\"] {\r\n margin-right: 10px;\r\n}\r\n\r\n.radio-label,\r\n.checkbox-label {\r\n display: inline-block;\r\n position: relative;\r\n margin: 0.4rem 0 0 0.5rem;\r\n padding: 0.25rem 0.5rem 0.25rem 2rem;\r\n cursor: pointer;\r\n font-size: 1rem;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n width: max-content;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.checkbox-label:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.radiomark,\r\n.checkmark {\r\n position: absolute;\r\n top: 0.27em;\r\n left: 0.27em;\r\n height: 1.3em;\r\n width: 1.3em;\r\n background-color: #aad4b4;\r\n border: 1px solid #1e6c38;\r\n border: 1px solid var(--rt-main);\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.radiomark {\r\n border-radius: 50%;\r\n}\r\n\r\n/* Hide the browser's default checkbox */\r\ninput[type=\"checkbox\"],\r\ninput[type=\"radio\"] {\r\n position: absolute;\r\n opacity: 0;\r\n cursor: pointer;\r\n height: 0;\r\n width: 0;\r\n}\r\n\r\n/* On mouse-over change background color */\r\n.radio-label:hover .radiomark,\r\n.checkbox-label:hover .checkmark {\r\n background-color: #d9ffdc;\r\n}\r\n\r\n/* When the checkbox is checked change background color */\r\ninput:checked + label .radiomark,\r\ninput:checked + label .checkmark {\r\n background-color: #1e6c38;\r\n background-color: var(--rt-main);\r\n}\r\n\r\n/* When the checkbox is checked change background color on hover */\r\ninput:checked + label:hover .radiomark,\r\ninput:checked + label:hover .checkmark {\r\n background-color: #2e7c38;\r\n border-color: #2e7c38;\r\n}\r\n\r\n/* Create the checkmark/indicator (hidden when not checked) */\r\n.radiomark:after,\r\n.checkmark:after {\r\n content: \"\";\r\n position: absolute;\r\n display: none;\r\n}\r\n\r\n/* Show the checkmark when checked */\r\ninput:checked + label .radiomark:after,\r\ninput:checked + label .checkmark:after {\r\n display: block;\r\n}\r\n\r\n/* Style the checkmark/indicator */\r\n.checkbox-label .checkmark:after {\r\n left: 7px;\r\n top: 2px;\r\n width: 6px;\r\n height: 12px;\r\n border: solid #aad4b4;\r\n border-width: 0 2px 2px 0;\r\n -webkit-transform: rotate(45deg);\r\n -ms-transform: rotate(45deg);\r\n transform: rotate(45deg);\r\n}\r\n\r\n/* Style the checkmark/indicator */\r\n.radio-label .radiomark:after {\r\n top: 7px;\r\n left: 7px;\r\n width: 10px;\r\n height: 10px;\r\n border-radius: 50%;\r\n background: #000;\r\n}\r\n\r\ninput[type=\"checkbox\"]:focus + label,\r\ninput[type=\"radio\"]:focus + label {\r\n outline: 0;\r\n box-shadow: 0 0 0.2rem #aad4b4;\r\n}\r\n\r\ninput[type=\"checkbox\"]:focus:not(:focus-visible) + label,\r\ninput[type=\"radio\"]:focus:not(:focus-visible) + label {\r\n outline: 0;\r\n box-shadow: none;\r\n}\r\n\r\n.tooltip {\r\n position: relative;\r\n display: block;\r\n margin: 0 auto;\r\n width: max-content;\r\n}\r\n\r\n.tooltip .tooltip-text {\r\n visibility: hidden;\r\n width: max-content;\r\n background-color: #1e6c38;\r\n color: #d9ffdc;\r\n font-size: 0.85rem;\r\n text-align: center;\r\n border-radius: 3px;\r\n padding: 0.16rem 0.7rem;\r\n position: absolute;\r\n z-index: 1;\r\n bottom: 130%;\r\n left: 50%;\r\n margin-left: -108.5px;\r\n opacity: 0;\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.tooltip .tooltip-text::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n margin-left: -5px;\r\n border-width: 5px;\r\n border-style: solid;\r\n border-color: #1e6c38 transparent transparent transparent;\r\n}\r\n\r\n.tooltip:hover .tooltip-text {\r\n visibility: visible;\r\n opacity: 1;\r\n}\r\n\r\n@media screen and (max-width: 570px) {\r\n .tooltip {\r\n display: none;\r\n }\r\n}\r\n\r\n.percent-box {\r\n display: inline-block;\r\n font-family: 'Heebo', sans-serif;\r\n text-align: center;\r\n font-size: 1.1rem;\r\n font-weight: 700;\r\n vertical-align: middle;\r\n color: #d9ffdc;\r\n margin: 0 0.5rem 0rem 0.5rem;\r\n padding: 0.2rem 1.2rem 0.2rem 1.2rem;\r\n background: #1e6c38;\r\n border: 2px solid #3e8c4b;\r\n border-radius: 4px;\r\n}\r\n\r\n.box-red {\r\n color: #ffe2dd;\r\n background: #c22e14;\r\n border: 2px solid #e24e34;\r\n}\r\n\r\n.box-green {\r\n color: #ddffd9;\r\n background: #1e6c1e;\r\n border: 2px solid #2d8a49;\r\n}\r\n\r\n.pp-gold {\r\n font-weight: 700;\r\n color: #ffbc00;\r\n background: rgb(148, 81, 0);\r\n background: linear-gradient(90deg, rgba(148, 81, 0, 1) 0%, rgba(255, 188, 0, 1) 50%, rgba(148, 81, 0, 1) 100%);\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n}\r\n\r\n.pp-silver {\r\n font-weight: 700;\r\n color: #ebf9ff;\r\n background: rgb(183, 196, 201);\r\n background: linear-gradient(90deg, rgba(138, 151, 156, 1) 0%, rgba(235, 249, 255, 1) 50%, rgba(138, 151, 156, 1) 100%);\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n}\r\n\r\n.pp-bronze {\r\n font-weight: 700;\r\n color: #b98465;\r\n background: rgb(134, 85, 56);\r\n background: linear-gradient(90deg, rgba(134, 85, 56, 1) 0%, rgba(222, 168, 136, 1) 50%, rgba(134, 85, 56, 1) 100%);\r\n background-clip: text;\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n}\r\n\r\n.t-green {\r\n font-weight: 700;\r\n color: #16c60c;\r\n}\r\n\r\n.t-red {\r\n font-weight: 700;\r\n color: #f03a17;\r\n}\r\n\r\n.t-gray {\r\n font-weight: 700;\r\n color: rgba(255, 255, 255, 0.18);\r\n}\r\n\r\n.test {\r\n color: #59d1da;\r\n}"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/docs/app.js b/docs/app.js
index f296d16..fb0543c 100644
--- a/docs/app.js
+++ b/docs/app.js
@@ -1 +1,2 @@
-(()=>{var e={51479:(e,t,r)=>{"use strict";r.r(t),r.d(t,{HKCheckCompletion:()=>y});const o={saveAnalyzed:!1,sections:{intro:{h2:"Game Status",id:"hk-intro",percent:0,maxPercent:112,maxPercentDefault:112,maxPercentBaseGame:100,maxPercentGrimmTroupe:106,maxPercentLifeblood:107,extendedCompletionDone:0,extendedCompletionTotal:0,entries:{timePlayed:{id:"timePlayed",icon:"clock",name:"Time Played:",spoiler:"0 h 00 min 00 sec",timeH:0,timeM:0,timeS:0},gameCompletion:{id:"gameCompletion",icon:"red",name:"Game Completion:",spoiler:0,spoilerAfter:"(out of 112 %)",spoilerAfterDefault:"(out of 112 %)",spoilerAfterBaseGame:"(out of 100 %)",spoilerAfterGrimmTroupe:"(out of 106 %)",spoilerAfterLifeblood:"(out of 107 %)"},gameCompletionExtended:{id:"gameCompletionExtended",icon:"red",name:"True Completion:",spoiler:0,spoilerAfter:" / 0 = 0.00 %",spoilerAfterDefault:" / 0 = 0.00 %"},saveVersion:{id:"saveVersion",icon:"none",name:"Save Version:",spoiler:"0.0.0.0"},health:{id:"health",icon:"none",name:"Health:",spoiler:"",amountTotal:5,permadeathMode:!1},soul:{id:"soul",icon:"none",name:"Soul:",spoiler:"",amountTotal:99},notches:{id:"notches",icon:"none",name:"Notches:",spoiler:"",amountTotal:3,amountFilled:0,amountUnused:3,amountOvercharmed:0},geo:{id:"geo",icon:"none",name:"Geo:",spoiler:"",amount:0,amountShade:0,amountTotal:0}}},hints:{h2:"Elderbug once told me...",id:"hk-hints",current:"fireballLevel",entries:{fireballLevel:{spoiler:"A mysterious shaman is living in a dwelling, somewhere below the town of Dirtmouth."},hornet1Defeated:{spoiler:"A skilled protector is guarding old ruins in a lush green forest."},hasDash:{spoiler:"An old cloak is lying on a green path near a broken shell."},hasWalljump:{spoiler:"A sharp claw is lying forgotten, somewhere amidst the insect village."},Crossroads_04:{spoiler:"A mother is sleeping peacefully, somewhere below the town of Dirtmouth."},slyRescued:{spoiler:"Our fellow town bug seems to be lost, somewhere in the crossroads."},hasLantern:{spoiler:"Did you know? A bright little crystal companion is able to light a way through the thickest dark places."},hasSuperDash:{spoiler:"There is some powerful crystal beating somewhere deep inside the mines."},hasDreamNail:{spoiler:"A weapon from a dream world can only be found, where the souls can peacefully rest."},killedInfectedKnight:{spoiler:"A shattered corpse forgotten in a windy cave is lying somewhere in the ancient depths below the rainy city."},hasDoubleJump:{spoiler:"Something incredibly light was dropped by a monarchfly in the ancient depths below the rainy city."},dungDefenderOrHornet2:{spoiler:"There are two skilled combatants. One is living at the heart of the sewers. One is watching over a shell amidst ash falling from the sky."},ismaTearOrShadeCloak:{spoiler:"There are two precious items. One in a grove accessed from the waterways. One guarded by a massive royal door behind the darkness."},defeatedMegaJelly:{spoiler:"An intelligent being is floating inside hidden archives, behind the fog."},monomonDefeated:{spoiler:"A dreamer is sleeping somewhere, hidden in a foggy area."},hegemolDefeated:{spoiler:"A dreamer is sleeping near a spider nest area."},killedBlackKnight:{spoiler:"Discarded shells of black guards can be seen lying on the floor of a high spire."},lurienDefeated:{spoiler:"A dreamer is sleeping somewhere, at the top of a high spire."},killedHollowKnight:{spoiler:"He heard a disturbance from inside a black temple. Maybe it's worth investigating."},endOfHints:{spoiler:"The Knight still explores the world of Hallownest patiently, in constant search of its remaining secrets. [this is the end of the hint system (for the moment). The rest is up to you]"}}},bosses:{h2:"Bosses",id:"hk-bosses",description:"Each boss from this list provides 1% Game Completion. \n Note: There are many other bosses in the game. Only about ~half of the total bosses count directly towards % Game Completion stat. \n P1-P4 = difficulty level and which Pantheon a given boss unlocks.",percent:0,maxPercent:14,entries:{bossGruzMother:{name:"P1 Gruz Mother",spoiler:"Forgotten Crossroads, lower right area",id:"Battle Scene",sceneName:"Crossroads_04",wiki:"Gruz_Mother"},falseKnightDefeated:{name:"P1 False Knight",spoiler:"Forgotten Crossroads, middle area map symbol",wiki:"False_Knight"},hornet1Defeated:{name:"P1 Hornet Protector",spoiler:"Greenpath, above Stag Station",wiki:"Hornet_Protector"},defeatedDungDefender:{name:"P1 Dung Defender",spoiler:"Royal Waterways, right area",wiki:"Dung_Defender"},bossBroodingMawlek:{name:"P1 Brooding Mawlek",spoiler:"Forgotten Crossroads, use Mantis Claw",id:"Battle Scene",sceneName:"Crossroads_09",wiki:"Brooding_Mawlek"},mageLordDefeated:{name:"P2 Soul Master",spoiler:"City of Tears: Soul Sanctum",wiki:"Soul_Master"},defeatedMantisLords:{name:"P2 Mantis Lords",spoiler:"Fungal Wastes: Mantis Village",wiki:"Mantis_Lords"},killedMimicSpider:{name:"P2 Nosk",spoiler:"Deepnest, use Crystal Heart, left of Hot Spring",wiki:"Nosk"},killedInfectedKnight:{name:"P2 Broken Vessel",spoiler:"Ancient Basin, lower left, use Crystal Heart",wiki:"Broken_Vessel"},collectorDefeated:{name:"P3 The Collector",spoiler:"City of Tears: Tower of Love",wiki:"Collector"},defeatedMegaJelly:{name:"P3 Uumuu",spoiler:"Fog Canyon: Teacher's Archives",wiki:"Uumuu"},hornetOutskirtsDefeated:{name:"P3 Hornet Sentinel",spoiler:"Kingdom's Edge, requires Monarch Wings",wiki:"Hornet_Sentinel"},killedTraitorLord:{name:"P4 Traitor Lord",spoiler:"Queen's Gardens, requires Shade Cloak",wiki:"Traitor_Lord"},killedBlackKnight:{name:"P4 Watcher Knights",spoiler:"City of Tears: Watcher's Spire",wiki:"Watcher_Knight"}}},charms:{h2:"Charms",id:"hk-charms",description:'Each Charm found in the game provides 1% Game Completion. \n Note: 4 new Charms were added to the game in patch version 1.2.1.0. They are part of the Grimm Troupe Content Pack section below.',percent:0,maxPercent:36,entries:{gotCharm_1:{name:"#1 Gathering Swarm",spoiler:"Sly: 300 Geo",wiki:"Gathering_Swarm"},gotCharm_2:{name:"#2 Wayward Compass",spoiler:"Iselda: 220 Geo",wiki:"Wayward_Compass"},gotCharm_3:{name:"#3 Grubsong",spoiler:"Grubfather: 10 Grubs rescued",wiki:"Grubsong"},gotCharm_4:{name:"#4 Stalwart Shell",spoiler:"Sly: 200 Geo",wiki:"Stalwart_Shell"},gotCharm_5:{name:"#5 Baldur Shell",spoiler:"Howling Cliffs, bottom, near Greenpath",wiki:"Baldur_Shell"},gotCharm_6:{name:"#6 Fury of the Fallen",spoiler:"King's Pass, nail-bounce spikes",wiki:"Fury_of_the_Fallen"},gotCharm_7:{name:"#7 Quick Focus",spoiler:"Salubra: 800 Geo",wiki:"Quick_Focus"},gotCharm_8:{name:"#8 Lifeblood Heart",spoiler:"Salubra: 250 Geo",wiki:"Lifeblood_Heart"},gotCharm_9:{name:"#9 Lifeblood Core",spoiler:"The Abyss: 15 Lifeblood masks",wiki:"Lifeblood_Core"},gotCharm_10:{name:"#10 Defender's Crest",spoiler:"Royal Waterways, defeat Dung Defender",wiki:"Defender's_Crest"},gotCharm_11:{name:"#11 Flukenest",spoiler:"Royal Waterways, defeat Flukemarm",wiki:"Flukenest"},gotCharm_12:{name:"#12 Thorns of Agony",spoiler:"Greenpath, requires Mothwing Cloak",wiki:"Thorns_of_Agony"},gotCharm_13:{name:"#13 Mark of Pride",spoiler:"Mantis Village, defeat Mantis Lords",wiki:"Mark_of_Pride"},gotCharm_14:{name:"#14 Steady Body",spoiler:"Salubra: 120 Geo",wiki:"Steady_Body"},gotCharm_15:{name:"#15 Heavy Blow",spoiler:"Sly: 350 Geo + Shopkeeper's Key",wiki:"Heavy_Blow"},gotCharm_16:{name:"#16 Sharp Shadow",spoiler:"Deepnest, requires Shade Cloak",wiki:"Sharp_Shadow"},gotCharm_17:{name:"#17 Spore Shroom",spoiler:"Fungal Wastes, near Queen's Gardens",wiki:"Spore_Shroom"},gotCharm_18:{name:"#18 Longnail",spoiler:"Salubra: 300 Geo",wiki:"Longnail"},gotCharm_19:{name:"#19 Shaman Stone",spoiler:"Salubra: 220 Geo",wiki:"Shaman_Stone"},gotCharm_20:{name:"#20 Soul Catcher",spoiler:"Forgotten Crossroads: Ancestral Mound",wiki:"Soul_Catcher"},gotCharm_21:{name:"#21 Soul Eater",spoiler:"Resting Grounds, requires Desolate Dive",wiki:"Soul_Eater"},gotCharm_22:{name:"#22 Glowing Womb",spoiler:"Forgotten Crossroads, requires Crystal Heart",wiki:"Glowing_Womb"},gotCharm_23:{name:"#23 Fragile Heart",spoiler:"Leg Eater: 350 Geo (280 with Defender's Crest)",wiki:"Fragile_Heart"},gotCharm_24:{name:"#24 Fragile Greed",spoiler:"Leg Eater: 250 Geo (200 with Defender's Crest)",wiki:"Fragile_Greed"},gotCharm_25:{name:"#25 Fragile Strength",spoiler:"Leg Eater: 600 Geo (480 with Defender's Crest)",wiki:"Fragile_Strength"},gotCharm_26:{name:"#26 Nailmaster’s Glory",spoiler:"Sly: Learn all Nail Arts",wiki:"Nailmaster's_Glory"},gotCharm_27:{name:"#27 Joni’s Blessing",spoiler:"Howling Cliffs: Joni's Repose",wiki:"Joni's_Blessing"},gotCharm_28:{name:"#28 Shape of Unn",spoiler:"Greenpath: Lake of Unn, requires Isma's Tear",wiki:"Shape_of_Unn"},gotCharm_29:{name:"#29 Hiveblood",spoiler:"The Hive, defeat Hive Knight",wiki:"Hiveblood"},gotCharm_30:{name:"#30 Dream Wielder",spoiler:"Seer: 500 Essence",wiki:"Dream_Wielder"},gotCharm_31:{name:"#31 Dashmaster",spoiler:"Fungal Wastes, below bench, near Bretta",wiki:"Dashmaster"},gotCharm_32:{name:"#32 Quick Slash",spoiler:"Kingdom's Edge, requires Desolate Dive",wiki:"Quick_Slash"},gotCharm_33:{name:"#33 Spell Twister",spoiler:"City of Tears: Soul Sanctum",wiki:"Spell_Twister"},gotCharm_34:{name:"#34 Deep Focus",spoiler:"Crystal Peak, requires Crystal Heart",wiki:"Deep_Focus"},gotCharm_35:{name:"#35 Grubberfly’s Elegy",spoiler:"Grubfather: All 46 Grubs rescued",wiki:"Grubberfly's_Elegy"},gotCharm_36:{name:"#36 Kingsoul",spoiler:"Queen's Gardens (Shade Cloak) + White Palace (Awoken Dream Nail)",wiki:"Kingsoul"}}},equipment:{h2:"Equipment",id:"hk-equipment",description:"Also known as Abilities. Each piece of equipment collected provides 2% Game Completion.",percent:0,maxPercent:14,entries:{hasDash:{name:"Mothwing Cloak",spoiler:"Greenpath: Dash ability",wiki:"Mothwing_Cloak"},hasWalljump:{name:"Mantis Claw",spoiler:"Mantis Village: Wall Jump ability",wiki:"Mantis_Claw"},hasSuperDash:{name:"Crystal Heart",spoiler:"Crystal Peak: Super Dash ability",wiki:"Crystal_Heart"},hasDoubleJump:{name:"Monarch Wings",spoiler:"Ancient Basin: Double Jump ability",wiki:"Monarch_Wings"},hasAcidArmour:{name:"Isma's Tear",spoiler:"Royal Waterways: Acid Armour ability",wiki:"Isma's_Tear"},hasKingsBrand:{name:"King's Brand",spoiler:"Kingdom's Edge, defeat Hornet Sentinel",wiki:"King's_Brand"},hasShadowDash:{name:"Shade Cloak",spoiler:"The Abyss: Shadow Dash ability",wiki:"Shade_Cloak"}}},nailUpgrades:{h2:"Nail Upgrades",id:"hk-nailupgrades",description:"Upgrades to the Knight's main weapon damage. Each upgrade provides 1% Game Completion.",percent:0,maxPercent:4,entries:{oldNail:{name:"#0 Old Nail",spoiler:"Starting Weapon",wiki:"Nail"},sharpenedNail:{name:"#1 Sharpened Nail",spoiler:"Nailsmith: 250 Geo",wiki:"Nail#Nail_Upgrades"},channeledNail:{name:"#2 Channeled Nail",spoiler:"Nailsmith: 800 Geo + 1 Pale Ore",wiki:"Nail#Nail_Upgrades"},coiledNail:{name:"#3 Coiled Nail",spoiler:"Nailsmith: 2000 Geo + 2 Pale Ore",wiki:"Nail#Nail_Upgrades"},pureNail:{name:"#4 Pure Nail",spoiler:"Nailsmith: 4000 Geo + 3 Pale Ore",wiki:"Nail#Nail_Upgrades"}}},nailArts:{h2:"Nail Arts",id:"hk-nailarts",description:"Advanced weapon combat techniques. Each new technique learned provides 1% Game Completion.",percent:0,maxPercent:3,entries:{hasDashSlash:{name:"Great Slash",spoiler:"Nailmaster Sheo: Greenpath",wiki:"Great_Slash"},hasUpwardSlash:{name:"Dash Slash",spoiler:"Nailmaster Oro: Kingdom's Edge, 800 Geo",wiki:"Dash_Slash"},hasCyclone:{name:"Cyclone Slash",spoiler:"Nailmaster Mato: Howling Cliffs",wiki:"Cyclone_Slash"}}},spells:{h2:"Spells",id:"hk-spells",description:"Skills that consume Soul. Each new spell learned or upgraded provides 1% Game Completion.",percent:0,maxPercent:6,entries:{vengefulSpirit:{fireballLevel:1,name:"Vengeful Spirit",spoiler:"Forgotten Crossroads: Ancestral Mound",wiki:"Vengeful_Spirit"},shadeSoul:{fireballLevel:2,name:"Shade Soul",spoiler:"City of Tears: Soul Sanctum + Elegant Key",wiki:"Shade_Soul"},desolateDive:{quakeLevel:1,name:"Desolate Dive",spoiler:"City of Tears: Soul Sanctum",wiki:"Desolate_Dive"},descendingDark:{quakeLevel:2,name:"Descending Dark",spoiler:"Crystal Peak: Crystallised Mound",wiki:"Descending_Dark"},howlingWraiths:{screamLevel:1,name:"Howling Wraiths",spoiler:"Fog Canyon: Overgrown Mound",wiki:"Howling_Wraiths"},abyssShriek:{screamLevel:2,name:"Abyss Shriek",spoiler:"The Abyss, use Howling Wraiths on podium",wiki:"Abyss_Shriek"}}},maskShards:{h2:"Mask Shards",id:"hk-maskshards",description:"Fragments for increasing max health. Each 4 Mask Fragments collected (a full Mask) provide 1% Game Completion.",percent:0,maxPercent:4,entries:{slyShellFrag1:{name:"Mask Shard #1",spoiler:"Sly: 150 Geo",wiki:"Mask_Shard"},slyShellFrag2:{name:"Mask Shard #2",spoiler:"Sly: 500 Geo",wiki:"Mask_Shard"},slyShellFrag3:{name:"Mask Shard #3",spoiler:"Sly: 800 Geo + Shopkeeper's Key",wiki:"Mask_Shard"},slyShellFrag4:{name:"Mask Shard #4",spoiler:"Sly: 1500 Geo + Shopkeeper's Key",wiki:"Mask_Shard"},dreamReward7:{name:"Mask Shard #5",spoiler:"Seer: 1500 Essence",wiki:"Mask_Shard"},maskShardCrossroadsSprings:{name:"Mask Shard #6",spoiler:"Forgotten Crossroads: below Hot Springs",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Crossroads_13"},maskShardCrossroadsMawlek:{name:"Mask Shard #7",spoiler:"Forgotten Crossroads: defeat Brooding Mawlek",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Crossroads_09"},maskShardGrubfather:{name:"Mask Shard #8",spoiler:"Grubfather: 5 Grubs rescued",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Crossroads_38"},maskShardBretta:{name:"Mask Shard #9",spoiler:"Dirtmouth: Bretta's Room, rescue Bretta",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Room_Bretta"},maskShardQueensStation:{name:"Mask Shard #10",spoiler:"Queen's Station: requires Mantis Claw",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Fungus2_01"},maskShardWaterways:{name:"Mask Shard #11",spoiler:"Royal Waterways: top left area, swim left",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Waterways_04b"},maskShardStoneSanctuary:{name:"Mask Shard #12",spoiler:"Greenpath: Stone Sanctuary, Lumafly Lantern",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Fungus1_36"},maskShardCrystalPeak:{name:"Mask Shard #13",spoiler:"Crystal Peak: defeat Enraged Guardian",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Mines_32"},maskShardDeepnest:{name:"Mask Shard #14",spoiler:"Deepnest: from Fungal Core (Monarch Wings)",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Fungus2_25"},maskShardHive:{name:"Mask Shard #15",spoiler:"The Hive: use Hive Guardian to break wall",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Hive_04"},maskShardDelicateFlower:{name:"Mask Shard #16",spoiler:"Resting Grounds: Delicate Flower (Grey Mourner)",wiki:"Mask_Shard",id:"Heart Piece",sceneName:"Room_Mansion"}}},vesselFragments:{h2:"Vessel Fragments",id:"hk-vesselfragments",description:"Fragments for increasing max soul. Each 3 Vessel Fragments collected (a full Soul Vessel) provide 1% Game Completion.",percent:0,maxPercent:3,entries:{slyVesselFrag1:{name:"Vessel Fragment #1",spoiler:"Sly: 550 Geo",wiki:"Vessel_Fragment"},slyVesselFrag2:{name:"Vessel Fragment #2",spoiler:"Sly: 900 Geo + Shopkeeper's Key",wiki:"Vessel_Fragment"},dreamReward5:{name:"Vessel Fragment #3",spoiler:"Seer: 700 Essence",wiki:"Vessel_Fragment"},vesselFragStagNest:{name:"Vessel Fragment #4",spoiler:"Stag Nest",wiki:"Vessel_Fragment"},vesselFragmentGreenpath:{name:"Vessel Fragment #5",spoiler:"Greenpath: near Queen's Gardens exit",wiki:"Vessel_Fragment",id:"Vessel Fragment",sceneName:"Fungus1_13"},vesselFragmentCrossroads:{name:"Vessel Fragment #6",spoiler:"Forgotten Crossroads: unlock City of Tears lift",wiki:"Vessel_Fragment",id:"Vessel Fragment",sceneName:"Crossroads_37"},vesselFragmentCityOfTears:{name:"Vessel Fragment #7",spoiler:"City of Tears: above King's Station",wiki:"Vessel_Fragment",id:"Vessel Fragment",sceneName:"Ruins2_09"},vesselFragmentDeepnest:{name:"Vessel Fragment #8",spoiler:"Deepnest: Goam platforming challenge",wiki:"Vessel_Fragment",id:"Vessel Fragment",sceneName:"Deepnest_38"},vesselFragmentFountain:{name:"Vessel Fragment #9",spoiler:"Ancient Basin Fountain: 3000 Geo",wiki:"Vessel_Fragment",id:"Vessel Fragment",sceneName:"Abyss_04"}}},dreamNail:{h2:"Dream Nail and Essence",id:"hk-dreamnail",description:"A special dream Ability. Can collect Essence and enter dreams. Each milestone here will provide 1% Game Completion.",percent:0,maxPercent:3,entries:{hasDreamNail:{name:"Dream Nail Acquired",spoiler:"Resting Grounds",wiki:"Dream_Nail"},dreamNailUpgraded:{name:"Awoken Dream Nail",spoiler:"Seer: 1800 Essence",wiki:"Dream_Nail#Awoken_Dream_Nail"},mothDeparted:{name:"Hear the Seer's Final Words",spoiler:"Seer: 2400 Essence",wiki:"Seer"}}},warriorDreams:{h2:"Warrior Dreams",id:"hk-warriordreams",description:"Special kind of bosses in Hollow Knight, which provide Essence and 1% Game Completion after defeat. \n Note: The Essence must be collected before each boss will provide 1% Game Completion. Uncollected Essence will be marked as not completed.",percent:0,maxPercent:7,entries:{aladarSlugDefeated:{name:"P1 Gorb",spoiler:"Howling Cliffs, top middle area",wiki:"Gorb"},xeroDefeated:{name:"P2 Xero",spoiler:"Resting Grounds, below Crystal Peak drop",wiki:"Xero"},mumCaterpillarDefeated:{name:"P2 Marmu",spoiler:"Queen's Gardens, left of Stag Station",wiki:"Marmu"},elderHuDefeated:{name:"P3 Elder Hu",spoiler:"Fungal Wastes, above acid bridge",wiki:"Elder_Hu"},galienDefeated:{name:"P3 Galien",spoiler:"Deepnest, below Failed Tramway",wiki:"Galien"},noEyesDefeated:{name:"P4 No Eyes",spoiler:"Greenpath: Stone Sanctuary, requires Lumafly Lantern",wiki:"No_Eyes"},markothDefeated:{name:"P4 Markoth",spoiler:"Kingdom's Edge, requires Shade Cloak",wiki:"Markoth"}}},dreamers:{h2:"Dreamers",id:"hk-dreamers",description:"Each Dreamer will provide 1% Game Completion.",percent:0,maxPercent:3,entries:{lurienDefeated:{name:"Lurien the Watcher",spoiler:"City of Tears: Watcher's Spire",wiki:"Lurien"},monomonDefeated:{name:"Monomon the Teacher",spoiler:"Fog Canyon: Teacher's Archives",wiki:"Monomon"},hegemolDefeated:{name:"Herrah the Beast",spoiler:"Deepnest: Distant Village",wiki:"Herrah"}}},colosseum:{h2:"Colosseum of Fools",id:"hk-colosseum",description:"Completing each Trial in the Colosseum provides 1% Game Completion. This section sums up the original 100% Game Completion Percentage from Hollow Knight in 2017 (without Content Packs).",percent:0,maxPercent:3,entries:{colosseumBronzeCompleted:{name:"Trial of the Warrior",spoiler:"Kingdom's Edge: top area, Little Fool: 100 Geo",wiki:"Trial_of_the_Warrior"},colosseumSilverCompleted:{name:"Trial of the Conqueror",spoiler:"Little Fool: 450 Geo + Warrior completed",wiki:"Trial_of_the_Conqueror"},colosseumGoldCompleted:{name:"Trial of the Fool",spoiler:"Little Fool: 800 Geo + Conqueror completed",wiki:"Trial_of_the_Fool"}}},grimmTroupe:{h2:"Grimm Troupe Content Pack",id:"hk-grimmtroupe",description:'The first Content Pack. Released October 26th, 2017 (1.2.1.0 Game Update). It added additional +6% to max Game Completion Percentage. \n Note: It requires making a choice, but no matter what you will choose, you will still get the same +1%.',percent:0,maxPercent:6,entries:{gotCharm_37:{name:"Charm #37 Sprintmaster",spoiler:"Sly: 400 Geo + Shopkeeper's Key",wiki:"Sprintmaster"},gotCharm_38:{name:"Charm #38 Dreamshield",spoiler:"Resting Grounds, go left below Seer",wiki:"Dreamshield"},gotCharm_39:{name:"Charm #39 Weaversong",spoiler:"Deepnest: Weaver's Den",wiki:"Weaversong"},gotCharm_40:{name:"Charm #40 Grimmchild or Carefree Melody",nameDefault:"Charm #40 Grimmchild or Carefree Melody",nameGrimmchildP1:"Charm #40: Grimmchild (Phase 1)",nameGrimmchildP2:"Charm #40: Grimmchild (Phase 2)",nameGrimmchildP3:"Charm #40: Grimmchild (Phase 3)",nameGrimmchildP4:"Charm #40: Grimmchild (Phase 4)",nameCarefreeMelody:"Charm #40: Carefree Melody",spoiler:"Dirtmouth",spoilerDefault:"Dirtmouth",spoilerGrimmchildP1:"Collect 3 flames",spoilerGrimmchildP2:"Collect 3 flames",spoilerGrimmchildP3:"Collect 3 flames",spoilerGrimmchildP4:"Completed the Ritual",spoilerCarefreeMelody:"Banished Grimm Troupe",wiki:"Grimmchild",wikiDefault:"Grimmchild",wikiGrimmchild:"Grimmchild",wikiCarefreeMelody:"Carefree_Melody"},killedGrimm:{name:"P3 Troupe Master Grimm",spoiler:"Dirtmouth, collect 6 flames",wiki:"Grimm"},grimmChildLevel:{name:"Complete Ritual or Banish Troupe",nameDefault:"Complete Ritual or Banish Troupe",nameNightmareKing:"Grimm Troupe Choice: Nightmare King",nameBanishment:"Grimm Troupe Choice: Banishment",spoiler:"One choice per save file: Dirtmouth or Howling Cliffs",spoilerDefault:"One choice per save file: Dirtmouth or Howling Cliffs",spoilerNightmareKing:"Completed the Ritual",spoilerBanishment:"Banished Grimm Troupe",wiki:"Grimm_Troupe_(Quest)",wikiDefault:"Grimm_Troupe_(Quest)",wikiNightmareKing:"Nightmare_King_Grimm",wikiBanishment:"Nymm"}}},lifeblood:{h2:"Lifeblood Content Pack",id:"hk-lifeblood",description:'The second Content Pack. Released April 20th, 2018 (1.3.1.5 Game Update). Among many quality changes, it added one new boss, which increased the max Game Completion Percentage by +1%.',percent:0,maxPercent:1,entries:{killedHiveKnight:{name:"P3 Hive Knight",spoiler:"The Hive, guards Hiveblood charm",wiki:"Hive_Knight"}}},godmaster:{h2:"Godmaster Content Pack",id:"hk-godmaster",description:'The third Content Pack. Released August 23rd, 2018 (1.4.2.4 Game Update). It added additional +5% to max Game Completion Percentage (up to a total of 112%).',percent:0,maxPercent:5,entries:{hasGodfinder:{name:"Godtuner",spoiler:"Royal Waterways: Junk Pit, requires Simple Key",wiki:"Godtuner"},pantheonMaster:{name:"P1 Pantheon of the Master",spoiler:"Godhome: defeat P1 bosses",wiki:"Pantheon_of_the_Master",property:"bossDoorStateTier1"},pantheonArtist:{name:"P2 Pantheon of the Artist",spoiler:"Godhome: defeat P2 bosses",wiki:"Pantheon_of_the_Artist",property:"bossDoorStateTier2"},pantheonSage:{name:"P3 Pantheon of the Sage",spoiler:"Godhome: defeat P3 bosses",wiki:"Pantheon_of_the_Sage",property:"bossDoorStateTier3"},pantheonKnight:{name:"P4 Pantheon of the Knight",spoiler:"Godhome: complete P1, P2 and P3",wiki:"Pantheon_of_the_Knight",property:"bossDoorStateTier4"}}},essentialsCollectibles:{h2:"Game Completion % Essentials – Collectibles",id:"hk-essentials-collectibles",description:"Collectibles that don't count directly towards 112% Game Completion, but are required to achieve full 112%.",entries:{grubsCollected:{name:"Grubs Rescued",spoiler:"46 Grubs total",max:46,maxDefault:46,wiki:"Grub"},grubRewards:{name:"Grubfather Rewards Awarded",spoiler:"46 Rewards total",max:46,maxDefault:46,wiki:"Grub#Rewards_and_locations"},charmsOwned:{name:"Charms Owned",spoiler:"40 Charms total, useful for Salubra Notches",max:40,maxDefault:40,wiki:"Category:Charms#List_of_Charms"},dreamOrbs:{name:"Essence Collected",spoiler:"Dream Nail (2400 for completion)",max:2400,maxDefault:2400,wiki:"Dream_Nail#Essence"},hasLantern:{name:"Lumafly Lantern",spoiler:"Sly: 1800 Geo",wiki:"Lumafly_Lantern"},shopkeeperKey:{name:"Shopkeeper's Key",spoiler:"Crystal Peak, below Quirrel location",wiki:"Shopkeeper's_Key"},elegantKey:{name:"Elegant Key",spoiler:"Sly: 800 Geo + Shopkeeper's Key",wiki:"Elegant_Key"},loveKey:{name:"Love Key",spoiler:"Queen's Gardens, near Fungal Wastes",wiki:"Love_Key"},slySimpleKey:{name:"Simple Key #1",spoiler:"Sly: 950 Geo",wiki:"Simple_Key"},simpleKeyCityOfTears:{name:"Simple Key #2",spoiler:"City of Tears, below left Stag Station",id:"Shiny Item",sceneName:"Ruins1_17",wiki:"Simple_Key#How_to_Acquire"},simpleKeyAncientBasin:{name:"Simple Key #3",spoiler:"Ancient Basin, below Broken Vessel",id:"Shiny Item Stand",sceneName:"Abyss_20",wiki:"Simple_Key#How_to_Acquire"},gotLurkerKey:{name:"Simple Key #4",spoiler:"Colosseum of Fools: Pale Lurker's Retreat",wiki:"Simple_Key#How_to_Acquire"},paleOreAncientBasin:{name:"Pale Ore #1",spoiler:"Ancient Basin, left of Tram Station",id:"Battle Scene Ore",sceneName:"Abyss_17",wiki:"Pale_Ore"},paleOreSeer:{name:"Pale Ore #2",spoiler:"Seer: 300 Essence",wiki:"Pale_Ore#How_to_Acquire"},paleOreCrystalPeak:{name:"Pale Ore #3",spoiler:"Top of Crystal Peak, use Monarch Wings",id:"Shiny Item Stand",sceneName:"Mines_34",wiki:"Pale_Ore#How_to_Acquire"},paleOreDeepnest:{name:"Pale Ore #4",spoiler:"Deepnest, Nosk reward",id:"Shiny Item Stand",sceneName:"Deepnest_32",wiki:"Pale_Ore#How_to_Acquire"},paleOreGrubfather:{name:"Pale Ore #5",spoiler:"Grubfather: 31 Grubs rescued",id:"Shiny Item Ore",sceneName:"Crossroads_38",wiki:"Pale_Ore#How_to_Acquire"},paleOreColosseum:{name:"Pale Ore #6",spoiler:"Colosseum of Fools: Trial of the Conqueror",id:"Shiny Item",sceneName:"Room_Colosseum_Silver",wiki:"Pale_Ore#How_to_Acquire"},hasTramPass:{name:"Tram Pass",spoiler:"Deepnest: Failed Tramway",wiki:"Tram_Pass"},gotQueenFragment:{name:"White Fragment: Queen",spoiler:"White Lady: Queen's Gardens",wiki:"Kingsoul#How_to_Acquire"},gotKingFragment:{name:"White Fragment: King",spoiler:"Pale King: White Palace",wiki:"Kingsoul#How_to_Acquire"}},grubsList:["Crossroads_35","Crossroads_03","Crossroads_05","Crossroads_48","Crossroads_31","Fungus1_06","Fungus1_07","Fungus1_21","Fungus1_28","Fungus2_18","Ruins1_05","Mines_04","Mines_03","Mines_31","Mines_19","Ruins1_32","RestingGrounds_10","Ruins_House_01","Mines_35","Mines_16","Waterways_04","Waterways_13","Abyss_19","Abyss_17","Mines_24","Fungus1_13","Fungus3_47","Fungus3_10","Fungus3_48","Fungus3_22","Ruins2_07","Ruins2_11","Ruins2_11","Ruins2_11","Deepnest_East_11","Deepnest_East_14","Fungus2_20","Ruins2_03","Deepnest_36","Deepnest_03","Deepnest_31","Deepnest_39","Deepnest_Spider_Town","Waterways_14","Hive_03","Hive_04"]},essentialsStagStations:{h2:"Game Completion % Essentials – Stag Stations",id:"hk-essentials-stag-stations",description:'Opened Stag Stations don\'t count directly towards 112% Game Completion, but are required to achieve full 112% by discovering the Stag Nest for the Vessel Fragment.',entries:{openedTownBuilding:{name:"Stag Station: Dirtmouth",spoiler:"Opened from inside after travelling",wiki:"Dirtmouth"},openedCrossroads:{name:"Stag Station: Forgotten Crossroads",spoiler:"50 Geo: Right middle-bottom area",wiki:"Forgotten_Crossroads"},openedGreenpath:{name:"Stag Station: Greenpath",spoiler:"140 Geo: Top middle area, below Hornet",wiki:"Greenpath"},openedFungalWastes:{name:"Stag Station: Queen's Station",spoiler:"120 Geo: Fungal Wastes, near Fog Canyon",wiki:"Fungal_Wastes#Sub-area:_Queen.27s_Station"},openedRuins1:{name:"Stag Station: City Storerooms",spoiler:"200 Geo: City of Tears, top left area",wiki:"City_of_Tears#City_Storerooms"},openedRestingGrounds:{name:"Stag Station: Resting Grounds",spoiler:"0 Geo: Right middle area, near Seer",wiki:"Resting_Grounds"},openedRuins2:{name:"Stag Station: King's Station",spoiler:"300 Geo: City of Tears, far right area",wiki:"City_of_Tears#Sub-area:_King.27s_Station"},openedRoyalGardens:{name:"Stag Station: Queen's Gardens",spoiler:"200 Geo: Middle area, near Traitor's Grave",wiki:"Queen's_Gardens"},openedDeepnest:{name:"Stag Station: Distant Village",spoiler:"250 Geo: Deepnest, far left area",wiki:"Deepnest#Sub-area:_Distant_Village"},openedHiddenStation:{name:"Stag Station: Hidden Station",spoiler:"300 Geo: Ancient Basin: Palace Grounds",wiki:"Ancient_Basin#Sub-Area:_Palace_Grounds"},openedStagNest:{name:"Stag Station: Stag Nest",spoiler:"Open all stations: Howling Cliffs, top area",wiki:"Howling_Cliffs#Sub-area:_Stag_Nest"},stagStationsOpened:{name:"Stag Stations Opened",spoiler:"11 Stag Stations total including Dirtmouth",max:11,maxDefault:11,wiki:"Fast_Travel_(Hollow_Knight)#Locations_and_Prices"}}},essentialsWorldInteractions:{h2:"Game Completion % Essentials – World Interactions",id:"hk-essentials-world-interactions",description:"Certain interactions the player can make with NPCs in the game or world objects which don't count directly towards 112% Game Completion, but are required to achieve full 112%.",entries:{slyRescued:{name:"Sly Rescued",spoiler:"Forgotten Crossroads, near Gruz Mother",wiki:"Sly"},brettaRescued:{name:"Bretta Rescued",spoiler:"Fungal Wastes, near Dashmaster charm statue",wiki:"Bretta"},paidLegEater:{name:"Paid to See Something Nice",spoiler:"Fungal Wastes, Leg Eater: 86 Geo",wiki:"Leg_Eater#In-game_events"},gaveSlykey:{name:"Shopkeeper's Key Returned to Sly",spoiler:"Dirtmouth, Sly's Shop",wiki:"Sly"},mantisVillageFloorLever:{name:"Mantis Village Floor Lever",spoiler:"Fungal Wastes, right of Mantis Claw",id:"Mantis Lever (1)",sceneName:"Fungus2_14",wiki:"Fungal_Wastes#Sub-area:_Mantis_Village"},xunFlowerGiven:{name:"Delicate Flower Accepted",spoiler:"Resting Grounds: listen to Grey Mourner",wiki:"Grey_Mourner#In-game_events"},waterwaysAcidDrained:{name:"Acid Drained",spoiler:"Royal Waterways, lever after Dung Defender",wiki:"Royal_Waterways#Sub-area:_Isma.27s_Grove"},openedMageDoor_v2:{name:"Elegant Door Unlocked",spoiler:"City of Tears: Soul Sanctum, requires Elegant Key",wiki:"Elegant_Key#Use"},openedLoveDoor:{name:"Tower of Love Door Unlocked",spoiler:"City of Tears, requires Love Key",wiki:"City_of_Tears#Sub-area:_Tower_of_Love"},abyssGateOpened:{name:"The Abyss Gate Opened",spoiler:"Ancient Basin, requires King's Brand",wiki:"Ancient_Basin#Description"},blueVineDoor:{name:"Lifeblood Door Opened",spoiler:"The Abyss, requires 14–15+ Lifeblood Masks",wiki:"Lifeblood_Core#How_to_Acquire"},nightmareLanternLit:{name:"Nightmare Lantern Lit",spoiler:"Howling Cliffs, corpse of a large bug",wiki:"Howling_Cliffs#Nightmare_Lantern_Chamber"},godseekerUnlocked:{name:"Godseeker Cocoon Unlocked",spoiler:"Royal Waterways: Junk Pit",wiki:"Royal_Waterways#Sub-area:_Junk_Pit"},fountainGeo:{name:"Geo in Fountain",spoiler:"Ancient Basin: 3000 Geo maximum",max:3e3,maxDefault:3e3,wiki:"Ancient_Basin#Description"}}},essentialsBosses:{h2:"Game Completion % Essentials – Bosses",id:"hk-essentials-bosses",description:"Bosses that don't count directly towards 112% Game Completion, but are required to defeat to achieve full 112%.",entries:{killedMegaMossCharger:{name:"P1 Massive Moss Charger",spoiler:"Greenpath, near Fog Canyon",wiki:"Massive_Moss_Charger"},pantheonSoulWarrior:{name:"P1 Soul Warrior",spoiler:"City of Tears: Soul Sanctum",id:"Battle Scene v2",sceneName:"Ruins1_23",wiki:"Soul_Warrior#Location"},shadeSoulWarrior:{name:"Shade Soul Warrior",spoiler:"City of Tears: Soul Sanctum, use Elegant Key",id:"Battle Scene v2",sceneName:"Ruins1_31",wiki:"Shade_Soul#How_to_Acquire"},pantheonCrystalGuardian:{name:"P2 Crystal Guardian",spoiler:"Crystal Peak, guards Central Bench",id:"Mega Zombie Beam Miner (1)",sceneName:"Mines_18",wiki:"Crystal_Guardian"},killedBigBuzzer:{name:"Vengefly King",spoiler:"Colosseum of Fools: Trial of the Warrior, Greenpath",wiki:"Vengefly_King"},killedOblobble:{name:"P2 Oblobble",spoiler:"Colosseum of Fools: Trial of the Conqueror",wiki:"Oblobbles"},killedLobsterLancer:{name:"God Tamer",spoiler:"Colosseum of Fools: Trial of the Fool",wiki:"God_Tamer"},killedFlukeMother:{name:"P2 Flukemarm",spoiler:"Royal Waterways, requires Desolate Dive",wiki:"Flukemarm"},pantheonEnragedGuardian:{name:"P4 Enraged Guardian",spoiler:"Crystal Peak, requires Monarch Wings",id:"Zombie Beam Miner Rematch",sceneName:"Mines_32",wiki:"Enraged_Guardian"},killedNailBros:{name:"Nailmasters Oro & Mato",spoiler:"Godhome: Pantheon of the Master",wiki:"Brothers_Oro_%26_Mato"},killedPaintmaster:{name:"Paintmaster Sheo",spoiler:"Godhome: Pantheon of the Artist",wiki:"Paintmaster_Sheo"},killedNailsage:{name:"Great Nailsage Sly",spoiler:"Godhome: Pantheon of the Sage",wiki:"Great_Nailsage_Sly"},killedHollowKnightPrime:{name:"Pure Vessel",spoiler:"Godhome: Pantheon of the Knight",wiki:"Pure_Vessel"}}},achievementsCollectibles:{h2:"Achievements Essentials – Collectibles",id:"hk-achievements-collectibles",description:"Collectibles important for unlocking achievements. They don't count or matter towards 112% Game Completion.",entries:{hasMap:{name:"Inventory Map",spoiler:"First map bought from Cornifer or Iselda",wiki:"Map_and_Quill"},hasJournal:{name:"Hunter's Journal",spoiler:"Greenpath: Hunter, above Stone Sanctuary",wiki:"Hunter's_Journal"},hasHuntersMark:{name:"Hunter's Mark",spoiler:"Greenpath: Hunter, complete base 146 Hunter Notes",wiki:"Hunter's_Mark"},killsBigBuzzer:{name:"Vengefly King Journal Note",spoiler:"Colosseum: Trial of the Warrior",wiki:"Vengefly_King"},salubraBlessing:{name:"Salubra's Blessing",spoiler:"Salubra: 800 Geo + all 40 Charms Owned",wiki:"Salubra's_Blessing"},gotShadeCharm:{name:"Void Heart",spoiler:"Equip Kingsoul Charm and find Birthplace",wiki:"Void_Heart"}}},achievementsMaps:{h2:"Achievements Essentials – Maps",id:"hk-achievements-maps",description:"Acquired maps are important for unlocking achievements. They don't count or matter towards 112% Game Completion.",entries:{mapCrossroads:{name:"Map: Forgotten Crossroads",spoiler:"30/40 Geo: below Gruzzer area",wiki:"Forgotten_Crossroads"},mapGreenpath:{name:"Map: Greenpath",spoiler:"60/80 Geo: just below Greenpath entrance",wiki:"Greenpath"},mapFungalWastes:{name:"Map: Fungal Wastes",spoiler:"75/100 Geo: right of Queen's Station",wiki:"Fungal_Wastes"},mapCliffs:{name:"Map: Howling Cliffs",spoiler:"75/100 Geo: left middle area, near Journal",wiki:"Howling_Cliffs"},mapCity:{name:"Map: City of Tears",spoiler:"90/120 Geo: left of Soul Sanctum",wiki:"City_of_Tears"},mapMines:{name:"Map: Crystal Peak",spoiler:"120/150 Geo: top left area",wiki:"Crystal_Peak"},mapWaterways:{name:"Map: Royal Waterways",spoiler:"75/100 Geo: far left area, near Fungal",wiki:"Royal_Waterways"},mapRestingGrounds:{name:"Map: Resting Grounds",spoiler:"75 Geo: Iselda's Shop",wiki:"Resting_Grounds"},mapAbyss:{name:"Map: Ancient Basin",spoiler:"112/150 Geo: center area, near fountain",wiki:"Ancient_Basin"},mapOutskirts:{name:"Map: Kingdom's Edge",spoiler:"112/150 Geo: left bottom area, inside pipe",wiki:"Kingdom's_Edge"},mapFogCanyon:{name:"Map: Fog Canyon",spoiler:"150/200 Geo: above Teacher's Archives",wiki:"Fog_Canyon"},mapRoyalGardens:{name:"Map: Queen's Gardens",spoiler:"150/200 Geo: below Fog Canyon entrance",wiki:"Queen's_Gardens"},mapDeepnest:{name:"Map: Deepnest",spoiler:"38/50 Geo: near both Fungal Wastes entrances",wiki:"Deepnest"},areaMaps:{name:"Area Maps",spoiler:"Cornifer and Iselda, 13 Area Maps total",max:13,maxDefault:13,wiki:"Map_and_Quill#Maps"}}},achievementsWorldInteractions:{h2:"Achievements Essentials – World Interactions",id:"hk-achievements-world-interactions",description:"Certain interactions the player can make with NPCs in the game or world objects important for unlocking achievements. They don't count or matter towards 112% Game Completion. This section includes some choices that the player can make in the game.",entries:{quirrelEpilogueCompleted:{name:"Quirrel: Witness",spoiler:"Blue Lake: after defeating Monomon the Teacher",wiki:"Quirrel"},xunRewardGiven:{name:"Grey Mourner: Solace",spoiler:"Resting Grounds: Complete Delicate Flower quest",wiki:"Grey_Mourner"},zoteStatus:{id:"zoteStatus",name:"Zote Status",nameDefault:"Zote Status",nameNeglect:"Zote Choice: Neglect",nameRivalry:"Zote Choice: Rivalry",nameTrappedVengefly:"Zote Status: Vengefly",nameNotRescuedVengefly:"Zote Status: Greenpath",nameTrappedDeepnest:"Zote Status: Deepnest",nameColosseum:"Zote Status: Colosseum of Fools",spoiler:"One achievement per save file",spoilerDefault:"One achievement per save file",spoilerNeglect:"Left Zote to die",spoilerRivalry:"Defeated Zote in the Colosseum of Fools",spoilerTrappedVengefly:"Greenpath, defeat Vengefly King",spoilerNotRescuedVengefly:"Check what happened with Zote",spoilerTrappedDeepnest:"Deepnest, free from cobwebs",spoilerColosseum:"Trial of the Warrior",wiki:"Zote"},nailsmithStatus:{id:"nailsmithStatus",name:"Nailsmith Status",nameDefault:"Nailsmith Status",nameHappyCouple:"Nailsmith Choice: Happy Couple",namePurity:"Nailsmith Choice: Purity",nameSheoHutWaiting:"Nailsmith Status: Sheo",nameUpgradeNail:"Nailsmith Status: Waiting",spoiler:"One achievement per save file",spoilerDefault:"One achievement per save file",spoilerHappyCouple:"Found a new calling",spoilerPurity:"Slain with Pure Nail",spoilerSheoHutWaiting:"Waiting at Sheo's Hut",spoilerUpgradeNail:"Upgrade Nail to Pure Nail",wiki:"Nailsmith"},mrMushroomState1:{name:"Mr Mushroom #1",spoiler:"Fungal Wastes, near Cornifer",wiki:"Mister_Mushroom",state:2},mrMushroomState2:{name:"Mr Mushroom #2",spoiler:"Kingdom's Edge, near Isma's Grove",wiki:"Mister_Mushroom",state:3},mrMushroomState3:{name:"Mr Mushroom #3",spoiler:"Deepnest, near Galien",wiki:"Mister_Mushroom",state:4},mrMushroomState4:{name:"Mr Mushroom #4",spoiler:"Howling Cliffs, near Nailmaster Mato",wiki:"Mister_Mushroom",state:5},mrMushroomState5:{name:"Mr Mushroom #5",spoiler:"Ancient Basin, near Monarch Wings",wiki:"Mister_Mushroom",state:6},mrMushroomState6:{name:"Mr Mushroom #6",spoiler:"Fog Canyon, near Overgrown Mound",wiki:"Mister_Mushroom",state:7},mrMushroomState7:{name:"Mr Mushroom #7",spoiler:"King's Pass, game starting location",wiki:"Mister_Mushroom",state:8},pantheonHallownest:{name:"P5 Embrace the Void",spoiler:"Godhome: Pantheon of Hallownest",wiki:"Pantheon_of_Hallownest"}}},achievementsBosses:{h2:"Achievements Essentials – Bosses",id:"hk-achievements-bosses",description:"Bosses important for unlocking achievements. They don't count or matter towards 112% Game Completion.",entries:{falseKnightDreamDefeated:{name:"Failed Champion",spoiler:"Forgotten Crossroads, near False Knight",wiki:"Failed_Champion"},mageLordDreamDefeated:{name:"Soul Tyrant",spoiler:"City of Tears: Soul Sanctum, near Soul Master",wiki:"Soul_Tyrant"},infectedKnightDreamDefeated:{name:"Lost Kin",spoiler:"Ancient Basin, Broken Vessel location",wiki:"Lost_Kin"},whiteDefenderDefeated:{name:"White Defender",spoiler:"Royal Waterways, Dung Defender, use Desolate Dive",wiki:"White_Defender"},greyPrinceDefeated:{name:"Grey Prince Zote",spoiler:"Dirtmouth: Bretta's Room (per save choice)",wiki:"Grey_Prince_Zote"},killedHollowKnight:{name:"Hollow Knight",spoiler:"Forgotten Crossroads: Black Egg Temple",wiki:"Hollow_Knight"},killedFinalBoss:{name:"The Radiance",spoiler:"Requires Void Heart & Dream Nail Hollow Knight",wiki:"Radiance"}}},huntersJournal:{h2:"Hunter's Journal",id:"hk-journal",description:'All the 146 base-game Hunter\'s Journal entries that are counted for Hunter\'s Mark and Keen Hunter/True Hunter achievements. The 17 most commonly missed Journal entries are right at the top of this list. \n Numbers above: Completed/Encountered of 146 Base Total \n = note completed. \n = entry discovered, but note not completed. \n = entry not yet discovered. \n (no.) = amount left to complete note.',percent:0,midPercent:0,maxPercent:146,entries:{PrayerSlug:{name:"Maggot (2)",nameDefault:"Maggot",spoiler:"Forgotten Crossroads: False Knight secret room",wiki:"Maggot"},OrangeScuttler:{name:"Lightseed (20)",nameDefault:"Lightseed",spoiler:"Infected Crossroads",wiki:"Lightseed"},Pigeon:{name:"Maskfly (15)",nameDefault:"Maskfly",spoiler:"Greenpath, Queen's Gardens",wiki:"Maskfly"},LazyFlyer:{name:"Aluba (1)",nameDefault:"Aluba",spoiler:"Lake of Unn, Queen's Gardens (near White Lady)",wiki:"Aluba"},AcidFlyer:{name:"Duranda (8)",nameDefault:"Duranda",spoiler:"Greenpath: Nailmaster Sheo's tent path",wiki:"Duranda"},AcidWalker:{name:"Durandoo (8)",nameDefault:"Durandoo",spoiler:"Greenpath, Queen's Gardens",wiki:"Durandoo"},PlantShooter:{name:"Gulka (15)",nameDefault:"Gulka",spoiler:"Greenpath: left of Stone Sanctuary",wiki:"Gulka"},MushroomTurret:{name:"Sporg (20)",nameDefault:"Sporg",spoiler:"Fungal Wastes",wiki:"Sporg"},ZapBug:{name:"Charged Lumafly (1)",nameDefault:"Charged Lumafly",spoiler:"Fog Canyon: Teacher's Archives (tank)",wiki:"Charged_Lumafly"},LaserBug:{name:"Crystal Crawler (15)",nameDefault:"Crystal Crawler",spoiler:"Crystal Peak: try to use spells",wiki:"Crystal_Crawler"},GorgeousHusk:{name:"Gorgeous Husk (1)",nameDefault:"Gorgeous Husk",spoiler:"City of Tears: secret room",wiki:"Gorgeous_Husk"},Worm:{name:"Goam (10)",nameDefault:"Goam",spoiler:"Infected Crossroads: near Fungal Wastes entrance",wiki:"Goam"},BigCentipede:{name:"Garpede (10)",nameDefault:"Garpede",spoiler:"Deepnest: right of Hot Spring",wiki:"Garpede"},AbyssTendril:{name:"Void Tendrils (10)",nameDefault:"Void Tendrils",spoiler:"The Abyss: secret room near Shade Cloak",wiki:"Void_Tendrils"},LobsterLancer:{name:"God Tamer (1)",nameDefault:"God Tamer",spoiler:"Colosseum of Fools: Trial of the Fool boss",wiki:"God_Tamer"},FatFluke:{name:"Flukemunga (8)",nameDefault:"Flukemunga",spoiler:"Royal Waterways: secret area, left of bench",wiki:"Flukemunga"},PaleLurker:{name:"Pale Lurker (1)",nameDefault:"Pale Lurker",spoiler:"Colosseum of Fools: top right breakable wall",wiki:"Pale_Lurker"},Crawler:{name:"Crawlid (0)",nameDefault:"Crawlid",spoiler:"King's Pass, Forgotten Crossroads, Greenpath",wiki:"Crawlid"},Buzzer:{name:"Vengefly (45)",nameDefault:"Vengefly",spoiler:"Howling Cliffs, Forgotten Crossroads, City of Tears",wiki:"Vengefly"},Bouncer:{name:"Gruzzer (25)",nameDefault:"Gruzzer",spoiler:"Forgotten Crossroads",wiki:"Gruzzer"},Climber:{name:"Tiktik (30)",nameDefault:"Tiktik",spoiler:"Forgotten Crossroads, Howling Cliffs, Greenpath",wiki:"Tiktik"},Hopper:{name:"Hopper (25)",nameDefault:"Hopper",spoiler:"Kingdom's Edge",wiki:"Hopper"},Spitter:{name:"Aspid Hunter (20)",nameDefault:"Aspid Hunter",spoiler:"Forgotten Crossroads, Ancient Basin, The Collector",wiki:"Aspid_Hunter"},Hatcher:{name:"Aspid Mother (15)",nameDefault:"Aspid Mother",spoiler:"Forgotten Crossroads, mainly next to the Tram station",wiki:"Aspid_Mother"},Hatchling:{name:"Aspid Hatchling (30)",nameDefault:"Aspid Hatchling",spoiler:"Forgotten Crossroads, summoned by Aspid Mother",wiki:"Aspid_Hatchling"},ZombieRunner:{name:"Wandering Husk (35)",nameDefault:"Wandering Husk",spoiler:"Forgotten Crossroads, City of Tears, Deepnest",wiki:"Wandering_Husk"},ZombieHornhead:{name:"Husk Hornhead (35)",nameDefault:"Husk Hornhead",spoiler:"Forgotten Crossroads, City of Tears, Deepnest",wiki:"Husk_Hornhead"},ZombieLeaper:{name:"Leaping Husk (35)",nameDefault:"Leaping Husk",spoiler:"Forgotten Crossroads, City of Tears, Howling Cliffs",wiki:"Leaping_Husk"},ZombieBarger:{name:"Husk Bully (35)",nameDefault:"Husk Bully",spoiler:"Forgotten Crossroads, City of Tears, Howling Cliffs",wiki:"Husk_Bully"},ZombieShield:{name:"Husk Warrior (10)",nameDefault:"Husk Warrior",spoiler:"Forgotten Crossroads: right of the Stag Station",wiki:"Husk_Warrior"},ZombieGuard:{name:"Husk Guard (6)",nameDefault:"Husk Guard",spoiler:"Forgotten Crossroads: upper right area",wiki:"Husk_Guard"},BigBuzzer:{name:"Vengefly King (2)",nameDefault:"Vengefly King",spoiler:"Greenpath, Colosseum: Trial of the Warrior",wiki:"Vengefly_King"},BigFly:{name:"Gruz Mother (3)",nameDefault:"Gruz Mother",spoiler:"Forgotten Crossroads: lower right area",wiki:"Gruz_Mother"},Mawlek:{name:"Brooding Mawlek (1)",nameDefault:"Brooding Mawlek",spoiler:"Forgotten Crossroads: down from Grubfather",wiki:"Brooding_Mawlek"},FalseKnight:{name:"False Knight (1)",nameDefault:"False Knight",spoiler:"Forgotten Crossroads: middle area map symbol",wiki:"False_Knight"},Roller:{name:"Baldur (20)",nameDefault:"Baldur",spoiler:"Ancestral Mound, Crystallised Mound, Howling Cliffs",wiki:"Baldur"},Blocker:{name:"Elder Baldur (1)",nameDefault:"Elder Baldur",spoiler:"Ancestral Mound, Greenpath, Howling Cliffs",wiki:"Elder_Baldur"},MossmanRunner:{name:"Mosskin (25)",nameDefault:"Mosskin",spoiler:"Greenpath: usually near a Volatile Mosskin",wiki:"Mosskin"},MossmanShaker:{name:"Volatile Mosskin (25)",nameDefault:"Volatile Mosskin",spoiler:"Greenpath",wiki:"Volatile_Mosskin"},Mosquito:{name:"Squit (25)",nameDefault:"Squit",spoiler:"Greenpath and the Overgrown Mound",wiki:"Squit"},BlobFlyer:{name:"Obble (20)",nameDefault:"Obble",spoiler:"Greenpath: top left of Stone Sanctuary",wiki:"Obble"},FungifiedZombie:{name:"Fungified Husk (10)",nameDefault:"Fungified Husk",spoiler:"Found only in Fungal Wastes",wiki:"Fungified_Husk"},MossCharger:{name:"Moss Charger (15)",nameDefault:"Moss Charger",spoiler:"Found only in Greenpath",wiki:"Moss_Charger"},MegaMossCharger:{name:"Massive Moss Charger (1)",nameDefault:"Massive Moss Charger",spoiler:"Greenpath: bottom left near Fog Canyon",wiki:"Massive_Moss_Charger"},SnapperTrap:{name:"Fool Eater (15)",nameDefault:"Fool Eater",spoiler:"Greenpath and Queen's Gardens",wiki:"Fool_Eater"},MossKnight:{name:"Moss Knight (8)",nameDefault:"Moss Knight",spoiler:"Found only in Greenpath",wiki:"Moss_Knight"},GrassHopper:{name:"Loodle (15)",nameDefault:"Loodle",spoiler:"Found only in Queen's Gardens",wiki:"Loodle"},MossFlyer:{name:"Mossfly (25)",nameDefault:"Mossfly",spoiler:"Queen's Gardens, Overgrown Mound",wiki:"Mossfly"},MossKnightFat:{name:"Mossy Vagabond (10)",nameDefault:"Mossy Vagabond",spoiler:"Queen's Gardens: near exit to Fungal Wastes",wiki:"Mossy_Vagabond"},MossWalker:{name:"Mosscreep (30)",nameDefault:"Mosscreep",spoiler:"Greenpath and Queen's Gardens",wiki:"Mosscreep"},InfectedKnight:{name:"Broken Vessel (1)",nameDefault:"Broken Vessel",spoiler:"Ancient Basin: far left, needs Crystal Heart",wiki:"Broken_Vessel"},Jellyfish:{name:"Ooma (12)",nameDefault:"Ooma",spoiler:"Fog Canyon: almost everywhere",wiki:"Ooma"},JellyCrawler:{name:"Uoma (20)",nameDefault:"Uoma",spoiler:"Fog Canyon: almost everywhere",wiki:"Uoma"},MegaJellyfish:{name:"Uumuu (1)",nameDefault:"Uumuu",spoiler:"Fog Canyon: inside Teacher's Archives",wiki:"Uumuu"},FungoonBaby:{name:"Fungling (30)",nameDefault:"Fungling",spoiler:"Fungal Wastes, Fungal Core, Junk Pit",wiki:"Fungling"},Mantis:{name:"Mantis Warrior (25)",nameDefault:"Mantis Warrior",spoiler:"Fungal Wastes: Mantis Village",wiki:"Mantis_Warrior"},MushroomRoller:{name:"Shrumal Warrior (20)",nameDefault:"Shrumal Warrior",spoiler:"Fungal Wastes, Fungal Core",wiki:"Shrumal_Warrior"},MushroomBrawler:{name:"Shrumal Ogre (8)",nameDefault:"Shrumal Ogre",spoiler:"Fungal Wastes, bottom of Fungal Core",wiki:"Shrumal_Ogre"},MushroomBaby:{name:"Shrumeling (20)",nameDefault:"Shrumeling",spoiler:"Fungal Wastes, near Shrumal Warriors",wiki:"Shrumeling"},MantisFlyerChild:{name:"Mantis Youth (25)",nameDefault:"Mantis Youth",spoiler:"Fungal Wastes: Mantis Village",wiki:"Mantis_Youth"},FungusFlyer:{name:"Fungoon (20)",nameDefault:"Fungoon",spoiler:"Found only in Fungal Wastes",wiki:"Fungoon"},FungCrawler:{name:"Ambloom (15)",nameDefault:"Ambloom",spoiler:"Fungal Wastes, Fungal Core",wiki:"Ambloom"},MantisLord:{name:"Mantis Lords (1)",nameDefault:"Mantis Lords",spoiler:"Fungal Wastes: Mantis Village, switch lever",wiki:"Mantis_Lords"},BlackKnight:{name:"Watcher Knight (10)",nameDefault:"Watcher Knight",spoiler:"City of Tears: Watcher's Spire, Monarch Wings",wiki:"Watcher_Knight"},ElectricMage:{name:"Volt Twister (6)",nameDefault:"Volt Twister",spoiler:"Colosseum of Fools: Trial of the Fool",wiki:"Volt_Twister"},Mage:{name:"Soul Twister (20)",nameDefault:"Soul Twister",spoiler:"City of Tears: Soul Sanctum, Trial of the Fool",wiki:"Soul_Twister"},MageKnight:{name:"Soul Warrior (2)",nameDefault:"Soul Warrior",spoiler:"City of Tears: Soul Sanctum, Trial of the Fool",wiki:"Soul_Warrior"},RoyalDandy:{name:"Husk Dandy (25)",nameDefault:"Husk Dandy",spoiler:"City of Tears: right section",wiki:"Husk_Dandy"},RoyalCoward:{name:"Cowardly Husk (25)",nameDefault:"Cowardly Husk",spoiler:"City of Tears: right section",wiki:"Cowardly_Husk"},RoyalPlumper:{name:"Gluttonous Husk (25)",nameDefault:"Gluttonous Husk",spoiler:"City of Tears: right section",wiki:"Gluttonous_Husk"},FlyingSentrySword:{name:"Winged Sentry (30)",nameDefault:"Winged Sentry",spoiler:"City of Tears, Royal Waterways, Ancient Basin",wiki:"Winged_Sentry"},FlyingSentryJavelin:{name:"Lance Sentry (25)",nameDefault:"Lance Sentry",spoiler:"City of Tears, Royal Waterways, Ancient Basin",wiki:"Lance_Sentry"},Sentry:{name:"Husk Sentry (25)",nameDefault:"Husk Sentry",spoiler:"City of Tears, Royal Waterways, Isma's Grove",wiki:"Husk_Sentry"},SentryFat:{name:"Heavy Sentry (20)",nameDefault:"Heavy Sentry",spoiler:"Found only in City of Tears",wiki:"Heavy_Sentry"},MageBlob:{name:"Mistake (25)",nameDefault:"Mistake",spoiler:"City of Tears: Soul Sanctum, Trial of the Fool",wiki:"Mistake"},GreatShieldZombie:{name:"Great Husk Sentry (10)",nameDefault:"Great Husk Sentry",spoiler:"City of Tears, Watcher's Spire",wiki:"Great_Husk_Sentry"},JarCollector:{name:"The Collector (1)",nameDefault:"The Collector",spoiler:"City of Tears: Tower of Love, Love Key",wiki:"The_Collector"},MageBalloon:{name:"Folly (15)",nameDefault:"Folly",spoiler:"City of Tears: Soul Sanctum, Trial of the Fool",wiki:"Folly"},MageLord:{name:"Soul Master (1)",nameDefault:"Soul Master",spoiler:"City of Tears: Soul Sanctum",wiki:"Soul_Master"},FlipHopper:{name:"Pilflip (20)",nameDefault:"Pilflip",spoiler:"Royal Waterways: central part",wiki:"Pilflip"},Flukeman:{name:"Flukemon (20)",nameDefault:"Flukemon",spoiler:"Royal Waterways: central part",wiki:"Flukemon"},Inflater:{name:"Hwurmp (20)",nameDefault:"Hwurmp",spoiler:"Royal Waterways, Isma's Grove",wiki:"Hwurmp"},Flukefly:{name:"Flukefey (15)",nameDefault:"Flukefey",spoiler:"Found only in Royal Waterways",wiki:"Flukefey"},FlukeMother:{name:"Flukemarm (1)",nameDefault:"Flukemarm",spoiler:"Royal Waterways: bottom, Desolate Dive",wiki:"Flukemarm"},DungDefender:{name:"Dung Defender (1)",nameDefault:"Dung Defender",spoiler:"Royal Waterways: right area",wiki:"Dung_Defender"},CrystalCrawler:{name:"Glimback (15)",nameDefault:"Glimback",spoiler:"Crystal Peak, Forgotten Crossroads toll booth",wiki:"Glimback"},CrystalFlyer:{name:"Crystal Hunter (20)",nameDefault:"Crystal Hunter",spoiler:"Crystal Peak, Crystallized Mound",wiki:"Crystal_Hunter"},BeamMiner:{name:"Crystallised Husk (15)",nameDefault:"Crystallised Husk",spoiler:"Crystal Peak: top right areas",wiki:"Crystallised_Husk"},ZombieMiner:{name:"Husk Miner (20)",nameDefault:"Husk Miner",spoiler:"Found only in Crystal Peak",wiki:"Husk_Miner"},MegaBeamMiner:{name:"Crystal Guardian (2)",nameDefault:"Crystal Guardian",spoiler:"Crystal Peak: center bench area",wiki:"Crystal_Guardian"},MinesCrawler:{name:"Shardmite (15)",nameDefault:"Shardmite",spoiler:"Found only in Crystal Peak",wiki:"Shardmite"},AngryBuzzer:{name:"Furious Vengefly (15)",nameDefault:"Furious Vengefly",spoiler:"Infected Crossroads, Trial of the Fool",wiki:"Furious_Vengefly"},BurstingBouncer:{name:"Volatile Gruzzer (15)",nameDefault:"Volatile Gruzzer",spoiler:"Infected Crossroads, Colosseum Trials",wiki:"Volatile_Gruzzer"},BurstingZombie:{name:"Violent Husk (15)",nameDefault:"Violent Husk",spoiler:"Found only in Infected Crossroads",wiki:"Violent_Husk"},SpittingZombie:{name:"Slobbering Husk (15)",nameDefault:"Slobbering Husk",spoiler:"Found only in Infected Crossroads",wiki:"Slobbering_Husk"},BabyCentipede:{name:"Dirtcarver (35)",nameDefault:"Dirtcarver",spoiler:"Deepnest, Carver Hatcher",wiki:"Dirtcarver"},CentipedeHatcher:{name:"Carver Hatcher (15)",nameDefault:"Carver Hatcher",spoiler:"Deepnest: top area Failed Tramway",wiki:"Carver_Hatcher"},LesserMawlek:{name:"Lesser Mawlek (10)",nameDefault:"Lesser Mawlek",spoiler:"Ancient Basin: left of tram, Trial of the Fool",wiki:"Lesser_Mawlek"},SlashSpider:{name:"Stalking Devout (15)",nameDefault:"Stalking Devout",spoiler:"Deepnest: left area, Distant Village",wiki:"Stalking_Devout"},SpiderCorpse:{name:"Corpse Creeper (15)",nameDefault:"Corpse Creeper",spoiler:"Found only in Deepnest: middle area",wiki:"Corpse_Creeper"},ShootSpider:{name:"Deephunter (20)",nameDefault:"Deephunter",spoiler:"Found only in Deepnest",wiki:"Deephunter"},MiniSpider:{name:"Deepling (25)",nameDefault:"Deepling",spoiler:"Deepnest: left areas",wiki:"Deepling"},SpiderFlyer:{name:"Little Weaver (20)",nameDefault:"Little Weaver",spoiler:"Deepnest: left areas",wiki:"Little_Weaver"},MimicSpider:{name:"Nosk (1)",nameDefault:"Nosk",spoiler:"Deepnest: left of Hot Spring, use Crystal Heart",wiki:"Nosk"},BeeHatchling:{name:"Hiveling (30)",nameDefault:"Hiveling",spoiler:"The Hive, Kingdom's Edge",wiki:"Hiveling"},BeeStinger:{name:"Hive Soldier (15)",nameDefault:"Hive Soldier",spoiler:"Found only in the Hive",wiki:"Hive_Soldier"},BigBee:{name:"Hive Guardian (12)",nameDefault:"Hive Guardian",spoiler:"Found only in the Hive",wiki:"Hive_Guardian"},HiveKnight:{name:"Hive Knight (1)",nameDefault:"Hive Knight",spoiler:"The Hive: right area",wiki:"Hive_Knight"},BlowFly:{name:"Boofly (20)",nameDefault:"Boofly",spoiler:"Found only in Kingdom's Edge",wiki:"Boofly"},CeilingDropper:{name:"Belfly (15)",nameDefault:"Belfly",spoiler:"City of Tears, Royal Waterways, Kingdom's Edge",wiki:"Belfly"},GiantHopper:{name:"Great Hopper (10)",nameDefault:"Great Hopper",spoiler:"Kingdom's Edge, Trial of the Conqueror",wiki:"Great_Hopper"},GrubMimic:{name:"Grub Mimic (5)",nameDefault:"Grub Mimic",spoiler:"Crystal Peak, Deepnest, Trial of the Conqueror",wiki:"Grub_Mimic"},MawlekTurret:{name:"Mawlurk (10)",nameDefault:"Mawlurk",spoiler:"Ancient Basin: left area",wiki:"Mawlurk"},HealthScuttler:{name:"Lifeseed (10)",nameDefault:"Lifeseed",spoiler:"Hallownest: inside Lifeblood Cocoons",wiki:"Lifeseed"},ZombieHive:{name:"Husk Hive (10)",nameDefault:"Husk Hive",spoiler:"found only in the Hive",wiki:"Husk_Hive"},Hornet:{name:"Hornet (2)",nameDefault:"Hornet",spoiler:"Greenpath, Kingdom's Edge, Godhome",wiki:"Hornet"},AbyssCrawler:{name:"Shadow Creeper (20)",nameDefault:"Shadow Creeper",spoiler:"Ancient Basin, the Abyss",wiki:"Shadow_Creeper"},SuperSpitter:{name:"Primal Aspid (25)",nameDefault:"Primal Aspid",spoiler:"Kingdom's Edge, Colosseum of Fools Trials",wiki:"Primal_Aspid"},Sibling:{name:"Sibling (25)",nameDefault:"Sibling",spoiler:"The Abyss, lighthouse, Birthplace",wiki:"Sibling"},PalaceFly:{name:"Wingmould (10)",nameDefault:"Wingmould",spoiler:"Found only in the White Palace",wiki:"Wingmould"},EggSac:{name:"Bluggsac (5)",nameDefault:"Bluggsac",spoiler:"Royal Waterways, Crystal Peak, Deepnest, Hallownest",wiki:"Bluggsac"},Mummy:{name:"Entombed Husk (10)",nameDefault:"Entombed Husk",spoiler:"Resting Grounds: bottom area tombs",wiki:"Entombed_Husk"},OrangeBalloon:{name:"Infected Balloon (10)",nameDefault:"Infected Balloon",spoiler:"Ancient Basin: left areas",wiki:"Infected_Balloon"},HeavyMantis:{name:"Mantis Traitor (15)",nameDefault:"Mantis Traitor",spoiler:"Queen's Gardens, Trial of the Fool",wiki:"Mantis_Traitor"},TraitorLord:{name:"Traitor Lord (1)",nameDefault:"Traitor Lord",spoiler:"Queen's Gardens: upper left, Shade Cloak",wiki:"Traitor_Lord"},MantisHeavyFlyer:{name:"Mantis Petra (16)",nameDefault:"Mantis Petra",spoiler:"Queen's Gardens, Trial of the Fool",wiki:"Mantis_Petra"},GardenZombie:{name:"Spiny Husk (20)",nameDefault:"Spiny Husk",spoiler:"Found only in Queen's Gardens",wiki:"Spiny_Husk"},RoyalGuard:{name:"Kingsmould (2)",nameDefault:"Kingsmould",spoiler:"Found only in the White Palace",wiki:"Kingsmould"},WhiteRoyal:{name:"Royal Retainer (10)",nameDefault:"Royal Retainer",spoiler:"Found only in the White Palace",wiki:"Royal_Retainer"},Oblobble:{name:"Oblobble (3)",nameDefault:"Oblobble",spoiler:"Trial of the Conqueror, Godhome",wiki:"Oblobbles"},Blobble:{name:"Battle Obble (15)",nameDefault:"Battle Obble",spoiler:"Colosseum of Fools: Trials #2 and #3",wiki:"Battle_Obble"},ColMosquito:{name:"Armoured Squit (15)",nameDefault:"Armoured Squit",spoiler:"Colosseum of Fools: Trials #2 and #3",wiki:"Armoured_Squit"},ColRoller:{name:"Sharp Baldur (20)",nameDefault:"Sharp Baldur",spoiler:"Colosseum of Fools: Trials #1 and #3",wiki:"Sharp_Baldur"},ColFlyingSentry:{name:"Winged Fool (25)",nameDefault:"Winged Fool",spoiler:"Colosseum of Fools: Trials #2 and #3",wiki:"Winged_Fool"},ColMiner:{name:"Sturdy Fool (25)",nameDefault:"Sturdy Fool",spoiler:"Colosseum of Fools: Trials #1 and #3",wiki:"Sturdy_Fool"},ColShield:{name:"Shielded Fool (25)",nameDefault:"Shielded Fool",spoiler:"Colosseum of Fools: All Trials",wiki:"Shielded_Fool"},ColWorm:{name:"Heavy Fool (20)",nameDefault:"Heavy Fool",spoiler:"Colosseum of Fools: Trials #2 and #3",wiki:"Heavy_Fool"},ColHopper:{name:"Death Loodle (15)",nameDefault:"Death Loodle",spoiler:"Colosseum of Fools: Trial of the Fool",wiki:"Death_Loodle"},GhostAladar:{name:"Gorb (1)",nameDefault:"Gorb",spoiler:"Howling Cliffs: top area",wiki:"Gorb"},GhostXero:{name:"Xero (1)",nameDefault:"Xero",spoiler:"Resting Grounds: left area",wiki:"Xero"},GhostHu:{name:"Elder Hu (1)",nameDefault:"Elder Hu",spoiler:"Fungal Wastes: above acid bridge",wiki:"Elder_Hu"},GhostMarmu:{name:"Marmu (1)",nameDefault:"Marmu",spoiler:"Queen's Gardens: left of Stag Station",wiki:"Marmu"},GhostNoEyes:{name:"No Eyes (1)",nameDefault:"No Eyes",spoiler:"Greenpath: Stone Sanctuary, requires Lumafly Lantern",wiki:"No_Eyes"},GhostMarkoth:{name:"Markoth (1)",nameDefault:"Markoth",spoiler:"Kingdom's Edge, requires Shade Cloak",wiki:"Markoth"},GhostGalien:{name:"Galien (1)",nameDefault:"Galien",spoiler:"Deepnest: below Failed Tramway",wiki:"Galien"},ShadeJournal:{name:"Shade (0)",nameDefault:"Shade",spoiler:"Unlocked automatically after getting the Journal",wiki:"Shade"}}},huntersJournalOptional:{h2:"Optional Journal Entries",id:"hk-journal-optional",description:"The remaining Hunter's Journal entries which don't count for Hunter's Mark and Keen/True Hunter achievements. Note: 6 entries can be permanently unobtainable, depending on your choices in the save file (Grey Prince Zote, all 3 Zotelings, Grimmkin Nightmare and Nightmare King).",entries:{HunterMark:{name:"Hunter's Mark (1)",nameDefault:"Hunter's Mark",spoiler:"Greenpath: Hunter, complete base 146 Hunter Notes",wiki:"Hunter's_Mark"},MenderBug:{name:"Menderbug (1)",nameDefault:"Menderbug",spoiler:"Forgotten Crossroads: destroy sign",wiki:"Menderbug"},Zote:{name:"Zote (1)",nameDefault:"Zote",spoiler:"Colosseum: Trial of the Warrior or The Eternal Ordeal",wiki:"Zote"},HollowKnight:{name:"Hollow Knight (1)",nameDefault:"Hollow Knight",spoiler:"Forgotten Crossroads: Black Egg Temple",wiki:"Hollow_Knight"},FinalBoss:{name:"The Radiance (1)",nameDefault:"The Radiance",spoiler:"Requires Void Heart & Dream Nail Hollow Knight",wiki:"Radiance"},WhiteDefender:{name:"White Defender (1)",nameDefault:"White Defender",spoiler:"Royal Waterways: Dung Defender, Desolate Dive",wiki:"White_Defender"},GreyPrince:{name:"Grey Prince Zote (1)",nameDefault:"Grey Prince Zote",spoiler:"Dirtmouth: Bretta's Room (per save choice)",wiki:"Grey_Prince_Zote"},ZotelingBalloon:{name:"Volatile Zoteling (1)",nameDefault:"Volatile Zoteling",spoiler:"Only from Grey Prince Zote, Battle 3+",wiki:"Volatile_Zoteling"},ZotelingHopper:{name:"Hopping Zoteling (1)",nameDefault:"Hopping Zoteling",spoiler:"Only from Grey Prince Zote, Battle 2+",wiki:"Hopping_Zoteling"},ZotelingBuzzer:{name:"Winged Zoteling (1)",nameDefault:"Winged Zoteling",spoiler:"Only from Grey Prince Zote, Battle 1+",wiki:"Winged_Zoteling"},FlameBearerSmall:{name:"Grimmkin Novice (3)",nameDefault:"Grimmkin Novice",spoiler:"Greenpath, Crystal Peak, City of Tears",wiki:"Grimmkin_Novice"},FlameBearerMed:{name:"Grimmkin Master (4)",nameDefault:"Grimmkin Master",spoiler:"King's Pass, Resting Grounds, Kingdom's Edge",wiki:"Grimmkin_Master"},FlameBearerLarge:{name:"Grimmkin Nightmare (5)",nameDefault:"Grimmkin Nightmare",spoiler:"Fungal Core, Royal Waterways, Hive",wiki:"Grimmkin_Nightmare"},Grimm:{name:"Troupe Master Grimm (1)",nameDefault:"Troupe Master Grimm",spoiler:"Dirtmouth: collect 6 flames",wiki:"Grimm"},NightmareGrimm:{name:"Nightmare King (1)",nameDefault:"Nightmare King",spoiler:"Dirtmouth: collect 9 flames",wiki:"Nightmare_King"},BindingSeal:{name:"Seal of Binding (1)",nameDefault:"Seal of Binding",spoiler:"White Palace: Path of Pain completion",wiki:"Seal_of_Binding"},NailBros:{name:"Nailmasters Oro & Mato (1)",nameDefault:"Nailmasters Oro & Mato",spoiler:"Godhome: Pantheon of the Master",wiki:"Brothers_Oro_%26_Mato"},Paintmaster:{name:"Paintmaster Sheo (1)",nameDefault:"Paintmaster Sheo",spoiler:"Godhome: Pantheon of the Artist",wiki:"Paintmaster_Sheo"},Nailsage:{name:"Great Nailsage Sly (1)",nameDefault:"Great Nailsage Sly",spoiler:"Godhome: Pantheon of the Sage",wiki:"Great_Nailsage_Sly"},HollowKnightPrime:{name:"Pure Vessel (1)",nameDefault:"Pure Vessel",spoiler:"Godhome: Pantheon of the Knight",wiki:"Pure_Vessel"},GodseekerMask:{name:"Weathered Mask (1)",nameDefault:"Weathered Mask",spoiler:"Land of Storms: All Pantheons & Bindings",wiki:"Weathered_Mask"},VoidIdol_1:{name:"Void Idol Attuned (1)",nameDefault:"Void Idol Attuned",spoiler:"Hall of Gods: Defeat All (Attuned)",wiki:"Void_Idol"},VoidIdol_2:{name:"Void Idol Ascended (1)",nameDefault:"Void Idol Ascended",spoiler:"Hall of Gods: Defeat All (Ascended)",wiki:"Void_Idol"},VoidIdol_3:{name:"Void Idol Radiant (1)",nameDefault:"Void Idol Radiant",spoiler:"Hall of Gods: Defeat All (Radiant)",wiki:"Void_Idol"}}},charmNotches:{h2:"Charm Notches",id:"hk-charm-notches",description:"Charm Notches are required to equip Charms. They can be found in the game world, bought from Salubra or won from certain challenges.",percent:0,maxPercent:8,entries:{notchShroomOgres:{name:"Charm Notch #1",spoiler:"Fungal Wastes: Shroom Ogres room",wiki:"Category:Charms#Notches"},salubraNotch1:{name:"Charm Notch #2",spoiler:"Salubra: 120 Geo + 5 Charms found",wiki:"Category:Charms#Notches"},salubraNotch2:{name:"Charm Notch #3",spoiler:"Salubra: 500 Geo + 10 Charms found",wiki:"Category:Charms#Notches"},salubraNotch3:{name:"Charm Notch #4",spoiler:"Salubra: 900 Geo + 18 Charms found",wiki:"Category:Charms#Notches"},salubraNotch4:{name:"Charm Notch #5",spoiler:"Salubra: 1400 Geo + 25 Charms found",wiki:"Category:Charms#Notches"},colosseumBronzeCompleted:{name:"Charm Notch #6",spoiler:"Colosseum of Fools: Trial of the Warrior",wiki:"Category:Charms#Notches"},notchFogCanyon:{name:"Charm Notch #7",spoiler:"Fog Canyon: explosive eggs room",wiki:"Category:Charms#Notches"},gotGrimmNotch:{name:"Charm Notch #8",spoiler:"Dirtmouth: Troupe Leader Grimm",wiki:"Category:Charms#Notches"}}},grubs:{h2:"Grubs",id:"hk-grubs",description:"Creatures found trapped in glass jars throughout Hallownest. They can be freed from their jar after which the Grubfather grants a reward for each Grub that is saved. \n Note: Due to a bug in recent versions of Hollow Knight, Grubs #33 and #34 (The Collector/Tower of Love) are not marked as released correctly in the save file. As a workaround for this bug, when Grub #32 is detected as released, #33 and #34 are automatically marked as released too in this app.",percent:0,maxPercent:46,entries:{grub1:{name:"Grub #1",spoiler:"Forgotten Crossroads: Acid Corridor",id:"Grub Bottle",sceneName:"Crossroads_35",wiki:"Grub#Rewards_and_locations"},grub2:{name:"Grub #2",spoiler:"Forgotten Crossroads: Left of Dark Corridor",id:"Grub Bottle",sceneName:"Crossroads_03",wiki:"Grub#Rewards_and_locations"},grub3:{name:"Grub #3",spoiler:"Forgotten Crossroads: Above Ancestral Mound",id:"Grub Bottle",sceneName:"Crossroads_05",wiki:"Grub#Rewards_and_locations"},grub4:{name:"Grub #4",spoiler:"Forgotten Crossroads: Husk Guard Room",id:"Grub Bottle",sceneName:"Crossroads_48",wiki:"Grub#Rewards_and_locations"},grub5:{name:"Grub #5",spoiler:"Forgotten Crossroads: Spikes Room",id:"Grub Bottle",sceneName:"Crossroads_31",wiki:"Grub#Rewards_and_locations"},grub6:{name:"Grub #6",spoiler:"Greenpath: Cornifer Room",id:"Grub Bottle",sceneName:"Fungus1_06",wiki:"Grub#Rewards_and_locations"},grub7:{name:"Grub #7",spoiler:"Greenpath: Outside Hunter",id:"Grub Bottle",sceneName:"Fungus1_07",wiki:"Grub#Rewards_and_locations"},grub8:{name:"Grub #8",spoiler:"Greenpath: Outside Hornet",id:"Grub Bottle",sceneName:"Fungus1_21",wiki:"Grub#Rewards_and_locations"},grub9:{name:"Grub #9",spoiler:"Howling Cliffs: Baldur's Shell Room",id:"Grub Bottle",sceneName:"Fungus1_28",wiki:"Grub#Rewards_and_locations"},grub10:{name:"Grub #10",spoiler:"Fungal Wastes: Cornifer Room",id:"Grub Bottle",sceneName:"Fungus2_18",wiki:"Grub#Rewards_and_locations"},grub11:{name:"Grub #11",spoiler:"City of Tears: Above Lemm",id:"Grub Bottle (1)",sceneName:"Ruins1_05",wiki:"Grub#Rewards_and_locations"},grub12:{name:"Grub #12",spoiler:"Crystal Peak: Left of Dark Corridor",id:"Grub Bottle",sceneName:"Mines_04",wiki:"Grub#Rewards_and_locations"},grub13:{name:"Grub #13",spoiler:"Crystal Peak: Spiked Conveyor Belts",id:"Grub Bottle",sceneName:"Mines_03",wiki:"Grub#Rewards_and_locations"},grub14:{name:"Grub #14",spoiler:"Crystal Peak: Crystal Heart Gauntlet",id:"Grub Bottle",sceneName:"Mines_31",wiki:"Grub#Rewards_and_locations"},grub15:{name:"Grub #15",spoiler:"Crystal Peak: Crushers Below Top Bench",id:"Grub Bottle",sceneName:"Mines_19",wiki:"Grub#Rewards_and_locations"},grub16:{name:"Grub #16",spoiler:"City of Tears: Soul Master Rewards Room",id:"Grub Bottle",sceneName:"Ruins1_32",wiki:"Grub#Rewards_and_locations"},grub17:{name:"Grub #17",spoiler:"Resting Grounds: Crypts",id:"Grub Bottle",sceneName:"RestingGrounds_10",wiki:"Grub#Rewards_and_locations"},grub18:{name:"Grub #18",spoiler:"City of Tears: Guarded House Room in Main Hub",id:"Grub Bottle",sceneName:"Ruins_House_01",wiki:"Grub#Rewards_and_locations"},grub19:{name:"Grub #19",spoiler:"Crystal Peak: Crystallized Mound",id:"Grub Bottle",sceneName:"Mines_35",wiki:"Grub#Rewards_and_locations"},grub20:{name:"Grub #20",spoiler:"Crystal Peak: Down from Dirtmouth entrance",id:"Grub Bottle",sceneName:"Mines_16",wiki:"Grub#Rewards_and_locations"},grub21:{name:"Grub #21",spoiler:"Royal Waterways: Top Left Corridor Above Bench",id:"Grub Bottle",sceneName:"Waterways_04",wiki:"Grub#Rewards_and_locations"},grub22:{name:"Grub #22",spoiler:"Royal Waterways: Isma's Grove",id:"Grub Bottle",sceneName:"Waterways_13",wiki:"Grub#Rewards_and_locations"},grub23:{name:"Grub #23",spoiler:"Ancient Basin: Broken Vessel Top Room",id:"Grub Bottle",sceneName:"Abyss_19",wiki:"Grub#Rewards_and_locations"},grub24:{name:"Grub #24",spoiler:"Ancient Basin: Cloth/Pale Ore Room",id:"Grub Bottle",sceneName:"Abyss_17",wiki:"Grub#Rewards_and_locations"},grub25:{name:"Grub #25",spoiler:"Crystal Peak: Hallownest Crown Corridor",id:"Grub Bottle",sceneName:"Mines_24",wiki:"Grub#Rewards_and_locations"},grub26:{name:"Grub #26",spoiler:"Greenpath: Whispering Root Corridor",id:"Grub Bottle",sceneName:"Fungus1_13",wiki:"Grub#Rewards_and_locations"},grub27:{name:"Grub #27",spoiler:"Fog Canyon: Teacher's Archives Entrance",id:"Grub Bottle",sceneName:"Fungus3_47",wiki:"Grub#Rewards_and_locations"},grub28:{name:"Grub #28",spoiler:"Queen's Gardens: Main Arena Above Left Bench",id:"Grub Bottle",sceneName:"Fungus3_10",wiki:"Grub#Rewards_and_locations"},grub29:{name:"Grub #29",spoiler:"Queen's Gardens: Near White Lady",id:"Grub Bottle",sceneName:"Fungus3_48",wiki:"Grub#Rewards_and_locations"},grub30:{name:"Grub #30",spoiler:"Queen's Gardens: Upper Room near Greenpath",id:"Grub Bottle",sceneName:"Fungus3_22",wiki:"Grub#Rewards_and_locations"},grub31:{name:"Grub #31",spoiler:"City of Tears: Below King's Station",id:"Grub Bottle",sceneName:"Ruins2_07",wiki:"Grub#Rewards_and_locations"},grub32:{name:"Grub #32",spoiler:"City of Tears: The Collector Arena",id:"Grub Bottle",sceneName:"Ruins2_11",wiki:"Grub#Rewards_and_locations"},grub33:{name:"Grub #33",spoiler:"City of Tears: The Collector Arena",id:"Grub Bottle (1)",sceneName:"Ruins2_11",wiki:"Grub#Rewards_and_locations"},grub34:{name:"Grub #34",spoiler:"City of Tears: The Collector Arena",id:"Grub Bottle (2)",sceneName:"Ruins2_11",wiki:"Grub#Rewards_and_locations"},grub35:{name:"Grub #35",spoiler:"Kingdom's Edge: Below Camp Bench",id:"Grub Bottle",sceneName:"Deepnest_East_11",wiki:"Grub#Rewards_and_locations"},grub36:{name:"Grub #36",spoiler:"Kingdom's Edge: Below Nailmaster Oro",id:"Grub Bottle",sceneName:"Deepnest_East_14",wiki:"Grub#Rewards_and_locations"},grub37:{name:"Grub #37",spoiler:"Fungal Wastes: Spore Shroom Room",id:"Grub Bottle",sceneName:"Fungus2_20",wiki:"Grub#Rewards_and_locations"},grub38:{name:"Grub #38",spoiler:"City of Tears: Watcher's Spire Fourth Floor",id:"Grub Bottle",sceneName:"Ruins2_03",wiki:"Grub#Rewards_and_locations"},grub39:{name:"Grub #39",spoiler:"Deepnest: Right of Fungal Wastes Drop",id:"Grub Bottle",sceneName:"Deepnest_36",wiki:"Grub#Rewards_and_locations"},grub40:{name:"Grub #40",spoiler:"Deepnest: Left of Hot Spring",id:"Grub Bottle",sceneName:"Deepnest_03",wiki:"Grub#Rewards_and_locations"},grub41:{name:"Grub #41",spoiler:"Deepnest: Nosk Corridor",id:"Grub Bottle",sceneName:"Deepnest_31",wiki:"Grub#Rewards_and_locations"},grub42:{name:"Grub #42",spoiler:"Deepnest: Whispering Root Room",id:"Grub Bottle",sceneName:"Deepnest_39",wiki:"Grub#Rewards_and_locations"},grub43:{name:"Grub #43",spoiler:"Deepnest: Beast's Den",id:"Grub Bottle",sceneName:"Deepnest_Spider_Town",wiki:"Grub#Rewards_and_locations"},grub44:{name:"Grub #44",spoiler:"Royal Waterways: Kingdom's Edge Acid Corridor",id:"Grub Bottle",sceneName:"Waterways_14",wiki:"Grub#Rewards_and_locations"},grub45:{name:"Grub #45",spoiler:"The Hive: Kingdom's Edge Secret",id:"Grub Bottle",sceneName:"Hive_03",wiki:"Grub#Rewards_and_locations"},grub46:{name:"Grub #46",spoiler:"The Hive: Mask Shard Room",id:"Grub Bottle",sceneName:"Hive_04",wiki:"Grub#Rewards_and_locations"}}},whisperingRoots:{h2:"Whispering Roots",id:"hk-whispering-roots",description:"There are 15 Whispering Roots in the game, containing a total of 482 Essence. Whispering Root Pin from Iselda reveals the locations of every Whispering Root in an area after that area's Map has been purchased.",percent:0,maxPercent:15,entries:{whisperingRoot1:{name:"Whispering Root #1: 29 Orbs",spoiler:"Forgotten Crossroads: Right of Grubfather",id:"Dream Plant",sceneName:"Crossroads_07",wiki:"Whispering_Root"},whisperingRoot2:{name:"Whispering Root #2: 42 Orbs",spoiler:"Forgotten Crossroads: Ancestral Mound",id:"Dream Plant",sceneName:"Crossroads_ShamanTemple",wiki:"Whispering_Root"},whisperingRoot3:{name:"Whispering Root #3: 18 Orbs",spoiler:"Fungal Wastes: Above Mantis Village",id:"Dream Plant",sceneName:"Fungus2_17",wiki:"Whispering_Root"},whisperingRoot4:{name:"Whispering Root #4: 28 Orbs",spoiler:"City of Tears: Below Stag Station",id:"Dream Plant",sceneName:"Ruins1_17",wiki:"Whispering_Root"},whisperingRoot5:{name:"Whispering Root #5: 46 Orbs",spoiler:"Howling Cliffs: Big Main Area",id:"Dream Plant",sceneName:"Cliffs_01",wiki:"Whispering_Root"},whisperingRoot6:{name:"Whispering Root #6: 21 Orbs",spoiler:"Crystal Peak: Hallownest Crown Big Area",id:"Dream Plant",sceneName:"Mines_23",wiki:"Whispering_Root"},whisperingRoot7:{name:"Whispering Root #7: 20 Orbs",spoiler:"Resting Grounds: Right of Seer, Main Area",id:"Dream Plant",sceneName:"RestingGrounds_05",wiki:"Whispering_Root"},whisperingRoot8:{name:"Whispering Root #8: 34 Orbs",spoiler:"Resting Grounds: Spirit's Glade",id:"Dream Plant",sceneName:"RestingGrounds_08",wiki:"Whispering_Root"},whisperingRoot9:{name:"Whispering Root #9: 35 Orbs",spoiler:"City of Tears: Broken Elevator",id:"Dream Plant",sceneName:"Abyss_01",wiki:"Whispering_Root"},whisperingRoot10:{name:"Whispering Root #10: 44 Orbs",spoiler:"Greenpath: Right of Queen's Gardens",id:"Dream Plant",sceneName:"Fungus1_13",wiki:"Whispering_Root"},whisperingRoot11:{name:"Whispering Root #11: 20 Orbs",spoiler:"Fungal Wastes: Left of Leg Eater",id:"Dream Plant",sceneName:"Fungus2_33",wiki:"Whispering_Root"},whisperingRoot12:{name:"Whispering Root #12: 29 Orbs",spoiler:"Queen's Gardens: Below Right Bench",id:"Dream Plant",sceneName:"Fungus3_11",wiki:"Whispering_Root"},whisperingRoot13:{name:"Whispering Root #13: 51 Orbs",spoiler:"Kingdom's Edge: Right of Tower of Love",id:"Dream Plant",sceneName:"Deepnest_East_07",wiki:"Whispering_Root"},whisperingRoot14:{name:"Whispering Root #14: 45 Orbs",spoiler:"Deepnest: Below Queen's Gardens",id:"Dream Plant",sceneName:"Deepnest_39",wiki:"Whispering_Root"},whisperingRoot15:{name:"Whispering Root #15: 20 Orbs",spoiler:"The Hive: Right of Bench",id:"Dream Plant",sceneName:"Hive_02",wiki:"Whispering_Root"}}},relicsWanderersJournal:{h2:"Relics - Wanderer's Journal",id:"hk-relics-journal",description:"Tablets found commonly throughout Hallownest. They are always found next to corpses that are assumed to be the authors of the journal. Can be sold to Relic Seeker Lemm for 200 Geo. \n 14 x 200 = 2800 Geo Total.",percent:0,maxPercent:14,entries:{wanderersJournal1:{name:"Wanderer's Journal #1",spoiler:"Greenpath: Room Above Fog Canyon",id:"Shiny Item",sceneName:"Fungus1_11",wiki:"Wanderer%27s_Journal"},wanderersJournal2:{name:"Wanderer's Journal #2",spoiler:"Greenpath: Right of Stag Station",id:"Shiny Item",sceneName:"Fungus1_22",wiki:"Wanderer%27s_Journal"},wanderersJournal3:{name:"Wanderer's Journal #3",spoiler:"Fungal Wastes: Below Shrumal Ogres",id:"Shiny Item",sceneName:"Fungus2_04",wiki:"Wanderer%27s_Journal"},wanderersJournal4:{name:"Wanderer's Journal #4",spoiler:"Fungal Wastes: Room Above Mantis Village",id:"Shiny Item",sceneName:"Fungus2_17",wiki:"Wanderer%27s_Journal"},wanderersJournal5:{name:"Wanderer's Journal #5",spoiler:"City of Tears: City Storerooms",id:"Shiny Item",sceneName:"Ruins1_28",wiki:"Wanderer%27s_Journal"},wanderersJournal6:{name:"Wanderer's Journal #6",spoiler:"Howling Cliffs: Main Open Air Area",id:"Shiny Item (1)",sceneName:"Cliffs_01",wiki:"Wanderer%27s_Journal"},wanderersJournal7:{name:"Wanderer's Journal #7",spoiler:"Crystal Peak: Right Tall Room",id:"Shiny Item (1)",sceneName:"Mines_20",wiki:"Wanderer%27s_Journal"},wanderersJournal8:{name:"Wanderer's Journal #8",spoiler:"Resting Grounds: Crypts",id:"Shiny Item",sceneName:"RestingGrounds_10",wiki:"Wanderer%27s_Journal"},wanderersJournal9:{name:"Wanderer's Journal #9",spoiler:"City of Tears: Room Above King's Station",id:"Shiny Item",sceneName:"Ruins2_05",wiki:"Wanderer%27s_Journal"},wanderersJournal10:{name:"Wanderer's Journal #10",spoiler:"Ancient Basin: Broken Bridge",id:"Shiny Item",sceneName:"Abyss_02",wiki:"Wanderer%27s_Journal"},wanderersJournal11:{name:"Wanderer's Journal #11",spoiler:"City of Tears: Pleasure House Elevator",id:"Shiny Item (1)",sceneName:"Ruins_Elevator",wiki:"Wanderer%27s_Journal"},wanderersJournal12:{name:"Wanderer's Journal #12",spoiler:"Kingdom's Edge: Whispering Root Area",id:"Shiny Item",sceneName:"Deepnest_East_07",wiki:"Wanderer%27s_Journal"},wanderersJournal13:{name:"Wanderer's Journal #13",spoiler:"Kingdom's Edge: Camp Bench",id:"Shiny Item",sceneName:"Deepnest_East_13",wiki:"Wanderer%27s_Journal"},wanderersJournal14:{name:"Wanderer's Journal #14",spoiler:"Kingdom's Edge: Left of Markoth",id:"Shiny Item",sceneName:"Deepnest_East_18",wiki:"Wanderer%27s_Journal"}}},relicsHallownestSeal:{h2:"Relics - Hallownest Seal",id:"hk-relics-seal",description:'Official symbols of the Pale King and the Five Great Knights. The seals can be found in various locations throughout the world. Can be sold to Relic Seeker Lemm for 450 Geo. Seal #16 is missable when a player enters the Beast\'s Den through the secret path without being trapped by using the bench. \n 17 x 450 = 7650 Geo Total.',percent:0,maxPercent:17,entries:{hallownestSeal1:{name:"Hallownest Seal #1",spoiler:"Forgotten Crossroads: Inside the Well",id:"Shiny Item",sceneName:"Crossroads_01",wiki:"Hallownest_Seal"},hallownestSeal2:{name:"Hallownest Seal #2",spoiler:"Fungal Wastes: Willoh's Room above Queen's Station",id:"Shiny Item",sceneName:"Fungus2_34",wiki:"Hallownest_Seal"},hallownestSeal3:{name:"Hallownest Seal #3",spoiler:"Greenpath: Acid Bridge",id:"Shiny Item",sceneName:"Fungus1_10",wiki:"Hallownest_Seal"},hallownestSeal4:{name:"Hallownest Seal #4",spoiler:"Fungal Wastes: Right of Queen's Station",id:"Shiny Item",sceneName:"Fungus2_03",wiki:"Hallownest_Seal"},hallownestSeal5:{name:"Hallownest Seal #5",spoiler:"City of Tears: Open Air Rafters",id:"Shiny Item",sceneName:"Ruins1_03",wiki:"Hallownest_Seal"},hallownestSeal6:{name:"Hallownest Seal #6",spoiler:"City of Tears: Soul Master Rewards Room",id:"Shiny Item",sceneName:"Ruins1_32",wiki:"Hallownest_Seal"},hallownestSeal7:{name:"Hallownest Seal #7",spoiler:"Resting Grounds: Crypts",id:"Shiny Item (1)",sceneName:"RestingGrounds_10",wiki:"Hallownest_Seal"},hallownestSeal8:{name:"Hallownest Seal #8",spoiler:"City of Tears: King's Station Stag Station",id:"Shiny Item",sceneName:"Ruins2_08",wiki:"Hallownest_Seal"},hallownestSeal9:{name:"Hallownest Seal #9",spoiler:"Grubfather: 23 Grubs rescued",id:"Shiny Item Relic2",sceneName:"Crossroads_38",wiki:"Hallownest_Seal"},hallownestSeal10:{name:"Hallownest Seal #10",spoiler:"Fog Canyon: Right Tall Area",id:"Shiny Item",sceneName:"Fungus3_26",wiki:"Hallownest_Seal"},hallownestSeal11:{name:"Hallownest Seal #11",spoiler:"Fog Canyon: Lifeblood Cocoon Room",id:"Shiny Item",sceneName:"Fungus3_30",wiki:"Hallownest_Seal"},hallownestSeal12:{name:"Hallownest Seal #12",spoiler:"Queen's Gardens: Outside White Lady",id:"Shiny Item",sceneName:"Fungus3_48",wiki:"Hallownest_Seal"},hallownestSeal13:{name:"Hallownest Seal #13",spoiler:"Fungal Wastes: Mantis Lords Reward Room",id:"Shiny Item",sceneName:"Fungus2_31",wiki:"Hallownest_Seal"},hallownestSeal14:{name:"Hallownest Seal #14",spoiler:"City of Tears: Watcher's Spire Fourth Floor",id:"Shiny Item",sceneName:"Ruins2_03",wiki:"Hallownest_Seal"},hallownestSeal15:{name:"Hallownest Seal #15",spoiler:"Deepnest: Room Above Lower Cornifer",id:"Shiny Item",sceneName:"Deepnest_16",wiki:"Hallownest_Seal"},hallownestSeal16:{name:"Hallownest Seal #16 (missable)",spoiler:"Deepnest: Beast's Den",id:"Shiny Item",sceneName:"Deepnest_Spider_Town",wiki:"Hallownest_Seal"},hallownestSeal17:{name:"Hallownest Seal #17",spoiler:"Seer: 100 Essence collected",id:"dreamReward1",sceneName:"",wiki:"Hallownest_Seal"}}},relicsKingsIdol:{h2:"Relics - King's Idol",id:"hk-relics-idol",description:"Idols made of a mysterious white metal that depict the Pale King. They are found in various locations throughout Hallownest. Can be sold to Relic Seeker Lemm for 800 Geo. \n 8 x 800 = 6400 Geo Total.",percent:0,maxPercent:8,entries:{kingsIdol1:{name:"King's Idol #1",spoiler:"Howling Cliffs: Main Open Air Area",id:"Shiny Item",sceneName:"Cliffs_01",wiki:"King%27s_Idol"},kingsIdol2:{name:"King's Idol #2",spoiler:"Crystal Peak: Cornifer Room, use Monarch Wings",id:"Shiny Item Stand",sceneName:"Mines_30",wiki:"King%27s_Idol"},kingsIdol3:{name:"King's Idol #3",spoiler:"Resting Grounds: Spirit's Glade, Waterfall",id:"Shiny Item",sceneName:"RestingGrounds_08",wiki:"King%27s_Idol"},kingsIdol4:{name:"King's Idol #4",spoiler:"Royal Waterways: Dung Defender's Cave",id:"Shiny Item Stand",sceneName:"Waterways_15",wiki:"King%27s_Idol"},kingsIdol5:{name:"King's Idol #5",spoiler:"Kingdom's Edge: Great Hopper Below Colosseum Entrance",id:"Shiny Item",sceneName:"Deepnest_East_08",wiki:"King%27s_Idol"},kingsIdol6:{name:"King's Idol #6",spoiler:"Deepnest: Zote Arena Left Side",id:"Shiny Item",sceneName:"Deepnest_33",wiki:"King%27s_Idol"},kingsIdol7:{name:"King's Idol #7",spoiler:"Grubfather: 38 Grubs rescued",id:"Shiny Item Relic3",sceneName:"Crossroads_38",wiki:"King%27s_Idol"},kingsIdol8:{name:"King's Idol #8",spoiler:"Kingdom's Edge: Pale Lurker Room",id:"Shiny Item",sceneName:"GG_Lurker",wiki:"King%27s_Idol"}}},relicsArcaneEgg:{h2:"Relics - Arcane Egg",id:"hk-relics-egg",description:'Jet black stone eggs originating from a civilisation that existed before the Kingdom of Hallownest was founded. Egg #4 is missable when the player will go right instead of left in the Lifeblood Core room in the Abyss and will touch the Charm. Can be sold to Relic Seeker Lemm for 1200 Geo. \n 4 x 1200 = 4800 Geo Total.',percent:0,maxPercent:4,entries:{arcaneEgg1:{name:"Arcane Egg #1",spoiler:"The Abyss: Shade Cloak Room",id:"Shiny Item",sceneName:"Abyss_10",wiki:"Arcane_Egg"},arcaneEgg2:{name:"Arcane Egg #2",spoiler:"Seer: 1200 Essence",id:"dreamReward6",sceneName:"",wiki:"Arcane_Egg"},arcaneEgg3:{name:"Arcane Egg #3",spoiler:"The Abyss: Birthplace, requires Kingsoul",id:"Shiny Item",sceneName:"Abyss_15",wiki:"Arcane_Egg"},arcaneEgg4:{name:"Arcane Egg #4 (missable)",spoiler:"The Abyss: Lifeblood Core Room",id:"Shiny Item (1)",sceneName:"Abyss_08",wiki:"Abyss#Lifeblood_Chamber"}}},rancidEggs:{h2:"Rancid Eggs",id:"hk-rancid-eggs",description:'A collectable item recovered from the corpses of Bluggsacs. Either an already-dead Bluggsac has to be found or a living one has to be killed to make it drop a Rancid Egg. A certain NPC in the game may be very interested in these... Egg #16 is missable when a player enters the Beast\'s Den through the secret path without being trapped by using the bench.',percent:0,maxPercent:21,entries:{rancidEgg1:{name:"Rancid Egg #1",spoiler:"Fungal Wastes: Fungal Core Upper Room",id:"Shiny Item",sceneName:"Fungus2_29",wiki:"Rancid_Egg"},rancidEgg2:{name:"Rancid Egg #2",spoiler:"City of Tears: Room Above Lemm",id:"Shiny Item",sceneName:"Ruins1_05",wiki:"Rancid_Egg"},rancidEgg3:{name:"Rancid Egg #3",spoiler:"Crystal Peak: Dark Bench Room",id:"Shiny Item",sceneName:"Mines_29",wiki:"Rancid_Egg"},rancidEgg4:{name:"Rancid Egg #4",spoiler:"Resting Grounds: Blue Lake",id:"Shiny Item(Clone)",sceneName:"Crossroads_50",wiki:"Rancid_Egg"},rancidEgg5:{name:"Rancid Egg #5",spoiler:"Crystal Peak: Desolate Dive Entrance",id:"Shiny Item(Clone)",sceneName:"Mines_01",wiki:"Rancid_Egg"},rancidEgg6:{name:"Rancid Egg #6",spoiler:"Royal Waterways: Mask Shard Room",id:"Shiny Item",sceneName:"Waterways_04b",wiki:"Rancid_Egg"},rancidEgg7:{name:"Rancid Egg #7",spoiler:"Royal Waterways: Hidden Grub Room",id:"Shiny Item(Clone)",sceneName:"Waterways_04",wiki:"Rancid_Egg"},rancidEgg8:{name:"Rancid Egg #8",spoiler:"Royal Waterways: Left of Isma's Grove",id:"Shiny Item(Clone)",sceneName:"Waterways_07",wiki:"Rancid_Egg"},rancidEgg9:{name:"Rancid Egg #9",spoiler:"Greenpath: Outside Sheo's Hut",id:"Shiny Item",sceneName:"Fungus1_15",wiki:"Rancid_Egg"},rancidEgg10:{name:"Rancid Egg #10",spoiler:"Grubfather: 16 Grubs rescued",id:"Shiny Item Rancid Egg",sceneName:"Crossroads_38",wiki:"Rancid_Egg"},rancidEgg11:{name:"Rancid Egg #11",spoiler:"Queen's Gardens: Entrance from Fog Canyon",id:"Shiny Item(Clone)",sceneName:"Fungus3_34",wiki:"Rancid_Egg"},rancidEgg12:{name:"Rancid Egg #12",spoiler:"City of Tears: Pleasure House Elevator",id:"Shiny Item",sceneName:"Ruins_Elevator",wiki:"Rancid_Egg"},rancidEgg13:{name:"Rancid Egg #13",spoiler:"Kingdom's Edge: Whispering Root Area",id:"Shiny Item (1)",sceneName:"Deepnest_East_07",wiki:"Rancid_Egg"},rancidEgg14:{name:"Rancid Egg #14",spoiler:"Deepnest: Weaver's Den",id:"Shiny Item",sceneName:"Deepnest_45_v02",wiki:"Rancid_Egg"},rancidEgg15:{name:"Rancid Egg #15",spoiler:"Deepnest: Whispering Root Big Area Left Side",id:"Shiny Item(Clone)",sceneName:"Deepnest_39",wiki:"Rancid_Egg"},rancidEgg16:{name:"Rancid Egg #16 (missable)",spoiler:"Deepnest: Beast's Den",id:"Shiny Item(Clone)",sceneName:"Deepnest_Spider_Town",wiki:"Rancid_Egg"},rancidEgg17:{name:"Rancid Egg #17",spoiler:"Crystal Peak: Right Tall Room",id:"Shiny Item(Clone)",sceneName:"Mines_20",wiki:"Rancid_Egg"},rancidEgg18:{name:"Rancid Egg #18",spoiler:"Royal Waterways: Main Bench Area",id:"Shiny Item(Clone)",sceneName:"Waterways_02",wiki:"Rancid_Egg"},rancidEgg19:{name:"Rancid Egg #19",spoiler:"Kingdom's Edge: Below Nailmaster Oro",id:"Shiny Item(Clone)",sceneName:"Deepnest_East_14",wiki:"Rancid_Egg"},rancidEgg20:{name:"Rancid Egg #20",spoiler:"Sly: 60 Geo",id:"slyRancidEgg",sceneName:"",wiki:"Rancid_Egg"},rancidEgg21:{name:"Rancid Egg #21",spoiler:"Royal Waterways: Tuk's free Egg",spoilerNormal:"Royal Waterways: Tuk, with Defender's Crest",spoilerSteelSoul:"Royal Waterways: Inspect Tuk",idPlayerData:"tukDungEgg",id:"Shiny Item",sceneName:"Waterways_03",wiki:"Tuk"}}},items:{h2:"Items",id:"hk-items",description:"Certain acquirable items, map markers or collectibles in the game that won't fit any specific category. Using custom map pins to mark interesting locations on the map is very useful while playing Hollow Knight. 1440 Geo is needed to buy all map pins from Iselda.",percent:0,maxPercent:21,entries:{hasQuill:{name:"Quill",spoiler:"120 Geo: Iselda's Shop, updates map with explored areas",wiki:"Map_and_Quill#Mapping_Tools"},hasPinBench:{name:"Map Pin: Bench",spoiler:"100 Geo: Iselda's Shop",wiki:"Bench_(Hollow_Knight)"},hasPinShop:{name:"Map Pin: Vendor",spoiler:"100 Geo: Iselda's Shop",wiki:"Category:NPCs_(Hollow_Knight)#Merchants"},hasPinCocoon:{name:"Map Pin: Lifeblood Cocoon",spoiler:"100 Geo: Iselda's Shop",wiki:"Lifeblood_Cocoon"},hasPinSpa:{name:"Map Pin: Hot Springs",spoiler:"100 Geo: Iselda's Shop",wiki:"Hot_Springs"},hasPinStag:{name:"Map Pin: Stag Station",spoiler:"100 Geo: Iselda's Shop, unlock first Station",wiki:"Stag_Station"},hasPinGhost:{name:"Map Pin: Warrior's Grave",spoiler:"180 Geo: Iselda's Shop, acquire Dream Nail",wiki:"Warrior_Dreams"},hasPinDreamPlant:{name:"Map Pin: Whispering Root",spoiler:"150 Geo: Iselda's Shop, acquire Dream Nail",wiki:"Whispering_Root"},hasPinTram:{name:"Map Pin: Tram",spoiler:"100 Geo: Iselda's Shop, acquire Tram Pass",wiki:"Tram"},hasMarker_r:{name:"Map Pin: Shell Marker",spoiler:"100 Geo: Iselda's Shop",wiki:"Iselda#Map_Pins"},hasMarker_b:{name:"Map Pin: Scarab Marker",spoiler:"100 Geo: Iselda's Shop",wiki:"Iselda#Map_Pins"},hasMarker_y:{name:"Map Pin: Token Marker",spoiler:"100 Geo: Iselda's Shop, acquire Mothwing Cloak",wiki:"Iselda#Map_Pins"},hasMarker_w:{name:"Map Pin: Gleaming Marker",spoiler:"210 Geo: Iselda, acquire Mothwing Cloak",wiki:"Iselda#Map_Pins"},hasPinGuardian:{name:"Map Pin: Dreamers",spoiler:"Resting Grounds: Inspect the shrine",wiki:"Dreamers"},hasPinBlackEgg:{name:"Map Pin: Temple of the Black Egg",spoiler:"City of Tears: Inspect fountain",wiki:"Temple_of_the_Black_Egg"},hasPinGrub:{name:"Collector's Map",spoiler:"Kingdom's Edge: Tower of Love, Love Key",wiki:"Map_and_Quill#The_Collector's_Map"},cityCrest:{name:"City Crest",spoiler:"Forgotten Crossroads: False Knight Reward",id:"Shiny Item",sceneName:"Crossroads_10",wiki:"City_Crest"},hasDreamGate:{name:"Dreamgate",spoiler:"Seer: 900 Essence",wiki:"Dreamgate"},fragileGreed_unbreakable:{name:"Unbreakable Greed",spoiler:"Divine: Fragile Greed + 9000 Geo",wiki:"Divine#Unbreakable_Charms"},fragileHealth_unbreakable:{name:"Unbreakable Heart",spoiler:"Divine: Fragile Heart + 12000 Geo",wiki:"Divine#Unbreakable_Charms"},fragileStrength_unbreakable:{name:"Unbreakable Strength",spoiler:"Divine: Fragile Strength + 15000 Geo",wiki:"Divine#Unbreakable_Charms"}}},geoChests:{h2:"Geo Chests",id:"hk-geo-chests",description:"All Geo Chests in the game, including one empty one and one with 1 Geo. A total of 2380 Geo can be collected from Geo Chests. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Chests.",percent:0,maxPercent:14,entries:{chest1:{name:"Chest #1: 200 Geo",spoiler:"Forgotten Crossroads: False Knight Reward",id:"Chest",sceneName:"Crossroads_10",wiki:"Geo#How_to_Acquire"},chest2:{name:"Chest #2: 1 Geo",spoiler:"Howling Cliffs: Baldur's Shell Room",id:"Chest",sceneName:"Fungus1_28",wiki:"Geo#How_to_Acquire"},chest3:{name:"Chest #3: 78 Geo",spoiler:"Crystal Peak: Crushers Room",id:"Chest",sceneName:"Mines_37",wiki:"Geo#How_to_Acquire"},chest4:{name:"Chest #4: 380 Geo",spoiler:"City of Tears: Soul Master Reward",id:"Chest",sceneName:"Ruins1_32",wiki:"Geo#How_to_Acquire"},chest5:{name:"Chest #5: 150 Geo",spoiler:"Resting Grounds: Crypts",id:"Chest",sceneName:"RestingGrounds_10",wiki:"Geo#How_to_Acquire"},chest6:{name:"Chest #6: 85 Geo",spoiler:"Greenpath: Whispering Root Room",id:"Chest",sceneName:"Fungus1_13",wiki:"Geo#How_to_Acquire"},chest7:{name:"Chest #7: 620 Geo",spoiler:"Fungal Wastes: Mantis Lords Reward",id:"Mantis Chest (2)",sceneName:"Fungus2_31",wiki:"Geo#How_to_Acquire"},chest8:{name:"Chest #8: 655 Geo",spoiler:"City of Tears: Watcher Knight Reward",id:"Chest",sceneName:"Ruins2_03",wiki:"Geo#How_to_Acquire"},chest9:{name:"Chest #9: 160 Geo",spoiler:"Deepnest: Weaver's Den, Secret Room",id:"Chest",sceneName:"Deepnest_45_v02",wiki:"Geo#How_to_Acquire"},chest10:{name:"Chest #10: 8 Geo",spoiler:"Royal Waterways: Junk Pit",id:"Chest",sceneName:"GG_Waterways",wiki:"Geo#How_to_Acquire"},chest11:{name:"Chest #11: 8 Geo",spoiler:"Royal Waterways: Junk Pit",id:"Chest (1)",sceneName:"GG_Waterways",wiki:"Geo#How_to_Acquire"},chest12:{name:"Chest #12: 25 Geo",spoiler:"Royal Waterways: Junk Pit",id:"Chest (2)",sceneName:"GG_Waterways",wiki:"Geo#How_to_Acquire"},chest13:{name:"Chest #13: 0 Geo",spoiler:"Royal Waterways: Junk Pit",id:"Chest (3)",sceneName:"GG_Waterways",wiki:"Geo#How_to_Acquire"},chest14:{name:"Chest #14: 10 Geo",spoiler:"Royal Waterways: Junk Pit",id:"Chest (4)",sceneName:"GG_Waterways",wiki:"Geo#How_to_Acquire"}}},geoRocks:{h2:"Geo Rocks",id:"hk-geo-rocks",description:"All Geo Rocks that can be found in the game. Only fully destroyed Geo Rocks are counted. Partially hit Geo Rocks won't be counted. Equipping the Fragile Greed Charm won't increase the amount of Geo found inside Geo Rocks. I have no idea how much Geo can be collected from all Geo Rocks. If you know, let me know, and you will be featured here.",percent:0,maxPercent:205,entries:{geoRock1:{name:"Geo Rock #1",spoiler:"King's Pass",id:"Geo Rock 4",sceneName:"Tutorial_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock2:{name:"Geo Rock #2",spoiler:"King's Pass",id:"Geo Rock 1",sceneName:"Tutorial_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock3:{name:"Geo Rock #3",spoiler:"King's Pass",id:"Geo Rock 3",sceneName:"Tutorial_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock4:{name:"Geo Rock #4",spoiler:"King's Pass",id:"Geo Rock 2",sceneName:"Tutorial_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock5:{name:"Geo Rock #5",spoiler:"King's Pass",id:"Geo Rock 5",sceneName:"Tutorial_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock6:{name:"Geo Rock #6",spoiler:"Forgotten Crossroads: Well",id:"Geo Rock 2",sceneName:"Crossroads_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock7:{name:"Geo Rock #7",spoiler:"Forgotten Crossroads: Gruzzer Vertical Room",id:"Geo Rock 1",sceneName:"Crossroads_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock8:{name:"Geo Rock #8",spoiler:"Forgotten Crossroads: Gruzzer Vertical Room",id:"Geo Rock 1 (2)",sceneName:"Crossroads_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock9:{name:"Geo Rock #9",spoiler:"Forgotten Crossroads: Gruzzer Vertical Room",id:"Geo Rock 1 (1)",sceneName:"Crossroads_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock10:{name:"Geo Rock #10",spoiler:"Forgotten Crossroads: Corridor to Acid Grub",id:"Geo Rock 2",sceneName:"Crossroads_12",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock11:{name:"Geo Rock #11",spoiler:"Forgotten Crossroads: Aspid Arena",id:"Geo Rock 1 (3)",sceneName:"Crossroads_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock12:{name:"Geo Rock #12",spoiler:"Forgotten Crossroads: Aspid Arena",id:"Geo Rock 1 (2)",sceneName:"Crossroads_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock13:{name:"Geo Rock #13",spoiler:"Forgotten Crossroads: Aspid Arena",id:"Geo Rock 1",sceneName:"Crossroads_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock14:{name:"Geo Rock #14",spoiler:"Forgotten Crossroads: Aspid Arena",id:"Geo Rock 1 (1)",sceneName:"Crossroads_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock15:{name:"Geo Rock #15",spoiler:"Forgotten Crossroads: Fungal Wastes Entrance",id:"Geo Rock 1",sceneName:"Crossroads_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock16:{name:"Geo Rock #16",spoiler:"Forgotten Crossroads: Fungal Wastes Entrance",id:"Geo Rock 2",sceneName:"Crossroads_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock17:{name:"Geo Rock #17",spoiler:"Forgotten Crossroads: Fungal Wastes Entrance",id:"Geo Rock 3",sceneName:"Crossroads_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock18:{name:"Geo Rock #18",spoiler:"Forgotten Crossroads: Goam Mask Shard",id:"Geo Rock 2",sceneName:"Crossroads_13",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock19:{name:"Geo Rock #19",spoiler:"Forgotten Crossroads: Goam Mask Shard",id:"Geo Rock 1",sceneName:"Crossroads_13",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock20:{name:"Geo Rock #20",spoiler:"Forgotten Crossroads: Right of Mask Shard",id:"Geo Rock 2",sceneName:"Crossroads_42",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock21:{name:"Geo Rock #21",spoiler:"Forgotten Crossroads: Right of Mask Shard",id:"Geo Rock 1",sceneName:"Crossroads_42",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock22:{name:"Geo Rock #22",spoiler:"Forgotten Crossroads: Before Gruz Mother",id:"Geo Rock 1",sceneName:"Crossroads_19",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock23:{name:"Geo Rock #23",spoiler:"Forgotten Crossroads: Outside False Knight",id:"Geo Rock 1",sceneName:"Crossroads_21",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock24:{name:"Geo Rock #24",spoiler:"Forgotten Crossroads: Crystal Peak Dark Toll",id:"Geo Rock 2 (1)",sceneName:"Mines_33",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock25:{name:"Geo Rock #25",spoiler:"Forgotten Crossroads: Crystal Peak Dark Toll",id:"Geo Rock 2",sceneName:"Mines_33",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock26:{name:"Geo Rock #26",spoiler:"Forgotten Crossroads: Crystal Peak Dark Toll",id:"Geo Rock 2 (2)",sceneName:"Mines_33",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock27:{name:"Geo Rock #27",spoiler:"Forgotten Crossroads: Above Lever",id:"Geo Rock 2",sceneName:"Crossroads_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock28:{name:"Geo Rock #28",spoiler:"Forgotten Crossroads: Central Grub",id:"Geo Rock 1",sceneName:"Crossroads_05",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock29:{name:"Geo Rock #29",spoiler:"Forgotten Crossroads: Outside Tram",id:"Geo Rock 1",sceneName:"Crossroads_27",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock30:{name:"Geo Rock #30",spoiler:"Forgotten Crossroads: Tram",id:"Geo Rock 1",sceneName:"Crossroads_46",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock31:{name:"Geo Rock #31",spoiler:"Forgotten Crossroads: False Knight Arena",id:"Geo Rock 1",sceneName:"Crossroads_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock32:{name:"Geo Rock #32",spoiler:"Forgotten Crossroads: Ancestral Mound",id:"Geo Rock 2",sceneName:"Crossroads_ShamanTemple",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock33:{name:"Geo Rock #33",spoiler:"Forgotten Crossroads: Ancestral Mound",id:"Geo Rock 2 (1)",sceneName:"Crossroads_ShamanTemple",hitsLeft:"5",wiki:"Geo#How_to_Acquire"},geoRock34:{name:"Geo Rock #34",spoiler:"Forgotten Crossroads: Ancestral Mound",id:"Geo Rock 1",sceneName:"Crossroads_ShamanTemple",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock35:{name:"Geo Rock #35",spoiler:"Greenpath: Entrance",id:"Geo Rock Green Path 01",sceneName:"Fungus1_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock36:{name:"Geo Rock #36",spoiler:"Greenpath: Waterfall Bench",id:"Geo Rock Green Path 01",sceneName:"Fungus1_01b",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock37:{name:"Geo Rock #37",spoiler:"Greenpath: First Hornet Sighting",id:"Geo Rock Green Path 01",sceneName:"Fungus1_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock38:{name:"Geo Rock #38",spoiler:"Greenpath: First Hornet Sighting",id:"Geo Rock Green Path 01 (1)",sceneName:"Fungus1_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock39:{name:"Geo Rock #39",spoiler:"Greenpath: Outside Hunter",id:"Geo Rock Green Path 01",sceneName:"Fungus1_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock40:{name:"Geo Rock #40",spoiler:"Greenpath: Above Sanctuary Bench",id:"Geo Rock Green Path 01",sceneName:"Fungus1_19",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock41:{name:"Geo Rock #41",spoiler:"Greenpath: Acid Bridge",id:"Geo Rock Green Path 01",sceneName:"Fungus1_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock42:{name:"Geo Rock #42",spoiler:"Greenpath: Outside Stag Station",id:"Geo Rock Green Path 01 (1)",sceneName:"Fungus1_22",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock43:{name:"Geo Rock #43",spoiler:"Greenpath: Outside Stag Station",id:"Geo Rock Green Path 01",sceneName:"Fungus1_22",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock44:{name:"Geo Rock #44",spoiler:"Greenpath: Toll",id:"Geo Rock Green Path 01",sceneName:"Fungus1_31",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock45:{name:"Geo Rock #45",spoiler:"Greenpath: Toll",id:"Geo Rock 1 (1)",sceneName:"Fungus1_31",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock46:{name:"Geo Rock #46",spoiler:"Greenpath: Toll",id:"Geo Rock 2 (1)",sceneName:"Fungus1_31",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock47:{name:"Geo Rock #47",spoiler:"Greenpath: Storerooms",id:"Geo Rock Green Path 01 (2)",sceneName:"Fungus1_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock48:{name:"Geo Rock #48",spoiler:"Greenpath: Storerooms",id:"Geo Rock Green Path 01 (1)",sceneName:"Fungus1_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock49:{name:"Geo Rock #49",spoiler:"Greenpath: Storerooms",id:"Geo Rock Green Path 01",sceneName:"Fungus1_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock50:{name:"Geo Rock #50",spoiler:"Greenpath: Outside Thorns",id:"Geo Rock 2",sceneName:"Fungus1_05",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock51:{name:"Geo Rock #51",spoiler:"Howling Cliffs: Baldur's Shell",id:"Geo Rock 2",sceneName:"Fungus1_28",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock52:{name:"Geo Rock #52",spoiler:"Howling Cliffs: Baldur's Shell",id:"Geo Rock 1 (2)",sceneName:"Fungus1_28",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock53:{name:"Geo Rock #53",spoiler:"Greenpath: Outside Hornet",id:"Geo Rock Green Path 02",sceneName:"Fungus1_21",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock54:{name:"Geo Rock #54",spoiler:"Greenpath: Outside Hornet",id:"Geo Rock Green Path 02 (1)",sceneName:"Fungus1_21",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock55:{name:"Geo Rock #55",spoiler:"Greenpath: Outside Hornet",id:"Geo Rock Green Path 02 (2)",sceneName:"Fungus1_21",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock56:{name:"Geo Rock #56",spoiler:"Greenpath: Hornet",id:"Geo Rock Green Path 01",sceneName:"Fungus1_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock57:{name:"Geo Rock #57",spoiler:"Greenpath: Massive Moss Charger",id:"Geo Rock Green Path 01",sceneName:"Fungus1_29",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock58:{name:"Geo Rock #58",spoiler:"Greenpath: Massive Moss Charger Corridor",id:"Geo Rock Green Path 01",sceneName:"Fungus1_12",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock59:{name:"Geo Rock #59",spoiler:"Greenpath: Massive Moss Charger Corridor",id:"Geo Rock Green Path 01 (1)",sceneName:"Fungus1_12",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock60:{name:"Geo Rock #60",spoiler:"Greenpath: Massive Moss Charger Corridor",id:"Geo Rock Green Path 02",sceneName:"Fungus1_12",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock61:{name:"Geo Rock #61",spoiler:"Fog Canyon: Queen's Gardens Acid Entrance",id:"Geo Rock Green Path 01",sceneName:"Fungus3_03",hitsLeft:"5",wiki:"Geo#How_to_Acquire"},geoRock62:{name:"Geo Rock #62",spoiler:"Fungal Wastes: Below Shrumal Ogres",id:"Geo Rock Fung 01",sceneName:"Fungus2_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock63:{name:"Geo Rock #63",spoiler:"Fungal Wastes: Cornifer",id:"Geo Rock Fung 01 (1)",sceneName:"Fungus2_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock64:{name:"Geo Rock #64",spoiler:"Fungal Wastes: Cornifer",id:"Geo Rock Fung 01",sceneName:"Fungus2_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock65:{name:"Geo Rock #65",spoiler:"Fungal Wastes: Cornifer",id:"Geo Rock Fung 02 (1)",sceneName:"Fungus2_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock66:{name:"Geo Rock #66",spoiler:"Fungal Wastes: Cornifer",id:"Geo Rock Fung 02 (2)",sceneName:"Fungus2_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock67:{name:"Geo Rock #67",spoiler:"Forgotten Crossroads: Goam Journal",id:"Geo Rock 1",sceneName:"Crossroads_52",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock68:{name:"Geo Rock #68",spoiler:"Forgotten Crossroads: Goam Journal",id:"Geo Rock 2",sceneName:"Crossroads_52",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock69:{name:"Geo Rock #69",spoiler:"Fungal Wastes: Outside Elder Hu",id:"Geo Rock Fung 01",sceneName:"Fungus2_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock70:{name:"Geo Rock #70",spoiler:"Fungal Wastes: Left Of Pilgrim's Way",id:"Geo Rock Fung 01",sceneName:"Fungus2_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock71:{name:"Geo Rock #71",spoiler:"Fungal Wastes: Right of Bouncy Mushroom Grub",id:"Geo Rock Fung 02",sceneName:"Fungus2_11",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock72:{name:"Geo Rock #72",spoiler:"Fungal Wastes: Right of Bouncy Mushroom Grub",id:"Geo Rock Fung 01",sceneName:"Fungus2_11",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock73:{name:"Geo Rock #73",spoiler:"Fungal Wastes: Bretta Bench",id:"Geo Rock Fung 01 (1)",sceneName:"Fungus2_13",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock74:{name:"Geo Rock #74",spoiler:"Fungal Wastes: Bretta Bench",id:"Geo Rock Fung 01",sceneName:"Fungus2_13",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock75:{name:"Geo Rock #75",spoiler:"Fungal Wastes: Bretta Bench",id:"Geo Rock Fung 02",sceneName:"Fungus2_13",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock76:{name:"Geo Rock #76",spoiler:"Fungal Wastes: Mantis Village",id:"Geo Rock 2 (2)",sceneName:"Fungus2_14",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock77:{name:"Geo Rock #77",spoiler:"Fungal Wastes: Mantis Village",id:"Geo Rock 1",sceneName:"Fungus2_14",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock78:{name:"Geo Rock #78",spoiler:"Fungal Wastes: Mantis Village",id:"Geo Rock 2 (3)",sceneName:"Fungus2_14",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock79:{name:"Geo Rock #79",spoiler:"Fungal Wastes: Mantis Village",id:"Geo Rock 2 (1)",sceneName:"Fungus2_14",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock80:{name:"Geo Rock #80",spoiler:"Fungal Wastes: Mantis Village",id:"Geo Rock 2",sceneName:"Fungus2_14",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock81:{name:"Geo Rock #81",spoiler:"Fungal Wastes: Mantis Lords",id:"Geo Rock 1",sceneName:"Fungus2_15",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock82:{name:"Geo Rock #82",spoiler:"Fungal Wastes: Mantis Lords",id:"Geo Rock 1 (1)",sceneName:"Fungus2_15",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock83:{name:"Geo Rock #83",spoiler:"Fungal Wastes: Fungal Core Upper",id:"Geo Rock Fung 01",sceneName:"Fungus2_29",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock84:{name:"Geo Rock #84",spoiler:"Fungal Wastes: Pilgrim's Way",id:"Geo Rock 1",sceneName:"Fungus2_21",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock85:{name:"Geo Rock #85",spoiler:"City of Tears: Rafters",id:"Geo Rock City 1",sceneName:"Ruins1_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock86:{name:"Geo Rock #86",spoiler:"City of Tears: Lemm Room",id:"Geo Rock City 1 (1)",sceneName:"Ruins1_05b",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock87:{name:"Geo Rock #87",spoiler:"City of Tears: Rancid Egg Above Lemm",id:"Geo Rock City 1",sceneName:"Ruins1_05c",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock88:{name:"Geo Rock #88",spoiler:"Forgotten Crossroads: Vessel Fragment",id:"Geo Rock 2",sceneName:"Crossroads_37",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock89:{name:"Geo Rock #89",spoiler:"Forgotten Crossroads: Brooding Mawlek Middle",id:"Geo Rock 1",sceneName:"Crossroads_36",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock90:{name:"Geo Rock #90",spoiler:"Howling Cliffs: Gorb",id:"Geo Rock 1",sceneName:"Cliffs_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock91:{name:"Geo Rock #91",spoiler:"Howling Cliffs: Gorb",id:"Geo Rock 1 (1)",sceneName:"Cliffs_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock92:{name:"Geo Rock #92",spoiler:"Howling Cliffs: Main",id:"Geo Rock 2 (2)",sceneName:"Cliffs_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock93:{name:"Geo Rock #93",spoiler:"Howling Cliffs: Main",id:"Geo Rock 2 (1)",sceneName:"Cliffs_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock94:{name:"Geo Rock #94",spoiler:"Howling Cliffs: Main",id:"Geo Rock 2 (4)",sceneName:"Cliffs_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock95:{name:"Geo Rock #95",spoiler:"Howling Cliffs: Main",id:"Geo Rock 2 (3)",sceneName:"Cliffs_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock96:{name:"Geo Rock #96",spoiler:"Crystal Peak: Dark Entrance",id:"Geo Rock Mine",sceneName:"Mines_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock97:{name:"Geo Rock #97",spoiler:"Crystal Peak: Dark Entrance",id:"Geo Rock 1",sceneName:"Mines_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock98:{name:"Geo Rock #98",spoiler:"Crystal Peak: Dark Entrance",id:"Geo Rock Mine (1)",sceneName:"Mines_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock99:{name:"Geo Rock #99",spoiler:"Crystal Peak: Conveyor Belts Entrance",id:"Geo Rock Mine (1)",sceneName:"Mines_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock100:{name:"Geo Rock #100",spoiler:"Crystal Peak: Conveyor Belts Entrance",id:"Geo Rock Mine",sceneName:"Mines_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock101:{name:"Geo Rock #101",spoiler:"Crystal Peak: Above Spike Grub",id:"Geo Rock Mine",sceneName:"Mines_05",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock102:{name:"Geo Rock #102",spoiler:"Crystal Peak: East Tall",id:"Geo Rock Mine (4)",sceneName:"Mines_20",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock103:{name:"Geo Rock #103",spoiler:"Crystal Peak: East Tall",id:"Geo Rock Mine (3)",sceneName:"Mines_20",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock104:{name:"Geo Rock #104",spoiler:"Crystal Peak: East Tall",id:"Geo Rock Mine (2)",sceneName:"Mines_20",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock105:{name:"Geo Rock #105",spoiler:"Crystal Peak: Chest Crushers",id:"Geo Rock Mine",sceneName:"Mines_37",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock106:{name:"Geo Rock #106",spoiler:"Crystal Peak: Chest Crushers",id:"Geo Rock Mine (1)",sceneName:"Mines_37",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock107:{name:"Geo Rock #107",spoiler:"Royal Waterways: Entrance",id:"Geo Rock City 1",sceneName:"Waterways_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock108:{name:"Geo Rock #108",spoiler:"Royal Waterways: Entrance",id:"Geo Rock City 1 (1)",sceneName:"Waterways_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock109:{name:"Geo Rock #109",spoiler:"Royal Waterways: Mask Shard Room",id:"Geo Rock City 1",sceneName:"Waterways_04b",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock110:{name:"Geo Rock #110",spoiler:"City of Tears: Broken Elevator",id:"Geo Rock 2 (1)",sceneName:"Abyss_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock111:{name:"Geo Rock #111",spoiler:"City of Tears: Broken Elevator",id:"Geo Rock 2",sceneName:"Abyss_01",hitsLeft:"5",wiki:"Geo#How_to_Acquire"},geoRock112:{name:"Geo Rock #112",spoiler:"City of Tears: Broken Elevator",id:"Geo Rock 1",sceneName:"Abyss_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock113:{name:"Geo Rock #113",spoiler:"Ancient Basin: Broken Bridge",id:"Geo Rock Deepnest (1)",sceneName:"Abyss_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock114:{name:"Geo Rock #114",spoiler:"Ancient Basin: Broken Bridge",id:"Geo Rock Deepnest",sceneName:"Abyss_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock115:{name:"Geo Rock #115",spoiler:"Ancient Basin: Broken Bridge",id:"Geo Rock Deepnest (2)",sceneName:"Abyss_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock116:{name:"Geo Rock #116",spoiler:"City of Tears: King's Station",id:"Geo Rock City 1",sceneName:"Ruins2_06",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock117:{name:"Geo Rock #117",spoiler:"City of Tears: Above King's Station",id:"Geo Rock City 1",sceneName:"Ruins2_05",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock118:{name:"Geo Rock #118",spoiler:"Kingdom's Edge: Whispering Root",id:"Geo Rock Outskirts",sceneName:"Deepnest_East_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock119:{name:"Geo Rock #119",spoiler:"Kingdom's Edge: Whispering Root",id:"Geo Rock Outskirts (1)",sceneName:"Deepnest_East_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock120:{name:"Geo Rock #120",spoiler:"Kingdom's Edge: Outside Nailmaster Oro",id:"Geo Rock Outskirts",sceneName:"Deepnest_East_06",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock121:{name:"Geo Rock #121",spoiler:"Kingdom's Edge: Outside Nailmaster Oro",id:"Geo Rock Outskirts (1)",sceneName:"Deepnest_East_06",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock122:{name:"Geo Rock #122",spoiler:"Kingdom's Edge: Bardoon",id:"Geo Rock Outskirts",sceneName:"Deepnest_East_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock123:{name:"Geo Rock #123",spoiler:"Kingdom's Edge: Great Hopper King's Idol",id:"Geo Rock Outskirts",sceneName:"Deepnest_East_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock124:{name:"Geo Rock #124",spoiler:"Kingdom's Edge: Pale Lurker Arena",id:"Geo Rock Outskirts",sceneName:"GG_Lurker",hitsLeft:"5",wiki:"Geo#How_to_Acquire"},geoRock125:{name:"Geo Rock #125",spoiler:"Fog Canyon: Overgrown Mound",id:"Geo Rock Green Path 02",sceneName:"Room_Fungus_Shaman",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock126:{name:"Geo Rock #126",spoiler:"City of Tears: Soul Master Rewards Room",id:"Geo Rock City 1",sceneName:"Ruins1_32",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock127:{name:"Geo Rock #127",spoiler:"Royal Waterways: Outside Flukemarm",id:"Geo Rock City 1",sceneName:"Waterways_08",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock128:{name:"Geo Rock #128",spoiler:"Royal Waterways: Flukemunga Corridor",id:"Geo Rock City 1",sceneName:"GG_Pipeway",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock129:{name:"Geo Rock #129",spoiler:"Royal Waterways: Fluke Hermit Room",id:"Geo Rock Fung 01",sceneName:"Room_GG_Shortcut",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock130:{name:"Geo Rock #130",spoiler:"Royal Waterways: Fluke Hermit Room",id:"Geo Rock Fung 02 (1)",sceneName:"Room_GG_Shortcut",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock131:{name:"Geo Rock #131",spoiler:"Resting Grounds: Crypts",id:"Geo Rock Grave 02 (1)",sceneName:"RestingGrounds_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock132:{name:"Geo Rock #132",spoiler:"Resting Grounds: Crypts",id:"Geo Rock Grave 02",sceneName:"RestingGrounds_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock133:{name:"Geo Rock #133",spoiler:"Resting Grounds: Crypts",id:"Geo Rock Grave 01",sceneName:"RestingGrounds_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock134:{name:"Geo Rock #134",spoiler:"Crystal Peak: Crystal Heart Gauntlet",id:"Geo Rock Mine",sceneName:"Mines_31",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock135:{name:"Geo Rock #135",spoiler:"Crystal Peak: Grub Mimic",id:"Geo Rock Mine",sceneName:"Mines_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock136:{name:"Geo Rock #136",spoiler:"Ancient Basin: Corridor to Broken Vessel",id:"Geo Rock Abyss",sceneName:"Abyss_18",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock137:{name:"Geo Rock #137",spoiler:"The Abyss: Main/Core Area",id:"Geo Rock Abyss (1)",sceneName:"Abyss_06_Core",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock138:{name:"Geo Rock #138",spoiler:"The Abyss: Main/Core Area",id:"Geo Rock Abyss",sceneName:"Abyss_06_Core",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock139:{name:"Geo Rock #139",spoiler:"Ancient Basin: Broken Vessel Grub",id:"Geo Rock Abyss (1)",sceneName:"Abyss_19",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock140:{name:"Geo Rock #140",spoiler:"Ancient Basin: Broken Vessel Grub",id:"Geo Rock Abyss",sceneName:"Abyss_19",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock141:{name:"Geo Rock #141",spoiler:"Crystal Peak: Hallownest Crown Climb",id:"Geo Rock Mine",sceneName:"Mines_25",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock142:{name:"Geo Rock #142",spoiler:"Crystal Peak: Hallownest Crown Climb",id:"Geo Rock Mine (4)",sceneName:"Mines_25",hitsLeft:"4",wiki:"Geo#How_to_Acquire"},geoRock143:{name:"Geo Rock #143",spoiler:"Crystal Peak: Hallownest Crown Climb",id:"Geo Rock Mine (2)",sceneName:"Mines_25",hitsLeft:"4",wiki:"Geo#How_to_Acquire"},geoRock144:{name:"Geo Rock #144",spoiler:"Crystal Peak: Hallownest Crown Climb",id:"Geo Rock Mine (1)",sceneName:"Mines_25",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock145:{name:"Geo Rock #145",spoiler:"Crystal Peak: Hallownest Crown Climb",id:"Geo Rock Mine (3)",sceneName:"Mines_25",hitsLeft:"4",wiki:"Geo#How_to_Acquire"},geoRock146:{name:"Geo Rock #146",spoiler:"City of Tears: Watcher's Spire Second Floor",id:"Geo Rock City 1",sceneName:"Ruins2_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock147:{name:"Geo Rock #147",spoiler:"Fog Canyon: East Tall",id:"Geo Rock Green Path 01",sceneName:"Fungus3_26",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock148:{name:"Geo Rock #148",spoiler:"Queen's Gardens: Main Arena",id:"Geo Rock Green Path 01",sceneName:"Fungus3_10",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock149:{name:"Geo Rock #149",spoiler:"Queen's Gardens: Outside White Lady",id:"Geo Rock Green Path 02",sceneName:"Fungus3_48",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock150:{name:"Geo Rock #150",spoiler:"Queen's Gardens: Moss Prophet Room",id:"Geo Rock Green Path 01 (1)",sceneName:"Fungus3_39",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock151:{name:"Geo Rock #151",spoiler:"Queen's Gardens: Moss Prophet Room",id:"Geo Rock Green Path 01",sceneName:"Fungus3_39",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock152:{name:"Geo Rock #152",spoiler:"Fungal Wastes: Deepnest Fall",id:"Geo Rock 1",sceneName:"Deepnest_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock153:{name:"Geo Rock #153",spoiler:"Fungal Wastes: Deepnest Fall",id:"Geo Rock 2",sceneName:"Deepnest_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock154:{name:"Geo Rock #154",spoiler:"Queen's Gardens: Corridor To Deepnest",id:"Geo Rock Green Path 01 (1)",sceneName:"Deepnest_43",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock155:{name:"Geo Rock #155",spoiler:"Queen's Gardens: Corridor To Deepnest",id:"Geo Rock Green Path 01",sceneName:"Deepnest_43",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock156:{name:"Geo Rock #156",spoiler:"Fungal Wastes: Fungal Core Lower",id:"Geo Rock Fung 01",sceneName:"Fungus2_30",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock157:{name:"Geo Rock #157",spoiler:"Fungal Wastes: Fungal Core Lower",id:"Geo Rock Fung 01 (1)",sceneName:"Fungus2_30",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock158:{name:"Geo Rock #158",spoiler:"Deepnest: Lower Cornifer",id:"Geo Rock Deepnest",sceneName:"Fungus2_25",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock159:{name:"Geo Rock #159",spoiler:"Deepnest: Lower Cornifer",id:"Geo Rock Deepnest (1)",sceneName:"Fungus2_25",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock160:{name:"Geo Rock #160",spoiler:"Deepnest: Lower Cornifer",id:"Geo Rock Deepnest (2)",sceneName:"Fungus2_25",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock161:{name:"Geo Rock #161",spoiler:"Deepnest: Top of Lower Cornifer",id:"Geo Rock Deepnest (4)",sceneName:"Deepnest_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock162:{name:"Geo Rock #162",spoiler:"Deepnest: Top of Lower Cornifer",id:"Geo Rock Deepnest (3)",sceneName:"Deepnest_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock163:{name:"Geo Rock #163",spoiler:"Deepnest: Top of Lower Cornifer",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock164:{name:"Geo Rock #164",spoiler:"Deepnest: Top of Lower Cornifer",id:"Geo Rock Deepnest",sceneName:"Deepnest_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock165:{name:"Geo Rock #165",spoiler:"Deepnest: Top of Lower Cornifer",id:"Geo Rock Deepnest (2)",sceneName:"Deepnest_16",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock166:{name:"Geo Rock #166",spoiler:"Deepnest: Outside Grub Mimics",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_02",hitsLeft:"3",wiki:"Geo#How_to_Acquire"},geoRock167:{name:"Geo Rock #167",spoiler:"Deepnest: Outside Grub Mimics",id:"Geo Rock Deepnest",sceneName:"Deepnest_02",hitsLeft:"3",wiki:"Geo#How_to_Acquire"},geoRock168:{name:"Geo Rock #168",spoiler:"Deepnest: Whispering Root",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_39",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock169:{name:"Geo Rock #169",spoiler:"Deepnest: Whispering Root",id:"Geo Rock Deepnest (2)",sceneName:"Deepnest_39",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock170:{name:"Geo Rock #170",spoiler:"Deepnest: Whispering Root",id:"Geo Rock Deepnest",sceneName:"Deepnest_39",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock171:{name:"Geo Rock #171",spoiler:"Deepnest: Left of Hot Spring",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_03",hitsLeft:"3",wiki:"Geo#How_to_Acquire"},geoRock172:{name:"Geo Rock #172",spoiler:"Deepnest: Left of Hot Spring",id:"Geo Rock Deepnest (2)",sceneName:"Deepnest_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock173:{name:"Geo Rock #173",spoiler:"Deepnest: Left of Hot Spring",id:"Geo Rock Deepnest",sceneName:"Deepnest_03",hitsLeft:"3",wiki:"Geo#How_to_Acquire"},geoRock174:{name:"Geo Rock #174",spoiler:"Deepnest: Outside Galien",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_35",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock175:{name:"Geo Rock #175",spoiler:"Deepnest: Outside Galien",id:"Geo Rock Deepnest",sceneName:"Deepnest_35",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock176:{name:"Geo Rock #176",spoiler:"Deepnest: Corridor to Tram",id:"Geo Rock Deepnest",sceneName:"Deepnest_37",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock177:{name:"Geo Rock #177",spoiler:"Deepnest: Corridor to Tram",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_37",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock178:{name:"Geo Rock #178",spoiler:"Kingdom's Edge: Left of The Hive",id:"Geo Rock Deepnest",sceneName:"Deepnest_East_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock179:{name:"Geo Rock #179",spoiler:"Kingdom's Edge: Left of The Hive",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_East_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock180:{name:"Geo Rock #180",spoiler:"Kingdom's Edge: Above The Hive",id:"Geo Rock Deepnest",sceneName:"Deepnest_East_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock181:{name:"Geo Rock #181",spoiler:"Kingdom's Edge: Above The Hive",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_East_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock182:{name:"Geo Rock #182",spoiler:"Royal Waterways: Left of Isma's Grove",id:"Geo Rock City 1",sceneName:"Waterways_07",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock183:{name:"Geo Rock #183",spoiler:"The Hive: Outside Grub",id:"Geo Rock Hive (2)",sceneName:"Hive_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock184:{name:"Geo Rock #184",spoiler:"The Hive: Outside Grub",id:"Geo Rock Hive",sceneName:"Hive_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock185:{name:"Geo Rock #185",spoiler:"The Hive: Outside Grub",id:"Geo Rock Hive (1)",sceneName:"Hive_03",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock186:{name:"Geo Rock #186",spoiler:"The Hive: Entrance",id:"Geo Rock Hive",sceneName:"Hive_01",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock187:{name:"Geo Rock #187",spoiler:"The Hive: Whispering Root",id:"Geo Rock Hive",sceneName:"Hive_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock188:{name:"Geo Rock #188",spoiler:"The Hive: Whispering Root",id:"Geo Rock Hive (2)",sceneName:"Hive_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock189:{name:"Geo Rock #189",spoiler:"The Hive: Whispering Root",id:"Geo Rock Hive (1)",sceneName:"Hive_02",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock190:{name:"Geo Rock #190",spoiler:"The Hive: Mask Shard Room",id:"Geo Rock Hive",sceneName:"Hive_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock191:{name:"Geo Rock #191",spoiler:"The Hive: Mask Shard Room",id:"Geo Rock Hive (1)",sceneName:"Hive_04",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock192:{name:"Geo Rock #192",spoiler:"Deepnest: Nosk Corridor",id:"Geo Rock Deepnest",sceneName:"Deepnest_31",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock193:{name:"Geo Rock #193",spoiler:"Deepnest: Nosk Corridor",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_31",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock194:{name:"Geo Rock #194",spoiler:"Deepnest: Nosk Corridor",id:"Geo Rock Deepnest (2)",sceneName:"Deepnest_31",hitsLeft:"3",wiki:"Geo#How_to_Acquire"},geoRock195:{name:"Geo Rock #195",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (3)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock196:{name:"Geo Rock #196",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (4)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock197:{name:"Geo Rock #197",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (5)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock198:{name:"Geo Rock #198",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock199:{name:"Geo Rock #199",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (1)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock200:{name:"Geo Rock #200",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (7)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock201:{name:"Geo Rock #201",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (2)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock202:{name:"Geo Rock #202",spoiler:"Deepnest: Beast's Den",id:"Geo Rock Deepnest (6)",sceneName:"Deepnest_Spider_Town",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock203:{name:"Geo Rock #203",spoiler:"City of Tears: Pleasure House Elevator",id:"Geo Rock City 1",sceneName:"Ruins_Elevator",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock204:{name:"Geo Rock #204",spoiler:"Kingdom's Edge: near 420 Geo Rock",id:"Geo Rock Outskirts",sceneName:"Deepnest_East_17",hitsLeft:"0",wiki:"Geo#How_to_Acquire"},geoRock205:{name:"Geo Rock #205 (420 Geo)",spoiler:"Kingdom's Edge",id:"Giant Geo Egg",sceneName:"Deepnest_East_17",hitsLeft:"0",wiki:"Geo#How_to_Acquire"}}},worldInteractions:{h2:"World Interactions",id:"hk-world-interactions",description:"Certain interactions the player can make with NPCs in the game or world objects. All these here don't count towards either 112% Game Completion or Achievements.",entries:{unlockedCompletionRate:{name:"World Sense Ability",spoiler:"Temple of the Black Egg: Lore Tablet",wiki:"World_Sense"},spaBugsEncountered:{name:"Gossipping Bugs",spoiler:"Forgotten Crossroads: Hot Springs, acquire Mantis Claw",wiki:"Hot_Spring#Forgotten_Crossroads"},jijiDoorUnlocked:{name:"Confessor Jiji's Cave Unlocked",spoiler:"Dirtmouth, requires Simple Key",wiki:"Jiji"},bathHouseOpened:{name:"Pleasure House Door Unlocked",spoiler:"City of Tears: Right Side Main Hub Area",wiki:"City_of_Tears#Sub-area:_Pleasure_House"},openedWaterwaysManhole:{name:"Waterways Manhole Unlocked",spoiler:"City of Tears: below Lemm, use Simple Key",wiki:"Royal_Waterways#How_to_access"},gladeDoorOpened:{name:"Spirits' Glade Door Opened",spoiler:"Resting Grounds, Seer: 200 Essence",wiki:"Resting_Grounds#Sub-area:_Spirits'_Glade"},openedCityGate:{name:"City of Tears Gate Opened",spoiler:"Fungal Wastes, requires City Crest",wiki:"Fungal_Wastes"},soulSanctumShortcut:{name:"Soul Sanctum Shortcut",spoiler:"City of Tears: Cornifer Lift Room, break left wall",id:"Breakable Wall Ruin Lift",sceneName:"Ruins1_31",wiki:"City_of_Tears#Sub-area:_Soul_Sanctum"},waterwaysGate:{name:"Waterways Gate Opened",spoiler:"Royal Waterways: Cornifer Room, use lever",wiki:"Royal_Waterways"},watcherChandelier:{name:"Chandelier Dropped",spoiler:"City of Tears: Watcher Knights Room, break ceiling",wiki:"Watcher_Knight#In-game_events"},colosseumHiddenHotSpring:{name:"Hidden Hot Spring",spoiler:"Colosseum of Fools, break wall right of Bench",id:"Breakable Wall_Silhouette",sceneName:"Room_Colosseum_02",wiki:"Colosseum_of_Fools#Description"},paleLurkersRetreat:{name:"Pale Lurker's Retreat",spoiler:"Colosseum of Fools, Room above Bench, break wall",id:"Breakable Wall_Silhouette",sceneName:"Room_Colosseum_Spectate",wiki:"Colosseum_of_Fools#Description"},stagEggInspected:{name:"Stag Nest Egg Inspected",spoiler:"Howling Cliffs: Top of Stag Nest",wiki:"Howling_Cliffs#Sub-area:_Stag_Nest"},deepnestBridgeCollapsed:{name:"Deepnest Entry Bridge Collapsed",spoiler:"Fungal Wastes, left of Spore Shroom",wiki:"Deepnest#How_to_access"},maskmakerUnmasked1:{name:"Mask Maker Unmasked",spoiler:"Deepnest, use Desolate Dive on Mask Maker",wiki:"Mask_Maker#In-game_events"},bankerAccountPurchased:{name:"Bank Account Opened",spoiler:"100 Geo: Fog Canyon: Millibelle the Banker",wiki:"Millibelle"},millibelleLeft:{name:"Banker Disappeared",spoiler:"Fog Canyon: Millibelle the Banker",wiki:"Millibelle"},millibelleCheckedStand:{name:"Banker Stand Investigated",spoiler:"Fog Canyon: Millibelle the Banker",wiki:"Millibelle"},bankerSpaMet:{name:"Found & Talked to Millibelle",spoiler:"City of Tears: Hot Springs, Simple Key",wiki:"Millibelle"},millibelleReclaimedAllGeo:{name:"Reclaimed All Geo",spoiler:"City of Tears: Hot Springs, Millibelle the Thief",wiki:"Millibelle"},elderbugGaveFlower:{name:"Delicate Flower: Elderbug",spoiler:"Deliver from Traitor's Child Grave",wiki:"Delicate_Flower#List_of_Possible_Recipients"},givenGodseekerFlower:{name:"Delicate Flower: Godseeker",spoiler:"Possible after completing 2 Pantheons",wiki:"Delicate_Flower#List_of_Possible_Recipients"},givenOroFlower:{name:"Delicate Flower: Nailmaster Oro",spoiler:"D. from Traitor's Child Grave",wiki:"Delicate_Flower#List_of_Possible_Recipients"},givenWhiteLadyFlower:{name:"Delicate Flower: White Lady",spoiler:"Deliver from Traitor's Child Grave",wiki:"Delicate_Flower#List_of_Possible_Recipients"},givenEmilitiaFlower:{name:"Delicate Flower: Emilitia",spoiler:"Deliver from Traitor's Child Grave",wiki:"Delicate_Flower#List_of_Possible_Recipients"}}},secretRooms:{h2:"Secret Rooms",id:"hk-secret-rooms",description:'Certain Secret Rooms in the game. Grimm\'s Tent Secret is missable when the player will Banish the Troupe or complete the Ritual.',entries:{grimmTentSecretRoom:{name:"Grimm's Tent: Secret Room (missable)",spoiler:"Dirtmouth: inside Grimm's Tent",id:"Secret Mask",sceneName:"Grimm_Main_Tent",wiki:"Dirtmouth#The_Grimm_Troupe.27s_Tents"},towerOfLoveSecretRoom:{name:"Tower of Love: Secret Room",spoiler:"City of Tears: near The Collector's Map",id:"secret sound_grub room",sceneName:"Ruins2_11",wiki:"Collector#Trivia"},weaversDenSecretRoom1:{name:"Weaver's Den: Secret Room #1",spoiler:"Deepnest: inside Weaver's Den",id:"Breakable Wall",sceneName:"Deepnest_45_v02",wiki:"Deepnest#Sub-area:_Weavers.27_Den"},weaversDenSecretRoom2:{name:"Weaver's Den: Secret Room #2",spoiler:"Deepnest: inside Weaver's Den",id:"Breakable Wall Waterways",sceneName:"Deepnest_45_v02",wiki:"Deepnest#Sub-area:_Weavers.27_Den"},pathOfPainEntrance:{name:"White Palace: Path of Pain Entrance",spoiler:"Break left wall above lift area",id:"Breakable Wall Ruin Lift",sceneName:"White_Palace_06",wiki:"White_Palace#Sub-area:_Path_of_Pain"},killsBindingSeal:{name:"White Palace: Path of Pain",spoiler:"Main Secret Area, After Middle Lift",wiki:"White_Palace#Sub-area:_Path_of_Pain"},whitePalaceSecretRoomVisited:{name:"White Palace: Secret Room #1",spoiler:"The Pale King's Workshop",wiki:"White_Palace#The_Pale_King.27s_workshop"},whiteLadyRoom:{name:"White Palace: Secret Room #2",spoiler:"White Lady's Room, break floor",id:"Quake Floor",sceneName:"White_Palace_09",wiki:"White_Palace#White_Lady.27s_room"},throneRoomLoreTablet:{name:"White Palace: Secret Room #3",spoiler:"Throne Room, break right wall",id:"Breakable Wall Waterways",sceneName:"White_Palace_09",wiki:"White_Palace#Throne_room_Lore_Tablet"}}},corniferNotes:{h2:"Cornifer's Notes",id:"hk-cornifer-notes",description:"Cornifer the Cartographer leaves his note on the ground every time he leaves the current area. The note will be at the same spot where Cornifer was met. He leaves an area once a specific condition from that area was met, like defeating a boss or learning a new ability. After reading a note it will stop glowing and the entry will be marked as completed.",entries:{corniferNote1:{name:"Note #1: Forgotten Crossroads",spoiler:"Below Big Gruzzer Room",id:"Shiny",sceneName:"Crossroads_33",wiki:"Cornifer#Locations"},corniferNote2:{name:"Note #2: Greenpath",spoiler:"Room below the Crossroads entrance",id:"Shiny",sceneName:"Fungus1_06",wiki:"Cornifer#Locations"},corniferNote3:{name:"Note #3: Fungal Wastes",spoiler:"Right of Queen's Station",id:"Shiny",sceneName:"Fungus2_18",wiki:"Cornifer#Locations"},corniferNote4:{name:"Note #4: Howling Cliffs",spoiler:"Big Main Area on the left side",id:"Shiny",sceneName:"Cliffs_01",wiki:"Cornifer#Locations"},corniferNote5:{name:"Note #5: City of Tears",spoiler:"Toll Bench left of Soul Sanctum",id:"Shiny",sceneName:"Ruins1_31",wiki:"Cornifer#Locations"},corniferNote6:{name:"Note #6: Crystal Peak",spoiler:"Left of Central Bench",id:"Shiny",sceneName:"Mines_30",wiki:"Cornifer#Locations"},corniferNote7:{name:"Note #7: Resting Grounds",spoiler:"Near the Stag Station",id:"Shiny",sceneName:"RestingGrounds_09",wiki:"Cornifer#Locations"},corniferNote8:{name:"Note #8: Royal Waterways",spoiler:"Near Fungal Wastes exit",id:"Shiny",sceneName:"Waterways_09",wiki:"Cornifer#Locations"},corniferNote9:{name:"Note #9: Ancient Basin",spoiler:"Below the Tram and Fountain",id:"Shiny",sceneName:"Abyss_04",wiki:"Cornifer#Locations"},corniferNote10:{name:"Note #10: Kingdom's Edge",spoiler:"Below the King's Station entrance",id:"Shiny",sceneName:"Deepnest_East_03",wiki:"Cornifer#Locations"}}},statistics:{h2:"Game Statistics",id:"hk-statistics",description:"Dedicated to numbers and stats fans. Everything what the game may not always tell you directly, but what can be read from a save file.",entries:{journalEntriesCompleted:{name:"Creatures Encountered",spoiler:"Hunter's Journal (158-164 max)",spoilerDefault:"Hunter's Journal",max:164,maxDefault:164,wiki:"Category:Enemies_(Hollow_Knight)#Compendium"},journalNotesCompleted:{name:"Hunter Notes Completed",spoiler:"Hunter's Journal (158-164 max)",spoilerDefault:"Hunter's Journal",max:164,maxDefault:164,wiki:"Category:Enemies_(Hollow_Knight)#Compendium"},nailDamage:{name:"Base Nail Damage",spoiler:"Nailsmith upgrades, City of Tears",max:21,maxDefault:21,wiki:"Nail#Nail_Upgrades"},geoPool:{name:"Shade Geo",spoiler:"Amount of Geo the Shade is currently holding",min:0,wiki:"Shade"},soldTrinket1:{name:"Wanderer's Journals Sold",spoiler:"City of Tears: Relic Seeker Lemm",geoValue:200,wiki:"Wanderer's_Journal"},soldTrinket2:{name:"Hallownest Seals Sold",spoiler:"City of Tears: Relic Seeker Lemm",geoValue:450,wiki:"Hallownest_Seal"},soldTrinket3:{name:"King's Idols Sold",spoiler:"City of Tears: Relic Seeker Lemm",geoValue:800,wiki:"King's_Idol"},soldTrinket4:{name:"Arcane Eggs Sold",spoiler:"City of Tears: Relic Seeker Lemm",geoValue:1200,wiki:"Arcane_Egg"},relicsSoldTotalGeo:{name:"Total Geo from Sold Relics",spoiler:"City of Tears: Relic Seeker Lemm",wiki:"Lemm#Collectibles"},ore:{name:"Pale Ore",spoiler:"Current amount of Pale Ore in inventory",wiki:"Pale_Ore"},simpleKeys:{name:"Simple Keys",spoiler:"Current amount of Simple Keys in inventory",wiki:"Simple_Key"},rancidEggs:{name:"Rancid Eggs",spoiler:"Current amount of Rancid Eggs in inventory",wiki:"Rancid_Egg"},jinnEggsSold:{name:"Rancid Eggs Sold",spoiler:"Dirtmouth: Jinn, Steel Soul Mode only",wiki:"Jinn"},xunFlowerBrokeTimes:{name:"Delicate Flowers Destroyed",spoiler:"Grey Mourner, Traitor's Child Grave",wiki:"Delicate_Flower"},itemsDiscovered:{id:"itemsDiscovered",name:"Interactables",spoiler:"Not A. | Activated | Discovered",wiki:"Category:Exploration_(Hollow_Knight)",notActivated:0,activated:0,discoveredTotal:0},bankerBalance:{name:"Bank Account Balance",spoiler:"Fog Canyon: Millibelle the Banker",wiki:"Millibelle"},whiteDefenderDefeats:{name:"White Defender Times Defeated",spoiler:"Royal Waterways (5 max)",max:5,maxDefault:5,wiki:"White_Defender"},greyPrinceDefeats:{name:"Grey Prince Zote Times Defeated",spoiler:"Dirtmouth (10 max)",max:10,maxDefault:10,wiki:"Grey_Prince_Zote"}}},godhomeStatistics:{h2:"Godhome Statistics",id:"hk-godhome-statistics",description:"Everything in Godhome, that didn't fit any other category.",entries:{seenGGWastes:{name:"Tuner Memory",spoiler:"Requires completing 3 Pantheons, 2% chance",wiki:"Godhome#Tuner_Memory"},blueRoomDoorUnlocked:{name:"Lifeblood Door Open",spoiler:"Complete any 8 Pantheon bindings total",wiki:"Godhome#Locked_Lifeblood_Room"},killedVoidIdol_1:{name:"Journal: Void Idol Attuned",spoiler:"Hall of Gods: Defeat All (Attuned)",wiki:"Void_Idol"},killedVoidIdol_2:{name:"Journal: Void Idol Ascended",spoiler:"Hall of Gods: Defeat All (Ascended)",wiki:"Void_Idol"},killedVoidIdol_3:{name:"Journal: Void Idol Radiant",spoiler:"Hall of Gods: Defeat All (Radiant)",wiki:"Void_Idol"},killedGodseekerMask:{name:"Journal: Weathered Mask",spoiler:"Land of Storms: All Pantheons & Bindings",wiki:"Weathered_Mask"},zoteStatueWallBroken:{name:"Intruder Discovered",spoiler:"Hall of Gods: Zote Statue (upper right)",wiki:"Hall_of_Gods#Zote"},ordealAchieved:{name:"The Eternal Ordeal",spoiler:"Reach 57 Zotelings defeated",wiki:"Eternal_Ordeal"}}},pantheonOfTheMaster:{h2:"P1 – Pantheon of the Master",id:"hk-pantheon-master",property:"bossDoorStateTier1",description:"Seek the Gods of Nail and Shell",entries:{unlocked:{name:"P1 Unlocked",spoiler:"Defeat P1 bosses in the game world to unlock",wiki:"Pantheon_of_the_Master"},completed:{name:"P1 Completed",spoiler:"Defeat all bosses in a row to complete",wiki:"Pantheon_of_the_Master"},boundNail:{name:"P1 Binding: Nail",spoiler:"Complete with the Nail binding active",wiki:"Pantheons#Bindings"},boundShell:{name:"P1 Binding: Shell",spoiler:"Complete with the Shell binding active",wiki:"Pantheons#Bindings"},boundCharms:{name:"P1 Binding: Charms",spoiler:"Complete with the Charm binding active",wiki:"Pantheons#Bindings"},boundSoul:{name:"P1 Binding: Soul",spoiler:"Complete with the Soul binding active",wiki:"Pantheons#Bindings"},allBindings:{name:"P1 All Bindings",spoiler:"Complete with all bindings active at once",wiki:"Pantheons#Bindings"},noHits:{name:"P1 No Damage",spoiler:"Complete without taking a single hit",wiki:"Pantheons"}}},pantheonOfTheArtist:{h2:"P2 – Pantheon of the Artist",id:"hk-pantheon-artist",property:"bossDoorStateTier2",description:"Seek the God Inspired",entries:{unlocked:{name:"P2 Unlocked",spoiler:"Defeat P2 bosses in the game world to unlock",wiki:"Pantheon_of_the_Artist"},completed:{name:"P2 Completed",spoiler:"Defeat all bosses in a row to complete",wiki:"Pantheon_of_the_Artist"},boundNail:{name:"P2 Binding: Nail",spoiler:"Complete with the Nail binding active",wiki:"Pantheons#Bindings"},boundShell:{name:"P2 Binding: Shell",spoiler:"Complete with the Shell binding active",wiki:"Pantheons#Bindings"},boundCharms:{name:"P2 Binding: Charms",spoiler:"Complete with the Charm binding active",wiki:"Pantheons#Bindings"},boundSoul:{name:"P2 Binding: Soul",spoiler:"Complete with the Soul binding active",wiki:"Pantheons#Bindings"},allBindings:{name:"P2 All Bindings",spoiler:"Complete with all bindings active at once",wiki:"Pantheons#Bindings"},noHits:{name:"P2 No Damage",spoiler:"Complete without taking a single hit",wiki:"Pantheons"}}},pantheonOfTheSage:{h2:"P3 – Pantheon of the Sage",id:"hk-pantheon-sage",property:"bossDoorStateTier3",description:"Seek the God of Wealth and Power",entries:{unlocked:{name:"P3 Unlocked",spoiler:"Defeat P3 bosses in the game world to unlock",wiki:"Pantheon_of_the_Sage"},completed:{name:"P3 Completed",spoiler:"Defeat all bosses in a row to complete",wiki:"Pantheon_of_the_Sage"},boundNail:{name:"P3 Binding: Nail",spoiler:"Complete with the Nail binding active",wiki:"Pantheons#Bindings"},boundShell:{name:"P3 Binding: Shell",spoiler:"Complete with the Shell binding active",wiki:"Pantheons#Bindings"},boundCharms:{name:"P3 Binding: Charms",spoiler:"Complete with the Charm binding active",wiki:"Pantheons#Bindings"},boundSoul:{name:"P3 Binding: Soul",spoiler:"Complete with the Soul binding active",wiki:"Pantheons#Bindings"},allBindings:{name:"P3 All Bindings",spoiler:"Complete with all bindings active at once",wiki:"Pantheons#Bindings"},noHits:{name:"P3 No Damage",spoiler:"Complete without taking a single hit",wiki:"Pantheons"}}},pantheonOfTheKnight:{h2:"P4 – Pantheon of the Knight",id:"hk-pantheon-knight",property:"bossDoorStateTier4",description:"Seek the Pure God",entries:{unlocked:{name:"P4 Unlocked",spoiler:"Complete 3 previous Pantheons to unlock",wiki:"Pantheon_of_the_Knight"},completed:{name:"P4 Completed",spoiler:"Defeat all bosses in a row to complete",wiki:"Pantheon_of_the_Knight"},boundNail:{name:"P4 Binding: Nail",spoiler:"Complete with the Nail binding active",wiki:"Pantheons#Bindings"},boundShell:{name:"P4 Binding: Shell",spoiler:"Complete with the Shell binding active",wiki:"Pantheons#Bindings"},boundCharms:{name:"P4 Binding: Charms",spoiler:"Complete with the Charm binding active",wiki:"Pantheons#Bindings"},boundSoul:{name:"P4 Binding: Soul",spoiler:"Complete with the Soul binding active",wiki:"Pantheons#Bindings"},allBindings:{name:"P4 All Bindings",spoiler:"Complete with all bindings active at once",wiki:"Pantheons#Bindings"},noHits:{name:"P4 No Damage",spoiler:"Complete without taking a single hit",wiki:"Pantheons"}}},pantheonOfHallownest:{h2:"P5 – Pantheon of Hallownest",id:"hk-pantheon-hallownest",property:"bossDoorStateTier5",description:"Seek the Kingdom's Forgotten Light",entries:{unlocked:{name:"P5 Unlocked",spoiler:"Complete 4 previous Pantheons to unlock",wiki:"Pantheon_of_Hallownest"},completed:{name:"P5 Completed",spoiler:"Defeat all bosses in a row to complete",wiki:"Pantheon_of_Hallownest"},boundNail:{name:"P5 Binding: Nail",spoiler:"Complete with the Nail binding active",wiki:"Pantheons#Bindings"},boundShell:{name:"P5 Binding: Shell",spoiler:"Complete with the Shell binding active",wiki:"Pantheons#Bindings"},boundCharms:{name:"P5 Binding: Charms",spoiler:"Complete with the Charm binding active",wiki:"Pantheons#Bindings"},boundSoul:{name:"P5 Binding: Soul",spoiler:"Complete with the Soul binding active",wiki:"Pantheons#Bindings"},allBindings:{name:"P5 All Bindings",spoiler:"Complete with all bindings active at once",wiki:"Pantheons#Bindings"},noHits:{name:"P5 No Damage",spoiler:"Complete without taking a single hit",wiki:"Pantheons"}}},hallOfGods:{h2:"Hall of Gods",id:"hk-hall-of-gods",property:"statueState",description:"Bottom of Godhome. Detecting what bosses have been unlocked and defeated on all three difficulty levels: Attuned, Ascended and Radiant.",entries:{GruzMotherUnlocked:{name:"Gruz Mother: Unlocked",spoiler:"I sleep amongst winding roads",id:"GruzMother",check:"isUnlocked",wiki:"Hall_of_Gods#Gruz_Mother"},GruzMotherAttuned:{name:"Gruz Mother: Attuned",spoiler:"Slumbering god of fertility",id:"GruzMother",check:"completedTier1",wiki:"Hall_of_Gods#Gruz_Mother"},GruzMotherAscended:{name:"Gruz Mother: Ascended",spoiler:"Slumbering god of fertility",id:"GruzMother",check:"completedTier2",wiki:"Hall_of_Gods#Gruz_Mother"},GruzMotherRadiant:{name:"Gruz Mother: Radiant",spoiler:"Slumbering god of fertility",id:"GruzMother",check:"completedTier3",wiki:"Hall_of_Gods#Gruz_Mother"},VengeflyUnlocked:{name:"Vengefly King: Unlocked",spoiler:"I keep guard above a verdant land",id:"Vengefly",check:"isUnlocked",wiki:"Hall_of_Gods#Vengefly_King"},VengeflyAttuned:{name:"Vengefly King: Attuned",spoiler:"Vicious god of territories",id:"Vengefly",check:"completedTier1",wiki:"Hall_of_Gods#Vengefly_King"},VengeflyAscended:{name:"Vengefly King: Ascended",spoiler:"Vicious god of territories",id:"Vengefly",check:"completedTier2",wiki:"Hall_of_Gods#Vengefly_King"},VengeflyRadiant:{name:"Vengefly King: Radiant",spoiler:"Vicious god of territories",id:"Vengefly",check:"completedTier3",wiki:"Hall_of_Gods#Vengefly_King"},BroodingMawlekUnlocked:{name:"Brooding Mawlek: Unlocked",spoiler:"I call out to no one...",id:"BroodingMawlek",check:"isUnlocked",wiki:"Hall_of_Gods#Brooding_Mawlek"},BroodingMawlekAttuned:{name:"Brooding Mawlek: Attuned",spoiler:"...hidden by roads and highways",id:"BroodingMawlek",check:"completedTier1",wiki:"Hall_of_Gods#Brooding_Mawlek"},BroodingMawlekAscended:{name:"Brooding Mawlek: Ascended",spoiler:"Lonely god of the nest",id:"BroodingMawlek",check:"completedTier2",wiki:"Hall_of_Gods#Brooding_Mawlek"},BroodingMawlekRadiant:{name:"Brooding Mawlek: Radiant",spoiler:"Lonely god of the nest",id:"BroodingMawlek",check:"completedTier3",wiki:"Hall_of_Gods#Brooding_Mawlek"},FalseKnightUnlocked:{name:"False Knight: Unlocked",spoiler:"I protect the weak in...",id:"FalseKnight",check:"isUnlocked",wiki:"Hall_of_Gods#False_Knight"},FalseKnightAttuned:{name:"False Knight: Attuned",spoiler:"...the heart of the crossroads",id:"FalseKnight",check:"completedTier1",wiki:"Hall_of_Gods#False_Knight"},FalseKnightAscended:{name:"False Knight: Ascended",spoiler:"Angry god of the downtrodden",id:"FalseKnight",check:"completedTier2",wiki:"Hall_of_Gods#False_Knight"},FalseKnightRadiant:{name:"False Knight: Radiant",spoiler:"Angry god of the downtrodden",id:"FalseKnight",check:"completedTier3",wiki:"Hall_of_Gods#False_Knight"},FailedChampionUnlocked:{name:"Failed Champion: Unlocked",spoiler:"Baleful god of regrets",id:"FailedChampion",check:"isUnlocked",wiki:"Hall_of_Gods#Failed_Champion"},FailedChampionAttuned:{name:"Failed Champion: Attuned",spoiler:"Baleful god of regrets",id:"FailedChampion",check:"completedTier1",wiki:"Hall_of_Gods#Failed_Champion"},FailedChampionAscended:{name:"Failed Champion: Ascended",spoiler:"Baleful god of regrets",id:"FailedChampion",check:"completedTier2",wiki:"Hall_of_Gods#Failed_Champion"},FailedChampionRadiant:{name:"Failed Champion: Radiant",spoiler:"Baleful god of regrets",id:"FailedChampion",check:"completedTier3",wiki:"Hall_of_Gods#Failed_Champion"},Hornet1Unlocked:{name:"Hornet Protector: Unlocked",spoiler:"I watch over lush pathways...",id:"Hornet1",check:"isUnlocked",wiki:"Hall_of_Gods#Hornet_Protector"},Hornet1Attuned:{name:"Hornet Protector: Attuned",spoiler:"...and distant ash-swept graves",id:"Hornet1",check:"completedTier1",wiki:"Hall_of_Gods#Hornet_Protector"},Hornet1Ascended:{name:"Hornet Protector: Ascended",spoiler:"God protector of a fading land",id:"Hornet1",check:"completedTier2",wiki:"Hall_of_Gods#Hornet_Protector"},Hornet1Radiant:{name:"Hornet Protector: Radiant",spoiler:"God protector of a fading land",id:"Hornet1",check:"completedTier3",wiki:"Hall_of_Gods#Hornet_Protector"},Hornet2Unlocked:{name:"Hornet Sentinel: Unlocked",spoiler:"God protector of a fading land",id:"Hornet2",check:"isUnlocked",wiki:"Hall_of_Gods#Hornet_Sentinel"},Hornet2Attuned:{name:"Hornet Sentinel: Attuned",spoiler:"God protector of a fading land",id:"Hornet2",check:"completedTier1",wiki:"Hall_of_Gods#Hornet_Sentinel"},Hornet2Ascended:{name:"Hornet Sentinel: Ascended",spoiler:"God protector of a fading land",id:"Hornet2",check:"completedTier2",wiki:"Hall_of_Gods#Hornet_Sentinel"},Hornet2Radiant:{name:"Hornet Sentinel: Radiant",spoiler:"God protector of a fading land",id:"Hornet2",check:"completedTier3",wiki:"Hall_of_Gods#Hornet_Sentinel"},MegaMossChargerUnlocked:{name:"Massive Moss Charger: Unlocked",spoiler:"Together we hunt in paths...",id:"MegaMossCharger",check:"isUnlocked",wiki:"Hall_of_Gods#Massive_Moss_Charger"},MegaMossChargerAttuned:{name:"Massive Moss Charger: Attuned",spoiler:"...overgrown with green",id:"MegaMossCharger",check:"completedTier1",wiki:"Hall_of_Gods#Massive_Moss_Charger"},MegaMossChargerAscended:{name:"Massive Moss Charger: Ascended",spoiler:"Restless god of those...",id:"MegaMossCharger",check:"completedTier2",wiki:"Hall_of_Gods#Massive_Moss_Charger"},MegaMossChargerRadiant:{name:"Massive Moss Charger: Radiant",spoiler:"...who band together",id:"MegaMossCharger",check:"completedTier3",wiki:"Hall_of_Gods#Massive_Moss_Charger"},FlukemarmUnlocked:{name:"Flukemarm: Unlocked",spoiler:"I lie within a maze of pipes",id:"Flukemarm",check:"isUnlocked",wiki:"Hall_of_Gods#Flukemarm"},FlukemarmAttuned:{name:"Flukemarm: Attuned",spoiler:"Alluring god of motherhood",id:"Flukemarm",check:"completedTier1",wiki:"Hall_of_Gods#Flukemarm"},FlukemarmAscended:{name:"Flukemarm: Ascended",spoiler:"Alluring god of motherhood",id:"Flukemarm",check:"completedTier2",wiki:"Hall_of_Gods#Flukemarm"},FlukemarmRadiant:{name:"Flukemarm: Radiant",spoiler:"Alluring god of motherhood",id:"Flukemarm",check:"completedTier3",wiki:"Hall_of_Gods#Flukemarm"},MantisLordsUnlocked:{name:"Mantis Lords: Unlocked",spoiler:"We watch over a village of warriors",id:"MantisLords",check:"isUnlocked",wiki:"Hall_of_Gods#Mantis_Lords"},MantisLordsAttuned:{name:"Mantis Lords: Attuned",spoiler:"Noble sister gods of combat",id:"MantisLords",check:"completedTier1",wiki:"Hall_of_Gods#Mantis_Lords"},MantisLordsAscended:{name:"Mantis Lords: Ascended",spoiler:"Noble sister gods of combat",id:"MantisLords",check:"completedTier2",wiki:"Hall_of_Gods#Mantis_Lords"},MantisLordsRadiant:{name:"Mantis Lords: Radiant",spoiler:"Noble sister gods of combat",id:"MantisLords",check:"completedTier3",wiki:"Hall_of_Gods#Mantis_Lords"},MantisLordsExtraUnlocked:{name:"Sisters of Battle: Unlocked",spoiler:"Revered gods of a proud tribe",id:"MantisLordsExtra",check:"isUnlocked",wiki:"Hall_of_Gods#Sisters_of_Battle"},MantisLordsExtraAttuned:{name:"Sisters of Battle: Attuned",spoiler:"Revered gods of a proud tribe",id:"MantisLordsExtra",check:"completedTier1",wiki:"Hall_of_Gods#Sisters_of_Battle"},MantisLordsExtraAscended:{name:"Sisters of Battle: Ascended",spoiler:"Revered gods of a proud tribe",id:"MantisLordsExtra",check:"completedTier2",wiki:"Hall_of_Gods#Sisters_of_Battle"},MantisLordsExtraRadiant:{name:"Sisters of Battle: Radiant",spoiler:"Revered gods of a proud tribe",id:"MantisLordsExtra",check:"completedTier3",wiki:"Hall_of_Gods#Sisters_of_Battle"},OblobblesUnlocked:{name:"Oblobbles: Unlocked",spoiler:"Together we are chained in a strange colosseum",id:"Oblobbles",check:"isUnlocked",wiki:"Hall_of_Gods#Oblobbles"},OblobblesAttuned:{name:"Oblobbles: Attuned",spoiler:"Lover gods of faith and devotion",id:"Oblobbles",check:"completedTier1",wiki:"Hall_of_Gods#Oblobbles"},OblobblesAscended:{name:"Oblobbles: Ascended",spoiler:"Lover gods of faith and devotion",id:"Oblobbles",check:"completedTier2",wiki:"Hall_of_Gods#Oblobbles"},OblobblesRadiant:{name:"Oblobbles: Radiant",spoiler:"Lover gods of faith and devotion",id:"Oblobbles",check:"completedTier3",wiki:"Hall_of_Gods#Oblobbles"},HiveKnightUnlocked:{name:"Hive Knight: Unlocked",spoiler:"I guard the heart of the hive for my Queen",id:"HiveKnight",check:"isUnlocked",wiki:"Hall_of_Gods#Hive_Knight"},HiveKnightAttuned:{name:"Hive Knight: Attuned",spoiler:"Watchful god of duty",id:"HiveKnight",check:"completedTier1",wiki:"Hall_of_Gods#Hive_Knight"},HiveKnightAscended:{name:"Hive Knight: Ascended",spoiler:"Watchful god of duty",id:"HiveKnight",check:"completedTier2",wiki:"Hall_of_Gods#Hive_Knight"},HiveKnightRadiant:{name:"Hive Knight: Radiant",spoiler:"Watchful god of duty",id:"HiveKnight",check:"completedTier3",wiki:"Hall_of_Gods#Hive_Knight"},BrokenVesselUnlocked:{name:"Broken Vessel: Unlocked",spoiler:"I sleep in the deep caves below the world",id:"BrokenVessel",check:"isUnlocked",wiki:"Hall_of_Gods#Broken_Vessel"},BrokenVesselAttuned:{name:"Broken Vessel: Attuned",spoiler:"Broken shell of an empty god",id:"BrokenVessel",check:"completedTier1",wiki:"Hall_of_Gods#Broken_Vessel"},BrokenVesselAscended:{name:"Broken Vessel: Ascended",spoiler:"Broken shell of an empty god",id:"BrokenVessel",check:"completedTier2",wiki:"Hall_of_Gods#Broken_Vessel"},BrokenVesselRadiant:{name:"Broken Vessel: Radiant",spoiler:"Broken shell of an empty god",id:"BrokenVessel",check:"completedTier3",wiki:"Hall_of_Gods#Broken_Vessel"},LostKinUnlocked:{name:"Lost Kin: Unlocked",spoiler:"Lost god of the Abyss",id:"LostKin",check:"isUnlocked",wiki:"Hall_of_Gods#Lost_Kin"},LostKinAttuned:{name:"Lost Kin: Attuned",spoiler:"Lost god of the Abyss",id:"LostKin",check:"completedTier1",wiki:"Hall_of_Gods#Lost_Kin"},LostKinAscended:{name:"Lost Kin: Ascended",spoiler:"Lost god of the Abyss",id:"LostKin",check:"completedTier2",wiki:"Hall_of_Gods#Lost_Kin"},LostKinRadiant:{name:"Lost Kin: Radiant",spoiler:"Lost god of the Abyss",id:"LostKin",check:"completedTier3",wiki:"Hall_of_Gods#Lost_Kin"},NoskUnlocked:{name:"Nosk: Unlocked",spoiler:"I wait patiently in a dark nest of predators",id:"Nosk",check:"isUnlocked",wiki:"Hall_of_Gods#Nosk"},NoskAttuned:{name:"Nosk: Attuned",spoiler:"Everchanging god of the faceless",id:"Nosk",check:"completedTier1",wiki:"Hall_of_Gods#Nosk"},NoskAscended:{name:"Nosk: Ascended",spoiler:"Everchanging god of the faceless",id:"Nosk",check:"completedTier2",wiki:"Hall_of_Gods#Nosk"},NoskRadiant:{name:"Nosk: Radiant",spoiler:"Everchanging god of the faceless",id:"Nosk",check:"completedTier3",wiki:"Hall_of_Gods#Nosk"},NoskHornetUnlocked:{name:"Winged Nosk: Unlocked",spoiler:"Deceptive god assuming a protector's form",id:"NoskHornet",check:"isUnlocked",wiki:"Hall_of_Gods#Winged_Nosk"},NoskHornetAttuned:{name:"Winged Nosk: Attuned",spoiler:"Deceptive god assuming a protector's form",id:"NoskHornet",check:"completedTier1",wiki:"Hall_of_Gods#Winged_Nosk"},NoskHornetAscended:{name:"Winged Nosk: Ascended",spoiler:"Deceptive god assuming a protector's form",id:"NoskHornet",check:"completedTier2",wiki:"Hall_of_Gods#Winged_Nosk"},NoskHornetRadiant:{name:"Winged Nosk: Radiant",spoiler:"Deceptive god assuming a protector's form",id:"NoskHornet",check:"completedTier3",wiki:"Hall_of_Gods#Winged_Nosk"},CollectorUnlocked:{name:"The Collector: Unlocked",spoiler:"I lurk at the peak of a forsaken tower",id:"Collector",check:"isUnlocked",wiki:"Hall_of_Gods#The_Collector"},CollectorAttuned:{name:"The Collector: Attuned",spoiler:"Joyful god of protection",id:"Collector",check:"completedTier1",wiki:"Hall_of_Gods#The_Collector"},CollectorAscended:{name:"The Collector: Ascended",spoiler:"Joyful god of protection",id:"Collector",check:"completedTier2",wiki:"Hall_of_Gods#The_Collector"},CollectorRadiant:{name:"The Collector: Radiant",spoiler:"Joyful god of protection",id:"Collector",check:"completedTier3",wiki:"Hall_of_Gods#The_Collector"},GodTamerUnlocked:{name:"God Tamer: Unlocked",spoiler:"I wait, weapon in hand, within the colosseum",id:"GodTamer",check:"isUnlocked",wiki:"Hall_of_Gods#God_Tamer"},GodTamerAttuned:{name:"God Tamer: Attuned",spoiler:"Gallant god of the arena",id:"GodTamer",check:"completedTier1",wiki:"Hall_of_Gods#God_Tamer"},GodTamerAscended:{name:"God Tamer: Ascended",spoiler:"Gallant god of the arena",id:"GodTamer",check:"completedTier2",wiki:"Hall_of_Gods#God_Tamer"},GodTamerRadiant:{name:"God Tamer: Radiant",spoiler:"Gallant god of the arena",id:"GodTamer",check:"completedTier3",wiki:"Hall_of_Gods#God_Tamer"},CrystalGuardian1Unlocked:{name:"Crystal Guardian: Unlocked",spoiler:"I rest amongst crystals...",id:"CrystalGuardian1",check:"isUnlocked",wiki:"Hall_of_Gods#Crystal_Guardian"},CrystalGuardian1Attuned:{name:"Crystal Guardian: Attuned",spoiler:"...and strange machinery",id:"CrystalGuardian1",check:"completedTier1",wiki:"Hall_of_Gods#Crystal_Guardian"},CrystalGuardian1Ascended:{name:"Crystal Guardian: Ascended",spoiler:"Shining god of greed",id:"CrystalGuardian1",check:"completedTier2",wiki:"Hall_of_Gods#Crystal_Guardian"},CrystalGuardian1Radiant:{name:"Crystal Guardian: Radiant",spoiler:"Shining god of greed",id:"CrystalGuardian1",check:"completedTier3",wiki:"Hall_of_Gods#Crystal_Guardian"},CrystalGuardian2Unlocked:{name:"Enraged Guardian: Unlocked",spoiler:"Shining god of greed",id:"CrystalGuardian2",check:"isUnlocked",wiki:"Hall_of_Gods#Enraged_Guardian"},CrystalGuardian2Attuned:{name:"Enraged Guardian: Attuned",spoiler:"Shining god of greed",id:"CrystalGuardian2",check:"completedTier1",wiki:"Hall_of_Gods#Enraged_Guardian"},CrystalGuardian2Ascended:{name:"Enraged Guardian: Ascended",spoiler:"Shining god of greed",id:"CrystalGuardian2",check:"completedTier2",wiki:"Hall_of_Gods#Enraged_Guardian"},CrystalGuardian2Radiant:{name:"Enraged Guardian: Radiant",spoiler:"Shining god of greed",id:"CrystalGuardian2",check:"completedTier3",wiki:"Hall_of_Gods#Enraged_Guardian"},UumuuUnlocked:{name:"Uumuu: Unlocked",spoiler:"I sleep submerged in the depths of the archive",id:"Uumuu",check:"isUnlocked",wiki:"Hall_of_Gods#Uumuu"},UumuuAttuned:{name:"Uumuu: Attuned",spoiler:"Uncanny god of knowledge",id:"Uumuu",check:"completedTier1",wiki:"Hall_of_Gods#Uumuu"},UumuuAscended:{name:"Uumuu: Ascended",spoiler:"Uncanny god of knowledge",id:"Uumuu",check:"completedTier2",wiki:"Hall_of_Gods#Uumuu"},UumuuRadiant:{name:"Uumuu: Radiant",spoiler:"Uncanny god of knowledge",id:"Uumuu",check:"completedTier3",wiki:"Hall_of_Gods#Uumuu"},TraitorLordUnlocked:{name:"Traitor Lord: Unlocked",spoiler:"I defile the gardens of false royalty",id:"TraitorLord",check:"isUnlocked",wiki:"Hall_of_Gods#Traitor_Lord"},TraitorLordAttuned:{name:"Traitor Lord: Attuned",spoiler:"Treacherous god of anger",id:"TraitorLord",check:"completedTier1",wiki:"Hall_of_Gods#Traitor_Lord"},TraitorLordAscended:{name:"Traitor Lord: Ascended",spoiler:"Treacherous god of anger",id:"TraitorLord",check:"completedTier2",wiki:"Hall_of_Gods#Traitor_Lord"},TraitorLordRadiant:{name:"Traitor Lord: Radiant",spoiler:"Treacherous god of anger",id:"TraitorLord",check:"completedTier3",wiki:"Hall_of_Gods#Traitor_Lord"},GreyPrinceUnlocked:{name:"Grey Prince Zote: Unlocked",spoiler:"I serve my Queen inside her dreams",id:"GreyPrince",check:"isUnlocked",wiki:"Hall_of_Gods#Grey_Prince_Zote"},GreyPrinceAttuned:{name:"Grey Prince Zote: Attuned",spoiler:"False god conjured by the lonely",id:"GreyPrince",check:"completedTier1",wiki:"Hall_of_Gods#Grey_Prince_Zote"},GreyPrinceAscended:{name:"Grey Prince Zote: Ascended",spoiler:"False god conjured by the lonely",id:"GreyPrince",check:"completedTier2",wiki:"Hall_of_Gods#Grey_Prince_Zote"},GreyPrinceRadiant:{name:"Grey Prince Zote: Radiant",spoiler:"False god conjured by the lonely",id:"GreyPrince",check:"completedTier3",wiki:"Hall_of_Gods#Grey_Prince_Zote"},MageKnightUnlocked:{name:"Soul Warrior: Unlocked",spoiler:"I haunt the halls of a sanctum",id:"MageKnight",check:"isUnlocked",wiki:"Hall_of_Gods#Soul_Warrior"},MageKnightAttuned:{name:"Soul Warrior: Attuned",spoiler:"Haunted god of the sanctum",id:"MageKnight",check:"completedTier1",wiki:"Hall_of_Gods#Soul_Warrior"},MageKnightAscended:{name:"Soul Warrior: Ascended",spoiler:"Haunted god of the sanctum",id:"MageKnight",check:"completedTier2",wiki:"Hall_of_Gods#Soul_Warrior"},MageKnightRadiant:{name:"Soul Warrior: Radiant",spoiler:"Haunted god of the sanctum",id:"MageKnight",check:"completedTier3",wiki:"Hall_of_Gods#Soul_Warrior"},SoulMasterUnlocked:{name:"Soul Master: Unlocked",spoiler:"Immortal, I rule the Sanctum",id:"SoulMaster",check:"isUnlocked",wiki:"Hall_of_Gods#Soul_Master"},SoulMasterAttuned:{name:"Soul Master: Attuned",spoiler:"Covetous god of soul",id:"SoulMaster",check:"completedTier1",wiki:"Hall_of_Gods#Soul_Master"},SoulMasterAscended:{name:"Soul Master: Ascended",spoiler:"Covetous god of soul",id:"SoulMaster",check:"completedTier2",wiki:"Hall_of_Gods#Soul_Master"},SoulMasterRadiant:{name:"Soul Master: Radiant",spoiler:"Covetous god of soul",id:"SoulMaster",check:"completedTier3",wiki:"Hall_of_Gods#Soul_Master"},SoulTyrantUnlocked:{name:"Soul Tyrant: Unlocked",spoiler:"Frenzied god of mortality",id:"SoulTyrant",check:"isUnlocked",wiki:"Hall_of_Gods#Soul_Tyrant"},SoulTyrantAttuned:{name:"Soul Tyrant: Attuned",spoiler:"Frenzied god of mortality",id:"SoulTyrant",check:"completedTier1",wiki:"Hall_of_Gods#Soul_Tyrant"},SoulTyrantAscended:{name:"Soul Tyrant: Ascended",spoiler:"Frenzied god of mortality",id:"SoulTyrant",check:"completedTier2",wiki:"Hall_of_Gods#Soul_Tyrant"},SoulTyrantRadiant:{name:"Soul Tyrant: Radiant",spoiler:"Frenzied god of mortality",id:"SoulTyrant",check:"completedTier3",wiki:"Hall_of_Gods#Soul_Tyrant"},DungDefenderUnlocked:{name:"Dung Defender: Unlocked",spoiler:"I protect the pipeways of the kingdom",id:"DungDefender",check:"isUnlocked",wiki:"Hall_of_Gods#Dung_Defender"},DungDefenderAttuned:{name:"Dung Defender: Attuned",spoiler:"Kindly god of bravery and honour",id:"DungDefender",check:"completedTier1",wiki:"Hall_of_Gods#Dung_Defender"},DungDefenderAscended:{name:"Dung Defender: Ascended",spoiler:"Kindly god of bravery and honour",id:"DungDefender",check:"completedTier2",wiki:"Hall_of_Gods#Dung_Defender"},DungDefenderRadiant:{name:"Dung Defender: Radiant",spoiler:"Kindly god of bravery and honour",id:"DungDefender",check:"completedTier3",wiki:"Hall_of_Gods#Dung_Defender"},WhiteDefenderUnlocked:{name:"White Defender: Unlocked",spoiler:"Kindly god of bravery and honour",id:"WhiteDefender",check:"isUnlocked",wiki:"Hall_of_Gods#White_Defender"},WhiteDefenderAttuned:{name:"White Defender: Attuned",spoiler:"Kindly god of bravery and honour",id:"WhiteDefender",check:"completedTier1",wiki:"Hall_of_Gods#White_Defender"},WhiteDefenderAscended:{name:"White Defender: Ascended",spoiler:"Kindly god of bravery and honour",id:"WhiteDefender",check:"completedTier2",wiki:"Hall_of_Gods#White_Defender"},WhiteDefenderRadiant:{name:"White Defender: Radiant",spoiler:"Kindly god of bravery and honour",id:"WhiteDefender",check:"completedTier3",wiki:"Hall_of_Gods#White_Defender"},WatcherKnightsUnlocked:{name:"Watcher Knight: Unlocked",spoiler:"We lie dormant, guarding the Spire's peak",id:"WatcherKnights",check:"isUnlocked",wiki:"Hall_of_Gods#Watcher_Knight"},WatcherKnightsAttuned:{name:"Watcher Knight: Attuned",spoiler:"Sentinel gods of the spire",id:"WatcherKnights",check:"completedTier1",wiki:"Hall_of_Gods#Watcher_Knight"},WatcherKnightsAscended:{name:"Watcher Knight: Ascended",spoiler:"Sentinel gods of the spire",id:"WatcherKnights",check:"completedTier2",wiki:"Hall_of_Gods#Watcher_Knight"},WatcherKnightsRadiant:{name:"Watcher Knight: Radiant",spoiler:"Sentinel gods of the spire",id:"WatcherKnights",check:"completedTier3",wiki:"Hall_of_Gods#Watcher_Knight"},NoEyesUnlocked:{name:"No Eyes: Unlocked",spoiler:"I lie dreaming in a silent sanctuary",id:"NoEyes",check:"isUnlocked",wiki:"Hall_of_Gods#No_Eyes"},NoEyesAttuned:{name:"No Eyes: Attuned",spoiler:"Dreamborn god of fear and relief",id:"NoEyes",check:"completedTier1",wiki:"Hall_of_Gods#No_Eyes"},NoEyesAscended:{name:"No Eyes: Ascended",spoiler:"Dreamborn god of fear and relief",id:"NoEyes",check:"completedTier2",wiki:"Hall_of_Gods#No_Eyes"},NoEyesRadiant:{name:"No Eyes: Radiant",spoiler:"Dreamborn god of fear and relief",id:"NoEyes",check:"completedTier3",wiki:"Hall_of_Gods#No_Eyes"},MarmuUnlocked:{name:"Marmu: Unlocked",spoiler:"I lie dreaming patiently in a garden",id:"Marmu",check:"isUnlocked",wiki:"Hall_of_Gods#Marmu"},MarmuAttuned:{name:"Marmu: Attuned",spoiler:"Dreamborn god of gardens",id:"Marmu",check:"completedTier1",wiki:"Hall_of_Gods#Marmu"},MarmuAscended:{name:"Marmu: Ascended",spoiler:"Dreamborn god of gardens",id:"Marmu",check:"completedTier2",wiki:"Hall_of_Gods#Marmu"},MarmuRadiant:{name:"Marmu: Radiant",spoiler:"Dreamborn god of gardens",id:"Marmu",check:"completedTier3",wiki:"Hall_of_Gods#Marmu"},GalienUnlocked:{name:"Galien: Unlocked",spoiler:"I lie dreaming in darkness, surrounded by predators",id:"Galien",check:"isUnlocked",wiki:"Hall_of_Gods#Galien"},GalienAttuned:{name:"Galien: Attuned",spoiler:"Dreamborn god of heroic hearts",id:"Galien",check:"completedTier1",wiki:"Hall_of_Gods#Galien"},GalienAscended:{name:"Galien: Ascended",spoiler:"Dreamborn god of heroic hearts",id:"Galien",check:"completedTier2",wiki:"Hall_of_Gods#Galien"},GalienRadiant:{name:"Galien: Radiant",spoiler:"Dreamborn god of heroic hearts",id:"Galien",check:"completedTier3",wiki:"Hall_of_Gods#Galien"},MarkothUnlocked:{name:"Markoth: Unlocked",spoiler:"I lie dreaming at the edge of the world",id:"Markoth",check:"isUnlocked",wiki:"Hall_of_Gods#Markoth"},MarkothAttuned:{name:"Markoth: Attuned",spoiler:"Dreamborn god of meditation and isolation",id:"Markoth",check:"completedTier1",wiki:"Hall_of_Gods#Markoth"},MarkothAscended:{name:"Markoth: Ascended",spoiler:"Dreamborn god of meditation and isolation",id:"Markoth",check:"completedTier2",wiki:"Hall_of_Gods#Markoth"},MarkothRadiant:{name:"Markoth: Radiant",spoiler:"Dreamborn god of meditation and isolation",id:"Markoth",check:"completedTier3",wiki:"Hall_of_Gods#Markoth"},XeroUnlocked:{name:"Xero: Unlocked",spoiler:"I lie dreaming amongst peaceful graves",id:"Xero",check:"isUnlocked",wiki:"Hall_of_Gods#Xero"},XeroAttuned:{name:"Xero: Attuned",spoiler:"Dreamborn god of faith and betrayal",id:"Xero",check:"completedTier1",wiki:"Hall_of_Gods#Xero"},XeroAscended:{name:"Xero: Ascended",spoiler:"Dreamborn god of faith and betrayal",id:"Xero",check:"completedTier2",wiki:"Hall_of_Gods#Xero"},XeroRadiant:{name:"Xero: Radiant",spoiler:"Dreamborn god of faith and betrayal",id:"Xero",check:"completedTier3",wiki:"Hall_of_Gods#Xero"},GorbUnlocked:{name:"Gorb: Unlocked",spoiler:"I lie dreaming at a wind-blasted peak",id:"Gorb",check:"isUnlocked",wiki:"Hall_of_Gods#Gorb"},GorbAttuned:{name:"Gorb: Attuned",spoiler:"Dreamborn god of the beyond",id:"Gorb",check:"completedTier1",wiki:"Hall_of_Gods#Gorb"},GorbAscended:{name:"Gorb: Ascended",spoiler:"Dreamborn god of the beyond",id:"Gorb",check:"completedTier2",wiki:"Hall_of_Gods#Gorb"},GorbRadiant:{name:"Gorb: Radiant",spoiler:"Dreamborn god of the beyond",id:"Gorb",check:"completedTier3",wiki:"Hall_of_Gods#Gorb"},ElderHuUnlocked:{name:"Elder Hu: Unlocked",spoiler:"I lie dreaming in the wastes",id:"ElderHu",check:"isUnlocked",wiki:"Hall_of_Gods#Elder_Hu"},ElderHuAttuned:{name:"Elder Hu: Attuned",spoiler:"Dreamborn god of travellers and sages",id:"ElderHu",check:"completedTier1",wiki:"Hall_of_Gods#Elder_Hu"},ElderHuAscended:{name:"Elder Hu: Ascended",spoiler:"Dreamborn god of travellers and sages",id:"ElderHu",check:"completedTier2",wiki:"Hall_of_Gods#Elder_Hu"},ElderHuRadiant:{name:"Elder Hu: Radiant",spoiler:"Dreamborn god of travellers and sages",id:"ElderHu",check:"completedTier3",wiki:"Hall_of_Gods#Elder_Hu"},NailmastersUnlocked:{name:"Oro & Mato: Unlocked",spoiler:"Together, we stand at a Pantheon's peak",id:"Nailmasters",check:"isUnlocked",wiki:"Hall_of_Gods#Oro_.26_Mato"},NailmastersAttuned:{name:"Oro & Mato: Attuned",spoiler:"Loyal brother gods of the nail",id:"Nailmasters",check:"completedTier1",wiki:"Hall_of_Gods#Oro_.26_Mato"},NailmastersAscended:{name:"Oro & Mato: Ascended",spoiler:"Loyal brother gods of the nail",id:"Nailmasters",check:"completedTier2",wiki:"Hall_of_Gods#Oro_.26_Mato"},NailmastersRadiant:{name:"Oro & Mato: Radiant",spoiler:"Loyal brother gods of the nail",id:"Nailmasters",check:"completedTier3",wiki:"Hall_of_Gods#Oro_.26_Mato"},PaintmasterUnlocked:{name:"Paintmaster Sheo: Unlocked",spoiler:"I hone my craft at a Pantheon's peak",id:"Paintmaster",check:"isUnlocked",wiki:"Hall_of_Gods#Paintmaster_Sheo"},PaintmasterAttuned:{name:"Paintmaster Sheo: Attuned",spoiler:"Talented god of artists and creators",id:"Paintmaster",check:"completedTier1",wiki:"Hall_of_Gods#Paintmaster_Sheo"},PaintmasterAscended:{name:"Paintmaster Sheo: Ascended",spoiler:"Talented god of artists and creators",id:"Paintmaster",check:"completedTier2",wiki:"Hall_of_Gods#Paintmaster_Sheo"},PaintmasterRadiant:{name:"Paintmaster Sheo: Radiant",spoiler:"Talented god of artists and creators",id:"Paintmaster",check:"completedTier3",wiki:"Hall_of_Gods#Paintmaster_Sheo"},SlyUnlocked:{name:"Nailsage Sly: Unlocked",spoiler:"I await you at a Pantheon's peak",id:"Sly",check:"isUnlocked",wiki:"Hall_of_Gods#Nailsage_Sly"},SlyAttuned:{name:"Nailsage Sly: Attuned",spoiler:"Cunning god of opportunity",id:"Sly",check:"completedTier1",wiki:"Hall_of_Gods#Nailsage_Sly"},SlyAscended:{name:"Nailsage Sly: Ascended",spoiler:"Cunning god of opportunity",id:"Sly",check:"completedTier2",wiki:"Hall_of_Gods#Nailsage_Sly"},SlyRadiant:{name:"Nailsage Sly: Radiant",spoiler:"Cunning god of opportunity",id:"Sly",check:"completedTier3",wiki:"Hall_of_Gods#Nailsage_Sly"},HollowKnightUnlocked:{name:"Pure Vessel: Unlocked",spoiler:"This empty god stands at a Pantheon's peak",id:"HollowKnight",check:"isUnlocked",wiki:"Hall_of_Gods#Pure_Vessel"},HollowKnightAttuned:{name:"Pure Vessel: Attuned",spoiler:"Mighty god of nothingness",id:"HollowKnight",check:"completedTier1",wiki:"Hall_of_Gods#Pure_Vessel"},HollowKnightAscended:{name:"Pure Vessel: Ascended",spoiler:"Mighty god of nothingness",id:"HollowKnight",check:"completedTier2",wiki:"Hall_of_Gods#Pure_Vessel"},HollowKnightRadiant:{name:"Pure Vessel: Radiant",spoiler:"Mighty god of nothingness",id:"HollowKnight",check:"completedTier3",wiki:"Hall_of_Gods#Pure_Vessel"},GrimmUnlocked:{name:"Grimm: Unlocked",spoiler:"I await the lighting of the lantern",id:"Grimm",check:"isUnlocked",wiki:"Hall_of_Gods#Grimm"},GrimmAttuned:{name:"Grimm: Attuned",spoiler:"Travelling god of the troupe",id:"Grimm",check:"completedTier1",wiki:"Hall_of_Gods#Grimm"},GrimmAscended:{name:"Grimm: Ascended",spoiler:"Travelling god of the troupe",id:"Grimm",check:"completedTier2",wiki:"Hall_of_Gods#Grimm"},GrimmRadiant:{name:"Grimm: Radiant",spoiler:"Travelling god of the troupe",id:"Grimm",check:"completedTier3",wiki:"Hall_of_Gods#Grimm"},NightmareGrimmUnlocked:{name:"Nightmare King: Unlocked",spoiler:"God of nightmares",id:"NightmareGrimm",check:"isUnlocked",wiki:"Hall_of_Gods#Nightmare_King"},NightmareGrimmAttuned:{name:"Nightmare King: Attuned",spoiler:"God of nightmares",id:"NightmareGrimm",check:"completedTier1",wiki:"Hall_of_Gods#Nightmare_King"},NightmareGrimmAscended:{name:"Nightmare King: Ascended",spoiler:"God of nightmares",id:"NightmareGrimm",check:"completedTier2",wiki:"Hall_of_Gods#Nightmare_King"},NightmareGrimmRadiant:{name:"Nightmare King: Radiant",spoiler:"God of nightmares",id:"NightmareGrimm",check:"completedTier3",wiki:"Hall_of_Gods#Nightmare_King"},RadianceUnlocked:{name:"Radiance: Unlocked",spoiler:"Forgotten god of light",id:"Radiance",check:"isUnlocked",wiki:"Hall_of_Gods#Radiance"},RadianceAttuned:{name:"Radiance: Attuned",spoiler:"Forgotten god of light",id:"Radiance",check:"completedTier1",wiki:"Hall_of_Gods#Radiance"},RadianceAscended:{name:"Radiance: Ascended",spoiler:"Forgotten god of light",id:"Radiance",check:"completedTier2",wiki:"Hall_of_Gods#Radiance"},RadianceRadiant:{name:"Radiance: Radiant",spoiler:"Forgotten god of light",id:"Radiance",check:"completedTier3",wiki:"Hall_of_Gods#Radiance"}}}}};var n=r(49794);const i={Tutorial_01:"King's Pass",Town:"Dirtmouth",Room_shop:"Dirtmouth: Sly's Shop",Room_Sly_Storeroom:"Dirtmouth: Sly's Shop Basement",Room_Town_Stag_Station:"Dirtmouth: Stag Station",Room_mapper:"Dirtmouth: Iselda's Shop",Room_Bretta:"Dirtmouth: Bretta's Room",Room_Bretta_Basement:"Dirtmouth: Bretta's Room Basement",Room_Ouiji:"Dirtmouth: Jiji's Hut",Room_Jinn:"Dirtmouth: Jinn's Hut",Room_Tram_RG:"Upper Tram",Room_Tram:"Lower Tram",Crossroads_01:"Forgotten Crossroads: Well",Crossroads_02:"Forgotten Crossroads: Outside Temple of the Black Egg",Crossroads_03:"Forgotten Crossroads: Outside Stag Station",Crossroads_04:"Forgotten Crossroads: Gruz Mother",Crossroads_05:"Forgotten Crossroads: Central Grub",Crossroads_06:"Forgotten Crossroads: Outside Ancestral Mound",Crossroads_07:"Forgotten Crossroads: Gruzzer Vertical Room",Crossroads_08:"Forgotten Crossroads: Aspid Arena",Crossroads_09:"Forgotten Crossroads: Brooding Mawlek Boss",Crossroads_10:"Forgotten Crossroads: False Knight Arena",Crossroads_11_alt:"Forgotten Crossroads: Greenpath Entrance",Crossroads_12:"Forgotten Crossroads: Corridor to Acid Grub",Crossroads_13:"Forgotten Crossroads: Goam Mask Shard",Crossroads_14:"Forgotten Crossroads: Outside Myla",Crossroads_15:"Forgotten Crossroads: Corridor to Tram",Crossroads_16:"Forgotten Crossroads: Above Lever",Crossroads_18:"Forgotten Crossroads: Fungal Wastes Entrance",Crossroads_19:"Forgotten Crossroads: Before Gruz Mother",Crossroads_21:"Forgotten Crossroads: Outside False Knight",Crossroads_22:"Forgotten Crossroads: Glowing Womb Arena",Crossroads_25:"Forgotten Crossroads: Brooding Mawlek Entrance",Crossroads_27:"Forgotten Crossroads: Outside Tram",Crossroads_30:"Forgotten Crossroads: Hot Spring",Crossroads_31:"Forgotten Crossroads: Spike Grub",Crossroads_33:"Forgotten Crossroads: Cornifer",Crossroads_35:"Forgotten Crossroads: Acid Grub",Crossroads_36:"Forgotten Crossroads: Brooding Mawlek Middle",Crossroads_37:"Forgotten Crossroads: Vessel Fragment",Crossroads_38:"Forgotten Crossroads: Grubfather",Crossroads_39:"Forgotten Crossroads: Corridor Right of Temple of the Black Egg",Crossroads_40:"Forgotten Crossroads: Corridor Right of Central Grub",Crossroads_42:"Forgotten Crossroads: Right of Mask Shard",Crossroads_43:"Forgotten Crossroads: Corridor to Elevator",Crossroads_45:"Forgotten Crossroads: Myla",Crossroads_46:"Forgotten Crossroads: Tram",Crossroads_47:"Forgotten Crossroads: Stag Station",Crossroads_48:"Forgotten Crossroads: Husk Guard Grub",Crossroads_49:"Forgotten Crossroads: Elevator",Crossroads_52:"Forgotten Crossroads: Goam Journal",Crossroads_ShamanTemple:"Forgotten Crossroads: Ancestral Mound",Room_Mender_House:"Forgotten Crossroads: Menderbug House",Room_Charm_Shop:"Forgotten Crossroads: Salubra's Shop",Room_ruinhouse:"Forgotten Crossroads: Rescue Sly Hut",Room_temple:"Forgotten Crossroads: Inside Temple of the Black Egg",Fungus1_01:"Greenpath: Entrance",Fungus1_01b:"Greenpath: Waterfall Bench",Fungus1_02:"Greenpath: First Hornet Sighting",Fungus1_03:"Greenpath: Storerooms",Fungus1_04:"Greenpath: Hornet",Fungus1_05:"Greenpath: Outside Thorns",Fungus1_06:"Greenpath: Cornifer",Fungus1_07:"Greenpath: Outside Hunter",Fungus1_08:"Greenpath: Hunter",Fungus1_09:"Greenpath: Sheo Gauntlet",Fungus1_10:"Greenpath: Acid Bridge",Fungus1_11:"Greenpath: Above Fog Canyon",Fungus1_12:"Greenpath: Massive Moss Charger Corridor",Fungus1_13:"Greenpath: Whispering Root",Fungus1_14:"Greenpath: Thorns of Agony",Fungus1_15:"Greenpath: Outside Sheo",Fungus1_16_alt:"Greenpath: Stag Station",Fungus1_17:"Greenpath: Moss Charger Corridor",Fungus1_19:"Greenpath: Above Sanctuary Bench",Fungus1_20_v02:"Greenpath: Vengefly King",Fungus1_21:"Greenpath: Outside Hornet",Fungus1_22:"Greenpath: Outside Stag Station",Fungus1_25:"Greenpath: Corridor to Lake of Unn",Fungus1_26:"Greenpath: Lake Of Unn",Fungus1_29:"Greenpath: Massive Moss Charger",Fungus1_30:"Greenpath: Below Toll Bench",Fungus1_31:"Greenpath: Toll",Fungus1_32:"Greenpath: Moss Knight Arena",Fungus1_34:"Greenpath: Stone Sanctuary Entrance",Fungus1_35:"Greenpath: Stone Sanctuary",Fungus1_36:"Greenpath: Stone Sanctuary Mask Shard",Fungus1_37:"Greenpath: Stone Sanctuary Bench",Fungus1_Slug:"Greenpath: Unn",Room_nailmaster_02:"Greenpath: Sheo",Room_Slug_Shrine:"Greenpath: Lake of Unn Bench",Deepnest_01:"Fungal Wastes: Deepnest Fall",Fungus2_01:"Fungal Wastes: Queen's Station",Fungus2_02:"Fungal Wastes: Queen's Station Stag",Fungus2_03:"Fungal Wastes: Outside Queen's Station",Fungus2_04:"Fungal Wastes: Below Shrumal Ogres",Fungus2_05:"Fungal Wastes: Shrumal Ogres",Fungus2_06:"Fungal Wastes: Outside Leg Eater",Fungus2_07:"Fungal Wastes: Shrumal Warrior Acid Bridge",Fungus2_08:"Fungal Wastes: Outside Elder Hu",Fungus2_09:"Fungal Wastes: Cloth Corridor",Fungus2_10:"Fungal Wastes: Left Of Pilgrim's Way",Fungus2_11:"Fungal Wastes: Right of Bouncy Mushroom Grub",Fungus2_12:"Fungal Wastes: Mantis Corridor",Fungus2_13:"Fungal Wastes: Bretta Bench",Fungus2_14:"Fungal Wastes: Mantis Village",Fungus2_15:"Fungal Wastes: Mantis Lords",Fungus2_17:"Fungal Wastes: Above Mantis Village",Fungus2_18:"Fungal Wastes: Cornifer",Fungus2_19:"Fungal Wastes: Right Of Spore Shroom",Fungus2_20:"Fungal Wastes: Spore Shroom",Fungus2_21:"Fungal Wastes: Pilgrim's Way",Fungus2_23:"Fungal Wastes: Dashmaster",Fungus2_26:"Fungal Wastes: Leg Eater",Fungus2_28:"Fungal Wastes: Shrumal Warrior Loop",Fungus2_29:"Fungal Wastes: Fungal Core Upper",Fungus2_30:"Fungal Wastes: Fungal Core Lower",Fungus2_31:"Fungal Wastes: Mantis Lords Rewards",Fungus2_32:"Fungal Wastes: Elder Hu",Fungus2_33:"Fungal Wastes: Whispering Root near Fog Canyon",Fungus2_34:"Fungal Wastes: Willoh",Fungus3_01:"Fog Canyon: Upper West Tall",Fungus3_02:"Fog Canyon: Lower West Tall",Fungus3_03:"Fog Canyon: Queen's Gardens Acid Entrance",Fungus3_24:"Fog Canyon: Corridor to Overgrown Mound",Fungus3_25:"Fog Canyon: Cornifer",Fungus3_25b:"Fog Canyon: Corridor to Cornifer",Fungus3_26:"Fog Canyon: Right Tall Area",Fungus3_27:"Fog Canyon: Corridor to Archives",Fungus3_28:"Fog Canyon: Charm Notch",Fungus3_30:"Fog Canyon: Lifeblood Cocoon Room",Fungus3_35:"Fog Canyon: Millibelle",Fungus3_44:"Fog Canyon: Overgrown Mound Entrance",Fungus3_47:"Fog Canyon: Teacher's Archives Entrance",Fungus3_archive:"Fog Canyon: Teacher's Archives Bench",Fungus3_archive_02:"Fog Canyon: Uumuu Arena",Room_Fungus_Shaman:"Fog Canyon: Overgrown Mound",Cliffs_01:"Howling Cliffs: Main",Cliffs_02:"Howling Cliffs: Gorb",Cliffs_03:"Howling Cliffs: Stag Nest",Cliffs_04:"Howling Cliffs: Joni's Dark Passage",Cliffs_05:"Howling Cliffs: Joni's Charm Room",Cliffs_06:"Howling Cliffs: Grimm Lantern",Fungus1_28:"Howling Cliffs: Baldur's Shell",Room_nailmaster:"Howling Cliffs: Nailmaster Mato",Mines_01:"Crystal Peak: Desolate Dive Entrance",Mines_02:"Crystal Peak: Dark Entrance",Mines_03:"Crystal Peak: Spike Grub",Mines_04:"Crystal Peak: Conveyor Belts Entrance",Mines_05:"Crystal Peak: Above Spike Grub",Mines_06:"Crystal Peak: Deep Focus Gauntlet",Mines_07:"Crystal Peak: Platform Dark Room to Resting Grounds",Mines_10:"Crystal Peak: Dirtmouth Elevator Exit",Mines_11:"Crystal Peak: Left Of Crystal Guardian",Mines_13:"Crystal Peak: Top Corridor",Mines_16:"Crystal Peak: Grub Mimic",Mines_17:"Crystal Peak: Corridor to Spike Grub",Mines_18:"Crystal Peak: Crystal Guardian Bench",Mines_19:"Crystal Peak: Grub Crushers",Mines_20:"Crystal Peak: Right Tall Room",Mines_23:"Crystal Peak: Hallownest Crown Whispering Root",Mines_24:"Crystal Peak: Hallownest Crown Grub",Mines_25:"Crystal Peak: Hallownest Crown Climb",Mines_28:"Crystal Peak: Outside Crystallized Mound",Mines_29:"Crystal Peak: Dark Bench Room",Mines_30:"Crystal Peak: Cornifer",Mines_31:"Crystal Peak: Crystal Heart Gauntlet",Mines_32:"Crystal Peak: Enraged Guardian Arena",Mines_33:"Forgotten Crossroads: Crystal Peak Dark Toll",Mines_34:"Crystal Peak: Hallownest Crown Peak",Mines_35:"Crystal Peak: Crystallized Mound",Mines_36:"Crystal Peak: Deep Focus Room",Mines_37:"Crystal Peak: Chest Crushers",Abyss_02:"Ancient Basin: Broken Bridge",Abyss_03:"Ancient Basin: Tram",Abyss_04:"Ancient Basin: Fountain",Abyss_05:"Ancient Basin: Palace Grounds",Abyss_17:"Ancient Basin: Cloth",Abyss_18:"Ancient Basin: Corridor to Broken Vessel",Abyss_19:"Ancient Basin: Broken Vessel Grub",Abyss_20:"Ancient Basin: Simple Key",Abyss_21:"Ancient Basin: Monarch Wings",Abyss_22:"Ancient Basin: Hidden Station",Abyss_06_Core:"The Abyss: Main/Core Area",Abyss_08:"The Abyss: Lifeblood Core Room",Abyss_09:"The Abyss: Lighthouse Climb",Abyss_10:"The Abyss: Shade Cloak",Abyss_12:"The Abyss: Abyss Shriek Room",Abyss_15:"The Abyss: Birthplace",Abyss_16:"The Abyss: Corridor to Lighthouse",Abyss_Lighthouse_room:"The Abyss: Inside Lighthouse",Crossroads_46b:"Resting Grounds: Tram",Crossroads_50:"Resting Grounds: Blue Lake",RestingGrounds_02:"Resting Grounds: Xero",RestingGrounds_04:"Resting Grounds: Dream Nail Entrance",RestingGrounds_05:"Resting Grounds: Whispering Root",RestingGrounds_06:"Resting Grounds: Corridor Below Xero",RestingGrounds_07:"Resting Grounds: Seer",RestingGrounds_08:"Resting Grounds: Spirit's Glade",RestingGrounds_09:"Resting Grounds: Stag Station",RestingGrounds_10:"Resting Grounds: Crypts",RestingGrounds_12:"Resting Grounds: Grey Mourner Bench",RestingGrounds_17:"Resting Grounds: Dreamshield Room",Room_Mansion:"Resting Grounds: Grey Mourner Room",Ruins2_10:"Resting Grounds: Elevator",Abyss_03_c:"Kingdom's Edge: Tram",Deepnest_East_01:"Kingdom's Edge: Left of The Hive",Deepnest_East_02:"Kingdom's Edge: Above The Hive",Deepnest_East_03:"Kingdom's Edge: Entrance",Deepnest_East_04:"Kingdom's Edge: Bardoon",Deepnest_East_06:"Kingdom's Edge: Outside Nailmaster Oro",Deepnest_East_07:"Kingdom's Edge: Whispering Root",Deepnest_East_08:"Kingdom's Edge: Great Hopper King's Idol",Deepnest_East_09:"Kingdom's Edge: Corridor Outside Colosseum of Fools",Deepnest_East_10:"Kingdom's Edge: Markoth Arena",Deepnest_East_11:"Kingdom's Edge: Below Camp Bench",Deepnest_East_12:"Kingdom's Edge: Hornet Sentinel Corridor",Deepnest_East_13:"Kingdom's Edge: Camp Bench",Deepnest_East_14:"Kingdom's Edge: Below Nailmaster Oro",Deepnest_East_14b:"Kingdom's Edge: Quick Slash Room",Deepnest_East_15:"Kingdom's Edge: Lifeblood Room",Deepnest_East_16:"Kingdom's Edge: Nailmaster Oro Scarecrow",Deepnest_East_17:"Kingdom's Edge: 420 Geo Rock",Deepnest_East_18:"Kingdom's Edge: Left of Markoth",Deepnest_East_Hornet:"Kingdom's Edge: Hornet Sentinel Arena",GG_Lurker:"Kingdom's Edge: Pale Lurker Arena",Room_Colosseum_01:"Kingdom's Edge: Colosseum of Fools Entrance",Room_Colosseum_02:"Kingdom's Edge: Colosseum of Fools Bench",Room_Colosseum_Bronze:"Colosseum of Fools: Trial of the Warrior Arena",Room_Colosseum_Gold:"Colosseum of Fools: Trial of the Fool Arena",Room_Colosseum_Silver:"Colosseum of Fools: Trial of the Conqueror Arena",Room_Colosseum_Spectate:"Kingdom's Edge: Colosseum Spectators",Room_nailmaster_03:"Kingdom's Edge: Nailmaster Oro Room",Room_Wyrm:"Kingdom's Edge: Cast-Off Shell",Abyss_01:"City of Tears: Broken Elevator",Crossroads_49b:"City of Tears: Elevator to Forgotten Crossroads",Room_nailsmith:"City of Tears: Nailsmith",Ruins_Bathhouse:"City of Tears: Pleasure House Bench",Ruins_Elevator:"City of Tears: Pleasure House Elevator",Ruins_House_01:"City of Tears: Guarded Grub Room",Ruins_House_02:"City of Tears: Gorgeous Husk Room",Ruins_House_03:"City of Tears: Emilitia Room",Ruins1_01:"City of Tears: Pilgrim's Way Entrance",Ruins1_02:"City of Tears: Quirrel Bench",Ruins1_03:"City of Tears: Rafters",Ruins1_04:"City of Tears: Outside Nailsmith",Ruins1_05:"City of Tears: Grub Above Lemm",Ruins1_05b:"City of Tears: Lemm Room",Ruins1_05c:"City of Tears: Rancid Egg Above Lemm",Ruins1_06:"City of Tears: Corridor to City Storerooms",Ruins1_09:"City of Tears: Soul Twister Arena",Ruins1_17:"City of Tears: Whispering Root",Ruins1_18:"City of Tears: Corridor to Watcher's Spire",Ruins1_23:"City of Tears: Soul Sanctum Entrance",Ruins1_24:"City of Tears: Soul Master Arena",Ruins1_25:"City of Tears: Soul Sanctum Right Elevators",Ruins1_27:"City of Tears: Hollow Knight Fountain",Ruins1_28:"City of Tears: City Storerooms",Ruins1_29:"City of Tears: City Storerooms Stag Station",Ruins1_30:"City of Tears: Soul Sanctum Spell Twister Room",Ruins1_31:"City of Tears: Toll Bench Cornifer",Ruins1_31b:"City of Tears: Shade Soul Arena",Ruins1_32:"City of Tears: Soul Master Rewards Room",Ruins2_01:"City of Tears: Watcher's Spire Second Floor",Ruins2_01_b:"City of Tears: Watcher's Spire First Floor",Ruins2_03:"City of Tears: Watcher's Spire Fourth Floor",Ruins2_03b:"City of Tears: Watcher's Spire Third Floor",Ruins2_04:"City of Tears: Right Hub",Ruins2_05:"City of Tears: Above King's Station",Ruins2_06:"City of Tears: King's Station",Ruins2_07:"City of Tears: Grub Below King's Station",Ruins2_08:"City of Tears: King's Station Stag Station",Ruins2_09:"City of Tears: King's Station Vessel Fragment",Ruins2_10b:"City of Tears: Right Elevator",Ruins2_11:"City of Tears: The Collector Arena",Ruins2_11_b:"City of Tears: Tower of Love",Ruins2_Watcher_Room:"City of Tears: Lurien Elevator",Hive_01:"The Hive: Entrance",Hive_02:"The Hive: Whispering Root",Hive_03:"The Hive: Outside Grub",Hive_03_c:"The Hive: Outside Shortcut",Hive_04:"The Hive: Mask Shard Room",Hive_05:"The Hive: Hive Knight Arena",GG_Pipeway:"Royal Waterways: Flukemunga Corridor",GG_Waterways:"Royal Waterways: Junk Pit",Room_GG_Shortcut:"Royal Waterways: Fluke Hermit Room",Waterways_01:"Royal Waterways: Entrance",Waterways_02:"Royal Waterways: Main Bench",Waterways_03:"Royal Waterways: Tuk Room",Waterways_04:"Royal Waterways: Hidden Grub Room",Waterways_04b:"Royal Waterways: Mask Shard Room",Waterways_05:"Royal Waterways: Dung Defender Arena",Waterways_06:"Royal Waterways: Corridor to Broken Elevator",Waterways_07:"Royal Waterways: Left of Isma's Grove",Waterways_08:"Royal Waterways: Outside Flukemarm",Waterways_09:"Royal Waterways: Cornifer",Waterways_12:"Royal Waterways: Flukemarm Arena",Waterways_13:"Royal Waterways: Isma's Grove",Waterways_14:"Royal Waterways: Kingdom's Edge Acid Corridor",Waterways_15:"Royal Waterways: Dung Defender's Cave",Abyss_03_b:"Deepnest: Tram",Deepnest_01b:"Deepnest: Upper Cornifer",Deepnest_02:"Deepnest: Outside Grub Mimics",Deepnest_03:"Deepnest: Left of Hot Spring",Deepnest_09:"Deepnest: Distant Village Stag Station",Deepnest_10:"Deepnest: Distant Village",Deepnest_14:"Deepnest: Failed Tramway Bench",Deepnest_16:"Deepnest: Room Above Lower Cornifer",Deepnest_17:"Deepnest: Garpede Corridor Below Cornifer",Deepnest_26:"Deepnest: Failed Tramway Lifeblood",Deepnest_26b:"Deepnest: Tram Pass Room",Deepnest_30:"Deepnest: Hot Spring",Deepnest_31:"Deepnest: Nosk Corridor",Deepnest_32:"Deepnest: Nosk Arena",Deepnest_33:"Deepnest: Zote Arena",Deepnest_34:"Deepnest: First Devout",Deepnest_35:"Deepnest: Outside Galien",Deepnest_36:"Deepnest: Grub Mimics",Deepnest_37:"Deepnest: Corridor to Tram",Deepnest_38:"Deepnest: Vessel Fragment Challenge Room",Deepnest_39:"Deepnest: Whispering Root",Deepnest_40:"Deepnest: Galien Arena",Deepnest_41:"Deepnest: Midwife Room",Deepnest_42:"Deepnest: Outside Mask Maker",Deepnest_44:"Deepnest: Sharp Shadow Room",Deepnest_45_v02:"Deepnest: Weaver's Den",Deepnest_Spider_Town:"Deepnest: Beast's Den",Fungus2_25:"Deepnest: Lower Cornifer",Room_Mask_Maker:"Deepnest: Mask Maker Room",Room_spider_small:"Deepnest: Brumm Room",Deepnest_43:"Queen's Gardens: Corridor To Deepnest",Fungus1_23:"Queen's Gardens: First Loodle Corridor",Fungus1_24:"Queen's Gardens: Cornifer Room",Fungus3_04:"Queen's Gardens: Before Petra Arena",Fungus3_05:"Queen's Gardens: Petra Arena",Fungus3_08:"Queen's Gardens: Lower Petra Corridor",Fungus3_10:"Queen's Gardens: Main Arena",Fungus3_11:"Queen's Gardens: Whispering Root",Fungus3_13:"Queen's Gardens: Outside Stag Station",Fungus3_21:"Queen's Gardens: Corridor to Traitor Lord",Fungus3_22:"Queen's Gardens: Upper Grub Room",Fungus3_23:"Queen's Gardens: Traitor Lord Arena",Fungus3_34:"Queen's Gardens: Entrance from Fog Canyon",Fungus3_39:"Queen's Gardens: Moss Prophet Room",Fungus3_49:"Queen's Gardens: Traitor's Child Grave",Fungus3_40:"Queen's Gardens: Stag Station",Fungus3_48:"Queen's Gardens: Outside White Lady",Fungus3_50:"Queen's Gardens: Toll Bench",Room_Queen:"Queen's Gardens: White Lady Room",White_Palace_01:"White Palace: Entrance",White_Palace_02:"White Palace: First Kingsmould",White_Palace_03_hub:"White Palace: Main Hub",White_Palace_04:"White Palace: Left of Main Hub",White_Palace_05:"White Palace: Saw Room",White_Palace_06:"White Palace: Balcony",White_Palace_07:"White Palace: Lamp Pogo Room",White_Palace_08:"White Palace: Pale King's Workshop",White_Palace_09:"White Palace: Throne Room",White_Palace_11:"White Palace: Outside",White_Palace_12:"White Palace: Spike Drop Room",White_Palace_13:"White Palace: Thorn Jump Room",White_Palace_14:"White Palace: Hell Corridor",White_Palace_15:"White Palace: Caged Lever Room",White_Palace_16:"White Palace: Saw Climb Room",White_Palace_17:"White Palace: Path of Pain, Lever",White_Palace_18:"White Palace: Path of Pain, Entrance",White_Palace_19:"White Palace: Path of Pain, Vertical",White_Palace_20:"White Palace: Path of Pain, Final",Dream_Final_Boss:"Temple of the Black Egg: Radiance Room",Room_Final_Boss_Atrium:"Temple of the Black Egg: Bench Room",Room_Final_Boss_Core:"Temple of the Black Egg: Hollow Knight Room",Grimm_Divine:"Dirtmouth: Divine's Tent",Grimm_Main_Tent:"Dirtmouth: Grimm's Tent",Grimm_Nightmare:"Dream: Nightmare King Room",Dream_01_False_Knight:"Dream: Failed Champion Room",Dream_02_Mage_Lord:"Dream: Soul Tyrant Room",Dream_03_Infected_Knight:"Dream: Lost Kin Room",Dream_04_White_Defender:"Dream: White Defender Room",Dream_Abyss:"Dream: Abyss",Dream_Backer_Shrine:"Dream: Outside Shrine of Believers",Dream_Guardian_Hegemol:"Dream: Herrah Room",Dream_Guardian_Lurien:"Dream: Lurien Room",Dream_Guardian_Monomon:"Dream: Monomon Room",Dream_Mighty_Zote:"Dream: Grey Prince Zote Room",Dream_Nailcollection:"Dream: Dreamnail Room",Dream_Room_Believer_Shrine:"Dream: Shrine of Believers",GG_Atrium:"Godhome: Atrium",GG_Atrium_Roof:"Godhome: Roof",GG_Blue_Room:"Godhome: Lifeblood Room",GG_Land_Of_Storms:"Godhome: Land of Storms",GG_Mighty_Zote:"Godhome: Zote Eternal Ordeal",GG_Unlock_Wastes:"Godhome: Godtuner Room",GG_Workshop:"Godhome: Hall of Gods"};function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";switch(e.id){case"hk-intro":case"hk-hints":break;case"hk-equipment":e.percent+=2;break;case"hk-journal":e.percent++,e.midPercent++;break;default:e.percent++}e.entries[t].icon="green"}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";e.entries[t].icon="partial"}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";"hk-journal"===e.id&&e.midPercent++,e.entries[t].icon="partialJournal"}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";e.entries[t].icon="red"}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";e.entries[t].icon="none"}function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";e.entries[t].icon=r}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,r=e;return t.hasOwnProperty(e)&&(r=t[e]),r}function m(e,t){for(var r=0;r",g=["
"].join("\n"),k=(["
"].join("\n"),["
"].join("\n")),w="";function y(e){var t,r,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:performance.now();if(n.benchmarkTimes.CheckCompletion.timeStart=i,!e.hasOwnProperty("playerData"))return o.saveAnalyzed=!1,!1;if(t=e.playerData,!e.hasOwnProperty("sceneData"))return o.saveAnalyzed=!1,!1;if(e.sceneData,!e.sceneData.hasOwnProperty("persistentBoolItems"))return o.saveAnalyzed=!1,!1;r=e.sceneData.persistentBoolItems;var a=new U(e);return K(o),A(o.sections.intro,t.playTime),_(o.sections.intro,t),G(o.sections.intro,t.version),R(o.sections.intro,t.maxHealthBase,t.permadeathMode),S(o.sections.intro,t.maxMP+t.MPReserveMax),T(o.sections.intro,t.charmSlots,t.charmSlotsFilled),C(o.sections.intro,t.geo,t.geoPool),D(o.sections.bosses,o.sections.bosses.entries,t,r),D(o.sections.charms,o.sections.charms.entries,t),D(o.sections.colosseum,o.sections.colosseum.entries,t),D(o.sections.dreamers,o.sections.dreamers.entries,t),D(o.sections.dreamNail,o.sections.dreamNail.entries,t),D(o.sections.equipment,o.sections.equipment.entries,t),F(o.sections.nailUpgrades,o.sections.nailUpgrades.entries,t),D(o.sections.maskShards,o.sections.maskShards.entries,t,r),D(o.sections.nailArts,o.sections.nailArts.entries,t),M(o.sections.spells,o.sections.spells.entries,t),D(o.sections.vesselFragments,o.sections.vesselFragments.entries,t,r),E(o.sections.warriorDreams,o.sections.warriorDreams.entries,t),D(o.sections.grimmTroupe,o.sections.grimmTroupe.entries,t),D(o.sections.lifeblood,o.sections.lifeblood.entries,t),D(o.sections.godmaster,o.sections.godmaster.entries,t),B(o,"huntersJournal",t),B(o,"huntersJournalOptional",t),N(o.sections.essentialsCollectibles,e),N(o.sections.essentialsStagStations,e),N(o.sections.essentialsWorldInteractions,e),N(o.sections.essentialsBosses,e),N(o.sections.achievementsCollectibles,e),N(o.sections.achievementsMaps,e),N(o.sections.achievementsWorldInteractions,e),N(o.sections.achievementsBosses,e),N(o.sections.charmNotches,e),a.checkItems(o.sections.grubs),a.checkItems(o.sections.whisperingRoots),a.checkItems(o.sections.relicsWanderersJournal),a.checkItems(o.sections.relicsHallownestSeal),a.checkItems(o.sections.relicsKingsIdol),a.checkItems(o.sections.relicsArcaneEgg),a.checkItems(o.sections.rancidEggs),N(o.sections.items,e),a.checkItems(o.sections.geoChests),a.checkGeoRocks(o.sections.geoRocks),N(o.sections.worldInteractions,e),N(o.sections.secretRooms,e),a.checkItems(o.sections.corniferNotes),N(o.sections.statistics,e),N(o.sections.godhomeStatistics,e),L(o,"pantheonOfTheMaster",t),L(o,"pantheonOfTheArtist",t),L(o,"pantheonOfTheSage",t),L(o,"pantheonOfTheKnight",t),L(o,"pantheonOfHallownest",t),I(o,t),W(o.sections.hints,o.sections.hints.entries,t,r),b(o),o.saveAnalyzed=!0,(0,n.GenerateInnerHTML)(o),(0,n.CheckboxHintsToggle)(),(0,n.CheckboxSpoilersToggle)(),n.benchmarkTimes.CheckCompletion.timeEnd=performance.now(),!0}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Unknown Completion Element: ",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Unknown Description Element",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=f,i=["",""];t.length||(i=["",""]),o.length&&(i=[''),""]);var a=["",""],s=["",""];return"hk-hints"===e.id&&(a[0]="",n=""),r.length&&t.length&&(r="— "+r),t.includes("")&&(r="".concat(r,"")),"\n ".concat(g,"\n ").concat(n).concat(i[0]).concat(t).concat(i[1]).concat(a[0]).concat(w).concat(s[0]).concat(r).concat(s[1]).concat(a[1],"\n ").concat(k,"\n ")}function A(e,t){var r=Math.floor(t),o=Math.floor(r/60%60),n=Math.floor(r/3600),i=Math.floor(r%60);e.entries.timePlayed.timeH=n,e.entries.timePlayed.timeM=o,e.entries.timePlayed.timeS=i,i<10&&(i="0"+i),o<10&&(o="0"+o),e.entries.timePlayed.spoiler=n+" h "+o+" min "+i+" sec"}function _(e,t){var r=Math.round(t.completionPercentage),o=0;e.maxPercent=e.maxPercentDefault,o=e.maxPercentDefault,e.entries.gameCompletion.spoilerAfter=e.entries.gameCompletion.spoilerAfterDefault,e.percent=r,e.entries.gameCompletion.spoiler=r,t.hasOwnProperty("hasGodfinder")||(e.maxPercent=e.maxPercentLifeblood,o=e.maxPercentLifeblood,e.entries.gameCompletion.spoilerAfter=e.entries.gameCompletion.spoilerAfterLifeblood),t.hasOwnProperty("killedHiveKnight")||(e.maxPercent=e.maxPercentGrimmTroupe,o=e.maxPercentGrimmTroupe,e.entries.gameCompletion.spoilerAfter=e.entries.gameCompletion.spoilerAfterGrimmTroupe),t.hasOwnProperty("gotCharm_37")||(e.maxPercent=e.maxPercentBaseGame,o=e.maxPercentBaseGame,e.entries.gameCompletion.spoilerAfter=e.entries.gameCompletion.spoilerAfterBaseGame),r>=o?a(e,"gameCompletion"):c(e,"gameCompletion")}function b(e){var t=e.sections,r={},o=e.sections.intro.entries.gameCompletionExtended,n=e.sections.intro,i=0,a=0;for(var s in t)switch(r=t[s].entries,s){case"intro":case"hints":case"huntersJournal":case"huntersJournalOptional":continue;default:for(var l in r){switch(l){case"oldNail":case"pantheonMaster":case"pantheonArtist":case"pantheonSage":case"pantheonKnight":case"pantheonHallownest":case"geoPool":case"dreamOrbs":case"charmsOwned":case"nailDamage":case"jinnEggsSold":case"xunFlowerBrokeTimes":case"itemsDiscovered":case"stagStationsOpened":case"areaMaps":case"killedMegaMossCharger":case"killedBigBuzzer":case"killedOblobble":case"killedLobsterLancer":case"killedFlukeMother":case"killedNailBros":case"killedPaintmaster":case"killedNailsage":case"killedHollowKnightPrime":case"killsBigBuzzer":case"whiteDefenderDefeated":case"greyPrinceDefeated":case"killedHollowKnight":case"killedFinalBoss":case"grubsCollected":case"whisperingRoots":case"relicsWandererJournal":case"relicsHallownestSeal":case"relicsKingsIdol":case"relicsArcaneEgg":case"soldTrinket1":case"soldTrinket2":case"soldTrinket3":case"soldTrinket4":case"relicsSoldTotalGeo":case"bankerBalance":case"rancidEggs":case"geoRocks":case"ore":case"simpleKeys":continue}if(r[l].hasOwnProperty("icon")){switch(l){case"grubsCollected":case"grubRewards":case"areaMaps":case"journalEntriesCompleted":case"journalNotesCompleted":case"whisperingRoots":case"relicsWandererJournal":case"relicsHallownestSeal":case"relicsKingsIdol":case"relicsArcaneEgg":case"geoRocks":case"whiteDefenderDefeats":case"greyPrinceDefeats":break;default:switch("none"!==r[l].icon&&n.extendedCompletionTotal++,"none"===r[l].icon&&"arcaneEggLifebloodCoreRoom"===l&&"green"===t.charms.entries.gotCharm_9.icon&&n.extendedCompletionTotal--,r[l].icon){case"red":case"none":case"partial":case"partialJournal":continue;default:n.extendedCompletionDone++}}if(r[l].hasOwnProperty("disabled")&&!0===r[l].disabled){if("greyPrinceDefeats"===l||"whiteDefenderDefeats"===l)continue;n.extendedCompletionTotal--}else if(r[l].hasOwnProperty("amount")&&r[l].hasOwnProperty("max")){if("fountainGeo"===l)continue;(i=r[l].amount)>(a=r[l].max)&&(i=a),n.extendedCompletionDone+=i,n.extendedCompletionTotal+=a,i=0,a=0}}}}n.extendedCompletionDone>=n.extendedCompletionTotal?o.icon="green":o.icon="red";var c=n.extendedCompletionDone/n.extendedCompletionTotal*100;o.spoiler=n.extendedCompletionDone,o.spoilerAfter=" / ".concat(n.extendedCompletionTotal," = ").concat(c.toFixed(2)," %")}function G(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.sections.intro.entries.saveVersion.spoiler;u(e,e.entries.saveVersion.id),e.entries.saveVersion.spoiler="".concat(t)}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;e.entries.health.amountTotal=t,e.entries.health.permadeathMode=r>0}function S(e,t){e.entries.soul.amountTotal=t}function C(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;e.entries.geo.amount=t,e.entries.geo.amountShade=r,e.entries.geo.amountTotal=t+r}function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=0,n=o.notchesOvercharmed,i=o.notchesUnused;e.entries.notches.amountTotal=t,(n=r-t)<1&&(n=0),e.entries.notches.amountOvercharmed=n,(i=t-r)<1&&(i=0),e.entries.notches.amountUnused=i,r>t&&(r=t),e.entries.notches.amountFilled=r}function D(e,t,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],n="";for(var i in t)switch(i){case"gotCharm_36":!0===r.gotQueenFragment&&!0===r.gotKingFragment?a(e,i):c(e,i);break;case"gotCharm_37":case"gotCharm_38":case"gotCharm_39":case"gotCharm_40":case"killedGrimm":case"grimmChildLevel":case"killedHiveKnight":case"hasGodfinder":if(!1===r.hasOwnProperty(i)){u(e,i),t[i].disabled=!0;break}if("grimmChildLevel"===i){switch(r[i]){case 4:t[i].name=t[i].nameNightmareKing,t[i].spoiler=t[i].spoilerNightmareKing,t[i].wiki=t[i].wikiNightmareKing,a(e,i);break;case 5:t[i].name=t[i].nameBanishment,t[i].spoiler=t[i].spoilerBanishment,t[i].wiki=t[i].wikiBanishment,a(e,i);break;default:c(e,i),t[i].name=t[i].nameDefault,t[i].spoiler=t[i].spoilerDefault,t[i].wiki=t[i].wikiDefault}break}if("gotCharm_40"===i){switch(c(e,i),t[i].name=t[i].nameDefault,t[i].spoiler=t[i].spoilerDefault,t[i].wiki=t[i].wikiDefault,r.grimmChildLevel){case 1:!0===r[i]&&(t[i].name=t[i].nameGrimmchildP1,t[i].spoiler=t[i].spoilerGrimmchildP1,t[i].wiki=t[i].wikiGrimmchild,a(e,i));break;case 2:t[i].name=t[i].nameGrimmchildP2,t[i].spoiler=t[i].spoilerGrimmchildP2,t[i].wiki=t[i].wikiGrimmchild,a(e,i);break;case 3:t[i].name=t[i].nameGrimmchildP3,t[i].spoiler=t[i].spoilerGrimmchildP3,t[i].wiki=t[i].wikiGrimmchild,a(e,i);break;case 4:t[i].name=t[i].nameGrimmchildP4,t[i].spoiler=t[i].spoilerGrimmchildP4,t[i].wiki=t[i].wikiGrimmchild,a(e,i);break;case 5:t[i].name=t[i].nameCarefreeMelody,t[i].spoiler=t[i].spoilerCarefreeMelody,t[i].wiki=t[i].wikiCarefreeMelody,a(e,i);break;default:t[i].name=t[i].nameDefault,t[i].spoiler=t[i].spoilerDefault,t[i].wiki=t[i].wikiDefault}break}!0===r[i]?a(e,i):c(e,i);break;case"bossGruzMother":case"bossBroodingMawlek":case"maskShardCrossroadsSprings":case"maskShardCrossroadsMawlek":case"maskShardGrubfather":case"maskShardBretta":case"maskShardQueensStation":case"maskShardWaterways":case"maskShardStoneSanctuary":case"maskShardCrystalPeak":case"maskShardDeepnest":case"maskShardHive":case"maskShardDelicateFlower":case"vesselFragmentGreenpath":case"vesselFragmentCrossroads":case"vesselFragmentCityOfTears":case"vesselFragmentDeepnest":case"vesselFragmentFountain":P(t[i].id,t[i].sceneName,o)?a(e,i):c(e,i);break;case"pantheonMaster":case"pantheonArtist":case"pantheonSage":case"pantheonKnight":if("PropertyNotFound"===(n=H(t[i],r))){u(e,i),t[i].disabled=!0;break}if("PantheonCompleted"===n){a(e,i);break}c(e,i);break;default:!0===r[i]?a(e,i):c(e,i)}}function M(e,t,r){for(var o in t)switch(o){case"vengefulSpirit":case"shadeSoul":r.fireballLevel>=t[o].fireballLevel?a(e,o):c(e,o);break;case"desolateDive":case"descendingDark":r.quakeLevel>=t[o].quakeLevel?a(e,o):c(e,o);break;case"howlingWraiths":case"abyssShriek":r.screamLevel>=t[o].screamLevel?a(e,o):c(e,o)}}function E(e,t,r){for(var o in t)r[o]>=2?a(e,o):c(e,o),v(e,t[o].name,t[o].spoiler,t[o].wiki)}function H(e,t){return!1===t.hasOwnProperty(e.property)?"PropertyNotFound":!0===t[e.property].completed?"PantheonCompleted":"PantheonNotCompleted"}function F(e,t,r){for(var o=["old","sharpened","channeled","coiled","pure"].map((function(e){return e+"Nail"})),n=0;n<5;n++)r.nailSmithUpgrades>=n?a(e,o[n]):c(e,o[n]),v(e,t[o[n]].name,t[o[n]].spoiler,t[o[n]].wiki);e.percent&&e.percent--}function P(e,t,r){for(var o=0,n=r.length;o=r[l].max?a(e,l):m>0?s(e,l):u(e,l);break;case"geoPool":m=Math.abs(o[l]),r[l].amount=m,m>0?s(e,l):d(e,l,"revealed");break;case"rancidEggs":case"jinnEggsSold":case"xunFlowerBrokeTimes":case"soldTrinket1":case"soldTrinket2":case"soldTrinket3":case"soldTrinket4":case"ore":case"simpleKeys":m=Math.abs(o[l]),r[l].amount=m,m>0?d(e,l,"revealed"):u(e,l),"jinnEggsSold"===l&&(o.permadeathMode<1?(u(e,l),r[l].disabled=!0):d(e,l,"revealed")),"xunFlowerBrokeTimes"===l&&(m<1&&!0===o.xunFlowerGiven||m>0?d(e,l,"revealed"):u(e,l));break;case"tukDungEgg":if(o.permadeathMode>0){u(e,l),r[l].disabled=!0;continue}!0===o[l]?a(e,l):c(e,l);break;case"relicsSoldTotalGeo":m=0;for(var w=1;w<=4;w++)m+=r["soldTrinket".concat(w)].amount*r["soldTrinket".concat(w)].geoValue;r[l].amount=m,m>0?d(e,l,"revealed"):u(e,l);break;case"bankerBalance":(m=o[l])<0&&(m=0),r[l].amount=m,m>0||!0===o.bankerAccountPurchased?d(e,l,"revealed"):u(e,l);break;case"millibelleLeft":o.bankerTheft>=1?a(e,l):c(e,l);break;case"millibelleCheckedStand":o.bankerTheft>=2?a(e,l):c(e,l);break;case"millibelleReclaimedAllGeo":o.bankerTheft>=1&&o.bankerBalance<=0?a(e,l):c(e,l);break;case"itemsDiscovered":f=A(k=n.persistentBoolItems.length,"notActivated"),g=A(k,"active"),r[l].discoveredTotal=k,r[l].notActivated=f,r[l].activated=g,d(e,l,"revealed");break;case"shopkeeperKey":!0===o.hasSlykey||!0===o.gaveSlykey?a(e,l):c(e,l);break;case"elegantKey":!0===o.hasWhiteKey||!0===o.usedWhiteKey?a(e,l):c(e,l);break;case"loveKey":!0===o.hasLoveKey||!0===o.openedLoveDoor?a(e,l):c(e,l);break;case"paleOreSeer":!0===o.dreamReward3?a(e,l):c(e,l);break;case"simpleKeyCityOfTears":case"simpleKeyAncientBasin":case"paleOreAncientBasin":case"paleOreCrystalPeak":case"paleOreDeepnest":case"paleOreGrubfather":case"paleOreColosseum":case"pantheonSoulWarrior":case"shadeSoulWarrior":case"pantheonCrystalGuardian":case"pantheonEnragedGuardian":case"mantisVillageFloorLever":case"pathOfPainEntrance":case"whiteLadyRoom":case"throneRoomLoreTablet":case"towerOfLoveSecretRoom":case"weaversDenSecretRoom1":case"weaversDenSecretRoom2":case"cityCrest":case"soulSanctumShortcut":case"colosseumHiddenHotSpring":case"paleLurkersRetreat":y(r[l].id,r[l].sceneName)?a(e,l):c(e,l);break;case"grimmTentSecretRoom":!1===o.hasOwnProperty("destroyedNightmareLantern")?(u(e,l),r[l].disabled=!0):y(r[l].id,r[l].sceneName)?a(e,l):o.grimmChildLevel>=4?(u(e,l),r[l].disabled=!0):c(e,l);break;case"relicsWandererJournal":case"relicsHallownestSeal":case"relicsKingsIdol":case"relicsArcaneEgg":(p=o[r[l].nameHeld]+o[r[l].nameSold])>=r[l].max?a(e,l):p>0?s(e,l):u(e,l),r[l].amount=p;break;case"arcaneEggLifebloodCoreRoom":y(r[l].id,r[l].sceneName)?a(e,l):u(e,l);break;case"pantheonHallownest":!1===o.hasOwnProperty("bossDoorStateTier5")?(u(e,l),r[l].disabled=!0):!0===o.bossDoorStateTier5.completed?a(e,l):c(e,l);break;case"killsBindingSeal":if(!1===o.hasOwnProperty(l)){u(e,l),r[l].disabled=!0;break}0==o[l]?a(e,l):c(e,l);break;case"killsBigBuzzer":0==o[l]?a(e,l):c(e,l);break;case"killedVoidIdol_1":if(!1===o.hasOwnProperty(l)){u(e,l),r[l].disabled=!0;break}!0===o[l]?a(e,l):c(e,l),!1!==o[l]||!0!==o.killedVoidIdol_2&&!0!==o.killedVoidIdol_3||a(e,l);break;case"killedVoidIdol_2":if(!1===o.hasOwnProperty(l)){u(e,l),r[l].disabled=!0;break}!0===o[l]?a(e,l):c(e,l),!1===o[l]&&!0===o.killedVoidIdol_3&&a(e,l);break;case"greyPrinceDefeated":if(!1===o.hasOwnProperty(l)){u(e,l),r[l].disabled=!0;break}(!0===o.zoteDead||!1===o.zoteRescuedBuzzer&&!0===o.hasWalljump)&&(r[l].disabled=!0),!0===o[l]?a(e,l):u(e,l),!0===o.zoteRescuedBuzzer&&!1===o[l]&&c(e,l);break;case"zoteStatus":c(e,l),r[l].name=r[l].nameDefault,r[l].spoiler=r[l].spoilerDefault,!0===o.zoteDead?(r[l].name=r[l].nameNeglect,r[l].spoiler=r[l].spoilerNeglect,a(e,l)):!0===o.killedZote?(r[l].name=r[l].nameRivalry,r[l].spoiler=r[l].spoilerRivalry,a(e,l)):!1===o.zoteRescuedBuzzer?!1===o.hasWalljump?(r[l].name=r[l].nameTrappedVengefly,r[l].spoiler=r[l].spoilerTrappedVengefly):!0===o.hasWalljump&&(r[l].name=r[l].nameNotRescuedVengefly,r[l].spoiler=r[l].spoilerNotRescuedVengefly):!0===o.zoteRescuedBuzzer&&(!1===o.zoteRescuedDeepnest?(r[l].name=r[l].nameTrappedDeepnest,r[l].spoiler=r[l].spoilerTrappedDeepnest):!0===o.zoteRescuedDeepnest&&!1===o.killedZote&&(r[l].name=r[l].nameColosseum,r[l].spoiler=r[l].spoilerColosseum));break;case"nailsmithStatus":c(e,l),r[l].name=r[l].nameDefault,r[l].spoiler=r[l].spoilerDefault,!0===o.nailsmithKilled?(r[l].name=r[l].namePurity,r[l].spoiler=r[l].spoilerPurity,a(e,l)):!0===o.nailsmithConvoArt?(r[l].name=r[l].nameHappyCouple,r[l].spoiler=r[l].spoilerHappyCouple,a(e,l)):!0===o.nailsmithSpared?(r[l].name=r[l].nameSheoHutWaiting,r[l].spoiler=r[l].spoilerSheoHutWaiting):(r[l].name=r[l].nameUpgradeNail,r[l].spoiler=r[l].spoilerUpgradeNail);break;case"mrMushroomState1":case"mrMushroomState2":case"mrMushroomState3":case"mrMushroomState4":case"mrMushroomState5":case"mrMushroomState6":case"mrMushroomState7":x(e,r[l],o.mrMushroomState);break;case"openedTownBuilding":case"openedCrossroads":case"openedGreenpath":case"openedRuins1":case"openedRuins2":case"openedFungalWastes":case"openedRoyalGardens":case"openedRestingGrounds":case"openedDeepnest":case"openedHiddenStation":case"openedStagNest":if(!1===o.hasOwnProperty(l)){u(e,l),r[l].disabled=!0;break}!0===o[l]?(a(e,l),r.stagStationsOpened.hasOwnProperty("amount")||(r.stagStationsOpened.amount=0),r.stagStationsOpened.amount++):c(e,l);break;case"stagStationsOpened":o.hasOwnProperty("openedHiddenStation")||r[l].max--,r[l].amount>=r[l].max?a(e,l):r[l].amount>0?s(e,l):c(e,l);break;case"mapCrossroads":case"mapGreenpath":case"mapFungalWastes":case"mapCliffs":case"mapCity":case"mapMines":case"mapWaterways":case"mapRestingGrounds":case"mapAbyss":case"mapOutskirts":case"mapFogCanyon":case"mapRoyalGardens":case"mapDeepnest":!0===o[l]?(a(e,l),r.areaMaps.hasOwnProperty("amount")||(r.areaMaps.amount=0),r.areaMaps.amount++):c(e,l);break;case"areaMaps":r[l].amount>=r[l].max?a(e,l):r[l].amount>0?s(e,l):c(e,l);break;case"fragileGreed_unbreakable":case"fragileHealth_unbreakable":case"fragileStrength_unbreakable":!1===o.hasOwnProperty(l)?(u(e,l),r[l].disabled=!0):!0===o[l]?a(e,l):o.hasOwnProperty("destroyedNightmareLantern")&&!0===o.destroyedNightmareLantern?(u(e,l),r[l].disabled=!0):c(e,l);break;default:if(!1===o.hasOwnProperty(l)){u(e,l),r[l].disabled=!0;break}!0===o[l]?a(e,l):c(e,l)}}function y(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=0,o=i.length;r0&&void 0!==arguments[0]?arguments[0]:"",t=0,r=0,o=i.length;r1&&void 0!==arguments[1]?arguments[1]:"notActivated",r=0,o=[];if("notActivated"===t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:0;r>=t.state?a(e,"mrMushroomState".concat(t.state-1)):c(e,"mrMushroomState".concat(t.state-1))}function B(e,t,r){var o=e.sections[t],n=e.sections[t].entries,i=e.sections.statistics.entries,s="",d="",h=0;for(var m in n)if(s=n[m].nameDefault,d=n[m].nameDefault,n[m].name=d,"ShadeJournal"!==m)if(r.hasOwnProperty("kills".concat(m))){switch(m){case"GreyPrince":case"ZotelingBalloon":case"ZotelingHopper":case"ZotelingBuzzer":if(!0===r.zoteDead||!1===r.zoteRescuedBuzzer&&!0===r.hasWalljump){n[m].disabled=!0,n[m].name=d,u(o,m);continue}break;case"FlameBearerLarge":if(!0===r.destroyedNightmareLantern&&!1===r.killedFlameBearerLarge){n[m].disabled=!0,n[m].name=d,u(o,m);continue}break;case"NightmareGrimm":if(!0===r.destroyedNightmareLantern){n[m].disabled=!0,n[m].name=d,u(o,m);continue}}0===(h=r["kills".concat(m)])?a(o,m):(s+=" (".concat(h,")"),n[m].name=s,!0===r["killed".concat(m)]?l(o,m):c(o,m)),"VoidIdol_1"===m&&(!1!==r.killedVoidIdol_1||!0!==r.killedVoidIdol_2&&!0!==r.killedVoidIdol_3||(a(o,m),n[m].name=d))}else{switch(h=0,n[m].disabled=!0,n[m].name=s,m){case"VoidIdol_1":case"VoidIdol_2":case"VoidIdol_3":case"BindingSeal":case"GodseekerMask":break;default:i.journalEntriesCompleted.max--,i.journalNotesCompleted.max--}u(o,m)}else a(o,m)}function L(e,t,r){var o=e.sections[t],n=e.sections[t].property,i=e.sections[t].entries;for(var s in i)if(r.hasOwnProperty(n))if(!0===r[n][s])switch(s){case"boundNail":d(o,s,"bindingNail");break;case"boundShell":d(o,s,"bindingShell");break;case"boundCharms":d(o,s,"bindingCharms");break;case"boundSoul":d(o,s,"bindingSoul");break;case"allBindings":d(o,s,"bindingAll");break;default:a(o,s)}else c(o,s);else u(o,s),i[s].disabled=!0}function I(e,t){var r=e.sections.hallOfGods,o=e.sections.hallOfGods.entries,n="",i="",s=!1;for(var l in o)if(n=o[l].id,t.hasOwnProperty("statueState".concat(n))){switch(i=o[l].check,s=t["statueState".concat(n)].isUnlocked,l){case"GreyPrinceUnlocked":case"GreyPrinceAttuned":case"GreyPrinceAscended":case"GreyPrinceRadiant":if(!1===t.zoteRescuedBuzzer&&!0===t.hasWalljump){u(r,l),o[l].disabled=!0;continue}}if(!0===t["statueState".concat(n)][i])switch(i){case"isUnlocked":a(r,l);break;case"completedTier1":d(r,l,"attuned");break;case"completedTier2":d(r,l,"ascended");break;case"completedTier3":d(r,l,"radiant");break;default:d(r,l,"partial")}else s?d(r,l,"partial"):c(r,l)}else u(r,l),o[l].disabled=!0}function W(e,t,r,o){if(!0===r.killedHollowKnight)return e.current="endOfHints",!0;for(var n in t){if("endOfHints"===n)break;if(!0!==r[n]){if("fireballLevel"===n){if(r[n]>=1)continue;e.current=n;break}if("Crossroads_04"===n){for(var i=!1,a=0,s=o.length;a0&&void 0!==arguments[0]?arguments[0]:{},t=0,r=this.boolData.length;t0&&void 0!==arguments[0]?arguments[0]:{},t=0,r=this.geoRocksData.length;t0?(this._FindItem(this.entries[t])?a(this.section,t):c(this.section,t),this.entries[t].spoiler=this.entries[t].spoilerSteelSoul):(!0===this.playerData[this.entries[t].idPlayerData]?a(this.section,t):c(this.section,t),this.entries[t].spoiler=this.entries[t].spoilerNormal);break;case"arcaneEgg4":this._FindItem(this.entries[t])?a(this.section,t):!0===this.playerData.gotCharm_9?(u(this.section,t),this.entries[t].disabled=!0):c(this.section,t);break;default:this._FindItem(this.entries[t])?a(this.section,t):c(this.section,t)}}},{key:"checkGeoRocks",value:function(e){for(var t in this.section=e,this.entries=e.entries,this.entries)this._FindGeoRock(this.entries[t])?a(this.section,t):c(this.section,t)}}],r&&m(t.prototype,r),e}();document.addEventListener("DOMContentLoaded",(function(){O(o)})),document.getElementById("save-area-read").addEventListener("click",(function(){!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";n.benchmarkTimes.HKReadTextArea.timeStart=performance.now();var t=document.getElementById(e).value;if(t.length){O(o);try{var r=JSON.parse(t);r.hasOwnProperty("playerData")&&y(r),n.benchmarkTimes.HKReadTextArea.timeEnd=performance.now();var i=n.benchmarkTimes.HKReadTextArea.timeEnd-n.benchmarkTimes.HKReadTextArea.timeStart;console.info("HKReadTextArea() time (ms) = %c".concat(i.toFixed(2)),"color: #008cdc; font-weight: 700;")}catch(e){o.saveAnalyzed=!1,alert("This seems like not a valid Hollow Knight save.\n".concat(e)),console.info("This seems like not a valid Hollow Knight save.\n".concat(e))}}else n.benchmarkTimes.HKReadTextArea.timeStart=0}("save-area")}),!1)},92280:(e,t,r)=>{"use strict";r.r(t),r.d(t,{LoadSaveFile:()=>h});var o=r(51479),n=r(49794);function i(e,t,r,o,n,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(o,n)}var a=r(7929),s=[0,1,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0,6,1,0,0,0],l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split("").map((function(e){return e.charCodeAt(0)})),c=new Map(l.map((function(e,t){return[e,t]}))),u=(new TextEncoder).encode("UKu52ePUBwetZ9wNX88o54dnfKRu0T1l"),d=new a.ModeOfOperation.ecb(u);function h(e,t){var r=e.files;if(r.length<1)return!1;n.benchmarkTimes.LoadSaveFile.timeStart=t,n.benchmarkTimes.Total.timeStart=t,n.benchmarkTimes.HKReadTextArea.timeStart=0,n.benchmarkTimes.HKReadTextArea.timeEnd=0;var o=r[0],i=new FileReader;i.readAsArrayBuffer(o),i.addEventListener("load",m)}function m(){var e,t,r=this.result;try{(r=new Uint8Array(r)).slice(),r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s;e=e.subarray(t.length,e.length-1);for(var r=0,o=0;o<5&&(r++,0!=(128&e[o]));o++);return e.subarray(r)}(r),r=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:d).decrypt(e);return t.subarray(0,-t[t.length-1])}(r=function(e){var t,r=(e=(e=new Uint8Array(e).slice()).map((function(e){return c.get(e)}))).indexOf(64);t=-1!=r?r:e.length,e=e.subarray(0,t);for(var o=new Uint8Array(3*e.length/4),n=4*Math.floor(e.length/4),i=0;i>4,o[a+1]=(15&e[i+1])<<4|e[i+2]>>2,o[a+2]=(3&e[i+2])<<6|e[i+3]}if(null!=e[n]){var s=3*n/4;o[s]=e[n]<<2|e[n+1]>>4,null!=e[n+2]&&(o[s+1]=(15&e[n+1])<<4|e[n+2]>>2)}return o}(r)),e=(new TextDecoder).decode(r),n.benchmarkTimes.LoadSaveFile.timeEnd=performance.now();try{(0,o.HKCheckCompletion)(JSON.parse(e))}catch(e){alert("This seems like not a valid Hollow Knight save. ".concat(e)),console.info("This seems like not a valid Hollow Knight save. ".concat(e))}(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return document.getElementById("save-area").value="",t.next=3,e;case 3:document.getElementById("save-area").value=t.sent;case 4:case"end":return t.stop()}}),t)})),function(){var e=this,r=arguments;return new Promise((function(o,n){var a=t.apply(e,r);function s(e){i(a,o,n,s,l,"next",e)}function l(e){i(a,o,n,s,l,"throw",e)}s(void 0)}))})(),n.benchmarkTimes.Total.timeEnd=performance.now(),(0,n.Benchmark)(n.benchmarkTimes)}catch(e){alert("The file cannot be decoded. ".concat(e)),console.info("The file cannot be decoded. ".concat(e))}}document.getElementById("save-area-file").addEventListener("change",(function(e){h(e.target,performance.now())})),document.getElementById("save-area-file").addEventListener("click",(function(e){e.target.value=""}))},7929:function(e){"use strict";!function(t){function r(e){return parseInt(e)===e}function o(e){if(!r(e.length))return!1;for(var t=0;t255)return!1;return!0}function n(e,t){if(e.buffer&&ArrayBuffer.isView(e)&&"Uint8Array"===e.name)return t&&(e=e.slice?e.slice():Array.prototype.slice.call(e)),e;if(Array.isArray(e)){if(!o(e))throw new Error("Array contains invalid value: "+e);return new Uint8Array(e)}if(r(e.length)&&o(e))return new Uint8Array(e);throw new Error("unsupported array-like object")}function i(e){return new Uint8Array(e)}function a(e,t,r,o,n){null==o&&null==n||(e=e.slice?e.slice(o,n):Array.prototype.slice.call(e,o,n)),t.set(e,r)}var s,l={toBytes:function(e){var t=[],r=0;for(e=encodeURI(e);r191&&o<224?(t.push(String.fromCharCode((31&o)<<6|63&e[r+1])),r+=2):(t.push(String.fromCharCode((15&o)<<12|(63&e[r+1])<<6|63&e[r+2])),r+=3)}return t.join("")}},c=(s="0123456789abcdef",{toBytes:function(e){for(var t=[],r=0;r>4]+s[15&o])}return t.join("")}}),u={16:10,24:12,32:14},d=[1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],h=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],m=[82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],p=[3328402341,4168907908,4000806809,4135287693,4294111757,3597364157,3731845041,2445657428,1613770832,33620227,3462883241,1445669757,3892248089,3050821474,1303096294,3967186586,2412431941,528646813,2311702848,4202528135,4026202645,2992200171,2387036105,4226871307,1101901292,3017069671,1604494077,1169141738,597466303,1403299063,3832705686,2613100635,1974974402,3791519004,1033081774,1277568618,1815492186,2118074177,4126668546,2211236943,1748251740,1369810420,3521504564,4193382664,3799085459,2883115123,1647391059,706024767,134480908,2512897874,1176707941,2646852446,806885416,932615841,168101135,798661301,235341577,605164086,461406363,3756188221,3454790438,1311188841,2142417613,3933566367,302582043,495158174,1479289972,874125870,907746093,3698224818,3025820398,1537253627,2756858614,1983593293,3084310113,2108928974,1378429307,3722699582,1580150641,327451799,2790478837,3117535592,0,3253595436,1075847264,3825007647,2041688520,3059440621,3563743934,2378943302,1740553945,1916352843,2487896798,2555137236,2958579944,2244988746,3151024235,3320835882,1336584933,3992714006,2252555205,2588757463,1714631509,293963156,2319795663,3925473552,67240454,4269768577,2689618160,2017213508,631218106,1269344483,2723238387,1571005438,2151694528,93294474,1066570413,563977660,1882732616,4059428100,1673313503,2008463041,2950355573,1109467491,537923632,3858759450,4260623118,3218264685,2177748300,403442708,638784309,3287084079,3193921505,899127202,2286175436,773265209,2479146071,1437050866,4236148354,2050833735,3362022572,3126681063,840505643,3866325909,3227541664,427917720,2655997905,2749160575,1143087718,1412049534,999329963,193497219,2353415882,3354324521,1807268051,672404540,2816401017,3160301282,369822493,2916866934,3688947771,1681011286,1949973070,336202270,2454276571,201721354,1210328172,3093060836,2680341085,3184776046,1135389935,3294782118,965841320,831886756,3554993207,4068047243,3588745010,2345191491,1849112409,3664604599,26054028,2983581028,2622377682,1235855840,3630984372,2891339514,4092916743,3488279077,3395642799,4101667470,1202630377,268961816,1874508501,4034427016,1243948399,1546530418,941366308,1470539505,1941222599,2546386513,3421038627,2715671932,3899946140,1042226977,2521517021,1639824860,227249030,260737669,3765465232,2084453954,1907733956,3429263018,2420656344,100860677,4160157185,470683154,3261161891,1781871967,2924959737,1773779408,394692241,2579611992,974986535,664706745,3655459128,3958962195,731420851,571543859,3530123707,2849626480,126783113,865375399,765172662,1008606754,361203602,3387549984,2278477385,2857719295,1344809080,2782912378,59542671,1503764984,160008576,437062935,1707065306,3622233649,2218934982,3496503480,2185314755,697932208,1512910199,504303377,2075177163,2824099068,1841019862,739644986],f=[2781242211,2230877308,2582542199,2381740923,234877682,3184946027,2984144751,1418839493,1348481072,50462977,2848876391,2102799147,434634494,1656084439,3863849899,2599188086,1167051466,2636087938,1082771913,2281340285,368048890,3954334041,3381544775,201060592,3963727277,1739838676,4250903202,3930435503,3206782108,4149453988,2531553906,1536934080,3262494647,484572669,2923271059,1783375398,1517041206,1098792767,49674231,1334037708,1550332980,4098991525,886171109,150598129,2481090929,1940642008,1398944049,1059722517,201851908,1385547719,1699095331,1587397571,674240536,2704774806,252314885,3039795866,151914247,908333586,2602270848,1038082786,651029483,1766729511,3447698098,2682942837,454166793,2652734339,1951935532,775166490,758520603,3000790638,4004797018,4217086112,4137964114,1299594043,1639438038,3464344499,2068982057,1054729187,1901997871,2534638724,4121318227,1757008337,0,750906861,1614815264,535035132,3363418545,3988151131,3201591914,1183697867,3647454910,1265776953,3734260298,3566750796,3903871064,1250283471,1807470800,717615087,3847203498,384695291,3313910595,3617213773,1432761139,2484176261,3481945413,283769337,100925954,2180939647,4037038160,1148730428,3123027871,3813386408,4087501137,4267549603,3229630528,2315620239,2906624658,3156319645,1215313976,82966005,3747855548,3245848246,1974459098,1665278241,807407632,451280895,251524083,1841287890,1283575245,337120268,891687699,801369324,3787349855,2721421207,3431482436,959321879,1469301956,4065699751,2197585534,1199193405,2898814052,3887750493,724703513,2514908019,2696962144,2551808385,3516813135,2141445340,1715741218,2119445034,2872807568,2198571144,3398190662,700968686,3547052216,1009259540,2041044702,3803995742,487983883,1991105499,1004265696,1449407026,1316239930,504629770,3683797321,168560134,1816667172,3837287516,1570751170,1857934291,4014189740,2797888098,2822345105,2754712981,936633572,2347923833,852879335,1133234376,1500395319,3084545389,2348912013,1689376213,3533459022,3762923945,3034082412,4205598294,133428468,634383082,2949277029,2398386810,3913789102,403703816,3580869306,2297460856,1867130149,1918643758,607656988,4049053350,3346248884,1368901318,600565992,2090982877,2632479860,557719327,3717614411,3697393085,2249034635,2232388234,2430627952,1115438654,3295786421,2865522278,3633334344,84280067,33027830,303828494,2747425121,1600795957,4188952407,3496589753,2434238086,1486471617,658119965,3106381470,953803233,334231800,3005978776,857870609,3151128937,1890179545,2298973838,2805175444,3056442267,574365214,2450884487,550103529,1233637070,4289353045,2018519080,2057691103,2399374476,4166623649,2148108681,387583245,3664101311,836232934,3330556482,3100665960,3280093505,2955516313,2002398509,287182607,3413881008,4238890068,3597515707,975967766],g=[1671808611,2089089148,2006576759,2072901243,4061003762,1807603307,1873927791,3310653893,810573872,16974337,1739181671,729634347,4263110654,3613570519,2883997099,1989864566,3393556426,2191335298,3376449993,2106063485,4195741690,1508618841,1204391495,4027317232,2917941677,3563566036,2734514082,2951366063,2629772188,2767672228,1922491506,3227229120,3082974647,4246528509,2477669779,644500518,911895606,1061256767,4144166391,3427763148,878471220,2784252325,3845444069,4043897329,1905517169,3631459288,827548209,356461077,67897348,3344078279,593839651,3277757891,405286936,2527147926,84871685,2595565466,118033927,305538066,2157648768,3795705826,3945188843,661212711,2999812018,1973414517,152769033,2208177539,745822252,439235610,455947803,1857215598,1525593178,2700827552,1391895634,994932283,3596728278,3016654259,695947817,3812548067,795958831,2224493444,1408607827,3513301457,0,3979133421,543178784,4229948412,2982705585,1542305371,1790891114,3410398667,3201918910,961245753,1256100938,1289001036,1491644504,3477767631,3496721360,4012557807,2867154858,4212583931,1137018435,1305975373,861234739,2241073541,1171229253,4178635257,33948674,2139225727,1357946960,1011120188,2679776671,2833468328,1374921297,2751356323,1086357568,2408187279,2460827538,2646352285,944271416,4110742005,3168756668,3066132406,3665145818,560153121,271589392,4279952895,4077846003,3530407890,3444343245,202643468,322250259,3962553324,1608629855,2543990167,1154254916,389623319,3294073796,2817676711,2122513534,1028094525,1689045092,1575467613,422261273,1939203699,1621147744,2174228865,1339137615,3699352540,577127458,712922154,2427141008,2290289544,1187679302,3995715566,3100863416,339486740,3732514782,1591917662,186455563,3681988059,3762019296,844522546,978220090,169743370,1239126601,101321734,611076132,1558493276,3260915650,3547250131,2901361580,1655096418,2443721105,2510565781,3828863972,2039214713,3878868455,3359869896,928607799,1840765549,2374762893,3580146133,1322425422,2850048425,1823791212,1459268694,4094161908,3928346602,1706019429,2056189050,2934523822,135794696,3134549946,2022240376,628050469,779246638,472135708,2800834470,3032970164,3327236038,3894660072,3715932637,1956440180,522272287,1272813131,3185336765,2340818315,2323976074,1888542832,1044544574,3049550261,1722469478,1222152264,50660867,4127324150,236067854,1638122081,895445557,1475980887,3117443513,2257655686,3243809217,489110045,2662934430,3778599393,4162055160,2561878936,288563729,1773916777,3648039385,2391345038,2493985684,2612407707,505560094,2274497927,3911240169,3460925390,1442818645,678973480,3749357023,2358182796,2717407649,2306869641,219617805,3218761151,3862026214,1120306242,1756942440,1103331905,2578459033,762796589,252780047,2966125488,1425844308,3151392187,372911126],k=[1667474886,2088535288,2004326894,2071694838,4075949567,1802223062,1869591006,3318043793,808472672,16843522,1734846926,724270422,4278065639,3621216949,2880169549,1987484396,3402253711,2189597983,3385409673,2105378810,4210693615,1499065266,1195886990,4042263547,2913856577,3570689971,2728590687,2947541573,2627518243,2762274643,1920112356,3233831835,3082273397,4261223649,2475929149,640051788,909531756,1061110142,4160160501,3435941763,875846760,2779116625,3857003729,4059105529,1903268834,3638064043,825316194,353713962,67374088,3351728789,589522246,3284360861,404236336,2526454071,84217610,2593830191,117901582,303183396,2155911963,3806477791,3958056653,656894286,2998062463,1970642922,151591698,2206440989,741110872,437923380,454765878,1852748508,1515908788,2694904667,1381168804,993742198,3604373943,3014905469,690584402,3823320797,791638366,2223281939,1398011302,3520161977,0,3991743681,538992704,4244381667,2981218425,1532751286,1785380564,3419096717,3200178535,960056178,1246420628,1280103576,1482221744,3486468741,3503319995,4025428677,2863326543,4227536621,1128514950,1296947098,859002214,2240123921,1162203018,4193849577,33687044,2139062782,1347481760,1010582648,2678045221,2829640523,1364325282,2745433693,1077985408,2408548869,2459086143,2644360225,943212656,4126475505,3166494563,3065430391,3671750063,555836226,269496352,4294908645,4092792573,3537006015,3452783745,202118168,320025894,3974901699,1600119230,2543297077,1145359496,387397934,3301201811,2812801621,2122220284,1027426170,1684319432,1566435258,421079858,1936954854,1616945344,2172753945,1330631070,3705438115,572679748,707427924,2425400123,2290647819,1179044492,4008585671,3099120491,336870440,3739122087,1583276732,185277718,3688593069,3772791771,842159716,976899700,168435220,1229577106,101059084,606366792,1549591736,3267517855,3553849021,2897014595,1650632388,2442242105,2509612081,3840161747,2038008818,3890688725,3368567691,926374254,1835907034,2374863873,3587531953,1313788572,2846482505,1819063512,1448540844,4109633523,3941213647,1701162954,2054852340,2930698567,134748176,3132806511,2021165296,623210314,774795868,471606328,2795958615,3031746419,3334885783,3907527627,3722280097,1953799400,522133822,1263263126,3183336545,2341176845,2324333839,1886425312,1044267644,3048588401,1718004428,1212733584,50529542,4143317495,235803164,1633788866,892690282,1465383342,3115962473,2256965911,3250673817,488449850,2661202215,3789633753,4177007595,2560144171,286339874,1768537042,3654906025,2391705863,2492770099,2610673197,505291324,2273808917,3924369609,3469625735,1431699370,673740880,3755965093,2358021891,2711746649,2307489801,218961690,3217021541,3873845719,1111672452,1751693520,1094828930,2576986153,757954394,252645662,2964376443,1414855848,3149649517,370555436],w=[1374988112,2118214995,437757123,975658646,1001089995,530400753,2902087851,1273168787,540080725,2910219766,2295101073,4110568485,1340463100,3307916247,641025152,3043140495,3736164937,632953703,1172967064,1576976609,3274667266,2169303058,2370213795,1809054150,59727847,361929877,3211623147,2505202138,3569255213,1484005843,1239443753,2395588676,1975683434,4102977912,2572697195,666464733,3202437046,4035489047,3374361702,2110667444,1675577880,3843699074,2538681184,1649639237,2976151520,3144396420,4269907996,4178062228,1883793496,2403728665,2497604743,1383856311,2876494627,1917518562,3810496343,1716890410,3001755655,800440835,2261089178,3543599269,807962610,599762354,33778362,3977675356,2328828971,2809771154,4077384432,1315562145,1708848333,101039829,3509871135,3299278474,875451293,2733856160,92987698,2767645557,193195065,1080094634,1584504582,3178106961,1042385657,2531067453,3711829422,1306967366,2438237621,1908694277,67556463,1615861247,429456164,3602770327,2302690252,1742315127,2968011453,126454664,3877198648,2043211483,2709260871,2084704233,4169408201,0,159417987,841739592,504459436,1817866830,4245618683,260388950,1034867998,908933415,168810852,1750902305,2606453969,607530554,202008497,2472011535,3035535058,463180190,2160117071,1641816226,1517767529,470948374,3801332234,3231722213,1008918595,303765277,235474187,4069246893,766945465,337553864,1475418501,2943682380,4003061179,2743034109,4144047775,1551037884,1147550661,1543208500,2336434550,3408119516,3069049960,3102011747,3610369226,1113818384,328671808,2227573024,2236228733,3535486456,2935566865,3341394285,496906059,3702665459,226906860,2009195472,733156972,2842737049,294930682,1206477858,2835123396,2700099354,1451044056,573804783,2269728455,3644379585,2362090238,2564033334,2801107407,2776292904,3669462566,1068351396,742039012,1350078989,1784663195,1417561698,4136440770,2430122216,775550814,2193862645,2673705150,1775276924,1876241833,3475313331,3366754619,270040487,3902563182,3678124923,3441850377,1851332852,3969562369,2203032232,3868552805,2868897406,566021896,4011190502,3135740889,1248802510,3936291284,699432150,832877231,708780849,3332740144,899835584,1951317047,4236429990,3767586992,866637845,4043610186,1106041591,2144161806,395441711,1984812685,1139781709,3433712980,3835036895,2664543715,1282050075,3240894392,1181045119,2640243204,25965917,4203181171,4211818798,3009879386,2463879762,3910161971,1842759443,2597806476,933301370,1509430414,3943906441,3467192302,3076639029,3776767469,2051518780,2631065433,1441952575,404016761,1942435775,1408749034,1610459739,3745345300,2017778566,3400528769,3110650942,941896748,3265478751,371049330,3168937228,675039627,4279080257,967311729,135050206,3635733660,1683407248,2076935265,3576870512,1215061108,3501741890],y=[1347548327,1400783205,3273267108,2520393566,3409685355,4045380933,2880240216,2471224067,1428173050,4138563181,2441661558,636813900,4233094615,3620022987,2149987652,2411029155,1239331162,1730525723,2554718734,3781033664,46346101,310463728,2743944855,3328955385,3875770207,2501218972,3955191162,3667219033,768917123,3545789473,692707433,1150208456,1786102409,2029293177,1805211710,3710368113,3065962831,401639597,1724457132,3028143674,409198410,2196052529,1620529459,1164071807,3769721975,2226875310,486441376,2499348523,1483753576,428819965,2274680428,3075636216,598438867,3799141122,1474502543,711349675,129166120,53458370,2592523643,2782082824,4063242375,2988687269,3120694122,1559041666,730517276,2460449204,4042459122,2706270690,3446004468,3573941694,533804130,2328143614,2637442643,2695033685,839224033,1973745387,957055980,2856345839,106852767,1371368976,4181598602,1033297158,2933734917,1179510461,3046200461,91341917,1862534868,4284502037,605657339,2547432937,3431546947,2003294622,3182487618,2282195339,954669403,3682191598,1201765386,3917234703,3388507166,0,2198438022,1211247597,2887651696,1315723890,4227665663,1443857720,507358933,657861945,1678381017,560487590,3516619604,975451694,2970356327,261314535,3535072918,2652609425,1333838021,2724322336,1767536459,370938394,182621114,3854606378,1128014560,487725847,185469197,2918353863,3106780840,3356761769,2237133081,1286567175,3152976349,4255350624,2683765030,3160175349,3309594171,878443390,1988838185,3704300486,1756818940,1673061617,3403100636,272786309,1075025698,545572369,2105887268,4174560061,296679730,1841768865,1260232239,4091327024,3960309330,3497509347,1814803222,2578018489,4195456072,575138148,3299409036,446754879,3629546796,4011996048,3347532110,3252238545,4270639778,915985419,3483825537,681933534,651868046,2755636671,3828103837,223377554,2607439820,1649704518,3270937875,3901806776,1580087799,4118987695,3198115200,2087309459,2842678573,3016697106,1003007129,2802849917,1860738147,2077965243,164439672,4100872472,32283319,2827177882,1709610350,2125135846,136428751,3874428392,3652904859,3460984630,3572145929,3593056380,2939266226,824852259,818324884,3224740454,930369212,2801566410,2967507152,355706840,1257309336,4148292826,243256656,790073846,2373340630,1296297904,1422699085,3756299780,3818836405,457992840,3099667487,2135319889,77422314,1560382517,1945798516,788204353,1521706781,1385356242,870912086,325965383,2358957921,2050466060,2388260884,2313884476,4006521127,901210569,3990953189,1014646705,1503449823,1062597235,2031621326,3212035895,3931371469,1533017514,350174575,2256028891,2177544179,1052338372,741876788,1606591296,1914052035,213705253,2334669897,1107234197,1899603969,3725069491,2631447780,2422494913,1635502980,1893020342,1950903388,1120974935],v=[2807058932,1699970625,2764249623,1586903591,1808481195,1173430173,1487645946,59984867,4199882800,1844882806,1989249228,1277555970,3623636965,3419915562,1149249077,2744104290,1514790577,459744698,244860394,3235995134,1963115311,4027744588,2544078150,4190530515,1608975247,2627016082,2062270317,1507497298,2200818878,567498868,1764313568,3359936201,2305455554,2037970062,1047239e3,1910319033,1337376481,2904027272,2892417312,984907214,1243112415,830661914,861968209,2135253587,2011214180,2927934315,2686254721,731183368,1750626376,4246310725,1820824798,4172763771,3542330227,48394827,2404901663,2871682645,671593195,3254988725,2073724613,145085239,2280796200,2779915199,1790575107,2187128086,472615631,3029510009,4075877127,3802222185,4107101658,3201631749,1646252340,4270507174,1402811438,1436590835,3778151818,3950355702,3963161475,4020912224,2667994737,273792366,2331590177,104699613,95345982,3175501286,2377486676,1560637892,3564045318,369057872,4213447064,3919042237,1137477952,2658625497,1119727848,2340947849,1530455833,4007360968,172466556,266959938,516552836,0,2256734592,3980931627,1890328081,1917742170,4294704398,945164165,3575528878,958871085,3647212047,2787207260,1423022939,775562294,1739656202,3876557655,2530391278,2443058075,3310321856,547512796,1265195639,437656594,3121275539,719700128,3762502690,387781147,218828297,3350065803,2830708150,2848461854,428169201,122466165,3720081049,1627235199,648017665,4122762354,1002783846,2117360635,695634755,3336358691,4234721005,4049844452,3704280881,2232435299,574624663,287343814,612205898,1039717051,840019705,2708326185,793451934,821288114,1391201670,3822090177,376187827,3113855344,1224348052,1679968233,2361698556,1058709744,752375421,2431590963,1321699145,3519142200,2734591178,188127444,2177869557,3727205754,2384911031,3215212461,2648976442,2450346104,3432737375,1180849278,331544205,3102249176,4150144569,2952102595,2159976285,2474404304,766078933,313773861,2570832044,2108100632,1668212892,3145456443,2013908262,418672217,3070356634,2594734927,1852171925,3867060991,3473416636,3907448597,2614737639,919489135,164948639,2094410160,2997825956,590424639,2486224549,1723872674,3157750862,3399941250,3501252752,3625268135,2555048196,3673637356,1343127501,4130281361,3599595085,2957853679,1297403050,81781910,3051593425,2283490410,532201772,1367295589,3926170974,895287692,1953757831,1093597963,492483431,3528626907,1446242576,1192455638,1636604631,209336225,344873464,1015671571,669961897,3375740769,3857572124,2973530695,3747192018,1933530610,3464042516,935293895,3454686199,2858115069,1863638845,3683022916,4085369519,3292445032,875313188,1080017571,3279033885,621591778,1233856572,2504130317,24197544,3017672716,3835484340,3247465558,2220981195,3060847922,1551124588,1463996600],A=[4104605777,1097159550,396673818,660510266,2875968315,2638606623,4200115116,3808662347,821712160,1986918061,3430322568,38544885,3856137295,718002117,893681702,1654886325,2975484382,3122358053,3926825029,4274053469,796197571,1290801793,1184342925,3556361835,2405426947,2459735317,1836772287,1381620373,3196267988,1948373848,3764988233,3385345166,3263785589,2390325492,1480485785,3111247143,3780097726,2293045232,548169417,3459953789,3746175075,439452389,1362321559,1400849762,1685577905,1806599355,2174754046,137073913,1214797936,1174215055,3731654548,2079897426,1943217067,1258480242,529487843,1437280870,3945269170,3049390895,3313212038,923313619,679998e3,3215307299,57326082,377642221,3474729866,2041877159,133361907,1776460110,3673476453,96392454,878845905,2801699524,777231668,4082475170,2330014213,4142626212,2213296395,1626319424,1906247262,1846563261,562755902,3708173718,1040559837,3871163981,1418573201,3294430577,114585348,1343618912,2566595609,3186202582,1078185097,3651041127,3896688048,2307622919,425408743,3371096953,2081048481,1108339068,2216610296,0,2156299017,736970802,292596766,1517440620,251657213,2235061775,2933202493,758720310,265905162,1554391400,1532285339,908999204,174567692,1474760595,4002861748,2610011675,3234156416,3693126241,2001430874,303699484,2478443234,2687165888,585122620,454499602,151849742,2345119218,3064510765,514443284,4044981591,1963412655,2581445614,2137062819,19308535,1928707164,1715193156,4219352155,1126790795,600235211,3992742070,3841024952,836553431,1669664834,2535604243,3323011204,1243905413,3141400786,4180808110,698445255,2653899549,2989552604,2253581325,3252932727,3004591147,1891211689,2487810577,3915653703,4237083816,4030667424,2100090966,865136418,1229899655,953270745,3399679628,3557504664,4118925222,2061379749,3079546586,2915017791,983426092,2022837584,1607244650,2118541908,2366882550,3635996816,972512814,3283088770,1568718495,3499326569,3576539503,621982671,2895723464,410887952,2623762152,1002142683,645401037,1494807662,2595684844,1335535747,2507040230,4293295786,3167684641,367585007,3885750714,1865862730,2668221674,2960971305,2763173681,1059270954,2777952454,2724642869,1320957812,2194319100,2429595872,2815956275,77089521,3973773121,3444575871,2448830231,1305906550,4021308739,2857194700,2516901860,3518358430,1787304780,740276417,1699839814,1592394909,2352307457,2272556026,188821243,1729977011,3687994002,274084841,3594982253,3613494426,2701949495,4162096729,322734571,2837966542,1640576439,484830689,1202797690,3537852828,4067639125,349075736,3342319475,4157467219,4255800159,1030690015,1155237496,2951971274,1757691577,607398968,2738905026,499347990,3794078908,1011452712,227885567,2818666809,213114376,3034881240,1455525988,3414450555,850817237,1817998408,3092726480],_=[0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795],b=[0,185469197,370938394,487725847,741876788,657861945,975451694,824852259,1483753576,1400783205,1315723890,1164071807,1950903388,2135319889,1649704518,1767536459,2967507152,3152976349,2801566410,2918353863,2631447780,2547432937,2328143614,2177544179,3901806776,3818836405,4270639778,4118987695,3299409036,3483825537,3535072918,3652904859,2077965243,1893020342,1841768865,1724457132,1474502543,1559041666,1107234197,1257309336,598438867,681933534,901210569,1052338372,261314535,77422314,428819965,310463728,3409685355,3224740454,3710368113,3593056380,3875770207,3960309330,4045380933,4195456072,2471224067,2554718734,2237133081,2388260884,3212035895,3028143674,2842678573,2724322336,4138563181,4255350624,3769721975,3955191162,3667219033,3516619604,3431546947,3347532110,2933734917,2782082824,3099667487,3016697106,2196052529,2313884476,2499348523,2683765030,1179510461,1296297904,1347548327,1533017514,1786102409,1635502980,2087309459,2003294622,507358933,355706840,136428751,53458370,839224033,957055980,605657339,790073846,2373340630,2256028891,2607439820,2422494913,2706270690,2856345839,3075636216,3160175349,3573941694,3725069491,3273267108,3356761769,4181598602,4063242375,4011996048,3828103837,1033297158,915985419,730517276,545572369,296679730,446754879,129166120,213705253,1709610350,1860738147,1945798516,2029293177,1239331162,1120974935,1606591296,1422699085,4148292826,4233094615,3781033664,3931371469,3682191598,3497509347,3446004468,3328955385,2939266226,2755636671,3106780840,2988687269,2198438022,2282195339,2501218972,2652609425,1201765386,1286567175,1371368976,1521706781,1805211710,1620529459,2105887268,1988838185,533804130,350174575,164439672,46346101,870912086,954669403,636813900,788204353,2358957921,2274680428,2592523643,2441661558,2695033685,2880240216,3065962831,3182487618,3572145929,3756299780,3270937875,3388507166,4174560061,4091327024,4006521127,3854606378,1014646705,930369212,711349675,560487590,272786309,457992840,106852767,223377554,1678381017,1862534868,1914052035,2031621326,1211247597,1128014560,1580087799,1428173050,32283319,182621114,401639597,486441376,768917123,651868046,1003007129,818324884,1503449823,1385356242,1333838021,1150208456,1973745387,2125135846,1673061617,1756818940,2970356327,3120694122,2802849917,2887651696,2637442643,2520393566,2334669897,2149987652,3917234703,3799141122,4284502037,4100872472,3309594171,3460984630,3545789473,3629546796,2050466060,1899603969,1814803222,1730525723,1443857720,1560382517,1075025698,1260232239,575138148,692707433,878443390,1062597235,243256656,91341917,409198410,325965383,3403100636,3252238545,3704300486,3620022987,3874428392,3990953189,4042459122,4227665663,2460449204,2578018489,2226875310,2411029155,3198115200,3046200461,2827177882,2743944855],G=[0,218828297,437656594,387781147,875313188,958871085,775562294,590424639,1750626376,1699970625,1917742170,2135253587,1551124588,1367295589,1180849278,1265195639,3501252752,3720081049,3399941250,3350065803,3835484340,3919042237,4270507174,4085369519,3102249176,3051593425,2734591178,2952102595,2361698556,2177869557,2530391278,2614737639,3145456443,3060847922,2708326185,2892417312,2404901663,2187128086,2504130317,2555048196,3542330227,3727205754,3375740769,3292445032,3876557655,3926170974,4246310725,4027744588,1808481195,1723872674,1910319033,2094410160,1608975247,1391201670,1173430173,1224348052,59984867,244860394,428169201,344873464,935293895,984907214,766078933,547512796,1844882806,1627235199,2011214180,2062270317,1507497298,1423022939,1137477952,1321699145,95345982,145085239,532201772,313773861,830661914,1015671571,731183368,648017665,3175501286,2957853679,2807058932,2858115069,2305455554,2220981195,2474404304,2658625497,3575528878,3625268135,3473416636,3254988725,3778151818,3963161475,4213447064,4130281361,3599595085,3683022916,3432737375,3247465558,3802222185,4020912224,4172763771,4122762354,3201631749,3017672716,2764249623,2848461854,2331590177,2280796200,2431590963,2648976442,104699613,188127444,472615631,287343814,840019705,1058709744,671593195,621591778,1852171925,1668212892,1953757831,2037970062,1514790577,1463996600,1080017571,1297403050,3673637356,3623636965,3235995134,3454686199,4007360968,3822090177,4107101658,4190530515,2997825956,3215212461,2830708150,2779915199,2256734592,2340947849,2627016082,2443058075,172466556,122466165,273792366,492483431,1047239e3,861968209,612205898,695634755,1646252340,1863638845,2013908262,1963115311,1446242576,1530455833,1277555970,1093597963,1636604631,1820824798,2073724613,1989249228,1436590835,1487645946,1337376481,1119727848,164948639,81781910,331544205,516552836,1039717051,821288114,669961897,719700128,2973530695,3157750862,2871682645,2787207260,2232435299,2283490410,2667994737,2450346104,3647212047,3564045318,3279033885,3464042516,3980931627,3762502690,4150144569,4199882800,3070356634,3121275539,2904027272,2686254721,2200818878,2384911031,2570832044,2486224549,3747192018,3528626907,3310321856,3359936201,3950355702,3867060991,4049844452,4234721005,1739656202,1790575107,2108100632,1890328081,1402811438,1586903591,1233856572,1149249077,266959938,48394827,369057872,418672217,1002783846,919489135,567498868,752375421,209336225,24197544,376187827,459744698,945164165,895287692,574624663,793451934,1679968233,1764313568,2117360635,1933530610,1343127501,1560637892,1243112415,1192455638,3704280881,3519142200,3336358691,3419915562,3907448597,3857572124,4075877127,4294704398,3029510009,3113855344,2927934315,2744104290,2159976285,2377486676,2594734927,2544078150],R=[0,151849742,303699484,454499602,607398968,758720310,908999204,1059270954,1214797936,1097159550,1517440620,1400849762,1817998408,1699839814,2118541908,2001430874,2429595872,2581445614,2194319100,2345119218,3034881240,3186202582,2801699524,2951971274,3635996816,3518358430,3399679628,3283088770,4237083816,4118925222,4002861748,3885750714,1002142683,850817237,698445255,548169417,529487843,377642221,227885567,77089521,1943217067,2061379749,1640576439,1757691577,1474760595,1592394909,1174215055,1290801793,2875968315,2724642869,3111247143,2960971305,2405426947,2253581325,2638606623,2487810577,3808662347,3926825029,4044981591,4162096729,3342319475,3459953789,3576539503,3693126241,1986918061,2137062819,1685577905,1836772287,1381620373,1532285339,1078185097,1229899655,1040559837,923313619,740276417,621982671,439452389,322734571,137073913,19308535,3871163981,4021308739,4104605777,4255800159,3263785589,3414450555,3499326569,3651041127,2933202493,2815956275,3167684641,3049390895,2330014213,2213296395,2566595609,2448830231,1305906550,1155237496,1607244650,1455525988,1776460110,1626319424,2079897426,1928707164,96392454,213114376,396673818,514443284,562755902,679998e3,865136418,983426092,3708173718,3557504664,3474729866,3323011204,4180808110,4030667424,3945269170,3794078908,2507040230,2623762152,2272556026,2390325492,2975484382,3092726480,2738905026,2857194700,3973773121,3856137295,4274053469,4157467219,3371096953,3252932727,3673476453,3556361835,2763173681,2915017791,3064510765,3215307299,2156299017,2307622919,2459735317,2610011675,2081048481,1963412655,1846563261,1729977011,1480485785,1362321559,1243905413,1126790795,878845905,1030690015,645401037,796197571,274084841,425408743,38544885,188821243,3613494426,3731654548,3313212038,3430322568,4082475170,4200115116,3780097726,3896688048,2668221674,2516901860,2366882550,2216610296,3141400786,2989552604,2837966542,2687165888,1202797690,1320957812,1437280870,1554391400,1669664834,1787304780,1906247262,2022837584,265905162,114585348,499347990,349075736,736970802,585122620,972512814,821712160,2595684844,2478443234,2293045232,2174754046,3196267988,3079546586,2895723464,2777952454,3537852828,3687994002,3234156416,3385345166,4142626212,4293295786,3841024952,3992742070,174567692,57326082,410887952,292596766,777231668,660510266,1011452712,893681702,1108339068,1258480242,1343618912,1494807662,1715193156,1865862730,1948373848,2100090966,2701949495,2818666809,3004591147,3122358053,2235061775,2352307457,2535604243,2653899549,3915653703,3764988233,4219352155,4067639125,3444575871,3294430577,3746175075,3594982253,836553431,953270745,600235211,718002117,367585007,484830689,133361907,251657213,2041877159,1891211689,1806599355,1654886325,1568718495,1418573201,1335535747,1184342925];function S(e){for(var t=[],r=0;r>2,this._Ke[r][t%4]=i[t],this._Kd[e-r][t%4]=i[t];for(var a,s=0,l=n;l>16&255]<<24^h[a>>8&255]<<16^h[255&a]<<8^h[a>>24&255]^d[s]<<24,s+=1,8!=n)for(t=1;t>8&255]<<8^h[a>>16&255]<<16^h[a>>24&255]<<24,t=n/2+1;t>2,m=l%4,this._Ke[c][m]=i[t],this._Kd[e-c][m]=i[t++],l++}for(var c=1;c>24&255]^b[a>>16&255]^G[a>>8&255]^R[255&a]},C.prototype.encrypt=function(e){if(16!=e.length)throw new Error("invalid plaintext size (must be 16 bytes)");for(var t=this._Ke.length-1,r=[0,0,0,0],o=S(e),n=0;n<4;n++)o[n]^=this._Ke[0][n];for(var a=1;a>24&255]^f[o[(n+1)%4]>>16&255]^g[o[(n+2)%4]>>8&255]^k[255&o[(n+3)%4]]^this._Ke[a][n];o=r.slice()}var s,l=i(16);for(n=0;n<4;n++)s=this._Ke[t][n],l[4*n]=255&(h[o[n]>>24&255]^s>>24),l[4*n+1]=255&(h[o[(n+1)%4]>>16&255]^s>>16),l[4*n+2]=255&(h[o[(n+2)%4]>>8&255]^s>>8),l[4*n+3]=255&(h[255&o[(n+3)%4]]^s);return l},C.prototype.decrypt=function(e){if(16!=e.length)throw new Error("invalid ciphertext size (must be 16 bytes)");for(var t=this._Kd.length-1,r=[0,0,0,0],o=S(e),n=0;n<4;n++)o[n]^=this._Kd[0][n];for(var a=1;a>24&255]^y[o[(n+3)%4]>>16&255]^v[o[(n+2)%4]>>8&255]^A[255&o[(n+1)%4]]^this._Kd[a][n];o=r.slice()}var s,l=i(16);for(n=0;n<4;n++)s=this._Kd[t][n],l[4*n]=255&(m[o[n]>>24&255]^s>>24),l[4*n+1]=255&(m[o[(n+3)%4]>>16&255]^s>>16),l[4*n+2]=255&(m[o[(n+2)%4]>>8&255]^s>>8),l[4*n+3]=255&(m[255&o[(n+1)%4]]^s);return l};var T=function e(t){if(!(this instanceof e))throw Error("AES must be instanitated with `new`");this.description="Electronic Code Block",this.name="ecb",this._aes=new C(t)};T.prototype.encrypt=function(e){if((e=n(e)).length%16!=0)throw new Error("invalid plaintext size (must be multiple of 16 bytes)");for(var t=i(e.length),r=i(16),o=0;o=0;--t)this._counter[t]=e%256,e>>=8},H.prototype.setBytes=function(e){if(16!=(e=n(e,!0)).length)throw new Error("invalid counter bytes size (must be 16 bytes)");this._counter=e},H.prototype.increment=function(){for(var e=15;e>=0;e--){if(255!==this._counter[e]){this._counter[e]++;break}this._counter[e]=0}};var F=function e(t,r){if(!(this instanceof e))throw Error("AES must be instanitated with `new`");this.description="Counter",this.name="ctr",r instanceof H||(r=new H(r)),this._counter=r,this._remainingCounter=null,this._remainingCounterIndex=16,this._aes=new C(t)};F.prototype.encrypt=function(e){for(var t=n(e,!0),r=0;r16)throw new Error("PKCS#7 padding byte out of range");for(var r=e.length-t,o=0;o{"use strict";r.r(t),r.d(t,{GenerateInnerHTML:()=>G,AppendHTML:()=>M,CheckboxHintsToggle:()=>E,CheckboxSpoilersToggle:()=>H,StorageAvailable:()=>P,Benchmark:()=>b,benchmarkTimes:()=>_});var o=r(92280),n=r(18253),i=r(60869),a=r(84461),s=r(93095),l=r(83387),c=r(82349),u=r(74792),d=r(4317);function h(e,t,r,o,n,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(o,n)}var m="",p="",f="",g="",k="",w="",y="",v=document.documentElement,A=document.querySelector(".scroll-up-button"),_={LoadSaveFile:{name:"LoadSaveFile()",timeStart:0,timeEnd:0},CheckCompletion:{name:"HKCheckCompletion()",timeStart:0,timeEnd:0},GenerateInnerHTML:{name:"GenerateInnerHTML()",timeStart:0,timeEnd:0},HKReadTextArea:{name:"HKReadTextArea()",timeStart:0,timeEnd:0},Total:{name:"Total",timeStart:0,timeEnd:0}};function b(e){var t=0;for(var r in e)0!==e[r].timeStart&&0!==e[r].timeEnd&&(t=e[r].timeEnd-e[r].timeStart,console.info("".concat(e[r].name," time (ms) = %c").concat(t.toFixed(2)),"color: #008cdc; font-weight: 700;")),e[r].timeStart=0,e[r].timeEnd=0}function G(e){_.GenerateInnerHTML.timeStart=performance.now();var t=e.sections,r={},o={icon:"",iconClass:"",textPrefix:"",textSuffix:"",wiki:"",div:"
\n"].join("")}function M(e,t){document.getElementById(e.id).innerHTML+="\n"+t}function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none",t=document.getElementById("checkbox-hints");switch(e){case"hide":document.getElementById("hk-hints").classList.add("hidden"),t.value="hints-off",t.checked=!1,P("localStorage")&&localStorage.setItem("hkCheckboxHints","unchecked");break;case"show":document.getElementById("hk-hints").classList.remove("hidden"),t.value="hints-on",t.checked=!0,P("localStorage")&&localStorage.setItem("hkCheckboxHints","checked");break;default:!1===t.checked?(document.getElementById("hk-hints").classList.add("hidden"),t.value="hints-off",P("localStorage")&&localStorage.setItem("hkCheckboxHints","unchecked")):(document.getElementById("hk-hints").classList.remove("hidden"),t.value="hints-on",P("localStorage")&&localStorage.setItem("hkCheckboxHints","checked"))}}function H(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none",t=document.getElementById("checkbox-spoilers"),r=document.querySelectorAll(".spoiler-span"),o=document.querySelectorAll(".spoiler-red"),n=r.length,i=o.length;switch(e){case"hide":for(var a=0;at){var i=n.slice(0,r),a=n.slice(-o);n="".concat(i,"..").concat(a)}return n}function B(e){var t=new Date(e.lastModified),r=t.getFullYear(),o=t.getMonth()+1,n=t.getDate(),i=t.getHours(),a=t.getMinutes();return o<10&&(o="0"+o),n<10&&(n="0"+n),i<10&&(i="0"+i),a<10&&(a="0"+a),"".concat(r,".").concat(o,".").concat(n," ").concat(i,":").concat(a)}document.addEventListener("scroll",(function(){var e,t,r;t=A,r=(e=v).scrollHeight-e.clientHeight,e.scrollTop/r>.1?function(e){e.classList.add("visible-block"),e.classList.add("opacity-full"),e.classList.remove("hidden")}(t):function(e){e.classList.remove("visible-block"),e.classList.remove("opacity-full"),e.classList.add("hidden")}(t)})),A.addEventListener("click",(function(){v.scrollTo({top:0,behavior:"smooth"})})),document.getElementById("save-location-input").addEventListener("click",(function(e){var t=document.getElementById("save-location-input-tooltip");!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=document.getElementById(e.target.id);window.getSelection&&window.getSelection().removeAllRanges(),o.focus(),o.select(),o.setSelectionRange(0,99999),document.execCommand("copy"),r.length&&t.length&&N(t,r)}(e,"save-location-input-tooltip","Copied save files location to clipboard"),t.style.marginLeft="-".concat(t.offsetWidth/2,"px")}),!1),document.getElementById("save-location-input").addEventListener("mouseout",(function(){var e=document.getElementById("save-location-input-tooltip");"Click once to copy to clipboard"!==e.innerHTML&&(N("save-location-input-tooltip","Click once to copy to clipboard"),e.style.marginLeft="-".concat(e.offsetWidth/2,"px"))}),!1),document.getElementById("toggle-mode").addEventListener("click",(function(){var e=this.value,t=document.getElementById("file-input-label"),r=document.getElementById("save-area-read"),o=document.getElementById("save-area");"modeText"===e?(this.value="modeFile",t.classList.remove("hidden"),r.classList.add("hidden"),o.classList.add("hidden")):(this.value="modeText",t.classList.add("hidden"),r.classList.remove("hidden"),o.classList.remove("hidden"))}),!1),document.getElementById("checkbox-hints").addEventListener("click",E,!1),document.getElementById("checkbox-spoilers").addEventListener("click",H,!1),window.addEventListener("dragover",(function(e){e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="copy"})),window.addEventListener("drop",(function(e){e.stopPropagation(),e.preventDefault();var t=e.dataTransfer;(0,o.LoadSaveFile)(t,performance.now());var r=document.getElementById("save-area-file").nextElementSibling,n=r.innerHTML,i=x(t.files[0],16,10,4),a=B(t.files[0]);r.innerHTML=i?"".concat(k).concat(i,'
Did you know? You can press Ctrl + Shift + I and choose the Console Tab to view some extra secret data not currently shown in the tool. (after loading any save file)
\n"].join("")}function M(e,t){document.getElementById(e.id).innerHTML+="\n"+t}function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none",t=document.getElementById("checkbox-hints");switch(e){case"hide":document.getElementById("hk-hints").classList.add("hidden"),t.value="hints-off",t.checked=!1,P("localStorage")&&localStorage.setItem("hkCheckboxHints","unchecked");break;case"show":document.getElementById("hk-hints").classList.remove("hidden"),t.value="hints-on",t.checked=!0,P("localStorage")&&localStorage.setItem("hkCheckboxHints","checked");break;default:!1===t.checked?(document.getElementById("hk-hints").classList.add("hidden"),t.value="hints-off",P("localStorage")&&localStorage.setItem("hkCheckboxHints","unchecked")):(document.getElementById("hk-hints").classList.remove("hidden"),t.value="hints-on",P("localStorage")&&localStorage.setItem("hkCheckboxHints","checked"))}}function H(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none",t=document.getElementById("checkbox-spoilers"),r=document.querySelectorAll(".spoiler-span"),o=document.querySelectorAll(".spoiler-red"),n=r.length,i=o.length;switch(e){case"hide":for(var a=0;at){var i=n.slice(0,r),a=n.slice(-o);n="".concat(i,"..").concat(a)}return n}function B(e){var t=new Date(e.lastModified),r=t.getFullYear(),o=t.getMonth()+1,n=t.getDate(),i=t.getHours(),a=t.getMinutes();return o<10&&(o="0"+o),n<10&&(n="0"+n),i<10&&(i="0"+i),a<10&&(a="0"+a),"".concat(r,".").concat(o,".").concat(n," ").concat(i,":").concat(a)}document.addEventListener("scroll",(function(){var e,t,r;t=A,r=(e=v).scrollHeight-e.clientHeight,e.scrollTop/r>.1?function(e){e.classList.add("visible-block"),e.classList.add("opacity-full"),e.classList.remove("hidden")}(t):function(e){e.classList.remove("visible-block"),e.classList.remove("opacity-full"),e.classList.add("hidden")}(t)})),A.addEventListener("click",(function(){v.scrollTo({top:0,behavior:"smooth"})})),document.getElementById("save-location-input").addEventListener("click",(function(e){var t=document.getElementById("save-location-input-tooltip");!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=document.getElementById(e.target.id);window.getSelection&&window.getSelection().removeAllRanges(),o.focus(),o.select(),o.setSelectionRange(0,99999),document.execCommand("copy"),r.length&&t.length&&N(t,r)}(e,"save-location-input-tooltip","Copied save files location to clipboard"),t.style.marginLeft="-".concat(t.offsetWidth/2,"px")}),!1),document.getElementById("save-location-input").addEventListener("mouseout",(function(){var e=document.getElementById("save-location-input-tooltip");"Click once to copy to clipboard"!==e.innerHTML&&(N("save-location-input-tooltip","Click once to copy to clipboard"),e.style.marginLeft="-".concat(e.offsetWidth/2,"px"))}),!1),document.getElementById("toggle-mode").addEventListener("click",(function(){var e=this.value,t=document.getElementById("file-input-label"),r=document.getElementById("save-area-read"),o=document.getElementById("save-area");"modeText"===e?(this.value="modeFile",t.classList.remove("hidden"),r.classList.add("hidden"),o.classList.add("hidden")):(this.value="modeText",t.classList.add("hidden"),r.classList.remove("hidden"),o.classList.remove("hidden"))}),!1),document.getElementById("checkbox-hints").addEventListener("click",E,!1),document.getElementById("checkbox-spoilers").addEventListener("click",H,!1),window.addEventListener("dragover",(function(e){e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="copy"})),window.addEventListener("drop",(function(e){e.stopPropagation(),e.preventDefault();var t=e.dataTransfer;(0,o.LoadSaveFile)(t,performance.now());var r=document.getElementById("save-area-file").nextElementSibling,n=r.innerHTML,i=x(t.files[0],16,10,4),a=B(t.files[0]);r.innerHTML=i?"".concat(k).concat(i,'
Did you know? You can press Ctrl + Shift + I and choose the Console Tab to view some extra secret data not currently shown in the tool. (after loading any save file)