diff options
| author | lukaslw | 2014-06-21 23:24:24 +0200 | 
|---|---|---|
| committer | lukaslw | 2014-06-22 20:09:25 +0200 | 
| commit | 11d062f2b222826965fb1653aade448fa359c1ac (patch) | |
| tree | bd2fe94a615a4b2908046881e8309c3af7e80e1b | |
| parent | d67690c5f6f0c839038edbb45bcc43cce2fffd86 (diff) | |
| download | scummvm-rg350-11d062f2b222826965fb1653aade448fa359c1ac.tar.gz scummvm-rg350-11d062f2b222826965fb1653aade448fa359c1ac.tar.bz2 scummvm-rg350-11d062f2b222826965fb1653aade448fa359c1ac.zip | |
PRINCE: Cursor update, LMB outside inventory crash fix
| -rw-r--r-- | engines/prince/prince.cpp | 57 | 
1 files changed, 38 insertions, 19 deletions
| diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index d074ff78e1..7fefae9f5f 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -420,6 +420,8 @@ void PrinceEngine::changeCursor(uint16 curId) {  	switch(curId) {  	case 0:  		CursorMan.showMouse(false); +		_optionsFlag = 0; +		_selectedMob = 0;  		return;  	case 1:  		curSurface = _cursor1->getSurface(); @@ -1437,8 +1439,8 @@ void PrinceEngine::drawScreen() {  		playNextFrame(); -		if (!_inventoryBackgroundRemember) { -			if (!_optionsFlag && !_dialogFlag) { +		if (!_inventoryBackgroundRemember && !_dialogFlag) { +			if (!_optionsFlag) {  				_selectedMob = hotspot(_graph->_frontScreen, _mobList);  			}  			showTexts(_graph->_frontScreen); @@ -1686,33 +1688,38 @@ void PrinceEngine::leftMouseButton() {  	if (_optionsFlag) {  		if (_optionEnabled < _optionsNumber) {  			_optionsFlag = 0; +			// edi = optionsMob +			// ebp = optionsMobNumber  		} else {  			return;  		}  	} else { +		// edi = currentMob +		// ebp = currentMobNumber  		_optionsMob = _selectedMob; -		if (!_selectedMob) { -			// @@walkto +		if (_selectedMob == 0) { +			// @@walkto - TODO +			return;  		}  	} -	// edi = optionsMob -	// ebp = optionsMobNumber +	//do_option  	// selectedMob = optionsMobNumber  	if (_currentPointerNumber != 2) {  		//skip_use_code -	} -	if (_selectedMode != 0) { + +	} else if (_selectedMode != 0) {  		//give_item -	} -	if (_room->_itemUse == 0) { -		//standard_useitem -		//_script->_scriptInfo.stdUse;  	} else { -		debug("selectedMob: %d", _selectedMob); -		int mobEvent = _script->scanMobEventsWithItem(_mobList[_selectedMob - 1]._mask, _room->_itemUse, _selectedItem); -		if (mobEvent == -1) { +		if (_room->_itemUse == 0) { +			//standard_useitem +			//_script->_scriptInfo.stdUse; +		} else { +			debug("selectedMob: %d", _selectedMob); +			int mobEvent = _script->scanMobEventsWithItem(_mobList[_selectedMob - 1]._mask, _room->_itemUse, _selectedItem); +			if (mobEvent == -1) { +			}  		}  	}  } @@ -1720,6 +1727,9 @@ void PrinceEngine::leftMouseButton() {  void PrinceEngine::rightMouseButton() {  	if (_currentPointerNumber < 2) {  		enableOptions(); +	} else { +		_currentPointerNumber = 1; +		changeCursor(1);  	}  } @@ -1871,9 +1881,11 @@ void PrinceEngine::inventoryRightMouseButton() {  void PrinceEngine::enableOptions() {  	if (_optionsFlag != 1) { -		changeCursor(1); -		_currentPointerNumber = 1; +		//changeCursor(1); +		//_currentPointerNumber = 1;  		if (_selectedMob != 0) { +			changeCursor(1); +			_currentPointerNumber = 1;  			//if (_mobType != 0x100) {  				Common::Point mousePos = _system->getEventManager()->getMousePos();  				int x1 = mousePos.x - _optionsWidth / 2; @@ -2167,7 +2179,7 @@ void PrinceEngine::runDialog(Common::Array<DialogLine> &dialogData) {  			case Common::EVENT_LBUTTONDOWN:  				if (dialogSelected != -1) {  					dialogLeftMouseButton(dialogSelected, dialogData[dialogSelectedText]._line.c_str()); -					return; +					_dialogFlag = false;  				}  				break;  			case Common::EVENT_RBUTTONDOWN: @@ -2183,8 +2195,13 @@ void PrinceEngine::runDialog(Common::Array<DialogLine> &dialogData) {  			}  		} -		if (shouldQuit()) +		if (shouldQuit()) {  			return; +		} + +		if (!_dialogFlag) { +			break; +		}  		getDebugger()->onFrame();  		_graph->update(_graph->_frontScreen); @@ -2192,6 +2209,8 @@ void PrinceEngine::runDialog(Common::Array<DialogLine> &dialogData) {  	}  	_dialogImage->free();  	delete _dialogImage; +	_dialogFlag = false; +	// cursor?  }  void PrinceEngine::dialogLeftMouseButton(int dialogSelected, const char *s) { | 
