Compare commits
10 commits
c4e652afd4
...
f3c2d40ab6
| Author | SHA1 | Date | |
|---|---|---|---|
| f3c2d40ab6 | |||
|
|
558c3804f7 | ||
|
|
28e0da5e57 | ||
|
|
67fdb56e62 | ||
|
|
65470bdef2 | ||
|
|
a7d947ea09 | ||
|
|
3de8deaa16 | ||
|
|
690410b8f1 | ||
|
|
f639e89293 | ||
|
|
f5640da34c |
63
README.md
|
|
@ -1 +1,62 @@
|
|||
This is new completion check, still not finished.
|
||||
## Notice
|
||||
Any support, please redirect it to [ReznoRMichael](https://github.com/ReznoRMichael/hollow-knight-completion-check).
|
||||
|
||||
# Save Completion Analyzer for Hollow Knight: Silksong
|
||||
> This is a rework for the main project (Analyzer for Hollow Knight), will help you with game completion.
|
||||
|
||||
## Hollow Knight: Silksong Save game locations
|
||||
|
||||
### Your Steam Cloud
|
||||
|
||||
If you have Steam Cloud enabled for Hollow Knight: Silksong, you can download your save [directly from here.](https://store.steampowered.com/account/remotestorageapp/?appid=1030300)
|
||||
You can use this if you want to check your save progress without access to your PC (on mobile/tablet for example) or if you don't want to search manually for the save files.
|
||||
|
||||
### Windows
|
||||
|
||||
`%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight Silksong\`
|
||||
**Pro Tip:** Copy and paste this code into the folder path bar of the Windows File Explorer window and press Enter to go there instantly (Windows 10). You can also paste it inside the Run window (Windows key + R).
|
||||
*Example path: C:\Users\your-username\AppData\LocalLow\Team Cherry\Hollow Knight*
|
||||
|
||||
### Linux
|
||||
|
||||
`~/.config/unity3d/Team Cherry/Hollow Knight Silksong/`
|
||||
|
||||
### macOS
|
||||
|
||||
`~/Library/Application Support/unity.Team Cherry.Hollow Knight Silksong/`
|
||||
|
||||
### Filenames
|
||||
|
||||
**user\*.dat** — main save file. Where \* is a number between 1 and 4, and it is the appropriate save slot inside the game.
|
||||
**user\*.dat.bak1** — auto-backup save file.
|
||||
**user\*_\[game-version-numbers\].dat** — duplicate of the main save file. Serves as a backup after any game update.
|
||||
|
||||
## Using
|
||||
* JavaScript (compiled to ES 6 / ES 2015)
|
||||
* [Webpack](https://github.com/webpack/webpack)
|
||||
* [Babel](https://github.com/babel/babel)
|
||||
* [Nodejs](https://nodejs.org/en)
|
||||
|
||||
## versions:
|
||||
### version 0.1.0 (01/10/2025):
|
||||
* Added Crests
|
||||
* Added Needle Upgrades
|
||||
* Added Silk Heart
|
||||
* Added Red Tools
|
||||
* Added Blue Tools
|
||||
* Added Yellow Tools
|
||||
* Added Equipment
|
||||
* Added Skills
|
||||
* Added Miscellaneous
|
||||
* Added Mask Shards
|
||||
* Added Spool Fragments
|
||||
* Added Crafting Kit Upgrades
|
||||
* Added Tool Pouch Upgrades
|
||||
* Added Hunter's Journal
|
||||
|
||||
### version 0.2.0 (10/10/2025):
|
||||
* Added Memory Locket
|
||||
* Added Craftmetal
|
||||
* Added Keys
|
||||
* Fixed loodie toolkit issue (Thank you Lilu)
|
||||
|
||||
|
|
|
|||
6138
build/app.js
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 130 KiB |
|
|
@ -126,7 +126,7 @@
|
|||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Cinzel&family=Heebo:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
|
||||
<title>Save Completion Analyzer for Hollow Knight Online</title>
|
||||
<title>Save Completion Analyzer for Hollow Knight: Silksong Online</title>
|
||||
|
||||
<meta name="description"
|
||||
content="A simple open source tool for checking every single thing you missed for your Game Completion Percentage.">
|
||||
|
|
@ -136,7 +136,7 @@
|
|||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Save Completion Analyzer for Hollow Knight Online">
|
||||
<meta property="og:title" content="Save Completion Analyzer for Hollow Knight: Silksong Online">
|
||||
<meta property="og:description"
|
||||
content="A simple open source tool for checking what you missed for your Game Completion Percentage.">
|
||||
<meta property="og:image"
|
||||
|
|
@ -144,7 +144,7 @@
|
|||
<meta property="og:url" content="https://reznormichael.github.io/hollow-knight-completion-check/">
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta property="twitter:title" content="Save Completion Analyzer for Hollow Knight Online">
|
||||
<meta property="twitter:title" content="Save Completion Analyzer for Hollow Knight: Silksong Online">
|
||||
<meta property="twitter:description"
|
||||
content="A simple open source tool for checking what you missed for your Game Completion Percentage.">
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
|
|
@ -166,9 +166,14 @@
|
|||
<div id="content">
|
||||
|
||||
<h1 id="h1-title">Save Completion Analyzer</h1>
|
||||
<div id="sub-title">for Hollow Knight</div>
|
||||
<div id="sub-title">for Hollow Knight: Silksong</div>
|
||||
|
||||
<p class="smalltext">
|
||||
<p class="smalltext">
|
||||
<a class="link-social" href="https://github.com/Alba6rek/hollow-knight-silksong-completion-check" target="_blank"><i
|
||||
class="simpleicon-github"></i>GitHub<i class="simpleicon-github"></i></a>
|
||||
</p>
|
||||
<!--
|
||||
<p class="smalltext">
|
||||
<a class="link-social" href="https://www.paypal.me/ReznoRMichael" target="_blank"><i
|
||||
class="simpleicon-paypal"></i>Support Analyzer and get Featured!<i class="simpleicon-paypal"></i></a>
|
||||
<br>
|
||||
|
|
@ -183,10 +188,12 @@
|
|||
<a class="link-social" href="https://github.com/ReznoRMichael/hollow-knight-completion-check" target="_blank"><i
|
||||
class="simpleicon-github"></i>GitHub</a>
|
||||
<br>
|
||||
-->
|
||||
|
||||
<!-- <a href="https://pastebin.com/raw/shfZ4Vqs" target="_blank">[ Decoded 5% Save Example ]</a><br> -->
|
||||
|
||||
<div class="tooltip">
|
||||
<input type="text" id="save-location-input" value="%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight\"
|
||||
<input type="text" id="save-location-input" value="%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight Silksong\"
|
||||
readonly>
|
||||
<!-- <textarea id="save-location-input" value="%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight\" readonly></textarea> -->
|
||||
<span class="tooltip-text" id="save-location-input-tooltip">Click once to copy to clipboard</span>
|
||||
|
|
@ -211,7 +218,7 @@
|
|||
|
||||
<button id="save-area-read" class="button button-large hidden" type="button" title="Press this button after pasting your Save Text from the Save Editor into the text box below.">Analyze Save Text</button>
|
||||
|
||||
<a class="button button-square" href="https://store.steampowered.com/account/remotestorageapp/?appid=367520"
|
||||
<a class="button button-square" href="https://store.steampowered.com/account/remotestorageapp/?appid=1030300"
|
||||
target="_blank" title="Download a Save File from your Steam Cloud Storage for Hollow Knight."><i class="icon-download-cloud"></i></a>
|
||||
</div>
|
||||
|
||||
|
|
@ -236,13 +243,15 @@
|
|||
<!-- </div> -->
|
||||
|
||||
<div class="checkboxes">
|
||||
|
||||
|
||||
<input type="hidden" name="checkboxes" id="checkbox-hints" value="hints-off">
|
||||
<!-- The hint are removed for the current time -->
|
||||
<!--
|
||||
<input type="checkbox" name="checkboxes" id="checkbox-hints" value="hints-off">
|
||||
<label for="checkbox-hints" class="checkbox-label"
|
||||
title="Check to see an optional clue for your first playthrough based on your save's progress.">
|
||||
<!-- <input type="checkbox" name="checkboxes" id="checkbox-hints" value="hints-off" onclick="CheckboxHintsToggle();"> -->
|
||||
<span class="checkmark"></span><strong>Hints</strong>
|
||||
</label>
|
||||
</label>-->
|
||||
|
||||
<input type="checkbox" name="checkboxes" id="checkbox-spoilers" value="spoilers-off">
|
||||
<label for="checkbox-spoilers" class="checkbox-label"
|
||||
|
|
@ -266,35 +275,23 @@
|
|||
|
||||
<div style="margin-bottom: 20px;"></div>
|
||||
|
||||
<h6>Secrets!</h6>
|
||||
<!--<h6>Secrets!</h6>
|
||||
|
||||
<p class="smalltext">
|
||||
Did you know? You can press <strong>Ctrl + Shift + I</strong> and choose the <strong>Console Tab</strong> to view some extra secret
|
||||
data not currently shown in the tool. (after loading any save file)
|
||||
</p>
|
||||
</p>-->
|
||||
|
||||
<div style="margin-bottom: 20px;"></div>
|
||||
|
||||
<div class="hall-of-fame-border">
|
||||
|
||||
<h6 class="hall-of-fame">Analyzer Supporters</h6>
|
||||
<h6 class="hall-of-fame">In Memory</h6>
|
||||
|
||||
<p class="smalltext">
|
||||
<b class="pp-gold">Klaudia</b> (Lvl 45) -
|
||||
<b class="pp-silver">Rohit</b> (Lvl 7) -
|
||||
<b class="pp-silver">Dominic</b> (Lvl 6) -
|
||||
<b class="pp-silver">David</b> (Lvl 5) -
|
||||
<b class="pp-silver">Peter</b> (Lvl 5) -
|
||||
<b class="pp-silver">Ruben</b> (Lvl 5) -
|
||||
<b class="pp-bronze">AnonymousCanada</b> (Lvl 3) -
|
||||
<b class="pp-bronze">Mozzie</b> (Lvl 2)
|
||||
</p>
|
||||
In Memory of <a href="https://github.com/ReznoRMichael/hollow-knight-completion-check"
|
||||
target="_blank">rezno[R]</a> for his hardwork and for everyone who support this community
|
||||
|
||||
<p class="smalltext">
|
||||
You too can get immortalized here. <a href="https://www.paypal.me/ReznoRMichael" target="_blank"><i
|
||||
class="simpleicon-paypal"></i>Donate<i
|
||||
class="simpleicon-paypal"></i></a> at least $1 for the Analyzer!<br>
|
||||
Lvl indicates your amount of support.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
|
@ -302,15 +299,17 @@
|
|||
<div style="margin-bottom: 20px;"></div>
|
||||
|
||||
<p class="smalltext">
|
||||
v2.2.0. Work-In-Progress. Ideas & Bug Reports: <a
|
||||
v0.2.0. Work-In-Progress. <!--Ideas & Bug Reports: <a
|
||||
href="https://steamcommunity.com/app/367520/discussions/0/2915472677711090083/" target="_blank"><i
|
||||
class="simpleicon-steam"></i>Steam Discussions</a> <a
|
||||
href="https://steamcommunity.com/sharedfiles/filedetails/?id=2209910193" target="_blank"><i
|
||||
class="simpleicon-steam"></i>Steam Guide</a>.<br>
|
||||
class="simpleicon-steam"></i>Steam Guide</a>.--><br>
|
||||
Programmed, written and created by 🉑 <a href="https://github.com/ReznoRMichael/hollow-knight-completion-check"
|
||||
target="_blank">rezno[R]</a> © 2020–2022<br>
|
||||
<a href="https://store.steampowered.com/app/367520/Hollow_Knight/" target="_blank">Hollow Knight</a> by <a
|
||||
href="https://teamcherry.com.au/" target="_blank">Team Cherry</a> © 2017–2022<br>
|
||||
Redesigned by <a href="https://github.com/Alba6rek/hollow-knight-silksong-completion-check"
|
||||
target="_blank">Alba6rek</a> © 2025<br>
|
||||
<a href="https://store.steampowered.com/app/1030300/Hollow_Knight_Silksong/" target="_blank">Hollow Knight: Silksong</a> by <a
|
||||
href="https://teamcherry.com.au/" target="_blank">Team Cherry</a> © 2017–2025<br>
|
||||
</p>
|
||||
|
||||
</div> <!-- end content -->
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
1
docs/app.js.LICENSE.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
||||
BIN
docs/favicon.png
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 15 KiB |
BIN
docs/img/273bc0830d455f7a31b2.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 234 KiB |
BIN
docs/img/7719057db1b84cbb040a.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/img/c5450eb6dbdc31fef81d.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 130 KiB |
10
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "hollow-knight-completion-check",
|
||||
"version": "2.2.0",
|
||||
"lockfileVersion": 2,
|
||||
"name": "hollow-knight-silksong-completion-check",
|
||||
"version": "0.2.0",
|
||||
"lockfileVersion": 0,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "hollow-knight-completion-check",
|
||||
"version": "2.2.0",
|
||||
"name": "hollow-knight-silksong-completion-check",
|
||||
"version": "0.2.0",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"core-js": "^3.18.3"
|
||||
|
|
|
|||
22
package.json
|
|
@ -1,21 +1,25 @@
|
|||
{
|
||||
"name": "hollow-knight-completion-check",
|
||||
"version": "2.2.0",
|
||||
"description": "Hollow Knight Save Game Completion Analyzer Web Tool",
|
||||
"name": "hollow-knight-silksong-completion-check",
|
||||
"version": "0.2.0",
|
||||
"description": "Hollow Knight: Silksong Save Game Completion Analyzer Web Tool",
|
||||
"main": "index.html",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "webpack --config webpack.dev.js --mode development",
|
||||
"stage": "webpack --config webpack.stage.js --mode production",
|
||||
"prod": "webpack --config webpack.prod.js --mode production"
|
||||
"start": "npm run build:dev",
|
||||
"build:dev": "NODE_OPTIONS=--openssl-legacy-provider webpack --config webpack.dev.js --mode development",
|
||||
"stage": "NODE_OPTIONS=--openssl-legacy-provider webpack --config webpack.stage.js --mode production",
|
||||
"prod": "NODE_OPTIONS=--openssl-legacy-provider webpack --config webpack.prod.js --mode production",
|
||||
"serve": "python3 -m http.server 8766 --directory docs",
|
||||
"local": "npm run prod && npm run serve"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/ReznoRMichael/hollow-knight-completion-check.git"
|
||||
"url": "ssh://git@git.iscg.dev:2222/mikl/hollow-knight-silksong-completion-check.git"
|
||||
},
|
||||
"keywords": [
|
||||
"hollow",
|
||||
"knight",
|
||||
"silksong",
|
||||
"save",
|
||||
"analyzer",
|
||||
"analyze",
|
||||
|
|
@ -29,9 +33,9 @@
|
|||
"author": "Michael ReznoR",
|
||||
"license": "GPL-3.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/ReznoRMichael/hollow-knight-completion-check/issues"
|
||||
"url": "https://git.iscg.dev/mikl/hollow-knight-silksong-completion-check/issues"
|
||||
},
|
||||
"homepage": "https://github.com/ReznoRMichael/hollow-knight-completion-check#readme",
|
||||
"homepage": "https://git.iscg.dev/mikl/hollow-knight-silksong-completion-check",
|
||||
"dependencies": {
|
||||
"core-js": "^3.18.3"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
:root {
|
||||
--rt-main: #1e4d6c;
|
||||
--rt-main: #1e6c38;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
|
|
@ -42,11 +42,11 @@ body {
|
|||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #1e4d6c;
|
||||
background-color: #1e6c38;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #2e5d7c;
|
||||
background-color: #2e7c38;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track,
|
||||
|
|
@ -55,8 +55,8 @@ body {
|
|||
}
|
||||
|
||||
::-webkit-resizer {
|
||||
background-color: #050d19;
|
||||
color: #1e4d6c;
|
||||
background-color: #051905;
|
||||
color: #1e6c38;
|
||||
}
|
||||
|
||||
#background {
|
||||
|
|
@ -85,7 +85,7 @@ body {
|
|||
|
||||
b {
|
||||
font-weight: 500;
|
||||
color: #aac7d4;
|
||||
color: #aad4b4;
|
||||
}
|
||||
|
||||
p {
|
||||
|
|
@ -154,12 +154,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;
|
||||
|
|
@ -167,7 +167,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;
|
||||
|
|
@ -190,7 +190,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 {
|
||||
|
|
@ -198,8 +198,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;
|
||||
|
|
@ -387,9 +387,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;
|
||||
|
|
@ -401,17 +401,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; */
|
||||
}
|
||||
|
||||
|
|
@ -430,13 +430,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);
|
||||
}
|
||||
|
|
@ -445,13 +445,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) {
|
||||
|
|
@ -517,14 +517,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;
|
||||
}
|
||||
|
|
@ -565,12 +565,12 @@ a.wiki {
|
|||
}
|
||||
|
||||
.icon-info-circled {
|
||||
color: #479ae7;
|
||||
color: #47e762;
|
||||
}
|
||||
|
||||
.icon-download-cloud,
|
||||
.icon-doc-text-inv {
|
||||
color: #d9f3ff;
|
||||
color: #d9ffdc;
|
||||
}
|
||||
|
||||
.flex-container {
|
||||
|
|
@ -635,7 +635,7 @@ a.wiki {
|
|||
width: 50px;
|
||||
height: 50px;
|
||||
text-decoration: none;
|
||||
background-color: #1e4d6c;
|
||||
background-color: #1e6c38;
|
||||
border: 0;
|
||||
border-radius: 2px;
|
||||
outline: 0;
|
||||
|
|
@ -648,7 +648,7 @@ a.wiki {
|
|||
}
|
||||
|
||||
.scroll-up-button:hover {
|
||||
background-color: #2e5d7c;
|
||||
background-color: #2e7c38;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
|
@ -658,7 +658,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);
|
||||
|
|
@ -762,8 +762,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;
|
||||
}
|
||||
|
|
@ -785,21 +785,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) */
|
||||
|
|
@ -822,7 +822,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);
|
||||
|
|
@ -842,7 +842,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,
|
||||
|
|
@ -861,8 +861,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;
|
||||
|
|
@ -884,7 +884,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 {
|
||||
|
|
@ -905,11 +905,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;
|
||||
}
|
||||
|
||||
|
|
|
|||
BIN
src/favicon.png
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
BIN
src/img/geo.png
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 305 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2 KiB |
|
Before Width: | Height: | Size: 856 B |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 130 KiB |
|
|
@ -7,11 +7,7 @@
|
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<link href="favicon.png" rel="icon">
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Cinzel&family=Heebo:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
|
||||
<title>Save Completion Analyzer for Hollow Knight Online</title>
|
||||
<title>Save Completion Analyzer for Hollow Knight: Silksong Online</title>
|
||||
|
||||
<meta name="description"
|
||||
content="A simple open source tool for checking every single thing you missed for your Game Completion Percentage.">
|
||||
|
|
@ -21,7 +17,7 @@
|
|||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Save Completion Analyzer for Hollow Knight Online">
|
||||
<meta property="og:title" content="Save Completion Analyzer for Hollow Knight: Silksong Online">
|
||||
<meta property="og:description"
|
||||
content="A simple open source tool for checking what you missed for your Game Completion Percentage.">
|
||||
<meta property="og:image"
|
||||
|
|
@ -29,7 +25,7 @@
|
|||
<meta property="og:url" content="https://reznormichael.github.io/hollow-knight-completion-check/">
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta property="twitter:title" content="Save Completion Analyzer for Hollow Knight Online">
|
||||
<meta property="twitter:title" content="Save Completion Analyzer for Hollow Knight: Silksong Online">
|
||||
<meta property="twitter:description"
|
||||
content="A simple open source tool for checking what you missed for your Game Completion Percentage.">
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
|
|
@ -51,27 +47,19 @@
|
|||
<div id="content">
|
||||
|
||||
<h1 id="h1-title">Save Completion Analyzer</h1>
|
||||
<div id="sub-title">for Hollow Knight</div>
|
||||
<div id="sub-title">for Hollow Knight: Silksong</div>
|
||||
|
||||
<p class="smalltext">
|
||||
<a class="link-social" href="https://www.paypal.me/ReznoRMichael" target="_blank"><i
|
||||
class="simpleicon-paypal"></i>Support Analyzer and get Featured!<i class="simpleicon-paypal"></i></a>
|
||||
<br>
|
||||
<a class="link-social" href="https://steamcommunity.com/sharedfiles/filedetails/?id=2209910193" target="_blank"><i
|
||||
class="simpleicon-steam"></i>Official Steam Guide</a>
|
||||
<a class="link-social" href="https://www.instagram.com/reznor.technology/" target="_blank"><i
|
||||
class="simpleicon-instagram"></i>Instagram</a>
|
||||
<a class="link-social" href="https://www.youtube.com/c/MichaelReznoR" target="_blank"><i
|
||||
class="simpleicon-youtube"></i>Youtube</a>
|
||||
<a class="link-social" href="https://twitter.com/intent/follow?screen_name=ReznoRMichael" target="_blank"><i
|
||||
class="simpleicon-twitter"></i>Twitter</a>
|
||||
<a class="link-social" href="https://github.com/ReznoRMichael/hollow-knight-completion-check" target="_blank"><i
|
||||
class="simpleicon-github"></i>GitHub</a>
|
||||
<p class="smalltext">
|
||||
Local fork of the open-source Silksong Completion Analyzer.
|
||||
<br>
|
||||
<a class="link-social" href="https://github.com/Alba6rek/hollow-knight-silksong-completion-check" target="_blank"><i
|
||||
class="simpleicon-github"></i>Original Silksong fork</a>
|
||||
</p>
|
||||
|
||||
<!-- <a href="https://pastebin.com/raw/shfZ4Vqs" target="_blank">[ Decoded 5% Save Example ]</a><br> -->
|
||||
|
||||
<div class="tooltip">
|
||||
<input type="text" id="save-location-input" value="%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight\"
|
||||
<input type="text" id="save-location-input" value="%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight Silksong\"
|
||||
readonly>
|
||||
<!-- <textarea id="save-location-input" value="%USERPROFILE%\AppData\LocalLow\Team Cherry\Hollow Knight\" readonly></textarea> -->
|
||||
<span class="tooltip-text" id="save-location-input-tooltip">Click once to copy to clipboard</span>
|
||||
|
|
@ -96,7 +84,7 @@
|
|||
|
||||
<button id="save-area-read" class="button button-large hidden" type="button" title="Press this button after pasting your Save Text from the Save Editor into the text box below.">Analyze Save Text</button>
|
||||
|
||||
<a class="button button-square" href="https://store.steampowered.com/account/remotestorageapp/?appid=367520"
|
||||
<a class="button button-square" href="https://store.steampowered.com/account/remotestorageapp/?appid=1030300"
|
||||
target="_blank" title="Download a Save File from your Steam Cloud Storage for Hollow Knight."><i class="icon-download-cloud"></i></a>
|
||||
</div>
|
||||
|
||||
|
|
@ -121,13 +109,15 @@
|
|||
<!-- </div> -->
|
||||
|
||||
<div class="checkboxes">
|
||||
|
||||
|
||||
<input type="hidden" name="checkboxes" id="checkbox-hints" value="hints-off">
|
||||
<!-- The hint are removed for the current time -->
|
||||
<!--
|
||||
<input type="checkbox" name="checkboxes" id="checkbox-hints" value="hints-off">
|
||||
<label for="checkbox-hints" class="checkbox-label"
|
||||
title="Check to see an optional clue for your first playthrough based on your save's progress.">
|
||||
<!-- <input type="checkbox" name="checkboxes" id="checkbox-hints" value="hints-off" onclick="CheckboxHintsToggle();"> -->
|
||||
<span class="checkmark"></span><strong>Hints</strong>
|
||||
</label>
|
||||
</label>-->
|
||||
|
||||
<input type="checkbox" name="checkboxes" id="checkbox-spoilers" value="spoilers-off">
|
||||
<label for="checkbox-spoilers" class="checkbox-label"
|
||||
|
|
@ -151,35 +141,24 @@
|
|||
|
||||
<div style="margin-bottom: 20px;"></div>
|
||||
|
||||
<h6>Secrets!</h6>
|
||||
<!--<h6>Secrets!</h6>
|
||||
|
||||
<p class="smalltext">
|
||||
Did you know? You can press <strong>Ctrl + Shift + I</strong> and choose the <strong>Console Tab</strong> to view some extra secret
|
||||
data not currently shown in the tool. (after loading any save file)
|
||||
</p>
|
||||
</p>-->
|
||||
|
||||
<div style="margin-bottom: 20px;"></div>
|
||||
|
||||
<div class="hall-of-fame-border">
|
||||
|
||||
<h6 class="hall-of-fame">Analyzer Supporters</h6>
|
||||
<h6 class="hall-of-fame">About this fork</h6>
|
||||
|
||||
<p class="smalltext">
|
||||
<b class="pp-gold">Klaudia</b> (Lvl 45) -
|
||||
<b class="pp-silver">Rohit</b> (Lvl 7) -
|
||||
<b class="pp-silver">Dominic</b> (Lvl 6) -
|
||||
<b class="pp-silver">David</b> (Lvl 5) -
|
||||
<b class="pp-silver">Peter</b> (Lvl 5) -
|
||||
<b class="pp-silver">Ruben</b> (Lvl 5) -
|
||||
<b class="pp-bronze">AnonymousCanada</b> (Lvl 3) -
|
||||
<b class="pp-bronze">Mozzie</b> (Lvl 2)
|
||||
</p>
|
||||
|
||||
<p class="smalltext">
|
||||
You too can get immortalized here. <a href="https://www.paypal.me/ReznoRMichael" target="_blank"><i
|
||||
class="simpleicon-paypal"></i>Donate<i
|
||||
class="simpleicon-paypal"></i></a> at least $1 for the Analyzer!<br>
|
||||
Lvl indicates your amount of support.
|
||||
This local-first fork preserves the original analyzer's attribution and GPL-3.0 license.
|
||||
The Silksong analyzer is based on the work of <a href="https://github.com/ReznoRMichael/hollow-knight-completion-check"
|
||||
target="_blank">ReznoR</a> and <a href="https://github.com/Alba6rek/hollow-knight-silksong-completion-check"
|
||||
target="_blank">Alba6rek</a>.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
|
@ -187,15 +166,12 @@
|
|||
<div style="margin-bottom: 20px;"></div>
|
||||
|
||||
<p class="smalltext">
|
||||
v2.2.0. Work-In-Progress. Ideas & Bug Reports: <a
|
||||
href="https://steamcommunity.com/app/367520/discussions/0/2915472677711090083/" target="_blank"><i
|
||||
class="simpleicon-steam"></i>Steam Discussions</a> <a
|
||||
href="https://steamcommunity.com/sharedfiles/filedetails/?id=2209910193" target="_blank"><i
|
||||
class="simpleicon-steam"></i>Steam Guide</a>.<br>
|
||||
Programmed, written and created by 🉑 <a href="https://github.com/ReznoRMichael/hollow-knight-completion-check"
|
||||
target="_blank">rezno[R]</a> © 2020–2022<br>
|
||||
<a href="https://store.steampowered.com/app/367520/Hollow_Knight/" target="_blank">Hollow Knight</a> by <a
|
||||
href="https://teamcherry.com.au/" target="_blank">Team Cherry</a> © 2017–2022<br>
|
||||
Local fork, currently based on v0.2.0. See the repository README for development notes.<br>
|
||||
Original analyzer by <a href="https://github.com/ReznoRMichael/hollow-knight-completion-check"
|
||||
target="_blank">ReznoR</a> and Silksong fork by <a href="https://github.com/Alba6rek/hollow-knight-silksong-completion-check"
|
||||
target="_blank">Alba6rek</a>, released under GPL-3.0.<br>
|
||||
<a href="https://store.steampowered.com/app/1030300/Hollow_Knight_Silksong/" target="_blank">Hollow Knight: Silksong</a> by <a
|
||||
href="https://teamcherry.com.au/" target="_blank">Team Cherry</a>.
|
||||
</p>
|
||||
|
||||
</div> <!-- end content -->
|
||||
|
|
|
|||
|
|
@ -30,14 +30,14 @@ import {
|
|||
|
||||
// ---------------- Load image files (necessary for Webpack) ----------------------------------------------------------------------- //
|
||||
|
||||
import HEALTH_MASK_IMAGE from "../img/health-mask.png";
|
||||
/*import HEALTH_MASK_IMAGE from "../img/health-mask.png";
|
||||
import HEALTH_MASK_STEEL_IMAGE from "../img/health-mask-steel.png";
|
||||
import SOUL_ORB_IMAGE from "../img/soul-orb.png";
|
||||
import NOTCH_IMAGE from "../img/notch.png";
|
||||
import NOTCH_FILLED_IMAGE from "../img/notch-filled.png";
|
||||
import NOTCH_OVERCHARMED_IMAGE from "../img/notch-overcharmed.png";
|
||||
import GEO_IMAGE from "../img/geo.png";
|
||||
import GEO_SHADE_IMAGE from "../img/geo-shade.png";
|
||||
import GEO_SHADE_IMAGE from "../img/geo-shade.png";*/
|
||||
|
||||
// ---------------- Constants ------------------------------------------------------------------------------------------------------- //
|
||||
|
||||
|
|
@ -48,7 +48,7 @@ const SYMBOL_TRUE = "<i class='icon-ok-squared'></i>"; // "✅ "
|
|||
const SYMBOL_CLOCK = "<i class='icon-clock'></i>"; // "🕑 "
|
||||
const SYMBOL_EMPTY = "<span class='padding-left'></span>";
|
||||
const FLEUR_DIVIDE = "<div class='horizontal-line'></div>";
|
||||
const WIKI_LINK = "https://hollowknight.fandom.com/wiki/";
|
||||
const WIKI_LINK = "https://hollowknightsilksong.wiki.fextralife.com/";
|
||||
|
||||
// ---------------- Variables ------------------------------------------------------------------------------------------------------- //
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ function HKCheckCompletion(jsonObject, benchStart = performance.now()) {
|
|||
|
||||
CheckSilkBar(HK.sections.intro, HKPlayerData.silkMax);
|
||||
|
||||
// ---------------- Charm Notches (Slots) ------------------------------------------------------------------------------------- //
|
||||
// ---------------- Check Crests ------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckCrests(HK.sections.intro, HKPlayerData);
|
||||
|
||||
|
|
@ -149,18 +149,85 @@ function HKCheckCompletion(jsonObject, benchStart = performance.now()) {
|
|||
|
||||
CheckRosary(HK.sections.intro, HKPlayerData.geo, HKPlayerData.HeroCorpseMoneyPool);
|
||||
|
||||
// ---------------- Shell Shards Amount ------------------------------------------------------------------------------------------------ //
|
||||
// ---------------- Shell Shards Amount ------------------------------------------------------------------------------------------------ //
|
||||
|
||||
CheckshellShards(HK.sections.intro, HKPlayerData.ShellShards);
|
||||
|
||||
// ---------------- Crests Crests Crests Crests Crests Crests ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.crests, HK.sections.crests.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Needle Upgrades --------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckNeedleUpgrades(HK.sections.NeedleUpgrades, HK.sections.NeedleUpgrades.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Silk Heart --------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.silkHeart, HK.sections.silkHeart.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Tools ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.redTools, HK.sections.redTools.entries, HKPlayerData.Tools.savedData);
|
||||
CheckIfDataTrue(HK.sections.blueTools, HK.sections.blueTools.entries, HKPlayerData.Tools.savedData);
|
||||
CheckIfDataTrue(HK.sections.yellowTools, HK.sections.yellowTools.entries, HKPlayerData.Tools.savedData);
|
||||
|
||||
// ---------------- Equipment (Abilities) ------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.equipment, HK.sections.equipment.entries, HKPlayerData.Tools.savedData);
|
||||
|
||||
// ---------------- skills ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.skills, HK.sections.skills.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Miscellaneous ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.miscellaneous, HK.sections.miscellaneous.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Mask Shards ----------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.maskShards, HK.sections.maskShards.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Spool Fragments ------------------------------------------------------------------------------------------ //
|
||||
|
||||
CheckIfDataTrue(HK.sections.spoolFragments, HK.sections.spoolFragments.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Crafting Kit Upgrades ------------------------------------------------------------------------------------------ //
|
||||
|
||||
CheckIfDataTrue(HK.sections.craftingKitUpgrades, HK.sections.craftingKitUpgrades.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Tool Pouch Upgrades ------------------------------------------------------------------------------------------ //
|
||||
|
||||
CheckIfDataTrue(HK.sections.toolPouchUpgrades, HK.sections.toolPouchUpgrades.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Essentials % -> Memory Locket ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.essentialsMemoryLocket, HK.sections.essentialsMemoryLocket.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Essentials % -> Craftmetal ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.essentialsCraftmetal, HK.sections.essentialsCraftmetal.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Essentials % -> Keys ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.essentialsKeys, HK.sections.essentialsKeys.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
|
||||
// ---------------- flea ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.flea, HK.sections.flea.entries, HKPlayerData);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////// UNDER THIS LINE ARE NOT FINSIHED /////////////////////////////////////////
|
||||
/*
|
||||
// ---------------- Bosses (Base Game) ---------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.bosses, HK.sections.bosses.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Charms ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.charms, HK.sections.charms.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Colosseum of Fools ---------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.colosseum, HK.sections.colosseum.entries, HKPlayerData);
|
||||
|
|
@ -173,30 +240,11 @@ function HKCheckCompletion(jsonObject, benchStart = performance.now()) {
|
|||
|
||||
CheckIfDataTrue(HK.sections.dreamNail, HK.sections.dreamNail.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Equipment ------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.equipment, HK.sections.equipment.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Nail Upgrades --------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckNailUpgrades(HK.sections.nailUpgrades, HK.sections.nailUpgrades.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Mask Shards ----------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.maskShards, HK.sections.maskShards.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Nail Arts ------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckIfDataTrue(HK.sections.nailArts, HK.sections.nailArts.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Spells ---------------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckSpellLevel(HK.sections.spells, HK.sections.spells.entries, HKPlayerData);
|
||||
|
||||
// ---------------- Vessel Fragments ------------------------------------------------------------------------------------------ //
|
||||
|
||||
CheckIfDataTrue(HK.sections.vesselFragments, HK.sections.vesselFragments.entries, HKPlayerData, HKWorldItems);
|
||||
|
||||
// ---------------- Warrior Dreams -------------------------------------------------------------------------------------------- //
|
||||
|
||||
CheckWarriorDreams(HK.sections.warriorDreams, HK.sections.warriorDreams.entries, HKPlayerData);
|
||||
|
|
@ -212,12 +260,12 @@ function HKCheckCompletion(jsonObject, benchStart = performance.now()) {
|
|||
// ---------------- Godmaster Content Pack ------------------------------------------------------------------------------------ //
|
||||
|
||||
CheckIfDataTrue(HK.sections.godmaster, HK.sections.godmaster.entries, HKPlayerData);
|
||||
|
||||
*/
|
||||
// ------------------------- Hunter's Journal --------------------------------------------------------------------------------- //
|
||||
/* Must be checked before Statistics (for correct entry numbers) */
|
||||
|
||||
CheckHuntersJournal(HK, "huntersJournal", HKPlayerData);
|
||||
CheckHuntersJournal(HK, "huntersJournalOptional", HKPlayerData);
|
||||
//CheckHuntersJournal(HK, "huntersJournalOptional", HKPlayerData);
|
||||
|
||||
/*
|
||||
|
||||
|
|
@ -321,13 +369,12 @@ function HKCheckCompletion(jsonObject, benchStart = performance.now()) {
|
|||
|
||||
/* ------------------------- Pantheon Statistics ------------------------------------------------------------------------------ */
|
||||
|
||||
CheckPantheon(HK, "pantheonOfTheMaster", HKPlayerData);
|
||||
CheckPantheon(HK, "pantheonOfTheArtist", HKPlayerData);
|
||||
/*CheckPantheon(HK, "pantheonOfTheArtist", HKPlayerData);
|
||||
CheckPantheon(HK, "pantheonOfTheSage", HKPlayerData);
|
||||
CheckPantheon(HK, "pantheonOfTheKnight", HKPlayerData);
|
||||
CheckPantheon(HK, "pantheonOfHallownest", HKPlayerData);
|
||||
|
||||
CheckHallOfGods(HK, HKPlayerData);
|
||||
CheckHallOfGods(HK, HKPlayerData);*/
|
||||
|
||||
// ------------------------- Hints ---------------------------------------------------------------------------------------------- //
|
||||
|
||||
|
|
@ -431,7 +478,7 @@ function CheckCompletionPercent(section, playerData) {
|
|||
let completionPercentage = Math.round(playerData.completionPercentage);
|
||||
let maxPercent = 0;
|
||||
|
||||
/*
|
||||
|
||||
// Normal (current) game version behaviour: 112%
|
||||
section.maxPercent = section.maxPercentDefault;
|
||||
maxPercent = section.maxPercentDefault;
|
||||
|
|
@ -439,7 +486,7 @@ function CheckCompletionPercent(section, playerData) {
|
|||
|
||||
section.percent = completionPercentage;
|
||||
section.entries.gameCompletion.spoiler = completionPercentage;
|
||||
|
||||
/*
|
||||
// Lifeblood behaviour: 107%
|
||||
if (!playerData.hasOwnProperty("hasGodfinder")) {
|
||||
|
||||
|
|
@ -493,7 +540,8 @@ function CheckExtendedCompletion(db) {
|
|||
case "intro":
|
||||
case "hints":
|
||||
case "huntersJournal":
|
||||
case "huntersJournalOptional":
|
||||
//case "huntersJournalOptional":
|
||||
//case "flea":
|
||||
|
||||
continue;
|
||||
|
||||
|
|
@ -897,7 +945,180 @@ function CheckIfDataTrue(section, dataObject, playerData, worldData = []) {
|
|||
textSuffix = dataObject[i].spoiler;
|
||||
(dataObject[i].hasOwnProperty("wiki")) ? wiki = dataObject[i].wiki: wiki = ""; */
|
||||
|
||||
switch (i) {
|
||||
if (section.id === "hk-redTools"
|
||||
|| section.id === "hk-blueTools"
|
||||
|| section.id === "hk-yellowTools"
|
||||
|| section.id === "hk-equipment")
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case "webShot":
|
||||
//check if he have any type of webshot which count as 1% (the player cant have multiple of it)
|
||||
let foundArchitect = playerData.find(playerData => playerData.Name === "WebShot Architect");
|
||||
let foundForge = playerData.find(playerData => playerData.Name === "WebShot Forge");
|
||||
let foundWeaver = playerData.find(playerData => playerData.Name === "WebShot Weaver");
|
||||
((foundArchitect !== undefined && foundArchitect.Data.IsUnlocked === true)
|
||||
|| (foundForge !== undefined && foundForge.Data.IsUnlocked === true)
|
||||
|| (foundWeaver !== undefined && foundWeaver.Data.IsUnlocked === true)
|
||||
) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
break;
|
||||
|
||||
case "curveClaws":
|
||||
//check if he have any type of curveClaws which count as 1% (normal or upgraded one)
|
||||
let foundClaws = playerData.find(playerData => playerData.Name === "Curve Claws");
|
||||
let foundClawsUpgrade = playerData.find(playerData => playerData.Name === "Curve Claws Upgraded");
|
||||
((foundClaws !== undefined && foundClaws.Data.IsUnlocked === true)
|
||||
|| (foundClawsUpgrade !== undefined && foundClawsUpgrade.Data.IsUnlocked === true)
|
||||
) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
break;
|
||||
|
||||
case "mosscreepTool":
|
||||
//check if he have any type of Mosscreep which count as 1% (normal or upgraded one)
|
||||
let foundMosscreep = playerData.find(playerData => playerData.Name === "Mosscreep Tool 1");
|
||||
let foundMosscreepUpgrade = playerData.find(playerData => playerData.Name === "Mosscreep Tool 2");
|
||||
((foundMosscreep !== undefined && foundMosscreep.Data.IsUnlocked === true)
|
||||
|| (foundMosscreepUpgrade !== undefined && foundMosscreepUpgrade.Data.IsUnlocked === true)
|
||||
) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
break;
|
||||
|
||||
case "DazzleBind":
|
||||
//check if he have any type of Dazzle Bind which count as 1% (normal or upgraded one)
|
||||
let foundDazzle = playerData.find(playerData => playerData.Name === "Dazzle Bind");
|
||||
let foundDazzleUpgrade = playerData.find(playerData => playerData.Name === "Dazzle Bind Upgraded");
|
||||
((foundDazzle !== undefined && foundDazzle.Data.IsUnlocked === true)
|
||||
|| (foundDazzleUpgrade !== undefined && foundDazzleUpgrade.Data.IsUnlocked === true)
|
||||
) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
break;
|
||||
|
||||
case "deadMansPurse":
|
||||
//check if he have any type of Bomb for normal and steel mod which count as 1% (normal or upgraded one)
|
||||
let foundBombNormal = playerData.find(playerData => playerData.Name === "Dead Mans Purse");
|
||||
let foundBombSteel = playerData.find(playerData => playerData.Name === "Shell Satchel");
|
||||
((foundBombNormal !== undefined && foundBombNormal.Data.IsUnlocked === true)
|
||||
|| (foundBombSteel !== undefined && foundBombSteel.Data.IsUnlocked === true)
|
||||
) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
default:
|
||||
let foundData = playerData.find(playerData => playerData.Name === dataObject[i].id);
|
||||
(foundData !== undefined && foundData.Data.IsUnlocked === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
// CHECK SILK HEART
|
||||
else if (section.id === "hk-silkHeart")
|
||||
{
|
||||
let exist = playerData.scenesVisited.indexOf(i);
|
||||
(exist >= 0) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
}
|
||||
//CHECK SILK HEART MASK AND SPOOL SILK (they change it from old design)
|
||||
else if (section.id === "hk-maskshards"
|
||||
|| section.id === "hk-spoolFragments"
|
||||
|| section.id === "hk-toolPouchUpgrades"
|
||||
|| section.id === "hk-craftingKitUpgrades"
|
||||
|| section.id === "hk-essentials-craftmetal"
|
||||
|| section.id === "hk-essentials-keys"
|
||||
|| section.id === "hk-essentials-memoryLocket")
|
||||
{
|
||||
switch (i) {
|
||||
//buy from sellers, defeating enemies, or collected items
|
||||
case "PurchasedBonebottomHeartPiece":
|
||||
case "MerchantEnclaveShellFragment":
|
||||
case "PurchasedBelltownSpoolSegment":
|
||||
case "MetCaravanTroupeLeaderJudge":
|
||||
case "MerchantEnclaveSpoolPiece":
|
||||
case "purchasedGrindleSpoolPiece":
|
||||
case "PurchasedForgeToolKit":
|
||||
case "PurchasedArchitectToolKit":
|
||||
case "purchasedGrindleToolKit":
|
||||
case "PurchasedPilgrimsRestToolPouch":
|
||||
case "PurchasedBonebottomToolMetal":
|
||||
case "MerchantEnclaveToolMetal":
|
||||
case "MerchantEnclaveSimpleKey":
|
||||
case "CollectedDustCageKey":
|
||||
case "HasSlabKeyA":
|
||||
case "HasSlabKeyB":
|
||||
case "HasSlabKeyC":
|
||||
case "collectedWardBossKey":
|
||||
case "BelltownGreeterHouseFullDlg":
|
||||
case "PurchasedArchitectKey":
|
||||
case "BallowGivenKey":
|
||||
case "PurchasedPilgrimsRestMemoryLocket":
|
||||
case "PurchasedBelltownMemoryLocket":
|
||||
(playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
//White Key Condition
|
||||
case "wardKey":
|
||||
(playerData["MerchantEnclaveWardKey"] === true || playerData["collectedWardKey"] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
//check crow summons if ther are appeared or not, (but not picked up cuz still idk how and im lazy to search :3)
|
||||
case "CrowSummonsAppearedScene":
|
||||
(playerData[i] !== undefined && playerData[i] !== "" ) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
//simplekey from pebb or gringle
|
||||
case "purchasedGrindleSimpleKey":
|
||||
(playerData["purchasedGrindleSimpleKey"] === true || playerData["PurchasedBonebottomFaithToken"] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
|
||||
//Finishing wishes
|
||||
case "beastflyHuntWish":
|
||||
case "sprintmasterRaceWish":
|
||||
case "destroyThreadCoresWish":
|
||||
case "antTrapperWish":
|
||||
case "saveShermaWish":
|
||||
case "crowFeathersWish":
|
||||
case "journalWish":
|
||||
case "rockRollersWish":
|
||||
let wishList = playerData.QuestCompletionData.savedData;
|
||||
let foundWish = wishList.find(wishList => wishList.Name === dataObject[i].sceneName);
|
||||
(foundWish !== undefined && foundWish.Data.IsCompleted === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
//I hate that caravan....
|
||||
case "CaravanTroupeLocation":
|
||||
(playerData[i] === 3) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
// This for Tool Pouch Upgrades for laddybug (check if he finished the challange or get the item from pickup in act 3)
|
||||
case "ladybugCraftPickupToolPouch":
|
||||
let scenel = worldData.serializedList;
|
||||
let CraftPickupToolitem = scenel.find(scenel => scenel.SceneName === dataObject[i].sceneName && scenel.ID === dataObject[i].id);
|
||||
((CraftPickupToolitem !== undefined && CraftPickupToolitem.Value === true)
|
||||
|| playerData.pinGalleriesCompleted >= 1) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
break;
|
||||
|
||||
//World Scene
|
||||
default:
|
||||
let sceneList = worldData.serializedList;
|
||||
let sceneInfo = sceneList.find(sceneList => sceneList.SceneName === dataObject[i].sceneName && sceneList.ID === dataObject[i].id);
|
||||
(sceneInfo !== undefined && sceneInfo.Value === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
/*switch (i) {
|
||||
case "gotCharm_36":
|
||||
// prevents green checkbox and adding 1% when only got one white fragment
|
||||
(playerData.gotQueenFragment === true && playerData.gotKingFragment === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
|
@ -916,7 +1137,7 @@ function CheckIfDataTrue(section, dataObject, playerData, worldData = []) {
|
|||
if (playerData.hasOwnProperty(i) === false) {
|
||||
SetIconNone(section, i);
|
||||
dataObject[i].disabled = true;
|
||||
/* textPrefix = `<del>${textPrefix}</del>`; */
|
||||
//textPrefix = `<del>${textPrefix}</del>`;
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -925,7 +1146,7 @@ function CheckIfDataTrue(section, dataObject, playerData, worldData = []) {
|
|||
if (i === "grimmChildLevel") {
|
||||
// (playerData.grimmChildLevel >= 4) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
|
||||
/* Check if Nightmare King or Banishment by looking at grimmChildLevel */
|
||||
// Check if Nightmare King or Banishment by looking at grimmChildLevel
|
||||
switch (playerData[i]) {
|
||||
|
||||
case 4:
|
||||
|
|
@ -1049,7 +1270,7 @@ function CheckIfDataTrue(section, dataObject, playerData, worldData = []) {
|
|||
if (checkText === "PropertyNotFound") {
|
||||
SetIconNone(section, i);
|
||||
dataObject[i].disabled = true;
|
||||
/* textPrefix = `<del>${textPrefix}</del>`; */
|
||||
//textPrefix = `<del>${textPrefix}</del>`;
|
||||
break;
|
||||
|
||||
} else if (checkText === "PantheonCompleted") {
|
||||
|
|
@ -1063,6 +1284,8 @@ function CheckIfDataTrue(section, dataObject, playerData, worldData = []) {
|
|||
|
||||
default:
|
||||
(playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
}*/
|
||||
(playerData[i] === true) ? SetIconGreen(section, i): SetIconRed(section, i);
|
||||
}
|
||||
|
||||
/* sFillText += PrepareHTMLString(section, textPrefix, textSuffix, wiki); */
|
||||
|
|
@ -1141,22 +1364,22 @@ function CheckGodmasterDoors(dataObject, playerData) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Verifies the level of player's nail upgrades, and appends HTML accordingly.
|
||||
* Verifies the level of player's needle upgrades, and appends HTML accordingly.
|
||||
* @param {object} section ID of the HTML element for data appending
|
||||
* @param {object} dataObject Object containing nail upgrades data to be verified
|
||||
* @param {object} dataObject Object containing needle upgrades data to be verified
|
||||
* @param {object} playerData Reference/pointer to specific data where to search in the save file
|
||||
*/
|
||||
function CheckNailUpgrades(section, dataObject, playerData) {
|
||||
function CheckNeedleUpgrades(section, dataObject, playerData) {
|
||||
|
||||
// appends "Nail" to every array element
|
||||
// same as names in the database object
|
||||
let nail = ["old", "sharpened", "channeled", "coiled", "pure"].map((element) => element + "Nail");
|
||||
let Needle = ["starting", "sharpened", "shining", "hivesteel", "paleSteel"].map((element) => element + "Needle");
|
||||
|
||||
let sFillText = "";
|
||||
|
||||
for (let i = 0; i < 5; i++) {
|
||||
(playerData.nailSmithUpgrades >= i) ? SetIconGreen(section, nail[i]): SetIconRed(section, nail[i]);
|
||||
sFillText += PrepareHTMLString(section, dataObject[nail[i]].name, dataObject[nail[i]].spoiler, dataObject[nail[i]].wiki);
|
||||
(playerData.nailUpgrades >= i) ? SetIconGreen(section, Needle[i]): SetIconRed(section, Needle[i]);
|
||||
sFillText += PrepareHTMLString(section, dataObject[Needle[i]].name, dataObject[Needle[i]].spoiler, dataObject[Needle[i]].wiki);
|
||||
}
|
||||
if (section.percent) section.percent--; // subject one for the Old Nail
|
||||
}
|
||||
|
|
@ -2017,136 +2240,39 @@ function CheckHuntersJournal(db, sectionName, playerData) {
|
|||
|
||||
let section = db.sections[sectionName];
|
||||
let entries = db.sections[sectionName].entries;
|
||||
let entriesStatistics = db.sections.statistics.entries;
|
||||
//let entriesStatistics = db.sections.statistics.entries; // Alba: disabled for future use
|
||||
let name = "";
|
||||
let nameDefault = "";
|
||||
let amountKillsLeft = 0;
|
||||
let journalPlayerList = playerData.EnemyJournalKillData.list
|
||||
|
||||
for (let entry in entries) {
|
||||
|
||||
name = entries[entry].nameDefault;
|
||||
nameDefault = entries[entry].nameDefault;
|
||||
let MonsterInfo = journalPlayerList.find(journalPlayerList => journalPlayerList.Name === entries[entry].databaseName);
|
||||
|
||||
entries[entry].name = nameDefault;
|
||||
|
||||
/* Entry Shade always unlocked */
|
||||
if (entry === "ShadeJournal") {
|
||||
//recorded and founded and reached to the requirement
|
||||
if (MonsterInfo !== undefined
|
||||
&& MonsterInfo.Record.Kills >= entries[entry].killRequire)
|
||||
{
|
||||
entries[entry].name = entries[entry].gameName;
|
||||
SetIconGreen(section, entry);
|
||||
|
||||
/* Proceed to next entry immediately */
|
||||
continue;
|
||||
}
|
||||
|
||||
if (playerData.hasOwnProperty(`kills${entry}`)) {
|
||||
|
||||
switch (entry) {
|
||||
|
||||
case "GreyPrince":
|
||||
case "ZotelingBalloon":
|
||||
case "ZotelingHopper":
|
||||
case "ZotelingBuzzer":
|
||||
|
||||
/* When Zote == OFF (Neglect route), fade the entry and move to the next iteration */
|
||||
if (playerData.zoteDead === true || (playerData.zoteRescuedBuzzer === false && playerData.hasWalljump === true)) {
|
||||
|
||||
entries[entry].disabled = true;
|
||||
entries[entry].name = nameDefault;
|
||||
SetIconNone(section, entry);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case "FlameBearerLarge":
|
||||
|
||||
/* If the troupe was banished and the player didn't defeat any Grimmkin Nightmare, then it's entry cannot be obtained on this save */
|
||||
if (playerData.destroyedNightmareLantern === true && playerData.killedFlameBearerLarge === false) {
|
||||
|
||||
entries[entry].disabled = true;
|
||||
entries[entry].name = nameDefault;
|
||||
SetIconNone(section, entry);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case "NightmareGrimm":
|
||||
|
||||
/* if the troupe was banished, the Nightmare King entry cannot be obtained on this save */
|
||||
if (playerData.destroyedNightmareLantern === true) {
|
||||
|
||||
entries[entry].disabled = true;
|
||||
entries[entry].name = nameDefault;
|
||||
SetIconNone(section, entry);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
amountKillsLeft = playerData[`kills${entry}`];
|
||||
|
||||
/* When the Hunter's Note is unlocked, the entry has a green symbol */
|
||||
if (amountKillsLeft === 0) {
|
||||
|
||||
SetIconGreen(section, entry);
|
||||
|
||||
/* If not, show how many remain to defeat in the name */
|
||||
} else {
|
||||
|
||||
name += ` (${amountKillsLeft})`;
|
||||
}
|
||||
// didnt reach the limit but at least kill him once.
|
||||
else if (MonsterInfo !== undefined
|
||||
&& MonsterInfo.Record.Kills >= 1)
|
||||
{
|
||||
name = entries[entry].gameName + ` (${(entries[entry].killRequire-MonsterInfo.Record.Kills)})`;
|
||||
entries[entry].name = name;
|
||||
|
||||
/* When killed at least 1, the entry has a gray symbol */
|
||||
if (playerData[`killed${entry}`] === true) {
|
||||
|
||||
SetIconPartialJournal(section, entry);
|
||||
|
||||
/* When not killed, the entry is undiscovered */
|
||||
} else {
|
||||
|
||||
SetIconRed(section, entry);
|
||||
}
|
||||
}
|
||||
|
||||
/* Void Idol backwards compatibility */
|
||||
if (entry === "VoidIdol_1") {
|
||||
if (playerData.killedVoidIdol_1 === false &&
|
||||
(playerData.killedVoidIdol_2 === true || playerData.killedVoidIdol_3 === true)) {
|
||||
|
||||
SetIconGreen(section, entry);
|
||||
entries[entry].name = nameDefault;
|
||||
}
|
||||
}
|
||||
|
||||
/* Earlier save files backwards compatibility (no undefined) */
|
||||
} else {
|
||||
|
||||
amountKillsLeft = 0;
|
||||
entries[entry].disabled = true;
|
||||
entries[entry].name = name;
|
||||
|
||||
/* Subtract one from maximum of journal entries (for extended completion and green icons) */
|
||||
switch (entry) {
|
||||
case "VoidIdol_1":
|
||||
case "VoidIdol_2":
|
||||
case "VoidIdol_3":
|
||||
case "BindingSeal":
|
||||
case "GodseekerMask":
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
entriesStatistics.journalEntriesCompleted.max--;
|
||||
entriesStatistics.journalNotesCompleted.max--;
|
||||
}
|
||||
|
||||
SetIconNone(section, entry);
|
||||
SetIconPartialJournal(section, entry);
|
||||
}
|
||||
else
|
||||
{
|
||||
name = entries[entry].gameName + ` (${(entries[entry].killRequire)})`;
|
||||
entries[entry].name = name;
|
||||
SetIconRed(section, entry);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,458 +0,0 @@
|
|||
// ---------------- Hollow Knight Data Constant Objects ----------------- //
|
||||
/*
|
||||
This is the whole database for the tool, based on the .json save file data
|
||||
*/
|
||||
|
||||
const DIV_ID = {
|
||||
intro: {
|
||||
h2: "Game Status",
|
||||
id: "hk-intro",
|
||||
maxPercent: 112
|
||||
},
|
||||
hints: {
|
||||
h2: "My friend Elderbug once told me about...",
|
||||
id: "hk-hints",
|
||||
},
|
||||
bosses: {
|
||||
h2: "Bosses",
|
||||
id: "hk-bosses",
|
||||
percent: 0,
|
||||
maxPercent: 14
|
||||
},
|
||||
charms: {
|
||||
h2: "Charms",
|
||||
id: "hk-charms",
|
||||
percent: 0,
|
||||
maxPercent: 36
|
||||
},
|
||||
equipment: {
|
||||
h2: "Equipment",
|
||||
id: "hk-equipment",
|
||||
percent: 0,
|
||||
maxPercent: 14
|
||||
},
|
||||
nailUpgrades: {
|
||||
h2: "Nail Upgrades",
|
||||
id: "hk-nailupgrades",
|
||||
percent: 0,
|
||||
maxPercent: 4
|
||||
},
|
||||
nailArts: {
|
||||
h2: "Nail Arts",
|
||||
id: "hk-nailarts",
|
||||
percent: 0,
|
||||
maxPercent: 3
|
||||
},
|
||||
spells: {
|
||||
h2: "Spells",
|
||||
id: "hk-spells",
|
||||
percent: 0,
|
||||
maxPercent: 6
|
||||
},
|
||||
maskShards: {
|
||||
h2: "Mask Shards",
|
||||
id: "hk-maskshards",
|
||||
percent: 0,
|
||||
maxPercent: 4
|
||||
},
|
||||
vesselFragments: {
|
||||
h2: "Vessel Fragments",
|
||||
id: "hk-vesselfragments",
|
||||
percent: 0,
|
||||
maxPercent: 3
|
||||
},
|
||||
dreamNail: {
|
||||
h2: "Dream Nail and Essence",
|
||||
id: "hk-dreamnail",
|
||||
percent: 0,
|
||||
maxPercent: 3
|
||||
},
|
||||
warriorDreams: {
|
||||
h2: "Warrior Dreams",
|
||||
id: "hk-warriordreams",
|
||||
percent: 0,
|
||||
maxPercent: 7
|
||||
},
|
||||
dreamers: {
|
||||
h2: "Dreamers",
|
||||
id: "hk-dreamers",
|
||||
percent: 0,
|
||||
maxPercent: 3
|
||||
},
|
||||
colosseum: {
|
||||
h2: "Colosseum of Fools",
|
||||
id: "hk-colosseum",
|
||||
percent: 0,
|
||||
maxPercent: 3
|
||||
},
|
||||
grimmTroupe: {
|
||||
h2: "Grimm Troupe Content Pack",
|
||||
id: "hk-grimmtroupe",
|
||||
percent: 0,
|
||||
maxPercent: 6
|
||||
},
|
||||
lifeblood: {
|
||||
h2: "Lifeblood Content Pack",
|
||||
id: "hk-lifeblood",
|
||||
percent: 0,
|
||||
maxPercent: 1
|
||||
},
|
||||
godmaster: {
|
||||
h2: "Godmaster Content Pack",
|
||||
id: "hk-godmaster",
|
||||
percent: 0,
|
||||
maxPercent: 5
|
||||
},
|
||||
essential: {
|
||||
h2: "Game Completion Essentials",
|
||||
id: "hk-essential"
|
||||
},
|
||||
achievements: {
|
||||
h2: "Achievements Essentials",
|
||||
id: "hk-achievements"
|
||||
},
|
||||
statistics: {
|
||||
h2: "Game Statistics",
|
||||
id: "hk-statistics"
|
||||
}
|
||||
};
|
||||
|
||||
const HINTS = {
|
||||
fireballLevel: ["", "...a mysterious shaman living in a dwelling below the town of Dirtmouth"],
|
||||
hornet1Defeated: ["", "...a skilled protector guarding ruins in a lush green forest"],
|
||||
hasDash: ["", "...an old cloak lying on a green path near a broken shell"],
|
||||
hasWalljump: ["", "...a sharp claw lying forgotten somewhere amidst the insect village"],
|
||||
Crossroads_04: ["", "...a mother sleeping peacefully below the town of Dirtmouth"],
|
||||
slyRescued: ["", "...a fellow town bug who seems to be lost somewhere in the crossroads"],
|
||||
hasLantern: ["", "...a precious item able to carry some light to even the darkest places"],
|
||||
hasSuperDash: ["", "...some powerful crystal beating somewhere deep inside the mines"],
|
||||
hasDreamNail: ["", "...a weapon from a dream world only found where the souls can peacefully rest"],
|
||||
killedInfectedKnight: ["", "...a shattered corpse forgotten in a windy cave in the ancient depths below the city"],
|
||||
hasDoubleJump: ["", "...something incredibly light dropped by a monarchfly in the ancient depths below the city"],
|
||||
killedBlackKnight: ["", "...discarded shells of black guards lying on the floor of a high spire"],
|
||||
lurienDefeated: ["", "...a dreamer sleeping somewhere at the top of a high spire"],
|
||||
dungDefenderOrHornet2: ["", "...a skilled combatant living at the heart of the sewers or watching over a shell amidst ash falling from the sky"],
|
||||
ismaTearOrShadeCloak: ["", "...something precious in a grove accessed from the waterways or a massive royal door guarding a cloak behind the darkness"],
|
||||
defeatedMegaJelly: ["", "...an intelligent being floating inside hidden archives behind the fog"],
|
||||
monomonDefeated: ["", "...a dreamer sleeping somewhere hidden in a foggy area"],
|
||||
hegemolDefeated: ["", "...a dreamer sleeping near a spider nest area"],
|
||||
killedHollowKnight: ["", "...a disturbance inside a black temple"],
|
||||
};
|
||||
|
||||
const BOSSES = {
|
||||
falseKnightDefeated: ["False Knight", "Forgotten Crossroads"], // "Battle Scene" - "Crossroads_10" ?
|
||||
hornet1Defeated: ["Hornet Protector", "Greenpath"],
|
||||
defeatedDungDefender: ["Dung Defender", "Royal Waterways"],
|
||||
mageLordDefeated: ["Soul Master", "City of Tears: Soul Sanctum"],
|
||||
killedBlackKnight: ["Watcher Knights", "City of Tears: Watcher's Spire"],
|
||||
collectorDefeated: ["The Collector", "City of Tears: Tower of Love"],
|
||||
defeatedMantisLords: ["Mantis Lords", "Mantis Village"],
|
||||
defeatedMegaJelly: ["Uumuu", "Fog Canyon: Teacher's Archives"],
|
||||
hornetOutskirtsDefeated: ["Hornet Sentinel", "Kingdom's Edge"],
|
||||
killedInfectedKnight: ["Broken Vessel", "Ancient Basin"],
|
||||
killedMimicSpider: ["Nosk", "Deepnest"], // "Battle Scene" - "Deepnest_32" ?
|
||||
killedTraitorLord: ["Traitor Lord", "Queen's Gardens"] // "Battle Scene" - "Fungus3_23" ?
|
||||
};
|
||||
|
||||
// "Battle Scene" sceneData.persistentBoolItems.id
|
||||
const BOSSES_WORLD = {
|
||||
Crossroads_04: ["Gruz Mother", "Forgotten Crossroads"], // killedBigFly
|
||||
Crossroads_09: ["Brooding Mawlek", "Forgotten Crossroads"] // killedMawlek
|
||||
};
|
||||
|
||||
// reference: https://radiance.host/apidocs/Charms.html
|
||||
const CHARMS = {
|
||||
gotCharm_1: ["#1 Gathering Swarm", "Sly: 300 Geo"], // 1
|
||||
gotCharm_2: ["#2 Wayward Compass", "Iselda: 220 Geo"], // 1
|
||||
gotCharm_3: ["#3 Grubsong", "Grubfather: 10 Grubs rescued"], // 1
|
||||
gotCharm_4: ["#4 Stalwart Shell", "Sly: 200 Geo"], // 2
|
||||
gotCharm_5: ["#5 Baldur Shell", "Howling Cliffs"], // 2
|
||||
gotCharm_6: ["#6 Fury of the Fallen", "King's Pass"], // 2
|
||||
gotCharm_7: ["#7 Quick Focus", "Salubra: 800 Geo"], // 3
|
||||
gotCharm_8: ["#8 Lifeblood Heart", "Salubra: 250 Geo"], // 2
|
||||
gotCharm_9: ["#9 Lifeblood Core", "The Abyss: 15 Lifeblood masks"], // 3
|
||||
gotCharm_10: ["#10 Defender's Crest", "Royal Waterways"], // 1
|
||||
gotCharm_11: ["#11 Flukenest", "Royal Waterways"], // 3
|
||||
gotCharm_12: ["#12 Thorns of Agony", "Greenpath"], // 1
|
||||
gotCharm_13: ["#13 Mark of Pride", "Mantis Village"], // 3
|
||||
gotCharm_14: ["#14 Steady Body", "Salubra: 120 Geo"], // 1
|
||||
gotCharm_15: ["#15 Heavy Blow", "Sly: 350 Geo + Shopkeeper's Key"], // 2
|
||||
gotCharm_16: ["#16 Sharp Shadow", "Deepnest"], // 2
|
||||
gotCharm_17: ["#17 Spore Shroom", "Fungal Wastes"], // 1
|
||||
gotCharm_18: ["#18 Longnail", "Salubra: 300 Geo"], // 2
|
||||
gotCharm_19: ["#19 Shaman Stone", "Salubra: 220 Geo"], // 3
|
||||
gotCharm_20: ["#20 Soul Catcher", "Forgotten Crossroads: Ancestral Mound"], // 2
|
||||
gotCharm_21: ["#21 Soul Eater", "Resting Grounds"], // 4
|
||||
gotCharm_22: ["#22 Glowing Womb", "Forgotten Crossroads"], // 2
|
||||
gotCharm_23: ["#23 Fragile Heart", "Leg Eater: 350/280 Geo"], // 2
|
||||
gotCharm_24: ["#24 Fragile Greed", "Leg Eater: 250/200 Geo"], // 2
|
||||
gotCharm_25: ["#25 Fragile Strength", "Leg Eater: 600/480 Geo"], // 3
|
||||
gotCharm_26: ["#26 Nailmaster’s Glory", "Sly: All Nail Arts"], // 1
|
||||
gotCharm_27: ["#27 Joni’s Blessing", "Howling Cliffs: Joni's Repose"], // 4
|
||||
gotCharm_28: ["#28 Shape of Unn", "Greenpath: Lake of Unn"], // 2
|
||||
gotCharm_29: ["#29 Hiveblood", "The Hive"], // 4
|
||||
gotCharm_30: ["#30 Dream Wielder", "Seer: 500 Essence"], // 1
|
||||
gotCharm_31: ["#31 Dashmaster", "Fungal Wastes"], // 2
|
||||
gotCharm_32: ["#32 Quick Slash", "Kingdom's Edge"], // 3
|
||||
gotCharm_33: ["#33 Spell Twister", "City of Tears: Soul Sanctum"], // 2
|
||||
gotCharm_34: ["#34 Deep Focus", "Crystal Peak"], // 4
|
||||
gotCharm_35: ["#35 Grubberfly’s Elegy", "Grubfather: 46 Grubs rescued"], // 3
|
||||
gotCharm_36: ["#36 Kingsoul", "Queen's Gardens + Ancient Basin"], // 5
|
||||
};
|
||||
|
||||
const COLOSSEUM = {
|
||||
colosseumBronzeCompleted: ["Trial of the Warrior", "Little Fool: 100 Geo"],
|
||||
colosseumSilverCompleted: ["Trial of the Conqueror", "Little Fool: 450 Geo + Warrior completed"],
|
||||
colosseumGoldCompleted: ["Trial of the Fool", "Little Fool: 800 Geo + Conqueror completed"],
|
||||
};
|
||||
|
||||
const DREAMERS = {
|
||||
lurienDefeated: ["Lurien the Watcher", "City of Tears: Watcher's Spire"],
|
||||
monomonDefeated: ["Monomon the Teacher", "Fog Canyon: Teacher's Archives"],
|
||||
hegemolDefeated: ["Herrah the Beast", "Deepnest: Distant Village"]
|
||||
};
|
||||
|
||||
const DREAMNAIL = {
|
||||
hasDreamNail: ["Dream Nail acquired", "Resting Grounds"],
|
||||
dreamNailUpgraded: ["Awoken Dream Nail", "Seer: 1800 Essence"],
|
||||
mothDeparted: ["Hear the Seer's final words", "Seer: 2400 Essence"]
|
||||
};
|
||||
|
||||
const EQUIPMENT = {
|
||||
hasDash: ["Mothwing Cloak", "Greenpath: Dash ability"],
|
||||
hasWalljump: ["Mantis Claw", "Mantis Village: Wall Jump ability"],
|
||||
hasSuperDash: ["Crystal Heart", "Crystal Peak: Super Dash ability"],
|
||||
hasDoubleJump: ["Monarch Wings", "Ancient Basin: Double Jump ability"],
|
||||
hasAcidArmour: ["Isma's Tear", "Royal Waterways: Acid Armour ability"],
|
||||
hasKingsBrand: ["King's Brand", "Kingdom's Edge"],
|
||||
hasShadowDash: ["Shade Cloak", "The Abyss: Shadow Dash ability"]
|
||||
};
|
||||
|
||||
const MASKSHARDS = {
|
||||
slyShellFrag1: ["Mask Shard #1", "Sly: 150 Geo"],
|
||||
slyShellFrag2: ["Mask Shard #2", "Sly: 500 Geo"],
|
||||
slyShellFrag3: ["Mask Shard #3", "Sly: 800 Geo + Shopkeeper's Key"],
|
||||
slyShellFrag4: ["Mask Shard #4", "Sly: 1500 Geo + Shopkeeper's Key"],
|
||||
dreamReward7: ["Mask Shard #5", "Seer: 1500 Essence"]
|
||||
};
|
||||
|
||||
// "Heart Piece" sceneData.persistentBoolItems.id
|
||||
const MASKSHARDS_WORLD = {
|
||||
Crossroads_13: ["Mask Shard #6", "Forgotten Crossroads: below Hot Springs"],
|
||||
Crossroads_09: ["Mask Shard #7", "Forgotten Crossroads: Brooding Mawlek"],
|
||||
Crossroads_38: ["Mask Shard #8", "Grubfather: 5 Grubs rescued"],
|
||||
Room_Bretta: ["Mask Shard #9", "Dirtmouth: Bretta's Room, rescue Bretta"],
|
||||
Fungus2_01: ["Mask Shard #10", "Queen's Station, requires Mantis Claw"],
|
||||
Waterways_04b: ["Mask Shard #11", "Royal Waterways"],
|
||||
Fungus1_36: ["Mask Shard #12", "Greenpath: Stone Sanctuary"],
|
||||
Mines_32: ["Mask Shard #13", "Crystal Peak: Enraged Guardian"],
|
||||
Fungus2_25: ["Mask Shard #14", "Deepnest: entrance from Fungal Wastes"],
|
||||
Hive_04: ["Mask Shard #15", "The Hive, use Hive Guardian"],
|
||||
Room_Mansion: ["Mask Shard #16", "Resting Grounds: Delicate Flower"]
|
||||
};
|
||||
|
||||
const VESSELFRAGMENTS = {
|
||||
slyVesselFrag1: ["Vessel Fragment #1", "Sly: 550 Geo"],
|
||||
slyVesselFrag2: ["Vessel Fragment #2", "Sly: 900 Geo + Shopkeeper's Key"],
|
||||
dreamReward5: ["Vessel Fragment #3", "Seer: 700 Essence"],
|
||||
vesselFragStagNest: ["Vessel Fragment #4", "Stag Nest"]
|
||||
};
|
||||
|
||||
// "Vessel Fragment" sceneData.persistentBoolItems.id
|
||||
const VESSELFRAGMENTS_WORLD = {
|
||||
Fungus1_13: ["Vessel Fragment #5", "Greenpath: near Queen's Gardens exit"],
|
||||
Crossroads_37: ["Vessel Fragment #6", "Forgotten Crossroads: unlock City of Tears lift"],
|
||||
Ruins2_09: ["Vessel Fragment #7", "Above King's Station"],
|
||||
Deepnest_38: ["Vessel Fragment #8", "Deepnest: Goam platforming challenge"],
|
||||
Abyss_04: ["Vessel Fragment #9", "Ancient Basin Fountain: 3000 Geo"]
|
||||
};
|
||||
|
||||
const NAILARTS = {
|
||||
hasDashSlash: ["Great Slash", "Nailmaster Sheo: Greenpath"], // this is correct
|
||||
hasUpwardSlash: ["Dash Slash", "Nailmaster Oro: Kingdom's Edge, 800 Geo"], // this is correct
|
||||
hasCyclone: ["Cyclone Slash", " Nailmaster Mato: Howling Cliffs"],
|
||||
};
|
||||
|
||||
const NAILUPGRADES = [
|
||||
["#0 Old Nail", "Starting Weapon"],
|
||||
["#1 Sharpened Nail", "Nailsmith: 250 Geo"],
|
||||
["#2 Channeled Nail", "Nailsmith: 800 Geo + 1 Pale Ore"],
|
||||
["#3 Coiled Nail", "Nailsmith: 2000 Geo + 2 Pale Ore"],
|
||||
["#4 Pure Nail", "Nailsmith: 4000 Geo + 3 Pale Ore"]
|
||||
];
|
||||
|
||||
const SPELLS = {
|
||||
fireballLevel: {
|
||||
1: ["Vengeful Spirit", "Forgotten Crossroads: Ancestral Mound"],
|
||||
2: ["Shade Soul", "City of Tears: Soul Sanctum + Elegant Key"],
|
||||
},
|
||||
quakeLevel: {
|
||||
1: ["Desolate Dive", "City of Tears: Soul Sanctum"],
|
||||
2: ["Descending Dark", "Crystal Peak: Crystallised Mound"],
|
||||
},
|
||||
screamLevel: {
|
||||
1: ["Howling Wraiths", "Fog Canyon: Overgrown Mound"],
|
||||
2: ["Abyss Shriek", "The Abyss"],
|
||||
}
|
||||
};
|
||||
|
||||
const WARRIORDREAMS = {
|
||||
xeroDefeated: ["Xero", "Resting Grounds"],
|
||||
noEyesDefeated: ["No Eyes", "Greenpath: Stone Sanctuary"],
|
||||
elderHuDefeated: ["Elder Hu", "Fungal Wastes"],
|
||||
aladarSlugDefeated: ["Gorb", "Howling Cliffs"],
|
||||
mumCaterpillarDefeated: ["Marmu", "Queen's Gardens"],
|
||||
galienDefeated: ["Galien", "Deepnest"],
|
||||
markothDefeated: ["Markoth", "Kingdom's Edge, requires Shade Cloak"],
|
||||
};
|
||||
|
||||
const GRIMMTROUPE = {
|
||||
gotCharm_37: ["Charm #37 Sprintmaster", "Sly: 400 Geo + Shopkeeper's Key"],
|
||||
gotCharm_38: ["Charm #38 Dreamshield", "Resting Grounds"],
|
||||
gotCharm_39: ["Charm #39 Weaversong", "Deepnest: Weaver's Den"],
|
||||
gotCharm_40: ["Charm #40 Grimmchild / Carefree Melody", "Dirtmouth"],
|
||||
killedGrimm: ["Troupe Leader Grimm", "Dirtmouth"]
|
||||
};
|
||||
|
||||
const LIFEBLOOD = {
|
||||
killedHiveKnight: ["Hive Knight", "The Hive"]
|
||||
};
|
||||
|
||||
const GODMASTER = {
|
||||
hasGodfinder: ["Godtuner", "Junk Pit, requires Simple Key"]
|
||||
};
|
||||
|
||||
const GODMASTER_DOORS = [
|
||||
["#1 Pantheon of the Master", "Godhome"],
|
||||
["#2 Pantheon of the Artist", "Godhome"],
|
||||
["#3 Pantheon of the Sage", "Godhome"],
|
||||
["#4 Pantheon of the Knight", "Godhome"]
|
||||
];
|
||||
|
||||
const ESSENTIAL = {
|
||||
grubsCollected: ["Grubs Rescued", "out of 46 total", 46],
|
||||
dreamOrbs: ["Essence Collected", "Dream Nail (2400 for completion)", 2400],
|
||||
stationsOpened: ["Stag Stations opened", "out of 10 total", 10],
|
||||
fountainGeo: ["Geo in Fountain", "Ancient Basin: 3000 Geo maximum", 3000],
|
||||
slyRescued: ["Sly Rescued", "Forgotten Crossroads, near Gruz Mother"],
|
||||
brettaRescued: ["Bretta Rescued", "Fungal Wastes, near Dashmaster charm statue"],
|
||||
hasLantern: ["Lumafly Lantern", "Sly: 1800 Geo"],
|
||||
shopkeeperKey: ["Shopkeeper's Key", "Crystal Peak"],
|
||||
elegantKey: ["Elegant Key", "Sly: 800 Geo + Shopkeeper's Key"],
|
||||
loveKey: ["Love Key", "Queen's Gardens, near Fungal Wastes"],
|
||||
slySimpleKey: ["Simple Key #1", "Sly: 950 Geo"],
|
||||
simpleKeyCityOfTears: ["Simple Key #2", "City of Tears"],
|
||||
simpleKeyAncientBasin: ["Simple Key #3", "Ancient Basin"],
|
||||
gotLurkerKey: ["Simple Key #4", "Kingdom's Edge: Colosseum of Fools"],
|
||||
paleOreAncientBasin: ["Pale Ore #1", "Ancient Basin"],
|
||||
paleOreSeer: ["Pale Ore #2", "Seer: 300 Essence"],
|
||||
paleOreCrystalPeak: ["Pale Ore #3", "Crystal Peak: Hallownest's Crown"],
|
||||
paleOreDeepnest: ["Pale Ore #4", "Deepnest, Nosk reward"],
|
||||
paleOreGrubfather: ["Pale Ore #5", "Grubfather: 31 Grubs rescued"],
|
||||
paleOreColosseum: ["Pale Ore #6", "Colosseum of Fools: Trial of the Conqueror"],
|
||||
hasTramPass: ["Tram Pass", "Deepnest, Failed Tramway"],
|
||||
nightmareLanternLit: ["Nightmare Lantern Lit", "Howling Cliffs, corpse of a large bug"]
|
||||
};
|
||||
|
||||
const GRUBS_LIST = ["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_1", "Ruins2_11_2", "Ruins2_11_3", "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"];
|
||||
|
||||
const ACHIEVEMENTS = {
|
||||
areaMaps: ["Area Maps", "Cornifer and Iselda (out of 13)", 13, [
|
||||
"mapCrossroads", "mapGreenpath", "mapFogCanyon", "mapRoyalGardens", "mapFungalWastes", "mapCity", "mapWaterways", "mapMines", "mapDeepnest", "mapCliffs", "mapOutskirts", "mapRestingGrounds", "mapAbyss"
|
||||
]],
|
||||
journalEntriesCompleted: ["Creatures Encountered", "Hunter's Journal (164 max)", 164],
|
||||
journalNotesCompleted: ["Hunter Notes Completed", "Hunter's Journal (164 max)", 164],
|
||||
hasJournal: ["Hunter's Journal", "Greenpath: Hunter"],
|
||||
hasHuntersMark: ["Hunter's Mark", "Greenpath: Hunter"],
|
||||
killedPrayerSlug: ["Journal: Maggot", "Forgotten Crossroads: False Knight secret room"],
|
||||
killedOrangeScuttler: ["Journal: Lightseed", "Infected Crossroads"],
|
||||
killedPigeon: ["Journal: Maskfly", "Greenpath, Queen's Gardens"],
|
||||
killedLazyFlyer: ["Journal: Aluba", "Lake of Unn, Queen's Gardens (near White Lady)"],
|
||||
killedAcidFlyer: ["Journal: Duranda", "Greenpath: Nailmaster Sheo's tent path"],
|
||||
killedAcidWalker: ["Journal: Durandoo", "Greenpath, Queen's Gardens"],
|
||||
killedPlantShooter: ["Journal: Gulka", "Greenpath: west of Stone Sanctuary"],
|
||||
killedMushroomTurret: ["Journal: Sporg", "Fungal Wastes"],
|
||||
killedZapBug: ["Journal: Charged Lumafly", "Fog Canyon: Teacher's Archives (tank)"],
|
||||
killedCrystalCrawler: ["Journal: Crystal Crawler", "Crystal Peak"],
|
||||
killedGorgeousHusk: ["Journal: Gorgeous Husk", "City of Tears: secret room"],
|
||||
killedWorm: ["Journal: Goam", "Infected Crossroads: near Fungal Wastes entrance"],
|
||||
killedBigCentipede: ["Journal: Garpede", "Deepnest: east of Hot Spring"],
|
||||
killedAbyssTendril: ["Journal: Void Tendrils", "The Abyss: secret room"],
|
||||
killedPaleLurker: ["Journal: Pale Lurker", "Colosseum of Fools: secret area"],
|
||||
falseKnightDreamDefeated: ["Failed Champion", "Forgotten Crossroads"],
|
||||
mageLordDreamDefeated: ["Soul Tyrant", "City of Tears: Soul Sanctum"],
|
||||
infectedKnightDreamDefeated: ["Lost Kin", "Ancient Basin"],
|
||||
whiteDefenderDefeated: ["White Defender", "Royal Waterways"],
|
||||
greyPrinceDefeated: ["Grey Prince Zote", "Dirtmouth: Bretta's Room (per save choice)"],
|
||||
killedHollowKnight: ["Hollow Knight", "Forgotten Crossroads: Black Egg Temple"],
|
||||
salubraBlessing: ["Salubra's Blessing", "Salubra: 800 Geo + all 40 Charms found"],
|
||||
gotShadeCharm: ["Void Heart", "Kingsoul + Birthplace"],
|
||||
killedFinalBoss: ["Radiance", "Forgotten Crossroads: Black Egg Temple"],
|
||||
bossDoorStateTier5: ["Embrace the Void", "Godhome: Pantheon of Hallownest"],
|
||||
zoteDead: ["Optimal Zote", "Neglect achievement (per save choice)"],
|
||||
nailsmithSpared: ["Optimal Nailsmith", "Happy Couple achievement (per save choice)"],
|
||||
};
|
||||
|
||||
const STATISTICS = {
|
||||
nailDamage: ["Nail Damage", "Nailsmith upgrades, City of Tears", 21],
|
||||
charmSlots: ["Charm Notches", "out of 11 total", 11],
|
||||
whisperingRoots: ["Whispering Roots completed", "Dream Nail (out of 15)", 15],
|
||||
relicsWandererJournal: ["Relic #1 found total", "Wanderer's Journal (out of 14)", 14, "trinket1", "soldTrinket1"],
|
||||
relicsHallownestSeal: ["Relic #2 found total", "Hallownest Seal (out of 17)", 17, "trinket2", "soldTrinket2"],
|
||||
relicsKingsIdol: ["Relic #3 found total", "King's Idol (out of 8)", 8, "trinket3", "soldTrinket3"],
|
||||
relicsArcaneEgg: ["Relic #4 found total", "Arcane Egg (4 max, 1 missable)", 4, "trinket4", "soldTrinket4"],
|
||||
geoRocks: ["Geo Rocks", "Unbroken/Broken/Discovered Total"],
|
||||
geoPool: ["Shade Geo", "Amount of Geo the Shade is currently holding", 0], // not ghostCoins
|
||||
rancidEggs: ["Rancid Eggs", "Find: Hallownest, Buy: Sly, Tuk"],
|
||||
xunFlowerBrokeTimes: ["Delicate Flowers broken", "Resting Grounds: Grey Mourner"],
|
||||
notchShroomOgres: ["Charm Notch #1", "Fungal Wastes: Shroom Ogres room"],
|
||||
salubraNotch1: ["Charm Notch #2", "Salubra: 120 Geo + 5 Charms found"],
|
||||
salubraNotch2: ["Charm Notch #3", "Salubra: 500 Geo + 10 Charms found"],
|
||||
salubraNotch3: ["Charm Notch #4", "Salubra: 900 Geo + 18 Charms found"],
|
||||
salubraNotch4: ["Charm Notch #5", "Salubra: 1400 Geo + 25 Charms found"],
|
||||
colosseumBronzeCompleted: ["Charm Notch #6", "Colosseum of Fools: Trial of the Warrior"],
|
||||
notchFogCanyon: ["Charm Notch #7", "Fog Canyon: explosive eggs room"],
|
||||
gotGrimmNotch: ["Charm Notch #8", "Dirtmouth: Troupe Leader Grimm"],
|
||||
hasDreamGate: ["Dream Gate", "Seer: 900 Essence"],
|
||||
fragileGreed_unbreakable: ["Unbreakable Greed", "Divine: Fragile Greed + 9000 Geo"],
|
||||
fragileHealth_unbreakable: ["Unbreakable Heart", "Divine: Fragile Heart + 12000 Geo"],
|
||||
fragileStrength_unbreakable: ["Unbreakable Strength", "Divine: Fragile Strength + 15000 Geo"],
|
||||
killedMenderBug: ["Journal: Menderbug", "Forgotten Crossroads + destroy sign"],
|
||||
killedBindingSeal: ["Journal: Seal of Binding", "White Palace: Path of Pain completion"],
|
||||
killedGodseekerMask: ["Journal: Weathered Mask", "Godhome: Land of Storms"],
|
||||
killedVoidIdol_1: ["Journal: Void Idol Attuned", "Godhome: Hall of Gods, defeat all"],
|
||||
killedVoidIdol_2: ["Journal: Void Idol Ascended", "Godhome: Hall of Gods, defeat all"],
|
||||
killedVoidIdol_3: ["Journal: Void Idol Radiant", "Godhome: Hall of Gods, defeat all"],
|
||||
whiteDefenderDefeats: ["White Defender times defeated", "Royal Waterways (5 max)", 5],
|
||||
greyPrinceDefeats: ["Grey Prince Zote times defeated", "Dirtmouth (10 max)", 10],
|
||||
whitePalaceSecretRoomVisited: ["White Palace Secret Room visited", "Help identify this room!"],
|
||||
killsBindingSeal: ["Path of Pain", "White Palace: main secret area"],
|
||||
};
|
||||
|
||||
export {
|
||||
DIV_ID,
|
||||
HINTS,
|
||||
BOSSES,
|
||||
BOSSES_WORLD,
|
||||
CHARMS,
|
||||
EQUIPMENT,
|
||||
NAILARTS,
|
||||
NAILUPGRADES,
|
||||
SPELLS,
|
||||
MASKSHARDS,
|
||||
MASKSHARDS_WORLD,
|
||||
VESSELFRAGMENTS,
|
||||
VESSELFRAGMENTS_WORLD,
|
||||
DREAMERS,
|
||||
COLOSSEUM,
|
||||
DREAMNAIL,
|
||||
WARRIORDREAMS,
|
||||
GRIMMTROUPE,
|
||||
LIFEBLOOD,
|
||||
GODMASTER,
|
||||
GODMASTER_DOORS,
|
||||
ESSENTIAL,
|
||||
GRUBS_LIST,
|
||||
ACHIEVEMENTS,
|
||||
STATISTICS
|
||||
};
|
||||
|
|
@ -16,12 +16,6 @@ import MAP from "./hk-dictionary.js";
|
|||
case "hk-hints":
|
||||
break;
|
||||
|
||||
case "hk-equipment":
|
||||
|
||||
// double % for equipment
|
||||
section.percent += 2;
|
||||
break;
|
||||
|
||||
// Hunter's Journal entries
|
||||
case "hk-journal":
|
||||
section.percent++;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
// Handle cookies
|
||||
// require("./cookies.js");
|
||||
// This fork is local-first: analytics and cookie consent are intentionally disabled.
|
||||
|
||||
// CSS
|
||||
// require("../css/cookieconsent.css");
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ const SYMBOL_ASCENDED = "<i class='reznoricon-ascended'></i>"; // Ascended
|
|||
const SYMBOL_RADIANT = "<i class='reznoricon-radiant'></i>"; // Radiant
|
||||
const SYMBOL_EMPTY = "<span class='padding-left'></span>"; // No symbol
|
||||
const FLEUR_DIVIDE = "<div class='horizontal-line'></div>";
|
||||
const WIKI_LINK = "https://hollowknight.fandom.com/wiki/";
|
||||
const WIKI_LINK = "https://hollowknightsilksong.wiki.fextralife.com/";
|
||||
|
||||
const ROOT = document.documentElement;
|
||||
const SCROLL_BUTTON = document.querySelector(".scroll-up-button");
|
||||
|
|
@ -191,8 +191,6 @@ function GenerateInnerHTML(db) {
|
|||
let witchCrestImage = `<img src='${WITCH_CREST_IMAGE}' class='crest' alt='Witch image' title='Witch Crest'>`;
|
||||
|
||||
|
||||
SHELL_SHARDS_IMAGE
|
||||
|
||||
/* ############################## create all main entries ########################################################################## */
|
||||
|
||||
|
||||
|
|
@ -206,7 +204,7 @@ function GenerateInnerHTML(db) {
|
|||
switch (section) {
|
||||
|
||||
/* Main % */
|
||||
case "bosses":
|
||||
case "crests":
|
||||
|
||||
textFill += [
|
||||
`<div class="tab-switch-buttons">`,
|
||||
|
|
@ -214,10 +212,10 @@ function GenerateInnerHTML(db) {
|
|||
`<button id="button-switch-essentials" name="essentials" class="button tab-switch" type="button">Essentials %</button>`,
|
||||
`<button id="button-switch-journal" name="journal" class="button tab-switch" type="button">Journal</button>`,
|
||||
`<button id="button-switch-collectibles" name="collectibles" class="button tab-switch" type="button">Collectibles</button>`,
|
||||
`<button id="button-switch-geocaches" name="geocaches" class="button tab-switch" type="button">Geo Caches</button>`,
|
||||
`<button id="button-switch-secrets" name="secrets" class="button tab-switch" type="button">Secrets</button>`,
|
||||
`<button id="button-switch-godhome" name="godhome" class="button tab-switch" type="button">Godmaster</button>`,
|
||||
`<button id="button-switch-statistics" name="statistics" class="button tab-switch" type="button">Statistics</button>`,
|
||||
//`<button id="button-switch-geocaches" name="geocaches" class="button tab-switch" type="button">Geo Caches</button>`,
|
||||
//`<button id="button-switch-secrets" name="secrets" class="button tab-switch" type="button">Secrets</button>`,
|
||||
//`<button id="button-switch-godhome" name="godhome" class="button tab-switch" type="button">Godmaster</button>`,
|
||||
//`<button id="button-switch-statistics" name="statistics" class="button tab-switch" type="button">Statistics</button>`,
|
||||
`</div>`,
|
||||
].join("\n");
|
||||
|
||||
|
|
@ -226,7 +224,7 @@ function GenerateInnerHTML(db) {
|
|||
break;
|
||||
|
||||
/* Essentials % */
|
||||
case "essentialsCollectibles":
|
||||
case "essentialsMemoryLocket":
|
||||
|
||||
textFill += `<div id="tab-essentials" class="large-section">`;
|
||||
|
||||
|
|
@ -240,37 +238,37 @@ function GenerateInnerHTML(db) {
|
|||
break;
|
||||
|
||||
/* Collectibles */
|
||||
case "charmNotches":
|
||||
case "flea":
|
||||
|
||||
textFill += `<div id="tab-collectibles" class="large-section">`;
|
||||
|
||||
break;
|
||||
|
||||
/* Geo Caches */
|
||||
case "geoChests":
|
||||
/*case "geoChests":
|
||||
|
||||
textFill += `<div id="tab-geocaches" class="large-section">`;
|
||||
|
||||
break;
|
||||
break;*/
|
||||
|
||||
/* Secrets */
|
||||
case "worldInteractions":
|
||||
/*case "worldInteractions":
|
||||
|
||||
textFill += `<div id="tab-secrets" class="large-section">`;
|
||||
|
||||
break;
|
||||
break;*/
|
||||
|
||||
/* Statistics */
|
||||
case "statistics":
|
||||
/*case "statistics":
|
||||
|
||||
textFill += `<div id="tab-statistics" class="large-section">`;
|
||||
|
||||
break;
|
||||
break;*/
|
||||
|
||||
/* Godmaster */
|
||||
case "godhomeStatistics":
|
||||
/*case "godhomeStatistics":
|
||||
|
||||
textFill += `<div id="tab-godhome" class="large-section">`;
|
||||
textFill += `<div id="tab-godhome" class="large-section">`;*/
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -677,14 +675,19 @@ function GenerateInnerHTML(db) {
|
|||
switch (section) {
|
||||
|
||||
/* ending the tabs */
|
||||
case "godmaster": // Main %
|
||||
case "toolPouchUpgrades": // Main %
|
||||
case "huntersJournal": // Journal
|
||||
case "flea": // Collectibles
|
||||
case "essentialsKeys": // Essentials %
|
||||
|
||||
/*case "toolPouchUpgrades": // Main %
|
||||
case "achievementsBosses": // Essentials %
|
||||
case "huntersJournalOptional": // Journal
|
||||
case "huntersJournal": // Journal
|
||||
case "items": // Collectibles
|
||||
case "geoRocks": // Geo Caches
|
||||
case "corniferNotes": // Secrets
|
||||
case "statistics": // Statistics
|
||||
case "hallOfGods": // Godmaster
|
||||
case "hallOfGods": // Godmaster*/
|
||||
|
||||
finalHTMLFill += `</div>`;
|
||||
|
||||
|
|
@ -760,13 +763,25 @@ function CompletionFillNoSave(section) {
|
|||
switch (section.id) {
|
||||
|
||||
case "hk-intro":
|
||||
case "hk-bosses":
|
||||
case "hk-charms":
|
||||
case "hk-crests":
|
||||
case "hk-Needleupgrades":
|
||||
case "hk-redTools":
|
||||
case "hk-blueTools":
|
||||
case "hk-yellowTools":
|
||||
case "hk-equipment":
|
||||
case "hk-skills":
|
||||
case "hk-silkHeart":
|
||||
case "hk-miscellaneous":
|
||||
case "hk-spoolFragments":
|
||||
case "hk-maskshards":
|
||||
case "hk-craftingKitUpgrades":
|
||||
case "hk-toolPouchUpgrades":
|
||||
|
||||
/*case "hk-charms":
|
||||
case "hk-bosses":
|
||||
case "hk-nailupgrades":
|
||||
case "hk-nailarts":
|
||||
case "hk-spells":
|
||||
case "hk-maskshards":
|
||||
case "hk-vesselfragments":
|
||||
case "hk-dreamnail":
|
||||
case "hk-warriordreams":
|
||||
|
|
@ -774,7 +789,7 @@ function CompletionFillNoSave(section) {
|
|||
case "hk-colosseum":
|
||||
case "hk-grimmtroupe":
|
||||
case "hk-lifeblood":
|
||||
case "hk-godmaster":
|
||||
case "hk-godmaster":*/
|
||||
|
||||
symbol = "%";
|
||||
|
||||
|
|
@ -839,9 +854,9 @@ function CompletionFill(section) {
|
|||
if (section.id === "hk-maskshards") {
|
||||
let perc = section.percent;
|
||||
(perc % 4) ? cp = Math.floor(perc / 4): cp = perc / 4;
|
||||
} else if (section.id === "hk-vesselfragments") {
|
||||
} else if (section.id === "hk-spoolFragments") {
|
||||
let perc = section.percent;
|
||||
(perc % 3) ? cp = Math.floor(perc / 3): cp = perc / 3;
|
||||
(perc % 2) ? cp = Math.floor(perc / 2): cp = perc / 2;
|
||||
}
|
||||
|
||||
// switches the box to red when a section (h2) is 0
|
||||
|
|
@ -883,21 +898,34 @@ function CompletionFill(section) {
|
|||
symbol = "%";
|
||||
|
||||
break;
|
||||
case "hk-intro":
|
||||
case "hk-crests":
|
||||
case "hk-Needleupgrades":
|
||||
case "hk-redTools":
|
||||
case "hk-blueTools":
|
||||
case "hk-yellowTools":
|
||||
case "hk-equipment":
|
||||
case "hk-skills":
|
||||
case "hk-silkHeart":
|
||||
case "hk-miscellaneous":
|
||||
case "hk-spoolFragments":
|
||||
case "hk-maskshards":
|
||||
case "hk-craftingKitUpgrades":
|
||||
case "hk-toolPouchUpgrades":
|
||||
|
||||
/*case "hk-charms":
|
||||
case "hk-bosses":
|
||||
case "hk-charms":
|
||||
case "hk-equipment":
|
||||
case "hk-nailupgrades":
|
||||
case "hk-nailarts":
|
||||
case "hk-spells":
|
||||
case "hk-maskshards":
|
||||
case "hk-vesselfragments":
|
||||
case "hk-dreamnail":
|
||||
case "hk-warriordreams":
|
||||
case "hk-dreamers":
|
||||
case "hk-colosseum":
|
||||
case "hk-grimmtroupe":
|
||||
case "hk-lifeblood":
|
||||
case "hk-godmaster":
|
||||
case "hk-nailupgrades":
|
||||
case "hk-nailarts":
|
||||
case "hk-spells":
|
||||
case "hk-vesselfragments":
|
||||
case "hk-dreamnail":
|
||||
case "hk-warriordreams":
|
||||
case "hk-dreamers":
|
||||
case "hk-colosseum":
|
||||
case "hk-grimmtroupe":
|
||||
case "hk-lifeblood":
|
||||
case "hk-godmaster":*/
|
||||
|
||||
symbol = "%";
|
||||
|
||||
|
|
|
|||
1
stage/app.js.LICENSE.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 15 KiB |
BIN
stage/img/273bc0830d455f7a31b2.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 234 KiB |
BIN
stage/img/7719057db1b84cbb040a.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
stage/img/c5450eb6dbdc31fef81d.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 130 KiB |
|
|
@ -31,14 +31,6 @@ module.exports = {
|
|||
filename: 'index.html',
|
||||
favicon: "./src/favicon.png"
|
||||
}),
|
||||
new HtmlWebpackPartialsPlugin({
|
||||
path: './src/partials/cookiealert.html',
|
||||
location: 'head',
|
||||
priority: 'high',
|
||||
options: {
|
||||
mainColor: "#59d1da"
|
||||
}
|
||||
})
|
||||
],
|
||||
module: {
|
||||
rules: [{
|
||||
|
|
|
|||
|
|
@ -53,22 +53,6 @@ module.exports = {
|
|||
minifyCSS: true,
|
||||
},
|
||||
}),
|
||||
new HtmlWebpackPartialsPlugin({
|
||||
path: './src/partials/analytics.html',
|
||||
location: 'head',
|
||||
priority: 'high',
|
||||
options: {
|
||||
ga_property_id: 'UA-136831794-2'
|
||||
}
|
||||
}),
|
||||
new HtmlWebpackPartialsPlugin({
|
||||
path: './src/partials/cookiealert.html',
|
||||
location: 'head',
|
||||
priority: 'high',
|
||||
options: {
|
||||
mainColor: "#59d1da"
|
||||
}
|
||||
}),
|
||||
new CssMinimizerPlugin(),
|
||||
],
|
||||
module: {
|
||||
|
|
|
|||