aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Crozat2017-11-18 00:49:23 +0000
committerThierry Crozat2018-01-23 02:15:41 +0000
commit55fc09571f52c26392a0b54951db650968e99ff2 (patch)
treedd8e2f243fed4584a41d4ee569ad3fb25780cc82
parent1ff953b8159110ce0707404746214f6a52ce8a1f (diff)
downloadscummvm-rg350-55fc09571f52c26392a0b54951db650968e99ff2.tar.gz
scummvm-rg350-55fc09571f52c26392a0b54951db650968e99ff2.tar.bz2
scummvm-rg350-55fc09571f52c26392a0b54951db650968e99ff2.zip
SUPERNOVA: Fix handling of room brightness
There were several issues with the brighness due to the different implementation between the original and the code in scummvm. The code has now been modified to be much closer to the original, which fixed those issues and allowed to remove workarounds that had been added in various places to deal with those issues (but those workarounds had their own issues such as fade in happening too soon before switching to the new room).
-rw-r--r--engines/supernova/rooms.cpp3
-rw-r--r--engines/supernova/state.cpp25
-rw-r--r--engines/supernova/state.h1
-rw-r--r--engines/supernova/supernova.cpp16
4 files changed, 29 insertions, 16 deletions
diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp
index 3c3ef9481d..5dfb6c8e69 100644
--- a/engines/supernova/rooms.cpp
+++ b/engines/supernova/rooms.cpp
@@ -1020,8 +1020,6 @@ void ShipCabinR3::onEntrance() {
for (int i = 0; i < 3; ++i)
_gm->_inventory.add(*_gm->_rooms[INTRO]->getObject(i));
- _vm->paletteBrightness();
- _vm->paletteFadeIn();
setRoomSeen(true);
}
@@ -2243,7 +2241,6 @@ bool ArsanoMeetup2::interact(Action verb, Object &obj1, Object &obj2) {
_gm->loadTime();
_gm->_rooms[CAVE]->getObject(1)->_exitRoom = MEETUP3;
_gm->_state._dream = true;
- _vm->paletteFadeIn();
}
} else {
_gm->changeRoom(MEETUP2);
diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp
index 1e7ebc8ef4..3907370b62 100644
--- a/engines/supernova/state.cpp
+++ b/engines/supernova/state.cpp
@@ -325,6 +325,7 @@ void GameManager::initState() {
_processInput = false;
_guiEnabled = true;
_animationEnabled = true;
+ _roomBrightness = 255;
_mouseClicked = false;
_keyPressed = false;
_mouseX = -1;
@@ -832,7 +833,6 @@ void GameManager::supernovaEvent() {
_rooms[MEETUP2]->removeSentence(0, 1);
}
_rooms[MEETUP2]->removeSentence(1, 1);
- _vm->paletteFadeIn();
}
_rooms[AIRLOCK]->getObject(4)->setProperty(WORN);
_rooms[AIRLOCK]->getObject(5)->setProperty(WORN);
@@ -1048,7 +1048,12 @@ void GameManager::mousePosDialog(int x, int y) {
}
void GameManager::turnOff() {
+ if (_state._powerOff)
+ return;
+
_state._powerOff = true;
+ roomBrightness();
+ _vm->paletteBrightness();
}
void GameManager::turnOn() {
@@ -1191,18 +1196,19 @@ void GameManager::mouseInput3() {
}
void GameManager::roomBrightness() {
- _vm->_brightness = 255;
+ _roomBrightness = 255;
if ((_currentRoom->getId() != OUTSIDE) && (_currentRoom->getId() < ROCKS) ) {
if (_state._powerOff)
- _vm->_brightness = 153;
+ _roomBrightness = 153;
} else if (_currentRoom->getId() == CAVE) {
- _vm->_brightness = 0;
+ _roomBrightness = 0;
} else if (_currentRoom->getId() == GUARD3) {
if (_state._powerOff)
- _vm->_brightness = 0;
+ _roomBrightness = 0;
}
- _vm->paletteBrightness();
+ if (_vm->_brightness != 0)
+ _vm->_brightness = _roomBrightness;
}
void GameManager::changeRoom(RoomID id) {
@@ -1613,6 +1619,7 @@ bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) {
getInput();
_vm->renderRoom(*_currentRoom);
roomBrightness();
+ _vm->paletteBrightness();
_vm->renderMessage(kStringGenericInteract_12);
} else if ((verb == ACTION_LOOK) && (obj1._id == KEYCARD2)) {
_vm->renderMessage(obj1._description);
@@ -1930,7 +1937,13 @@ void GameManager::executeRoom() {
drawStatus();
drawCommandBox();
}
+
roomBrightness();
+ if (_vm->_brightness == 0)
+ _vm->paletteFadeIn();
+ else
+ _vm->paletteBrightness();
+
if (!_currentRoom->hasSeen())
_currentRoom->onEntrance();
}
diff --git a/engines/supernova/state.h b/engines/supernova/state.h
index bd08371372..9cbd68cd34 100644
--- a/engines/supernova/state.h
+++ b/engines/supernova/state.h
@@ -119,6 +119,7 @@ public:
bool _processInput;
bool _guiEnabled;
bool _animationEnabled;
+ byte _roomBrightness;
Action _inputVerb;
Object *_currentInputObject;
Object *_inputObject[2];
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 56ea113eac..395fd781f2 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -706,10 +706,11 @@ void SupernovaEngine::paletteBrightness() {
}
void SupernovaEngine::paletteFadeOut() {
- while (_brightness > 10) {
- _menuBrightness = _brightness;
+ while (_menuBrightness > 10) {
+ _menuBrightness -= 10;
+ if (_brightness > _menuBrightness)
+ _brightness = _menuBrightness;
paletteBrightness();
- _brightness -= 10;
_system->updateScreen();
_system->delayMillis(_delay);
}
@@ -720,15 +721,16 @@ void SupernovaEngine::paletteFadeOut() {
}
void SupernovaEngine::paletteFadeIn() {
- while (_brightness < 245) {
- _menuBrightness = _brightness;
+ while (_menuBrightness < 245) {
+ if (_brightness < _gm->_roomBrightness)
+ _brightness += 10;
+ _menuBrightness += 10;
paletteBrightness();
- _brightness += 10;
_system->updateScreen();
_system->delayMillis(_delay);
}
_menuBrightness = 255;
- _brightness = 255;
+ _brightness = _gm->_roomBrightness;
paletteBrightness();
_system->updateScreen();
}