mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-21 05:01:53 -05:00
Move Barren handling to before hint generation, Add RandomizerArea enum and other cleanups (#3339)
* Initial wothCandidates change, pushed early foreseeing conflicts * Implement better barren handling, waiting on #3205 * pls save next time VS code * Finish implementation of barren and randomizer area refactor * Apply function changes to develop merge * Fix double default decleration issue * change some var types for uniformity * Fix post merge differences to the point of building and generating randos * Address reviews * address more reviews
This commit is contained in:
parent
1cc3201c19
commit
c5790d9284
@ -203,10 +203,28 @@ std::vector<RandomizerCheck> GetAllEmptyLocations() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsBombchus(RandomizerGet item, bool includeShops = false){
|
||||||
|
return (item >= RG_BOMBCHU_5 && item <= RG_BOMBCHU_DROP) || item == RG_PROGRESSIVE_BOMBCHUS ||
|
||||||
|
(includeShops && (item == RG_BUY_BOMBCHU_10 || item == RG_BUY_BOMBCHU_20));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsBeatableWithout(RandomizerCheck excludedCheck, bool replaceItem, RandomizerGet ignore = RG_NONE){ //RANDOTODO make excludCheck an ItemLocation
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
RandomizerGet copy = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet(); //Copy out item
|
||||||
|
ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE); //Write in empty item
|
||||||
|
ctx->playthroughBeatable = false;
|
||||||
|
LogicReset();
|
||||||
|
GetAccessibleLocations(ctx->allLocations, SearchMode::CheckBeatable, ignore); //Check if game is still beatable
|
||||||
|
if (replaceItem){
|
||||||
|
ctx->GetItemLocation(excludedCheck)->SetPlacedItem(copy); //Immediately put item back
|
||||||
|
}
|
||||||
|
return ctx->playthroughBeatable;
|
||||||
|
}
|
||||||
|
|
||||||
//This function will return a vector of ItemLocations that are accessible with
|
//This function will return a vector of ItemLocations that are accessible with
|
||||||
//where items have been placed so far within the world. The allowedLocations argument
|
//where items have been placed so far within the world. The allowedLocations argument
|
||||||
//specifies the pool of locations that we're trying to search for an accessible location in
|
//specifies the pool of locations that we're trying to search for an accessible location in
|
||||||
std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<RandomizerCheck>& allowedLocations, SearchMode mode /* = SearchMode::ReachabilitySearch*/, std::string ignore /*= ""*/, bool checkPoeCollectorAccess /*= false*/, bool checkOtherEntranceAccess /*= false*/) {
|
std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<RandomizerCheck>& allowedLocations, SearchMode mode /* = SearchMode::ReachabilitySearch*/, RandomizerGet ignore /* = RG_NONE*/, bool checkPoeCollectorAccess /*= false*/, bool checkOtherEntranceAccess /*= false*/) {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
std::vector<RandomizerCheck> accessibleLocations;
|
std::vector<RandomizerCheck> accessibleLocations;
|
||||||
// Reset all access to begin a new search
|
// Reset all access to begin a new search
|
||||||
@ -230,7 +248,7 @@ std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<Randomizer
|
|||||||
int gsCount = 0;
|
int gsCount = 0;
|
||||||
const int maxGsCount = mode == SearchMode::GeneratePlaythrough ? GetMaxGSCount() : 0; //If generating playthrough want the max that's possibly useful, else doesn't matter
|
const int maxGsCount = mode == SearchMode::GeneratePlaythrough ? GetMaxGSCount() : 0; //If generating playthrough want the max that's possibly useful, else doesn't matter
|
||||||
bool bombchusFound = false;
|
bool bombchusFound = false;
|
||||||
std::vector<std::string> buyIgnores;
|
std::vector<std::variant<bool*, uint8_t*>> buyIgnores;
|
||||||
|
|
||||||
//Variables for search
|
//Variables for search
|
||||||
std::vector<Rando::ItemLocation*> newItemLocations;
|
std::vector<Rando::ItemLocation*> newItemLocations;
|
||||||
@ -324,30 +342,30 @@ std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<Randomizer
|
|||||||
LocationAccess& locPair = area->locations[k];
|
LocationAccess& locPair = area->locations[k];
|
||||||
RandomizerCheck loc = locPair.GetLocation();
|
RandomizerCheck loc = locPair.GetLocation();
|
||||||
Rando::ItemLocation* location = ctx->GetItemLocation(loc);
|
Rando::ItemLocation* location = ctx->GetItemLocation(loc);
|
||||||
|
RandomizerGet locItem = location->GetPlacedRandomizerGet();
|
||||||
|
|
||||||
if (!location->IsAddedToPool() && locPair.ConditionsMet()) {
|
if (!location->IsAddedToPool() && locPair.ConditionsMet()) {
|
||||||
|
|
||||||
location->AddToPool();
|
location->AddToPool();
|
||||||
|
|
||||||
if (location->GetPlacedRandomizerGet() == RG_NONE) {
|
if (locItem == RG_NONE) {
|
||||||
accessibleLocations.push_back(loc); //Empty location, consider for placement
|
accessibleLocations.push_back(loc); //Empty location, consider for placement
|
||||||
} else {
|
} else {
|
||||||
//If ignore has a value, we want to check if the item location should be considered or not
|
//If ignore has a value, we want to check if the item location should be considered or not
|
||||||
//This is necessary due to the below preprocessing for playthrough generation
|
//This is necessary due to the below preprocessing for playthrough generation
|
||||||
if (ignore != "") {
|
if (ignore != RG_NONE) {
|
||||||
ItemType type = location->GetPlacedItem().GetItemType();
|
ItemType type = location->GetPlacedItem().GetItemType();
|
||||||
std::string itemName(location->GetPlacedItemName().GetEnglish());
|
|
||||||
//If we want to ignore tokens, only add if not a token
|
//If we want to ignore tokens, only add if not a token
|
||||||
if (ignore == "Tokens" && type != ITEMTYPE_TOKEN) {
|
if (ignore == RG_GOLD_SKULLTULA_TOKEN && type != ITEMTYPE_TOKEN) {
|
||||||
newItemLocations.push_back(location);
|
newItemLocations.push_back(location);
|
||||||
}
|
}
|
||||||
//If we want to ignore bombchus, only add if bombchu is not in the name
|
//If we want to ignore bombchus, only add if bombchu is not in the name
|
||||||
else if (ignore == "Bombchus" && itemName.find("Bombchu") == std::string::npos) {
|
else if (IsBombchus(ignore) && IsBombchus(locItem, true)) {
|
||||||
newItemLocations.push_back(location);
|
newItemLocations.push_back(location);
|
||||||
}
|
}
|
||||||
//We want to ignore a specific Buy item name
|
//We want to ignore a specific Buy item. Buy items with different RandomizerGets are recognised by a shared GetLogicVar
|
||||||
else if (ignore != "Tokens" && ignore != "Bombchus") {
|
else if (ignore != RG_GOLD_SKULLTULA_TOKEN && IsBombchus(ignore)) {
|
||||||
if ((type == ITEMTYPE_SHOP && ignore != GetShopItemBaseName(itemName)) || type != ITEMTYPE_SHOP) {
|
if ((type == ITEMTYPE_SHOP && Rando::StaticData::GetItemTable()[ignore].GetLogicVar() != location->GetPlacedItem().GetLogicVar()) || type != ITEMTYPE_SHOP) {
|
||||||
newItemLocations.push_back(location);
|
newItemLocations.push_back(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -364,8 +382,7 @@ std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<Randomizer
|
|||||||
//Item is an advancement item, figure out if it should be added to this sphere
|
//Item is an advancement item, figure out if it should be added to this sphere
|
||||||
if (!ctx->playthroughBeatable && location->GetPlacedItem().IsAdvancement()) {
|
if (!ctx->playthroughBeatable && location->GetPlacedItem().IsAdvancement()) {
|
||||||
ItemType type = location->GetPlacedItem().GetItemType();
|
ItemType type = location->GetPlacedItem().GetItemType();
|
||||||
std::string itemName(location->GetPlacedItemName().GetEnglish());
|
bool bombchus = IsBombchus(locItem, true); //Is a bombchu location
|
||||||
bool bombchus = itemName.find("Bombchu") != std::string::npos; //Is a bombchu location
|
|
||||||
|
|
||||||
//Decide whether to exclude this location
|
//Decide whether to exclude this location
|
||||||
//This preprocessing is done to reduce the amount of searches performed in PareDownPlaythrough
|
//This preprocessing is done to reduce the amount of searches performed in PareDownPlaythrough
|
||||||
@ -389,7 +406,7 @@ std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<Randomizer
|
|||||||
// TODO: Reimplement Ammo Drops setting
|
// TODO: Reimplement Ammo Drops setting
|
||||||
else if (/*AmmoDrops.IsNot(AMMODROPS_NONE) &&*/ !(bombchus && bombchusFound) && type == ITEMTYPE_SHOP) {
|
else if (/*AmmoDrops.IsNot(AMMODROPS_NONE) &&*/ !(bombchus && bombchusFound) && type == ITEMTYPE_SHOP) {
|
||||||
//Only check each buy item once
|
//Only check each buy item once
|
||||||
std::string buyItem = GetShopItemBaseName(itemName);
|
auto buyItem = location->GetPlacedItem().GetLogicVar();
|
||||||
//Buy item not in list to ignore, add it to list and write to playthrough
|
//Buy item not in list to ignore, add it to list and write to playthrough
|
||||||
if (std::find(buyIgnores.begin(), buyIgnores.end(), buyItem) == buyIgnores.end()) {
|
if (std::find(buyIgnores.begin(), buyIgnores.end(), buyItem) == buyIgnores.end()) {
|
||||||
exclude = false;
|
exclude = false;
|
||||||
@ -466,6 +483,39 @@ static void GeneratePlaythrough() {
|
|||||||
GetAccessibleLocations(ctx->allLocations, SearchMode::GeneratePlaythrough);
|
GetAccessibleLocations(ctx->allLocations, SearchMode::GeneratePlaythrough);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RandomizerArea LookForExternalArea(Area* curRegion, std::vector<RandomizerRegion> alreadyChecked){//RANDOTODO curREGION
|
||||||
|
for (auto& entrance : curRegion->entrances) {
|
||||||
|
RandomizerArea otherArea = entrance->GetParentRegion()->GetArea();
|
||||||
|
if(otherArea != RA_NONE){
|
||||||
|
return otherArea;
|
||||||
|
//if the area hasn't already been checked, check it
|
||||||
|
} else if (std::find(alreadyChecked.begin(), alreadyChecked.end(), entrance->GetParentRegionKey()) == alreadyChecked.end()) {
|
||||||
|
alreadyChecked.push_back(entrance->GetParentRegionKey());
|
||||||
|
RandomizerArea passdown = LookForExternalArea(entrance->GetParentRegion(), alreadyChecked);
|
||||||
|
if(passdown != RA_NONE){
|
||||||
|
return passdown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RA_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAreas(){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
//RANDOTODO give entrances an enum like RandomizerCheck, the give them all areas here, the use those areas to not need to recursivly find ItemLocation areas
|
||||||
|
for (int c = 0; c < RR_MARKER_AREAS_END; c++) {
|
||||||
|
Area region = areaTable[c];
|
||||||
|
RandomizerArea area = region.GetArea();
|
||||||
|
if (area == RA_NONE) {
|
||||||
|
std::vector<RandomizerRegion> alreadyChecked = {(RandomizerRegion)c};
|
||||||
|
area = LookForExternalArea(®ion, alreadyChecked);
|
||||||
|
}
|
||||||
|
for (auto& loc : region.locations){
|
||||||
|
ctx->GetItemLocation(loc.GetLocation())->SetArea(area);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Remove unnecessary items from playthrough by removing their location, and checking if game is still beatable
|
//Remove unnecessary items from playthrough by removing their location, and checking if game is still beatable
|
||||||
//To reduce searches, some preprocessing is done in playthrough generation to avoid adding obviously unnecessary items
|
//To reduce searches, some preprocessing is done in playthrough generation to avoid adding obviously unnecessary items
|
||||||
static void PareDownPlaythrough() {
|
static void PareDownPlaythrough() {
|
||||||
@ -478,37 +528,22 @@ static void PareDownPlaythrough() {
|
|||||||
std::vector<RandomizerCheck> sphere = ctx->playthroughLocations.at(i);
|
std::vector<RandomizerCheck> sphere = ctx->playthroughLocations.at(i);
|
||||||
for (int j = sphere.size() - 1; j >= 0; j--) {
|
for (int j = sphere.size() - 1; j >= 0; j--) {
|
||||||
RandomizerCheck loc = sphere.at(j);
|
RandomizerCheck loc = sphere.at(j);
|
||||||
RandomizerGet copy = ctx->GetItemLocation(loc)->GetPlacedRandomizerGet(); //Copy out item
|
RandomizerGet locGet = ctx->GetItemLocation(loc)->GetPlacedRandomizerGet();
|
||||||
ctx->GetItemLocation(loc)->SetPlacedItem(RG_NONE); //Write in empty item
|
|
||||||
ctx->playthroughBeatable = false;
|
|
||||||
LogicReset();
|
|
||||||
|
|
||||||
std::string ignore = "";
|
RandomizerGet ignore = RG_NONE;
|
||||||
if (Rando::StaticData::RetrieveItem(copy).GetItemType() == ITEMTYPE_TOKEN) {
|
if (locGet == RG_GOLD_SKULLTULA_TOKEN || IsBombchus(locGet, true)
|
||||||
ignore = "Tokens";
|
|| Rando::StaticData::RetrieveItem(locGet).GetItemType() == ITEMTYPE_SHOP) {
|
||||||
|
ignore = locGet;
|
||||||
}
|
}
|
||||||
else if (Rando::StaticData::RetrieveItem(copy).GetName().GetEnglish().find("Bombchu") != std::string::npos) {
|
|
||||||
ignore = "Bombchus";
|
|
||||||
}
|
|
||||||
else if (Rando::StaticData::RetrieveItem(copy).GetItemType() == ITEMTYPE_SHOP) {
|
|
||||||
ignore = GetShopItemBaseName(Rando::StaticData::RetrieveItem(copy).GetName().GetEnglish());
|
|
||||||
}
|
|
||||||
|
|
||||||
GetAccessibleLocations(ctx->allLocations, SearchMode::CheckBeatable, ignore); //Check if game is still beatable
|
|
||||||
|
|
||||||
//Playthrough is still beatable without this item, therefore it can be removed from playthrough section.
|
//Playthrough is still beatable without this item, therefore it can be removed from playthrough section.
|
||||||
if (ctx->playthroughBeatable) {
|
if (IsBeatableWithout(loc, false, ignore)) {
|
||||||
// Uncomment to print playthrough deletion log in citra
|
|
||||||
// std::string itemname(Rando::StaticData::RetrieveItem(copy).GetName().GetEnglish());
|
|
||||||
// std::string locationname(GetLocation(loc)->GetName());
|
|
||||||
// std::string removallog = itemname + " at " + locationname + " removed from playthrough";
|
|
||||||
// CitraPrint(removallog);
|
|
||||||
ctx->playthroughLocations[i].erase(ctx->playthroughLocations[i].begin() + j);
|
ctx->playthroughLocations[i].erase(ctx->playthroughLocations[i].begin() + j);
|
||||||
ctx->GetItemLocation(loc)->SetDelayedItem(copy); //Game is still beatable, don't add back until later
|
ctx->GetItemLocation(loc)->SetDelayedItem(locGet); //Game is still beatable, don't add back until later
|
||||||
toAddBackItem.push_back(loc);
|
toAddBackItem.push_back(loc);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ctx->GetItemLocation(loc)->SetPlacedItem(copy); //Immediately put item back so game is beatable again
|
ctx->GetItemLocation(loc)->SetPlacedItem(locGet); //Immediately put item back so game is beatable again
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -526,43 +561,50 @@ static void PareDownPlaythrough() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Very similar to PareDownPlaythrough except it creates the list of Way of the Hero items
|
//Very similar to PareDownPlaythrough except it sets WotH candidacy of Way of the Hero items
|
||||||
//Way of the Hero items are more specific than playthrough items in that they are items which *must*
|
//Way of the Hero items are more specific than playthrough items in that they are items which *must*
|
||||||
// be obtained to logically be able to complete the seed, rather than playthrough items which
|
// be obtained to logically be able to complete the seed, rather than playthrough items which
|
||||||
// are just possible items you *can* collect to complete the seed.
|
// are just possible items you *can* collect to complete the seed.
|
||||||
static void CalculateWotH() {
|
static void CalculateWotH() {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
//First copy locations from the 2-dimensional playthroughLocations into the 1-dimensional wothLocations
|
|
||||||
//size - 1 so Triforce is not counted
|
//size - 1 so Triforce is not counted
|
||||||
for (size_t i = 0; i < ctx->playthroughLocations.size() - 1; i++) {
|
for (size_t i = 0; i < ctx->playthroughLocations.size() - 1; i++) {
|
||||||
for (size_t j = 0; j < ctx->playthroughLocations[i].size(); j++) {
|
for (size_t j = 0; j < ctx->playthroughLocations[i].size(); j++) {
|
||||||
if (ctx->GetItemLocation(ctx->playthroughLocations[i][j])->IsHintable()) {
|
//If removing this item and no other item caused the game to become unbeatable, then it is strictly necessary, so add it
|
||||||
ctx->wothLocations.push_back(ctx->playthroughLocations[i][j]);
|
if (ctx->GetItemLocation(ctx->playthroughLocations[i][j])->IsHintable()
|
||||||
|
&& IsBeatableWithout(ctx->playthroughLocations[i][j], true)) {
|
||||||
|
ctx->GetItemLocation(ctx->playthroughLocations[i][j])->SetWothCandidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Now go through and check each location, seeing if it is strictly necessary for game completion
|
|
||||||
for (int i = ctx->wothLocations.size() - 1; i >= 0; i--) {
|
|
||||||
RandomizerCheck loc = ctx->wothLocations[i];
|
|
||||||
RandomizerGet copy = ctx->GetItemLocation(loc)->GetPlacedRandomizerGet(); //Copy out item
|
|
||||||
ctx->GetItemLocation(loc)->SetPlacedItem(RG_NONE); //Write in empty item
|
|
||||||
ctx->playthroughBeatable = false;
|
|
||||||
LogicReset();
|
|
||||||
GetAccessibleLocations(ctx->allLocations, SearchMode::CheckBeatable); //Check if game is still beatable
|
|
||||||
ctx->GetItemLocation(loc)->SetPlacedItem(copy); //Immediately put item back
|
|
||||||
//If removing this item and no other item caused the game to become unbeatable, then it is strictly necessary, so keep it
|
|
||||||
//Else, delete from wothLocations
|
|
||||||
if (ctx->playthroughBeatable) {
|
|
||||||
ctx->wothLocations.erase(ctx->wothLocations.begin() + i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->playthroughBeatable = true;
|
ctx->playthroughBeatable = true;
|
||||||
LogicReset();
|
LogicReset();
|
||||||
GetAccessibleLocations(ctx->allLocations);
|
GetAccessibleLocations(ctx->allLocations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Calculate barren locations and assign Barren Candidacy to all locations inside those areas
|
||||||
|
static void CalculateBarren() {
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
std::array<bool, RA_MAX> IsBarren = {true};
|
||||||
|
|
||||||
|
for (RandomizerCheck loc : ctx->allLocations) {
|
||||||
|
Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc);
|
||||||
|
RandomizerArea locArea = itemLoc->GetArea();
|
||||||
|
// If a location has a major item or is a way of the hero location, it is not barren
|
||||||
|
if (IsBarren[locArea] == true && locArea > RA_LINKS_POCKET && (itemLoc->GetPlacedItem().IsMajorItem() || itemLoc->IsWothCandidate())) {
|
||||||
|
IsBarren[locArea] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RandomizerCheck loc : ctx->allLocations) {
|
||||||
|
Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc);
|
||||||
|
if (IsBarren[itemLoc->GetArea()]){
|
||||||
|
itemLoc->SetBarrenCandidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//Will place things completely randomly, no logic checks are performed
|
//Will place things completely randomly, no logic checks are performed
|
||||||
static void FastFill(std::vector<RandomizerGet> items, std::vector<RandomizerCheck> locations, bool endOnItemsEmpty = false) {
|
static void FastFill(std::vector<RandomizerGet> items, std::vector<RandomizerCheck> locations, bool endOnItemsEmpty = false) {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
@ -791,7 +833,7 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) {
|
|||||||
// This accounts for boss room shuffle so that own dungeon items can be placed
|
// This accounts for boss room shuffle so that own dungeon items can be placed
|
||||||
// in the shuffled boss room
|
// in the shuffled boss room
|
||||||
std::vector<RandomizerCheck> dungeonLocations = FilterFromPool(ctx->allLocations, [dungeon, ctx](const auto loc) {
|
std::vector<RandomizerCheck> dungeonLocations = FilterFromPool(ctx->allLocations, [dungeon, ctx](const auto loc) {
|
||||||
return GetHintRegionHintKey(ctx->GetItemLocation(loc)->GetParentRegionKey()) == dungeon->GetHintKey();
|
return ctx->GetItemLocation(loc)->GetArea() == dungeon->GetArea();
|
||||||
});
|
});
|
||||||
|
|
||||||
//filter out locations that may be required to have songs placed at them
|
//filter out locations that may be required to have songs placed at them
|
||||||
@ -964,7 +1006,6 @@ int Fill() {
|
|||||||
//showItemProgress = false;
|
//showItemProgress = false;
|
||||||
ctx->playthroughLocations.clear();
|
ctx->playthroughLocations.clear();
|
||||||
ctx->GetEntranceShuffler()->playthroughEntrances.clear();
|
ctx->GetEntranceShuffler()->playthroughEntrances.clear();
|
||||||
ctx->wothLocations.clear();
|
|
||||||
AreaTable_Init(); //Reset the world graph to intialize the proper locations
|
AreaTable_Init(); //Reset the world graph to intialize the proper locations
|
||||||
ctx->ItemReset(); //Reset shops incase of shopsanity random
|
ctx->ItemReset(); //Reset shops incase of shopsanity random
|
||||||
ctx->GenerateLocationPool();
|
ctx->GenerateLocationPool();
|
||||||
@ -1096,8 +1137,10 @@ int Fill() {
|
|||||||
if(ctx->playthroughBeatable && !placementFailure) {
|
if(ctx->playthroughBeatable && !placementFailure) {
|
||||||
printf("Done");
|
printf("Done");
|
||||||
printf("\x1b[9;10HCalculating Playthrough...");
|
printf("\x1b[9;10HCalculating Playthrough...");
|
||||||
|
SetAreas();
|
||||||
PareDownPlaythrough();
|
PareDownPlaythrough();
|
||||||
CalculateWotH();
|
CalculateWotH();
|
||||||
|
CalculateBarren();
|
||||||
printf("Done");
|
printf("Done");
|
||||||
ctx->CreateItemOverrides();
|
ctx->CreateItemOverrides();
|
||||||
ctx->GetEntranceShuffler()->CreateEntranceOverrides();
|
ctx->GetEntranceShuffler()->CreateEntranceOverrides();
|
||||||
|
@ -24,6 +24,6 @@ int Fill();
|
|||||||
std::vector<RandomizerCheck> GetEmptyLocations(std::vector<RandomizerCheck> allowedLocations);
|
std::vector<RandomizerCheck> GetEmptyLocations(std::vector<RandomizerCheck> allowedLocations);
|
||||||
|
|
||||||
std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<RandomizerCheck>& allowedLocations,
|
std::vector<RandomizerCheck> GetAccessibleLocations(const std::vector<RandomizerCheck>& allowedLocations,
|
||||||
SearchMode mode = SearchMode::ReachabilitySearch, std::string ignore = "",
|
SearchMode mode = SearchMode::ReachabilitySearch, RandomizerGet ignore = RG_NONE,
|
||||||
bool checkPoeCollectorAccess = false,
|
bool checkPoeCollectorAccess = false,
|
||||||
bool checkOtherEntranceAccess = false);
|
bool checkOtherEntranceAccess = false);
|
@ -1064,6 +1064,11 @@ void HintTable_Init() {
|
|||||||
/*spanish*/ "el exterior del Castillo de Ganon" },
|
/*spanish*/ "el exterior del Castillo de Ganon" },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
hintTable[RHT_CASTLE_GROUNDS] = HintText::Exclude({
|
||||||
|
// obscure text
|
||||||
|
Text{ "the Castle Grounds", /*french*/ "le Château d'Hyrule", /*spanish*/ "" },
|
||||||
|
});
|
||||||
|
|
||||||
hintTable[RHT_KAKARIKO_VILLAGE] = HintText::Exclude({
|
hintTable[RHT_KAKARIKO_VILLAGE] = HintText::Exclude({
|
||||||
// obscure text
|
// obscure text
|
||||||
Text{ "Kakariko Village", /*french*/ "le Village Cocorico", /*spanish*/ "Kakariko" },
|
Text{ "Kakariko Village", /*french*/ "le Village Cocorico", /*spanish*/ "Kakariko" },
|
||||||
@ -3298,6 +3303,46 @@ int32_t TokensRequiredBySettings() {
|
|||||||
return tokens;
|
return tokens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::array<RandomizerHintTextKey, RA_MAX> AreaHintTextKeys = {
|
||||||
|
RHT_NONE,
|
||||||
|
RHT_LINKS_POCKET,
|
||||||
|
RHT_KOKIRI_FOREST,
|
||||||
|
RHT_THE_LOST_WOODS,
|
||||||
|
RHT_SACRED_FOREST_MEADOW,
|
||||||
|
RHT_HYRULE_FIELD,
|
||||||
|
RHT_LAKE_HYLIA,
|
||||||
|
RHT_GERUDO_VALLEY,
|
||||||
|
RHT_GERUDO_FORTRESS,
|
||||||
|
RHT_HAUNTED_WASTELAND,
|
||||||
|
RHT_DESERT_COLOSSUS,
|
||||||
|
RHT_THE_MARKET,
|
||||||
|
RHT_TEMPLE_OF_TIME,
|
||||||
|
RHT_HYRULE_CASTLE,
|
||||||
|
RHT_OUTSIDE_GANONS_CASTLE,
|
||||||
|
RHT_CASTLE_GROUNDS,
|
||||||
|
RHT_KAKARIKO_VILLAGE,
|
||||||
|
RHT_THE_GRAVEYARD,
|
||||||
|
RHT_DEATH_MOUNTAIN_TRAIL,
|
||||||
|
RHT_GORON_CITY,
|
||||||
|
RHT_DEATH_MOUNTAIN_CRATER,
|
||||||
|
RHT_ZORAS_RIVER,
|
||||||
|
RHT_ZORAS_DOMAIN,
|
||||||
|
RHT_ZORAS_FOUNTAIN,
|
||||||
|
RHT_LON_LON_RANCH,
|
||||||
|
RHT_DEKU_TREE,
|
||||||
|
RHT_DODONGOS_CAVERN,
|
||||||
|
RHT_JABU_JABUS_BELLY,
|
||||||
|
RHT_FOREST_TEMPLE,
|
||||||
|
RHT_FIRE_TEMPLE,
|
||||||
|
RHT_WATER_TEMPLE,
|
||||||
|
RHT_SPIRIT_TEMPLE,
|
||||||
|
RHT_SHADOW_TEMPLE,
|
||||||
|
RHT_BOTTOM_OF_THE_WELL,
|
||||||
|
RHT_ICE_CAVERN,
|
||||||
|
RHT_GERUDO_TRAINING_GROUND,
|
||||||
|
RHT_GANONS_CASTLE
|
||||||
|
};
|
||||||
|
|
||||||
std::array<ConditionalAlwaysHint, 10> conditionalAlwaysHints = {
|
std::array<ConditionalAlwaysHint, 10> conditionalAlwaysHints = {
|
||||||
std::make_pair(RC_MARKET_10_BIG_POES,
|
std::make_pair(RC_MARKET_10_BIG_POES,
|
||||||
[]() {
|
[]() {
|
||||||
@ -3339,6 +3384,10 @@ const HintText& Hint(const RandomizerHintTextKey hintKey) {
|
|||||||
return hintTable[hintKey];
|
return hintTable[hintKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const HintText& Hint(const RandomizerArea area) {
|
||||||
|
return hintTable[AreaHintTextKeys[area]];
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<HintText> GetHintCategory(HintCategory category) {
|
std::vector<HintText> GetHintCategory(HintCategory category) {
|
||||||
|
|
||||||
std::vector<HintText> hintsInCategory = {};
|
std::vector<HintText> hintsInCategory = {};
|
||||||
|
@ -8,6 +8,7 @@ extern std::array<HintText, RHT_MAX> hintTable;
|
|||||||
|
|
||||||
void HintTable_Init();
|
void HintTable_Init();
|
||||||
const HintText& Hint(const RandomizerHintTextKey hintKey);
|
const HintText& Hint(const RandomizerHintTextKey hintKey);
|
||||||
|
const HintText& Hint(const RandomizerArea area);
|
||||||
std::vector<HintText> GetHintCategory(HintCategory category);
|
std::vector<HintText> GetHintCategory(HintCategory category);
|
||||||
|
|
||||||
void HintTable_Init_Item();
|
void HintTable_Init_Item();
|
||||||
|
@ -47,103 +47,102 @@ std::array<std::string, HINT_TYPE_MAX> hintTypeNames = {
|
|||||||
"WotH",
|
"WotH",
|
||||||
"Barren",
|
"Barren",
|
||||||
"Entrance",
|
"Entrance",
|
||||||
"Always",
|
"Item Area",
|
||||||
"Sometimes",
|
"Item Location",
|
||||||
"Song",
|
|
||||||
"Overworld",
|
|
||||||
"Dungeon",
|
|
||||||
"Named Item",
|
|
||||||
"Random",
|
|
||||||
"Junk"
|
"Junk"
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr std::array<HintSetting, 4> hintSettingTable{{
|
bool FilterWotHLocations(RandomizerCheck loc){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
return ctx->GetItemLocation(loc)->IsWothCandidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FilterBarrenLocations(RandomizerCheck loc){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
return ctx->GetItemLocation(loc)->IsBarrenCandidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FilterSongLocations(RandomizerCheck loc){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
return Rando::StaticData::GetLocation(loc)->IsCategory(Category::cSong);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FilterOverworldLocations(RandomizerCheck loc){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
return Rando::StaticData::GetLocation(loc)->IsOverworld();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FilterDungeonLocations(RandomizerCheck loc){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
return Rando::StaticData::GetLocation(loc)->IsDungeon();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FilterGoodItems(RandomizerCheck loc){
|
||||||
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
return ctx->GetItemLocation(loc)->GetPlacedItem().IsMajorItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NoFilter(RandomizerCheck loc){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::array<HintSetting, 4> hintSettingTable{{
|
||||||
// Useless hints
|
// Useless hints
|
||||||
{
|
{
|
||||||
.dungeonsWothLimit = 2,
|
.alwaysCopies = 0,
|
||||||
.dungeonsBarrenLimit = 1,
|
.trialCopies = 0,
|
||||||
.namedItemsRequired = false,
|
.junkWeight = 1, //RANDOTODO when the hint pool is not implicitly an itemLocations, handle junk like other hint types
|
||||||
.distTable = {{
|
.distTable = {} /*RANDOTODO Instead of loading a function into this,
|
||||||
{.type = HINT_TYPE_STATIC, .weight = 0, .fixed = 0, .copies = 0},
|
apply this filter on all possible hintables in advance and then filter by what is acually in the seed at the start of generation.
|
||||||
{.type = HINT_TYPE_TRIAL, .weight = 0, .fixed = 0, .copies = 0},
|
This allows the distTable to hold the current status in hint generation (reducing potential doubled work) and
|
||||||
{.type = HINT_TYPE_WOTH, .weight = 0, .fixed = 0, .copies = 0},
|
will make handling custom hint pools easier later*/
|
||||||
{.type = HINT_TYPE_BARREN, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_ENTRANCE, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_ALWAYS, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_SOMETIMES, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_SONG, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_OVERWORLD, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_DUNGEON, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_NAMED_ITEM,.weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_RANDOM, .weight = 0, .fixed = 0, .copies = 0},
|
|
||||||
{.type = HINT_TYPE_JUNK, .weight = 1, .fixed = 0, .copies = 1},
|
|
||||||
}},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Balanced hints
|
// Balanced hints
|
||||||
{
|
{
|
||||||
.dungeonsWothLimit = 2,
|
.alwaysCopies = 1,
|
||||||
.dungeonsBarrenLimit = 1,
|
.trialCopies = 1,
|
||||||
.namedItemsRequired = true,
|
.junkWeight = 6,
|
||||||
.distTable = {{
|
.distTable = {
|
||||||
{.type = HINT_TYPE_STATIC, .weight = 0, .fixed = 0, .copies = 0},
|
{"WotH", HINT_TYPE_WOTH, 7, 0, 1, FilterWotHLocations, 2},
|
||||||
{.type = HINT_TYPE_TRIAL, .weight = 0, .fixed = 0, .copies = 1},
|
{"Barren", HINT_TYPE_BARREN, 4, 0, 1, FilterBarrenLocations, 1},
|
||||||
{.type = HINT_TYPE_WOTH, .weight = 7, .fixed = 0, .copies = 1},
|
//("Entrance", HINT_TYPE_ENTRANCE, 6, 0, 1), //not yet implemented
|
||||||
{.type = HINT_TYPE_BARREN, .weight = 4, .fixed = 0, .copies = 1},
|
{"Song", HINT_TYPE_ITEM_LOCATION, 2, 0, 1, FilterSongLocations},
|
||||||
{.type = HINT_TYPE_ENTRANCE, .weight = 0, .fixed = 0, .copies = 1}, //not yet implemented, should be 6 weight
|
{"Overworld", HINT_TYPE_ITEM_LOCATION, 4, 0, 1, FilterOverworldLocations},
|
||||||
{.type = HINT_TYPE_ALWAYS, .weight = 0, .fixed = 0, .copies = 1},
|
{"Dungeon", HINT_TYPE_ITEM_LOCATION, 3, 0, 1, FilterDungeonLocations},
|
||||||
{.type = HINT_TYPE_SOMETIMES, .weight = 0, .fixed = 0, .copies = 1},
|
{"Named Item", HINT_TYPE_ITEM_AREA, 10, 0, 1, FilterGoodItems},
|
||||||
{.type = HINT_TYPE_SONG, .weight = 2, .fixed = 0, .copies = 1},
|
{"Random" , HINT_TYPE_ITEM_AREA, 12, 0, 1, NoFilter}
|
||||||
{.type = HINT_TYPE_OVERWORLD, .weight = 4, .fixed = 0, .copies = 1},
|
}
|
||||||
{.type = HINT_TYPE_DUNGEON, .weight = 3, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_NAMED_ITEM,.weight = 10, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_RANDOM, .weight = 12, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_JUNK, .weight = 6, .fixed = 0, .copies = 1}, //Junk is hardcoded to 1 copy to avoid fill in issues, this setting is ignored
|
|
||||||
}},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Strong hints
|
// Strong hints
|
||||||
{
|
{
|
||||||
.dungeonsWothLimit = 2,
|
.alwaysCopies = 2,
|
||||||
.dungeonsBarrenLimit = 1,
|
.trialCopies = 1,
|
||||||
.namedItemsRequired = true,
|
.junkWeight = 0,
|
||||||
.distTable = {{
|
.distTable = {
|
||||||
{.type = HINT_TYPE_STATIC, .weight = 0, .fixed = 0, .copies = 0},
|
{"WotH", HINT_TYPE_WOTH, 12, 0, 2, FilterWotHLocations, 2},
|
||||||
{.type = HINT_TYPE_TRIAL, .weight = 0, .fixed = 0, .copies = 1},
|
{"Barren", HINT_TYPE_BARREN, 12, 0, 1, FilterBarrenLocations, 1},
|
||||||
{.type = HINT_TYPE_WOTH, .weight = 12, .fixed = 0, .copies = 2},
|
//{"Entrance", HINT_TYPE_ENTRANCE, 4, 0, 1}, //not yet implemented
|
||||||
{.type = HINT_TYPE_BARREN, .weight = 12, .fixed = 0, .copies = 1},
|
{"Song", HINT_TYPE_ITEM_LOCATION, 4, 0, 1, FilterSongLocations},
|
||||||
{.type = HINT_TYPE_ENTRANCE, .weight = 0, .fixed = 0, .copies = 1}, //not yet implemented, should be 4 weight
|
{"Overworld", HINT_TYPE_ITEM_LOCATION, 6, 0, 1, FilterOverworldLocations},
|
||||||
{.type = HINT_TYPE_ALWAYS, .weight = 0, .fixed = 0, .copies = 2},
|
{"Dungeon", HINT_TYPE_ITEM_LOCATION, 6, 0, 1, FilterDungeonLocations},
|
||||||
{.type = HINT_TYPE_SOMETIMES, .weight = 0, .fixed = 0, .copies = 1},
|
{"Named Item", HINT_TYPE_ITEM_AREA, 8, 0, 1, FilterGoodItems},
|
||||||
{.type = HINT_TYPE_SONG, .weight = 4, .fixed = 0, .copies = 1},
|
{"Random" , HINT_TYPE_ITEM_AREA, 8, 0, 1, NoFilter},
|
||||||
{.type = HINT_TYPE_OVERWORLD, .weight = 6, .fixed = 0, .copies = 1},
|
},
|
||||||
{.type = HINT_TYPE_DUNGEON, .weight = 6, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_NAMED_ITEM,.weight = 8, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_RANDOM, .weight = 8, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_JUNK, .weight = 0, .fixed = 0, .copies = 1},
|
|
||||||
}},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Very strong hints
|
// Very strong hints
|
||||||
{
|
{
|
||||||
.dungeonsWothLimit = 40,
|
.alwaysCopies = 2,
|
||||||
.dungeonsBarrenLimit = 40,
|
.trialCopies = 1,
|
||||||
.namedItemsRequired = true,
|
.junkWeight = 0,
|
||||||
.distTable = {{
|
.distTable = {
|
||||||
{.type = HINT_TYPE_STATIC, .weight = 0, .fixed = 0, .copies = 0},
|
{"WotH", HINT_TYPE_WOTH, 15, 0, 2, FilterWotHLocations},
|
||||||
{.type = HINT_TYPE_TRIAL, .weight = 0, .fixed = 0, .copies = 1},
|
{"Barren", HINT_TYPE_BARREN, 15, 0, 1, FilterBarrenLocations},
|
||||||
{.type = HINT_TYPE_WOTH, .weight = 15, .fixed = 0, .copies = 2},
|
//{"Entrance", HINT_TYPE_ENTRANCE, 10, 0, 1}, //not yet implemented
|
||||||
{.type = HINT_TYPE_BARREN, .weight = 15, .fixed = 0, .copies = 1},
|
{"Song", HINT_TYPE_ITEM_LOCATION, 2, 0, 1, FilterSongLocations},
|
||||||
{.type = HINT_TYPE_ENTRANCE, .weight = 0, .fixed = 0, .copies = 1}, //not yet implemented, should be 10 weight
|
{"Overworld", HINT_TYPE_ITEM_LOCATION, 7, 0, 1, FilterOverworldLocations},
|
||||||
{.type = HINT_TYPE_ALWAYS, .weight = 0, .fixed = 0, .copies = 2},
|
{"Dungeon", HINT_TYPE_ITEM_LOCATION, 7, 0, 1, FilterDungeonLocations},
|
||||||
{.type = HINT_TYPE_SOMETIMES, .weight = 0, .fixed = 0, .copies = 1},
|
{"Named Item", HINT_TYPE_ITEM_AREA, 5, 0, 1, FilterGoodItems},
|
||||||
{.type = HINT_TYPE_SONG, .weight = 2, .fixed = 0, .copies = 1},
|
},
|
||||||
{.type = HINT_TYPE_OVERWORLD, .weight = 7, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_DUNGEON, .weight = 7, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_NAMED_ITEM,.weight = 5, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_RANDOM, .weight = 0, .fixed = 0, .copies = 1},
|
|
||||||
{.type = HINT_TYPE_JUNK, .weight = 0, .fixed = 0, .copies = 1},
|
|
||||||
}},
|
|
||||||
},
|
},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@ -304,51 +303,6 @@ std::string GetSariaHintLoc() {
|
|||||||
return sariaHintLoc;
|
return sariaHintLoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Area* GetHintRegion(const RandomizerRegion area) {
|
|
||||||
|
|
||||||
std::vector<RandomizerRegion> alreadyChecked = {};
|
|
||||||
std::vector<RandomizerRegion> spotQueue = {area};
|
|
||||||
|
|
||||||
while (!spotQueue.empty()) {
|
|
||||||
RandomizerRegion region = spotQueue.back();
|
|
||||||
alreadyChecked.push_back(region);
|
|
||||||
spotQueue.pop_back();
|
|
||||||
|
|
||||||
if (AreaTable(region)->hintKey != RHT_NONE) {
|
|
||||||
return AreaTable(region);
|
|
||||||
}
|
|
||||||
|
|
||||||
//add unchecked entrances to spot queue
|
|
||||||
bool checked = false;
|
|
||||||
for (auto& entrance : AreaTable(region)->entrances) {
|
|
||||||
for (RandomizerRegion checkedEntrance : alreadyChecked) {
|
|
||||||
if (entrance->GetParentRegionKey() == checkedEntrance) {
|
|
||||||
checked = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!checked) {
|
|
||||||
spotQueue.insert(spotQueue.begin(), entrance->GetParentRegionKey());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return AreaTable(RR_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
RandomizerHintTextKey GetHintRegionHintKey(const RandomizerRegion area) {
|
|
||||||
return GetHintRegion(area)->hintKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t GetHintRegionuint32_t(const RandomizerRegion area) {
|
|
||||||
return GetHintRegion(area)->hintKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t GetLocationRegionuint32_t(const RandomizerCheck location) {
|
|
||||||
return GetHintRegion(Rando::Context::GetInstance()->GetItemLocation(location)->GetParentRegionKey())->hintKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
static std::vector<RandomizerCheck> GetEmptyGossipStones() {
|
static std::vector<RandomizerCheck> GetEmptyGossipStones() {
|
||||||
auto emptyGossipStones = GetEmptyLocations(Rando::StaticData::gossipStoneLocations);
|
auto emptyGossipStones = GetEmptyLocations(Rando::StaticData::gossipStoneLocations);
|
||||||
return emptyGossipStones;
|
return emptyGossipStones;
|
||||||
@ -371,7 +325,7 @@ static std::vector<RandomizerCheck> GetAccessibleGossipStones(const RandomizerCh
|
|||||||
|
|
||||||
bool IsReachableWithout(std::vector<RandomizerCheck> locsToCheck, RandomizerCheck excludedCheck, bool resetAfter = true){
|
bool IsReachableWithout(std::vector<RandomizerCheck> locsToCheck, RandomizerCheck excludedCheck, bool resetAfter = true){
|
||||||
//temporarily remove the hinted location's item, and then perform a
|
//temporarily remove the hinted location's item, and then perform a
|
||||||
//reachability search for this check
|
//reachability search for this check RANDOTODO convert excludedCheck to an ItemLocation
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
RandomizerGet originalItem = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet();
|
RandomizerGet originalItem = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet();
|
||||||
ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE);
|
ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE);
|
||||||
@ -388,29 +342,40 @@ bool IsReachableWithout(std::vector<RandomizerCheck> locsToCheck, RandomizerChec
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetAllInRegionAsHinted(RandomizerHintTextKey region, std::vector<RandomizerCheck> locations){
|
static void SetAllInRegionAsHinted(RandomizerArea area, std::vector<RandomizerCheck> locations){
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
std::vector<RandomizerCheck> locsInRegion = FilterFromPool(locations, [region, ctx](const RandomizerCheck loc){
|
std::vector<RandomizerCheck> locsInRegion = FilterFromPool(locations, [area, ctx](const RandomizerCheck loc){
|
||||||
return GetHintRegion(ctx->GetItemLocation(loc)->GetParentRegionKey())->hintKey == region;
|
return ctx->GetItemLocation(loc)->GetArea() == area;
|
||||||
});
|
});
|
||||||
for(RandomizerCheck loc: locsInRegion){
|
for(RandomizerCheck loc: locsInRegion){
|
||||||
ctx->GetItemLocation(loc)->SetAsHinted();
|
ctx->GetItemLocation(loc)->SetAsHinted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AddHint(Text hint, const RandomizerCheck gossipStone, const std::vector<uint8_t>& colors = {}, HintType hintType = HINT_TYPE_NAMED_ITEM, const RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK) {
|
static void AddGossipStoneHint(Text hint,
|
||||||
|
const RandomizerCheck gossipStone,
|
||||||
|
const std::vector<uint8_t>& colors,
|
||||||
|
HintType hintType,
|
||||||
|
std::string distributionName,
|
||||||
|
const RandomizerCheck hintedLocation) {
|
||||||
//save hints as dummy items for writing to the spoiler log
|
//save hints as dummy items for writing to the spoiler log
|
||||||
//NewItem(gossipStone, Item{RG_HINT, hint, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE});
|
//NewItem(gossipStone, Item{RG_HINT, hint, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE});
|
||||||
//GetLocation(gossipStone)->SetPlacedItem(gossipStone);
|
//GetLocation(gossipStone)->SetPlacedItem(gossipStone);
|
||||||
|
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
ctx->AddHint((RandomizerHintKey)((gossipStone - RC_COLOSSUS_GOSSIP_STONE) + 1), AutoFormatHintText(hint), hintedLocation, hintType, GetHintRegion(ctx->GetItemLocation(hintedLocation)->GetParentRegionKey())->GetHint().GetText());
|
ctx->AddHint((RandomizerHintKey)((gossipStone - RC_COLOSSUS_GOSSIP_STONE) + 1), AutoFormatHintText(hint), hintedLocation, hintType, distributionName, ctx->GetItemLocation(hintedLocation)->GetArea());
|
||||||
ctx->GetItemLocation(gossipStone)->SetPlacedItem(RG_HINT);
|
ctx->GetItemLocation(gossipStone)->SetPlacedItem(RG_HINT); //RANDOTODO, better gossip stone to location to hint key system
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AddHintCopies(uint8_t copies, Text hint, std::vector<uint8_t> colours, HintType type, RandomizerCheck location = RC_UNKNOWN_CHECK, RandomizerCheck firstStone = RC_UNKNOWN_CHECK){
|
static void AddGossipStoneHintCopies(uint8_t copies,
|
||||||
|
Text hint,
|
||||||
|
std::vector<uint8_t> colours,
|
||||||
|
HintType type,
|
||||||
|
std::string distributionName,
|
||||||
|
RandomizerCheck location = RC_UNKNOWN_CHECK,
|
||||||
|
RandomizerCheck firstStone = RC_UNKNOWN_CHECK){
|
||||||
if (firstStone != RC_UNKNOWN_CHECK && copies > 0){
|
if (firstStone != RC_UNKNOWN_CHECK && copies > 0){
|
||||||
AddHint(hint, firstStone, colours, type, location);
|
AddGossipStoneHint(hint, firstStone, colours, type, distributionName, location);
|
||||||
copies -= 1;
|
copies -= 1;
|
||||||
}
|
}
|
||||||
for(int c=0; c<copies; c++){
|
for(int c=0; c<copies; c++){
|
||||||
@ -422,12 +387,11 @@ static void AddHintCopies(uint8_t copies, Text hint, std::vector<uint8_t> colour
|
|||||||
}
|
}
|
||||||
auto gossipStone = RandomElement(gossipStones, false);
|
auto gossipStone = RandomElement(gossipStones, false);
|
||||||
|
|
||||||
AddHint(hint, gossipStone, colours, type, location);
|
AddGossipStoneHint(hint, gossipStone, colours, type, distributionName, location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool CreateHint(RandomizerCheck hintedLocation, uint8_t copies, HintType type, std::string distributionName){
|
||||||
static bool CreateHint(RandomizerCheck hintedLocation, uint8_t copies, HintType type){
|
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
//get a gossip stone accessible without the hinted item
|
//get a gossip stone accessible without the hinted item
|
||||||
std::vector<RandomizerCheck> gossipStoneLocations;
|
std::vector<RandomizerCheck> gossipStoneLocations;
|
||||||
@ -443,30 +407,31 @@ static bool CreateHint(RandomizerCheck hintedLocation, uint8_t copies, HintType
|
|||||||
//make hint text
|
//make hint text
|
||||||
Text finalHint;
|
Text finalHint;
|
||||||
Text prefix = ::Hint(RHT_PREFIX).GetText();
|
Text prefix = ::Hint(RHT_PREFIX).GetText();
|
||||||
std::vector<uint8_t> colours = {QM_GREEN, QM_RED};
|
std::vector<uint8_t> colours;
|
||||||
if (type == HINT_TYPE_WOTH){
|
if (type == HINT_TYPE_WOTH){
|
||||||
Text regionText = GetHintRegion(ctx->GetItemLocation(hintedLocation)->GetParentRegionKey())->GetHint().GetText();
|
Text areaText = ::Hint(ctx->GetItemLocation(hintedLocation)->GetArea()).GetText();
|
||||||
finalHint = prefix + "%r#" + regionText + "#%w" + ::Hint(RHT_WAY_OF_THE_HERO).GetText();
|
finalHint = prefix + "%r#" + areaText + "#%w" + ::Hint(RHT_WAY_OF_THE_HERO).GetText();
|
||||||
colours = {QM_LBLUE};
|
colours = {QM_LBLUE};
|
||||||
}
|
}
|
||||||
else if(type == HINT_TYPE_BARREN){
|
else if(type == HINT_TYPE_BARREN){
|
||||||
Text regionText = GetHintRegion(ctx->GetItemLocation(hintedLocation)->GetParentRegionKey())->GetHint().GetText();
|
Text areaText = ::Hint(ctx->GetItemLocation(hintedLocation)->GetArea()).GetText();
|
||||||
finalHint = prefix + ::Hint(RHT_PLUNDERING).GetText() + "%r#" + regionText + "#%w" + ::Hint(RHT_FOOLISH).GetText();
|
finalHint = prefix + ::Hint(RHT_PLUNDERING).GetText() + "%r#" + areaText + "#%w" + ::Hint(RHT_FOOLISH).GetText();
|
||||||
colours = {QM_PINK};
|
colours = {QM_PINK};
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Text itemText = ctx->GetItemLocation(hintedLocation)->GetPlacedItem().GetHint().GetText();
|
Text itemText = ctx->GetItemLocation(hintedLocation)->GetPlacedItem().GetHint().GetText();
|
||||||
if (type >= HINT_TYPE_ALWAYS && type < HINT_TYPE_NAMED_ITEM){
|
if (type == HINT_TYPE_ITEM_LOCATION){
|
||||||
Text locationText = Rando::StaticData::GetLocation(hintedLocation)->GetHint()->GetText();
|
Text locationText = Rando::StaticData::GetLocation(hintedLocation)->GetHint()->GetText();
|
||||||
finalHint = prefix + "%r" + locationText + " %g#"+itemText+"#%w.";
|
finalHint = prefix + "%r" + locationText + " %g#"+itemText+"#%w.";
|
||||||
|
colours = {QM_GREEN, QM_RED};
|
||||||
}
|
}
|
||||||
else if (type == HINT_TYPE_NAMED_ITEM || type == HINT_TYPE_RANDOM){
|
else if (type == HINT_TYPE_ITEM_AREA){
|
||||||
Text regionText = GetHintRegion(ctx->GetItemLocation(hintedLocation)->GetParentRegionKey())->GetHint().GetText();
|
Text areaText = ::Hint(ctx->GetItemLocation(hintedLocation)->GetArea()).GetText();
|
||||||
// RANDOTODO: reconsider dungeon vs non-dungeon item location hints when boss shuffle mixed pools happens
|
|
||||||
if (Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()) {
|
if (Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()) {
|
||||||
finalHint = prefix+"%r#"+regionText+"#%w "+::Hint(RHT_HOARDS).GetText()+" %g#"+itemText+"#%w.";
|
finalHint = prefix+"%r#"+areaText+"#%w "+::Hint(RHT_HOARDS).GetText()+" %g#"+itemText+"#%w.";
|
||||||
|
colours = {QM_GREEN, QM_RED};
|
||||||
} else {
|
} else {
|
||||||
finalHint = prefix+"%r#"+itemText+"#%w "+::Hint(RHT_CAN_BE_FOUND_AT).GetText()+" %g#"+regionText+"#%w.";
|
finalHint = prefix+"%r#"+itemText+"#%w "+::Hint(RHT_CAN_BE_FOUND_AT).GetText()+" %g#"+areaText+"#%w.";
|
||||||
colours = {QM_RED, QM_GREEN};
|
colours = {QM_RED, QM_GREEN};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -482,13 +447,16 @@ static bool CreateHint(RandomizerCheck hintedLocation, uint8_t copies, HintType
|
|||||||
SPDLOG_DEBUG(finalHint.english);
|
SPDLOG_DEBUG(finalHint.english);
|
||||||
SPDLOG_DEBUG("\n\n");
|
SPDLOG_DEBUG("\n\n");
|
||||||
|
|
||||||
AddHintCopies(copies, finalHint, colours, type, hintedLocation, gossipStone);
|
AddGossipStoneHintCopies(copies, finalHint, colours, type, distributionName, hintedLocation, gossipStone);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static RandomizerCheck CreateRandomHint(std::vector<RandomizerCheck>& possibleHintLocations, uint8_t copies, HintType type) {
|
static RandomizerCheck CreateRandomHint(std::vector<RandomizerCheck>& possibleHintLocations,
|
||||||
|
uint8_t copies,
|
||||||
|
HintType type,
|
||||||
|
std::string distributionName) {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
|
||||||
//return if there aren't any hintable locations or gossip stones available
|
//return if there aren't any hintable locations or gossip stones available
|
||||||
@ -514,23 +482,25 @@ static RandomizerCheck CreateRandomHint(std::vector<RandomizerCheck>& possibleHi
|
|||||||
SPDLOG_DEBUG(ctx->GetItemLocation(hintedLocation)->GetPlacedItemName().GetEnglish());
|
SPDLOG_DEBUG(ctx->GetItemLocation(hintedLocation)->GetPlacedItemName().GetEnglish());
|
||||||
SPDLOG_DEBUG("\n");
|
SPDLOG_DEBUG("\n");
|
||||||
|
|
||||||
placed = CreateHint(hintedLocation, copies, type);
|
placed = CreateHint(hintedLocation, copies, type, distributionName);
|
||||||
}
|
}
|
||||||
if (type == HINT_TYPE_BARREN){
|
if (type == HINT_TYPE_BARREN){
|
||||||
SetAllInRegionAsHinted(GetHintRegion(ctx->GetItemLocation(hintedLocation)->GetParentRegionKey())->hintKey, possibleHintLocations);
|
SetAllInRegionAsHinted(ctx->GetItemLocation(hintedLocation)->GetArea(), possibleHintLocations);
|
||||||
}
|
}
|
||||||
return hintedLocation;
|
return hintedLocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::vector<RandomizerCheck> FilterHintability(std::vector<RandomizerCheck>& locations, const bool goodItemsOnly = false, const bool dungeonsOK = true){
|
static std::vector<RandomizerCheck> FilterHintability(std::vector<RandomizerCheck>& locations,
|
||||||
|
std::function<bool(RandomizerCheck)> extraFilter = NoFilter){
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
return FilterFromPool(locations, [goodItemsOnly, dungeonsOK, ctx](const RandomizerCheck loc) {
|
return FilterFromPool(locations, [extraFilter, ctx](const RandomizerCheck loc) {
|
||||||
return ctx->GetItemLocation(loc)->IsHintable() && !(ctx->GetItemLocation(loc)->IsHintedAt()) &&
|
return ctx->GetItemLocation(loc)->IsHintable() && !(ctx->GetItemLocation(loc)->IsHintedAt()
|
||||||
(!goodItemsOnly || ctx->GetItemLocation(loc)->GetPlacedItem().IsMajorItem()) && (dungeonsOK || Rando::StaticData::GetLocation(loc)->IsOverworld());
|
&& extraFilter(loc));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CreateJunkHint() {
|
static void CreateJunkHints(uint8_t numHints) {
|
||||||
|
for(uint8_t c = 0; c < numHints; c++){
|
||||||
//duplicate junk hints are possible for now
|
//duplicate junk hints are possible for now
|
||||||
const HintText junkHint = RandomElement(GetHintCategory(HintCategory::Junk));
|
const HintText junkHint = RandomElement(GetHintCategory(HintCategory::Junk));
|
||||||
Text hint = junkHint.GetText();
|
Text hint = junkHint.GetText();
|
||||||
@ -539,51 +509,20 @@ static void CreateJunkHint() {
|
|||||||
SPDLOG_DEBUG(hint.english);
|
SPDLOG_DEBUG(hint.english);
|
||||||
SPDLOG_DEBUG("\n\n");
|
SPDLOG_DEBUG("\n\n");
|
||||||
|
|
||||||
AddHintCopies(1, hint, {QM_PINK}, HINT_TYPE_JUNK);
|
AddGossipStoneHintCopies(1, hint, {QM_PINK}, HINT_TYPE_JUNK, "Junk");
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::vector<RandomizerCheck> CalculateBarrenRegions() {
|
|
||||||
auto ctx = Rando::Context::GetInstance();
|
|
||||||
std::vector<RandomizerCheck> barrenLocations = {};
|
|
||||||
std::vector<RandomizerCheck> potentiallyUsefulLocations = {};
|
|
||||||
|
|
||||||
for (RandomizerCheck loc : ctx->allLocations) {
|
|
||||||
// If a location has a major item or is a way of the hero location, it is not barren
|
|
||||||
if (ctx->GetItemLocation(loc)->GetPlacedItem().IsMajorItem() || ElementInContainer(loc, ctx->wothLocations)) {
|
|
||||||
AddElementsToPool(potentiallyUsefulLocations, std::vector{loc});
|
|
||||||
} else {
|
|
||||||
// Link's Pocket & Triforce Hunt "reward" shouldn't be considered for barren areas because it's clear what
|
|
||||||
// they have to a player.
|
|
||||||
if (loc != RC_LINKS_POCKET && loc != RC_TRIFORCE_COMPLETED) {
|
|
||||||
AddElementsToPool(barrenLocations, std::vector{loc});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Leave only locations at barren regions in the list
|
|
||||||
auto finalBarrenLocations = FilterFromPool(barrenLocations, [&potentiallyUsefulLocations](RandomizerCheck loc){
|
|
||||||
for (RandomizerCheck usefulLoc : potentiallyUsefulLocations) {
|
|
||||||
uint32_t barrenKey = GetLocationRegionuint32_t(loc);
|
|
||||||
uint32_t usefulKey = GetLocationRegionuint32_t(usefulLoc);
|
|
||||||
if (barrenKey == usefulKey) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
return finalBarrenLocations;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CreateTrialHints(uint8_t copies) {
|
static void CreateTrialHints(uint8_t copies) {
|
||||||
|
if (copies > 0) {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
Text prefix = ::Hint(RHT_PREFIX).GetText();
|
Text prefix = ::Hint(RHT_PREFIX).GetText();
|
||||||
//six trials
|
//six trials
|
||||||
if (ctx->GetOption(RSK_GANONS_TRIALS).IsNot(RO_GANONS_TRIALS_SKIP) && ctx->GetOption(RSK_TRIAL_COUNT).Is(6)) {
|
if (ctx->GetOption(RSK_GANONS_TRIALS).IsNot(RO_GANONS_TRIALS_SKIP) && ctx->GetOption(RSK_TRIAL_COUNT).Is(6)) {
|
||||||
AddHintCopies(copies, prefix + ::Hint(RHT_SIX_TRIALS).GetText(), {QM_PINK}, HINT_TYPE_TRIAL);
|
AddGossipStoneHintCopies(copies, prefix + ::Hint(RHT_SIX_TRIALS).GetText(), {QM_PINK}, HINT_TYPE_TRIAL, "Trial");
|
||||||
//zero trials
|
//zero trials
|
||||||
} else if (ctx->GetOption(RSK_GANONS_TRIALS).IsNot(RO_GANONS_TRIALS_SKIP) && ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {
|
} else if (ctx->GetOption(RSK_GANONS_TRIALS).IsNot(RO_GANONS_TRIALS_SKIP) && ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {
|
||||||
AddHintCopies(copies, prefix + ::Hint(RHT_ZERO_TRIALS).GetText(), {QM_YELLOW}, HINT_TYPE_TRIAL);
|
AddGossipStoneHintCopies(copies, prefix + ::Hint(RHT_ZERO_TRIALS).GetText(), {QM_YELLOW}, HINT_TYPE_TRIAL, "Trial");
|
||||||
//4 or 5 required trials
|
//4 or 5 required trials
|
||||||
} else if (ctx->GetOption(RSK_TRIAL_COUNT).Is(5) || ctx->GetOption(RSK_TRIAL_COUNT).Is(4)) {
|
} else if (ctx->GetOption(RSK_TRIAL_COUNT).Is(5) || ctx->GetOption(RSK_TRIAL_COUNT).Is(4)) {
|
||||||
//get skipped trials
|
//get skipped trials
|
||||||
@ -596,7 +535,7 @@ static void CreateTrialHints(uint8_t copies) {
|
|||||||
for (auto& trial : skippedTrials) {
|
for (auto& trial : skippedTrials) {
|
||||||
//make hint
|
//make hint
|
||||||
auto hint = prefix+"#"+trial->GetName()+"#"+::Hint(RHT_FOUR_TO_FIVE_TRIALS).GetText();
|
auto hint = prefix+"#"+trial->GetName()+"#"+::Hint(RHT_FOUR_TO_FIVE_TRIALS).GetText();
|
||||||
AddHintCopies(copies, hint, {QM_YELLOW}, HINT_TYPE_TRIAL);
|
AddGossipStoneHintCopies(copies, hint, {QM_YELLOW}, HINT_TYPE_TRIAL, "Trial");
|
||||||
}
|
}
|
||||||
//1 to 3 trials
|
//1 to 3 trials
|
||||||
} else if (ctx->GetOption(RSK_TRIAL_COUNT).Value<uint8_t>() >= 1 && ctx->GetOption(RSK_TRIAL_COUNT).Value<uint8_t>() <= 3) {
|
} else if (ctx->GetOption(RSK_TRIAL_COUNT).Value<uint8_t>() >= 1 && ctx->GetOption(RSK_TRIAL_COUNT).Value<uint8_t>() <= 3) {
|
||||||
@ -610,7 +549,8 @@ static void CreateTrialHints(uint8_t copies) {
|
|||||||
for (auto& trial : requiredTrials) {
|
for (auto& trial : requiredTrials) {
|
||||||
//make hint
|
//make hint
|
||||||
auto hint = prefix+"#"+trial->GetName()+"#"+::Hint(RHT_ONE_TO_THREE_TRIALS).GetText();
|
auto hint = prefix+"#"+trial->GetName()+"#"+::Hint(RHT_ONE_TO_THREE_TRIALS).GetText();
|
||||||
AddHintCopies(copies, hint, {QM_PINK}, HINT_TYPE_TRIAL);
|
AddGossipStoneHintCopies(copies, hint, {QM_PINK}, HINT_TYPE_TRIAL, "Trial");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -623,7 +563,8 @@ void CreateGanonAndSheikText() {
|
|||||||
auto lightArrowLocation = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) {
|
auto lightArrowLocation = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) {
|
||||||
return ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_LIGHT_ARROWS;
|
return ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_LIGHT_ARROWS;
|
||||||
});
|
});
|
||||||
Text lightArrowArea = GetHintRegion(ctx->GetItemLocation(lightArrowLocation[0])->GetParentRegionKey())->GetHint().GetText();
|
RandomizerArea lightArrowArea = ctx->GetItemLocation(lightArrowLocation[0])->GetArea();
|
||||||
|
Text LightArrowAreaText = ::Hint(lightArrowArea).GetText();
|
||||||
std::vector<RandomizerCheck> locsToCheck = {RC_GANONDORF_HINT};
|
std::vector<RandomizerCheck> locsToCheck = {RC_GANONDORF_HINT};
|
||||||
|
|
||||||
//If there is no light arrow location, it was in the player's inventory at the start
|
//If there is no light arrow location, it was in the player's inventory at the start
|
||||||
@ -632,7 +573,7 @@ void CreateGanonAndSheikText() {
|
|||||||
ganonHintText = hint.GetText()+::Hint(RHT_YOUR_POCKET).GetText();
|
ganonHintText = hint.GetText()+::Hint(RHT_YOUR_POCKET).GetText();
|
||||||
lightArrowHintLoc = "Link's Pocket";
|
lightArrowHintLoc = "Link's Pocket";
|
||||||
} else {
|
} else {
|
||||||
ganonHintText = hint.GetText() + "%r" + lightArrowArea + "%w";
|
ganonHintText = hint.GetText() + "%r" + LightArrowAreaText + "%w";
|
||||||
lightArrowHintLoc = Rando::StaticData::GetLocation(lightArrowLocation[0])->GetName();
|
lightArrowHintLoc = Rando::StaticData::GetLocation(lightArrowLocation[0])->GetName();
|
||||||
}
|
}
|
||||||
ganonHintText = ganonHintText + "!";
|
ganonHintText = ganonHintText + "!";
|
||||||
@ -641,7 +582,7 @@ void CreateGanonAndSheikText() {
|
|||||||
auto masterSwordLocation = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) {
|
auto masterSwordLocation = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) {
|
||||||
return ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_MASTER_SWORD;
|
return ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_MASTER_SWORD;
|
||||||
});
|
});
|
||||||
Text masterSwordArea = GetHintRegion(ctx->GetItemLocation(masterSwordLocation[0])->GetParentRegionKey())->GetHint().GetText();
|
Text masterSwordArea = ::Hint(ctx->GetItemLocation(masterSwordLocation[0])->GetArea()).GetText();
|
||||||
|
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) {
|
if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) {
|
||||||
// Add second text box
|
// Add second text box
|
||||||
@ -657,10 +598,10 @@ void CreateGanonAndSheikText() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//CreateMessageFromTextObject(0x70CC, 0, 2, 3, AddColorsAndFormat(ganonHintText));
|
//CreateMessageFromTextObject(0x70CC, 0, 2, 3, AddColorsAndFormat(ganonHintText));
|
||||||
ctx->AddHint(RH_GANONDORF_HINT, AutoFormatHintText(ganonHintText), lightArrowLocation[0], HINT_TYPE_STATIC, GetHintRegion(ctx->GetItemLocation(lightArrowLocation[0])->GetParentRegionKey())->GetHint().GetText());
|
ctx->AddHint(RH_GANONDORF_HINT, AutoFormatHintText(ganonHintText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea);
|
||||||
|
|
||||||
if(!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)){
|
if(!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)){
|
||||||
sheikText = ::Hint(RHT_SHEIK_LIGHT_ARROW_HINT).GetText() + lightArrowArea + "%w.";
|
sheikText = ::Hint(RHT_SHEIK_LIGHT_ARROW_HINT).GetText() + LightArrowAreaText + "%w.";
|
||||||
locsToCheck = {RC_GANONDORF_HINT, RC_SHEIK_HINT_GC, RC_SHEIK_HINT_MQ_GC};
|
locsToCheck = {RC_GANONDORF_HINT, RC_SHEIK_HINT_GC, RC_SHEIK_HINT_MQ_GC};
|
||||||
|
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) {
|
if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) {
|
||||||
@ -671,11 +612,11 @@ void CreateGanonAndSheikText() {
|
|||||||
if (IsReachableWithout(locsToCheck, lightArrowLocation[0], true)) {
|
if (IsReachableWithout(locsToCheck, lightArrowLocation[0], true)) {
|
||||||
ctx->GetItemLocation(lightArrowLocation[0])->SetAsHinted();
|
ctx->GetItemLocation(lightArrowLocation[0])->SetAsHinted();
|
||||||
}
|
}
|
||||||
ctx->AddHint(RH_SHEIK_LIGHT_ARROWS, AutoFormatHintText(sheikText), lightArrowLocation[0], HINT_TYPE_STATIC, lightArrowArea);
|
ctx->AddHint(RH_SHEIK_LIGHT_ARROWS, AutoFormatHintText(sheikText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea);
|
||||||
|
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) {
|
if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) {
|
||||||
if (IsReachableWithout(locsToCheck, masterSwordLocation[0], true)) {
|
if (IsReachableWithout(locsToCheck, masterSwordLocation[0], true)) {
|
||||||
ctx->GetItemLocation(masterSwordLocation[0])->SetHintKey(RH_GANONDORF_HINT);
|
ctx->GetItemLocation(masterSwordLocation[0])->AddHintedBy(RH_GANONDORF_HINT);
|
||||||
ctx->GetItemLocation(masterSwordLocation[0])->SetAsHinted();
|
ctx->GetItemLocation(masterSwordLocation[0])->SetAsHinted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -698,7 +639,7 @@ static Text BuildDungeonRewardText(const RandomizerGet itemKey, bool isChild) {
|
|||||||
|
|
||||||
// RANDOTODO implement colors for locations
|
// RANDOTODO implement colors for locations
|
||||||
return Text() + rewardString +
|
return Text() + rewardString +
|
||||||
GetHintRegion(ctx->GetItemLocation(location)->GetParentRegionKey())->GetHint().GetText().Capitalize() +
|
::Hint(ctx->GetItemLocation(location)->GetArea()).GetText().Capitalize() +
|
||||||
"...^";
|
"...^";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -836,7 +777,7 @@ void CreateAltarText() {
|
|||||||
} else {
|
} else {
|
||||||
childAltarText = BuildDoorOfTimeText();
|
childAltarText = BuildDoorOfTimeText();
|
||||||
}
|
}
|
||||||
ctx->AddHint(RH_ALTAR_CHILD, childAltarText, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
ctx->AddHint(RH_ALTAR_CHILD, childAltarText, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
|
|
||||||
//CreateMessageFromTextObject(0x7040, 0, 2, 3, AddColorsAndFormat(childAltarText, {QM_GREEN, QM_RED, QM_BLUE}));
|
//CreateMessageFromTextObject(0x7040, 0, 2, 3, AddColorsAndFormat(childAltarText, {QM_GREEN, QM_RED, QM_BLUE}));
|
||||||
|
|
||||||
@ -868,7 +809,7 @@ void CreateAltarText() {
|
|||||||
//End
|
//End
|
||||||
::Hint(RHT_ADULT_ALTAR_TEXT_END).GetText();
|
::Hint(RHT_ADULT_ALTAR_TEXT_END).GetText();
|
||||||
//CreateMessageFromTextObject(0x7088, 0, 2, 3, AddColorsAndFormat(adultAltarText, {QM_RED, QM_YELLOW, QM_GREEN, QM_RED, QM_BLUE, QM_YELLOW, QM_PINK, QM_RED, QM_RED, QM_RED, QM_RED}));
|
//CreateMessageFromTextObject(0x7088, 0, 2, 3, AddColorsAndFormat(adultAltarText, {QM_RED, QM_YELLOW, QM_GREEN, QM_RED, QM_BLUE, QM_YELLOW, QM_PINK, QM_RED, QM_RED, QM_RED, QM_RED}));
|
||||||
ctx->AddHint(RH_ALTAR_ADULT, adultAltarText, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
ctx->AddHint(RH_ALTAR_ADULT, adultAltarText, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateMerchantsHints() {
|
void CreateMerchantsHints() {
|
||||||
@ -911,17 +852,16 @@ void CreateSpecialItemHint(uint32_t item, RandomizerHintKey hintKey, std::vector
|
|||||||
ctx->GetItemLocation(location)->SetAsHinted();
|
ctx->GetItemLocation(location)->SetAsHinted();
|
||||||
}
|
}
|
||||||
|
|
||||||
Text area = GetHintRegion(ctx->GetItemLocation(location)->GetParentRegionKey())->GetHint().GetText();
|
RandomizerArea area = ctx->GetItemLocation(location)->GetArea();
|
||||||
textLoc = ::Hint(text1).GetText() + area + ::Hint(text2).GetText();
|
textLoc = ::Hint(text1).GetText() + ::Hint(area).GetText() + ::Hint(text2).GetText();
|
||||||
nameLoc = Rando::StaticData::GetLocation(location)->GetName();
|
nameLoc = Rando::StaticData::GetLocation(location)->GetName();
|
||||||
ctx->AddHint(hintKey, AutoFormatHintText(textLoc), location, HINT_TYPE_STATIC, area);
|
ctx->AddHint(hintKey, AutoFormatHintText(textLoc), location, HINT_TYPE_STATIC, "Static", area);
|
||||||
} else {
|
} else {
|
||||||
textLoc = Text();
|
textLoc = Text();
|
||||||
nameLoc = "";
|
nameLoc = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CreateWarpSongTexts() {
|
void CreateWarpSongTexts() {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
if (!ctx->GetOption(RSK_WARP_SONG_HINTS)) {
|
if (!ctx->GetOption(RSK_WARP_SONG_HINTS)) {
|
||||||
@ -937,47 +877,42 @@ void CreateWarpSongTexts() {
|
|||||||
auto warpSongEntrances = GetShuffleableEntrances(EntranceType::WarpSong, false);
|
auto warpSongEntrances = GetShuffleableEntrances(EntranceType::WarpSong, false);
|
||||||
|
|
||||||
for (auto entrance : warpSongEntrances) {
|
for (auto entrance : warpSongEntrances) {
|
||||||
Text resolvedHint;
|
auto destination = entrance->GetConnectedRegion()->GetArea();
|
||||||
// Start with entrance location text
|
Text resolvedHint = ::Hint(destination).GetText();
|
||||||
auto region = entrance->GetConnectedRegion()->regionName;
|
// If no Hint Area, use Region text
|
||||||
resolvedHint = Text{"","",""} + region;
|
if (destination == RA_NONE) {
|
||||||
|
resolvedHint = Text{"","",""} + entrance->GetConnectedRegion()->regionName;
|
||||||
auto destination = entrance->GetConnectedRegion()->GetHint().GetText();
|
|
||||||
// Prefer hint location when available
|
|
||||||
if (destination.GetEnglish() != "No Hint") {
|
|
||||||
resolvedHint = destination;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (entrance->GetIndex()) {
|
switch (entrance->GetIndex()) {
|
||||||
case 0x0600: // minuet
|
case 0x0600: // minuet RANDOTODO make an entrance enum and use it here
|
||||||
warpMinuetText = resolvedHint;
|
warpMinuetText = resolvedHint;
|
||||||
ctx->AddHint(RH_MINUET_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, resolvedHint);
|
ctx->AddHint(RH_MINUET_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", destination);
|
||||||
break;
|
break;
|
||||||
case 0x04F6: // bolero
|
case 0x04F6: // bolero
|
||||||
warpBoleroText = resolvedHint;
|
warpBoleroText = resolvedHint;
|
||||||
ctx->AddHint(RH_BOLERO_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, resolvedHint);
|
ctx->AddHint(RH_BOLERO_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", destination);
|
||||||
break;
|
break;
|
||||||
case 0x0604: // serenade
|
case 0x0604: // serenade
|
||||||
warpSerenadeText = resolvedHint;
|
warpSerenadeText = resolvedHint;
|
||||||
ctx->AddHint(RH_SERENADE_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, resolvedHint);
|
ctx->AddHint(RH_SERENADE_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", destination);
|
||||||
break;
|
break;
|
||||||
case 0x01F1: // requiem
|
case 0x01F1: // requiem
|
||||||
warpRequiemText = resolvedHint;
|
warpRequiemText = resolvedHint;
|
||||||
ctx->AddHint(RH_REQUIEM_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, resolvedHint);
|
ctx->AddHint(RH_REQUIEM_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", destination);
|
||||||
break;
|
break;
|
||||||
case 0x0568: // nocturne
|
case 0x0568: // nocturne
|
||||||
warpNocturneText = resolvedHint;
|
warpNocturneText = resolvedHint;
|
||||||
ctx->AddHint(RH_NOCTURNE_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, resolvedHint);
|
ctx->AddHint(RH_NOCTURNE_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", destination);
|
||||||
break;
|
break;
|
||||||
case 0x05F4: // prelude
|
case 0x05F4: // prelude
|
||||||
warpPreludeText = resolvedHint;
|
warpPreludeText = resolvedHint;
|
||||||
ctx->AddHint(RH_PRELUDE_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, resolvedHint);
|
ctx->AddHint(RH_PRELUDE_WARP_LOC, resolvedHint, RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", destination);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t getRandomWeight(int32_t totalWeight){
|
int32_t getRandomWeight(int32_t totalWeight){
|
||||||
if (totalWeight <= 1){
|
if (totalWeight <= 1){
|
||||||
return 1;
|
return 1;
|
||||||
@ -985,11 +920,8 @@ int32_t getRandomWeight(int32_t totalWeight){
|
|||||||
return Random(1,totalWeight);
|
return Random(1,totalWeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DistributeHints(std::vector<uint8_t>& selected, size_t stoneCount, std::vector<HintDistributionSetting> distTable, uint8_t junkWieght, bool addFixed = true){
|
||||||
static void DistrabuteHints(std::array<uint8_t, HINT_TYPE_MAX>& selected, uint8_t stoneCount, std::array<HintDistributionSetting, (int)HINT_TYPE_MAX> distTable, bool addFixed = true){
|
int32_t totalWeight = junkWieght;
|
||||||
int32_t totalWeight = 0;
|
|
||||||
|
|
||||||
distTable[HINT_TYPE_JUNK].copies = 1; //Junk is hardcoded to 1 copy to avoid fill in issues
|
|
||||||
|
|
||||||
for (HintDistributionSetting setting: distTable){
|
for (HintDistributionSetting setting: distTable){
|
||||||
totalWeight += setting.weight;
|
totalWeight += setting.weight;
|
||||||
@ -998,102 +930,68 @@ static void DistrabuteHints(std::array<uint8_t, HINT_TYPE_MAX>& selected, uint8_
|
|||||||
stoneCount -= setting.fixed * setting.copies;
|
stoneCount -= setting.fixed * setting.copies;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t currentWeight = getRandomWeight(totalWeight);
|
int32_t currentWeight = getRandomWeight(totalWeight);
|
||||||
while(stoneCount > 0 && totalWeight > 0){
|
while(stoneCount > 0 && totalWeight > 0){
|
||||||
for (uint8_t hintType = 0; hintType < HINT_TYPE_MAX; hintType++){
|
for (uint8_t distribution = 0; distribution < distTable.size(); distribution++){
|
||||||
currentWeight -= distTable[hintType].weight;
|
currentWeight -= distTable[distribution].weight;
|
||||||
if (currentWeight <= 0){
|
if (currentWeight <= 0){
|
||||||
if (stoneCount >= distTable[hintType].copies){
|
if (stoneCount >= distTable[distribution].copies){
|
||||||
selected[hintType] += 1;
|
selected[distribution] += 1;
|
||||||
stoneCount -= distTable[hintType].copies;
|
stoneCount -= distTable[distribution].copies;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
totalWeight -= distTable[hintType].weight;
|
totalWeight -= distTable[distribution].weight;
|
||||||
distTable[hintType].weight = 0;
|
distTable[distribution].weight = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//if there's still weight, then it's junk
|
||||||
|
if (currentWeight > 0){
|
||||||
|
selected[selected.size()-1] += 1;
|
||||||
|
stoneCount -= 1;
|
||||||
|
}
|
||||||
currentWeight = getRandomWeight(totalWeight);
|
currentWeight = getRandomWeight(totalWeight);
|
||||||
}
|
}
|
||||||
//if stones are left, assign junk
|
//if stones are left, assign junk
|
||||||
if (stoneCount > 0){
|
if (stoneCount > 0){
|
||||||
selected[HINT_TYPE_JUNK] += stoneCount;
|
selected[selected.size()-1] += stoneCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t PlaceHints(std::vector<uint8_t>& selectedHints,
|
||||||
uint8_t PlaceHints(std::array<uint8_t, HINT_TYPE_MAX>& selectedHints,
|
std::vector<HintDistributionSetting>& distTable){
|
||||||
std::array<HintDistributionSetting, (int)HINT_TYPE_MAX>& distTable,
|
|
||||||
uint8_t* remainingDungeonWothHints,
|
|
||||||
uint8_t* remainingDungeonBarrenHints){
|
|
||||||
|
|
||||||
std::vector<RandomizerCheck> blankList = {};
|
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
uint8_t curSlot = 0;
|
||||||
std::array<std::vector<RandomizerCheck>, HINT_TYPE_MAX> hintTypePools = {
|
for (HintDistributionSetting distribution : distTable){
|
||||||
blankList, //static, should not happen
|
std::vector<RandomizerCheck> hintTypePool = FilterHintability(ctx->allLocations, distribution.filter);
|
||||||
blankList, //trial, should not happen
|
for (uint8_t numHint = 0; numHint < selectedHints[curSlot]; numHint++){
|
||||||
ctx->wothLocations, //woth
|
|
||||||
CalculateBarrenRegions(), //Barren
|
|
||||||
blankList, //enternce, not yet implemented
|
|
||||||
blankList, // always, should not happen
|
|
||||||
FilterFromPool(ctx->allLocations, [](const RandomizerCheck loc){return Rando::StaticData::GetLocation(loc)->GetHint()->GetType() == HintCategory::Sometimes;}), //sometimes
|
|
||||||
FilterFromPool(ctx->allLocations, [](const RandomizerCheck loc){return Rando::StaticData::GetLocation(loc)->IsCategory(Category::cSong);}), //songs
|
|
||||||
FilterFromPool(ctx->allLocations, [](const RandomizerCheck loc){return Rando::StaticData::GetLocation(loc)->IsOverworld();}), //overworld
|
|
||||||
FilterFromPool(ctx->allLocations, [](const RandomizerCheck loc){return Rando::StaticData::GetLocation(loc)->IsDungeon();}), //dungeon
|
|
||||||
ctx->allLocations, //Named item
|
|
||||||
ctx->allLocations, //random
|
|
||||||
blankList //junk, irrelevent
|
|
||||||
};
|
|
||||||
|
|
||||||
for (uint8_t hintType = 0; hintType < HINT_TYPE_MAX; hintType++){
|
|
||||||
for (uint8_t numHint = 0; numHint < selectedHints[hintType]; numHint++){
|
|
||||||
|
|
||||||
SPDLOG_DEBUG("Attempting to make hint of type: ");
|
SPDLOG_DEBUG("Attempting to make hint of type: ");
|
||||||
SPDLOG_DEBUG(hintTypeNames[hintType]);
|
SPDLOG_DEBUG(hintTypeNames[static_cast<int>(distribution.type)]);
|
||||||
SPDLOG_DEBUG("\n");
|
SPDLOG_DEBUG("\n");
|
||||||
|
|
||||||
RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK;
|
RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK;
|
||||||
|
|
||||||
//create the appropriate hint for the type
|
hintedLocation = CreateRandomHint(hintTypePool, distribution.copies, distribution.type, distribution.name);
|
||||||
if (hintType == HINT_TYPE_JUNK){
|
|
||||||
CreateJunkHint();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
hintTypePools[hintType] = FilterHintability(hintTypePools[hintType], (hintType == HINT_TYPE_NAMED_ITEM));
|
|
||||||
hintedLocation = CreateRandomHint(hintTypePools[hintType], distTable[hintType].copies, (HintType)hintType);
|
|
||||||
if (hintedLocation == RC_UNKNOWN_CHECK){ //if hint failed to place
|
if (hintedLocation == RC_UNKNOWN_CHECK){ //if hint failed to place
|
||||||
uint8_t hintsToRemove = (selectedHints[hintType] - numHint) * distTable[hintType].copies;
|
uint8_t hintsToRemove = (selectedHints[curSlot] - numHint) * distribution.copies;
|
||||||
selectedHints[hintType] = 0; //RANDOTODO is there a better way to filter out things hinted between hintTypePools creation and now
|
selectedHints[curSlot] = 0;
|
||||||
distTable[hintType].weight = 0;
|
distTable[curSlot].copies = 0;
|
||||||
return hintsToRemove;
|
return hintsToRemove;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
switch(hintType){
|
|
||||||
case HINT_TYPE_WOTH:
|
|
||||||
if(Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()){
|
if(Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()){
|
||||||
*remainingDungeonWothHints -= 1;
|
distribution.dungeonLimit -= 1;
|
||||||
if (*remainingDungeonWothHints <= 0){
|
if (distribution.dungeonLimit == 0){
|
||||||
hintTypePools[hintType] = FilterHintability(hintTypePools[hintType], false, false);
|
FilterFromPool(hintTypePool, FilterOverworldLocations);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case HINT_TYPE_BARREN:
|
|
||||||
if (Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()){
|
|
||||||
*remainingDungeonBarrenHints -= 1;
|
|
||||||
if (*remainingDungeonBarrenHints <= 0){
|
|
||||||
hintTypePools[hintType] = FilterHintability(hintTypePools[hintType], false, false);
|
|
||||||
}
|
}
|
||||||
|
selectedHints[curSlot] = 0;
|
||||||
|
curSlot += 1;
|
||||||
}
|
}
|
||||||
break;
|
CreateJunkHints(selectedHints[selectedHints.size() - 1]);
|
||||||
}
|
|
||||||
}
|
|
||||||
selectedHints[hintType] = 0;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1101,10 +999,7 @@ void CreateStoneHints() {
|
|||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
SPDLOG_DEBUG("\nNOW CREATING HINTS\n");
|
SPDLOG_DEBUG("\nNOW CREATING HINTS\n");
|
||||||
const HintSetting& hintSetting = hintSettingTable[ctx->GetOption(RSK_HINT_DISTRIBUTION).Value<uint8_t>()];
|
const HintSetting& hintSetting = hintSettingTable[ctx->GetOption(RSK_HINT_DISTRIBUTION).Value<uint8_t>()];
|
||||||
std::array<HintDistributionSetting, (int)HINT_TYPE_MAX> distTable = hintSetting.distTable;
|
std::vector<HintDistributionSetting> distTable = hintSetting.distTable;
|
||||||
|
|
||||||
uint8_t* remainingDungeonWothHints = new uint8_t(hintSetting.dungeonsWothLimit);
|
|
||||||
uint8_t* remainingDungeonBarrenHints = new uint8_t(hintSetting.dungeonsBarrenLimit);
|
|
||||||
|
|
||||||
// Apply Special hint exclusions with no requirements
|
// Apply Special hint exclusions with no requirements
|
||||||
if (ctx->GetOption(RSK_KAK_10_SKULLS_HINT)){
|
if (ctx->GetOption(RSK_KAK_10_SKULLS_HINT)){
|
||||||
@ -1130,8 +1025,7 @@ void CreateStoneHints() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add 'always' location hints
|
// Add 'always' location hints
|
||||||
auto alwaysCopies = distTable[static_cast<int>(HINT_TYPE_ALWAYS)].copies;
|
if (hintSetting.alwaysCopies > 0) {
|
||||||
if (alwaysCopies > 0) {
|
|
||||||
// Only filter locations that had a random item placed at them (e.g. don't get cow locations if shuffle cows is
|
// Only filter locations that had a random item placed at them (e.g. don't get cow locations if shuffle cows is
|
||||||
// off)
|
// off)
|
||||||
auto alwaysHintLocations = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) {
|
auto alwaysHintLocations = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) {
|
||||||
@ -1150,24 +1044,25 @@ void CreateStoneHints() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (RandomizerCheck location : alwaysHintLocations) {
|
for (RandomizerCheck location : alwaysHintLocations) {
|
||||||
CreateHint(location, alwaysCopies, HINT_TYPE_ALWAYS);
|
CreateHint(location, hintSetting.alwaysCopies, HINT_TYPE_ITEM_LOCATION, "Always");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add 'trial' location hints
|
//Add 'trial' location hints
|
||||||
auto trialCopies = distTable[static_cast<int>(HINT_TYPE_TRIAL)].copies;
|
CreateTrialHints(hintSetting.trialCopies);
|
||||||
if (trialCopies > 0) {
|
|
||||||
CreateTrialHints(trialCopies);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t totalStones = GetEmptyGossipStones().size();
|
size_t totalStones = GetEmptyGossipStones().size();
|
||||||
std::array<uint8_t, HINT_TYPE_MAX> selectedHints = {};
|
std::vector<uint8_t> selectedHints = {};
|
||||||
DistrabuteHints(selectedHints, totalStones, distTable);
|
for (uint8_t c=0; c < distTable.size(); c++){
|
||||||
|
selectedHints.push_back(0);
|
||||||
|
}
|
||||||
|
selectedHints.push_back(0);
|
||||||
|
DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight);
|
||||||
|
|
||||||
while(totalStones != 0){
|
while(totalStones != 0){
|
||||||
totalStones = PlaceHints(selectedHints, distTable, remainingDungeonWothHints, remainingDungeonBarrenHints);
|
totalStones = PlaceHints(selectedHints, distTable);
|
||||||
if (totalStones != 0){
|
if (totalStones != 0){
|
||||||
DistrabuteHints(selectedHints, totalStones, distTable, false);
|
DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,19 +8,36 @@
|
|||||||
#include "random.hpp"
|
#include "random.hpp"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
struct HintDistributionSetting {
|
struct HintDistributionSetting {
|
||||||
|
std::string name;
|
||||||
HintType type;
|
HintType type;
|
||||||
size_t weight;
|
uint32_t weight;
|
||||||
uint8_t fixed;
|
uint8_t fixed;
|
||||||
uint8_t copies;
|
uint8_t copies;
|
||||||
|
std::function<bool(RandomizerCheck)> filter;
|
||||||
|
uint8_t dungeonLimit;
|
||||||
|
|
||||||
|
HintDistributionSetting(std::string _name,
|
||||||
|
HintType _type,
|
||||||
|
uint32_t _weight,
|
||||||
|
uint8_t _fixed,
|
||||||
|
uint8_t _copies,
|
||||||
|
std::function<bool(RandomizerCheck)> _filter,
|
||||||
|
uint8_t _dungeonLimit = 40){
|
||||||
|
name = _name;
|
||||||
|
type = _type;
|
||||||
|
weight = _weight;
|
||||||
|
fixed = _fixed;
|
||||||
|
copies = _copies;
|
||||||
|
filter = _filter;
|
||||||
|
dungeonLimit = _dungeonLimit;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HintSetting {
|
struct HintSetting {
|
||||||
using DistributionTable = std::array<HintDistributionSetting, static_cast<int>(HINT_TYPE_MAX)>;
|
uint8_t alwaysCopies;
|
||||||
|
uint8_t trialCopies;
|
||||||
uint8_t dungeonsWothLimit;
|
uint8_t junkWeight;
|
||||||
uint8_t dungeonsBarrenLimit;
|
std::vector<HintDistributionSetting> distTable;
|
||||||
bool namedItemsRequired;
|
|
||||||
DistributionTable distTable;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class HintCategory {
|
enum class HintCategory {
|
||||||
@ -197,7 +214,6 @@ extern std::array<DungeonHintInfo, 10> dungeonInfoData;
|
|||||||
|
|
||||||
extern std::array<ConditionalAlwaysHint, 10> conditionalAlwaysHints;
|
extern std::array<ConditionalAlwaysHint, 10> conditionalAlwaysHints;
|
||||||
|
|
||||||
extern RandomizerHintTextKey GetHintRegionHintKey(const RandomizerRegion area);
|
|
||||||
extern void CreateAllHints();
|
extern void CreateAllHints();
|
||||||
extern void CreateWarpSongTexts();
|
extern void CreateWarpSongTexts();
|
||||||
|
|
||||||
|
@ -86,14 +86,14 @@ bool LocationAccess::CanBuy() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Area::Area() = default;
|
Area::Area() = default;
|
||||||
Area::Area(std::string regionName_, std::string scene_, RandomizerHintTextKey hintKey_,
|
Area::Area(std::string regionName_, std::string scene_, RandomizerArea area,
|
||||||
bool timePass_,
|
bool timePass_,
|
||||||
std::vector<EventAccess> events_,
|
std::vector<EventAccess> events_,
|
||||||
std::vector<LocationAccess> locations_,
|
std::vector<LocationAccess> locations_,
|
||||||
std::list<Rando::Entrance> exits_)
|
std::list<Rando::Entrance> exits_)
|
||||||
: regionName(std::move(regionName_)),
|
: regionName(std::move(regionName_)),
|
||||||
scene(std::move(scene_)),
|
scene(std::move(scene_)),
|
||||||
hintKey(hintKey_),
|
area(area),
|
||||||
timePass(timePass_),
|
timePass(timePass_),
|
||||||
events(std::move(events_)),
|
events(std::move(events_)),
|
||||||
locations(std::move(locations_)),
|
locations(std::move(locations_)),
|
||||||
@ -254,10 +254,10 @@ void AreaTable_Init() {
|
|||||||
randoCtx = Context::GetInstance();
|
randoCtx = Context::GetInstance();
|
||||||
//Clear the array from any previous playthrough attempts. This is important so that
|
//Clear the array from any previous playthrough attempts. This is important so that
|
||||||
//locations which appear in both MQ and Vanilla dungeons don't get set in both areas.
|
//locations which appear in both MQ and Vanilla dungeons don't get set in both areas.
|
||||||
areaTable.fill(Area("Invalid Area", "Invalid Area", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {}));
|
areaTable.fill(Area("Invalid Area", "Invalid Area", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {}));
|
||||||
|
|
||||||
//name, scene, hint text, events, locations, exits
|
//name, scene, hint text, events, locations, exits
|
||||||
areaTable[RR_ROOT] = Area("Root", "", RHT_LINKS_POCKET, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ROOT] = Area("Root", "", RA_LINKS_POCKET, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LINKS_POCKET, {[]{return true;}}),
|
LocationAccess(RC_LINKS_POCKET, {[]{return true;}}),
|
||||||
LocationAccess(RC_TRIFORCE_COMPLETED, {[]{return CanCompleteTriforce;}}),
|
LocationAccess(RC_TRIFORCE_COMPLETED, {[]{return CanCompleteTriforce;}}),
|
||||||
@ -267,7 +267,7 @@ void AreaTable_Init() {
|
|||||||
Entrance(RR_ROOT_EXITS, {[]{return true;}})
|
Entrance(RR_ROOT_EXITS, {[]{return true;}})
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ROOT_EXITS] = Area("Root Exits", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ROOT_EXITS] = Area("Root Exits", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_CHILD_SPAWN, {[]{return IsChild;}}),
|
Entrance(RR_CHILD_SPAWN, {[]{return IsChild;}}),
|
||||||
Entrance(RR_ADULT_SPAWN, {[]{return IsAdult;}}),
|
Entrance(RR_ADULT_SPAWN, {[]{return IsAdult;}}),
|
||||||
@ -279,42 +279,42 @@ void AreaTable_Init() {
|
|||||||
Entrance(RR_PRELUDE_OF_LIGHT_WARP, {[]{return CanPlay(PreludeOfLight) && CanLeaveForest;}}),
|
Entrance(RR_PRELUDE_OF_LIGHT_WARP, {[]{return CanPlay(PreludeOfLight) && CanLeaveForest;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_CHILD_SPAWN] = Area("Child Spawn", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_CHILD_SPAWN] = Area("Child Spawn", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KF_LINKS_HOUSE, {[]{return true;}}),
|
Entrance(RR_KF_LINKS_HOUSE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ADULT_SPAWN] = Area("Adult Spawn", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ADULT_SPAWN] = Area("Adult Spawn", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MINUET_OF_FOREST_WARP] = Area("Minuet of Forest Warp", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_MINUET_OF_FOREST_WARP] = Area("Minuet of Forest Warp", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}),
|
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_BOLERO_OF_FIRE_WARP] = Area("Bolero of Fire Warp", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_BOLERO_OF_FIRE_WARP] = Area("Bolero of Fire Warp", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return true;}}),
|
Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SERENADE_OF_WATER_WARP] = Area("Serenade of Water Warp", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SERENADE_OF_WATER_WARP] = Area("Serenade of Water Warp", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_REQUIEM_OF_SPIRIT_WARP] = Area("Requiem of Spirit Warp", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_REQUIEM_OF_SPIRIT_WARP] = Area("Requiem of Spirit Warp", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_NOCTURNE_OF_SHADOW_WARP] = Area("Nocturne of Shadow Warp", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_NOCTURNE_OF_SHADOW_WARP] = Area("Nocturne of Shadow Warp", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, {[]{return true;}}),
|
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_PRELUDE_OF_LIGHT_WARP] = Area("Prelude of Light Warp", "", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_PRELUDE_OF_LIGHT_WARP] = Area("Prelude of Light Warp", "", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "logic.hpp"
|
#include "logic.hpp"
|
||||||
#include "hint_list.hpp"
|
#include "hint_list.hpp"
|
||||||
#include "fill.hpp"
|
#include "fill.hpp"
|
||||||
|
#include "../randomizerTypes.h"
|
||||||
#include "../context.h"
|
#include "../context.h"
|
||||||
|
|
||||||
typedef bool (*ConditionFn)();
|
typedef bool (*ConditionFn)();
|
||||||
@ -121,7 +122,7 @@ namespace Rando {
|
|||||||
class Area {
|
class Area {
|
||||||
public:
|
public:
|
||||||
Area();
|
Area();
|
||||||
Area(std::string regionName_, std::string scene_, RandomizerHintTextKey hintKey_,
|
Area(std::string regionName_, std::string scene_, RandomizerArea area,
|
||||||
bool timePass_,
|
bool timePass_,
|
||||||
std::vector<EventAccess> events_,
|
std::vector<EventAccess> events_,
|
||||||
std::vector<LocationAccess> locations_,
|
std::vector<LocationAccess> locations_,
|
||||||
@ -130,7 +131,7 @@ public:
|
|||||||
|
|
||||||
std::string regionName;
|
std::string regionName;
|
||||||
std::string scene;
|
std::string scene;
|
||||||
RandomizerHintTextKey hintKey;
|
RandomizerArea area;
|
||||||
bool timePass;
|
bool timePass;
|
||||||
std::vector<EventAccess> events;
|
std::vector<EventAccess> events;
|
||||||
std::vector<LocationAccess> locations;
|
std::vector<LocationAccess> locations;
|
||||||
@ -181,8 +182,8 @@ public:
|
|||||||
//Check to see if an exit can be access as both ages at both times of day
|
//Check to see if an exit can be access as both ages at both times of day
|
||||||
bool CheckAllAccess(RandomizerRegion exitKey);
|
bool CheckAllAccess(RandomizerRegion exitKey);
|
||||||
|
|
||||||
const HintText& GetHint() const {
|
RandomizerArea GetArea() const{
|
||||||
return Hint(hintKey);
|
return area;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Here checks conditional access based on whether or not both ages have
|
//Here checks conditional access based on whether or not both ages have
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_BottomOfTheWell() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Area("Bottom of the Well Entryway", "Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Area("Bottom of the Well Entryway", "Bottom of the Well", RA_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MAIN_AREA, {[]{return randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() && IsChild && (CanChildAttack || Nuts);}}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MAIN_AREA, {[]{return randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() && IsChild && (CanChildAttack || Nuts);}}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, {[]{return randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ() && IsChild;}}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, {[]{return randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ() && IsChild;}}),
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_BottomOfTheWell() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) {
|
if (randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) {
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MAIN_AREA] = Area("Bottom of the Well Main Area", "Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MAIN_AREA] = Area("Bottom of the Well Main Area", "Bottom of the Well", RA_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&StickPot, {[]{return true;}}),
|
EventAccess(&StickPot, {[]{return true;}}),
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
@ -54,7 +54,7 @@ void AreaTable_Init_BottomOfTheWell() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ()) {
|
if (randoCtx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ()) {
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER] = Area("Bottom of the Well MQ Perimeter", "Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER] = Area("Bottom of the Well MQ Perimeter", "Bottom of the Well", RA_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
//EventAccess(&WallFairy, {[]{return WallFairy || Slingshot;}}),
|
//EventAccess(&WallFairy, {[]{return WallFairy || Slingshot;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -71,7 +71,7 @@ void AreaTable_Init_BottomOfTheWell() {
|
|||||||
//Trick: CanPlay(ZeldasLullaby) || (LogicBotWMQPits && HasExplosives)
|
//Trick: CanPlay(ZeldasLullaby) || (LogicBotWMQPits && HasExplosives)
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE] = Area("Bottom of the Well MQ Middle", "Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE] = Area("Bottom of the Well MQ Middle", "Bottom of the Well", RA_BOTTOM_OF_THE_WELL, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, {[]{return true;}}),
|
LocationAccess(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, {[]{return HasExplosives && SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}}),
|
LocationAccess(RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, {[]{return HasExplosives && SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}}),
|
||||||
|
@ -6,14 +6,14 @@ using namespace Logic;
|
|||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void AreaTable_Init_CastleTown() {
|
void AreaTable_Init_CastleTown() {
|
||||||
areaTable[RR_MARKET_ENTRANCE] = Area("Market Entrance", "Market Entrance", RHT_THE_MARKET, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_MARKET_ENTRANCE] = Area("Market Entrance", "Market Entrance", RA_THE_MARKET, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_HYRULE_FIELD, {[]{return IsAdult || AtDay;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return IsAdult || AtDay;}}),
|
||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
Entrance(RR_MARKET_GUARD_HOUSE, {[]{return true;}}),
|
Entrance(RR_MARKET_GUARD_HOUSE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_THE_MARKET] = Area("Market", "Market", RHT_THE_MARKET, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_THE_MARKET] = Area("Market", "Market", RA_THE_MARKET, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_MARKET_ENTRANCE, {[]{return true;}}),
|
Entrance(RR_MARKET_ENTRANCE, {[]{return true;}}),
|
||||||
Entrance(RR_TOT_ENTRANCE, {[]{return true;}}),
|
Entrance(RR_TOT_ENTRANCE, {[]{return true;}}),
|
||||||
@ -27,7 +27,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_MARKET_BACK_ALLEY, {[]{return IsChild;}}),
|
Entrance(RR_MARKET_BACK_ALLEY, {[]{return IsChild;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_BACK_ALLEY] = Area("Market Back Alley", "Market", RHT_THE_MARKET, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_MARKET_BACK_ALLEY] = Area("Market Back Alley", "Market", RA_THE_MARKET, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
Entrance(RR_MARKET_BOMBCHU_SHOP, {[]{return AtNight;}}),
|
Entrance(RR_MARKET_BOMBCHU_SHOP, {[]{return AtNight;}}),
|
||||||
@ -35,7 +35,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_MARKET_MAN_IN_GREEN_HOUSE, {[]{return AtNight;}}),
|
Entrance(RR_MARKET_MAN_IN_GREEN_HOUSE, {[]{return AtNight;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_TOT_ENTRANCE] = Area("ToT Entrance", "ToT Entrance", RHT_THE_MARKET, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_TOT_ENTRANCE] = Area("ToT Entrance", "ToT Entrance", RA_THE_MARKET, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -50,7 +50,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_TEMPLE_OF_TIME] = Area("Temple of Time", "Temple of Time", RHT_TEMPLE_OF_TIME, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_TEMPLE_OF_TIME] = Area("Temple of Time", "Temple of Time", RA_TEMPLE_OF_TIME, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_TOT_LIGHT_ARROWS_CUTSCENE, {[]{return IsAdult && CanTriggerLACS;}}),
|
LocationAccess(RC_TOT_LIGHT_ARROWS_CUTSCENE, {[]{return IsAdult && CanTriggerLACS;}}),
|
||||||
LocationAccess(RC_ALTAR_HINT_CHILD, {[]{return IsChild;}}),
|
LocationAccess(RC_ALTAR_HINT_CHILD, {[]{return IsChild;}}),
|
||||||
@ -61,7 +61,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_TOT_BEYOND_DOOR_OF_TIME, {[]{return randoCtx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN) || (CanPlay(SongOfTime) && (randoCtx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY) || (HasAllStones && OcarinaOfTime)));}}),
|
Entrance(RR_TOT_BEYOND_DOOR_OF_TIME, {[]{return randoCtx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN) || (CanPlay(SongOfTime) && (randoCtx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY) || (HasAllStones && OcarinaOfTime)));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_TOT_BEYOND_DOOR_OF_TIME] = Area("Beyond Door of Time", "Beyond Door of Time", RHT_TEMPLE_OF_TIME, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_TOT_BEYOND_DOOR_OF_TIME] = Area("Beyond Door of Time", "Beyond Door of Time", RA_TEMPLE_OF_TIME, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
//EventAccess(&TimeTravel, {[]{return true;}}),
|
//EventAccess(&TimeTravel, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -73,14 +73,14 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
Entrance(RR_TEMPLE_OF_TIME, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_CASTLE_GROUNDS] = Area("Castle Grounds", "Castle Grounds", RHT_CASTLE_GROUNDS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_CASTLE_GROUNDS] = Area("Castle Grounds", "Castle Grounds", RA_CASTLE_GROUNDS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, {[]{return IsChild;}}),
|
Entrance(RR_HYRULE_CASTLE_GROUNDS, {[]{return IsChild;}}),
|
||||||
Entrance(RR_GANONS_CASTLE_GROUNDS, {[]{return IsAdult;}}),
|
Entrance(RR_GANONS_CASTLE_GROUNDS, {[]{return IsAdult;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HYRULE_CASTLE_GROUNDS] = Area("Hyrule Castle Grounds", "Castle Grounds", RHT_HYRULE_CASTLE, DAY_NIGHT_CYCLE, {
|
areaTable[RR_HYRULE_CASTLE_GROUNDS] = Area("Hyrule Castle Grounds", "Castle Grounds", RA_HYRULE_CASTLE, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
||||||
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || CanUse(RG_STICKS);}}),
|
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || CanUse(RG_STICKS);}}),
|
||||||
@ -99,7 +99,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_HC_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
Entrance(RR_HC_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HC_GARDEN] = Area("HC Garden", "Castle Grounds", RHT_HYRULE_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_HC_GARDEN] = Area("HC Garden", "Castle Grounds", RA_HYRULE_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
@ -110,7 +110,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, {[]{return true;}}),
|
Entrance(RR_HYRULE_CASTLE_GROUNDS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Area("HC Great Fairy Fountain", "HC Great Fairy Fountain", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Area("HC Great Fairy Fountain", "HC Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HC_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_HC_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -118,7 +118,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_CASTLE_GROUNDS, {[]{return true;}}),
|
Entrance(RR_CASTLE_GROUNDS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HC_STORMS_GROTTO] = Area("HC Storms Grotto", "HC Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_HC_STORMS_GROTTO] = Area("HC Storms Grotto", "HC Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutPot, {[]{return NutPot || CanBlastOrSmash;}}),
|
EventAccess(&NutPot, {[]{return NutPot || CanBlastOrSmash;}}),
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || (CanBlastOrSmash && CanSummonGossipFairy);}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || (CanBlastOrSmash && CanSummonGossipFairy);}}),
|
||||||
@ -132,7 +132,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_CASTLE_GROUNDS, {[]{return true;}}),
|
Entrance(RR_CASTLE_GROUNDS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_GROUNDS] = Area("Ganon's Castle Grounds", "Castle Grounds", RHT_OUTSIDE_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_GROUNDS] = Area("Ganon's Castle Grounds", "Castle Grounds", RA_OUTSIDE_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
EventAccess(&BuiltRainbowBridge, {[]{return CanBuildRainbowBridge;}}),
|
EventAccess(&BuiltRainbowBridge, {[]{return CanBuildRainbowBridge;}}),
|
||||||
}, {
|
}, {
|
||||||
//Locations //the terrain was lowered such that you can't get this GS with a simple sword slash
|
//Locations //the terrain was lowered such that you can't get this GS with a simple sword slash
|
||||||
@ -145,7 +145,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_GANONS_CASTLE_LEDGE, {[]{return BuiltRainbowBridge;}}),
|
Entrance(RR_GANONS_CASTLE_LEDGE, {[]{return BuiltRainbowBridge;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Area("OGC Great Fairy Fountain", "OGC Great Fairy Fountain", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Area("OGC Great Fairy Fountain", "OGC Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_OGC_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_OGC_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -153,20 +153,20 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_CASTLE_GROUNDS, {[]{return true;}}),
|
Entrance(RR_CASTLE_GROUNDS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE] = Area("Castle Grounds From Ganon's Castle", "Castle Grounds From Ganon's Castle", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE] = Area("Castle Grounds From Ganon's Castle", "Castle Grounds From Ganon's Castle", RA_CASTLE_GROUNDS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, { [] { return IsChild; }}),
|
Entrance(RR_HYRULE_CASTLE_GROUNDS, { [] { return IsChild; }}),
|
||||||
Entrance(RR_GANONS_CASTLE_LEDGE, { [] { return IsAdult; }}),
|
Entrance(RR_GANONS_CASTLE_LEDGE, { [] { return IsAdult; }}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_LEDGE] = Area("Ganon's Castle Ledge", "OGC Ganon's Castle Ledge", RHT_OUTSIDE_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE,
|
areaTable[RR_GANONS_CASTLE_LEDGE] = Area("Ganon's Castle Ledge", "OGC Ganon's Castle Ledge", RA_OUTSIDE_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE,
|
||||||
{}, {}, {
|
{}, {}, {
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_GANONS_CASTLE_GROUNDS, {[]{return BuiltRainbowBridge;}}),
|
Entrance(RR_GANONS_CASTLE_GROUNDS, {[]{return BuiltRainbowBridge;}}),
|
||||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, {[]{return IsAdult;}}),
|
Entrance(RR_GANONS_CASTLE_ENTRYWAY, {[]{return IsAdult;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_GUARD_HOUSE] = Area("Market Guard House", "Market Guard House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_GUARD_HOUSE] = Area("Market Guard House", "Market Guard House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_10_BIG_POES, {[]{return IsAdult && BigPoeKill;}}),
|
LocationAccess(RC_MARKET_10_BIG_POES, {[]{return IsAdult && BigPoeKill;}}),
|
||||||
LocationAccess(RC_MARKET_GS_GUARD_HOUSE, {[]{return IsChild;}}),
|
LocationAccess(RC_MARKET_GS_GUARD_HOUSE, {[]{return IsChild;}}),
|
||||||
@ -175,7 +175,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_MARKET_ENTRANCE, {[]{return true;}}),
|
Entrance(RR_MARKET_ENTRANCE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_BAZAAR] = Area("Market Bazaar", "Market Bazaar", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_BAZAAR] = Area("Market Bazaar", "Market Bazaar", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_BAZAAR_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_MARKET_BAZAAR_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_MARKET_BAZAAR_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_MARKET_BAZAAR_ITEM_2, {[]{return true;}}),
|
||||||
@ -190,7 +190,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_MASK_SHOP] = Area("Market Mask Shop", "Market Mask Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_MARKET_MASK_SHOP] = Area("Market Mask Shop", "Market Mask Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&SkullMask, {[]{return SkullMask || (ZeldasLetter && (randoCtx->GetOption(RSK_COMPLETE_MASK_QUEST) || ChildCanAccess(RR_KAKARIKO_VILLAGE)));}}),
|
EventAccess(&SkullMask, {[]{return SkullMask || (ZeldasLetter && (randoCtx->GetOption(RSK_COMPLETE_MASK_QUEST) || ChildCanAccess(RR_KAKARIKO_VILLAGE)));}}),
|
||||||
EventAccess(&MaskOfTruth, {[]{return MaskOfTruth || (SkullMask && (randoCtx->GetOption(RSK_COMPLETE_MASK_QUEST) || (ChildCanAccess(RR_THE_LOST_WOODS) && CanPlay(SariasSong) && AreaTable(RR_THE_GRAVEYARD)->childDay && ChildCanAccess(RR_HYRULE_FIELD) && HasAllStones)));}}),
|
EventAccess(&MaskOfTruth, {[]{return MaskOfTruth || (SkullMask && (randoCtx->GetOption(RSK_COMPLETE_MASK_QUEST) || (ChildCanAccess(RR_THE_LOST_WOODS) && CanPlay(SariasSong) && AreaTable(RR_THE_GRAVEYARD)->childDay && ChildCanAccess(RR_HYRULE_FIELD) && HasAllStones)));}}),
|
||||||
@ -199,7 +199,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_SHOOTING_GALLERY] = Area("Market Shooting Gallery", "Market Shooting Gallery", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_SHOOTING_GALLERY] = Area("Market Shooting Gallery", "Market Shooting Gallery", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_SHOOTING_GALLERY_REWARD, {[]{return IsChild;}}),
|
LocationAccess(RC_MARKET_SHOOTING_GALLERY_REWARD, {[]{return IsChild;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -207,7 +207,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_BOMBCHU_BOWLING] = Area("Market Bombchu Bowling", "Market Bombchu Bowling", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_BOMBCHU_BOWLING] = Area("Market Bombchu Bowling", "Market Bombchu Bowling", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, {[]{return CanPlayBowling;}}),
|
LocationAccess(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, {[]{return CanPlayBowling;}}),
|
||||||
LocationAccess(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, {[]{return CanPlayBowling;}}),
|
LocationAccess(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, {[]{return CanPlayBowling;}}),
|
||||||
@ -217,7 +217,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_POTION_SHOP] = Area("Market Potion Shop", "Market Potion Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_POTION_SHOP] = Area("Market Potion Shop", "Market Potion Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_POTION_SHOP_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_MARKET_POTION_SHOP_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_MARKET_POTION_SHOP_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_MARKET_POTION_SHOP_ITEM_2, {[]{return true;}}),
|
||||||
@ -232,7 +232,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_TREASURE_CHEST_GAME] = Area("Market Treasure Chest Game", "Market Treasure Chest Game", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_TREASURE_CHEST_GAME] = Area("Market Treasure Chest Game", "Market Treasure Chest Game", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GREG_HINT, {[]{return true;}}),
|
LocationAccess(RC_GREG_HINT, {[]{return true;}}),
|
||||||
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_REWARD, {[]{return (CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1));}}),
|
LocationAccess(RC_MARKET_TREASURE_CHEST_GAME_REWARD, {[]{return (CanUse(RG_LENS_OF_TRUTH) && !randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (randoCtx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1));}}),
|
||||||
@ -246,7 +246,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
Entrance(RR_THE_MARKET, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_BOMBCHU_SHOP] = Area("Market Bombchu Shop", "Market Bombchu Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_BOMBCHU_SHOP] = Area("Market Bombchu Shop", "Market Bombchu Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_BOMBCHU_SHOP_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_MARKET_BOMBCHU_SHOP_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_MARKET_BOMBCHU_SHOP_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_MARKET_BOMBCHU_SHOP_ITEM_2, {[]{return true;}}),
|
||||||
@ -261,7 +261,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_MARKET_BACK_ALLEY, {[]{return true;}}),
|
Entrance(RR_MARKET_BACK_ALLEY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_DOG_LADY_HOUSE] = Area("Market Dog Lady House", "Market Dog Lady House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_MARKET_DOG_LADY_HOUSE] = Area("Market Dog Lady House", "Market Dog Lady House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_MARKET_LOST_DOG, {[]{return IsChild && AtNight;}}),
|
LocationAccess(RC_MARKET_LOST_DOG, {[]{return IsChild && AtNight;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -269,7 +269,7 @@ void AreaTable_Init_CastleTown() {
|
|||||||
Entrance(RR_MARKET_BACK_ALLEY, {[]{return true;}}),
|
Entrance(RR_MARKET_BACK_ALLEY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_MARKET_MAN_IN_GREEN_HOUSE] = Area("Market Man in Green House", "Market Man in Green House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_MARKET_MAN_IN_GREEN_HOUSE] = Area("Market Man in Green House", "Market Man in Green House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_MARKET_BACK_ALLEY, {[]{return true;}}),
|
Entrance(RR_MARKET_BACK_ALLEY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
@ -7,7 +7,7 @@ using namespace Rando;
|
|||||||
|
|
||||||
void AreaTable_Init_DeathMountain() {
|
void AreaTable_Init_DeathMountain() {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Area("Death Mountain", "Death Mountain", RHT_DEATH_MOUNTAIN_TRAIL, DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Area("Death Mountain", "Death Mountain", RA_DEATH_MOUNTAIN_TRAIL, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && CanPlay(SongOfStorms) && (HasExplosives || GoronBracelet));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && CanPlay(SongOfStorms) && (HasExplosives || GoronBracelet));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -26,7 +26,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMT_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
Entrance(RR_DMT_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEATH_MOUNTAIN_SUMMIT] = Area("Death Mountain Summit", "Death Mountain", RHT_DEATH_MOUNTAIN_TRAIL, DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEATH_MOUNTAIN_SUMMIT] = Area("Death Mountain Summit", "Death Mountain", RA_DEATH_MOUNTAIN_TRAIL, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&PrescriptionAccess, {[]{return PrescriptionAccess || (IsAdult && (BrokenSwordAccess || BrokenSword));}}),
|
EventAccess(&PrescriptionAccess, {[]{return PrescriptionAccess || (IsAdult && (BrokenSwordAccess || BrokenSword));}}),
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
||||||
@ -47,12 +47,12 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMT_GREAT_FAIRY_FOUNTAIN, {[]{return Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return CanBlastOrSmash;});}}),
|
Entrance(RR_DMT_GREAT_FAIRY_FOUNTAIN, {[]{return Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return CanBlastOrSmash;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMT_OWL_FLIGHT] = Area("DMT Owl Flight", "Death Mountain", RHT_DEATH_MOUNTAIN_TRAIL, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DMT_OWL_FLIGHT] = Area("DMT Owl Flight", "Death Mountain", RA_DEATH_MOUNTAIN_TRAIL, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KAK_IMPAS_ROOFTOP, {[]{return true;}}),
|
Entrance(RR_KAK_IMPAS_ROOFTOP, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMT_COW_GROTTO] = Area("DMT Cow Grotto", "DMT Cow Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DMT_COW_GROTTO] = Area("DMT Cow Grotto", "DMT Cow Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMT_COW_GROTTO_COW, {[]{return CanPlay(EponasSong);}}),
|
LocationAccess(RC_DMT_COW_GROTTO_COW, {[]{return CanPlay(EponasSong);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -61,7 +61,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMT_STORMS_GROTTO] = Area("DMT Storms Grotto", "DMT Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_DMT_STORMS_GROTTO] = Area("DMT Storms Grotto", "DMT Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMT_STORMS_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DMT_STORMS_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -70,7 +70,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, {[]{return true;}}),
|
Entrance(RR_DEATH_MOUNTAIN_TRAIL, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Area("DMT Great Fairy Fountain", "DMT Great Fairy Fountain", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Area("DMT Great Fairy Fountain", "DMT Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMT_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_DMT_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -78,7 +78,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, {[]{return true;}}),
|
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GORON_CITY] = Area("Goron City", "Goron City", RHT_GORON_CITY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GORON_CITY] = Area("Goron City", "Goron City", RA_GORON_CITY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
EventAccess(&StickPot, {[]{return StickPot || IsChild;}}),
|
EventAccess(&StickPot, {[]{return StickPot || IsChild;}}),
|
||||||
@ -109,7 +109,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_GC_GROTTO_PLATFORM, {[]{return IsAdult && ((CanPlay(SongOfTime) && ((EffectiveHealth > 2) || CanUse(RG_GORON_TUNIC) || CanUse(RG_LONGSHOT) || CanUse(RG_NAYRUS_LOVE))) || (EffectiveHealth > 1 && CanUse(RG_GORON_TUNIC) && CanUse(RG_HOOKSHOT)) || (CanUse(RG_NAYRUS_LOVE) && CanUse(RG_HOOKSHOT)) || (EffectiveHealth > 2 && CanUse(RG_HOOKSHOT) && randoCtx->GetTrickOption(RT_GC_GROTTO)));}}),
|
Entrance(RR_GC_GROTTO_PLATFORM, {[]{return IsAdult && ((CanPlay(SongOfTime) && ((EffectiveHealth > 2) || CanUse(RG_GORON_TUNIC) || CanUse(RG_LONGSHOT) || CanUse(RG_NAYRUS_LOVE))) || (EffectiveHealth > 1 && CanUse(RG_GORON_TUNIC) && CanUse(RG_HOOKSHOT)) || (CanUse(RG_NAYRUS_LOVE) && CanUse(RG_HOOKSHOT)) || (EffectiveHealth > 2 && CanUse(RG_HOOKSHOT) && randoCtx->GetTrickOption(RT_GC_GROTTO)));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GC_WOODS_WARP] = Area("GC Woods Warp", "Goron City", RHT_GORON_CITY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GC_WOODS_WARP] = Area("GC Woods Warp", "Goron City", RA_GORON_CITY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GCWoodsWarpOpen, {[]{return GCWoodsWarpOpen || (CanBlastOrSmash || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&GCWoodsWarpOpen, {[]{return GCWoodsWarpOpen || (CanBlastOrSmash || CanUse(RG_DINS_FIRE));}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -118,7 +118,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_THE_LOST_WOODS, {[]{return true;}}),
|
Entrance(RR_THE_LOST_WOODS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GC_DARUNIAS_CHAMBER] = Area("GC Darunias Chamber", "Goron City", RHT_GORON_CITY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GC_DARUNIAS_CHAMBER] = Area("GC Darunias Chamber", "Goron City", RA_GORON_CITY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GoronCityChildFire, {[]{return GoronCityChildFire || (IsChild && CanUse(RG_STICKS));}}),
|
EventAccess(&GoronCityChildFire, {[]{return GoronCityChildFire || (IsChild && CanUse(RG_STICKS));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -130,13 +130,13 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_LOWER_LOCAL, {[]{return IsAdult;}}),
|
Entrance(RR_DMC_LOWER_LOCAL, {[]{return IsAdult;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GC_GROTTO_PLATFORM] = Area("GC Grotto Platform", "Goron City", RHT_GORON_CITY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GC_GROTTO_PLATFORM] = Area("GC Grotto Platform", "Goron City", RA_GORON_CITY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GC_GROTTO, {[]{return true;}}),
|
Entrance(RR_GC_GROTTO, {[]{return true;}}),
|
||||||
Entrance(RR_GORON_CITY, {[]{return EffectiveHealth > 2 || CanUse(RG_GORON_TUNIC) || CanUse(RG_NAYRUS_LOVE) || ((IsChild || CanPlay(SongOfTime)) && CanUse(RG_LONGSHOT));}}),
|
Entrance(RR_GORON_CITY, {[]{return EffectiveHealth > 2 || CanUse(RG_GORON_TUNIC) || CanUse(RG_NAYRUS_LOVE) || ((IsChild || CanPlay(SongOfTime)) && CanUse(RG_LONGSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GC_SHOP] = Area("GC Shop", "GC Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GC_SHOP] = Area("GC Shop", "GC Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GC_SHOP_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_GC_SHOP_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_GC_SHOP_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_GC_SHOP_ITEM_2, {[]{return true;}}),
|
||||||
@ -151,7 +151,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_GORON_CITY, {[]{return true;}}),
|
Entrance(RR_GORON_CITY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GC_GROTTO] = Area("GC Grotto", "GC Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GC_GROTTO] = Area("GC Grotto", "GC Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GC_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_GC_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
||||||
@ -161,14 +161,14 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_GC_GROTTO_PLATFORM, {[]{return true;}}),
|
Entrance(RR_GC_GROTTO_PLATFORM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_UPPER_NEARBY] = Area("DMC Upper Nearby", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DMC_UPPER_NEARBY] = Area("DMC Upper Nearby", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DMC_UPPER_LOCAL, {[]{return FireTimer >= 48;}}),
|
Entrance(RR_DMC_UPPER_LOCAL, {[]{return FireTimer >= 48;}}),
|
||||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, {[]{return true;}}),
|
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, {[]{return true;}}),
|
||||||
Entrance(RR_DMC_UPPER_GROTTO, {[]{return Here(RR_DMC_UPPER_NEARBY, []{return CanBlastOrSmash && (FireTimer >= 8 || Hearts >= 3);});}})
|
Entrance(RR_DMC_UPPER_GROTTO, {[]{return Here(RR_DMC_UPPER_NEARBY, []{return CanBlastOrSmash && (FireTimer >= 8 || Hearts >= 3);});}})
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_UPPER_LOCAL] = Area("DMC Upper Local", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DMC_UPPER_LOCAL] = Area("DMC Upper Local", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || (HasExplosives && CanSummonGossipFairyWithoutSuns && (FireTimer >= 16 || Hearts >= 3));}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || (HasExplosives && CanSummonGossipFairyWithoutSuns && (FireTimer >= 16 || Hearts >= 3));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -184,7 +184,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_LOWER_NEARBY, {[]{return false;}}),
|
Entrance(RR_DMC_LOWER_NEARBY, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_LADDER_AREA_NEARBY] = Area("DMC Ladder Area Nearby", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DMC_LADDER_AREA_NEARBY] = Area("DMC Ladder Area Nearby", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMC_DEKU_SCRUB, {[]{return IsChild && CanStunDeku;}}),
|
LocationAccess(RC_DMC_DEKU_SCRUB, {[]{return IsChild && CanStunDeku;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -193,7 +193,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_LOWER_NEARBY, {[]{return Hearts >= 3 && (CanUse(RG_HOVER_BOOTS) || (randoCtx->GetTrickOption(RT_DMC_BOULDER_JS) && IsAdult && CanUse(RG_MEGATON_HAMMER)) || (randoCtx->GetTrickOption(RT_DMC_BOULDER_SKIP) && IsAdult));}}),
|
Entrance(RR_DMC_LOWER_NEARBY, {[]{return Hearts >= 3 && (CanUse(RG_HOVER_BOOTS) || (randoCtx->GetTrickOption(RT_DMC_BOULDER_JS) && IsAdult && CanUse(RG_MEGATON_HAMMER)) || (randoCtx->GetTrickOption(RT_DMC_BOULDER_SKIP) && IsAdult));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_LOWER_NEARBY] = Area("DMC Lower Nearby", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DMC_LOWER_NEARBY] = Area("DMC Lower Nearby", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DMC_LOWER_LOCAL, {[]{return FireTimer >= 48;}}),
|
Entrance(RR_DMC_LOWER_LOCAL, {[]{return FireTimer >= 48;}}),
|
||||||
Entrance(RR_GC_DARUNIAS_CHAMBER, {[]{return true;}}),
|
Entrance(RR_GC_DARUNIAS_CHAMBER, {[]{return true;}}),
|
||||||
@ -201,7 +201,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_HAMMER_GROTTO, {[]{return IsAdult && CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_DMC_HAMMER_GROTTO, {[]{return IsAdult && CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_LOWER_LOCAL] = Area("DMC Lower Local", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DMC_LOWER_LOCAL] = Area("DMC Lower Local", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DMC_LOWER_NEARBY, {[]{return true;}}),
|
Entrance(RR_DMC_LOWER_NEARBY, {[]{return true;}}),
|
||||||
Entrance(RR_DMC_LADDER_AREA_NEARBY, {[]{return FireTimer >= 8 || Hearts >= 3;}}),
|
Entrance(RR_DMC_LADDER_AREA_NEARBY, {[]{return FireTimer >= 8 || Hearts >= 3;}}),
|
||||||
@ -209,7 +209,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT) || (IsAdult && CanShield && randoCtx->GetTrickOption(RT_DMC_BOLERO_JUMP))) && FireTimer >= 24;}}),
|
Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT) || (IsAdult && CanShield && randoCtx->GetTrickOption(RT_DMC_BOLERO_JUMP))) && FireTimer >= 24;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_CENTRAL_NEARBY] = Area("DMC Central Nearby", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DMC_CENTRAL_NEARBY] = Area("DMC Central Nearby", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMC_VOLCANO_FREESTANDING_POH, {[]{return IsAdult && Hearts >= 3 && (CanPlantBean(RR_DMC_CENTRAL_LOCAL) || (randoCtx->GetTrickOption(RT_DMC_HOVER_BEAN_POH) && HoverBoots));}}),
|
LocationAccess(RC_DMC_VOLCANO_FREESTANDING_POH, {[]{return IsAdult && Hearts >= 3 && (CanPlantBean(RR_DMC_CENTRAL_LOCAL) || (randoCtx->GetTrickOption(RT_DMC_HOVER_BEAN_POH) && HoverBoots));}}),
|
||||||
LocationAccess(RC_SHEIK_IN_CRATER, {[]{return IsAdult && (FireTimer >= 8 || Hearts >= 3);}}),
|
LocationAccess(RC_SHEIK_IN_CRATER, {[]{return IsAdult && (FireTimer >= 8 || Hearts >= 3);}}),
|
||||||
@ -218,7 +218,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return FireTimer >= 48;}}),
|
Entrance(RR_DMC_CENTRAL_LOCAL, {[]{return FireTimer >= 48;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_CENTRAL_LOCAL] = Area("DMC Central Local", "Death Mountain Crater", RHT_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DMC_CENTRAL_LOCAL] = Area("DMC Central Local", "Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_DMC_CENTRAL_LOCAL) && CanPlay(SongOfStorms));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_DMC_CENTRAL_LOCAL) && CanPlay(SongOfStorms));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -232,7 +232,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, {[]{return (IsChild && Hearts >= 3 && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || (IsAdult && FireTimer >= 24);}}),
|
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, {[]{return (IsChild && Hearts >= 3 && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || (IsAdult && FireTimer >= 24);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Area("DMC Great Fairy Fountain", "DMC Great Fairy Fountain", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Area("DMC Great Fairy Fountain", "DMC Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMC_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_DMC_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -240,7 +240,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_LOWER_LOCAL, {[]{return true;}}),
|
Entrance(RR_DMC_LOWER_LOCAL, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_UPPER_GROTTO] = Area("DMC Upper Grotto", "DMC Upper Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_DMC_UPPER_GROTTO] = Area("DMC Upper Grotto", "DMC Upper Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMC_UPPER_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DMC_UPPER_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -249,7 +249,7 @@ void AreaTable_Init_DeathMountain() {
|
|||||||
Entrance(RR_DMC_UPPER_LOCAL, {[]{return true;}}),
|
Entrance(RR_DMC_UPPER_LOCAL, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DMC_HAMMER_GROTTO] = Area("DMC Hammer Grotto", "DMC Hammer Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DMC_HAMMER_GROTTO] = Area("DMC Hammer Grotto", "DMC Hammer Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_DEKU_TREE_ENTRYWAY] = Area("Deku Tree Entryway", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DEKU_TREE_ENTRYWAY] = Area("Deku Tree Entryway", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DEKU_TREE_LOBBY, {[]{return randoCtx->GetDungeon(DEKU_TREE)->IsVanilla();}}),
|
Entrance(RR_DEKU_TREE_LOBBY, {[]{return randoCtx->GetDungeon(DEKU_TREE)->IsVanilla();}}),
|
||||||
Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(DEKU_TREE)->IsMQ();}}),
|
Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(DEKU_TREE)->IsMQ();}}),
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(DEKU_TREE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(DEKU_TREE)->IsVanilla()) {
|
||||||
areaTable[RR_DEKU_TREE_LOBBY] = Area("Deku Tree Lobby", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_LOBBY] = Area("Deku Tree Lobby", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -38,13 +38,13 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return false;}}),
|
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_2F_MIDDLE_ROOM] = Area("Deku Tree 2F Middle Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DEKU_TREE_2F_MIDDLE_ROOM] = Area("Deku Tree 2F Middle Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DEKU_TREE_LOBBY, {[]{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return HasShield || CanUse(RG_MEGATON_HAMMER);});}}),
|
Entrance(RR_DEKU_TREE_LOBBY, {[]{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return HasShield || CanUse(RG_MEGATON_HAMMER);});}}),
|
||||||
Entrance(RR_DEKU_TREE_SLINGSHOT_ROOM,{[]{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return HasShield || CanUse(RG_MEGATON_HAMMER);});}}),
|
Entrance(RR_DEKU_TREE_SLINGSHOT_ROOM,{[]{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return HasShield || CanUse(RG_MEGATON_HAMMER);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_SLINGSHOT_ROOM] = Area("Deku Tree Slingshot Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_SLINGSHOT_ROOM] = Area("Deku Tree Slingshot Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_SLINGSHOT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DEKU_TREE_SLINGSHOT_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, {[]{return true;}}),
|
||||||
@ -53,7 +53,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_HOVER_BOOTS);}}),
|
Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_HOVER_BOOTS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_COMPASS_ROOM] = Area("Deku Tree Compass Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_COMPASS_ROOM] = Area("Deku Tree Compass Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -68,7 +68,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return false;}}),
|
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_LOWER] = Area("Deku Tree Basement Lower", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_BASEMENT_LOWER] = Area("Deku Tree Basement Lower", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || Boomerang);}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || Boomerang);}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));},
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));},
|
||||||
@ -86,19 +86,19 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return false;}}),
|
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Area("Deku Tree Basement Scrub Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Area("Deku Tree Basement Scrub Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DEKU_TREE_BASEMENT_LOWER, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_LOWER, {[]{return true;}}),
|
||||||
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM, {[]{return Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW);});}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM, {[]{return Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM] = Area("Deku Tree Basement Water Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM] = Area("Deku Tree Basement Water Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_TORCH_ROOM] = Area("Deku Tree Basement Torch Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_BASEMENT_TORCH_ROOM] = Area("Deku Tree Basement Torch Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -108,7 +108,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, {[]{return Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW);});}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, {[]{return Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_BACK_LOBBY] = Area("Deku Tree Basement Back Lobby", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_BASEMENT_BACK_LOBBY] = Area("Deku Tree Basement Back Lobby", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW);}) &&
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW);}) &&
|
||||||
@ -121,7 +121,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, {[]{return Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW);}) && IsChild;}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, {[]{return Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW);}) && IsChild;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_BACK_ROOM] = Area("Deku Tree Basement Back Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_BASEMENT_BACK_ROOM] = Area("Deku Tree Basement Back Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, {[]{return HookshotOrBoomerang;}}),
|
LocationAccess(RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, {[]{return HookshotOrBoomerang;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -129,7 +129,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BASEMENT_UPPER] = Area("Deku Tree Basement Upper", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_BASEMENT_UPPER] = Area("Deku Tree Basement Upper", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -140,7 +140,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return Here(RR_DEKU_TREE_BASEMENT_UPPER, []{return HasFireSourceWithTorch || (randoCtx->GetTrickOption(RT_DEKU_B1_BOW_WEBS) && IsAdult && CanUse(RG_FAIRY_BOW));});}}),
|
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, {[]{return Here(RR_DEKU_TREE_BASEMENT_UPPER, []{return HasFireSourceWithTorch || (randoCtx->GetTrickOption(RT_DEKU_B1_BOW_WEBS) && IsAdult && CanUse(RG_FAIRY_BOW));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Area("Deku Tree Outside Boss Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Area("Deku Tree Outside Boss Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, {[]{return true;}}),
|
||||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return HasShield;});}}),
|
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, {[]{return Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return HasShield;});}}),
|
||||||
@ -151,7 +151,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(DEKU_TREE)->IsMQ()) {
|
if (randoCtx->GetDungeon(DEKU_TREE)->IsMQ()) {
|
||||||
areaTable[RR_DEKU_TREE_MQ_LOBBY] = Area("Deku Tree MQ Lobby", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_MQ_LOBBY] = Area("Deku Tree MQ Lobby", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -172,7 +172,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, {[]{return randoCtx->GetTrickOption(RT_DEKU_B1_SKIP) || Here(RR_DEKU_TREE_MQ_LOBBY, []{return IsAdult;});}}),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, {[]{return randoCtx->GetTrickOption(RT_DEKU_B1_SKIP) || Here(RR_DEKU_TREE_MQ_LOBBY, []{return IsAdult;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Area("Deku Tree MQ Compass Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Area("Deku Tree MQ Compass Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_COMPASS_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DEKU_TREE_MQ_COMPASS_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_GS_COMPASS_ROOM, {[]{return HookshotOrBoomerang &&
|
LocationAccess(RC_DEKU_TREE_MQ_GS_COMPASS_ROOM, {[]{return HookshotOrBoomerang &&
|
||||||
@ -184,7 +184,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT] = Area("Deku Tree MQ Basement Water Room Front", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT] = Area("Deku Tree MQ Basement Water Room Front", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -194,7 +194,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_MQ_LOBBY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK] = Area("Deku Tree MQ Basement Water Room Front", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK] = Area("Deku Tree MQ Basement Water Room Front", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, {[]{return CanPlay(SongOfTime);}}),
|
LocationAccess(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, {[]{return CanPlay(SongOfTime);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -206,7 +206,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, {[]{return true;}}),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM] = Area("Deku Tree MQ Basement Back Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM] = Area("Deku Tree MQ Basement Back Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, {[]{return (IsAdult && CanUse(RG_LONGSHOT)) || (CanPlay(SongOfTime) && HookshotOrBoomerang);}}),
|
LocationAccess(RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, {[]{return (IsAdult && CanUse(RG_LONGSHOT)) || (CanPlay(SongOfTime) && HookshotOrBoomerang);}}),
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, {[]{return HasFireSourceWithTorch && HookshotOrBoomerang;}}),
|
LocationAccess(RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, {[]{return HasFireSourceWithTorch && HookshotOrBoomerang;}}),
|
||||||
@ -216,7 +216,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, {[]{return (IsChild && CanUse(RG_KOKIRI_SWORD)) || CanUseProjectile || (Nuts && (IsChild && CanUse(RG_STICKS)));}}),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, {[]{return (IsChild && CanUse(RG_KOKIRI_SWORD)) || CanUseProjectile || (Nuts && (IsChild && CanUse(RG_STICKS)));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_LEDGE] = Area("Deku Tree MQ Basement Ledge", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_MQ_BASEMENT_LEDGE] = Area("Deku Tree MQ Basement Ledge", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_TREE_MQ_DEKU_SCRUB, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DEKU_TREE_MQ_DEKU_SCRUB, {[]{return CanStunDeku;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -228,7 +228,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] =
|
areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] =
|
||||||
Area("Deku Tree MQ Outside Boss Room", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Deku Tree MQ Outside Boss Room", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, { [] { return true; } }),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, { [] { return true; } }),
|
||||||
@ -241,7 +241,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_DEKU_TREE_BOSS_ENTRYWAY] =
|
areaTable[RR_DEKU_TREE_BOSS_ENTRYWAY] =
|
||||||
Area("Deku Tree Boss Entryway", "Deku Tree", RHT_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Deku Tree Boss Entryway", "Deku Tree", RA_DEKU_TREE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, { [] { return randoCtx->GetDungeon(DEKU_TREE)->IsVanilla(); } }),
|
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, { [] { return randoCtx->GetDungeon(DEKU_TREE)->IsVanilla(); } }),
|
||||||
@ -250,7 +250,7 @@ void AreaTable_Init_DekuTree() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_BOSS_ROOM] =
|
areaTable[RR_DEKU_TREE_BOSS_ROOM] =
|
||||||
Area("Deku Tree Boss Room", "Deku Tree", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
Area("Deku Tree Boss Room", "Deku Tree", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&DekuTreeClear, { [] {
|
EventAccess(&DekuTreeClear, { [] {
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Area("Dodongos Cavern Entryway", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Area("Dodongos Cavern Entryway", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_BEGINNING, {[]{return randoCtx->GetDungeon(DODONGOS_CAVERN)->IsVanilla();}}),
|
Entrance(RR_DODONGOS_CAVERN_BEGINNING, {[]{return randoCtx->GetDungeon(DODONGOS_CAVERN)->IsVanilla();}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(DODONGOS_CAVERN)->IsMQ();}}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(DODONGOS_CAVERN)->IsMQ();}}),
|
||||||
@ -21,13 +21,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(DODONGOS_CAVERN)->IsVanilla()) {
|
if (randoCtx->GetDungeon(DODONGOS_CAVERN)->IsVanilla()) {
|
||||||
areaTable[RR_DODONGOS_CAVERN_BEGINNING] = Area("Dodongos Cavern Beginning", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_BEGINNING] = Area("Dodongos Cavern Beginning", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, {[]{return Here(RR_DODONGOS_CAVERN_BEGINNING, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
Entrance(RR_DODONGOS_CAVERN_LOBBY, {[]{return Here(RR_DODONGOS_CAVERN_BEGINNING, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_LOBBY] = Area("Dodongos Cavern Lobby", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DODONGOS_CAVERN_LOBBY] = Area("Dodongos Cavern Lobby", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || (CanSummonGossipFairy && Here(RR_DODONGOS_CAVERN_LOBBY, []{return CanBlastOrSmash || GoronBracelet;}));}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || (CanSummonGossipFairy && Here(RR_DODONGOS_CAVERN_LOBBY, []{return CanBlastOrSmash || GoronBracelet;}));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -46,13 +46,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY,{[]{return false;}}),
|
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY,{[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_LOBBY_SWITCH] = Area("Dodongos Cavern Lobby Switch", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_LOBBY_SWITCH] = Area("Dodongos Cavern Lobby Switch", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_LOBBY, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_SE_CORRIDOR] = Area("Dodongos Cavern SE Corridor", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_SE_CORRIDOR] = Area("Dodongos Cavern SE Corridor", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_GS_SCARECROW, {[]{return CanUse(RG_SCARECROW) || (IsAdult && CanUse(RG_LONGSHOT)) || (randoCtx->GetTrickOption(RT_DC_SCARECROW_GS) && (CanAdultAttack || CanChildAttack));}}),
|
LocationAccess(RC_DODONGOS_CAVERN_GS_SCARECROW, {[]{return CanUse(RG_SCARECROW) || (IsAdult && CanUse(RG_LONGSHOT)) || (randoCtx->GetTrickOption(RT_DC_SCARECROW_GS) && (CanAdultAttack || CanChildAttack));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -62,7 +62,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_SE_ROOM] = Area("Dodongos Cavern SE Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_SE_ROOM] = Area("Dodongos Cavern SE Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -70,13 +70,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS] = Area("Dodongos Cavern Near Lower Lizalfos", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS] = Area("Dodongos Cavern Near Lower Lizalfos", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_LOWER_LIZALFOS] = Area("Dodongos Cavern Lower Lizalfos", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_LOWER_LIZALFOS] = Area("Dodongos Cavern Lower Lizalfos", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, {[]{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) ||
|
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, {[]{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) ||
|
||||||
CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives;});}}),
|
CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives;});}}),
|
||||||
@ -84,14 +84,14 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives;});}}),
|
CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_DODONGO_ROOM] = Area("Dodongos Cavern Dodongo Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_DODONGO_ROOM] = Area("Dodongos Cavern Dodongo Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, {[]{return HasFireSourceWithTorch;}}),
|
Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, {[]{return HasFireSourceWithTorch;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
Entrance(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM] = Area("Dodongos Cavern Near Dodongo Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM] = Area("Dodongos Cavern Near Dodongo Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, {[]{return CanStunDeku;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -99,14 +99,14 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_STAIRS_LOWER] = Area("Dodongos Cavern Stairs Lower", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_STAIRS_LOWER] = Area("Dodongos Cavern Stairs Lower", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_LOBBY, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, {[]{return HasExplosives || GoronBracelet || CanUse(RG_DINS_FIRE) || (randoCtx->GetTrickOption(RT_DC_STAIRCASE) && CanUse(RG_FAIRY_BOW));}}),
|
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, {[]{return HasExplosives || GoronBracelet || CanUse(RG_DINS_FIRE) || (randoCtx->GetTrickOption(RT_DC_STAIRCASE) && CanUse(RG_FAIRY_BOW));}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_STAIRS_UPPER] = Area("Dodongos Cavern Stairs Upper", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_STAIRS_UPPER] = Area("Dodongos Cavern Stairs Upper", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, {[]{return Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return HookshotOrBoomerang;}) || CanUse(RG_LONGSHOT);}}),
|
LocationAccess(RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, {[]{return Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return HookshotOrBoomerang;}) || CanUse(RG_LONGSHOT);}}),
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, {[]{return IsAdult || CanChildAttack || (HasAccessTo(RR_DODONGOS_CAVERN_STAIRS_LOWER) && CanUse(RG_LONGSHOT) && randoCtx->GetTrickOption(RT_DC_VINES_GS));}}),
|
LocationAccess(RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, {[]{return IsAdult || CanChildAttack || (HasAccessTo(RR_DODONGOS_CAVERN_STAIRS_LOWER) && CanUse(RG_LONGSHOT) && randoCtx->GetTrickOption(RT_DC_VINES_GS));}}),
|
||||||
@ -116,7 +116,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_COMPASS_ROOM] = Area("Dodongos Cavern Compass Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_COMPASS_ROOM] = Area("Dodongos Cavern Compass Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_COMPASS_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_COMPASS_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -124,13 +124,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, {[]{return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || GoronBracelet;}}),
|
Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, {[]{return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || GoronBracelet;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_ARMOS_ROOM] = Area("Dodongos Cavern Armos Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_ARMOS_ROOM] = Area("Dodongos Cavern Armos Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, {[]{return true;}}),
|
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 true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Area("Dodongos Cavern Bomb Room Lower", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Area("Dodongos Cavern Bomb Room Lower", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -140,7 +140,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, {[]{return (IsAdult && randoCtx->GetTrickOption(RT_DC_JUMP)) || CanUse(RG_HOVER_BOOTS) || (IsAdult && CanUse(RG_LONGSHOT));}}),
|
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, {[]{return (IsAdult && randoCtx->GetTrickOption(RT_DC_JUMP)) || CanUse(RG_HOVER_BOOTS) || (IsAdult && CanUse(RG_LONGSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_2F_SIDE_ROOM] = Area("Dodongos Cavern 2F Side Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_2F_SIDE_ROOM] = Area("Dodongos Cavern 2F Side Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, {[]{return CanStunDeku;}}),
|
||||||
@ -149,13 +149,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM] = Area("Dodongos Cavern First Slingshot Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM] = Area("Dodongos Cavern First Slingshot Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || randoCtx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}}),
|
Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || randoCtx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_UPPER_LIZALFOS] = Area("Dodongos Cavern Upper Lizalfos", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_UPPER_LIZALFOS] = Area("Dodongos Cavern Upper Lizalfos", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) ||
|
Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, {[]{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) ||
|
||||||
@ -164,13 +164,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives;});}}),
|
CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM] = Area("Dodongos Cavern Second Slingshot Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM] = Area("Dodongos Cavern Second Slingshot Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || randoCtx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}}),
|
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || randoCtx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER] = Area("Dodongos Cavern Bomb Room Upper", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER] = Area("Dodongos Cavern Bomb Room Upper", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -180,7 +180,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_FAR_BRIDGE] = Area("Dodongos Cavern Far Bridge", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_FAR_BRIDGE] = Area("Dodongos Cavern Far Bridge", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, {[]{return Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return CanBlastOrSmash;});}}),
|
LocationAccess(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, {[]{return Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return CanBlastOrSmash;});}}),
|
||||||
}, {
|
}, {
|
||||||
@ -189,7 +189,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Area("Dodongos Cavern Boss Area", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Area("Dodongos Cavern Boss Area", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -199,7 +199,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_BACK_ROOM] = Area("Dodongos Cavern Back Room", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_BACK_ROOM] = Area("Dodongos Cavern Back Room", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_GS_BACK_ROOM, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_GS_BACK_ROOM, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -212,13 +212,13 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(DODONGOS_CAVERN)->IsMQ()) {
|
if (randoCtx->GetDungeon(DODONGOS_CAVERN)->IsMQ()) {
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_BEGINNING] = Area("Dodongos Cavern MQ Beginning", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_BEGINNING] = Area("Dodongos Cavern MQ Beginning", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, {[]{return Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, {[]{return Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return CanBlastOrSmash || GoronBracelet;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOBBY] = Area("Dodongos Cavern MQ Lobby", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_LOBBY] = Area("Dodongos Cavern MQ Lobby", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (IsAdult || KokiriSword || Boomerang);}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (IsAdult || KokiriSword || Boomerang);}}),
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
||||||
@ -244,7 +244,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
//Trick: HasExplosives || (LogicDCMQEyes && GoronBracelet && (IsAdult || LogicDCMQChildBack) && ((IsChild && CanUse(RG_STICKS)) || CanUse(RG_DINS_FIRE) || (IsAdult && (LogicDCJump || Hammer || HoverBoots || Hookshot))))
|
//Trick: HasExplosives || (LogicDCMQEyes && GoronBracelet && (IsAdult || LogicDCMQChildBack) && ((IsChild && CanUse(RG_STICKS)) || CanUse(RG_DINS_FIRE) || (IsAdult && (LogicDCJump || Hammer || HoverBoots || Hookshot))))
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Area("Dodongos Cavern MQ Lower Right Side", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Area("Dodongos Cavern MQ Lower Right Side", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, {[]{return CanStunDeku;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -254,7 +254,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
IsChild && CanUse(RG_FAIRY_SLINGSHOT);}}),
|
IsChild && CanUse(RG_FAIRY_SLINGSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_BOMB_BAG_AREA] = Area("Dodongos Cavern MQ Bomb Bag Area", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_BOMB_BAG_AREA] = Area("Dodongos Cavern MQ Bomb Bag Area", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, {[]{return true;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, {[]{return (Here(RR_DODONGOS_CAVERN_MQ_BOMB_BAG_AREA, []{return IsAdult && CanUse(RG_FAIRY_BOW);}) || GoronBracelet || CanUse(RG_DINS_FIRE) || HasExplosives) && HookshotOrBoomerang;}}),
|
LocationAccess(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, {[]{return (Here(RR_DODONGOS_CAVERN_MQ_BOMB_BAG_AREA, []{return IsAdult && CanUse(RG_FAIRY_BOW);}) || GoronBracelet || CanUse(RG_DINS_FIRE) || HasExplosives) && HookshotOrBoomerang;}}),
|
||||||
@ -263,7 +263,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, {[]{return true;}}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_BOSS_AREA] = Area("Dodongos Cavern MQ BossArea", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_BOSS_AREA] = Area("Dodongos Cavern MQ BossArea", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -280,7 +280,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_DODONGOS_CAVERN_BOSS_ENTRYWAY] =
|
areaTable[RR_DODONGOS_CAVERN_BOSS_ENTRYWAY] =
|
||||||
Area("Dodongos Cavern Boss Entryway", "Dodongos Cavern", RHT_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Dodongos Cavern Boss Entryway", "Dodongos Cavern", RA_DODONGOS_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, { [] { return randoCtx->GetDungeon(DODONGOS_CAVERN)->IsVanilla(); } }),
|
Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, { [] { return randoCtx->GetDungeon(DODONGOS_CAVERN)->IsVanilla(); } }),
|
||||||
@ -289,7 +289,7 @@ void AreaTable_Init_DodongosCavern() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] =
|
areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] =
|
||||||
Area("Dodongos Cavern Boss Room", "Dodongos Cavern", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
Area("Dodongos Cavern Boss Room", "Dodongos Cavern", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&DodongosCavernClear,
|
EventAccess(&DodongosCavernClear,
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Area("Fire Temple Entryway", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Area("Fire Temple Entryway", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return randoCtx->GetDungeon(FIRE_TEMPLE)->IsVanilla();}}),
|
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return randoCtx->GetDungeon(FIRE_TEMPLE)->IsVanilla();}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER, {[]{return randoCtx->GetDungeon(FIRE_TEMPLE)->IsMQ();}}),
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER, {[]{return randoCtx->GetDungeon(FIRE_TEMPLE)->IsMQ();}}),
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(FIRE_TEMPLE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(FIRE_TEMPLE)->IsVanilla()) {
|
||||||
areaTable[RR_FIRE_TEMPLE_FIRST_ROOM] = Area("Fire Temple First Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_FIRST_ROOM] = Area("Fire Temple First Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
||||||
@ -31,7 +31,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 2) && FireTimer >= 24;}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 2) && FireTimer >= 24;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM] = Area("Fire Temple Near Boss Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM] = Area("Fire Temple Near Boss Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return FairyPot || (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
EventAccess(&FairyPot, {[]{return FairyPot || (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -43,13 +43,13 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyFireTemple && ((IsAdult && randoCtx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP)) || CanUse(RG_HOVER_BOOTS) || Here(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return CanUse(RG_MEGATON_HAMMER);}));}}),
|
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyFireTemple && ((IsAdult && randoCtx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP)) || CanUse(RG_HOVER_BOOTS) || Here(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return CanUse(RG_MEGATON_HAMMER);}));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LOOP_ENEMIES] = Area("Fire Temple Loop Enemies", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_LOOP_ENEMIES] = Area("Fire Temple Loop Enemies", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 8) || !IsKeysanity;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 8) || !IsKeysanity;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_LOOP_TILES, {[]{return Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER);});}}),
|
Entrance(RR_FIRE_TEMPLE_LOOP_TILES, {[]{return Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LOOP_TILES] = Area("Fire Temple Loop Tiles", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_LOOP_TILES] = Area("Fire Temple Loop Tiles", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -58,7 +58,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LOOP_FLARE_DANCER] = Area("Fire Temple Loop Flare Dancer", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_LOOP_FLARE_DANCER] = Area("Fire Temple Loop Flare Dancer", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, {[]{return (HasExplosives || CanUse(RG_MEGATON_HAMMER)) && IsAdult;}}),
|
LocationAccess(RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, {[]{return (HasExplosives || CanUse(RG_MEGATON_HAMMER)) && IsAdult;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -68,7 +68,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_BOOMERANG)));});}}),
|
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_BOOMERANG)));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH] = Area("Fire Temple Loop Hammer Switch", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH] = Area("Fire Temple Loop Hammer Switch", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FireLoopSwitch, {[]{return FireLoopSwitch || CanUse(RG_MEGATON_HAMMER);}}),
|
EventAccess(&FireLoopSwitch, {[]{return FireLoopSwitch || CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -77,7 +77,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, {[]{return FireLoopSwitch;}}),
|
Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, {[]{return FireLoopSwitch;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LOOP_GORON_ROOM] = Area("Fire Temple Loop Goron Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_LOOP_GORON_ROOM] = Area("Fire Temple Loop Goron Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BOSS_KEY_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_BOSS_KEY_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -86,13 +86,13 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_LOOP_EXIT, {[]{return FireLoopSwitch;}}),
|
Entrance(RR_FIRE_TEMPLE_LOOP_EXIT, {[]{return FireLoopSwitch;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LOOP_EXIT] = Area("Fire Temple Loop Exit", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_LOOP_EXIT] = Area("Fire Temple Loop Exit", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, {[]{return FireLoopSwitch;}}),
|
Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, {[]{return FireLoopSwitch;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM] = Area("Fire Temple Big Lava Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM] = Area("Fire Temple Big Lava Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 2);}}),
|
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 2);}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON, {[]{return true;}}),
|
||||||
@ -101,7 +101,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3);}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON] = Area("Fire Temple Big Lava Room North Goron", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON] = Area("Fire Temple Big Lava Room North Goron", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -109,7 +109,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES] = Area("Fire Temple Big Lava Room North Tiles", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES] = Area("Fire Temple Big Lava Room North Tiles", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, {[]{return CanAdultAttack || HookshotOrBoomerang;}}),
|
LocationAccess(RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, {[]{return CanAdultAttack || HookshotOrBoomerang;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -117,7 +117,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON] = Area("Fire Temple Big Lava Room South Goron", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON] = Area("Fire Temple Big Lava Room South Goron", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -125,13 +125,13 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM] = Area("Fire Temple Fire Pillar Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM] = Area("Fire Temple Fire Pillar Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3);}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3);}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, {[]{return FireTimer >= 56 && SmallKeys(RR_FIRE_TEMPLE, 4);}}),
|
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, {[]{return FireTimer >= 56 && SmallKeys(RR_FIRE_TEMPLE, 4);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_SHORTCUT_ROOM] = Area("Fire Temple Shortcut Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_SHORTCUT_ROOM] = Area("Fire Temple Shortcut Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, {[]{return Here(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return true;});}}),
|
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, {[]{return Here(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return true;});}}),
|
||||||
}, {
|
}, {
|
||||||
@ -141,13 +141,13 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return IsAdult && (GoronBracelet || randoCtx->GetTrickOption(RT_FIRE_STRENGTH)) && (HasExplosives || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_SLINGSHOT));}}),
|
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return IsAdult && (GoronBracelet || randoCtx->GetTrickOption(RT_FIRE_STRENGTH)) && (HasExplosives || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_SLINGSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_SHORTCUT_CLIMB] = Area("Fire Temple Shortcut Climb", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_SHORTCUT_CLIMB] = Area("Fire Temple Shortcut Climb", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER] = Area("Fire Temple Boulder Maze Lower", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER] = Area("Fire Temple Boulder Maze Lower", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_FIRE_TEMPLE_GS_BOULDER_MAZE, {[]{return HasExplosives && (IsAdult || HookshotOrBoomerang);}}),
|
LocationAccess(RC_FIRE_TEMPLE_GS_BOULDER_MAZE, {[]{return HasExplosives && (IsAdult || HookshotOrBoomerang);}}),
|
||||||
@ -159,7 +159,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, {[]{return false;}}),
|
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM] = Area("Fire Temple Boulder Maze Lower Side Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM] = Area("Fire Temple Boulder Maze Lower Side Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -167,7 +167,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM] = Area("Fire Temple East Central Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM] = Area("Fire Temple East Central Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return CanTakeDamage;}}),
|
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, {[]{return CanTakeDamage;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return SmallKeys(RR_FIRE_TEMPLE, 5, 8);}}),
|
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, {[]{return SmallKeys(RR_FIRE_TEMPLE, 5, 8);}}),
|
||||||
@ -175,7 +175,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_MAP_AREA, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW);}}),
|
Entrance(RR_FIRE_TEMPLE_MAP_AREA, {[]{return CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_FIRE_WALL_CHASE] = Area("Fire Temple Fire Wall Chase", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_FIRE_WALL_CHASE] = Area("Fire Temple Fire Wall Chase", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return FireTimer >= 24 && SmallKeys(RR_FIRE_TEMPLE, 6, 8);}}),
|
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return FireTimer >= 24 && SmallKeys(RR_FIRE_TEMPLE, 6, 8);}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MAP_AREA, {[]{return IsAdult;}}),
|
Entrance(RR_FIRE_TEMPLE_MAP_AREA, {[]{return IsAdult;}}),
|
||||||
@ -183,7 +183,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_CORRIDOR, {[]{return FireTimer >= 24 && IsAdult && SmallKeys(RR_FIRE_TEMPLE, 7);}}),
|
Entrance(RR_FIRE_TEMPLE_CORRIDOR, {[]{return FireTimer >= 24 && IsAdult && SmallKeys(RR_FIRE_TEMPLE, 7);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MAP_AREA] = Area("Fire Temple Map Area", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MAP_AREA] = Area("Fire Temple Map Area", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MAP_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_MAP_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -191,7 +191,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER] = Area("Fire Temple Boulder Maze Upper", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER] = Area("Fire Temple Boulder Maze Upper", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -202,7 +202,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_SCARECROW_ROOM, {[]{return CanUse(RG_SCARECROW) || (randoCtx->GetTrickOption(RT_FIRE_SCARECROW) && IsAdult && CanUse(RG_LONGSHOT));}}),
|
Entrance(RR_FIRE_TEMPLE_SCARECROW_ROOM, {[]{return CanUse(RG_SCARECROW) || (randoCtx->GetTrickOption(RT_FIRE_SCARECROW) && IsAdult && CanUse(RG_LONGSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_SCARECROW_ROOM] = Area("Fire Temple Scarecrow Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_SCARECROW_ROOM] = Area("Fire Temple Scarecrow Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, {[]{return CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || HasExplosives || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_DINS_FIRE);}}),
|
LocationAccess(RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, {[]{return CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || HasExplosives || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_DINS_FIRE);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -211,7 +211,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_EAST_PEAK, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_EAST_PEAK, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_EAST_PEAK] = Area("Fire Temple East Peak", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_EAST_PEAK] = Area("Fire Temple East Peak", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_SCARECROW_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_SCARECROW_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_FIRE_TEMPLE_GS_SCARECROW_TOP, {[]{return CanUseProjectile;}}),
|
LocationAccess(RC_FIRE_TEMPLE_GS_SCARECROW_TOP, {[]{return CanUseProjectile;}}),
|
||||||
@ -221,13 +221,13 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return CanTakeDamage;}}),
|
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, {[]{return CanTakeDamage;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_CORRIDOR] = Area("Fire Temple Corridor", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_CORRIDOR] = Area("Fire Temple Corridor", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, {[]{return SmallKeys(RR_FIRE_TEMPLE, 7);}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, {[]{return SmallKeys(RR_FIRE_TEMPLE, 7);}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_ROOM] = Area("Fire Temple Fire Maze Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_ROOM] = Area("Fire Temple Fire Maze Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_CORRIDOR, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return CanUse(RG_HOVER_BOOTS);}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return CanUse(RG_HOVER_BOOTS);}}),
|
||||||
@ -236,14 +236,14 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, {[]{return randoCtx->GetTrickOption(RT_FIRE_FLAME_MAZE) || false;}}),
|
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, {[]{return randoCtx->GetTrickOption(RT_FIRE_FLAME_MAZE) || false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_UPPER] = Area("Fire Temple Fire Maze Upper", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_UPPER] = Area("Fire Temple Fire Maze Upper", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM] = Area("Fire Temple Fire Maze Side Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM] = Area("Fire Temple Fire Maze Side Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_COMPASS_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_COMPASS_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -251,7 +251,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER] = Area("Fire Temple West Central Lower", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER] = Area("Fire Temple West Central Lower", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, {[]{return Here(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return (CanPlay(SongOfTime) || randoCtx->GetTrickOption(RT_RUSTED_SWITCHES)) && CanUse(RG_MEGATON_HAMMER);});}}),
|
LocationAccess(RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, {[]{return Here(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return (CanPlay(SongOfTime) || randoCtx->GetTrickOption(RT_RUSTED_SWITCHES)) && CanUse(RG_MEGATON_HAMMER);});}}),
|
||||||
}, {
|
}, {
|
||||||
@ -261,21 +261,21 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER] = Area("Fire Temple West Central Upper", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER] = Area("Fire Temple West Central Upper", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}}),
|
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_LATE_FIRE_MAZE] = Area("Fire Temple Late Fire Maze", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_LATE_FIRE_MAZE] = Area("Fire Temple Late Fire Maze", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return false;}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, {[]{return false;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, {[]{return HasExplosives;}}),
|
Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, {[]{return HasExplosives;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_UPPER_FLARE_DANCER] = Area("Fire Temple Upper Flare Dancer", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_UPPER_FLARE_DANCER] = Area("Fire Temple Upper Flare Dancer", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, {[]{return Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return CanUse(RG_MEGATON_HAMMER) || CanUse(RG_HOOKSHOT) || (HasExplosives && ((CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) ||
|
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, {[]{return Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return CanUse(RG_MEGATON_HAMMER) || CanUse(RG_HOOKSHOT) || (HasExplosives && ((CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) ||
|
||||||
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_BOOMERANG)));});}}),
|
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_BOOMERANG)));});}}),
|
||||||
@ -283,13 +283,13 @@ void AreaTable_Init_FireTemple() {
|
|||||||
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG)));});}}),
|
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG)));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_WEST_CLIMB] = Area("Fire Temple West Climb", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_WEST_CLIMB] = Area("Fire Temple West Climb", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_WEST_PEAK, {[]{return CanUseProjectile;}}),
|
Entrance(RR_FIRE_TEMPLE_WEST_PEAK, {[]{return CanUseProjectile;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_WEST_PEAK] = Area("Fire Temple West Peak", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_WEST_PEAK] = Area("Fire Temple West Peak", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -299,12 +299,12 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Area("Fire Temple Hammer Return Path", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Area("Fire Temple Hammer Return Path", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE] = Area("Fire Temple Above Fire Maze", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE] = Area("Fire Temple Above Fire Maze", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, {[]{return true;}}),
|
Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, {[]{return true;}}),
|
||||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, {[]{return CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
@ -315,7 +315,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(FIRE_TEMPLE)->IsMQ()) {
|
if (randoCtx->GetDungeon(FIRE_TEMPLE)->IsMQ()) {
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER] = Area("Fire Temple MQ Lower", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER] = Area("Fire Temple MQ Lower", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, {[]{return CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || Bombs || CanUse(RG_DINS_FIRE);}}),
|
LocationAccess(RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, {[]{return CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || Bombs || CanUse(RG_DINS_FIRE);}}),
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, {[]{return IsAdult && (randoCtx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || CanUse(RG_GORON_TUNIC)) && (((CanUse(RG_HOVER_BOOTS) || (randoCtx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && CanUse(RG_FAIRY_BOW))) && HasFireSource) || (CanUse(RG_HOOKSHOT) && CanUse(RG_FIRE_ARROWS) || (CanUse(RG_DINS_FIRE) && ((randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_QUADRUPLE) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OCTUPLE) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_SEXDECUPLE)) || CanUse(RG_GORON_TUNIC) || CanUse(RG_FAIRY_BOW) || CanUse(RG_LONGSHOT)))));}}),
|
LocationAccess(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, {[]{return IsAdult && (randoCtx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || CanUse(RG_GORON_TUNIC)) && (((CanUse(RG_HOVER_BOOTS) || (randoCtx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && CanUse(RG_FAIRY_BOW))) && HasFireSource) || (CanUse(RG_HOOKSHOT) && CanUse(RG_FIRE_ARROWS) || (CanUse(RG_DINS_FIRE) && ((randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_QUADRUPLE) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OCTUPLE) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_SEXDECUPLE)) || CanUse(RG_GORON_TUNIC) || CanUse(RG_FAIRY_BOW) || CanUse(RG_LONGSHOT)))));}}),
|
||||||
@ -328,7 +328,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, {[]{return IsAdult && FireTimer >= 24 && CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, {[]{return IsAdult && FireTimer >= 24 && CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_LOCKED_DOOR] = Area("Fire Temple MQ Lower Locked Door", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_LOCKED_DOOR] = Area("Fire Temple MQ Lower Locked Door", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -337,7 +337,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
LocationAccess(RC_FIRE_TEMPLE_MQ_MAP_CHEST, {[]{return IsAdult && CanUse(RG_MEGATON_HAMMER);}}),
|
LocationAccess(RC_FIRE_TEMPLE_MQ_MAP_CHEST, {[]{return IsAdult && CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Area("Fire Temple MQ Big Lava Room", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Area("Fire Temple MQ Big Lava Room", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return FairyPot || (HasFireSource && (Bow || randoCtx->GetTrickOption(RT_FIRE_MQ_BK_CHEST)) && IsAdult && (CanUse(RG_HOOKSHOT) || randoCtx->GetTrickOption(RT_FIRE_SOT)));}}),
|
EventAccess(&FairyPot, {[]{return FairyPot || (HasFireSource && (Bow || randoCtx->GetTrickOption(RT_FIRE_MQ_BK_CHEST)) && IsAdult && (CanUse(RG_HOOKSHOT) || randoCtx->GetTrickOption(RT_FIRE_SOT)));}}),
|
||||||
//Trick: HasFireSource && (Bow || LogicFireMQBKChest) && IsAdult && (CanUse(RG_HOOKSHOT) || LogicFireSongOfTime)
|
//Trick: HasFireSource && (Bow || LogicFireMQBKChest) && IsAdult && (CanUse(RG_HOOKSHOT) || LogicFireSongOfTime)
|
||||||
@ -354,7 +354,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
//Trick: IsAdult && CanUse(RG_GORON_TUNIC) && SmallKeys(RR_FIRE_TEMPLE, 2) && (HasFireSource || (LogicFireMQClimb && HoverBoots))
|
//Trick: IsAdult && CanUse(RG_GORON_TUNIC) && SmallKeys(RR_FIRE_TEMPLE, 2) && (HasFireSource || (LogicFireMQClimb && HoverBoots))
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE] = Area("Fire Temple MQ Lower Maze", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE] = Area("Fire Temple MQ Lower Maze", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, {[]{return CanUse(RG_MASTER_SWORD) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
LocationAccess(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, {[]{return CanUse(RG_MASTER_SWORD) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, {[]{return HasExplosives && (randoCtx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM) || HasAccessTo(RR_FIRE_TEMPLE_MQ_UPPER_MAZE));}}),
|
LocationAccess(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, {[]{return HasExplosives && (randoCtx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM) || HasAccessTo(RR_FIRE_TEMPLE_MQ_UPPER_MAZE));}}),
|
||||||
@ -365,7 +365,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
//Trick: (IsAdult && ((HasExplosives && CanUse(RG_HOOKSHOT)) || (LogicFireMQMazeHovers && CanUse(RG_HOVER_BOOTS)))) || LogicFireMQMazeJump
|
//Trick: (IsAdult && ((HasExplosives && CanUse(RG_HOOKSHOT)) || (LogicFireMQMazeHovers && CanUse(RG_HOVER_BOOTS)))) || LogicFireMQMazeJump
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE] = Area("Fire Temple MQ Upper Maze", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE] = Area("Fire Temple MQ Upper Maze", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
//EventAccess(&WallFairy, {[]{return WallFairy || (IsAdult && (((CanPlay(SongOfTime) && CanUse(RG_HOOKSHOT) && HasExplosives) || CanUse(RG_LONGSHOT))));}}),
|
//EventAccess(&WallFairy, {[]{return WallFairy || (IsAdult && (((CanPlay(SongOfTime) && CanUse(RG_HOOKSHOT) && HasExplosives) || CanUse(RG_LONGSHOT))));}}),
|
||||||
EventAccess(&FairyPot, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3);}}),
|
EventAccess(&FairyPot, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3);}}),
|
||||||
@ -379,7 +379,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3) && IsAdult && ((CanUse(RG_FAIRY_BOW) && CanUse(RG_HOOKSHOT)) || CanUse(RG_FIRE_ARROWS));}}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER, {[]{return SmallKeys(RR_FIRE_TEMPLE, 3) && IsAdult && ((CanUse(RG_FAIRY_BOW) && CanUse(RG_HOOKSHOT)) || CanUse(RG_FIRE_ARROWS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_UPPER] = Area("Fire Temple MQ Upper", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_UPPER] = Area("Fire Temple MQ Upper", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, {[]{return ((CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG)) && CanUse(RG_HOOKSHOT)) || randoCtx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}}),
|
LocationAccess(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, {[]{return ((CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG)) && CanUse(RG_HOOKSHOT)) || randoCtx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}}),
|
||||||
//Trick: (IsAdult && CanUse(RG_HOOKSHOT)) || LogicFireMQFlameMaze
|
//Trick: (IsAdult && CanUse(RG_HOOKSHOT)) || LogicFireMQFlameMaze
|
||||||
@ -397,7 +397,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] =
|
areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] =
|
||||||
Area("Fire Temple Boss Entryway", "Fire Temple", RHT_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Fire Temple Boss Entryway", "Fire Temple", RA_FIRE_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, { [] { return randoCtx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false; } }),
|
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, { [] { return randoCtx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false; } }),
|
||||||
@ -406,7 +406,7 @@ void AreaTable_Init_FireTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] =
|
areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] =
|
||||||
Area("Fire Temple Boss Room", "Fire Temple", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
Area("Fire Temple Boss Room", "Fire Temple", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&FireTempleClear,
|
EventAccess(&FireTempleClear,
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Area("Forest Temple Entryway", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Area("Forest Temple Entryway", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, {[]{return randoCtx->GetDungeon(FOREST_TEMPLE)->IsVanilla();}}),
|
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, {[]{return randoCtx->GetDungeon(FOREST_TEMPLE)->IsVanilla();}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(FOREST_TEMPLE)->IsMQ();}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(FOREST_TEMPLE)->IsMQ();}}),
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(FOREST_TEMPLE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(FOREST_TEMPLE)->IsVanilla()) {
|
||||||
areaTable[RR_FOREST_TEMPLE_FIRST_ROOM] = Area("Forest Temple First Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_FIRST_ROOM] = Area("Forest Temple First Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_FOREST_TEMPLE_GS_FIRST_ROOM, {[]{return (IsAdult && Bombs) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG) || CanUse(RG_FAIRY_SLINGSHOT) || HasBombchus || CanUse(RG_DINS_FIRE) || (randoCtx->GetTrickOption(RT_FOREST_FIRST_GS) && (CanJumpslash || (IsChild && Bombs)));}}),
|
LocationAccess(RC_FOREST_TEMPLE_GS_FIRST_ROOM, {[]{return (IsAdult && Bombs) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG) || CanUse(RG_FAIRY_SLINGSHOT) || HasBombchus || CanUse(RG_DINS_FIRE) || (randoCtx->GetTrickOption(RT_FOREST_FIRST_GS) && (CanJumpslash || (IsChild && Bombs)));}}),
|
||||||
@ -31,13 +31,13 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_SOUTH_CORRIDOR] = Area("Forest Temple South Corridor", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_SOUTH_CORRIDOR] = Area("Forest Temple South Corridor", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, {[]{return true;}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_LOBBY] = Area("Forest Temple Lobby", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_LOBBY] = Area("Forest Temple Lobby", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTempleMeg, {[]{return ForestTempleMeg || (ForestTempleJoelle && ForestTempleBeth && ForestTempleAmy && CanUse(RG_FAIRY_BOW));}}),
|
EventAccess(&ForestTempleMeg, {[]{return ForestTempleMeg || (ForestTempleJoelle && ForestTempleBeth && ForestTempleAmy && CanUse(RG_FAIRY_BOW));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -55,13 +55,13 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}}),
|
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NORTH_CORRIDOR] = Area("Forest Temple North Corridor", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_NORTH_CORRIDOR] = Area("Forest Temple North Corridor", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return true;}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_LOWER_STALFOS, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_LOWER_STALFOS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_LOWER_STALFOS] = Area("Forest Temple Lower Stalfos", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_LOWER_STALFOS] = Area("Forest Temple Lower Stalfos", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -72,7 +72,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_NORTH_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_NORTH_CORRIDOR, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER] = Area("Forest Temple NW Outdoors Lower", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER] = Area("Forest Temple NW Outdoors Lower", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -88,7 +88,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}}),
|
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER] = Area("Forest Temple NW Outdoors Upper", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER] = Area("Forest Temple NW Outdoors Upper", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -100,7 +100,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER] = Area("Forest Temple NE Outdoors Lower", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER] = Area("Forest Temple NE Outdoors Lower", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -116,7 +116,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, {[]{return false;}}),
|
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER] = Area("Forest Temple NE Outdoors Upper", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER] = Area("Forest Temple NE Outdoors Upper", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -127,7 +127,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, {[]{return randoCtx->GetTrickOption(RT_FOREST_DOORFRAME) && CanJumpslash && CanUse(RG_HOVER_BOOTS) && CanUse(RG_SCARECROW);}}),
|
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, {[]{return randoCtx->GetTrickOption(RT_FOREST_DOORFRAME) && CanJumpslash && CanUse(RG_HOVER_BOOTS) && CanUse(RG_SCARECROW);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MAP_ROOM] = Area("Forest Temple Map Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MAP_ROOM] = Area("Forest Temple Map Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MAP_CHEST, {[]{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return HasExplosives || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_FAIRY_BOW) || ((CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT)) && (Nuts || HookshotOrBoomerang || CanShield));});}}),
|
LocationAccess(RC_FOREST_TEMPLE_MAP_CHEST, {[]{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return HasExplosives || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_FAIRY_BOW) || ((CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT)) && (Nuts || HookshotOrBoomerang || CanShield));});}}),
|
||||||
}, {
|
}, {
|
||||||
@ -136,7 +136,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, {[]{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return HasExplosives || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_FAIRY_BOW) || ((CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT)) && (Nuts || HookshotOrBoomerang || CanShield));});}}),
|
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, {[]{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return HasExplosives || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_FAIRY_BOW) || ((CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT)) && (Nuts || HookshotOrBoomerang || CanShield));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_SEWER] = Area("Forest Temple Sewer", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_SEWER] = Area("Forest Temple Sewer", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_WELL_CHEST, {[]{return HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER);}}),
|
LocationAccess(RC_FOREST_TEMPLE_WELL_CHEST, {[]{return HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -145,12 +145,12 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST] = Area("Forest Temple Below Boss Key Chest", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST] = Area("Forest Temple Below Boss Key Chest", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, {[]{return Here(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return HasExplosives || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_FAIRY_BOW) || ((CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT)) && (Nuts || HookshotOrBoomerang || CanShield));});}}),
|
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, {[]{return Here(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return HasExplosives || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_FAIRY_BOW) || ((CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT)) && (Nuts || HookshotOrBoomerang || CanShield));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_FLOORMASTER_ROOM] = Area("Forest Temple Floormaster Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_FLOORMASTER_ROOM] = Area("Forest Temple Floormaster Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_FLOORMASTER_CHEST, {[]{return CanAdultDamage || CanChildDamage;}}),
|
LocationAccess(RC_FOREST_TEMPLE_FLOORMASTER_CHEST, {[]{return CanAdultDamage || CanChildDamage;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -158,13 +158,13 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_WEST_CORRIDOR] = Area("Forest Temple West Corridor", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_WEST_CORRIDOR] = Area("Forest Temple West Corridor", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return SmallKeys(RR_FOREST_TEMPLE, 1, 5);}}),
|
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return SmallKeys(RR_FOREST_TEMPLE, 1, 5);}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM] = Area("Forest Temple Block Push Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM] = Area("Forest Temple Block Push Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, {[]{return GoronBracelet && (CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT));}}),
|
LocationAccess(RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, {[]{return GoronBracelet && (CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -175,13 +175,13 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED, {[]{return (CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT)) && GoronBracelet && SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED, {[]{return (CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT)) && GoronBracelet && SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED] = Area("Forest Temple NW Corridor Twisted", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED] = Area("Forest Temple NW Corridor Twisted", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 3);}}),
|
Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 3);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED] = Area("Forest Temple NW Corridor Straightened", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED] = Area("Forest Temple NW Corridor Straightened", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_BOSS_KEY_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_BOSS_KEY_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -190,7 +190,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_RED_POE_ROOM] = Area("Forest Temple Red Poe Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_RED_POE_ROOM] = Area("Forest Temple Red Poe Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTempleJoelle, {[]{return ForestTempleJoelle || CanUse(RG_FAIRY_BOW);}}),
|
EventAccess(&ForestTempleJoelle, {[]{return ForestTempleJoelle || CanUse(RG_FAIRY_BOW);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -202,7 +202,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_UPPER_STALFOS, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_UPPER_STALFOS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_UPPER_STALFOS] = Area("Forest Temple Upper Stalfos", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_UPPER_STALFOS] = Area("Forest Temple Upper Stalfos", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_BOW_CHEST, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER);}}),
|
LocationAccess(RC_FOREST_TEMPLE_BOW_CHEST, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -211,7 +211,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_BLUE_POE_ROOM] = Area("Forest Temple Blue Poe Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_BLUE_POE_ROOM] = Area("Forest Temple Blue Poe Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTempleBeth, {[]{return ForestTempleBeth || CanUse(RG_FAIRY_BOW);}}),
|
EventAccess(&ForestTempleBeth, {[]{return ForestTempleBeth || CanUse(RG_FAIRY_BOW);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -223,25 +223,25 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, {[]{return SmallKeys(RR_FOREST_TEMPLE, 4);}}),
|
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, {[]{return SmallKeys(RR_FOREST_TEMPLE, 4);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED] = Area("Forest Temple NE Corridor Straightened", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED] = Area("Forest Temple NE Corridor Straightened", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 4);}}),
|
Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 4);}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5);}}),
|
Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED] = Area("Forest Temple NE Corridor Twisted", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED] = Area("Forest Temple NE Corridor Twisted", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5);}}),
|
Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5);}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_FROZEN_EYE_ROOM] = Area("Forest Temple Frozen Eye Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_FROZEN_EYE_ROOM] = Area("Forest Temple Frozen Eye Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5);}}),
|
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5);}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5) && (CanUse(RG_FAIRY_BOW) || CanUse(RG_DINS_FIRE));}}),
|
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5) && (CanUse(RG_FAIRY_BOW) || CanUse(RG_DINS_FIRE));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_FALLING_ROOM] = Area("Forest Temple Falling Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_FALLING_ROOM] = Area("Forest Temple Falling Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -250,7 +250,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_GREEN_POE_ROOM] = Area("Forest Temple Green Poe Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_GREEN_POE_ROOM] = Area("Forest Temple Green Poe Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTempleAmy, {[]{return ForestTempleAmy || CanUse(RG_FAIRY_BOW);}}),
|
EventAccess(&ForestTempleAmy, {[]{return ForestTempleAmy || CanUse(RG_FAIRY_BOW);}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -259,13 +259,13 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, {[]{return ForestTempleAmy;}}),
|
Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, {[]{return ForestTempleAmy;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_EAST_CORRIDOR] = Area("Forest Temple East Corridor", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_EAST_CORRIDOR] = Area("Forest Temple East Corridor", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
Entrance(RR_FOREST_TEMPLE_LOBBY, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
||||||
Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, {[]{return CanAdultAttack || CanChildAttack || Nuts;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_BOSS_REGION] = Area("Forest Temple Boss Region", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_BOSS_REGION] = Area("Forest Temple Boss Region", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_BASEMENT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_BASEMENT_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_FOREST_TEMPLE_GS_BASEMENT, {[]{return HookshotOrBoomerang;}}),
|
LocationAccess(RC_FOREST_TEMPLE_GS_BASEMENT, {[]{return HookshotOrBoomerang;}}),
|
||||||
@ -280,7 +280,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(FOREST_TEMPLE)->IsMQ()) {
|
if (randoCtx->GetDungeon(FOREST_TEMPLE)->IsMQ()) {
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_LOBBY] = Area("Forest Temple MQ Lobby", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_LOBBY] = Area("Forest Temple MQ Lobby", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, {[]{return CanJumpslash || Bombs || CanUse(RG_STICKS) || Nuts || HookshotOrBoomerang || CanUse(RG_DINS_FIRE) || KokiriSword || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOVER_BOOTS);}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, {[]{return CanJumpslash || Bombs || CanUse(RG_STICKS) || Nuts || HookshotOrBoomerang || CanUse(RG_DINS_FIRE) || KokiriSword || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOVER_BOOTS);}}),
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, {[]{return HookshotOrBoomerang;}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, {[]{return HookshotOrBoomerang;}}),
|
||||||
@ -290,7 +290,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, {[]{return SmallKeys(RR_FOREST_TEMPLE, 1) && (CanAdultAttack || CanChildAttack || Nuts);}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, {[]{return SmallKeys(RR_FOREST_TEMPLE, 1) && (CanAdultAttack || CanChildAttack || Nuts);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_CENTRAL_AREA] = Area("Forest Temple MQ Central Area", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_CENTRAL_AREA] = Area("Forest Temple MQ Central Area", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -308,7 +308,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, {[]{return ForestTempleJoAndBeth && ForestTempleAmyAndMeg;}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, {[]{return ForestTempleJoAndBeth && ForestTempleAmyAndMeg;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_AFTER_BLOCK_PUZZLE] = Area("Forest Temple MQ After Block Puzzle", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_AFTER_BLOCK_PUZZLE] = Area("Forest Temple MQ After Block Puzzle", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, {[]{return SmallKeys(RR_FOREST_TEMPLE, 3);}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, {[]{return SmallKeys(RR_FOREST_TEMPLE, 3);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -319,7 +319,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, {[]{return SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, {[]{return SmallKeys(RR_FOREST_TEMPLE, 2);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE] = Area("Forest Temple MQ Outdoor Ledge", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE] = Area("Forest Temple MQ Outdoor Ledge", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, {[]{return CanJumpslash;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -327,7 +327,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Area("Forest Temple MQ NW Outdoors", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Area("Forest Temple MQ NW Outdoors", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -337,7 +337,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, {[]{return IsAdult && CanUse(RG_FIRE_ARROWS);}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, {[]{return IsAdult && CanUse(RG_FIRE_ARROWS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS] = Area("Forest Temple MQ NE Outdoors", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS] = Area("Forest Temple MQ NE Outdoors", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_DINS_FIRE));}}),
|
||||||
@ -352,7 +352,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, {[]{return IsAdult && CanUse(RG_LONGSHOT);}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, {[]{return IsAdult && CanUse(RG_LONGSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES] = Area("Forest Temple MQ Outdoors Top Ledges", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES] = Area("Forest Temple MQ Outdoors Top Ledges", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -362,7 +362,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
//Trick: LogicForestOutdoorsLedge && IsAdult && CanUse(RG_HOVER_BOOTS)
|
//Trick: LogicForestOutdoorsLedge && IsAdult && CanUse(RG_HOVER_BOOTS)
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE] = Area("Forest Temple MQ NE Outdoors Ledge", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE] = Area("Forest Temple MQ NE Outdoors Ledge", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -371,7 +371,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, {[]{return CanPlay(SongOfTime);}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, {[]{return CanPlay(SongOfTime);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_BOW_REGION] = Area("Forest Temple MQ Bow Region", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_BOW_REGION] = Area("Forest Temple MQ Bow Region", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTempleJoAndBeth, {[]{return ForestTempleJoAndBeth || (IsAdult && CanUse(RG_FAIRY_BOW));}}),
|
EventAccess(&ForestTempleJoAndBeth, {[]{return ForestTempleJoAndBeth || (IsAdult && CanUse(RG_FAIRY_BOW));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -384,7 +384,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5) && ((IsAdult && CanUse(RG_FAIRY_BOW)) || CanUse(RG_DINS_FIRE));}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, {[]{return SmallKeys(RR_FOREST_TEMPLE, 5) && ((IsAdult && CanUse(RG_FAIRY_BOW)) || CanUse(RG_DINS_FIRE));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_FALLING_ROOM] = Area("Forest Temple MQ Falling Room", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_FALLING_ROOM] = Area("Forest Temple MQ Falling Room", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTempleAmyAndMeg, {[]{return ForestTempleAmyAndMeg || (IsAdult && CanUse(RG_FAIRY_BOW) && SmallKeys(RR_FOREST_TEMPLE, 6));}}),
|
EventAccess(&ForestTempleAmyAndMeg, {[]{return ForestTempleAmyAndMeg || (IsAdult && CanUse(RG_FAIRY_BOW) && SmallKeys(RR_FOREST_TEMPLE, 6));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -395,7 +395,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, {[]{return true;}}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_BOSS_REGION] = Area("Forest Temple MQ Boss Region", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_BOSS_REGION] = Area("Forest Temple MQ Boss Region", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -408,7 +408,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_FOREST_TEMPLE_BOSS_ENTRYWAY] =
|
areaTable[RR_FOREST_TEMPLE_BOSS_ENTRYWAY] =
|
||||||
Area("Forest Temple Boss Entryway", "Forest Temple", RHT_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Forest Temple Boss Entryway", "Forest Temple", RA_FOREST_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_BOSS_REGION, { [] { return randoCtx->GetDungeon(FOREST_TEMPLE)->IsVanilla() && false; } }),
|
Entrance(RR_FOREST_TEMPLE_BOSS_REGION, { [] { return randoCtx->GetDungeon(FOREST_TEMPLE)->IsVanilla() && false; } }),
|
||||||
@ -417,7 +417,7 @@ void AreaTable_Init_ForestTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Area(
|
areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Area(
|
||||||
"Forest Temple Boss Room", "Forest Temple", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
"Forest Temple Boss Room", "Forest Temple", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&ForestTempleClear, { [] {
|
EventAccess(&ForestTempleClear, { [] {
|
||||||
|
@ -11,7 +11,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Area("Ganon's Castle Entryway", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Area("Ganon's Castle Entryway", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_CASTLE_LOBBY, {[]{return randoCtx->GetDungeon(GANONS_CASTLE)->IsVanilla();}}),
|
Entrance(RR_GANONS_CASTLE_LOBBY, {[]{return randoCtx->GetDungeon(GANONS_CASTLE)->IsVanilla();}}),
|
||||||
Entrance(RR_GANONS_CASTLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(GANONS_CASTLE)->IsMQ();}}),
|
Entrance(RR_GANONS_CASTLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(GANONS_CASTLE)->IsMQ();}}),
|
||||||
@ -22,7 +22,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(GANONS_CASTLE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(GANONS_CASTLE)->IsVanilla()) {
|
||||||
areaTable[RR_GANONS_CASTLE_LOBBY] = Area("Ganon's Castle Lobby", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GANONS_CASTLE_LOBBY] = Area("Ganon's Castle Lobby", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHEIK_HINT_GC, {[]{return true;}}),
|
LocationAccess(RC_SHEIK_HINT_GC, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -43,7 +43,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
Entrance(RR_GANONS_CASTLE_DEKU_SCRUBS, {[]{return randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH);}}),
|
Entrance(RR_GANONS_CASTLE_DEKU_SCRUBS, {[]{return randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_DEKU_SCRUBS] = Area("Ganon's Castle Deku Scrubs", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_DEKU_SCRUBS] = Area("Ganon's Castle Deku Scrubs", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -54,7 +54,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, {[]{return CanStunDeku;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL] = Area("Ganon's Castle Forest Trial", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL] = Area("Ganon's Castle Forest Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && (FireArrows || DinsFire);}}),
|
EventAccess(&ForestTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && (FireArrows || DinsFire);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -62,12 +62,12 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, {[]{return CanAdultDamage || CanChildDamage;}}),
|
LocationAccess(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, {[]{return CanAdultDamage || CanChildDamage;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Area("Ganon's Castle Fire Trial", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Area("Ganon's Castle Fire Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FireTrialClear, {[]{return CanUse(RG_GORON_TUNIC) && CanUse(RG_GOLDEN_GAUNTLETS) && CanUse(RG_LIGHT_ARROWS) && CanUse(RG_LONGSHOT);}}),
|
EventAccess(&FireTrialClear, {[]{return CanUse(RG_GORON_TUNIC) && CanUse(RG_GOLDEN_GAUNTLETS) && CanUse(RG_LIGHT_ARROWS) && CanUse(RG_LONGSHOT);}}),
|
||||||
}, {}, {});
|
}, {}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Area("Ganon's Castle Water Trial", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Area("Ganon's Castle Water Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || HasBottle;}}),
|
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || HasBottle;}}),
|
||||||
EventAccess(&FairyPot, {[]{return FairyPot || BlueFire;}}),
|
EventAccess(&FairyPot, {[]{return FairyPot || BlueFire;}}),
|
||||||
@ -78,7 +78,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, {[]{return true;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL] = Area("Ganon's Castle Shadow Trial", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL] = Area("Ganon's Castle Shadow Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ShadowTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && CanUse(RG_MEGATON_HAMMER) && ((FireArrows && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH))) || (CanUse(RG_LONGSHOT) && (CanUse(RG_HOVER_BOOTS) || (DinsFire && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH))))));}}),
|
EventAccess(&ShadowTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && CanUse(RG_MEGATON_HAMMER) && ((FireArrows && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH))) || (CanUse(RG_LONGSHOT) && (CanUse(RG_HOVER_BOOTS) || (DinsFire && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH))))));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -87,7 +87,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, {[]{return CanUse(RG_FIRE_ARROWS) || (CanUse(RG_LONGSHOT) && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_DINS_FIRE)));}}),
|
LocationAccess(RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, {[]{return CanUse(RG_FIRE_ARROWS) || (CanUse(RG_LONGSHOT) && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_DINS_FIRE)));}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Area("Ganon's Castle Spirit Trial", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Area("Ganon's Castle Spirit Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutPot, {[]{return NutPot || (((randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && CanJumpslash) || CanUse(RG_HOOKSHOT)) && HasBombchus && CanUse(RG_FAIRY_BOW) && (CanUse(RG_MIRROR_SHIELD) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS))));}}),
|
EventAccess(&NutPot, {[]{return NutPot || (((randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && CanJumpslash) || CanUse(RG_HOOKSHOT)) && HasBombchus && CanUse(RG_FAIRY_BOW) && (CanUse(RG_MIRROR_SHIELD) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS))));}}),
|
||||||
EventAccess(&SpiritTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_MIRROR_SHIELD) || randoCtx->GetOption(RSK_SUNLIGHT_ARROWS)) && HasBombchus && ((randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && CanJumpslash) || CanUse(RG_HOOKSHOT));}}),
|
EventAccess(&SpiritTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_MIRROR_SHIELD) || randoCtx->GetOption(RSK_SUNLIGHT_ARROWS)) && HasBombchus && ((randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && CanJumpslash) || CanUse(RG_HOOKSHOT));}}),
|
||||||
@ -97,7 +97,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, {[]{return (randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || CanUse(RG_HOOKSHOT)) && HasBombchus && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH));}}),
|
LocationAccess(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, {[]{return (randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || CanUse(RG_HOOKSHOT)) && HasBombchus && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH));}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Area("Ganon's Castle Light Trial", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Area("Ganon's Castle Light Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&LightTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && CanUse(RG_HOOKSHOT) && SmallKeys(RR_GANONS_CASTLE, 2) && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH));}}),
|
EventAccess(&LightTrialClear, {[]{return CanUse(RG_LIGHT_ARROWS) && CanUse(RG_HOOKSHOT) && SmallKeys(RR_GANONS_CASTLE, 2) && (randoCtx->GetTrickOption(RT_LENS_GANON) || CanUse(RG_LENS_OF_TRUTH));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -113,7 +113,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
}, {});
|
}, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_TOWER] = Area("Ganon's Castle Tower", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GANONS_CASTLE_TOWER] = Area("Ganon's Castle Tower", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GANONS_TOWER_BOSS_KEY_CHEST, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
LocationAccess(RC_GANONS_TOWER_BOSS_KEY_CHEST, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
LocationAccess(RC_GANONDORF_HINT, {[]{return BossKeyGanonsCastle && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD));}}),
|
LocationAccess(RC_GANONDORF_HINT, {[]{return BossKeyGanonsCastle && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD));}}),
|
||||||
@ -124,7 +124,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(GANONS_CASTLE)->IsMQ()) {
|
if (randoCtx->GetDungeon(GANONS_CASTLE)->IsMQ()) {
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_LOBBY] = Area("Ganon's Castle MQ Lobby", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GANONS_CASTLE_MQ_LOBBY] = Area("Ganon's Castle MQ Lobby", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHEIK_HINT_MQ_GC, {[]{return true;}}),
|
LocationAccess(RC_SHEIK_HINT_MQ_GC, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -145,7 +145,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
Entrance(RR_GANONS_CASTLE_MQ_DEKU_SCRUBS, {[]{return randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || CanUse(RG_LENS_OF_TRUTH);}}),
|
Entrance(RR_GANONS_CASTLE_MQ_DEKU_SCRUBS, {[]{return randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || CanUse(RG_LENS_OF_TRUTH);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_DEKU_SCRUBS] = Area("Ganon's Castle MQ Deku Scrubs", "Ganon's Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_DEKU_SCRUBS] = Area("Ganon's Castle MQ Deku Scrubs", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -157,7 +157,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, {[]{return CanStunDeku;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL] = Area("Ganon's Castle MQ Forest Trial", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL] = Area("Ganon's Castle MQ Forest Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ForestTrialClear, {[]{return IsAdult && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) && CanPlay(SongOfTime);}}),
|
EventAccess(&ForestTrialClear, {[]{return IsAdult && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) && CanPlay(SongOfTime);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -167,13 +167,13 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, {[]{return (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) && HookshotOrBoomerang;}}),
|
LocationAccess(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, {[]{return (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) && HookshotOrBoomerang;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL] = Area("Ganon's Castle MQ Fire Trial", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL] = Area("Ganon's Castle MQ Fire Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FireTrialClear, {[]{return CanUse(RG_GORON_TUNIC) && CanUse(RG_GOLDEN_GAUNTLETS) && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_LONGSHOT) || HoverBoots || (randoCtx->GetTrickOption(RT_GANON_MQ_FIRE_TRIAL) && CanUse(RG_HOOKSHOT)));}}),
|
EventAccess(&FireTrialClear, {[]{return CanUse(RG_GORON_TUNIC) && CanUse(RG_GOLDEN_GAUNTLETS) && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_LONGSHOT) || HoverBoots || (randoCtx->GetTrickOption(RT_GANON_MQ_FIRE_TRIAL) && CanUse(RG_HOOKSHOT)));}}),
|
||||||
//Trick: CanUse(RG_GORON_TUNIC) && CanUse(RG_GOLDEN_GAUNTLETS) && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_LONGSHOT) || HoverBoots || (LogicFireTrialMQ && CanUse(RG_HOOKSHOT)))
|
//Trick: CanUse(RG_GORON_TUNIC) && CanUse(RG_GOLDEN_GAUNTLETS) && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_LONGSHOT) || HoverBoots || (LogicFireTrialMQ && CanUse(RG_HOOKSHOT)))
|
||||||
}, {}, {});
|
}, {}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL] = Area("Ganon's Castle MQ Water Trial", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL] = Area("Ganon's Castle MQ Water Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&WaterTrialClear, {[]{return BlueFire && IsAdult && CanUse(RG_LIGHT_ARROWS) && SmallKeys(RR_GANONS_CASTLE, 3);}}),
|
EventAccess(&WaterTrialClear, {[]{return BlueFire && IsAdult && CanUse(RG_LIGHT_ARROWS) && SmallKeys(RR_GANONS_CASTLE, 3);}}),
|
||||||
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || (HasBottle && CanJumpslash);}}),
|
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || (HasBottle && CanJumpslash);}}),
|
||||||
@ -182,7 +182,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, {[]{return BlueFire;}}),
|
LocationAccess(RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, {[]{return BlueFire;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL] = Area("Ganon's Castle MQ Shadow Trial", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL] = Area("Ganon's Castle MQ Shadow Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ShadowTrialClear, {[]{return IsAdult && CanUse(RG_LIGHT_ARROWS) && (randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || CanUse(RG_LENS_OF_TRUTH)) && (HoverBoots || (Hookshot && (HasFireSource || randoCtx->GetTrickOption(RT_GANON_MQ_SHADOW_TRIAL))));}}),
|
EventAccess(&ShadowTrialClear, {[]{return IsAdult && CanUse(RG_LIGHT_ARROWS) && (randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || CanUse(RG_LENS_OF_TRUTH)) && (HoverBoots || (Hookshot && (HasFireSource || randoCtx->GetTrickOption(RT_GANON_MQ_SHADOW_TRIAL))));}}),
|
||||||
//Trick: IsAdult && CanUse(RG_LIGHT_ARROWS) && (LogicLensCastleMQ || CanUse(RG_LENS_OF_TRUTH)) && (HoverBoots || (Hookshot && (HasFireSource || LogicShadowTrialMQ)))
|
//Trick: IsAdult && CanUse(RG_LIGHT_ARROWS) && (LogicLensCastleMQ || CanUse(RG_LENS_OF_TRUTH)) && (HoverBoots || (Hookshot && (HasFireSource || LogicShadowTrialMQ)))
|
||||||
@ -193,7 +193,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
//Trick: IsAdult && Bow && (LogicLensCastleMQ || CanUse(RG_LENS_OF_TRUTH)) && (HoverBoots || (Hookshot && (HasFireSource || LogicShadowTrialMQ)))
|
//Trick: IsAdult && Bow && (LogicLensCastleMQ || CanUse(RG_LENS_OF_TRUTH)) && (HoverBoots || (Hookshot && (HasFireSource || LogicShadowTrialMQ)))
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL] = Area("Ganon's Castle MQ Spirit Castle", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL] = Area("Ganon's Castle MQ Spirit Castle", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&SpiritTrialClear, {[]{return IsAdult && CanUse(RG_LIGHT_ARROWS) && Hammer && HasBombchus && ((FireArrows && MirrorShield) || randoCtx->GetOption(RSK_SUNLIGHT_ARROWS));}}),
|
EventAccess(&SpiritTrialClear, {[]{return IsAdult && CanUse(RG_LIGHT_ARROWS) && Hammer && HasBombchus && ((FireArrows && MirrorShield) || randoCtx->GetOption(RSK_SUNLIGHT_ARROWS));}}),
|
||||||
EventAccess(&NutPot, {[]{return NutPot || (Hammer && HasBombchus && IsAdult && ((CanUse(RG_FIRE_ARROWS) && MirrorShield) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS))));}}),
|
EventAccess(&NutPot, {[]{return NutPot || (Hammer && HasBombchus && IsAdult && ((CanUse(RG_FIRE_ARROWS) && MirrorShield) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS))));}}),
|
||||||
@ -207,7 +207,7 @@ void AreaTable_Init_GanonsCastle() {
|
|||||||
LocationAccess(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && ((CanUse(RG_FIRE_ARROWS) && CanUse(RG_MIRROR_SHIELD)) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS)));}}),
|
LocationAccess(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, {[]{return IsAdult && Hammer && HasBombchus && ((CanUse(RG_FIRE_ARROWS) && CanUse(RG_MIRROR_SHIELD)) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS)));}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL] = Area("Ganon's Castle MQ Light Trial", "Ganons Castle", RHT_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL] = Area("Ganon's Castle MQ Light Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&LightTrialClear, {[]{return IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD)) && CanUse(RG_LIGHT_ARROWS) && SmallKeys(RR_GANONS_CASTLE, 3) && (randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || CanUse(RG_LENS_OF_TRUTH)) && (Hookshot || randoCtx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL));}}),
|
EventAccess(&LightTrialClear, {[]{return IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD)) && CanUse(RG_LIGHT_ARROWS) && SmallKeys(RR_GANONS_CASTLE, 3) && (randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || CanUse(RG_LENS_OF_TRUTH)) && (Hookshot || randoCtx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL));}}),
|
||||||
//Trick: IsAdult && CanUse(RG_LIGHT_ARROWS) && SmallKeys(RR_GANONS_CASTLE, 3) && (LogicLensCastleMQ || CanUse(RG_LENS_OF_TRUTH)) && (Hookshot || LogicLightTrialMQ)
|
//Trick: IsAdult && CanUse(RG_LIGHT_ARROWS) && SmallKeys(RR_GANONS_CASTLE, 3) && (LogicLensCastleMQ || CanUse(RG_LENS_OF_TRUTH)) && (Hookshot || LogicLightTrialMQ)
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_ENTRYWAY] = Area("Gerudo Training Grounds Entryway", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_ENTRYWAY] = Area("Gerudo Training Grounds Entryway", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_LOBBY, {[]{return randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsVanilla();}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_LOBBY, {[]{return randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsVanilla();}}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_LOBBY, {[]{return randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsMQ();}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_LOBBY, {[]{return randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsMQ();}}),
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsVanilla()) {
|
if (randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsVanilla()) {
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_LOBBY] = Area("Gerudo Training Grounds Lobby", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_LOBBY] = Area("Gerudo Training Grounds Lobby", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, {[]{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, {[]{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT);}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, {[]{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, {[]{return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT);}}),
|
||||||
@ -35,7 +35,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE, {[]{return true;}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE] = Area("Gerudo Training Grounds Central Maze", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE] = Area("Gerudo Training Grounds Central Maze", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, {[]{return SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 3) && (randoCtx->GetTrickOption(RT_LENS_GTG) || CanUse(RG_LENS_OF_TRUTH));}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, {[]{return SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 3) && (randoCtx->GetTrickOption(RT_LENS_GTG) || CanUse(RG_LENS_OF_TRUTH));}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, {[]{return SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 4);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, {[]{return SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 4);}}),
|
||||||
@ -47,7 +47,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT, {[]{return SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 9);}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT, {[]{return SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 9);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT] = Area("Gerudo Training Grounds Central Maze Right", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT] = Area("Gerudo Training Grounds Central Maze Right", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, {[]{return true;}}),
|
||||||
@ -58,7 +58,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM, {[]{return true;}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM] = Area("Gerudo Training Grounds Lava Room", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM] = Area("Gerudo Training Grounds Lava Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, {[]{return CanUse(RG_HOOKSHOT) && CanPlay(SongOfTime) && IronBoots && WaterTimer >= 24;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, {[]{return CanUse(RG_HOOKSHOT) && CanPlay(SongOfTime) && IronBoots && WaterTimer >= 24;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -67,7 +67,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, {[]{return CanUse(RG_LONGSHOT) || (CanUse(RG_HOVER_BOOTS) && CanUse(RG_HOOKSHOT));}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, {[]{return CanUse(RG_LONGSHOT) || (CanUse(RG_HOVER_BOOTS) && CanUse(RG_HOOKSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_HAMMER_ROOM] = Area("Gerudo Training Grounds Hammer Room", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_HAMMER_ROOM] = Area("Gerudo Training Grounds Hammer Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, {[]{return CanUse(RG_MEGATON_HAMMER) || (CanTakeDamage && randoCtx->GetTrickOption(RT_FLAMING_CHESTS));}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, {[]{return CanUse(RG_MEGATON_HAMMER) || (CanTakeDamage && randoCtx->GetTrickOption(RT_FLAMING_CHESTS));}}),
|
||||||
@ -77,7 +77,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM, {[]{return true;}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER] = Area("Gerudo Training Grounds Eye Statue Lower", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER] = Area("Gerudo Training Grounds Eye Statue Lower", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, {[]{return CanUse(RG_FAIRY_BOW);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, {[]{return CanUse(RG_FAIRY_BOW);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -85,7 +85,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, {[]{return true;}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_HAMMER_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_UPPER] = Area("Gerudo Training Grounds Eye Statue Upper", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_UPPER] = Area("Gerudo Training Grounds Eye Statue Upper", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, {[]{return CanUse(RG_FAIRY_BOW);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, {[]{return CanUse(RG_FAIRY_BOW);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -93,7 +93,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER, {[]{return true;}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_ROOM] = Area("Gerudo Training Grounds Heavy Block Room", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_ROOM] = Area("Gerudo Training Grounds Heavy Block Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, {[]{return CanJumpslash;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -102,7 +102,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM, {[]{return (randoCtx->GetTrickOption(RT_LENS_GTG) || CanUse(RG_LENS_OF_TRUTH)) && (CanUse(RG_HOOKSHOT) || (randoCtx->GetTrickOption(RT_GTG_FAKE_WALL) && CanUse(RG_HOVER_BOOTS))) && CanUse(RG_SILVER_GAUNTLETS);}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM, {[]{return (randoCtx->GetTrickOption(RT_LENS_GTG) || CanUse(RG_LENS_OF_TRUTH)) && (CanUse(RG_HOOKSHOT) || (randoCtx->GetTrickOption(RT_GTG_FAKE_WALL) && CanUse(RG_HOVER_BOOTS))) && CanUse(RG_SILVER_GAUNTLETS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM] = Area("Gerudo Training Grounds Like Like Room", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_LIKE_LIKE_ROOM] = Area("Gerudo Training Grounds Like Like Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, {[]{return CanJumpslash;}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, {[]{return CanJumpslash;}}),
|
||||||
@ -115,7 +115,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsMQ()) {
|
if (randoCtx->GetDungeon(GERUDO_TRAINING_GROUNDS)->IsMQ()) {
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_LOBBY] = Area("Gerudo Training Grounds MQ Lobby", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_LOBBY] = Area("Gerudo Training Grounds MQ Lobby", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, {[]{return true;}}),
|
||||||
@ -130,7 +130,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE, {[]{return Here(RR_GERUDO_TRAINING_GROUNDS_MQ_LOBBY, []{return (IsAdult && CanUse(RG_FAIRY_BOW)) || (IsChild && CanUse(RG_FAIRY_SLINGSHOT));});}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE, {[]{return Here(RR_GERUDO_TRAINING_GROUNDS_MQ_LOBBY, []{return (IsAdult && CanUse(RG_FAIRY_BOW)) || (IsChild && CanUse(RG_FAIRY_SLINGSHOT));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE] = Area("Gerudo Training Grounds MQ Right Side", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE] = Area("Gerudo Training Grounds MQ Right Side", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
//EventAccess(&WallFairy, {[]{return WallFairy || (IsAdult && CanUse(RG_FAIRY_BOW));}}),
|
//EventAccess(&WallFairy, {[]{return WallFairy || (IsAdult && CanUse(RG_FAIRY_BOW));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -141,12 +141,12 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER, {[]{return (Bow || (CanUse(RG_LONGSHOT) && HasFireSource)) && CanUse(RG_HOVER_BOOTS) && IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD));}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER, {[]{return (Bow || (CanUse(RG_LONGSHOT) && HasFireSource)) && CanUse(RG_HOVER_BOOTS) && IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER] = Area("Gerudo Training Grounds MQ Underwater", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER] = Area("Gerudo Training Grounds MQ Underwater", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, {[]{return HasFireSource && IsAdult && CanUse(RG_IRON_BOOTS) && WaterTimer >= 24 && CanTakeDamage;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, {[]{return HasFireSource && IsAdult && CanUse(RG_IRON_BOOTS) && WaterTimer >= 24 && CanTakeDamage;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_LEFT_SIDE] = Area("Gerudo Training Grounds MQ Left Side", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_LEFT_SIDE] = Area("Gerudo Training Grounds MQ Left Side", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || HasExplosives;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || HasExplosives;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -155,7 +155,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
//Trick: (IsAdult && CanUse(RG_LONGSHOT)) || LogicGtgMQWithoutHookshot || (LogicGtgMQWithHookshot && IsAdult && CanUse(RG_HOOKSHOT))
|
//Trick: (IsAdult && CanUse(RG_LONGSHOT)) || LogicGtgMQWithoutHookshot || (LogicGtgMQWithHookshot && IsAdult && CanUse(RG_HOOKSHOT))
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_STALFOS_ROOM] = Area("Gerudo Training Grounds MQ Stalfos Room", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_STALFOS_ROOM] = Area("Gerudo Training Grounds MQ Stalfos Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || HasBottle;}}),
|
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || HasBottle;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -168,7 +168,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
//Trick: IsAdult && (LogicLensGtgMQ || CanUse(RG_LENS_OF_TRUTH)) && BlueFire && (CanPlay(SongOfTime) || (LogicGtgFakeWall && IsAdult && CanUse(RG_HOVER_BOOTS)))
|
//Trick: IsAdult && (LogicLensGtgMQ || CanUse(RG_LENS_OF_TRUTH)) && BlueFire && (CanPlay(SongOfTime) || (LogicGtgFakeWall && IsAdult && CanUse(RG_HOVER_BOOTS)))
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_BACK_AREAS] = Area("Gerudo Training Grounds MQ Back Areas", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_BACK_AREAS] = Area("Gerudo Training Grounds MQ Back Areas", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, {[]{return CanUse(RG_FAIRY_BOW);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, {[]{return CanUse(RG_FAIRY_BOW);}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, {[]{return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, {[]{return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
@ -179,7 +179,7 @@ void AreaTable_Init_GerudoTrainingGrounds() {
|
|||||||
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE, {[]{return CanUse(RG_LONGSHOT);}}),
|
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_RIGHT_SIDE, {[]{return CanUse(RG_LONGSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_CENTRAL_MAZE_RIGHT] = Area("Gerudo Training Grounds MQ Central Maze Right", "Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_CENTRAL_MAZE_RIGHT] = Area("Gerudo Training Grounds MQ Central Maze Right", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, {[]{return true;}}),
|
||||||
|
@ -6,7 +6,7 @@ using namespace Logic;
|
|||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void AreaTable_Init_GerudoValley() {
|
void AreaTable_Init_GerudoValley() {
|
||||||
areaTable[RR_GERUDO_VALLEY] = Area("Gerudo Valley", "Gerudo Valley", RHT_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {
|
areaTable[RR_GERUDO_VALLEY] = Area("Gerudo Valley", "Gerudo Valley", RA_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BugRock, {[]{return BugRock || IsChild;}}),
|
EventAccess(&BugRock, {[]{return BugRock || IsChild;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GV_FORTRESS_SIDE, {[]{return (IsAdult && (CanRideEpona || CanUse(RG_LONGSHOT) || randoCtx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_OPEN) || CarpenterRescue)) || (IsChild && CanUse(RG_HOOKSHOT));}}),
|
Entrance(RR_GV_FORTRESS_SIDE, {[]{return (IsAdult && (CanRideEpona || CanUse(RG_LONGSHOT) || randoCtx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_OPEN) || CarpenterRescue)) || (IsChild && CanUse(RG_HOOKSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_UPPER_STREAM] = Area("GV Upper Stream", "Gerudo Valley", RHT_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {
|
areaTable[RR_GV_UPPER_STREAM] = Area("GV Upper Stream", "Gerudo Valley", RA_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_GV_UPPER_STREAM) && CanPlay(SongOfStorms));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_GV_UPPER_STREAM) && CanPlay(SongOfStorms));}}),
|
||||||
@ -36,19 +36,19 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GV_LOWER_STREAM, {[]{return true;}}),
|
Entrance(RR_GV_LOWER_STREAM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_LOWER_STREAM] = Area("GV Lower Stream", "Gerudo Valley", RHT_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GV_LOWER_STREAM] = Area("GV Lower Stream", "Gerudo Valley", RA_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_GROTTO_LEDGE] = Area("GV Grotto Ledge", "Gerudo Valley", RHT_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GV_GROTTO_LEDGE] = Area("GV Grotto Ledge", "Gerudo Valley", RA_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GV_LOWER_STREAM, {[]{return true;}}),
|
Entrance(RR_GV_LOWER_STREAM, {[]{return true;}}),
|
||||||
Entrance(RR_GV_OCTOROK_GROTTO, {[]{return CanUse(RG_SILVER_GAUNTLETS);}}),
|
Entrance(RR_GV_OCTOROK_GROTTO, {[]{return CanUse(RG_SILVER_GAUNTLETS);}}),
|
||||||
Entrance(RR_GV_CRATE_LEDGE, {[]{return CanUse(RG_LONGSHOT);}}),
|
Entrance(RR_GV_CRATE_LEDGE, {[]{return CanUse(RG_LONGSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_CRATE_LEDGE] = Area("GV Crate Ledge", "Gerudo Valley", RHT_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GV_CRATE_LEDGE] = Area("GV Crate Ledge", "Gerudo Valley", RA_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GV_CRATE_FREESTANDING_POH, {[]{return true;}}),
|
LocationAccess(RC_GV_CRATE_FREESTANDING_POH, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -56,7 +56,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GV_LOWER_STREAM, {[]{return true;}}),
|
Entrance(RR_GV_LOWER_STREAM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_FORTRESS_SIDE] = Area("GV Fortress Side", "Gerudo Valley", RHT_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {
|
areaTable[RR_GV_FORTRESS_SIDE] = Area("GV Fortress Side", "Gerudo Valley", RA_GERUDO_VALLEY, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BrokenSwordAccess, {[]{return IsAdult && (PoachersSawAccess || PoachersSaw);}}),
|
EventAccess(&BrokenSwordAccess, {[]{return IsAdult && (PoachersSawAccess || PoachersSaw);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -75,17 +75,17 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GV_CRATE_LEDGE, {[]{return false;}}),
|
Entrance(RR_GV_CRATE_LEDGE, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_CARPENTER_TENT] = Area("GV Carpenter Tent", "GV Carpenter Tent", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GV_CARPENTER_TENT] = Area("GV Carpenter Tent", "GV Carpenter Tent", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GV_FORTRESS_SIDE, {[]{return true;}}),
|
Entrance(RR_GV_FORTRESS_SIDE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_OCTOROK_GROTTO] = Area("GV Octorok Grotto", "GV Octorok Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GV_OCTOROK_GROTTO] = Area("GV Octorok Grotto", "GV Octorok Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GV_GROTTO_LEDGE, {[]{return true;}}),
|
Entrance(RR_GV_GROTTO_LEDGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GV_STORMS_GROTTO] = Area("GV Storms Grotto", "GV Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GV_STORMS_GROTTO] = Area("GV Storms Grotto", "GV Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GV_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_GV_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_GV_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_GV_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
||||||
@ -94,7 +94,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GV_FORTRESS_SIDE, {[]{return true;}}),
|
Entrance(RR_GV_FORTRESS_SIDE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_FORTRESS] = Area("Gerudo Fortress", "Gerudo Fortress", RHT_GERUDO_FORTRESS, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GERUDO_FORTRESS] = Area("Gerudo Fortress", "Gerudo Fortress", RA_GERUDO_FORTRESS, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&CarpenterRescue, {[]{return CanFinishGerudoFortress;}}),
|
EventAccess(&CarpenterRescue, {[]{return CanFinishGerudoFortress;}}),
|
||||||
EventAccess(&GF_GateOpen, {[]{return IsAdult && GerudoToken;}}),
|
EventAccess(&GF_GateOpen, {[]{return IsAdult && GerudoToken;}}),
|
||||||
@ -119,7 +119,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GF_STORMS_GROTTO, {[]{return IsAdult && CanOpenStormGrotto;}}),
|
Entrance(RR_GF_STORMS_GROTTO, {[]{return IsAdult && CanOpenStormGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GF_OUTSIDE_GATE] = Area("GF Outside Gate", "Gerudo Fortress", RHT_GERUDO_FORTRESS, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GF_OUTSIDE_GATE] = Area("GF Outside Gate", "Gerudo Fortress", RA_GERUDO_FORTRESS, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GF_GateOpen, {[]{return IsAdult && GerudoToken && (randoCtx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) || randoCtx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) /*|| ShuffleSpecialIndoorEntrances*/);}}),
|
EventAccess(&GF_GateOpen, {[]{return IsAdult && GerudoToken && (randoCtx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) || randoCtx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) /*|| ShuffleSpecialIndoorEntrances*/);}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -128,7 +128,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_WASTELAND_NEAR_FORTRESS, {[]{return true;}}),
|
Entrance(RR_WASTELAND_NEAR_FORTRESS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GF_STORMS_GROTTO] = Area("GF Storms Grotto", "GF Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GF_STORMS_GROTTO] = Area("GF Storms Grotto", "GF Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -136,13 +136,13 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_GERUDO_FORTRESS, {[]{return true;}}),
|
Entrance(RR_GERUDO_FORTRESS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WASTELAND_NEAR_FORTRESS] = Area("Wasteland Near Fortress", "Haunted Wasteland", RHT_HAUNTED_WASTELAND, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WASTELAND_NEAR_FORTRESS] = Area("Wasteland Near Fortress", "Haunted Wasteland", RA_HAUNTED_WASTELAND, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GF_OUTSIDE_GATE, {[]{return true;}}),
|
Entrance(RR_GF_OUTSIDE_GATE, {[]{return true;}}),
|
||||||
Entrance(RR_HAUNTED_WASTELAND, {[]{return CanUse(RG_HOVER_BOOTS) || CanUse(RG_LONGSHOT) || randoCtx->GetTrickOption(RT_HW_CROSSING);}}),
|
Entrance(RR_HAUNTED_WASTELAND, {[]{return CanUse(RG_HOVER_BOOTS) || CanUse(RG_LONGSHOT) || randoCtx->GetTrickOption(RT_HW_CROSSING);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HAUNTED_WASTELAND] = Area("Haunted Wasteland", "Haunted Wasteland", RHT_HAUNTED_WASTELAND, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_HAUNTED_WASTELAND] = Area("Haunted Wasteland", "Haunted Wasteland", RA_HAUNTED_WASTELAND, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
@ -157,13 +157,13 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_WASTELAND_NEAR_FORTRESS, {[]{return CanUse(RG_HOVER_BOOTS) || CanUse(RG_LONGSHOT) || randoCtx->GetTrickOption(RT_HW_CROSSING);}}),
|
Entrance(RR_WASTELAND_NEAR_FORTRESS, {[]{return CanUse(RG_HOVER_BOOTS) || CanUse(RG_LONGSHOT) || randoCtx->GetTrickOption(RT_HW_CROSSING);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Area("Wasteland Near Colossus", "Haunted Wasteland", RHT_HAUNTED_WASTELAND, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Area("Wasteland Near Colossus", "Haunted Wasteland", RA_HAUNTED_WASTELAND, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
||||||
Entrance(RR_HAUNTED_WASTELAND, {[]{return randoCtx->GetTrickOption(RT_HW_REVERSE) || false;}}),
|
Entrance(RR_HAUNTED_WASTELAND, {[]{return randoCtx->GetTrickOption(RT_HW_REVERSE) || false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DESERT_COLOSSUS] = Area("Desert Colossus", "Desert Colossus", RHT_DESERT_COLOSSUS, DAY_NIGHT_CYCLE, {
|
areaTable[RR_DESERT_COLOSSUS] = Area("Desert Colossus", "Desert Colossus", RA_DESERT_COLOSSUS, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPond, {[]{return FairyPond || CanPlay(SongOfStorms);}}),
|
EventAccess(&FairyPond, {[]{return FairyPond || CanPlay(SongOfStorms);}}),
|
||||||
EventAccess(&BugRock, {[]{return true;}}),
|
EventAccess(&BugRock, {[]{return true;}}),
|
||||||
@ -182,7 +182,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_COLOSSUS_GROTTO, {[]{return CanUse(RG_SILVER_GAUNTLETS);}}),
|
Entrance(RR_COLOSSUS_GROTTO, {[]{return CanUse(RG_SILVER_GAUNTLETS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DESERT_COLOSSUS_FROM_SPIRIT_ENTRYWAY] = Area("Desert Colossus From Spirit Entryway", "Desert Colossus", RHT_DESERT_COLOSSUS, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DESERT_COLOSSUS_FROM_SPIRIT_ENTRYWAY] = Area("Desert Colossus From Spirit Entryway", "Desert Colossus", RA_DESERT_COLOSSUS, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHEIK_AT_COLOSSUS, {[]{return true;}}),
|
LocationAccess(RC_SHEIK_AT_COLOSSUS, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -190,7 +190,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Area("Colossus Great Fairy Fountain", "Colossus Great Fairy Fountain", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Area("Colossus Great Fairy Fountain", "Colossus Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_COLOSSUS_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_COLOSSUS_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -198,7 +198,7 @@ void AreaTable_Init_GerudoValley() {
|
|||||||
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
Entrance(RR_DESERT_COLOSSUS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_COLOSSUS_GROTTO] = Area("Colossus Grotto", "Colossus Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_COLOSSUS_GROTTO] = Area("Colossus Grotto", "Colossus Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
||||||
|
@ -6,7 +6,7 @@ using namespace Logic;
|
|||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void AreaTable_Init_HyruleField() {
|
void AreaTable_Init_HyruleField() {
|
||||||
areaTable[RR_HYRULE_FIELD] = Area("Hyrule Field", "Hyrule Field", RHT_HYRULE_FIELD, DAY_NIGHT_CYCLE, {
|
areaTable[RR_HYRULE_FIELD] = Area("Hyrule Field", "Hyrule Field", RA_HYRULE_FIELD, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BigPoeKill, {[]{return CanUse(RG_FAIRY_BOW) && CanRideEpona && HasBottle;}}),
|
EventAccess(&BigPoeKill, {[]{return CanUse(RG_FAIRY_BOW) && CanRideEpona && HasBottle;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -32,7 +32,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HF_TEKTITE_GROTTO, {[]{return CanOpenBombGrotto;}}),
|
Entrance(RR_HF_TEKTITE_GROTTO, {[]{return CanOpenBombGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_SOUTHEAST_GROTTO] = Area("HF Southeast Grotto", "HF Southeast Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_HF_SOUTHEAST_GROTTO] = Area("HF Southeast Grotto", "HF Southeast Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_SOUTHEAST_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_HF_SOUTHEAST_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_HF_SOUTHEAST_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_HF_SOUTHEAST_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -41,7 +41,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_OPEN_GROTTO] = Area("HF Open Grotto", "HF Open Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_HF_OPEN_GROTTO] = Area("HF Open Grotto", "HF Open Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_OPEN_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_HF_OPEN_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_HF_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_HF_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -50,7 +50,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_INSIDE_FENCE_GROTTO] = Area("HF Inside Fence Grotto", "HF Inside Fence Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_HF_INSIDE_FENCE_GROTTO] = Area("HF Inside Fence Grotto", "HF Inside Fence Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_DEKU_SCRUB_GROTTO, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_HF_DEKU_SCRUB_GROTTO, {[]{return CanStunDeku;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -58,7 +58,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_COW_GROTTO] = Area("HF Cow Grotto", "HF Cow Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_HF_COW_GROTTO] = Area("HF Cow Grotto", "HF Cow Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_GS_COW_GROTTO, {[]{return HasFireSource && HookshotOrBoomerang;}}),
|
LocationAccess(RC_HF_GS_COW_GROTTO, {[]{return HasFireSource && HookshotOrBoomerang;}}),
|
||||||
LocationAccess(RC_HF_COW_GROTTO_COW, {[]{return HasFireSource && CanPlay(EponasSong);}}),
|
LocationAccess(RC_HF_COW_GROTTO_COW, {[]{return HasFireSource && CanPlay(EponasSong);}}),
|
||||||
@ -68,7 +68,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_NEAR_MARKET_GROTTO] = Area("HF Near Market Grotto", "HF Near Market Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_HF_NEAR_MARKET_GROTTO] = Area("HF Near Market Grotto", "HF Near Market Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_NEAR_MARKET_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_HF_NEAR_MARKET_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_HF_NEAR_MARKET_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_HF_NEAR_MARKET_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -77,7 +77,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_FAIRY_GROTTO] = Area("HF Fairy Grotto", "HF Fairy Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_HF_FAIRY_GROTTO] = Area("HF Fairy Grotto", "HF Fairy Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -85,7 +85,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_NEAR_KAK_GROTTO] = Area("HF Near Kak Grotto", "HF Near Kak Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_HF_NEAR_KAK_GROTTO] = Area("HF Near Kak Grotto", "HF Near Kak Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_GS_NEAR_KAK_GROTTO, {[]{return HookshotOrBoomerang;}}),
|
LocationAccess(RC_HF_GS_NEAR_KAK_GROTTO, {[]{return HookshotOrBoomerang;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -93,7 +93,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_HF_TEKTITE_GROTTO] = Area("HF Tektite Grotto", "HF Tektite Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_HF_TEKTITE_GROTTO] = Area("HF Tektite Grotto", "HF Tektite Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, {[]{return ProgressiveScale >= 2 || CanUse(RG_IRON_BOOTS);}}),
|
LocationAccess(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, {[]{return ProgressiveScale >= 2 || CanUse(RG_IRON_BOOTS);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -101,7 +101,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LAKE_HYLIA] = Area("Lake Hylia", "Lake Hylia", RHT_LAKE_HYLIA, DAY_NIGHT_CYCLE, {
|
areaTable[RR_LAKE_HYLIA] = Area("Lake Hylia", "Lake Hylia", RA_LAKE_HYLIA, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_LAKE_HYLIA) && CanPlay(SongOfStorms));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_LAKE_HYLIA) && CanPlay(SongOfStorms));}}),
|
||||||
@ -132,18 +132,18 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LH_GROTTO, {[]{return true;}}),
|
Entrance(RR_LH_GROTTO, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LH_FISHING_ISLAND] = Area("LH Fishing Island", "Lake Hylia", RHT_LAKE_HYLIA, DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_LH_FISHING_ISLAND] = Area("LH Fishing Island", "Lake Hylia", RA_LAKE_HYLIA, DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
||||||
Entrance(RR_LH_FISHING_HOLE, {[]{return true;}}),
|
Entrance(RR_LH_FISHING_HOLE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LH_OWL_FLIGHT] = Area("LH Owl Flight", "Lake Hylia", RHT_LAKE_HYLIA, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_LH_OWL_FLIGHT] = Area("LH Owl Flight", "Lake Hylia", RA_LAKE_HYLIA, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LH_LAB] = Area("LH Lab", "LH Lab", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_LH_LAB] = Area("LH Lab", "LH Lab", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&EyedropsAccess, {[]{return EyedropsAccess || (IsAdult && (EyeballFrogAccess || (EyeballFrog && DisableTradeRevert)));}}),
|
EventAccess(&EyedropsAccess, {[]{return EyedropsAccess || (IsAdult && (EyeballFrogAccess || (EyeballFrog && DisableTradeRevert)));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -156,7 +156,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LH_FISHING_HOLE] = Area("LH Fishing Hole", "LH Fishing Hole", RHT_NONE, DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LH_FISHING_HOLE] = Area("LH Fishing Hole", "LH Fishing Hole", RA_NONE, DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LH_CHILD_FISHING, {[]{return IsChild;}}),
|
LocationAccess(RC_LH_CHILD_FISHING, {[]{return IsChild;}}),
|
||||||
LocationAccess(RC_LH_ADULT_FISHING, {[]{return IsAdult;}}),
|
LocationAccess(RC_LH_ADULT_FISHING, {[]{return IsAdult;}}),
|
||||||
@ -165,7 +165,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LH_FISHING_ISLAND, {[]{return true;}}),
|
Entrance(RR_LH_FISHING_ISLAND, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LH_GROTTO] = Area("LH Grotto", "LH Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LH_GROTTO] = Area("LH Grotto", "LH Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LH_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_LH_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
||||||
@ -175,7 +175,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
Entrance(RR_LAKE_HYLIA, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LON_LON_RANCH] = Area("Lon Lon Ranch", "Lon Lon Ranch", RHT_LON_LON_RANCH, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_LON_LON_RANCH] = Area("Lon Lon Ranch", "Lon Lon Ranch", RA_LON_LON_RANCH, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&Epona, {[]{return Epona || (CanPlay(EponasSong) && IsAdult && AtDay);}}),
|
EventAccess(&Epona, {[]{return Epona || (CanPlay(EponasSong) && IsAdult && AtDay);}}),
|
||||||
EventAccess(&LinksCow, {[]{return LinksCow || (CanPlay(EponasSong) && IsAdult && AtDay);}}),
|
EventAccess(&LinksCow, {[]{return LinksCow || (CanPlay(EponasSong) && IsAdult && AtDay);}}),
|
||||||
@ -195,7 +195,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LLR_GROTTO, {[]{return IsChild;}}),
|
Entrance(RR_LLR_GROTTO, {[]{return IsChild;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LLR_TALONS_HOUSE] = Area("LLR Talons House", "LLR Talons House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LLR_TALONS_HOUSE] = Area("LLR Talons House", "LLR Talons House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LLR_TALONS_CHICKENS, {[]{return IsChild && AtDay && ZeldasLetter;}}),
|
LocationAccess(RC_LLR_TALONS_CHICKENS, {[]{return IsChild && AtDay && ZeldasLetter;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -203,7 +203,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LON_LON_RANCH, {[]{return true;}}),
|
Entrance(RR_LON_LON_RANCH, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LLR_STABLES] = Area("LLR Stables", "LLR Stables", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LLR_STABLES] = Area("LLR Stables", "LLR Stables", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LLR_STABLES_LEFT_COW, {[]{return CanPlay(EponasSong);}}),
|
LocationAccess(RC_LLR_STABLES_LEFT_COW, {[]{return CanPlay(EponasSong);}}),
|
||||||
LocationAccess(RC_LLR_STABLES_RIGHT_COW, {[]{return CanPlay(EponasSong);}}),
|
LocationAccess(RC_LLR_STABLES_RIGHT_COW, {[]{return CanPlay(EponasSong);}}),
|
||||||
@ -212,7 +212,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LON_LON_RANCH, {[]{return true;}}),
|
Entrance(RR_LON_LON_RANCH, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LLR_TOWER] = Area("LLR Tower", "LLR Tower", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LLR_TOWER] = Area("LLR Tower", "LLR Tower", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LLR_FREESTANDING_POH, {[]{return IsChild;}}),
|
LocationAccess(RC_LLR_FREESTANDING_POH, {[]{return IsChild;}}),
|
||||||
LocationAccess(RC_LLR_TOWER_LEFT_COW, {[]{return CanPlay(EponasSong);}}),
|
LocationAccess(RC_LLR_TOWER_LEFT_COW, {[]{return CanPlay(EponasSong);}}),
|
||||||
@ -222,7 +222,7 @@ void AreaTable_Init_HyruleField() {
|
|||||||
Entrance(RR_LON_LON_RANCH, {[]{return true;}}),
|
Entrance(RR_LON_LON_RANCH, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LLR_GROTTO] = Area("LLR Grotto", "LLR Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LLR_GROTTO] = Area("LLR Grotto", "LLR Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, {[]{return CanStunDeku;}}),
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_IceCavern() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_ICE_CAVERN_ENTRYWAY] = Area("Ice Cavern Entryway", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ICE_CAVERN_ENTRYWAY] = Area("Ice Cavern Entryway", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ICE_CAVERN_BEGINNING, {[]{return randoCtx->GetDungeon(ICE_CAVERN)->IsVanilla();}}),
|
Entrance(RR_ICE_CAVERN_BEGINNING, {[]{return randoCtx->GetDungeon(ICE_CAVERN)->IsVanilla();}}),
|
||||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(ICE_CAVERN)->IsMQ() && CanUseProjectile;}}),
|
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(ICE_CAVERN)->IsMQ() && CanUseProjectile;}}),
|
||||||
@ -21,13 +21,13 @@ void AreaTable_Init_IceCavern() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(ICE_CAVERN)->IsVanilla()) {
|
if (randoCtx->GetDungeon(ICE_CAVERN)->IsVanilla()) {
|
||||||
areaTable[RR_ICE_CAVERN_BEGINNING] = Area("Ice Cavern Beginning", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ICE_CAVERN_BEGINNING] = Area("Ice Cavern Beginning", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_ICE_CAVERN_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_ICE_CAVERN_MAIN, {[]{return Here(RR_ICE_CAVERN_BEGINNING, []{return (CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_HOOKSHOT) || CanUse(RG_DINS_FIRE);});}}),
|
Entrance(RR_ICE_CAVERN_MAIN, {[]{return Here(RR_ICE_CAVERN_BEGINNING, []{return (CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUse(RG_HOOKSHOT) || CanUse(RG_DINS_FIRE);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ICE_CAVERN_MAIN] = Area("Ice Cavern", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ICE_CAVERN_MAIN] = Area("Ice Cavern", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || (IsAdult && HasBottle);}}),
|
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || (IsAdult && HasBottle);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -47,7 +47,7 @@ void AreaTable_Init_IceCavern() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(ICE_CAVERN)->IsMQ()) {
|
if (randoCtx->GetDungeon(ICE_CAVERN)->IsMQ()) {
|
||||||
areaTable[RR_ICE_CAVERN_MQ_BEGINNING] = Area("Ice Cavern MQ Beginning", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ICE_CAVERN_MQ_BEGINNING] = Area("Ice Cavern MQ Beginning", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -58,7 +58,7 @@ void AreaTable_Init_IceCavern() {
|
|||||||
Entrance(RR_ICE_CAVERN_MQ_IRON_BOOTS_REGION, {[]{return BlueFire;}}),
|
Entrance(RR_ICE_CAVERN_MQ_IRON_BOOTS_REGION, {[]{return BlueFire;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Area("Ice Cavern MQ Map Room", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Area("Ice Cavern MQ Map Room", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || (HasBottle && CanJumpslash);}}),
|
EventAccess(&BlueFireAccess, {[]{return BlueFireAccess || (HasBottle && CanJumpslash);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -66,7 +66,7 @@ void AreaTable_Init_IceCavern() {
|
|||||||
LocationAccess(RC_ICE_CAVERN_MQ_MAP_CHEST, {[]{return BlueFire && (CanJumpslash || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUseProjectile);}}),
|
LocationAccess(RC_ICE_CAVERN_MQ_MAP_CHEST, {[]{return BlueFire && (CanJumpslash || CanUse(RG_MEGATON_HAMMER) || HasExplosives || CanUseProjectile);}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_ICE_CAVERN_MQ_IRON_BOOTS_REGION] = Area("Ice Cavern MQ Iron Boots Region", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ICE_CAVERN_MQ_IRON_BOOTS_REGION] = Area("Ice Cavern MQ Iron Boots Region", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST, {[]{return IsAdult && (CanJumpslash || CanUse(RG_MEGATON_HAMMER));}}),
|
LocationAccess(RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST, {[]{return IsAdult && (CanJumpslash || CanUse(RG_MEGATON_HAMMER));}}),
|
||||||
LocationAccess(RC_SHEIK_IN_ICE_CAVERN, {[]{return IsAdult && (CanJumpslash || CanUse(RG_MEGATON_HAMMER));}}),
|
LocationAccess(RC_SHEIK_IN_ICE_CAVERN, {[]{return IsAdult && (CanJumpslash || CanUse(RG_MEGATON_HAMMER));}}),
|
||||||
@ -75,7 +75,7 @@ void AreaTable_Init_IceCavern() {
|
|||||||
//Tricks: (CanUse(RG_SCARECROW) || (HoverBoots && CanUse(RG_LONGSHOT)) || LogicIceMQScarecrow) && IsAdult
|
//Tricks: (CanUse(RG_SCARECROW) || (HoverBoots && CanUse(RG_LONGSHOT)) || LogicIceMQScarecrow) && IsAdult
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_ICE_CAVERN_MQ_COMPASS_ROOM] = Area("Ice Cavern MQ Compass Room", "Ice Cavern", RHT_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ICE_CAVERN_MQ_COMPASS_ROOM] = Area("Ice Cavern MQ Compass Room", "Ice Cavern", RA_ICE_CAVERN, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ICE_CAVERN_MQ_COMPASS_CHEST, {[]{return true;}}),
|
LocationAccess(RC_ICE_CAVERN_MQ_COMPASS_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_ICE_CAVERN_MQ_FREESTANDING_POH, {[]{return HasExplosives;}}),
|
LocationAccess(RC_ICE_CAVERN_MQ_FREESTANDING_POH, {[]{return HasExplosives;}}),
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Area("Jabu Jabus Belly Entryway", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Area("Jabu Jabus Belly Entryway", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, {[]{return randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla();}}),
|
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, {[]{return randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla();}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsMQ();}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsMQ();}}),
|
||||||
@ -21,13 +21,13 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla()) {
|
if (randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla()) {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Area("Jabu Jabus Belly Beginning", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Area("Jabu Jabus Belly Beginning", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return CanUseProjectile;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return CanUseProjectile;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_MIDDLE] = Area("Jabu Jabus Belly Lift Middle", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_LIFT_MIDDLE] = Area("Jabu Jabus Belly Lift Middle", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
||||||
@ -35,7 +35,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, {[]{return HasAccessTo(RR_JABU_JABUS_BELLY_LIFT_UPPER) || (randoCtx->GetTrickOption(RT_JABU_BOSS_HOVER) && IsAdult && CanUse(RG_HOVER_BOOTS));}}),
|
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, {[]{return HasAccessTo(RR_JABU_JABUS_BELLY_LIFT_UPPER) || (randoCtx->GetTrickOption(RT_JABU_BOSS_HOVER) && IsAdult && CanUse(RG_HOVER_BOOTS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAIN_UPPER] = Area("Jabu Jabus Belly Main Upper", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MAIN_UPPER] = Area("Jabu Jabus Belly Main Upper", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
||||||
@ -43,7 +43,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_ROOM, {[]{return Here(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_ROOM, {[]{return Here(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAIN_LOWER] = Area("Jabu Jabus Belly Main Lower", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MAIN_LOWER] = Area("Jabu Jabus Belly Main Lower", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, {[]{return HookshotOrBoomerang;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, {[]{return HookshotOrBoomerang;}}),
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, {[]{return HookshotOrBoomerang;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, {[]{return HookshotOrBoomerang;}}),
|
||||||
@ -54,7 +54,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_SHABOMB_CORRIDOR] = Area("Jabu Jabus Belly Shabomb Corridor", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_SHABOMB_CORRIDOR] = Area("Jabu Jabus Belly Shabomb Corridor", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -66,7 +66,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return CanUseProjectile;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return CanUseProjectile;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM] = Area("Jabu Jabus Belly Lower Side Room", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_LOWER_SIDE_ROOM] = Area("Jabu Jabus Belly Lower Side Room", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return FairyPot || (CanUse(RG_BOOMERANG) || CanUse(RG_HOVER_BOOTS));}}),
|
EventAccess(&FairyPot, {[]{return FairyPot || (CanUse(RG_BOOMERANG) || CanUse(RG_HOVER_BOOTS));}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -74,7 +74,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_LOWER] = Area("Jabu Jabus Belly Lift Lower", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_LIFT_LOWER] = Area("Jabu Jabus Belly Lift Lower", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_DEKU_SCRUB, {[]{return (IsChild || CanDive || randoCtx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || CanUse(RG_IRON_BOOTS)) && CanStunDeku;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_DEKU_SCRUB, {[]{return (IsChild || CanDive || randoCtx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || CanUse(RG_IRON_BOOTS)) && CanStunDeku;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -83,7 +83,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_FORKED_CORRIDOR] = Area("Jabu Jabus Belly Forked Corridor", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_FORKED_CORRIDOR] = Area("Jabu Jabus Belly Forked Corridor", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN_UPPER, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BOOMERANG_ROOM, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_BOOMERANG_ROOM, {[]{return true;}}),
|
||||||
@ -93,7 +93,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, {[]{return Here(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, {[]{return Here(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BOOMERANG_ROOM] = Area("Jabu Jabus Belly Boomerang Room", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BOOMERANG_ROOM] = Area("Jabu Jabus Belly Boomerang Room", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, {[]{return true;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -101,7 +101,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAP_ROOM] = Area("Jabu Jabus Belly Map Room", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MAP_ROOM] = Area("Jabu Jabus Belly Map Room", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_MAP_CHEST, {[]{return CanUse(RG_BOOMERANG);}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_MAP_CHEST, {[]{return CanUse(RG_BOOMERANG);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -109,7 +109,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Area("Jabu Jabus Belly Compass Room", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Area("Jabu Jabus Belly Compass Room", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_COMPASS_CHEST, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_COMPASS_CHEST, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -117,23 +117,23 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Area("Jabu Jabus Belly Blue Tentacle", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Area("Jabu Jabus Belly Blue Tentacle", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return Here(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return Here(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Area("Jabu Jabus Belly Green Tentacle", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Area("Jabu Jabus Belly Green Tentacle", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return Here(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, {[]{return Here(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return CanUse(RG_BOOMERANG);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_ROOM] = Area("Jabu Jabus Belly Bigocto Room", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_ROOM] = Area("Jabu Jabus Belly Bigocto Room", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_MAIN_LOWER, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, {[]{return Here(RR_JABU_JABUS_BELLY_BIGOCTO_ROOM, []{return (CanUse(RG_BOOMERANG) || Nuts) && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_STICKS));});}}),
|
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, {[]{return Here(RR_JABU_JABUS_BELLY_BIGOCTO_ROOM, []{return (CanUse(RG_BOOMERANG) || Nuts) && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_STICKS));});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Area("Jabu Jabus Belly Above Bigocto", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Area("Jabu Jabus Belly Above Bigocto", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
@ -142,13 +142,13 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, {[]{return CanUse(RG_BOOMERANG);}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, {[]{return CanUse(RG_BOOMERANG);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_UPPER] = Area("Jabu Jabus Belly Lift Upper", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_LIFT_UPPER] = Area("Jabu Jabus Belly Lift Upper", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_MIDDLE, {[]{return true;}}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return true;}}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Area("Jabu Jabus Belly Near Boss Room", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Area("Jabu Jabus Belly Near Boss Room", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, {[]{return CanAdultAttack || CanChildAttack;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, {[]{return CanAdultAttack || CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -162,7 +162,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsMQ()) {
|
if (randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsMQ()) {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_BEGINNING] = Area("Jabu Jabus Belly MQ Beginning", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_BEGINNING] = Area("Jabu Jabus Belly MQ Beginning", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -175,7 +175,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_MAIN, {[]{return Here(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return IsChild && CanUse(RG_FAIRY_SLINGSHOT);});}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_MAIN, {[]{return Here(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return IsChild && CanUse(RG_FAIRY_SLINGSHOT);});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_MAIN] = Area("Jabu Jabus Belly MQ Main", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_MAIN] = Area("Jabu Jabus Belly MQ Main", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, {[]{return (IsAdult && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT))) || ChildCanAccess(RR_JABU_JABUS_BELLY_MQ_BOSS_AREA);}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, {[]{return (IsAdult && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT))) || ChildCanAccess(RR_JABU_JABUS_BELLY_MQ_BOSS_AREA);}}),
|
||||||
@ -192,7 +192,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_DEPTHS, {[]{return HasExplosives && IsChild && CanUse(RG_BOOMERANG);}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_DEPTHS, {[]{return HasExplosives && IsChild && CanUse(RG_BOOMERANG);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_DEPTHS] = Area("Jabu Jabus Belly MQ Depths", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_DEPTHS] = Area("Jabu Jabus Belly MQ Depths", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, {[]{return true;}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, {[]{return Sticks || CanUse(RG_DINS_FIRE);}}),
|
LocationAccess(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, {[]{return Sticks || CanUse(RG_DINS_FIRE);}}),
|
||||||
@ -203,7 +203,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BOSS_AREA, {[]{return Sticks || (CanUse(RG_DINS_FIRE) && KokiriSword);}}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_BOSS_AREA, {[]{return Sticks || (CanUse(RG_DINS_FIRE) && KokiriSword);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_BOSS_AREA] = Area("Jabu Jabus Belly MQ Boss Area", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_BOSS_AREA] = Area("Jabu Jabus Belly MQ Boss Area", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -222,7 +222,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY] =
|
areaTable[RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY] =
|
||||||
Area("Jabu Jabus Belly Boss Entryway", "Jabu Jabus Belly", RHT_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Jabu Jabus Belly Boss Entryway", "Jabu Jabus Belly", RA_JABU_JABUS_BELLY, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, { [] { return randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla(); } }),
|
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, { [] { return randoCtx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla(); } }),
|
||||||
@ -231,7 +231,7 @@ void AreaTable_Init_JabuJabusBelly() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] =
|
areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] =
|
||||||
Area("Jabu Jabus Belly Boss Room", "Jabu Jabus Belly", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
Area("Jabu Jabus Belly Boss Room", "Jabu Jabus Belly", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events //todo: add pot kill trick
|
// Events //todo: add pot kill trick
|
||||||
EventAccess(&JabuJabusBellyClear,
|
EventAccess(&JabuJabusBellyClear,
|
||||||
|
@ -6,7 +6,7 @@ using namespace Logic;
|
|||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void AreaTable_Init_Kakariko() {
|
void AreaTable_Init_Kakariko() {
|
||||||
areaTable[RR_KAKARIKO_VILLAGE] = Area("Kakariko Village", "Kakariko Village", RHT_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KAKARIKO_VILLAGE] = Area("Kakariko Village", "Kakariko Village", RA_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&CojiroAccess, {[]{return CojiroAccess || (IsAdult && WakeUpAdultTalon);}}),
|
EventAccess(&CojiroAccess, {[]{return CojiroAccess || (IsAdult && WakeUpAdultTalon);}}),
|
||||||
EventAccess(&BugRock, {[]{return true;}}),
|
EventAccess(&BugRock, {[]{return true;}}),
|
||||||
@ -41,13 +41,13 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_BEHIND_GATE, {[]{return IsAdult || (KakarikoVillageGateOpen);}}),
|
Entrance(RR_KAK_BEHIND_GATE, {[]{return IsAdult || (KakarikoVillageGateOpen);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_IMPAS_LEDGE] = Area("Kak Impas Ledge", "Kakariko Village", RHT_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KAK_IMPAS_LEDGE] = Area("Kak Impas Ledge", "Kakariko Village", RA_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KAK_IMPAS_HOUSE_BACK, {[]{return true;}}),
|
Entrance(RR_KAK_IMPAS_HOUSE_BACK, {[]{return true;}}),
|
||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_IMPAS_ROOFTOP] = Area("Kak Impas Rooftop", "Kakariko Village", RHT_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_IMPAS_ROOFTOP] = Area("Kak Impas Rooftop", "Kakariko Village", RA_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_GS_ABOVE_IMPAS_HOUSE, {[]{return IsAdult && AtNight && CanGetNightTimeGS && (CanJumpslash || CanUseProjectile);}}),
|
LocationAccess(RC_KAK_GS_ABOVE_IMPAS_HOUSE, {[]{return IsAdult && AtNight && CanGetNightTimeGS && (CanJumpslash || CanUseProjectile);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -56,7 +56,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_ROOFTOP] = Area("Kak Rooftop", "Kakariko Village", RHT_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_ROOFTOP] = Area("Kak Rooftop", "Kakariko Village", RA_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_MAN_ON_ROOF, {[]{return true;}}),
|
LocationAccess(RC_KAK_MAN_ON_ROOF, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -64,7 +64,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_BACKYARD, {[]{return true;}}),
|
Entrance(RR_KAK_BACKYARD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_BACKYARD] = Area("Kak Backyard", "Kakariko Village", RHT_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KAK_BACKYARD] = Area("Kak Backyard", "Kakariko Village", RA_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
Entrance(RR_KAK_OPEN_GROTTO, {[]{return true;}}),
|
Entrance(RR_KAK_OPEN_GROTTO, {[]{return true;}}),
|
||||||
@ -72,7 +72,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_POTION_SHOP_BACK, {[]{return IsAdult && AtDay;}}),
|
Entrance(RR_KAK_POTION_SHOP_BACK, {[]{return IsAdult && AtDay;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_CARPENTER_BOSS_HOUSE] = Area("Kak Carpenter Boss House", "Kak Carpenter Boss House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KAK_CARPENTER_BOSS_HOUSE] = Area("Kak Carpenter Boss House", "Kak Carpenter Boss House", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&WakeUpAdultTalon, {[]{return WakeUpAdultTalon || (IsAdult && PocketEgg);}}),
|
EventAccess(&WakeUpAdultTalon, {[]{return WakeUpAdultTalon || (IsAdult && PocketEgg);}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -80,7 +80,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_HOUSE_OF_SKULLTULA] = Area("Kak House of Skulltula", "Kak House of Skulltula", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_HOUSE_OF_SKULLTULA] = Area("Kak House of Skulltula", "Kak House of Skulltula", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_10_GOLD_SKULLTULA_REWARD, {[]{return GoldSkulltulaTokens >= 10;}}),
|
LocationAccess(RC_KAK_10_GOLD_SKULLTULA_REWARD, {[]{return GoldSkulltulaTokens >= 10;}}),
|
||||||
LocationAccess(RC_KAK_20_GOLD_SKULLTULA_REWARD, {[]{return GoldSkulltulaTokens >= 20;}}),
|
LocationAccess(RC_KAK_20_GOLD_SKULLTULA_REWARD, {[]{return GoldSkulltulaTokens >= 20;}}),
|
||||||
@ -93,13 +93,13 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_IMPAS_HOUSE] = Area("Kak Impas House", "Kak Impas House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KAK_IMPAS_HOUSE] = Area("Kak Impas House", "Kak Impas House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KAK_IMPAS_HOUSE_NEAR_COW, {[]{return true;}}),
|
Entrance(RR_KAK_IMPAS_HOUSE_NEAR_COW, {[]{return true;}}),
|
||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_IMPAS_HOUSE_BACK] = Area("Kak Impas House Back", "Kak Impas House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_IMPAS_HOUSE_BACK] = Area("Kak Impas House Back", "Kak Impas House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, {[]{return true;}}),
|
LocationAccess(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -108,12 +108,12 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_IMPAS_HOUSE_NEAR_COW, {[]{return true;}}),
|
Entrance(RR_KAK_IMPAS_HOUSE_NEAR_COW, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_IMPAS_HOUSE_NEAR_COW] = Area("Kak Impas House Near Cow", "Kak Impas House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_IMPAS_HOUSE_NEAR_COW] = Area("Kak Impas House Near Cow", "Kak Impas House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_IMPAS_HOUSE_COW, {[]{return CanPlay(EponasSong);}}),
|
LocationAccess(RC_KAK_IMPAS_HOUSE_COW, {[]{return CanPlay(EponasSong);}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_KAK_WINDMILL] = Area("Kak Windmill", "Windmill and Dampes Grave", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KAK_WINDMILL] = Area("Kak Windmill", "Windmill and Dampes Grave", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DrainWell, {[]{return DrainWell || (IsChild && CanPlay(SongOfStorms));}}),
|
EventAccess(&DrainWell, {[]{return DrainWell || (IsChild && CanPlay(SongOfStorms));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -126,7 +126,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_BAZAAR] = Area("Kak Bazaar", "Kak Bazaar", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_BAZAAR] = Area("Kak Bazaar", "Kak Bazaar", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_BAZAAR_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_KAK_BAZAAR_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_KAK_BAZAAR_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_KAK_BAZAAR_ITEM_2, {[]{return true;}}),
|
||||||
@ -141,7 +141,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_SHOOTING_GALLERY] = Area("Kak Shooting Gallery", "Kak Shooting Gallery", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_SHOOTING_GALLERY] = Area("Kak Shooting Gallery", "Kak Shooting Gallery", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_SHOOTING_GALLERY_REWARD, {[]{return IsAdult && Bow;}}),
|
LocationAccess(RC_KAK_SHOOTING_GALLERY_REWARD, {[]{return IsAdult && Bow;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -149,7 +149,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_POTION_SHOP_FRONT] = Area("Kak Potion Shop Front", "Kak Potion Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_POTION_SHOP_FRONT] = Area("Kak Potion Shop Front", "Kak Potion Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_POTION_SHOP_ITEM_1, {[]{return IsAdult;}}),
|
LocationAccess(RC_KAK_POTION_SHOP_ITEM_1, {[]{return IsAdult;}}),
|
||||||
LocationAccess(RC_KAK_POTION_SHOP_ITEM_2, {[]{return IsAdult;}}),
|
LocationAccess(RC_KAK_POTION_SHOP_ITEM_2, {[]{return IsAdult;}}),
|
||||||
@ -165,14 +165,14 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_POTION_SHOP_BACK, {[]{return IsAdult;}}),
|
Entrance(RR_KAK_POTION_SHOP_BACK, {[]{return IsAdult;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_POTION_SHOP_BACK] = Area("Kak Potion Shop Back", "Kak Potion Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KAK_POTION_SHOP_BACK] = Area("Kak Potion Shop Back", "Kak Potion Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KAK_BACKYARD, {[]{return IsAdult;}}),
|
Entrance(RR_KAK_BACKYARD, {[]{return IsAdult;}}),
|
||||||
Entrance(RR_KAK_POTION_SHOP_FRONT, {[]{return true;}}),
|
Entrance(RR_KAK_POTION_SHOP_FRONT, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_ODD_POTION_BUILDING] =
|
areaTable[RR_KAK_ODD_POTION_BUILDING] =
|
||||||
Area("Kak Granny's Potion Shop", "Kak Granny's Potion Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
Area("Kak Granny's Potion Shop", "Kak Granny's Potion Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&OddPoulticeAccess, { [] {
|
EventAccess(&OddPoulticeAccess, { [] {
|
||||||
@ -188,7 +188,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_BACKYARD, { [] { return true; } }),
|
Entrance(RR_KAK_BACKYARD, { [] { return true; } }),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_REDEAD_GROTTO] = Area("Kak Redead Grotto", "Kak Redead Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KAK_REDEAD_GROTTO] = Area("Kak Redead Grotto", "Kak Redead Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_REDEAD_GROTTO_CHEST, {[]{return CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_DINS_FIRE) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
LocationAccess(RC_KAK_REDEAD_GROTTO_CHEST, {[]{return CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_DINS_FIRE) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -196,7 +196,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_OPEN_GROTTO] = Area("Kak Open Grotto", "Kak Open Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_KAK_OPEN_GROTTO] = Area("Kak Open Grotto", "Kak Open Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KAK_OPEN_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_KAK_OPEN_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -205,7 +205,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_BACKYARD, {[]{return true;}}),
|
Entrance(RR_KAK_BACKYARD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_THE_GRAVEYARD] = Area("The Graveyard", "The Graveyard", RHT_THE_GRAVEYARD, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_THE_GRAVEYARD] = Area("The Graveyard", "The Graveyard", RA_THE_GRAVEYARD, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || (CanUse(RG_STICKS) && AtDay);}}),
|
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || (CanUse(RG_STICKS) && AtDay);}}),
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_THE_GRAVEYARD) && CanPlay(SongOfStorms));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_THE_GRAVEYARD) && CanPlay(SongOfStorms));}}),
|
||||||
@ -227,7 +227,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, {[]{return false;}}),
|
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GRAVEYARD_SHIELD_GRAVE] = Area("Graveyard Shield Grave", "Graveyard Shield Grave", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GRAVEYARD_SHIELD_GRAVE] = Area("Graveyard Shield Grave", "Graveyard Shield Grave", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GRAVEYARD_SHIELD_GRAVE_CHEST, {[]{return true;}}),
|
LocationAccess(RC_GRAVEYARD_SHIELD_GRAVE_CHEST, {[]{return true;}}),
|
||||||
//Free Fairies
|
//Free Fairies
|
||||||
@ -236,7 +236,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GRAVEYARD_HEART_PIECE_GRAVE] = Area("Graveyard Heart Piece Grave", "Graveyard Heart Piece Grave", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GRAVEYARD_HEART_PIECE_GRAVE] = Area("Graveyard Heart Piece Grave", "Graveyard Heart Piece Grave", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, {[]{return CanPlay(SunsSong);}}),
|
LocationAccess(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, {[]{return CanPlay(SunsSong);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -244,7 +244,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GRAVEYARD_COMPOSERS_GRAVE] = Area("Graveyard Composers Grave", "Graveyard Composers Grave", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GRAVEYARD_COMPOSERS_GRAVE] = Area("Graveyard Composers Grave", "Graveyard Composers Grave", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, {[]{return HasFireSource;}}),
|
LocationAccess(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, {[]{return HasFireSource;}}),
|
||||||
LocationAccess(RC_SONG_FROM_ROYAL_FAMILYS_TOMB, {[]{return CanUseProjectile || CanJumpslash || CanUse(RG_MEGATON_HAMMER);}}),
|
LocationAccess(RC_SONG_FROM_ROYAL_FAMILYS_TOMB, {[]{return CanUseProjectile || CanJumpslash || CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
@ -253,7 +253,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GRAVEYARD_DAMPES_GRAVE] = Area("Graveyard Dampes Grave", "Windmill and Dampes Grave", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GRAVEYARD_DAMPES_GRAVE] = Area("Graveyard Dampes Grave", "Windmill and Dampes Grave", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
EventAccess(&DampesWindmillAccess, {[]{return DampesWindmillAccess || (IsAdult && CanPlay(SongOfTime));}}),
|
EventAccess(&DampesWindmillAccess, {[]{return DampesWindmillAccess || (IsAdult && CanPlay(SongOfTime));}}),
|
||||||
@ -267,7 +267,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_KAK_WINDMILL, {[]{return IsAdult && CanPlay(SongOfTime);}}),
|
Entrance(RR_KAK_WINDMILL, {[]{return IsAdult && CanPlay(SongOfTime);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GRAVEYARD_DAMPES_HOUSE] = Area("Graveyard Dampes House", "Graveyard Dampes House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GRAVEYARD_DAMPES_HOUSE] = Area("Graveyard Dampes House", "Graveyard Dampes House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DAMPE_HINT, {[]{return IsAdult;}}),
|
LocationAccess(RC_DAMPE_HINT, {[]{return IsAdult;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -275,7 +275,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
Entrance(RR_THE_GRAVEYARD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GRAVEYARD_WARP_PAD_REGION] = Area("Graveyard Warp Pad Region", "Graveyard", RHT_THE_GRAVEYARD, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GRAVEYARD_WARP_PAD_REGION] = Area("Graveyard Warp Pad Region", "Graveyard", RA_THE_GRAVEYARD, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -287,7 +287,7 @@ void AreaTable_Init_Kakariko() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, {[]{return CanUse(RG_DINS_FIRE) || (randoCtx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && IsAdult && CanUse(RG_FIRE_ARROWS));}}),
|
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, {[]{return CanUse(RG_DINS_FIRE) || (randoCtx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && IsAdult && CanUse(RG_FIRE_ARROWS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KAK_BEHIND_GATE] = Area("Kak Behind Gate", "Kakariko Village", RHT_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KAK_BEHIND_GATE] = Area("Kak Behind Gate", "Kakariko Village", RA_KAKARIKO_VILLAGE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KAKARIKO_VILLAGE, {[]{return IsAdult || randoCtx->GetTrickOption(RT_VISIBLE_COLLISION) || KakarikoVillageGateOpen || randoCtx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}}),
|
Entrance(RR_KAKARIKO_VILLAGE, {[]{return IsAdult || randoCtx->GetTrickOption(RT_VISIBLE_COLLISION) || KakarikoVillageGateOpen || randoCtx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}}),
|
||||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, {[]{return true;}}),
|
Entrance(RR_DEATH_MOUNTAIN_TRAIL, {[]{return true;}}),
|
||||||
|
@ -6,7 +6,7 @@ using namespace Logic;
|
|||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void AreaTable_Init_LostWoods() {
|
void AreaTable_Init_LostWoods() {
|
||||||
areaTable[RR_KOKIRI_FOREST] = Area("Kokiri Forest", "Kokiri Forest", RHT_KOKIRI_FOREST, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KOKIRI_FOREST] = Area("Kokiri Forest", "Kokiri Forest", RA_KOKIRI_FOREST, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_KOKIRI_FOREST) && CanPlay(SongOfStorms));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_KOKIRI_FOREST) && CanPlay(SongOfStorms));}}),
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
@ -32,7 +32,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_KF_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
Entrance(RR_KF_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_OUTSIDE_DEKU_TREE] = Area("KF Outside Deku Tree", "Kokiri Forest", RHT_KOKIRI_FOREST, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KF_OUTSIDE_DEKU_TREE] = Area("KF Outside Deku Tree", "Kokiri Forest", RA_KOKIRI_FOREST, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || ((IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_KOKIRI_SWORD)) && !randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES)) || (IsChild && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BOOMERANG))));}}),
|
EventAccess(&DekuBabaSticks, {[]{return DekuBabaSticks || ((IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_KOKIRI_SWORD)) && !randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES)) || (IsChild && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BOOMERANG))));}}),
|
||||||
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || ((IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_KOKIRI_SWORD)) && !randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES)) || (IsChild && (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || HasExplosives || CanUse(RG_DINS_FIRE))));}}),
|
EventAccess(&DekuBabaNuts, {[]{return DekuBabaNuts || ((IsAdult && (CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_KOKIRI_SWORD)) && !randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES)) || (IsChild && (CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || HasExplosives || CanUse(RG_DINS_FIRE))));}}),
|
||||||
@ -47,7 +47,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_KOKIRI_FOREST, {[]{return IsAdult || randoCtx->GetOption(RSK_FOREST).Is(RO_FOREST_OPEN) || ShowedMidoSwordAndShield;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return IsAdult || randoCtx->GetOption(RSK_FOREST).Is(RO_FOREST_OPEN) || ShowedMidoSwordAndShield;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_LINKS_HOUSE] = Area("KF Link's House", "KF Link's House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KF_LINKS_HOUSE] = Area("KF Link's House", "KF Link's House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KF_LINKS_HOUSE_COW, {[]{return IsAdult && CanPlay(EponasSong) && LinksCow;}}),
|
LocationAccess(RC_KF_LINKS_HOUSE_COW, {[]{return IsAdult && CanPlay(EponasSong) && LinksCow;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -55,7 +55,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}})
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}})
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_MIDOS_HOUSE] = Area("KF Mido's House", "KF Mido's House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KF_MIDOS_HOUSE] = Area("KF Mido's House", "KF Mido's House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KF_MIDOS_TOP_LEFT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_KF_MIDOS_TOP_LEFT_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_KF_MIDOS_TOP_RIGHT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_KF_MIDOS_TOP_RIGHT_CHEST, {[]{return true;}}),
|
||||||
@ -66,22 +66,22 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_SARIAS_HOUSE] = Area("KF Saria's House", "KF Saria's House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KF_SARIAS_HOUSE] = Area("KF Saria's House", "KF Saria's House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_HOUSE_OF_TWINS] = Area("KF House of Twins", "KF House of Twins", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KF_HOUSE_OF_TWINS] = Area("KF House of Twins", "KF House of Twins", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_KNOW_IT_ALL_HOUSE] = Area("KF Know It All House", "KF Know It All House", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_KF_KNOW_IT_ALL_HOUSE] = Area("KF Know It All House", "KF Know It All House", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_KOKIRI_SHOP] = Area("KF Kokiri Shop", "KF Kokiri Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_KF_KOKIRI_SHOP] = Area("KF Kokiri Shop", "KF Kokiri Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KF_SHOP_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_KF_SHOP_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_KF_SHOP_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_KF_SHOP_ITEM_2, {[]{return true;}}),
|
||||||
@ -96,7 +96,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_KF_STORMS_GROTTO] = Area("KF Storms Grotto", "KF Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_KF_STORMS_GROTTO] = Area("KF Storms Grotto", "KF Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_KF_STORMS_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_KF_STORMS_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_KF_STORMS_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_KF_STORMS_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -105,12 +105,12 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}})
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}})
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LW_FOREST_EXIT] = Area("LW Forest Exit", "Lost Woods", RHT_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_LW_FOREST_EXIT] = Area("LW Forest Exit", "Lost Woods", RA_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}})
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}})
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_THE_LOST_WOODS] = Area("Lost Woods", "Lost Woods", RHT_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_THE_LOST_WOODS] = Area("Lost Woods", "Lost Woods", RA_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&OddMushroomAccess, {[]{return OddMushroomAccess || (IsAdult && (CojiroAccess || Cojiro));}}),
|
EventAccess(&OddMushroomAccess, {[]{return OddMushroomAccess || (IsAdult && (CojiroAccess || Cojiro));}}),
|
||||||
EventAccess(&PoachersSawAccess, {[]{return PoachersSawAccess || (IsAdult && OddPoulticeAccess);}}),
|
EventAccess(&PoachersSawAccess, {[]{return PoachersSawAccess || (IsAdult && OddPoulticeAccess);}}),
|
||||||
@ -137,7 +137,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_LW_NEAR_SHORTCUTS_GROTTO, {[]{return Here(RR_THE_LOST_WOODS, []{return CanBlastOrSmash;});}}),
|
Entrance(RR_LW_NEAR_SHORTCUTS_GROTTO, {[]{return Here(RR_THE_LOST_WOODS, []{return CanBlastOrSmash;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LW_BEYOND_MIDO] = Area("LW Beyond Mido", "Lost Woods", RHT_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_LW_BEYOND_MIDO] = Area("LW Beyond Mido", "Lost Woods", RA_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || CanUse(RG_STICKS);}}),
|
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || CanUse(RG_STICKS);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -155,7 +155,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_LW_SCRUBS_GROTTO, {[]{return Here(RR_LW_BEYOND_MIDO, []{return CanBlastOrSmash;});}}),
|
Entrance(RR_LW_SCRUBS_GROTTO, {[]{return Here(RR_LW_BEYOND_MIDO, []{return CanBlastOrSmash;});}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LW_NEAR_SHORTCUTS_GROTTO] = Area("LW Near Shortcuts Grotto", "LW Near Shortcuts Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_LW_NEAR_SHORTCUTS_GROTTO] = Area("LW Near Shortcuts Grotto", "LW Near Shortcuts Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_LW_NEAR_SHORTCUTS_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_LW_NEAR_SHORTCUTS_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -164,7 +164,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_THE_LOST_WOODS, {[]{return true;}}),
|
Entrance(RR_THE_LOST_WOODS, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_THEATER] = Area("Deku Theater", "Deku Theater", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_THEATER] = Area("Deku Theater", "Deku Theater", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_DEKU_THEATER_SKULL_MASK, {[]{return IsChild && SkullMask;}}),
|
LocationAccess(RC_DEKU_THEATER_SKULL_MASK, {[]{return IsChild && SkullMask;}}),
|
||||||
LocationAccess(RC_DEKU_THEATER_MASK_OF_TRUTH, {[]{return IsChild && MaskOfTruth;}}),
|
LocationAccess(RC_DEKU_THEATER_MASK_OF_TRUTH, {[]{return IsChild && MaskOfTruth;}}),
|
||||||
@ -173,7 +173,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_LW_BEYOND_MIDO, {[]{return true;}}),
|
Entrance(RR_LW_BEYOND_MIDO, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LW_SCRUBS_GROTTO] = Area("LW Scrubs Grotto", "LW Scrubs Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LW_SCRUBS_GROTTO] = Area("LW Scrubs Grotto", "LW Scrubs Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LW_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_LW_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_LW_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_LW_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
||||||
@ -182,14 +182,14 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_LW_BEYOND_MIDO, {[]{return true;}}),
|
Entrance(RR_LW_BEYOND_MIDO, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SFM_ENTRYWAY] = Area("SFM Entryway", "Sacred Forest Meadow", RHT_SACRED_FOREST_MEADOW, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SFM_ENTRYWAY] = Area("SFM Entryway", "Sacred Forest Meadow", RA_SACRED_FOREST_MEADOW, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LW_BEYOND_MIDO, {[]{return true;}}),
|
Entrance(RR_LW_BEYOND_MIDO, {[]{return true;}}),
|
||||||
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_DINS_FIRE) || CanUse(RG_MEGATON_HAMMER);}}),
|
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return CanJumpslash || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_DINS_FIRE) || CanUse(RG_MEGATON_HAMMER);}}),
|
||||||
Entrance(RR_SFM_WOLFOS_GROTTO, {[]{return CanOpenBombGrotto;}}),
|
Entrance(RR_SFM_WOLFOS_GROTTO, {[]{return CanOpenBombGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SACRED_FOREST_MEADOW] = Area("Sacred Forest Meadow", "Sacred Forest Meadow", RHT_SACRED_FOREST_MEADOW, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SACRED_FOREST_MEADOW] = Area("Sacred Forest Meadow", "Sacred Forest Meadow", RA_SACRED_FOREST_MEADOW, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -208,7 +208,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_SFM_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
Entrance(RR_SFM_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SFM_FAIRY_GROTTO] = Area("SFM Fairy Grotto", "SFM Fairy Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SFM_FAIRY_GROTTO] = Area("SFM Fairy Grotto", "SFM Fairy Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -216,7 +216,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}),
|
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SFM_WOLFOS_GROTTO] = Area("SFM Wolfos Grotto", "SFM Wolfos Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SFM_WOLFOS_GROTTO] = Area("SFM Wolfos Grotto", "SFM Wolfos Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SFM_WOLFOS_GROTTO_CHEST, {[]{return IsAdult || Slingshot || Sticks || KokiriSword || CanUse(RG_DINS_FIRE) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
LocationAccess(RC_SFM_WOLFOS_GROTTO_CHEST, {[]{return IsAdult || Slingshot || Sticks || KokiriSword || CanUse(RG_DINS_FIRE) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -224,7 +224,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_SFM_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_SFM_ENTRYWAY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SFM_STORMS_GROTTO] = Area("SFM Storms Grotto", "SFM Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SFM_STORMS_GROTTO] = Area("SFM Storms Grotto", "SFM Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SFM_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_SFM_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
||||||
@ -233,7 +233,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}),
|
Entrance(RR_SACRED_FOREST_MEADOW, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LW_BRIDGE_FROM_FOREST] = Area("LW Bridge From Forest", "Lost Woods", RHT_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_LW_BRIDGE_FROM_FOREST] = Area("LW Bridge From Forest", "Lost Woods", RA_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_LW_GIFT_FROM_SARIA, {[]{return true;}}),
|
LocationAccess(RC_LW_GIFT_FROM_SARIA, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -241,7 +241,7 @@ void AreaTable_Init_LostWoods() {
|
|||||||
Entrance(RR_LW_BRIDGE, {[]{return true;}}),
|
Entrance(RR_LW_BRIDGE, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_LW_BRIDGE] = Area("LW Bridge", "Lost Woods", RHT_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_LW_BRIDGE] = Area("LW Bridge", "Lost Woods", RA_THE_LOST_WOODS, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
Entrance(RR_KOKIRI_FOREST, {[]{return true;}}),
|
||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Area("Shadow Temple Entryway", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Area("Shadow Temple Entryway", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_BEGINNING, {[]{return randoCtx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && (randoCtx->GetTrickOption(RT_LENS_SHADOW) || CanUse(RG_LENS_OF_TRUTH)) && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
Entrance(RR_SHADOW_TEMPLE_BEGINNING, {[]{return randoCtx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && (randoCtx->GetTrickOption(RT_LENS_SHADOW) || CanUse(RG_LENS_OF_TRUTH)) && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(SHADOW_TEMPLE)->IsMQ() && (randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ) || CanUse(RG_LENS_OF_TRUTH)) && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_BEGINNING, {[]{return randoCtx->GetDungeon(SHADOW_TEMPLE)->IsMQ() && (randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ) || CanUse(RG_LENS_OF_TRUTH)) && (CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
||||||
@ -21,7 +21,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(SHADOW_TEMPLE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(SHADOW_TEMPLE)->IsVanilla()) {
|
||||||
areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Area("Shadow Temple Beginning", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Area("Shadow Temple Beginning", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -34,7 +34,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, {[]{return CanUse(RG_HOVER_BOOTS);}}),
|
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, {[]{return CanUse(RG_HOVER_BOOTS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Area("Shadow Temple First Beamos", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Area("Shadow Temple First Beamos", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}), //This fairy pot is only on 3DS
|
EventAccess(&FairyPot, {[]{return true;}}), //This fairy pot is only on 3DS
|
||||||
}, {
|
}, {
|
||||||
@ -48,7 +48,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, {[]{return false;}}),
|
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, {[]{return false;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_HUGE_PIT] = Area("Shadow Temple Huge Pit", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_HUGE_PIT] = Area("Shadow Temple Huge Pit", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, {[]{return CanJumpslash;}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, {[]{return CanJumpslash;}}),
|
||||||
@ -65,7 +65,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, {[]{return ((randoCtx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && randoCtx->GetTrickOption(RT_LENS_SHADOW)) || CanUse(RG_LENS_OF_TRUTH)) && Hookshot && SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}}),
|
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, {[]{return ((randoCtx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && randoCtx->GetTrickOption(RT_LENS_SHADOW)) || CanUse(RG_LENS_OF_TRUTH)) && Hookshot && SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL] = Area("Shadow Temple Wind Tunnel", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL] = Area("Shadow Temple Wind Tunnel", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_WIND_HINT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_WIND_HINT_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, {[]{return CanJumpslash;}}),
|
||||||
@ -76,7 +76,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, {[]{return CanJumpslash && CanPlay(ZeldasLullaby) && SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}}),
|
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, {[]{return CanJumpslash && CanPlay(ZeldasLullaby) && SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Area("Shadow Temple Beyond Boat", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Area("Shadow Temple Beyond Boat", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, {[]{return CanUse(RG_DINS_FIRE);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, {[]{return CanUse(RG_DINS_FIRE);}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, {[]{return CanUse(RG_DINS_FIRE);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, {[]{return CanUse(RG_DINS_FIRE);}}),
|
||||||
@ -92,7 +92,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(SHADOW_TEMPLE)->IsMQ()) {
|
if (randoCtx->GetDungeon(SHADOW_TEMPLE)->IsMQ()) {
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_BEGINNING] = Area("Shadow Temple MQ Beginning", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_BEGINNING] = Area("Shadow Temple MQ Beginning", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, {[]{return IsAdult && (CanUse(RG_FIRE_ARROWS) || HoverBoots || (randoCtx->GetTrickOption(RT_SHADOW_MQ_GAP) && CanUse(RG_LONGSHOT)));}}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, {[]{return IsAdult && (CanUse(RG_FIRE_ARROWS) || HoverBoots || (randoCtx->GetTrickOption(RT_SHADOW_MQ_GAP) && CanUse(RG_LONGSHOT)));}}),
|
||||||
@ -100,13 +100,13 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, {[]{return HasExplosives && SmallKeys(RR_SHADOW_TEMPLE, 6);}}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, {[]{return HasExplosives && SmallKeys(RR_SHADOW_TEMPLE, 6);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA] = Area("Shadow Temple MQ Dead Hand Area", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA] = Area("Shadow Temple MQ Dead Hand Area", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, {[]{return CanJumpslash;}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, {[]{return CanJumpslash && CanPlay(SongOfTime) && IsAdult && CanUse(RG_FAIRY_BOW);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, {[]{return CanJumpslash && CanPlay(SongOfTime) && IsAdult && CanUse(RG_FAIRY_BOW);}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS] = Area("Shadow Temple MQ First Beamos", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS] = Area("Shadow Temple MQ First Beamos", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, {[]{return CanAdultAttack || Nuts;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, {[]{return CanAdultAttack || Nuts;}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, {[]{return CanJumpslash;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, {[]{return CanJumpslash;}}),
|
||||||
@ -116,7 +116,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, {[]{return HasExplosives && SmallKeys(RR_SHADOW_TEMPLE, 2);}}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, {[]{return HasExplosives && SmallKeys(RR_SHADOW_TEMPLE, 2);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT] = Area("Shadow Temple MQ Upper Huge Pit", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT] = Area("Shadow Temple MQ Upper Huge Pit", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, {[]{return CanPlay(SongOfTime) || (randoCtx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO));}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, {[]{return CanPlay(SongOfTime) || (randoCtx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO));}}),
|
||||||
//Trick: CanPlay(SongOfTime) || (LogicShadowMQInvisibleBlades && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO))
|
//Trick: CanPlay(SongOfTime) || (LogicShadowMQInvisibleBlades && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO))
|
||||||
@ -128,7 +128,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
//Trick: HasFireSource || LogicShadowMQHugePit
|
//Trick: HasFireSource || LogicShadowMQHugePit
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Area("Shadow Temple MQ Lower Huge Pit", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Area("Shadow Temple MQ Lower Huge Pit", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, {[]{return IsAdult && CanUse(RG_LONGSHOT);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, {[]{return IsAdult && CanUse(RG_LONGSHOT);}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, {[]{return true;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, {[]{return true;}}),
|
||||||
@ -143,7 +143,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, {[]{return HoverBoots && ((randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ) && randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM)) || CanUse(RG_LENS_OF_TRUTH)) && Hookshot && SmallKeys(RR_SHADOW_TEMPLE, 4);}}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, {[]{return HoverBoots && ((randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ) && randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM)) || CanUse(RG_LENS_OF_TRUTH)) && Hookshot && SmallKeys(RR_SHADOW_TEMPLE, 4);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL] = Area("Shadow Temple MQ Wind Tunnel", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL] = Area("Shadow Temple MQ Wind Tunnel", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -158,7 +158,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, {[]{return CanPlay(ZeldasLullaby) && SmallKeys(RR_SHADOW_TEMPLE, 5);}}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, {[]{return CanPlay(ZeldasLullaby) && SmallKeys(RR_SHADOW_TEMPLE, 5);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Area("Shadow Temple MQ Beyond Boat", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Area("Shadow Temple MQ Beyond Boat", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, {[]{return true;}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, {[]{return true;}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, {[]{return Bow || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && HasBombchus);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, {[]{return Bow || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && HasBombchus);}}),
|
||||||
@ -168,7 +168,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, {[]{return (CanUse(RG_FAIRY_BOW) || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && HasBombchus)) && CanUse(RG_HOVER_BOOTS) && BossKeyShadowTemple;}}),
|
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, {[]{return (CanUse(RG_FAIRY_BOW) || (randoCtx->GetTrickOption(RT_SHADOW_STATUE) && HasBombchus)) && CanUse(RG_HOVER_BOOTS) && BossKeyShadowTemple;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE] = Area("Shadow Temple MQ Invisible Maze", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE] = Area("Shadow Temple MQ Invisible Maze", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, {[]{return CanUse(RG_DINS_FIRE) && SmallKeys(RR_SHADOW_TEMPLE, 6);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, {[]{return CanUse(RG_DINS_FIRE) && SmallKeys(RR_SHADOW_TEMPLE, 6);}}),
|
||||||
LocationAccess(RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, {[]{return CanUse(RG_DINS_FIRE) && SmallKeys(RR_SHADOW_TEMPLE, 6);}}),
|
LocationAccess(RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, {[]{return CanUse(RG_DINS_FIRE) && SmallKeys(RR_SHADOW_TEMPLE, 6);}}),
|
||||||
@ -182,7 +182,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_SHADOW_TEMPLE_BOSS_ENTRYWAY] =
|
areaTable[RR_SHADOW_TEMPLE_BOSS_ENTRYWAY] =
|
||||||
Area("Shadow Temple Boss Entryway", "Shadow Temple", RHT_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Shadow Temple Boss Entryway", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, { [] { return randoCtx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && false; } }),
|
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, { [] { return randoCtx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && false; } }),
|
||||||
@ -191,7 +191,7 @@ void AreaTable_Init_ShadowTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] =
|
areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] =
|
||||||
Area("Shadow Temple Boss Room", "Shadow Temple", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
Area("Shadow Temple Boss Room", "Shadow Temple", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&ShadowTempleClear, { [] {
|
EventAccess(&ShadowTempleClear, { [] {
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Area("Spirit Temple Entryway", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Area("Spirit Temple Entryway", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_LOBBY, {[]{return randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla();}}),
|
Entrance(RR_SPIRIT_TEMPLE_LOBBY, {[]{return randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla();}}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsMQ();}}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsMQ();}}),
|
||||||
@ -21,14 +21,14 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
| VANILLA DUNGEON |
|
| VANILLA DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla()) {
|
||||||
areaTable[RR_SPIRIT_TEMPLE_LOBBY] = Area("Spirit Temple Lobby", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_LOBBY] = Area("Spirit Temple Lobby", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CHILD, {[]{return IsChild;}}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD, {[]{return IsChild;}}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_EARLY_ADULT, {[]{return CanUse(RG_SILVER_GAUNTLETS);}}),
|
Entrance(RR_SPIRIT_TEMPLE_EARLY_ADULT, {[]{return CanUse(RG_SILVER_GAUNTLETS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_CHILD] = Area("Child Spirit Temple", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SPIRIT_TEMPLE_CHILD] = Area("Child Spirit Temple", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&NutCrate, {[]{return true;}}),
|
EventAccess(&NutCrate, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -41,7 +41,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 1);}}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 1);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_CHILD_CLIMB] = Area("Child Spirit Temple Climb", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_CLIMB] = Area("Child Spirit Temple Climb", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, {[]{return HasProjectile(HasProjectileAge::Both) || ((SmallKeys(RR_SPIRIT_TEMPLE, 3) || (SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) && CanUse(RG_SILVER_GAUNTLETS) && HasProjectile(HasProjectileAge::Adult)) || (SmallKeys(RR_SPIRIT_TEMPLE, 5) && IsChild && HasProjectile(HasProjectileAge::Child));}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, {[]{return HasProjectile(HasProjectileAge::Both) || ((SmallKeys(RR_SPIRIT_TEMPLE, 3) || (SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) && CanUse(RG_SILVER_GAUNTLETS) && HasProjectile(HasProjectileAge::Adult)) || (SmallKeys(RR_SPIRIT_TEMPLE, 5) && IsChild && HasProjectile(HasProjectileAge::Child));}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, {[]{return HasProjectile(HasProjectileAge::Both) || ((SmallKeys(RR_SPIRIT_TEMPLE, 3) || (SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) && CanUse(RG_SILVER_GAUNTLETS) && HasProjectile(HasProjectileAge::Adult)) || (SmallKeys(RR_SPIRIT_TEMPLE, 5) && IsChild && HasProjectile(HasProjectileAge::Child));}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, {[]{return HasProjectile(HasProjectileAge::Both) || ((SmallKeys(RR_SPIRIT_TEMPLE, 3) || (SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) && CanUse(RG_SILVER_GAUNTLETS) && HasProjectile(HasProjectileAge::Adult)) || (SmallKeys(RR_SPIRIT_TEMPLE, 5) && IsChild && HasProjectile(HasProjectileAge::Child));}}),
|
||||||
@ -54,7 +54,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return HasExplosives || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS));}}),
|
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return HasExplosives || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_EARLY_ADULT] = Area("Early Adult Spirit Temple", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_EARLY_ADULT] = Area("Early Adult Spirit Temple", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_COMPASS_CHEST, {[]{return CanUse(RG_HOOKSHOT) && CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_COMPASS_CHEST, {[]{return CanUse(RG_HOOKSHOT) && CanPlay(ZeldasLullaby);}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, {[]{return (CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || HasBombchus || (Bombs && IsAdult && randoCtx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (CanUse(RG_HOVER_BOOTS) || CanJumpslash);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, {[]{return (CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || HasBombchus || (Bombs && IsAdult && randoCtx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (CanUse(RG_HOVER_BOOTS) || CanJumpslash);}}),
|
||||||
@ -66,7 +66,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 1);}}),
|
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 1);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER] = Area("Spirit Temple Central Chamber", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER] = Area("Spirit Temple Central Chamber", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MAP_CHEST, {[]{return ((HasExplosives || SmallKeys(RR_SPIRIT_TEMPLE, 3) || (SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
LocationAccess(RC_SPIRIT_TEMPLE_MAP_CHEST, {[]{return ((HasExplosives || SmallKeys(RR_SPIRIT_TEMPLE, 3) || (SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, {[]{return true;}}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_OUTDOOR_HANDS] = Area("Spirit Temple Outdoor Hands", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_OUTDOOR_HANDS] = Area("Spirit Temple Outdoor Hands", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, {[]{return (SmallKeys(RR_SPIRIT_TEMPLE, 3) && Longshot && HasExplosives) || SmallKeys(RR_SPIRIT_TEMPLE, 5);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, {[]{return (SmallKeys(RR_SPIRIT_TEMPLE, 3) && Longshot && HasExplosives) || SmallKeys(RR_SPIRIT_TEMPLE, 5);}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 4) && CanUse(RG_SILVER_GAUNTLETS) && HasExplosives;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 4) && CanUse(RG_SILVER_GAUNTLETS) && HasExplosives;}}),
|
||||||
@ -112,7 +112,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_DESERT_COLOSSUS, {[]{return (IsChild && SmallKeys(RR_SPIRIT_TEMPLE, 5)) || (CanUse(RG_SILVER_GAUNTLETS) && ((SmallKeys(RR_SPIRIT_TEMPLE, 3) && HasExplosives) || SmallKeys(RR_SPIRIT_TEMPLE, 5)));}}),
|
Entrance(RR_DESERT_COLOSSUS, {[]{return (IsChild && SmallKeys(RR_SPIRIT_TEMPLE, 5)) || (CanUse(RG_SILVER_GAUNTLETS) && ((SmallKeys(RR_SPIRIT_TEMPLE, 3) && HasExplosives) || SmallKeys(RR_SPIRIT_TEMPLE, 5)));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Central Locked Door", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Central Locked Door", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, {[]{return (MirrorShield || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS))) && HasExplosives;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, {[]{return (MirrorShield || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS))) && HasExplosives;}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, {[]{return (randoCtx->GetTrickOption(RT_LENS_SPIRIT) || CanUse(RG_LENS_OF_TRUTH)) && HasExplosives;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, {[]{return (randoCtx->GetTrickOption(RT_LENS_SPIRIT) || CanUse(RG_LENS_OF_TRUTH)) && HasExplosives;}}),
|
||||||
@ -122,7 +122,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 5) && (randoCtx->GetTrickOption(RT_SPIRIT_WALL) || CanUse(RG_LONGSHOT) || HasBombchus || ((Bombs || Nuts || CanUse(RG_DINS_FIRE)) && (Bow || CanUse(RG_HOOKSHOT) || Hammer)));}}),
|
Entrance(RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 5) && (randoCtx->GetTrickOption(RT_SPIRIT_WALL) || CanUse(RG_LONGSHOT) || HasBombchus || ((Bombs || Nuts || CanUse(RG_DINS_FIRE)) && (Bow || CanUse(RG_HOOKSHOT) || Hammer)));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Final Locked Door", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Area("Spirit Temple Beyond Final Locked Door", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, {[]{return CanPlay(ZeldasLullaby) && ((CanTakeDamage && randoCtx->GetTrickOption(RT_FLAMING_CHESTS)) || (Bow && Hookshot));}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, {[]{return CanPlay(ZeldasLullaby) && ((CanTakeDamage && randoCtx->GetTrickOption(RT_FLAMING_CHESTS)) || (Bow && Hookshot));}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_TOPMOST_CHEST, {[]{return (MirrorShield && CanAdultAttack) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS));}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_TOPMOST_CHEST, {[]{return (MirrorShield && CanAdultAttack) || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && CanUse(RG_LIGHT_ARROWS));}}),
|
||||||
@ -132,7 +132,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] =
|
areaTable[RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] =
|
||||||
Area("Spirit Temple Inside Statue Head", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Spirit Temple Inside Statue Head", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, { [] { return true; } }),
|
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, { [] { return true; } }),
|
||||||
@ -144,7 +144,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsMQ()) {
|
if (randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsMQ()) {
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_LOBBY] = Area("Spirit Temple MQ Lobby", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_LOBBY] = Area("Spirit Temple MQ Lobby", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, {[]{return Here(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return CanBlastOrSmash;}) && ((IsChild && CanUse(RG_FAIRY_SLINGSHOT)) || (IsAdult && CanUse(RG_FAIRY_BOW)));}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, {[]{return Here(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return CanBlastOrSmash;}) && ((IsChild && CanUse(RG_FAIRY_SLINGSHOT)) || (IsAdult && CanUse(RG_FAIRY_BOW)));}}),
|
||||||
@ -156,7 +156,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_ADULT, {[]{return HasBombchus && IsAdult && CanUse(RG_LONGSHOT) && CanUse(RG_SILVER_GAUNTLETS);}}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_ADULT, {[]{return HasBombchus && IsAdult && CanUse(RG_LONGSHOT) && CanUse(RG_SILVER_GAUNTLETS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_CHILD] = Area("Spirit Temple MQ Child", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_CHILD] = Area("Spirit Temple MQ Child", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return FairyPot || (KokiriSword && HasBombchus && Slingshot);}}),
|
EventAccess(&FairyPot, {[]{return FairyPot || (KokiriSword && HasBombchus && Slingshot);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -171,7 +171,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SHARED, {[]{return HasBombchus && SmallKeys(RR_SPIRIT_TEMPLE, 2);}}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SHARED, {[]{return HasBombchus && SmallKeys(RR_SPIRIT_TEMPLE, 2);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_ADULT] = Area("Spirit Temple MQ Adult", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_ADULT] = Area("Spirit Temple MQ Adult", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 7);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 7);}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, {[]{return CanPlay(ZeldasLullaby) && (CanJumpslash || CanUse(RG_HOVER_BOOTS));}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, {[]{return CanPlay(ZeldasLullaby) && (CanJumpslash || CanUse(RG_HOVER_BOOTS));}}),
|
||||||
@ -190,7 +190,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 5) && CanPlay(SongOfTime) && CanJumpslash && (randoCtx->GetTrickOption(RT_LENS_SPIRIT_MQ) || CanUse(RG_LENS_OF_TRUTH));}}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 5) && CanPlay(SongOfTime) && CanJumpslash && (randoCtx->GetTrickOption(RT_LENS_SPIRIT_MQ) || CanUse(RG_LENS_OF_TRUTH));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SHARED] = Area("Spirit Temple MQ Shared", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_SHARED] = Area("Spirit Temple MQ Shared", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 6);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 6);}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST, {[]{return (IsChild && CanUse(RG_FAIRY_SLINGSHOT) && SmallKeys(RR_SPIRIT_TEMPLE, 7)) || (IsAdult && CanUse(RG_FAIRY_BOW)) || (Bow && Slingshot);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST, {[]{return (IsChild && CanUse(RG_FAIRY_SLINGSHOT) && SmallKeys(RR_SPIRIT_TEMPLE, 7)) || (IsAdult && CanUse(RG_FAIRY_BOW)) || (Bow && Slingshot);}}),
|
||||||
@ -206,7 +206,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
//Trick: (SmallKeys(RR_SPIRIT_TEMPLE, 7) && (CanPlay(SongOfTime) || LogicSpiritMQSunBlockSoT || IsAdult)) || (SmallKeys(RR_SPIRIT_TEMPLE, 4) && CanPlay(SongOfTime) && (LogicLensSpiritMQ || CanUse(RG_LENS_OF_TRUTH)) && IsAdult)
|
//Trick: (SmallKeys(RR_SPIRIT_TEMPLE, 7) && (CanPlay(SongOfTime) || LogicSpiritMQSunBlockSoT || IsAdult)) || (SmallKeys(RR_SPIRIT_TEMPLE, 4) && CanPlay(SongOfTime) && (LogicLensSpiritMQ || CanUse(RG_LENS_OF_TRUTH)) && IsAdult)
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_LOWER_ADULT] = Area("Spirit Temple MQ Lower Adult", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_LOWER_ADULT] = Area("Spirit Temple MQ Lower Adult", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, {[]{return true;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 7) && Hammer && Ocarina && SongOfTime && EponasSong && SunsSong && SongOfStorms && ZeldasLullaby;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 7) && Hammer && Ocarina && SongOfTime && EponasSong && SunsSong && SongOfStorms && ZeldasLullaby;}}),
|
||||||
@ -215,7 +215,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 7) && Hammer && Ocarina && SongOfTime && EponasSong && SunsSong && SongOfStorms && ZeldasLullaby;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, {[]{return SmallKeys(RR_SPIRIT_TEMPLE, 7) && Hammer && Ocarina && SongOfTime && EponasSong && SunsSong && SongOfStorms && ZeldasLullaby;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BOSS_AREA] = Area("Spirit Temple MQ Boss Area", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_BOSS_AREA] = Area("Spirit Temple MQ Boss Area", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, {[]{return randoCtx->GetTrickOption(RT_LENS_SPIRIT_MQ) || CanUse(RG_LENS_OF_TRUTH);}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, {[]{return randoCtx->GetTrickOption(RT_LENS_SPIRIT_MQ) || CanUse(RG_LENS_OF_TRUTH);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -224,19 +224,19 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD] =
|
areaTable[RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD] =
|
||||||
Area("Spirit Temple MQ Inside Statue Head", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Spirit Temple MQ Inside Statue Head", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SHARED, { [] { return true; } }),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SHARED, { [] { return true; } }),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, { [] { return BossKeySpiritTemple; } }),
|
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, { [] { return BossKeySpiritTemple; } }),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Area("Spirit Temple MQ Mirror Shield Hand", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Area("Spirit Temple MQ Mirror Shield Hand", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, {[]{return true;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, {[]{return true;}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND] = Area("Spirit Temple MQ Silver Gauntlets Hand", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND] = Area("Spirit Temple MQ Silver Gauntlets Hand", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, {[]{return true;}}),
|
LocationAccess(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, {[]{return true;}}),
|
||||||
}, {});
|
}, {});
|
||||||
@ -246,7 +246,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY] = Area(
|
areaTable[RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY] = Area(
|
||||||
"Spirit Temple Boss Entryway", "Spirit Temple", RHT_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
"Spirit Temple Boss Entryway", "Spirit Temple", RA_SPIRIT_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, { [] { return randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla() && false; } }),
|
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, { [] { return randoCtx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla() && false; } }),
|
||||||
@ -255,7 +255,7 @@ void AreaTable_Init_SpiritTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Area(
|
areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Area(
|
||||||
"Spirit Temple Boss Room", "Spirit Temple", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
"Spirit Temple Boss Room", "Spirit Temple", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&SpiritTempleClear, { [] {
|
EventAccess(&SpiritTempleClear, { [] {
|
||||||
|
@ -10,7 +10,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
/*--------------------------
|
/*--------------------------
|
||||||
| VANILLA/MQ DECIDER |
|
| VANILLA/MQ DECIDER |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Area("Water Temple Entryway", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Area("Water Temple Entryway", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return randoCtx->GetDungeon(WATER_TEMPLE)->IsVanilla();}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return randoCtx->GetDungeon(WATER_TEMPLE)->IsVanilla();}}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(WATER_TEMPLE)->IsMQ();}}),
|
Entrance(RR_WATER_TEMPLE_MQ_LOBBY, {[]{return randoCtx->GetDungeon(WATER_TEMPLE)->IsMQ();}}),
|
||||||
@ -22,7 +22,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(WATER_TEMPLE)->IsVanilla()) {
|
if (randoCtx->GetDungeon(WATER_TEMPLE)->IsVanilla()) {
|
||||||
//Water Temple logic currently assumes that the locked door leading to the upper water raising location is unlocked from the start
|
//Water Temple logic currently assumes that the locked door leading to the upper water raising location is unlocked from the start
|
||||||
areaTable[RR_WATER_TEMPLE_LOBBY] = Area("Water Temple Lobby", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_LOBBY] = Area("Water Temple Lobby", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return WaterTempleLow || ((randoCtx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || CanUse(RG_ZORA_TUNIC)) && (CanUse(RG_IRON_BOOTS) || (CanUse(RG_LONGSHOT) && randoCtx->GetTrickOption(RT_WATER_LONGSHOT_TORCH))));}}),
|
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return WaterTempleLow || ((randoCtx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || CanUse(RG_ZORA_TUNIC)) && (CanUse(RG_IRON_BOOTS) || (CanUse(RG_LONGSHOT) && randoCtx->GetTrickOption(RT_WATER_LONGSHOT_TORCH))));}}),
|
||||||
@ -39,7 +39,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, {[]{return WaterTempleHigh && CanUse(RG_LONGSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, {[]{return WaterTempleHigh && CanUse(RG_LONGSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_EAST_LOWER] = Area("Water Temple East Lower", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_EAST_LOWER] = Area("Water Temple East Lower", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&WaterTempleLow, {[]{return WaterTempleLow || CanPlay(ZeldasLullaby);}}),
|
EventAccess(&WaterTempleLow, {[]{return WaterTempleLow || CanPlay(ZeldasLullaby);}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -50,7 +50,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_TORCH_ROOM, {[]{return WaterTempleLow && (HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW));}}),
|
Entrance(RR_WATER_TEMPLE_TORCH_ROOM, {[]{return WaterTempleLow && (HasFireSourceWithTorch || CanUse(RG_FAIRY_BOW));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MAP_ROOM] = Area("Water Temple Map Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_MAP_ROOM] = Area("Water Temple Map Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_MAP_CHEST, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
LocationAccess(RC_WATER_TEMPLE_MAP_CHEST, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -58,7 +58,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_CRACKED_WALL] = Area("Water Temple Cracked Wall", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_CRACKED_WALL] = Area("Water Temple Cracked Wall", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_CRACKED_WALL_CHEST, {[]{return HasExplosives;}}),
|
LocationAccess(RC_WATER_TEMPLE_CRACKED_WALL_CHEST, {[]{return HasExplosives;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -66,7 +66,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_TORCH_ROOM] = Area("Water Temple Torch Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_TORCH_ROOM] = Area("Water Temple Torch Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_TORCHES_CHEST, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
LocationAccess(RC_WATER_TEMPLE_TORCHES_CHEST, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -74,13 +74,13 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_EAST_LOWER, {[]{return (MagicMeter && CanUse(RG_KOKIRI_SWORD)) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_HOOKSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_NORTH_LOWER] = Area("Water Temple North Lower", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_NORTH_LOWER] = Area("Water Temple North Lower", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return true;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, {[]{return (CanUse(RG_LONGSHOT) || (randoCtx->GetTrickOption(RT_WATER_BK_REGION) && CanUse(RG_HOVER_BOOTS))) && SmallKeys(RR_WATER_TEMPLE, 4);}}),
|
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, {[]{return (CanUse(RG_LONGSHOT) || (randoCtx->GetTrickOption(RT_WATER_BK_REGION) && CanUse(RG_HOVER_BOOTS))) && SmallKeys(RR_WATER_TEMPLE, 4);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_BOULDERS_LOWER] = Area("Water Temple Boulders Lower", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_BOULDERS_LOWER] = Area("Water Temple Boulders Lower", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, {[]{return CanUse(RG_LONGSHOT) || Here(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return (IsAdult && HookshotOrBoomerang) || (CanUse(RG_IRON_BOOTS) && CanUse(RG_HOOKSHOT));});}}),
|
LocationAccess(RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, {[]{return CanUse(RG_LONGSHOT) || Here(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return (IsAdult && HookshotOrBoomerang) || (CanUse(RG_IRON_BOOTS) && CanUse(RG_HOOKSHOT));});}}),
|
||||||
}, {
|
}, {
|
||||||
@ -90,26 +90,26 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, {[]{return (IsAdult && (CanUse(RG_HOVER_BOOTS) || randoCtx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP))) || (CanUse(RG_HOVER_BOOTS) && CanUse(RG_IRON_BOOTS));}}),
|
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, {[]{return (IsAdult && (CanUse(RG_HOVER_BOOTS) || randoCtx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP))) || (CanUse(RG_HOVER_BOOTS) && CanUse(RG_IRON_BOOTS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_BLOCK_ROOM] = Area("Water Temple Block Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_BLOCK_ROOM] = Area("Water Temple Block Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, {[]{return (GoronBracelet && HasExplosives) || CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, {[]{return (GoronBracelet && HasExplosives) || CanUse(RG_HOOKSHOT);}}),
|
||||||
Entrance(RR_WATER_TEMPLE_JETS_ROOM, {[]{return (GoronBracelet && HasExplosives) || (CanUse(RG_HOOKSHOT) && CanUse(RG_HOVER_BOOTS));}}),
|
Entrance(RR_WATER_TEMPLE_JETS_ROOM, {[]{return (GoronBracelet && HasExplosives) || (CanUse(RG_HOOKSHOT) && CanUse(RG_HOVER_BOOTS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_JETS_ROOM] = Area("Water Temple Jets Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_JETS_ROOM] = Area("Water Temple Jets Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_BLOCK_ROOM, {[]{return CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_BLOCK_ROOM, {[]{return CanUse(RG_HOOKSHOT);}}),
|
||||||
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_BOULDERS_UPPER] = Area("Water Temple Boulders Upper", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_BOULDERS_UPPER] = Area("Water Temple Boulders Upper", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, {[]{return true;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_JETS_ROOM, {[]{return IsAdult;}}),
|
Entrance(RR_WATER_TEMPLE_JETS_ROOM, {[]{return IsAdult;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_BOSS_KEY_ROOM, {[]{return (CanUse(RG_IRON_BOOTS) || (IsAdult && randoCtx->GetTrickOption(RT_WATER_BK_JUMP_DIVE))) && SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
Entrance(RR_WATER_TEMPLE_BOSS_KEY_ROOM, {[]{return (CanUse(RG_IRON_BOOTS) || (IsAdult && randoCtx->GetTrickOption(RT_WATER_BK_JUMP_DIVE))) && SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_BOSS_KEY_ROOM] = Area("Water Temple Boss Key Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_BOSS_KEY_ROOM] = Area("Water Temple Boss Key Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -120,7 +120,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, {[]{return (CanUse(RG_IRON_BOOTS) || (IsAdult && randoCtx->GetTrickOption(RT_WATER_BK_JUMP_DIVE)) || IsChild || CanDive) && SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, {[]{return (CanUse(RG_IRON_BOOTS) || (IsAdult && randoCtx->GetTrickOption(RT_WATER_BK_JUMP_DIVE)) || IsChild || CanDive) && SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_SOUTH_LOWER] = Area("Water Temple South Lower", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_SOUTH_LOWER] = Area("Water Temple South Lower", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_GS_BEHIND_GATE, {[]{return (CanJumpslash || CanUse(RG_MEGATON_HAMMER)) && (CanUse(RG_HOOKSHOT) || (IsAdult && CanUse(RG_HOVER_BOOTS)));}}),
|
LocationAccess(RC_WATER_TEMPLE_GS_BEHIND_GATE, {[]{return (CanJumpslash || CanUse(RG_MEGATON_HAMMER)) && (CanUse(RG_HOOKSHOT) || (IsAdult && CanUse(RG_HOVER_BOOTS)));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -128,13 +128,13 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_IRON_BOOTS);}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_IRON_BOOTS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_WEST_LOWER] = Area("Water Temple West Lower", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_WEST_LOWER] = Area("Water Temple West Lower", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_HOOKSHOT) && CanUse(RG_IRON_BOOTS) && GoronBracelet;}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_HOOKSHOT) && CanUse(RG_IRON_BOOTS) && GoronBracelet;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, {[]{return CanJumpslash || CanUseProjectile;}}),
|
Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, {[]{return CanJumpslash || CanUseProjectile;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_DRAGON_ROOM] = Area("Water Temple Dragon Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_DRAGON_ROOM] = Area("Water Temple Dragon Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_DRAGON_CHEST, {[]{return (CanUse(RG_HOOKSHOT) && CanUse(RG_IRON_BOOTS)) || (((IsAdult && randoCtx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || HasBombchus)) || (IsChild && randoCtx->GetTrickOption(RT_WATER_CHILD_DRAGON) && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || HasBombchus))) && (CanDive || CanUse(RG_IRON_BOOTS))) ||
|
LocationAccess(RC_WATER_TEMPLE_DRAGON_CHEST, {[]{return (CanUse(RG_HOOKSHOT) && CanUse(RG_IRON_BOOTS)) || (((IsAdult && randoCtx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || HasBombchus)) || (IsChild && randoCtx->GetTrickOption(RT_WATER_CHILD_DRAGON) && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || HasBombchus))) && (CanDive || CanUse(RG_IRON_BOOTS))) ||
|
||||||
Here(RR_WATER_TEMPLE_RIVER, []{return IsAdult && CanUse(RG_FAIRY_BOW) && ((randoCtx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (CanDive || CanUse(RG_IRON_BOOTS))) || randoCtx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE));});}}),
|
Here(RR_WATER_TEMPLE_RIVER, []{return IsAdult && CanUse(RG_FAIRY_BOW) && ((randoCtx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (CanDive || CanUse(RG_IRON_BOOTS))) || randoCtx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE));});}}),
|
||||||
@ -143,14 +143,14 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_WEST_LOWER, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_WEST_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER] = Area("Water Temple Central Pillar Lower", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER] = Area("Water Temple Central Pillar Lower", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
||||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, {[]{return CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, {[]{return CanUse(RG_HOOKSHOT);}}),
|
||||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT, {[]{return WaterTempleMiddle && CanUse(RG_IRON_BOOTS) && WaterTimer >= 40;}}),
|
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT, {[]{return WaterTempleMiddle && CanUse(RG_IRON_BOOTS) && WaterTimer >= 40;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER] = Area("Water Temple Central Pillar Upper", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER] = Area("Water Temple Central Pillar Upper", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&WaterTempleMiddle, {[]{return WaterTempleMiddle || CanPlay(ZeldasLullaby);}}),
|
EventAccess(&WaterTempleMiddle, {[]{return WaterTempleMiddle || CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -162,7 +162,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT] = Area("Water Temple Central Pillar Basement", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT] = Area("Water Temple Central Pillar Basement", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, {[]{return CanUse(RG_HOOKSHOT) && CanUse(RG_IRON_BOOTS) && WaterTimer >= 40;}}),
|
LocationAccess(RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, {[]{return CanUse(RG_HOOKSHOT) && CanUse(RG_IRON_BOOTS) && WaterTimer >= 40;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -170,7 +170,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, {[]{return CanUse(RG_IRON_BOOTS) && WaterTimer >= 16;}}),
|
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, {[]{return CanUse(RG_IRON_BOOTS) && WaterTimer >= 16;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_EAST_MIDDLE] = Area("Water Temple East Middle", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_EAST_MIDDLE] = Area("Water Temple East Middle", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_COMPASS_CHEST, {[]{return CanUseProjectile;}}),
|
LocationAccess(RC_WATER_TEMPLE_COMPASS_CHEST, {[]{return CanUseProjectile;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -178,13 +178,13 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_IRON_BOOTS);}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_IRON_BOOTS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_WEST_MIDDLE] = Area("Water Temple West Middle", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_WEST_MIDDLE] = Area("Water Temple West Middle", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return true;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_HIGH_WATER, {[]{return CanUseProjectile;}}),
|
Entrance(RR_WATER_TEMPLE_HIGH_WATER, {[]{return CanUseProjectile;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_HIGH_WATER] = Area("Water Temple High Water", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_HIGH_WATER] = Area("Water Temple High Water", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&WaterTempleHigh, {[]{return WaterTempleHigh || CanPlay(ZeldasLullaby);}}),
|
EventAccess(&WaterTempleHigh, {[]{return WaterTempleHigh || CanPlay(ZeldasLullaby);}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -192,7 +192,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_BLOCK_CORRIDOR] = Area("Water Temple Block Corridor", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_BLOCK_CORRIDOR] = Area("Water Temple Block Corridor", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, {[]{return GoronBracelet && (WaterTempleLow || WaterTempleMiddle);}}),
|
LocationAccess(RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, {[]{return GoronBracelet && (WaterTempleLow || WaterTempleMiddle);}}),
|
||||||
}, {
|
}, {
|
||||||
@ -200,7 +200,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, {[]{return CanUse(RG_HOOKSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM] = Area("Water Temple Falling Platform Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM] = Area("Water Temple Falling Platform Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, {[]{return CanUse(RG_LONGSHOT) || (randoCtx->GetTrickOption(RT_WATER_RANG_FALLING_PLATFORM_GS) && IsChild && CanUse(RG_BOOMERANG)) || (randoCtx->GetTrickOption(RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS) && IsAdult && CanUse(RG_HOOKSHOT));}}),
|
LocationAccess(RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, {[]{return CanUse(RG_LONGSHOT) || (randoCtx->GetTrickOption(RT_WATER_RANG_FALLING_PLATFORM_GS) && IsChild && CanUse(RG_BOOMERANG)) || (randoCtx->GetTrickOption(RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS) && IsAdult && CanUse(RG_HOOKSHOT));}}),
|
||||||
}, {
|
}, {
|
||||||
@ -209,19 +209,19 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, {[]{return CanUse(RG_HOOKSHOT) && SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, {[]{return CanUse(RG_HOOKSHOT) && SmallKeys(RR_WATER_TEMPLE, 5);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM] = Area("Water Temple Dragon Pillars Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM] = Area("Water Temple Dragon Pillars Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, {[]{return CanUseProjectile;}}),
|
Entrance(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, {[]{return CanUseProjectile;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_DARK_LINK_ROOM, {[]{return CanUse(RG_HOOKSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_DARK_LINK_ROOM, {[]{return CanUse(RG_HOOKSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_DARK_LINK_ROOM] = Area("Water Temple Dark Link Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_DARK_LINK_ROOM] = Area("Water Temple Dark Link Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
Entrance(RR_WATER_TEMPLE_LONGSHOT_ROOM, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
Entrance(RR_WATER_TEMPLE_LONGSHOT_ROOM, {[]{return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_LONGSHOT_ROOM] = Area("Water Temple Longshot Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_LONGSHOT_ROOM] = Area("Water Temple Longshot Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_LONGSHOT_CHEST, {[]{return true;}}),
|
LocationAccess(RC_WATER_TEMPLE_LONGSHOT_CHEST, {[]{return true;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -230,7 +230,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_RIVER, {[]{return IsChild || CanPlay(SongOfTime);}}),
|
Entrance(RR_WATER_TEMPLE_RIVER, {[]{return IsChild || CanPlay(SongOfTime);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_RIVER] = Area("Water Temple River", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_RIVER] = Area("Water Temple River", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_RIVER_CHEST, {[]{return (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW)) && (IsAdult || CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
LocationAccess(RC_WATER_TEMPLE_RIVER_CHEST, {[]{return (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW)) && (IsAdult || CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
||||||
LocationAccess(RC_WATER_TEMPLE_GS_RIVER, {[]{return (CanUse(RG_IRON_BOOTS) && CanUse(RG_HOOKSHOT)) || (randoCtx->GetTrickOption(RT_WATER_RIVER_GS) && CanUse(RG_LONGSHOT));}}),
|
LocationAccess(RC_WATER_TEMPLE_GS_RIVER, {[]{return (CanUse(RG_IRON_BOOTS) && CanUse(RG_HOOKSHOT)) || (randoCtx->GetTrickOption(RT_WATER_RIVER_GS) && CanUse(RG_LONGSHOT));}}),
|
||||||
@ -239,7 +239,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, {[]{return (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW)) && (IsAdult || CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, {[]{return (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW)) && (IsAdult || CanUse(RG_HOVER_BOOTS) || CanUse(RG_HOOKSHOT));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_PRE_BOSS_ROOM] = Area("Water Temple Pre Boss Room", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_PRE_BOSS_ROOM] = Area("Water Temple Pre Boss Room", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -253,7 +253,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
| MASTER QUEST DUNGEON |
|
| MASTER QUEST DUNGEON |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
if (randoCtx->GetDungeon(WATER_TEMPLE)->IsMQ()) {
|
if (randoCtx->GetDungeon(WATER_TEMPLE)->IsMQ()) {
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_LOBBY] = Area("Water Temple MQ Lobby", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_MQ_LOBBY] = Area("Water Temple MQ Lobby", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
Entrance(RR_WATER_TEMPLE_ENTRYWAY, {[]{return true;}}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_DIVE, {[]{return IsAdult && WaterTimer >= 24 && CanUse(RG_IRON_BOOTS);}}),
|
Entrance(RR_WATER_TEMPLE_MQ_DIVE, {[]{return IsAdult && WaterTimer >= 24 && CanUse(RG_IRON_BOOTS);}}),
|
||||||
@ -261,7 +261,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyWaterTemple && IsAdult && CanJumpslash && CanUse(RG_LONGSHOT);}}),
|
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, {[]{return BossKeyWaterTemple && IsAdult && CanJumpslash && CanUse(RG_LONGSHOT);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_DIVE] = Area("Water Temple MQ Dive", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_MQ_DIVE] = Area("Water Temple MQ Dive", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_MQ_MAP_CHEST, {[]{return HasFireSource && IsAdult && CanUse(RG_HOOKSHOT);}}),
|
LocationAccess(RC_WATER_TEMPLE_MQ_MAP_CHEST, {[]{return HasFireSource && IsAdult && CanUse(RG_HOOKSHOT);}}),
|
||||||
LocationAccess(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, {[]{return IsAdult && CanUse(RG_ZORA_TUNIC) && CanUse(RG_HOOKSHOT) && ((randoCtx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && CanUse(RG_FIRE_ARROWS)) || (CanUse(RG_DINS_FIRE) && CanPlay(SongOfTime)));}}),
|
LocationAccess(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, {[]{return IsAdult && CanUse(RG_ZORA_TUNIC) && CanUse(RG_HOOKSHOT) && ((randoCtx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && CanUse(RG_FIRE_ARROWS)) || (CanUse(RG_DINS_FIRE) && CanPlay(SongOfTime)));}}),
|
||||||
@ -271,7 +271,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS, {[]{return CanPlay(ZeldasLullaby);}}),
|
Entrance(RR_WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS] = Area("Water Temple MQ Lowered Water Levels", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_MQ_LOWERED_WATER_LEVELS] = Area("Water Temple MQ Lowered Water Levels", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, {[]{return ((IsAdult && CanUse(RG_FAIRY_BOW)) || CanUse(RG_DINS_FIRE) || Here(RR_WATER_TEMPLE_MQ_LOBBY, []{return IsChild && CanUse(RG_STICKS) && HasExplosives;})) &&
|
LocationAccess(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, {[]{return ((IsAdult && CanUse(RG_FAIRY_BOW)) || CanUse(RG_DINS_FIRE) || Here(RR_WATER_TEMPLE_MQ_LOBBY, []{return IsChild && CanUse(RG_STICKS) && HasExplosives;})) &&
|
||||||
(CanJumpslash || CanUseProjectile);}}),
|
(CanJumpslash || CanUseProjectile);}}),
|
||||||
@ -280,7 +280,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
LocationAccess(RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, {[]{return IsAdult && CanUse(RG_LONGSHOT);}}),
|
LocationAccess(RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, {[]{return IsAdult && CanUse(RG_LONGSHOT);}}),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_DARK_LINK_REGION] = Area("Water Temple MQ Dark Link Region", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_MQ_DARK_LINK_REGION] = Area("Water Temple MQ Dark Link Region", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FairyPot, {[]{return true;}}),
|
EventAccess(&FairyPot, {[]{return true;}}),
|
||||||
EventAccess(&NutPot, {[]{return true;}}),
|
EventAccess(&NutPot, {[]{return true;}}),
|
||||||
@ -293,7 +293,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
Entrance(RR_WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS, {[]{return IsAdult && WaterTimer >= 24 && CanUse(RG_DINS_FIRE) && CanUse(RG_IRON_BOOTS);}}),
|
Entrance(RR_WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS, {[]{return IsAdult && WaterTimer >= 24 && CanUse(RG_DINS_FIRE) && CanUse(RG_IRON_BOOTS);}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS] = Area("Water Temple MQ Basement Gated Areas", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_MQ_BASEMENT_GATED_AREAS] = Area("Water Temple MQ Basement Gated Areas", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, {[]{return HoverBoots || CanUse(RG_SCARECROW) || randoCtx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP);}}),
|
LocationAccess(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, {[]{return HoverBoots || CanUse(RG_SCARECROW) || randoCtx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP);}}),
|
||||||
LocationAccess(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, {[]{return CanUse(RG_FIRE_ARROWS) && (HoverBoots || CanUse(RG_SCARECROW));}}),
|
LocationAccess(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, {[]{return CanUse(RG_FIRE_ARROWS) && (HoverBoots || CanUse(RG_SCARECROW));}}),
|
||||||
@ -306,7 +306,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
| BOSS ROOM |
|
| BOSS ROOM |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
areaTable[RR_WATER_TEMPLE_BOSS_ENTRYWAY] =
|
areaTable[RR_WATER_TEMPLE_BOSS_ENTRYWAY] =
|
||||||
Area("Water Temple Boss Entryway", "Water Temple", RHT_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
Area("Water Temple Boss Entryway", "Water Temple", RA_WATER_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {},
|
||||||
{
|
{
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, { [] { return randoCtx->GetDungeon(WATER_TEMPLE)->IsVanilla() && false; } }),
|
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, { [] { return randoCtx->GetDungeon(WATER_TEMPLE)->IsVanilla() && false; } }),
|
||||||
@ -315,7 +315,7 @@ void AreaTable_Init_WaterTemple() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Area(
|
areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Area(
|
||||||
"Water Temple Boss Room", "Water Temple", RHT_NONE, NO_DAY_NIGHT_CYCLE,
|
"Water Temple Boss Room", "Water Temple", RA_NONE, NO_DAY_NIGHT_CYCLE,
|
||||||
{
|
{
|
||||||
// Events
|
// Events
|
||||||
EventAccess(&WaterTempleClear, { [] {
|
EventAccess(&WaterTempleClear, { [] {
|
||||||
|
@ -6,7 +6,7 @@ using namespace Logic;
|
|||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void AreaTable_Init_ZorasDomain() {
|
void AreaTable_Init_ZorasDomain() {
|
||||||
areaTable[RR_ZR_FRONT] = Area("ZR Front", "Zora River", RHT_ZORAS_RIVER, DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ZR_FRONT] = Area("ZR Front", "Zora River", RA_ZORAS_RIVER, DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ZR_GS_TREE, {[]{return IsChild && CanChildAttack;}}),
|
LocationAccess(RC_ZR_GS_TREE, {[]{return IsChild && CanChildAttack;}}),
|
||||||
}, {
|
}, {
|
||||||
@ -15,7 +15,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
Entrance(RR_HYRULE_FIELD, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZORAS_RIVER] = Area("Zora River", "Zora River", RHT_ZORAS_RIVER, DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZORAS_RIVER] = Area("Zora River", "Zora River", RA_ZORAS_RIVER, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairy;}}),
|
||||||
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_ZORAS_RIVER) && CanPlay(SongOfStorms));}}),
|
EventAccess(&BeanPlantFairy, {[]{return BeanPlantFairy || (CanPlantBean(RR_ZORAS_RIVER) && CanPlay(SongOfStorms));}}),
|
||||||
@ -48,13 +48,13 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZR_BEHIND_WATERFALL, {[]{return CanPlay(ZeldasLullaby) || (IsChild && randoCtx->GetTrickOption(RT_ZR_CUCCO)) || (IsAdult && CanUse(RG_HOVER_BOOTS) && randoCtx->GetTrickOption(RT_ZR_HOVERS));}}),
|
Entrance(RR_ZR_BEHIND_WATERFALL, {[]{return CanPlay(ZeldasLullaby) || (IsChild && randoCtx->GetTrickOption(RT_ZR_CUCCO)) || (IsAdult && CanUse(RG_HOVER_BOOTS) && randoCtx->GetTrickOption(RT_ZR_HOVERS));}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZR_BEHIND_WATERFALL] = Area("ZR Behind Waterfall", "Zora River", RHT_ZORAS_RIVER, DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ZR_BEHIND_WATERFALL] = Area("ZR Behind Waterfall", "Zora River", RA_ZORAS_RIVER, DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
||||||
Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}),
|
Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZR_OPEN_GROTTO] = Area("ZR Open Grotto", "ZR Open Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
areaTable[RR_ZR_OPEN_GROTTO] = Area("ZR Open Grotto", "ZR Open Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, grottoEvents, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ZR_OPEN_GROTTO_CHEST, {[]{return true;}}),
|
LocationAccess(RC_ZR_OPEN_GROTTO_CHEST, {[]{return true;}}),
|
||||||
LocationAccess(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
LocationAccess(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, {[]{return true;}}),
|
||||||
@ -63,7 +63,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZR_FAIRY_GROTTO] = Area("ZR Fairy Grotto", "ZR Fairy Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZR_FAIRY_GROTTO] = Area("ZR Fairy Grotto", "ZR Fairy Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Event
|
//Event
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -71,7 +71,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZR_STORMS_GROTTO] = Area("ZR Storms Grotto", "ZR Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ZR_STORMS_GROTTO] = Area("ZR Storms Grotto", "ZR Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ZR_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_ZR_DEKU_SCRUB_GROTTO_REAR, {[]{return CanStunDeku;}}),
|
||||||
LocationAccess(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
LocationAccess(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, {[]{return CanStunDeku;}}),
|
||||||
@ -80,7 +80,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
Entrance(RR_ZORAS_RIVER, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZORAS_DOMAIN] = Area("Zoras Domain", "Zoras Domain", RHT_ZORAS_DOMAIN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZORAS_DOMAIN] = Area("Zoras Domain", "Zoras Domain", RA_ZORAS_DOMAIN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&EyeballFrogAccess, {[]{return EyeballFrogAccess || (IsAdult && KingZoraThawed && (Eyedrops || EyeballFrog || Prescription || PrescriptionAccess));}}),
|
EventAccess(&EyeballFrogAccess, {[]{return EyeballFrogAccess || (IsAdult && KingZoraThawed && (Eyedrops || EyeballFrog || Prescription || PrescriptionAccess));}}),
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
@ -106,13 +106,13 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZD_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
Entrance(RR_ZD_STORMS_GROTTO, {[]{return CanOpenStormGrotto;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZD_BEHIND_KING_ZORA] = Area("ZD Behind King Zora", "Zoras Domain", RHT_ZORAS_DOMAIN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ZD_BEHIND_KING_ZORA] = Area("ZD Behind King Zora", "Zoras Domain", RA_ZORAS_DOMAIN, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ZORAS_DOMAIN, {[]{return DeliverLetter || randoCtx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (randoCtx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && IsAdult);}}),
|
Entrance(RR_ZORAS_DOMAIN, {[]{return DeliverLetter || randoCtx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (randoCtx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && IsAdult);}}),
|
||||||
Entrance(RR_ZORAS_FOUNTAIN, {[]{return true;}}),
|
Entrance(RR_ZORAS_FOUNTAIN, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZD_SHOP] = Area("ZD Shop", "ZD Shop", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ZD_SHOP] = Area("ZD Shop", "ZD Shop", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ZD_SHOP_ITEM_1, {[]{return true;}}),
|
LocationAccess(RC_ZD_SHOP_ITEM_1, {[]{return true;}}),
|
||||||
LocationAccess(RC_ZD_SHOP_ITEM_2, {[]{return true;}}),
|
LocationAccess(RC_ZD_SHOP_ITEM_2, {[]{return true;}}),
|
||||||
@ -127,7 +127,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}),
|
Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZD_STORMS_GROTTO] = Area("ZD Storms Grotto", "ZD Storms Grotto", RHT_NONE, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZD_STORMS_GROTTO] = Area("ZD Storms Grotto", "ZD Storms Grotto", RA_NONE, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&FreeFairies, {[]{return true;}}),
|
EventAccess(&FreeFairies, {[]{return true;}}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
@ -135,7 +135,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}),
|
Entrance(RR_ZORAS_DOMAIN, {[]{return true;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZORAS_FOUNTAIN] = Area("Zoras Fountain", "Zoras Fountain", RHT_ZORAS_FOUNTAIN, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZORAS_FOUNTAIN] = Area("Zoras Fountain", "Zoras Fountain", RA_ZORAS_FOUNTAIN, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
EventAccess(&GossipStoneFairy, {[]{return GossipStoneFairy || CanSummonGossipFairyWithoutSuns;}}),
|
||||||
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || (CanUse(RG_STICKS) && AtDay);}}),
|
EventAccess(&ButterflyFairy, {[]{return ButterflyFairy || (CanUse(RG_STICKS) && AtDay);}}),
|
||||||
@ -156,7 +156,7 @@ void AreaTable_Init_ZorasDomain() {
|
|||||||
Entrance(RR_ZF_GREAT_FAIRY_FOUNTAIN, {[]{return HasExplosives;}}),
|
Entrance(RR_ZF_GREAT_FAIRY_FOUNTAIN, {[]{return HasExplosives;}}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Area("ZF Great Fairy Fountain", "ZF Great Fairy Fountain", RHT_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Area("ZF Great Fairy Fountain", "ZF Great Fairy Fountain", RA_NONE, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LocationAccess(RC_ZF_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
LocationAccess(RC_ZF_GREAT_FAIRY_REWARD, {[]{return CanPlay(ZeldasLullaby);}}),
|
||||||
}, {
|
}, {
|
||||||
|
@ -194,13 +194,11 @@ namespace Logic {
|
|||||||
bool BombchuDrop = false;
|
bool BombchuDrop = false;
|
||||||
bool AmmoCanDrop = false;
|
bool AmmoCanDrop = false;
|
||||||
|
|
||||||
bool BuyBombchus10 = false;
|
bool BuyBombchus = false;
|
||||||
bool BuyBombchus20 = false;
|
|
||||||
bool BuySeed = false;
|
bool BuySeed = false;
|
||||||
bool BuyArrow = false;
|
bool BuyArrow = false;
|
||||||
bool BuyBomb = false;
|
bool BuyBomb = false;
|
||||||
bool BuyGPotion = false;
|
bool BuyMagicPotion = false;
|
||||||
bool BuyBPotion = false;
|
|
||||||
bool MagicRefill = false;
|
bool MagicRefill = false;
|
||||||
|
|
||||||
uint8_t PieceOfHeart = 0;
|
uint8_t PieceOfHeart = 0;
|
||||||
@ -542,7 +540,7 @@ namespace Logic {
|
|||||||
Slingshot = (ProgressiveBulletBag >= 1) && (BuySeed || AmmoCanDrop);
|
Slingshot = (ProgressiveBulletBag >= 1) && (BuySeed || AmmoCanDrop);
|
||||||
Ocarina = ProgressiveOcarina >= 1;
|
Ocarina = ProgressiveOcarina >= 1;
|
||||||
OcarinaOfTime = ProgressiveOcarina >= 2;
|
OcarinaOfTime = ProgressiveOcarina >= 2;
|
||||||
MagicMeter = (ProgressiveMagic >= 1) && (AmmoCanDrop || (HasBottle && (BuyGPotion || BuyBPotion)));
|
MagicMeter = (ProgressiveMagic >= 1) && (AmmoCanDrop || (HasBottle && (BuyMagicPotion)));
|
||||||
BombBag = (ProgressiveBombBag >= 1) && (BuyBomb || AmmoCanDrop);
|
BombBag = (ProgressiveBombBag >= 1) && (BuyBomb || AmmoCanDrop);
|
||||||
Hookshot = ProgressiveHookshot >= 1;
|
Hookshot = ProgressiveHookshot >= 1;
|
||||||
Longshot = ProgressiveHookshot >= 2;
|
Longshot = ProgressiveHookshot >= 2;
|
||||||
@ -579,7 +577,7 @@ namespace Logic {
|
|||||||
FoundBombchus = (BombchuDrop || Bombchus || Bombchus5 || Bombchus10 || Bombchus20);
|
FoundBombchus = (BombchuDrop || Bombchus || Bombchus5 || Bombchus10 || Bombchus20);
|
||||||
CanPlayBowling = (ctx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && FoundBombchus) || (!ctx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && BombBag);
|
CanPlayBowling = (ctx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && FoundBombchus) || (!ctx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && BombBag);
|
||||||
// TODO: Implement Ammo Drop Setting in place of bombchu drops
|
// TODO: Implement Ammo Drop Setting in place of bombchu drops
|
||||||
HasBombchus = (BuyBombchus10 || BuyBombchus20 || (ctx->GetOption(RSK_ENABLE_BOMBCHU_DROPS).Is(RO_AMMO_DROPS_ON_PLUS_BOMBCHU) && FoundBombchus));
|
HasBombchus = (BuyBombchus || (ctx->GetOption(RSK_ENABLE_BOMBCHU_DROPS).Is(RO_AMMO_DROPS_ON_PLUS_BOMBCHU) && FoundBombchus));
|
||||||
|
|
||||||
HasExplosives = Bombs || (ctx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && HasBombchus);
|
HasExplosives = Bombs || (ctx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && HasBombchus);
|
||||||
|
|
||||||
@ -967,13 +965,11 @@ namespace Logic {
|
|||||||
FairyPond = false;
|
FairyPond = false;
|
||||||
BombchuDrop = false;
|
BombchuDrop = false;
|
||||||
|
|
||||||
BuyBombchus10 = false;
|
BuyBombchus = false;
|
||||||
BuyBombchus20 = false;
|
|
||||||
BuySeed = false;
|
BuySeed = false;
|
||||||
BuyArrow = false;
|
BuyArrow = false;
|
||||||
BuyBomb = false;
|
BuyBomb = false;
|
||||||
BuyGPotion = false;
|
BuyMagicPotion = false;
|
||||||
BuyBPotion = false;
|
|
||||||
MagicRefill = false;
|
MagicRefill = false;
|
||||||
|
|
||||||
PieceOfHeart = 0;
|
PieceOfHeart = 0;
|
||||||
|
@ -189,12 +189,10 @@ extern bool FreeFairies;
|
|||||||
extern bool FairyPond;
|
extern bool FairyPond;
|
||||||
extern bool BombchuDrop;
|
extern bool BombchuDrop;
|
||||||
|
|
||||||
extern bool BuyBombchus10;
|
extern bool BuyBombchus;
|
||||||
extern bool BuyBombchus20;
|
|
||||||
extern bool BuyArrow;
|
extern bool BuyArrow;
|
||||||
extern bool BuyBomb;
|
extern bool BuyBomb;
|
||||||
extern bool BuyGPotion;
|
extern bool BuyMagicPotion;
|
||||||
extern bool BuyBPotion;
|
|
||||||
extern bool BuySeed;
|
extern bool BuySeed;
|
||||||
extern bool MagicRefill;
|
extern bool MagicRefill;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ std::string GenerateRandomizer(std::unordered_map<RandomizerSettingKey, uint8_t>
|
|||||||
if (ret == -1) { // Failed to generate after 5 tries
|
if (ret == -1) { // Failed to generate after 5 tries
|
||||||
printf("\n\nFailed to generate after 5 tries.\nPress B to go back to the menu.\nA different seed might be "
|
printf("\n\nFailed to generate after 5 tries.\nPress B to go back to the menu.\nA different seed might be "
|
||||||
"successful.");
|
"successful.");
|
||||||
SPDLOG_DEBUG("\nRANDOMIZATION FAILED COMPLETELY. PLZ FIX\n");
|
SPDLOG_DEBUG("\nRANDOMIZATION FAILED COMPLETELY. PLZ FIX\n");//RANDOTODO print seed for reproduction purposes
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
printf("\n\nError %d with fill.\nPress Select to exit or B to go back to the menu.\n", ret);
|
printf("\n\nError %d with fill.\nPress Select to exit or B to go back to the menu.\n", ret);
|
||||||
|
@ -79,7 +79,6 @@ int Playthrough_Init(uint32_t seed, std::unordered_map<RandomizerSettingKey, uin
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx->playthroughLocations.clear();
|
ctx->playthroughLocations.clear();
|
||||||
ctx->wothLocations.clear();
|
|
||||||
ctx->playthroughBeatable = false;
|
ctx->playthroughBeatable = false;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -35,9 +35,9 @@ std::vector<RandomizerGet> GetMinVanillaShopItems(int total_replaced) {
|
|||||||
RG_BUY_HYLIAN_SHIELD,
|
RG_BUY_HYLIAN_SHIELD,
|
||||||
RG_BUY_GORON_TUNIC,
|
RG_BUY_GORON_TUNIC,
|
||||||
RG_BUY_ZORA_TUNIC,
|
RG_BUY_ZORA_TUNIC,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_DEKU_NUT_10,
|
RG_BUY_DEKU_NUTS_10,
|
||||||
RG_BUY_DEKU_STICK_1,
|
RG_BUY_DEKU_STICK_1,
|
||||||
RG_BUY_DEKU_STICK_1,
|
RG_BUY_DEKU_STICK_1,
|
||||||
RG_BUY_DEKU_SEEDS_30,
|
RG_BUY_DEKU_SEEDS_30,
|
||||||
@ -68,7 +68,7 @@ std::vector<RandomizerGet> GetMinVanillaShopItems(int total_replaced) {
|
|||||||
RG_BUY_BLUE_FIRE,
|
RG_BUY_BLUE_FIRE,
|
||||||
RG_BUY_FISH,
|
RG_BUY_FISH,
|
||||||
RG_BUY_BOMBCHU_10,
|
RG_BUY_BOMBCHU_10,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_ARROWS_10,
|
RG_BUY_ARROWS_10,
|
||||||
RG_BUY_BOMBCHU_20,
|
RG_BUY_BOMBCHU_20,
|
||||||
RG_BUY_BOMBS_535,
|
RG_BUY_BOMBS_535,
|
||||||
@ -76,9 +76,9 @@ std::vector<RandomizerGet> GetMinVanillaShopItems(int total_replaced) {
|
|||||||
//^First 40 items: Exist on shopsanity 3 or less
|
//^First 40 items: Exist on shopsanity 3 or less
|
||||||
RG_BUY_BOMBS_30,
|
RG_BUY_BOMBS_30,
|
||||||
RG_BUY_BOMBCHU_20,
|
RG_BUY_BOMBCHU_20,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_ARROWS_10,
|
RG_BUY_ARROWS_10,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_ARROWS_30,
|
RG_BUY_ARROWS_30,
|
||||||
RG_BUY_RED_POTION_40,
|
RG_BUY_RED_POTION_40,
|
||||||
RG_BUY_FISH,
|
RG_BUY_FISH,
|
||||||
@ -87,7 +87,7 @@ std::vector<RandomizerGet> GetMinVanillaShopItems(int total_replaced) {
|
|||||||
RG_BUY_ARROWS_30,
|
RG_BUY_ARROWS_30,
|
||||||
RG_BUY_RED_POTION_50,
|
RG_BUY_RED_POTION_50,
|
||||||
RG_BUY_ARROWS_30,
|
RG_BUY_ARROWS_30,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_ARROWS_50,
|
RG_BUY_ARROWS_50,
|
||||||
RG_BUY_ARROWS_50,
|
RG_BUY_ARROWS_50,
|
||||||
RG_BUY_GREEN_POTION,
|
RG_BUY_GREEN_POTION,
|
||||||
|
@ -540,19 +540,6 @@ static void WriteShuffledEntrances() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Writes the WOTH locations to the spoiler log, if there are any.
|
|
||||||
static void WriteWayOfTheHeroLocation(tinyxml2::XMLDocument& spoilerLog) {
|
|
||||||
auto parentNode = spoilerLog.NewElement("way-of-the-hero-locations");
|
|
||||||
|
|
||||||
for (const RandomizerCheck key : Rando::Context::GetInstance()->wothLocations) {
|
|
||||||
// WriteLocation(parentNode, key, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!parentNode->NoChildren()) {
|
|
||||||
spoilerLog.RootElement()->InsertEndChild(parentNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string AutoFormatHintTextString(std::string unformattedHintTextString) {
|
std::string AutoFormatHintTextString(std::string unformattedHintTextString) {
|
||||||
std::string textStr = unformattedHintTextString;
|
std::string textStr = unformattedHintTextString;
|
||||||
|
|
||||||
@ -705,7 +692,7 @@ static void WriteHints(int language) {
|
|||||||
if (ctx->GetOption(RSK_LIGHT_ARROWS_HINT)){
|
if (ctx->GetOption(RSK_LIGHT_ARROWS_HINT)){
|
||||||
jsonData["ganonHintText"] = ganonHintText;
|
jsonData["ganonHintText"] = ganonHintText;
|
||||||
jsonData["lightArrowHintLoc"] = GetLightArrowHintLoc();
|
jsonData["lightArrowHintLoc"] = GetLightArrowHintLoc();
|
||||||
jsonData["lightArrowRegion"] = ctx->GetHint(RH_GANONDORF_HINT)->GetHintedRegion();
|
jsonData["lightArrowArea"] = ::Hint(ctx->GetHint(RH_GANONDORF_HINT)->GetHintedArea()).GetText().GetEnglish();
|
||||||
jsonData["masterSwordHintLoc"] = GetMasterSwordHintLoc();
|
jsonData["masterSwordHintLoc"] = GetMasterSwordHintLoc();
|
||||||
if (!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {
|
if (!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {
|
||||||
jsonData["sheikText"] = sheikText;
|
jsonData["sheikText"] = sheikText;
|
||||||
@ -714,23 +701,23 @@ static void WriteHints(int language) {
|
|||||||
if (ctx->GetOption(RSK_DAMPES_DIARY_HINT)){
|
if (ctx->GetOption(RSK_DAMPES_DIARY_HINT)){
|
||||||
jsonData["dampeText"] = dampesText;
|
jsonData["dampeText"] = dampesText;
|
||||||
jsonData["dampeHintLoc"] = GetDampeHintLoc();
|
jsonData["dampeHintLoc"] = GetDampeHintLoc();
|
||||||
jsonData["dampeRegion"] = ctx->GetHint(RH_DAMPES_DIARY)->GetHintedRegion();
|
jsonData["dampeRegion"] = ::Hint(ctx->GetHint(RH_DAMPES_DIARY)->GetHintedArea()).GetText().GetEnglish();
|
||||||
}
|
}
|
||||||
if (ctx->GetOption(RSK_GREG_HINT)){
|
if (ctx->GetOption(RSK_GREG_HINT)){
|
||||||
jsonData["gregText"] = gregText;
|
jsonData["gregText"] = gregText;
|
||||||
jsonData["gregLoc"] = GetGregHintLoc();
|
jsonData["gregLoc"] = GetGregHintLoc();
|
||||||
jsonData["gregRegion"] = ctx->GetHint(RH_GREG_RUPEE)->GetHintedRegion();
|
jsonData["gregRegion"] = ::Hint(ctx->GetHint(RH_GREG_RUPEE)->GetHintedArea()).GetText().GetEnglish();
|
||||||
}
|
}
|
||||||
if (ctx->GetOption(RSK_SARIA_HINT)){
|
if (ctx->GetOption(RSK_SARIA_HINT)){
|
||||||
jsonData["sariaText"] = sariaText;
|
jsonData["sariaText"] = sariaText;
|
||||||
jsonData["sariaHintLoc"] = GetSariaHintLoc();
|
jsonData["sariaHintLoc"] = GetSariaHintLoc();
|
||||||
jsonData["sariaRegion"] = ctx->GetHint(RH_SARIA)->GetHintedRegion();
|
jsonData["sariaRegion"] = ::Hint(ctx->GetHint(RH_SARIA)->GetHintedArea()).GetText().GetEnglish();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->GetOption(RSK_GOSSIP_STONE_HINTS).Is(RO_GOSSIP_STONES_NONE)) {
|
if (ctx->GetOption(RSK_GOSSIP_STONE_HINTS).Is(RO_GOSSIP_STONES_NONE)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (const RandomizerCheck key : Rando::StaticData::gossipStoneLocations) {
|
for (const RandomizerCheck key : Rando::StaticData::gossipStoneLocations) { //RANDOTODO should be merged with static hints, iterate over hint keys
|
||||||
Rando::Hint* hint = ctx->GetHint((RandomizerHintKey)(key - RC_COLOSSUS_GOSSIP_STONE + 1));
|
Rando::Hint* hint = ctx->GetHint((RandomizerHintKey)(key - RC_COLOSSUS_GOSSIP_STONE + 1));
|
||||||
Rando::ItemLocation* hintedLocation = ctx->GetItemLocation(hint->GetHintedLocation());
|
Rando::ItemLocation* hintedLocation = ctx->GetItemLocation(hint->GetHintedLocation());
|
||||||
std::string hintTextString;
|
std::string hintTextString;
|
||||||
@ -747,17 +734,16 @@ static void WriteHints(int language) {
|
|||||||
HintType hintType = hint->GetHintType();
|
HintType hintType = hint->GetHintType();
|
||||||
|
|
||||||
std::string textStr = hintTextString;
|
std::string textStr = hintTextString;
|
||||||
jsonData["hints"][Rando::StaticData::GetLocation(key)->GetName()]["hint"] = textStr;
|
std::string name = Rando::StaticData::GetLocation(key)->GetName();
|
||||||
jsonData["hints"][Rando::StaticData::GetLocation(key)->GetName()]["type"] = hintTypeNames[(int)hintType];
|
jsonData["hints"][name]["hint"] = textStr;
|
||||||
if ((hintType >= HINT_TYPE_ALWAYS && hintType < HINT_TYPE_JUNK) || hintType == HINT_TYPE_WOTH) {
|
jsonData["hints"][name]["distribution"] = hint->GetDistribution();
|
||||||
jsonData["hints"][Rando::StaticData::GetLocation(key)->GetName()]["item"] = hintedLocation->GetPlacedItemName().GetEnglish();
|
jsonData["hints"][name]["type"] = hintTypeNames[(int)hintType];
|
||||||
if (hintType != HINT_TYPE_NAMED_ITEM) {
|
if (hintType == HINT_TYPE_ITEM_LOCATION || hintType == HINT_TYPE_ITEM_AREA || hintType == HINT_TYPE_WOTH) {
|
||||||
jsonData["hints"][Rando::StaticData::GetLocation(key)->GetName()]["location"] =
|
jsonData["hints"][name]["item"] = hintedLocation->GetPlacedItemName().GetEnglish();
|
||||||
Rando::StaticData::GetLocation(hintedLocation->GetRandomizerCheck())->GetName();
|
jsonData["hints"][name]["location"] = Rando::StaticData::GetLocation(hintedLocation->GetRandomizerCheck())->GetName();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (hintType != HINT_TYPE_TRIAL && hintType != HINT_TYPE_JUNK) {
|
if (hintType != HINT_TYPE_TRIAL && hintType != HINT_TYPE_JUNK) {
|
||||||
jsonData["hints"][Rando::StaticData::GetLocation(key)->GetName()]["area"] = hint->GetHintedRegion(); //RANDOTODO find elegent way to capitalise this
|
jsonData["hints"][name]["area"] = ::Hint(hint->GetHintedArea()).GetText().Capitalize().GetEnglish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -849,11 +835,9 @@ const char* SpoilerLog_Write(int language) {
|
|||||||
WriteMasterQuestDungeons(spoilerLog);
|
WriteMasterQuestDungeons(spoilerLog);
|
||||||
WriteRequiredTrials();
|
WriteRequiredTrials();
|
||||||
WritePlaythrough();
|
WritePlaythrough();
|
||||||
//WriteWayOfTheHeroLocation(spoilerLog);
|
|
||||||
|
|
||||||
ctx->playthroughLocations.clear();
|
ctx->playthroughLocations.clear();
|
||||||
ctx->playthroughBeatable = false;
|
ctx->playthroughBeatable = false;
|
||||||
ctx->wothLocations.clear();
|
|
||||||
|
|
||||||
WriteHints(language);
|
WriteHints(language);
|
||||||
WriteShuffledEntrances();
|
WriteShuffledEntrances();
|
||||||
@ -865,7 +849,7 @@ const char* SpoilerLog_Write(int language) {
|
|||||||
|
|
||||||
std::string jsonString = jsonData.dump(4);
|
std::string jsonString = jsonData.dump(4);
|
||||||
std::ostringstream fileNameStream;
|
std::ostringstream fileNameStream;
|
||||||
for (int i = 0; i < ctx->hashIconIndexes.size(); i ++) {
|
for (uint8_t i = 0; i < ctx->hashIconIndexes.size(); i ++) {
|
||||||
if (i) {
|
if (i) {
|
||||||
fileNameStream << '-';
|
fileNameStream << '-';
|
||||||
}
|
}
|
||||||
|
@ -30,21 +30,56 @@ Context::Context() {
|
|||||||
mSpoilerfileGetNameToEnum[item.GetName().english] = item.GetRandomizerGet();
|
mSpoilerfileGetNameToEnum[item.GetName().english] = item.GetRandomizerGet();
|
||||||
mSpoilerfileGetNameToEnum[item.GetName().french] = item.GetRandomizerGet();
|
mSpoilerfileGetNameToEnum[item.GetName().french] = item.GetRandomizerGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
mSpoilerfileHintTypeNameToEnum = {
|
mSpoilerfileHintTypeNameToEnum = {
|
||||||
|
{ "Static", HINT_TYPE_STATIC },
|
||||||
{ "Trial", HINT_TYPE_TRIAL },
|
{ "Trial", HINT_TYPE_TRIAL },
|
||||||
{ "Always", HINT_TYPE_ALWAYS },
|
|
||||||
{ "WotH", HINT_TYPE_WOTH },
|
{ "WotH", HINT_TYPE_WOTH },
|
||||||
{ "Barren", HINT_TYPE_BARREN },
|
{ "Barren", HINT_TYPE_BARREN },
|
||||||
{ "Entrance", HINT_TYPE_ENTRANCE },
|
{ "Entrance", HINT_TYPE_ENTRANCE },
|
||||||
{ "Sometimes", HINT_TYPE_SOMETIMES },
|
{ "Item Area", HINT_TYPE_ITEM_AREA },
|
||||||
{ "Random", HINT_TYPE_RANDOM },
|
{ "Item Location", HINT_TYPE_ITEM_LOCATION },
|
||||||
{ "Static", HINT_TYPE_STATIC },
|
|
||||||
{ "Song", HINT_TYPE_SONG },
|
|
||||||
{ "Overworld", HINT_TYPE_OVERWORLD },
|
|
||||||
{ "Dungeon", HINT_TYPE_DUNGEON },
|
|
||||||
{ "Junk", HINT_TYPE_JUNK },
|
{ "Junk", HINT_TYPE_JUNK },
|
||||||
{ "Named Item", HINT_TYPE_NAMED_ITEM },
|
};
|
||||||
{ "Random", HINT_TYPE_RANDOM }
|
|
||||||
|
mSpoilerfileAreaNameToEnum = {
|
||||||
|
{"No Hint", RA_NONE},
|
||||||
|
{"Link's Pocket", RA_LINKS_POCKET},
|
||||||
|
{"Kokiri Forest", RA_KOKIRI_FOREST},
|
||||||
|
{"The Lost Woods", RA_THE_LOST_WOODS},
|
||||||
|
{"Sacred Forest Meadow", RA_SACRED_FOREST_MEADOW},
|
||||||
|
{"Hyrule Field", RA_HYRULE_FIELD},
|
||||||
|
{"Lake Hylia", RA_LAKE_HYLIA},
|
||||||
|
{"Gerudo Valley", RA_GERUDO_VALLEY},
|
||||||
|
{"Gerudo Fortress", RA_GERUDO_FORTRESS},
|
||||||
|
{"Haunted Wasteland", RA_HAUNTED_WASTELAND},
|
||||||
|
{"Desert Colossus", RA_DESERT_COLOSSUS},
|
||||||
|
{"The Market", RA_THE_MARKET},
|
||||||
|
{"Temple of Time", RA_TEMPLE_OF_TIME},
|
||||||
|
{"Hyrule Castle", RA_HYRULE_CASTLE},
|
||||||
|
{"Outside Ganon's Castle", RA_OUTSIDE_GANONS_CASTLE},
|
||||||
|
{"Castle Grounds", RA_CASTLE_GROUNDS},
|
||||||
|
{"Kakariko Village", RA_KAKARIKO_VILLAGE},
|
||||||
|
{"the Graveyard", RA_THE_GRAVEYARD},
|
||||||
|
{"Death Mountain Trail", RA_DEATH_MOUNTAIN_TRAIL},
|
||||||
|
{"Goron City", RA_GORON_CITY},
|
||||||
|
{"Death Mountain Crater", RA_DEATH_MOUNTAIN_CRATER},
|
||||||
|
{"Zora's River", RA_ZORAS_RIVER},
|
||||||
|
{"Zora's Domain", RA_ZORAS_DOMAIN},
|
||||||
|
{"Zora's Fountain", RA_ZORAS_FOUNTAIN},
|
||||||
|
{"Lon Lon Ranch", RA_LON_LON_RANCH},
|
||||||
|
{"Deku Tree", RA_DEKU_TREE},
|
||||||
|
{"Dodongo's Cavern", RA_DODONGOS_CAVERN},
|
||||||
|
{"Jabu-Jabu's Belly", RA_JABU_JABUS_BELLY},
|
||||||
|
{"Forest Temple", RA_FOREST_TEMPLE},
|
||||||
|
{"Fire Temple", RA_FIRE_TEMPLE},
|
||||||
|
{"Water Temple", RA_WATER_TEMPLE},
|
||||||
|
{"Spirit Temple", RA_SPIRIT_TEMPLE},
|
||||||
|
{"Shadow Temple", RA_SHADOW_TEMPLE},
|
||||||
|
{"Bottom of the Well", RA_BOTTOM_OF_THE_WELL},
|
||||||
|
{"Ice Cavern", RA_ICE_CAVERN},
|
||||||
|
{"Gerudo training Grounds", RA_GERUDO_TRAINING_GROUND},
|
||||||
|
{"Inside Ganon's Castle", RA_GANONS_CASTLE},
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int i = 0; i < RC_MAX; i++) {
|
for (int i = 0; i < RC_MAX; i++) {
|
||||||
@ -56,6 +91,10 @@ Context::Context() {
|
|||||||
mSettings = std::make_shared<Settings>();
|
mSettings = std::make_shared<Settings>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RandomizerArea Context::GetAreaFromString(std::string str) {
|
||||||
|
return mSpoilerfileAreaNameToEnum[str];
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Context> Context::CreateInstance() {
|
std::shared_ptr<Context> Context::CreateInstance() {
|
||||||
if (mContext.expired()) {
|
if (mContext.expired()) {
|
||||||
auto instance = std::make_shared<Context>();
|
auto instance = std::make_shared<Context>();
|
||||||
@ -74,9 +113,9 @@ Hint* Context::GetHint(const RandomizerHintKey hintKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Context::AddHint(const RandomizerHintKey hintId, const Text& text, const RandomizerCheck hintedLocation, const HintType hintType,
|
void Context::AddHint(const RandomizerHintKey hintId, const Text& text, const RandomizerCheck hintedLocation, const HintType hintType,
|
||||||
const Text& hintedRegion) {
|
std::string distributionName, RandomizerArea hintedArea) {
|
||||||
hintTable[hintId] = Hint(text, hintedLocation, hintType, hintedRegion);
|
hintTable[hintId] = Hint(text, hintedLocation, hintType, distributionName, hintedArea);
|
||||||
GetItemLocation(hintedLocation)->SetHintKey(hintId);
|
GetItemLocation(hintedLocation)->AddHintedBy(hintId);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemLocation* Context::GetItemLocation(const RandomizerCheck locKey) {
|
ItemLocation* Context::GetItemLocation(const RandomizerCheck locKey) {
|
||||||
@ -445,57 +484,64 @@ void Context::ParseHintJson(nlohmann::json spoilerFileJson) {
|
|||||||
// Child Altar
|
// Child Altar
|
||||||
std::string childAltarJsonText = spoilerFileJson["childAltar"]["hintText"].get<std::string>();
|
std::string childAltarJsonText = spoilerFileJson["childAltar"]["hintText"].get<std::string>();
|
||||||
std::string formattedChildAltarText = FormatJsonHintText(childAltarJsonText);
|
std::string formattedChildAltarText = FormatJsonHintText(childAltarJsonText);
|
||||||
AddHint(RH_ALTAR_CHILD, Text(formattedChildAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
AddHint(RH_ALTAR_CHILD, Text(formattedChildAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
mEmeraldLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["childAltar"]["rewards"]["emeraldLoc"]];
|
mEmeraldLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["childAltar"]["rewards"]["emeraldLoc"]];
|
||||||
mRubyLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["childAltar"]["rewards"]["rubyLoc"]];
|
mRubyLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["childAltar"]["rewards"]["rubyLoc"]];
|
||||||
mSapphireLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["childAltar"]["rewards"]["sapphireLoc"]];
|
mSapphireLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["childAltar"]["rewards"]["sapphireLoc"]];
|
||||||
|
|
||||||
// Adult Altar
|
// Adult Altar
|
||||||
std::string adultAltarJsonText = spoilerFileJson["adultAltar"]["hintText"].get<std::string>();
|
std::string adultAltarJsonText = spoilerFileJson["adultAltar"]["hintText"].get<std::string>();
|
||||||
std::string formattedAdultAltarText = FormatJsonHintText(adultAltarJsonText);
|
std::string formattedAdultAltarText = FormatJsonHintText(adultAltarJsonText);
|
||||||
AddHint(RH_ALTAR_ADULT, Text(formattedAdultAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
AddHint(RH_ALTAR_ADULT, Text(formattedAdultAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
mForestMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["forestMedallionLoc"].get<std::string>()];
|
mForestMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["forestMedallionLoc"].get<std::string>()];
|
||||||
mFireMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["fireMedallionLoc"].get<std::string>()];
|
mFireMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["fireMedallionLoc"].get<std::string>()];
|
||||||
mWaterMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["waterMedallionLoc"].get<std::string>()];
|
mWaterMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["waterMedallionLoc"].get<std::string>()];
|
||||||
mShadowMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["shadowMedallionLoc"].get<std::string>()];
|
mShadowMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["shadowMedallionLoc"].get<std::string>()];
|
||||||
mSpiritMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["spiritMedallionLoc"].get<std::string>()];
|
mSpiritMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["spiritMedallionLoc"].get<std::string>()];
|
||||||
mLightMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["lightMedallionLoc"].get<std::string>()];
|
mLightMedallionLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["adultAltar"]["rewards"]["lightMedallionLoc"].get<std::string>()];
|
||||||
|
|
||||||
// Ganondorf and Sheik Light Arrow Hints
|
// Ganondorf and Sheik Light Arrow Hints
|
||||||
std::string ganonHintText = FormatJsonHintText(spoilerFileJson["ganonHintText"].get<std::string>());
|
std::string ganonHintText = FormatJsonHintText(spoilerFileJson["ganonHintText"].get<std::string>());
|
||||||
RandomizerCheck lightArrowLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["lightArrowHintLoc"].get<std::string>()];
|
RandomizerCheck lightArrowLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["lightArrowHintLoc"].get<std::string>()];
|
||||||
std::string lightArrowRegion = spoilerFileJson["lightArrowHintRegion"].get<std::string>();
|
std::string lightArrowRegion = spoilerFileJson["lightArrowHintRegion"].get<std::string>();
|
||||||
AddHint(RH_GANONDORF_HINT, Text(ganonHintText), lightArrowLoc, HINT_TYPE_STATIC, Text(lightArrowRegion));
|
AddHint(RH_GANONDORF_HINT, Text(ganonHintText), lightArrowLoc, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[lightArrowRegion]);
|
||||||
std::string sheikText = FormatJsonHintText(spoilerFileJson["sheikText"].get<std::string>());
|
std::string sheikText = FormatJsonHintText(spoilerFileJson["sheikText"].get<std::string>());
|
||||||
AddHint(RH_SHEIK_LIGHT_ARROWS, Text(sheikText), lightArrowLoc, HINT_TYPE_STATIC, lightArrowRegion);
|
AddHint(RH_SHEIK_LIGHT_ARROWS, Text(sheikText), lightArrowLoc, HINT_TYPE_STATIC, lightArrowRegion);
|
||||||
std::string ganonText = FormatJsonHintText(spoilerFileJson["ganonText"].get<std::string>());
|
std::string ganonText = FormatJsonHintText(spoilerFileJson["ganonText"].get<std::string>());
|
||||||
AddHint(RH_GANONDORF_NOHINT, Text(ganonText), RC_UNKNOWN_CHECK, HINT_TYPE_JUNK, Text());
|
AddHint(RH_GANONDORF_NOHINT, Text(ganonText), RC_UNKNOWN_CHECK, HINT_TYPE_JUNK, "Static", RA_GANONS_CASTLE);
|
||||||
|
|
||||||
// Dampe Hookshot Hint
|
// Dampe Hookshot Hint
|
||||||
std::string dampeText = FormatJsonHintText(spoilerFileJson["dampeText"].get<std::string>());
|
std::string dampeText = FormatJsonHintText(spoilerFileJson["dampeText"].get<std::string>());
|
||||||
std::string dampeRegion = spoilerFileJson["dampeRegion"].get<std::string>();
|
std::string dampeRegion = spoilerFileJson["dampeRegion"].get<std::string>();
|
||||||
RandomizerCheck dampeHintLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["dampeHintLoc"].get<std::string>()];
|
RandomizerCheck dampeHintLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["dampeHintLoc"].get<std::string>()];
|
||||||
AddHint(RH_DAMPES_DIARY, Text(dampeText), dampeHintLoc, HINT_TYPE_STATIC, Text(dampeRegion));
|
AddHint(RH_DAMPES_DIARY, Text(dampeText), dampeHintLoc, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[dampeRegion]);
|
||||||
|
|
||||||
// Greg Hint
|
// Greg Hint
|
||||||
std::string gregText = FormatJsonHintText(spoilerFileJson["gregText"].get<std::string>());
|
std::string gregText = FormatJsonHintText(spoilerFileJson["gregText"].get<std::string>());
|
||||||
std::string gregRegion = spoilerFileJson["gregRegion"].get<std::string>();
|
std::string gregRegion = spoilerFileJson["gregRegion"].get<std::string>();
|
||||||
RandomizerCheck gregLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["gregLoc"].get<std::string>()];
|
RandomizerCheck gregLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["gregLoc"].get<std::string>()];
|
||||||
AddHint(RH_GREG_RUPEE, Text(gregText), gregLoc, HINT_TYPE_STATIC, Text(gregRegion));
|
AddHint(RH_GREG_RUPEE, Text(gregText), gregLoc, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[gregRegion]);
|
||||||
|
|
||||||
// Saria Magic Hint
|
// Saria Magic Hint
|
||||||
std::string sariaText = FormatJsonHintText(spoilerFileJson["sariaText"].get<std::string>());
|
std::string sariaText = FormatJsonHintText(spoilerFileJson["sariaText"].get<std::string>());
|
||||||
std::string sariaRegion = spoilerFileJson["sariaRegion"].get<std::string>();
|
std::string sariaRegion = spoilerFileJson["sariaRegion"].get<std::string>();
|
||||||
RandomizerCheck sariaHintLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["sariaHintLoc"].get<std::string>()];
|
RandomizerCheck sariaHintLoc = mSpoilerfileCheckNameToEnum[spoilerFileJson["sariaHintLoc"].get<std::string>()];
|
||||||
AddHint(RH_SARIA, Text(sariaText), sariaHintLoc, HINT_TYPE_STATIC, Text(sariaRegion));
|
AddHint(RH_SARIA, Text(sariaText), sariaHintLoc, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[sariaRegion]);
|
||||||
|
|
||||||
// Warp Songs
|
// Warp Songs
|
||||||
std::string warpMinuetText = FormatJsonHintText(spoilerFileJson["warpMinuetText"].get<std::string>());
|
std::string warpMinuetText = FormatJsonHintText(spoilerFileJson["warpMinuetText"].get<std::string>()); //RANDOTODO fall back for if location is used
|
||||||
AddHint(RH_MINUET_WARP_LOC, Text(warpMinuetText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpMinuetText));
|
AddHint(RH_MINUET_WARP_LOC, Text(warpMinuetText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[warpMinuetText]);
|
||||||
std::string warpBoleroText = FormatJsonHintText(spoilerFileJson["warpBoleroText"].get<std::string>());
|
std::string warpBoleroText = FormatJsonHintText(spoilerFileJson["warpBoleroText"].get<std::string>());
|
||||||
AddHint(RH_BOLERO_WARP_LOC, Text(warpBoleroText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpBoleroText));
|
AddHint(RH_BOLERO_WARP_LOC, Text(warpBoleroText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[warpBoleroText]);
|
||||||
std::string warpSerenadeText = FormatJsonHintText(spoilerFileJson["warpSerenadeText"].get<std::string>());
|
std::string warpSerenadeText = FormatJsonHintText(spoilerFileJson["warpSerenadeText"].get<std::string>());
|
||||||
AddHint(RH_SERENADE_WARP_LOC, Text(warpSerenadeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpSerenadeText));
|
AddHint(RH_SERENADE_WARP_LOC, Text(warpSerenadeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[warpSerenadeText]);
|
||||||
std::string warpRequiemText = FormatJsonHintText(spoilerFileJson["warpRequiemText"].get<std::string>());
|
std::string warpRequiemText = FormatJsonHintText(spoilerFileJson["warpRequiemText"].get<std::string>());
|
||||||
AddHint(RH_REQUIEM_WARP_LOC, Text(warpRequiemText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpRequiemText));
|
AddHint(RH_REQUIEM_WARP_LOC, Text(warpRequiemText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[warpRequiemText]);
|
||||||
std::string warpNocturneText = FormatJsonHintText(spoilerFileJson["warpNocturneText"].get<std::string>());
|
std::string warpNocturneText = FormatJsonHintText(spoilerFileJson["warpNocturneText"].get<std::string>());
|
||||||
AddHint(RH_NOCTURNE_WARP_LOC, Text(warpNocturneText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpNocturneText));
|
AddHint(RH_NOCTURNE_WARP_LOC, Text(warpNocturneText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[warpNocturneText]);
|
||||||
std::string warpPreludeText = FormatJsonHintText(spoilerFileJson["warpPreludeText"].get<std::string>());
|
std::string warpPreludeText = FormatJsonHintText(spoilerFileJson["warpPreludeText"].get<std::string>());
|
||||||
AddHint(RH_PRELUDE_WARP_LOC, Text(warpPreludeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpPreludeText));
|
AddHint(RH_PRELUDE_WARP_LOC, Text(warpPreludeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", mSpoilerfileAreaNameToEnum[warpPreludeText]);
|
||||||
|
|
||||||
// Gossip Stones
|
// Gossip Stones
|
||||||
nlohmann::json hintsJson = spoilerFileJson["hints"];
|
nlohmann::json hintsJson = spoilerFileJson["hints"];
|
||||||
for (auto it = hintsJson.begin(); it != hintsJson.end(); ++it) {
|
for (auto it = hintsJson.begin(); it != hintsJson.end(); ++it) {
|
||||||
|
@ -33,8 +33,8 @@ class Context {
|
|||||||
static std::shared_ptr<Context> CreateInstance();
|
static std::shared_ptr<Context> CreateInstance();
|
||||||
static std::shared_ptr<Context> GetInstance();
|
static std::shared_ptr<Context> GetInstance();
|
||||||
Hint* GetHint(RandomizerHintKey hintKey);
|
Hint* GetHint(RandomizerHintKey hintKey);
|
||||||
void AddHint(RandomizerHintKey hintId, const Text& text, RandomizerCheck hintedLocation, HintType hintType,
|
void AddHint(RandomizerHintKey hintId, const Text& text, RandomizerCheck hintedLocation, HintType hintType, std::string distributionName,
|
||||||
const Text& hintedRegion);
|
RandomizerArea hintedArea = RA_NONE);
|
||||||
ItemLocation* GetItemLocation(RandomizerCheck locKey);
|
ItemLocation* GetItemLocation(RandomizerCheck locKey);
|
||||||
ItemLocation* GetItemLocation(size_t locKey);
|
ItemLocation* GetItemLocation(size_t locKey);
|
||||||
void PlaceItemInLocation(RandomizerCheck locKey, RandomizerGet item, bool applyEffectImmediately = false,
|
void PlaceItemInLocation(RandomizerCheck locKey, RandomizerGet item, bool applyEffectImmediately = false,
|
||||||
@ -74,18 +74,19 @@ class Context {
|
|||||||
std::map<RandomizerCheck, ItemOverride> overrides = {};
|
std::map<RandomizerCheck, ItemOverride> overrides = {};
|
||||||
std::vector<std::vector<RandomizerCheck>> playthroughLocations = {};
|
std::vector<std::vector<RandomizerCheck>> playthroughLocations = {};
|
||||||
std::vector<RandomizerCheck> everyPossibleLocation = {};
|
std::vector<RandomizerCheck> everyPossibleLocation = {};
|
||||||
std::vector<RandomizerCheck> wothLocations = {};
|
|
||||||
std::vector<RandomizerGet> possibleIceTrapModels = {};
|
std::vector<RandomizerGet> possibleIceTrapModels = {};
|
||||||
std::unordered_map<RandomizerCheck, RandomizerGet> iceTrapModels = {};
|
std::unordered_map<RandomizerCheck, RandomizerGet> iceTrapModels = {};
|
||||||
std::array<uint8_t, 5> hashIconIndexes = {};
|
std::array<uint8_t, 5> hashIconIndexes = {};
|
||||||
std::unordered_map<std::string, RandomizerCheck> mSpoilerfileCheckNameToEnum;
|
std::unordered_map<std::string, RandomizerCheck> mSpoilerfileCheckNameToEnum;
|
||||||
bool playthroughBeatable = false;
|
bool playthroughBeatable = false;
|
||||||
bool allLocationsReachable = false;
|
bool allLocationsReachable = false;
|
||||||
|
RandomizerArea GetAreaFromString(std::string str);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::weak_ptr<Context> mContext;
|
static std::weak_ptr<Context> mContext;
|
||||||
std::unordered_map<std::string, RandomizerGet> mSpoilerfileGetNameToEnum;
|
std::unordered_map<std::string, RandomizerGet> mSpoilerfileGetNameToEnum;
|
||||||
std::unordered_map<std::string, HintType> mSpoilerfileHintTypeNameToEnum;
|
std::unordered_map<std::string, HintType> mSpoilerfileHintTypeNameToEnum;
|
||||||
|
std::unordered_map<std::string, RandomizerArea> mSpoilerfileAreaNameToEnum;
|
||||||
std::array<Hint, RH_MAX> hintTable = {};
|
std::array<Hint, RH_MAX> hintTable = {};
|
||||||
RandomizerCheck mEmeraldLoc = RC_UNKNOWN_CHECK;
|
RandomizerCheck mEmeraldLoc = RC_UNKNOWN_CHECK;
|
||||||
RandomizerCheck mRubyLoc = RC_UNKNOWN_CHECK;
|
RandomizerCheck mRubyLoc = RC_UNKNOWN_CHECK;
|
||||||
|
@ -7,11 +7,11 @@
|
|||||||
namespace Rando {
|
namespace Rando {
|
||||||
DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_, const RandomizerGet map_,
|
DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_, const RandomizerGet map_,
|
||||||
const RandomizerGet compass_, const RandomizerGet smallKey_, const RandomizerGet keyRing_,
|
const RandomizerGet compass_, const RandomizerGet smallKey_, const RandomizerGet keyRing_,
|
||||||
const RandomizerGet bossKey_, const uint8_t vanillaKeyCount_, const uint8_t mqKeyCount_,
|
const RandomizerGet bossKey_, RandomizerArea area_, const uint8_t vanillaKeyCount_, const uint8_t mqKeyCount_,
|
||||||
std::vector<RandomizerCheck> vanillaLocations_, std::vector<RandomizerCheck> mqLocations_,
|
std::vector<RandomizerCheck> vanillaLocations_, std::vector<RandomizerCheck> mqLocations_,
|
||||||
std::vector<RandomizerCheck> sharedLocations_, std::vector<RandomizerCheck> bossRoomLocations_)
|
std::vector<RandomizerCheck> sharedLocations_, std::vector<RandomizerCheck> bossRoomLocations_)
|
||||||
: name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_),
|
: name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_),
|
||||||
bossKey(bossKey_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_),
|
bossKey(bossKey_), area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_),
|
||||||
vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)),
|
vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)),
|
||||||
sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) {
|
sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) {
|
||||||
}
|
}
|
||||||
@ -59,6 +59,10 @@ RandomizerHintTextKey DungeonInfo::GetHintKey() const {
|
|||||||
return hintKey;
|
return hintKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RandomizerArea DungeonInfo::GetArea() const {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
RandomizerGet DungeonInfo::GetSmallKey() const {
|
RandomizerGet DungeonInfo::GetSmallKey() const {
|
||||||
return smallKey;
|
return smallKey;
|
||||||
}
|
}
|
||||||
@ -148,7 +152,7 @@ std::vector<RandomizerCheck> DungeonInfo::GetEveryLocation() const {
|
|||||||
|
|
||||||
Dungeons::Dungeons() {
|
Dungeons::Dungeons() {
|
||||||
dungeonList[DEKU_TREE] =
|
dungeonList[DEKU_TREE] =
|
||||||
DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, 0, 0,
|
DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DEKU_TREE, 0, 0,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_DEKU_TREE_MAP_CHEST,
|
RC_DEKU_TREE_MAP_CHEST,
|
||||||
@ -184,7 +188,7 @@ Dungeons::Dungeons() {
|
|||||||
RC_QUEEN_GOHMA,
|
RC_QUEEN_GOHMA,
|
||||||
});
|
});
|
||||||
dungeonList[DODONGOS_CAVERN] = DungeonInfo("Dodongo's Cavern", RHT_DODONGOS_CAVERN, RG_DODONGOS_CAVERN_MAP,
|
dungeonList[DODONGOS_CAVERN] = DungeonInfo("Dodongo's Cavern", RHT_DODONGOS_CAVERN, RG_DODONGOS_CAVERN_MAP,
|
||||||
RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, 0, 0,
|
RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DODONGOS_CAVERN, 0, 0,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_DODONGOS_CAVERN_MAP_CHEST,
|
RC_DODONGOS_CAVERN_MAP_CHEST,
|
||||||
@ -228,7 +232,7 @@ Dungeons::Dungeons() {
|
|||||||
RC_KING_DODONGO,
|
RC_KING_DODONGO,
|
||||||
});
|
});
|
||||||
dungeonList[JABU_JABUS_BELLY] = DungeonInfo("Jabu Jabu's Belly", RHT_JABU_JABUS_BELLY, RG_JABU_JABUS_BELLY_MAP,
|
dungeonList[JABU_JABUS_BELLY] = DungeonInfo("Jabu Jabu's Belly", RHT_JABU_JABUS_BELLY, RG_JABU_JABUS_BELLY_MAP,
|
||||||
RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, 0, 0,
|
RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_JABU_JABUS_BELLY, 0, 0,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_JABU_JABUS_BELLY_MAP_CHEST,
|
RC_JABU_JABUS_BELLY_MAP_CHEST,
|
||||||
@ -267,7 +271,7 @@ Dungeons::Dungeons() {
|
|||||||
});
|
});
|
||||||
dungeonList[FOREST_TEMPLE] =
|
dungeonList[FOREST_TEMPLE] =
|
||||||
DungeonInfo("Forest Temple", RHT_FOREST_TEMPLE, RG_FOREST_TEMPLE_MAP, RG_FOREST_TEMPLE_COMPASS,
|
DungeonInfo("Forest Temple", RHT_FOREST_TEMPLE, RG_FOREST_TEMPLE_MAP, RG_FOREST_TEMPLE_COMPASS,
|
||||||
RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, 5, 6,
|
RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, RA_FOREST_TEMPLE, 5, 6,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_FOREST_TEMPLE_FIRST_ROOM_CHEST,
|
RC_FOREST_TEMPLE_FIRST_ROOM_CHEST,
|
||||||
@ -317,7 +321,7 @@ Dungeons::Dungeons() {
|
|||||||
});
|
});
|
||||||
dungeonList[FIRE_TEMPLE] =
|
dungeonList[FIRE_TEMPLE] =
|
||||||
DungeonInfo("Fire Temple", RHT_FIRE_TEMPLE, RG_FIRE_TEMPLE_MAP, RG_FIRE_TEMPLE_COMPASS,
|
DungeonInfo("Fire Temple", RHT_FIRE_TEMPLE, RG_FIRE_TEMPLE_MAP, RG_FIRE_TEMPLE_COMPASS,
|
||||||
RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, 8, 5,
|
RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, RA_FIRE_TEMPLE, 8, 5,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_FIRE_TEMPLE_NEAR_BOSS_CHEST,
|
RC_FIRE_TEMPLE_NEAR_BOSS_CHEST,
|
||||||
@ -368,7 +372,7 @@ Dungeons::Dungeons() {
|
|||||||
});
|
});
|
||||||
dungeonList[WATER_TEMPLE] =
|
dungeonList[WATER_TEMPLE] =
|
||||||
DungeonInfo("Water Temple", RHT_WATER_TEMPLE, RG_WATER_TEMPLE_MAP, RG_WATER_TEMPLE_COMPASS,
|
DungeonInfo("Water Temple", RHT_WATER_TEMPLE, RG_WATER_TEMPLE_MAP, RG_WATER_TEMPLE_COMPASS,
|
||||||
RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, 6, 2,
|
RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, RA_WATER_TEMPLE, 6, 2,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_WATER_TEMPLE_MAP_CHEST,
|
RC_WATER_TEMPLE_MAP_CHEST,
|
||||||
@ -409,7 +413,7 @@ Dungeons::Dungeons() {
|
|||||||
});
|
});
|
||||||
dungeonList[SPIRIT_TEMPLE] =
|
dungeonList[SPIRIT_TEMPLE] =
|
||||||
DungeonInfo("Spirit Temple", RHT_SPIRIT_TEMPLE, RG_SPIRIT_TEMPLE_MAP, RG_SPIRIT_TEMPLE_COMPASS,
|
DungeonInfo("Spirit Temple", RHT_SPIRIT_TEMPLE, RG_SPIRIT_TEMPLE_MAP, RG_SPIRIT_TEMPLE_COMPASS,
|
||||||
RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, 5, 7,
|
RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, RA_SPIRIT_TEMPLE, 5, 7,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
|
RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
|
||||||
@ -475,7 +479,7 @@ Dungeons::Dungeons() {
|
|||||||
});
|
});
|
||||||
dungeonList[SHADOW_TEMPLE] =
|
dungeonList[SHADOW_TEMPLE] =
|
||||||
DungeonInfo("Shadow Temple", RHT_SHADOW_TEMPLE, RG_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_COMPASS,
|
DungeonInfo("Shadow Temple", RHT_SHADOW_TEMPLE, RG_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_COMPASS,
|
||||||
RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, 5, 6,
|
RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_SHADOW_TEMPLE_MAP_CHEST,
|
RC_SHADOW_TEMPLE_MAP_CHEST,
|
||||||
@ -537,7 +541,7 @@ Dungeons::Dungeons() {
|
|||||||
});
|
});
|
||||||
dungeonList[BOTTOM_OF_THE_WELL] = DungeonInfo(
|
dungeonList[BOTTOM_OF_THE_WELL] = DungeonInfo(
|
||||||
"Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTTOM_OF_THE_WELL_MAP, RG_BOTTOM_OF_THE_WELL_COMPASS,
|
"Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTTOM_OF_THE_WELL_MAP, RG_BOTTOM_OF_THE_WELL_COMPASS,
|
||||||
RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, 3, 2,
|
RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST,
|
RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST,
|
||||||
@ -571,7 +575,7 @@ Dungeons::Dungeons() {
|
|||||||
},
|
},
|
||||||
{}, {});
|
{}, {});
|
||||||
dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS,
|
dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS,
|
||||||
RG_NONE, RG_NONE, RG_NONE, 0, 0,
|
RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_ICE_CAVERN_MAP_CHEST,
|
RC_ICE_CAVERN_MAP_CHEST,
|
||||||
@ -599,7 +603,7 @@ Dungeons::Dungeons() {
|
|||||||
{});
|
{});
|
||||||
dungeonList[GERUDO_TRAINING_GROUNDS] =
|
dungeonList[GERUDO_TRAINING_GROUNDS] =
|
||||||
DungeonInfo("Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE,
|
DungeonInfo("Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE,
|
||||||
RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, RG_GERUDO_TRAINING_GROUNDS_KEY_RING, RG_NONE, 9, 3,
|
RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, RG_GERUDO_TRAINING_GROUNDS_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST,
|
RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST,
|
||||||
@ -648,7 +652,7 @@ Dungeons::Dungeons() {
|
|||||||
{}, {});
|
{}, {});
|
||||||
dungeonList[GANONS_CASTLE] =
|
dungeonList[GANONS_CASTLE] =
|
||||||
DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY,
|
DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY,
|
||||||
RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, 2, 3,
|
RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3,
|
||||||
{
|
{
|
||||||
// Vanilla Locations
|
// Vanilla Locations
|
||||||
RC_GANONS_CASTLE_FOREST_TRIAL_CHEST,
|
RC_GANONS_CASTLE_FOREST_TRIAL_CHEST,
|
||||||
|
@ -11,8 +11,8 @@ namespace Rando {
|
|||||||
class DungeonInfo {
|
class DungeonInfo {
|
||||||
public:
|
public:
|
||||||
DungeonInfo(std::string name_, RandomizerHintTextKey hintKey_, RandomizerGet map_, RandomizerGet compass_,
|
DungeonInfo(std::string name_, RandomizerHintTextKey hintKey_, RandomizerGet map_, RandomizerGet compass_,
|
||||||
RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, uint8_t vanillaKeyCount_,
|
RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, RandomizerArea area_,
|
||||||
uint8_t mqKeyCount_, std::vector<RandomizerCheck> vanillaLocations_,
|
uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, std::vector<RandomizerCheck> vanillaLocations_,
|
||||||
std::vector<RandomizerCheck> mqLocations_, std::vector<RandomizerCheck> sharedLocations_,
|
std::vector<RandomizerCheck> mqLocations_, std::vector<RandomizerCheck> sharedLocations_,
|
||||||
std::vector<RandomizerCheck> bossRoomLocations_);
|
std::vector<RandomizerCheck> bossRoomLocations_);
|
||||||
DungeonInfo();
|
DungeonInfo();
|
||||||
@ -28,6 +28,7 @@ class DungeonInfo {
|
|||||||
bool IsVanilla() const;
|
bool IsVanilla() const;
|
||||||
uint8_t GetSmallKeyCount() const;
|
uint8_t GetSmallKeyCount() const;
|
||||||
RandomizerHintTextKey GetHintKey() const;
|
RandomizerHintTextKey GetHintKey() const;
|
||||||
|
RandomizerArea GetArea() const;
|
||||||
RandomizerGet GetSmallKey() const;
|
RandomizerGet GetSmallKey() const;
|
||||||
RandomizerGet GetKeyRing() const;
|
RandomizerGet GetKeyRing() const;
|
||||||
RandomizerGet GetMap() const;
|
RandomizerGet GetMap() const;
|
||||||
@ -43,6 +44,7 @@ class DungeonInfo {
|
|||||||
private:
|
private:
|
||||||
std::string name;
|
std::string name;
|
||||||
RandomizerHintTextKey hintKey;
|
RandomizerHintTextKey hintKey;
|
||||||
|
RandomizerArea area;
|
||||||
RandomizerGet map;
|
RandomizerGet map;
|
||||||
RandomizerGet compass;
|
RandomizerGet compass;
|
||||||
RandomizerGet smallKey;
|
RandomizerGet smallKey;
|
||||||
|
@ -459,7 +459,7 @@ static bool ValidateWorld(Entrance* entrancePlaced) {
|
|||||||
// Conditions will be checked during the search and any that fail will be figured out
|
// Conditions will be checked during the search and any that fail will be figured out
|
||||||
// afterwards
|
// afterwards
|
||||||
Logic::LogicReset();
|
Logic::LogicReset();
|
||||||
GetAccessibleLocations({}, SearchMode::ValidateWorld, "", checkPoeCollectorAccess, checkOtherEntranceAccess);
|
GetAccessibleLocations({}, SearchMode::ValidateWorld, RG_NONE, checkPoeCollectorAccess, checkOtherEntranceAccess);
|
||||||
|
|
||||||
if (!ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
if (!ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
||||||
// Unless entrances are decoupled, we don't want the player to end up through certain entrances as the wrong age
|
// Unless entrances are decoupled, we don't want the player to end up through certain entrances as the wrong age
|
||||||
@ -521,10 +521,10 @@ static bool ValidateWorld(Entrance* entrancePlaced) {
|
|||||||
// When cows are shuffled, ensure both Impa's House entrances are in the same hint area because the cow is
|
// When cows are shuffled, ensure both Impa's House entrances are in the same hint area because the cow is
|
||||||
// reachable from both sides
|
// reachable from both sides
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_COWS)) {
|
if (ctx->GetOption(RSK_SHUFFLE_COWS)) {
|
||||||
auto impasHouseFrontHintRegion = GetHintRegionHintKey(RR_KAK_IMPAS_HOUSE);
|
auto impasHouseFrontHintRegion = areaTable[RR_KAK_IMPAS_HOUSE].GetArea();
|
||||||
auto impasHouseBackHintRegion = GetHintRegionHintKey(RR_KAK_IMPAS_HOUSE_BACK);
|
auto impasHouseBackHintRegion = areaTable[RR_KAK_IMPAS_HOUSE_BACK].GetArea();
|
||||||
if (impasHouseFrontHintRegion != RHT_NONE && impasHouseBackHintRegion != RHT_NONE &&
|
if (impasHouseFrontHintRegion != RA_NONE && impasHouseBackHintRegion != RA_NONE &&
|
||||||
impasHouseBackHintRegion != RHT_LINKS_POCKET && impasHouseFrontHintRegion != RHT_LINKS_POCKET &&
|
impasHouseBackHintRegion != RA_LINKS_POCKET && impasHouseFrontHintRegion != RA_LINKS_POCKET &&
|
||||||
impasHouseBackHintRegion != impasHouseFrontHintRegion) {
|
impasHouseBackHintRegion != impasHouseFrontHintRegion) {
|
||||||
auto message = "Kak Impas House entrances are not in the same hint area\n";
|
auto message = "Kak Impas House entrances are not in the same hint area\n";
|
||||||
SPDLOG_DEBUG(message);
|
SPDLOG_DEBUG(message);
|
||||||
@ -805,7 +805,7 @@ bool EntranceShuffler::PlaceOtherImpasHouseEntrance(std::vector<Entrance*> entra
|
|||||||
// If the entrance is already connected or it doesn't have the same hint region as the already placed impas
|
// If the entrance is already connected or it doesn't have the same hint region as the already placed impas
|
||||||
// house entrance, then don't try to use it
|
// house entrance, then don't try to use it
|
||||||
if (entrance->GetConnectedRegionKey() != RR_NONE ||
|
if (entrance->GetConnectedRegionKey() != RR_NONE ||
|
||||||
(GetHintRegionHintKey(otherImpaRegion) != GetHintRegionHintKey(entrance->GetParentRegionKey()))) {
|
(areaTable[otherImpaRegion].GetArea() != areaTable[entrance->GetParentRegionKey()].GetArea())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// If the placement succeeds, we return true
|
// If the placement succeeds, we return true
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
namespace Rando {
|
namespace Rando {
|
||||||
Hint::Hint() : text(std::move(Text())) {}
|
Hint::Hint() : text(std::move(Text())) {}
|
||||||
Hint::Hint(Text text_): text(std::move(text_)) {}
|
Hint::Hint(Text text_): text(std::move(text_)) {}
|
||||||
Hint::Hint(Text text_, RandomizerCheck hintedLocation_, HintType hintType_, Text hintedRegion_)
|
Hint::Hint(Text text_, RandomizerCheck hintedLocation_, HintType hintType_, std::string distributionName_, RandomizerArea hintedArea_)
|
||||||
: text(std::move(text_)), hintedLocation(hintedLocation_), hintType(hintType_),
|
: text(std::move(text_)), hintedLocation(hintedLocation_), hintType(hintType_),
|
||||||
hintedRegion(std::move(hintedRegion_)) {
|
hintedArea(hintedArea_), distribution(std::move(distributionName_)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const Text& Hint::GetText() const {
|
const Text& Hint::GetText() const {
|
||||||
@ -28,17 +28,22 @@ HintType Hint::GetHintType() {
|
|||||||
return hintType;
|
return hintType;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hint::SetHintedRegion(Text region) {
|
void Hint::SetHintedArea(RandomizerArea area) {
|
||||||
hintedRegion = region;
|
hintedArea = area;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Hint::GetHintedRegion() {
|
RandomizerArea Hint::GetHintedArea() {
|
||||||
return hintedRegion.GetEnglish();
|
return hintedArea;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hint::SetDistribution(std::string distributionName) {
|
||||||
|
distribution = distributionName;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& Hint::GetDistribution() {
|
||||||
|
return distribution;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Text& Hint::GetHintedRegionText() {
|
|
||||||
return hintedRegion;
|
|
||||||
};
|
|
||||||
|
|
||||||
void Hint::ResetVariables() {
|
void Hint::ResetVariables() {
|
||||||
hintedLocation = RC_UNKNOWN_CHECK;
|
hintedLocation = RC_UNKNOWN_CHECK;
|
||||||
|
@ -8,15 +8,16 @@ class Hint {
|
|||||||
public:
|
public:
|
||||||
Hint();
|
Hint();
|
||||||
Hint(Text text_);
|
Hint(Text text_);
|
||||||
Hint(Text text_, RandomizerCheck hintedLocation_, HintType hintType_, Text hintedRegion_);
|
Hint(Text text_, RandomizerCheck hintedLocation_, HintType hintType_, std::string distributionName_, RandomizerArea hintedArea_);
|
||||||
const Text& GetText() const;
|
const Text& GetText() const;
|
||||||
RandomizerCheck GetHintedLocation();
|
RandomizerCheck GetHintedLocation();
|
||||||
void SetHintedLocation (RandomizerCheck location);
|
void SetHintedLocation (RandomizerCheck location);
|
||||||
HintType GetHintType();
|
HintType GetHintType();
|
||||||
void SetHintType (HintType type);
|
void SetHintType (HintType type);
|
||||||
std::string GetHintedRegion();
|
RandomizerArea GetHintedArea();
|
||||||
const Text& GetHintedRegionText();
|
void SetHintedArea (RandomizerArea area);
|
||||||
void SetHintedRegion (Text region);
|
const std::string& GetDistribution();
|
||||||
|
void SetDistribution (std::string distribution);
|
||||||
void ResetVariables();
|
void ResetVariables();
|
||||||
bool IsAddedToPool();
|
bool IsAddedToPool();
|
||||||
void AddToPool();
|
void AddToPool();
|
||||||
@ -25,7 +26,8 @@ class Hint {
|
|||||||
Text text = Text();
|
Text text = Text();
|
||||||
RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK;
|
RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK;
|
||||||
HintType hintType = HINT_TYPE_STATIC;
|
HintType hintType = HINT_TYPE_STATIC;
|
||||||
Text hintedRegion = Text();
|
RandomizerArea hintedArea = RA_NONE;
|
||||||
|
std::string distribution = "";
|
||||||
bool addedToPool = false;
|
bool addedToPool = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -98,6 +98,10 @@ ItemType Item::GetItemType() const {
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::variant<bool*, uint8_t*> Item::GetLogicVar() const {
|
||||||
|
return logicVar;
|
||||||
|
}
|
||||||
|
|
||||||
RandomizerGet Item::GetRandomizerGet() const {
|
RandomizerGet Item::GetRandomizerGet() const {
|
||||||
return randomizerGet;
|
return randomizerGet;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ class Item {
|
|||||||
bool IsAdvancement() const;
|
bool IsAdvancement() const;
|
||||||
int GetItemID() const;
|
int GetItemID() const;
|
||||||
ItemType GetItemType() const;
|
ItemType GetItemType() const;
|
||||||
|
std::variant<bool*, uint8_t*> GetLogicVar() const;
|
||||||
RandomizerGet GetRandomizerGet() const;
|
RandomizerGet GetRandomizerGet() const;
|
||||||
uint16_t GetPrice() const;
|
uint16_t GetPrice() const;
|
||||||
std::shared_ptr<GetItemEntry> GetGIEntry() const;
|
std::shared_ptr<GetItemEntry> GetGIEntry() const;
|
||||||
|
@ -209,24 +209,24 @@ void Rando::StaticData::InitItemTable() {
|
|||||||
itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzstück (Schatztruhen-Minispiel)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, &Logic::PieceOfHeart, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE);
|
itemTable[RG_TREASURE_GAME_HEART] = Item(RG_TREASURE_GAME_HEART, Text{ "Piece of Heart (WINNER)", "Quart de Coeur (Chasse-aux-Trésors)", "Herzstück (Schatztruhen-Minispiel)" }, ITEMTYPE_ITEM, GI_HEART_PIECE_WIN, true, &Logic::PieceOfHeart, RHT_TREASURE_GAME_HEART, ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xFA, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE);
|
||||||
itemTable[RG_TREASURE_GAME_GREEN_RUPEE] = Item(RG_TREASURE_GAME_GREEN_RUPEE, Text{ "Green Rupee (LOSER)", "Rubis Vert (Chasse-aux-Trésors)", "Grüne Rupie (Schatztruhe-Minispiel)" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE,false, &Logic::noVariable, RHT_TREASURE_GAME_GREEN_RUPEE,ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE);
|
itemTable[RG_TREASURE_GAME_GREEN_RUPEE] = Item(RG_TREASURE_GAME_GREEN_RUPEE, Text{ "Green Rupee (LOSER)", "Rubis Vert (Chasse-aux-Trésors)", "Grüne Rupie (Schatztruhe-Minispiel)" }, ITEMTYPE_ITEM, GI_RUPEE_GREEN_LOSE,false, &Logic::noVariable, RHT_TREASURE_GAME_GREEN_RUPEE,ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xF4, 0x00, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE);
|
||||||
// Shop
|
// Shop
|
||||||
itemTable[RG_BUY_DEKU_NUT_5] = Item(RG_BUY_DEKU_NUT_5, Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nuss kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, &Logic::Nuts, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15);
|
itemTable[RG_BUY_DEKU_NUTS_5] = Item(RG_BUY_DEKU_NUTS_5, Text{ "Buy Deku Nut (5)", "Acheter: Noix Mojo (5)", "Deku-Nuss kaufen (5)" }, ITEMTYPE_SHOP, GI_NUTS_5_2, true, &Logic::Nuts, RHT_DEKU_NUTS_5, ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 15);
|
||||||
itemTable[RG_BUY_ARROWS_30] = Item(RG_BUY_ARROWS_30, Text{ "Buy Arrows (30)", "Acheter: Flèches (30)", "Pfeile kaufen (30)" }, ITEMTYPE_SHOP, GI_ARROWS_MEDIUM, true, &Logic::BuyArrow, RHT_ARROWS_30, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 60);
|
itemTable[RG_BUY_ARROWS_30] = Item(RG_BUY_ARROWS_30, Text{ "Buy Arrows (30)", "Acheter: Flèches (30)", "Pfeile kaufen (30)" }, ITEMTYPE_SHOP, GI_ARROWS_MEDIUM, true, &Logic::BuyArrow, RHT_ARROWS_30, ITEM_ARROWS_MEDIUM, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0xE6, 0x49, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 60);
|
||||||
itemTable[RG_BUY_ARROWS_50] = Item(RG_BUY_ARROWS_50, Text{ "Buy Arrows (50)", "Acheter: Flèches (50)", "Pfeile kaufen (50)" }, ITEMTYPE_SHOP, GI_ARROWS_LARGE, true, &Logic::BuyArrow, RHT_ARROWS_30, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 90);
|
itemTable[RG_BUY_ARROWS_50] = Item(RG_BUY_ARROWS_50, Text{ "Buy Arrows (50)", "Acheter: Flèches (50)", "Pfeile kaufen (50)" }, ITEMTYPE_SHOP, GI_ARROWS_LARGE, true, &Logic::BuyArrow, RHT_ARROWS_30, ITEM_ARROWS_LARGE, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0xE6, 0x4A, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 90);
|
||||||
itemTable[RG_BUY_BOMBS_525] = Item(RG_BUY_BOMBS_525, Text{ "Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Bomben kaufen (5) [25]" }, ITEMTYPE_SHOP, GI_BOMBS_5, true, &Logic::BuyBomb, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 25);
|
itemTable[RG_BUY_BOMBS_525] = Item(RG_BUY_BOMBS_525, Text{ "Buy Bombs (5) [25]", "Acheter: Bombes (5) [25]", "Bomben kaufen (5) [25]" }, ITEMTYPE_SHOP, GI_BOMBS_5, true, &Logic::BuyBomb, RHT_BOMBS_5, ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 25);
|
||||||
itemTable[RG_BUY_DEKU_NUT_10] = Item(RG_BUY_DEKU_NUT_10, Text{ "Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Deku-Nuss kaufen (10)" }, ITEMTYPE_SHOP, GI_NUTS_10, true, &Logic::Nuts, RHT_DEKU_NUTS_10, ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
itemTable[RG_BUY_DEKU_NUTS_10] = Item(RG_BUY_DEKU_NUTS_10, Text{ "Buy Deku Nut (10)", "Acheter: Noix Mojo (10)", "Deku-Nuss kaufen (10)" }, ITEMTYPE_SHOP, GI_NUTS_10, true, &Logic::Nuts, RHT_DEKU_NUTS_10, ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
||||||
itemTable[RG_BUY_DEKU_STICK_1] = Item(RG_BUY_DEKU_STICK_1, Text{ "Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Deku-Stick kaufen (1)" }, ITEMTYPE_SHOP, GI_STICKS_1, true, &Logic::Sticks, RHT_DEKU_STICK_1, ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 10);
|
itemTable[RG_BUY_DEKU_STICK_1] = Item(RG_BUY_DEKU_STICK_1, Text{ "Buy Deku Stick (1)", "Acheter: Bâton Mojo (1)", "Deku-Stick kaufen (1)" }, ITEMTYPE_SHOP, GI_STICKS_1, true, &Logic::Sticks, RHT_DEKU_STICK_1, ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x37, 0x0D, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 10);
|
||||||
itemTable[RG_BUY_BOMBS_10] = Item(RG_BUY_BOMBS_10, Text{ "Buy Bombs (10)", "Acheter: Bombes (10)", "Bomben kaufen (10)" }, ITEMTYPE_SHOP, GI_BOMBS_10, true, &Logic::BuyBomb, RHT_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50);
|
itemTable[RG_BUY_BOMBS_10] = Item(RG_BUY_BOMBS_10, Text{ "Buy Bombs (10)", "Acheter: Bombes (10)", "Bomben kaufen (10)" }, ITEMTYPE_SHOP, GI_BOMBS_10, true, &Logic::BuyBomb, RHT_BOMBS_10, ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50);
|
||||||
itemTable[RG_BUY_FISH] = Item(RG_BUY_FISH, Text{ "Buy Fish", "Acheter: Poisson", "Fisch kaufen" }, ITEMTYPE_SHOP, GI_FISH, true, &Logic::FishAccess, RHT_BOTTLE_WITH_FISH, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 200);
|
itemTable[RG_BUY_FISH] = Item(RG_BUY_FISH, Text{ "Buy Fish", "Acheter: Poisson", "Fisch kaufen" }, ITEMTYPE_SHOP, GI_FISH, true, &Logic::FishAccess, RHT_BOTTLE_WITH_FISH, ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x47, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 200);
|
||||||
itemTable[RG_BUY_RED_POTION_30] = Item(RG_BUY_RED_POTION_30, Text{ "Buy Red Potion [30]", "Acheter: Potion Rouge [30]", "Rotes Elixier kaufen [30]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, &Logic::noVariable, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
itemTable[RG_BUY_RED_POTION_30] = Item(RG_BUY_RED_POTION_30, Text{ "Buy Red Potion [30]", "Acheter: Potion Rouge [30]", "Rotes Elixier kaufen [30]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, &Logic::noVariable, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
||||||
itemTable[RG_BUY_GREEN_POTION] = Item(RG_BUY_GREEN_POTION, Text{ "Buy Green Potion", "Acheter: Potion Verte", "Grünes Elixier kaufen" }, ITEMTYPE_SHOP, GI_POTION_GREEN, true, &Logic::BuyGPotion, RHT_BOTTLE_WITH_GREEN_POTION,ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
itemTable[RG_BUY_GREEN_POTION] = Item(RG_BUY_GREEN_POTION, Text{ "Buy Green Potion", "Acheter: Potion Verte", "Grünes Elixier kaufen" }, ITEMTYPE_SHOP, GI_POTION_GREEN, true, &Logic::BuyMagicPotion, RHT_BOTTLE_WITH_GREEN_POTION,ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x44, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
||||||
itemTable[RG_BUY_BLUE_POTION] = Item(RG_BUY_BLUE_POTION, Text{ "Buy Blue Potion", "Acheter: Potion Bleue", "Blaues Elixier kaufen" }, ITEMTYPE_SHOP, GI_POTION_BLUE, true, &Logic::BuyBPotion, RHT_BOTTLE_WITH_BLUE_POTION,ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 100);
|
itemTable[RG_BUY_BLUE_POTION] = Item(RG_BUY_BLUE_POTION, Text{ "Buy Blue Potion", "Acheter: Potion Bleue", "Blaues Elixier kaufen" }, ITEMTYPE_SHOP, GI_POTION_BLUE, true, &Logic::BuyMagicPotion, RHT_BOTTLE_WITH_BLUE_POTION,ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x45, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 100);
|
||||||
itemTable[RG_BUY_HYLIAN_SHIELD] = Item(RG_BUY_HYLIAN_SHIELD, Text{ "Buy Hylian Shield", "Acheter: Bouclier Hylien", "Hylianischer Schild kaufen" }, ITEMTYPE_SHOP, GI_SHIELD_HYLIAN, true, &Logic::HylianShield, RHT_HYLIAN_SHIELD, ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 80);
|
itemTable[RG_BUY_HYLIAN_SHIELD] = Item(RG_BUY_HYLIAN_SHIELD, Text{ "Buy Hylian Shield", "Acheter: Bouclier Hylien", "Hylianischer Schild kaufen" }, ITEMTYPE_SHOP, GI_SHIELD_HYLIAN, true, &Logic::HylianShield, RHT_HYLIAN_SHIELD, ITEM_SHIELD_HYLIAN, OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, 0x4D, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 80);
|
||||||
itemTable[RG_BUY_DEKU_SHIELD] = Item(RG_BUY_DEKU_SHIELD, Text{ "Buy Deku Shield", "Acheter: Bouclier Mojo", "Deku-Schild kaufen" }, ITEMTYPE_SHOP, GI_SHIELD_DEKU, true, &Logic::DekuShield, RHT_DEKU_SHIELD, ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 40);
|
itemTable[RG_BUY_DEKU_SHIELD] = Item(RG_BUY_DEKU_SHIELD, Text{ "Buy Deku Shield", "Acheter: Bouclier Mojo", "Deku-Schild kaufen" }, ITEMTYPE_SHOP, GI_SHIELD_DEKU, true, &Logic::DekuShield, RHT_DEKU_SHIELD, ITEM_SHIELD_DEKU, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, 0x4C, 0xA0, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE, false, 40);
|
||||||
itemTable[RG_BUY_GORON_TUNIC] = Item(RG_BUY_GORON_TUNIC, Text{ "Buy Goron Tunic", "Acheter: Tunique Goron", "Goronen-Tunika kaufen" }, ITEMTYPE_SHOP, GI_TUNIC_GORON, true, &Logic::GoronTunic, RHT_GORON_TUNIC, ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, false, 200);
|
itemTable[RG_BUY_GORON_TUNIC] = Item(RG_BUY_GORON_TUNIC, Text{ "Buy Goron Tunic", "Acheter: Tunique Goron", "Goronen-Tunika kaufen" }, ITEMTYPE_SHOP, GI_TUNIC_GORON, true, &Logic::GoronTunic, RHT_GORON_TUNIC, ITEM_TUNIC_GORON, OBJECT_GI_CLOTHES, GID_TUNIC_GORON, 0x50, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, false, 200);
|
||||||
itemTable[RG_BUY_ZORA_TUNIC] = Item(RG_BUY_ZORA_TUNIC, Text{ "Buy Zora Tunic", "Acheter: Tunique Zora", "Zora-Tunika kaufen" }, ITEMTYPE_SHOP, GI_TUNIC_ZORA, true, &Logic::ZoraTunic, RHT_ZORA_TUNIC, ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, false, 300);
|
itemTable[RG_BUY_ZORA_TUNIC] = Item(RG_BUY_ZORA_TUNIC, Text{ "Buy Zora Tunic", "Acheter: Tunique Zora", "Zora-Tunika kaufen" }, ITEMTYPE_SHOP, GI_TUNIC_ZORA, true, &Logic::ZoraTunic, RHT_ZORA_TUNIC, ITEM_TUNIC_ZORA, OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, 0x51, 0xA0, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_NONE, false, 300);
|
||||||
itemTable[RG_BUY_HEART] = Item(RG_BUY_HEART, Text{ "Buy Heart", "Acheter: Coeur de Vie", "Herz kaufen" }, ITEMTYPE_SHOP, GI_HEART, false, &Logic::noVariable, RHT_RECOVERY_HEART, ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 10);
|
itemTable[RG_BUY_HEART] = Item(RG_BUY_HEART, Text{ "Buy Heart", "Acheter: Coeur de Vie", "Herz kaufen" }, ITEMTYPE_SHOP, GI_HEART, false, &Logic::noVariable, RHT_RECOVERY_HEART, ITEM_HEART, OBJECT_GI_HEART, GID_HEART, 0x55, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 10);
|
||||||
itemTable[RG_BUY_BOMBCHU_10] = Item(RG_BUY_BOMBCHU_10, Text{ "Buy Bombchu (10)", "Acheter: Missiles (10)", "Bomchu kaufen (10)" }, ITEMTYPE_SHOP, GI_BOMBCHUS_10, true, &Logic::BuyBombchus10, RHT_BOMBCHU_10, ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 99);
|
itemTable[RG_BUY_BOMBCHU_10] = Item(RG_BUY_BOMBCHU_10, Text{ "Buy Bombchu (10)", "Acheter: Missiles (10)", "Bomchu kaufen (10)" }, ITEMTYPE_SHOP, GI_BOMBCHUS_10, true, &Logic::BuyBombchus, RHT_BOMBCHU_10, ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 99);
|
||||||
itemTable[RG_BUY_BOMBCHU_20] = Item(RG_BUY_BOMBCHU_20, Text{ "Buy Bombchu (20)", "Acheter: Missiles (20)", "Bomchu kaufen (20)" }, ITEMTYPE_SHOP, GI_BOMBCHUS_20, true, &Logic::BuyBombchus20, RHT_BOMBCHU_20, ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 180);
|
itemTable[RG_BUY_BOMBCHU_20] = Item(RG_BUY_BOMBCHU_20, Text{ "Buy Bombchu (20)", "Acheter: Missiles (20)", "Bomchu kaufen (20)" }, ITEMTYPE_SHOP, GI_BOMBCHUS_20, true, &Logic::BuyBombchus, RHT_BOMBCHU_20, ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 180);
|
||||||
itemTable[RG_BUY_DEKU_SEEDS_30] = Item(RG_BUY_DEKU_SEEDS_30, Text{ "Buy Deku Seeds (30)", "Acheter: Graines Mojo (30)", "Deku-Samen kaufen (30)" }, ITEMTYPE_SHOP, GI_SEEDS_30, true, &Logic::BuySeed, RHT_DEKU_SEEDS_30, ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
itemTable[RG_BUY_DEKU_SEEDS_30] = Item(RG_BUY_DEKU_SEEDS_30, Text{ "Buy Deku Seeds (30)", "Acheter: Graines Mojo (30)", "Deku-Samen kaufen (30)" }, ITEMTYPE_SHOP, GI_SEEDS_30, true, &Logic::BuySeed, RHT_DEKU_SEEDS_30, ITEM_SEEDS_30, OBJECT_GI_SEED, GID_SEEDS, 0xDC, 0x50, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, false, 30);
|
||||||
itemTable[RG_SOLD_OUT] = Item(RG_SOLD_OUT, Text{ "Sold Out", "Rupture de stock", "Ausverkauft" }, ITEMTYPE_SHOP, RG_SOLD_OUT, false, &Logic::noVariable, RHT_NONE, false, 0);
|
itemTable[RG_SOLD_OUT] = Item(RG_SOLD_OUT, Text{ "Sold Out", "Rupture de stock", "Ausverkauft" }, ITEMTYPE_SHOP, RG_SOLD_OUT, false, &Logic::noVariable, RHT_NONE, false, 0);
|
||||||
itemTable[RG_BUY_BLUE_FIRE] = Item(RG_BUY_BLUE_FIRE, Text{ "Buy Blue Fire", "Acheter: Flamme Bleue", "Blaues Feuer kaufen" }, ITEMTYPE_SHOP, GI_BLUE_FIRE, true, &Logic::BlueFireAccess, RHT_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 300);
|
itemTable[RG_BUY_BLUE_FIRE] = Item(RG_BUY_BLUE_FIRE, Text{ "Buy Blue Fire", "Acheter: Flamme Bleue", "Blaues Feuer kaufen" }, ITEMTYPE_SHOP, GI_BLUE_FIRE, true, &Logic::BlueFireAccess, RHT_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE, OBJECT_GI_FIRE, GID_BLUE_FIRE, 0x5D, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 300);
|
||||||
|
@ -59,6 +59,14 @@ RandomizerRegion ItemLocation::GetParentRegionKey() const {
|
|||||||
return parentRegion;
|
return parentRegion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemLocation::SetArea(RandomizerArea newArea) {
|
||||||
|
area = newArea;
|
||||||
|
}
|
||||||
|
|
||||||
|
RandomizerArea ItemLocation::GetArea() const {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
void ItemLocation::PlaceVanillaItem() {
|
void ItemLocation::PlaceVanillaItem() {
|
||||||
placedItem = StaticData::GetLocation(rc)->GetVanillaItem();
|
placedItem = StaticData::GetLocation(rc)->GetVanillaItem();
|
||||||
}
|
}
|
||||||
@ -106,12 +114,12 @@ void ItemLocation::SetAsHinted() {
|
|||||||
hintedAt = true;
|
hintedAt = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
RandomizerHintKey ItemLocation::GetHintKey() const {
|
const std::vector<RandomizerHintKey>& ItemLocation::GetHintedBy() const {
|
||||||
return hintedBy;
|
return hintedBy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemLocation::SetHintKey(const RandomizerHintKey hintKey) {
|
void ItemLocation::AddHintedBy(const RandomizerHintKey hintKey) {
|
||||||
hintedBy = hintKey;
|
hintedBy.push_back(hintKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ItemLocation::IsHidden() const {
|
bool ItemLocation::IsHidden() const {
|
||||||
@ -161,15 +169,34 @@ void ItemLocation::SetVisible(const bool visibleInImGui_) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ItemLocation::IsWothCandidate() const {
|
||||||
|
return wothCandidate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemLocation::SetWothCandidate() {
|
||||||
|
wothCandidate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ItemLocation::IsBarrenCandidate() const {
|
||||||
|
return barrenCandidate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemLocation::SetBarrenCandidate() {
|
||||||
|
barrenCandidate = true;
|
||||||
|
}
|
||||||
|
|
||||||
void ItemLocation::ResetVariables() {
|
void ItemLocation::ResetVariables() {
|
||||||
addedToPool = false;
|
addedToPool = false;
|
||||||
placedItem = RG_NONE;
|
placedItem = RG_NONE;
|
||||||
delayedItem = RG_NONE;
|
delayedItem = RG_NONE;
|
||||||
isHintable = false;
|
isHintable = false;
|
||||||
hintedAt = false;
|
hintedAt = false;
|
||||||
hintedBy = RH_NONE;
|
hintedBy = {};
|
||||||
price = 0;
|
price = 0;
|
||||||
hasCustomPrice = false;
|
hasCustomPrice = false;
|
||||||
hidden = false;
|
hidden = false;
|
||||||
|
wothCandidate = false;
|
||||||
|
barrenCandidate = false;
|
||||||
|
area = RA_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -22,6 +22,8 @@ class ItemLocation {
|
|||||||
void SetDelayedItem(RandomizerGet item);
|
void SetDelayedItem(RandomizerGet item);
|
||||||
RandomizerRegion GetParentRegionKey() const;
|
RandomizerRegion GetParentRegionKey() const;
|
||||||
void SetParentRegion (RandomizerRegion region);
|
void SetParentRegion (RandomizerRegion region);
|
||||||
|
RandomizerArea GetArea() const;
|
||||||
|
void SetArea (RandomizerArea region);
|
||||||
void PlaceVanillaItem();
|
void PlaceVanillaItem();
|
||||||
void ApplyPlacedItemEffect() const;
|
void ApplyPlacedItemEffect() const;
|
||||||
void SaveDelayedItem();
|
void SaveDelayedItem();
|
||||||
@ -33,8 +35,8 @@ class ItemLocation {
|
|||||||
void SetAsHintable();
|
void SetAsHintable();
|
||||||
bool IsHintedAt() const;
|
bool IsHintedAt() const;
|
||||||
void SetAsHinted();
|
void SetAsHinted();
|
||||||
RandomizerHintKey GetHintKey() const;
|
const std::vector<RandomizerHintKey>& GetHintedBy() const;
|
||||||
void SetHintKey(RandomizerHintKey hintKey);
|
void AddHintedBy(RandomizerHintKey hintKey);
|
||||||
bool IsHidden() const;
|
bool IsHidden() const;
|
||||||
bool IsExcluded() const;
|
bool IsExcluded() const;
|
||||||
void AddExcludeOption();
|
void AddExcludeOption();
|
||||||
@ -42,11 +44,15 @@ class ItemLocation {
|
|||||||
void SetHidden(bool hidden_);
|
void SetHidden(bool hidden_);
|
||||||
bool IsVisible() const;
|
bool IsVisible() const;
|
||||||
void SetVisible(bool visibleInImGui_);
|
void SetVisible(bool visibleInImGui_);
|
||||||
|
bool IsWothCandidate() const;
|
||||||
|
void SetWothCandidate();
|
||||||
|
bool IsBarrenCandidate() const;
|
||||||
|
void SetBarrenCandidate();
|
||||||
void ResetVariables();
|
void ResetVariables();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RandomizerCheck rc;
|
RandomizerCheck rc;
|
||||||
RandomizerHintKey hintedBy = RH_NONE;
|
std::vector<RandomizerHintKey> hintedBy = {};
|
||||||
bool hintedAt = false;
|
bool hintedAt = false;
|
||||||
bool isHintable = false;
|
bool isHintable = false;
|
||||||
bool addedToPool = false;
|
bool addedToPool = false;
|
||||||
@ -55,8 +61,11 @@ class ItemLocation {
|
|||||||
Option excludedOption = Option::Bool(StaticData::GetLocation(rc)->GetName(), {"Include", "Exclude"});
|
Option excludedOption = Option::Bool(StaticData::GetLocation(rc)->GetName(), {"Include", "Exclude"});
|
||||||
uint16_t price = 0;
|
uint16_t price = 0;
|
||||||
RandomizerRegion parentRegion = RR_NONE;
|
RandomizerRegion parentRegion = RR_NONE;
|
||||||
|
RandomizerArea area = RA_NONE;
|
||||||
bool hasCustomPrice = false;
|
bool hasCustomPrice = false;
|
||||||
bool hidden = false;
|
bool hidden = false;
|
||||||
bool visibleInImGui = false;
|
bool visibleInImGui = false;
|
||||||
|
bool wothCandidate = false;
|
||||||
|
bool barrenCandidate = false;
|
||||||
};
|
};
|
||||||
} // namespace Rando
|
} // namespace Rando
|
@ -562,7 +562,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_LW_TRADE_ODD_POTION] = Location::Base(RC_LW_TRADE_ODD_POTION, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, 0x21, "Trade Odd Potion", "LW Trade Odd Potion", RHT_LW_TRADE_COJIRO, RG_POACHERS_SAW, { Category::cAdultTrade }, SpoilerCollectionCheck::ItemGetInf(57), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
locationTable[RC_LW_TRADE_ODD_POTION] = Location::Base(RC_LW_TRADE_ODD_POTION, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, 0x21, "Trade Odd Potion", "LW Trade Odd Potion", RHT_LW_TRADE_COJIRO, RG_POACHERS_SAW, { Category::cAdultTrade }, SpoilerCollectionCheck::ItemGetInf(57), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
||||||
locationTable[RC_LW_OCARINA_MEMORY_GAME] = Location::Base(RC_LW_OCARINA_MEMORY_GAME, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, 0x21, "Ocarina Memory Game", "LW Ocarina Memory Game", RHT_LW_OCARINA_MEMORY_GAME, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::ItemGetInf(31), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
locationTable[RC_LW_OCARINA_MEMORY_GAME] = Location::Base(RC_LW_OCARINA_MEMORY_GAME, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, 0x21, "Ocarina Memory Game", "LW Ocarina Memory Game", RHT_LW_OCARINA_MEMORY_GAME, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::ItemGetInf(31), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
||||||
locationTable[RC_LW_TARGET_IN_WOODS] = Location::Base(RC_LW_TARGET_IN_WOODS, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, 0x60, "Target in Woods", "LW Target in Woods", RHT_LW_TARGET_IN_WOODS, RG_PROGRESSIVE_SLINGSHOT, {}, SpoilerCollectionCheck::ItemGetInf(21), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
locationTable[RC_LW_TARGET_IN_WOODS] = Location::Base(RC_LW_TARGET_IN_WOODS, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LOST_WOODS, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, 0x60, "Target in Woods", "LW Target in Woods", RHT_LW_TARGET_IN_WOODS, RG_PROGRESSIVE_SLINGSHOT, {}, SpoilerCollectionCheck::ItemGetInf(21), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
||||||
locationTable[RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT,RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x00, 0x30, "Deku Scrub Near Deku Theater Right","LW Deku Scrub Near Deku Theater Right",RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT,RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x5B, 0x01), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
|
locationTable[RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT,RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x00, 0x30, "Deku Scrub Near Deku Theater Right","LW Deku Scrub Near Deku Theater Right",RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT,RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x5B, 0x01), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
|
||||||
locationTable[RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x01, 0x31, "Deku Scrub Near Deku Theater Left", "LW Deku Scrub Near Deku Theater Left", RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RG_BUY_DEKU_STICK_1, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x5B, 0x02), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
|
locationTable[RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x01, 0x31, "Deku Scrub Near Deku Theater Left", "LW Deku Scrub Near Deku Theater Left", RHT_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RG_BUY_DEKU_STICK_1, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x5B, 0x02), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
|
||||||
locationTable[RC_LW_DEKU_SCRUB_NEAR_BRIDGE] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x09, 0x77, "Deku Scrub Near Bridge", "LW Deku Scrub Near Bridge", RHT_LW_DEKU_SCRUB_NEAR_BRIDGE, RG_PROGRESSIVE_STICK_UPGRADE,{ Category::cDekuScrub, Category::cDekuScrubUpgrades }, SpoilerCollectionCheck::Scrub(0x5B, 0x0A), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
locationTable[RC_LW_DEKU_SCRUB_NEAR_BRIDGE] = Location::Base(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_LOST_WOODS, 0x09, 0x77, "Deku Scrub Near Bridge", "LW Deku Scrub Near Bridge", RHT_LW_DEKU_SCRUB_NEAR_BRIDGE, RG_PROGRESSIVE_STICK_UPGRADE,{ Category::cDekuScrub, Category::cDekuScrubUpgrades }, SpoilerCollectionCheck::Scrub(0x5B, 0x0A), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS, true);
|
||||||
locationTable[RC_LW_DEKU_SCRUB_GROTTO_REAR] = Location::GrottoScrub(RC_LW_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xF5), 0x33, "Deku Scrub Grotto Rear", "LW Deku Scrub Grotto Rear", RHT_LW_DEKU_SCRUB_GROTTO_REAR, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x1F, 0x04), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
|
locationTable[RC_LW_DEKU_SCRUB_GROTTO_REAR] = Location::GrottoScrub(RC_LW_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LOST_WOODS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xF5), 0x33, "Deku Scrub Grotto Rear", "LW Deku Scrub Grotto Rear", RHT_LW_DEKU_SCRUB_GROTTO_REAR, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x1F, 0x04), SpoilerCollectionCheckGroup::GROUP_LOST_WOODS);
|
||||||
@ -588,7 +588,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_LH_UNDERWATER_ITEM] = Location::Base(RC_LH_UNDERWATER_ITEM, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, 0x15, "Underwater Item", "LH Underwater Item", RHT_LH_UNDERWATER_ITEM, RG_RUTOS_LETTER, {}, SpoilerCollectionCheck::EventChkInf(0x31), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
locationTable[RC_LH_UNDERWATER_ITEM] = Location::Base(RC_LH_UNDERWATER_ITEM, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, 0x15, "Underwater Item", "LH Underwater Item", RHT_LH_UNDERWATER_ITEM, RG_RUTOS_LETTER, {}, SpoilerCollectionCheck::EventChkInf(0x31), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||||
locationTable[RC_LH_SUN] = Location::Base(RC_LH_SUN, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, 0x58, "Sun", "LH Sun", RHT_LH_SUN, RG_FIRE_ARROWS, {}, SpoilerCollectionCheck::Chest(0x57, 0x1F), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
locationTable[RC_LH_SUN] = Location::Base(RC_LH_SUN, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, 0x58, "Sun", "LH Sun", RHT_LH_SUN, RG_FIRE_ARROWS, {}, SpoilerCollectionCheck::Chest(0x57, 0x1F), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||||
locationTable[RC_LH_FREESTANDING_POH] = Location::Collectable(RC_LH_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 7686, 0x1E, "Freestanding PoH", "LH Freestanding PoH", RHT_LH_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
locationTable[RC_LH_FREESTANDING_POH] = Location::Collectable(RC_LH_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LAKE_HYLIA, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 7686, 0x1E, "Freestanding PoH", "LH Freestanding PoH", RHT_LH_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA, true);
|
||||||
locationTable[RC_LH_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xEF), 0x30, "Deku Scrub Grotto Left", "LH Deku Scrub Grotto Left", RHT_LH_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x19, 0x01), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
|
locationTable[RC_LH_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xEF), 0x30, "Deku Scrub Grotto Left", "LH Deku Scrub Grotto Left", RHT_LH_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x19, 0x01), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
|
||||||
locationTable[RC_LH_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xEF), 0x37, "Deku Scrub Grotto Right", "LH Deku Scrub Grotto Right", RHT_LH_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x19, 0x06), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
|
locationTable[RC_LH_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xEF), 0x37, "Deku Scrub Grotto Right", "LH Deku Scrub Grotto Right", RHT_LH_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x19, 0x06), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
|
||||||
locationTable[RC_LH_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xEF), 0x33, "Deku Scrub Grotto Center", "LH Deku Scrub Grotto Center", RHT_LH_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x19, 0x04), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
|
locationTable[RC_LH_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_LH_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xEF), 0x33, "Deku Scrub Grotto Center", "LH Deku Scrub Grotto Center", RHT_LH_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x19, 0x04), SpoilerCollectionCheckGroup::GROUP_LAKE_HYLIA);
|
||||||
// Gerudo Valley
|
// Gerudo Valley
|
||||||
@ -672,7 +672,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_GC_ROLLING_GORON_AS_ADULT] = Location::Base(RC_GC_ROLLING_GORON_AS_ADULT, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GORON_CITY, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, 0x2C, "Rolling Goron as Adult", "GC Rolling Goron as Adult", RHT_GC_ROLLING_GORON_AS_ADULT, RG_GORON_TUNIC, {}, SpoilerCollectionCheck::InfTable(0x10, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY, true);
|
locationTable[RC_GC_ROLLING_GORON_AS_ADULT] = Location::Base(RC_GC_ROLLING_GORON_AS_ADULT, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GORON_CITY, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, 0x2C, "Rolling Goron as Adult", "GC Rolling Goron as Adult", RHT_GC_ROLLING_GORON_AS_ADULT, RG_GORON_TUNIC, {}, SpoilerCollectionCheck::InfTable(0x10, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY, true);
|
||||||
locationTable[RC_GC_DARUNIAS_JOY] = Location::Base(RC_GC_DARUNIAS_JOY, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GORON_CITY, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, 0x54, "Darunias Joy", "GC Darunias Joy", RHT_GC_DARUNIAS_JOY, RG_PROGRESSIVE_STRENGTH, {}, SpoilerCollectionCheck::Chest(0x62, 0x1E), SpoilerCollectionCheckGroup::GROUP_GORON_CITY, true);
|
locationTable[RC_GC_DARUNIAS_JOY] = Location::Base(RC_GC_DARUNIAS_JOY, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GORON_CITY, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, 0x54, "Darunias Joy", "GC Darunias Joy", RHT_GC_DARUNIAS_JOY, RG_PROGRESSIVE_STRENGTH, {}, SpoilerCollectionCheck::Chest(0x62, 0x1E), SpoilerCollectionCheckGroup::GROUP_GORON_CITY, true);
|
||||||
locationTable[RC_GC_POT_FREESTANDING_POH] = Location::Collectable(RC_GC_POT_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GORON_CITY, ACTOR_EN_ITEM00, SCENE_GORON_CITY, 7942, 0x1F, "Pot Freestanding PoH", "GC Pot Freestanding PoH", RHT_GC_POT_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY, true);
|
locationTable[RC_GC_POT_FREESTANDING_POH] = Location::Collectable(RC_GC_POT_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GORON_CITY, ACTOR_EN_ITEM00, SCENE_GORON_CITY, 7942, 0x1F, "Pot Freestanding PoH", "GC Pot Freestanding PoH", RHT_GC_POT_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_GORON_CITY, true);
|
||||||
locationTable[RC_GC_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xFB), 0x30, "Deku Scrub Grotto Left", "GC Deku Scrub Grotto Left", RHT_GC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x25, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
locationTable[RC_GC_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xFB), 0x30, "Deku Scrub Grotto Left", "GC Deku Scrub Grotto Left", RHT_GC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x25, 0x01), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
||||||
locationTable[RC_GC_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xFB), 0x37, "Deku Scrub Grotto Right", "GC Deku Scrub Grotto Right", RHT_GC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x25, 0x06), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
locationTable[RC_GC_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xFB), 0x37, "Deku Scrub Grotto Right", "GC Deku Scrub Grotto Right", RHT_GC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x25, 0x06), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
||||||
locationTable[RC_GC_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xFB), 0x33, "Deku Scrub Grotto Center", "GC Deku Scrub Grotto Center", RHT_GC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_ARROWS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x25, 0x04), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
locationTable[RC_GC_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_GC_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xFB), 0x33, "Deku Scrub Grotto Center", "GC Deku Scrub Grotto Center", RHT_GC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_ARROWS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x25, 0x04), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
||||||
locationTable[RC_GC_MEDIGORON] = Location::Base(RC_GC_MEDIGORON, RCQUEST_BOTH, RCTYPE_MERCHANT, RCAREA_GORON_CITY, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, 0x51, "Medigoron", "GC Medigoron", RHT_GC_MEDIGORON, RG_GIANTS_KNIFE, { Category::cMerchant }, SpoilerCollectionCheck::Merchant(0x62, 0x87), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
locationTable[RC_GC_MEDIGORON] = Location::Base(RC_GC_MEDIGORON, RCQUEST_BOTH, RCTYPE_MERCHANT, RCAREA_GORON_CITY, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, 0x51, "Medigoron", "GC Medigoron", RHT_GC_MEDIGORON, RG_GIANTS_KNIFE, { Category::cMerchant }, SpoilerCollectionCheck::Merchant(0x62, 0x87), SpoilerCollectionCheckGroup::GROUP_GORON_CITY);
|
||||||
@ -681,7 +681,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_DMC_WALL_FREESTANDING_POH] = Location::Collectable(RC_DMC_WALL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 518, 0x02, "Wall Freestanding PoH", "DMC Wall Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN, true);
|
locationTable[RC_DMC_WALL_FREESTANDING_POH] = Location::Collectable(RC_DMC_WALL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 518, 0x02, "Wall Freestanding PoH", "DMC Wall Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN, true);
|
||||||
locationTable[RC_DMC_VOLCANO_FREESTANDING_POH] = Location::Collectable(RC_DMC_VOLCANO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 2054, 0x08, "Volcano Freestanding PoH", "DMC Volcano Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN, true);
|
locationTable[RC_DMC_VOLCANO_FREESTANDING_POH] = Location::Collectable(RC_DMC_VOLCANO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 2054, 0x08, "Volcano Freestanding PoH", "DMC Volcano Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN, true);
|
||||||
locationTable[RC_DMC_DEKU_SCRUB] = Location::Base(RC_DMC_DEKU_SCRUB, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_DEATH_MOUNTAIN_CRATER, 0x05, 0x37, "Deku Scrub", "DMC Deku Scrub", RHT_DMC_DEKU_SCRUB, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x61, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
locationTable[RC_DMC_DEKU_SCRUB] = Location::Base(RC_DMC_DEKU_SCRUB, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_DEATH_MOUNTAIN_CRATER, 0x05, 0x37, "Deku Scrub", "DMC Deku Scrub", RHT_DMC_DEKU_SCRUB, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x61, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
||||||
locationTable[RC_DMC_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xF9), 0x30, "Deku Scrub Grotto Left", "DMC Deku Scrub Grotto Left", RHT_DMC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x23, 0x01), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
locationTable[RC_DMC_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xF9), 0x30, "Deku Scrub Grotto Left", "DMC Deku Scrub Grotto Left", RHT_DMC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x23, 0x01), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
||||||
locationTable[RC_DMC_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xF9), 0x37, "Deku Scrub Grotto Right", "DMC Deku Scrub Grotto Right", RHT_DMC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x23, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
locationTable[RC_DMC_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xF9), 0x37, "Deku Scrub Grotto Right", "DMC Deku Scrub Grotto Right", RHT_DMC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x23, 0x06), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
||||||
locationTable[RC_DMC_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xF9), 0x33, "Deku Scrub Grotto Center", "DMC Deku Scrub Grotto Center", RHT_DMC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_ARROWS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x23, 0x04), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
locationTable[RC_DMC_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xF9), 0x33, "Deku Scrub Grotto Center", "DMC Deku Scrub Grotto Center", RHT_DMC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_ARROWS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x23, 0x04), SpoilerCollectionCheckGroup::GROUP_DEATH_MOUNTAIN);
|
||||||
// Zoras River
|
// Zoras River
|
||||||
@ -709,7 +709,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
// Lon Lon Ranch
|
// Lon Lon Ranch
|
||||||
locationTable[RC_LLR_TALONS_CHICKENS] = Location::Base(RC_LLR_TALONS_CHICKENS, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LON_LON_RANCH, ACTOR_ID_MAX, SCENE_LON_LON_BUILDINGS, 0x00, 0x14, "Talons Chickens", "LLR Talons Chickens", RHT_LLR_TALONS_CHICKENS, RG_BOTTLE_WITH_MILK, {}, SpoilerCollectionCheck::ItemGetInf(10), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH, true);
|
locationTable[RC_LLR_TALONS_CHICKENS] = Location::Base(RC_LLR_TALONS_CHICKENS, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LON_LON_RANCH, ACTOR_ID_MAX, SCENE_LON_LON_BUILDINGS, 0x00, 0x14, "Talons Chickens", "LLR Talons Chickens", RHT_LLR_TALONS_CHICKENS, RG_BOTTLE_WITH_MILK, {}, SpoilerCollectionCheck::ItemGetInf(10), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH, true);
|
||||||
locationTable[RC_LLR_FREESTANDING_POH] = Location::Collectable(RC_LLR_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LON_LON_RANCH, ACTOR_EN_ITEM00, SCENE_LON_LON_BUILDINGS, 262, 0x01, "Freestanding PoH", "LLR Freestanding PoH", RHT_LLR_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH, true);
|
locationTable[RC_LLR_FREESTANDING_POH] = Location::Collectable(RC_LLR_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_LON_LON_RANCH, ACTOR_EN_ITEM00, SCENE_LON_LON_BUILDINGS, 262, 0x01, "Freestanding PoH", "LLR Freestanding PoH", RHT_LLR_FREESTANDING_POH, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH, true);
|
||||||
locationTable[RC_LLR_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xFC), 0x30, "Deku Scrub Grotto Left", "LLR Deku Scrub Grotto Left", RHT_LLR_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x26, 0x01), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH);
|
locationTable[RC_LLR_DEKU_SCRUB_GROTTO_LEFT] = Location::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xFC), 0x30, "Deku Scrub Grotto Left", "LLR Deku Scrub Grotto Left", RHT_LLR_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x26, 0x01), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH);
|
||||||
locationTable[RC_LLR_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xFC), 0x37, "Deku Scrub Grotto Right", "LLR Deku Scrub Grotto Right", RHT_LLR_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x26, 0x06), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH);
|
locationTable[RC_LLR_DEKU_SCRUB_GROTTO_RIGHT] = Location::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xFC), 0x37, "Deku Scrub Grotto Right", "LLR Deku Scrub Grotto Right", RHT_LLR_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x26, 0x06), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH);
|
||||||
locationTable[RC_LLR_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xFC), 0x33, "Deku Scrub Grotto Center", "LLR Deku Scrub Grotto Center", RHT_LLR_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x26, 0x04), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH);
|
locationTable[RC_LLR_DEKU_SCRUB_GROTTO_CENTER] = Location::GrottoScrub(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xFC), 0x33, "Deku Scrub Grotto Center", "LLR Deku Scrub Grotto Center", RHT_LLR_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x26, 0x04), SpoilerCollectionCheckGroup::GROUP_LON_LON_RANCH);
|
||||||
|
|
||||||
@ -741,7 +741,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST] = Location::Chest(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_DODONGOS_CAVERN, ACTOR_EN_BOX, SCENE_DODONGOS_CAVERN, 22982, 0x06, "Bomb Flower Platform Chest", "Dodongos Cavern Bomb Flower Platform Chest", RHT_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, RG_RED_RUPEE, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
locationTable[RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST] = Location::Chest(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_DODONGOS_CAVERN, ACTOR_EN_BOX, SCENE_DODONGOS_CAVERN, 22982, 0x06, "Bomb Flower Platform Chest", "Dodongos Cavern Bomb Flower Platform Chest", RHT_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, RG_RED_RUPEE, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
||||||
locationTable[RC_DODONGOS_CAVERN_BOMB_BAG_CHEST] = Location::Chest(RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_DODONGOS_CAVERN, ACTOR_EN_BOX, SCENE_DODONGOS_CAVERN, 1604, 0x04, "Bomb Bag Chest", "Dodongos Cavern Bomb Bag Chest", RHT_DODONGOS_CAVERN_BOMB_BAG_CHEST, RG_PROGRESSIVE_BOMB_BAG, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN, true);
|
locationTable[RC_DODONGOS_CAVERN_BOMB_BAG_CHEST] = Location::Chest(RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_DODONGOS_CAVERN, ACTOR_EN_BOX, SCENE_DODONGOS_CAVERN, 1604, 0x04, "Bomb Bag Chest", "Dodongos Cavern Bomb Bag Chest", RHT_DODONGOS_CAVERN_BOMB_BAG_CHEST, RG_PROGRESSIVE_BOMB_BAG, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN, true);
|
||||||
locationTable[RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST] = Location::Chest(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_DODONGOS_CAVERN, ACTOR_EN_BOX, SCENE_DODONGOS_CAVERN, 21802, 0x0A, "End Of Bridge Chest", "Dodongos Cavern End Of Bridge Chest", RHT_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, RG_DEKU_SHIELD, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
locationTable[RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST] = Location::Chest(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_DODONGOS_CAVERN, ACTOR_EN_BOX, SCENE_DODONGOS_CAVERN, 21802, 0x0A, "End Of Bridge Chest", "Dodongos Cavern End Of Bridge Chest", RHT_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, RG_DEKU_SHIELD, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
||||||
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x00, 0x30, "Deku Scrub Near Bomb Bag Left", "Dodongos Cavern Deku Scrub Near Bomb Bag Left", RHT_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x00, 0x30, "Deku Scrub Near Bomb Bag Left", "Dodongos Cavern Deku Scrub Near Bomb Bag Left", RHT_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
||||||
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x01, 0x31, "Deku Scrub Side Room Near Dodongos", "Dodongos Cavern Deku Scrub Side Room Near Dodongos", RHT_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RG_BUY_DEKU_STICK_1, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x01, 0x31, "Deku Scrub Side Room Near Dodongos", "Dodongos Cavern Deku Scrub Side Room Near Dodongos", RHT_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RG_BUY_DEKU_STICK_1, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x02), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
||||||
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x03, 0x33, "Deku Scrub Near Bomb Bag Right", "Dodongos Cavern Deku Scrub Near Bomb Bag Right", RHT_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x03, 0x33, "Deku Scrub Near Bomb Bag Right", "Dodongos Cavern Deku Scrub Near Bomb Bag Right", RHT_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RG_BUY_DEKU_SEEDS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
||||||
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x04, 0x34, "Deku Scrub Lobby", "Dodongos Cavern Deku Scrub Lobby", RHT_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RG_BUY_DEKU_SHIELD, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
locationTable[RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY] = Location::Base(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_DODONGOS_CAVERN, ACTOR_EN_DNS, SCENE_DODONGOS_CAVERN, 0x04, 0x34, "Deku Scrub Lobby", "Dodongos Cavern Deku Scrub Lobby", RHT_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RG_BUY_DEKU_SHIELD, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x01, 0x05), SpoilerCollectionCheckGroup::GROUP_DUNGEON_DODONGOS_CAVERN);
|
||||||
@ -762,7 +762,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_JABU_JABUS_BELLY_MAP_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP_COMPASS, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, 6178, 0x02, "Map Chest", "Jabu Jabus Belly Map Chest", RHT_JABU_JABUS_BELLY_MAP_CHEST, RG_JABU_JABUS_BELLY_MAP, { Category::cVanillaMap }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
locationTable[RC_JABU_JABUS_BELLY_MAP_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP_COMPASS, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, 6178, 0x02, "Map Chest", "Jabu Jabus Belly Map Chest", RHT_JABU_JABUS_BELLY_MAP_CHEST, RG_JABU_JABUS_BELLY_MAP, { Category::cVanillaMap }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
||||||
locationTable[RC_JABU_JABUS_BELLY_COMPASS_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_COMPASS_CHEST, RCQUEST_VANILLA, RCTYPE_MAP_COMPASS, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, -18428, 0x04, "Compass Chest", "Jabu Jabus Belly Compass Chest", RHT_JABU_JABUS_BELLY_COMPASS_CHEST, RG_JABU_JABUS_BELLY_COMPASS, { Category::cVanillaCompass }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
locationTable[RC_JABU_JABUS_BELLY_COMPASS_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_COMPASS_CHEST, RCQUEST_VANILLA, RCTYPE_MAP_COMPASS, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, -18428, 0x04, "Compass Chest", "Jabu Jabus Belly Compass Chest", RHT_JABU_JABUS_BELLY_COMPASS_CHEST, RG_JABU_JABUS_BELLY_COMPASS, { Category::cVanillaCompass }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
||||||
locationTable[RC_JABU_JABUS_BELLY_BOOMERANG_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, 4289, 0x01, "Boomerang Chest", "Jabu Jabus Belly Boomerang Chest", RHT_JABU_JABUS_BELLY_BOOMERANG_CHEST, RG_BOOMERANG, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
locationTable[RC_JABU_JABUS_BELLY_BOOMERANG_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, 4289, 0x01, "Boomerang Chest", "Jabu Jabus Belly Boomerang Chest", RHT_JABU_JABUS_BELLY_BOOMERANG_CHEST, RG_BOOMERANG, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
||||||
locationTable[RC_JABU_JABUS_BELLY_DEKU_SCRUB] = Location::Base(RC_JABU_JABUS_BELLY_DEKU_SCRUB, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_DNS, SCENE_JABU_JABU, 0x00, 0x30, "Deku Scrub", "Jabu Jabus Belly Deku Scrub", RHT_JABU_JABUS_BELLY_DEKU_SCRUB, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x02, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY);
|
locationTable[RC_JABU_JABUS_BELLY_DEKU_SCRUB] = Location::Base(RC_JABU_JABUS_BELLY_DEKU_SCRUB, RCQUEST_VANILLA, RCTYPE_SCRUB, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_DNS, SCENE_JABU_JABU, 0x00, 0x30, "Deku Scrub", "Jabu Jabus Belly Deku Scrub", RHT_JABU_JABUS_BELLY_DEKU_SCRUB, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x02, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY);
|
||||||
// Jabu-Jabu's Belly MQ
|
// Jabu-Jabu's Belly MQ
|
||||||
locationTable[RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, -32699, 0x05, "MQ First Room Side Chest", "Jabu Jabus Belly MQ First Room Side Chest", RHT_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, RG_DEKU_NUTS_5, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY);
|
locationTable[RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, -32699, 0x05, "MQ First Room Side Chest", "Jabu Jabus Belly MQ First Room Side Chest", RHT_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, RG_DEKU_NUTS_5, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY);
|
||||||
locationTable[RC_JABU_JABUS_BELLY_MQ_MAP_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, RCQUEST_MQ, RCTYPE_MAP_COMPASS, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, -18397, 0x03, "MQ Map Chest", "Jabu Jabus Belly MQ Map Chest", RHT_JABU_JABUS_BELLY_MQ_MAP_CHEST, RG_JABU_JABUS_BELLY_MAP, { Category::cVanillaMap }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
locationTable[RC_JABU_JABUS_BELLY_MQ_MAP_CHEST] = Location::Chest(RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, RCQUEST_MQ, RCTYPE_MAP_COMPASS, RCAREA_JABU_JABUS_BELLY, ACTOR_EN_BOX, SCENE_JABU_JABU, -18397, 0x03, "MQ Map Chest", "Jabu Jabus Belly MQ Map Chest", RHT_JABU_JABUS_BELLY_MQ_MAP_CHEST, RG_JABU_JABUS_BELLY_MAP, { Category::cVanillaMap }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_JABUJABUS_BELLY, true);
|
||||||
@ -1055,7 +1055,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST] = Location::Chest(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, RCAREA_GANONS_CASTLE, ACTOR_EN_BOX, SCENE_INSIDE_GANONS_CASTLE, 20586, 0x0A, "MQ Spirit Trial First Chest", "Ganon's Castle MQ Spirit Trial First Chest", RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, RG_BOMBCHU_10, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST] = Location::Chest(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, RCAREA_GANONS_CASTLE, ACTOR_EN_BOX, SCENE_INSIDE_GANONS_CASTLE, 20586, 0x0A, "MQ Spirit Trial First Chest", "Ganon's Castle MQ Spirit Trial First Chest", RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, RG_BOMBCHU_10, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST] = Location::Chest(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, RCAREA_GANONS_CASTLE, ACTOR_EN_BOX, SCENE_INSIDE_GANONS_CASTLE, 26964, 0x14, "MQ Spirit Trial Invisible Chest", "Ganon's Castle MQ Spirit Trial Invisible Chest", RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, RG_ARROWS_10, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST] = Location::Chest(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, RCAREA_GANONS_CASTLE, ACTOR_EN_BOX, SCENE_INSIDE_GANONS_CASTLE, 26964, 0x14, "MQ Spirit Trial Invisible Chest", "Ganon's Castle MQ Spirit Trial Invisible Chest", RHT_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, RG_ARROWS_10, {}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY] = Location::Collectable(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 273, 0x01, "MQ Forest Trial Freestanding Key", "Ganon's Castle MQ Forest Trial Freestanding Key", RHT_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, RG_GANONS_CASTLE_SMALL_KEY, { Category::cVanillaSmallKey }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE, true);
|
locationTable[RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY] = Location::Collectable(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, RCQUEST_MQ, RCTYPE_SMALL_KEY, RCAREA_GANONS_CASTLE, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, 273, 0x01, "MQ Forest Trial Freestanding Key", "Ganon's Castle MQ Forest Trial Freestanding Key", RHT_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, RG_GANONS_CASTLE_SMALL_KEY, { Category::cVanillaSmallKey }, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE, true);
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x00, 0x30, "MQ Deku Scrub Right", "Ganon's Castle MQ Deku Scrub Right", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RG_BUY_DEKU_NUT_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x00, 0x30, "MQ Deku Scrub Right", "Ganon's Castle MQ Deku Scrub Right", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RG_BUY_DEKU_NUTS_5, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x01), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x05, 0x37, "MQ Deku Scrub Center-Left", "Ganon's Castle MQ Deku Scrub Center-Left", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x06), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x05, 0x37, "MQ Deku Scrub Center-Left", "Ganon's Castle MQ Deku Scrub Center-Left", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RG_BUY_BOMBS_535, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x06), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x03, 0x33, "MQ Deku Scrub Center", "Ganon's Castle MQ Deku Scrub Center", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RG_BUY_ARROWS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x03, 0x33, "MQ Deku Scrub Center", "Ganon's Castle MQ Deku Scrub Center", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RG_BUY_ARROWS_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x04), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x07, 0x39, "MQ Deku Scrub Center-Right", "Ganon's Castle MQ Deku Scrub Center-Right", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RG_BUY_RED_POTION_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
locationTable[RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT] = Location::Base(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RCQUEST_MQ, RCTYPE_SCRUB, RCAREA_GANONS_CASTLE, ACTOR_EN_DNS, SCENE_INSIDE_GANONS_CASTLE, 0x07, 0x39, "MQ Deku Scrub Center-Right", "Ganon's Castle MQ Deku Scrub Center-Right", RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RG_BUY_RED_POTION_30, { Category::cDekuScrub }, SpoilerCollectionCheck::Scrub(0x0D, 0x08), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GANONS_CASTLE);
|
||||||
@ -1300,8 +1300,8 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
// Randomizer Check Randomizer Check Quest Type Area Actor ID Scene ID Params Flags Short Name Spoiler Name Hint Text Key Vanilla Item Categories Spoiler Collection Check Spoiler Collection Check Group
|
// Randomizer Check Randomizer Check Quest Type Area Actor ID Scene ID Params Flags Short Name Spoiler Name Hint Text Key Vanilla Item Categories Spoiler Collection Check Spoiler Collection Check Group
|
||||||
// Kokiri Forest
|
// Kokiri Forest
|
||||||
locationTable[RC_KF_SHOP_ITEM_1] = Location::Base(RC_KF_SHOP_ITEM_1, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x00, 0x00, "Shop Item 1", "KF Shop Item 1", RHT_KF_SHOP_ITEM_1, RG_BUY_DEKU_SHIELD, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 0), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
locationTable[RC_KF_SHOP_ITEM_1] = Location::Base(RC_KF_SHOP_ITEM_1, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x00, 0x00, "Shop Item 1", "KF Shop Item 1", RHT_KF_SHOP_ITEM_1, RG_BUY_DEKU_SHIELD, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 0), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
||||||
locationTable[RC_KF_SHOP_ITEM_2] = Location::Base(RC_KF_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x01, 0x01, "Shop Item 2", "KF Shop Item 2", RHT_KF_SHOP_ITEM_2, RG_BUY_DEKU_NUT_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 1), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
locationTable[RC_KF_SHOP_ITEM_2] = Location::Base(RC_KF_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x01, 0x01, "Shop Item 2", "KF Shop Item 2", RHT_KF_SHOP_ITEM_2, RG_BUY_DEKU_NUTS_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 1), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
||||||
locationTable[RC_KF_SHOP_ITEM_3] = Location::Base(RC_KF_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x02, 0x02, "Shop Item 3", "KF Shop Item 3", RHT_KF_SHOP_ITEM_3, RG_BUY_DEKU_NUT_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 2), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
locationTable[RC_KF_SHOP_ITEM_3] = Location::Base(RC_KF_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x02, 0x02, "Shop Item 3", "KF Shop Item 3", RHT_KF_SHOP_ITEM_3, RG_BUY_DEKU_NUTS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 2), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
||||||
locationTable[RC_KF_SHOP_ITEM_4] = Location::Base(RC_KF_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x03, 0x03, "Shop Item 4", "KF Shop Item 4", RHT_KF_SHOP_ITEM_4, RG_BUY_DEKU_STICK_1, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 3), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
locationTable[RC_KF_SHOP_ITEM_4] = Location::Base(RC_KF_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x03, 0x03, "Shop Item 4", "KF Shop Item 4", RHT_KF_SHOP_ITEM_4, RG_BUY_DEKU_STICK_1, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 3), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
||||||
locationTable[RC_KF_SHOP_ITEM_5] = Location::Base(RC_KF_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x04, 0x04, "Shop Item 5", "KF Shop Item 5", RHT_KF_SHOP_ITEM_5, RG_BUY_DEKU_SEEDS_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 4), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
locationTable[RC_KF_SHOP_ITEM_5] = Location::Base(RC_KF_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x04, 0x04, "Shop Item 5", "KF Shop Item 5", RHT_KF_SHOP_ITEM_5, RG_BUY_DEKU_SEEDS_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 4), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
||||||
locationTable[RC_KF_SHOP_ITEM_6] = Location::Base(RC_KF_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x05, 0x05, "Shop Item 6", "KF Shop Item 6", RHT_KF_SHOP_ITEM_6, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 5), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
locationTable[RC_KF_SHOP_ITEM_6] = Location::Base(RC_KF_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KOKIRI_FOREST, ACTOR_EN_GIRLA, SCENE_KOKIRI_SHOP, 0x05, 0x05, "Shop Item 6", "KF Shop Item 6", RHT_KF_SHOP_ITEM_6, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2D, 5), SpoilerCollectionCheckGroup::GROUP_KOKIRI_FOREST);
|
||||||
@ -1313,13 +1313,13 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_2] = Location::Base(RC_KAK_POTION_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x01, 0x31, "Potion Shop Item 2", "Kak Potion Shop Item 2", RHT_KAK_POTION_SHOP_ITEM_2, RG_BUY_BLUE_FIRE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_2] = Location::Base(RC_KAK_POTION_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x01, 0x31, "Potion Shop Item 2", "Kak Potion Shop Item 2", RHT_KAK_POTION_SHOP_ITEM_2, RG_BUY_BLUE_FIRE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_3] = Location::Base(RC_KAK_POTION_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x02, 0x32, "Potion Shop Item 3", "Kak Potion Shop Item 3", RHT_KAK_POTION_SHOP_ITEM_3, RG_BUY_RED_POTION_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_3] = Location::Base(RC_KAK_POTION_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x02, 0x32, "Potion Shop Item 3", "Kak Potion Shop Item 3", RHT_KAK_POTION_SHOP_ITEM_3, RG_BUY_RED_POTION_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_4] = Location::Base(RC_KAK_POTION_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x03, 0x33, "Potion Shop Item 4", "Kak Potion Shop Item 4", RHT_KAK_POTION_SHOP_ITEM_4, RG_BUY_FAIRYS_SPIRIT, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_4] = Location::Base(RC_KAK_POTION_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x03, 0x33, "Potion Shop Item 4", "Kak Potion Shop Item 4", RHT_KAK_POTION_SHOP_ITEM_4, RG_BUY_FAIRYS_SPIRIT, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_5] = Location::Base(RC_KAK_POTION_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x04, 0x34, "Potion Shop Item 5", "Kak Potion Shop Item 5", RHT_KAK_POTION_SHOP_ITEM_5, RG_BUY_DEKU_NUT_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_5] = Location::Base(RC_KAK_POTION_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x04, 0x34, "Potion Shop Item 5", "Kak Potion Shop Item 5", RHT_KAK_POTION_SHOP_ITEM_5, RG_BUY_DEKU_NUTS_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_6] = Location::Base(RC_KAK_POTION_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x05, 0x35, "Potion Shop Item 6", "Kak Potion Shop Item 6", RHT_KAK_POTION_SHOP_ITEM_6, RG_BUY_BOTTLE_BUG, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_6] = Location::Base(RC_KAK_POTION_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x05, 0x35, "Potion Shop Item 6", "Kak Potion Shop Item 6", RHT_KAK_POTION_SHOP_ITEM_6, RG_BUY_BOTTLE_BUG, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_7] = Location::Base(RC_KAK_POTION_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x06, 0x36, "Potion Shop Item 7", "Kak Potion Shop Item 7", RHT_KAK_POTION_SHOP_ITEM_7, RG_BUY_POE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_7] = Location::Base(RC_KAK_POTION_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x06, 0x36, "Potion Shop Item 7", "Kak Potion Shop Item 7", RHT_KAK_POTION_SHOP_ITEM_7, RG_BUY_POE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 6), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_POTION_SHOP_ITEM_8] = Location::Base(RC_KAK_POTION_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x07, 0x37, "Potion Shop Item 8", "Kak Potion Shop Item 8", RHT_KAK_POTION_SHOP_ITEM_8, RG_BUY_FISH, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_POTION_SHOP_ITEM_8] = Location::Base(RC_KAK_POTION_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_KAKARIKO, 0x07, 0x37, "Potion Shop Item 8", "Kak Potion Shop Item 8", RHT_KAK_POTION_SHOP_ITEM_8, RG_BUY_FISH, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x30, 7), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_BAZAAR_ITEM_1] = Location::Base(RC_KAK_BAZAAR_ITEM_1, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x00, 0x38, "Bazaar Item 1", "Kak Bazaar Item 1", RHT_KAK_BAZAAR_ITEM_1, RG_BUY_HYLIAN_SHIELD, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 0), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_BAZAAR_ITEM_1] = Location::Base(RC_KAK_BAZAAR_ITEM_1, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x00, 0x38, "Bazaar Item 1", "Kak Bazaar Item 1", RHT_KAK_BAZAAR_ITEM_1, RG_BUY_HYLIAN_SHIELD, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 0), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_BAZAAR_ITEM_2] = Location::Base(RC_KAK_BAZAAR_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x01, 0x39, "Bazaar Item 2", "Kak Bazaar Item 2", RHT_KAK_BAZAAR_ITEM_2, RG_BUY_BOMBS_535, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_BAZAAR_ITEM_2] = Location::Base(RC_KAK_BAZAAR_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x01, 0x39, "Bazaar Item 2", "Kak Bazaar Item 2", RHT_KAK_BAZAAR_ITEM_2, RG_BUY_BOMBS_535, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 1), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_BAZAAR_ITEM_3] = Location::Base(RC_KAK_BAZAAR_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x02, 0x3A, "Bazaar Item 3", "Kak Bazaar Item 3", RHT_KAK_BAZAAR_ITEM_3, RG_BUY_DEKU_NUT_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_BAZAAR_ITEM_3] = Location::Base(RC_KAK_BAZAAR_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x02, 0x3A, "Bazaar Item 3", "Kak Bazaar Item 3", RHT_KAK_BAZAAR_ITEM_3, RG_BUY_DEKU_NUTS_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 2), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_BAZAAR_ITEM_4] = Location::Base(RC_KAK_BAZAAR_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x03, 0x3B, "Bazaar Item 4", "Kak Bazaar Item 4", RHT_KAK_BAZAAR_ITEM_4, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_BAZAAR_ITEM_4] = Location::Base(RC_KAK_BAZAAR_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x03, 0x3B, "Bazaar Item 4", "Kak Bazaar Item 4", RHT_KAK_BAZAAR_ITEM_4, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 3), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_BAZAAR_ITEM_5] = Location::Base(RC_KAK_BAZAAR_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x04, 0x3C, "Bazaar Item 5", "Kak Bazaar Item 5", RHT_KAK_BAZAAR_ITEM_5, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_BAZAAR_ITEM_5] = Location::Base(RC_KAK_BAZAAR_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x04, 0x3C, "Bazaar Item 5", "Kak Bazaar Item 5", RHT_KAK_BAZAAR_ITEM_5, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 4), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
locationTable[RC_KAK_BAZAAR_ITEM_6] = Location::Base(RC_KAK_BAZAAR_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x05, 0x3D, "Bazaar Item 6", "Kak Bazaar Item 6", RHT_KAK_BAZAAR_ITEM_6, RG_BUY_ARROWS_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
locationTable[RC_KAK_BAZAAR_ITEM_6] = Location::Base(RC_KAK_BAZAAR_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_GIRLA, SCENE_TEST01, 0x05, 0x3D, "Bazaar Item 6", "Kak Bazaar Item 6", RHT_KAK_BAZAAR_ITEM_6, RG_BUY_ARROWS_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x33, 5), SpoilerCollectionCheckGroup::GROUP_KAKARIKO);
|
||||||
@ -1339,13 +1339,13 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_2] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x01, 0x31, "Potion Shop Item 2", "MK Potion Shop Item 2", RHT_MARKET_POTION_SHOP_ITEM_2, RG_BUY_BLUE_FIRE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_2] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x01, 0x31, "Potion Shop Item 2", "MK Potion Shop Item 2", RHT_MARKET_POTION_SHOP_ITEM_2, RG_BUY_BLUE_FIRE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_3] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x02, 0x32, "Potion Shop Item 3", "MK Potion Shop Item 3", RHT_MARKET_POTION_SHOP_ITEM_3, RG_BUY_RED_POTION_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_3] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x02, 0x32, "Potion Shop Item 3", "MK Potion Shop Item 3", RHT_MARKET_POTION_SHOP_ITEM_3, RG_BUY_RED_POTION_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_4] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x03, 0x33, "Potion Shop Item 4", "MK Potion Shop Item 4", RHT_MARKET_POTION_SHOP_ITEM_4, RG_BUY_FAIRYS_SPIRIT, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_4] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x03, 0x33, "Potion Shop Item 4", "MK Potion Shop Item 4", RHT_MARKET_POTION_SHOP_ITEM_4, RG_BUY_FAIRYS_SPIRIT, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_5] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x04, 0x34, "Potion Shop Item 5", "MK Potion Shop Item 5", RHT_MARKET_POTION_SHOP_ITEM_5, RG_BUY_DEKU_NUT_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_5] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x04, 0x34, "Potion Shop Item 5", "MK Potion Shop Item 5", RHT_MARKET_POTION_SHOP_ITEM_5, RG_BUY_DEKU_NUTS_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_6] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x05, 0x35, "Potion Shop Item 6", "MK Potion Shop Item 6", RHT_MARKET_POTION_SHOP_ITEM_6, RG_BUY_BOTTLE_BUG, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_6] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x05, 0x35, "Potion Shop Item 6", "MK Potion Shop Item 6", RHT_MARKET_POTION_SHOP_ITEM_6, RG_BUY_BOTTLE_BUG, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_7] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x06, 0x36, "Potion Shop Item 7", "MK Potion Shop Item 7", RHT_MARKET_POTION_SHOP_ITEM_7, RG_BUY_POE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_7] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x06, 0x36, "Potion Shop Item 7", "MK Potion Shop Item 7", RHT_MARKET_POTION_SHOP_ITEM_7, RG_BUY_POE, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 6), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_POTION_SHOP_ITEM_8] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x07, 0x37, "Potion Shop Item 8", "MK Potion Shop Item 8", RHT_MARKET_POTION_SHOP_ITEM_8, RG_BUY_FISH, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_POTION_SHOP_ITEM_8] = Location::Base(RC_MARKET_POTION_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_POTION_SHOP_MARKET, 0x07, 0x37, "Potion Shop Item 8", "MK Potion Shop Item 8", RHT_MARKET_POTION_SHOP_ITEM_8, RG_BUY_FISH, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x31, 7), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_BAZAAR_ITEM_1] = Location::Base(RC_MARKET_BAZAAR_ITEM_1, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x00, 0x30, "Bazaar Item 1", "MK Bazaar Item 1", RHT_MARKET_BAZAAR_ITEM_1, RG_BUY_HYLIAN_SHIELD, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_BAZAAR_ITEM_1] = Location::Base(RC_MARKET_BAZAAR_ITEM_1, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x00, 0x30, "Bazaar Item 1", "MK Bazaar Item 1", RHT_MARKET_BAZAAR_ITEM_1, RG_BUY_HYLIAN_SHIELD, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 0), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_BAZAAR_ITEM_2] = Location::Base(RC_MARKET_BAZAAR_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x01, 0x31, "Bazaar Item 2", "MK Bazaar Item 2", RHT_MARKET_BAZAAR_ITEM_2, RG_BUY_BOMBS_535, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_BAZAAR_ITEM_2] = Location::Base(RC_MARKET_BAZAAR_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x01, 0x31, "Bazaar Item 2", "MK Bazaar Item 2", RHT_MARKET_BAZAAR_ITEM_2, RG_BUY_BOMBS_535, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 1), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_BAZAAR_ITEM_3] = Location::Base(RC_MARKET_BAZAAR_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x02, 0x32, "Bazaar Item 3", "MK Bazaar Item 3", RHT_MARKET_BAZAAR_ITEM_3, RG_BUY_DEKU_NUT_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_BAZAAR_ITEM_3] = Location::Base(RC_MARKET_BAZAAR_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x02, 0x32, "Bazaar Item 3", "MK Bazaar Item 3", RHT_MARKET_BAZAAR_ITEM_3, RG_BUY_DEKU_NUTS_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 2), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_BAZAAR_ITEM_4] = Location::Base(RC_MARKET_BAZAAR_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x03, 0x33, "Bazaar Item 4", "MK Bazaar Item 4", RHT_MARKET_BAZAAR_ITEM_4, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_BAZAAR_ITEM_4] = Location::Base(RC_MARKET_BAZAAR_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x03, 0x33, "Bazaar Item 4", "MK Bazaar Item 4", RHT_MARKET_BAZAAR_ITEM_4, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 3), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_BAZAAR_ITEM_5] = Location::Base(RC_MARKET_BAZAAR_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x04, 0x34, "Bazaar Item 5", "MK Bazaar Item 5", RHT_MARKET_BAZAAR_ITEM_5, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_BAZAAR_ITEM_5] = Location::Base(RC_MARKET_BAZAAR_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x04, 0x34, "Bazaar Item 5", "MK Bazaar Item 5", RHT_MARKET_BAZAAR_ITEM_5, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 4), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
locationTable[RC_MARKET_BAZAAR_ITEM_6] = Location::Base(RC_MARKET_BAZAAR_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x05, 0x35, "Bazaar Item 6", "MK Bazaar Item 6", RHT_MARKET_BAZAAR_ITEM_6, RG_BUY_ARROWS_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
locationTable[RC_MARKET_BAZAAR_ITEM_6] = Location::Base(RC_MARKET_BAZAAR_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_MARKET, ACTOR_EN_GIRLA, SCENE_BAZAAR, 0x05, 0x35, "Bazaar Item 6", "MK Bazaar Item 6", RHT_MARKET_BAZAAR_ITEM_6, RG_BUY_ARROWS_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2C, 5), SpoilerCollectionCheckGroup::GROUP_HYRULE_CASTLE);
|
||||||
@ -1357,7 +1357,7 @@ void Rando::StaticData::InitLocationTable() {
|
|||||||
locationTable[RC_ZD_SHOP_ITEM_2] = Location::Base(RC_ZD_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x01, 0x31, "Shop Item 2", "ZD Shop Item 2", RHT_ZD_SHOP_ITEM_2, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 1), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_2] = Location::Base(RC_ZD_SHOP_ITEM_2, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x01, 0x31, "Shop Item 2", "ZD Shop Item 2", RHT_ZD_SHOP_ITEM_2, RG_BUY_ARROWS_10, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 1), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
locationTable[RC_ZD_SHOP_ITEM_3] = Location::Base(RC_ZD_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x02, 0x32, "Shop Item 3", "ZD Shop Item 3", RHT_ZD_SHOP_ITEM_3, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 2), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_3] = Location::Base(RC_ZD_SHOP_ITEM_3, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x02, 0x32, "Shop Item 3", "ZD Shop Item 3", RHT_ZD_SHOP_ITEM_3, RG_BUY_HEART, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 2), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
locationTable[RC_ZD_SHOP_ITEM_4] = Location::Base(RC_ZD_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x03, 0x33, "Shop Item 4", "ZD Shop Item 4", RHT_ZD_SHOP_ITEM_4, RG_BUY_ARROWS_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 3), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_4] = Location::Base(RC_ZD_SHOP_ITEM_4, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x03, 0x33, "Shop Item 4", "ZD Shop Item 4", RHT_ZD_SHOP_ITEM_4, RG_BUY_ARROWS_30, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 3), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
locationTable[RC_ZD_SHOP_ITEM_5] = Location::Base(RC_ZD_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x04, 0x34, "Shop Item 5", "ZD Shop Item 5", RHT_ZD_SHOP_ITEM_5, RG_BUY_DEKU_NUT_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 4), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_5] = Location::Base(RC_ZD_SHOP_ITEM_5, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x04, 0x34, "Shop Item 5", "ZD Shop Item 5", RHT_ZD_SHOP_ITEM_5, RG_BUY_DEKU_NUTS_5, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 4), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
locationTable[RC_ZD_SHOP_ITEM_6] = Location::Base(RC_ZD_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x05, 0x35, "Shop Item 6", "ZD Shop Item 6", RHT_ZD_SHOP_ITEM_6, RG_BUY_ARROWS_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 5), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_6] = Location::Base(RC_ZD_SHOP_ITEM_6, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x05, 0x35, "Shop Item 6", "ZD Shop Item 6", RHT_ZD_SHOP_ITEM_6, RG_BUY_ARROWS_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 5), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
locationTable[RC_ZD_SHOP_ITEM_7] = Location::Base(RC_ZD_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x06, 0x36, "Shop Item 7", "ZD Shop Item 7", RHT_ZD_SHOP_ITEM_7, RG_BUY_FISH, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 6), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_7] = Location::Base(RC_ZD_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x06, 0x36, "Shop Item 7", "ZD Shop Item 7", RHT_ZD_SHOP_ITEM_7, RG_BUY_FISH, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 6), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
locationTable[RC_ZD_SHOP_ITEM_8] = Location::Base(RC_ZD_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x07, 0x37, "Shop Item 8", "ZD Shop Item 8", RHT_ZD_SHOP_ITEM_8, RG_BUY_RED_POTION_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 7), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
locationTable[RC_ZD_SHOP_ITEM_8] = Location::Base(RC_ZD_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, RCAREA_ZORAS_DOMAIN, ACTOR_EN_GIRLA, SCENE_ZORA_SHOP, 0x07, 0x37, "Shop Item 8", "ZD Shop Item 8", RHT_ZD_SHOP_ITEM_8, RG_BUY_RED_POTION_50, { Category::cShop }, SpoilerCollectionCheck::ShopItem(0x2F, 7), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
|
||||||
|
@ -361,11 +361,11 @@ void Randomizer::LoadHintMessages() {
|
|||||||
|
|
||||||
// Reference soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
|
// Reference soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
|
||||||
std::unordered_map<RandomizerGet, EnGirlAShopItem> randomizerGetToEnGirlShopItem = {
|
std::unordered_map<RandomizerGet, EnGirlAShopItem> randomizerGetToEnGirlShopItem = {
|
||||||
{ RG_BUY_DEKU_NUT_5, SI_DEKU_NUTS_5 },
|
{ RG_BUY_DEKU_NUTS_5, SI_DEKU_NUTS_5 },
|
||||||
{ RG_BUY_ARROWS_30, SI_ARROWS_30 },
|
{ RG_BUY_ARROWS_30, SI_ARROWS_30 },
|
||||||
{ RG_BUY_ARROWS_50, SI_ARROWS_50 },
|
{ RG_BUY_ARROWS_50, SI_ARROWS_50 },
|
||||||
{ RG_BUY_BOMBS_525, SI_BOMBS_5_R25 },
|
{ RG_BUY_BOMBS_525, SI_BOMBS_5_R25 },
|
||||||
{ RG_BUY_DEKU_NUT_10, SI_DEKU_NUTS_10 },
|
{ RG_BUY_DEKU_NUTS_10, SI_DEKU_NUTS_10 },
|
||||||
{ RG_BUY_DEKU_STICK_1, SI_DEKU_STICK },
|
{ RG_BUY_DEKU_STICK_1, SI_DEKU_STICK },
|
||||||
{ RG_BUY_BOMBS_10, SI_BOMBS_10 },
|
{ RG_BUY_BOMBS_10, SI_BOMBS_10 },
|
||||||
{ RG_BUY_FISH, SI_FISH },
|
{ RG_BUY_FISH, SI_FISH },
|
||||||
@ -825,8 +825,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
|
|||||||
case RG_DEKU_STICK_1:
|
case RG_DEKU_STICK_1:
|
||||||
case RG_TREASURE_GAME_HEART:
|
case RG_TREASURE_GAME_HEART:
|
||||||
case RG_TREASURE_GAME_GREEN_RUPEE:
|
case RG_TREASURE_GAME_GREEN_RUPEE:
|
||||||
case RG_BUY_DEKU_NUT_5:
|
case RG_BUY_DEKU_NUTS_5:
|
||||||
case RG_BUY_DEKU_NUT_10:
|
case RG_BUY_DEKU_NUTS_10:
|
||||||
case RG_BUY_DEKU_STICK_1:
|
case RG_BUY_DEKU_STICK_1:
|
||||||
case RG_BUY_HEART:
|
case RG_BUY_HEART:
|
||||||
case RG_TRIFORCE_PIECE:
|
case RG_TRIFORCE_PIECE:
|
||||||
@ -1118,10 +1118,10 @@ GetItemID Randomizer::GetItemIdFromRandomizerGet(RandomizerGet randoGet, GetItem
|
|||||||
return GI_HEART_CONTAINER;
|
return GI_HEART_CONTAINER;
|
||||||
|
|
||||||
case RG_DEKU_NUTS_5:
|
case RG_DEKU_NUTS_5:
|
||||||
case RG_BUY_DEKU_NUT_5:
|
case RG_BUY_DEKU_NUTS_5:
|
||||||
return GI_NUTS_5;
|
return GI_NUTS_5;
|
||||||
case RG_DEKU_NUTS_10:
|
case RG_DEKU_NUTS_10:
|
||||||
case RG_BUY_DEKU_NUT_10:
|
case RG_BUY_DEKU_NUTS_10:
|
||||||
return GI_NUTS_10;
|
return GI_NUTS_10;
|
||||||
case RG_DEKU_STICK_1:
|
case RG_DEKU_STICK_1:
|
||||||
case RG_BUY_DEKU_STICK_1:
|
case RG_BUY_DEKU_STICK_1:
|
||||||
@ -1219,11 +1219,11 @@ bool Randomizer::IsItemVanilla(RandomizerGet randoGet) {
|
|||||||
case RG_BLUE_POTION_REFILL:
|
case RG_BLUE_POTION_REFILL:
|
||||||
case RG_TREASURE_GAME_HEART:
|
case RG_TREASURE_GAME_HEART:
|
||||||
case RG_TREASURE_GAME_GREEN_RUPEE:
|
case RG_TREASURE_GAME_GREEN_RUPEE:
|
||||||
case RG_BUY_DEKU_NUT_5:
|
case RG_BUY_DEKU_NUTS_5:
|
||||||
case RG_BUY_ARROWS_30:
|
case RG_BUY_ARROWS_30:
|
||||||
case RG_BUY_ARROWS_50:
|
case RG_BUY_ARROWS_50:
|
||||||
case RG_BUY_BOMBS_525:
|
case RG_BUY_BOMBS_525:
|
||||||
case RG_BUY_DEKU_NUT_10:
|
case RG_BUY_DEKU_NUTS_10:
|
||||||
case RG_BUY_DEKU_STICK_1:
|
case RG_BUY_DEKU_STICK_1:
|
||||||
case RG_BUY_BOMBS_10:
|
case RG_BUY_BOMBS_10:
|
||||||
case RG_BUY_FISH:
|
case RG_BUY_FISH:
|
||||||
|
@ -36,17 +36,52 @@ HINT_TYPE_STATIC,
|
|||||||
HINT_TYPE_WOTH, // Way of the Hero
|
HINT_TYPE_WOTH, // Way of the Hero
|
||||||
HINT_TYPE_BARREN,
|
HINT_TYPE_BARREN,
|
||||||
HINT_TYPE_ENTRANCE,
|
HINT_TYPE_ENTRANCE,
|
||||||
HINT_TYPE_ALWAYS,
|
HINT_TYPE_ITEM_AREA,
|
||||||
HINT_TYPE_SOMETIMES,
|
HINT_TYPE_ITEM_LOCATION,
|
||||||
HINT_TYPE_SONG,
|
|
||||||
HINT_TYPE_OVERWORLD,
|
|
||||||
HINT_TYPE_DUNGEON,
|
|
||||||
HINT_TYPE_NAMED_ITEM,
|
|
||||||
HINT_TYPE_RANDOM,
|
|
||||||
HINT_TYPE_JUNK,
|
HINT_TYPE_JUNK,
|
||||||
HINT_TYPE_MAX
|
HINT_TYPE_MAX
|
||||||
} HintType;
|
} HintType;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
RA_NONE,
|
||||||
|
RA_LINKS_POCKET,
|
||||||
|
RA_KOKIRI_FOREST,
|
||||||
|
RA_THE_LOST_WOODS,
|
||||||
|
RA_SACRED_FOREST_MEADOW,
|
||||||
|
RA_HYRULE_FIELD,
|
||||||
|
RA_LAKE_HYLIA,
|
||||||
|
RA_GERUDO_VALLEY,
|
||||||
|
RA_GERUDO_FORTRESS,
|
||||||
|
RA_HAUNTED_WASTELAND,
|
||||||
|
RA_DESERT_COLOSSUS,
|
||||||
|
RA_THE_MARKET,
|
||||||
|
RA_TEMPLE_OF_TIME,
|
||||||
|
RA_HYRULE_CASTLE,
|
||||||
|
RA_OUTSIDE_GANONS_CASTLE,
|
||||||
|
RA_CASTLE_GROUNDS,
|
||||||
|
RA_KAKARIKO_VILLAGE,
|
||||||
|
RA_THE_GRAVEYARD,
|
||||||
|
RA_DEATH_MOUNTAIN_TRAIL,
|
||||||
|
RA_GORON_CITY,
|
||||||
|
RA_DEATH_MOUNTAIN_CRATER,
|
||||||
|
RA_ZORAS_RIVER,
|
||||||
|
RA_ZORAS_DOMAIN,
|
||||||
|
RA_ZORAS_FOUNTAIN,
|
||||||
|
RA_LON_LON_RANCH,
|
||||||
|
RA_DEKU_TREE,
|
||||||
|
RA_DODONGOS_CAVERN,
|
||||||
|
RA_JABU_JABUS_BELLY,
|
||||||
|
RA_FOREST_TEMPLE,
|
||||||
|
RA_FIRE_TEMPLE,
|
||||||
|
RA_WATER_TEMPLE,
|
||||||
|
RA_SPIRIT_TEMPLE,
|
||||||
|
RA_SHADOW_TEMPLE,
|
||||||
|
RA_BOTTOM_OF_THE_WELL,
|
||||||
|
RA_ICE_CAVERN,
|
||||||
|
RA_GERUDO_TRAINING_GROUND,
|
||||||
|
RA_GANONS_CASTLE,
|
||||||
|
RA_MAX
|
||||||
|
} RandomizerArea;
|
||||||
|
|
||||||
// Check types based on main settings
|
// Check types based on main settings
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -1782,11 +1817,11 @@ typedef enum {
|
|||||||
RG_BLUE_POTION_REFILL,
|
RG_BLUE_POTION_REFILL,
|
||||||
RG_TREASURE_GAME_HEART,
|
RG_TREASURE_GAME_HEART,
|
||||||
RG_TREASURE_GAME_GREEN_RUPEE,
|
RG_TREASURE_GAME_GREEN_RUPEE,
|
||||||
RG_BUY_DEKU_NUT_5,
|
RG_BUY_DEKU_NUTS_5,
|
||||||
RG_BUY_ARROWS_30,
|
RG_BUY_ARROWS_30,
|
||||||
RG_BUY_ARROWS_50,
|
RG_BUY_ARROWS_50,
|
||||||
RG_BUY_BOMBS_525,
|
RG_BUY_BOMBS_525,
|
||||||
RG_BUY_DEKU_NUT_10,
|
RG_BUY_DEKU_NUTS_10,
|
||||||
RG_BUY_DEKU_STICK_1,
|
RG_BUY_DEKU_STICK_1,
|
||||||
RG_BUY_BOMBS_10,
|
RG_BUY_BOMBS_10,
|
||||||
RG_BUY_FISH,
|
RG_BUY_FISH,
|
||||||
@ -1883,8 +1918,8 @@ typedef enum {
|
|||||||
RH_KF_STORMS_GROTTO_GOSSIP_STONE,
|
RH_KF_STORMS_GROTTO_GOSSIP_STONE,
|
||||||
RH_KAK_OPEN_GROTTO_GOSSIP_STONE,
|
RH_KAK_OPEN_GROTTO_GOSSIP_STONE,
|
||||||
RH_LH_LAB_GOSSIP_STONE,
|
RH_LH_LAB_GOSSIP_STONE,
|
||||||
RH_LH_GOSSIP_STONE_SOUTHEAST,
|
RH_LH_SOUTHEAST_GOSSIP_STONE,
|
||||||
RH_LH_GOSSIP_STONE_SOUTHWEST,
|
RH_LH_SOUTHWEST_GOSSIP_STONE,
|
||||||
RH_LW_GOSSIP_STONE,
|
RH_LW_GOSSIP_STONE,
|
||||||
RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE,
|
RH_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE,
|
||||||
RH_SFM_MAZE_GOSSIP_STONE_LOWER,
|
RH_SFM_MAZE_GOSSIP_STONE_LOWER,
|
||||||
@ -2969,11 +3004,11 @@ typedef enum {
|
|||||||
RHT_BLUE_POTION_REFILL,
|
RHT_BLUE_POTION_REFILL,
|
||||||
RHT_TREASURE_GAME_HEART,
|
RHT_TREASURE_GAME_HEART,
|
||||||
RHT_TREASURE_GAME_GREEN_RUPEE,
|
RHT_TREASURE_GAME_GREEN_RUPEE,
|
||||||
RHT_BUY_DEKU_NUT_5,
|
RHT_BUY_DEKU_NUTS_5,
|
||||||
RHT_BUY_ARROWS_30,
|
RHT_BUY_ARROWS_30,
|
||||||
RHT_BUY_ARROWS_50,
|
RHT_BUY_ARROWS_50,
|
||||||
RHT_BUY_BOMBS_525,
|
RHT_BUY_BOMBS_525,
|
||||||
RHT_BUY_DEKU_NUT_10,
|
RHT_BUY_DEKU_NUTS_10,
|
||||||
RHT_BUY_DEKU_STICK_1,
|
RHT_BUY_DEKU_STICK_1,
|
||||||
RHT_BUY_BOMBS_10,
|
RHT_BUY_BOMBS_10,
|
||||||
RHT_BUY_FISH,
|
RHT_BUY_FISH,
|
||||||
@ -3066,9 +3101,9 @@ typedef enum {
|
|||||||
RHT_DESERT_COLOSSUS,
|
RHT_DESERT_COLOSSUS,
|
||||||
RHT_THE_MARKET,
|
RHT_THE_MARKET,
|
||||||
RHT_TEMPLE_OF_TIME,
|
RHT_TEMPLE_OF_TIME,
|
||||||
RHT_CASTLE_GROUNDS,
|
|
||||||
RHT_HYRULE_CASTLE,
|
RHT_HYRULE_CASTLE,
|
||||||
RHT_OUTSIDE_GANONS_CASTLE,
|
RHT_OUTSIDE_GANONS_CASTLE,
|
||||||
|
RHT_CASTLE_GROUNDS,
|
||||||
RHT_KAKARIKO_VILLAGE,
|
RHT_KAKARIKO_VILLAGE,
|
||||||
RHT_THE_GRAVEYARD,
|
RHT_THE_GRAVEYARD,
|
||||||
RHT_DEATH_MOUNTAIN_TRAIL,
|
RHT_DEATH_MOUNTAIN_TRAIL,
|
||||||
@ -3245,6 +3280,7 @@ typedef enum {
|
|||||||
RHT_MAX
|
RHT_MAX
|
||||||
} RandomizerHintTextKey;
|
} RandomizerHintTextKey;
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
RandomizerGet rgID;
|
RandomizerGet rgID;
|
||||||
RandomizerGet fakeRgID;
|
RandomizerGet fakeRgID;
|
||||||
|
@ -112,7 +112,7 @@ void SaveManager::LoadRandomizerVersion1() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < randoContext->hashIconIndexes.size(); i++) {
|
for (uint32_t i = 0; i < randoContext->hashIconIndexes.size(); i++) {
|
||||||
SaveManager::Instance->LoadData("seed" + std::to_string(i), randoContext->hashIconIndexes[i]);
|
SaveManager::Instance->LoadData("seed" + std::to_string(i), randoContext->hashIconIndexes[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,32 +130,32 @@ void SaveManager::LoadRandomizerVersion1() {
|
|||||||
for (int j = 0; j < ARRAY_COUNT(hintText); j++) {
|
for (int j = 0; j < ARRAY_COUNT(hintText); j++) {
|
||||||
SaveManager::Instance->LoadData("ht" + std::to_string(i) + "-" + std::to_string(j), hintText[j]);
|
SaveManager::Instance->LoadData("ht" + std::to_string(i) + "-" + std::to_string(j), hintText[j]);
|
||||||
}
|
}
|
||||||
randoContext->AddHint(RandomizerHintKey(check - RC_COLOSSUS_GOSSIP_STONE + 1), Text(hintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RandomizerHintKey(check - RC_COLOSSUS_GOSSIP_STONE + 1), Text(hintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
}
|
}
|
||||||
|
|
||||||
char childAltarText[250];
|
char childAltarText[250];
|
||||||
for (int i = 0; i < ARRAY_COUNT(childAltarText); i++) {
|
for (int i = 0; i < ARRAY_COUNT(childAltarText); i++) {
|
||||||
SaveManager::Instance->LoadData("cat" + std::to_string(i), childAltarText[i]);
|
SaveManager::Instance->LoadData("cat" + std::to_string(i), childAltarText[i]);
|
||||||
}
|
}
|
||||||
randoContext->AddHint(RH_ALTAR_CHILD, Text(childAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_ALTAR_CHILD, Text(childAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
|
|
||||||
char adultAltarText[750];
|
char adultAltarText[750];
|
||||||
for (int i = 0; i < ARRAY_COUNT(adultAltarText); i++) {
|
for (int i = 0; i < ARRAY_COUNT(adultAltarText); i++) {
|
||||||
SaveManager::Instance->LoadData("aat" + std::to_string(i), adultAltarText[i]);
|
SaveManager::Instance->LoadData("aat" + std::to_string(i), adultAltarText[i]);
|
||||||
}
|
}
|
||||||
randoContext->AddHint(RH_ALTAR_ADULT, Text(adultAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_ALTAR_ADULT, Text(adultAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
|
|
||||||
char ganonHintText[150];
|
char ganonHintText[150];
|
||||||
for (int i = 0; i < ARRAY_COUNT(ganonHintText); i++) {
|
for (int i = 0; i < ARRAY_COUNT(ganonHintText); i++) {
|
||||||
SaveManager::Instance->LoadData("ght" + std::to_string(i), ganonHintText[i]);
|
SaveManager::Instance->LoadData("ght" + std::to_string(i), ganonHintText[i]);
|
||||||
}
|
}
|
||||||
randoContext->AddHint(RH_GANONDORF_HINT, Text(ganonHintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_GANONDORF_HINT, Text(ganonHintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
|
|
||||||
char ganonText[250];
|
char ganonText[250];
|
||||||
for (int i = 0; i < ARRAY_COUNT(ganonText); i++) {
|
for (int i = 0; i < ARRAY_COUNT(ganonText); i++) {
|
||||||
SaveManager::Instance->LoadData("gt" + std::to_string(i), ganonText[i]);
|
SaveManager::Instance->LoadData("gt" + std::to_string(i), ganonText[i]);
|
||||||
}
|
}
|
||||||
randoContext->AddHint(RH_GANONDORF_NOHINT, Text(ganonText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_GANONDORF_NOHINT, Text(ganonText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
|
|
||||||
SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.adultTradeItems);
|
SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.adultTradeItems);
|
||||||
|
|
||||||
@ -234,53 +234,53 @@ void SaveManager::LoadRandomizerVersion2() {
|
|||||||
if (rc != RC_UNKNOWN_CHECK) {
|
if (rc != RC_UNKNOWN_CHECK) {
|
||||||
std::string hintText;
|
std::string hintText;
|
||||||
SaveManager::Instance->LoadData("hintText", hintText);
|
SaveManager::Instance->LoadData("hintText", hintText);
|
||||||
randoContext->AddHint(RandomizerHintKey(rc - RC_COLOSSUS_GOSSIP_STONE + 1), Text(hintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RandomizerHintKey(rc - RC_COLOSSUS_GOSSIP_STONE + 1), Text(hintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
std::string childAltarText;
|
std::string childAltarText;
|
||||||
SaveManager::Instance->LoadData("childAltarText", childAltarText);
|
SaveManager::Instance->LoadData("childAltarText", childAltarText);
|
||||||
randoContext->AddHint(RH_ALTAR_CHILD, Text(childAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_ALTAR_CHILD, Text(childAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string adultAltarText;
|
std::string adultAltarText;
|
||||||
SaveManager::Instance->LoadData("adultAltarText", adultAltarText);
|
SaveManager::Instance->LoadData("adultAltarText", adultAltarText);
|
||||||
randoContext->AddHint(RH_ALTAR_ADULT, Text(adultAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_ALTAR_ADULT, Text(adultAltarText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string ganonHintText;
|
std::string ganonHintText;
|
||||||
SaveManager::Instance->LoadData("ganonHintText", ganonHintText);
|
SaveManager::Instance->LoadData("ganonHintText", ganonHintText);
|
||||||
randoContext->AddHint(RH_GANONDORF_HINT, Text(ganonHintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_GANONDORF_HINT, Text(ganonHintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string ganonText;
|
std::string ganonText;
|
||||||
SaveManager::Instance->LoadData("ganonText", ganonText);
|
SaveManager::Instance->LoadData("ganonText", ganonText);
|
||||||
randoContext->AddHint(RH_GANONDORF_NOHINT, Text(ganonText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_GANONDORF_NOHINT, Text(ganonText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string dampeText;
|
std::string dampeText;
|
||||||
SaveManager::Instance->LoadData("dampeText", dampeText);
|
SaveManager::Instance->LoadData("dampeText", dampeText);
|
||||||
randoContext->AddHint(RH_DAMPES_DIARY, Text(dampeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_DAMPES_DIARY, Text(dampeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string gregHintText;
|
std::string gregHintText;
|
||||||
SaveManager::Instance->LoadData("gregHintText", gregHintText);
|
SaveManager::Instance->LoadData("gregHintText", gregHintText);
|
||||||
randoContext->AddHint(RH_GREG_RUPEE, Text(gregHintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_GREG_RUPEE, Text(gregHintText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string sheikText;
|
std::string sheikText;
|
||||||
SaveManager::Instance->LoadData("sheikText", sheikText);
|
SaveManager::Instance->LoadData("sheikText", sheikText);
|
||||||
randoContext->AddHint(RH_SHEIK_LIGHT_ARROWS, Text(sheikText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_SHEIK_LIGHT_ARROWS, Text(sheikText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string sariaText;
|
std::string sariaText;
|
||||||
SaveManager::Instance->LoadData("sariaText", sariaText);
|
SaveManager::Instance->LoadData("sariaText", sariaText);
|
||||||
randoContext->AddHint(RH_SARIA, Text(sariaText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text());
|
randoContext->AddHint(RH_SARIA, Text(sariaText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static");
|
||||||
std::string warpMinuetText;
|
std::string warpMinuetText;
|
||||||
SaveManager::Instance->LoadData("warpMinuetText", warpMinuetText);
|
SaveManager::Instance->LoadData("warpMinuetText", warpMinuetText);
|
||||||
randoContext->AddHint(RH_MINUET_WARP_LOC, Text(warpMinuetText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpMinuetText));
|
randoContext->AddHint(RH_MINUET_WARP_LOC, Text(warpMinuetText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpMinuetText));
|
||||||
std::string warpBoleroText;
|
std::string warpBoleroText;
|
||||||
SaveManager::Instance->LoadData("warpBoleroText", warpBoleroText);
|
SaveManager::Instance->LoadData("warpBoleroText", warpBoleroText);
|
||||||
randoContext->AddHint(RH_BOLERO_WARP_LOC, Text(warpBoleroText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpBoleroText));
|
randoContext->AddHint(RH_BOLERO_WARP_LOC, Text(warpBoleroText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpBoleroText));
|
||||||
std::string warpSerenadeText;
|
std::string warpSerenadeText;
|
||||||
SaveManager::Instance->LoadData("warpSerenadeText", warpSerenadeText);
|
SaveManager::Instance->LoadData("warpSerenadeText", warpSerenadeText);
|
||||||
randoContext->AddHint(RH_SERENADE_WARP_LOC, Text(warpSerenadeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpSerenadeText));
|
randoContext->AddHint(RH_SERENADE_WARP_LOC, Text(warpSerenadeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpSerenadeText));
|
||||||
std::string warpRequiemText;
|
std::string warpRequiemText;
|
||||||
SaveManager::Instance->LoadData("warpRequiemText", warpRequiemText);
|
SaveManager::Instance->LoadData("warpRequiemText", warpRequiemText);
|
||||||
randoContext->AddHint(RH_REQUIEM_WARP_LOC, Text(warpRequiemText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpRequiemText));
|
randoContext->AddHint(RH_REQUIEM_WARP_LOC, Text(warpRequiemText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpRequiemText));
|
||||||
std::string warpNocturneText;
|
std::string warpNocturneText;
|
||||||
SaveManager::Instance->LoadData("warpNocturneText", warpNocturneText);
|
SaveManager::Instance->LoadData("warpNocturneText", warpNocturneText);
|
||||||
randoContext->AddHint(RH_NOCTURNE_WARP_LOC, Text(warpNocturneText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpNocturneText));
|
randoContext->AddHint(RH_NOCTURNE_WARP_LOC, Text(warpNocturneText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpNocturneText));
|
||||||
std::string warpPreludeText;
|
std::string warpPreludeText;
|
||||||
SaveManager::Instance->LoadData("warpPreludeText", warpPreludeText);
|
SaveManager::Instance->LoadData("warpPreludeText", warpPreludeText);
|
||||||
randoContext->AddHint(RH_PRELUDE_WARP_LOC, Text(warpPreludeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, Text(warpPreludeText));
|
randoContext->AddHint(RH_PRELUDE_WARP_LOC, Text(warpPreludeText), RC_UNKNOWN_CHECK, HINT_TYPE_STATIC, "Static", randoContext->GetAreaFromString(warpPreludeText));
|
||||||
|
|
||||||
SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.adultTradeItems);
|
SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.adultTradeItems);
|
||||||
|
|
||||||
@ -387,12 +387,9 @@ void SaveManager::LoadRandomizerVersion3() {
|
|||||||
SaveManager::Instance->LoadData("hintedCheck", rc);
|
SaveManager::Instance->LoadData("hintedCheck", rc);
|
||||||
HintType ht = HINT_TYPE_STATIC;
|
HintType ht = HINT_TYPE_STATIC;
|
||||||
SaveManager::Instance->LoadData("hintType", ht);
|
SaveManager::Instance->LoadData("hintType", ht);
|
||||||
std::string englishRegion, frenchRegion;
|
RandomizerArea savedArea;
|
||||||
SaveManager::Instance->LoadStruct("hintedRegion", [&]() {
|
SaveManager::Instance->LoadData("hintedArea", savedArea);
|
||||||
SaveManager::Instance->LoadData("english", englishRegion);
|
randoContext->AddHint(rhk, Text(english, french, english), rc, ht, "Unknown", savedArea);//RANDOTODO, maybe store and load distrabution, but it's a string...
|
||||||
SaveManager::Instance->LoadData("french", frenchRegion);
|
|
||||||
});
|
|
||||||
randoContext->AddHint(rhk, Text(english, french, english), rc, ht, Text(englishRegion, frenchRegion, englishRegion));
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -479,11 +476,7 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f
|
|||||||
});
|
});
|
||||||
SaveManager::Instance->SaveData("hintedCheck", hint->GetHintedLocation());
|
SaveManager::Instance->SaveData("hintedCheck", hint->GetHintedLocation());
|
||||||
SaveManager::Instance->SaveData("hintType", hint->GetHintType());
|
SaveManager::Instance->SaveData("hintType", hint->GetHintType());
|
||||||
SaveManager::Instance->SaveStruct("hintedRegion", [&]() {
|
SaveManager::Instance->SaveData("hintedArea", hint->GetHintedArea());
|
||||||
SaveManager::Instance->SaveData("english", hint->GetHintedRegionText().GetEnglish());
|
|
||||||
SaveManager::Instance->SaveData("french", hint->GetHintedRegionText().GetFrench());
|
|
||||||
SaveManager::Instance->SaveData("german", hint->GetHintedRegionText().GetEnglish());
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user