diff --git a/libultraship/libultraship/SohImGuiImpl.cpp b/libultraship/libultraship/SohImGuiImpl.cpp index 76f3b863b..530c3707d 100644 --- a/libultraship/libultraship/SohImGuiImpl.cpp +++ b/libultraship/libultraship/SohImGuiImpl.cpp @@ -65,19 +65,28 @@ namespace SohImGui { bool needs_save = false; std::vector CustomTexts; int SelectedLanguage = CVar_GetS32("gLanguages", 0); //Default Language to 0=English 1=German 2=French + int SelectedHUD = CVar_GetS32("gHudColors", 1); //Default colors to Gamecube. + float hearts_colors[3] = {0,0,0}; + float hearts_dd_colors[3] = {0,0,0}; + float a_btn_colors[3] = {0,0,0}; + float b_btn_colors[3] = {0,0,0}; + float c_btn_colors[3] = {0,0,0}; + float start_btn_colors[3] = {0,0,0}; + float magic_border_colors[3] = {0,0,0}; + float magic_remaining_colors[3] = {0,0,0}; + float magic_use_colors[3] = {0,0,0}; + float minimap_colors[3] = {0,0,0}; + float rupee_colors[3] = {0,0,0}; + float smolekey_colors[3] = {0,0,0}; float kokiri_col[3] = { 0.118f, 0.41f, 0.106f }; float goron_col[3] = { 0.392f, 0.078f, 0.0f }; float zora_col[3] = { 0.0f, 0.235f, 0.392f }; - float navi_idle_i_col[3] = { 0.0f, 0.0f, 0.0f }; float navi_idle_o_col[3] = { 0.0f, 0.0f, 0.0f }; - float navi_npc_i_col[3] = { 0.0f, 0.0f, 0.0f }; float navi_npc_o_col[3] = { 0.0f, 0.0f, 0.0f }; - float navi_enemy_i_col[3] = { 0.0f, 0.0f, 0.0f }; float navi_enemy_o_col[3] = { 0.0f, 0.0f, 0.0f }; - float navi_prop_i_col[3] = { 0.0f, 0.0f, 0.0f }; float navi_prop_o_col[3] = { 0.0f, 0.0f, 0.0f }; @@ -104,50 +113,6 @@ namespace SohImGui { break; } - // OTRTODO: This gameplay specific stuff should not be in libultraship. This needs to be moved to soh and use sTunicColors - kokiri_col[0] = 30 / 255.0f; - kokiri_col[1] = 105 / 255.0f; - kokiri_col[2] = 27 / 255.0f; - - goron_col[0] = 100 / 255.0f; - goron_col[1] = 20 / 255.0f; - goron_col[2] = 0; - - zora_col[0] = 0; - zora_col[1] = 60 / 255.0f; - zora_col[2] = 100 / 255.0f; - - navi_idle_i_col[0] = 0; - navi_idle_i_col[1] = 0; - navi_idle_i_col[2] = 0; - - navi_idle_o_col[0] = 0; - navi_idle_o_col[1] = 0; - navi_idle_o_col[2] = 0; - - navi_npc_i_col[0] = 0; - navi_npc_i_col[1] = 0; - navi_npc_i_col[2] = 0; - - navi_npc_o_col[0] = 0; - navi_npc_o_col[1] = 0; - navi_npc_o_col[2] = 0; - - navi_enemy_i_col[0] = 0; - navi_enemy_i_col[1] = 0; - navi_enemy_i_col[2] = 0; - - navi_enemy_o_col[0] = 0; - navi_enemy_o_col[1] = 0; - navi_enemy_o_col[2] = 0; - - navi_prop_i_col[0] = 0; - navi_prop_i_col[1] = 0; - navi_prop_i_col[2] = 0; - - navi_prop_o_col[0] = 0; - navi_prop_o_col[1] = 0; - navi_prop_o_col[2] = 0; } void ImGuiBackendInit() { @@ -275,6 +240,85 @@ namespace SohImGui { stbi_image_free(img_data); } + void LoadInterfaceEditor(){//This function is necessary as without it IMGui wont load the updated float array. + hearts_colors[0] = (float)CVar_GetS32("gCCHeartsPrimR", 255)/255; + hearts_colors[1] = (float)CVar_GetS32("gCCHeartsPrimG", 70)/255; + hearts_colors[2] = (float)CVar_GetS32("gCCHeartsPrimB", 50)/255; + hearts_dd_colors[0] = (float)CVar_GetS32("gDDCCHeartsPrimR", 255)/255; + hearts_dd_colors[1] = (float)CVar_GetS32("gDDCCHeartsPrimG", 255)/255; + hearts_dd_colors[2] = (float)CVar_GetS32("gDDCCHeartsPrimB", 255)/255; + a_btn_colors[0] = (float)CVar_GetS32("gCCABtnPrimR", 90)/255; + a_btn_colors[1] = (float)CVar_GetS32("gCCABtnPrimG", 90)/255; + a_btn_colors[2] = (float)CVar_GetS32("gCCABtnPrimB", 255)/255; + b_btn_colors[0] = (float)CVar_GetS32("gCCBBtnPrimR", 0)/255; + b_btn_colors[1] = (float)CVar_GetS32("gCCBBtnPrimG", 150)/255; + b_btn_colors[2] = (float)CVar_GetS32("gCCBBtnPrimB", 0)/255; + c_btn_colors[0] = (float)CVar_GetS32("gCCCBtnPrimR", 255)/255; + c_btn_colors[1] = (float)CVar_GetS32("gCCCBtnPrimG", 160)/255; + c_btn_colors[2] = (float)CVar_GetS32("gCCCBtnPrimB", 0)/255; + start_btn_colors[0] = (float)CVar_GetS32("gCCStartBtnPrimR", 120)/255; + start_btn_colors[1] = (float)CVar_GetS32("gCCStartBtnPrimG", 120)/255; + start_btn_colors[2] = (float)CVar_GetS32("gCCStartBtnPrimB", 120)/255; + magic_border_colors[0] = (float)CVar_GetS32("gCCMagicBorderPrimR", 255)/255; + magic_border_colors[1] = (float)CVar_GetS32("gCCMagicBorderPrimG", 255)/255; + magic_border_colors[2] = (float)CVar_GetS32("gCCMagicBorderPrimB", 255)/255; + magic_use_colors[0] = (float)CVar_GetS32("gCCMagicPrimR", 250)/255; + magic_use_colors[1] = (float)CVar_GetS32("gCCMagicPrimG", 250)/255; + magic_use_colors[2] = (float)CVar_GetS32("gCCMagicPrimB", 0)/255; + magic_remaining_colors[0] = (float)CVar_GetS32("gCCMagicUsePrimR", 0)/255; + magic_remaining_colors[1] = (float)CVar_GetS32("gCCMagicUsePrimG", 200)/255; + magic_remaining_colors[2] = (float)CVar_GetS32("gCCMagicUsePrimB", 0)/255; + minimap_colors[0] = (float)CVar_GetS32("gCCMinimapPrimR", 0)/255; + minimap_colors[1] = (float)CVar_GetS32("gCCMinimapPrimG", 255)/255; + minimap_colors[2] = (float)CVar_GetS32("gCCMinimapPrimB", 255)/255; + rupee_colors[0] = (float)CVar_GetS32("gCCRupeePrimR", 200)/255; + rupee_colors[1] = (float)CVar_GetS32("gCCRupeePrimG", 255)/255; + rupee_colors[2] = (float)CVar_GetS32("gCCRupeePrimB", 100)/255; + smolekey_colors[0] = (float)CVar_GetS32("gCCKeysPrimR", 200)/255; + smolekey_colors[1] = (float)CVar_GetS32("gCCKeysPrimG", 230)/255; + smolekey_colors[2] = (float)CVar_GetS32("gCCKeysPrimB", 255)/255; + kokiri_col[0] = (float)CVar_GetS32("gTunic_Kokiri_R", 30)/255; + kokiri_col[1] = (float)CVar_GetS32("gTunic_Kokiri_G", 105)/255; + kokiri_col[2] = (float)CVar_GetS32("gTunic_Kokiri_B", 27)/255; + goron_col[0] = (float)CVar_GetS32("gTunic_Goron_R", 100)/255; + goron_col[1] = (float)CVar_GetS32("gTunic_Goron_G", 20)/255; + goron_col[2] = (float)CVar_GetS32("gTunic_Goron_B", 0)/255; + zora_col[0] = (float)CVar_GetS32("gTunic_Zora_R", 0)/255; + zora_col[1] = (float)CVar_GetS32("gTunic_Zora_G", 60)/255; + zora_col[2] = (float)CVar_GetS32("gTunic_Zora_B", 100)/255; + navi_idle_i_col[0] = (float)CVar_GetS32("gNavi_Idle_Inner_R", 255)/255; + navi_idle_i_col[1] = (float)CVar_GetS32("gNavi_Idle_Inner_G", 255)/255; + navi_idle_i_col[2] = (float)CVar_GetS32("gNavi_Idle_Inner_B", 255)/255; + navi_idle_o_col[0] = (float)CVar_GetS32("gNavi_Idle_Outer_R", 115)/255; + navi_idle_o_col[1] = (float)CVar_GetS32("gNavi_Idle_Outer_G", 230)/255; + navi_idle_o_col[2] = (float)CVar_GetS32("gNavi_Idle_Outer_B", 255)/255; + navi_npc_i_col[0] = (float)CVar_GetS32("gNavi_NPC_Inner_R", 100)/255; + navi_npc_i_col[1] = (float)CVar_GetS32("gNavi_NPC_Inner_G", 100)/255; + navi_npc_i_col[2] = (float)CVar_GetS32("gNavi_NPC_Inner_B", 255)/255; + navi_npc_o_col[0] = (float)CVar_GetS32("gNavi_NPC_Outer_R", 90)/255; + navi_npc_o_col[1] = (float)CVar_GetS32("gNavi_NPC_Outer_G", 90)/255; + navi_npc_o_col[2] = (float)CVar_GetS32("gNavi_NPC_Outer_B", 255)/255; + navi_enemy_i_col[0] = (float)CVar_GetS32("gNavi_Enemy_Inner_R", 255)/255; + navi_enemy_i_col[1] = (float)CVar_GetS32("gNavi_Enemy_Inner_G", 255)/255; + navi_enemy_i_col[2] = (float)CVar_GetS32("gNavi_Enemy_Inner_B", 0)/255; + navi_enemy_o_col[0] = (float)CVar_GetS32("gNavi_Enemy_Outer_R", 220)/255; + navi_enemy_o_col[1] = (float)CVar_GetS32("gNavi_Enemy_Outer_G", 220)/255; + navi_enemy_o_col[2] = (float)CVar_GetS32("gNavi_Enemy_Outer_B", 0)/255; + navi_prop_i_col[0] = (float)CVar_GetS32("gNavi_Prop_Inner_R", 0)/255; + navi_prop_i_col[1] = (float)CVar_GetS32("gNavi_Prop_Inner_G", 255)/255; + navi_prop_i_col[2] = (float)CVar_GetS32("gNavi_Prop_Inner_B", 0)/255; + navi_prop_o_col[0] = (float)CVar_GetS32("gNavi_Prop_Outer_R", 0)/255; + navi_prop_o_col[1] = (float)CVar_GetS32("gNavi_Prop_Outer_G", 220)/255; + navi_prop_o_col[2] = (float)CVar_GetS32("gNavi_Prop_Outer_B", 0)/255; + if (CVar_GetS32("gHudColors", 1) ==0) { + SelectedHUD = 0; + } else if (CVar_GetS32("gHudColors", 1) == 1) { + SelectedHUD = 1; + } else if (CVar_GetS32("gHudColors", 1) == 2) { + SelectedHUD = 2; + } + } + void LoadResource(const std::string& name, const std::string& path, const ImVec4& tint) { GfxRenderingAPI* api = gfx_get_current_rendering_api(); const auto res = static_cast(GlobalCtx2::GetInstance()->GetResourceManager()->LoadResource(path).get()); @@ -483,25 +527,22 @@ namespace SohImGui { } } - void EnhancementColor3(std::string text, std::string cvarName, float defaultColors[3]) - { - int r = CVar_GetS32((cvarName + "_Red").c_str(), (defaultColors[0] * 255.0f)); - int g = CVar_GetS32((cvarName + "_Green").c_str(), (defaultColors[1] * 255.0f)); - int b = CVar_GetS32((cvarName + "_Blue").c_str(), (defaultColors[2] * 255.0f)); + int ClampFloatToInt(float value, int min, int max){ + return fmin(fmax(value,min),max); + } - float colors[3]; - colors[0] = r / 255.0f; - colors[1] = g / 255.0f; - colors[2] = b / 255.0f; - - { - if (ImGui::ColorEdit3(text.c_str(), colors)) - { - CVar_SetS32((cvarName + "_Red").c_str(), (int)(colors[0] * 255)); - CVar_SetS32((cvarName + "_Green").c_str(), (int)(colors[1] * 255)); - CVar_SetS32((cvarName + "_Blue").c_str(), (int)(colors[2] * 255)); - needs_save = true; - } + void EnhancementColor3(std::string text, std::string cvarName, float ColorRGB[3], bool TitleSameLine) { + //Simplified. + ImGuiColorEditFlags flags = ImGuiColorEditFlags_None; + if (!TitleSameLine){ + ImGui::Text("%s", text.c_str()); + flags = ImGuiColorEditFlags_NoLabel; + } + if (ImGui::ColorEdit3(text.c_str(), ColorRGB, flags)) { + CVar_SetS32((cvarName+"R").c_str(), ClampFloatToInt(ColorRGB[0]*255,0,255)); + CVar_SetS32((cvarName+"G").c_str(), ClampFloatToInt(ColorRGB[1]*255,0,255)); + CVar_SetS32((cvarName+"B").c_str(), ClampFloatToInt(ColorRGB[2]*255,0,255)); + needs_save = true; } } @@ -515,6 +556,7 @@ namespace SohImGui { ImGuiBackendNewFrame(); ImGuiWMNewFrame(); ImGui::NewFrame(); + LoadInterfaceEditor(); const std::shared_ptr wnd = GlobalCtx2::GetInstance()->GetWindow(); ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoBackground | @@ -720,28 +762,21 @@ namespace SohImGui { ImGui::EndMenu(); } - if (ImGui::BeginMenu("Cosmetics")) - { - ImGui::Text("Tunics"); - ImGui::Separator(); - - EnhancementColor3("Kokiri Tunic", "gTunic_Kokiri", kokiri_col); - EnhancementColor3("Goron Tunic", "gTunic_Goron", goron_col); - EnhancementColor3("Zora Tunic", "gTunic_Zora", zora_col); - - ImGui::Text("Navi"); - ImGui::Separator(); - - EnhancementColor3("Navi Idle Inner", "gNavi_Idle_Inner", navi_idle_i_col); - EnhancementColor3("Navi Idle Outer", "gNavi_Idle_Outer", navi_idle_o_col); - EnhancementColor3("Navi NPC Inner", "gNavi_NPC_Inner", navi_npc_i_col); - EnhancementColor3("Navi NPC Outer", "gNavi_NPC_Outer", navi_npc_o_col); - EnhancementColor3("Navi Enemy Inner", "gNavi_Enemy_Inner", navi_enemy_i_col); - EnhancementColor3("Navi Enemy Outer", "gNavi_Enemy_Outer", navi_enemy_o_col); - EnhancementColor3("Navi Prop Inner", "gNavi_Prop_Inner", navi_prop_i_col); - EnhancementColor3("Navi Prop Outer", "gNavi_Prop_Outer", navi_prop_o_col); - - ImGui::EndMenu(); + if (ImGui::BeginMenu("Cosmetics")) { + EnhancementCheckbox("Cosmetics editor", "gCosmticsEditor"); + Tooltip("Edit Navi and Link's Tunics color."); + EnhancementCheckbox("HUD Margins editor", "gUseMargins"); + EnhancementRadioButton("N64 interface", "gHudColors", 0); + Tooltip("Change interface color to N64 style."); + EnhancementRadioButton("Gamecube interface", "gHudColors", 1); + Tooltip("Change interface color to Gamecube style."); + EnhancementRadioButton("Custom interface", "gHudColors", 2); + Tooltip("Change interface color to your own made style."); + if (CVar_GetS32("gHudColors", 1) == 2) { + EnhancementCheckbox("Interface editor", "gColorsEditor"); + Tooltip("Edit the colors used for your own interface"); + } + ImGui::EndMenu(); } if (ImGui::BeginMenu("Cheats")) @@ -788,6 +823,126 @@ namespace SohImGui { ImGui::EndMenu(); } + bool Margins_isOpen = CVar_GetS32("gUseMargins", 0); + bool Cosmetics_isOpen = CVar_GetS32("gCosmticsEditor", 0); + bool Interface_isOpen = CVar_GetS32("gColorsEditor", 0); + + if (Margins_isOpen) { + if (!Margins_isOpen) { + return; + } + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0)); + ImGui::Begin("Margins Editor", nullptr, ImGuiWindowFlags_NoFocusOnAppearing); + if (ImGui::BeginTabBar("Margins Editor", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { + if (ImGui::BeginTabItem("Interface margins")) { + EnhancementCheckbox("Use margins", "gHUDMargins"); + Tooltip("Enable/Disable custom margins. \nIf disabled you will have original margins"); + EnhancementSliderInt("Top : %dx", "##UIMARGINT", "gHUDMargin_T", -20, 20, ""); + EnhancementSliderInt("Left: %dx", "##UIMARGINL", "gHUDMargin_L", -25, 25, ""); + EnhancementSliderInt("Right: %dx", "##UIMARGINR", "gHUDMargin_R", -25, 25, ""); + EnhancementSliderInt("Bottom: %dx", "##UIMARGINB", "gHUDMargin_B", -20, 20, ""); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + ImGui::PopStyleColor(); + ImGui::End(); + } + if (Cosmetics_isOpen) { + if (!Cosmetics_isOpen) { + return; + } + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0)); + ImGui::Begin("Cosmetics Editor", nullptr, ImGuiWindowFlags_NoFocusOnAppearing); + if (ImGui::BeginTabBar("Cosmetics Editor", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { + if (ImGui::BeginTabItem("Navi")) { + EnhancementCheckbox("Custom colors for Navi", "gUseNaviCol"); + Tooltip("Enable/Disable custom Navi's colors. \nIf disabled you will have original colors for Navi.\nColors are refreshed when Navi goes back in your pockets"); + EnhancementColor3("Navi Idle Inner", "gNavi_Idle_Inner_", navi_idle_i_col, false); + Tooltip("Inner color for Navi (idle flying around)"); + EnhancementColor3("Navi Idle Outer", "gNavi_Idle_Outer_", navi_idle_o_col, false); + Tooltip("Outer color for Navi (idle flying around)"); + ImGui::Separator(); + EnhancementColor3("Navi NPC Inner", "gNavi_NPC_Inner_", navi_npc_i_col, false); + Tooltip("Inner color for Navi (when Navi fly around NPCs)"); + EnhancementColor3("Navi NPC Outer", "gNavi_NPC_Outer_", navi_npc_o_col, false); + Tooltip("Outer color for Navi (when Navi fly around NPCs)"); + ImGui::Separator(); + EnhancementColor3("Navi Enemy Inner", "gNavi_Enemy_Inner_", navi_enemy_i_col, false); + Tooltip("Inner color for Navi (when Navi fly around Enemies or Bosses)"); + EnhancementColor3("Navi Enemy Outer", "gNavi_Enemy_Outer_", navi_enemy_o_col, false); + Tooltip("Outer color for Navi (when Navi fly around Enemies or Bosses)"); + ImGui::Separator(); + EnhancementColor3("Navi Prop Inner", "gNavi_Prop_Inner_", navi_prop_i_col, false); + Tooltip("Inner color for Navi (when Navi fly around props (signs etc))"); + EnhancementColor3("Navi Prop Outer", "gNavi_Prop_Outer_", navi_prop_o_col, false); + Tooltip("Outer color for Navi (when Navi fly around props (signs etc))"); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Tunics")) { + EnhancementCheckbox("Custom colors on tunics", "gUseTunicsCol"); + Tooltip("Enable/Disable custom Link's tunics colors. \nIf disabled you will have original colors for Link's tunics"); + EnhancementColor3("Kokiri Tunic", "gTunic_Kokiri_", kokiri_col, false); + ImGui::Separator(); + EnhancementColor3("Goron Tunic", "gTunic_Goron_", goron_col, false); + ImGui::Separator(); + EnhancementColor3("Zora Tunic", "gTunic_Zora_", zora_col, false); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + ImGui::PopStyleColor(); + ImGui::End(); + } + if (Interface_isOpen) { + if (!Interface_isOpen) { + return; + } + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0)); + ImGui::Begin("Interface Editor", nullptr, ImGuiWindowFlags_NoFocusOnAppearing); + if (ImGui::BeginTabBar("Interface Editor", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { + if (ImGui::BeginTabItem("Hearts")) { + EnhancementColor3("Hearts inner", "gCCHeartsPrim", hearts_colors, false); + Tooltip("Hearts inner color (red in original)\nAffect both Normal Hearts and the ones in Double Defense"); + EnhancementColor3("Hearts double def", "gDDCCHeartsPrim", hearts_dd_colors, false); + Tooltip("Hearts outline color (white in original)\nAffect Double Defense outline only"); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Buttons")) { + EnhancementColor3("A Buttons", "gCCABtnPrim", a_btn_colors, false); + Tooltip("A Buttons colors (Green in original Gamecube)\nAffect A buttons colors on interface, in shops, messages boxes, ocarina notes and inventory cursors"); + EnhancementColor3("B Buttons", "gCCBBtnPrim", b_btn_colors, false); + Tooltip("B Button colors (Red in original Gamecube)\nAffect B button colors on interface"); + EnhancementColor3("C Buttons", "gCCCBtnPrim", c_btn_colors, false); + Tooltip("C Buttons colors (Yellowish / Oranges in originals)\nAffect C buttons colors on interface, in inventory and ocarina notes"); + EnhancementColor3("Start Buttons", "gCCStartBtnPrim", start_btn_colors, false); + Tooltip("Start Button colors (gray in Gamecube)\nAffect Start button colors in inventory"); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Magic Bar")) { + EnhancementColor3("Magic bar borders", "gCCMagicBorderPrim", magic_border_colors, false); + Tooltip("Affect the border of the magic bar when being used\nWhite flash in original game"); + EnhancementColor3("Magic bar main color", "gCCMagicPrim", magic_remaining_colors, false); + Tooltip("Affect the magic bar color\nGreen in original game"); + EnhancementColor3("Magic bar being used", "gCCMagicUsePrim", magic_use_colors, false); + Tooltip("Affect the magic bar when being used\nYellow in original game"); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Misc")) { + EnhancementColor3("Minimap color", "gCCMinimapPrim", minimap_colors, false); + Tooltip("Affect the Dungeon and Overworld minimaps"); + EnhancementColor3("Rupee icon color", "gCCRupeePrim", rupee_colors, false); + Tooltip("Affect the Rupee icon on interface\nGreen by default"); + EnhancementColor3("Small Keys icon color", "gCCKeysPrim", smolekey_colors, false); + Tooltip("Affect the Small keys icon on interface\nGray by default"); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + ImGui::PopStyleColor(); + ImGui::End(); + } + for (const auto& category : windowCategories) { if (ImGui::BeginMenu(category.first.c_str())) { for (const std::string& name : category.second) { diff --git a/libultraship/libultraship/SohImGuiImpl.h b/libultraship/libultraship/SohImGuiImpl.h index dd0ec9fd3..210a26db9 100644 --- a/libultraship/libultraship/SohImGuiImpl.h +++ b/libultraship/libultraship/SohImGuiImpl.h @@ -68,6 +68,7 @@ namespace SohImGui { void EnhancementCheckbox(std::string text, std::string cvarName); void EnhancementSliderInt(std::string text, std::string id, std::string cvarName, int min, int max, std::string format); void EnhancementSliderFloat(std::string text, std::string id, std::string cvarName, float min, float max, std::string format, float defaultValue); + void EnhancementColor3(std::string text, std::string cvarName, float ColorRGB[3], bool TitleSameLine); void DrawMainMenuAndCalculateGameSize(void); @@ -78,6 +79,7 @@ namespace SohImGui { void BindCmd(const std::string& cmd, CommandEntry entry); void AddWindow(const std::string& category, const std::string& name, WindowDrawFunc drawFunc); void LoadResource(const std::string& name, const std::string& path, const ImVec4& tint = ImVec4(1, 1, 1, 1)); + void LoadInterfaceEditor(); ImTextureID GetTextureByID(int id); ImTextureID GetTextureByName(const std::string& name); } diff --git a/soh/soh/Enhancements/bootcommands.c b/soh/soh/Enhancements/bootcommands.c index ffe3c70d0..fa6db7487 100644 --- a/soh/soh/Enhancements/bootcommands.c +++ b/soh/soh/Enhancements/bootcommands.c @@ -32,6 +32,9 @@ void BootCommands_Init() CVar_RegisterS32("gNewDrops", 0); CVar_RegisterS32("gVisualAgony", 0); CVar_RegisterS32("gLanguages", 0); //0 = English / 1 = German / 2 = French + CVar_RegisterS32("gHudColors", 1); //0 = N64 / 1 = NGC / 2 = Custom + CVar_RegisterS32("gUseNaviCol", 0); + CVar_RegisterS32("gUseTunicsCol", 0); } //void BootCommands_ParseBootArgs(char* str) diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c index caa16a7ec..ba5d4dcd6 100644 --- a/soh/src/code/z_actor.c +++ b/soh/src/code/z_actor.c @@ -335,38 +335,59 @@ void func_8002BE98(TargetContext* targetCtx, s32 actorCategory, GlobalContext* g void func_8002BF60(TargetContext* targetCtx, Actor* actor, s32 actorCategory, GlobalContext* globalCtx) { NaviColor* naviColor = &sNaviColorList[actorCategory]; - if (actorCategory == ACTORCAT_PLAYER) { - naviColor->inner.r = CVar_GetS32("gNavi_Idle_Inner_Red", naviColor->inner.r); - naviColor->inner.g = CVar_GetS32("gNavi_Idle_Inner_Green", naviColor->inner.g); - naviColor->inner.b = CVar_GetS32("gNavi_Idle_Inner_Blue", naviColor->inner.b); - naviColor->outer.r = CVar_GetS32("gNavi_Idle_Outer_Red", naviColor->outer.r); - naviColor->outer.g = CVar_GetS32("gNavi_Idle_Outer_Green", naviColor->outer.g); - naviColor->outer.b = CVar_GetS32("gNavi_Idle_Outer_Blue", naviColor->outer.b); - } - if (actorCategory == ACTORCAT_NPC) { - naviColor->inner.r = CVar_GetS32("gNavi_NPC_Inner_Red", naviColor->inner.r); - naviColor->inner.g = CVar_GetS32("gNavi_NPC_Inner_Green", naviColor->inner.g); - naviColor->inner.b = CVar_GetS32("gNavi_NPC_Inner_Blue", naviColor->inner.b); - naviColor->outer.r = CVar_GetS32("gNavi_NPC_Outer_Red", naviColor->outer.r); - naviColor->outer.g = CVar_GetS32("gNavi_NPC_Outer_Green", naviColor->outer.g); - naviColor->outer.b = CVar_GetS32("gNavi_NPC_Outer_Blue", naviColor->outer.b); - } - if (actorCategory == ACTORCAT_BOSS || actorCategory == ACTORCAT_ENEMY) { - naviColor->inner.r = CVar_GetS32("gNavi_Enemy_Inner_Red", naviColor->inner.r); - naviColor->inner.g = CVar_GetS32("gNavi_Enemy_Inner_Green", naviColor->inner.g); - naviColor->inner.b = CVar_GetS32("gNavi_Enemy_Inner_Blue", naviColor->inner.b); - naviColor->outer.r = CVar_GetS32("gNavi_Enemy_Outer_Red", naviColor->outer.r); - naviColor->outer.g = CVar_GetS32("gNavi_Enemy_Outer_Green", naviColor->outer.g); - naviColor->outer.b = CVar_GetS32("gNavi_Enemy_Outer_Blue", naviColor->outer.b); - } - if (actorCategory == ACTORCAT_PROP) { - naviColor->inner.r = CVar_GetS32("gNavi_Prop_Inner_Red", naviColor->inner.r); - naviColor->inner.g = CVar_GetS32("gNavi_Prop_Inner_Green", naviColor->inner.g); - naviColor->inner.b = CVar_GetS32("gNavi_Prop_Inner_Blue", naviColor->inner.b); - naviColor->outer.r = CVar_GetS32("gNavi_Prop_Outer_Red", naviColor->outer.r); - naviColor->outer.g = CVar_GetS32("gNavi_Prop_Outer_Green", naviColor->outer.g); - naviColor->outer.b = CVar_GetS32("gNavi_Prop_Outer_Blue", naviColor->outer.b); + + if (CVar_GetS32("gUseNaviCol",0) != 1 ) { + if (actorCategory == ACTORCAT_PLAYER) { + naviColor->inner.r = 255; naviColor->inner.g = 255; naviColor->inner.b = 255; + naviColor->outer.r = 115; naviColor->outer.g = 230; naviColor->outer.b = 255; + } + if (actorCategory == ACTORCAT_NPC) { + naviColor->inner.r = 100; naviColor->inner.g = 100; naviColor->inner.b = 255; + naviColor->outer.r = 90; naviColor->outer.g = 90; naviColor->outer.b = 255; + } + if (actorCategory == ACTORCAT_BOSS || actorCategory == ACTORCAT_ENEMY) { + naviColor->inner.r = 255; naviColor->inner.g = 255; naviColor->inner.b = 0; + naviColor->outer.r = 220; naviColor->outer.g = 220; naviColor->outer.b = 0; + } + if (actorCategory == ACTORCAT_PROP) { + naviColor->inner.r = 0; naviColor->inner.g = 255; naviColor->inner.b = 90; + naviColor->outer.r = 0; naviColor->outer.g = 220; naviColor->outer.b = 0; + } + } else { + if (actorCategory == ACTORCAT_PLAYER) { + naviColor->inner.r = CVar_GetS32("gNavi_Idle_Inner_R", naviColor->inner.r); + naviColor->inner.g = CVar_GetS32("gNavi_Idle_Inner_G", naviColor->inner.g); + naviColor->inner.b = CVar_GetS32("gNavi_Idle_Inner_B", naviColor->inner.b); + naviColor->outer.r = CVar_GetS32("gNavi_Idle_Outer_R", naviColor->outer.r); + naviColor->outer.g = CVar_GetS32("gNavi_Idle_Outer_G", naviColor->outer.g); + naviColor->outer.b = CVar_GetS32("gNavi_Idle_Outer_B", naviColor->outer.b); + } + if (actorCategory == ACTORCAT_NPC) { + naviColor->inner.r = CVar_GetS32("gNavi_NPC_Inner_R", naviColor->inner.r); + naviColor->inner.g = CVar_GetS32("gNavi_NPC_Inner_G", naviColor->inner.g); + naviColor->inner.b = CVar_GetS32("gNavi_NPC_Inner_B", naviColor->inner.b); + naviColor->outer.r = CVar_GetS32("gNavi_NPC_Outer_R", naviColor->outer.r); + naviColor->outer.g = CVar_GetS32("gNavi_NPC_Outer_G", naviColor->outer.g); + naviColor->outer.b = CVar_GetS32("gNavi_NPC_Outer_B", naviColor->outer.b); + } + if (actorCategory == ACTORCAT_BOSS || actorCategory == ACTORCAT_ENEMY) { + naviColor->inner.r = CVar_GetS32("gNavi_Enemy_Inner_R", naviColor->inner.r); + naviColor->inner.g = CVar_GetS32("gNavi_Enemy_Inner_G", naviColor->inner.g); + naviColor->inner.b = CVar_GetS32("gNavi_Enemy_Inner_B", naviColor->inner.b); + naviColor->outer.r = CVar_GetS32("gNavi_Enemy_Outer_R", naviColor->outer.r); + naviColor->outer.g = CVar_GetS32("gNavi_Enemy_Outer_G", naviColor->outer.g); + naviColor->outer.b = CVar_GetS32("gNavi_Enemy_Outer_B", naviColor->outer.b); + } + if (actorCategory == ACTORCAT_PROP) { + naviColor->inner.r = CVar_GetS32("gNavi_Prop_Inner_R", naviColor->inner.r); + naviColor->inner.g = CVar_GetS32("gNavi_Prop_Inner_G", naviColor->inner.g); + naviColor->inner.b = CVar_GetS32("gNavi_Prop_Inner_B", naviColor->inner.b); + naviColor->outer.r = CVar_GetS32("gNavi_Prop_Outer_R", naviColor->outer.r); + naviColor->outer.g = CVar_GetS32("gNavi_Prop_Outer_G", naviColor->outer.g); + naviColor->outer.b = CVar_GetS32("gNavi_Prop_Outer_B", naviColor->outer.b); + } } + targetCtx->naviRefPos.x = actor->focus.pos.x; targetCtx->naviRefPos.y = actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y); targetCtx->naviRefPos.z = actor->focus.pos.z; diff --git a/soh/src/code/z_lifemeter.c b/soh/src/code/z_lifemeter.c index 5f1863440..30b18683f 100644 --- a/soh/src/code/z_lifemeter.c +++ b/soh/src/code/z_lifemeter.c @@ -1,6 +1,11 @@ #include "global.h" #include "textures/parameter_static/parameter_static.h" +s16 Top_LM_Margin = 0; +s16 Left_LM_Margin = 0; +s16 Right_LM_Margin = 0; +s16 Bottom_LM_Margin = 0; + static s16 sHeartsPrimColors[3][3] = { { HEARTS_PRIM_R, HEARTS_PRIM_G, HEARTS_PRIM_B }, { HEARTS_BURN_PRIM_R, HEARTS_BURN_PRIM_G, HEARTS_BURN_PRIM_B }, // unused @@ -106,6 +111,9 @@ static s16 sHeartsDDEnvFactors[3][3] = { }; // Current colors for the double defense hearts +s16 HeartInner[3] = {HEARTS_PRIM_R,HEARTS_PRIM_G,HEARTS_PRIM_B}; +s16 HeartDDOutline[3] = {HEARTS_DD_PRIM_R,HEARTS_DD_PRIM_G,HEARTS_DD_PRIM_B}; +s16 HeartDDInner[3] = {HEARTS_DD_ENV_R,HEARTS_DD_ENV_G,HEARTS_DD_ENV_B}; s16 sBeatingHeartsDDPrim[3]; s16 sBeatingHeartsDDEnv[3]; s16 sHeartsDDPrim[2][3]; @@ -113,35 +121,47 @@ s16 sHeartsDDEnv[2][3]; void HealthMeter_Init(GlobalContext* globalCtx) { InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; - + if (CVar_GetS32("gHudColors", 1) == 2) { + HeartInner[0] = CVar_GetS32("gCCHeartsPrimR", 90); + HeartInner[1] = CVar_GetS32("gCCHeartsPrimG", 90); + HeartInner[2] = CVar_GetS32("gCCHeartsPrimB", 90); + HeartDDOutline[0] = CVar_GetS32("gDDCCHeartsPrimR", 90); + HeartDDOutline[1] = CVar_GetS32("gDDCCHeartsPrimG", 90); + HeartDDOutline[2] = CVar_GetS32("gDDCCHeartsPrimB", 90); + } + interfaceCtx->unk_228 = 0x140; interfaceCtx->unk_226 = gSaveContext.health; interfaceCtx->unk_22A = interfaceCtx->unk_1FE = 0; interfaceCtx->unk_22C = interfaceCtx->unk_200 = 0; - interfaceCtx->heartsPrimR[0] = HEARTS_PRIM_R; - interfaceCtx->heartsPrimG[0] = HEARTS_PRIM_G; - interfaceCtx->heartsPrimB[0] = HEARTS_PRIM_B; + interfaceCtx->heartsPrimR[0] = HeartInner[0]; + interfaceCtx->heartsPrimG[0] = HeartInner[1]; + interfaceCtx->heartsPrimB[0] = HeartInner[2]; interfaceCtx->heartsEnvR[0] = HEARTS_ENV_R; interfaceCtx->heartsEnvG[0] = HEARTS_ENV_G; interfaceCtx->heartsEnvB[0] = HEARTS_ENV_B; - interfaceCtx->heartsPrimR[1] = HEARTS_PRIM_R; - interfaceCtx->heartsPrimG[1] = HEARTS_PRIM_G; - interfaceCtx->heartsPrimB[1] = HEARTS_PRIM_B; + interfaceCtx->heartsPrimR[1] = HeartInner[0]; + interfaceCtx->heartsPrimG[1] = HeartInner[1]; + interfaceCtx->heartsPrimB[1] = HeartInner[2]; interfaceCtx->heartsEnvR[1] = HEARTS_ENV_R; interfaceCtx->heartsEnvG[1] = HEARTS_ENV_G; interfaceCtx->heartsEnvB[1] = HEARTS_ENV_B; - sHeartsDDPrim[0][0] = sHeartsDDPrim[1][0] = HEARTS_DD_PRIM_R; - sHeartsDDPrim[0][1] = sHeartsDDPrim[1][1] = HEARTS_DD_PRIM_G; - sHeartsDDPrim[0][2] = sHeartsDDPrim[1][2] = HEARTS_DD_PRIM_B; + sHeartsDDPrim[0][0] = sHeartsDDPrim[1][0] = HeartDDOutline[0]; + sHeartsDDPrim[0][1] = sHeartsDDPrim[1][1] = HeartDDOutline[1]; + sHeartsDDPrim[0][2] = sHeartsDDPrim[1][2] = HeartDDOutline[2]; - sHeartsDDEnv[0][0] = sHeartsDDEnv[1][0] = HEARTS_DD_ENV_R; - sHeartsDDEnv[0][1] = sHeartsDDEnv[1][1] = HEARTS_DD_ENV_G; - sHeartsDDEnv[0][2] = sHeartsDDEnv[1][2] = HEARTS_DD_ENV_B; + sHeartsDDPrim[2][0] = HeartInner[0]; + sHeartsDDPrim[2][1] = HeartInner[1]; + sHeartsDDPrim[2][2] = HeartInner[2]; + + sHeartsDDEnv[0][0] = sHeartsDDEnv[1][0] = HeartDDInner[0]; + sHeartsDDEnv[0][1] = sHeartsDDEnv[1][1] = HeartDDInner[1]; + sHeartsDDEnv[0][2] = sHeartsDDEnv[1][2] = HeartDDInner[2]; } void HealthMeter_Update(GlobalContext* globalCtx) { @@ -154,7 +174,33 @@ void HealthMeter_Update(GlobalContext* globalCtx) { s16 gFactor; s16 bFactor; - if (interfaceCtx) {} + if (CVar_GetS32("gHUDMargins", 0) != 0) { + Top_LM_Margin = CVar_GetS32("gHUDMargin_T", 0); + Left_LM_Margin = CVar_GetS32("gHUDMargin_L", 0); + Right_LM_Margin = CVar_GetS32("gHUDMargin_R", 0); + Bottom_LM_Margin = CVar_GetS32("gHUDMargin_B", 0); + } else { + Top_LM_Margin = 0; + Left_LM_Margin = 0; + Right_LM_Margin = 0; + Bottom_LM_Margin = 0; + } + + if (CVar_GetS32("gHudColors", 1) == 2) { + HeartInner[0] = CVar_GetS32("gCCHeartsPrimR", sHeartsPrimColors[0][0]); + HeartInner[1] = CVar_GetS32("gCCHeartsPrimG", sHeartsPrimColors[0][1]); + HeartInner[2] = CVar_GetS32("gCCHeartsPrimB", sHeartsPrimColors[0][2]); + HeartDDOutline[0] = CVar_GetS32("gDDCCHeartsPrimR", sHeartsDDPrim[0][0]); + HeartDDOutline[1] = CVar_GetS32("gDDCCHeartsPrimG", sHeartsDDPrim[0][1]); + HeartDDOutline[2] = CVar_GetS32("gDDCCHeartsPrimB", sHeartsDDPrim[0][2]); + } else { + HeartInner[0] = sHeartsPrimColors[0][0]; + HeartInner[1] = sHeartsPrimColors[0][1]; + HeartInner[2] = sHeartsPrimColors[0][2]; + HeartDDOutline[0] = sHeartsDDPrim[0][0]; + HeartDDOutline[1] = sHeartsDDPrim[0][1]; + HeartDDOutline[2] = sHeartsDDPrim[0][2]; + } if (interfaceCtx->unk_200 != 0) { interfaceCtx->unk_1FE--; @@ -172,17 +218,23 @@ void HealthMeter_Update(GlobalContext* globalCtx) { ddFactor = factor; - interfaceCtx->heartsPrimR[0] = HEARTS_PRIM_R; - interfaceCtx->heartsPrimG[0] = HEARTS_PRIM_G; - interfaceCtx->heartsPrimB[0] = HEARTS_PRIM_B; + interfaceCtx->heartsPrimR[0] = HeartInner[0]; + interfaceCtx->heartsPrimG[0] = HeartInner[1]; + interfaceCtx->heartsPrimB[0] = HeartInner[2]; interfaceCtx->heartsEnvR[0] = HEARTS_ENV_R; interfaceCtx->heartsEnvG[0] = HEARTS_ENV_G; interfaceCtx->heartsEnvB[0] = HEARTS_ENV_B; - interfaceCtx->heartsPrimR[1] = sHeartsPrimColors[type][0]; - interfaceCtx->heartsPrimG[1] = sHeartsPrimColors[type][1]; - interfaceCtx->heartsPrimB[1] = sHeartsPrimColors[type][2]; + if (CVar_GetS32("gHudColors", 1) == 2) { + interfaceCtx->heartsPrimR[1] = HeartInner[0]; + interfaceCtx->heartsPrimG[1] = HeartInner[1]; + interfaceCtx->heartsPrimB[1] = HeartInner[2]; + } else { + interfaceCtx->heartsPrimR[1] = sHeartsPrimColors[type][0]; + interfaceCtx->heartsPrimG[1] = sHeartsPrimColors[type][1]; + interfaceCtx->heartsPrimB[1] = sHeartsPrimColors[type][2]; + } interfaceCtx->heartsEnvR[1] = sHeartsEnvColors[type][0]; interfaceCtx->heartsEnvG[1] = sHeartsEnvColors[type][1]; @@ -192,52 +244,90 @@ void HealthMeter_Update(GlobalContext* globalCtx) { gFactor = sHeartsPrimFactors[0][1] * factor; bFactor = sHeartsPrimFactors[0][2] * factor; - interfaceCtx->beatingHeartPrim[0] = (u8)(rFactor + HEARTS_PRIM_R) & 0xFF; - interfaceCtx->beatingHeartPrim[1] = (u8)(gFactor + HEARTS_PRIM_G) & 0xFF; - interfaceCtx->beatingHeartPrim[2] = (u8)(bFactor + HEARTS_PRIM_B) & 0xFF; + interfaceCtx->beatingHeartPrim[0] = (u8)(rFactor + HeartInner[0]) & 0xFF; + interfaceCtx->beatingHeartPrim[1] = (u8)(gFactor + HeartInner[1]) & 0xFF; + interfaceCtx->beatingHeartPrim[2] = (u8)(bFactor + HeartInner[2]) & 0xFF; rFactor = sHeartsEnvFactors[0][0] * factor; gFactor = sHeartsEnvFactors[0][1] * factor; bFactor = sHeartsEnvFactors[0][2] * factor; - if (1) {} - ddType = type; - interfaceCtx->beatingHeartEnv[0] = (u8)(rFactor + HEARTS_ENV_R) & 0xFF; interfaceCtx->beatingHeartEnv[1] = (u8)(gFactor + HEARTS_ENV_G) & 0xFF; interfaceCtx->beatingHeartEnv[2] = (u8)(bFactor + HEARTS_ENV_B) & 0xFF; - sHeartsDDPrim[0][0] = HEARTS_DD_PRIM_R; - sHeartsDDPrim[0][1] = HEARTS_DD_PRIM_G; - sHeartsDDPrim[0][2] = HEARTS_DD_PRIM_B; + ddType = type; - sHeartsDDEnv[0][0] = HEARTS_DD_ENV_R; - sHeartsDDEnv[0][1] = HEARTS_DD_ENV_G; - sHeartsDDEnv[0][2] = HEARTS_DD_ENV_B; + sHeartsDDPrim[0][0] = HeartDDOutline[0]; + sHeartsDDPrim[0][1] = HeartDDOutline[1]; + sHeartsDDPrim[0][2] = HeartDDOutline[2]; - sHeartsDDPrim[1][0] = sHeartsDDPrimColors[ddType][0]; - sHeartsDDPrim[1][1] = sHeartsDDPrimColors[ddType][1]; - sHeartsDDPrim[1][2] = sHeartsDDPrimColors[ddType][2]; + sHeartsDDEnv[0][0] = HeartDDInner[0]; + sHeartsDDEnv[0][1] = HeartDDInner[1]; + sHeartsDDEnv[0][2] = HeartDDInner[2]; - sHeartsDDEnv[1][0] = sHeartsDDEnvColors[ddType][0]; - sHeartsDDEnv[1][1] = sHeartsDDEnvColors[ddType][1]; - sHeartsDDEnv[1][2] = sHeartsDDEnvColors[ddType][2]; + if (CVar_GetS32("gHudColors", 1) == 2) { + sHeartsDDPrim[2][0] = HeartInner[0]; + sHeartsDDPrim[2][1] = HeartInner[1]; + sHeartsDDPrim[2][2] = HeartInner[2]; - rFactor = sHeartsDDPrimFactors[ddType][0] * ddFactor; - gFactor = sHeartsDDPrimFactors[ddType][1] * ddFactor; - bFactor = sHeartsDDPrimFactors[ddType][2] * ddFactor; + sHeartsDDPrim[1][0] = HeartDDOutline[0]; + sHeartsDDPrim[1][1] = HeartDDOutline[1]; + sHeartsDDPrim[1][2] = HeartDDOutline[2]; - sBeatingHeartsDDPrim[0] = (u8)(rFactor + HEARTS_DD_PRIM_R) & 0xFF; - sBeatingHeartsDDPrim[1] = (u8)(gFactor + HEARTS_DD_PRIM_G) & 0xFF; - sBeatingHeartsDDPrim[2] = (u8)(bFactor + HEARTS_DD_PRIM_B) & 0xFF; + sHeartsDDEnv[1][0] = HeartDDInner[0]; + sHeartsDDEnv[1][1] = HeartDDInner[1]; + sHeartsDDEnv[1][2] = HeartDDInner[2]; - rFactor = sHeartsDDEnvFactors[ddType][0] * ddFactor; - gFactor = sHeartsDDEnvFactors[ddType][1] * ddFactor; - bFactor = sHeartsDDEnvFactors[ddType][2] * ddFactor; + HeartDDInner[0] = HeartInner[0]; + HeartDDInner[1] = HeartInner[1]; + HeartDDInner[2] = HeartInner[2]; + + rFactor = sHeartsDDPrimFactors[ddType][0] * ddFactor; + gFactor = sHeartsDDPrimFactors[ddType][1] * ddFactor; + bFactor = sHeartsDDPrimFactors[ddType][2] * ddFactor; + + sBeatingHeartsDDPrim[0] = (u8)(rFactor + HeartDDOutline[0]) & 0xFF; + sBeatingHeartsDDPrim[1] = (u8)(gFactor + HeartDDOutline[1]) & 0xFF; + sBeatingHeartsDDPrim[2] = (u8)(bFactor + HeartDDOutline[2]) & 0xFF; + + rFactor = sHeartsDDEnvFactors[ddType][0] * ddFactor; + gFactor = sHeartsDDEnvFactors[ddType][1] * ddFactor; + bFactor = sHeartsDDEnvFactors[ddType][2] * ddFactor; + + sBeatingHeartsDDEnv[0] = (u8)(rFactor + HeartDDInner[0]) & 0xFF; + sBeatingHeartsDDEnv[1] = (u8)(gFactor + HeartDDInner[1]) & 0xFF; + sBeatingHeartsDDEnv[2] = (u8)(bFactor + HeartDDInner[2]) & 0xFF; + } else { + sHeartsDDPrim[2][0] = HeartInner[0]; + sHeartsDDPrim[2][1] = HeartInner[1]; + sHeartsDDPrim[2][2] = HeartInner[2]; + + sHeartsDDPrim[1][0] = sHeartsDDPrimColors[ddType][0]; + sHeartsDDPrim[1][1] = sHeartsDDPrimColors[ddType][1]; + sHeartsDDPrim[1][2] = sHeartsDDPrimColors[ddType][2]; + + sHeartsDDEnv[1][0] = sHeartsDDEnvColors[ddType][0]; + sHeartsDDEnv[1][1] = sHeartsDDEnvColors[ddType][1]; + sHeartsDDEnv[1][2] = sHeartsDDEnvColors[ddType][2]; + + rFactor = sHeartsDDPrimFactors[ddType][0] * ddFactor; + gFactor = sHeartsDDPrimFactors[ddType][1] * ddFactor; + bFactor = sHeartsDDPrimFactors[ddType][2] * ddFactor; + + sBeatingHeartsDDPrim[0] = (u8)(rFactor + HeartDDOutline[0]) & 0xFF; + sBeatingHeartsDDPrim[1] = (u8)(gFactor + HeartDDOutline[1]) & 0xFF; + sBeatingHeartsDDPrim[2] = (u8)(bFactor + HeartDDOutline[2]) & 0xFF; + + rFactor = sHeartsDDEnvFactors[ddType][0] * ddFactor; + gFactor = sHeartsDDEnvFactors[ddType][1] * ddFactor; + bFactor = sHeartsDDEnvFactors[ddType][2] * ddFactor; + + sBeatingHeartsDDEnv[0] = (u8)(rFactor + HeartDDInner[0]) & 0xFF; + sBeatingHeartsDDEnv[1] = (u8)(gFactor + HeartDDInner[1]) & 0xFF; + sBeatingHeartsDDEnv[2] = (u8)(bFactor + HeartDDInner[2]) & 0xFF; + } - sBeatingHeartsDDEnv[0] = (u8)(rFactor + HEARTS_DD_ENV_R) & 0xFF; - sBeatingHeartsDDEnv[1] = (u8)(gFactor + HEARTS_DD_ENV_G) & 0xFF; - sBeatingHeartsDDEnv[2] = (u8)(bFactor + HEARTS_DD_ENV_B) & 0xFF; } s32 func_80078E18(GlobalContext* globalCtx) { @@ -322,8 +412,8 @@ void HealthMeter_Draw(GlobalContext* globalCtx) { } curColorSet = -1; - offsetY = 0.0f; - offsetX = OTRGetDimensionFromLeftEdge(0.0f); + offsetY = 0.0f+(Top_LM_Margin*-1); + offsetX = OTRGetDimensionFromLeftEdge(0.0f)+(Left_LM_Margin*-1); for (i = 0; i < totalHeartCount; i++) { if ((ddHeartCountMinusOne < 0) || (i > ddHeartCountMinusOne)) { @@ -483,7 +573,7 @@ void HealthMeter_Draw(GlobalContext* globalCtx) { offsetX += 10.0f; if (i == 9) { offsetY += 10.0f; - offsetX = OTRGetDimensionFromLeftEdge(0.0f); + offsetX = OTRGetDimensionFromLeftEdge(0.0f)+(Left_LM_Margin*-1); } } @@ -530,4 +620,4 @@ u32 HealthMeter_IsCritical(void) { } else { return false; } -} +} \ No newline at end of file diff --git a/soh/src/code/z_map_exp.c b/soh/src/code/z_map_exp.c index e97a1a1a5..5402cee44 100644 --- a/soh/src/code/z_map_exp.c +++ b/soh/src/code/z_map_exp.c @@ -12,6 +12,11 @@ s16 sPlayerInitialPosZ = 0; s16 sPlayerInitialDirection = 0; s16 sEntranceIconMapIndex = 0; +s16 Top_MM_Margin = 0; +s16 Left_MM_Margin = 0; +s16 Right_MM_Margin = 0; +s16 Bottom_MM_Margin = 0; + void Map_SavePlayerInitialInfo(GlobalContext* globalCtx) { Player* player = GET_PLAYER(globalCtx); @@ -604,11 +609,11 @@ void Minimap_DrawCompassIcons(GlobalContext* globalCtx) { PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - tempX = player->actor.world.pos.x; - tempZ = player->actor.world.pos.z; + tempX = player->actor.world.pos.x+Right_MM_Margin; + tempZ = player->actor.world.pos.z+Bottom_MM_Margin; tempX /= R_COMPASS_SCALE_X; tempZ /= R_COMPASS_SCALE_Y; - Matrix_Translate(OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X + tempX) / 10.0f), (R_COMPASS_OFFSET_Y - tempZ) / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Translate(OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X+(Right_MM_Margin*10) + tempX) / 10.0f), (R_COMPASS_OFFSET_Y+((Bottom_MM_Margin*10)*-1) - tempZ) / 10.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY); Matrix_RotateX(-1.6f, MTXMODE_APPLY); tempX = (0x7FFF - player->actor.shape.rot.y) / 0x400; @@ -619,11 +624,11 @@ void Minimap_DrawCompassIcons(GlobalContext* globalCtx) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, 255); gSPDisplayList(OVERLAY_DISP++, gCompassArrowDL); - tempX = sPlayerInitialPosX; - tempZ = sPlayerInitialPosZ; + tempX = sPlayerInitialPosX+Right_MM_Margin; + tempZ = sPlayerInitialPosZ+Bottom_MM_Margin; tempX /= R_COMPASS_SCALE_X; tempZ /= R_COMPASS_SCALE_Y; - Matrix_Translate(OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X + tempX) / 10.0f), (R_COMPASS_OFFSET_Y - tempZ) / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Translate(OTRGetDimensionFromRightEdge((R_COMPASS_OFFSET_X+(Right_MM_Margin*10) + tempX) / 10.0f), (R_COMPASS_OFFSET_Y+((Bottom_MM_Margin*10)*-1) - tempZ) / 10.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(VREG(9) / 100.0f, VREG(9) / 100.0f, VREG(9) / 100.0f, MTXMODE_APPLY); Matrix_RotateX(VREG(52) / 10.0f, MTXMODE_APPLY); Matrix_RotateY(sPlayerInitialDirection / 10.0f, MTXMODE_APPLY); @@ -662,17 +667,22 @@ void Minimap_Draw(GlobalContext* globalCtx) { TEXEL0, 0, PRIMITIVE, 0); if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, mapIndex)) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 255, 255, interfaceCtx->minimapAlpha); + if (CVar_GetS32("gHudColors", 1) == 2) { //Dungeon minimap + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCMinimapPrimR", R_MINIMAP_COLOR(0)), CVar_GetS32("gCCMinimapPrimG", R_MINIMAP_COLOR(1)), CVar_GetS32("gCCMinimapPrimB", R_MINIMAP_COLOR(2)), interfaceCtx->minimapAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 255, 255, interfaceCtx->minimapAlpha); + } gSPInvalidateTexCache(OVERLAY_DISP++, interfaceCtx->mapSegment); gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->mapSegment, G_IM_FMT_I, 96, 85, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - const s16 dgnMiniMapX = OTRGetRectDimensionFromRightEdge(R_DGN_MINIMAP_X); + const s16 dgnMiniMapX = OTRGetRectDimensionFromRightEdge(R_DGN_MINIMAP_X + Right_MM_Margin); + const s16 dgnMiniMapY = R_DGN_MINIMAP_Y + Bottom_MM_Margin; - gSPWideTextureRectangle(OVERLAY_DISP++, dgnMiniMapX << 2, R_DGN_MINIMAP_Y << 2, - (dgnMiniMapX + 96) << 2, (R_DGN_MINIMAP_Y + 85) << 2, G_TX_RENDERTILE, + gSPWideTextureRectangle(OVERLAY_DISP++, dgnMiniMapX << 2, dgnMiniMapY << 2, + (dgnMiniMapX + 96) << 2, (dgnMiniMapY + 85) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } @@ -719,27 +729,35 @@ void Minimap_Draw(GlobalContext* globalCtx) { func_80094520(globalCtx->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MINIMAP_COLOR(0), R_MINIMAP_COLOR(1), R_MINIMAP_COLOR(2), - interfaceCtx->minimapAlpha); + if (CVar_GetS32("gHudColors", 1) == 2) {//Overworld minimap + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCMinimapPrimR", R_MINIMAP_COLOR(0)), CVar_GetS32("gCCMinimapPrimG", R_MINIMAP_COLOR(1)), CVar_GetS32("gCCMinimapPrimB", R_MINIMAP_COLOR(2)), interfaceCtx->minimapAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MINIMAP_COLOR(0), R_MINIMAP_COLOR(1), R_MINIMAP_COLOR(2), interfaceCtx->minimapAlpha); + } gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->mapSegment, G_IM_FMT_IA, gMapData->owMinimapWidth[mapIndex], gMapData->owMinimapHeight[mapIndex], 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - const s16 oWMiniMapX = OTRGetRectDimensionFromRightEdge(R_OW_MINIMAP_X); + const s16 oWMiniMapX = OTRGetRectDimensionFromRightEdge(R_OW_MINIMAP_X + Right_MM_Margin); + const s16 oWMiniMapY = R_OW_MINIMAP_Y + Bottom_MM_Margin; - gSPWideTextureRectangle(OVERLAY_DISP++, oWMiniMapX << 2, R_OW_MINIMAP_Y << 2, + gSPWideTextureRectangle(OVERLAY_DISP++, oWMiniMapX << 2, oWMiniMapY << 2, (oWMiniMapX + gMapData->owMinimapWidth[mapIndex]) << 2, - (R_OW_MINIMAP_Y + gMapData->owMinimapHeight[mapIndex]) << 2, G_TX_RENDERTILE, 0, + (oWMiniMapY + gMapData->owMinimapHeight[mapIndex]) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + if (CVar_GetS32("gHudColors", 1) != 2) {//This need to be added else it will color dungeon entrance icon too. (it re-init prim color to default color) + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MINIMAP_COLOR(0), R_MINIMAP_COLOR(1), R_MINIMAP_COLOR(2), interfaceCtx->minimapAlpha); + } + if (((globalCtx->sceneNum != SCENE_SPOT01) && (globalCtx->sceneNum != SCENE_SPOT04) && (globalCtx->sceneNum != SCENE_SPOT08)) || (LINK_AGE_IN_YEARS != YEARS_ADULT)) { s16 IconSize = 8; - s16 PosX = gMapData->owEntranceIconPosX[sEntranceIconMapIndex]; - s16 PosY = gMapData->owEntranceIconPosY[sEntranceIconMapIndex]; + s16 PosX = gMapData->owEntranceIconPosX[sEntranceIconMapIndex]+Right_MM_Margin; + s16 PosY = gMapData->owEntranceIconPosY[sEntranceIconMapIndex]+Bottom_MM_Margin; //gFixDungeonMinimapIcon fix both Y position of visible icon and hide these non needed. if (CVar_GetS32("gFixDungeonMinimapIcon", 1) != 0){ //No idea why and how Original value work but this does actually fix them all. @@ -766,14 +784,20 @@ void Minimap_Draw(GlobalContext* globalCtx) { } } + const s16 entranceX = OTRGetRectDimensionFromRightEdge(270 + Right_MM_Margin); + const s16 entranceY = 154 + Bottom_MM_Margin; if ((globalCtx->sceneNum == SCENE_SPOT08) && (gSaveContext.infTable[26] & gBitFlags[9])) { + gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, + 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, entranceY << 2, (entranceX + 32) << 2, (entranceY + 8) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } else if ((globalCtx->sceneNum == SCENE_SPOT08) && CVar_GetS32("gAlwaysShowDungeonMinimapIcon", 0) != 0){ gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - const s16 entranceX = OTRGetRectDimensionFromRightEdge(270); - - gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, 154 << 2, (entranceX + 32) << 2, (154 + 8) << 2, + gSPWideTextureRectangle(OVERLAY_DISP++, entranceX << 2, entranceY << 2, (entranceX + 32) << 2, (entranceY + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } @@ -809,6 +833,18 @@ void Map_Update(GlobalContext* globalCtx) { s16 floor; s16 i; + if (CVar_GetS32("gHUDMargins", 0) != 0) { + Top_MM_Margin = CVar_GetS32("gHUDMargin_T", 0); + Left_MM_Margin = CVar_GetS32("gHUDMargin_L", 0); + Right_MM_Margin = CVar_GetS32("gHUDMargin_R", 0); + Bottom_MM_Margin = CVar_GetS32("gHUDMargin_B", 0); + } else { + Top_MM_Margin = 0; + Left_MM_Margin = 0; + Right_MM_Margin = 0; + Bottom_MM_Margin = 0; + } + if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0)) { switch (globalCtx->sceneNum) { case SCENE_YDAN: diff --git a/soh/src/code/z_map_mark.c b/soh/src/code/z_map_mark.c index 8d43a33a0..894daeb2d 100644 --- a/soh/src/code/z_map_mark.c +++ b/soh/src/code/z_map_mark.c @@ -108,6 +108,22 @@ void MapMark_DrawForDungeon(GlobalContext* globalCtx) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->minimapAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, interfaceCtx->minimapAlpha); + s16 Top_MC_Margin = 0; + s16 Left_MC_Margin = 0; + s16 Right_MC_Margin = 0; + s16 Bottom_MC_Margin = 0; + if (CVar_GetS32("gHUDMargins", 0) != 0) { + Top_MC_Margin = CVar_GetS32("gHUDMargin_T", 0); + Left_MC_Margin = CVar_GetS32("gHUDMargin_L", 0); + Right_MC_Margin = CVar_GetS32("gHUDMargin_R", 0); + Bottom_MC_Margin = CVar_GetS32("gHUDMargin_B", 0); + } else { + Top_MC_Margin = 0; + Left_MC_Margin = 0; + Right_MC_Margin = 0; + Bottom_MC_Margin = 0; + } + markPoint = &mapMarkIconData->points[0]; for (i = 0; i < mapMarkIconData->count; i++) { if ((mapMarkIconData->markType != MAP_MARK_CHEST) || !Flags_GetTreasure(globalCtx, markPoint->chestFlag)) { @@ -118,8 +134,8 @@ void MapMark_DrawForDungeon(GlobalContext* globalCtx) { markInfo->textureWidth, markInfo->textureHeight, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - rectLeft = (GREG(94) + OTRGetRectDimensionFromRightEdge(markPoint->x) + 204) << 2; - rectTop = (GREG(95) + markPoint->y + 140) << 2; + rectLeft = (GREG(94) + OTRGetRectDimensionFromRightEdge(markPoint->x+Right_MC_Margin) + 204) << 2; + rectTop = (GREG(95) + markPoint->y + Bottom_MC_Margin + 140) << 2; gSPTextureRectangle(OVERLAY_DISP++, rectLeft, rectTop, markInfo->rectWidth + rectLeft, rectTop + markInfo->rectHeight, G_TX_RENDERTILE, 0, 0, markInfo->dsdx, markInfo->dtdy); diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c index b6d6b792b..33bc9a95e 100644 --- a/soh/src/code/z_message_PAL.c +++ b/soh/src/code/z_message_PAL.c @@ -446,6 +446,46 @@ void Message_DrawTextboxIcon(GlobalContext* globalCtx, Gfx** p, s16 x, s16 y) { static s16 sIconEnvR = 0; static s16 sIconEnvG = 0; static s16 sIconEnvB = 0; + if (CVar_GetS32("gHudColors", 1) == 0) { + sIconPrimColors[0][0] = 4; + sIconPrimColors[0][1] = 84; + sIconPrimColors[0][2] = 204; + sIconPrimColors[1][0] = 45; + sIconPrimColors[1][1] = 125; + sIconPrimColors[1][2] = 255; + sIconEnvColors[0][0] = 0; + sIconEnvColors[0][1] = 0; + sIconEnvColors[0][2] = 0; + sIconEnvColors[1][0] = 0; + sIconEnvColors[1][1] = 70; + sIconEnvColors[1][2] = 255; + } else if (CVar_GetS32("gHudColors", 1) == 1) { + sIconPrimColors[0][0] = 4; + sIconPrimColors[0][1] = 200; + sIconPrimColors[0][2] = 80; + sIconPrimColors[1][0] = 50; + sIconPrimColors[1][1] = 255; + sIconPrimColors[1][2] = 130; + sIconEnvColors[0][0] = 0; + sIconEnvColors[0][1] = 0; + sIconEnvColors[0][2] = 0; + sIconEnvColors[1][0] = 0; + sIconEnvColors[1][1] = 255; + sIconEnvColors[1][2] = 130; + } else if (CVar_GetS32("gHudColors", 1) == 2) { + sIconPrimColors[0][0] = (CVar_GetS32("gCCABtnPrimR", 50)/255)*95; + sIconPrimColors[0][1] = (CVar_GetS32("gCCABtnPrimG", 255)/255)*95; + sIconPrimColors[0][2] = (CVar_GetS32("gCCABtnPrimB", 130)/255)*95; + sIconPrimColors[1][0] = CVar_GetS32("gCCABtnPrimR", 50); + sIconPrimColors[1][1] = CVar_GetS32("gCCABtnPrimG", 255); + sIconPrimColors[1][2] = CVar_GetS32("gCCABtnPrimB", 130); + sIconEnvColors[0][0] = 0; + sIconEnvColors[0][1] = 0; + sIconEnvColors[0][2] = 0; + sIconEnvColors[1][0] = 10; + sIconEnvColors[1][1] = 10; + sIconEnvColors[1][2] = 10; + } MessageContext* msgCtx = &globalCtx->msgCtx; Font* font = &msgCtx->font; Gfx* gfx = *p; @@ -2827,12 +2867,22 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { gDPPipeSync(gfx++); if (sOcarinaNoteBuf[i] == OCARINA_NOTE_A) { - gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteAPrimR, sOcarinaNoteAPrimG, sOcarinaNoteAPrimB, - sOcarinaNotesAlphaValues[i]); + if (CVar_GetS32("gHudColors", 1) == 0) { //A buttons :) + gDPSetPrimColor(gfx++, 0, 0, 80, 150, 255, sOcarinaNotesAlphaValues[i]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteAPrimR, sOcarinaNoteAPrimG, sOcarinaNoteAPrimB, sOcarinaNotesAlphaValues[i]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(gfx++, 0, 0, CVar_GetS32("gCCABtnPrimR", 0), CVar_GetS32("gCCABtnPrimG", 0), CVar_GetS32("gCCABtnPrimB", 0), sOcarinaNotesAlphaValues[i]); + } gDPSetEnvColor(gfx++, sOcarinaNoteAEnvR, sOcarinaNoteAEnvG, sOcarinaNoteAEnvB, 0); } else { - gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCPrimR, sOcarinaNoteCPrimG, sOcarinaNoteCPrimB, - sOcarinaNotesAlphaValues[i]); + if (CVar_GetS32("gHudColors", 1) == 0) { //C buttons :) + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCPrimR, sOcarinaNoteCPrimG, sOcarinaNoteCPrimB, sOcarinaNotesAlphaValues[i]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCPrimR, sOcarinaNoteCPrimG, sOcarinaNoteCPrimB, sOcarinaNotesAlphaValues[i]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(gfx++, 0, 0, CVar_GetS32("gCCCBtnPrimR", 0), CVar_GetS32("gCCCBtnPrimG", 0), CVar_GetS32("gCCCBtnPrimB", 0), sOcarinaNotesAlphaValues[i]); + } gDPSetEnvColor(gfx++, sOcarinaNoteCEnvR, sOcarinaNoteCEnvG, sOcarinaNoteCEnvB, 0); } diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 127fb0cbb..8c901ed8a 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -15,6 +15,11 @@ #define DO_ACTION_TEX_HEIGHT 16 #define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex)) +s16 Top_HUD_Margin = 0; +s16 Left_HUD_Margin = 0; +s16 Right_HUD_Margin = 0; +s16 Bottom_HUD_Margin = 0; + typedef struct { /* 0x00 */ u8 scene; /* 0x01 */ u8 flags1; @@ -2441,6 +2446,25 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { { 255, 255, 150 }, { 255, 255, 50 }, }; + + if (CVar_GetS32("gHudColors", 1) == 2) { //This will make custom color based on users selected colors. + sMagicBorderColors[0][0] = CVar_GetS32("gCCMagicBorderPrimR", 255); + sMagicBorderColors[0][1] = CVar_GetS32("gCCMagicBorderPrimG", 255); + sMagicBorderColors[0][2] = CVar_GetS32("gCCMagicBorderPrimB", 255); + + sMagicBorderColors[1][0] = CVar_GetS32("gCCMagicBorderPrimR", 255)/2; + sMagicBorderColors[1][1] = CVar_GetS32("gCCMagicBorderPrimG", 255)/2; + sMagicBorderColors[1][2] = CVar_GetS32("gCCMagicBorderPrimB", 255)/2; + + sMagicBorderColors[2][0] = CVar_GetS32("gCCMagicBorderPrimR", 255)/3; + sMagicBorderColors[2][1] = CVar_GetS32("gCCMagicBorderPrimG", 255)/3; + sMagicBorderColors[2][2] = CVar_GetS32("gCCMagicBorderPrimB", 255)/3; + + sMagicBorderColors[3][0] = CVar_GetS32("gCCMagicBorderPrimR", 255)/2; + sMagicBorderColors[3][1] = CVar_GetS32("gCCMagicBorderPrimG", 255)/2; + sMagicBorderColors[3][2] = CVar_GetS32("gCCMagicBorderPrimB", 255)/2; + } + static s16 sMagicBorderIndexes[] = { 0, 1, 1, 0 }; static s16 sMagicBorderRatio = 2; static s16 sMagicBorderStep = 1; @@ -2631,27 +2655,31 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { if (gSaveContext.magicLevel != 0) { if (gSaveContext.healthCapacity > 0xA0) { - magicBarY = R_MAGIC_BAR_LARGE_Y; + magicBarY = R_MAGIC_BAR_LARGE_Y + (Top_HUD_Margin*-1); } else { - magicBarY = R_MAGIC_BAR_SMALL_Y; + magicBarY = R_MAGIC_BAR_SMALL_Y + (Top_HUD_Margin*-1); } func_80094520(globalCtx->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMagicBorderR, sMagicBorderG, sMagicBorderB, interfaceCtx->magicAlpha); - gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255); + if (CVar_GetS32("gHudColors", 1) == 2) {//Original game add color there so to prevent miss match we make it all white :) + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); + } else { + gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255); + } OVERLAY_DISP = - Gfx_TextureIA8(OVERLAY_DISP, gMagicBarEndTex, 8, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X), + Gfx_TextureIA8(OVERLAY_DISP, gMagicBarEndTex, 8, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X + (Left_HUD_Margin*-1)), magicBarY, 8, 16, 1 << 10, 1 << 10); - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gMagicBarMidTex, 24, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X) + 8, magicBarY, + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gMagicBarMidTex, 24, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X + (Left_HUD_Margin*-1)) + 8, magicBarY, gSaveContext.unk_13F4, 16, 1 << 10, 1 << 10); gDPLoadTextureBlock(OVERLAY_DISP++, gMagicBarEndTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 16, 0, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - const s16 rMagicBarX = OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X); + const s16 rMagicBarX = OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X + (Left_HUD_Margin*-1)); gSPWideTextureRectangle(OVERLAY_DISP++, ((rMagicBarX + gSaveContext.unk_13F4) + 8) << 2, magicBarY << 2, ((rMagicBarX + gSaveContext.unk_13F4) + 16) << 2, (magicBarY + 16) << 2, G_TX_RENDERTILE, @@ -2662,11 +2690,15 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); - const s16 rMagicFillX = OTRGetRectDimensionFromLeftEdge(R_MAGIC_FILL_X); + const s16 rMagicFillX = OTRGetRectDimensionFromLeftEdge(R_MAGIC_FILL_X + (Left_HUD_Margin*-1)); if (gSaveContext.unk_13F0 == 4) { // Yellow part of the bar indicating the amount of magic to be subtracted - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 250, 0, interfaceCtx->magicAlpha); + if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCMagicUsePrimR", 250), CVar_GetS32("gCCMagicUsePrimG", 250), CVar_GetS32("gCCMagicUsePrimB", 0), interfaceCtx->magicAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 250, 0, interfaceCtx->magicAlpha); + } gDPLoadMultiBlock_4b(OVERLAY_DISP++, gMagicBarFillTex, 0, G_TX_RENDERTILE, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, @@ -2678,16 +2710,22 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { // Fill the rest of the bar with the normal magic color gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MAGIC_FILL_COLOR(0), R_MAGIC_FILL_COLOR(1), R_MAGIC_FILL_COLOR(2), - interfaceCtx->magicAlpha); + if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCMagicPrimR", 0), CVar_GetS32("gCCMagicPrimG", 200), CVar_GetS32("gCCMagicPrimB", 0), interfaceCtx->magicAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MAGIC_FILL_COLOR(0), R_MAGIC_FILL_COLOR(1), R_MAGIC_FILL_COLOR(2), interfaceCtx->magicAlpha); + } gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2, (rMagicFillX + gSaveContext.unk_13F8) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } else { // Fill the whole bar with the normal magic color - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MAGIC_FILL_COLOR(0), R_MAGIC_FILL_COLOR(1), R_MAGIC_FILL_COLOR(2), - interfaceCtx->magicAlpha); + if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCMagicPrimR", 0), CVar_GetS32("gCCMagicPrimG", 200), CVar_GetS32("gCCMagicPrimB", 0), interfaceCtx->magicAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MAGIC_FILL_COLOR(0), R_MAGIC_FILL_COLOR(1), R_MAGIC_FILL_COLOR(2), interfaceCtx->magicAlpha); + } gDPLoadMultiBlock_4b(OVERLAY_DISP++, gMagicBarFillTex, 0, G_TX_RENDERTILE, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, @@ -2761,51 +2799,83 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { s16 width; s16 height; + s16 C_Left_BTN_Pos[] = { C_LEFT_BUTTON_X+Right_HUD_Margin, C_LEFT_BUTTON_Y+(Top_HUD_Margin*-1) }; //(X,Y) + s16 C_Right_BTN_Pos[] = { C_RIGHT_BUTTON_X+Right_HUD_Margin, C_RIGHT_BUTTON_Y+(Top_HUD_Margin*-1) }; + s16 C_Up_BTN_Pos[] = { C_UP_BUTTON_X+Right_HUD_Margin, C_UP_BUTTON_Y+(Top_HUD_Margin*-1) }; + s16 C_Down_BTN_Pos[] = { C_DOWN_BUTTON_X+Right_HUD_Margin, C_DOWN_BUTTON_Y+(Top_HUD_Margin*-1) }; + OPEN_DISPS(globalCtx->state.gfxCtx, "../z_parameter.c", 2900); // B Button Color & Texture // Also loads the Item Button Texture reused by other buttons afterwards gDPPipeSync(OVERLAY_DISP++); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_B_BTN_COLOR(0), R_B_BTN_COLOR(1), R_B_BTN_COLOR(2), interfaceCtx->bAlpha); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 150, 0, interfaceCtx->bAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_B_BTN_COLOR(0), R_B_BTN_COLOR(1), R_B_BTN_COLOR(2), interfaceCtx->bAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCBBtnPrimR", R_B_BTN_COLOR(0)), CVar_GetS32("gCCBBtnPrimG", R_B_BTN_COLOR(1)), CVar_GetS32("gCCBBtnPrimB", R_B_BTN_COLOR(2)), interfaceCtx->bAlpha); + } gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); OVERLAY_DISP = - Gfx_TextureIA8(OVERLAY_DISP, gButtonBackgroundTex, 32, 32, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(0)), R_ITEM_BTN_Y(0), + Gfx_TextureIA8(OVERLAY_DISP, gButtonBackgroundTex, 32, 32, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(0)+Right_HUD_Margin), R_ITEM_BTN_Y(0)+(Top_HUD_Margin*-1), R_ITEM_BTN_WIDTH(0), R_ITEM_BTN_WIDTH(0), R_ITEM_BTN_DD(0) << 1, R_ITEM_BTN_DD(0) << 1); // C-Left Button Color & Texture gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cLeftAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(1)) << 2, R_ITEM_BTN_Y(1) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(1)) + R_ITEM_BTN_WIDTH(1)) << 2, - (R_ITEM_BTN_Y(1) + R_ITEM_BTN_WIDTH(1)) << 2, + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), interfaceCtx->cLeftAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), interfaceCtx->cLeftAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), interfaceCtx->cLeftAlpha); + } + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(C_Left_BTN_Pos[0]) << 2, C_Left_BTN_Pos[1] << 2, + (OTRGetRectDimensionFromRightEdge(C_Left_BTN_Pos[0]) + R_ITEM_BTN_WIDTH(1)) << 2, + (C_Left_BTN_Pos[1] + R_ITEM_BTN_WIDTH(1)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(1) << 1, R_ITEM_BTN_DD(1) << 1); // C-Down Button Color & Texture - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cDownAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(2)) << 2, R_ITEM_BTN_Y(2) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(2)) + R_ITEM_BTN_WIDTH(2)) << 2, - (R_ITEM_BTN_Y(2) + R_ITEM_BTN_WIDTH(2)) << 2, + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), interfaceCtx->cDownAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), interfaceCtx->cDownAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), interfaceCtx->cDownAlpha); + } + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(C_Down_BTN_Pos[0]) << 2, C_Down_BTN_Pos[1] << 2, + (OTRGetRectDimensionFromRightEdge(C_Down_BTN_Pos[0]) + R_ITEM_BTN_WIDTH(2)) << 2, + (C_Down_BTN_Pos[1] + R_ITEM_BTN_WIDTH(2)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(2) << 1, R_ITEM_BTN_DD(2) << 1); // C-Right Button Color & Texture - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cRightAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(3)) << 2, R_ITEM_BTN_Y(3) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(3)) + R_ITEM_BTN_WIDTH(3)) << 2, - (R_ITEM_BTN_Y(3) + R_ITEM_BTN_WIDTH(3)) << 2, + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), interfaceCtx->cRightAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), interfaceCtx->cRightAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), interfaceCtx->cRightAlpha); + } + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(C_Right_BTN_Pos[0]) << 2, C_Right_BTN_Pos[1] << 2, + (OTRGetRectDimensionFromRightEdge(C_Right_BTN_Pos[0]) + R_ITEM_BTN_WIDTH(3)) << 2, + (C_Right_BTN_Pos[1] + R_ITEM_BTN_WIDTH(3)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(3) << 1, R_ITEM_BTN_DD(3) << 1); if ((pauseCtx->state < 8) || (pauseCtx->state >= 18)) { if ((globalCtx->pauseCtx.state != 0) || (globalCtx->pauseCtx.debugState != 0)) { // Start Button Texture, Color & Label gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 120, 120, interfaceCtx->startAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]) << 2, 68, - (OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]) + 22) << 2, 156, + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 0, 0, interfaceCtx->startAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 120, 120, interfaceCtx->startAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCStartBtnPrimR", 120), CVar_GetS32("gCCStartBtnPrimG", 120), CVar_GetS32("gCCStartBtnPrimB", 120), interfaceCtx->startAlpha); + } + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]+Right_HUD_Margin) << 2, 68+((Top_HUD_Margin*-1)*4), + (OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]+Right_HUD_Margin) + 22) << 2, 156+((Top_HUD_Margin*-1)*4), G_TX_RENDERTILE, 0, 0, 1462, 1462); gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->startAlpha); @@ -2820,11 +2890,11 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { dxdy = (1 << 10) / (R_START_LABEL_DD(gSaveContext.language) / 100.0f); width = DO_ACTION_TEX_WIDTH / (R_START_LABEL_DD(gSaveContext.language) / 100.0f); height = DO_ACTION_TEX_HEIGHT / (R_START_LABEL_DD(gSaveContext.language) / 100.0f); - const s16 rStartLabelX = OTRGetRectDimensionFromRightEdge(R_START_LABEL_X(gSaveContext.language)); + const s16 rStartLabelX = OTRGetRectDimensionFromRightEdge(R_START_LABEL_X(gSaveContext.language)+Right_HUD_Margin); gSPWideTextureRectangle( OVERLAY_DISP++, rStartLabelX << 2, - R_START_LABEL_Y(gSaveContext.language) << 2, (rStartLabelX + width) << 2, - (R_START_LABEL_Y(gSaveContext.language) + height) << 2, G_TX_RENDERTILE, 0, 0, dxdy, dxdy); + R_START_LABEL_Y(gSaveContext.language)+(Top_HUD_Margin*-1) << 2, (rStartLabelX + width) << 2, + (R_START_LABEL_Y(gSaveContext.language)+(Top_HUD_Margin*-1) + height) << 2, G_TX_RENDERTILE, 0, 0, dxdy, dxdy); } } @@ -2843,12 +2913,18 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { temp = interfaceCtx->healthAlpha; } - const s16 rCUpBtnX = OTRGetRectDimensionFromRightEdge(R_C_UP_BTN_X); - const s16 rCUPIconX = OTRGetRectDimensionFromRightEdge(R_C_UP_ICON_X); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), temp); + const s16 rCUpBtnX = OTRGetRectDimensionFromRightEdge(R_C_UP_BTN_X+Right_HUD_Margin); + const s16 rCUPIconX = OTRGetRectDimensionFromRightEdge(R_C_UP_ICON_X+Right_HUD_Margin); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), temp); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), temp); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), temp); + } gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gSPWideTextureRectangle(OVERLAY_DISP++, rCUpBtnX << 2, R_C_UP_BTN_Y << 2, (rCUpBtnX + 16) << 2, - (R_C_UP_BTN_Y + 16) << 2, G_TX_RENDERTILE, 0, 0, 2 << 10, 2 << 10); + gSPWideTextureRectangle(OVERLAY_DISP++, rCUpBtnX << 2, R_C_UP_BTN_Y+(Top_HUD_Margin*-1) << 2, (rCUpBtnX + 16) << 2, + (R_C_UP_BTN_Y+(Top_HUD_Margin*-1) + 16) << 2, G_TX_RENDERTILE, 0, 0, 2 << 10, 2 << 10); gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, temp); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); @@ -2859,8 +2935,8 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPWideTextureRectangle(OVERLAY_DISP++, rCUPIconX << 2, R_C_UP_ICON_Y << 2, (rCUPIconX + 32) << 2, - (R_C_UP_ICON_Y + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gSPWideTextureRectangle(OVERLAY_DISP++, rCUPIconX << 2, R_C_UP_ICON_Y+(Top_HUD_Margin*-1) << 2, (rCUPIconX + 32) << 2, + (R_C_UP_ICON_Y+(Top_HUD_Margin*-1) + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } sCUpTimer--; @@ -2886,8 +2962,13 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { interfaceCtx->cRightAlpha); } + if (CVar_GetS32("gHudColors", 1) == 2) { + //This later will feature color per C button right now that it. + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), interfaceCtx->cRightAlpha); + } + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, ((u8*)gButtonBackgroundTex), 32, 32, - OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)), R_ITEM_BTN_Y(temp), R_ITEM_BTN_WIDTH(temp), + OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)+Right_HUD_Margin), R_ITEM_BTN_Y(temp)+(Top_HUD_Margin*-1), R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, R_ITEM_BTN_DD(temp) << 1); const char* cButtonIcons[] = { gButtonBackgroundTex, gEquippedItemOutlineTex, gEmptyCLeftArrowTex, @@ -2895,7 +2976,7 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { }; OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, cButtonIcons[(temp + 1)], 32, 32, - OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)), R_ITEM_BTN_Y(temp), R_ITEM_BTN_WIDTH(temp), + OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)+Right_HUD_Margin), R_ITEM_BTN_Y(temp)+(Top_HUD_Margin*-1), R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, R_ITEM_BTN_DD(temp) << 1); } } @@ -2909,9 +2990,9 @@ void Interface_DrawItemIconTexture(GlobalContext* globalCtx, void* texture, s16 gDPLoadTextureBlock(OVERLAY_DISP++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)) << 2, R_ITEM_ICON_Y(button) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)) + R_ITEM_ICON_WIDTH(button)) << 2, - (R_ITEM_ICON_Y(button) + R_ITEM_ICON_WIDTH(button)) << 2, G_TX_RENDERTILE, 0, 0, + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)+Right_HUD_Margin) << 2, R_ITEM_ICON_Y(button)+(Top_HUD_Margin*-1) << 2, + (OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)+Right_HUD_Margin) + R_ITEM_ICON_WIDTH(button)) << 2, + (R_ITEM_ICON_Y(button)+(Top_HUD_Margin*-1) + R_ITEM_ICON_WIDTH(button)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_ICON_DD(button) << 1, R_ITEM_ICON_DD(button) << 1); CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_parameter.c", 3094); @@ -2972,11 +3053,11 @@ void Interface_DrawAmmoCount(GlobalContext* globalCtx, s16 button, s16 alpha) { if (i != 0) { OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[i], 8, 8, - OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)), R_ITEM_AMMO_Y(button), 8, 8, 1 << 10, 1 << 10); + OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)+Right_HUD_Margin), R_ITEM_AMMO_Y(button)+(Top_HUD_Margin*-1), 8, 8, 1 << 10, 1 << 10); } OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[ammo], 8, 8, - OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)) + 6, R_ITEM_AMMO_Y(button), 8, 8, 1 << 10, 1 << 10); + OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)+Right_HUD_Margin) + 6, R_ITEM_AMMO_Y(button)+(Top_HUD_Margin*-1), 8, 8, 1 << 10, 1 << 10); } CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_parameter.c", 3158); @@ -3195,10 +3276,16 @@ void Interface_Draw(GlobalContext* globalCtx) { rColor = &rupeeWalletColors[0]; } - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, rColor[0], rColor[1], rColor[2], interfaceCtx->magicAlpha); - gDPSetEnvColor(OVERLAY_DISP++, 0, 80, 0, 255); - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gRupeeCounterIconTex, 16, 16, OTRGetRectDimensionFromLeftEdge(26), - 206, 16, 16, 1 << 10, 1 << 10); + if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCRupeePrimR", rColor[0]), CVar_GetS32("gCCRupeePrimG", rColor[1]), CVar_GetS32("gCCRupeePrimB", rColor[2]), interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); //We reset this here so it match user color :) + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, rColor[0], rColor[1], rColor[2], interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 80, 0, 255); + } + + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gRupeeCounterIconTex, 16, 16, OTRGetRectDimensionFromLeftEdge(26+(Left_HUD_Margin*-1)), + 206+(Bottom_HUD_Margin), 16, 16, 1 << 10, 1 << 10); switch (globalCtx->sceneNum) { case SCENE_BMORI1: @@ -3218,9 +3305,15 @@ void Interface_Draw(GlobalContext* globalCtx) { if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] >= 0) { // Small Key Icon gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha); - gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 20, 255); - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gSmallKeyCounterIconTex, 16, 16, OTRGetRectDimensionFromLeftEdge(26), 190, 16, 16, + + if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCKeysPrimR", 200), CVar_GetS32("gCCKeysPrimG", 230), CVar_GetS32("gCCKeysPrimB", 255), interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); //We reset this here so it match user color :) + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 20, 255); + } + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gSmallKeyCounterIconTex, 16, 16, OTRGetRectDimensionFromLeftEdge(26+(Left_HUD_Margin*-1)), 190+(Bottom_HUD_Margin), 16, 16, 1 << 10, 1 << 10); // Small Key Counter @@ -3237,17 +3330,17 @@ void Interface_Draw(GlobalContext* globalCtx) { interfaceCtx->counterDigits[3] -= 10; } - svar3 = OTRGetRectDimensionFromLeftEdge(42); + svar3 = OTRGetRectDimensionFromLeftEdge(42+(Left_HUD_Margin*-1)); if (interfaceCtx->counterDigits[2] != 0) { OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, ((u8*)((u8*)digitTextures[interfaceCtx->counterDigits[2]])), 8, - 16, svar3, 190, 8, 16, 1 << 10, 1 << 10); + 16, svar3, 190+(Bottom_HUD_Margin), 8, 16, 1 << 10, 1 << 10); svar3 += 8; } OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, ((u8*)digitTextures[interfaceCtx->counterDigits[3]]), 8, 16, - svar3, 190, 8, 16, 1 << 10, 1 << 10); + svar3, 190+(Bottom_HUD_Margin), 8, 16, 1 << 10, 1 << 10); } break; default: @@ -3291,7 +3384,7 @@ void Interface_Draw(GlobalContext* globalCtx) { for (svar1 = 0, svar3 = 42; svar1 < svar5; svar1++, svar2++, svar3 += 8) { OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, ((u8*)digitTextures[interfaceCtx->counterDigits[svar2]]), 8, 16, - OTRGetRectDimensionFromLeftEdge(svar3), 206, 8, 16, 1 << 10, 1 << 10); + OTRGetRectDimensionFromLeftEdge(svar3+(Left_HUD_Margin*-1)), 206+(Bottom_HUD_Margin), 8, 16, 1 << 10, 1 << 10); } } else { @@ -3353,8 +3446,8 @@ void Interface_Draw(GlobalContext* globalCtx) { G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); R_B_LABEL_DD = (1 << 10) / (WREG(37 + gSaveContext.language) / 100.0f); - const s16 rBLabelX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(gSaveContext.language)); - gSPWideTextureRectangle(OVERLAY_DISP++, rBLabelX << 2, R_B_LABEL_Y(gSaveContext.language) << 2, + const s16 rBLabelX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(gSaveContext.language)+Right_HUD_Margin); + gSPWideTextureRectangle(OVERLAY_DISP++, rBLabelX << 2, R_B_LABEL_Y(gSaveContext.language)+(Top_HUD_Margin*-1) << 2, (rBLabelX + DO_ACTION_TEX_WIDTH) << 2, (R_B_LABEL_Y(gSaveContext.language) + DO_ACTION_TEX_HEIGHT) << 2, G_TX_RENDERTILE, 0, 0, R_B_LABEL_DD, R_B_LABEL_DD); @@ -3401,24 +3494,29 @@ void Interface_Draw(GlobalContext* globalCtx) { // A Button func_80094A14(globalCtx->state.gfxCtx); - const f32 rABtnX = OTRGetDimensionFromRightEdge(R_A_BTN_X); + const f32 rABtnX = OTRGetDimensionFromRightEdge(R_A_BTN_X+Right_HUD_Margin); //func_8008A8B8(globalCtx, R_A_BTN_Y, R_A_BTN_Y + 45, rABtnX, rABtnX + 45); gSPClearGeometryMode(OVERLAY_DISP++, G_CULL_BOTH); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_A_BTN_COLOR(0), R_A_BTN_COLOR(1), R_A_BTN_COLOR(2), - interfaceCtx->aAlpha); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 90, 90, 255, interfaceCtx->aAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_A_BTN_COLOR(0), R_A_BTN_COLOR(1), R_A_BTN_COLOR(2), interfaceCtx->aAlpha); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", R_A_BTN_COLOR(0)), CVar_GetS32("gCCABtnPrimG", R_A_BTN_COLOR(1)), CVar_GetS32("gCCABtnPrimB", R_A_BTN_COLOR(2)), interfaceCtx->aAlpha); + } if (fullUi) { - Interface_DrawActionButton(globalCtx, rABtnX, R_A_BTN_Y); + Interface_DrawActionButton(globalCtx, rABtnX, R_A_BTN_Y+(Top_HUD_Margin*-1)); } gDPPipeSync(OVERLAY_DISP++); - const f32 rAIconX = OTRGetDimensionFromRightEdge(R_A_ICON_X); + const f32 rAIconX = OTRGetDimensionFromRightEdge(R_A_ICON_X+Right_HUD_Margin); //func_8008A8B8(globalCtx, R_A_ICON_Y, R_A_ICON_Y + 45, rAIconX, rAIconX + 45); gSPSetGeometryMode(OVERLAY_DISP++, G_CULL_BACK); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); - Matrix_Translate(-138.0f + rAIconX, 98.0f - R_A_ICON_Y, WREG(46 + gSaveContext.language) / 10.0f, MTXMODE_NEW); + Matrix_Translate(-138.0f + rAIconX, 98.0f - (R_A_ICON_Y+(Top_HUD_Margin*-1)), WREG(46 + gSaveContext.language) / 10.0f, MTXMODE_NEW); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); Matrix_RotateX(interfaceCtx->unk_1F4 / 10000.0f, MTXMODE_APPLY); gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_parameter.c", 3701), @@ -3987,6 +4085,18 @@ void Interface_Update(GlobalContext* globalCtx) { u16 action; Input* debugInput = &globalCtx->state.input[2]; + if (CVar_GetS32("gHUDMargins", 0) != 0) { + Top_HUD_Margin = CVar_GetS32("gHUDMargin_T", 0); + Left_HUD_Margin = CVar_GetS32("gHUDMargin_L", 0); + Right_HUD_Margin = CVar_GetS32("gHUDMargin_R", 0); + Bottom_HUD_Margin = CVar_GetS32("gHUDMargin_B", 0); + } else { + Top_HUD_Margin = 0; + Left_HUD_Margin = 0; + Right_HUD_Margin = 0; + Bottom_HUD_Margin = 0; + } + if (CHECK_BTN_ALL(debugInput->press.button, BTN_DLEFT)) { gSaveContext.language = LANGUAGE_ENG; osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language); diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 4e4e1ff70..af95f26df 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -744,24 +744,25 @@ void func_8008F470(GlobalContext* globalCtx, void** skeleton, Vec3s* jointTable, #else gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[eyeIndex])); #endif - Color_RGB8 sTemp; - color = &sTemp; - if (tunic == PLAYER_TUNIC_KOKIRI) { - color->r = CVar_GetS32("gTunic_Kokiri_Red", sTunicColors[PLAYER_TUNIC_KOKIRI].r); - color->g = CVar_GetS32("gTunic_Kokiri_Green", sTunicColors[PLAYER_TUNIC_KOKIRI].g); - color->b = CVar_GetS32("gTunic_Kokiri_Blue", sTunicColors[PLAYER_TUNIC_KOKIRI].b); - } else if (tunic == PLAYER_TUNIC_GORON) { - color->r = CVar_GetS32("gTunic_Goron_Red", sTunicColors[PLAYER_TUNIC_GORON].r); - color->g = CVar_GetS32("gTunic_Goron_Green", sTunicColors[PLAYER_TUNIC_GORON].g); - color->b = CVar_GetS32("gTunic_Goron_Blue", sTunicColors[PLAYER_TUNIC_GORON].b); - } else if (tunic == PLAYER_TUNIC_ZORA) { - color->r = CVar_GetS32("gTunic_Zora_Red", sTunicColors[PLAYER_TUNIC_ZORA].r); - color->g = CVar_GetS32("gTunic_Zora_Green", sTunicColors[PLAYER_TUNIC_ZORA].g); - color->b = CVar_GetS32("gTunic_Zora_Blue", sTunicColors[PLAYER_TUNIC_ZORA].b); - } else { - color->r = CVar_GetS32("gTunic_Kokiri_Red", sTunicColors[PLAYER_TUNIC_KOKIRI].r); - color->g = CVar_GetS32("gTunic_Kokiri_Green", sTunicColors[PLAYER_TUNIC_KOKIRI].g); - color->b = CVar_GetS32("gTunic_Kokiri_Blue", sTunicColors[PLAYER_TUNIC_KOKIRI].b); + Color_RGB8 NewColor[3]; + color = &sTunicColors[tunic]; + if (CVar_GetS32("gUseTunicsCol",0) == 1) { + if (tunic == PLAYER_TUNIC_KOKIRI || tunic == PLAYER_TUNIC_GORON || tunic == PLAYER_TUNIC_ZORA) { + NewColor[PLAYER_TUNIC_KOKIRI].r = CVar_GetS32("gTunic_Kokiri_R", sTunicColors[PLAYER_TUNIC_KOKIRI].r); + NewColor[PLAYER_TUNIC_KOKIRI].g = CVar_GetS32("gTunic_Kokiri_G", sTunicColors[PLAYER_TUNIC_KOKIRI].g); + NewColor[PLAYER_TUNIC_KOKIRI].b = CVar_GetS32("gTunic_Kokiri_B", sTunicColors[PLAYER_TUNIC_KOKIRI].b); + NewColor[PLAYER_TUNIC_GORON].r = CVar_GetS32("gTunic_Goron_R", sTunicColors[PLAYER_TUNIC_GORON].r); + NewColor[PLAYER_TUNIC_GORON].g = CVar_GetS32("gTunic_Goron_G", sTunicColors[PLAYER_TUNIC_GORON].g); + NewColor[PLAYER_TUNIC_GORON].b = CVar_GetS32("gTunic_Goron_B", sTunicColors[PLAYER_TUNIC_GORON].b); + NewColor[PLAYER_TUNIC_ZORA].r = CVar_GetS32("gTunic_Zora_R", sTunicColors[PLAYER_TUNIC_ZORA].r); + NewColor[PLAYER_TUNIC_ZORA].g = CVar_GetS32("gTunic_Zora_G", sTunicColors[PLAYER_TUNIC_ZORA].g); + NewColor[PLAYER_TUNIC_ZORA].b = CVar_GetS32("gTunic_Zora_B", sTunicColors[PLAYER_TUNIC_ZORA].b); + } else { + NewColor[PLAYER_TUNIC_KOKIRI].r = CVar_GetS32("gTunic_Kokiri_R", sTunicColors[PLAYER_TUNIC_KOKIRI].r); + NewColor[PLAYER_TUNIC_KOKIRI].g = CVar_GetS32("gTunic_Kokiri_G", sTunicColors[PLAYER_TUNIC_KOKIRI].g); + NewColor[PLAYER_TUNIC_KOKIRI].b = CVar_GetS32("gTunic_Kokiri_B", sTunicColors[PLAYER_TUNIC_KOKIRI].b); + } + color = NewColor; } gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0); diff --git a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 4d5fefec6..62704b516 100644 --- a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -1887,9 +1887,19 @@ void EnOssan_UpdateCursorAnim(EnOssan* this) { this->cursorAnimState = 0; } } - this->cursorColorR = ColChanMix(0, 0.0f, t); - this->cursorColorG = ColChanMix(255, 80.0f, t); - this->cursorColorB = ColChanMix(80, 0.0f, t); + if (CVar_GetS32("gHudColors", 1) == 0) { + this->cursorColorR = ColChanMix(0, 0.0f, t); + this->cursorColorG = ColChanMix(80, 80.0f, t); + this->cursorColorB = ColChanMix(255, 0.0f, t); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + this->cursorColorR = ColChanMix(0, 0.0f, t); + this->cursorColorG = ColChanMix(255, 80.0f, t); + this->cursorColorB = ColChanMix(80, 0.0f, t); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + this->cursorColorR = ColChanMix(CVar_GetS32("gCCABtnPrimR", 90), ((CVar_GetS32("gCCABtnPrimR", 90)/255)*100), t); + this->cursorColorG = ColChanMix(CVar_GetS32("gCCABtnPrimG", 90), ((CVar_GetS32("gCCABtnPrimG", 90)/255)*100), t); + this->cursorColorB = ColChanMix(CVar_GetS32("gCCABtnPrimB", 90), ((CVar_GetS32("gCCABtnPrimB", 90)/255)*100), t); + } this->cursorColorA = ColChanMix(255, 0.0f, t); this->cursorAnimTween = t; } diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 733bdee2d..d6154bfde 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -10324,6 +10324,14 @@ void func_80848EF8(Player* this, GlobalContext* globalCtx) { int rectHeight = 24; //Texture Heigh int DefaultIconA= 50; //Default icon alphe (55 on 255) + if (CVar_GetS32("gHUDMargins", 0) != 0) { + rectLeft = OTRGetRectDimensionFromLeftEdge(26+(CVar_GetS32("gHUDMargin_L", 0)*-1)); + rectTop = 60+(CVar_GetS32("gHUDMargin_T", 0)*-1); + } else { + rectTop = 60; + rectLeft = OTRGetRectDimensionFromLeftEdge(26); + } + OPEN_DISPS(globalCtx->state.gfxCtx, "../z_player.c", 2824); gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, DefaultIconA); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c index 80ffe8d4a..97c62c97d 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -494,9 +494,21 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx gDPPipeSync(POLY_KAL_DISP++); if (D_8082A124[sp218] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, D_8082A150[sp218]); + if (CVar_GetS32("gHudColors", 1) == 0) { // A Button notes + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 150, 255, D_8082A150[sp218]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, D_8082A150[sp218]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", 80), CVar_GetS32("gCCABtnPrimG", 255), CVar_GetS32("gCCABtnPrimB", 150), D_8082A150[sp218]); + } } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[sp218]); + if (CVar_GetS32("gHudColors", 1) == 0) { // C Buttons notes + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[sp218]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[sp218]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", 255), CVar_GetS32("gCCCBtnPrimG", 255), CVar_GetS32("gCCCBtnPrimB", 50), D_8082A150[sp218]); + } } gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); @@ -524,9 +536,21 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx if (pauseCtx->unk_1E4 == 8) { if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, 200); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 150, 255, 200); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, 200); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", 80), CVar_GetS32("gCCABtnPrimG", 255), CVar_GetS32("gCCABtnPrimB", 150), 200); + } } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", 255), CVar_GetS32("gCCCBtnPrimG", 255), CVar_GetS32("gCCCBtnPrimB", 50), 200); + } } } else { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 150, 150, 150, 150); @@ -579,9 +603,21 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx gDPPipeSync(POLY_KAL_DISP++); if (D_8082A124[phi_s3] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, D_8082A150[phi_s3]); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 150, 255, D_8082A150[phi_s3]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, D_8082A150[phi_s3]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", 80), CVar_GetS32("gCCABtnPrimG", 255), CVar_GetS32("gCCABtnPrimB", 150), D_8082A150[phi_s3]); + } } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[phi_s3]); + if (CVar_GetS32("gHudColors", 1) == 0) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[phi_s3]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[phi_s3]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", 255), CVar_GetS32("gCCCBtnPrimG", 160), CVar_GetS32("gCCCBtnPrimB", 0), D_8082A150[phi_s3]); + } } gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index c057c9876..86201719a 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -975,6 +975,20 @@ void KaleidoScope_DrawCursor(GlobalContext* globalCtx, u16 pageIndex) { temp = pauseCtx->unk_1E4; + if (CVar_GetS32("gHudColors", 1) == 0) { + sCursorColors[2][0] = 0; + sCursorColors[2][1] = 50; + sCursorColors[2][2] = 255; + } else if (CVar_GetS32("gHudColors", 1) == 1) { + sCursorColors[2][0] = 0; + sCursorColors[2][1] = 255; + sCursorColors[2][2] = 50; + } else if (CVar_GetS32("gHudColors", 1) == 2) { + sCursorColors[2][0] = CVar_GetS32("gCCABtnPrimR", 0); + sCursorColors[2][1] = CVar_GetS32("gCCABtnPrimG", 255); + sCursorColors[2][2] = CVar_GetS32("gCCABtnPrimB", 50); + } + if ((((pauseCtx->unk_1E4 == 0) || (temp == 8)) && (pauseCtx->state == 6)) || ((pauseCtx->pageIndex == PAUSE_QUEST) && ((temp < 3) || (temp == 5) || (temp == 8)))) { @@ -1045,6 +1059,28 @@ void KaleidoScope_DrawPages(GlobalContext* globalCtx, GraphicsContext* gfxCtx) { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 255, 255, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 255, 255, 0 }, { 0, 255, 50 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 255, 50 }, }; + if (CVar_GetS32("gHudColors", 1) == 0) { + D_8082ACF4[8][0] = 0; + D_8082ACF4[8][1] = 50; + D_8082ACF4[8][2] = 255; + D_8082ACF4[11][0] = 0; + D_8082ACF4[11][1] = 50; + D_8082ACF4[11][2] = 255; + } else if (CVar_GetS32("gHudColors", 1) == 1) { + D_8082ACF4[8][0] = 0; + D_8082ACF4[8][1] = 255; + D_8082ACF4[8][2] = 50; + D_8082ACF4[11][0] = 0; + D_8082ACF4[11][1] = 255; + D_8082ACF4[11][2] = 50; + } else if (CVar_GetS32("gHudColors", 1) == 2) { + D_8082ACF4[8][0] = CVar_GetS32("gCCABtnPrimR", 0); + D_8082ACF4[8][1] = CVar_GetS32("gCCABtnPrimG", 255); + D_8082ACF4[8][2] = CVar_GetS32("gCCABtnPrimB", 50); + D_8082ACF4[11][0] = CVar_GetS32("gCCABtnPrimR", 0); + D_8082ACF4[11][1] = CVar_GetS32("gCCABtnPrimG", 255); + D_8082ACF4[11][2] = CVar_GetS32("gCCABtnPrimB", 50); + } static s16 D_8082AD3C = 20; static s16 D_8082AD40 = 0; static s16 D_8082AD44 = 0; @@ -1373,7 +1409,13 @@ void KaleidoScope_DrawPages(GlobalContext* globalCtx, GraphicsContext* gfxCtx) { gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 255, 100, VREG(61)); + if (CVar_GetS32("gHudColors", 1) == 0) {//Save prompt cursor colour + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 100, 255, VREG(61)); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 255, 100, VREG(61)); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", 100), CVar_GetS32("gCCABtnPrimG", 255), CVar_GetS32("gCCABtnPrimB", 100), VREG(61)); //Save prompt cursor colour + } if (pauseCtx->promptChoice == 0) { gSPDisplayList(POLY_KAL_DISP++, gPromptCursorLeftDL); @@ -1432,6 +1474,10 @@ void KaleidoScope_DrawPages(GlobalContext* globalCtx, GraphicsContext* gfxCtx) { } void KaleidoScope_DrawInfoPanel(GlobalContext* globalCtx) { + static s16 gABtnTexColour[][4] = { //A button colors + { 0, 255, 100, 255 },//Gamecube + { 0, 100, 255, 255 },//Original N64 + }; static void* D_8082AD54[3] = { gPauseToEquipENGTex, gPauseToEquipGERTex, @@ -1757,8 +1803,16 @@ void KaleidoScope_DrawInfoPanel(GlobalContext* globalCtx) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE0[gSaveContext.language] << 5; - - gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); + if (CVar_GetS32("gHudColors", 1) == 0) {//A icon to decide in save prompt + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[1][0], gABtnTexColour[1][1], gABtnTexColour[1][2], gABtnTexColour[1][3]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[0][0], gABtnTexColour[0][1], gABtnTexColour[0][2], gABtnTexColour[0][3]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", gABtnTexColour[0][0]), CVar_GetS32("gCCABtnPrimG", gABtnTexColour[0][1]), CVar_GetS32("gCCABtnPrimB", gABtnTexColour[0][2]), gABtnTexColour[0][3]); + } + //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL);//This is changed to load the texture only so we can prim color it. + gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); @@ -1804,7 +1858,16 @@ void KaleidoScope_DrawInfoPanel(GlobalContext* globalCtx) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADD8[gSaveContext.language] << 5; - gSPDisplayList(POLY_KAL_DISP++, gCButtonIconsDL); + if (CVar_GetS32("gHudColors", 1) == 0) {//To equip text C button icon + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), 255); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), 255); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCCBtnPrimR", R_C_BTN_COLOR(0)), CVar_GetS32("gCCCBtnPrimG", R_C_BTN_COLOR(1)), CVar_GetS32("gCCCBtnPrimB", R_C_BTN_COLOR(2)), 255); + } + //gSPDisplayList(POLY_KAL_DISP++, gCButtonIconsDL); //Same reason for every A button, to be able to recolor them. + gDPLoadTextureBlock(POLY_KAL_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, 48, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); @@ -1838,7 +1901,16 @@ void KaleidoScope_DrawInfoPanel(GlobalContext* globalCtx) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE8[gSaveContext.language] << 5; - gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); + if (CVar_GetS32("gHudColors", 1) == 0) {//To play melody A button + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[1][0], gABtnTexColour[1][1], gABtnTexColour[1][2], gABtnTexColour[1][3]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[0][0], gABtnTexColour[0][1], gABtnTexColour[0][2], gABtnTexColour[0][3]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", gABtnTexColour[0][0]), CVar_GetS32("gCCABtnPrimG", gABtnTexColour[0][1]), CVar_GetS32("gCCABtnPrimB", gABtnTexColour[0][2]), gABtnTexColour[0][3]); + } + //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); + gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); @@ -1864,7 +1936,16 @@ void KaleidoScope_DrawInfoPanel(GlobalContext* globalCtx) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADD8[gSaveContext.language] << 5; - gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); + //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); + if (CVar_GetS32("gHudColors", 1) == 0) {//To equip A button + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[1][0], gABtnTexColour[1][1], gABtnTexColour[1][2], gABtnTexColour[1][3]); + } else if (CVar_GetS32("gHudColors", 1) == 1) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, gABtnTexColour[0][0], gABtnTexColour[0][1], gABtnTexColour[0][2], gABtnTexColour[0][3]); + } else if (CVar_GetS32("gHudColors", 1) == 2) { + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, CVar_GetS32("gCCABtnPrimR", gABtnTexColour[0][0]), CVar_GetS32("gCCABtnPrimG", gABtnTexColour[0][1]), CVar_GetS32("gCCABtnPrimB", gABtnTexColour[0][2]), gABtnTexColour[0][3]); + } + gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); gDPPipeSync(POLY_KAL_DISP++); gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255);