mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-26 19:32:17 -05:00
probably fix glaring hint issues (#3752)
This commit is contained in:
parent
944a4c2e46
commit
46abda83d2
@ -572,7 +572,7 @@ static void CalculateWotH() {
|
|||||||
for (size_t j = 0; j < ctx->playthroughLocations[i].size(); j++) {
|
for (size_t j = 0; j < ctx->playthroughLocations[i].size(); j++) {
|
||||||
//If removing this item and no other item caused the game to become unbeatable, then it is strictly necessary, so add it
|
//If removing this item and no other item caused the game to become unbeatable, then it is strictly necessary, so add it
|
||||||
if (ctx->GetItemLocation(ctx->playthroughLocations[i][j])->IsHintable()
|
if (ctx->GetItemLocation(ctx->playthroughLocations[i][j])->IsHintable()
|
||||||
&& IsBeatableWithout(ctx->playthroughLocations[i][j], true)) {
|
&& !(IsBeatableWithout(ctx->playthroughLocations[i][j], true))) {
|
||||||
ctx->GetItemLocation(ctx->playthroughLocations[i][j])->SetWothCandidate();
|
ctx->GetItemLocation(ctx->playthroughLocations[i][j])->SetWothCandidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -585,20 +585,21 @@ static void CalculateWotH() {
|
|||||||
//Calculate barren locations and assign Barren Candidacy to all locations inside those areas
|
//Calculate barren locations and assign Barren Candidacy to all locations inside those areas
|
||||||
static void CalculateBarren() {
|
static void CalculateBarren() {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
std::array<bool, RA_MAX> IsBarren = {true};
|
std::array<bool, RA_MAX> NotBarren = {}; //I would invert this but the "initialise all as true" syntax wasn't working
|
||||||
|
|
||||||
for (RandomizerCheck loc : ctx->allLocations) {
|
for (RandomizerCheck loc : ctx->allLocations) {
|
||||||
Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc);
|
Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc);
|
||||||
RandomizerArea locArea = itemLoc->GetArea();
|
RandomizerArea locArea = itemLoc->GetArea();
|
||||||
// If a location has a major item or is a way of the hero location, it is not barren
|
bool test = (itemLoc->GetPlacedItem().IsMajorItem() || itemLoc->IsWothCandidate());
|
||||||
if (IsBarren[locArea] == true && locArea > RA_LINKS_POCKET && (itemLoc->GetPlacedItem().IsMajorItem() || itemLoc->IsWothCandidate())) {
|
// If a location has a major item or is a way of the hero location, it is not barren
|
||||||
IsBarren[locArea] = false;
|
if (NotBarren[locArea] == false && locArea > RA_LINKS_POCKET && (itemLoc->GetPlacedItem().IsMajorItem() || itemLoc->IsWothCandidate())) {
|
||||||
}
|
NotBarren[locArea] = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (RandomizerCheck loc : ctx->allLocations) {
|
for (RandomizerCheck loc : ctx->allLocations) {
|
||||||
Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc);
|
Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc);
|
||||||
if (IsBarren[itemLoc->GetArea()]){
|
if (!NotBarren[itemLoc->GetArea()]){
|
||||||
itemLoc->SetBarrenCandidate();
|
itemLoc->SetBarrenCandidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1060,7 +1060,7 @@ void HintTable_Init() {
|
|||||||
|
|
||||||
hintTable[RHT_OUTSIDE_GANONS_CASTLE] = HintText::Exclude({
|
hintTable[RHT_OUTSIDE_GANONS_CASTLE] = HintText::Exclude({
|
||||||
// obscure text
|
// obscure text
|
||||||
Text{ "outside Ganon's Castle", /*french*/ "les alentours du Château&de Ganon",
|
Text{ "outside Ganon's Castle", /*french*/ "les alentours du Château de Ganon",
|
||||||
/*spanish*/ "el exterior del Castillo de Ganon" },
|
/*spanish*/ "el exterior del Castillo de Ganon" },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -494,8 +494,8 @@ static std::vector<RandomizerCheck> FilterHintability(std::vector<RandomizerChec
|
|||||||
std::function<bool(RandomizerCheck)> extraFilter = NoFilter){
|
std::function<bool(RandomizerCheck)> extraFilter = NoFilter){
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
return FilterFromPool(locations, [extraFilter, 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())
|
||||||
&& extraFilter(loc));
|
&& extraFilter(loc);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1033,7 +1033,8 @@ void CreateStoneHints() {
|
|||||||
// If we have Rainbow Bridge set to Greg, add a hint for where Greg is
|
// If we have Rainbow Bridge set to Greg, add a hint for where Greg is
|
||||||
(ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG) &&
|
(ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG) &&
|
||||||
ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_GREG_RUPEE)) &&
|
ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_GREG_RUPEE)) &&
|
||||||
ctx->GetItemLocation(loc)->IsHintable() && !(ctx->GetItemLocation(loc)->IsHintedAt());
|
ctx->GetItemLocation(loc)->IsHintable() &&
|
||||||
|
!(ctx->GetOption(RSK_GREG_HINT) && (IsReachableWithout({RC_GREG_HINT}, loc, true)));
|
||||||
});
|
});
|
||||||
|
|
||||||
for (auto& hint : conditionalAlwaysHints) {
|
for (auto& hint : conditionalAlwaysHints) {
|
||||||
|
Loading…
Reference in New Issue
Block a user