#ifndef BATTLE_H #define BATTLE_H #include "effect.h" #include "pixelGameEngine.h" using namespace olc; enum class BattleMoveName{ TESTMOVE1, TESTMOVE2, TESTMOVE3, BASH, BASH_CHANGE, DEFEND, HAILSTORM_A, HAILSTORM_B, HAILSTORM_G, HAILSTORM_O, HURRICANE_A, HURRICANE_B, HURRICANE_G, HURRICANE_O, METEORRAIN_A, METEORRAIN_B, METEORRAIN_G, METEORRAIN_O, PKFREEZE_A, PKFREEZE_B, PKFREEZE_G, PKFREEZE_O, PKSHIELD_A, PKSHIELD_B, PKSHIELD_O, PKSHIELD_S, PKLIFEUP_A, PKLIFEUP_B, PKLIFEUP_G, PKLIFEUP_O, PKFUN_A, PKFUN_B, PKFUN_G, PKFUN_O, PKFIRE_A, PKFIRE_B, PKFIRE_G, PKFIRE_O, }; enum class Resistance{ WET, DRY, COLD, HEAT, }; enum class Property{ PETRIFY, PARALYZE, DIAMONDIZE, CRYING, SLOW, MUSHROOMIZED, CONFUSE, POISON, REGEN, DEFENSE_UP, REVIVE, }; namespace Battle{ class Move{ public: std::string name; std::string desc; std::arraycomposition; int baseDmg; //The base damage of the attack. int randomDmg; //Additional random roll damage to add onto the base damage. bool pctDamage; //Uses % damage for the base damage instead of flat damage. std::vector> properties; //The int is used to determine the chance of something occurring. //Properties order is WET, DRY, COLD, HEAT int PPCost=0; int grade=0; //If the name of a move name match, then the grade helps sort it into the same category on menus. int range=1; //The range of this ability in tiles. int channelTime=0; //The amount of frames to channel the spell. bool friendly=false; //Target allies instead. Effect*eff=nullptr; std::wstring attackMsg; //Assumes friendly is false. Move(std::string name,std::string desc,int baseDmg,int randomDmg,int PPCost,int range,std::arraycomposition,std::wstring attackMsg = L"$USER uses $POWER",Effect*eff=nullptr,bool pctDamage=false,std::vector> properties={}) :Move(name,desc,0,baseDmg,randomDmg,PPCost,range,0,false,composition,attackMsg,eff,pctDamage,properties){}; Move(std::string name,std::string desc,int baseDmg,int randomDmg,int PPCost,int range,int channelTime,bool friendly,std::arraycomposition,std::wstring attackMsg = L"$USER uses $POWER",Effect*eff=nullptr,bool pctDamage=false,std::vector> properties={}) :Move(name,desc,0,baseDmg,randomDmg,PPCost,range,channelTime,friendly,composition,attackMsg,eff,pctDamage,properties){}; Move(std::string name,std::string desc,int grade,int baseDmg,int randomDmg,int PPCost,int range,int channelTime,bool friendly,std::arraycomposition,std::wstring attackMsg = L"$USER uses $POWER",Effect*eff=nullptr,bool pctDamage=false,std::vector> properties={}) :name(name),grade(grade),PPCost(PPCost),desc(desc),randomDmg(randomDmg),baseDmg(baseDmg),range(range),friendly(friendly),eff(eff),channelTime(channelTime),attackMsg(attackMsg),composition(composition),pctDamage(pctDamage),properties(properties){} }; } #endif