aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-06-05 13:23:35 +0200
committerThierry Crozat2019-07-28 15:09:14 +0100
commitd2e67fca8fb61848af51e06fdbf4013b50f2df05 (patch)
tree3a88a89c0e24c637ec6e8dcb872906e9bb0413ba /engines
parentbe450f096794093ee6c7fa9d97cbd43038e35242 (diff)
downloadscummvm-rg350-d2e67fca8fb61848af51e06fdbf4013b50f2df05.tar.gz
scummvm-rg350-d2e67fca8fb61848af51e06fdbf4013b50f2df05.tar.bz2
scummvm-rg350-d2e67fca8fb61848af51e06fdbf4013b50f2df05.zip
SUPERNOVA2: Add City1 and City2 rooms
Diffstat (limited to 'engines')
-rw-r--r--engines/supernova2/ms2_def.h6
-rw-r--r--engines/supernova2/rooms.cpp48
-rw-r--r--engines/supernova2/state.cpp6
-rw-r--r--engines/supernova2/state.h2
4 files changed, 55 insertions, 7 deletions
diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h
index adf345c6af..f99c008d9e 100644
--- a/engines/supernova2/ms2_def.h
+++ b/engines/supernova2/ms2_def.h
@@ -145,7 +145,7 @@ kString75, kString76, kString77, kString78, kString79,
kString80, kString81, kString82, kString83, kString84,
kString85, kString86, kString87, kString88, kString89,
kString90, kString91, kString92, kString93, kString94,
-kStringEntrance, kString96, kString97, kString98, kString99,
+kStringEntrance, kStringDoor, kString97, kString98, kString99,
kString100, kString101, kString102, kStringDinosaurHead, kString104,
kString105, kStringSuctionCup, kString107, kString108, kString109,
kString110, kString111, kString112, kString113, kString114,
@@ -236,8 +236,8 @@ kString530, kString531, kString532, kString533, kString534,
kString535, kString536, kString537, kString538, kString539,
kString540, kString541, kString542, kString543, kString544,
kString545, kString546, kStringFascinating, kStringTaxis, kStringTaxisDescription,
-kStringAxacussan, kStringParticipationCard, kStringAxacussian, kString553, kString554,
-kString555, kString556, kString557, kString558, kString559,
+kStringAxacussan, kStringParticipationCard, kStringAxacussian, kStringSign1Description, kStringSign2Description,
+kStringSign3Description, kStringSign4Description, kString557, kString558, kString559,
kString560, kString561, kString562, kString563, kString564,
kString565, kString566, kString567, kString568, kString569,
kString570, kString571, kString572, kString573, kString574,
diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp
index ceaccbac61..9ce7a54cea 100644
--- a/engines/supernova2/rooms.cpp
+++ b/engines/supernova2/rooms.cpp
@@ -1516,9 +1516,14 @@ City1::City1(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 23;
_id = CITY1;
_shown[0] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringSign, kStringSign1Description, NULLOBJECT, NULLTYPE, 2, 2, 0);
+ _objectState[1] = Object(_id, kStringSign, kStringSign2Description, NULLOBJECT, NULLTYPE, 3, 3, 0);
+ _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_L, EXIT | OPENABLE, 0, 0, 1, ELEVATOR, 10);
+ _objectState[3] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_R, EXIT | OPENABLE, 1, 1, 2, ELEVATOR, 14);
}
void City1::onEntrance() {
@@ -1529,16 +1534,36 @@ void City1::animation() {
}
bool City1::interact(Action verb, Object &obj1, Object &obj2) {
- return true;
+ if (verb == ACTION_OPEN && obj1._id == DOOR_L) {
+ _objectState[0]._click = 255;
+ } else if (verb == ACTION_CLOSE && obj1._id == DOOR_L) {
+ _objectState[0]._click = 2;
+ } else if (verb == ACTION_OPEN && obj1._id == DOOR_R) {
+ _objectState[1]._click = 255;
+ } else if (verb == ACTION_CLOSE && obj1._id == DOOR_R) {
+ _objectState[1]._click = 3;
+ } else if (verb == ACTION_WALK && obj1._id == DOOR_L) {
+ _gm->_state._elevatorNumber = 1;
+ } else if (verb == ACTION_WALK && obj1._id == DOOR_R) {
+ _gm->_state._elevatorNumber = 2;
+ }
+ _gm->_rooms[ELEVATOR]->getObject(5)->_exitRoom = CITY1;
+ _gm->_state._elevatorE = 0;
+ return false;
}
City2::City2(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 23;
_id = CITY2;
_shown[0] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringSign, kStringSign3Description, NULLOBJECT, NULLTYPE, 2, 2, 0);
+ _objectState[1] = Object(_id, kStringSign, kStringSign4Description, NULLOBJECT, NULLTYPE, 3, 3, 0);
+ _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_L, EXIT | OPENABLE, 0, 0, 1, ELEVATOR, 10);
+ _objectState[3] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_R, EXIT | OPENABLE, 1, 1, 2, ELEVATOR, 14);
}
void City2::onEntrance() {
@@ -1549,7 +1574,22 @@ void City2::animation() {
}
bool City2::interact(Action verb, Object &obj1, Object &obj2) {
- return true;
+ if (verb == ACTION_OPEN && obj1._id == DOOR_L) {
+ _objectState[0]._click = 255;
+ } else if (verb == ACTION_CLOSE && obj1._id == DOOR_L) {
+ _objectState[0]._click = 2;
+ } else if (verb == ACTION_OPEN && obj1._id == DOOR_R) {
+ _objectState[1]._click = 255;
+ } else if (verb == ACTION_CLOSE && obj1._id == DOOR_R) {
+ _objectState[1]._click = 3;
+ } else if (verb == ACTION_WALK && obj1._id == DOOR_L) {
+ _gm->_state._elevatorNumber = 3;
+ } else if (verb == ACTION_WALK && obj1._id == DOOR_R) {
+ _gm->_state._elevatorNumber = 4;
+ }
+ _gm->_rooms[ELEVATOR]->getObject(5)->_exitRoom = CITY2;
+ _gm->_state._elevatorE = 0;
+ return false;
}
Elevator::Elevator(Supernova2Engine *vm, GameManager *gm) {
diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp
index 25d3accd40..8f3a3cfa79 100644
--- a/engines/supernova2/state.cpp
+++ b/engines/supernova2/state.cpp
@@ -42,6 +42,8 @@ bool GameManager::serialize(Common::WriteStream *out) {
out->writeByte(_state._admission);
out->writeByte(_state._tipsy);
out->writeByte(_state._dark);
+ out->writeByte(_state._elevatorE);
+ out->writeByte(_state._elevatorNumber);
out->writeUint32LE(_state._eventTime);
out->writeSint32LE(_state._eventCallback);
@@ -76,6 +78,8 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) {
_state._admission = in->readByte();
_state._tipsy = in->readByte();
_state._dark = in->readByte();
+ _state._elevatorE = in->readByte();
+ _state._elevatorNumber = in->readByte();
_state._eventTime = in->readUint32LE();
_state._eventCallback = (EventFunction)in->readSint32LE();
_vm->setGameString(kStringMoney, Common::String::format("%d Xa", _state._money));
@@ -344,6 +348,8 @@ void GameManager::initState() {
_state._admission = 0;
_state._tipsy = false;
_state._dark = false;
+ _state._elevatorE = 0;
+ _state._elevatorNumber = 0;
_state._eventTime = kMaxTimerValue;
_state._eventCallback = kNoFn;
}
diff --git a/engines/supernova2/state.h b/engines/supernova2/state.h
index 2382cd0aec..927bca3174 100644
--- a/engines/supernova2/state.h
+++ b/engines/supernova2/state.h
@@ -43,6 +43,8 @@ struct GameState {
char _admission;
bool _tipsy;
bool _dark;
+ char _elevatorE;
+ char _elevatorNumber;
EventFunction _eventCallback;
uint32 _eventTime;
};