format files
This commit is contained in:
parent
23d1ad5100
commit
d14f1a7cc3
7 changed files with 3100 additions and 3100 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -2,21 +2,21 @@
|
||||||
// save file names list in the save/ folder
|
// save file names list in the save/ folder
|
||||||
|
|
||||||
var fileName = [
|
var fileName = [
|
||||||
"reznor0", // 0
|
"reznor0", // 0
|
||||||
"reznor1beforegruz", // 1
|
"reznor1beforegruz", // 1
|
||||||
"reznor2aftergruz", // 2
|
"reznor2aftergruz", // 2
|
||||||
"reznor5hornet", // 3
|
"reznor5hornet", // 3
|
||||||
"reznor29ss", // 4
|
"reznor29ss", // 4
|
||||||
"ext48", // 5
|
"ext48", // 5
|
||||||
"reznor88banish", // 6
|
"reznor88banish", // 6
|
||||||
"reznor99whitefragment", // 7
|
"reznor99whitefragment", // 7
|
||||||
"reznor100", // 8
|
"reznor100", // 8
|
||||||
"reznor103ss", // 9
|
"reznor103ss", // 9
|
||||||
"reznor107", // 10
|
"reznor107", // 10
|
||||||
"reznor112grimm", // 11
|
"reznor112grimm", // 11
|
||||||
"PoP/kanna", // 12
|
"PoP/kanna", // 12
|
||||||
"PoP/Reaper4578", // 13
|
"PoP/Reaper4578", // 13
|
||||||
"PoP/tintingaroo", // 14
|
"PoP/tintingaroo", // 14
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -25,40 +25,40 @@ var fileName = [
|
||||||
* @param callback Function to be called when the request completes
|
* @param callback Function to be called when the request completes
|
||||||
*/
|
*/
|
||||||
function LoadJSON(filename) {
|
function LoadJSON(filename) {
|
||||||
// new Http request object (asynchronous), both the web page and the XML file it tries to load, must be located on the same server.
|
// new Http request object (asynchronous), both the web page and the XML file it tries to load, must be located on the same server.
|
||||||
var xobj = new XMLHttpRequest();
|
var xobj = new XMLHttpRequest();
|
||||||
|
|
||||||
xobj.overrideMimeType("application/json");
|
xobj.overrideMimeType("application/json");
|
||||||
|
|
||||||
// Specifies the request
|
// Specifies the request
|
||||||
/* method: the request type GET or POST
|
/* method: the request type GET or POST
|
||||||
url: the file location
|
url: the file location
|
||||||
async: true (asynchronous) or false (synchronous)
|
async: true (asynchronous) or false (synchronous)
|
||||||
user: optional user name
|
user: optional user name
|
||||||
psw: optional password */
|
psw: optional password */
|
||||||
xobj.open('GET', filename, true); // Path to the file
|
xobj.open('GET', filename, true); // Path to the file
|
||||||
|
|
||||||
// Sends the request to the server - Used for GET requests
|
// Sends the request to the server - Used for GET requests
|
||||||
xobj.send(null);
|
xobj.send(null);
|
||||||
|
|
||||||
// Defines a function to be called when the readyState property changes
|
// Defines a function to be called when the readyState property changes
|
||||||
/* xobj.onreadystatechange = function GetResponseText() {
|
/* xobj.onreadystatechange = function GetResponseText() {
|
||||||
if (xobj.readyState == 4 && xobj.status == "200") {
|
if (xobj.readyState == 4 && xobj.status == "200") {
|
||||||
// Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
|
// Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
|
||||||
// Returns the response data as a string
|
// Returns the response data as a string
|
||||||
return callback(xobj.responseText);
|
return callback(xobj.responseText);
|
||||||
} else return false;
|
} else return false;
|
||||||
}; */
|
}; */
|
||||||
// Sends the request to the server - Used for GET requests
|
// Sends the request to the server - Used for GET requests
|
||||||
// xobj.send(null);
|
// xobj.send(null);
|
||||||
|
|
||||||
xobj.onload = function JSONparse() {
|
xobj.onload = function JSONparse() {
|
||||||
// Parse JSON string into object
|
// Parse JSON string into object
|
||||||
const jsonObject = JSON.parse(xobj.responseText);
|
const jsonObject = JSON.parse(xobj.responseText);
|
||||||
document.getElementById("save-area").value = JSON.stringify(jsonObject);
|
document.getElementById("save-area").value = JSON.stringify(jsonObject);
|
||||||
return jsonObject;
|
return jsonObject;
|
||||||
// console.log(jsonObj);
|
// console.log(jsonObj);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* function JSONparse(response) {
|
/* function JSONparse(response) {
|
||||||
|
|
@ -78,36 +78,36 @@ LoadJSON("../save/" + fileName[11] + ".json");
|
||||||
*/
|
*/
|
||||||
function XMLtoJSON(filename) {
|
function XMLtoJSON(filename) {
|
||||||
|
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
|
|
||||||
request.open('GET', filename, true); // Path to the file
|
request.open('GET', filename, true); // Path to the file
|
||||||
|
|
||||||
request.send();
|
request.send();
|
||||||
|
|
||||||
request.onload = function XMLparse() {
|
request.onload = function XMLparse() {
|
||||||
|
|
||||||
const xml = request.responseXML;
|
const xml = request.responseXML;
|
||||||
|
|
||||||
// console.log(xml);
|
// console.log(xml);
|
||||||
|
|
||||||
let dictionary = xml.getElementsByTagName("Entry");
|
let dictionary = xml.getElementsByTagName("Entry");
|
||||||
|
|
||||||
let oldName = "";
|
let oldName = "";
|
||||||
let newName = "";
|
let newName = "";
|
||||||
let dictionaryObject = new Object();
|
let dictionaryObject = new Object();
|
||||||
|
|
||||||
for (let i = 0, length = dictionary.length; i < length; i++) {
|
for (let i = 0, length = dictionary.length; i < length; i++) {
|
||||||
|
|
||||||
oldName = dictionary[i].getElementsByTagName("oldName")[0].childNodes[0].nodeValue;
|
oldName = dictionary[i].getElementsByTagName("oldName")[0].childNodes[0].nodeValue;
|
||||||
newName = dictionary[i].getElementsByTagName("newName")[0].childNodes[0].nodeValue;
|
newName = dictionary[i].getElementsByTagName("newName")[0].childNodes[0].nodeValue;
|
||||||
|
|
||||||
dictionaryObject[oldName] = newName;
|
dictionaryObject[oldName] = newName;
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log(JSON.stringify(dictionaryObject));
|
// console.log(JSON.stringify(dictionaryObject));
|
||||||
|
|
||||||
return dictionaryObject;
|
return dictionaryObject;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// XMLtoJSON("../files/TranslatorDictionary.xml");
|
// XMLtoJSON("../files/TranslatorDictionary.xml");
|
||||||
|
|
@ -10,9 +10,9 @@
|
||||||
const aesjs = require("./aes-js.js");
|
const aesjs = require("./aes-js.js");
|
||||||
// For reading the text area after save decoding
|
// For reading the text area after save decoding
|
||||||
import {
|
import {
|
||||||
HKCheckCompletion,
|
HKCheckCompletion,
|
||||||
benchmarkTimes,
|
benchmarkTimes,
|
||||||
Benchmark
|
Benchmark
|
||||||
} from "./HKCheckCompletion.js";
|
} from "./HKCheckCompletion.js";
|
||||||
|
|
||||||
const CSHARP_HEADER = [0, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0]; // 22 bytes
|
const CSHARP_HEADER = [0, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0]; // 22 bytes
|
||||||
|
|
@ -37,31 +37,31 @@ const ECB_STREAM_CIPHER = new aesjs.ModeOfOperation.ecb(AES_KEY); // create a ne
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
function LoadSaveFile(input, time) {
|
function LoadSaveFile(input, time) {
|
||||||
|
|
||||||
const inputFileList = input.files;
|
const inputFileList = input.files;
|
||||||
// console.info("Input length: " + input.files.length)
|
// console.info("Input length: " + input.files.length)
|
||||||
// Cease further processing if user canceled the file input dialog
|
// Cease further processing if user canceled the file input dialog
|
||||||
if (inputFileList.length < 1) return false;
|
if (inputFileList.length < 1) return false;
|
||||||
|
|
||||||
// start benchmark
|
// start benchmark
|
||||||
benchmarkTimes.LoadSaveFile.timeStart = time;
|
benchmarkTimes.LoadSaveFile.timeStart = time;
|
||||||
benchmarkTimes.Total.timeStart = time;
|
benchmarkTimes.Total.timeStart = time;
|
||||||
|
|
||||||
// Prepares a File object from the first file of the input files for reading as an Array Buffer
|
// Prepares a File object from the first file of the input files for reading as an Array Buffer
|
||||||
let inputFileObject = inputFileList[0];
|
let inputFileObject = inputFileList[0];
|
||||||
|
|
||||||
// Cleans the file list to avoid problems after subsequent use
|
// Cleans the file list to avoid problems after subsequent use
|
||||||
// document.getElementById("save-area-file").value = "";
|
// document.getElementById("save-area-file").value = "";
|
||||||
|
|
||||||
// 1. read file
|
// 1. read file
|
||||||
// The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.
|
// The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.
|
||||||
// It is an array of bytes, often referred to in other languages as a "byte array".
|
// It is an array of bytes, often referred to in other languages as a "byte array".
|
||||||
|
|
||||||
// new FileReader()
|
// new FileReader()
|
||||||
let inputReader = new FileReader();
|
let inputReader = new FileReader();
|
||||||
// readAsArrayBuffer(file)
|
// readAsArrayBuffer(file)
|
||||||
inputReader.readAsArrayBuffer(inputFileObject);
|
inputReader.readAsArrayBuffer(inputFileObject);
|
||||||
// addEventListener("load", function) - to decode the file when loaded
|
// addEventListener("load", function) - to decode the file when loaded
|
||||||
inputReader.addEventListener("load", ProcessFileObject);
|
inputReader.addEventListener("load", ProcessFileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -69,62 +69,62 @@ function LoadSaveFile(input, time) {
|
||||||
* Launches the HKReadTextArea() function automatically after pasting the string to text area
|
* Launches the HKReadTextArea() function automatically after pasting the string to text area
|
||||||
*/
|
*/
|
||||||
function ProcessFileObject() {
|
function ProcessFileObject() {
|
||||||
let inputArrayBuffer = this.result;
|
let inputArrayBuffer = this.result;
|
||||||
let decodedString;
|
let decodedString;
|
||||||
|
|
||||||
// 2. Decode file
|
// 2. Decode file
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Uint8Array(ArrayBuffer) uint8_t equivalent in C
|
||||||
|
inputArrayBuffer = new Uint8Array(inputArrayBuffer);
|
||||||
|
|
||||||
|
// ArrayBuffer.slice()
|
||||||
|
// The slice() method copies up to, but not including, the byte indicated by the end parameter.
|
||||||
|
inputArrayBuffer.slice();
|
||||||
|
|
||||||
|
// remove C# header and LengthPrefixedString header (ArrayBuffer)
|
||||||
|
inputArrayBuffer = RemoveHeaders(inputArrayBuffer);
|
||||||
|
|
||||||
|
// base64 Decoding (ArrayBuffer)
|
||||||
|
inputArrayBuffer = Base64Decode(inputArrayBuffer);
|
||||||
|
|
||||||
|
// AES decryption (ECB) removes pkcs7 padding (ArrayBuffer)
|
||||||
|
inputArrayBuffer = AESDecryption(inputArrayBuffer);
|
||||||
|
|
||||||
|
// Convert ArrayBuffer to string/text TextDecoder().decode(ArrayBuffer)
|
||||||
|
decodedString = new TextDecoder().decode(inputArrayBuffer);
|
||||||
|
|
||||||
|
// finish and show benchmark
|
||||||
|
/* benchLSFEnd = new Date(); */
|
||||||
|
benchmarkTimes.LoadSaveFile.timeEnd = new Date();
|
||||||
|
/* console.info("LoadSaveFile() time (ms) =", benchLSFEnd - benchLSFBegin); */
|
||||||
|
|
||||||
|
// 4. Analyze the decoded string immediately
|
||||||
try {
|
try {
|
||||||
// Uint8Array(ArrayBuffer) uint8_t equivalent in C
|
HKCheckCompletion(JSON.parse(decodedString));
|
||||||
inputArrayBuffer = new Uint8Array(inputArrayBuffer);
|
|
||||||
|
|
||||||
// ArrayBuffer.slice()
|
|
||||||
// The slice() method copies up to, but not including, the byte indicated by the end parameter.
|
|
||||||
inputArrayBuffer.slice();
|
|
||||||
|
|
||||||
// remove C# header and LengthPrefixedString header (ArrayBuffer)
|
|
||||||
inputArrayBuffer = RemoveHeaders(inputArrayBuffer);
|
|
||||||
|
|
||||||
// base64 Decoding (ArrayBuffer)
|
|
||||||
inputArrayBuffer = Base64Decode(inputArrayBuffer);
|
|
||||||
|
|
||||||
// AES decryption (ECB) removes pkcs7 padding (ArrayBuffer)
|
|
||||||
inputArrayBuffer = AESDecryption(inputArrayBuffer);
|
|
||||||
|
|
||||||
// Convert ArrayBuffer to string/text TextDecoder().decode(ArrayBuffer)
|
|
||||||
decodedString = new TextDecoder().decode(inputArrayBuffer);
|
|
||||||
|
|
||||||
// finish and show benchmark
|
|
||||||
/* benchLSFEnd = new Date(); */
|
|
||||||
benchmarkTimes.LoadSaveFile.timeEnd = new Date();
|
|
||||||
/* console.info("LoadSaveFile() time (ms) =", benchLSFEnd - benchLSFBegin); */
|
|
||||||
|
|
||||||
// 4. Analyze the decoded string immediately
|
|
||||||
try {
|
|
||||||
HKCheckCompletion(JSON.parse(decodedString));
|
|
||||||
} catch (error) {
|
|
||||||
alert(`This seems like not a valid Hollow Knight save. ${error}`);
|
|
||||||
console.info(`This seems like not a valid Hollow Knight save. ${error}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5. Paste decoded string file to text area
|
|
||||||
(async () => {
|
|
||||||
document.getElementById("save-area").value = "";
|
|
||||||
document.getElementById("save-area").value = await decodedString;
|
|
||||||
})();
|
|
||||||
|
|
||||||
// finish total and show benchmark
|
|
||||||
benchmarkTimes.Total.timeEnd = new Date();
|
|
||||||
|
|
||||||
Benchmark(benchmarkTimes);
|
|
||||||
/* console.info("Total time (ms) =", benchTotal - benchLSFBegin); */
|
|
||||||
|
|
||||||
// alert(`Decoded String: ${decodedString}`);
|
|
||||||
// alert(`Array Buffer: ${inputArrayBuffer}`);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
alert(`The file cannot be decoded. ${error}`);
|
alert(`This seems like not a valid Hollow Knight save. ${error}`);
|
||||||
console.info(`The file cannot be decoded. ${error}`);
|
console.info(`This seems like not a valid Hollow Knight save. ${error}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 5. Paste decoded string file to text area
|
||||||
|
(async () => {
|
||||||
|
document.getElementById("save-area").value = "";
|
||||||
|
document.getElementById("save-area").value = await decodedString;
|
||||||
|
})();
|
||||||
|
|
||||||
|
// finish total and show benchmark
|
||||||
|
benchmarkTimes.Total.timeEnd = new Date();
|
||||||
|
|
||||||
|
Benchmark(benchmarkTimes);
|
||||||
|
/* console.info("Total time (ms) =", benchTotal - benchLSFBegin); */
|
||||||
|
|
||||||
|
// alert(`Decoded String: ${decodedString}`);
|
||||||
|
// alert(`Array Buffer: ${inputArrayBuffer}`);
|
||||||
|
} catch (error) {
|
||||||
|
alert(`The file cannot be decoded. ${error}`);
|
||||||
|
console.info(`The file cannot be decoded. ${error}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -134,19 +134,19 @@ function ProcessFileObject() {
|
||||||
* @returns {Uint8Array}
|
* @returns {Uint8Array}
|
||||||
*/
|
*/
|
||||||
function RemoveHeaders(buffer, csHeader = CSHARP_HEADER) {
|
function RemoveHeaders(buffer, csHeader = CSHARP_HEADER) {
|
||||||
// Remove the fixed C# header and byte 11 at the end.
|
// Remove the fixed C# header and byte 11 at the end.
|
||||||
buffer = buffer.subarray(csHeader.length, buffer.length - 1);
|
buffer = buffer.subarray(csHeader.length, buffer.length - 1);
|
||||||
|
|
||||||
// Remove LengthPrefixedString header
|
// Remove LengthPrefixedString header
|
||||||
let lengthCount = 0;
|
let lengthCount = 0;
|
||||||
for (let i = 0; i < 5; i++) {
|
for (let i = 0; i < 5; i++) {
|
||||||
lengthCount++;
|
lengthCount++;
|
||||||
if ((buffer[i] & 0x80) == 0) {
|
if ((buffer[i] & 0x80) == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return buffer.subarray(lengthCount);
|
return buffer.subarray(lengthCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -155,39 +155,39 @@ function RemoveHeaders(buffer, csHeader = CSHARP_HEADER) {
|
||||||
* @returns {Uint8Array}
|
* @returns {Uint8Array}
|
||||||
*/
|
*/
|
||||||
function Base64Decode(buffer) {
|
function Base64Decode(buffer) {
|
||||||
buffer = new Uint8Array(buffer).slice();
|
buffer = new Uint8Array(buffer).slice();
|
||||||
buffer = buffer.map(v => BASE64_DECODE_TABLE.get(v));
|
buffer = buffer.map(v => BASE64_DECODE_TABLE.get(v));
|
||||||
|
|
||||||
// The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.
|
// The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.
|
||||||
let p = buffer.indexOf(64);
|
let p = buffer.indexOf(64);
|
||||||
let end;
|
let end;
|
||||||
|
|
||||||
if (p != -1) {
|
if (p != -1) {
|
||||||
end = p;
|
end = p;
|
||||||
} else {
|
} else {
|
||||||
end = buffer.length;
|
end = buffer.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer = buffer.subarray(0, end);
|
||||||
|
|
||||||
|
let output = new Uint8Array(3 * buffer.length / 4);
|
||||||
|
let continuous = Math.floor(buffer.length / 4) * 4;
|
||||||
|
|
||||||
|
for (let i = 0; i < continuous; i += 4) {
|
||||||
|
let k = 3 * i / 4;
|
||||||
|
output[k] = buffer[i] << 2 | buffer[i + 1] >> 4;
|
||||||
|
output[k + 1] = (buffer[i + 1] & 0x0F) << 4 | buffer[i + 2] >> 2;
|
||||||
|
output[k + 2] = (buffer[i + 2] & 0x03) << 6 | buffer[i + 3];
|
||||||
|
}
|
||||||
|
if (buffer[continuous] != undefined) {
|
||||||
|
let k = 3 * continuous / 4;
|
||||||
|
output[k] = buffer[continuous] << 2 | buffer[continuous + 1] >> 4;
|
||||||
|
if (buffer[continuous + 2] != undefined) {
|
||||||
|
output[k + 1] = (buffer[continuous + 1] & 0x0F) << 4 | buffer[continuous + 2] >> 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buffer = buffer.subarray(0, end);
|
return output;
|
||||||
|
|
||||||
let output = new Uint8Array(3 * buffer.length / 4);
|
|
||||||
let continuous = Math.floor(buffer.length / 4) * 4;
|
|
||||||
|
|
||||||
for (let i = 0; i < continuous; i += 4) {
|
|
||||||
let k = 3 * i / 4;
|
|
||||||
output[k] = buffer[i] << 2 | buffer[i + 1] >> 4;
|
|
||||||
output[k + 1] = (buffer[i + 1] & 0x0F) << 4 | buffer[i + 2] >> 2;
|
|
||||||
output[k + 2] = (buffer[i + 2] & 0x03) << 6 | buffer[i + 3];
|
|
||||||
}
|
|
||||||
if (buffer[continuous] != undefined) {
|
|
||||||
let k = 3 * continuous / 4;
|
|
||||||
output[k] = buffer[continuous] << 2 | buffer[continuous + 1] >> 4;
|
|
||||||
if (buffer[continuous + 2] != undefined) {
|
|
||||||
output[k + 1] = (buffer[continuous + 1] & 0x0F) << 4 | buffer[continuous + 2] >> 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -196,18 +196,18 @@ function Base64Decode(buffer) {
|
||||||
* @returns {Uint8Array}
|
* @returns {Uint8Array}
|
||||||
*/
|
*/
|
||||||
function AESDecryption(buffer, cipherObject = ECB_STREAM_CIPHER) {
|
function AESDecryption(buffer, cipherObject = ECB_STREAM_CIPHER) {
|
||||||
let output = cipherObject.decrypt(buffer);
|
let output = cipherObject.decrypt(buffer);
|
||||||
return output.subarray(0, -output[output.length - 1]);
|
return output.subarray(0, -output[output.length - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign actions (functions) to launch when a specific element is used
|
// Assign actions (functions) to launch when a specific element is used
|
||||||
document.getElementById("save-area-file").addEventListener("change", (event) => {
|
document.getElementById("save-area-file").addEventListener("change", (event) => {
|
||||||
LoadSaveFile(event.target, new Date());
|
LoadSaveFile(event.target, new Date());
|
||||||
});
|
});
|
||||||
document.getElementById("save-area-file").addEventListener("click", (mouseEvent) => {
|
document.getElementById("save-area-file").addEventListener("click", (mouseEvent) => {
|
||||||
mouseEvent.target.value = "";
|
mouseEvent.target.value = "";
|
||||||
});
|
});
|
||||||
|
|
||||||
export {
|
export {
|
||||||
LoadSaveFile
|
LoadSaveFile
|
||||||
};
|
};
|
||||||
|
|
@ -1,399 +1,399 @@
|
||||||
/* Huge thanks to ManicJamie for his HKTranslator: https://github.com/ManicJamie/HKTranslator */
|
/* Huge thanks to ManicJamie for his HKTranslator: https://github.com/ManicJamie/HKTranslator */
|
||||||
|
|
||||||
const MAP = {
|
const MAP = {
|
||||||
"Tutorial_01": "King's Pass",
|
"Tutorial_01": "King's Pass",
|
||||||
"Town": "Dirtmouth",
|
"Town": "Dirtmouth",
|
||||||
"Room_shop": "Sly's Shop",
|
"Room_shop": "Sly's Shop",
|
||||||
"Room_Sly_Storeroom": "Sly's Shop Basement",
|
"Room_Sly_Storeroom": "Sly's Shop Basement",
|
||||||
"Room_Town_Stag_Station": "Dirtmouth Stag Station",
|
"Room_Town_Stag_Station": "Dirtmouth Stag Station",
|
||||||
"Room_mapper": "Iselda's Shop",
|
"Room_mapper": "Iselda's Shop",
|
||||||
"Room_Bretta": "Bretta's Room",
|
"Room_Bretta": "Bretta's Room",
|
||||||
"Room_Bretta_Basement": "Bretta's Room Basement",
|
"Room_Bretta_Basement": "Bretta's Room Basement",
|
||||||
"Room_Ouiji": "Jiji's Hut",
|
"Room_Ouiji": "Jiji's Hut",
|
||||||
"Room_Jinn": "Jinn's Hut",
|
"Room_Jinn": "Jinn's Hut",
|
||||||
"Room_Tram_RG": "Upper Tram",
|
"Room_Tram_RG": "Upper Tram",
|
||||||
"Room_Tram": "Lower Tram",
|
"Room_Tram": "Lower Tram",
|
||||||
"Crossroads_01": "Crossroads Well",
|
"Crossroads_01": "Crossroads Well",
|
||||||
"Crossroads_02": "Crossroads Outside Temple",
|
"Crossroads_02": "Crossroads Outside Temple",
|
||||||
"Crossroads_03": "Crossroads Outside Stag",
|
"Crossroads_03": "Crossroads Outside Stag",
|
||||||
"Crossroads_04": "Crossroads Gruz Mother",
|
"Crossroads_04": "Crossroads Gruz Mother",
|
||||||
"Crossroads_05": "Crossroads Central Grub",
|
"Crossroads_05": "Crossroads Central Grub",
|
||||||
"Crossroads_06": "Crossroads Outside Mound",
|
"Crossroads_06": "Crossroads Outside Mound",
|
||||||
"Crossroads_07": "Crossroads Gruzzer",
|
"Crossroads_07": "Crossroads Gruzzer",
|
||||||
"Crossroads_08": "Crossroads Aspid Arena",
|
"Crossroads_08": "Crossroads Aspid Arena",
|
||||||
"Crossroads_09": "Crossroads Mawlek Boss",
|
"Crossroads_09": "Crossroads Mawlek Boss",
|
||||||
"Crossroads_10": "Crossroads False Knight Arena",
|
"Crossroads_10": "Crossroads False Knight Arena",
|
||||||
"Crossroads_11_alt": "Crossroads Greenpath Entrance",
|
"Crossroads_11_alt": "Crossroads Greenpath Entrance",
|
||||||
"Crossroads_12": "Crossroads Corridor to Acid Grub",
|
"Crossroads_12": "Crossroads Corridor to Acid Grub",
|
||||||
"Crossroads_13": "Crossroads Goam Mask Shard",
|
"Crossroads_13": "Crossroads Goam Mask Shard",
|
||||||
"Crossroads_14": "Crossroads Outside Myla",
|
"Crossroads_14": "Crossroads Outside Myla",
|
||||||
"Crossroads_15": "Crossroads Corridor to Tram",
|
"Crossroads_15": "Crossroads Corridor to Tram",
|
||||||
"Crossroads_16": "Crossroads Above Lever",
|
"Crossroads_16": "Crossroads Above Lever",
|
||||||
"Crossroads_18": "Crossroads Fungal Entrance",
|
"Crossroads_18": "Crossroads Fungal Entrance",
|
||||||
"Crossroads_19": "Crossroads Before Gruz Mother",
|
"Crossroads_19": "Crossroads Before Gruz Mother",
|
||||||
"Crossroads_21": "Crossroads Outside False Knight",
|
"Crossroads_21": "Crossroads Outside False Knight",
|
||||||
"Crossroads_22": "Crossroads Glowing Womb Arena",
|
"Crossroads_22": "Crossroads Glowing Womb Arena",
|
||||||
"Crossroads_25": "Crossroads Mawlek Entrance",
|
"Crossroads_25": "Crossroads Mawlek Entrance",
|
||||||
"Crossroads_27": "Crossroads Outside Tram",
|
"Crossroads_27": "Crossroads Outside Tram",
|
||||||
"Crossroads_30": "Crossroads Hot Spring",
|
"Crossroads_30": "Crossroads Hot Spring",
|
||||||
"Crossroads_31": "Crossroads Spike Grub",
|
"Crossroads_31": "Crossroads Spike Grub",
|
||||||
"Crossroads_33": "Crossroads Cornifer",
|
"Crossroads_33": "Crossroads Cornifer",
|
||||||
"Crossroads_35": "Crossroads Acid Grub",
|
"Crossroads_35": "Crossroads Acid Grub",
|
||||||
"Crossroads_36": "Crossroads Mawlek Middle",
|
"Crossroads_36": "Crossroads Mawlek Middle",
|
||||||
"Crossroads_37": "Crossroads Vessel Fragment",
|
"Crossroads_37": "Crossroads Vessel Fragment",
|
||||||
"Crossroads_38": "Crossroads Grubfather",
|
"Crossroads_38": "Crossroads Grubfather",
|
||||||
"Crossroads_39": "Crossroads Corridor Right of Temple",
|
"Crossroads_39": "Crossroads Corridor Right of Temple",
|
||||||
"Crossroads_40": "Crossroads Corridor Right of Central Grub",
|
"Crossroads_40": "Crossroads Corridor Right of Central Grub",
|
||||||
"Crossroads_42": "Crossroads Right Of Mask Shard",
|
"Crossroads_42": "Crossroads Right Of Mask Shard",
|
||||||
"Crossroads_43": "Crossroads Corridor to Elevator",
|
"Crossroads_43": "Crossroads Corridor to Elevator",
|
||||||
"Crossroads_45": "Crossroads Myla",
|
"Crossroads_45": "Crossroads Myla",
|
||||||
"Crossroads_46": "Crossroads Tram",
|
"Crossroads_46": "Crossroads Tram",
|
||||||
"Crossroads_47": "Crossroads Stag",
|
"Crossroads_47": "Crossroads Stag",
|
||||||
"Crossroads_48": "Crossroads Guarded Grub",
|
"Crossroads_48": "Crossroads Guarded Grub",
|
||||||
"Crossroads_49": "Crossroads Elevator",
|
"Crossroads_49": "Crossroads Elevator",
|
||||||
"Crossroads_52": "Crossroads Goam Journal",
|
"Crossroads_52": "Crossroads Goam Journal",
|
||||||
"Crossroads_ShamanTemple": "Crossroads Ancestral Mound",
|
"Crossroads_ShamanTemple": "Crossroads Ancestral Mound",
|
||||||
"Room_Mender_House": "Crossroads Menderbug",
|
"Room_Mender_House": "Crossroads Menderbug",
|
||||||
"Room_Charm_Shop": "Crossroads Salubra",
|
"Room_Charm_Shop": "Crossroads Salubra",
|
||||||
"Room_ruinhouse": "Crossroads Rescue Sly",
|
"Room_ruinhouse": "Crossroads Rescue Sly",
|
||||||
"Room_temple": "Crossroads Inside Temple",
|
"Room_temple": "Crossroads Inside Temple",
|
||||||
"Fungus1_01": "Greenpath Entrance",
|
"Fungus1_01": "Greenpath Entrance",
|
||||||
"Fungus1_01b": "Greenpath Waterfall Bench",
|
"Fungus1_01b": "Greenpath Waterfall Bench",
|
||||||
"Fungus1_02": "Greenpath First Hornet Sighting",
|
"Fungus1_02": "Greenpath First Hornet Sighting",
|
||||||
"Fungus1_03": "Greenpath Storerooms",
|
"Fungus1_03": "Greenpath Storerooms",
|
||||||
"Fungus1_04": "Greenpath Hornet",
|
"Fungus1_04": "Greenpath Hornet",
|
||||||
"Fungus1_05": "Greenpath Outside Thorns",
|
"Fungus1_05": "Greenpath Outside Thorns",
|
||||||
"Fungus1_06": "Greenpath Cornifer",
|
"Fungus1_06": "Greenpath Cornifer",
|
||||||
"Fungus1_07": "Greenpath Outside Hunter",
|
"Fungus1_07": "Greenpath Outside Hunter",
|
||||||
"Fungus1_08": "Greenpath Hunter",
|
"Fungus1_08": "Greenpath Hunter",
|
||||||
"Fungus1_09": "Greenpath Sheo Gauntlet",
|
"Fungus1_09": "Greenpath Sheo Gauntlet",
|
||||||
"Fungus1_10": "Greenpath Acid Bridge",
|
"Fungus1_10": "Greenpath Acid Bridge",
|
||||||
"Fungus1_11": "Greenpath Above Fog Canyon",
|
"Fungus1_11": "Greenpath Above Fog Canyon",
|
||||||
"Fungus1_12": "Greenpath MMC Corridor",
|
"Fungus1_12": "Greenpath MMC Corridor",
|
||||||
"Fungus1_13": "Greenpath Whispering Root",
|
"Fungus1_13": "Greenpath Whispering Root",
|
||||||
"Fungus1_14": "Greenpath Thorns of Agony",
|
"Fungus1_14": "Greenpath Thorns of Agony",
|
||||||
"Fungus1_15": "Greenpath Outside Sheo",
|
"Fungus1_15": "Greenpath Outside Sheo",
|
||||||
"Fungus1_16_alt": "Greenpath Stag",
|
"Fungus1_16_alt": "Greenpath Stag",
|
||||||
"Fungus1_17": "Greenpath Charger Corridor",
|
"Fungus1_17": "Greenpath Charger Corridor",
|
||||||
"Fungus1_19": "Greenpath Above Sanctuary Bench",
|
"Fungus1_19": "Greenpath Above Sanctuary Bench",
|
||||||
"Fungus1_20_v02": "Greenpath Vengefly King",
|
"Fungus1_20_v02": "Greenpath Vengefly King",
|
||||||
"Fungus1_21": "Greenpath Outside Hornet",
|
"Fungus1_21": "Greenpath Outside Hornet",
|
||||||
"Fungus1_22": "Greenpath Outside Stag",
|
"Fungus1_22": "Greenpath Outside Stag",
|
||||||
"Fungus1_25": "Greenpath Corridor to Unn",
|
"Fungus1_25": "Greenpath Corridor to Unn",
|
||||||
"Fungus1_26": "Greenpath Lake Of Unn",
|
"Fungus1_26": "Greenpath Lake Of Unn",
|
||||||
"Fungus1_29": "Greenpath Massive Moss Charger",
|
"Fungus1_29": "Greenpath Massive Moss Charger",
|
||||||
"Fungus1_30": "Greenpath Below Toll Bench",
|
"Fungus1_30": "Greenpath Below Toll Bench",
|
||||||
"Fungus1_31": "Greenpath Toll",
|
"Fungus1_31": "Greenpath Toll",
|
||||||
"Fungus1_32": "Greenpath Moss Knight Arena",
|
"Fungus1_32": "Greenpath Moss Knight Arena",
|
||||||
"Fungus1_34": "Greenpath Stone Sanctuary Entrance",
|
"Fungus1_34": "Greenpath Stone Sanctuary Entrance",
|
||||||
"Fungus1_35": "Greenpath Stone Sanctuary",
|
"Fungus1_35": "Greenpath Stone Sanctuary",
|
||||||
"Fungus1_36": "Greenpath Stone Sanctuary Mask Shard",
|
"Fungus1_36": "Greenpath Stone Sanctuary Mask Shard",
|
||||||
"Fungus1_37": "Greenpath Sanctuary Bench",
|
"Fungus1_37": "Greenpath Sanctuary Bench",
|
||||||
"Fungus1_Slug": "Greenpath Unn",
|
"Fungus1_Slug": "Greenpath Unn",
|
||||||
"Room_nailmaster_02": "Greenpath Sheo",
|
"Room_nailmaster_02": "Greenpath Sheo",
|
||||||
"Room_Slug_Shrine": "Greenpath Unn Bench",
|
"Room_Slug_Shrine": "Greenpath Unn Bench",
|
||||||
"Deepnest_01": "Fungal_Deepnest_Fall",
|
"Deepnest_01": "Fungal_Deepnest_Fall",
|
||||||
"Fungus2_01": "Fungal_Queen's_Station",
|
"Fungus2_01": "Fungal_Queen's_Station",
|
||||||
"Fungus2_02": "Fungal_Queen's_Stag",
|
"Fungus2_02": "Fungal_Queen's_Stag",
|
||||||
"Fungus2_03": "Fungal_Outside_Queen's",
|
"Fungus2_03": "Fungal_Outside_Queen's",
|
||||||
"Fungus2_04": "Fungal_Below_Ogres",
|
"Fungus2_04": "Fungal_Below_Ogres",
|
||||||
"Fungus2_05": "Fungal_Shrumal_Ogres",
|
"Fungus2_05": "Fungal_Shrumal_Ogres",
|
||||||
"Fungus2_06": "Fungal_Outside_Leg_Eater",
|
"Fungus2_06": "Fungal_Outside_Leg_Eater",
|
||||||
"Fungus2_07": "Fungal_Shrumal_Warrior_Acid_Bridge",
|
"Fungus2_07": "Fungal_Shrumal_Warrior_Acid_Bridge",
|
||||||
"Fungus2_08": "Fungal_Outside_Elder_Hu",
|
"Fungus2_08": "Fungal_Outside_Elder_Hu",
|
||||||
"Fungus2_09": "Fungal_Cloth_Corridor",
|
"Fungus2_09": "Fungal_Cloth_Corridor",
|
||||||
"Fungus2_10": "Fungal_Left_Of_Pilgrim's_Way",
|
"Fungus2_10": "Fungal_Left_Of_Pilgrim's_Way",
|
||||||
"Fungus2_11": "Fungal_Right_of_Bouncy_Grub",
|
"Fungus2_11": "Fungal_Right_of_Bouncy_Grub",
|
||||||
"Fungus2_12": "Fungal_Mantis_Corridor",
|
"Fungus2_12": "Fungal_Mantis_Corridor",
|
||||||
"Fungus2_13": "Fungal_Bretta_Bench",
|
"Fungus2_13": "Fungal_Bretta_Bench",
|
||||||
"Fungus2_14": "Fungal_Mantis_Village",
|
"Fungus2_14": "Fungal_Mantis_Village",
|
||||||
"Fungus2_15": "Fungal_Mantis_Lords",
|
"Fungus2_15": "Fungal_Mantis_Lords",
|
||||||
"Fungus2_17": "Fungal_Above_Mantis_Village",
|
"Fungus2_17": "Fungal_Above_Mantis_Village",
|
||||||
"Fungus2_18": "Fungal_Cornifer",
|
"Fungus2_18": "Fungal_Cornifer",
|
||||||
"Fungus2_19": "Fungal_Right_Of_Spore_Shroom",
|
"Fungus2_19": "Fungal_Right_Of_Spore_Shroom",
|
||||||
"Fungus2_20": "Fungal_Spore_Shroom",
|
"Fungus2_20": "Fungal_Spore_Shroom",
|
||||||
"Fungus2_21": "Fungal_Pilgrim's_Way",
|
"Fungus2_21": "Fungal_Pilgrim's_Way",
|
||||||
"Fungus2_23": "Fungal_Dashmaster",
|
"Fungus2_23": "Fungal_Dashmaster",
|
||||||
"Fungus2_26": "Fungal_Leg_Eater",
|
"Fungus2_26": "Fungal_Leg_Eater",
|
||||||
"Fungus2_28": "Fungal_Shrumal_Warrior_Loop",
|
"Fungus2_28": "Fungal_Shrumal_Warrior_Loop",
|
||||||
"Fungus2_29": "Fungal_Core_Upper",
|
"Fungus2_29": "Fungal_Core_Upper",
|
||||||
"Fungus2_30": "Fungal_Core_Lower",
|
"Fungus2_30": "Fungal_Core_Lower",
|
||||||
"Fungus2_31": "Fungal_Mantis_Rewards",
|
"Fungus2_31": "Fungal_Mantis_Rewards",
|
||||||
"Fungus2_32": "Fungal_Elder_Hu",
|
"Fungus2_32": "Fungal_Elder_Hu",
|
||||||
"Fungus2_33": "Fungal_Leg_Eater_Root",
|
"Fungus2_33": "Fungal_Leg_Eater_Root",
|
||||||
"Fungus2_34": "Fungal_Willoh",
|
"Fungus2_34": "Fungal_Willoh",
|
||||||
"Fungus3_01": "Fog_Upper_West_Tall",
|
"Fungus3_01": "Fog_Upper_West_Tall",
|
||||||
"Fungus3_02": "Fog_Lower_West_Tall",
|
"Fungus3_02": "Fog_Lower_West_Tall",
|
||||||
"Fungus3_03": "Fog_Queen's_Gardens_Acid_Entrance",
|
"Fungus3_03": "Fog_Queen's_Gardens_Acid_Entrance",
|
||||||
"Fungus3_24": "Fog_Corridor_to_Overgrown_Mound",
|
"Fungus3_24": "Fog_Corridor_to_Overgrown_Mound",
|
||||||
"Fungus3_25": "Fog_Cornifer",
|
"Fungus3_25": "Fog_Cornifer",
|
||||||
"Fungus3_25b": "Fog_Corridor_to_Cornifer",
|
"Fungus3_25b": "Fog_Corridor_to_Cornifer",
|
||||||
"Fungus3_26": "Fog_East_Tall",
|
"Fungus3_26": "Fog_East_Tall",
|
||||||
"Fungus3_27": "Fog_Corridor_to_Archives",
|
"Fungus3_27": "Fog_Corridor_to_Archives",
|
||||||
"Fungus3_28": "Fog_Charm_Notch",
|
"Fungus3_28": "Fog_Charm_Notch",
|
||||||
"Fungus3_30": "Fog_Lifeblood",
|
"Fungus3_30": "Fog_Lifeblood",
|
||||||
"Fungus3_35": "Fog_Millibelle",
|
"Fungus3_35": "Fog_Millibelle",
|
||||||
"Fungus3_44": "Fog_Overgrown_Mound_Entrance",
|
"Fungus3_44": "Fog_Overgrown_Mound_Entrance",
|
||||||
"Fungus3_47": "Fog_Archives_Entrance",
|
"Fungus3_47": "Fog_Archives_Entrance",
|
||||||
"Fungus3_archive": "Fog_Archives_Bench",
|
"Fungus3_archive": "Fog_Archives_Bench",
|
||||||
"Fungus3_archive_02": "Fog_Uumuu_Arena",
|
"Fungus3_archive_02": "Fog_Uumuu_Arena",
|
||||||
"Room_Fungus_Shaman": "Fog_Overgrown_Mound",
|
"Room_Fungus_Shaman": "Fog_Overgrown_Mound",
|
||||||
"Cliffs_01": "Cliffs_Main",
|
"Cliffs_01": "Cliffs_Main",
|
||||||
"Cliffs_02": "Cliffs_Gorb",
|
"Cliffs_02": "Cliffs_Gorb",
|
||||||
"Cliffs_03": "Cliffs_Stag_Nest",
|
"Cliffs_03": "Cliffs_Stag_Nest",
|
||||||
"Cliffs_04": "Cliffs_Joni's_Dark",
|
"Cliffs_04": "Cliffs_Joni's_Dark",
|
||||||
"Cliffs_05": "Cliffs_Joni's_Pickup",
|
"Cliffs_05": "Cliffs_Joni's_Pickup",
|
||||||
"Cliffs_06": "Cliffs_Grimm_Lantern",
|
"Cliffs_06": "Cliffs_Grimm_Lantern",
|
||||||
"Fungus1_28": "Cliffs_Baldur's_Shell",
|
"Fungus1_28": "Cliffs_Baldur's_Shell",
|
||||||
"Room_nailmaster": "Cliffs_Mato",
|
"Room_nailmaster": "Cliffs_Mato",
|
||||||
"Mines_01": "Crystal_Dive_Entrance",
|
"Mines_01": "Crystal_Dive_Entrance",
|
||||||
"Mines_02": "Crystal_Dark_Entrance",
|
"Mines_02": "Crystal_Dark_Entrance",
|
||||||
"Mines_03": "Crystal_Spike_Grub",
|
"Mines_03": "Crystal_Spike_Grub",
|
||||||
"Mines_04": "Crystal_Entrance_Conveyors",
|
"Mines_04": "Crystal_Entrance_Conveyors",
|
||||||
"Mines_05": "Crystal_Above_Spike_Grub",
|
"Mines_05": "Crystal_Above_Spike_Grub",
|
||||||
"Mines_06": "Crystal_Deep_Focus_Gauntlet",
|
"Mines_06": "Crystal_Deep_Focus_Gauntlet",
|
||||||
"Mines_07": "Crystal_Dark_Room",
|
"Mines_07": "Crystal_Dark_Room",
|
||||||
"Mines_10": "Crystal_Elevator_Entrance",
|
"Mines_10": "Crystal_Elevator_Entrance",
|
||||||
"Mines_11": "Crystal_Left_Of_Guardian",
|
"Mines_11": "Crystal_Left_Of_Guardian",
|
||||||
"Mines_13": "Crystal_Top_Corridor",
|
"Mines_13": "Crystal_Top_Corridor",
|
||||||
"Mines_16": "Crystal_Mimic",
|
"Mines_16": "Crystal_Mimic",
|
||||||
"Mines_17": "Crystal_Corridor_to_Spike_Grub",
|
"Mines_17": "Crystal_Corridor_to_Spike_Grub",
|
||||||
"Mines_18": "Crystal_Guardian_Bench",
|
"Mines_18": "Crystal_Guardian_Bench",
|
||||||
"Mines_19": "Crystal_Grub_Crushers",
|
"Mines_19": "Crystal_Grub_Crushers",
|
||||||
"Mines_20": "Crystal_East_Tall",
|
"Mines_20": "Crystal_East_Tall",
|
||||||
"Mines_23": "Crystal_Crown_Whispering_Root",
|
"Mines_23": "Crystal_Crown_Whispering_Root",
|
||||||
"Mines_24": "Crystal_Crown_Grub",
|
"Mines_24": "Crystal_Crown_Grub",
|
||||||
"Mines_25": "Crystal_Crown_Climb",
|
"Mines_25": "Crystal_Crown_Climb",
|
||||||
"Mines_28": "Crystal_Outside_Mound",
|
"Mines_28": "Crystal_Outside_Mound",
|
||||||
"Mines_29": "Crystal_Dark_Bench",
|
"Mines_29": "Crystal_Dark_Bench",
|
||||||
"Mines_30": "Crystal_Cornifer",
|
"Mines_30": "Crystal_Cornifer",
|
||||||
"Mines_31": "Crystal_Crystal_Heart_Gauntlet",
|
"Mines_31": "Crystal_Crystal_Heart_Gauntlet",
|
||||||
"Mines_32": "Crystal_Enraged_Guardian_Arena",
|
"Mines_32": "Crystal_Enraged_Guardian_Arena",
|
||||||
"Mines_33": "Crossroads_Peak_Dark_Toll",
|
"Mines_33": "Crossroads_Peak_Dark_Toll",
|
||||||
"Mines_34": "Crystal_Crown_Peak",
|
"Mines_34": "Crystal_Crown_Peak",
|
||||||
"Mines_35": "Crystal_Mound",
|
"Mines_35": "Crystal_Mound",
|
||||||
"Mines_36": "Crystal_Deep_Focus",
|
"Mines_36": "Crystal_Deep_Focus",
|
||||||
"Mines_37": "Crystal_Chest_Crushers",
|
"Mines_37": "Crystal_Chest_Crushers",
|
||||||
"Abyss_02": "Basin_Broken_Bridge",
|
"Abyss_02": "Basin_Broken_Bridge",
|
||||||
"Abyss_03": "Basin_Tram",
|
"Abyss_03": "Basin_Tram",
|
||||||
"Abyss_04": "Basin_Fountain",
|
"Abyss_04": "Basin_Fountain",
|
||||||
"Abyss_05": "Basin_Palace_Grounds",
|
"Abyss_05": "Basin_Palace_Grounds",
|
||||||
"Abyss_17": "Basin_Cloth",
|
"Abyss_17": "Basin_Cloth",
|
||||||
"Abyss_18": "Basin_Corridor_to_Broken_Vessel",
|
"Abyss_18": "Basin_Corridor_to_Broken_Vessel",
|
||||||
"Abyss_19": "Basin_Broken_Vessel_Grub",
|
"Abyss_19": "Basin_Broken_Vessel_Grub",
|
||||||
"Abyss_20": "Basin_Simple_Key",
|
"Abyss_20": "Basin_Simple_Key",
|
||||||
"Abyss_21": "Basin_Monarch_Wings",
|
"Abyss_21": "Basin_Monarch_Wings",
|
||||||
"Abyss_22": "Basin_Hidden_Station",
|
"Abyss_22": "Basin_Hidden_Station",
|
||||||
"Abyss_06_Core": "Abyss_Core",
|
"Abyss_06_Core": "Abyss_Core",
|
||||||
"Abyss_08": "Abyss_Lifeblood_Core",
|
"Abyss_08": "Abyss_Lifeblood_Core",
|
||||||
"Abyss_09": "Abyss_Lighthouse_Climb",
|
"Abyss_09": "Abyss_Lighthouse_Climb",
|
||||||
"Abyss_10": "Abyss_Shade_Cloak",
|
"Abyss_10": "Abyss_Shade_Cloak",
|
||||||
"Abyss_12": "Abyss_Shriek",
|
"Abyss_12": "Abyss_Shriek",
|
||||||
"Abyss_15": "Abyss_Birthplace",
|
"Abyss_15": "Abyss_Birthplace",
|
||||||
"Abyss_16": "Abyss_Corridor_to_Lighthouse",
|
"Abyss_16": "Abyss_Corridor_to_Lighthouse",
|
||||||
"Abyss_Lighthouse_room": "Abyss_Lighthouse",
|
"Abyss_Lighthouse_room": "Abyss_Lighthouse",
|
||||||
"Crossroads_46b": "Grounds_Tram",
|
"Crossroads_46b": "Grounds_Tram",
|
||||||
"Crossroads_50": "Grounds_Blue_Lake",
|
"Crossroads_50": "Grounds_Blue_Lake",
|
||||||
"RestingGrounds_02": "Grounds_Xero",
|
"RestingGrounds_02": "Grounds_Xero",
|
||||||
"RestingGrounds_04": "Grounds_Dream_Nail_Entrance",
|
"RestingGrounds_04": "Grounds_Dream_Nail_Entrance",
|
||||||
"RestingGrounds_05": "Grounds_Whispering_Root",
|
"RestingGrounds_05": "Grounds_Whispering_Root",
|
||||||
"RestingGrounds_06": "Grounds_Corridor_Below_Xero",
|
"RestingGrounds_06": "Grounds_Corridor_Below_Xero",
|
||||||
"RestingGrounds_07": "Grounds_Seer",
|
"RestingGrounds_07": "Grounds_Seer",
|
||||||
"RestingGrounds_08": "Grounds_Spirit's_Glade",
|
"RestingGrounds_08": "Grounds_Spirit's_Glade",
|
||||||
"RestingGrounds_09": "Grounds_Stag",
|
"RestingGrounds_09": "Grounds_Stag",
|
||||||
"RestingGrounds_10": "Grounds_Crypts",
|
"RestingGrounds_10": "Grounds_Crypts",
|
||||||
"RestingGrounds_12": "Grounds_Outside_Grey_Mourner",
|
"RestingGrounds_12": "Grounds_Outside_Grey_Mourner",
|
||||||
"RestingGrounds_17": "Grounds_Dreamshield",
|
"RestingGrounds_17": "Grounds_Dreamshield",
|
||||||
"Room_Mansion": "Grounds_Grey_Mourner",
|
"Room_Mansion": "Grounds_Grey_Mourner",
|
||||||
"Ruins2_10": "Grounds_Elevator",
|
"Ruins2_10": "Grounds_Elevator",
|
||||||
"Abyss_03_c": "Edge_Tram",
|
"Abyss_03_c": "Edge_Tram",
|
||||||
"Deepnest_East_01": "Edge_Left_Of_Hive",
|
"Deepnest_East_01": "Edge_Left_Of_Hive",
|
||||||
"Deepnest_East_02": "Edge_Above_Hive",
|
"Deepnest_East_02": "Edge_Above_Hive",
|
||||||
"Deepnest_East_03": "Edge_Entrance",
|
"Deepnest_East_03": "Edge_Entrance",
|
||||||
"Deepnest_East_04": "Edge_Bardoon",
|
"Deepnest_East_04": "Edge_Bardoon",
|
||||||
"Deepnest_East_06": "Edge_Outside_Oro",
|
"Deepnest_East_06": "Edge_Outside_Oro",
|
||||||
"Deepnest_East_07": "Edge_Whispering_Root",
|
"Deepnest_East_07": "Edge_Whispering_Root",
|
||||||
"Deepnest_East_08": "Edge_Great_Hopper_Idol",
|
"Deepnest_East_08": "Edge_Great_Hopper_Idol",
|
||||||
"Deepnest_East_09": "Edge_Corridor_Outside_Colosseum",
|
"Deepnest_East_09": "Edge_Corridor_Outside_Colosseum",
|
||||||
"Deepnest_East_10": "Edge_Markoth_Arena",
|
"Deepnest_East_10": "Edge_Markoth_Arena",
|
||||||
"Deepnest_East_11": "Edge_Below_Camp_Bench",
|
"Deepnest_East_11": "Edge_Below_Camp_Bench",
|
||||||
"Deepnest_East_12": "Edge_Hornet_Sentinel_Corridor",
|
"Deepnest_East_12": "Edge_Hornet_Sentinel_Corridor",
|
||||||
"Deepnest_East_13": "Edge_Camp_Bench",
|
"Deepnest_East_13": "Edge_Camp_Bench",
|
||||||
"Deepnest_East_14": "Edge_Below_Oro",
|
"Deepnest_East_14": "Edge_Below_Oro",
|
||||||
"Deepnest_East_14b": "Edge_Quick_Slash",
|
"Deepnest_East_14b": "Edge_Quick_Slash",
|
||||||
"Deepnest_East_15": "Edge_Lifeblood",
|
"Deepnest_East_15": "Edge_Lifeblood",
|
||||||
"Deepnest_East_16": "Edge_Oro_Scarecrow",
|
"Deepnest_East_16": "Edge_Oro_Scarecrow",
|
||||||
"Deepnest_East_17": "Edge_420_Geo_Rock",
|
"Deepnest_East_17": "Edge_420_Geo_Rock",
|
||||||
"Deepnest_East_18": "Edge_Outside_Markoth",
|
"Deepnest_East_18": "Edge_Outside_Markoth",
|
||||||
"Deepnest_East_Hornet": "Edge_Hornet_Sentinel_Arena",
|
"Deepnest_East_Hornet": "Edge_Hornet_Sentinel_Arena",
|
||||||
"GG_Lurker": "Edge_Pale_Lurker",
|
"GG_Lurker": "Edge_Pale_Lurker",
|
||||||
"Room_Colosseum_01": "Edge_Colo_Entrance",
|
"Room_Colosseum_01": "Edge_Colo_Entrance",
|
||||||
"Room_Colosseum_02": "Edge_Colo_Bench",
|
"Room_Colosseum_02": "Edge_Colo_Bench",
|
||||||
"Room_Colosseum_Bronze": "Edge_Colo_1_Arena",
|
"Room_Colosseum_Bronze": "Edge_Colo_1_Arena",
|
||||||
"Room_Colosseum_Gold": "Edge_Colo_3_Arena",
|
"Room_Colosseum_Gold": "Edge_Colo_3_Arena",
|
||||||
"Room_Colosseum_Silver": "Edge_Colo_2_Arena",
|
"Room_Colosseum_Silver": "Edge_Colo_2_Arena",
|
||||||
"Room_Colosseum_Spectate": "Edge_Colo_Spectate",
|
"Room_Colosseum_Spectate": "Edge_Colo_Spectate",
|
||||||
"Room_nailmaster_03": "Edge_Oro",
|
"Room_nailmaster_03": "Edge_Oro",
|
||||||
"Room_Wyrm": "Edge_Cast-Off_Shell",
|
"Room_Wyrm": "Edge_Cast-Off_Shell",
|
||||||
"Abyss_01": "City_Broken_Elevator",
|
"Abyss_01": "City_Broken_Elevator",
|
||||||
"Crossroads_49b": "City_Left_Elevator",
|
"Crossroads_49b": "City_Left_Elevator",
|
||||||
"Room_nailsmith": "City_Nailsmith",
|
"Room_nailsmith": "City_Nailsmith",
|
||||||
"Ruins_Bathhouse": "City_Pleasure_House_Bench",
|
"Ruins_Bathhouse": "City_Pleasure_House_Bench",
|
||||||
"Ruins_Elevator": "City_Pleasure_House_Elevator",
|
"Ruins_Elevator": "City_Pleasure_House_Elevator",
|
||||||
"Ruins_House_01": "City_Guarded_Grub",
|
"Ruins_House_01": "City_Guarded_Grub",
|
||||||
"Ruins_House_02": "City_Gorgeous_Husk",
|
"Ruins_House_02": "City_Gorgeous_Husk",
|
||||||
"Ruins_House_03": "City_Emilitia",
|
"Ruins_House_03": "City_Emilitia",
|
||||||
"Ruins1_01": "City_Pilgrim's_Entrance",
|
"Ruins1_01": "City_Pilgrim's_Entrance",
|
||||||
"Ruins1_02": "City_Quirrel_Bench",
|
"Ruins1_02": "City_Quirrel_Bench",
|
||||||
"Ruins1_03": "City_Rafters",
|
"Ruins1_03": "City_Rafters",
|
||||||
"Ruins1_04": "City_Outside_Nailsmith",
|
"Ruins1_04": "City_Outside_Nailsmith",
|
||||||
"Ruins1_05": "City_Grub_Above_Lemm",
|
"Ruins1_05": "City_Grub_Above_Lemm",
|
||||||
"Ruins1_05b": "City_Lemm",
|
"Ruins1_05b": "City_Lemm",
|
||||||
"Ruins1_05c": "City_Egg_Above_Lemm",
|
"Ruins1_05c": "City_Egg_Above_Lemm",
|
||||||
"Ruins1_06": "City_Corridor_to_Storerooms",
|
"Ruins1_06": "City_Corridor_to_Storerooms",
|
||||||
"Ruins1_09": "City_Soul_Twister_Arena",
|
"Ruins1_09": "City_Soul_Twister_Arena",
|
||||||
"Ruins1_17": "City_Whispering_Root",
|
"Ruins1_17": "City_Whispering_Root",
|
||||||
"Ruins1_18": "City_Corridor_to_Spire",
|
"Ruins1_18": "City_Corridor_to_Spire",
|
||||||
"Ruins1_23": "City_Sanctum_Entrance",
|
"Ruins1_23": "City_Sanctum_Entrance",
|
||||||
"Ruins1_24": "City_Soul_Master_Arena",
|
"Ruins1_24": "City_Soul_Master_Arena",
|
||||||
"Ruins1_25": "City_Sanctum_East_Elevators",
|
"Ruins1_25": "City_Sanctum_East_Elevators",
|
||||||
"Ruins1_27": "City_Hollow_Knight_Fountain",
|
"Ruins1_27": "City_Hollow_Knight_Fountain",
|
||||||
"Ruins1_28": "City_Storerooms",
|
"Ruins1_28": "City_Storerooms",
|
||||||
"Ruins1_29": "City_Storerooms_Stag",
|
"Ruins1_29": "City_Storerooms_Stag",
|
||||||
"Ruins1_30": "City_Sanctum_Spell_Twister",
|
"Ruins1_30": "City_Sanctum_Spell_Twister",
|
||||||
"Ruins1_31": "City_Toll_Bench",
|
"Ruins1_31": "City_Toll_Bench",
|
||||||
"Ruins1_31b": "City_Shade_Soul_Arena",
|
"Ruins1_31b": "City_Shade_Soul_Arena",
|
||||||
"Ruins1_32": "City_Soul_Master_Rewards",
|
"Ruins1_32": "City_Soul_Master_Rewards",
|
||||||
"Ruins2_01": "City_Spire_Second_Floor",
|
"Ruins2_01": "City_Spire_Second_Floor",
|
||||||
"Ruins2_01_b": "City_Spire_First_Floor",
|
"Ruins2_01_b": "City_Spire_First_Floor",
|
||||||
"Ruins2_03": "City_Spire_Fourth_Floor",
|
"Ruins2_03": "City_Spire_Fourth_Floor",
|
||||||
"Ruins2_03b": "City_Spire_Third_Floor",
|
"Ruins2_03b": "City_Spire_Third_Floor",
|
||||||
"Ruins2_04": "City_Right_Hub",
|
"Ruins2_04": "City_Right_Hub",
|
||||||
"Ruins2_05": "City_Above_King's",
|
"Ruins2_05": "City_Above_King's",
|
||||||
"Ruins2_06": "City_King's_Station",
|
"Ruins2_06": "City_King's_Station",
|
||||||
"Ruins2_07": "City_Grub_Below_King's",
|
"Ruins2_07": "City_Grub_Below_King's",
|
||||||
"Ruins2_08": "City_King's_Stag",
|
"Ruins2_08": "City_King's_Stag",
|
||||||
"Ruins2_09": "City_King's_Vessel_Fragment",
|
"Ruins2_09": "City_King's_Vessel_Fragment",
|
||||||
"Ruins2_10b": "City_Right_Elevator",
|
"Ruins2_10b": "City_Right_Elevator",
|
||||||
"Ruins2_11": "City_Collector_Arena",
|
"Ruins2_11": "City_Collector_Arena",
|
||||||
"Ruins2_11_b": "City_Tower_of_Love",
|
"Ruins2_11_b": "City_Tower_of_Love",
|
||||||
"Ruins2_Watcher_Room": "City_Lurien_Elevator",
|
"Ruins2_Watcher_Room": "City_Lurien_Elevator",
|
||||||
"Hive_01": "Hive_Entrance",
|
"Hive_01": "Hive_Entrance",
|
||||||
"Hive_02": "Hive_Whispering_Root",
|
"Hive_02": "Hive_Whispering_Root",
|
||||||
"Hive_03": "Hive_Outside_Grub",
|
"Hive_03": "Hive_Outside_Grub",
|
||||||
"Hive_03_c": "Hive_Outside_Shortcut",
|
"Hive_03_c": "Hive_Outside_Shortcut",
|
||||||
"Hive_04": "Hive_Mask_Shard",
|
"Hive_04": "Hive_Mask_Shard",
|
||||||
"Hive_05": "Hive_Knight_Arena",
|
"Hive_05": "Hive_Knight_Arena",
|
||||||
"GG_Pipeway": "Waterways_Flukemunga_Corridor",
|
"GG_Pipeway": "Waterways_Flukemunga_Corridor",
|
||||||
"GG_Waterways": "Waterways_Junk_Pit",
|
"GG_Waterways": "Waterways_Junk_Pit",
|
||||||
"Room_GG_Shortcut": "Waterways_Fluke_Hermit",
|
"Room_GG_Shortcut": "Waterways_Fluke_Hermit",
|
||||||
"Waterways_01": "Waterways_Entrance",
|
"Waterways_01": "Waterways_Entrance",
|
||||||
"Waterways_02": "Waterways_Main_Bench",
|
"Waterways_02": "Waterways_Main_Bench",
|
||||||
"Waterways_03": "Waterways_Tuk",
|
"Waterways_03": "Waterways_Tuk",
|
||||||
"Waterways_04": "Waterways_Hidden_Grub",
|
"Waterways_04": "Waterways_Hidden_Grub",
|
||||||
"Waterways_04b": "Waterways_Mask_Shard",
|
"Waterways_04b": "Waterways_Mask_Shard",
|
||||||
"Waterways_05": "Waterways_Dung_Defender_Arena",
|
"Waterways_05": "Waterways_Dung_Defender_Arena",
|
||||||
"Waterways_06": "Waterways_Corridor_to_Broken_Elevator",
|
"Waterways_06": "Waterways_Corridor_to_Broken_Elevator",
|
||||||
"Waterways_07": "Waterways_Left_Of_Isma's_Grove",
|
"Waterways_07": "Waterways_Left_Of_Isma's_Grove",
|
||||||
"Waterways_08": "Waterways_Outside_Flukemarm",
|
"Waterways_08": "Waterways_Outside_Flukemarm",
|
||||||
"Waterways_09": "Waterways_Cornifer",
|
"Waterways_09": "Waterways_Cornifer",
|
||||||
"Waterways_12": "Waterways_Flukemarm_Arena",
|
"Waterways_12": "Waterways_Flukemarm_Arena",
|
||||||
"Waterways_13": "Waterways_Isma's_Grove",
|
"Waterways_13": "Waterways_Isma's_Grove",
|
||||||
"Waterways_14": "Waterways_Edge_Acid_Corridor",
|
"Waterways_14": "Waterways_Edge_Acid_Corridor",
|
||||||
"Waterways_15": "Waterways_Dung_Defender's_Cave",
|
"Waterways_15": "Waterways_Dung_Defender's_Cave",
|
||||||
"Abyss_03_b": "Deepnest_Tram",
|
"Abyss_03_b": "Deepnest_Tram",
|
||||||
"Deepnest_01b": "Deepnest_Upper_Cornifer",
|
"Deepnest_01b": "Deepnest_Upper_Cornifer",
|
||||||
"Deepnest_02": "Deepnest_Outside_Mimics",
|
"Deepnest_02": "Deepnest_Outside_Mimics",
|
||||||
"Deepnest_03": "Deepnest_Left_Of_Hot_Spring",
|
"Deepnest_03": "Deepnest_Left_Of_Hot_Spring",
|
||||||
"Deepnest_09": "Deepnest_Distant_Village_Stag",
|
"Deepnest_09": "Deepnest_Distant_Village_Stag",
|
||||||
"Deepnest_10": "Deepnest_Distant_Village",
|
"Deepnest_10": "Deepnest_Distant_Village",
|
||||||
"Deepnest_14": "Deepnest_Failed_Tramway_Bench",
|
"Deepnest_14": "Deepnest_Failed_Tramway_Bench",
|
||||||
"Deepnest_16": "Deepnest_After_Lower_Cornifer",
|
"Deepnest_16": "Deepnest_After_Lower_Cornifer",
|
||||||
"Deepnest_17": "Deepnest_Garpede_Corridor_Below_Cornifer",
|
"Deepnest_17": "Deepnest_Garpede_Corridor_Below_Cornifer",
|
||||||
"Deepnest_26": "Deepnest_Failed_Tramway_Lifeblood",
|
"Deepnest_26": "Deepnest_Failed_Tramway_Lifeblood",
|
||||||
"Deepnest_26b": "Deepnest_Tram_Pass",
|
"Deepnest_26b": "Deepnest_Tram_Pass",
|
||||||
"Deepnest_30": "Deepnest_Hot_Spring",
|
"Deepnest_30": "Deepnest_Hot_Spring",
|
||||||
"Deepnest_31": "Deepnest_Nosk_Corridor",
|
"Deepnest_31": "Deepnest_Nosk_Corridor",
|
||||||
"Deepnest_32": "Deepnest_Nosk_Arena",
|
"Deepnest_32": "Deepnest_Nosk_Arena",
|
||||||
"Deepnest_33": "Deepnest_Zote_Arena",
|
"Deepnest_33": "Deepnest_Zote_Arena",
|
||||||
"Deepnest_34": "Deepnest_First_Devout",
|
"Deepnest_34": "Deepnest_First_Devout",
|
||||||
"Deepnest_35": "Deepnest_Outside_Galien",
|
"Deepnest_35": "Deepnest_Outside_Galien",
|
||||||
"Deepnest_36": "Deepnest_Mimics",
|
"Deepnest_36": "Deepnest_Mimics",
|
||||||
"Deepnest_37": "Deepnest_Corridor_to_Tram",
|
"Deepnest_37": "Deepnest_Corridor_to_Tram",
|
||||||
"Deepnest_38": "Deepnest_Vessel_Fragment",
|
"Deepnest_38": "Deepnest_Vessel_Fragment",
|
||||||
"Deepnest_39": "Deepnest_Whispering_Root",
|
"Deepnest_39": "Deepnest_Whispering_Root",
|
||||||
"Deepnest_40": "Deepnest_Galien_Arena",
|
"Deepnest_40": "Deepnest_Galien_Arena",
|
||||||
"Deepnest_41": "Deepnest_Midwife",
|
"Deepnest_41": "Deepnest_Midwife",
|
||||||
"Deepnest_42": "Deepnest_Outside_Mask_Maker",
|
"Deepnest_42": "Deepnest_Outside_Mask_Maker",
|
||||||
"Deepnest_44": "Deepnest_Sharp_Shadow",
|
"Deepnest_44": "Deepnest_Sharp_Shadow",
|
||||||
"Deepnest_45_v02": "Deepnest_Weaver's_Den",
|
"Deepnest_45_v02": "Deepnest_Weaver's_Den",
|
||||||
"Deepnest_Spider_Town": "Deepnest_Beast's_Den",
|
"Deepnest_Spider_Town": "Deepnest_Beast's_Den",
|
||||||
"Fungus2_25": "Deepnest_Lower_Cornifer",
|
"Fungus2_25": "Deepnest_Lower_Cornifer",
|
||||||
"Room_Mask_Maker": "Deepnest_Mask_Maker",
|
"Room_Mask_Maker": "Deepnest_Mask_Maker",
|
||||||
"Room_spider_small": "Deepnest_Brumm",
|
"Room_spider_small": "Deepnest_Brumm",
|
||||||
"Deepnest_43": "Gardens_Corridor_To_Deepnest",
|
"Deepnest_43": "Gardens_Corridor_To_Deepnest",
|
||||||
"Fungus1_23": "Gardens_First_Loodle_Corridor",
|
"Fungus1_23": "Gardens_First_Loodle_Corridor",
|
||||||
"Fungus1_24": "Gardens_Cornifer",
|
"Fungus1_24": "Gardens_Cornifer",
|
||||||
"Fungus3_04": "Gardens_Before_Petra_Arena",
|
"Fungus3_04": "Gardens_Before_Petra_Arena",
|
||||||
"Fungus3_05": "Gardens_Petra_Arena",
|
"Fungus3_05": "Gardens_Petra_Arena",
|
||||||
"Fungus3_08": "Gardens_Lower_Petra_Corridor",
|
"Fungus3_08": "Gardens_Lower_Petra_Corridor",
|
||||||
"Fungus3_10": "Gardens_Main_Arena",
|
"Fungus3_10": "Gardens_Main_Arena",
|
||||||
"Fungus3_11": "Gardens_Whispering_Root",
|
"Fungus3_11": "Gardens_Whispering_Root",
|
||||||
"Fungus3_13": "Gardens_Outside_Stag",
|
"Fungus3_13": "Gardens_Outside_Stag",
|
||||||
"Fungus3_21": "Gardens_Corridor_to_Traitor_Lord",
|
"Fungus3_21": "Gardens_Corridor_to_Traitor_Lord",
|
||||||
"Fungus3_22": "Gardens_Upper_Grub",
|
"Fungus3_22": "Gardens_Upper_Grub",
|
||||||
"Fungus3_23": "Gardens_Traitor_Lord_Arena",
|
"Fungus3_23": "Gardens_Traitor_Lord_Arena",
|
||||||
"Fungus3_34": "Gardens_Entrance",
|
"Fungus3_34": "Gardens_Entrance",
|
||||||
"Fungus3_39": "Gardens_Moss_Prophet",
|
"Fungus3_39": "Gardens_Moss_Prophet",
|
||||||
"Fungus3_49": "Gardens_Traitor's_Child's_Grave",
|
"Fungus3_49": "Gardens_Traitor's_Child's_Grave",
|
||||||
"Fungus3_40": "Gardens_Gardens_Stag",
|
"Fungus3_40": "Gardens_Gardens_Stag",
|
||||||
"Fungus3_48": "Gardens_Outside_White_Lady",
|
"Fungus3_48": "Gardens_Outside_White_Lady",
|
||||||
"Fungus3_50": "Gardens_Toll_Bench",
|
"Fungus3_50": "Gardens_Toll_Bench",
|
||||||
"Room_Queen": "Gardens_White_Lady",
|
"Room_Queen": "Gardens_White_Lady",
|
||||||
"White_Palace_01": "Palace_Entrance",
|
"White_Palace_01": "Palace_Entrance",
|
||||||
"White_Palace_02": "Palace_First_Mold",
|
"White_Palace_02": "Palace_First_Mold",
|
||||||
"White_Palace_03_hub": "Palace_Hub",
|
"White_Palace_03_hub": "Palace_Hub",
|
||||||
"White_Palace_04": "Palace_Left_Of_Hub",
|
"White_Palace_04": "Palace_Left_Of_Hub",
|
||||||
"White_Palace_05": "Palace_Saw_Room",
|
"White_Palace_05": "Palace_Saw_Room",
|
||||||
"White_Palace_06": "Palace_Balcony",
|
"White_Palace_06": "Palace_Balcony",
|
||||||
"White_Palace_07": "Palace_Lamp_Pogo",
|
"White_Palace_07": "Palace_Lamp_Pogo",
|
||||||
"White_Palace_08": "Palace_Workshop",
|
"White_Palace_08": "Palace_Workshop",
|
||||||
"White_Palace_09": "Palace_Throne",
|
"White_Palace_09": "Palace_Throne",
|
||||||
"White_Palace_11": "Palace_Outside",
|
"White_Palace_11": "Palace_Outside",
|
||||||
"White_Palace_12": "Palace_Spike_Drop",
|
"White_Palace_12": "Palace_Spike_Drop",
|
||||||
"White_Palace_13": "Palace_Thorn_Jump",
|
"White_Palace_13": "Palace_Thorn_Jump",
|
||||||
"White_Palace_14": "Palace_Hell_Corridor",
|
"White_Palace_14": "Palace_Hell_Corridor",
|
||||||
"White_Palace_15": "Palace_Caged_Lever",
|
"White_Palace_15": "Palace_Caged_Lever",
|
||||||
"White_Palace_16": "Palace_Saw_Climb",
|
"White_Palace_16": "Palace_Saw_Climb",
|
||||||
"White_Palace_17": "POP_Lever",
|
"White_Palace_17": "POP_Lever",
|
||||||
"White_Palace_18": "POP_Entrance",
|
"White_Palace_18": "POP_Entrance",
|
||||||
"White_Palace_19": "POP_Vertical",
|
"White_Palace_19": "POP_Vertical",
|
||||||
"White_Palace_20": "POP_Final",
|
"White_Palace_20": "POP_Final",
|
||||||
"Dream_Final_Boss": "Egg_Radiance",
|
"Dream_Final_Boss": "Egg_Radiance",
|
||||||
"Room_Final_Boss_Atrium": "Egg_Bench",
|
"Room_Final_Boss_Atrium": "Egg_Bench",
|
||||||
"Room_Final_Boss_Core": "Egg_Hollow_Knight",
|
"Room_Final_Boss_Core": "Egg_Hollow_Knight",
|
||||||
"Grimm_Divine": "Grimm_Divine",
|
"Grimm_Divine": "Grimm_Divine",
|
||||||
"Grimm_Main_Tent": "Grimm_Tent",
|
"Grimm_Main_Tent": "Grimm_Tent",
|
||||||
"Grimm_Nightmare": "Grimm_NKG",
|
"Grimm_Nightmare": "Grimm_NKG",
|
||||||
"Dream_01_False_Knight": "Dream_Failed_Champion",
|
"Dream_01_False_Knight": "Dream_Failed_Champion",
|
||||||
"Dream_02_Mage_Lord": "Dream_Soul_Tyrant",
|
"Dream_02_Mage_Lord": "Dream_Soul_Tyrant",
|
||||||
"Dream_03_Infected_Knight": "Dream_Lost_Kin",
|
"Dream_03_Infected_Knight": "Dream_Lost_Kin",
|
||||||
"Dream_04_White_Defender": "Dream_White_Defender",
|
"Dream_04_White_Defender": "Dream_White_Defender",
|
||||||
"Dream_Abyss": "Dream_Abyss",
|
"Dream_Abyss": "Dream_Abyss",
|
||||||
"Dream_Backer_Shrine": "Dream_Outside_Shrine",
|
"Dream_Backer_Shrine": "Dream_Outside_Shrine",
|
||||||
"Dream_Guardian_Hegemol": "Dream_Herrah",
|
"Dream_Guardian_Hegemol": "Dream_Herrah",
|
||||||
"Dream_Guardian_Lurien": "Dream_Lurien",
|
"Dream_Guardian_Lurien": "Dream_Lurien",
|
||||||
"Dream_Guardian_Monomon": "Dream_Monomon",
|
"Dream_Guardian_Monomon": "Dream_Monomon",
|
||||||
"Dream_Mighty_Zote": "Dream_Grey_Prince_Zote",
|
"Dream_Mighty_Zote": "Dream_Grey_Prince_Zote",
|
||||||
"Dream_Nailcollection": "Dream_Nail",
|
"Dream_Nailcollection": "Dream_Nail",
|
||||||
"Dream_Room_Believer_Shrine": "Dream_Shrine_of_Believers",
|
"Dream_Room_Believer_Shrine": "Dream_Shrine_of_Believers",
|
||||||
"GG_Atrium": "Godhome_Atrium",
|
"GG_Atrium": "Godhome_Atrium",
|
||||||
"GG_Atrium_Roof": "Godhome_Roof",
|
"GG_Atrium_Roof": "Godhome_Roof",
|
||||||
"GG_Blue_Room": "Godhome_Lifeblood",
|
"GG_Blue_Room": "Godhome_Lifeblood",
|
||||||
"GG_Land_Of_Storms": "Godhome_Land_Of_Storms",
|
"GG_Land_Of_Storms": "Godhome_Land_Of_Storms",
|
||||||
"GG_Mighty_Zote": "GG_Enchanting_Vigorous_Diligent_Overwhelming_Gorgeous_Passionate_Terrifying_Beautiful_Zote",
|
"GG_Mighty_Zote": "GG_Enchanting_Vigorous_Diligent_Overwhelming_Gorgeous_Passionate_Terrifying_Beautiful_Zote",
|
||||||
"GG_Unlock_Wastes": "Godhome_Godtuner",
|
"GG_Unlock_Wastes": "Godhome_Godtuner",
|
||||||
"GG_Workshop": "Godhome_Hall_Of_Gods"
|
"GG_Workshop": "Godhome_Hall_Of_Gods"
|
||||||
};
|
};
|
||||||
|
|
||||||
export default MAP;
|
export default MAP;
|
||||||
|
|
@ -10,13 +10,13 @@ import MAP from "./hk-dictionary.js";
|
||||||
* @return {number} length of the Object
|
* @return {number} length of the Object
|
||||||
*/
|
*/
|
||||||
function ObjectLength(object) {
|
function ObjectLength(object) {
|
||||||
let length = 0;
|
let length = 0;
|
||||||
for (let key in object) {
|
for (let key in object) {
|
||||||
if (object.hasOwnProperty(key)) {
|
if (object.hasOwnProperty(key)) {
|
||||||
++length;
|
++length;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return length;
|
}
|
||||||
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -26,15 +26,15 @@ function ObjectLength(object) {
|
||||||
*/
|
*/
|
||||||
function TranslateMapName(mapCode, dictionary = MAP) {
|
function TranslateMapName(mapCode, dictionary = MAP) {
|
||||||
|
|
||||||
let translation = mapCode;
|
let translation = mapCode;
|
||||||
if (dictionary.hasOwnProperty(mapCode)) translation = dictionary[mapCode];
|
if (dictionary.hasOwnProperty(mapCode)) translation = dictionary[mapCode];
|
||||||
|
|
||||||
return translation;
|
return translation;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------- Exports ------------------------------- */
|
/* ------------------------- Exports ------------------------------- */
|
||||||
|
|
||||||
export {
|
export {
|
||||||
ObjectLength,
|
ObjectLength,
|
||||||
TranslateMapName
|
TranslateMapName
|
||||||
};
|
};
|
||||||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue