aboutsummaryrefslogtreecommitdiff
path: root/engines/touche
diff options
context:
space:
mode:
authorGregory Montoir2007-01-02 02:46:53 +0000
committerGregory Montoir2007-01-02 02:46:53 +0000
commit7db298ecd15c40aad2daffb5c046c67d045bef51 (patch)
tree05d1d73384e735dd6bebbcaed88510328885b44d /engines/touche
parentea9ae8af0de0972669e5b23187d51d246dc99fe9 (diff)
downloadscummvm-rg350-7db298ecd15c40aad2daffb5c046c67d045bef51.tar.gz
scummvm-rg350-7db298ecd15c40aad2daffb5c046c67d045bef51.tar.bz2
scummvm-rg350-7db298ecd15c40aad2daffb5c046c67d045bef51.zip
workaround a scripting bug (see tracker item #1623356)
svn-id: r24968
Diffstat (limited to 'engines/touche')
-rw-r--r--engines/touche/opcodes.cpp37
1 files changed, 32 insertions, 5 deletions
diff --git a/engines/touche/opcodes.cpp b/engines/touche/opcodes.cpp
index ad0b8b2e31..e545d9d404 100644
--- a/engines/touche/opcodes.cpp
+++ b/engines/touche/opcodes.cpp
@@ -760,13 +760,40 @@ void ToucheEngine::op_unlockWalkPath() {
void ToucheEngine::op_addItemToInventoryAndRedraw() {
debugC(9, kDebugOpcodes, "ToucheEngine::op_addItemToInventoryAndRedraw()");
- int16 inventory = _script.readNextWord();
+ int16 keyChar = _script.readNextWord();
int16 item = *_script.stackDataPtr;
- if (inventory == 256) {
- inventory = _currentKeyCharNum;
+ if (keyChar == 256) {
+ keyChar = _currentKeyCharNum;
+ }
+
+ // Workaround for bug #1623356. The original script allows you to either use the
+ // "waxy knife" (object 72) or the dagger (object 7) on the rope. But in both
+ // situations, only the dagger is put back in the inventory.
+ //
+ // [1A35] (1D) ST[0] = FLAGS[119]
+ // [1A38] (06) PUSH
+ // [1A39] (13) ST[0] = 7
+ // [1A3C] (11) ST[0] = ST[1] == ST[0]
+ // [1A3D] (06) PUSH
+ // [1A3E] (1D) ST[0] = FLAGS[119]
+ // [1A41] (06) PUSH
+ // [1A42] (13) ST[0] = 72
+ // [1A45] (11) ST[0] = ST[1] == ST[0]
+ // [1A46] (0E) OR
+ // [1A47] (02) JZ 0x1B1B
+ // [xxxx] ...
+ // [1B05] (13) ST[0] = 7
+ // [1B08] (53) ADD_ITEM_TO_INVENTORY_AND_REDRAW(keychar=1)
+
+ if (_currentEpisodeNum == 92 && keyChar == 1 && item == 7) {
+ if (_flagsTable[119] == 72) {
+ debug(0, "Workaround waxy knife not re-appearing in the inventory");
+ item = 72;
+ }
}
- addItemToInventory(inventory, item);
- if (_currentKeyCharNum == inventory && !_hideInventoryTexts) {
+
+ addItemToInventory(keyChar, item);
+ if (_currentKeyCharNum == keyChar && !_hideInventoryTexts) {
drawInventory(_currentKeyCharNum, 1);
}
}