1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-27 22:49:25 +02:00

Merge pull request #5819 from Laserlicht/battle_anim

Using attack sprite
This commit is contained in:
Ivan Savenko
2025-06-30 11:56:54 +03:00
committed by GitHub
22 changed files with 365 additions and 5 deletions

View File

@@ -56,6 +56,9 @@ public:
/// returns true if specified object is the currently active hero /// returns true if specified object is the currently active hero
virtual bool isActiveHero(const CGObjectInstance* obj) const = 0; virtual bool isActiveHero(const CGObjectInstance* obj) const = 0;
/// Returns moveDir of hero that attacked this wandering monster, or -1 on failure
virtual int attackedMonsterDirection(const CGObjectInstance * wanderingMonster) const = 0;
virtual size_t objectGroupIndex(ObjectInstanceID objectID) const = 0; virtual size_t objectGroupIndex(ObjectInstanceID objectID) const = 0;
virtual Point objectImageOffset(ObjectInstanceID objectID, const int3 & coordinates) const = 0; virtual Point objectImageOffset(ObjectInstanceID objectID, const int3 & coordinates) const = 0;

View File

@@ -420,6 +420,19 @@ std::shared_ptr<CAnimation> MapRendererObjects::getAnimation(const AnimationPath
return ret; return ret;
} }
std::shared_ptr<IImage> MapRendererObjects::getImage(const ImagePath & filename) const
{
auto it = images.find(filename);
if(it != images.end())
return it->second;
auto ret = ENGINE->renderHandler().loadImage(filename, EImageBlitMode::SIMPLE);
images[filename] = ret;
return ret;
}
std::shared_ptr<CAnimation> MapRendererObjects::getFlagAnimation(const CGObjectInstance* obj) std::shared_ptr<CAnimation> MapRendererObjects::getFlagAnimation(const CGObjectInstance* obj)
{ {
//TODO: relocate to config file? //TODO: relocate to config file?
@@ -456,7 +469,7 @@ std::shared_ptr<CAnimation> MapRendererObjects::getOverlayAnimation(const CGObje
return nullptr; return nullptr;
} }
std::shared_ptr<IImage> MapRendererObjects::getImage(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr<CAnimation>& animation) const std::shared_ptr<IImage> MapRendererObjects::getImageToRender(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr<CAnimation>& animation) const
{ {
if(!animation) if(!animation)
return nullptr; return nullptr;
@@ -465,6 +478,17 @@ std::shared_ptr<IImage> MapRendererObjects::getImage(IMapRendererContext & conte
if(animation->size(groupIndex) == 0) if(animation->size(groupIndex) == 0)
return nullptr; return nullptr;
auto attackerPos = context.attackedMonsterDirection(obj);
if(attackerPos != -1)
{
const auto * creature = dynamic_cast<const CArmedInstance *>(obj);
auto const & creatureType = LIBRARY->creh->objects[creature->appearance->subid];
auto dir = std::vector<int>({1, 2, 7, 8});
ImagePath imgPath = std::count(dir.begin(), dir.end(), attackerPos) ? creatureType->mapAttackFromRight : creatureType->mapAttackFromLeft;
if(!imgPath.empty())
return getImage(imgPath);
}
size_t frameIndex = context.objectImageIndex(obj->id, animation->size(groupIndex)); size_t frameIndex = context.objectImageIndex(obj->id, animation->size(groupIndex));
@@ -502,9 +526,9 @@ void MapRendererObjects::renderImage(IMapRendererContext & context, Canvas & tar
void MapRendererObjects::renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * instance) void MapRendererObjects::renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * instance)
{ {
renderImage(context, target, coordinates, instance, getImage(context, instance, getBaseAnimation(instance))); renderImage(context, target, coordinates, instance, getImageToRender(context, instance, getBaseAnimation(instance)));
renderImage(context, target, coordinates, instance, getImage(context, instance, getFlagAnimation(instance))); renderImage(context, target, coordinates, instance, getImageToRender(context, instance, getFlagAnimation(instance)));
renderImage(context, target, coordinates, instance, getImage(context, instance, getOverlayAnimation(instance))); renderImage(context, target, coordinates, instance, getImageToRender(context, instance, getOverlayAnimation(instance)));
} }
void MapRendererObjects::renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates) void MapRendererObjects::renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates)

View File

@@ -73,14 +73,16 @@ public:
class MapRendererObjects class MapRendererObjects
{ {
std::map<AnimationPath, std::shared_ptr<CAnimation>> animations; std::map<AnimationPath, std::shared_ptr<CAnimation>> animations;
mutable std::map<ImagePath, std::shared_ptr<IImage>> images;
std::shared_ptr<CAnimation> getBaseAnimation(const CGObjectInstance * obj); std::shared_ptr<CAnimation> getBaseAnimation(const CGObjectInstance * obj);
std::shared_ptr<CAnimation> getFlagAnimation(const CGObjectInstance * obj); std::shared_ptr<CAnimation> getFlagAnimation(const CGObjectInstance * obj);
std::shared_ptr<CAnimation> getOverlayAnimation(const CGObjectInstance * obj); std::shared_ptr<CAnimation> getOverlayAnimation(const CGObjectInstance * obj);
std::shared_ptr<CAnimation> getAnimation(const AnimationPath & filename, bool generateMovementGroups, bool enableOverlay); std::shared_ptr<CAnimation> getAnimation(const AnimationPath & filename, bool generateMovementGroups, bool enableOverlay);
std::shared_ptr<IImage> getImage(const ImagePath & filename) const;
std::shared_ptr<IImage> getImage(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr<CAnimation> & animation) const; std::shared_ptr<IImage> getImageToRender(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr<CAnimation> & animation) const;
void renderImage(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * object, const std::shared_ptr<IImage> & image); void renderImage(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * object, const std::shared_ptr<IImage> & image);
void renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * obj); void renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * obj);

View File

@@ -25,6 +25,8 @@
#include "../../lib/spells/CSpellHandler.h" #include "../../lib/spells/CSpellHandler.h"
#include "../../lib/mapping/CMap.h" #include "../../lib/mapping/CMap.h"
#include "../../lib/pathfinder/CGPathNode.h" #include "../../lib/pathfinder/CGPathNode.h"
#include "../../lib/battle/CPlayerBattleCallback.h"
#include "../../lib/battle/IBattleState.h"
MapRendererBaseContext::MapRendererBaseContext(const MapRendererContextState & viewState) MapRendererBaseContext::MapRendererBaseContext(const MapRendererContextState & viewState)
: viewState(viewState) : viewState(viewState)
@@ -85,6 +87,18 @@ bool MapRendererBaseContext::isActiveHero(const CGObjectInstance * obj) const
return false; return false;
} }
int MapRendererBaseContext::attackedMonsterDirection(const CGObjectInstance * wanderingMonster) const
{
if(wanderingMonster->ID != Obj::MONSTER)
return -1;
for(auto & battle : GAME->interface()->cb->getActiveBattles())
if(wanderingMonster->pos == battle.second->getBattle()->getLocation())
return battle.second->getBattle()->getSideHero(BattleSide::ATTACKER)->moveDir;
return -1;
}
bool MapRendererBaseContext::tileAnimated(const int3 & coordinates) const bool MapRendererBaseContext::tileAnimated(const int3 & coordinates) const
{ {
return false; return false;

View File

@@ -36,6 +36,7 @@ public:
bool tileAnimated(const int3 & coordinates) const override; bool tileAnimated(const int3 & coordinates) const override;
bool isActiveHero(const CGObjectInstance* obj) const override; bool isActiveHero(const CGObjectInstance* obj) const override;
int attackedMonsterDirection(const CGObjectInstance * wanderingMonster) const override;
const TerrainTile & getMapTile(const int3 & coordinates) const override; const TerrainTile & getMapTile(const int3 & coordinates) const override;
const MapObjectsList & getObjects(const int3 & coordinates) const override; const MapObjectsList & getObjects(const int3 & coordinates) const override;

View File

@@ -354,6 +354,16 @@ std::shared_ptr<IImage> RenderHandler::loadImage(const AnimationPath & path, int
std::shared_ptr<IImage> RenderHandler::loadImage(const ImagePath & path, EImageBlitMode mode) std::shared_ptr<IImage> RenderHandler::loadImage(const ImagePath & path, EImageBlitMode mode)
{ {
auto name = path.getOriginalName();
std::vector<std::string> splitted;
boost::split(splitted, name, boost::is_any_of(":"));
if(splitted.size() == 3)
{
ImageLocator locator = getLocatorForAnimationFrame(AnimationPath::builtin(splitted[0]), std::stoi(splitted[2]), std::stoi(splitted[1]), 1, mode);
return loadImage(locator);
}
ImageLocator locator(path, mode); ImageLocator locator(path, mode);
return loadImage(locator); return loadImage(locator);
} }

View File

@@ -14,6 +14,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:0",
"mapAttackFromLeft": "AvWattak.def:0:1",
"animation": "CPKMAN.DEF" "animation": "CPKMAN.DEF"
}, },
"sound" : "sound" :
@@ -39,6 +41,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:2",
"mapAttackFromLeft": "AvWattak.def:0:3",
"animation": "CHALBD.DEF" "animation": "CHALBD.DEF"
}, },
"sound" : "sound" :
@@ -66,6 +70,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:4",
"mapAttackFromLeft": "AvWattak.def:0:5",
"animation": "CLCBOW.DEF", "animation": "CLCBOW.DEF",
"missile" : "missile" :
{ {
@@ -103,6 +109,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:6",
"mapAttackFromLeft": "AvWattak.def:0:7",
"animation": "CHCBOW.DEF", "animation": "CHCBOW.DEF",
"missile" : "missile" :
{ {
@@ -140,6 +148,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:8",
"mapAttackFromLeft": "AvWattak.def:0:9",
"animation": "CGRIFF.DEF" "animation": "CGRIFF.DEF"
}, },
"sound" : "sound" :
@@ -169,6 +179,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:10",
"mapAttackFromLeft": "AvWattak.def:0:11",
"animation": "CRGRIF.DEF" "animation": "CRGRIF.DEF"
}, },
"sound" : "sound" :
@@ -188,6 +200,8 @@
"upgrades": ["crusader"], "upgrades": ["crusader"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:12",
"mapAttackFromLeft": "AvWattak.def:0:13",
"animation": "CSWORD.DEF" "animation": "CSWORD.DEF"
}, },
"sound" : "sound" :
@@ -214,6 +228,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:14",
"mapAttackFromLeft": "AvWattak.def:0:15",
"animation": "CCRUSD.DEF" "animation": "CCRUSD.DEF"
}, },
"sound" : "sound" :
@@ -240,6 +256,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:16",
"mapAttackFromLeft": "AvWattak.def:0:17",
"animation": "CMONKK.DEF", "animation": "CMONKK.DEF",
"missile" : "missile" :
{ {
@@ -273,6 +291,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:18",
"mapAttackFromLeft": "AvWattak.def:0:19",
"animation": "CZEALT.DEF", "animation": "CZEALT.DEF",
"missile" : "missile" :
{ {
@@ -306,6 +326,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:20",
"mapAttackFromLeft": "AvWattak.def:0:21",
"animation": "CCAVLR.DEF" "animation": "CCAVLR.DEF"
}, },
"sound" : "sound" :
@@ -333,6 +355,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:22",
"mapAttackFromLeft": "AvWattak.def:0:23",
"animation": "CCHAMP.DEF" "animation": "CCHAMP.DEF"
}, },
"sound" : "sound" :
@@ -384,6 +408,8 @@
"upgrades": ["archangel"], "upgrades": ["archangel"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:24",
"mapAttackFromLeft": "AvWattak.def:0:25",
"animation": "CANGEL.DEF" "animation": "CANGEL.DEF"
}, },
"sound" : "sound" :
@@ -451,6 +477,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:26",
"mapAttackFromLeft": "AvWattak.def:0:27",
"animation": "CRANGL.DEF" "animation": "CRANGL.DEF"
}, },
"sound" : "sound" :

View File

@@ -15,6 +15,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:236",
"mapAttackFromLeft": "AvWattak.def:0:237",
"animation": "CPIXIE.DEF" "animation": "CPIXIE.DEF"
}, },
"sound" : "sound" :
@@ -44,6 +46,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:238",
"mapAttackFromLeft": "AvWattak.def:0:239",
"animation": "CSPRITE.DEF" "animation": "CSPRITE.DEF"
}, },
"sound" : "sound" :
@@ -111,6 +115,8 @@
"upgrades": ["stormElemental"], "upgrades": ["stormElemental"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:224",
"mapAttackFromLeft": "AvWattak.def:0:225",
"animation": "CAELEM.DEF" "animation": "CAELEM.DEF"
}, },
"sound" : "sound" :
@@ -196,6 +202,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:254",
"mapAttackFromLeft": "AvWattak.def:0:255",
"animation": "CSTORM.DEF", "animation": "CSTORM.DEF",
"missile" : "missile" :
{ {
@@ -285,6 +293,8 @@
"upgrades": ["iceElemental"], "upgrades": ["iceElemental"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:230",
"mapAttackFromLeft": "AvWattak.def:0:231",
"animation": "CWELEM.DEF" "animation": "CWELEM.DEF"
}, },
"sound" : "sound" :
@@ -388,6 +398,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:246",
"mapAttackFromLeft": "AvWattak.def:0:247",
"animation": "CICEE.DEF", "animation": "CICEE.DEF",
"missile" : "missile" :
{ {
@@ -452,6 +464,8 @@
"upgrades": ["energyElemental"], "upgrades": ["energyElemental"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:228",
"mapAttackFromLeft": "AvWattak.def:0:229",
"animation": "CFELEM.DEF" "animation": "CFELEM.DEF"
}, },
"sound" : "sound" :
@@ -530,6 +544,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:258",
"mapAttackFromLeft": "AvWattak.def:0:259",
"animation": "CNRG.DEF" "animation": "CNRG.DEF"
}, },
"sound" : "sound" :
@@ -593,6 +609,8 @@
"upgrades": ["magmaElemental"], "upgrades": ["magmaElemental"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:226",
"mapAttackFromLeft": "AvWattak.def:0:227",
"animation": "CEELEM.DEF" "animation": "CEELEM.DEF"
}, },
"sound" : "sound" :
@@ -671,6 +689,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:250",
"mapAttackFromLeft": "AvWattak.def:0:251",
"animation": "CSTONE.DEF" "animation": "CSTONE.DEF"
}, },
"sound" : "sound" :
@@ -710,6 +730,8 @@
"upgrades": ["magicElemental"], "upgrades": ["magicElemental"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:240",
"mapAttackFromLeft": "AvWattak.def:0:241",
"animation": "CPSYEL.DEF" "animation": "CPSYEL.DEF"
}, },
"sound" : "sound" :
@@ -749,6 +771,8 @@
"doubleWide" : false, "doubleWide" : false,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:242",
"mapAttackFromLeft": "AvWattak.def:0:243",
"animation": "CMAGEL.DEF" "animation": "CMAGEL.DEF"
}, },
"sound" : "sound" :
@@ -790,6 +814,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:260",
"mapAttackFromLeft": "AvWattak.def:0:261",
"animation": "CFBIRD.DEF" "animation": "CFBIRD.DEF"
}, },
"sound" : "sound" :
@@ -840,6 +866,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:262",
"mapAttackFromLeft": "AvWattak.def:0:263",
"animation": "CPHX.DEF" "animation": "CPHX.DEF"
}, },
"sound" : "sound" :

View File

@@ -21,6 +21,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:140",
"mapAttackFromLeft": "AvWattak.def:0:141",
"animation": "CTROGL.DEF" "animation": "CTROGL.DEF"
}, },
"sound" : "sound" :
@@ -52,6 +54,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:142",
"mapAttackFromLeft": "AvWattak.def:0:143",
"animation": "CITROG.DEF" "animation": "CITROG.DEF"
}, },
"sound" : "sound" :
@@ -83,6 +87,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:144",
"mapAttackFromLeft": "AvWattak.def:0:145",
"animation": "CHARPY.DEF" "animation": "CHARPY.DEF"
}, },
"sound" : "sound" :
@@ -116,6 +122,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:146",
"mapAttackFromLeft": "AvWattak.def:0:147",
"animation": "CHARPH.DEF" "animation": "CHARPH.DEF"
}, },
"sound" : "sound" :
@@ -148,6 +156,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:148",
"mapAttackFromLeft": "AvWattak.def:0:149",
"animation": "CBEHOL.DEF", "animation": "CBEHOL.DEF",
"missile" : "missile" :
{ {
@@ -190,6 +200,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:150",
"mapAttackFromLeft": "AvWattak.def:0:151",
"animation": "CEVEYE.DEF", "animation": "CEVEYE.DEF",
"missile" : "missile" :
{ {
@@ -241,6 +253,8 @@
"upgrades": ["medusaQueen"], "upgrades": ["medusaQueen"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:152",
"mapAttackFromLeft": "AvWattak.def:0:153",
"animation": "CMEDUS.DEF", "animation": "CMEDUS.DEF",
"missile" : "missile" :
{ {
@@ -284,6 +298,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:154",
"mapAttackFromLeft": "AvWattak.def:0:155",
"animation": "CMEDUQ.DEF", "animation": "CMEDUQ.DEF",
"missile" : "missile" :
{ {
@@ -317,6 +333,8 @@
"upgrades": ["minotaurKing"], "upgrades": ["minotaurKing"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:156",
"mapAttackFromLeft": "AvWattak.def:0:157",
"animation": "CMINOT.DEF" "animation": "CMINOT.DEF"
}, },
"sound" : "sound" :
@@ -344,6 +362,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:158",
"mapAttackFromLeft": "AvWattak.def:0:159",
"animation": "CMINOK.DEF" "animation": "CMINOK.DEF"
}, },
"sound" : "sound" :
@@ -372,6 +392,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:160",
"mapAttackFromLeft": "AvWattak.def:0:161",
"animation": "CMCORE.DEF" "animation": "CMCORE.DEF"
}, },
"sound" : "sound" :
@@ -405,6 +427,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:162",
"mapAttackFromLeft": "AvWattak.def:0:163",
"animation": "CCMCOR.DEF" "animation": "CCMCOR.DEF"
}, },
"sound" : "sound" :
@@ -456,6 +480,8 @@
"upgrades": ["blackDragon"], "upgrades": ["blackDragon"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:164",
"mapAttackFromLeft": "AvWattak.def:0:165",
"animation": "CRDRGN.DEF" "animation": "CRDRGN.DEF"
}, },
"sound" : "sound" :
@@ -511,6 +537,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:166",
"mapAttackFromLeft": "AvWattak.def:0:167",
"animation": "CBDRGN.DEF" "animation": "CBDRGN.DEF"
}, },
"sound" : "sound" :

View File

@@ -7,6 +7,8 @@
"upgrades": ["gnollMarauder"], "upgrades": ["gnollMarauder"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:196",
"mapAttackFromLeft": "AvWattak.def:0:197",
"animation": "CGNOLL.DEF" "animation": "CGNOLL.DEF"
}, },
"sound" : "sound" :
@@ -25,6 +27,8 @@
"faction": "fortress", "faction": "fortress",
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:198",
"mapAttackFromLeft": "AvWattak.def:0:199",
"animation": "CGNOLM.DEF" "animation": "CGNOLM.DEF"
}, },
"sound" : "sound" :
@@ -54,6 +58,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:200",
"mapAttackFromLeft": "AvWattak.def:0:201",
"animation": "CPLIZA.DEF", "animation": "CPLIZA.DEF",
"missile" : "missile" :
{ {
@@ -85,6 +91,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:202",
"mapAttackFromLeft": "AvWattak.def:0:203",
"animation": "CALIZA.DEF", "animation": "CALIZA.DEF",
"missile" : "missile" :
{ {
@@ -124,6 +132,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:208",
"mapAttackFromLeft": "AvWattak.def:0:209",
"animation": "CDRFLY.DEF" "animation": "CDRFLY.DEF"
}, },
"sound" : "sound" :
@@ -161,6 +171,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:210",
"mapAttackFromLeft": "AvWattak.def:0:211",
"animation": "CDRFIR.DEF" "animation": "CDRFIR.DEF"
}, },
"sound" : "sound" :
@@ -191,6 +203,8 @@
"upgrades": ["greaterBasilisk"], "upgrades": ["greaterBasilisk"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:212",
"mapAttackFromLeft": "AvWattak.def:0:213",
"animation": "CBASIL.DEF" "animation": "CBASIL.DEF"
}, },
"sound" : "sound" :
@@ -219,6 +233,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:214",
"mapAttackFromLeft": "AvWattak.def:0:215",
"animation": "CGBASI.DEF" "animation": "CGBASI.DEF"
}, },
"sound" : "sound" :
@@ -239,6 +255,8 @@
"doubleWide" : true, "doubleWide" : true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:204",
"mapAttackFromLeft": "AvWattak.def:0:205",
"animation": "CCGORG.DEF" "animation": "CCGORG.DEF"
}, },
"sound" : "sound" :
@@ -267,6 +285,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:206",
"mapAttackFromLeft": "AvWattak.def:0:207",
"animation": "CBGOG.DEF" "animation": "CBGOG.DEF"
}, },
"sound" : "sound" :
@@ -294,6 +314,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:216",
"mapAttackFromLeft": "AvWattak.def:0:217",
"animation": "CWYVER.DEF" "animation": "CWYVER.DEF"
}, },
"sound" : "sound" :
@@ -326,6 +348,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:218",
"mapAttackFromLeft": "AvWattak.def:0:219",
"animation": "CWYVMN.DEF" "animation": "CWYVMN.DEF"
}, },
"sound" : "sound" :
@@ -367,6 +391,8 @@
"upgrades": ["chaosHydra"], "upgrades": ["chaosHydra"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:220",
"mapAttackFromLeft": "AvWattak.def:0:221",
"animation": "CHYDRA.DEF" "animation": "CHYDRA.DEF"
}, },
"sound" : "sound" :
@@ -407,6 +433,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:222",
"mapAttackFromLeft": "AvWattak.def:0:223",
"animation": "CCHYDR.DEF" "animation": "CCHYDR.DEF"
}, },
"sound" : "sound" :

View File

@@ -7,6 +7,8 @@
"upgrades": ["familiar"], "upgrades": ["familiar"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:84",
"mapAttackFromLeft": "AvWattak.def:0:85",
"animation": "CIMP.DEF" "animation": "CIMP.DEF"
}, },
"sound" : "sound" :
@@ -33,6 +35,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:86",
"mapAttackFromLeft": "AvWattak.def:0:87",
"animation": "CFAMIL.DEF" "animation": "CFAMIL.DEF"
}, },
"sound" : "sound" :
@@ -61,6 +65,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:88",
"mapAttackFromLeft": "AvWattak.def:0:89",
"animation": "CGOG.DEF", "animation": "CGOG.DEF",
"missile" : "missile" :
{ {
@@ -97,6 +103,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:90",
"mapAttackFromLeft": "AvWattak.def:0:91",
"animation": "CMAGOG.DEF", "animation": "CMAGOG.DEF",
"missile" : "missile" :
{ {
@@ -122,6 +130,8 @@
"doubleWide" : true, "doubleWide" : true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:92",
"mapAttackFromLeft": "AvWattak.def:0:93",
"animation": "CHHOUN.DEF" "animation": "CHHOUN.DEF"
}, },
"sound" : "sound" :
@@ -152,6 +162,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:94",
"mapAttackFromLeft": "AvWattak.def:0:95",
"animation": "CCERBU.DEF" "animation": "CCERBU.DEF"
}, },
"sound" : "sound" :
@@ -171,6 +183,8 @@
"upgrades": ["hornedDemon"], "upgrades": ["hornedDemon"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:96",
"mapAttackFromLeft": "AvWattak.def:0:97",
"animation": "COHDEM.DEF" "animation": "COHDEM.DEF"
}, },
"sound" : "sound" :
@@ -189,6 +203,8 @@
"faction": "inferno", "faction": "inferno",
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:98",
"mapAttackFromLeft": "AvWattak.def:0:99",
"animation": "CTHDEM.DEF" "animation": "CTHDEM.DEF"
}, },
"sound" : "sound" :
@@ -208,6 +224,8 @@
"upgrades": ["pitLord"], "upgrades": ["pitLord"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:100",
"mapAttackFromLeft": "AvWattak.def:0:101",
"animation": "CPFIEN.DEF" "animation": "CPFIEN.DEF"
}, },
"sound" : "sound" :
@@ -246,6 +264,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:102",
"mapAttackFromLeft": "AvWattak.def:0:103",
"animation": "CPFOE.DEF" "animation": "CPFOE.DEF"
}, },
"sound" : "sound" :
@@ -289,6 +309,8 @@
"upgrades": ["efreetSultan"], "upgrades": ["efreetSultan"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:104",
"mapAttackFromLeft": "AvWattak.def:0:105",
"animation": "CEFREE.DEF" "animation": "CEFREE.DEF"
}, },
"sound" : "sound" :
@@ -336,6 +358,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:106",
"mapAttackFromLeft": "AvWattak.def:0:107",
"animation": "CEFRES.DEF" "animation": "CEFRES.DEF"
}, },
"sound" : "sound" :
@@ -396,6 +420,8 @@
"upgrades": ["archDevil"], "upgrades": ["archDevil"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:108",
"mapAttackFromLeft": "AvWattak.def:0:109",
"animation": "CDEVIL.DEF" "animation": "CDEVIL.DEF"
}, },
"sound" : "sound" :
@@ -456,6 +482,8 @@
"graphics" : "graphics" :
{ {
"missile" : null, "missile" : null,
"mapAttackFromRight": "AvWattak.def:0:110",
"mapAttackFromLeft": "AvWattak.def:0:111",
"animation": "CADEVL.DEF" "animation": "CADEVL.DEF"
}, },
"sound" : "sound" :

View File

@@ -14,6 +14,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:112",
"mapAttackFromLeft": "AvWattak.def:0:113",
"animation": "CSKELE.DEF" "animation": "CSKELE.DEF"
}, },
"sound" : "sound" :
@@ -39,6 +41,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:114",
"mapAttackFromLeft": "AvWattak.def:0:115",
"animation": "CWSKEL.DEF" "animation": "CWSKEL.DEF"
}, },
"sound" : "sound" :
@@ -66,6 +70,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:116",
"mapAttackFromLeft": "AvWattak.def:0:117",
"animation": "CZOMBI.DEF" "animation": "CZOMBI.DEF"
}, },
"sound" : "sound" :
@@ -84,6 +90,8 @@
"faction": "necropolis", "faction": "necropolis",
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:118",
"mapAttackFromLeft": "AvWattak.def:0:119",
"animation": "CZOMLO.DEF" "animation": "CZOMLO.DEF"
}, },
"sound" : "sound" :
@@ -133,6 +141,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:120",
"mapAttackFromLeft": "AvWattak.def:0:121",
"animation": "CWIGHT.DEF" "animation": "CWIGHT.DEF"
}, },
"sound" : "sound" :
@@ -172,6 +182,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:122",
"mapAttackFromLeft": "AvWattak.def:0:123",
"animation": "CWRAIT.DEF" "animation": "CWRAIT.DEF"
}, },
"sound" : "sound" :
@@ -206,6 +218,8 @@
"upgrades": ["vampireLord"], "upgrades": ["vampireLord"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:124",
"mapAttackFromLeft": "AvWattak.def:0:125",
"animation": "CVAMP.DEF" "animation": "CVAMP.DEF"
}, },
"sound" : "sound" :
@@ -246,6 +260,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:126",
"mapAttackFromLeft": "AvWattak.def:0:127",
"animation": "CNOSFE.DEF" "animation": "CNOSFE.DEF"
}, },
"sound" : "sound" :
@@ -285,6 +301,8 @@
"upgrades": ["powerLich"], "upgrades": ["powerLich"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:128",
"mapAttackFromLeft": "AvWattak.def:0:129",
"animation": "CLICH.DEF", "animation": "CLICH.DEF",
"missile" : "missile" :
{ {
@@ -325,6 +343,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:130",
"mapAttackFromLeft": "AvWattak.def:0:131",
"animation": "CPLICH.DEF", "animation": "CPLICH.DEF",
"missile" : "missile" :
{ {
@@ -363,6 +383,8 @@
"upgrades": ["dreadKnight"], "upgrades": ["dreadKnight"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:132",
"mapAttackFromLeft": "AvWattak.def:0:133",
"animation": "CBKNIG.DEF" "animation": "CBKNIG.DEF"
}, },
"sound" : "sound" :
@@ -400,6 +422,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:134",
"mapAttackFromLeft": "AvWattak.def:0:135",
"animation": "CBLORD.DEF" "animation": "CBLORD.DEF"
}, },
"sound" : "sound" :
@@ -450,6 +474,8 @@
"upgrades": ["ghostDragon"], "upgrades": ["ghostDragon"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:136",
"mapAttackFromLeft": "AvWattak.def:0:137",
"animation": "CNDRGN.DEF" "animation": "CNDRGN.DEF"
}, },
"sound" : "sound" :
@@ -505,6 +531,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:138",
"mapAttackFromLeft": "AvWattak.def:0:139",
"animation": "CHDRGN.DEF" "animation": "CHDRGN.DEF"
}, },
"sound" : "sound" :

View File

@@ -20,6 +20,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:232",
"mapAttackFromLeft": "AvWattak.def:0:233",
"animation": "CGGOLE.DEF" "animation": "CGGOLE.DEF"
}, },
"sound" : "sound" :
@@ -51,6 +53,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:234",
"mapAttackFromLeft": "AvWattak.def:0:235",
"animation": "CDGOLE.DEF" "animation": "CDGOLE.DEF"
}, },
"sound" : "sound" :
@@ -124,6 +128,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:264",
"mapAttackFromLeft": "AvWattak.def:0:265",
"animation": "CADRGN.DEF" "animation": "CADRGN.DEF"
}, },
"sound" : "sound" :
@@ -170,6 +176,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:266",
"mapAttackFromLeft": "AvWattak.def:0:267",
"animation": "CCDRGN.DEF" "animation": "CCDRGN.DEF"
}, },
"sound" : "sound" :
@@ -282,6 +290,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:268",
"mapAttackFromLeft": "AvWattak.def:0:269",
"animation": "CFDRGN.DEF" "animation": "CFDRGN.DEF"
}, },
"sound" : "sound" :
@@ -340,6 +350,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:270",
"mapAttackFromLeft": "AvWattak.def:0:271",
"animation": "CRSDGN.DEF" "animation": "CRSDGN.DEF"
}, },
"sound" : "sound" :
@@ -423,6 +435,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:272",
"mapAttackFromLeft": "AvWattak.def:0:273",
"animation": "Cench.DEF", "animation": "Cench.DEF",
"missile" : "missile" :
{ {
@@ -464,6 +478,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:274",
"mapAttackFromLeft": "AvWattak.def:0:275",
"animation": "CSHARP.DEF", "animation": "CSHARP.DEF",
"missile" : "missile" :
{ {
@@ -501,6 +517,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:276",
"mapAttackFromLeft": "AvWattak.def:0:277",
"animation": "CHALF.DEF", "animation": "CHALF.DEF",
"missile" : "missile" :
{ {
@@ -524,6 +542,8 @@
"faction": "neutral", "faction": "neutral",
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:278",
"mapAttackFromLeft": "AvWattak.def:0:279",
"animation": "CPEAS.DEF" "animation": "CPEAS.DEF"
}, },
"sound" : "sound" :
@@ -543,6 +563,8 @@
"doubleWide" : true, "doubleWide" : true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:280",
"mapAttackFromLeft": "AvWattak.def:0:281",
"animation": "CBOAR.DEF" "animation": "CBOAR.DEF"
}, },
"sound" : "sound" :
@@ -574,6 +596,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:282",
"mapAttackFromLeft": "AvWattak.def:0:283",
"animation": "CMUMMY.DEF" "animation": "CMUMMY.DEF"
}, },
"sound" : "sound" :
@@ -602,6 +626,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:284",
"mapAttackFromLeft": "AvWattak.def:0:285",
"animation": "CNOMAD.DEF" "animation": "CNOMAD.DEF"
}, },
"sound" : "sound" :
@@ -647,6 +673,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:286",
"mapAttackFromLeft": "AvWattak.def:0:287",
"animation": "CROGUE.DEF" "animation": "CROGUE.DEF"
}, },
"sound" : "sound" :
@@ -673,6 +701,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:288",
"mapAttackFromLeft": "AvWattak.def:0:289",
"animation": "CTROLL.DEF" "animation": "CTROLL.DEF"
}, },
"sound" : "sound" :

View File

@@ -10,6 +10,8 @@
"graphics" : "graphics" :
{ {
"missile" : null, "missile" : null,
"mapAttackFromRight": "AvWattak.def:0:28",
"mapAttackFromLeft": "AvWattak.def:0:29",
"animation": "CCENTR.DEF" "animation": "CCENTR.DEF"
}, },
"sound" : "sound" :
@@ -31,6 +33,8 @@
"graphics" : "graphics" :
{ {
"missile" : null, "missile" : null,
"mapAttackFromRight": "AvWattak.def:0:30",
"mapAttackFromLeft": "AvWattak.def:0:31",
"animation": "CECENT.DEF" "animation": "CECENT.DEF"
}, },
"sound" : "sound" :
@@ -58,6 +62,8 @@
"upgrades": ["battleDwarf"], "upgrades": ["battleDwarf"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:32",
"mapAttackFromLeft": "AvWattak.def:0:33",
"animation": "CDWARF.DEF" "animation": "CDWARF.DEF"
}, },
"sound" : "sound" :
@@ -84,6 +90,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:34",
"mapAttackFromLeft": "AvWattak.def:0:35",
"animation": "CBDWAR.DEF" "animation": "CBDWAR.DEF"
}, },
"sound" : "sound" :
@@ -111,6 +119,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:36",
"mapAttackFromLeft": "AvWattak.def:0:37",
"animation": "CELF.DEF", "animation": "CELF.DEF",
"missile" : "missile" :
{ {
@@ -149,6 +159,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:38",
"mapAttackFromLeft": "AvWattak.def:0:39",
"animation": "CGRELF.DEF", "animation": "CGRELF.DEF",
"missile" : "missile" :
{ {
@@ -187,6 +199,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:40",
"mapAttackFromLeft": "AvWattak.def:0:41",
"animation": "CPEGAS.DEF" "animation": "CPEGAS.DEF"
}, },
"sound" : "sound" :
@@ -218,6 +232,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:42",
"mapAttackFromLeft": "AvWattak.def:0:43",
"animation": "CAPEGS.DEF" "animation": "CAPEGS.DEF"
}, },
"sound" : "sound" :
@@ -246,6 +262,8 @@
"upgrades": ["dendroidSoldier"], "upgrades": ["dendroidSoldier"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:44",
"mapAttackFromLeft": "AvWattak.def:0:45",
"animation": "CTREE.DEF" "animation": "CTREE.DEF"
}, },
"sound" : "sound" :
@@ -273,6 +291,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:46",
"mapAttackFromLeft": "AvWattak.def:0:47",
"animation": "CBTREE.DEF" "animation": "CBTREE.DEF"
}, },
"sound" : "sound" :
@@ -308,6 +328,8 @@
"upgrades": ["warUnicorn"], "upgrades": ["warUnicorn"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:48",
"mapAttackFromLeft": "AvWattak.def:0:49",
"animation": "CUNICO.DEF" "animation": "CUNICO.DEF"
}, },
"sound" : "sound" :
@@ -342,6 +364,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:50",
"mapAttackFromLeft": "AvWattak.def:0:51",
"animation": "CWUNIC.DEF" "animation": "CWUNIC.DEF"
}, },
"sound" : "sound" :
@@ -393,6 +417,8 @@
"upgrades": ["goldDragon"], "upgrades": ["goldDragon"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:52",
"mapAttackFromLeft": "AvWattak.def:0:53",
"animation": "CGDRAG.DEF" "animation": "CGDRAG.DEF"
}, },
"sound" : "sound" :
@@ -442,6 +468,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:54",
"mapAttackFromLeft": "AvWattak.def:0:55",
"animation": "CDDRAG.DEF" "animation": "CDDRAG.DEF"
}, },
"sound" : "sound" :

View File

@@ -8,6 +8,8 @@
"upgrades": ["hobgoblin"], "upgrades": ["hobgoblin"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:168",
"mapAttackFromLeft": "AvWattak.def:0:169",
"animation": "CGOBLI.DEF" "animation": "CGOBLI.DEF"
}, },
"sound" : "sound" :
@@ -27,6 +29,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:170",
"mapAttackFromLeft": "AvWattak.def:0:171",
"animation": "CHGOBL.DEF" "animation": "CHGOBL.DEF"
}, },
"sound" : "sound" :
@@ -48,6 +52,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:172",
"mapAttackFromLeft": "AvWattak.def:0:173",
"animation": "CBWLFR.DEF" "animation": "CBWLFR.DEF"
}, },
"sound" : "sound" :
@@ -75,6 +81,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:174",
"mapAttackFromLeft": "AvWattak.def:0:175",
"animation": "CUWLFR.DEF" "animation": "CUWLFR.DEF"
}, },
"sound" : "sound" :
@@ -102,6 +110,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:176",
"mapAttackFromLeft": "AvWattak.def:0:177",
"animation": "CORC.DEF", "animation": "CORC.DEF",
"missile" : "missile" :
{ {
@@ -133,6 +143,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:178",
"mapAttackFromLeft": "AvWattak.def:0:179",
"animation": "CORCCH.DEF", "animation": "CORCCH.DEF",
"missile" : "missile" :
{ {
@@ -157,6 +169,8 @@
"upgrades": ["ogreMage"], "upgrades": ["ogreMage"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:180",
"mapAttackFromLeft": "AvWattak.def:0:181",
"animation": "COGRE.DEF" "animation": "COGRE.DEF"
}, },
"sound" : "sound" :
@@ -194,6 +208,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:182",
"mapAttackFromLeft": "AvWattak.def:0:183",
"animation": "COGMAG.DEF" "animation": "COGMAG.DEF"
}, },
"sound" : "sound" :
@@ -222,6 +238,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:184",
"mapAttackFromLeft": "AvWattak.def:0:185",
"animation": "CROC.DEF" "animation": "CROC.DEF"
}, },
"sound" : "sound" :
@@ -260,6 +278,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:186",
"mapAttackFromLeft": "AvWattak.def:0:187",
"animation": "CTBIRD.DEF" "animation": "CTBIRD.DEF"
}, },
"sound" : "sound" :
@@ -292,6 +312,8 @@
"upgrades": ["cyclopKing"], "upgrades": ["cyclopKing"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:188",
"mapAttackFromLeft": "AvWattak.def:0:189",
"animation": "CCYCLR.DEF", "animation": "CCYCLR.DEF",
"missile" : "missile" :
{ {
@@ -335,6 +357,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:190",
"mapAttackFromLeft": "AvWattak.def:0:191",
"animation": "CCYCLLOR.DEF", "animation": "CCYCLLOR.DEF",
"missile" : "missile" :
{ {
@@ -373,6 +397,8 @@
"upgrades": ["ancientBehemoth"], "upgrades": ["ancientBehemoth"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:192",
"mapAttackFromLeft": "AvWattak.def:0:193",
"animation": "CYBEHE.DEF" "animation": "CYBEHE.DEF"
}, },
"sound" : "sound" :
@@ -405,6 +431,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:194",
"mapAttackFromLeft": "AvWattak.def:0:195",
"animation": "CABEHE.DEF" "animation": "CABEHE.DEF"
}, },
"sound" : "sound" :

View File

@@ -9,6 +9,8 @@
"hasDoubleWeek": true, "hasDoubleWeek": true,
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:56",
"mapAttackFromLeft": "AvWattak.def:0:57",
"animation": "CGREMA.DEF" "animation": "CGREMA.DEF"
}, },
"sound" : "sound" :
@@ -36,6 +38,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:58",
"mapAttackFromLeft": "AvWattak.def:0:59",
"animation": "CGREMM.DEF", "animation": "CGREMM.DEF",
"missile" : "missile" :
{ {
@@ -71,6 +75,8 @@
"upgrades": ["obsidianGargoyle"], "upgrades": ["obsidianGargoyle"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:60",
"mapAttackFromLeft": "AvWattak.def:0:61",
"animation": "CGARGO.DEF" "animation": "CGARGO.DEF"
}, },
"sound" : "sound" :
@@ -100,6 +106,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:62",
"mapAttackFromLeft": "AvWattak.def:0:63",
"animation": "COGARG.DEF" "animation": "COGARG.DEF"
}, },
"sound" : "sound" :
@@ -132,6 +140,8 @@
"upgrades": ["stoneGolem"], "upgrades": ["stoneGolem"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:64",
"mapAttackFromLeft": "AvWattak.def:0:65",
"animation": "CSGOLE.DEF" "animation": "CSGOLE.DEF"
}, },
"sound" : "sound" :
@@ -163,6 +173,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:66",
"mapAttackFromLeft": "AvWattak.def:0:67",
"animation": "CIGOLE.DEF" "animation": "CIGOLE.DEF"
}, },
"sound" : "sound" :
@@ -199,6 +211,8 @@
"upgrades": ["archMage"], "upgrades": ["archMage"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:68",
"mapAttackFromLeft": "AvWattak.def:0:69",
"animation": "CMAGE.DEF", "animation": "CMAGE.DEF",
"missile" : "missile" :
{ {
@@ -243,6 +257,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:70",
"mapAttackFromLeft": "AvWattak.def:0:71",
"animation": "CAMAGE.DEF", "animation": "CAMAGE.DEF",
"missile" : "missile" :
{ {
@@ -294,6 +310,8 @@
"upgrades": ["masterGenie"], "upgrades": ["masterGenie"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:72",
"mapAttackFromLeft": "AvWattak.def:0:73",
"animation": "CGENIE.DEF" "animation": "CGENIE.DEF"
}, },
"sound" : "sound" :
@@ -346,6 +364,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:74",
"mapAttackFromLeft": "AvWattak.def:0:75",
"animation": "CSULTA.DEF" "animation": "CSULTA.DEF"
}, },
"sound" : "sound" :
@@ -374,6 +394,8 @@
"upgrades": ["nagaQueen"], "upgrades": ["nagaQueen"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:76",
"mapAttackFromLeft": "AvWattak.def:0:77",
"animation": "CNAGA.DEF" "animation": "CNAGA.DEF"
}, },
"sound" : "sound" :
@@ -400,6 +422,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:78",
"mapAttackFromLeft": "AvWattak.def:0:79",
"animation": "CNAGAG.DEF" "animation": "CNAGAG.DEF"
}, },
"sound" : "sound" :
@@ -431,6 +455,8 @@
"upgrades": ["titan"], "upgrades": ["titan"],
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:80",
"mapAttackFromLeft": "AvWattak.def:0:81",
"animation": "CLTITA.DEF" "animation": "CLTITA.DEF"
}, },
"sound" : "sound" :
@@ -476,6 +502,8 @@
}, },
"graphics" : "graphics" :
{ {
"mapAttackFromRight": "AvWattak.def:0:82",
"mapAttackFromLeft": "AvWattak.def:0:83",
"animation": "CGTITA.DEF", "animation": "CGTITA.DEF",
"missile" : "missile" :
{ {

View File

@@ -153,6 +153,16 @@
"items" : { "type" : "string" }, "items" : { "type" : "string" },
"description" : "Object mask that describes on which tiles object is visible/blocked/activatable" "description" : "Object mask that describes on which tiles object is visible/blocked/activatable"
}, },
"mapAttackFromLeft" : {
"type" : "string",
"description" : "Adventure map creature image when attacked from left",
"format" : "imageFile"
},
"mapAttackFromRight" : {
"type" : "string",
"description" : "Adventure map creature image when attacked from right",
"format" : "imageFile"
},
"iconLarge" : { "iconLarge" : {
"type" : "string", "type" : "string",
"description" : "Large icon for this creature, used for example in town screen", "description" : "Large icon for this creature, used for example in town screen",

View File

@@ -128,6 +128,10 @@ In order to make functional creature you also need:
"iconSmall" : "", "iconSmall" : "",
// Large icon for this creature, used for example in town screen // Large icon for this creature, used for example in town screen
"iconLarge" : "", "iconLarge" : "",
// Optional. Images of creatures when attacked on adventure map
"mapAttackFromRight": "",
"mapAttackFromLeft": "",
// animation parameters // animation parameters

View File

@@ -902,6 +902,8 @@ void CCreatureHandler::loadJsonAnimation(CCreature * cre, const JsonNode & graph
void CCreatureHandler::loadCreatureJson(CCreature * creature, const JsonNode & config) const void CCreatureHandler::loadCreatureJson(CCreature * creature, const JsonNode & config) const
{ {
creature->animDefName = AnimationPath::fromJson(config["graphics"]["animation"]); creature->animDefName = AnimationPath::fromJson(config["graphics"]["animation"]);
creature->mapAttackFromLeft = ImagePath::fromJson(config["graphics"]["mapAttackFromLeft"]);
creature->mapAttackFromRight = ImagePath::fromJson(config["graphics"]["mapAttackFromRight"]);
for(const auto & ability : config["abilities"].Struct()) for(const auto & ability : config["abilities"].Struct())
{ {

View File

@@ -67,6 +67,8 @@ public:
std::set<CreatureID> upgrades; // IDs of creatures to which this creature can be upgraded std::set<CreatureID> upgrades; // IDs of creatures to which this creature can be upgraded
AnimationPath animDefName; // creature animation used during battles AnimationPath animDefName; // creature animation used during battles
ImagePath mapAttackFromLeft; // adventure map creature image when attacked from left
ImagePath mapAttackFromRight; // adventure map creature image when attacked from right
si32 iconIndex = -1; // index of icon in files like twcrport, used in tests now. si32 iconIndex = -1; // index of icon in files like twcrport, used in tests now.
/// names of files with appropriate icons. Used only during loading /// names of files with appropriate icons. Used only during loading

View File

@@ -79,6 +79,11 @@ void CBattleCallback::onBattleEnded(const BattleID & battleID)
activeBattles.erase(battleID); activeBattles.erase(battleID);
} }
std::map<BattleID, std::shared_ptr<CPlayerBattleCallback>> CBattleCallback::getActiveBattles()
{
return activeBattles;
}
void CBattleCallback::battleMakeSpellAction(const BattleID & battleID, const BattleAction & action) void CBattleCallback::battleMakeSpellAction(const BattleID & battleID, const BattleAction & action)
{ {
assert(action.actionType == EActionType::HERO_SPELL); assert(action.actionType == EActionType::HERO_SPELL);

View File

@@ -39,6 +39,7 @@ public:
void onBattleStarted(const IBattleInfo * info); void onBattleStarted(const IBattleInfo * info);
void onBattleEnded(const BattleID & battleID); void onBattleEnded(const BattleID & battleID);
std::map<BattleID, std::shared_ptr<CPlayerBattleCallback>> getActiveBattles();
}; };
VCMI_LIB_NAMESPACE_END VCMI_LIB_NAMESPACE_END