diff options
| -rw-r--r-- | engines/sherlock/journal.cpp | 27 | ||||
| -rw-r--r-- | engines/sherlock/objects.h | 1 | ||||
| -rw-r--r-- | engines/sherlock/resources.cpp | 12 | ||||
| -rw-r--r-- | engines/sherlock/scalpel/scalpel.cpp | 10 | ||||
| -rw-r--r-- | engines/sherlock/scene.cpp | 10 | ||||
| -rw-r--r-- | engines/sherlock/scene.h | 4 | ||||
| -rw-r--r-- | engines/sherlock/screen.cpp | 23 | ||||
| -rw-r--r-- | engines/sherlock/screen.h | 1 | ||||
| -rw-r--r-- | engines/sherlock/sherlock.cpp | 14 | ||||
| -rw-r--r-- | engines/sherlock/sherlock.h | 5 | ||||
| -rw-r--r-- | engines/sherlock/sound.cpp | 18 | ||||
| -rw-r--r-- | engines/sherlock/talk.cpp | 2 | ||||
| -rw-r--r-- | engines/sherlock/user_interface.cpp | 10 | 
13 files changed, 93 insertions, 44 deletions
diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp index 966ed55b81..7e0120c67d 100644 --- a/engines/sherlock/journal.cpp +++ b/engines/sherlock/journal.cpp @@ -57,8 +57,10 @@ Journal::Journal(SherlockEngine *vm): _vm(vm) {  	_up = _down = false;  	_page = 1; -	// Load the journal directory and location names -	loadJournalLocations(); +	if (_vm->_interactiveFl) { +		// Load the journal directory and location names +		loadJournalLocations(); +	}  }  /** @@ -562,7 +564,7 @@ bool Journal::drawJournal(int direction, int howFar) {  	int yp = 37;  	int startPage = _page;  	bool endJournal = false; -	bool firstOccurance = false; +	bool firstOccurance = true;  	bool searchSuccessful = false;  	bool endFlag = false;  	int lineNum = 0; @@ -1030,10 +1032,14 @@ int Journal::getFindName(bool printError) {  		SEARCH_POINTS[1][2] - screen.stringWidth("Backward") / 2, "Backward");  	screen.makeButton(Common::Rect(SEARCH_POINTS[2][0], yp, SEARCH_POINTS[2][1], yp + 10),  		SEARCH_POINTS[2][2] - screen.stringWidth("Forward") / 2, "Forward"); +	screen.gPrint(Common::Point(SEARCH_POINTS[0][2] - screen.stringWidth("Exit") / 2, yp), +		COMMAND_FOREGROUND, "E"); +	screen.gPrint(Common::Point(SEARCH_POINTS[1][2] - screen.stringWidth("Backward") / 2, yp), +		COMMAND_FOREGROUND, "B"); +	screen.gPrint(Common::Point(SEARCH_POINTS[2][2] - screen.stringWidth("Forward") / 2, yp), +		COMMAND_FOREGROUND, "F"); -	screen.gPrint(Common::Point(SEARCH_POINTS[0][2] - screen.stringWidth("Exit") / 2, yp), COMMAND_FOREGROUND, "E"); -	screen.gPrint(Common::Point(SEARCH_POINTS[1][2] - screen.stringWidth("Backward") / 2, yp), COMMAND_FOREGROUND, "B"); -	screen.gPrint(Common::Point(SEARCH_POINTS[2][2] - screen.stringWidth("Forward") / 2, yp), COMMAND_FOREGROUND, "F"); +	screen.makeField(Common::Rect(12, 185, 307, 196));  	screen.fillRect(Common::Rect(12, 185, 307, 186), BUTTON_BOTTOM);  	screen.vLine(12, 185, 195, BUTTON_BOTTOM); @@ -1139,10 +1145,11 @@ int Journal::getFindName(bool printError) {  			if (keyState.keycode >= Common::KEYCODE_SPACE && keyState.keycode <= Common::KEYCODE_z  					&& keyState.keycode != Common::KEYCODE_AT && name.size() < 50  					&& (xp + screen.charWidth(keyState.keycode)) < 296) { +				char ch = toupper(keyState.keycode);  				screen.vgaBar(Common::Rect(xp, yp, xp + 8, yp + 9), BUTTON_MIDDLE); -				screen.print(Common::Point(xp, yp), TALK_FOREGROUND, "%c", (char)keyState.keycode); -				xp += screen.charWidth((char)keyState.keycode); -				name += (char)keyState.keycode; +				screen.print(Common::Point(xp, yp), TALK_FOREGROUND, "%c", ch); +				xp += screen.charWidth(ch); +				name += ch;  			}  		} @@ -1158,7 +1165,7 @@ int Journal::getFindName(bool printError) {  				break;  			}  		} -	} while (!done); +	} while (!done && !_vm->shouldQuit());  	if (done != -1) {  		_find = name; diff --git a/engines/sherlock/objects.h b/engines/sherlock/objects.h index 4068973e58..7a1ef1aebe 100644 --- a/engines/sherlock/objects.h +++ b/engines/sherlock/objects.h @@ -164,6 +164,7 @@ struct UseType {  	void load(Common::SeekableReadStream &s);  }; +enum { TURNON_OBJ = 0x20, TURNOFF_OBJ = 0x40 };  class Object {  private:  	static SherlockEngine *_vm; diff --git a/engines/sherlock/resources.cpp b/engines/sherlock/resources.cpp index f6fbded9b1..456006a86a 100644 --- a/engines/sherlock/resources.cpp +++ b/engines/sherlock/resources.cpp @@ -102,11 +102,13 @@ Common::SeekableReadStream *Cache::get(const Common::String &filename) const {  Resources::Resources(SherlockEngine *vm): _vm(vm), _cache(vm) {  	_resourceIndex = -1; -	addToCache("vgs.lib"); -	addToCache("talk.lib"); -	addToCache("sequence.txt"); -	addToCache("journal.txt"); -	addToCache("portrait.lib"); +	if (_vm->_interactiveFl) { +		addToCache("vgs.lib"); +		addToCache("talk.lib"); +		addToCache("sequence.txt"); +		addToCache("journal.txt"); +		addToCache("portrait.lib"); +	}  }  /** diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp index 6959e435d2..078677be65 100644 --- a/engines/sherlock/scalpel/scalpel.cpp +++ b/engines/sherlock/scalpel/scalpel.cpp @@ -251,9 +251,9 @@ void ScalpelEngine::initialize() {  	_flags[39] = true;		// Turn on Baker Street  	if (!getIsDemo()) { -	// Load the map co-ordinates for each scene and sequence data -	_map->loadPoints(NUM_PLACES, &MAP_X[0], &MAP_Y[0], &MAP_TRANSLATE[0]); -	_map->loadSequences(3, &MAP_SEQUENCES[0][0]); +		// Load the map co-ordinates for each scene and sequence data +		_map->loadPoints(NUM_PLACES, &MAP_X[0], &MAP_Y[0], &MAP_TRANSLATE[0]); +		_map->loadSequences(3, &MAP_SEQUENCES[0][0]);  	}  	// Load the inventory @@ -269,7 +269,7 @@ void ScalpelEngine::initialize() {  	_animation->setTitleFrames(&TITLE_FRAMES[0][0], 7, 9);  	// Starting scene -	if (getIsDemo()) +	if (getIsDemo() && _interactiveFl)  		_scene->_goToScene = 3;  	else  		_scene->_goToScene = 4; @@ -279,7 +279,7 @@ void ScalpelEngine::initialize() {   * Show the opening sequence   */  void ScalpelEngine::showOpening() { -	if (getIsDemo()) +	if (getIsDemo() && _interactiveFl)  		return;  	if (!showCityCutscene()) diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp index 41d9284024..a65c11b167 100644 --- a/engines/sherlock/scene.cpp +++ b/engines/sherlock/scene.cpp @@ -43,7 +43,7 @@ void BgFileHeader::load(Common::SeekableReadStream &s) {  /**   * Load the data for the object   */ -void BgfileheaderInfo::load(Common::SeekableReadStream &s) { +void BgFileHeaderInfo::load(Common::SeekableReadStream &s) {  	_filesize = s.readUint32LE();  	_maxFrames = s.readByte(); @@ -176,7 +176,7 @@ void Scene::selectScene() {  	_restoreFlag = true;  	events.clearEvents(); -	// If there were any scripst waiting to be run, but were interrupt by a running +	// If there were any scripts waiting to be run, but were interrupt by a running  	// canimation (probably the last scene's exit canim), clear the _scriptMoreFlag  	if (talk._scriptMoreFlag == 3)  		talk._scriptMoreFlag = 0; @@ -265,7 +265,7 @@ bool Scene::loadScene(const Common::String &filename) {  		_invGraphicItems = bgHeader._numImages + 1;  		// Read in the shapes header info -		Common::Array<BgfileheaderInfo> bgInfo; +		Common::Array<BgFileHeaderInfo> bgInfo;  		bgInfo.resize(bgHeader._numStructs);  		for (uint idx = 0; idx < bgInfo.size(); ++idx) @@ -461,13 +461,13 @@ bool Scene::loadScene(const Common::String &filename) {  		// Check for TURNON objects  		for (uint idx = 0; idx < _bgShapes.size(); ++idx) { -			if (_bgShapes[idx]._type == HIDDEN && (_bgShapes[idx]._flags & 0x20)) +			if (_bgShapes[idx]._type == HIDDEN && (_bgShapes[idx]._flags & TURNON_OBJ))  				_bgShapes[idx].toggleHidden();  		}  		// Check for TURNOFF objects  		for (uint idx = 0; idx < _bgShapes.size(); ++idx) { -			if (_bgShapes[idx]._type != HIDDEN && (_bgShapes[idx]._flags & 0x40) && +			if (_bgShapes[idx]._type != HIDDEN && (_bgShapes[idx]._flags & TURNOFF_OBJ) &&  					_bgShapes[idx]._type != INVALID)  				_bgShapes[idx].toggleHidden();  			if (_bgShapes[idx]._type == HIDE_SHAPE) diff --git a/engines/sherlock/scene.h b/engines/sherlock/scene.h index 665f5d28e4..78d41299e6 100644 --- a/engines/sherlock/scene.h +++ b/engines/sherlock/scene.h @@ -49,7 +49,7 @@ struct BgFileHeader {  	void load(Common::SeekableReadStream &s);  }; -struct BgfileheaderInfo { +struct BgFileHeaderInfo {  	int _filesize;				// How long images are  	int _maxFrames;				// How many unique frames in object  	Common::String _filename;	// Filename of object @@ -83,7 +83,7 @@ struct SceneSound {  	void load(Common::SeekableReadStream &s);  }; -class ObjectArray: public Common::Array<Object> { +class ObjectArray : public Common::Array<Object> {  public:  	int indexOf(const Object &obj) const;  }; diff --git a/engines/sherlock/screen.cpp b/engines/sherlock/screen.cpp index cbf18f146f..d9ec1d745d 100644 --- a/engines/sherlock/screen.cpp +++ b/engines/sherlock/screen.cpp @@ -53,6 +53,10 @@ Screen::~Screen() {   * Set the font to use for writing text on the screen   */  void Screen::setFont(int fontNumb) { +	// Interactive demo doesn't use fonts +	if (!_vm->_interactiveFl) +		return; +  	_fontNumber = fontNumb;  	Common::String fname = Common::String::format("FONT%d.VGS", fontNumb + 1); @@ -112,8 +116,7 @@ int Screen::equalizePalette(const byte palette[PALETTE_SIZE]) {  	// For any palette component that doesn't already match the given destination  	// palette, change by 1 towards the reference palette component  	for (int idx = 0; idx < PALETTE_SIZE; ++idx) { -		if (tempPalette[idx] > palette[idx]) -		{ +		if (tempPalette[idx] > palette[idx]) {  			tempPalette[idx] = MAX((int)palette[idx], (int)tempPalette[idx] - 4);  			++total;  		} else if (tempPalette[idx] < palette[idx]) { @@ -212,7 +215,7 @@ void Screen::randomTransition() {  	for (int idx = 0; idx <= 65535 && !_vm->shouldQuit(); ++idx) {  		_transitionSeed = _transitionSeed * TRANSITION_MULTIPLIER + 1; -		int offset = _transitionSeed & 65535; +		int offset = _transitionSeed & 0xFFFF;  		if (offset < (SHERLOCK_SCREEN_WIDTH * SHERLOCK_SCREEN_HEIGHT))  			*((byte *)getPixels() + offset) = *((const byte *)_backBuffer->getPixels() + offset); @@ -467,7 +470,7 @@ void Screen::buttonPrint(const Common::Point &pt, byte color, bool slamIt,  }  /** - * Draw a panel in th eback buffer with a raised area effect around the edges + * Draw a panel in the back buffer with a raised area effect around the edges   */  void Screen::makePanel(const Common::Rect &r) {  	_backBuffer->fillRect(r, BUTTON_MIDDLE); @@ -483,6 +486,18 @@ void Screen::makePanel(const Common::Rect &r) {  }  /** + * Draw a field in the back buffer with a raised area effect around the edges, + * suitable for text input. + */ +void Screen::makeField(const Common::Rect &r) { +	_backBuffer->fillRect(r, BUTTON_MIDDLE); +	_backBuffer->hLine(r.left, r.top, r.right - 1, BUTTON_BOTTOM); +	_backBuffer->hLine(r.left + 1, r.bottom - 1, r.right - 1, BUTTON_TOP); +	_backBuffer->vLine(r.left, r.top + 1, r.bottom - 1, BUTTON_BOTTOM); +	_backBuffer->vLine(r.right - 1, r.top + 1, r.bottom - 2, BUTTON_TOP); +} + +/**   * Sets the active back buffer pointer to a restricted sub-area of the first back buffer   */  void Screen::setDisplayBounds(const Common::Rect &r) { diff --git a/engines/sherlock/screen.h b/engines/sherlock/screen.h index 1f3c23748f..2103588fe0 100644 --- a/engines/sherlock/screen.h +++ b/engines/sherlock/screen.h @@ -123,6 +123,7 @@ public:  	void buttonPrint(const Common::Point &pt, byte color, bool slamIt, const Common::String &str);  	void makePanel(const Common::Rect &r); +	void makeField(const Common::Rect &r);  	void setDisplayBounds(const Common::Rect &r);  	void resetDisplayBounds(); diff --git a/engines/sherlock/sherlock.cpp b/engines/sherlock/sherlock.cpp index 09a8ef18ef..bdd2ec3588 100644 --- a/engines/sherlock/sherlock.cpp +++ b/engines/sherlock/sherlock.cpp @@ -49,6 +49,7 @@ SherlockEngine::SherlockEngine(OSystem *syst, const SherlockGameDescription *gam  	_loadGameSlot = -1;  	_canLoadSave = false;  	_showOriginalSavesDialog = false; +	_interactiveFl = true;  }  SherlockEngine::~SherlockEngine() { @@ -79,6 +80,15 @@ void SherlockEngine::initialize() {  	ImageFile::setVm(this);  	Object::setVm(this);  	Sprite::setVm(this); + +	if (getIsDemo()) { +		Common::File f; +		// The interactive demo doesn't have an intro thus doesn't include TITLE.SND +		// At the opposite, the non-interactive demo is only the intro. +		if (f.exists("TITLE.SND")) +			_interactiveFl = false; +	} +  	_res = new Resources(this);  	_animation = new Animation(this);  	_debugger = new Debugger(this); @@ -119,7 +129,9 @@ Common::Error SherlockEngine::run() {  		_saves->loadGame(_loadGameSlot);  		_loadGameSlot = -1;  	} else { -		showOpening(); +		do +			showOpening(); +		while (!shouldQuit() && !_interactiveFl);  	}  	while (!shouldQuit()) { diff --git a/engines/sherlock/sherlock.h b/engines/sherlock/sherlock.h index 33e4a45b40..68c8e8daca 100644 --- a/engines/sherlock/sherlock.h +++ b/engines/sherlock/sherlock.h @@ -50,10 +50,6 @@  namespace Sherlock {  enum { -	kFileTypeHash -}; - -enum {  	kDebugScript = 1 << 0  }; @@ -109,6 +105,7 @@ public:  	int _loadGameSlot;  	bool _canLoadSave;  	bool _showOriginalSavesDialog; +	bool _interactiveFl;  public:  	SherlockEngine(OSystem *syst, const SherlockGameDescription *gameDesc);  	virtual ~SherlockEngine(); diff --git a/engines/sherlock/sound.cpp b/engines/sherlock/sound.cpp index 40aa4fa81a..c79e179c1c 100644 --- a/engines/sherlock/sound.cpp +++ b/engines/sherlock/sound.cpp @@ -44,10 +44,17 @@ Sound::Sound(SherlockEngine *vm, Audio::Mixer *mixer): _vm(vm), _mixer(mixer) {  	_musicOn = true;  	_speechOn = true; -	_vm->_res->addToCache("MUSIC.LIB"); -	_vm->_res->addToCache("TITLE.SND"); -	_vm->_res->addToCache("EPILOGUE.SND"); -	_vm->_res->addToCache("SND.SND"); +	if (!_vm->_interactiveFl) +		_vm->_res->addToCache("TITLE.SND"); +	else { +		_vm->_res->addToCache("MUSIC.LIB"); +		_vm->_res->addToCache("SND.SND"); + +		if (!_vm->getIsDemo()) { +			_vm->_res->addToCache("TITLE.SND"); +			_vm->_res->addToCache("EPILOGUE.SND"); +		} +	}  }  /** @@ -61,6 +68,7 @@ void Sound::syncSoundSettings() {  void Sound::loadSound(const Common::String &name, int priority) {  	// No implementation required in ScummVM +	warning("loadSound");  }  static int8 creativeADPCM_ScaleMap[64] = { @@ -81,7 +89,7 @@ static uint8 creativeADPCM_AdjustMap[64] = {  	240, 0, 0, 0, 0,  0,  0,  0  }; -byte Sound::decodeSample(byte sample, byte& reference, int16& scale) { +byte Sound::decodeSample(byte sample, byte &reference, int16 &scale) {  	int16 samp = sample + scale;  	int16 ref = 0; diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp index b38b432e37..dfcf9b912d 100644 --- a/engines/sherlock/talk.cpp +++ b/engines/sherlock/talk.cpp @@ -672,7 +672,7 @@ void Talk::drawInterface() {  }  /** - * Display a list of statements in a window at the bottom of the scren that the + * Display a list of statements in a window at the bottom of the screen that the   * player can select from.   */  bool Talk::displayTalk(bool slamIt) { diff --git a/engines/sherlock/user_interface.cpp b/engines/sherlock/user_interface.cpp index d5ff828aee..e2ad307aa4 100644 --- a/engines/sherlock/user_interface.cpp +++ b/engines/sherlock/user_interface.cpp @@ -81,8 +81,14 @@ const char *const MUSE[] = {  /*----------------------------------------------------------------*/  UserInterface::UserInterface(SherlockEngine *vm) : _vm(vm) { -	_controls = new ImageFile("menu.all"); -	_controlPanel = new ImageFile("controls.vgs"); +	if (_vm->_interactiveFl) { +		_controls = new ImageFile("menu.all"); +		_controlPanel = new ImageFile("controls.vgs"); +	} else { +		_controls = nullptr; +		_controlPanel = nullptr; +	} +  	_bgFound = 0;  	_oldBgFound = -1;  	_keycode = Common::KEYCODE_INVALID;  | 
