aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--simon/items.cpp17
-rw-r--r--simon/simon.cpp3
-rw-r--r--simon/simon.h3
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];