summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-11-14 18:02:03 +0300
committerAndrei Karas <akaras@inbox.ru>2015-11-14 18:02:03 +0300
commit4edbdf124303f0e7c229f43a5054755e112ff6b4 (patch)
tree54d355cb568b07108c08db0f712c072d60c1a7ce
parent15424641cca695650f4b56c37711c12c81cf2c32 (diff)
downloadmv-4edbdf124303f0e7c229f43a5054755e112ff6b4.tar.gz
mv-4edbdf124303f0e7c229f43a5054755e112ff6b4.tar.bz2
mv-4edbdf124303f0e7c229f43a5054755e112ff6b4.tar.xz
mv-4edbdf124303f0e7c229f43a5054755e112ff6b4.zip
Fix attack sprite actions. Add ride attack action.
-rw-r--r--src/being/being.cpp7
-rw-r--r--src/being/being.h8
-rw-r--r--src/resources/attack.h15
-rw-r--r--src/resources/beingcommon.cpp15
-rw-r--r--src/resources/beinginfo.cpp19
-rw-r--r--src/resources/beinginfo.h1
6 files changed, 50 insertions, 15 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp
index dd06c918d..5a4da79fc 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -1309,7 +1309,7 @@ std::string Being::getMoveAction() const
std::string Being::getWeaponAttackAction(const ItemInfo *const weapon) const
{
if (!weapon)
- return SpriteAction::ATTACK;
+ return getAttackAction();
if (mHorseId != 0)
return weapon->getRideAttackAction();
@@ -1327,8 +1327,10 @@ std::string Being::getWeaponAttackAction(const ItemInfo *const weapon) const
std::string Being::getAttackAction(const Attack *const attack1) const
{
if (!attack1)
- return SpriteAction::ATTACK;
+ return getAttackAction();
+ if (mHorseId != 0)
+ return attack1->mRideAction;
if (mMap)
{
const unsigned char mask = mMap->getBlockMask(mX, mY);
@@ -1356,6 +1358,7 @@ std::string Being::getAttackAction(const Attack *const attack1) const
return SpriteAction::action; \
}
+getSpriteAction(Attack, ATTACK)
getSpriteAction(Dead, DEAD)
getSpriteAction(Spawn, SPAWN)
getSpriteAction(Cast, CAST)
diff --git a/src/being/being.h b/src/being/being.h
index 9c9fd6ade..a31f39be5 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -607,9 +607,13 @@ class Being notfinal : public ActorSprite,
std::string getSpawnAction() const A_WARN_UNUSED;
- std::string getWeaponAttackAction(const ItemInfo *const weapon) const;
+ std::string getWeaponAttackAction(const ItemInfo *const weapon) const
+ A_WARN_UNUSED;
- std::string getAttackAction(const Attack *const attack) const;
+ std::string getAttackAction() const A_WARN_UNUSED;
+
+ std::string getAttackAction(const Attack *const attack) const
+ A_WARN_UNUSED;
/**
* Whether or not this player is a GM.
diff --git a/src/resources/attack.h b/src/resources/attack.h
index d904b40b5..578818db6 100644
--- a/src/resources/attack.h
+++ b/src/resources/attack.h
@@ -32,19 +32,26 @@ struct Attack final
std::string mAction;
std::string mSkyAction;
std::string mWaterAction;
+ std::string mRideAction;
int mEffectId;
int mHitEffectId;
int mCriticalHitEffectId;
int mMissEffectId;
std::string mMissileParticle;
- Attack(const std::string &action, const std::string &skyAction,
- const std::string &waterAction, const int effectId,
- const int hitEffectId, const int criticalHitEffectId,
- const int missEffectId, const std::string &missileParticle) :
+ Attack(const std::string &action,
+ const std::string &skyAction,
+ const std::string &waterAction,
+ const std::string &rideAction,
+ const int effectId,
+ const int hitEffectId,
+ const int criticalHitEffectId,
+ const int missEffectId,
+ const std::string &missileParticle) :
mAction(action),
mSkyAction(skyAction),
mWaterAction(waterAction),
+ mRideAction(rideAction),
mEffectId(effectId),
mHitEffectId(hitEffectId),
mCriticalHitEffectId(criticalHitEffectId),
diff --git a/src/resources/beingcommon.cpp b/src/resources/beingcommon.cpp
index 6c64a162d..3025e658c 100644
--- a/src/resources/beingcommon.cpp
+++ b/src/resources/beingcommon.cpp
@@ -188,13 +188,22 @@ bool BeingCommon::readObjectNodes(XmlNodePtrConst &spriteNode,
"skyaction", "skyattack");
const std::string waterSpriteAction = XML::getProperty(spriteNode,
"wateraction", "waterattack");
+ const std::string rideSpriteAction = XML::getProperty(spriteNode,
+ "rideaction", "rideattack");
const std::string missileParticle = XML::getProperty(spriteNode,
"missile-particle", "");
- currentInfo->addAttack(attackId, spriteAction, skySpriteAction,
- waterSpriteAction, effectId, hitEffectId,
- criticalHitEffectId, missEffectId, missileParticle);
+ currentInfo->addAttack(attackId,
+ spriteAction,
+ skySpriteAction,
+ waterSpriteAction,
+ rideSpriteAction,
+ effectId,
+ hitEffectId,
+ criticalHitEffectId,
+ missEffectId,
+ missileParticle);
return true;
}
else if (xmlNameEqual(spriteNode, "particlefx"))
diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp
index 79969e71e..b857335ba 100644
--- a/src/resources/beinginfo.cpp
+++ b/src/resources/beinginfo.cpp
@@ -41,8 +41,11 @@
BeingInfo *BeingInfo::unknown = nullptr;
Attack *BeingInfo::empty = new Attack(SpriteAction::ATTACK,
- SpriteAction::ATTACKSKY, SpriteAction::ATTACKWATER,
- -1, -1, -1, -1, std::string());
+ SpriteAction::ATTACKSKY,
+ SpriteAction::ATTACKWATER,
+ SpriteAction::ATTACKRIDE,
+ -1, -1, -1, -1,
+ std::string());
BeingInfo::BeingInfo() :
mDisplay(),
@@ -169,6 +172,7 @@ void BeingInfo::addAttack(const int id,
const std::string &action,
const std::string &skyAction,
const std::string &waterAction,
+ const std::string &rideAction,
const int effectId,
const int hitEffectId,
const int criticalHitEffectId,
@@ -176,8 +180,15 @@ void BeingInfo::addAttack(const int id,
const std::string &missileParticle)
{
delete mAttacks[id];
- mAttacks[id] = new Attack(action, skyAction, waterAction, effectId,
- hitEffectId, criticalHitEffectId, missEffectId, missileParticle);
+ mAttacks[id] = new Attack(action,
+ skyAction,
+ waterAction,
+ rideAction,
+ effectId,
+ hitEffectId,
+ criticalHitEffectId,
+ missEffectId,
+ missileParticle);
}
void BeingInfo::clear()
diff --git a/src/resources/beinginfo.h b/src/resources/beinginfo.h
index a4ee2a750..6a84723a3 100644
--- a/src/resources/beinginfo.h
+++ b/src/resources/beinginfo.h
@@ -102,6 +102,7 @@ class BeingInfo final
const std::string &action,
const std::string &skyAttack,
const std::string &waterAttack,
+ const std::string &rideAttack,
const int effectId,
const int hitEffectId,
const int criticalHitEffectId,