aboutsummaryrefslogtreecommitdiff
path: root/engines/wage
diff options
context:
space:
mode:
authorEugene Sandulenko2016-01-25 19:36:35 +0100
committerEugene Sandulenko2016-02-14 17:12:53 +0100
commitadc5b87cb6e52f7fa22d8395020121249718e5e4 (patch)
treee4d7e97c197f8f8e3cab0cf2c098352b41852a25 /engines/wage
parentdf609fb468cef9e4cc4dca3112db596ba0b01190 (diff)
downloadscummvm-rg350-adc5b87cb6e52f7fa22d8395020121249718e5e4.tar.gz
scummvm-rg350-adc5b87cb6e52f7fa22d8395020121249718e5e4.tar.bz2
scummvm-rg350-adc5b87cb6e52f7fa22d8395020121249718e5e4.zip
WAGE: Implement performHealingMagic()
Diffstat (limited to 'engines/wage')
-rw-r--r--engines/wage/combat.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/engines/wage/combat.cpp b/engines/wage/combat.cpp
index 96cab1eca1..2f87119fe3 100644
--- a/engines/wage/combat.cpp
+++ b/engines/wage/combat.cpp
@@ -254,7 +254,42 @@ void WageEngine::performMagic(Chr *attacker, Chr *victim, Obj *magicalObject) {
}
void WageEngine::performHealingMagic(Chr *chr, Obj *magicalObject) {
- warning("STUB: performHealingMagic()");
+ char buf[512];
+
+ if (!chr->_playerCharacter) {
+ snprintf(buf, 512, "%s%s %ss %s%s.",
+ chr->getDefiniteArticle(true), chr->_name.c_str(),
+ magicalObject->_operativeVerb.c_str(),
+ getIndefiniteArticle(magicalObject->_name), magicalObject->_name.c_str());
+ appendText(buf);
+ }
+
+ int chance = _rnd->getRandomNumber(255);
+ if (chance < magicalObject->_accuracy) {
+ int type = magicalObject->_attackType;
+
+ if (type == Obj::HEALS_PHYSICAL_DAMAGE || type == Obj::HEALS_PHYSICAL_AND_SPIRITUAL_DAMAGE)
+ chr->_context._statVariables[PHYS_HIT_CUR] += magicalObject->_damage;
+
+ if (type == Obj::HEALS_SPIRITUAL_DAMAGE || type == Obj::HEALS_PHYSICAL_AND_SPIRITUAL_DAMAGE)
+ chr->_context._statVariables[SPIR_HIT_CUR] += magicalObject->_damage;
+
+ playSound(magicalObject->_sound);
+ appendText(magicalObject->_useMessage.c_str());
+
+ // TODO: what if enemy heals himself?
+ if (chr->_playerCharacter) {
+ double physicalPercent = (double)chr->_context._statVariables[PHYS_HIT_CUR] / chr->_context._statVariables[PHYS_HIT_BAS];
+ double spiritualPercent = (double)chr->_context._statVariables[SPIR_HIT_CUR] / chr->_context._statVariables[SPIR_HIT_BAS];
+ snprintf(buf, 256, "Your physical condition is %s.", getPercentMessage(physicalPercent));
+ appendText(buf);
+
+ snprintf(buf, 256, "Your spiritual condition is %s.", getPercentMessage(spiritualPercent));
+ appendText(buf);
+ }
+ }
+
+ decrementUses(magicalObject);
}
static const int directionsX[] = { 0, 0, 1, -1 };