Compare commits

..

13 Commits

Author SHA1 Message Date
PJB3005 92906a3269 Audio replacement priority & lifecycle handling 2026-07-27 15:41:08 +02:00
PJB3005 4e46c04c91 Add field to JASChannel to keep sample data backing wave replacements alive
How to ensure stuff doesn't get freed when mod reloading gets involved? More shared_ptr
2026-07-26 15:00:53 +02:00
PJB3005 f6e05eb04f Unhardcode sound effects wave bank in replacements 2026-07-26 14:25:28 +02:00
PJB3005 63d4ce2e8f Merge remote-tracking branch 'origin/main' into 26-07-25-audio-replacements
# Conflicts:
#	CMakeLists.txt
2026-07-25 16:08:31 +02:00
PJB3005 de44bbaa26 Example mod for audio_res service 2026-07-25 16:02:42 +02:00
PJB3005 98b203fd26 Mod api audio_res service for replacing audio samples (waves)
More things planned for the future, this is a basic prototype and far from finished. Still needs lots of work
2026-07-25 16:02:20 +02:00
PJB3005 0c0bc7c9e2 Compile out unused fields in DSP TChannel definition 2026-07-25 15:49:49 +02:00
PJB3005 ad80933ccf Allow audio samples to be played back from anywhere in memory rather than ARAM.
This is accomplished through a new mAramBaseAddress field on the DSP channels, which effectively relocates ARAM for that channel.
2026-07-25 15:49:13 +02:00
PJB3005 30c36df76b Add LE(T) macro
I figured since I was messing with some parsing code might as well be prudent. In case somebody revives big-endian CPUs.
2026-07-25 15:40:32 +02:00
PJB3005 6ded3ac467 JAudio naming/docs pass 2026-07-25 15:32:02 +02:00
PJB3005 a6c4419da6 cast.hpp helper
I was tired of manually bounds-checking my integer casts.
2026-07-25 15:26:15 +02:00
PJB3005 226a1fc482 read_unaligned helper
"Things C++ should've had built-in 2 decades ago"
2026-07-25 15:18:37 +02:00
PJB3005 079c969bb4 Some JAudio markdown docs, WSYS filled out. 2026-07-25 15:15:15 +02:00
219 changed files with 1391 additions and 55065 deletions
+25 -1
View File
@@ -90,6 +90,7 @@ option(DUSK_ENABLE_SENTRY_NATIVE "Enable sentry-native crash reporting support"
option(DUSK_PACKAGE_INSTALL "Install Dusklight with a Linux-native file structure" OFF)
option(DUSK_GFX_DEBUG_GROUPS "Report debug groups to the native graphics API" ${DUSK_GFX_DEBUG_GROUPS_DEFAULT})
option(DUSK_ENABLE_CODE_MODS "Enable code mods" OFF)
option(DUSK_ENABLE_OPUS "Enable loading Opus audio files for mods" ON)
set(DUSK_HAS_FUNCHOOK OFF)
if (DUSK_ENABLE_CODE_MODS AND (NOT APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Darwin"))
@@ -248,6 +249,25 @@ FetchContent_Declare(miniz
)
set(_fetch_content_deps cxxopts json miniz)
if (DUSK_ENABLE_OPUS)
message(STATUS "dusklight: Fetching opusfile")
# Opusfile options
SET(OP_DISABLE_HTTP ON CACHE BOOL "" FORCE)
SET(OP_DISABLE_DOCS ON CACHE BOOL "" FORCE)
SET(OP_DISABLE_EXAMPLES ON CACHE BOOL "" FORCE)
message(STATUS "dusklight: Fetching opusfile")
FetchContent_Declare(
opusfile
GIT_REPOSITORY https://github.com/xiph/opusfile.git
GIT_TAG 6dfd29e7adb87f2e193575fc3fa88cbf1a0b27df
)
list(APPEND _fetch_content_deps opusfile)
endif ()
if (DUSK_HAS_FUNCHOOK)
message(STATUS "dusklight: Fetching funchook")
# cmake/PatchFunchook.cmake patches funchook's cmake/capstone.cmake.in to inject a
@@ -340,6 +360,10 @@ set(GAME_LIBS aurora::core aurora::gx aurora::gd aurora::si aurora::vi aurora::p
if (DUSK_HAS_FUNCHOOK)
list(APPEND GAME_LIBS funchook-static)
endif ()
if (DUSK_ENABLE_OPUS)
list(APPEND GAME_LIBS OpusFile::opusfile)
list(APPEND GAME_COMPILE_DEFS DUSK_OPUS=1)
endif ()
if (DUSK_ENABLE_SENTRY_NATIVE)
list(APPEND GAME_LIBS sentry)
@@ -610,7 +634,7 @@ if (DUSK_ENABLE_CODE_MODS AND CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR
add_subdirectory(mods/template_mod)
add_subdirectory(mods/ao_mod)
add_subdirectory(mods/shadow_mod)
add_subdirectory(mods/randomizer)
add_subdirectory(mods/audio_mod)
endif ()
if (APPLE)
+228
View File
@@ -0,0 +1,228 @@
#pragma endian big
#include "std/sys.pat"
#include "type/magic.pat"
#include "std/array.pat"
/*
WSYS file
The WSYS file contains roughly two sections: WBCT and WINF.
WBCT contains the mapping of Wave ID -> wave archives.
WINF are the wave archives themselves and their metadata.
*/
/**
* Wrapper for a file-global pointer that allows it to be stored in an array.
*/
struct Offset<T> {
T* offset : u32 [[inline]];
};
/**
* Format that audio data is in..
*/
enum WaveFormat : u8 {
/**
* 16-samples-per-9-bytes custom Nintendo ADPCM.
*/
ADPCM4 = 0,
/**
* 16-samples-per-5-bytes custom Nintendo ADPCM.
*/
ADPCM2 = 1,
/**
* 8-bit-per-sample PCM.
*/
PCM8 = 2,
/**
* 16-bit-per-sample PCM.
*/
PCM16 = 3,
};
/**
* Defines playback info for a single audio "wave".
* This data is stored per archive, making it duplicated (except for mAWOffsetStart)
*/
struct TWave {
padding[1]; // unknown
WaveFormat mWaveFormat;
/**
* Key (as in like, the musical term) this sample is in.
*/
u8 mBaseKey;
padding[1];
/**
* Sample rate of the audio in Hz.
*/
float mSampleRate;
/**
* Position where the sample data starts.
* This is in the .aw file for the archive containing this TWave.
*/
u32 mAWOffsetStart;
/**
* Byte length of the sample data.
*/
u32 mAWLength;
/**
* Indicates whether the sample should loop or not. All bits appear set if so.
*/
u32 mLoopFlags;
/**
* Audio sample at which the loop starts.
*/
u32 mLoopStartSample;
/**
* Audio sample at which the loop ends (and goes back to mLoopStartSample).
*/
u32 mLoopEndSample;
/**
* Total sample count in this wave.
*/
u32 mSampleCount;
/**
* Last sample for continuing ADPCM decode after loop.
*/
s16 mpLast;
/**
* Penult sample for continuing ADPCM decode after loop.
*/
s16 mpPenult;
};
/**
* A single wave archive on disk.
* These are paired 1:1 with TCtrlScene objects.
*/
struct TWaveArchive {
/**
* Filename of the raw sample data on disc. Relative to /Audiores/Waves/
*/
char mFileName[0x70];
/**
* Amount of waves in this archive.
* Matches the count in the paired TCtrl object.
*/
u32 mWaveCount;
/**
* Offsets to the wave metadata (not sample data) in the WSYS.
* These are paired 1:1 to the TCtrlWaves, and the TCtrlWave contains the actual
* "Wave ID" used by the game for lookups.
*/
Offset<TWave> waveOffsets[mWaveCount];
};
/**
* Header containing data for wave archives and their metadata.
*/
struct TWaveArchiveBank {
type::Magic<"WINF"> mMagic;
/**
* Amount of archives in this wave bank.
* Matches the value in TCtrlGroup.
*/
u32 mArchiveCounts;
Offset<TWaveArchive> mArchiveOffsets[mArchiveCounts];
};
/**
* Definition for a single wave in a control group.
*/
struct TCtrlWave {
/**
* Group ID matches the index of the control group this item is referenced by.
*/
u16 mGroupId;
/**
* Wave ID used by the game to look this wave up.
*/
u16 mWaveId;
};
/**
* Contains the actual data for a TCtrlScene.
* Why is this separate? Who knows.
*/
struct TCtrl {
// Other versions of this struct with different magic (C-EX and C-ST) also exist in the file.
// They aren't pointed to so we don't need to worry about them.
type::Magic<"C-DF"> mMagic;
/**
* Amount of waves in this group.
* Matches the value in TWaveArchive.
*/
u32 waveCount;
Offset<TCtrlWave> mWaveOffsets[waveCount];
};
/**
* A single scene or "group" of waves that are loaded at once.
*/
struct TCtrlScene {
type::Magic<"SCNE"> mMagic;
padding[8]; // unknown
TCtrl* mCtrlOffset : u32 [[inline]];
};
/**
* Contains the "control" section of the WSYS.
*/
struct TCtrlGroup {
type::Magic<"WBCT"> mMagic;
padding[4]; // unknown
u32 mGroupCount;
Offset<TCtrlScene> mCtrlSceneOffsets[mGroupCount];
};
struct THeader {
type::Magic<"WSYS"> mMagic;
/**
* Size of WSYS in bytes.
*/
u32 mSize;
/**
* ID of wave bank.
* This matches the value passed to the BAA load command.
* The game does not use this value itself.
*/
u32 mId;
/**
* Total amount of waves in this wave bank.
* (not groups! Waves!)
*/
u32 mWaveTableSize;
TWaveArchiveBank* archiveBankOffset : u32;
TCtrlGroup* ctrlGroupOffset : u32;
};
THeader header @ 0x0;
std::assert(
header.archiveBankOffset.mArchiveCounts == header.ctrlGroupOffset.mGroupCount,
"Control group and archive count does not match!");
+90
View File
@@ -0,0 +1,90 @@
# JAudio
**JAudio** is the name for the audio engine used by Twilight Princess (along with many other Nintendo games from the era). TP uses exclusively JAudio v2, while other games use v1 or a mix of v1 and v2 infrastructure. This document will primarily focus on TP's use case, but best efforts will be made to document where behavior is TP-specific.
## Common concepts
Audio is almost exclusively
### `JAISoundID`
A "sound", be that a _sound effect_ or music, is referenced in-code through the `JAISoundID` type. This is a `u32` that the game uses to look up the relevant sound. The actual value is bitpacked (BE) from the following fields:
| Type | Field | Description |
|-------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `u8` | Section ID | Section of the Sound Table this sound effect is located in. 0 for sound effects, 1 for sequenced music, 2 for streamed music.[^sectionids] |
| `u8` | Group ID | ID of group further used to organize inside the Sound Table's Section. Sound effects are grouped into things like "SYSTEM" and "ENEMY", other sections leave this at 0. |
| `u16` | "Wave ID" | Index inside the group to look up the sound at.<br/>**Note** that the term "wave" in code is extremely confusing[^waveterm]; it does **not** refer to audio samples ("waves") in the wave banks directly. |
[^sectionids]: JAudio itself can seemingly work outside this convention, however it is enforced by some TP-specific game code.
[^waveterm]: Possibly vestigial from JAudio v1, where I believe there were less layers of indirection.
## Disc files
All audio data is stored in `/Audiores` on the disc. Files are as follows:
### `/Audiores/Seqs/Z2SoundSeqs.arc`
Contains the BMS instructions for all BMS-based music and sound effects. Not all data is kept in memory at once.
### `/Audiores/Stream/*.ast`
Contains individual streamed music. Each file is a separate music track. See [this page](https://www.lumasworkshop.com/wiki/AST_(File_Format)) for file format description.
### `/Audiores/Waves/*.aw`
Contains audio sample data for sequenced music and sound effects. These files are pure meat, no bone: they are loaded directly into ARAM and all metadata is stored in the BAA WSYS sections.
Each file contains audio samples for one "scene", with factors like the current level determining what "scenes" are made resident in memory. There is tons of duplicate data between scenes, presumably to increase simplicity and loading performance.
### `/Audiores/Z2Sound.baa`
Contains all remaining metadata for the audio system. This is effectively a container for a bunch of different sub-sections. The file starts with a bunch of "commands" that indicate where other data in the file is. Each command has a 4-character identifier and depending on the command will be followed by some extra arguments before the next command.
The commands used by TP's BAA file are as follows (note that the decompiled code has support for more load commands, which are unused):
| Command/Argument | Value | Description |
|------------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| Command | `AA_<` | Start of BAA commands. Must be at the start of the file and only appear once. |
| Command | `>_AA` | End of BAA commands. |
| Command | `ws `[^spaces] | Wave bank/WSYS data. Defines where audio samples are located on disc. |
| Argument | u32 | Wave bank ID, max 255. In TP, 0 is sound effects, 1 is music samples. |
| Argument | u32 | File offset for start of `WSYS` data |
| Argument | u32 | Bit field selecting which groups (= `.aw` files) to load immediately. TP leaves this at zero.[^32ws] |
| Command | `bnk `[^spaces] | Instrument bank/IBNK |
| Argument | u32 | Target wave bank ID |
| Argument | u32 | File offset for start of `IBNK` data |
| Command | `bsc `[^spaces] | Sound effect sequence collection. |
| Argument | u32 | File offset for start of `SC` data. |
| Argument | u32 | File offset for end of `SC` data. |
| Command | `bst `[^spaces] | Sound table. Defines parameters for music and sound effects. |
| Argument | u32 | File offset for start of `BST `[^spaces] data. |
| Argument | u32 | File offset for end of `BST `[^spaces] data. |
| Command | `bstn` | Sound name table. Defines names of all music and sound effects. Present on disc, but loading is disabled on release versions of the game. |
| Argument | u32 | File offset for start of `BSTN` data. |
| Argument | u32 | File offset for end of `BSTN` data. |
| Command | `bfca` | Unknown, something related to initialization of DSP FX data. |
| Argument | u32 | File offset for start of `RARC` data. |
[^spaces]: Padded with spaces.
[^32ws]: Both of TP's wave banks have far more than 32 groups, and seemingly this mechanism would not be able to deal with that.
Following is data descriptions for the remaining data in the `.BAA`, as pointed to by the above commands.
### `WSYS` / Wave banks
`WSYS` / Wave bank data defines where a set of audio samples can be found on disc. Each wave bank is made of multiple "groups", where each group corresponds to one `.aw` file on disc. Each group has a set of "wave IDs" it contains, along with the metadata (e.g. sample rate) and data offset in the `.aw` file.
Multiple groups can contain the same wave ID, thus meaning the raw audio samples can be duplicated on disk.
For the actual binary layout of this data, check [the ImHex pattern](imhex/jaudio/wsys.hexpat)
*Relevant classes: `JASWSParser`, `JASBasicWaveBank`, `JASSimpleWaveBank`.*
## Further reading & credits
* https://www.lumasworkshop.com/wiki/SMR.szs (note that details like the exact layout of the BAA are not the same as TP)
* XAYRGA for doing much RE work and making [JAMTools](https://xayr.gay/tools/SoundModdingToolkit/)
* The decompiled source code, duh.
+1 -1
+5
View File
@@ -1485,6 +1485,10 @@ set(DUSK_FILES
src/dusk/mods/log_buffer.hpp
src/dusk/mods/manifest.cpp
src/dusk/mods/manifest.hpp
src/dusk/mods/svc/audio_res/audio_res.hpp
src/dusk/mods/svc/audio_res/audio_res.cpp
src/dusk/mods/svc/audio_res/wave.cpp
src/dusk/mods/svc/audio_res/opus.cpp
src/dusk/mods/svc/camera.cpp
src/dusk/mods/svc/config.cpp
src/dusk/mods/svc/config.hpp
@@ -1583,6 +1587,7 @@ set(DUSK_FILES
src/helpers/endian.cpp
src/helpers/offset_ptr.cpp
src/helpers/string.cpp
src/helpers/cast.cpp
)
set(DUSK_HTTP_BACKEND_FILES
+1 -1
View File
@@ -47,7 +47,7 @@ public:
s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); }
u8 getDemoSeWaveNum() { return loadedDemoWave; }
// private:
private:
/* 0x00 */ JAISoundID BGM_ID;
/* 0x04 */ int sceneNum;
/* 0x08 */ int timer;
-1
View File
@@ -1291,7 +1291,6 @@ public:
}
void set(const char*, s8, s16, s8, s8, u8);
void offEnable() { enabled = 0; }
void onEnable() { enabled = 1; }
BOOL isEnable() const { return enabled; }
s8 getWipe() const { return wipe; }
u8 getWipeSpeed() const { return wipe_speed; }
+18
View File
@@ -0,0 +1,18 @@
#pragma once
namespace dusk::helpers::alignment {
/**
* Read data from an address that may not be aligned properly.
* @tparam T Type of data to read.
* @param ptr Address to read from.
* @return The copied value.
*/
template <typename T> requires std::is_trivially_copyable_v<T>
[[nodiscard]] constexpr T read_unaligned(u8 const* ptr) {
T copy;
memcpy(&copy, ptr, sizeof(T));
return copy;
}
}
+48
View File
@@ -0,0 +1,48 @@
#pragma once
#include <limits>
#include <utility>
#include <span>
/**
* Helper functions for performing casts.
*/
namespace dusk::helpers::cast {
/**
* Implementation details of dusk::helpers::cast.
*/
namespace _impl {
[[noreturn]] void overrun_high();
[[noreturn]] void overrun_low();
}
template <typename T>
concept IntCastable = std::is_integral_v<T> && std::is_trivially_copyable_v<T>;
/**
* Helper type that allows easily casting between integer types,
* that safely aborts if an overflow were to occur.
* Usage:
* @code
* size_t foobar = 20;
* int real = bounded_cast(foobar);
* @endcode
*/
template <IntCastable Source>
struct bounded_cast {
Source src;
template <IntCastable Target>
[[nodiscard]] constexpr operator Target() const {
if (std::cmp_greater(src, std::numeric_limits<Target>::max())) [[unlikely]] {
_impl::overrun_high();
}
if (std::cmp_less(src, std::numeric_limits<Target>::min())) [[unlikely]] {
_impl::overrun_low();
}
return static_cast<Target>(src);
}
};
}
+1
View File
@@ -285,6 +285,7 @@ inline void be_swap(Mtx& val) {
}
}
#define LE(T) T
#define BE(T) BE<T>
#define BE_HOST(T) (T.host())
#else
@@ -12,21 +12,27 @@ struct JASBasicWaveBank : public JASWaveBank {
struct TWaveHandle : public JASWaveHandle {
TWaveHandle() { mHeap = NULL; }
virtual intptr_t getWavePtr() const;
virtual const JASWaveInfo* getWaveInfo() const { return &field_0x4; }
virtual const JASWaveInfo* getWaveInfo() const { return &mWaveInfo; }
#if TARGET_PC
/**
* @see JASChannel::mAramBaseAddress
*/
[[nodiscard]] void const* getAramBaseAddress() const override { return nullptr; }
#endif
bool compareHeap(JASHeap* heap) const { return mHeap == heap;}
/* 0x04 */ JASWaveInfo field_0x4;
/* 0x04 */ JASWaveInfo mWaveInfo;
/* 0x28 */ JASHeap* mHeap;
};
struct TGroupWaveInfo {
TGroupWaveInfo() {
field_0x0 = 0xffff;
field_0x4 = -1;
waveId = 0xffff;
mOffsetStart = -1;
}
/* 0x00 */ u16 field_0x0;
/* 0x04 */ int field_0x4;
/* 0x00 */ u16 waveId;
/* 0x04 */ int mOffsetStart;
};
struct TWaveGroup : JASWaveArc {
@@ -44,7 +50,7 @@ struct JASBasicWaveBank : public JASWaveBank {
u32 getWaveCount() const { return mWaveCount; }
};
JASBasicWaveBank();
JASBasicWaveBank(IF_DUSK(u32 bankId));
~JASBasicWaveBank();
TWaveGroup* getWaveGroup(u32);
void setGroupCount(u32, JKRHeap*);
@@ -56,7 +62,7 @@ struct JASBasicWaveBank : public JASWaveBank {
JASWaveArc* getWaveArc(u32 param_0) { return getWaveGroup(param_0); }
u32 getArcCount() const { return mGroupCount; }
/* 0x04 */ OSMutex field_0x4;
/* 0x04 */ OSMutex mWaveTableMutex;
/* 0x1C */ TWaveHandle* mWaveTable;
/* 0x20 */ TWaveGroup* mWaveGroupArray;
/* 0x24 */ u16 mHandleCount;
@@ -8,6 +8,7 @@
#include "JSystem/JAudio2/JASWaveInfo.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
#include <os.h>
#include <memory>
struct JASDSPChannel;
@@ -15,6 +16,20 @@ namespace JASDsp {
struct TChannel;
}
#if TARGET_PC
/**
* An object to manage the lifetime of the sample data pointed to by JASChannel.
*
* JASChannel can (optionally) accept an unique_ptr to an object to this type,
* in which case it will be destroyed when the JASChannel is done.
*
* @see JASChannel::mSampleReference
*/
struct JASSampleDataReference {
virtual ~JASSampleDataReference() = default;
};
#endif
/**
* @ingroup jsystem-jaudio
*
@@ -166,6 +181,23 @@ public:
u32 field_0x104;
};
#if TARGET_PC
/**
* Memory address at which this sound effect should consider ARAM to start.
*
* By changing this, sound effects can effectively be played back from anywhere in memory,
* rather than just the emulated ARAM space.
*
* If nullptr, the regular emulated ARAM is used.
*/
void const* mAramBaseAddress;
/**
* @see JASSampleDataReference
*/
std::unique_ptr<JASSampleDataReference> mSampleReference;
#endif
static DUSK_GAME_DATA OSMessageQueue sBankDisposeMsgQ;
static DUSK_GAME_DATA OSMessage sBankDisposeMsg[16];
static DUSK_GAME_DATA OSMessage sBankDisposeList[16];
@@ -109,7 +109,9 @@ namespace JASDsp {
* Pitch shift via changing playback speed.
*/
/* 0x004 */ u16 mPitch;
#if !TARGET_PC
/* 0x006 */ short _unused1;
#endif
/**
* Set to 1 when playback starts, cleared by DSP later,
@@ -118,19 +120,27 @@ namespace JASDsp {
* (Corroborated by fields JASAramStream checks never being cleared explicitly by CPU.)
*/
/* 0x008 */ u16 mResetFlag;
#if !TARGET_PC
/* 0x00A */ u8 _unused2[0x00C - 0x00A];
#endif
/* 0x00C */ s16 mPauseFlag;
#if !TARGET_PC
/* 0x00E */ short _unused3;
#endif
/* 0x010 */ OutputChannelConfig mOutputChannels[DSP_OUTPUT_CHANNELS];
#if !TARGET_PC
/* 0x040 */ u8 _unused4[0x050 - 0x040];
#endif
/* 0x050 */ u16 mAutoMixerPanDolby; // pan is upper 8 bits, dolby lower 8.
/* 0x052 */ u16 mAutoMixerFxMix;
/* 0x054 */ u16 mAutoMixerInitVolume;
/* 0x056 */ u16 mAutoMixerVolume;
/* 0x058 */ u16 mAutoMixerBeenSet;
#if !TARGET_PC
/* 0x05A */ u8 _unused5[0x060 - 0x05A];
/* 0x060 */ short field_0x060; // Only cleared to zero, presumed used by DSP.
/* 0x062 */ u8 _unused6[0x064 - 0x062];
#endif
/**
* Samples per ADPCM frame for ADPCM audio. Seems just set to 1 for PCM formats.
@@ -139,7 +149,9 @@ namespace JASDsp {
/* 0x064 */ u16 mSamplesPerBlock;
/* 0x066 */ short field_0x066; // Only cleared to zero, presumed used by DSP.
/* 0x068 */ u32 mSamplePosition; // Only ever initialized by code, name is guess.
#if !TARGET_PC
/* 0x06C */ u8 _unused7[0x070 - 0x06C];
#endif
/**
* Current audio read position in ARAM. Updated by DSP.
@@ -151,11 +163,13 @@ namespace JASDsp {
* Gets written by DSP, but also CPU.
*/
/* 0x074 */ u32 mSamplesLeft; // Never directly cleared to zero. Seems sus. Cleared by DSP?
#if !TARGET_PC
/* 0x078 */ short field_0x078[4]; // Only cleared to zero, presumed used by DSP.
/* 0x080 */ short field_0x080[20]; // Only cleared to zero, presumed used by DSP.
/* 0x0A8 */ short field_0x0a8[4]; // Only cleared to zero, presumed used by DSP.
/* 0x0B0 */ u16 field_0x0b0[16]; // Only cleared to zero, presumed used by DSP.
/* 0x0D0 */ u8 _unused8[0x100 - 0x0D0];
#endif
/* 0x100 */ u16 mBytesPerBlock;
/* 0x102 */ u16 mLoopFlag;
@@ -176,9 +190,26 @@ namespace JASDsp {
/* 0x118 */ u32 mWaveAramAddress;
/* 0x11C */ int mSampleCount;
/* 0x120 */ s16 fir_filter_params[8];
#if !TARGET_PC
/* 0x130 */ u8 _unused9[0x148 - 0x130];
#endif
/* 0x148 */ s16 iir_filter_params[8];
#if !TARGET_PC
/* 0x158 */ u8 _unused10[0x180 - 0x158];
#endif
#if TARGET_PC
/**
* Memory address at which this sound effect should consider ARAM to start.
* This means fields like mWaveAramAddress will be relative to this pointer instead.
*
* By changing this, sound effects can effectively be played back from anywhere in memory,
* rather than just the emulated ARAM space.
*
* If nullptr, the regular emulated ARAM is used.
*/
void const* mAramBaseAddress;
#endif
};
void boot(void (*)(void*));
@@ -10,12 +10,18 @@ struct JASSimpleWaveBank : JASWaveBank, JASWaveArc {
intptr_t getWavePtr() const;
TWaveHandle();
const JASWaveInfo* getWaveInfo() const;
#if TARGET_PC
/**
* @see JASChannel::mAramBaseAddress
*/
[[nodiscard]] void const* getAramBaseAddress() const override { return nullptr; }
#endif
/* 0x04 */ JASWaveInfo mWaveInfo;
/* 0x28 */ JASHeap* mHeap;
};
JASSimpleWaveBank();
JASSimpleWaveBank(IF_DUSK(u32 bankId));
~JASSimpleWaveBank();
void setWaveTableSize(u32, JKRHeap*);
JASWaveHandle* getWaveHandle(u32) const;
@@ -26,7 +26,9 @@ public:
};
struct TCtrlWave {
/* 0x0 */ BE(u32) _00;
// Wave ID in lower half.
// Upper bits appear to be group ID, which is unused by the game code.
/* 0x0 */ BE(u32) mWaveAndGroupId;
};
struct TWave {
@@ -57,13 +59,14 @@ public:
};
struct TCtrl {
/* 0x0 */ u8 _00[4];
/* 0x0 */ BE(u32) mMagic; // 'C-DF'.
/* 0x4 */ BE(u32) mWaveCount;
/* 0x8 */ TOffset<TCtrlWave> mCtrlWaveOffsets[0];
};
struct TCtrlScene {
/* 0x0 */ u8 _00[0xC];
/* 0x0 */ BE(u32) mMagic; // 'SCNE'
/* 0x4 */ u8 _00[0x8];
/* 0xC */ TOffset<TCtrl> mCtrlOffset;
};
@@ -66,7 +66,7 @@ struct JASWaveArc : JASDisposer {
};
/* 0x04 */ mutable JASHeap mHeap;
/* 0x48 */ u32 _48;
/* 0x48 */ u32 mCurrentlyLoaded;
/* 0x4C */ volatile s32 mStatus;
/* 0x50 */ int mEntryNum;
/* 0x54 */ u32 mFileLength;
@@ -2,6 +2,11 @@
#define JASWAVEINFO_H
#include <types.h>
#include <memory>
#if TARGET_PC
struct JASSampleDataReference;
#endif
struct JASWaveArc;
@@ -17,7 +22,7 @@ struct JASWaveArc;
struct JASWaveInfo {
JASWaveInfo() {
mBaseKey = 0x3c;
field_0x20 = &one;
mpLoaded = &one;
}
/* 0x00 */ u8 mWaveFormat;
@@ -31,7 +36,7 @@ struct JASWaveInfo {
/* 0x18 */ int mSampleCount;
/* 0x1C */ s16 mpLast;
/* 0x1E */ s16 mpPenult;
/* 0x20 */ const u32* field_0x20;
/* 0x20 */ const u32* mpLoaded;
static DUSK_GAME_DATA u32 one;
};
@@ -45,6 +50,17 @@ public:
virtual ~JASWaveHandle() {}
virtual const JASWaveInfo* getWaveInfo() const = 0;
virtual intptr_t getWavePtr() const = 0;
#if TARGET_PC
/**
* @see JASChannel::mAramBaseAddress
*/
[[nodiscard]] virtual void const* getAramBaseAddress() const = 0;
/**
* Create a @ref JASSampleDataReference to keep the sample data for this wave alive.
*/
[[nodiscard]] virtual std::unique_ptr<JASSampleDataReference> getSampleReference() const { return nullptr; }
#endif
};
/**
@@ -53,6 +69,12 @@ public:
*/
class JASWaveBank {
public:
#if TARGET_PC
const u32 bankId;
JASWaveBank(u32 bankId) : bankId(bankId) { }
#endif
virtual ~JASWaveBank() {}
virtual JASWaveHandle* getWaveHandle(u32) const = 0;
virtual JASWaveArc* getWaveArc(u32) = 0;
@@ -24,23 +24,25 @@ struct JAUSoundTableItem {
template<typename Root, typename Section, typename Group, typename Typename_0>
struct JAUSoundTable_ {
JAUSoundTable_() {
field_0x0 = NULL;
field_0x4 = 0;
mData = NULL;
mRoot = 0;
}
void reset() {
field_0x0 = NULL;
field_0x4 = NULL;
mData = NULL;
mRoot = NULL;
}
void init(const void* param_0) {
field_0x0 = param_0;
mData = param_0;
// magic number is not in debug rom. I'm not sure what this comparison is (maybe some sort of '' number?)
// I also do not know how it is different between JAUSoundTable and JAUSoundNameTable
if (*(BE(u32)*)field_0x0 + 0xbdad0000 != Root::magicNumber()) {
field_0x0 = NULL;
// Future person here: This is checking for either "BST " or "BSTN", with the second two letters in Root::magicNumber().
// Idk why the operations here are all weird but I can't use objdiff right now.
if (*(BE(u32)*)mData + 0xbdad0000 != Root::magicNumber()) {
mData = NULL;
} else {
field_0x4 = (Root*)((u8*)field_0x0 + *((BE(u32)*)field_0x0 + 3));
mRoot = (Root*)((u8*)mData + *((BE(u32)*)mData + 3));
}
}
@@ -48,14 +50,14 @@ struct JAUSoundTable_ {
if (index < 0) {
return NULL;
}
if ((u32)index >= field_0x4->mSectionNumber) {
if ((u32)index >= mRoot->mSectionNumber) {
return NULL;
}
u32 offset = field_0x4->mSectionOffsets[index];
u32 offset = mRoot->mSectionOffsets[index];
if (offset == 0) {
return NULL;
}
return (Section*)((u8*)field_0x0 + offset);
return (Section*)((u8*)mData + offset);
}
Group* getGroup(Section* param_1, int index) const {
@@ -71,11 +73,11 @@ struct JAUSoundTable_ {
if (offset == 0) {
return NULL;
}
return (Group*)((u8*)field_0x0 + offset);
return (Group*)((u8*)mData + offset);
}
const void* field_0x0;
Root* field_0x4;
const void* mData;
Root* mRoot;
};
/**
@@ -83,7 +85,7 @@ struct JAUSoundTable_ {
*
*/
struct JAUSoundTableRoot {
static inline u32 magicNumber() { return 0x5420; }
static inline u32 magicNumber() { return 'T '; } // Second half of "BST "
BE(u32) mSectionNumber;
BE(u32) mSectionOffsets[0];
};
@@ -134,7 +136,7 @@ struct JAUSoundTableGroup {
BE(u32) mNumItems;
BE(u32) field_0x4;
u8 mTypeIds[0];
u8 mTypeIds[0]; // TODO: Should probably be BE(u32), but I can't objdiff rn.
};
/**
@@ -142,7 +144,7 @@ struct JAUSoundTableGroup {
*
*/
struct JAUSoundTable : public JASGlobalInstance<JAUSoundTable> {
JAUSoundTable(bool param_0) : JASGlobalInstance<JAUSoundTable>(param_0) {
JAUSoundTable(bool setInstance) : JASGlobalInstance<JAUSoundTable>(setInstance) {
}
~JAUSoundTable() {}
@@ -157,11 +159,11 @@ struct JAUSoundTable : public JASGlobalInstance<JAUSoundTable> {
if (offset == 0) {
return NULL;
}
return (JAUSoundTableItem*)((u8*)field_0x0.field_0x0 + offset);
return (JAUSoundTableItem*)((u8*)field_0x0.mData + offset);
}
const void* getResource() const { return field_0x0.field_0x0; }
bool isValid() const { return field_0x0.field_0x0 != NULL; }
const void* getResource() const { return field_0x0.mData; }
bool isValid() const { return field_0x0.mData != NULL; }
JAUSoundTable_<JAUSoundTableRoot,JAUSoundTableSection,JAUSoundTableGroup,void> field_0x0;
};
@@ -171,7 +173,7 @@ struct JAUSoundTable : public JASGlobalInstance<JAUSoundTable> {
*
*/
struct JAUSoundNameTableRoot {
static inline u32 magicNumber() { return 0x544e; }
static inline u32 magicNumber() { return 'TN'; } // Second half of "BSTN"
BE(u32) mSectionNumber;
BE(u32) mSectionOffsets[0];
};
+1 -1
View File
@@ -713,7 +713,7 @@ void JASAramStream::channelStart() {
wave_info.mpPenult = 0;
// probably a fake match, this should be set in the JASWaveInfo constructor
static u32 const one = 1;
wave_info.field_0x20 = &one;
wave_info.mpLoaded = &one;
JASChannel* jc = JKR_NEW JASChannel(channelCallback, this);
JUT_ASSERT(963, jc);
jc->setPriority(0x7f7f);
+20 -1
View File
@@ -1,11 +1,15 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASBank.h"
#include "dusk/mods/svc/audio_res/audio_res.hpp"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASBasicInst.h"
#include "JSystem/JAudio2/JASBasicWaveBank.h"
#include "JSystem/JAudio2/JASChannel.h"
using namespace dusk::mods::svc::audio_res;
// NONMATCHING JASPoolAllocObject_MultiThreaded<_> locations
JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
@@ -28,12 +32,23 @@ JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8
if (!waveHandle) {
return NULL;
}
#if TARGET_PC
auto const key = AudioWaveKey(static_cast<AudioWaveBank>(waveBank->bankId), stack_60.field_0x1a);
std::lock_guard lock(s_replacements_mutex);
auto const found_replacement = s_replacements.find(key);
if (found_replacement != s_replacements.end()) {
waveHandle = &found_replacement->second;
}
auto const aramBase = waveHandle->getAramBaseAddress();
#endif
const JASWaveInfo* waveInfo = waveHandle->getWaveInfo();
if (!waveInfo) {
return NULL;
}
intptr_t wavePtr = waveHandle->getWavePtr();
if (!wavePtr) {
if (!wavePtr IF_DUSK(&& !aramBase)) {
return NULL;
}
@@ -44,6 +59,10 @@ JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8
channel->setPriority(param_4);
channel->field_0xdc.mWaveInfo = *waveInfo;
channel->mWaveAramAddress = wavePtr;
#if TARGET_PC
channel->mAramBaseAddress = aramBase;
channel->mSampleReference = waveHandle->getSampleReference();
#endif
channel->field_0xdc.mChannelType = stack_60.field_0x1c;
channel->setBankDisposeID(param_0);
channel->setInitPitch(stack_60.mPitch * (waveInfo->mSampleRate / JASDriver::getDacRate()));
+16 -16
View File
@@ -6,12 +6,12 @@
#include "JSystem/JUtility/JUTAssert.h"
#include <stdint.h>
JASBasicWaveBank::JASBasicWaveBank() {
JASBasicWaveBank::JASBasicWaveBank(IF_DUSK(u32 bankId)) IF_DUSK(: JASWaveBank(bankId)) {
mWaveTable = NULL;
mWaveGroupArray = NULL;
mHandleCount = 0;
mGroupCount = 0;
OSInitMutex(&field_0x4);
OSInitMutex(&mWaveTableMutex);
}
JASBasicWaveBank::~JASBasicWaveBank() {
@@ -44,13 +44,13 @@ void JASBasicWaveBank::setWaveTableSize(u32 param_0, JKRHeap* param_1) {
}
void JASBasicWaveBank::incWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) {
JASMutexLock lock(&field_0x4);
JASMutexLock lock(&mWaveTableMutex);
for (u32 i = 0; i < param_0->getWaveCount(); i++) {
TWaveHandle* handle = mWaveTable + param_0->getWaveID(i);
if (!handle->mHeap) {
handle->mHeap = &param_0->mHeap;
handle->field_0x4.field_0x20 = &param_0->_48;
handle->field_0x4.mOffsetStart = param_0->mCtrlWaveArray[i].field_0x4;
handle->mWaveInfo.mpLoaded = &param_0->mCurrentlyLoaded;
handle->mWaveInfo.mOffsetStart = param_0->mCtrlWaveArray[i].mOffsetStart;
}
}
}
@@ -58,13 +58,13 @@ void JASBasicWaveBank::incWaveTable(JASBasicWaveBank::TWaveGroup const* param_0)
DUSK_GAME_DATA u32 JASBasicWaveBank::mNoLoad;
void JASBasicWaveBank::decWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) {
JASMutexLock lock(&field_0x4);
JASMutexLock lock(&mWaveTableMutex);
for (u32 i = 0; i < param_0->getWaveCount(); i++) {
TWaveHandle* handle = mWaveTable + param_0->getWaveID(i);
if (handle->mHeap == &param_0->mHeap) {
handle->mHeap = NULL;
handle->field_0x4.field_0x20 = &mNoLoad;
handle->field_0x4.mOffsetStart = -1;
handle->mWaveInfo.mpLoaded = &mNoLoad;
handle->mWaveInfo.mOffsetStart = -1;
}
}
}
@@ -80,15 +80,15 @@ JASWaveHandle* JASBasicWaveBank::getWaveHandle(u32 param_0) const {
}
void JASBasicWaveBank::setWaveInfo(JASBasicWaveBank::TWaveGroup* wgrp, int index,
u16 param_2, JASWaveInfo const& param_3) {
u16 waveId, JASWaveInfo const& param_3) {
JUT_ASSERT(204, wgrp);
JUT_ASSERT(205, index < wgrp->mWaveCount);
JUT_ASSERT(206, index >= 0);
mWaveTable[param_2].field_0x4 = param_3;
mWaveTable[param_2].field_0x4.field_0x20 = &mNoLoad;
mWaveTable[param_2].field_0x4.mOffsetStart = -1;
wgrp->mCtrlWaveArray[index].field_0x0 = param_2;
wgrp->mCtrlWaveArray[index].field_0x4 = param_3.mOffsetStart;
mWaveTable[waveId].mWaveInfo = param_3;
mWaveTable[waveId].mWaveInfo.mpLoaded = &mNoLoad;
mWaveTable[waveId].mWaveInfo.mOffsetStart = -1;
wgrp->mCtrlWaveArray[index].waveId = waveId;
wgrp->mCtrlWaveArray[index].mOffsetStart = param_3.mOffsetStart;
}
JASBasicWaveBank::TWaveGroup::TWaveGroup() {
@@ -122,7 +122,7 @@ void JASBasicWaveBank::TWaveGroup::onEraseDone() {
u32 JASBasicWaveBank::TWaveGroup::getWaveID(int index) const {
JUT_ASSERT(298, index < mWaveCount);
JUT_ASSERT(299, index >= 0);
return mCtrlWaveArray[index].field_0x0;
return mCtrlWaveArray[index].waveId;
}
intptr_t JASBasicWaveBank::TWaveHandle::getWavePtr() const {
@@ -131,5 +131,5 @@ intptr_t JASBasicWaveBank::TWaveHandle::getWavePtr() const {
if (base == 0) {
return 0;
}
return (intptr_t)base + field_0x4.mOffsetStart;
return (intptr_t)base + mWaveInfo.mOffsetStart;
}
+8 -2
View File
@@ -26,6 +26,9 @@ JASChannel::JASChannel(Callback i_callback, void* i_callbackData) :
mCallback(i_callback),
mCallbackData(i_callbackData),
mUpdateTimer(0),
#if TARGET_PC
mAramBaseAddress(nullptr),
#endif
mBankDisposeID(NULL),
mKey(0),
mVelocity(0x7f),
@@ -237,7 +240,7 @@ s32 JASChannel::initialUpdateDSPChannel(JASDsp::TChannel* i_channel) {
mCallback(CB_START, this, i_channel, mCallbackData);
}
if (field_0xdc.mWaveInfo.field_0x20[0] == 0) {
if (field_0xdc.mWaveInfo.mpLoaded[0] == 0) {
JUT_WARN_DEVICE(346, 2, "%s", "Lost wave data while playing");
mDspCh->free();
mDspCh = NULL;
@@ -256,6 +259,9 @@ s32 JASChannel::initialUpdateDSPChannel(JASDsp::TChannel* i_channel) {
switch (field_0xdc.mChannelType) {
case 0:
i_channel->setWaveInfo(field_0xdc.mWaveInfo, mWaveAramAddress, mSkipSamples);
#if TARGET_PC
i_channel->mAramBaseAddress = mAramBaseAddress;
#endif
break;
case 2:
i_channel->setOscInfo(mOscillatorSomething);
@@ -315,7 +321,7 @@ s32 JASChannel::updateDSPChannel(JASDsp::TChannel* i_channel) {
mCallback(CB_PLAY, this, i_channel, mCallbackData);
}
if (field_0xdc.mWaveInfo.field_0x20[0] == 0) {
if (field_0xdc.mWaveInfo.mpLoaded[0] == 0) {
JUT_WARN_DEVICE(456, 2, "%s","Lost wave data while playing");
mDspCh->free();
mDspCh = NULL;
@@ -523,9 +523,12 @@ void JASDsp::TChannel::init() {
void JASDsp::TChannel::playStart() {
JUT_ASSERT(508, dspMutex);
field_0x10c = 0;
#if !TARGET_PC
field_0x060 = 0;
#endif
mResetFlag = 1;
field_0x066 = 0;
#if !TARGET_PC
int i;
for (i = 0; i < 4; i++) {
field_0x078[i] = 0;
@@ -534,6 +537,7 @@ void JASDsp::TChannel::playStart() {
for (i = 0; i < 20; i++) {
field_0x080[i] = 0;
}
#endif
mIsActive = 1;
}
@@ -601,9 +605,11 @@ void JASDsp::TChannel::setWaveInfo(JASWaveInfo const& waveInfo, u32 aramAddress,
break;
}
}
#if !TARGET_PC
for (i = 0; i < 16; i++) {
field_0x0b0[i] = 0;
}
#endif
}
}
@@ -3,7 +3,7 @@
#include "JSystem/JAudio2/JASSimpleWaveBank.h"
#include <stdint.h>
JASSimpleWaveBank::JASSimpleWaveBank() {
JASSimpleWaveBank::JASSimpleWaveBank(IF_DUSK(u32 bankId)) IF_DUSK(: JASWaveBank(bankId)) {
mWaveTable = NULL;
mWaveTableSize = 0;
}
@@ -28,7 +28,7 @@ JASWaveHandle* JASSimpleWaveBank::getWaveHandle(u32 no) const {
void JASSimpleWaveBank::setWaveInfo(u32 no, JASWaveInfo const& waveInfo) {
mWaveTable[no].mWaveInfo = waveInfo;
mWaveTable[no].mWaveInfo.field_0x20 = &_48;
mWaveTable[no].mWaveInfo.mpLoaded = &mCurrentlyLoaded;
mWaveTable[no].mHeap = &mHeap;
}
+6 -6
View File
@@ -30,7 +30,7 @@ JASBasicWaveBank* JASWSParser::createBasicWaveBank(void const* stream, JKRHeap*
u32 free_size = heap->getFreeSize();
THeader* header = (THeader*)stream;
JASBasicWaveBank* wave_bank = JKR_NEW_ARGS (heap, 0) JASBasicWaveBank;
JASBasicWaveBank* wave_bank = JKR_NEW_ARGS (heap, 0) JASBasicWaveBank IF_DUSK((header->mId));
if (wave_bank == NULL) {
return NULL;
}
@@ -60,7 +60,7 @@ JASBasicWaveBank* JASWSParser::createBasicWaveBank(void const* stream, JKRHeap*
wave_info.mpLast = wave->mpLast;
wave_info.mpPenult = wave->mpPenult;
TCtrlWave* ctrl_wave = ctrl->mCtrlWaveOffsets[j].ptr(header);
u16 local_74 = JSULoHalf(ctrl_wave->_00);
u16 local_74 = JSULoHalf(ctrl_wave->mWaveAndGroupId);
wave_bank->setWaveInfo(wave_group, j, local_74, wave_info);
}
wave_group->setFileName(archive->mFileName);
@@ -82,7 +82,7 @@ JASSimpleWaveBank* JASWSParser::createSimpleWaveBank(void const* stream, JKRHeap
return NULL;
}
JASSimpleWaveBank* wave_bank = JKR_NEW_ARGS (heap, 0) JASSimpleWaveBank;
JASSimpleWaveBank* wave_bank = JKR_NEW_ARGS (heap, 0) JASSimpleWaveBank IF_DUSK((header->mId));
if (wave_bank == NULL) {
return NULL;
}
@@ -94,7 +94,7 @@ JASSimpleWaveBank* JASWSParser::createSimpleWaveBank(void const* stream, JKRHeap
TWaveArchive* archive = archiveBank->mArchiveOffsets[0].ptr(header);
for (int i = 0; i < ctrl->mWaveCount; i++) {
TCtrlWave* ctrlWave = ctrl->mCtrlWaveOffsets[i].ptr(header);
u32 tmp = JSULoHalf(ctrlWave->_00);
u32 tmp = JSULoHalf(ctrlWave->mWaveAndGroupId);
if (max < tmp) {
max = tmp;
}
@@ -116,8 +116,8 @@ JASSimpleWaveBank* JASWSParser::createSimpleWaveBank(void const* stream, JKRHeap
wave_info.mpLast = wave->mpLast;
wave_info.mpPenult = wave->mpPenult;
TCtrlWave* ctrl_wave = ctrl->mCtrlWaveOffsets[i].ptr(header);
u32 tmp = JSULoHalf(ctrl_wave->_00);
wave_bank->setWaveInfo(tmp, wave_info);
u32 waveId = JSULoHalf(ctrl_wave->mWaveAndGroupId);
wave_bank->setWaveInfo(waveId, wave_info);
}
wave_bank->setFileName(archive->mFileName);
@@ -38,7 +38,7 @@ char* JASWaveArcLoader::getCurrentDir() {
}
JASWaveArc::JASWaveArc() : mHeap(this) {
_48 = 0;
mCurrentlyLoaded = 0;
mStatus = 0;
mEntryNum = -1;
mFileLength = 0;
@@ -57,7 +57,7 @@ bool JASWaveArc::loadSetup(u32 param_0) {
if (mStatus != 1) {
return false;
}
_48 = 1;
mCurrentlyLoaded = 1;
mStatus = 2;
return true;
}
@@ -71,7 +71,7 @@ bool JASWaveArc::eraseSetup() {
mStatus = 0;
return false;
}
_48 = 0;
mCurrentlyLoaded = 0;
mStatus = 0;
return true;
}
@@ -91,7 +91,7 @@ void JASWaveArc::loadToAramCallback(void* this_) {
bool JASWaveArc::sendLoadCmd() {
JASMutexLock mutexLock(&mMutex);
_48 = 0;
mCurrentlyLoaded = 0;
mStatus = 1;
loadToAramCallbackParams commandInfo;
commandInfo.mWavArc = this;
+19
View File
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.25)
project(audio_mod CXX)
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
set(DUSK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.." CACHE PATH "Path to dusk source root")
option(DUSK_MOD_USE_FULL_TREE "Use full build instead of the minimal mod SDK" OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (DUSK_MOD_USE_FULL_TREE)
add_subdirectory("${DUSK_DIR}" dusk EXCLUDE_FROM_ALL)
else ()
add_subdirectory("${DUSK_DIR}/sdk" dusk-sdk EXCLUDE_FROM_ALL)
endif ()
endif ()
add_mod(audio_mod
SOURCES src/mod.cpp
MOD_JSON mod.json
RES_DIR res
)
+7
View File
@@ -0,0 +1,7 @@
{
"id": "dev.twilitrealm.audio_mod",
"name": "[DEMO] Audio Mod",
"version": "1.0.0",
"author": "You, the listener",
"description": "An example Dusklight mod"
}
+1
View File
@@ -0,0 +1 @@
go.opus and go.wav are licensed CC0, from https://kenney.nl/assets/voiceover-pack
Binary file not shown.
Binary file not shown.
+39
View File
@@ -0,0 +1,39 @@
#include "mods/service.hpp"
#include "mods/svc/audio_res.h"
#include "mods/svc/log.h"
DEFINE_MOD();
IMPORT_SERVICE(LogService, svc_log);
IMPORT_SERVICE(AudioResService, svc_audio_res);
extern "C" {
MOD_EXPORT ModResult mod_initialize(ModError*) {
svc_log->info(mod_ctx, "template_mod initialized");
AudioWaveHandle handle;
svc_audio_res->replace_wave(
mod_ctx,
SoundEffects,
4238,
"res/go.opus",
nullptr,
&handle);
svc_audio_res->replace_wave(
mod_ctx,
SoundEffects,
4237,
"res/go.opus",
nullptr,
&handle);
return MOD_OK;
}
MOD_EXPORT ModResult mod_update(ModError*) {
return MOD_OK;
}
MOD_EXPORT ModResult mod_shutdown(ModError*) {
svc_log->info(mod_ctx, "template_mod unloaded");
return MOD_OK;
}
}
-115
View File
@@ -1,115 +0,0 @@
cmake_minimum_required(VERSION 3.25)
project(randomizer CXX)
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
set(DUSK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.." CACHE PATH "Path to dusk source root")
option(DUSK_MOD_USE_FULL_TREE "Use full build instead of the minimal mod SDK" OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (DUSK_MOD_USE_FULL_TREE)
add_subdirectory("${DUSK_DIR}" dusk EXCLUDE_FROM_ALL)
else ()
add_subdirectory("${DUSK_DIR}/sdk" dusk-sdk EXCLUDE_FROM_ALL)
endif ()
endif ()
# Generator dependencies, linked statically into the mod library (no CRT crossing).
include(FetchContent)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(YAML_CPP_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
set(YAML_CPP_BUILD_CONTRIB OFF CACHE BOOL "" FORCE)
set(YAML_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
message(STATUS "randomizer: Fetching yaml-cpp")
FetchContent_Declare(
yaml-cpp
GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git
GIT_TAG yaml-cpp-0.9.0
)
message(STATUS "randomizer: Fetching base64pp")
FetchContent_Declare(
base64pp
GIT_REPOSITORY https://github.com/matheusgomes28/base64pp.git
GIT_TAG v0.2.0-rc0
)
message(STATUS "randomizer: Fetching battery-embed")
FetchContent_Declare(
battery-embed
GIT_REPOSITORY https://github.com/batterycenter/embed.git
GIT_TAG fdbae3f
)
FetchContent_MakeAvailable(yaml-cpp base64pp battery-embed)
set(RANDOMIZER_GENERATOR_SOURCES
generator/logic/area.cpp
generator/logic/dungeon.cpp
generator/logic/entrance.cpp
generator/logic/entrance_shuffle.cpp
generator/logic/fill.cpp
generator/logic/flatten/bits.cpp
generator/logic/flatten/flatten.cpp
generator/logic/flatten/simplify_algebraic.cpp
generator/logic/hints.cpp
generator/logic/item.cpp
generator/logic/item_pool.cpp
generator/logic/location.cpp
generator/logic/plandomizer.cpp
generator/logic/requirement.cpp
generator/logic/search.cpp
generator/logic/spoiler_log.cpp
generator/logic/world.cpp
generator/randomizer.cpp
generator/seedgen/config.cpp
generator/seedgen/seed.cpp
generator/seedgen/settings.cpp
generator/utility/color.cpp
generator/utility/common.cpp
generator/utility/endian.cpp
generator/utility/file.cpp
generator/utility/log.cpp
generator/utility/path.cpp
generator/utility/platform.cpp
generator/utility/random.cpp
generator/utility/string.cpp
generator/utility/text.cpp
generator/utility/time.cpp
)
set(RANDOMIZER_SOURCES
src/flags.cpp
src/messages.cpp
src/randomizer_context.cpp
src/stages.cpp
src/tools.cpp
src/verify_item_functions.cpp
src/paths.cpp
src/session.cpp
)
add_mod(randomizer
FEATURES game
SOURCES src/mod.cpp ${RANDOMIZER_GENERATOR_SOURCES} ${RANDOMIZER_SOURCES}
MOD_JSON mod.json
RES_DIR res
)
target_link_libraries(randomizer PRIVATE yaml-cpp::yaml-cpp base64pp fmt::fmt)
string(LENGTH "${CMAKE_CURRENT_SOURCE_DIR}/" RANDOMIZER_SOURCE_PATH_SIZE)
target_compile_definitions(randomizer PRIVATE
RANDO_DATA_PATH="generator/data/"
SOURCE_PATH_SIZE=${RANDOMIZER_SOURCE_PATH_SIZE}
)
# Embed the generator's YAML data into the mod library. Paths are relative to this
# directory and must match the RANDO_DATA_PATH-based b::embed<> identifiers in code.
file(GLOB_RECURSE RANDOMIZER_DATA RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/generator/data/*")
b_embed(randomizer "res/shadow_crystal.bti")
foreach (RANDOMIZER_FILE IN LISTS RANDOMIZER_DATA)
if (RANDOMIZER_FILE MATCHES "^generator/data/tests")
continue()
endif ()
b_embed(randomizer "${RANDOMIZER_FILE}")
endforeach ()
File diff suppressed because it is too large Load Diff
@@ -1,486 +0,0 @@
# Patches for NPC text flows
# NOTE: All data is expressed in little endian
0: # zel_00.bmg
# Change the following indices of Midna's flows to jump to our custom choices
# instead. These are all the flow jumps that normally determine which "Talk to Midna"
# text is displayed.
- index:
- 0x1
- 0x9
- 0xC
- 0x8F
- 0x192
- 0x1A4
- 0x18F
- 0x197
- 0x1BC
- 0x1C9
type: event
event: 42
parameters: 0x00000000
next node index: Custom Midna Call Begin
#1: # zel_01.bmg
2: # zel_02.bmg
# Patch Barnes branch to see if you can buy the bomb bag to use
# query 54 (custom event check) instead of query 22 (how many bomb bags the player has)
- index: 0x47C
type: branch
num results: 2
query: 53
parameters: 0x004D
next node index: 0x340
#3: # zel_03.bmg
4: # zel_04.bmg - Castle Town
# Patch Charlo to check for 100 rupees instead of 30
- index: 0x34A
type: branch
num results: 2
query: 6
parameters: 0x0064
next node index: 0x222
# Patch Charlo to take 100 rupees from Link instead of 30
- index: 0x34E
type: event
event: 41
parameters: 0x00000064
next node index: 0x226
# Patch Charlo to add 100 rupees to his counter instead of 30
- index: 0x357
type: event
event: 3
parameters: 0x00000064
next node index: 0x22B
# Patch Malo Mart door person to not check for time of day.
# Change from branch node that checks time of day to event node
# that does nothing.
- index: 0x1A5
type: event
event: 42
parameters: 0x00000000
next node index: 0x10C
5: # zel_05.bmg
# Patch Yeta flow to always give the map check even if the player has obtained the Ordon Cheese
- index: 0x8
type: event
event: 42
parameters: 0x00000000
next node index: 0x8
# Patch Yeta flow to always give the map check even if the player has obtained the Ordon Cheese
- index: 0x5
type: event
event: 42
parameters: 0x00000000
next node index: 0x3
# Patch Gor Liggs to not set the flag for the third key shard
# Change event index 17 to event index 42 which does nothing
- index: 0x258
type: event
event: 42
parameters: 0x00000000
next node index: 0x1AC
#6: # zel_06.bmg
#7: # zel_07.bmg
#8: # zel_08.bmg
# Custom Flow Nodes
9:
# Start of custom midna call tree. Begin by checking if we can change time
# of day to see if we show that choice
- name: Custom Midna Call Begin
type: branch
num results: 2
query: 54
parameters: 0x0000
next node index: 0xFFFF
results:
- Custom Midna Call 3 Choice Select Setup # Can change time of day
- Custom Midna Call 2 Choice Select Setup # Can not change time of day
#################################################
# CUSTOM MIDNA CALL 2 CHOICE FLOW #
#################################################
- name: Custom Midna Call 2 Choice Select Setup
type: event
event: 13
parameters: 0x00000003
next node index: Custom Midna Call 2 Choice Intro
- name: Custom Midna Call 2 Choice Intro
type: message
inf index: Custom Midna Call Need Something Text
next flow index: Custom Midna Call 2 Choice
- name: Custom Midna Call 2 Choice
type: message
inf index: Custom Midna Call 2 Choice Text
next flow index: Custom Midna Call 2 Choice Branch
- name: Custom Midna Call 2 Choice Branch
type: branch
num results: 3
query: 35
parameters: 0x0000
next node index: 0xFFFF
results:
- Custom Midna Call Hints # Hints
- Custom Midna Call Return to Spawn Branch # Return to Spawn
- 0xFFFF # (B button pressed)
#################################################
# CUSTOM MIDNA CALL 3 CHOICE FLOW #
#################################################
- name: Custom Midna Call 3 Choice Select Setup
type: event
event: 13
parameters: 0x00000004
next node index: Custom Midna Call 3 Choice Intro
- name: Custom Midna Call 3 Choice Intro
type: message
inf index: Custom Midna Call Need Something Text
next flow index: Custom Midna Call 3 Choice
- name: Custom Midna Call 3 Choice
type: message
inf index: Custom Midna Call 3 Choice Text
next flow index: Custom Midna Call 3 Choice Branch
- name: Custom Midna Call 3 Choice Branch
type: branch
num results: 4
query: 36
parameters: 0x0000
next node index: 0xFFFF
results:
- Custom Midna Call Hints # Hints
- Custom Midna Call Change Time # Change time of day
- Custom Midna Call Return to Spawn Branch # Return to Spawn
- 0xFFFF # (B button pressed)
#################################################
# CUSTOM MIDNA CALL CHOICE OPTIONS #
#################################################
- name: Custom Midna Call Hints
type: message
inf index: Custom Midna Call Hints Text
next flow index: 0xFFFF
- name: Custom Midna Call Change Time
type: event
event: 44
parameters: 0x00000000
next node index: 0x116
- name: Custom Midna Call Return to Spawn Branch
type: branch
num results: 3
query: 55
parameters: 0x0000
next node index: 0xFFFF
results:
- Return to Spawn Dungeon Choice Select Setup
- Return to Spawn Dungeon No Choice Select Setup
- Return to Base Spawn
#################################################
# RETURN TO SPAWN DUNGEON CHOICE FLOW #
#################################################
- name: Return to Spawn Dungeon Choice Select Setup
type: event
event: 13
parameters: 0x00000004
next node index: Return to Spawn Dungeon Choice Intro
- name: Return to Spawn Dungeon Choice Intro
type: message
inf index: Return to Spawn Dungeon Intro Text
next flow index: Return to Spawn Dungeon Choice
- name: Return to Spawn Dungeon Choice
type: message
inf index: Return to Spawn Dungeon Choice Text
next flow index: Return to Spawn Dungeon Choice Branch
- name: Return to Spawn Dungeon Choice Branch
type: branch
num results: 4
query: 36
parameters: 0x0000
next node index: 0xFFFF
results:
- Return to Dungeon Spawn # Dungeon entrance
- 0xFFFF # Nevermind
- Return to Base Spawn # Spawn
- 0xFFFF # (B button pressed)
#################################################
# RETURN TO SPAWN DUNGEON NO CHOICE FLOW #
#################################################
- name: Return to Spawn Dungeon No Choice Select Setup
type: event
event: 13
parameters: 0x00000003
next node index: Return to Spawn Dungeon No Choice Intro
- name: Return to Spawn Dungeon No Choice Intro
type: message
inf index: Return to Spawn Dungeon Intro Text
next flow index: Return to Spawn No Dungeon Choice
- name: Return to Spawn Dungeon No Choice
type: message
inf index: Return to Spawn Dungeon No Choice Text
next flow index: Return to Spawn Dungeon No Choice Branch
- name: Return to Spawn Dungeon No Choice Branch
type: branch
num results: 3
query: 35
parameters: 0x0000
next node index: 0xFFFF
results:
- 0xFFFF # Nevermind
- Return to Base Spawn # Spawn
- 0xFFFF # (B button pressed)
#################################################
# RETURN TO SPAWN EVENTS #
#################################################
# Use custom event index 45 to setup returning to spawn. A non-zero
# parameter value indicates to try and use a place override if one
# exists for the current stage
- name: Return to Dungeon Spawn
type: event
event: 45
parameters: 0x00000001
next node index: 0x116
# Use custom event index 45 to setup returning to spawn. A parameter
# value of zero indicates to always return to the starting spawn
- name: Return to Base Spawn
type: event
event: 45
parameters: 0x00000000
next node index: 0x116
#################################################
# HINT SIGNS #
#################################################
- name: Ordon Hint Sign
index: 21100
type: message
inf index: Ordon Hint Sign Text
next flow index: 0xFFFF
- name: South Faron Woods Hint Sign
index: 21101
type: message
inf index: South Faron Woods Hint Sign Text
next flow index: 0xFFFF
- name: Sacred Grove Hint Sign
index: 21102
type: message
inf index: Sacred Grove Hint Sign Text
next flow index: 0xFFFF
- name: Faron Field Hint Sign
index: 21103
type: message
inf index: Faron Field Hint Sign Text
next flow index: 0xFFFF
- name: Kakariko Gorge Hint Sign
index: 21104
type: message
inf index: Kakariko Gorge Hint Sign Text
next flow index: 0xFFFF
- name: Kakariko Village Hint Sign
index: 21105
type: message
inf index: Kakariko Village Hint Sign Text
next flow index: 0xFFFF
- name: Kakariko Graveyard Hint Sign
index: 21106
type: message
inf index: Kakariko Graveyard Hint Sign Text
next flow index: 0xFFFF
- name: Eldin Field Hint Sign
index: 21107
type: message
inf index: Eldin Field Hint Sign Text
next flow index: 0xFFFF
- name: North Eldin Field Hint Sign
index: 21108
type: message
inf index: North Eldin Field Hint Sign Text
next flow index: 0xFFFF
- name: Hidden Village Hint Sign
index: 21109
type: message
inf index: Hidden Village Hint Sign Text
next flow index: 0xFFFF
- name: Lanayru Field Hint Sign
index: 21110
type: message
inf index: Lanayru Field Hint Sign Text
next flow index: 0xFFFF
- name: Beside Castle Town Hint Sign
index: 21111
type: message
inf index: Beside Castle Town Hint Sign Text
next flow index: 0xFFFF
- name: Castle Town Center Hint Sign
index: 21112
type: message
inf index: Castle Town Center Hint Sign Text
next flow index: 0xFFFF
- name: Outside South Castle Town Hint Sign
index: 21113
type: message
inf index: Outside South Castle Town Hint Sign Text
next flow index: 0xFFFF
- name: Lake Hylia Bridge Hint Sign
index: 21114
type: message
inf index: Lake Hylia Bridge Hint Sign Text
next flow index: 0xFFFF
- name: Lake Hylia Hint Sign
index: 21115
type: message
inf index: Lake Hylia Hint Sign Text
next flow index: 0xFFFF
- name: Lanayru Spring Hint Sign
index: 21116
type: message
inf index: Lanayru Spring Hint Sign Text
next flow index: 0xFFFF
- name: Lake Lantern Cave Hint Sign
index: 21117
type: message
inf index: Lake Lantern Cave Hint Sign Text
next flow index: 0xFFFF
- name: Fishing Hole Hint Sign
index: 21118
type: message
inf index: Fishing Hole Hint Sign Text
next flow index: 0xFFFF
- name: Zoras Domain Hint Sign
index: 21119
type: message
inf index: Zoras Domain Hint Sign Text
next flow index: 0xFFFF
- name: Snowpeak Hint Sign
index: 21120
type: message
inf index: Snowpeak Hint Sign Text
next flow index: 0xFFFF
- name: Gerudo Desert Hint Sign
index: 21121
type: message
inf index: Gerudo Desert Hint Sign Text
next flow index: 0xFFFF
- name: Bulblin Camp Hint Sign
index: 21122
type: message
inf index: Bulblin Camp Hint Sign Text
next flow index: 0xFFFF
- name: Forest Temple Hint Sign
index: 21123
type: message
inf index: Forest Temple Hint Sign Text
next flow index: 0xFFFF
- name: Goron Mines Hint Sign
index: 21124
type: message
inf index: Goron Mines Hint Sign Text
next flow index: 0xFFFF
- name: Lakebed Temple Hint Sign
index: 21125
type: message
inf index: Lakebed Temple Hint Sign Text
next flow index: 0xFFFF
- name: Arbiters Grounds Hint Sign
index: 21126
type: message
inf index: Arbiters Grounds Hint Sign Text
next flow index: 0xFFFF
- name: Snowpeak Ruins Hint Sign
index: 21127
type: message
inf index: Snowpeak Ruins Hint Sign Text
next flow index: 0xFFFF
- name: Temple of Time First Hint Sign
index: 21128
type: message
inf index: Temple of Time First Hint Sign Text
next flow index: 0xFFFF
- name: Temple of Time Second Hint Sign
index: 21129
type: message
inf index: Temple of Time Second Hint Sign Text
next flow index: 0xFFFF
- name: City in the Sky Hint Sign
index: 21130
type: message
inf index: City in the Sky Hint Sign Text
next flow index: 0xFFFF
- name: Palace of Twilight Hint Sign
index: 21131
type: message
inf index: Palace of Twilight Hint Sign Text
next flow index: 0xFFFF
- name: Hyrule Castle Hint Sign
index: 21132
type: message
inf index: Hyrule Castle Hint Sign Text
next flow index: 0xFFFF
- name: Cave of Ordeals Hint Sign
index: 21133
type: message
inf index: Cave of Ordeals Hint Sign Text
next flow index: 0xFFFF
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-256
View File
@@ -1,256 +0,0 @@
# Macros are a way to shorten or make more explicit the logical requirements
# for certain things. Macros can be used on logic statements like any item and do
# not need any code modifications to run. Simply add them here and they can be used
# in the world graph files.
Can Open Doors: Human_Link
Can Climb Ladders: Human_Link
Can Climb Vines: Human_Link
Can Talk to Humans: Human_Link
Can Swing on Monkeys: Human_Link
Can Pickup Bomblings: Human_Link
Can Pull Lakebed Levers: Human_Link
Can Pull Blocks: Human_Link
Can Ride Boars: Human_Link
Can Summon Hawk: Human_Link
Can Talk to Animals: Wolf_Link
Can Use Senses: Wolf_Link
Can Dig: Wolf_Link
Can Howl: Wolf_Link
Can Sniff: Wolf_Link
Can Midna Jump: Wolf_Link
Can Use Tightrope: Wolf_Link
Not Twilight: Human_Link or Wolf_Link
Slingshot: Slingshot and 'Can_Refill_Slingshot_Seeds' and Human_Link
Lantern: Lantern and 'Can_Refill_Lantern_Oil' and Human_Link
Gale Boomerang: Gale_Boomerang and Human_Link
Iron Boots: Iron_Boots and Human_Link
Bow: Progressive_Bow and 'Can_Refill_Arrows' and Human_Link
Regular Bombs: Bomb_Bag and 'Can_Refill_Regular_Bombs' and Human_Link
Water Bombs: Bomb_Bag and 'Can_Refill_Water_Bombs' and Human_Link
Bombs: Regular_Bombs or Water_Bombs
Bomb Arrows: Bow and Bombs
Spinner: Spinner and Human_Link
Ball and Chain: Ball_and_Chain and Human_Link
Zora Armor: Zora_Armor and Human_Link
Magic Armor: Magic_Armor and Human_Link
Shield: Hylian_Shield or 'Can_Buy_Wooden_Shield'
Bottle: Empty_Bottle and Lantern # Can't empty lantern oil from a bottle until you have the lantern
Asheis Sketch: Asheis_Sketch and Human_Link
Aurus Memo: Aurus_Memo and Human_Link
Renados Letter: Renados_Letter and Human_Link
Invoice: Invoice and Human_Link
Wooden Statue: Wooden_Statue and Human_Link
Ilias Charm: Ilias_Charm and Human_Link
Fishing Rod: Progressive_Fishing_Rod and Human_Link
Coral Earring: count(Progressive_Fishing_Rod, 2) and Human_Link
Sword: Progressive_Sword and Human_Link
Ordon Sword: count(Progressive_Sword, 2) and Human_Link
Master Sword: count(Progressive_Sword, 3) and Human_Link
Light Sword: count(Progressive_Sword, 4) and Human_Link
Big Quiver: count(Progressive_Bow, 2) and 'Can_Refill_Arrows' and Human_Link
Giant Quiver: count(Progressive_Bow, 3) and 'Can_Refill_Arrows' and Human_Link
Clawshot: Progressive_Clawshot and Human_Link
Double Clawshots: count(Progressive_Clawshot, 2) and Human_Link
Dominion Rod: Progressive_Dominion_Rod and Human_Link
Restored Dominion Rod: count(Progressive_Dominion_Rod, 2) and Human_Link
Big Wallet: Progressive_Wallet
Giant Wallet: count(Progressive_Wallet, 2)
Collosal Wallet: count(Progressive_Wallet, 3)
Ending Blow: Sword and Progressive_Hidden_Skill
Shield Attack: Shield and count(Progressive_Hidden_Skill, 2)
Back Slice: Sword and count(Progressive_Hidden_Skill, 3)
Helm Splitter: Sword and Shield_Attack and count(Progressive_Hidden_Skill, 4)
Mortal Draw: Sword and count(Progressive_Hidden_Skill, 5)
Jump Strike: Sword and count(Progressive_Hidden_Skill, 6)
Great Spin: Sword and count(Progressive_Hidden_Skill, 7)
Can Use Back Slice as Sword: Back_Slice_as_Sword == On and count(Progressive_Hidden_Skill, 3)
Can Do Niche Stuff: Impossible # TODO: Make settings for all of these
Can Do Difficult Combat: Impossible # TODO: Make settings for all of these
Can Use Hot Spring Water: Bottle and 'Can_Buy_Hot_Spring_Water'
Can Use Bottled Fairy: Bottle and 'Fairy_Access'
# This will have to change if we allow players to start with less than 3 hearts
Can Survive Damage: Logic_Damage_Multiplier != OHKO or Can_Use_Bottled_Fairy
Can Survive One Bonk: Bonks_Do_Damage == Off or Can_Survive_Damage
Can Survive Two Bonks: Bonks_Do_Damage == Off or Logic_Damage_Multiplier != OHKO or
(Can_Use_Bottled_Fairy and count(Empty_Bottle, 2))
Can Survive Three Bonks: Bonks_Do_Damage == Off or Logic_Damage_Multiplier != OHKO or
(Can_Use_Bottled_Fairy and count(Empty_Bottle, 3))
Can Smash: Bombs or Ball_and_Chain
Can Break Webs: Lantern or Bombs or (Ball_and_Chain and Ball_and_Chain_Webs == On)
Can Light Torches: Lantern
Can Extinguish Torches: Gale_Boomerang
Can Launch Bombs: Bombs and (Gale_Boomerang or Bow)
Can Break Monkey Cage: Sword or Iron_Boots or Spinner or Ball_and_Chain or Wolf_Link or Bombs or
Bow or Clawshot or (Can_Do_Niche_Stuff and Shield_Attack)
Can Cut Hanging Web: Clawshot or Bow or Gale_Boomerang or Ball_and_Chain
Can Break Wooden Barrier: Sword or Can_Smash or Wolf_Link or Can_Use_Back_Slice_as_Sword
Can Refill Air: Zora_Armor # or glitched logic water bombs
Can Cross Quicksand: Wolf_Link or Spinner
Can Break Armor: Ball_and_Chain
Can Break Ice: Ball_and_Chain
Can Launch Canonball: Bombs
Can Knock Down Hyrule Castle Painting: Bow or (Can_Do_Niche_Stuff and (Bombs or Jump_Strike))
Can Knock Down Hanging Baba: Bow or Clawshot or Gale_Boomerang or Slingshot
Has Damaging Item: Sword or Ball_and_Chain or Bow or Bombs or Iron_Boots or Wolf_Link or Spinner
Can Hit Crystal Switch: Clawshot or Has_Damaging_Item
Can Hit Crystal Switch at Range: Clawshot or Bow
Can Complete MDH: Skip_Midna's_Desparate_Hour == On or ('Can_Access_Castle_Town_South' and 'Can_Complete_Lakebed_Temple')
# REGULAR ENEMIES
# A lot of enemies use this identical logical requirement
Can Defeat Generic Enemy: Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Shadow Beast: Sword or (Wolf_Link and Can_Complete_MDH)
Can Defeat Keese: Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link or Slingshot or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Fire Keese: Can_Defeat_Keese
Can Defeat Ice Keese: Can_Defeat_Keese
Can Defeat Shadow Keese: Can_Defeat_Keese
Can Defeat Rat: Slingshot or Can_Defeat_Generic_Enemy
Can Defeat Ghoul Rat: Can_Use_Senses
Can Defeat Bokoblin: Can_Defeat_Generic_Enemy or Slingshot
Can Defeat Red Bokoblin: Sword or Ball_and_Chain or Giant_Quiver or Wolf_Link or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Difficult_Combat and (Iron_Boots or Spinner))
Can Defeat Bulblin: Can_Defeat_Generic_Enemy
Can Defeat Deku Baba: Sword or Ball_and_Chain or Bow or Spinner or Shield_Attack or Slingshot or Clawshot or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Big Baba: Can_Defeat_Generic_Enemy
Can Defeat Baba Serpent: Can_Defeat_Generic_Enemy
Can Defeat Walltula: Ball_and_Chain or Slingshot or Bow or Gale_Boomerang or Clawshot
Can Defeat Skulltula: Can_Defeat_Generic_Enemy
Can Defeat Deku Like: Bombs
Can Launch Tileworm: Gale_Boomerang
Can Defeat Tileworm: Gale_Boomerang and Can_Defeat_Generic_Enemy
Can Defeat Stalhound: Can_Defeat_Generic_Enemy
Can Defeat Kargarok: Can_Defeat_Generic_Enemy
Can Defeat Goron: Sword or Ball_and_Chain or Bow or Spinner or Shield_Attack or Slingshot or Clawshot or Bombs or
(Can_Do_Niche_Stuff and Iron_Boots) or (Can_Do_Difficult_Combat and Lantern) or Can_Use_Back_Slice_as_Sword
Can Defeat Torch Slug: Sword or Ball_and_Chain or Bow or Wolf_Link or Bombs
Can Defeat Dodongo: Can_Defeat_Generic_Enemy
Can Defeat Beamos: Ball_and_Chain or Bow or Bombs
Can Defeat Leever: Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link or Bombs or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Helmasaur: Can_Defeat_Generic_Enemy
Can Defeat Tektite: Can_Defeat_Generic_Enemy
Can Defeat Toado: Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link
Can Defeat Water Toadpoli: Sword or Ball_and_Chain or Bow or Shield_Attack or (Can_Do_Difficult_Combat and Wolf_Link)
Can Defeat Shell Blade: Water_Bombs or (Sword and (Iron_Boots or (Can_Do_Niche_Stuff and Magic_Armor)))
Can Defeat Lizalfos: Sword or Ball_and_Chain or Bow or Wolf_Link or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Dinalfos: Sword or Ball_and_Chain or Wolf_Link
Can Defeat Chu: Can_Defeat_Generic_Enemy or Clawshot
Can Defeat Chu Worm: (Bombs or Clawshot) and (Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link or Can_Use_Back_Slice_as_Sword)
Can Defeat Bubble: Can_Defeat_Generic_Enemy
Can Defeat Fire Bubble: Can_Defeat_Bubble
Can Defeat Ice Bubble: Can_Defeat_Bubble
Can Defeat Skull Kid: Bow
Can Defeat Poe: Can_Use_Senses
Can Defeat Stalchild: Can_Defeat_Generic_Enemy
Can Defeat Stalfos: Can_Smash
Can Defeat Redead Knight: Sword or Ball_and_Chain or Bow or Wolf_Link or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat White Wolfos: Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link or Bombs or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Chilfos: Can_Defeat_Generic_Enemy
Can Defeat Mini Freezard: Can_Defeat_Generic_Enemy
Can Defeat Freezard: Ball_and_Chain
Can Defeat Young Gohma: Sword or Ball_and_Chain or Bow or Spinner or Wolf_Link or Bombs or
(Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Baby Gohma: Can_Defeat_Generic_Enemy or Slingshot or Clawshot
Can Defeat Armos: Can_Defeat_Generic_Enemy or Clawshot
Can Defeat Zant Head: Sword or Wolf_Link or Can_Use_Back_Slice_as_Sword
# MINIBOSSES
Can Defeat Ook: Sword or Ball_and_Chain or Bow or Wolf_Link or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Dangoro: Iron_Boots and (Sword or Wolf_Link or Bomb_Arrows or (Can_Do_Niche_Stuff and Ball_and_Chain))
Can Defeat Deku Toad: Sword or Ball_and_Chain or Bow or Wolf_Link or Bombs or
Can_Use_Back_Slice_as_Sword or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat King Bulblin Desert: Sword or Ball_and_Chain or Wolf_Link or Giant_Quiver or Can_Use_Back_Slice_as_Sword or
(Can_Do_Difficult_Combat and (Spinner or Iron_Boots or Bombs or Big_Quiver))
Can Defeat Deathsword: Can_Use_Senses and Sword and (Clawshot or Bow or Gale_Boomerang)
Can Defeat Darkhammer: Sword or Ball_and_Chain or Bow or Wolf_Link or Bombs or
(Can_Use_Back_Slice_as_Sword and Can_Do_Difficult_Combat) or (Can_Do_Niche_Stuff and Iron_Boots)
Can Defeat Darknut: Sword or (Can_Do_Difficult_Combat and (Bombs or Ball_and_Chain))
Can Defeat Aerolfos: Clawshot and (Sword or Ball_and_Chain or Wolf_Link or (Can_Do_Niche_Stuff and Iron_Boots))
Can Defeat Phantom Zant: Sword or Wolf_Link
Can Defeat King Bulblin Castle: Sword or Ball_and_Chain or Wolf_Link or Big_Quiver or (Can_Do_Difficult_Combat and
(Spinner or Iron_Boots or Bombs or Can_Use_Back_Slice_as_Sword))
# BOSSES
Can Defeat Diababa: Can_Launch_Bombs or (Gale_Boomerang and
(Sword or Ball_and_Chain or Wolf_Link or Bombs or
(Can_Do_Difficult_Combat and Can_Use_Back_Slice_as_Sword) or (Can_Do_Niche_Stuff and Iron_Boots)))
Can Defeat Fyrus: Bow and Iron_Boots and (Sword or (Can_Do_Difficult_Combat and Can_Use_Back_Slice_as_Sword))
Can Defeat Morpheel: Iron_Boots and Clawshot and Sword and Can_Refill_Air
Can Defeat Stallord: Spinner and (Sword or Can_Do_Difficult_Combat)
Can Defeat Blizzeta: Ball_and_Chain
Can Defeat Armogohma: Bow and Dominion_Rod
Can Defeat Argorok: Double_Clawshots and Ordon_Sword and (Iron_Boots or (Can_Do_Niche_Stuff and Magic_Armor))
Can Defeat Zant: Master_Sword and Gale_Boomerang and (Iron_Boots or (Can_Do_Niche_Stuff and Magic_Armor)) and
Can_Refill_Air and Clawshot and Ball_and_Chain
Can Open North Faron Woods Gate: North_Faron_Woods_Gate_Key or Small_Keys == Keysy
Can Complete Prologue: Skip_Prologue == On or (Sword and Slingshot and Can_Open_North_Faron_Woods_Gate)
# You can only use warp portals from certain stages.
# 'Can_Warp' is an event added to any logical area
# which is part of a stage that players can warp from.
Can Use Warp Portals: Wolf_Link and 'Can_Warp' and Can_Complete_Prologue
Can Free All Monkeys in Forest Temple: "'Can_Free_Monkey_in_Entrance_Room' and 'Can_Free_Monkey_on_Totem' and
'Can_Free_Monkey_in_Big_Baba_Room' and 'Can_Free_Monkey_in_West_Tileworm_Room' and
'Can_Free_Monkey_in_East_Tileworm_Room' and 'Can_Free_Monkey_in_Dark_Spider_Room' and
'Can_Free_Monkey_in_North_Deku_Like_Room'"
Has Sword For Temple of Time: Temple_of_Time_Sword_Requirement == None or
(Temple_of_Time_Sword_Requirement == Wooden_Sword and Sword) or
(Temple_of_Time_Sword_Requirement == Ordon_Sword and Ordon_Sword) or
(Temple_of_Time_Sword_Requirement == Master_Sword and Master_Sword) or
(Temple_of_Time_Sword_Requirement == Light_Sword and Light_Sword)
Can Complete Faron Twilight: Faron_Twilight_Cleared == On or count(Faron_Twilight_Tear, 16)
Can Complete Eldin Twilight: Eldin_Twilight_Cleared == On or count(Eldin_Twilight_Tear, 16)
Can Complete Lanayru Twilight: Lanayru_Twilight_Cleared == On or count(Lanayru_Twilight_Tear, 16)
Can Complete All Twilight: Can_Complete_Faron_Twilight and Can_Complete_Eldin_Twilight and Can_Complete_Lanayru_Twilight
Can Defeat Faron Twilit Insect: Twilight
Can Defeat Eldin Twilit Insect: Twilight
Can Defeat Lanayru Twilit Insect: Twilight and Can_Complete_Eldin_Twilight
Can Clear Forest: Can_Complete_Faron_Twilight and ('Can_Complete_Forest_Temple' or Faron_Woods_Logic == Open)
Can Complete All Dungeons: "'Can_Complete_Forest_Temple' and 'Can_Complete_Goron_Mines' and 'Can_Complete_Lakebed_Temple' and
'Can_Complete_Arbiters_Grounds' and 'Can_Complete_Snowpeak_Ruins' and 'Can_Complete_Temple_of_Time' and
'Can_Complete_City_in_the_Sky' and 'Can_Complete_Palace_of_Twilight'"
Can Break Hyrule Castle Barrier: Hyrule_Barrier_Requirements == Open or
(Hyrule_Barrier_Requirements == Vanilla and 'Can_Complete_Palace_of_Twilight') or
(Hyrule_Barrier_Requirements == Fused_Shadows and count(Progressive_Fused_Shadow, Hyrule_Barrier_Fused_Shadows)) or
(Hyrule_Barrier_Requirements == Mirror_Shards and count(Progressive_Mirror_Shard, Hyrule_Barrier_Mirror_Shards)) or
(Hyrule_Barrier_Requirements == Dungeons and dungeons_completed(Hyrule_Barrier_Dungeons)) or
(Hyrule_Barrier_Requirements == Poe_Souls and count(Poe_Soul, Hyrule_Barrier_Poe_Souls)) or
(Hyrule_Barrier_Requirements == Hearts and hearts(Hyrule_Barrier_Hearts))
Can Open Hyrule Castle Big Key Gate: Hyrule_Castle_Big_Key_Requirements == None or
(Hyrule_Castle_Big_Key_Requirements == Fused_Shadows and count(Progressive_Fused_Shadow, Hyrule_Castle_Big_Key_Fused_Shadows)) or
(Hyrule_Castle_Big_Key_Requirements == Mirror_Shards and count(Progressive_Mirror_Shard, Hyrule_Castle_Big_Key_Mirror_Shards)) or
(Hyrule_Castle_Big_Key_Requirements == Dungeons and dungeons_completed(Hyrule_Castle_Big_Key_Dungeons)) or
(Hyrule_Castle_Big_Key_Requirements == Poe_Souls and count(Poe_Soul, Hyrule_Castle_Big_Key_Poe_Souls)) or
(Hyrule_Castle_Big_Key_Requirements == Hearts and hearts(Hyrule_Castle_Big_Key_Hearts))
Can Talk to Springwater Goron: Nothing # TODO
File diff suppressed because it is too large Load Diff
@@ -1,561 +0,0 @@
######################
## Logic Settings ##
######################
- Name: Logic Rules
Default Option: All Locations Reachable
Options:
- All Locations Reachable: "Logic is considered when placing items. Tricks and Glitches can be enabled for consideration below."
- Beatable Only: "Logic is considered when placing items only until the world is beatable. Remaining items are placed without logic consideration. Tricks and Glitches can be enabled for consideration below."
- No Logic: "Maximize randomization, logic is not considered when placing items. MAY BE IMPOSSIBLE TO BEAT."
# - Vanilla: "Items are placed in their vanilla locations."
######################
## Access Options ##
######################
- Name: Hyrule Barrier Requirements
Need In Game: True
Tracker Important: True
Default Option: Vanilla
Options:
- Open: "The barrier around Hyrule Castle is dispelled from the beginning."
- Vanilla: "The barrier will be dispelled once Palace of Twilight is cleared."
- Fused Shadows: "The barrier will be dispelled once the required number of Fused Shadows have been collected."
- Mirror Shards: "The barrier will be dispelled once the required number of Mirror Shards have been collected."
- Dungeons: "The barrier will be dispelled once the required number of Dungeons have been cleared."
- Poe Souls: "The barrier will be dispelled once the required number of Poe Souls have been collected."
- Hearts: "The barrier will be dispelled once the required number of Hearts have been reached."
- Name: Hyrule Barrier Fused Shadows
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-3: No description available.
- Name: Hyrule Barrier Mirror Shards
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-4: No description available.
- Name: Hyrule Barrier Dungeons
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-8: No description available.
- Name: Hyrule Barrier Poe Souls
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-60: No description available.
- Name: Hyrule Barrier Hearts
Need In Game: True
Tracker Important: True
Default Option: 4
Options:
- 4-20: No description available. # Hehe 420
- Name: Palace of Twilight Requirements
Need In Game: True
Tracker Important: True
Default Option: Vanilla
Options:
- Open: "The Mirror of Twilight is open at the start of the game."
- Fused Shadows: "The player must collect all 3 Fused Shadows."
- Mirror Shards: "The player must collect all 4 Mirror Shards."
- Vanilla: "The player must complete City in the Sky."
- Name: Faron Woods Logic
Tracker Important: True
Default Option: Closed
Options:
- Closed: "Midna will block the player from leaving Faron Woods until Forest Temple is completed."
- Open: "Midna will not prevent the player from leaving Faron Woods."
- Name: Mirror Chamber Access
Need In Game: True
Tracker Important: True
Default Option: Open
Options:
- Open: "The entrance is open and operates like normal. If you start with the Mirror Chamber Portal, you can access the Stallord boss fight without going through Arbiter's Grounds."
- Barrier: "A barrier is placed in front of the Mirror Chamber entrance and goes away once Stallord is defeated."
- Closed: "The Mirror Chamber is isolated from the world and cannot be reached from the Stallord boss room. To access it, players will either need the portal or access from Palace of Twilight."
######################
## Item Pool ##
######################
- Name: Golden Bugs
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The Golden Bug locations across Hyrule will give the golden bug at that location in the base game."
- "On": "The Golden Bug locations across Hyrule will be randomized."
- Name: Sky Characters
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The Sky Character locations across Hyrule will give Sky Characters."
- "On": "The Sky Character locations across Hyrule will be randomized."
- Name: Gifts From NPCs
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Locations which involve an NPC giving you a gift will give the item expected from the base game."
- "On": "Locations which involve an NPC giving you a gift will be randomized."
- Name: Shop Items
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Shop item locations will contain the item they have in the base game."
- "On": "Shop items will be randomized."
- Name: Hidden Skills
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The golden wolf locations across Hyrule will give you Hidden Skills. You will be required to get at least one of them to obtain the Ending Blow."
- "On": "The golden wolf locations across Hyrule will be randomized."
- Name: Hidden Rupees
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Rupees hidden in tricky locations will not be randomized."
- "On": "Rupees hidden in tricky locations will be randomized."
- Name: Freestanding Rupees
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Rupees out in the open will not be randomized."
- "On": "Rupees out in the open will be randomized."
- Name: Poe Souls
Tracker Important: True
Default Option: Vanilla
Options:
- Vanilla: "All poes will give poe souls as the item for beating them."
- Overworld: "Overworld poes will give randomized items. Poes in dungeons will still give poe souls."
- Dungeon: "Poes in dungeons will give randomized items. Overworld poes will will give poe souls."
- All: "All poes will be randomized."
- Name: Ilia Memory Quest
Tracker Important: True
Default Option: Vanilla
Options:
- Vanilla: "The Ilia Memory Quest will work the same way as the base game. You'll start it by beating Temple of Time and then talking to Renado in Kakariko Village."
- Letter: "Renado's Letter will be shuffled into the world somewhere. You'll start the quest by finding Renado's Letter and then showing it to Telma in her bar."
- Invoice: "The Invoice will be shuffled into the world somewhere. You'll start the quest by finding the Invoice and showing it to the Doctor in Castle Town."
- Statue: "The Wooden Statue will be shuffled into the world somewhere. You'll start the quest by finding the Wooden Statue and then showing it to Ilia in Kakariko Village."
- Charm: "Ilia's Charm will be shuffled into the world somewhere. You'll start the quest by finding Ilia's Charm and then showing it to Ilia in Kakariko Village to complete the quest."
- Name: Item Scarcity
Default Option: Vanilla
Options:
- Vanilla: "No changes to the item pool."
- Minimal: "Removes unrequired items such as Heart Containers and Pieces, Hawkeye, etc. Has as few items as possible for Bomb Bags, Bows, Hidden Skills, and Wallets. No Magic Armor and 1 Hidden Skill if Glitchless logic."
- Plentiful: "One extra copy of major items. There are 17 Heart Containers but no Pieces of Heart. Extra keys if `Keysanity` or `Any Dungeon`."
- Name: Trap Item Frequency
Default Option: None
Options:
- None: "All items in the game will be genuine."
- Few: "Approximately 12.5% of non-major items will be replaced with 'traps' that don't give the item they appear to be."
- Many: "Approximately 39.1% of non-major items will be replaced with 'traps' that don't give the item they appear to be."
- Mayhem: "Approximately 62.7% of non-major items will be replaced with 'traps' that don't give the item they appear to be."
- Nightmare: "All of the non-major items will be replaced with 'traps' that don't give the item they appear to be."
######################
## Dungeon Items ##
######################
- Name: Small Keys
Tracker Important: True
Default Option: Vanilla
Random Low: Own Dungeon
Random High: Anywhere
Options:
- Vanilla: "Small Keys will appear in their vanilla locations."
- Own Dungeon: "Small Keys will appear inside their respective dungeon."
- Any Dungeon: "Small Keys can appear inside any dungeon."
# - Own Region: "Small Keys will appear in their dungeon's region."
- Overworld: "Small Keys will only appear in the overworld."
- Anywhere: "Small Keys can appear anywhere."
- Keysy: "Small Keys will not appear anywhere in the world and their locks will start opened."
- Name: Big Keys
Tracker Important: True
Default Option: Vanilla
Options:
- Vanilla: "Big Keys will appear in their vanilla locations."
- Own Dungeon: "Big Keys will appear inside their respective dungeon."
- Any Dungeon: "Big Keys can appear inside any dungeon."
# - Own Region: "Big Keys appear in their dungeon's region."
- Overworld: "Big Keys will only appear in the overworld."
- Anywhere: "Big Keys can appear anywhere."
- Keysy: "Big Keys will not appear anywhere in the world and boss doors will start opened."
- Name: Maps and Compasses
Default Option: Vanilla
Options:
- Vanilla: "Maps and Compasses will appear in their vanilla locations."
- Own Dungeon: "Maps and Compasses can appear anywhere inside their respective dungeon."
- Any Dungeon: "Maps and Compasses can appear inside any dungeon."
# - Own Region: "Maps and Compasses will appear in their dungeon's region."
- Overworld: "Maps and Compasses will only appear in the overworld."
- Anywhere: "Maps and Compasses can appear anywhere."
- Start With: "The player starts with all Maps and Compasses."
- Name: Hyrule Castle Big Key Requirements
Need In Game: True
Tracker Important: True
Default Option: None
Options:
- None: "The gate is opened and the key is randomized according to the respective Big Key settings."
- Fused Shadows: "The gate will open once the required number of Fused Shadows have been collected."
- Mirror Shards: "The gate will open once the required number of Mirror Shards have been collected."
- Dungeons: "The gate will open once the required number of Dungeons have been cleared."
- Poe Souls: "The gate will open once the required number of Poe Souls have been collected."
- Hearts: "The gate will open once the required number of Hearts have been reached."
- Name: Hyrule Castle Big Key Fused Shadows
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-3: No description available.
- Name: Hyrule Castle Big Key Mirror Shards
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-4: No description available.
- Name: Hyrule Castle Big Key Dungeons
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-8: No description available.
- Name: Hyrule Castle Big Key Poe Souls
Need In Game: True
Tracker Important: True
Default Option: 1
Options:
- 1-60: No description available.
- Name: Hyrule Castle Big Key Hearts
Need In Game: True
Tracker Important: True
Default Option: 4
Options:
- 4-20: No description available. # Hehe 420
- Name: Dungeon Rewards Can Be Anywhere
Default Option: "Off"
Options:
- "Off": "Dungeon reward items (Fused Shadows and Mirror Shards) will only appear at the end of dungeons."
- "On": "Dungeon reward items (Fused Shadows and Mirror Shards) can appear anywhere."
- Name: No Small Keys on Bosses
Default Option: "Off"
Options:
- "Off": "Small keys will not be placed on boss heart container or dungeon reward checks."
- "On": "Small keys can potentially be placed on boss heart container or dungeon reward checks. You may be expected to defeat a dungeon's boss before progressing further into the dungeon."
- Name: Unrequired Dungeons Are Barren
Tracker Important: True
Default Option: "On"
Options:
- "Off": "Unrequired dungeons may contain items needed to beat the game."
- "On": "Unrequired dungeons will not contain any items necessary to beat the game."
######################
## Timesavers ##
######################
- Name: Skip Prologue
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "You will be required to play through the prologue section of the game to begin the randomizer. This includes everything up to the second goat herding sequence."
- "On": "The prologue section of the game will be completed from the start."
- Name: Faron Twilight Cleared
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "You will be required to complete the Castle Sewers and Faron Twilight section of the game."
- "On": "The Castle Sewers and Faron Twilight section of the game will be completed from the start."
- Name: Eldin Twilight Cleared
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "You will be required to complete the Eldin Twilight section of the game."
- "On": "The Eldin Twilight section of the game will be completed from the start."
- Name: Lanayru Twilight Cleared
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "You will be required to complete the Lanayru Twilight section of the game."
- "On": "The Lanayru Twilight section of the game will be completed from the start."
- Name: Skip Midna's Desparate Hour
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "After completing Lakebed Temple, you will be required to complete the Midna's Desperate Hour section of the game. Note that some overworld poes require Midna's Desperate Hour to be completed before they spawn in."
- "On": "The Midna's Desperate Hour section of the game will be completed from the start."
- Name: Skip Minor Cutscenes
Need In Game: True
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Minor cutscenes such as area introduction cutscenes and Midna text explanations will not be skipped."
- "On": "Minor cutscenes such as area introduction cutscenes and Midna text explanations will not play."
- Name: Skip Major Cutscenes
Need In Game: True
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "If you want to skip a skippable cutscene, you must press the start button twice while the cutscene is playing."
- "On": "The randomizer will automatically skip any skippable cutscene as fast as possible."
- Name: Unlock Map Regions
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The map will not start filled in at the beginning of the randomizer. You will have to travel to the different sections of the world to get them on the map."
- "On": "The map will start as filled in as possible. Certain sections such as Eldin and Lanayru will only be filled in if their Twilight section is cleared from the start."
- Name: Open Door of Time
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "You will be required to lead the big statue down the Temple of Time to open the big door at the bottom."
- "On": "The big statue will already be set in place at the bottom of the Temple of Time and the door will be opened from the start."
- Name: Active Goron Mines Magnets
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The switches to activate magnets in Goron Mines will need to be activated manually."
- "On": "The switches to activate magnets in Goron Mines will be activated from the start except for the highest one in the main room."
- Name: Lower Hyrule Castle Chandelier
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The chandeliers in Hyrule Castle will all need to be lowered manually."
- "On": "One of the chandeliers in the Hyrule Castle main hall will be lowered from the start. This skips requiring Gale Boomerang and either Lantern or Bow to complete Hyrule Castle."
- Name: Skip Bridge Donation
Need In Game: True
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "You will need to donate money at Kakariko Malo Mart to build the bridge between Eldin Field and Castle Town."
- "On": "The bridge between Eldin Field and Castle Town will be automatically built after Eldin and Lanayru Twilight are both completed."
######################
# Additional Settings#
######################
- Name: Starting Form
Tracker Important: True
Default Option: Human
Options:
- Human: Start as Human Link
- Wolf: Start as Wolf Link
- Name: Bonks Do Damage
Tracker Important: True
Default Option: "Off"
Options:
- "Off": No description available.
- "On": No description available.
- Name: Starting Time of Day
Default Option: Noon
Options:
- Morning: "Time of day will start at 9am."
- Noon: "Time of day will start at noon."
- Evening: "Time of day will start at 6pm."
- Night: "Time of day will start at midnight."
- Name: Logic Transform Anywhere
Default Option: "On"
Options:
- "Off": "You will not be expected to transform in places that you normally can't."
- "On": "You may be expected to transform in places that require turning on the Dusklight Transform Anywhere setting."
- Name: Logic Increase Wallet Capacity
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Logic will assume you have the same wallet capacities as the base game."
- "On": "Logic will assume that you have the Bigger Wallets Dusklight setting turned on."
- Name: Logic Damage Multiplier
Default Option: Vanilla
Options:
- Vanilla: "Logic will assume your Dusklight Damage Multiplier is x1."
- Double: "Logic will assume your Dusklight Damage Multiplier is x2."
- Triple: "Logic will assume your Dusklight Damage Multiplier is x3."
- Quadruple: "Logic will assume your Dusklight Damage Multiplier is x4."
- OHKO: "Logic will assume your Dusklight Instant Death setting is turned on."
#############################
# Dungeon Entrance Settings #
#############################
- Name: Lakebed Does Not Require Water Bombs
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The entrance to Lakebed Temple will be blocked by a boulder and require using Water Bombs to blow up."
- "On": "The rock blocking access to the entrance of Lakebed Temple will be gone, meaning you can get in without Water Bombs."
- Name: Arbiters Does Not Require Bulblin Camp
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Bulblin Camp will have to be completed to access the entrance to Arbiter's Grounds. This will require finding the Gerudo Desert Bulblin Camp Key."
- "On": "Bulblin Camp will be cleared at the start of the randomizer."
- Name: Snowpeak Does Not Require Reekfish Scent
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Getting the reekfish scent will be required for running through the blizzard on Snowpeak Mountain. Getting the reekfish scent requires the Coral Earring."
- "On": "The randomizer will start you with the reekfish scent, meaning you can go through the Snowpeak Mountain blizzard without needing the Coral Earring."
- Name: Sacred Grove Does Not Require Skull Kid
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Getting through the Lost Woods will require completing the Skull Kid chase sequence."
- "On": "The Skull Kid chase sequence in the Lost Woods will start already completed."
- Name: City Does Not Require Filled Skybook
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "The canon to City in the Sky will spawn in Lake Hylia when the Sky Book has been completed."
- "On": "The canon to City in the Sky will be in Lake Hylia from the start."
- Name: Goron Mines Entrance
Tracker Important: True
Default Option: Closed
Options:
- Closed: "Accessing Goron Mines will require climbing up to the Death Mountain Sumo Hall and wrestling with the Goron Elder."
- No Wrestling: "Accessing Goron Mines will require climbing up to the Death Mountain Sumo Hall, but wrestling the Goron Elder will not be necessary."
- Open: "The elevator shortcut to the Death Mountain Sumo Hall will be open, and can be used to access Goron Mines."
- Name: Temple of Time Sword Requirement
Need In Game: True
Tracker Important: True
Default Option: None
Options:
- None: "The door to the past will be open from the start."
- Wooden Sword: "The door to the past will require striking at least the Wooden Sword into the Master Sword pedestal."
- Ordon Sword: "The door to the past will require striking at least the Ordon Sword into the Master Sword pedestal."
- Master Sword: "The door to the past will require striking at least the Master Sword into the Master Sword pedestal."
- Light Sword: "The door to the past will require striking the Light Sword into the Master Sword pedestal."
- Name: Randomize Starting Spawn
Default Option: "Off"
Options:
- "Off": "Link will start outside his house."
- "On": "Link will start in a random area."
- Name: Randomize Dungeon Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a dungeon will lead to the vanilla dungeon."
- "On": "Entering a dungeon will lead to a random dungeon."
- "On + Hyrule Castle": "Entering a dungeon will lead to a random dungeon. Hyrule Castle's entrance will be shuffled as well."
- Name: Randomize Boss Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a boss door will lead to the intended boss."
- "On": "Entering a boss door will lead to a random boss."
- Name: Randomize Grotto Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a grotto will lead to the intended grotto."
- "On": "Entering a grotto will lead to a random grotto."
- Name: Randomize Cave Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a door or loadzone that leads to a cave area will lead to the intended cave."
- "On": "Entering a door or loadzone that leads to a cave area will lead to a random cave."
- Name: Randomize Interior Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a door or loadzone that leads to an interior area will lead to the intended area."
- "On": "Entering a door or loadzone that leads to an interior area will lead to a random intended area."
- Name: Randomize Overworld Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a loadzone that leads to an overworld area will lead to the intended area."
- "On": "Entering a loadzone that leads to an overworld area will lead to a random area."
- Name: Decouple Double Door Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a left door will lead to the same location as the corresponding right door."
- "On": "Entering a left door may lead somewhere different than the corresponding right door (only if the door's type is randomized)."
- Name: Decouple Entrances
Tracker Important: True
Default Option: "Off"
Options:
- "Off": "Entering a location and taking the entrance behind you will take you back to where you came from."
- "On": "Entering a location and taking the entrance behind you will take you to a random location."
#############################
## Logic Tricks ##
#############################
- Name: Back Slice as Sword
Default Option: "Off"
Options:
- "Off": "Back Slicing without a sword can be logically required to do damage."
- "On": "Back Slicing without a sword can be logically required to do damage."
- Name: Ball and Chain Webs
Default Option: "Off"
Options:
- "Off": "Ball and Chain will not be required to break webs."
- "On": "Ball and Chain may be required to break webs."
@@ -1,609 +0,0 @@
# Flag values taken from: https://github.com/lunarsoap5/Randomizer-Web-Generator-1/blob/development/Generator/Assets/Flags.cs
EventFlags:
- 0x0382 # Gave wooden sword to Talo. Talked to squirrel outside link's house
- 0x0629 # Tame Epona, KB1 trigger activated, Warped Kakariko Bridge Back.
- 0x0F40 # Talked to Doctor for the first time.
- 0x1208 # Can use Sera's Shop.
- 0x1410 # Put Bo outside, ready to wrestle
- 0x0F01 # Got Lantern from Coro (Remove when adding Coro checks)
- 0x0A2F # Bridge of Eldin Stolen, KB1 defeated, KB1 started
- 0x0F68 # Bridge of Eldin Warped Back, forced text when entering dr. clinic, talked to dr before giving invoice
- 0x4088 # Saved monkey from puppets, Visited Gerudo Desert for the first time.
- 0x4118 # Talked to Fado after Faron and Eldin Twilight
- 0x07A0 # Watched Colin CS after KB1, talked to Bo before sumo
- 0x2020 # Master Sword Story Progression
- 0x2010 # Arbiters Grounds Story Progression
- 0x2C10 # Raised the mirror in the Mirror Chamber
- 0x1B38 # Skip Monkey Escort
- 0x1C20 # Talked to Bo after opening boots chest.
- 0x5F20 # Shad leaves sanctuary.
- 0xF701 # Add 256 Rupees to Charlo.
- 0xF8F4 # Add 244 Rupees to Charlo.
- 0x6001 # Talked to Fyer after Lanayru Twilight
- 0x3880 # Talked to Jovani after defeating Poe.
- 0x2208 # Talked to Yeto on top of the mountain after clearing SPR
- 0x3B40 # Won Snowboard race against Yeto.
- 0x2F80 # Talked to Goron outside East Castle Town
- 0x1C10 # Win Sumo round 1 against Bo
- 0x3902 # Released first caught fish in Ordon Day 2
- 0x1002 # Talked to Jaggle after climbing vines.
- 0x0B20 # Talked to Yeta in Snowpeak for the first time
- 0x4308 # Senses unlocked
- 0x4610 # Rode Epona back to Link's House
- 0x0C10 # Midna accompanies Wolf
- Skip_Prologue == On:
- 0x0404 # Talked to Uli Day 1.
- 0x4510 # Saved Talo
- 0x4A60 # Completed Ordon Day 1 and Finished Sword Training.
- 0x1601 # Completed Ordon Day 2.
- 0x1580 # Watched CS for Goats 2 Done.
- Faron_Twilight_Cleared == On:
- 0x057F # Midna Charge Unlocked, Finished Sewers, Met Zelda in swers, Midna cut prison chain, watched sewers intro CS, Escaped Cell in Sewers.
- 0x0610 # Cleared Faron Twilight
- 0x0C08 # Sword and shield removed from wolf's back.
- Eldin_Twilight_Cleared == On:
- 0x0708 # Cleared Eldin Twilight
- 0x0604 # Map Warping unlocked.
- Lanayru_Twilight_Cleared == On:
- 0x0880 # Zora's Domain Thawed.
- 0x0C02 # Lanayru Twilight Story Flag.
- 0x0A10 # Defeated Kargarok Rider at Lake (allows player to howl for Kargorok.);
- Skip_Minor_Cutscenes == On:
- 0x0140 # Talked to Yeto First Time.
- 0x0390 # Jaggle Calls out to Link, talked to Squirrel as Wolf in Ordon.
- 0x06C0 # CS After beating Ordon Shadow, CS after entering Faron Twilight.
- 0x0702 # First Time Talking to Gor Coron in Sumo Hall
- 0x1501 # Talked to Agitha for the first time.
- 0x2001 # Talked to Telma for the first time.
- 0x5E10 # Midna text after beating Forest Temple.
- 0x1D40 # Listened to Fyer at drained lake.
- 0x2201 # Plumm initial CS watched.
- 0x2310 # STAR initial CS watched.
- 0x2602 # Talked to Yeto on Snowpeak.
- 0x2840 # Used Ooccoo for the first time.
- 0x3704 # Postman twilight text.
- 0x3806 # Hena cabin first time CS, talked to Hena first time.
- 0x3A01 # Talked to Ralis in Graveyard for the first time.
- 0x4002 # Agreed to help Rusl after Snowpeak Ruins.
- 0x4205 # Watched post-ToT Ooccoo CS. Watched Cutscene with Rusl in North Faron Woods.
- 0x4508 # Allows postman letters to show up in inventory.
- 0x4A10 # Saw Talo in cage CS.
- 0x3E02 # City Ooccoo CS watched.
- 0x5940 # Met Postman for the first time.
- 0x5D40 # Midna text after Kargarok flight.
- 0x2502 # Watched cutscene with Yeto on top of mountain
- Faron_Woods_Logic == Open:
- 0x0602 # Forest Temple Story Flag
- 0x0C40 # Talked to Farone after clearing Forest Temple
- 0x5E10 # Midna text after Forest Temple completed
- Skip_Midna's_Desparate_Hour == On:
- 0x0C01 # Midna's Desperate Hour started.
- 0x1E08 # Midna's Deseperate Hour Completed.
- Small_Keys == Keysy:
- 0x0850 # Zora Escort started and completed.
- 0x0480 # Told Yeta about pumpkin.
- 0x0003 # Yeto put pumpkin and cheese in soup.
- 0x1460 # Snowpeak Ruins North and West doors unlocked.
- 0x0120 # Told Yeta about cheese
- Hyrule_Barrier_Requirements == Open:
- 0x4208 # Remove Castle Barrier
- Palace_of_Twilight_Requirements == Open:
- 0x2B08 # Mirror of Twilight Repaired.
- Goron_Mines_Entrance != Closed:
- 0x0706 # Talked to Gor Coron, Won Sumo against Gor Coron.
- Arbiters_Does_Not_Require_Bulblin_Camp == On:
- 0x0B40 # Escaped Burning Tent in Bulblin Camp.
- Snowpeak_Does_Not_Require_Reekfish_Scent == On:
- 0x6120 # Got the reekfish and smelled it (removes void in Snowpeak).
- City_Does_Not_Require_Filled_Skybook == On:
- 0x3B08 # Sky Cannon Repaired.
- Randomize_Starting_Spawn == On:
- 0x057A # Finished Sewers, Midna text after entering Faron Twilight, Met Zelda in sewers, Midna cut prison chain, Watched Sewers intro CS, Escaped cell in sewers.
- Ilia_Memory_Quest >= Letter:
- 0x2004 # ToT Story Progression Flag
- 0x0F80 # Renados Letter Check
- Ilia_Memory_Quest >= Statue:
- 0x2710 # Showed Invoice to Doctor
- 0x2F04 # Got Medicine Scent
- 0x2102 # Talked to Louise after Medicine Scent
- 0x2204 # Got Wooden Statue
- Ilia_Memory_Quest >= Charm:
- 0x2340 # Gave statue to Ilia
- 0x2E08 # HV barrier removed
- 0x2280 # Got Ilia's Charm
- Skip_Bridge_Donation == Off:
- 0xF901 # Add 256 Rupees to Malo Mart.
- 0xFAF4 # Add 244 Rupees to Malo Mart.
RegionFlags:
Ordona Province:
Index: 0x00
Flags:
- 0x57 # Spider on Link's Ladder killed.
- 0x63 # Spawn the Chest in Link's House
- 0x7E # Midna jumps to Shop unlocked
- 0x6B # Ordon Spring Portal.
- 0x44 # Midna Text after Ordon Shield (Spawns sword)
- 0x46 # Midna Text after Ordon Sword
- 0x68 # Approach faron wall with Midna
- 0xA0 # Midna allows player to approach Faron Twilight Wall
- 0xBA # Explored area outside Link's house as wolf
- 0x61 # Defeated first bulblin outside link's house
- 0x62 # Defeated second bulblin outside link's house
- 0x60 # Defeated Hugo
- Skip_Minor_Cutscenes == On:
- 0x4A # Ordon Day 3 Intro CS.
- 0x4C # Knocked down Ordon bee nest CS.
- 0x4E # Ordon Ranch first time CS.
- 0x53 # Ilia spring CS watched.
- 0x54 # Ilia spring CS started.
- 0x55 # Ordon Village first time CS.
- 0x56 # Ilia spring CS trigger.
- 0x68 # Approach Faron Twilgiht with Midna CS.
- 0x6E # Enter shield house as wolf CS.
- 0x75 # Midna text after hearing Bo and Jaggle talk about the shield.
- 0x7C # Midna text before jumping to Ordon Shop roof.
- 0x7D # Rusl talking to Uli during wolf night CS.
- 0xB8 # Enter Ordon Village as wolf CS.
Hyrule Castle Sewers and Rooftops:
Index: 0x01
Flags:
- Skip_Minor_Cutscenes == On:
- 0x42 # Midna text after first gate in sewers.
- 0x43 # Midna text after exiting to rooftops.
- 0x51 # Zelda tower intro CS.
- 0x57 # Outside top door intro CS.
- 0x5A # Went to the otherside of the fence in sewers CS.
- 0x5B # Top of stairway intro CS.
- 0x5C # Stairway intro CS.
- 0x7B # Midna text when approaching the rooftop guard.
Faron Woods:
Index: 0x02
Flags:
- 0x63 # Trill lets you shop at his store.
- 0x48 # Talked to Coro after bugs
- 0x60 # Got Lantern Back from Monkey
- 0x61 # Saw bugs move in Coro's house
- 0x7D # Talked to Midna about Coro spirit
- 0x4E # Saved Monkey from Puppets.
- 0x62 # Midna text before jumping to lost woods
- 0x95 # Midna text after warping to North Faron for bridge.
- 0xBF # Burned First cobweb in faron cave
- 0xBE # Burned second cobweb in faron cave
- Skip_Prologue == On:
- 0x4B # North Faron Gate Unlocked
- Skip_Minor_Cutscenes == On:
- 0x74 # Faron intro CS.
- 0x77 # See Faron Light Spirit from afar CS.
- 0x7C # Entered mist area as human.
- Faron_Twilight_Cleared == On:
- 0x46 # Midna jump 1 mist area.
- 0x47 # Midna jump 1 mist area.
- 0x98 # South Faron Portal.
# Re-enable once key situation is sorted out
# - Small_Keys == Keysy:
# - 0x53 # Coro gate unlocked.
# - 0x4B # North Faron Gate Unlocked.
Kakariko and Death Mountain:
Index: 0x03
Flags:
- 0xB9 # Barnes sells water bombs.
- 0xB3 # Colin Rescued CS (Malo Mart is Open).
- 0xA4 # Barnes Sells Bombs.
- 0x42 # Big Rock fell at DMT
- 0xA7 # Unlock Jumps to top of Sanctuary
- 0x9A # Kakariko Village intro CS.
- 0x54 # Custom flag. Sets the sign in Kak Malo mart slot 1 to appear.
- 0x99 # Remove wooden shield from Kak Malo Mart counter.
- Skip_Minor_Cutscenes == On:
- 0x49 # Death mountain intro CS.
- 0x83 # Kakariko Graveyard intro CS.
- 0x8C # Midna text after Meteor fell.
- Eldin_Twilight_Cleared == On:
- 0x14 # Collected Tear From Bomb Storage
- 0x1A # Collected Tear From Bomb Storage
- 0x1B # Collected Tear From Bomb Storage
- 0x67 # Ant house entered from top
- 0x64 # Ant house box pushed
- 0x5E # Defeated Ant house Tears of Light bug
- 0x1E # Collected Tear from Ant house
- 0xBD # Done Midna jumps in ant house.
- Small_Keys == Keysy:
- 0xBA # Followed Rutella to graveyard.
- 0xB6 # Started Rutella escort.
- Goron_Mines_Entrance == Open:
- 0x79 # moved death mountain rock to exit
- 0x8F # moved death mountain rock to hot spring water
- 0xB0 # Goron lets you enter elevator in sumo hall
- Ilia_Memory_Quest >= Charm:
- 0x70 # Darbus destroyed HV rocks
Lake Hylia and Zoras Domain:
Index: 0x04
Flags:
- Skip_Minor_Cutscenes == On:
- 0x58 # Talked to Rutella in Lanayru Twilight.
- 0x5F # Zora's domain intro CS twilight.
- 0x67 # Midna text after jumping to Lake from burning bridge.
- 0x6B # Zora's Domain exit flood water cutscene.
- 0x72 # Midna text after arriving at frozen Upper Zora River.
- 0x91 # Midna text after frozen Zora Domain intro CS.
- 0xB0 # Watched CS of Ooccoo running to Sky Cannon.
- Lanayru_Twilight_Cleared == On:
- 0x7F # Lake Hylia has water on Lake Hylia Map.
- Skip_Midna's_Desparate_Hour == On:
- 0x51 # Set flag for MDH Cutscene in Lake Hylia
- Lakebed_Does_Not_Require_Water_Bombs == On:
- 0x70 # Blew up rock in front of lakebed CS.
- 0x78 # Blew up rock in front of lakebed.
# Not sure what Index 5 is
Hyrule Field:
Index: 0x06
Flags:
- 0x4C # Bridge of Eldin Warped back CS.
- 0x7E # Kakariko Gorge placed CS
- 0x83 # Set the flag for the Ganon Barriers in Hyrule Field during Eldin Twilight.
- Skip_Minor_Cutscenes == On:
- 0x68 # Midna text after warping Gorge bridge.
- 0x7C # Midna text after Lanayru Field twilight CS.
- 0x72 # Faron Field intro CS.
- 0x40 # Twilight Lanayru Field intro CS.
- 0x4F # Cutscene of gate outside Kakariko Village.
- 0xB3 # Midna text after entering Lanayru Twilight.
- 0xB4 # Midna text when seeing Lanayru Twilight from far away.
- 0xB6 # Midna text after entering Eldin Twilight.
- 0xB7 # Midna text when seeing Eldin Twilight from far away.
- Lanayru_Twilight_Cleared == On:
- 0x58 # Lake Hylia has water on Hyrule Field Map
- Ilia_Memory_Quest >= Charm:
- 0x43 # Remove HV rocks from Hyrule field
Lost Woods and Sacred Grove:
Index: 0x07
Flags:
- 0x58 # Sacred Grove MS Pedestal Map
- Skip_Minor_Cutscenes == On:
- 0x42 # Midna text after pushing block shortcut as human after Grove 2.
- 0x43 # cs after pushing block human
- 0x44 # Lost Woods intro CS.
- Temple_of_Time_Sword_Requirement == None:
- 0x49 # Stairs to Temple of time created.
- 0x4A # Struck master sword pedestal with sword.
- 0x4B # Stairs and window appear and work properly (Past).
- 0xBC # Statue in present is gone. (custom flag)
- Sacred_Grove_Does_Not_Require_Skull_Kid == On:
- 0xB6 # Skull Kid - Human defeated.
- 0xB7 # Lost Woods Turns to day after defeating Skull Kid - Human
- 0x5B # Block pushed down
- 0x42 # Midna text after block pushed down
- 0x43 # cs after pushing block human
Snowpeak Province:
Index: 0x08
Flags:
- Skip_Minor_Cutscenes == On:
- 0x45 # Snowpeak Summit intro CS.
- 0x5E # Midna text outside SPR.
- 0x5F # Snowpeak intro CS.
- Snowpeak_Does_Not_Require_Reekfish_Scent == On:
- 0x49 # Snowpeak summit cs.
- 0x45 # Snowpeak Summit intro CS.
Castle Town:
Index: 0x09
Flags:
- 0x40 # Original Jovani Poe killed. It is replaced with a custom actor.
- 0x76 # Jovani Chest CS 2
- 0x7F # Open Chest to Jovani
- 0x7E # Jovani Chest CS
- 0x50 # Set flag for Midna breaking Barrier CS.
- 0xBC # Spawn Gengle by default as his actor interferes with the poe soul
- Skip_Minor_Cutscenes == On:
- 0x55 # STAR Tent intro CS.
- 0x7D # Jovani House intro CS.
- Ilia_Memory_Quest >= Statue:
- 0x56 # Remove invisible wall from Doctor
Gerudo Desert:
Index: 0x0A
Flags:
- 0x99 # Desert Entrance CS.
- 0x20 # Set Freestanding key flag.
- 0x7F # Mirror Raised Cutscene Flag (Places Boar at desert entrance)
- Skip_Minor_Cutscenes == On:
- 0x53 # Mirror Chamber Intro CS.
- Arbiters_Does_Not_Require_Bulblin_Camp == On:
- 0x43 # Explored part 9 of the Bulblin camp area
- 0x44 # Explored part 8 of the Bulblin camp area
- 0x45 # Explored part 7 of the Bulblin camp area
- 0x46 # Explored part 6 of the Bulblin camp area
- 0x47 # Explored part 5 of the Bulblin camp area
- 0x4C # Explored part 2 of the Bulblin camp area
- 0x4D # Explored part 4 of the Bulblin camp area
- 0x4E # Explored part 3 of the Bulblin camp area
Forest Temple:
Index: 0x10
Flags:
- 0x49 # FT Ook Bridge Destroyed
- Skip_Minor_Cutscenes == On:
- 0x41 # Midna text after getting Boomerang.
- 0x42 # Midna text after Ook breaks the bridge.
- 0x47 # Midna text after freeing first monkey.
- 0x49 # Bridge before Ook broken.
- 0x56 # Bokoblins spot Link in windless bridge room.
- 0x57 # Turned bridge in windless bridge room.
- 0x72 # West Tile Worm room intro CS.
- 0x76 # Second monkey room intro CS.
- 0x7C # Big Baba room intro CS.
- 0x7D # Midna text in room before boss room.
- 0x7E # Midna text after saving monkey after defeating Ook.
- 0x85 # Midna text after opening hanging chest.
- 0x83 # East outside room intro CS.
- 0xB6 # Forest Temple intro CS.
- Small_Keys == Keysy:
- 0x54 # Unlocked door to Second Monkey.
- 0x58 # Unlock windless bridge east door.
- 0x61 # Opened big baba monkey cage.
- 0x74 # Opened tile worm monkey cage.
- Big_Keys == Keysy:
- 0x48 # Unlocked Forest Temple Boss Door.
- 0xED # Got Forest Temple Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Forest Temple Compass.
- 0xEF # Got Forest Temple Dungeon Map.
Goron Mines:
Index: 0x11
Flags:
- Skip_Minor_Cutscenes == On:
- 0x43 # Cut rope of door in outside room CS.
- 0x44 # Pressed second button of the main magnet room of the second floor CS trigger.
- 0x45 # Pressed third button in entrance room CS.
- 0x46 # Pressed second button in entrance room CS.
- 0x47 # Cut rope of door in Toadpoli room CS.
- 0x4A # Pressed first button of the main magnet room on the second floor CS.
- 0x68 # Pressed outside magnet switch for first time CS.
- 0x72 # Main magnet room intro CS.
- 0x73 # Main magnet room intro CS trigger.
- 0x7A # Outside room intro CS.
- 0x80 # Room after Bow chest intro CS.
- 0x81 # Pulled Beamos in outside room CS.
- 0x84 # Open gate in Toadpoli room CS.
- 0x85 # Pressed second button in Toadpoli room CS.
- 0x88 # Magnet maze room intro CS.
- 0x8A # Goron Mines intro CS.
- 0x8B # Pressed first button in entrance room CS.
- 0x8C # Open gate in entrance room CS.
- 0xBC # Main magnet room second floor intro CS.
- 0xBD # Main magnet room second floor intro CS trigger.
- 0xBE # Hit crystal switch in room after bow chest CS.
- 0xBF # Room after Bow chest intro CS trigger.
- Small_Keys == Keysy:
- 0x60 # Unlock north door in toadpoli room.
- 0x62 # Unlock west locked door in main magnet room.
- 0x6C # Unlock east outside door.
- Big_Keys == Keysy:
- 0x48 # Unlocked Goron Mines Boss Door.
- 0xED # Got Goron Mines Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Goron Mines Compass.
- 0xEF # Got Goron Mines Dungeon Map.
- Active_Goron_Mines_Magnets == On:
- 0xBB # activated magnet from water before first elder
- 0x8F # activated ceiling maze magnet after first elder
- 0x5B # activated main magnet room 1st magnet
- 0x4A # watched main magnet room 1st magnet cs
- 0x61 # activated main magnet room 2nd magnet
- 0x44 # watched main magnet room 2nd magnet cs
- 0x9E # crystal switch room 1st Iron Boots switch pressed
- 0x83 # crystal switch room 1st Iron Boots switch cs shown
- 0x82 # crystal switch room 1st magnet active
- 0x9F # crystal switch room 2nd Iron Boots switch pressed
- 0x85 # crystal switch room 2nd Iron Boots switch cs shown
- 0x86 # crystal switch room 2nd magnet active
- 0x54 # activated outside room magnet
- 0x68 # watched outside room magnet cs
- 0x8d # activated east wing dodongo room magnet
# Note: the final magnet is not activated because there is a
# softlock when you exit the main magnet room through the top door
# as wolf while the gate beyond the door in the Dodongo room is not
# open. Alternatively if we do open this gate, it leads to much
# more complicated logic and some jank where you can walk through
# Dangoro while he sits there (and the gate covering the door
# animation is also a bit jank). Also you can die during the
# Dangoro fight to appear on the north side of his arena. There are
# too many nuances for it to be reasonable for glitchless logic,
# and also every small key door would require 3 keys.
Lakebed Temple:
Index: 0x12
Flags:
- Skip_Minor_Cutscenes == On:
- 0x46 # Midna Stalactite text in second room.
- 0x7E # Horizontal wheel is turning in east room CS.
- 0x7F # Horizontal wheel is turning in east room CS trigger.
- 0xA5 # Central room intro CS.
- 0xA6 # South bridge to main room intro CS.
- 0xA7 # Lakebed Temple intro CS.
- 0xAA # Rotate staircase main room CS.
- 0xB4 # East water supply Chu Worm CS.
- Small_Keys == Keysy:
- 0x6B # Unlock east door main room 2F.
- 0x7B # Unlocked door in second east room 2F.
- 0x7C # Unlocked door before Deku Toad.
- Big_Keys == Keysy:
- 0x8A # Unlocked Lakebed Temple Boss Door.
- 0xED # Got Lakebed Temple Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Lakebed Temple Compass.
- 0xEF # Got Lakebed Temple Dungeon Map.
Arbiters Grounds:
Index: 0x13
Flags:
- Skip_Minor_Cutscenes == On:
- 0x5A # Turn walls in third room Basement second floor CS.
- 0x73 # Arbiters Grounds intro CS.
- 0x94 # Risen tracks on pilar before boss CS.
- Small_Keys == Keysy:
- 0x78 # Unlocked door in second east room 2F.
- 0x84 # Unlocked door in elevator room 2B.
- 0x85 # Unlocked door in first room.
- 0x92 # Unlocked door in first east room 1F.
- 0x99 # Unlocked door in fourth east room.
- Big_Keys == Keysy:
- 0x47 # Unlocked Arbiter's Grounds Boss Door.
- 0xED # Got Arbiter's Grounds Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Arbiter's Grounds Compass.
- 0xEF # Got Arbiter's Grounds Dungeon Map.
Snowpeak Ruins:
Index: 0x14
Flags:
- Skip_Minor_Cutscenes == On:
- 0x83 # First Floor Northwest room intro CS.
- 0xA1 # Midna text after finding Bedroom Key.
- 0xA7 # Snowpeak Ruins intro CS.
- 0xAA # Freezard in cage CS.
- 0xAC # Courtyard intro CS.
- 0xAE # Pumpkin room intro CS.
- 0xB2 # Midna text after getting Cheese.
- 0xB4 # Midna text after getting Pumpkin.
- Small_Keys == Keysy:
- 0x4D # Unlock North lobby door.
- 0x4C # Unlock West lobby door.
- 0x6F # Unlock door in southeast room 2F.
- 0x73 # Unlock door in east outside hallway.
- 0x74 # Unlock west door in courtyard.
- 0x70 # Unlock door to lobby from Freezard room.
- Big_Keys == Keysy:
- 0x57 # Unlocked Snowpeak Ruins Boss Door.
- 0xED # Got Snowpeak Ruins Big Key.
- 0x56 # Watched CS of Yeta entering boss room.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Snowpeak Ruins Compass.
- 0xEF # Got Snowpeak Ruins Dungeon Map.
Temple of Time:
Index: 0x15
Flags:
- Skip_Minor_Cutscenes == On:
- 0x40 # Midna text telling you to use your senses on the missing statue.
- 0x41 # Midna text after using senses on missing statue.
- 0x4A # Temple of Time intro CS.
- 0x4B # Scales of Time room intro CS.
- 0x4C # CS after changing the balance on the scales for the first time.
- 0x4D # CS trigger after changing the balance on the scales for the first time.
- 0x90 # Pressed button in room 1 for the first time CS.
- 0x91 # Pressed the button on the seventh floor for the first time CS.
- 0x94 # Pressed the button on the fifth floor for the first time CS.
- 0x95 # Pressed buttons on third floor for the first time CS.
- 0x96 # Pressed the button on the second floor for the first time CS.
- 0x54 # statue getting possessed for the first time cs
- Small_Keys == Keysy:
- 0x44 # Unlock door in room 1.
- 0x42 # Unlock door in room 6 on 8F.
- 0x43 # Unlock door in 5F.
- Big_Keys == Keysy:
- 0x7F # Unlocked Temple of Time Boss Door.
- 0xED # Got Temple of Time Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Temple of Time Compass.
- 0xEF # Got Temple of Time Dungeon Map.
- Open_Door_of_Time == On:
- 0x59 # deactivate statue slot in room 1 (opens door and deactivates statue)
- 0x80 # open big door in room 1 cs part 2
- 0x81 # open big door in room 1 cs part 1
- 0xBC # big door in room 1 opens
- 0xBE # open big door in room 1 cs part 1 trigger
- 0xBD # open big door in room 1 cs part 2 trigger
- 0xBF # statue placed in slot in room 1
City in the Sky:
Index: 0x16
Flags:
- Skip_Minor_Cutscenes == On:
- 0x64 # North wing main room intro CS.
- 0x65 # East wing fan room second floor intro CS.
- 0x66 # Went beyond first gate outside shop intro CS.
- 0x67 # City in The Sky intro CS.
- 0x6E # East bridge extended CS.
- Small_Keys == Keysy:
- 0x59 # Unlock east bridge door.
- Big_Keys == Keysy:
- 0x58 # Unlocked City in The Sky Boss Door.
- 0xED # Got City in The Sky Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got City in The Sky Compass.
- 0xEF # Got City in The Sky Dungeon Map.
Palace of Twilight:
Index: 0x17
Flags:
- Skip_Minor_Cutscenes == On:
- 0x4D # Phantom Zant 1 CS.
- 0x66 # Midna text when west hand steals sol.
- 0x6F # Midna text about black fog in west room.
- 0x70 # Midna text after finding west sol.
- 0x72 # Midna text trigger when seeing a Twili for the first time.
- 0x78 # Midna text when seeing a Twili for the first time.
- 0x79 # Midna text after Light Sword cutscene.
- 0x95 # Midna text after re-entering west wing after sol was stolen.
- 0x9E # Midna text at dungeon entrance.
- 0xB3 # Watched east wing second room stairs CS.
- Small_Keys == Keysy:
- 0x57 # Unlock door in north room 3.
- 0x58 # Unlock door in east room 2.
- 0x59 # Unlock door in west room 2.
- 0x6C # Unlock door in north room 2.
- 0x7A # Unlock door in norht room 1.
- 0x7B # Unlock door in east room 1.
- 0x7C # Unlock door in west room 1.
- Big_Keys == Keysy:
- 0x56 # Unlocked Palace of Twilight Boss Door.
- 0xED # Got Palace of Twilight Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Palace of Twilight Compass.
- 0xEF # Got Palace of Twilight Dungeon Map.
Hyrule Castle:
Index: 0x18
Flags:
- 0x4B # Watched CS with Allies in HC.
- Skip_Minor_Cutscenes == On:
- 0x4F # Hyrule Castle Graveyard intro CS.
- 0x8C # East garden intro CS.
- 0x8D # East garden intro CS trigger.
- 0x77 # Midna text at the east end of the east garden.
- 0x82 # South garden intro CS.
- 0x99 # Double Darknut room intro CS
- 0xA4 # Midna text after Owl Statue chest in graveyard.
- 0xB7 # Lit southeast torch in second floor north room for the first time CS.
- 0xB8 # Lit northeast torch in second floor north room for the first time CS.
- Small_Keys == Keysy:
- 0x93 # Unlock door outside 3F.
- 0xB0 # Unlock treasure room door.
- 0xA3 # Unlock door in south garden.
- Big_Keys == Keysy and Hyrule_Castle_Big_Key_Requirements == None:
- 0xA1 # Unlocked Hyrule Castle Boss Door.
- 0xED # Got Hyrule Castle Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Hyrule Castle Compass.
- 0xEF # Got Hyrule Castle Dungeon Map.
- Lower_Hyrule_Castle_Chandelier == On:
- 0x6F # watched double Dinalfos cs 1
- 0x70 # watched double Dinalfos cs 2
- 0x85 # watched focus on lowered chandelier cs
- 0x9D # lower the main hall chandelier
- 0xAF # defeated double Dinalfos (opens gates both sides)
- Hyrule_Castle_Big_Key_Requirements == None:
- 0x94 # Open HC BK gate
@@ -1,66 +0,0 @@
Seed: TESTTESTTEST
Plandomizer: false
Generate Spoiler Log: true
Arbiters Does Not Require Bulblin Camp: Random
Back Slice as Sword: Random
Ball and Chain Webs: Random
Big Keys: Random
Bonks Do Damage: Random
City Does Not Require Filled Skybook: Random
Damage Multiplier: Random
Dungeon Rewards Can Be Anywhere: Random
Eldin Twilight Cleared: Random
Faron Twilight Cleared: Random
Faron Woods Logic: Random
Fast Iron Boots: Random
Gifts From NPCs: Random
Golden Bugs: Random
Goron Mines Entrance: Random
Hidden Skills: Random
Hyrule Barrier Requirements: Random
Increase Spinner Speed: Random
Increase Wallet Capacity: Random
Instant Message Text: Random
Item Scarcity: Random
Lakebed Does Not Require Water Bombs: Random
Lanayru Twilight Cleared: Random
Logic Rules: Random
Maps and Compasses: Random
No Small Keys on Bosses: Random
Open Door of Time: Random
Palace of Twilight Requirements: Random
Poe Souls: Random
Quick Transform: Random
Random Starting Item Count: 0
Randomize Starting Spawn: Random
Randomize Dungeon Entrances: Random
Randomize Boss Entrances: Random
Randomize Grotto Entrances: Random
Randomize Cave Entrances: Random
Randomize Interior Entrances: Random
Randomize Overworld Entrances: Random
Decouple Double Door Entrances: Random
Decouple Entrances: Random
Sacred Grove Does Not Require Skull Kid: Random
Shop Items: Random
Shops Display The Replaced Item: Random
Skip Major Cutscenes: Random
Skip Midna's Desparate Hour: Random
Skip Minor Cutscenes: Random
Skip Prologue: Random
Sky Characters: Random
Small Keys: Random
Snowpeak Does Not Require Reekfish Scent: Random
Starting Form: Random
Starting Hearts: 3
Starting Time of Day: Random
Temple of Time Sword Requirement: Random
Logic Transform Anywhere: Random
Trap Item Frequency: Random
Unlock Map Regions: Random
Unrequired Dungeons Are Barren: Random
trappable_items: major_items
Starting Inventory:
{}
Excluded Locations:
[]
@@ -1,4 +0,0 @@
Seed: TESTTESTTEST
Small Keys: Any Dungeon
Big Keys: Any Dungeon
Maps and Compasses: Any Dungeon
@@ -1,4 +0,0 @@
Seed: TESTTESTTEST
Small Keys: Anywhere
Big Keys: Anywhere
Maps and Compasses: Anywhere
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Dungeon Rewards Can Be Anywhere: On
@@ -1,5 +0,0 @@
Seed: TESTTESTTEST
Bonks Do Damage: On
Damage Multiplier: OHKO
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Eldin Twilight Cleared: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Lanayru Twilight Cleared: On
@@ -1 +0,0 @@
Seed: TESTTESTTEST
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Faron Twilight Cleared: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Freestanding Rupees: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Gifts From NPCs: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Golden Bugs: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Hidden Rupees: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Hidden Skills: On
@@ -1,3 +0,0 @@
Seed: TESTTESTTEST
Hyrule Barrier Requirements: Dungeons
Hyrule Barrier Dungeons: 8
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Hyrule Barrier Requirements: Fused Shadows
@@ -1,3 +0,0 @@
seed: TESTTESTTEST
Hyrule Barrier Requirements: Hearts
Hyrule Barrier Hearts: 13
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Hyrule Barrier Requirements: Mirror Shards
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Hyrule Barrier Requirements: Open
@@ -1,3 +0,0 @@
seed: TESTTESTTEST
Hyrule Barrier Requirements: Poe Souls
Hyrule Barrier Poe Souls: 30
@@ -1,4 +0,0 @@
Seed: TESTTESTTEST
Small Keys: Keysy
Big Keys: Keysy
Maps and Compasses: Start With
@@ -1,16 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
Skip Prologue: On
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Skip Midna's Desparate Hour: On
Randomize Starting Spawn: On
Randomize Dungeon Entrances: On
Randomize Boss Entrances: On
Randomize Grotto Entrances: On
Randomize Cave Entrances: On
Randomize Interior Entrances: On
Randomize Overworld Entrances: On
Decouple Double Door Entrances: On
Decouple Entrances: On
@@ -1,15 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
Skip Prologue: On
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Skip Midna's Desparate Hour: On
Randomize Starting Spawn: On
Randomize Dungeon Entrances: On
Randomize Grotto Entrances: On
Randomize Cave Entrances: On
Randomize Interior Entrances: On
Randomize Overworld Entrances: On
Mixed Entrance Pools:
[["Dungeon", "Grotto"], ["Overworld", "Cave", "Interior"]]
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
@@ -1,7 +0,0 @@
Seed: TESTTESTTEST
Skip Prologue: On
Faron Woods Logic: Open
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Unlock Map Regions: On
@@ -1,4 +0,0 @@
Seed: TESTTESTTEST
Small Keys: Overworld
Big Keys: Overworld
Maps and Compasses: Overworld
@@ -1,4 +0,0 @@
Seed: TESTTESTTEST
Small Keys: Own Dungeon
Big Keys: Own Dungeon
Maps and Compasses: Own Dungeon
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Palace of Twilight Requirements: Fused Shadows
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Palace of Twilight Requirements: Mirror Shards
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Palace of Twilight Requirements: Open
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Poe Souls: All
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Poe Souls: Dungeon
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Poe Souls: Overworld
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Randomize Boss Entrances: On
@@ -1,8 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
Skip Prologue: On
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Skip Midna's Desparate Hour: On
Randomize Cave Entrances: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Randomize Dungeon Entrances: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Randomize Grotto Entrances: On
@@ -1,8 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
Skip Prologue: On
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Skip Midna's Desparate Hour: On
Randomize Interior Entrances: On
@@ -1,8 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
Skip Prologue: On
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Skip Midna's Desparate Hour: On
Randomize Overworld Entrances: On
@@ -1,8 +0,0 @@
Seed: TESTTESTTEST
Faron Woods Logic: Open
Skip Prologue: On
Faron Twilight Cleared: On
Eldin Twilight Cleared: On
Lanayru Twilight Cleared: On
Skip Midna's Desparate Hour: On
Randomize Starting Spawn: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Item Scarcity: Minimal
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Item Scarcity: Plentiful
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Shop Items: On
@@ -1,8 +0,0 @@
Seed: TESTTESTTEST
Lakebed Does Not Require Water Bombs: On
Arbiters Does Not Require Bulblin Camp: On
Snowpeak Does Not Require Reekfish Scent: On
Sacred Grove Does Not Require Skull Kid: On
City Does Not Require Filled Skybook: On
Goron Mines Entrance: On
Temple of Time Sword Requirement: None
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Skip Midna's Desparate Hour: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Skip Prologue: On
@@ -1,2 +0,0 @@
Seed: TESTTESTTEST
Sky Characters: On
@@ -1,3 +0,0 @@
Seed: TESTTESTTEST
Unrequired Dungeons Are Barren: On
Hyrule Barrier Requirements: Mirror Shards
@@ -1,4 +0,0 @@
Seed: TESTTESTTEST
Starting Form: Wolf
Skip Prologue: On
Faron Woods Logic: Open
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,466 +0,0 @@
- Name: Foolish Get Item Text
Group: 0
Message Id: 120
#
#- Name: Ordon Spring Portal Get Item Text
# Group: 0
# Message Id: 121
#
#- Name: South Faron Portal Get Item Text
# Group: 0
# Message Id: 122
- Name: Shadow Crystal Get Item Text
Group: 0
Message Id: 151
- Name: Restored Dominion Rod Text
Group: 0
Message Id: 177
- Name: Forest Temple Small Key Get Item Text
Group: 0
Message Id: 234
- Name: Goron Mines Small Key Get Item Text
Group: 0
Message Id: 235
- Name: Lakebed Temple Small Key Get Item Text
Group: 0
Message Id: 236
- Name: Arbiters Grounds Small Key Get Item Text
Group: 0
Message Id: 237
- Name: Snowpeak Ruins Small Key Get Item Text
Group: 0
Message Id: 238
- Name: Temple of Time Small Key Get Item Text
Group: 0
Message Id: 239
- Name: City in the Sky Small Key Get Item Text
Group: 0
Message Id: 240
- Name: Palace of Twilight Small Key Get Item Text
Group: 0
Message Id: 241
- Name: Hyrule Castle Small Key Get Item Text
Group: 0
Message Id: 242
- Name: Bulblin Camp Small Key Get Item Text
Group: 0
Message Id: 243
- Name: Forest Temple Big Key Get Item Text
Group: 0
Message Id: 247
- Name: Lakebed Temple Big Key Get Item Text
Group: 0
Message Id: 248
- Name: Arbiters Grounds Big Key Get Item Text
Group: 0
Message Id: 249
- Name: Temple of Time Big Key Get Item Text
Group: 0
Message Id: 250
- Name: City in the Sky Big Key Get Item Text
Group: 0
Message Id: 251
- Name: Palace of Twilight Big Key Get Item Text
Group: 0
Message Id: 252
- Name: Hyrule Castle Big Key Get Item Text
Group: 0
Message Id: 253
- Name: Forest Temple Compass Get Item Text
Group: 0
Message Id: 254
- Name: Goron Mines Compass Get Item Text
Group: 0
Message Id: 255
- Name: Lakebed Temple Compass Get Item Text
Group: 0
Message Id: 256
- Name: Mirror Shard 2 Get item Text
Group: 0
Message Id: 266
- Name: Mirror Shard 3 Get item Text
Group: 0
Message Id: 267
- Name: Mirror Shard 4 Get item Text
Group: 0
Message Id: 268
- Name: Arbiters Grounds Compass Get Item Text
Group: 0
Message Id: 269
- Name: Snowpeak Ruins Compass Get Item Text
Group: 0
Message Id: 270
- Name: Temple of Time Compass Get Item Text
Group: 0
Message Id: 271
- Name: City in the Sky Compass Get Item Text
Group: 0
Message Id: 272
- Name: Palace of Twilight Compass Get Item Text
Group: 0
Message Id: 273
- Name: Hyrule Castle Compass Get Item Text
Group: 0
Message Id: 274
- Name: Forest Temple Dungeon Map Get Item Text
Group: 0
Message Id: 283
- Name: Goron Mines Dungeon Map Get Item Text
Group: 0
Message Id: 284
- Name: Lakebed Temple Dungeon Map Get Item Text
Group: 0
Message Id: 285
- Name: Arbiters Grounds Dungeon Map Get Item Text
Group: 0
Message Id: 286
- Name: Snowpeak Ruins Dungeon Map Get Item Text
Group: 0
Message Id: 287
- Name: Temple of Time Dungeon Map Get Item Text
Group: 0
Message Id: 288
- Name: City in the Sky Dungeon Map Get Item Text
Group: 0
Message Id: 289
- Name: Palace of Twilight Dungeon Map Get Item Text
Group: 0
Message Id: 290
- Name: Hyrule Castle Dungeon Map Get Item Text
Group: 0
Message Id: 291
- Name: Fused Shadow 1 Get Item Text
Group: 0
Message Id: 317
- Name: Fused Shadow 2 Get Item Text
Group: 0
Message Id: 318
- Name: Fused Shadow 3 Get Item Text
Group: 0
Message Id: 319
- Name: Mirror Shard 1 Get Item Text
Group: 0
Message Id: 320
- Name: Poe Soul Get Item Text
Group: 0
Message Id: 325
- Name: Ending Blow Get Item Text
Group: 0
Message Id: 326
- Name: Shield Attack Get Item Text
Group: 0
Message Id: 327
- Name: Back Slice Get Item Text
Group: 0
Message Id: 328
- Name: Helm Splitter Get Item Text
Group: 0
Message Id: 329
- Name: Mortal Draw Get Item Text
Group: 0
Message Id: 330
- Name: Jump Strike Get Item Text
Group: 0
Message Id: 331
- Name: Great Spin Get Item Text
Group: 0
Message Id: 332
- Name: Partially Filled Sky Book Get Item Text
Group: 0
Message Id: 335
- Name: Midna Call As Human Two Choice
Group: 0
Message Id: 2004
- Name: Midna Call As Wolf Two Choice
Group: 0
Message Id: 2005
- Name: Midna Call As Wolf No Shadow Crystal Two Choice
Group: 0
Message Id: 2039
- Name: Midna Call As Human Three Choice
Group: 0
Message Id: 2040
- Name: Midna Call As Wolf Three Choice
Group: 0
Message Id: 2041
- Name: Slingshot Shop Text
Group: 1
Message Id: 7009
- Name: Slingshot Shop Too Expensive Text
Group: 1
Message Id: 7014
- Name: Slingshot Shop Purchase Confirmation Text
Group: 1
Message Id: 7015
- Name: Slingshot Shop After Purchase Text
Group: 1
Message Id: 7016
- Name: Links House Sign
Group: 1
Message Id: 9005
- Name: Barnes Special Offer Text
Group: 2
Message Id: 5155
- Name: Kakariko Malo Mart Wooden Shield Purchase Confirmation Text
Group: 2
Message Id: 5809
- Name: Kakariko Malo Mart Wooden Shield Too Expensive Text
Group: 2
Message Id: 5810
- Name: Kakariko Malo Mart Hylian Shield Purchase Confirmation Text
Group: 2
Message Id: 5813
- Name: Kakariko Malo Mart Hylian Shield Too Expensive Text
Group: 2
Message Id: 5814
- Name: Kakariko Malo Mart Hylian Shield After Purchase Text
Group: 2
Message Id: 5818
- Name: Kakariko Malo Mart Hawkeye Purchase Confirmation Text
Group: 2
Message Id: 5820
- Name: Kakariko Malo Mart Hawkeye Too Expensive Text
Group: 2
Message Id: 5821
- Name: Kakariko Malo Mart Hawkeye After Purchase Text
Group: 2
Message Id: 5822
- Name: Kakariko Malo Mart Red Potion Too Expensive Text
Group: 2
Message Id: 5824
- Name: Kakariko Malo Mart Red Potion Purchase Confirmation Text
Group: 2
Message Id: 5825
- Name: Kakariko Malo Mart Red Potion Text
Group: 2
Message Id: 5990
- Name: Kakariko Malo Mart Hawkeye Coming Soon Text
Group: 2
Message Id: 5991
- Name: Kakariko Malo Mart Hawkeye Text
Group: 2
Message Id: 5992
- Name: Kakariko Malo Mart Sold Out Text
Group: 2
Message Id: 5996
- Name: Kakariko Malo Mart Wooden Shield Text
Group: 2
Message Id: 5998
- Name: Kakariko Malo Mart Hylian Shield Text
Group: 2
Message Id: 5999
- Name: Chudleys Shop Magic Armor Text
Group: 4
Message Id: 5413
- Name: Castle Town Malo Mart Magic Armor After Purchase Text
Group: 4
Message Id: 5433
- Name: Castle Town Malo Mart Magic Armor Text
Group: 4
Message Id: 5440
- Name: Castle Town Malo Mart Magic Armor Sold Out Text
Group: 4
Message Id: 5451
- Name: Charlo Donation Ask Text
Group: 4
Message Id: 6402
- Name: Charlo Donation Choice Text
Group: 4
Message Id: 6403
- Name: Coro Bottle Offer 1 Text
Group: 6
Message Id: 5216
- Name: Coro Bottle Offer 2 Text
Group: 6
Message Id: 5223
- Name: Coro Bottle Offer 3 Text
Group: 6
Message Id: 5237
- Name: Coro Bottle Offer 4 Text
Group: 6
Message Id: 5253
- Name: Fishing Hole Sign Text
Group: 7
Message Id: 9502
# Completely Custom Text IDs
- Name: Custom Midna Call Need Something Text
Attributes: 0x07F60000150D0000FF00000000000400
- Name: Custom Midna Call 3 Choice Text
Attributes: 0x07F8000015000000FF00000000000400
- Name: Custom Midna Call 2 Choice Text
Attributes: 0x07F8000015000000FF00000000000400
- Name: Custom Midna Call Hints Text
Attributes: 0x07F60000150D0000FF00000000000400
- Name: Return to Spawn Dungeon Intro Text
Attributes: 0x07F60000150D0000FF00000000000400
- Name: Return to Spawn Dungeon Choice Text
Attributes: 0x07F60000150D0000FF00000000000400
- Name: Return to Spawn Dungeon No Choice Text
Attributes: 0x07F60000150D0000FF00000000000400
- Name: Ordon Hint Sign Text
- Name: South Faron Woods Hint Sign Text
- Name: Sacred Grove Hint Sign Text
- Name: Faron Field Hint Sign Text
- Name: Kakariko Gorge Hint Sign Text
- Name: Kakariko Village Hint Sign Text
- Name: Kakariko Graveyard Hint Sign Text
- Name: Eldin Field Hint Sign Text
- Name: North Eldin Field Hint Sign Text
- Name: Hidden Village Hint Sign Text
- Name: Lanayru Field Hint Sign Text
- Name: Beside Castle Town Hint Sign Text
- Name: Castle Town Center Hint Sign Text
- Name: Outside South Castle Town Hint Sign Text
- Name: Lake Hylia Bridge Hint Sign Text
- Name: Lake Hylia Hint Sign Text
- Name: Lanayru Spring Hint Sign Text
- Name: Lake Lantern Cave Hint Sign Text
- Name: Fishing Hole Hint Sign Text
- Name: Zoras Domain Hint Sign Text
- Name: Snowpeak Hint Sign Text
- Name: Gerudo Desert Hint Sign Text
- Name: Bulblin Camp Hint Sign Text
- Name: Forest Temple Hint Sign Text
- Name: Goron Mines Hint Sign Text
- Name: Lakebed Temple Hint Sign Text
- Name: Arbiters Grounds Hint Sign Text
- Name: Snowpeak Ruins Hint Sign Text
- Name: Temple of Time First Hint Sign Text
- Name: Temple of Time Second Hint Sign Text
- Name: City in the Sky Hint Sign Text
- Name: Palace of Twilight Hint Sign Text
- Name: Hyrule Castle Hint Sign Text
- Name: Cave of Ordeals Hint Sign Text
@@ -1,163 +0,0 @@
# These logic files contain the listings for each predefined logical area. Areas can contain
# events, locations, and exits.
#
# EVENTS are logic variables which become true when their requirement evaluates
# to true and are surrounded with single quotes when used in other logic statements
# (unlike macros which are defined in macros.yaml). It's possible to add new events
# to the logic simply by defining them in an area and then using them in whichever
# logic statements you wish. No modifications to the code are necessary. Every logical
# area that gets defined will also come with an automatically generated 'Can_Access_<Area_Name>'
# event. This event is added to the area and has no requirements. If you start a logic statement
# with an event, then the entire statement must be surrounded in double quotes due to how yaml
# is parsed.
#
# LOCATIONS are places which can contain randomized items. Adding new locations
# here will require adding them in locations.yaml as well.
#
# EXITS define how the areas of the world graph connect to each other. Each exit
# is a one way connection, so when making new areas remember to define the exit
# connections both ways if applicable. No modifications to the code are necessary
# for adding new exits.
#
# Each dungeon in the world graph is at least defined on a room by room basis
# (although in many cases rooms are split up into multiple parts). This is to
# help simplify glitched logic (eventually).
#
# NOTE: When writing direct logic requirements for exits, do not write a logic
# statement that requires both human link *and* wolf link to evaluate to true.
# The search and flatten algorithms need to keep track of human-wolf/day-night
# combinations separately and test them one at a time to know which forms
# are allowed through any single exit. This doesn't work if both forms are
# directly required. If you need to write a logic statement for an exit that
# absolutely requires both human and wolf link, then hide away one (or both)
# of the forms behind an event in the area.
#
# See the "Lost Woods Lower Battle Arena -> Lost Woods Baba Serpent Grotto" exit
# for an example of the above.
# The following logical operators/functions are available for logic statements:
# - and
# - or
# - <item>
# - Human_Link
# - Wolf_Link
# - Day
# - Night
# - count(<item>, <number>)
# - setting_name [<=, ==, >=, !=] option
# - golden_bugs(count)
- Name: Root
Exits:
Root Human Day: (Human_Link and (Starting_Form == Human or Shadow_Crystal)) and (Starting_Time_of_Day == Morning or Starting_Time_of_Day == Noon)
Root Human Night: (Human_Link and (Starting_Form == Human or Shadow_Crystal)) and (Starting_Time_of_Day == Evening or Starting_Time_of_Day == Night)
Root Wolf Day: (Wolf_Link and (Starting_Form == Wolf or Shadow_Crystal)) and (Starting_Time_of_Day == Morning or Starting_Time_of_Day == Noon)
Root Wolf Night: (Wolf_Link and (Starting_Form == Wolf or Shadow_Crystal)) and (Starting_Time_of_Day == Evening or Starting_Time_of_Day == Night)
- Name: Root Human Day
Can Transform: Never
Exits:
Root Exits: Nothing
- Name: Root Human Night
Can Transform: Never
Exits:
Root Exits: Nothing
- Name: Root Wolf Day
Can Transform: Never
Exits:
Root Exits: Nothing
- Name: Root Wolf Night
Can Transform: Never
Exits:
Root Exits: Nothing
- Name: Root Exits
Can Transform: Never
Exits:
Links Spawn: Nothing
Warp Portals: Can_Use_Warp_Portals
- Name: Links Spawn
Exits:
Outside Links House: Nothing
- Name: Warp Portals
Exits:
Ordon Spring Warp Portal: Ordon_Spring_Portal and (Unlock_Map_Regions == On or 'Ordona_Province_Map_Sector')
South Faron Woods Warp Portal: South_Faron_Portal and (Unlock_Map_Regions == On or 'Faron_Province_Map_Sector')
North Faron Woods Warp Portal: North_Faron_Portal and (Unlock_Map_Regions == On or 'Faron_Province_Map_Sector')
Sacred Grove Warp Portal: Sacred_Grove_Portal and (Unlock_Map_Regions == On or 'Faron_Province_Map_Sector')
Kakariko Gorge Warp Portal: Kakariko_Gorge_Portal and (Unlock_Map_Regions == On or 'Eldin_Province_Map_Sector')
Kakariko Village Warp Portal: Kakariko_Village_Portal and (Unlock_Map_Regions == On or 'Eldin_Province_Map_Sector')
Death Mountain Warp Portal: Death_Mountain_Portal and (Unlock_Map_Regions == On or 'Eldin_Province_Map_Sector')
Bridge of Eldin Warp Portal: Bridge_of_Eldin_Portal and (Unlock_Map_Regions == On or 'Eldin_Province_Map_Sector')
Castle Town Warp Portal: Castle_Town_Portal and (Unlock_Map_Regions == On or 'Lanayru_Province_Map_Sector')
Lake Hylia Warp Portal: Lake_Hylia_Portal and (Unlock_Map_Regions == On or 'Lanayru_Province_Map_Sector')
Upper Zoras River Warp Portal: Upper_Zoras_River_Portal and (Unlock_Map_Regions == On or 'Lanayru_Province_Map_Sector')
Zoras Domain Warp Portal: Zoras_Domain_Portal and (Unlock_Map_Regions == On or 'Lanayru_Province_Map_Sector')
Snowpeak Warp Portal: Snowpeak_Portal and (Unlock_Map_Regions == On or 'Snowpeak_Province_Map_Sector')
Gerudo Desert Warp Portal: Gerudo_Desert_Portal and 'Desert_Province_Map_Sector'
Mirror Chamber Warp Portal: Mirror_Chamber_Portal and 'Desert_Province_Map_Sector'
- Name: Ordon Spring Warp Portal
Exits:
Ordon Spring: Nothing
- Name: South Faron Woods Warp Portal
Exits:
South Faron Woods: Nothing
- Name: North Faron Woods Warp Portal
Exits:
North Faron Woods: Nothing
- Name: Sacred Grove Warp Portal
Exits:
Sacred Grove Lower: Nothing
- Name: Kakariko Gorge Warp Portal
Exits:
Kakariko Gorge: Nothing
- Name: Kakariko Village Warp Portal
Exits:
Lower Kakariko Village: Nothing
- Name: Death Mountain Warp Portal
Exits:
Death Mountain Volcano: Nothing
- Name: Bridge of Eldin Warp Portal
Exits:
Eldin Field North of Bridge: Nothing
- Name: Castle Town Warp Portal
Exits:
Outside Castle Town West: Nothing
- Name: Lake Hylia Warp Portal
Exits:
Lake Hylia: Nothing
- Name: Upper Zoras River Warp Portal
Exits:
Upper Zoras River: Nothing
- Name: Zoras Domain Warp Portal
Exits:
Zoras Throne Room: Nothing
- Name: Snowpeak Warp Portal
Exits:
Snowpeak Summit Upper: Nothing
- Name: Gerudo Desert Warp Portal
Exits:
Gerudo Desert Cave of Ordeals Plateau: Nothing
- Name: Mirror Chamber Warp Portal
Exits:
Mirror Chamber Upper: Nothing
@@ -1,347 +0,0 @@
# ARBITERS GROUNDS ENTRANCE ROOM
- Name: Arbiters Grounds Entrance
Region: Arbiters Grounds
Dungeon Start Area: True
Events:
Can Pull Arbiters Entrance Chain: Clawshot or Can_Cross_Quicksand
Exits:
Arbiters Grounds Entrance Past Gate: "'Can_Pull_Arbiters_Entrance_Chain'"
Outside Arbiters Grounds: Nothing
- Name: Arbiters Grounds Entrance Past Gate
Region: Arbiters Grounds
Events:
Can Refill Lantern Oil: Nothing
Locations:
Arbiters Grounds Entrance Chest: Can_Break_Wooden_Barrier
Exits:
Arbiters Grounds Dark Lantern Room: Arbiters_Grounds_Small_Key or Small_Keys == Keysy
Arbiters Grounds Entrance: "'Can_Pull_Arbiters_Entrance_Chain'"
# ARBITERS GROUNDS DARK LANTERN ROOM
- Name: Arbiters Grounds Dark Lantern Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Torch Room: Lantern
Arbiters Grounds Entrance Past Gate: Nothing
# ARBITERS GROUNDS TORCH ROOM
- Name: Arbiters Grounds Torch Room
Region: Arbiters Grounds
Events:
Poe Scent: Can_Use_Senses and Can_Sniff
Can Pull Torch Room Chain: "'Poe_Scent'"
Arbiters Grounds Poe 1: Can_Use_Senses
Locations:
Arbiters Grounds Torch Room East Chest: Nothing
Arbiters Grounds Torch Room West Chest: Nothing
Arbiters Grounds Torch Room Poe: Can_Use_Senses
Arbiters Grounds Hint Sign: Nothing
Exits:
Arbiters Grounds East Turnable Room Middle: Nothing
Arbiters Grounds Torch Room Near East Turnable Room Lower: "'Can_Pull_Torch_Room_Chain'"
Arbiters Grounds West Chandelier Room Near Lower Torch Room: Nothing
Arbiters Grounds Socket Room Near Torch Room: "'Arbiters_Grounds_Poe_1' and 'Arbiters_Grounds_Poe_2' and 'Arbiters_Grounds_Poe_3' and 'Arbiters_Grounds_Poe_4'"
- Name: Arbiters Grounds Torch Room Near East Turnable Room Lower
Region: Arbiters Grounds
Exits:
Arbiters Grounds East Turnable Room Lower: Nothing
Arbiters Grounds Torch Room: "'Can_Pull_Torch_Room_Chain'"
- Name: Arbiters Grounds Torch Room Chandelier
Region: Arbiters Grounds
Exits:
Arbiters Grounds Torch Room: Nothing
Arbiters Grounds Ghoul Rat Room: Nothing
Arbiters Grounds West Chandelier Room: Nothing
# ARBITERS GROUNDS EAST TURNABLE ROOM
- Name: Arbiters Grounds East Turnable Room Middle
Region: Arbiters Grounds
Exits:
Arbiters Grounds East Chandelier Room Near Turnable Room: count(Arbiters_Grounds_Small_Key, 2) or Small_Keys == Keysy
Arbiters Grounds Torch Room: Nothing
- Name: Arbiters Grounds East Turnable Room Lower
Region: Arbiters Grounds
Locations:
Arbiters Grounds East Lower Turnable Redead Chest: Nothing
Exits:
Arbiters Grounds Poe 2 Room: Can_Defeat_Redead_Knight and Clawshot
Arbiters Grounds Torch Room Near East Turnable Room Lower: Nothing
# ARBITERS GROUNDS POE 2 ROOM
- Name: Arbiters Grounds Poe 2 Room
Region: Arbiters Grounds
Events:
Arbiters Grounds Poe 2: Can_Use_Senses
Locations:
Arbiters Grounds East Turning Room Poe: Can_Use_Senses
# ARBITERS GROUNDS EAST CHANDELIER ROOM
- Name: Arbiters Grounds East Chandelier Room Near Turnable Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds East Chandelier Room Past Chandelier: Can_Pull_Blocks
Arbiters Grounds East Turnable Room Middle: Nothing
- Name: Arbiters Grounds East Chandelier Room Past Chandelier
Region: Arbiters Grounds
Locations:
Arbiters Grounds East Upper Turnable Chest: Nothing
Arbiters Grounds East Upper Turnable Redead Chest: Can_Break_Wooden_Barrier
Exits:
Arbiters Grounds Poe 3 Room Near East Chandelier Room: count(Arbiters_Grounds_Small_Key, 3) or Small_Keys == Keysy
Arbiters Grounds East Chandelier Room Near Turnable Room: Nothing
# ARBITERS GROUNDS POE 3 ROOM
- Name: Arbiters Grounds Poe 3 Room Near East Chandelier Room
Region: Arbiters Grounds
Events:
Arbiters Grounds Poe 3: Can_Use_Senses and Can_Defeat_Stalchild and Can_Defeat_Redead_Knight and 'Poe_Scent'
Locations:
Arbiters Grounds Hidden Wall Poe: Can_Use_Senses and Can_Defeat_Stalchild and Can_Defeat_Redead_Knight and 'Poe_Scent'
Exits:
Arbiters Grounds Poe 3 Room Near Ghoul Rat Room: Can_Defeat_Stalchild and Can_Defeat_Redead_Knight
Arbiters Grounds East Chandelier Room Past Chandelier: Impossible # Wall
- Name: Arbiters Grounds Poe 3 Room Near Ghoul Rat Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Ghoul Rat Room: Nothing
Arbiters Grounds Poe 3 Room Near East Chandelier Room: Can_Defeat_Stalchild and Can_Defeat_Redead_Knight
# ARBITERS GROUNDS GOUL RAT ROOM
- Name: Arbiters Grounds Ghoul Rat Room
Region: Arbiters Grounds
Locations:
Arbiters Grounds Ghoul Rat Room Chest: Nothing
Exits:
Arbiters Grounds Torch Room Chandelier: count(Arbiters_Grounds_Small_Key, 4) or Small_Keys == Keysy
Arbiters Grounds Poe 3 Room Near Ghoul Rat Room: Nothing
# ARBITERS GROUNDS WEST CHANDELIER ROOM
- Name: Arbiters Grounds West Chandelier Room Near Lower Torch Room
Region: Arbiters Grounds
Locations:
Arbiters Grounds West Small Chest Behind Block: Nothing
Exits:
Arbiters Grounds West Chandelier Room: "'Can_Push_West_Chandelier_Room_Block'"
- Name: Arbiters Grounds West Chandelier Room
Region: Arbiters Grounds
Events:
Can Push West Chandelier Room Block: Nothing
Locations:
Arbiters Grounds West Chandelier Chest: Nothing
Exits:
Arbiters Grounds West Chandelier Room Near Lower Torch Room: Nothing
Arbiters Grounds Single Stalfos Room Near West Chandelier Room: Nothing
- Name: Arbiters Grounds West Chandelier Room High Platform
Region: Arbiters Grounds
Exits:
Arbiters Grounds Poe 4 Room: Nothing
Arbiters Grounds West Chandelier Room: Nothing
# ARBITERS GROUNDS SINGLE STALFOS ROOM
- Name: Arbiters Grounds Single Stalfos Room Near West Chandelier Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Single Stalfos Room Near Lantern Puzzle Room: Can_Break_Wooden_Barrier
Arbiters Grounds West Chandelier Room: Nothing
- Name: Arbiters Grounds Single Stalfos Room Near Lantern Puzzle Room
Region: Arbiters Grounds
Locations:
Arbiters Grounds West Stalfos West Chest: Nothing
Arbiters Grounds West Stalfos Northeast Chest: Can_Break_Wooden_Barrier
Exits:
Arbiters Grounds Lantern Puzzle Room Near Single Stalfos Room: Can_Defeat_Stalfos
Arbiters Grounds Single Stalfos Room Near West Chandelier Room: Can_Break_Wooden_Barrier
# ARBITERS GROUNDS LANTERN PUZZLE ROOM
- Name: Arbiters Grounds Lantern Puzzle Room Near Single Stalfos Room
Region: Arbiters Grounds
Events:
Can Light Arbiters Grounds Lantern Puzzle: Lantern
Exits:
Arbiters Grounds Lantern Puzzle Room Near Poe 4 Room: "'Can_Light_Arbiters_Grounds_Lantern_Puzzle'"
Arbiters Grounds Single Stalfos Room Near Lantern Puzzle Room: Nothing
- Name: Arbiters Grounds Lantern Puzzle Room Near Poe 4 Room
Exits:
Arbiters Grounds Poe 4 Room: Nothing
Arbiters Grounds Lantern Puzzle Room Near Single Stalfos Room: "'Can_Light_Arbiters_Grounds_Lantern_Puzzle'"
# Arbiters GROUNDS POE 4 ROOM
- Name: Arbiters Grounds Poe 4 Room
Region: Arbiters Grounds
Events:
Arbiters Grounds Poe 4: Can_Use_Senses
Locations:
Arbiters Grounds West Poe: Can_Use_Senses
Exits:
Arbiters Grounds West Chandelier Room High Platform: Nothing
Arbiters Grounds Lantern Puzzle Room Near Poe 4 Room: Nothing
# ARBITERS GROUNDS SOCKET ROOM
- Name: Arbiters Grounds Socket Room Near Torch Room
Region: Arbiters Grounds
Events:
Can Spin Turning Wall Socket: Spinner
Exits:
Arbiters Grounds Socket Room Near North Turning Room: Clawshot # If the wall is already turned
Arbiters Grounds Socket Room Bottom Tower: "'Can_Spin_Turning_Wall_Socket'"
Arbiters Grounds Socket Room Near Torch Room: Nothing
- Name: Arbiters Grounds Socket Room Near North Turning Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds North Turning Room Near Socket Room: Nothing
# Can't assume access the other way because of the potential wall
- Name: Arbiters Grounds Socket Room Near Spinner Room
Region: Arbiters Grounds
Locations:
Arbiters Grounds Big Key Chest: Nothing
Exits:
Arbiters Grounds Socket Room Near Torch Room: Spinner
Arbiters Grounds Spinner Room Near Socket Room: Nothing
- Name: Arbiters Grounds Socket Room Bottom Tower
Region: Arbiters Grounds
Exits:
Arbiters Grounds Socket Room Near Boss Door: Spinner
Arbiters Grounds Socket Room Near Torch Room: "'Can_Spin_Turning_Wall_Socket'"
- Name: Arbiters Grounds Socket Room Near Boss Door
Region: Arbiters Grounds
Exits:
Arbiters Grounds Boss Room: Arbiters_Grounds_Big_Key or Big_Keys == Keysy
Arbiters Grounds Socket Room Bottom Tower: Nothing
# ARBITERS GROUNDS NORTH TURNING ROOM
- Name: Arbiters Grounds North Turning Room Near Socket Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds North Turning Room Central Column: Nothing
Arbiters Grounds Socket Room Near North Turning Room: Nothing
- Name: Arbiters Grounds North Turning Room Central Column
Region: Arbiters Grounds
Locations:
Arbiters Grounds North Turning Room Chest: Nothing
Exits:
Arbiters Grounds North Turning Room Near Basement Spike Room: Nothing
Arbiters Grounds North Turning Room Near Socket Room: Clawshot
- Name: Arbiters Grounds North Turning Room Near Basement Spike Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Basement Spike Room Near North Turning Room: count(Arbiters_Grounds_Small_Key, 5) or Small_Keys == Keysy
# ARBITERS GROUNDS BASEMENT SPIKE ROOM
- Name: Arbiters Grounds Basement Spike Room Near North Turning Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Basement Spike Room Near Spinner Traps: Can_Defeat_Ghoul_Rat
Arbiters Grounds North Turning Room Near Basement Spike Room: count(Arbiters_Grounds_Small_Key, 5) or Small_Keys == Keysy
- Name: Arbiters Grounds Basement Spike Room Near Spinner Traps
Region: Arbiters Grounds
Exits:
Arbiters Grounds Triple Stalfos Room Center: Nothing
# ARBITERS GROUNDS TRIPLE STALFOS ROOM
- Name: Arbiters Grounds Triple Stalfos Room Center
Region: Arbiters Grounds
Exits:
Arbiters Grounds Triple Stalfos Room Near Miniboss Room: Can_Defeat_Stalfos
Arbiters Grounds Triple Stalfos Room Near Spinner Room: Spinner
- Name: Arbiters Grounds Triple Stalfos Room Near Miniboss Room
Region: Arbiters Grounds
Exits:
Deathsword Miniboss Room: Nothing
Arbiters Grounds Triple Stalfos Room Near Spinner Room: Spinner
Arbiters Grounds Triple Stalfos Room Center: Nothing
- Name: Arbiters Grounds Triple Stalfos Room Near Spinner Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Spinner Room Bottom: Nothing
Arbiters Grounds Triple Stalfos Room Center: Spinner
Arbiters Grounds Triple Stalfos Room Near Miniboss Room: Spinner
# DEATHSWORD MINIBOSS ROOM
- Name: Deathsword Miniboss Room
Locations:
Arbiters Grounds Death Sword Chest: Can_Defeat_Deathsword
Exits:
Arbiters Grounds Triple Stalfos Room Near Miniboss Room: Can_Defeat_Deathsword
# ARBITERS GROUNDS SPINNER ROOM
- Name: Arbiters Grounds Spinner Room Bottom
Region: Arbiters Grounds
Locations:
Arbiters Grounds Spinner Room First Small Chest: Can_Cross_Quicksand
Arbiters Grounds Spinner Room Second Small Chest: Can_Cross_Quicksand
Arbiters Grounds Spinner Room Lower Central Small Chest: Can_Cross_Quicksand
Exits:
Arbiters Grounds Spinner Room Near Single Stalfos: Spinner
Arbiters Grounds Spinner Room Near Double Stalfos: Spinner
Arbiters Grounds Triple Stalfos Room Near Spinner Room: Can_Cross_Quicksand
- Name: Arbiters Grounds Spinner Room Near Single Stalfos
Region: Arbiters Grounds
Locations:
Arbiters Grounds Spinner Room Stalfos Alcove Chest: Nothing
Exits:
Arbiters Grounds Spinner Room Bottom: Nothing
- Name: Arbiters Grounds Spinner Room Near Double Stalfos
Region: Arbiters Grounds
Locations:
Arbiters Grounds Spinner Room Lower North Chest: Nothing
Exits:
Arbiters Grounds Spinner Room Near Socket Room: Spinner
Arbiters Grounds Spinner Room Near Single Stalfos: Nothing
Arbiters Grounds Spinner Room Bottom: Nothing
- Name: Arbiters Grounds Spinner Room Near Socket Room
Region: Arbiters Grounds
Exits:
Arbiters Grounds Socket Room Near Spinner Room: Nothing
Arbiters Grounds Spinner Room Near Double Stalfos: Nothing
# ARBITERS GROUNDS BOSS ROOM
- Name: Arbiters Grounds Boss Room
Events:
Can Complete Arbiters Grounds: Can_Defeat_Stallord
Locations:
Arbiters Grounds Stallord Heart Container: Can_Defeat_Stallord
Arbiters Grounds Dungeon Reward: Can_Defeat_Stallord
Exits:
Mirror Chamber Lower: Can_Defeat_Stallord
@@ -1,406 +0,0 @@
# CITY IN THE SKY ENTRANCE
- Name: City in the Sky Entrance
Region: City in the Sky
Dungeon Start Area: True
Locations:
City in the Sky Underwater West Chest: Iron_Boots
City in the Sky Underwater East Chest: Iron_Boots
Exits:
Lake Hylia: Clawshot # Or Nothing after fall entrance is set
City in the Sky Oocca Hallway Near Entrance: Can_Hit_Crystal_Switch_at_Range
City in the Sky Shop: Nothing
# CITY IN THE SKY SHOP
- Name: City in the Sky Shop
Region: City in the Sky
Events:
Can Refill Regular Bombs: "'Can_Farm_Rupees'"
Can Refill Arrows: "'Can_Farm_Rupees'"
Can Refill Lantern Oil: "'Can_Farm_Rupees'"
Exits:
City in the Sky Entrance: Nothing
# CITY IN THE SKY OOCCA HALLWAY
- Name: City in the Sky Oocca Hallway Near Entrance
Region: City in the Sky
Exits:
City in the Sky Oocca Hallway Near Lobby: Clawshot
City in the Sky Entrance: Clawshot
- Name: City in the Sky Oocca Hallway Near Lobby
Region: City in the Sky
Exits:
City in the Sky Lobby Floor: Nothing
City in the Sky Oocca Hallway Near Entrance: Clawshot
# CITY IN THE SKY LOBBY
- Name: City in the Sky Lobby Floor
Region: City in the Sky
Locations:
City in the Sky Hint Sign: Nothing
Exits:
City in the Sky Lobby Floor Near West Bridge: Double_Clawshots
City in the Sky East Bridge Near Lobby: Nothing
City in the Sky North Fan Passageway Near Lobby: Nothing
City in the Sky Lobby Floor Upper West Ledge: Clawshot
City in the Sky Lobby Above Ceiling Fan: Double_Clawshots and 'Can_Disable_City_in_the_Sky_Lobby_Ceiling_Fan'
- Name: City in the Sky Lobby Floor Near West Bridge
Region: City in the Sky
Exits:
City in the Sky West Bridge Near Lobby: Nothing
City in the Sky Lobby Floor: Clawshot
- Name: City in the Sky Lobby Floor Upper West Ledge
Region: City in the Sky
Exits:
City in the Sky West Bridge Upper Ledge: Nothing
City in the Sky Lobby Floor: Nothing
- Name: City in the Sky Lobby Above Ceiling Fan
Region: City in the Sky
Events:
Can Turn on City in the Sky North Fan: Double_Clawshots and 'Can_Disable_City_in_the_Sky_Lobby_Ceiling_Fan'
Locations:
City in the Sky Chest Below Big Key Chest: Nothing
Exits:
City in the Sky Outside Central Tower Ground: Nothing
City in the Sky Lobby Floor: Can_Survive_Damage and 'Can_Disable_City_in_the_Sky_Lobby_Ceiling_Fan'
- Name: City in the Sky Lobby Above Highest Grating
Region: City in the Sky
Events:
Can Disable City in the Sky Lobby Ceiling Fan: Iron_Boots and Clawshot
Locations:
City in the Sky Big Key Chest: Iron_Boots
Exits:
City in the Sky Lobby Above Ceiling Fan: Nothing
City in the Sky Outside Central Tower Ropes: Nothing
# CITY IN THE SKY WEST BRIDGE
- Name: City in the Sky West Bridge Upper Ledge
Region: City in the Sky
Events:
Can Extend City in the Sky West Bridge: Spinner
Exits:
City in the Sky West Bridge Near Lobby: Clawshot
City in the Sky Lobby Floor Upper West Ledge: Nothing
- Name: City in the Sky West Bridge Near Lobby
Region: City in the Sky
Exits:
City in the Sky West Bridge Near Double Clawshot Maze Room: Double_Clawshots or 'Can_Extend_City_in_the_Sky_West_Bridge'
City in the Sky West Bridge Upper Ledge: Clawshot
City in the Sky Lobby Floor Near West Bridge: Nothing
- Name: City in the Sky West Bridge Near Double Clawshot Maze Room
Region: City in the Sky
Exits:
City in the Sky Double Clawshot Maze Room Near West Bridge: Nothing
City in the Sky West Bridge Near Lobby: Double_Clawshots or 'Can_Extend_City_in_the_Sky_West_Bridge'
# CITY IN THE SKY DOUBLE CLAWSHOT MAZE ROOM
- Name: City in the Sky Double Clawshot Maze Room Near West Bridge
Region: City in the Sky
Locations:
City in the Sky West Wing First Chest: Clawshot
Exits:
City in the Sky Double Clawshot Maze Room Near Baba Tower: Double_Clawshots
City in the Sky West Bridge Near Double Clawshot Maze Room: Nothing
- Name: City in the Sky Double Clawshot Maze Room Near Baba Tower
Region: City in the Sky
Locations:
City in the Sky West Wing Baba Balcony Chest: Nothing
City in the Sky West Wing Narrow Ledge Chest: Nothing
City in the Sky West Wing Tile Worm Chest: Nothing
Exits:
City in the Sky Baba Tower Bottom: Nothing
# CITY IN THE SKY BABA TOWER
- Name: City in the Sky Baba Tower Bottom
Region: City in the Sky
Locations:
City in the Sky Baba Tower Top Small Chest: Can_Defeat_Baba_Serpent and Can_Defeat_Big_Baba and Double_Clawshots
City in the Sky Baba Tower Narrow Ledge Chest: Can_Defeat_Baba_Serpent and Can_Defeat_Big_Baba and Double_Clawshots
City in the Sky Baba Tower Alcove Chest: Can_Defeat_Baba_Serpent and Can_Defeat_Big_Baba and Double_Clawshots
Exits:
City in the Sky Baba Tower Top: Can_Defeat_Baba_Serpent and Can_Defeat_Big_Baba and Double_Clawshots
City in the Sky Double Clawshot Maze Room Near Baba Tower: Nothing
- Name: City in the Sky Baba Tower Top
Region: City in the Sky
Exits:
City in the Sky West Garden Near Baba Tower: Nothing
City in the Sky Baba Tower Bottom: Double_Clawshots
# CITY IN THE SKY WEST GARDEN
- Name: City in the Sky West Garden Near Baba Tower
Region: City in the Sky
Exits:
City in the Sky West Garden Middle: Clawshot
City in the Sky Baba Tower Top: Nothing
- Name: City in the Sky West Garden Middle
Region: City in the Sky
Locations:
City in the Sky West Garden Corner Chest: Nothing
City in the Sky West Garden Lone Island Chest: Double_Clawshots
City in the Sky Garden Island Poe: Double_Clawshots and Can_Defeat_Poe
Exits:
City in the Sky West Garden Near Peahat Train North: Double_Clawshots
- Name: City in the Sky West Garden Near Peahat Train North
Region: City in the Sky
Locations:
City in the Sky West Garden Lower Chest: Nothing
Exits:
City in the Sky Peahat Train Room North Near West Garden: Nothing
City in the Sky West Garden Near Baba Tower: Clawshot
- Name: City in the Sky West Garden Near Peahat Train South
Region: City in the Sky
Locations:
City in the Sky West Garden Ledge Chest: Nothing
Exits:
City in the Sky West Garden Middle: Nothing
City in the Sky Peahat Train Room South Near West Garden: Nothing
# CITY IN THE SKY PEAHAT TRAIN ROOM
- Name: City in the Sky Peahat Train Room North Near West Garden
Region: City in the Sky
Exits:
City in the Sky Peahat Train Room South Near West Garden: Double_Clawshots
City in the Sky Peahat Train Room Near Outside Central Tower: Double_Clawshots
City in the Sky West Garden Near Peahat Train North: Nothing
- Name: City in the Sky Peahat Train Room South Near West Garden
Region: City in the Sky
Exits:
City in the Sky Peahat Train Room North Near West Garden: Double_Clawshots
City in the Sky Peahat Train Room Near Outside Central Tower: Double_Clawshots
City in the Sky West Garden Near Peahat Train South: Nothing
- Name: City in the Sky Peahat Train Room Near Outside Central Tower
Region: City in the Sky
Exits:
City in the Sky Peahat Train Room North Near West Garden: Double_Clawshots
City in the Sky Peahat Train Room South Near West Garden: Double_Clawshots
City in the Sky Outside Central Tower Ground: Nothing
# CITY IN THE SKY OUTSIDE CENTRAL TOWER
- Name: City in the Sky Outside Central Tower Ground
Region: City in the Sky
Exits:
City in the Sky Outside Central Tower Ledge: Clawshot
City in the Sky Lobby Above Ceiling Fan: Nothing
City in the Sky Peahat Train Room Near Outside Central Tower: Nothing
- Name: City in the Sky Outside Central Tower Ledge
Region: City in the Sky
Exits:
City in the Sky Outside Central Tower Ropes: Can_Use_Tightrope
- Name: City in the Sky Outside Central Tower Ropes
Region: City in the Sky
Locations:
City in the Sky Central Outside Ledge Chest: Can_Use_Tightrope and Can_Climb_Vines
City in the Sky Central Outside Poe Island Chest: Can_Use_Tightrope and Can_Climb_Vines
City in the Sky Poe Above Central Fan: Can_Use_Tightrope and Can_Defeat_Poe
Exits:
City in the Sky Lobby Above Highest Grating: Nothing
City in the Sky Outside Central Tower Ground: Nothing
# CITY IN THE SKY EAST BRIDGE
- Name: City in the Sky East Bridge Near Lobby
Region: City in the Sky
Events:
Can Spin City in the Sky East Bridge: Spinner
Exits:
City in the Sky Lobby Floor: Nothing
City in the Sky East Bridge Near East Helmasaur Room: "'Can_Spin_City_in_the_Sky_East_Bridge'"
- Name: City in the Sky East Bridge Near East Helmasaur Room
Region: City in the Sky
Exits:
City in the Sky East Helmasaur Room Top Near East Bridge: City_in_the_Sky_Small_Key or Small_Keys == Keysy
City in the Sky East Bridge Near Lobby: "'Can_Spin_City_in_the_Sky_East_Bridge'"
- Name: City in the Sky Under East Bridge
Region: City in the Sky
Exits:
City in the Sky East Helmasaur Room Bottom Near East Bridge: Nothing
City in the Sky East Bridge Near Lobby: Double_Clawshots and 'Can_Spin_City_in_the_Sky_East_Bridge'
# CITY IN THE SKY EAST HELMASAUR ROOM
- Name: City in the Sky East Helmasaur Room Top Near East Bridge
Region: City in the Sky
Events:
Can Hit City in the Sky East Helmasaur Room Crystal Switch: Can_Hit_Crystal_Switch_at_Range
Exits:
City in the Sky East Helmasaur Room Top Near Tower Before Miniboss: "'Can_Hit_City_in_the_Sky_East_Helmasaur_Room_Crystal_Switch'"
City in the Sky East Bridge Near East Helmasaur Room: Nothing
- Name: City in the Sky East Helmasaur Room Top Near Tower Before Miniboss
Region: City in the Sky
Exits:
City in the Sky Tower Before Miniboss Higher Caged Area: Nothing
City in the Sky East Helmasaur Room Top Near East Tileworm Room: "'Can_Hit_City_in_the_Sky_East_Helmasaur_Room_Crystal_Switch'"
City in the Sky East Helmasaur Room Top Near East Bridge: "'Can_Hit_City_in_the_Sky_East_Helmasaur_Room_Crystal_Switch'"
- Name: City in the Sky East Helmasaur Room Top Near East Tileworm Room
Region: City in the Sky
Events:
Can Hit City in the Sky East Helmasaur Room Crystal Switch: Can_Hit_Crystal_Switch_at_Range
Exits:
City in the Sky East Tileworm Room Near East Helmasaur Room: Nothing
City in the Sky East Helmasaur Room Top Near Tower Before Miniboss: Nothing
- Name: City in the Sky East Helmasaur Room Bottom Near Tower Before Miniboss
Region: City in the Sky
Exits:
City in the Sky East Helmasaur Room Bottom Near East Bridge: Double_Clawshots
City in the Sky Tower Before Miniboss Lower Caged Area: Nothing
- Name: City in the Sky East Helmasaur Room Bottom Near East Bridge
Region: City in the Sky
Locations:
City in the Sky East Wing Lower Level Chest: Nothing
Exits:
City in the Sky Under East Bridge: Nothing
City in the Sky East Helmasaur Room Bottom Near Tower Before Miniboss: Double_Clawshots
# CITY IN THE SKY EAST TILEWORM ROOM
- Name: City in the Sky East Tileworm Room Near East Helmasaur Room
Region: City in the Sky
Locations:
City in the Sky East Tile Worm Small Chest: Nothing
Exits:
City in the Sky East Tileworm Room Near Double Dinalfos Room: Can_Launch_Tileworm
City in the Sky East Helmasaur Room Top Near East Tileworm Room: Nothing
- Name: City in the Sky East Tileworm Room Near Double Dinalfos Room
Region: City in the Sky
Exits:
City in the Sky Double Dinalfos Room Bottom: Nothing
City in the Sky East Tileworm Room Near East Helmasaur Room: Clawshot or Can_Launch_Tileworm
# CITY IN THE SKY DOUBLE DINALFOS ROOM
- Name: City in the Sky Double Dinalfos Room Bottom
Region: City in the Sky
Exits:
City in the Sky Double Dinalfos Room Top: Can_Defeat_Dinalfos and Clawshot
City in the Sky East Tileworm Room Near Double Dinalfos Room: Can_Defeat_Dinalfos # Room locks when you go in
- Name: City in the Sky Double Dinalfos Room Top
Region: City in the Sky
Exits:
City in the Sky Oocca Flight Room Near Double Dinalfos Room: Nothing
City in the Sky Double Dinalfos Room Bottom: Nothing
# CITY IN THE SKY OOCCA FLIGHT ROOM
- Name: City in the Sky Oocca Flight Room Near Double Dinalfos Room
Region: City in the Sky
Locations:
City in the Sky East Wing After Dinalfos Alcove Chest: Clawshot
City in the Sky East Wing After Dinalfos Ledge Chest: Nothing
Exits:
City in the Sky Oocca Flight Room Near Tower Before Miniboss: Clawshot
City in the Sky Double Dinalfos Room Top: Nothing
- Name: City in the Sky Oocca Flight Room Near Tower Before Miniboss
Region: City in the Sky
Exits:
City in the Sky Tower Before Miniboss Top: Nothing
# CITY IN THE SKY TOWER BEFORE MINIBOSS
- Name: City in the Sky Tower Before Miniboss Top
Region: City in the Sky
Events:
Can Open City in the Sky Tower Before Miniboss Upper Gate: Clawshot
Exits:
City in the Sky Tower Before Miniboss Higher Caged Area: "'Can_Open_City_in_the_Sky_Tower_Before_Miniboss_Upper_Gate'"
City in the Sky Tower Before Miniboss Bottom: Nothing
- Name: City in the Sky Tower Before Miniboss Bottom
Region: City in the Sky
Exits:
Aerolfos Miniboss Room: Nothing
City in the Sky Tower Before Miniboss Lower Caged Area: Double_Clawshots
- Name: City in the Sky Tower Before Miniboss Higher Caged Area
Region: City in the Sky
Locations:
City in the Sky East First Wing Chest After Fans: Nothing
Exits:
City in the Sky East Helmasaur Room Top Near Tower Before Miniboss: Nothing
City in the Sky Tower Before Miniboss Bottom: "'Can_Open_City_in_the_Sky_Tower_Before_Miniboss_Upper_Gate'"
- Name: City in the Sky Tower Before Miniboss Lower Caged Area
Region: City in the Sky
Exits:
City in the Sky East Helmasaur Room Bottom Near Tower Before Miniboss: Nothing
# AEROLFOS MINIBOSS ROOM
- Name: Aerolfos Miniboss Room
Locations:
City in the Sky Aeralfos Chest: Can_Defeat_Aerolfos
Exits:
City in the Sky Tower Before Miniboss Bottom: Can_Defeat_Aerolfos
# CITY IN THE SKY NORTH FAN PASSAGEWAY
- Name: City in the Sky North Fan Passageway Near Lobby
Region: City in the Sky
Exits:
City in the Sky North Fan Passageway Near North Tower: Double_Clawshots and 'Can_Turn_on_City_in_the_Sky_North_Fan'
City in the Sky Lobby Floor: Nothing
- Name: City in the Sky North Fan Passageway Near North Tower
Region: City in the Sky
Locations:
City in the Sky Chest Behind North Fan: Clawshot
Exits:
City in the Sky North Tower Bottom: Nothing
City in the Sky North Fan Passageway Near Lobby: Double_Clawshots and 'Can_Turn_on_City_in_the_Sky_North_Fan'
# CITY IN THE SKY NORTH TOWER
- Name: City in the Sky North Tower Bottom
Region: City in the Sky
Exits:
City in the Sky North Tower Top: Can_Defeat_Aerolfos and Double_Clawshots
City in the Sky North Fan Passageway Near North Tower: Nothing
- Name: City in the Sky North Tower Top
Exits:
City in the Sky Boss Room: City_in_the_Sky_Big_Key or Big_Keys == Keysy
City in the Sky North Tower Bottom: Nothing
# CITY IN THE SKY BOSS ROOM
- Name: City in the Sky Boss Room
Events:
Can Complete City in the Sky: Can_Defeat_Argorok
Locations:
City in the Sky Argorok Heart Container: Can_Defeat_Argorok
City in the Sky Dungeon Reward: Can_Defeat_Argorok
Exits:
City in the Sky Entrance: Can_Defeat_Argorok
@@ -1,277 +0,0 @@
# FOREST TEMPLE ENTRANCE ROOM
- Name: Forest Temple Entrance
Region: Forest Temple
Dungeon Start Area: True
Events:
Can Free Monkey in Entrance Room: Can_Break_Monkey_Cage
Locations:
Forest Temple Entrance Vines Chest: Can_Defeat_Walltula or Clawshot
Exits:
Forest Temple Entrance Ledge Above Monkey Cage: Can_Defeat_Walltula and Can_Defeat_Bokoblin and Can_Break_Monkey_Cage and Can_Climb_Vines
North Faron Woods: Nothing
- Name: Forest Temple Entrance Ledge Above Monkey Cage
Region: Forest Temple
Exits:
Forest Temple Lobby: Nothing
Forest Temple Entrance: Nothing
# FOREST TEMPLE LOBBY
- Name: Forest Temple Lobby
Region: Forest Temple
Locations:
Forest Temple Central Chest Behind Stairs: Gale_Boomerang # Incase the player blocks it by lighting the torches
Forest Temple Central Chest Hanging From Web: Can_Cut_Hanging_Web
Exits:
Forest Temple Lobby North Ledge: Can_Light_Torches
Forest Temple Lobby West Ledge: Clawshot or (Can_Swing_on_Monkeys and 'Can_Free_Monkey_on_Totem')
Forest Temple East Water Room Near Lobby: Can_Swing_on_Monkeys and 'Can_Free_Monkey_in_Entrance_Room'
Forest Temple Entrance Ledge Above Monkey Cage: Nothing
- Name: Forest Temple Lobby North Ledge
Region: Forest Temple
Locations:
Forest Temple Central North Chest: Nothing
Exits:
Forest Temple Outside Center South Ledge: Nothing
Forest Temple Lobby: Nothing
- Name: Forest Temple Lobby West Ledge
Region: Forest Temple
Locations:
Forest Temple Hint Sign: Nothing
Exits:
Forest Temple Lobby West Ledge Behind Web: Can_Break_Webs
Forest Temple Lobby: Nothing
- Name: Forest Temple Lobby West Ledge Behind Web
Region: Forest Temple
Exits:
Forest Temple West Main Room: Nothing
Forest Temple Lobby West Ledge: Can_Break_Webs
# FOREST TEMPLE WEST MAIN ROOM
- Name: Forest Temple West Main Room
Region: Forest Temple
Locations:
Forest Temple West Deku Like Chest: Can_Defeat_Walltula
Exits:
Forest Temple West Main Room Ledge near Big Baba Room: Can_Defeat_Walltula
Forest Temple West Main Room Behind Boulder: Can_Pickup_Bomblings
Forest Temple West Main Room Ledge near Outside: Can_Climb_Vines
- Name: Forest Temple West Main Room Ledge near Big Baba Room
Region: Forest Temple
Exits:
Forest Temple Big Baba Room: Nothing
Forest Temple West Main Room: Nothing
- Name: Forest Temple West Main Room Behind Boulder
Region: Forest Temple
Exits:
Forest Temple West Tileworm Room: Nothing
Forest Temple West Main Room: Can_Smash
- Name: Forest Temple West Main Room Ledge near Outside
Region: Forest Temple
Exits:
Forest Temple Outside West Ledge: Nothing
Forest Temple West Main Room: Nothing
# FOREST TEMPLE BIG BABA ROOM
- Name: Forest Temple Big Baba Room
Region: Forest Temple
Events:
Can Free Monkey in Big Baba Room: count(Forest_Temple_Small_Key, 4) or Small_Keys == Keysy
Locations:
Forest Temple Big Baba Key: Can_Defeat_Big_Baba
Exits:
Forest Temple West Main Room Ledge near Big Baba Room: Nothing
# FOREST TEMPLE WEST TILEWORM ROOM
- Name: Forest Temple West Tileworm Room
Region: Forest Temple
Events:
Can Free Monkey in West Tileworm Room: Can_Light_Torches and (count(Forest_Temple_Small_Key, 4) or Small_Keys == Keysy)
Locations:
Forest Temple Totem Pole Chest: Can_Survive_One_Bonk
Forest Temple West Tile Worm Room Vines Chest: Nothing
Forest Temple West Tile Worm Chest Behind Stairs: Gale_Boomerang
Exits:
Forest Temple West Main Room Behind Boulder: Nothing
# FOREST TEMPLE OUTSIDE WEST AND CENTER AREA
- Name: Forest Temple Outside Center South Ledge
Region: Forest Temple
Exits:
Forest Temple Outside Center North Ledge: Can_Swing_on_Monkeys and 'Can_Free_Monkey_on_Totem' and
'Can_Free_Monkey_in_Big_Baba_Room' and 'Can_Free_Monkey_in_West_Tileworm_Room'
Forest Temple Lobby North Ledge: Nothing
- Name: Forest Temple Outside West Ledge
Region: Forest Temple
Exits:
Forest Temple Outside Center North Ledge: Gale_Boomerang
Forest Temple West Main Room Ledge near Outside: Nothing
- Name: Forest Temple Outside Center North Ledge
Region: Forest Temple
Events:
Can Free Outside Monkey: Gale_Boomerang
Exits:
Ook Miniboss Room: Nothing
Forest Temple Outside West Ledge: Gale_Boomerang
# OOK MINIBOSS ROOM
- Name: Ook Miniboss Room
Locations:
Forest Temple Gale Boomerang: Can_Defeat_Ook
Exits:
Forest Temple Outside Center North Ledge: Gale_Boomerang
# FOREST TEMPLE EAST WATER ROOM
- Name: Forest Temple East Water Room Near Lobby
Region: Forest Temple
Exits:
Forest Temple East Water Room: Can_Pickup_Bomblings # Can burn the web with the bombling
Forest Temple Lobby: Nothing
- Name: Forest Temple East Water Room
Region: Forest Temple
Locations:
Forest Temple Big Key Chest: Gale_Boomerang
Forest Temple East Water Cave Chest: Nothing
Exits:
Forest Temple Second Monkey Outside Room: count(Forest_Temple_Small_Key, 4) or Small_Keys == Keysy
Forest Temple Outside East: Nothing
Forest Temple East Water Room Near Lobby: Can_Break_Webs
# FOREST TEMPLE SECOND MONKEY OUTSIDE ROOM
- Name: Forest Temple Second Monkey Outside Room
Region: Forest Temple
Events:
Can Free Monkey on Totem: Can_Survive_Three_Bonks and Can_Defeat_Bokoblin
Locations:
Forest Temple Second Monkey Under Bridge Chest: Nothing
Exits:
Forest Temple East Water Room: count(Forest_Temple_Small_Key, 4) or Small_Keys == Keysy
# FOREST TEMPLE OUTSIDE EAST
- Name: Forest Temple Outside East
Region: Forest Temple
Exits:
Forest Temple North Cross Room South Side: Nothing
Forest Temple East Water Room: Nothing
# FOREST TEMPLE NORTH CROSS ROOM
- Name: Forest Temple North Cross Room South Side
Region: Forest Temple
Locations:
Forest Temple Windless Bridge Chest: Nothing
Exits:
Forest Temple North Cross Room East Side: Gale_Boomerang
Forest Temple North Cross Room West Side: Gale_Boomerang
Forest Temple North Cross Room North Side: Gale_Boomerang
Forest Temple Outside East: Nothing
- Name: Forest Temple North Cross Room East Side
Region: Forest Temple
Exits:
Forest Temple East Tileworm Room: count(Forest_Temple_Small_Key, 4) or Small_Keys == Keysy
Forest Temple North Cross Room South Side: Gale_Boomerang
Forest Temple North Cross Room West Side: Nothing
Forest Temple North Cross Room North Side: Gale_Boomerang
- Name: Forest Temple North Cross Room West Side
Region: Forest Temple
Exits:
Forest Temple Dark Spider Room: Nothing
Forest Temple North Cross Room South Side: Gale_Boomerang
Forest Temple North Cross Room East Side: Nothing
Forest Temple North Cross Room North Side: Gale_Boomerang
- Name: Forest Temple North Cross Room North Side
Region: Forest Temple
Exits:
Forest Temple Boss Door Room South Side: Nothing
Forest Temple North Cross Room South Side: Gale_Boomerang
Forest Temple North Cross Room East Side: Gale_Boomerang
Forest Temple North Cross Room West Side: Gale_Boomerang
# FOREST TEMPLE EAST TILEWORM ROOM
- Name: Forest Temple East Tileworm Room
Region: Forest Temple
Events:
Can Free Monkey in East Tileworm Room: Can_Defeat_Tileworm and Can_Defeat_Skulltula and Can_Defeat_Walltula and Gale_Boomerang # or Tileworm Boost
Locations:
Forest Temple East Tile Worm Chest: Can_Defeat_Tileworm and Can_Defeat_Skulltula and Can_Defeat_Walltula and Gale_Boomerang # or Tileworm Boost
Exits:
Forest Temple North Cross Room East Side: count(Forest_Temple_Small_Key, 4) or Small_Keys == Keysy
# FOREST TEMPLE DARK SPIDER ROOM
- Name: Forest Temple Dark Spider Room
Region: Forest Temple
Events:
Can Free Monkey in Dark Spider Room: Can_Break_Webs and Can_Break_Monkey_Cage
Exits:
Forest Temple North Cross Room West Side: Nothing
# FOREST TEMPLE BOSS DOOR ROOM
- Name: Forest Temple Boss Door Room South Side
Region: Forest Temple
Exits:
Forest Temple Boss Door Room West Side: Gale_Boomerang or Clawshot
Forest Temple Boss Door Room North Side: Can_Swing_on_Monkeys and Can_Free_All_Monkeys_in_Forest_Temple
- Name: Forest Temple Boss Door Room West Side
Region: Forest Temple
Exits:
Forest Temple Boss Door Room North Side: Clawshot
Forest Temple North Deku Like Room: Nothing
Forest Temple Boss Door Room South Side: Gale_Boomerang # Can do a jumpslash, but it's a bit precise
- Name: Forest Temple Boss Door Room North Side
Region: Forest Temple
Events:
Fairy Access: Nothing
Exits:
Forest Temple Boss Room: Forest_Temple_Big_Key or Big_Keys == Keysy
Forest Temple Boss Door Room South Side: Can_Swing_on_Monkeys and Can_Free_All_Monkeys_in_Forest_Temple
Forest Temple Boss Door Room West Side: Clawshot
# FOREST TEMPLE NORTH DEKU LIKE ROOM
- Name: Forest Temple North Deku Like Room
Region: Forest Temple
Events:
Can Free Monkey in North Deku Like Room: Gale_Boomerang
Locations:
Forest Temple North Deku Like Chest: Can_Defeat_Deku_Like or Gale_Boomerang
Exits:
Forest Temple Boss Door Room West Side: Nothing
# FOREST TEMPLE BOSS ROOM
- Name: Forest Temple Boss Room
Events:
Can Complete Forest Temple: Can_Defeat_Diababa
Locations:
Forest Temple Diababa Heart Container: Can_Defeat_Diababa
Forest Temple Dungeon Reward: Can_Defeat_Diababa
Exits:
South Faron Woods: Can_Defeat_Diababa

Some files were not shown because too many files have changed in this diff Show More