implement golden wolf checks

This commit is contained in:
gymnast86
2026-04-27 04:05:36 -07:00
parent 8acdbf03bf
commit 3149f929c1
12 changed files with 600 additions and 374 deletions
+1
View File
@@ -1473,6 +1473,7 @@ set(DUSK_FILES
src/dusk/discord_presence.cpp
src/dusk/version.cpp
# Randomizer files
src/dusk/randomizer/game/flags.cpp
src/dusk/randomizer/game/flags.h
src/dusk/randomizer/game/stages.cpp
src/dusk/randomizer/game/stages.h
+130 -94
View File
@@ -14,6 +14,7 @@
#if TARGET_PC
#include "d/actor/d_a_alink.h"
#include "dusk/randomizer/game/flags.h"
#include "dusk/randomizer/game/tools.h"
#include "dusk/randomizer/game/verify_item_functions.h"
#include "dusk/randomizer/game/stages.h"
@@ -188,104 +189,126 @@ int daObjLife_c::create() {
#if TARGET_PC
if (randomizer_IsActive()) {
// Overwrite the item for this location in randomizer
u32 params = fopAcM_GetParam(this);
u8 flag = getSaveBitNo();
u8 stageIdx = getStageID();
const auto& freestandingOverrides = randomizer_GetContext().mFreestandingItemOverrides;
// If we found an override for this freestanding item
if (freestandingOverrides.contains(stageIdx) && freestandingOverrides.at(stageIdx).contains(flag)) {
// Clear the itemId and set it to out new itemId
params &= 0xFFFFFF00;
u8 overrideItem = freestandingOverrides.at(stageIdx).at(flag);
u8 newItemId = verifyProgressiveItem(overrideItem);
params |= newItemId;
fopAcM_SetParam(this, params);
u8 itemId = params & 0xFF;
u8 roomNo = fopAcM_GetRoomNo(this);
// If this is a golden wolf replacement, handle it differently
if (itemId == dItemNo_Randomizer_ENDING_BLOW_e) {
auto goldenWolfFlags = getCurrentGoldenWolfFlags(roomNo);
// Don't spawn this item if we haven't howled at the howling stone, or if we've already
// obtained the item
if ((goldenWolfFlags.howledAtStoneFlag != 0xFFFF && !dComIfGs_isEventBit(goldenWolfFlags.howledAtStoneFlag)) ||
dComIfGs_isEventBit(goldenWolfFlags.obtainedItemFlag)) {
return cPhs_ERROR_e;
}
// Store the map marker flag and obtained item flags to turn off/on later if
// the player collects the item
home.angle.z = goldenWolfFlags.mapMarkerFlag;
home.angle.x = static_cast<s16>(goldenWolfFlags.obtainedItemFlag);
// Set the overriden item id
auto& goldenWolfOverrides = randomizer_GetContext().mGoldenWolfOverrides;
itemId = verifyProgressiveItem(goldenWolfOverrides[goldenWolfFlags.obtainedItemFlag]);
} else {
u8 flag = getSaveBitNo();
u8 stageIdx = getStageID();
const auto& freestandingOverrides = randomizer_GetContext().mFreestandingItemOverrides;
// If we found an override for this freestanding item
if (freestandingOverrides.contains(stageIdx) && freestandingOverrides.at(stageIdx).contains(flag)) {
// Clear the itemId and set it to out new itemId
u8 overrideItem = freestandingOverrides.at(stageIdx).at(flag);
itemId = verifyProgressiveItem(overrideItem);
}
}
// Also adjust the height of the object depending on the item
switch (newItemId) {
case dItemNo_Randomizer_MASTER_SWORD_e:
case dItemNo_Randomizer_LIGHT_SWORD_e:
case dItemNo_Randomizer_WOOD_SHIELD_e:
case dItemNo_Randomizer_HYLIA_SHIELD_e:
case dItemNo_Randomizer_SHIELD_e:
case dItemNo_Randomizer_SPINNER_e:
{
current.pos.y += 30.f;
break;
}
case dItemNo_Randomizer_WOOD_STICK_e:
{
current.pos.y += 60.f;
break;
}
case dItemNo_Randomizer_SWORD_e:
case dItemNo_Randomizer_MIRROR_PIECE_1_e:
case dItemNo_Randomizer_MIRROR_PIECE_2_e:
case dItemNo_Randomizer_MIRROR_PIECE_3_e:
case dItemNo_Randomizer_MIRROR_PIECE_4_e:
case dItemNo_Randomizer_FUSED_SHADOW_1_e:
case dItemNo_Randomizer_FUSED_SHADOW_2_e:
case dItemNo_Randomizer_FUSED_SHADOW_3_e:
case dItemNo_Randomizer_COPY_ROD_e:
case dItemNo_Randomizer_COPY_ROD_2_e:
{
current.pos.y += 50.f;
break;
}
params &= 0xFFFFFF00;
params |= itemId;
fopAcM_SetParam(this, params);
case dItemNo_Randomizer_BOW_e:
{
current.pos.y += 55.f;
break;
}
case dItemNo_Randomizer_BOOMERANG_e:
case dItemNo_Randomizer_FISHING_ROD_1_e:
case dItemNo_Randomizer_ARROW_LV2_e:
case dItemNo_Randomizer_ARROW_LV3_e:
{
current.pos.y += 40.f;
break;
}
case dItemNo_Randomizer_FOREST_SMALL_KEY_e:
case dItemNo_Randomizer_MINES_SMALL_KEY_e:
case dItemNo_Randomizer_LAKEBED_SMALL_KEY_e:
case dItemNo_Randomizer_ARBITERS_SMALL_KEY_e:
case dItemNo_Randomizer_SNOWPEAK_SMALL_KEY_e:
case dItemNo_Randomizer_TEMPLE_OF_TIME_SMALL_KEY_e:
case dItemNo_Randomizer_CITY_SMALL_KEY_e:
case dItemNo_Randomizer_PALACE_SMALL_KEY_e:
case dItemNo_Randomizer_HYRULE_SMALL_KEY_e:
case dItemNo_Randomizer_FOREST_BOSS_KEY_e:
case dItemNo_Randomizer_LAKEBED_BOSS_KEY_e:
case dItemNo_Randomizer_ARBITERS_BOSS_KEY_e:
case dItemNo_Randomizer_TEMPLE_OF_TIME_BOSS_KEY_e:
case dItemNo_Randomizer_CITY_BOSS_KEY_e:
case dItemNo_Randomizer_PALACE_BOSS_KEY_e:
case dItemNo_Randomizer_HYRULE_BOSS_KEY_e:
case dItemNo_Randomizer_SMALL_KEY2_e:
case dItemNo_Randomizer_LV5_BOSS_KEY_e:
case dItemNo_Randomizer_CAMP_SMALL_KEY_e:
case dItemNo_Randomizer_BOSSRIDER_KEY_e:
case dItemNo_Randomizer_PACHINKO_e:
case dItemNo_Randomizer_BOMB_BAG_LV2_e:
case dItemNo_Randomizer_BOMB_BAG_LV1_e:
case dItemNo_Randomizer_BOMB_IN_BAG_e:
case dItemNo_Randomizer_NORMAL_BOMB_e:
case dItemNo_Randomizer_POU_SPIRIT_e:
{
current.pos.y += 20.f;
break;
}
// Also adjust the height of the object depending on the item
switch (itemId) {
case dItemNo_Randomizer_MASTER_SWORD_e:
case dItemNo_Randomizer_LIGHT_SWORD_e:
case dItemNo_Randomizer_WOOD_SHIELD_e:
case dItemNo_Randomizer_HYLIA_SHIELD_e:
case dItemNo_Randomizer_SHIELD_e:
case dItemNo_Randomizer_SPINNER_e:
{
current.pos.y += 30.f;
break;
}
case dItemNo_Randomizer_WOOD_STICK_e:
{
current.pos.y += 60.f;
break;
}
case dItemNo_Randomizer_SWORD_e:
case dItemNo_Randomizer_MIRROR_PIECE_1_e:
case dItemNo_Randomizer_MIRROR_PIECE_2_e:
case dItemNo_Randomizer_MIRROR_PIECE_3_e:
case dItemNo_Randomizer_MIRROR_PIECE_4_e:
case dItemNo_Randomizer_FUSED_SHADOW_1_e:
case dItemNo_Randomizer_FUSED_SHADOW_2_e:
case dItemNo_Randomizer_FUSED_SHADOW_3_e:
case dItemNo_Randomizer_COPY_ROD_e:
case dItemNo_Randomizer_COPY_ROD_2_e:
{
current.pos.y += 50.f;
break;
}
case dItemNo_Randomizer_ARMOR_e:
{
current.pos.y += 25.f;
break;
}
default:
{
break;
}
case dItemNo_Randomizer_BOW_e:
{
current.pos.y += 55.f;
break;
}
case dItemNo_Randomizer_BOOMERANG_e:
case dItemNo_Randomizer_FISHING_ROD_1_e:
case dItemNo_Randomizer_ARROW_LV2_e:
case dItemNo_Randomizer_ARROW_LV3_e:
{
current.pos.y += 40.f;
break;
}
case dItemNo_Randomizer_FOREST_SMALL_KEY_e:
case dItemNo_Randomizer_MINES_SMALL_KEY_e:
case dItemNo_Randomizer_LAKEBED_SMALL_KEY_e:
case dItemNo_Randomizer_ARBITERS_SMALL_KEY_e:
case dItemNo_Randomizer_SNOWPEAK_SMALL_KEY_e:
case dItemNo_Randomizer_TEMPLE_OF_TIME_SMALL_KEY_e:
case dItemNo_Randomizer_CITY_SMALL_KEY_e:
case dItemNo_Randomizer_PALACE_SMALL_KEY_e:
case dItemNo_Randomizer_HYRULE_SMALL_KEY_e:
case dItemNo_Randomizer_FOREST_BOSS_KEY_e:
case dItemNo_Randomizer_LAKEBED_BOSS_KEY_e:
case dItemNo_Randomizer_ARBITERS_BOSS_KEY_e:
case dItemNo_Randomizer_TEMPLE_OF_TIME_BOSS_KEY_e:
case dItemNo_Randomizer_CITY_BOSS_KEY_e:
case dItemNo_Randomizer_PALACE_BOSS_KEY_e:
case dItemNo_Randomizer_HYRULE_BOSS_KEY_e:
case dItemNo_Randomizer_SMALL_KEY2_e:
case dItemNo_Randomizer_LV5_BOSS_KEY_e:
case dItemNo_Randomizer_CAMP_SMALL_KEY_e:
case dItemNo_Randomizer_BOSSRIDER_KEY_e:
case dItemNo_Randomizer_PACHINKO_e:
case dItemNo_Randomizer_BOMB_BAG_LV2_e:
case dItemNo_Randomizer_BOMB_BAG_LV1_e:
case dItemNo_Randomizer_BOMB_IN_BAG_e:
case dItemNo_Randomizer_NORMAL_BOMB_e:
case dItemNo_Randomizer_POU_SPIRIT_e:
{
current.pos.y += 20.f;
break;
}
case dItemNo_Randomizer_ARMOR_e:
{
current.pos.y += 25.f;
break;
}
default:
{
break;
}
}
}
@@ -476,6 +499,19 @@ int daObjLife_c::actionGetDemo() {
if (savebit != 0xFF) {
fopAcM_onItem(this, savebit);
}
#if TARGET_PC
// In randomizer, turn off the map marker flag for this golden wolf replacement item
// if we're collecting it. We store the map marker flag in unused home.angle.z
// Also set the flag for having collected this golden wolf item, stored in home.angle.x
if (randomizer_IsActive()) {
if (static_cast<u16>(home.angle.z) != 0xFFFF) {
dComIfGs_offSwitch(static_cast<u16>(home.angle.z), fopAcM_GetRoomNo(this));
}
if (static_cast<u16>(home.angle.x) != 0xFFFF) {
dComIfGs_onEventBit(static_cast<u16>(home.angle.x));
}
}
#endif
if (m_itemNo == dItemNo_KAKERA_HEART_e) {
if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) {
+256 -256
View File
@@ -274,262 +274,262 @@ static void (*item_func_ptr[256])() = {
#if TARGET_PC
static void (*item_func_ptr_randomizer[256])() = {
item_func_HEART,
item_func_GREEN_RUPEE,
item_func_BLUE_RUPEE,
item_func_YELLOW_RUPEE,
item_func_RED_RUPEE,
item_func_PURPLE_RUPEE,
item_func_ORANGE_RUPEE,
item_func_SILVER_RUPEE,
item_func_S_MAGIC,
item_func_L_MAGIC,
item_func_BOMB_5,
item_func_BOMB_10,
item_func_BOMB_20,
item_func_BOMB_30,
item_func_ARROW_10,
item_func_ARROW_20,
item_func_ARROW_30,
item_func_ARROW_1,
item_func_PACHINKO_SHOT,
item_func_FOOLISH_ITEM,
item_func_ORDON_PORTAL,
item_func_SOUTH_FARON_PORTAL,
item_func_WATER_BOMB_5,
item_func_WATER_BOMB_10,
item_func_WATER_BOMB_20,
item_func_WATER_BOMB_30,
item_func_BOMB_INSECT_5,
item_func_BOMB_INSECT_10,
item_func_BOMB_INSECT_20,
item_func_BOMB_INSECT_30,
item_func_RECOVER_FAILY,
item_func_TRIPLE_HEART,
item_func_SMALL_KEY,
item_func_KAKERA_HEART,
item_func_UTUWA_HEART,
item_func_MAP,
item_func_COMPUS,
item_func_DUNGEON_EXIT,
item_func_BOSS_KEY,
item_func_DUNGEON_BACK,
item_func_SWORD,
item_func_MASTER_SWORD,
item_func_WOOD_SHIELD,
item_func_SHIELD,
item_func_HYLIA_SHIELD,
item_func_TKS_LETTER,
item_func_WEAR_CASUAL,
item_func_WEAR_KOKIRI,
item_func_ARMOR,
item_func_WEAR_ZORA,
item_func_MAGIC_LV1,
item_func_DUNGEON_EXIT_2,
item_func_WALLET_LV1,
item_func_WALLET_LV2,
item_func_WALLET_LV3,
item_func_noentry,
item_func_noentry,
item_func_UPPER_ZORAS_RIVER_PORTAL,
item_func_CASTLE_TOWN_PORTAL,
item_func_GERUDO_DESERT_PORTAL,
item_func_NORTH_FARON_PORTAL,
item_func_ZORAS_JEWEL,
item_func_HAWK_EYE,
item_func_WOOD_STICK,
item_func_BOOMERANG,
item_func_SPINNER,
item_func_IRONBALL,
item_func_BOW,
item_func_HOOKSHOT,
item_func_HVY_BOOTS,
item_func_COPY_ROD,
item_func_W_HOOKSHOT,
item_func_KANTERA,
item_func_LIGHT_SWORD,
item_func_FISHING_ROD_1,
item_func_PACHINKO,
item_func_COPY_ROD_2,
item_func_KAKARIKO_GORGE_PORTAL,
item_func_KAKARIKO_VILLAGE_PORTAL,
item_func_BOMB_BAG_LV2,
item_func_BOMB_BAG_LV1,
item_func_BOMB_IN_BAG,
item_func_DEATH_MOUNTAIN_PORTAL,
item_func_LIGHT_ARROW,
item_func_ARROW_LV1,
item_func_ARROW_LV2,
item_func_ARROW_LV3,
item_func_ZORAS_DOMAIN_PORTAL,
item_func_LURE_ROD,
item_func_BOMB_ARROW,
item_func_HAWK_ARROW,
item_func_BEE_ROD,
item_func_JEWEL_ROD,
item_func_WORM_ROD,
item_func_JEWEL_BEE_ROD,
item_func_JEWEL_WORM_ROD,
item_func_EMPTY_BOTTLE,
item_func_RED_BOTTLE,
item_func_GREEN_BOTTLE,
item_func_BLUE_BOTTLE,
item_func_MILK_BOTTLE,
item_func_HALF_MILK_BOTTLE,
item_func_OIL_BOTTLE,
item_func_WATER_BOTTLE,
item_func_OIL_BOTTLE2,
item_func_RED_BOTTLE2,
item_func_UGLY_SOUP,
item_func_HOT_SPRING,
item_func_FAIRY_BOTTLE,
item_func_HOT_SPRING2,
item_func_OIL2,
item_func_OIL,
item_func_NORMAL_BOMB,
item_func_WATER_BOMB,
item_func_POKE_BOMB,
item_func_FAIRY_DROP,
item_func_WORM,
item_func_DROP_BOTTLE,
item_func_BEE_CHILD,
item_func_CHUCHU_RARE,
item_func_CHUCHU_RED,
item_func_CHUCHU_BLUE,
item_func_CHUCHU_GREEN,
item_func_CHUCHU_YELLOW,
item_func_CHUCHU_PURPLE,
item_func_LV1_SOUP,
item_func_LV2_SOUP,
item_func_LV3_SOUP,
item_func_LETTER,
item_func_BILL,
item_func_WOOD_STATUE,
item_func_IRIAS_PENDANT,
item_func_HORSE_FLUTE,
item_func_FOREST_SMALL_KEY,
item_func_MINES_SMALL_KEY,
item_func_LAKEBED_SMALL_KEY,
item_func_ARBITERS_SMALL_KEY,
item_func_SNOWPEAK_SMALL_KEY,
item_func_TEMPLE_OF_TIME_SMALL_KEY,
item_func_CITY_SMALL_KEY,
item_func_PALACE_SMALL_KEY,
item_func_HYRULE_SMALL_KEY,
item_func_CAMP_SMALL_KEY,
item_func_LAKE_HYLIA_PORTAL,
item_func_RAFRELS_MEMO,
item_func_ASHS_SCRIBBLING,
item_func_FOREST_BOSS_KEY,
item_func_LAKEBED_BOSS_KEY,
item_func_ARBITERS_BOSS_KEY,
item_func_TEMPLE_OF_TIME_BOSS_KEY,
item_func_CITY_BOSS_KEY,
item_func_PALACE_BOSS_KEY,
item_func_HYRULE_BOSS_KEY,
item_func_FOREST_COMPASS,
item_func_MINES_COMPASS,
item_func_LAKEBED_COMPASS,
item_func_CHUCHU_YELLOW2,
item_func_OIL_BOTTLE3,
item_func_SHOP_BEE_CHILD,
item_func_CHUCHU_BLACK,
item_func_LIGHT_DROP,
item_func_DROP_CONTAINER,
item_func_DROP_CONTAINER02,
item_func_DROP_CONTAINER03,
item_func_FILLED_CONTAINER,
item_func_MIRROR_PIECE_2,
item_func_MIRROR_PIECE_3,
item_func_MIRROR_PIECE_4,
item_func_ARBITERS_COMPASS,
item_func_SNOWPEAK_COMPASS,
item_func_TEMPLE_OF_TIME_COMPASS,
item_func_CITY_COMPASS,
item_func_PALACE_COMPASS,
item_func_HYRULE_COMPASS,
item_func_MIRROR_CHAMBER_PORTAL,
item_func_SNOWPEAK_PORTAL,
item_func_SMELL_YELIA_POUCH,
item_func_SMELL_PUMPKIN,
item_func_SMELL_POH,
item_func_SMELL_FISH,
item_func_SMELL_CHILDREN,
item_func_SMELL_MEDICINE,
item_func_FOREST_MAP,
item_func_MINES_MAP,
item_func_LAKEBED_MAP,
item_func_ARBITERS_MAP,
item_func_SNOWPEAK_MAP,
item_func_TEMPLE_OF_TIME_MAP,
item_func_CITY_MAP,
item_func_PALACE_MAP,
item_func_HYRULE_MAP,
item_func_SACRED_GROVE_PORTAL,
item_func_M_BEETLE,
item_func_F_BEETLE,
item_func_M_BUTTERFLY,
item_func_F_BUTTERFLY,
item_func_M_STAG_BEETLE,
item_func_F_STAG_BEETLE,
item_func_M_GRASSHOPPER,
item_func_F_GRASSHOPPER,
item_func_M_NANAFUSHI,
item_func_F_NANAFUSHI,
item_func_M_DANGOMUSHI,
item_func_F_DANGOMUSHI,
item_func_M_MANTIS,
item_func_F_MANTIS,
item_func_M_LADYBUG,
item_func_F_LADYBUG,
item_func_M_SNAIL,
item_func_F_SNAIL,
item_func_M_DRAGONFLY,
item_func_F_DRAGONFLY,
item_func_M_ANT,
item_func_F_ANT,
item_func_M_MAYFLY,
item_func_F_MAYFLY,
item_func_FUSED_SHADOW_1,
item_func_FUSED_SHADOW_2,
item_func_FUSED_SHADOW_3,
item_func_MIRROR_PIECE_1,
item_func_noentry,
item_func_noentry,
item_func_noentry,
item_func_noentry,
item_func_POU_SPIRIT,
item_func_ENDING_BLOW,
item_func_SHIELD_ATTACK,
item_func_BACK_SLICE,
item_func_HELM_SPLITTER,
item_func_MORTAL_DRAW,
item_func_JUMP_STRIKE,
item_func_GREAT_SPIN,
item_func_ELDIN_BRIDGE_PORTAL,
item_func_ANCIENT_DOCUMENT,
item_func_AIR_LETTER,
item_func_ANCIENT_DOCUMENT2,
item_func_LV7_DUNGEON_EXIT,
item_func_LINKS_SAVINGS,
item_func_SMALL_KEY2,
item_func_POU_FIRE1,
item_func_POU_FIRE2,
item_func_POU_FIRE3,
item_func_POU_FIRE4,
item_func_BOSSRIDER_KEY,
item_func_TOMATO_PUREE,
item_func_TASTE,
item_func_LV5_BOSS_KEY,
item_func_SURFBOARD,
item_func_KANTERA2,
item_func_L2_KEY_PIECES1,
item_func_L2_KEY_PIECES2,
item_func_L2_KEY_PIECES3,
item_func_KEY_OF_CARAVAN,
item_func_LV2_BOSS_KEY,
item_func_KEY_OF_FILONE,
item_func_noentry,
/* 0x00 */ item_func_HEART,
/* 0x01 */ item_func_GREEN_RUPEE,
/* 0x02 */ item_func_BLUE_RUPEE,
/* 0x03 */ item_func_YELLOW_RUPEE,
/* 0x04 */ item_func_RED_RUPEE,
/* 0x05 */ item_func_PURPLE_RUPEE,
/* 0x06 */ item_func_ORANGE_RUPEE,
/* 0x07 */ item_func_SILVER_RUPEE,
/* 0x08 */ item_func_S_MAGIC,
/* 0x09 */ item_func_L_MAGIC,
/* 0x0A */ item_func_BOMB_5,
/* 0x0B */ item_func_BOMB_10,
/* 0x0C */ item_func_BOMB_20,
/* 0x0D */ item_func_BOMB_30,
/* 0x0E */ item_func_ARROW_10,
/* 0x0F */ item_func_ARROW_20,
/* 0x10 */ item_func_ARROW_30,
/* 0x11 */ item_func_ARROW_1,
/* 0x12 */ item_func_PACHINKO_SHOT,
/* 0x13 */ item_func_FOOLISH_ITEM,
/* 0x14 */ item_func_ORDON_PORTAL,
/* 0x15 */ item_func_SOUTH_FARON_PORTAL,
/* 0x16 */ item_func_WATER_BOMB_5,
/* 0x17 */ item_func_WATER_BOMB_10,
/* 0x18 */ item_func_WATER_BOMB_20,
/* 0x19 */ item_func_WATER_BOMB_30,
/* 0x1A */ item_func_BOMB_INSECT_5,
/* 0x1B */ item_func_BOMB_INSECT_10,
/* 0x1C */ item_func_BOMB_INSECT_20,
/* 0x1D */ item_func_BOMB_INSECT_30,
/* 0x1E */ item_func_RECOVER_FAILY,
/* 0x1F */ item_func_TRIPLE_HEART,
/* 0x20 */ item_func_SMALL_KEY,
/* 0x21 */ item_func_KAKERA_HEART,
/* 0x22 */ item_func_UTUWA_HEART,
/* 0x23 */ item_func_MAP,
/* 0x24 */ item_func_COMPUS,
/* 0x25 */ item_func_DUNGEON_EXIT,
/* 0x26 */ item_func_BOSS_KEY,
/* 0x27 */ item_func_DUNGEON_BACK,
/* 0x28 */ item_func_SWORD,
/* 0x29 */ item_func_MASTER_SWORD,
/* 0x2A */ item_func_WOOD_SHIELD,
/* 0x2B */ item_func_SHIELD,
/* 0x2C */ item_func_HYLIA_SHIELD,
/* 0x2D */ item_func_TKS_LETTER,
/* 0x2E */ item_func_WEAR_CASUAL,
/* 0x2F */ item_func_WEAR_KOKIRI,
/* 0x30 */ item_func_ARMOR,
/* 0x31 */ item_func_WEAR_ZORA,
/* 0x32 */ item_func_MAGIC_LV1,
/* 0x33 */ item_func_DUNGEON_EXIT_2,
/* 0x34 */ item_func_WALLET_LV1,
/* 0x35 */ item_func_WALLET_LV2,
/* 0x36 */ item_func_WALLET_LV3,
/* 0x37 */ item_func_noentry,
/* 0x38 */ item_func_noentry,
/* 0x39 */ item_func_UPPER_ZORAS_RIVER_PORTAL,
/* 0x3A */ item_func_CASTLE_TOWN_PORTAL,
/* 0x3B */ item_func_GERUDO_DESERT_PORTAL,
/* 0x3C */ item_func_NORTH_FARON_PORTAL,
/* 0x3D */ item_func_ZORAS_JEWEL,
/* 0x3E */ item_func_HAWK_EYE,
/* 0x3F */ item_func_WOOD_STICK,
/* 0x40 */ item_func_BOOMERANG,
/* 0x41 */ item_func_SPINNER,
/* 0x42 */ item_func_IRONBALL,
/* 0x43 */ item_func_BOW,
/* 0x44 */ item_func_HOOKSHOT,
/* 0x45 */ item_func_HVY_BOOTS,
/* 0x46 */ item_func_COPY_ROD,
/* 0x47 */ item_func_W_HOOKSHOT,
/* 0x48 */ item_func_KANTERA,
/* 0x49 */ item_func_LIGHT_SWORD,
/* 0x4A */ item_func_FISHING_ROD_1,
/* 0x4B */ item_func_PACHINKO,
/* 0x4C */ item_func_COPY_ROD_2,
/* 0x4D */ item_func_KAKARIKO_GORGE_PORTAL,
/* 0x4E */ item_func_KAKARIKO_VILLAGE_PORTAL,
/* 0x4F */ item_func_BOMB_BAG_LV2,
/* 0x50 */ item_func_BOMB_BAG_LV1,
/* 0x51 */ item_func_BOMB_IN_BAG,
/* 0x52 */ item_func_DEATH_MOUNTAIN_PORTAL,
/* 0x53 */ item_func_LIGHT_ARROW,
/* 0x54 */ item_func_ARROW_LV1,
/* 0x55 */ item_func_ARROW_LV2,
/* 0x56 */ item_func_ARROW_LV3,
/* 0x57 */ item_func_ZORAS_DOMAIN_PORTAL,
/* 0x58 */ item_func_LURE_ROD,
/* 0x59 */ item_func_BOMB_ARROW,
/* 0x5A */ item_func_HAWK_ARROW,
/* 0x5B */ item_func_BEE_ROD,
/* 0x5C */ item_func_JEWEL_ROD,
/* 0x5D */ item_func_WORM_ROD,
/* 0x5E */ item_func_JEWEL_BEE_ROD,
/* 0x5F */ item_func_JEWEL_WORM_ROD,
/* 0x60 */ item_func_EMPTY_BOTTLE,
/* 0x61 */ item_func_RED_BOTTLE,
/* 0x62 */ item_func_GREEN_BOTTLE,
/* 0x63 */ item_func_BLUE_BOTTLE,
/* 0x64 */ item_func_MILK_BOTTLE,
/* 0x65 */ item_func_HALF_MILK_BOTTLE,
/* 0x66 */ item_func_OIL_BOTTLE,
/* 0x67 */ item_func_WATER_BOTTLE,
/* 0x68 */ item_func_OIL_BOTTLE2,
/* 0x69 */ item_func_RED_BOTTLE2,
/* 0x6A */ item_func_UGLY_SOUP,
/* 0x6B */ item_func_HOT_SPRING,
/* 0x6C */ item_func_FAIRY_BOTTLE,
/* 0x6D */ item_func_HOT_SPRING2,
/* 0x6E */ item_func_OIL2,
/* 0x6F */ item_func_OIL,
/* 0x70 */ item_func_NORMAL_BOMB,
/* 0x71 */ item_func_WATER_BOMB,
/* 0x72 */ item_func_POKE_BOMB,
/* 0x73 */ item_func_FAIRY_DROP,
/* 0x74 */ item_func_WORM,
/* 0x75 */ item_func_DROP_BOTTLE,
/* 0x76 */ item_func_BEE_CHILD,
/* 0x77 */ item_func_CHUCHU_RARE,
/* 0x78 */ item_func_CHUCHU_RED,
/* 0x79 */ item_func_CHUCHU_BLUE,
/* 0x7A */ item_func_CHUCHU_GREEN,
/* 0x7B */ item_func_CHUCHU_YELLOW,
/* 0x7C */ item_func_CHUCHU_PURPLE,
/* 0x7D */ item_func_LV1_SOUP,
/* 0x7E */ item_func_LV2_SOUP,
/* 0x7F */ item_func_LV3_SOUP,
/* 0x80 */ item_func_LETTER,
/* 0x81 */ item_func_BILL,
/* 0x82 */ item_func_WOOD_STATUE,
/* 0x83 */ item_func_IRIAS_PENDANT,
/* 0x84 */ item_func_HORSE_FLUTE,
/* 0x85 */ item_func_FOREST_SMALL_KEY,
/* 0x86 */ item_func_MINES_SMALL_KEY,
/* 0x87 */ item_func_LAKEBED_SMALL_KEY,
/* 0x88 */ item_func_ARBITERS_SMALL_KEY,
/* 0x89 */ item_func_SNOWPEAK_SMALL_KEY,
/* 0x8A */ item_func_TEMPLE_OF_TIME_SMALL_KEY,
/* 0x8B */ item_func_CITY_SMALL_KEY,
/* 0x8C */ item_func_PALACE_SMALL_KEY,
/* 0x8D */ item_func_HYRULE_SMALL_KEY,
/* 0x8E */ item_func_CAMP_SMALL_KEY,
/* 0x8F */ item_func_LAKE_HYLIA_PORTAL,
/* 0x90 */ item_func_RAFRELS_MEMO,
/* 0x91 */ item_func_ASHS_SCRIBBLING,
/* 0x92 */ item_func_FOREST_BOSS_KEY,
/* 0x93 */ item_func_LAKEBED_BOSS_KEY,
/* 0x94 */ item_func_ARBITERS_BOSS_KEY,
/* 0x95 */ item_func_TEMPLE_OF_TIME_BOSS_KEY,
/* 0x96 */ item_func_CITY_BOSS_KEY,
/* 0x97 */ item_func_PALACE_BOSS_KEY,
/* 0x98 */ item_func_HYRULE_BOSS_KEY,
/* 0x99 */ item_func_FOREST_COMPASS,
/* 0x9A */ item_func_MINES_COMPASS,
/* 0x9B */ item_func_LAKEBED_COMPASS,
/* 0x9C */ item_func_CHUCHU_YELLOW2,
/* 0x9D */ item_func_OIL_BOTTLE3,
/* 0x9E */ item_func_SHOP_BEE_CHILD,
/* 0x9F */ item_func_CHUCHU_BLACK,
/* 0xA0 */ item_func_LIGHT_DROP,
/* 0xA1 */ item_func_DROP_CONTAINER,
/* 0xA2 */ item_func_DROP_CONTAINER02,
/* 0xA3 */ item_func_DROP_CONTAINER03,
/* 0xA4 */ item_func_FILLED_CONTAINER,
/* 0xA5 */ item_func_MIRROR_PIECE_2,
/* 0xA6 */ item_func_MIRROR_PIECE_3,
/* 0xA7 */ item_func_MIRROR_PIECE_4,
/* 0xA8 */ item_func_ARBITERS_COMPASS,
/* 0xA9 */ item_func_SNOWPEAK_COMPASS,
/* 0xAA */ item_func_TEMPLE_OF_TIME_COMPASS,
/* 0xAB */ item_func_CITY_COMPASS,
/* 0xAC */ item_func_PALACE_COMPASS,
/* 0xAD */ item_func_HYRULE_COMPASS,
/* 0xAE */ item_func_MIRROR_CHAMBER_PORTAL,
/* 0xAF */ item_func_SNOWPEAK_PORTAL,
/* 0xB0 */ item_func_SMELL_YELIA_POUCH,
/* 0xB1 */ item_func_SMELL_PUMPKIN,
/* 0xB2 */ item_func_SMELL_POH,
/* 0xB3 */ item_func_SMELL_FISH,
/* 0xB4 */ item_func_SMELL_CHILDREN,
/* 0xB5 */ item_func_SMELL_MEDICINE,
/* 0xB6 */ item_func_FOREST_MAP,
/* 0xB7 */ item_func_MINES_MAP,
/* 0xB8 */ item_func_LAKEBED_MAP,
/* 0xB9 */ item_func_ARBITERS_MAP,
/* 0xBA */ item_func_SNOWPEAK_MAP,
/* 0xBB */ item_func_TEMPLE_OF_TIME_MAP,
/* 0xBC */ item_func_CITY_MAP,
/* 0xBD */ item_func_PALACE_MAP,
/* 0xBE */ item_func_HYRULE_MAP,
/* 0xBF */ item_func_SACRED_GROVE_PORTAL,
/* 0xC0 */ item_func_M_BEETLE,
/* 0xC1 */ item_func_F_BEETLE,
/* 0xC2 */ item_func_M_BUTTERFLY,
/* 0xC3 */ item_func_F_BUTTERFLY,
/* 0xC4 */ item_func_M_STAG_BEETLE,
/* 0xC5 */ item_func_F_STAG_BEETLE,
/* 0xC6 */ item_func_M_GRASSHOPPER,
/* 0xC7 */ item_func_F_GRASSHOPPER,
/* 0xC8 */ item_func_M_NANAFUSHI,
/* 0xC9 */ item_func_F_NANAFUSHI,
/* 0xCA */ item_func_M_DANGOMUSHI,
/* 0xCB */ item_func_F_DANGOMUSHI,
/* 0xCC */ item_func_M_MANTIS,
/* 0xCD */ item_func_F_MANTIS,
/* 0xCE */ item_func_M_LADYBUG,
/* 0xCF */ item_func_F_LADYBUG,
/* 0xD0 */ item_func_M_SNAIL,
/* 0xD1 */ item_func_F_SNAIL,
/* 0xD2 */ item_func_M_DRAGONFLY,
/* 0xD3 */ item_func_F_DRAGONFLY,
/* 0xD4 */ item_func_M_ANT,
/* 0xD5 */ item_func_F_ANT,
/* 0xD6 */ item_func_M_MAYFLY,
/* 0xD7 */ item_func_F_MAYFLY,
/* 0xD8 */ item_func_FUSED_SHADOW_1,
/* 0xD9 */ item_func_FUSED_SHADOW_2,
/* 0xDA */ item_func_FUSED_SHADOW_3,
/* 0xDB */ item_func_MIRROR_PIECE_1,
/* 0xDC */ item_func_noentry,
/* 0xDD */ item_func_noentry,
/* 0xDE */ item_func_noentry,
/* 0xDF */ item_func_noentry,
/* 0xE0 */ item_func_POU_SPIRIT,
/* 0xE1 */ item_func_ENDING_BLOW,
/* 0xE2 */ item_func_SHIELD_ATTACK,
/* 0xE3 */ item_func_BACK_SLICE,
/* 0xE4 */ item_func_HELM_SPLITTER,
/* 0xE5 */ item_func_MORTAL_DRAW,
/* 0xE6 */ item_func_JUMP_STRIKE,
/* 0xE7 */ item_func_GREAT_SPIN,
/* 0xE8 */ item_func_ELDIN_BRIDGE_PORTAL,
/* 0xE9 */ item_func_ANCIENT_DOCUMENT,
/* 0xEA */ item_func_AIR_LETTER,
/* 0xEB */ item_func_ANCIENT_DOCUMENT2,
/* 0xEC */ item_func_LV7_DUNGEON_EXIT,
/* 0xED */ item_func_LINKS_SAVINGS,
/* 0xEE */ item_func_SMALL_KEY2,
/* 0xEF */ item_func_POU_FIRE1,
/* 0xF0 */ item_func_POU_FIRE2,
/* 0xF1 */ item_func_POU_FIRE3,
/* 0xF2 */ item_func_POU_FIRE4,
/* 0xF3 */ item_func_BOSSRIDER_KEY,
/* 0xF4 */ item_func_TOMATO_PUREE,
/* 0xF5 */ item_func_TASTE,
/* 0xF6 */ item_func_LV5_BOSS_KEY,
/* 0xF7 */ item_func_SURFBOARD,
/* 0xF8 */ item_func_KANTERA2,
/* 0xF9 */ item_func_L2_KEY_PIECES1,
/* 0xFA */ item_func_L2_KEY_PIECES2,
/* 0xFB */ item_func_L2_KEY_PIECES3,
/* 0xFC */ item_func_KEY_OF_CARAVAN,
/* 0xFD */ item_func_LV2_BOSS_KEY,
/* 0xFE */ item_func_KEY_OF_FILONE,
/* 0xFF */ item_func_noentry,
};
#endif
+25
View File
@@ -0,0 +1,25 @@
#include "flags.h"
#include "stages.h"
#include "tools.h"
goldenWolfFlags getCurrentGoldenWolfFlags(u8 roomNo) {
switch (getStageID()) {
case Ordon_Spring:
return {0x41, HOWLED_AT_DEATH_MOUNTAIN_STONE, GOT_SKILL_FROM_ORDON_WOLF};
case Faron_Woods:
return {0xFF, 0xFFFF, 0x3C10}; // Custom flag for rando
case Kakariko_Graveyard:
return {0x79, HOWLED_AT_SNOWPEAK_STONE, GOT_SKILL_FROM_GRAVEYARD_WOLF};
case Outside_Castle_Town:
if (roomNo == 8) {
return {0x29, HOWLED_AT_UPPER_ZORAS_RIVER_STONE, GOT_SKILL_FROM_WEST_CT_WOLF};
}
return {0x2A, HOWLED_AT_SACRED_GROVE_OUTSIDE_STONE, GOT_SKILL_FROM_SOUTH_CT_FIELD_WOLF};
case Castle_Town:
return {0x32, HOWLED_AT_HIDDEN_VILLAGE_STONE, GOT_SKILL_FROM_BARRIER_WOLF};
case Gerudo_Desert:
return {0x32, HOWLED_AT_LAKE_HYLIA_STONE, GOT_SKILL_FROM_BULBLIN_CAMP_WOLF};
default:
return {0xFF, 0xFFFF, 0xFFFF};
}
}
+9 -1
View File
@@ -398,7 +398,7 @@ enum EventFlags
TALKED_TO_YETA_AFTER_WINNING_RACE_AGAINST_YETO = 0x3B20,
WON_SNOWBOARD_RACE_AGAINST_YETO = 0x3B40,
GOT_CORAL_EARRING_FROM_RALIS = 0x3B80,
GOT_SKILL_FROM_BULBLIN_CAMP_WOLF = 0x3C01,
GOT_SKILL_FROM_BULBLIN_CAMP_WOLF = 0x3C01,
GOT_SKILL_FROM_SOUTH_CT_FIELD_WOLF = 0x3C02,
GOT_SKILL_FROM_WEST_CT_WOLF = 0x3C04,
GOT_SKILL_FROM_ORDON_WOLF = 0x3C08,
@@ -616,3 +616,11 @@ enum EventFlags
TALKED_TO_COLIN_ORDON_DAY_1 = 0x6280,
HENA_BEAT_ROLLGOAL_8_8 = 0x6302
};
struct goldenWolfFlags {
u8 mapMarkerFlag{};
u16 howledAtStoneFlag{};
u16 obtainedItemFlag{};
};
goldenWolfFlags getCurrentGoldenWolfFlags(u8 roomNo);
@@ -67,6 +67,9 @@ std::optional<std::string> RandomizerContext::WriteToFile() {
const std::unordered_map<u16, u16> u16SkyCharacterOverrides(this->mSkyCharacterOverrides.begin(), this->mSkyCharacterOverrides.end());
out["mSkyCharacterOverrides"] = u16SkyCharacterOverrides;
const std::unordered_map<u16, u16> u16GoldenWolfOverrides(this->mGoldenWolfOverrides.begin(), this->mGoldenWolfOverrides.end());
out["mGoldenWolfOverrides"] = u16GoldenWolfOverrides;
out["mItemLocations"] = this->mItemLocations;
out["mStartHour"] = static_cast<u16>(this->mStartHour);
@@ -172,6 +175,13 @@ std::optional<std::string> RandomizerContext::LoadFromHash(const std::string& ha
this->mSkyCharacterOverrides[key] = itemId;
}
// Golden Wolves
for (const auto& goldenWolfNode : in["mGoldenWolfOverrides"]) {
u16 key = goldenWolfNode.first.as<u16>();
u8 itemId = goldenWolfNode.second.as<u8>();
this->mGoldenWolfOverrides[key] = itemId;
}
// Items we call by location name
for (const auto& locationNode : in["mItemLocations"]) {
const auto& locationName = locationNode.first.as<std::string>();
@@ -624,6 +634,14 @@ void GenerateAndWriteSeed(std::string& generationStatusMsg) {
randoData.mSkyCharacterOverrides[key] = itemId;
}
// Golden Wolves
// Keyed by u16 of the event flag for obtaining the golden wolf item
if (location->HasCategories("Golden Wolf")) {
u16 flag = metaData[0]["Flag"].as<u16>();
u8 itemId = location->GetCurrentItem()->GetID();
randoData.mGoldenWolfOverrides[flag] = itemId;
}
// Items that we lookup just by calling their location name
if (location->HasCategories("Location Name Lookup")) {
const auto& locationName = metaData.as<std::string>();
@@ -833,4 +851,4 @@ void GenerateAndWriteSeed(std::string& generationStatusMsg) {
}
generationStatusMsg = fmt::format("Seed generated! Hash: {}", randoData.mHash);
}
}
@@ -33,6 +33,7 @@ public:
std::unordered_map<u8, std::unordered_map<u8, u8>> mFreestandingItemOverrides{};
std::unordered_map<u8, u8> mBugRewardOverrides{};
std::unordered_map<u16, u8> mSkyCharacterOverrides{};
std::unordered_map<u16, u8> mGoldenWolfOverrides{};
std::unordered_map<std::string, int> mItemLocations{};
u8 mStartHour{0};
u8 mMapBits{};
@@ -4,6 +4,24 @@
ACTR: # Objects which have the ACTR dzx type
# Faron Woods
F_SP108:
# Room 6 - North Faron Woods
6:
# Spawn Item for Golden Wolf in North Faron Woods layer 3
- name: htPiece
parameters: 0xFFFFFFE1
position:
x: -36699.4375
y: 428.600311279297
z: -23663.64453125
angle:
x: 0x0000
y: 0x0000
z: 0x00FF
layers:
- 3
F_SP115: # Lake Hylia
0: # Room 0 - Main Lake
# Spawn Auru on layers 1 & 3
@@ -111,6 +111,28 @@ F_SP103:
layers:
- 0
# Ordon Spring
F_SP104:
# Room 1 - Main Spring
1:
# Golden Wolf in Ordon Spring
- name: GWolf
parameters: 0x0E4102FF
position:
x: -1855.69543457031
y: 311.160461425781
z: -8084.61572265625
angle:
x: 0x0BD1
y: 0x8000
z: 0x00FF
patch:
# Turn the golden wolf into a htPiece actor with the hidden skill item
name: htPiece
parameters: 0xFFFFFFE1
layers:
- 2
# Kakariko Graveyard
F_SP111:
# Room 0 - Main graveyard
@@ -135,6 +157,25 @@ F_SP111:
- 2
- 3
# Golden Wolf in Kakariko Graveyard
- name: GWolf
parameters: 0x037906FF
position:
x: 17575.34375
y: 500.0
z: -51.3761901855469
angle:
x: 0x0BD1
y: 0xC000
z: 0x00FF
patch:
# Turn the golden wolf into a htPiece actor with the hidden skill item
name: htPiece
parameters: 0xFFFFFFE1
layers:
- 2
- 3
# Zora's Domain
F_SP113:
# Room 1 - Main Zora's Domain Area
@@ -183,6 +224,28 @@ F_SP115:
- 3
- 4
# Castle Town
F_SP116:
# Room 1 - North Castle Town
1:
# Golden Wolf in North Castle Town
- name: GWolf
parameters: 0x013207FF
position:
x: 0.0
y: 800.0
z: -9500.0
angle:
x: 0x0BD1
y: 0x0000
z: 0x00FF
patch:
# Turn the golden wolf into a htPiece actor with the hidden skill item
name: htPiece
parameters: 0xFFFFFFE1
layers:
- 1
# Sacred Grove
F_SP117:
# Room 1 - Pedestal of Time
@@ -542,6 +605,28 @@ F_SP122:
- 0
- 6
# Golden Wolf Outside Castle Town West
- name: GWolf
parameters: 0x042903FF
position:
x: -68310.15625
y: -1050.0
z: 5925.4560546875
angle:
x: 0x0BD1
y: 0xC16D
z: 0x00FF
patch:
# Turn the golden wolf into a htPiece actor with the hidden skill item
name: htPiece
parameters: 0xFFFFFFE1
layers:
- 0
- 4
- 6
- 13
- 14
# Room 16 - Outside South Castle Town
16:
# Male Ladybug
@@ -586,6 +671,28 @@ F_SP122:
- 1
- 6
# Golden Wolf Outside Castle Town South
- name: GWolf
parameters: 0x022A04FF
position:
x: -55927.09375
y: -6100.0
z: 25315.892578125
angle:
x: 0x0BD1
y: 0xE9F5
z: 0x00FF
patch:
# Turn the golden wolf into a htPiece actor with the hidden skill item
name: htPiece
parameters: 0xFFFFFFE1
layers:
- 0
- 4
- 6
- 13
- 14
# Gerudo Desert
F_SP124:
# Room 0 - Main Desert
@@ -626,6 +733,24 @@ F_SP124:
layers:
- 0
# Golden Wolf in Desert
- name: GWolf
parameters: 0x0B3205FF
position:
x: 1112.08215332031
y: -162.940002441406
z: 12659.6689453125
angle:
x: 0x0BD1
y: 0x0000
z: 0x00FF
patch:
# Turn the golden wolf into a htPiece actor with the hidden skill item
name: htPiece
parameters: 0xFFFFFFE1
layers:
- 0
# Upper Zora's River
F_SP126:
# Room 0 - Main area
@@ -272,15 +272,14 @@
- Tbox ID: 7
Stage: D_SB05
# TODO
- Name: Ordon Spring Golden Wolf
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Ordona Province
Metadata:
- None
- Flag: 0x3C08
- Name: Ordon Spring Warp Portal
Original Item: Ordon Spring Portal
@@ -582,15 +581,14 @@
Metadata:
- None
# TODO
- Name: Faron Woods Golden Wolf
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Faron Woods
Metadata:
- None
- Flag: 0x3C10
- Name: North Faron Woods Deku Baba Chest
Original Item: Yellow Rupee
@@ -1452,15 +1450,14 @@
Metadata:
- None
# TODO
- Name: Kakariko Graveyard Golden Wolf
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Kakariko Graveyard
Metadata:
- None
- Flag: 0x3D80
- Name: Kakariko Graveyard Open Poe
Original Item: Poe Soul
@@ -2188,15 +2185,14 @@
- Tbox ID: 0
Stage: D_SB05
# TODO
- Name: West Hyrule Field Golden Wolf
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Hyrule Field - Lanayru Province
Metadata:
- None
- Flag: 0x3C04
- Name: Hyrule Field Amphitheater Owl Statue Chest
Original Item: Orange Rupee
@@ -2288,10 +2284,10 @@
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Castle Town
Metadata:
- None
- Flag: 0x3D40
- Name: Doctors Office Balcony Chest
Original Item: Red Rupee
@@ -2686,15 +2682,14 @@
- Tbox ID: 1
Stage: D_SB09
# TODO
- Name: Outside South Castle Town Golden Wolf
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Hyrule Field - Lanayru Province
Metadata:
- None
- Flag: 0x3C02
- Name: Outside South Castle Town Double Clawshot Chasm Chest
Original Item: Orange Rupee
@@ -4337,15 +4332,14 @@
- Tbox ID: 13
Stage: F_SP124
# TODO
- Name: Gerudo Desert Golden Wolf
Original Item: Progressive Hidden Skill
Categories:
- Overworld
- Hidden Skill
- Golden Wolf
- Gerudo Desert
Metadata:
- None
- Flag: 0x3C01
- Name: Outside Bulblin Camp Poe
Original Item: Poe Soul
@@ -186,7 +186,7 @@
Kakariko Graveyard Male Ant: Nothing
Kakariko Graveyard Grave Poe: Can_Use_Senses and Night
Kakariko Graveyard Open Poe: Can_Use_Senses and Night
Kakariko Graveyard Golden Wolf: "'Howl_at_Snowpeak_Mountain_Howling_Stone'"
Kakariko Graveyard Golden Wolf: Can_Complete_Eldin_Twilight and 'Howl_at_Snowpeak_Mountain_Howling_Stone'
Kakariko Graveyard Twilit Insect: Can_Defeat_Eldin_Twilit_Insect
Exits:
Kakariko Graveyard Pond: "'Can_Follow_Rutella'"
@@ -231,7 +231,7 @@
Locations:
North Faron Warp Portal: Can_Complete_Prologue
North Faron Woods Deku Baba Chest: Nothing
Faron Woods Golden Wolf: Nothing
Faron Woods Golden Wolf: Can_Complete_Faron_Twilight
North Faron Woods Twilit Insect 1: Can_Defeat_Faron_Twilit_Insect
North Faron Woods Twilit Insect 2: Can_Defeat_Faron_Twilit_Insect
Exits: