diff options
author | Gregory Montoir | 2006-11-07 22:24:48 +0000 |
---|---|---|
committer | Gregory Montoir | 2006-11-07 22:24:48 +0000 |
commit | f6f1dac199a972339b30f14f5d7630fd0807f670 (patch) | |
tree | 8c64318ce7eb15bdd3a686eff464b9e6eced8eba /engines/touche/touche.cpp | |
parent | e1efdfc7f6553250840f910764ca3a70590be82d (diff) | |
download | scummvm-rg350-f6f1dac199a972339b30f14f5d7630fd0807f670.tar.gz scummvm-rg350-f6f1dac199a972339b30f14f5d7630fd0807f670.tar.bz2 scummvm-rg350-f6f1dac199a972339b30f14f5d7630fd0807f670.zip |
cleanup
svn-id: r24654
Diffstat (limited to 'engines/touche/touche.cpp')
-rw-r--r-- | engines/touche/touche.cpp | 172 |
1 files changed, 88 insertions, 84 deletions
diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp index 8a759c250a..75497e1755 100644 --- a/engines/touche/touche.cpp +++ b/engines/touche/touche.cpp @@ -53,6 +53,7 @@ ToucheEngine::ToucheEngine(OSystem *system, Common::Language language) _roomNeedRedraw = false; _fastWalkMode = false; + _fastMode = false; _currentObjectNum = -1; _objectDescriptionNum = 0; @@ -193,27 +194,30 @@ void ToucheEngine::restart() { void ToucheEngine::mainLoop() { restart(); + _inp_mousePos.x = 640 / 2; _inp_mousePos.y = 352 / 2; - _inp_mouseButtonClicked = false; - _inp_mouseButtonPressed = false; + _inp_leftMouseButtonPressed = false; + _inp_rightMouseButtonPressed = false; _system->warpMouse(_inp_mousePos.x, _inp_mousePos.y); setPalette(0, 255, 0, 0, 0); -#ifdef NORMAL_GAME_SPEED + + if (ConfMan.hasKey("save_slot")) { + loadGameState(ConfMan.getInt("save_slot")); + _newEpisodeNum = _currentEpisodeNum; + } + const int cycleDelay = 1000 / (1193180 / 32768); -#else - const int cycleDelay = 10; -#endif uint32 frameTimeStamp = _system->getMillis(); for (uint32 cycleCounter = 0; _flagsTable[611] == 0; ++cycleCounter) { - if ((cycleCounter & 3) == 0) { + if ((cycleCounter & 2) == 0) { runCycle(); } - if ((cycleCounter & 2) == 0) { + if ((cycleCounter & 1) == 0) { fadePaletteFromFlags(); } int delay = _system->getMillis() - frameTimeStamp; - delay = cycleDelay - delay; + delay = (_fastMode ? 10 : cycleDelay) - delay; if (delay < 1) { delay = 1; } @@ -235,31 +239,32 @@ void ToucheEngine::processEvents() { if (_displayQuitDialog) { _flagsTable[611] = ui_displayQuitDialog(); } - } - if (event.kbd.keycode == 286) { // F5 + } else if (event.kbd.keycode == 286) { // F5 if (_flagsTable[618] == 0 && !_hideInventoryTexts) { ui_handleOptions(0); } - } - if (event.kbd.keycode == 290) { // F9 + } else if (event.kbd.keycode == 290) { // F9 _fastWalkMode = true; - } - if (event.kbd.keycode == 291) { // F10 + } else if (event.kbd.keycode == 291) { // F10 _fastWalkMode = false; } - if (event.kbd.ascii == 't') { - ++_talkTextMode; - if (_talkTextMode == kTalkModeCount) { - _talkTextMode = 0; + if (event.kbd.flags == OSystem::KBD_CTRL) { + if (event.kbd.keycode == 'd') { + // enable debugging stuff ? + _flagsTable[777] = 1; + } else if (event.kbd.keycode == 'f') { + _fastMode = !_fastMode; + } + } else { + if (event.kbd.ascii == 't') { + ++_talkTextMode; + if (_talkTextMode == kTalkModeCount) { + _talkTextMode = 0; + } + ui_displayTextMode(-(92 + _talkTextMode)); + } else if (event.kbd.ascii == ' ') { + updateKeyCharTalk(2); } - ui_displayTextMode(-(92 + _talkTextMode)); - } - if (event.kbd.ascii == 'd') { - // enable debugging stuff ? - _flagsTable[777] = 1; - } - if (event.kbd.ascii == ' ') { - updateKeyCharTalk(2); } break; case OSystem::EVENT_MOUSEMOVE: @@ -269,7 +274,7 @@ void ToucheEngine::processEvents() { case OSystem::EVENT_LBUTTONDOWN: _inp_mousePos.x = event.mouse.x; _inp_mousePos.y = event.mouse.y; - _inp_mouseButtonClicked = true; + _inp_leftMouseButtonPressed = true; break; case OSystem::EVENT_LBUTTONUP: _inp_mousePos.x = event.mouse.x; @@ -278,12 +283,12 @@ void ToucheEngine::processEvents() { case OSystem::EVENT_RBUTTONDOWN: _inp_mousePos.x = event.mouse.x; _inp_mousePos.y = event.mouse.y; - _inp_mouseButtonPressed = true; + _inp_rightMouseButtonPressed = true; break; case OSystem::EVENT_RBUTTONUP: _inp_mousePos.x = event.mouse.x; _inp_mousePos.y = event.mouse.y; - _inp_mouseButtonPressed = false; + _inp_rightMouseButtonPressed = false; break; default: break; @@ -439,7 +444,8 @@ void ToucheEngine::setupNewEpisode() { if (_newEpisodeNum == 91) { _displayQuitDialog = true; } -// flushDigitalSounds(); + res_stopSound(); + res_stopSpeech(); setupEpisode(_newEpisodeNum); runCurrentKeyCharScript(1); _newEpisodeNum = 0; @@ -824,11 +830,7 @@ void ToucheEngine::redrawRoom() { void ToucheEngine::fadePalette(int firstColor, int lastColor, int scale, int scaleInc, int fadingStepsCount) { for (int i = 0; i < fadingStepsCount; ++i) { scale += scaleInc; - if (scale > 255) { - scale = 0; - } else if (scale < 0) { - scale = 0; - } + scale = CLIP(scale, 0, 255); setPalette(firstColor, lastColor, scale, scale, scale); _system->updateScreen(); _system->delayMillis(10); @@ -969,6 +971,7 @@ void ToucheEngine::moveKeyChar(uint8 *dst, int dstPitch, KeyChar *key) { frameDir = READ_LE_UINT16(sequenceData + frameDir * 2); } if (keyChar == 0) { + assert(frameDir < NUM_DIRECTIONS); if (_directionsTable[frameDir] <= _flagsTable[176]) { continue; } @@ -1033,6 +1036,7 @@ void ToucheEngine::moveKeyChar(uint8 *dst, int dstPitch, KeyChar *key) { frameDir = READ_LE_UINT16(sequenceData + frameDir * 2); } if (keyChar == 0) { + assert(frameDir < NUM_DIRECTIONS); if (_directionsTable[frameDir] <= _flagsTable[176]) { continue; } @@ -1373,7 +1377,7 @@ void ToucheEngine::updateCursor(int num) { } } -void ToucheEngine::handleMouseButtonClicked() { +void ToucheEngine::handleLeftMouseButtonClickOnInventory() { for (int area = 0; area < ARRAYSIZE(_inventoryAreasTable); ++area) { if (_inventoryAreasTable[area].contains(_inp_mousePos)) { if (area >= kInventoryObject1 && area <= kInventoryObject6) { @@ -1457,7 +1461,7 @@ void ToucheEngine::handleMouseButtonClicked() { } } -void ToucheEngine::handleMouseButtonPressed() { +void ToucheEngine::handleRightMouseButtonClickOnInventory() { for (int area = kInventoryObject1; area <= kInventoryObject6; ++area) { const Common::Rect &r = _inventoryAreasTable[area]; if (r.contains(_inp_mousePos)) { @@ -1480,16 +1484,16 @@ void ToucheEngine::handleMouseButtonPressed() { void ToucheEngine::handleMouseInput(int flag) { if (_disabledInputCounter != 0 || _flagsTable[618] != 0) { - _inp_mouseButtonPressed = false; + _inp_rightMouseButtonPressed = false; } if (_inp_mousePos.y < _roomAreaRect.height()) { - handleMouseInputRoomArea(flag); + handleMouseClickOnRoom(flag); } else { - handleMouseInputInventoryArea(flag); + handleMouseClickOnInventory(flag); } } -void ToucheEngine::handleMouseInputRoomArea(int flag) { +void ToucheEngine::handleMouseClickOnRoom(int flag) { if (_hideInventoryTexts && _conversationReplyNum != -1 && !_conversationAreaCleared) { drawConversationString(_conversationReplyNum, 0xD6); } @@ -1539,8 +1543,8 @@ void ToucheEngine::handleMouseInputRoomArea(int flag) { if (_giveItemToCounter == 0 && !_hideInventoryTexts) { if (hitBox->contains(hitPosX, hitPosY)) { if (!itemDisabled) { - if (_inp_mouseButtonClicked && _currentCursorObject != 0) { - _inp_mouseButtonClicked = false; + if (_inp_leftMouseButtonPressed && _currentCursorObject != 0) { + _inp_leftMouseButtonPressed = false; itemSelected = true; _flagsTable[119] = _currentCursorObject; if (_currentCursorObject == 1) { @@ -1590,8 +1594,8 @@ void ToucheEngine::handleMouseInputRoomArea(int flag) { _programHitBoxTable[i].hitBoxes[1] = Common::Rect(strPosX, strPosY, strPosX + strWidth, strPosY + 16); _programHitBoxTable[i].state |= 0x8000; } - if (_inp_mouseButtonClicked) { - _inp_mouseButtonClicked = false; + if (_inp_leftMouseButtonPressed) { + _inp_leftMouseButtonPressed = false; if (_currentCursorObject != 0) { updateCursor(_currentKeyCharNum); } else { @@ -1601,9 +1605,9 @@ void ToucheEngine::handleMouseInputRoomArea(int flag) { } } } else { - if (_inp_mouseButtonPressed && !itemDisabled && !itemSelected) { + if (_inp_rightMouseButtonPressed && !itemDisabled && !itemSelected) { int act = handleActionMenuUnderCursor(_programHitBoxTable[i].actions, _inp_mousePos.x, _inp_mousePos.y, str); - _inp_mouseButtonPressed = false; + _inp_rightMouseButtonPressed = false; int16 facing = (keyCharNewPosX <= _keyCharsTable[_currentKeyCharNum].xPos) ? 3 : 0; _keyCharsTable[_currentKeyCharNum].facingDirection = facing; if (act != 0) { @@ -1622,8 +1626,8 @@ void ToucheEngine::handleMouseInputRoomArea(int flag) { } } } - if (_inp_mouseButtonClicked) { - _inp_mouseButtonClicked = false; + if (_inp_leftMouseButtonPressed) { + _inp_leftMouseButtonPressed = false; if (_currentCursorObject != 0) { if (_currentCursorObject != 1) { addItemToInventory(_currentKeyCharNum, _currentCursorObject); @@ -1642,7 +1646,7 @@ void ToucheEngine::handleMouseInputRoomArea(int flag) { } } -void ToucheEngine::handleMouseInputInventoryArea(int flag) { +void ToucheEngine::handleMouseClickOnInventory(int flag) { if (flag) { drawHitBoxes(); } @@ -1661,8 +1665,8 @@ void ToucheEngine::handleMouseInputInventoryArea(int flag) { drawConversationString(replyNum, 0xFF); _conversationReplyNum = replyNum; } - if (_inp_mouseButtonClicked) { - _inp_mouseButtonClicked = false; + if (_inp_leftMouseButtonPressed) { + _inp_leftMouseButtonPressed = false; setupConversationScript(replyNum); _conversationReplyNum = -1; } @@ -1672,25 +1676,25 @@ void ToucheEngine::handleMouseInputInventoryArea(int flag) { drawConversationString(_conversationReplyNum, 0xD6); } _conversationReplyNum = -1; - if (_inp_mouseButtonClicked) { + if (_inp_leftMouseButtonPressed) { int replyNum = _inp_mousePos.y - _roomAreaRect.height(); if (replyNum < 40) { drawCharacterConversationRepeat(); } else { drawCharacterConversationRepeat2(); } - _inp_mouseButtonClicked = false; + _inp_leftMouseButtonPressed = false; } } } } else if (_disabledInputCounter == 0 && !_hideInventoryTexts) { - if (_inp_mouseButtonClicked) { - handleMouseButtonClicked(); - _inp_mouseButtonClicked = false; + if (_inp_leftMouseButtonPressed) { + handleLeftMouseButtonClickOnInventory(); + _inp_leftMouseButtonPressed = false; } - if (_inp_mouseButtonPressed) { - handleMouseButtonPressed(); - _inp_mouseButtonPressed = false; + if (_inp_rightMouseButtonPressed) { + handleRightMouseButtonClickOnInventory(); + _inp_rightMouseButtonPressed = false; } } } @@ -1707,7 +1711,7 @@ void ToucheEngine::clearRoomArea() { } void ToucheEngine::startNewMusic() { -// bool loopMusic = _flagsTable[619] != 0; // ? +// _midiPlayer->setLooping(_flagsTable[619] != 0); if (_newMusicNum != 0 && _newMusicNum != _currentMusicNum) { res_loadMusic(_newMusicNum); _currentMusicNum = _newMusicNum; @@ -1795,7 +1799,7 @@ int ToucheEngine::handleActionMenuUnderCursor(const int16 *actions, int offs, in _redrawScreenCounter1 = 2; Common::Rect rect(0, y, 640, y + h); i = -1; - while (_inp_mouseButtonPressed) { + while (_inp_rightMouseButtonPressed) { if (rect.contains(_inp_mousePos)) { int c = (_inp_mousePos.y - y) / 16; if (c != i) { @@ -1829,12 +1833,12 @@ int ToucheEngine::handleActionMenuUnderCursor(const int16 *actions, int offs, in case OSystem::EVENT_RBUTTONDOWN: _inp_mousePos.x = event.mouse.x; _inp_mousePos.y = event.mouse.y; - _inp_mouseButtonPressed = true; + _inp_rightMouseButtonPressed = true; break; case OSystem::EVENT_RBUTTONUP: _inp_mousePos.x = event.mouse.x; _inp_mousePos.y = event.mouse.y; - _inp_mouseButtonPressed = false; + _inp_rightMouseButtonPressed = false; break; default: break; @@ -2005,24 +2009,24 @@ void ToucheEngine::initInventoryObjectsTable() { void ToucheEngine::initInventoryLists() { memset(_inventoryList1, 0, sizeof(_inventoryList1)); _inventoryList1[100] = -1; - _inventoryListPtrs[0] = _inventoryList1; - _inventoryListCount[3 * 0 + 0] = 0; // start offset - _inventoryListCount[3 * 0 + 1] = 100; // max number of items - _inventoryListCount[3 * 0 + 2] = 6; // items per inventory line + _inventoryStateTable[0].displayOffset = 0; + _inventoryStateTable[0].lastItem = 100; + _inventoryStateTable[0].itemsPerLine = 6; + _inventoryStateTable[0].itemsList = _inventoryList1; memset(_inventoryList2, 0, sizeof(_inventoryList2)); _inventoryList2[100] = -1; - _inventoryListPtrs[1] = _inventoryList2; - _inventoryListCount[3 * 1 + 0] = 0; - _inventoryListCount[3 * 1 + 1] = 100; - _inventoryListCount[3 * 1 + 2] = 6; + _inventoryStateTable[1].displayOffset = 0; + _inventoryStateTable[1].lastItem = 100; + _inventoryStateTable[1].itemsPerLine = 6; + _inventoryStateTable[1].itemsList = _inventoryList2; memset(_inventoryList3, 0, sizeof(_inventoryList3)); _inventoryList3[6] = -1; - _inventoryListPtrs[2] = _inventoryList3; - _inventoryListCount[3 * 2 + 0] = 0; - _inventoryListCount[3 * 2 + 1] = 6; - _inventoryListCount[3 * 2 + 2] = 6; + _inventoryStateTable[2].displayOffset = 0; + _inventoryStateTable[2].lastItem = 6; + _inventoryStateTable[2].itemsPerLine = 6; + _inventoryStateTable[2].itemsList = _inventoryList3; } void ToucheEngine::setupInventoryAreas() { @@ -2049,8 +2053,8 @@ void ToucheEngine::drawInventory(int index, int flag) { if (_objectDescriptionNum == index && flag == 0) { return; } - _inventoryVar1 = _inventoryListPtrs[index]; - _inventoryVar2 = &_inventoryListCount[index * 3]; + _inventoryVar1 = _inventoryStateTable[index].itemsList; + _inventoryVar2 = &_inventoryStateTable[index].displayOffset; _objectDescriptionNum = index; uint8 *dst = _offscreenBuffer + 640 * 352; res_loadSpriteImage(index + 12, dst); @@ -2088,7 +2092,7 @@ void ToucheEngine::drawAmountOfMoneyInInventory() { } void ToucheEngine::packInventoryItems(int index) { - int16 *p = _inventoryListPtrs[index]; + int16 *p = _inventoryStateTable[index].itemsList; for (int i = 0; *p != -1; ++i, ++p) { if (p[0] == 0 && p[1] != -1) { p[0] = p[1]; @@ -2098,8 +2102,8 @@ void ToucheEngine::packInventoryItems(int index) { } void ToucheEngine::appendItemToInventoryList(int index) { - int last = _inventoryListCount[index * 3 + 1] - 1; - int16 *p = _inventoryListPtrs[index]; + int last = _inventoryStateTable[index].lastItem - 1; + int16 *p = _inventoryStateTable[index].itemsList; if (p[last] != 0) { warning("Inventory %d Full", index); } else { @@ -2119,7 +2123,7 @@ void ToucheEngine::addItemToInventory(int inventory, int16 item) { } else { appendItemToInventoryList(inventory); assert(inventory >= 0 && inventory < 3); - int16 *p = _inventoryListPtrs[inventory]; + int16 *p = _inventoryStateTable[inventory].itemsList; for (int i = 0; *p != -1; ++i, ++p) { if (*p == 0) { *p = item; @@ -2138,7 +2142,7 @@ void ToucheEngine::removeItemFromInventory(int inventory, int16 item) { drawAmountOfMoneyInInventory(); } else { assert(inventory >= 0 && inventory < 3); - int16 *p = _inventoryListPtrs[inventory]; + int16 *p = _inventoryStateTable[inventory].itemsList; for (int i = 0; *p != -1; ++i, ++p) { if (*p == item) { *p = 0; |