aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/scripts.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2017-12-29 03:33:59 -0500
committerPaul Gilbert2017-12-29 03:33:59 -0500
commite28f2a75bcb1ba363a902d45a62e286979fb75f5 (patch)
tree125651439e479541acf49018c7fd3eb01c5a7df5 /engines/xeen/scripts.cpp
parenta3d2c5268768bff0bed06aff00d97704c88bb337 (diff)
downloadscummvm-rg350-e28f2a75bcb1ba363a902d45a62e286979fb75f5.tar.gz
scummvm-rg350-e28f2a75bcb1ba363a902d45a62e286979fb75f5.tar.bz2
scummvm-rg350-e28f2a75bcb1ba363a902d45a62e286979fb75f5.zip
XEEN: Properly implement cmdGiveExtended opcode
Diffstat (limited to 'engines/xeen/scripts.cpp')
-rw-r--r--engines/xeen/scripts.cpp76
1 files changed, 56 insertions, 20 deletions
diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp
index 11d21ce374..1307a88c25 100644
--- a/engines/xeen/scripts.cpp
+++ b/engines/xeen/scripts.cpp
@@ -873,44 +873,80 @@ bool Scripts::cmdAlterMap(ParamsIterator &params) {
bool Scripts::cmdGiveExtended(ParamsIterator &params) {
Party &party = *_vm->_party;
- uint32 val;
- int newLineNum;
- bool result;
+ int mode1, mode2, mode3;
+ uint32 val1, val2, val3;
_refreshIcons = true;
- int mode = params.readByte();
- switch (mode) {
+ mode1 = params.readByte();
+ switch (mode1) {
case 16:
case 34:
case 100:
- val = params.readUint32LE();
+ val1 = params.readUint32LE();
break;
case 25:
case 35:
case 101:
case 106:
- val = params.readUint16LE();
+ val1 = params.readUint16LE();
break;
default:
- val = params.readByte();
+ val1 = params.readByte();
break;
}
- newLineNum = params.readByte();
- if ((_charIndex != 0 && _charIndex != 8) || mode == 44) {
- result = ifProc(mode, val, _event->_opcode - OP_If1, _charIndex - 1);
- } else {
- result = false;
- for (int idx = 0; idx < (int)party._activeParty.size() && !result; ++idx) {
- if (_charIndex == 0 || (_charIndex == 8 && _v2 != idx)) {
- result = ifProc(mode, val, _event->_opcode - OP_If1, idx);
- }
- }
+ mode2 = params.readByte();
+ switch (mode2) {
+ case 16:
+ case 34:
+ case 100:
+ val2 = params.readUint32LE();
+ break;
+ case 25:
+ case 35:
+ case 101:
+ case 106:
+ val2 = params.readUint16LE();
+ break;
+ default:
+ val2 = params.readByte();
+ break;
+ }
+
+ mode3 = params.readByte();
+ switch (mode3) {
+ case 16:
+ case 34:
+ case 100:
+ val3 = params.readUint32LE();
+ break;
+ case 25:
+ case 35:
+ case 101:
+ case 106:
+ val3 = params.readUint16LE();
+ break;
+ default:
+ val3 = params.readByte();
+ break;
}
+ _scriptExecuted = true;
+ bool result = party.giveTakeExt(mode1, val1, mode2, val2, mode3, val3,
+ (_charIndex > 0) ? _charIndex - 1 : 0);
+
if (result) {
- _lineNum = newLineNum;
- return false;
+ if (_animCounter == 255) {
+ _animCounter = 0;
+ return cmdExit(params);
+ } else if (mode1 == 67 || mode2 == 67 || mode3 == 67) {
+ _animCounter = 1;
+ } else {
+ return cmdExit(params);
+ }
+ } else {
+ if (mode1 == 67 || mode2 == 67 || mode3 == 67)
+ return cmdExit(params);
}
return true;