1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00
vcmi/lib/HeroBonus.h
Michał W. Urbańczyk cff70406f1 * enter can be used to open window with selected hero/town
* fixed slider behavior when showing less maps/games than available slots
* added a few missing sounds for creatures
* fixed problems with artifacts info caused by bug in serialization
* fixed bug in Scholar's serializetion
* all stacks features will be serialized (should fix problems with missing premies from artifacts)
* proper serialization of HeroBonus, fixes some problems/crashes
* resource silos won't give resources on the first day
* fixed problems with removing artifacts when all visiblebackpack slots are full
2009-05-30 16:00:26 +00:00

89 lines
2.9 KiB
C++

#pragma once
#include "../global.h"
#include <string>
/*
* HeroBonus.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
struct DLL_EXPORT HeroBonus
{
enum BonusType
{
//handled
NONE,
MOVEMENT, //both water/land
LAND_MOVEMENT,
SEA_MOVEMENT,
MORALE,
LUCK,
MORALE_AND_LUCK,
PRIMARY_SKILL, //uses subtype to pick skill
SIGHT_RADIOUS,
MANA_REGENERATION, //points per turn apart from normal (1 + mysticism)
//not handled yet:
MAGIC_RESISTANCE, // %
SECONDARY_SKILL_PREMY, //%
SURRENDER_DISCOUNT, //%
STACKS_SPEED,
FLYING_MOVEMENT, SPELL_DURATION, AIR_SPELL_DMG_PREMY, EARTH_SPELL_DMG_PREMY, FIRE_SPELL_DMG_PREMY,
WATER_SPELL_DMG_PREMY, BLOCK_SPELLS_ABOVE_LEVEL, WATER_WALKING, NO_SHOTING_PENALTY, DISPEL_IMMUNITY,
NEGATE_ALL_NATURAL_IMMUNITIES, STACK_HEALTH, SPELL_IMMUNITY, BLOCK_MORALE, BLOCK_LUCK, FIRE_SPELLS,
AIR_SPELLS, WATER_SPELLS, EARTH_SPELLS,
GENERATE_RESOURCE, //daily value, uses subtype (resource type)
CREATURE_GROWTH, //for legion artifacts: value - week growth bonus, subtype - monster level
WHIRLPOOL_PROTECTION, //hero won't lose army when teleporting through whirlpool
SPELL, //hero knows spell, val - skill level (0 - 3), subtype - spell id
SPELLS_OF_LEVEL, //hero knows all spells of given level, val - skill level; subtype - level
ENEMY_CANT_ESCAPE //for shackles of war
};
enum BonusDuration{PERMANENT, ONE_BATTLE, ONE_DAY, ONE_WEEK};
enum BonusSource{ARTIFACT, OBJECT};
ui8 duration; //uses BonusDuration values
ui8 type; //uses BonusType values - says to what is this bonus
si32 subtype; //-1 if not applicable
ui8 source;//uses BonusSource values - what gave that bonus
si32 val;//for morale/luck [-3,+3], others any
ui32 id; //id of object/artifact
std::string description;
HeroBonus(ui8 Dur, ui8 Type, ui8 Src, si32 Val, ui32 ID, std::string Desc, si32 Subtype=-1)
:duration(Dur), type(Type), subtype(Subtype), source(Src), val(Val), id(ID), description(Desc)
{}
HeroBonus(ui8 Dur, ui8 Type, ui8 Src, si32 Val, ui32 ID, si32 Subtype=-1)
:duration(Dur), type(Type), subtype(Subtype), source(Src), val(Val), id(ID)
{}
HeroBonus()
{
subtype = -1;
}
template <typename Handler> void serialize(Handler &h, const int version)
{
h & duration & type & subtype & source & val & id & description;
}
static bool OneDay(const HeroBonus &hb)
{
return hb.duration==HeroBonus::ONE_DAY;
}
static bool OneWeek(const HeroBonus &hb)
{
return hb.duration==HeroBonus::ONE_WEEK;
}
static bool OneBattle(const HeroBonus &hb)
{
return hb.duration==HeroBonus::ONE_BATTLE;
}
static bool IsFrom(const HeroBonus &hb, ui8 source, ui32 id) //if id==0xffffff then id doesn't matter
{
return hb.source==source && (id==0xffffff || hb.id==id);
}
};