aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--audio/decoders/qdm2.cpp101
-rw-r--r--engines/xeen/combat.cpp19
-rw-r--r--engines/xeen/combat.h14
-rw-r--r--engines/xeen/interface.cpp1
-rw-r--r--engines/xeen/spells.cpp78
5 files changed, 110 insertions, 103 deletions
diff --git a/audio/decoders/qdm2.cpp b/audio/decoders/qdm2.cpp
index 4454fd08c9..ed1c014a34 100644
--- a/audio/decoders/qdm2.cpp
+++ b/audio/decoders/qdm2.cpp
@@ -213,9 +213,9 @@ private:
void fill_coding_method_array(sb_int8_array tone_level_idx, sb_int8_array tone_level_idx_temp,
sb_int8_array coding_method, int nb_channels,
int c, int superblocktype_2_3, int cm_table_select);
- void synthfilt_build_sb_samples(Common::BitStream32LELSB *gb, int length, int sb_min, int sb_max);
- void init_quantized_coeffs_elem0(int8 *quantized_coeffs, Common::BitStream32LELSB *gb, int length);
- void init_tone_level_dequantization(Common::BitStream32LELSB *gb, int length);
+ void synthfilt_build_sb_samples(Common::BitStreamMemory32LELSB *gb, int length, int sb_min, int sb_max);
+ void init_quantized_coeffs_elem0(int8 *quantized_coeffs, Common::BitStreamMemory32LELSB *gb, int length);
+ void init_tone_level_dequantization(Common::BitStreamMemory32LELSB *gb, int length);
void process_subpacket_9(QDM2SubPNode *node);
void process_subpacket_10(QDM2SubPNode *node, int length);
void process_subpacket_11(QDM2SubPNode *node, int length);
@@ -224,7 +224,7 @@ private:
void qdm2_decode_super_block(void);
void qdm2_fft_init_coefficient(int sub_packet, int offset, int duration,
int channel, int exp, int phase);
- void qdm2_fft_decode_tones(int duration, Common::BitStream32LELSB *gb, int b);
+ void qdm2_fft_decode_tones(int duration, Common::BitStreamMemory32LELSB *gb, int b);
void qdm2_decode_fft_packets(void);
void qdm2_fft_generate_tone(FFTTone *tone);
void qdm2_fft_tone_synthesizer(uint8 sub_packet);
@@ -672,7 +672,7 @@ void ff_mpa_synth_filter(int16 *synth_buf_ptr, int *synth_buf_offset,
* read the longest vlc code
* = (max_vlc_length + bits - 1) / bits
*/
-static int getVlc2(Common::BitStream32LELSB *s, int16 (*table)[2], int bits, int maxDepth) {
+static int getVlc2(Common::BitStreamMemory32LELSB *s, int16 (*table)[2], int bits, int maxDepth) {
int index = s->peekBits(bits);
int code = table[index][0];
int n = table[index][1];
@@ -1210,7 +1210,7 @@ QDM2Stream::QDM2Stream(Common::SeekableReadStream *extraData, DisposeAfterUse::F
rndTableInit();
initNoiseSamples();
- _compressedData = new uint8[_packetSize];
+ _compressedData = new uint8[_packetSize + FF_INPUT_BUFFER_PADDING_SIZE];
if (disposeExtraData == DisposeAfterUse::YES)
delete extraData;
@@ -1221,7 +1221,7 @@ QDM2Stream::~QDM2Stream() {
delete[] _compressedData;
}
-static int qdm2_get_vlc(Common::BitStream32LELSB *gb, VLC *vlc, int flag, int depth) {
+static int qdm2_get_vlc(Common::BitStreamMemory32LELSB *gb, VLC *vlc, int flag, int depth) {
int value = getVlc2(gb, vlc->table, vlc->bits, depth);
// stage-2, 3 bits exponent escape sequence
@@ -1240,7 +1240,7 @@ static int qdm2_get_vlc(Common::BitStream32LELSB *gb, VLC *vlc, int flag, int de
return value;
}
-static int qdm2_get_se_vlc(VLC *vlc, Common::BitStream32LELSB *gb, int depth)
+static int qdm2_get_se_vlc(VLC *vlc, Common::BitStreamMemory32LELSB *gb, int depth)
{
int value = qdm2_get_vlc(gb, vlc, 0, depth);
@@ -1605,7 +1605,7 @@ void QDM2Stream::fill_coding_method_array(sb_int8_array tone_level_idx, sb_int8_
* @param sb_min lower subband processed (sb_min included)
* @param sb_max higher subband processed (sb_max excluded)
*/
-void QDM2Stream::synthfilt_build_sb_samples(Common::BitStream32LELSB *gb, int length, int sb_min, int sb_max) {
+void QDM2Stream::synthfilt_build_sb_samples(Common::BitStreamMemory32LELSB *gb, int length, int sb_min, int sb_max) {
int sb, j, k, n, ch, run, channels;
int joined_stereo, zero_encoding, chs;
int type34_first;
@@ -1785,7 +1785,7 @@ void QDM2Stream::synthfilt_build_sb_samples(Common::BitStream32LELSB *gb, int le
* @param gb bitreader context
* @param length packet length in bits
*/
-void QDM2Stream::init_quantized_coeffs_elem0(int8 *quantized_coeffs, Common::BitStream32LELSB *gb, int length) {
+void QDM2Stream::init_quantized_coeffs_elem0(int8 *quantized_coeffs, Common::BitStreamMemory32LELSB *gb, int length) {
int i, k, run, level, diff;
if ((length - gb->pos()) < 16)
@@ -1819,7 +1819,7 @@ void QDM2Stream::init_quantized_coeffs_elem0(int8 *quantized_coeffs, Common::Bit
* @param gb bitreader context
* @param length packet length in bits
*/
-void QDM2Stream::init_tone_level_dequantization(Common::BitStream32LELSB *gb, int length) {
+void QDM2Stream::init_tone_level_dequantization(Common::BitStreamMemory32LELSB *gb, int length) {
int sb, j, k, n, ch;
for (ch = 0; ch < _channels; ch++) {
@@ -1885,8 +1885,8 @@ void QDM2Stream::init_tone_level_dequantization(Common::BitStream32LELSB *gb, in
void QDM2Stream::process_subpacket_9(QDM2SubPNode *node) {
int i, j, k, n, ch, run, level, diff;
- Common::MemoryReadStream d(node->packet->data, node->packet->size*8);
- Common::BitStream32LELSB gb(&d);
+ Common::BitStreamMemoryStream d(node->packet->data, node->packet->size + FF_INPUT_BUFFER_PADDING_SIZE);
+ Common::BitStreamMemory32LELSB gb(&d);
n = coeff_per_sb_for_avg[_coeffPerSbSelect][QDM2_SB_USED(_subSampling) - 1] + 1; // same as averagesomething function
@@ -1919,8 +1919,8 @@ void QDM2Stream::process_subpacket_9(QDM2SubPNode *node) {
* @param length packet length in bits
*/
void QDM2Stream::process_subpacket_10(QDM2SubPNode *node, int length) {
- Common::MemoryReadStream d(((node == NULL) ? _emptyBuffer : node->packet->data), ((node == NULL) ? 0 : node->packet->size*8));
- Common::BitStream32LELSB gb(&d);
+ Common::BitStreamMemoryStream d(((node == NULL) ? _emptyBuffer : node->packet->data), ((node == NULL) ? 0 : node->packet->size + FF_INPUT_BUFFER_PADDING_SIZE));
+ Common::BitStreamMemory32LELSB gb(&d);
if (length != 0) {
init_tone_level_dequantization(&gb, length);
@@ -1937,8 +1937,8 @@ void QDM2Stream::process_subpacket_10(QDM2SubPNode *node, int length) {
* @param length packet length in bit
*/
void QDM2Stream::process_subpacket_11(QDM2SubPNode *node, int length) {
- Common::MemoryReadStream d(((node == NULL) ? _emptyBuffer : node->packet->data), ((node == NULL) ? 0 : node->packet->size*8));
- Common::BitStream32LELSB gb(&d);
+ Common::BitStreamMemoryStream d(((node == NULL) ? _emptyBuffer : node->packet->data), ((node == NULL) ? 0 : node->packet->size + FF_INPUT_BUFFER_PADDING_SIZE));
+ Common::BitStreamMemory32LELSB gb(&d);
if (length >= 32) {
int c = gb.getBits(13);
@@ -1958,8 +1958,8 @@ void QDM2Stream::process_subpacket_11(QDM2SubPNode *node, int length) {
* @param length packet length in bits
*/
void QDM2Stream::process_subpacket_12(QDM2SubPNode *node, int length) {
- Common::MemoryReadStream d(((node == NULL) ? _emptyBuffer : node->packet->data), ((node == NULL) ? 0 : node->packet->size*8));
- Common::BitStream32LELSB gb(&d);
+ Common::BitStreamMemoryStream d(((node == NULL) ? _emptyBuffer : node->packet->data), ((node == NULL) ? 0 : node->packet->size + FF_INPUT_BUFFER_PADDING_SIZE));
+ Common::BitStreamMemory32LELSB gb(&d);
synthfilt_build_sb_samples(&gb, length, 8, QDM2_SB_USED(_subSampling));
}
@@ -2013,27 +2013,27 @@ void QDM2Stream::qdm2_decode_super_block(void) {
average_quantized_coeffs(); // average elements in quantized_coeffs[max_ch][10][8]
- Common::MemoryReadStream *d = new Common::MemoryReadStream(_compressedData, _packetSize*8);
- Common::BitStream32LELSB *gb = new Common::BitStream32LELSB(d);
+ Common::BitStreamMemoryStream packetStream(_compressedData, _packetSize + FF_INPUT_BUFFER_PADDING_SIZE);
+ Common::BitStreamMemory32LELSB packetBitStream(packetStream);
//qdm2_decode_sub_packet_header
- header.type = gb->getBits(8);
+ header.type = packetBitStream.getBits(8);
if (header.type == 0) {
header.size = 0;
header.data = NULL;
} else {
- header.size = gb->getBits(8);
+ header.size = packetBitStream.getBits(8);
if (header.type & 0x80) {
header.size <<= 8;
- header.size |= gb->getBits(8);
+ header.size |= packetBitStream.getBits(8);
header.type &= 0x7f;
}
if (header.type == 0x7f)
- header.type |= (gb->getBits(8) << 8);
+ header.type |= (packetBitStream.getBits(8) << 8);
- header.data = &_compressedData[gb->pos() / 8];
+ header.data = &_compressedData[packetBitStream.pos() / 8];
}
if (header.type < 2 || header.type >= 8) {
@@ -2043,15 +2043,13 @@ void QDM2Stream::qdm2_decode_super_block(void) {
}
_superblocktype_2_3 = (header.type == 2 || header.type == 3);
- packet_bytes = (_packetSize - gb->pos() / 8);
+ packet_bytes = (_packetSize - packetBitStream.pos() / 8);
- delete gb;
- delete d;
- d = new Common::MemoryReadStream(header.data, header.size*8);
- gb = new Common::BitStream32LELSB(d);
+ Common::BitStreamMemoryStream headerStream(header.data, header.size + FF_INPUT_BUFFER_PADDING_SIZE);
+ Common::BitStreamMemory32LELSB headerBitStream(headerStream);
if (header.type == 2 || header.type == 4 || header.type == 5) {
- int csum = 257 * gb->getBits(8) + 2 * gb->getBits(8);
+ int csum = 257 * headerBitStream.getBits(8) + 2 * headerBitStream.getBits(8);
csum = qdm2_packet_checksum(_compressedData, _packetSize, csum);
@@ -2077,41 +2075,37 @@ void QDM2Stream::qdm2_decode_super_block(void) {
if (i > 0) {
_subPacketListA[i - 1].next = &_subPacketListA[i];
- // seek to next block
- delete gb;
- delete d;
- d = new Common::MemoryReadStream(header.data, header.size*8);
- gb = new Common::BitStream32LELSB(d);
- gb->skip(next_index*8);
-
if (next_index >= header.size)
break;
+
+ // seek to next block
+ headerBitStream.skip(next_index * 8 - headerBitStream.pos());
}
// decode subpacket
packet = &_subPackets[i];
//qdm2_decode_sub_packet_header
- packet->type = gb->getBits(8);
+ packet->type = headerBitStream.getBits(8);
if (packet->type == 0) {
packet->size = 0;
packet->data = NULL;
} else {
- packet->size = gb->getBits(8);
+ packet->size = headerBitStream.getBits(8);
if (packet->type & 0x80) {
packet->size <<= 8;
- packet->size |= gb->getBits(8);
+ packet->size |= headerBitStream.getBits(8);
packet->type &= 0x7f;
}
if (packet->type == 0x7f)
- packet->type |= (gb->getBits(8) << 8);
+ packet->type |= (headerBitStream.getBits(8) << 8);
- packet->data = &header.data[gb->pos() / 8];
+ packet->data = &header.data[headerBitStream.pos() / 8];
}
- next_index = packet->size + gb->pos() / 8;
+ next_index = packet->size + headerBitStream.pos() / 8;
sub_packet_size = ((packet->size > 0xff) ? 1 : 0) + packet->size + 2;
if (packet->type == 0)
@@ -2131,22 +2125,18 @@ void QDM2Stream::qdm2_decode_super_block(void) {
// add subpacket to related list
if (packet->type == 8) {
error("Unsupported packet type 8");
- delete gb;
- delete d;
return;
} else if (packet->type >= 9 && packet->type <= 12) {
// packets for MPEG Audio like Synthesis Filter
QDM2_LIST_ADD(_subPacketListD, subPacketsD, packet);
} else if (packet->type == 13) {
for (j = 0; j < 6; j++)
- _fftLevelExp[j] = gb->getBits(6);
+ _fftLevelExp[j] = headerBitStream.getBits(6);
} else if (packet->type == 14) {
for (j = 0; j < 6; j++)
- _fftLevelExp[j] = qdm2_get_vlc(gb, &_fftLevelExpVlc, 0, 2);
+ _fftLevelExp[j] = qdm2_get_vlc(&headerBitStream, &_fftLevelExpVlc, 0, 2);
} else if (packet->type == 15) {
error("Unsupported packet type 15");
- delete gb;
- delete d;
return;
} else if (packet->type >= 16 && packet->type < 48 && !fft_subpackets[packet->type - 16]) {
// packets for FFT
@@ -2164,8 +2154,6 @@ void QDM2Stream::qdm2_decode_super_block(void) {
process_subpacket_12(NULL, 0);
}
// ****************************************************************
- delete gb;
- delete d;
}
void QDM2Stream::qdm2_fft_init_coefficient(int sub_packet, int offset, int duration,
@@ -2181,7 +2169,7 @@ void QDM2Stream::qdm2_fft_init_coefficient(int sub_packet, int offset, int durat
_fftCoefsIndex++;
}
-void QDM2Stream::qdm2_fft_decode_tones(int duration, Common::BitStream32LELSB *gb, int b) {
+void QDM2Stream::qdm2_fft_decode_tones(int duration, Common::BitStreamMemory32LELSB *gb, int b) {
int channel, stereo, phase, exp;
int local_int_4, local_int_8, stereo_phase, local_int_10;
int local_int_14, stereo_exp, local_int_20, local_int_28;
@@ -2290,8 +2278,8 @@ void QDM2Stream::qdm2_decode_fft_packets(void) {
return;
// decode FFT tones
- Common::MemoryReadStream d(packet->data, packet->size*8);
- Common::BitStream32LELSB gb(&d);
+ Common::BitStreamMemoryStream d(packet->data, packet->size + FF_INPUT_BUFFER_PADDING_SIZE);
+ Common::BitStreamMemory32LELSB gb(&d);
if (packet->type >= 32 && packet->type < 48 && !fft_subpackets[packet->type - 16])
unknown_flag = 1;
@@ -2514,6 +2502,7 @@ bool QDM2Stream::qdm2_decodeFrame(Common::SeekableReadStream &in, QueuingAudioSt
if (!in.eos()) {
in.read(_compressedData, _packetSize);
+ memset(_compressedData + _packetSize, 0, FF_INPUT_BUFFER_PADDING_SIZE);
debug(1, "QDM2Stream::qdm2_decodeFrame constructed input data");
}
diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp
index f60ed38e55..618b556b6b 100644
--- a/engines/xeen/combat.cpp
+++ b/engines/xeen/combat.cpp
@@ -69,7 +69,10 @@ static const int ATTACK_TYPE_FX[23] = {
4, 5, 4, 9, 27, 29, 44, 51, 53, 61, 71
};
-static const int MONSTER_SHOOT_POW[7] = { 12, 14, 0, 4, 8, 10, 13 };
+static const PowType MONSTER_SHOOT_POW[7] = {
+ POW_MAGIC_ARROW, POW_SPARKLES, POW_FIREBALL,
+ POW_MEGAVOLTS, POW_COLD_RAY, POW_SPRAY, POW_ENERGY_BLAST
+};
static const int COMBAT_SHOOTING[4] = { 1, 1, 2, 3 };
@@ -540,7 +543,7 @@ void Combat::monstersAttack() {
Map &map = *_vm->_map;
Party &party = *_vm->_party;
Sound &sound = *_vm->_sound;
- int powNum = -1;
+ PowType powNum = POW_INVALID;
MonsterStruct *monsterData = nullptr;
OutdoorDrawList &outdoorList = intf._outdoorList;
IndoorDrawList &indoorList = intf._indoorList;
@@ -549,12 +552,12 @@ void Combat::monstersAttack() {
if (_gmonHit[idx] != -1) {
monsterData = &map._monsterData[_gmonHit[idx]];
powNum = MONSTER_SHOOT_POW[monsterData->_attackType];
- if (powNum != 12)
+ if (powNum != POW_MAGIC_ARROW)
break;
}
}
- _powSprites.load(Common::String::format("pow%d.icn", powNum));
+ _powSprites.load(Common::String::format("pow%d.icn", (int)powNum));
sound.playFX(ATTACK_TYPE_FX[monsterData->_attackType]);
for (int charNum = 0; charNum < MAX_PARTY_COUNT; ++charNum) {
@@ -1799,7 +1802,7 @@ void Combat::giveExperience(int experience) {
}
}
-void Combat::multiAttack(int powNum) {
+void Combat::rangedAttack(PowType powNum) {
Interface &intf = *_vm->_interface;
Map &map = *_vm->_map;
Party &party = *_vm->_party;
@@ -1809,7 +1812,7 @@ void Combat::multiAttack(int powNum) {
_damageType = DT_POISON;
_shootType = ST_1;
Common::fill(&_shooting[0], &_shooting[6], 1);
- } else if (powNum == 11) {
+ } else if (powNum == POW_ARROW) {
_shootType = ST_1;
bool flag = false;
@@ -1838,7 +1841,7 @@ void Combat::multiAttack(int powNum) {
}
intf._charsShooting = true;
- _powSprites.load(Common::String::format("pow%d.icn", powNum));
+ _powSprites.load(Common::String::format("pow%d.icn", (int)powNum));
int monsterIndex = _monsterIndex;
int monster2Attack = _monster2Attack;
bool attackedFlag = false;
@@ -2060,7 +2063,7 @@ done:
void Combat::shootRangedWeapon() {
_rangeType = RT_ALL;
_damageType = DT_PHYSICAL;
- multiAttack(11);
+ rangedAttack(POW_ARROW);
}
} // End of namespace Xeen
diff --git a/engines/xeen/combat.h b/engines/xeen/combat.h
index 8a7c676018..3a79a2ea22 100644
--- a/engines/xeen/combat.h
+++ b/engines/xeen/combat.h
@@ -68,6 +68,15 @@ enum CombatMode {
COMBATMODE_0 = 0, COMBATMODE_1 = 1, COMBATMODE_2 = 2
};
+enum PowType {
+ POW_INVALID = -1, POW_FIREBALL = 0, POW_INCINERATE = 1,
+ POW_FIERY_FLAIL = 2, POW_LIGHTNING = 3, POW_MEGAVOLTS = 4,
+ POW_SPARKS = 5, POW_STOPPER = 6, POW_MAGIC_ORB = 7,
+ POW_COLD_RAY = 8, POW_FROST_WAVE = 9, POW_SPRAY = 10,
+ POW_ARROW = 11, POW_MAGIC_ARROW = 12, POW_ENERGY_BLAST = 13,
+ POW_SPARKLES = 14, POW_DEADLY_SWARM = 15
+};
+
class XeenEngine;
class Character;
class XeenItem;
@@ -208,7 +217,10 @@ public:
int stopAttack(const Common::Point &diffPt);
- void multiAttack(int powNum);
+ /**
+ * Called to do ranged attacks, both with bows or using a spell
+ */
+ void rangedAttack(PowType powNum);
/**
* Fires off a ranged attack at all oncoming monsters
diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp
index 689a797cce..230bafc695 100644
--- a/engines/xeen/interface.cpp
+++ b/engines/xeen/interface.cpp
@@ -1247,6 +1247,7 @@ void Interface::draw3d(bool updateFlag, bool skipDelay) {
Screen &screen = *_vm->_screen;
Scripts &scripts = *_vm->_scripts;
+ events.updateGameCounter();
if (screen._windows[11]._enabled)
return;
diff --git a/engines/xeen/spells.cpp b/engines/xeen/spells.cpp
index b3471df96c..ff737d9e77 100644
--- a/engines/xeen/spells.cpp
+++ b/engines/xeen/spells.cpp
@@ -250,7 +250,7 @@ void Spells::acidSpray() {
combat._damageType = DT_POISON;
combat._rangeType = RT_ALL;
sound.playFX(17);
- combat.multiAttack(10);
+ combat.rangedAttack(POW_SPRAY);
}
void Spells::awaken() {
@@ -277,7 +277,7 @@ void Spells::beastMaster() {
combat._damageType = DT_BEASTMASTER;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(7);
+ combat.rangedAttack(POW_MAGIC_ORB);
}
void Spells::bless() {
@@ -302,7 +302,7 @@ void Spells::coldRay() {
combat._damageType = DT_COLD;
combat._rangeType = RT_ALL;
sound.playFX(15);
- combat.multiAttack(8);
+ combat.rangedAttack(POW_COLD_RAY);
}
void Spells::createFood() {
@@ -378,7 +378,7 @@ void Spells::dancingSword() {
combat._damageType = DT_PHYSICAL;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(14);
+ combat.rangedAttack(POW_SPARKLES);
}
void Spells::dayOfProtection() {
@@ -422,7 +422,7 @@ void Spells::deadlySwarm() {
combat._damageType = DT_PHYSICAL;
combat._rangeType = RT_GROUP;
sound.playFX(13);
- combat.multiAttack(15);
+ combat.rangedAttack(POW_DEADLY_SWARM);
}
void Spells::detectMonster() {
@@ -505,20 +505,22 @@ void Spells::dragonSleep() {
combat._damageType = DT_DRAGONSLEEP;
combat._rangeType = RT_SINGLE;
sound.playFX(18);
- combat.multiAttack(7);
+ combat.rangedAttack(POW_MAGIC_ORB);
}
void Spells::elementalStorm() {
Combat &combat = *_vm->_combat;
Sound &sound = *_vm->_sound;
static const int STORM_FX_LIST[4] = { 13, 14, 15, 17 };
- static const int STORM_MA_LIST[4] = { 0, 5, 9, 10 };
+ static const PowType STORM_MA_LIST[4] = {
+ POW_FIREBALL, POW_SPARKS, POW_FROST_WAVE, POW_SPRAY
+ };
combat._monsterDamage = 150;
combat._damageType = (DamageType)_vm->getRandomNumber(DT_FIRE, DT_POISON);
combat._rangeType = RT_ALL;
sound.playFX(STORM_FX_LIST[combat._damageType]);
- combat.multiAttack(STORM_MA_LIST[combat._damageType]);
+ combat.rangedAttack(STORM_MA_LIST[combat._damageType]);
}
void Spells::enchantItem() {
@@ -541,7 +543,7 @@ void Spells::energyBlast() {
combat._damageType = DT_ENERGY;
combat._rangeType = RT_SINGLE;
sound.playFX(16);
- combat.multiAttack(13);
+ combat.rangedAttack(POW_ENERGY_BLAST);
}
void Spells::etherialize() {
@@ -570,7 +572,7 @@ void Spells::fantasticFreeze() {
combat._damageType = DT_COLD;
combat._rangeType = RT_GROUP;
sound.playFX(15);
- combat.multiAttack(8);
+ combat.rangedAttack(POW_COLD_RAY);
}
void Spells::fieryFlail() {
@@ -581,7 +583,7 @@ void Spells::fieryFlail() {
combat._damageType = DT_FIRE;
combat._rangeType = RT_SINGLE;
sound.playFX(13);
- combat.multiAttack(2);
+ combat.rangedAttack(POW_FIERY_FLAIL);
}
void Spells::fingerOfDeath() {
@@ -592,7 +594,7 @@ void Spells::fingerOfDeath() {
combat._damageType = DT_FINGEROFDEATH;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(14);
+ combat.rangedAttack(POW_SPARKLES);
}
void Spells::fireball() {
@@ -603,7 +605,7 @@ void Spells::fireball() {
combat._damageType = DT_FIRE;
combat._rangeType = RT_GROUP;
sound.playFX(13);
- combat.multiAttack(0);
+ combat.rangedAttack(POW_FIREBALL);
}
void Spells::firstAid() {
@@ -629,7 +631,7 @@ void Spells::flyingFist() {
combat._damageType = DT_PHYSICAL;
combat._rangeType = RT_SINGLE;
sound.playFX(18);
- combat.multiAttack(14);
+ combat.rangedAttack(POW_SPARKLES);
}
void Spells::frostbite() {
@@ -640,7 +642,7 @@ void Spells::frostbite() {
combat._damageType = DT_COLD;
combat._rangeType = RT_SINGLE;
sound.playFX(8);
- combat.multiAttack(8);
+ combat.rangedAttack(POW_COLD_RAY);
}
void Spells::golemStopper() {
@@ -651,7 +653,7 @@ void Spells::golemStopper() {
combat._damageType = DT_GOLEMSTOPPER;
combat._rangeType = RT_SINGLE;
sound.playFX(16);
- combat.multiAttack(6);
+ combat.rangedAttack(POW_STOPPER);
}
void Spells::heroism() {
@@ -680,7 +682,7 @@ void Spells::holyWord() {
combat._damageType = DT_HOLYWORD;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(13);
+ combat.rangedAttack(POW_ENERGY_BLAST);
}
void Spells::hypnotize() {
@@ -691,7 +693,7 @@ void Spells::hypnotize() {
combat._damageType = DT_HYPNOTIZE;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(7);
+ combat.rangedAttack(POW_MAGIC_ORB);
}
void Spells::identifyMonster() {
@@ -713,7 +715,7 @@ void Spells::implosion() {
combat._damageType = DT_ENERGY;
combat._rangeType = RT_SINGLE;
sound.playFX(18);
- combat.multiAttack(6);
+ combat.rangedAttack(POW_STOPPER);
}
void Spells::incinerate() {
@@ -724,7 +726,7 @@ void Spells::incinerate() {
combat._damageType = DT_FIRE;
combat._rangeType = RT_SINGLE;
sound.playFX(22);
- combat.multiAttack(1);
+ combat.rangedAttack(POW_INCINERATE);
}
void Spells::inferno() {
@@ -735,7 +737,7 @@ void Spells::inferno() {
combat._damageType = DT_FIRE;
combat._rangeType = RT_GROUP;
sound.playFX(13);
- combat.multiAttack(1);
+ combat.rangedAttack(POW_INCINERATE);
}
void Spells::insectSpray() {
@@ -746,7 +748,7 @@ void Spells::insectSpray() {
combat._damageType = DT_INSECT_SPRAY;
combat._rangeType = RT_GROUP;
sound.playFX(17);
- combat.multiAttack(10);
+ combat.rangedAttack(POW_SPRAY);
}
void Spells::itemToGold() {
@@ -825,7 +827,7 @@ void Spells::lightningBolt() {
combat._damageType = DT_ELECTRICAL;
combat._rangeType = RT_GROUP;
sound.playFX(14);
- combat.multiAttack(3);
+ combat.rangedAttack(POW_LIGHTNING);
}
void Spells::lloydsBeacon() {
@@ -842,7 +844,7 @@ void Spells::magicArrow() {
combat._monsterDamage = 0;
combat._damageType = DT_MAGIC_ARROW;
combat._rangeType = RT_SINGLE;
- combat.multiAttack(11);
+ combat.rangedAttack(POW_ARROW);
}
void Spells::massDistortion() {
@@ -853,7 +855,7 @@ void Spells::massDistortion() {
combat._damageType = DT_MASS_DISTORTION;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(6);
+ combat.rangedAttack(POW_STOPPER);
}
void Spells::megaVolts() {
@@ -864,7 +866,7 @@ void Spells::megaVolts() {
combat._damageType = DT_ELECTRICAL;
combat._rangeType = RT_GROUP;
sound.playFX(14);
- combat.multiAttack(4);
+ combat.rangedAttack(POW_MEGAVOLTS);
}
void Spells::moonRay() {
@@ -877,7 +879,7 @@ void Spells::moonRay() {
combat._damageType = DT_ENERGY;
combat._rangeType = RT_ALL;
sound.playFX(16);
- combat.multiAttack(13);
+ combat.rangedAttack(POW_ENERGY_BLAST);
for (uint idx = 0; idx < party._activeParty.size(); ++idx) {
sound.playFX(30);
@@ -910,7 +912,7 @@ void Spells::pain() {
combat._damageType = DT_PHYSICAL;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(14);
+ combat.rangedAttack(POW_SPARKLES);
}
void Spells::poisonVolley() {
@@ -921,7 +923,7 @@ void Spells::poisonVolley() {
combat._damageType = DT_POISON_VOLLEY;
combat._rangeType = RT_ALL;
sound.playFX(49);
- combat.multiAttack(11);
+ combat.rangedAttack(POW_ARROW);
}
void Spells::powerCure() {
@@ -956,7 +958,7 @@ void Spells::prismaticLight() {
combat._damageType = (DamageType)_vm->getRandomNumber(DT_PHYSICAL, DT_ENERGY);
combat._rangeType = RT_ALL;
sound.playFX(18);
- combat.multiAttack(14);
+ combat.rangedAttack(POW_SPARKLES);
}
void Spells::protectionFromElements() {
@@ -1074,7 +1076,7 @@ void Spells::shrapMetal() {
combat._damageType = DT_PHYSICAL;
combat._rangeType = RT_GROUP;
sound.playFX(16);
- combat.multiAttack(15);
+ combat.rangedAttack(POW_DEADLY_SWARM);
}
void Spells::sleep() {
@@ -1085,7 +1087,7 @@ void Spells::sleep() {
combat._damageType = DT_SLEEP;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(7);
+ combat.rangedAttack(POW_MAGIC_ORB);
}
void Spells::sparks() {
@@ -1096,7 +1098,7 @@ void Spells::sparks() {
combat._damageType = DT_ELECTRICAL;
combat._rangeType = RT_GROUP;
sound.playFX(14);
- combat.multiAttack(5);
+ combat.rangedAttack(POW_SPARKS);
}
void Spells::starBurst() {
@@ -1107,7 +1109,7 @@ void Spells::starBurst() {
combat._damageType = DT_FIRE;
combat._rangeType = RT_ALL;
sound.playFX(13);
- combat.multiAttack(15);
+ combat.rangedAttack(POW_DEADLY_SWARM);
}
void Spells::stoneToFlesh() {
@@ -1132,7 +1134,7 @@ void Spells::sunRay() {
combat._damageType = DT_ENERGY;
combat._rangeType = RT_ALL;
sound.playFX(16);
- combat.multiAttack(13);
+ combat.rangedAttack(POW_ENERGY_BLAST);
}
void Spells::superShelter() {
@@ -1284,7 +1286,7 @@ void Spells::toxicCloud() {
combat._damageType = DT_POISON;
combat._rangeType = RT_GROUP;
sound.playFX(17);
- combat.multiAttack(10);
+ combat.rangedAttack(POW_SPRAY);
}
void Spells::turnUndead() {
@@ -1295,7 +1297,7 @@ void Spells::turnUndead() {
combat._damageType = DT_UNDEAD;
combat._rangeType = RT_GROUP;
sound.playFX(18);
- combat.multiAttack(13);
+ combat.rangedAttack(POW_ENERGY_BLAST);
}
void Spells::walkOnWater() {
@@ -1323,7 +1325,7 @@ void Spells::frostbite2() {
combat._damageType = DT_COLD;
combat._rangeType = RT_SINGLE;
sound.playFX(15);
- combat.multiAttack(9);
+ combat.rangedAttack(POW_FROST_WAVE);
}
} // End of namespace Xeen