diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj b/Adventures in Lestoria/Adventures in Lestoria.vcxproj index dee6c8bf..764129ce 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj @@ -217,7 +217,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - stdcpp20 + stdcpplatest C:\Users\LabUser\source\repos\AdventuresInLestoria\Adventures in Lestoria\steam;C:\Users\LabUser\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files;C:\Users\LabUser\Documents\include;C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\steam;C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files;C:\Users\sigon\OneDrive\Documents\include;%(AdditionalIncludeDirectories) /MP20 %(AdditionalOptions) 4099;5030;4715;4172;4834 @@ -243,7 +243,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - stdcpp20 + stdcpplatest C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\steam;C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files;C:\Users\sigon\OneDrive\Documents\include /MP20 %(AdditionalOptions) 4099;5030;4715;4172;4834 @@ -274,7 +274,7 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - stdcpp20 + stdcpplatest /MP20 %(AdditionalOptions) C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\steam;C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files;C:\Users\sigon\OneDrive\Documents\include true @@ -336,7 +336,7 @@ $(CoreLibraryDependencies);%(AdditionalDependencies);discord_game_sdk.dll.lib - stdcpp20 + stdcpplatest C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files; true @@ -353,7 +353,7 @@ $(CoreLibraryDependencies);%(AdditionalDependencies);discord_game_sdk.dll.lib - stdcpp20 + stdcpplatest C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files; true diff --git a/Adventures in Lestoria/ItemEnchant.cpp b/Adventures in Lestoria/ItemEnchant.cpp index fbb975ce..12e7a712 100644 --- a/Adventures in Lestoria/ItemEnchant.cpp +++ b/Adventures in Lestoria/ItemEnchant.cpp @@ -39,7 +39,9 @@ All rights reserved. #include "olcUTIL_DataFile.h" #include "ItemEnchant.h" #include "DEFINES.h" +#include "Class.h" #include +#include INCLUDE_DATA @@ -47,6 +49,9 @@ std::unordered_mapItemEnchantInfo::ENCHANT_LIST; std::unordered_mapItemEnchantInfo::ENCHANT_CATEGORIES; void ItemEnchantInfo::Initialize(){ + ENCHANT_LIST.clear(); + ENCHANT_CATEGORIES.clear(); + float minCategoryRollWeight{}; float maxCategoryRollWeight{}; for(const auto&[key,size]:DATA["Item Enchants"]){ @@ -76,10 +81,11 @@ void ItemEnchantInfo::Initialize(){ for(const auto&[key,size]:enchantData){ if(key=="Percent Chance"||key=="Enchant Display Color")continue; - const auto MakeEnchant=[](const std::string_view keyName,datafile&enchant){ + const auto MakeEnchant=[enchantCategory](const std::string_view keyName,datafile&enchant){ ItemEnchantInfo newEnchant; + newEnchant.category=enchantCategory; newEnchant.name=keyName; - newEnchant.description=enchant["Description"].GetString(); + std::string enchantDescription{enchant["Description"].GetString()}; using enum AbilitySlot; const std::unordered_mapaffectSlots{ {"Auto Attack",AUTO_ATTACK}, @@ -94,7 +100,6 @@ void ItemEnchantInfo::Initialize(){ if(!affectSlots.count(affectStr))ERR(std::format("WARNING! Could not find translate ability affect slot name {} to a valid slot! Valid slot names are: \"Auto Attack, Right Click Ability, Ability 1, Ability 2, Ability 3\"",affectStr)); newEnchant.abilitySlot=affectSlots.at(affectStr); } - size_t statModifierInd{}; while(enchant.HasProperty(std::format("Stat Modifier[{}]",statModifierInd))){ const datafile&stat{enchant[std::format("Stat Modifier[{}]",statModifierInd)]}; @@ -103,13 +108,25 @@ void ItemEnchantInfo::Initialize(){ statModifierInd++; } + auto IsRequiredKey=[](const std::string_view key){return key=="Description"||key=="Affects"||key.starts_with("Stat Modifier[");}; + for(auto&[key,size]:enchant){ - if(key=="Description"||key=="Affects"||key.starts_with("Stat Modifier["))continue; + if(IsRequiredKey(key))continue; const auto&result{newEnchant.config.insert({key,enchant[key].GetReal()})}; const bool InsertFailed{!result.second}; if(InsertFailed)ERR(std::format("WARNING! Enchant {} already had an extra property named {}. Duplicates not allowed!",keyName,key)); } + for(const auto&[configName,val]:newEnchant.config){ + const std::string wrappedConfigStr{std::vformat("{{{}}}",std::make_format_args(configName))}; + size_t configValInd{enchantDescription.find(wrappedConfigStr)}; + if(configValInd==std::string::npos)continue; + std::string formattedFloat{std::format("{}",val)}; + enchantDescription=enchantDescription.replace(configValInd,wrappedConfigStr.length(),formattedFloat); + } + + newEnchant.description=enchantDescription; + return newEnchant; }; @@ -121,7 +138,7 @@ void ItemEnchantInfo::Initialize(){ ItemEnchantInfo newEnchant{MakeEnchant(key,classEnchantData[key])}; const auto&result{ENCHANT_LIST.insert({key,newEnchant})}; const bool InsertFailed{!result.second}; - if(InsertFailed)ERR(std::format("WARNING! Enchant {} already existed in Enchantment List! Duplicates are not allowed!",key)); + if(InsertFailed)ERR(std::format("WARNING! Enchant {} already existed in Enchant List! Duplicates are not allowed!",key)); } }else{ ItemEnchantInfo newEnchant{MakeEnchant(key,enchantData[key])}; @@ -132,10 +149,29 @@ void ItemEnchantInfo::Initialize(){ } } } - -const ItemEnchantInfo&ItemEnchantInfo::GetEnchant(const std::string_view name){ - return ENCHANT_LIST.at(std::string(name)); -} ItemEnchant::ItemEnchant(const std::string_view enchantName) -:enchant(ItemEnchantInfo::GetEnchant(enchantName)){} \ No newline at end of file +:enchant(ItemEnchantInfo::GetEnchant(enchantName)){} + +const ItemEnchantInfo&ItemEnchantInfo::GetEnchant(const std::string_view enchantName){ + return ENCHANT_LIST.at(std::string(enchantName)); +} + +const std::string ItemEnchantInfo::Name(TextStyle style)const{ + using enum TextStyle; + switch(style){ + case NORMAL:{ + return name; + }break; + case COLOR_CODES:{ + return ENCHANT_CATEGORIES.at(category).displayCol.toHexString()+name; + }break; + } + return{}; +} +const std::string_view ItemEnchantInfo::Description()const{ + return description; +} +const float ItemEnchantInfo::GetConfigValue(const std::string_view keyName)const{ + return config.at(std::string(keyName)); +} \ No newline at end of file diff --git a/Adventures in Lestoria/ItemEnchant.h b/Adventures in Lestoria/ItemEnchant.h index 759f1242..7a9106f6 100644 --- a/Adventures in Lestoria/ItemEnchant.h +++ b/Adventures in Lestoria/ItemEnchant.h @@ -39,16 +39,20 @@ All rights reserved. #include "AttributableStat.h" #include "Pixel.h" -#include "Class.h" class ItemEnchantInfo{ public: + enum class TextStyle{ + NORMAL, + COLOR_CODES, + }; + static void Initialize(); - const static ItemEnchantInfo&GetEnchant(const std::string_view name); + const static ItemEnchantInfo&GetEnchant(const std::string_view enchantName); - const std::string_view Name(); - const std::string_view Description(); - const float GetConfigValue(const std::string_view keyName); + const std::string Name(TextStyle style=TextStyle::NORMAL)const; + const std::string_view Description()const; + const float GetConfigValue(const std::string_view keyName)const; enum class AbilitySlot{ AUTO_ATTACK, RIGHT_CLICK, @@ -69,6 +73,7 @@ private: std::pairweightedRollRange; Pixel displayCol; }; + ItemEnchantCategory category; std::string name; std::string description; std::optionalabilitySlot; @@ -84,4 +89,4 @@ public: ItemEnchant(const std::string_view enchantName); private: const ItemEnchantInfo&enchant; -}; +}; \ No newline at end of file diff --git a/Adventures in Lestoria/Pixel.cpp b/Adventures in Lestoria/Pixel.cpp index 230c9f77..a6450653 100644 --- a/Adventures in Lestoria/Pixel.cpp +++ b/Adventures in Lestoria/Pixel.cpp @@ -51,6 +51,7 @@ Community: https://community.onelonecoder.com #include "Pixel.h" #include #include +#include namespace olc{ // O------------------------------------------------------------------------------O @@ -167,6 +168,10 @@ namespace olc{ return Pixel(nR, nG, nB, a); } + std::string Pixel::toHexString()const{ + return std::format("#{:2X}{:2X}{:2X}",r,g,b); + } + Pixel PixelF(float red, float green, float blue, float alpha) { return Pixel(uint8_t(red * 255.0f), uint8_t(green * 255.0f), uint8_t(blue * 255.0f), uint8_t(alpha * 255.0f)); } diff --git a/Adventures in Lestoria/Pixel.h b/Adventures in Lestoria/Pixel.h index 8af085e2..dfa990b4 100644 --- a/Adventures in Lestoria/Pixel.h +++ b/Adventures in Lestoria/Pixel.h @@ -49,6 +49,7 @@ Community: https://community.onelonecoder.com #pragma endregion #pragma once #include +#include // O------------------------------------------------------------------------------O // | olc::Pixel IMPLEMENTATION | @@ -89,6 +90,7 @@ namespace olc{ Pixel& operator *=(const Pixel& p); bool operator < (const Pixel& p)const; Pixel inv() const; + std::string toHexString()const; }; Pixel PixelF(float red, float green, float blue, float alpha = 1.0f); diff --git a/Adventures in Lestoria/SaveFile.cpp b/Adventures in Lestoria/SaveFile.cpp index 0696d768..2cb6049f 100644 --- a/Adventures in Lestoria/SaveFile.cpp +++ b/Adventures in Lestoria/SaveFile.cpp @@ -651,8 +651,7 @@ const std::string SaveFile::CreateServerRequest(const SaveFileOperation::Operati const std::array uriReserved={';','/','?',':','@','&','=','+','$',',','-','_','.','!','~','*','\'','(',')','#'}; if(c>='A'&&c<='Z'||c>='a'&&c<='z'||c>='0'&&c<='9'||std::find(uriReserved.begin(),uriReserved.end(),c)!=uriReserved.end())return std::move(str)+c; - std::string convertedChar=std::format("%{:02x}",c); - std::for_each(convertedChar.begin(),convertedChar.end(),[](char&c){c=char(std::toupper(c));}); + std::string convertedChar=std::format("%{:02X}",c); return std::move(str)+convertedChar; }); }; diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h index bf929047..ad6fc283 100644 --- a/Adventures in Lestoria/Version.h +++ b/Adventures in Lestoria/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 1 #define VERSION_MINOR 2 #define VERSION_PATCH 3 -#define VERSION_BUILD 10498 +#define VERSION_BUILD 10511 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Adventures in Lestoria/assets/config/items/ItemEnchants.txt b/Adventures in Lestoria/assets/config/items/ItemEnchants.txt index 1a2df4fd..707f3a60 100644 --- a/Adventures in Lestoria/assets/config/items/ItemEnchants.txt +++ b/Adventures in Lestoria/assets/config/items/ItemEnchants.txt @@ -6,102 +6,61 @@ Item Enchants Percent Chance = 50% Enchant Display Color = 253, 255, 206, 255 - Health Increase - { - Description = "Increases Maximum Health." - # Stat, Lowest, Highest Value - Stat Modifier[0] = Health, 10, 25 - # Stat Modifier[1] = ... - } Health Boost { Description = "Increases Maximum Health %." # Stat, Lowest, Highest Value - Stat Modifier[0] = Health %, 5, 10 - # Stat Modifier[1] = ... - } - Defense Increase - { - Description = "Increases Defense." - # Stat, Lowest, Highest Value - Stat Modifier[0] = Defense, 10, 25 - # Stat Modifier[1] = ... - } - Defense Boost - { - Description = "Increases Defense %." - # Stat, Lowest, Highest Value - Stat Modifier[0] = Defense %, 5, 10 - # Stat Modifier[1] = ... - } - Attack Increase - { - Description = "Increases Attack." - # Stat, Lowest, Highest Value - Stat Modifier[0] = Attack, 5, 10 + Stat Modifier[0] = Health %, 3, 5 # Stat Modifier[1] = ... } Attack Boost { Description = "Increases Attack %." # Stat, Lowest, Highest Value - Stat Modifier[0] = Attack %, 2, 5 + Stat Modifier[0] = Attack %, 3, 5 # Stat Modifier[1] = ... } Movement Boost { Description = "Increases Move Spd %." # Stat, Lowest, Highest Value - Stat Modifier[0] = Move Spd %, 5, 10 + Stat Modifier[0] = Move Spd %, 3, 5 # Stat Modifier[1] = ... } Ability Haste { Description = "Decreases cooldown time of abilities." # Stat, Lowest, Highest Value - Stat Modifier[0] = CDR, 2, 5 + Stat Modifier[0] = CDR, 3, 5 # Stat Modifier[1] = ... } Crit Rate { Description = "Increases critical hit rate." # Stat, Lowest, Highest Value - Stat Modifier[0] = Crit Rate, 2, 5 + Stat Modifier[0] = Crit Rate, 3, 5 # Stat Modifier[1] = ... } Crit Damage { Description = "Increases damage from critical hits." # Stat, Lowest, Highest Value - Stat Modifier[0] = Crit Dmg, 5, 10 - # Stat Modifier[1] = ... - } - HP Recovery - { - Description = "Restores health every 6 seconds." - # Stat, Lowest, Highest Value - Stat Modifier[0] = HP6 Recovery %, 2, 4 + Stat Modifier[0] = Crit Dmg, 7, 10 # Stat Modifier[1] = ... } Stoneskin { Description = "Reduces damage taken." # Stat, Lowest, Highest Value - Stat Modifier[0] = Damage Reduction, 2, 5 - # Stat Modifier[1] = ... - } - Quickstrike - { - Description = "Increases attack rate." - # Stat, Lowest, Highest Value - Stat Modifier[0] = Attack Spd, 3, 5 + Stat Modifier[0] = Damage Reduction, 3, 5 # Stat Modifier[1] = ... } + Mana Pool { Description = "Increases maximum mana." # Stat, Lowest, Highest Value - Stat Modifier[0] = Mana, 10, 20 + Stat Modifier[0] = Mana, 7, 12 # Stat Modifier[1] = ... } @@ -116,29 +75,43 @@ Item Enchants { Quickdraw { - Description = "Basic Attack cooldown has a 20% chance of instantly resetting when a target is hit." + Description = "Basic Attack cooldown has a {RESET CHANCE}% chance of instantly resetting when a target is hit." Affects = Auto Attack + + RESET CHANCE = 20% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Stealthy Retreat { - Description = "Invulnerability time increased dramatically when using Retreat." + Description = "Invulnerability time increased by {INVULNERABILITY INCREASE} seconds when using Retreat." Affects = Right Click Ability + + INVULNERABILITY INCREASE = 2.0s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Poisonous Arrow { - Description = "Every 10 seconds, the next arrow fired becomes a poisonous arrow causing 20% damage every second for 7 seconds." + Description = "Every {POISON ARROW RESET FREQUENCY} seconds, the next arrow fired becomes a poisonous arrow causing {POISON TICK DAMAGE}% damage every second for {POISON DURATION} seconds." Affects = Auto Attack + + POISON ARROW RESET FREQUENCY = 10s + POISON TICK DAMAGE = 20% + POISON DURATION = 7s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Extreme Rapid Fire { - Description = "Fire an additional 5 arrows when using Rapid Fire" + Description = "Fire an additional {ARROW COUNT INCREASE} arrows when using Rapid Fire" Affects = Ability 1 + + ARROW COUNT INCREASE = 5 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -146,20 +119,30 @@ Item Enchants { Description = "Charged Shot's attack radius becomes immensely large." Affects = Ability 2 + + ATTACK RADIUS INCREASE MULT = 15x + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Mega Charged Shot { - Description = "Charged Shot's cast time increases by 1.5 seconds. Now deals two times more damage." + Description = "Charged Shot's cast time increases by {CAST TIME INCREASE} seconds. Now deals two times more damage." Affects = Ability 2 + + CAST TIME INCREASE = 1.5s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Multi-Multishot { - Description = "Multishot can now hold up to three charges." + Description = "Multishot can now hold up to {EXTRA CHARGE COUNT} charges and has a {COOLDOWN REDUCTION PCT}% reduced Cooldown." Affects = Ability 3 + + EXTRA CHARGE COUNT = 3 + COOLDOWN REDUCTION PCT = 10% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -168,36 +151,76 @@ Item Enchants { Backstabber { - Description = "Attacking a target from behind deals an additional 40% damage." + Description = "Attacking a target from behind deals an additional {BACKSTAB BONUS DMG}% damage." Affects = Auto Attack + + BACKSTAB BONUS DMG = 40% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Tumble { - Description = "Roll range, invulnerability time, and Movespeed boost are all increased by 30%." + Description = "Roll range, invulnerability time, and Movespeed boost are all increased by {BOOST PERCENTAGE}%." Affects = Right Click Ability + + BOOST PERCENTAGE = 30% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Triple Toss { - Description = "Hidden Dagger now throws three daggers instead of one." + Description = "Hidden Dagger now throws {NEW DAGGER COUNT} daggers instead of 1." Affects = Ability 1 + + NEW DAGGER COUNT = 3 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Deadly Mirage { - Description = "Immediately after dashing once with Deadly Dash, perform another dash in target direction." + Description = "After dashing once with Deadly Dash, gives a {REACTIVATE TIMING WINDOW} second window to reuse the skill without spending mana." Affects = Ability 2 + + REACTIVATE TIMING WINDOW = 2s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Adrenaline Stim { - Description = "Sacrifice 20% of your health to gain 50% increased attack range. Adrenaline Rush also lasts 30 seconds instead of 8." + Description = "Sacrifice {HEALTH PCT COST}% of your health to gain {ATTACK RANGE INCREASE PCT}% increased attack range. Adrenaline Rush also lasts {NEW ADRENALINE RUSH DURATION} seconds instead of 8." + Affects = Ability 3 + + HEALTH PCT COST = 20% + ATTACK RANGE INCREASE PCT = 50% + NEW ADRENALINE RUSH DURATION = 30s + + # Stat, Lowest, Highest Value + # Stat Modifier[0] = ..., 0, 0 + } + Bloodlust + { + Description = "Every Enemy killed during Adrenaline Rush increases the duration of the buff by {BUFF TIMER INCREASE} seconds. Every Kill grants a {ATTACK BUFF PCT INCREASE}% Attack buff stacking up to {MAX ATTACK BUFF STACKS} times." Affects = Ability 3 + + BUFF TIMER INCREASE = 2s + ATTACK BUFF PCT INCREASE = 1% + MAX ATTACK BUFF STACKS = 10 + + # Stat, Lowest, Highest Value + # Stat Modifier[0] = ..., 0, 0 + } + Evasive Movement + { + Description = "Roll also grants {DAMAGE REDUCTION PCT}% Damage Reduction for {DAMAGE REDUCTION DURATION} seconds." + Affects = Right Click Ability + + DAMAGE REDUCTION PCT = 50% + DAMAGE REDUCTION DURATION = 3.0s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -206,74 +229,104 @@ Item Enchants { Burning Arrow { - Description = "Auto attacks now apply a 6-second burn to targets dealing 20% attack every 2 seconds." + Description = "Auto attacks on a marked Target now apply a {BURN DURATION}-second burn to targets dealing {BURN DAMAGE}% attack every {BURN TICK FREQUENCY} seconds. Burn can be stacked up to {MAX BURN STACK} times" Affects = Auto Attack + + BURN DURATION = 6s + BURN DAMAGE = 20% + BURN TICK FREQUENCY = 2s + MAX BURN STACK = 3 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Enfeebled Target { - Description = "Marked targets are slowed by 30% and deal 20% less damage." + Description = "Marked targets are slowed by {SLOW PCT}% and deal {DAMAGE REDUCTION PCT}% less damage." Affects = Ability 1 + + SLOT PCT = 30% + DAMAGE REDUCTION PCT = 20% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Long-Lasting Mark { - Description = "Marks now last for 20 seconds." + Description = "Marks now last for {DURATION} seconds." Affects = Ability 1 + + DURATION = 20s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Trap Collector { - Description = "You can now hold two charges of each trap." + Description = "You can now hold {CHARGE COUNT} charges of each trap." Affects = Ability 2, Ability 3 + + CHARGE COUNT = 2 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Lingering Scent { - Description = "Bleed lasts for 10 seconds longer." + Description = "Bleed lasts for {BLEED EXTRA DURATION} seconds longer." Affects = Ability 2 + + BLEED EXTRA DURATION = 10s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } - Caught Dead + Opportunity Shot { - Description = "Caught targets are stuck for 5 seconds." - Affects = Ability 2 + Description = "Every {MARK TIME} seconds a random enemy on screen gets {MARK AMOUNT} Mark. If a mark on that Target is triggered within {MARK TRIGGER TIME} seconds, your Mark Target's cooldown is reduced by {MARK COOLDOWN REDUCE} seconds." + Affects = Auto Attack + + MARK TIME = 8s + MARK AMOUNT = 1 + MARK TRIGGER TIME = 3s + MARK COOLDOWN REDUCE = 2s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Concussive Trap { - Description = "Explosive traps now explode three times when triggered. Additional explosions deal 250% attack." + Description = "Explosive traps now explode {TRAP EXPLODE COUNT} times when triggered. Additional explosions deal {ADDITIONAL EXPLOSION DAMAGE}% attack." Affects = Ability 3 + + TRAP EXPLODE COUNT = 3 + ADDITIONAL EXPLOSION DAMAGE = 250% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } } Warrior { - Giant Sword - { - Description = "Attack Range increased by 75%." - Affects = Auto Attack - # Stat, Lowest, Highest Value - # Stat Modifier[0] = ..., 0, 0 - } - Steel Yourself + Sword Enchantment { - Description = "Negates knockback from collisions." + Description = "After Sonic Slash your Autohit range gets increased by {AUTO RANGE INCREASE}% for {INCREASE DURATION} seconds" Affects = Auto Attack + + AUTO RANGE INCREASE = 100% + INCREASE DURATION = 8s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } - Auto Guard + Improved Ground Slam { - Description = "If Block is up and you take damage, Block will activate immediately, preventing the attack." - Affects = Right Click Ability + Description = "Ground Slam is {GROUND SLAM RADIUS INCREASE}% larger range and deals additional Damage equal to {DEFENSE DAMAGE}% of your defense." + Affects = Ability 2 + + GROUND SLAM RADIUS INCREASE = 20% + DEFENSE DAMAGE = 50% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -281,34 +334,51 @@ Item Enchants { Description = "Block's duration is doubled." Affects = Right Click Ability + + BLOCK DURATION MULT = 2x + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Advance Shield { - Description = "Block no longer grants invulnerability or knockback reduction. Block now grants a shield equal to 20% of your health for 10 seconds. You can perform other actions while the shield is active." + Description = "Block no longer grants invulnerability or knockback reduction. Block now grants a shield equal to {SHIELD AMOUNT}% of your maximum health for {SHIELD DURATION} seconds." Affects = Right Click Ability + + SHIELD AMOUNT = 20% + SHIELD DURATION = 9s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Battle Shout { - Description = "Battlecry now deals damage equal to your defense." + Description = "Battlecry deals damage equal to {DEFENSE DAMAGE}% of your defense." Affects = Ability 1 + + DEFENSE DAMAGE = 100% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Slam Shock { - Description = "Monsters hit by Ground Slam become stunned for 5 seconds." + Description = "Monsters hit by Ground Slam become stunned for {STUN DURATION} seconds." Affects = Ability 2 + + STUN DURATION = 5s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Sonic Upgrade { - Description = "Sonic Slash's Cooldown and Mana costs reduced by 20%." + Description = "Sonic Slash's Cooldown and Mana costs reduced by {REDUCTION PCT}% and Deals Additional Damage Equal to {ADDITIONAL DMG PCT}% of you max Health." Affects = Ability 3 + + REDUCTION PCT = 15% + ADDITIONAL DMG PCT = 10% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -317,15 +387,22 @@ Item Enchants { Bouncing Orb { - Description = "Homing orb now bounces off of targets up to 4 bounces. Damage reduced to 50% attack. Cannot hit the same target twice in a row." + Description = "Homing orb now bounces off of targets up to {BOUNCE COUNT} bounces. Damage reduced to {ORB DAMAGE}% attack. Cannot hit the same target twice in a row." Affects = Auto Attack + + BOUNCE COUNT = 4 + ORB DAMAGE = 50% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Nine Lives { - Description = "Transform's cooldown becomes 20 seconds. Upon using Transform remain in cat form. Instead of taking damage, getting hit will simply revert your form." + Description = "Transform's cooldown becomes {TRANSFORM COOLDOWN} seconds. Upon using Transform remain in cat form. Instead of taking damage, getting hit will revert your form." Affects = Right Click Ability + + TRANSFORM COOLDOWN = 20s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -333,27 +410,52 @@ Item Enchants { Description = "If Curse of Pain kills a target, it can spread to nearby targets." Affects = Ability 1 + + SPREAD RANGE = 250 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Pooling Poison { - Description = "Throw Poison causes the splash effect to linger for 10 seconds, dealing 100% attack every 2 seconds." + Description = "Throw Poison causes the splash effect to linger for {SPLASH LINGER TIME} seconds, dealing {POISON POOL DAMAGE}% attack every {POISON POOL DAMAGE FREQUENCY} seconds." Affects = Ability 2 + + SPLASH LINGER TIME = 10s + POISON POOL DAMAGE = 100% + POISON POOL DAMAGE FREQUENCY = 2s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Poison Bounce { - Description = "Throw Poison bounces along the ground two additional times dealing small splashes of poison for 100% attack damage before the final explosion." + Description = "Throw Poison bounces along the ground {BOUNCE COUNT} additional times dealing small splashes of poison for {BOUNCE DAMAGE}% attack damage before the final explosion." Affects = Ability 2 + + BOUNCE COUNT = 2 + BOUNCE DAMAGE = 100% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Expunge { - Description = "Target takes 50% additional damage during Curse of Death." + Description = "Target takes {BONUS DAMAGE}% additional damage during Curse of Death." Affects = Ability 3 + + BONUS DAMAGE = 50% + + # Stat, Lowest, Highest Value + # Stat Modifier[0] = ..., 0, 0 + } + Curse of Doom + { + Description = "If a target dies while Curse of Death is active, the target causes a large explosion, dealing all the damage accumulated during Curse of Death onto nearby targets. + Affects = Ability 3 + + EXPLODE RANGE = 500 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -362,50 +464,83 @@ Item Enchants { Piercing Bolt { - Description = "Regular attacks now go through targets. Damage dealt to additional targets reduced by 50%." + Description = "Regular attacks now go through targets. Damage dealt to additional targets is {MULTI TARGET DAMAGE}% of attack." Affects = Auto Attack + + MULTI TARGET DAMAGE = 50% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Blink Portal { - Description = "For 5 seconds after using Teleport, the Wizard can activate Teleport again to teleport back to the original location. Cooldown increased to 13 seconds." + Description = "For {REACTIVATION TIME} seconds after using Teleport, the Wizard can activate Teleport again to teleport back to the original location. Cooldown increased to {COOLDOWN} seconds." Affects = Right Click Ability + + REACTIVATION TIME = 5s + COOLDOWN = 13s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Black Hole { - Description = "After teleporting, creates a small black hole pulling in nearby targets for 4 seconds." + Description = "After teleporting, creates a small black hole pulling in nearby targets for {BLACK HOLE DURATION} seconds." Affects = Right Click Ability + + BLACK HOLE DURATION = 4s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Trail of Fire { - Description = "The Firebolt leaves behind a trail of fire, burning targets standing in it for 10% attack every second for 10 seconds." + Description = "The Firebolt leaves behind a trail of fire, burning targets standing in it for {TRAIL DAMAGE}% attack every second for {TRAIL DURATION} seconds." Affects = Ability 1 + + TRAIL DAMAGE = 10% + TRAIL DURATION = 10s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Chain Lightning { - Description = "Targets affected by Lightning Bolt will send out two additional shocks half a second later to other nearby targets for 100% attack. This can continue up to three times." + Description = "Targets affected by Lightning Bolt will send out {ADDITIONAL SHOCK COUNT} additional shocks {ADDITIONAL SHOCK DELAY} seconds later to other nearby targets for {SHOCK DAMAGE}% attack. This can continue up to {REPEAT COUNT} times." Affects = Ability 2 + + ADDITIONAL SHOCK COUNT = 2 + ADDITIONAL SHOCK DELAY = 0.5s + SHOCK DAMAGE = 100% + REPEAT COUNT = 3 + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Summon Comet { - Description = "Meteor cast time reduced by 1 second. Meteor attack falls twice as quickly." + Description = "Meteor cast time reduced to {METEOR CAST TIME} seconds. Meteor attack falls {FALL SPEED MULT}x as quickly. Damage is reduced by {DAMAGE REDUCTION PCT}% and Cooldown reduced by {COOLDOWN REDUCTION} seconds." Affects = Ability 3 + + METEOR CAST TIME = 0.5s + FALL SPEED MULT = 2.0x + DAMAGE REDUCTION PCT = 10% + COOLDOWN REDUCTION = 8s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Solar Flare { - Description = "Meteor cast time increased by 2 seconds. Meteor is twice as large and deals 1600% attack. Lingering fire rings last twice as long." + Description = "Meteor cast time increased to {METEOR CAST TIME} seconds. Meteor is {SIZE MULT}x as large and deals {METEOR ATTACK}% attack. Lingering fire rings last {FIRE RING DURATION MULT}x as long. Cooldown increased by {COOLDOWN INCREASE} seconds." Affects = Ability 3 + + METEOR CAST TIME = 3.5s + SIZE MULT = 2x + METEOR ATTACK = 1600% + FIRE RING DURATION MULT = 2x + COOLDOWN INCREASE = 8s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } @@ -421,43 +556,96 @@ Item Enchants { Description = "Provides a defensive aura granting many boons." # Stat, Lowest, Highest Value - Stat Modifier[0] = Health %, 5, 10 - Stat Modifier[1] = Defense %, 5, 10 - Stat Modifier[2] = Move Spd %, 5, 10 - Stat Modifier[3] = HP4 Recovery %, 2, 5 + Stat Modifier[0] = Health %, 2, 3 + Stat Modifier[1] = Damage Reduction, 2, 3 + Stat Modifier[2] = Move Spd %, 2, 3 + Stat Modifier[3] = HP6 Recovery %, 1, 1 } Aura of the Beast { Description = "Provides an offensive aura granting many boons." # Stat, Lowest, Highest Value - Stat Modifier[0] = Attack %, 4, 8 - Stat Modifier[1] = Crit Rate, 5, 10 - Stat Modifier[2] = CDR, 5, 10 - Stat Modifier[3] = Crit Dmg, 15, 20 + Stat Modifier[0] = Attack %, 2, 3 + Stat Modifier[1] = Crit Rate, 2, 3 + Stat Modifier[2] = CDR, 2, 3 + Stat Modifier[3] = Crit Dmg, 3, 7 } Lethal Tempo { - Description = "Increases Attack Speed by 5% with each strike, up to 25%. Lasts for 5 seconds." + Description = "Increases Attack Speed by {ATTACK SPEED INCREASE}% with each strike, up to {MAX ATTACK SPEED INCREASE}%. Stacks last for {STACK DURATION} seconds." + + ATTACK SPEED INCREASE = 5% + MAX ATTACK SPEED INCREASE = 25% + STACK DURATION = 5s + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Second Wind { - Description = "Gain 1% HP Recovery/sec when below 20% health." + Description = "Gain {HP RECOVERY PCT}% HP Recovery/sec when below {HP BELOW THRESHOLD}% health." + + HP RECOVERY PCT = 1% + HP BELOW THRESHOLD = 20% + + # Stat, Lowest, Highest Value + # Stat Modifier[0] = ..., 0, 0 + } + Emergency Recovery + { + Description = "Gain {HP RECOVERY PCT}% HP Recovery every 6 seconds. Effect increases by {GAIN AMOUNT PCT}% for every {MISSING HEALTH BONUS PCT}% health missing. Below {FOUR SECOND HP THRESHOLD}% Health Recovery happens every 4 seconds." + + HP RECOVERY PCT = 1% + GAIN AMOUNT PCT = 0.5% + MISSING HEALTH BONUS PCT = 10% + FOUR SECOND HP THRESHOLD = 30% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Death Defiance { - Description = "30% chance to avoid taking lethal damage." + Description = "{LETHAL DAMAGE AVOID CHANCE}% chance to avoid taking lethal damage." + + LETHAL DAMAGE AVOID CHANCE = 30% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } Reaper of Souls { - Description = "Recover 3 Health for each monster kill." + Description = "Recover {HEALTH GAIN} Health, {MANA GAIN} Mana and reduces ability cooldowns by {COOLDOWN REDUCTION} seconds for each monster kill." + + HEALTH GAIN = 3 + MANA GAIN = 2 + COOLDOWN REDUCTION = 0.5s + + # Stat, Lowest, Highest Value + # Stat Modifier[0] = ..., 0, 0 + } + Wizards Soul + { + Description = "Using an ability reduces the cooldown of every other ability by {ABILITY COOLDOWN AMOUNT} seconds. Mana Recovery also increases by {MANA RECOVERY MULT}x for {MANA RECOVERY DURATION} seconds." + + ABILITY COOLDOWN AMOUNT = 1.5s + MANA RECOVERY MULT = 2x + MANA RECOVERY DURATION = 2s + + # Stat, Lowest, Highest Value + # Stat Modifier[0] = ..., 0, 0 + } + Last Reserve + { + Description = "Gain {DAMAGE REDUCTION PCT}% Damage Reduction, {ATTACK PCT}% Attack and {COOLDOWN REDUCTION PCT}% Cooldown Reduction when below {HP BELOW THRESHOLD}% Health". + + DAMAGE REDUCTION PCT = 30% + ATTACK PCT = 10% + COOLDOWN REDUCTION PCT = 10% + HP BELOW THRESHOLD = 25% + # Stat, Lowest, Highest Value # Stat Modifier[0] = ..., 0, 0 } + } } \ No newline at end of file diff --git a/x64/Release/Adventures in Lestoria.exe b/x64/Release/Adventures in Lestoria.exe index 7f507225..f0b845d9 100644 Binary files a/x64/Release/Adventures in Lestoria.exe and b/x64/Release/Adventures in Lestoria.exe differ