diff --git a/assets/objdiff.png b/assets/objdiff.png deleted file mode 100644 index 94835fa1b3..0000000000 Binary files a/assets/objdiff.png and /dev/null differ diff --git a/extern/aurora b/extern/aurora index 552be91d68..69fcfbffc2 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 552be91d68d57a911dac5ba2b718b8fd61ac7e37 +Subproject commit 69fcfbffc281ef1c24e5334b98e99fe8faf87adc diff --git a/files.cmake b/files.cmake index e5406ceb02..0b372349eb 100644 --- a/files.cmake +++ b/files.cmake @@ -1450,7 +1450,6 @@ set(DUSK_FILES src/dusk/imgui/ImGuiProcessOverlay.cpp src/dusk/imgui/ImGuiCameraOverlay.cpp src/dusk/imgui/ImGuiHeapOverlay.cpp - src/dusk/imgui/ImGuiDebugPad.cpp src/dusk/imgui/ImGuiControllerOverlay.cpp src/dusk/imgui/ImGuiStubLog.cpp src/dusk/imgui/ImGuiMapLoader.cpp diff --git a/include/dusk/map_loader_definitions.h b/include/dusk/map_loader_definitions.h index a0f7150d2d..0ffda772ba 100644 --- a/include/dusk/map_loader_definitions.h +++ b/include/dusk/map_loader_definitions.h @@ -1,5 +1,7 @@ #pragma once +#include + struct RoomEntry { u8 roomNo; std::vector roomPoints = {}; diff --git a/include/dusk/math.h b/include/dusk/math.h index fe27b3046b..04f1087670 100644 --- a/include/dusk/math.h +++ b/include/dusk/math.h @@ -2,9 +2,6 @@ #define _SRC_DUSK_MATH_H_ #include -#include -#include -#include #ifndef M_PI #define M_PI 3.14159265358979323846f @@ -19,139 +16,6 @@ inline float i_cosf(float x) { return cos(x); } inline float i_tanf(float x) { return tan(x); } inline float i_acosf(float x) { return acos(x); } - -// frsqrte matching courtesy of Geotale, with reference to https://achurch.org/cpu-tests/ppc750cl.s - -struct BaseAndDec32 { - uint32_t base; - int32_t dec; -}; - -struct BaseAndDec64 { - uint64_t base; - int64_t dec; -}; - -union c32 { - constexpr c32(const float p) { - f = p; - } - - constexpr c32(const uint32_t p) { - u = p; - } - - uint32_t u; - float f; -}; - -union c64 { - constexpr c64(const double p) { - f = p; - } - - constexpr c64(const uint64_t p) { - u = p; - } - - uint64_t u; - double f; -}; - -static constexpr uint64_t EXPONENT_SHIFT_F64 = 52; -static constexpr uint64_t MANTISSA_MASK_F64 = 0x000fffffffffffffULL; -static constexpr uint64_t EXPONENT_MASK_F64 = 0x7ff0000000000000ULL; -static constexpr uint64_t SIGN_MASK_F64 = 0x8000000000000000ULL; - -static constexpr std::array RSQRTE_TABLE = {{ - {0x69fa000000000ULL, -0x15a0000000LL}, - {0x5f2e000000000ULL, -0x13cc000000LL}, - {0x554a000000000ULL, -0x1234000000LL}, - {0x4c30000000000ULL, -0x10d4000000LL}, - {0x43c8000000000ULL, -0x0f9c000000LL}, - {0x3bfc000000000ULL, -0x0e88000000LL}, - {0x34b8000000000ULL, -0x0d94000000LL}, - {0x2df0000000000ULL, -0x0cb8000000LL}, - {0x2794000000000ULL, -0x0bf0000000LL}, - {0x219c000000000ULL, -0x0b40000000LL}, - {0x1bfc000000000ULL, -0x0aa0000000LL}, - {0x16ae000000000ULL, -0x0a0c000000LL}, - {0x11a8000000000ULL, -0x0984000000LL}, - {0x0ce6000000000ULL, -0x090c000000LL}, - {0x0862000000000ULL, -0x0898000000LL}, - {0x0416000000000ULL, -0x082c000000LL}, - {0xffe8000000000ULL, -0x1e90000000LL}, - {0xf0a4000000000ULL, -0x1c00000000LL}, - {0xe2a8000000000ULL, -0x19c0000000LL}, - {0xd5c8000000000ULL, -0x17c8000000LL}, - {0xc9e4000000000ULL, -0x1610000000LL}, - {0xbedc000000000ULL, -0x1490000000LL}, - {0xb498000000000ULL, -0x1330000000LL}, - {0xab00000000000ULL, -0x11f8000000LL}, - {0xa204000000000ULL, -0x10e8000000LL}, - {0x9994000000000ULL, -0x0fe8000000LL}, - {0x91a0000000000ULL, -0x0f08000000LL}, - {0x8a1c000000000ULL, -0x0e38000000LL}, - {0x8304000000000ULL, -0x0d78000000LL}, - {0x7c48000000000ULL, -0x0cc8000000LL}, - {0x75e4000000000ULL, -0x0c28000000LL}, - {0x6fd0000000000ULL, -0x0b98000000LL}, -}}; - -[[nodiscard]] static inline double frsqrte(const double val) { - c64 bits(val); - - uint64_t mantissa = bits.u & MANTISSA_MASK_F64; - int64_t exponent = bits.u & EXPONENT_MASK_F64; - bool sign = (bits.u & SIGN_MASK_F64) != 0; - - // Handle 0 case - if (mantissa == 0 && exponent == 0) { - return std::copysign(std::numeric_limits::infinity(), bits.f); - } - - // Handle NaN-like - if (exponent == EXPONENT_MASK_F64) { - if (mantissa == 0) { - return sign ? std::numeric_limits::quiet_NaN() : 0.0; - } - - return val; - } - - // Handle negative inputs - if (sign) { - return std::numeric_limits::quiet_NaN(); - } - - if (exponent == 0) { - // Shift so one bit goes to where the exponent would be, - // then clear that bit to mimic a not-subnormal number! - // Aka, if there are 12 leading zeroes, shift left once - uint32_t shift = std::countl_zero(mantissa) - static_cast(63 - EXPONENT_SHIFT_F64); - - mantissa <<= shift; - mantissa &= MANTISSA_MASK_F64; - // The shift is subtracted by 1 because denormals by default - // are offset by 1 (exponent 0 doesn't have implied 1 bit) - exponent -= static_cast(shift - 1) << EXPONENT_SHIFT_F64; - } - - // In reality this doesn't get the full exponent -- Only the least significant bit - // Only that's needed because square roots of higher exponent bits simply multiply the - // result by 2!! - uint32_t key = static_cast((static_cast(exponent) | mantissa) >> 37); - uint64_t new_exp = - (static_cast((0xbfcLL << EXPONENT_SHIFT_F64) - exponent) >> 1) & EXPONENT_MASK_F64; - - // Remove the bits relating to anything higher than the LSB of the exponent - const auto &entry = RSQRTE_TABLE[0x1f & (key >> 11)]; - - // The result is given by an estimate then an adjustment based on the original - // key that was computed - uint64_t new_mantissa = static_cast(entry.base + entry.dec * static_cast(key & 0x7ff)); - - return c64(new_exp | new_mantissa).f; -} +#include #endif // _SRC_DUSK_MATH_H_ diff --git a/libs/JSystem/include/JSystem/J3DGraphBase/J3DStruct.h b/libs/JSystem/include/JSystem/J3DGraphBase/J3DStruct.h index b565ad78f8..05663fd84e 100644 --- a/libs/JSystem/include/JSystem/J3DGraphBase/J3DStruct.h +++ b/libs/JSystem/include/JSystem/J3DGraphBase/J3DStruct.h @@ -1,9 +1,9 @@ #ifndef J3DSTRUCT_H #define J3DSTRUCT_H +#include #include #include -#include #include "global.h" #include "JSystem/JMath/JMath.h" @@ -11,7 +11,7 @@ /** * @ingroup jsystem-j3d - * + * */ struct J3DLightInfo { bool operator==(J3DLightInfo& other) const; @@ -28,7 +28,7 @@ struct J3DLightInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DTextureSRTInfo { // NOTE: Big endian when loaded from file! @@ -79,7 +79,7 @@ enum J3DTexMtxMode { /** * @ingroup jsystem-j3d - * + * */ struct J3DTexMtxInfo { bool operator==(J3DTexMtxInfo& other) const; @@ -97,7 +97,7 @@ struct J3DTexMtxInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DIndTexMtxInfo { J3DIndTexMtxInfo& operator=(J3DIndTexMtxInfo const&); @@ -107,7 +107,7 @@ struct J3DIndTexMtxInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DFogInfo { bool operator==(J3DFogInfo&) const; @@ -126,7 +126,7 @@ struct J3DFogInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DNBTScaleInfo { bool operator==(const J3DNBTScaleInfo& other) const; @@ -153,7 +153,7 @@ struct J3DIndTexOrderInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DTevSwapModeInfo { /* 0x0 */ u8 mRasSel; @@ -164,7 +164,7 @@ struct J3DTevSwapModeInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DTevSwapModeTableInfo { /* 0x0 */ u8 field_0x0; @@ -175,7 +175,7 @@ struct J3DTevSwapModeTableInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DTevStageInfo { /* 0x0 */ u8 field_0x0; @@ -202,7 +202,7 @@ struct J3DTevStageInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DIndTevStageInfo { /* 0x0 */ u8 mIndStage; @@ -219,7 +219,7 @@ struct J3DIndTevStageInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DTexCoordInfo { /* 0x0 */ u8 mTexGenType; @@ -265,7 +265,7 @@ struct J3DBlendInfo { /** * @ingroup jsystem-j3d - * + * */ struct J3DTevOrderInfo { void operator=(const J3DTevOrderInfo& other) { diff --git a/res/rml/overlay.rcss b/res/rml/overlay.rcss index cf90037f57..0f9e4ffd4e 100644 --- a/res/rml/overlay.rcss +++ b/res/rml/overlay.rcss @@ -110,6 +110,47 @@ toast.achievement heading { color: #C2A42D; } +toast.controller-warning { + top: auto; + right: auto; + bottom: 40dp; + left: 50%; + width: 440dp; + max-width: 90%; + transform: translateX(-50%) scale(0.9); +} + +toast.controller-warning[open] { + transform: translateX(-50%) scale(1); +} + +toast.controller-warning heading { + color: #C2A42D; +} + +toast.menu-notification { + top: 40dp; + right: auto; + bottom: auto; + left: 50%; + max-width: 90%; + transform: translateX(-50%) scale(0.9); +} + +toast.menu-notification[open] { + transform: translateX(-50%) scale(1); +} + +toast.menu-notification message { + align-items: center; + text-align: center; +} + +toast.menu-notification message row { + align-items: center; + gap: 6dp; +} + icon { font-family: "Material Symbols Rounded"; font-weight: normal; @@ -138,6 +179,13 @@ icon.controller { decorator: text("" center center); } +icon.warning { + width: 24dp; + height: 24dp; + font-size: 24dp; + decorator: text("" center center); +} + logo { position: absolute; width: 100dp; @@ -186,4 +234,4 @@ logo img.outer { to { transform: rotate(360deg); } -} \ No newline at end of file +} diff --git a/src/d/actor/d_a_alink_swindow.inc b/src/d/actor/d_a_alink_swindow.inc index 4f651e16e2..9016f14205 100644 --- a/src/d/actor/d_a_alink_swindow.inc +++ b/src/d/actor/d_a_alink_swindow.inc @@ -41,7 +41,7 @@ void daAlink_c::setOriginalHeap(JKRExpHeap** i_ppheap, u32 i_size) { u32 var_r28 = 0x10; u32 size = ROUND(i_size, 16); #if TARGET_PC - size *= 2; + size *= 20; // Increase Link's heap size to prevent mods from crashing with higher-quality models. #endif JKRHeap* parent = mDoExt_getGameHeap(); diff --git a/src/d/actor/d_a_door_boss.cpp b/src/d/actor/d_a_door_boss.cpp index 476a9c8ad6..bf042b3323 100644 --- a/src/d/actor/d_a_door_boss.cpp +++ b/src/d/actor/d_a_door_boss.cpp @@ -254,7 +254,11 @@ BOOL daBdoor_c::checkArea() { if (fabsf(vec.z) > 100.0f) { return false; } +#ifdef TARGET_PC + return (s16)((s32)fabs(current.angle.y - 0x7fff - player->current.angle.y) & 0xffff) <= 0x4000 ? 1 : 0; +#else return (s16)fabs((f64)(current.angle.y - 0x7fff - player->current.angle.y)) <= 0x4000 ? 1 : 0; +#endif } BOOL daBdoor_c::checkFront() { diff --git a/src/d/actor/d_a_door_bossL1.cpp b/src/d/actor/d_a_door_bossL1.cpp index a756cc6fd2..649ebbd5f3 100644 --- a/src/d/actor/d_a_door_bossL1.cpp +++ b/src/d/actor/d_a_door_bossL1.cpp @@ -825,7 +825,11 @@ int daBdoorL1_c::checkArea() { if (fabsf(local_48.z) > 100.0f) { return 0; } +#ifdef TARGET_PC + if ((s16)((s32)fabs(current.angle.y - 0x7fff - player->current.angle.y) & 0xffff) <= 0x4000) { +#else if ((s16)fabs((f64)(current.angle.y - 0x7fff - player->current.angle.y)) <= 0x4000) { +#endif return 1; } else { return 0; diff --git a/src/d/actor/d_a_door_bossL5.cpp b/src/d/actor/d_a_door_bossL5.cpp index d71fddad1f..34dac15fa9 100644 --- a/src/d/actor/d_a_door_bossL5.cpp +++ b/src/d/actor/d_a_door_bossL5.cpp @@ -348,7 +348,11 @@ int daBdoorL5_c::checkArea() { if (fabsf(local_48.z) > 100.0f) { return 0; } +#ifdef TARGET_PC + if ((s16)((s32)fabs(current.angle.y - 0x7fff - player->current.angle.y) & 0xffff) <= 0x4000) { +#else if ((s16)fabs((f64)(current.angle.y - 0x7fff - player->current.angle.y)) <= 0x4000) { +#endif return 1; } else { return 0; diff --git a/src/d/actor/d_a_door_mbossL1.cpp b/src/d/actor/d_a_door_mbossL1.cpp index 1f37fbcc7b..5dfd3bb96c 100644 --- a/src/d/actor/d_a_door_mbossL1.cpp +++ b/src/d/actor/d_a_door_mbossL1.cpp @@ -1317,8 +1317,12 @@ int daMBdoorL1_c::checkArea() { if (fabsf(local_48.z) > 110.0f) { return 0; } - + +#ifdef TARGET_PC + if ((s16)((s32)fabs(angle - 0x7fff - player->current.angle.y) & 0xffff) > 0x4000) { +#else if ((s16)fabs((f64)(angle - 0x7fff - player->current.angle.y)) > 0x4000) { +#endif return 0; } else { return 1; diff --git a/src/d/d_map_path.cpp b/src/d/d_map_path.cpp index eca620ef98..f5e447a2aa 100644 --- a/src/d/d_map_path.cpp +++ b/src/d/d_map_path.cpp @@ -15,13 +15,47 @@ #include #ifdef TARGET_PC +#include +#include +#include + constexpr u16 kMapResolutionMultiplier = 4; -constexpr u16 kMapCircleSize = 16 * kMapResolutionMultiplier; +constexpr u16 kMapImageSide = 16 * kMapResolutionMultiplier; +constexpr u32 kMapImageTotalPixels = kMapImageSide * kMapImageSide; + +typedef std::function PaintI8Fn; + +void paint_i8(std::span dst, size_t width, PaintI8Fn paint) { + const auto blocksAcross = width >> 3; + + for (size_t i = 0; i < dst.size(); i++) { + // 8x4 block swizzling for I8 + const auto blockIdx = i >> 5; + const auto localIdx = i & 31; + + const auto blockY = blockIdx / blocksAcross; + const auto blockX = blockIdx % blocksAcross; + + const auto localY = localIdx >> 3; + const auto localX = localIdx & 7; + + const auto x = (blockX << 3) + localX; + const auto y = (blockY << 2) + localY; + + dst[i] = paint(x, y); + } +} #endif void dMpath_n::dTexObjAggregate_c::create() { static int const data[7] = { - 79, 80, 77, 78, 76, 81, 82, + 79, // 0: im_map_icon_square_4i.bti + 80, // 1: im_map_icon_tresurebox_4i.bti + 77, // 2: im_map_icon_enter_4i.bti + 78, // 3: im_map_icon_nijumaru_4i.bti + 76, // 4: im_map_icon_circle_4i.bti + 81, // 5: im_map_icon_try_force_4i.bti + 82, // 6: map_icon_circle16x16_4i.bti }; for (int lp1 = 0; lp1 < 7; lp1++) { @@ -35,45 +69,101 @@ void dMpath_n::dTexObjAggregate_c::create() { } #if TARGET_PC - auto hqCircle = JKR_NEW TGXTexObj(); + static bool hqTexsDrawn = false; - static bool hqCircleDrawn = false; - static u8 hqCircleData[kMapCircleSize * kMapCircleSize]; + static u8 hqCircleData[kMapImageTotalPixels]; + static u8 hqCircleAltData[kMapImageTotalPixels]; + static u8 hqNijumaruData[kMapImageTotalPixels]; + static u8 hqEnterData[kMapImageTotalPixels]; + static u8 hqTryForceData[kMapImageTotalPixels]; - if (!hqCircleDrawn) { - const auto center = kMapCircleSize / 2.0f; - const auto radiusSq = center * center; - const auto blocksAcross = kMapCircleSize >> 3; - const auto totalPixels = sizeof(hqCircleData); + if (!hqTexsDrawn) { + constexpr auto center = kMapImageSide / 2.0f; + constexpr auto radiusSq = center * center; - for (size_t i = 0; i < totalPixels; i++) { - // 8x4 block swizzling for I8 - const auto blockIdx = i >> 5; - const auto localIdx = i & 31; + // 6: map_icon_circle16x16_4i.bti - simple circle + paint_i8(std::span{hqCircleData}, kMapImageSide, [=](auto x, auto y) { + const auto dx = (x + 0.5f) - center; + const auto dy = (y + 0.5f) - center; + return (dx * dx + dy * dy < radiusSq) ? 0x11 : 0; + }); - const auto blockY = blockIdx / blocksAcross; - const auto blockX = blockIdx % blocksAcross; - - const auto localY = localIdx >> 3; - const auto localX = localIdx & 7; - - const auto x = (blockX << 3) + localX; - const auto y = (blockY << 2) + localY; + // 4: im_map_icon_circle_4i.bti - outlined circle + paint_i8(std::span{hqCircleAltData}, kMapImageSide, [=](auto x, auto y) { + constexpr auto innerRadius = kMapImageSide * 3.0f / 8.0f; + constexpr auto innerRadiusSq = innerRadius * innerRadius; const auto dx = (x + 0.5f) - center; const auto dy = (y + 0.5f) - center; + const auto dSq = dx * dx + dy * dy; - // the original texture is in I4 format and uses 1 to indicate if inside the circle - // so we scale to I8 range: 255 / 15 = 17 - hqCircleData[i] = (dx * dx + dy * dy < radiusSq) ? 17 : 0; - } - hqCircleDrawn = true; + return dSq < radiusSq ? (dSq < innerRadiusSq ? 0x22 : 0x11) : 0; + }); + + // 3: im_map_icon_nijumaru_4i.bti - concentric rings + paint_i8(std::span{hqNijumaruData}, kMapImageSide, [=](auto x, auto y) { + constexpr u8 nijumaruRings[] = {0x11, 0x22, 0x11, 0x11, 0x22, 0x22}; + + const auto dx = (x + 0.5f) - center; + const auto dy = (y + 0.5f) - center; + const auto dSq = dx * dx + dy * dy; + + if (dSq < radiusSq) { + const auto ringIndex = + static_cast(std::trunc(std::sqrt(dSq) / kMapImageSide * 12)); + return nijumaruRings[ringIndex]; + } + return u8{0}; + }); + + // 2: im_map_icon_enter_4i.bti - outlined octagram + paint_i8(std::span{hqEnterData}, kMapImageSide, [=](auto x, auto y) { + constexpr auto outlineWidth = kMapImageSide / 6.0f; + + const auto adx = std::abs((x + 0.5f) - center); + const auto ady = std::abs((y + 0.5f) - center); + const auto dist = + std::min(adx + ady, std::max(adx, ady) * std::numbers::sqrt2_v) - + kMapImageSide / 2.0f; + + return dist > 0.0f ? 0 : (dist > -outlineWidth ? 0x22 : 0x33); + }); + + // 5: im_map_icon_try_force_4i.bti - outlined circle with triangle + paint_i8(std::span{hqTryForceData}, kMapImageSide, [=](auto x, auto y) { + constexpr auto innerRadiusNorm = 5.0f / 12.0f; + constexpr auto innerRadius = kMapImageSide * innerRadiusNorm; + constexpr auto innerRadiusSq = innerRadius * innerRadius; + constexpr auto triRadius = kMapImageSide * innerRadiusNorm / 2.0f; + + const auto dx = (x + 0.5f) - center; + const auto dy = (y + 0.5f) - center; + const auto dSq = dx * dx + dy * dy; + const auto triSideDist = (std::numbers::sqrt3_v * std::abs(dx) - dy) * 0.5f; + const auto insideTri = std::max(dy, triSideDist) < triRadius; + + return insideTri ? 0x22 : (dSq < radiusSq ? (dSq < innerRadiusSq ? 0x33 : 0x22) : 0); + }); + + hqTexsDrawn = true; } - GXInitTexObj(hqCircle, hqCircleData, kMapCircleSize, kMapCircleSize, GX_TF_I8, GX_CLAMP, - GX_CLAMP, GX_FALSE); - GXInitTexObjLOD(hqCircle, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); - mp_texObj[6] = hqCircle; + constexpr auto replacements = std::to_array >({ + {2, hqEnterData}, + {3, hqNijumaruData}, + {4, hqCircleAltData}, + {5, hqTryForceData}, + {6, hqCircleData}, + }); + + for (const auto& [idx, data] : replacements) { + JKR_DELETE(mp_texObj[idx]); + const auto texobj = JKR_NEW TGXTexObj(); + GXInitTexObj( + texobj, data, kMapImageSide, kMapImageSide, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(texobj, GX_NEAR, GX_NEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + mp_texObj[idx] = texobj; + } #endif } diff --git a/src/d/d_menu_fmap2D.cpp b/src/d/d_menu_fmap2D.cpp index ffec184d4e..d62f7d1037 100644 --- a/src/d/d_menu_fmap2D.cpp +++ b/src/d/d_menu_fmap2D.cpp @@ -1403,7 +1403,7 @@ void dMenu_Fmap2DBack_c::regionTextureDraw() { if (uVar10 != uVar9) { bool b = 0; f32 v = mTransX + (dVar14 + (mRegionMinMapX[uVar10] + field_0xf0c[uVar10])); - + #if TARGET_PC if (dusk::getSettings().game.enableMirrorMode) { b = true; diff --git a/src/dusk/imgui/ImGuiConsole.cpp b/src/dusk/imgui/ImGuiConsole.cpp index a18d257690..09d1ca6e81 100644 --- a/src/dusk/imgui/ImGuiConsole.cpp +++ b/src/dusk/imgui/ImGuiConsole.cpp @@ -291,10 +291,6 @@ namespace dusk { ImGui::PopStyleColor(); if (dusk::IsGameLaunched && !m_isLaunchInitialized) { - AddToast(ImGui::GetIO().MouseSource == ImGuiMouseSource_TouchScreen ? - "3-finger tap to toggle menu"s : - "Press F1 to toggle menu"s, - 4.f); m_isLaunchInitialized = true; if (getSettings().game.liveSplitEnabled) { dusk::speedrun::connectLiveSplit(); @@ -389,7 +385,6 @@ namespace dusk { m_menuTools.ShowSaveEditor(); m_menuTools.ShowStateShare(); } - DuskDebugPad(); // temporary, remove later // Hide mouse cursor if the F1 menu is not open and the cursor is idle for 3 seconds. ImGuiIO& io = ImGui::GetIO(); diff --git a/src/dusk/imgui/ImGuiConsole.hpp b/src/dusk/imgui/ImGuiConsole.hpp index 1b6964c2cc..6715846e7b 100644 --- a/src/dusk/imgui/ImGuiConsole.hpp +++ b/src/dusk/imgui/ImGuiConsole.hpp @@ -73,8 +73,6 @@ bool ImGuiButtonCenter(std::string_view text); float ImGuiScale(); } // namespace dusk -void DuskDebugPad(); - #if defined(_WIN32) || \ (defined(__APPLE__) && !TARGET_OS_IOS && !TARGET_OS_TV && !TARGET_OS_MACCATALYST) || \ (defined(__linux__) && !defined(__ANDROID__)) diff --git a/src/dusk/imgui/ImGuiDebugPad.cpp b/src/dusk/imgui/ImGuiDebugPad.cpp deleted file mode 100644 index b1591f1968..0000000000 --- a/src/dusk/imgui/ImGuiDebugPad.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "m_Do/m_Do_controller_pad.h" - -#include "imgui.h" -#include "ImGuiConsole.hpp" - -void DuskDebugPad() { - auto& pad = mDoCPd_c::getCpadInfo(PAD_1); - auto KeyFlag = [&](ImGuiKey key, u32 padFlag) { - if (ImGui::IsKeyDown(key)) - pad.mButtonFlags |= padFlag; - if (ImGui::IsKeyPressed(key)) - pad.mPressedButtonFlags |= padFlag; - - }; - - KeyFlag(ImGuiKey_K, PAD_BUTTON_A); - KeyFlag(ImGuiKey_J, PAD_BUTTON_B); - KeyFlag(ImGuiKey_L, PAD_BUTTON_X); - KeyFlag(ImGuiKey_I, PAD_BUTTON_Y); - KeyFlag(ImGuiKey_H, PAD_BUTTON_START); - KeyFlag(ImGuiKey_O, PAD_TRIGGER_Z); - KeyFlag(ImGuiKey_Keypad8, PAD_BUTTON_UP); - KeyFlag(ImGuiKey_Keypad2, PAD_BUTTON_DOWN); - KeyFlag(ImGuiKey_Keypad6, PAD_BUTTON_RIGHT); - KeyFlag(ImGuiKey_Keypad4, PAD_BUTTON_LEFT); - - if (ImGui::IsKeyDown(ImGuiKey_W)) { - pad.mMainStickPosY = 1.0f; - pad.mMainStickValue = 1.0f; - pad.mMainStickAngle = 0x8000; - } - - if (ImGui::IsKeyDown(ImGuiKey_S)) { - pad.mMainStickPosY = -1.0f; - pad.mMainStickValue = 1.0f; - pad.mMainStickAngle = 0; - } - - if (ImGui::IsKeyDown(ImGuiKey_D)) { - pad.mMainStickPosX = 1.0f; - pad.mMainStickValue = 1.0f; - pad.mMainStickAngle = 0x4000; - } - - if (ImGui::IsKeyDown(ImGuiKey_A)) { - pad.mMainStickPosX = -1.0f; - pad.mMainStickValue = 1.0f; - pad.mMainStickAngle = -0x4000; - } - - if (ImGui::IsKeyDown(ImGuiKey_Q)) { - pad.mTriggerLeft = 1.0; - pad.mTrigLockL = 1; - pad.mHoldLockL = 1; - } - if (ImGui::IsKeyDown(ImGuiKey_E)) { - pad.mTriggerRight = 1.0; - pad.mTrigLockR = 1; - pad.mHoldLockR = 1; - } -} diff --git a/src/dusk/imgui/ImGuiEventFlags.hpp b/src/dusk/imgui/ImGuiEventFlags.hpp index 9928690b9b..5c110821f6 100644 --- a/src/dusk/imgui/ImGuiEventFlags.hpp +++ b/src/dusk/imgui/ImGuiEventFlags.hpp @@ -4,8 +4,9 @@ #include #include #include -#include #include +#include +#include struct duskImguiEventFlagEntry { uint8_t byteIndex; @@ -842,2282 +843,2408 @@ inline const MultiBitEventFlag duskImguiSwappedU16Events[] = { { 0xfd, "Rupees owed to Trill" }, }; -struct EventAreaFlags -{ - uint8_t byteIndex; - uint8_t bitIndex; - uint16_t flagID; - std::string description; +enum class AreaFlagType { Item, Switch, Tbox }; + +struct AreaFlagInd { + constexpr AreaFlagInd() noexcept = default; + constexpr explicit AreaFlagInd(uint16_t areaFlag) noexcept; + constexpr AreaFlagInd(AreaFlagType _type, int _flag) noexcept : type(_type), flagID(_flag) {} + AreaFlagType type; + int flagID; }; -inline EventAreaFlags eventAreaFlagsAG[] = -{ - { 0x00, 0x80, 0x0080, "Ooccoo Map Flag" }, - { 0x00, 0x40, 0x0040, "fourth small chest epic spinner room" }, - { 0x00, 0x20, 0x0020, "third small chest epic spinner room" }, - { 0x00, 0x10, 0x0010, "first small chest epic spinner room" }, - { 0x00, 0x08, 0x0008, "second small chest epic spinner room" }, - { 0x00, 0x04, 0x0004, "PoH first big chest epic spinner room" }, - { 0x00, 0x02, 0x0002, "small chest first west room" }, - { 0x00, 0x01, 0x0001, "small key big chest elevator room B1" }, - { 0x01, 0x80, 0x0180, "small key big chest first room" }, - { 0x01, 0x20, 0x0120, "small key small chest fouth east room" }, - { 0x01, 0x10, 0x0110, "big key chest" }, - { 0x01, 0x08, 0x0108, "PoH right big chest main room" }, - { 0x01, 0x04, 0x0104, "map left big chest main room" }, - { 0x01, 0x02, 0x0102, "west small chest in second west room" }, - { 0x01, 0x01, 0x0101, "north east small chest in second west room" }, - { 0x02, 0x08, 0x0208, "Spinner big chest" }, - { 0x03, 0x40, 0x0340, "small key small chest first east room B1" }, - { 0x03, 0x20, 0x0320, "small key big chest second east room 2F" }, - { 0x03, 0x10, 0x0310, "compass big chest second east room 2F" }, - { 0x03, 0x08, 0x0308, "big chest first west room" }, - { 0x08, 0x80, 0x0880, "killed second poe (triggers flame getting lit cs)" }, - { 0x08, 0x40, 0x0840, "killed first poe" }, - { 0x08, 0x08, 0x0808, "open gate to spinner in mini-boss room cs" }, - { 0x08, 0x04, 0x0804, "unlock exit in mini-boss room (despawns mini-boss)" }, - { 0x08, 0x01, 0x0801, "unlocked boss door" }, - { 0x09, 0x10, 0x0910, "started pulling chain in second east room 1F (stays set)" }, - { 0x09, 0x04, 0x0904, "stairs to lower east room appeared in main room" }, - { 0x09, 0x02, 0x0902, "risen tracks on pillar before boss" }, - { 0x09, 0x01, 0x0901, "unlocked door in second west room" }, - { 0x0A, 0x10, 0x0A10, "killed second poe (duplicate)" }, - { 0x0A, 0x02, 0x0A02, "Tiny bugs spawn in first room small key area (duplicate)" }, - { 0x0A, 0x01, 0x0A01, "Tiny bugs spawn in first room small key area" }, - { 0x0B, 0x80, 0x0B80, "stairs to lower west room appeared in main room cs" }, - { 0x0B, 0x20, 0x0B20, "turn walls in third room 2B cs" }, - { 0x0B, 0x10, 0x0B10, "turn walls in third room 2B" }, - { 0x0B, 0x08, 0x0B08, "open gates in first room" }, - { 0x0B, 0x04, 0x0B04, "open gates in first room cs" }, - { 0x0B, 0x01, 0x0B01, "Stallord Phase 2" }, - { 0x0C, 0x80, 0x0C80, "killed third poe (triggers flame getting lit cs)" }, - { 0x0C, 0x40, 0x0C40, "Main Hall Dig Spot" }, - { 0x0C, 0x01, 0x0C01, "turned walls in first east room (stays set)" }, - { 0x0D, 0x02, 0x0D02, "turned slab in first east room B1 (stays set)" }, - { 0x0E, 0x10, 0x0E10, "Intro Cutscene" }, - { 0x0F, 0x80, 0x0F80, "unlocked door in second east room 2F" }, - { 0x0F, 0x40, 0x0F40, "open poe door once all poe flames are present (removes poe bodies)" }, - { 0x0F, 0x20, 0x0F20, "poe flame top left present" }, - { 0x0F, 0x10, 0x0F10, "poe flame bottom right present" }, - { 0x0F, 0x08, 0x0F08, "poe flame top right present" }, - { 0x0F, 0x04, 0x0F04, "poe flame bottom left present" }, - { 0x0F, 0x02, 0x0F02, "killed fourth poe (triggers flame getting lit cs)" }, - { 0x0F, 0x01, 0x0F01, "flame from third poe leaving lantern cs" }, - { 0x10, 0x40, 0x1040, "killed third poe (duplicate)" }, - { 0x10, 0x20, 0x1020, "flame from second poe leaving lantern cs" }, - { 0x10, 0x10, 0x1010, "open walls in third east room" }, - { 0x10, 0x08, 0x1008, "unlocked door in elevator room 2B" }, - { 0x10, 0x04, 0x1004, "unlocked door in first room" }, - { 0x10, 0x02, 0x1002, "killed stalfos in second west room" }, - { 0x11, 0x80, 0x1180, "killed gibdo in first east room B1" }, - { 0x11, 0x20, 0x1120, "reach boss door (unset once you enter)" }, - { 0x11, 0x04, 0x1104, "killed third poe (duplicate)" }, - { 0x11, 0x02, 0x1102, "unlock door in second room" }, - { 0x11, 0x01, 0x1101, "lit right torch in second room" }, - { 0x12, 0x80, 0x1280, "lit left torch in second room" }, - { 0x12, 0x40, 0x1240, "close spinner slot for walls in third room 2B" }, - { 0x12, 0x20, 0x1220, "unlocked door in first east room 1F" }, - { 0x12, 0x08, 0x1208, "risen tracks on pillar before boss cs" }, - { 0x12, 0x04, 0x1204, "pushed block in first west room" }, - { 0x12, 0x01, 0x1201, "taken down the cube in the second east room 1F" }, - { 0x13, 0x80, 0x1380, "placed cube at the right spot in the second east room 1F" }, - { 0x13, 0x40, 0x1340, "unlock door in fouth east room" }, - { 0x13, 0x20, 0x1320, "close poe door (unsets after lighting torches)" }, - { 0x13, 0x08, 0x1308, "main room poes taking flames cs" }, - { 0x14, 0x10, 0x1410, "explored first room" }, - { 0x14, 0x08, 0x1408, "open exit door in boss room" }, - { 0x15, 0x80, 0x1580, "Midna Text after defeating boss" }, - { 0x15, 0x08, 0x1508, "killed first stalfos in room before mini-boss" }, - { 0x15, 0x04, 0x1504, "killed second stalfos in room before mini-boss" }, - { 0x15, 0x02, 0x1502, "killed third stalfos in room before mini-boss" }, - { 0x15, 0x01, 0x1501, "extend platform to exit in boss room" }, - { 0x16, 0x80, 0x1680, "open gate to spinner in mini-boss room cs" }, - { 0x16, 0x40, 0x1640, "open gate to spinner in mini-boss room" }, - { 0x16, 0x10, 0x1610, "open wall in third west room cs (unset once you leave)" }, - { 0x16, 0x08, 0x1608, "pulled chain in main room" }, - { 0x16, 0x04, 0x1604, "pulled the chain in first room (triggers cs)" }, - { 0x16, 0x02, 0x1602, "open wall in third west room" }, - { 0x17, 0x40, 0x1740, "killed gibdos in third east room" }, - { 0x17, 0x20, 0x1720, "Ooccoo Rescued" }, - { 0x17, 0x10, 0x1710, "opened gates in room before mini-boss" }, - { 0x17, 0x08, 0x1708, "killed fourth poe (duplicate)" }, - { 0x17, 0x02, 0x1702, "dig spot in third east room" }, - { 0x17, 0x01, 0x1701, "Spinner big chest (set after)" }, +constexpr auto byteIndexToAreaFlagType(uint8_t byteIndex) -> AreaFlagType { + if (byteIndex < 2 * sizeof(u32)) { + return AreaFlagType::Tbox; + } else if (byteIndex < 6 * sizeof(u32)) { + return AreaFlagType::Switch; + } else { + return AreaFlagType::Item; + } +}; + +constexpr auto byteIndexToAreaByteIndex(uint8_t byteIndex) -> uint8_t { + if (byteIndex < 2 * sizeof(u32)) { + return byteIndex; + } else if (byteIndex < 6 * sizeof(u32)) { + return byteIndex - 2 * sizeof(u32); + } else { + return byteIndex - 6 * sizeof(u32); + } +}; + +constexpr auto byteIndexToAreaU32Index(uint8_t byteIndex) -> uint8_t { + return byteIndexToAreaByteIndex(byteIndex) / sizeof(u32); +}; + +constexpr auto eventFlagToAreaFlagFormat(uint16_t eventFlag) -> AreaFlagInd { + constexpr auto makeMask = [](uint8_t size) -> uint16_t { return (1 << size) - 1; }; + constexpr size_t areaIndexSize = 5; + + const auto byteInd = eventFlag >> 8; + const auto eventU32Ind = byteIndexToAreaU32Index(byteInd); + const auto relativeByteInd = byteIndexToAreaByteIndex(byteInd); + // if we're looking at 0x580, that would be byte 5, and check if 0x80 is set on that byte + // the event flags are structured differently than area flags + // B is byte index, b is the flag mask to check + // event flags are BBBBBBBB bbbbbbbb + // for area flags, they check bitIndex, not mask, i is index + // also area uses u32 index, not byte index + // area flags are BBBiiiii + // so we need to convert from bit mask to index + // also our byte index has to become a u32 index + + // dividing byte index by sizeof(u32) gets us the u32 index + // but in big endian, the first byte is the highest order byte of the u32 + // so we skip 24 bytes for the first byte, 16 for the second, etc + // essentially (3 - (x % 4)), reversing the modulus, 0=3, 1=2 + const auto bitsToSkip = 8 * ((sizeof(u32) - 1) - (relativeByteInd % sizeof(u32))); + const int areaFlag = ((eventU32Ind) << areaIndexSize) | + ((std::countr_zero(eventFlag) + bitsToSkip) & makeMask(areaIndexSize)); + + return AreaFlagInd{byteIndexToAreaFlagType(byteInd), areaFlag}; +} + +constexpr AreaFlagInd::AreaFlagInd(uint16_t eventFlag) noexcept { + *this = eventFlagToAreaFlagFormat(eventFlag); +} + +struct AreaFlagMultibit { + constexpr AreaFlagMultibit() noexcept = default; + + constexpr explicit AreaFlagMultibit(uint16_t eventFlagMask) noexcept { + const auto byteIndex = eventFlagMask >> 8; + type = byteIndexToAreaFlagType(byteIndex); + index = byteIndexToAreaU32Index(byteIndex); + mask = (eventFlagMask & 0xff) + << (8 * ((sizeof(u32) - 1) - (byteIndexToAreaByteIndex(byteIndex) % sizeof(u32)))); + shift = std::countr_zero(mask); + } + + constexpr explicit AreaFlagMultibit(uint16_t eventFlagMaskHigh, uint16_t eventFlagMaskLow) { + const uint8_t highByteIndex = eventFlagMaskHigh >> 8; + const uint8_t lowByteIndex = eventFlagMaskLow >> 8; + + assert(byteIndexToAreaU32Index(highByteIndex) == byteIndexToAreaU32Index(lowByteIndex)); + const auto byteIndex = byteIndexToAreaU32Index(highByteIndex); + + assert(highByteIndex + 1 == lowByteIndex); + + const uint8_t eventHighMask = eventFlagMaskHigh & 0xff; + const uint8_t eventLowMask = eventFlagMaskLow & 0xff; + assert(eventHighMask != 0); + assert(eventLowMask != 0); + + assert(eventHighMask & 1); + assert(eventLowMask & 0x80); + + const uint16_t combinedMask = (eventHighMask << 8) | eventLowMask; + + const uint32_t finalMask = + combinedMask << (8 * ((sizeof(u32) - 1) - + (byteIndexToAreaByteIndex(lowByteIndex) % sizeof(u32)))); + + assert(std::has_single_bit( + static_cast(finalMask) + (1 << std::countr_zero(finalMask)))); + + type = byteIndexToAreaFlagType(highByteIndex); + index = byteIndexToAreaU32Index(highByteIndex); + mask = finalMask; + shift = std::countr_zero(finalMask); + } + + constexpr AreaFlagMultibit(AreaFlagType _type, uint32_t _mask, uint8_t _index) noexcept + : type(_type), + mask(_mask), + shift(std::countr_zero(_mask)), + index(_index) {} + + uint32_t mask; + uint8_t index; + uint8_t shift; + AreaFlagType type; +}; + +struct EventAreaFlags { + uint8_t byteIndex; + uint8_t bitIndex; + AreaFlagInd flag; + std::string description; + constexpr uint16_t GetFlagID() const { return (byteIndex << 8) | bitIndex; } +}; + +constexpr AreaFlagInd test{0x0b80}; +static_assert(test.type == AreaFlagType::Switch); +static_assert((test.flagID >> 5) == 0); +static_assert((test.flagID & 0x1f) == 7); + +inline EventAreaFlags eventAreaFlagsAG[] = { + { 0x00, 0x80, AreaFlagInd{0x0080}, "Ooccoo Map Flag" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "fourth small chest epic spinner room" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "third small chest epic spinner room" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "first small chest epic spinner room" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "second small chest epic spinner room" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "PoH first big chest epic spinner room" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "small chest first west room" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "small key big chest elevator room B1" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "small key big chest first room" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "small key small chest fouth east room" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "big key chest" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "PoH right big chest main room" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "map left big chest main room" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "west small chest in second west room" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "north east small chest in second west room" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "Spinner big chest" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "small key small chest first east room B1" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "small key big chest second east room 2F" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "compass big chest second east room 2F" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "big chest first west room" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "killed second poe (triggers flame getting lit cs)" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "killed first poe" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "open gate to spinner in mini-boss room cs" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "unlock exit in mini-boss room (despawns mini-boss)" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "unlocked boss door" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "started pulling chain in second east room 1F (stays set)" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "stairs to lower east room appeared in main room" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "risen tracks on pillar before boss" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "unlocked door in second west room" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "killed second poe (duplicate)" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "Tiny bugs spawn in first room small key area (duplicate)" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "Tiny bugs spawn in first room small key area" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "stairs to lower west room appeared in main room cs" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "turn walls in third room 2B cs" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "turn walls in third room 2B" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "open gates in first room" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "open gates in first room cs" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "Stallord Phase 2" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "killed third poe (triggers flame getting lit cs)" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "Main Hall Dig Spot" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "turned walls in first east room (stays set)" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "turned slab in first east room B1 (stays set)" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "Intro Cutscene" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "unlocked door in second east room 2F" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "open poe door once all poe flames are present (removes poe bodies)" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "poe flame top left present" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "poe flame bottom right present" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "poe flame top right present" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "poe flame bottom left present" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "killed fourth poe (triggers flame getting lit cs)" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "flame from third poe leaving lantern cs" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "killed third poe (duplicate)" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "flame from second poe leaving lantern cs" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "open walls in third east room" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "unlocked door in elevator room 2B" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "unlocked door in first room" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "killed stalfos in second west room" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "killed gibdo in first east room B1" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "reach boss door (unset once you enter)" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "killed third poe (duplicate)" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "unlock door in second room" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "lit right torch in second room" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "lit left torch in second room" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "close spinner slot for walls in third room 2B" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "unlocked door in first east room 1F" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "risen tracks on pillar before boss cs" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "pushed block in first west room" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "taken down the cube in the second east room 1F" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "placed cube at the right spot in the second east room 1F" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "unlock door in fouth east room" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "close poe door (unsets after lighting torches)" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "main room poes taking flames cs" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "explored first room" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "open exit door in boss room" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "Midna Text after defeating boss" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "killed first stalfos in room before mini-boss" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "killed second stalfos in room before mini-boss" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "killed third stalfos in room before mini-boss" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "extend platform to exit in boss room" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "open gate to spinner in mini-boss room cs" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "open gate to spinner in mini-boss room" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "open wall in third west room cs (unset once you leave)" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "pulled chain in main room" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "pulled the chain in first room (triggers cs)" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "open wall in third west room" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "killed gibdos in third east room" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "Ooccoo Rescued" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "opened gates in room before mini-boss" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "killed fourth poe (duplicate)" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "dig spot in third east room" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "Spinner big chest (set after)" }, }; inline EventAreaFlags eventAreaFlagsCastleTown[] = { - { 0x03, 0x02, 0x0302, "small chest on doctor's balcony" }, - { 0x06, 0x10, 0x0610, "tear of light next to Telma's bar" }, - { 0x08, 0x80, 0x0880, "killed poe in Jovani's house (set if you dig into the house)" }, - { 0x08, 0x04, 0x0804, "explored 3nd room Jovani-Sewers " }, - { 0x08, 0x02, 0x0802, "explored 2nd room Jovani-Sewers " }, - { 0x08, 0x01, 0x0801, "?" }, - { 0x09, 0x80, 0x0980, "?" }, - { 0x09, 0x40, 0x0940, "?" }, - { 0x09, 0x20, 0x0920, "?" }, - { 0x09, 0x02, 0x0902, "intro cs twlight" }, - { 0x09, 0x01, 0x0901, "midna text after listening to Telma and Ilia spirits during twilight" }, - { 0x0A, 0x80, 0x0A80, "midna breaking castle barrier cs" }, - { 0x0A, 0x20, 0x0A20, "warp you to Lanayru spring (trigger twilight end)" }, - { 0x0A, 0x10, 0x0A10, "fan girl text next to star tent" }, - { 0x0A, 0x04, 0x0A04, "star tent intro cs" }, - { 0x0A, 0x02, 0x0A02, "invisible wall behind doctor gone" }, - { 0x0A, 0x01, 0x0A01, "?" }, - { 0x0B, 0x80, 0x0B80, "water is back in town (twilight)" }, - { 0x0B, 0x40, 0x0B40, "explored east alley that leads south" }, - { 0x0B, 0x20, 0x0B20, "star tent has double clawshot mini-game" }, - { 0x0B, 0x10, 0x0B10, "explored area with star tent" }, - { 0x0B, 0x08, 0x0B08, "explored alley with entrance to Jovani's house" }, - { 0x0B, 0x04, 0x0B04, "explored alley with entrance to agitha's house" }, - { 0x0B, 0x02, 0x0B02, "explored area with entrance to Telma's bar" }, - { 0x0B, 0x01, 0x0B01, "STAR 1 Completed" }, - { 0x0D, 0x04, 0x0D04, "map marker hero's shade" }, - { 0x0E, 0x10, 0x0E10, "malo mart posters on shop" }, - { 0x0E, 0x08, 0x0E08, "magic armor bought malo mart" }, - { 0x0E, 0x04, 0x0E04, "?" }, - { 0x0E, 0x02, 0x0E02, "enter Telma's bar from top intro cs" }, - { 0x0E, 0x01, 0x0E01, "first right door to castle pushed once (default)" }, - { 0x0F, 0x80, 0x0F80, "first left door to castle pushed once (default)" }, - { 0x0F, 0x40, 0x0F40, "first right door to castle pushed twice" }, - { 0x0F, 0x20, 0x0F20, "first right door to castle half closed" }, - { 0x0F, 0x10, 0x0F10, "first left door to castle closed" }, - { 0x0F, 0x08, 0x0F08, "first left door to castle pushed twice" }, - { 0x0F, 0x04, 0x0F04, "Jovani's house intro cs" }, - { 0x0F, 0x02, 0x0F02, "Jovani text after killing poe" }, - { 0x0F, 0x01, 0x0F01, "open path to sewers (Jovani's house)" }, - { 0x10, 0x80, 0x1080, "?" }, - { 0x16, 0x80, 0x1680, "killed light bug next to Telma's bar" }, - { 0x17, 0x08, 0x1708, "Gengle free (Jovani's house)" }, - { 0x17, 0x04, 0x1704, "Midna opens map to look for the last light bug" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "small chest on doctor's balcony" }, + { 0x06, 0x10, AreaFlagInd{0x0610}, "tear of light next to Telma's bar" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "killed poe in Jovani's house (set if you dig into the house)" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "explored 3nd room Jovani-Sewers " }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "explored 2nd room Jovani-Sewers " }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "?" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "?" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "?" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "?" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "intro cs twlight" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "midna text after listening to Telma and Ilia spirits during twilight" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "midna breaking castle barrier cs" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "warp you to Lanayru spring (trigger twilight end)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "fan girl text next to star tent" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "star tent intro cs" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "invisible wall behind doctor gone" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "?" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "water is back in town (twilight)" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "explored east alley that leads south" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "star tent has double clawshot mini-game" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "explored area with star tent" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "explored alley with entrance to Jovani's house" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "explored alley with entrance to agitha's house" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "explored area with entrance to Telma's bar" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "STAR 1 Completed" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "map marker hero's shade" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "malo mart posters on shop" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "magic armor bought malo mart" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "?" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "enter Telma's bar from top intro cs" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "first right door to castle pushed once (default)" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "first left door to castle pushed once (default)" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "first right door to castle pushed twice" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "first right door to castle half closed" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "first left door to castle closed" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "first left door to castle pushed twice" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "Jovani's house intro cs" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "Jovani text after killing poe" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "open path to sewers (Jovani's house)" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "?" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "killed light bug next to Telma's bar" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "Gengle free (Jovani's house)" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "Midna opens map to look for the last light bug" }, }; inline EventAreaFlags eventAreaFlagsCitS[] = { - { 0x00, 0x08, 0x0008, "south east underwater big chest outside shop" }, - { 0x00, 0x04, 0x0004, "big chest east wing second room 2F" }, - { 0x00, 0x02, 0x0002, "big chest west wing main room 2F" }, - { 0x00, 0x01, 0x0001, "small chest main room 4F outside" }, - { 0x01, 0x80, 0x0180, "small chest west wing north room 2F" }, - { 0x01, 0x40, 0x0140, "center small chest west wing main room 1F" }, - { 0x01, 0x20, 0x0120, "small chest west wing main room B1" }, - { 0x01, 0x10, 0x0110, "north east small chest west wing main room 1F" }, - { 0x01, 0x08, 0x0108, "small chest east wing second room 1F" }, - { 0x01, 0x04, 0x0104, "small chest east wing second room 2F" }, - { 0x01, 0x02, 0x0102, "big chest ouside north wing" }, - { 0x02, 0x80, 0x0280, "small chest west wing main room 3F" }, - { 0x02, 0x40, 0x0240, "small chest main room 3F inside" }, - { 0x02, 0x20, 0x0220, "big key chest" }, - { 0x02, 0x10, 0x0210, "big chest main room 4F outside" }, - { 0x02, 0x08, 0x0208, "small chest west wing main room 2F" }, - { 0x02, 0x02, 0x0202, "PoH big chest west wing main room 3F" }, - { 0x03, 0x80, 0x0380, "small chest west wing north room 3F" }, - { 0x03, 0x40, 0x0340, "PoH big chest west wing north room 2F" }, - { 0x03, 0x20, 0x0320, "small key big chest west wing main room 1F" }, - { 0x03, 0x10, 0x0310, "compass big chest east wing first room B1" }, - { 0x03, 0x08, 0x0308, "south west underwater big chest outside shop" }, - { 0x03, 0x04, 0x0304, "map big chest east wing fourth room 1F" }, - { 0x03, 0x01, 0x0301, "double clawshot big chest east wing fifth room B3" }, - { 0x08, 0x80, 0x0880, "turn on wind in east wing second room 2F" }, - { 0x08, 0x40, 0x0840, "open gate in east wing second room 2F" }, - { 0x08, 0x20, 0x0820, "explored west wing main room 1F (unset if you enter main room)" }, - { 0x08, 0x10, 0x0810, "explored east wing first room 1F (unset if you enter main room)" }, - { 0x08, 0x04, 0x0804, "killed big baba west wing north room 1F" }, - { 0x08, 0x02, 0x0802, "double clawshot big chest east wing fifth room B3 (set after)" }, - { 0x08, 0x01, 0x0801, "west bridge broken" }, - { 0x09, 0x80, 0x0980, "east wing fifth room B3 intro cs" }, - { 0x09, 0x40, 0x0940, "open gate in east wing third room 2F" }, - { 0x09, 0x20, 0x0920, "spawn baba serpants under east bridge" }, - { 0x09, 0x08, 0x0908, "extended east bridge (spinner slot needs to be closed)" }, - { 0x09, 0x04, 0x0904, "extended west bridge (spinner slot needs to be closed)" }, - { 0x09, 0x02, 0x0902, "small key big chest west wing main room 1F (set after)" }, - { 0x0A, 0x80, 0x0A80, "explored main room 1F" }, - { 0x0A, 0x20, 0x0A20, "turn on wind in east wing third room 2F" }, - { 0x0A, 0x10, 0x0A10, "open door in east wing third room 1F" }, - { 0x0A, 0x04, 0x0A04, "fan on ceiling of main room active" }, - { 0x0A, 0x02, 0x0A02, "open gate in east wing fourth room 1F" }, - { 0x0B, 0x80, 0x0B80, "unlock boss door" }, - { 0x0B, 0x40, 0x0B40, "unlock east bridge door 1F" }, - { 0x0B, 0x08, 0x0B08, "east bridge extended (close east spinner slot)" }, - { 0x0B, 0x04, 0x0B04, "west bridge extended (close west spinner slot)" }, - { 0x0B, 0x02, 0x0B02, "open gate outside shop" }, - { 0x0C, 0x08, 0x0C08, "north wing main room intro cs" }, - { 0x0C, 0x04, 0x0C04, "east wing fourth room 2F intro cs" }, - { 0x0C, 0x02, 0x0C02, "went beyond first gate outside shop intro cs" }, - { 0x0C, 0x01, 0x0C01, "Intro CS" }, - { 0x0D, 0x80, 0x0D80, "killed left dynalfos in east wing third room 1F" }, - { 0x0D, 0x40, 0x0D40, "killed right dynalfos in east wing third room 1F" }, - { 0x0D, 0x20, 0x0D20, "?" }, - { 0x0D, 0x10, 0x0D10, "west bridge destroyed cs (triggered when you have a key)" }, - { 0x0D, 0x08, 0x0D08, "killed helmasaurus in main room 1F" }, - { 0x0D, 0x04, 0x0D04, "west bridge extented cs" }, - { 0x0D, 0x02, 0x0D02, "east bridge extented cs" }, - { 0x0E, 0x01, 0x0E01, "small key big chest west wing main room 1F (set after)" }, - { 0x0F, 0x80, 0x0F80, "exited dungeon with midna warp" }, - { 0x0F, 0x40, 0x0F40, "exited dungeon with midna warp" }, - { 0x0F, 0x20, 0x0F20, "save promt after boss" }, - { 0x0F, 0x10, 0x0F10, "open gate in west wing main room B2" }, - { 0x0F, 0x08, 0x0F08, "killed left aeralfos in north wing main room 1F" }, - { 0x0F, 0x04, 0x0F04, "killed right aeralfos in north wing main room 1F" }, - { 0x0F, 0x02, 0x0F02, "open gate in east wing fifth room B3" }, - { 0x0F, 0x01, 0x0F01, "stop fan in east wing fifth room B3" }, - { 0x10, 0x80, 0x1080, "killed third baba serpant under east bridge" }, - { 0x10, 0x10, 0x1010, "killed third tile worm in east wing second room 1F" }, - { 0x10, 0x08, 0x1008, "killed second tile worm in east wing second room 1F" }, - { 0x10, 0x04, 0x1004, "killed first tile worm in east wing second room 1F" }, - { 0x11, 0x20, 0x1120, "killed poe in main room 4F outside" }, - { 0x11, 0x10, 0x1110, "killed poe in west wing main room 2F" }, - { 0x12, 0x20, 0x1220, "small key big chest west wing main room 1F (set after)" }, - { 0x12, 0x02, 0x1202, "latched on to first pillar in east wing first room B2" }, - { 0x13, 0x40, 0x1340, "open door in east wing fifth room B3" }, - { 0x13, 0x10, 0x1310, "?" }, - { 0x15, 0x10, 0x1510, "activate north path fan " }, - { 0x17, 0x40, 0x1740, "killed east dynalfos in main room 3F outside" }, - { 0x17, 0x20, 0x1720, "killed north dynalfos in main room 3F outside" }, - { 0x17, 0x10, 0x1710, "killed dynalfos in west wing north room 3F" }, - { 0x17, 0x08, 0x1708, "killed first baba serpent in path to east spinner slot" }, - { 0x17, 0x04, 0x1704, "killed second baba serpent in path to east spinner slot" }, - { 0x17, 0x02, 0x1702, "killed first baba serpant under east bridge" }, - { 0x17, 0x01, 0x1701, "killed second baba serpant under east bridge" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "south east underwater big chest outside shop" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "big chest east wing second room 2F" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "big chest west wing main room 2F" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "small chest main room 4F outside" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "small chest west wing north room 2F" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "center small chest west wing main room 1F" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "small chest west wing main room B1" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "north east small chest west wing main room 1F" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "small chest east wing second room 1F" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "small chest east wing second room 2F" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "big chest ouside north wing" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "small chest west wing main room 3F" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "small chest main room 3F inside" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "big key chest" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "big chest main room 4F outside" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "small chest west wing main room 2F" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "PoH big chest west wing main room 3F" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small chest west wing north room 3F" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "PoH big chest west wing north room 2F" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "small key big chest west wing main room 1F" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "compass big chest east wing first room B1" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "south west underwater big chest outside shop" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "map big chest east wing fourth room 1F" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "double clawshot big chest east wing fifth room B3" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "turn on wind in east wing second room 2F" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "open gate in east wing second room 2F" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "explored west wing main room 1F (unset if you enter main room)" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "explored east wing first room 1F (unset if you enter main room)" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "killed big baba west wing north room 1F" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "double clawshot big chest east wing fifth room B3 (set after)" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "west bridge broken" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "east wing fifth room B3 intro cs" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "open gate in east wing third room 2F" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "spawn baba serpants under east bridge" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "extended east bridge (spinner slot needs to be closed)" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "extended west bridge (spinner slot needs to be closed)" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "small key big chest west wing main room 1F (set after)" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "explored main room 1F" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "turn on wind in east wing third room 2F" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "open door in east wing third room 1F" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "fan on ceiling of main room active" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "open gate in east wing fourth room 1F" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "unlock boss door" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "unlock east bridge door 1F" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "east bridge extended (close east spinner slot)" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "west bridge extended (close west spinner slot)" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "open gate outside shop" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "north wing main room intro cs" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "east wing fourth room 2F intro cs" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "went beyond first gate outside shop intro cs" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "Intro CS" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "killed left dynalfos in east wing third room 1F" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "killed right dynalfos in east wing third room 1F" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "?" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "west bridge destroyed cs (triggered when you have a key)" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "killed helmasaurus in main room 1F" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "west bridge extented cs" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "east bridge extented cs" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "small key big chest west wing main room 1F (set after)" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "exited dungeon with midna warp" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "exited dungeon with midna warp" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "save promt after boss" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "open gate in west wing main room B2" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "killed left aeralfos in north wing main room 1F" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "killed right aeralfos in north wing main room 1F" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "open gate in east wing fifth room B3" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "stop fan in east wing fifth room B3" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "killed third baba serpant under east bridge" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "killed third tile worm in east wing second room 1F" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "killed second tile worm in east wing second room 1F" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "killed first tile worm in east wing second room 1F" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "killed poe in main room 4F outside" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "killed poe in west wing main room 2F" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "small key big chest west wing main room 1F (set after)" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "latched on to first pillar in east wing first room B2" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "open door in east wing fifth room B3" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "?" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "activate north path fan " }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "killed east dynalfos in main room 3F outside" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "killed north dynalfos in main room 3F outside" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "killed dynalfos in west wing north room 3F" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "killed first baba serpent in path to east spinner slot" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "killed second baba serpent in path to east spinner slot" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "killed first baba serpant under east bridge" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "killed second baba serpant under east bridge" }, }; inline EventAreaFlags eventAreaFlagsCoO[] = { - { 0x03, 0x01, 0x0301, "big chest Lanayru Ice Puzzle" }, - { 0x04, 0x80, 0x0480, "big chest right right right path Eldin Long Cave" }, - { 0x04, 0x40, 0x0440, "big chest right right left right path Eldin Long Cave" }, - { 0x04, 0x20, 0x0420, "small chest left right path Eldin Long Cave" }, - //{ 0x08, 0x80, 0x0880, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x40, 0x0840, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x20, 0x0820, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x10, 0x0810, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x08, 0x0808, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x04, 0x0804, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x02, 0x0802, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x08, 0x01, 0x0801, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x09, 0x80, 0x0980, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x09, 0x40, 0x0940, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x09, 0x20, 0x0920, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x09, 0x10, 0x0910, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, - //{ 0x09, 0x04, 0x0904, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x09, 0x02, 0x0902, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x09, 0x01, 0x0901, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0A, 0x80, 0x0A80, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0A, 0x20, 0x0A20, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0A, 0x10, 0x0A10, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0A, 0x08, 0x0A08, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0A, 0x04, 0x0A04, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0B, 0x08, 0x0B08, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0B, 0x04, 0x0B04, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0B, 0x02, 0x0B02, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, - //{ 0x0B, 0x01, 0x0B01, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, - { 0x0D, 0x10, 0x0D10, "broke right ice blocking first doorway in Lanayru Ice Puzzle" }, - { 0x0D, 0x08, 0x0D08, "broke left ice blocking first doorway in Lanayru Ice Puzzle" }, - { 0x0D, 0x04, 0x0D04, "open fourth gate in Lanayru Ice Puzzle" }, - { 0x0D, 0x02, 0x0D02, "open third gate in Lanayru Ice Puzzle" }, - { 0x0D, 0x01, 0x0D01, "open second gate in Lanayru Ice Puzzle" }, - { 0x0E, 0x80, 0x0E80, "open first gate in Lanayru Ice Puzzle" }, - //{ 0x0E, 0x40, 0x0E40, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0E, 0x20, 0x0E20, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0E, 0x10, 0x0E10, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0E, 0x08, 0x0E08, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0E, 0x04, 0x0E04, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0E, 0x02, 0x0E02, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0E, 0x01, 0x0E01, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x80, 0x0F80, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x40, 0x0F40, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x20, 0x0F20, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x10, 0x0F10, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x08, 0x0F08, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x04, 0x0F04, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x02, 0x0F02, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, - //{ 0x0F, 0x01, 0x0F01, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, - { 0x10, 0x80, 0x1080, "spawn big chest right right left right path Eldin Long Cave" }, - { 0x10, 0x40, 0x1040, "lit torch 3 (right right right path) Eldin Long Cave" }, - { 0x13, 0x80, 0x1380, "killed poe on floor 44 in Cave of Ordeals" }, - { 0x13, 0x40, 0x1340, "killed poe on floor 33 in Cave of Ordeals" }, - { 0x13, 0x20, 0x1320, "killed poe on floor 17 in Cave of Ordeals" }, - { 0x13, 0x08, 0x1308, "Cave of Ordeals intro cs" }, - { 0x13, 0x04, 0x1304, "obtained fairy's tears (if unset, you can get it even if you already have some) (also spawns that extra darknut on floor 49)" }, - { 0x13, 0x02, 0x1302, "open floor 1 door in Cave of Ordeals cs" }, - { 0x13, 0x01, 0x1301, "broke ice on floor 21 in Cave of Ordeals" }, - { 0x14, 0x40, 0x1440, "explored section 2 right right left right path Eldin Long Cave" }, - { 0x14, 0x20, 0x1420, "explored section 1 right right left right path Eldin Long Cave" }, - { 0x14, 0x10, 0x1410, "explored section 2 right right left left path Eldin Long Cave" }, - { 0x14, 0x08, 0x1408, "explored section 1 right right left left path Eldin Long Cave" }, - { 0x14, 0x04, 0x1404, "explored section 3 right right left path Eldin Long Cave" }, - { 0x14, 0x02, 0x1402, "explored section 2 right right left path Eldin Long Cave" }, - { 0x14, 0x01, 0x1401, "explored section 1 right right left path Eldin Long Cave" }, - { 0x15, 0x80, 0x1580, "explored section 2 right right right path Eldin Long Cave" }, - { 0x15, 0x40, 0x1540, "explored section 1 right right right path Eldin Long Cave" }, - { 0x15, 0x20, 0x1520, "explored section 3 right right path Eldin Long Cave" }, - { 0x15, 0x10, 0x1510, "explored section 2 right right path Eldin Long Cave" }, - { 0x15, 0x08, 0x1508, "explored section 1 right right path Eldin Long Cave" }, - { 0x15, 0x04, 0x1504, "explored section 1 right left path Eldin Long Cave" }, - { 0x15, 0x02, 0x1502, "explored section 6 right path Eldin Long Cave" }, - { 0x15, 0x01, 0x1501, "explored section 5 right path Eldin Long Cave" }, - { 0x16, 0x80, 0x1680, "explored section 4 right path Eldin Long Cave" }, - { 0x16, 0x40, 0x1640, "explored section 3 right path Eldin Long Cave" }, - { 0x16, 0x20, 0x1620, "explored section 2 right path Eldin Long Cave" }, - { 0x16, 0x10, 0x1610, "explored section 1 right path Eldin Long Cave" }, - { 0x16, 0x08, 0x1608, "explored section 2 left right path Eldin Long Cave" }, - { 0x16, 0x04, 0x1604, "explored section 1 right right path Eldin Long Cave" }, - { 0x16, 0x02, 0x1602, "explored section 2 left left path Eldin Long Cave" }, - { 0x16, 0x01, 0x1601, "explored section 1 right right path Eldin Long Cave" }, - { 0x17, 0x80, 0x1780, "explored section 2 left path Eldin Long Cave" }, - { 0x17, 0x40, 0x1740, "explored section 1 right path Eldin Long Cave" }, - { 0x17, 0x20, 0x1720, "explored section 2 Eldin Long Cave" }, - { 0x17, 0x10, 0x1710, "explored section 1 Eldin Long Cave" }, - { 0x17, 0x08, 0x1708, "lit torch 2 (right path) Eldin Long Cave" }, - { 0x17, 0x04, 0x1704, "lit left torch right right left right path Eldin Long Cave" }, - { 0x17, 0x02, 0x1702, "lit right torch right right left right path Eldin Long Cave" }, - { 0x17, 0x01, 0x1701, "killed poe right right left left path Eldin Long Cave" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "big chest Lanayru Ice Puzzle" }, + { 0x04, 0x80, AreaFlagInd{0x0480}, "big chest right right right path Eldin Long Cave" }, + { 0x04, 0x40, AreaFlagInd{0x0440}, "big chest right right left right path Eldin Long Cave" }, + { 0x04, 0x20, AreaFlagInd{0x0420}, "small chest left right path Eldin Long Cave" }, + //{ 0x08, 0x80, AreaFlagInd{0x0880}, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x40, AreaFlagInd{0x0840}, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x20, AreaFlagInd{0x0820}, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x10, AreaFlagInd{0x0810}, "position of block 1 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x08, AreaFlagInd{0x0808}, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x04, AreaFlagInd{0x0804}, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x02, AreaFlagInd{0x0802}, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x08, 0x01, AreaFlagInd{0x0801}, "position of block 2 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x09, 0x80, AreaFlagInd{0x0980}, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x09, 0x40, AreaFlagInd{0x0940}, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x09, 0x20, AreaFlagInd{0x0920}, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x09, 0x10, AreaFlagInd{0x0910}, "position of block 3 puzzle 2 Lanayru Ice Puzzle" }, + //{ 0x09, 0x04, AreaFlagInd{0x0904}, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x09, 0x02, AreaFlagInd{0x0902}, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x09, 0x01, AreaFlagInd{0x0901}, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0A, 0x80, AreaFlagInd{0x0A80}, "position of block 1 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0A, 0x20, AreaFlagInd{0x0A20}, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0A, 0x10, AreaFlagInd{0x0A10}, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0A, 0x08, AreaFlagInd{0x0A08}, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0A, 0x04, AreaFlagInd{0x0A04}, "position of block 2 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0B, 0x08, AreaFlagInd{0x0B08}, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0B, 0x04, AreaFlagInd{0x0B04}, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0B, 0x02, AreaFlagInd{0x0B02}, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, + //{ 0x0B, 0x01, AreaFlagInd{0x0B01}, "position of block 3 puzzle 1 Lanayru Ice Puzzle" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "broke right ice blocking first doorway in Lanayru Ice Puzzle" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "broke left ice blocking first doorway in Lanayru Ice Puzzle" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "open fourth gate in Lanayru Ice Puzzle" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "open third gate in Lanayru Ice Puzzle" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "open second gate in Lanayru Ice Puzzle" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "open first gate in Lanayru Ice Puzzle" }, + //{ 0x0E, 0x40, AreaFlagInd{0x0E40}, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0E, 0x20, AreaFlagInd{0x0E20}, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0E, 0x10, AreaFlagInd{0x0E10}, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0E, 0x08, AreaFlagInd{0x0E08}, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0E, 0x04, AreaFlagInd{0x0E04}, "position of block 1 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0E, 0x02, AreaFlagInd{0x0E02}, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0E, 0x01, AreaFlagInd{0x0E01}, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x80, AreaFlagInd{0x0F80}, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x40, AreaFlagInd{0x0F40}, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x20, AreaFlagInd{0x0F20}, "position of block 2 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x10, AreaFlagInd{0x0F10}, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x08, AreaFlagInd{0x0F08}, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x04, AreaFlagInd{0x0F04}, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x02, AreaFlagInd{0x0F02}, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, + //{ 0x0F, 0x01, AreaFlagInd{0x0F01}, "position of block 3 puzzle 3 Lanayru Ice Puzzle" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "spawn big chest right right left right path Eldin Long Cave" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "lit torch 3 (right right right path) Eldin Long Cave" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "killed poe on floor 44 in Cave of Ordeals" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "killed poe on floor 33 in Cave of Ordeals" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "killed poe on floor 17 in Cave of Ordeals" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "Cave of Ordeals intro cs" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "obtained fairy's tears (if unset, you can get it even if you already have some) (also spawns that extra darknut on floor 49)" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "open floor 1 door in Cave of Ordeals cs" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "broke ice on floor 21 in Cave of Ordeals" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "explored section 2 right right left right path Eldin Long Cave" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "explored section 1 right right left right path Eldin Long Cave" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "explored section 2 right right left left path Eldin Long Cave" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "explored section 1 right right left left path Eldin Long Cave" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "explored section 3 right right left path Eldin Long Cave" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "explored section 2 right right left path Eldin Long Cave" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "explored section 1 right right left path Eldin Long Cave" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "explored section 2 right right right path Eldin Long Cave" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "explored section 1 right right right path Eldin Long Cave" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "explored section 3 right right path Eldin Long Cave" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "explored section 2 right right path Eldin Long Cave" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "explored section 1 right right path Eldin Long Cave" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "explored section 1 right left path Eldin Long Cave" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "explored section 6 right path Eldin Long Cave" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "explored section 5 right path Eldin Long Cave" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "explored section 4 right path Eldin Long Cave" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "explored section 3 right path Eldin Long Cave" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "explored section 2 right path Eldin Long Cave" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "explored section 1 right path Eldin Long Cave" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "explored section 2 left right path Eldin Long Cave" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "explored section 1 right right path Eldin Long Cave" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "explored section 2 left left path Eldin Long Cave" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "explored section 1 right right path Eldin Long Cave" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "explored section 2 left path Eldin Long Cave" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "explored section 1 right path Eldin Long Cave" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "explored section 2 Eldin Long Cave" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "explored section 1 Eldin Long Cave" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "lit torch 2 (right path) Eldin Long Cave" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "lit left torch right right left right path Eldin Long Cave" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "lit right torch right right left right path Eldin Long Cave" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "killed poe right right left left path Eldin Long Cave" }, }; inline EventAreaFlags eventAreaFlagsEldin[] = { - { 0x00, 0x01, 0x0001, "Big chest from torches graveyard" }, - { 0x01, 0x80, 0x0180, "Small chest in the inn" }, - { 0x01, 0x40, 0x0140, "PoH big chest death mountain archer alcove" }, - { 0x01, 0x20, 0x0120, "PoH big chest underwater behind spring" }, - { 0x01, 0x10, 0x0110, "Big chest next to watch tower" }, - { 0x01, 0x04, 0x0104, "?" }, - { 0x01, 0x02, 0x0102, "Big chest watch house" }, - { 0x01, 0x01, 0x0101, "tear of light death mountain hot spring water" }, - { 0x02, 0x80, 0x0280, "tear of light next to howling stone death mountain " }, - { 0x02, 0x40, 0x0240, "tear of light death mountain base" }, - { 0x02, 0x10, 0x0210, "tear of light sancuary basement" }, - { 0x02, 0x08, 0x0208, "tear of light Barnes storage house" }, - { 0x02, 0x04, 0x0204, "tear of light watch tower" }, - { 0x02, 0x02, 0x0202, "tear of light at Malo mart" }, - { 0x02, 0x01, 0x0201, "tear of light inn fire room" }, - { 0x03, 0x80, 0x0380, "tear of light Barnes shop" }, - { 0x03, 0x40, 0x0340, "tear of light graveyard" }, - { 0x03, 0x20, 0x0320, "tear of light Barnes storage house" }, - { 0x03, 0x10, 0x0310, "tear of light Barnes storage house" }, - { 0x03, 0x08, 0x0308, "tear of light sancuary basement" }, - { 0x03, 0x04, 0x0304, "tear of light sancuary basement" }, - { 0x03, 0x02, 0x0302, "tear of light ant house" }, - { 0x03, 0x01, 0x0301, "tear of light inn back room" }, - { 0x08, 0x80, 0x0880, "Kakariko Village Portal" }, - { 0x08, 0x40, 0x0840, "kakariko shadow beasts barrier appears (unset after fight)" }, - { 0x08, 0x20, 0x0820, "DM big rock fell" }, - { 0x08, 0x10, 0x0810, "done midna jumps 4 death mountain (hot spring water)" }, - { 0x08, 0x08, 0x0808, "done midna jumps 3 death mountain (1st floor)" }, - { 0x08, 0x04, 0x0804, "killed death mountain shadow beasts cs (unset later?)" }, - { 0x08, 0x01, 0x0801, "done midna jumps 1 death mountain (entrance)" }, - { 0x09, 0x80, 0x0980, "Malo mart has banners inside" }, - { 0x09, 0x40, 0x0940, "DM proper human intro CS (Map marker GM)" }, - { 0x09, 0x20, 0x0920, "Death Mountain Portal" }, - { 0x09, 0x10, 0x0910, "death mountain dark beasts barrier appears" }, - { 0x09, 0x08, 0x0908, "?" }, - { 0x09, 0x04, 0x0904, "?" }, - { 0x09, 0x02, 0x0902, "killed HV bublins (unset when cats spawn)" }, - { 0x09, 0x01, 0x0901, "killed light bug death mountain hot spring water" }, - { 0x0A, 0x80, 0x0A80, "killed light bug next to howling stone death mountain " }, - { 0x0A, 0x40, 0x0A40, "killed light bug death mountain base" }, - { 0x0A, 0x20, 0x0A20, "trigger twilight end cs (vessel of light filled) (Hot Spring Water Present on map)" }, - { 0x0A, 0x10, 0x0A10, "killed light bug sancuary basement" }, - { 0x0A, 0x04, 0x0A04, "killed light bug watch tower" }, - { 0x0A, 0x02, 0x0A02, "killed light bug malo mart" }, - { 0x0A, 0x01, 0x0A01, "killed light bug inn fire room" }, - { 0x0B, 0x80, 0x0B80, "killed light bug Barnes shop" }, - { 0x0B, 0x40, 0x0B40, "killed light bug graveyard" }, - { 0x0B, 0x08, 0x0B08, "killed light bug sancuary basement" }, - { 0x0B, 0x04, 0x0B04, "killed light bug sancuary basement" }, - { 0x0B, 0x02, 0x0B02, "killed light bug ant house" }, - { 0x0B, 0x01, 0x0B01, "killed light bug inn bedroom" }, - { 0x0C, 0x80, 0x0C80, "saw light bug enter Barnes storage house twilight cs" }, - { 0x0C, 0x40, 0x0C40, "malo mart sells hawkeye (moves potion to the right) (set when starting bow mini-game)" }, - { 0x0C, 0x20, 0x0C20, "malo mart sells arrows" }, - { 0x0C, 0x10, 0x0C10, "broke sanctuary roof patch during twilight (duplicate)" }, - { 0x0C, 0x08, 0x0C08, "box moved ant house (spawns light bug)" }, - { 0x0C, 0x04, 0x0C04, "Unknown crashes if rocks are pushed" }, - { 0x0C, 0x02, 0x0C02, "malo mart hylian shield bought" }, - { 0x0C, 0x01, 0x0C01, "ant house explored" }, - { 0x0D, 0x80, 0x0D80, "entered sanctuary from roof during twilight" }, - { 0x0D, 0x40, 0x0D40, "enter Barnes shop through the window in twilight cs" }, - { 0x0D, 0x20, 0x0D20, "light bug comes out of box in ant house cs" }, - { 0x0D, 0x10, 0x0D10, "spawn PoH cat mini game hidden village" }, - { 0x0D, 0x08, 0x0D08, "malo mart hawkeye sold out (needs to be set for arrows to show up)" }, - { 0x0D, 0x04, 0x0D04, "lit all torches in sanctuary twilight (opens basment)" }, - { 0x0D, 0x02, 0x0D02, "light bug in inn fireplace jumps out cs" }, - { 0x0D, 0x01, 0x0D01, "lit inn fireplace" }, - { 0x0E, 0x80, 0x0E80, "knocked down dresser in Barnes shop twilight cs" }, - { 0x0E, 0x40, 0x0E40, "?" }, - { 0x0E, 0x20, 0x0E20, "? (malo mart explored)" }, - { 0x0E, 0x10, 0x0E10, "lit west torch in sanctuary twilight" }, - { 0x0E, 0x08, 0x0E08, "lit north east torch in sanctuary twilight" }, - { 0x0E, 0x04, 0x0E04, "lit east torch in sanctuary twilight" }, - { 0x0E, 0x02, 0x0E02, "lit north west torch in sanctuary twilight" }, - { 0x0F, 0x80, 0x0F80, "broke ant house roof patch (duplicate)" }, - { 0x0F, 0x40, 0x0F40, "moved death mountain rock to exit" }, - { 0x0F, 0x20, 0x0F20, "Eldin spirit talks to Link after getting kakariko Portal cs" }, - { 0x0F, 0x10, 0x0F10, "broke ant house roof patch" }, - { 0x0F, 0x08, 0x0F08, "broke window of Barnes shop twilight" }, - { 0x0F, 0x04, 0x0F04, "broke sanctuary roof patch during twilight" }, - { 0x0F, 0x02, 0x0F02, "Renado talks to Link after trying to go up death mountain trail" }, - { 0x0F, 0x01, 0x0F01, "killed kakariko shadow beasts cs" }, - { 0x10, 0x80, 0x1080, "Killed poe watch tower" }, - { 0x10, 0x40, 0x1040, "Killed poe Barnes storage house" }, - { 0x10, 0x20, 0x1020, "blown up rock underwater to lake hylia from graveward" }, - { 0x10, 0x10, 0x1010, "Graveyard intro cs" }, - { 0x10, 0x08, 0x1008, "explored zora tombstone area" }, - { 0x10, 0x04, 0x1004, "broke floor patch in graveyard during twilight" }, - { 0x10, 0x02, 0x1002, "Killed poe death mountain" }, - { 0x10, 0x01, 0x1001, "Killed poe graveyard center" }, - { 0x11, 0x80, 0x1180, "Killed poe graveyard tombstone" }, - { 0x11, 0x40, 0x1140, "gorons in kakariko hot spring water gone" }, - { 0x11, 0x20, 0x1120, "Map Marker Sanctuary" }, - { 0x11, 0x08, 0x1108, "Midna text after DM big rock fell" }, - { 0x11, 0x04, 0x1104, "done midna jumps 2 death mountain (base floor)" }, - { 0x11, 0x02, 0x1102, "death mountain proper intro cs twilight" }, - { 0x11, 0x01, 0x1101, "moved death mountain rock to hot spring water" }, - { 0x12, 0x80, 0x1280, "sanctuary basement canon room explored" }, - { 0x12, 0x40, 0x1240, "done Midna jumps in sanctuary basement" }, - { 0x12, 0x20, 0x1220, "Midna text before Midna jumps in sanctuary basement" }, - { 0x12, 0x10, 0x1210, "sanctuary twilight cs" }, - { 0x12, 0x08, 0x1208, "killed right shadow bulblin inside inn twilight" }, - { 0x12, 0x04, 0x1204, "killed left shadow bulblin inside inn twilight" }, - { 0x12, 0x02, 0x1202, "killed top shadow bulblin inside inn twilight" }, - { 0x12, 0x01, 0x1201, "enter central room of inn during twilight cs" }, - { 0x13, 0x80, 0x1380, "sanctuary basement hallway to canon explored" }, - { 0x13, 0x40, 0x1340, "Malo mart shield on counter (requires reload)" }, - { 0x13, 0x20, 0x1320, "Kakariko intro cs" }, - { 0x13, 0x10, 0x1310, "blown up rocks on kakariko cliff PoH" }, - { 0x13, 0x08, 0x1308, "Blown up rock to secret passage to back of spring (updates map)" }, - { 0x13, 0x04, 0x1304, "Barnes storage house not blown up (unset once you enter) (twilight)" }, - { 0x13, 0x02, 0x1302, "Barnes storage house blew up cs (also changes map)" }, - { 0x13, 0x01, 0x1301, "Killed poe hidden village" }, - { 0x14, 0x80, 0x1480, "Midna text after sanctuary twilight cs" }, - { 0x14, 0x20, 0x1420, "light bug comes out of dresser in Barnes shop twilight" }, - { 0x14, 0x10, 0x1410, "GM save prompt" }, - { 0x14, 0x08, 0x1408, "Barnes sells Bombs" }, - { 0x14, 0x04, 0x1404, "midna text after shad leaves canon room" }, - { 0x14, 0x02, 0x1402, "Hero's shade map marker" }, - { 0x14, 0x01, 0x1401, "done midna jumps to top of sanctuary (also unlocks it)" }, - { 0x15, 0x80, 0x1580, "blown up rock underwater behind spring" }, - { 0x15, 0x40, 0x1540, "malo mart sells red potion on right slot" }, - { 0x15, 0x20, 0x1520, "beat bow mini-game" }, - { 0x15, 0x10, 0x1510, "malo mart sells red potion on left slot (default)" }, - { 0x15, 0x08, 0x1508, "explored bedroom in the inn" }, - { 0x15, 0x04, 0x1504, "explored central room in the inn" }, - { 0x15, 0x02, 0x1502, "blown up right rock underwater zora tombstone area" }, - { 0x15, 0x01, 0x1501, "midna text after charging dominion rod" }, - { 0x16, 0x80, 0x1680, "Goron lets you enter elevator in sumo hall" }, - { 0x16, 0x40, 0x1640, "Midna text after blowing up Barnes storage house" }, - { 0x16, 0x20, 0x1620, "hit third target in bow mini-game" }, - { 0x16, 0x10, 0x1610, "saved Colin cs (malo mart now open)" }, - { 0x16, 0x04, 0x1604, "Midna text after meeting the kids after twilight" }, - { 0x16, 0x02, 0x1602, "Started Rutela escort" }, - { 0x16, 0x01, 0x1601, "hit second target in bow mini-game" }, - { 0x17, 0x80, 0x1780, "hit first target in bow mini-game" }, - { 0x17, 0x40, 0x1740, "rock to zora tombstone gone + Barnes sells water bombs" }, - { 0x17, 0x20, 0x1720, "Followed Rutela to graveyard" }, - { 0x17, 0x10, 0x1710, "death mountain path intro cs twilight" }, - { 0x17, 0x08, 0x1708, "owl statue possessed cs (sanctuary basement)" }, - { 0x17, 0x04, 0x1704, "done midna jumps ant house (also unlocks it)" }, - { 0x17, 0x02, 0x1702, "Impaz in her house (hidden village)" }, - { 0x17, 0x01, 0x1701, "can't transform in hidden village (if bit 2 is set you can)" }, - { 0x1A, 0x40, 0x1A40, "picked up rupees from right rock underwater zora tombstone area" }, - { 0x1A, 0x20, 0x1A20, "picked up rupees from rock underwater behind spring" }, - { 0x1A, 0x10, 0x1A10, "Free standing PoH kakariko cliff" }, - { 0x1A, 0x08, 0x1A08, "Free standing PoH cat mini game hidden village" }, - { 0x1A, 0x04, 0x1A04, "picked up silver rupee from bell above sanctuary" }, - { 0x1A, 0x02, 0x1A02, "picked up yellow rupee in box secret passage to spring" }, - { 0x1A, 0x01, 0x1A01, "picked up blue rupee in box secret passage to spring" }, - { 0x1B, 0x80, 0x1B80, "picked up yellow rupee in box next to kakariko hot spring water" }, - { 0x1B, 0x40, 0x1B40, "picked up yellow rupee behind dresser inn bedroom" }, - { 0x1B, 0x20, 0x1B20, "picked up red rupee in box on platform above ant house" }, - { 0x1B, 0x10, 0x1B10, "picked up blue rupee behind dresser inn 2nd floor" }, - { 0x1B, 0x08, 0x1B08, "picked up yellow rupee 1 on leadge of top of death montain" }, - { 0x1B, 0x04, 0x1B04, "picked up yellow rupee 2 on leadge of top of death montain" }, - { 0x1B, 0x02, 0x1B02, "picked up yellow rupee 3 on leadge of top of death montain" }, - { 0x1B, 0x01, 0x1B01, "picked up rupee in death montain in rock below pipe (need BaC and rang)" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "Big chest from torches graveyard" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "Small chest in the inn" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "PoH big chest death mountain archer alcove" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "PoH big chest underwater behind spring" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "Big chest next to watch tower" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "?" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "Big chest watch house" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "tear of light death mountain hot spring water" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "tear of light next to howling stone death mountain " }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "tear of light death mountain base" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "tear of light sancuary basement" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "tear of light Barnes storage house" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "tear of light watch tower" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "tear of light at Malo mart" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "tear of light inn fire room" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "tear of light Barnes shop" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "tear of light graveyard" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "tear of light Barnes storage house" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "tear of light Barnes storage house" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "tear of light sancuary basement" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "tear of light sancuary basement" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "tear of light ant house" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "tear of light inn back room" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "Kakariko Village Portal" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "kakariko shadow beasts barrier appears (unset after fight)" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "DM big rock fell" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "done midna jumps 4 death mountain (hot spring water)" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "done midna jumps 3 death mountain (1st floor)" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "killed death mountain shadow beasts cs (unset later?)" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "done midna jumps 1 death mountain (entrance)" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "Malo mart has banners inside" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "DM proper human intro CS (Map marker GM)" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "Death Mountain Portal" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "death mountain dark beasts barrier appears" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "?" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "?" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "killed HV bublins (unset when cats spawn)" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "killed light bug death mountain hot spring water" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "killed light bug next to howling stone death mountain " }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "killed light bug death mountain base" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "trigger twilight end cs (vessel of light filled) (Hot Spring Water Present on map)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "killed light bug sancuary basement" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "killed light bug watch tower" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "killed light bug malo mart" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "killed light bug inn fire room" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "killed light bug Barnes shop" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "killed light bug graveyard" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "killed light bug sancuary basement" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "killed light bug sancuary basement" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "killed light bug ant house" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "killed light bug inn bedroom" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "saw light bug enter Barnes storage house twilight cs" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "malo mart sells hawkeye (moves potion to the right) (set when starting bow mini-game)" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "malo mart sells arrows" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "broke sanctuary roof patch during twilight (duplicate)" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "box moved ant house (spawns light bug)" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "Unknown crashes if rocks are pushed" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "malo mart hylian shield bought" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "ant house explored" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "entered sanctuary from roof during twilight" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "enter Barnes shop through the window in twilight cs" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "light bug comes out of box in ant house cs" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "spawn PoH cat mini game hidden village" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "malo mart hawkeye sold out (needs to be set for arrows to show up)" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "lit all torches in sanctuary twilight (opens basment)" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "light bug in inn fireplace jumps out cs" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "lit inn fireplace" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "knocked down dresser in Barnes shop twilight cs" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "?" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "? (malo mart explored)" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "lit west torch in sanctuary twilight" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "lit north east torch in sanctuary twilight" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "lit east torch in sanctuary twilight" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "lit north west torch in sanctuary twilight" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "broke ant house roof patch (duplicate)" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "moved death mountain rock to exit" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "Eldin spirit talks to Link after getting kakariko Portal cs" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "broke ant house roof patch" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "broke window of Barnes shop twilight" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "broke sanctuary roof patch during twilight" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "Renado talks to Link after trying to go up death mountain trail" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "killed kakariko shadow beasts cs" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "Killed poe watch tower" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "Killed poe Barnes storage house" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "blown up rock underwater to lake hylia from graveward" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "Graveyard intro cs" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "explored zora tombstone area" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "broke floor patch in graveyard during twilight" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "Killed poe death mountain" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "Killed poe graveyard center" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "Killed poe graveyard tombstone" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "gorons in kakariko hot spring water gone" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "Map Marker Sanctuary" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "Midna text after DM big rock fell" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "done midna jumps 2 death mountain (base floor)" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "death mountain proper intro cs twilight" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "moved death mountain rock to hot spring water" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "sanctuary basement canon room explored" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "done Midna jumps in sanctuary basement" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "Midna text before Midna jumps in sanctuary basement" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "sanctuary twilight cs" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "killed right shadow bulblin inside inn twilight" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "killed left shadow bulblin inside inn twilight" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "killed top shadow bulblin inside inn twilight" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "enter central room of inn during twilight cs" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "sanctuary basement hallway to canon explored" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "Malo mart shield on counter (requires reload)" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "Kakariko intro cs" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "blown up rocks on kakariko cliff PoH" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "Blown up rock to secret passage to back of spring (updates map)" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "Barnes storage house not blown up (unset once you enter) (twilight)" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "Barnes storage house blew up cs (also changes map)" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "Killed poe hidden village" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "Midna text after sanctuary twilight cs" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "light bug comes out of dresser in Barnes shop twilight" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "GM save prompt" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "Barnes sells Bombs" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "midna text after shad leaves canon room" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "Hero's shade map marker" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "done midna jumps to top of sanctuary (also unlocks it)" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "blown up rock underwater behind spring" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "malo mart sells red potion on right slot" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "beat bow mini-game" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "malo mart sells red potion on left slot (default)" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "explored bedroom in the inn" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "explored central room in the inn" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "blown up right rock underwater zora tombstone area" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "midna text after charging dominion rod" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "Goron lets you enter elevator in sumo hall" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "Midna text after blowing up Barnes storage house" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "hit third target in bow mini-game" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "saved Colin cs (malo mart now open)" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "Midna text after meeting the kids after twilight" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "Started Rutela escort" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "hit second target in bow mini-game" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "hit first target in bow mini-game" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "rock to zora tombstone gone + Barnes sells water bombs" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "Followed Rutela to graveyard" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "death mountain path intro cs twilight" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "owl statue possessed cs (sanctuary basement)" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "done midna jumps ant house (also unlocks it)" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "Impaz in her house (hidden village)" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "can't transform in hidden village (if bit 2 is set you can)" }, + { 0x1A, 0x40, AreaFlagInd{0x1A40}, "picked up rupees from right rock underwater zora tombstone area" }, + { 0x1A, 0x20, AreaFlagInd{0x1A20}, "picked up rupees from rock underwater behind spring" }, + { 0x1A, 0x10, AreaFlagInd{0x1A10}, "Free standing PoH kakariko cliff" }, + { 0x1A, 0x08, AreaFlagInd{0x1A08}, "Free standing PoH cat mini game hidden village" }, + { 0x1A, 0x04, AreaFlagInd{0x1A04}, "picked up silver rupee from bell above sanctuary" }, + { 0x1A, 0x02, AreaFlagInd{0x1A02}, "picked up yellow rupee in box secret passage to spring" }, + { 0x1A, 0x01, AreaFlagInd{0x1A01}, "picked up blue rupee in box secret passage to spring" }, + { 0x1B, 0x80, AreaFlagInd{0x1B80}, "picked up yellow rupee in box next to kakariko hot spring water" }, + { 0x1B, 0x40, AreaFlagInd{0x1B40}, "picked up yellow rupee behind dresser inn bedroom" }, + { 0x1B, 0x20, AreaFlagInd{0x1B20}, "picked up red rupee in box on platform above ant house" }, + { 0x1B, 0x10, AreaFlagInd{0x1B10}, "picked up blue rupee behind dresser inn 2nd floor" }, + { 0x1B, 0x08, AreaFlagInd{0x1B08}, "picked up yellow rupee 1 on leadge of top of death montain" }, + { 0x1B, 0x04, AreaFlagInd{0x1B04}, "picked up yellow rupee 2 on leadge of top of death montain" }, + { 0x1B, 0x02, AreaFlagInd{0x1B02}, "picked up yellow rupee 3 on leadge of top of death montain" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "picked up rupee in death montain in rock below pipe (need BaC and rang)" }, }; inline EventAreaFlags eventAreaFlagsFaron[] = { - { 0x00, 0x80, 0x0080, "small chest in lantern cave" }, - { 0x00, 0x40, 0x0040, "HP Chest Coro-Mist shortcut" }, - { 0x00, 0x20, 0x0020, "big chest mist area" }, - { 0x00, 0x10, 0x0010, "small chest mist area trunk" }, - { 0x00, 0x08, 0x0008, "small chest mist area next to key cave" }, - { 0x00, 0x04, 0x0004, "PoH chest key cave" }, - { 0x00, 0x01, 0x0001, "Small key cave key chest" }, - { 0x01, 0x80, 0x0180, "Dig Tear #1" }, - { 0x01, 0x20, 0x0120, "Final Tear #1" }, - { 0x01, 0x10, 0x0110, "Final Tear #2" }, - { 0x01, 0x04, 0x0104, "Wall Tear #1 (Mist Area)" }, - { 0x01, 0x02, 0x0102, "Wall Tear #2 (Mist Area)" }, - { 0x02, 0x40, 0x0240, "Tree Tear #1" }, - { 0x02, 0x20, 0x0220, "Tree Tear #2" }, - { 0x02, 0x10, 0x0210, "Tree Tear #3" }, - { 0x02, 0x08, 0x0208, "Gate Tear #1" }, - { 0x02, 0x02, 0x0202, "Coro Tear #1 (inside)" }, - { 0x02, 0x01, 0x0201, "Dig Tear #2" }, - { 0x03, 0x40, 0x0340, "Tear #2" }, - { 0x03, 0x20, 0x0320, "Gate Tear #2" }, - { 0x03, 0x10, 0x0310, "Coro Tear #2 (inside)" }, - { 0x03, 0x02, 0x0302, "Tear #1" }, - { 0x03, 0x01, 0x0301, "Coro Tear (outisde)" }, - { 0x04, 0x80, 0x0480, "Yellow Rupee Chest (N-Faron)" }, - { 0x08, 0x80, 0x0880, "explored east section of mist area after midna jump 1 twilight (gets unset)" }, - { 0x08, 0x40, 0x0840, "explored section with south entrance of mist area (gets unset)" }, - { 0x08, 0x10, 0x0810, "went up east section of mist area after midna jump 1 twilight" }, - { 0x08, 0x08, 0x0808, "S Faron warp twilight fences fall cs" }, - { 0x08, 0x04, 0x0804, "Sky character under owl statue" }, - { 0x08, 0x02, 0x0802, "midna jump 1 mist area (duplicate)" }, - { 0x08, 0x01, 0x0801, "unlock midna jump 1 mist area" }, - { 0x09, 0x80, 0x0980, "Coro spirits talk after killing light bugs in his house" }, - { 0x09, 0x40, 0x0940, "midna jump to Coro's house" }, - { 0x09, 0x20, 0x0920, "Map marker owl statue" }, - { 0x09, 0x10, 0x0910, "opened mist area gate to N faron" }, - { 0x09, 0x08, 0x0908, "lit torch 2 in lantern cave" }, - { 0x09, 0x04, 0x0904, "Talked to Midna next to the deku babas before Coro" }, - { 0x09, 0x02, 0x0902, "Rescued Monkey from Puppets" }, - { 0x09, 0x01, 0x0901, "dug behind Coro gate in twilight" }, - { 0x0A, 0x80, 0x0A80, "took Midna back s warp fight" }, - { 0x0A, 0x40, 0x0A40, "S warp shadow beast revive cs" }, - { 0x0A, 0x20, 0x0A20, "trigger twilight end cs (vessel of light filled)" }, - { 0x0A, 0x10, 0x0A10, "unlocked Coro gate" }, - { 0x0A, 0x08, 0x0A08, "Explored path to sacred grove" }, - { 0x0A, 0x04, 0x0A04, "burned cobweb in front of forest temple" }, - { 0x0A, 0x02, 0x0A02, "see spirit in front of FT twilight cs" }, - { 0x0A, 0x01, 0x0A01, "enter twilight cs" }, - { 0x0B, 0x40, 0x0B40, "talked to the light spirit in twilight" }, - { 0x0B, 0x20, 0x0B20, "saw light bugs dig underground mist area exit twilight" }, - { 0x0B, 0x10, 0x0B10, "Blown up rock next to Coro" }, - { 0x0B, 0x08, 0x0B08, "n warp fight fences appear cs" }, - { 0x0B, 0x04, 0x0B04, "North Faron Portal" }, - { 0x0B, 0x02, 0x0B02, "FT save prompt" }, - { 0x0C, 0x80, 0x0C80, "got lantern back after monkey follow" }, - { 0x0C, 0x40, 0x0C40, "saw light bugs move inside Coro's house cs" }, - { 0x0C, 0x20, 0x0C20, "in monkey follow (gets unset afterwards)" }, - { 0x0C, 0x10, 0x0C10, "Trill lets you shop" }, - { 0x0C, 0x04, 0x0C04, "killed left bokoblin before Trill after twilight" }, - { 0x0C, 0x02, 0x0C02, "killed right bokoblin before Trill after twilight" }, - { 0x0C, 0x01, 0x0C01, "explored section 6 in lantern cave" }, - { 0x0D, 0x80, 0x0D80, "explored section 5 in lantern cave" }, - { 0x0D, 0x40, 0x0D40, "explored section 4 in lantern cave" }, - { 0x0D, 0x20, 0x0D20, "explored section 3 in lantern cave" }, - { 0x0D, 0x10, 0x0D10, "explored section 2 in lantern cave" }, - { 0x0D, 0x08, 0x0D08, "explored section 1 in lantern cave" }, - { 0x0D, 0x04, 0x0D04, "got Coro key from Coro" }, - { 0x0D, 0x02, 0x0D02, "?" }, - { 0x0D, 0x01, 0x0D01, "killed right bokoblin next to Talo's cage" }, - { 0x0E, 0x80, 0x0E80, "killed left bokoblin next to Talo's cage" }, - { 0x0E, 0x40, 0x0E40, "broke Talo's cage" }, - { 0x0E, 0x20, 0x0E20, "killed both bokoblins next to Talo's cage" }, - { 0x0E, 0x08, 0x0E08, "enter Faron intro cs" }, - { 0x0E, 0x04, 0x0E04, "lit Coro's soup" }, - { 0x0E, 0x02, 0x0E02, "saved Talo cs" }, - { 0x0E, 0x01, 0x0E01, "see light spirit from far away in twilight cs" }, - { 0x0F, 0x80, 0x0F80, "enter mist area twilight cs" }, - { 0x0F, 0x40, 0x0F40, "found Talo's stick (child chase)" }, - { 0x0F, 0x20, 0x0F20, "explored top of east slope mist area twilight" }, - { 0x0F, 0x10, 0x0F10, "talked to Coro spirit before killing bugs" }, - { 0x0F, 0x08, 0x0F08, "entered mist area as human" }, - { 0x0F, 0x04, 0x0F04, "Talked to midna before talking to Coro spirit" }, - { 0x0F, 0x02, 0x0F02, "explored section with north exit of mist area (gets unset)" }, - { 0x0F, 0x01, 0x0F01, "saw light bugs on trunk mist area (gets unset)" }, - { 0x10, 0x80, 0x1080, "Map marker Rusl" }, - { 0x10, 0x40, 0x1040, "lit torch 1 in lantern cave" }, - { 0x10, 0x20, 0x1020, "Killed poe mist area" }, - { 0x10, 0x10, 0x1010, "spawn PoH chest key cave" }, - { 0x10, 0x08, 0x1008, "lit right torch in key cave" }, - { 0x10, 0x04, 0x1004, "lit left torch in key cave" }, - { 0x10, 0x02, 0x1002, "explored section 15 in lantern cave" }, - { 0x10, 0x01, 0x1001, "add mist area mist to mini-map" }, - { 0x11, 0x80, 0x1180, "explored section 14 in lantern cave" }, - { 0x11, 0x40, 0x1140, "explored section 13 in lantern cave" }, - { 0x11, 0x20, 0x1120, "explored section 12 in lantern cave" }, - { 0x11, 0x10, 0x1110, "explored section 11 in lantern cave" }, - { 0x11, 0x08, 0x1108, "explored section 10 in lantern cave" }, - { 0x11, 0x04, 0x1104, "explored section 9 in lantern cave" }, - { 0x11, 0x02, 0x1102, "explored section 3 of branching path in lantern cave" }, - { 0x11, 0x01, 0x1101, "explored section 8 in lantern cave" }, - { 0x12, 0x80, 0x1280, "explored section 7 in lantern cave" }, - { 0x12, 0x20, 0x1220, "Midna text before jumping to Lost Woods" }, - { 0x12, 0x10, 0x1210, "killed light bug outside Coro's house (duplicate)" }, - { 0x12, 0x08, 0x1208, "saw light bug run behind Coro gate" }, - { 0x12, 0x04, 0x1204, "Midna text warp to N faron for bridge" }, - { 0x12, 0x02, 0x1202, "saw first 2 light bugs run away from you" }, - { 0x12, 0x01, 0x1201, "S warp shadow beasts are spawned" }, - { 0x13, 0x80, 0x1380, "South Faron Portal" }, - { 0x13, 0x40, 0x1340, "explored section 2 of branching path in lantern cave" }, - { 0x13, 0x20, 0x1320, "killed right bokoblin in front of FT after twilight" }, - { 0x13, 0x10, 0x1310, "killed left bokoblin in front of FT after twilight" }, - { 0x13, 0x08, 0x1308, "explored section 1 of branching path in lantern cave" }, - { 0x13, 0x01, 0x1301, "S warp shadow beasts killed" }, - { 0x14, 0x80, 0x1480, "lit torch 4 in lantern cave" }, - { 0x14, 0x40, 0x1440, "killed light bug mist area north exit" }, - { 0x14, 0x20, 0x1420, "did midna jump 2 mist area" }, - { 0x14, 0x10, 0x1410, "killed light bug mist area north exit" }, - { 0x14, 0x08, 0x1408, "explored section 4 of branching path in lantern cave" }, - { 0x14, 0x04, 0x1404, "killed light bug in front of Forest Temple" }, - { 0x14, 0x02, 0x1402, "killed light bug in front of Forest Temple" }, - { 0x14, 0x01, 0x1401, "killed both light bugs in front of FT cs (map marker FT)" }, - { 0x15, 0x80, 0x1580, "killed light bug mist area south entrance" }, - { 0x15, 0x40, 0x1540, "killed light bug mist area south entrance" }, - { 0x15, 0x20, 0x1520, "did midna jump 5 mist area" }, - { 0x15, 0x10, 0x1510, "did midna jump 3 mist area" }, - { 0x15, 0x08, 0x1508, "killed light bug mist area trunk" }, - { 0x15, 0x04, 0x1504, "killed light bug mist area trunk" }, - { 0x15, 0x02, 0x1502, "killed light bug mist area trunk" }, - { 0x15, 0x01, 0x1501, "killed light bug between latern cave and gate" }, - { 0x16, 0x80, 0x1680, "map marker Talo (only during child save)" }, - { 0x16, 0x40, 0x1640, "killed light bug outside Coro's house" }, - { 0x16, 0x20, 0x1620, "Map marker key cave (only during child save)" }, - { 0x16, 0x10, 0x1610, "remove map marker key cave" }, - { 0x16, 0x08, 0x1608, "did midna jump 4 mist area" }, - { 0x16, 0x04, 0x1604, "killed light bug hallway to Coro (closer to spring)" }, - { 0x16, 0x02, 0x1602, "killed light bug between latern cave and gate" }, - { 0x16, 0x01, 0x1601, "killed both light bugs in Coro's house cs" }, - { 0x17, 0x80, 0x1780, "killed light bug inside Coro's house" }, - { 0x17, 0x40, 0x1740, "killed light bug inside Coro's house" }, - { 0x17, 0x20, 0x1720, "killed light bug hallway to Coro (closer to Coro)" }, - { 0x17, 0x10, 0x1710, "did midna jump 6 mist area" }, - { 0x17, 0x08, 0x1708, "explored east section of mist area after midna jump 1 twilight (gets unset)" }, - { 0x17, 0x04, 0x1704, "lit torch 3 in lantern cave" }, - { 0x17, 0x02, 0x1702, "burned cobweb 2 in lantern cave" }, - { 0x17, 0x01, 0x1701, "burned cobweb 1 in lantern cave" }, - { 0x1B, 0x01, 0x1B01, "picked up rupees from rock next to Coro" }, + { 0x00, 0x80, AreaFlagInd{0x0080}, "small chest in lantern cave" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "HP Chest Coro-Mist shortcut" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "big chest mist area" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "small chest mist area trunk" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "small chest mist area next to key cave" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "PoH chest key cave" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "Small key cave key chest" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "Dig Tear #1" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "Final Tear #1" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "Final Tear #2" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "Wall Tear #1 (Mist Area)" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "Wall Tear #2 (Mist Area)" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "Tree Tear #1" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "Tree Tear #2" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "Tree Tear #3" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "Gate Tear #1" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "Coro Tear #1 (inside)" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "Dig Tear #2" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "Tear #2" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "Gate Tear #2" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "Coro Tear #2 (inside)" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "Tear #1" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "Coro Tear (outisde)" }, + { 0x04, 0x80, AreaFlagInd{0x0480}, "Yellow Rupee Chest (N-Faron)" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "explored east section of mist area after midna jump 1 twilight (gets unset)" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "explored section with south entrance of mist area (gets unset)" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "went up east section of mist area after midna jump 1 twilight" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "S Faron warp twilight fences fall cs" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "Sky character under owl statue" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "midna jump 1 mist area (duplicate)" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "unlock midna jump 1 mist area" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "Coro spirits talk after killing light bugs in his house" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "midna jump to Coro's house" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "Map marker owl statue" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "opened mist area gate to N faron" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "lit torch 2 in lantern cave" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "Talked to Midna next to the deku babas before Coro" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "Rescued Monkey from Puppets" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "dug behind Coro gate in twilight" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "took Midna back s warp fight" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "S warp shadow beast revive cs" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "trigger twilight end cs (vessel of light filled)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "unlocked Coro gate" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "Explored path to sacred grove" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "burned cobweb in front of forest temple" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "see spirit in front of FT twilight cs" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "enter twilight cs" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "talked to the light spirit in twilight" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "saw light bugs dig underground mist area exit twilight" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "Blown up rock next to Coro" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "n warp fight fences appear cs" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "North Faron Portal" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "FT save prompt" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "got lantern back after monkey follow" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "saw light bugs move inside Coro's house cs" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "in monkey follow (gets unset afterwards)" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "Trill lets you shop" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "killed left bokoblin before Trill after twilight" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "killed right bokoblin before Trill after twilight" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "explored section 6 in lantern cave" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "explored section 5 in lantern cave" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "explored section 4 in lantern cave" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "explored section 3 in lantern cave" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "explored section 2 in lantern cave" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "explored section 1 in lantern cave" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "got Coro key from Coro" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "?" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "killed right bokoblin next to Talo's cage" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "killed left bokoblin next to Talo's cage" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "broke Talo's cage" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "killed both bokoblins next to Talo's cage" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "enter Faron intro cs" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "lit Coro's soup" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "saved Talo cs" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "see light spirit from far away in twilight cs" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "enter mist area twilight cs" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "found Talo's stick (child chase)" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "explored top of east slope mist area twilight" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "talked to Coro spirit before killing bugs" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "entered mist area as human" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "Talked to midna before talking to Coro spirit" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "explored section with north exit of mist area (gets unset)" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "saw light bugs on trunk mist area (gets unset)" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "Map marker Rusl" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "lit torch 1 in lantern cave" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "Killed poe mist area" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "spawn PoH chest key cave" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "lit right torch in key cave" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "lit left torch in key cave" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "explored section 15 in lantern cave" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "add mist area mist to mini-map" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "explored section 14 in lantern cave" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "explored section 13 in lantern cave" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "explored section 12 in lantern cave" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "explored section 11 in lantern cave" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "explored section 10 in lantern cave" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "explored section 9 in lantern cave" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "explored section 3 of branching path in lantern cave" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "explored section 8 in lantern cave" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "explored section 7 in lantern cave" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "Midna text before jumping to Lost Woods" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "killed light bug outside Coro's house (duplicate)" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "saw light bug run behind Coro gate" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "Midna text warp to N faron for bridge" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "saw first 2 light bugs run away from you" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "S warp shadow beasts are spawned" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "South Faron Portal" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "explored section 2 of branching path in lantern cave" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "killed right bokoblin in front of FT after twilight" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "killed left bokoblin in front of FT after twilight" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "explored section 1 of branching path in lantern cave" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "S warp shadow beasts killed" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "lit torch 4 in lantern cave" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "killed light bug mist area north exit" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "did midna jump 2 mist area" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "killed light bug mist area north exit" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "explored section 4 of branching path in lantern cave" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "killed light bug in front of Forest Temple" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "killed light bug in front of Forest Temple" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "killed both light bugs in front of FT cs (map marker FT)" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "killed light bug mist area south entrance" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "killed light bug mist area south entrance" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "did midna jump 5 mist area" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "did midna jump 3 mist area" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "killed light bug mist area trunk" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "killed light bug mist area trunk" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "killed light bug mist area trunk" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "killed light bug between latern cave and gate" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "map marker Talo (only during child save)" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "killed light bug outside Coro's house" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "Map marker key cave (only during child save)" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "remove map marker key cave" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "did midna jump 4 mist area" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "killed light bug hallway to Coro (closer to spring)" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "killed light bug between latern cave and gate" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "killed both light bugs in Coro's house cs" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "killed light bug inside Coro's house" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "killed light bug inside Coro's house" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "killed light bug hallway to Coro (closer to Coro)" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "did midna jump 6 mist area" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "explored east section of mist area after midna jump 1 twilight (gets unset)" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "lit torch 3 in lantern cave" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "burned cobweb 2 in lantern cave" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "burned cobweb 1 in lantern cave" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "picked up rupees from rock next to Coro" }, }; inline EventAreaFlags eventAreaFlagsFishingPond[] = { - { 0x1B, 0x01, 0x1B01, "free standing PoH" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "free standing PoH" }, }; inline EventAreaFlags eventAreaFlagsFT[] = { - { 0x00, 0x80, 0x0080, "PoH big chest behind Deku Like" }, - { 0x00, 0x04, 0x0004, "big chest underwater Tiny Cave" }, - { 0x00, 0x02, 0x0002, "small key big chest on pillar tile worm room" }, - { 0x00, 0x01, 0x0001, "Small Chest tile worm room" }, - { 0x01, 0x10, 0x0110, "big chest compass main room" }, - { 0x01, 0x08, 0x0108, "PoH big chest behind stairs tile worm room" }, - { 0x01, 0x02, 0x0102, "saved monkey in front of big pit" }, - { 0x02, 0x80, 0x0280, "saved monkey in boomerang bombling room" }, - { 0x02, 0x20, 0x0220, "saved monkey in tile worm room" }, - { 0x02, 0x10, 0x0210, "saved monkey in big baba room" }, - { 0x02, 0x08, 0x0208, "saved 2nd monkey" }, - { 0x02, 0x04, 0x0204, "first Monkey saved" }, - { 0x02, 0x02, 0x0202, "Small Chest 2nd Monkey room" }, - { 0x03, 0x80, 0x0380, "small chest first room" }, - { 0x03, 0x40, 0x0340, "Big Baba key acquired" }, - { 0x03, 0x10, 0x0310, "small key big chest in single wind bridge room" }, - { 0x03, 0x04, 0x0304, "small key big chest in boomerang bombling room" }, - { 0x03, 0x02, 0x0302, "Big Chest in broken stairs room" }, - { 0x06, 0x01, 0x0601, "Ooccoo map marker" }, - { 0x07, 0x80, 0x0780, "big chest with map main room" }, - { 0x07, 0x40, 0x0740, "Big Key Chest" }, - { 0x07, 0x20, 0x0720, "small chest behind bombable wall main room" }, - { 0x07, 0x04, 0x0704, "Outside Monkey saved" }, - { 0x07, 0x02, 0x0702, "saved monkey in spider cave room" }, - { 0x08, 0x40, 0x0840, "Midna Boomerang text seen" }, - { 0x08, 0x20, 0x0820, "midna text after bridge before Ook broken" }, - { 0x08, 0x08, 0x0808, "Big Baba killed cutscene (still spawned)" }, - { 0x08, 0x02, 0x0802, "hit totem of 2nd monkey once cs" }, - { 0x08, 0x01, 0x0801, "Midna first monkey text end" }, - { 0x09, 0x80, 0x0980, "Boss Door opened" }, - { 0x09, 0x40, 0x0940, "bridge before Ook broken" }, - { 0x09, 0x20, 0x0920, "burned cob web big key room" }, - { 0x09, 0x10, 0x0910, "bridge 2nd monkey room broken" }, - { 0x09, 0x02, 0x0902, "Compass Chest knocked down" }, - { 0x0A, 0x80, 0x0A80, "Monkey freed in spider room" }, - { 0x0A, 0x08, 0x0A08, "unlocked door to 2nd monkey room" }, - { 0x0A, 0x04, 0x0A04, "broke cage of 2nd monkey cs" }, - { 0x0A, 0x02, 0x0A02, "bokoblins see you in single wind bridge room cs" }, - { 0x0A, 0x01, 0x0A01, "turned wind bridge in single wind bridge room cs" }, - { 0x0B, 0x80, 0x0B80, "Unlock Windbridge East Door" }, - { 0x0B, 0x10, 0x0B10, "Girl Monkey helps Link" }, - { 0x0C, 0x40, 0x0C40, "opened cage of monkey in big baba room" }, - { 0x0C, 0x20, 0x0C20, "killed higher bokoblin in room before boss" }, - { 0x0C, 0x10, 0x0C10, "killed lower bokoblin in room before boss" }, - { 0x0C, 0x02, 0x0C02, "blown up rock to Ooccoo" }, - { 0x0D, 0x80, 0x0D80, "blown up rock blocking tile worm room" }, - { 0x0D, 0x40, 0x0D40, "blown up main room bombable wall" }, - //{ 0x0D, 0x20, 0x0D20, "small key big chest tile worm room position" }, - //{ 0x0D, 0x10, 0x0D10, "small key big chest tile worm room position" }, - //{ 0x0D, 0x08, 0x0D08, "small key big chest tile worm room position" }, - //{ 0x0D, 0x04, 0x0D04, "small key big chest tile worm room position" }, - { 0x0D, 0x02, 0x0D02, "Staircase rises main room" }, - { 0x0E, 0x20, 0x0E20, "tile worm room intro cs" }, - { 0x0E, 0x08, 0x0E08, "opened cage of monkey in tile worm room" }, - { 0x0E, 0x04, 0x0E04, "gate to big key opened" }, - { 0x0E, 0x02, 0x0E02, "2nd Monkey room intro cs" }, - { 0x0F, 0x80, 0x0F80, "lit bottom right torch main room" }, - { 0x0F, 0x40, 0x0F40, "lit bottom left torch main room" }, - { 0x0F, 0x20, 0x0F20, "lit upper right torch main room" }, - { 0x0F, 0x10, 0x0F10, "lit upper left torch main room" }, - { 0x0F, 0x08, 0x0F08, "big baba room intro cs" }, - { 0x0F, 0x04, 0x0F04, "enter room before boss Midna text" }, - { 0x0F, 0x02, 0x0F02, "Midna text after saveing a monkey after Ook" }, - { 0x0F, 0x01, 0x0F01, "Small Bridge breaks scene seen" }, - { 0x10, 0x10, 0x1010, "enter southwest door outside intro cs" }, - { 0x10, 0x04, 0x1004, "Midna text after compass" }, - { 0x10, 0x02, 0x1002, "boomerang obtained" }, - { 0x10, 0x01, 0x1001, "burned west cob web main room" }, - { 0x11, 0x08, 0x1108, "5th monkey added to room before boss" }, - { 0x11, 0x04, 0x1104, "4 Monkeys in main room cutscene" }, - { 0x11, 0x02, 0x1102, "turned wind bridge in single wind bridge room" }, - { 0x11, 0x01, 0x1101, "Monkeys regroup in Main Room" }, - { 0x12, 0x80, 0x1280, "4 Monkeys gather in Main Room" }, - { 0x12, 0x40, 0x1240, "blown up 1st rock in boomeang bombling room" }, - { 0x12, 0x10, 0x1210, "Ooccoo Freed" }, - { 0x12, 0x01, 0x1201, "2nd Monkey Bokoblins Killed" }, - { 0x13, 0x80, 0x1380, "Midna first Monkey text prompt (makes vines climbable)" }, - { 0x13, 0x40, 0x1340, "killed big baba cs" }, - { 0x13, 0x08, 0x1308, "?" }, - { 0x13, 0x04, 0x1304, "?" }, - { 0x13, 0x02, 0x1302, "Diababa killed" }, - { 0x13, 0x01, 0x1301, "Diababa Phase 2 (unset post kill)" }, - { 0x14, 0x20, 0x1420, "broke bridge over water that leads to big key" }, - { 0x14, 0x04, 0x1404, "monkeys form a rope in room before boss cs" }, - { 0x14, 0x02, 0x1402, "monkeys start to form a rope in room before boss" }, - { 0x15, 0x80, 0x1580, "All Monkeys form rope" }, - { 0x15, 0x40, 0x1540, "Ook exit door opened" }, - { 0x15, 0x20, 0x1520, "opened gate to monkey in broken stairs room" }, - { 0x15, 0x08, 0x1508, "blown up 2nd rock in boomerang bombling room" }, - { 0x15, 0x02, 0x1502, "saved 5th monkey cs" }, - { 0x15, 0x01, 0x1501, "killed bokoblin next to first monkey" }, - { 0x16, 0x20, 0x1620, "see locked monkey post Ook" }, - { 0x16, 0x10, 0x1610, "Ook defeated" }, - { 0x16, 0x08, 0x1608, "monkeys form a rope in room before boss cs" }, - { 0x16, 0x04, 0x1604, "Staircase rising cutscene for 4th Monkey" }, - { 0x16, 0x02, 0x1602, "Intro Cutscene" }, - { 0x16, 0x01, 0x1601, "2nd Monkey Pillar scene" }, - { 0x17, 0x80, 0x1780, "enter room before boss intro cs" }, - { 0x17, 0x40, 0x1740, "turned mill for the first time in Ook room cs" }, - { 0x17, 0x20, 0x1720, "big chest compass main room (set after)" }, - { 0x17, 0x01, 0x1701, "hit totem of 2nd monkey once" }, - { 0x1B, 0x10, 0x1B10, "picked up red rupee from deku like in spider room" }, + { 0x00, 0x80, AreaFlagInd{0x0080}, "PoH big chest behind Deku Like" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "big chest underwater Tiny Cave" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "small key big chest on pillar tile worm room" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "Small Chest tile worm room" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "big chest compass main room" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "PoH big chest behind stairs tile worm room" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "saved monkey in front of big pit" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "saved monkey in boomerang bombling room" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "saved monkey in tile worm room" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "saved monkey in big baba room" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "saved 2nd monkey" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "first Monkey saved" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "Small Chest 2nd Monkey room" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small chest first room" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "Big Baba key acquired" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "small key big chest in single wind bridge room" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "small key big chest in boomerang bombling room" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "Big Chest in broken stairs room" }, + { 0x06, 0x01, AreaFlagInd{0x0601}, "Ooccoo map marker" }, + { 0x07, 0x80, AreaFlagInd{0x0780}, "big chest with map main room" }, + { 0x07, 0x40, AreaFlagInd{0x0740}, "Big Key Chest" }, + { 0x07, 0x20, AreaFlagInd{0x0720}, "small chest behind bombable wall main room" }, + { 0x07, 0x04, AreaFlagInd{0x0704}, "Outside Monkey saved" }, + { 0x07, 0x02, AreaFlagInd{0x0702}, "saved monkey in spider cave room" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "Midna Boomerang text seen" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "midna text after bridge before Ook broken" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "Big Baba killed cutscene (still spawned)" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "hit totem of 2nd monkey once cs" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "Midna first monkey text end" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "Boss Door opened" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "bridge before Ook broken" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "burned cob web big key room" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "bridge 2nd monkey room broken" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "Compass Chest knocked down" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "Monkey freed in spider room" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "unlocked door to 2nd monkey room" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "broke cage of 2nd monkey cs" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "bokoblins see you in single wind bridge room cs" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "turned wind bridge in single wind bridge room cs" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "Unlock Windbridge East Door" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "Girl Monkey helps Link" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "opened cage of monkey in big baba room" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "killed higher bokoblin in room before boss" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "killed lower bokoblin in room before boss" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "blown up rock to Ooccoo" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "blown up rock blocking tile worm room" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "blown up main room bombable wall" }, + //{ 0x0D, 0x20, AreaFlagInd{0x0D20}, "small key big chest tile worm room position" }, + //{ 0x0D, 0x10, AreaFlagInd{0x0D10}, "small key big chest tile worm room position" }, + //{ 0x0D, 0x08, AreaFlagInd{0x0D08}, "small key big chest tile worm room position" }, + //{ 0x0D, 0x04, AreaFlagInd{0x0D04}, "small key big chest tile worm room position" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "Staircase rises main room" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "tile worm room intro cs" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "opened cage of monkey in tile worm room" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "gate to big key opened" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "2nd Monkey room intro cs" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "lit bottom right torch main room" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "lit bottom left torch main room" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "lit upper right torch main room" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "lit upper left torch main room" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "big baba room intro cs" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "enter room before boss Midna text" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "Midna text after saveing a monkey after Ook" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "Small Bridge breaks scene seen" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "enter southwest door outside intro cs" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "Midna text after compass" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "boomerang obtained" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "burned west cob web main room" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "5th monkey added to room before boss" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "4 Monkeys in main room cutscene" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "turned wind bridge in single wind bridge room" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "Monkeys regroup in Main Room" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "4 Monkeys gather in Main Room" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "blown up 1st rock in boomeang bombling room" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "Ooccoo Freed" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "2nd Monkey Bokoblins Killed" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "Midna first Monkey text prompt (makes vines climbable)" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "killed big baba cs" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "?" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "?" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "Diababa killed" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "Diababa Phase 2 (unset post kill)" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "broke bridge over water that leads to big key" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "monkeys form a rope in room before boss cs" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "monkeys start to form a rope in room before boss" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "All Monkeys form rope" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "Ook exit door opened" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "opened gate to monkey in broken stairs room" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "blown up 2nd rock in boomerang bombling room" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "saved 5th monkey cs" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "killed bokoblin next to first monkey" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "see locked monkey post Ook" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "Ook defeated" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "monkeys form a rope in room before boss cs" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "Staircase rising cutscene for 4th Monkey" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "Intro Cutscene" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "2nd Monkey Pillar scene" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "enter room before boss intro cs" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "turned mill for the first time in Ook room cs" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "big chest compass main room (set after)" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "hit totem of 2nd monkey once" }, + { 0x1B, 0x10, AreaFlagInd{0x1B10}, "picked up red rupee from deku like in spider room" }, }; inline EventAreaFlags eventAreaFlagsGerudoDesert[] = { - { 0x02, 0x80, 0x0280, "big chest next to Arbiter's Grounds" }, - { 0x02, 0x20, 0x0220, "small chest next to camp entrance" }, - { 0x02, 0x08, 0x0208, "small chest on pillar weat of entrance to desert" }, - { 0x02, 0x04, 0x0204, "small chest under tower of left bulblin outside camp" }, - { 0x02, 0x02, 0x0202, "small chest under tower of right bulblin outside camp" }, - { 0x02, 0x01, 0x0201, "small chest next to fire outside camp" }, - { 0x03, 0x80, 0x0380, "small chest island north of cave of ordeals" }, - { 0x03, 0x40, 0x0340, "small chest east canyon" }, - { 0x03, 0x20, 0x0320, "small chest next to pillar in the middle of the messa" }, - { 0x03, 0x08, 0x0308, "small chest behind 2 breakable walls (the west one)" }, - { 0x03, 0x04, 0x0304, "small chest behind 2 breakable walls (the east one)" }, - { 0x03, 0x02, 0x0302, "big chest owl statue" }, - { 0x03, 0x01, 0x0301, "big chest in south secret path" }, - { 0x04, 0x80, 0x0480, "both small chests and key in camp (each one sets it)" }, - { 0x08, 0x80, 0x0880, "?" }, - { 0x08, 0x40, 0x0840, "?" }, - { 0x08, 0x20, 0x0820, "explored island north of cave of ordeals" }, - { 0x08, 0x10, 0x0810, "explored part 9 of bulblin camp (KB battle area)" }, - { 0x08, 0x08, 0x0808, "explored part 8 of bulblin camp" }, - { 0x08, 0x04, 0x0804, "explored part 7 of bulblin camp" }, - { 0x08, 0x02, 0x0802, "explored part 6 of bulblin camp" }, - { 0x08, 0x01, 0x0801, "explored part 5 of bulblin camp" }, - { 0x09, 0x80, 0x0980, "Desert Intro CS (PoT)" }, - { 0x09, 0x20, 0x0920, "Gerudo Messa Portal" }, - { 0x09, 0x08, 0x0908, "explored part 2 of bulblin camp" }, - { 0x09, 0x04, 0x0904, "explored part 4 of bulblin camp" }, - { 0x09, 0x02, 0x0902, "explored part 3 of bulblin camp" }, - { 0x09, 0x01, 0x0901, "?" }, - { 0x0A, 0x40, 0x0A40, "explored south secret path to big chest" }, - { 0x0A, 0x10, 0x0A10, "Mirror chamber intro cs" }, - { 0x0A, 0x04, 0x0A04, "save prompt after beating Arbiter's Grounds" }, - { 0x0A, 0x02, 0x0A02, "killed archer bulblin on bore outside camp" }, - { 0x0A, 0x01, 0x0A01, "killed rider bulblin on bore outside camp" }, - { 0x0B, 0x80, 0x0B80, "killed lone bulblin on bore outside camp" }, - { 0x0B, 0x40, 0x0B40, "killed bulblin on left tower outside camp" }, - { 0x0B, 0x20, 0x0B20, "killed bulblin on right tower outside camp" }, - { 0x0B, 0x10, 0x0B10, "watched outside AG cutscene after bublin camp" }, - { 0x0B, 0x04, 0x0B04, "destroyed fire outside camp" }, - { 0x0B, 0x02, 0x0B02, "destroyed bore meat in camp" }, - { 0x0D, 0x08, 0x0D08, "killed poe next to entrance to camp" }, - { 0x0D, 0x04, 0x0D04, "Hero's Shade map marker" }, - { 0x0D, 0x02, 0x0D02, "spawn big chest next to Arbiter's Grounds" }, - { 0x0D, 0x01, 0x0D01, "lit right torch for big chest next to Arbiter's Grounds entrance" }, - { 0x0E, 0x80, 0x0E80, "lit left torch for big chest next to Arbiter's Grounds entrance" }, - { 0x0E, 0x20, 0x0E20, "explored area with Arbiter's Gounds entrance" }, - { 0x0E, 0x02, 0x0E02, "mirror light stairs appear" }, - { 0x0E, 0x01, 0x0E01, "Mirror Chamber Portal" }, - { 0x0F, 0x04, 0x0F04, "sky character under owl statue" }, - { 0x0F, 0x02, 0x0F02, "map marker owl statue" }, - { 0x0F, 0x01, 0x0F01, "Mirror Raised Cutscene Flag (Places Boar at desert entrance)" }, - { 0x10, 0x40, 0x1040, "broke left wall that prevents access to east small chest (set once pieces despawn)" }, - { 0x10, 0x20, 0x1020, "killed poe next to cave of ordeals" }, - { 0x10, 0x10, 0x1010, "killed poe south of desert entrance" }, - { 0x10, 0x08, 0x1008, "killed poe on elevated platform with grotto (messa)" }, - { 0x10, 0x04, 0x1004, "killed poe next to Arbiter's Grounds entrance" }, - { 0x10, 0x02, 0x1002, "destroyed tower of right bulbin outside camp" }, - { 0x10, 0x01, 0x1001, "destroyed tower of left bulbin outside camp" }, - { 0x11, 0x20, 0x1120, "broke first right wall to camp (set once pieces despawn)" }, - { 0x11, 0x10, 0x1110, "broke first middle wall to camp (set once pieces despawn)" }, - { 0x11, 0x08, 0x1108, "broke first left wall to camp (set once pieces despawn)" }, - { 0x11, 0x04, 0x1104, "broke second right wall to camp (set once pieces despawn)" }, - { 0x11, 0x02, 0x1102, "broke second left wall to camp (set once pieces despawn)" }, - { 0x12, 0x10, 0x1210, "explored elavated section with poe over grotto" }, - { 0x13, 0x40, 0x1340, "Desert Intro CS" }, - { 0x14, 0x80, 0x1480, "started climbing stairs to mirror chamber" }, - { 0x14, 0x40, 0x1440, "exit Arbiters Grounds to go to mirror chamber" }, - { 0x14, 0x02, 0x1402, "map marker palace of twilight (explored mirror chamber)" }, - { 0x14, 0x01, 0x1401, "killed poe in bulblin camp" }, - { 0x17, 0x08, 0x1708, "broke right wall that prevents access to east small chest (set once pieces despawn)" }, - { 0x17, 0x04, 0x1704, "broke left wall that prevents access to west small chest (set once pieces despawn)" }, - { 0x17, 0x02, 0x1702, "broke right wall that prevents access to west small chest (set once pieces despawn)" }, - { 0x18, 0x80, 0x1880, "free standing PoH bore meat bulblin camp" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "big chest next to Arbiter's Grounds" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "small chest next to camp entrance" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "small chest on pillar weat of entrance to desert" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "small chest under tower of left bulblin outside camp" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "small chest under tower of right bulblin outside camp" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "small chest next to fire outside camp" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small chest island north of cave of ordeals" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "small chest east canyon" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "small chest next to pillar in the middle of the messa" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "small chest behind 2 breakable walls (the west one)" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "small chest behind 2 breakable walls (the east one)" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "big chest owl statue" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "big chest in south secret path" }, + { 0x04, 0x80, AreaFlagInd{0x0480}, "both small chests and key in camp (each one sets it)" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "?" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "?" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "explored island north of cave of ordeals" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "explored part 9 of bulblin camp (KB battle area)" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "explored part 8 of bulblin camp" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "explored part 7 of bulblin camp" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "explored part 6 of bulblin camp" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "explored part 5 of bulblin camp" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "Desert Intro CS (PoT)" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "Gerudo Messa Portal" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "explored part 2 of bulblin camp" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "explored part 4 of bulblin camp" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "explored part 3 of bulblin camp" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "?" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "explored south secret path to big chest" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "Mirror chamber intro cs" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "save prompt after beating Arbiter's Grounds" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "killed archer bulblin on bore outside camp" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "killed rider bulblin on bore outside camp" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "killed lone bulblin on bore outside camp" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "killed bulblin on left tower outside camp" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "killed bulblin on right tower outside camp" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "watched outside AG cutscene after bublin camp" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "destroyed fire outside camp" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "destroyed bore meat in camp" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "killed poe next to entrance to camp" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "Hero's Shade map marker" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "spawn big chest next to Arbiter's Grounds" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "lit right torch for big chest next to Arbiter's Grounds entrance" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "lit left torch for big chest next to Arbiter's Grounds entrance" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "explored area with Arbiter's Gounds entrance" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "mirror light stairs appear" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "Mirror Chamber Portal" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "sky character under owl statue" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "map marker owl statue" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "Mirror Raised Cutscene Flag (Places Boar at desert entrance)" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "broke left wall that prevents access to east small chest (set once pieces despawn)" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "killed poe next to cave of ordeals" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "killed poe south of desert entrance" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "killed poe on elevated platform with grotto (messa)" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "killed poe next to Arbiter's Grounds entrance" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "destroyed tower of right bulbin outside camp" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "destroyed tower of left bulbin outside camp" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "broke first right wall to camp (set once pieces despawn)" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "broke first middle wall to camp (set once pieces despawn)" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "broke first left wall to camp (set once pieces despawn)" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "broke second right wall to camp (set once pieces despawn)" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "broke second left wall to camp (set once pieces despawn)" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "explored elavated section with poe over grotto" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "Desert Intro CS" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "started climbing stairs to mirror chamber" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "exit Arbiters Grounds to go to mirror chamber" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "map marker palace of twilight (explored mirror chamber)" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "killed poe in bulblin camp" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "broke right wall that prevents access to east small chest (set once pieces despawn)" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "broke left wall that prevents access to west small chest (set once pieces despawn)" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "broke right wall that prevents access to west small chest (set once pieces despawn)" }, + { 0x18, 0x80, AreaFlagInd{0x1880}, "free standing PoH bore meat bulblin camp" }, }; inline EventAreaFlags eventAreaFlagsGM[] = { - { 0x00, 0x40, 0x0040, "big chest main room top floor" }, - { 0x00, 0x10, 0x0010, "small chest next to switch in toadpoli room" }, - { 0x00, 0x08, 0x0008, "small chest first room" }, - { 0x00, 0x04, 0x0004, "big chest elder 3 room" }, - { 0x00, 0x02, 0x0002, "small chest elder 2 room" }, - { 0x00, 0x01, 0x0001, "small chest elder 1 room" }, - { 0x01, 0x40, 0x0140, "Ooccoo Map Flag" }, - { 0x01, 0x20, 0x0120, "big chest underwater outside room" }, - { 0x01, 0x10, 0x0110, "PoH big chest room 3" }, - { 0x01, 0x02, 0x0102, "map big chest elder 1 room" }, - { 0x01, 0x01, 0x0101, "small key underwater big chest toadpoli room" }, - { 0x02, 0x80, 0x0280, "small key small chest outside room" }, - { 0x02, 0x40, 0x0240, "big chest outside room clawshot" }, - { 0x02, 0x20, 0x0220, "small chest room leading to elder 2" }, - { 0x02, 0x10, 0x0210, "compass big chest" }, - { 0x02, 0x08, 0x0208, "small key big chest main room bottom floor" }, - { 0x02, 0x02, 0x0202, "PoH big chest toadpoli room (the one after the gate)" }, - { 0x03, 0x40, 0x0340, "big chest bow" }, - { 0x08, 0x10, 0x0810, "cut rope of door outside room cs" }, - { 0x08, 0x08, 0x0808, "pressed second button main room floor 2 cs" }, - { 0x08, 0x04, 0x0804, "pressed third button in first room cs" }, - { 0x08, 0x02, 0x0802, "pressed second button in first room cs" }, - { 0x08, 0x01, 0x0801, "cut rope of door in toadpoli room cs" }, - { 0x09, 0x80, 0x0980, "unlocked boss door" }, - { 0x09, 0x20, 0x0920, "pressed first button main room floor 2 cs" }, - { 0x09, 0x10, 0x0910, "killed beamos outside room" }, - { 0x0A, 0x40, 0x0A40, "unlock mini-boss doors" }, - { 0x0A, 0x08, 0x0A08, "pressed button outside room" }, - { 0x0A, 0x04, 0x0A04, "cut rope of door in room before boss" }, - { 0x0A, 0x02, 0x0A02, "cut rope of door in toadpoli room" }, - { 0x0A, 0x01, 0x0A01, "cut rope of door in bow room" }, - { 0x0B, 0x20, 0x0B20, "cut rope of door at top floor of main room" }, - { 0x0B, 0x10, 0x0B10, "pressed first button main room floor 2" }, - { 0x0B, 0x08, 0x0B08, "reach west locked door in main room bottom floor" }, - { 0x0B, 0x04, 0x0B04, "lowered platform to open gate in first room (read only)" }, - { 0x0C, 0x80, 0x0C80, "unlocked north door in toadpoli room" }, - { 0x0C, 0x40, 0x0C40, "pressed second button main room floor 2" }, - { 0x0C, 0x20, 0x0C20, "unlock west locked door in main room bottom floor" }, - { 0x0C, 0x08, 0x0C08, "killed right beamos in toadpoli room" }, - { 0x0C, 0x04, 0x0C04, "killed left beamos in toadpoli room" }, - { 0x0D, 0x80, 0x0D80, "pressed button outside room cs" }, - { 0x0D, 0x40, 0x0D40, "pressed button at top floor of main room" }, - { 0x0D, 0x08, 0x0D08, "unlocked east door outside room" }, - { 0x0D, 0x01, 0x0D01, "broke underwater wood barrier outside room" }, - { 0x0E, 0x80, 0x0E80, "replace tektites with toadpolis in toadpoli room (set after obtaining bow)" }, - { 0x0E, 0x20, 0x0E20, "main room intro cs" }, - { 0x0E, 0x10, 0x0E10, "main room intro cs" }, - { 0x0E, 0x08, 0x0E08, "broke second wood barrier in outside room" }, - { 0x0E, 0x04, 0x0E04, "broke first wood barrier in outside room" }, - { 0x0E, 0x02, 0x0E02, "Oocco Freed" }, - { 0x0E, 0x01, 0x0E01, "elder 2 lets you climb ladder in his room" }, - { 0x0F, 0x80, 0x0F80, "elder 1 lets you climb ladder in his room" }, - { 0x0F, 0x40, 0x0F40, "pulled beamos outside room" }, - { 0x0F, 0x20, 0x0F20, "outside room intro cs" }, - { 0x0F, 0x10, 0x0F10, "outside room getting shot at after mini-boss cs" }, - { 0x0F, 0x08, 0x0F08, "outside room getting shot at after mini-boss cs" }, - { 0x0F, 0x04, 0x0F04, "outside room intro cs" }, - { 0x10, 0x80, 0x1080, "room after bow intro cs" }, - { 0x10, 0x40, 0x1040, "pulled beamos outside room cs" }, - { 0x10, 0x20, 0x1020, "activate first force field in toadpoli room" }, - { 0x10, 0x10, 0x1010, "pressed first button in toadpoli room cs" }, - { 0x10, 0x08, 0x1008, "open gate in toadpoli room cs" }, - { 0x10, 0x04, 0x1004, "pressed second button in toadpoli room cs" }, - { 0x10, 0x02, 0x1002, "activate second force field in toadpoli room" }, - { 0x10, 0x01, 0x1001, "room before elder 1 intro cs" }, - { 0x11, 0x80, 0x1180, "room before elder 1 intro cs" }, - { 0x11, 0x20, 0x1120, "intro cs" }, - { 0x11, 0x10, 0x1110, "pressed first button in first room cs" }, - { 0x11, 0x08, 0x1108, "open gate in first room cs" }, - { 0x11, 0x04, 0x1104, "pressed button in room after bow" }, - { 0x11, 0x02, 0x1102, "hit switch in room after bow" }, - { 0x11, 0x01, 0x1101, "press button room 3" }, - { 0x12, 0x80, 0x1280, "killed south-east beamos bow room" }, - { 0x12, 0x40, 0x1240, "killed south-west beamos bow room" }, - { 0x12, 0x20, 0x1220, "killed west beamos bow room" }, - { 0x12, 0x10, 0x1210, "killed north-east beamos bow room" }, - { 0x12, 0x08, 0x1208, "killed north-west beamos bow room" }, - { 0x12, 0x04, 0x1204, "killed east beamos bow room" }, - { 0x12, 0x02, 0x1202, "killed south beamos bow room" }, - { 0x12, 0x01, 0x1201, "pulled south-east beamos bow room" }, - { 0x13, 0x80, 0x1380, "pulled south-west beamos bow room" }, - { 0x13, 0x40, 0x1340, "pulled west beamos bow room" }, - { 0x13, 0x08, 0x1308, "pulled east beamos bow room" }, - { 0x13, 0x04, 0x1304, "pulled south beamos bow room" }, - { 0x13, 0x02, 0x1302, "pressed first button in toadpoli room" }, - { 0x13, 0x01, 0x1301, "pressed second button in toadpoli room" }, - { 0x15, 0x01, 0x1501, "reached area past pullable wall in room 3 (first in path to elder 1)" }, - { 0x16, 0x10, 0x1610, "reached bottom of water in room before elder 1" }, - { 0x16, 0x08, 0x1608, "reached area past pullable wall in room 3 (first in path to elder 1)" }, - { 0x16, 0x04, 0x1604, "knocked down fence in room after bow" }, - { 0x16, 0x02, 0x1602, "pullable wall in room 3 closed itself" }, - { 0x17, 0x80, 0x1780, "outside room killed leader bulblin archer" }, - { 0x17, 0x20, 0x1720, "cut rope of door outside room" }, - { 0x17, 0x10, 0x1710, "pressed unerwater button in room before elder" }, - { 0x17, 0x08, 0x1708, "main room floor 2 intro cs" }, - { 0x17, 0x04, 0x1704, "main room floor 2 intro cs" }, - { 0x17, 0x02, 0x1702, "hit switch in room after bow cs" }, - { 0x17, 0x01, 0x1701, "room after bow intro cs" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "big chest main room top floor" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "small chest next to switch in toadpoli room" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "small chest first room" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "big chest elder 3 room" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "small chest elder 2 room" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "small chest elder 1 room" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "Ooccoo Map Flag" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "big chest underwater outside room" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "PoH big chest room 3" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "map big chest elder 1 room" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "small key underwater big chest toadpoli room" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "small key small chest outside room" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "big chest outside room clawshot" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "small chest room leading to elder 2" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "compass big chest" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "small key big chest main room bottom floor" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "PoH big chest toadpoli room (the one after the gate)" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "big chest bow" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "cut rope of door outside room cs" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "pressed second button main room floor 2 cs" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "pressed third button in first room cs" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "pressed second button in first room cs" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "cut rope of door in toadpoli room cs" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "unlocked boss door" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "pressed first button main room floor 2 cs" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "killed beamos outside room" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "unlock mini-boss doors" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "pressed button outside room" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "cut rope of door in room before boss" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "cut rope of door in toadpoli room" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "cut rope of door in bow room" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "cut rope of door at top floor of main room" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "pressed first button main room floor 2" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "reach west locked door in main room bottom floor" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "lowered platform to open gate in first room (read only)" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "unlocked north door in toadpoli room" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "pressed second button main room floor 2" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "unlock west locked door in main room bottom floor" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "killed right beamos in toadpoli room" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "killed left beamos in toadpoli room" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "pressed button outside room cs" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "pressed button at top floor of main room" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "unlocked east door outside room" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "broke underwater wood barrier outside room" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "replace tektites with toadpolis in toadpoli room (set after obtaining bow)" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "main room intro cs" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "main room intro cs" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "broke second wood barrier in outside room" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "broke first wood barrier in outside room" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "Oocco Freed" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "elder 2 lets you climb ladder in his room" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "elder 1 lets you climb ladder in his room" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "pulled beamos outside room" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "outside room intro cs" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "outside room getting shot at after mini-boss cs" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "outside room getting shot at after mini-boss cs" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "outside room intro cs" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "room after bow intro cs" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "pulled beamos outside room cs" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "activate first force field in toadpoli room" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "pressed first button in toadpoli room cs" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "open gate in toadpoli room cs" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "pressed second button in toadpoli room cs" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "activate second force field in toadpoli room" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "room before elder 1 intro cs" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "room before elder 1 intro cs" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "intro cs" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "pressed first button in first room cs" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "open gate in first room cs" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "pressed button in room after bow" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "hit switch in room after bow" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "press button room 3" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "killed south-east beamos bow room" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "killed south-west beamos bow room" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "killed west beamos bow room" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "killed north-east beamos bow room" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "killed north-west beamos bow room" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "killed east beamos bow room" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "killed south beamos bow room" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "pulled south-east beamos bow room" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "pulled south-west beamos bow room" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "pulled west beamos bow room" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "pulled east beamos bow room" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "pulled south beamos bow room" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "pressed first button in toadpoli room" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "pressed second button in toadpoli room" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "reached area past pullable wall in room 3 (first in path to elder 1)" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "reached bottom of water in room before elder 1" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "reached area past pullable wall in room 3 (first in path to elder 1)" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "knocked down fence in room after bow" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "pullable wall in room 3 closed itself" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "outside room killed leader bulblin archer" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "cut rope of door outside room" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "pressed unerwater button in room before elder" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "main room floor 2 intro cs" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "main room floor 2 intro cs" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "hit switch in room after bow cs" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "room after bow intro cs" }, }; inline EventAreaFlags eventAreaFlagsGrotto[] = { - { 0x01, 0x20, 0x0120, "big chest grotto 5-4" }, - { 0x01, 0x08, 0x0108, "big chest grotto 4-3" }, - { 0x01, 0x04, 0x0104, "left small chest grotto 2-0" }, - { 0x01, 0x02, 0x0102, "right small chest grotto 2-0" }, - { 0x01, 0x01, 0x0101, "small chest grotto 5-3" }, - { 0x02, 0x80, 0x0280, "big chest grotto 4-2" }, - { 0x02, 0x40, 0x0240, "big chest grotto 3-0" }, - { 0x02, 0x20, 0x0220, "south small chest grotto 2-1" }, - { 0x02, 0x10, 0x0210, "east small chest grotto 2-1" }, - { 0x02, 0x08, 0x0208, "north small chest grotto 2-1" }, - { 0x02, 0x04, 0x0204, "small chest grotto 1-1" }, - { 0x02, 0x01, 0x0201, "big chest grotto 4-1" }, - { 0x03, 0x80, 0x0380, "big chest grotto 1-2" }, - { 0x03, 0x40, 0x0340, "big chest grotto 1-1" }, - { 0x03, 0x20, 0x0320, "big chest grotto 5-2" }, - { 0x03, 0x10, 0x0310, "big chest grotto 4-0" }, - { 0x03, 0x08, 0x0308, "big chest grotto 2-2" }, - { 0x03, 0x04, 0x0304, "big chest grotto 2-0" }, - { 0x03, 0x02, 0x0302, "big chest grotto 5-0" }, - { 0x03, 0x01, 0x0301, "big chest grotto 1-0" }, - { 0x08, 0x80, 0x0880, "lit right torch grotto 1-1" }, - { 0x08, 0x40, 0x0840, "lit left torch grotto 1-1" }, - { 0x08, 0x20, 0x0820, "killed red chu-chu grotto 3-3" }, - { 0x08, 0x10, 0x0810, "killed chu-chu grotto 3-2" }, - { 0x08, 0x08, 0x0808, "killed blue chu-chu grotto 3-1" }, - { 0x08, 0x04, 0x0804, "killed chu-chu grotto 2-0" }, - { 0x08, 0x02, 0x0802, "killed chu-chu grotto 1-2" }, - { 0x08, 0x01, 0x0801, "killed right freezard grotto 4-2" }, - { 0x09, 0x80, 0x0980, "broke ice wall 1 grotto 4-2" }, - { 0x09, 0x40, 0x0940, "killed chu-chu grotto 1-1" }, - { 0x09, 0x20, 0x0920, "killed all enemies grotto 5-4 (spawm chest)" }, - { 0x09, 0x10, 0x0910, "killed left freezard grotto 4-2" }, - { 0x09, 0x08, 0x0908, "killed blue chu-chu grotto 3-3" }, - { 0x09, 0x04, 0x0904, "broke ice wall 2 grotto 4-2" }, - { 0x09, 0x02, 0x0902, "broke ice wall 4 grotto 4-2" }, - { 0x09, 0x01, 0x0901, "killed poe in the back entrance grotto 3-0" }, - { 0x0A, 0x80, 0x0A80, "killed poe next to entrance grotto 3-0" }, - { 0x0A, 0x40, 0x0A40, "broke ice wall 3 grotto 4-2" }, - { 0x0A, 0x20, 0x0A20, "broke ice wall 6 grotto 4-2" }, - { 0x0A, 0x10, 0x0A10, "broke ice wall 5 grotto 4-2" }, - { 0x0A, 0x08, 0x0A08, "killed middle poe grotto 1-3" }, - { 0x0A, 0x04, 0x0A04, "killed right poe grotto 1-3" }, - { 0x0A, 0x02, 0x0A02, "spawn big chest grotto 1-1" }, - { 0x0A, 0x01, 0x0A01, "killed all enemies grotto 4-1 (spawm chest)" }, - { 0x0B, 0x80, 0x0B80, "killed middle freezard grotto 4-2" }, - { 0x0B, 0x40, 0x0B40, "blown up rocks in grotto 3-2" }, - { 0x0B, 0x20, 0x0B20, "killed all enemies grotto 5-2 (spawm chest)" }, - { 0x0B, 0x10, 0x0B10, "killed all enemies grotto 4-0 (spawm chest)" }, - { 0x0B, 0x08, 0x0B08, "killed all enemies grotto 2-2 (spawm chest)" }, - { 0x0B, 0x04, 0x0B04, "killed all enemies grotto 2-0 (spawm chest)" }, - { 0x0B, 0x02, 0x0B02, "killed all enemies grotto 5-0 (spawm chest)" }, - { 0x0B, 0x01, 0x0B01, "killed all enemies grotto 1-0 (spawm chest)" }, - { 0x0E, 0x10, 0x0E10, "spawn big chest grotto 4-3" }, - { 0x0E, 0x08, 0x0E08, "lit torch 3 grotto 4-3" }, - { 0x0E, 0x04, 0x0E04, "lit torch 2 grotto 4-3" }, - { 0x0E, 0x02, 0x0E02, "lit torch 1 grotto 4-3" }, - { 0x0E, 0x01, 0x0E01, "spawn big chest grotto 3-0" }, - { 0x0F, 0x80, 0x0F80, "lit right torch grotto 3-0" }, - { 0x0F, 0x40, 0x0F40, "lit middle torch grotto 3-0" }, - { 0x0F, 0x20, 0x0F20, "lit left torch grotto 3-0" }, - { 0x0F, 0x10, 0x0F10, "spawn big chest grotto 1-2" }, - { 0x0F, 0x08, 0x0F08, "lit middle torch grotto 1-2" }, - { 0x0F, 0x04, 0x0F04, "lit right torch grotto 1-2" }, - { 0x0F, 0x02, 0x0F02, "lit left torch grotto 1-2" }, - { 0x1A, 0x02, 0x1A02, "picked up yellow rupee from pot grotto 1-2" }, - { 0x1A, 0x01, 0x1A01, "picked up blue rupee from pot grotto 1-2" }, - { 0x1B, 0x80, 0x1B80, "picked up blue rupee from pot grotto 1-2" }, - { 0x1B, 0x40, 0x1B40, "picked up blue rupee from pot grotto 1-2" }, - { 0x1B, 0x20, 0x1B20, "picked up blue rupee from pot grotto 1-2" }, - { 0x1B, 0x10, 0x1B10, "picked up blue rupee from pot grotto 1-2" }, - { 0x1B, 0x08, 0x1B08, "picked up blue rupee from pot grotto 1-2" }, - { 0x1B, 0x04, 0x1B04, "picked up yellow rupee from pot grotto 1-2" }, - { 0x1B, 0x02, 0x1B02, "picked up red rupee from pot grotto 1-2" }, - { 0x1B, 0x01, 0x1B01, "picked up red rupee from pot grotto 1-2" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "big chest grotto 5-4" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "big chest grotto 4-3" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "left small chest grotto 2-0" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "right small chest grotto 2-0" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "small chest grotto 5-3" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "big chest grotto 4-2" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "big chest grotto 3-0" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "south small chest grotto 2-1" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "east small chest grotto 2-1" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "north small chest grotto 2-1" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "small chest grotto 1-1" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "big chest grotto 4-1" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "big chest grotto 1-2" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "big chest grotto 1-1" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "big chest grotto 5-2" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "big chest grotto 4-0" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "big chest grotto 2-2" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "big chest grotto 2-0" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "big chest grotto 5-0" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "big chest grotto 1-0" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "lit right torch grotto 1-1" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "lit left torch grotto 1-1" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "killed red chu-chu grotto 3-3" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "killed chu-chu grotto 3-2" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "killed blue chu-chu grotto 3-1" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "killed chu-chu grotto 2-0" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "killed chu-chu grotto 1-2" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "killed right freezard grotto 4-2" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "broke ice wall 1 grotto 4-2" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "killed chu-chu grotto 1-1" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "killed all enemies grotto 5-4 (spawm chest)" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "killed left freezard grotto 4-2" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "killed blue chu-chu grotto 3-3" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "broke ice wall 2 grotto 4-2" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "broke ice wall 4 grotto 4-2" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "killed poe in the back entrance grotto 3-0" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "killed poe next to entrance grotto 3-0" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "broke ice wall 3 grotto 4-2" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "broke ice wall 6 grotto 4-2" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "broke ice wall 5 grotto 4-2" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "killed middle poe grotto 1-3" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "killed right poe grotto 1-3" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "spawn big chest grotto 1-1" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "killed all enemies grotto 4-1 (spawm chest)" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "killed middle freezard grotto 4-2" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "blown up rocks in grotto 3-2" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "killed all enemies grotto 5-2 (spawm chest)" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "killed all enemies grotto 4-0 (spawm chest)" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "killed all enemies grotto 2-2 (spawm chest)" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "killed all enemies grotto 2-0 (spawm chest)" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "killed all enemies grotto 5-0 (spawm chest)" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "killed all enemies grotto 1-0 (spawm chest)" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "spawn big chest grotto 4-3" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "lit torch 3 grotto 4-3" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "lit torch 2 grotto 4-3" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "lit torch 1 grotto 4-3" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "spawn big chest grotto 3-0" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "lit right torch grotto 3-0" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "lit middle torch grotto 3-0" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "lit left torch grotto 3-0" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "spawn big chest grotto 1-2" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "lit middle torch grotto 1-2" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "lit right torch grotto 1-2" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "lit left torch grotto 1-2" }, + { 0x1A, 0x02, AreaFlagInd{0x1A02}, "picked up yellow rupee from pot grotto 1-2" }, + { 0x1A, 0x01, AreaFlagInd{0x1A01}, "picked up blue rupee from pot grotto 1-2" }, + { 0x1B, 0x80, AreaFlagInd{0x1B80}, "picked up blue rupee from pot grotto 1-2" }, + { 0x1B, 0x40, AreaFlagInd{0x1B40}, "picked up blue rupee from pot grotto 1-2" }, + { 0x1B, 0x20, AreaFlagInd{0x1B20}, "picked up blue rupee from pot grotto 1-2" }, + { 0x1B, 0x10, AreaFlagInd{0x1B10}, "picked up blue rupee from pot grotto 1-2" }, + { 0x1B, 0x08, AreaFlagInd{0x1B08}, "picked up blue rupee from pot grotto 1-2" }, + { 0x1B, 0x04, AreaFlagInd{0x1B04}, "picked up yellow rupee from pot grotto 1-2" }, + { 0x1B, 0x02, AreaFlagInd{0x1B02}, "picked up red rupee from pot grotto 1-2" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "picked up red rupee from pot grotto 1-2" }, }; inline EventAreaFlags eventAreaFlagsHC[] = { - { 0x00, 0x40, 0x0040, "big chest behind first gate in graveyard" }, - { 0x00, 0x20, 0x0020, "second small chest treasure room" }, - { 0x00, 0x10, 0x0010, "eighth small chest treasure room" }, - { 0x00, 0x08, 0x0008, "seventh small chest treasure room" }, - { 0x00, 0x04, 0x0004, "sixth small chest treasure room" }, - { 0x00, 0x02, 0x0002, "big chest north room 2F" }, - { 0x01, 0x80, 0x0180, "fourth small chest treasure room" }, - { 0x01, 0x40, 0x0140, "fifth small chest treasure room" }, - { 0x01, 0x20, 0x0120, "third small chest treasure room" }, - { 0x01, 0x08, 0x0108, "fifth big chest treasure room" }, - { 0x01, 0x04, 0x0104, "fourth big chest treasure room" }, - { 0x01, 0x02, 0x0102, "third big chest treasure room" }, - { 0x01, 0x01, 0x0101, "second big chest treasure room" }, - { 0x02, 0x80, 0x0280, "first big chest treasure room" }, - { 0x02, 0x20, 0x0220, "north west big chest center room 2F" }, - { 0x02, 0x08, 0x0208, "small chest east garden" }, - { 0x02, 0x02, 0x0202, "north small chest west garden" }, - { 0x02, 0x01, 0x0201, "compass north east big chest center room 2F" }, - { 0x03, 0x80, 0x0380, "small key big chest behind third gate in graveyard" }, - { 0x03, 0x20, 0x0320, "center small chest west garden" }, - { 0x03, 0x10, 0x0310, "map big chest east garden" }, - { 0x03, 0x08, 0x0308, "king bulblin small key" }, - { 0x03, 0x04, 0x0304, "south west big chest center room 2F" }, - { 0x03, 0x02, 0x0302, "small key big chest outside 2F" }, - { 0x03, 0x01, 0x0301, "big key chest" }, - { 0x07, 0x08, 0x0708, "first small chest treasure room" }, - { 0x07, 0x04, 0x0704, "east small chest behind first gate in graveyard" }, - { 0x07, 0x02, 0x0702, "west small chest behind first gate in graveyard" }, - { 0x08, 0x10, 0x0810, "killed darknut in north room 2F (spawn big chest)" }, - { 0x08, 0x08, 0x0808, "reach end of specter maze 3F" }, - { 0x08, 0x04, 0x0804, "darknut 4F intro cs part 2" }, - { 0x08, 0x02, 0x0802, "darknut 4F intro cs part 1" }, - { 0x08, 0x01, 0x0801, "cut painting in north east room 2F cs" }, - { 0x09, 0x80, 0x0980, "cut painting in north east room 2F cs" }, - { 0x09, 0x40, 0x0940, "killed all enemies in center room 1F cs 1/2" }, - { 0x09, 0x20, 0x0920, "spawn north east big chest center room 2F" }, - { 0x09, 0x10, 0x0910, "killed lizalfos garding big key chest" }, - { 0x09, 0x08, 0x0908, "open third gate in graveyard cs" }, - { 0x09, 0x04, 0x0904, "blown up rock in graveyard" }, - { 0x09, 0x02, 0x0902, "lit torch behind first gate in graveyard (stops rain)" }, - { 0x09, 0x01, 0x0901, "graveyard intro cs" }, - { 0x0A, 0x80, 0x0A80, "open second gate in graveyard cs" }, - { 0x0A, 0x40, 0x0A40, "open first gate in graveyard cs" }, - { 0x0A, 0x20, 0x0A20, "open third gate in graveyard" }, - { 0x0A, 0x10, 0x0A10, "open first gate in graveyard" }, - { 0x0A, 0x04, 0x0A04, "open second gate in graveyard" }, - { 0x0B, 0x01, 0x0B01, "defeated dark beast Ganon" }, - { 0x0C, 0x40, 0x0C40, "cut first left painting in north west room 2F" }, - { 0x0C, 0x20, 0x0C20, "cut second left painting in north west room 2F" }, - { 0x0C, 0x10, 0x0C10, "cut third left painting in north west room 2F" }, - { 0x0C, 0x02, 0x0C02, "killed all enemies in center room 1F" }, - { 0x0D, 0x80, 0x0D80, "despawn yellow magic walls in center room 1F" }, - { 0x0D, 0x40, 0x0D40, "spawn yellow magic walls in center room 1F" }, - { 0x0D, 0x20, 0x0D20, "outside 4F intro cs" }, - { 0x0D, 0x10, 0x0D10, "outside 4F intro cs" }, - { 0x0D, 0x08, 0x0D08, "killed all east bokoblins in south garden" }, - { 0x0D, 0x04, 0x0D04, "killed all west bokoblins in south garden" }, - { 0x0D, 0x01, 0x0D01, "east room 2F intro cs" }, - { 0x0E, 0x80, 0x0E80, "east room 2F intro cs" }, - { 0x0E, 0x10, 0x0E10, "killed right lezalfos in north west room 2F" }, - { 0x0E, 0x08, 0x0E08, "killed left lezalfos in north west room 2F" }, - { 0x0E, 0x01, 0x0E01, "midna text at the end of east garden (talk about wall)" }, - { 0x0F, 0x80, 0x0F80, "explored graveyard" }, - { 0x10, 0x80, 0x1080, "killed both lizalfos in 4F (removes yellow magic barrior)" }, - { 0x10, 0x40, 0x1040, "killed both lizalfos in 3F (removes yellow magic barrior)" }, - { 0x10, 0x20, 0x1020, "south garden intro cs" }, - { 0x10, 0x02, 0x1002, "Midna text prompt after king bulblin" }, - { 0x10, 0x01, 0x1001, "killed all bokoblins in west garden" }, - { 0x11, 0x80, 0x1180, "prevent all torches form extinguishing north east room 2F" }, - { 0x11, 0x40, 0x1140, "unlock door in north east room 2F cs" }, - { 0x11, 0x10, 0x1110, "open second gate in west garden" }, - { 0x11, 0x08, 0x1108, "east garden intro cs" }, - { 0x11, 0x04, 0x1104, "east garden intro cs" }, - { 0x11, 0x02, 0x1102, "open gate in east garden" }, - { 0x11, 0x01, 0x1101, "open gate in east garden cs" }, - { 0x12, 0x80, 0x1280, "unlock door in north east room 2F" }, - { 0x12, 0x40, 0x1240, "lit all torches correctly in north east room 2F" }, - { 0x12, 0x20, 0x1220, "lit all torches correctly in north east room 2F cs" }, - { 0x12, 0x10, 0x1210, "unlock door outside 3F" }, - { 0x12, 0x08, 0x1208, "open gate to big key chest" }, - { 0x12, 0x04, 0x1204, "killed arealfos outside 2F" }, - { 0x12, 0x01, 0x1201, "killed all enemies in center room 1F cs 1/2" }, - { 0x13, 0x40, 0x1340, "Double Darknut room intro cs" }, - { 0x13, 0x08, 0x1308, "spawn north west big chest center room 2F" }, - { 0x13, 0x04, 0x1304, "west room 2F intro cs" }, - { 0x13, 0x02, 0x1302, "cut right painting in north west room 2F" }, - { 0x14, 0x40, 0x1440, "unlock boss door" }, - { 0x14, 0x10, 0x1410, "unlock door in south garden" }, - { 0x14, 0x08, 0x1408, "midna text seen after small key in graveyard" }, - { 0x14, 0x04, 0x1404, "midna text promt after small key in graveyard" }, - { 0x14, 0x02, 0x1402, "Midna text seen after king bulblin" }, - { 0x14, 0x01, 0x1401, "north west room 2F intro cs" }, - { 0x15, 0x40, 0x1540, "cut painting in north east room 2F" }, - { 0x15, 0x08, 0x1508, "second gate in west garden stops moving" }, - { 0x15, 0x04, 0x1504, "open second gate in west garden cs" }, - { 0x15, 0x01, 0x1501, "killed dynalfos in east room 2F (unlocks doors)" }, - { 0x16, 0x80, 0x1680, "unlock treasure room door 4F" }, - { 0x16, 0x04, 0x1604, "killed darknuts in west room 2F (unlocks doors)" }, - { 0x16, 0x02, 0x1602, "reach big chest in north room 2F" }, - { 0x16, 0x01, 0x1601, "lit south east torch north room 2F for the first time cs" }, - { 0x17, 0x80, 0x1780, "lit north east torch north room 2F for the first time cs" }, - { 0x17, 0x10, 0x1710, "unlock door in north west room 2F" }, - { 0x17, 0x01, 0x1701, "killed darknut 4F (removes yellow magic barrier)" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "big chest behind first gate in graveyard" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "second small chest treasure room" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "eighth small chest treasure room" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "seventh small chest treasure room" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "sixth small chest treasure room" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "big chest north room 2F" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "fourth small chest treasure room" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "fifth small chest treasure room" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "third small chest treasure room" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "fifth big chest treasure room" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "fourth big chest treasure room" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "third big chest treasure room" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "second big chest treasure room" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "first big chest treasure room" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "north west big chest center room 2F" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "small chest east garden" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "north small chest west garden" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "compass north east big chest center room 2F" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small key big chest behind third gate in graveyard" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "center small chest west garden" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "map big chest east garden" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "king bulblin small key" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "south west big chest center room 2F" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "small key big chest outside 2F" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "big key chest" }, + { 0x07, 0x08, AreaFlagInd{0x0708}, "first small chest treasure room" }, + { 0x07, 0x04, AreaFlagInd{0x0704}, "east small chest behind first gate in graveyard" }, + { 0x07, 0x02, AreaFlagInd{0x0702}, "west small chest behind first gate in graveyard" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "killed darknut in north room 2F (spawn big chest)" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "reach end of specter maze 3F" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "darknut 4F intro cs part 2" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "darknut 4F intro cs part 1" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "cut painting in north east room 2F cs" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "cut painting in north east room 2F cs" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "killed all enemies in center room 1F cs 1/2" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "spawn north east big chest center room 2F" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "killed lizalfos garding big key chest" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "open third gate in graveyard cs" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "blown up rock in graveyard" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "lit torch behind first gate in graveyard (stops rain)" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "graveyard intro cs" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "open second gate in graveyard cs" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "open first gate in graveyard cs" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "open third gate in graveyard" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "open first gate in graveyard" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "open second gate in graveyard" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "defeated dark beast Ganon" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "cut first left painting in north west room 2F" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "cut second left painting in north west room 2F" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "cut third left painting in north west room 2F" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "killed all enemies in center room 1F" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "despawn yellow magic walls in center room 1F" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "spawn yellow magic walls in center room 1F" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "outside 4F intro cs" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "outside 4F intro cs" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "killed all east bokoblins in south garden" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "killed all west bokoblins in south garden" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "east room 2F intro cs" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "east room 2F intro cs" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "killed right lezalfos in north west room 2F" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "killed left lezalfos in north west room 2F" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "midna text at the end of east garden (talk about wall)" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "explored graveyard" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "killed both lizalfos in 4F (removes yellow magic barrior)" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "killed both lizalfos in 3F (removes yellow magic barrior)" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "south garden intro cs" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "Midna text prompt after king bulblin" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "killed all bokoblins in west garden" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "prevent all torches form extinguishing north east room 2F" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "unlock door in north east room 2F cs" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "open second gate in west garden" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "east garden intro cs" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "east garden intro cs" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "open gate in east garden" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "open gate in east garden cs" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "unlock door in north east room 2F" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "lit all torches correctly in north east room 2F" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "lit all torches correctly in north east room 2F cs" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "unlock door outside 3F" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "open gate to big key chest" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "killed arealfos outside 2F" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "killed all enemies in center room 1F cs 1/2" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "Double Darknut room intro cs" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "spawn north west big chest center room 2F" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "west room 2F intro cs" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "cut right painting in north west room 2F" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "unlock boss door" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "unlock door in south garden" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "midna text seen after small key in graveyard" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "midna text promt after small key in graveyard" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "Midna text seen after king bulblin" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "north west room 2F intro cs" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "cut painting in north east room 2F" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "second gate in west garden stops moving" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "open second gate in west garden cs" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "killed dynalfos in east room 2F (unlocks doors)" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "unlock treasure room door 4F" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "killed darknuts in west room 2F (unlocks doors)" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "reach big chest in north room 2F" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "lit south east torch north room 2F for the first time cs" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "lit north east torch north room 2F for the first time cs" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "unlock door in north west room 2F" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "killed darknut 4F (removes yellow magic barrier)" }, }; inline EventAreaFlags eventAreaFlagsHyruleField[] = { - { 0x02, 0x80, 0x0280, "Big chest owl statue hylia bridge" }, - { 0x02, 0x40, 0x0240, "Big chest spinner south of castle town" }, - { 0x02, 0x20, 0x0220, "Big chest double clawshot south of castle town" }, - { 0x02, 0x10, 0x0210, "Big chest tight rope south of castle town" }, - { 0x02, 0x08, 0x0208, "Big chest owl statue next to castle town" }, - { 0x02, 0x04, 0x0204, "Big chest on hylia bridge" }, - { 0x02, 0x02, 0x0202, "Big chest next to poe past hylia bridge" }, - { 0x02, 0x01, 0x0201, "Big chest spinner tracks (Lanayru)" }, - { 0x03, 0x80, 0x0380, "Big chest underwater Lanayru field" }, - { 0x03, 0x40, 0x0340, "Big chest under bridge faron field" }, - { 0x03, 0x20, 0x0320, "PoH big chest double clawshot Eldin gorge" }, - { 0x03, 0x10, 0x0310, "Big chest Eldin gorge owl statue" }, - { 0x03, 0x08, 0x0308, "PoH big chest owl statue Eldin bridge" }, - { 0x03, 0x04, 0x0304, "PoH big chest leage Eldin field after kakariko" }, - { 0x03, 0x02, 0x0302, "Map marker Telma carrage past hylia bridge" }, - { 0x03, 0x01, 0x0301, "Map marker Telma carrage west of castle town" }, - { 0x08, 0x80, 0x0880, "Lanayru field intro cs twilight" }, - { 0x08, 0x20, 0x0820, "blown up rock blocking Eldin long cave" }, - { 0x08, 0x10, 0x0810, "Hidden village path open" }, - { 0x08, 0x08, 0x0808, "East Castle Town Bridge Flag" }, - { 0x08, 0x04, 0x0804, "blown up rocks blocking path to zora's domain" }, - { 0x08, 0x01, 0x0801, "Midna pulls up the map to show you can warp" }, - { 0x09, 0x80, 0x0980, "midna text Eldin gorge bridge gone" }, - { 0x09, 0x40, 0x0940, "exit flight by foul after lanayru twilight cleared" }, - { 0x09, 0x20, 0x0920, "Kakariko Gorge Portal" }, - { 0x09, 0x10, 0x0910, "spawn barriers Eldin gorge dark beasts (unset once killed)" }, - { 0x09, 0x08, 0x0908, "bridge of Eldin placed (cs)" }, - { 0x09, 0x04, 0x0904, "Eldin bridge getting stolen cs trigger" }, - { 0x09, 0x02, 0x0902, "blown up rocks past Eldin bridge that lead to Lanayru" }, - { 0x09, 0x01, 0x0901, "see gorge gate cs" }, - { 0x0A, 0x80, 0x0A80, "blown up rocks to spinner tracks (Lanayru field side)" }, - { 0x0A, 0x40, 0x0A40, "blown up rocks to spinner tracks (hylia bridge side)" }, - { 0x0A, 0x20, 0x0A20, "entered Lanayru twilight cs" }, - { 0x0A, 0x10, 0x0A10, "entered Eldin twilight cs" }, - { 0x0A, 0x08, 0x0A08, "killed left shadow bulblin behind gorge gate twilight" }, - { 0x0A, 0x04, 0x0A04, "killed right shadow bulblin behind gorge gate twilight" }, - { 0x0A, 0x02, 0x0A02, "jumped over gorge fence after obtaining Epona" }, - { 0x0B, 0x80, 0x0B80, "Lanayru Main Feild has water on map" }, - { 0x0B, 0x40, 0x0B40, "seeing Lanayru twilight from up close cs" }, - { 0x0B, 0x20, 0x0B20, "seeing Eldin twilight from up close cs" }, - { 0x0B, 0x10, 0x0B10, "spawn dark beasts castle town portal (stays set)" }, - { 0x0B, 0x08, 0x0B08, "Castle Town Portal" }, - { 0x0B, 0x04, 0x0B04, "?" }, - { 0x0B, 0x01, 0x0B01, "blown up rocks from Eldin gorge to Eldin field" }, - { 0x0C, 0x80, 0x0C80, "blown up second rock to poe past hylia bridge" }, - { 0x0C, 0x20, 0x0C20, "Epona is accessible to Link (without calling her) (after lanayru twilight)" }, - { 0x0C, 0x08, 0x0C08, "killed poe past hylia bridge" }, - { 0x0C, 0x04, 0x0C04, "killed poe Eldin gorge" }, - { 0x0C, 0x02, 0x0C02, "killed poe faron field" }, - { 0x0D, 0x80, 0x0D80, "Midna text after warping gorge bridge back" }, - { 0x0D, 0x40, 0x0D40, "?" }, - { 0x0D, 0x10, 0x0D10, "spinner path next to hidden village explored" }, - { 0x0D, 0x08, 0x0D08, "killed poe Lanayru field" }, - { 0x0D, 0x02, 0x0D02, "enter field west of castle town from the east" }, - { 0x0D, 0x01, 0x0D01, "killed poe south of castle town" }, - { 0x0E, 0x80, 0x0E80, "bridge of Hylia intro cs twilight" }, - { 0x0E, 0x40, 0x0E40, "blown up rock blocking ice cave Lanayru field" }, - { 0x0E, 0x20, 0x0E20, "faron field intro cs" }, - { 0x0E, 0x10, 0x0E10, "blown up rock on leadge Eldin field after kakariko" }, - { 0x0E, 0x08, 0x0E08, "blown up first rock to poe past hylia bridge" }, - { 0x0E, 0x04, 0x0E04, "Hero's shade map marker (south castle town)" }, - { 0x0E, 0x02, 0x0E02, "Hero's shade map marker (west castle town)" }, - { 0x0E, 0x01, 0x0E01, "enter bridge east of castle town" }, - { 0x0F, 0x80, 0x0F80, "enter field south of castle town" }, - { 0x0F, 0x40, 0x0F40, "enter field west of castle town from the north" }, - { 0x0F, 0x20, 0x0F20, "?" }, - { 0x0F, 0x10, 0x0F10, "open path from faron field to south of castle town" }, - { 0x0F, 0x08, 0x0F08, "Midna text after Lanayru field twilight cs" }, - { 0x0F, 0x04, 0x0F04, "blown up rocks Eldin field after kakariko" }, - { 0x0F, 0x02, 0x0F02, "Eldin gorge bridge placed cs" }, - { 0x0F, 0x01, 0x0F01, "see Ilia's bag from far away" }, - { 0x10, 0x01, 0x1001, "Zora rivver boat path on map (Eldin)" }, - { 0x11, 0x80, 0x1180, "Sky letter next to castle town" }, - { 0x11, 0x40, 0x1140, "Map marker owl stature next to castle town" }, - { 0x11, 0x20, 0x1120, "Sky letter hylia bridge" }, - { 0x11, 0x10, 0x1110, "Map marker owl stature Hylia bridge" }, - { 0x11, 0x08, 0x1108, "Sky letter Eldin bridge" }, - { 0x11, 0x04, 0x1104, "Map marker owl stature Eldin bridge" }, - { 0x11, 0x02, 0x1102, "Sky letter Eldin gorge" }, - { 0x11, 0x01, 0x1101, "Map marker owl stature Eldin gorge" }, - { 0x12, 0x10, 0x1210, "blown up northern rock in field west of castle town" }, - { 0x12, 0x08, 0x1208, "blown up most northern rock in field west of castle town" }, - { 0x12, 0x04, 0x1204, "blown up rock south of castle town" }, - { 0x12, 0x02, 0x1202, "killed poe next to owl statue next to castle town" }, - { 0x13, 0x80, 0x1380, "killed poe east of castle town" }, - { 0x13, 0x10, 0x1310, "?" }, - { 0x13, 0x08, 0x1308, "?" }, - { 0x13, 0x04, 0x1304, "Epona isn't accessible to Link (without calling her) (after lanayru twilight)" }, - { 0x13, 0x02, 0x1302, "?" }, - { 0x13, 0x01, 0x1301, "Map marker hidden village" }, - { 0x14, 0x80, 0x1480, "blown up southern rock underwater Lanayru field" }, - { 0x14, 0x40, 0x1440, "blown up northern rock underwater Lanayru field" }, - { 0x14, 0x20, 0x1420, "blown up eastern rock Lanayru field " }, - { 0x14, 0x10, 0x1410, "blown up rock next to hylia bridge owl statue" }, - { 0x14, 0x08, 0x1408, "blown up rock closest to faron after hylia bridge" }, - { 0x14, 0x04, 0x1404, "blown up rock next to free standing PoH Elding gorge" }, - { 0x14, 0x01, 0x1401, "blown up rock next to Eldin gorge owl statue" }, - { 0x15, 0x80, 0x1580, "blown up rock past Eldin bridge" }, - { 0x16, 0x20, 0x1620, "Midna text after getting Ilia's scent" }, - { 0x16, 0x10, 0x1610, "Midna text after entering Lanayru twilight" }, - { 0x16, 0x08, 0x1608, "Midna text when seeing Lanayru twilight from far away" }, - { 0x16, 0x04, 0x1604, "Midna text after getting Youth's scent" }, - { 0x16, 0x02, 0x1602, "Midna text after entering Eldin twilight" }, - { 0x16, 0x01, 0x1601, "Midna text when seeing Eldin twilight from far away" }, - { 0x17, 0x80, 0x1780, "got Ilia's scent cs" }, - { 0x17, 0x40, 0x1740, "got youth's scent cs" }, - { 0x17, 0x20, 0x1720, "Epona can't cross Eldin bridge (set when stolen, unset when fixed)" }, - { 0x17, 0x10, 0x1710, "see broken wooden sword from far away cs" }, - { 0x17, 0x08, 0x1708, "Bridge of Eldin Portal" }, - { 0x1A, 0x80, 0x1A80, "picked up rupees from rock past Eldin bridge" }, - { 0x1A, 0x40, 0x1A40, "picked up rupees from rock next to free standing PoH Elding gorge" }, - { 0x1A, 0x20, 0x1A20, "picked up rupees from rock next to Eldin gorge owl statue" }, - { 0x1A, 0x10, 0x1A10, "picked up rupees from rock closest to faron after hylia bridge" }, - { 0x1A, 0x08, 0x1A08, "picked up rupees from rock next to hylia bridge owl statue" }, - { 0x1A, 0x04, 0x1A04, "picked up rupees from rocks to spinner tracks (hylia bridge side)" }, - { 0x1A, 0x02, 0x1A02, "picked up rupees from rocks to spinner tracks (Lanayru field side)" }, - { 0x1A, 0x01, 0x1A01, "picked up rupees from eastern rock Lanayru field " }, - { 0x1B, 0x80, 0x1B80, "picked up rupees from northern rock underwater Lanayru field" }, - { 0x1B, 0x40, 0x1B40, "picked up rupees from southern rock underwater Lanayru field" }, - { 0x1B, 0x20, 0x1B20, "picked up rupees from northern rock in field west of castle town" }, - { 0x1B, 0x10, 0x1B10, "picked up rupees from most northern rock in field west of castle town" }, - { 0x1B, 0x08, 0x1B08, "picked up rupees from rock south of castle town" }, - { 0x1B, 0x04, 0x1B04, "free standing PoH Elding gorge" }, - { 0x1B, 0x02, 0x1B02, "free standing PoH faron field" }, - { 0x1B, 0x01, 0x1B01, "free standing PoH goron Eldin field" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "Big chest owl statue hylia bridge" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "Big chest spinner south of castle town" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "Big chest double clawshot south of castle town" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "Big chest tight rope south of castle town" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "Big chest owl statue next to castle town" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "Big chest on hylia bridge" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "Big chest next to poe past hylia bridge" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "Big chest spinner tracks (Lanayru)" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "Big chest underwater Lanayru field" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "Big chest under bridge faron field" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "PoH big chest double clawshot Eldin gorge" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "Big chest Eldin gorge owl statue" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "PoH big chest owl statue Eldin bridge" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "PoH big chest leage Eldin field after kakariko" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "Map marker Telma carrage past hylia bridge" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "Map marker Telma carrage west of castle town" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "Lanayru field intro cs twilight" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "blown up rock blocking Eldin long cave" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "Hidden village path open" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "East Castle Town Bridge Flag" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "blown up rocks blocking path to zora's domain" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "Midna pulls up the map to show you can warp" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "midna text Eldin gorge bridge gone" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "exit flight by foul after lanayru twilight cleared" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "Kakariko Gorge Portal" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "spawn barriers Eldin gorge dark beasts (unset once killed)" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "bridge of Eldin placed (cs)" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "Eldin bridge getting stolen cs trigger" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "blown up rocks past Eldin bridge that lead to Lanayru" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "see gorge gate cs" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "blown up rocks to spinner tracks (Lanayru field side)" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "blown up rocks to spinner tracks (hylia bridge side)" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "entered Lanayru twilight cs" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "entered Eldin twilight cs" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "killed left shadow bulblin behind gorge gate twilight" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "killed right shadow bulblin behind gorge gate twilight" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "jumped over gorge fence after obtaining Epona" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "Lanayru Main Feild has water on map" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "seeing Lanayru twilight from up close cs" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "seeing Eldin twilight from up close cs" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "spawn dark beasts castle town portal (stays set)" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "Castle Town Portal" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "?" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "blown up rocks from Eldin gorge to Eldin field" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "blown up second rock to poe past hylia bridge" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "Epona is accessible to Link (without calling her) (after lanayru twilight)" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "killed poe past hylia bridge" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "killed poe Eldin gorge" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "killed poe faron field" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "Midna text after warping gorge bridge back" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "?" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "spinner path next to hidden village explored" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "killed poe Lanayru field" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "enter field west of castle town from the east" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "killed poe south of castle town" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "bridge of Hylia intro cs twilight" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "blown up rock blocking ice cave Lanayru field" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "faron field intro cs" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "blown up rock on leadge Eldin field after kakariko" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "blown up first rock to poe past hylia bridge" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "Hero's shade map marker (south castle town)" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "Hero's shade map marker (west castle town)" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "enter bridge east of castle town" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "enter field south of castle town" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "enter field west of castle town from the north" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "?" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "open path from faron field to south of castle town" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "Midna text after Lanayru field twilight cs" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "blown up rocks Eldin field after kakariko" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "Eldin gorge bridge placed cs" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "see Ilia's bag from far away" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "Zora rivver boat path on map (Eldin)" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "Sky letter next to castle town" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "Map marker owl stature next to castle town" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "Sky letter hylia bridge" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "Map marker owl stature Hylia bridge" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "Sky letter Eldin bridge" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "Map marker owl stature Eldin bridge" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "Sky letter Eldin gorge" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "Map marker owl stature Eldin gorge" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "blown up northern rock in field west of castle town" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "blown up most northern rock in field west of castle town" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "blown up rock south of castle town" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "killed poe next to owl statue next to castle town" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "killed poe east of castle town" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "?" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "?" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "Epona isn't accessible to Link (without calling her) (after lanayru twilight)" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "?" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "Map marker hidden village" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "blown up southern rock underwater Lanayru field" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "blown up northern rock underwater Lanayru field" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "blown up eastern rock Lanayru field " }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "blown up rock next to hylia bridge owl statue" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "blown up rock closest to faron after hylia bridge" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "blown up rock next to free standing PoH Elding gorge" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "blown up rock next to Eldin gorge owl statue" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "blown up rock past Eldin bridge" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "Midna text after getting Ilia's scent" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "Midna text after entering Lanayru twilight" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "Midna text when seeing Lanayru twilight from far away" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "Midna text after getting Youth's scent" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "Midna text after entering Eldin twilight" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "Midna text when seeing Eldin twilight from far away" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "got Ilia's scent cs" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "got youth's scent cs" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "Epona can't cross Eldin bridge (set when stolen, unset when fixed)" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "see broken wooden sword from far away cs" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "Bridge of Eldin Portal" }, + { 0x1A, 0x80, AreaFlagInd{0x1A80}, "picked up rupees from rock past Eldin bridge" }, + { 0x1A, 0x40, AreaFlagInd{0x1A40}, "picked up rupees from rock next to free standing PoH Elding gorge" }, + { 0x1A, 0x20, AreaFlagInd{0x1A20}, "picked up rupees from rock next to Eldin gorge owl statue" }, + { 0x1A, 0x10, AreaFlagInd{0x1A10}, "picked up rupees from rock closest to faron after hylia bridge" }, + { 0x1A, 0x08, AreaFlagInd{0x1A08}, "picked up rupees from rock next to hylia bridge owl statue" }, + { 0x1A, 0x04, AreaFlagInd{0x1A04}, "picked up rupees from rocks to spinner tracks (hylia bridge side)" }, + { 0x1A, 0x02, AreaFlagInd{0x1A02}, "picked up rupees from rocks to spinner tracks (Lanayru field side)" }, + { 0x1A, 0x01, AreaFlagInd{0x1A01}, "picked up rupees from eastern rock Lanayru field " }, + { 0x1B, 0x80, AreaFlagInd{0x1B80}, "picked up rupees from northern rock underwater Lanayru field" }, + { 0x1B, 0x40, AreaFlagInd{0x1B40}, "picked up rupees from southern rock underwater Lanayru field" }, + { 0x1B, 0x20, AreaFlagInd{0x1B20}, "picked up rupees from northern rock in field west of castle town" }, + { 0x1B, 0x10, AreaFlagInd{0x1B10}, "picked up rupees from most northern rock in field west of castle town" }, + { 0x1B, 0x08, AreaFlagInd{0x1B08}, "picked up rupees from rock south of castle town" }, + { 0x1B, 0x04, AreaFlagInd{0x1B04}, "free standing PoH Elding gorge" }, + { 0x1B, 0x02, AreaFlagInd{0x1B02}, "free standing PoH faron field" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "free standing PoH goron Eldin field" }, }; inline EventAreaFlags eventAreaFlagsLanayru[] = { - { 0x00, 0x40, 0x0040, "small chest next to mother and child iles zora's domain" }, - { 0x00, 0x20, 0x0020, "big chest fountain back room" }, - { 0x00, 0x10, 0x0010, "left small chest fountain back room" }, - { 0x00, 0x08, 0x0008, "right small chest fountain back room" }, - { 0x00, 0x04, 0x0004, "small chest midna jumps zora's domain" }, - { 0x01, 0x10, 0x0110, "west big chest zora's domain throne room" }, - { 0x01, 0x08, 0x0108, "east big chest zora's domain throne room" }, - { 0x02, 0x10, 0x0210, "small chest large underwater pillar in fountain" }, - { 0x02, 0x04, 0x0204, "small chest small underwater pillar in fountain" }, - { 0x02, 0x01, 0x0201, "small chest floor 3 flight by foul" }, - { 0x03, 0x80, 0x0380, "small chest floor 2 flight by foul" }, - { 0x03, 0x40, 0x0340, "big chest right pillar in front of fountain Lake Hylia" }, - { 0x03, 0x20, 0x0320, "big chest underwater next to Lake Hylia warp" }, - { 0x03, 0x10, 0x0310, "east big chest fountain" }, - { 0x03, 0x08, 0x0308, "west big chest fountain" }, - { 0x03, 0x04, 0x0304, "big chest floor 4 flight by foul" }, - { 0x03, 0x02, 0x0302, "small chest left pillar in front of fountain Lae Hylia" }, - { 0x03, 0x01, 0x0301, "big chest floor 5 flight by foul" }, - { 0x04, 0x40, 0x0440, "tear of light throne room zora's domain" }, - { 0x04, 0x20, 0x0420, "first tear of light flying" }, - { 0x04, 0x10, 0x0410, "tear of light midna jumps zora's domain" }, - { 0x04, 0x08, 0x0408, "tear of light on top of water zora's domain" }, - { 0x04, 0x04, 0x0404, "third tear of light flying" }, - { 0x04, 0x02, 0x0402, "fourth tear of light flying" }, - { 0x05, 0x80, 0x0580, "tear of light next to Iza's shop" }, - { 0x05, 0x40, 0x0540, "second tear of light flying" }, - { 0x05, 0x20, 0x0520, "final tear of light" }, - { 0x05, 0x04, 0x0504, "tear of light behind of Fyer's canon" }, - { 0x05, 0x02, 0x0502, "tear of light island east of Lake Hylia" }, - { 0x05, 0x01, 0x0501, "tear of light southmost island Lake Hylia" }, - { 0x06, 0x80, 0x0680, "tear of light next to fountain Lake Hylia" }, - { 0x06, 0x40, 0x0640, "tear of light on top of water zora's domain" }, - { 0x06, 0x20, 0x0620, "tear of light next to mother and child iles zora's domain" }, - { 0x08, 0x80, 0x0880, "see frozen zora spirits in domain twilight" }, - { 0x08, 0x40, 0x0840, "Lake hylia intro cs twilight" }, - { 0x08, 0x20, 0x0820, "blown up underwater rock in center of fountain" }, - { 0x08, 0x10, 0x0810, "the two zoras in upper zora river went down stream (twilight)" }, - { 0x08, 0x08, 0x0808, "saw light bug come out next to Iza spirit cs" }, - { 0x08, 0x02, 0x0802, "blown up rock to Lake hylia long cave" }, - { 0x08, 0x01, 0x0801, "spawned UZR portal fight barriers" }, - { 0x09, 0x80, 0x0980, "opened Upper Zora's River Portal cs" }, - { 0x09, 0x40, 0x0940, "talked to Iza before UZR portal" }, - { 0x09, 0x20, 0x0920, "Upper Zora's River Portal" }, - { 0x09, 0x10, 0x0910, "spawn big chest fountain back room" }, - { 0x09, 0x08, 0x0908, "lit left torch fountain back room" }, - { 0x09, 0x04, 0x0904, "lit right torch fountain back room" }, - { 0x09, 0x02, 0x0902, "seeing Twilight Bloat with sense cs" }, - { 0x09, 0x01, 0x0901, "Twilight Bloat comes out of water cs" }, - { 0x0A, 0x80, 0x0A80, "seeing Twilit Bloat move from far away cs" }, - { 0x0A, 0x40, 0x0A40, "Save Prompt after Lakebed (if disabled, triggers MDH after Lakebed)" }, - { 0x0A, 0x20, 0x0A20, "twilight end cs trigger (also map marker Lakebed Temple)" }, - { 0x0A, 0x10, 0x0A10, "obtained vessel of light (unset after twilight)" }, - { 0x0A, 0x08, 0x0A08, "spawn dark beasts Lake Hylia (unset once killed)" }, - { 0x0A, 0x04, 0x0A04, "Lake Hylia Portal" }, - { 0x0A, 0x02, 0x0A02, "Zora's river intro cs during twilight (flying with bird)" }, - { 0x0A, 0x01, 0x0A01, "midna text promt saying you can call down Kargarok to fly" }, - { 0x0B, 0x80, 0x0B80, "Rutella cs in domain twilight" }, - { 0x0B, 0x40, 0x0B40, "Zora river boat path on map" }, - { 0x0B, 0x20, 0x0B20, "entered Twilight Bloat arena (unset once killed)" }, - { 0x0B, 0x10, 0x0B10, "explored entrance to snowpeak" }, - { 0x0B, 0x08, 0x0B08, "got PoH flight by foul" }, - { 0x0B, 0x04, 0x0B04, "Zora's Domain Portal" }, - { 0x0B, 0x02, 0x0B02, "spawn barriers Zora's domain dark beasts fight" }, - { 0x0B, 0x01, 0x0B01, "Zora's domain intro cs twilight (frozen)" }, - { 0x0C, 0x08, 0x0C08, "blown up south underwater rock zora's domain " }, - { 0x0C, 0x04, 0x0C04, "blown up north underwater rock zora's domain" }, - { 0x0C, 0x02, 0x0C02, "blown up underwater rock in back of fountain" }, - { 0x0C, 0x01, 0x0C01, "Midna text after landing in Lake hylia twilight" }, - { 0x0D, 0x80, 0x0D80, "Iza text after Upper Zora's River Portal" }, - { 0x0D, 0x40, 0x0D40, "can now exit from the sides of zora's domain inside (set during domain outside cs after melting it)" }, - { 0x0D, 0x20, 0x0D20, "Midna text after domain outside cs after melting it" }, - { 0x0D, 0x10, 0x0D10, "domain outside cs after melting it" }, - { 0x0D, 0x08, 0x0D08, "map marker Auru" }, - { 0x0D, 0x04, 0x0D04, "Upper zora's river intro cs during twilight" }, - { 0x0D, 0x02, 0x0D02, "Midna text after leaving lake hylia after Lanayru twilight" }, - { 0x0D, 0x01, 0x0D01, "Zora's domain waterfall is going fast (during twilight only) (unset when you come back to Lake hylia)" }, - { 0x0E, 0x80, 0x0E80, "blown up rock blocking lakebed entrance cs" }, - { 0x0E, 0x40, 0x0E40, "opened stream next to lakebed entance" }, - { 0x0E, 0x20, 0x0E20, "Midna text after arriving at upper zora's river twilight" }, - { 0x0E, 0x10, 0x0E10, "melted zora's domain (Lake Hylia water on map (top part))" }, - { 0x0E, 0x08, 0x0E08, "twilight end cs watched" }, - { 0x0E, 0x04, 0x0E04, "map marker Snowpeak" }, - { 0x0E, 0x01, 0x0E01, "Midna text after coming back to lake after filling it (twilight)" }, - { 0x0F, 0x80, 0x0F80, "blown up rock blocking lakebed entrance" }, - { 0x0F, 0x40, 0x0F40, "went down the fast water in zora's domain (void out) (unset after twilight)" }, - { 0x0F, 0x20, 0x0F20, "Lake hylia filled twilight intro cs (domain water level normal)" }, - { 0x0F, 0x10, 0x0F10, "blown up first rock to throne room zora's domain" }, - { 0x0F, 0x08, 0x0F08, "Midna text prompt to tell you to look under the ice in zora's domain twilight" }, - { 0x0F, 0x04, 0x0F04, "Midna text before midna jumps fozen zora's domain twilight" }, - { 0x0F, 0x02, 0x0F02, "Midna text before midna jumps melted zora's domain twilight" }, - { 0x0F, 0x01, 0x0F01, "Midna text after melting domain (water everywhere on map)" }, - { 0x10, 0x80, 0x1080, "blown up underwater rock zora river town path" }, - { 0x10, 0x40, 0x1040, "spawn west big chest zora's domain throne room" }, - { 0x10, 0x20, 0x1020, "spawn east big chest zora's domain throne room" }, - { 0x10, 0x10, 0x1010, "lit east torch zora's domain throne room" }, - { 0x10, 0x08, 0x1008, "extingushed north torch zora's domain throne room" }, - { 0x10, 0x04, 0x1004, "lit west torch zora's domain throne room" }, - { 0x10, 0x02, 0x1002, "blown up west underwater rock Lakebed area" }, - { 0x10, 0x01, 0x1001, "blown up south underwater rock Lakebed area" }, - { 0x11, 0x80, 0x1180, "saw the two zora spirits from far away in upper zora river cs (twilight)" }, - { 0x11, 0x40, 0x1140, "saw light bug moving after exiting lanayru spring" }, - { 0x11, 0x20, 0x1120, "went down zora's river with bird during twilight" }, - { 0x11, 0x10, 0x1110, "blown up underwater rock zora river lake path" }, - { 0x11, 0x08, 0x1108, "midna text after seeing the frozen zoras in domain twilight" }, - { 0x11, 0x02, 0x1102, "paid Fyer to launch you to the flight by foul platform (unset once you enter the canon)" }, - { 0x11, 0x01, 0x1101, "blown up north underwater rock throne room zora's domain" }, - { 0x12, 0x80, 0x1280, "Lanayru spring map marker" }, - { 0x12, 0x40, 0x1240, "Midna Text after frozen zora's domain twilight intro cs" }, - { 0x12, 0x20, 0x1220, "killed poe underneath flight by foul" }, - { 0x12, 0x10, 0x1210, "killed poe next to watch tower to desert" }, - { 0x12, 0x08, 0x1208, "killed poe east of lake Hylia" }, - { 0x12, 0x04, 0x1204, "killed poe next to mother and chile iles Zora's Domain" }, - { 0x12, 0x02, 0x1202, "killed poe midna jumps Zora's Domain" }, - { 0x12, 0x01, 0x1201, "killed poe in Upper Zora's River" }, - { 0x13, 0x80, 0x1380, "killed poe on flight by foul prizes" }, - { 0x13, 0x40, 0x1340, "killed poe next to fountain Lake Hylia" }, - { 0x13, 0x20, 0x1320, "blew up rock in Iza's house" }, - { 0x13, 0x10, 0x1310, "Iza text after blowing the rocks inside her house" }, - { 0x13, 0x01, 0x1301, "blew up rock in Iza's house cs" }, - { 0x14, 0x40, 0x1440, "killed light bug throne room zora's domain" }, - { 0x14, 0x20, 0x1420, "killed first light bug flying" }, - { 0x14, 0x10, 0x1410, "killed light bug midna jumps zora's domain" }, - { 0x14, 0x08, 0x1408, "killed light bug on top of water zora's domain" }, - { 0x14, 0x04, 0x1404, "killed third light bug flying" }, - { 0x14, 0x02, 0x1402, "killed fourth light bug flying" }, - { 0x14, 0x01, 0x1401, "killed light bug behind of Fyer's canon" }, - { 0x15, 0x80, 0x1580, "killed light bug next to Iza's shop" }, - { 0x15, 0x40, 0x1540, "killed second light bug flying" }, - { 0x15, 0x20, 0x1520, "killed final light bug (Twilight Bloat)" }, - { 0x15, 0x10, 0x1510, "killed light bug island east of Lake Hylia" }, - { 0x15, 0x02, 0x1502, "killed light bug next to mother and child iles zora's domain" }, - { 0x15, 0x01, 0x1501, "?" }, - { 0x16, 0x80, 0x1680, "Watched CS of Ooccoo running to Sky Cannon" }, - { 0x16, 0x40, 0x1640, "killed light bug on top of water zora's domain" }, - { 0x16, 0x20, 0x1620, "killed light bug southmost island Lake Hylia" }, - { 0x16, 0x10, 0x1610, "killed light bug next to fountain Lake Hylia" }, - { 0x16, 0x02, 0x1602, "talked to light spirit during twilight" }, - { 0x16, 0x01, 0x1601, "went up zora's river after melting domain in twilight" }, - { 0x17, 0x80, 0x1780, "blown up rock zora river on land" }, - { 0x17, 0x40, 0x1740, "went up zora's river after melting domain in twilight (also set when failing to do so)" }, - { 0x17, 0x20, 0x1720, "blown up second rock to throne room zora's domain" }, - { 0x17, 0x10, 0x1710, "?" }, - { 0x17, 0x02, 0x1702, "Midna text after Zora's domain portal" }, - { 0x17, 0x01, 0x1701, "blown up underwater rock zora river middle" }, - { 0x18, 0x08, 0x1808, "picked up rupees from south underwater rock Lakebed area" }, - { 0x18, 0x04, 0x1804, "picked up rupees from west underwater rock Lakebed area" }, - { 0x18, 0x02, 0x1802, "picked up green rupees domain midna jumps twilight" }, - { 0x18, 0x01, 0x1801, "picked up fourth green rupee domain midna jumps twilight" }, - { 0x19, 0x80, 0x1980, "picked up third blue rupee midna jumps zora's domain" }, - { 0x19, 0x40, 0x1940, "picked up second blue rupee midna jumps zora's domain" }, - { 0x19, 0x20, 0x1920, "picked up first blue rupee midna jumps zora's domain" }, - { 0x19, 0x10, 0x1910, "picked up rupees from rock zora river on land" }, - { 0x19, 0x08, 0x1908, "picked up rupees from underwater rock zora river lake path" }, - { 0x19, 0x04, 0x1904, "picked up rupees from underwater rock zora river town path" }, - { 0x19, 0x02, 0x1902, "picked up rupees from underwater rock zora river middle" }, - { 0x19, 0x01, 0x1901, "picked up rupees from underwater rock back fountain" }, - { 0x1A, 0x80, 0x1A80, "picked up rupees from underwater rock center fountain" }, - { 0x1A, 0x40, 0x1A40, "picked up rupees from south underwater rock zora's domain " }, - { 0x1A, 0x20, 0x1A20, "picked up rupees from north underwater rock zora's domain" }, - { 0x1A, 0x10, 0x1A10, "picked up rupees from first rock to throne room zora's domain" }, - { 0x1A, 0x08, 0x1A08, "picked up rupees from second rock to throne room zora's domain" }, - { 0x1A, 0x04, 0x1A04, "picked up east blue rupees behind underwater bridge throne room zora's domain" }, - { 0x1A, 0x02, 0x1A02, "picked up west blue rupees behind underwater bridge throne room zora's domain" }, - { 0x1A, 0x01, 0x1A01, "picked up south yellow rupee unerwater throne room zora's domain" }, - { 0x1B, 0x80, 0x1B80, "picked up north yellow rupee unerwater throne room zora's domain" }, - { 0x1B, 0x40, 0x1B40, "picked up east yellow rupee unerwater throne room zora's domain" }, - { 0x1B, 0x20, 0x1B20, "picked up yellow rupee above north underwater rock throne room zora's domain" }, - { 0x1B, 0x10, 0x1B10, "picked up first yellow rupee midna jumps zora's domain" }, - { 0x1B, 0x08, 0x1B08, "picked up second yellow rupee midna jumps zora's domain" }, - { 0x1B, 0x02, 0x1B02, "picked up yellow rupee from broken pillar lakebed area" }, - { 0x1B, 0x01, 0x1B01, "picked up yellow rupee from broken pillar lakebed area" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "small chest next to mother and child iles zora's domain" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "big chest fountain back room" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "left small chest fountain back room" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "right small chest fountain back room" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "small chest midna jumps zora's domain" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "west big chest zora's domain throne room" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "east big chest zora's domain throne room" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "small chest large underwater pillar in fountain" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "small chest small underwater pillar in fountain" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "small chest floor 3 flight by foul" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small chest floor 2 flight by foul" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "big chest right pillar in front of fountain Lake Hylia" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "big chest underwater next to Lake Hylia warp" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "east big chest fountain" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "west big chest fountain" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "big chest floor 4 flight by foul" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "small chest left pillar in front of fountain Lae Hylia" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "big chest floor 5 flight by foul" }, + { 0x04, 0x40, AreaFlagInd{0x0440}, "tear of light throne room zora's domain" }, + { 0x04, 0x20, AreaFlagInd{0x0420}, "first tear of light flying" }, + { 0x04, 0x10, AreaFlagInd{0x0410}, "tear of light midna jumps zora's domain" }, + { 0x04, 0x08, AreaFlagInd{0x0408}, "tear of light on top of water zora's domain" }, + { 0x04, 0x04, AreaFlagInd{0x0404}, "third tear of light flying" }, + { 0x04, 0x02, AreaFlagInd{0x0402}, "fourth tear of light flying" }, + { 0x05, 0x80, AreaFlagInd{0x0580}, "tear of light next to Iza's shop" }, + { 0x05, 0x40, AreaFlagInd{0x0540}, "second tear of light flying" }, + { 0x05, 0x20, AreaFlagInd{0x0520}, "final tear of light" }, + { 0x05, 0x04, AreaFlagInd{0x0504}, "tear of light behind of Fyer's canon" }, + { 0x05, 0x02, AreaFlagInd{0x0502}, "tear of light island east of Lake Hylia" }, + { 0x05, 0x01, AreaFlagInd{0x0501}, "tear of light southmost island Lake Hylia" }, + { 0x06, 0x80, AreaFlagInd{0x0680}, "tear of light next to fountain Lake Hylia" }, + { 0x06, 0x40, AreaFlagInd{0x0640}, "tear of light on top of water zora's domain" }, + { 0x06, 0x20, AreaFlagInd{0x0620}, "tear of light next to mother and child iles zora's domain" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "see frozen zora spirits in domain twilight" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "Lake hylia intro cs twilight" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "blown up underwater rock in center of fountain" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "the two zoras in upper zora river went down stream (twilight)" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "saw light bug come out next to Iza spirit cs" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "blown up rock to Lake hylia long cave" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "spawned UZR portal fight barriers" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "opened Upper Zora's River Portal cs" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "talked to Iza before UZR portal" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "Upper Zora's River Portal" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "spawn big chest fountain back room" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "lit left torch fountain back room" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "lit right torch fountain back room" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "seeing Twilight Bloat with sense cs" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "Twilight Bloat comes out of water cs" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "seeing Twilit Bloat move from far away cs" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "Save Prompt after Lakebed (if disabled, triggers MDH after Lakebed)" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "twilight end cs trigger (also map marker Lakebed Temple)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "obtained vessel of light (unset after twilight)" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "spawn dark beasts Lake Hylia (unset once killed)" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "Lake Hylia Portal" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "Zora's river intro cs during twilight (flying with bird)" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "midna text promt saying you can call down Kargarok to fly" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "Rutella cs in domain twilight" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "Zora river boat path on map" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "entered Twilight Bloat arena (unset once killed)" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "explored entrance to snowpeak" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "got PoH flight by foul" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "Zora's Domain Portal" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "spawn barriers Zora's domain dark beasts fight" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "Zora's domain intro cs twilight (frozen)" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "blown up south underwater rock zora's domain " }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "blown up north underwater rock zora's domain" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "blown up underwater rock in back of fountain" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "Midna text after landing in Lake hylia twilight" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "Iza text after Upper Zora's River Portal" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "can now exit from the sides of zora's domain inside (set during domain outside cs after melting it)" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "Midna text after domain outside cs after melting it" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "domain outside cs after melting it" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "map marker Auru" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "Upper zora's river intro cs during twilight" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "Midna text after leaving lake hylia after Lanayru twilight" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "Zora's domain waterfall is going fast (during twilight only) (unset when you come back to Lake hylia)" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "blown up rock blocking lakebed entrance cs" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "opened stream next to lakebed entance" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "Midna text after arriving at upper zora's river twilight" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "melted zora's domain (Lake Hylia water on map (top part))" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "twilight end cs watched" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "map marker Snowpeak" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "Midna text after coming back to lake after filling it (twilight)" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "blown up rock blocking lakebed entrance" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "went down the fast water in zora's domain (void out) (unset after twilight)" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "Lake hylia filled twilight intro cs (domain water level normal)" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "blown up first rock to throne room zora's domain" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "Midna text prompt to tell you to look under the ice in zora's domain twilight" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "Midna text before midna jumps fozen zora's domain twilight" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "Midna text before midna jumps melted zora's domain twilight" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "Midna text after melting domain (water everywhere on map)" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "blown up underwater rock zora river town path" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "spawn west big chest zora's domain throne room" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "spawn east big chest zora's domain throne room" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "lit east torch zora's domain throne room" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "extingushed north torch zora's domain throne room" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "lit west torch zora's domain throne room" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "blown up west underwater rock Lakebed area" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "blown up south underwater rock Lakebed area" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "saw the two zora spirits from far away in upper zora river cs (twilight)" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "saw light bug moving after exiting lanayru spring" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "went down zora's river with bird during twilight" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "blown up underwater rock zora river lake path" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "midna text after seeing the frozen zoras in domain twilight" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "paid Fyer to launch you to the flight by foul platform (unset once you enter the canon)" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "blown up north underwater rock throne room zora's domain" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "Lanayru spring map marker" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "Midna Text after frozen zora's domain twilight intro cs" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "killed poe underneath flight by foul" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "killed poe next to watch tower to desert" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "killed poe east of lake Hylia" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "killed poe next to mother and chile iles Zora's Domain" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "killed poe midna jumps Zora's Domain" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "killed poe in Upper Zora's River" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "killed poe on flight by foul prizes" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "killed poe next to fountain Lake Hylia" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "blew up rock in Iza's house" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "Iza text after blowing the rocks inside her house" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "blew up rock in Iza's house cs" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "killed light bug throne room zora's domain" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "killed first light bug flying" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "killed light bug midna jumps zora's domain" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "killed light bug on top of water zora's domain" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "killed third light bug flying" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "killed fourth light bug flying" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "killed light bug behind of Fyer's canon" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "killed light bug next to Iza's shop" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "killed second light bug flying" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "killed final light bug (Twilight Bloat)" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "killed light bug island east of Lake Hylia" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "killed light bug next to mother and child iles zora's domain" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "?" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "Watched CS of Ooccoo running to Sky Cannon" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "killed light bug on top of water zora's domain" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "killed light bug southmost island Lake Hylia" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "killed light bug next to fountain Lake Hylia" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "talked to light spirit during twilight" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "went up zora's river after melting domain in twilight" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "blown up rock zora river on land" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "went up zora's river after melting domain in twilight (also set when failing to do so)" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "blown up second rock to throne room zora's domain" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "?" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "Midna text after Zora's domain portal" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "blown up underwater rock zora river middle" }, + { 0x18, 0x08, AreaFlagInd{0x1808}, "picked up rupees from south underwater rock Lakebed area" }, + { 0x18, 0x04, AreaFlagInd{0x1804}, "picked up rupees from west underwater rock Lakebed area" }, + { 0x18, 0x02, AreaFlagInd{0x1802}, "picked up green rupees domain midna jumps twilight" }, + { 0x18, 0x01, AreaFlagInd{0x1801}, "picked up fourth green rupee domain midna jumps twilight" }, + { 0x19, 0x80, AreaFlagInd{0x1980}, "picked up third blue rupee midna jumps zora's domain" }, + { 0x19, 0x40, AreaFlagInd{0x1940}, "picked up second blue rupee midna jumps zora's domain" }, + { 0x19, 0x20, AreaFlagInd{0x1920}, "picked up first blue rupee midna jumps zora's domain" }, + { 0x19, 0x10, AreaFlagInd{0x1910}, "picked up rupees from rock zora river on land" }, + { 0x19, 0x08, AreaFlagInd{0x1908}, "picked up rupees from underwater rock zora river lake path" }, + { 0x19, 0x04, AreaFlagInd{0x1904}, "picked up rupees from underwater rock zora river town path" }, + { 0x19, 0x02, AreaFlagInd{0x1902}, "picked up rupees from underwater rock zora river middle" }, + { 0x19, 0x01, AreaFlagInd{0x1901}, "picked up rupees from underwater rock back fountain" }, + { 0x1A, 0x80, AreaFlagInd{0x1A80}, "picked up rupees from underwater rock center fountain" }, + { 0x1A, 0x40, AreaFlagInd{0x1A40}, "picked up rupees from south underwater rock zora's domain " }, + { 0x1A, 0x20, AreaFlagInd{0x1A20}, "picked up rupees from north underwater rock zora's domain" }, + { 0x1A, 0x10, AreaFlagInd{0x1A10}, "picked up rupees from first rock to throne room zora's domain" }, + { 0x1A, 0x08, AreaFlagInd{0x1A08}, "picked up rupees from second rock to throne room zora's domain" }, + { 0x1A, 0x04, AreaFlagInd{0x1A04}, "picked up east blue rupees behind underwater bridge throne room zora's domain" }, + { 0x1A, 0x02, AreaFlagInd{0x1A02}, "picked up west blue rupees behind underwater bridge throne room zora's domain" }, + { 0x1A, 0x01, AreaFlagInd{0x1A01}, "picked up south yellow rupee unerwater throne room zora's domain" }, + { 0x1B, 0x80, AreaFlagInd{0x1B80}, "picked up north yellow rupee unerwater throne room zora's domain" }, + { 0x1B, 0x40, AreaFlagInd{0x1B40}, "picked up east yellow rupee unerwater throne room zora's domain" }, + { 0x1B, 0x20, AreaFlagInd{0x1B20}, "picked up yellow rupee above north underwater rock throne room zora's domain" }, + { 0x1B, 0x10, AreaFlagInd{0x1B10}, "picked up first yellow rupee midna jumps zora's domain" }, + { 0x1B, 0x08, AreaFlagInd{0x1B08}, "picked up second yellow rupee midna jumps zora's domain" }, + { 0x1B, 0x02, AreaFlagInd{0x1B02}, "picked up yellow rupee from broken pillar lakebed area" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "picked up yellow rupee from broken pillar lakebed area" }, }; inline EventAreaFlags eventAreaFlagsLBT[] = { - { 0x00, 0x40, 0x0040, "small chest first west room 1F" }, - { 0x00, 0x20, 0x0020, "south small chest first room" }, - { 0x00, 0x10, 0x0010, "west small chest first room" }, - { 0x00, 0x08, 0x0008, "small chest second east room 4F" }, - { 0x00, 0x02, 0x0002, "underwater big chest in first west room 2F" }, - { 0x00, 0x01, 0x0001, "small chest first east room 2F" }, - { 0x01, 0x40, 0x0140, "Ooccoo Map Flag" }, - { 0x01, 0x20, 0x0120, "small chest second west room 4F" }, - { 0x01, 0x10, 0x0110, "compass big chest second west room 4F" }, - { 0x01, 0x08, 0x0108, "center small chest first west room 2F" }, - { 0x01, 0x04, 0x0104, "small chest in room before big key" }, - { 0x01, 0x02, 0x0102, "map big chest main room 1F" }, - { 0x01, 0x01, 0x0101, "big chest under boss door main room B1" }, - { 0x02, 0x80, 0x0280, "south underwater big chest in room before mini-boss" }, - { 0x02, 0x40, 0x0240, "north underwater big chest in room before mini-boss" }, - { 0x02, 0x20, 0x0220, "north west big chest first west room 2F" }, - { 0x02, 0x10, 0x0210, "big key chest" }, - { 0x02, 0x08, 0x0208, "big chest second east room 4F" }, - { 0x02, 0x04, 0x0204, "small key big chest first east room 2F" }, - { 0x02, 0x01, 0x0201, "PoH big chest behind gate in first east room 1F" }, - { 0x03, 0x80, 0x0380, "south small chest in first west room 2F" }, - { 0x03, 0x40, 0x0340, "small key big chest first east room 1F" }, - { 0x03, 0x20, 0x0320, "PoH big chest main room 2F" }, - { 0x03, 0x08, 0x0308, "small chest second room" }, - { 0x03, 0x04, 0x0304, "small key big chest room before mini-boss" }, - { 0x03, 0x02, 0x0302, "small chest main room 1F" }, - { 0x03, 0x01, 0x0301, "clawshot big chest mini-boss room" }, - { 0x08, 0x80, 0x0880, "raised water in first east room 1F" }, - { 0x08, 0x40, 0x0840, "water flowing into first east room 1F cs" }, - { 0x08, 0x20, 0x0820, "?" }, - { 0x08, 0x02, 0x0802, "Midna Stalactite text second room" }, - { 0x09, 0x80, 0x0980, "water flowing into first east room 1F" }, - { 0x09, 0x20, 0x0920, "west water flowing into stairs in main room" }, - { 0x09, 0x10, 0x0910, "east water flowing into stairs in main room" }, - { 0x09, 0x08, 0x0908, "water flowing into east wing 1F" }, - { 0x09, 0x04, 0x0904, "water flowing into west wing 1F" }, - { 0x09, 0x02, 0x0902, "water in main room raised twice" }, - { 0x09, 0x01, 0x0901, "water in main room raised once" }, - { 0x0A, 0x80, 0x0A80, "west water not flowing into stairs in main room" }, - { 0x0A, 0x40, 0x0A40, "east water not flowing into stairs in main room" }, - { 0x0A, 0x20, 0x0A20, "west water is flowing into main room" }, - { 0x0A, 0x10, 0x0A10, "staircase top is west main room" }, - { 0x0A, 0x08, 0x0A08, "staircase top is east main room" }, - { 0x0A, 0x04, 0x0A04, "east water is flowing into main room" }, - { 0x0A, 0x02, 0x0A02, "let water flow out of room west wing 2F" }, - { 0x0A, 0x01, 0x0A01, "let water flow out of room east wing 2F" }, - { 0x0B, 0x10, 0x0B10, "spawn clawshot big chest" }, - { 0x0B, 0x08, 0x0B08, "set staircase top is east main room" }, - { 0x0B, 0x04, 0x0B04, "set staircase top is north main room" }, - { 0x0B, 0x02, 0x0B02, "set staircase top is west main room" }, - { 0x0B, 0x01, 0x0B01, "set staircase top is south main room (default)" }, - { 0x0D, 0x40, 0x0D40, "PoH big chest behind gate in first east room 1F (set after)" }, - { 0x0D, 0x20, 0x0D20, "horizontal wheel is turning in first east room" }, - { 0x0D, 0x10, 0x0D10, "unlock east door main room 2F" }, - { 0x0D, 0x08, 0x0D08, "vertical wheel is turning in first east room 2F" }, - { 0x0D, 0x04, 0x0D04, "small key big chest first east room 1F (set after)" }, - { 0x0D, 0x02, 0x0D02, "east wing water switch 4F" }, - { 0x0D, 0x01, 0x0D01, "west wing water switch 4F" }, - { 0x0E, 0x04, 0x0E04, "opened north gate first east room 2F" }, - { 0x0E, 0x01, 0x0E01, "opened gate in first room" }, - { 0x0F, 0x80, 0x0F80, "blown up second rock in room before big key" }, - { 0x0F, 0x40, 0x0F40, "blown up first rock in room before big key" }, - { 0x0F, 0x10, 0x0F10, "unlocked door in second east room 2F" }, - { 0x0F, 0x08, 0x0F08, "unlocked door in room before mini-boss" }, - { 0x0F, 0x02, 0x0F02, "horizontal wheel is turning in first east room cs" }, - { 0x0F, 0x01, 0x0F01, "horizontal wheels turning in first west room" }, - { 0x10, 0x80, 0x1080, "killed lizalfos in south hallway to main room 2F" }, - { 0x10, 0x40, 0x1040, "killed lizalfos behind gate in first east room 1F " }, - { 0x10, 0x04, 0x1004, "blown up rock in room before mini-boss" }, - { 0x11, 0x80, 0x1180, "Ooccoo Freed" }, - { 0x11, 0x20, 0x1120, "unlocked boss door" }, - { 0x11, 0x10, 0x1110, "a stalactite fell in second room (other than the first one)" }, - { 0x11, 0x04, 0x1104, "stalactite fell in first west room 2F" }, - { 0x11, 0x02, 0x1102, "stalactite falls by itself in second room" }, - { 0x11, 0x01, 0x1101, "left stalactite fell in first east room 2F" }, - { 0x12, 0x80, 0x1280, "right stalactite fell in first east room 2F" }, - { 0x12, 0x40, 0x1240, "blown up rock in first east room 2F" }, - { 0x12, 0x20, 0x1220, "south stalactite fell in first east room 1F" }, - { 0x12, 0x10, 0x1210, "north stalactite fell in first east room 1F" }, - { 0x12, 0x08, 0x1208, "south-east stalactite fell second room" }, - { 0x12, 0x04, 0x1204, "north east stalactite fell in second room" }, - { 0x12, 0x02, 0x1202, "south Stalactite fell second room" }, - { 0x12, 0x01, 0x1201, "north west stalactite fell in second room" }, - { 0x13, 0x80, 0x1380, "south west stalactile fell in second room" }, - { 0x13, 0x20, 0x1320, "killed first shell blade in room before big key" }, - { 0x13, 0x10, 0x1310, "killed second shell blade in room before big key" }, - { 0x13, 0x04, 0x1304, "opened north gate in first west room 2F" }, - { 0x13, 0x02, 0x1302, "opened south gate in first west room 2F" }, - { 0x13, 0x01, 0x1301, "opened gates in mini-boss room" }, - { 0x14, 0x10, 0x1410, "explore main room" }, - { 0x14, 0x04, 0x1404, "main room intro cs" }, - { 0x14, 0x02, 0x1402, "south Hallway to Main room intro cs" }, - { 0x14, 0x01, 0x1401, "first room intro cs" }, - { 0x15, 0x20, 0x1520, "move staircase main room cs" }, - { 0x15, 0x08, 0x1508, "west water flowing into staircase main room cs" }, - { 0x15, 0x04, 0x1504, "east water flowing into staircase main room cs" }, - { 0x15, 0x02, 0x1502, "water in main room raised rwice cs" }, - { 0x15, 0x01, 0x1501, "west water is flowing into main room cs" }, - { 0x16, 0x80, 0x1680, "water in main room raised once cs" }, - { 0x16, 0x40, 0x1640, "east water is flowing into main room cs" }, - { 0x16, 0x20, 0x1620, "big key chest (set after)" }, - { 0x16, 0x10, 0x1610, "compass big chest second west room 4F (set after)" }, - { 0x16, 0x08, 0x1608, "bubble worm cs second east room 2F" }, - { 0x16, 0x01, 0x1601, "enter/exit mini-boss room from 1F door (spawns enemies in room before)" }, - { 0x17, 0x04, 0x1704, "killed right lizalfos in first west room 2F" }, - { 0x17, 0x02, 0x1702, "killed left lizalfos in first west room 2F" }, - { 0x17, 0x01, 0x1701, "killed lizalfos in first east room 2F" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "small chest first west room 1F" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "south small chest first room" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "west small chest first room" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "small chest second east room 4F" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "underwater big chest in first west room 2F" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "small chest first east room 2F" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "Ooccoo Map Flag" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "small chest second west room 4F" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "compass big chest second west room 4F" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "center small chest first west room 2F" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "small chest in room before big key" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "map big chest main room 1F" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "big chest under boss door main room B1" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "south underwater big chest in room before mini-boss" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "north underwater big chest in room before mini-boss" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "north west big chest first west room 2F" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "big key chest" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "big chest second east room 4F" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "small key big chest first east room 2F" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "PoH big chest behind gate in first east room 1F" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "south small chest in first west room 2F" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "small key big chest first east room 1F" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "PoH big chest main room 2F" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "small chest second room" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "small key big chest room before mini-boss" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "small chest main room 1F" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "clawshot big chest mini-boss room" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "raised water in first east room 1F" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "water flowing into first east room 1F cs" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "?" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "Midna Stalactite text second room" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "water flowing into first east room 1F" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "west water flowing into stairs in main room" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "east water flowing into stairs in main room" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "water flowing into east wing 1F" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "water flowing into west wing 1F" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "water in main room raised twice" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "water in main room raised once" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "west water not flowing into stairs in main room" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "east water not flowing into stairs in main room" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "west water is flowing into main room" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "staircase top is west main room" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "staircase top is east main room" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "east water is flowing into main room" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "let water flow out of room west wing 2F" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "let water flow out of room east wing 2F" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "spawn clawshot big chest" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "set staircase top is east main room" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "set staircase top is north main room" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "set staircase top is west main room" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "set staircase top is south main room (default)" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "PoH big chest behind gate in first east room 1F (set after)" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "horizontal wheel is turning in first east room" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "unlock east door main room 2F" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "vertical wheel is turning in first east room 2F" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "small key big chest first east room 1F (set after)" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "east wing water switch 4F" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "west wing water switch 4F" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "opened north gate first east room 2F" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "opened gate in first room" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "blown up second rock in room before big key" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "blown up first rock in room before big key" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "unlocked door in second east room 2F" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "unlocked door in room before mini-boss" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "horizontal wheel is turning in first east room cs" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "horizontal wheels turning in first west room" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "killed lizalfos in south hallway to main room 2F" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "killed lizalfos behind gate in first east room 1F " }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "blown up rock in room before mini-boss" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "Ooccoo Freed" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "unlocked boss door" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "a stalactite fell in second room (other than the first one)" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "stalactite fell in first west room 2F" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "stalactite falls by itself in second room" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "left stalactite fell in first east room 2F" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "right stalactite fell in first east room 2F" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "blown up rock in first east room 2F" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "south stalactite fell in first east room 1F" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "north stalactite fell in first east room 1F" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "south-east stalactite fell second room" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "north east stalactite fell in second room" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "south Stalactite fell second room" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "north west stalactite fell in second room" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "south west stalactile fell in second room" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "killed first shell blade in room before big key" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "killed second shell blade in room before big key" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "opened north gate in first west room 2F" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "opened south gate in first west room 2F" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "opened gates in mini-boss room" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "explore main room" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "main room intro cs" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "south Hallway to Main room intro cs" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "first room intro cs" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "move staircase main room cs" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "west water flowing into staircase main room cs" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "east water flowing into staircase main room cs" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "water in main room raised rwice cs" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "west water is flowing into main room cs" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "water in main room raised once cs" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "east water is flowing into main room cs" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "big key chest (set after)" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "compass big chest second west room 4F (set after)" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "bubble worm cs second east room 2F" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "enter/exit mini-boss room from 1F door (spawns enemies in room before)" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "killed right lizalfos in first west room 2F" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "killed left lizalfos in first west room 2F" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "killed lizalfos in first east room 2F" }, }; inline EventAreaFlags eventAreaFlagsLHLC[] = { - { 0x02, 0x40, 0x0240, "big chest room 5 lake hylia long cave" }, - { 0x02, 0x20, 0x0220, "east big chest room 10 Lake Hylia Long Cave" }, - { 0x02, 0x10, 0x0210, "north small chest room 9 Lake Hylia Long Cave" }, - { 0x02, 0x08, 0x0208, "east small chest room 8 Lake Hylia Long Cave" }, - { 0x02, 0x04, 0x0204, "north small chest room 6 Lake hylia Long Cave" }, - { 0x02, 0x02, 0x0202, "south small chest room 7 Lake Hylia Long Cave" }, - { 0x02, 0x01, 0x0201, "north small chest room 5 Lake hylia Long Cave" }, - { 0x03, 0x80, 0x0380, "north small chest room 4 Lake Hylia Long Cave" }, - { 0x03, 0x40, 0x0340, "west small chest room 2 Lake hylia Long Cave" }, - { 0x03, 0x20, 0x0320, "west big chest room 7 Lake Hylia Long Cave" }, - { 0x03, 0x10, 0x0310, "north big chest room 8 Lake Hylia Long Cave" }, - { 0x03, 0x08, 0x0308, "big chest room 11 lake hylia long cave" }, - { 0x03, 0x04, 0x0304, "north small chest room 1 Lake hylia Long Cave" }, - { 0x03, 0x02, 0x0302, "west small chest room 1 Lake hylia Long Cave" }, - { 0x03, 0x01, 0x0301, "east small chest room 3 Lake Hylia Long Cave" }, - { 0x04, 0x80, 0x0480, "small chest Goron Stock Cave" }, - { 0x04, 0x40, 0x0440, "big chest in front of exit Goron Stock Cave" }, - { 0x04, 0x20, 0x0420, "big chest spawned form torches Goron Stock Cave" }, - { 0x08, 0x80, 0x0880, "explored section 18 Lake hylia Long Cave" }, - { 0x08, 0x40, 0x0840, "explored section 15 Lake hylia Long Cave" }, - { 0x08, 0x20, 0x0820, "explored section 12 Lake hylia Long Cave" }, - { 0x08, 0x10, 0x0810, "explored section 11 Lake hylia Long Cave" }, - { 0x08, 0x08, 0x0808, "explored section 9 Lake hylia Long Cave" }, - { 0x08, 0x04, 0x0804, "explored section 6 Lake hylia Long Cave" }, - { 0x08, 0x02, 0x0802, "explored section 4 Lake hylia Long Cave" }, - { 0x08, 0x01, 0x0801, "explored section 27 (room 11) Lake hylia Long Cave" }, - { 0x09, 0x80, 0x0980, "explored section 24 (room 10) Lake hylia Long Cave" }, - { 0x09, 0x40, 0x0940, "explored section 23 (room 9) Lake hylia Long Cave" }, - { 0x09, 0x20, 0x0920, "explored section 22 Lake hylia Long Cave" }, - { 0x09, 0x10, 0x0910, "explored east area room 8 Lake hylia Long Cave" }, - { 0x09, 0x08, 0x0908, "explored north area room 8 Lake hylia Long Cave" }, - { 0x09, 0x04, 0x0904, "explored section 21 (room 8) Lake hylia Long Cave" }, - { 0x09, 0x02, 0x0902, "explored section 17 Lake hylia Long Cave" }, - { 0x09, 0x01, 0x0901, "explored south area room 7 Lake hylia Long Cave" }, - { 0x0A, 0x80, 0x0A80, "explored west area room 7 Lake hylia Long Cave" }, - { 0x0A, 0x40, 0x0A40, "explored section 16 (room 7) Lake hylia Long Cave" }, - { 0x0A, 0x20, 0x0A20, "explored section 14 Lake hylia Long Cave" }, - { 0x0A, 0x10, 0x0A10, "explored north area room 6 Lake hylia Long Cave" }, - { 0x0A, 0x08, 0x0A08, "explored section 13 (room 6) Lake hylia Long Cave" }, - { 0x0A, 0x04, 0x0A04, "explored section 10 (room 5) Lake hylia Long Cave" }, - { 0x0A, 0x02, 0x0A02, "explored section 8 Lake hylia Long Cave" }, - { 0x0A, 0x01, 0x0A01, "explored north area room 4 Lake hylia Long Cave" }, - { 0x0B, 0x80, 0x0B80, "explored section 7 (room 4) Lake hylia Long Cave" }, - { 0x0B, 0x40, 0x0B40, "explored section 5 (room 3) Lake hylia Long Cave" }, - { 0x0B, 0x20, 0x0B20, "explored section 3 (room 2) Lake hylia Long Cave" }, - { 0x0B, 0x10, 0x0B10, "explored section 2 Lake hylia Long Cave" }, - { 0x0B, 0x08, 0x0B08, "explored north area room 1 Lake hylia Long Cave" }, - { 0x0B, 0x04, 0x0B04, "explored west area room 1 Lake hylia Long Cave" }, - { 0x0B, 0x02, 0x0B02, "explored section 1 (room 1) Lake hylia Long Cave" }, - { 0x0C, 0x80, 0x0C80, "blown up north rock room 7 Lake hylia long cave" }, - { 0x0C, 0x10, 0x0C10, "blown up north rock room 3 Lake hylia long cave" }, - { 0x0C, 0x04, 0x0C04, "blown up north rock room 4 Lake hylia long cave" }, - { 0x0C, 0x01, 0x0C01, "blown up south rock room 8 Lake hylia long cave" }, - { 0x0D, 0x40, 0x0D40, "blown up east rock room 6 Lake Hylia Long Cave" }, - { 0x0D, 0x20, 0x0D20, "blown up west rock room 6 Lake Hylia Long Cave" }, - { 0x0D, 0x04, 0x0D04, "blown up north rock room 5 Lake Hylia Long Cave" }, - { 0x0D, 0x02, 0x0D02, "blown up north rock room 9 Lake Hylia Long Cave" }, - { 0x0D, 0x01, 0x0D01, "blown up east rock room 3 Lake hylia long cave" }, - { 0x0E, 0x80, 0x0E80, "lit right torch room 5 lake hylia long cave" }, - { 0x0E, 0x40, 0x0E40, "lit left torch room 5 lake hylia long cave" }, - { 0x0E, 0x20, 0x0E20, "spawn big chest room 11 lake hylia long cave" }, - { 0x0E, 0x10, 0x0E10, "lit right torch room 11 Lake Hylia Long Cave" }, - { 0x0E, 0x08, 0x0E08, "lit left torch room 11 Lake Hylia Long Cave" }, - { 0x0E, 0x04, 0x0E04, "explored south area room 11 Lake hylia Long Cave" }, - { 0x0E, 0x02, 0x0E02, "explored east area room 10 Lake hylia Long Cave" }, - { 0x0E, 0x01, 0x0E01, "explored north area room 9 Lake hylia Long Cave" }, - { 0x0F, 0x80, 0x0F80, "explored east area room 6 Lake hylia Long Cave" }, - { 0x0F, 0x40, 0x0F40, "explored north area room 5 Lake hylia Long Cave" }, - { 0x0F, 0x20, 0x0F20, "explored east area room 3 Lake hylia Long Cave" }, - { 0x0F, 0x10, 0x0F10, "explored west area room 2 Lake hylia Long Cave" }, - { 0x0F, 0x08, 0x0F08, "explored section 25 Lake hylia Long Cave" }, - { 0x0F, 0x04, 0x0F04, "explored section 26 Lake hylia Long Cave" }, - { 0x0F, 0x02, 0x0F02, "explored section 20 Lake hylia Long Cave" }, - { 0x0F, 0x01, 0x0F01, "explored section 19 Lake hylia Long Cave" }, - { 0x10, 0x80, 0x1080, "killed poe in room 11 Lake Hylia Long Cave" }, - { 0x10, 0x40, 0x1040, "killed poe in room 3 Lake Hylia Long Cave" }, - { 0x10, 0x20, 0x1020, "killed poe in room 8 Lake Hylia Long Cave" }, - { 0x10, 0x04, 0x1004, "lit torch 9 (room 7) Lake hylia Long Cave" }, - { 0x10, 0x01, 0x1001, "lit torch 5 (room 4) Lake hylia Long Cave" }, - { 0x11, 0x40, 0x1140, "lit torch 3 (room 2) Lake hylia Long Cave" }, - { 0x11, 0x20, 0x1120, "lit torch 2 (room 1) Lake hylia Long Cave" }, - { 0x11, 0x08, 0x1108, "lit torch 12 (room 10) Lake hylia Long Cave" }, - { 0x11, 0x04, 0x1104, "lit torch 10 (room 8) Lake hylia Long Cave" }, - { 0x11, 0x02, 0x1102, "spawn big chest room 5 lake hylia long cave" }, - { 0x11, 0x01, 0x1101, "lit torch 4 (room 3) Lake hylia Long Cave" }, - { 0x12, 0x80, 0x1280, "blown up east rock room 9 Lake hylia long cave" }, - { 0x12, 0x40, 0x1240, "blown up west rock room 2 Lake hylia Long Cave" }, - { 0x12, 0x20, 0x1220, "blown up east rock room 2 Lake hylia Long Cave" }, - { 0x12, 0x10, 0x1210, "blown up north rock room 6 Lake hylia Long Cave" }, - { 0x12, 0x08, 0x1208, "blown up west rock room 5 Lake hylia Long Cave" }, - { 0x12, 0x04, 0x1204, "blown up east rock room 8 Lake Hylia Long Cave" }, - { 0x12, 0x02, 0x1202, "blown up east rock room 10 Lake Hylia Long Cave" }, - { 0x12, 0x01, 0x1201, "blown up north rock room 8 Lake hylia Long Cave" }, - { 0x13, 0x80, 0x1380, "blown up west rock room 7 Lake hylia Long Cave" }, - { 0x13, 0x40, 0x1340, "blown up south rock room 7 Lake hylia Long Cave" }, - { 0x13, 0x20, 0x1320, "blown up south rock room 10 Lake hylia Long Cave" }, - { 0x13, 0x10, 0x1310, "blown up west rock room 4 Lake hylia Long Cave" }, - { 0x13, 0x08, 0x1308, "blown up west rock room 1 Lake hylia Long Cave" }, - { 0x13, 0x04, 0x1304, "blown up north rock room 1 Lake hylia Long Cave" }, - { 0x13, 0x02, 0x1302, "blown up east rock room 1 Lake hylia Long Cave" }, - { 0x14, 0x80, 0x1480, "spawn big chest bottom floor Goron Stock Cave" }, - { 0x14, 0x40, 0x1440, "lit right torch bottom floor Goron Stock Cave" }, - { 0x14, 0x20, 0x1420, "lit left torch bottom floor Goron Stock Cave" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "big chest room 5 lake hylia long cave" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "east big chest room 10 Lake Hylia Long Cave" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "north small chest room 9 Lake Hylia Long Cave" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "east small chest room 8 Lake Hylia Long Cave" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "north small chest room 6 Lake hylia Long Cave" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "south small chest room 7 Lake Hylia Long Cave" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "north small chest room 5 Lake hylia Long Cave" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "north small chest room 4 Lake Hylia Long Cave" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "west small chest room 2 Lake hylia Long Cave" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "west big chest room 7 Lake Hylia Long Cave" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "north big chest room 8 Lake Hylia Long Cave" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "big chest room 11 lake hylia long cave" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "north small chest room 1 Lake hylia Long Cave" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "west small chest room 1 Lake hylia Long Cave" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "east small chest room 3 Lake Hylia Long Cave" }, + { 0x04, 0x80, AreaFlagInd{0x0480}, "small chest Goron Stock Cave" }, + { 0x04, 0x40, AreaFlagInd{0x0440}, "big chest in front of exit Goron Stock Cave" }, + { 0x04, 0x20, AreaFlagInd{0x0420}, "big chest spawned form torches Goron Stock Cave" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "explored section 18 Lake hylia Long Cave" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "explored section 15 Lake hylia Long Cave" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "explored section 12 Lake hylia Long Cave" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "explored section 11 Lake hylia Long Cave" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "explored section 9 Lake hylia Long Cave" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "explored section 6 Lake hylia Long Cave" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "explored section 4 Lake hylia Long Cave" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "explored section 27 (room 11) Lake hylia Long Cave" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "explored section 24 (room 10) Lake hylia Long Cave" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "explored section 23 (room 9) Lake hylia Long Cave" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "explored section 22 Lake hylia Long Cave" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "explored east area room 8 Lake hylia Long Cave" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "explored north area room 8 Lake hylia Long Cave" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "explored section 21 (room 8) Lake hylia Long Cave" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "explored section 17 Lake hylia Long Cave" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "explored south area room 7 Lake hylia Long Cave" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "explored west area room 7 Lake hylia Long Cave" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "explored section 16 (room 7) Lake hylia Long Cave" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "explored section 14 Lake hylia Long Cave" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "explored north area room 6 Lake hylia Long Cave" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "explored section 13 (room 6) Lake hylia Long Cave" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "explored section 10 (room 5) Lake hylia Long Cave" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "explored section 8 Lake hylia Long Cave" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "explored north area room 4 Lake hylia Long Cave" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "explored section 7 (room 4) Lake hylia Long Cave" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "explored section 5 (room 3) Lake hylia Long Cave" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "explored section 3 (room 2) Lake hylia Long Cave" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "explored section 2 Lake hylia Long Cave" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "explored north area room 1 Lake hylia Long Cave" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "explored west area room 1 Lake hylia Long Cave" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "explored section 1 (room 1) Lake hylia Long Cave" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "blown up north rock room 7 Lake hylia long cave" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "blown up north rock room 3 Lake hylia long cave" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "blown up north rock room 4 Lake hylia long cave" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "blown up south rock room 8 Lake hylia long cave" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "blown up east rock room 6 Lake Hylia Long Cave" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "blown up west rock room 6 Lake Hylia Long Cave" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "blown up north rock room 5 Lake Hylia Long Cave" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "blown up north rock room 9 Lake Hylia Long Cave" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "blown up east rock room 3 Lake hylia long cave" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "lit right torch room 5 lake hylia long cave" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "lit left torch room 5 lake hylia long cave" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "spawn big chest room 11 lake hylia long cave" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "lit right torch room 11 Lake Hylia Long Cave" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "lit left torch room 11 Lake Hylia Long Cave" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "explored south area room 11 Lake hylia Long Cave" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "explored east area room 10 Lake hylia Long Cave" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "explored north area room 9 Lake hylia Long Cave" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "explored east area room 6 Lake hylia Long Cave" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "explored north area room 5 Lake hylia Long Cave" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "explored east area room 3 Lake hylia Long Cave" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "explored west area room 2 Lake hylia Long Cave" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "explored section 25 Lake hylia Long Cave" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "explored section 26 Lake hylia Long Cave" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "explored section 20 Lake hylia Long Cave" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "explored section 19 Lake hylia Long Cave" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "killed poe in room 11 Lake Hylia Long Cave" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "killed poe in room 3 Lake Hylia Long Cave" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "killed poe in room 8 Lake Hylia Long Cave" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "lit torch 9 (room 7) Lake hylia Long Cave" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "lit torch 5 (room 4) Lake hylia Long Cave" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "lit torch 3 (room 2) Lake hylia Long Cave" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "lit torch 2 (room 1) Lake hylia Long Cave" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "lit torch 12 (room 10) Lake hylia Long Cave" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "lit torch 10 (room 8) Lake hylia Long Cave" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "spawn big chest room 5 lake hylia long cave" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "lit torch 4 (room 3) Lake hylia Long Cave" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "blown up east rock room 9 Lake hylia long cave" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "blown up west rock room 2 Lake hylia Long Cave" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "blown up east rock room 2 Lake hylia Long Cave" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "blown up north rock room 6 Lake hylia Long Cave" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "blown up west rock room 5 Lake hylia Long Cave" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "blown up east rock room 8 Lake Hylia Long Cave" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "blown up east rock room 10 Lake Hylia Long Cave" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "blown up north rock room 8 Lake hylia Long Cave" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "blown up west rock room 7 Lake hylia Long Cave" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "blown up south rock room 7 Lake hylia Long Cave" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "blown up south rock room 10 Lake hylia Long Cave" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "blown up west rock room 4 Lake hylia Long Cave" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "blown up west rock room 1 Lake hylia Long Cave" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "blown up north rock room 1 Lake hylia Long Cave" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "blown up east rock room 1 Lake hylia Long Cave" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "spawn big chest bottom floor Goron Stock Cave" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "lit right torch bottom floor Goron Stock Cave" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "lit left torch bottom floor Goron Stock Cave" }, }; inline EventAreaFlags eventAreaFlagsOrdon[] = { - { 0x03, 0x10, 0x0310, "wooden sword big chest" }, - { 0x03, 0x04, 0x0304, "iron boots big chest" }, - { 0x03, 0x02, 0x0302, "Big chest link's basement" }, - { 0x08, 0x80, 0x0880, "despawn Bo and Jaggle after scaring them away (wolf night)" }, - { 0x08, 0x40, 0x0840, "scare away Bo and Jaggle after hearing them (wolf night)" }, - { 0x08, 0x20, 0x0820, "started sword training" }, - { 0x08, 0x10, 0x0810, "obtained wooden sword" }, - { 0x08, 0x08, 0x0808, "midna text after getting ordon shield (spawns sword)" }, - { 0x08, 0x04, 0x0804, "got ordon shield (will despawn it if set)" }, - { 0x08, 0x02, 0x0802, "midna text after getting ordon sword" }, - { 0x08, 0x01, 0x0801, "got ordon sword" }, - { 0x09, 0x80, 0x0980, "exit shield house as wolf cs" }, - { 0x09, 0x40, 0x0940, "Goats 2" }, - { 0x09, 0x20, 0x0920, "day 3 intro cs (spawn in ranch)" }, - { 0x09, 0x08, 0x0908, "knocked down bee's nest day 2 cs" }, - { 0x09, 0x04, 0x0904, "? (wolf in village night)" }, - { 0x09, 0x02, 0x0902, "Ranch first time CS" }, - { 0x0A, 0x80, 0x0A80, "Rusl moving during wolf night" }, - { 0x0A, 0x40, 0x0A40, "killed spider on top of Link's house" }, - { 0x0A, 0x20, 0x0A20, "spawn 2 spiders around Link,s house (day 2) (set after buying slingshot)" }, - { 0x0A, 0x10, 0x0A10, "Ilia spring CS watched" }, - { 0x0A, 0x08, 0x0A08, "Ilia spring CS started" }, - { 0x0A, 0x04, 0x0A04, "Ordon Village first time CS" }, - { 0x0A, 0x02, 0x0A02, "Ilia spring CS Trigger" }, - { 0x0A, 0x01, 0x0A01, "killed spider on ladder to link's house" }, - { 0x0B, 0x80, 0x0B80, "Epona being in spring" }, - { 0x0B, 0x20, 0x0B20, "finished slingshot training" }, - { 0x0B, 0x10, 0x0B10, "Entered spring Area first time" }, - { 0x0B, 0x08, 0x0B08, "Intro CS watched" }, - { 0x0B, 0x02, 0x0B02, "finished sword training" }, - { 0x0C, 0x80, 0x0C80, "killed bulblin ordon woods" }, - { 0x0C, 0x40, 0x0C40, "killed second bulblin Link's house" }, - { 0x0C, 0x20, 0x0C20, "killed first bulblin Link's house" }, - { 0x0C, 0x10, 0x0C10, "spawn wooden sword big chest" }, - { 0x0C, 0x08, 0x0C08, "Day 2 intro CS" }, - { 0x0C, 0x04, 0x0C04, "talked to owl as wolf for the first time" }, - { 0x0C, 0x02, 0x0C02, "Goats 1" }, - { 0x0C, 0x01, 0x0C01, "set after getting ordon shield" }, - { 0x0D, 0x80, 0x0D80, "approach faron twilight to enter it with midna cs" }, - { 0x0D, 0x20, 0x0D20, "spawn shadow beast" }, - { 0x0D, 0x10, 0x0D10, "Ordon Spring Portal" }, - { 0x0D, 0x08, 0x0D08, "hear Bo and Jaggle talk about shield from far away (wolf night)" }, - { 0x0D, 0x02, 0x0D02, "entered shield house as wolf cs" }, - { 0x0D, 0x01, 0x0D01, "ordon shield fell down cs" }, - { 0x0E, 0x80, 0x0E80, "midna text leaving spring" }, - { 0x0E, 0x20, 0x0E20, "started midna jump to ordon shield inside house" }, - { 0x0E, 0x08, 0x0E08, "Hanch started attacking (unlocks midna jump to top of shop)" }, - { 0x0E, 0x04, 0x0E04, "midna cs after hearing Bo and Jaggle talk about shield" }, - { 0x0E, 0x02, 0x0E02, "day 3 Fado intro text" }, - { 0x0F, 0x80, 0x0F80, "Allows Link to stop goat in Village" }, - { 0x0F, 0x20, 0x0F20, "started midna jumps to top of shop" }, - { 0x0F, 0x08, 0x0F08, "midna text before doing jumps to top of shop" }, - { 0x0F, 0x04, 0x0F04, "Rusl talking to his wife cs (wolf night)" }, - { 0x0F, 0x02, 0x0F02, "unlock midna jumps to shield house" }, - { 0x0F, 0x01, 0x0F01, "scared Hanch" }, - { 0x12, 0x02, 0x1202, "torch next to Hanch is lit (wolf night)" }, - { 0x12, 0x01, 0x1201, "? (wolf in village night)" }, - { 0x13, 0x80, 0x1380, "iron boots big chest (duplicate)" }, - { 0x13, 0x40, 0x1340, "spawn iron boots chest in Bo's house" }, - { 0x13, 0x20, 0x1320, "brigthen up area under Hanch after getting spoted" }, - { 0x13, 0x10, 0x1310, "set after midna text after getting ordon shield" }, - { 0x13, 0x08, 0x1308, "Hanch spoted you cs (wolf night)" }, - { 0x13, 0x04, 0x1304, "randomly set during wolf night (often during Hanch part)" }, - { 0x13, 0x02, 0x1302, "Hero's shade map marker" }, - { 0x13, 0x01, 0x1301, "Ordon day 1 (save promt)" }, - { 0x14, 0x80, 0x1480, "set after midna text after getting ordon sword" }, - { 0x14, 0x01, 0x1401, "Jump to eagle grass next to Jaggle day 2 (removes Jaggle text)" }, - { 0x15, 0x10, 0x1510, "did midna jumps to top of shop" }, - { 0x16, 0x01, 0x1601, "King Bulblin cs" }, - { 0x17, 0x80, 0x1780, "enter village as wolf intro cs" }, - { 0x17, 0x20, 0x1720, "explored area with link's house (wolf)" }, - { 0x19, 0x80, 0x1980, "picked up yellow rupee on top of Hanch's house" }, - { 0x19, 0x40, 0x1940, "picked up green rupee in grass in front of Bo's house" }, - { 0x19, 0x20, 0x1920, "picked up green rupees in pond next to Rusl's house (day 2)" }, - { 0x19, 0x10, 0x1910, "picked up purple rupee behind Jaggle's house" }, - { 0x19, 0x01, 0x1901, "picked up green rupee in the back of the grass to the right of Link's house" }, - { 0x1A, 0x80, 0x1A80, "picked up green rupee in grass right of gate to village " }, - { 0x1A, 0x40, 0x1A40, "picked up green rupee next to rock in the grass to the right of Link's house" }, - { 0x1A, 0x20, 0x1A20, "picked up green rupee in grass to the right of Link's house" }, - { 0x1A, 0x10, 0x1A10, "picked up first green rupee in crawl space" }, - { 0x1A, 0x08, 0x1A08, "picked up yellow rupee on top of Bo's house" }, - { 0x1A, 0x02, 0x1A02, "picked up blue rupee on top of Hanch's house" }, - { 0x1A, 0x01, 0x1A01, "Picked up Orange Rupee by Rusl's house" }, - { 0x1B, 0x80, 0x1B80, "picked up green rupees on top of Hanch's house (day 2)" }, - { 0x1B, 0x40, 0x1B40, "picked up green rupees on top of Bo's house (day 2)" }, - { 0x1B, 0x08, 0x1B08, "Picked up Ordon Sword" }, - { 0x1B, 0x04, 0x1B04, "picked up green rupee under bridge (day 2)" }, - { 0x1B, 0x02, 0x1B02, "picked up yellow rupees on top of Rusl's house" }, - { 0x1B, 0x01, 0x1B01, "picked up yellow rupee on cliff next to Bo's house" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "wooden sword big chest" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "iron boots big chest" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "Big chest link's basement" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "despawn Bo and Jaggle after scaring them away (wolf night)" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "scare away Bo and Jaggle after hearing them (wolf night)" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "started sword training" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "obtained wooden sword" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "midna text after getting ordon shield (spawns sword)" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "got ordon shield (will despawn it if set)" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "midna text after getting ordon sword" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "got ordon sword" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "exit shield house as wolf cs" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "Goats 2" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "day 3 intro cs (spawn in ranch)" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "knocked down bee's nest day 2 cs" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "? (wolf in village night)" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "Ranch first time CS" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "Rusl moving during wolf night" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "killed spider on top of Link's house" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "spawn 2 spiders around Link,s house (day 2) (set after buying slingshot)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "Ilia spring CS watched" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "Ilia spring CS started" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "Ordon Village first time CS" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "Ilia spring CS Trigger" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "killed spider on ladder to link's house" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "Epona being in spring" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "finished slingshot training" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "Entered spring Area first time" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "Intro CS watched" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "finished sword training" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "killed bulblin ordon woods" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "killed second bulblin Link's house" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "killed first bulblin Link's house" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "spawn wooden sword big chest" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "Day 2 intro CS" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "talked to owl as wolf for the first time" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "Goats 1" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "set after getting ordon shield" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "approach faron twilight to enter it with midna cs" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "spawn shadow beast" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "Ordon Spring Portal" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "hear Bo and Jaggle talk about shield from far away (wolf night)" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "entered shield house as wolf cs" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "ordon shield fell down cs" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "midna text leaving spring" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "started midna jump to ordon shield inside house" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "Hanch started attacking (unlocks midna jump to top of shop)" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "midna cs after hearing Bo and Jaggle talk about shield" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "day 3 Fado intro text" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "Allows Link to stop goat in Village" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "started midna jumps to top of shop" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "midna text before doing jumps to top of shop" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "Rusl talking to his wife cs (wolf night)" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "unlock midna jumps to shield house" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "scared Hanch" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "torch next to Hanch is lit (wolf night)" }, + { 0x12, 0x01, AreaFlagInd{0x1201}, "? (wolf in village night)" }, + { 0x13, 0x80, AreaFlagInd{0x1380}, "iron boots big chest (duplicate)" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "spawn iron boots chest in Bo's house" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "brigthen up area under Hanch after getting spoted" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "set after midna text after getting ordon shield" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "Hanch spoted you cs (wolf night)" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "randomly set during wolf night (often during Hanch part)" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "Hero's shade map marker" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "Ordon day 1 (save promt)" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "set after midna text after getting ordon sword" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "Jump to eagle grass next to Jaggle day 2 (removes Jaggle text)" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "did midna jumps to top of shop" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "King Bulblin cs" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "enter village as wolf intro cs" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "explored area with link's house (wolf)" }, + { 0x19, 0x80, AreaFlagInd{0x1980}, "picked up yellow rupee on top of Hanch's house" }, + { 0x19, 0x40, AreaFlagInd{0x1940}, "picked up green rupee in grass in front of Bo's house" }, + { 0x19, 0x20, AreaFlagInd{0x1920}, "picked up green rupees in pond next to Rusl's house (day 2)" }, + { 0x19, 0x10, AreaFlagInd{0x1910}, "picked up purple rupee behind Jaggle's house" }, + { 0x19, 0x01, AreaFlagInd{0x1901}, "picked up green rupee in the back of the grass to the right of Link's house" }, + { 0x1A, 0x80, AreaFlagInd{0x1A80}, "picked up green rupee in grass right of gate to village " }, + { 0x1A, 0x40, AreaFlagInd{0x1A40}, "picked up green rupee next to rock in the grass to the right of Link's house" }, + { 0x1A, 0x20, AreaFlagInd{0x1A20}, "picked up green rupee in grass to the right of Link's house" }, + { 0x1A, 0x10, AreaFlagInd{0x1A10}, "picked up first green rupee in crawl space" }, + { 0x1A, 0x08, AreaFlagInd{0x1A08}, "picked up yellow rupee on top of Bo's house" }, + { 0x1A, 0x02, AreaFlagInd{0x1A02}, "picked up blue rupee on top of Hanch's house" }, + { 0x1A, 0x01, AreaFlagInd{0x1A01}, "Picked up Orange Rupee by Rusl's house" }, + { 0x1B, 0x80, AreaFlagInd{0x1B80}, "picked up green rupees on top of Hanch's house (day 2)" }, + { 0x1B, 0x40, AreaFlagInd{0x1B40}, "picked up green rupees on top of Bo's house (day 2)" }, + { 0x1B, 0x08, AreaFlagInd{0x1B08}, "Picked up Ordon Sword" }, + { 0x1B, 0x04, AreaFlagInd{0x1B04}, "picked up green rupee under bridge (day 2)" }, + { 0x1B, 0x02, AreaFlagInd{0x1B02}, "picked up yellow rupees on top of Rusl's house" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "picked up yellow rupee on cliff next to Bo's house" }, }; inline EventAreaFlags eventAreaFlagsPoT[] = { - { 0x00, 0x40, 0x0040, "PoH hidden big chest west room 1" }, - { 0x00, 0x20, 0x0020, "north west small chest east room 2" }, - { 0x00, 0x10, 0x0010, "north east small chest east room 2" }, - { 0x00, 0x08, 0x0008, "west small chest east room 1" }, - { 0x00, 0x04, 0x0004, "small key big chest north room 3" }, - { 0x00, 0x02, 0x0002, "south higher big chest west room 2" }, - { 0x00, 0x01, 0x0001, "small key big chest north room 2" }, - { 0x01, 0x80, 0x0180, "big key chest" }, - { 0x01, 0x40, 0x0140, "small key big chest north room 1" }, - { 0x02, 0x08, 0x0208, "placed west sol" }, - { 0x02, 0x04, 0x0204, "placed east sol" }, - { 0x03, 0x80, 0x0380, "small key east big chest east room 2" }, - { 0x03, 0x40, 0x0340, "small key north east big chest east room 1" }, - { 0x03, 0x20, 0x0320, "small key north big chest west room 2" }, - { 0x03, 0x10, 0x0310, "small key big chest west room 1" }, - { 0x03, 0x08, 0x0308, "compass lower south big chest west room 2" }, - { 0x03, 0x01, 0x0301, "PoH east big chest east room 1" }, - { 0x07, 0x10, 0x0710, "north west small chest east room 1" }, - { 0x07, 0x02, 0x0702, "map west big chest east room 2" }, - { 0x08, 0x10, 0x0810, "spawn south fence in east room 3" }, - { 0x08, 0x08, 0x0808, "spawn north fence in east room 3" }, - { 0x08, 0x04, 0x0804, "spawn south fence in west room 3" }, - { 0x08, 0x02, 0x0802, "spawn north fence in west room 3" }, - { 0x09, 0x80, 0x0980, "spawn in main room from midna warp" }, - { 0x09, 0x40, 0x0940, "save prompt after boss" }, - { 0x09, 0x20, 0x0920, "killed east phantom Zant (unlocks door)" }, - { 0x09, 0x10, 0x0910, "killed west phantom Zant (unlocks door)" }, - { 0x09, 0x04, 0x0904, "Phantom Zant 1 CS" }, - { 0x09, 0x02, 0x0902, "?" }, - { 0x09, 0x01, 0x0901, "?" }, - { 0x0A, 0x40, 0x0A40, "killed all Zant heads in east room 2 (spawn big chest)" }, - { 0x0A, 0x20, 0x0A20, "killed Zant head in east room 1 (spawn chest)" }, - { 0x0A, 0x10, 0x0A10, "killed Zant head in west room 2 (spawn 2 big chests)" }, - { 0x0A, 0x08, 0x0A08, "killed Zant head in west room 1 (spawn chest)" }, - { 0x0A, 0x02, 0x0A02, "unlock boss door" }, - { 0x0A, 0x01, 0x0A01, "unlock door in north room 3" }, - { 0x0B, 0x80, 0x0B80, "unlock door in east room 2" }, - { 0x0B, 0x40, 0x0B40, "unlock door in west room 2" }, - { 0x0B, 0x02, 0x0B02, "intro cs" }, - { 0x0B, 0x01, 0x0B01, "?" }, - { 0x0C, 0x80, 0x0C80, "get light master sword cs" }, - { 0x0C, 0x40, 0x0C40, "? (main room)" }, - { 0x0C, 0x20, 0x0C20, "? (main room)" }, - { 0x0C, 0x10, 0x0C10, "Watched CS of platform to east wing being activated" }, - { 0x0C, 0x08, 0x0C08, "Platform to east wing is active" }, - { 0x0C, 0x04, 0x0C04, "Midna text when west sol is placed" }, - { 0x0C, 0x02, 0x0C02, "Midna text when west hand steals sol" }, - { 0x0D, 0x80, 0x0D80, "killed south west Zant head in east room 2" }, - { 0x0D, 0x40, 0x0D40, "killed south east Zant head in east room 2" }, - { 0x0D, 0x20, 0x0D20, "killed center Zant head in east room 2" }, - { 0x0D, 0x10, 0x0D10, "killed first Zant head in east room 2" }, - { 0x0D, 0x08, 0x0D08, "unlock door in north room 2" }, - { 0x0D, 0x04, 0x0D04, "killed dark beasts in north room 3" }, - { 0x0D, 0x02, 0x0D02, "crossed black fog waterfall main room" }, - { 0x0D, 0x01, 0x0D01, "midna text black fog west room 1" }, - { 0x0E, 0x80, 0x0E80, "Midna text finding west sol" }, - { 0x0E, 0x40, 0x0E40, "midna text black fog waterfall main room" }, - { 0x0E, 0x20, 0x0E20, "midna text when seeing a civilian seen" }, - { 0x0E, 0x10, 0x0E10, "midna text after warping back to main room after boss" }, - { 0x0E, 0x02, 0x0E02, "killed second Zant head in north room 3 (spawn big chest)" }, - { 0x0E, 0x01, 0x0E01, "killed first Zant head in north room 3 (spawn head 2)" }, - { 0x0F, 0x80, 0x0F80, "midna text promt when seeing a civilian" }, - { 0x0F, 0x40, 0x0F40, "midna text after light master sword" }, - { 0x0F, 0x20, 0x0F20, "unlock door in north room 1" }, - { 0x0F, 0x10, 0x0F10, "unlock door in east room 1" }, - { 0x0F, 0x08, 0x0F08, "unlock door in west room 1" }, - { 0x10, 0x80, 0x1080, "killed south Zant head in north room 1 (wave 1)" }, - { 0x10, 0x40, 0x1040, "killed center Zant head in north room 1 (wave 1)" }, - { 0x10, 0x20, 0x1020, "killed north west Zant head in north room 1 (wave 1)" }, - { 0x10, 0x10, 0x1010, "killed north east Zant head in north room 1 (wave 1)" }, - { 0x10, 0x08, 0x1008, "?" }, - { 0x10, 0x04, 0x1004, "?" }, - { 0x10, 0x01, 0x1001, "? (main room)" }, - { 0x11, 0x80, 0x1180, "Heal Twili citizen outside west wing" }, - { 0x11, 0x40, 0x1140, "? (main room)" }, - { 0x11, 0x20, 0x1120, "Heal Twili near PoT entrance" }, - { 0x11, 0x10, 0x1110, "Heal Twili citizen outside east wing" }, - { 0x11, 0x08, 0x1108, "Heal Twili citizen next to west sol" }, - { 0x11, 0x04, 0x1104, "Heal Twili citizen next to east sol" }, - { 0x11, 0x02, 0x1102, "Heal Twili citizen north of Light Sword" }, - { 0x11, 0x01, 0x1101, "Heal Twili citizen near fog waterfall" }, - { 0x12, 0x08, 0x1208, "Opened Big Key Chest (causes fence to fall in room before Zant)" }, - { 0x12, 0x04, 0x1204, "Midna text after re-entering west wing after sol stolen" }, - { 0x12, 0x02, 0x1202, "remove fog in north room 4" }, - { 0x13, 0x40, 0x1340, "remove fog and spawn stairs in north room 1" }, - { 0x13, 0x20, 0x1320, "placed east sol in north room 1" }, - { 0x13, 0x10, 0x1310, "placed west sol in north room 1" }, - { 0x13, 0x02, 0x1302, "midna intro text" }, - { 0x15, 0x40, 0x1540, "killed all wave 4 Zant heads in north room 2 (spawn big chest)" }, - { 0x15, 0x20, 0x1520, "killed east Zant head north room 2 (wave 4)" }, - { 0x15, 0x10, 0x1510, "killed west Zant head north room 2 (wave 4)" }, - { 0x15, 0x08, 0x1508, "killed Zant head wave 3 in north room 2 (spawn wave 4)" }, - { 0x15, 0x04, 0x1504, "killed all wave 2 Zant heads in north room 2 (spawn wave 3)" }, - { 0x15, 0x02, 0x1502, "killed west Zant head north room 2 (wave 2)" }, - { 0x15, 0x01, 0x1501, "killed east Zant head north room 2 (wave 2)" }, - { 0x16, 0x80, 0x1680, "killed middle Zant head north room 2 (wave 2)" }, - { 0x16, 0x40, 0x1640, "killed first Zant head north room 2 (spawn wave 2)" }, - { 0x16, 0x10, 0x1610, "Watched east wing second room stairs CS" }, - { 0x16, 0x01, 0x1601, "?" }, - { 0x17, 0x80, 0x1780, "?" }, - { 0x17, 0x40, 0x1740, "killed dark beasts in east room 2" }, - { 0x17, 0x20, 0x1720, "spawn fog in east room 3" }, - { 0x17, 0x10, 0x1710, "spawn fog in west room 3" }, - { 0x17, 0x08, 0x1708, "killed all wave 2 Zant heads in north room 1 (spawn big chest)" }, - { 0x17, 0x04, 0x1704, "killed north west Zant head north room 1 (wave 2)" }, - { 0x17, 0x02, 0x1702, "killed north east Zant head north room 1 (wave 2)" }, - { 0x17, 0x01, 0x1701, "killed all wave 1 Zant heads in north room 1 (spawn wave 2)" }, - { 0x1B, 0x01, 0x1B01, "heart container" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "PoH hidden big chest west room 1" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "north west small chest east room 2" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "north east small chest east room 2" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "west small chest east room 1" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "small key big chest north room 3" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "south higher big chest west room 2" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "small key big chest north room 2" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "big key chest" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "small key big chest north room 1" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "placed west sol" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "placed east sol" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small key east big chest east room 2" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "small key north east big chest east room 1" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "small key north big chest west room 2" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "small key big chest west room 1" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "compass lower south big chest west room 2" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "PoH east big chest east room 1" }, + { 0x07, 0x10, AreaFlagInd{0x0710}, "north west small chest east room 1" }, + { 0x07, 0x02, AreaFlagInd{0x0702}, "map west big chest east room 2" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "spawn south fence in east room 3" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "spawn north fence in east room 3" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "spawn south fence in west room 3" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "spawn north fence in west room 3" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "spawn in main room from midna warp" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "save prompt after boss" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "killed east phantom Zant (unlocks door)" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "killed west phantom Zant (unlocks door)" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "Phantom Zant 1 CS" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "?" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "?" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "killed all Zant heads in east room 2 (spawn big chest)" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "killed Zant head in east room 1 (spawn chest)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "killed Zant head in west room 2 (spawn 2 big chests)" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "killed Zant head in west room 1 (spawn chest)" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "unlock boss door" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "unlock door in north room 3" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "unlock door in east room 2" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "unlock door in west room 2" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "intro cs" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "?" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "get light master sword cs" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "? (main room)" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "? (main room)" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "Watched CS of platform to east wing being activated" }, + { 0x0C, 0x08, AreaFlagInd{0x0C08}, "Platform to east wing is active" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "Midna text when west sol is placed" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "Midna text when west hand steals sol" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "killed south west Zant head in east room 2" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "killed south east Zant head in east room 2" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "killed center Zant head in east room 2" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "killed first Zant head in east room 2" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "unlock door in north room 2" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "killed dark beasts in north room 3" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "crossed black fog waterfall main room" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "midna text black fog west room 1" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "Midna text finding west sol" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "midna text black fog waterfall main room" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "midna text when seeing a civilian seen" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "midna text after warping back to main room after boss" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "killed second Zant head in north room 3 (spawn big chest)" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "killed first Zant head in north room 3 (spawn head 2)" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "midna text promt when seeing a civilian" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "midna text after light master sword" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "unlock door in north room 1" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "unlock door in east room 1" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "unlock door in west room 1" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "killed south Zant head in north room 1 (wave 1)" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "killed center Zant head in north room 1 (wave 1)" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "killed north west Zant head in north room 1 (wave 1)" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "killed north east Zant head in north room 1 (wave 1)" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "?" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "?" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "? (main room)" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "Heal Twili citizen outside west wing" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "? (main room)" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "Heal Twili near PoT entrance" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "Heal Twili citizen outside east wing" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "Heal Twili citizen next to west sol" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "Heal Twili citizen next to east sol" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "Heal Twili citizen north of Light Sword" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "Heal Twili citizen near fog waterfall" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "Opened Big Key Chest (causes fence to fall in room before Zant)" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "Midna text after re-entering west wing after sol stolen" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "remove fog in north room 4" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "remove fog and spawn stairs in north room 1" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "placed east sol in north room 1" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "placed west sol in north room 1" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "midna intro text" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "killed all wave 4 Zant heads in north room 2 (spawn big chest)" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "killed east Zant head north room 2 (wave 4)" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "killed west Zant head north room 2 (wave 4)" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "killed Zant head wave 3 in north room 2 (spawn wave 4)" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "killed all wave 2 Zant heads in north room 2 (spawn wave 3)" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "killed west Zant head north room 2 (wave 2)" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "killed east Zant head north room 2 (wave 2)" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "killed middle Zant head north room 2 (wave 2)" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "killed first Zant head north room 2 (spawn wave 2)" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "Watched east wing second room stairs CS" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "?" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "?" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "killed dark beasts in east room 2" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "spawn fog in east room 3" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "spawn fog in west room 3" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "killed all wave 2 Zant heads in north room 1 (spawn big chest)" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "killed north west Zant head north room 1 (wave 2)" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "killed north east Zant head north room 1 (wave 2)" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "killed all wave 1 Zant heads in north room 1 (spawn wave 2)" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "heart container" }, }; inline EventAreaFlags eventAreaFlagsSacredGrove[] = { - { 0x03, 0x08, 0x0308, "Big chest lost woods 2 torches" }, - { 0x03, 0x04, 0x0304, "Big chest spinner in skull kid wolf battle area" }, - { 0x03, 0x02, 0x0302, "PoH big chest temple of time (past)" }, - { 0x08, 0x80, 0x0880, "lit left torch chest lost woods" }, - { 0x08, 0x40, 0x0840, "killed poe temple of time (past)" }, - { 0x08, 0x20, 0x0820, "midna text after pushing block human" }, - { 0x08, 0x10, 0x0810, "cs after pushing block human" }, - { 0x08, 0x08, 0x0808, "intro cs lost woods" }, - { 0x08, 0x02, 0x0802, "?" }, - { 0x08, 0x01, 0x0801, "?" }, - { 0x09, 0x80, 0x0980, "explored section after window before dungeon (includes map marker for dungeon)" }, - { 0x09, 0x40, 0x0940, "stairs to temple of time area near (dungeon)" }, - { 0x09, 0x20, 0x0920, "strike MS into pedestal in past" }, - { 0x09, 0x10, 0x0910, "window and stairs to dungeon work properly" }, - { 0x09, 0x02, 0x0902, "killed poe lost woods water" }, - { 0x09, 0x01, 0x0901, "killed poe in skull kid wolf battle area" }, - { 0x0A, 0x80, 0x0A80, "killed poe in master sword area (present)" }, - { 0x0A, 0x10, 0x0A10, "skull kid wolf battle area explored" }, - { 0x0B, 0x80, 0x0B80, "temple of time (present) main room explored" }, - { 0x0B, 0x40, 0x0B40, "temple of time (past) main room explored" }, - { 0x0B, 0x20, 0x0B20, "blown up rock in skull kid wolf battle area" }, - { 0x0B, 0x10, 0x0B10, "block pushed human" }, - { 0x0B, 0x04, 0x0B04, "Master Sword Puzzle Complete" }, - { 0x0B, 0x02, 0x0B02, "Master sword area explored" }, - { 0x0B, 0x01, 0x0B01, "Temple of time (present) human entrence explored" }, - { 0x0F, 0x02, 0x0F02, "spawn big chest lost woods 2 torches" }, - { 0x0F, 0x01, 0x0F01, "lit right torch chest lost woods" }, - { 0x16, 0x20, 0x1620, "Master Sword Pulled (does not despawn)" }, - { 0x16, 0x10, 0x1610, "Blocks entrance to Woods (auto-set upon re-entering Grove before Skull Kid 2" }, - { 0x16, 0x08, 0x1608, "Lost woods skull kid human chase (unset once done)" }, - { 0x16, 0x02, 0x1602, "skull kid human defeated" }, - { 0x16, 0x01, 0x1601, "lost woods turns to day after skull kid fight human" }, - { 0x17, 0x80, 0x1780, "Skull Kid Appears (set automatically)" }, - { 0x17, 0x40, 0x1740, "Transition to day after Skull Kid" }, - { 0x17, 0x20, 0x1720, "dark beasts spawned" }, - { 0x17, 0x10, 0x1710, "Sacred Grove Portal (removes statue blocking door of time (to past)" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "Big chest lost woods 2 torches" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "Big chest spinner in skull kid wolf battle area" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "PoH big chest temple of time (past)" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "lit left torch chest lost woods" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "killed poe temple of time (past)" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "midna text after pushing block human" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "cs after pushing block human" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "intro cs lost woods" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "?" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "?" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "explored section after window before dungeon (includes map marker for dungeon)" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "stairs to temple of time area near (dungeon)" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "strike MS into pedestal in past" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "window and stairs to dungeon work properly" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "killed poe lost woods water" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "killed poe in skull kid wolf battle area" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "killed poe in master sword area (present)" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "skull kid wolf battle area explored" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "temple of time (present) main room explored" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "temple of time (past) main room explored" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "blown up rock in skull kid wolf battle area" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "block pushed human" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "Master Sword Puzzle Complete" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "Master sword area explored" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "Temple of time (present) human entrence explored" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "spawn big chest lost woods 2 torches" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "lit right torch chest lost woods" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "Master Sword Pulled (does not despawn)" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "Blocks entrance to Woods (auto-set upon re-entering Grove before Skull Kid 2" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "Lost woods skull kid human chase (unset once done)" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "skull kid human defeated" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "lost woods turns to day after skull kid fight human" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "Skull Kid Appears (set automatically)" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "Transition to day after Skull Kid" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "dark beasts spawned" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "Sacred Grove Portal (removes statue blocking door of time (to past)" }, }; inline EventAreaFlags eventAreaFlagsSewer[] = { - { 0x00, 0x80, 0x0080, "0" }, - { 0x00, 0x40, 0x0040, "1" }, - { 0x00, 0x20, 0x0020, "2" }, - { 0x00, 0x10, 0x0010, "3" }, - { 0x00, 0x08, 0x0008, "4" }, - { 0x00, 0x04, 0x0004, "5" }, - { 0x00, 0x02, 0x0002, "6" }, - { 0x00, 0x01, 0x0001, "7" }, - { 0x01, 0x80, 0x0180, "8" }, - { 0x01, 0x40, 0x0140, "9" }, - { 0x01, 0x20, 0x0120, "10" }, - { 0x01, 0x10, 0x0110, "11" }, - { 0x01, 0x08, 0x0108, "12" }, - { 0x01, 0x04, 0x0104, "13" }, - { 0x01, 0x02, 0x0102, "14" }, - { 0x01, 0x01, 0x0101, "15" }, - { 0x02, 0x80, 0x0280, "16" }, - { 0x02, 0x40, 0x0240, "17" }, - { 0x02, 0x20, 0x0220, "18" }, - { 0x02, 0x10, 0x0210, "19" }, - { 0x02, 0x08, 0x0208, "20" }, - { 0x08, 0x80, 0x0880, "twilight final cs" }, - { 0x08, 0x40, 0x0840, "Zelda cs twilight" }, - { 0x08, 0x20, 0x0820, "midna text after first gate sewers (how to fight)" }, - { 0x08, 0x10, 0x0810, "midna text after exiting to rooftops (twilight)" }, - { 0x08, 0x08, 0x0808, "wake up in jail cs" }, - { 0x08, 0x04, 0x0804, "midna promt to use sense to see gard (entrance to sewers)" }, - { 0x08, 0x02, 0x0802, "pushed box outside (MDH)" }, - { 0x08, 0x01, 0x0801, "pulled lever of first water gate in sewers" }, - { 0x09, 0x80, 0x0980, "dug up blue rupee after crawl space (sewers) (twilight)" }, - { 0x09, 0x40, 0x0940, "second water gate in sewers cs (unset afterwards)" }, - { 0x09, 0x20, 0x0920, "first water gate in sewers cs (unset afterwards)" }, - { 0x09, 0x10, 0x0910, "midna cs after diging out of jail" }, - { 0x09, 0x08, 0x0908, "midna intro cs" }, - { 0x09, 0x04, 0x0904, "waited long enough in jail" }, - { 0x09, 0x02, 0x0902, "broke fragile floor first jump of stairway (unlocks first midna jump)" }, - { 0x09, 0x01, 0x0901, "started midna jumps 3 stairway" }, - { 0x0A, 0x80, 0x0A80, "started midna jumps 2 stairway" }, - { 0x0A, 0x40, 0x0A40, "zelda tower intro cs" }, - { 0x0A, 0x20, 0x0A20, "midna went to the other side of the fence in sewers" }, - { 0x0A, 0x10, 0x0A10, "started midna jumps on rooftops" }, - { 0x0A, 0x08, 0x0A08, "started midna jumps 4 stairway (top to door)" }, - { 0x0A, 0x04, 0x0A04, "broke box inside Link's cell" }, - { 0x0A, 0x02, 0x0A02, "did midna jumps 1 stairway (broke small platform)" }, - { 0x0A, 0x01, 0x0A01, "outside top door intro cs" }, - { 0x0B, 0x80, 0x0B80, "broke fire in Zelda's room" }, - { 0x0B, 0x40, 0x0B40, "midna rejoinded link after crawl space" }, - { 0x0B, 0x20, 0x0B20, "went to the other side of the fence in sewers cs" }, - { 0x0B, 0x10, 0x0B10, "top of stairway intro cs" }, - { 0x0B, 0x08, 0x0B08, "stairway intro cs" }, - { 0x0B, 0x04, 0x0B04, "read midna promt to open door" }, - { 0x0B, 0x02, 0x0B02, "opened door in cell next to Link's" }, - { 0x0B, 0x01, 0x0B01, "dug out of Link's cell" }, - { 0x0D, 0x80, 0x0D80, "killed first bulblin outside (MDH)" }, - { 0x0D, 0x20, 0x0D20, "killed second bulblin outside (MDH)" }, - { 0x0D, 0x04, 0x0D04, "killed bulblin at top of stairway (on the patform) (MDH)" }, - { 0x0E, 0x80, 0x0E80, "killed fourth bulblin in stairway (MDH)" }, - { 0x0E, 0x20, 0x0E20, "killed third bulblin in stairway (MDH)" }, - { 0x0E, 0x04, 0x0E04, "killed second bulblin in stairway (MDH)" }, - { 0x0E, 0x02, 0x0E02, "killed first bulblin in stairway (MDH)" }, - { 0x0F, 0x20, 0x0F20, "talked to midna after using sense on first rooftop gard" }, - { 0x0F, 0x10, 0x0F10, "midna text when approching first rooftop gard" }, - { 0x0F, 0x08, 0x0F08, "listened to first gard in sewers" }, - { 0x0F, 0x04, 0x0F04, "saw first rooftop gard with sense" }, - { 0x0F, 0x02, 0x0F02, "saw first gard in sewers" }, - { 0x0F, 0x01, 0x0F01, "midna cs after diging out of jail" }, - { 0x1B, 0x08, 0x1B08, "picked up green rupee in box in secret passge next to fence (sewers) (twilight)" }, - { 0x1B, 0x04, 0x1B04, "picked up blue rupee in box in left secret way (sewers) (twilight)" }, - { 0x1B, 0x02, 0x1B02, "picked up purple rupee in boxes (first windy bridge) (MDH)" }, - { 0x1B, 0x01, 0x1B01, "picked up yellow rupee in Zelda's fire" }, + { 0x00, 0x80, AreaFlagInd{0x0080}, "0" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "1" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "2" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "3" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "4" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "5" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "6" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "7" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "8" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "9" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "10" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "11" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "12" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "13" }, + { 0x01, 0x02, AreaFlagInd{0x0102}, "14" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "15" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "16" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "17" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "18" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "19" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "20" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "twilight final cs" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "Zelda cs twilight" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "midna text after first gate sewers (how to fight)" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "midna text after exiting to rooftops (twilight)" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "wake up in jail cs" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "midna promt to use sense to see gard (entrance to sewers)" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "pushed box outside (MDH)" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "pulled lever of first water gate in sewers" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "dug up blue rupee after crawl space (sewers) (twilight)" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "second water gate in sewers cs (unset afterwards)" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "first water gate in sewers cs (unset afterwards)" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "midna cs after diging out of jail" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "midna intro cs" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "waited long enough in jail" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "broke fragile floor first jump of stairway (unlocks first midna jump)" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "started midna jumps 3 stairway" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "started midna jumps 2 stairway" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "zelda tower intro cs" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "midna went to the other side of the fence in sewers" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "started midna jumps on rooftops" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "started midna jumps 4 stairway (top to door)" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "broke box inside Link's cell" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "did midna jumps 1 stairway (broke small platform)" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "outside top door intro cs" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "broke fire in Zelda's room" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "midna rejoinded link after crawl space" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "went to the other side of the fence in sewers cs" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "top of stairway intro cs" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "stairway intro cs" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "read midna promt to open door" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "opened door in cell next to Link's" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "dug out of Link's cell" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "killed first bulblin outside (MDH)" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "killed second bulblin outside (MDH)" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "killed bulblin at top of stairway (on the patform) (MDH)" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "killed fourth bulblin in stairway (MDH)" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "killed third bulblin in stairway (MDH)" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "killed second bulblin in stairway (MDH)" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "killed first bulblin in stairway (MDH)" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "talked to midna after using sense on first rooftop gard" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "midna text when approching first rooftop gard" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "listened to first gard in sewers" }, + { 0x0F, 0x04, AreaFlagInd{0x0F04}, "saw first rooftop gard with sense" }, + { 0x0F, 0x02, AreaFlagInd{0x0F02}, "saw first gard in sewers" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "midna cs after diging out of jail" }, + { 0x1B, 0x08, AreaFlagInd{0x1B08}, "picked up green rupee in box in secret passge next to fence (sewers) (twilight)" }, + { 0x1B, 0x04, AreaFlagInd{0x1B04}, "picked up blue rupee in box in left secret way (sewers) (twilight)" }, + { 0x1B, 0x02, AreaFlagInd{0x1B02}, "picked up purple rupee in boxes (first windy bridge) (MDH)" }, + { 0x1B, 0x01, AreaFlagInd{0x1B01}, "picked up yellow rupee in Zelda's fire" }, }; inline EventAreaFlags eventAreaFlagsSnowpeak[] = { - { 0x03, 0x01, 0x0301, "Big chest transition cave" }, - { 0x08, 0x40, 0x0840, "montain top explored" }, - { 0x08, 0x20, 0x0820, "Map marker Ashei" }, - { 0x08, 0x04, 0x0804, "montain top cs (pan towards tree)" }, - { 0x08, 0x02, 0x0802, "Post SPR Save Prompt" }, - { 0x09, 0x80, 0x0980, "?" }, - { 0x09, 0x40, 0x0940, "?" }, - { 0x09, 0x20, 0x0920, "Snowpeak top portal" }, - { 0x0B, 0x08, 0x0B08, "explored second section up montain" }, - { 0x0B, 0x04, 0x0B04, "explored first section up montain" }, - { 0x0B, 0x02, 0x0B02, "Midna text in front of SPR" }, - { 0x0B, 0x01, 0x0B01, "intro cs" }, - { 0x0D, 0x10, 0x0D10, "spawn big chest transition cave" }, - { 0x0D, 0x08, 0x0D08, "lit left torch transition cave" }, - { 0x0D, 0x04, 0x0D04, "lit right torch transition cave" }, - { 0x0F, 0x08, 0x0F08, "snow fell down next to howling stone" }, - { 0x14, 0x80, 0x1480, "killed poe transition cave" }, - { 0x14, 0x40, 0x1440, "killed poe next to snowpeak ruins" }, - { 0x14, 0x20, 0x1420, "killed first poe up the montain" }, - { 0x14, 0x10, 0x1410, "killed second poe next to lone tree on cliff" }, - { 0x14, 0x08, 0x1408, "killed third poe near 2 trees before howling stone" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "Big chest transition cave" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "montain top explored" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "Map marker Ashei" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "montain top cs (pan towards tree)" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "Post SPR Save Prompt" }, + { 0x09, 0x80, AreaFlagInd{0x0980}, "?" }, + { 0x09, 0x40, AreaFlagInd{0x0940}, "?" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "Snowpeak top portal" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "explored second section up montain" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "explored first section up montain" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "Midna text in front of SPR" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "intro cs" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "spawn big chest transition cave" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "lit left torch transition cave" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "lit right torch transition cave" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "snow fell down next to howling stone" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "killed poe transition cave" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "killed poe next to snowpeak ruins" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "killed first poe up the montain" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "killed second poe next to lone tree on cliff" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "killed third poe near 2 trees before howling stone" }, }; inline EventAreaFlags eventAreaFlagsSPR[] = { - { 0x00, 0x02, 0x0002, "PoH big chest under broken ceiling" }, - { 0x01, 0x80, 0x0180, "left small chest behind armor in first room" }, - { 0x01, 0x40, 0x0140, "right small chest behind armor in first room" }, - { 0x01, 0x20, 0x0120, "PoH big chest in first room 2F" }, - { 0x01, 0x10, 0x0110, "west small chest behind ice in north west room" }, - { 0x01, 0x08, 0x0108, "east small chest behind ice in north west room" }, - { 0x01, 0x04, 0x0104, "small key small chest pumpkin room" }, - { 0x01, 0x01, 0x0101, "Ooccoo" }, - { 0x02, 0x80, 0x0280, "south east small chest in courtyard" }, - { 0x02, 0x40, 0x0240, "small key buried east small chest in courtyard" }, - { 0x02, 0x20, 0x0220, "small key buried west small chest in courtyard" }, - { 0x02, 0x08, 0x0208, "big key chest" }, - { 0x02, 0x04, 0x0204, "pumpkin big chest" }, - { 0x03, 0x80, 0x0380, "small key big chest in compass room 2F" }, - { 0x03, 0x40, 0x0340, "cheese big chest" }, - { 0x03, 0x08, 0x0308, "south small chest behind ice in courtyard" }, - { 0x03, 0x04, 0x0304, "compass big chest" }, - { 0x03, 0x02, 0x0302, "small chest compass room 1F" }, - //{ 0x08, 0x80, 0x0880, "position of second block in ice puzzle room" }, - //{ 0x08, 0x40, 0x0840, "position of second block in ice puzzle room" }, - //{ 0x08, 0x20, 0x0820, "position of second block in ice puzzle room" }, - //{ 0x08, 0x10, 0x0810, "position of second block in ice puzzle room" }, - //{ 0x08, 0x08, 0x0808, "position of second block in ice puzzle room" }, - //{ 0x08, 0x04, 0x0804, "position of third block in ice puzzle room (frozen one)" }, - //{ 0x08, 0x02, 0x0802, "position of third block in ice puzzle room (frozen one)" }, - //{ 0x08, 0x01, 0x0801, "position of third block in ice puzzle room (frozen one)" }, - //{ 0x09, 0x80, 0x0980, "position of third block in ice puzzle room (frozen one)" }, - //{ 0x09, 0x40, 0x0940, "position of third block in ice puzzle room (frozen one)" }, - { 0x09, 0x20, 0x0920, "killed poe in armor in first room" }, - { 0x09, 0x08, 0x0908, "unlock west living room door" }, - { 0x09, 0x04, 0x0904, "unlock north living room door" }, - { 0x09, 0x02, 0x0902, "lowered ball transport (west hallway-freezard)" }, - { 0x09, 0x01, 0x0901, "lowered ball transport (courtyard 2F)" }, - { 0x0A, 0x80, 0x0A80, "dug first time west buried small chest in courtyard" }, - { 0x0A, 0x40, 0x0A40, "lowered ball transport (west hallway-courtyard)" }, - { 0x0A, 0x20, 0x0A20, "dug second time west buried small chest in courtyard" }, - { 0x0A, 0x10, 0x0A10, "talked to Yeta for the first time (gives map)" }, - { 0x0A, 0x04, 0x0A04, "destroyed ice in courtyard 2F" }, - { 0x0A, 0x02, 0x0A02, "Yeta enters bedroom cs (in courtyard)" }, - { 0x0A, 0x01, 0x0A01, "unlock bedroom door" }, - { 0x0B, 0x80, 0x0B80, "enter courtyard" }, - { 0x0B, 0x20, 0x0B20, "compass big chest (set after)" }, - { 0x0B, 0x10, 0x0B10, "broke ice in pumpkin room 2F" }, - { 0x0B, 0x08, 0x0B08, "dug up east small chest in courtyard" }, - { 0x0B, 0x04, 0x0B04, "open west door 2F in ice puzzle room" }, - { 0x0B, 0x02, 0x0B02, "open west door 1F in ice puzzle room" }, - { 0x0C, 0x80, 0x0C80, "destroyed first left armor in first room" }, - { 0x0C, 0x40, 0x0C40, "destroyed second left armor in first room" }, - { 0x0C, 0x20, 0x0C20, "destroyed third left armor in first room" }, - //{ 0x0C, 0x08, 0x0C08, "canon in north west room orientation" }, - //{ 0x0C, 0x04, 0x0C04, "canon in north west room orientation" }, - { 0x0C, 0x02, 0x0C02, "killed freezard in courtyard 1F" }, - { 0x0C, 0x01, 0x0C01, "explored compass room" }, - { 0x0D, 0x80, 0x0D80, "killed first freezard in cage" }, - { 0x0D, 0x40, 0x0D40, "killed freezard in courtyard 2F" }, - { 0x0D, 0x20, 0x0D20, "killed west freezard in room above livng room (2F)" }, - { 0x0D, 0x10, 0x0D10, "killed north freezard in room above livng room (2F)" }, - { 0x0D, 0x08, 0x0D08, "broke ice in first room 2F" }, - { 0x0D, 0x04, 0x0D04, "destroyed ice on block in ice puzzle room" }, - { 0x0D, 0x01, 0x0D01, "unlock door in south east room 2F" }, - { 0x0E, 0x80, 0x0E80, "unlocked door to first room in freezard cage room" }, - { 0x0E, 0x20, 0x0E20, "unlock doors in room before pumpkin" }, - { 0x0E, 0x10, 0x0E10, "unlock door in east outside hallway" }, - { 0x0E, 0x08, 0x0E08, "unlock west door in courtyard" }, - { 0x0E, 0x04, 0x0E04, "explored courtyard 1F" }, - { 0x0E, 0x02, 0x0E02, "explored room above ice puzzle (2F)" }, - { 0x0E, 0x01, 0x0E01, "explored room above pumpkin (2F)" }, - { 0x0F, 0x80, 0x0F80, "puched left block in room above living room (2F)" }, - { 0x0F, 0x40, 0x0F40, "puched right block in room above living room (2F)" }, - { 0x0F, 0x20, 0x0F20, "2nd floor block pushed down in ice puzzle room" }, - //{ 0x0F, 0x10, 0x0F10, "position of first block in ice puzzle room" }, - //{ 0x0F, 0x08, 0x0F08, "position of first block in ice puzzle room" }, - //{ 0x0F, 0x04, 0x0F04, "position of first block in ice puzzle room" }, - //{ 0x0F, 0x02, 0x0F02, "position of first block in ice puzzle room" }, - //{ 0x0F, 0x01, 0x0F01, "position of first block in ice puzzle room" }, - { 0x10, 0x80, 0x1080, "Picked up B&C" }, - { 0x10, 0x40, 0x1040, "?" }, - { 0x10, 0x20, 0x1020, "Yeta lets you open door to kitchen" }, - { 0x10, 0x10, 0x1010, "north west room 1F intro cs" }, - { 0x10, 0x08, 0x1008, "Midna big key text prompt" }, - { 0x10, 0x02, 0x1002, "pumpkin room ambush cs trigger" }, - //{ 0x10, 0x01, 0x1001, "courtyard 2F canon orientation" }, - //{ 0x11, 0x80, 0x1180, "courtyard 2F canon orientation" }, - //{ 0x11, 0x40, 0x1140, "courtyard 1F canon orientation" }, - //{ 0x11, 0x20, 0x1120, "courtyard 1F canon orientation" }, - { 0x11, 0x02, 0x1102, "unlock mini-boss doors" }, - { 0x11, 0x01, 0x1101, "pushed block in west outside hallway" }, - { 0x12, 0x40, 0x1240, "unlock doors in pumpkin room" }, - { 0x12, 0x20, 0x1220, "explored path to bedroom 2F & 3F" }, - { 0x12, 0x10, 0x1210, "killed second freezard in cage" }, - { 0x12, 0x08, 0x1208, "explored west outside hallway 2F (canon)" }, - { 0x12, 0x04, 0x1204, "unlock door to big key in big key room" }, - //{ 0x12, 0x02, 0x1202, "freezard cage canon orientation" }, - //{ 0x12, 0x01, 0x1201, "freezard cage canon orientation" }, - { 0x13, 0x40, 0x1340, "killed chilfos in pumpkin room (unlock south door)" }, - { 0x13, 0x20, 0x1320, "?" }, - { 0x13, 0x10, 0x1310, "killed chilfos in big key room" }, - { 0x13, 0x08, 0x1308, "broke center ice in Ice puzzle room" }, - { 0x13, 0x04, 0x1304, "broke first right armor in first room" }, - { 0x13, 0x02, 0x1302, "broke second right armor in first room (spawns poe)" }, - { 0x13, 0x01, 0x1301, "broke third right armor in first room" }, - { 0x14, 0x80, 0x1480, "killed poe in south east room 2F" }, - { 0x14, 0x40, 0x1440, "Midna big key text seen" }, - { 0x14, 0x10, 0x1410, "explored east outside hallway 2F " }, - { 0x14, 0x08, 0x1408, "explored west outside hallway 1F (canonballs)" }, - { 0x14, 0x04, 0x1404, "explored room above living room (2F)" }, - { 0x14, 0x02, 0x1402, "explored freezard in cages room 2F" }, - { 0x14, 0x01, 0x1401, "Intro Cutscene" }, - { 0x15, 0x80, 0x1580, "unlock west door in pumpkin room" }, - { 0x15, 0x40, 0x1540, "destroyed first right armor in cheese room" }, - { 0x15, 0x20, 0x1520, "freezard in cage cs" }, - { 0x15, 0x08, 0x1508, "courtyard intro cs" }, - { 0x15, 0x04, 0x1504, "killed poe in center of first room" }, - { 0x15, 0x02, 0x1502, "pumpkin room intro cs" }, - { 0x15, 0x01, 0x1501, "?" }, - { 0x16, 0x80, 0x1680, "?" }, - { 0x16, 0x40, 0x1640, "Yeta points to kitchen cs" }, - { 0x16, 0x20, 0x1620, "Midna Cheese text prompt" }, - { 0x16, 0x10, 0x1610, "Midna Cheese text seen" }, - { 0x16, 0x08, 0x1608, "Midna pumpkin text seen" }, - { 0x16, 0x04, 0x1604, "Darkhammer (unsets after defeat)" }, - { 0x16, 0x02, 0x1602, "Midna pumpkin text prompt" }, - { 0x16, 0x01, 0x1601, "unlock exit door in big key room" }, - { 0x17, 0x80, 0x1780, "map marker bedroom key" }, - { 0x17, 0x40, 0x1740, "map marker ordon cheese" }, - { 0x17, 0x20, 0x1720, "map marker ordon pumpkin" }, - { 0x17, 0x10, 0x1710, "Blizzeta Cutscene" }, - { 0x17, 0x08, 0x1708, "broke first ice south door in north west room 1F" }, - { 0x17, 0x04, 0x1704, "broke second ice south door in north west room 1F" }, - { 0x17, 0x02, 0x1702, "broke third ice south door in north west room 1F" }, - { 0x17, 0x01, 0x1701, "broke ice wall in compass room 2F" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "PoH big chest under broken ceiling" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "left small chest behind armor in first room" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "right small chest behind armor in first room" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "PoH big chest in first room 2F" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "west small chest behind ice in north west room" }, + { 0x01, 0x08, AreaFlagInd{0x0108}, "east small chest behind ice in north west room" }, + { 0x01, 0x04, AreaFlagInd{0x0104}, "small key small chest pumpkin room" }, + { 0x01, 0x01, AreaFlagInd{0x0101}, "Ooccoo" }, + { 0x02, 0x80, AreaFlagInd{0x0280}, "south east small chest in courtyard" }, + { 0x02, 0x40, AreaFlagInd{0x0240}, "small key buried east small chest in courtyard" }, + { 0x02, 0x20, AreaFlagInd{0x0220}, "small key buried west small chest in courtyard" }, + { 0x02, 0x08, AreaFlagInd{0x0208}, "big key chest" }, + { 0x02, 0x04, AreaFlagInd{0x0204}, "pumpkin big chest" }, + { 0x03, 0x80, AreaFlagInd{0x0380}, "small key big chest in compass room 2F" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "cheese big chest" }, + { 0x03, 0x08, AreaFlagInd{0x0308}, "south small chest behind ice in courtyard" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "compass big chest" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "small chest compass room 1F" }, + //{ 0x08, 0x80, AreaFlagInd{0x0880}, "position of second block in ice puzzle room" }, + //{ 0x08, 0x40, AreaFlagInd{0x0840}, "position of second block in ice puzzle room" }, + //{ 0x08, 0x20, AreaFlagInd{0x0820}, "position of second block in ice puzzle room" }, + //{ 0x08, 0x10, AreaFlagInd{0x0810}, "position of second block in ice puzzle room" }, + //{ 0x08, 0x08, AreaFlagInd{0x0808}, "position of second block in ice puzzle room" }, + //{ 0x08, 0x04, AreaFlagInd{0x0804}, "position of third block in ice puzzle room (frozen one)" }, + //{ 0x08, 0x02, AreaFlagInd{0x0802}, "position of third block in ice puzzle room (frozen one)" }, + //{ 0x08, 0x01, AreaFlagInd{0x0801}, "position of third block in ice puzzle room (frozen one)" }, + //{ 0x09, 0x80, AreaFlagInd{0x0980}, "position of third block in ice puzzle room (frozen one)" }, + //{ 0x09, 0x40, AreaFlagInd{0x0940}, "position of third block in ice puzzle room (frozen one)" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "killed poe in armor in first room" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "unlock west living room door" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "unlock north living room door" }, + { 0x09, 0x02, AreaFlagInd{0x0902}, "lowered ball transport (west hallway-freezard)" }, + { 0x09, 0x01, AreaFlagInd{0x0901}, "lowered ball transport (courtyard 2F)" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "dug first time west buried small chest in courtyard" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "lowered ball transport (west hallway-courtyard)" }, + { 0x0A, 0x20, AreaFlagInd{0x0A20}, "dug second time west buried small chest in courtyard" }, + { 0x0A, 0x10, AreaFlagInd{0x0A10}, "talked to Yeta for the first time (gives map)" }, + { 0x0A, 0x04, AreaFlagInd{0x0A04}, "destroyed ice in courtyard 2F" }, + { 0x0A, 0x02, AreaFlagInd{0x0A02}, "Yeta enters bedroom cs (in courtyard)" }, + { 0x0A, 0x01, AreaFlagInd{0x0A01}, "unlock bedroom door" }, + { 0x0B, 0x80, AreaFlagInd{0x0B80}, "enter courtyard" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "compass big chest (set after)" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "broke ice in pumpkin room 2F" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "dug up east small chest in courtyard" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "open west door 2F in ice puzzle room" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "open west door 1F in ice puzzle room" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "destroyed first left armor in first room" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "destroyed second left armor in first room" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "destroyed third left armor in first room" }, + //{ 0x0C, 0x08, AreaFlagInd{0x0C08}, "canon in north west room orientation" }, + //{ 0x0C, 0x04, AreaFlagInd{0x0C04}, "canon in north west room orientation" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "killed freezard in courtyard 1F" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "explored compass room" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "killed first freezard in cage" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "killed freezard in courtyard 2F" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "killed west freezard in room above livng room (2F)" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "killed north freezard in room above livng room (2F)" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "broke ice in first room 2F" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "destroyed ice on block in ice puzzle room" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "unlock door in south east room 2F" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "unlocked door to first room in freezard cage room" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "unlock doors in room before pumpkin" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "unlock door in east outside hallway" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "unlock west door in courtyard" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "explored courtyard 1F" }, + { 0x0E, 0x02, AreaFlagInd{0x0E02}, "explored room above ice puzzle (2F)" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "explored room above pumpkin (2F)" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "puched left block in room above living room (2F)" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "puched right block in room above living room (2F)" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "2nd floor block pushed down in ice puzzle room" }, + //{ 0x0F, 0x10, AreaFlagInd{0x0F10}, "position of first block in ice puzzle room" }, + //{ 0x0F, 0x08, AreaFlagInd{0x0F08}, "position of first block in ice puzzle room" }, + //{ 0x0F, 0x04, AreaFlagInd{0x0F04}, "position of first block in ice puzzle room" }, + //{ 0x0F, 0x02, AreaFlagInd{0x0F02}, "position of first block in ice puzzle room" }, + //{ 0x0F, 0x01, AreaFlagInd{0x0F01}, "position of first block in ice puzzle room" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "Picked up B&C" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "?" }, + { 0x10, 0x20, AreaFlagInd{0x1020}, "Yeta lets you open door to kitchen" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "north west room 1F intro cs" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "Midna big key text prompt" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "pumpkin room ambush cs trigger" }, + //{ 0x10, 0x01, AreaFlagInd{0x1001}, "courtyard 2F canon orientation" }, + //{ 0x11, 0x80, AreaFlagInd{0x1180}, "courtyard 2F canon orientation" }, + //{ 0x11, 0x40, AreaFlagInd{0x1140}, "courtyard 1F canon orientation" }, + //{ 0x11, 0x20, AreaFlagInd{0x1120}, "courtyard 1F canon orientation" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "unlock mini-boss doors" }, + { 0x11, 0x01, AreaFlagInd{0x1101}, "pushed block in west outside hallway" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "unlock doors in pumpkin room" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "explored path to bedroom 2F & 3F" }, + { 0x12, 0x10, AreaFlagInd{0x1210}, "killed second freezard in cage" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "explored west outside hallway 2F (canon)" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "unlock door to big key in big key room" }, + //{ 0x12, 0x02, AreaFlagInd{0x1202}, "freezard cage canon orientation" }, + //{ 0x12, 0x01, AreaFlagInd{0x1201}, "freezard cage canon orientation" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "killed chilfos in pumpkin room (unlock south door)" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "?" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "killed chilfos in big key room" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "broke center ice in Ice puzzle room" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "broke first right armor in first room" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "broke second right armor in first room (spawns poe)" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "broke third right armor in first room" }, + { 0x14, 0x80, AreaFlagInd{0x1480}, "killed poe in south east room 2F" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "Midna big key text seen" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "explored east outside hallway 2F " }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "explored west outside hallway 1F (canonballs)" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "explored room above living room (2F)" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "explored freezard in cages room 2F" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "Intro Cutscene" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "unlock west door in pumpkin room" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "destroyed first right armor in cheese room" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "freezard in cage cs" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "courtyard intro cs" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "killed poe in center of first room" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "pumpkin room intro cs" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "?" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "?" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "Yeta points to kitchen cs" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "Midna Cheese text prompt" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "Midna Cheese text seen" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "Midna pumpkin text seen" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "Darkhammer (unsets after defeat)" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "Midna pumpkin text prompt" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "unlock exit door in big key room" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "map marker bedroom key" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "map marker ordon cheese" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "map marker ordon pumpkin" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "Blizzeta Cutscene" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "broke first ice south door in north west room 1F" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "broke second ice south door in north west room 1F" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "broke third ice south door in north west room 1F" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "broke ice wall in compass room 2F" }, }; inline EventAreaFlags eventAreaFlagsToT[] = { - { 0x00, 0x80, 0x0080, "map marker statue in room 2" }, - { 0x00, 0x40, 0x0040, "map marker statue will spawn in room 2" }, - { 0x00, 0x20, 0x0020, "map marker statue in room 3" }, - { 0x00, 0x10, 0x0010, "map marker statue will spawn in room 3" }, - { 0x00, 0x08, 0x0008, "map marker statue in room 4" }, - { 0x00, 0x04, 0x0004, "map marker statue will spawn in room 4" }, - { 0x00, 0x02, 0x0002, "map marker statue in room 5" }, - { 0x00, 0x01, 0x0001, "map marker statue will spawn in room 5" }, - { 0x01, 0x80, 0x0180, "map marker statue in room 6" }, - { 0x01, 0x40, 0x0140, "map marker statue will spawn in room 6" }, - { 0x01, 0x20, 0x0120, "map marker statue in room 7" }, - { 0x01, 0x10, 0x0110, "map marker statue will spawn in room 7" }, - { 0x02, 0x10, 0x0210, "PoH big chest room 4" }, - { 0x02, 0x02, 0x0202, "small key big chest room 6 7F" }, - { 0x02, 0x01, 0x0201, "big key chest" }, - { 0x03, 0x40, 0x0340, "compass big chest room 4" }, - { 0x03, 0x20, 0x0320, "PoH big chest south room 5F" }, - { 0x03, 0x10, 0x0310, "small key big chest south room 5F" }, - { 0x03, 0x04, 0x0304, "small chest room 2 2F" }, - { 0x03, 0x02, 0x0302, "map big chest room 2 3F" }, - { 0x03, 0x01, 0x0301, "dominion rod big chest" }, - { 0x04, 0x80, 0x0480, "Ooccoo" }, - { 0x05, 0x01, 0x0501, "small chest big key room" }, - { 0x06, 0x80, 0x0680, "small chest room 5 7F" }, - { 0x06, 0x40, 0x0640, "south small chest south room 5F" }, - { 0x06, 0x20, 0x0620, "small chest room 2 3F" }, - { 0x06, 0x10, 0x0610, "big chest room 5 6F" }, - { 0x06, 0x08, 0x0608, "big chest room 6 8F" }, - { 0x06, 0x02, 0x0602, "small key big chest room 1" }, - { 0x07, 0x02, 0x0702, "map marker statue in room 1" }, - { 0x07, 0x01, 0x0701, "map marker statue will spawn in room 1" }, - { 0x08, 0x80, 0x0880, "Midna text asking to look at missing statue room 1" }, - { 0x08, 0x40, 0x0840, "Midna text after looking at missing statue room 1" }, - { 0x08, 0x20, 0x0820, "unlock door in room 6 8F" }, - { 0x08, 0x10, 0x0810, "unlock door in room 3 5F (spawn baby and young gohmas in south room 5F)" }, - { 0x08, 0x08, 0x0808, "unlock door in room 1" }, - { 0x08, 0x04, 0x0804, "dominion rod big chest (set after)" }, - { 0x08, 0x02, 0x0802, "killed poe in room 3 3F" }, - { 0x08, 0x01, 0x0801, "killed poe in room 5 7F" }, - { 0x09, 0x20, 0x0920, "intro cs" }, - { 0x09, 0x10, 0x0910, "scale intro cs room 5 6F" }, - { 0x09, 0x08, 0x0908, "change balance of scale for the first time cs" }, - { 0x09, 0x04, 0x0904, "change balance of scale for the first time" }, - { 0x0A, 0x80, 0x0A80, "entered room 7" }, - { 0x0A, 0x40, 0x0A40, "spawn west big chest in south room 5F" }, - { 0x0A, 0x08, 0x0A08, "statue getting possessed for the first time cs" }, - { 0x0B, 0x40, 0x0B40, "deactivate statue slot in room 1 (opens door and deactivates statue)" }, - { 0x0B, 0x20, 0x0B20, "deactivate bell in room 2 (required to spawn in room 1)" }, - { 0x0B, 0x10, 0x0B10, "deactivate bell in room 3 (required to spawn in room 2)" }, - { 0x0B, 0x08, 0x0B08, "deactivate bell in room 4 (required to spawn in room 3)" }, - { 0x0B, 0x04, 0x0B04, "deactivate bell in room 5 (required to spawn in room 4)" }, - { 0x0B, 0x02, 0x0B02, "deactivate bell in room 6 (required to spawn in room 5)" }, - { 0x0B, 0x01, 0x0B01, "deactivate bell in room 7 (required to spawn in room 6)" }, - { 0x0C, 0x80, 0x0C80, "unlock door in south room 5F" }, - { 0x0C, 0x40, 0x0C40, "killed armos in room 2 3F (spawn big chest)" }, - { 0x0C, 0x20, 0x0C20, "killed armos in big key room (unlocks door)" }, - { 0x0C, 0x10, 0x0C10, "lit both torches in room 1 (unset if you leave) (spawn big chest)" }, - { 0x0C, 0x04, 0x0C04, "broke gate in room 2 3F" }, - { 0x0C, 0x02, 0x0C02, "broke fouth gate in room 2 2F" }, - { 0x0C, 0x01, 0x0C01, "broke first gate in room 2 2F" }, - { 0x0D, 0x80, 0x0D80, "broke third gate in room 2 2F" }, - { 0x0D, 0x40, 0x0D40, "broke second gate in room 2 2F" }, - { 0x0D, 0x20, 0x0D20, "broke second sliding door in room 4 4F" }, - { 0x0D, 0x10, 0x0D10, "broke third sliding door in room 4 5F" }, - { 0x0D, 0x08, 0x0D08, "broke second sliding door in room 4 5F" }, - { 0x0D, 0x04, 0x0D04, "broke first sliding door in room 4 5F" }, - { 0x0D, 0x02, 0x0D02, "broke first sliding door in room 4 4F" }, - { 0x0D, 0x01, 0x0D01, "broke first beamos in room before boss" }, - { 0x0E, 0x80, 0x0E80, "broke left beamos in room before boss" }, - { 0x0E, 0x40, 0x0E40, "broke right beamos in room before boss" }, - { 0x0E, 0x20, 0x0E20, "broke beamos in room 6 7F" }, - { 0x0E, 0x10, 0x0E10, "broke first beamos in room 4 4F" }, - { 0x0E, 0x08, 0x0E08, "broke second beamos in room 4 4F" }, - { 0x0E, 0x04, 0x0E04, "broke beamos in room 3 3F" }, - { 0x0E, 0x01, 0x0E01, "broke gate to bell in room 3 3F" }, - { 0x0F, 0x80, 0x0F80, "broke gate to poe in room 3 3F" }, - { 0x0F, 0x40, 0x0F40, "broke gate in room 6 8F" }, - { 0x0F, 0x20, 0x0F20, "open door to poe in room 3 3F" }, - { 0x0F, 0x10, 0x0F10, "spawn baby gohmas in beamos room 3 3F" }, - { 0x0F, 0x08, 0x0F08, "broke gate in room 6 8F cs" }, - { 0x0F, 0x01, 0x0F01, "unlock boss door" }, - { 0x10, 0x80, 0x1080, "open big door in room 1 cs part 2" }, - { 0x10, 0x40, 0x1040, "open big door in room 1 cs part 1" }, - { 0x10, 0x10, 0x1010, "killed a baby gohma in room 6 8F" }, - { 0x10, 0x08, 0x1008, "killed a baby gohma in room 6 8F" }, - { 0x10, 0x04, 0x1004, "killed a baby gohma in room 6 8F" }, - { 0x10, 0x02, 0x1002, "killed a baby gohma in room 6 8F" }, - { 0x10, 0x01, 0x1001, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x80, 0x1180, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x40, 0x1140, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x20, 0x1120, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x10, 0x1110, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x08, 0x1108, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x04, 0x1104, "killed a baby gohma in room 6 8F" }, - { 0x11, 0x02, 0x1102, "killed a baby gohma in room 6 8F" }, - { 0x12, 0x80, 0x1280, "pressed button in room 1 (or 6 8F) for the first time cs" }, - { 0x12, 0x40, 0x1240, "pressed button in room 6 7F for the first time cs" }, - { 0x12, 0x20, 0x1220, "killed both armos in room 6 8F (opens gate)" }, - { 0x12, 0x08, 0x1208, "pressed buttons in room 3 5F for the first time cs" }, - { 0x12, 0x04, 0x1204, "pressed buttons in room 2 3F for the first time cs" }, - { 0x12, 0x02, 0x1202, "pressed button in room 2 2F for the first time cs" }, - { 0x13, 0x40, 0x1340, "open gate to dominion rod in room 7" }, - { 0x13, 0x20, 0x1320, "statue spawning out of bell in room 1 cs trigger" }, - { 0x13, 0x10, 0x1310, "statue spawning out of bell in room 1 cs" }, - { 0x13, 0x08, 0x1308, "killed all baby gohmas in room 6 8F (spawn big chest)" }, - { 0x13, 0x04, 0x1304, "killed all enemies in room 5 6F (spawn big chest)" }, - { 0x13, 0x02, 0x1302, "killed west armos in south room 5F" }, - { 0x13, 0x01, 0x1301, "killed east armos in south room 5F" }, - { 0x14, 0x40, 0x1440, "unlock door in room 7" }, - { 0x14, 0x20, 0x1420, "statue getting in bell in room 7 cs first part" }, - { 0x14, 0x10, 0x1410, "statue getting in bell in room 7 cs second part" }, - { 0x14, 0x08, 0x1408, "statue getting in bell in room 7 cs trigger" }, - { 0x14, 0x04, 0x1404, "open gate to dominion rod in room 7 cs" }, - { 0x14, 0x02, 0x1402, "statue spawn out of bell in room 6" }, - { 0x14, 0x01, 0x1401, "statue spawning out of bell in room 6 cs trigger" }, - { 0x15, 0x80, 0x1580, "statue spawning out of bell in room 6 cs part 1" }, - { 0x15, 0x40, 0x1540, "statue getting in bell in room 6 cs trigger" }, - { 0x15, 0x20, 0x1520, "statue getting in bell in room 6 cs" }, - { 0x15, 0x10, 0x1510, "statue spawning out of bell in room 5 cs trigger" }, - { 0x15, 0x08, 0x1508, "statue spawning out of bell in room 5 cs" }, - { 0x15, 0x04, 0x1504, "statue getting in bell in room 5 cs trigger" }, - { 0x15, 0x02, 0x1502, "statue getting in bell in room 5 cs" }, - { 0x15, 0x01, 0x1501, "statue spawning out of bell in room 4 cs trigger" }, - { 0x16, 0x80, 0x1680, "statue spawning out of bell in room 4 cs" }, - { 0x16, 0x40, 0x1640, "statue getting in bell in room 4 cs trigger" }, - { 0x16, 0x20, 0x1620, "statue getting in bell in room 4 cs" }, - { 0x16, 0x10, 0x1610, "statue spawning out of bell in room 3 cs trigger" }, - { 0x16, 0x08, 0x1608, "statue spawning out of bell in room 3 cs" }, - { 0x16, 0x04, 0x1604, "statue getting in bell in room 3 cs trigger" }, - { 0x16, 0x02, 0x1602, "statue getting in bell in room 3 cs" }, - { 0x16, 0x01, 0x1601, "statue spawning out of bell in room 2 cs trigger" }, - { 0x17, 0x80, 0x1780, "statue spawning out of bell in room 2 cs" }, - { 0x17, 0x40, 0x1740, "statue getting in bell in room 2 cs trigger" }, - { 0x17, 0x20, 0x1720, "statue getting in bell in room 2 cs" }, - { 0x17, 0x10, 0x1710, "deactivate spawning bell in room 7" }, - { 0x17, 0x08, 0x1708, "big door in room 1 opens" }, - { 0x17, 0x04, 0x1704, "open big door in room 1 cs part 2 trigger" }, - { 0x17, 0x02, 0x1702, "open big door in room 1 cs part 1 trigger" }, - { 0x17, 0x01, 0x1701, "statue placed in slot in room 1" }, + { 0x00, 0x80, AreaFlagInd{0x0080}, "map marker statue in room 2" }, + { 0x00, 0x40, AreaFlagInd{0x0040}, "map marker statue will spawn in room 2" }, + { 0x00, 0x20, AreaFlagInd{0x0020}, "map marker statue in room 3" }, + { 0x00, 0x10, AreaFlagInd{0x0010}, "map marker statue will spawn in room 3" }, + { 0x00, 0x08, AreaFlagInd{0x0008}, "map marker statue in room 4" }, + { 0x00, 0x04, AreaFlagInd{0x0004}, "map marker statue will spawn in room 4" }, + { 0x00, 0x02, AreaFlagInd{0x0002}, "map marker statue in room 5" }, + { 0x00, 0x01, AreaFlagInd{0x0001}, "map marker statue will spawn in room 5" }, + { 0x01, 0x80, AreaFlagInd{0x0180}, "map marker statue in room 6" }, + { 0x01, 0x40, AreaFlagInd{0x0140}, "map marker statue will spawn in room 6" }, + { 0x01, 0x20, AreaFlagInd{0x0120}, "map marker statue in room 7" }, + { 0x01, 0x10, AreaFlagInd{0x0110}, "map marker statue will spawn in room 7" }, + { 0x02, 0x10, AreaFlagInd{0x0210}, "PoH big chest room 4" }, + { 0x02, 0x02, AreaFlagInd{0x0202}, "small key big chest room 6 7F" }, + { 0x02, 0x01, AreaFlagInd{0x0201}, "big key chest" }, + { 0x03, 0x40, AreaFlagInd{0x0340}, "compass big chest room 4" }, + { 0x03, 0x20, AreaFlagInd{0x0320}, "PoH big chest south room 5F" }, + { 0x03, 0x10, AreaFlagInd{0x0310}, "small key big chest south room 5F" }, + { 0x03, 0x04, AreaFlagInd{0x0304}, "small chest room 2 2F" }, + { 0x03, 0x02, AreaFlagInd{0x0302}, "map big chest room 2 3F" }, + { 0x03, 0x01, AreaFlagInd{0x0301}, "dominion rod big chest" }, + { 0x04, 0x80, AreaFlagInd{0x0480}, "Ooccoo" }, + { 0x05, 0x01, AreaFlagInd{0x0501}, "small chest big key room" }, + { 0x06, 0x80, AreaFlagInd{0x0680}, "small chest room 5 7F" }, + { 0x06, 0x40, AreaFlagInd{0x0640}, "south small chest south room 5F" }, + { 0x06, 0x20, AreaFlagInd{0x0620}, "small chest room 2 3F" }, + { 0x06, 0x10, AreaFlagInd{0x0610}, "big chest room 5 6F" }, + { 0x06, 0x08, AreaFlagInd{0x0608}, "big chest room 6 8F" }, + { 0x06, 0x02, AreaFlagInd{0x0602}, "small key big chest room 1" }, + { 0x07, 0x02, AreaFlagInd{0x0702}, "map marker statue in room 1" }, + { 0x07, 0x01, AreaFlagInd{0x0701}, "map marker statue will spawn in room 1" }, + { 0x08, 0x80, AreaFlagInd{0x0880}, "Midna text asking to look at missing statue room 1" }, + { 0x08, 0x40, AreaFlagInd{0x0840}, "Midna text after looking at missing statue room 1" }, + { 0x08, 0x20, AreaFlagInd{0x0820}, "unlock door in room 6 8F" }, + { 0x08, 0x10, AreaFlagInd{0x0810}, "unlock door in room 3 5F (spawn baby and young gohmas in south room 5F)" }, + { 0x08, 0x08, AreaFlagInd{0x0808}, "unlock door in room 1" }, + { 0x08, 0x04, AreaFlagInd{0x0804}, "dominion rod big chest (set after)" }, + { 0x08, 0x02, AreaFlagInd{0x0802}, "killed poe in room 3 3F" }, + { 0x08, 0x01, AreaFlagInd{0x0801}, "killed poe in room 5 7F" }, + { 0x09, 0x20, AreaFlagInd{0x0920}, "intro cs" }, + { 0x09, 0x10, AreaFlagInd{0x0910}, "scale intro cs room 5 6F" }, + { 0x09, 0x08, AreaFlagInd{0x0908}, "change balance of scale for the first time cs" }, + { 0x09, 0x04, AreaFlagInd{0x0904}, "change balance of scale for the first time" }, + { 0x0A, 0x80, AreaFlagInd{0x0A80}, "entered room 7" }, + { 0x0A, 0x40, AreaFlagInd{0x0A40}, "spawn west big chest in south room 5F" }, + { 0x0A, 0x08, AreaFlagInd{0x0A08}, "statue getting possessed for the first time cs" }, + { 0x0B, 0x40, AreaFlagInd{0x0B40}, "deactivate statue slot in room 1 (opens door and deactivates statue)" }, + { 0x0B, 0x20, AreaFlagInd{0x0B20}, "deactivate bell in room 2 (required to spawn in room 1)" }, + { 0x0B, 0x10, AreaFlagInd{0x0B10}, "deactivate bell in room 3 (required to spawn in room 2)" }, + { 0x0B, 0x08, AreaFlagInd{0x0B08}, "deactivate bell in room 4 (required to spawn in room 3)" }, + { 0x0B, 0x04, AreaFlagInd{0x0B04}, "deactivate bell in room 5 (required to spawn in room 4)" }, + { 0x0B, 0x02, AreaFlagInd{0x0B02}, "deactivate bell in room 6 (required to spawn in room 5)" }, + { 0x0B, 0x01, AreaFlagInd{0x0B01}, "deactivate bell in room 7 (required to spawn in room 6)" }, + { 0x0C, 0x80, AreaFlagInd{0x0C80}, "unlock door in south room 5F" }, + { 0x0C, 0x40, AreaFlagInd{0x0C40}, "killed armos in room 2 3F (spawn big chest)" }, + { 0x0C, 0x20, AreaFlagInd{0x0C20}, "killed armos in big key room (unlocks door)" }, + { 0x0C, 0x10, AreaFlagInd{0x0C10}, "lit both torches in room 1 (unset if you leave) (spawn big chest)" }, + { 0x0C, 0x04, AreaFlagInd{0x0C04}, "broke gate in room 2 3F" }, + { 0x0C, 0x02, AreaFlagInd{0x0C02}, "broke fouth gate in room 2 2F" }, + { 0x0C, 0x01, AreaFlagInd{0x0C01}, "broke first gate in room 2 2F" }, + { 0x0D, 0x80, AreaFlagInd{0x0D80}, "broke third gate in room 2 2F" }, + { 0x0D, 0x40, AreaFlagInd{0x0D40}, "broke second gate in room 2 2F" }, + { 0x0D, 0x20, AreaFlagInd{0x0D20}, "broke second sliding door in room 4 4F" }, + { 0x0D, 0x10, AreaFlagInd{0x0D10}, "broke third sliding door in room 4 5F" }, + { 0x0D, 0x08, AreaFlagInd{0x0D08}, "broke second sliding door in room 4 5F" }, + { 0x0D, 0x04, AreaFlagInd{0x0D04}, "broke first sliding door in room 4 5F" }, + { 0x0D, 0x02, AreaFlagInd{0x0D02}, "broke first sliding door in room 4 4F" }, + { 0x0D, 0x01, AreaFlagInd{0x0D01}, "broke first beamos in room before boss" }, + { 0x0E, 0x80, AreaFlagInd{0x0E80}, "broke left beamos in room before boss" }, + { 0x0E, 0x40, AreaFlagInd{0x0E40}, "broke right beamos in room before boss" }, + { 0x0E, 0x20, AreaFlagInd{0x0E20}, "broke beamos in room 6 7F" }, + { 0x0E, 0x10, AreaFlagInd{0x0E10}, "broke first beamos in room 4 4F" }, + { 0x0E, 0x08, AreaFlagInd{0x0E08}, "broke second beamos in room 4 4F" }, + { 0x0E, 0x04, AreaFlagInd{0x0E04}, "broke beamos in room 3 3F" }, + { 0x0E, 0x01, AreaFlagInd{0x0E01}, "broke gate to bell in room 3 3F" }, + { 0x0F, 0x80, AreaFlagInd{0x0F80}, "broke gate to poe in room 3 3F" }, + { 0x0F, 0x40, AreaFlagInd{0x0F40}, "broke gate in room 6 8F" }, + { 0x0F, 0x20, AreaFlagInd{0x0F20}, "open door to poe in room 3 3F" }, + { 0x0F, 0x10, AreaFlagInd{0x0F10}, "spawn baby gohmas in beamos room 3 3F" }, + { 0x0F, 0x08, AreaFlagInd{0x0F08}, "broke gate in room 6 8F cs" }, + { 0x0F, 0x01, AreaFlagInd{0x0F01}, "unlock boss door" }, + { 0x10, 0x80, AreaFlagInd{0x1080}, "open big door in room 1 cs part 2" }, + { 0x10, 0x40, AreaFlagInd{0x1040}, "open big door in room 1 cs part 1" }, + { 0x10, 0x10, AreaFlagInd{0x1010}, "killed a baby gohma in room 6 8F" }, + { 0x10, 0x08, AreaFlagInd{0x1008}, "killed a baby gohma in room 6 8F" }, + { 0x10, 0x04, AreaFlagInd{0x1004}, "killed a baby gohma in room 6 8F" }, + { 0x10, 0x02, AreaFlagInd{0x1002}, "killed a baby gohma in room 6 8F" }, + { 0x10, 0x01, AreaFlagInd{0x1001}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x80, AreaFlagInd{0x1180}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x40, AreaFlagInd{0x1140}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x20, AreaFlagInd{0x1120}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x10, AreaFlagInd{0x1110}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x08, AreaFlagInd{0x1108}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x04, AreaFlagInd{0x1104}, "killed a baby gohma in room 6 8F" }, + { 0x11, 0x02, AreaFlagInd{0x1102}, "killed a baby gohma in room 6 8F" }, + { 0x12, 0x80, AreaFlagInd{0x1280}, "pressed button in room 1 (or 6 8F) for the first time cs" }, + { 0x12, 0x40, AreaFlagInd{0x1240}, "pressed button in room 6 7F for the first time cs" }, + { 0x12, 0x20, AreaFlagInd{0x1220}, "killed both armos in room 6 8F (opens gate)" }, + { 0x12, 0x08, AreaFlagInd{0x1208}, "pressed buttons in room 3 5F for the first time cs" }, + { 0x12, 0x04, AreaFlagInd{0x1204}, "pressed buttons in room 2 3F for the first time cs" }, + { 0x12, 0x02, AreaFlagInd{0x1202}, "pressed button in room 2 2F for the first time cs" }, + { 0x13, 0x40, AreaFlagInd{0x1340}, "open gate to dominion rod in room 7" }, + { 0x13, 0x20, AreaFlagInd{0x1320}, "statue spawning out of bell in room 1 cs trigger" }, + { 0x13, 0x10, AreaFlagInd{0x1310}, "statue spawning out of bell in room 1 cs" }, + { 0x13, 0x08, AreaFlagInd{0x1308}, "killed all baby gohmas in room 6 8F (spawn big chest)" }, + { 0x13, 0x04, AreaFlagInd{0x1304}, "killed all enemies in room 5 6F (spawn big chest)" }, + { 0x13, 0x02, AreaFlagInd{0x1302}, "killed west armos in south room 5F" }, + { 0x13, 0x01, AreaFlagInd{0x1301}, "killed east armos in south room 5F" }, + { 0x14, 0x40, AreaFlagInd{0x1440}, "unlock door in room 7" }, + { 0x14, 0x20, AreaFlagInd{0x1420}, "statue getting in bell in room 7 cs first part" }, + { 0x14, 0x10, AreaFlagInd{0x1410}, "statue getting in bell in room 7 cs second part" }, + { 0x14, 0x08, AreaFlagInd{0x1408}, "statue getting in bell in room 7 cs trigger" }, + { 0x14, 0x04, AreaFlagInd{0x1404}, "open gate to dominion rod in room 7 cs" }, + { 0x14, 0x02, AreaFlagInd{0x1402}, "statue spawn out of bell in room 6" }, + { 0x14, 0x01, AreaFlagInd{0x1401}, "statue spawning out of bell in room 6 cs trigger" }, + { 0x15, 0x80, AreaFlagInd{0x1580}, "statue spawning out of bell in room 6 cs part 1" }, + { 0x15, 0x40, AreaFlagInd{0x1540}, "statue getting in bell in room 6 cs trigger" }, + { 0x15, 0x20, AreaFlagInd{0x1520}, "statue getting in bell in room 6 cs" }, + { 0x15, 0x10, AreaFlagInd{0x1510}, "statue spawning out of bell in room 5 cs trigger" }, + { 0x15, 0x08, AreaFlagInd{0x1508}, "statue spawning out of bell in room 5 cs" }, + { 0x15, 0x04, AreaFlagInd{0x1504}, "statue getting in bell in room 5 cs trigger" }, + { 0x15, 0x02, AreaFlagInd{0x1502}, "statue getting in bell in room 5 cs" }, + { 0x15, 0x01, AreaFlagInd{0x1501}, "statue spawning out of bell in room 4 cs trigger" }, + { 0x16, 0x80, AreaFlagInd{0x1680}, "statue spawning out of bell in room 4 cs" }, + { 0x16, 0x40, AreaFlagInd{0x1640}, "statue getting in bell in room 4 cs trigger" }, + { 0x16, 0x20, AreaFlagInd{0x1620}, "statue getting in bell in room 4 cs" }, + { 0x16, 0x10, AreaFlagInd{0x1610}, "statue spawning out of bell in room 3 cs trigger" }, + { 0x16, 0x08, AreaFlagInd{0x1608}, "statue spawning out of bell in room 3 cs" }, + { 0x16, 0x04, AreaFlagInd{0x1604}, "statue getting in bell in room 3 cs trigger" }, + { 0x16, 0x02, AreaFlagInd{0x1602}, "statue getting in bell in room 3 cs" }, + { 0x16, 0x01, AreaFlagInd{0x1601}, "statue spawning out of bell in room 2 cs trigger" }, + { 0x17, 0x80, AreaFlagInd{0x1780}, "statue spawning out of bell in room 2 cs" }, + { 0x17, 0x40, AreaFlagInd{0x1740}, "statue getting in bell in room 2 cs trigger" }, + { 0x17, 0x20, AreaFlagInd{0x1720}, "statue getting in bell in room 2 cs" }, + { 0x17, 0x10, AreaFlagInd{0x1710}, "deactivate spawning bell in room 7" }, + { 0x17, 0x08, AreaFlagInd{0x1708}, "big door in room 1 opens" }, + { 0x17, 0x04, AreaFlagInd{0x1704}, "open big door in room 1 cs part 2 trigger" }, + { 0x17, 0x02, AreaFlagInd{0x1702}, "open big door in room 1 cs part 1 trigger" }, + { 0x17, 0x01, AreaFlagInd{0x1701}, "statue placed in slot in room 1" }, }; struct MultiByteAreaFlag { // flags treated as bool, shift left after checking bool const char* name; - uint16_t highOrderflag; - uint16_t lowOrderflag; + AreaFlagMultibit flag; std::map enumValues; }; + constexpr uint16_t AREA_FLAG_NONE = 0; inline MultiByteAreaFlag ForestTempleMultiByteFlags[] = { { "Worm Room position", - 0x0D3C, AREA_FLAG_NONE, + AreaFlagMultibit{0x0D3C}, { { 0x0, "On Totem", }, { 0x8, "North", }, @@ -3178,7 +3305,7 @@ inline const std::map _SPRIceBlockPuzzleLocations = inline MultiByteAreaFlag SPRMultiByteFlags[] = { { "Courtyard First Floor Cannon", - 0x1160, AREA_FLAG_NONE, + AreaFlagMultibit{0x1160}, { { 1, "North" }, { 0, "South" }, @@ -3188,7 +3315,7 @@ inline MultiByteAreaFlag SPRMultiByteFlags[] = { }, { "Courtyard Second Floor Cannon", - 0x1001, 0x1180, + AreaFlagMultibit{0x1001, 0x1180}, { { 3, "North East" }, { 0, "South East" }, @@ -3198,7 +3325,7 @@ inline MultiByteAreaFlag SPRMultiByteFlags[] = { }, { "Freezard Cage Room Cannon", - 0x1203, AREA_FLAG_NONE, + AreaFlagMultibit{0x1203}, { { 0, "North" }, { 2, "East" }, @@ -3208,7 +3335,7 @@ inline MultiByteAreaFlag SPRMultiByteFlags[] = { }, { "North West Room Cannon", - 0x0C0C, AREA_FLAG_NONE, + AreaFlagMultibit{0x0C0C}, { { 3, "North" }, { 0, "East" }, @@ -3218,17 +3345,17 @@ inline MultiByteAreaFlag SPRMultiByteFlags[] = { }, { "Ice Block 1 Location", - 0x0F1F, AREA_FLAG_NONE, + AreaFlagMultibit{0x0F1F}, _SPRIceBlockPuzzleLocations }, { "Ice Block 2 Location", - 0x08F8, AREA_FLAG_NONE, + AreaFlagMultibit{0x08F8}, _SPRIceBlockPuzzleLocations }, { "Ice Block 3 Location", - 0x0807, 0x09C0, + AreaFlagMultibit{0x0807, 0x09C0}, _SPRIceBlockPuzzleLocations } }; @@ -3314,47 +3441,47 @@ inline const std::map _CoOBlockPuzzle3Locations = { inline MultiByteAreaFlag CoOMultiByteFlags[] = { { "Puzzle 1 Block 1 Location", - 0x0907, 0x0A80, + AreaFlagMultibit{0x0907, 0x0A80}, _CoOBlockPuzzle1Locations }, { "Puzzle 1 Block 2 Location", - 0x0A3C, AREA_FLAG_NONE, + AreaFlagMultibit{0x0A3C}, _CoOBlockPuzzle1Locations }, { "Puzzle 1 Block 3 Location", - 0x0B0F, AREA_FLAG_NONE, + AreaFlagMultibit{0x0B0F}, _CoOBlockPuzzle1Locations }, { "Puzzle 2 Block 1 Location", - 0x08F0, AREA_FLAG_NONE, + AreaFlagMultibit{0x08F0}, _CoOBlockPuzzle2Locations }, { "Puzzle 2 Block 2 Location", - 0x080F, AREA_FLAG_NONE, + AreaFlagMultibit{0x080F}, _CoOBlockPuzzle2Locations }, { "Puzzle 2 Block 3 Location", - 0x09F0, AREA_FLAG_NONE, + AreaFlagMultibit{0x09F0}, _CoOBlockPuzzle2Locations }, { "Puzzle 3 Block 1 Location", - 0x0E7C, AREA_FLAG_NONE, + AreaFlagMultibit{0x0E7C}, _CoOBlockPuzzle3Locations }, { "Puzzle 3 Block 2 Location", - 0x0E03, 0x0FE0, + AreaFlagMultibit{0x0E03, 0x0FE0}, _CoOBlockPuzzle3Locations }, { "Puzzle 3 Block 3 Location", - 0x0F1F, AREA_FLAG_NONE, + AreaFlagMultibit{0x0F1F}, _CoOBlockPuzzle3Locations } }; @@ -3393,4 +3520,4 @@ inline std::map imguiAreaFlagLookup = { 0x1B, AreaFlagIter{ eventAreaFlagsGrotto, {} } }, }; -#endif // !DUSK_IMGUI_EVENTFLAGS_HPP \ No newline at end of file +#endif // !DUSK_IMGUI_EVENTFLAGS_HPP diff --git a/src/dusk/imgui/ImGuiSaveEditor.cpp b/src/dusk/imgui/ImGuiSaveEditor.cpp index 016bdae7e5..b08ae2860b 100644 --- a/src/dusk/imgui/ImGuiSaveEditor.cpp +++ b/src/dusk/imgui/ImGuiSaveEditor.cpp @@ -13,7 +13,6 @@ #include "d/actor/d_a_player.h" #include -#include namespace dusk { enum ItemType { @@ -1354,38 +1353,30 @@ namespace dusk { // genCommonAreaFlags(membit); } - template - concept FlagIter = requires(T t) { - ++t; - --t; - t + 1; - t < t; - { t->flagID } -> std::convertible_to; - }; - - template - concept FlagTester = requires(T t, u16 flagID) { - { t(flagID) } -> std::convertible_to; - }; - - static void sortByFlags(FlagIter auto begin, FlagIter auto end, FlagTester auto&& flagTester) { + template + requires requires(FlagIter a, FlagTester tester) { + --a; ++a; a < a; *a; + a + 1; + { tester(*a) } -> std::convertible_to; + } + static void sortByFlags(FlagIter begin, FlagIter end, FlagTester&& flagTester) { if (begin == end) return; - FlagIter auto fullEnd = end; + auto fullEnd = end; // We want to find the location of where we can swap our `On` flags to. // We're gonna put the `Off` bits first, and the `On` bits last. 0 < 1 // We can achieve this by skipping all the `On` bits at the end. // backtrack until we find a bit that is off - while (begin < --end && flagTester(end->flagID)) { + while (begin < --end && flagTester(*end)) { // move the end pointer back while we find on bits } // end should now be pointing to a bit that is off while (begin < end) { // if there's a flag that's on - if (flagTester(begin->flagID)) { + if (flagTester(*begin)) { // move it to the end std::rotate(begin, begin + 1, fullEnd); // move back the end of where we're checking @@ -1401,122 +1392,82 @@ namespace dusk { static void genAreaFlagTable(uint8_t areaIndex, dSv_memBit_c& membit) { - constexpr auto makeMask = [](uint8_t size) -> uint16_t { return (1 << size) - 1; }; - constexpr auto getByteIndexFromFlag = [](uint16_t f) -> uint8_t { return f >> 8; }; - constexpr auto getBitMaskFromFlag = [](uint16_t f) -> uint8_t { return f & 0xff; }; - constexpr auto getValueSize = [getBitMaskFromFlag](uint16_t f) -> uint8_t { - return std::popcount(getBitMaskFromFlag(f)); - }; - - constexpr auto makeEventFlag = [](uint8_t byteIndex, uint8_t bitIndices) -> uint16_t { - return (byteIndex << 8) | bitIndices; - }; - - const auto eventFlagToAreaFlag = [&](uint16_t areaFlag) -> int { - auto byteInd = getByteIndexFromFlag(areaFlag); - constexpr size_t areaIndexSize = 5; - // if we're looking at 0x580, that would be byte 5, and check if 0x80 is set on that byte - // the event flags are structured differently than area flags - // B is byte index, b is the flag mask to check - // event flags are BBBBBBBB bbbbbbbb - // for area flags, they check bitIndex, not mask, i is index - // also area uses u32 index, not byte index - // area flags are BBBiiiii - // so we need to convert from bit mask to index - // also our byte index has to become a u32 index - - // dividing byte index by sizeof(u32) gets us the u32 index - // but in big endian, the first byte is the highest order byte of the u32 - // so we skip 24 bytes for the first byte, 16 for the second, etc - // essentially (3 - (x % 4)), reversing the modulus, 0=3, 1=2 - auto bitsToSkip = 8 * ((sizeof(u32) - 1) - (byteInd % sizeof(u32))); - return ((byteInd / sizeof(u32)) << areaIndexSize) | ((std::countr_zero(areaFlag) + bitsToSkip) & makeMask(areaIndexSize)); - }; - - constexpr uint8_t validTbox = sizeof(membit.mTbox); - constexpr uint8_t validSwitch = validTbox + sizeof(membit.mSwitch); - constexpr uint8_t validItem = validSwitch + sizeof(membit.mItem); - constexpr uint16_t tboxConvert = 0; - constexpr uint16_t switchConvert = sizeof(membit.mTbox) << 8; - constexpr uint16_t itemConvert = switchConvert + (sizeof(membit.mItem) << 8); - - const auto LoadFlag = [&](uint16_t flag) -> bool { - const auto byteIndex = getByteIndexFromFlag(flag); - - if (byteIndex < validTbox) { - return membit.isTbox(eventFlagToAreaFlag(flag - tboxConvert)); - } else if (byteIndex < validSwitch) { - return membit.isSwitch(eventFlagToAreaFlag(flag - switchConvert)); - } else if (byteIndex < validItem) { - return membit.isItem(eventFlagToAreaFlag(flag - itemConvert)); + const auto LoadFlag = [&](const EventAreaFlags& flag) -> bool { + switch (flag.flag.type) { + case AreaFlagType::Item: { + return membit.isItem(flag.flag.flagID); + } break; + case AreaFlagType::Switch: { + return membit.isSwitch(flag.flag.flagID); + } break; + case AreaFlagType::Tbox: { + return membit.isTbox(flag.flag.flagID); + } break; } return false; }; - const auto SetFlag = [&](uint16_t flag, bool set) -> void { - const auto byteIndex = getByteIndexFromFlag(flag); + const auto SetFlag = [&](const AreaFlagInd& flag, bool set) -> void { if (set) { - if (byteIndex < validTbox) { - membit.onTbox(eventFlagToAreaFlag(flag - tboxConvert)); - } else if (byteIndex < validSwitch) { - membit.onSwitch(eventFlagToAreaFlag(flag - switchConvert)); - } else if (byteIndex < validItem) { - membit.onItem(eventFlagToAreaFlag(flag - itemConvert)); + switch (flag.type) { + case AreaFlagType::Item: { + membit.onItem(flag.flagID); + } break; + case AreaFlagType::Switch: { + membit.onSwitch(flag.flagID); + } break; + case AreaFlagType::Tbox: { + membit.onTbox(flag.flagID); + } break; } } else { - if (byteIndex < validTbox) { - membit.offTbox(eventFlagToAreaFlag(flag - tboxConvert)); - } else if (byteIndex < validSwitch) { - membit.offSwitch(eventFlagToAreaFlag(flag - switchConvert)); - } else if (byteIndex < validItem) { - membit.offItem(eventFlagToAreaFlag(flag - itemConvert)); + switch (flag.type) { + case AreaFlagType::Item: { + membit.offItem(flag.flagID); + } break; + case AreaFlagType::Switch: { + membit.offSwitch(flag.flagID); + } break; + case AreaFlagType::Tbox: { + membit.offTbox(flag.flagID); + } break; } } }; - const auto LoadMultiByteFlag = [&](uint16_t flag) -> uint8_t { - const auto bitInds = getBitMaskFromFlag(flag); - const auto byteIndex = getByteIndexFromFlag(flag); - - const uint16_t startingMask = std::bit_floor(bitInds); - uint8_t val = 0; - for (uint16_t bitIndexMask = startingMask; (bitInds & bitIndexMask) != 0; - bitIndexMask >>= 1) - { - val <<= 1; - if (LoadFlag(makeEventFlag(byteIndex, bitInds & bitIndexMask))) { - val |= 1; - } + const auto LoadMultiByteFlag = [&](const AreaFlagMultibit& flag) -> uint8_t { + BE(u32)* areaFlags = nullptr; + switch (flag.type) { + case AreaFlagType::Item: { + areaFlags = membit.mItem; + } break; + case AreaFlagType::Switch: { + areaFlags = membit.mSwitch; + } break; + case AreaFlagType::Tbox: { + areaFlags = membit.mTbox; + } break; } - return val; + assert(areaFlags != nullptr); + return (areaFlags[flag.index] & flag.mask) >> flag.shift; }; - const auto SetMultiByteFlag = [&](uint16_t flag, uint8_t val) -> void { - const auto bitInds = getBitMaskFromFlag(flag); - const auto byteIndex = getByteIndexFromFlag(flag); - - const uint16_t startingMask = std::bit_floor(bitInds); - uint16_t valueMask = 1 << (getValueSize(flag) - 1); - - for (uint16_t bitIndexMask = startingMask; (bitInds & bitIndexMask) != 0; - bitIndexMask >>= 1, valueMask >>= 1) - { - SetFlag(makeEventFlag(byteIndex, bitInds & bitIndexMask), (val & valueMask) != 0); + const auto SetMultiByteFlag = [&](const AreaFlagMultibit& flag, uint8_t val) -> void { + BE(u32)* areaFlags = nullptr; + switch (flag.type) { + case AreaFlagType::Item: { + areaFlags = membit.mItem; + } break; + case AreaFlagType::Switch: { + areaFlags = membit.mSwitch; + } break; + case AreaFlagType::Tbox: { + areaFlags = membit.mTbox; + } break; } - }; - const auto LoadSpreadMultiByte = [&](uint16_t high, uint16_t low) -> uint8_t { - if (low == AREA_FLAG_NONE) - return LoadMultiByteFlag(high); - return (LoadMultiByteFlag(high) << getValueSize(low)) | LoadMultiByteFlag(low); - }; - - const auto SetSpreadMultiByte = [&](uint16_t high, uint16_t low, uint8_t value) -> void { - if (low == AREA_FLAG_NONE) - return SetMultiByteFlag(high, value); - const auto lowerSize = getValueSize(low); - SetMultiByteFlag(high, value >> lowerSize); - SetMultiByteFlag(low, value & makeMask(lowerSize)); + areaFlags[flag.index] &= ~flag.mask; + areaFlags[flag.index] |= (val << flag.shift) & flag.mask; }; auto iter = imguiAreaFlagLookup.find(areaIndex); @@ -1568,7 +1519,7 @@ namespace dusk { case COLUMN_DESC: return l.description < r.description; case COLUMN_BIT: - return l.flagID < r.flagID; + return l.GetFlagID() < r.GetFlagID(); } return false; }; @@ -1597,9 +1548,9 @@ namespace dusk { ImGui::TableNextRow(); ImGui::TableNextColumn(); - bool flag = LoadFlag(e.flagID); - if (ImGui::Checkbox(fmt::format("##_unused_area_flag_{}", e.flagID).c_str(), &flag)) { - SetFlag(e.flagID, flag); + bool flag = LoadFlag(e); + if (ImGui::Checkbox(fmt::format("##_unused_area_flag_{}", e.flag.flagID).c_str(), &flag)) { + SetFlag(e.flag, flag); } ImGui::TableNextColumn(); @@ -1611,7 +1562,7 @@ namespace dusk { } for (const auto& multiByteFlag : areaFlags.multibyteFlags) { - auto flagValue = LoadSpreadMultiByte(multiByteFlag.highOrderflag, multiByteFlag.lowOrderflag); + auto flagValue = LoadMultiByteFlag(multiByteFlag.flag); const char* currentVal = "UNKNOWN"; @@ -1623,7 +1574,7 @@ namespace dusk { if (ImGui::BeginCombo(multiByteFlag.name, currentVal)) { for (const auto& [val, name] : multiByteFlag.enumValues) { if (ImGui::Selectable(name)) { - SetSpreadMultiByte(multiByteFlag.highOrderflag, multiByteFlag.lowOrderflag, val); + SetMultiByteFlag(multiByteFlag.flag, val); } } ImGui::EndCombo(); @@ -1756,7 +1707,9 @@ namespace dusk { // if we're sorting by flags, do special sort, regular sort is bad for sorting bools // it can swap values that are the same, and that causes constant reordering if (column == COLUMN_FLAG) { - const auto testEventFunc = [&event](u16 flag) -> bool { return event.isEventBit(flag); }; + const auto testEventFunc = [&event](const duskImguiEventFlagEntry& flag) -> bool { + return event.isEventBit(flag.flagID); + }; if (direction == ImGuiSortDirection_Ascending) { sortByFlags(std::begin(duskImguiEventFlags), diff --git a/src/dusk/ui/controller_config.cpp b/src/dusk/ui/controller_config.cpp index 038248d7d0..a5fe9ea7d2 100644 --- a/src/dusk/ui/controller_config.cpp +++ b/src/dusk/ui/controller_config.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -17,9 +18,17 @@ namespace dusk::ui { namespace { +bool keyboard_active(int port) { + u32 count = 0; + return PADGetKeyButtonBindings(static_cast(port), &count) != nullptr; +} + Rml::String current_controller_name(int port) { const char* name = PADGetName(port); - return name == nullptr ? "None" : name; + if (name != nullptr) { + return name; + } + return keyboard_active(port) ? "Keyboard" : "None"; } Rml::String controller_index_name(u32 index) { @@ -202,6 +211,74 @@ bool keyboard_escape_pressed() { return keys != nullptr && SDL_SCANCODE_ESCAPE < keyCount && keys[SDL_SCANCODE_ESCAPE]; } +Rml::String keyboard_key_name(s32 scancode) { + if (scancode == PAD_KEY_INVALID) { + return "Not bound"; + } + switch (scancode) { + case PAD_KEY_MOUSE_LEFT: + return "Mouse Left"; + case PAD_KEY_MOUSE_MIDDLE: + return "Mouse Middle"; + case PAD_KEY_MOUSE_RIGHT: + return "Mouse Right"; + case PAD_KEY_MOUSE_X1: + return "Mouse X1"; + case PAD_KEY_MOUSE_X2: + return "Mouse X2"; + default: + break; + } + if (scancode < 0) { + return "Unknown"; + } + const char* name = SDL_GetScancodeName(static_cast(scancode)); + if (name == nullptr || name[0] == '\0') { + return "Unknown"; + } + return name; +} + +bool keyboard_neutral() { + int keyCount = 0; + const bool* keys = SDL_GetKeyboardState(&keyCount); + if (keys != nullptr) { + for (int i = 0; i < keyCount; ++i) { + if (keys[i]) { + return false; + } + } + } + float x, y; + if (SDL_GetMouseState(&x, &y) != 0) { + return false; + } + return true; +} + +s32 keyboard_key_pressed() { + int keyCount = 0; + const bool* keys = SDL_GetKeyboardState(&keyCount); + if (keys != nullptr) { + for (int i = 1; i < keyCount; ++i) { + if (i == SDL_SCANCODE_ESCAPE) { + continue; + } + if (keys[i]) { + return static_cast(i); + } + } + } + float x, y; + const auto mouseButtons = SDL_GetMouseState(&x, &y); + for (int btn = 1; btn <= 5; ++btn) { + if (mouseButtons & (1u << (btn - 1))) { + return -(btn + 1); // maps to PAD_KEY_MOUSE_LEFT (-2), etc. + } + } + return PAD_KEY_INVALID; +} + } // namespace ControllerConfigWindow::ControllerConfigWindow() { @@ -311,23 +388,38 @@ void ControllerConfigWindow::render_page(Pane& pane, int port, Page page) { switch (page) { case Page::Controller: { - const u32 controllerCount = PADCount(); - if (controllerCount == 0) { - pane.add_text("No controllers detected"); - break; - } + pane.add_button( + { + .text = "None", + .isSelected = + [port] { return PADGetIndexForPort(port) < 0 && !keyboard_active(port); }, + }) + .on_pressed([this, port] { + mDoAud_seStartMenu(kSoundItemChange); + cancel_pending_binding(); + PADClearPort(port); + PADSetKeyboardActive(static_cast(port), FALSE); + PADSerializeMappings(); + }); pane.add_button({ - .text = "None", - .isSelected = [port] { return PADGetIndexForPort(port) < 0; }, + .text = "Keyboard", + .isSelected = [port] { return keyboard_active(port); }, }) .on_pressed([this, port] { mDoAud_seStartMenu(kSoundItemChange); cancel_pending_binding(); PADClearPort(port); + PADSetKeyboardActive(static_cast(port), TRUE); PADSerializeMappings(); }); + const u32 controllerCount = PADCount(); + if (controllerCount == 0) { + pane.add_text("No controllers detected"); + break; + } + for (u32 i = 0; i < controllerCount; ++i) { pane.add_button( { @@ -338,6 +430,7 @@ void ControllerConfigWindow::render_page(Pane& pane, int port, Page page) { .on_pressed([this, port, i] { mDoAud_seStartMenu(kSoundItemChange); cancel_pending_binding(); + PADSetKeyboardActive(static_cast(port), FALSE); PADSetPortForIndex(i, port); PADSerializeMappings(); }); @@ -345,6 +438,54 @@ void ControllerConfigWindow::render_page(Pane& pane, int port, Page page) { break; } case Page::Buttons: { + if (keyboard_active(port)) { + auto addKeyButton = [&](PADButton button) { + pane.add_select_button( + { + .key = PADGetButtonName(button), + .getValue = + [this, port, button] { + if (mPendingKeyButton == static_cast(button)) { + return pending_key_label(); + } + u32 count = 0; + PADKeyButtonBinding* bindings = + PADGetKeyButtonBindings(static_cast(port), &count); + if (bindings == nullptr) { + return Rml::String("Not bound"); + } + for (u32 i = 0; i < PAD_BUTTON_COUNT; ++i) { + if (bindings[i].padButton == button) { + return keyboard_key_name(bindings[i].scancode); + } + } + return Rml::String("Not bound"); + }, + }) + .on_pressed([this, port, button] { + cancel_pending_binding(); + mPendingPort = port; + mPendingBindingArmed = false; + mPendingKeyButton = static_cast(button); + }); + }; + + pane.add_section("Buttons"); + addKeyButton(PAD_BUTTON_A); + addKeyButton(PAD_BUTTON_B); + addKeyButton(PAD_BUTTON_X); + addKeyButton(PAD_BUTTON_Y); + addKeyButton(PAD_BUTTON_START); + addKeyButton(PAD_TRIGGER_Z); + + pane.add_section("D-Pad"); + addKeyButton(PAD_BUTTON_UP); + addKeyButton(PAD_BUTTON_DOWN); + addKeyButton(PAD_BUTTON_LEFT); + addKeyButton(PAD_BUTTON_RIGHT); + break; + } + u32 buttonCount = 0; PADButtonMapping* mappings = PADGetButtonMappings(port, &buttonCount); if (mappings == nullptr) { @@ -407,6 +548,79 @@ void ControllerConfigWindow::render_page(Pane& pane, int port, Page page) { break; } case Page::Triggers: { + if (keyboard_active(port)) { + auto addKeyButton = [&](PADButton button) { + pane.add_select_button( + { + .key = PADGetButtonName(button), + .getValue = + [this, port, button] { + if (mPendingKeyButton == static_cast(button)) { + return pending_key_label(); + } + u32 count = 0; + PADKeyButtonBinding* bindings = + PADGetKeyButtonBindings(static_cast(port), &count); + if (bindings == nullptr) { + return Rml::String("Not bound"); + } + for (u32 i = 0; i < PAD_BUTTON_COUNT; ++i) { + if (bindings[i].padButton == button) { + return keyboard_key_name(bindings[i].scancode); + } + } + return Rml::String("Not bound"); + }, + }) + .on_pressed([this, port, button] { + cancel_pending_binding(); + mPendingPort = port; + mPendingBindingArmed = false; + mPendingKeyButton = static_cast(button); + }); + }; + + auto addKeyAxis = [&](PADAxis axis) { + pane.add_select_button( + { + .key = PADGetAxisName(axis), + .getValue = + [this, port, axis] { + if (mPendingKeyAxis == static_cast(axis)) { + return pending_key_label(); + } + u32 count = 0; + PADKeyAxisBinding* bindings = + PADGetKeyAxisBindings(static_cast(port), &count); + if (bindings == nullptr) { + return Rml::String("Not bound"); + } + for (u32 i = 0; i < PAD_AXIS_COUNT; ++i) { + if (bindings[i].padAxis == axis) { + return keyboard_key_name(bindings[i].scancode); + } + } + return Rml::String("Not bound"); + }, + }) + .on_pressed([this, port, axis] { + cancel_pending_binding(); + mPendingPort = port; + mPendingBindingArmed = false; + mPendingKeyAxis = static_cast(axis); + }); + }; + + pane.add_section("Analog"); + addKeyAxis(PAD_AXIS_TRIGGER_L); + addKeyAxis(PAD_AXIS_TRIGGER_R); + + pane.add_section("Digital"); + addKeyButton(PAD_TRIGGER_L); + addKeyButton(PAD_TRIGGER_R); + break; + } + u32 axisCount = 0; PADAxisMapping* axes = PADGetAxisMappings(port, &axisCount); u32 buttonCount = 0; @@ -473,6 +687,52 @@ void ControllerConfigWindow::render_page(Pane& pane, int port, Page page) { break; } case Page::Sticks: { + if (keyboard_active(port)) { + auto addKeyAxis = [&](PADAxis axis) { + pane.add_select_button( + { + .key = PADGetAxisDirectionLabel(axis), + .getValue = + [this, port, axis] { + if (mPendingKeyAxis == static_cast(axis)) { + return pending_key_label(); + } + u32 count = 0; + PADKeyAxisBinding* bindings = + PADGetKeyAxisBindings(static_cast(port), &count); + if (bindings == nullptr) { + return Rml::String("Not bound"); + } + for (u32 i = 0; i < PAD_AXIS_COUNT; ++i) { + if (bindings[i].padAxis == axis) { + return keyboard_key_name(bindings[i].scancode); + } + } + return Rml::String("Not bound"); + }, + }) + .on_pressed([this, port, axis] { + cancel_pending_binding(); + mPendingPort = port; + mPendingBindingArmed = false; + mPendingKeyAxis = static_cast(axis); + }); + }; + + pane.add_section("Control Stick"); + addKeyAxis(PAD_AXIS_LEFT_Y_POS); + addKeyAxis(PAD_AXIS_LEFT_Y_NEG); + addKeyAxis(PAD_AXIS_LEFT_X_NEG); + addKeyAxis(PAD_AXIS_LEFT_X_POS); + + pane.add_section("C Stick"); + addKeyAxis(PAD_AXIS_RIGHT_Y_POS); + addKeyAxis(PAD_AXIS_RIGHT_Y_NEG); + addKeyAxis(PAD_AXIS_RIGHT_X_NEG); + addKeyAxis(PAD_AXIS_RIGHT_X_POS); + break; + } + u32 axisCount = 0; PADAxisMapping* axes = PADGetAxisMappings(port, &axisCount); if (axes == nullptr) { @@ -549,6 +809,21 @@ void ControllerConfigWindow::poll_pending_binding() { return; } + if (mPendingKeyButton >= 0 || mPendingKeyAxis >= 0) { + const s32 scancode = keyboard_key_pressed(); + if (scancode != PAD_KEY_INVALID) { + if (mPendingKeyButton >= 0) { + PADSetKeyButtonBinding(static_cast(mPendingPort), + {scancode, static_cast(mPendingKeyButton)}); + } else { + PADSetKeyAxisBinding(static_cast(mPendingPort), + {scancode, static_cast(mPendingKeyAxis), 0}); + } + finish_pending_key_binding(); + } + return; + } + if (mPendingButtonMapping != nullptr) { const s32 nativeButton = PADGetNativeButtonPressed(mPendingPort); if (nativeButton != -1) { @@ -590,26 +865,40 @@ void ControllerConfigWindow::finish_pending_binding(int completedPort) { } void ControllerConfigWindow::unmap_pending_binding() { - if (mPendingButtonMapping == nullptr && mPendingAxisMapping == nullptr) { + if (mPendingButtonMapping == nullptr && mPendingAxisMapping == nullptr && + mPendingKeyButton < 0 && mPendingKeyAxis < 0) + { return; } const int completedPort = mPendingPort; if (mPendingButtonMapping != nullptr) { mPendingButtonMapping->nativeButton = PAD_NATIVE_BUTTON_INVALID; - } - if (mPendingAxisMapping != nullptr) { + finish_pending_binding(completedPort); + } else if (mPendingAxisMapping != nullptr) { mPendingAxisMapping->nativeAxis = {-1, AXIS_SIGN_POSITIVE}; mPendingAxisMapping->nativeButton = -1; + finish_pending_binding(completedPort); + } else if (mPendingKeyButton >= 0) { + PADSetKeyButtonBinding(static_cast(completedPort), + {PAD_KEY_INVALID, static_cast(mPendingKeyButton)}); + finish_pending_key_binding(); + } else if (mPendingKeyAxis >= 0) { + PADSetKeyAxisBinding(static_cast(completedPort), + {PAD_KEY_INVALID, static_cast(mPendingKeyAxis), 0}); + finish_pending_key_binding(); } - finish_pending_binding(completedPort); } bool ControllerConfigWindow::capture_active() const { - return mPendingButtonMapping != nullptr || mPendingAxisMapping != nullptr; + return mPendingButtonMapping != nullptr || mPendingAxisMapping != nullptr || + mPendingKeyButton >= 0 || mPendingKeyAxis >= 0; } bool ControllerConfigWindow::pending_input_neutral() const { + if (mPendingKeyButton >= 0 || mPendingKeyAxis >= 0) { + return keyboard_neutral(); + } return input_neutral(mPendingPort); } @@ -623,16 +912,30 @@ Rml::String ControllerConfigWindow::pending_axis_label() const { void ControllerConfigWindow::cancel_pending_binding() { if (mPendingButtonMapping == nullptr && mPendingAxisMapping == nullptr && - !mSuppressNavigationUntilNeutral) + !mSuppressNavigationUntilNeutral && mPendingKeyButton < 0 && mPendingKeyAxis < 0) { return; } mPendingButtonMapping = nullptr; mPendingAxisMapping = nullptr; + mPendingKeyButton = -1; + mPendingKeyAxis = -1; mPendingPort = -1; mPendingBindingArmed = false; mSuppressNavigationUntilNeutral = false; mSuppressNavigationPort = -1; } +void ControllerConfigWindow::finish_pending_key_binding() { + mPendingKeyButton = -1; + mPendingKeyAxis = -1; + mPendingPort = -1; + mPendingBindingArmed = false; + PADSerializeMappings(); +} + +Rml::String ControllerConfigWindow::pending_key_label() const { + return mPendingBindingArmed ? "Press a key or mouse button..." : "Waiting..."; +} + } // namespace dusk::ui diff --git a/src/dusk/ui/controller_config.hpp b/src/dusk/ui/controller_config.hpp index 4bcf41ae8d..c2a037309e 100644 --- a/src/dusk/ui/controller_config.hpp +++ b/src/dusk/ui/controller_config.hpp @@ -32,6 +32,8 @@ private: Rml::String pending_button_label() const; Rml::String pending_axis_label() const; void cancel_pending_binding(); + void finish_pending_key_binding(); + Rml::String pending_key_label() const; Page mPage = Page::Controller; Pane* mRightPane = nullptr; @@ -42,6 +44,8 @@ private: int mSuppressNavigationPort = -1; PADButtonMapping* mPendingButtonMapping = nullptr; PADAxisMapping* mPendingAxisMapping = nullptr; + int mPendingKeyButton = -1; + int mPendingKeyAxis = -1; }; } // namespace dusk::ui diff --git a/src/dusk/ui/editor.cpp b/src/dusk/ui/editor.cpp index fd42409ed2..09216a3b8a 100644 --- a/src/dusk/ui/editor.cpp +++ b/src/dusk/ui/editor.cpp @@ -268,8 +268,8 @@ std::map itemMap = { {dItemNo_DUNGEON_BACK_e, {"Ooccoo Jr.", ITEMTYPE_EQUIP_e}}, {dItemNo_SWORD_e, {"Ordon Sword"}}, {dItemNo_MASTER_SWORD_e, {"Master Sword"}}, - {dItemNo_WOOD_SHIELD_e, {"Wooden Shield"}}, - {dItemNo_SHIELD_e, {"Ordon Shield"}}, + {dItemNo_WOOD_SHIELD_e, {"Ordon Shield"}}, + {dItemNo_SHIELD_e, {"Wooden Shield"}}, {dItemNo_HYLIA_SHIELD_e, {"Hylian Shield"}}, {dItemNo_TKS_LETTER_e, {"Ooccoo's Note", ITEMTYPE_EQUIP_e}}, {dItemNo_WEAR_CASUAL_e, {"Ordon Clothes"}}, diff --git a/src/dusk/ui/overlay.cpp b/src/dusk/ui/overlay.cpp index 6e401934ce..a5c0e036d2 100644 --- a/src/dusk/ui/overlay.cpp +++ b/src/dusk/ui/overlay.cpp @@ -1,11 +1,13 @@ #include "overlay.hpp" #include "aurora/lib/logging.hpp" -#include "magic_enum.hpp" - -#include - #include "dusk/achievements.h" +#include "magic_enum.hpp" +#include "window.hpp" + +#include +#include +#include namespace dusk::ui { namespace { @@ -27,6 +29,8 @@ constexpr std::array, 3> kAutoSaveLayers{{ {"center", "res/org-icon-center.png"}, }}; +constexpr auto kMenuNotificationDuration = std::chrono::milliseconds(2500); + Rml::Element* create_toast(Rml::Element* parent, const Toast& toast) { if (toast.type == "autosave") { auto* logo = append(parent, "logo"); @@ -75,6 +79,78 @@ Rml::Element* create_toast(Rml::Element* parent, const Toast& toast) { return elem; } +Rml::Element* create_controller_warning(Rml::Element* parent) { + auto* elem = append(parent, "toast"); + elem->SetClass("controller-warning", true); + + auto* heading = append(elem, "heading"); + auto* title = append(heading, "span"); + title->SetInnerRML("No controller assigned"); + auto* icon = append(heading, "icon"); + icon->SetClass("warning", true); + + auto* message = append(elem, "message"); + auto* content = append(message, "span"); + content->SetInnerRML("Configure controller port 1 in Settings."); + + return elem; +} + +SDL_Gamepad* gamepad_for_port(u32 port) noexcept { + const s32 index = PADGetIndexForPort(port); + if (index < 0) { + return nullptr; + } + return PADGetSDLGamepadForIndex(static_cast(index)); +} + +Rml::String back_button_name() { + if (auto* gamepad = gamepad_for_port(PAD_CHAN0)) { + switch (SDL_GetGamepadType(gamepad)) { + case SDL_GAMEPAD_TYPE_PS3: + return "Select"; + case SDL_GAMEPAD_TYPE_PS4: + return "Share"; + case SDL_GAMEPAD_TYPE_PS5: + return "Create"; + case SDL_GAMEPAD_TYPE_XBOX360: + return "Back"; + case SDL_GAMEPAD_TYPE_XBOXONE: + return "View"; + case SDL_GAMEPAD_TYPE_GAMECUBE: + return "R + Start"; + default: + break; + } + } + return "Back"; +} + +Rml::Element* create_menu_notification(Rml::Element* parent) { + auto* elem = append(parent, "toast"); + elem->SetClass("menu-notification", true); + + auto* message = append(elem, "message"); + auto* row = append(message, "row"); + append(row, "span")->SetInnerRML("Press F1 or"); + auto* icon = append(row, "icon"); + icon->SetClass("controller", true); + append(row, "span")->SetInnerRML(escape(back_button_name())); + append(row, "span")->SetInnerRML("to open menu"); + + return elem; +} + +void remove_element(Rml::Element*& elem) noexcept { + if (elem == nullptr) { + return; + } + if (auto* parent = elem->GetParentNode()) { + parent->RemoveChild(elem); + } + elem = nullptr; +} + } // namespace Overlay::Overlay() : Document(kDocumentSource) { @@ -86,6 +162,15 @@ Overlay::Overlay() : Document(kDocumentSource) { { mCurrentToast->SetPseudoClass("done", true); } + } else if (mControllerWarning != nullptr && + event.GetTargetElement() == mControllerWarning && + !mControllerWarning->HasAttribute("open")) + { + mControllerWarning->SetPseudoClass("done", true); + } else if (mMenuNotification != nullptr && event.GetTargetElement() == mMenuNotification && + !mMenuNotification->HasAttribute("open")) + { + mMenuNotification->SetPseudoClass("done", true); } }); } @@ -98,6 +183,50 @@ void Overlay::show() { void Overlay::update() { Document::update(); + if (mDocument == nullptr) { + return; + } + + const bool showControllerWarning = PADGetIndexForPort(PAD_CHAN0) < 0 && + PADGetKeyButtonBindings(PAD_CHAN0, nullptr) == nullptr && + dynamic_cast(top_document()) == nullptr; + if (showControllerWarning && mControllerWarning == nullptr) { + mControllerWarning = create_controller_warning(mDocument); + } else if (showControllerWarning && mControllerWarning != nullptr) { + mControllerWarning->SetAttribute("open", ""); + mControllerWarning->SetPseudoClass("opened", true); + mControllerWarning->SetPseudoClass("done", false); + } else if (!showControllerWarning && mControllerWarning != nullptr) { + if (mControllerWarning->IsPseudoClassSet("done") || + !mControllerWarning->IsPseudoClassSet("opened")) + { + remove_element(mControllerWarning); + } else { + mControllerWarning->RemoveAttribute("open"); + } + } + + if (mMenuNotification != nullptr) { + if (clock::now() >= mMenuNotificationStartTime + kMenuNotificationDuration) { + if (mMenuNotification->IsPseudoClassSet("done") || + !mMenuNotification->IsPseudoClassSet("opened")) + { + remove_element(mMenuNotification); + } else { + mMenuNotification->RemoveAttribute("open"); + } + } else { + mMenuNotification->SetAttribute("open", ""); + mMenuNotification->SetPseudoClass("opened", true); + mMenuNotification->SetPseudoClass("done", false); + } + } + if (consume_menu_notification_request()) { + if (mMenuNotification == nullptr) { + mMenuNotification = create_menu_notification(mDocument); + } + mMenuNotificationStartTime = clock::now(); + } auto& toasts = get_toasts(); if (mCurrentToast == nullptr) { @@ -123,8 +252,7 @@ void Overlay::update() { // Fallback for large gaps in time where we never actually opened it !mCurrentToast->IsPseudoClassSet("opened")) { - mCurrentToast->GetParentNode()->RemoveChild(mCurrentToast); - mCurrentToast = nullptr; + remove_element(mCurrentToast); toasts.pop_front(); } else { mCurrentToast->RemoveAttribute("open"); diff --git a/src/dusk/ui/overlay.hpp b/src/dusk/ui/overlay.hpp index 71e2e72470..6a29ca26e4 100644 --- a/src/dusk/ui/overlay.hpp +++ b/src/dusk/ui/overlay.hpp @@ -17,7 +17,10 @@ protected: bool handle_nav_command(Rml::Event& event, NavCommand cmd) override; Rml::Element* mCurrentToast = nullptr; + Rml::Element* mControllerWarning = nullptr; + Rml::Element* mMenuNotification = nullptr; clock::time_point mCurrentToastStartTime; + clock::time_point mMenuNotificationStartTime; }; } // namespace dusk::ui diff --git a/src/dusk/ui/prelaunch.cpp b/src/dusk/ui/prelaunch.cpp index 7ef7e5e66c..66e5e2f6f2 100644 --- a/src/dusk/ui/prelaunch.cpp +++ b/src/dusk/ui/prelaunch.cpp @@ -260,6 +260,7 @@ Prelaunch::Prelaunch() : Document(kDocumentSource), mRoot(mDocument->GetElementB } mDoAud_seStartMenu(kSoundPlay); + show_menu_notification(); if (getSettings().audio.menuSounds) { JAISoundHandle* handle = g_mEnvSeMgr.field_0x144.getHandle(); @@ -281,7 +282,7 @@ Prelaunch::Prelaunch() : Document(kDocumentSource), mRoot(mDocument->GetElementB }); apply_intro_animation(mMenuButtons.back()->root(), "delay-1"); - mMenuButtons.push_back(std::make_unique