hollow-knight-completion-check/HKCheckCompletion.js
2020-08-24 22:39:36 +02:00

163 lines
No EOL
4.7 KiB
JavaScript

// ---------------- Constants ----------------- //
const DATA_UNKNOWN = "Data unknown";
const SYMBOL_FALSE = "❌ ";
const SYMBOL_TRUE = "✅ ";
// ---------------- Variables ----------------- //
var isCompleted = "Completed";
var isNotCompleted = "Not Completed";
var currentData = DATA_UNKNOWN;
var completionSymbol = SYMBOL_FALSE;
var divStart = [
"<div>"
].join("\n");
var divEnd = [
"</div>"
].join("\n");
var strongStart = "<strong>"
var strongEnd = "</strong>"
var divIdIntro = "hk-intro";
var divIdBosses = "hk-bosses";
var divIdColosseum = "hk-colosseum";
var divIdDreamers = "hk-dreamers";
var divIdDreamNail = "hk-dreamnail";
var divIdEquipment = "hk-equipment";
var divIdNailArts = "hk-nailarts";
var divIdNailUpgrades = "hk-nailupgrades";
const HK_BOSSES = {
killedMawlek: "Brooding Mawlek",
killedBigBuzzer: "Gruz Mother",
collectorDefeated: "The Collector",
defeatedMegaJelly: "Uumuu",
killedMimicSpider: "Nosk",
killedTraitorLord: "Traitor Lord",
killedInfectedKnight: "Broken Vessel",
killedMageKnight: "Watcher Knights",
defeatedDungDefender: "Dung Defender",
mageLordDefeated: "Soul Master",
defeatedMantisLords: "Mantis Lords",
hornet1Defeated: "Hornet Protector",
hornetOutskirtsDefeated: "Hornet Sentinel",
falseKnightDefeated: "False Knight"
};
const HK_COLOSSEUM = {
colosseumBronzeCompleted: "Trial of the Warrior",
colosseumSilverCompleted: "Trial of the Conqueror",
colosseumGoldCompleted: "Trial of the Fool"
};
const HK_DREAMERS = {
lurienDefeated: "Lurien the Watcher",
monomonDefeated: "Monomon the Teacher",
hegemolDefeated: "Herrah the Beast"
};
const HK_DREAMNAIL = {
hasDreamNail: "Dream Nail acquired",
dreamNailUpgraded: "Awakening the Dream Nail",
mothDeparted: "Hear the Seer's final words"
};
const HK_EQUIPMENT = {
hasKingsBrand: "King's Brand",
hasSuperDash: "Crystal Heart",
hasWalljump: "Mantis Claw",
hasDoubleJump: "Monarch Wings",
hasAcidArmour: "Isma's Tear",
hasDash: "Mothwing Cloak",
hasShadowDash: "Shade Cloak"
};
const HK_NAILARTS = {
hasAllNailArts: "All Nail Arts",
hasUpwardSlash: "Great Slash",
hasDashSlash: "Dash Slash",
hasCyclone: "Cyclone Slash"
};
function HKCheckCompletion(jsonObject) {
let HKPlayerData = jsonObject.playerData;
for (i in HKPlayerData) {
completionSymbol = SYMBOL_FALSE;
currentData = DATA_UNKNOWN;
// ---------------- Game Completion Status ----------------- //
if (i === "completionPercentage") {
if (HKPlayerData.completionPercentage >= 112) currentDataTrue();
else currentDataFalse(HKPlayerData.completionPercentage);
fillHTML(divIdIntro, "Hollow Knight Completion", " %");
}
// ---------------- Bosses (Base Game) --------------------- //
checkIfDataTrue(divIdBosses, HK_BOSSES, HKPlayerData);
// ---------------- Colosseum of Fools --------------------- //
checkIfDataTrue(divIdColosseum, HK_COLOSSEUM, HKPlayerData);
// ---------------- Dreamers --------------------- //
checkIfDataTrue(divIdDreamers, HK_DREAMERS, HKPlayerData);
// ---------------- Dream Nail and Essence --------------------- //
checkIfDataTrue(divIdDreamNail, HK_DREAMNAIL, HKPlayerData);
// ---------------- Equipment --------------------- //
checkIfDataTrue(divIdEquipment, HK_EQUIPMENT, HKPlayerData);
// ---------------- Nail Arts --------------------- //
checkIfDataTrue(divIdNailArts, HK_NAILARTS, HKPlayerData);
// ---------------- Nail Upgrades --------------------- //
if (i === "nailSmithUpgrades") {
let nailName = ["Old Nail", "Sharpened Nail", "Channeled Nail", "Coiled Nail", "Pure Nail"];
for (let j = 0; j < nailName.length; j++) {
if (HKPlayerData.nailSmithUpgrades >= j) currentDataTrue();
fillHTML(divIdNailUpgrades, nailName[j]);
currentDataFalse();
}
}
}
}
function fillHTML(divId = "", textPrefix = "Unknown Completion Element: ", textSuffix = "") {
document.getElementById(divId).innerHTML += divStart + completionSymbol + strongStart + textPrefix + ": " + strongEnd + currentData + textSuffix + divEnd;
}
function currentDataTrue(textData = isCompleted) {
completionSymbol = SYMBOL_TRUE;
currentData = textData;
}
function currentDataFalse(textData = isNotCompleted) {
completionSymbol = SYMBOL_FALSE;
currentData = textData;
}
function checkIfDataTrue(divId, dataObject, playerData) {
for (i in dataObject) {
if (playerData[i] === true) currentDataTrue();
else currentDataFalse();
fillHTML(divId, dataObject[i]);
delete dataObject[i];
}
}