mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-09 20:34:12 +00:00
SUPERNOVA2: Fix bugs in museum
1. Clock and time in museum now behaves similarly to the original. 2. Leaving the museum after completing the robery now works.
This commit is contained in:
parent
d0c9a676d5
commit
1fb6437cdc
@ -1867,7 +1867,9 @@ void Elevator::jobDescription() {
|
||||
_vm->removeMessage();
|
||||
_vm->renderMessage(kStringElevator58);
|
||||
_gm->drawGUI();
|
||||
_gm->_state._startTime = g_system->getMillis() - 150000000;
|
||||
|
||||
// 21:72:72
|
||||
_gm->_state._startTime = g_system->getMillis() - 130363200;
|
||||
_gm->_state._tipsy = false;
|
||||
_gm->_state._toMuseum = true;
|
||||
}
|
||||
@ -3772,10 +3774,13 @@ void Museum::onEntrance() {
|
||||
_vm->removeMessage();
|
||||
_vm->_screen->setViewportBrightness(0);
|
||||
_vm->setCurrentImage(26);
|
||||
bool hasDinosaurHead = false;
|
||||
if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED)
|
||||
hasDinosaurHead = true;
|
||||
_vm->loadGame(kSleepAutosaveSlot);
|
||||
_vm->renderImage(0);
|
||||
_vm->paletteFadeIn();
|
||||
if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED) {
|
||||
if (hasDinosaurHead) {
|
||||
_gm->reply(kStringMuseum3, 1, 1 + 128);
|
||||
_gm->reply(kStringMuseum4, 1, 1 + 128);
|
||||
_gm->takeMoney(30000);
|
||||
@ -3790,7 +3795,6 @@ void Museum::onEntrance() {
|
||||
_gm->_newRoom = true;
|
||||
_gm->drawGUI();
|
||||
}
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Museum::animation() {
|
||||
@ -3803,7 +3807,7 @@ bool Museum::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
_vm->renderMessage(kStringMuseum10);
|
||||
} else {
|
||||
_gm->_state._eventTime = kMaxTimerValue;
|
||||
if (!_gm->_state._alarmOn) {
|
||||
if (_gm->_state._alarmOn) {
|
||||
_vm->renderMessage(kStringMuseum11);
|
||||
if (_gm->_state._sirenOn) {
|
||||
_vm->stopSound();
|
||||
@ -3820,10 +3824,13 @@ bool Museum::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
_gm->waitOnInput(_gm->_messageDuration);
|
||||
_vm->removeMessage();
|
||||
_vm->_screen->setViewportBrightness(0);
|
||||
bool hasDinosaurHead = false;
|
||||
if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED)
|
||||
hasDinosaurHead = true;
|
||||
_vm->loadGame(kSleepAutosaveSlot);
|
||||
if (_gm->_state._money >= 8)
|
||||
_gm->takeMoney(-8);
|
||||
if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED)
|
||||
if (hasDinosaurHead)
|
||||
_gm->takeObject(*_gm->_rooms[INTRO]->getObject(7));
|
||||
_gm->changeRoom(CULTURE_PALACE);
|
||||
_gm->_newRoom = true;
|
||||
@ -3951,7 +3958,6 @@ Mus2::Mus2(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus2::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus2::animation() {
|
||||
@ -3983,7 +3989,6 @@ Mus3::Mus3(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus3::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus3::animation() {
|
||||
@ -4011,7 +4016,7 @@ Mus4::Mus4(Supernova2Engine *vm, GameManager *gm) {
|
||||
_shown[20] = kShownTrue;
|
||||
_shown[21] = kShownTrue;
|
||||
|
||||
_objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 0, 0, 7, MUS4, 2);
|
||||
_objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 1, 1, 8, MUS5, 22);
|
||||
_objectState[1] = Object(_id, kStringCamera, kStringDefaultDescription, NULLOBJECT, NULLTYPE, 7, 7, 0);
|
||||
|
||||
}
|
||||
@ -4100,7 +4105,6 @@ Mus6::Mus6(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus6::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus6::animation() {
|
||||
@ -4155,7 +4159,6 @@ Mus7::Mus7(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus7::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus7::animation() {
|
||||
@ -4164,7 +4167,7 @@ void Mus7::animation() {
|
||||
|
||||
bool Mus7::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
_gm->museumDoorInteract(verb, obj1, obj2);
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus8::Mus8(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4325,7 +4328,6 @@ Mus11::Mus11(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus11::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus11::animation() {
|
||||
@ -4363,7 +4365,7 @@ MusRound::MusRound(Supernova2Engine *vm, GameManager *gm) {
|
||||
_objectState[1] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 1, 1, 0, MUS13, 10);
|
||||
_objectState[2] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 2, 2, 0, MUS12, 14);
|
||||
_objectState[3] = Object(_id, kStringDinosaur, kStringDinosaurDescription2, NULLOBJECT, NULLTYPE, 3, 3, 0);
|
||||
_objectState[3] = Object(_id, kStringDinosaurHead, kStringDinosaurHeadDescription, HEAD, TAKE, 4, 4, 2);
|
||||
_objectState[4] = Object(_id, kStringDinosaurHead, kStringDinosaurHeadDescription, HEAD, TAKE, 4, 4, 2);
|
||||
}
|
||||
|
||||
void MusRound::onEntrance() {
|
||||
@ -4417,7 +4419,6 @@ Mus12::Mus12(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus12::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus12::animation() {
|
||||
@ -4425,7 +4426,7 @@ void Mus12::animation() {
|
||||
}
|
||||
|
||||
bool Mus12::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus13::Mus13(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4447,7 +4448,6 @@ Mus13::Mus13(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus13::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus13::animation() {
|
||||
@ -4455,7 +4455,7 @@ void Mus13::animation() {
|
||||
}
|
||||
|
||||
bool Mus13::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus14::Mus14(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4478,7 +4478,6 @@ Mus14::Mus14(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus14::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus14::animation() {
|
||||
@ -4486,7 +4485,7 @@ void Mus14::animation() {
|
||||
}
|
||||
|
||||
bool Mus14::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus15::Mus15(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4505,7 +4504,6 @@ Mus15::Mus15(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus15::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus15::animation() {
|
||||
@ -4513,7 +4511,7 @@ void Mus15::animation() {
|
||||
}
|
||||
|
||||
bool Mus15::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus16::Mus16(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4532,7 +4530,6 @@ Mus16::Mus16(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus16::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus16::animation() {
|
||||
@ -4540,7 +4537,7 @@ void Mus16::animation() {
|
||||
}
|
||||
|
||||
bool Mus16::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus17::Mus17(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4563,7 +4560,6 @@ Mus17::Mus17(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus17::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus17::animation() {
|
||||
@ -4571,7 +4567,7 @@ void Mus17::animation() {
|
||||
}
|
||||
|
||||
bool Mus17::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus18::Mus18(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4590,7 +4586,6 @@ Mus18::Mus18(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus18::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus18::animation() {
|
||||
@ -4598,7 +4593,7 @@ void Mus18::animation() {
|
||||
}
|
||||
|
||||
bool Mus18::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus19::Mus19(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4621,7 +4616,6 @@ Mus19::Mus19(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus19::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus19::animation() {
|
||||
@ -4629,7 +4623,7 @@ void Mus19::animation() {
|
||||
}
|
||||
|
||||
bool Mus19::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus20::Mus20(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4647,7 +4641,6 @@ Mus20::Mus20(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus20::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus20::animation() {
|
||||
@ -4655,7 +4648,7 @@ void Mus20::animation() {
|
||||
}
|
||||
|
||||
bool Mus20::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus21::Mus21(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4678,7 +4671,6 @@ Mus21::Mus21(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus21::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus21::animation() {
|
||||
@ -4686,7 +4678,7 @@ void Mus21::animation() {
|
||||
}
|
||||
|
||||
bool Mus21::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
Mus22::Mus22(Supernova2Engine *vm, GameManager *gm) {
|
||||
@ -4709,7 +4701,6 @@ Mus22::Mus22(Supernova2Engine *vm, GameManager *gm) {
|
||||
|
||||
void Mus22::onEntrance() {
|
||||
_gm->pressureAlarmEntrance();
|
||||
setRoomSeen(true);
|
||||
}
|
||||
|
||||
void Mus22::animation() {
|
||||
@ -4749,7 +4740,8 @@ bool Mus22::interact(Action verb, Object &obj1, Object &obj2) {
|
||||
_gm->_state._alarmCracked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1253,9 +1253,9 @@ void GameManager::dead(StringId messageId) {
|
||||
destroyRooms();
|
||||
initRooms();
|
||||
initState();
|
||||
changeRoom(AIRPORT);
|
||||
initGui();
|
||||
_inventory.clear();
|
||||
changeRoom(AIRPORT);
|
||||
g_system->fillScreen(kColorBlack);
|
||||
_vm->paletteFadeIn();
|
||||
|
||||
@ -2064,7 +2064,7 @@ void GameManager::alarm() {
|
||||
if (_vm->_screen->isMessageShown())
|
||||
_vm->removeMessage();
|
||||
_vm->renderMessage(kStringMuseum7);
|
||||
_state._eventTime = g_system->getMillis() + 18900;
|
||||
_state._eventTime = g_system->getMillis() + 16200;
|
||||
_state._eventCallback = kCaughtFn;
|
||||
_state._alarmOn = true;
|
||||
}
|
||||
@ -2110,7 +2110,7 @@ void GameManager::caught2() {
|
||||
}
|
||||
|
||||
void GameManager::drawClock() {
|
||||
int time = (g_system->getMillis() - _state._startTime) / 700;
|
||||
int time = (g_system->getMillis() - _state._startTime) / 600;
|
||||
int second = time % 100;
|
||||
Room *r;
|
||||
if (!_mapOn) {
|
||||
@ -2164,11 +2164,11 @@ void GameManager::crack(int time) {
|
||||
do {
|
||||
do {
|
||||
wait(1);
|
||||
} while ((z = (g_system->getMillis() - _state._startTime) / 700) == zv);
|
||||
} while ((z = (g_system->getMillis() - _state._startTime) / 600) == zv);
|
||||
zv = z;
|
||||
drawClock();
|
||||
t++;
|
||||
} while (t < time && _state._alarmOn == _alarmBefore) ;
|
||||
} while (t < time && _state._alarmOn == _alarmBefore);
|
||||
_cracking = false;
|
||||
//arrow
|
||||
if (_state._alarmOn == _alarmBefore)
|
||||
@ -2220,7 +2220,7 @@ void GameManager::museumDoorInteract(Action verb, Object &obj1, Object &obj2) {
|
||||
r->setSectionVisible(r->getObject(doorTab[i]._o1)->_section, kShownTrue);
|
||||
}
|
||||
}
|
||||
} else if (verb == ACTION_OPEN && obj1._id == DOOR) {
|
||||
} else if (verb == ACTION_CLOSE && obj1._id == DOOR) {
|
||||
for (int i = 0; i < 11; i++) {
|
||||
if ((_currentRoom == _rooms[doorTab[i]._r1]) &&
|
||||
&obj1 == _currentRoom->getObject(doorTab[i]._o1)) {
|
||||
@ -2256,7 +2256,7 @@ void GameManager::securityEntrance() {
|
||||
{MUS1 , 0, 0}
|
||||
};
|
||||
|
||||
int time = (g_system->getMillis() - _state._startTime) / 700;
|
||||
int time = (g_system->getMillis() - _state._startTime) / 600;
|
||||
int second = time % 100;
|
||||
|
||||
if (_rooms[_securityTab[second / 10]] == _currentRoom) {
|
||||
|
@ -513,6 +513,7 @@ bool Supernova2Engine::deserialize(Common::ReadStream *in, int version) {
|
||||
}
|
||||
|
||||
bool Supernova2Engine::loadGame(int slot) {
|
||||
stopSound();
|
||||
if (slot < 0)
|
||||
return false;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user