mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-19 21:03:42 -07:00
logic
This commit is contained in:
parent
2fce4ab164
commit
15f649f85f
27 changed files with 111 additions and 111 deletions
|
@ -19,8 +19,8 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_PERIMETER] = Region("Bottom of the Well Perimeter", SCENE_BOTTOM_OF_THE_WELL, {
|
||||
//Events
|
||||
EventAccess(&logic->StickPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->StickPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->LoweredWaterInsideBotw, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
}, {
|
||||
//Locations
|
||||
|
|
|
@ -91,7 +91,7 @@ void RegionTable_Init_DekuTree() {
|
|||
//Exits
|
||||
Entrance(RR_DEKU_TREE_LOBBY, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_LOWER, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return logic->IsAdult || ctx->GetTrickOption(RT_DEKU_B1_SKIP) || HasAccessTo(RR_DEKU_TREE_BASEMENT_UPPER);}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return logic->IsAdult || ctx->GetTrickOption(RT_DEKU_B1_SKIP) || logic->PushedDekuBasementBlock;}),
|
||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}),
|
||||
});
|
||||
|
||||
|
@ -120,7 +120,7 @@ void RegionTable_Init_DekuTree() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return logic->IsAdult || logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_TORCH_ROOM] = Region("Deku Tree Basement Torch Room", SCENE_DEKU_TREE, {
|
||||
|
@ -162,8 +162,9 @@ void RegionTable_Init_DekuTree() {
|
|||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_UPPER] = Region("Deku Tree Basement Upper", SCENE_DEKU_TREE, {
|
||||
//Events
|
||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
||||
EventAccess(&logic->PushedDekuBasementBlock, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}),
|
||||
|
@ -403,7 +404,7 @@ void RegionTable_Init_DekuTree() {
|
|||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_LEDGE] = Region("Deku Tree MQ Basement Ledge", SCENE_DEKU_TREE, {
|
||||
//Events
|
||||
EventAccess(&logic->PushedDekuBasementBlock, []{return true;}),
|
||||
EventAccess(&logic->PushedDekuBasementBlock, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()),
|
||||
|
@ -414,9 +415,8 @@ void RegionTable_Init_DekuTree() {
|
|||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->IsChild;}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}),
|
||||
//If strength 0 is shuffled, add hovers or block push to the stick check
|
||||
//recoiling to skip swim is possible, but would be a trick
|
||||
Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasFireSource() || (/*logic->PushedDekuBasementBlock && */logic->CanUse(RG_STICKS));}) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasFireSource() || ((logic->PushedDekuBasementBlock || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_STICKS));}) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] = Region("Deku Tree MQ Outside Boss Room", SCENE_DEKU_TREE, {}, {
|
||||
|
|
|
@ -62,8 +62,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||
//Shield seems to be in logic to drop a pot on their head as they hit you to blow up the wall
|
||||
Entrance(RR_DODONGOS_CAVERN_SE_ROOM, []{return Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return logic->CanBreakMudWalls() || logic->CanAttack() || (logic->TakeDamage() && logic->CanShield());});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_SE_ROOM, []{return Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return logic->CanBreakMudWalls() || logic->CanAttack() || (logic->TakeDamage() && logic->CanShield() && logic->HasItem(RG_POWER_BRACELET));});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_SE_ROOM] = Region("Dodongos Cavern SE Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -146,13 +146,14 @@ void RegionTable_Init_DodongosCavern() {
|
|||
areaTable[RR_DODONGOS_CAVERN_ARMOS_ROOM] = Region("Dodongos Cavern Armos Room", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
// TODO split into 2 areas, need adult or power bracelet to reach lower area by bomb chest
|
||||
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Region("Dodongos Cavern Bomb Room Lower", SCENE_DODONGOS_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, true),
|
||||
LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, true),
|
||||
LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_BLADE_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
|
@ -228,7 +229,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Region("Dodongos Cavern Boss Region", SCENE_DODONGOS_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Location
|
||||
LOCATION(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, logic->CanCutShrubs()),
|
||||
|
@ -381,7 +382,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->TakeDamage();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, []{return logic->HasFireSourceWithTorch();}),//torch checks here need strength 0 with sticks when that is implemented
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, []{return logic->HasFireSource() || (logic->CanUse(RG_STICKS) && logic->HasItem(RG_POWER_BRACELET));}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->HasFireSourceWithTorch();});}), //Includes an implied CanPass(RE_BIG_SKULLTULA)
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return ((logic->IsAdult /*or bunny hood jump*/) && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanUse(RG_STICKS) && logic->HasItem(RG_GORONS_BRACELET);}), //Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here
|
||||
|
@ -394,7 +395,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return (logic->HasFireSource() && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanBreakMudWalls();}), //Requires stregnth 0, If you can somehow warp into this room, add logic->CanPassEnemy(RE_BIG_SKULLTULA)
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return (logic->HasItem(RG_POWER_BRACELET) || logic->CanUse(RG_HOVER_BOOTS)) && ((logic->HasFireSource() && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanBreakMudWalls());}), //If you can somehow warp into this room, add logic->CanPassEnemy(RE_BIG_SKULLTULA)
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM] = Region("Dodongos Cavern MQ Larvae Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -521,9 +522,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
//using pots to get past the fire is in default logic. if stregnth 0 gets added, this will need to be:
|
||||
//stregnth 0 || explosives, or projectiles if str0 isn't needed to pull graves (it's a narrow shot though, may be trick worthy)
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return logic->HasItem(RG_POWER_BRACELET) || logic->HasExplosives();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->IsAdult;}),
|
||||
});
|
||||
|
||||
|
@ -536,13 +535,13 @@ void RegionTable_Init_DodongosCavern() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return logic->CanAttack();}),
|
||||
//There's a trick N64 rolls into the child eyes trick for using armos blow up the bomb flowers when dieing, which would be killing an armos
|
||||
//There's a trick N64 rolls into the child eyes trick for using armos blow up the bomb flowers when dying, which would be killing an armos
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return Here(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return logic->CanDetonateBombFlowers();}) || Here(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->CanAttack();});}),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE] = Region("Dodongos Cavern MQ BossArea", SCENE_DODONGOS_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) || logic->HasItem(RG_GORONS_BRACELET) || //even if you somehow warp to BACK_BEHIND_FIRE, if you can kill the skull at range, you can get to BEHIND_MOUTH
|
||||
|
@ -553,7 +552,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}), //if strength 0 prevents grave pulls, add it here
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
|
|
@ -27,7 +27,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM] = Region("Fire Temple Near Boss Room", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
EventAccess(&logic->FairyPot, []{return (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_CHEST, true),
|
||||
|
@ -387,7 +387,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM] = Region("Fire Temple MQ Iron Knuckle Room", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
|
@ -568,7 +568,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||
//Assumes maze access
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()),
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasItem(RG_POWER_BRACELET) && logic->HasExplosives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||
|
@ -614,7 +614,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM] = Region("Fire Temple MQ Narrow Path Room", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, logic->CanBreakPots()),
|
||||
|
|
|
@ -64,7 +64,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_LOWER_STALFOS] = Region("Forest Temple Lower Stalfos", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
||||
|
@ -274,7 +274,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_GREEN_POE_ROOM] = Region("Forest Temple Green Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ForestTempleAmy, []{return logic->CanUse(RG_FAIRY_BOW);}),
|
||||
EventAccess(&logic->ForestTempleAmy, []{return logic->CanUse(RG_FAIRY_BOW) && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_GREEN_POE_POT_1, logic->CanBreakPots()),
|
||||
|
@ -339,7 +339,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM] = Region("Forest Temple MQ Wolfos Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}),
|
||||
}, {
|
||||
//Locations
|
||||
|
|
|
@ -366,7 +366,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Spirit Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, logic->CanBreakPots()),
|
||||
|
|
|
@ -32,8 +32,8 @@ void RegionTable_Init_IceCavern() {
|
|||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_MAP_CHEST, logic->BlueFire() && logic->IsAdult),
|
||||
LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_IRON_BOOTS_CHEST, logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS)),
|
||||
LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS) && logic->IsAdult),
|
||||
LOCATION(RC_ICE_CAVERN_IRON_BOOTS_CHEST, logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS) && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS) && logic->IsAdult && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, logic->HookshotOrBoomerang()),
|
||||
LOCATION(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, logic->BlueFire() && logic->HookshotOrBoomerang()),
|
||||
|
@ -43,16 +43,16 @@ void RegionTable_Init_IceCavern() {
|
|||
LOCATION(RC_ICE_CAVERN_SPINNING_BLADE_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_ICE_CAVERN_SPINNING_BLADE_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_ICE_CAVERN_SPINNING_BLADE_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_ICE_CAVERN_NEAR_END_POT_1, logic->CanBreakPots() && logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_NEAR_END_POT_2, logic->CanBreakPots() && logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_NEAR_END_POT_1, logic->CanBreakPots() && logic->BlueFire() && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_ICE_CAVERN_NEAR_END_POT_2, logic->CanBreakPots() && logic->BlueFire() && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_ICE_CAVERN_FROZEN_POT_1, logic->CanBreakPots() && logic->BlueFire() && logic->IsAdult),
|
||||
LOCATION(RC_ICE_CAVERN_LOBBY_RUPEE, logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, logic->IsAdult),
|
||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, logic->IsAdult),
|
||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, logic->IsAdult),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)) && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)) && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)) && logic->HasItem(RG_POWER_BRACELET)),
|
||||
}, {});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -71,7 +71,7 @@ void RegionTable_Init_IceCavern() {
|
|||
|
||||
areaTable[RR_ICE_CAVERN_MQ_HUB] = Region("Ice Cavern MQ Hub", SCENE_ICE_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, logic->CanBreakPots()),
|
||||
|
|
|
@ -42,14 +42,14 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
Entrance(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return logic->JabuWestTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return logic->JabuEastTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->JabuNorthTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return (logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS))) && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room
|
||||
areaTable[RR_JABU_JABUS_BELLY_B1_NORTH] = Region("Jabu Jabus Belly B1 North", SCENE_JABU_JABU, {
|
||||
//Events
|
||||
EventAccess(&logic->JabuRutoIn1F, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK));}),
|
||||
EventAccess(&logic->JabuRutoIn1F, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)) && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK) && logic->CanBreakPots());}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, logic->HookshotOrBoomerang()),
|
||||
|
@ -70,7 +70,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
|
||||
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE] = Region("Jabu Jabus Belly Water Switch Room Ledge", SCENE_JABU_JABU, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
//this is the logic for climbing back and forth to use the pots to kill the skull... or killing the skull before climbing to grab the token
|
||||
|
@ -133,8 +133,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
|
||||
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", SCENE_JABU_JABU, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, logic->CanBreakPots()),
|
||||
|
@ -168,7 +168,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_BEGINNING] = Region("Jabu Jabus Belly MQ Beginning", SCENE_JABU_JABU, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, logic->BlastOrSmash()),
|
||||
|
@ -232,10 +232,10 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, []{return logic->JabuNorthTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->JabuWestTentacle && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->JabuWestTentacle && logic->HasItem(RG_POWER_BRACELET) && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM] = Region("Jabu Jabus Belly MQ Water Switch Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -319,7 +319,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
//you take both fall damage and tentacle damage, unless the tentacle is down. need better damage logic
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->TakeDamage() && Here(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
||||
});
|
||||
|
@ -335,7 +335,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_EAST_ROOM] = Region("Jabu Jabus Belly MQ Boss Region", SCENE_JABU_JABU, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
|
|
|
@ -18,7 +18,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
|
||||
areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", SCENE_SHADOW_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST, logic->CanJumpslashExceptHammer()),
|
||||
|
@ -37,10 +37,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Region("Shadow Temple First Beamos", SCENE_SHADOW_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}), //This fairy pot is only on 3DS
|
||||
}, {
|
||||
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Region("Shadow Temple First Beamos", SCENE_SHADOW_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslashExceptHammer()),
|
||||
LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)),
|
||||
|
@ -304,7 +301,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM] = Region("Shadow Temple MQ B4 Gibdo Room", SCENE_SHADOW_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, logic->CanKillEnemy(RE_GIBDO)),
|
||||
|
|
|
@ -118,7 +118,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
areaTable[RR_WATER_TEMPLE_BOSS_KEY_ROOM] = Region("Water Temple Boss Key Room", SCENE_WATER_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_WATER_TEMPLE_BOSS_KEY_CHEST, true),
|
||||
|
@ -269,7 +269,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
areaTable[RR_WATER_TEMPLE_PRE_BOSS_ROOM] = Region("Water Temple Pre Boss Room", SCENE_WATER_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, logic->CanBreakPots()),
|
||||
|
@ -572,8 +572,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
//also includes the suns fairy in the middle
|
||||
areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS] = Region("Water Temple MQ Stalfos Pit Pots", SCENE_WATER_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, logic->CanBreakPots()),
|
||||
|
@ -603,7 +603,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK] = Region("Water Temple MQ After Dark Link", SCENE_WATER_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, logic->CanBreakPots()),
|
||||
|
@ -625,7 +625,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_RIVER_POTS] = Region("Water Temple MQ River Pots", SCENE_WATER_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_RIVER_POT_1, logic->CanBreakPots()),
|
||||
|
|
|
@ -20,7 +20,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}),
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
EventAccess(&logic->BugRock, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_HC_MALON_EGG, true),
|
||||
|
@ -36,7 +36,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
Entrance(RR_HC_GARDEN, []{return logic->CanUse(RG_WEIRD_EGG) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash());}),
|
||||
Entrance(RR_HC_GARDEN, []{return (logic->CanUse(RG_WEIRD_EGG) && logic->HasItem(RG_POWER_BRACELET)) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash());}),
|
||||
Entrance(RR_HC_GREAT_FAIRY_FOUNTAIN, []{return logic->BlastOrSmash();}),
|
||||
Entrance(RR_HC_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
});
|
||||
|
@ -69,7 +69,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
|
||||
areaTable[RR_HC_STORMS_GROTTO_BEHIND_WALLS] = Region("HC Storms Grotto Behind Walls", SCENE_GROTTOS, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->WanderingBugs, []{return true;}),
|
||||
}, {
|
||||
|
|
|
@ -33,7 +33,7 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
areaTable[RR_DEATH_MOUNTAIN_SUMMIT] = Region("Death Mountain Summit", SCENE_DEATH_MOUNTAIN_TRAIL, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->BugRock, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->BugRock, []{return logic->IsChild && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMT_TRADE_BROKEN_SWORD, logic->IsAdult && logic->CanUse(RG_BROKEN_SWORD)),
|
||||
|
|
|
@ -8,7 +8,7 @@ void RegionTable_Init_DesertColossus() {
|
|||
areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", SCENE_DESERT_COLOSSUS, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPond, []{return logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
EventAccess(&logic->BugRock, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_COLOSSUS_FREESTANDING_POH, logic->IsAdult && CanPlantBean(RR_DESERT_COLOSSUS)),
|
||||
|
|
|
@ -7,7 +7,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
// clang-format off
|
||||
areaTable[RR_GERUDO_VALLEY] = Region("Gerudo Valley", SCENE_GERUDO_VALLEY, {
|
||||
//Events
|
||||
EventAccess(&logic->BugRock, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->BugRock, []{return logic->IsChild && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GV_GS_SMALL_BRIDGE, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
|
@ -18,7 +18,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
Entrance(RR_GV_CRATE_LEDGE, []{return logic->IsChild || logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GV_GROTTO_LEDGE, []{return true;}),
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters)) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_UPPER_STREAM] = Region("GV Upper Stream", SCENE_GERUDO_VALLEY, {
|
||||
|
@ -27,16 +27,16 @@ void RegionTable_Init_GerudoValley() {
|
|||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GV_WATERFALL_FREESTANDING_POH, logic->IsChild || logic->HasItem(RG_BRONZE_SCALE)),//can use cucco as child
|
||||
LOCATION(RC_GV_WATERFALL_FREESTANDING_POH, (logic->IsChild && logic->HasItem(RG_POWER_BRACELET)) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_GV_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION(RC_GV_COW, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_GOSSIP_STONE, true),
|
||||
LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GV_COW, logic->IsChild && (logic->TakeDamage() || logic->HasItem(RG_POWER_BRACELET) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_1, logic->IsChild && (logic->TakeDamage() || logic->HasItem(RG_POWER_BRACELET) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_2, logic->IsChild && (logic->TakeDamage() || logic->HasItem(RG_POWER_BRACELET) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_3, logic->IsChild && (logic->TakeDamage() || logic->HasItem(RG_POWER_BRACELET) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_GOSSIP_STONE_FAIRY, (logic->TakeDamage() || (logic->IsChild && logic->HasItem(RG_POWER_BRACELET)) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CallGossipFairy()),
|
||||
LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, (logic->TakeDamage() || (logic->IsChild && logic->HasItem(RG_POWER_BRACELET)) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_GOSSIP_STONE, logic->TakeDamage() || (logic->IsChild && logic->HasItem(RG_POWER_BRACELET)) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && (logic->TakeDamage() || logic->HasItem(RG_POWER_BRACELET) || logic->HasItem(RG_BRONZE_SCALE)) && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
|
|
|
@ -9,7 +9,7 @@ void RegionTable_Init_GoronCity() {
|
|||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->StickPot, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->BugRock, []{return logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
EventAccess(&logic->BugRock, []{return (logic->BlastOrSmash() && logic->HasItem(RG_POWER_BRACELET)) || logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
EventAccess(&logic->GoronCityChildFire, []{return logic->IsChild && logic->CanUse(RG_DINS_FIRE);}),
|
||||
EventAccess(&logic->GCWoodsWarpOpen, []{return logic->CanDetonateUprightBombFlower() || logic->CanUse(RG_MEGATON_HAMMER) || logic->GoronCityChildFire;}),
|
||||
EventAccess(&logic->GCDaruniasDoorOpenChild, []{return logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
|
@ -79,7 +79,7 @@ void RegionTable_Init_GoronCity() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GORON_CITY, []{return true;}),
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return logic->IsAdult;}),
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return logic->IsAdult && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_GROTTO_PLATFORM] = Region("GC Grotto Platform", SCENE_GORON_CITY, {}, {}, {
|
||||
|
|
|
@ -7,9 +7,9 @@ void RegionTable_Init_Graveyard() {
|
|||
// clang-format off
|
||||
areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", SCENE_GRAVEYARD, {
|
||||
//Events
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->BugRock, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
EventAccess(&logic->BorrowBunnyHood, []{return logic->IsChild && logic->AtDay && logic->BorrowSpookyMask && logic->HasItem(RG_CHILD_WALLET);}),
|
||||
}, {
|
||||
//Locations
|
||||
|
@ -35,10 +35,10 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_CRATE, ((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->IsAdult || logic->AtNight;}),
|
||||
Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return (logic->IsAdult || logic->AtNight) && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
Entrance(RR_GRAVEYARD_COMPOSERS_GRAVE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
Entrance(RR_GRAVEYARD_HEART_PIECE_GRAVE, []{return logic->IsAdult || logic->AtNight;}),
|
||||
Entrance(RR_GRAVEYARD_DAMPES_GRAVE, []{return logic->IsAdult;}),
|
||||
Entrance(RR_GRAVEYARD_HEART_PIECE_GRAVE, []{return (logic->IsAdult || logic->AtNight) && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
Entrance(RR_GRAVEYARD_DAMPES_GRAVE, []{return logic->IsAdult && logic->HasItem(RG_POWER_BRACELET);}),
|
||||
Entrance(RR_GRAVEYARD_DAMPES_HOUSE, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY) /*|| logic->AtDampeTime*/;}), //TODO: This needs to be handled in ToD rework
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return false;}),
|
||||
|
@ -88,7 +88,7 @@ void RegionTable_Init_Graveyard() {
|
|||
|
||||
areaTable[RR_GRAVEYARD_DAMPES_GRAVE] = Region("Graveyard Dampes Grave", SCENE_WINDMILL_AND_DAMPES_GRAVE, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->DampesWindmillAccess, []{return logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
}, {
|
||||
//Locations
|
||||
|
|
|
@ -17,8 +17,8 @@ void RegionTable_Init_HauntedWasteland() {
|
|||
|
||||
areaTable[RR_HAUNTED_WASTELAND] = Region("Haunted Wasteland", SCENE_HAUNTED_WASTELAND, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->CarpetMerchant, []{return logic->HasItem(RG_ADULT_WALLET) && CanBuyAnother(RC_WASTELAND_BOMBCHU_SALESMAN) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
}, {
|
||||
//Locations
|
||||
|
|
|
@ -7,7 +7,7 @@ void RegionTable_Init_Kakariko() {
|
|||
// clang-format off
|
||||
areaTable[RR_KAKARIKO_VILLAGE] = Region("Kakariko Village", SCENE_KAKARIKO_VILLAGE, {
|
||||
//Events
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
EventAccess(&logic->BugRock, []{return logic->HasItem(RG_POWER_BRACELET);}),
|
||||
//Open Gate setting is applied in RR_ROOT
|
||||
EventAccess(&logic->KakarikoVillageGateOpen, []{return logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER);}),
|
||||
//Needs wallet to be able to get another mask after selling Keaton
|
||||
|
@ -15,14 +15,13 @@ void RegionTable_Init_Kakariko() {
|
|||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)),
|
||||
LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay),
|
||||
LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay),
|
||||
LOCATION(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)),
|
||||
//Can kill lower kak skulls with pots
|
||||
LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS() && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
|
@ -71,14 +70,14 @@ void RegionTable_Init_Kakariko() {
|
|||
Entrance(RR_KAK_WELL, []{return logic->IsAdult || logic->DrainWell || logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE) && logic->IsChild && logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash());}),
|
||||
Entrance(RR_KAK_POTION_SHOP_FRONT, []{return (logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}),
|
||||
Entrance(RR_KAK_REDEAD_GROTTO, []{return logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_KAK_IMPAS_LEDGE, []{return (logic->IsChild && logic->AtDay) || (logic->IsAdult && ctx->GetTrickOption(RT_VISIBLE_COLLISION));}),
|
||||
Entrance(RR_KAK_IMPAS_LEDGE, []{return (logic->IsChild && logic->AtDay && logic->HasItem(RG_POWER_BRACELET)) || (logic->IsAdult && ctx->GetTrickOption(RT_VISIBLE_COLLISION));}),
|
||||
Entrance(RR_KAK_WATCHTOWER, []{return logic->IsAdult || logic->AtDay || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer());}),
|
||||
Entrance(RR_KAK_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsAdult);}),
|
||||
Entrance(RR_KAK_IMPAS_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_ROOFTOP_GS) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
Entrance(RR_KAK_BEHIND_GATE, []{return logic->IsAdult || logic->KakarikoVillageGateOpen;}),
|
||||
//adult can jump from the fence near the windmill to ledgegrab the fence near granny's shop. is in logic on N64
|
||||
Entrance(RR_KAK_BACKYARD, []{return logic->IsAdult || logic->AtDay;}),
|
||||
Entrance(RR_KAK_BACKYARD, []{return logic->IsAdult || (logic->AtDay && logic->HasItem(RG_POWER_BRACELET));}),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_IMPAS_LEDGE] = Region("Kak Impas Ledge", SCENE_KAKARIKO_VILLAGE, {}, {}, {
|
||||
|
|
|
@ -12,8 +12,8 @@ void RegionTable_Init_LonLonRanch() {
|
|||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SONG_FROM_MALON, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
|
||||
LOCATION(RC_LLR_GS_TREE, logic->IsChild),
|
||||
LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LLR_GS_TREE, logic->IsChild && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS()&& (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
|
@ -55,7 +55,7 @@ void RegionTable_Init_LonLonRanch() {
|
|||
|
||||
areaTable[RR_LLR_TOWER] = Region("LLR Tower", SCENE_LON_LON_BUILDINGS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LLR_FREESTANDING_POH, logic->IsChild),
|
||||
LOCATION(RC_LLR_FREESTANDING_POH, logic->IsChild && logic->HasItem(RG_POWER_BRACELET)),
|
||||
LOCATION(RC_LLR_TOWER_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_LLR_TOWER_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
|
|
|
@ -55,7 +55,7 @@ void RegionTable_Init_Market() {
|
|||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_MARKET_10_BIG_POES, logic->IsAdult && (logic->BigPoeKill || logic->BigPoes >= ctx->GetOption(RSK_BIG_POE_COUNT).Get())),
|
||||
LOCATION(RC_MARKET_GS_GUARD_HOUSE, logic->IsChild),
|
||||
LOCATION(RC_MARKET_GS_GUARD_HOUSE, logic->IsChild && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
|
|
|
@ -8,7 +8,7 @@ void RegionTable_Init_ZorasDomain() {
|
|||
areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", SCENE_ZORAS_DOMAIN, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return logic->CanBreakPots();}),
|
||||
EventAccess(&logic->StickPot, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->FishGroup, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->KingZoraThawed, []{return logic->IsAdult && logic->BlueFire();}),
|
||||
|
|
|
@ -11,7 +11,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZF_GS_TREE, logic->IsChild),
|
||||
LOCATION(RC_ZF_GS_TREE, logic->IsChild && (logic->HasItem(RG_POWER_BRACELET) || logic->CanKillEnemy(RE_GOLD_SKULLTULA))),
|
||||
LOCATION(RC_ZF_GS_ABOVE_THE_LOG, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
|
|
|
@ -68,7 +68,7 @@ void RegionTable_Init_ZoraRiver() {
|
|||
Entrance(RR_ZR_FAIRY_GROTTO, []{return Here(RR_ZORAS_RIVER, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ZR_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_ZR_BEHIND_WATERFALL, []{return ctx->GetOption(RSK_SLEEPING_WATERFALL).Is(RO_WATERFALL_OPEN) || Here(RR_ZORAS_RIVER, []{return logic->CanUse(RG_ZELDAS_LULLABY);}) || (logic->IsChild && ctx->GetTrickOption(RT_ZR_CUCCO)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_ZR_HOVERS));}),
|
||||
Entrance(RR_ZR_BEHIND_WATERFALL, []{return ctx->GetOption(RSK_SLEEPING_WATERFALL).Is(RO_WATERFALL_OPEN) || Here(RR_ZORAS_RIVER, []{return logic->CanUse(RG_ZELDAS_LULLABY);}) || (logic->IsChild && ctx->GetTrickOption(RT_ZR_CUCCO) && logic->HasItem(RG_POWER_BRACELET)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_ZR_HOVERS));}),
|
||||
});
|
||||
|
||||
areaTable[RR_ZR_FROM_SHORTCUT] = Region("ZR From Shortcut", SCENE_ZORAS_RIVER, TIME_DOESNT_PASS, {RA_ZORAS_RIVER}, {}, {}, {
|
||||
|
|
|
@ -83,6 +83,8 @@ bool Logic::HasItem(RandomizerGet itemName) {
|
|||
case RG_IRON_BOOTS:
|
||||
case RG_HOVER_BOOTS:
|
||||
return CheckEquipment(RandoGetToEquipFlag.at(itemName));
|
||||
case RG_POWER_BRACELET:
|
||||
return CheckRandoInf(RAND_INF_CAN_GRAB);
|
||||
case RG_GORONS_BRACELET:
|
||||
return CurrentUpgrade(UPG_STRENGTH);
|
||||
case RG_SILVER_GAUNTLETS:
|
||||
|
@ -1141,7 +1143,8 @@ bool Logic::BlueFire() {
|
|||
}
|
||||
|
||||
bool Logic::CanBreakPots() {
|
||||
return true;
|
||||
return CanUseSword() || BlastOrSmash() || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) ||
|
||||
CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG) || HasItem(RG_POWER_BRACELET);
|
||||
}
|
||||
|
||||
bool Logic::CanBreakCrates() {
|
||||
|
@ -1149,7 +1152,7 @@ bool Logic::CanBreakCrates() {
|
|||
}
|
||||
|
||||
bool Logic::CanBreakSmallCrates() {
|
||||
return true;
|
||||
return CanUseSword() || BlastOrSmash() || HasItem(RG_POWER_BRACELET);
|
||||
}
|
||||
|
||||
bool Logic::HasExplosives() {
|
||||
|
|
|
@ -251,7 +251,8 @@ void Settings::CreateOptionDescriptions() {
|
|||
"\n"
|
||||
"If you enter a water entrance without swim you will be respawned on land to prevent infinite death loops.\n"
|
||||
"If you void out in Water Temple you will immediately be kicked out to prevent a softlock.";
|
||||
mOptionDescriptions[RSK_SHUFFLE_GRAB] = "Shuffle the ability to grab as a progressive upgrade before Goron Bracelet.";
|
||||
mOptionDescriptions[RSK_SHUFFLE_GRAB] =
|
||||
"Shuffle the ability to grab as a progressive upgrade before Goron Bracelet.";
|
||||
mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG] = "Shuffles the Weird Egg from Malon in to the item pool. Enabling "
|
||||
"\"Skip Child Zelda\" disables this feature.\n"
|
||||
"\n"
|
||||
|
|
|
@ -5715,8 +5715,8 @@ void Randomizer::CreateCustomMessages() {
|
|||
GIMESSAGE(RG_BRONZE_SCALE, ITEM_SCALE_SILVER, "You got the %rBronze Scale%w!&The power of buoyancy is yours!",
|
||||
"Du hast die %rBronzene Schuppe%w&erhalten! Die Fähigkeit zu&Schwimmen ist nun dein!",
|
||||
"Vous obtenez l'%rÉcaille de Bronze%w!&Le pouvoir de la flottabilité est&à vous!"),
|
||||
GIMESSAGE(RG_POWER_BRACELET, ITEM_BRACELET, "You got the %rPower Bracelet%w!&Wimp no more!",
|
||||
TODO_TRANSLATE, TODO_TRANSLATE),
|
||||
GIMESSAGE(RG_POWER_BRACELET, ITEM_BRACELET, "You got the %rPower Bracelet%w!&Wimp no more!", TODO_TRANSLATE,
|
||||
TODO_TRANSLATE),
|
||||
GIMESSAGE(RG_FISHING_POLE, ITEM_FISHING_POLE, "You found a lost %rFishing Pole%w!&Time to hit the pond!",
|
||||
"Du hast eine verlorene %rAngelrute%w&gefunden!&Zeit, im Teich&zu angeln!",
|
||||
"Vous obtenez une %rCanne à pêche%w&perdue!&Il est temps d'aller à %gl'étang%w!"),
|
||||
|
|
|
@ -5574,8 +5574,9 @@ void func_8083A0F4(PlayState* play, Player* this) {
|
|||
} else if ((interactActorId == ACTOR_EN_ISHI) && ((interactRangeActor->params & 0xF) == 1)) {
|
||||
Player_SetupAction(play, this, Player_Action_80846260, 0);
|
||||
anim = &gPlayerAnim_link_silver_carry;
|
||||
} else if (GameInteractor_Should(VB_PREVENT_STRENGTH, ((interactActorId == ACTOR_EN_BOMBF) || (interactActorId == ACTOR_EN_KUSA)) &&
|
||||
(Player_GetStrength() <= PLAYER_STR_NONE))) {
|
||||
} else if (GameInteractor_Should(VB_PREVENT_STRENGTH, ((interactActorId == ACTOR_EN_BOMBF) ||
|
||||
(interactActorId == ACTOR_EN_KUSA)) &&
|
||||
(Player_GetStrength() <= PLAYER_STR_NONE))) {
|
||||
Player_SetupAction(play, this, Player_Action_80846408, 0);
|
||||
this->actor.world.pos.x =
|
||||
(Math_SinS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.x;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue