From 7dab7b775b4472cc65ad59b80562a2164e4d4355 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 11 Mar 2018 21:41:25 +0100 Subject: SUPERNOVA: Renames wait2() to wait() --- engines/supernova/state.cpp | 66 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 33 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index e41edbf1d5..e41c85be15 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -813,7 +813,7 @@ void GameManager::telomat(int nr) { i >>= 1; if (i == 4) { _vm->renderText(kStringTelomat14, 50, 120, kColorGreen); - wait2(10); + wait(10); _vm->renderBox(0, 0, 320, 200, kColorBlack); _vm->renderRoom(*_currentRoom); _vm->paletteBrightness(); @@ -824,7 +824,7 @@ void GameManager::telomat(int nr) { if ((i == nr) || _rooms[BCORRIDOR]->getObject(4 + i)->hasProperty(CAUGHT)) { _vm->renderText(kStringTelomat15, 50, 120, kColorGreen); - wait2(10); + wait(10); _vm->renderBox(0, 0, 320, 200, kColorBlack); _vm->renderRoom(*_currentRoom); _vm->paletteBrightness(); @@ -834,7 +834,7 @@ void GameManager::telomat(int nr) { } _vm->renderText(kStringTelomat16, 50, 120, kColorGreen); - wait2(10); + wait(10); _vm->renderBox(0, 0, 320, 200, kColorBlack); _vm->renderRoom(*_currentRoom); _vm->paletteBrightness(); @@ -864,7 +864,7 @@ void GameManager::telomat(int nr) { waitOnInput(_timer1); _vm->removeMessage(); if (dialog(4, rows2, dial2, 0) != 3) { - wait2(10); + wait(10); say(kStringTelomat20); } _rooms[BCORRIDOR]->setSectionVisible(7, true); @@ -888,7 +888,7 @@ void GameManager::telomat(int nr) { if (_key.keycode == Common::KEYCODE_RETURN) { _vm->renderText(kStringShipSleepCabin9, 100, 120, kColorGreen); - wait2(10); + wait(10); } // fallthrough case Common::KEYCODE_ESCAPE: @@ -926,7 +926,7 @@ void GameManager::guardNoticed() { _vm->paletteFadeIn(); _vm->renderImage(2); reply(kStringGuardNoticed1, 2, 5); - wait2(2); + wait(2); reply(kStringGuardNoticed2, 2, 5); _vm->paletteFadeOut(); _currentRoom->setSectionVisible(2, false); @@ -948,18 +948,18 @@ void GameManager::busted(int i) { if (!_currentRoom->getObject(0)->hasProperty(OPENED)) { _vm->renderImage(i - 1); _vm->playSound(kAudioDoorOpen); - wait2(2); + wait(2); } _vm->renderImage(i); - wait2(3); + wait(3); _vm->renderImage(i + 3); _vm->playSound(kAudioVoiceHalt); _vm->renderImage(i); - wait2(5); + wait(5); if (_currentRoom->getId() == OFFICE_L2) i = 13; _vm->renderImage(i + 1); - wait2(3); + wait(3); _vm->renderImage(i + 2); shot(0, 0); } else if (_currentRoom->getId() == BCORRIDOR) @@ -974,7 +974,7 @@ void GameManager::busted(int i) { _vm->renderImage(33); // above } _vm->playSound(kAudioVoiceHalt); - wait2(3); + wait(3); shot(0, 0); } @@ -1121,7 +1121,7 @@ void GameManager::walk(int imgId) { _vm->renderImage(_prevImgId + 128); _vm->renderImage(imgId); _prevImgId = imgId; - wait2(3); + wait(3); } void GameManager::guardWalkEvent() { @@ -1137,7 +1137,7 @@ void GameManager::guardWalkEvent() { _vm->renderImage(_state._origin + 1); _prevImgId = _state._origin + 1; _vm->playSound(kAudioDoorOpen); - wait2(3); + wait(3); } int imgId; @@ -1158,13 +1158,13 @@ void GameManager::guardWalkEvent() { } _vm->renderImage(imgId); if (!behind) { - wait2(3); + wait(3); _vm->renderImage(_prevImgId + 128); _vm->playSound(kAudioDoorClose); } _prevImgId = imgId; - wait2(3); + wait(3); switch (_state._origin) { case 0: walk(12); @@ -1222,9 +1222,9 @@ void GameManager::guardWalkEvent() { if (behind) { _vm->renderImage(_state._destination + 1); _vm->playSound(kAudioDoorOpen); - wait2(3); + wait(3); _vm->renderImage(_prevImgId + 128); - wait2(3); + wait(3); _vm->renderImage(_state._destination + 1 + 128); _vm->playSound(kAudioDoorClose); _rooms[BCORRIDOR]->getObject(_state._destination + 4)->setProperty(OCCUPIED); @@ -1236,7 +1236,7 @@ void GameManager::guardWalkEvent() { _state._eventTime = _state._time + ticksToMsec(60); _state._eventCallback = kGuardWalkFn; } else { - wait2(18); + wait(18); SWAP(_state._origin, _state._destination); _state._eventCallback = kGuardWalkFn; } @@ -1274,7 +1274,7 @@ void GameManager::taxiEvent() { _currentRoom->setSectionVisible(2, false); _vm->renderImage(3); for (int i = 4; i <= 8; i++) { - wait2(2); + wait(2); _vm->renderImage(invertSection(i - 1)); _vm->renderImage(i); } @@ -1569,7 +1569,7 @@ void GameManager::changeRoom(RoomID id) { _newRoom = true; } -void GameManager::wait2(int ticks) { +void GameManager::wait(int ticks) { int32 end = _state._time + ticksToMsec(ticks); do { g_system->delayMillis(_vm->_delay); @@ -1652,9 +1652,9 @@ void GameManager::saveTime() { void GameManager::screenShake() { for (int i = 0; i < 12; ++i) { _vm->_system->setShakePos(8); - wait2(1); + wait(1); _vm->_system->setShakePos(0); - wait2(1); + wait(1); } } @@ -1768,14 +1768,14 @@ void GameManager::shot(int a, int b) { if (a) _vm->renderImage(a); _vm->playSound(kAudioGunShot); - wait2(2); + wait(2); if (b) _vm->renderImage(b); - wait2(2); + wait(2); if (a) _vm->renderImage(a); _vm->playSound(kAudioGunShot); - wait2(2); + wait(2); if (b) _vm->renderImage(b); @@ -2269,31 +2269,31 @@ void GameManager::executeRoom() { void GameManager::guardShot() { _vm->renderImage(2); _vm->renderImage(5); - wait2(3); + wait(3); _vm->renderImage(2); _vm->playSound(kAudioVoiceHalt); while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) - wait2(1); + wait(1); _vm->renderImage(5); - wait2(5); + wait(5); _vm->renderImage(3); - wait2(3); + wait(3); shot(4, 3); } void GameManager::guard3Shot() { _vm->renderImage(1); - wait2(3); + wait(3); _vm->playSound(kAudioVoiceHalt); // 46/0 while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) - wait2(1); + wait(1); - wait2(5); + wait(5); _vm->renderImage(2); - wait2(3); + wait(3); shot(3,2); } -- cgit v1.2.3 From 9689dffca9d44ab0a94d01f8fbc38ef0178c67b5 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 11 Mar 2018 21:47:30 +0100 Subject: SUPERNOVA: Removes mouseInput3() The function highlights dialog choices depending on the mouse position and loops till a mouse button is pressed. Since it is used in GameManager::dialog() only, inlining it seems reasonable, especially as the name was not descriptive in the first place. --- engines/supernova/state.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index e41c85be15..8356fe32de 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -1407,7 +1407,12 @@ int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number _currentSentence = -1; do { - mouseInput3(); + do { + _vm->updateEvents(); + mousePosDialog(_mouseX, _mouseY); + g_system->updateScreen(); + g_system->delayMillis(_vm->_delay); + } while (!_mouseClicked && !_vm->shouldQuit()); } while (_currentSentence == -1 && !_vm->shouldQuit()); _vm->renderBox(0, 138, 320, 62, kColorBlack); @@ -1540,15 +1545,6 @@ void GameManager::getInput() { } } -void GameManager::mouseInput3() { - do { - _vm->updateEvents(); - mousePosDialog(_mouseX, _mouseY); - g_system->updateScreen(); - g_system->delayMillis(_vm->_delay); - } while (!_mouseClicked && !_vm->shouldQuit()); -} - void GameManager::roomBrightness() { _roomBrightness = 255; if ((_currentRoom->getId() != OUTSIDE) && (_currentRoom->getId() < ROCKS) && _state._powerOff) -- cgit v1.2.3 From bb46e53667c017442bd456b3da384bbf82ca1347 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 11 Mar 2018 21:57:17 +0100 Subject: SUPERNOVA: Processes all keyboard queries in processInput() --- engines/supernova/state.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 8356fe32de..e88b4596a8 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -529,6 +529,10 @@ void GameManager::processInput(Common::KeyState &state) { _vm->quitGame(); } break; + case Common::KEYCODE_d: + if (state.flags & Common::KBD_CTRL) + _vm->_console->attach(); + break; default: break; } -- cgit v1.2.3 From ff5426c609a4affc0cd96cff38211f949c614989 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 11 Mar 2018 22:07:13 +0100 Subject: SUPERNOVA: Moves updateEvents() to GameManager updatEvents() depends on an initalized GameManager instance and mostly manipulates its state. So it seemed fitting to move it over. --- engines/supernova/state.cpp | 86 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 8 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index e88b4596a8..23cb277240 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -503,6 +503,76 @@ void GameManager::initGui() { _guiInventoryArrow[1].setTextPosition(273, 186); } +void GameManager::updateEvents() { + handleTime(); + if (_animationEnabled && !_vm->_messageDisplayed && _animationTimer == 0) + _currentRoom->animation(); + + if (_state._eventCallback != kNoFn && _state._time >= _state._eventTime) { + _vm->_allowLoadGame = false; + _vm->_allowSaveGame = false; + _state._eventTime = kMaxTimerValue; + EventFunction fn = _state._eventCallback; + _state._eventCallback = kNoFn; + switch (fn) { + case kNoFn: + break; + case kSupernovaFn: + supernovaEvent(); + break; + case kGuardReturnedFn: + guardReturnedEvent(); + break; + case kGuardWalkFn: + guardWalkEvent(); + break; + case kTaxiFn: + taxiEvent(); + break; + case kSearchStartFn: + searchStartEvent(); + break; + } + _vm->_allowLoadGame = true; + _vm->_allowSaveGame = true; + return; + } + + if (_state._alarmOn && _state._timeAlarm <= _state._time) { + _state._alarmOn = false; + alarm(); + return; + } + + _mouseClicked = false; + _keyPressed = false; + Common::Event event; + while (g_system->getEventManager()->pollEvent(event)) { + switch (event.type) { + case Common::EVENT_KEYDOWN: + _keyPressed = true; + processInput(event.kbd); + break; + case Common::EVENT_LBUTTONUP: + // fallthrough + case Common::EVENT_RBUTTONUP: + if (_currentRoom->getId() != INTRO && + _vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) + return; + _mouseClicked = true; + // fallthrough + case Common::EVENT_MOUSEMOVE: + _mouseClickType = event.type; + _mouseX = event.mouse.x; + _mouseY = event.mouse.y; + if (_guiEnabled) + processInput(); + break; + default: + break; + } + } +} void GameManager::processInput(Common::KeyState &state) { _key = state; @@ -1412,7 +1482,7 @@ int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number _currentSentence = -1; do { do { - _vm->updateEvents(); + updateEvents(); mousePosDialog(_mouseX, _mouseY); g_system->updateScreen(); g_system->delayMillis(_vm->_delay); @@ -1500,7 +1570,7 @@ void GameManager::drawInventory() { uint16 GameManager::getKeyInput(bool blockForPrintChar) { while (!_vm->shouldQuit()) { - _vm->updateEvents(); + updateEvents(); if (_keyPressed) { if (blockForPrintChar) { if (Common::isPrint(_key.keycode) || @@ -1530,7 +1600,7 @@ uint16 GameManager::getKeyInput(bool blockForPrintChar) { Common::EventType GameManager::getMouseInput() { while (!_vm->shouldQuit()) { - _vm->updateEvents(); + updateEvents(); if (_mouseClicked) return _mouseClickType; g_system->updateScreen(); @@ -1541,7 +1611,7 @@ Common::EventType GameManager::getMouseInput() { void GameManager::getInput() { while (!_vm->shouldQuit()) { - _vm->updateEvents(); + updateEvents(); if (_mouseClicked || _keyPressed) break; g_system->updateScreen(); @@ -1573,7 +1643,7 @@ void GameManager::wait(int ticks) { int32 end = _state._time + ticksToMsec(ticks); do { g_system->delayMillis(_vm->_delay); - _vm->updateEvents(); + updateEvents(); g_system->updateScreen(); } while (_state._time < end && !_vm->shouldQuit()); } @@ -1582,7 +1652,7 @@ void GameManager::waitOnInput(int ticks) { int32 end = _state._time + ticksToMsec(ticks); do { g_system->delayMillis(_vm->_delay); - _vm->updateEvents(); + updateEvents(); g_system->updateScreen(); } while (_state._time < end && !_vm->shouldQuit() && !_keyPressed && !_mouseClicked); } @@ -1592,7 +1662,7 @@ bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode) { int32 end = _state._time + ticksToMsec(ticks); do { g_system->delayMillis(_vm->_delay); - _vm->updateEvents(); + updateEvents(); g_system->updateScreen(); if (_keyPressed) { keycode = _key.keycode; @@ -2342,7 +2412,7 @@ void GameManager::alarmSound() { _vm->playSound(kAudioAlarm); while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) { g_system->delayMillis(_vm->_delay); - _vm->updateEvents(); + updateEvents(); g_system->updateScreen(); } } while (_state._time < end && !_vm->shouldQuit()); -- cgit v1.2.3 From 3c81c61df9647ca00c558b6f4f8e51e8b3f308e9 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 11 Mar 2018 22:10:19 +0100 Subject: SUPERNOVA: Removes TODO --- engines/supernova/state.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 23cb277240..bbba0eb086 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -1914,7 +1914,6 @@ void GameManager::dead(StringID messageId) { _vm->paletteFadeOut(); _vm->removeMessage(); - // TODO: Load screen destroyRooms(); initRooms(); initState(); -- cgit v1.2.3 From dc38d6a8cde47e634bc1c869dbbed476ae34017c Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 11 Mar 2018 23:13:36 +0100 Subject: SUPERNOVA: Renames _timer1 to _messageDuration --- engines/supernova/state.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index bbba0eb086..08b6d2b63a 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -370,7 +370,7 @@ void GameManager::initState() { _oldTime = g_system->getMillis(); _timerPaused = 0; _timePaused = false; - _timer1 = 0; + _messageDuration = 0; _animationTimer = 0; _currentSentence = -1; @@ -913,7 +913,7 @@ void GameManager::telomat(int nr) { _vm->renderRoom(*_currentRoom); _vm->paletteBrightness(); _vm->renderMessage(kStringTelomat17, kMessageTop, name2[i]); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); if (_state._nameSeen[nr]) { Common::String string = _vm->getGameString(kStringTelomat2); @@ -925,7 +925,7 @@ void GameManager::telomat(int nr) { switch (dialog(3, rows1, dial1, 1)) { case 1: _vm->renderMessage(kStringTelomat18, kMessageTop); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); if ((_state._destination == 255) && !_rooms[BCORRIDOR]->isSectionVisible(7)) { _state._eventTime = _state._time + ticksToMsec(150); @@ -935,7 +935,7 @@ void GameManager::telomat(int nr) { } break; case 0: _vm->renderMessage(kStringTelomat19, kMessageTop); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); if (dialog(4, rows2, dial2, 0) != 3) { wait(10); @@ -1099,7 +1099,7 @@ void GameManager::supernovaEvent() { CursorMan.showMouse(false); if (_currentRoom->getId() <= CAVE) { _vm->renderMessage(kStringSupernova1); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->paletteFadeOut(); changeRoom(MEETUP); @@ -1112,7 +1112,7 @@ void GameManager::supernovaEvent() { _vm->paletteFadeIn(); } _vm->renderMessage(kStringSupernova2); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->setCurrentImage(26); _vm->renderImage(0); @@ -1125,23 +1125,23 @@ void GameManager::supernovaEvent() { if (_currentRoom->getId() == GLIDER) { _vm->renderMessage(kStringSupernova3); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->_menuBrightness = 0; _vm->paletteBrightness(); _vm->renderRoom(*_currentRoom); _vm->paletteFadeIn(); _vm->renderMessage(kStringSupernova4, kMessageTop); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->renderMessage(kStringSupernova5, kMessageTop); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->renderMessage(kStringSupernova6, kMessageTop); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->renderMessage(kStringSupernova7, kMessageTop); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); changeRoom(MEETUP2); _rooms[MEETUP2]->setSectionVisible(1, true); @@ -1151,7 +1151,7 @@ void GameManager::supernovaEvent() { _inventory.remove(*(_rooms[ROGER]->getObject(8))); } else { _vm->renderMessage(kStringSupernova8); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->_menuBrightness = 0; _vm->paletteBrightness(); @@ -1995,10 +1995,10 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) { } } else if ((verb == ACTION_LOOK) && (obj1._id == NEWSPAPER)) { _vm->renderMessage(kStringGenericInteract_10); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->renderMessage(kStringGenericInteract_11); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->setCurrentImage(2); _vm->renderImage(0); @@ -2196,7 +2196,7 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) { _vm->renderMessage(kStringGenericInteract_30); else if ((verb == ACTION_LOOK) && (obj1._id == BOOK2)) { _vm->renderMessage(kStringGenericInteract_31); - waitOnInput(_timer1); + waitOnInput(_messageDuration); _vm->removeMessage(); _vm->renderMessage(kStringGenericInteract_32); } else @@ -2406,7 +2406,7 @@ void GameManager::alarmSound() { _vm->removeMessage(); _vm->renderMessage(kStringAlarm); - int32 end = _state._time + ticksToMsec(_timer1); + int32 end = _state._time + ticksToMsec(_messageDuration); do { _vm->playSound(kAudioAlarm); while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) { -- cgit v1.2.3 From 26543be637feee241812e40785b731a9eff86cdf Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Wed, 21 Mar 2018 12:14:24 +0100 Subject: SUPERNOVA: Adds sound abstraction --- engines/supernova/state.cpp | 50 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 08b6d2b63a..2e887660ed 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -285,9 +285,10 @@ StringID GameManager::guiStatusCommands[] = { kStringStatusCommandPress, kStringStatusCommandPull, kStringStatusCommandUse, kStringStatusCommandTalk, kStringStatusCommandGive }; -GameManager::GameManager(SupernovaEngine *vm) +GameManager::GameManager(SupernovaEngine *vm, Sound *sound) : _inventory(_inventoryScroll) - , _vm(vm) { + , _vm(vm) + , _sound(sound) { initRooms(); changeRoom(INTRO); initState(); @@ -556,8 +557,7 @@ void GameManager::updateEvents() { case Common::EVENT_LBUTTONUP: // fallthrough case Common::EVENT_RBUTTONUP: - if (_currentRoom->getId() != INTRO && - _vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) + if (_currentRoom->getId() != INTRO && _sound->isPlaying()) return; _mouseClicked = true; // fallthrough @@ -1021,13 +1021,13 @@ void GameManager::busted(int i) { i = 5; if (!_currentRoom->getObject(0)->hasProperty(OPENED)) { _vm->renderImage(i - 1); - _vm->playSound(kAudioDoorOpen); + _sound->play(kAudioDoorOpen); wait(2); } _vm->renderImage(i); wait(3); _vm->renderImage(i + 3); - _vm->playSound(kAudioVoiceHalt); + _sound->play(kAudioVoiceHalt); _vm->renderImage(i); wait(5); if (_currentRoom->getId() == OFFICE_L2) @@ -1047,7 +1047,7 @@ void GameManager::busted(int i) { else _vm->renderImage(33); // above } - _vm->playSound(kAudioVoiceHalt); + _sound->play(kAudioVoiceHalt); wait(3); shot(0, 0); } @@ -1210,7 +1210,7 @@ void GameManager::guardWalkEvent() { if (!behind) { _vm->renderImage(_state._origin + 1); _prevImgId = _state._origin + 1; - _vm->playSound(kAudioDoorOpen); + _sound->play(kAudioDoorOpen); wait(3); } @@ -1234,7 +1234,7 @@ void GameManager::guardWalkEvent() { if (!behind) { wait(3); _vm->renderImage(_prevImgId + 128); - _vm->playSound(kAudioDoorClose); + _sound->play(kAudioDoorClose); } _prevImgId = imgId; @@ -1295,12 +1295,12 @@ void GameManager::guardWalkEvent() { if (behind) { _vm->renderImage(_state._destination + 1); - _vm->playSound(kAudioDoorOpen); + _sound->play(kAudioDoorOpen); wait(3); _vm->renderImage(_prevImgId + 128); wait(3); _vm->renderImage(_state._destination + 1 + 128); - _vm->playSound(kAudioDoorClose); + _sound->play(kAudioDoorClose); _rooms[BCORRIDOR]->getObject(_state._destination + 4)->setProperty(OCCUPIED); _state._destination = 255; } else if (_rooms[BCORRIDOR]->isSectionVisible(_state._destination + 1)) { @@ -1340,7 +1340,7 @@ void GameManager::taxiEvent() { _vm->renderImage(1); _vm->renderImage(2); - _vm->playSound(kAudioRocks); + _sound->play(kAudioRocks); screenShake(); _vm->renderImage(9); _currentRoom->getObject(1)->setProperty(OPENED); @@ -1366,7 +1366,7 @@ void GameManager::great(uint number) { if (number && (_state._greatFlag & (1 << number))) return; - _vm->playSound(kAudioSuccess); + _sound->play(kAudioSuccess); _state._greatFlag |= 1 << number; } @@ -1729,7 +1729,7 @@ void GameManager::screenShake() { } void GameManager::shock() { - _vm->playSound(kAudioShock); + _sound->play(kAudioShock); dead(kStringShock); } @@ -1837,14 +1837,14 @@ void GameManager::edit(Common::String &input, int x, int y, uint length) { void GameManager::shot(int a, int b) { if (a) _vm->renderImage(a); - _vm->playSound(kAudioGunShot); + _sound->play(kAudioGunShot); wait(2); if (b) _vm->renderImage(b); wait(2); if (a) _vm->renderImage(a); - _vm->playSound(kAudioGunShot); + _sound->play(kAudioGunShot); wait(2); if (b) _vm->renderImage(b); @@ -1908,7 +1908,7 @@ void GameManager::dead(StringID messageId) { _vm->setCurrentImage(11); _vm->renderImage(0); _vm->renderMessage(messageId); - _vm->playSound(kAudioDeath); + _sound->play(kAudioDeath); _vm->paletteFadeIn(); getInput(); _vm->paletteFadeOut(); @@ -2261,7 +2261,7 @@ void GameManager::handleInput() { byte i = _inputObject[0]->_click; _inputObject[0]->_click = _inputObject[0]->_click2; _inputObject[0]->_click2 = i; - _vm->playSound(kAudioDoorOpen); + _sound->play(kAudioDoorOpen); } break; @@ -2280,7 +2280,7 @@ void GameManager::handleInput() { byte i = _inputObject[0]->_click; _inputObject[0]->_click = _inputObject[0]->_click2; _inputObject[0]->_click2 = i; - _vm->playSound(kAudioDoorClose); + _sound->play(kAudioDoorClose); } break; @@ -2341,8 +2341,8 @@ void GameManager::guardShot() { wait(3); _vm->renderImage(2); - _vm->playSound(kAudioVoiceHalt); - while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) + _sound->play(kAudioVoiceHalt); + while (_sound->isPlaying()) wait(1); _vm->renderImage(5); @@ -2356,8 +2356,8 @@ void GameManager::guardShot() { void GameManager::guard3Shot() { _vm->renderImage(1); wait(3); - _vm->playSound(kAudioVoiceHalt); // 46/0 - while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) + _sound->play(kAudioVoiceHalt); // 46/0 + while (_sound->isPlaying()) wait(1); wait(5); @@ -2408,8 +2408,8 @@ void GameManager::alarmSound() { int32 end = _state._time + ticksToMsec(_messageDuration); do { - _vm->playSound(kAudioAlarm); - while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle)) { + _sound->play(kAudioAlarm); + while (_sound->isPlaying()) { g_system->delayMillis(_vm->_delay); updateEvents(); g_system->updateScreen(); -- cgit v1.2.3 From d963827dbb4282a7b39efca390bbc2fb58d4eee5 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Fri, 23 Mar 2018 02:16:01 +0100 Subject: SUPERNOVA: Renames MSNImageDecoder to MSNImage --- engines/supernova/state.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 2e887660ed..5933c5fdf9 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -741,7 +741,7 @@ void GameManager::processInput() { (field == -1) && i < kMaxObject; i++) { click = _currentRoom->getObject(i)->_click; if (click != 255 && _vm->_currentImage) { - MSNImageDecoder::ClickField *clickField = _vm->_currentImage->_clickField; + MSNImage::ClickField *clickField = _vm->_currentImage->_clickField; do { if ((_mouseX >= clickField[click].x1) && (_mouseX <= clickField[click].x2) && (_mouseY >= clickField[click].y1) && (_mouseY <= clickField[click].y2)) -- cgit v1.2.3 From 2ead17f09fb9c3c4af46cd86736fee654e6ad072 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 25 Mar 2018 00:07:37 +0100 Subject: SUPERNOVA: Implements render functions Although SupernovaEngine forwards render calls to screen, it also exposed members publicly like _brightness. Therefore, a few changes were necessary in rooms and state. --- engines/supernova/state.cpp | 57 ++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 27 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 5933c5fdf9..70a0767d49 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -21,11 +21,13 @@ */ #include "common/system.h" +#include "graphics/cursorman.h" #include "graphics/palette.h" #include "gui/message.h" + +#include "supernova/screen.h" #include "supernova/supernova.h" #include "supernova/state.h" -#include "graphics/cursorman.h" namespace Supernova { @@ -467,7 +469,7 @@ void GameManager::initGui() { int cmdAvailableSpace = 320 - (cmdCount - 1) * 2; for (int i = 0; i < cmdCount; ++i) { const Common::String &text = _vm->getGameString(guiCommands[i]); - cmdAvailableSpace -= _vm->textWidth(text); + cmdAvailableSpace -= Screen::textWidth(text); } int commandButtonX = 0; @@ -477,7 +479,7 @@ void GameManager::initGui() { if (i < cmdCount - 1) { int space = cmdAvailableSpace / (cmdCount - i); cmdAvailableSpace -= space; - width = _vm->textWidth(text) + space; + width = Screen::textWidth(text) + space; } else width = 320 - commandButtonX; @@ -506,7 +508,7 @@ void GameManager::initGui() { void GameManager::updateEvents() { handleTime(); - if (_animationEnabled && !_vm->_messageDisplayed && _animationTimer == 0) + if (_animationEnabled && !_vm->_screen->isMessageShown() && _animationTimer == 0) _currentRoom->animation(); if (_state._eventCallback != kNoFn && _state._time >= _state._eventTime) { @@ -645,7 +647,7 @@ void GameManager::processInput() { mouseLocation = onNone; if (_mouseClickType == Common::EVENT_LBUTTONUP) { - if (_vm->_messageDisplayed) { + if (_vm->_screen->isMessageShown()) { // Hide the message and consume the event _vm->removeMessage(); if (mouseLocation != onCmdButton) @@ -688,7 +690,7 @@ void GameManager::processInput() { } } else if (_mouseClickType == Common::EVENT_RBUTTONUP) { - if (_vm->_messageDisplayed) { + if (_vm->_screen->isMessageShown()) { // Hide the message and consume the event _vm->removeMessage(); return; @@ -740,8 +742,9 @@ void GameManager::processInput() { for (int i = 0; (_currentRoom->getObject(i)->_id != INVALIDOBJECT) && (field == -1) && i < kMaxObject; i++) { click = _currentRoom->getObject(i)->_click; - if (click != 255 && _vm->_currentImage) { - MSNImage::ClickField *clickField = _vm->_currentImage->_clickField; + const MSNImage *image = _vm->_screen->getCurrentImage(); + if (click != 255 && image) { + const MSNImage::ClickField *clickField = image->_clickField; do { if ((_mouseX >= clickField[click].x1) && (_mouseX <= clickField[click].x2) && (_mouseY >= clickField[click].y1) && (_mouseY <= clickField[click].y2)) @@ -1120,14 +1123,14 @@ void GameManager::supernovaEvent() { novaScroll(); _vm->paletteFadeOut(); _vm->renderBox(0, 0, 320, 200, kColorBlack); - _vm->_menuBrightness = 255; + _vm->_screen->setGuiBrightness(255); _vm->paletteBrightness(); if (_currentRoom->getId() == GLIDER) { _vm->renderMessage(kStringSupernova3); waitOnInput(_messageDuration); _vm->removeMessage(); - _vm->_menuBrightness = 0; + _vm->_screen->setGuiBrightness(0); _vm->paletteBrightness(); _vm->renderRoom(*_currentRoom); _vm->paletteFadeIn(); @@ -1153,7 +1156,7 @@ void GameManager::supernovaEvent() { _vm->renderMessage(kStringSupernova8); waitOnInput(_messageDuration); _vm->removeMessage(); - _vm->_menuBrightness = 0; + _vm->_screen->setGuiBrightness(0); _vm->paletteBrightness(); changeRoom(MEETUP2); if (_rooms[ROGER]->getObject(3)->hasProperty(CARRIED) && !_rooms[GLIDER]->isSectionVisible(5)) { @@ -1204,7 +1207,7 @@ void GameManager::guardWalkEvent() { _rooms[BCORRIDOR]->getObject(_state._origin + 4)->hasProperty(OPENED)); _rooms[BCORRIDOR]->getObject(_state._origin + 4)->disableProperty(OCCUPIED); if (_currentRoom == _rooms[BCORRIDOR]) { - if (_vm->_messageDisplayed) + if (_vm->_screen->isMessageShown()) _vm->removeMessage(); if (!behind) { @@ -1522,7 +1525,7 @@ void GameManager::turnOn() { return; _state._powerOff = false; - _vm->_brightness = 255; + _vm->_screen->setViewportBrightness(255); _rooms[SLEEP]->setSectionVisible(1, false); _rooms[SLEEP]->setSectionVisible(2, false); _rooms[COCKPIT]->setSectionVisible(22, false); @@ -1541,7 +1544,7 @@ void GameManager::takeObject(Object &obj) { void GameManager::drawCommandBox() { for (int i = 0; i < ARRAYSIZE(_guiCommandButton); ++i) { _vm->renderBox(_guiCommandButton[i]); - int space = (_guiCommandButton[i].width() - _vm->textWidth(_guiCommandButton[i].getText())) / 2; + int space = (_guiCommandButton[i].width() - Screen::textWidth(_guiCommandButton[i].getText())) / 2; _vm->renderText(_guiCommandButton[i].getText(), _guiCommandButton[i].getTextPos().x + space, _guiCommandButton[i].getTextPos().y, @@ -1628,8 +1631,8 @@ void GameManager::roomBrightness() { else if ((_currentRoom->getId() == GUARD3) && _state._powerOff) _roomBrightness = 0; - if (_vm->_brightness != 0) - _vm->_brightness = _roomBrightness; + if (_vm->_screen->getViewportBrightness() != 0) + _vm->_screen->setViewportBrightness(_roomBrightness); _vm->paletteBrightness(); } @@ -1774,24 +1777,24 @@ void GameManager::edit(Common::String &input, int x, int y, uint length) { kScreenWidth - x : (length + 1) * (kFontWidth + 2); while (isEditing) { - _vm->_textCursorX = x; - _vm->_textCursorY = y; - _vm->_textColor = kColorWhite99; + _vm->_screen->setTextCursorPos(x, y); + _vm->_screen->setTextCursorColor(kColorWhite99); _vm->renderBox(x, y - 1, overdrawWidth, 9, kColorDarkBlue); for (uint i = 0; i < input.size(); ++i) { // Draw char highlight depending on cursor position if (i == cursorIndex) { - _vm->renderBox(_vm->_textCursorX, y - 1, _vm->textWidth(input[i]), 9, kColorWhite99); - _vm->_textColor = kColorDarkBlue; + _vm->renderBox(_vm->_screen->getTextCursorPos().x, y - 1, + Screen::textWidth(input[i]), 9, kColorWhite99); + _vm->_screen->setTextCursorColor(kColorDarkBlue); _vm->renderText(input[i]); - _vm->_textColor = kColorWhite99; + _vm->_screen->setTextCursorColor(kColorWhite99); } else _vm->renderText(input[i]); } if (cursorIndex == input.size()) { - _vm->renderBox(_vm->_textCursorX + 1, y - 1, 6, 9, kColorDarkBlue); - _vm->renderBox(_vm->_textCursorX , y - 1, 1, 9, kColorWhite99); + _vm->renderBox(_vm->_screen->getTextCursorPos().x + 1, y - 1, 6, 9, kColorDarkBlue); + _vm->renderBox(_vm->_screen->getTextCursorPos().x, y - 1, 1, 9, kColorWhite99); } getKeyInput(true); @@ -2299,7 +2302,7 @@ void GameManager::handleInput() { } void GameManager::executeRoom() { - if (_processInput && !_vm->_messageDisplayed && _guiEnabled) { + if (_processInput && !_vm->_screen->isMessageShown() && _guiEnabled) { handleInput(); if (_mouseClicked) { Common::Event event; @@ -2315,7 +2318,7 @@ void GameManager::executeRoom() { } if (_guiEnabled) { - if (!_vm->_messageDisplayed) { + if (!_vm->_screen->isMessageShown()) { g_system->fillScreen(kColorBlack); _vm->renderRoom(*_currentRoom); } @@ -2326,7 +2329,7 @@ void GameManager::executeRoom() { } roomBrightness(); - if (_vm->_brightness == 0) + if (_vm->_screen->getViewportBrightness() == 0) _vm->paletteFadeIn(); if (!_currentRoom->hasSeen() && _newRoom) { -- cgit v1.2.3 From 3749f98dea6eda097e14fbc2139498fba84bece1 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sun, 25 Mar 2018 06:06:56 +0200 Subject: SUPERNOVA: Fixes type camel case --- engines/supernova/state.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 70a0767d49..51e0ee5c73 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -138,13 +138,13 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) { _inventoryScroll = in->readSint32LE(); _inventory.clear(); for (int i = 0; i < inventorySize; ++i) { - RoomID objectRoom = static_cast(in->readSint32LE()); + RoomId objectRoom = static_cast(in->readSint32LE()); int objectIndex = in->readSint32LE(); _inventory.add(*_rooms[objectRoom]->getObject(objectIndex)); } // Rooms - RoomID curRoomId = static_cast(in->readByte()); + RoomId curRoomId = static_cast(in->readByte()); for (int i = 0; i < NUMROOMS; ++i) { _rooms[i]->deserialize(in, version); } @@ -199,7 +199,7 @@ Object *Inventory::get(int index) const { return const_cast(&Object::nullObject); } -Object *Inventory::get(ObjectID id) const { +Object *Inventory::get(ObjectId id) const { for (int i = 0; i < _numObjects; ++i) { if (_inventory[i]->_id == id) return _inventory[i]; @@ -277,12 +277,12 @@ static Common::String timeToString(int msec) { return Common::String(s); } -StringID GameManager::guiCommands[] = { +StringId GameManager::guiCommands[] = { kStringCommandGo, kStringCommandLook, kStringCommandTake, kStringCommandOpen, kStringCommandClose, kStringCommandPress, kStringCommandPull, kStringCommandUse, kStringCommandTalk, kStringCommandGive }; -StringID GameManager::guiStatusCommands[] = { +StringId GameManager::guiStatusCommands[] = { kStringStatusCommandGo, kStringStatusCommandLook, kStringStatusCommandTake, kStringStatusCommandOpen, kStringStatusCommandClose, kStringStatusCommandPress, kStringStatusCommandPull, kStringStatusCommandUse, kStringStatusCommandTalk, kStringStatusCommandGive }; @@ -838,7 +838,7 @@ void GameManager::telomat(int nr) { "Alga Hurz Li" }; - StringID dial1[4]; + StringId dial1[4]; dial1[0] = kStringTelomat1; dial1[1] = kNoString; dial1[2] = kStringTelomat3; @@ -846,7 +846,7 @@ void GameManager::telomat(int nr) { static byte rows1[3] = {1, 2, 1}; - StringID dial2[4]; + StringId dial2[4]; dial2[0] = kStringTelomat4; dial2[1] = kStringTelomat5; dial2[2] = kStringTelomat6; @@ -1398,7 +1398,7 @@ void GameManager::sentence(int number, bool brightness) { } } -void GameManager::say(StringID textId) { +void GameManager::say(StringId textId) { Common::String str = _vm->getGameString(textId); if (!str.empty()) say(str.c_str()); @@ -1428,7 +1428,7 @@ void GameManager::say(const char *text) { _vm->renderBox(0, 138, 320, 62, kColorBlack); } -void GameManager::reply(StringID textId, int aus1, int aus2) { +void GameManager::reply(StringId textId, int aus1, int aus2) { Common::String str = _vm->getGameString(textId); if (!str.empty()) reply(str.c_str(), aus1, aus2); @@ -1452,7 +1452,7 @@ void GameManager::reply(const char *text, int aus1, int aus2) { _vm->removeMessage(); } -int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number) { +int GameManager::dialog(int num, byte rowLength[6], StringId text[6], int number) { _vm->_allowLoadGame = false; _guiEnabled = false; @@ -1637,7 +1637,7 @@ void GameManager::roomBrightness() { _vm->paletteBrightness(); } -void GameManager::changeRoom(RoomID id) { +void GameManager::changeRoom(RoomId id) { _currentRoom = _rooms[id]; _newRoom = true; } @@ -1905,7 +1905,7 @@ void GameManager::closeLocker(const Room *room, Object *obj, Object *lock, int s } } -void GameManager::dead(StringID messageId) { +void GameManager::dead(StringId messageId) { _vm->paletteFadeOut(); _guiEnabled = false; _vm->setCurrentImage(11); -- cgit v1.2.3 From d4592b6077aebaf1630b05d1904723c6544d4537 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Sat, 14 Apr 2018 11:40:08 +0200 Subject: SUPERNOVA: Removes global nullObject Before nullObject was a static member of Object class and now a member of GameManager. Also the Inventory constructor was extended for taking a pointer to the nullObject that Invetory::get() returns if no Object was found. --- engines/supernova/state.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'engines/supernova/state.cpp') diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 51e0ee5c73..00a35055b7 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -196,7 +196,7 @@ Object *Inventory::get(int index) const { if (index < _numObjects) return _inventory[index]; - return const_cast(&Object::nullObject); + return _nullObject; } Object *Inventory::get(ObjectId id) const { @@ -205,7 +205,7 @@ Object *Inventory::get(ObjectId id) const { return _inventory[i]; } - return const_cast(&Object::nullObject); + return _nullObject; } @@ -288,7 +288,7 @@ StringId GameManager::guiStatusCommands[] = { }; GameManager::GameManager(SupernovaEngine *vm, Sound *sound) - : _inventory(_inventoryScroll) + : _inventory(&_nullObject, _inventoryScroll) , _vm(vm) , _sound(sound) { initRooms(); @@ -354,11 +354,10 @@ void GameManager::destroyRooms() { delete _rooms[OUTRO]; } - void GameManager::initState() { - Object::setObjectNull(_currentInputObject); - Object::setObjectNull(_inputObject[0]); - Object::setObjectNull(_inputObject[1]); + _currentInputObject = &_nullObject; + _inputObject[0] = &_nullObject; + _inputObject[1] = &_nullObject; _inputVerb = ACTION_WALK; _processInput = false; _guiEnabled = true; @@ -611,8 +610,8 @@ void GameManager::processInput(Common::KeyState &state) { } void GameManager::resetInputState() { - Object::setObjectNull(_inputObject[0]); - Object::setObjectNull(_inputObject[1]); + setObjectNull(_inputObject[0]); + setObjectNull(_inputObject[1]); _inputVerb = ACTION_WALK; _processInput = false; _mouseClicked = false; @@ -659,7 +658,7 @@ void GameManager::processInput() { case onInventory: // Fallthrough if (_inputVerb == ACTION_GIVE || _inputVerb == ACTION_USE) { - if (Object::isNullObject(_inputObject[0])) { + if (isNullObject(_inputObject[0])) { _inputObject[0] = _currentInputObject; if (!_inputObject[0]->hasProperty(COMBINABLE)) _processInput = true; @@ -669,7 +668,7 @@ void GameManager::processInput() { } } else { _inputObject[0] = _currentInputObject; - if (!Object::isNullObject(_currentInputObject)) + if (!isNullObject(_currentInputObject)) _processInput = true; } break; @@ -696,7 +695,7 @@ void GameManager::processInput() { return; } - if (Object::isNullObject(_currentInputObject)) + if (isNullObject(_currentInputObject)) return; if (mouseLocation == onObject || mouseLocation == onInventory) { @@ -775,7 +774,7 @@ void GameManager::processInput() { break; } - Object::setObjectNull(_currentInputObject); + setObjectNull(_currentInputObject); _mouseField = field; if (_mouseField >= 0 && _mouseField < 256) @@ -814,6 +813,14 @@ void GameManager::processInput() { } } +void GameManager::setObjectNull(Object *&obj) { + obj = &_nullObject; +} + +bool GameManager::isNullObject(Object *obj) { + return obj == &_nullObject; +} + void GameManager::corridorOnEntrance() { if (_state._corridorSearch) busted(0); @@ -1874,7 +1881,7 @@ void GameManager::drawStatus() { _vm->renderBox(0, 140, 320, 9, kColorWhite25); _vm->renderText(_vm->getGameString(guiStatusCommands[index]), 1, 141, kColorDarkGreen); - if (Object::isNullObject(_inputObject[0])) + if (isNullObject(_inputObject[0])) _vm->renderText(_currentInputObject->_name); else { _vm->renderText(_inputObject[0]->_name); -- cgit v1.2.3