mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-05-27 10:39:56 -07:00
Ocarina of Time (#64)
* first commit (not including OoT data files yet) * added some basic options * rule parser works now at least * make sure to commit everything this time * temporary change to BaseClasses for oot * overworld location graph builds mostly correctly * adding oot data files * commenting out world options until later since they only existed to make the RuleParser work * conversion functions between AP ids and OOT ids * world graph outputs * set scrub prices * itempool generates, entrances connected, way too many options added * fixed set_rules and set_shop_rules * temp baseclasses changes * Reaches the fill step now, old event-based system retained in case the new way breaks * Song placements and misc fixes everywhere * temporary changes to make oot work * changed root exits for AP fill framework * prevent infinite recursion due to OoT sharing usage of the address field * age reachability works hopefully, songs are broken again * working spoiler log generation on beatable-only * Logic tricks implemented * need this for logic tricks * fixed map/compass being placed on Serenade location * kill unreachable events before filling the world * add a bunch of utility functions to prepare for rom patching * move OptionList into generic options * fixed some silly bugs with OptionList * properly seed all random behavior (so far) * ROM generation working * fix hints trying to get alttp dungeon hint texts * continue fixing hints * add oot to network data package * change item and location IDs to 66000 and 67000 range respectively * push removed items to precollected items * fixed various issues with cross-contamination with multiple world generation * reenable glitched logic (hopefully) * glitched world files age-check fix * cleaned up some get_locations calls * added token shuffle and scrub shuffle, modified some options slightly to make the parsing work * reenable MQ dungeons * fix forest mq exception * made targeting style an option for now, will be cosmetic later * reminder to move targeting to cosmetics * some oot option maintenance * enabled starting time of day * fixed issue breaking shop slots in multiworld generation * added "off" option for text shuffle and hints * shopsanity functionality restored * change patch file extension * remove unnecessary utility functions + imports * update MIT license * change option to "patch_uncompressed_rom" instead of "compress_rom" * compliance with new AutoWorld systems * Kill only internal events, remove non-internal big poe event in code * re-add the big poe event and handle it correctly * remove extra method in Range option * fix typo * Starting items, starting with consumables option * do not remove nonexistent item * move set_shop_rules to after shop items are placed * some cleanup * add retries for song placement * flagged Skull Mask and Mask of Truth as advancement items * update OoT to use LogicMixin * Fixed trying to assign starting items from the wrong players * fixed song retry step * improved option handling, comments, and starting item replacements * DefaultOnToggle writes Yes or No to spoiler * enable compression of output if Compress executable is present * clean up compression * check whether (de)compressor exists before running the process * allow specification of rom path in host.yaml * check if decompressed file already exists before decompressing again * fix triforce hunt generation * rename all the oot state functions with prefix * OoT: mark triforce pieces as completion goal for triforce hunt * added overworld and any-dungeon shuffle for dungeon items * Hide most unshuffled locations and events from the list of locations in spoiler * build oot option ranges with a generic function instead of defining each separately * move oot output-type control to host.yaml instead of individual yamls * implement dungeon song shuffle * minor improvements to overworld dungeon item shuffle * remove random ice trap names in shops, mostly to avoid maintaining a massive censor list * always output patch file to folder, remove option to generate ROM in preparation for removal * re-add the fix for infinite recursion due to not being light or dark world * change AP-sendable to Ocarina of Time model, since the triforce piece has some extra code apparently * oot: remove item_names and location_names * oot: minor fixes * oot: comment out ROM patching * oot: only add CollectionState objects on creation if actually needed * main entrance shuffle method and entrances-based rules * fix entrances based rules * disable master quest and big poe count options for client compatibility * use get_player_name instead of get_player_names * fix OptionList * fix oot options for new option system * new coop section in oot rom: expand player names to 16 bytes, write AP_PLAYER_NAME at end of PLAYER_NAMES * fill AP player name in oot rom with 0 instead of 0xDF * encode player name with ASCII for fixed-width * revert oot player name array to 8 bytes per name * remove Pierre location if fast scarecrow is on * check player name length * "free_scarecrow" not "fast_scarecrow" * OoT locations now properly store the AP ID instead of the oot internal ID * oot __version__ updates in lockstep with AP version * pull in unmodified oot cosmetic files * also grab JSONDump since it's needed apparently * gather extra needed methods, modify imports * delete cosmetics log, replace all instances of SettingsList with OOTWorld * cosmetic options working, except for sound effects (due to ear-safe issues) * SFX, Music, and Fanfare randomization reenabled * move OoT data files into the worlds folder * move Compress and Decompress into oot data folder * Replace get_all_state with custom method to avoid the cache * OoT ROM: increment item counter before setting incoming item/player values to 0, preventing desync issues * set data_version to 0 * make Kokiri Sword shuffle off by default * reenable "Random Choice" for various cosmetic options * kill Ruto's Letter turnin if open fountain also fix for shopsanity * place Buy Goron/Zora Tunic first in shop shuffle * make ice traps appear as other items instead of breaking generation * managed to break ice traps on non-major-only * only handle ice traps if they are on * fix shopsanity for non-oot games, and write player name instead of player number * light arrows hint uses player name instead of player number * Reenable "skip child zelda" option * fix entrances_based_rules * fix ganondorf hint if starting with light arrows * fix dungeonitem shuffle and shopsanity interaction * remove has_all_of, has_any_of, count_of in BaseClasses, replace usage with has_all, has_any, has_group * force local giveable item on ZL if skip_child_zelda and shuffle_song_items is any * keep bosses and bombchu bowling chus out of data package * revert workaround for infinite recursion and fix it properly * fix shared shop id caches during patching process * fix shop text box overflows, as much as possible * add default oot host.yaml option * add .apz5, .n64, .z64 to gitignore * Properly document and name all (functioning) OOT options * clean up some imports * remove unnecessary files from oot's data * fix typo in gitignore * readd the Compress and Decompress utilities, since they are needed for generation * cleanup of imports and some minor optimizations * increase shop offset for item IDs to 0xCB * remove shop item AP ids entirely * prevent triforce pieces for other players from being received by yourself * add "excluded" property to Location * Hint system adapted and reenabled; hints still unseeded * make hints deterministic with lists instead of sets * do not allow hints to point to Light Arrows on non-vanilla bridge * foreign locations hint as their full name in OoT rather than their region * checkedLocations now stores hint names by player ID, so that the same location in different worlds can have hints associated * consolidate versioning in Utils * ice traps appear as major items rather than any progression item * set prescription and claim check as defaults for adult trade item settings * add oot options to playerSettings * allow case-insensitive logic tricks in yaml * fix oot shopsanity option formatting * Write OoT override info even if local item, enabling local checks to show up immediately in the client * implement CollectionState.can_live_dmg for oot glitched logic * filter item names for invalid characters when patching shops * make ice traps appear according to the settings of the world they are shuffled into, rather than the original world * set hidden-spoiler items and locations with Shop items to events * make GF carpenters, Gerudo Card, Malon, ZL, and Impa events if the relevant settings are enabled, preventing them from appearing in the client on game start * Fix oot Glitched and No Logic generation * fix indenting * Greatly reduce displayed cosmetic options * Change oot data version to 1 * add apz5 distribution to webhost * print player name if an ALttP dungeon contains a good item for OoT world * delete unneeded commented code * remove OcarinaSongs import to satisfy lint
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
/Bingo
|
||||
/Music
|
||||
presets_default.json
|
||||
settings_mapping.json
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
#ifndef BSWAP_H
|
||||
#define BSWAP_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint32_t bSwap32(uint32_t a)
|
||||
{
|
||||
return( (a & 0x000000FF) << 24 |
|
||||
(a & 0x0000FF00) << 8 |
|
||||
(a & 0x00FF0000) >> 8 |
|
||||
(a & 0xFF000000) >> 24 );
|
||||
}
|
||||
|
||||
uint16_t bSwap16(uint16_t a)
|
||||
{
|
||||
return( (a & 0x00FF) << 8 |
|
||||
(a & 0xFF00) >> 8 );
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,601 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include "bSwap.h"
|
||||
#include "yaz0.c"
|
||||
#include "crc.c"
|
||||
|
||||
/* Needed to compile on Windows */
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
/* Different ROM sizes */
|
||||
#define UINTSIZE 0x1000000
|
||||
#define COMPSIZE 0x2000000
|
||||
|
||||
/* Number of extra bytes to add to compression buffer */
|
||||
#define COMPBUFF 0x250
|
||||
|
||||
//Structs {{{1
|
||||
/* DMA table entry */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t startV;
|
||||
uint32_t endV;
|
||||
uint32_t startP;
|
||||
uint32_t endP;
|
||||
}
|
||||
table_t;
|
||||
|
||||
/* Temporary storage for output data */
|
||||
typedef struct
|
||||
{
|
||||
table_t table;
|
||||
uint8_t* data;
|
||||
uint8_t comp;
|
||||
uint32_t size;
|
||||
}
|
||||
output_t;
|
||||
|
||||
/* Archive struct */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t fileCount;
|
||||
uint32_t* refSize;
|
||||
uint32_t* srcSize;
|
||||
uint8_t** ref;
|
||||
uint8_t** src;
|
||||
}
|
||||
archive_t;
|
||||
/* 1}}} */
|
||||
|
||||
/* Functions {{{1 */
|
||||
uint32_t findTable(uint8_t*);
|
||||
void getTableEnt(table_t*, uint32_t*, uint32_t);
|
||||
void* threadFunc(void*);
|
||||
void errorCheck(int, char**);
|
||||
void makeArchive();
|
||||
int32_t getNumCores();
|
||||
int32_t getNext();
|
||||
/* 1}}} */
|
||||
|
||||
/* Globals {{{1 */
|
||||
char* inName;
|
||||
char* outName;
|
||||
uint8_t* inROM;
|
||||
uint8_t* outROM;
|
||||
uint8_t* refTab;
|
||||
pthread_mutex_t filelock;
|
||||
pthread_mutex_t countlock;
|
||||
int32_t numFiles, nextFile;
|
||||
int32_t arcCount, outSize;
|
||||
uint32_t* fileTab;
|
||||
archive_t* archive;
|
||||
output_t* out;
|
||||
/* 1}}} */
|
||||
|
||||
/* int main(int, char**) {{{1 */
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
FILE* file;
|
||||
int32_t tabStart, tabSize, tabCount, junk;
|
||||
volatile int32_t prev;
|
||||
int32_t i, j, size, numCores, tempSize;
|
||||
pthread_t* threads;
|
||||
table_t tab;
|
||||
|
||||
errorCheck(argc, argv);
|
||||
printf("Zelda64 Compressor, Version 2\n");
|
||||
fflush(stdout);
|
||||
|
||||
/* Open input, read into inROM */
|
||||
file = fopen(argv[1], "rb");
|
||||
fseek(file, 0, SEEK_END);
|
||||
tempSize = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
inROM = calloc(tempSize, sizeof(uint8_t));
|
||||
junk = fread(inROM, tempSize, 1, file);
|
||||
fclose(file);
|
||||
|
||||
/* Read archive if it exists*/
|
||||
file = fopen("ARCHIVE.bin", "rb");
|
||||
if(file != NULL)
|
||||
{
|
||||
/* Get number of files */
|
||||
printf("Loading Archive.\n");
|
||||
fflush(stdout);
|
||||
archive = malloc(sizeof(archive_t));
|
||||
junk = fread(&(archive->fileCount), sizeof(uint32_t), 1, file);
|
||||
|
||||
/* Allocate space for files and sizes */
|
||||
archive->refSize = malloc(sizeof(uint32_t) * archive->fileCount);
|
||||
archive->srcSize = malloc(sizeof(uint32_t) * archive->fileCount);
|
||||
archive->ref = malloc(sizeof(uint8_t*) * archive->fileCount);
|
||||
archive->src = malloc(sizeof(uint8_t*) * archive->fileCount);
|
||||
|
||||
/* Read in file size and then file data */
|
||||
for(i = 0; i < archive->fileCount; i++)
|
||||
{
|
||||
/* Decompressed "Reference" file */
|
||||
junk = fread(&tempSize, sizeof(uint32_t), 1, file);
|
||||
archive->ref[i] = malloc(tempSize);
|
||||
archive->refSize[i] = tempSize;
|
||||
junk = fread(archive->ref[i], 1, tempSize, file);
|
||||
|
||||
/* Compressed "Source" file */
|
||||
junk = fread(&tempSize, sizeof(uint32_t), 1, file);
|
||||
archive->src[i] = malloc(tempSize);
|
||||
archive->srcSize[i] = tempSize;
|
||||
junk = fread(archive->src[i], 1, tempSize, file);
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("No archive found, this could take a while.\n");
|
||||
fflush(stdout);
|
||||
archive = NULL;
|
||||
}
|
||||
|
||||
/* Find the file table and relevant info */
|
||||
tabStart = findTable(inROM);
|
||||
fileTab = (uint32_t*)(inROM + tabStart);
|
||||
getTableEnt(&tab, fileTab, 2);
|
||||
tabSize = tab.endV - tab.startV;
|
||||
tabCount = tabSize / 16;
|
||||
|
||||
/* Allocate space for the exclusion list */
|
||||
/* Default to 1 (compress), set exclusions to 0 */
|
||||
file = fopen("dmaTable.dat", "r");
|
||||
size = tabCount - 1;
|
||||
refTab = malloc(sizeof(uint8_t) * size);
|
||||
memset(refTab, 1, size);
|
||||
|
||||
/* The first 3 files are never compressed */
|
||||
/* They should never be given to the compression function anyway though */
|
||||
refTab[0] = refTab[1] = refTab[2] = 0;
|
||||
|
||||
/* Read in the rest of the exclusion list */
|
||||
for(i = 0; fscanf(file, "%d", &j) == 1; i++)
|
||||
{
|
||||
/* Make sure the number is within the dmaTable */
|
||||
if(j > size || j < -size)
|
||||
{
|
||||
fprintf(stderr, "Error: Entry %d in dmaTable.dat is out of bounds\n", i);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* If j was negative, the file shouldn't exist */
|
||||
/* Otherwise, set file to not compress */
|
||||
if(j < 0)
|
||||
refTab[(~j + 1)] = 2;
|
||||
else
|
||||
refTab[j] = 0;
|
||||
}
|
||||
fclose(file);
|
||||
|
||||
/* Initialise some stuff */
|
||||
out = malloc(sizeof(output_t) * tabCount);
|
||||
pthread_mutex_init(&filelock, NULL);
|
||||
pthread_mutex_init(&countlock, NULL);
|
||||
numFiles = tabCount;
|
||||
outSize = COMPSIZE;
|
||||
nextFile = 3;
|
||||
arcCount = 0;
|
||||
|
||||
/* Get CPU core count */
|
||||
numCores = getNumCores();
|
||||
threads = malloc(sizeof(pthread_t) * numCores);
|
||||
printf("Detected %d cores.\n", (numCores));
|
||||
printf("Starting compression.\n");
|
||||
fflush(stdout);
|
||||
|
||||
/* Create all the threads */
|
||||
for(i = 0; i < numCores; i++)
|
||||
pthread_create(&threads[i], NULL, threadFunc, NULL);
|
||||
|
||||
/* Wait for all of the threads to finish */
|
||||
for(i = 0; i < numCores; i++)
|
||||
pthread_join(threads[i], NULL);
|
||||
printf("\n");
|
||||
|
||||
/* Get size of new ROM */
|
||||
/* Start with size of first 3 files */
|
||||
tempSize = tabStart + tabSize;
|
||||
for(i = 3; i < tabCount; i++)
|
||||
tempSize += out[i].size;
|
||||
|
||||
/* If ROM is too big, update size */
|
||||
if(tempSize > outSize)
|
||||
outSize = tempSize;
|
||||
|
||||
/* Setup for copying to outROM */
|
||||
printf("Files compressed, writing new ROM.\n");
|
||||
outROM = calloc(outSize, sizeof(uint8_t));
|
||||
memcpy(outROM, inROM, tabStart + tabSize);
|
||||
prev = tabStart + tabSize;
|
||||
tabStart += 0x20;
|
||||
|
||||
/* Free some stuff */
|
||||
pthread_mutex_destroy(&filelock);
|
||||
pthread_mutex_destroy(&countlock);
|
||||
if(archive != NULL)
|
||||
{
|
||||
free(archive->ref);
|
||||
free(archive->src);
|
||||
free(archive->refSize);
|
||||
free(archive->srcSize);
|
||||
free(archive);
|
||||
}
|
||||
free(threads);
|
||||
free(refTab);
|
||||
|
||||
/* Write data to outROM */
|
||||
for(i = 3; i < tabCount; i++)
|
||||
{
|
||||
tab = out[i].table;
|
||||
size = out[i].size;
|
||||
tabStart += 0x10;
|
||||
|
||||
/* Finish table and copy to outROM */
|
||||
if(tab.startV != tab.endV)
|
||||
{
|
||||
/* Set up physical addresses */
|
||||
tab.startP = prev;
|
||||
if(out[i].comp == 1)
|
||||
tab.endP = tab.startP + size;
|
||||
else if(out[i].comp == 2)
|
||||
tab.startP = tab.endP = 0xFFFFFFFF;
|
||||
|
||||
/* If the file existed, write it */
|
||||
if(tab.startP != 0xFFFFFFFF)
|
||||
memcpy(outROM + tab.startP, out[i].data, size);
|
||||
|
||||
/* Write the table entry */
|
||||
tab.startV = bSwap32(tab.startV);
|
||||
tab.endV = bSwap32(tab.endV);
|
||||
tab.startP = bSwap32(tab.startP);
|
||||
tab.endP = bSwap32(tab.endP);
|
||||
memcpy(outROM + tabStart, &tab, sizeof(table_t));
|
||||
}
|
||||
|
||||
prev += size;
|
||||
if(out[i].data != NULL)
|
||||
free(out[i].data);
|
||||
}
|
||||
free(out);
|
||||
|
||||
/* Fix the CRC before writing the ROM */
|
||||
fix_crc(outROM);
|
||||
|
||||
/* Make and fill the output ROM */
|
||||
file = fopen(outName, "wb");
|
||||
fwrite(outROM, outSize, 1, file);
|
||||
fclose(file);
|
||||
|
||||
/* Make the archive if needed */
|
||||
if(archive == NULL)
|
||||
{
|
||||
printf("Creating archive.\n");
|
||||
makeArchive();
|
||||
}
|
||||
|
||||
/* Free up the last bit of memory */
|
||||
if(argc != 3)
|
||||
free(outName);
|
||||
free(inROM);
|
||||
free(outROM);
|
||||
|
||||
printf("Compression complete.\n");
|
||||
|
||||
return(0);
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* uint32_t findTAble(uint8_t*) {{{1 */
|
||||
uint32_t findTable(uint8_t* argROM)
|
||||
{
|
||||
uint32_t i;
|
||||
uint32_t* tempROM;
|
||||
|
||||
tempROM = (uint32_t*)argROM;
|
||||
|
||||
/* Start at the end of the makerom (0x10600000) */
|
||||
/* Look for dma entry for the makeom */
|
||||
/* Should work for all Zelda64 titles */
|
||||
for(i = 1048; i+4 < UINTSIZE; i += 4)
|
||||
{
|
||||
if(tempROM[i] == 0x00000000)
|
||||
if(tempROM[i+1] == 0x60100000)
|
||||
return(i * 4);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Error: Couldn't find dma table in ROM!\n");
|
||||
exit(1);
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* void getTableEnt(table_t*, uint32_t*, uint32_t) {{{1 */
|
||||
void getTableEnt(table_t* tab, uint32_t* files, uint32_t i)
|
||||
{
|
||||
tab->startV = bSwap32(files[i*4]);
|
||||
tab->endV = bSwap32(files[(i*4)+1]);
|
||||
tab->startP = bSwap32(files[(i*4)+2]);
|
||||
tab->endP = bSwap32(files[(i*4)+3]);
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* void* threadFunc(void*) {{{1 */
|
||||
void* threadFunc(void* null)
|
||||
{
|
||||
uint8_t* src;
|
||||
uint8_t* dst;
|
||||
table_t t;
|
||||
int32_t i, nextArchive, size, srcSize;
|
||||
|
||||
while((i = getNext()) != -1)
|
||||
{
|
||||
/* Setup the src */
|
||||
getTableEnt(&(t), fileTab, i);
|
||||
srcSize = t.endV - t.startV;
|
||||
src = inROM + t.startV;
|
||||
|
||||
/* If refTab is 1, compress */
|
||||
/* If refTab is 2, file shouldn't exist */
|
||||
/* Otherwise, just copy src into out */
|
||||
if(refTab[i] == 1)
|
||||
{
|
||||
pthread_mutex_lock(&countlock);
|
||||
nextArchive = arcCount++;
|
||||
pthread_mutex_unlock(&countlock);
|
||||
|
||||
/* If uncompressed is the same as archive, just copy/paste the compressed */
|
||||
/* Otherwise, compress it manually */
|
||||
if((archive != NULL) && (memcmp(src, archive->ref[nextArchive], archive->refSize[nextArchive]) == 0))
|
||||
{
|
||||
out[i].comp = 1;
|
||||
size = archive->srcSize[nextArchive];
|
||||
out[i].data = malloc(size);
|
||||
memcpy(out[i].data, archive->src[nextArchive], size);
|
||||
}
|
||||
else
|
||||
{
|
||||
size = srcSize + COMPBUFF;
|
||||
dst = calloc(size, sizeof(uint8_t));
|
||||
yaz0_encode(src, srcSize, dst, &(size));
|
||||
out[i].comp = 1;
|
||||
out[i].data = malloc(size);
|
||||
memcpy(out[i].data, dst, size);
|
||||
free(dst);
|
||||
}
|
||||
|
||||
if(archive != NULL)
|
||||
{
|
||||
free(archive->ref[nextArchive]);
|
||||
free(archive->src[nextArchive]);
|
||||
}
|
||||
}
|
||||
else if(refTab[i] == 2)
|
||||
{
|
||||
out[i].comp = 2;
|
||||
size = 0;
|
||||
out[i].data = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
out[i].comp = 0;
|
||||
size = srcSize;
|
||||
out[i].data = malloc(size);
|
||||
memcpy(out[i].data, src, size);
|
||||
}
|
||||
|
||||
/* Set up the table entry and size */
|
||||
out[i].table = t;
|
||||
out[i].size = size;
|
||||
}
|
||||
|
||||
return(NULL);
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* void makeArchive() {{{1 */
|
||||
void makeArchive()
|
||||
{
|
||||
table_t tab;
|
||||
uint32_t tabSize, tabCount, tabStart;
|
||||
uint32_t fileSize, fileCount, i;
|
||||
FILE* file;
|
||||
|
||||
/* Find DMAtable info */
|
||||
tabStart = findTable(outROM);
|
||||
fileTab = (uint32_t*)(outROM + tabStart);
|
||||
getTableEnt(&tab, fileTab, 2);
|
||||
tabSize = tab.endV - tab.startV;
|
||||
tabCount = tabSize / 16;
|
||||
fileCount = 0;
|
||||
|
||||
/* Find the number of compressed files in the ROM */
|
||||
/* Ignore first 3 files, as they're never compressed */
|
||||
for(i = 3; i < tabCount; i++)
|
||||
{
|
||||
getTableEnt(&tab, fileTab, i);
|
||||
|
||||
if(tab.endP != 0 && tab.endP != 0xFFFFFFFF)
|
||||
fileCount++;
|
||||
}
|
||||
|
||||
/* Open output file */
|
||||
file = fopen("ARCHIVE.bin", "wb");
|
||||
if(file == NULL)
|
||||
{
|
||||
perror("ARCHIVE.bin");
|
||||
fprintf(stderr, "Error: Could not create archive\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Write the archive data */
|
||||
fwrite(&fileCount, sizeof(uint32_t), 1, file);
|
||||
|
||||
/* Write the fileSize and data for each ref & src */
|
||||
for(i = 3; i < tabCount; i++)
|
||||
{
|
||||
getTableEnt(&tab, fileTab, i);
|
||||
|
||||
if(tab.endP != 0 && tab.endP != 0xFFFFFFFF)
|
||||
{
|
||||
/* Write the size and data for the decompressed portion */
|
||||
fileSize = tab.endV - tab.startV;
|
||||
fwrite(&fileSize, sizeof(uint32_t), 1, file);
|
||||
fwrite(inROM + tab.startV, 1, fileSize, file);
|
||||
|
||||
/* Write the size and data for the compressed portion */
|
||||
fileSize = tab.endP - tab.startP;
|
||||
fwrite(&fileSize, sizeof(uint32_t), 1, file);
|
||||
fwrite((outROM + tab.startP), 1, fileSize, file);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* int32_t getNumCores() {{{1 */
|
||||
int32_t getNumCores()
|
||||
{
|
||||
/* Windows */
|
||||
#ifdef _WIN32
|
||||
|
||||
SYSTEM_INFO info;
|
||||
GetSystemInfo(&info);
|
||||
return(info.dwNumberOfProcessors);
|
||||
|
||||
/* Mac */
|
||||
#elif MACOS
|
||||
|
||||
int nm[2];
|
||||
size_t len;
|
||||
uint32_t count;
|
||||
|
||||
len = 4;
|
||||
nm[0] = CTL_HW;
|
||||
nm[1] = HW_AVAILCPU;
|
||||
sysctl(nm, 2, &count, &len, NULL, 0);
|
||||
|
||||
if (count < 1)
|
||||
{
|
||||
nm[1] = HW_NCPU;
|
||||
sysctl(nm, 2, &count, &len, NULL, 0);
|
||||
if (count < 1)
|
||||
count = 1;
|
||||
}
|
||||
return(count);
|
||||
|
||||
/* Linux */
|
||||
#else
|
||||
|
||||
return(sysconf(_SC_NPROCESSORS_ONLN));
|
||||
|
||||
#endif
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* int32_t getNext() {{{1 */
|
||||
int32_t getNext()
|
||||
{
|
||||
int32_t file, temp;
|
||||
|
||||
pthread_mutex_lock(&filelock);
|
||||
|
||||
file = nextFile++;
|
||||
|
||||
/* Progress tracker */
|
||||
if (file < numFiles)
|
||||
{
|
||||
temp = numFiles - (file + 1);
|
||||
printf("%d files remaining\n", temp);
|
||||
fflush(stdout);
|
||||
}
|
||||
else
|
||||
{
|
||||
file = -1;
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&filelock);
|
||||
|
||||
return(file);
|
||||
}
|
||||
/* 1}}} */
|
||||
|
||||
/* void errorCheck(int, char**) {{{1 */
|
||||
void errorCheck(int argc, char** argv)
|
||||
{
|
||||
int i, j;
|
||||
FILE* file;
|
||||
|
||||
/* Check for arguments */
|
||||
if(argc < 2)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [Input ROM] <Output ROM>\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Check that input ROM exists & has permissions */
|
||||
inName = argv[1];
|
||||
file = fopen(inName, "rb");
|
||||
if(file == NULL)
|
||||
{
|
||||
perror(inName);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Check that dmaTable.dat exists & has permissions */
|
||||
file = fopen("dmaTable.dat", "r");
|
||||
if(file == NULL)
|
||||
{
|
||||
perror("dmaTable.dat");
|
||||
fprintf(stderr, "Please make a dmaTable.dat file first\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Check that output ROM is writeable */
|
||||
/* Create output filename if needed */
|
||||
if(argc < 3)
|
||||
{
|
||||
i = strlen(inName) + 6;
|
||||
outName = malloc(i);
|
||||
strcpy(outName, inName);
|
||||
for(; i >= 0; i--)
|
||||
{
|
||||
if(outName[i] == '.')
|
||||
{
|
||||
outName[i] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
strcat(outName, "-comp.z64");
|
||||
file = fopen(outName, "wb");
|
||||
if(file == NULL)
|
||||
{
|
||||
perror(outName);
|
||||
free(outName);
|
||||
exit(1);
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
outName = argv[2];
|
||||
file = fopen(outName, "wb");
|
||||
if(file == NULL)
|
||||
{
|
||||
perror(outName);
|
||||
exit(1);
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
}
|
||||
/* 1}}} */
|
||||
@@ -0,0 +1,175 @@
|
||||
/* snesrc - SNES Recompiler
|
||||
*
|
||||
* Copyright notice for this file:
|
||||
* Copyright (C) 2005 Parasyte
|
||||
*
|
||||
* Based on uCON64's N64 checksum algorithm by Andreas Sterbenz
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ROL(i, b) (((i) << (b)) | ((i) >> (32 - (b))))
|
||||
#define BYTES2LONG(b) ( (b)[0] << 24 | \
|
||||
(b)[1] << 16 | \
|
||||
(b)[2] << 8 | \
|
||||
(b)[3] )
|
||||
|
||||
#define N64_HEADER_SIZE 0x40
|
||||
#define N64_BC_SIZE (0x1000 - N64_HEADER_SIZE)
|
||||
|
||||
#define N64_CRC1 0x10
|
||||
#define N64_CRC2 0x14
|
||||
|
||||
#define CHECKSUM_START 0x00001000
|
||||
#define CHECKSUM_LENGTH 0x00100000
|
||||
#define CHECKSUM_CIC6102 0xF8CA4DDC
|
||||
#define CHECKSUM_CIC6103 0xA3886759
|
||||
#define CHECKSUM_CIC6105 0xDF26F436
|
||||
#define CHECKSUM_CIC6106 0x1FEA617A
|
||||
|
||||
|
||||
unsigned int crc_table[256];
|
||||
|
||||
void gen_table()
|
||||
{
|
||||
uint32_t crc, poly;
|
||||
int32_t i, j;
|
||||
|
||||
poly = 0xEDB88320;
|
||||
for (i = 0; i < 256; i++) {
|
||||
crc = i;
|
||||
for (j = 8; j > 0; j--) {
|
||||
if (crc & 1) crc = (crc >> 1) ^ poly;
|
||||
else crc >>= 1;
|
||||
}
|
||||
crc_table[i] = crc;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int crc32(unsigned char *data, int len)
|
||||
{
|
||||
uint32_t crc, i;
|
||||
|
||||
crc = ~0;
|
||||
for (i = 0; i < len; i++)
|
||||
crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF];
|
||||
|
||||
return ~crc;
|
||||
}
|
||||
|
||||
|
||||
int N64GetCIC(unsigned char *data)
|
||||
{
|
||||
switch (crc32(&data[N64_HEADER_SIZE], N64_BC_SIZE)) {
|
||||
case 0x6170A4A1: return 6101;
|
||||
case 0x90BB6CB5: return 6102;
|
||||
case 0x0B050EE0: return 6103;
|
||||
case 0x98BC2C86: return 6105;
|
||||
case 0xACC8580A: return 6106;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int N64CalcCRC(unsigned int *crc, unsigned char *data)
|
||||
{
|
||||
int32_t bootcode, i;
|
||||
uint32_t seed, r, d;
|
||||
uint32_t t1, t2, t3;
|
||||
uint32_t t4, t5, t6;
|
||||
|
||||
switch ((bootcode = N64GetCIC(data))) {
|
||||
case 6101:
|
||||
case 6102:
|
||||
seed = CHECKSUM_CIC6102;
|
||||
break;
|
||||
case 6103:
|
||||
seed = CHECKSUM_CIC6103;
|
||||
break;
|
||||
case 6105:
|
||||
seed = CHECKSUM_CIC6105;
|
||||
break;
|
||||
case 6106:
|
||||
seed = CHECKSUM_CIC6106;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
t1 = t2 = t3 = t4 = t5 = t6 = seed;
|
||||
|
||||
i = CHECKSUM_START;
|
||||
while (i < (CHECKSUM_START + CHECKSUM_LENGTH)) {
|
||||
d = BYTES2LONG(&data[i]);
|
||||
if ((t6 + d) < t6) t4++;
|
||||
t6 += d;
|
||||
t3 ^= d;
|
||||
r = ROL(d, (d & 0x1F));
|
||||
t5 += r;
|
||||
if (t2 > d) t2 ^= r;
|
||||
else t2 ^= t6 ^ d;
|
||||
|
||||
if (bootcode == 6105) t1 += BYTES2LONG(&data[N64_HEADER_SIZE + 0x0710 + (i & 0xFF)]) ^ d;
|
||||
else t1 += t5 ^ d;
|
||||
|
||||
i += 4;
|
||||
}
|
||||
if (bootcode == 6103) {
|
||||
crc[0] = (t6 ^ t4) + t3;
|
||||
crc[1] = (t5 ^ t2) + t1;
|
||||
}
|
||||
else if (bootcode == 6106) {
|
||||
crc[0] = (t6 * t4) + t3;
|
||||
crc[1] = (t5 * t2) + t1;
|
||||
}
|
||||
else {
|
||||
crc[0] = t6 ^ t4 ^ t3;
|
||||
crc[1] = t5 ^ t2 ^ t1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void fix_crc (uint8_t* buffer)
|
||||
{
|
||||
uint8_t CRC1[4];
|
||||
uint8_t CRC2[4];
|
||||
uint32_t crc[2];
|
||||
uint32_t i;
|
||||
|
||||
gen_table();
|
||||
|
||||
/* If the CRC calc was successful, do stuff */
|
||||
if(N64CalcCRC(crc, buffer))
|
||||
{
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
CRC1[i] = (crc[0] >> (24-8*i))&0xFF;
|
||||
CRC2[i] = (crc[1] >> (24-8*i))&0xFF;
|
||||
}
|
||||
|
||||
/* If the CRC1 changed, update it */
|
||||
if(crc[0] != BYTES2LONG(&buffer[N64_CRC1]))
|
||||
memcpy(buffer + N64_CRC1, CRC1, 4);
|
||||
|
||||
/* If the CRC2 changed, update it */
|
||||
if (crc[1] != BYTES2LONG(&buffer[N64_CRC2]))
|
||||
memcpy(buffer + N64_CRC2, CRC2, 4);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
uint32_t RabinKarp(uint8_t*, int, int, uint32_t*);
|
||||
uint32_t findBest(uint8_t*, int, int, uint32_t*, uint32_t*, uint32_t*, uint8_t*);
|
||||
int yaz0_internal(uint8_t*, int, uint8_t*);
|
||||
void yaz0_encode(uint8_t*, int, uint8_t*, int*);
|
||||
|
||||
uint32_t RabinKarp(uint8_t* src, int srcSize, int srcPos, uint32_t* matchPos)
|
||||
{
|
||||
int startPos, smp, i;
|
||||
uint32_t hash, curHash, curSize;
|
||||
uint32_t bestSize, bestPos;
|
||||
|
||||
smp = srcSize - srcPos;
|
||||
startPos = srcPos - 0x1000;
|
||||
bestPos = bestSize = 0;
|
||||
|
||||
/* If available size is too small, return */
|
||||
if(smp < 3)
|
||||
return(0);
|
||||
|
||||
/* If available size is too big, reduce it */
|
||||
if(smp > 0x111)
|
||||
smp = 0x111;
|
||||
|
||||
/* If start position is negative, make it 0 */
|
||||
if(startPos < 0)
|
||||
startPos = 0;
|
||||
|
||||
/* Generate "hash" by converting to an int */
|
||||
hash = bSwap32(*(int*)(src + srcPos));
|
||||
hash = hash >> 8;
|
||||
curHash = bSwap32(*(int*)(src + startPos));
|
||||
curHash = curHash >> 8;
|
||||
|
||||
/* Search through data */
|
||||
for(i = startPos; i < srcPos; i++)
|
||||
{
|
||||
/* If 3 bytes match, check for more */
|
||||
if(curHash == hash)
|
||||
{
|
||||
for(curSize = 3; curSize < smp; curSize++)
|
||||
if(src[i + curSize] != src[srcPos + curSize])
|
||||
break;
|
||||
|
||||
/* Uodate best if needed */
|
||||
if(curSize > bestSize)
|
||||
{
|
||||
bestSize = curSize;
|
||||
bestPos = i;
|
||||
if(bestSize == 0x111)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Scoot over 1 byte */
|
||||
curHash = (curHash << 8 | src[i + 3]) & 0x00FFFFFF;
|
||||
}
|
||||
|
||||
/* Set match position, return the size of the match */
|
||||
*matchPos = bestPos;
|
||||
return(bestSize);
|
||||
}
|
||||
|
||||
uint32_t findBest(uint8_t* src, int srcSize, int srcPos, uint32_t* matchPos, uint32_t* pMatch, uint32_t* pSize, uint8_t* pFlag)
|
||||
{
|
||||
int rv;
|
||||
|
||||
/* Check to see if this location was found by a look-ahead */
|
||||
if(*pFlag == 1)
|
||||
{
|
||||
*pFlag = 0;
|
||||
return(*pSize);
|
||||
}
|
||||
|
||||
/* Find best match */
|
||||
*pFlag = 0;
|
||||
rv = RabinKarp(src, srcSize, srcPos, matchPos);
|
||||
|
||||
/* Look-ahead */
|
||||
if(rv >= 3)
|
||||
{
|
||||
/* Find best match if current one were to be a 1 byte copy */
|
||||
*pSize = RabinKarp(src, srcSize, srcPos+1, pMatch);
|
||||
if(*pSize >= rv+2)
|
||||
{
|
||||
rv = *pFlag = 1;
|
||||
*matchPos = *pMatch;
|
||||
}
|
||||
}
|
||||
|
||||
return(rv);
|
||||
}
|
||||
|
||||
int yaz0_internal(uint8_t* src, int srcSize, uint8_t* dst)
|
||||
{
|
||||
int dstPos, srcPos, codeBytePos;
|
||||
uint32_t numBytes, matchPos, dist, pMatch, pSize;
|
||||
uint8_t codeByte, bitmask, pFlag;
|
||||
|
||||
srcPos = codeBytePos = 0;
|
||||
dstPos = codeBytePos + 1;
|
||||
bitmask = 0x80;
|
||||
codeByte = pFlag = 0;
|
||||
|
||||
/* Go through all of src */
|
||||
while(srcPos < srcSize)
|
||||
{
|
||||
/* Try to find matching bytes for compressing */
|
||||
numBytes = findBest(src, srcSize, srcPos, &matchPos, &pMatch, &pSize, &pFlag);
|
||||
|
||||
/* Single byte copy */
|
||||
if(numBytes < 3)
|
||||
{
|
||||
dst[dstPos++] = src[srcPos++];
|
||||
codeByte |= bitmask;
|
||||
}
|
||||
|
||||
/* Three byte encoding */
|
||||
else if (numBytes > 0x11)
|
||||
{
|
||||
dist = srcPos - matchPos - 1;
|
||||
|
||||
/* Copy over 0R RR */
|
||||
dst[dstPos++] = dist >> 8;
|
||||
dst[dstPos++] = dist & 0xFF;
|
||||
|
||||
/* Reduce N if needed, copy over NN */
|
||||
if(numBytes > 0x111)
|
||||
numBytes = 0x111;
|
||||
dst[dstPos++] = (numBytes - 0x12) & 0xFF;
|
||||
|
||||
srcPos += numBytes;
|
||||
}
|
||||
|
||||
/* Two byte encoding */
|
||||
else
|
||||
{
|
||||
dist = srcPos - matchPos - 1;
|
||||
|
||||
/* Copy over NR RR */
|
||||
dst[dstPos++] = ((numBytes - 2) << 4) | (dist >> 8);
|
||||
dst[dstPos++] = dist & 0xFF;
|
||||
|
||||
srcPos += numBytes;
|
||||
}
|
||||
|
||||
/* Move bitmask to next byte */
|
||||
bitmask = bitmask >> 1;
|
||||
|
||||
/* If all 8 bytes were used, write and move to the next one */
|
||||
if(bitmask == 0)
|
||||
{
|
||||
dst[codeBytePos] = codeByte;
|
||||
codeBytePos = dstPos;
|
||||
if(srcPos < srcSize)
|
||||
dstPos++;
|
||||
codeByte = 0;
|
||||
bitmask = 0x80;
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy over last byte if it hasn't already */
|
||||
if(bitmask != 0)
|
||||
dst[codeBytePos] = codeByte;
|
||||
|
||||
/* Return size of dst */
|
||||
return(dstPos);
|
||||
}
|
||||
|
||||
void yaz0_encode(uint8_t* src, int srcSize, uint8_t* dst, int* dstSize)
|
||||
{
|
||||
int temp;
|
||||
|
||||
/* Write Yaz0 header */
|
||||
temp = bSwap32(srcSize);
|
||||
memcpy(dst, "Yaz0", 4);
|
||||
memcpy(dst + 4, &temp, 4);
|
||||
|
||||
/* Encode, adjust dstSize */
|
||||
temp = yaz0_internal(src, srcSize, dst + 16);
|
||||
*dstSize = (temp + 31) & -16;
|
||||
return;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,30 @@
|
||||
#ifndef BSWAP_H
|
||||
#define BSWAP_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||
#define bSwap32(x) _bSwap32(x)
|
||||
#define bSwap16(x) _bSwap16(x)
|
||||
|
||||
#elif BYTE_ORDER == BIG_ENDIAN
|
||||
#define bSwap32(x) (x)
|
||||
#define bSwap16(x) (x)
|
||||
|
||||
#endif
|
||||
|
||||
uint32_t _bSwap32(uint32_t a)
|
||||
{
|
||||
return( (a & 0x000000FF) << 24 |
|
||||
(a & 0x0000FF00) << 8 |
|
||||
(a & 0x00FF0000) >> 8 |
|
||||
(a & 0xFF000000) >> 24 );
|
||||
}
|
||||
|
||||
uint16_t _bSwap16(uint16_t a)
|
||||
{
|
||||
return( (a & 0x00FF) << 8 |
|
||||
(a & 0xFF00) >> 8 );
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,175 @@
|
||||
/* snesrc - SNES Recompiler
|
||||
*
|
||||
* Copyright notice for this file:
|
||||
* Copyright (C) 2005 Parasyte
|
||||
*
|
||||
* Based on uCON64's N64 checksum algorithm by Andreas Sterbenz
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ROL(i, b) (((i) << (b)) | ((i) >> (32 - (b))))
|
||||
#define BYTES2LONG(b) ( (b)[0] << 24 | \
|
||||
(b)[1] << 16 | \
|
||||
(b)[2] << 8 | \
|
||||
(b)[3] )
|
||||
|
||||
#define N64_HEADER_SIZE 0x40
|
||||
#define N64_BC_SIZE (0x1000 - N64_HEADER_SIZE)
|
||||
|
||||
#define N64_CRC1 0x10
|
||||
#define N64_CRC2 0x14
|
||||
|
||||
#define CHECKSUM_START 0x00001000
|
||||
#define CHECKSUM_LENGTH 0x00100000
|
||||
#define CHECKSUM_CIC6102 0xF8CA4DDC
|
||||
#define CHECKSUM_CIC6103 0xA3886759
|
||||
#define CHECKSUM_CIC6105 0xDF26F436
|
||||
#define CHECKSUM_CIC6106 0x1FEA617A
|
||||
|
||||
|
||||
unsigned int crc_table[256];
|
||||
|
||||
void gen_table()
|
||||
{
|
||||
uint32_t crc, poly;
|
||||
int32_t i, j;
|
||||
|
||||
poly = 0xEDB88320;
|
||||
for (i = 0; i < 256; i++) {
|
||||
crc = i;
|
||||
for (j = 8; j > 0; j--) {
|
||||
if (crc & 1) crc = (crc >> 1) ^ poly;
|
||||
else crc >>= 1;
|
||||
}
|
||||
crc_table[i] = crc;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int crc32(unsigned char *data, int len)
|
||||
{
|
||||
uint32_t crc, i;
|
||||
|
||||
crc = ~0;
|
||||
for (i = 0; i < len; i++)
|
||||
crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF];
|
||||
|
||||
return ~crc;
|
||||
}
|
||||
|
||||
|
||||
int N64GetCIC(unsigned char *data)
|
||||
{
|
||||
switch (crc32(&data[N64_HEADER_SIZE], N64_BC_SIZE)) {
|
||||
case 0x6170A4A1: return 6101;
|
||||
case 0x90BB6CB5: return 6102;
|
||||
case 0x0B050EE0: return 6103;
|
||||
case 0x98BC2C86: return 6105;
|
||||
case 0xACC8580A: return 6106;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int N64CalcCRC(unsigned int *crc, unsigned char *data)
|
||||
{
|
||||
int32_t bootcode, i;
|
||||
uint32_t seed, r, d;
|
||||
uint32_t t1, t2, t3;
|
||||
uint32_t t4, t5, t6;
|
||||
|
||||
switch ((bootcode = N64GetCIC(data))) {
|
||||
case 6101:
|
||||
case 6102:
|
||||
seed = CHECKSUM_CIC6102;
|
||||
break;
|
||||
case 6103:
|
||||
seed = CHECKSUM_CIC6103;
|
||||
break;
|
||||
case 6105:
|
||||
seed = CHECKSUM_CIC6105;
|
||||
break;
|
||||
case 6106:
|
||||
seed = CHECKSUM_CIC6106;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
t1 = t2 = t3 = t4 = t5 = t6 = seed;
|
||||
|
||||
i = CHECKSUM_START;
|
||||
while (i < (CHECKSUM_START + CHECKSUM_LENGTH)) {
|
||||
d = BYTES2LONG(&data[i]);
|
||||
if ((t6 + d) < t6) t4++;
|
||||
t6 += d;
|
||||
t3 ^= d;
|
||||
r = ROL(d, (d & 0x1F));
|
||||
t5 += r;
|
||||
if (t2 > d) t2 ^= r;
|
||||
else t2 ^= t6 ^ d;
|
||||
|
||||
if (bootcode == 6105) t1 += BYTES2LONG(&data[N64_HEADER_SIZE + 0x0710 + (i & 0xFF)]) ^ d;
|
||||
else t1 += t5 ^ d;
|
||||
|
||||
i += 4;
|
||||
}
|
||||
if (bootcode == 6103) {
|
||||
crc[0] = (t6 ^ t4) + t3;
|
||||
crc[1] = (t5 ^ t2) + t1;
|
||||
}
|
||||
else if (bootcode == 6106) {
|
||||
crc[0] = (t6 * t4) + t3;
|
||||
crc[1] = (t5 * t2) + t1;
|
||||
}
|
||||
else {
|
||||
crc[0] = t6 ^ t4 ^ t3;
|
||||
crc[1] = t5 ^ t2 ^ t1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void fix_crc (uint8_t* buffer)
|
||||
{
|
||||
uint8_t CRC1[4];
|
||||
uint8_t CRC2[4];
|
||||
uint32_t crc[2];
|
||||
uint32_t i;
|
||||
|
||||
gen_table();
|
||||
|
||||
/* If the CRC calc was successful, do stuff */
|
||||
if(N64CalcCRC(crc, buffer))
|
||||
{
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
CRC1[i] = (crc[0] >> (24-8*i))&0xFF;
|
||||
CRC2[i] = (crc[1] >> (24-8*i))&0xFF;
|
||||
}
|
||||
|
||||
/* If the CRC1 changed, update it */
|
||||
if(crc[0] != BYTES2LONG(&buffer[N64_CRC1]))
|
||||
memcpy(buffer + N64_CRC1, CRC1, 4);
|
||||
|
||||
/* If the CRC2 changed, update it */
|
||||
if (crc[1] != BYTES2LONG(&buffer[N64_CRC2]))
|
||||
memcpy(buffer + N64_CRC2, CRC2, 4);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,259 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "crc.c"
|
||||
#include "bSwap.h"
|
||||
|
||||
#define UINTSIZE 0x01000000
|
||||
#define COMPSIZE 0x02000000
|
||||
#define DCMPSIZE 0x04000000
|
||||
|
||||
/* Structs */
|
||||
typedef struct
|
||||
{
|
||||
uint32_t startV; /* Start Virtual Address */
|
||||
uint32_t endV; /* End Virtual Address */
|
||||
uint32_t startP; /* Start Physical Address */
|
||||
uint32_t endP; /* End Phycical Address */
|
||||
}
|
||||
table_t;
|
||||
|
||||
/* Functions */
|
||||
void decompress(uint8_t*, uint8_t*, int32_t);
|
||||
table_t getTabEnt(uint32_t);
|
||||
void setTabEnt(uint32_t, table_t);
|
||||
void loadROM(char*);
|
||||
int32_t findTable();
|
||||
|
||||
/* Globals */
|
||||
uint8_t* inROM;
|
||||
uint8_t* outROM;
|
||||
uint32_t* inTable;
|
||||
uint32_t* outTable;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
FILE* outFile;
|
||||
int32_t tabStart, tabSize, tabCount;
|
||||
int32_t size, i;
|
||||
table_t tab, tempTab;
|
||||
char* name;
|
||||
|
||||
/* Check arguments */
|
||||
if(argc < 2 || argc > 3)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [Input ROM] <Output ROM>\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* If no output file was specified, make one */
|
||||
/* Add "-decomp.z64" to the end of the input file */
|
||||
if(argc != 3)
|
||||
{
|
||||
size = strlen(argv[1]);
|
||||
name = malloc(size + 7);
|
||||
strcpy(name, argv[1]);
|
||||
for(i = size; i >= 0; i--)
|
||||
{
|
||||
if(name[i] == '.')
|
||||
{
|
||||
name[i] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
strcat(name, "-decomp.z64");
|
||||
}
|
||||
|
||||
else
|
||||
name = argv[2];
|
||||
|
||||
inROM = malloc(DCMPSIZE);
|
||||
outROM = malloc(DCMPSIZE);
|
||||
|
||||
/* Load the ROM into inROM and outROM */
|
||||
loadROM(argv[1]);
|
||||
|
||||
/* Find table offsets */
|
||||
tabStart = findTable();
|
||||
inTable = (uint32_t*)(inROM + tabStart);
|
||||
outTable = (uint32_t*)(outROM + tabStart);
|
||||
tab = getTabEnt(2);
|
||||
tabSize = tab.endV - tab.startV;
|
||||
tabCount = tabSize / 16;
|
||||
|
||||
/* Set everything past the table in outROM to 0 */
|
||||
memset((uint8_t*)(outROM) + tab.endV, 0, DCMPSIZE - tab.endV);
|
||||
|
||||
for(i = 3; i < tabCount; i++)
|
||||
{
|
||||
tempTab = getTabEnt(i);
|
||||
size = tempTab.endV - tempTab.startV;
|
||||
|
||||
/* dmaTable will have 0xFFFFFFFF if file doesn't exist */
|
||||
if(tempTab.startP >= DCMPSIZE || tempTab.endP == 0xFFFFFFFF)
|
||||
continue;
|
||||
|
||||
/* Copy if not compressed, decompress otherwise */
|
||||
if(tempTab.endP == 0x00000000)
|
||||
memcpy((void*)outROM + tempTab.startV, (void*)inROM + tempTab.startP, size);
|
||||
else
|
||||
decompress((void*)inROM + tempTab.startP, (void*)outROM + tempTab.startV, size);
|
||||
|
||||
/* Clean up outROM's table */
|
||||
tempTab.startP = tempTab.startV;
|
||||
tempTab.endP = 0x00000000;
|
||||
setTabEnt(i, tempTab);
|
||||
}
|
||||
|
||||
/* Fix the CRC */
|
||||
fix_crc(outROM);
|
||||
|
||||
/* Write the new ROM */
|
||||
outFile = fopen(name, "wb");
|
||||
fwrite(outROM, sizeof(uint32_t), UINTSIZE, outFile);
|
||||
fclose(outFile);
|
||||
free(outROM);
|
||||
free(inROM);
|
||||
|
||||
if(argc != 3)
|
||||
free(name);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
int32_t findTable()
|
||||
{
|
||||
int32_t i, temp;
|
||||
uint32_t* tempROM;
|
||||
|
||||
tempROM = (uint32_t*)inROM;
|
||||
|
||||
/* Start at the end of the makerom (0x10600000) */
|
||||
/* Look for dma entry for the makeom */
|
||||
/* Should work for all Zelda64 titles */
|
||||
for(i = 1048; i+4 < UINTSIZE; i += 4)
|
||||
{
|
||||
if(tempROM[i] == 0x00000000)
|
||||
if(tempROM[i+1] == 0x60100000)
|
||||
return(i * 4);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Error: Couldn't find table\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void loadROM(char* name)
|
||||
{
|
||||
uint32_t size, i;
|
||||
uint16_t* tempROM;
|
||||
FILE* romFile;
|
||||
|
||||
/* Open file, make sure it exists */
|
||||
romFile = fopen(name, "rb");
|
||||
if(romFile == NULL)
|
||||
{
|
||||
perror(name);
|
||||
exit(1);
|
||||
}
|
||||
/* Find size of file */
|
||||
fseek(romFile, 0, SEEK_END);
|
||||
size = ftell(romFile);
|
||||
fseek(romFile, 0, SEEK_SET);
|
||||
|
||||
/* If it's not the right size, exit */
|
||||
if(size != COMPSIZE)
|
||||
{
|
||||
fprintf(stderr, "Error, %s is not the correct size", name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Read to inROM, close romFile, and copy to outROM */
|
||||
fread(inROM, sizeof(char), size, romFile);
|
||||
tempROM = (uint16_t*)inROM;
|
||||
fclose(romFile);
|
||||
|
||||
/* bSwap16 if needed */
|
||||
if (inROM[0] == 0x37)
|
||||
for (i = 0; i < UINTSIZE; i++)
|
||||
tempROM[i] = bSwap16(tempROM[i]);
|
||||
|
||||
memcpy(outROM, inROM, size);
|
||||
}
|
||||
|
||||
table_t getTabEnt(uint32_t i)
|
||||
{
|
||||
table_t tab;
|
||||
|
||||
/* First 32 bytes are VROM start address, next 32 are VROM end address */
|
||||
/* Next 32 bytes are Physical start address, last 32 are Physical end address */
|
||||
tab.startV = bSwap32(inTable[i*4] );
|
||||
tab.endV = bSwap32(inTable[(i*4)+1]);
|
||||
tab.startP = bSwap32(inTable[(i*4)+2]);
|
||||
tab.endP = bSwap32(inTable[(i*4)+3]);
|
||||
|
||||
return(tab);
|
||||
}
|
||||
|
||||
void setTabEnt(uint32_t i, table_t tab)
|
||||
{
|
||||
/* First 32 bytes are VROM start address, next 32 are VROM end address */
|
||||
/* Next 32 bytes are Physical start address, last 32 are Physical end address */
|
||||
outTable[i*4] = bSwap32(tab.startV);
|
||||
outTable[(i*4)+1] = bSwap32(tab.endV);
|
||||
outTable[(i*4)+2] = bSwap32(tab.startP);
|
||||
outTable[(i*4)+3] = bSwap32(tab.endP);
|
||||
}
|
||||
|
||||
void decompress(uint8_t* source, uint8_t* decomp, int32_t decompSize)
|
||||
{
|
||||
uint32_t srcPlace = 0, dstPlace = 0;
|
||||
uint32_t i, dist, copyPlace, numBytes;
|
||||
uint8_t codeByte, byte1, byte2;
|
||||
uint8_t bitCount = 0;
|
||||
|
||||
source += 0x10;
|
||||
while(dstPlace < decompSize)
|
||||
{
|
||||
/* If there are no more bits to test, get a new byte */
|
||||
if(!bitCount)
|
||||
{
|
||||
codeByte = source[srcPlace++];
|
||||
bitCount = 8;
|
||||
}
|
||||
|
||||
/* If bit 7 is a 1, just copy 1 byte from source to destination */
|
||||
/* Else do some decoding */
|
||||
if(codeByte & 0x80)
|
||||
{
|
||||
decomp[dstPlace++] = source[srcPlace++];
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get 2 bytes from source */
|
||||
byte1 = source[srcPlace++];
|
||||
byte2 = source[srcPlace++];
|
||||
|
||||
/* Calculate distance to move in destination */
|
||||
/* And the number of bytes to copy */
|
||||
dist = ((byte1 & 0xF) << 8) | byte2;
|
||||
copyPlace = dstPlace - (dist + 1);
|
||||
numBytes = byte1 >> 4;
|
||||
|
||||
/* Do more calculations on the number of bytes to copy */
|
||||
if(!numBytes)
|
||||
numBytes = source[srcPlace++] + 0x12;
|
||||
else
|
||||
numBytes += 2;
|
||||
|
||||
/* Copy data from a previous point in destination */
|
||||
/* to current point in destination */
|
||||
for(i = 0; i < numBytes; i++)
|
||||
decomp[dstPlace++] = decomp[copyPlace++];
|
||||
}
|
||||
|
||||
/* Set up for the next read cycle */
|
||||
codeByte = codeByte << 1;
|
||||
bitCount--;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Bottom of the Well",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"locations": {
|
||||
"Bottom of the Well MQ Compass Chest": "
|
||||
Kokiri_Sword or (Sticks and logic_child_deadhand)",
|
||||
"Bottom of the Well MQ Map Chest": "
|
||||
can_play(Zeldas_Lullaby) or has_explosives",
|
||||
"Bottom of the Well MQ Lens of Truth Chest": "
|
||||
has_explosives and
|
||||
(Small_Key_Bottom_of_the_Well, 2)",
|
||||
"Bottom of the Well MQ Dead Hand Freestanding Key": "
|
||||
has_explosives or (logic_botw_mq_dead_hand_key and Boomerang)",
|
||||
"Bottom of the Well MQ East Inner Room Freestanding Key": "
|
||||
can_play(Zeldas_Lullaby) or has_explosives",
|
||||
"Bottom of the Well MQ GS Basement": "can_child_attack",
|
||||
"Bottom of the Well MQ GS West Inner Room": "
|
||||
can_child_attack and
|
||||
(can_play(Zeldas_Lullaby) or has_explosives)",
|
||||
"Bottom of the Well MQ GS Coffin Room": "
|
||||
can_child_attack and
|
||||
(Small_Key_Bottom_of_the_Well, 2)"
|
||||
},
|
||||
"exits": {
|
||||
"Kakariko Village": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,50 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Bottom of the Well",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"exits": {
|
||||
"Bottom of the Well Main Area" : "is_child and (can_child_attack or Nuts)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Bottom of the Well Main Area",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"locations": {
|
||||
"Bottom of the Well Front Left Fake Wall Chest": "True",
|
||||
"Bottom of the Well Front Center Bombable Chest": "has_explosives",
|
||||
"Bottom of the Well Right Bottom Fake Wall Chest": "True",
|
||||
"Bottom of the Well Compass Chest": "True",
|
||||
"Bottom of the Well Center Skulltula Chest": "True",
|
||||
"Bottom of the Well Back Left Bombable Chest": "has_explosives",
|
||||
"Bottom of the Well Freestanding Key": "Sticks or can_use(Dins_Fire) or Boomerang",
|
||||
"Bottom of the Well Lens of Truth Chest": "
|
||||
(can_play(Zeldas_Lullaby) or (Small_Key_Bottom_of_the_Well,3)) and
|
||||
(Kokiri_Sword or Sticks)",
|
||||
"Bottom of the Well Invisible Chest": "(can_play(Zeldas_Lullaby) or (Small_Key_Bottom_of_the_Well,3))",
|
||||
"Bottom of the Well Underwater Front Chest": "can_play(Zeldas_Lullaby)",
|
||||
"Bottom of the Well Underwater Left Chest": "can_play(Zeldas_Lullaby)",
|
||||
"Bottom of the Well Map Chest": "
|
||||
has_explosives or
|
||||
(((Small_Key_Bottom_of_the_Well, 3) or
|
||||
can_use(Dins_Fire) or Sticks) and
|
||||
Progressive_Strength_Upgrade)",
|
||||
"Bottom of the Well Fire Keese Chest": "
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Bottom of the Well Like Like Chest": "
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Bottom of the Well GS West Inner Room": "
|
||||
(Boomerang or can_isg) and
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Bottom of the Well GS East Inner Room": "
|
||||
(Boomerang or can_isg) and
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Bottom of the Well GS Like Like Cage": "
|
||||
(Boomerang or can_isg) and
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Stick Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Bottom of the Well" : "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,49 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Deku Tree Lobby",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ Map Chest": "True",
|
||||
"Deku Tree MQ Slingshot Chest": "can_child_attack",
|
||||
"Deku Tree MQ Slingshot Room Back Chest": "Sticks or can_use(Dins_Fire)",
|
||||
"Deku Tree MQ Basement Chest": "Sticks or can_use(Dins_Fire)",
|
||||
"Deku Tree MQ GS Lobby": "can_child_attack"
|
||||
},
|
||||
"exits": {
|
||||
"KF Outside Deku Tree": "True",
|
||||
"Deku Tree Compass Room": "Slingshot and (Sticks or can_use(Dins_Fire))",
|
||||
"Deku Tree Boss Room": "Slingshot and (Sticks or can_use(Dins_Fire))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Compass Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ Compass Chest": "True",
|
||||
"Deku Tree MQ GS Compass Room": "
|
||||
Boomerang and ((Bombs and can_play(Song_of_Time)) or has_bombchus)"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Boss Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"events": {
|
||||
"Deku Tree Clear": "Buy_Deku_Shield and (Kokiri_Sword or Sticks)"
|
||||
},
|
||||
"locations": {
|
||||
"Deku Tree MQ Before Spinning Log Chest": "True",
|
||||
"Deku Tree MQ After Spinning Log Chest": "can_play(Song_of_Time)",
|
||||
"Deku Tree MQ GS Basement Graves Room": "Boomerang and can_play(Song_of_Time)",
|
||||
"Deku Tree MQ GS Basement Back Room": "Boomerang",
|
||||
"Deku Tree MQ Deku Scrub": "True",
|
||||
"Deku Tree Queen Gohma Heart": "Buy_Deku_Shield and (Kokiri_Sword or Sticks)",
|
||||
"Queen Gohma": "Buy_Deku_Shield and (Kokiri_Sword or Sticks)"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,57 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Deku Tree Lobby",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree Map Chest": "True",
|
||||
"Deku Tree Compass Chest": "True",
|
||||
"Deku Tree Compass Room Side Chest": "True",
|
||||
"Deku Tree Basement Chest": "is_adult or can_child_attack or Nuts",
|
||||
"Deku Tree GS Compass Room": "is_adult or can_child_attack",
|
||||
"Deku Tree GS Basement Vines": "is_adult or can_child_attack",
|
||||
"Deku Tree GS Basement Gate": "is_adult or can_child_attack",
|
||||
"Deku Tree GS Basement Back Room": "
|
||||
(here(has_fire_source_with_torch or can_use(Bow)) and
|
||||
here(can_use(Slingshot) or can_use(Bow)) and
|
||||
here(can_blast_or_smash) and
|
||||
here(can_use(Hookshot) or can_use(Boomerang) or can_hover)) or
|
||||
(is_child and (has_explosives or Blue_Fire) and
|
||||
(can_use(Boomerang) or can_hover) and has_fire_source_with_torch) or
|
||||
(is_adult and has_explosives and Progressive_Hookshot and Hover_Boots and can_live_dmg(0.5) and
|
||||
(Bow or has_fire_source))"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Slingshot Room": "here(has_shield)",
|
||||
"Deku Tree Boss Room": "here(has_fire_source_with_torch()) or can_shield
|
||||
or is_adult"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Slingshot Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree Slingshot Chest": "True",
|
||||
"Deku Tree Slingshot Room Side Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Boss Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"events": {
|
||||
"Deku Tree Clear": "(Nuts or can_use(Slingshot) or has_bombchus or can_use(Hookshot) or can_use(Bow) or can_use(Boomerang)) and
|
||||
((here(has_shield or can_use(Megaton_Hammer)) and (is_adult or Kokiri_Sword or Sticks)) or is_adult)"
|
||||
},
|
||||
"locations": {
|
||||
"Deku Tree Queen Gohma Heart": "(Nuts or can_use(Slingshot) or has_bombchus or can_use(Hookshot) or can_use(Bow) or can_use(Boomerang)) and
|
||||
((here(has_shield or can_use(Megaton_Hammer)) and (is_adult or Kokiri_Sword or Sticks)) or is_adult)",
|
||||
"Queen Gohma": "(Nuts or can_use(Slingshot) or has_bombchus or can_use(Hookshot) or can_use(Bow) or can_use(Boomerang)) and
|
||||
((here(has_shield or can_use(Megaton_Hammer)) and (is_adult or Kokiri_Sword or Sticks)) or is_adult)"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,65 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Dodongos Cavern Beginning",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"exits": {
|
||||
"Dodongos Cavern Entryway": "True",
|
||||
"Dodongos Cavern Lobby": "can_blast_or_smash or Progressive_Strength_Upgrade"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Lobby",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern MQ Map Chest": "True",
|
||||
"Dodongos Cavern MQ Compass Chest": "is_adult or can_child_attack or Nuts",
|
||||
"Dodongos Cavern MQ Larvae Room Chest": "can_use(Sticks) or has_fire_source",
|
||||
"Dodongos Cavern MQ Torch Puzzle Room Chest": "
|
||||
can_blast_or_smash or can_use(Sticks) or can_use(Dins_Fire) or
|
||||
(is_adult and (logic_dc_jump or Hover_Boots or Progressive_Hookshot))",
|
||||
"Dodongos Cavern MQ Bomb Bag Chest": "
|
||||
is_adult or
|
||||
(Slingshot and
|
||||
(has_explosives or
|
||||
((Sticks or can_use(Dins_Fire)) and can_take_damage)))",
|
||||
"Dodongos Cavern MQ GS Song of Time Block Room": "
|
||||
can_play(Song_of_Time) and (can_child_attack or is_adult)",
|
||||
"Dodongos Cavern MQ GS Larvae Room": "can_use(Sticks) or has_fire_source",
|
||||
"Dodongos Cavern MQ GS Lizalfos Room": "can_blast_or_smash",
|
||||
"Dodongos Cavern MQ GS Scrub Room": "
|
||||
(can_use(Boomerang) and (Slingshot or (can_become_adult and has_explosives)) and
|
||||
(has_explosives or (Progressive_Strength_Upgrade and
|
||||
(Megaton_Hammer or
|
||||
((Sticks or can_use(Dins_Fire) or
|
||||
(can_become_adult and (logic_dc_jump or Hover_Boots))) and
|
||||
can_take_damage))))) or
|
||||
(can_use(Hookshot) and (has_explosives or Progressive_Strength_Upgrade or
|
||||
Bow or can_use(Dins_Fire)))",
|
||||
"Dodongos Cavern MQ Deku Scrub Lobby Rear": "can_stun_deku",
|
||||
"Dodongos Cavern MQ Deku Scrub Lobby Front": "can_stun_deku",
|
||||
"Dodongos Cavern MQ Deku Scrub Staircase": "can_stun_deku",
|
||||
"Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos": "
|
||||
is_adult or has_explosives or
|
||||
((Sticks or can_use(Dins_Fire)) and can_take_damage)",
|
||||
"Dodongos Cavern Gossip Stone": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Boss Area": "has_explosives"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Boss Area",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern MQ Under Grave Chest": "True",
|
||||
"Dodongos Cavern Boss Room Chest": "True",
|
||||
"Dodongos Cavern King Dodongo Heart": "
|
||||
(Bombs or Progressive_Strength_Upgrade) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"King Dodongo": "
|
||||
(Bombs or Progressive_Strength_Upgrade) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"Dodongos Cavern MQ GS Back Area": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,91 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Dodongos Cavern Beginning",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"exits": {
|
||||
"Dodongos Cavern Lobby": "
|
||||
here(can_blast_or_smash or Blue_Fire) or Progressive_Strength_Upgrade"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Lobby",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Map Chest": "True",
|
||||
"Dodongos Cavern Compass Chest": "
|
||||
is_adult or Sticks or
|
||||
(can_use(Dins_Fire) and (Slingshot or has_explosives or Kokiri_Sword))
|
||||
or can_shield",
|
||||
"Dodongos Cavern GS Side Room Near Lower Lizalfos": "
|
||||
has_explosives or is_adult or can_child_attack or Blue_Fire",
|
||||
"Dodongos Cavern GS Scarecrow": "True",
|
||||
"Dodongos Cavern Deku Scrub Side Room Near Dodongos": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword or can_shield",
|
||||
"Dodongos Cavern Deku Scrub Lobby": "True",
|
||||
"Dodongos Cavern Gossip Stone": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Beginning": "True",
|
||||
"Dodongos Cavern Climb": "
|
||||
here(
|
||||
(is_adult or can_shield or
|
||||
( (Sticks or can_use(Dins_Fire)) and
|
||||
(Slingshot or Sticks or has_explosives or Kokiri_Sword)
|
||||
)
|
||||
)
|
||||
) and
|
||||
(has_explosives or Progressive_Strength_Upgrade or
|
||||
can_use(Dins_Fire) or can_use(Bow) )"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Climb",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Bomb Flower Platform Chest": "True",
|
||||
"Dodongos Cavern GS Vines Above Stairs": "True",
|
||||
"Dodongos Cavern Deku Scrub Near Bomb Bag Right": "can_blast_or_smash or (Blue_Fire and can_stun_deku)",
|
||||
"Dodongos Cavern Deku Scrub Near Bomb Bag Left": "can_blast_or_smash or (Blue_Fire and can_stun_deku)"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lobby": "True",
|
||||
"Dodongos Cavern Far Bridge": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Far Bridge",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Bomb Bag Chest": "True",
|
||||
"Dodongos Cavern End of Bridge Chest": "can_blast_or_smash or Blue_Fire",
|
||||
"Dodongos Cavern GS Alcove Above Stairs": "can_use(Hookshot) or can_use(Boomerang)
|
||||
or (can_live_dmg(0.5) and can_use(Hover_Boots)) or can_hover"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Boss Area": "has_explosives",
|
||||
"Dodongos Cavern Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Boss Area",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Boss Room Chest": "True",
|
||||
"Dodongos Cavern King Dodongo Heart": "
|
||||
(Bombs or Progressive_Strength_Upgrade or
|
||||
(has_bombchus and ((is_adult and can_shield) or (is_child and can_isg)))
|
||||
) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"King Dodongo": "
|
||||
(Bombs or Progressive_Strength_Upgrade or
|
||||
(has_bombchus and ((is_adult and can_shield) or (is_child and can_isg)))
|
||||
) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"Dodongos Cavern GS Back Room": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lobby": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,95 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Fire Temple Lower",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Map Room Side Chest": "True",
|
||||
"Fire Temple MQ Near Boss Chest": "
|
||||
((Hover_Boots or (logic_fire_mq_near_boss and Bow)) and has_fire_source) or
|
||||
(Progressive_Hookshot and (can_use(Fire_Arrows) or
|
||||
(can_use(Dins_Fire) and
|
||||
((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or can_use(Goron_Tunic) or
|
||||
Bow or (Progressive_Hookshot, 2)))))"
|
||||
},
|
||||
"exits": {
|
||||
"DMC Central": "True",
|
||||
"Fire Boss Room": "
|
||||
has_fire_source and can_use(Goron_Tunic) and Megaton_Hammer and Boss_Key_Fire_Temple and
|
||||
(logic_fire_boss_door_jump or Hover_Boots or at('Fire Temple Upper', True))",
|
||||
"Fire Lower Locked Door": "
|
||||
(Small_Key_Fire_Temple, 5) and
|
||||
(has_explosives or Megaton_Hammer or Progressive_Hookshot)",
|
||||
"Fire Big Lava Room": "can_use(Megaton_Hammer)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Lower Locked Door",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Megaton Hammer Chest": "True",
|
||||
"Fire Temple MQ Map Chest": "Megaton_Hammer"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Big Lava Room",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Boss Key Chest": "
|
||||
has_fire_source and (Bow or logic_fire_mq_bk_chest) and
|
||||
Progressive_Hookshot",
|
||||
"Fire Temple MQ Big Lava Room Blocked Door Chest": "
|
||||
has_fire_source and Progressive_Hookshot and has_explosives",
|
||||
"Fire Temple MQ GS Big Lava Room Open Door": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Lower Maze": "
|
||||
can_use(Goron_Tunic) and (Small_Key_Fire_Temple, 2) and has_fire_source"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Lower Maze",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Lizalfos Maze Lower Chest": "True",
|
||||
"Fire Temple MQ Lizalfos Maze Side Room Chest": "
|
||||
has_explosives and (logic_fire_mq_maze_side_room or can_use(Hookshot))"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Upper Maze": "
|
||||
(has_explosives or logic_rusted_switches) and can_use(Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Upper Maze",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Lizalfos Maze Upper Chest": "True",
|
||||
"Fire Temple MQ Compass Chest": "has_explosives",
|
||||
"Fire Temple MQ GS Skull On Fire": "
|
||||
can_play(Song_of_Time) or can_use(Longshot)"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Upper": "(Small_Key_Fire_Temple, 3) and Bow"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Upper",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Freestanding Key": "True",
|
||||
"Fire Temple MQ Chest On Fire": "(Small_Key_Fire_Temple, 4)",
|
||||
"Fire Temple MQ GS Fire Wall Maze Side Room": "
|
||||
can_play(Song_of_Time) or Hover_Boots",
|
||||
"Fire Temple MQ GS Fire Wall Maze Center": "has_explosives",
|
||||
"Fire Temple MQ GS Above Fire Wall Maze": "(Small_Key_Fire_Temple, 5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Boss Room",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Volvagia Heart": "True",
|
||||
"Volvagia": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,96 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Fire Temple Lower",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Near Boss Chest" : "True",
|
||||
"Fire Temple Flare Dancer Chest": "
|
||||
((Small_Key_Fire_Temple, 8) or not keysanity) and (can_use(Megaton_Hammer) or can_use(Hookshot) or has_explosives)",
|
||||
"Fire Temple Boss Key Chest": "(
|
||||
((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)) or (can_mega and can_use(Hookshot))",
|
||||
"Fire Temple Volvagia Heart": "
|
||||
(can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer) and
|
||||
(Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))",
|
||||
"Volvagia": "
|
||||
(can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer) and
|
||||
(Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))",
|
||||
"Fire Temple GS Boss Key Loop": "
|
||||
((Small_Key_Fire_Temple, 8) or not keysanity)"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Big Lava Room":"(Small_Key_Fire_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Big Lava Room",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Big Lava Room Lower Open Door Chest": "True",
|
||||
"Fire Temple Big Lava Room Blocked Door Chest": "has_explosives",
|
||||
"Fire Temple GS Song of Time Room": "is_adult"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Lower": "True",
|
||||
"Fire Temple Middle": "
|
||||
(can_use(Goron_Tunic) or Fairy) and (Small_Key_Fire_Temple, 4) and
|
||||
(has_explosives or can_use(Bow) or can_use(Hookshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Middle",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Boulder Maze Lower Chest": "True",
|
||||
"Fire Temple Boulder Maze Upper Chest": "(Small_Key_Fire_Temple, 6)
|
||||
or (has_explosives and can_live_dmg(0.5) and (Small_Key_Fire_Temple, 4))",
|
||||
"Fire Temple Boulder Maze Side Room Chest": "True",
|
||||
"Fire Temple Boulder Maze Shortcut Chest": "((Small_Key_Fire_Temple, 6) and has_explosives) or
|
||||
(((has_explosives and can_live_dmg(0.5)) or can_weirdshot) and (Small_Key_Fire_Temple, 4))",
|
||||
"Fire Temple Scarecrow Chest": "(
|
||||
(Small_Key_Fire_Temple, 6) or (has_explosives and can_live_dmg(0.5) and (Small_Key_Fire_Temple, 4)) )
|
||||
and (can_use(Scarecrow) or can_hover)",
|
||||
"Fire Temple Map Chest": "
|
||||
(Small_Key_Fire_Temple, 6) or ((Small_Key_Fire_Temple, 5) and can_use(Bow)) or
|
||||
(has_explosives and can_live_dmg(0.5) and (Small_Key_Fire_Temple, 4))",
|
||||
"Fire Temple GS Boulder Maze": "(Small_Key_Fire_Temple, 4) and has_explosives",
|
||||
"Fire Temple GS Scarecrow Climb": "(
|
||||
(Small_Key_Fire_Temple, 6) or (has_explosives and can_live_dmg(0.5) and (Small_Key_Fire_Temple, 4)) )
|
||||
and (can_use(Scarecrow) or can_hover)",
|
||||
"Fire Temple GS Scarecrow Top": "(
|
||||
(Small_Key_Fire_Temple, 6) or (has_explosives and can_live_dmg(0.5) and (Small_Key_Fire_Temple, 4)) )
|
||||
and (can_use(Scarecrow) or can_hover)"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Flame Maze": "(Small_Key_Fire_Temple, 7)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Flame Maze",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Compass Chest": "(Small_Key_Fire_Temple, 7)"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Upper": "(Small_Key_Fire_Temple, 7)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Upper",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Highest Goron Chest": "(
|
||||
can_use(Megaton_Hammer) or (has_explosives and can_live_dmg(1.0))
|
||||
) or
|
||||
(
|
||||
(can_mega and can_use(Hookshot)) or
|
||||
(can_play(Song_of_Time) and
|
||||
(can_use(Megaton_Hammer) or can_use(Hover_Boots) or (has_explosives and can_live_dmg(0.5)) )
|
||||
)
|
||||
|
||||
)
|
||||
",
|
||||
"Fire Temple Megaton Hammer Chest": "has_explosives or
|
||||
can_use(Megaton_Hammer)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,146 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Forest Temple Lobby",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
#If entrances are shuffled, Adult might lose access to the Kokiri forest
|
||||
#Babas for nuts. As this is sphere 0 for both ages, this case is covered
|
||||
#by putting the babas here.
|
||||
"Forest Temple Deku Baba Nuts": "True",
|
||||
"Forest Temple Deku Baba Sticks": "True",
|
||||
"Forest Temple MQ First Room Chest": "True",
|
||||
"Forest Temple MQ GS First Hallway": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Sacred Forest Meadow": "True",
|
||||
"Forest Temple Central Area": "(Small_Key_Forest_Temple, 1)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Central Area",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Wolfos Chest": "can_play(Song_of_Time)",
|
||||
"Forest Temple MQ GS Block Push Room": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "can_use(Bow)",
|
||||
"Forest Temple NE Outdoors": "can_use(Bow)",
|
||||
"Forest Temple After Block Puzzle": "
|
||||
(has_bombchus and logic_forest_mq_block_puzzle) or Progressive_Strength_Upgrade",
|
||||
"Forest Temple Outdoor Ledge": "
|
||||
(has_bombchus and logic_forest_mq_block_puzzle) or
|
||||
Progressive_Strength_Upgrade or can_use(Hover_Boots)",
|
||||
"Forest Temple Boss Region": "
|
||||
Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple After Block Puzzle",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Boss Key Chest": "(Small_Key_Forest_Temple, 3)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Bow Region": "(Small_Key_Forest_Temple, 4)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outdoor Ledge",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Redead Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NW Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ GS Level Island Courtyard": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "
|
||||
can_use(Iron_Boots) or can_use(Longshot) or
|
||||
(Progressive_Scale, 2) or (logic_forest_well_swim and can_use(Hookshot))",
|
||||
"Forest Temple Outdoors Top Ledges": "can_use(Fire_Arrows)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NE Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Well Chest": "can_use(Bow)",
|
||||
"Forest Temple MQ GS Raised Island Courtyard": "True",
|
||||
"Forest Temple MQ GS Well": "can_use(Iron_Boots) or can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outdoors Top Ledges": "
|
||||
can_use(Longshot) or can_use(Hover_Boots) or can_play(Song_of_Time) or
|
||||
(logic_forest_vines and can_use(Hookshot))",
|
||||
"Forest Temple NE Outdoors Ledge": "can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outdoors Top Ledges",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Raised Island Courtyard Upper Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NE Outdoors Ledge",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Raised Island Courtyard Lower Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "True",
|
||||
"Forest Temple Falling Room": "can_play(Song_of_Time)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Bow Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Jo and Beth": "can_use(Bow)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple MQ Bow Chest": "True",
|
||||
"Forest Temple MQ Map Chest": "can_use(Bow)",
|
||||
"Forest Temple MQ Compass Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Falling Room": "
|
||||
(Small_Key_Forest_Temple, 5) and
|
||||
(can_use(Bow) or can_use(Dins_Fire))" # Only 5 keys because the door you could waste your key on is the door you're trying to use keys to get to.
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Falling Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Amy and Meg": "can_use(Bow) and (Small_Key_Forest_Temple, 6)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple MQ Falling Ceiling Room Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors Ledge": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Boss Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Basement Chest": "True",
|
||||
"Forest Temple Phantom Ganon Heart": "Boss_Key_Forest_Temple",
|
||||
"Phantom Ganon": "Boss_Key_Forest_Temple"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,163 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Forest Temple Lobby",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
#If entrances are shuffled, Adult might lose access to the Kokiri forest
|
||||
#Babas for nuts. As this is sphere 0 for both ages, this case is covered
|
||||
#by putting the babas here.
|
||||
"Deku Baba Nuts": "is_adult",
|
||||
"Deku Baba Sticks": "is_adult",
|
||||
"Forest Temple First Room Chest": "True",
|
||||
"Forest Temple First Stalfos Chest": "can_jumpslash",
|
||||
"Forest Temple GS First Room": "can_use(Dins_Fire) or can_use_projectile or (can_jumpslash and can_live_dmg(0.5))",
|
||||
"Forest Temple GS Lobby": "can_use(Hookshot) or can_use(Boomerang) or can_hover"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True",
|
||||
"Forest Temple NE Outdoors": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Forest Temple Block Push Room": "(Small_Key_Forest_Temple, 1)",
|
||||
"Forest Temple Basement": "(Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg) or (can_use(Hover_Boots) and can_mega)",
|
||||
"Forest Temple Falling Room": "can_hover or (can_use(Hover_Boots) and Bombs and can_live_dmg(0.5))",
|
||||
"Forest Temple Boss Room": "is_adult"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NW Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple GS Level Island Courtyard": "
|
||||
can_use(Longshot) or
|
||||
at('Forest Temple Outside Upper Ledge', can_use(Hookshot) or can_hover)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outdoors High Balconies": "
|
||||
is_adult or
|
||||
(has_explosives or
|
||||
((can_use(Boomerang) or Nuts or Buy_Deku_Shield) and
|
||||
(Sticks or Kokiri_Sword or can_use(Slingshot))))",
|
||||
"Forest Temple Outside Upper Ledge": "can_hover or (can_use(Hover_Boots) and has_explosives and can_live_dmg(0.5))",
|
||||
"Forest Temple Boss Room": "is_child and can_live_dmg(0.5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NE Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Raised Island Courtyard Chest": "
|
||||
can_use(Hookshot) or
|
||||
at('Forest Temple Falling Room', True) or can_hover",
|
||||
"Forest Temple GS Raised Island Courtyard": "
|
||||
can_use(Hookshot) or can_hover or
|
||||
at('Forest Temple Falling Room', can_use(Bow) or can_use(Dins_Fire) or has_explosives or can_use(Boomerang))"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outdoors High Balconies": "can_use(Hookshot)",
|
||||
#Longshot can grab some very high up vines to drain the well.
|
||||
"Forest Temple NW Outdoors": "can_use(Iron_Boots) or (Progressive_Scale, 2)",
|
||||
"Forest Temple Lobby": "True",
|
||||
"Forest Temple Falling Room": "can_hover or
|
||||
at('Forest Temple Outdoors High Balconies',
|
||||
can_use(Hover_Boots) and can_use(Scarecrow) and can_live_dmg(0.5))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outdoors High Balconies",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Well Chest": "True",
|
||||
"Forest Temple Map Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True",
|
||||
"Forest Temple NE Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Falling Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Amy and Meg": "can_use(Bow)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple Falling Ceiling Room Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Block Push Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Eye Switch Chest": "
|
||||
Progressive_Strength_Upgrade and (can_use(Bow) or can_use(Slingshot))"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outside Upper Ledge": "can_jumpslash",
|
||||
"Forest Temple Bow Region": "
|
||||
(Progressive_Strength_Upgrade or (can_mega and (can_hover or Hover_Boots)))
|
||||
and (Small_Key_Forest_Temple, 3) and is_adult",
|
||||
"Forest Temple Straightened Hall": "
|
||||
(Progressive_Strength_Upgrade or (is_adult and can_mega and (can_hover or Hover_Boots)))
|
||||
and (Small_Key_Forest_Temple, 2) and (can_use(Bow) or (can_use(Slingshot) and can_hover))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Straightened Hall",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Boss Key Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outside Upper Ledge": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outside Upper Ledge",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Floormaster Chest": "is_adult or can_child_damage"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Bow Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Jo and Beth": "can_use(Bow)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple Bow Chest": "True",
|
||||
"Forest Temple Red Poe Chest": "can_use(Bow)",
|
||||
"Forest Temple Blue Poe Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Falling Room": "
|
||||
(Small_Key_Forest_Temple, 5) and (Bow or can_use(Dins_Fire))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Basement",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Basement Chest": "True",
|
||||
"Forest Temple GS Basement": "can_use(Hookshot) or can_use(Boomerang) or can_hover"
|
||||
},
|
||||
"exits":{
|
||||
"Forest Temple Boss Room": "Boss_Key_Forest_Temple"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Boss Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Phantom Ganon Heart": "(can_use(Hookshot) or can_use(Bow)) or
|
||||
(can_use(Slingshot) and (Kokiri_Sword or Sticks))",
|
||||
"Phantom Ganon": "(can_use(Hookshot) or can_use(Bow)) or
|
||||
(can_use(Slingshot) and (Kokiri_Sword or Sticks))"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,123 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ganons Castle Lobby",
|
||||
"exits": {
|
||||
"Ganons Castle Grounds": "True",
|
||||
"Ganons Castle Forest Trial": "True",
|
||||
"Ganons Castle Fire Trial": "True",
|
||||
"Ganons Castle Water Trial": "True",
|
||||
"Ganons Castle Shadow Trial": "True",
|
||||
"Ganons Castle Spirit Trial": "True",
|
||||
"Ganons Castle Light Trial": "can_use(Golden_Gauntlets)",
|
||||
"Ganons Castle Tower": "
|
||||
(skipped_trials[Forest] or 'Forest Trial Clear') and
|
||||
(skipped_trials[Fire] or 'Fire Trial Clear') and
|
||||
(skipped_trials[Water] or 'Water Trial Clear') and
|
||||
(skipped_trials[Shadow] or 'Shadow Trial Clear') and
|
||||
(skipped_trials[Spirit] or 'Spirit Trial Clear') and
|
||||
(skipped_trials[Light] or 'Light Trial Clear')",
|
||||
"Ganons Castle Deku Scrubs": "logic_lens_castle_mq or can_use(Lens_of_Truth)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Deku Scrubs",
|
||||
"locations": {
|
||||
"Ganons Castle MQ Deku Scrub Center-Left": "True",
|
||||
"Ganons Castle MQ Deku Scrub Center": "True",
|
||||
"Ganons Castle MQ Deku Scrub Center-Right": "True",
|
||||
"Ganons Castle MQ Deku Scrub Left": "True",
|
||||
"Ganons Castle MQ Deku Scrub Right": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Forest Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Forest Trial Clear": "can_use(Light_Arrows) and can_play(Song_of_Time)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Forest Trial Eye Switch Chest": "Bow",
|
||||
"Ganons Castle MQ Forest Trial Frozen Eye Switch Chest": "has_fire_source",
|
||||
"Ganons Castle MQ Forest Trial Freestanding Key": "Progressive_Hookshot"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Fire Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Fire Trial Clear": "
|
||||
can_use(Goron_Tunic) and can_use(Golden_Gauntlets) and
|
||||
can_use(Light_Arrows) and (can_use(Longshot) or Hover_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Water Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Water Trial Clear": "
|
||||
Blue_Fire and can_use(Light_Arrows) and
|
||||
(Small_Key_Ganons_Castle, 3)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Water Trial Chest": "Blue_Fire",
|
||||
"Blue Fire": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Shadow Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Shadow Trial Clear": "
|
||||
can_use(Light_Arrows) and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(Hover_Boots or (Progressive_Hookshot and has_fire_source))"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Shadow Trial Bomb Flower Chest": "
|
||||
(Bow and (Progressive_Hookshot or Hover_Boots)) or
|
||||
(Hover_Boots and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(has_explosives or Progressive_Strength_Upgrade or can_use(Dins_Fire)))",
|
||||
"Ganons Castle MQ Shadow Trial Eye Switch Chest": "
|
||||
Bow and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(Hover_Boots or (Progressive_Hookshot and has_fire_source))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Spirit Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Spirit Trial Clear": "
|
||||
can_use(Light_Arrows) and Megaton_Hammer and
|
||||
has_bombchus and Fire_Arrows and Mirror_Shield"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Spirit Trial First Chest": "(Bow or logic_rusted_switches) and Megaton_Hammer",
|
||||
"Ganons Castle MQ Spirit Trial Invisible Chest": "
|
||||
(Bow or logic_rusted_switches) and Megaton_Hammer and
|
||||
has_bombchus and (logic_lens_castle_mq or can_use(Lens_of_Truth))",
|
||||
"Ganons Castle MQ Spirit Trial Sun Front Left Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Ganons Castle MQ Spirit Trial Sun Back Left Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Ganons Castle MQ Spirit Trial Golden Gauntlets Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Ganons Castle MQ Spirit Trial Sun Back Right Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Light Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Light Trial Clear": "
|
||||
can_use(Light_Arrows) and Progressive_Hookshot and
|
||||
(Small_Key_Ganons_Castle, 3)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Light Trial Lullaby Chest": "can_play(Zeldas_Lullaby)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,115 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ganons Castle Lobby",
|
||||
"dungeon": "Ganons Castle",
|
||||
"exits": {
|
||||
"Ganons Castle Grounds": "True",
|
||||
"Ganons Castle Forest Trial": "True",
|
||||
"Ganons Castle Fire Trial": "True",
|
||||
"Ganons Castle Water Trial": "True",
|
||||
"Ganons Castle Shadow Trial": "True",
|
||||
"Ganons Castle Spirit Trial": "True",
|
||||
"Ganons Castle Light Trial": "can_use(Golden_Gauntlets) or (Bombs and can_shield) or (can_mega and can_use(Hover_Boots))",
|
||||
"Ganons Castle Tower": "True",
|
||||
"Ganons Castle Deku Scrubs": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Deku Scrubs",
|
||||
"dungeon": "Ganons Castle",
|
||||
"locations": {
|
||||
"Ganons Castle Deku Scrub Center-Left": "True",
|
||||
"Ganons Castle Deku Scrub Center-Right": "True",
|
||||
"Ganons Castle Deku Scrub Right": "True",
|
||||
"Ganons Castle Deku Scrub Left": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Forest Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Forest Trial Clear": "can_use(Light_Arrows) and (Fire_Arrows or Dins_Fire)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Forest Trial Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Fire Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Fire Trial Clear": "
|
||||
(can_use(Goron_Tunic) or Fairy) and (can_use(Golden_Gauntlets) or can_use(Hover_Boots)) and
|
||||
can_use(Light_Arrows) and (can_use(Longshot) or (can_mega and can_use(Hover_Boots)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Water Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Water Trial Clear": "(Blue_Fire or can_use(Hookshot)) and Megaton_Hammer and can_use(Light_Arrows)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Water Trial Left Chest": "True",
|
||||
"Ganons Castle Water Trial Right Chest": "True",
|
||||
"Blue Fire": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Shadow Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Shadow Trial Clear": "
|
||||
can_use(Light_Arrows) and Megaton_Hammer and (
|
||||
(has_bombchus and can_isg) or
|
||||
(has_explosives and Hover_Boots and can_shield) or
|
||||
( (can_use(Longshot) and (Hover_Boots or can_use(Dins_Fire)))
|
||||
or can_use(Fire_Arrows) ))"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Shadow Trial Front Chest": "
|
||||
can_use(Fire_Arrows) or can_use(Hookshot) or
|
||||
Hover_Boots or can_play(Song_of_Time) or can_mega",
|
||||
"Ganons Castle Shadow Trial Golden Gauntlets Chest": "(has_bombchus and can_isg) or
|
||||
(has_explosives and Hover_Boots and can_shield) or
|
||||
( (can_use(Longshot) and (Hover_Boots or can_use(Dins_Fire)))
|
||||
or can_use(Fire_Arrows) )"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Spirit Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
# includes below 2 reqs here
|
||||
"Spirit Trial Clear": "
|
||||
can_use(Light_Arrows) and Mirror_Shield and
|
||||
(has_bombchus or (can_shield and (can_use(Longshot) or Bow)))"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Spirit Trial Crystal Switch Chest": "True",
|
||||
# include req for silver rupees here
|
||||
"Ganons Castle Spirit Trial Invisible Chest": "
|
||||
has_bombchus or (can_shield and (can_use(Longshot) or Bow))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Light Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Light Trial Clear": "
|
||||
can_use(Light_Arrows) and (Progressive_Hookshot or (has_explosives and can_shield)) and
|
||||
(Small_Key_Ganons_Castle, 2)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Light Trial First Left Chest": "True",
|
||||
"Ganons Castle Light Trial Second Left Chest": "True",
|
||||
"Ganons Castle Light Trial Third Left Chest": "True",
|
||||
"Ganons Castle Light Trial First Right Chest": "True",
|
||||
"Ganons Castle Light Trial Second Right Chest": "True",
|
||||
"Ganons Castle Light Trial Third Right Chest": "True",
|
||||
"Ganons Castle Light Trial Invisible Enemies Chest": "True",
|
||||
"Ganons Castle Light Trial Lullaby Chest": "
|
||||
can_play(Zeldas_Lullaby) and (Small_Key_Ganons_Castle, 1)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,79 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Lobby",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Lobby Left Chest": "True",
|
||||
"Gerudo Training Grounds MQ Lobby Right Chest": "True",
|
||||
"Gerudo Training Grounds MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)",
|
||||
"Gerudo Training Grounds MQ Maze Path First Chest": "True",
|
||||
"Gerudo Training Grounds MQ Maze Path Second Chest": "True",
|
||||
"Gerudo Training Grounds MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 1)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Fortress": "True",
|
||||
"Gerudo Training Grounds Left Side": "has_fire_source",
|
||||
"Gerudo Training Grounds Right Side": "Bow"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Right Side",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Dinolfos Chest": "True",
|
||||
"Gerudo Training Grounds MQ Underwater Silver Rupee Chest": "
|
||||
(Hover_Boots or at('Gerudo Training Grounds Central Maze Right', can_use(Longshot) or Bow)) and
|
||||
has_fire_source and Iron_Boots and (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and
|
||||
can_take_damage",
|
||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room.
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Left Side",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ First Iron Knuckle Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Stalfos Room": "can_use(Longshot) or (logic_gtg_mq_with_hookshot and can_use(Hookshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Stalfos Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Before Heavy Block Chest": "True",
|
||||
"Gerudo Training Grounds MQ Heavy Block Chest": "can_use(Silver_Gauntlets)",
|
||||
"Blue Fire": "has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Back Areas": "can_play(Song_of_Time) and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Back Areas",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Eye Statue Chest": "Bow",
|
||||
"Gerudo Training Grounds MQ Second Iron Knuckle Chest": "True",
|
||||
"Gerudo Training Grounds MQ Flame Circle Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Central Maze Right": "Megaton_Hammer",
|
||||
"Gerudo Training Grounds Right Side": "can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Maze Right Central Chest": "True",
|
||||
"Gerudo Training Grounds MQ Maze Right Side Chest": "True",
|
||||
"Gerudo Training Grounds MQ Ice Arrows Chest": "
|
||||
(Small_Key_Gerudo_Training_Grounds, 3)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Right Side": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,112 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Lobby",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Gerudo Training Grounds Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Gerudo Training Grounds Stalfos Chest": "can_jumpslash",
|
||||
"Gerudo Training Grounds Beamos Chest": "has_explosives and can_jumpslash",
|
||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room.
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Heavy Block Room": "True",
|
||||
"Gerudo Training Grounds Lava Room": "
|
||||
here(has_explosives and can_jumpslash)",
|
||||
"Gerudo Training Grounds Central Maze": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Central Maze",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Grounds, 3)
|
||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
||||
"Gerudo Training Grounds Maze Path First Chest": "(Small_Key_Gerudo_Training_Grounds, 4)
|
||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))",
|
||||
"Gerudo Training Grounds Maze Path Second Chest": "(Small_Key_Gerudo_Training_Grounds, 6)
|
||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))",
|
||||
"Gerudo Training Grounds Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 7)
|
||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
||||
"Gerudo Training Grounds Maze Path Final Chest": "(Small_Key_Gerudo_Training_Grounds, 9)
|
||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Central Maze Right": "(Small_Key_Gerudo_Training_Grounds, 9)
|
||||
or (can_use(Hookshot) and can_mega) or (is_child and has_explosives)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Maze Right Central Chest": "True",
|
||||
"Gerudo Training Grounds Maze Right Side Chest": "True",
|
||||
"Gerudo Training Grounds Freestanding Key": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Lava Room": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Lava Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Underwater Silver Rupee Chest": "
|
||||
can_use(Hookshot) and (can_play(Song_of_Time) or can_mega) and Iron_Boots"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Central Maze Right": "can_play(Song_of_Time) or is_child
|
||||
or (can_use(Hookshot) and can_use(Hover_Boots) and can_shield and Bombs)",
|
||||
"Gerudo Training Grounds Hammer Room": "can_use(Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Hammer Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Hammer Room Clear Chest": "True",
|
||||
"Gerudo Training Grounds Hammer Room Switch Chest": "can_use(Megaton_Hammer) or
|
||||
can_live_dmg(0.5) or can_use(Nayrus_Love)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Eye Statue Lower": "can_use(Bow)",
|
||||
"Gerudo Training Grounds Lava Room": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Eye Statue Lower",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Eye Statue Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Hammer Room": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Eye Statue Upper",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Near Scarecrow Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Eye Statue Lower": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Heavy Block Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Before Heavy Block Chest": "True",
|
||||
"Gerudo Training Grounds Heavy Block First Chest": "can_use(Silver_Gauntlets)",
|
||||
"Gerudo Training Grounds Heavy Block Second Chest": "can_use(Silver_Gauntlets)",
|
||||
"Gerudo Training Grounds Heavy Block Third Chest": "can_use(Silver_Gauntlets)",
|
||||
"Gerudo Training Grounds Heavy Block Fourth Chest": "can_use(Silver_Gauntlets)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Eye Statue Upper": "can_use(Hookshot) or can_hover or
|
||||
(is_adult and (Hover_Boots or (can_shield and Bombs)))"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ice Cavern Beginning",
|
||||
"dungeon": "Ice Cavern",
|
||||
"exits": {
|
||||
"Zoras Fountain": "True",
|
||||
"Ice Cavern": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Blue Fire": "is_adult and has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Ice Cavern Interior": "Blue_Fire"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern Interior",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Ice Cavern MQ Map Chest": "True",
|
||||
"Ice Cavern MQ Compass Chest": "True",
|
||||
"Ice Cavern MQ Iron Boots Chest": "True",
|
||||
"Ice Cavern MQ Freestanding PoH": "has_explosives",
|
||||
"Sheik in Ice Cavern": "True",
|
||||
"Ice Cavern MQ GS Red Ice": "can_play(Song_of_Time)",
|
||||
"Ice Cavern MQ GS Ice Block": "True",
|
||||
"Ice Cavern MQ GS Scarecrow": "
|
||||
can_use(Scarecrow) or (Hover_Boots and can_use(Longshot))"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
[
|
||||
{ ##Child must be able to hover to get in here so can_hover is always true as child
|
||||
"region_name": "Ice Cavern Beginning",
|
||||
"dungeon": "Ice Cavern",
|
||||
"exits": {
|
||||
"Ice Cavern": "is_adult or Sticks or can_use(Dins_Fire)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
# because child can always hover here, access to this chest is ageless and True
|
||||
"Ice Cavern Map Chest": "Blue_Fire or (has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))",
|
||||
"Ice Cavern Compass Chest": "(is_adult or (is_child and (can_live_dmg(0.5) or can_use(Nayrus_Love)) )) and
|
||||
(Blue_Fire or (has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)) ))",
|
||||
"Ice Cavern Freestanding PoH": "(is_adult or (is_child and (can_live_dmg(0.5) or can_use(Nayrus_Love)))) and
|
||||
(Blue_Fire or (is_adult and Bombs and can_shield and (can_live_dmg(0.5) or can_use(Nayrus_Love)))
|
||||
or can_use(Boomerang))",
|
||||
"Ice Cavern Iron Boots Chest": "(can_jumpslash or can_use(Slingshot) or can_use(Dins_Fire)) and (Blue_Fire or (can_use(Hover_Boots) and can_shield) or can_mega)",
|
||||
"Sheik in Ice Cavern": "(can_jumpslash or can_use(Slingshot) or can_use(Dins_Fire)) and (Blue_Fire or (can_use(Hover_Boots) and can_shield) or can_mega)",
|
||||
"Ice Cavern GS Spinning Scythe Room": "can_use(Hookshot) or can_use(Boomerang) or
|
||||
(can_use(Hover_Boots) and can_mega)",
|
||||
"Ice Cavern GS Heart Piece Room": "(is_adult or (is_child and (can_live_dmg(0.5) or can_use(Nayrus_Love)) )) and
|
||||
(can_use(Boomerang) or can_use(Hookshot))",
|
||||
"Ice Cavern GS Push Block Room": "(Blue_Fire or (can_use(Hover_Boots) and can_shield) or (is_adult and can_mega) or (is_child and can_live_dmg(0.5) and has_explosives))
|
||||
and (can_use(Hookshot) or can_use(Boomerang) or can_hover)",
|
||||
"Blue Fire": "has_bottle"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,61 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Beginning",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Map Chest": "has_explosives",
|
||||
"Jabu Jabus Belly MQ First Room Side Chest": "Slingshot"
|
||||
},
|
||||
"exits": {
|
||||
"Zoras Fountain": "True",
|
||||
"Jabu Jabus Belly Main": "Slingshot"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Main",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Second Room Lower Chest": "True",
|
||||
"Jabu Jabus Belly MQ Compass Chest": "True",
|
||||
"Jabu Jabus Belly MQ Basement Near Vines Chest": "True",
|
||||
"Jabu Jabus Belly MQ Basement Near Switches Chest": "True",
|
||||
"Jabu Jabus Belly MQ Boomerang Room Small Chest": "True",
|
||||
"Jabu Jabus Belly MQ Boomerang Chest": "True",
|
||||
"Jabu Jabus Belly MQ GS Boomerang Chest Room": "
|
||||
can_play(Song_of_Time) or (logic_jabu_mq_sot_gs and Boomerang)"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Beginning": "True",
|
||||
"Jabu Jabus Belly Depths": "has_explosives and Boomerang"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Depths",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Falling Like Like Room Chest": "True",
|
||||
"Jabu Jabus Belly MQ GS Tailpasaran Room": "Sticks or can_use(Dins_Fire)",
|
||||
"Jabu Jabus Belly MQ GS Invisible Enemies Room": "logic_lens_jabu_mq or can_use(Lens_of_Truth)"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True",
|
||||
"Jabu Jabus Belly Boss Area": "
|
||||
Sticks or (Kokiri_Sword and can_use(Dins_Fire))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Boss Area",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Cow" : "can_play(Eponas_Song)",
|
||||
"Jabu Jabus Belly MQ Second Room Upper Chest": "True",
|
||||
"Jabu Jabus Belly MQ Near Boss Chest": "True",
|
||||
"Jabu Jabus Belly Barinade Heart": "True",
|
||||
"Barinade": "True",
|
||||
"Jabu Jabus Belly MQ GS Near Boss": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,49 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Beginning",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "can_use_projectile or can_isg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Main",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly Boomerang Chest": "True",
|
||||
"Jabu Jabus Belly GS Water Switch Room": "True",
|
||||
"Jabu Jabus Belly GS Lobby Basement Lower": "can_use(Boomerang) or can_use(Hookshot) or can_hover",
|
||||
"Jabu Jabus Belly GS Lobby Basement Upper": "can_use(Boomerang) or can_use(Hookshot) or can_hover",
|
||||
"Jabu Jabus Belly Deku Scrub": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Beginning": "True",
|
||||
"Jabu Jabus Belly Depths": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Depths",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly Map Chest": "can_use(Boomerang)",
|
||||
"Jabu Jabus Belly Compass Chest": "can_use(Boomerang) or Fairy
|
||||
or (is_adult and (can_live_dmg(0.5) or Hover_Boots) and has_explosives)"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True",
|
||||
"Jabu Jabus Belly Boss Area": "can_use(Boomerang) or can_use(Hover_Boots) or can_mega"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Boss Area",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly Barinade Heart": "can_use(Boomerang) and (Sticks or Kokiri_Sword)",
|
||||
"Barinade": "can_use(Boomerang) and (Sticks or Kokiri_Sword)",
|
||||
"Jabu Jabus Belly GS Near Boss": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,99 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Shadow Temple Entryway",
|
||||
"dungeon": "Shadow Temple",
|
||||
"exits": {
|
||||
"Shadow Temple Beginning": "
|
||||
(logic_lens_shadow_mq or can_use(Lens_of_Truth)) and
|
||||
(can_use(Hover_Boots) or can_use(Hookshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beginning",
|
||||
"dungeon": "Shadow Temple",
|
||||
"exits": {
|
||||
"Shadow Temple Entryway": "True",
|
||||
"Shadow Temple First Beamos": "can_use(Fire_Arrows) or Hover_Boots",
|
||||
"Shadow Temple Dead Hand Area": "has_explosives and (Small_Key_Shadow_Temple, 6)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Dead Hand Area",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Compass Chest": "True",
|
||||
"Shadow Temple MQ Hover Boots Chest": "can_play(Song_of_Time) and Bow"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple First Beamos",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Map Chest": "True",
|
||||
"Shadow Temple MQ Early Gibdos Chest": "True",
|
||||
"Shadow Temple MQ Near Ship Invisible Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Huge Pit": "has_explosives and (Small_Key_Shadow_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Huge Pit",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Invisible Blades Visible Chest": "can_play(Song_of_Time)",
|
||||
"Shadow Temple MQ Invisible Blades Invisible Chest": "can_play(Song_of_Time)",
|
||||
"Shadow Temple MQ Beamos Silver Rupees Chest": "can_use(Longshot)",
|
||||
"Shadow Temple MQ Falling Spikes Lower Chest": "True",
|
||||
"Shadow Temple MQ Falling Spikes Upper Chest": "Progressive_Strength_Upgrade",
|
||||
"Shadow Temple MQ Falling Spikes Switch Chest": "Progressive_Strength_Upgrade",
|
||||
"Shadow Temple MQ Invisible Spikes Chest": "Hover_Boots and (Small_Key_Shadow_Temple, 3)",
|
||||
"Shadow Temple MQ Stalfos Room Chest": "
|
||||
Hover_Boots and (Small_Key_Shadow_Temple, 3) and Progressive_Hookshot",
|
||||
"Shadow Temple MQ GS Falling Spikes Room": "Progressive_Hookshot"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Wind Tunnel": "
|
||||
Hover_Boots and Progressive_Hookshot and (Small_Key_Shadow_Temple, 4)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Wind Tunnel",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Wind Hint Chest": "True",
|
||||
"Shadow Temple MQ After Wind Enemy Chest": "True",
|
||||
"Shadow Temple MQ After Wind Hidden Chest": "True",
|
||||
"Shadow Temple MQ GS Wind Hint Room": "True",
|
||||
"Shadow Temple MQ GS After Wind": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Beyond Boat": "
|
||||
can_play(Zeldas_Lullaby) and (Small_Key_Shadow_Temple, 5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beyond Boat",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Bongo Bongo Heart": "Bow and Boss_Key_Shadow_Temple",
|
||||
"Bongo Bongo": "Bow and Boss_Key_Shadow_Temple",
|
||||
"Shadow Temple MQ GS After Ship": "True",
|
||||
"Shadow Temple MQ GS Near Boss": "Bow"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Invisible Maze": "
|
||||
Bow and can_play(Song_of_Time) and can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Invisible Maze",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Spike Walls Left Chest": "(Small_Key_Shadow_Temple, 6)",
|
||||
"Shadow Temple MQ Boss Key Chest": "(Small_Key_Shadow_Temple, 6)",
|
||||
"Shadow Temple MQ Bomb Flower Chest": "True",
|
||||
"Shadow Temple MQ Freestanding Key": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,108 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Shadow Temple Entryway",
|
||||
"dungeon": "Shadow Temple",
|
||||
"exits": {
|
||||
"Shadow Temple Beginning": "can_use(Hover_Boots) or can_use(Hookshot) or can_mega"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beginning",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Map Chest": "can_jumpslash or (can_use(Dins_Fire) and has_projectile(child))",
|
||||
"Shadow Temple Hover Boots Chest": "can_jumpslash"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Entryway": "True",
|
||||
"Shadow Temple First Beamos": "can_use(Hover_Boots) or can_mega",
|
||||
"Shadow Boss": "can_hover and has_explosives and can_use(Hover_Boots) and
|
||||
can_live_dmg(2.0)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple First Beamos",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Compass Chest": "can_jumpslash or can_use(Dins_Fire)",
|
||||
"Shadow Temple Early Silver Rupee Chest": "is_adult or (is_child and can_hover)"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Huge Pit": "has_explosives and (Small_Key_Shadow_Temple, 5)",
|
||||
"Shadow Temple Boat": "can_jumpslash"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Huge Pit",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Invisible Blades Visible Chest": "can_jumpslash or Slingshot",
|
||||
"Shadow Temple Invisible Blades Invisible Chest": "can_jumpslash or Slingshot",
|
||||
"Shadow Temple Falling Spikes Lower Chest": "True",
|
||||
"Shadow Temple Falling Spikes Upper Chest": "is_adult or can_hover",
|
||||
"Shadow Temple Falling Spikes Switch Chest": "is_adult or can_hover",
|
||||
"Shadow Temple Invisible Spikes Chest": "(Small_Key_Shadow_Temple, 5) and (can_jumpslash or can_use(Dins_Fire))",
|
||||
"Shadow Temple Freestanding Key": "
|
||||
(Small_Key_Shadow_Temple, 5) and (can_use(Hookshot) or can_hover)
|
||||
and (Progressive_Strength_Upgrade or has_explosives)",
|
||||
"Shadow Temple GS Like Like Room": "is_adult or can_use(Boomerang) or can_hover",
|
||||
"Shadow Temple GS Falling Spikes Room": "can_use(Hookshot) or (is_adult and can_mega) or (is_child and can_hover)",
|
||||
"Shadow Temple GS Single Giant Pot": "(Small_Key_Shadow_Temple, 5) and (can_use(Hookshot) or can_hover)"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Wind Tunnel": "(can_use(Hookshot) or can_hover) and (Small_Key_Shadow_Temple, 5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Wind Tunnel",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Wind Hint Chest": "can_jumpslash or can_use(Dins_Fire)",
|
||||
"Shadow Temple After Wind Enemy Chest": "can_jumpslash or can_use(Dins_Fire)",
|
||||
"Shadow Temple After Wind Hidden Chest": "has_explosives"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Boat": "(Small_Key_Shadow_Temple, 5)",
|
||||
"Shadow Temple Huge Pit": "can_hover"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Boat",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple GS Near Ship": "can_use(Longshot) or (can_use(Hover_Boots) and can_mega)
|
||||
or (is_child and can_hover)"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Wind Tunnel": "(Small_Key_Shadow_Temple,5)",
|
||||
"Shadow Temple Beyond Boat": "can_play(Zeldas_Lullaby) and
|
||||
(is_adult or (is_child and can_hover))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beyond Boat",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Spike Walls Left Chest": "can_use(Dins_Fire) or can_live_dmg(0.5) or Fairy or can_use(Nayrus_Love) or
|
||||
(can_use(Hookshot) and can_mega)",
|
||||
"Shadow Temple Boss Key Chest": "can_use(Dins_Fire) or can_live_dmg(0.5) or Fairy or can_use(Nayrus_Love) or
|
||||
(can_use(Hookshot) and can_mega)",
|
||||
"Shadow Temple Invisible Floormaster Chest": "True",
|
||||
"Shadow Temple GS Triple Giant Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Boss": "(has_bombchus or can_use(Distant_Scarecrow) or Bow or
|
||||
(can_mega and can_use(Hover_Boots)) or can_hover) and
|
||||
(Boss_Key_Shadow_Temple or (has_explosives and is_adult)) and
|
||||
(can_mega or can_use(Hover_Boots)) and (Small_Key_Shadow_Temple, 5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Boss",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Bongo Bongo Heart": "True",
|
||||
"Bongo Bongo": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,134 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Spirit Temple Lobby",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Entrance Front Left Chest": "True",
|
||||
"Spirit Temple MQ Entrance Back Left Chest": "
|
||||
here(can_blast_or_smash) and
|
||||
(can_use(Slingshot) or can_use(Bow))",
|
||||
"Spirit Temple MQ Entrance Back Right Chest": "
|
||||
has_bombchus or can_use(Bow) or can_use(Hookshot) or
|
||||
can_use(Slingshot) or can_use(Boomerang)"
|
||||
},
|
||||
"exits": {
|
||||
"Desert Colossus": "True",
|
||||
"Child Spirit Temple": "is_child",
|
||||
"Adult Spirit Temple": "
|
||||
has_bombchus and can_use(Longshot) and can_use(Silver_Gauntlets)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Map Room Enemy Chest": "
|
||||
(Sticks or Kokiri_Sword) and
|
||||
has_bombchus and Slingshot and can_use(Dins_Fire)",
|
||||
"Spirit Temple MQ Map Chest": "
|
||||
Sticks or Kokiri_Sword or has_explosives",
|
||||
"Spirit Temple MQ Silver Block Hallway Chest": "
|
||||
has_bombchus and (Small_Key_Spirit_Temple, 7) and Slingshot and
|
||||
(can_use(Dins_Fire) or
|
||||
here(is_adult and can_use(Longshot) and can_use(Silver_Gauntlets) and
|
||||
(can_use(Fire_Arrows) or
|
||||
(logic_spirit_mq_frozen_eye and Bow and can_play(Song_of_Time)))))"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Shared": "has_bombchus and (Small_Key_Spirit_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Adult Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Child Hammer Switch Chest": "
|
||||
(Small_Key_Spirit_Temple, 7) and Megaton_Hammer and can_play(Requiem_of_Spirit)",
|
||||
"Spirit Temple MQ Child Climb South Chest": "(Small_Key_Spirit_Temple, 7)",
|
||||
"Spirit Temple MQ Statue Room Lullaby Chest": "can_play(Zeldas_Lullaby)",
|
||||
"Spirit Temple MQ Statue Room Invisible Chest": "logic_lens_spirit_mq or can_use(Lens_of_Truth)",
|
||||
"Spirit Temple MQ Beamos Room Chest": "(Small_Key_Spirit_Temple, 5)",
|
||||
"Spirit Temple MQ Chest Switch Chest": "
|
||||
(Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time)",
|
||||
"Spirit Temple MQ Boss Key Chest": "
|
||||
(Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time) and Mirror_Shield",
|
||||
"Spirit Temple MQ GS Nine Thrones Room West": "(Small_Key_Spirit_Temple, 7)",
|
||||
"Spirit Temple MQ GS Nine Thrones Room North": "(Small_Key_Spirit_Temple, 7)"
|
||||
},
|
||||
"exits": {
|
||||
"Lower Adult Spirit Temple": "
|
||||
(can_use(Fire_Arrows) or
|
||||
(logic_spirit_mq_lower_adult and can_use(Dins_Fire) and Bow)) and Mirror_Shield",
|
||||
"Spirit Temple Shared": "True",
|
||||
"Spirit Temple Boss Area": "
|
||||
(Small_Key_Spirit_Temple, 6) and can_play(Zeldas_Lullaby) and Megaton_Hammer",
|
||||
"Mirror Shield Hand": "
|
||||
(Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time) and (logic_lens_spirit_mq or can_use(Lens_of_Truth))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Shared",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Child Climb North Chest": "(Small_Key_Spirit_Temple, 6)",
|
||||
"Spirit Temple MQ Compass Chest": "
|
||||
((Small_Key_Spirit_Temple, 7) and can_use(Slingshot)) or
|
||||
(can_use(Longshot) and can_use(Silver_Gauntlets) and Bow) or
|
||||
(Slingshot and Bow)",
|
||||
"Spirit Temple MQ Sun Block Room Chest": "
|
||||
can_play(Song_of_Time) or
|
||||
(can_use(Longshot) and can_use(Silver_Gauntlets))",
|
||||
"Spirit Temple MQ GS Sun Block Room": "
|
||||
(logic_spirit_mq_sun_block_gs and can_play(Song_of_Time) and Boomerang) or
|
||||
(can_use(Longshot) and can_use(Silver_Gauntlets))"
|
||||
},
|
||||
"exits": {
|
||||
"Silver Gauntlets Hand": "
|
||||
((Small_Key_Spirit_Temple, 7) and
|
||||
(can_play(Song_of_Time) or
|
||||
(can_use(Longshot) and can_use(Silver_Gauntlets)))) or
|
||||
((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and
|
||||
(logic_lens_spirit_mq or can_use(Lens_of_Truth)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Lower Adult Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Leever Room Chest": "True",
|
||||
"Spirit Temple MQ Symphony Room Chest": "
|
||||
(Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and
|
||||
Song_of_Time and Eponas_Song and Suns_Song and
|
||||
Song_of_Storms and Zeldas_Lullaby",
|
||||
"Spirit Temple MQ Entrance Front Right Chest": "Megaton_Hammer",
|
||||
"Spirit Temple MQ GS Leever Room": "True",
|
||||
"Spirit Temple MQ GS Symphony Room": "
|
||||
(Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and
|
||||
Song_of_Time and Eponas_Song and Suns_Song and
|
||||
Song_of_Storms and Zeldas_Lullaby"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Boss Area",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Mirror Puzzle Invisible Chest": "logic_lens_spirit_mq or can_use(Lens_of_Truth)",
|
||||
"Spirit Temple Twinrova Heart": "Mirror_Shield and Boss_Key_Spirit_Temple",
|
||||
"Twinrova": "Mirror_Shield and Boss_Key_Spirit_Temple"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Mirror Shield Hand",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Mirror Shield Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Silver Gauntlets Hand",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Silver Gauntlets Chest": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,171 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Spirit Temple Lobby",
|
||||
"dungeon": "Spirit Temple",
|
||||
"exits": {
|
||||
"Desert Colossus": "True",
|
||||
"Child Spirit Temple": "is_child or (is_adult and (can_mega or Hover_Boots))",
|
||||
"Early Adult Spirit Temple": "can_use(Silver_Gauntlets) or can_use(Hover_Boots) or (is_adult and can_shield)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Child Bridge Chest": "is_adult or
|
||||
(
|
||||
(can_use(Boomerang) or Slingshot or has_bombchus or can_mega) and
|
||||
(Sticks or has_explosives or
|
||||
( (Nuts or can_use(Boomerang)) and
|
||||
(can_use(Kokiri_Sword) or Slingshot) ) ))",
|
||||
"Spirit Temple Child Early Torches Chest": "(is_adult and has_fire_source) or
|
||||
(has_fire_source_with_torch and (here(is_adult) or
|
||||
(
|
||||
(can_use(Boomerang) or Slingshot or has_bombchus or can_mega) and
|
||||
(Sticks or has_explosives or
|
||||
( (Nuts or can_use(Boomerang)) and
|
||||
(can_use(Kokiri_Sword) or Slingshot) ) ))))",
|
||||
"Spirit Temple GS Metal Fence": "is_adult or
|
||||
(
|
||||
(can_use(Boomerang) or Slingshot or has_bombchus or can_mega) and
|
||||
(Sticks or has_explosives or
|
||||
( (Nuts or can_use(Boomerang)) and
|
||||
(can_use(Kokiri_Sword) or Slingshot) ) ))",
|
||||
"Nut Crate": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Child Spirit Temple Climb": "(Small_Key_Spirit_Temple, 2) and
|
||||
(is_child or ((can_mega and can_use(Longshot)) or can_use(Hover_Boots))
|
||||
)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Temple Climb",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Child Climb North Chest": "at('Spirit Temple Central Chamber', True)
|
||||
or is_child or has_projectile(adult)",
|
||||
"Spirit Temple Child Climb East Chest": "at('Spirit Temple Central Chamber', True)
|
||||
or is_child or has_projectile(adult)",
|
||||
"Spirit Temple GS Sun on Floor Room": "can_use(Boomerang) or can_use(Hookshot) or
|
||||
(can_child_damage and (can_live_dmg(0.5) or Fairy or can_use(Nayrus_Love))) or
|
||||
(is_adult and (can_live_dmg(0.5) or Fairy or can_use(Nayrus_Love)))"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Central Chamber": "has_explosives"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Early Adult Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Compass Chest": "can_play(Zeldas_Lullaby) and
|
||||
(can_use(Hookshot) or can_hover) and has_projectile(either)",
|
||||
"Spirit Temple Early Adult Right Chest": "has_projectile(either)",
|
||||
"Spirit Temple First Mirror Left Chest": "(Small_Key_Spirit_Temple, 2)",
|
||||
"Spirit Temple First Mirror Right Chest": "(Small_Key_Spirit_Temple, 2)",
|
||||
"Spirit Temple GS Boulder Room": "has_projectile(either) and
|
||||
(can_play(Song_of_Time) or can_use(Hover_Boots))"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Central Chamber": "(Small_Key_Spirit_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Central Chamber",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Map Chest": "can_use(Bow) or has_fire_source_with_torch",
|
||||
"Spirit Temple Sun Block Room Chest": "has_fire_source_with_torch or can_use(Bow)",
|
||||
"Spirit Temple Statue Room Hand Chest": "can_play(Zeldas_Lullaby)
|
||||
and can_jumpslash",
|
||||
"Spirit Temple Statue Room Northeast Chest": "can_play(Zeldas_Lullaby) and can_jumpslash and
|
||||
(can_use(Hookshot) or can_use(Hover_Boots) or can_mega)",
|
||||
"Spirit Temple GS Hall After Sun Block Room": "can_use(Hookshot) or can_use(Boomerang) or can_hover",
|
||||
"Spirit Temple GS Lobby": "can_use(Hookshot) or can_use(Boomerang) or can_hover
|
||||
or can_use(Hover_Boots)"
|
||||
},
|
||||
"exits": {
|
||||
"Silver Gauntlets Hand": "True",
|
||||
# access via Early Adult Spirit Temple requires 2 keys (+ jumpslash + explosives)
|
||||
# access to Early Adult Spirit Temple guaranteed via can_jumpslash from here
|
||||
"Spirit Temple Beyond Central Locked Door": "can_jumpslash and (
|
||||
(Small_Key_Spirit_Temple, 2) or
|
||||
can_hover or
|
||||
can_use(Hookshot)) and has_explosives",
|
||||
"Child Spirit Temple Climb": "True",
|
||||
"Spirit Temple Boss": "can_use(Hookshot) and can_live_dmg(0.5) and Mirror_Shield and has_explosives",
|
||||
"Early Adult Spirit Temple": "can_jumpslash or can_hover or can_use(Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Mirror Shield Hand",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Mirror Shield Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Desert Colossus": "True",
|
||||
"Silver Gauntlets Hand": "
|
||||
can_hover or can_use(Hookshot) or (can_use(Hover_Boots) and can_mega)",
|
||||
"Spirit Temple Beyond Central Locked Door": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Silver Gauntlets Hand",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Silver Gauntlets Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Desert Colossus": "True",
|
||||
"Mirror Shield Hand": "can_hover or (can_use(Hover_Boots) and can_mega)",
|
||||
"Spirit Temple Central Chamber": "(Small_Key_Spirit_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Outdoor Hands",
|
||||
"dungeon": "Spirit Temple",
|
||||
"exits": {
|
||||
"Silver Gauntlets Hand": "True",
|
||||
"Mirror Shield Hand": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Beyond Central Locked Door",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Near Four Armos Chest": "can_use(Mirror_Shield)",
|
||||
"Spirit Temple Hallway Right Invisible Chest": "True",
|
||||
"Spirit Temple Hallway Left Invisible Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Beyond Final Locked Door": "(Small_Key_Spirit_Temple,5) and
|
||||
(can_use(Hookshot) or has_explosives)",
|
||||
"Mirror Shield Hand": "True",
|
||||
"Spirit Temple Central Chamber": "has_explosives"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Beyond Final Locked Door",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Boss Key Chest": "
|
||||
can_play(Zeldas_Lullaby) and (can_live_dmg(1.0) or (Bow and
|
||||
Progressive_Hookshot))",
|
||||
"Spirit Temple Topmost Chest": "can_use(Mirror_Shield)"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Boss": "can_use(Mirror_Shield)",
|
||||
"Spirit Temple Central Chamber": "can_use(Mirror_Shield) or can_use(Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Boss",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Twinrova Heart": "True",
|
||||
"Twinrova": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,58 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Water Temple Lobby",
|
||||
"dungeon": "Water Temple",
|
||||
"events": {
|
||||
"Water Temple Clear": "Boss_Key_Water_Temple and can_use(Longshot)"
|
||||
},
|
||||
"locations": {
|
||||
"Water Temple MQ Map Chest": "has_fire_source and Iron_Boots",
|
||||
"Water Temple MQ Central Pillar Chest": "
|
||||
can_use(Zora_Tunic) and Iron_Boots and
|
||||
(can_use(Fire_Arrows) or (can_use(Dins_Fire) and can_play(Song_of_Time)))",
|
||||
# If the player leaves the dungeon without collecting the item at Morpha Heart,
|
||||
# they won't be able to come back without Iron Boots.
|
||||
# If it is the Iron Boots or an item required to get them, it means a soft-lock.
|
||||
"Water Temple Morpha Heart": "
|
||||
Boss_Key_Water_Temple and can_use(Longshot) and Iron_Boots",
|
||||
"Morpha": "Boss_Key_Water_Temple and can_use(Longshot)"
|
||||
},
|
||||
"exits": {
|
||||
"Lake Hylia": "True",
|
||||
"Water Temple Lowered Water Levels": "can_play(Zeldas_Lullaby) and Iron_Boots",
|
||||
"Water Temple Dark Link Region": "
|
||||
Small_Key_Water_Temple and can_use(Longshot) and Iron_Boots"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Lowered Water Levels",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Compass Chest": "Bow or can_use(Dins_Fire)",
|
||||
"Water Temple MQ Longshot Chest": "True",
|
||||
"Water Temple MQ GS Lizalfos Hallway": "can_use(Dins_Fire)",
|
||||
"Water Temple MQ GS Before Upper Water Switch": "can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Dark Link Region",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Boss Key Chest": "can_use(Dins_Fire)",
|
||||
"Water Temple MQ GS River": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Basement Gated Areas": "
|
||||
can_use(Dins_Fire) and (Hover_Boots or Ocarina)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Basement Gated Areas",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Freestanding Key": "True",
|
||||
"Water Temple MQ GS Triple Wall Torch": "can_use(Fire_Arrows)",
|
||||
"Water Temple MQ GS Freestanding Key Area": "(Small_Key_Water_Temple, 2)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,174 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Water Temple Lobby",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {},
|
||||
"exits": {
|
||||
"High Alcove": "is_adult or can_hover",
|
||||
"Boss Area": "can_use(Longshot) or can_hover or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))",
|
||||
"Dark Link Area": "(at('High Alcove', can_play(Zeldas_Lullaby)) or
|
||||
(can_use(Hover_Boots) and (can_mega or Megaton_Hammer)))
|
||||
and (Small_Key_Water_Temple, 4)",
|
||||
"Under Entrance Block": "can_use(Hookshot) and Iron_Boots",
|
||||
"Central Pillar from Lobby": "can_use(Hookshot) and Iron_Boots and
|
||||
(Small_Key_Water_Temple, 4)",
|
||||
"Compass Room": "can_use(Iron_Boots) and can_use(Hookshot)",
|
||||
"Ruto Column": "can_use(Iron_Boots) or can_use(Longshot) or can_jumpslash"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "High Alcove",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {},
|
||||
"exits": {
|
||||
"Compass Room": "is_adult",
|
||||
"Ruto Column": "is_adult",
|
||||
"Under Entrance Block": "can_use(Iron_Boots) and can_use(Hookshot)",
|
||||
"Caged Skulltula": "is_adult",
|
||||
"Dragon Head Area": "is_adult",
|
||||
"Boss Key Area": "is_adult and
|
||||
(Small_Key_Water_Temple, 4)
|
||||
and (can_use(Longshot) or can_hover or Hover_Boots)",
|
||||
"Boss Area": "can_play(Zeldas_Lullaby) and can_use(Longshot)",
|
||||
"Water Temple Lobby": "can_play(Zeldas_Lullaby)"
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Caged Skulltula",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple GS Behind Gate": "(can_use(Hover_Boots) or can_hover or can_use(Hookshot)) and
|
||||
(can_jumpslash or has_explosives)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Compass Room",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Compass Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Under Entrance Block",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Central Bow Target Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ruto Column",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Map Chest": "is_adult or can_child_damage",
|
||||
"Water Temple Cracked Wall Chest": "(can_use(Hookshot) and Iron_Boots) or
|
||||
(can_play(Zeldas_Lullaby) and (can_use(Hookshot) or has_explosives)) ",
|
||||
"Water Temple Torches Chest": "(here(is_child and can_use(Sticks)) or has_fire_source or can_use(Bow))
|
||||
and can_play(Zeldas_Lullaby)"
|
||||
},
|
||||
"exits": {
|
||||
"Central Pillar": "can_play(Zeldas_Lullaby) and
|
||||
((Small_Key_Water_Temple, 5)
|
||||
or here(is_child and can_use(Sticks)) or has_fire_source or can_use(Bow))",
|
||||
"Boss Key Area": "(Small_Key_Water_Temple, 4) and
|
||||
(can_use(Longshot) or can_hover or can_use(Hover_Boots)) and can_play(Zeldas_Lullaby)",
|
||||
"Dragon Head Area": "Progressive_Strength_Upgrade and (is_adult or can_child_attack) and can_play(Zeldas_Lullaby)",
|
||||
"Caged Skulltula": "has_explosives and can_play(Zeldas_Lullaby)",
|
||||
"Compass Room": "can_play(Zeldas_Lullaby) and can_use(Hookshot)",
|
||||
"Under Entrance Block": "can_play(Zeldas_Lullaby) and
|
||||
( (can_use(Hookshot) and can_mega) or (can_use(Bow) and (Hover_Boots or can_use(Longshot))
|
||||
and (Progressive_Strength_Upgrade or (can_use(Hookshot) and can_mega))))",
|
||||
"High Alcove": "(can_use(Hover_Boots) or can_use(Hookshot) or (is_adult and can_mega) or can_hover)
|
||||
and can_play(Zeldas_Lullaby)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Central Pillar from Lobby",
|
||||
"dungeon": "Water Temple",
|
||||
"exits": {
|
||||
"Central Pillar": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Central Pillar",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Central Pillar Chest": "can_use(Iron_Boots) and can_use(Hookshot) and
|
||||
(at('Central Pillar from Lobby', True) or can_play(Zeldas_Lullaby))",
|
||||
"Water Temple GS Central Pillar": "at('Central Pillar from Lobby', True) or
|
||||
can_use(Longshot) or
|
||||
at('High Alcove',
|
||||
can_use(Farores_Wind) and can_play(Zeldas_Lullaby)
|
||||
and (can_use(Hookshot) or can_use(Boomerang)))"
|
||||
},
|
||||
"exits": {
|
||||
"High Alcove": "(can_use(Hover_Boots) or can_use(Hookshot) or (is_adult and can_mega) or can_hover
|
||||
or has_projectile(either))
|
||||
and can_play(Zeldas_Lullaby)",
|
||||
"Compass Room": "can_play(Zeldas_Lullaby) and can_use(Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Boss Key Area",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Boss Key Chest": "(Small_Key_Water_Temple, 5) and
|
||||
(is_adult or can_hover)",
|
||||
"Water Temple GS Near Boss Key Chest": "(is_adult or can_hover) and
|
||||
(can_use(Hookshot) or can_use(Boomerang) or can_mega)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dark Link Area",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Longshot Chest": "can_use(Hookshot)",
|
||||
"Water Temple GS Falling Platform Room": "can_use(Hookshot)"
|
||||
},
|
||||
"exits": {
|
||||
"River": "can_play(Song_of_Time) or (can_use(Hookshot) and (Hover_Boots or (Bombs and can_live_dmg(0.5))))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "River",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple GS River": "can_use(Longshot) or (Iron_Boots and can_use(Hookshot))"
|
||||
},
|
||||
"exits": {
|
||||
"River Chest": "can_use(Bow) or (can_use(Longshot) and has_bottle and Iron_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "River Chest",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple River Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Dragon Head Area": "True",
|
||||
"River": "(can_use(Longshot) or can_use(Bow)) and can_mega"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dragon Head Area",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Dragon Chest": "at('River Chest', is_adult) or has_bombchus or (Iron_Boots and can_use(Hookshot))"
|
||||
},
|
||||
"exits": {
|
||||
"River Chest": "can_hover"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Boss Area",
|
||||
"dungeon": "Water Temple",
|
||||
"events": {
|
||||
"Water Temple Clear": "can_jumpslash and (can_hover or Boss_Key_Water_Temple)"
|
||||
},
|
||||
"locations": {
|
||||
"Morpha": "can_jumpslash and (can_hover or Boss_Key_Water_Temple)",
|
||||
"Water Temple Morpha Heart": "can_jumpslash and (can_hover or Boss_Key_Water_Temple)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "balanced",
|
||||
"gui_name": "Balanced",
|
||||
"description": "Recommended hint spread.",
|
||||
"add_locations": [],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"woth": {"order": 3, "weight": 3.5, "fixed": 0, "copies": 1},
|
||||
"barren": {"order": 4, "weight": 2.0, "fixed": 0, "copies": 1},
|
||||
"entrance": {"order": 5, "weight": 3.0, "fixed": 0, "copies": 1},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"random": {"order": 7, "weight": 6.0, "fixed": 0, "copies": 1},
|
||||
"item": {"order": 8, "weight": 5.0, "fixed": 0, "copies": 1},
|
||||
"song": {"order": 9, "weight": 1.0, "fixed": 0, "copies": 1},
|
||||
"overworld": {"order": 10, "weight": 2.0, "fixed": 0, "copies": 1},
|
||||
"dungeon": {"order": 11, "weight": 1.5, "fixed": 0, "copies": 1},
|
||||
"junk": {"order": 12, "weight": 3.0, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "bingo",
|
||||
"gui_name": "Bingo",
|
||||
"description": "Hints locations for items required for most bingo goals. Can be made board-specific by entering a Bingosync URL.",
|
||||
"add_locations": [],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"barren": {"order": 4, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"entrance": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"song": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"overworld": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"dungeon": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"junk": {"order": 12, "weight": 1.0, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 2}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"name": "ddr",
|
||||
"gui_name": "DDR",
|
||||
"description": "DDR weekly race hints. Duplicates of each hint, 2 WotH, 3 Barren, 3 Named-Item, remainder of hints are Sometimes. Prevents some items from being hinted in WotH or Sometimes.",
|
||||
"add_locations": [
|
||||
{ "location": "Deku Theater Skull Mask", "types": ["always"]}
|
||||
],
|
||||
"remove_locations": [],
|
||||
"add_items": [
|
||||
{"item":"Hover Boots", "types":["named-item"]},
|
||||
{"item":"Progressive Hookshot", "types":["named-item"]},
|
||||
{"item":"Dins Fire", "types":["named-item"]},
|
||||
{"item":"Bomb Bag", "types":["named-item"]},
|
||||
{"item":"Boomerang", "types":["named-item"]},
|
||||
{"item":"Bow", "types":["named-item"]},
|
||||
{"item":"Megaton Hammer", "types":["named-item"]},
|
||||
{"item":"Iron Boots", "types":["named-item"]},
|
||||
{"item":"Magic Meter", "types":["named-item"]},
|
||||
{"item":"Mirror Shield", "types":["named-item"]},
|
||||
{"item":"Fire Arrows", "types":["named-item"]},
|
||||
{"item":"Progressive Strength Upgrade", "types":["named-item"]}
|
||||
],
|
||||
"remove_items": [
|
||||
{ "item": "Zeldas Lullaby", "types": ["woth", "sometimes"] },
|
||||
{ "item": "Rutos Letter", "types": ["woth", "sometimes"] },
|
||||
{ "item": "Goron Tunic", "types": ["woth", "sometimes"] },
|
||||
{ "item": "Zora Tunic", "types": ["woth", "sometimes"] },
|
||||
{ "item": "Bow", "types": ["barren"]},
|
||||
{ "item": "Bomb Bag", "types": ["barren"]},
|
||||
{ "item": "Magic Meter", "types": ["barren"]}
|
||||
],
|
||||
"dungeons_woth_limit": 1,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": false,
|
||||
"vague_named_items": true,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 0.0, "fixed": 2, "copies": 2},
|
||||
"barren": {"order": 4, "weight": 0.0, "fixed": 3, "copies": 2},
|
||||
"entrance": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"sometimes": {"order": 13,"weight": 0.0, "fixed": 99, "copies": 2},
|
||||
"random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"song": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"overworld": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"dungeon": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"junk": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 6, "weight": 0.0, "fixed": 3, "copies": 2}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "league",
|
||||
"gui_name": "League",
|
||||
"description": "Hint Distro for the OoTR League",
|
||||
"add_locations": [
|
||||
{ "location": "Deku Theater Skull Mask", "types": ["always"] }
|
||||
],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [{"types": ["woth"], "item": "Zeldas Lullaby"}],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 0.0, "fixed": 5, "copies": 2},
|
||||
"barren": {"order": 4, "weight": 0.0, "fixed": 3, "copies": 2},
|
||||
"entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 2},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 100, "copies": 2},
|
||||
"random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 2},
|
||||
"item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}
|
||||
},
|
||||
"groups": [],
|
||||
"disabled": []
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
{
|
||||
"name": "mw2",
|
||||
"gui_name": "MW Season 2",
|
||||
"description": "Hints used for the multi-world tournament season 2.",
|
||||
"add_locations": [
|
||||
{
|
||||
"location": "Song from Ocarina of Time",
|
||||
"types": [
|
||||
"always"
|
||||
]
|
||||
},
|
||||
{
|
||||
"location": "Deku Theater Skull Mask",
|
||||
"types": [
|
||||
"always"
|
||||
]
|
||||
},
|
||||
{
|
||||
"location": "DMC Deku Scrub",
|
||||
"types": [
|
||||
"always"
|
||||
]
|
||||
}
|
||||
],
|
||||
"remove_locations": [
|
||||
{
|
||||
"location": "Haunted Wasteland",
|
||||
"types": [
|
||||
"barren"
|
||||
]
|
||||
},
|
||||
{
|
||||
"location": "Temple of Time",
|
||||
"types": [
|
||||
"barren"
|
||||
]
|
||||
},
|
||||
{
|
||||
"location": "Hyrule Castle",
|
||||
"types": [
|
||||
"barren"
|
||||
]
|
||||
},
|
||||
{
|
||||
"location": "outside Ganon's Castle",
|
||||
"types": [
|
||||
"barren"
|
||||
]
|
||||
}
|
||||
],
|
||||
"add_items": [],
|
||||
"remove_items": [
|
||||
{
|
||||
"item": "Zeldas Lullaby",
|
||||
"types": [
|
||||
"woth"
|
||||
]
|
||||
}
|
||||
],
|
||||
"dungeons_woth_limit": 3,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"distribution": {
|
||||
"trial": {
|
||||
"order": 1,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"always": {
|
||||
"order": 2,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"woth": {
|
||||
"order": 3,
|
||||
"weight": 0.0,
|
||||
"fixed": 7,
|
||||
"copies": 2
|
||||
},
|
||||
"barren": {
|
||||
"order": 4,
|
||||
"weight": 0.0,
|
||||
"fixed": 3,
|
||||
"copies": 2
|
||||
},
|
||||
"entrance": {
|
||||
"order": 5,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"sometimes": {
|
||||
"order": 6,
|
||||
"weight": 0.0,
|
||||
"fixed": 100,
|
||||
"copies": 2
|
||||
},
|
||||
"random": {
|
||||
"order": 7,
|
||||
"weight": 9.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"item": {
|
||||
"order": 0,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"song": {
|
||||
"order": 0,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"overworld": {
|
||||
"order": 0,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"dungeon": {
|
||||
"order": 0,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"junk": {
|
||||
"order": 0,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
},
|
||||
"named-item": {
|
||||
"order": 8,
|
||||
"weight": 0.0,
|
||||
"fixed": 0,
|
||||
"copies": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "scrubs",
|
||||
"gui_name": "Scrubs",
|
||||
"description": "Tournament hints used for Scrubs Races. Duplicates of each hint, Skull Mask is an always hint, 5 WotH, 3 Foolish, 8 sometimes. Can also be used to simulate S3 Tournament hints.",
|
||||
"add_locations": [
|
||||
{ "location": "Deku Theater Skull Mask", "types": ["always"] },
|
||||
{ "location": "Deku Theater Mask of Truth", "types": ["always"] }
|
||||
],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 0.0, "fixed": 5, "copies": 2},
|
||||
"barren": {"order": 4, "weight": 0.0, "fixed": 3, "copies": 2},
|
||||
"entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 2},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 100, "copies": 2},
|
||||
"random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 2},
|
||||
"item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}
|
||||
},
|
||||
"groups": [],
|
||||
"disabled": []
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "strong",
|
||||
"gui_name": "Strong",
|
||||
"description": "More useful hints.",
|
||||
"add_locations": [],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.00, "fixed": 0, "copies": 1},
|
||||
"always": {"order": 2, "weight": 0.00, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 3.00, "fixed": 0, "copies": 2},
|
||||
"barren": {"order": 4, "weight": 3.00, "fixed": 0, "copies": 1},
|
||||
"entrance": {"order": 5, "weight": 1.00, "fixed": 0, "copies": 1},
|
||||
"sometimes": {"order": 6, "weight": 0.00, "fixed": 0, "copies": 1},
|
||||
"random": {"order": 7, "weight": 2.00, "fixed": 0, "copies": 1},
|
||||
"item": {"order": 8, "weight": 1.00, "fixed": 0, "copies": 1},
|
||||
"song": {"order": 9, "weight": 0.33, "fixed": 0, "copies": 1},
|
||||
"overworld": {"order": 10, "weight": 0.66, "fixed": 0, "copies": 1},
|
||||
"dungeon": {"order": 11, "weight": 0.66, "fixed": 0, "copies": 1},
|
||||
"junk": {"order": 12, "weight": 0.00, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 13, "weight": 0.00, "fixed": 0, "copies": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "tournament",
|
||||
"gui_name": "Tournament",
|
||||
"description": "Tournament hints used for OoTR Season 4. Gossip stones in grottos are disabled. 4 WotH, 2 Barren, remainder filled with Sometimes. Always, WotH, and Barren hints duplicated.",
|
||||
"add_locations": [],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [{"types": ["woth"], "item": "Zeldas Lullaby"}],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": true,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 0.0, "fixed": 4, "copies": 2},
|
||||
"barren": {"order": 4, "weight": 0.0, "fixed": 2, "copies": 2},
|
||||
"entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 1},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 99, "copies": 1},
|
||||
"random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 1},
|
||||
"item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 1}
|
||||
},
|
||||
"groups": [],
|
||||
"disabled": [
|
||||
"HC (Storms Grotto)", "HF (Cow Grotto)", "HF (Near Market Grotto)", "HF (Southeast Grotto)", "HF (Open Grotto)", "Kak (Open Grotto)", "ZR (Open Grotto)", "KF (Storms Grotto)", "LW (Near Shortcuts Grotto)", "DMT (Storms Grotto)", "DMC (Upper Grotto)"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "useless",
|
||||
"gui_name": "Useless",
|
||||
"description": "Only junk hints.",
|
||||
"add_locations": [],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [],
|
||||
"dungeons_woth_limit": 2,
|
||||
"dungeons_barren_limit": 1,
|
||||
"named_items_required": false,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"woth": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"barren": {"order": 4, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"entrance": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"song": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"overworld": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"dungeon": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 0},
|
||||
"junk": {"order": 12, "weight": 9.0, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 0}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "very_strong",
|
||||
"gui_name": "Very Strong",
|
||||
"description": "Many powerful hints.",
|
||||
"add_locations": [],
|
||||
"remove_locations": [],
|
||||
"add_items": [],
|
||||
"remove_items": [],
|
||||
"dungeons_woth_limit": 40,
|
||||
"dungeons_barren_limit": 40,
|
||||
"named_items_required": true,
|
||||
"vague_named_items": false,
|
||||
"distribution": {
|
||||
"trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2},
|
||||
"woth": {"order": 3, "weight": 3.0, "fixed": 0, "copies": 2},
|
||||
"barren": {"order": 4, "weight": 3.0, "fixed": 0, "copies": 1},
|
||||
"entrance": {"order": 5, "weight": 2.0, "fixed": 0, "copies": 1},
|
||||
"sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"item": {"order": 8, "weight": 1.0, "fixed": 0, "copies": 1},
|
||||
"song": {"order": 9, "weight": 0.5, "fixed": 0, "copies": 1},
|
||||
"overworld": {"order": 10, "weight": 1.5, "fixed": 0, "copies": 1},
|
||||
"dungeon": {"order": 11, "weight": 1.5, "fixed": 0, "copies": 1},
|
||||
"junk": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 1},
|
||||
"named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
{
|
||||
# Rules here define replacement "functions" or item aliases.
|
||||
# The alias itself must always be alphanumeric only--string items bypass the aliasing.
|
||||
# Rules should be simple python and can invoke other aliases or even the
|
||||
# at/here metarules.
|
||||
"Hookshot": "Progressive_Hookshot",
|
||||
"Longshot": "(Progressive_Hookshot, 2)",
|
||||
"Silver_Gauntlets": "(Progressive_Strength_Upgrade, 2)",
|
||||
"Golden_Gauntlets": "(Progressive_Strength_Upgrade, 3)",
|
||||
"Scarecrow": "Progressive_Hookshot and can_play(Scarecrow_Song)",
|
||||
"Distant_Scarecrow": "(Progressive_Hookshot, 2) and can_play(Scarecrow_Song)",
|
||||
# Items can be directly aliased, so all occurrences of that item name get replaced,
|
||||
# but make sure that inside the rule you use the string 'item' form
|
||||
# to avoid infinite recursion.
|
||||
"Goron_Tunic": "'Goron Tunic' or Buy_Goron_Tunic",
|
||||
"Zora_Tunic": "'Zora Tunic' or Buy_Zora_Tunic",
|
||||
|
||||
# Refill aliases. If we start considering Bow etc refills we can enable these aliases
|
||||
# without editing all logic files.
|
||||
# "Bow": "'Bow'",
|
||||
# "Slingshot": "'Slingshot'",
|
||||
"Bombs": "Bomb_Bag",
|
||||
"Deku_Shield": "Buy_Deku_Shield",
|
||||
"Hylian_Shield": "Buy_Hylian_Shield",
|
||||
"Nuts": "Buy_Deku_Nut_5 or Buy_Deku_Nut_10 or Deku_Nut_Drop",
|
||||
"Sticks": "Buy_Deku_Stick_1 or Deku_Stick_Drop",
|
||||
"Bugs": "'Bugs' or Buy_Bottle_Bug",
|
||||
"Blue_Fire": "'Blue Fire' or Buy_Blue_Fire",
|
||||
"Fish": "'Fish' or Buy_Fish",
|
||||
"Fairy": "'Fairy' or Buy_Fairys_Spirit",
|
||||
"Big_Poe": "'Big Poe'",
|
||||
|
||||
"has_bombchus": "(Buy_Bombchu_5 or Buy_Bombchu_10 or Buy_Bombchu_20 or Bombchu_Drop) and (bombchus_in_logic or Bomb_Bag)",
|
||||
"found_bombchus": "(bombchus_in_logic and (Bombchus or Bombchus_5 or Bombchus_10 or Bombchus_20)) or (not bombchus_in_logic and Bomb_Bag)",
|
||||
"has_explosives": "Bombs or (bombchus_in_logic and has_bombchus)",
|
||||
"is_child": "current_spot_child_access",
|
||||
"is_adult": "current_spot_adult_access",
|
||||
"is_starting_age": "current_spot_starting_age_access",
|
||||
"is_glitched": "logic_rules != 'glitchless'",
|
||||
"can_blast_or_smash": "has_explosives or can_use(Megaton_Hammer)",
|
||||
"can_child_attack": "is_child and (Slingshot or Boomerang or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire))",
|
||||
"can_child_damage": "is_child and (Slingshot or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire))",
|
||||
"can_cut_shrubs": "is_adult or Sticks or Kokiri_Sword or Boomerang or has_explosives",
|
||||
"can_dive": "Progressive_Scale",
|
||||
"can_leave_forest": "open_forest != 'closed' or is_adult or is_glitched or Deku_Tree_Clear",
|
||||
"can_plant_bugs": "is_child and Bugs",
|
||||
"can_ride_epona": "is_adult and Epona and (can_play(Eponas_Song) or (is_glitched and can_hover))",
|
||||
"can_stun_deku": "is_adult or (Slingshot or Boomerang or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire) or Nuts or Deku_Shield)",
|
||||
"can_summon_gossip_fairy": "Ocarina and (Zeldas_Lullaby or Eponas_Song or Song_of_Time or Suns_Song)",
|
||||
"can_summon_gossip_fairy_without_suns": "Ocarina and (Zeldas_Lullaby or Eponas_Song or Song_of_Time)",
|
||||
"can_take_damage": "damage_multiplier != 'ohko' or Fairy or can_use(Nayrus_Love)",
|
||||
"can_plant_bean": "is_child and (Magic_Bean or Magic_Bean_Pack)",
|
||||
"can_play(song)": "Ocarina and song",
|
||||
"can_open_bomb_grotto": "can_blast_or_smash and (Stone_of_Agony or logic_grottos_without_agony)",
|
||||
"can_open_storm_grotto": "can_play(Song_of_Storms) and (Stone_of_Agony or logic_grottos_without_agony)",
|
||||
# The last case in a conditional still needs a check, to prevent failure from falling through
|
||||
# into what should be the 'else' case.
|
||||
"can_use_projectile": "has_explosives or (is_adult and (Bow or Hookshot)) or (is_child and (Slingshot or Boomerang))",
|
||||
"has_projectile(for_age)": "has_explosives
|
||||
or (for_age == child and (Slingshot or Boomerang))
|
||||
or (for_age == adult and (Bow or Hookshot))
|
||||
or (for_age == both and (Slingshot or Boomerang) and (Bow or Hookshot))
|
||||
or (for_age == either and (Slingshot or Boomerang or Bow or Hookshot))",
|
||||
|
||||
# can_use and helpers
|
||||
# The parser reduces this to smallest form based on item category.
|
||||
# Note that can_use(item) is False for any item not covered here.
|
||||
"can_use(item)": "(_is_magic_item(item) and item and Magic_Meter)
|
||||
or (_is_adult_item(item) and is_adult and item)
|
||||
or (_is_magic_arrow(item) and is_adult and item and Bow and Magic_Meter)
|
||||
or (_is_child_item(item) and is_child and item)",
|
||||
"_is_magic_item(item)": "item == Dins_Fire or item == Farores_Wind or item == Nayrus_Love or item == Lens_of_Truth",
|
||||
"_is_adult_item(item)": "item == Bow or item == Megaton_Hammer or item == Iron_Boots or item == Hover_Boots or item == Hookshot or item == Longshot or item == Silver_Gauntlets or item == Golden_Gauntlets or item == Goron_Tunic or item == Zora_Tunic or item == Scarecrow or item == Distant_Scarecrow or item == Mirror_Shield",
|
||||
"_is_child_item(item)": "item == Slingshot or item == Boomerang or item == Kokiri_Sword or item == Sticks or item == Deku_Shield",
|
||||
"_is_magic_arrow(item)": "item == Fire_Arrows or item == Light_Arrows",
|
||||
|
||||
# Biggoron's trade path
|
||||
# ER with certain settings disables timers and prevents items from reverting on save warp.
|
||||
# Otherwise, to get to Biggoron requires: a trick, clearing boulders on DMT, or Darunia's Chamber
|
||||
"guarantee_trade_path": "disable_trade_revert or can_blast_or_smash or 'Stop GC Rolling Goron as Adult' or (logic_dmt_climb_hovers and can_use(Hover_Boots)) or (logic_biggoron_bolero and not warp_songs and can_play(Bolero_of_Fire) and at('DMC Central Local', can_use(Hookshot) or can_use(Hover_Boots) or can_plant_bean))",
|
||||
"guarantee_hint": "(hints == 'mask' and Mask_of_Truth) or (hints == 'agony' and Stone_of_Agony) or (hints != 'mask' and hints != 'agony')",
|
||||
"has_fire_source": "can_use(Dins_Fire) or can_use(Fire_Arrows)",
|
||||
"has_fire_source_with_torch": "has_fire_source or (is_child and Sticks)",
|
||||
|
||||
# Gerudo Fortress
|
||||
"can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and (Small_Key_Gerudo_Fortress, 4) and (is_adult or Kokiri_Sword or is_glitched) and (is_adult and (Bow or Hookshot or Hover_Boots) or Gerudo_Membership_Card or logic_gerudo_kitchen or is_glitched))
|
||||
or (gerudo_fortress == 'fast' and Small_Key_Gerudo_Fortress and (is_adult or Kokiri_Sword or is_glitched))
|
||||
or (gerudo_fortress != 'normal' and gerudo_fortress != 'fast')",
|
||||
# Mirror shield does not count because it cannot reflect scrub attack.
|
||||
"has_shield": "(is_adult and Hylian_Shield) or (is_child and Deku_Shield)",
|
||||
"can_shield": "(is_adult and (Hylian_Shield or Mirror_Shield)) or (is_child and Deku_Shield)",
|
||||
"can_mega": "has_explosives and can_shield",
|
||||
"can_isg": "can_shield and (is_adult or Sticks or Kokiri_Sword)",
|
||||
"can_hover": "can_mega and can_isg",
|
||||
"can_weirdshot": "can_mega and can_use(Hookshot)",
|
||||
"can_jumpslash": "is_adult or Sticks or Kokiri_Sword",
|
||||
|
||||
# Bridge Requirements
|
||||
"has_all_stones": "Kokiri_Emerald and Goron_Ruby and Zora_Sapphire",
|
||||
"has_all_medallions": "Forest_Medallion and Fire_Medallion and Water_Medallion and Shadow_Medallion and Spirit_Medallion and Light_Medallion",
|
||||
"can_build_rainbow_bridge": "(
|
||||
(bridge == 'open') or
|
||||
(bridge == 'vanilla' and Shadow_Medallion and Spirit_Medallion and Light_Arrows) or
|
||||
(bridge == 'stones' and _oot_has_stones(bridge_stones)) or
|
||||
(bridge == 'medallions' and _oot_has_medallions(bridge_medallions)) or
|
||||
(bridge == 'dungeons' and _oot_has_dungeon_rewards(bridge_rewards)) or
|
||||
(bridge == 'tokens' and (Gold_Skulltula_Token, bridge_tokens)))",
|
||||
"can_trigger_lacs": "(
|
||||
(lacs_condition == 'vanilla' and Shadow_Medallion and Spirit_Medallion) or
|
||||
(lacs_condition == 'stones' and _oot_has_stones(lacs_stones)) or
|
||||
(lacs_condition == 'medallions' and _oot_has_medallions(lacs_medallions)) or
|
||||
(lacs_condition == 'dungeons' and _oot_has_dungeon_rewards(lacs_rewards)) or
|
||||
(lacs_condition == 'tokens' and (Gold_Skulltula_Token, lacs_tokens)))"
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Bottom of the Well",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"exits": {
|
||||
"Kakariko Village": "True",
|
||||
"Bottom of the Well Perimeter": "is_child"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Bottom of the Well Perimeter",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"locations": {
|
||||
"Bottom of the Well MQ Compass Chest": "
|
||||
Kokiri_Sword or (Sticks and logic_child_deadhand)",
|
||||
"Bottom of the Well MQ Dead Hand Freestanding Key": "
|
||||
has_explosives or (logic_botw_mq_dead_hand_key and Boomerang)",
|
||||
"Bottom of the Well MQ GS Basement": "can_child_attack",
|
||||
"Bottom of the Well MQ GS Coffin Room": "
|
||||
can_child_attack and (Small_Key_Bottom_of_the_Well, 2)",
|
||||
"Wall Fairy": "has_bottle and Slingshot" # The fairy pot is obsolete
|
||||
},
|
||||
"exits": {
|
||||
"Bottom of the Well": "True",
|
||||
"Bottom of the Well Middle": "
|
||||
can_play(Zeldas_Lullaby) or (logic_botw_mq_pits and has_explosives)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Bottom of the Well Middle",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"locations": {
|
||||
"Bottom of the Well MQ Map Chest": "True",
|
||||
"Bottom of the Well MQ Lens of Truth Chest": "
|
||||
has_explosives and (Small_Key_Bottom_of_the_Well, 2)",
|
||||
"Bottom of the Well MQ East Inner Room Freestanding Key": "True",
|
||||
"Bottom of the Well MQ GS West Inner Room": "
|
||||
can_child_attack and (logic_botw_mq_pits or has_explosives)"
|
||||
},
|
||||
"exits": {
|
||||
"Bottom of the Well Perimeter": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,53 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Bottom of the Well",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"exits": {
|
||||
"Kakariko Village": "True",
|
||||
"Bottom of the Well Main Area" : "is_child and (can_child_attack or Nuts)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Bottom of the Well Main Area",
|
||||
"dungeon": "Bottom of the Well",
|
||||
"locations": {
|
||||
"Bottom of the Well Front Left Fake Wall Chest": "logic_lens_botw or can_use(Lens_of_Truth)",
|
||||
"Bottom of the Well Front Center Bombable Chest": "has_explosives",
|
||||
"Bottom of the Well Right Bottom Fake Wall Chest": "logic_lens_botw or can_use(Lens_of_Truth)",
|
||||
"Bottom of the Well Compass Chest": "logic_lens_botw or can_use(Lens_of_Truth)",
|
||||
"Bottom of the Well Center Skulltula Chest": "logic_lens_botw or can_use(Lens_of_Truth)",
|
||||
"Bottom of the Well Back Left Bombable Chest": "has_explosives and (logic_lens_botw or can_use(Lens_of_Truth))",
|
||||
"Bottom of the Well Freestanding Key": "Sticks or can_use(Dins_Fire)",
|
||||
"Bottom of the Well Lens of Truth Chest": "
|
||||
can_play(Zeldas_Lullaby) and
|
||||
(Kokiri_Sword or (Sticks and logic_child_deadhand))",
|
||||
#Sword not strictly necessary but frankly being forced to do this with sticks isn't fair
|
||||
"Bottom of the Well Invisible Chest": "can_play(Zeldas_Lullaby) and (logic_lens_botw or can_use(Lens_of_Truth))",
|
||||
"Bottom of the Well Underwater Front Chest": "can_play(Zeldas_Lullaby)",
|
||||
"Bottom of the Well Underwater Left Chest": "can_play(Zeldas_Lullaby)",
|
||||
"Bottom of the Well Map Chest": "
|
||||
has_explosives or
|
||||
((((Small_Key_Bottom_of_the_Well, 3) and (logic_lens_botw or can_use(Lens_of_Truth))) or
|
||||
can_use(Dins_Fire) or (logic_botw_basement and Sticks)) and
|
||||
Progressive_Strength_Upgrade)",
|
||||
"Bottom of the Well Fire Keese Chest": "
|
||||
(Small_Key_Bottom_of_the_Well, 3) and (logic_lens_botw or can_use(Lens_of_Truth))", #These pits are really unfair.
|
||||
"Bottom of the Well Like Like Chest": "
|
||||
(Small_Key_Bottom_of_the_Well, 3) and (logic_lens_botw or can_use(Lens_of_Truth))",
|
||||
"Bottom of the Well GS West Inner Room": "
|
||||
Boomerang and (logic_lens_botw or can_use(Lens_of_Truth)) and
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Bottom of the Well GS East Inner Room": "
|
||||
Boomerang and (logic_lens_botw or can_use(Lens_of_Truth)) and
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Bottom of the Well GS Like Like Cage": "
|
||||
Boomerang and (logic_lens_botw or can_use(Lens_of_Truth)) and
|
||||
(Small_Key_Bottom_of_the_Well, 3)",
|
||||
"Stick Pot": "True",
|
||||
"Nut Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Bottom of the Well" : "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,107 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Deku Tree Lobby",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ Map Chest": "True",
|
||||
"Deku Tree MQ Slingshot Chest": "is_adult or can_child_attack",
|
||||
"Deku Tree MQ Slingshot Room Back Chest": "has_fire_source_with_torch or can_use(Bow)",
|
||||
"Deku Tree MQ Basement Chest": "has_fire_source_with_torch or can_use(Bow)",
|
||||
"Deku Tree MQ GS Lobby": "is_adult or can_child_attack",
|
||||
"Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang",
|
||||
"Deku Baba Nuts": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword or can_use(Dins_Fire)"
|
||||
},
|
||||
"exits": {
|
||||
"KF Outside Deku Tree": "True",
|
||||
"Deku Tree Compass Room": "
|
||||
here(can_use(Slingshot) or can_use(Bow)) and
|
||||
here(has_fire_source_with_torch or can_use(Bow))",
|
||||
"Deku Tree Basement Water Room Front": "
|
||||
here(can_use(Slingshot) or can_use(Bow)) and here(has_fire_source_with_torch)",
|
||||
"Deku Tree Basement Ledge": "logic_deku_b1_skip or here(is_adult)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Compass Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ Compass Chest": "True",
|
||||
"Deku Tree MQ GS Compass Room": "
|
||||
(can_use(Hookshot) or can_use(Boomerang)) and
|
||||
here(has_bombchus or
|
||||
(Bombs and (can_play(Song_of_Time) or is_adult)) or
|
||||
(can_use(Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs)))"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Basement Water Room Front",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ Before Spinning Log Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Basement Water Room Back": "
|
||||
logic_deku_mq_log or (is_child and (Deku_Shield or Hylian_Shield)) or
|
||||
can_use(Longshot) or (can_use(Hookshot) and can_use(Iron_Boots))",
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Basement Water Room Back",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ After Spinning Log Chest": "can_play(Song_of_Time)"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Basement Back Room": "
|
||||
(here(can_use(Sticks) or can_use(Dins_Fire)) or
|
||||
at('Deku Tree Basement Water Room Front', can_use(Fire_Arrows))) and
|
||||
here(is_adult or Kokiri_Sword or can_use_projectile or (Nuts and Sticks))",
|
||||
"Deku Tree Basement Water Room Front": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Basement Back Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ GS Basement Graves Room": "
|
||||
can_use(Longshot) or
|
||||
(can_play(Song_of_Time) and (can_use(Boomerang) or can_use(Hookshot)))",
|
||||
"Deku Tree MQ GS Basement Back Room": "
|
||||
here(has_fire_source_with_torch) and
|
||||
(can_use(Hookshot) or can_use(Boomerang))"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Basement Ledge": "is_child",
|
||||
"Deku Tree Basement Water Room Back": "
|
||||
can_use(Kokiri_Sword) or can_use_projectile or (Nuts and can_use(Sticks))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Basement Ledge",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree MQ Deku Scrub": "can_stun_deku",
|
||||
"Deku Tree Queen Gohma Heart": "
|
||||
here(has_fire_source_with_torch) and here(has_shield) and
|
||||
(is_adult or Kokiri_Sword or Sticks)",
|
||||
"Queen Gohma": "
|
||||
here(has_fire_source_with_torch) and here(has_shield) and
|
||||
(is_adult or Kokiri_Sword or Sticks)"
|
||||
},
|
||||
"events": {
|
||||
"Deku Tree Clear": "
|
||||
here(has_fire_source_with_torch) and here(has_shield) and
|
||||
(is_adult or Kokiri_Sword or Sticks)"
|
||||
},
|
||||
"exits" : {
|
||||
"Deku Tree Basement Back Room": "is_child",
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Deku Tree Lobby",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree Map Chest": "True",
|
||||
"Deku Tree Compass Chest": "True",
|
||||
"Deku Tree Compass Room Side Chest": "True",
|
||||
"Deku Tree Basement Chest": "is_adult or can_child_attack or Nuts",
|
||||
"Deku Tree GS Compass Room": "is_adult or can_child_attack",
|
||||
"Deku Tree GS Basement Vines": "
|
||||
can_use_projectile or can_use(Dins_Fire) or
|
||||
(logic_deku_basement_gs and (is_adult or Sticks or Kokiri_Sword))",
|
||||
"Deku Tree GS Basement Gate": "is_adult or can_child_attack",
|
||||
"Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang",
|
||||
"Deku Baba Nuts": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword or can_use(Dins_Fire)"
|
||||
},
|
||||
"exits": {
|
||||
"KF Outside Deku Tree": "True",
|
||||
"Deku Tree Slingshot Room": "here(has_shield)",
|
||||
"Deku Tree Basement Backroom": "
|
||||
(here(has_fire_source_with_torch or can_use(Bow)) and
|
||||
here(can_use(Slingshot) or can_use(Bow))) or
|
||||
(is_child and (logic_deku_b1_skip or here(is_adult)))",
|
||||
"Deku Tree Boss Room": "
|
||||
here(has_fire_source_with_torch or
|
||||
(logic_deku_b1_webs_with_bow and can_use(Bow))) and
|
||||
(logic_deku_b1_skip or here(is_adult or can_use(Slingshot)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Slingshot Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree Slingshot Chest": "True",
|
||||
"Deku Tree Slingshot Room Side Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Basement Backroom",
|
||||
"dungeon": "Deku Tree",
|
||||
"locations": {
|
||||
"Deku Tree GS Basement Back Room": "
|
||||
here(has_fire_source_with_torch or can_use(Bow)) and
|
||||
here(can_blast_or_smash) and
|
||||
(can_use(Boomerang) or can_use(Hookshot))"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Deku Tree Boss Room",
|
||||
"dungeon": "Deku Tree",
|
||||
"events": {
|
||||
"Deku Tree Clear": "
|
||||
here(has_shield) and (is_adult or Kokiri_Sword or Sticks)"
|
||||
},
|
||||
"locations": {
|
||||
"Deku Tree Queen Gohma Heart": "
|
||||
here(has_shield) and (is_adult or Kokiri_Sword or Sticks)",
|
||||
"Queen Gohma": "
|
||||
here(has_shield) and (is_adult or Kokiri_Sword or Sticks)"
|
||||
},
|
||||
"exits": {
|
||||
"Deku Tree Lobby": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,90 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Dodongos Cavern Beginning",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"exits": {
|
||||
"Death Mountain": "True",
|
||||
"Dodongos Cavern Lobby": "
|
||||
here(can_blast_or_smash or Progressive_Strength_Upgrade)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Lobby",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Deku Baba Sticks": "is_adult or Kokiri_Sword or can_use(Boomerang)",
|
||||
"Dodongos Cavern MQ Map Chest": "True",
|
||||
"Dodongos Cavern MQ Compass Chest": "is_adult or can_child_attack or Nuts",
|
||||
"Dodongos Cavern MQ Larvae Room Chest": "can_use(Sticks) or has_fire_source",
|
||||
"Dodongos Cavern MQ Torch Puzzle Room Chest": "
|
||||
can_blast_or_smash or can_use(Sticks) or can_use(Dins_Fire) or
|
||||
(is_adult and (logic_dc_jump or Hover_Boots or Progressive_Hookshot))",
|
||||
"Dodongos Cavern MQ GS Song of Time Block Room": "
|
||||
can_play(Song_of_Time) and (can_child_attack or is_adult)",
|
||||
"Dodongos Cavern MQ GS Larvae Room": "can_use(Sticks) or has_fire_source",
|
||||
"Dodongos Cavern MQ GS Lizalfos Room": "can_blast_or_smash",
|
||||
"Dodongos Cavern MQ Deku Scrub Lobby Rear": "can_stun_deku",
|
||||
"Dodongos Cavern MQ Deku Scrub Lobby Front": "can_stun_deku",
|
||||
"Dodongos Cavern MQ Deku Scrub Staircase": "can_stun_deku",
|
||||
"Dodongos Cavern Gossip Stone": "True",
|
||||
"Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lower Right Side": "
|
||||
here(can_blast_or_smash or
|
||||
((can_use(Sticks) or can_use(Dins_Fire)) and can_take_damage))",
|
||||
"Dodongos Cavern Bomb Bag Area": "
|
||||
is_adult or (here(is_adult) and has_explosives) or
|
||||
(logic_dc_mq_child_bombs and (Kokiri_Sword or Sticks) and can_take_damage)",
|
||||
"Dodongos Cavern Boss Area": "
|
||||
has_explosives or
|
||||
(logic_dc_mq_eyes and Progressive_Strength_Upgrade and
|
||||
(is_adult or logic_dc_mq_child_back) and
|
||||
(here(can_use(Sticks)) or can_use(Dins_Fire) or
|
||||
(is_adult and (logic_dc_jump or Hammer or Hover_Boots or Hookshot))))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Lower Right Side",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos": "can_stun_deku"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Bomb Bag Area": "
|
||||
(here(can_use(Bow)) or Progressive_Strength_Upgrade or
|
||||
can_use(Dins_Fire) or has_explosives) and
|
||||
can_use(Slingshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Bomb Bag Area",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern MQ Bomb Bag Chest": "True",
|
||||
"Dodongos Cavern MQ GS Scrub Room": "
|
||||
(here(can_use(Bow)) or Progressive_Strength_Upgrade or
|
||||
can_use(Dins_Fire) or has_explosives) and
|
||||
(can_use(Hookshot) or can_use(Boomerang))"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lower Right Side": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Boss Area",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern MQ Under Grave Chest": "True",
|
||||
"Dodongos Cavern Boss Room Chest": "True",
|
||||
"Dodongos Cavern King Dodongo Heart": "
|
||||
can_blast_or_smash and (Bombs or Progressive_Strength_Upgrade) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"King Dodongo": "
|
||||
can_blast_or_smash and (Bombs or Progressive_Strength_Upgrade) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"Dodongos Cavern MQ GS Back Area": "True",
|
||||
"Fairy Pot": "has_bottle"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,105 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Dodongos Cavern Beginning",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"exits": {
|
||||
"Death Mountain": "True",
|
||||
"Dodongos Cavern Lobby": "
|
||||
here(can_blast_or_smash or Progressive_Strength_Upgrade)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Lobby",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Map Chest": "True",
|
||||
"Dodongos Cavern GS Side Room Near Lower Lizalfos": "
|
||||
has_explosives or is_adult or Slingshot or
|
||||
Boomerang or Sticks or Kokiri_Sword",
|
||||
"Dodongos Cavern GS Scarecrow": "
|
||||
can_use(Scarecrow) or can_use(Longshot) or
|
||||
(logic_dc_scarecrow_gs and (is_adult or can_child_attack))",
|
||||
"Dodongos Cavern Deku Scrub Side Room Near Dodongos": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword",
|
||||
"Dodongos Cavern Deku Scrub Lobby": "True",
|
||||
"Dodongos Cavern Gossip Stone": "True",
|
||||
"Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Beginning": "True",
|
||||
"Dodongos Cavern Staircase Room": "
|
||||
here(is_adult or Sticks or
|
||||
(can_use(Dins_Fire) and (Slingshot or has_explosives or Kokiri_Sword)))",
|
||||
"Dodongos Cavern Far Bridge": "at('Dodongos Cavern Far Bridge', True)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Staircase Room",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Compass Chest": "True",
|
||||
"Dodongos Cavern GS Vines Above Stairs": "
|
||||
has_explosives or Progressive_Strength_Upgrade or can_use(Dins_Fire) or
|
||||
(logic_dc_staircase and can_use(Bow)) or
|
||||
(logic_dc_vines_gs and can_use(Longshot))"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lobby": "True",
|
||||
"Dodongos Cavern Climb": "
|
||||
has_explosives or Progressive_Strength_Upgrade or
|
||||
can_use(Dins_Fire) or (logic_dc_staircase and can_use(Bow))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Climb",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Bomb Flower Platform Chest": "True",
|
||||
"Dodongos Cavern Deku Scrub Near Bomb Bag Right": "
|
||||
can_blast_or_smash or
|
||||
(logic_dc_scrub_room and is_adult and Progressive_Strength_Upgrade)",
|
||||
"Dodongos Cavern Deku Scrub Near Bomb Bag Left": "
|
||||
can_blast_or_smash or
|
||||
(logic_dc_scrub_room and is_adult and Progressive_Strength_Upgrade)"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lobby": "True",
|
||||
"Dodongos Cavern Far Bridge": "
|
||||
(is_child and (Slingshot or
|
||||
(logic_dc_slingshot_skip and (Sticks or has_explosives or Kokiri_Sword)))) or
|
||||
(is_adult and (Bow or Hover_Boots or can_use(Longshot) or logic_dc_jump))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Far Bridge",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Bomb Bag Chest": "True",
|
||||
"Dodongos Cavern End of Bridge Chest": "can_blast_or_smash",
|
||||
"Dodongos Cavern GS Alcove Above Stairs": "can_use(Hookshot) or can_use(Boomerang)"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Boss Area": "has_explosives",
|
||||
"Dodongos Cavern Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Dodongos Cavern Boss Area",
|
||||
"dungeon": "Dodongos Cavern",
|
||||
"locations": {
|
||||
"Dodongos Cavern Boss Room Chest": "True",
|
||||
"Dodongos Cavern King Dodongo Heart": "
|
||||
(Bombs or Progressive_Strength_Upgrade) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"King Dodongo": "
|
||||
(Bombs or Progressive_Strength_Upgrade) and
|
||||
(is_adult or Sticks or Kokiri_Sword)",
|
||||
"Dodongos Cavern GS Back Room": "True",
|
||||
"Fairy Pot": "has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Dodongos Cavern Lobby": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,114 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Fire Temple Lower",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Map Room Side Chest": "
|
||||
is_adult or Kokiri_Sword or Sticks or Slingshot or Bombs or can_use(Dins_Fire)",
|
||||
"Fire Temple MQ Near Boss Chest": "
|
||||
(logic_fewer_tunic_requirements or can_use(Goron_Tunic)) and
|
||||
(((can_use(Hover_Boots) or (logic_fire_mq_near_boss and can_use(Bow))) and has_fire_source) or
|
||||
(can_use(Hookshot) and (can_use(Fire_Arrows) or
|
||||
(can_use(Dins_Fire) and
|
||||
((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or
|
||||
can_use(Goron_Tunic) or can_use(Bow) or can_use(Longshot))))))"
|
||||
},
|
||||
"exits": {
|
||||
"DMC Fire Temple Entrance": "True",
|
||||
"Fire Boss Room": "
|
||||
can_use(Goron_Tunic) and can_use(Megaton_Hammer) and Boss_Key_Fire_Temple and
|
||||
((has_fire_source and (logic_fire_boss_door_jump or Hover_Boots)) or at('Fire Temple Upper', True))",
|
||||
"Fire Lower Locked Door": "(Small_Key_Fire_Temple, 5) and (is_adult or Kokiri_Sword)",
|
||||
"Fire Big Lava Room": "
|
||||
(logic_fewer_tunic_requirements or can_use(Goron_Tunic)) and can_use(Megaton_Hammer)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Lower Locked Door",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Megaton Hammer Chest": "is_adult and (has_explosives or Megaton_Hammer or Hookshot)",
|
||||
"Fire Temple MQ Map Chest": "can_use(Megaton_Hammer)",
|
||||
"Fairy Pot": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Big Lava Room",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Boss Key Chest": "
|
||||
has_fire_source and (Bow or logic_fire_mq_bk_chest) and can_use(Hookshot)",
|
||||
"Fire Temple MQ Big Lava Room Blocked Door Chest": "
|
||||
has_fire_source and has_explosives and
|
||||
(can_use(Hookshot) or logic_fire_mq_blocked_chest)",
|
||||
"Fire Temple MQ GS Big Lava Room Open Door": "True",
|
||||
"Fairy Pot": "
|
||||
has_bottle and has_fire_source and (Bow or logic_fire_mq_bk_chest) and
|
||||
(can_use(Hookshot) or logic_fire_song_of_time)"
|
||||
|
||||
},
|
||||
"exits": {
|
||||
"Fire Lower Maze": "
|
||||
can_use(Goron_Tunic) and (Small_Key_Fire_Temple, 2) and
|
||||
(has_fire_source or (logic_fire_mq_climb and Hover_Boots))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Lower Maze",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Lizalfos Maze Lower Chest": "True",
|
||||
"Fire Temple MQ Lizalfos Maze Side Room Chest": "
|
||||
has_explosives and (logic_fire_mq_maze_side_room or at('Fire Upper Maze', True))"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Upper Maze": "
|
||||
((has_explosives or logic_rusted_switches) and can_use(Hookshot)) or
|
||||
(logic_fire_mq_maze_hovers and can_use(Hover_Boots)) or logic_fire_mq_maze_jump"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Upper Maze",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Lizalfos Maze Upper Chest": "True",
|
||||
"Fire Temple MQ Compass Chest": "has_explosives",
|
||||
"Fire Temple MQ GS Skull On Fire": "
|
||||
(can_play(Song_of_Time) and can_use(Hookshot) and (has_explosives or logic_rusted_switches)) or
|
||||
can_use(Longshot)",
|
||||
"Wall Fairy": "
|
||||
has_bottle and
|
||||
((can_play(Song_of_Time) and can_use(Hookshot) and (has_explosives or logic_rusted_switches)) or
|
||||
can_use(Longshot))",
|
||||
"Fairy Pot": "has_bottle and (Small_Key_Fire_Temple, 3)"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Upper": "
|
||||
(Small_Key_Fire_Temple, 3) and
|
||||
((can_use(Bow) and can_use(Hookshot)) or can_use(Fire_Arrows))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Upper",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple MQ Freestanding Key": "can_use(Hookshot) or logic_fire_mq_flame_maze",
|
||||
"Fire Temple MQ Chest On Fire": "
|
||||
(can_use(Hookshot) or logic_fire_mq_flame_maze) and (Small_Key_Fire_Temple, 4)",
|
||||
"Fire Temple MQ GS Fire Wall Maze Side Room": "
|
||||
can_play(Song_of_Time) or Hover_Boots or logic_fire_mq_flame_maze",
|
||||
"Fire Temple MQ GS Fire Wall Maze Center": "has_explosives",
|
||||
"Fire Temple MQ GS Above Fire Wall Maze": "
|
||||
(can_use(Hookshot) and (Small_Key_Fire_Temple, 5)) or
|
||||
(logic_fire_mq_above_maze_gs and can_use(Longshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Boss Room",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Volvagia Heart": "True",
|
||||
"Volvagia": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,91 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Fire Temple Lower",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Near Boss Chest" : "
|
||||
logic_fewer_tunic_requirements or can_use(Goron_Tunic)",
|
||||
"Fire Temple Flare Dancer Chest": "
|
||||
((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)",
|
||||
"Fire Temple Boss Key Chest": "
|
||||
((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)",
|
||||
"Fire Temple Volvagia Heart": "
|
||||
can_use(Goron_Tunic) and can_use(Megaton_Hammer) and Boss_Key_Fire_Temple and
|
||||
(logic_fire_boss_door_jump or Hover_Boots or
|
||||
at('Fire Temple Upper', can_play(Song_of_Time) or has_explosives))",
|
||||
"Volvagia": "
|
||||
can_use(Goron_Tunic) and can_use(Megaton_Hammer) and Boss_Key_Fire_Temple and
|
||||
(logic_fire_boss_door_jump or Hover_Boots or
|
||||
at('Fire Temple Upper', can_play(Song_of_Time) or has_explosives))",
|
||||
"Fire Temple GS Boss Key Loop": "
|
||||
((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)",
|
||||
"Fairy Pot": "
|
||||
has_bottle and (can_use(Hover_Boots) or can_use(Hookshot)) and
|
||||
(logic_fewer_tunic_requirements or can_use(Goron_Tunic))"
|
||||
},
|
||||
"exits": {
|
||||
"DMC Fire Temple Entrance": "True",
|
||||
"Fire Temple Big Lava Room":"
|
||||
(Small_Key_Fire_Temple, 2) and
|
||||
(logic_fewer_tunic_requirements or can_use(Goron_Tunic))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Big Lava Room",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Big Lava Room Lower Open Door Chest": "True",
|
||||
"Fire Temple Big Lava Room Blocked Door Chest": "is_adult and has_explosives",
|
||||
"Fire Temple GS Song of Time Room": "
|
||||
is_adult and (can_play(Song_of_Time) or logic_fire_song_of_time)"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Lower": "True",
|
||||
"Fire Temple Middle": "
|
||||
can_use(Goron_Tunic) and (Small_Key_Fire_Temple, 4) and
|
||||
(Progressive_Strength_Upgrade or logic_fire_strength) and
|
||||
(has_explosives or Bow or Progressive_Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Middle",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Boulder Maze Lower Chest": "True",
|
||||
"Fire Temple Boulder Maze Upper Chest": "(Small_Key_Fire_Temple, 6)",
|
||||
"Fire Temple Boulder Maze Side Room Chest": "True",
|
||||
"Fire Temple Boulder Maze Shortcut Chest": "
|
||||
(Small_Key_Fire_Temple, 6) and has_explosives",
|
||||
"Fire Temple Scarecrow Chest": "
|
||||
(Small_Key_Fire_Temple, 6) and
|
||||
(can_use(Scarecrow) or (logic_fire_scarecrow and can_use(Longshot)))",
|
||||
"Fire Temple Map Chest": "
|
||||
(Small_Key_Fire_Temple, 6) or ((Small_Key_Fire_Temple, 5) and can_use(Bow))",
|
||||
"Fire Temple Compass Chest": "(Small_Key_Fire_Temple, 7)",
|
||||
"Fire Temple GS Boulder Maze": "(Small_Key_Fire_Temple, 4) and has_explosives",
|
||||
"Fire Temple GS Scarecrow Climb": "
|
||||
(Small_Key_Fire_Temple, 6) and
|
||||
(can_use(Scarecrow) or (logic_fire_scarecrow and can_use(Longshot)))",
|
||||
"Fire Temple GS Scarecrow Top": "
|
||||
(Small_Key_Fire_Temple, 6) and
|
||||
(can_use(Scarecrow) or (logic_fire_scarecrow and can_use(Longshot)))"
|
||||
},
|
||||
"exits": {
|
||||
"Fire Temple Upper": "
|
||||
(Small_Key_Fire_Temple, 8) or
|
||||
((Small_Key_Fire_Temple, 7) and
|
||||
((can_use(Hover_Boots) and can_use(Megaton_Hammer)) or logic_fire_flame_maze))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Fire Temple Upper",
|
||||
"dungeon": "Fire Temple",
|
||||
"locations": {
|
||||
"Fire Temple Highest Goron Chest": "
|
||||
can_use(Megaton_Hammer) and
|
||||
(can_play(Song_of_Time) or (logic_rusted_switches and
|
||||
(can_use(Hover_Boots) or has_explosives)))",
|
||||
"Fire Temple Megaton Hammer Chest": "has_explosives"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,167 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Forest Temple Lobby",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ First Room Chest": "
|
||||
is_adult or Bombs or can_use(Sticks) or Nuts or can_use(Boomerang) or
|
||||
can_use(Dins_Fire) or Kokiri_Sword or can_use(Slingshot)",
|
||||
"Forest Temple MQ GS First Hallway": "can_use(Hookshot) or can_use(Boomerang)"
|
||||
},
|
||||
"exits": {
|
||||
"SFM Forest Temple Entrance Ledge": "True",
|
||||
"Forest Temple Central Area": "
|
||||
(Small_Key_Forest_Temple, 1) and (is_adult or can_child_attack or Nuts)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Central Area",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Wolfos Chest": "
|
||||
(can_play(Song_of_Time) or is_child) and
|
||||
(is_adult or can_use(Dins_Fire) or
|
||||
can_use(Sticks) or can_use(Slingshot) or Kokiri_Sword)",
|
||||
"Forest Temple MQ GS Block Push Room": "is_adult or Kokiri_Sword",
|
||||
"Fairy Pot": "has_bottle and (can_play(Song_of_Time) or is_child)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Forest Temple NE Outdoors": "can_use(Bow) or can_use(Slingshot)",
|
||||
# End of the road for child
|
||||
"Forest Temple After Block Puzzle": "
|
||||
is_adult and (Progressive_Strength_Upgrade or
|
||||
(logic_forest_mq_block_puzzle and has_bombchus and can_use(Hookshot)))",
|
||||
"Forest Temple Outdoor Ledge": "
|
||||
(logic_forest_mq_hallway_switch_jumpslash and can_use(Hover_Boots)) or
|
||||
(logic_forest_mq_hallway_switch_hookshot and can_use(Hookshot))",
|
||||
"Forest Temple Boss Region": "
|
||||
Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple After Block Puzzle",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Boss Key Chest": "(Small_Key_Forest_Temple, 3)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Bow Region": "(Small_Key_Forest_Temple, 4)",
|
||||
"Forest Temple Outdoor Ledge": "
|
||||
(Small_Key_Forest_Temple, 3) or
|
||||
(logic_forest_mq_hallway_switch_jumpslash and
|
||||
(can_use(Hookshot) or logic_forest_outside_backdoor))",
|
||||
"Forest Temple NW Outdoors": "(Small_Key_Forest_Temple, 2)"
|
||||
# Only 2 keys because you must have had access to falling ceiling room to have wasted a key there
|
||||
# and access to falling ceiling room means you must also have had to access to the lower area of this courtyard
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outdoor Ledge",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Redead Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NW Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ GS Level Island Courtyard": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "
|
||||
can_use(Iron_Boots) or can_use(Longshot) or
|
||||
(Progressive_Scale, 2) or (logic_forest_well_swim and can_use(Hookshot))",
|
||||
"Forest Temple Outdoors Top Ledges": "can_use(Fire_Arrows)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NE Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Well Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Forest Temple MQ GS Raised Island Courtyard": "
|
||||
can_use(Hookshot) or can_use(Boomerang) or
|
||||
(can_use(Fire_Arrows) and
|
||||
(can_play(Song_of_Time) or (can_use(Hover_Boots) and logic_forest_door_frame)))",
|
||||
"Forest Temple MQ GS Well": "
|
||||
(can_use(Iron_Boots) and can_use(Hookshot)) or can_use(Bow) or can_use(Slingshot)",
|
||||
"Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang",
|
||||
"Deku Baba Nuts": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword or can_use(Dins_Fire)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outdoors Top Ledges": "
|
||||
can_use(Hookshot) and
|
||||
(can_use(Longshot) or can_use(Hover_Boots) or can_play(Song_of_Time) or
|
||||
logic_forest_vines)",
|
||||
"Forest Temple NE Outdoors Ledge": "can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outdoors Top Ledges",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Raised Island Courtyard Upper Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "True",
|
||||
"Forest Temple NE Outdoors Ledge": "logic_forest_outdoors_ledge and can_use(Hover_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NE Outdoors Ledge",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Raised Island Courtyard Lower Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "True",
|
||||
"Forest Temple Falling Room": "can_play(Song_of_Time)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Bow Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Jo and Beth": "can_use(Bow)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple MQ Bow Chest": "True",
|
||||
"Forest Temple MQ Map Chest": "can_use(Bow)",
|
||||
"Forest Temple MQ Compass Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Falling Room": "
|
||||
(Small_Key_Forest_Temple, 5) and (can_use(Bow) or can_use(Dins_Fire))"
|
||||
# Only 5 keys because you must have had access to falling ceiling room to have wasted a key there
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Falling Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Amy and Meg": "can_use(Bow) and (Small_Key_Forest_Temple, 6)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple MQ Falling Ceiling Room Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors Ledge": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Boss Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple MQ Basement Chest": "True",
|
||||
"Forest Temple Phantom Ganon Heart": "Boss_Key_Forest_Temple",
|
||||
"Phantom Ganon": "Boss_Key_Forest_Temple"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,158 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Forest Temple Lobby",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple First Room Chest": "True",
|
||||
"Forest Temple First Stalfos Chest": "is_adult or Kokiri_Sword",
|
||||
"Forest Temple GS First Room": "
|
||||
(is_adult and (Hookshot or Bow or Bombs)) or (is_child and (Boomerang or Slingshot)) or
|
||||
has_bombchus or can_use(Dins_Fire) or (logic_forest_first_gs and (Bombs or
|
||||
(can_jumpslash and can_take_damage)))",
|
||||
"Forest Temple GS Lobby": "can_use(Hookshot) or can_use(Boomerang)",
|
||||
"Fairy Pot": "has_bottle and (is_adult or can_child_attack or Nuts)"
|
||||
},
|
||||
"exits": {
|
||||
"SFM Forest Temple Entrance Ledge": "True",
|
||||
"Forest Temple NW Outdoors": "can_play(Song_of_Time) or is_child",
|
||||
"Forest Temple NE Outdoors": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Forest Temple Block Push Room": "(Small_Key_Forest_Temple, 1)",
|
||||
"Forest Temple Boss Region": "Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NW Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple GS Level Island Courtyard": "
|
||||
can_use(Longshot) or
|
||||
at('Forest Temple Outside Upper Ledge', can_use(Hookshot))",
|
||||
"Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang",
|
||||
"Deku Baba Nuts": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword or can_use(Dins_Fire)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "(Progressive_Scale, 2)",
|
||||
#Other methods of crossing through the well are not currently relevant.
|
||||
"Forest Temple Outdoors High Balconies": "
|
||||
here(is_adult or has_explosives or
|
||||
((Boomerang or Nuts or Deku_Shield) and
|
||||
(Sticks or Kokiri_Sword or Slingshot)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple NE Outdoors",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Raised Island Courtyard Chest": "
|
||||
can_use(Hookshot) or
|
||||
at('Forest Temple Falling Room', True) or
|
||||
(logic_forest_outdoors_ledge and can_use(Hover_Boots) and at('Forest Temple Outdoors High Balconies', True))",
|
||||
"Forest Temple GS Raised Island Courtyard": "
|
||||
can_use(Hookshot) or (logic_forest_outdoor_east_gs and can_use(Boomerang)) or
|
||||
at('Forest Temple Falling Room', can_use(Bow) or can_use(Dins_Fire) or has_explosives)",
|
||||
"Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang",
|
||||
"Deku Baba Nuts": "
|
||||
is_adult or Slingshot or Sticks or
|
||||
has_explosives or Kokiri_Sword or can_use(Dins_Fire)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outdoors High Balconies": "
|
||||
can_use(Longshot) or (logic_forest_vines and can_use(Hookshot))",
|
||||
#Longshot can grab some very high up vines to drain the well.
|
||||
"Forest Temple NW Outdoors": "can_use(Iron_Boots) or (Progressive_Scale, 2)",
|
||||
"Forest Temple Lobby": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outdoors High Balconies",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Well Chest": "True",
|
||||
"Forest Temple Map Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True",
|
||||
"Forest Temple NE Outdoors": "True",
|
||||
"Forest Temple Falling Room": "
|
||||
logic_forest_door_frame and can_use(Hover_Boots) and can_use(Scarecrow)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Falling Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Amy and Meg": "can_use(Bow)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple Falling Ceiling Room Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NE Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Block Push Room",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Eye Switch Chest": "
|
||||
Progressive_Strength_Upgrade and (can_use(Bow) or can_use(Slingshot))"
|
||||
},
|
||||
"exits": {
|
||||
#end of the road for child forest. No hovers and too short to climb push blocks
|
||||
"Forest Temple Outside Upper Ledge": "
|
||||
can_use(Hover_Boots) or (logic_forest_outside_backdoor and is_adult and Progressive_Strength_Upgrade)",
|
||||
"Forest Temple Bow Region": "
|
||||
Progressive_Strength_Upgrade and (Small_Key_Forest_Temple, 3) and is_adult",
|
||||
"Forest Temple Straightened Hall": "
|
||||
Progressive_Strength_Upgrade and (Small_Key_Forest_Temple, 2) and can_use(Bow)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Straightened Hall",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Boss Key Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Outside Upper Ledge": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Outside Upper Ledge",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Floormaster Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple NW Outdoors": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Bow Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"events": {
|
||||
"Forest Temple Jo and Beth": "can_use(Bow)"
|
||||
},
|
||||
"locations": {
|
||||
"Forest Temple Bow Chest": "True",
|
||||
"Forest Temple Red Poe Chest": "can_use(Bow)",
|
||||
"Forest Temple Blue Poe Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Forest Temple Falling Room": "
|
||||
(Small_Key_Forest_Temple, 5) and (Bow or can_use(Dins_Fire))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Forest Temple Boss Region",
|
||||
"dungeon": "Forest Temple",
|
||||
"locations": {
|
||||
"Forest Temple Basement Chest": "True",
|
||||
"Forest Temple Phantom Ganon Heart": "Boss_Key_Forest_Temple",
|
||||
"Phantom Ganon": "Boss_Key_Forest_Temple",
|
||||
"Forest Temple GS Basement": "can_use(Hookshot) or can_use(Boomerang)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,130 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ganons Castle Lobby",
|
||||
"dungeon": "Ganons Castle",
|
||||
"exits": {
|
||||
"Castle Grounds": "True",
|
||||
"Ganons Castle Forest Trial": "True",
|
||||
"Ganons Castle Fire Trial": "True",
|
||||
"Ganons Castle Water Trial": "True",
|
||||
"Ganons Castle Shadow Trial": "True",
|
||||
"Ganons Castle Spirit Trial": "True",
|
||||
"Ganons Castle Light Trial": "can_use(Golden_Gauntlets)",
|
||||
"Ganons Castle Tower": "
|
||||
(skipped_trials[Forest] or 'Forest Trial Clear') and
|
||||
(skipped_trials[Fire] or 'Fire Trial Clear') and
|
||||
(skipped_trials[Water] or 'Water Trial Clear') and
|
||||
(skipped_trials[Shadow] or 'Shadow Trial Clear') and
|
||||
(skipped_trials[Spirit] or 'Spirit Trial Clear') and
|
||||
(skipped_trials[Light] or 'Light Trial Clear')",
|
||||
"Ganons Castle Deku Scrubs": "logic_lens_castle_mq or can_use(Lens_of_Truth)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Deku Scrubs",
|
||||
"dungeon": "Ganons Castle",
|
||||
"locations": {
|
||||
"Ganons Castle MQ Deku Scrub Center-Left": "True",
|
||||
"Ganons Castle MQ Deku Scrub Center": "True",
|
||||
"Ganons Castle MQ Deku Scrub Center-Right": "True",
|
||||
"Ganons Castle MQ Deku Scrub Left": "True",
|
||||
"Ganons Castle MQ Deku Scrub Right": "True",
|
||||
"Free Fairies": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Forest Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Forest Trial Clear": "can_use(Light_Arrows) and can_play(Song_of_Time)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Forest Trial Eye Switch Chest": "Bow",
|
||||
"Ganons Castle MQ Forest Trial Frozen Eye Switch Chest": "has_fire_source",
|
||||
"Ganons Castle MQ Forest Trial Freestanding Key": "Progressive_Hookshot"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Fire Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Fire Trial Clear": "
|
||||
can_use(Goron_Tunic) and can_use(Golden_Gauntlets) and can_use(Light_Arrows) and
|
||||
(can_use(Longshot) or Hover_Boots or (logic_fire_trial_mq and can_use(Hookshot)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Water Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Water Trial Clear": "
|
||||
Blue_Fire and can_use(Light_Arrows) and
|
||||
(Small_Key_Ganons_Castle, 3)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Water Trial Chest": "Blue_Fire",
|
||||
"Blue Fire": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Shadow Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Shadow Trial Clear": "
|
||||
can_use(Light_Arrows) and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(Hover_Boots or (Progressive_Hookshot and (has_fire_source or logic_shadow_trial_mq)))"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Shadow Trial Bomb Flower Chest": "
|
||||
(Bow and (Progressive_Hookshot or Hover_Boots)) or
|
||||
(Hover_Boots and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(has_explosives or Progressive_Strength_Upgrade or can_use(Dins_Fire)))",
|
||||
"Ganons Castle MQ Shadow Trial Eye Switch Chest": "
|
||||
Bow and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(Hover_Boots or (Progressive_Hookshot and (has_fire_source or logic_shadow_trial_mq)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Spirit Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Spirit Trial Clear": "
|
||||
can_use(Light_Arrows) and Megaton_Hammer and
|
||||
has_bombchus and Fire_Arrows and Mirror_Shield"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Spirit Trial First Chest": "(Bow or logic_rusted_switches) and Megaton_Hammer",
|
||||
"Ganons Castle MQ Spirit Trial Invisible Chest": "
|
||||
(Bow or logic_rusted_switches) and Megaton_Hammer and
|
||||
has_bombchus and (logic_lens_castle_mq or can_use(Lens_of_Truth))",
|
||||
"Ganons Castle MQ Spirit Trial Sun Front Left Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Ganons Castle MQ Spirit Trial Sun Back Left Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Ganons Castle MQ Spirit Trial Golden Gauntlets Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Ganons Castle MQ Spirit Trial Sun Back Right Chest": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield",
|
||||
"Nut Pot": "
|
||||
Megaton_Hammer and has_bombchus and
|
||||
can_use(Fire_Arrows) and Mirror_Shield"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Light Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Light Trial Clear": "
|
||||
can_use(Light_Arrows) and (Small_Key_Ganons_Castle, 3) and
|
||||
(logic_lens_castle_mq or can_use(Lens_of_Truth)) and
|
||||
(Progressive_Hookshot or logic_light_trial_mq)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle MQ Light Trial Lullaby Chest": "can_play(Zeldas_Lullaby)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,123 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ganons Castle Lobby",
|
||||
"dungeon": "Ganons Castle",
|
||||
"exits": {
|
||||
"Castle Grounds": "True",
|
||||
"Ganons Castle Forest Trial": "True",
|
||||
"Ganons Castle Fire Trial": "True",
|
||||
"Ganons Castle Water Trial": "True",
|
||||
"Ganons Castle Shadow Trial": "True",
|
||||
"Ganons Castle Spirit Trial": "True",
|
||||
"Ganons Castle Light Trial": "can_use(Golden_Gauntlets)",
|
||||
"Ganons Castle Tower": "
|
||||
(skipped_trials[Forest] or 'Forest Trial Clear') and
|
||||
(skipped_trials[Fire] or 'Fire Trial Clear') and
|
||||
(skipped_trials[Water] or 'Water Trial Clear') and
|
||||
(skipped_trials[Shadow] or 'Shadow Trial Clear') and
|
||||
(skipped_trials[Spirit] or 'Spirit Trial Clear') and
|
||||
(skipped_trials[Light] or 'Light Trial Clear')",
|
||||
"Ganons Castle Deku Scrubs": "logic_lens_castle or can_use(Lens_of_Truth)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Deku Scrubs",
|
||||
"dungeon": "Ganons Castle",
|
||||
"locations": {
|
||||
"Ganons Castle Deku Scrub Center-Left": "True",
|
||||
"Ganons Castle Deku Scrub Center-Right": "True",
|
||||
"Ganons Castle Deku Scrub Right": "True",
|
||||
"Ganons Castle Deku Scrub Left": "True",
|
||||
"Free Fairies": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Forest Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Forest Trial Clear": "can_use(Light_Arrows) and (Fire_Arrows or Dins_Fire)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Forest Trial Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Fire Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Fire Trial Clear": "
|
||||
can_use(Goron_Tunic) and can_use(Golden_Gauntlets) and
|
||||
can_use(Light_Arrows) and can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Water Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Water Trial Clear": "Blue_Fire and Megaton_Hammer and can_use(Light_Arrows)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Water Trial Left Chest": "True",
|
||||
"Ganons Castle Water Trial Right Chest": "True",
|
||||
"Fairy Pot": "Blue_Fire and has_bottle",
|
||||
"Blue Fire": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Shadow Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Shadow Trial Clear": "
|
||||
can_use(Light_Arrows) and Megaton_Hammer and
|
||||
((Fire_Arrows and (logic_lens_castle or can_use(Lens_of_Truth))) or
|
||||
(can_use(Longshot) and (Hover_Boots or (Dins_Fire and (logic_lens_castle or can_use(Lens_of_Truth))))))"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Shadow Trial Front Chest": "
|
||||
can_use(Fire_Arrows) or Progressive_Hookshot or
|
||||
Hover_Boots or can_play(Song_of_Time)",
|
||||
"Ganons Castle Shadow Trial Golden Gauntlets Chest": "
|
||||
can_use(Fire_Arrows) or
|
||||
(can_use(Longshot) and (Hover_Boots or can_use(Dins_Fire)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Spirit Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Spirit Trial Clear": "
|
||||
can_use(Light_Arrows) and Mirror_Shield and has_bombchus and
|
||||
(logic_spirit_trial_hookshot or Progressive_Hookshot)"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Spirit Trial Crystal Switch Chest": "
|
||||
(logic_spirit_trial_hookshot or Progressive_Hookshot)",
|
||||
"Ganons Castle Spirit Trial Invisible Chest": "
|
||||
(logic_spirit_trial_hookshot or Progressive_Hookshot) and
|
||||
has_bombchus and (logic_lens_castle or can_use(Lens_of_Truth))",
|
||||
"Nut Pot": "
|
||||
(logic_spirit_trial_hookshot or Progressive_Hookshot) and
|
||||
has_bombchus and Bow and Mirror_Shield"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ganons Castle Light Trial",
|
||||
"dungeon": "Ganons Castle",
|
||||
"events": {
|
||||
"Light Trial Clear": "
|
||||
can_use(Light_Arrows) and Progressive_Hookshot and
|
||||
(Small_Key_Ganons_Castle, 2) and (logic_lens_castle or can_use(Lens_of_Truth))"
|
||||
},
|
||||
"locations": {
|
||||
"Ganons Castle Light Trial First Left Chest": "True",
|
||||
"Ganons Castle Light Trial Second Left Chest": "True",
|
||||
"Ganons Castle Light Trial Third Left Chest": "True",
|
||||
"Ganons Castle Light Trial First Right Chest": "True",
|
||||
"Ganons Castle Light Trial Second Right Chest": "True",
|
||||
"Ganons Castle Light Trial Third Right Chest": "True",
|
||||
"Ganons Castle Light Trial Invisible Enemies Chest": "logic_lens_castle or can_use(Lens_of_Truth)",
|
||||
"Ganons Castle Light Trial Lullaby Chest": "
|
||||
can_play(Zeldas_Lullaby) and (Small_Key_Ganons_Castle, 1)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,98 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Lobby",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Lobby Left Chest": "True",
|
||||
"Gerudo Training Grounds MQ Lobby Right Chest": "True",
|
||||
"Gerudo Training Grounds MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)",
|
||||
"Gerudo Training Grounds MQ Maze Path First Chest": "True",
|
||||
"Gerudo Training Grounds MQ Maze Path Second Chest": "True",
|
||||
"Gerudo Training Grounds MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 1)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Fortress": "True",
|
||||
"Gerudo Training Grounds Left Side": "here(has_fire_source)",
|
||||
"Gerudo Training Grounds Right Side": "here(can_use(Bow) or can_use(Slingshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Right Side",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Dinolfos Chest": "is_adult",
|
||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room.
|
||||
},
|
||||
"exits": {
|
||||
# Still requires has_fire_source in the room
|
||||
"Gerudo Training Grounds Underwater": "
|
||||
(Bow or can_use(Longshot)) and can_use(Hover_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Underwater",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Underwater Silver Rupee Chest": "
|
||||
has_fire_source and can_use(Iron_Boots) and
|
||||
(logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and can_take_damage"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Left Side",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ First Iron Knuckle Chest": "is_adult or Kokiri_Sword or has_explosives"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Stalfos Room": "
|
||||
can_use(Longshot) or logic_gtg_mq_without_hookshot or
|
||||
(logic_gtg_mq_with_hookshot and can_use(Hookshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Stalfos Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
# Very difficult to fight the Stalfos and Stulltulas under the time limit as child.
|
||||
"Gerudo Training Grounds MQ Before Heavy Block Chest": "is_adult",
|
||||
"Gerudo Training Grounds MQ Heavy Block Chest": "can_use(Silver_Gauntlets)",
|
||||
"Blue Fire": "has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Back Areas": "
|
||||
is_adult and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire and
|
||||
(can_play(Song_of_Time) or (logic_gtg_fake_wall and can_use(Hover_Boots)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Back Areas",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Eye Statue Chest": "Bow",
|
||||
"Gerudo Training Grounds MQ Second Iron Knuckle Chest": "True",
|
||||
"Gerudo Training Grounds MQ Flame Circle Chest": "can_use(Hookshot) or Bow or has_explosives"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Central Maze Right": "Megaton_Hammer",
|
||||
"Gerudo Training Grounds Right Side": "can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds MQ Maze Right Central Chest": "True",
|
||||
"Gerudo Training Grounds MQ Maze Right Side Chest": "True",
|
||||
# The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash.
|
||||
"Gerudo Training Grounds MQ Ice Arrows Chest": "
|
||||
(Small_Key_Gerudo_Training_Grounds, 3)"
|
||||
},
|
||||
"exits": {
|
||||
# guarantees fire with torch
|
||||
"Gerudo Training Grounds Underwater": "
|
||||
can_use(Longshot) or (can_use(Hookshot) and Bow)",
|
||||
"Gerudo Training Grounds Right Side": "can_use(Hookshot)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,120 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Lobby",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Gerudo Training Grounds Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)",
|
||||
"Gerudo Training Grounds Stalfos Chest": "is_adult or Kokiri_Sword",
|
||||
"Gerudo Training Grounds Beamos Chest": "has_explosives and (is_adult or Kokiri_Sword)",
|
||||
"Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room.
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Fortress": "True",
|
||||
"Gerudo Training Grounds Heavy Block Room": "
|
||||
(is_adult or Kokiri_Sword) and
|
||||
(can_use(Hookshot) or logic_gtg_without_hookshot)",
|
||||
"Gerudo Training Grounds Lava Room": "
|
||||
here(has_explosives and (is_adult or Kokiri_Sword))",
|
||||
"Gerudo Training Grounds Central Maze": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Central Maze",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Grounds, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))",
|
||||
"Gerudo Training Grounds Maze Path First Chest": "(Small_Key_Gerudo_Training_Grounds, 4)",
|
||||
"Gerudo Training Grounds Maze Path Second Chest": "(Small_Key_Gerudo_Training_Grounds, 6)",
|
||||
"Gerudo Training Grounds Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 7)",
|
||||
"Gerudo Training Grounds Maze Path Final Chest": "(Small_Key_Gerudo_Training_Grounds, 9)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Central Maze Right": "(Small_Key_Gerudo_Training_Grounds, 9)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Central Maze Right",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Maze Right Central Chest": "True",
|
||||
"Gerudo Training Grounds Maze Right Side Chest": "True",
|
||||
"Gerudo Training Grounds Freestanding Key": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Hammer Room": "can_use(Hookshot)",
|
||||
"Gerudo Training Grounds Lava Room": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Lava Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Underwater Silver Rupee Chest": "
|
||||
can_use(Hookshot) and can_play(Song_of_Time) and Iron_Boots and
|
||||
(logic_fewer_tunic_requirements or can_use(Zora_Tunic))"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Central Maze Right": "can_play(Song_of_Time) or is_child",
|
||||
"Gerudo Training Grounds Hammer Room": "
|
||||
can_use(Longshot) or (can_use(Hookshot) and can_use(Hover_Boots))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Hammer Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Hammer Room Clear Chest": "True",
|
||||
"Gerudo Training Grounds Hammer Room Switch Chest": "can_use(Megaton_Hammer)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Eye Statue Lower": "can_use(Megaton_Hammer) and Bow",
|
||||
"Gerudo Training Grounds Lava Room": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Eye Statue Lower",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Eye Statue Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Hammer Room": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Eye Statue Upper",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Near Scarecrow Chest": "can_use(Bow)"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Eye Statue Lower": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Heavy Block Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Before Heavy Block Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Gerudo Training Grounds Eye Statue Upper": "
|
||||
(logic_lens_gtg or can_use(Lens_of_Truth)) and
|
||||
(can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))",
|
||||
"Gerudo Training Grounds Like Like Room": "
|
||||
can_use(Silver_Gauntlets) and (logic_lens_gtg or can_use(Lens_of_Truth)) and
|
||||
(can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Gerudo Training Grounds Like Like Room",
|
||||
"dungeon": "Gerudo Training Grounds",
|
||||
"locations": {
|
||||
"Gerudo Training Grounds Heavy Block First Chest": "True",
|
||||
"Gerudo Training Grounds Heavy Block Second Chest": "True",
|
||||
"Gerudo Training Grounds Heavy Block Third Chest": "True",
|
||||
"Gerudo Training Grounds Heavy Block Fourth Chest": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,48 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ice Cavern Beginning",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Fairy Pot": "has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"ZF Ice Ledge": "True",
|
||||
"Ice Cavern Map Room": "
|
||||
is_adult or can_use(Dins_Fire) or
|
||||
(has_explosives and (can_use(Sticks) or can_use(Slingshot) or Kokiri_Sword))",
|
||||
"Ice Cavern Compass Room": "is_adult and Blue_Fire",
|
||||
"Ice Cavern Iron Boots Region": "Blue_Fire"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern Map Room",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Ice Cavern MQ Map Chest": "
|
||||
Blue_Fire and
|
||||
(is_adult or can_use(Sticks) or Kokiri_Sword or can_use_projectile)",
|
||||
"Blue Fire": "has_bottle"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern Iron Boots Region",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Ice Cavern MQ Iron Boots Chest": "is_adult",
|
||||
"Sheik in Ice Cavern": "is_adult",
|
||||
"Ice Cavern MQ GS Ice Block": "is_adult or can_child_attack",
|
||||
"Ice Cavern MQ GS Scarecrow": "
|
||||
can_use(Scarecrow) or (Hover_Boots and can_use(Longshot)) or
|
||||
(logic_ice_mq_scarecrow and is_adult)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern Compass Room",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Ice Cavern MQ Compass Chest": "True",
|
||||
"Ice Cavern MQ Freestanding PoH": "has_explosives",
|
||||
"Ice Cavern MQ GS Red Ice": "can_play(Song_of_Time) or logic_ice_mq_red_ice_gs"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Ice Cavern Beginning",
|
||||
"dungeon": "Ice Cavern",
|
||||
"exits": {
|
||||
"ZF Ice Ledge": "True",
|
||||
#Frezzards are weird, they are immune to KS completely. Leave sticks out as 8/10 is a lot
|
||||
"Ice Cavern": "here(is_adult or has_explosives or can_use(Dins_Fire))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Ice Cavern",
|
||||
"dungeon": "Ice Cavern",
|
||||
"locations": {
|
||||
"Ice Cavern Map Chest": "Blue_Fire and is_adult",
|
||||
"Ice Cavern Compass Chest": "Blue_Fire",
|
||||
"Ice Cavern Iron Boots Chest": "
|
||||
Blue_Fire and
|
||||
(is_adult or Slingshot or Sticks or
|
||||
Kokiri_Sword or can_use(Dins_Fire))",
|
||||
"Sheik in Ice Cavern": "
|
||||
Blue_Fire and
|
||||
(is_adult or Slingshot or Sticks or
|
||||
Kokiri_Sword or can_use(Dins_Fire))",
|
||||
"Ice Cavern Freestanding PoH": "Blue_Fire",
|
||||
"Ice Cavern GS Spinning Scythe Room": "can_use(Hookshot) or can_use(Boomerang)",
|
||||
"Ice Cavern GS Heart Piece Room": "
|
||||
Blue_Fire and (can_use(Hookshot) or can_use(Boomerang))",
|
||||
"Ice Cavern GS Push Block Room": "
|
||||
Blue_Fire and (can_use(Hookshot) or can_use(Boomerang) or
|
||||
(logic_ice_block_gs and can_use(Hover_Boots)))",
|
||||
"Blue Fire": "is_adult and has_bottle"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,66 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Beginning",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Nut Pot": "True",
|
||||
"Jabu Jabus Belly MQ Map Chest": "can_blast_or_smash",
|
||||
"Jabu Jabus Belly MQ First Room Side Chest": "can_use(Slingshot)"
|
||||
},
|
||||
"exits": {
|
||||
"Zoras Fountain": "True",
|
||||
"Jabu Jabus Belly Main": "here(is_child and can_use(Slingshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Main",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Second Room Lower Chest": "True",
|
||||
"Jabu Jabus Belly MQ Second Room Upper Chest": "
|
||||
can_use(Hover_Boots) or can_use(Hookshot) or
|
||||
at('Jabu Jabus Belly Boss Area', is_child)",
|
||||
"Jabu Jabus Belly MQ Compass Chest": "True",
|
||||
"Jabu Jabus Belly MQ Basement Near Vines Chest": "True",
|
||||
"Jabu Jabus Belly MQ Basement Near Switches Chest": "True",
|
||||
"Jabu Jabus Belly MQ Boomerang Room Small Chest": "True",
|
||||
"Jabu Jabus Belly MQ Boomerang Chest": "True",
|
||||
"Jabu Jabus Belly MQ GS Boomerang Chest Room": "
|
||||
can_play(Song_of_Time) or (logic_jabu_mq_sot_gs and can_use(Boomerang))"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Beginning": "True",
|
||||
"Jabu Jabus Belly Depths": "has_explosives and can_use(Boomerang)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Depths",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Falling Like Like Room Chest": "True",
|
||||
"Jabu Jabus Belly MQ GS Tailpasaran Room": "Sticks or can_use(Dins_Fire)",
|
||||
"Jabu Jabus Belly MQ GS Invisible Enemies Room": "
|
||||
(logic_lens_jabu_mq or can_use(Lens_of_Truth)) or
|
||||
at('Jabu Jabus Belly Main', can_use(Hover_Boots) and can_use(Hookshot))"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True",
|
||||
"Jabu Jabus Belly Boss Area": "Sticks or (can_use(Dins_Fire) and Kokiri_Sword)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Boss Area",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly MQ Cow" : "can_play(Eponas_Song)",
|
||||
"Jabu Jabus Belly MQ Near Boss Chest": "True",
|
||||
"Jabu Jabus Belly Barinade Heart": "True",
|
||||
"Barinade": "True",
|
||||
"Jabu Jabus Belly MQ GS Near Boss": "True",
|
||||
"Fairy Pot": "has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,53 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Beginning",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"exits": {
|
||||
"Zoras Fountain": "True",
|
||||
"Jabu Jabus Belly Main": "can_use_projectile"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Main",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly Boomerang Chest": "True",
|
||||
"Jabu Jabus Belly GS Water Switch Room": "True",
|
||||
"Jabu Jabus Belly GS Lobby Basement Lower": "can_use(Boomerang) or can_use(Hookshot)",
|
||||
"Jabu Jabus Belly GS Lobby Basement Upper": "can_use(Boomerang) or can_use(Hookshot)",
|
||||
"Jabu Jabus Belly Deku Scrub": "
|
||||
can_dive or is_child or logic_jabu_scrub_jump_dive or can_use(Iron_Boots)",
|
||||
"Fairy Pot": "has_bottle"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Beginning": "True",
|
||||
"Jabu Jabus Belly Depths": "can_use(Boomerang)",
|
||||
"Jabu Jabus Belly Boss Area": "logic_jabu_boss_gs_adult and can_use(Hover_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Depths",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly Map Chest": "True",
|
||||
"Jabu Jabus Belly Compass Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True",
|
||||
"Jabu Jabus Belly Boss Area": "Sticks or Kokiri_Sword"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Jabu Jabus Belly Boss Area",
|
||||
"dungeon": "Jabu Jabus Belly",
|
||||
"locations": {
|
||||
"Jabu Jabus Belly Barinade Heart": "can_use(Boomerang)",
|
||||
"Barinade": "can_use(Boomerang)",
|
||||
"Jabu Jabus Belly GS Near Boss": "True",
|
||||
"Nut Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Jabu Jabus Belly Main": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,127 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Shadow Temple Entryway",
|
||||
"dungeon": "Shadow Temple",
|
||||
"exits": {
|
||||
"Graveyard Warp Pad Region": "True",
|
||||
"Shadow Temple Beginning": "
|
||||
(logic_lens_shadow_mq or can_use(Lens_of_Truth)) and
|
||||
(can_use(Hover_Boots) or can_use(Hookshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beginning",
|
||||
"dungeon": "Shadow Temple",
|
||||
"exits": {
|
||||
"Shadow Temple Entryway": "True",
|
||||
"Shadow Temple First Beamos": "
|
||||
can_use(Fire_Arrows) or Hover_Boots or
|
||||
(logic_shadow_mq_gap and can_use(Longshot))",
|
||||
"Shadow Temple Dead Hand Area": "has_explosives and (Small_Key_Shadow_Temple, 6)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Dead Hand Area",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Compass Chest": "True",
|
||||
"Shadow Temple MQ Hover Boots Chest": "can_play(Song_of_Time) and Bow"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple First Beamos",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Map Chest": "True",
|
||||
"Shadow Temple MQ Early Gibdos Chest": "True",
|
||||
"Shadow Temple MQ Near Ship Invisible Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Upper Huge Pit": "has_explosives and (Small_Key_Shadow_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Upper Huge Pit",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Invisible Blades Visible Chest": "
|
||||
can_play(Song_of_Time) or
|
||||
(logic_shadow_mq_invisible_blades and damage_multiplier != 'ohko')",
|
||||
"Shadow Temple MQ Invisible Blades Invisible Chest": "
|
||||
can_play(Song_of_Time) or
|
||||
(logic_shadow_mq_invisible_blades and damage_multiplier != 'ohko')"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Lower Huge Pit": "has_fire_source or logic_shadow_mq_huge_pit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Lower Huge Pit",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Beamos Silver Rupees Chest": "can_use(Longshot)",
|
||||
"Shadow Temple MQ Falling Spikes Lower Chest": "True",
|
||||
"Shadow Temple MQ Falling Spikes Upper Chest": "
|
||||
(logic_shadow_umbrella and Hover_Boots) or Progressive_Strength_Upgrade",
|
||||
"Shadow Temple MQ Falling Spikes Switch Chest": "
|
||||
(logic_shadow_umbrella and Hover_Boots) or Progressive_Strength_Upgrade",
|
||||
"Shadow Temple MQ Invisible Spikes Chest": "
|
||||
Hover_Boots and (Small_Key_Shadow_Temple, 3) and
|
||||
(logic_lens_shadow_mq_back or can_use(Lens_of_Truth))",
|
||||
"Shadow Temple MQ Stalfos Room Chest": "
|
||||
Hover_Boots and (Small_Key_Shadow_Temple, 3) and Progressive_Hookshot and
|
||||
(logic_lens_shadow_mq_back or can_use(Lens_of_Truth))",
|
||||
"Shadow Temple MQ GS Falling Spikes Room": "
|
||||
(logic_shadow_umbrella_gs and Hover_Boots) or Progressive_Hookshot"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Wind Tunnel": "
|
||||
Hover_Boots and (logic_lens_shadow_mq_back or can_use(Lens_of_Truth)) and
|
||||
Progressive_Hookshot and (Small_Key_Shadow_Temple, 4)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Wind Tunnel",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Wind Hint Chest": "True",
|
||||
"Shadow Temple MQ After Wind Enemy Chest": "True",
|
||||
"Shadow Temple MQ After Wind Hidden Chest": "True",
|
||||
"Shadow Temple MQ GS Wind Hint Room": "True",
|
||||
"Shadow Temple MQ GS After Wind": "True",
|
||||
"Nut Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Beyond Boat": "
|
||||
can_play(Zeldas_Lullaby) and (Small_Key_Shadow_Temple, 5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beyond Boat",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Bongo Bongo Heart": "
|
||||
(Bow or (logic_shadow_statue and has_bombchus)) and Boss_Key_Shadow_Temple",
|
||||
"Bongo Bongo": "
|
||||
(Bow or (logic_shadow_statue and has_bombchus)) and Boss_Key_Shadow_Temple",
|
||||
"Shadow Temple MQ GS After Ship": "True",
|
||||
"Shadow Temple MQ GS Near Boss": "Bow or (logic_shadow_statue and has_bombchus)"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Invisible Maze": "
|
||||
Bow and can_play(Song_of_Time) and can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Invisible Maze",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple MQ Spike Walls Left Chest": "
|
||||
can_use(Dins_Fire) and (Small_Key_Shadow_Temple, 6)",
|
||||
"Shadow Temple MQ Boss Key Chest": "
|
||||
can_use(Dins_Fire) and (Small_Key_Shadow_Temple, 6)",
|
||||
"Shadow Temple MQ Bomb Flower Chest": "True",
|
||||
"Shadow Temple MQ Freestanding Key": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,93 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Shadow Temple Entryway",
|
||||
"dungeon": "Shadow Temple",
|
||||
"exits": {
|
||||
"Graveyard Warp Pad Region": "True",
|
||||
"Shadow Temple Beginning": "
|
||||
(logic_lens_shadow or can_use(Lens_of_Truth)) and
|
||||
(can_use(Hover_Boots) or can_use(Hookshot))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beginning",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Map Chest": "True",
|
||||
"Shadow Temple Hover Boots Chest": "True",
|
||||
"Nut Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Entryway": "True",
|
||||
"Shadow Temple First Beamos": "Hover_Boots"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple First Beamos",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Compass Chest": "True",
|
||||
"Shadow Temple Early Silver Rupee Chest": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Huge Pit": "has_explosives and (Small_Key_Shadow_Temple, 1)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Huge Pit",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Invisible Blades Visible Chest": "True",
|
||||
"Shadow Temple Invisible Blades Invisible Chest": "True",
|
||||
"Shadow Temple Falling Spikes Lower Chest": "True",
|
||||
"Shadow Temple Falling Spikes Upper Chest": "logic_shadow_umbrella or Progressive_Strength_Upgrade",
|
||||
"Shadow Temple Falling Spikes Switch Chest": "logic_shadow_umbrella or Progressive_Strength_Upgrade",
|
||||
"Shadow Temple Invisible Spikes Chest": "
|
||||
(Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_back or can_use(Lens_of_Truth))",
|
||||
"Shadow Temple Freestanding Key": "
|
||||
(Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_back or can_use(Lens_of_Truth))
|
||||
and Progressive_Hookshot and
|
||||
(Bombs or Progressive_Strength_Upgrade or
|
||||
(logic_shadow_freestanding_key and has_bombchus))",
|
||||
"Shadow Temple GS Like Like Room": "True",
|
||||
"Shadow Temple GS Falling Spikes Room": "logic_shadow_umbrella_gs or Progressive_Hookshot",
|
||||
"Shadow Temple GS Single Giant Pot": "
|
||||
(Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_back or can_use(Lens_of_Truth))
|
||||
and Progressive_Hookshot"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Wind Tunnel": "
|
||||
(logic_lens_shadow_back or can_use(Lens_of_Truth)) and
|
||||
Progressive_Hookshot and (Small_Key_Shadow_Temple, 3)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Wind Tunnel",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Wind Hint Chest": "True",
|
||||
"Shadow Temple After Wind Enemy Chest": "True",
|
||||
"Shadow Temple After Wind Hidden Chest": "True",
|
||||
"Shadow Temple GS Near Ship": "can_use(Longshot) and (Small_Key_Shadow_Temple, 4)"
|
||||
},
|
||||
"exits": {
|
||||
"Shadow Temple Beyond Boat": "can_play(Zeldas_Lullaby) and (Small_Key_Shadow_Temple, 4)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Shadow Temple Beyond Boat",
|
||||
"dungeon": "Shadow Temple",
|
||||
"locations": {
|
||||
"Shadow Temple Spike Walls Left Chest": "can_use(Dins_Fire)",
|
||||
"Shadow Temple Boss Key Chest": "can_use(Dins_Fire)",
|
||||
"Shadow Temple Invisible Floormaster Chest": "True",
|
||||
"Shadow Temple Bongo Bongo Heart": "
|
||||
(Small_Key_Shadow_Temple, 5) and Boss_Key_Shadow_Temple and
|
||||
(Bow or can_use(Distant_Scarecrow) or (logic_shadow_statue and has_bombchus))",
|
||||
"Bongo Bongo": "
|
||||
(Small_Key_Shadow_Temple, 5) and Boss_Key_Shadow_Temple and
|
||||
(Bow or can_use(Distant_Scarecrow) or (logic_shadow_statue and has_bombchus))",
|
||||
"Shadow Temple GS Triple Giant Pot": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,147 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Spirit Temple Lobby",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Entrance Front Left Chest": "True",
|
||||
"Spirit Temple MQ Entrance Back Left Chest": "
|
||||
here(can_blast_or_smash) and
|
||||
(can_use(Slingshot) or can_use(Bow))",
|
||||
"Spirit Temple MQ Entrance Back Right Chest": "
|
||||
has_bombchus or can_use(Bow) or can_use(Hookshot) or
|
||||
can_use(Slingshot) or can_use(Boomerang)"
|
||||
},
|
||||
"exits": {
|
||||
"Desert Colossus From Spirit Lobby": "True",
|
||||
"Child Spirit Temple": "is_child",
|
||||
"Adult Spirit Temple": "
|
||||
has_bombchus and can_use(Longshot) and can_use(Silver_Gauntlets)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Child Hammer Switch Chest": "
|
||||
at('Adult Spirit Temple', (Small_Key_Spirit_Temple, 7) and Megaton_Hammer)",
|
||||
"Spirit Temple MQ Map Room Enemy Chest": "
|
||||
(Sticks or Kokiri_Sword) and
|
||||
has_bombchus and Slingshot and can_use(Dins_Fire)",
|
||||
"Spirit Temple MQ Map Chest": "Sticks or Kokiri_Sword or Bombs",
|
||||
"Spirit Temple MQ Silver Block Hallway Chest": "
|
||||
has_bombchus and (Small_Key_Spirit_Temple, 7) and Slingshot and
|
||||
(can_use(Dins_Fire) or
|
||||
at('Adult Spirit Temple', (can_use(Fire_Arrows) or
|
||||
(logic_spirit_mq_frozen_eye and can_use(Bow) and can_play(Song_of_Time)))))",
|
||||
"Fairy Pot": "
|
||||
has_bottle and (Sticks or Kokiri_Sword) and
|
||||
has_bombchus and Slingshot"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Shared": "has_bombchus and (Small_Key_Spirit_Temple, 2)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Adult Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Child Climb South Chest": "(Small_Key_Spirit_Temple, 7)",
|
||||
"Spirit Temple MQ Statue Room Lullaby Chest": "can_play(Zeldas_Lullaby)",
|
||||
"Spirit Temple MQ Statue Room Invisible Chest": "
|
||||
logic_lens_spirit_mq or can_use(Lens_of_Truth)",
|
||||
"Spirit Temple MQ Beamos Room Chest": "(Small_Key_Spirit_Temple, 5)",
|
||||
"Spirit Temple MQ Chest Switch Chest": "
|
||||
(Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time)",
|
||||
"Spirit Temple MQ Boss Key Chest": "
|
||||
(Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time) and Mirror_Shield",
|
||||
"Spirit Temple MQ GS Nine Thrones Room West": "(Small_Key_Spirit_Temple, 7)",
|
||||
"Spirit Temple MQ GS Nine Thrones Room North": "(Small_Key_Spirit_Temple, 7)"
|
||||
},
|
||||
"exits": {
|
||||
"Lower Adult Spirit Temple": "
|
||||
Mirror_Shield and (can_use(Fire_Arrows) or
|
||||
(logic_spirit_mq_lower_adult and can_use(Dins_Fire) and Bow))",
|
||||
"Spirit Temple Shared": "True",
|
||||
"Spirit Temple Boss Area": "
|
||||
(Small_Key_Spirit_Temple, 6) and can_play(Zeldas_Lullaby) and Megaton_Hammer",
|
||||
"Mirror Shield Hand": "
|
||||
(Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time) and
|
||||
(logic_lens_spirit_mq or can_use(Lens_of_Truth))"
|
||||
}
|
||||
},
|
||||
{
|
||||
#In this region, child reachability really means age-unknown, but with the caveat
|
||||
#that child has as least entered the dungeon. is_adult means is_adult as usual.
|
||||
#All child specific logic must be anded with 7 keys to convert child-as-unknown-age
|
||||
#back to child.
|
||||
"region_name": "Spirit Temple Shared",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Child Climb North Chest": "(Small_Key_Spirit_Temple, 6)",
|
||||
"Spirit Temple MQ Compass Chest": "
|
||||
(can_use(Slingshot) and (Small_Key_Spirit_Temple, 7)) or
|
||||
can_use(Bow) or
|
||||
(Bow and Slingshot)",
|
||||
"Spirit Temple MQ Sun Block Room Chest": "
|
||||
can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or
|
||||
is_adult",
|
||||
"Spirit Temple MQ GS Sun Block Room": "
|
||||
(logic_spirit_mq_sun_block_gs and Boomerang and
|
||||
(can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot)) or
|
||||
is_adult"
|
||||
},
|
||||
"exits": {
|
||||
"Silver Gauntlets Hand": "
|
||||
((Small_Key_Spirit_Temple, 7) and
|
||||
(can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or is_adult)) or
|
||||
((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and
|
||||
(logic_lens_spirit_mq or can_use(Lens_of_Truth)))",
|
||||
"Desert Colossus": "
|
||||
((Small_Key_Spirit_Temple, 7) and
|
||||
(can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or is_adult)) or
|
||||
((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and
|
||||
(logic_lens_spirit_mq or can_use(Lens_of_Truth)) and is_adult)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Lower Adult Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Leever Room Chest": "True",
|
||||
"Spirit Temple MQ Symphony Room Chest": "
|
||||
(Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and
|
||||
Song_of_Time and Eponas_Song and Suns_Song and
|
||||
Song_of_Storms and Zeldas_Lullaby",
|
||||
"Spirit Temple MQ Entrance Front Right Chest": "Megaton_Hammer",
|
||||
"Spirit Temple MQ GS Leever Room": "True",
|
||||
"Spirit Temple MQ GS Symphony Room": "
|
||||
(Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and
|
||||
Song_of_Time and Eponas_Song and Suns_Song and
|
||||
Song_of_Storms and Zeldas_Lullaby"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Boss Area",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple MQ Mirror Puzzle Invisible Chest": "
|
||||
logic_lens_spirit_mq or can_use(Lens_of_Truth)",
|
||||
"Spirit Temple Twinrova Heart": "Mirror_Shield and Boss_Key_Spirit_Temple",
|
||||
"Twinrova": "Mirror_Shield and Boss_Key_Spirit_Temple"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Mirror Shield Hand",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Mirror Shield Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Silver Gauntlets Hand",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Silver Gauntlets Chest": "True"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,192 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Spirit Temple Lobby",
|
||||
"dungeon": "Spirit Temple",
|
||||
"exits": {
|
||||
"Desert Colossus From Spirit Lobby": "True",
|
||||
"Child Spirit Temple": "is_child",
|
||||
"Early Adult Spirit Temple": "can_use(Silver_Gauntlets)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Child Bridge Chest": "
|
||||
(Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu)) and
|
||||
(Sticks or has_explosives or
|
||||
((Nuts or Boomerang) and
|
||||
(Kokiri_Sword or Slingshot)))",
|
||||
"Spirit Temple Child Early Torches Chest": "
|
||||
(Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu)) and
|
||||
(Sticks or has_explosives or
|
||||
((Nuts or Boomerang) and (Kokiri_Sword or Slingshot))) and
|
||||
(Sticks or can_use(Dins_Fire))",
|
||||
"Spirit Temple GS Metal Fence": "
|
||||
(Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu)) and
|
||||
(Sticks or has_explosives or
|
||||
((Nuts or Boomerang) and (Kokiri_Sword or Slingshot)))"
|
||||
},
|
||||
"exits": {
|
||||
"Child Spirit Before Locked Door": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Before Locked Door",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Nut Crate": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Child Spirit Temple Climb": "(Small_Key_Spirit_Temple, 1)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Child Spirit Temple Climb",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Child Climb North Chest": "
|
||||
has_projectile(both) or
|
||||
(((Small_Key_Spirit_Temple, 3) or
|
||||
((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and
|
||||
can_use(Silver_Gauntlets) and has_projectile(adult)) or
|
||||
((Small_Key_Spirit_Temple, 5) and is_child and
|
||||
has_projectile(child))",
|
||||
"Spirit Temple Child Climb East Chest": "
|
||||
has_projectile(both) or
|
||||
(((Small_Key_Spirit_Temple, 3) or
|
||||
((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and
|
||||
can_use(Silver_Gauntlets) and has_projectile(adult)) or
|
||||
((Small_Key_Spirit_Temple, 5) and is_child and
|
||||
has_projectile(child))",
|
||||
"Spirit Temple GS Sun on Floor Room": "
|
||||
has_projectile(both) or can_use(Dins_Fire) or
|
||||
(can_take_damage and (Sticks or Kokiri_Sword or has_projectile(child))) or
|
||||
(is_child and
|
||||
(Small_Key_Spirit_Temple, 5) and has_projectile(child)) or
|
||||
(((Small_Key_Spirit_Temple, 3) or
|
||||
((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and
|
||||
can_use(Silver_Gauntlets) and
|
||||
(has_projectile(adult) or can_take_damage))"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Central Chamber": "has_explosives",
|
||||
"Child Spirit Before Locked Door": "(Small_Key_Spirit_Temple, 5)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Early Adult Spirit Temple",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Compass Chest": "
|
||||
can_use(Hookshot) and can_play(Zeldas_Lullaby)",
|
||||
"Spirit Temple Early Adult Right Chest": "
|
||||
Bow or Progressive_Hookshot or has_bombchus or (Bombs and logic_spirit_lower_adult_switch)",
|
||||
#requires a very specific Bombchu use, Hover Boots can be skipped by jumping on top of the rolling rock.
|
||||
"Spirit Temple First Mirror Left Chest": "(Small_Key_Spirit_Temple, 3)",
|
||||
"Spirit Temple First Mirror Right Chest": "(Small_Key_Spirit_Temple, 3)",
|
||||
"Spirit Temple GS Boulder Room": "
|
||||
can_play(Song_of_Time) and
|
||||
(Bow or Progressive_Hookshot or has_bombchus or (Bombs and logic_spirit_lower_adult_switch))"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Central Chamber": "(Small_Key_Spirit_Temple, 1)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Central Chamber",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Map Chest": "
|
||||
((has_explosives or (Small_Key_Spirit_Temple, 3) or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and
|
||||
(can_use(Dins_Fire) or
|
||||
(((Magic_Meter and Fire_Arrows) or logic_spirit_map_chest) and Bow and Sticks))) or
|
||||
((Small_Key_Spirit_Temple, 5) and has_explosives and
|
||||
can_use(Sticks)) or
|
||||
((Small_Key_Spirit_Temple, 3) and
|
||||
(can_use(Fire_Arrows) or (logic_spirit_map_chest and Bow)) and
|
||||
can_use(Silver_Gauntlets))",
|
||||
"Spirit Temple Sun Block Room Chest": "
|
||||
((has_explosives or (Small_Key_Spirit_Temple, 3) or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and
|
||||
(can_use(Dins_Fire) or
|
||||
(((Magic_Meter and Fire_Arrows) or logic_spirit_sun_chest) and Bow and Sticks))) or
|
||||
((Small_Key_Spirit_Temple, 5) and has_explosives and
|
||||
can_use(Sticks)) or
|
||||
((Small_Key_Spirit_Temple, 3) and
|
||||
(can_use(Fire_Arrows) or (logic_spirit_sun_chest and Bow)) and
|
||||
can_use(Silver_Gauntlets))",
|
||||
"Spirit Temple Statue Room Hand Chest": "
|
||||
(Small_Key_Spirit_Temple, 3) and can_use(Silver_Gauntlets) and
|
||||
can_play(Zeldas_Lullaby)",
|
||||
"Spirit Temple Statue Room Northeast Chest": "
|
||||
(Small_Key_Spirit_Temple, 3) and can_use(Silver_Gauntlets) and can_play(Zeldas_Lullaby) and
|
||||
(Progressive_Hookshot or Hover_Boots or logic_spirit_lobby_jump)",
|
||||
"Spirit Temple GS Hall After Sun Block Room": "
|
||||
(has_explosives and Boomerang and Progressive_Hookshot) or
|
||||
(can_use(Boomerang) and (Small_Key_Spirit_Temple, 5) and has_explosives) or
|
||||
(Progressive_Hookshot and can_use(Silver_Gauntlets) and
|
||||
((Small_Key_Spirit_Temple, 3) or
|
||||
((Small_Key_Spirit_Temple, 2) and Boomerang and bombchus_in_logic and not entrance_shuffle)))",
|
||||
"Spirit Temple GS Lobby": "
|
||||
((has_explosives or (Small_Key_Spirit_Temple, 3) or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and
|
||||
logic_spirit_lobby_gs and Boomerang and (Progressive_Hookshot or Hover_Boots or logic_spirit_lobby_jump)) or
|
||||
(logic_spirit_lobby_gs and (Small_Key_Spirit_Temple, 5) and has_explosives and can_use(Boomerang)) or
|
||||
((Small_Key_Spirit_Temple, 3) and can_use(Silver_Gauntlets) and (Progressive_Hookshot or Hover_Boots or logic_spirit_lobby_jump))"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Outdoor Hands": "True",
|
||||
"Spirit Temple Beyond Central Locked Door": "
|
||||
(Small_Key_Spirit_Temple, 4) and can_use(Silver_Gauntlets)",
|
||||
"Child Spirit Temple Climb": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Outdoor Hands",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Silver Gauntlets Chest": "
|
||||
((Small_Key_Spirit_Temple, 3) and (Progressive_Hookshot, 2) and has_explosives) or
|
||||
(Small_Key_Spirit_Temple, 5)",
|
||||
"Spirit Temple Mirror Shield Chest": "
|
||||
(Small_Key_Spirit_Temple, 4) and can_use(Silver_Gauntlets) and has_explosives"
|
||||
},
|
||||
"exits": {
|
||||
"Desert Colossus": "
|
||||
(is_child and (Small_Key_Spirit_Temple, 5)) or
|
||||
(can_use(Silver_Gauntlets) and
|
||||
(((Small_Key_Spirit_Temple, 3) and has_explosives) or (Small_Key_Spirit_Temple, 5)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Beyond Central Locked Door",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Near Four Armos Chest": "Mirror_Shield and has_explosives",
|
||||
"Spirit Temple Hallway Left Invisible Chest": "(logic_lens_spirit or can_use(Lens_of_Truth)) and has_explosives",
|
||||
"Spirit Temple Hallway Right Invisible Chest": "(logic_lens_spirit or can_use(Lens_of_Truth)) and has_explosives"
|
||||
},
|
||||
"exits": {
|
||||
"Spirit Temple Beyond Final Locked Door": "
|
||||
(Small_Key_Spirit_Temple, 5) and
|
||||
(logic_spirit_wall or can_use(Longshot) or has_bombchus or
|
||||
((Bombs or Nuts or can_use(Dins_Fire)) and
|
||||
(Bow or can_use(Hookshot) or Megaton_Hammer)))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Spirit Temple Beyond Final Locked Door",
|
||||
"dungeon": "Spirit Temple",
|
||||
"locations": {
|
||||
"Spirit Temple Boss Key Chest": "
|
||||
can_play(Zeldas_Lullaby) and Bow and
|
||||
Progressive_Hookshot",
|
||||
"Spirit Temple Topmost Chest": "Mirror_Shield",
|
||||
"Spirit Temple Twinrova Heart": "
|
||||
Mirror_Shield and has_explosives and
|
||||
Progressive_Hookshot and Boss_Key_Spirit_Temple",
|
||||
"Twinrova": "
|
||||
Mirror_Shield and has_explosives and
|
||||
Progressive_Hookshot and Boss_Key_Spirit_Temple"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,76 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Water Temple Lobby",
|
||||
"dungeon": "Water Temple",
|
||||
"events": {
|
||||
"Water Temple Clear": "Boss_Key_Water_Temple and can_use(Longshot)"
|
||||
},
|
||||
"locations": {
|
||||
"Water Temple Morpha Heart": "Boss_Key_Water_Temple and can_use(Longshot)",
|
||||
"Morpha": "Boss_Key_Water_Temple and can_use(Longshot)"
|
||||
},
|
||||
"exits": {
|
||||
"Lake Hylia": "True",
|
||||
"Water Temple Dive": "
|
||||
(can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and can_use(Iron_Boots)",
|
||||
"Water Temple Dark Link Region": "
|
||||
Small_Key_Water_Temple and can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Dive",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Map Chest": "has_fire_source and can_use(Hookshot)",
|
||||
"Water Temple MQ Central Pillar Chest": "
|
||||
can_use(Zora_Tunic) and can_use(Hookshot) and
|
||||
((logic_water_mq_central_pillar and can_use(Fire_Arrows)) or
|
||||
(can_use(Dins_Fire) and can_play(Song_of_Time)))"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Lowered Water Levels": "can_play(Zeldas_Lullaby)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Lowered Water Levels",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Compass Chest": "
|
||||
can_use(Bow) or can_use(Dins_Fire) or
|
||||
at('Water Temple Lobby', can_use(Sticks) and has_explosives)",
|
||||
"Water Temple MQ Longshot Chest": "can_use(Hookshot)",
|
||||
"Water Temple MQ GS Lizalfos Hallway": "can_use(Dins_Fire)",
|
||||
"Water Temple MQ GS Before Upper Water Switch": "can_use(Longshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Dark Link Region",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Boss Key Chest": "
|
||||
(can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and can_use(Dins_Fire) and
|
||||
(logic_water_dragon_jump_dive or can_dive or can_use(Iron_Boots))",
|
||||
"Water Temple MQ GS River": "True",
|
||||
"Fairy Pot": "has_bottle",
|
||||
"Nut Pot": "True"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Basement Gated Areas": "
|
||||
(can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and
|
||||
can_use(Dins_Fire) and can_use(Iron_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Basement Gated Areas",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple MQ Freestanding Key": "
|
||||
Hover_Boots or can_use(Scarecrow) or logic_water_north_basement_ledge_jump",
|
||||
"Water Temple MQ GS Triple Wall Torch": "
|
||||
can_use(Fire_Arrows) and (Hover_Boots or can_use(Scarecrow))",
|
||||
"Water Temple MQ GS Freestanding Key Area": "
|
||||
logic_water_mq_locked_gs or ((Small_Key_Water_Temple, 2) and
|
||||
(Hover_Boots or can_use(Scarecrow) or logic_water_north_basement_ledge_jump))"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,162 @@
|
||||
[
|
||||
{
|
||||
"region_name": "Water Temple Lobby",
|
||||
"dungeon": "Water Temple",
|
||||
"events": {
|
||||
"Child Water Temple": "is_child",
|
||||
# Child can access only the falling platform room as the sole entrant into Water Temple.
|
||||
# Use Child_Water_Temple for cases where child assists after the water is lowered.
|
||||
"Raise Water Level": "
|
||||
(is_adult and (Hookshot or Hover_Boots or Bow)) or
|
||||
(has_fire_source_with_torch and can_use_projectile)"
|
||||
# Ensure that the water level can be raised if it were to be lowered.
|
||||
},
|
||||
"exits": {
|
||||
"Lake Hylia": "True",
|
||||
"Water Temple Highest Water Level": "Raise_Water_Level",
|
||||
"Water Temple Dive": "
|
||||
(can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and
|
||||
((logic_water_temple_torch_longshot and can_use(Longshot)) or can_use(Iron_Boots))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Highest Water Level",
|
||||
"dungeon": "Water Temple",
|
||||
"events": {
|
||||
"Water Temple Clear": "Boss_Key_Water_Temple and can_use(Longshot)"
|
||||
},
|
||||
"locations": {
|
||||
"Morpha": "Boss_Key_Water_Temple and can_use(Longshot)",
|
||||
"Water Temple Morpha Heart": "Boss_Key_Water_Temple and can_use(Longshot)",
|
||||
"Fairy Pot": "has_bottle and can_use(Longshot)"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Falling Platform Room": "(Small_Key_Water_Temple, 4)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Dive",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Map Chest": "Raise_Water_Level",
|
||||
"Water Temple Compass Chest": "
|
||||
(can_play(Zeldas_Lullaby) or Iron_Boots) and can_use(Hookshot)",
|
||||
"Water Temple Torches Chest": "
|
||||
(Bow or can_use(Dins_Fire) or
|
||||
(Child_Water_Temple and Sticks and Kokiri_Sword and Magic_Meter)) and
|
||||
can_play(Zeldas_Lullaby)",
|
||||
"Water Temple Central Bow Target Chest": "
|
||||
Progressive_Strength_Upgrade and can_play(Zeldas_Lullaby) and
|
||||
((Bow and (logic_water_central_bow or Hover_Boots or can_use(Longshot))) or
|
||||
(logic_water_central_bow and Child_Water_Temple and Slingshot and at('Water Temple Middle Water Level', True)))",
|
||||
"Water Temple GS Behind Gate": "
|
||||
(can_use(Hookshot) or can_use(Hover_Boots)) and
|
||||
has_explosives and can_play(Zeldas_Lullaby) and
|
||||
(can_use(Iron_Boots) or can_dive)",
|
||||
"Water Temple GS Central Pillar": "
|
||||
can_play(Zeldas_Lullaby) and
|
||||
(((can_use(Longshot) or (logic_water_central_gs_fw and can_use(Hookshot) and can_use(Farores_Wind))) and
|
||||
((Small_Key_Water_Temple, 5) or can_use(Bow) or can_use(Dins_Fire))) or
|
||||
(logic_water_central_gs_irons and can_use(Hookshot) and can_use(Iron_Boots) and
|
||||
(can_use(Bow) or can_use(Dins_Fire))) or
|
||||
(logic_water_central_gs_fw and Child_Water_Temple and Boomerang and can_use(Farores_Wind) and
|
||||
(Sticks or can_use(Dins_Fire) or
|
||||
((Small_Key_Water_Temple, 5) and (can_use(Hover_Boots) or can_use(Bow))))))"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Cracked Wall": "
|
||||
can_play(Zeldas_Lullaby) and (can_use(Hookshot) or can_use(Hover_Boots)) and
|
||||
(logic_water_cracked_wall_nothing or (logic_water_cracked_wall_hovers and can_use(Hover_Boots)))",
|
||||
"Water Temple Middle Water Level": "
|
||||
(Bow or can_use(Dins_Fire) or
|
||||
((Small_Key_Water_Temple, 5) and can_use(Hookshot)) or
|
||||
(Child_Water_Temple and Sticks)) and
|
||||
can_play(Zeldas_Lullaby)",
|
||||
"Water Temple North Basement": "
|
||||
(Small_Key_Water_Temple, 4) and
|
||||
(can_use(Longshot) or (logic_water_boss_key_region and can_use(Hover_Boots))) and
|
||||
(can_use(Iron_Boots) or can_play(Zeldas_Lullaby))",
|
||||
"Water Temple Dragon Statue": "
|
||||
can_play(Zeldas_Lullaby) and Progressive_Strength_Upgrade and
|
||||
((Iron_Boots and can_use(Hookshot)) or
|
||||
(logic_water_dragon_adult and (has_bombchus or can_use(Bow) or can_use(Hookshot)) and (can_dive or Iron_Boots)) or
|
||||
(logic_water_dragon_child and Child_Water_Temple and (has_bombchus or Slingshot or Boomerang) and can_dive))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple North Basement",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Boss Key Chest": "
|
||||
(Small_Key_Water_Temple, 5) and
|
||||
(logic_water_bk_jump_dive or can_use(Iron_Boots)) and
|
||||
(logic_water_north_basement_ledge_jump or (has_explosives and Progressive_Strength_Upgrade) or Hover_Boots)",
|
||||
"Water Temple GS Near Boss Key Chest": "True",
|
||||
# Longshot just reaches without the need to actually go near,
|
||||
# Otherwise you have hovers and just hover over and collect with a jump slash
|
||||
"Fairy Pot": "
|
||||
has_bottle and (Small_Key_Water_Temple, 5) and
|
||||
(logic_water_bk_jump_dive or can_use(Iron_Boots)) and
|
||||
(logic_water_north_basement_ledge_jump or (has_explosives and Progressive_Strength_Upgrade) or Hover_Boots)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Cracked Wall",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Cracked Wall Chest": "has_explosives"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Dragon Statue",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Dragon Chest": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Middle Water Level",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Central Pillar Chest": "
|
||||
can_use(Iron_Boots) and can_use(Zora_Tunic) and can_use(Hookshot) and
|
||||
((Small_Key_Water_Temple, 5) or can_use(Bow) or can_use(Dins_Fire))"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Cracked Wall": "True"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Falling Platform Room",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple GS Falling Platform Room": "
|
||||
can_use(Longshot) or
|
||||
(logic_water_falling_platform_gs_hookshot and can_use(Hookshot)) or
|
||||
(logic_water_falling_platform_gs_boomerang and can_use(Boomerang))"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Dark Link Region": "(Small_Key_Water_Temple, 5) and can_use(Hookshot)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"region_name": "Water Temple Dark Link Region",
|
||||
"dungeon": "Water Temple",
|
||||
"locations": {
|
||||
"Water Temple Longshot Chest": "True",
|
||||
"Water Temple River Chest": "can_play(Song_of_Time) and Bow",
|
||||
"Water Temple GS River": "
|
||||
can_play(Song_of_Time) and
|
||||
((Iron_Boots and (can_use(Zora_Tunic) or logic_fewer_tunic_requirements)) or
|
||||
(logic_water_river_gs and can_use(Longshot) and (Bow or has_bombchus)))",
|
||||
"Fairy Pot":
|
||||
"has_bottle and can_play(Song_of_Time)"
|
||||
},
|
||||
"exits": {
|
||||
"Water Temple Dragon Statue": "
|
||||
(can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and
|
||||
can_play(Song_of_Time) and Bow and
|
||||
(Iron_Boots or logic_water_dragon_jump_dive or logic_water_dragon_adult)"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
settings_list.json
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,183 @@
|
||||
{
|
||||
"ADULT_INIT_ITEMS": "03481D2C",
|
||||
"ADULT_VALID_ITEMS": "03481D34",
|
||||
"AP_PLAYER_NAME": "03480834",
|
||||
"AUDIO_THREAD_INFO": "03482FAC",
|
||||
"AUDIO_THREAD_INFO_MEM_SIZE": "03482FCC",
|
||||
"AUDIO_THREAD_INFO_MEM_START": "03482FC8",
|
||||
"AUDIO_THREAD_MEM_START": "0348EF10",
|
||||
"BOMBCHUS_IN_LOGIC": "03480CBC",
|
||||
"CFG_A_BUTTON_COLOR": "03480854",
|
||||
"CFG_A_NOTE_COLOR": "03480872",
|
||||
"CFG_BOMBCHU_TRAIL_INNER_COLOR": "03480884",
|
||||
"CFG_BOMBCHU_TRAIL_OUTER_COLOR": "03480887",
|
||||
"CFG_BOOM_TRAIL_INNER_COLOR": "0348087E",
|
||||
"CFG_BOOM_TRAIL_OUTER_COLOR": "03480881",
|
||||
"CFG_B_BUTTON_COLOR": "0348085A",
|
||||
"CFG_C_BUTTON_COLOR": "03480860",
|
||||
"CFG_C_NOTE_COLOR": "03480878",
|
||||
"CFG_DAMAGE_MULTIPLYER": "03482C9C",
|
||||
"CFG_DISPLAY_DPAD": "0348088A",
|
||||
"CFG_HEART_COLOR": "0348084E",
|
||||
"CFG_MAGIC_COLOR": "03480848",
|
||||
"CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": "0348088F",
|
||||
"CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": "03480890",
|
||||
"CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": "0348088D",
|
||||
"CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": "0348088E",
|
||||
"CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": "03480893",
|
||||
"CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": "03480894",
|
||||
"CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": "03480891",
|
||||
"CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": "03480892",
|
||||
"CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": "03480895",
|
||||
"CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": "03480896",
|
||||
"CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": "03480897",
|
||||
"CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": "03480898",
|
||||
"CFG_RAINBOW_SWORD_INNER_ENABLED": "0348088B",
|
||||
"CFG_RAINBOW_SWORD_OUTER_ENABLED": "0348088C",
|
||||
"CFG_SHOP_CURSOR_COLOR": "0348086C",
|
||||
"CFG_TEXT_CURSOR_COLOR": "03480866",
|
||||
"CHAIN_HBA_REWARDS": "03483940",
|
||||
"CHEST_SIZE_MATCH_CONTENTS": "034826DC",
|
||||
"COMPLETE_MASK_QUEST": "0348B191",
|
||||
"COOP_CONTEXT": "03480020",
|
||||
"COOP_VERSION": "03480020",
|
||||
"COSMETIC_CONTEXT": "03480844",
|
||||
"COSMETIC_FORMAT_VERSION": "03480844",
|
||||
"CURRENT_GROTTO_ID": "03482E6E",
|
||||
"DEBUG_OFFSET": "0348288C",
|
||||
"DISABLE_TIMERS": "03480CDC",
|
||||
"DPAD_TEXTURE": "0348D710",
|
||||
"DUNGEONS_SHUFFLED": "03480CDE",
|
||||
"EXTENDED_OBJECT_TABLE": "03480C9C",
|
||||
"EXTERN_DAMAGE_MULTIPLYER": "03482C9D",
|
||||
"FAST_BUNNY_HOOD_ENABLED": "03480CE0",
|
||||
"FAST_CHESTS": "03480CD6",
|
||||
"FONT_TEXTURE": "0348C248",
|
||||
"FREE_SCARECROW_ENABLED": "03480CCC",
|
||||
"GET_CHEST_OVERRIDE_COLOR_WRAPPER": "0348270C",
|
||||
"GET_CHEST_OVERRIDE_SIZE_WRAPPER": "034826E0",
|
||||
"GET_ITEM_TRIGGERED": "034813F8",
|
||||
"GOSSIP_HINT_CONDITION": "03480CC8",
|
||||
"GROTTO_EXIT_LIST": "03482E2C",
|
||||
"GROTTO_LOAD_TABLE": "03482DA8",
|
||||
"INCOMING_ITEM": "03480028",
|
||||
"INCOMING_PLAYER": "03480026",
|
||||
"INITIAL_SAVE_DATA": "0348089C",
|
||||
"JABU_ELEVATOR_ENABLE": "03480CD4",
|
||||
"LACS_CONDITION": "03480CC4",
|
||||
"LACS_CONDITION_COUNT": "03480CD2",
|
||||
"MALON_GAVE_ICETRAP": "0348367C",
|
||||
"MALON_TEXT_ID": "03480CDB",
|
||||
"MAX_RUPEES": "0348B193",
|
||||
"MOVED_ADULT_KING_ZORA": "03482FEC",
|
||||
"NO_ESCAPE_SEQUENCE": "0348B15C",
|
||||
"NO_FOG_STATE": "03480CDD",
|
||||
"OCARINAS_SHUFFLED": "03480CD5",
|
||||
"OPEN_KAKARIKO": "0348B192",
|
||||
"OUTGOING_ITEM": "03480030",
|
||||
"OUTGOING_KEY": "0348002C",
|
||||
"OUTGOING_PLAYER": "03480032",
|
||||
"OVERWORLD_SHUFFLED": "03480CDF",
|
||||
"PAYLOAD_END": "0348EF10",
|
||||
"PAYLOAD_START": "03480000",
|
||||
"PLAYED_WARP_SONG": "034811FC",
|
||||
"PLAYER_ID": "03480024",
|
||||
"PLAYER_NAMES": "03480034",
|
||||
"PLAYER_NAME_ID": "03480025",
|
||||
"RAINBOW_BRIDGE_CONDITION": "03480CC0",
|
||||
"RAINBOW_BRIDGE_COUNT": "03480CD0",
|
||||
"RANDO_CONTEXT": "03480000",
|
||||
"SHUFFLE_BEANS": "03482D04",
|
||||
"SHUFFLE_CARPET_SALESMAN": "034839F8",
|
||||
"SHUFFLE_COWS": "03480CD7",
|
||||
"SHUFFLE_MEDIGORON": "03483A54",
|
||||
"SONGS_AS_ITEMS": "03480CD8",
|
||||
"SOS_ITEM_GIVEN": "034814C4",
|
||||
"SPEED_MULTIPLIER": "0348274C",
|
||||
"START_TWINROVA_FIGHT": "0348306C",
|
||||
"TIME_TRAVEL_SAVED_EQUIPS": "03481A50",
|
||||
"TRIFORCE_ICON_TEXTURE": "0348DF10",
|
||||
"TWINROVA_ACTION_TIMER": "03483070",
|
||||
"WINDMILL_SONG_ID": "03480CD9",
|
||||
"WINDMILL_TEXT_ID": "03480CDA",
|
||||
"a_button": "0348B120",
|
||||
"a_note_b": "0348B10C",
|
||||
"a_note_font_glow_base": "0348B0F4",
|
||||
"a_note_font_glow_max": "0348B0F0",
|
||||
"a_note_g": "0348B110",
|
||||
"a_note_glow_base": "0348B0FC",
|
||||
"a_note_glow_max": "0348B0F8",
|
||||
"a_note_r": "0348B114",
|
||||
"active_item_action_id": "0348B174",
|
||||
"active_item_fast_chest": "0348B164",
|
||||
"active_item_graphic_id": "0348B168",
|
||||
"active_item_object_id": "0348B16C",
|
||||
"active_item_row": "0348B178",
|
||||
"active_item_text_id": "0348B170",
|
||||
"active_override": "0348B180",
|
||||
"active_override_is_outgoing": "0348B17C",
|
||||
"b_button": "0348B11C",
|
||||
"beating_dd": "0348B128",
|
||||
"beating_no_dd": "0348B130",
|
||||
"c_button": "0348B118",
|
||||
"c_note_b": "0348B100",
|
||||
"c_note_font_glow_base": "0348B0E4",
|
||||
"c_note_font_glow_max": "0348B0E0",
|
||||
"c_note_g": "0348B104",
|
||||
"c_note_glow_base": "0348B0EC",
|
||||
"c_note_glow_max": "0348B0E8",
|
||||
"c_note_r": "0348B108",
|
||||
"cfg_dungeon_info_enable": "0348B0AC",
|
||||
"cfg_dungeon_info_mq_enable": "0348B150",
|
||||
"cfg_dungeon_info_mq_need_map": "0348B14C",
|
||||
"cfg_dungeon_info_reward_enable": "0348B0A8",
|
||||
"cfg_dungeon_info_reward_need_altar": "0348B144",
|
||||
"cfg_dungeon_info_reward_need_compass": "0348B148",
|
||||
"cfg_dungeon_is_mq": "0348B1B0",
|
||||
"cfg_dungeon_rewards": "03489ECC",
|
||||
"cfg_file_select_hash": "0348B158",
|
||||
"cfg_item_overrides": "0348B204",
|
||||
"defaultDDHeart": "0348B134",
|
||||
"defaultHeart": "0348B13C",
|
||||
"dpad_sprite": "0348A040",
|
||||
"dummy_actor": "0348B188",
|
||||
"dungeon_count": "0348B0B0",
|
||||
"dungeons": "03489EF0",
|
||||
"empty_dlist": "0348B0C8",
|
||||
"extern_ctxt": "03489F8C",
|
||||
"font_sprite": "0348A050",
|
||||
"freecam_modes": "03489C4C",
|
||||
"hash_sprites": "0348B0BC",
|
||||
"hash_symbols": "03489FA0",
|
||||
"heap_next": "0348B1AC",
|
||||
"heart_sprite": "03489FE0",
|
||||
"icon_sprites": "03489E10",
|
||||
"item_digit_sprite": "0348A000",
|
||||
"item_overrides_count": "0348B18C",
|
||||
"item_table": "0348A0C8",
|
||||
"items_sprite": "0348A070",
|
||||
"key_rupee_clock_sprite": "0348A010",
|
||||
"last_fog_distance": "0348B0B4",
|
||||
"linkhead_skull_sprite": "03489FF0",
|
||||
"medal_colors": "03489EDC",
|
||||
"medals_sprite": "0348A080",
|
||||
"normal_dd": "0348B124",
|
||||
"normal_no_dd": "0348B12C",
|
||||
"object_slots": "0348C204",
|
||||
"pending_freezes": "0348B190",
|
||||
"pending_item_queue": "0348B1EC",
|
||||
"quest_items_sprite": "0348A060",
|
||||
"rupee_colors": "03489E1C",
|
||||
"satisified_pending_frames": "0348B160",
|
||||
"scene_fog_distance": "0348B0B8",
|
||||
"setup_db": "0348A0A0",
|
||||
"song_note_sprite": "0348A020",
|
||||
"stones_sprite": "0348A090",
|
||||
"text_cursor_border_base": "0348B0D4",
|
||||
"text_cursor_border_max": "0348B0D0",
|
||||
"text_cursor_inner_base": "0348B0DC",
|
||||
"text_cursor_inner_max": "0348B0D8",
|
||||
"triforce_hunt_enabled": "0348B1A0",
|
||||
"triforce_pieces_requied": "0348B142",
|
||||
"triforce_sprite": "0348A030"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x°у▒AJеPEцEбГ#≈┌tЬвЮ
|
||||
\ц╔┐©┤╝2t \└В∙Ч╒(╞S
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user