aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/interface.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-02-17 21:47:01 -0500
committerPaul Gilbert2015-02-17 21:47:01 -0500
commit7b3c10b09c76c4a8cbd5dbfabb0ceeaeccbbce26 (patch)
treea2de490ac41dcea07ce7cb6c56f00cd2d8b46a30 /engines/xeen/interface.cpp
parentc045adae76e414a8e6b57e48a651ea6c29ed280a (diff)
downloadscummvm-rg350-7b3c10b09c76c4a8cbd5dbfabb0ceeaeccbbce26.tar.gz
scummvm-rg350-7b3c10b09c76c4a8cbd5dbfabb0ceeaeccbbce26.tar.bz2
scummvm-rg350-7b3c10b09c76c4a8cbd5dbfabb0ceeaeccbbce26.zip
XEEN: Implemented Cast Spell dialog
Diffstat (limited to 'engines/xeen/interface.cpp')
-rw-r--r--engines/xeen/interface.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp
index a8396288ee..3bd3ef12b6 100644
--- a/engines/xeen/interface.cpp
+++ b/engines/xeen/interface.cpp
@@ -31,6 +31,7 @@
#include "xeen/dialogs_query.h"
#include "xeen/dialogs_quests.h"
#include "xeen/dialogs_quick_ref.h"
+#include "xeen/dialogs_spells.h"
#include "xeen/resources.h"
#include "xeen/xeen.h"
@@ -267,6 +268,7 @@ void Interface::perform() {
Map &map = *_vm->_map;
Party &party = *_vm->_party;
Scripts &scripts = *_vm->_scripts;
+ Spells &spells = *_vm->_spells;
const Common::Rect waitBounds(8, 8, 224, 140);
events.updateGameCounter();
@@ -517,6 +519,14 @@ void Interface::perform() {
}
break;
+ case Common::KEYCODE_c: {
+ // Cast spell
+ int spellId = CastSpell::show(_vm, _vm->_mode);
+ if (spellId != -1)
+ spells.castSpell(spellId);
+ break;
+ }
+
case Common::KEYCODE_i:
// Show Info dialog
_vm->_moveMonsters = false;
@@ -585,8 +595,10 @@ void Interface::stepTime() {
}
void Interface::doStepCode() {
+ Combat &combat = *_vm->_combat;
Map &map = *_vm->_map;
Party &party = *_vm->_party;
+ Scripts &scripts = *_vm->_scripts;
int damage = 0;
party._stepped = true;
@@ -642,8 +654,11 @@ void Interface::doStepCode() {
_flipGround = !_flipGround;
draw3d(true);
- warning("TODO: apply damage");
+ int oldVal = scripts._v2;
+ scripts._v2 = 0;
+ combat.giveCharDamage(damage, combat._damageType, 0);
+ scripts._v2 = oldVal;
_flipGround = !_flipGround;
} else if (party._partyDead) {
draw3d(true);
@@ -1825,6 +1840,7 @@ void Interface::doCombat() {
Party &party = *_vm->_party;
Screen &screen = *_vm->_screen;
Scripts &scripts = *_vm->_scripts;
+ Spells &spells = *_vm->_spells;
SoundManager &sound = *_vm->_sound;
bool upDoorText = _upDoorText;
bool reloadMap = false;
@@ -1933,14 +1949,13 @@ void Interface::doCombat() {
nextChar();
break;
- case Common::KEYCODE_c:
- // Cast Spell
- if (combat.castSpell(false)) {
- nextChar();
- } else {
- highlightChar(combat._combatParty[combat._whosTurn]->_rosterId);
- }
+ case Common::KEYCODE_c: {
+ // Cast spell
+ int spellId = CastSpell::show(_vm, _vm->_mode);
+ if (spellId != -1)
+ spells.castSpell(spellId);
break;
+ }
case Common::KEYCODE_f:
// Quick Fight