Merge pull request #5787 from Malkierian/blair-dev-9-8
Actual Blair->Develop 9/8
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/Enhancements/randomizer/context.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
#include "soh/Enhancements/timesaver_hook_handlers.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
@@ -10,7 +11,9 @@ extern "C" {
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
}
|
||||
#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get()
|
||||
|
||||
extern "C" PlayState* gPlayState;
|
||||
static bool sEnteredBlueWarp = false;
|
||||
|
||||
// Todo: Move item queueing here
|
||||
@@ -64,7 +67,16 @@ void RegisterSkipBlueWarp() {
|
||||
* to the player instead.
|
||||
*/
|
||||
COND_VB_SHOULD(VB_GIVE_ITEM_FROM_BLUE_WARP,
|
||||
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO), { *should = false; });
|
||||
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO), {
|
||||
if (IS_VANILLA) {
|
||||
if (gPlayState->sceneNum == SCENE_SHADOW_TEMPLE_BOSS) {
|
||||
TimeSaverQueueItem(RG_SHADOW_MEDALLION);
|
||||
} else if (gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE_BOSS) {
|
||||
TimeSaverQueueItem(RG_SPIRIT_MEDALLION);
|
||||
}
|
||||
}
|
||||
*should = false;
|
||||
});
|
||||
}
|
||||
|
||||
void RegisterShouldPlayBlueWarp() {
|
||||
|
||||
@@ -751,6 +751,10 @@ void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VB_PLAY_BLUE_WARP_CS: {
|
||||
*should = false;
|
||||
break;
|
||||
}
|
||||
// Spawn clean blue warps (no ruto, adult animation, etc)
|
||||
case VB_SPAWN_BLUE_WARP: {
|
||||
switch (gPlayState->sceneNum) {
|
||||
|
||||
@@ -861,7 +861,7 @@ void GenerateItemPool() {
|
||||
AddItemToMainPool(RG_GERUDO_MEMBERSHIP_CARD);
|
||||
ctx->possibleIceTrapModels.push_back(RG_GERUDO_MEMBERSHIP_CARD);
|
||||
} else if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) {
|
||||
AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD);
|
||||
AddItemToPool(ItemPool, RG_GERUDO_MEMBERSHIP_CARD);
|
||||
ctx->PlaceItemInLocation(RC_TH_FREED_CARPENTERS, RG_ICE_TRAP, false, true);
|
||||
} else {
|
||||
ctx->PlaceItemInLocation(RC_TH_FREED_CARPENTERS, RG_GERUDO_MEMBERSHIP_CARD, false, true);
|
||||
|
||||
@@ -161,12 +161,16 @@ bool Context::IsQuestOfLocationActive(RandomizerCheck rc) {
|
||||
|
||||
void Context::GenerateLocationPool() {
|
||||
allLocations.clear();
|
||||
overworldLocations.clear();
|
||||
for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) {
|
||||
dungeon->locations.clear();
|
||||
}
|
||||
for (Location& location : StaticData::GetLocationTable()) {
|
||||
// skip RCs that shouldn't be in the pool for any reason (i.e. settings, unsupported check type, etc.)
|
||||
// TODO: Exclude checks for some of the older shuffles from the pool too i.e. Frog Songs, Scrubs, etc.)
|
||||
if (location.GetRandomizerCheck() == RC_UNKNOWN_CHECK ||
|
||||
location.GetRandomizerCheck() == RC_TRIFORCE_COMPLETED || // already in pool
|
||||
(location.GetRandomizerCheck() == RC_MASTER_SWORD_PEDESTAL &&
|
||||
(location.GetRandomizerCheck() == RC_TOT_MASTER_SWORD &&
|
||||
mOptions[RSK_SHUFFLE_MASTER_SWORD].Is(RO_GENERIC_OFF)) ||
|
||||
(location.GetRandomizerCheck() == RC_KAK_100_GOLD_SKULLTULA_REWARD &&
|
||||
mOptions[RSK_SHUFFLE_100_GS_REWARD].Is(RO_GENERIC_OFF)) ||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include <libultraship/bridge.h>
|
||||
#include <libultraship/bridge.h>
|
||||
#include "soh/OTRGlobals.h"
|
||||
#include "soh/ResourceManagerHelpers.h"
|
||||
#include "soh/Enhancements/enhancementTypes.h"
|
||||
@@ -333,7 +333,10 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
|
||||
getItemEntry.modIndex == MOD_RANDOMIZER) &&
|
||||
(getItemEntry.getItemCategory == ITEM_CATEGORY_JUNK ||
|
||||
getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN ||
|
||||
getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER))))) {
|
||||
getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER ||
|
||||
// Treat small keys as junk if Skeleton Key is obtained.
|
||||
(getItemEntry.getItemCategory == ITEM_CATEGORY_SMALL_KEY &&
|
||||
Flags_GetRandomizerInf(RAND_INF_HAS_SKELETON_KEY))))))) {
|
||||
Item_DropCollectible(gPlayState, &spawnPos, static_cast<int16_t>(ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000));
|
||||
}
|
||||
}
|
||||
@@ -871,7 +874,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
||||
*should = !Flags_GetEventChkInf(EVENTCHKINF_BONGO_BONGO_ESCAPED_FROM_WELL) && LINK_IS_ADULT &&
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_KAKARIKO_VILLAGE &&
|
||||
CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) && CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE) &&
|
||||
CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER);
|
||||
CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER) && gSaveContext.cutsceneIndex < 0xFFF0;
|
||||
break;
|
||||
case VB_BE_ELIGIBLE_FOR_CHILD_ROLLING_GORON_REWARD: {
|
||||
// Don't require a bomb bag to get prize in rando
|
||||
@@ -887,7 +890,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
||||
break;
|
||||
}
|
||||
case VB_GIVE_ITEM_MASTER_SWORD:
|
||||
if (RAND_GET_OPTION(RSK_SHUFFLE_MASTER_SWORD)) {
|
||||
if (RAND_GET_OPTION(RSK_SHUFFLE_MASTER_SWORD) || RAND_GET_OPTION(RSK_STARTING_MASTER_SWORD)) {
|
||||
*should = false;
|
||||
} else {
|
||||
*should = true;
|
||||
@@ -1022,17 +1025,55 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
||||
}
|
||||
|
||||
if (item00->itemEntry.modIndex == MOD_NONE) {
|
||||
std::string message;
|
||||
|
||||
switch (gSaveContext.language) {
|
||||
case LANGUAGE_FRA:
|
||||
message = "Vous obtenez: ";
|
||||
break;
|
||||
case LANGUAGE_GER:
|
||||
message = "Du erhältst: ";
|
||||
break;
|
||||
case LANGUAGE_ENG:
|
||||
default:
|
||||
message = "You found ";
|
||||
break;
|
||||
}
|
||||
|
||||
Notification::Emit({
|
||||
.itemIcon = GetTextureForItemId(item00->itemEntry.itemId),
|
||||
.message = "You found ",
|
||||
.message = message,
|
||||
.suffix = SohUtils::GetItemName(item00->itemEntry.itemId),
|
||||
});
|
||||
} else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) {
|
||||
std::string message;
|
||||
std::string itemName;
|
||||
|
||||
switch (gSaveContext.language) {
|
||||
case LANGUAGE_FRA:
|
||||
message = "Vous obtenez: ";
|
||||
itemName = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
|
||||
.GetName()
|
||||
.french;
|
||||
break;
|
||||
case LANGUAGE_GER:
|
||||
message = "Du erhältst: ";
|
||||
itemName = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
|
||||
.GetName()
|
||||
.german;
|
||||
break;
|
||||
case LANGUAGE_ENG:
|
||||
default:
|
||||
message = "You found ";
|
||||
itemName = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
|
||||
.GetName()
|
||||
.english;
|
||||
break;
|
||||
}
|
||||
|
||||
Notification::Emit({
|
||||
.message = "You found ",
|
||||
.suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
|
||||
.GetName()
|
||||
.english,
|
||||
.message = message,
|
||||
.suffix = itemName,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -2159,7 +2159,7 @@ const std::vector<uint8_t>& GetDungeonSmallKeyDoors(SceneID sceneId) {
|
||||
}
|
||||
} else if (transitionActor.id == ACTOR_DOOR_SHUTTER) {
|
||||
uint8_t doorType = (transitionActor.params >> 7) & 15;
|
||||
if (doorType == SHUTTER_BACK_LOCKED || doorType == SHUTTER_BOSS || doorType == SHUTTER_KEY_LOCKED) {
|
||||
if (doorType == SHUTTER_KEY_LOCKED) {
|
||||
dungeonSmallKeyDoors[key].emplace_back(transitionActor.params & 0x3F);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2634,7 +2634,6 @@ typedef enum {
|
||||
|
||||
RC_PIERRE,
|
||||
RC_DELIVER_RUTOS_LETTER,
|
||||
RC_MASTER_SWORD_PEDESTAL,
|
||||
RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE,
|
||||
RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE,
|
||||
RC_KF_GOSSIP_STONE,
|
||||
@@ -4935,7 +4934,6 @@ typedef enum {
|
||||
RHT_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT,
|
||||
RHT_GANONS_TOWER_BOSS_KEY_CHEST,
|
||||
RHT_DELIVER_RUTOS_LETTER,
|
||||
RHT_MASTER_SWORD_PEDESTAL,
|
||||
// Beehives
|
||||
RHT_BEEHIVE_CHEST_GROTTO,
|
||||
RHT_BEEHIVE_COW_GROTTO,
|
||||
|
||||
@@ -2220,8 +2220,8 @@ void CheckTrackerSettingsWindow::DrawElement() {
|
||||
"Checks that you saved the game while having collected.", THEME_COLOR);
|
||||
|
||||
ImGui::PopStyleVar(1);
|
||||
ImGui::EndTable();
|
||||
}
|
||||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
void CheckTrackerWindow::InitElement() {
|
||||
|
||||
@@ -1757,245 +1757,156 @@ static std::unordered_map<int32_t, const char*> minimalDisplayTypes = {
|
||||
|
||||
void ItemTrackerSettingsWindow::DrawElement() {
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 8.0f, 8.0f });
|
||||
ImGui::BeginTable("itemTrackerSettingsTable", 2, ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV);
|
||||
ImGui::TableSetupColumn("General settings", ImGuiTableColumnFlags_WidthStretch, 200.0f);
|
||||
ImGui::TableSetupColumn("Section settings", ImGuiTableColumnFlags_WidthStretch, 200.0f);
|
||||
ImGui::TableHeadersRow();
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
CVarColorPicker("Background Color##gItemTrackerBgColor", CVAR_TRACKER_ITEM("BgColor"), { 0, 0, 0, 0 }, true,
|
||||
ColorPickerRandomButton | ColorPickerResetButton, THEME_COLOR);
|
||||
if (ImGui::BeginTable("itemTrackerSettingsTable", 2, ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV)) {
|
||||
ImGui::TableSetupColumn("General settings", ImGuiTableColumnFlags_WidthStretch, 200.0f);
|
||||
ImGui::TableSetupColumn("Section settings", ImGuiTableColumnFlags_WidthStretch, 200.0f);
|
||||
ImGui::TableHeadersRow();
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
CVarColorPicker("Background Color##gItemTrackerBgColor", CVAR_TRACKER_ITEM("BgColor"), { 0, 0, 0, 0 }, true,
|
||||
ColorPickerRandomButton | ColorPickerResetButton, THEME_COLOR);
|
||||
|
||||
ImGui::PopItemWidth();
|
||||
if (CVarCombobox("Window Type", CVAR_TRACKER_ITEM("WindowType"), windowTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRACKER_WINDOW_FLOATING)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING) {
|
||||
if (CVarCheckbox("Enable Dragging", CVAR_TRACKER_ITEM("Draggable"), CheckboxOptions().Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCheckbox("Only enable while paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"),
|
||||
CheckboxOptions().Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Display Mode", CVAR_TRACKER_ITEM("DisplayType.Main"), displayModes,
|
||||
ImGui::PopItemWidth();
|
||||
if (CVarCombobox("Window Type", CVAR_TRACKER_ITEM("WindowType"), windowTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRACKER_DISPLAY_ALWAYS)
|
||||
.DefaultIndex(TRACKER_WINDOW_FLOATING)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) ==
|
||||
TRACKER_DISPLAY_COMBO_BUTTON) {
|
||||
if (CVarCombobox("Combo Button 1", CVAR_TRACKER_ITEM("ComboButton1"), buttons,
|
||||
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING) {
|
||||
if (CVarCheckbox("Enable Dragging", CVAR_TRACKER_ITEM("Draggable"), CheckboxOptions().Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCheckbox("Only enable while paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"),
|
||||
CheckboxOptions().Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Display Mode", CVAR_TRACKER_ITEM("DisplayType.Main"), displayModes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRACKER_COMBO_BUTTON_L)
|
||||
.DefaultIndex(TRACKER_DISPLAY_ALWAYS)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Combo Button 2", CVAR_TRACKER_ITEM("ComboButton2"), buttons,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRACKER_COMBO_BUTTON_R)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) ==
|
||||
TRACKER_DISPLAY_COMBO_BUTTON) {
|
||||
if (CVarCombobox("Combo Button 1", CVAR_TRACKER_ITEM("ComboButton1"), buttons,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRACKER_COMBO_BUTTON_L)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Combo Button 2", CVAR_TRACKER_ITEM("ComboButton2"), buttons,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRACKER_COMBO_BUTTON_R)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
ImGui::Separator();
|
||||
CVarSliderInt("Icon size : %dpx", CVAR_TRACKER_ITEM("IconSize"),
|
||||
IntSliderOptions().Min(25).Max(128).DefaultValue(36).Color(THEME_COLOR));
|
||||
CVarSliderInt("Icon margins : %dpx", CVAR_TRACKER_ITEM("IconSpacing"),
|
||||
IntSliderOptions().Min(-5).Max(50).DefaultValue(12).Color(THEME_COLOR));
|
||||
CVarSliderInt("Text size : %dpx", CVAR_TRACKER_ITEM("TextSize"),
|
||||
IntSliderOptions().Min(1).Max(30).DefaultValue(13).Color(THEME_COLOR));
|
||||
|
||||
ImGui::NewLine();
|
||||
CVarCombobox("Ammo/Capacity Tracking", CVAR_TRACKER_ITEM("ItemCountType"), itemTrackerCapacityTrackOptions,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY)
|
||||
.ComponentAlignment(ComponentAlignments::Left)
|
||||
.LabelPosition(LabelPositions::Above)
|
||||
.Color(THEME_COLOR)
|
||||
.Tooltip("Customize what the numbers under each item are tracking."
|
||||
"\n\nNote: items without capacity upgrades will track ammo even in capacity mode"));
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) ==
|
||||
ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY ||
|
||||
CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) ==
|
||||
ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY) {
|
||||
if (CVarCheckbox("Align count to left side", CVAR_TRACKER_ITEM("ItemCountAlignLeft"),
|
||||
CheckboxOptions().Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
ImGui::Separator();
|
||||
CVarSliderInt("Icon size : %dpx", CVAR_TRACKER_ITEM("IconSize"),
|
||||
IntSliderOptions().Min(25).Max(128).DefaultValue(36).Color(THEME_COLOR));
|
||||
CVarSliderInt("Icon margins : %dpx", CVAR_TRACKER_ITEM("IconSpacing"),
|
||||
IntSliderOptions().Min(-5).Max(50).DefaultValue(12).Color(THEME_COLOR));
|
||||
CVarSliderInt("Text size : %dpx", CVAR_TRACKER_ITEM("TextSize"),
|
||||
IntSliderOptions().Min(1).Max(30).DefaultValue(13).Color(THEME_COLOR));
|
||||
|
||||
ImGui::NewLine();
|
||||
CVarCombobox("Ammo/Capacity Tracking", CVAR_TRACKER_ITEM("ItemCountType"), itemTrackerCapacityTrackOptions,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY)
|
||||
.ComponentAlignment(ComponentAlignments::Left)
|
||||
.LabelPosition(LabelPositions::Above)
|
||||
.Color(THEME_COLOR)
|
||||
.Tooltip("Customize what the numbers under each item are tracking."
|
||||
"\n\nNote: items without capacity upgrades will track ammo even in capacity mode"));
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) ==
|
||||
ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY ||
|
||||
CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) ==
|
||||
ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY) {
|
||||
if (CVarCheckbox("Align count to left side", CVAR_TRACKER_ITEM("ItemCountAlignLeft"),
|
||||
CheckboxOptions().Color(THEME_COLOR))) {
|
||||
CVarCombobox("Key Count Tracking", CVAR_TRACKER_ITEM("KeyCounts"), itemTrackerKeyTrackOptions,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(KEYS_COLLECTED_MAX)
|
||||
.ComponentAlignment(ComponentAlignments::Left)
|
||||
.LabelPosition(LabelPositions::Above)
|
||||
.Color(THEME_COLOR)
|
||||
.Tooltip("Customize what numbers are shown for key tracking."));
|
||||
|
||||
CVarCombobox("Triforce Piece Count Tracking", CVAR_TRACKER_ITEM("TriforcePieceCounts"),
|
||||
itemTrackerTriforcePieceTrackOptions,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX)
|
||||
.ComponentAlignment(ComponentAlignments::Left)
|
||||
.LabelPosition(LabelPositions::Above)
|
||||
.Color(THEME_COLOR)
|
||||
.Tooltip("Customize what numbers are shown for triforce piece tracking."));
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
if (CVarCombobox("Inventory", CVAR_TRACKER_ITEM("DisplayType.Inventory"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
|
||||
CVarCombobox("Key Count Tracking", CVAR_TRACKER_ITEM("KeyCounts"), itemTrackerKeyTrackOptions,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(KEYS_COLLECTED_MAX)
|
||||
.ComponentAlignment(ComponentAlignments::Left)
|
||||
.LabelPosition(LabelPositions::Above)
|
||||
.Color(THEME_COLOR)
|
||||
.Tooltip("Customize what numbers are shown for key tracking."));
|
||||
|
||||
CVarCombobox("Triforce Piece Count Tracking", CVAR_TRACKER_ITEM("TriforcePieceCounts"),
|
||||
itemTrackerTriforcePieceTrackOptions,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX)
|
||||
.ComponentAlignment(ComponentAlignments::Left)
|
||||
.LabelPosition(LabelPositions::Above)
|
||||
.Color(THEME_COLOR)
|
||||
.Tooltip("Customize what numbers are shown for triforce piece tracking."));
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
if (CVarCombobox("Inventory", CVAR_TRACKER_ITEM("DisplayType.Inventory"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Equipment", CVAR_TRACKER_ITEM("DisplayType.Equipment"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Misc", CVAR_TRACKER_ITEM("DisplayType.Misc"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Dungeon Rewards", CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) ==
|
||||
SECTION_DISPLAY_SEPARATE) {
|
||||
if (CVarCheckbox("Circle display", CVAR_TRACKER_ITEM("DungeonRewardsLayout"),
|
||||
CheckboxOptions().DefaultValue(false).Color(THEME_COLOR))) {
|
||||
if (CVarCombobox("Equipment", CVAR_TRACKER_ITEM("DisplayType.Equipment"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
if (CVarCombobox("Songs", CVAR_TRACKER_ITEM("DisplayType.Songs"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Dungeon Items", CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) !=
|
||||
SECTION_DISPLAY_HIDDEN) {
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) ==
|
||||
if (CVarCombobox("Misc", CVAR_TRACKER_ITEM("DisplayType.Misc"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarCombobox("Dungeon Rewards", CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) ==
|
||||
SECTION_DISPLAY_SEPARATE) {
|
||||
if (CVarCheckbox("Horizontal display", CVAR_TRACKER_ITEM("DungeonItems.Layout"),
|
||||
CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) {
|
||||
if (CVarCheckbox("Circle display", CVAR_TRACKER_ITEM("DungeonRewardsLayout"),
|
||||
CheckboxOptions().DefaultValue(false).Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
if (CVarCheckbox("Maps and compasses", CVAR_TRACKER_ITEM("DungeonItems.DisplayMaps"),
|
||||
CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) {
|
||||
if (CVarCombobox("Songs", CVAR_TRACKER_ITEM("DisplayType.Songs"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
if (CVarCombobox("Greg", CVAR_TRACKER_ITEM("DisplayType.Greg"), extendedDisplayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Triforce Pieces", CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Boss Souls", CVAR_TRACKER_ITEM("DisplayType.BossSouls"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Ocarina Buttons", CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Overworld Keys", CVAR_TRACKER_ITEM("DisplayType.OverworldKeys"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Fishing Pole", CVAR_TRACKER_ITEM("DisplayType.FishingPole"), extendedDisplayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Total Checks", "gTrackers.ItemTracker.TotalChecks.DisplayType", minimalDisplayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MINIMAL_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_WINDOW ||
|
||||
(CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING &&
|
||||
CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) !=
|
||||
TRACKER_DISPLAY_COMBO_BUTTON)) {
|
||||
if (CVarCombobox("Personal notes", CVAR_TRACKER_ITEM("DisplayType.Notes"), displayTypes,
|
||||
if (CVarCombobox("Dungeon Items", CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
@@ -2003,14 +1914,104 @@ void ItemTrackerSettingsWindow::DrawElement() {
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
CVarCheckbox("Show Hookshot Identifiers", CVAR_TRACKER_ITEM("HookshotIdentifier"),
|
||||
CheckboxOptions()
|
||||
.Tooltip("Shows an 'H' or an 'L' to more easiely distinguish between Hookshot and Longshot.")
|
||||
.Color(THEME_COLOR));
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) !=
|
||||
SECTION_DISPLAY_HIDDEN) {
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) ==
|
||||
SECTION_DISPLAY_SEPARATE) {
|
||||
if (CVarCheckbox("Horizontal display", CVAR_TRACKER_ITEM("DungeonItems.Layout"),
|
||||
CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
if (CVarCheckbox("Maps and compasses", CVAR_TRACKER_ITEM("DungeonItems.DisplayMaps"),
|
||||
CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
if (CVarCombobox("Greg", CVAR_TRACKER_ITEM("DisplayType.Greg"), extendedDisplayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
ImGui::PopStyleVar(1);
|
||||
ImGui::EndTable();
|
||||
if (CVarCombobox("Triforce Pieces", CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Boss Souls", CVAR_TRACKER_ITEM("DisplayType.BossSouls"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Ocarina Buttons", CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Overworld Keys", CVAR_TRACKER_ITEM("DisplayType.OverworldKeys"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Fishing Pole", CVAR_TRACKER_ITEM("DisplayType.FishingPole"), extendedDisplayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarCombobox("Total Checks", "gTrackers.ItemTracker.TotalChecks.DisplayType", minimalDisplayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_MINIMAL_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
|
||||
if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_WINDOW ||
|
||||
(CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING &&
|
||||
CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) !=
|
||||
TRACKER_DISPLAY_COMBO_BUTTON)) {
|
||||
if (CVarCombobox("Personal notes", CVAR_TRACKER_ITEM("DisplayType.Notes"), displayTypes,
|
||||
ComboboxOptions()
|
||||
.DefaultIndex(SECTION_DISPLAY_HIDDEN)
|
||||
.ComponentAlignment(ComponentAlignments::Right)
|
||||
.LabelPosition(LabelPositions::Far)
|
||||
.Color(THEME_COLOR))) {
|
||||
shouldUpdateVectors = true;
|
||||
}
|
||||
}
|
||||
CVarCheckbox("Show Hookshot Identifiers", CVAR_TRACKER_ITEM("HookshotIdentifier"),
|
||||
CheckboxOptions()
|
||||
.Tooltip("Shows an 'H' or an 'L' to more easiely distinguish between Hookshot and Longshot.")
|
||||
.Color(THEME_COLOR));
|
||||
|
||||
ImGui::PopStyleVar(1);
|
||||
ImGui::EndTable();
|
||||
}
|
||||
}
|
||||
|
||||
void ItemTrackerWindow::InitElement() {
|
||||
|
||||
@@ -2593,7 +2593,7 @@ void Context::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocation
|
||||
}
|
||||
if (!mOptions[RSK_SHUFFLE_MASTER_SWORD]) {
|
||||
if (mOptions[RSK_STARTING_MASTER_SWORD]) {
|
||||
this->GetItemLocation(RC_MASTER_SWORD_PEDESTAL)->SetExcludedOption(1);
|
||||
this->GetItemLocation(RC_TOT_MASTER_SWORD)->SetExcludedOption(1);
|
||||
}
|
||||
}
|
||||
if (!mOptions[RSK_SHUFFLE_OCARINA]) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include <libultraship/bridge.h>
|
||||
#include "soh/OTRGlobals.h"
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/Enhancements/enhancementTypes.h"
|
||||
@@ -166,7 +165,7 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
|
||||
*should = false;
|
||||
}
|
||||
|
||||
u8 meetsBurningKakRequirements = LINK_IS_ADULT &&
|
||||
u8 meetsBurningKakRequirements = LINK_IS_ADULT && gSaveContext.cutsceneIndex < 0xFFF0 &&
|
||||
gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE &&
|
||||
Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) &&
|
||||
Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP) &&
|
||||
@@ -302,9 +301,10 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
|
||||
}
|
||||
switch (actor->id) {
|
||||
case ACTOR_OBJ_SWITCH: {
|
||||
if ((actor->params == 8224 && gPlayState->sceneNum == SCENE_DODONGOS_CAVERN) ||
|
||||
(actor->params == 6979 && gPlayState->sceneNum == SCENE_WATER_TEMPLE) &&
|
||||
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) {
|
||||
if (((actor->params == 8224 && gPlayState->sceneNum == SCENE_DODONGOS_CAVERN) ||
|
||||
(actor->params == 6979 && gPlayState->sceneNum == SCENE_WATER_TEMPLE) ||
|
||||
(actor->params == 8961 && gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE)) &&
|
||||
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) {
|
||||
break;
|
||||
}
|
||||
ObjSwitch* switchActor = (ObjSwitch*)actor;
|
||||
@@ -342,6 +342,16 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
|
||||
*should = false;
|
||||
break;
|
||||
}
|
||||
case ACTOR_EN_BOX: {
|
||||
if (actor->params == -30457 && gPlayState->sceneNum == SCENE_JABU_JABU &&
|
||||
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) {
|
||||
break;
|
||||
}
|
||||
EnBox* boxActor = (EnBox*)actor;
|
||||
*should = false;
|
||||
RateLimitedSuccessChime();
|
||||
break;
|
||||
}
|
||||
case ACTOR_BG_HIDAN_FWBIG:
|
||||
case ACTOR_EN_EX_ITEM:
|
||||
case ACTOR_EN_DNT_NOMAL:
|
||||
@@ -354,7 +364,6 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
|
||||
case ACTOR_DOOR_SHUTTER:
|
||||
case ACTOR_BG_ICE_SHUTTER:
|
||||
case ACTOR_OBJ_LIGHTSWITCH:
|
||||
case ACTOR_EN_BOX:
|
||||
case ACTOR_OBJ_SYOKUDAI:
|
||||
case ACTOR_OBJ_TIMEBLOCK:
|
||||
case ACTOR_EN_PO_SISTERS:
|
||||
@@ -942,7 +951,7 @@ void TimeSaverOnActorInitHandler(void* actorRef) {
|
||||
});
|
||||
}
|
||||
|
||||
if (actor->id == ACTOR_EN_JJ && !IS_RANDO) {
|
||||
if (actor->id == ACTOR_EN_JJ) {
|
||||
enJjUpdateHook =
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorUpdate>([](void* innerActorRef) mutable {
|
||||
Actor* innerActor = static_cast<Actor*>(innerActorRef);
|
||||
@@ -1200,6 +1209,10 @@ void TimeSaverOnSceneInitHandler(int16_t sceneNum) {
|
||||
|
||||
static GetItemEntry vanillaQueuedItemEntry = GET_ITEM_NONE;
|
||||
|
||||
void TimeSaverQueueItem(RandomizerGet randoGet) {
|
||||
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(randoGet).GetGIEntry_Copy();
|
||||
}
|
||||
|
||||
void TimeSaverOnFlagSetHandler(int16_t flagType, int16_t flag) {
|
||||
// Do nothing when in a boss rush
|
||||
if (IS_BOSS_RUSH) {
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#ifndef TIMESAVER_HOOK_HANDLERS_H
|
||||
#define TIMESAVER_HOOK_HANDLERS_H
|
||||
|
||||
#include "soh/Enhancements/randomizer/randomizerTypes.h"
|
||||
|
||||
void TimeSaverRegisterHooks();
|
||||
void TimeSaverQueueItem(RandomizerGet randoGet);
|
||||
|
||||
#endif // TIMESAVER_HOOK_HANDLERS_H
|
||||
@@ -1465,7 +1465,9 @@ extern "C" void Graph_StartFrame() {
|
||||
}
|
||||
#endif
|
||||
case KbScancode::LUS_KB_TAB: {
|
||||
CVarSetInteger(CVAR_SETTING("AltAssets"), !CVarGetInteger(CVAR_SETTING("AltAssets"), 0));
|
||||
if (CVarGetInteger(CVAR_SETTING("Mods.AlternateAssetsHotkey"), 1)) {
|
||||
CVarSetInteger(CVAR_SETTING("AltAssets"), !CVarGetInteger(CVAR_SETTING("AltAssets"), 0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -496,6 +496,7 @@ void Menu::Draw() {
|
||||
SyncVisibilityConsoleVariable();
|
||||
}
|
||||
|
||||
static bool freshOpen = true;
|
||||
void Menu::DrawElement() {
|
||||
for (auto& [reason, info] : disabledMap) {
|
||||
info.active = info.evaluation(info);
|
||||
@@ -538,6 +539,7 @@ void Menu::DrawElement() {
|
||||
if (!popout) {
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
freshOpen = true;
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::End();
|
||||
return;
|
||||
@@ -654,13 +656,13 @@ void Menu::DrawElement() {
|
||||
std::string menuSearchText = "";
|
||||
if (headerSearch) {
|
||||
ImGui::SameLine();
|
||||
if (autoFocus && ImGui::IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows) && !ImGui::IsAnyItemActive() &&
|
||||
!ImGui::IsMouseClicked(0)) {
|
||||
ImGui::SetKeyboardFocusHere(0);
|
||||
if (autoFocus && freshOpen) {
|
||||
ImGui::SetKeyboardFocusHere();
|
||||
}
|
||||
auto color = UIWidgets::ColorValues.at(menuThemeIndex);
|
||||
color.w = 0.2f;
|
||||
color.w = 0.6f;
|
||||
ImGui::PushStyleColor(ImGuiCol_FrameBg, color);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
|
||||
menuSearch.Draw("##search", 200.0f);
|
||||
menuSearchText = menuSearch.InputBuf;
|
||||
menuSearchText.erase(std::remove(menuSearchText.begin(), menuSearchText.end(), ' '), menuSearchText.end());
|
||||
@@ -668,6 +670,7 @@ void Menu::DrawElement() {
|
||||
ImGui::SameLine(headerWidth - 200.0f + style.ItemSpacing.x);
|
||||
ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 0.4f), "Search...");
|
||||
}
|
||||
ImGui::PopStyleVar();
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
ImGui::EndChild();
|
||||
@@ -853,6 +856,9 @@ void Menu::DrawElement() {
|
||||
poppedSize = ImGui::GetWindowSize();
|
||||
poppedPos = ImGui::GetWindowPos();
|
||||
}
|
||||
if (freshOpen) {
|
||||
freshOpen = false;
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
} // namespace Ship
|
||||
|
||||
@@ -582,7 +582,6 @@ void UpdateResolutionVars() {
|
||||
verticalPixelCount =
|
||||
CVarGetInteger(CVAR_PREFIX_ADVANCED_RESOLUTION ".VerticalPixelCount", pixelCountPresets[item_pixelCount]);
|
||||
// Additional settings
|
||||
showHorizontalResField = false;
|
||||
horizontalPixelCount = (verticalPixelCount / aspectRatioY) * aspectRatioX;
|
||||
// Disabling flags
|
||||
disabled_everything = !CVarGetInteger(CVAR_PREFIX_ADVANCED_RESOLUTION ".Enabled", 0);
|
||||
|
||||
@@ -412,10 +412,11 @@ void SohMenu::AddMenuEnhancements() {
|
||||
.Options(CheckboxOptions().DefaultValue(IS_RANDO));
|
||||
AddWidget(path, "Exclude Glitch-Aiding Cutscenes", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"))
|
||||
.Options(CheckboxOptions().Tooltip(
|
||||
"Don't skip cutscenes that are associated with useful glitches. Currently, it is "
|
||||
"only the Fire Temple Darunia CS, Forest Temple Poe Sisters CS, Dodongo Boss "
|
||||
"Door Switch CS, Water Temple Dragon Switch CS, and the Box Skip One Point in Jabu."));
|
||||
.Options(
|
||||
CheckboxOptions().Tooltip("Don't skip cutscenes that are associated with useful glitches. Currently, it is "
|
||||
"only the Fire Temple Darunia CS, Forest Temple Poe Sisters CS, Dodongo Boss "
|
||||
"Door Switch CS, Water Temple Dragon Switch CS, the Box Skip One Point in Jabu, "
|
||||
"Early Hammer Switch CS in MQ Spirit, and Cow Switch Chest CS in MQ Jabu."));
|
||||
|
||||
AddWidget(path, "Text", WIDGET_SEPARATOR_TEXT);
|
||||
AddWidget(path, "Skip Bottle Pickup Messages", WIDGET_CVAR_CHECKBOX)
|
||||
|
||||
396
soh/soh/util.cpp
396
soh/soh/util.cpp
@@ -7,6 +7,7 @@
|
||||
#include <assert.h>
|
||||
#include <spdlog/spdlog.h>
|
||||
#include "Enhancements/randomizer/randomizerTypes.h"
|
||||
#include <variables.h>
|
||||
|
||||
std::vector<std::string> sceneNames = {
|
||||
"Inside the Deku Tree",
|
||||
@@ -121,7 +122,7 @@ std::vector<std::string> sceneNames = {
|
||||
"Treasure Chest Room",
|
||||
};
|
||||
|
||||
std::vector<std::string> itemNames = {
|
||||
std::vector<std::string> itemNamesEng = {
|
||||
"Deku Stick",
|
||||
"Deku Nut",
|
||||
"Bomb",
|
||||
@@ -280,7 +281,325 @@ std::vector<std::string> itemNames = {
|
||||
"Deku Nut Upgrade (40)",
|
||||
};
|
||||
|
||||
std::vector<std::string> questItemNames = {
|
||||
std::vector<std::string> itemNamesFra = {
|
||||
"Bâton Mojo",
|
||||
"Noix Mojo",
|
||||
"Bombe",
|
||||
"Arc des Fées",
|
||||
"Flèche de Feu",
|
||||
"Feu de Din",
|
||||
"Lance-Pierre des Fées",
|
||||
"Ocarina des Fées",
|
||||
"Ocarina du Temps",
|
||||
"Missile Teigneux",
|
||||
"Grappin",
|
||||
"Super Grappin",
|
||||
"Flèche de Glace",
|
||||
"Vent de Farore",
|
||||
"Boomerang",
|
||||
"Monocle de Vérité",
|
||||
"Haricot Magique",
|
||||
"Masse des Titans",
|
||||
"Flèche de Lumière",
|
||||
"Amour de Nayru",
|
||||
"Bouteille Vide",
|
||||
"Potion Rouge",
|
||||
"Potion Verte",
|
||||
"Potion Bleue",
|
||||
"Fée en Bouteille",
|
||||
"Poisson",
|
||||
"Lait Lon Lon et Bouteille",
|
||||
"Lettre de Ruto",
|
||||
"Flamme Bleue",
|
||||
"Insectes",
|
||||
"Grand Spectre",
|
||||
"Lait Lon Lon (Demi)",
|
||||
"Spectre",
|
||||
"Oeuf Suspect",
|
||||
"Poule",
|
||||
"Lettre de Zelda",
|
||||
"Masque Renard",
|
||||
"Masque de Mort",
|
||||
"Masque du Fantôme",
|
||||
"Capuche de Lapin",
|
||||
"Masque Goron",
|
||||
"Masque Zora",
|
||||
"Masque Gerudo",
|
||||
"Masque de Vérité",
|
||||
"ÉPUISÉ",
|
||||
"Oeuf de Poche",
|
||||
"Cocotte de Poche",
|
||||
"Cojiro",
|
||||
"Champignon Suspect",
|
||||
"Potion Suspecte",
|
||||
"Scie du Chasseur",
|
||||
"Épée Goron (Cassée)",
|
||||
"Ordonnance",
|
||||
"Crapaud-qui-louche",
|
||||
"Super Gouttes",
|
||||
"Certificat",
|
||||
"Arc des Fées & Flèche de Feu",
|
||||
"Arc des Fées & Flèche de Glace",
|
||||
"Arc des Fées & Flèche de Lumière",
|
||||
"Épée Kokiri",
|
||||
"Épée de Légende",
|
||||
"Lame des Géants & Épée Biggoron",
|
||||
"Bouclier Mojo",
|
||||
"Bouclier Hylien",
|
||||
"Bouclier Miroir",
|
||||
"Tunique Kokiri",
|
||||
"Tunique Goron",
|
||||
"Tunique Zora",
|
||||
"Bottes Kokiri",
|
||||
"Bottes de Plomb",
|
||||
"Bottes des Airs",
|
||||
"Sac de Graines (30)",
|
||||
"Sac de Graines (40)",
|
||||
"Sac de Graines (50)",
|
||||
"Carquois (30)",
|
||||
"Grand Carquois (40)",
|
||||
"Énorme Grand Carquois (50)",
|
||||
"Sac de Bombes (20)",
|
||||
"Gros Sac de Bombes (30)",
|
||||
"Énorme Sac de Bombes (40)",
|
||||
"Bracelet Goron",
|
||||
"Gantelets d'Argent",
|
||||
"Gantelets d'Or",
|
||||
"Écaille d'Argent",
|
||||
"Écaille d'Or",
|
||||
"Lame des Géants (Cassée)",
|
||||
"Grande Bourse",
|
||||
"Bourse de Géant",
|
||||
"Graines Mojo (5)",
|
||||
"Canne à Pêche",
|
||||
"Menuet des Bois",
|
||||
"Boléro du Feu",
|
||||
"Sérénade de l'Eau",
|
||||
"Requiem de l'Esprit",
|
||||
"Nocturne de l'Ombre",
|
||||
"Prélude de la Lumière",
|
||||
"Berceuse de Zelda",
|
||||
"Chant d'Epona",
|
||||
"Chant de Saria",
|
||||
"Chant du Soleil",
|
||||
"Chant du Temps",
|
||||
"Chant des Tempêtes",
|
||||
"Médaillon de la Forêt",
|
||||
"Médaillon du Feu",
|
||||
"Médaillon de l'Eau",
|
||||
"Médaillon de l'Esprit",
|
||||
"Médaillon de l'Ombre",
|
||||
"Médaillon de la Lumière",
|
||||
"Émeraude Kokiri",
|
||||
"Rubis Goron",
|
||||
"Saphir Zora",
|
||||
"Pierre de Souffrance",
|
||||
"Carte Gerudo",
|
||||
"Symbole de Skulltula d'Or",
|
||||
"Réceptacle de Coeur",
|
||||
"Quart de Coeur",
|
||||
"Clé du Boss",
|
||||
"Boussole",
|
||||
"Carte du Donjon",
|
||||
"Petite Clé",
|
||||
"Petite Magie",
|
||||
"Grande Magie",
|
||||
"Quart de Coeur",
|
||||
"[Retiré]",
|
||||
"[Retiré]",
|
||||
"[Retiré]",
|
||||
"[Retiré]",
|
||||
"[Retiré]",
|
||||
"[Retiré]",
|
||||
"[Retiré]",
|
||||
"Lait Lon Lon",
|
||||
"Coeur",
|
||||
"Rubis Vert",
|
||||
"Rubis Bleu",
|
||||
"Rubis Rouge",
|
||||
"Rubis Pourpre",
|
||||
"Énorme Rubis",
|
||||
"[Retiré]",
|
||||
"Bâtons Mojo (5)",
|
||||
"Bâtons Mojo (10)",
|
||||
"Noix Mojo (5)",
|
||||
"Noix Mojo (10)",
|
||||
"Bombes (5)",
|
||||
"Bombes (10)",
|
||||
"Bombes (20)",
|
||||
"Bombes (30)",
|
||||
"Flèches (Petites)",
|
||||
"Flèches (Moyennes)",
|
||||
"Flèches (Grandes)",
|
||||
"Graines Mojo (30)",
|
||||
"Missile Teigneux (5)",
|
||||
"Missile Teigneux (20)",
|
||||
"Amélioration des Bâtons Mojo (20)",
|
||||
"Amélioration des Bâtons Mojo (30)",
|
||||
"Amélioration des Noix Mojo (30)",
|
||||
"Amélioration des Noix Mojo (40)",
|
||||
};
|
||||
|
||||
std::vector<std::string> itemNamesGer = {
|
||||
"Deku-Stab",
|
||||
"Deku-Nuß",
|
||||
"Bombe",
|
||||
"Feen-Bogen",
|
||||
"Feuer-Pfeil",
|
||||
"Dins Feuerinferno",
|
||||
"Feen-Schleuder",
|
||||
"Feen-Okarina",
|
||||
"Okarina der Zeit",
|
||||
"Krabbelmine",
|
||||
"Fanghaken",
|
||||
"Enterhaken",
|
||||
"Eis-Pfeil",
|
||||
"Farores Donnersturm",
|
||||
"Bumerang",
|
||||
"Auge der Wahrheit",
|
||||
"Wundererbse",
|
||||
"Stahlhammer",
|
||||
"Licht-Pfeil",
|
||||
"Nayrus Umarmung",
|
||||
"Leere Flasche",
|
||||
"Rotes Elixier",
|
||||
"Grünes Elixier",
|
||||
"Blaues Elixier",
|
||||
"Flasche (Fee)",
|
||||
"Fisch",
|
||||
"Flasche (Milch)",
|
||||
"Rutos Brief",
|
||||
"Blaues Feuer",
|
||||
"Käfer",
|
||||
"Nachtschwärmer",
|
||||
"Lon Lon-Milch (Halbe Füllung)",
|
||||
"Irrlicht",
|
||||
"Seltsames Ei",
|
||||
"Huhn",
|
||||
"Zeldas Brief",
|
||||
"Fuchs-Maske",
|
||||
"Geister-Maske",
|
||||
"Schädel-Maske",
|
||||
"Hasenohren",
|
||||
"Goronen-Maske",
|
||||
"Zora-Maske",
|
||||
"Gerudo-Maske",
|
||||
"Maske des Wissens",
|
||||
"AUSVERKAUFT",
|
||||
"Ei",
|
||||
"Kiki",
|
||||
"Henni",
|
||||
"Schimmelpilz",
|
||||
"Modertrank",
|
||||
"Säge",
|
||||
"Zerbr. Goronen-Schwert",
|
||||
"Rezept",
|
||||
"Glotzfrosch",
|
||||
"Augentropfen",
|
||||
"Zertifikat",
|
||||
"Feen-Bogen & Feuer-Pfeil",
|
||||
"Feen-Bogen & Eis-Pfeil",
|
||||
"Feen-Bogen & Licht-Pfeil",
|
||||
"Kokiri-Schwert",
|
||||
"Master-Schwert",
|
||||
"Langschwert & Biggoron-Schwert",
|
||||
"Deku-Schild",
|
||||
"Hylia-Schild",
|
||||
"Spiegel-Schild",
|
||||
"Kokiri-Rüstung",
|
||||
"Goronen-Rüstung",
|
||||
"Zora-Rüstung",
|
||||
"Lederstiefel",
|
||||
"Eisenstiefel",
|
||||
"Gleitstiefel",
|
||||
"Munitionstasche (30)",
|
||||
"Große Munitionstasche (40)",
|
||||
"Riesen-Munitionstasche (50)",
|
||||
"Köcher (30)",
|
||||
"Großer Köcher (40)",
|
||||
"Riesenköcher (50)",
|
||||
"Bombentasche (20)",
|
||||
"Große Bombentasche (30)",
|
||||
"Riesen-Bombentasche (40)",
|
||||
"Goronen-Armband",
|
||||
"Krafthandschuhe",
|
||||
"Titanhandschuhe",
|
||||
"Silberne Schuppe",
|
||||
"Goldene Schuppe",
|
||||
"Zerbr. Langschwert",
|
||||
"Große Börse",
|
||||
"Riesenbörse",
|
||||
"Deku-Kerne (5)",
|
||||
"Angelrute",
|
||||
"Menuett des Waldes",
|
||||
"Bolero des Feuers",
|
||||
"Serenade des Wassers",
|
||||
"Requiem der Geister",
|
||||
"Nocturne des Schattens",
|
||||
"Kantate des Lichts",
|
||||
"Zeldas Wiegenlied",
|
||||
"Eponas Lied",
|
||||
"Salias Lied",
|
||||
"Hymne der Sonne",
|
||||
"Hymne der Zeit",
|
||||
"Hymne des Sturms",
|
||||
"Amulett des Waldes",
|
||||
"Amulett des Feuers",
|
||||
"Amulett des Wassers",
|
||||
"Amulett der Geister",
|
||||
"Amulett des Schattens",
|
||||
"Amulett des Lichts",
|
||||
"Kokiri-Smaragd",
|
||||
"Goronen-Rubin",
|
||||
"Zora-Saphir",
|
||||
"Stein des Wissens",
|
||||
"Gerudo-Paß",
|
||||
"Skulltula-Symbol",
|
||||
"Herzcontainer",
|
||||
"Herzteil",
|
||||
"Master-Schlüssel",
|
||||
"Kompaß",
|
||||
"Labyrinth-Karte",
|
||||
"Kleiner Schlüssel",
|
||||
"Kleine Magieflasche",
|
||||
"Große Magieflasche",
|
||||
"Herzteil",
|
||||
"[Entfernt]",
|
||||
"[Entfernt]",
|
||||
"[Entfernt]",
|
||||
"[Entfernt]",
|
||||
"[Entfernt]",
|
||||
"[Entfernt]",
|
||||
"[Entfernt]",
|
||||
"Lon Lon-Milch",
|
||||
"Herz",
|
||||
"Grüner Rubin",
|
||||
"Blauer Rubin",
|
||||
"Roter Rubin",
|
||||
"Violetter Rubin",
|
||||
"Silberner Rubin",
|
||||
"[Entfernt]",
|
||||
"Deku-Stäbe (5)",
|
||||
"Deku-Stäbe (10)",
|
||||
"Deku-Nüsse (5)",
|
||||
"Deku-Nüsse (10)",
|
||||
"Bomben (5)",
|
||||
"Bomben (10)",
|
||||
"Bomben (20)",
|
||||
"Bomben (30)",
|
||||
"Pfeile (5)",
|
||||
"Pfeile (10)",
|
||||
"Pfeile (30)",
|
||||
"Deku-Kerne (30)",
|
||||
"Krabbelminen (5)",
|
||||
"Krabbelminen (20)",
|
||||
"Deku-Stab-Kapazität (20)",
|
||||
"Deku-Stab-Kapazität (30)",
|
||||
"Deku-Nuß-Kapazität (30)",
|
||||
"Deku-Nuß-Kapazität (40)",
|
||||
};
|
||||
|
||||
std::vector<std::string> questItemNamesEng = {
|
||||
"Forest Medallion", "Fire Medallion", "Water Medallion", "Spirit Medallion", "Shadow Medallion",
|
||||
"Light Medallion", "Minuet of Forest", "Bolero of Fire", "Serenade of Water", "Requiem of Spirit",
|
||||
"Nocturne of Shadow", "Prelude of Light", "Zelda's Lullaby", "Epona's Song", "Saria's Song",
|
||||
@@ -288,6 +607,42 @@ std::vector<std::string> questItemNames = {
|
||||
"Zora's Sapphire", "Stone of Agony", "Gerudo's Card", "Gold Skulltula Token",
|
||||
};
|
||||
|
||||
std::vector<std::string> questItemNamesFra = {
|
||||
"Médaillon de la Forêt", "Médaillon du Feu", "Médaillon de l'Eau", "Médaillon de l'Esprit",
|
||||
"Médaillon de l'Ombre", "Médaillon de la Lumière", "Menuet des Bois", "Boléro du Feu",
|
||||
"Sérénade de l'Eau", "Requiem de l'Esprit", "Nocturne de l'Ombre", "Prélude de la Lumière",
|
||||
"Berceuse de Zelda", "Chant d'Epona", "Chant de Saria", "Chant du Soleil",
|
||||
"Chant du Temps", "Chant des Tempêtes", "Émeraude Kokiri", "Rubis Goron",
|
||||
"Saphir Zora", "Pierre de Souffrance", "Carte Gerudo", "Symbole de Skulltula d'Or",
|
||||
};
|
||||
|
||||
std::vector<std::string> questItemNamesGer = {
|
||||
"Amulett des Waldes",
|
||||
"Amulett des Feuers",
|
||||
"Amulett des Wassers",
|
||||
"Amulett der Geister",
|
||||
"Amulett des Schattens",
|
||||
"Amulett des Lichts",
|
||||
"Menuett des Waldes",
|
||||
"Bolero des Feuers",
|
||||
"Serenade des Wassers",
|
||||
"Requiem der Geister",
|
||||
"Nocturne des Schattens",
|
||||
"Kantate des Lichts",
|
||||
"Zeldas Wiegenlied",
|
||||
"Eponas Lied",
|
||||
"Salias Lied",
|
||||
"Hymne der Sonne",
|
||||
"Hymne der Zeit",
|
||||
"Hymne des Sturms",
|
||||
"Kokiri-Smaragd",
|
||||
"Goronen-Rubin",
|
||||
"Zora-Saphir",
|
||||
"Stein des Wissens",
|
||||
"Gerudo-Paß",
|
||||
"Goldenes Skulltula-Symbol",
|
||||
};
|
||||
|
||||
std::array<std::string, RA_MAX> rcareaPrefixes = {
|
||||
"KF",
|
||||
"LW",
|
||||
@@ -334,23 +689,52 @@ const std::string& SohUtils::GetSceneName(int32_t scene) {
|
||||
}
|
||||
|
||||
const std::string& SohUtils::GetItemName(int32_t item) {
|
||||
if (item > itemNames.size()) {
|
||||
const std::vector<std::string>* currentItemNames = nullptr;
|
||||
|
||||
switch (gSaveContext.language) {
|
||||
case LANGUAGE_FRA:
|
||||
currentItemNames = &itemNamesFra;
|
||||
break;
|
||||
case LANGUAGE_GER:
|
||||
currentItemNames = &itemNamesGer;
|
||||
break;
|
||||
case LANGUAGE_ENG:
|
||||
default:
|
||||
currentItemNames = &itemNamesEng;
|
||||
break;
|
||||
}
|
||||
|
||||
if (item >= currentItemNames->size()) {
|
||||
SPDLOG_WARN("Passed invalid item id to SohUtils::GetItemName: ({})", item);
|
||||
assert(false);
|
||||
return "";
|
||||
}
|
||||
|
||||
return itemNames[item];
|
||||
return (*currentItemNames)[item];
|
||||
}
|
||||
|
||||
const std::string& SohUtils::GetQuestItemName(int32_t item) {
|
||||
if (item > questItemNames.size()) {
|
||||
const std::vector<std::string>* currentQuestItemNames = nullptr;
|
||||
|
||||
switch (gSaveContext.language) {
|
||||
case LANGUAGE_FRA:
|
||||
currentQuestItemNames = &questItemNamesFra;
|
||||
break;
|
||||
case LANGUAGE_GER:
|
||||
currentQuestItemNames = &questItemNamesGer;
|
||||
break;
|
||||
case LANGUAGE_ENG:
|
||||
default:
|
||||
currentQuestItemNames = &questItemNamesEng;
|
||||
break;
|
||||
}
|
||||
if (item > questItemNamesEng.size()) {
|
||||
SPDLOG_WARN("Passed invalid quest item id to SohUtils::GetQuestItemName: ({})", item);
|
||||
assert(false);
|
||||
return "";
|
||||
}
|
||||
|
||||
return questItemNames[item];
|
||||
return (*currentQuestItemNames)[item];
|
||||
}
|
||||
|
||||
const std::string& SohUtils::GetRandomizerCheckAreaPrefix(int32_t rcarea) {
|
||||
|
||||
@@ -807,8 +807,7 @@ void DoorWarp1_AdultWarpOut(DoorWarp1* this, PlayState* play) {
|
||||
gSaveContext.nextCutsceneIndex = 0;
|
||||
}
|
||||
} else if (play->sceneNum == SCENE_SPIRIT_TEMPLE_BOSS) {
|
||||
if (GameInteractor_Should(VB_PLAY_BLUE_WARP_CS,
|
||||
!Flags_GetRandomizerInf(RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE),
|
||||
if (GameInteractor_Should(VB_PLAY_BLUE_WARP_CS, !CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT),
|
||||
RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE)) {
|
||||
Flags_SetRandomizerInf(RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE);
|
||||
if (GameInteractor_Should(VB_GIVE_ITEM_FROM_BLUE_WARP, true, ITEM_MEDALLION_SPIRIT)) {
|
||||
@@ -826,8 +825,7 @@ void DoorWarp1_AdultWarpOut(DoorWarp1* this, PlayState* play) {
|
||||
gSaveContext.nextCutsceneIndex = 0;
|
||||
}
|
||||
} else if (play->sceneNum == SCENE_SHADOW_TEMPLE_BOSS) {
|
||||
if (GameInteractor_Should(VB_PLAY_BLUE_WARP_CS,
|
||||
!Flags_GetRandomizerInf(RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE),
|
||||
if (GameInteractor_Should(VB_PLAY_BLUE_WARP_CS, !CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW),
|
||||
RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE)) {
|
||||
Flags_SetRandomizerInf(RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE);
|
||||
if (GameInteractor_Should(VB_GIVE_ITEM_FROM_BLUE_WARP, true, ITEM_MEDALLION_SHADOW)) {
|
||||
|
||||
@@ -8,51 +8,6 @@
|
||||
extern const char* digitTextures[];
|
||||
|
||||
void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
|
||||
Color_RGB8 aButtonColor = { 80, 150, 255 };
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.Changed"), 0)) {
|
||||
aButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.AButton.Value"), aButtonColor);
|
||||
} else if (CVarGetInteger(CVAR_COSMETIC("DefaultColorScheme"), COLORSCHEME_N64) == COLORSCHEME_GAMECUBE) {
|
||||
aButtonColor = (Color_RGB8){ 80, 255, 150 };
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_D4, true)) {
|
||||
aButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cButtonsColor = { 255, 255, 50 };
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CButtons.Changed"), 0)) {
|
||||
cButtonsColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor);
|
||||
}
|
||||
Color_RGB8 cUpButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.Changed"), 0)) {
|
||||
cUpButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CUpButton.Value"), cUpButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_D5, true)) {
|
||||
cUpButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cDownButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.Changed"), 0)) {
|
||||
cDownButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CDownButton.Value"), cDownButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_F4, true)) {
|
||||
cDownButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cLeftButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.Changed"), 0)) {
|
||||
cLeftButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CLeftButton.Value"), cLeftButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_B4, true)) {
|
||||
cLeftButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cRightButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.Changed"), 0)) {
|
||||
cRightButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CRightButton.Value"), cRightButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_A4, true)) {
|
||||
cRightButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
static s16 D_8082A070[][4] = {
|
||||
{ 255, 0, 0, 255 },
|
||||
@@ -124,22 +79,22 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
|
||||
s16 pad2;
|
||||
s16 phi_s0_2;
|
||||
s16 sp208[3];
|
||||
if (CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) {
|
||||
pauseCtx->stickRelX = -35;
|
||||
} else if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) {
|
||||
pauseCtx->stickRelX = 35;
|
||||
} else if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
|
||||
pauseCtx->stickRelY = -35;
|
||||
} else if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) {
|
||||
pauseCtx->stickRelY = 35;
|
||||
}
|
||||
}
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
if (((pauseCtx->unk_1E4 == 0) || (pauseCtx->unk_1E4 == 5) || (pauseCtx->unk_1E4 == 8)) &&
|
||||
(pauseCtx->pageIndex == PAUSE_QUEST)) {
|
||||
if (CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) {
|
||||
pauseCtx->stickRelX = -35;
|
||||
} else if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) {
|
||||
pauseCtx->stickRelX = 35;
|
||||
} else if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
|
||||
pauseCtx->stickRelY = -35;
|
||||
} else if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) {
|
||||
pauseCtx->stickRelY = 35;
|
||||
}
|
||||
}
|
||||
pauseCtx->cursorColorSet = 0;
|
||||
|
||||
if (pauseCtx->cursorSpecialPos == 0) {
|
||||
@@ -516,6 +471,52 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) {
|
||||
}
|
||||
|
||||
if (pauseCtx->state == 6) {
|
||||
Color_RGB8 aButtonColor = { 80, 150, 255 };
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.Changed"), 0)) {
|
||||
aButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.AButton.Value"), aButtonColor);
|
||||
} else if (CVarGetInteger(CVAR_COSMETIC("DefaultColorScheme"), COLORSCHEME_N64) == COLORSCHEME_GAMECUBE) {
|
||||
aButtonColor = (Color_RGB8){ 80, 255, 150 };
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_D4, true)) {
|
||||
aButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cButtonsColor = { 255, 255, 50 };
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CButtons.Changed"), 0)) {
|
||||
cButtonsColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor);
|
||||
}
|
||||
Color_RGB8 cUpButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.Changed"), 0)) {
|
||||
cUpButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CUpButton.Value"), cUpButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_D5, true)) {
|
||||
cUpButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cDownButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.Changed"), 0)) {
|
||||
cDownButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CDownButton.Value"), cDownButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_F4, true)) {
|
||||
cDownButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cLeftButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.Changed"), 0)) {
|
||||
cLeftButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CLeftButton.Value"), cLeftButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_B4, true)) {
|
||||
cLeftButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
Color_RGB8 cRightButtonColor = cButtonsColor;
|
||||
if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.Changed"), 0)) {
|
||||
cRightButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CRightButton.Value"), cRightButtonColor);
|
||||
}
|
||||
if (!GameInteractor_Should(VB_HAVE_OCARINA_NOTE_A4, true)) {
|
||||
cRightButtonColor = (Color_RGB8){ 191, 191, 191 };
|
||||
}
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
|
||||
|
||||
|
||||
@@ -183,10 +183,6 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
|
||||
s16 cursorX;
|
||||
s16 cursorY;
|
||||
s16 oldCursorPoint;
|
||||
bool dpad = (CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CHECK_BTN_ALL(input->cur.button, BTN_CUP));
|
||||
bool pauseAnyCursor =
|
||||
(CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) ||
|
||||
(CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON);
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
@@ -204,6 +200,11 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
|
||||
}
|
||||
|
||||
if ((pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_EQUIP)) {
|
||||
bool dpad = (CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CHECK_BTN_ALL(input->cur.button, BTN_CUP));
|
||||
bool pauseAnyCursor =
|
||||
(CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) ||
|
||||
(CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON);
|
||||
|
||||
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_EQUIP];
|
||||
pauseCtx->cursorColorSet = 0;
|
||||
|
||||
|
||||
@@ -421,11 +421,6 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
|
||||
s16 cursorY;
|
||||
s16 oldCursorPoint;
|
||||
s16 moveCursorResult;
|
||||
bool dpad = (CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CHECK_BTN_ALL(input->cur.button, BTN_CUP));
|
||||
bool pauseAnyCursor =
|
||||
pauseCtx->cursorSpecialPos == 0 &&
|
||||
((CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) ||
|
||||
(CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON));
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
@@ -437,6 +432,12 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
|
||||
pauseCtx->nameColorSet = 0;
|
||||
|
||||
if ((pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM)) {
|
||||
bool dpad = (CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CHECK_BTN_ALL(input->cur.button, BTN_CUP));
|
||||
bool pauseAnyCursor =
|
||||
pauseCtx->cursorSpecialPos == 0 &&
|
||||
((CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_RANDO_ONLY && IS_RANDO) ||
|
||||
(CVarGetInteger(CVAR_ENHANCEMENT("PauseAnyCursor"), 0) == PAUSE_ANY_CURSOR_ALWAYS_ON));
|
||||
|
||||
moveCursorResult = 0 || IsItemCycling();
|
||||
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_ITEM];
|
||||
|
||||
|
||||
@@ -59,11 +59,11 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) {
|
||||
s16 stepG;
|
||||
s16 stepB;
|
||||
u16 rgba16;
|
||||
bool dpad = CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0);
|
||||
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
if ((pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_MAP)) {
|
||||
bool dpad = CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0);
|
||||
pauseCtx->cursorColorSet = 0;
|
||||
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MAP];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user