diff options
| -rw-r--r-- | engines/agos/agos.cpp | 1 | ||||
| -rw-r--r-- | engines/agos/agos.h | 2 | ||||
| -rw-r--r-- | engines/agos/icons.cpp | 8 | ||||
| -rw-r--r-- | engines/agos/input.cpp | 3 | ||||
| -rw-r--r-- | engines/agos/menus.cpp | 8 | ||||
| -rw-r--r-- | engines/agos/script.cpp | 44 | 
6 files changed, 43 insertions, 23 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index b0fa6c6205..ad7884e31a 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -324,6 +324,7 @@ AGOSEngine::AGOSEngine(OSystem *syst)  	_classMode1 = 0;  	_classMode2 = 0;  	_superRoomNumber = 0; +	_wallOn = 0;  	_boxLineCount = 0;  	_boxCR = 0; diff --git a/engines/agos/agos.h b/engines/agos/agos.h index f8576b0f5e..a302760b29 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -318,6 +318,7 @@ protected:  	int _agosMenu;  	byte _textMenu[10];  	uint _superRoomNumber; +	uint _wallOn;  	uint16 _hyperLink, _newLines;   	uint16 _oracleMaxScrollY, _noOracleScroll; @@ -797,6 +798,7 @@ protected:  	void animate(uint windowNum, uint zoneNum, uint vgaSpriteId, uint x, uint y, uint palette, bool setZone = true);  	void setImage(uint16 vga_res_id, bool setZone);  	void setWindowImage(uint16 mode, uint16 vga_res_id); +	void setWindowImageEx(uint16 mode, uint16 vga_res);  	void playSpeech(uint speech_id, uint vga_sprite_id);  	void skipSpeech(); diff --git a/engines/agos/icons.cpp b/engines/agos/icons.cpp index 7738c8cf25..b2926d4856 100644 --- a/engines/agos/icons.cpp +++ b/engines/agos/icons.cpp @@ -568,7 +568,7 @@ void AGOSEngine::defineArrowBoxes(WindowBlock *window) {  		ha->priority = 100;  		ha->window = window;  		ha->verb = 1; -		setWindowImage(6, 103); +		setWindowImageEx(6, 103);  	} else if (getGameType() == GType_ELVIRA2) {  		ha->x = 54;  		ha->y = 178; @@ -579,7 +579,7 @@ void AGOSEngine::defineArrowBoxes(WindowBlock *window) {  		ha->priority = 100;  		ha->window = window;  		ha->verb = 1; -		setWindowImage(6, 106); +		setWindowImageEx(6, 106);  	} else {  		ha->x = 30 * 8;  		ha->y = 170; @@ -705,10 +705,10 @@ void AGOSEngine::removeArrows(WindowBlock *window, uint num) {  		stopAnimateSimon1(128);  	} else if (getGameType() == GType_WW) {  		setBitFlag(22, false); -		setWindowImage(6, 103); +		setWindowImageEx(6, 103);  	} else if (getGameType() == GType_ELVIRA2) {  		setBitFlag(21, false); -		setWindowImage(6, 106); +		setWindowImageEx(6, 106);  	}  } diff --git a/engines/agos/input.cpp b/engines/agos/input.cpp index c07cae713a..d00bbe10b3 100644 --- a/engines/agos/input.cpp +++ b/engines/agos/input.cpp @@ -183,7 +183,8 @@ startOver:  			if (getGameType() != GType_FF && getGameType() != GType_PP && _keyPressed == 35)  				displayBoxStars();  			if (processSpecialKeys() != 0) { -				goto out_of_here; +				if (getGameType() == GType_WW || getGameType() == GType_PP) +					goto out_of_here;  			}  			if (_lastHitArea3 == (HitArea *) -1)  				goto startOver; diff --git a/engines/agos/menus.cpp b/engines/agos/menus.cpp index 9168bb6021..6ef180b4f8 100644 --- a/engines/agos/menus.cpp +++ b/engines/agos/menus.cpp @@ -161,9 +161,9 @@ void AGOSEngine::clearMenuStrip() {  		disableBox(i);  	if (getGameType() == GType_WW) { -		setWindowImage(2, 101); +		setWindowImageEx(2, 101);  	} else { -		setWindowImage(2, 102); +		setWindowImageEx(2, 102);  	}  } @@ -205,9 +205,9 @@ void AGOSEngine::doMenuStrip(uint menuNum) {  	_variableArray[var + 4] = id - 111;  	if (getGameType() == GType_WW) { -		setWindowImage(2, 102); +		setWindowImageEx(2, 102);  	} else { -		setWindowImage(2, 103); +		setWindowImageEx(2, 103);  	}  } diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp index 22225165f2..90e014b28a 100644 --- a/engines/agos/script.cpp +++ b/engines/agos/script.cpp @@ -655,20 +655,7 @@ void AGOSEngine::o_picture() {  	uint mode = getVarOrByte();  	_picture8600 = (vga_res == 8600); - -	if (mode == 4) { -		vc29_stopAllSounds(); - -		if (!_initMouse) { -			_initMouse = 1; -			vc33_setMouseOn(); -		} -	} - -	if (_lockWord & 0x10) -		error("o_picture: _lockWord & 0x10"); - -	setWindowImage(mode, vga_res); +	setWindowImageEx(mode, vga_res);  }  void AGOSEngine::o_loadZone() { @@ -1541,4 +1528,33 @@ void AGOSEngine::stopAnimateSimon2(uint a, uint b) {  	_lockWord &= ~0x8000;  } +void AGOSEngine::setWindowImageEx(uint16 mode, uint16 vga_res) { +	if (!_initMouse) { +		_initMouse = 1; +		vc33_setMouseOn(); +	} + +	if (mode == 4) { +		vc29_stopAllSounds(); + +		if (getGameType() == GType_ELVIRA1) { +			if (_variableArray[299] == 0) { +				_variableArray[293] = 0; +				_wallOn = 0; +			} +		} else if (getGameType() == GType_ELVIRA1) { +			if (_variableArray[70] == 0) { +				_variableArray[71] = 0; +				_wallOn = 0; +			} +		} + +	} + +	if (_lockWord & 0x10) +		error("setWindowImageEx: _lockWord & 0x10"); + +	setWindowImage(mode, vga_res); +} +  } // End of namespace AGOS  | 
