diff options
Diffstat (limited to 'sky/control.cpp')
| -rw-r--r-- | sky/control.cpp | 58 | 
1 files changed, 19 insertions, 39 deletions
| diff --git a/sky/control.cpp b/sky/control.cpp index b10809fda4..c5139ca35f 100644 --- a/sky/control.cpp +++ b/sky/control.cpp @@ -182,10 +182,9 @@ void ControlStatus::setToText(const char *newText) {  }  void ControlStatus::setToText(uint16 textNum) { -	_skyText->getText(textNum);  	if (_textData)  		free(_textData); -	displayText_t disText = _skyText->displayText(NULL, true, STATUS_WIDTH, 255); +	displayText_t disText = _skyText->displayText(textNum, NULL, true, STATUS_WIDTH, 255);  	_textData = (dataFileHeader *)disText.textData;  	_statusText->setSprite(_textData);  	_statusText->drawToScreen(WITH_MASK); @@ -338,12 +337,10 @@ void Control::buttonControl(ConResource *pButton) {  		_curButtonText = pButton->_text;  		if (pButton->_text) {  			displayText_t textRes; -			if (pButton->_text == 0xFFFF) { // text for autosave button +			if (pButton->_text == 0xFFFF) // text for autosave button  				textRes = _skyText->displayText(autoSave, NULL, false, PAN_LINE_WIDTH, 255); -			} else { -				_skyText->getText(pButton->_text); -				textRes = _skyText->displayText(NULL, false, PAN_LINE_WIDTH, 255); -			} +			else +				textRes = _skyText->displayText(pButton->_text, NULL, false, PAN_LINE_WIDTH, 255);  			_textSprite = (dataFileHeader *)textRes.textData;  			_text->setSprite(_textSprite);  		} else @@ -475,7 +472,7 @@ void Control::doControlPanel(void) {  	_textSprite = NULL;  	uint16 clickRes = 0; -	while (!quitPanel) { +	while (!quitPanel && !SkyEngine::_systemVars.quitGame) {  		_text->drawToScreen(WITH_MASK);  		_system->updateScreen();  		_mouseClicked = false; @@ -501,12 +498,13 @@ void Control::doControlPanel(void) {  				_mouseClicked = false;  			}  		} -		if (!haveButton) buttonControl(NULL); - +		if (!haveButton) +			buttonControl(NULL);  	}  	memset(_screenBuf, 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);  	_system->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT); -	_system->updateScreen(); +	if (!SkyEngine::_systemVars.quitGame) +		_system->updateScreen();  	_skyScreen->forceRefresh();  	_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));  	removePanel(); @@ -583,11 +581,8 @@ uint16 Control::handleClick(ConResource *pButton) {  			return 0;  	case QUIT_TO_DOS:  		animClick(pButton); -		if (getYesNo(quitDos)) { -			showGameQuitMsg(false); -			delay(1500); -			_system->quit(); -		} +		if (getYesNo(quitDos)) +			SkyEngine::_systemVars.quitGame = true;  		return 0;  	default:  		error("Control::handleClick: unknown routine: %X",pButton->_onClick); @@ -1538,8 +1533,7 @@ void Control::delay(unsigned int amount) {  			case OSystem::EVENT_RBUTTONDOWN:  				break;  			case OSystem::EVENT_QUIT: -				if (!SkyEngine::_systemVars.quitting) -					showGameQuitMsg(false); +				SkyEngine::_systemVars.quitGame = true;  				break;  			default:  				break; @@ -1559,20 +1553,17 @@ void Control::delay(unsigned int amount) {  	} while (cur < start + amount);  } -void Control::showGameQuitMsg(bool useScreen) { +void Control::showGameQuitMsg(void) { -	SkyEngine::_systemVars.quitting = true;  	_skyText->fnSetFont(0);  	uint8 *textBuf1 = (uint8 *)malloc(GAME_SCREEN_WIDTH * 14 + sizeof(dataFileHeader));  	uint8 *textBuf2 = (uint8 *)malloc(GAME_SCREEN_WIDTH * 14 + sizeof(dataFileHeader));  	uint8 *screenData; -	if (useScreen) { -		if (_skyScreen->sequenceRunning()) -			_skyScreen->stopSequence(); +	if (_skyScreen->sequenceRunning()) +		_skyScreen->stopSequence(); + +	screenData = _skyScreen->giveCurrent(); -		screenData = _skyScreen->giveCurrent(); -	} else -		screenData = _screenBuf;  	_skyText->displayText(_quitTexts[SkyEngine::_systemVars.language * 2 + 0], textBuf1, true, 320, 255);  	_skyText->displayText(_quitTexts[SkyEngine::_systemVars.language * 2 + 1], textBuf2, true, 320, 255);  	uint8 *curLine1 = textBuf1 + sizeof(dataFileHeader); @@ -1591,19 +1582,8 @@ void Control::showGameQuitMsg(bool useScreen) {  	}  	_skyScreen->halvePalette();  	_skyScreen->showScreen(screenData); -	free(textBuf1); free(textBuf2); - -	// __tom (FIXME): This is a poor method of turning -	// off music. ~GmMusic, ~AdlibMusic, and ~MT32Music -	// should do it themselves so the appropriate MIDI -	// controller events (e.g. 123/'All Notes Off') can -	// be sent. However, that requires a re-write of -	// other code and for now this fixes hanging notes -	// on MT-32 + other external GMIDI synths. -	_skyMusic->stopMusic(); -	delay(1500); -	ConfMan.flushToDisk(); -	_system->quit(); +	free(textBuf1); +	free(textBuf2);  }  char Control::_quitTexts[16][35] = { | 
