summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being/being.cpp2
-rw-r--r--src/resources/attack.h19
-rw-r--r--src/resources/beingcommon.cpp15
-rw-r--r--src/resources/beinginfo.cpp23
-rw-r--r--src/resources/beinginfo.h6
5 files changed, 52 insertions, 13 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp
index 9e3104c5f..030f022a2 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -958,7 +958,7 @@ void Being::handleAttack(Being *restrict const victim,
if (mType == ActorType::Player && (mEquippedWeapon != nullptr))
fireMissile(victim, mEquippedWeapon->getMissileParticleFile());
else if (mInfo->getAttack(attackId) != nullptr)
- fireMissile(victim, mInfo->getAttack(attackId)->mMissileParticle);
+ fireMissile(victim, mInfo->getAttack(attackId)->mMissile.particle);
reset();
mActionTime = tick_time;
diff --git a/src/resources/attack.h b/src/resources/attack.h
index d9881bf0d..90b3da9c3 100644
--- a/src/resources/attack.h
+++ b/src/resources/attack.h
@@ -23,9 +23,7 @@
#ifndef RESOURCES_ATTACK_H
#define RESOURCES_ATTACK_H
-#include <string>
-
-#include "localconsts.h"
+#include "resources/missileinfo.h"
struct Attack final
{
@@ -37,7 +35,7 @@ struct Attack final
int mHitEffectId;
int mCriticalHitEffectId;
int mMissEffectId;
- std::string mMissileParticle;
+ MissileInfo mMissile;
Attack(const std::string &action,
const std::string &skyAction,
@@ -47,7 +45,11 @@ struct Attack final
const int hitEffectId,
const int criticalHitEffectId,
const int missEffectId,
- const std::string &missileParticle) :
+ const std::string &missileParticle,
+ const float missileZ,
+ const float missileSpeed,
+ const float missileDieDistance,
+ const int missileLifeTime) :
mAction(action),
mSkyAction(skyAction),
mWaterAction(waterAction),
@@ -56,8 +58,13 @@ struct Attack final
mHitEffectId(hitEffectId),
mCriticalHitEffectId(criticalHitEffectId),
mMissEffectId(missEffectId),
- mMissileParticle(missileParticle)
+ mMissile()
{
+ mMissile.particle = missileParticle;
+ mMissile.z = missileZ;
+ mMissile.speed = missileSpeed;
+ mMissile.dieDistance = missileDieDistance;
+ mMissile.lifeTime = missileLifeTime;
}
A_DELETE_COPY(Attack)
diff --git a/src/resources/beingcommon.cpp b/src/resources/beingcommon.cpp
index 6d244960f..7e5fb9481 100644
--- a/src/resources/beingcommon.cpp
+++ b/src/resources/beingcommon.cpp
@@ -231,6 +231,15 @@ bool BeingCommon::readObjectNodes(XmlNodePtrConst &spriteNode,
const std::string missileParticle = XML::getProperty(spriteNode,
"missile-particle", "");
+ const float missileZ = static_cast<float>(XML::getFloatProperty(
+ spriteNode, "missile-z", 32.0f));
+ const int missileLifeTime = static_cast<float>(XML::getProperty(
+ spriteNode, "missile-lifetime", 3000));
+ const float missileSpeed = static_cast<float>(XML::getFloatProperty(
+ spriteNode, "missile-speed", 7.0f));
+ const float missileDieDistance = static_cast<float>(
+ XML::getFloatProperty(spriteNode, "missile-diedistance", 8.0f));
+
currentInfo->addAttack(attackId,
spriteAction,
skySpriteAction,
@@ -240,7 +249,11 @@ bool BeingCommon::readObjectNodes(XmlNodePtrConst &spriteNode,
hitEffectId,
criticalHitEffectId,
missEffectId,
- missileParticle);
+ missileParticle,
+ missileZ,
+ missileSpeed,
+ missileDieDistance,
+ missileLifeTime);
return true;
}
else if (xmlNameEqual(spriteNode, "particlefx"))
diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp
index 326d5fd9a..93d8a5d4b 100644
--- a/src/resources/beinginfo.cpp
+++ b/src/resources/beinginfo.cpp
@@ -47,8 +47,15 @@ Attack *BeingInfo::empty = new Attack(SpriteAction::ATTACK,
SpriteAction::ATTACKSKY,
SpriteAction::ATTACKWATER,
SpriteAction::ATTACKRIDE,
- -1, -1, -1, -1,
- std::string());
+ -1,
+ -1,
+ -1,
+ -1,
+ std::string(),
+ 32.0F,
+ 7.0F,
+ 8.0F,
+ 3000);
BeingInfo::BeingInfo() :
mDisplay(),
@@ -184,7 +191,11 @@ void BeingInfo::addAttack(const int id,
const int hitEffectId,
const int criticalHitEffectId,
const int missEffectId,
- const std::string &missileParticle)
+ const std::string &missileParticle,
+ const float missileZ,
+ const float missileSpeed,
+ const float missileDieDistance,
+ const int missileLifeTime)
{
delete mAttacks[id];
mAttacks[id] = new Attack(action,
@@ -195,7 +206,11 @@ void BeingInfo::addAttack(const int id,
hitEffectId,
criticalHitEffectId,
missEffectId,
- missileParticle);
+ missileParticle,
+ missileZ,
+ missileSpeed,
+ missileDieDistance,
+ missileLifeTime);
}
void BeingInfo::clear()
diff --git a/src/resources/beinginfo.h b/src/resources/beinginfo.h
index 7e016d580..bd60131c8 100644
--- a/src/resources/beinginfo.h
+++ b/src/resources/beinginfo.h
@@ -105,7 +105,11 @@ class BeingInfo final
const int hitEffectId,
const int criticalHitEffectId,
const int missEffectId,
- const std::string &missileParticle);
+ const std::string &missileParticle,
+ const float missileZ,
+ const float missileSpeed,
+ const float missileDieDistance,
+ const int missileLifeTime);
const Attack *getAttack(const int id) const A_WARN_UNUSED;