From 4cafe04af3ba5ea3109a755fbd9bef06d2c46c27 Mon Sep 17 00:00:00 2001 From: water Date: Sat, 21 Nov 2020 15:58:51 -0500 Subject: [PATCH] support loading streaming data in decompiler --- common/util/FileUtil.cpp | 159 ++- common/util/FileUtil.h | 2 + decompiler/CMakeLists.txt | 3 +- decompiler/ObjectFile/ObjectFileDB.cpp | 30 +- decompiler/ObjectFile/ObjectFileDB.h | 5 +- decompiler/config.cpp | 1 + decompiler/config.h | 1 + decompiler/config/jak1_ntsc_black_label.jsonc | 35 + decompiler/data/StrFileReader.cpp | 191 +++ decompiler/data/StrFileReader.h | 21 + decompiler/main.cpp | 8 +- goal_src/build/all_objs.txt | 1044 ++++++++++++++++- 12 files changed, 1472 insertions(+), 28 deletions(-) create mode 100644 decompiler/data/StrFileReader.cpp create mode 100644 decompiler/data/StrFileReader.h diff --git a/common/util/FileUtil.cpp b/common/util/FileUtil.cpp index 67bd892ac5..e846239387 100644 --- a/common/util/FileUtil.cpp +++ b/common/util/FileUtil.cpp @@ -21,7 +21,8 @@ #include #endif -std::string file_util::get_project_path() { +namespace file_util { +std::string get_project_path() { #ifdef _WIN32 char buffer[FILENAME_MAX]; GetModuleFileNameA(NULL, buffer, FILENAME_MAX); @@ -34,7 +35,7 @@ std::string file_util::get_project_path() { char buffer[FILENAME_MAX + 1]; auto len = readlink("/proc/self/exe", buffer, FILENAME_MAX); // /proc/self acts like a "virtual folder" containing - // information about the current process + // information about the current process buffer[len] = '\0'; std::string::size_type pos = std::string(buffer).rfind("jak-project"); // Strip file path down to /jak-project/ directory @@ -43,7 +44,7 @@ std::string file_util::get_project_path() { #endif } -std::string file_util::get_file_path(const std::vector& input) { +std::string get_file_path(const std::vector& input) { std::string currentPath = file_util::get_project_path(); char dirSeparator; @@ -61,7 +62,7 @@ std::string file_util::get_file_path(const std::vector& input) { return filePath; } -bool file_util::create_dir_if_needed(const std::string& path) { +bool create_dir_if_needed(const std::string& path) { if (!std::filesystem::is_directory(path)) { std::filesystem::create_directories(path); return true; @@ -69,7 +70,7 @@ bool file_util::create_dir_if_needed(const std::string& path) { return false; } -void file_util::write_binary_file(const std::string& name, void* data, size_t size) { +void write_binary_file(const std::string& name, void* data, size_t size) { FILE* fp = fopen(name.c_str(), "wb"); if (!fp) { throw std::runtime_error("couldn't open file " + name); @@ -82,7 +83,7 @@ void file_util::write_binary_file(const std::string& name, void* data, size_t si fclose(fp); } -void file_util::write_rgba_png(const std::string& name, void* data, int w, int h) { +void write_rgba_png(const std::string& name, void* data, int w, int h) { FILE* fp = fopen(name.c_str(), "wb"); if (!fp) { throw std::runtime_error("couldn't open file " + name); @@ -93,7 +94,7 @@ void file_util::write_rgba_png(const std::string& name, void* data, int w, int h fclose(fp); } -void file_util::write_text_file(const std::string& file_name, const std::string& text) { +void write_text_file(const std::string& file_name, const std::string& text) { FILE* fp = fopen(file_name.c_str(), "w"); if (!fp) { printf("Failed to fopen %s\n", file_name.c_str()); @@ -103,7 +104,7 @@ void file_util::write_text_file(const std::string& file_name, const std::string& fclose(fp); } -std::vector file_util::read_binary_file(const std::string& filename) { +std::vector read_binary_file(const std::string& filename) { auto fp = fopen(filename.c_str(), "rb"); if (!fp) throw std::runtime_error("File " + filename + @@ -123,7 +124,7 @@ std::vector file_util::read_binary_file(const std::string& filename) { return data; } -std::string file_util::read_text_file(const std::string& path) { +std::string read_text_file(const std::string& path) { std::ifstream file(path); if (!file.good()) { throw std::runtime_error("couldn't open " + path); @@ -133,15 +134,15 @@ std::string file_util::read_text_file(const std::string& path) { return ss.str(); } -bool file_util::is_printable_char(char c) { +bool is_printable_char(char c) { return c >= ' ' && c <= '~'; } -std::string file_util::combine_path(const std::string& parent, const std::string& child) { +std::string combine_path(const std::string& parent, const std::string& child) { return parent + "/" + child; } -std::string file_util::base_name(const std::string& filename) { +std::string base_name(const std::string& filename) { size_t pos = 0; assert(!filename.empty()); for (size_t i = filename.size() - 1; i-- > 0;) { @@ -157,7 +158,7 @@ std::string file_util::base_name(const std::string& filename) { static bool sInitCrc = false; static uint32_t crc_table[0x100]; -void file_util::init_crc() { +void init_crc() { for (uint32_t i = 0; i < 0x100; i++) { uint32_t n = i << 24u; for (uint32_t j = 0; j < 8; j++) @@ -167,7 +168,7 @@ void file_util::init_crc() { sInitCrc = true; } -uint32_t file_util::crc32(const uint8_t* data, size_t size) { +uint32_t crc32(const uint8_t* data, size_t size) { assert(sInitCrc); uint32_t crc = 0; for (size_t i = size; i != 0; i--, data++) { @@ -176,6 +177,134 @@ uint32_t file_util::crc32(const uint8_t* data, size_t size) { return ~crc; } -uint32_t file_util::crc32(const std::vector& data) { +uint32_t crc32(const std::vector& data) { return crc32(data.data(), data.size()); } + +void ISONameFromAnimationName(char* dst, const char* src) { + // The Animation Name is a bunch of words separated by dashes + + // copy first two chars of the first word exactly + dst[0] = src[0]; + dst[1] = src[1]; + s32 i = 2; // 2 chars added to dst. + + // skip ahead to the first dash (or \0 if there's no dashes) + const char* src_ptr = src; + while (*src_ptr && *src_ptr != '-') { + src_ptr++; + } + + // the points to the next dash (or \0 if there's none). + const char* next_ptr = src_ptr; + if (*src_ptr) { + // loop over words (next_ptr points to dash before word, i counts chars in dest) + while (src_ptr = next_ptr + 1, i < 8) { + // scan next_ptr forward to next dash + next_ptr = src_ptr; + while (*next_ptr && *next_ptr != '-') { + next_ptr++; + } + + // there's no next word, so break (the current word will be handled there) + if (!*next_ptr) + break; + + // add a char for the current word: + char char_to_add; + if (next_ptr[-1] < '0' || next_ptr[-1] > '9') { + // word doesn't end in a number. + + // some special case words map to special letters (likely to avoid animation name conflicts) + if (next_ptr - src_ptr == 10 && !memcmp(src_ptr, "resolution", 10)) { + char_to_add = 'z'; + } else if (next_ptr - src_ptr == 6 && !memcmp(src_ptr, "accept", 6)) { + char_to_add = 'y'; + } else if (next_ptr - src_ptr == 6 && !memcmp(src_ptr, "reject", 6)) { + char_to_add = 'n'; + } else { + // not a special case, just take the first letter. + char_to_add = *src_ptr; + } + } else { + // the current word ends in a number, just use this number (I think usually the whole word + // is just a number) + char_to_add = next_ptr[-1]; + } + + dst[i++] = char_to_add; + } + + // here we ran out of room in dest, or words in source. + // if there's still room in dest and chars in source, just add them + while (*src_ptr && (i < 8)) { + dst[i] = *src_ptr; + src_ptr++; + i++; + } + } + + // pad with spaces (for ISO Name) + while (i < 8) { + dst[i++] = ' '; + } + + // upper case + for (i = 0; i < 8; i++) { + if (dst[i] > '`' && dst[i] < '{') { + dst[i] -= 0x20; + } + } + + // append file extension + strcpy(dst + 8, "STR"); +} + +void MakeISOName(char* dst, const char* src) { + int i = 0; + const char* src_ptr = src; + char* dst_ptr = dst; + + // copy name and upper case + while ((i < 8) && (*src_ptr) && (*src_ptr != '.')) { + char c = *src_ptr; + src_ptr++; + if (('`' < c) && (c < '{')) { // lower case + c -= 0x20; + } + *dst_ptr = c; + dst_ptr++; + i++; + } + + // pad out name with spaces + while (i < 8) { + *dst_ptr = ' '; + dst_ptr++; + i++; + } + + // increment past period + if (*src_ptr == '.') + src_ptr++; + + // same for extension + while (i < 11 && (*src_ptr)) { + char c = *src_ptr; + src_ptr++; + if (('`' < c) && (c < '{')) { // lower case + c -= 0x20; + } + *dst_ptr = c; + dst_ptr++; + i++; + } + + while (i < 11) { + *dst_ptr = ' '; + dst_ptr++; + i++; + } + *dst_ptr = 0; +} +} // namespace file_util diff --git a/common/util/FileUtil.h b/common/util/FileUtil.h index e161de23de..a713d91562 100644 --- a/common/util/FileUtil.h +++ b/common/util/FileUtil.h @@ -23,4 +23,6 @@ std::string base_name(const std::string& filename); void init_crc(); uint32_t crc32(const uint8_t* data, size_t size); uint32_t crc32(const std::vector& data); +void MakeISOName(char* dst, const char* src); +void ISONameFromAnimationName(char* dst, const char* src); } // namespace file_util diff --git a/decompiler/CMakeLists.txt b/decompiler/CMakeLists.txt index 0ffc11564d..b63ce4ae01 100644 --- a/decompiler/CMakeLists.txt +++ b/decompiler/CMakeLists.txt @@ -20,7 +20,8 @@ add_executable(decompiler IR/IR_TypeAnalysis.cpp Function/TypeInspector.cpp data/tpage.cpp - data/game_text.cpp) + data/game_text.cpp + data/StrFileReader.cpp) target_link_libraries(decompiler goos diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index 0957352133..7411883889 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -12,6 +12,7 @@ #include #include "decompiler/data/tpage.h" #include "decompiler/data/game_text.h" +#include "decompiler/data/StrFileReader.h" #include "LinkedObjectFileCreation.h" #include "decompiler/config.h" #include "third-party/minilzo/minilzo.h" @@ -106,7 +107,8 @@ ObjectFileData& ObjectFileDB::lookup_record(const ObjectFileRecord& rec) { */ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, const std::string& obj_file_name_map_file, - const std::vector& object_files) { + const std::vector& object_files, + const std::vector& str_files) { Timer timer; spdlog::info("-Loading types..."); @@ -122,17 +124,33 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, "consistent naming when doing a partial decompilation."); } - spdlog::info("-Initializing ObjectFileDB..."); + spdlog::info("-Loading DGOs..."); for (auto& dgo : _dgos) { get_objs_from_dgo(dgo); } + spdlog::info("-Loading plain object files..."); for (auto& obj : object_files) { auto data = file_util::read_binary_file(obj); auto name = obj_filename_to_name(obj); add_obj_from_dgo(name, name, data.data(), data.size(), "NO-XGO"); } + spdlog::info("-Loading streaming object files..."); + for (auto& obj : str_files) { + StrFileReader reader(obj); + // name from the file name + std::string base_name = obj_filename_to_name(obj); + // name from inside the file (this does a lot of sanity checking) + auto obj_name = reader.get_full_name(base_name + ".STR"); + for (int i = 0; i < reader.chunk_count(); i++) { + // append the chunk ID to the full name + std::string name = obj_name + fmt::format("+{}", i); + auto& data = reader.get_chunk(i); + add_obj_from_dgo(name, name, data.data(), data.size(), "NO-XGO"); + } + } + spdlog::info("ObjectFileDB Initialized:"); spdlog::info("Total DGOs: {}", int(_dgos.size())); spdlog::info("Total data: {} bytes", stats.total_dgo_bytes); @@ -320,12 +338,12 @@ void ObjectFileDB::get_objs_from_dgo(const std::string& filename) { */ void ObjectFileDB::add_obj_from_dgo(const std::string& obj_name, const std::string& name_in_dgo, - uint8_t* obj_data, + const uint8_t* obj_data, uint32_t obj_size, const std::string& dgo_name) { stats.total_obj_files++; assert(obj_size > 128); - uint16_t version = *(uint16_t*)(obj_data + 8); + uint16_t version = *(const uint16_t*)(obj_data + 8); auto hash = file_util::crc32(obj_data, obj_size); bool duplicated = false; @@ -442,8 +460,8 @@ std::string ObjectFileDB::generate_obj_listing() { dgos.pop_back(); dgos.pop_back(); dgos += "]"; - result += "[\"" + pad_string(x.to_unique_name() + "\", ", 40) + "\"" + - pad_string(x.name_in_dgo + "\", ", 30) + std::to_string(x.obj_version) + ", " + + result += "[\"" + pad_string(x.to_unique_name() + "\", ", 50) + "\"" + + pad_string(x.name_in_dgo + "\", ", 50) + std::to_string(x.obj_version) + ", " + dgos + ", \"\"],\n"; unique_count++; all_unique_names.insert(x.to_unique_name()); diff --git a/decompiler/ObjectFile/ObjectFileDB.h b/decompiler/ObjectFile/ObjectFileDB.h index 0776cf19c3..823d1bb113 100644 --- a/decompiler/ObjectFile/ObjectFileDB.h +++ b/decompiler/ObjectFile/ObjectFileDB.h @@ -47,7 +47,8 @@ class ObjectFileDB { public: ObjectFileDB(const std::vector& _dgos, const std::string& obj_file_name_map_file, - const std::vector& object_files); + const std::vector& object_files, + const std::vector& str_files); std::string generate_dgo_listing(); std::string generate_obj_listing(); void process_link_data(); @@ -70,7 +71,7 @@ class ObjectFileDB { void get_objs_from_dgo(const std::string& filename); void add_obj_from_dgo(const std::string& obj_name, const std::string& name_in_dgo, - uint8_t* obj_data, + const uint8_t* obj_data, uint32_t obj_size, const std::string& dgo_name); diff --git a/decompiler/config.cpp b/decompiler/config.cpp index 8642036eda..1de39f650b 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -16,6 +16,7 @@ void set_config(const std::string& path_to_config_file) { gConfig.game_version = cfg.at("game_version").get(); gConfig.dgo_names = cfg.at("dgo_names").get>(); gConfig.object_file_names = cfg.at("object_file_names").get>(); + gConfig.str_file_names = cfg.at("str_file_names").get>(); if (cfg.contains("obj_file_name_map_file")) { gConfig.obj_file_name_map_file = cfg.at("obj_file_name_map_file").get(); } diff --git a/decompiler/config.h b/decompiler/config.h index eea63fa1f6..d910d24df9 100644 --- a/decompiler/config.h +++ b/decompiler/config.h @@ -11,6 +11,7 @@ struct Config { int game_version = -1; std::vector dgo_names; std::vector object_file_names; + std::vector str_file_names; std::unordered_set bad_inspect_types; std::string obj_file_name_map_file; bool write_disassembly = false; diff --git a/decompiler/config/jak1_ntsc_black_label.jsonc b/decompiler/config/jak1_ntsc_black_label.jsonc index 793e771bcb..568615ea51 100644 --- a/decompiler/config/jak1_ntsc_black_label.jsonc +++ b/decompiler/config/jak1_ntsc_black_label.jsonc @@ -15,6 +15,41 @@ "object_file_names":["TEXT/0COMMON.TXT", "TEXT/1COMMON.TXT", "TEXT/2COMMON.TXT", "TEXT/3COMMON.TXT", "TEXT/4COMMON.TXT", "TEXT/5COMMON.TXT", "TEXT/6COMMON.TXT"], + "str_file_names":["STR/BAFCELL.STR", "STR/SWTE4.STR", "STR/SWTE3.STR", "STR/SWTE2.STR", "STR/SWTE1.STR", + "STR/SNRBSBFC.STR", "STR/SNRBIPFC.STR", "STR/SNRBICFC.STR", "STR/ORR3.STR", "STR/ORR2.STR", "STR/MICANNON.STR", + "STR/BECANNON.STR", "STR/SWTS4.STR", "STR/SWTS3.STR", "STR/SWTS2.STR", "STR/SW4.STR", "STR/SW3.STR", "STR/SW2.STR", + "STR/SWTS1.STR", "STR/ORREYE.STR", "STR/ORLEYE.STR", "STR/SW1.STR", "STR/MAGFCELL.STR", "STR/GNFCELL.STR", + "STR/ORRE3.STR","STR/ORRE2.STR","STR/ORRE1.STR","STR/ORR1.STR","STR/ORLE3.STR","STR/ORLE2.STR","STR/ORI3.STR", + "STR/ORI2.STR","STR/DE0202.STR","STR/RARSANIM.STR","STR/RARANIM.STR","STR/EIFISH.STR","STR/ORLE1.STR", + "STR/SWTEF4.STR","STR/SWTEF3.STR","STR/SWTEF2.STR","STR/SWTEF1.STR","STR/ORI1.STR","STR/EIICE.STR","STR/EIA3.STR", + "STR/DE0191.STR","STR/DE0186.STR","STR/DE0187.STR","STR/EIA4.STR","STR/EIPOLE.STR","STR/RARASECO.STR", + "STR/RARA2.STR","STR/DE0184.STR","STR/DE0181.STR","STR/PESEXT.STR","STR/DE0195.STR","STR/EIA2.STR","STR/FIR1.STR", + "STR/DE0182.STR","STR/BIR1.STR","STR/HAPOPEN.STR","STR/EITUBE.STR","STR/SCR1.STR","STR/DE0197.STR", + "STR/DE0193.STR","STR/EIA1.STR","STR/FAR2.STR","STR/FAR1.STR","STR/DE0199.STR","STR/GERMONEY.STR", + "STR/BIRESOLU.STR","STR/GARMONEY.STR","STR/BIADVENT.STR","STR/FUCRV1.STR","STR/BIREJECT.STR","STR/WAR1.STR", + "STR/BIACCEPT.STR","STR/SA3R1DEC.STR","STR/ASR1GENE.STR","STR/FIREJECT.STR","STR/GARRACE.STR","STR/GEZMONEY.STR", + "STR/LRFALLIN.STR","STR/EXR2.STR","STR/GERMOLES.STR","STR/FUCVICTO.STR","STR/MIR1ORBS.STR","STR/SA3R1RAM.STR", + "STR/AS2R1FLU.STR","STR/FUCV2.STR","STR/MIR1GNAW.STR","STR/GAZMONEY.STR","STR/AS3REMIN.STR","STR/SIHISA.STR", + "STR/FIACCEPT.STR","STR/FIWECO.STR","STR/FARESOLU.STR","STR/ASR1RBIK.STR","STR/MARDONAT.STR","STR/GAZRACE.STR", + "STR/FUCFV1.STR","STR/FUCV5.STR","STR/SABR1CDU.STR","STR/FLLINTRO.STR","STR/SAR1ECOR.STR","STR/AS2R1ROB.STR", + "STR/MIR2ORBS.STR","STR/MARBEAMS.STR","STR/LOI2.STR","STR/SAR1GENE.STR","STR/BILR1.STR","STR/AS2R1ROO.STR", + "STR/ASR1BESW.STR","STR/LOLOOP.STR","STR/FAINTROD.STR","STR/GEZMOLES.STR","STR/V1IN.STR","STR/FUCV4.STR", + "STR/SAIECORO.STR","STR/MIR1SWIT.STR","STR/LOINTRO.STR","STR/SAR2GENE.STR","STR/MUVICTOR.STR","STR/SAR1MCAN.STR", + "STR/FUCV7.STR","STR/MIZ1ORBS.STR","STR/FUCV8.STR","STR/BILR2.STR","STR/FUCV6.STR","STR/FUCV3.STR", + "STR/PLLBLOWU.STR","STR/PLBMAIN.STR","STR/WARESOLU.STR","STR/EIRACER.STR","STR/MAZDONAT.STR","STR/MAZBEAMS.STR", + "STR/MIISWITC.STR","STR/FIBRTVIL.STR","STR/FIBRTMIS.STR","STR/SABR1PAR.STR","STR/NDINTRO.STR","STR/GORDOWN.STR", + "STR/GORUP.STR","STR/SA3IRAMS.STR","STR/YERESOLU.STR","STR/EIFLUT.STR","STR/GRSDSACR.STR","STR/EXR1.STR", + "STR/SCRESOLU.STR","STR/FIRESOLU.STR","STR/SIHITEST.STR","STR/GAI1.STR","STR/EXRESOLU.STR","STR/MIZ2ORBS.STR", + "STR/ASIRBIKE.STR","STR/GRSOBBEC.STR","STR/BIINTROD.STR","STR/GRSOBBNC.STR","STR/AS2IROBB.STR","STR/GRSOBFIN.STR", + "STR/RERESOLU.STR","STR/BLRESOLU.STR","STR/SABIPARM.STR","STR/EVMEND.STR","STR/AS2RESOL.STR","STR/SAIMCANN.STR", + "STR/MIIGNAWE.STR","STR/GRSOBBA.STR","STR/GRSINTRO.STR","STR/SAISE.STR","STR/SA3IDECO.STR","STR/ASFRESOL.STR", + "STR/EXINTROD.STR","STR/BILINTRO.STR","STR/FIINTROD.STR","STR/MAINTROD.STR","STR/SCINTROD.STR","STR/AS2IFLUT.STR", + "STR/ASLERESO.STR","STR/ASLSRESO.STR","STR/AS2IROOM.STR","STR/GRSRESOL.STR","STR/SABICDUS.STR","STR/SIHISB.STR", + "STR/ASIBESWI.STR","STR/BILBRESO.STR","STR/FIBRT1AL.STR","STR/AS2INTRO.STR","STR/GEINTROD.STR","STR/SAISD1.STR", + "STR/SAISA.STR","STR/SIHISC.STR","STR/MIIORBS.STR","STR/WAINTROD.STR","STR/SAISD2.STR","STR/GRSOPREB.STR", + "STR/GRSOBBB.STR","STR/SA3INTRO.STR" + ], + "analyze_functions":true, "write_disassembly":true, diff --git a/decompiler/data/StrFileReader.cpp b/decompiler/data/StrFileReader.cpp new file mode 100644 index 0000000000..2ad3c55d17 --- /dev/null +++ b/decompiler/data/StrFileReader.cpp @@ -0,0 +1,191 @@ +/*! + * @file StrFileReader.cpp + * Utility class to read a .STR file and extract the full file name. + */ + +#include +#include +#include "common/util/FileUtil.h" +#include "game/overlord/isocommon.h" +#include "StrFileReader.h" + +// up to 64 chunks per STR file. +constexpr int SECTOR_TABLE_SIZE = 64; + +// there is a 1 sector long header +struct StrFileHeader { + u32 sectors[SECTOR_TABLE_SIZE]; // start of chunk, in sectors. including this sector. + u32 sizes[SECTOR_TABLE_SIZE]; // size of chunk, in bytes. always an integer number of sectors. + u32 pad[512 - 128]; // all zero +}; +static_assert(sizeof(StrFileHeader) == SECTOR_SIZE, "Sector header size"); + +StrFileReader::StrFileReader(const std::string& file_path) { + auto data = file_util::read_binary_file(file_path); + assert(data.size() >= SECTOR_SIZE); // must have at least the header sector + assert(data.size() % SECTOR_SIZE == 0); // should be multiple of the sector size. + int end_sector = int(data.size()) / SECTOR_SIZE; + + auto* header = (StrFileHeader*)data.data(); + + bool got_zero = false; + for (int i = 0; i < SECTOR_TABLE_SIZE; i++) { + // the chunk is from sector to next_sector + int sector = header->sectors[i]; + // assume this chunk continues to the end... + int next_sector = end_sector; + // unless there's another chunk. + if (i + 1 < SECTOR_TABLE_SIZE && header->sectors[i + 1]) { + next_sector = header->sectors[i + 1]; + } + if (sector) { + assert(!got_zero); // shouldn't have a non-zero after a zero! + assert(next_sector > sector); // should have a positive size. + assert(next_sector * SECTOR_SIZE <= int(data.size())); // check for overflowing the file + // get chunk data. + std::vector chunk; + chunk.insert(chunk.end(), data.begin() + sector * SECTOR_SIZE, + data.begin() + next_sector * SECTOR_SIZE); + m_chunks.emplace_back(std::move(chunk)); + } else { + got_zero = true; + } + } + + // check our sizes are accurate. Will make sure that we include all data, as our m_chunks + // are sized assuming they are packed in order and dense (sectors); + for (int i = 0; i < SECTOR_TABLE_SIZE; i++) { + if (header->sectors[i]) { + assert(header->sizes[i] == m_chunks.at(i).size()); + } else { + assert(header->sizes[i] == 0); + } + } + + // check nothing stored in the padding. + for (auto x : header->pad) { + assert(x == 0); + } +} + +int StrFileReader::chunk_count() const { + return m_chunks.size(); +} + +const std::vector& StrFileReader::get_chunk(int idx) const { + return m_chunks.at(idx); +} + +namespace { +bool find_string_in_data(const u8* data, int data_size, const std::string& str, int* result) { + for (int i = 0; i < data_size - int(str.length()); i++) { + if (std::memcmp(data + i, str.c_str(), str.length()) == 0) { + *result = i; + return true; + } + } + return false; +} + +std::string get_string_of_max_length(const char* data, int max_length) { + std::string result; + for (int i = 0; i < max_length; i++) { + if (data[i]) { + result.push_back(data[i]); + } else { + return result; + } + } + assert(false); + return ""; +} + +struct FullName { + std::string name; + int chunk_idx = -1; +}; + +FullName extract_name(const std::string& file_info_name) { + FullName name; + name.name = file_info_name; + assert(name.name.length() > 10); + assert(name.name.substr(name.name.length() - 6, 6) == "-ag.go"); + name.name = name.name.substr(0, name.name.length() - 6); + int chunk_id = 0; + int place = 0; + for (int i = 2; i-- > 0;) { + char c = name.name.back(); + if (c >= '0' && c <= '9') { + int val = (c - '0'); + for (int j = 0; j < place; j++) { + val *= 10; + } + chunk_id += val; + name.name.pop_back(); + place++; + } else { + break; + } + } + assert(name.name.back() == '+'); + name.name.pop_back(); + name.chunk_idx = chunk_id; + return name; +} + +} // namespace + +/*! + * Look inside the chunks to determine the source file name. + * Does a lot of checking, might not work in future versions without some updating. + */ +std::string StrFileReader::get_full_name(const std::string& short_name) const { + std::string result; + bool done_first = false; + + // this string is part of the file info struct and the stuff after it is the file name. + const std::string file_info_string = "/src/next/data/art-group6/"; + + // it should occur in each chunk. + int chunk_id = 0; + for (const auto& chunk : m_chunks) { + std::string chunk_long_name; + + // find the file info string in the chunk. + int offset; + if (find_string_in_data(chunk.data(), int(chunk.size()), file_info_string, &offset)) { + offset += file_info_string.length(); + } else { + assert(false); + } + + // extract the name info as a "name" + "chunk id" + "-ag.go" format. + auto full_name = + extract_name(get_string_of_max_length((const char*)(chunk.data() + offset), 128)); + + // make sure it matches previous chunks for the name + if (!done_first) { + result = full_name.name; + } else { + assert(result == full_name.name); + } + + // make sure the index is right. + assert(full_name.chunk_idx == chunk_id); + + done_first = true; + chunk_id++; + } + + // convert to ISO names in two ways. + char iso_name_2[256]; + char iso_name_1[256]; + + // first, using the file name to ISO name + file_util::MakeISOName(iso_name_1, short_name.c_str()); + // second, using the full name. + file_util::ISONameFromAnimationName(iso_name_2, result.c_str()); + assert(strcmp(iso_name_1, iso_name_2) == 0); + + return result; +} \ No newline at end of file diff --git a/decompiler/data/StrFileReader.h b/decompiler/data/StrFileReader.h new file mode 100644 index 0000000000..67eedebcdb --- /dev/null +++ b/decompiler/data/StrFileReader.h @@ -0,0 +1,21 @@ +#pragma once + +/*! + * @file StrFileReader.h + * Utility class to read a .STR file and extract the full file name. + */ + +#include +#include +#include "common/common_types.h" + +class StrFileReader { + public: + explicit StrFileReader(const std::string& file_path); + int chunk_count() const; + const std::vector& get_chunk(int idx) const; + std::string get_full_name(const std::string& short_name) const; + + private: + std::vector> m_chunks; +}; diff --git a/decompiler/main.cpp b/decompiler/main.cpp index 756f7c022f..4c834859fc 100644 --- a/decompiler/main.cpp +++ b/decompiler/main.cpp @@ -27,7 +27,7 @@ int main(int argc, char** argv) { std::string in_folder = argv[2]; std::string out_folder = argv[3]; - std::vector dgos, objs; + std::vector dgos, objs, strs; for (const auto& dgo_name : get_config().dgo_names) { dgos.push_back(file_util::combine_path(in_folder, dgo_name)); } @@ -36,7 +36,11 @@ int main(int argc, char** argv) { objs.push_back(file_util::combine_path(in_folder, obj_name)); } - ObjectFileDB db(dgos, get_config().obj_file_name_map_file, objs); + for (const auto& str_name : get_config().str_file_names) { + strs.push_back(file_util::combine_path(in_folder, str_name)); + } + + ObjectFileDB db(dgos, get_config().obj_file_name_map_file, objs, strs); file_util::write_text_file(file_util::combine_path(out_folder, "dgo.txt"), db.generate_dgo_listing()); file_util::write_text_file(file_util::combine_path(out_folder, "obj.txt"), diff --git a/goal_src/build/all_objs.txt b/goal_src/build/all_objs.txt index c1b4d7d693..deadb0a3e1 100644 --- a/goal_src/build/all_objs.txt +++ b/goal_src/build/all_objs.txt @@ -1091,5 +1091,1045 @@ ["3COMMON", "3COMMON", 4, ["NO-XGO"], ""], ["4COMMON", "4COMMON", 4, ["NO-XGO"], ""], ["5COMMON", "5COMMON", 4, ["NO-XGO"], ""], -["6COMMON", "6COMMON", 4, ["NO-XGO"], ""] -] \ No newline at end of file +["6COMMON", "6COMMON", 4, ["NO-XGO"], ""], +["balloon-fuel-cell+0", "balloon-fuel-cell+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-4+0", "swamp-tetherrock-explode-4+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-3+0", "swamp-tetherrock-explode-3+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-2+0", "swamp-tetherrock-explode-2+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-1+0", "swamp-tetherrock-explode-1+0", 2, ["NO-XGO"], ""], +["snowcam-ram-boss-snow-ball-fuel-cell+0", "snowcam-ram-boss-snow-ball-fuel-cell+0", 2, ["NO-XGO"], ""], +["snowcam-ram-boss-ice-pond-fuel-cell+0", "snowcam-ram-boss-ice-pond-fuel-cell+0", 2, ["NO-XGO"], ""], +["snowcam-ram-boss-in-cave-fuel-cell+0", "snowcam-ram-boss-in-cave-fuel-cell+0", 2, ["NO-XGO"], ""], +["oracle-reminder-3+0", "oracle-reminder-3+0", 2, ["NO-XGO"], ""], +["oracle-reminder-3+1", "oracle-reminder-3+1", 2, ["NO-XGO"], ""], +["oracle-reminder-2+0", "oracle-reminder-2+0", 2, ["NO-XGO"], ""], +["oracle-reminder-2+1", "oracle-reminder-2+1", 2, ["NO-XGO"], ""], +["mistycam-cannon+0", "mistycam-cannon+0", 2, ["NO-XGO"], ""], +["beachcam-cannon+0", "beachcam-cannon+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-swamprockexplode-4+0", "swamp-tetherrock-swamprockexplode-4+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-swamprockexplode-3+0", "swamp-tetherrock-swamprockexplode-3+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-swamprockexplode-2+0", "swamp-tetherrock-swamprockexplode-2+0", 2, ["NO-XGO"], ""], +["swamprockexplode-4+0", "swamprockexplode-4+0", 2, ["NO-XGO"], ""], +["swamprockexplode-3+0", "swamprockexplode-3+0", 2, ["NO-XGO"], ""], +["swamprockexplode-2+0", "swamprockexplode-2+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-swamprockexplode-1+0", "swamp-tetherrock-swamprockexplode-1+0", 2, ["NO-XGO"], ""], +["oracle-right-eye+0", "oracle-right-eye+0", 2, ["NO-XGO"], ""], +["oracle-left-eye+0", "oracle-left-eye+0", 2, ["NO-XGO"], ""], +["swamprockexplode-1+0", "swamprockexplode-1+0", 2, ["NO-XGO"], ""], +["maincavecam-gnawer-fuel-cell+0", "maincavecam-gnawer-fuel-cell+0", 2, ["NO-XGO"], ""], +["gnawer-fuel-cell+0", "gnawer-fuel-cell+0", 2, ["NO-XGO"], ""], +["oracle-right-eye-3+0", "oracle-right-eye-3+0", 2, ["NO-XGO"], ""], +["oracle-right-eye-3+1", "oracle-right-eye-3+1", 2, ["NO-XGO"], ""], +["oracle-right-eye-2+0", "oracle-right-eye-2+0", 2, ["NO-XGO"], ""], +["oracle-right-eye-2+1", "oracle-right-eye-2+1", 2, ["NO-XGO"], ""], +["oracle-right-eye-1+0", "oracle-right-eye-1+0", 2, ["NO-XGO"], ""], +["oracle-right-eye-1+1", "oracle-right-eye-1+1", 2, ["NO-XGO"], ""], +["oracle-reminder-1+0", "oracle-reminder-1+0", 2, ["NO-XGO"], ""], +["oracle-reminder-1+1", "oracle-reminder-1+1", 2, ["NO-XGO"], ""], +["oracle-reminder-1+2", "oracle-reminder-1+2", 2, ["NO-XGO"], ""], +["oracle-reminder-1+3", "oracle-reminder-1+3", 2, ["NO-XGO"], ""], +["oracle-left-eye-3+0", "oracle-left-eye-3+0", 2, ["NO-XGO"], ""], +["oracle-left-eye-3+1", "oracle-left-eye-3+1", 2, ["NO-XGO"], ""], +["oracle-left-eye-2+0", "oracle-left-eye-2+0", 2, ["NO-XGO"], ""], +["oracle-left-eye-2+1", "oracle-left-eye-2+1", 2, ["NO-XGO"], ""], +["oracle-intro-3+0", "oracle-intro-3+0", 2, ["NO-XGO"], ""], +["oracle-intro-3+1", "oracle-intro-3+1", 2, ["NO-XGO"], ""], +["oracle-intro-3+2", "oracle-intro-3+2", 2, ["NO-XGO"], ""], +["oracle-intro-3+3", "oracle-intro-3+3", 2, ["NO-XGO"], ""], +["oracle-intro-2+0", "oracle-intro-2+0", 2, ["NO-XGO"], ""], +["oracle-intro-2+1", "oracle-intro-2+1", 2, ["NO-XGO"], ""], +["oracle-intro-2+2", "oracle-intro-2+2", 2, ["NO-XGO"], ""], +["oracle-intro-2+3", "oracle-intro-2+3", 2, ["NO-XGO"], ""], +["death-0202+0", "death-0202+0", 2, ["NO-XGO"], ""], +["race-ring-second-anim+0", "race-ring-second-anim+0", 2, ["NO-XGO"], ""], +["race-ring-second-anim+1", "race-ring-second-anim+1", 2, ["NO-XGO"], ""], +["race-ring-anim+0", "race-ring-anim+0", 2, ["NO-XGO"], ""], +["race-ring-anim+1", "race-ring-anim+1", 2, ["NO-XGO"], ""], +["eichar-fish+0", "eichar-fish+0", 2, ["NO-XGO"], ""], +["oracle-left-eye-1+0", "oracle-left-eye-1+0", 2, ["NO-XGO"], ""], +["oracle-left-eye-1+1", "oracle-left-eye-1+1", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-4+0", "swamp-tetherrock-explode-final-4+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-4+1", "swamp-tetherrock-explode-final-4+1", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-4+2", "swamp-tetherrock-explode-final-4+2", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-3+0", "swamp-tetherrock-explode-final-3+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-3+1", "swamp-tetherrock-explode-final-3+1", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-3+2", "swamp-tetherrock-explode-final-3+2", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-2+0", "swamp-tetherrock-explode-final-2+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-2+1", "swamp-tetherrock-explode-final-2+1", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-2+2", "swamp-tetherrock-explode-final-2+2", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-1+0", "swamp-tetherrock-explode-final-1+0", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-1+1", "swamp-tetherrock-explode-final-1+1", 2, ["NO-XGO"], ""], +["swamp-tetherrock-explode-final-1+2", "swamp-tetherrock-explode-final-1+2", 2, ["NO-XGO"], ""], +["oracle-intro-1+0", "oracle-intro-1+0", 2, ["NO-XGO"], ""], +["oracle-intro-1+1", "oracle-intro-1+1", 2, ["NO-XGO"], ""], +["oracle-intro-1+2", "oracle-intro-1+2", 2, ["NO-XGO"], ""], +["oracle-intro-1+3", "oracle-intro-1+3", 2, ["NO-XGO"], ""], +["oracle-intro-1+4", "oracle-intro-1+4", 2, ["NO-XGO"], ""], +["eichar-ice+0", "eichar-ice+0", 2, ["NO-XGO"], ""], +["eichar-ambient-3+0", "eichar-ambient-3+0", 2, ["NO-XGO"], ""], +["death-0191+0", "death-0191+0", 2, ["NO-XGO"], ""], +["death-0186+0", "death-0186+0", 2, ["NO-XGO"], ""], +["death-0187+0", "death-0187+0", 2, ["NO-XGO"], ""], +["eichar-ambient-4+0", "eichar-ambient-4+0", 2, ["NO-XGO"], ""], +["eichar-pole+0", "eichar-pole+0", 2, ["NO-XGO"], ""], +["race-ring-anim-second+0", "race-ring-anim-second+0", 2, ["NO-XGO"], ""], +["race-ring-anim-second+1", "race-ring-anim-second+1", 2, ["NO-XGO"], ""], +["race-ring-anim-2+0", "race-ring-anim-2+0", 2, ["NO-XGO"], ""], +["race-ring-anim-2+1", "race-ring-anim-2+1", 2, ["NO-XGO"], ""], +["death-0184+0", "death-0184+0", 2, ["NO-XGO"], ""], +["death-0181+0", "death-0181+0", 2, ["NO-XGO"], ""], +["pelican-spit-ext+0", "pelican-spit-ext+0", 2, ["NO-XGO"], ""], +["pelican-spit-ext+1", "pelican-spit-ext+1", 2, ["NO-XGO"], ""], +["death-0195+0", "death-0195+0", 2, ["NO-XGO"], ""], +["eichar-ambient-2+0", "eichar-ambient-2+0", 2, ["NO-XGO"], ""], +["fisher-reminder-1+0", "fisher-reminder-1+0", 2, ["NO-XGO"], ""], +["death-0182+0", "death-0182+0", 2, ["NO-XGO"], ""], +["billy-reminder-1+0", "billy-reminder-1+0", 2, ["NO-XGO"], ""], +["billy-reminder-1+1", "billy-reminder-1+1", 2, ["NO-XGO"], ""], +["happy-plant-open+0", "happy-plant-open+0", 2, ["NO-XGO"], ""], +["happy-plant-open+1", "happy-plant-open+1", 2, ["NO-XGO"], ""], +["eichar-tube+0", "eichar-tube+0", 2, ["NO-XGO"], ""], +["sculptor-reminder-1+0", "sculptor-reminder-1+0", 2, ["NO-XGO"], ""], +["sculptor-reminder-1+1", "sculptor-reminder-1+1", 2, ["NO-XGO"], ""], +["death-0197+0", "death-0197+0", 2, ["NO-XGO"], ""], +["death-0197+1", "death-0197+1", 2, ["NO-XGO"], ""], +["death-0193+0", "death-0193+0", 2, ["NO-XGO"], ""], +["death-0193+1", "death-0193+1", 2, ["NO-XGO"], ""], +["eichar-ambient-1+0", "eichar-ambient-1+0", 2, ["NO-XGO"], ""], +["farmer-reminder-2+0", "farmer-reminder-2+0", 2, ["NO-XGO"], ""], +["farmer-reminder-2+1", "farmer-reminder-2+1", 2, ["NO-XGO"], ""], +["farmer-reminder-1+0", "farmer-reminder-1+0", 2, ["NO-XGO"], ""], +["farmer-reminder-1+1", "farmer-reminder-1+1", 2, ["NO-XGO"], ""], +["death-0199+0", "death-0199+0", 2, ["NO-XGO"], ""], +["death-0199+1", "death-0199+1", 2, ["NO-XGO"], ""], +["geologist-reminder-money+0", "geologist-reminder-money+0", 2, ["NO-XGO"], ""], +["geologist-reminder-money+1", "geologist-reminder-money+1", 2, ["NO-XGO"], ""], +["billy-resolution+0", "billy-resolution+0", 2, ["NO-XGO"], ""], +["billy-resolution+1", "billy-resolution+1", 2, ["NO-XGO"], ""], +["gambler-reminder-money+0", "gambler-reminder-money+0", 2, ["NO-XGO"], ""], +["gambler-reminder-money+1", "gambler-reminder-money+1", 2, ["NO-XGO"], ""], +["big-adventure+0", "big-adventure+0", 2, ["NO-XGO"], ""], +["big-adventure+1", "big-adventure+1", 2, ["NO-XGO"], ""], +["big-adventure+2", "big-adventure+2", 2, ["NO-XGO"], ""], +["big-adventure+3", "big-adventure+3", 2, ["NO-XGO"], ""], +["big-adventure+4", "big-adventure+4", 2, ["NO-XGO"], ""], +["big-adventure+5", "big-adventure+5", 2, ["NO-XGO"], ""], +["big-adventure+6", "big-adventure+6", 2, ["NO-XGO"], ""], +["big-adventure+7", "big-adventure+7", 2, ["NO-XGO"], ""], +["fuel-cell-racer-victory-1+0", "fuel-cell-racer-victory-1+0", 2, ["NO-XGO"], ""], +["fuel-cell-racer-victory-1+1", "fuel-cell-racer-victory-1+1", 2, ["NO-XGO"], ""], +["billy-reject+0", "billy-reject+0", 2, ["NO-XGO"], ""], +["billy-reject+1", "billy-reject+1", 2, ["NO-XGO"], ""], +["billy-reject+2", "billy-reject+2", 2, ["NO-XGO"], ""], +["warrior-reminder-1+0", "warrior-reminder-1+0", 2, ["NO-XGO"], ""], +["warrior-reminder-1+1", "warrior-reminder-1+1", 2, ["NO-XGO"], ""], +["warrior-reminder-1+2", "warrior-reminder-1+2", 2, ["NO-XGO"], ""], +["billy-accept+0", "billy-accept+0", 2, ["NO-XGO"], ""], +["billy-accept+1", "billy-accept+1", 2, ["NO-XGO"], ""], +["billy-accept+2", "billy-accept+2", 2, ["NO-XGO"], ""], +["sage-village3-reminder-1-dark-eco+0", "sage-village3-reminder-1-dark-eco+0", 2, ["NO-XGO"], ""], +["sage-village3-reminder-1-dark-eco+1", "sage-village3-reminder-1-dark-eco+1", 2, ["NO-XGO"], ""], +["assistant-reminder-1-generic+0", "assistant-reminder-1-generic+0", 2, ["NO-XGO"], ""], +["assistant-reminder-1-generic+1", "assistant-reminder-1-generic+1", 2, ["NO-XGO"], ""], +["fisher-reject+0", "fisher-reject+0", 2, ["NO-XGO"], ""], +["fisher-reject+1", "fisher-reject+1", 2, ["NO-XGO"], ""], +["gambler-reminder-race+0", "gambler-reminder-race+0", 2, ["NO-XGO"], ""], +["gambler-reminder-race+1", "gambler-reminder-race+1", 2, ["NO-XGO"], ""], +["geologist-resolution-money+0", "geologist-resolution-money+0", 2, ["NO-XGO"], ""], +["geologist-resolution-money+1", "geologist-resolution-money+1", 2, ["NO-XGO"], ""], +["lrocklrg-falling+0", "lrocklrg-falling+0", 2, ["NO-XGO"], ""], +["lrocklrg-falling+1", "lrocklrg-falling+1", 2, ["NO-XGO"], ""], +["lrocklrg-falling+2", "lrocklrg-falling+2", 2, ["NO-XGO"], ""], +["lrocklrg-falling+3", "lrocklrg-falling+3", 2, ["NO-XGO"], ""], +["explorer-reminder-2+0", "explorer-reminder-2+0", 2, ["NO-XGO"], ""], +["explorer-reminder-2+1", "explorer-reminder-2+1", 2, ["NO-XGO"], ""], +["explorer-reminder-2+2", "explorer-reminder-2+2", 2, ["NO-XGO"], ""], +["geologist-reminder-moles+0", "geologist-reminder-moles+0", 2, ["NO-XGO"], ""], +["geologist-reminder-moles+1", "geologist-reminder-moles+1", 2, ["NO-XGO"], ""], +["geologist-reminder-moles+2", "geologist-reminder-moles+2", 2, ["NO-XGO"], ""], +["fuel-cell-victory+0", "fuel-cell-victory+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory+1", "fuel-cell-victory+1", 2, ["NO-XGO"], ""], +["minershort-reminder-1-orbs+0", "minershort-reminder-1-orbs+0", 2, ["NO-XGO"], ""], +["minershort-reminder-1-orbs+1", "minershort-reminder-1-orbs+1", 2, ["NO-XGO"], ""], +["minershort-reminder-1-orbs+2", "minershort-reminder-1-orbs+2", 2, ["NO-XGO"], ""], +["sage-village3-reminder-1-rams+0", "sage-village3-reminder-1-rams+0", 2, ["NO-XGO"], ""], +["sage-village3-reminder-1-rams+1", "sage-village3-reminder-1-rams+1", 2, ["NO-XGO"], ""], +["sage-village3-reminder-1-rams+2", "sage-village3-reminder-1-rams+2", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-flutflut+0", "assistant-village2-reminder-1-flutflut+0", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-flutflut+1", "assistant-village2-reminder-1-flutflut+1", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-flutflut+2", "assistant-village2-reminder-1-flutflut+2", 2, ["NO-XGO"], ""], +["fuel-cell-victory-2+0", "fuel-cell-victory-2+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-2+1", "fuel-cell-victory-2+1", 2, ["NO-XGO"], ""], +["minershort-reminder-1-gnawers+0", "minershort-reminder-1-gnawers+0", 2, ["NO-XGO"], ""], +["minershort-reminder-1-gnawers+1", "minershort-reminder-1-gnawers+1", 2, ["NO-XGO"], ""], +["minershort-reminder-1-gnawers+2", "minershort-reminder-1-gnawers+2", 2, ["NO-XGO"], ""], +["gambler-resolution-money+0", "gambler-resolution-money+0", 2, ["NO-XGO"], ""], +["gambler-resolution-money+1", "gambler-resolution-money+1", 2, ["NO-XGO"], ""], +["assistant-village3-reminder+0", "assistant-village3-reminder+0", 2, ["NO-XGO"], ""], +["assistant-village3-reminder+1", "assistant-village3-reminder+1", 2, ["NO-XGO"], ""], +["assistant-village3-reminder+2", "assistant-village3-reminder+2", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+0", "sidekick-human-intro-sequence-a+0", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+1", "sidekick-human-intro-sequence-a+1", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+2", "sidekick-human-intro-sequence-a+2", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+3", "sidekick-human-intro-sequence-a+3", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+4", "sidekick-human-intro-sequence-a+4", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+5", "sidekick-human-intro-sequence-a+5", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+6", "sidekick-human-intro-sequence-a+6", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+7", "sidekick-human-intro-sequence-a+7", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+8", "sidekick-human-intro-sequence-a+8", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+9", "sidekick-human-intro-sequence-a+9", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+10", "sidekick-human-intro-sequence-a+10", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+11", "sidekick-human-intro-sequence-a+11", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+12", "sidekick-human-intro-sequence-a+12", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+13", "sidekick-human-intro-sequence-a+13", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+14", "sidekick-human-intro-sequence-a+14", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+15", "sidekick-human-intro-sequence-a+15", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+16", "sidekick-human-intro-sequence-a+16", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+17", "sidekick-human-intro-sequence-a+17", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+18", "sidekick-human-intro-sequence-a+18", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+19", "sidekick-human-intro-sequence-a+19", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+20", "sidekick-human-intro-sequence-a+20", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-a+21", "sidekick-human-intro-sequence-a+21", 2, ["NO-XGO"], ""], +["fisher-accept+0", "fisher-accept+0", 2, ["NO-XGO"], ""], +["fisher-accept+1", "fisher-accept+1", 2, ["NO-XGO"], ""], +["fisher-accept+2", "fisher-accept+2", 2, ["NO-XGO"], ""], +["fisher-accept+3", "fisher-accept+3", 2, ["NO-XGO"], ""], +["fisher-accept+4", "fisher-accept+4", 2, ["NO-XGO"], ""], +["fisher-accept+5", "fisher-accept+5", 2, ["NO-XGO"], ""], +["finalbosscam-white-eco+0", "finalbosscam-white-eco+0", 2, ["NO-XGO"], ""], +["finalbosscam-white-eco+1", "finalbosscam-white-eco+1", 2, ["NO-XGO"], ""], +["finalbosscam-white-eco+2", "finalbosscam-white-eco+2", 2, ["NO-XGO"], ""], +["farmer-resolution+0", "farmer-resolution+0", 2, ["NO-XGO"], ""], +["farmer-resolution+1", "farmer-resolution+1", 2, ["NO-XGO"], ""], +["farmer-resolution+2", "farmer-resolution+2", 2, ["NO-XGO"], ""], +["farmer-resolution+3", "farmer-resolution+3", 2, ["NO-XGO"], ""], +["assistant-reminder-1-race-bike+0", "assistant-reminder-1-race-bike+0", 2, ["NO-XGO"], ""], +["assistant-reminder-1-race-bike+1", "assistant-reminder-1-race-bike+1", 2, ["NO-XGO"], ""], +["assistant-reminder-1-race-bike+2", "assistant-reminder-1-race-bike+2", 2, ["NO-XGO"], ""], +["mayor-reminder-donation+0", "mayor-reminder-donation+0", 2, ["NO-XGO"], ""], +["mayor-reminder-donation+1", "mayor-reminder-donation+1", 2, ["NO-XGO"], ""], +["mayor-reminder-donation+2", "mayor-reminder-donation+2", 2, ["NO-XGO"], ""], +["gambler-resolution-race+0", "gambler-resolution-race+0", 2, ["NO-XGO"], ""], +["gambler-resolution-race+1", "gambler-resolution-race+1", 2, ["NO-XGO"], ""], +["gambler-resolution-race+2", "gambler-resolution-race+2", 2, ["NO-XGO"], ""], +["fuel-cell-flut-victory-1+0", "fuel-cell-flut-victory-1+0", 2, ["NO-XGO"], ""], +["fuel-cell-flut-victory-1+1", "fuel-cell-flut-victory-1+1", 2, ["NO-XGO"], ""], +["fuel-cell-victory-5+0", "fuel-cell-victory-5+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-5+1", "fuel-cell-victory-5+1", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-crop-dusting+0", "sage-bluehut-reminder-1-crop-dusting+0", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-crop-dusting+1", "sage-bluehut-reminder-1-crop-dusting+1", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-crop-dusting+2", "sage-bluehut-reminder-1-crop-dusting+2", 2, ["NO-XGO"], ""], +["flying-lurker-intro+0", "flying-lurker-intro+0", 2, ["NO-XGO"], ""], +["flying-lurker-intro+1", "flying-lurker-intro+1", 2, ["NO-XGO"], ""], +["sage-reminder-1-ecorocks+0", "sage-reminder-1-ecorocks+0", 2, ["NO-XGO"], ""], +["sage-reminder-1-ecorocks+1", "sage-reminder-1-ecorocks+1", 2, ["NO-XGO"], ""], +["sage-reminder-1-ecorocks+2", "sage-reminder-1-ecorocks+2", 2, ["NO-XGO"], ""], +["sage-reminder-1-ecorocks+3", "sage-reminder-1-ecorocks+3", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-robbers+0", "assistant-village2-reminder-1-robbers+0", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-robbers+1", "assistant-village2-reminder-1-robbers+1", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-robbers+2", "assistant-village2-reminder-1-robbers+2", 2, ["NO-XGO"], ""], +["minershort-reminder-2-orbs+0", "minershort-reminder-2-orbs+0", 2, ["NO-XGO"], ""], +["minershort-reminder-2-orbs+1", "minershort-reminder-2-orbs+1", 2, ["NO-XGO"], ""], +["mayor-reminder-beams+0", "mayor-reminder-beams+0", 2, ["NO-XGO"], ""], +["mayor-reminder-beams+1", "mayor-reminder-beams+1", 2, ["NO-XGO"], ""], +["mayor-reminder-beams+2", "mayor-reminder-beams+2", 2, ["NO-XGO"], ""], +["logo-intro-2+0", "logo-intro-2+0", 2, ["NO-XGO"], ""], +["logo-intro-2+1", "logo-intro-2+1", 2, ["NO-XGO"], ""], +["logo-intro-2+2", "logo-intro-2+2", 2, ["NO-XGO"], ""], +["logo-intro-2+3", "logo-intro-2+3", 2, ["NO-XGO"], ""], +["logo-intro-2+4", "logo-intro-2+4", 2, ["NO-XGO"], ""], +["logo-intro-2+5", "logo-intro-2+5", 2, ["NO-XGO"], ""], +["logo-intro-2+6", "logo-intro-2+6", 2, ["NO-XGO"], ""], +["logo-intro-2+7", "logo-intro-2+7", 2, ["NO-XGO"], ""], +["logo-intro-2+8", "logo-intro-2+8", 2, ["NO-XGO"], ""], +["logo-intro-2+9", "logo-intro-2+9", 2, ["NO-XGO"], ""], +["logo-intro-2+10", "logo-intro-2+10", 2, ["NO-XGO"], ""], +["logo-intro-2+11", "logo-intro-2+11", 2, ["NO-XGO"], ""], +["logo-intro-2+12", "logo-intro-2+12", 2, ["NO-XGO"], ""], +["logo-intro-2+13", "logo-intro-2+13", 2, ["NO-XGO"], ""], +["logo-intro-2+14", "logo-intro-2+14", 2, ["NO-XGO"], ""], +["sage-reminder-1-generic+0", "sage-reminder-1-generic+0", 2, ["NO-XGO"], ""], +["sage-reminder-1-generic+1", "sage-reminder-1-generic+1", 2, ["NO-XGO"], ""], +["sage-reminder-1-generic+2", "sage-reminder-1-generic+2", 2, ["NO-XGO"], ""], +["bird-lady-reminder-1+0", "bird-lady-reminder-1+0", 2, ["NO-XGO"], ""], +["bird-lady-reminder-1+1", "bird-lady-reminder-1+1", 2, ["NO-XGO"], ""], +["bird-lady-reminder-1+2", "bird-lady-reminder-1+2", 2, ["NO-XGO"], ""], +["bird-lady-reminder-1+3", "bird-lady-reminder-1+3", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-room+0", "assistant-village2-reminder-1-room+0", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-room+1", "assistant-village2-reminder-1-room+1", 2, ["NO-XGO"], ""], +["assistant-village2-reminder-1-room+2", "assistant-village2-reminder-1-room+2", 2, ["NO-XGO"], ""], +["assistant-reminder-1-blue-eco-switch+0", "assistant-reminder-1-blue-eco-switch+0", 2, ["NO-XGO"], ""], +["assistant-reminder-1-blue-eco-switch+1", "assistant-reminder-1-blue-eco-switch+1", 2, ["NO-XGO"], ""], +["assistant-reminder-1-blue-eco-switch+2", "assistant-reminder-1-blue-eco-switch+2", 2, ["NO-XGO"], ""], +["logo-loop+0", "logo-loop+0", 2, ["NO-XGO"], ""], +["logo-loop+1", "logo-loop+1", 2, ["NO-XGO"], ""], +["logo-loop+2", "logo-loop+2", 2, ["NO-XGO"], ""], +["logo-loop+3", "logo-loop+3", 2, ["NO-XGO"], ""], +["logo-loop+4", "logo-loop+4", 2, ["NO-XGO"], ""], +["logo-loop+5", "logo-loop+5", 2, ["NO-XGO"], ""], +["logo-loop+6", "logo-loop+6", 2, ["NO-XGO"], ""], +["logo-loop+7", "logo-loop+7", 2, ["NO-XGO"], ""], +["logo-loop+8", "logo-loop+8", 2, ["NO-XGO"], ""], +["logo-loop+9", "logo-loop+9", 2, ["NO-XGO"], ""], +["logo-loop+10", "logo-loop+10", 2, ["NO-XGO"], ""], +["logo-loop+11", "logo-loop+11", 2, ["NO-XGO"], ""], +["logo-loop+12", "logo-loop+12", 2, ["NO-XGO"], ""], +["logo-loop+13", "logo-loop+13", 2, ["NO-XGO"], ""], +["logo-loop+14", "logo-loop+14", 2, ["NO-XGO"], ""], +["logo-loop+15", "logo-loop+15", 2, ["NO-XGO"], ""], +["logo-loop+16", "logo-loop+16", 2, ["NO-XGO"], ""], +["farmer-introduction+0", "farmer-introduction+0", 2, ["NO-XGO"], ""], +["farmer-introduction+1", "farmer-introduction+1", 2, ["NO-XGO"], ""], +["farmer-introduction+2", "farmer-introduction+2", 2, ["NO-XGO"], ""], +["farmer-introduction+3", "farmer-introduction+3", 2, ["NO-XGO"], ""], +["farmer-introduction+4", "farmer-introduction+4", 2, ["NO-XGO"], ""], +["geologist-resolution-moles+0", "geologist-resolution-moles+0", 2, ["NO-XGO"], ""], +["geologist-resolution-moles+1", "geologist-resolution-moles+1", 2, ["NO-XGO"], ""], +["geologist-resolution-moles+2", "geologist-resolution-moles+2", 2, ["NO-XGO"], ""], +["v1-in+0", "v1-in+0", 2, ["NO-XGO"], ""], +["v1-in+1", "v1-in+1", 2, ["NO-XGO"], ""], +["fuel-cell-victory-4+0", "fuel-cell-victory-4+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-4+1", "fuel-cell-victory-4+1", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+0", "sage-introduction-ecorocks+0", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+1", "sage-introduction-ecorocks+1", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+2", "sage-introduction-ecorocks+2", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+3", "sage-introduction-ecorocks+3", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+4", "sage-introduction-ecorocks+4", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+5", "sage-introduction-ecorocks+5", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+6", "sage-introduction-ecorocks+6", 2, ["NO-XGO"], ""], +["sage-introduction-ecorocks+7", "sage-introduction-ecorocks+7", 2, ["NO-XGO"], ""], +["minershort-reminder-1-switch+0", "minershort-reminder-1-switch+0", 2, ["NO-XGO"], ""], +["minershort-reminder-1-switch+1", "minershort-reminder-1-switch+1", 2, ["NO-XGO"], ""], +["minershort-reminder-1-switch+2", "minershort-reminder-1-switch+2", 2, ["NO-XGO"], ""], +["minershort-reminder-1-switch+3", "minershort-reminder-1-switch+3", 2, ["NO-XGO"], ""], +["minershort-reminder-1-switch+4", "minershort-reminder-1-switch+4", 2, ["NO-XGO"], ""], +["logo-intro+0", "logo-intro+0", 2, ["NO-XGO"], ""], +["logo-intro+1", "logo-intro+1", 2, ["NO-XGO"], ""], +["logo-intro+2", "logo-intro+2", 2, ["NO-XGO"], ""], +["sage-reminder-2-generic+0", "sage-reminder-2-generic+0", 2, ["NO-XGO"], ""], +["sage-reminder-2-generic+1", "sage-reminder-2-generic+1", 2, ["NO-XGO"], ""], +["sage-reminder-2-generic+2", "sage-reminder-2-generic+2", 2, ["NO-XGO"], ""], +["sage-reminder-2-generic+3", "sage-reminder-2-generic+3", 2, ["NO-XGO"], ""], +["muse-victory+0", "muse-victory+0", 2, ["NO-XGO"], ""], +["muse-victory+1", "muse-victory+1", 2, ["NO-XGO"], ""], +["sage-reminder-1-misty-cannon+0", "sage-reminder-1-misty-cannon+0", 2, ["NO-XGO"], ""], +["sage-reminder-1-misty-cannon+1", "sage-reminder-1-misty-cannon+1", 2, ["NO-XGO"], ""], +["sage-reminder-1-misty-cannon+2", "sage-reminder-1-misty-cannon+2", 2, ["NO-XGO"], ""], +["sage-reminder-1-misty-cannon+3", "sage-reminder-1-misty-cannon+3", 2, ["NO-XGO"], ""], +["sage-reminder-1-misty-cannon+4", "sage-reminder-1-misty-cannon+4", 2, ["NO-XGO"], ""], +["fuel-cell-victory-7+0", "fuel-cell-victory-7+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-7+1", "fuel-cell-victory-7+1", 2, ["NO-XGO"], ""], +["minershort-resolution-1-orbs+0", "minershort-resolution-1-orbs+0", 2, ["NO-XGO"], ""], +["minershort-resolution-1-orbs+1", "minershort-resolution-1-orbs+1", 2, ["NO-XGO"], ""], +["fuel-cell-victory-8+0", "fuel-cell-victory-8+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-8+1", "fuel-cell-victory-8+1", 2, ["NO-XGO"], ""], +["bird-lady-reminder-2+0", "bird-lady-reminder-2+0", 2, ["NO-XGO"], ""], +["bird-lady-reminder-2+1", "bird-lady-reminder-2+1", 2, ["NO-XGO"], ""], +["bird-lady-reminder-2+2", "bird-lady-reminder-2+2", 2, ["NO-XGO"], ""], +["bird-lady-reminder-2+3", "bird-lady-reminder-2+3", 2, ["NO-XGO"], ""], +["bird-lady-reminder-2+4", "bird-lady-reminder-2+4", 2, ["NO-XGO"], ""], +["fuel-cell-victory-6+0", "fuel-cell-victory-6+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-6+1", "fuel-cell-victory-6+1", 2, ["NO-XGO"], ""], +["fuel-cell-victory-3+0", "fuel-cell-victory-3+0", 2, ["NO-XGO"], ""], +["fuel-cell-victory-3+1", "fuel-cell-victory-3+1", 2, ["NO-XGO"], ""], +["plunger-lurker-blowup+0", "plunger-lurker-blowup+0", 2, ["NO-XGO"], ""], +["plunger-lurker-blowup+1", "plunger-lurker-blowup+1", 2, ["NO-XGO"], ""], +["plunger-lurker-blowup+2", "plunger-lurker-blowup+2", 2, ["NO-XGO"], ""], +["plunger-lurker-blowup+3", "plunger-lurker-blowup+3", 2, ["NO-XGO"], ""], +["plant-boss-main+0", "plant-boss-main+0", 2, ["NO-XGO"], ""], +["warrior-resolution+0", "warrior-resolution+0", 2, ["NO-XGO"], ""], +["warrior-resolution+1", "warrior-resolution+1", 2, ["NO-XGO"], ""], +["warrior-resolution+2", "warrior-resolution+2", 2, ["NO-XGO"], ""], +["warrior-resolution+3", "warrior-resolution+3", 2, ["NO-XGO"], ""], +["warrior-resolution+4", "warrior-resolution+4", 2, ["NO-XGO"], ""], +["warrior-resolution+5", "warrior-resolution+5", 2, ["NO-XGO"], ""], +["eichar-racer+0", "eichar-racer+0", 2, ["NO-XGO"], ""], +["mayor-resolution-donation+0", "mayor-resolution-donation+0", 2, ["NO-XGO"], ""], +["mayor-resolution-donation+1", "mayor-resolution-donation+1", 2, ["NO-XGO"], ""], +["mayor-resolution-donation+2", "mayor-resolution-donation+2", 2, ["NO-XGO"], ""], +["mayor-resolution-donation+3", "mayor-resolution-donation+3", 2, ["NO-XGO"], ""], +["mayor-resolution-donation+4", "mayor-resolution-donation+4", 2, ["NO-XGO"], ""], +["mayor-resolution-beams+0", "mayor-resolution-beams+0", 2, ["NO-XGO"], ""], +["mayor-resolution-beams+1", "mayor-resolution-beams+1", 2, ["NO-XGO"], ""], +["mayor-resolution-beams+2", "mayor-resolution-beams+2", 2, ["NO-XGO"], ""], +["mayor-resolution-beams+3", "mayor-resolution-beams+3", 2, ["NO-XGO"], ""], +["mayor-resolution-beams+4", "mayor-resolution-beams+4", 2, ["NO-XGO"], ""], +["mayor-resolution-beams+5", "mayor-resolution-beams+5", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+0", "minershort-introduction-switch+0", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+1", "minershort-introduction-switch+1", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+2", "minershort-introduction-switch+2", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+3", "minershort-introduction-switch+3", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+4", "minershort-introduction-switch+4", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+5", "minershort-introduction-switch+5", 2, ["NO-XGO"], ""], +["minershort-introduction-switch+6", "minershort-introduction-switch+6", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1+0", "fishermans-boat-ride-to-village1+0", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1+1", "fishermans-boat-ride-to-village1+1", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1+2", "fishermans-boat-ride-to-village1+2", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-misty+0", "fishermans-boat-ride-to-misty+0", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-misty+1", "fishermans-boat-ride-to-misty+1", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-misty+2", "fishermans-boat-ride-to-misty+2", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-prec-arm+0", "sage-bluehut-reminder-1-prec-arm+0", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-prec-arm+1", "sage-bluehut-reminder-1-prec-arm+1", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-prec-arm+2", "sage-bluehut-reminder-1-prec-arm+2", 2, ["NO-XGO"], ""], +["sage-bluehut-reminder-1-prec-arm+3", "sage-bluehut-reminder-1-prec-arm+3", 2, ["NO-XGO"], ""], +["ndi-intro+0", "ndi-intro+0", 2, ["NO-XGO"], ""], +["ndi-intro+1", "ndi-intro+1", 2, ["NO-XGO"], ""], +["ndi-intro+2", "ndi-intro+2", 2, ["NO-XGO"], ""], +["ndi-intro+3", "ndi-intro+3", 2, ["NO-XGO"], ""], +["gondola-ride-down+0", "gondola-ride-down+0", 2, ["NO-XGO"], ""], +["gondola-ride-down+1", "gondola-ride-down+1", 2, ["NO-XGO"], ""], +["gondola-ride-down+2", "gondola-ride-down+2", 2, ["NO-XGO"], ""], +["gondola-ride-up+0", "gondola-ride-up+0", 2, ["NO-XGO"], ""], +["gondola-ride-up+1", "gondola-ride-up+1", 2, ["NO-XGO"], ""], +["gondola-ride-up+2", "gondola-ride-up+2", 2, ["NO-XGO"], ""], +["sage-village3-introduction-rams+0", "sage-village3-introduction-rams+0", 2, ["NO-XGO"], ""], +["sage-village3-introduction-rams+1", "sage-village3-introduction-rams+1", 2, ["NO-XGO"], ""], +["sage-village3-introduction-rams+2", "sage-village3-introduction-rams+2", 2, ["NO-XGO"], ""], +["sage-village3-introduction-rams+3", "sage-village3-introduction-rams+3", 2, ["NO-XGO"], ""], +["sage-village3-introduction-rams+4", "sage-village3-introduction-rams+4", 2, ["NO-XGO"], ""], +["sage-village3-introduction-rams+5", "sage-village3-introduction-rams+5", 2, ["NO-XGO"], ""], +["yellowsage-resolution+0", "yellowsage-resolution+0", 2, ["NO-XGO"], ""], +["yellowsage-resolution+1", "yellowsage-resolution+1", 2, ["NO-XGO"], ""], +["yellowsage-resolution+2", "yellowsage-resolution+2", 2, ["NO-XGO"], ""], +["yellowsage-resolution+3", "yellowsage-resolution+3", 2, ["NO-XGO"], ""], +["yellowsage-resolution+4", "yellowsage-resolution+4", 2, ["NO-XGO"], ""], +["yellowsage-resolution+5", "yellowsage-resolution+5", 2, ["NO-XGO"], ""], +["eichar-flut+0", "eichar-flut+0", 2, ["NO-XGO"], ""], +["green-sagecage-daxter-sacrifice+0", "green-sagecage-daxter-sacrifice+0", 2, ["NO-XGO"], ""], +["green-sagecage-daxter-sacrifice+1", "green-sagecage-daxter-sacrifice+1", 2, ["NO-XGO"], ""], +["green-sagecage-daxter-sacrifice+2", "green-sagecage-daxter-sacrifice+2", 2, ["NO-XGO"], ""], +["green-sagecage-daxter-sacrifice+3", "green-sagecage-daxter-sacrifice+3", 2, ["NO-XGO"], ""], +["green-sagecage-daxter-sacrifice+4", "green-sagecage-daxter-sacrifice+4", 2, ["NO-XGO"], ""], +["green-sagecage-daxter-sacrifice+5", "green-sagecage-daxter-sacrifice+5", 2, ["NO-XGO"], ""], +["explorer-reminder-1+0", "explorer-reminder-1+0", 2, ["NO-XGO"], ""], +["explorer-reminder-1+1", "explorer-reminder-1+1", 2, ["NO-XGO"], ""], +["explorer-reminder-1+2", "explorer-reminder-1+2", 2, ["NO-XGO"], ""], +["explorer-reminder-1+3", "explorer-reminder-1+3", 2, ["NO-XGO"], ""], +["explorer-reminder-1+4", "explorer-reminder-1+4", 2, ["NO-XGO"], ""], +["sculptor-resolution+0", "sculptor-resolution+0", 2, ["NO-XGO"], ""], +["sculptor-resolution+1", "sculptor-resolution+1", 2, ["NO-XGO"], ""], +["sculptor-resolution+2", "sculptor-resolution+2", 2, ["NO-XGO"], ""], +["sculptor-resolution+3", "sculptor-resolution+3", 2, ["NO-XGO"], ""], +["fisher-resolution+0", "fisher-resolution+0", 2, ["NO-XGO"], ""], +["fisher-resolution+1", "fisher-resolution+1", 2, ["NO-XGO"], ""], +["fisher-resolution+2", "fisher-resolution+2", 2, ["NO-XGO"], ""], +["fisher-resolution+3", "fisher-resolution+3", 2, ["NO-XGO"], ""], +["sidekick-human-intro-test+0", "sidekick-human-intro-test+0", 2, ["NO-XGO"], ""], +["sidekick-human-intro-test+1", "sidekick-human-intro-test+1", 2, ["NO-XGO"], ""], +["sidekick-human-intro-test+2", "sidekick-human-intro-test+2", 2, ["NO-XGO"], ""], +["sidekick-human-intro-test+3", "sidekick-human-intro-test+3", 2, ["NO-XGO"], ""], +["sidekick-human-intro-test+4", "sidekick-human-intro-test+4", 2, ["NO-XGO"], ""], +["sidekick-human-intro-test+5", "sidekick-human-intro-test+5", 2, ["NO-XGO"], ""], +["gambler-introduction-1+0", "gambler-introduction-1+0", 2, ["NO-XGO"], ""], +["gambler-introduction-1+1", "gambler-introduction-1+1", 2, ["NO-XGO"], ""], +["gambler-introduction-1+2", "gambler-introduction-1+2", 2, ["NO-XGO"], ""], +["gambler-introduction-1+3", "gambler-introduction-1+3", 2, ["NO-XGO"], ""], +["gambler-introduction-1+4", "gambler-introduction-1+4", 2, ["NO-XGO"], ""], +["gambler-introduction-1+5", "gambler-introduction-1+5", 2, ["NO-XGO"], ""], +["gambler-introduction-1+6", "gambler-introduction-1+6", 2, ["NO-XGO"], ""], +["gambler-introduction-1+7", "gambler-introduction-1+7", 2, ["NO-XGO"], ""], +["gambler-introduction-1+8", "gambler-introduction-1+8", 2, ["NO-XGO"], ""], +["explorer-resolution+0", "explorer-resolution+0", 2, ["NO-XGO"], ""], +["explorer-resolution+1", "explorer-resolution+1", 2, ["NO-XGO"], ""], +["explorer-resolution+2", "explorer-resolution+2", 2, ["NO-XGO"], ""], +["explorer-resolution+3", "explorer-resolution+3", 2, ["NO-XGO"], ""], +["explorer-resolution+4", "explorer-resolution+4", 2, ["NO-XGO"], ""], +["minershort-resolution-2-orbs+0", "minershort-resolution-2-orbs+0", 2, ["NO-XGO"], ""], +["minershort-resolution-2-orbs+1", "minershort-resolution-2-orbs+1", 2, ["NO-XGO"], ""], +["minershort-resolution-2-orbs+2", "minershort-resolution-2-orbs+2", 2, ["NO-XGO"], ""], +["minershort-resolution-2-orbs+3", "minershort-resolution-2-orbs+3", 2, ["NO-XGO"], ""], +["minershort-resolution-2-orbs+4", "minershort-resolution-2-orbs+4", 2, ["NO-XGO"], ""], +["minershort-resolution-2-orbs+5", "minershort-resolution-2-orbs+5", 2, ["NO-XGO"], ""], +["assistant-introduction-race-bike+0", "assistant-introduction-race-bike+0", 2, ["NO-XGO"], ""], +["assistant-introduction-race-bike+1", "assistant-introduction-race-bike+1", 2, ["NO-XGO"], ""], +["assistant-introduction-race-bike+2", "assistant-introduction-race-bike+2", 2, ["NO-XGO"], ""], +["assistant-introduction-race-bike+3", "assistant-introduction-race-bike+3", 2, ["NO-XGO"], ""], +["assistant-introduction-race-bike+4", "assistant-introduction-race-bike+4", 2, ["NO-XGO"], ""], +["assistant-introduction-race-bike+5", "assistant-introduction-race-bike+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-enough-cells+0", "green-sagecage-outro-beat-boss-enough-cells+0", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-enough-cells+1", "green-sagecage-outro-beat-boss-enough-cells+1", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-enough-cells+2", "green-sagecage-outro-beat-boss-enough-cells+2", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-enough-cells+3", "green-sagecage-outro-beat-boss-enough-cells+3", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-enough-cells+4", "green-sagecage-outro-beat-boss-enough-cells+4", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-enough-cells+5", "green-sagecage-outro-beat-boss-enough-cells+5", 2, ["NO-XGO"], ""], +["billy-introduction+0", "billy-introduction+0", 2, ["NO-XGO"], ""], +["billy-introduction+1", "billy-introduction+1", 2, ["NO-XGO"], ""], +["billy-introduction+2", "billy-introduction+2", 2, ["NO-XGO"], ""], +["billy-introduction+3", "billy-introduction+3", 2, ["NO-XGO"], ""], +["billy-introduction+4", "billy-introduction+4", 2, ["NO-XGO"], ""], +["billy-introduction+5", "billy-introduction+5", 2, ["NO-XGO"], ""], +["billy-introduction+6", "billy-introduction+6", 2, ["NO-XGO"], ""], +["billy-introduction+7", "billy-introduction+7", 2, ["NO-XGO"], ""], +["billy-introduction+8", "billy-introduction+8", 2, ["NO-XGO"], ""], +["billy-introduction+9", "billy-introduction+9", 2, ["NO-XGO"], ""], +["billy-introduction+10", "billy-introduction+10", 2, ["NO-XGO"], ""], +["billy-introduction+11", "billy-introduction+11", 2, ["NO-XGO"], ""], +["billy-introduction+12", "billy-introduction+12", 2, ["NO-XGO"], ""], +["billy-introduction+13", "billy-introduction+13", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+0", "green-sagecage-outro-beat-boss-need-cells+0", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+1", "green-sagecage-outro-beat-boss-need-cells+1", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+2", "green-sagecage-outro-beat-boss-need-cells+2", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+3", "green-sagecage-outro-beat-boss-need-cells+3", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+4", "green-sagecage-outro-beat-boss-need-cells+4", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+5", "green-sagecage-outro-beat-boss-need-cells+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+6", "green-sagecage-outro-beat-boss-need-cells+6", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-need-cells+7", "green-sagecage-outro-beat-boss-need-cells+7", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-robbers+0", "assistant-village2-introduction-robbers+0", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-robbers+1", "assistant-village2-introduction-robbers+1", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-robbers+2", "assistant-village2-introduction-robbers+2", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-robbers+3", "assistant-village2-introduction-robbers+3", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-robbers+4", "assistant-village2-introduction-robbers+4", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-robbers+5", "assistant-village2-introduction-robbers+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+0", "green-sagecage-outro-big-finish+0", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+1", "green-sagecage-outro-big-finish+1", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+2", "green-sagecage-outro-big-finish+2", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+3", "green-sagecage-outro-big-finish+3", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+4", "green-sagecage-outro-big-finish+4", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+5", "green-sagecage-outro-big-finish+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-big-finish+6", "green-sagecage-outro-big-finish+6", 2, ["NO-XGO"], ""], +["redsage-resolution+0", "redsage-resolution+0", 2, ["NO-XGO"], ""], +["redsage-resolution+1", "redsage-resolution+1", 2, ["NO-XGO"], ""], +["redsage-resolution+2", "redsage-resolution+2", 2, ["NO-XGO"], ""], +["redsage-resolution+3", "redsage-resolution+3", 2, ["NO-XGO"], ""], +["redsage-resolution+4", "redsage-resolution+4", 2, ["NO-XGO"], ""], +["redsage-resolution+5", "redsage-resolution+5", 2, ["NO-XGO"], ""], +["redsage-resolution+6", "redsage-resolution+6", 2, ["NO-XGO"], ""], +["redsage-resolution+7", "redsage-resolution+7", 2, ["NO-XGO"], ""], +["redsage-resolution+8", "redsage-resolution+8", 2, ["NO-XGO"], ""], +["bluesage-resolution+0", "bluesage-resolution+0", 2, ["NO-XGO"], ""], +["bluesage-resolution+1", "bluesage-resolution+1", 2, ["NO-XGO"], ""], +["bluesage-resolution+2", "bluesage-resolution+2", 2, ["NO-XGO"], ""], +["bluesage-resolution+3", "bluesage-resolution+3", 2, ["NO-XGO"], ""], +["bluesage-resolution+4", "bluesage-resolution+4", 2, ["NO-XGO"], ""], +["bluesage-resolution+5", "bluesage-resolution+5", 2, ["NO-XGO"], ""], +["bluesage-resolution+6", "bluesage-resolution+6", 2, ["NO-XGO"], ""], +["bluesage-resolution+7", "bluesage-resolution+7", 2, ["NO-XGO"], ""], +["bluesage-resolution+8", "bluesage-resolution+8", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+0", "sage-bluehut-introduction-prec-arm+0", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+1", "sage-bluehut-introduction-prec-arm+1", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+2", "sage-bluehut-introduction-prec-arm+2", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+3", "sage-bluehut-introduction-prec-arm+3", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+4", "sage-bluehut-introduction-prec-arm+4", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+5", "sage-bluehut-introduction-prec-arm+5", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+6", "sage-bluehut-introduction-prec-arm+6", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-prec-arm+7", "sage-bluehut-introduction-prec-arm+7", 2, ["NO-XGO"], ""], +["evilbro-misty-end+0", "evilbro-misty-end+0", 2, ["NO-XGO"], ""], +["evilbro-misty-end+1", "evilbro-misty-end+1", 2, ["NO-XGO"], ""], +["evilbro-misty-end+2", "evilbro-misty-end+2", 2, ["NO-XGO"], ""], +["evilbro-misty-end+3", "evilbro-misty-end+3", 2, ["NO-XGO"], ""], +["evilbro-misty-end+4", "evilbro-misty-end+4", 2, ["NO-XGO"], ""], +["evilbro-misty-end+5", "evilbro-misty-end+5", 2, ["NO-XGO"], ""], +["evilbro-misty-end+6", "evilbro-misty-end+6", 2, ["NO-XGO"], ""], +["evilbro-misty-end+7", "evilbro-misty-end+7", 2, ["NO-XGO"], ""], +["evilbro-misty-end+8", "evilbro-misty-end+8", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+0", "assistant-village2-resolution+0", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+1", "assistant-village2-resolution+1", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+2", "assistant-village2-resolution+2", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+3", "assistant-village2-resolution+3", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+4", "assistant-village2-resolution+4", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+5", "assistant-village2-resolution+5", 2, ["NO-XGO"], ""], +["assistant-village2-resolution+6", "assistant-village2-resolution+6", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+0", "sage-introduction-misty-cannon+0", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+1", "sage-introduction-misty-cannon+1", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+2", "sage-introduction-misty-cannon+2", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+3", "sage-introduction-misty-cannon+3", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+4", "sage-introduction-misty-cannon+4", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+5", "sage-introduction-misty-cannon+5", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+6", "sage-introduction-misty-cannon+6", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+7", "sage-introduction-misty-cannon+7", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+8", "sage-introduction-misty-cannon+8", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+9", "sage-introduction-misty-cannon+9", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+10", "sage-introduction-misty-cannon+10", 2, ["NO-XGO"], ""], +["sage-introduction-misty-cannon+11", "sage-introduction-misty-cannon+11", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+0", "minershort-introduction-gnawers+0", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+1", "minershort-introduction-gnawers+1", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+2", "minershort-introduction-gnawers+2", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+3", "minershort-introduction-gnawers+3", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+4", "minershort-introduction-gnawers+4", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+5", "minershort-introduction-gnawers+5", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+6", "minershort-introduction-gnawers+6", 2, ["NO-XGO"], ""], +["minershort-introduction-gnawers+7", "minershort-introduction-gnawers+7", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+0", "green-sagecage-outro-beat-boss-a+0", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+1", "green-sagecage-outro-beat-boss-a+1", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+2", "green-sagecage-outro-beat-boss-a+2", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+3", "green-sagecage-outro-beat-boss-a+3", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+4", "green-sagecage-outro-beat-boss-a+4", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+5", "green-sagecage-outro-beat-boss-a+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+6", "green-sagecage-outro-beat-boss-a+6", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-a+7", "green-sagecage-outro-beat-boss-a+7", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+0", "green-sagecage-introduction+0", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+1", "green-sagecage-introduction+1", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+2", "green-sagecage-introduction+2", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+3", "green-sagecage-introduction+3", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+4", "green-sagecage-introduction+4", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+5", "green-sagecage-introduction+5", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+6", "green-sagecage-introduction+6", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+7", "green-sagecage-introduction+7", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+8", "green-sagecage-introduction+8", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+9", "green-sagecage-introduction+9", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+10", "green-sagecage-introduction+10", 2, ["NO-XGO"], ""], +["green-sagecage-introduction+11", "green-sagecage-introduction+11", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+0", "sage-intro-sequence-e+0", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+1", "sage-intro-sequence-e+1", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+2", "sage-intro-sequence-e+2", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+3", "sage-intro-sequence-e+3", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+4", "sage-intro-sequence-e+4", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+5", "sage-intro-sequence-e+5", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+6", "sage-intro-sequence-e+6", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+7", "sage-intro-sequence-e+7", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+8", "sage-intro-sequence-e+8", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+9", "sage-intro-sequence-e+9", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+10", "sage-intro-sequence-e+10", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+11", "sage-intro-sequence-e+11", 2, ["NO-XGO"], ""], +["sage-intro-sequence-e+12", "sage-intro-sequence-e+12", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+0", "sage-village3-introduction-dark-eco+0", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+1", "sage-village3-introduction-dark-eco+1", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+2", "sage-village3-introduction-dark-eco+2", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+3", "sage-village3-introduction-dark-eco+3", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+4", "sage-village3-introduction-dark-eco+4", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+5", "sage-village3-introduction-dark-eco+5", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+6", "sage-village3-introduction-dark-eco+6", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+7", "sage-village3-introduction-dark-eco+7", 2, ["NO-XGO"], ""], +["sage-village3-introduction-dark-eco+8", "sage-village3-introduction-dark-eco+8", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+0", "assistant-firecanyon-resolution+0", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+1", "assistant-firecanyon-resolution+1", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+2", "assistant-firecanyon-resolution+2", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+3", "assistant-firecanyon-resolution+3", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+4", "assistant-firecanyon-resolution+4", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+5", "assistant-firecanyon-resolution+5", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+6", "assistant-firecanyon-resolution+6", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+7", "assistant-firecanyon-resolution+7", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+8", "assistant-firecanyon-resolution+8", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+9", "assistant-firecanyon-resolution+9", 2, ["NO-XGO"], ""], +["assistant-firecanyon-resolution+10", "assistant-firecanyon-resolution+10", 2, ["NO-XGO"], ""], +["explorer-introduction+0", "explorer-introduction+0", 2, ["NO-XGO"], ""], +["explorer-introduction+1", "explorer-introduction+1", 2, ["NO-XGO"], ""], +["explorer-introduction+2", "explorer-introduction+2", 2, ["NO-XGO"], ""], +["explorer-introduction+3", "explorer-introduction+3", 2, ["NO-XGO"], ""], +["explorer-introduction+4", "explorer-introduction+4", 2, ["NO-XGO"], ""], +["explorer-introduction+5", "explorer-introduction+5", 2, ["NO-XGO"], ""], +["explorer-introduction+6", "explorer-introduction+6", 2, ["NO-XGO"], ""], +["explorer-introduction+7", "explorer-introduction+7", 2, ["NO-XGO"], ""], +["explorer-introduction+8", "explorer-introduction+8", 2, ["NO-XGO"], ""], +["explorer-introduction+9", "explorer-introduction+9", 2, ["NO-XGO"], ""], +["explorer-introduction+10", "explorer-introduction+10", 2, ["NO-XGO"], ""], +["bird-lady-introduction+0", "bird-lady-introduction+0", 2, ["NO-XGO"], ""], +["bird-lady-introduction+1", "bird-lady-introduction+1", 2, ["NO-XGO"], ""], +["bird-lady-introduction+2", "bird-lady-introduction+2", 2, ["NO-XGO"], ""], +["bird-lady-introduction+3", "bird-lady-introduction+3", 2, ["NO-XGO"], ""], +["bird-lady-introduction+4", "bird-lady-introduction+4", 2, ["NO-XGO"], ""], +["bird-lady-introduction+5", "bird-lady-introduction+5", 2, ["NO-XGO"], ""], +["bird-lady-introduction+6", "bird-lady-introduction+6", 2, ["NO-XGO"], ""], +["bird-lady-introduction+7", "bird-lady-introduction+7", 2, ["NO-XGO"], ""], +["bird-lady-introduction+8", "bird-lady-introduction+8", 2, ["NO-XGO"], ""], +["bird-lady-introduction+9", "bird-lady-introduction+9", 2, ["NO-XGO"], ""], +["bird-lady-introduction+10", "bird-lady-introduction+10", 2, ["NO-XGO"], ""], +["fisher-introduction+0", "fisher-introduction+0", 2, ["NO-XGO"], ""], +["fisher-introduction+1", "fisher-introduction+1", 2, ["NO-XGO"], ""], +["fisher-introduction+2", "fisher-introduction+2", 2, ["NO-XGO"], ""], +["fisher-introduction+3", "fisher-introduction+3", 2, ["NO-XGO"], ""], +["fisher-introduction+4", "fisher-introduction+4", 2, ["NO-XGO"], ""], +["fisher-introduction+5", "fisher-introduction+5", 2, ["NO-XGO"], ""], +["fisher-introduction+6", "fisher-introduction+6", 2, ["NO-XGO"], ""], +["fisher-introduction+7", "fisher-introduction+7", 2, ["NO-XGO"], ""], +["fisher-introduction+8", "fisher-introduction+8", 2, ["NO-XGO"], ""], +["mayor-introduction+0", "mayor-introduction+0", 2, ["NO-XGO"], ""], +["mayor-introduction+1", "mayor-introduction+1", 2, ["NO-XGO"], ""], +["mayor-introduction+2", "mayor-introduction+2", 2, ["NO-XGO"], ""], +["mayor-introduction+3", "mayor-introduction+3", 2, ["NO-XGO"], ""], +["mayor-introduction+4", "mayor-introduction+4", 2, ["NO-XGO"], ""], +["mayor-introduction+5", "mayor-introduction+5", 2, ["NO-XGO"], ""], +["mayor-introduction+6", "mayor-introduction+6", 2, ["NO-XGO"], ""], +["mayor-introduction+7", "mayor-introduction+7", 2, ["NO-XGO"], ""], +["mayor-introduction+8", "mayor-introduction+8", 2, ["NO-XGO"], ""], +["mayor-introduction+9", "mayor-introduction+9", 2, ["NO-XGO"], ""], +["mayor-introduction+10", "mayor-introduction+10", 2, ["NO-XGO"], ""], +["mayor-introduction+11", "mayor-introduction+11", 2, ["NO-XGO"], ""], +["mayor-introduction+12", "mayor-introduction+12", 2, ["NO-XGO"], ""], +["mayor-introduction+13", "mayor-introduction+13", 2, ["NO-XGO"], ""], +["mayor-introduction+14", "mayor-introduction+14", 2, ["NO-XGO"], ""], +["mayor-introduction+15", "mayor-introduction+15", 2, ["NO-XGO"], ""], +["sculptor-introduction+0", "sculptor-introduction+0", 2, ["NO-XGO"], ""], +["sculptor-introduction+1", "sculptor-introduction+1", 2, ["NO-XGO"], ""], +["sculptor-introduction+2", "sculptor-introduction+2", 2, ["NO-XGO"], ""], +["sculptor-introduction+3", "sculptor-introduction+3", 2, ["NO-XGO"], ""], +["sculptor-introduction+4", "sculptor-introduction+4", 2, ["NO-XGO"], ""], +["sculptor-introduction+5", "sculptor-introduction+5", 2, ["NO-XGO"], ""], +["sculptor-introduction+6", "sculptor-introduction+6", 2, ["NO-XGO"], ""], +["sculptor-introduction+7", "sculptor-introduction+7", 2, ["NO-XGO"], ""], +["sculptor-introduction+8", "sculptor-introduction+8", 2, ["NO-XGO"], ""], +["sculptor-introduction+9", "sculptor-introduction+9", 2, ["NO-XGO"], ""], +["sculptor-introduction+10", "sculptor-introduction+10", 2, ["NO-XGO"], ""], +["sculptor-introduction+11", "sculptor-introduction+11", 2, ["NO-XGO"], ""], +["sculptor-introduction+12", "sculptor-introduction+12", 2, ["NO-XGO"], ""], +["sculptor-introduction+13", "sculptor-introduction+13", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+0", "assistant-village2-introduction-flutflut+0", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+1", "assistant-village2-introduction-flutflut+1", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+2", "assistant-village2-introduction-flutflut+2", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+3", "assistant-village2-introduction-flutflut+3", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+4", "assistant-village2-introduction-flutflut+4", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+5", "assistant-village2-introduction-flutflut+5", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+6", "assistant-village2-introduction-flutflut+6", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-flutflut+7", "assistant-village2-introduction-flutflut+7", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+0", "assistant-lavatube-end-resolution+0", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+1", "assistant-lavatube-end-resolution+1", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+2", "assistant-lavatube-end-resolution+2", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+3", "assistant-lavatube-end-resolution+3", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+4", "assistant-lavatube-end-resolution+4", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+5", "assistant-lavatube-end-resolution+5", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+6", "assistant-lavatube-end-resolution+6", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+7", "assistant-lavatube-end-resolution+7", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+8", "assistant-lavatube-end-resolution+8", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+9", "assistant-lavatube-end-resolution+9", 2, ["NO-XGO"], ""], +["assistant-lavatube-end-resolution+10", "assistant-lavatube-end-resolution+10", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+0", "assistant-lavatube-start-resolution+0", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+1", "assistant-lavatube-start-resolution+1", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+2", "assistant-lavatube-start-resolution+2", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+3", "assistant-lavatube-start-resolution+3", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+4", "assistant-lavatube-start-resolution+4", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+5", "assistant-lavatube-start-resolution+5", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+6", "assistant-lavatube-start-resolution+6", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+7", "assistant-lavatube-start-resolution+7", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+8", "assistant-lavatube-start-resolution+8", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+9", "assistant-lavatube-start-resolution+9", 2, ["NO-XGO"], ""], +["assistant-lavatube-start-resolution+10", "assistant-lavatube-start-resolution+10", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+0", "assistant-village2-introduction-room+0", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+1", "assistant-village2-introduction-room+1", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+2", "assistant-village2-introduction-room+2", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+3", "assistant-village2-introduction-room+3", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+4", "assistant-village2-introduction-room+4", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+5", "assistant-village2-introduction-room+5", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+6", "assistant-village2-introduction-room+6", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+7", "assistant-village2-introduction-room+7", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+8", "assistant-village2-introduction-room+8", 2, ["NO-XGO"], ""], +["assistant-village2-introduction-room+9", "assistant-village2-introduction-room+9", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+0", "green-sagecage-resolution+0", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+1", "green-sagecage-resolution+1", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+2", "green-sagecage-resolution+2", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+3", "green-sagecage-resolution+3", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+4", "green-sagecage-resolution+4", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+5", "green-sagecage-resolution+5", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+6", "green-sagecage-resolution+6", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+7", "green-sagecage-resolution+7", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+8", "green-sagecage-resolution+8", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+9", "green-sagecage-resolution+9", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+10", "green-sagecage-resolution+10", 2, ["NO-XGO"], ""], +["green-sagecage-resolution+11", "green-sagecage-resolution+11", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+0", "sage-bluehut-introduction-crop-dusting+0", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+1", "sage-bluehut-introduction-crop-dusting+1", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+2", "sage-bluehut-introduction-crop-dusting+2", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+3", "sage-bluehut-introduction-crop-dusting+3", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+4", "sage-bluehut-introduction-crop-dusting+4", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+5", "sage-bluehut-introduction-crop-dusting+5", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+6", "sage-bluehut-introduction-crop-dusting+6", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+7", "sage-bluehut-introduction-crop-dusting+7", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+8", "sage-bluehut-introduction-crop-dusting+8", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+9", "sage-bluehut-introduction-crop-dusting+9", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+10", "sage-bluehut-introduction-crop-dusting+10", 2, ["NO-XGO"], ""], +["sage-bluehut-introduction-crop-dusting+11", "sage-bluehut-introduction-crop-dusting+11", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+0", "sidekick-human-intro-sequence-b+0", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+1", "sidekick-human-intro-sequence-b+1", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+2", "sidekick-human-intro-sequence-b+2", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+3", "sidekick-human-intro-sequence-b+3", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+4", "sidekick-human-intro-sequence-b+4", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+5", "sidekick-human-intro-sequence-b+5", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+6", "sidekick-human-intro-sequence-b+6", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+7", "sidekick-human-intro-sequence-b+7", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+8", "sidekick-human-intro-sequence-b+8", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+9", "sidekick-human-intro-sequence-b+9", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-b+10", "sidekick-human-intro-sequence-b+10", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+0", "assistant-introduction-blue-eco-switch+0", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+1", "assistant-introduction-blue-eco-switch+1", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+2", "assistant-introduction-blue-eco-switch+2", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+3", "assistant-introduction-blue-eco-switch+3", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+4", "assistant-introduction-blue-eco-switch+4", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+5", "assistant-introduction-blue-eco-switch+5", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+6", "assistant-introduction-blue-eco-switch+6", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+7", "assistant-introduction-blue-eco-switch+7", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+8", "assistant-introduction-blue-eco-switch+8", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+9", "assistant-introduction-blue-eco-switch+9", 2, ["NO-XGO"], ""], +["assistant-introduction-blue-eco-switch+10", "assistant-introduction-blue-eco-switch+10", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+0", "bird-lady-beach-resolution+0", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+1", "bird-lady-beach-resolution+1", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+2", "bird-lady-beach-resolution+2", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+3", "bird-lady-beach-resolution+3", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+4", "bird-lady-beach-resolution+4", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+5", "bird-lady-beach-resolution+5", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+6", "bird-lady-beach-resolution+6", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+7", "bird-lady-beach-resolution+7", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+8", "bird-lady-beach-resolution+8", 2, ["NO-XGO"], ""], +["bird-lady-beach-resolution+9", "bird-lady-beach-resolution+9", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+0", "fishermans-boat-ride-to-village1-alt+0", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+1", "fishermans-boat-ride-to-village1-alt+1", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+2", "fishermans-boat-ride-to-village1-alt+2", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+3", "fishermans-boat-ride-to-village1-alt+3", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+4", "fishermans-boat-ride-to-village1-alt+4", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+5", "fishermans-boat-ride-to-village1-alt+5", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+6", "fishermans-boat-ride-to-village1-alt+6", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+7", "fishermans-boat-ride-to-village1-alt+7", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+8", "fishermans-boat-ride-to-village1-alt+8", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+9", "fishermans-boat-ride-to-village1-alt+9", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+10", "fishermans-boat-ride-to-village1-alt+10", 2, ["NO-XGO"], ""], +["fishermans-boat-ride-to-village1-alt+11", "fishermans-boat-ride-to-village1-alt+11", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+0", "assistant-village2-introduction+0", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+1", "assistant-village2-introduction+1", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+2", "assistant-village2-introduction+2", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+3", "assistant-village2-introduction+3", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+4", "assistant-village2-introduction+4", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+5", "assistant-village2-introduction+5", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+6", "assistant-village2-introduction+6", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+7", "assistant-village2-introduction+7", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+8", "assistant-village2-introduction+8", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+9", "assistant-village2-introduction+9", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+10", "assistant-village2-introduction+10", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+11", "assistant-village2-introduction+11", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+12", "assistant-village2-introduction+12", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+13", "assistant-village2-introduction+13", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+14", "assistant-village2-introduction+14", 2, ["NO-XGO"], ""], +["assistant-village2-introduction+15", "assistant-village2-introduction+15", 2, ["NO-XGO"], ""], +["geologist-introduction+0", "geologist-introduction+0", 2, ["NO-XGO"], ""], +["geologist-introduction+1", "geologist-introduction+1", 2, ["NO-XGO"], ""], +["geologist-introduction+2", "geologist-introduction+2", 2, ["NO-XGO"], ""], +["geologist-introduction+3", "geologist-introduction+3", 2, ["NO-XGO"], ""], +["geologist-introduction+4", "geologist-introduction+4", 2, ["NO-XGO"], ""], +["geologist-introduction+5", "geologist-introduction+5", 2, ["NO-XGO"], ""], +["geologist-introduction+6", "geologist-introduction+6", 2, ["NO-XGO"], ""], +["geologist-introduction+7", "geologist-introduction+7", 2, ["NO-XGO"], ""], +["geologist-introduction+8", "geologist-introduction+8", 2, ["NO-XGO"], ""], +["geologist-introduction+9", "geologist-introduction+9", 2, ["NO-XGO"], ""], +["geologist-introduction+10", "geologist-introduction+10", 2, ["NO-XGO"], ""], +["geologist-introduction+11", "geologist-introduction+11", 2, ["NO-XGO"], ""], +["geologist-introduction+12", "geologist-introduction+12", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+0", "sage-intro-sequence-d1+0", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+1", "sage-intro-sequence-d1+1", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+2", "sage-intro-sequence-d1+2", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+3", "sage-intro-sequence-d1+3", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+4", "sage-intro-sequence-d1+4", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+5", "sage-intro-sequence-d1+5", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+6", "sage-intro-sequence-d1+6", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+7", "sage-intro-sequence-d1+7", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+8", "sage-intro-sequence-d1+8", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+9", "sage-intro-sequence-d1+9", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+10", "sage-intro-sequence-d1+10", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+11", "sage-intro-sequence-d1+11", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+12", "sage-intro-sequence-d1+12", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+13", "sage-intro-sequence-d1+13", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+14", "sage-intro-sequence-d1+14", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+15", "sage-intro-sequence-d1+15", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d1+16", "sage-intro-sequence-d1+16", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+0", "sage-intro-sequence-a+0", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+1", "sage-intro-sequence-a+1", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+2", "sage-intro-sequence-a+2", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+3", "sage-intro-sequence-a+3", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+4", "sage-intro-sequence-a+4", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+5", "sage-intro-sequence-a+5", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+6", "sage-intro-sequence-a+6", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+7", "sage-intro-sequence-a+7", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+8", "sage-intro-sequence-a+8", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+9", "sage-intro-sequence-a+9", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+10", "sage-intro-sequence-a+10", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+11", "sage-intro-sequence-a+11", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+12", "sage-intro-sequence-a+12", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+13", "sage-intro-sequence-a+13", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+14", "sage-intro-sequence-a+14", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+15", "sage-intro-sequence-a+15", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+16", "sage-intro-sequence-a+16", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+17", "sage-intro-sequence-a+17", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+18", "sage-intro-sequence-a+18", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+19", "sage-intro-sequence-a+19", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+20", "sage-intro-sequence-a+20", 2, ["NO-XGO"], ""], +["sage-intro-sequence-a+21", "sage-intro-sequence-a+21", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+0", "sidekick-human-intro-sequence-c+0", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+1", "sidekick-human-intro-sequence-c+1", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+2", "sidekick-human-intro-sequence-c+2", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+3", "sidekick-human-intro-sequence-c+3", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+4", "sidekick-human-intro-sequence-c+4", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+5", "sidekick-human-intro-sequence-c+5", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+6", "sidekick-human-intro-sequence-c+6", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+7", "sidekick-human-intro-sequence-c+7", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+8", "sidekick-human-intro-sequence-c+8", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+9", "sidekick-human-intro-sequence-c+9", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+10", "sidekick-human-intro-sequence-c+10", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+11", "sidekick-human-intro-sequence-c+11", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+12", "sidekick-human-intro-sequence-c+12", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+13", "sidekick-human-intro-sequence-c+13", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+14", "sidekick-human-intro-sequence-c+14", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+15", "sidekick-human-intro-sequence-c+15", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+16", "sidekick-human-intro-sequence-c+16", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+17", "sidekick-human-intro-sequence-c+17", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+18", "sidekick-human-intro-sequence-c+18", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+19", "sidekick-human-intro-sequence-c+19", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+20", "sidekick-human-intro-sequence-c+20", 2, ["NO-XGO"], ""], +["sidekick-human-intro-sequence-c+21", "sidekick-human-intro-sequence-c+21", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+0", "minershort-introduction-orbs+0", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+1", "minershort-introduction-orbs+1", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+2", "minershort-introduction-orbs+2", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+3", "minershort-introduction-orbs+3", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+4", "minershort-introduction-orbs+4", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+5", "minershort-introduction-orbs+5", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+6", "minershort-introduction-orbs+6", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+7", "minershort-introduction-orbs+7", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+8", "minershort-introduction-orbs+8", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+9", "minershort-introduction-orbs+9", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+10", "minershort-introduction-orbs+10", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+11", "minershort-introduction-orbs+11", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+12", "minershort-introduction-orbs+12", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+13", "minershort-introduction-orbs+13", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+14", "minershort-introduction-orbs+14", 2, ["NO-XGO"], ""], +["minershort-introduction-orbs+15", "minershort-introduction-orbs+15", 2, ["NO-XGO"], ""], +["warrior-introduction+0", "warrior-introduction+0", 2, ["NO-XGO"], ""], +["warrior-introduction+1", "warrior-introduction+1", 2, ["NO-XGO"], ""], +["warrior-introduction+2", "warrior-introduction+2", 2, ["NO-XGO"], ""], +["warrior-introduction+3", "warrior-introduction+3", 2, ["NO-XGO"], ""], +["warrior-introduction+4", "warrior-introduction+4", 2, ["NO-XGO"], ""], +["warrior-introduction+5", "warrior-introduction+5", 2, ["NO-XGO"], ""], +["warrior-introduction+6", "warrior-introduction+6", 2, ["NO-XGO"], ""], +["warrior-introduction+7", "warrior-introduction+7", 2, ["NO-XGO"], ""], +["warrior-introduction+8", "warrior-introduction+8", 2, ["NO-XGO"], ""], +["warrior-introduction+9", "warrior-introduction+9", 2, ["NO-XGO"], ""], +["warrior-introduction+10", "warrior-introduction+10", 2, ["NO-XGO"], ""], +["warrior-introduction+11", "warrior-introduction+11", 2, ["NO-XGO"], ""], +["warrior-introduction+12", "warrior-introduction+12", 2, ["NO-XGO"], ""], +["warrior-introduction+13", "warrior-introduction+13", 2, ["NO-XGO"], ""], +["warrior-introduction+14", "warrior-introduction+14", 2, ["NO-XGO"], ""], +["warrior-introduction+15", "warrior-introduction+15", 2, ["NO-XGO"], ""], +["warrior-introduction+16", "warrior-introduction+16", 2, ["NO-XGO"], ""], +["warrior-introduction+17", "warrior-introduction+17", 2, ["NO-XGO"], ""], +["warrior-introduction+18", "warrior-introduction+18", 2, ["NO-XGO"], ""], +["warrior-introduction+19", "warrior-introduction+19", 2, ["NO-XGO"], ""], +["warrior-introduction+20", "warrior-introduction+20", 2, ["NO-XGO"], ""], +["warrior-introduction+21", "warrior-introduction+21", 2, ["NO-XGO"], ""], +["warrior-introduction+22", "warrior-introduction+22", 2, ["NO-XGO"], ""], +["warrior-introduction+23", "warrior-introduction+23", 2, ["NO-XGO"], ""], +["warrior-introduction+24", "warrior-introduction+24", 2, ["NO-XGO"], ""], +["warrior-introduction+25", "warrior-introduction+25", 2, ["NO-XGO"], ""], +["warrior-introduction+26", "warrior-introduction+26", 2, ["NO-XGO"], ""], +["warrior-introduction+27", "warrior-introduction+27", 2, ["NO-XGO"], ""], +["warrior-introduction+28", "warrior-introduction+28", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+0", "sage-intro-sequence-d2+0", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+1", "sage-intro-sequence-d2+1", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+2", "sage-intro-sequence-d2+2", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+3", "sage-intro-sequence-d2+3", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+4", "sage-intro-sequence-d2+4", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+5", "sage-intro-sequence-d2+5", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+6", "sage-intro-sequence-d2+6", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+7", "sage-intro-sequence-d2+7", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+8", "sage-intro-sequence-d2+8", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+9", "sage-intro-sequence-d2+9", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+10", "sage-intro-sequence-d2+10", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+11", "sage-intro-sequence-d2+11", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+12", "sage-intro-sequence-d2+12", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+13", "sage-intro-sequence-d2+13", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+14", "sage-intro-sequence-d2+14", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+15", "sage-intro-sequence-d2+15", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+16", "sage-intro-sequence-d2+16", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+17", "sage-intro-sequence-d2+17", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+18", "sage-intro-sequence-d2+18", 2, ["NO-XGO"], ""], +["sage-intro-sequence-d2+19", "sage-intro-sequence-d2+19", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+0", "green-sagecage-outro-preboss+0", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+1", "green-sagecage-outro-preboss+1", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+2", "green-sagecage-outro-preboss+2", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+3", "green-sagecage-outro-preboss+3", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+4", "green-sagecage-outro-preboss+4", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+5", "green-sagecage-outro-preboss+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+6", "green-sagecage-outro-preboss+6", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+7", "green-sagecage-outro-preboss+7", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+8", "green-sagecage-outro-preboss+8", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+9", "green-sagecage-outro-preboss+9", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+10", "green-sagecage-outro-preboss+10", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+11", "green-sagecage-outro-preboss+11", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+12", "green-sagecage-outro-preboss+12", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+13", "green-sagecage-outro-preboss+13", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+14", "green-sagecage-outro-preboss+14", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+15", "green-sagecage-outro-preboss+15", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+16", "green-sagecage-outro-preboss+16", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+17", "green-sagecage-outro-preboss+17", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+18", "green-sagecage-outro-preboss+18", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+19", "green-sagecage-outro-preboss+19", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+20", "green-sagecage-outro-preboss+20", 2, ["NO-XGO"], ""], +["green-sagecage-outro-preboss+21", "green-sagecage-outro-preboss+21", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+0", "green-sagecage-outro-beat-boss-b+0", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+1", "green-sagecage-outro-beat-boss-b+1", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+2", "green-sagecage-outro-beat-boss-b+2", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+3", "green-sagecage-outro-beat-boss-b+3", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+4", "green-sagecage-outro-beat-boss-b+4", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+5", "green-sagecage-outro-beat-boss-b+5", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+6", "green-sagecage-outro-beat-boss-b+6", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+7", "green-sagecage-outro-beat-boss-b+7", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+8", "green-sagecage-outro-beat-boss-b+8", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+9", "green-sagecage-outro-beat-boss-b+9", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+10", "green-sagecage-outro-beat-boss-b+10", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+11", "green-sagecage-outro-beat-boss-b+11", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+12", "green-sagecage-outro-beat-boss-b+12", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+13", "green-sagecage-outro-beat-boss-b+13", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+14", "green-sagecage-outro-beat-boss-b+14", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+15", "green-sagecage-outro-beat-boss-b+15", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+16", "green-sagecage-outro-beat-boss-b+16", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+17", "green-sagecage-outro-beat-boss-b+17", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+18", "green-sagecage-outro-beat-boss-b+18", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+19", "green-sagecage-outro-beat-boss-b+19", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+20", "green-sagecage-outro-beat-boss-b+20", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+21", "green-sagecage-outro-beat-boss-b+21", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+22", "green-sagecage-outro-beat-boss-b+22", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+23", "green-sagecage-outro-beat-boss-b+23", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+24", "green-sagecage-outro-beat-boss-b+24", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+25", "green-sagecage-outro-beat-boss-b+25", 2, ["NO-XGO"], ""], +["green-sagecage-outro-beat-boss-b+26", "green-sagecage-outro-beat-boss-b+26", 2, ["NO-XGO"], ""], +["sage-village3-introduction+0", "sage-village3-introduction+0", 2, ["NO-XGO"], ""], +["sage-village3-introduction+1", "sage-village3-introduction+1", 2, ["NO-XGO"], ""], +["sage-village3-introduction+2", "sage-village3-introduction+2", 2, ["NO-XGO"], ""], +["sage-village3-introduction+3", "sage-village3-introduction+3", 2, ["NO-XGO"], ""], +["sage-village3-introduction+4", "sage-village3-introduction+4", 2, ["NO-XGO"], ""], +["sage-village3-introduction+5", "sage-village3-introduction+5", 2, ["NO-XGO"], ""], +["sage-village3-introduction+6", "sage-village3-introduction+6", 2, ["NO-XGO"], ""], +["sage-village3-introduction+7", "sage-village3-introduction+7", 2, ["NO-XGO"], ""], +["sage-village3-introduction+8", "sage-village3-introduction+8", 2, ["NO-XGO"], ""], +["sage-village3-introduction+9", "sage-village3-introduction+9", 2, ["NO-XGO"], ""], +["sage-village3-introduction+10", "sage-village3-introduction+10", 2, ["NO-XGO"], ""], +["sage-village3-introduction+11", "sage-village3-introduction+11", 2, ["NO-XGO"], ""], +["sage-village3-introduction+12", "sage-village3-introduction+12", 2, ["NO-XGO"], ""], +["sage-village3-introduction+13", "sage-village3-introduction+13", 2, ["NO-XGO"], ""], +["sage-village3-introduction+14", "sage-village3-introduction+14", 2, ["NO-XGO"], ""], +["sage-village3-introduction+15", "sage-village3-introduction+15", 2, ["NO-XGO"], ""], +["sage-village3-introduction+16", "sage-village3-introduction+16", 2, ["NO-XGO"], ""], +["sage-village3-introduction+17", "sage-village3-introduction+17", 2, ["NO-XGO"], ""], +["sage-village3-introduction+18", "sage-village3-introduction+18", 2, ["NO-XGO"], ""], +["sage-village3-introduction+19", "sage-village3-introduction+19", 2, ["NO-XGO"], ""], +["sage-village3-introduction+20", "sage-village3-introduction+20", 2, ["NO-XGO"], ""], +["sage-village3-introduction+21", "sage-village3-introduction+21", 2, ["NO-XGO"], ""], +["sage-village3-introduction+22", "sage-village3-introduction+22", 2, ["NO-XGO"], ""], +["sage-village3-introduction+23", "sage-village3-introduction+23", 2, ["NO-XGO"], ""], +["sage-village3-introduction+24", "sage-village3-introduction+24", 2, ["NO-XGO"], ""], +["sage-village3-introduction+25", "sage-village3-introduction+25", 2, ["NO-XGO"], ""], +["sage-village3-introduction+26", "sage-village3-introduction+26", 2, ["NO-XGO"], ""], +["sage-village3-introduction+27", "sage-village3-introduction+27", 2, ["NO-XGO"], ""], +["sage-village3-introduction+28", "sage-village3-introduction+28", 2, ["NO-XGO"], ""], +["sage-village3-introduction+29", "sage-village3-introduction+29", 2, ["NO-XGO"], ""], +["sage-village3-introduction+30", "sage-village3-introduction+30", 2, ["NO-XGO"], ""], +["sage-village3-introduction+31", "sage-village3-introduction+31", 2, ["NO-XGO"], ""], +["sage-village3-introduction+32", "sage-village3-introduction+32", 2, ["NO-XGO"], ""], +["sage-village3-introduction+33", "sage-village3-introduction+33", 2, ["NO-XGO"], ""], +["sage-village3-introduction+34", "sage-village3-introduction+34", 2, ["NO-XGO"], ""], +["sage-village3-introduction+35", "sage-village3-introduction+35", 2, ["NO-XGO"], ""], +["sage-village3-introduction+36", "sage-village3-introduction+36", 2, ["NO-XGO"], ""], +["sage-village3-introduction+37", "sage-village3-introduction+37", 2, ["NO-XGO"], ""], +["sage-village3-introduction+38", "sage-village3-introduction+38", 2, ["NO-XGO"], ""], +["sage-village3-introduction+39", "sage-village3-introduction+39", 2, ["NO-XGO"], ""], +["sage-village3-introduction+40", "sage-village3-introduction+40", 2, ["NO-XGO"], ""], +["sage-village3-introduction+41", "sage-village3-introduction+41", 2, ["NO-XGO"], ""], +["sage-village3-introduction+42", "sage-village3-introduction+42", 2, ["NO-XGO"], ""], +["sage-village3-introduction+43", "sage-village3-introduction+43", 2, ["NO-XGO"], ""], +["sage-village3-introduction+44", "sage-village3-introduction+44", 2, ["NO-XGO"], ""], +["sage-village3-introduction+45", "sage-village3-introduction+45", 2, ["NO-XGO"], ""], +["sage-village3-introduction+46", "sage-village3-introduction+46", 2, ["NO-XGO"], ""], +["sage-village3-introduction+47", "sage-village3-introduction+47", 2, ["NO-XGO"], ""], +["sage-village3-introduction+48", "sage-village3-introduction+48", 2, ["NO-XGO"], ""], +["sage-village3-introduction+49", "sage-village3-introduction+49", 2, ["NO-XGO"], ""], +["sage-village3-introduction+50", "sage-village3-introduction+50", 2, ["NO-XGO"], ""], +["sage-village3-introduction+51", "sage-village3-introduction+51", 2, ["NO-XGO"], ""], +["sage-village3-introduction+52", "sage-village3-introduction+52", 2, ["NO-XGO"], ""], +["sage-village3-introduction+53", "sage-village3-introduction+53", 2, ["NO-XGO"], ""], +["sage-village3-introduction+54", "sage-village3-introduction+54", 2, ["NO-XGO"], ""], +["sage-village3-introduction+55", "sage-village3-introduction+55", 2, ["NO-XGO"], ""], +["sage-village3-introduction+56", "sage-village3-introduction+56", 2, ["NO-XGO"], ""], +["sage-village3-introduction+57", "sage-village3-introduction+57", 2, ["NO-XGO"], ""]]