mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
77e7a25ed7
Fixed issue where cursed ground obstacles were appearing on holy ground (and vice versa). Fixed battle interface blocking itself up after clicking on owned stack to open creature window.
259 lines
6.9 KiB
C++
259 lines
6.9 KiB
C++
#pragma once
|
|
|
|
/*
|
|
* GameConstants.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
|
|
*
|
|
*/
|
|
|
|
namespace GameConstants
|
|
{
|
|
const std::string VCMI_VERSION = "VCMI 0.88b";
|
|
|
|
/*
|
|
* DATA_DIR contains the game data (Data/, MP3/, ...).
|
|
* BIN_DIR is where the vcmiclient/vcmiserver binaries reside
|
|
* LIB_DIR is where the AI libraries reside (linux only)
|
|
*/
|
|
#ifdef _WIN32
|
|
const std::string DATA_DIR = ".";
|
|
const std::string BIN_DIR = ".";
|
|
const std::string LIB_DIR = ".";
|
|
const std::string SERVER_NAME = "VCMI_server.exe";
|
|
const std::string LIB_EXT = "dll";
|
|
const std::string PATH_SEPARATOR = "\\";
|
|
#else
|
|
#ifndef M_DATA_DIR
|
|
#error M_DATA_DIR undefined.
|
|
#else
|
|
const std::string DATA_DIR = M_DATA_DIR;
|
|
#endif
|
|
#ifndef M_BIN_DIR
|
|
#error M_BIN_DIR undefined.
|
|
#else
|
|
const std::string BIN_DIR = M_BIN_DIR;
|
|
#endif
|
|
#ifndef M_LIB_DIR
|
|
#error M_LIB_DIR undefined.
|
|
#else
|
|
const std::string LIB_DIR = M_LIB_DIR;
|
|
#endif
|
|
const std::string SERVER_NAME = "vcmiserver";
|
|
const std::string LIB_EXT = "so";
|
|
const std::string PATH_SEPARATOR = "/";
|
|
#endif
|
|
|
|
const int BFIELD_WIDTH = 17;
|
|
const int BFIELD_HEIGHT = 11;
|
|
const int BFIELD_SIZE = BFIELD_WIDTH * BFIELD_HEIGHT;
|
|
|
|
const int ARMY_SIZE = 7;
|
|
|
|
const int BOATI_TYPE = 8;
|
|
const int HEROI_TYPE = 34;
|
|
const int TOWNI_TYPE = 98;
|
|
const int SUBTERRANEAN_GATE_TYPE = 103;
|
|
const int CREI_TYPE = 54;
|
|
const int EVENTI_TYPE = 26;
|
|
|
|
const int CREATURES_COUNT = 197;
|
|
const int CRE_LEVELS = 10;
|
|
const int F_NUMBER = 9; //factions (town types) quantity
|
|
const int PLAYER_LIMIT = 8; //player limit per map
|
|
const int MAX_HEROES_PER_PLAYER = 8;
|
|
const int ALL_PLAYERS = 255; //bitfield
|
|
const int HEROES_PER_TYPE=8; //amount of heroes of each type
|
|
const int SKILL_QUANTITY=28;
|
|
const int SKILL_PER_HERO=8;
|
|
const int ARTIFACTS_QUANTITY=171;
|
|
const int HEROES_QUANTITY=156;
|
|
const int SPELLS_QUANTITY=70;
|
|
const int RESOURCE_QUANTITY=8;
|
|
const int TERRAIN_TYPES=10;
|
|
const int PRIMARY_SKILLS=4;
|
|
const int NEUTRAL_PLAYER=255;
|
|
const int NAMES_PER_TOWN=16;
|
|
const int CREATURES_PER_TOWN = 7; //without upgrades
|
|
const int MAX_BUILDING_PER_TURN = 1;
|
|
const int SPELL_LEVELS = 5;
|
|
const int CREEP_SIZE = 4000; // neutral stacks won't grow beyond this number
|
|
const int WEEKLY_GROWTH = 10; //percent
|
|
const int AVAILABLE_HEROES_PER_PLAYER = 2;
|
|
const bool DWELLINGS_ACCUMULATE_CREATURES = false;
|
|
const int SPELLBOOK_GOLD_COST = 500;
|
|
|
|
const ui16 BACKPACK_START = 19;
|
|
const int ID_CATAPULT = 3, ID_LOCK = 145;
|
|
|
|
//game modules
|
|
const bool STACK_EXP = true;
|
|
const bool STACK_ARTIFACT = true; //now toggle for testing
|
|
const bool COMMANDERS = true;
|
|
const bool MITHRIL = false;
|
|
}
|
|
|
|
// Enum declarations
|
|
namespace PrimarySkill
|
|
{
|
|
enum { ATTACK, DEFENSE, SPELL_POWER, KNOWLEDGE};
|
|
}
|
|
|
|
namespace EVictoryConditionType
|
|
{
|
|
enum EVictoryConditionType { ARTIFACT, GATHERTROOP, GATHERRESOURCE, BUILDCITY, BUILDGRAIL, BEATHERO,
|
|
CAPTURECITY, BEATMONSTER, TAKEDWELLINGS, TAKEMINES, TRANSPORTITEM, WINSTANDARD = 255 };
|
|
}
|
|
|
|
namespace ELossConditionType
|
|
{
|
|
enum ELossConditionType { LOSSCASTLE, LOSSHERO, TIMEEXPIRES, LOSSSTANDARD = 255 };
|
|
}
|
|
|
|
namespace EAlignment
|
|
{
|
|
enum EAlignment { GOOD, EVIL, NEUTRAL };
|
|
}
|
|
|
|
namespace EBuilding
|
|
{
|
|
//Quite useful as long as most of building mechanics hardcoded
|
|
enum EBuilding
|
|
{
|
|
MAGES_GUILD_1, MAGES_GUILD_2, MAGES_GUILD_3, MAGES_GUILD_4, MAGES_GUILD_5,
|
|
TAVERN, SHIPYARD, FORT, CITADEL, CASTLE,
|
|
VILLAGE_HALL, TOWN_HALL, CITY_HALL, CAPITOL, MARKETPLACE,
|
|
RESOURCE_SILO, BLACKSMITH, SPECIAL_1, HORDE_1, HORDE_1_UPGR,
|
|
SHIP, SPECIAL_2, SPECIAL_3, SPECIAL_4, HORDE_2,
|
|
HORDE_2_UPGR, GRAIL, EXTRA_CITY_HALL, EXTRA_TOWN_HALL, EXTRA_CAPITOL,
|
|
DWELL_FIRST=30, DWELL_LAST=36, DWELL_UP_FIRST=37, DWELL_UP_LAST=43
|
|
};
|
|
}
|
|
|
|
namespace EBuildingState
|
|
{
|
|
enum EBuildingState
|
|
{
|
|
HAVE_CAPITAL, NO_WATER, FORBIDDEN, ADD_MAGES_GUILD, ALREADY_PRESENT, CANT_BUILD_TODAY,
|
|
NO_RESOURCES, ALLOWED, PREREQUIRES, BUILDING_ERROR
|
|
};
|
|
}
|
|
|
|
namespace ESpellCastProblem
|
|
{
|
|
enum ESpellCastProblem
|
|
{
|
|
OK, NO_HERO_TO_CAST_SPELL, ALREADY_CASTED_THIS_TURN, NO_SPELLBOOK, ANOTHER_ELEMENTAL_SUMMONED,
|
|
HERO_DOESNT_KNOW_SPELL, NOT_ENOUGH_MANA, ADVMAP_SPELL_INSTEAD_OF_BATTLE_SPELL,
|
|
SECOND_HEROS_SPELL_IMMUNITY, SPELL_LEVEL_LIMIT_EXCEEDED, NO_SPELLS_TO_DISPEL,
|
|
NO_APPROPRIATE_TARGET, STACK_IMMUNE_TO_SPELL, WRONG_SPELL_TARGET, ONGOING_TACTIC_PHASE
|
|
};
|
|
}
|
|
|
|
namespace ECastingMode
|
|
{
|
|
enum ECastingMode {HERO_CASTING, AFTER_ATTACK_CASTING, //also includes cast before attack
|
|
MAGIC_MIRROR, CREATURE_ACTIVE_CASTING, ENCHANTER_CASTING};
|
|
}
|
|
|
|
namespace EMarketMode
|
|
{
|
|
enum EMarketMode
|
|
{
|
|
RESOURCE_RESOURCE, RESOURCE_PLAYER, CREATURE_RESOURCE, RESOURCE_ARTIFACT,
|
|
ARTIFACT_RESOURCE, ARTIFACT_EXP, CREATURE_EXP, CREATURE_UNDEAD, RESOURCE_SKILL,
|
|
MARTKET_AFTER_LAST_PLACEHOLDER
|
|
};
|
|
}
|
|
|
|
namespace EBattleStackState
|
|
{
|
|
enum EBattleStackState{ALIVE = 180, SUMMONED, CLONED, HAD_MORALE, WAITING, MOVED, DEFENDING, FEAR,
|
|
DRAINED_MANA /*remember to drain mana only once per turn*/};
|
|
}
|
|
|
|
namespace ECommander
|
|
{
|
|
enum SecondarySkills {ATTACK, DEFENSE, HEALTH, DAMAGE, SPEED, SPELL_POWER, CASTS, RESISTANCE};
|
|
const int MAX_SKILL_LEVEL = 5;
|
|
}
|
|
|
|
namespace Obj
|
|
{
|
|
enum
|
|
{
|
|
BOAT = 8,
|
|
CREATURE_BANK = 16,
|
|
CREATURE_GENERATOR1 = 17,
|
|
CURSED_GROUND1 = 21,
|
|
DERELICT_SHIP = 24,
|
|
DRAGON_UTOPIA = 25,
|
|
GARRISON = 33,
|
|
LIBRARY_OF_ENLIGHTENMENT = 41,
|
|
MONOLITH1 = 43,
|
|
MONOLITH2 = 44,
|
|
MONOLITH3 = 45,
|
|
MAGIC_PLAINS1 = 46,
|
|
SCHOOL_OF_MAGIC = 47,
|
|
MINE = 53,
|
|
MONSTER = 54,
|
|
OBELISK = 57,
|
|
PYRAMID = 63,
|
|
CRYPT = 84,
|
|
SHIPWRECK = 85,
|
|
STABLES = 94,
|
|
TRADING_POST = 99,
|
|
TREE_OF_KNOWLEDGE = 102,
|
|
SUBTERRANEAN_GATE = 103,
|
|
UNIVERSITY = 104,
|
|
SCHOOL_OF_WAR = 107,
|
|
WHIRLPOOL = 111,
|
|
BORDER_GATE = 212,
|
|
GARRISON2 = 219,
|
|
CLOVER_FIELD = 222,
|
|
CURSED_GROUND2 = 223,
|
|
EVIL_FOG = 224,
|
|
FAVORABLE_WINDS = 225,
|
|
FIERY_FIELDS = 226,
|
|
HOLY_GROUNDS = 227,
|
|
LUCID_POOLS = 228,
|
|
MAGIC_CLOUDS = 229,
|
|
MAGIC_PLAINS2 = 230,
|
|
ROCKLANDS = 231,
|
|
};
|
|
}
|
|
|
|
//follows ERM BI (battle image) format
|
|
namespace BattlefieldBI
|
|
{
|
|
enum
|
|
{
|
|
NONE = -1,
|
|
COASTAL,
|
|
//Discrepency from ERM BI description - we have magic plains and cursed gronds swapped
|
|
MAGIC_PLAINS,
|
|
CURSED_GROUND,
|
|
//
|
|
HOLY_GROUND,
|
|
EVIL_FOG,
|
|
CLOVER_FIELD,
|
|
LUCID_POOLS,
|
|
FIERY_FIELDS,
|
|
ROCKLANDS,
|
|
MAGIC_CLOUDS,
|
|
};
|
|
}
|
|
|
|
// Typedef declarations
|
|
typedef si64 expType;
|
|
typedef ui32 TSpell;
|
|
typedef std::pair<ui32, ui32> TDmgRange;
|
|
typedef ui8 TBonusType;
|
|
typedef si32 TBonusSubtype;
|
|
typedef si32 TSlot;
|
|
typedef si32 TQuantity;
|
|
typedef ui32 TCreature; //creature id
|