Merge Visible Collision and Hammer Through Collision (#6317)
This commit is contained in:
@@ -345,7 +345,7 @@ void RegionTable_Init_FireTemple() {
|
|||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_SOT_CAGE_SWITCH] = Region("Fire Temple Sot Cage Switch", SCENE_FIRE_TEMPLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_SOT_CAGE_SWITCH] = Region("Fire Temple Sot Cage Switch", SCENE_FIRE_TEMPLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER) && logic->HasItem(RG_OPEN_CHEST)),
|
LOCATION(RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_VISIBLE_COLLISION)) && logic->CanUse(RG_MEGATON_HAMMER) && logic->HasItem(RG_OPEN_CHEST)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, false),
|
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, false),
|
||||||
@@ -702,7 +702,7 @@ void RegionTable_Init_FireTemple() {
|
|||||||
//Explosives can also reach this room. Chus is relatively simple, they need to detonate on the first horizontal bar up from the floor while horizontally near the switch, but bombs are much harder
|
//Explosives can also reach this room. Chus is relatively simple, they need to detonate on the first horizontal bar up from the floor while horizontally near the switch, but bombs are much harder
|
||||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_CRATE_CAGE, AnyAgeTime([]{return logic->CanJumpslash();})),
|
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_CRATE_CAGE, AnyAgeTime([]{return logic->CanJumpslash();})),
|
||||||
//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks
|
//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks
|
||||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_LIZALFOS_MAZE, (logic->HasExplosives() || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT)),
|
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_LIZALFOS_MAZE, (logic->HasExplosives() || ctx->GetTrickOption(RT_VISIBLE_COLLISION)) && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT)),
|
||||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_SWITCH_DOOR, logic->HasExplosives() && ctx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM)),
|
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_SWITCH_DOOR, logic->HasExplosives() && ctx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM)),
|
||||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, false),
|
ENTRANCE(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, false),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||||||
//Events
|
//Events
|
||||||
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanBreakPots()),
|
EVENT_ACCESS(LOGIC_FAIRY_ACCESS, logic->CanBreakPots()),
|
||||||
EVENT_ACCESS(LOGIC_WATER_TRIAL_RUSTED_SWITCH, logic->IsAdult && (logic->HasItem(RG_POWER_BRACELET) || (logic->CanMiddairGroundJump())) &&
|
EVENT_ACCESS(LOGIC_WATER_TRIAL_RUSTED_SWITCH, logic->IsAdult && (logic->HasItem(RG_POWER_BRACELET) || (logic->CanMiddairGroundJump())) &&
|
||||||
(logic->BlueFire() || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) &&
|
(logic->BlueFire() || ctx->GetTrickOption(RT_VISIBLE_COLLISION)) &&
|
||||||
logic->CanUse(RG_MEGATON_HAMMER)),
|
logic->CanUse(RG_MEGATON_HAMMER)),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
@@ -575,7 +575,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM] = Region("Ganon's Castle MQ Spirit Trial Chairs Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM] = Region("Ganon's Castle MQ Spirit Trial Chairs Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, AnyAgeTime([]{return (logic->CanHitEyeTargets() || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER);})),
|
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, AnyAgeTime([]{return (logic->CanHitEyeTargets() || ctx->GetTrickOption(RT_VISIBLE_COLLISION)) && logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH] = Region("Ganon's Castle MQ Spirit Trial Before Switch", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH] = Region("Ganon's Castle MQ Spirit Trial Before Switch", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ void RegionTable_Init_IceCavern() {
|
|||||||
LOCATION(RC_ICE_CAVERN_MAP_CHEST, logic->BlueFire() && logic->HasItem(RG_OPEN_CHEST)),
|
LOCATION(RC_ICE_CAVERN_MAP_CHEST, logic->BlueFire() && logic->HasItem(RG_OPEN_CHEST)),
|
||||||
// very easy to break pot through ice
|
// very easy to break pot through ice
|
||||||
LOCATION(RC_ICE_CAVERN_FROZEN_POT_1, (logic->CanBreakPots() && logic->BlueFire()) || logic->HasExplosives() ||
|
LOCATION(RC_ICE_CAVERN_FROZEN_POT_1, (logic->CanBreakPots() && logic->BlueFire()) || logic->HasExplosives() ||
|
||||||
(ctx->GetTrickOption(RT_RUSTED_SWITCHES) && ((logic->CanStandingShield() && logic->CanUse(RG_KOKIRI_SWORD)) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER))) ||
|
(ctx->GetTrickOption(RT_VISIBLE_COLLISION) && ((logic->CanStandingShield() && logic->CanUse(RG_KOKIRI_SWORD)) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER))) ||
|
||||||
(ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && logic->CanUse(RG_HOOKSHOT))),
|
(ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && logic->CanUse(RG_HOOKSHOT))),
|
||||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, true),
|
LOCATION(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, true),
|
||||||
LOCATION(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, true),
|
LOCATION(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, true),
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB] = Region("Spirit Temple MQ Child Side Hub", SCENE_SPIRIT_TEMPLE, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB] = Region("Spirit Temple MQ Child Side Hub", SCENE_SPIRIT_TEMPLE, {
|
||||||
//Events
|
//Events
|
||||||
//not technically a rusted switch, but a boulder through a wall, but is part of the same trick on N64
|
//not technically a rusted switch, but a boulder through a wall, but is part of the same trick on N64
|
||||||
EVENT_ACCESS(LOGIC_SPIRIT_MQ_CRAWL_BOULDER, logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_RUSTED_SWITCHES) && logic->CanUse(RG_MEGATON_HAMMER))),
|
EVENT_ACCESS(LOGIC_SPIRIT_MQ_CRAWL_BOULDER, logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_VISIBLE_COLLISION) && logic->CanUse(RG_MEGATON_HAMMER))),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, logic->Get(LOGIC_SPIRIT_MQ_TIME_TRAVEL_CHEST) && logic->HasItem(RG_OPEN_CHEST)),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, logic->Get(LOGIC_SPIRIT_MQ_TIME_TRAVEL_CHEST) && logic->HasItem(RG_OPEN_CHEST)),
|
||||||
@@ -665,7 +665,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_1F_CHEST_SWITCH] = Region("Spirit Temple MQ West 1F Rusted Switch", SCENE_SPIRIT_TEMPLE, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_1F_CHEST_SWITCH] = Region("Spirit Temple MQ West 1F Rusted Switch", SCENE_SPIRIT_TEMPLE, {
|
||||||
//Events
|
//Events
|
||||||
EVENT_ACCESS(LOGIC_SPIRIT_MQ_TIME_TRAVEL_CHEST, logic->CanUse(RG_MEGATON_HAMMER) && logic->HasItem(RG_OPEN_CHEST)),
|
EVENT_ACCESS(LOGIC_SPIRIT_MQ_TIME_TRAVEL_CHEST, logic->CanUse(RG_MEGATON_HAMMER) && logic->HasItem(RG_OPEN_CHEST)),
|
||||||
EVENT_ACCESS(LOGIC_SPIRIT_MQ_CRAWL_BOULDER, logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_RUSTED_SWITCHES) && logic->CanUse(RG_MEGATON_HAMMER))),
|
EVENT_ACCESS(LOGIC_SPIRIT_MQ_CRAWL_BOULDER, logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_VISIBLE_COLLISION) && logic->CanUse(RG_MEGATON_HAMMER))),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, logic->CanUse(RG_CRAWL) && logic->Get(LOGIC_SPIRIT_MQ_CRAWL_BOULDER)),
|
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, logic->CanUse(RG_CRAWL) && logic->Get(LOGIC_SPIRIT_MQ_CRAWL_BOULDER)),
|
||||||
@@ -709,7 +709,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||||||
//Logic can then allow child back into spirit, putting 1F west in logic with only 6 keys without forwards entry
|
//Logic can then allow child back into spirit, putting 1F west in logic with only 6 keys without forwards entry
|
||||||
ENTRANCE(RR_DESERT_COLOSSUS, logic->CanUse(RG_CRAWL) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) &&
|
ENTRANCE(RR_DESERT_COLOSSUS, logic->CanUse(RG_CRAWL) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) &&
|
||||||
logic->SmallKeys(SCENE_SPIRIT_TEMPLE, 6) && logic->MQSpiritStatueToSunBlock() &&
|
logic->SmallKeys(SCENE_SPIRIT_TEMPLE, 6) && logic->MQSpiritStatueToSunBlock() &&
|
||||||
(logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_RUSTED_SWITCHES) && AnyAgeTime([]{return logic->CanUse(RG_MEGATON_HAMMER);})))),
|
(logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_VISIBLE_COLLISION) && AnyAgeTime([]{return logic->CanUse(RG_MEGATON_HAMMER);})))),
|
||||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SUN_ON_FLOOR, logic->SmallKeys(SCENE_SPIRIT_TEMPLE, 6)),
|
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SUN_ON_FLOOR, logic->SmallKeys(SCENE_SPIRIT_TEMPLE, 6)),
|
||||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_POT_LEDGE, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME)),
|
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_POT_LEDGE, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME)),
|
||||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_INNER_RIGHT_HAND, logic->IsAdult || logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS)/* || CanBunnyJump()*/),
|
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_INNER_RIGHT_HAND, logic->IsAdult || logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS)/* || CanBunnyJump()*/),
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ RANDO_ENUM_ITEM(RT_VISIBLE_COLLISION) // -- general tricks
|
|||||||
RANDO_ENUM_ITEM(RT_GROTTOS_WITHOUT_AGONY)
|
RANDO_ENUM_ITEM(RT_GROTTOS_WITHOUT_AGONY)
|
||||||
RANDO_ENUM_ITEM(RT_FEWER_TUNIC_REQUIREMENTS)
|
RANDO_ENUM_ITEM(RT_FEWER_TUNIC_REQUIREMENTS)
|
||||||
RANDO_ENUM_ITEM(RT_UNINTUITIVE_JUMPS)
|
RANDO_ENUM_ITEM(RT_UNINTUITIVE_JUMPS)
|
||||||
RANDO_ENUM_ITEM(RT_RUSTED_SWITCHES)
|
|
||||||
RANDO_ENUM_ITEM(RT_FLAMING_CHESTS)
|
RANDO_ENUM_ITEM(RT_FLAMING_CHESTS)
|
||||||
RANDO_ENUM_ITEM(RT_BUNNY_HOOD_JUMPS)
|
RANDO_ENUM_ITEM(RT_BUNNY_HOOD_JUMPS)
|
||||||
RANDO_ENUM_ITEM(RT_DAMAGE_BOOST_SIMPLE)
|
RANDO_ENUM_ITEM(RT_DAMAGE_BOOST_SIMPLE)
|
||||||
|
|||||||
@@ -1400,10 +1400,16 @@ void Settings::CreateOptions() {
|
|||||||
Try to keep Name Tags less than 8 chars.
|
Try to keep Name Tags less than 8 chars.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
OPT_TRICK(RT_VISIBLE_COLLISION, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_VISIBLE_COLLISION, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Ignore Visible Collision",
|
||||||
"Pass Through Visible One-Way Collision", "VisCol",
|
"VisCol",
|
||||||
"Allows climbing through the platform to reach Impa's House Back as adult with no items and going "
|
"Allows ignoring visible barriers and objects that do not actually stop Link from walking, climbing or "
|
||||||
"through the Kakariko Village Gate as child when coming from the Mountain Trail side.");
|
"hitting things, without clipping.\n\n"
|
||||||
|
"This notably allows for walking through Kak's gate backwards, climb into the back of Impa's house as "
|
||||||
|
"Adult from the coop,"
|
||||||
|
"and hitting Rusted Switches or boulders through Blocks, Ice and Walls.\n\n"
|
||||||
|
"This trick only applies to case where doing the thing is trivial, instances where it only works from "
|
||||||
|
"certain angles are not part of this trick,"
|
||||||
|
"niether are any form of clips, including clipping Link's hitbox inside boulders with jumpslash.");
|
||||||
OPT_TRICK(RT_GROTTOS_WITHOUT_AGONY, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE },
|
OPT_TRICK(RT_GROTTOS_WITHOUT_AGONY, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE },
|
||||||
"Hidden Grottos without Stone of Agony", "NoSoA",
|
"Hidden Grottos without Stone of Agony", "NoSoA",
|
||||||
"Allows entering hidden grottos without the Stone of Agony.");
|
"Allows entering hidden grottos without the Stone of Agony.");
|
||||||
@@ -1413,15 +1419,6 @@ void Settings::CreateOptions() {
|
|||||||
"Many ledges can be overcome with particular jumps which are simple to execute without items.\n"
|
"Many ledges can be overcome with particular jumps which are simple to execute without items.\n"
|
||||||
"This includes jumping from heights to dive deeper without scales,\n"
|
"This includes jumping from heights to dive deeper without scales,\n"
|
||||||
"though this trick doesn't cover Water Temple's Dragon Room.");
|
"though this trick doesn't cover Water Temple's Dragon Room.");
|
||||||
OPT_TRICK(RT_RUSTED_SWITCHES, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Hammer Through Collision", "HamCol",
|
|
||||||
"Applies to:\n"
|
|
||||||
"- Hitting Fire Temple Highest Goron Chest's Rusted Switch in the SoT Block without Song of Time.\n"
|
|
||||||
"- Hitting the rusted switch in Water Trial through the Ice."
|
|
||||||
"- Hitting MQ Fire Temple Lizalfos Maze's Rusted Switch in the wall.\n"
|
|
||||||
"- Having Adult hammer the rock in the west side crawlspace of MQ Spirit so child can get through "
|
|
||||||
"without bombchus."
|
|
||||||
"- MQ Spirit Trial's Rusted Switch between the thrones without hitting the eye target to drop an Iron "
|
|
||||||
"Knuckle.\n");
|
|
||||||
OPT_TRICK(RT_FLAMING_CHESTS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::INTERMEDIATE }, "Flaming Chests", "FlaChst",
|
OPT_TRICK(RT_FLAMING_CHESTS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::INTERMEDIATE }, "Flaming Chests", "FlaChst",
|
||||||
"The chests encircled in flames in Gerudo Training Ground and in Spirit Temple can be opened by running "
|
"The chests encircled in flames in Gerudo Training Ground and in Spirit Temple can be opened by running "
|
||||||
"into the flames while Link is invincible after taking damage.");
|
"into the flames while Link is invincible after taking damage.");
|
||||||
|
|||||||
@@ -306,10 +306,9 @@ std::unordered_map<u32, RandomizerHint> StaticData::grottoChestParamsToHint{
|
|||||||
|
|
||||||
// preexisting entries are for compatibility with Copper Charlie and should not be updated
|
// preexisting entries are for compatibility with Copper Charlie and should not be updated
|
||||||
std::unordered_map<std::string, RandomizerTrick> StaticData::trickToEnum = {
|
std::unordered_map<std::string, RandomizerTrick> StaticData::trickToEnum = {
|
||||||
{ "0", RT_VISIBLE_COLLISION },
|
|
||||||
{ "1", RT_GROTTOS_WITHOUT_AGONY },
|
{ "1", RT_GROTTOS_WITHOUT_AGONY },
|
||||||
{ "2", RT_FEWER_TUNIC_REQUIREMENTS },
|
{ "2", RT_FEWER_TUNIC_REQUIREMENTS },
|
||||||
{ "3", RT_RUSTED_SWITCHES },
|
{ "3", RT_VISIBLE_COLLISION },
|
||||||
{ "4", RT_FLAMING_CHESTS },
|
{ "4", RT_FLAMING_CHESTS },
|
||||||
{ "6", RT_DAMAGE_BOOST_SIMPLE },
|
{ "6", RT_DAMAGE_BOOST_SIMPLE },
|
||||||
{ "7", RT_HOVER_BOOST_SIMPLE },
|
{ "7", RT_HOVER_BOOST_SIMPLE },
|
||||||
|
|||||||
Reference in New Issue
Block a user