diff options
author | Paul Gilbert | 2018-01-27 16:27:03 -0500 |
---|---|---|
committer | Paul Gilbert | 2018-01-27 16:27:03 -0500 |
commit | 540f47294a0274e2aaa9178a11997b4b975a6234 (patch) | |
tree | b3de9be891447b0158933dedf73148605e55346d /engines/xeen | |
parent | c74700e2f7a85113fffc8ff5a4d7d2623d025740 (diff) | |
download | scummvm-rg350-540f47294a0274e2aaa9178a11997b4b975a6234.tar.gz scummvm-rg350-540f47294a0274e2aaa9178a11997b4b975a6234.tar.bz2 scummvm-rg350-540f47294a0274e2aaa9178a11997b4b975a6234.zip |
XEEN: Move Scripts _v2 to Combat _damageTarget
The _damageTarget field is wonky. In most places, such as in
giveCharDamage, it's treated like an enum. But in the if opcode
logic (cmdIf), it's definitely treated a character index
Diffstat (limited to 'engines/xeen')
-rw-r--r-- | engines/xeen/combat.cpp | 7 | ||||
-rw-r--r-- | engines/xeen/combat.h | 1 | ||||
-rw-r--r-- | engines/xeen/interface.cpp | 12 | ||||
-rw-r--r-- | engines/xeen/party.cpp | 2 | ||||
-rw-r--r-- | engines/xeen/scripts.cpp | 27 | ||||
-rw-r--r-- | engines/xeen/scripts.h | 1 |
6 files changed, 27 insertions, 23 deletions
diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp index 32fa59297b..549f7739f3 100644 --- a/engines/xeen/combat.cpp +++ b/engines/xeen/combat.cpp @@ -125,6 +125,7 @@ Combat::Combat(XeenEngine *vm): _vm(vm), _missVoc("miss.voc"), _pow1Voc("pow1.vo _dangerPresent = false; _moveMonsters = false; _rangeType = RT_SINGLE; + _combatTarget = 0; } void Combat::clearAttackers() { @@ -154,7 +155,7 @@ void Combat::giveCharDamage(int damage, DamageType attackType, int charIndex) { windows.closeAll(); int idx = (int)party._activeParty.size(); - if (scripts._v2 == 2) { + if (_combatTarget == 2) { for (idx = 0; idx < (int)party._activeParty.size(); ++idx) { Character &c = party._activeParty[idx]; Condition condition = c.worstCondition(); @@ -171,12 +172,12 @@ void Combat::giveCharDamage(int damage, DamageType attackType, int charIndex) { } } if (idx == (int)party._activeParty.size()) { - if (!scripts._v2) + if (!_combatTarget) selectedIndex1 = 0; } for (;;) { - for (; selectedIndex1 < (scripts._v2 ? charIndex1 : (int)party._activeParty.size()); ++selectedIndex1) { + for (; selectedIndex1 < (_combatTarget ? charIndex1 : (int)party._activeParty.size()); ++selectedIndex1) { Character &c = party._activeParty[selectedIndex1]; c._conditions[ASLEEP] = 0; // Force attacked character to be awake diff --git a/engines/xeen/combat.h b/engines/xeen/combat.h index 015f41e6a1..e8121bee46 100644 --- a/engines/xeen/combat.h +++ b/engines/xeen/combat.h @@ -142,6 +142,7 @@ public: bool _moveMonsters; RangeType _rangeType; ShootType _shootType; + int _combatTarget; public: Combat(XeenEngine *vm); diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index 5d667e3a2c..ef6dbc9577 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -676,11 +676,11 @@ void Interface::doStepCode() { _flipGround = !_flipGround; draw3d(true); - int oldVal = scripts._v2; - scripts._v2 = 0; + int oldTarget = combat._combatTarget; + combat._combatTarget = 0; combat.giveCharDamage(damage, combat._damageType, 0); - scripts._v2 = oldVal; + combat._combatTarget = oldTarget; _flipGround = !_flipGround; } else if (party._partyDead) { draw3d(true); @@ -888,11 +888,11 @@ void Interface::startFalling(bool flag) { _flipGround ^= 1; draw3d(true); - int tempVal = scripts._v2; - scripts._v2 = 0; + int oldTarget = combat._combatTarget; + combat._combatTarget = 0; combat.giveCharDamage(party._fallDamage, DT_PHYSICAL, 0); - scripts._v2 = tempVal; + combat._combatTarget = oldTarget; _flipGround ^= 1; } } diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp index 346011838c..f6bd5ca7fc 100644 --- a/engines/xeen/party.cpp +++ b/engines/xeen/party.cpp @@ -686,7 +686,7 @@ void Party::giveTreasure() { _treasure._armor[idx].clear(); } - scripts._v2 = 1; + combat._combatTarget = 1; } bool Party::arePacksFull() const { diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp index e597cf7dbc..3a3e0c2578 100644 --- a/engines/xeen/scripts.cpp +++ b/engines/xeen/scripts.cpp @@ -116,7 +116,6 @@ Scripts::Scripts(XeenEngine *vm) : _vm(vm) { _treasureItems = 0; _lineNum = 0; _charIndex = 0; - _v2 = 0; _nEdamageType = DT_PHYSICAL; _animCounter = 0; _eventSkipped = false; @@ -169,7 +168,7 @@ int Scripts::checkEvents() { _redrawDone = false; _currentPos = party._mazePosition; _charIndex = 1; - _v2 = 1; + combat._combatTarget = 1; _nEdamageType = DT_PHYSICAL; // int var40 = -1; @@ -266,7 +265,7 @@ int Scripts::checkEvents() { party._treasure = party._savedTreasure; } - _v2 = 1; + combat._combatTarget = 1; Common::fill(&intf._charFX[0], &intf._charFX[6], 0); return _scriptResult; @@ -532,6 +531,7 @@ bool Scripts::cmdTeleport(ParamsIterator ¶ms) { } bool Scripts::cmdIf(ParamsIterator ¶ms) { + Combat &combat = *_vm->_combat; Party &party = *_vm->_party; uint32 val; int newLineNum; @@ -561,7 +561,7 @@ bool Scripts::cmdIf(ParamsIterator ¶ms) { } else { result = false; for (int idx = 0; idx < (int)party._activeParty.size() && !result; ++idx) { - if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { + if (_charIndex == 0 || (_charIndex == 8 && (int)idx != combat._combatTarget)) { result = ifProc(mode, val, _event->_opcode - 8, idx); } } @@ -591,6 +591,7 @@ bool Scripts::cmdMoveObj(ParamsIterator ¶ms) { } bool Scripts::cmdTakeOrGive(ParamsIterator ¶ms) { + Combat &combat = *_vm->_combat; Party &party = *_vm->_party; Windows &windows = *_vm->_windows; int mode1, mode2, mode3, param2; @@ -658,7 +659,7 @@ bool Scripts::cmdTakeOrGive(ParamsIterator ¶ms) { case OP_TakeOrGive_2: if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { - if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { + if (_charIndex == 0 || (_charIndex == 8 && (int)idx != combat._combatTarget)) { if (ifProc(mode1, val1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, idx)) { party.giveTake(0, 0, mode2, val2, idx); if (mode2 == 82) @@ -674,7 +675,7 @@ bool Scripts::cmdTakeOrGive(ParamsIterator ¶ms) { case OP_TakeOrGive_3: if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { - if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { + if (_charIndex == 0 || (_charIndex == 8 && (int)idx != combat._combatTarget)) { if (ifProc(mode1, val1, 1, idx) && ifProc(mode2, val2, 1, idx)) { party.giveTake(0, 0, mode2, val3, idx); if (mode2 == 82) @@ -691,7 +692,7 @@ bool Scripts::cmdTakeOrGive(ParamsIterator ¶ms) { case OP_TakeOrGive_4: if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { - if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { + if (_charIndex == 0 || (_charIndex == 8 && (int)idx != combat._combatTarget)) { if (ifProc(mode1, val1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, idx)) { party.giveTake(0, 0, mode2, val2, idx); if (mode2 == 82) @@ -707,7 +708,7 @@ bool Scripts::cmdTakeOrGive(ParamsIterator ¶ms) { default: if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { - if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { + if (_charIndex == 0 || (_charIndex == 8 && (int)idx != combat._combatTarget)) { party.giveTake(mode1, val1, mode2, val2, idx); switch (mode1) { @@ -805,16 +806,17 @@ bool Scripts::cmdRemove(ParamsIterator ¶ms) { } bool Scripts::cmdSetChar(ParamsIterator ¶ms) { + Combat &combat = *_vm->_combat; int charId = params.readByte(); if (charId == 0) { _charIndex = 0; - _v2 = 0; + combat._combatTarget = 0; } else if (charId < 7) { - _v2 = charId; + combat._combatTarget = charId; } else if (charId == 7) { _charIndex = _vm->getRandomNumber(1, _vm->_party->_activeParty.size()); - _v2 = 1; + combat._combatTarget = 1; } else { _charIndex = WhoWill::show(_vm, 22, 3, false); if (_charIndex == 0) @@ -1041,6 +1043,7 @@ bool Scripts::cmdReturn(ParamsIterator ¶ms) { } bool Scripts::cmdSetVar(ParamsIterator ¶ms) { + Combat &combat = *_vm->_combat; Party &party = *_vm->_party; uint val; _refreshIcons = true; @@ -1068,7 +1071,7 @@ bool Scripts::cmdSetVar(ParamsIterator ¶ms) { } else { // Set value for entire party for (int idx = 0; idx < (int)party._activeParty.size(); ++idx) { - if (_charIndex == 0 || (_charIndex == 8 && _v2 != idx)) { + if (_charIndex == 0 || (_charIndex == 8 && combat._combatTarget != idx)) { party._activeParty[idx].setValue(mode, val); } } diff --git a/engines/xeen/scripts.h b/engines/xeen/scripts.h index 9332018092..e0b3999205 100644 --- a/engines/xeen/scripts.h +++ b/engines/xeen/scripts.h @@ -546,7 +546,6 @@ public: int _whoWill; DamageType _nEdamageType; int _itemType; - int _v2; Common::Array<MirrorEntry> _mirror; public: Scripts(XeenEngine *vm); |