Switch to built-in uppercase hexadecimal format display when encoding URIs sending save files (emscripten version). Implement variable find and replace features when loading in Item Enchants. Grammar changes to item enchants config file. Convert numerical values to variable config values in item enchants config file. Release Build 10511.

mac-build
sigonasr2 4 months ago
parent 23fc505b12
commit 1319a91d11
  1. 10
      Adventures in Lestoria/Adventures in Lestoria.vcxproj
  2. 56
      Adventures in Lestoria/ItemEnchant.cpp
  3. 17
      Adventures in Lestoria/ItemEnchant.h
  4. 5
      Adventures in Lestoria/Pixel.cpp
  5. 2
      Adventures in Lestoria/Pixel.h
  6. 3
      Adventures in Lestoria/SaveFile.cpp
  7. 2
      Adventures in Lestoria/Version.h
  8. 408
      Adventures in Lestoria/assets/config/items/ItemEnchants.txt
  9. BIN
      x64/Release/Adventures in Lestoria.exe

@ -217,7 +217,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalIncludeDirectories>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)</AdditionalIncludeDirectories>
<AdditionalOptions>/MP20 %(AdditionalOptions)</AdditionalOptions>
<TreatSpecificWarningsAsErrors>4099;5030;4715;4172;4834</TreatSpecificWarningsAsErrors>
@ -243,7 +243,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalIncludeDirectories>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>
<AdditionalOptions>/MP20 %(AdditionalOptions)</AdditionalOptions>
<TreatSpecificWarningsAsErrors>4099;5030;4715;4172;4834</TreatSpecificWarningsAsErrors>
@ -274,7 +274,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalOptions>/MP20 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>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>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -336,7 +336,7 @@
<AdditionalDependencies>$(CoreLibraryDependencies);%(AdditionalDependencies);discord_game_sdk.dll.lib</AdditionalDependencies>
</Link>
<ClCompile>
<LanguageStandard>stdcpp20</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalIncludeDirectories>C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files;</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
@ -353,7 +353,7 @@
<AdditionalDependencies>$(CoreLibraryDependencies);%(AdditionalDependencies);discord_game_sdk.dll.lib</AdditionalDependencies>
</Link>
<ClCompile>
<LanguageStandard>stdcpp20</LanguageStandard>
<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalIncludeDirectories>C:\Users\sigon\source\repos\AdventuresInLestoria\Adventures in Lestoria\discord-files;</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>

@ -39,7 +39,9 @@ All rights reserved.
#include "olcUTIL_DataFile.h"
#include "ItemEnchant.h"
#include "DEFINES.h"
#include "Class.h"
#include <unordered_set>
#include <algorithm>
INCLUDE_DATA
@ -47,6 +49,9 @@ std::unordered_map<std::string,ItemEnchantInfo>ItemEnchantInfo::ENCHANT_LIST;
std::unordered_map<ItemEnchantInfo::ItemEnchantCategory,ItemEnchantInfo::ItemEnchantCategoryData>ItemEnchantInfo::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_map<std::string,AbilitySlot>affectSlots{
{"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)){}
: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));
}

@ -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::pair<LowestNumber,HighestNumber>weightedRollRange;
Pixel displayCol;
};
ItemEnchantCategory category;
std::string name;
std::string description;
std::optional<AbilitySlot>abilitySlot;
@ -84,4 +89,4 @@ public:
ItemEnchant(const std::string_view enchantName);
private:
const ItemEnchantInfo&enchant;
};
};

@ -51,6 +51,7 @@ Community: https://community.onelonecoder.com
#include "Pixel.h"
#include <utility>
#include <algorithm>
#include <format>
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)); }

@ -49,6 +49,7 @@ Community: https://community.onelonecoder.com
#pragma endregion
#pragma once
#include <cstdint>
#include <string>
// 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);

@ -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;
});
};

@ -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

@ -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
}
}
}
Loading…
Cancel
Save