summaryrefslogtreecommitdiff
path: root/src/being/actorsprite.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-03-21 19:37:01 +0300
committerAndrei Karas <akaras@inbox.ru>2016-03-21 19:37:01 +0300
commit8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f (patch)
treecac057743c1b48db050dbfdad37809afa728b054 /src/being/actorsprite.cpp
parent542d2ba78d84e0fa051e0620ccab5fb3a0c711e3 (diff)
downloadmanaplus-8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f.tar.gz
manaplus-8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f.tar.bz2
manaplus-8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f.tar.xz
manaplus-8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f.zip
Add support for using fields from status effects: option, opt1, opt2, opt3.
Diffstat (limited to 'src/being/actorsprite.cpp')
-rw-r--r--src/being/actorsprite.cpp80
1 files changed, 59 insertions, 21 deletions
diff --git a/src/being/actorsprite.cpp b/src/being/actorsprite.cpp
index 40b3ef992..df8f14fdf 100644
--- a/src/being/actorsprite.cpp
+++ b/src/being/actorsprite.cpp
@@ -22,6 +22,7 @@
#include "being/actorsprite.h"
#include "configuration.h"
+#include "settings.h"
#include "statuseffect.h"
#include "being/localplayer.h"
@@ -214,42 +215,79 @@ void ActorSprite::setStatusEffectBlock(const int offset,
}
}
+static void applyEffectByOption(ActorSprite *const actor,
+ const uint32_t option,
+ const OptionsMap& options)
+{
+ FOR_EACH (OptionsMapCIter, it, options)
+ {
+ const int opt = (*it).first;
+ const int id = (*it).second;
+ const Enable enable = (opt & option) != 0 ? Enable_true : Enable_false;
+ actor->setStatusEffect(id, enable);
+ }
+}
+
void ActorSprite::setStatusEffectOpitons(const uint32_t option,
const uint32_t opt1,
const uint32_t opt2,
const uint32_t opt3)
{
- uint32_t statusEffects = opt2;
- statusEffects |= option << 16;
-
- setStunMode(opt1);
- setStatusEffectBlock(0,
- CAST_U16((statusEffects >> 16) & 0xffffU));
- setStatusEffectBlock(16,
- CAST_U16(statusEffects & 0xffffU));
- setStatusEffectBlock(32,
- opt3);
+ if (settings.legacyEffects == false)
+ {
+ applyEffectByOption(this, option, StatusEffectDB::getOptionMap());
+ applyEffectByOption(this, opt1, StatusEffectDB::getOpt1Map());
+ applyEffectByOption(this, opt2, StatusEffectDB::getOpt2Map());
+ applyEffectByOption(this, opt3, StatusEffectDB::getOpt3Map());
+ }
+ else
+ {
+ uint32_t statusEffects = opt2;
+ statusEffects |= option << 16;
+ setStunMode(opt1);
+ setStatusEffectBlock(0,
+ CAST_U16((statusEffects >> 16) & 0xffffU));
+ setStatusEffectBlock(16,
+ CAST_U16(statusEffects & 0xffffU));
+ setStatusEffectBlock(32,
+ opt3);
+ }
}
void ActorSprite::setStatusEffectOpitons(const uint32_t option,
const uint32_t opt1,
const uint32_t opt2)
{
- uint32_t statusEffects = opt2;
- statusEffects |= option << 16;
-
- setStunMode(opt1);
- setStatusEffectBlock(0,
- CAST_U16((statusEffects >> 16) & 0xffffU));
- setStatusEffectBlock(16,
- CAST_U16(statusEffects & 0xffffU));
+ if (settings.legacyEffects == false)
+ {
+ applyEffectByOption(this, option, StatusEffectDB::getOptionMap());
+ applyEffectByOption(this, opt1, StatusEffectDB::getOpt1Map());
+ applyEffectByOption(this, opt2, StatusEffectDB::getOpt2Map());
+ }
+ else
+ {
+ uint32_t statusEffects = opt2;
+ statusEffects |= option << 16;
+ setStunMode(opt1);
+ setStatusEffectBlock(0,
+ CAST_U16((statusEffects >> 16) & 0xffffU));
+ setStatusEffectBlock(16,
+ CAST_U16(statusEffects & 0xffffU));
+ }
}
void ActorSprite::setStatusEffectOpiton0(const uint32_t option)
{
- const uint32_t statusEffects = option << 16;
- setStatusEffectBlock(0,
- CAST_U16((statusEffects >> 16) & 0xffff));
+ if (settings.legacyEffects == false)
+ {
+ applyEffectByOption(this, option, StatusEffectDB::getOptionMap());
+ }
+ else
+ {
+ const uint32_t statusEffects = option << 16;
+ setStatusEffectBlock(0,
+ CAST_U16((statusEffects >> 16) & 0xffff));
+ }
}
void ActorSprite::updateStunMode(const int oldMode, const int newMode)