diff options
Diffstat (limited to 'engines')
| -rw-r--r-- | engines/touche/midi.cpp | 2 | ||||
| -rw-r--r-- | engines/touche/plugin.cpp | 2 | ||||
| -rw-r--r-- | engines/touche/resource.cpp | 3 | ||||
| -rw-r--r-- | engines/touche/saveload.cpp | 144 | ||||
| -rw-r--r-- | engines/touche/touche.cpp | 120 | ||||
| -rw-r--r-- | engines/touche/touche.h | 11 | ||||
| -rw-r--r-- | engines/touche/ui.cpp | 4 | 
7 files changed, 142 insertions, 144 deletions
diff --git a/engines/touche/midi.cpp b/engines/touche/midi.cpp index cbb431ac22..fd8a9c4add 100644 --- a/engines/touche/midi.cpp +++ b/engines/touche/midi.cpp @@ -80,11 +80,13 @@ void MidiPlayer::adjustVolume(int diff) {  void MidiPlayer::setVolume(int volume) {  	_masterVolume = CLIP(volume, 0, 255); +	_mutex.lock();  	for (int i = 0; i < NUM_CHANNELS; ++i) {  		if (_channelsTable[i]) {  			_channelsTable[i]->volume(_channelsVolume[i] * _masterVolume / 255);  		}  	} +	_mutex.unlock();  }  int MidiPlayer::open() { diff --git a/engines/touche/plugin.cpp b/engines/touche/plugin.cpp index 9071445455..1db063fc7c 100644 --- a/engines/touche/plugin.cpp +++ b/engines/touche/plugin.cpp @@ -151,4 +151,4 @@ PluginError Engine_TOUCHE_create(OSystem *system, Engine **engine) {  	return kNoError;  } -REGISTER_PLUGIN(TOUCHE, "Touche: The Adventures of the 5th Musketeer", "Touche: The Adventures of the 5th Musketeer (C) US Gold"); +REGISTER_PLUGIN(TOUCHE, "Touche Engine", "Touche: The Adventures of the 5th Musketeer (C) Clipper Software"); diff --git a/engines/touche/resource.cpp b/engines/touche/resource.cpp index d0607acfb3..5f70dafa88 100644 --- a/engines/touche/resource.cpp +++ b/engines/touche/resource.cpp @@ -554,7 +554,7 @@ void ToucheEngine::res_loadImageHelper(uint8 *imgData, int imgWidth, int imgHeig  void ToucheEngine::res_loadSound(int priority, int num) {  	debugC(9, kDebugResource, "ToucheEngine::res_loadSound() num=%d", num); -	if (priority >= _defaultSoundPriority) { +	if (priority >= 0) {  		uint32 size;  		const uint32 offs = res_getDataOffset(kResourceTypeSound, num, &size);  		_fData.seek(offs); @@ -650,7 +650,6 @@ void ToucheEngine::res_stopSpeech() {  	debugC(9, kDebugResource, "ToucheEngine::res_stopSpeech()");  	_mixer->stopHandle(_speechHandle);  	_speechPlaying = false; -	_defaultSoundPriority = 0;  }  } // namespace Touche diff --git a/engines/touche/saveload.cpp b/engines/touche/saveload.cpp index 1c13bcfe36..e387b439c1 100644 --- a/engines/touche/saveload.cpp +++ b/engines/touche/saveload.cpp @@ -29,7 +29,7 @@  namespace Touche {  enum { -	kCurrentGameStateVersion = 5, +	kCurrentGameStateVersion = 6,  	kGameStateDescriptionLen = 32  }; @@ -209,6 +209,38 @@ static void saveOrLoad(S &s, ProgramPointData &data) {  	saveOrLoad(s, data.priority);  } +template <class S, class A> +static void saveOrLoadCommonArray(S &s, A &array); + +template <class A> +static void saveOrLoadCommonArray(Common::WriteStream &stream, A &array) { +	uint count = array.size(); +	assert(count < 0xFFFF); +	stream.writeUint16LE(count); +	for (uint i = 0; i < count; ++i) { +		saveOrLoad(stream, array[i]); +	} +} + +template <class A> +static void saveOrLoadCommonArray(Common::ReadStream &stream, A &array) { +	uint count = stream.readUint16LE(); +	if (count == array.size()) { +		for (uint i = 0; i < count; ++i) { +			saveOrLoad(stream, array[i]); +		} +	} +} + +template <class S, class A> +static void saveOrLoadStaticArray(S &s, A &array, uint count) { +	for (uint i = 0; i < count; ++i) { +		saveOrLoad(s, array[i]); +	} +} + +static const uint32 saveLoadEndMarker = 0x55AA55AA; +  void ToucheEngine::saveGameStateData(Common::WriteStream *stream) {  	setKeyCharMoney();  	stream->writeUint16LE(_currentEpisodeNum); @@ -217,48 +249,23 @@ void ToucheEngine::saveGameStateData(Common::WriteStream *stream) {  	stream->writeUint16LE(_flagsTable[614]);  	stream->writeUint16LE(_flagsTable[615]);  	stream->writeUint16LE(_disabledInputCounter); -	for (uint i = 0; i < _programHitBoxTable.size(); ++i) { -		saveOrLoad(*stream, _programHitBoxTable[i]); -	} -	for (uint i = 0; i < _programBackgroundTable.size(); ++i) { -		saveOrLoad(*stream, _programBackgroundTable[i]); -	} -	for (uint i = 0; i < _programAreaTable.size(); ++i) { -		saveOrLoad(*stream, _programAreaTable[i]); -	} -	for (uint i = 0; i < _programWalkTable.size(); ++i) { -		saveOrLoad(*stream, _programWalkTable[i]); -	} -	for (uint i = 0; i < _programPointsTable.size(); ++i) { -		saveOrLoad(*stream, _programPointsTable[i]); -	} +	saveOrLoadCommonArray(*stream, _programHitBoxTable); +	saveOrLoadCommonArray(*stream, _programBackgroundTable); +	saveOrLoadCommonArray(*stream, _programAreaTable); +	saveOrLoadCommonArray(*stream, _programWalkTable); +	saveOrLoadCommonArray(*stream, _programPointsTable);  	stream->write(_updatedRoomAreasTable, 200); -	for (uint i = 0; i < NUM_SEQUENCES; ++i) { -		saveOrLoad(*stream, _sequenceEntryTable[i]); -	} -	for (uint i = 0; i < 1024; ++i) { -		saveOrLoad(*stream, _flagsTable[i]); -	} -	for (uint i = 0; i < 100; ++i) { -		saveOrLoad(*stream, _inventoryList1[i]); -	} -	for (uint i = 0; i < 100; ++i) { -		saveOrLoad(*stream, _inventoryList2[i]); -	} -	for (uint i = 0; i < 6; ++i) { -		saveOrLoad(*stream, _inventoryList3[i]); -	} -	for (uint i = 0; i < NUM_KEYCHARS; ++i) { -		saveOrLoad(*stream, _keyCharsTable[i]); -	} -	for (uint i = 0; i < NUM_INVENTORY_ITEMS; ++i) { -		saveOrLoad(*stream, _inventoryItemsInfoTable[i]); -	} -	for (uint i = 0; i < NUM_TALK_ENTRIES; ++i) { -		saveOrLoad(*stream, _talkTable[i]); -	} +	saveOrLoadStaticArray(*stream, _sequenceEntryTable, NUM_SEQUENCES); +	saveOrLoadStaticArray(*stream, _flagsTable, 1024); +	saveOrLoadStaticArray(*stream, _inventoryList1, 100); +	saveOrLoadStaticArray(*stream, _inventoryList2, 100); +	saveOrLoadStaticArray(*stream, _inventoryList3, 6); +	saveOrLoadStaticArray(*stream, _keyCharsTable, NUM_KEYCHARS); +	saveOrLoadStaticArray(*stream, _inventoryItemsInfoTable, NUM_INVENTORY_ITEMS); +	saveOrLoadStaticArray(*stream, _talkTable, NUM_TALK_ENTRIES);  	stream->writeUint16LE(_talkListEnd);  	stream->writeUint16LE(_talkListCurrent); +	stream->writeUint32LE(saveLoadEndMarker);  }  void ToucheEngine::loadGameStateData(Common::ReadStream *stream) { @@ -276,51 +283,30 @@ void ToucheEngine::loadGameStateData(Common::ReadStream *stream) {  	_disabledInputCounter = stream->readUint16LE();  	res_loadProgram(_currentEpisodeNum);  	setupEpisode(-1); -	for (uint i = 0; i < _programHitBoxTable.size(); ++i) { -		saveOrLoad(*stream, _programHitBoxTable[i]); -	} -	for (uint i = 0; i < _programBackgroundTable.size(); ++i) { -		saveOrLoad(*stream, _programBackgroundTable[i]); -	} -	for (uint i = 0; i < _programAreaTable.size(); ++i) { -		saveOrLoad(*stream, _programAreaTable[i]); -	} -	for (uint i = 0; i < _programWalkTable.size(); ++i) { -		saveOrLoad(*stream, _programWalkTable[i]); -	} -	for (uint i = 0; i < _programPointsTable.size(); ++i) { -		saveOrLoad(*stream, _programPointsTable[i]); -	} +	saveOrLoadCommonArray(*stream, _programHitBoxTable); +	saveOrLoadCommonArray(*stream, _programBackgroundTable); +	saveOrLoadCommonArray(*stream, _programAreaTable); +	saveOrLoadCommonArray(*stream, _programWalkTable); +	saveOrLoadCommonArray(*stream, _programPointsTable);  	stream->read(_updatedRoomAreasTable, 200);  	for (uint i = 1; i <= _updatedRoomAreasTable[0]; ++i) {  		updateRoomAreas(_updatedRoomAreasTable[i], -1);  	} -	for (uint i = 0; i < NUM_SEQUENCES; ++i) { -		saveOrLoad(*stream, _sequenceEntryTable[i]); -	} -	for (uint i = 0; i < 1024; ++i) { -		saveOrLoad(*stream, _flagsTable[i]); -	} -	for (uint i = 0; i < 100; ++i) { -		saveOrLoad(*stream, _inventoryList1[i]); -	} -	for (uint i = 0; i < 100; ++i) { -		saveOrLoad(*stream, _inventoryList2[i]); -	} -	for (uint i = 0; i < 6; ++i) { -		saveOrLoad(*stream, _inventoryList3[i]); -	} -	for (uint i = 0; i < NUM_KEYCHARS; ++i) { -		saveOrLoad(*stream, _keyCharsTable[i]); -	} -	for (uint i = 0; i < NUM_INVENTORY_ITEMS; ++i) { -		saveOrLoad(*stream, _inventoryItemsInfoTable[i]); -	} -	for (uint i = 0; i < NUM_TALK_ENTRIES; ++i) { -		saveOrLoad(*stream, _talkTable[i]); -	} +	saveOrLoadStaticArray(*stream, _sequenceEntryTable, NUM_SEQUENCES); +	saveOrLoadStaticArray(*stream, _flagsTable, 1024); +	saveOrLoadStaticArray(*stream, _inventoryList1, 100); +	saveOrLoadStaticArray(*stream, _inventoryList2, 100); +	saveOrLoadStaticArray(*stream, _inventoryList3, 6); +	saveOrLoadStaticArray(*stream, _keyCharsTable, NUM_KEYCHARS); +	saveOrLoadStaticArray(*stream, _inventoryItemsInfoTable, NUM_INVENTORY_ITEMS); +	saveOrLoadStaticArray(*stream, _talkTable, NUM_TALK_ENTRIES);  	_talkListEnd = stream->readUint16LE();  	_talkListCurrent = stream->readUint16LE(); +	if (stream->readUint32LE() != saveLoadEndMarker) { +		warning("Corrupted gamestate data"); +		// if that ever happens, exit the game +		_flagsTable[611] = 1; +	}  	_flagsTable[614] = roomOffsX;  	_flagsTable[615] = roomOffsY;  	for (uint i = 0; i < NUM_SEQUENCES; ++i) { diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp index a94e9ef972..9ab32fa6df 100644 --- a/engines/touche/touche.cpp +++ b/engines/touche/touche.cpp @@ -35,8 +35,6 @@ namespace Touche {  ToucheEngine::ToucheEngine(OSystem *system, Common::Language language)  	: Engine(system), _language(language) { -	_talkTextMode = kTalkModeVoiceAndText; -  	_saveLoadCurrentPage = 0;  	_saveLoadCurrentSlot = 0;  	_hideInventoryTexts = false; @@ -45,8 +43,6 @@ ToucheEngine::ToucheEngine(OSystem *system, Common::Language language)  	_roomAreaRect = Common::Rect(640, 352);  	clearDirtyRects(); -	_defaultSoundPriority = 0; -  	_playSoundCounter = 0;  	_processRandomPaletteCounter = 0; @@ -91,8 +87,6 @@ int ToucheEngine::init() {  	_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume"));  	_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume"));  	_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, Audio::Mixer::kMaxMixerVolume); - -	_midiPlayer->setVolume(ConfMan.getInt("music_volume"));  	return 0;  } @@ -179,7 +173,7 @@ void ToucheEngine::restart() {  	_conversationReplyNum = -1;  	_conversationEnded = false;  	_conversationNum = 0; -	_drawCharacterConversionRepeatCounter = 0; +	_scrollConversationChoiceOffset = 0;  	_currentConversation = 0;  	_disableConversationScript = false;  	_conversationAreaCleared = false; @@ -191,6 +185,41 @@ void ToucheEngine::restart() {  	}  } +void ToucheEngine::readConfigurationSettings() { +	if (ConfMan.getBool("speech_mute")) { +		_talkTextMode = kTalkModeTextOnly; +		if (!ConfMan.getBool("subtitles")) { +			ConfMan.setBool("subtitles", true); +		} +	} else { +		if (ConfMan.getBool("subtitles")) { +			_talkTextMode = kTalkModeVoiceAndText; +		} else { +			_talkTextMode = kTalkModeVoiceOnly; +		} +	} +	_midiPlayer->setVolume(ConfMan.getInt("music_volume")); +} + +void ToucheEngine::writeConfigurationSettings() { +	switch (_talkTextMode) { +	case kTalkModeTextOnly: +		ConfMan.setBool("speech_mute", true); +		ConfMan.setBool("subtitles", true); +		break; +	case kTalkModeVoiceOnly: +		ConfMan.setBool("speech_mute", false); +		ConfMan.setBool("subtitles", false); +		break; +	case kTalkModeVoiceAndText: +		ConfMan.setBool("speech_mute", false); +		ConfMan.setBool("subtitles", true); +		break; +	} +	ConfMan.setInt("music_volume", _midiPlayer->getVolume()); +	ConfMan.flushToDisk(); +} +  void ToucheEngine::mainLoop() {  	restart(); @@ -201,6 +230,8 @@ void ToucheEngine::mainLoop() {  	_system->warpMouse(_inp_mousePos.x, _inp_mousePos.y);  	setPalette(0, 255, 0, 0, 0); +	readConfigurationSettings(); +  	if (ConfMan.hasKey("save_slot")) {  		loadGameState(ConfMan.getInt("save_slot"));  		_newEpisodeNum = _currentEpisodeNum; @@ -209,10 +240,10 @@ void ToucheEngine::mainLoop() {  	const int cycleDelay = 1000 / (1193180 / 32768);  	uint32 frameTimeStamp = _system->getMillis();  	for (uint32 cycleCounter = 0; _flagsTable[611] == 0; ++cycleCounter) { -		if ((cycleCounter & 2) == 0) { +		if ((cycleCounter % 3) == 0) {  			runCycle();  		} -		if ((cycleCounter & 1) == 0) { +		if ((cycleCounter % 2) == 0) {  			fadePaletteFromFlags();   		}  		int delay = _system->getMillis() - frameTimeStamp; @@ -223,9 +254,11 @@ void ToucheEngine::mainLoop() {  		_system->delayMillis(delay);  		frameTimeStamp = _system->getMillis();  	} + +	writeConfigurationSettings();  } -void ToucheEngine::processEvents() { +void ToucheEngine::processEvents(bool handleKeyEvents) {  	OSystem::Event event;  	while (_system->pollEvent(event)) {  		switch (event.type) { @@ -233,6 +266,9 @@ void ToucheEngine::processEvents() {  			_flagsTable[611] = 1;  			break;  		case OSystem::EVENT_KEYDOWN: +			if (!handleKeyEvents) { +				break; +			}  			_flagsTable[600] = event.kbd.keycode;  			if (event.kbd.keycode == 27) { // ESC  				if (_displayQuitDialog) { @@ -337,7 +373,6 @@ void ToucheEngine::runCycle() {  	if (_flagsTable[612] != 0) {  		_flagsTable[613] = getRandomNumber(_flagsTable[612]);  	} -	processEvents();  	sortKeyChars();  	for (int i = 0; i < NUM_KEYCHARS; ++i) {  		runKeyCharScript(&_keyCharsTable[i]); @@ -369,6 +404,7 @@ void ToucheEngine::runCycle() {  	if (_flagsTable[299]) {  		--_flagsTable[299];  	} +	processEvents();  }  int16 ToucheEngine::getRandomNumber(int max) { @@ -997,12 +1033,11 @@ void ToucheEngine::moveKeyChar(uint8 *dst, int dstPitch, KeyChar *key) {  			}  			uint8 *dstCur = dst + copyRegion.r.top * dstPitch + copyRegion.r.left; -			const int spr_y1 = srcOffsY + copyRegion.srcY; -			const int spr_x1 = srcOffsX + copyRegion.srcX; -			const uint8 *srcSpr = spr->ptr + spr_y1 * spr->bitmapWidth + spr_x1; +			const uint8 *srcSpr = spr->ptr + (srcOffsY + copyRegion.srcY) * spr->bitmapWidth; +			srcSpr += vflipped ? srcOffsX + spr->w - 1 - copyRegion.srcX : srcOffsX + copyRegion.srcX;  			for (int h = 0; h < copyRegion.r.height(); ++h) {  				for (int w = 0; w < copyRegion.r.width(); ++w) { -					uint8 color = vflipped ? srcSpr[spr->w - 1 - w] : srcSpr[w]; +					uint8 color = vflipped ? srcSpr[-w] : srcSpr[w];  					if (color != 0) {  						dstCur[w] = color;  					} @@ -1663,9 +1698,9 @@ void ToucheEngine::handleMouseClickOnInventory(int flag) {  				if (_inp_leftMouseButtonPressed) {  					int replyNum = _inp_mousePos.y - _roomAreaRect.height();  					if (replyNum < 40) { -						drawCharacterConversationRepeat(); +						scrollUpConversationChoice();  					} else { -						drawCharacterConversationRepeat2(); +						scrollDownConversationChoice();  					}  					_inp_leftMouseButtonPressed = false;  				} @@ -1718,7 +1753,6 @@ void ToucheEngine::updateSpeech() {  	if (_speechPlaying) {  		if (!_mixer->isSoundHandleActive(_speechHandle)) {  			_speechPlaying = false; -			_defaultSoundPriority = 0;  		}  	}  } @@ -1783,7 +1817,7 @@ int ToucheEngine::handleActionMenuUnderCursor(const int16 *actions, int offs, in  	_redrawScreenCounter1 = 2;  	Common::Rect rect(0, y, 640, y + h);  	i = -1; -	while (_inp_rightMouseButtonPressed) { +	while (_inp_rightMouseButtonPressed && _flagsTable[611] == 0) {  		if (rect.contains(_inp_mousePos)) {  			int c = (_inp_mousePos.y - y) / 16;  			if (c != i) { @@ -1803,31 +1837,7 @@ int ToucheEngine::handleActionMenuUnderCursor(const int16 *actions, int offs, in  			updateScreenArea(_offscreenBuffer, 640, offs, drawY, offs, drawY, strW, 16);  			i = -1;  		} - -		OSystem::Event event; -		while (_system->pollEvent(event)) { -			switch (event.type) { -			case OSystem::EVENT_QUIT: -				_flagsTable[611] = 1; -				break; -			case OSystem::EVENT_MOUSEMOVE: -				_inp_mousePos.x = event.mouse.x; -				_inp_mousePos.y = event.mouse.y; -				break; -			case OSystem::EVENT_RBUTTONDOWN: -				_inp_mousePos.x = event.mouse.x; -				_inp_mousePos.y = event.mouse.y; -				_inp_rightMouseButtonPressed = true; -				break; -			case OSystem::EVENT_RBUTTONUP: -				_inp_mousePos.x = event.mouse.x; -				_inp_mousePos.y = event.mouse.y; -				_inp_rightMouseButtonPressed = false; -				break; -			default: -				break; -			} -		} +		processEvents(false);  		_system->updateScreen();  		_system->delayMillis(50);  	} @@ -2391,19 +2401,19 @@ void ToucheEngine::clearConversationChoices() {  		_conversationChoicesTable[i].num = 0;  		_conversationChoicesTable[i].msg = 0;  	} -	_drawCharacterConversionRepeatCounter = 0; +	_scrollConversationChoiceOffset = 0;  } -void ToucheEngine::drawCharacterConversationRepeat2() { -	if (_conversationChoicesTable[4 + _drawCharacterConversionRepeatCounter].msg != 0) { -		++_drawCharacterConversionRepeatCounter; +void ToucheEngine::scrollDownConversationChoice() { +	if (_conversationChoicesTable[4 + _scrollConversationChoiceOffset].msg != 0) { +		++_scrollConversationChoiceOffset;  		drawCharacterConversation();  	}  } -void ToucheEngine::drawCharacterConversationRepeat() { -	if (_drawCharacterConversionRepeatCounter != 0) { -		--_drawCharacterConversionRepeatCounter; +void ToucheEngine::scrollUpConversationChoice() { +	if (_scrollConversationChoiceOffset != 0) { +		--_scrollConversationChoiceOffset;  		drawCharacterConversation();  	}  } @@ -2422,7 +2432,7 @@ void ToucheEngine::drawCharacterConversation() {  	}  	drawConversationPanel();  	for (int i = 0; i < 4; ++i) { -		drawString(_offscreenBuffer, 640, 214, 42, 328 + i * 16, _conversationChoicesTable[_drawCharacterConversionRepeatCounter + i].msg); +		drawString(_offscreenBuffer, 640, 214, 42, 328 + i * 16, _conversationChoicesTable[_scrollConversationChoiceOffset + i].msg);  	}  	updateScreenArea(_offscreenBuffer, 640, 0, 320, 0, 320, 640, 80);  	_conversationAreaCleared = false; @@ -2430,7 +2440,7 @@ void ToucheEngine::drawCharacterConversation() {  void ToucheEngine::drawConversationString(int num, uint16 color) {  	const int y = 328 + num * 16; -	drawString(_offscreenBuffer, 640, color, 42, y, _conversationChoicesTable[num + _drawCharacterConversionRepeatCounter].msg); +	drawString(_offscreenBuffer, 640, color, 42, y, _conversationChoicesTable[num + _scrollConversationChoiceOffset].msg);  	updateScreenArea(_offscreenBuffer, 640, 0, y, 0, y, 640, 16);  } @@ -2443,11 +2453,11 @@ void ToucheEngine::clearConversationArea() {  void ToucheEngine::setupConversationScript(int num) {  	debugC(9, kDebugEngine, "ToucheEngine::setupConversationScript(%d)", num);  	if (num < 5 && _conversationChoicesTable[num].msg != 0) { -		num = _conversationChoicesTable[_drawCharacterConversionRepeatCounter + num].num; +		num = _conversationChoicesTable[_scrollConversationChoiceOffset + num].num;  		KeyChar *key = &_keyCharsTable[_currentKeyCharNum];  		key->scriptDataOffset = _programConversationTable[_currentConversation + num].offset;  		key->scriptStackPtr = &key->scriptStackTable[39]; -		_drawCharacterConversionRepeatCounter = 0; +		_scrollConversationChoiceOffset = 0;  		removeConversationChoice(num);  		clearConversationArea();  	} diff --git a/engines/touche/touche.h b/engines/touche/touche.h index 48140e877d..812e4a528c 100644 --- a/engines/touche/touche.h +++ b/engines/touche/touche.h @@ -343,8 +343,10 @@ public:  protected:  	void restart(); +	void readConfigurationSettings(); +	void writeConfigurationSettings();  	void mainLoop(); -	void processEvents(); +	void processEvents(bool handleKeyEvents = true);  	void runCycle();  	int16 getRandomNumber(int max);  	void changePaletteRange(); @@ -432,8 +434,8 @@ protected:  	void runConversationScript(uint16 offset);  	void findConversationByNum(int16 num);  	void clearConversationChoices(); -	void drawCharacterConversationRepeat2(); -	void drawCharacterConversationRepeat(); +	void scrollDownConversationChoice(); +	void scrollUpConversationChoice();  	void drawCharacterConversation();  	void drawConversationString(int num, uint16 color);  	void clearConversationArea(); @@ -611,7 +613,6 @@ protected:  	int _saveLoadCurrentPage;  	int _saveLoadCurrentSlot; -	int _defaultSoundPriority;  	int _newMusicNum;  	int _currentMusicNum;  	int _newSoundNum; @@ -650,7 +651,7 @@ protected:  	int _conversationReplyNum;  	bool _conversationEnded;  	int _conversationNum; -	int _drawCharacterConversionRepeatCounter; +	int _scrollConversationChoiceOffset;  	int _currentConversation;  	bool _disableConversationScript;  	bool _conversationAreaCleared; diff --git a/engines/touche/ui.cpp b/engines/touche/ui.cpp index 5dbcd41a29..7c9c28b9cf 100644 --- a/engines/touche/ui.cpp +++ b/engines/touche/ui.cpp @@ -493,14 +493,14 @@ void ToucheEngine::drawConversationPanel() {  	--dstX;  	Graphics::copyRect(_offscreenBuffer, 640, dstX, 320, _convKitData, 152, 120, 0, 7, 80);  	dstX -= 3; -	if (_drawCharacterConversionRepeatCounter != 0) { +	if (_scrollConversationChoiceOffset != 0) {  		drawConversationPanelBorder(320, 72, 0);  		Graphics::copyRect(_offscreenBuffer, 640, 0, 320, _convKitData, 152, 128, 0, 24, 21);  		Graphics::copyRect(_offscreenBuffer, 640, dstX, 320, _convKitData, 152, 128, 34, 10, 10);  	} else {  		drawConversationPanelBorder(320, 24, 0);  	} -	if (_conversationChoicesTable[_drawCharacterConversionRepeatCounter + 4].msg != 0) { +	if (_conversationChoicesTable[_scrollConversationChoiceOffset + 4].msg != 0) {  		drawConversationPanelBorder(394, 72, 74);  		Graphics::copyRect(_offscreenBuffer, 640, 0, 379, _convKitData, 152, 128, 59, 24, 21);  		Graphics::copyRect(_offscreenBuffer, 640, dstX, 394, _convKitData, 152, 128, 46, 10, 6);  | 
