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];  | 
