diff options
author | Filippos Karapetis | 2015-07-04 01:43:08 +0300 |
---|---|---|
committer | Filippos Karapetis | 2015-07-04 01:51:47 +0300 |
commit | 4d501c79e0334e8e26ca4d0d1c174bec7b116e55 (patch) | |
tree | 6f1a1a59b374b049728a79e36d3a686d9c2cd30a | |
parent | 972e7e313e170521cf624ee6e93ccf87eadeb225 (diff) | |
download | scummvm-rg350-4d501c79e0334e8e26ca4d0d1c174bec7b116e55.tar.gz scummvm-rg350-4d501c79e0334e8e26ca4d0d1c174bec7b116e55.tar.bz2 scummvm-rg350-4d501c79e0334e8e26ca4d0d1c174bec7b116e55.zip |
MADS: V2: Initial work on Phantom scenes 101 and 102
-rw-r--r-- | engines/mads/module.mk | 1 | ||||
-rw-r--r-- | engines/mads/phantom/phantom_scenes.cpp | 5 | ||||
-rw-r--r-- | engines/mads/phantom/phantom_scenes.h | 23 | ||||
-rw-r--r-- | engines/mads/phantom/phantom_scenes1.cpp | 282 | ||||
-rw-r--r-- | engines/mads/phantom/phantom_scenes1.h | 89 |
5 files changed, 376 insertions, 24 deletions
diff --git a/engines/mads/module.mk b/engines/mads/module.mk index 62592c03bc..7cb7a91e8c 100644 --- a/engines/mads/module.mk +++ b/engines/mads/module.mk @@ -6,6 +6,7 @@ MODULE_OBJS := \ phantom/game_phantom.o \ phantom/globals_phantom.o \ phantom/phantom_scenes.o \ + phantom/phantom_scenes1.o \ nebular/dialogs_nebular.o \ nebular/game_nebular.o \ nebular/globals_nebular.o \ diff --git a/engines/mads/phantom/phantom_scenes.cpp b/engines/mads/phantom/phantom_scenes.cpp index afacde7a90..f7f4d154df 100644 --- a/engines/mads/phantom/phantom_scenes.cpp +++ b/engines/mads/phantom/phantom_scenes.cpp @@ -28,6 +28,7 @@ #include "mads/scene.h" #include "mads/phantom/game_phantom.h" #include "mads/phantom/phantom_scenes.h" +#include "mads/phantom/phantom_scenes1.h" namespace MADS { @@ -42,9 +43,9 @@ SceneLogic *SceneFactory::createScene(MADSEngine *vm) { switch (scene._nextSceneId) { // Scene group #1 (theater, stage and dressing rooms) case 101: // seats - return new DummyScene(vm); // TODO + return new Scene101(vm); case 102: // music stands - return new DummyScene(vm); // TODO + return new Scene102(vm); case 103: // below stage return new DummyScene(vm); // TODO case 104: // stage diff --git a/engines/mads/phantom/phantom_scenes.h b/engines/mads/phantom/phantom_scenes.h index f1ad27a4e0..87132b7aa0 100644 --- a/engines/mads/phantom/phantom_scenes.h +++ b/engines/mads/phantom/phantom_scenes.h @@ -49,6 +49,7 @@ enum Verb { VERB_CLIMB_DOWN = 0x21, VERB_CLIMB_INTO = 0x22, VERB_CLIMB_THROUGH = 0x23, + VERB_EXIT_TO = 0x37, VERB_JUMP_INTO = 0x53, VERB_LOOK_AT = 0x60, VERB_LOOK_THROUGH = 0x61, @@ -105,7 +106,6 @@ enum Noun { NOUN_EXIT = 0x34, NOUN_EXIT_DOWN = 0x35, NOUN_EXIT_SIGN = 0x36, - NOUN_EXIT_TO = 0x37, NOUN_EXIT_TO_BACKSTAGE = 0x38, NOUN_EXIT_TO_CELLAR = 0x39, NOUN_EXIT_TO_CORRIDOR = 0x3A, @@ -485,27 +485,6 @@ protected: }; // TODO: Temporary, remove once implemented properly -class Scene1xx : public PhantomScene { -protected: - /** - * Plays an appropriate sound when entering a scene - */ - void sceneEntrySound() {} - - /** - *Sets the AA file to use for the scene - */ - void setAAName() {} - - /** - * Updates the prefix used for getting player sprites for the scene - */ - void setPlayerSpritesPrefix() {} -public: - Scene1xx(MADSEngine *vm) : PhantomScene(vm) {} -}; - -// TODO: Temporary, remove once implemented properly class DummyScene : public PhantomScene { public: DummyScene(MADSEngine *vm) : PhantomScene(vm) { diff --git a/engines/mads/phantom/phantom_scenes1.cpp b/engines/mads/phantom/phantom_scenes1.cpp new file mode 100644 index 0000000000..2d991fd3bc --- /dev/null +++ b/engines/mads/phantom/phantom_scenes1.cpp @@ -0,0 +1,282 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" +#include "mads/mads.h" +#include "mads/scene.h" +#include "mads/phantom/phantom_scenes.h" +#include "mads/phantom/phantom_scenes1.h" + +namespace MADS { + +namespace Phantom { + +void Scene1xx::setAAName() { + // TODO + //int idx = 0; + //_game._aaName = Resources::formatAAName(idx); +} + +void Scene1xx::sceneEntrySound() { + // TODO +} + +/*------------------------------------------------------------------------*/ + +Scene101::Scene101(MADSEngine *vm) : Scene1xx(vm) { + +} + +void Scene101::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + +} + +void Scene101::setup() { + //setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene101::enter() { + // TODO + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + // TODO + //_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else { + // TODO + } + + // TODO +} + +void Scene101::step() { + // TODO +} + +void Scene101::preActions() { + if (_action.isAction(VERB_EXIT_TO, NOUN_ORCHESTRA_PIT)) { + // TODO: Handle Brie + _game._player._walkOffScreenSceneId = 102; + } else if (_action.isAction(VERB_EXIT_TO, NOUN_GRAND_FOYER)) { + // TODO: Handle Brie + _game._player._walkOffScreenSceneId = 202; + } else if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) { + _vm->_dialogs->show(10121); + } else if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) { + if (_globals[kBrieTalkStatus] == 2) + _game._player._needToWalk = false; + } + + // TODO +} + +void Scene101::actions() { + // TODO: Brie conversation + + // TODO: Look around + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_AISLE)) { + _vm->_dialogs->show(10112); + } else if (_action.isObject(NOUN_CHANDELIER)) { + _vm->_dialogs->show(10113); + } else if (_action.isObject(NOUN_BACK_WALL)) { + _vm->_dialogs->show(10114); + } else if (_action.isObject(NOUN_SIDE_WALL)) { + _vm->_dialogs->show(10115); + } else if (_action.isObject(NOUN_SEATS)) { + // TODO: Finish this + _vm->_dialogs->show(10116); + } else if (_action.isObject(NOUN_GRAND_FOYER)) { + _vm->_dialogs->show(10117); + } else if (_action.isObject(NOUN_ORCHESTRA_PIT)) { + _vm->_dialogs->show(10118); + } else if (_action.isObject(NOUN_MONSIEUR_BRIE)) { + _vm->_dialogs->show(10120); + } + + _game._player._stepEnabled = true; + } else if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) { + if (_globals[kBrieTalkStatus] == 2) + _vm->_dialogs->show(10122); + _game._player._stepEnabled = true; + } else if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) { + _game._player._stepEnabled = true; + } +} + +/*------------------------------------------------------------------------*/ + +Scene102::Scene102(MADSEngine *vm) : Scene1xx(vm) { + _animRunningFl = false; +} + +void Scene102::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_animRunningFl); +} + +void Scene102::setup() { + //setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene102::enter() { + _animRunningFl = false; + + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RAL86"); + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + // TODO + //_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else { + // TODO + } + + if (_scene->_priorSceneId == 101) { + _game._player._playerPos = Common::Point(97, 79); + _game._player._facing = FACING_SOUTHEAST; + // TODO + _game._player.walk(Common::Point(83, 87), FACING_SOUTHEAST); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else if (_scene->_priorSceneId == 104) { + // Player fell from pit -> death + // TODO + } else if (_scene->_priorSceneId == 103 || _scene->_priorSceneId != -1) { + _game._player._playerPos = Common::Point(282, 145); + _game._player._facing = FACING_WEST; + _animRunningFl = true; + // TODO: Door closing animation + } else if (_scene->_priorSceneId == -1) { + // TODO + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } + + sceneEntrySound(); +} + +void Scene102::step() { + if (_game._trigger == 60) { // Door closes + // TODO + _animRunningFl = false; + } else if (_game._trigger == 65) { // Death + // TODO + _scene->_currentSceneId = 104; + } +} + +void Scene102::preActions() { + if (_action.isAction(VERB_OPEN, NOUN_ORCHESTRA_DOOR) || _action.isAction(VERB_PUSH, NOUN_ORCHESTRA_DOOR)) { + _game._player.walk(Common::Point(282, 145), FACING_EAST); + } +} + +void Scene102::actions() { + if (_action.isAction(VERB_WALK_DOWN, NOUN_AISLE)) { + _scene->_nextSceneId = 101; + _game._player._stepEnabled = true; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_ORCHESTRA_DOOR) || + _action.isAction(VERB_PUSH, NOUN_ORCHESTRA_DOOR) || + _action.isAction(VERB_OPEN, NOUN_ORCHESTRA_DOOR)) { + if (_animRunningFl) { + // TODO + } else { + _scene->_nextSceneId = 103; // FIXME: temporary HACK - remove! + + switch (_game._trigger) { + case 70: // try again + case 0: + // TODO + break; + case 1: + _scene->_nextSceneId = 103; + break; + } + } + + _game._player._stepEnabled = true; + } + + // TODO: Look around + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_PIT)) + _vm->_dialogs->show(10211); + else if (_action.isObject(NOUN_SEATS)) + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->show(10212); + else + _vm->_dialogs->show(10230); + else if (_action.isObject(NOUN_ORCHESTRA_DOOR)) + _vm->_dialogs->show(10213); + else if (_action.isObject(NOUN_CONDUCTORS_STAND)) + _vm->_dialogs->show(10214); + else if (_action.isObject(NOUN_MUSIC_STAND) || _action.isObject(NOUN_MUSIC_STANDS)) + _vm->_dialogs->show(10215); + else if (_action.isObject(NOUN_PROMPTERS_BOX)) + _vm->_dialogs->show(10217); + else if (_action.isObject(NOUN_STAGE)) + _vm->_dialogs->show(10218); + else if (_action.isObject(NOUN_APRON)) + _vm->_dialogs->show(10219); + else if (_action.isObject(NOUN_SIDE_WALL)) + _vm->_dialogs->show(10220); + else if (_action.isObject(NOUN_FOLDING_CHAIRS)) + _vm->_dialogs->show(10221); + else if (_action.isObject(NOUN_AISLE)) + _vm->_dialogs->show(10222); + else if (_action.isObject(NOUN_PROSCENIUM_ARCH)) + _vm->_dialogs->show(10223); + else if (_action.isObject(NOUN_ACT_CURTAIN)) + _vm->_dialogs->show(10224); + else if (_action.isObject(NOUN_IN_ONE)) + _vm->_dialogs->show(10225); + else if (_action.isObject(NOUN_IN_TWO)) + _vm->_dialogs->show(10226); + else if (_action.isObject(NOUN_LEG)) + _vm->_dialogs->show(10227); + else if (_action.isObject(NOUN_CHANDELIER)) + _vm->_dialogs->show(10231); + else + return; + + _game._player._stepEnabled = true; + } + + if (_action.isAction(VERB_CLOSE, NOUN_ORCHESTRA_DOOR)) { + _vm->_dialogs->show(10228); + _game._player._stepEnabled = true; + } +} + + +/*------------------------------------------------------------------------*/ + +} // End of namespace Phantom +} // End of namespace MADS diff --git a/engines/mads/phantom/phantom_scenes1.h b/engines/mads/phantom/phantom_scenes1.h new file mode 100644 index 0000000000..0f5f56a4cf --- /dev/null +++ b/engines/mads/phantom/phantom_scenes1.h @@ -0,0 +1,89 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef MADS_PHANTOM_SCENES1_H +#define MADS_PHANTOM_SCENES1_H + +#include "common/scummsys.h" +#include "common/serializer.h" +#include "mads/game.h" +#include "mads/scene.h" +#include "mads/phantom/phantom_scenes.h" + +namespace MADS { + +namespace Phantom { + +class Scene1xx : public PhantomScene { +protected: + /** + * Plays an appropriate sound when entering a scene + */ + void sceneEntrySound(); + + /** + *Sets the AA file to use for the scene + */ + void setAAName(); + + /** + * Updates the prefix used for getting player sprites for the scene + */ + void setPlayerSpritesPrefix(); +public: + Scene1xx(MADSEngine *vm) : PhantomScene(vm) {} +}; + +class Scene101 : public Scene1xx { +private: + // TODO + +public: + Scene101(MADSEngine *vm); + virtual void synchronize(Common::Serializer &s); + + virtual void setup(); + virtual void enter(); + virtual void step(); + virtual void preActions(); + virtual void actions(); +}; + +class Scene102 : public Scene1xx { +private: + bool _animRunningFl; + +public: + Scene102(MADSEngine *vm); + virtual void synchronize(Common::Serializer &s); + + virtual void setup(); + virtual void enter(); + virtual void step(); + virtual void preActions(); + virtual void actions(); +}; + +} // End of namespace Phantom +} // End of namespace MADS + +#endif /* MADS_PHANTOM_SCENES1_H */ |