diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj b/Adventures in Lestoria/Adventures in Lestoria.vcxproj
index 2c240039..01751b4e 100644
--- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj
+++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj
@@ -790,6 +790,7 @@
+
diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
index af5ad58c..1785aa8a 100644
--- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
+++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
@@ -858,6 +858,7 @@
Documentation
+
diff --git a/Adventures in Lestoria/CharacterMenuWindow.cpp b/Adventures in Lestoria/CharacterMenuWindow.cpp
index 2c3ac5da..597d9375 100644
--- a/Adventures in Lestoria/CharacterMenuWindow.cpp
+++ b/Adventures in Lestoria/CharacterMenuWindow.cpp
@@ -60,13 +60,13 @@ namespace CharacterMenuWindow{
const std::functioncalcFunc;
};
const static std::arraydisplayAttrs{
- AttributeData{"Health",[&]()->int{return game->GetPlayer()->GetMaxHealth();}},
- AttributeData{"Attack",[&]()->int{return game->GetPlayer()->GetAttack();}},
- AttributeData{"Defense",[&]()->int{return game->GetPlayer()->GetStat("Defense");}},
- AttributeData{"Move Spd %",[&]()->int{return ceil(game->GetPlayer()->GetMoveSpdMult()*100);}},
- AttributeData{"CDR",[&]()->int{return ceil(game->GetPlayer()->GetCooldownReductionPct()*100);}},
- AttributeData{"Crit Rate",[&]()->int{return ceil(game->GetPlayer()->GetCritRatePct()*100);}},
- AttributeData{"Crit Dmg",[&]()->int{return ceil(game->GetPlayer()->GetCritDmgPct()*100);}},
+ AttributeData{"Health",[]()->int{return game->GetPlayer()->GetMaxHealth();}},
+ AttributeData{"Attack",[]()->int{return game->GetPlayer()->GetAttack();}},
+ AttributeData{"Defense",[]()->int{return game->GetPlayer()->GetStat("Defense");}},
+ AttributeData{"Move Spd %",[]()->int{return ceil(game->GetPlayer()->GetMoveSpdMult()*100);}},
+ AttributeData{"CDR",[]()->int{return ceil(game->GetPlayer()->GetCooldownReductionPct()*100);}},
+ AttributeData{"Crit Rate",[]()->int{return ceil(game->GetPlayer()->GetCritRatePct()*100);}},
+ AttributeData{"Crit Dmg",[]()->int{return ceil(game->GetPlayer()->GetCritDmgPct()*100);}},
};
const static std::arrayslotNames{"Helmet","Weapon","Armor","Gloves","Pants","Shoes","Ring 1","Ring 2"};
template
diff --git a/Adventures in Lestoria/ClassDiagram.cd b/Adventures in Lestoria/ClassDiagram.cd
new file mode 100644
index 00000000..d269cc19
--- /dev/null
+++ b/Adventures in Lestoria/ClassDiagram.cd
@@ -0,0 +1,1334 @@
+
+
+
+
+
+ AAQACAAAABAQAgAAAAAAAAAAAIAIAAAAAAAAEAAAAAA=
+ AccessoryRowItemDisplay.h
+
+
+
+
+
+ AEQAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAgA=
+ CharacterAbilityPreviewComponent.h
+
+
+
+
+
+ IQQAAAAAAAAAAAAAAAAAAAAAAEAAIAAAAQAAAAAAAgA=
+ CharacterRotatingDisplay.h
+
+
+
+
+
+ AQAAAAAAAKAAAAAAAAAAAAAAAAAAABAAAgAAAAAEAgA=
+ Checkbox.h
+
+
+
+
+
+ ACAAAAAAAAAABEAAAABAAAAAAAAAAAAAAAAAAAAAAgA=
+ EnhancementStatsLabel.h
+
+
+
+
+
+ AAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAIACAAAAAgE=
+ EquipSlotButton.h
+
+
+
+
+
+ AgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAgA=
+ FloatingMenuComponent.h
+
+
+
+
+
+ AQAAAIAAAAAAAAAAAAAAAAAAAAABABEAAAEAAAAAAgA=
+ InputDisplayComponent.h
+
+
+
+
+
+ AAAAAAQAAAAAAwAAAAIgAAAAAAAAAAAACAQAAAAAAAA=
+ InputHelper.h
+
+
+
+
+
+ AAAAAAAAAAgAAAAAAAAAAAAABAAAAAAAAAAAAAAIACA=
+ InventoryCreator.h
+
+
+
+
+
+ gEQAAIoAAAgIAAAIAgAgAAAAABAAEACAAAAAAEAIIIA=
+ InventoryScrollableWindowComponent.h
+
+
+
+
+
+ AAAAAAAAAACABEAAAABAAAAAAAAAAAAAAAAAAAAAAAA=
+ ItemMenuLabel.h
+
+
+
+
+
+ gAQAAIAAAAAAAAgAAAAAAEAAAAECAAFAQAAAAAAAAgA=
+ LoadFileButton.h
+
+
+
+
+
+ iA1CJhDEAFVCQkAVYIatQMAiF5xZQ4EYtS1JQEoCUSA=
+ Menu.h
+
+
+
+
+
+ AAQAAAAAAAAAAAgAAAAAAIAAAAAAAIAAAAAAAAAAAgA=
+ MenuAnimatedIconButton.h
+
+
+
+
+
+ AAQAAAAAAAAAAAgAAAQAAAAAAAAgAAAAAAAAAAAAAgA=
+ MenuAnimatedIconToggleButton.h
+
+
+
+
+
+ AUYAAIAAQBACBVmSBAUIqgjUQAA1FgEFAIYoc0QKJg0=
+ MenuComponent.h
+
+
+
+
+
+ AwQAAAAAAAAAAAAAAAAAAAAAAACQAAAAAQAAAAEAAgA=
+ MenuIconButton.h
+
+
+
+
+
+ gAQABIYAAAACAUAAAAAAAAAAAAAAEAABAAAAAhAKIgA=
+ MenuItemButton.h
+
+
+
+
+
+ gAQAAIIABAACBMAABABAAAAAAAABEAABAAAAAAQKAgA=
+ MenuItemItemButton.h
+
+
+
+
+
+ AAQAAAAAAAAABAAAAABAAAAAAAAAAAAAACAIAAAAAAA=
+ MenuItemLabel.h
+
+
+
+
+
+ AAQAAAQAEAAQAAACAAAAAAADBAIRQAAACAAAAEAAAgA=
+ MenuLabel.h
+
+
+
+
+
+ AAAAAAAgAAAAAAAABAAAAAAAAAAAAACAAgAAAAAAAIA=
+ PlayerMoneyLabel.h
+
+
+
+
+
+ AAQAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAgA=
+ PopupMenuLabel.h
+
+
+
+
+
+ AAEAIAIAAAAAEAAAAAAgAAKAAAAAABCAAAAAgAgAAgA=
+ ProgressBar.h
+
+
+
+
+
+ AAAAAAAAAAAABEAAAABAAAAAAAAAAICAAAAgAAAAAgA=
+ RequiredMaterialsList.h
+
+
+
+
+
+ AAAAAAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAA=
+ RowInventoryScrollableWindowComponent.h
+
+
+
+
+
+ gAQAAIIIAABABMAIAABAAAAAABAAEAAHAAAAAAEKEgA=
+ RowItemDisplay.h
+
+
+
+
+
+ AAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ SaveFileNameButton.h
+
+
+
+
+
+ AASBiAAAQIQhADABwACATAEmAAACIgAgAAwiEExARwA=
+ ScrollableWindowComponent.h
+
+
+
+
+
+ AAQAAIAAAAAAAAAIAEAIAAAABAQAAAAAAAAQAAAIBgA=
+ Slider.h
+
+
+
+
+
+ AAQAAAAgAQAAAAAAgAAAAAAAAAAAAAAEAQAAAAAAAgA=
+ SpawnEncounterLabel.h
+
+
+
+
+
+ AAQAAEAAAAIAAgAgAAAAAAABAAABEiAAAAAAAAAAAAA=
+ StatLabel.h
+
+
+
+
+
+ CAQAAAAAAAAAAAAAAAACAAAQACAAAAAAQAAAAAIQAAA=
+ TextEntryLabel.h
+
+
+
+
+
+ QgAAAAgIAAAhBwAAAAQAAAKAAAgAAAAEAAAAAAQAAAA=
+ GameState.h
+
+
+
+
+
+ AgAAAAAIAAABAgAAAAAAADAAAAAAAAAAAAAAAAQAAAA=
+ State_Death.h
+
+
+
+
+
+ AgAAAAAIAAAAAgAAAAAAAAAAAAAAAAgAAAABAAQAAAA=
+ State_GameHub.h
+
+
+
+
+
+ AgAAAAAIAAAAAgAAAAAAAAAAAAAAAAgAAAABAAQAAAA=
+ State_GameRun.h
+
+
+
+
+
+ AgAAAAEIAAAAAgAIAEAAAACQAAAAAAAAAAIAAAQAAEQ=
+ State_LevelComplete.h
+
+
+
+
+
+ AgAAAAAIAAABBgAAAAAAAAAAAAAACAACAAABAgQAAAA=
+ State_MainMenu.h
+
+
+
+
+
+ AgEQABAKAQAAAgAAQAEACACABQAAACSAIAAEAAQAAAA=
+ State_OverworldMap.h
+
+
+
+
+
+ AgAAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAQAAAA=
+ State_Story.h
+
+
+
+
+
+ AAAAAAAAAAAAAAQAAAAABAAAAAAAAAEAAAAAAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAABAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAAAAAEAAAQAAAAAAAAAAAAQAAEAAAAAAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AABAAAAAgAAAAAQAAAACAAAAAAAAAAEAAAAAAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAABAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAQAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAAAAAAAAAQAAAAAAAAAAAABAAEBAAAAAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAAAAAAAAAQAAAAAAAAAAAABAAEAAAAAAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAAAAAAAAAQAAAAAAQACAAAAAAEAAAAAAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAAAAAAAAAQAAAAAAAAAAAAAAEEAAAAQAAAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ AAAAAAACAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAIA=
+ VisualNovel.h
+
+
+
+
+
+ QAYAAAAwAAIgYwQgMBYCAAkQAAAgBEAKAAAAQAQCACA=
+ VisualNovel.h
+
+
+
+
+
+ AACEAAAABAAABAAAAAAAAAAAAAAAAEBAAAAAAIABAAA=
+ Player.h
+
+
+
+
+
+ OO/k1fYU9sL+4X7wnuG/Qc17P2citlndYHHlzT/lsjQ=
+ Player.h
+
+
+
+
+
+ gAAAEAACAFBAFAAABIAIAAAQAAEAAAAAiAAAAAAAAAA=
+ safemap.h
+
+
+
+
+
+ AAAAEAACABAAFAAABIgAAAAQAAEAAAAAgAAAAAAAAAA=
+ safemap.h
+
+
+
+
+
+ FAAEAAAFEAAQAAAACQAAAAkAAAChAAlCBAAAAAAABAE=
+ SaveFile.h
+
+
+
+
+
+ AAAAABBAgAAEAQAAAAAAACAAQAAAAAACEAAAAAAQAAA=
+ SoundEffect.h
+
+
+
+
+
+ AAAAAAAAACAAAAAAAIAAAAAAAAAAAAAAQAAAAAAAAAA=
+ Test.h
+
+
+
+
+
+ AAAAAEEAARAAAAAQAAAAQAAAAAASAAAAAACAAAAAIAA=
+ Theme.h
+
+
+
+
+
+ AAQAAAAAAAAABwgACAgQAAAAAAAAAAAEAACAAAAAEAA=
+ TitleScreen.h
+
+
+
+
+
+ AAEAAAAAEAABYQABCAAUAAAAACAFIEgAKEAAAAABAAA=
+ TMXParser.h
+
+
+
+
+
+ AAIAABAEEAAAAAAAAAAAAAAAAAAAAAAAIgAACAAQAAA=
+ TSXParser.h
+
+
+
+
+
+ AQQAACAAAgAABwAACAAAAAAAAgAAAAFAAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AgQAQAAAAAAAAwgAgBAAIAAAIAAAAAAAAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAAAACIAAAAAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAQABCAAAAAAAwAAAAAAAAAAAAgAAABAAAAAAEAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AIAAACAAAAAAAgAAAAAAAAAAAAAAAAFAgAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAAAACAAAAAAAkAAAAAAAAABAAAAAAFAAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAAAACAAAAAAAgAAAAAAAgAAAAAAAAFAAAAAAAAAAIA=
+ Tutorial.h
+
+
+
+
+
+ AAAAADACAAAAAgAAAAAAAAAAAAAAAAFAAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAAAACAAAAAAAgAAAABAAAAAAAAAAAFAAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAAAAAAAAAAAARAAAAAAgAAAAAAAAAAAAAAAAEAACAA=
+ Unlock.h
+
+
+
+
+
+ PaRAlGA0EoA8qx5o8aQuAJwTJYYG6ABMCmHMCTBxtgA=
+ Monster.h
+
+
+
+
+
+ GQBAAABgABIggSABgAAAAAACggAAAAAAQIRAAAAAQQA=
+ Merchant.h
+
+
+
+
+
+ AgAACggAAAAAA0AAAIQAAIgAIAAgAQAAAAEAAYAAAQA=
+ ItemDrop.h
+
+
+
+
+
+ AhgAABAAAAAAAIABAQAeAAEAEAABACEAAAAgAAAEAAA=
+ Key.h
+
+
+
+
+
+ AEAAABAAAAAIAJABAAbAAAAAIAEIoAEEIEAgAAEMABA=
+ Key.h
+
+
+
+
+
+ QAAAAIAAAAAgAAAAAAAAAAAAAAABABAEYAAgAAAAAAA=
+ Key.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA=
+ Key.h
+
+
+
+
+
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ Key.h
+
+
+
+
+
+ AAQAAAIAAAAADwAAAABSAAAAAACAAACgAAAAAAAAAAA=
+ LoadingScreen.h
+
+
+
+
+
+ AAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ Map.h
+
+
+
+
+
+ AAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAASAAAAAA=
+ Item.h
+
+
+
+
+
+ AEAAAQAAAAAAAAIIAAAACAAAAEEEAAAAAAAgAAAAAAA=
+ Item.h
+
+
+
+
+
+ gAgRHIQFMAUgIdAAAAoAQAAMCAAAAQjoEwEAQAAhSAg=
+ Item.h
+
+
+
+
+
+ JAAAAAUAAAIAIEIAAQABQAAAgSAUgACEAAIAgBJVAAA=
+ Item.h
+
+
+
+
+
+ AAEAAAAAAAAAAAAAAQIAAAAAAAAAAAAAAEAEIAAAQAA=
+ Item.h
+
+
+
+
+
+ AAkABIQAMABosGCAIAcAgAQBCAEEBUBkEgAKXEABTlg=
+ Item.h
+
+
+
+
+
+ AAQAAAAAAAAAAgAAQAgAAAAAAABAAASAAAAwAAAAAAA=
+ Item.h
+
+
+
+
+
+ e21Fy+pnyjuvayvhM8PdnwulBWBzzXEPL8SANUe7eaw=
+ AdventuresInLestoria.h
+
+
+
+
+
+ ABCAAAAAACAAAAAAAAAABAAgAAAAEAAAAAAAAACABAA=
+ Attributable.h
+
+
+
+
+
+ AAAAAAAQAAAAEQBAIAAAAQYAAACGEACAAAAgAAAAAAk=
+ AttributableStat.h
+
+
+
+
+
+ AEAgAAACAAAAAAAABAAAQQAQAAAAEAAAAAAAAAAAAAA=
+ AttributableStat.h
+
+
+
+
+
+ AAQgAAABCIAAIwbwcQVBBEAAAIBggQJYhQEAAEQCBQY=
+ Audio.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAA=
+ ClassInfo.h
+
+
+
+
+
+ gQAAACAAAAAAAAAAAAAAAABAAAAwAgAAAAAAAAAAAAA=
+ CraftingRequirement.h
+
+
+
+
+
+ AAQgAAAAIAAAAQAQAAAgAAIAAAIAAAggACABCAiACAM=
+ DynamicCounter.h
+
+
+
+
+
+ BAAAAAQAQAgEAAAEAIBAAAAAAAAEAAAAAAgAgAAACAA=
+ C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\gdipluseffects.h
+
+
+
+
+
+ AAAAAAAAAAAAAAEAAIAAABAAABAAAAAAAAAAAAAAEAI=
+ Emitter.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAABAAAIAAAAAAAAAAAAAEAAAAA=
+ EncountersSpawnListScrollableWindowComponent.h
+
+
+
+
+
+ AIQAAAAABAhAAQBAAACAQICAAAAAAAIBAAAABAAAAAA=
+ EnvironmentalAudio.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA=
+ Error.h
+
+
+
+
+
+ AAQAQAAAAAAAAABAAAAAABAKCAAAAAIAAAAAAAAAAAA=
+ GameEvent.h
+
+
+
+
+
+ EAQAAAAAAAAAAABAAAAAAAAIAAAAAAAAAgAAAAAAAAA=
+ GameEvent.h
+
+
+
+
+
+ AgAAAAABAAAAQQMAAIAAQCiBCRAAAAAAAAAAAAQAEAg=
+ GameSettings.h
+
+
+
+
+
+ AAAAAAAABAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAIA=
+ IT.h
+
+
+
+
+
+ ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA=
+ Animation.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAA=
+ InventoryScrollableWindowComponent.h
+
+
+
+
+
+ AAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA=
+ Menu.h
+
+
+
+
+
+ AAAAAAAAAAACAAAAAAAAAAAAAAAIAAAAAAAAAgAAgAA=
+ Menu.h
+
+
+
+
+
+ AAAAAAAAgAAAAQAEAAgAAAAAQAAAAAAAQAAAAAAAIAA=
+ Pathfinding.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAAAABAAAEAAAAAIAACAAAAAA=
+ Player.h
+
+
+
+
+
+ ACkAwQEAQAAIoQBQAAAEIAQACAAEMgAABAAEAAkgAgA=
+ Player.h
+
+
+
+
+
+ AAkAwQEAYAAIoQBQAAAEIAQACAAEMgAABAAEAAkgAgA=
+ Player.h
+
+
+
+
+
+ AAkAwQEAQAAIqQBQAAAEIAQACAAEMgAABAAEAAkgAgA=
+ Player.h
+
+
+
+
+
+ AAkAwQEAQAAIoQBQAAAEIAQECAAEMgAABAAEAAkgAgA=
+ Player.h
+
+
+
+
+
+ AAkAwQEAQAAIoQBQAAAEIAQACAAEMgAABAIEAAkgAgA=
+ Player.h
+
+
+
+
+
+ AAkAwQEAQAAIoQBQAAAEKAQACAAEMgAABAAEAAkgAgA=
+ Player.h
+
+
+
+
+
+ EAEAwQgWkYAEAQEBmQdUOYBDitQgEARYaQPUoA0EABA=
+ stb_vorbis.cpp
+
+
+
+
+
+ AACAACAgACAAAIAAAAAABAAAAAAAACAAAAAQAAAAQAA=
+ TMXParser.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAQAAAAIAAAgACUBQAAAAAAAAAAAAAAAAgAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAQAACAAAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAAAAAAAQAAIAAAIAIAAAAAAAAAAACAAAAAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAIAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAQAAABAAAAAAAAAAgQAAAAAABAEAAAAAAAAAAIAAAA=
+ TMXParser.h
+
+
+
+
+
+ QBRAAAQEABAQBAICEgDAAAABAACEgAgECACAAEAAAAg=
+ TMXParser.h
+
+
+
+
+
+ AACAAAAgACAAAIAAAAAAAAAAAAAEACAAAAAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAIAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ TMXParser.h
+
+
+
+
+
+ AAAAAIAEAgAgAgABgAAAAIACAQAAAAAAAAAgBAAAAAA=
+ TSXParser.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAQAAAACACAAAAIAAAAAAAAAgAA=
+ Monster.h
+
+
+
+
+
+ EAAACGAAsABAAwERAIAgAAISAAAEEGAYgCBCCmAwIEA=
+ Monster.h
+
+
+
+
+
+ AAAAAAAIQAAAAAAIAIgIAIgAAAAAAAAAAAgBAgAAAAA=
+ Monster.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAQEAAAABAAAAEAAAAAAAAQAAAA=
+ ItemMapData.h
+
+
+
+
+
+ AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ Map.h
+
+
+
+
+
+ AAAAgAAAAAAgAgABAAAAAIAAAAAAAAAAIAAEAQIAIAA=
+ Map.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAIAAAAAAAAAA=
+ Map.h
+
+
+
+
+
+ QAAAQAAECAAAAAAAAAAIAYAAQAAAAAAAAAAAAAAAAAA=
+ Map.h
+
+
+
+
+
+ CDAAQAAISAgAAAAAAAAAAAAAAgAAACAAAAkAADBAAAA=
+ Map.h
+
+
+
+
+
+ AAAAAAAAAAAAAAACAAAAAAgAAAAAAAAMAAAAAAAAQAA=
+ MenuDefinitions.h
+
+
+
+
+
+ AAAAIgACAAAAAAAAAIAABQIQAAAAAAAAAAAgAAAAAAA=
+ Item.h
+
+
+
+
+
+ IQAAAAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ Item.h
+
+
+
+
+
+ AAAAAAAAACAAAAAAAIAAAAAAEAEAQAAABAABAAAAAAA=
+ Item.h
+
+
+
+
+
+ AAAAAAAIAAAAAAAEAIAAAAABAAAAAAAAAAAgAAAAAAA=
+ Ability.h
+
+
+
+
+
+ AAAABAAAAAAAAwADIBBAAAgAACgEABACAQCAAAAAIAg=
+ Ability.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAEAAAAAAAAAEAAAAAAAAAAAAAAA=
+ Animation.h
+
+
+
+
+
+ AAAAAAIAAAAAgCAAAACAKAAAAAABCAAAAAAAAAAAAAA=
+ Buff.h
+
+
+
+
+
+ CgREEAAACAAAggAAIKgABYACAAAAABAMBEAAgQBYAgA=
+ Bullet.h
+
+
+
+
+
+ CAQAAAAACAAAAAAAAAgAAAAAAAAEAAAAAAAAAAAAAAA=
+ BulletTypes.h
+
+
+
+
+
+ CAQAAAAAAAAAAAAAAAgAAAAAAAAEAAAAAAAAAAAQAAA=
+ BulletTypes.h
+
+
+
+
+
+ CAQAAAAAAAAAAAAAAAgAAAAAAAAkAAAAAAAAAAAAAAA=
+ BulletTypes.h
+
+
+
+
+
+ CAQAQAAAAAABAAAAAIgAAAAAAAAAAAAAAAgAAAAAAAA=
+ BulletTypes.h
+
+
+
+
+
+ CAQAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAABAAAAAAAE=
+ BulletTypes.h
+
+
+
+
+
+ CAQAAAIAAAAAAgAAAAgAAAAAAAAIAAAACAAQAAAAAAA=
+ BulletTypes.h
+
+
+
+
+
+ CAQAAAAAAAAAAAAAAAgAAAAAAAAAAABAAAAAAAAAAAA=
+ BulletTypes.h
+
+
+
+
+
+ AAgAQIAAAAAAAAAABIAAIAAAAAAAEAAQBAAACAAAAAA=
+ ClassInfo.h
+
+
+
+
+
+ AARAEAAAQAAAAABAAAAIIAABAAA3AAAAAAAAAAAAAAA=
+ ConnectionPoint.h
+
+
+
+
+
+ gAhAAAAIJAAAwAAAAIAAAIACAAABAAIAAAAAAAAAAAA=
+ DamageNumber.h
+
+
+
+
+
+ AAQAAAAAAAAAQgAAAAEAAAAAAAAAAAAAAAAAAACAAAA=
+ Effect.h
+
+
+
+
+
+ AAQBAAAAAAAAAgAAAAAAAEAAAAAAAAAAAAAAEAAAAAE=
+ Effect.h
+
+
+
+
+
+ AAQAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA=
+ Effect.h
+
+
+
+
+
+ AAQAAAgAAAAAAAAAAAAAABAABAAAAACIAAgAAAAAAAA=
+ Emitter.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAACAAA=
+ EnvironmentalAudio.h
+
+
+
+
+
+ AEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAgAAAACAA=
+ FunctionPriming.h
+
+
+
+
+
+ AAgAAAAAAACAABAAAAQAAAAAAAAAAAAAAAAgAAAAAAA=
+ FunctionPriming.h
+
+
+
+
+
+ AAAAAAAAAACAAAQAAAwAAAAAAAAAAIAAAAAgAAAAAAA=
+ FunctionPriming.h
+
+
+
+
+
+ AIAAAAAAQAAAAAAAAQAAAAAAAAAAAAAAAABAAAAAAAA=
+ MenuComponent.h
+
+
+
+
+
+ AAgACAAAQAAAACAAAQAAABAAAAABAAAAAAAAAAAAKAA=
+ MenuComponent.h
+
+
+
+
+
+ AAAAAAAEIAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAA=
+ MenuComponent.h
+
+
+
+
+
+ AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQIAAAAEAAAAA=
+ MenuIconButton.h
+
+
+
+
+
+ AAAIBKgANAEAAgEoGCAAAIAGAQAAAIKAgQiQAAAEAAA=
+ MenuType.h
+
+
+
+
+
+ AAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAA=
+ MenuItemLabel.h
+
+
+
+
+
+ AAAAAAAAAAAAAAgAAQAAACAAgAAAAAAAAAEAAAAAAAA=
+ RowItemDisplay.h
+
+
+
+
+
+ AAAAAAgAAAAAAAAACAAAAAAAAAAAgBAAAAAwACAAAEA=
+ GameState.h
+
+
+
+
+
+ AAACEAAAoAAAAiAAAAAAAAAAACAAAAAgAAAAACAAAAA=
+ VisualNovel.h
+
+
+
+
+
+ 0AAAAAAAgAAAAAAAEABQQAAAA6gAQYAIAAASBAAIAAA=
+ stb_vorbis.h
+
+
+
+
+
+ AAAAAAAAAIEQAAAAAQAACAAAIEAAAAACAAAAAAAAAAA=
+ Tutorial.h
+
+
+
+
+
+ AAAAAAEAAACAAAAAAAAAAAAAIAAAAAAAAAAAAAAgAAA=
+ SaveFile.h
+
+
+
+
+
+ BAAAAABAQCAAgCAACABABEBKAgACAAAABAgAAAAAAAA=
+ State.h
+
+
+
+
+
+ AAAEAAAAAAAAgAAACAAAAAAAQAAAAAAAAAAAAAAAAAA=
+ Monster.h
+
+
+
+
+
+ AwSBgAIKAF4gAokBTIIAQAoGJCAhSCSACgi+AAiUEAI=
+ MonsterAttribute.h
+
+
+
+
+
+ AAAAAAAAAAAQQAAAAAAABAAAAAAAAAAAAAAAAAAAAQA=
+ Key.h
+
+
+
+
+
+ AAAAAIAAAAACAAAEASAAAAASAQAQAAAAAAAAAAAAAAA=
+ Item.h
+
+
+
+
+
+ IAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA=
+ Item.h
+
+
+
+
+
+ AAgAAAAEAAEAoAAAAIAAAABAAEAgAABAAAAAAAAAgAA=
+ Buff.h
+
+
+
+
+
+ AACAAAAAAAAAAAAAAAgAAAAEAAggAAAAAAAAAAAACAA=
+ Class.h
+
+
+
+
+
+ AAAAAAABAAAAAAAABAAAAAACAAgAAAAAAAAAEAAAAAA=
+ DamageNumber.h
+
+
+
+
+
+ CAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA=
+ IconType.h
+
+
+
+
\ No newline at end of file
diff --git a/Adventures in Lestoria/TODO.txt b/Adventures in Lestoria/TODO.txt
index ada871f3..de3f43ca 100644
--- a/Adventures in Lestoria/TODO.txt
+++ b/Adventures in Lestoria/TODO.txt
@@ -8,4 +8,6 @@ Materials for initial craft seems to be wrong? need to recheck
do we need a minimap? (maybe with fog of war?) Maybe polling that once testing with more people.
should gemstones dropp from boss stages aswell? (Maybe lower droprate?)
-Toggle for displaying error messages
\ No newline at end of file
+Toggle for displaying error messages
+
+Low health warning
\ No newline at end of file
diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h
index 696f345b..43e6586f 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 5
#define VERSION_PATCH 1
-#define VERSION_BUILD 8113
+#define VERSION_BUILD 8114
#define stringify(a) stringify_(a)
#define stringify_(a) #a
diff --git a/Adventures in Lestoria/olcPixelGameEngine.h b/Adventures in Lestoria/olcPixelGameEngine.h
index f3197d98..c67327b4 100644
--- a/Adventures in Lestoria/olcPixelGameEngine.h
+++ b/Adventures in Lestoria/olcPixelGameEngine.h
@@ -3,7 +3,7 @@
olcPixelGameEngine.h
+-------------------------------------------------------------+
-| OneLoneCoder Pixel Game Engine v2.24 |
+| OneLoneCoder Pixel Game Engine v2.25 |
| "What do you need? Pixels... Lots of Pixels..." - javidx9 |
+-------------------------------------------------------------+
@@ -323,6 +323,7 @@ Fix Pixel -= operator (thanks Au Lit)
2.23: Fixed Emscripten host sizing errors - Thanks Moros
Fixed v2d_generic.clamp() function
2.24: Fix FillTexturedTriangle() to remove const-ref
+ 2.25: +DrawPolygonDecal(pos, tex, w, col)
!! Apple Platforms will not see these updates immediately - Sorry, I dont have a mac to test... !!
!! Volunteers willing to help appreciated, though PRs are manually integrated with credit !!
@@ -407,7 +408,7 @@ return 0;
#include "olcUTIL_Geometry2D.h"
#pragma endregion
-#define PGE_VER 224
+#define PGE_VER 225
// O------------------------------------------------------------------------------O
// | COMPILER CONFIGURATION ODDITIES |
@@ -591,6 +592,7 @@ namespace olc
// O------------------------------------------------------------------------------O
// | olc::Pixel - Represents a 32-Bit RGBA colour |
// O------------------------------------------------------------------------------O
+ #if !defined(OLC_IGNORE_PIXEL)
struct Pixel
{
union
@@ -636,7 +638,7 @@ namespace olc
BLUE(0, 0, 255), DARK_BLUE(0, 0, 128), VERY_DARK_BLUE(0, 0, 64),
MAGENTA(255, 0, 255), DARK_MAGENTA(128, 0, 128), VERY_DARK_MAGENTA(64, 0, 64),
WHITE(255, 255, 255), BLACK(0, 0, 0), BLANK(0, 0, 0, 0);
-
+ #endif
// Thanks to scripticuk and others for updating the key maps
// NOTE: The GLUT platform will need updating, open to contributions ;)
enum Key
@@ -907,10 +909,12 @@ namespace olc
std::vector pos;
std::vector uv;
std::vector w;
+ std::vector z;
std::vector tint;
olc::DecalMode mode = olc::DecalMode::NORMAL;
olc::DecalStructure structure = olc::DecalStructure::FAN;
uint32_t points = 0;
+ bool depth = false;
};
struct LayerDesc
@@ -1204,6 +1208,7 @@ namespace olc
void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const olc::Pixel tint = olc::WHITE);
void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& tint);
void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& colours, const olc::Pixel tint);
+ void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const std::vector& colours, const olc::Pixel tint);
// Draws a line in Decal Space
void DrawLineDecal(const olc::vf2d& pos1, const olc::vf2d& pos2, Pixel p = olc::WHITE);
void DrawRotatedStringDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f });
@@ -1289,6 +1294,7 @@ namespace olc
// Draws a vector of vertices, interprted as individual triangles
void LW3D_DrawTriangles(olc::Decal* decal, const std::vector>& pos, const std::vector& tex, const std::vector& col);
+ void LW3D_DrawWarpedDecal(olc::Decal* decal, const std::vector>& pos, const olc::Pixel& tint);
void LW3D_ModelTranslate(const float x, const float y, const float z);
@@ -1602,6 +1608,7 @@ namespace olc
// O------------------------------------------------------------------------------O
// | olc::Pixel IMPLEMENTATION |
// O------------------------------------------------------------------------------O
+ #if !defined(OLC_IGNORE_PIXEL)
Pixel::Pixel()
{ r = 0; g = 0; b = 0; a = nDefaultAlpha; }
@@ -1712,7 +1719,7 @@ namespace olc
Pixel PixelLerp(const olc::Pixel& p1, const olc::Pixel& p2, float t)
{ return (p2 * t) + p1 * (1.0f - t); }
-
+ #endif
// O------------------------------------------------------------------------------O
// | olc::Sprite IMPLEMENTATION |
// O------------------------------------------------------------------------------O
@@ -3247,6 +3254,27 @@ namespace olc
vLayers[nTargetLayer].vecDecalInstance.push_back(di);
}
+ void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const std::vector& colours, const olc::Pixel tint)
+ {
+ DecalInstance di;
+ di.decal = decal;
+ di.points = uint32_t(pos.size());
+ di.pos.resize(di.points);
+ di.uv.resize(di.points);
+ di.w.resize(di.points);
+ di.tint.resize(di.points);
+ for (uint32_t i = 0; i < di.points; i++)
+ {
+ di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f };
+ di.uv[i] = uv[i];
+ di.tint[i] = colours[i] * tint;
+ di.w[i] = depth[i];
+ }
+ di.mode = nDecalMode;
+ di.structure = nDecalStructure;
+ vLayers[nTargetLayer].vecDecalInstance.push_back(di);
+ }
+
#ifdef OLC_ENABLE_EXPERIMENTAL
// Lightweight 3D
void PixelGameEngine::LW3D_DrawTriangles(olc::Decal* decal, const std::vector>& pos, const std::vector& tex, const std::vector& col)
@@ -3257,17 +3285,63 @@ namespace olc
di.pos.resize(di.points);
di.uv.resize(di.points);
di.w.resize(di.points);
+ di.z.resize(di.points);
di.tint.resize(di.points);
for (uint32_t i = 0; i < di.points; i++)
{
di.pos[i] = { pos[i][0], pos[i][1] };
di.w[i] = pos[i][2];
+ di.z[i] = pos[i][2];
di.uv[i] = tex[i];
di.tint[i] = col[i];
}
- di.mode = DecalMode::MODEL3D;
+ di.mode = nDecalMode;
+ di.structure = DecalStructure::LIST;
+ di.depth = true;
vLayers[nTargetLayer].vecDecalInstance.push_back(di);
}
+ void PixelGameEngine::LW3D_DrawWarpedDecal(olc::Decal* decal, const std::vector>& pos, const olc::Pixel& tint)
+ {
+ // Thanks Nathan Reed, a brilliant article explaining whats going on here
+ // http://www.reedbeta.com/blog/quadrilateral-interpolation-part-1/
+ DecalInstance di;
+ di.points = 4;
+ di.decal = decal;
+ di.tint = { tint, tint, tint, tint };
+ di.w = { 1, 1, 1, 1 };
+ di.z = { 1, 1, 1, 1 };
+ di.pos.resize(4);
+ di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} };
+ olc::vf2d center;
+ float rd = ((pos[2][0] - pos[0][0]) * (pos[3][1] - pos[1][1]) - (pos[3][0] - pos[1][0]) * (pos[2][1] - pos[0][1]));
+ if (rd != 0)
+ {
+ rd = 1.0f / rd;
+ float rn = ((pos[3][0] - pos[1][0]) * (pos[0][1] - pos[1][1]) - (pos[3][1] - pos[1][1]) * (pos[0][0] - pos[1][0])) * rd;
+ float sn = ((pos[2][0] - pos[0][0]) * (pos[0][1] - pos[1][1]) - (pos[2][1] - pos[0][1]) * (pos[0][0] - pos[1][0])) * rd;
+ if (!(rn < 0.f || rn > 1.f || sn < 0.f || sn > 1.f))
+ {
+ center.x = pos[0][0] + rn * (pos[2][0] - pos[0][0]);
+ center.y = pos[0][1] + rn * (pos[2][1] - pos[0][1]);
+ }
+ float d[4];
+ for (int i = 0; i < 4; i++)
+ d[i] = std::sqrt((pos[i][0] - center.x) * (pos[i][0] - center.x) + (pos[i][1] - center.y) * (pos[i][1] - center.y));
+
+ for (int i = 0; i < 4; i++)
+ {
+ float q = d[i] == 0.0f ? 1.0f : (d[i] + d[(i + 2) & 3]) / d[(i + 2) & 3];
+ di.uv[i] *= q;
+ di.w[i] *= q;
+ di.z[i] = pos[i][2];
+ di.pos[i] = { (pos[i][0] * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i][1] * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f };
+ }
+ di.mode = nDecalMode;
+ di.structure = nDecalStructure;
+ di.depth = true;
+ vLayers[nTargetLayer].vecDecalInstance.push_back(di);
+ }
+ }
#endif
void PixelGameEngine::DrawLineDecal(const olc::vf2d& pos1, const olc::vf2d& pos2, Pixel p)
@@ -5284,7 +5358,6 @@ namespace olc
switch (mode)
{
case olc::DecalMode::NORMAL:
- case olc::DecalMode::MODEL3D:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
break;
case olc::DecalMode::ADDITIVE:
@@ -5337,58 +5410,18 @@ namespace olc
else
glBindTexture(GL_TEXTURE_2D, decal.decal->id);
- if (nDecalMode == DecalMode::MODEL3D)
+ if (decal.depth)
{
-#ifdef OLC_ENABLE_EXPERIMENTAL
- glMatrixMode(GL_PROJECTION); glPushMatrix();
- glMatrixMode(GL_MODELVIEW); glPushMatrix();
-
- glEnable(GL_DEPTH_TEST);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-1.0f, 1.0f, -1.0f, 1.0f, 1, 1000);
-
-#pragma comment (lib, "winmm.lib")
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0, -40, -200);
- glRotatef(float(clock()) * 0.1f, 1, 0, 0);
- glRotatef(float(clock()) * 0.1f * 2, 0, 1, 0);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- glBegin(GL_TRIANGLES);
-
-
// Render as 3D Spatial Entity
for (uint32_t n = 0; n < decal.points; n++)
{
glColor4ub(decal.tint[n].r, decal.tint[n].g, decal.tint[n].b, decal.tint[n].a);
- glTexCoord2f(decal.uv[n].x, decal.uv[n].y);
- glVertex3f(decal.pos[n].x, decal.pos[n].y, decal.w[n]);
+ glTexCoord4f(decal.uv[n].x, decal.uv[n].y, 0.0f, decal.w[n]);
+ glVertex3f(decal.pos[n].x, decal.pos[n].y, decal.z[n]);
}
-
- glEnd();
-
- glMatrixMode(GL_PROJECTION); glPopMatrix();
- glMatrixMode(GL_MODELVIEW); glPopMatrix();
- glDisable(GL_DEPTH_TEST);
-#endif
}
else
{
- if (nDecalMode == DecalMode::WIREFRAME)
- glBegin(GL_LINE_LOOP);
- else
- {
- if(decal.structure == olc::DecalStructure::FAN)
- glBegin(GL_TRIANGLE_FAN);
- else if(decal.structure == olc::DecalStructure::STRIP)
- glBegin(GL_TRIANGLE_STRIP);
- else if(decal.structure == olc::DecalStructure::LIST)
- glBegin(GL_TRIANGLES);
- }
// Render as 2D Spatial entity
for (uint32_t n = 0; n < decal.points; n++)
@@ -5397,12 +5430,15 @@ namespace olc
glTexCoord4f(decal.uv[n].x, decal.uv[n].y, 0.0f, decal.w[n]);
glVertex2f(decal.pos[n].x, decal.pos[n].y);
}
-
- glEnd();
}
- //glDisable(GL_DEPTH_TEST);
+ glEnd();
+
+ if (decal.depth)
+ {
+ glDisable(GL_DEPTH_TEST);
+ }
}
uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered, const bool clamp) override
diff --git a/ClassDiagram.png b/ClassDiagram.png
new file mode 100644
index 00000000..6711b0b5
Binary files /dev/null and b/ClassDiagram.png differ
diff --git a/x64/Release/Adventures in Lestoria.exe b/x64/Release/Adventures in Lestoria.exe
index d557b94a..b37cbb43 100644
Binary files a/x64/Release/Adventures in Lestoria.exe and b/x64/Release/Adventures in Lestoria.exe differ