diff --git a/Adventures in Lestoria Tests/BuffTests.cpp b/Adventures in Lestoria Tests/BuffTests.cpp index 8c76058a..0cc0b653 100644 --- a/Adventures in Lestoria Tests/BuffTests.cpp +++ b/Adventures in Lestoria Tests/BuffTests.cpp @@ -105,6 +105,7 @@ namespace BuffTests TEST_METHOD_CLEANUP(CleanupTests){ testGame->EndGame(); testGame->OnUserUpdate(0.f); + testGame.reset(); } TEST_METHOD(AddBuffMonsterCallbackExpireFunctionTest){ Monster&m{game->SpawnMonster({},MONSTER_DATA.at("TestName"))}; diff --git a/Adventures in Lestoria Tests/EnchantTests.cpp b/Adventures in Lestoria Tests/EnchantTests.cpp index a22992d0..766944ac 100644 --- a/Adventures in Lestoria Tests/EnchantTests.cpp +++ b/Adventures in Lestoria Tests/EnchantTests.cpp @@ -116,6 +116,11 @@ namespace EnchantTests DAMAGENUMBER_LIST.clear(); } + TEST_METHOD_CLEANUP(EnchantTestCleanup){ + testGame->EndGame(); + testGame->OnUserUpdate(0.f); + testGame.reset(); + } TEST_METHOD(HealthBoostCheck){ Assert::AreEqual(100,player->GetMaxHealth(),L"Player starts with 100 health."); std::weak_ptrnullRing{Game::GiveAndEquipEnchantedRing("Aura of the Beast")}; diff --git a/Adventures in Lestoria Tests/EngineTests.cpp b/Adventures in Lestoria Tests/EngineTests.cpp index 0fb55041..a256cea3 100644 --- a/Adventures in Lestoria Tests/EngineTests.cpp +++ b/Adventures in Lestoria Tests/EngineTests.cpp @@ -103,6 +103,7 @@ namespace EngineTests TEST_METHOD_CLEANUP(CleanupTests){ testGame->EndGame(); testGame->OnUserUpdate(0.f); + testGame.reset(); } TEST_METHOD(StripColorTest){ std::string noColCode{"Hello World!"}; diff --git a/Adventures in Lestoria Tests/ItemTests.cpp b/Adventures in Lestoria Tests/ItemTests.cpp index b779ff0d..f289a36f 100644 --- a/Adventures in Lestoria Tests/ItemTests.cpp +++ b/Adventures in Lestoria Tests/ItemTests.cpp @@ -95,6 +95,11 @@ namespace ItemTests Menu::themes.SetInitialized(); GFX.SetInitialized(); } + TEST_METHOD_CLEANUP(ItemCleanupTests){ + testGame->EndGame(); + testGame->OnUserUpdate(0.f); + testGame.reset(); + } TEST_METHOD(ItemGiveTest){ Inventory::AddItem("Health Potion"s,3); Assert::AreEqual(3U,Inventory::GetItemCount("Health Potion"s),L"Player has 3 Health Potions."); @@ -217,6 +222,7 @@ namespace ItemTests std::weak_ptrtestArmor{Inventory::AddItem("Test Armor"s)}; Assert::IsFalse(testArmor.lock()->CanBeRefined(),L"Test Armor should not be allowed to be refined since it's not an accessory."); Inventory::AddItem(slimeKingRing.lock()->FragmentName(),50U); + Inventory::EquipItem(slimeKingRing,EquipSlot::RING1); Assert::IsTrue(slimeKingRing.lock()->CanBeRefined(),L"Ring of the Slime King should now be allowed to be refined since we meet all requirements."); player->SetMoney(0); Assert::IsFalse(slimeKingRing.lock()->CanBeRefined(),L"Ring of the Slime King should not be allowed to be refined since we do not have enough money."); @@ -228,6 +234,17 @@ namespace ItemTests for(const auto&[attr,val]:slimeKingRing.lock()->RandomStats()){ Assert::AreEqual(ITEM_DATA[slimeKingRing.lock()->ActualName()].GetMaxStats().A_Read(attr),val,L"The current stats should be equal to the maximum stats when refinement is done."); } + /*Ring of the Slime King has the following refining stats: + * StatValues = Health,Mana,Move Spd % + MinStats = 5,1,1 + MaxStats = 20,4,3 + * + Therefore, after this process is done the player should have 20 more health, 4 more mana, and 3% more move speed than normal. + */ + //These checks make sure that the refining call actually modifies already equipped items! + Assert::AreEqual(120,player->GetMaxHealth(),L"Player should now have 120 max health."); + Assert::AreEqual(104,player->GetMaxMana(),L"Player should now have 104 max mana."); + Assert::AreEqual(1.03f,player->GetMoveSpdMult(),L"Player should now have 103% move speed."); } TEST_METHOD(EnchantTestCheck){ std::weak_ptrslimeKingRing{Inventory::AddItem("Ring of the Slime King"s)}; diff --git a/Adventures in Lestoria Tests/MonsterTests.cpp b/Adventures in Lestoria Tests/MonsterTests.cpp index 8c7f2aeb..ae920e36 100644 --- a/Adventures in Lestoria Tests/MonsterTests.cpp +++ b/Adventures in Lestoria Tests/MonsterTests.cpp @@ -108,8 +108,10 @@ namespace MonsterTests SetupTestMonster(); SetupMockMap(); } - ~MonsterTest(){ - testGame.release(); + TEST_METHOD_CLEANUP(MonsterTestCleanup){ + testGame->EndGame(); + testGame->OnUserUpdate(0.f); + testGame.reset(); } TEST_METHOD(DisplayNameCheck){ Assert::AreEqual("Test Monster",MONSTER_DATA["TestName"].GetDisplayName().c_str()); diff --git a/Adventures in Lestoria Tests/PlayerTests.cpp b/Adventures in Lestoria Tests/PlayerTests.cpp index db3fb61a..ba2afa6d 100644 --- a/Adventures in Lestoria Tests/PlayerTests.cpp +++ b/Adventures in Lestoria Tests/PlayerTests.cpp @@ -103,6 +103,7 @@ namespace PlayerTests TEST_METHOD_CLEANUP(CleanupTests){ testGame->EndGame(); testGame->OnUserUpdate(0.f); + testGame.reset(); } TEST_METHOD(PlayerAlive){ Assert::IsTrue(player->IsAlive()); diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj b/Adventures in Lestoria/Adventures in Lestoria.vcxproj index 6125752b..1d43d8ca 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj @@ -400,6 +400,10 @@ + + + + @@ -773,6 +777,10 @@ + + + + diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters index feaf00b6..bf7bce59 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters @@ -699,6 +699,9 @@ Header Files\Interface + + Header Files\Interface + @@ -1217,6 +1220,9 @@ Source Files\Effects + + Source Files\Interface + diff --git a/Adventures in Lestoria/ArtificerDisassembleWindow.cpp b/Adventures in Lestoria/ArtificerDisassembleWindow.cpp index ba795d4c..3442c2cb 100644 --- a/Adventures in Lestoria/ArtificerDisassembleWindow.cpp +++ b/Adventures in Lestoria/ArtificerDisassembleWindow.cpp @@ -109,7 +109,7 @@ void Menu::InitializeArtificerDisassembleWindow(){ EnableDisassemblyDisplay(); RowItemDisplay&item{*DYNAMIC_POINTER_CAST(data.component)}; Component(data.menu.type,"Item Icon")->SetItem(item.GetItem().lock()); - Component(data.menu.type,"Disassembly Result")->SetIcon(GFX.at(item.GetItem().lock()->FragmentIcon().value()).Decal()); + Component(data.menu.type,"Disassembly Result")->SetIcon(GFX.at(item.GetItem().lock()->FragmentName()).Decal()); Component(data.menu.type,"Disassembly Result Title")->SetLabel(item.GetItem().lock()->FragmentName()); Component(data.menu.type,"Fragment Total Count")->SetLabel(std::format("Currently Owned: {}",Inventory::GetItemCount(item.GetItem().lock()->FragmentName()))); return true; @@ -119,7 +119,7 @@ void Menu::InitializeArtificerDisassembleWindow(){ if(childComponent){ RowItemDisplay&item{childComponent.value().get()}; Component(data.menu.type,"Item Icon")->SetItem(item.GetItem().lock()); - Component(data.menu.type,"Disassembly Result")->SetIcon(GFX.at(item.GetItem().lock()->FragmentIcon().value()).Decal()); + Component(data.menu.type,"Disassembly Result")->SetIcon(GFX.at(item.GetItem().lock()->FragmentName()).Decal()); Component(data.menu.type,"Disassembly Result Title")->SetLabel(item.GetItem().lock()->FragmentName()); Component(data.menu.type,"Fragment Total Count")->SetLabel(std::format("Currently Owned: {}",Inventory::GetItemCount(item.GetItem().lock()->FragmentName()))); EnableDisassemblyDisplay(); diff --git a/Adventures in Lestoria/ArtificerRefineResultWindow.cpp b/Adventures in Lestoria/ArtificerRefineResultWindow.cpp new file mode 100644 index 00000000..6b9db456 --- /dev/null +++ b/Adventures in Lestoria/ArtificerRefineResultWindow.cpp @@ -0,0 +1,80 @@ +#pragma region License +/* +License (OLC-3) +~~~~~~~~~~~~~~~ + +Copyright 2024 Joshua Sigona + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions or derivations of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions or derivative works in binary form must reproduce the above +copyright notice. This list of conditions and the following disclaimer must be +reproduced in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may +be used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Portions of this software are copyright © 2024 The FreeType +Project (www.freetype.org). Please see LICENSE_FT.txt for more information. +All rights reserved. +*/ +#pragma endregion + +#include "Menu.h" +#include "AdventuresInLestoria.h" +#include "MenuItemItemButton.h" +#include "DynamicMenuLabel.h" + +INCLUDE_game + +void Menu::InitializeArtificerRefineResultWindow(){ + Menu*artificerRefineResultWindow=CreateMenu(ARTIFICER_REFINE_RESULT,CENTERED,vi2d{144,144}); + + auto itemIcon{artificerRefineResultWindow->ADD("Item Icon",MenuItemItemButton)(geom2d::rect{{artificerRefineResultWindow->size.x/2.f-24.f,0.f},{48.f,48.f}},Item::BLANK,DO_NOTHING,"","",IconButtonAttr::NOT_SELECTABLE)END}; + itemIcon->SetIconScale({2.f,2.f}); + + auto refineItemTextdisplay{artificerRefineResultWindow->ADD("Refine Item Text Display",MenuLabel)(geom2d::rect{vf2d{0.f,artificerRefineResultWindow->size.y/2.f},vf2d{artificerRefineResultWindow->size.x,12.f}},"",1.f,ComponentAttr::SHADOW)END}; + + auto refineResultDisplay{artificerRefineResultWindow->ADD("Refine Result",DynamicMenuLabel)(geom2d::rect{vf2d{0.f,artificerRefineResultWindow->size.y/2.f+artificerRefineResultWindow->size.y*0.33f},vf2d{artificerRefineResultWindow->size.x,12.f}},[](){return "";},1.f,ComponentAttr::SHADOW)END}; + + auto continueButton{artificerRefineResultWindow->ADD("Continue Button",MenuComponent)(geom2d::rect{vf2d{artificerRefineResultWindow->size.x/4.f,artificerRefineResultWindow->size.y-6.f},{artificerRefineResultWindow->size.x/2.f,12.f}},"Continue",[](MenuFuncData data){ + onClick: + Menu::CloseMenu(); + return true; + })END}; + + artificerRefineResultWindow->SetupKeyboardNavigation( + [](MenuType type,Data&returnData){ //On Open + returnData=""; + }, + { //Button Key + {game->KEY_SCROLL,{"Navigate",[](MenuType type){}}}, + {game->KEY_BACK,{"Stay",[](MenuType type){ + Menu::CloseMenu(); + }}}, + {game->KEY_CONFIRM,{"Select",[](MenuType type){}}}, + } + ,{ //Button Navigation Rules + {"Sample Button",{ + .up="", + .down="", + .left="", + .right="",}}, + }); +} \ No newline at end of file diff --git a/Adventures in Lestoria/ArtificerRefineWindow.cpp b/Adventures in Lestoria/ArtificerRefineWindow.cpp index 44bf788a..e1918d9c 100644 --- a/Adventures in Lestoria/ArtificerRefineWindow.cpp +++ b/Adventures in Lestoria/ArtificerRefineWindow.cpp @@ -43,6 +43,8 @@ All rights reserved. #include "MenuRefineLabel.h" #include "PlayerMoneyLabel.h" #include "MenuDecal.h" +#include "SoundEffect.h" +#include "DynamicMenuLabel.h" INCLUDE_game @@ -120,9 +122,19 @@ void Menu::InitializeArtificerRefineWindow(){ auto fragmentDisplayLabel{artificerRefineWindow->ADD("Fragment Label",MenuLabel)(geom2d::rect{{artificerRefineWindow->size.x/2+80.f,152.f},{artificerRefineWindow->size.x/2-60.f,12.f}},"",1.f,ComponentAttr::SHADOW|ComponentAttr::FIT_TO_LABEL|ComponentAttr::LEFT_ALIGN)END}; auto fragmentMoneyCostLabel{artificerRefineWindow->ADD("Fragment Money Cost Label",MenuLabel)(geom2d::rect{{artificerRefineWindow->size.x/2+80.f,164.f},{artificerRefineWindow->size.x/2-60.f,12.f}},"",1.f,ComponentAttr::SHADOW|ComponentAttr::LEFT_ALIGN)END}; - auto fragmentRefineButton{artificerRefineWindow->ADD("Fragment Refine Button",MenuComponent)(geom2d::rect{{artificerRefineWindow->size.x/2+96.f,180.f},{artificerRefineWindow->size.x/2-76.f,12.f}},"Refine",[](MenuFuncData data){ + auto fragmentRefineButton{artificerRefineWindow->ADD("Fragment Refine Button",MenuComponent)(geom2d::rect{{artificerRefineWindow->size.x/2+96.f,180.f},{artificerRefineWindow->size.x/2-76.f,12.f}},"Refine",[EnableRefineDisplay](MenuFuncData data){ onClick: - + SoundEffect::PlaySFX("Sprint",SoundEffect::CENTERED); + std::weak_ptritem{Component(data.menu.type,"Item Icon")->GetItem()}; + RefineResult result{item.lock()->Refine()}; + Component(ARTIFICER_REFINE_RESULT,"Item Icon")->SetItem(item); + Component(ARTIFICER_REFINE_RESULT,"Refine Result")->SetLabelUpdateFunction([result](){ + const Pixel shimmeringColor{PixelLerp(WHITE,{220,220,220},sin((70*game->GetRunTime())/2.f+0.5f))}; + return std::format("{} -> {}+{}{} #FFFF00UP!",result.first.Name(),shimmeringColor.toHTMLColorCode(),result.second,result.first.DisplayAsPercent()?"%":""); + }); + Component(ARTIFICER_REFINE_RESULT,"Refine Item Text Display")->SetLabel(std::format("#FFFF00{} has been refined!",item.lock()->DisplayName())); + EnableRefineDisplay(); //Refresh the current display contents. + Menu::OpenMenu(ARTIFICER_REFINE_RESULT,true); return true; })END}; diff --git a/Adventures in Lestoria/DynamicMenuLabel.h b/Adventures in Lestoria/DynamicMenuLabel.h new file mode 100644 index 00000000..d9464562 --- /dev/null +++ b/Adventures in Lestoria/DynamicMenuLabel.h @@ -0,0 +1,57 @@ +#pragma region License +/* +License (OLC-3) +~~~~~~~~~~~~~~~ + +Copyright 2024 Joshua Sigona + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions or derivations of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions or derivative works in binary form must reproduce the above +copyright notice. This list of conditions and the following disclaimer must be +reproduced in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may +be used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Portions of this software are copyright © 2024 The FreeType +Project (www.freetype.org). Please see LICENSE_FT.txt for more information. +All rights reserved. +*/ +#pragma endregion +#pragma once + +#include "MenuLabel.h" + +//A class holding a lambda function where you return an updated menu label that is declared on creation to reduce boilerplate for menu labels that just need to update text differently.. +class DynamicMenuLabel:public MenuLabel{ +public: + inline DynamicMenuLabel(geom2d::rectrect,std::functionlabelUpdateFunc,float scale=1,ComponentAttr attributes=ComponentAttr::NONE) + :labelUpdateFunc(labelUpdateFunc),MenuLabel(rect,"",scale,attributes){} + inline void SetLabelUpdateFunction(std::functionlabelUpdateFunc){ + this->labelUpdateFunc=labelUpdateFunc; + } +protected: + inline virtual void Update(AiL*game)override{ + SetLabel(labelUpdateFunc()); + MenuLabel::Update(game); + } +private: + std::functionlabelUpdateFunc; +}; \ No newline at end of file diff --git a/Adventures in Lestoria/Item.cpp b/Adventures in Lestoria/Item.cpp index d2f6b819..875c28ab 100644 --- a/Adventures in Lestoria/Item.cpp +++ b/Adventures in Lestoria/Item.cpp @@ -1413,7 +1413,7 @@ const EquipSlot ItemInfo::StringToEquipSlot(std::string_view slotName){ return nameToEquipSlot[std::string(slotName)]; } -[[nodiscard]]const Inventory::DisassembleResult Inventory::Disassemble(std::weak_ptritemRef){ +const Inventory::DisassembleResult Inventory::Disassemble(std::weak_ptritemRef){ if(ISBLANK(itemRef))ERR(std::format("WARNING! Trying to feed a blank item into the Disassemble function! THIS SHOULD NOT BE HAPPENING!")); const std::shared_ptr¤tItem{itemRef.lock()}; if(!currentItem->IsAccessory())ERR(std::format("WARNING! Trying to disassemble Item {} which is not an accessory! THIS SHOULD NOT BE HAPPENING!",currentItem->ActualName())); @@ -1457,6 +1457,7 @@ RefineResult Item::Refine(){ const float oldAmt{randomizedStats.A_Read(chosenAttr)}; randomizedStats.A(chosenAttr)=std::min(maxStat,oldAmt+increaseAmt); const float newAmt{randomizedStats.A_Read(chosenAttr)}; + game->GetPlayer()->RecalculateEquipStats(); return RefineResult{chosenAttr,newAmt-oldAmt}; } diff --git a/Adventures in Lestoria/Item.h b/Adventures in Lestoria/Item.h index 89d18389..964bf2b8 100644 --- a/Adventures in Lestoria/Item.h +++ b/Adventures in Lestoria/Item.h @@ -310,7 +310,7 @@ public: static void ResetLoadoutItemsUsed(); static void GivePlayerLoadoutItemsUsed(); static const bool EquipsFullyMaxedOut(int maxWeaponLevel=10,int maxArmorLevel=10); - static const Inventory::DisassembleResult Disassemble(std::weak_ptritemRef); + [[nodiscard]]static const Inventory::DisassembleResult Disassemble(std::weak_ptritemRef); static bool SwapItems(ITCategory itemCategory,uint32_t slot1,uint32_t slot2); //Makes sure this is a valid category. Will error out if it doesn't exist! Use for ERROR HANDLING! diff --git a/Adventures in Lestoria/Menu.cpp b/Adventures in Lestoria/Menu.cpp index 82737353..dfbfab7f 100644 --- a/Adventures in Lestoria/Menu.cpp +++ b/Adventures in Lestoria/Menu.cpp @@ -120,6 +120,7 @@ void Menu::InitializeMenus(){ InitializeCreditsWindow(); InitializeArtificerWindow(); InitializeArtificerRefineWindow(); + InitializeArtificerRefineResultWindow(); InitializeArtificerDisassembleWindow(); InitializeArtificerEnchantWindow(); InitializeArtificerEnchantConfirmWindow(); diff --git a/Adventures in Lestoria/Menu.h b/Adventures in Lestoria/Menu.h index 7ec1d765..7a575094 100644 --- a/Adventures in Lestoria/Menu.h +++ b/Adventures in Lestoria/Menu.h @@ -113,9 +113,8 @@ class Menu:public IAttributable{ static void InitializeCreditsWindow(); static void InitializeArtificerWindow(); static void InitializeArtificerRefineWindow(); - static void InitializeArtificerRefineConfirmWindow(); + static void InitializeArtificerRefineResultWindow(); static void InitializeArtificerDisassembleWindow(); - static void InitializeArtificerDisassembleConfirmWindow(); static void InitializeArtificerEnchantWindow(); static void InitializeArtificerEnchantConfirmWindow(); diff --git a/Adventures in Lestoria/MenuType.h b/Adventures in Lestoria/MenuType.h index 722fe41b..9601bc97 100644 --- a/Adventures in Lestoria/MenuType.h +++ b/Adventures in Lestoria/MenuType.h @@ -71,6 +71,7 @@ enum MenuType{ CREDITS, //100% Controller Compatibility ARTIFICER, //100% Controller Compatibility ARTIFICER_REFINE, + ARTIFICER_REFINE_RESULT, ARTIFICER_DISASSEMBLE, ARTIFICER_ENCHANT, ARTIFICER_ENCHANT_CONFIRM, diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h index 582db743..b949c1ba 100644 --- a/Adventures in Lestoria/Version.h +++ b/Adventures in Lestoria/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 1 #define VERSION_MINOR 2 #define VERSION_PATCH 5 -#define VERSION_BUILD 11461 +#define VERSION_BUILD 11483 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/x64/Release/Adventures in Lestoria.exe b/x64/Release/Adventures in Lestoria.exe index 76bcdf38..43bd0e08 100644 Binary files a/x64/Release/Adventures in Lestoria.exe and b/x64/Release/Adventures in Lestoria.exe differ