mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-01-08 04:18:14 -05:00
Check Tracker - MQ/Vanilla anti-spoilers
This commit is contained in:
parent
ef587be47a
commit
af4f528e7c
@ -71,6 +71,8 @@ bool initialized = false;
|
|||||||
bool doInitialize = false;
|
bool doInitialize = false;
|
||||||
std::map<RandomizerCheck, RandomizerCheckShow> checkStatusMap;
|
std::map<RandomizerCheck, RandomizerCheckShow> checkStatusMap;
|
||||||
u32 areasFullyChecked = 0;
|
u32 areasFullyChecked = 0;
|
||||||
|
u32 areasSpoiled = 0;
|
||||||
|
bool showVOrMQ;
|
||||||
s8 areaChecksTotal[32]; //| For sorting and showing
|
s8 areaChecksTotal[32]; //| For sorting and showing
|
||||||
s8 areaChecksGotten[32]; //| "Kokiri Forest (4/9)"
|
s8 areaChecksGotten[32]; //| "Kokiri Forest (4/9)"
|
||||||
std::vector<RandomizerCheckObject> checks;
|
std::vector<RandomizerCheckObject> checks;
|
||||||
@ -135,6 +137,7 @@ void DrawCheckTracker(bool& open) {
|
|||||||
sceneId != SCENE_SHOP1 && sceneId != SCENE_SYATEKIJYOU // Don't move for Bazaar/Gallery, as it moves between Kak and Market
|
sceneId != SCENE_SHOP1 && sceneId != SCENE_SYATEKIJYOU // Don't move for Bazaar/Gallery, as it moves between Kak and Market
|
||||||
);
|
);
|
||||||
previousArea = currentArea;
|
previousArea = currentArea;
|
||||||
|
areasSpoiled |= (1 << currentArea);
|
||||||
|
|
||||||
//Only update the checks if something has changed
|
//Only update the checks if something has changed
|
||||||
if (ShouldUpdateChecks()) {
|
if (ShouldUpdateChecks()) {
|
||||||
@ -190,6 +193,7 @@ void DrawCheckTracker(bool& open) {
|
|||||||
bool hideComplete = CVar_GetS32("gCheckTrackerAreaCompleteHide", 0);
|
bool hideComplete = CVar_GetS32("gCheckTrackerAreaCompleteHide", 0);
|
||||||
bool collapseLogic;
|
bool collapseLogic;
|
||||||
bool doingCollapseOrExpand = optExpandAll || optCollapseAll;
|
bool doingCollapseOrExpand = optExpandAll || optCollapseAll;
|
||||||
|
bool isThisAreaSpoiled;
|
||||||
RandomizerCheckArea lastArea = RCAREA_INVALID;
|
RandomizerCheckArea lastArea = RCAREA_INVALID;
|
||||||
Color_RGBA8 areaCompleteColor = CVar_GetRGBA("gCheckTrackerAreaMainCompleteColor", Color_Main_Default);
|
Color_RGBA8 areaCompleteColor = CVar_GetRGBA("gCheckTrackerAreaMainCompleteColor", Color_Main_Default);
|
||||||
Color_RGBA8 areaIncompleteColor = CVar_GetRGBA("gCheckTrackerAreaMainIncompleteColor", Color_Main_Default);
|
Color_RGBA8 areaIncompleteColor = CVar_GetRGBA("gCheckTrackerAreaMainIncompleteColor", Color_Main_Default);
|
||||||
@ -258,7 +262,22 @@ void DrawCheckTracker(bool& open) {
|
|||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, Color_RGBA8_to_ImVec4(extraColor));
|
ImGui::PushStyleColor(ImGuiCol_Text, Color_RGBA8_to_ImVec4(extraColor));
|
||||||
ImGui::Text("(%d/%d)", areaChecksGotten[obj.rcArea], areaChecksTotal[obj.rcArea]);
|
|
||||||
|
isThisAreaSpoiled = areasSpoiled & areaMask || CVar_GetS32("gCheckTrackerOptionMQSpoilers", 0);
|
||||||
|
|
||||||
|
if (isThisAreaSpoiled) {
|
||||||
|
if (showVOrMQ && RandomizerCheckObjects::AreaIsDungeon(obj.rcArea)) {
|
||||||
|
if (OTRGlobals::Instance->gRandomizer->masterQuestDungeons.contains(obj.sceneId))
|
||||||
|
ImGui::Text("(%d/%d) - MQ", areaChecksGotten[obj.rcArea], areaChecksTotal[obj.rcArea]);
|
||||||
|
else
|
||||||
|
ImGui::Text("(%d/%d) - Vanilla", areaChecksGotten[obj.rcArea], areaChecksTotal[obj.rcArea]);
|
||||||
|
} else {
|
||||||
|
ImGui::Text("(%d/%d)", areaChecksGotten[obj.rcArea], areaChecksTotal[obj.rcArea]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ImGui::Text("???", areaChecksGotten[obj.rcArea], areaChecksTotal[obj.rcArea]);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
|
|
||||||
//Keep areas loaded between transitions
|
//Keep areas loaded between transitions
|
||||||
@ -269,7 +288,7 @@ void DrawCheckTracker(bool& open) {
|
|||||||
areaMask <<= 1;
|
areaMask <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doDraw)
|
if (doDraw && isThisAreaSpoiled)
|
||||||
DrawLocation(obj, &checkStatusMap.find(obj.rc)->second);
|
DrawLocation(obj, &checkStatusMap.find(obj.rc)->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,8 +373,16 @@ void InitializeChecks() {
|
|||||||
checkStatusMap.emplace(rcObj.rc, RCSHOW_UNCHECKED);
|
checkStatusMap.emplace(rcObj.rc, RCSHOW_UNCHECKED);
|
||||||
count++;
|
count++;
|
||||||
areaChecksTotal[rcObj.rcArea]++;
|
areaChecksTotal[rcObj.rcArea]++;
|
||||||
|
|
||||||
|
if (areaChecksGotten[rcObj.rcArea] != 0 || RandomizerCheckObjects::AreaIsOverworld(rcObj.rcArea))
|
||||||
|
areasSpoiled |= (1 << rcObj.rcArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showVOrMQ = (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) > 0);
|
||||||
|
//Bug: the above will spoil that everything is vanilla if the random count rolled 0.
|
||||||
|
// Should use the below instead, but the setting isn't currently saved to the savefile
|
||||||
|
//showVOrMQ = (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_RANDOM_MQ_DUNGEONS) != RO_GENERIC_OFF);
|
||||||
|
|
||||||
UpdateChecks();
|
UpdateChecks();
|
||||||
UpdateOrdering(true);
|
UpdateOrdering(true);
|
||||||
doInitialize = false;
|
doInitialize = false;
|
||||||
@ -428,6 +455,9 @@ void UpdateChecks() {
|
|||||||
areasFullyChecked |= (1 << rcObj.rcArea);
|
areasFullyChecked |= (1 << rcObj.rcArea);
|
||||||
else
|
else
|
||||||
areasFullyChecked &= (0xFFFFFFFF - (1 << rcObj.rcArea));
|
areasFullyChecked &= (0xFFFFFFFF - (1 << rcObj.rcArea));
|
||||||
|
|
||||||
|
if (areaChecksGotten[rcObj.rcArea] != 0 || RandomizerCheckObjects::AreaIsOverworld(rcObj.rcArea))
|
||||||
|
areasSpoiled |= (1 << rcObj.rcArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -774,8 +804,8 @@ void DrawCheckTrackerOptions(bool& open) {
|
|||||||
UIWidgets::EnhancementCombobox("gCheckTrackerWindowType", windowType, 2, 1);
|
UIWidgets::EnhancementCombobox("gCheckTrackerWindowType", windowType, 2, 1);
|
||||||
|
|
||||||
if (CVar_GetS32("gCheckTrackerWindowType", 0) == 0) {
|
if (CVar_GetS32("gCheckTrackerWindowType", 0) == 0) {
|
||||||
UIWidgets::EnhancementCheckbox("Enable Dragging", "gCheckTrackerHudEditMode", 0);
|
UIWidgets::EnhancementCheckbox("Enable Dragging", "gCheckTrackerHudEditMode");
|
||||||
UIWidgets::EnhancementCheckbox("Only enable while paused", "gCheckTrackerShowOnlyPaused", 0);
|
UIWidgets::EnhancementCheckbox("Only enable while paused", "gCheckTrackerShowOnlyPaused");
|
||||||
ImGui::Text("Display Mode");
|
ImGui::Text("Display Mode");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
UIWidgets::EnhancementCombobox("gCheckTrackerDisplayType", displayType, 2, 0);
|
UIWidgets::EnhancementCombobox("gCheckTrackerDisplayType", displayType, 2, 0);
|
||||||
@ -788,11 +818,13 @@ void DrawCheckTrackerOptions(bool& open) {
|
|||||||
UIWidgets::EnhancementCombobox("gCheckTrackerComboButton2", buttonStrings, 14, 8);
|
UIWidgets::EnhancementCombobox("gCheckTrackerComboButton2", buttonStrings, 14, 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UIWidgets::EnhancementCheckbox("Performance mode", "gCheckTrackerOptionPerformanceMode", 0);
|
UIWidgets::EnhancementCheckbox("Performance mode", "gCheckTrackerOptionPerformanceMode");
|
||||||
UIWidgets::Tooltip("Slows down checking for updates to 1 check per frame. Only required if experiencing poor performance when using Check Tracker.");
|
UIWidgets::Tooltip("Slows down checking for updates to 1 check per frame. Only required if experiencing poor performance when using Check Tracker.");
|
||||||
|
UIWidgets::EnhancementCheckbox("Vanilla/MQ Dungeon Spoilers", "gCheckTrackerOptionMQSpoilers");
|
||||||
|
UIWidgets::Tooltip("If enabled, Vanilla/MQ dungeons will show on the tracker immediately. Otherwise, Vanilla/MQ dungeon locations must be unlocked. ");
|
||||||
|
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
ImGuiDrawTwoColorPickerSection("Area Incomplete", "gCheckTrackerAreaMainIncompleteColor", "gCheckTrackerAreaExtraIncompleteColor", Color_Area_Incomplete_Main, Color_Area_Incomplete_Extra, Color_Main_Default, Color_Area_Incomplete_Extra_Default, "gCheckTrackerAreaIncompleteHide" );
|
ImGuiDrawTwoColorPickerSection("Area Incomplete", "gCheckTrackerAreaMainIncompleteColor", "gCheckTrackerAreaExtraIncompleteColor", Color_Area_Incomplete_Main, Color_Area_Incomplete_Extra, Color_Main_Default, Color_Area_Incomplete_Extra_Default, "gCheckTrackerAreaIncompleteHide" );
|
||||||
ImGuiDrawTwoColorPickerSection("Area Complete", "gCheckTrackerAreaMainCompleteColor", "gCheckTrackerAreaExtraCompleteColor", Color_Area_Complete_Main, Color_Area_Complete_Extra, Color_Main_Default, Color_Area_Complete_Extra_Default, "gCheckTrackerAreaCompleteHide" );
|
ImGuiDrawTwoColorPickerSection("Area Complete", "gCheckTrackerAreaMainCompleteColor", "gCheckTrackerAreaExtraCompleteColor", Color_Area_Complete_Main, Color_Area_Complete_Extra, Color_Main_Default, Color_Area_Complete_Extra_Default, "gCheckTrackerAreaCompleteHide" );
|
||||||
ImGuiDrawTwoColorPickerSection("Unchecked", "gCheckTrackerUncheckedMainColor", "gCheckTrackerUncheckedExtraColor", Color_Unchecked_Main, Color_Unchecked_Extra, Color_Main_Default, Color_Unchecked_Extra_Default, "gCheckTrackerUncheckedHide" );
|
ImGuiDrawTwoColorPickerSection("Unchecked", "gCheckTrackerUncheckedMainColor", "gCheckTrackerUncheckedExtraColor", Color_Unchecked_Main, Color_Unchecked_Extra, Color_Main_Default, Color_Unchecked_Extra_Default, "gCheckTrackerUncheckedHide" );
|
||||||
|
Loading…
Reference in New Issue
Block a user