From e344f6d0a10587582b4c113c4c14eb427e6109c3 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Thu, 2 Jun 2022 12:42:36 -0400 Subject: [PATCH 1/2] re-added randomizer checkbox & fixed LH sun --- libultraship/libultraship/SohImGuiImpl.cpp | 13 ++++++++++- soh/include/randomizer/menu.cpp | 9 ++------ soh/soh/Enhancements/randomizer.cpp | 5 ----- .../ovl_Item_Etcetera/z_item_etcetera.c | 22 +++++++++---------- .../ovl_file_choose/z_file_choose.c | 9 ++++++-- 5 files changed, 31 insertions(+), 27 deletions(-) diff --git a/libultraship/libultraship/SohImGuiImpl.cpp b/libultraship/libultraship/SohImGuiImpl.cpp index 4f46e7791..1946810b2 100644 --- a/libultraship/libultraship/SohImGuiImpl.cpp +++ b/libultraship/libultraship/SohImGuiImpl.cpp @@ -50,6 +50,8 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPAR using namespace Ship; bool oldCursorState = true; +u8 generated; + #define EXPERIMENTAL() \ ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 50, 50, 255)); \ ImGui::Text("Experimental"); \ @@ -423,7 +425,6 @@ namespace SohImGui { }); Game::InitSettings(); - CVar_SetS32("gRandomizer", 0); CVar_SetS32("gRandoGenerating", 0); CVar_SetS32("gDroppedNewSpoilerFile", 0); Game::SaveSettings(); @@ -434,6 +435,12 @@ namespace SohImGui { Game::SaveSettings(); needs_save = false; } + + if (generated) { + generated = 0; + randoThread.join(); + } + ImGuiProcessEvent(event); } @@ -1041,6 +1048,8 @@ namespace SohImGui { if (ImGui::BeginMenu("Randomizer")) { + EnhancementCheckbox("Enable Randomizer", "gRandomizer"); + if (ImGui::Button("Generate Seed")) { if (CVar_GetS32("gRandoGenerating", 0) == 0) { randoThread = std::thread(&SohImGui::GenerateRandomizerImgui); @@ -1278,6 +1287,8 @@ namespace SohImGui { Game::SaveSettings(); Game::LoadSettings(); + + generated = 1; } void DrawFramebufferAndGameInput(void) { diff --git a/soh/include/randomizer/menu.cpp b/soh/include/randomizer/menu.cpp index 219cfd6fd..231eb128c 100644 --- a/soh/include/randomizer/menu.cpp +++ b/soh/include/randomizer/menu.cpp @@ -517,13 +517,8 @@ void PrintOptionDescription() { std::string GenerateRandomizer() { // if a blank seed was entered, make a random one - if (Settings::seed.empty()) { - Settings::seed = std::to_string(rand()); - } else if (Settings::seed.rfind("seed_testing_count", 0) == 0) { - const int count = std::stoi(Settings::seed.substr(18), nullptr); - Playthrough::Playthrough_Repeat(count); - return ""; - } + srand(time(NULL)); + Settings::seed = std::to_string(rand()); int ret = Playthrough::Playthrough_Init(std::hash{}(Settings::seed)); if (ret < 0) { diff --git a/soh/soh/Enhancements/randomizer.cpp b/soh/soh/Enhancements/randomizer.cpp index 90fe9d517..d3fe5fbfb 100644 --- a/soh/soh/Enhancements/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer.cpp @@ -1157,11 +1157,6 @@ void Randomizer::ParseItemLocationsFile(const char* spoilerFileName) { Audio_PlaySoundGeneral(NA_SE_SY_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); return; } - - if (success) { - CVar_SetS32("gRandomizer", 1); - Game::SaveSettings(); - } } GetItemID Randomizer::GetRandomizedItemId(GetItemID ogId, s16 actorId, s16 actorParams, s16 sceneNum) { diff --git a/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c index 28b587983..7c2470e72 100644 --- a/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c +++ b/soh/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c @@ -83,7 +83,7 @@ void ItemEtcetera_Init(Actor* thisx, GlobalContext* globalCtx) { Actor_SetScale(&this->actor, 0.5f); this->futureActionFunc = func_80B858B4; if ((gSaveContext.eventChkInf[3] & 2 && !gSaveContext.n64ddFlag) || - (gSaveContext.n64ddFlag && Flags_GetTreasure(globalCtx, 0x1F))) { + (gSaveContext.n64ddFlag && Flags_GetTreasure(globalCtx, 0x1E))) { Actor_Kill(&this->actor); } break; @@ -120,18 +120,15 @@ void func_80B857D0(ItemEtcetera* this, GlobalContext* globalCtx) { void func_80B85824(ItemEtcetera* this, GlobalContext* globalCtx) { if (Actor_HasParent(&this->actor, globalCtx)) { - if ((this->actor.params & 0xFF) == 1) { - gSaveContext.eventChkInf[3] |= 2; - Flags_SetSwitch(globalCtx, 0xB); - + if ((this->actor.params & 0xFF) == 7) { if (gSaveContext.n64ddFlag) { - Flags_SetTreasure(globalCtx, 0x1E); + Flags_SetTreasure(globalCtx, 0x1F); } } Actor_Kill(&this->actor); } else { if (gSaveContext.n64ddFlag) { - s32 getItemId = GetRandomizedItemId(GI_ARROW_FIRE, this->actor.id, this->actor.params, globalCtx->sceneNum); + s32 getItemId = GetRandomizedItemIdFromKnownCheck(RC_LH_SUN, GI_ARROW_FIRE); func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f); } else { func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); @@ -146,7 +143,7 @@ void func_80B858B4(ItemEtcetera* this, GlobalContext* globalCtx) { Flags_SetSwitch(globalCtx, 0xB); if (gSaveContext.n64ddFlag) { - Flags_SetTreasure(globalCtx, 0x1F); + Flags_SetTreasure(globalCtx, 0x1E); } } Actor_Kill(&this->actor); @@ -154,7 +151,7 @@ void func_80B858B4(ItemEtcetera* this, GlobalContext* globalCtx) { if (0) {} // Necessary to match if (gSaveContext.n64ddFlag) { - s32 getItemId = GetRandomizedItemId(GI_LETTER_RUTO, this->actor.id, this->actor.params, globalCtx->sceneNum); + s32 getItemId = GetRandomizedItemIdFromKnownCheck(RC_LH_UNDERWATER_ITEM, GI_LETTER_RUTO); func_8002F434(&this->actor, globalCtx, getItemId, 30.0f, 50.0f); } else { func_8002F434(&this->actor, globalCtx, this->getItemId, 30.0f, 50.0f); @@ -234,9 +231,10 @@ void ItemEtcetera_Draw(Actor* thisx, GlobalContext* globalCtx) { ItemEtcetera* this = (ItemEtcetera*)thisx; s32 type = this->actor.params & 0xFF; - if (gSaveContext.n64ddFlag && (type == ITEM_ETC_ARROW_FIRE || type == ITEM_ETC_LETTER)) { - this->giDrawId = GetItemModelFromId( - GetRandomizedItemId(this->getItemId, this->actor.id, this->actor.params, globalCtx->sceneNum)); + if (gSaveContext.n64ddFlag && (type == ITEM_ETC_ARROW_FIRE)) { + this->giDrawId = GetItemModelFromId(GetRandomizedItemIdFromKnownCheck(RC_LH_SUN, GI_ARROW_FIRE)); + } else if (gSaveContext.n64ddFlag && (type == ITEM_ETC_ARROW_FIRE)) { + this->giDrawId = GetItemModelFromId(GetRandomizedItemIdFromKnownCheck(RC_LH_UNDERWATER_ITEM, GI_LETTER_RUTO)); } func_8002EBCC(&this->actor, globalCtx, 0); diff --git a/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index 01a71ec2a..6003a0100 100644 --- a/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -229,6 +229,7 @@ void DrawSeedHashSprites(FileChooseContext* this) { */ u8 generating; +u8 changedSeed; void FileChoose_UpdateMainMenu(GameState* thisx) { static u8 emptyName[] = { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }; @@ -245,13 +246,15 @@ void FileChoose_UpdateMainMenu(GameState* thisx) { Audio_PlayFanfare(NA_BGM_HORSE_GOAL); func_800F5E18(SEQ_PLAYER_BGM_MAIN, NA_BGM_FILE_SELECT, 0, 7, 1); generating = 0; + changedSeed = 1; return; } else if (generating) { return; } - if (CVar_GetS32("gDroppedNewSpoilerFile", 0) != 0 && !generating) { + if (CVar_GetS32("gDroppedNewSpoilerFile", 0) != 0 || changedSeed) { CVar_SetS32("gDroppedNewSpoilerFile", 0); + changedSeed = 0; const char* fileLoc = CVar_GetString("gSpoilerLog", ""); LoadItemLocations(fileLoc); } @@ -892,7 +895,9 @@ void FileChoose_DrawFileInfo(GameState* thisx, s16 fileIndex, s16 isActive) { s16 j; s16 deathCountSplit[3]; - DrawSeedHashSprites(this); + if (CVar_GetS32("gRandomizer", 0) != 0) { + DrawSeedHashSprites(this); + } if (1) {} From 6bb0c7befd173757bf9d7fce2e00a1c6ab362c90 Mon Sep 17 00:00:00 2001 From: briaguya Date: Thu, 2 Jun 2022 15:39:23 -0400 Subject: [PATCH 2/2] enum name changes + no keys in z64save --- soh/include/z64save.h | 1 - .../actors/ovl_En_Diving_Game/z_en_diving_game.c | 4 ++-- soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c | 4 ++-- soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c | 2 +- soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c | 2 +- soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c | 4 ++-- soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c | 10 +++++----- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/soh/include/z64save.h b/soh/include/z64save.h index 6923b01cf..9582d3851 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -4,7 +4,6 @@ #include "ultra64.h" #include "z64math.h" #include -#include typedef struct { /* 0x00 */ u8 buttonItems[4]; diff --git a/soh/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c b/soh/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c index 993bc3251..2301f576a 100644 --- a/soh/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c +++ b/soh/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c @@ -453,7 +453,7 @@ void func_809EEA00(EnDivingGame* this, GlobalContext* globalCtx) { if ((this->unk_292 == Message_GetState(&globalCtx->msgCtx) && Message_ShouldAdvance(globalCtx))) { Message_CloseTextbox(globalCtx); this->actor.parent = NULL; - func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f); + func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f); this->actionFunc = func_809EEA90; } } @@ -463,7 +463,7 @@ void func_809EEA90(EnDivingGame* this, GlobalContext* globalCtx) { if (Actor_HasParent(&this->actor, globalCtx)) { this->actionFunc = func_809EEAF8; } else { - func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f); + func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_ZD_DIVING_MINIGAME, GI_SCALE_SILVER) : GI_SCALE_SILVER, 90.0f, 10.0f); } } diff --git a/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c b/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c index 1ac892b9c..942b47c33 100644 --- a/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c +++ b/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c @@ -344,7 +344,7 @@ s16 EnGo2_GetStateGoronCityRollingBig(GlobalContext* globalCtx, EnGo2* this) { if(!gSaveContext.n64ddFlag) { bombBagUpgrade = CUR_CAPACITY(UPG_BOMB_BAG) == 30 ? GI_BOMB_BAG_40 : GI_BOMB_BAG_30; } else { - bombBagUpgrade = GetRandomizedItemIdFromKnownCheck(GC_ROLLING_GORON_AS_CHILD, GI_BOMB_BAG_40); + bombBagUpgrade = GetRandomizedItemIdFromKnownCheck(RC_GC_ROLLING_GORON_AS_CHILD, GI_BOMB_BAG_40); } EnGo2_GetItem(this, globalCtx, bombBagUpgrade); Message_CloseTextbox(globalCtx); @@ -513,7 +513,7 @@ s16 EnGo2_GetStateGoronCityLink(GlobalContext* globalCtx, EnGo2* this) { case TEXT_STATE_CLOSING: switch (this->actor.textId) { case 0x3036: - EnGo2_GetItem(this, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(GC_ROLLING_GORON_AS_ADULT, GI_TUNIC_GORON) : GI_TUNIC_GORON); + EnGo2_GetItem(this, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_GC_ROLLING_GORON_AS_ADULT, GI_TUNIC_GORON) : GI_TUNIC_GORON); this->actionFunc = EnGo2_SetupGetItem; return 2; case 0x3037: diff --git a/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c b/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c index fc8364d03..84fe6603a 100644 --- a/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c +++ b/soh/src/overlays/actors/ovl_En_Hy/z_en_hy.c @@ -659,7 +659,7 @@ s16 func_80A70058(GlobalContext* globalCtx, Actor* thisx) { gSaveContext.dogParams = 0; break; case 0x709F: - func_80A6F7CC(this, globalCtx, (gSaveContext.infTable[25] & 2) ? GI_RUPEE_BLUE : gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(MARKET_LOST_DOG, GI_HEART_PIECE) : GI_HEART_PIECE); + func_80A6F7CC(this, globalCtx, (gSaveContext.infTable[25] & 2) ? GI_RUPEE_BLUE : gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_MARKET_LOST_DOG, GI_HEART_PIECE) : GI_HEART_PIECE); this->actionFunc = func_80A714C4; break; } diff --git a/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c b/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c index afaa3a36c..3d84f137e 100644 --- a/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c +++ b/soh/src/overlays/actors/ovl_En_Ma1/z_en_ma1.c @@ -337,7 +337,7 @@ void func_80AA0EA0(EnMa1* this, GlobalContext* globalCtx) { this->actionFunc = func_80AA0EFC; } else { if (gSaveContext.n64ddFlag) { - GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(HC_MALON_EGG, GI_WEIRD_EGG); + GetItemID getItemId = GetRandomizedItemIdFromKnownCheck(RC_HC_MALON_EGG, GI_WEIRD_EGG); func_8002F434(&this->actor, globalCtx, getItemId, 120.0f, 10.0f); } else { func_8002F434(&this->actor, globalCtx, GI_WEIRD_EGG, 120.0f, 10.0f); diff --git a/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c index 70c96fd4e..8f4c512e3 100644 --- a/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -198,14 +198,14 @@ void func_80AACFA0(EnMk* this, GlobalContext* globalCtx) { gSaveContext.itemGetInf[1] |= 1; } else { // not sure when/how/if this is getting called - func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(LH_LAB_DIVE, GI_HEART_PIECE) : GI_HEART_PIECE, 10000.0f, 50.0f); + func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_LH_LAB_DIVE, GI_HEART_PIECE) : GI_HEART_PIECE, 10000.0f, 50.0f); } } void func_80AAD014(EnMk* this, GlobalContext* globalCtx) { if (Actor_TextboxIsClosing(&this->actor, globalCtx)) { this->actionFunc = func_80AACFA0; - func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(LH_LAB_DIVE, GI_HEART_PIECE) : GI_HEART_PIECE, 10000.0f, 50.0f); + func_8002F434(&this->actor, globalCtx, gSaveContext.n64ddFlag ? GetRandomizedItemIdFromKnownCheck(RC_LH_LAB_DIVE, GI_HEART_PIECE) : GI_HEART_PIECE, 10000.0f, 50.0f); } this->flags |= 1; diff --git a/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c index e6fd269d1..164249531 100644 --- a/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/soh/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -245,19 +245,19 @@ void EnSth_GivePlayerItem(EnSth* this, GlobalContext* globalCtx) { case GI_RUPEE_GOLD: break; case GI_WALLET_ADULT: - getItemId = GetRandomizedItemIdFromKnownCheck(KAK_10_GOLD_SKULLTULA_REWARD, GI_WALLET_ADULT); + getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_10_GOLD_SKULLTULA_REWARD, GI_WALLET_ADULT); break; case GI_STONE_OF_AGONY: - getItemId = GetRandomizedItemIdFromKnownCheck(KAK_20_GOLD_SKULLTULA_REWARD, GI_STONE_OF_AGONY); + getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_20_GOLD_SKULLTULA_REWARD, GI_STONE_OF_AGONY); break; case GI_WALLET_GIANT: - getItemId = GetRandomizedItemIdFromKnownCheck(KAK_30_GOLD_SKULLTULA_REWARD, GI_WALLET_GIANT); + getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_30_GOLD_SKULLTULA_REWARD, GI_WALLET_GIANT); break; case GI_BOMBCHUS_10: - getItemId = GetRandomizedItemIdFromKnownCheck(KAK_40_GOLD_SKULLTULA_REWARD, GI_BOMBCHUS_10); + getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_40_GOLD_SKULLTULA_REWARD, GI_BOMBCHUS_10); break; case GI_HEART_PIECE: - getItemId = GetRandomizedItemIdFromKnownCheck(KAK_50_GOLD_SKULLTULA_REWARD, GI_HEART_PIECE); + getItemId = GetRandomizedItemIdFromKnownCheck(RC_KAK_50_GOLD_SKULLTULA_REWARD, GI_HEART_PIECE); break; } } else {