diff options
-rw-r--r-- | audio/decoders/qdm2.cpp | 101 | ||||
-rw-r--r-- | engines/xeen/combat.cpp | 19 | ||||
-rw-r--r-- | engines/xeen/combat.h | 14 | ||||
-rw-r--r-- | engines/xeen/interface.cpp | 1 | ||||
-rw-r--r-- | engines/xeen/spells.cpp | 78 |
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 |