aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/rooms
diff options
context:
space:
mode:
authorMatthew Stewart2018-05-23 19:56:15 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commitca3a9dcc8764909e163a860e4a472404620480e2 (patch)
tree4b546d6c1ad2466e25d4c24bbb642d7c0eb49c58 /engines/startrek/rooms
parentbd79e4d653f9476de1501de149589e583e47411d (diff)
downloadscummvm-rg350-ca3a9dcc8764909e163a860e4a472404620480e2.tar.gz
scummvm-rg350-ca3a9dcc8764909e163a860e4a472404620480e2.tar.bz2
scummvm-rg350-ca3a9dcc8764909e163a860e4a472404620480e2.zip
STARTREK: Finish implementing first room
Doors now work, and the system of "walking, then performing an action afterward" is implemented.
Diffstat (limited to 'engines/startrek/rooms')
-rw-r--r--engines/startrek/rooms/demon0.cpp34
-rw-r--r--engines/startrek/rooms/function_map.h33
2 files changed, 50 insertions, 17 deletions
diff --git a/engines/startrek/rooms/demon0.cpp b/engines/startrek/rooms/demon0.cpp
index f687eaaaa3..41a5bbf802 100644
--- a/engines/startrek/rooms/demon0.cpp
+++ b/engines/startrek/rooms/demon0.cpp
@@ -72,6 +72,13 @@ void Room::demon0TouchedWarp0() {
_vm->_awayMission.rdfStillDoDefaultAction = true;
}
+void Room::demon0WalkToBottomDoor() {
+ _vm->_awayMission.transitioningIntoRoom = 1;
+ _rdfData[0xcd] = 1; // FIXME
+ _vm->_awayMission.field25[OBJECT_KIRK] = DIR_E;
+ walkCrewman(OBJECT_KIRK, 243, 158, 1);
+}
+
void Room::demon0TouchedHotspot1() {
if (_rdfData[0xcd] != 1) // FIXME: not portable to mac/amiga?
return;
@@ -79,13 +86,32 @@ void Room::demon0TouchedHotspot1() {
playSoundEffectIndex(0x05);
}
+void Room::demon0ReachedBottomDoor() {
+ if (++_rdfData[0xca] != 2) // FIXME
+ return;
+ loadRoomIndex(5, 0);
+}
+
+void Room::demon0WalkToTopDoor() {
+ _vm->_awayMission.transitioningIntoRoom = 1;
+ _rdfData[0xcc] = 1; // FIXME
+ _vm->_awayMission.field25[OBJECT_KIRK] = DIR_E;
+ walkCrewman(OBJECT_KIRK, 157, 134, 2);
+}
+
void Room::demon0TouchedHotspot0() {
- if (_rdfData[0xcd] != 1) // FIXME: not portable to mac/amiga?
+ if (_rdfData[0xcc] != 1) // FIXME: not portable to mac/amiga?
return;
loadActorAnim2(10, "s0r0d2", 158, 130, 2);
playSoundEffectIndex(0x05);
}
+void Room::demon0ReachedTopDoor() {
+ if (++_rdfData[0xcb] != 2) // FIXME
+ return;
+ loadRoomIndex(6, 3);
+}
+
void Room::demon0TalkToPrelate() {
const char *options1[] = {
"Capt. Kirk",
@@ -471,7 +497,7 @@ void Room::demon0AskPrelateAboutSightings() {
_vm->_awayMission.field36 = 1;
}
-void Room::useSTricorderAnywhere() {
+void Room::demon0UseSTricorderAnywhere() {
loadActorAnim2(OBJECT_SPOCK, "sscans", -1, -1, 0);
playSoundEffectIndex(0x04);
@@ -484,7 +510,7 @@ void Room::useSTricorderAnywhere() {
showRoomSpecificText(text);
}
-void Room::useMTricorderAnywhere() {
+void Room::demon0UseMTricorderAnywhere() {
loadActorAnim2(OBJECT_MCCOY, "mscans", -1, -1, 0);
playSoundEffectIndex(0x04);
@@ -496,7 +522,7 @@ void Room::useMTricorderAnywhere() {
showRoomSpecificText(text);
}
-void Room::useMTricorderOnPrelate() {
+void Room::demon0UseMTricorderOnPrelate() {
loadActorAnim2(OBJECT_MCCOY, "mscans", -1, -1, 0);
playSoundEffectIndex(0x04);
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 6b5dfd0307..ae7e8eb252 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -37,10 +37,17 @@ RoomAction demon0ActionList[] = {
{ Action(ACTION_TOUCHED_WARP, 0, 0, 0), &Room::demon0TouchedWarp0 },
- // TODO: Walk events; entered room event; beamed in event
-
+ { Action(ACTION_WALK, 0x27, 0, 0), &Room::demon0WalkToBottomDoor },
+ { Action(ACTION_WALK, 9, 0, 0), &Room::demon0WalkToBottomDoor },
{ Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::demon0TouchedHotspot1 },
+ { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon0ReachedBottomDoor },
+ { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon0ReachedBottomDoor },
+
+ { Action(ACTION_WALK, 0x26, 0, 0), &Room::demon0WalkToTopDoor },
+ { Action(ACTION_WALK, 10, 0, 0), &Room::demon0WalkToTopDoor },
{ Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::demon0TouchedHotspot0 },
+ { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon0ReachedTopDoor },
+ { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon0ReachedTopDoor },
{ Action(ACTION_TALK, 8, 0, 0), &Room::demon0TalkToPrelate },
{ Action(ACTION_LOOK, 8, 0, 0), &Room::demon0LookAtPrelate },
@@ -59,23 +66,23 @@ RoomAction demon0ActionList[] = {
{ Action(ACTION_LOOK, 0xff, 0, 0), &Room::demon0LookAnywhere },
{ Action(ACTION_LOOK, 0x24, 0, 0), &Room::demon0LookAtBushes },
- { Action(ACTION_LOOK, 0, 0, 0), &Room::demon0LookAtKirk },
- { Action(ACTION_LOOK, 2, 0, 0), &Room::demon0LookAtMcCoy },
- { Action(ACTION_LOOK, 3, 0, 0), &Room::demon0LookAtRedShirt },
- { Action(ACTION_LOOK, 1, 0, 0), &Room::demon0LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon0LookAtKirk },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon0LookAtMcCoy },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon0LookAtRedShirt },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon0LookAtSpock },
{ Action(ACTION_LOOK, 9, 0, 0), &Room::demon0LookAtShelter }, // Door 1
{ Action(ACTION_LOOK, 10, 0, 0), &Room::demon0LookAtShelter }, // Door 2
{ Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon0LookAtShelter }, // Shelter itself
- { Action(ACTION_TALK, 0, 0, 0), &Room::demon0TalkToKirk },
- { Action(ACTION_TALK, 3, 0, 0), &Room::demon0TalkToRedshirt },
- { Action(ACTION_TALK, 2, 0, 0), &Room::demon0TalkToMcCoy },
- { Action(ACTION_TALK, 1, 0, 0), &Room::demon0TalkToSpock },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon0TalkToKirk },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon0TalkToRedshirt },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon0TalkToMcCoy },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon0TalkToSpock },
- { Action(ACTION_USE, OBJECT_ISTRICOR, 0xff, 0), &Room::useSTricorderAnywhere },
- { Action(ACTION_USE, OBJECT_IMTRICOR, 0xff, 0), &Room::useMTricorderAnywhere },
- { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::useMTricorderOnPrelate },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::demon0UseSTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::demon0UseMTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::demon0UseMTricorderOnPrelate },
};
}