diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj b/Adventures in Lestoria/Adventures in Lestoria.vcxproj
index bbb35967..41d7c4e0 100644
--- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj
+++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj
@@ -649,6 +649,10 @@
+
+
+
+
diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
index 5678257d..07e10e25 100644
--- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
+++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
@@ -791,6 +791,9 @@
Source Files\Interface
+
+ Source Files\Interface
+
diff --git a/Adventures in Lestoria/AdventuresInLestoria.cpp b/Adventures in Lestoria/AdventuresInLestoria.cpp
index 2311201a..fa9b3c98 100644
--- a/Adventures in Lestoria/AdventuresInLestoria.cpp
+++ b/Adventures in Lestoria/AdventuresInLestoria.cpp
@@ -71,6 +71,7 @@ All rights reserved.
#include "TitleScreen.h"
#include "SoundEffect.h"
#include "olcPGEX_Gamepad.h"
+#include "InventoryScrollableWindowComponent.h"
#ifndef __EMSCRIPTEN__
#include "discord.h"
#endif
@@ -2461,7 +2462,7 @@ void AiL::InitializeDefaultKeybinds(){
KEY_ATTACK.AddKeybind({KEY,SHIFT});
KEY_ATTACK.AddKeybind({MOUSE,Mouse::LEFT});
KEY_ATTACK.AddKeybind({CONTROLLER,static_cast(GPButtons::L2)});
- KEY_LEFT.AddKeybind({KEY,A});
+ KEY_LEFT.AddKeybind({KEY,Key::A});
KEY_LEFT.AddKeybind({KEY,LEFT});
KEY_LEFT.AddKeybind({CONTROLLER,static_cast(GPButtons::DPAD_L)});
KEY_RIGHT.AddKeybind({KEY,D});
@@ -2806,6 +2807,19 @@ const std::weak_ptr- AiL::GetLoadoutItem(int slot){
void AiL::SetLoadoutItem(int slot,std::string itemName){
if(slot<0||slot>loadout.size()-1)ERR("Invalid inventory slot "+std::to_string(slot)+", please choose a slot in range (0-"+std::to_string(loadout.size()-1)+").");
if(Inventory::GetItemCount(itemName)>0){
+ if(loadout[slot]&&!ISBLANK(loadout[slot])&&loadout[slot]->Amt()>0){
+ //If the slot isn't blank, we should clear the item from being selected in the consumables list.
+ auto&itemsList=Component(INVENTORY_CONSUMABLES,"inventory")->GetComponents();
+ auto item=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&component){
+ if(DYNAMIC_POINTER_CAST(component)->GetItem().lock()->ActualName()==loadout[slot]->ActualName()){
+ return true;
+ }
+ return false;
+ });
+ if(item!=itemsList.end()){
+ DYNAMIC_POINTER_CAST(*item)->selected=-1;
+ }else ERR(std::format("WARNING! Could not find item {} in inventory while deselecting a loadout item from the consumables menu! THIS SHOULD NOT BE HAPPENING!",loadout[slot]->ActualName()));
+ }
loadout[slot]=Inventory::CopyItem(itemName)[0];
GetLoadoutItem(slot).lock()->amt=std::min((uint32_t)"Player.Item Loadout Limit"_I,GetLoadoutItem(slot).lock()->Amt()); //We are only allowed to have up to 10 maximum of an item on a journey.
InputGroup*inputGroup=nullptr;
@@ -2848,6 +2862,18 @@ void AiL::SetLoadoutItem(int slot,std::string itemName){
}break;
}
+ //Set the loadout slot selection for this loadout item.
+ auto&itemsList=Component(INVENTORY_CONSUMABLES,"inventory")->GetComponents();
+ auto item=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&component){
+ if(DYNAMIC_POINTER_CAST(component)->GetItem().lock()->ActualName()==loadout[slot]->ActualName()){
+ return true;
+ }
+ return false;
+ });
+ if(item!=itemsList.end()){
+ DYNAMIC_POINTER_CAST(*item)->selected=slot;
+ }else ERR(std::format("WARNING! Could not find item {} in inventory while selecting a loadout item from the consumables menu! THIS SHOULD NOT BE HAPPENING!",loadout[slot]->ActualName()));
+
}else{
ERR("Trying to set item "+itemName+" in Loadout slot "+std::to_string(slot)+" when said item does not exist in our inventory!");
}
diff --git a/Adventures in Lestoria/InventoryConsumableWindow.cpp b/Adventures in Lestoria/InventoryConsumableWindow.cpp
index 3873fb10..fd916e38 100644
--- a/Adventures in Lestoria/InventoryConsumableWindow.cpp
+++ b/Adventures in Lestoria/InventoryConsumableWindow.cpp
@@ -88,10 +88,20 @@ void Menu::InitializeConsumableInventoryWindow(){
inventoryWindow->SetupKeyboardNavigation(
[](MenuType type,Data&returnData){ //On Open
- //Get the first component in the consumables list.
+ //Try to find the component that matches the loadout item we have on us.
std::vector>&components=Component(INVENTORY_CONSUMABLES,"inventory")->GetComponents();
+ auto inventory=Component(INVENTORY_CONSUMABLES,"inventory");
+ auto foundComponent=std::find_if(components.begin(),components.end(),[&](auto&component){
+ if(!ISBLANK(DYNAMIC_POINTER_CAST(component)->GetItem().lock())&&DYNAMIC_POINTER_CAST(component)->GetItem().lock()->ActualName()==game->GetLoadoutItem(Menu::menus[type]->I(A::LOADOUT_SLOT)).lock()->ActualName()){
+ return true;
+ }
+ return false;
+ });
+ if(foundComponent!=components.end()){
+ returnData=*foundComponent;
+ }else
if(components.size()>0){
- returnData=components[0].lock()->GetName();
+ returnData=components.front();
}else{
returnData="OK Button";
}
@@ -103,17 +113,37 @@ void Menu::InitializeConsumableInventoryWindow(){
}}},
}
,{ //Button Navigation Rules
+ {"OK Button",{
+ .up=[](MenuType type,Data&returnData){
+ auto&itemsList=Component(type,"inventory")->GetComponents();
+ if(itemsList.size()>0){
+ returnData=itemsList.back();
+ }
+ },
+ .down=[](MenuType type,Data&returnData){
+ auto&itemsList=Component(type,"inventory")->GetComponents();
+ if(itemsList.size()>0){
+ returnData=itemsList.front();
+ }
+ },
+ .left=[](MenuType type,Data&returnData){
+ auto&itemsList=Component(type,"inventory")->GetComponents();
+ if(itemsList.size()>0){
+ returnData=itemsList.back();
+ }
+ },
+ .right=[](MenuType type,Data&returnData){
+ auto&itemsList=Component(type,"inventory")->GetComponents();
+ if(itemsList.size()>0){
+ returnData=itemsList.front();
+ }
+ },
+ }},
{"inventory",{
- .up="Quit Game Button",
- .down="Load Game Button",}},
- {"Load Game Button",{
- .up="New Game Button",
- .down="Quit Game Button",}},
- {"Quit Game Button",{
.up=[](MenuType type,Data&returnData){
auto&selection=Menu::menus[type]->GetSelection();
auto&itemsList=Component(type,"inventory")->GetComponents();
- auto itemsWindow=Component(type,"inventory")
+ auto itemsWindow=Component(type,"inventory");
auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return comp.lock()==selection.lock();});
if(itemsList.size()>0){
if(component==itemsList.end()){
@@ -121,26 +151,27 @@ void Menu::InitializeConsumableInventoryWindow(){
returnData=itemsList.back();
}else{
int invWidth=int((itemsWindow->rect.size.x-12)/(float(itemsWindow->options.size.x)+itemsWindow->options.padding));
- std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(component);
+ std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(*component);
int newRowIndex=selectedButton.lock()->inventoryIndex-invWidth; //Moving up moves the cursor up an entire row.
if(newRowIndex<0){
//This means we have to wrap around.
- newRowIndex+=itemsList.size();
+ returnData="OK Button";
+ return;
}
if(newRowIndex<0||newRowIndex>=itemsList.size())ERR(std::format("New Row Index ended up out-of-bounds! newRowIndex={}. THIS SHOULD NOT BE HAPPENING!",newRowIndex));
//Select the component that matches this new number.
- auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp).lock()->inventoryIndex==newRowIndex;});
+ auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp)->inventoryIndex==newRowIndex;});
if(component==itemsList.end())ERR(std::format("WARNING! Could not find row index {} in items list while navigating! THIS SHOULD NOT BE HAPPENING!",newRowIndex));
- returnData=component;
+ returnData=*component;
}
}else{
returnData="OK Button";
}
},
- .right=[](MenuType type,Data&returnData){
+ .down=[](MenuType type,Data&returnData){
auto&selection=Menu::menus[type]->GetSelection();
auto&itemsList=Component(type,"inventory")->GetComponents();
- auto itemsWindow=Component(type,"inventory")
+ auto itemsWindow=Component(type,"inventory");
auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return comp.lock()==selection.lock();});
if(itemsList.size()>0){
if(component==itemsList.end()){
@@ -148,72 +179,76 @@ void Menu::InitializeConsumableInventoryWindow(){
returnData=itemsList.front();
}else{
int invWidth=int((itemsWindow->rect.size.x-12)/(float(itemsWindow->options.size.x)+itemsWindow->options.padding));
- std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(component);
- int newRowIndex=std::clamp(selectedButton.lock()->inventoryIndex+1,(selectedButton.lock()->inventoryIndex/invWidth)*invWidth,std::min(itemsList.size(),(selectedButton.lock()->inventoryIndex/invWidth+1)*invWidth-1)); //Moving right, we need to wrap around if we get to the edge.
+ std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(*component);
+ int newRowIndex=selectedButton.lock()->inventoryIndex+invWidth; //Moving down moves the cursor down an entire row.
if(newRowIndex>=itemsList.size()){
//This means we have to wrap around.
- newRowIndex-=itemsList.size();
+ returnData="OK Button";
+ return;
}
if(newRowIndex<0||newRowIndex>=itemsList.size())ERR(std::format("New Row Index ended up out-of-bounds! newRowIndex={}. THIS SHOULD NOT BE HAPPENING!",newRowIndex));
//Select the component that matches this new number.
- auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp).lock()->inventoryIndex==newRowIndex;});
+ auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp)->inventoryIndex==newRowIndex;});
if(component==itemsList.end())ERR(std::format("WARNING! Could not find row index {} in items list while navigating! THIS SHOULD NOT BE HAPPENING!",newRowIndex));
- returnData=component;
+ returnData=*component;
}
}else{
returnData="OK Button";
}
},
- .down=[](MenuType type,Data&returnData){
+ .left=[](MenuType type,Data&returnData){
auto&selection=Menu::menus[type]->GetSelection();
auto&itemsList=Component(type,"inventory")->GetComponents();
- auto itemsWindow=Component(type,"inventory")
+ auto itemsWindow=Component(type,"inventory");
auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return comp.lock()==selection.lock();});
if(itemsList.size()>0){
if(component==itemsList.end()){
- //Set the selected button to the first element in the list.
- returnData=itemsList.front();
+ //Set the selected button to the last element in the list.
+ returnData=itemsList.back();
}else{
int invWidth=int((itemsWindow->rect.size.x-12)/(float(itemsWindow->options.size.x)+itemsWindow->options.padding));
- std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(component);
- int newRowIndex=selectedButton.lock()->inventoryIndex+invWidth; //Moving down moves the cursor down an entire row.
- if(newRowIndex>=itemsList.size()){
+ std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(*component);
+
+ int rowBaseIndex=(selectedButton.lock()->inventoryIndex/invWidth)*invWidth;
+ int newRowIndex=selectedButton.lock()->inventoryIndex-1;
+ if(newRowIndex=itemsList.size())ERR(std::format("New Row Index ended up out-of-bounds! newRowIndex={}. THIS SHOULD NOT BE HAPPENING!",newRowIndex));
//Select the component that matches this new number.
- auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp).lock()->inventoryIndex==newRowIndex;});
+ auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp)->inventoryIndex==newRowIndex;});
if(component==itemsList.end())ERR(std::format("WARNING! Could not find row index {} in items list while navigating! THIS SHOULD NOT BE HAPPENING!",newRowIndex));
- returnData=component;
+ returnData=*component;
}
}else{
returnData="OK Button";
}
},
- .left=[](MenuType type,Data&returnData){
+ .right=[](MenuType type,Data&returnData){
auto&selection=Menu::menus[type]->GetSelection();
auto&itemsList=Component(type,"inventory")->GetComponents();
- auto itemsWindow=Component(type,"inventory")
+ auto itemsWindow=Component(type,"inventory");
auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return comp.lock()==selection.lock();});
if(itemsList.size()>0){
if(component==itemsList.end()){
- //Set the selected button to the last element in the list.
- returnData=itemsList.back();
+ //Set the selected button to the first element in the list.
+ returnData=itemsList.front();
}else{
int invWidth=int((itemsWindow->rect.size.x-12)/(float(itemsWindow->options.size.x)+itemsWindow->options.padding));
- std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(component);
-
- int newRowIndex=std::clamp(selectedButton.lock()->inventoryIndex-1,(selectedButton.lock()->inventoryIndex/invWidth)*invWidth,std::min(itemsList.size(),(selectedButton.lock()->inventoryIndex/invWidth+1)*invWidth-1)); //Moving left, we need to wrap around if we get to the edge.
- if(newRowIndex<0){
- //This means we have to wrap around.
- newRowIndex+=itemsList.size();
- }
+ std::weak_ptrselectedButton=DYNAMIC_POINTER_CAST(*component);
+
+ int rowBaseIndex=(selectedButton.lock()->inventoryIndex/invWidth)*invWidth;
+ int newRowIndex=selectedButton.lock()->inventoryIndex+1;
+ if(newRowIndex>rowBaseIndex+invWidth-1)newRowIndex-=invWidth;
+ newRowIndex=std::clamp(newRowIndex,0,int(itemsList.size()-1));
if(newRowIndex<0||newRowIndex>=itemsList.size())ERR(std::format("New Row Index ended up out-of-bounds! newRowIndex={}. THIS SHOULD NOT BE HAPPENING!",newRowIndex));
//Select the component that matches this new number.
- auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp).lock()->inventoryIndex==newRowIndex;});
+ auto component=std::find_if(itemsList.begin(),itemsList.end(),[&](auto&comp){return DYNAMIC_POINTER_CAST(comp)->inventoryIndex==newRowIndex;});
if(component==itemsList.end())ERR(std::format("WARNING! Could not find row index {} in items list while navigating! THIS SHOULD NOT BE HAPPENING!",newRowIndex));
- returnData=component;
+ returnData=*component;
}
}else{
returnData="OK Button";
diff --git a/Adventures in Lestoria/Item.cpp b/Adventures in Lestoria/Item.cpp
index eda422d6..14cc3b0a 100644
--- a/Adventures in Lestoria/Item.cpp
+++ b/Adventures in Lestoria/Item.cpp
@@ -735,7 +735,7 @@ const ItemScript&ItemInfo::OnUseAction()const{
const bool Item::IsBlank()const{
if(Item::IsBlankStaticCallCounter!=1)ERR("WARNING! You should not call the IsBlank() function directly! Use ISBLANK() macro instead!")
Item::IsBlankStaticCallCounter--;
- return amt==0||it==nullptr;
+ return this==nullptr||amt==0||it==nullptr;
}
void Inventory::Clear(ITCategory itemCategory){
diff --git a/Adventures in Lestoria/Key.cpp b/Adventures in Lestoria/Key.cpp
index 43c76d27..b4cfbfe8 100644
--- a/Adventures in Lestoria/Key.cpp
+++ b/Adventures in Lestoria/Key.cpp
@@ -393,7 +393,7 @@ std::map,GenericKey::KeyInfo> GenericKey::keyLiteral={
{{KEY, ESCAPE},{"ESC"}},
{{KEY, RETURN},{"ENTER"}},
{{KEY, ENTER},{"ENTER"}},
- {{KEY, PAUSE},{"PAUSE"}},
+ {{KEY, Key::PAUSE},{"PAUSE"}},
{{KEY, SCROLL},{"SCR LK"}},
{{KEY, NP0},{"NP0"}},
{{KEY, NP1},{"NP1"}},
diff --git a/Adventures in Lestoria/Menu.cpp b/Adventures in Lestoria/Menu.cpp
index 7ac8ed39..9233d217 100644
--- a/Adventures in Lestoria/Menu.cpp
+++ b/Adventures in Lestoria/Menu.cpp
@@ -76,7 +76,6 @@ Menu::Menu(vf2d pos,vf2d size)
}
void Menu::InitializeMenus(){
- #define MAX_MENUS 32
stack.reserve(MAX_MENUS);
InitializeConsumableInventoryWindow();
InitializeClassSelectionWindow();
@@ -102,6 +101,7 @@ void Menu::InitializeMenus(){
InitializeShermanWindow();
InitializeKeyboardInputWindow();
InitializeNewKeybindInputWindow();
+ InitializePauseWindow();
for(MenuType type=MenuType(int(MenuType::ENUM_START)+1);typeonClick(MenuFuncData{*this,game,selection,dynamic_pointer_cast(selection.lock()->parentComponent.lock())});
if(buttonStillValid){
if(selection.lock()->menuDest!=MenuType::ENUM_END){
- if(stack.size()<32){
- stack.push_back(menus[selection.lock()->menuDest]);//Navigate to the next menu.
+ if(stack.size()menuDest); //Navigate to the next menu.
}else{
ERR("WARNING! Exceeded menu stack size limit!")
}
diff --git a/Adventures in Lestoria/Menu.h b/Adventures in Lestoria/Menu.h
index ec9632ac..a92b6170 100644
--- a/Adventures in Lestoria/Menu.h
+++ b/Adventures in Lestoria/Menu.h
@@ -75,6 +75,7 @@ using ToggleFunc=std::function;
#define DEFAULT_DEPTH -999999
#define STARTING_DEPTH 999999
+#define MAX_MENUS 32
using Data=std::variant>;
using MenuDataFunc=std::function;
@@ -114,6 +115,7 @@ class Menu:public IAttributable{
static void InitializeShermanWindow();
static void InitializeKeyboardInputWindow();
static void InitializeNewKeybindInputWindow();
+ static void InitializePauseWindow();
friend class AiL;
friend class ItemInfo;
diff --git a/Adventures in Lestoria/MenuComponent.cpp b/Adventures in Lestoria/MenuComponent.cpp
index 751676aa..2c22f848 100644
--- a/Adventures in Lestoria/MenuComponent.cpp
+++ b/Adventures in Lestoria/MenuComponent.cpp
@@ -40,6 +40,7 @@ All rights reserved.
#include "drawutil.h"
#include "util.h"
#include "ScrollableWindowComponent.h"
+#include "Menu.h"
INCLUDE_game
@@ -250,8 +251,8 @@ void MenuComponent::Click(){
bool buttonStillValid=onClick(MenuFuncData{*Menu::menus[parentMenu],game,Menu::menus[parentMenu]->components[name]});
if(buttonStillValid){
if(menuDest!=MenuType::ENUM_END){
- if(Menu::stack.size()<32){
- Menu::stack.push_back(Menu::menus[menuDest]);//Navigate to the next menu.
+ if(Menu::stack.size()
+
+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"
+
+void Menu::InitializePauseWindow(){
+ Menu*pauseWindow=CreateMenu(MenuType::PAUSE,CENTERED,vi2d{96,164});
+}
\ No newline at end of file
diff --git a/Adventures in Lestoria/TODO.txt b/Adventures in Lestoria/TODO.txt
index bc09d549..a00a1daa 100644
--- a/Adventures in Lestoria/TODO.txt
+++ b/Adventures in Lestoria/TODO.txt
@@ -1,43 +1,15 @@
January 1st
===========
-Settings Menu
- - Any settings should be saved to the save file!
- - Volume Controls
- - Play Sound in Background (Sound while Focused)
- - Keyboard aim assist (When playing w/keyboard, have the game auto fire for players that don't want to use mouse or cannot)
- - Terrain Collision Boxes
- - Key Configuration
- -Upon pressing a key, check if the key is bound to another option, if so,
- remove that bind from the list. Up to two keys may be binded per action.
- -We have to save keybinds to the save file.
-
- Menu Inputs
- - Confirm
- - Back
- - Menu
- - Change Loadout (Overworld Map)
- - Unequip
- - Left
- - Right
- - Up
- - Down
-
- Gameplay Inputs
- - Ability 1,2,3,4
- - Item 1,2,3
- - Basic Attack
-
- XP Bar
+- Mouse click keybind changes should be possible and mouse buttons should show up in the list along with keyboard mappings.
+ - If a mouse click is reassigned, it is removed from any other inputs with that mouse click.
+
- Implement escape menu during gameplay.
- If you leave a stage, the stage complete window still shows up, showing only the loot you obtained that session.
-- When setting loadout items while loading the game it should highlight the correct item in the consumables inventory as well.
-
- Clamp bosses in boss arenas.
-- Save randomized traveling merchant.
-
- Track items used during a stage, on death, restore the loadout item quantities used.
- Add screen shake and rumble as a toggle.
@@ -46,7 +18,6 @@ Settings Menu
January 31st
============
-Story proofreading/correcting/storyboarding
- Loading Screen
- Title Screen setpieces
@@ -63,4 +34,6 @@ Story proofreading/correcting/storyboarding
- Auto aim causes retreat-type moves to aim away from the auto target, and prefer the direction the player's moving in.
-- Save window position and size
\ No newline at end of file
+- Save window position and size
+
+- Fullscreen toggle
\ No newline at end of file
diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h
index 297cc4d4..67136688 100644
--- a/Adventures in Lestoria/Version.h
+++ b/Adventures in Lestoria/Version.h
@@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 0
#define VERSION_MINOR 3
#define VERSION_PATCH 0
-#define VERSION_BUILD 6872
+#define VERSION_BUILD 6907
#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 5a9a9fce..09de122c 100644
Binary files a/x64/Release/Adventures in Lestoria.exe and b/x64/Release/Adventures in Lestoria.exe differ