Fix Multiple Foolish hints from an area being generated. (#4190)

* Fix Multiple Foolish hints for the same location

* remove debug comment
This commit is contained in:
Pepper0ni 2024-07-05 22:49:56 +01:00 committed by GitHub
parent 510b655e5e
commit db5e9cbc11
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 10 deletions

View File

@ -129,9 +129,9 @@ bool FilterWotHLocations(RandomizerCheck loc){
return ctx->GetItemLocation(loc)->IsWothCandidate();
}
bool FilterBarrenLocations(RandomizerCheck loc){
bool FilterFoolishLocations(RandomizerCheck loc){
auto ctx = Rando::Context::GetInstance();
return ctx->GetItemLocation(loc)->IsBarrenCandidate();
return ctx->GetItemLocation(loc)->IsFoolishCandidate();
}
bool FilterSongLocations(RandomizerCheck loc){
@ -176,7 +176,7 @@ const std::array<HintSetting, 4> hintSettingTable{{
.junkWeight = 6,
.distTable = {
{"WotH", HINT_TYPE_WOTH, 7, 0, 1, FilterWotHLocations, 2},
{"Barren", HINT_TYPE_FOOLISH, 4, 0, 1, FilterBarrenLocations, 1},
{"Foolish", HINT_TYPE_FOOLISH, 4, 0, 1, FilterFoolishLocations, 1},
//("Entrance", HINT_TYPE_ENTRANCE, 6, 0, 1), //not yet implemented
{"Song", HINT_TYPE_ITEM, 2, 0, 1, FilterSongLocations},
{"Overworld", HINT_TYPE_ITEM, 4, 0, 1, FilterOverworldLocations},
@ -192,7 +192,7 @@ const std::array<HintSetting, 4> hintSettingTable{{
.junkWeight = 0,
.distTable = {
{"WotH", HINT_TYPE_WOTH, 12, 0, 2, FilterWotHLocations, 2},
{"Barren", HINT_TYPE_FOOLISH, 12, 0, 1, FilterBarrenLocations, 1},
{"Foolish", HINT_TYPE_FOOLISH, 12, 0, 1, FilterFoolishLocations, 1},
//{"Entrance", HINT_TYPE_ENTRANCE, 4, 0, 1}, //not yet implemented
{"Song", HINT_TYPE_ITEM, 4, 0, 1, FilterSongLocations},
{"Overworld", HINT_TYPE_ITEM, 6, 0, 1, FilterOverworldLocations},
@ -208,7 +208,7 @@ const std::array<HintSetting, 4> hintSettingTable{{
.junkWeight = 0,
.distTable = {
{"WotH", HINT_TYPE_WOTH, 15, 0, 2, FilterWotHLocations},
{"Barren", HINT_TYPE_FOOLISH, 15, 0, 1, FilterBarrenLocations},
{"Foolish", HINT_TYPE_FOOLISH, 15, 0, 1, FilterFoolishLocations},
//{"Entrance", HINT_TYPE_ENTRANCE, 10, 0, 1}, //not yet implemented
{"Song", HINT_TYPE_ITEM, 2, 0, 1, FilterSongLocations},
{"Overworld", HINT_TYPE_ITEM, 7, 0, 1, FilterOverworldLocations},
@ -448,9 +448,6 @@ static RandomizerCheck CreateRandomHint(std::vector<RandomizerCheck>& possibleHi
placed = CreateHint(hintedLocation, copies, type, distributionName);
}
if (type == HINT_TYPE_FOOLISH){
SetAllInRegionAsHinted(ctx->GetItemLocation(hintedLocation)->GetArea(), possibleHintLocations);
}
return hintedLocation;
}
@ -582,6 +579,10 @@ uint8_t PlaceHints(std::vector<uint8_t>& selectedHints,
RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK;
hintedLocation = CreateRandomHint(hintTypePool, distribution.copies, distribution.type, distribution.name);
if (distribution.type == HINT_TYPE_FOOLISH){
SetAllInRegionAsHinted(ctx->GetItemLocation(hintedLocation)->GetArea(), hintTypePool);
hintTypePool = FilterHintability(hintTypePool);
}
if (hintedLocation == RC_UNKNOWN_CHECK){ //if hint failed to place, remove all wieght and copies then return the number of stones to redistribute
uint8_t hintsToRemove = (selectedHints[curSlot] - numHint) * distribution.copies;
selectedHints[curSlot] = 0; //as distTable is passed by refernce here, these changes stick for the rest of this seed generation

View File

@ -192,7 +192,7 @@ void ItemLocation::SetWothCandidate() {
wothCandidate = true;
}
bool ItemLocation::IsBarrenCandidate() const {
bool ItemLocation::IsFoolishCandidate() const {
return barrenCandidate;
}

View File

@ -49,7 +49,7 @@ class ItemLocation {
void SetVisible(bool visibleInImGui_);
bool IsWothCandidate() const;
void SetWothCandidate();
bool IsBarrenCandidate() const;
bool IsFoolishCandidate() const;
void SetBarrenCandidate();
void ResetVariables();