From 3e3e96110c77cf6328cb84a05daa8b50d91928e0 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Tue, 26 Dec 2023 23:59:21 -0600 Subject: [PATCH] Added Equipment/Equipment Icons. Remove unused Graphics2D PGEX from project. Crit Dmg now displays as the extra amount added (50%) rather than the final multiplier (150%) --- Crawler/AttributableStat.cpp | 2 +- Crawler/CharacterMenuWindow.cpp | 2 +- Crawler/Crawler.cpp | 3 +- Crawler/Crawler.vcxproj | 2 +- Crawler/Crawler.vcxproj.filters | 6 +- Crawler/MenuItemButton.h | 1 - Crawler/MenuItemItemButton.h | 1 - Crawler/Monster.cpp | 2 +- Crawler/Version.h | 2 +- Crawler/assets/backgrounds/cave.png | Bin 3443 -> 12862 bytes Crawler/assets/config/Player.txt | 2 +- Crawler/assets/config/items/Equipment.txt | 21 -- Crawler/assets/config/items/ItemScript.txt | 2 + Crawler/assets/config/items/ItemStats.txt | 24 ++ Crawler/assets/config/items/Weapons.txt | 306 ++++++++++++++++++++ Crawler/assets/config/items/items.txt | 1 + Crawler/assets/items/Bone Bow.png | Bin 0 -> 819 bytes Crawler/assets/items/Bone Staff.png | Bin 0 -> 9314 bytes Crawler/assets/items/Bone Sword.png | Bin 0 -> 805 bytes Crawler/assets/items/Laser Sword.png | Bin 0 -> 793 bytes Crawler/assets/items/Plasma Bow.png | Bin 0 -> 837 bytes Crawler/assets/items/Shell Bow.png | Bin 0 -> 848 bytes Crawler/assets/items/Shell Staff.png | Bin 0 -> 8811 bytes Crawler/assets/items/Shell Sword.png | Bin 0 -> 804 bytes Crawler/assets/items/Steel Bow.png | Bin 0 -> 798 bytes Crawler/assets/items/Steel Staff.png | Bin 0 -> 776 bytes Crawler/assets/items/Steel Sword.png | Bin 0 -> 798 bytes Crawler/assets/items/Unknown Staff.png | Bin 0 -> 9474 bytes Crawler/assets/items/Wooden Bow.png | Bin 0 -> 859 bytes Crawler/assets/items/Wooden Staff.png | Bin 0 -> 878 bytes Crawler/assets/items/Wooden Sword.png | Bin 0 -> 792 bytes Crawler/olcPGEX_Graphics2D.h | 313 --------------------- Crawler/olcPGEX_ViewPort.h | 20 +- Crawler/olcPixelGameEngine.h | 20 +- Crawler/olcUTIL_Animate2D.h | 2 +- Crawler/pixelGameEngine.cpp | 2 - 36 files changed, 365 insertions(+), 369 deletions(-) create mode 100644 Crawler/assets/config/items/Weapons.txt create mode 100644 Crawler/assets/items/Bone Bow.png create mode 100644 Crawler/assets/items/Bone Staff.png create mode 100644 Crawler/assets/items/Bone Sword.png create mode 100644 Crawler/assets/items/Laser Sword.png create mode 100644 Crawler/assets/items/Plasma Bow.png create mode 100644 Crawler/assets/items/Shell Bow.png create mode 100644 Crawler/assets/items/Shell Staff.png create mode 100644 Crawler/assets/items/Shell Sword.png create mode 100644 Crawler/assets/items/Steel Bow.png create mode 100644 Crawler/assets/items/Steel Staff.png create mode 100644 Crawler/assets/items/Steel Sword.png create mode 100644 Crawler/assets/items/Unknown Staff.png create mode 100644 Crawler/assets/items/Wooden Bow.png create mode 100644 Crawler/assets/items/Wooden Staff.png create mode 100644 Crawler/assets/items/Wooden Sword.png delete mode 100644 Crawler/olcPGEX_Graphics2D.h diff --git a/Crawler/AttributableStat.cpp b/Crawler/AttributableStat.cpp index b97757b5..de976848 100644 --- a/Crawler/AttributableStat.cpp +++ b/Crawler/AttributableStat.cpp @@ -67,7 +67,7 @@ void ItemAttribute::Initialize(){ if(DATA["Stats"][key].HasProperty("Modifies")){ modifies=DATA["Stats"][key]["Modifies"].GetString(); } - attributes.insert(key,ItemAttribute(key,DATA["Stats"][key]["Percentage"].GetBool(),modifies)); + attributes.insert(key,ItemAttribute(DATA["Stats"][key]["Display Name"].GetString(),DATA["Stats"][key]["Percentage"].GetBool(),modifies)); } attributes.SetInitialized(); } diff --git a/Crawler/CharacterMenuWindow.cpp b/Crawler/CharacterMenuWindow.cpp index 77b1dc0a..150a2e33 100644 --- a/Crawler/CharacterMenuWindow.cpp +++ b/Crawler/CharacterMenuWindow.cpp @@ -242,7 +242,7 @@ void Menu::InitializeCharacterMenuWindow(){ int yOffset=0; for(const std::string&attribute:displayAttrs){ std::string attrStr=GetLabelText(ItemAttribute::Get(attribute)); - auto attrLabel=characterMenuWindow->ADD("Attribute "+attribute+" Label",StatLabel)({{245,28+2+float(yOffset)},{62,18}},ItemAttribute::Get(attribute),1,ComponentAttr::SHADOW|ComponentAttr::LEFT_ALIGN)END; + auto attrLabel=characterMenuWindow->ADD("Attribute "+std::string(ItemAttribute::Get(attribute).Name())+" Label",StatLabel)({{245,28+2+float(yOffset)},{62,18}},ItemAttribute::Get(attribute),1,ComponentAttr::SHADOW|ComponentAttr::LEFT_ALIGN)END; Menu::AddEquipStatListener(attrLabel); yOffset+=20; } diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 66f7cc6b..111266df 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -209,6 +209,7 @@ bool Crawler::OnUserCreate(){ Inventory::AddItem("Leather Pants"); Inventory::AddItem("Leather Gloves"); Inventory::AddItem("Leather Shoes"); + Inventory::AddItem("Wooden Sword"); LoadLevel(LEVEL_NAMES["starting_map"_S]); ChangePlayerClass(WARRIOR); @@ -1246,7 +1247,7 @@ void Crawler::RenderHud(){ DrawShadowStringPropDecal(vf2d{ScreenWidth()/2+90.f,ScreenHeight()-80.f}-vf2d{float(GetTextSizeProp(castTimeDisplay.str()).x),0},castTimeDisplay.str(),WHITE,BLACK); DrawShadowStringPropDecal(vf2d{ScreenWidth()/2.f-GetTextSizeProp(castText).x*2/2,ScreenHeight()-64.f},castText,WHITE,BLACK,{2,3},std::numeric_limits::max(),2.f); }; - + if(GetPlayer()->GetCastInfo().castTimer>0){ RenderCastbar(GetPlayer()->GetCastInfo()); }else diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj index ce6d0626..3a1cc268 100644 --- a/Crawler/Crawler.vcxproj +++ b/Crawler/Crawler.vcxproj @@ -375,7 +375,6 @@ - @@ -566,6 +565,7 @@ + diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters index 6a080a4a..14447839 100644 --- a/Crawler/Crawler.vcxproj.filters +++ b/Crawler/Crawler.vcxproj.filters @@ -201,9 +201,6 @@ Header Files\Interface - - Header Files - Header Files\Interface @@ -734,6 +731,9 @@ Documentation\Mechanics + + Configurations\Items + diff --git a/Crawler/MenuItemButton.h b/Crawler/MenuItemButton.h index b29f8954..7a694e3b 100644 --- a/Crawler/MenuItemButton.h +++ b/Crawler/MenuItemButton.h @@ -43,7 +43,6 @@ All rights reserved. #include "Crawler.h" #include "Item.h" #include "safemap.h" -#include "olcPGEX_Graphics2D.h" #include "drawutil.h" INCLUDE_game diff --git a/Crawler/MenuItemItemButton.h b/Crawler/MenuItemItemButton.h index 0aa96d90..e51598a1 100644 --- a/Crawler/MenuItemItemButton.h +++ b/Crawler/MenuItemItemButton.h @@ -43,7 +43,6 @@ All rights reserved. #include "Crawler.h" #include "Item.h" #include "safemap.h" -#include "olcPGEX_Graphics2D.h" INCLUDE_game INCLUDE_ITEM_DATA diff --git a/Crawler/Monster.cpp b/Crawler/Monster.cpp index e4bdde6a..9d86e091 100644 --- a/Crawler/Monster.cpp +++ b/Crawler/Monster.cpp @@ -290,7 +290,7 @@ bool Monster::Hurt(int damage,bool onUpperLevel,float z){ #pragma region Handle Crits bool crit=false; if(util::random(1)GetPlayer()->GetCritRatePct()){ - mod_dmg*=game->GetPlayer()->GetCritDmgPct(); + mod_dmg*=1+game->GetPlayer()->GetCritDmgPct(); crit=true; } #pragma endregion diff --git a/Crawler/Version.h b/Crawler/Version.h index 18cfe999..b24320e5 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 1 -#define VERSION_BUILD 4857 +#define VERSION_BUILD 4867 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Crawler/assets/backgrounds/cave.png b/Crawler/assets/backgrounds/cave.png index 2234ffa683f3a0cbd5be41497bba865925749b89..2c218fe9789fb2de2ac5ab41fdf9732a3fbaee94 100644 GIT binary patch literal 12862 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 delta 3380 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 diff --git a/Crawler/assets/config/Player.txt b/Crawler/assets/config/Player.txt index 70bf550a..8948825b 100644 --- a/Crawler/assets/config/Player.txt +++ b/Crawler/assets/config/Player.txt @@ -7,7 +7,7 @@ Player Crit Rate = 0% # Starting base crit dmg. - Crit Dmg = 150% + Crit Dmg = 50% Starting Money = 100 diff --git a/Crawler/assets/config/items/Equipment.txt b/Crawler/assets/config/items/Equipment.txt index d6b34f7b..edc104ae 100644 --- a/Crawler/assets/config/items/Equipment.txt +++ b/Crawler/assets/config/items/Equipment.txt @@ -2,7 +2,6 @@ Equipment { Leather Helmet { - DisplayName = Leather Helmet Slot = Helmet PartofSet = Leather ItemCategory = Equipment @@ -24,7 +23,6 @@ Equipment } Leather Armor { - DisplayName = Leather Armor Slot = Armor PartofSet = Leather ItemCategory = Equipment @@ -46,7 +44,6 @@ Equipment } Leather Pants { - DisplayName = Leather Pants Slot = Pants PartofSet = Leather ItemCategory = Equipment @@ -68,7 +65,6 @@ Equipment } Leather Gloves { - DisplayName = Leather Gloves Slot = Gloves PartofSet = Leather ItemCategory = Equipment @@ -90,7 +86,6 @@ Equipment } Leather Shoes { - DisplayName = Leather Shoes Slot = Shoes PartofSet = Leather ItemCategory = Equipment @@ -112,7 +107,6 @@ Equipment } Copper Helmet { - DisplayName = Copper Helmet Slot = Helmet PartofSet = Copper ItemCategory = Equipment @@ -134,7 +128,6 @@ Equipment } Copper Armor { - DisplayName = Copper Armor Slot = Armor PartofSet = Copper ItemCategory = Equipment @@ -156,7 +149,6 @@ Equipment } Copper Pants { - DisplayName = Copper Pants Slot = Pants PartofSet = Copper ItemCategory = Equipment @@ -178,7 +170,6 @@ Equipment } Copper Gloves { - DisplayName = Copper Gloves Slot = Gloves PartofSet = Copper ItemCategory = Equipment @@ -200,7 +191,6 @@ Equipment } Copper Shoes { - DisplayName = Copper Shoes Slot = Shoes PartofSet = Copper ItemCategory = Equipment @@ -222,7 +212,6 @@ Equipment } Shell Helmet { - DisplayName = Shell Helmet Slot = Helmet PartofSet = Shell ItemCategory = Equipment @@ -244,7 +233,6 @@ Equipment } Shell Armor { - DisplayName = Shell Armor Slot = Armor PartofSet = Shell ItemCategory = Equipment @@ -266,7 +254,6 @@ Equipment } Shell Pants { - DisplayName = Shell Pants Slot = Pants PartofSet = Shell ItemCategory = Equipment @@ -288,7 +275,6 @@ Equipment } Shell Gloves { - DisplayName = Shell Gloves Slot = Gloves PartofSet = Shell ItemCategory = Equipment @@ -310,7 +296,6 @@ Equipment } Shell Shoes { - DisplayName = Shell Shoes Slot = Shoes PartofSet = Shell ItemCategory = Equipment @@ -332,7 +317,6 @@ Equipment } Bone Helmet { - DisplayName = Bone Helmet Slot = Helmet PartofSet = Bone ItemCategory = Equipment @@ -354,7 +338,6 @@ Equipment } Bone Armor { - DisplayName = Bone Armor Slot = Armor PartofSet = Bone ItemCategory = Equipment @@ -376,7 +359,6 @@ Equipment } Bone Pants { - DisplayName = Bone Pants Slot = Pants PartofSet = Bone ItemCategory = Equipment @@ -399,7 +381,6 @@ Equipment } Bone Gloves { - DisplayName = Bone Gloves Slot = Gloves PartofSet = Bone ItemCategory = Equipment @@ -421,7 +402,6 @@ Equipment } Bone Shoes { - DisplayName = Bone Shoes Slot = Shoes PartofSet = Bone ItemCategory = Equipment @@ -441,5 +421,4 @@ Equipment StatValues[9] = 19,11,11 StatValues[10] = 21,12,12 } - } \ No newline at end of file diff --git a/Crawler/assets/config/items/ItemScript.txt b/Crawler/assets/config/items/ItemScript.txt index bc2ec52e..7508503e 100644 --- a/Crawler/assets/config/items/ItemScript.txt +++ b/Crawler/assets/config/items/ItemScript.txt @@ -34,6 +34,8 @@ ItemScript HP6 Recovery % = 0%,0.0 HP4 Recovery % = 0%,0.0 Damage Reduction = 0%,0.0 + Attack Spd = 0,0.0 + Mana = 0,0.0 } # Unlike an item or ability that requires a cast to perform, this applies a buff immediately and then moving cancels the buff mid-application. diff --git a/Crawler/assets/config/items/ItemStats.txt b/Crawler/assets/config/items/ItemStats.txt index dbcc3a3c..0f0db8c5 100644 --- a/Crawler/assets/config/items/ItemStats.txt +++ b/Crawler/assets/config/items/ItemStats.txt @@ -2,61 +2,85 @@ Stats { Defense { + Display Name = Defense Percentage = False } Health { + Display Name = Health Percentage = False } Attack { + Display Name = Attack Percentage = False } Defense % { + Display Name = Defense Modifies = Defense Percentage = True } Attack % { + Display Name = Attack Modifies = Attack Percentage = True } Health % { + Display Name = Health Modifies = Health Percentage = True } Move Spd % { + Display Name = Move Spd Percentage = True } CDR { + Display Name = CDR Percentage = True } Crit Rate { + Display Name = Crit Rate Percentage = True } Crit Dmg { + Display Name = Crit Dmg Percentage = True } HP Recovery % { + Display Name = HP Recovery Percentage = True } HP6 Recovery % { + Display Name = HP/6 Recovery Percentage = True } HP4 Recovery % { + Display Name = HP/4 Recovery Percentage = True } Damage Reduction { + Display Name = Damage Reduction Percentage = True } + Attack Spd + { + Display Name = Attack Spd + Percentage = False + } + Mana + { + Display Name = Mana + Percentage = False + } } \ No newline at end of file diff --git a/Crawler/assets/config/items/Weapons.txt b/Crawler/assets/config/items/Weapons.txt new file mode 100644 index 00000000..6da0d20d --- /dev/null +++ b/Crawler/assets/config/items/Weapons.txt @@ -0,0 +1,306 @@ +Equipment +{ + Wooden Sword + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,Move Spd % + StatValues[0] = 5,5,0 + StatValues[1] = 10,6,1 + StatValues[2] = 15,7,2 + StatValues[3] = 20,8,3 + StatValues[4] = 25,9,4 + StatValues[5] = 30,10,5 + StatValues[6] = 80,11,6 + StatValues[7] = 115,12,7 + StatValues[8] = 150,13,8 + StatValues[9] = 160,14,9 + StatValues[10] = 170,15,10 + } + Wooden Bow + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,Move Spd % + StatValues[0] = 5,5,0 + StatValues[1] = 10,6,1 + StatValues[2] = 15,7,2 + StatValues[3] = 20,8,3 + StatValues[4] = 25,9,4 + StatValues[5] = 30,10,5 + StatValues[6] = 80,11,6 + StatValues[7] = 115,12,7 + StatValues[8] = 150,13,8 + StatValues[9] = 160,14,9 + StatValues[10] = 170,15,10 + } + Wooden Staff + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,Move Spd % + StatValues[0] = 5,5,0 + StatValues[1] = 10,6,1 + StatValues[2] = 15,7,2 + StatValues[3] = 20,8,3 + StatValues[4] = 25,9,4 + StatValues[5] = 30,10,5 + StatValues[6] = 80,11,6 + StatValues[7] = 115,12,7 + StatValues[8] = 150,13,8 + StatValues[9] = 160,14,9 + StatValues[10] = 170,15,10 + } + Steel Sword + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,Defense + StatValues[0] = 26,5,5 + StatValues[1] = 31,6,10 + StatValues[2] = 36,7,20 + StatValues[3] = 41,8,30 + StatValues[4] = 46,9,40 + StatValues[5] = 51,10,50 + StatValues[6] = 90,11,60 + StatValues[7] = 120,12,70 + StatValues[8] = 150,13,80 + StatValues[9] = 160,14,90 + StatValues[10] = 170,15,100 + } + Steel Bow + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,Defense + StatValues[0] = 26,5,5 + StatValues[1] = 31,6,10 + StatValues[2] = 36,7,20 + StatValues[3] = 41,8,30 + StatValues[4] = 46,9,40 + StatValues[5] = 51,10,50 + StatValues[6] = 90,11,60 + StatValues[7] = 120,12,70 + StatValues[8] = 150,13,80 + StatValues[9] = 160,14,90 + StatValues[10] = 170,15,100 + } + Steel Staff + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,Defense + StatValues[0] = 26,5,5 + StatValues[1] = 31,6,10 + StatValues[2] = 36,7,20 + StatValues[3] = 41,8,30 + StatValues[4] = 46,9,40 + StatValues[5] = 51,10,50 + StatValues[6] = 90,11,60 + StatValues[7] = 120,12,70 + StatValues[8] = 150,13,80 + StatValues[9] = 160,14,90 + StatValues[10] = 170,15,100 + } + Shell Sword + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,CDR,Mana + StatValues[0] = 47,5,0,0 + StatValues[1] = 52,6,2,1 + StatValues[2] = 57,7,4,2 + StatValues[3] = 62,8,6,3 + StatValues[4] = 67,9,8,4 + StatValues[5] = 72,10,10,5 + StatValues[6] = 100,11,12,6 + StatValues[7] = 125,12,14,7 + StatValues[8] = 150,13,16,8 + StatValues[9] = 160,14,18,9 + StatValues[10] = 170,15,20,10 + } + Shell Bow + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,CDR,Mana + StatValues[0] = 47,5,0,0 + StatValues[1] = 52,6,2,1 + StatValues[2] = 57,7,4,2 + StatValues[3] = 62,8,6,3 + StatValues[4] = 67,9,8,4 + StatValues[5] = 72,10,10,5 + StatValues[6] = 100,11,12,6 + StatValues[7] = 125,12,14,7 + StatValues[8] = 150,13,16,8 + StatValues[9] = 160,14,18,9 + StatValues[10] = 170,15,20,10 + } + Shell Staff + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate,CDR,Mana + StatValues[0] = 47,5,0,0 + StatValues[1] = 52,6,2,1 + StatValues[2] = 57,7,4,2 + StatValues[3] = 62,8,6,3 + StatValues[4] = 67,9,8,4 + StatValues[5] = 72,10,10,5 + StatValues[6] = 100,11,12,6 + StatValues[7] = 125,12,14,7 + StatValues[8] = 150,13,16,8 + StatValues[9] = 160,14,18,9 + StatValues[10] = 170,15,20,10 + } + Bone Sword + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate + StatValues[0] = 68,10 + StatValues[1] = 73,12 + StatValues[2] = 78,14 + StatValues[3] = 83,16 + StatValues[4] = 88,18 + StatValues[5] = 93,20 + StatValues[6] = 110,22 + StatValues[7] = 125,24 + StatValues[8] = 150,26 + StatValues[9] = 160,28 + StatValues[10] = 170,30 + } + Bone Bow + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate + StatValues[0] = 68,10 + StatValues[1] = 73,12 + StatValues[2] = 78,14 + StatValues[3] = 83,16 + StatValues[4] = 88,18 + StatValues[5] = 93,20 + StatValues[6] = 110,22 + StatValues[7] = 125,24 + StatValues[8] = 150,26 + StatValues[9] = 160,28 + StatValues[10] = 170,30 + } + Bone Staff + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + StatValues = Attack,Crit Rate + StatValues[0] = 68,10 + StatValues[1] = 73,12 + StatValues[2] = 78,14 + StatValues[3] = 83,16 + StatValues[4] = 88,18 + StatValues[5] = 93,20 + StatValues[6] = 110,22 + StatValues[7] = 125,24 + StatValues[8] = 150,26 + StatValues[9] = 160,28 + StatValues[10] = 170,30 + } + Laser Sword + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + # Attack Speed Increase reduces Cooldown of LeftClick Attacks (0.1 sec in this case) + StatValues = Attack,Crit Rate,Attack Spd + StatValues[0] = 89,5,0.1 + StatValues[1] = 95,6,0.1 + StatValues[2] = 101,7,0.1 + StatValues[3] = 107,8,0.1 + StatValues[4] = 113,9,0.1 + StatValues[5] = 119,10,0.1 + StatValues[6] = 130,11,0.1 + StatValues[7] = 140,12,0.1 + StatValues[8] = 150,13,0.1 + StatValues[9] = 160,14,0.1 + StatValues[10] = 170,15,0.1 + } + Plasma Bow + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + # Attack Speed Increase reduces Cooldown of LeftClick Attacks (0.1 sec in this case) + StatValues = Attack,Crit Rate,Attack Spd + StatValues[0] = 89,5,0.1 + StatValues[1] = 95,6,0.1 + StatValues[2] = 101,7,0.1 + StatValues[3] = 107,8,0.1 + StatValues[4] = 113,9,0.1 + StatValues[5] = 119,10,0.1 + StatValues[6] = 130,11,0.1 + StatValues[7] = 140,12,0.1 + StatValues[8] = 150,13,0.1 + StatValues[9] = 160,14,0.1 + StatValues[10] = 170,15,0.1 + } + Unknown Staff + { + Slot = Weapon + ItemCategory = Equipment + + # Stat Values of the item based on Enhancement level. + # See ItemSets.txt for valid stat names + # Attack Speed Increase reduces Cooldown of LeftClick Attacks (0.1 sec in this case) + StatValues = Attack,Crit Rate,Attack Spd + StatValues[0] = 89,5,0.1 + StatValues[1] = 95,6,0.1 + StatValues[2] = 101,7,0.1 + StatValues[3] = 107,8,0.1 + StatValues[4] = 113,9,0.1 + StatValues[5] = 119,10,0.1 + StatValues[6] = 130,11,0.1 + StatValues[7] = 140,12,0.1 + StatValues[8] = 150,13,0.1 + StatValues[9] = 160,14,0.1 + StatValues[10] = 170,15,0.1 + } +} \ No newline at end of file diff --git a/Crawler/assets/config/items/items.txt b/Crawler/assets/config/items/items.txt index 7982c615..38565686 100644 --- a/Crawler/assets/config/items/items.txt +++ b/Crawler/assets/config/items/items.txt @@ -4,6 +4,7 @@ ItemConfiguration Item Scripts = ItemScript.txt Item Categories = ItemCategory.txt Equipment = Equipment.txt + Weapons = Weapons.txt } Item { diff --git a/Crawler/assets/items/Bone Bow.png b/Crawler/assets/items/Bone Bow.png new file mode 100644 index 0000000000000000000000000000000000000000..362c6ba094c235857183f57c8ed58762b965ec3b GIT binary patch literal 819 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 literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Laser Sword.png b/Crawler/assets/items/Laser Sword.png new file mode 100644 index 0000000000000000000000000000000000000000..f3af7e2d5fbf3d8a0cd15b46f8baf6952b19f910 GIT binary patch literal 793 zcmV+!1LpjRP)EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{008kxL_t(Y$L*Cd4uUWkgb-G4W3b3DEbx_u2&DKi?j~SuBZkk;EvQ)#&+gv&O!> z2>^(=;%3sg8^rT_$xHB#+=#bIg(X-*Zp6J4_>h~4K1J@8AcTBzf>82Ff{dgFfC}BP zfI~i;ph#j!BF!bAB#=aUi=On5^mh)qbCX>r#wbL5Qcy;A$Tm4Q zk05bpMVDPV(Asqsb>nR!Y;n61V`3j+uZmpaty1E3PuL@g^fk@2B+{;T=3<-t+&}pV XXQ-%tA77vB00000NkvXXu0mjfb75YL literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Plasma Bow.png b/Crawler/assets/items/Plasma Bow.png new file mode 100644 index 0000000000000000000000000000000000000000..325d9eef6f76febacf51134cb0112a1313de10ae GIT binary patch literal 837 zcmV-L1G@Z)P)EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00A9IL_t(Y$75h16T}Pn|Bn~&|4&FA6FG)I_c!?8VgHaQ zwM+~&1_UkmUY~&x3<3rgC_zP$1)PmD7?CadUZ3%Q#)|a}3=9km2I42E7ep|NU_f%? z1vsCdo&7&m!t;B5#{YhGakydq>f-9iB15F0Fv$T>1XLlVWc=!P!*u#w~>%Yy2{6DS6gV<1(UBBTHSrpBq{Mok~@ P00000NkvXXu0mjf*-K^I literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Shell Bow.png b/Crawler/assets/items/Shell Bow.png new file mode 100644 index 0000000000000000000000000000000000000000..880cfe98f163f024e82301260f30d953360e9880 GIT binary patch literal 848 zcmV-W1F!svP)EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00AgTL_t(Y$75h16KE);|JP7R|4&FA6FG)EI_~=~sTfX_ zS{8CF*j9Infq{X6!7!1qTC#k=AYs7Z)no<_DymxW{rZmooSGht3=9kmf&u9?@&N+_ z!~XqFj4(DoJNtjCSb*$$1_lNOj*A}{1Ow6;BqbB5?*n216S=NO2e^WXi5iB}B$BCS z0VS>;*|H$J(1{@(#b9y_q)JnS a6aWA=oP?KCUocMq0000;M4Zuz|j| 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 literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Shell Sword.png b/Crawler/assets/items/Shell Sword.png new file mode 100644 index 0000000000000000000000000000000000000000..7227208baef6df50cdb2619c19deda9509871876 GIT binary patch literal 804 zcmV+<1Ka$GP)EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{008_+L_t(Y$L*6L4#F@LhX2hxTy-51Pz#E136h-%2|{OjB0RXHq(bZ4?h<8XEM z)p>){W#IvUUk6;NrCs}V!dVd&f#2?Tk0mGzFD2l>3k$gLLV_xAM=)-$GytsA$R4N) z&pgv0=phb|5JdVDa7VCCBfA-gM*ye{&&)s&X#)p<>9&n-f5(RB4mnRE<&Xt`D|n8{ zNI3A!kOh%8kr?Q!j4gPEOF7I)l9{sIm5xXdX#)iSrIyZLNM;HEFqlhLOtynobENZb iY5oPLgWLiCR6PK=n8&$7cTM{M0000EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{008z$L_t(Y$IXQ>ca1ovK6?8~(Xr0e<+H+8j$msTsV%)JTXzjj`$S(fpkmEeVq}?-QV=`6Y zjb2l&2H$l5`yGgMKTi@hgKwkJ645N$K+B7*5_pPPv;p&7NPiV|2Jc^lHu#;VxIe)% z@K#-?RqJ*b&?P?6^>#Cq4649(7<|k{;6y}a(L7q0(CKhg2|e!)>erTe&MRNf0rMPa cf7VTaA8lirk8r6ZvH$=807*qoM6N<$f*ZnJP5=M^ literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Steel Staff.png b/Crawler/assets/items/Steel Staff.png new file mode 100644 index 0000000000000000000000000000000000000000..695d159bc881054826ffe48be9365033a1e7cc91 GIT binary patch literal 776 zcmV+j1NZ!iP)EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3dgI1PA~C010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=L{PK6am^FnJoYS02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{007`gL_t(Y$L*D&4#GeThQDIQ!Vu>M1{4Vrw>dlyL2zJs z5HuEvK%&8M4oSic7=oKwf*gV^Awkfw;P$Jwx$D=oy_}#_8sF307UPTdo@kTXy7Lha zT_dFddGgRT(he3az}xI5XDvj&C7<0LmVG1bV9^8yfDa@Xq4?!xpGr&-lWCm3?I`%&hX1H2FRX6FeIUG2UH95wAx4f*hhQ-IawEX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{008z$L_t(Y$L*A%vVuSqhCe7LZZ+y#I5wZ;8l_&uNKzD=KZsC zkjE#{-g(%F=oX2CKFZXBdw8-;8vh$}9q)GhXQnzAy9HHEqdH c3;t7c145|Yoe(-oZz3Qfh)C~6ih@+Bf`C#i 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 literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Wooden Staff.png b/Crawler/assets/items/Wooden Staff.png new file mode 100644 index 0000000000000000000000000000000000000000..783fae79efa4a301f90bf958fd1c4b50bdd5fe28 GIT binary patch literal 878 zcmV-!1CjiRP)EX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3dgI1PA~C010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=L{PK5GQPY+0+0402y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00BlxL_t(Y$L&Or9WRN`zD;(=jAL2_=aewNeJWICk#t-Q9az&yX~Rnn;ik(YmlyjALDKdC)9;1DqBLDyZ07*qoM6N<$ Ef@}nX8vpEX>4Tx04R}tkv&MmKpe$i(@I5J9IPPfkfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBsu`FARLwHd ziMW`{uZqD}gfM~t1`(E+sV6gwS$K}Gd-(Wz7vovp=l&dFrC>6^Clb#w-LQx^h-Wq} zo%23%gq0F_EVIxQBn(@u$coldA$o zjs?`9LUR1zfAG6ovp6;BCWYca&x>t;i~+%2pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jN0aw}%N=0oNtX=Ck^D4;Vi9;hqi@Os1Ghlmn%i4@AEysMmbzNL0S*p< z@e*aPd%U~1ySIPOwEO!3deSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{008hwL_t(Y$L*6L62dSLMSp6xE*(^5j(|k=CP*Ze+<-c8 zAUOgOiA07QRDx?=F$C2>Xkpqd9fld!B{Tb8b~g+BfEPUj^nuy z0O0ijPcviBUY~GQi<-dm%SEsRZQ-p19C%{^7v4zF1?~vO(}@9q?RsMqy22~pRBH`2 z8bT78Pr#iDB#}|0;T?3)h*Z!CUYWr=2?t&~ -#undef min -#undef max - -namespace olc -{ - // Container class for Advanced 2D Drawing functions - class GFX2D : public olc::PGEX - { - // A representation of an affine transform, used to rotate, scale, offset & shear space - public: - class Transform2D - { - public: - Transform2D(); - - public: - // Set this transformation to unity - void Reset(); - // Append a rotation of fTheta radians to this transform - void Rotate(float fTheta); - // Append a translation (ox, oy) to this transform - void Translate(float ox, float oy); - // Append a scaling operation (sx, sy) to this transform - void Scale(float sx, float sy); - // Append a shear operation (sx, sy) to this transform - void Shear(float sx, float sy); - - void Perspective(float ox, float oy); - // Calculate the Forward Transformation of the coordinate (in_x, in_y) -> (out_x, out_y) - void Forward(float in_x, float in_y, float &out_x, float &out_y); - // Calculate the Inverse Transformation of the coordinate (in_x, in_y) -> (out_x, out_y) - void Backward(float in_x, float in_y, float &out_x, float &out_y); - // Regenerate the Inverse Transformation - void Invert(); - - private: - void Multiply(); - float matrix[4][3][3]; - int nTargetMatrix; - int nSourceMatrix; - bool bDirty; - }; - - public: - // Draws a sprite with the transform applied - static void DrawSprite(olc::Sprite *sprite, olc::GFX2D::Transform2D &transform); - }; -} - - -#ifdef OLC_PGEX_GRAPHICS2D -#undef OLC_PGEX_GRAPHICS2D - -namespace olc -{ - void GFX2D::DrawSprite(olc::Sprite *sprite, olc::GFX2D::Transform2D &transform) - { - if (sprite == nullptr) - return; - - // Work out bounding rectangle of sprite - float ex, ey; - float sx, sy; - float px, py; - - transform.Forward(0.0f, 0.0f, sx, sy); - px = sx; py = sy; - sx = std::min(sx, px); sy = std::min(sy, py); - ex = std::max(ex, px); ey = std::max(ey, py); - - transform.Forward((float)sprite->width, (float)sprite->height, px, py); - sx = std::min(sx, px); sy = std::min(sy, py); - ex = std::max(ex, px); ey = std::max(ey, py); - - transform.Forward(0.0f, (float)sprite->height, px, py); - sx = std::min(sx, px); sy = std::min(sy, py); - ex = std::max(ex, px); ey = std::max(ey, py); - - transform.Forward((float)sprite->width, 0.0f, px, py); - sx = std::min(sx, px); sy = std::min(sy, py); - ex = std::max(ex, px); ey = std::max(ey, py); - - // Perform inversion of transform if required - transform.Invert(); - - if (ex < sx) - std::swap(ex, sx); - if (ey < sy) - std::swap(ey, sy); - - // Iterate through render space, and sample Sprite from suitable texel location - for (float i = sx; i < ex; i++) - { - for (float j = sy; j < ey; j++) - { - float ox, oy; - transform.Backward(i, j, ox, oy); - pge->Draw((int32_t)i, (int32_t)j, sprite->GetPixel((int32_t)(ox+0.5f), (int32_t)(oy+0.5f))); - } - } - } - - olc::GFX2D::Transform2D::Transform2D() - { - Reset(); - } - - void olc::GFX2D::Transform2D::Reset() - { - nTargetMatrix = 0; - nSourceMatrix = 1; - bDirty = true; - - // Columns Then Rows - - // Matrices 0 & 1 are used as swaps in Transform accumulation - matrix[0][0][0] = 1.0f; matrix[0][1][0] = 0.0f; matrix[0][2][0] = 0.0f; - matrix[0][0][1] = 0.0f; matrix[0][1][1] = 1.0f; matrix[0][2][1] = 0.0f; - matrix[0][0][2] = 0.0f; matrix[0][1][2] = 0.0f; matrix[0][2][2] = 1.0f; - - matrix[1][0][0] = 1.0f; matrix[1][1][0] = 0.0f; matrix[1][2][0] = 0.0f; - matrix[1][0][1] = 0.0f; matrix[1][1][1] = 1.0f; matrix[1][2][1] = 0.0f; - matrix[1][0][2] = 0.0f; matrix[1][1][2] = 0.0f; matrix[1][2][2] = 1.0f; - - // Matrix 2 is a cache matrix to hold the immediate transform operation - // Matrix 3 is a cache matrix to hold the inverted transform - } - - void olc::GFX2D::Transform2D::Multiply() - { - for (int c = 0; c < 3; c++) - { - for (int r = 0; r < 3; r++) - { - matrix[nTargetMatrix][c][r] = matrix[2][0][r] * matrix[nSourceMatrix][c][0] + - matrix[2][1][r] * matrix[nSourceMatrix][c][1] + - matrix[2][2][r] * matrix[nSourceMatrix][c][2]; - } - } - - std::swap(nTargetMatrix, nSourceMatrix); - bDirty = true; // Any transform multiply dirties the inversion - } - - void olc::GFX2D::Transform2D::Rotate(float fTheta) - { - // Construct Rotation Matrix - matrix[2][0][0] = cosf(fTheta); matrix[2][1][0] = sinf(fTheta); matrix[2][2][0] = 0.0f; - matrix[2][0][1] = -sinf(fTheta); matrix[2][1][1] = cosf(fTheta); matrix[2][2][1] = 0.0f; - matrix[2][0][2] = 0.0f; matrix[2][1][2] = 0.0f; matrix[2][2][2] = 1.0f; - Multiply(); - } - - void olc::GFX2D::Transform2D::Scale(float sx, float sy) - { - // Construct Scale Matrix - matrix[2][0][0] = sx; matrix[2][1][0] = 0.0f; matrix[2][2][0] = 0.0f; - matrix[2][0][1] = 0.0f; matrix[2][1][1] = sy; matrix[2][2][1] = 0.0f; - matrix[2][0][2] = 0.0f; matrix[2][1][2] = 0.0f; matrix[2][2][2] = 1.0f; - Multiply(); - } - - void olc::GFX2D::Transform2D::Shear(float sx, float sy) - { - // Construct Shear Matrix - matrix[2][0][0] = 1.0f; matrix[2][1][0] = sx; matrix[2][2][0] = 0.0f; - matrix[2][0][1] = sy; matrix[2][1][1] = 1.0f; matrix[2][2][1] = 0.0f; - matrix[2][0][2] = 0.0f; matrix[2][1][2] = 0.0f; matrix[2][2][2] = 1.0f; - Multiply(); - } - - void olc::GFX2D::Transform2D::Translate(float ox, float oy) - { - // Construct Translate Matrix - matrix[2][0][0] = 1.0f; matrix[2][1][0] = 0.0f; matrix[2][2][0] = ox; - matrix[2][0][1] = 0.0f; matrix[2][1][1] = 1.0f; matrix[2][2][1] = oy; - matrix[2][0][2] = 0.0f; matrix[2][1][2] = 0.0f; matrix[2][2][2] = 1.0f; - Multiply(); - } - - void olc::GFX2D::Transform2D::Perspective(float ox, float oy) - { - // Construct Translate Matrix - matrix[2][0][0] = 1.0f; matrix[2][1][0] = 0.0f; matrix[2][2][0] = 0.0f; - matrix[2][0][1] = 0.0f; matrix[2][1][1] = 1.0f; matrix[2][2][1] = 0.0f; - matrix[2][0][2] = ox; matrix[2][1][2] = oy; matrix[2][2][2] = 1.0f; - Multiply(); - } - - void olc::GFX2D::Transform2D::Forward(float in_x, float in_y, float &out_x, float &out_y) - { - out_x = in_x * matrix[nSourceMatrix][0][0] + in_y * matrix[nSourceMatrix][1][0] + matrix[nSourceMatrix][2][0]; - out_y = in_x * matrix[nSourceMatrix][0][1] + in_y * matrix[nSourceMatrix][1][1] + matrix[nSourceMatrix][2][1]; - float out_z = in_x * matrix[nSourceMatrix][0][2] + in_y * matrix[nSourceMatrix][1][2] + matrix[nSourceMatrix][2][2]; - if (out_z != 0) - { - out_x /= out_z; - out_y /= out_z; - } - } - - void olc::GFX2D::Transform2D::Backward(float in_x, float in_y, float &out_x, float &out_y) - { - out_x = in_x * matrix[3][0][0] + in_y * matrix[3][1][0] + matrix[3][2][0]; - out_y = in_x * matrix[3][0][1] + in_y * matrix[3][1][1] + matrix[3][2][1]; - float out_z = in_x * matrix[3][0][2] + in_y * matrix[3][1][2] + matrix[3][2][2]; - if (out_z != 0) - { - out_x /= out_z; - out_y /= out_z; - } - } - - void olc::GFX2D::Transform2D::Invert() - { - if (bDirty) // Obviously costly so only do if needed - { - float det = matrix[nSourceMatrix][0][0] * (matrix[nSourceMatrix][1][1] * matrix[nSourceMatrix][2][2] - matrix[nSourceMatrix][1][2] * matrix[nSourceMatrix][2][1]) - - matrix[nSourceMatrix][1][0] * (matrix[nSourceMatrix][0][1] * matrix[nSourceMatrix][2][2] - matrix[nSourceMatrix][2][1] * matrix[nSourceMatrix][0][2]) + - matrix[nSourceMatrix][2][0] * (matrix[nSourceMatrix][0][1] * matrix[nSourceMatrix][1][2] - matrix[nSourceMatrix][1][1] * matrix[nSourceMatrix][0][2]); - - float idet = 1.0f / det; - matrix[3][0][0] = (matrix[nSourceMatrix][1][1] * matrix[nSourceMatrix][2][2] - matrix[nSourceMatrix][1][2] * matrix[nSourceMatrix][2][1]) * idet; - matrix[3][1][0] = (matrix[nSourceMatrix][2][0] * matrix[nSourceMatrix][1][2] - matrix[nSourceMatrix][1][0] * matrix[nSourceMatrix][2][2]) * idet; - matrix[3][2][0] = (matrix[nSourceMatrix][1][0] * matrix[nSourceMatrix][2][1] - matrix[nSourceMatrix][2][0] * matrix[nSourceMatrix][1][1]) * idet; - matrix[3][0][1] = (matrix[nSourceMatrix][2][1] * matrix[nSourceMatrix][0][2] - matrix[nSourceMatrix][0][1] * matrix[nSourceMatrix][2][2]) * idet; - matrix[3][1][1] = (matrix[nSourceMatrix][0][0] * matrix[nSourceMatrix][2][2] - matrix[nSourceMatrix][2][0] * matrix[nSourceMatrix][0][2]) * idet; - matrix[3][2][1] = (matrix[nSourceMatrix][0][1] * matrix[nSourceMatrix][2][0] - matrix[nSourceMatrix][0][0] * matrix[nSourceMatrix][2][1]) * idet; - matrix[3][0][2] = (matrix[nSourceMatrix][0][1] * matrix[nSourceMatrix][1][2] - matrix[nSourceMatrix][0][2] * matrix[nSourceMatrix][1][1]) * idet; - matrix[3][1][2] = (matrix[nSourceMatrix][0][2] * matrix[nSourceMatrix][1][0] - matrix[nSourceMatrix][0][0] * matrix[nSourceMatrix][1][2]) * idet; - matrix[3][2][2] = (matrix[nSourceMatrix][0][0] * matrix[nSourceMatrix][1][1] - matrix[nSourceMatrix][0][1] * matrix[nSourceMatrix][1][0]) * idet; - bDirty = false; - } - } -} - -#endif -#endif \ No newline at end of file diff --git a/Crawler/olcPGEX_ViewPort.h b/Crawler/olcPGEX_ViewPort.h index a54b9771..65f99d60 100644 --- a/Crawler/olcPGEX_ViewPort.h +++ b/Crawler/olcPGEX_ViewPort.h @@ -736,15 +736,15 @@ void olc::ViewPort::DrawShadowStringDecal(const olc::vf2d& pos, std::string_view pge->Clear(BLANK); pge->DrawString({0,0},sText,WHITE,1U,width/scale.x); newDecal->Update(); - float adjustedShadowSizeFactor=shadowSizeFactor*4/std::max(scale.x,scale.y); - Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor*2)); + vf2d adjustedShadowSizeFactor=vf2d{shadowSizeFactor,shadowSizeFactor}*4/scale; + Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor.x*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor.y*2)); garbageCollector[key+"_SHADOW"].decal=newShadowDecal; pge->SetDrawTarget(newShadowDecal->sprite); pge->Clear(BLANK); - for(float y=-adjustedShadowSizeFactor;y<=adjustedShadowSizeFactor+0.1;y+=adjustedShadowSizeFactor/2){ - for(float x=-adjustedShadowSizeFactor;x<=adjustedShadowSizeFactor+0.1;x+=adjustedShadowSizeFactor/2){ + for(float y=-adjustedShadowSizeFactor.y;y<=adjustedShadowSizeFactor.y+0.1;y+=adjustedShadowSizeFactor.y/2){ + for(float x=-adjustedShadowSizeFactor.x;x<=adjustedShadowSizeFactor.x+0.1;x+=adjustedShadowSizeFactor.x/2){ if(x!=0||y!=0){ - pge->DrawString(vf2d{x,y}+vf2d{adjustedShadowSizeFactor,adjustedShadowSizeFactor}, sText, WHITE,4U,width/scale.x*4); + pge->DrawString(vf2d{x,y}+adjustedShadowSizeFactor, sText, WHITE,4U,width/scale.x*4); } } } @@ -784,15 +784,15 @@ void olc::ViewPort::DrawShadowStringPropDecal(const olc::vf2d& pos, std::string_ pge->Clear(BLANK); pge->DrawStringProp({0,0},sText,WHITE,1U,width/scale.x); newDecal->Update(); - float adjustedShadowSizeFactor=shadowSizeFactor*4/std::max(scale.x,scale.y); - Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor*2)); + vf2d adjustedShadowSizeFactor=vf2d{shadowSizeFactor,shadowSizeFactor}*4/scale; + Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor.x*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor.y*2)); garbageCollector[key+"_SHADOW"].decal=newShadowDecal; pge->SetDrawTarget(newShadowDecal->sprite); pge->Clear(BLANK); - for(float y=-adjustedShadowSizeFactor;y<=adjustedShadowSizeFactor+0.1;y+=adjustedShadowSizeFactor/2){ - for(float x=-adjustedShadowSizeFactor;x<=adjustedShadowSizeFactor+0.1;x+=adjustedShadowSizeFactor/2){ + for(float y=-adjustedShadowSizeFactor.y;y<=adjustedShadowSizeFactor.y+0.1;y+=adjustedShadowSizeFactor.y/2){ + for(float x=-adjustedShadowSizeFactor.x;x<=adjustedShadowSizeFactor.x+0.1;x+=adjustedShadowSizeFactor.x/2){ if(x!=0||y!=0){ - pge->DrawStringProp(vf2d{x,y}+vf2d{adjustedShadowSizeFactor,adjustedShadowSizeFactor}, sText, WHITE,4U,width/scale.x*4); + pge->DrawStringProp(vf2d{x,y}+adjustedShadowSizeFactor, sText, WHITE,4U,width/scale.x*4); } } } diff --git a/Crawler/olcPixelGameEngine.h b/Crawler/olcPixelGameEngine.h index 33e019d2..e9805680 100644 --- a/Crawler/olcPixelGameEngine.h +++ b/Crawler/olcPixelGameEngine.h @@ -3440,15 +3440,15 @@ namespace olc Clear(BLANK); DrawString({0,0},sText,WHITE,1U,width/scale.x); newDecal->Update(); - float adjustedShadowSizeFactor=shadowSizeFactor*4/std::max(scale.x,scale.y); - Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor*2)); + vf2d adjustedShadowSizeFactor=vf2d{shadowSizeFactor,shadowSizeFactor}*4/scale; + Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor.x*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor.y*2)); garbageCollector[key+"_SHADOW"].decal=newShadowDecal; SetDrawTarget(newShadowDecal->sprite); Clear(BLANK); - for(float y=-adjustedShadowSizeFactor;y<=adjustedShadowSizeFactor+0.1;y+=adjustedShadowSizeFactor/2){ - for(float x=-adjustedShadowSizeFactor;x<=adjustedShadowSizeFactor+0.1;x+=adjustedShadowSizeFactor/2){ + for(float y=-adjustedShadowSizeFactor.y;y<=adjustedShadowSizeFactor.y+0.1;y+=adjustedShadowSizeFactor.y/2){ + for(float x=-adjustedShadowSizeFactor.x;x<=adjustedShadowSizeFactor.x+0.1;x+=adjustedShadowSizeFactor.x/2){ if(x!=0||y!=0){ - DrawString(vf2d{x,y}+vf2d{adjustedShadowSizeFactor,adjustedShadowSizeFactor}, sText, WHITE,4U,width/scale.x*4); + DrawString(vf2d{x,y}+adjustedShadowSizeFactor, sText, WHITE,4U,width/scale.x*4); } } } @@ -3564,15 +3564,15 @@ namespace olc Clear(BLANK); DrawStringProp({0,0},sText,WHITE,1U,width/scale.x); newDecal->Update(); - float adjustedShadowSizeFactor=shadowSizeFactor*4/std::max(scale.x,scale.y); - Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor*2)); + vf2d adjustedShadowSizeFactor=vf2d{shadowSizeFactor,shadowSizeFactor}*4/scale; + Decal*newShadowDecal=new Decal(new Sprite((imageSize.x/scale.x*4)+adjustedShadowSizeFactor.x*2,(imageSize.y/scale.x*4)+adjustedShadowSizeFactor.y*2)); garbageCollector[key+"_SHADOW"].decal=newShadowDecal; SetDrawTarget(newShadowDecal->sprite); Clear(BLANK); - for(float y=-adjustedShadowSizeFactor;y<=adjustedShadowSizeFactor+0.1;y+=adjustedShadowSizeFactor/2){ - for(float x=-adjustedShadowSizeFactor;x<=adjustedShadowSizeFactor+0.1;x+=adjustedShadowSizeFactor/2){ + for(float y=-adjustedShadowSizeFactor.y;y<=adjustedShadowSizeFactor.y+0.1;y+=adjustedShadowSizeFactor.y/2){ + for(float x=-adjustedShadowSizeFactor.x;x<=adjustedShadowSizeFactor.x+0.1;x+=adjustedShadowSizeFactor.x/2){ if(x!=0||y!=0){ - DrawStringProp(vf2d{x,y}+vf2d{adjustedShadowSizeFactor,adjustedShadowSizeFactor}, sText, WHITE,4U,width/scale.x*4); + DrawStringProp(vf2d{x,y}+adjustedShadowSizeFactor, sText, WHITE,4U,width/scale.x*4); } } } diff --git a/Crawler/olcUTIL_Animate2D.h b/Crawler/olcUTIL_Animate2D.h index e676c09f..85330ad8 100644 --- a/Crawler/olcUTIL_Animate2D.h +++ b/Crawler/olcUTIL_Animate2D.h @@ -188,7 +188,7 @@ namespace olc::utils::Animate2D // Update an animation state token inline void UpdateState(AnimationState& state, const float fElapsedTime) const { - state.fTime += std::fmod(fElapsedTime,1000); + state.fTime = std::fmod(state.fTime+fElapsedTime,1000); } public: diff --git a/Crawler/pixelGameEngine.cpp b/Crawler/pixelGameEngine.cpp index a6680bf1..3073dcb5 100644 --- a/Crawler/pixelGameEngine.cpp +++ b/Crawler/pixelGameEngine.cpp @@ -49,7 +49,5 @@ All rights reserved. #include "TMXParser.h" #define TSX_PARSER_SETUP #include "TSXParser.h" -#define OLC_PGEX_GRAPHICS2D -#include "olcPGEX_Graphics2D.h" #define OLC_PGEX_MINIAUDIO #include "olcPGEX_MiniAudio.h" \ No newline at end of file