diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-03-21 19:37:01 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-03-21 19:37:01 +0300 |
commit | 8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f (patch) | |
tree | cac057743c1b48db050dbfdad37809afa728b054 /src/being/actorsprite.cpp | |
parent | 542d2ba78d84e0fa051e0620ccab5fb3a0c711e3 (diff) | |
download | manaplus-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.cpp | 80 |
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) |