diff options
author | Matthew Stewart | 2018-05-23 19:56:15 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | ca3a9dcc8764909e163a860e4a472404620480e2 (patch) | |
tree | 4b546d6c1ad2466e25d4c24bbb642d7c0eb49c58 /engines/startrek/rooms | |
parent | bd79e4d653f9476de1501de149589e583e47411d (diff) | |
download | scummvm-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.cpp | 34 | ||||
-rw-r--r-- | engines/startrek/rooms/function_map.h | 33 |
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 }, }; } |