diff options
-rw-r--r-- | simon/items.cpp | 17 | ||||
-rw-r--r-- | simon/simon.cpp | 3 | ||||
-rw-r--r-- | simon/simon.h | 3 |
3 files changed, 23 insertions, 0 deletions
diff --git a/simon/items.cpp b/simon/items.cpp index 43333d573e..1e2f04f0ac 100644 --- a/simon/items.cpp +++ b/simon/items.cpp @@ -378,11 +378,14 @@ int SimonEngine::runScript() { if (_game & GF_TALKIE) { uint speech_id = getNextWord(); if (var < 20) { + _stringid_array_3_backup[var] = _stringid_array_3[var]; _stringid_array_3[var] = string_id; + _speechid_array_4_backup[var] = _speechid_array_4[var]; _speechid_array_4[var] = speech_id; } } else { if (var < 20) + _stringid_array_3_backup[var] = _stringid_array_3[var]; _stringid_array_3[var] = string_id; } } @@ -933,6 +936,8 @@ int SimonEngine::runScript() { _show_preposition = true; o_setup_cond_c(); _show_preposition = false; + if (!(_game & GF_SIMON2)) + _reset_arrays = true; } break; @@ -1005,6 +1010,18 @@ int SimonEngine::runScript() { talk_with_speech(speech_id, vga_sprite_id); if (string_ptr != NULL && _subtitles) talk_with_text(vga_sprite_id, color, string_ptr, tv->a, tv->b, tv->c); + + if (_reset_arrays) { + // Work around for bug in original Simon the Sorcerer 1 + // The game wouldn't reset array back to room descriptions + // after a conversation. + uint i; + for (i = 0; i < 21; i++) { + _stringid_array_3[i] = _stringid_array_3_backup[i]; + _speechid_array_4[i] = _speechid_array_4_backup[i]; + } + _reset_arrays = 0; + } } break; diff --git a/simon/simon.cpp b/simon/simon.cpp index 0f04287707..4e21954a02 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -437,7 +437,10 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst) memset(_stringid_array_2, 0, sizeof(_stringid_array_2)); memset(_stringid_array_3, 0, sizeof(_stringid_array_3)); + memset(_stringid_array_3_backup, 0, sizeof(_stringid_array_3_backup)); memset(_speechid_array_4, 0, sizeof(_speechid_array_4)); + memset(_speechid_array_4_backup, 0, sizeof(_speechid_array_4_backup)); + _reset_arrays = 0; memset(_bit_array, 0, sizeof(_bit_array)); memset(_variableArray, 0, sizeof(_variableArray)); diff --git a/simon/simon.h b/simon/simon.h index 9ff531e503..a1c33c7811 100644 --- a/simon/simon.h +++ b/simon/simon.h @@ -295,7 +295,10 @@ protected: uint16 _stringid_array_2[20]; uint16 _stringid_array_3[20]; + uint16 _stringid_array_3_backup[20]; uint16 _speechid_array_4[20]; + uint16 _speechid_array_4_backup[20]; + bool _reset_arrays; uint16 _bit_array[32]; int16 _variableArray[256]; |