diff options
| -rw-r--r-- | common/gameDetector.cpp | 1 | ||||
| -rw-r--r-- | scumm/scumm.h | 2 | ||||
| -rw-r--r-- | simon/items.cpp | 4 | ||||
| -rw-r--r-- | simon/midi.cpp | 2 | ||||
| -rw-r--r-- | simon/res.cpp | 3 | ||||
| -rw-r--r-- | simon/simon.cpp | 41 | ||||
| -rw-r--r-- | simon/simon.h | 1 | 
7 files changed, 44 insertions, 10 deletions
| diff --git a/common/gameDetector.cpp b/common/gameDetector.cpp index 7b0cf22dca..615220c863 100644 --- a/common/gameDetector.cpp +++ b/common/gameDetector.cpp @@ -506,6 +506,7 @@ const VersionSettings version_settings[] = {  	{"simon2dos", "Simon the Sorcerer 2 for DOS", GID_SIMON_FIRST+1, 99, 99, 99, 0},  	{"simon1win", "Simon the Sorcerer 1 for Windows", GID_SIMON_FIRST+2, 99, 99, 99, 0},	  	{"simon2win", "Simon the Sorcerer 2 for Windows", GID_SIMON_FIRST+3, 99, 99, 99, 0}, +	{"simon1demo", "Simon the Sorcerer 1 for DOS (demo)", GID_SIMON_FIRST+4, 99, 99, 99, 0},   	/* Scumm Version 8 */  	{"comi", "The Curse of Monkey Island", GID_CMI, 8, 1, 0, diff --git a/scumm/scumm.h b/scumm/scumm.h index cda8101285..d1ec8f5795 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -276,7 +276,7 @@ enum GameId {  	/* Simon the Sorcerer */  	GID_SIMON_FIRST = 20, -	GID_SIMON_LAST = GID_SIMON_FIRST + 3, +	GID_SIMON_LAST = GID_SIMON_FIRST + 4,  };  enum GameFeatures { diff --git a/simon/items.cpp b/simon/items.cpp index 4baeae0ec8..227ec736bd 100644 --- a/simon/items.cpp +++ b/simon/items.cpp @@ -1015,7 +1015,7 @@ int SimonState::runScript()  					uint d = _array_4[a];  					if (d != 0)  						talk_with_speech(d, b); -				} else if (_game == GAME_SIMON1DOS) { +				} else if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS)) {  					uint b = getVarOrByte();  					uint c = getVarOrByte();  					uint a = getVarOrByte(); @@ -1289,7 +1289,7 @@ void SimonState::o_177()  			offs = getOffsetOfChild2Param(child, 0x100);  			talk_with_speech(child->array[offs] + 3550, a);  		} -	} else if (_game == GAME_SIMON1DOS) { +	} else if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS)) {  		uint a = getVarOrByte();  		uint b = getVarOrByte();  		Child2 *child = findChildOfType2(getNextItemPtr()); diff --git a/simon/midi.cpp b/simon/midi.cpp index 3a4dadb260..c43da45af2 100644 --- a/simon/midi.cpp +++ b/simon/midi.cpp @@ -135,7 +135,7 @@ void MidiPlayer::read_one_song(File *in, Song *s)  		break;  	default: -		error("Midi song has no 'MThd'"); +		warning("Midi song has no 'MThd'");  	}  } diff --git a/simon/res.cpp b/simon/res.cpp index 6838f01ffc..430bfca57f 100644 --- a/simon/res.cpp +++ b/simon/res.cpp @@ -265,6 +265,9 @@ byte *SimonState::readSingleOpcode(File *in, byte *ptr)  	case GAME_SIMON1DOS:  		table = opcode_arg_table_simon1dos;  		break; +	case GAME_SIMON1DEMO: +		table = opcode_arg_table_simon1dos; +		break;  	default:  		error("Invalid game specified");  	} diff --git a/simon/simon.cpp b/simon/simon.cpp index 69563ab54a..3f0e3cb237 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -54,6 +54,25 @@ static const GameSpecificSettings simon1_settings = {  	"GAMEPC",											/* gamepc_filename */  }; +static const GameSpecificSettings simon1demo_settings = { +	1,														/* VGA_DELAY_BASE */ +	1576 / 4,											/* TABLE_INDEX_BASE */ +	1460 / 4,											/* TEXT_INDEX_BASE */ +	1700 / 4,											/* NUM_GAME_OFFSETS */ +	64,														/* NUM_VIDEO_OP_CODES */ +	1000000,											/* VGA_MEM_SIZE */ +	50000,												/* TABLES_MEM_SIZE */ +	3624,													/* NUM_VOICE_RESOURCES */ +	141,													/* NUM_EFFECT_RESOURCES */ +	1316 / 4,											/* MUSIC_INDEX_BASE */ +	0,														/* SOUND_INDEX_BASE */ +	"",									/* gme_filename */ +	"",									/* wav_filename */ +	"",									/* wav_filename2 */ +	"",									/* effects_filename */ +	"GDEMO",											/* gamepc_filename */ +}; +  static const GameSpecificSettings simon2win_settings = {  	5,														/* VGA_DELAY_BASE */  	1580 / 4,											/* TABLE_INDEX_BASE */ @@ -896,7 +915,7 @@ void SimonState::closeTablesFile_simon1(File *in)  uint SimonState::loadTextFile(const char *filename, byte *dst)  { -	if (_game == GAME_SIMON1DOS) +	if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS))  		return loadTextFile_simon1(filename, dst);  	else  		return loadTextFile_gme(filename, dst); @@ -904,7 +923,7 @@ uint SimonState::loadTextFile(const char *filename, byte *dst)  File *SimonState::openTablesFile(const char *filename)  { -	if (_game == GAME_SIMON1DOS) +	if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS))  		return openTablesFile_simon1(filename);  	else  		return openTablesFile_gme(filename); @@ -912,7 +931,7 @@ File *SimonState::openTablesFile(const char *filename)  void SimonState::closeTablesFile(File *in)  { -	if (_game == GAME_SIMON1DOS) +	if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS))  		closeTablesFile_simon1(in);  	else  		closeTablesFile_gme(in); @@ -1714,6 +1733,10 @@ void SimonState::o_print_str()  		string_ptr = getStringPtrByID(string_id);  		break; +	case GAME_SIMON1DEMO: +		string_ptr = getStringPtrByID(string_id); +		break; +  	case GAME_SIMON1DOS:  		string_ptr = getStringPtrByID(string_id);  		break; @@ -1759,6 +1782,10 @@ void SimonState::o_print_str()  #endif  		break; +	case GAME_SIMON1DEMO: +		talk_with_text(num_1, num_2, (char *)string_ptr, tv->a, tv->b, tv->c); +		break; +  	case GAME_SIMON1DOS:  		talk_with_text(num_1, num_2, (char *)string_ptr, tv->a, tv->b, tv->c);  		break; @@ -4000,7 +4027,7 @@ void SimonState::print_char_helper_6(uint i)  void SimonState::read_vga_from_datfile_1(uint vga_id)  { -	if (_game == GAME_SIMON1DOS) { +	if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS)) {  		File in;  		char buf[50];  		uint32 size; @@ -4032,7 +4059,7 @@ void SimonState::read_vga_from_datfile_1(uint vga_id)  byte *SimonState::read_vga_from_datfile_2(uint id)  { -	if (_game == GAME_SIMON1DOS) { +	if ((_game == GAME_SIMON1DEMO) || (_game == GAME_SIMON1DOS)) {  		File in;  		char buf[50];  		uint32 size; @@ -4076,7 +4103,7 @@ void SimonState::resfile_read(void *dst, uint32 offs, uint32 size)  void SimonState::openGameFile()  { -	if (_game != GAME_SIMON1DOS) { +	if ((_game != GAME_SIMON1DEMO) && (_game != GAME_SIMON1DOS)) {  		_game_file = new File();  		_game_file->open(gss->gme_filename, _gameDataPath); @@ -4297,6 +4324,8 @@ void SimonState::go()  		gss = &simon2win_settings;  	} else if (_game == GAME_SIMON2DOS) {  		gss = &simon2dos_settings; +	} else if (_game == GAME_SIMON1DEMO) { +		gss = &simon1demo_settings;  	} else {  		gss = &simon1_settings;  	} diff --git a/simon/simon.h b/simon/simon.h index 02f6e952cc..8651873d37 100644 --- a/simon/simon.h +++ b/simon/simon.h @@ -121,6 +121,7 @@ public:  		GAME_SIMON1WIN = 2,  		GAME_SIMON2DOS = 1,  		GAME_SIMON2WIN = 3, +		GAME_SIMON1DEMO = 4,  	}; | 
