mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-20 21:33:40 -07:00
refactor ice cavern
fixes blue rupee logic at beginning makes structure usable for doorsanity & silver shuffle
This commit is contained in:
parent
237dcfec74
commit
6ea6f80250
2 changed files with 114 additions and 29 deletions
|
@ -19,42 +19,105 @@ void RegionTable_Init_IceCavern() {
|
|||
areaTable[RR_ICE_CAVERN_BEGINNING] = Region("Ice Cavern Beginning", SCENE_ICE_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ICE_CAVERN_LOBBY_RUPEE, logic->BlueFire()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_ICE_CAVERN_MAIN, []{return Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);});}),
|
||||
Entrance(RR_ICE_CAVERN_HUB, []{return Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);});}),
|
||||
Entrance(RR_ICE_CAVERN_ABOVE_BEGINNING, []{return false;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MAIN] = Region("Ice Cavern", SCENE_ICE_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->BlueFireAccess, []{return logic->IsAdult;}),
|
||||
}, {
|
||||
areaTable[RR_ICE_CAVERN_ABOVE_BEGINNING] = Region("Ice Cavern Above Beginning", SCENE_ICE_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_FINAL_ROOM_UNDERWATER, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ICE_CAVERN_BEGINNING, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_HUB] = Region("Ice Cavern Hub", SCENE_ICE_CAVERN, {}, {
|
||||
//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_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()),
|
||||
LOCATION(RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, logic->BlueFire() && (logic->HookshotOrBoomerang() || (ctx->GetTrickOption(RT_ICE_BLOCK_GS) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
LOCATION(RC_ICE_CAVERN_HALL_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_ICE_CAVERN_HALL_POT_2, logic->CanBreakPots()),
|
||||
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()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_BEGINNING, []{return true;}),
|
||||
Entrance(RR_ICE_CAVERN_MAP_ROOM, []{return logic->IsAdult;}),
|
||||
Entrance(RR_ICE_CAVERN_COMPASS_ROOM, []{return logic->BlueFire();}),
|
||||
Entrance(RR_ICE_CAVERN_BLOCK_ROOM, []{return logic->BlueFire();}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MAP_ROOM] = Region("Ice Cavern Map Room", SCENE_ICE_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->BlueFireAccess, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_MAP_CHEST, logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_FROZEN_POT_1, logic->CanBreakPots() && logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, true),
|
||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, true),
|
||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_HUB, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_COMPASS_ROOM] = Region("Ice Cavern Map Room", SCENE_ICE_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->BlueFireAccess, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, logic->BlueFire()),
|
||||
LOCATION(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, logic->BlueFire() && logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_HUB, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_BLOCK_ROOM] = Region("Ice Cavern Block Room", SCENE_ICE_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->BlueFireAccess, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, logic->HookshotOrBoomerang() || (ctx->GetTrickOption(RT_ICE_BLOCK_GS) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_HUB, []{return true;}),
|
||||
Entrance(RR_ICE_CAVERN_BEFORE_FINAL_ROOM, []{return logic->BlueFire();}),
|
||||
});
|
||||
|
||||
// this represents being past the red ice barricade, not just past the silver rupee door
|
||||
areaTable[RR_ICE_CAVERN_BEFORE_FINAL_ROOM] = Region("Ice Cavern Before Final Room", SCENE_ICE_CAVERN, {}, {
|
||||
//Locations
|
||||
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_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))),
|
||||
}, {});
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_BLOCK_ROOM, []{return logic->BlueFire();}),
|
||||
Entrance(RR_ICE_CAVERN_FINAL_ROOM, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_FINAL_ROOM] = Region("Ice Cavern Final Room", SCENE_ICE_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_IRON_BOOTS_CHEST, logic->CanKillEnemy(RE_WOLFOS)),
|
||||
LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->CanKillEnemy(RE_WOLFOS) && logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_BEFORE_FINAL_ROOM, []{return logic->CanKillEnemy(RE_WOLFOS);}),
|
||||
Entrance(RR_ICE_CAVERN_FINAL_ROOM_UNDERWATER, []{return logic->CanKillEnemy(RE_WOLFOS) && logic->CanUse(RG_IRON_BOOTS);}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_FINAL_ROOM_UNDERWATER] = Region("Ice Cavern Final Room Underwater", SCENE_ICE_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_FINAL_ROOM, []{return logic->CanUse(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_ICE_CAVERN_ABOVE_BEGINNING, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
});
|
||||
#pragma endregion
|
||||
|
||||
#pragma region MQ
|
||||
|
@ -67,6 +130,13 @@ void RegionTable_Init_IceCavern() {
|
|||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||
//It is in logic to use a pot to hit the toggle switch here.
|
||||
Entrance(RR_ICE_CAVERN_MQ_HUB, []{return true;}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_ABOVE_BEGINNING, []{return false;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_ABOVE_BEGINNING] = Region("Ice Cavern MQ Above Beginning", SCENE_ICE_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_MQ_STALFOS_ROOM_UNDERWATER, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_HUB] = Region("Ice Cavern MQ Hub", SCENE_ICE_CAVERN, {
|
||||
|
@ -127,7 +197,13 @@ void RegionTable_Init_IceCavern() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, []{return Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return logic->CanUse(RG_IRON_BOOTS) && Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_STALFOS_ROOM_UNDERWATER, []{return logic->CanUse(RG_IRON_BOOTS) && Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_STALFOS_ROOM_UNDERWATER] = Region("Ice Cavern MQ Stalfos Room Underwater", SCENE_ICE_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanUse(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_ABOVE_BEGINNING, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_COMPASS_ROOM] = Region("Ice Cavern MQ Compass Room", SCENE_ICE_CAVERN, {
|
||||
|
|
|
@ -990,13 +990,22 @@ typedef enum {
|
|||
RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM,
|
||||
|
||||
RR_ICE_CAVERN_BEGINNING,
|
||||
RR_ICE_CAVERN_MAIN,
|
||||
RR_ICE_CAVERN_HUB,
|
||||
RR_ICE_CAVERN_MAP_ROOM,
|
||||
RR_ICE_CAVERN_COMPASS_ROOM,
|
||||
RR_ICE_CAVERN_BLOCK_ROOM,
|
||||
RR_ICE_CAVERN_BEFORE_FINAL_ROOM,
|
||||
RR_ICE_CAVERN_FINAL_ROOM,
|
||||
RR_ICE_CAVERN_FINAL_ROOM_UNDERWATER,
|
||||
RR_ICE_CAVERN_ABOVE_BEGINNING,
|
||||
|
||||
RR_ICE_CAVERN_MQ_BEGINNING,
|
||||
RR_ICE_CAVERN_MQ_ABOVE_BEGINNING,
|
||||
RR_ICE_CAVERN_MQ_HUB,
|
||||
RR_ICE_CAVERN_MQ_MAP_ROOM,
|
||||
RR_ICE_CAVERN_MQ_SCARECROW_ROOM,
|
||||
RR_ICE_CAVERN_MQ_STALFOS_ROOM,
|
||||
RR_ICE_CAVERN_MQ_STALFOS_ROOM_UNDERWATER,
|
||||
RR_ICE_CAVERN_MQ_WEST_CORRIDOR,
|
||||
RR_ICE_CAVERN_MQ_COMPASS_ROOM,
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue