aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/touche/midi.cpp2
-rw-r--r--engines/touche/plugin.cpp2
-rw-r--r--engines/touche/resource.cpp3
-rw-r--r--engines/touche/saveload.cpp144
-rw-r--r--engines/touche/touche.cpp120
-rw-r--r--engines/touche/touche.h11
-rw-r--r--engines/touche/ui.cpp4
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);