From c275e304df97260ca79b5c2ca2b64e4de3670294 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 13 Oct 2015 09:09:50 +0200 Subject: MADS: Phantom: Rewrite logic for Scene102 --- engines/mads/phantom/phantom_scenes1.cpp | 121 ++++++++++++++++++++----------- engines/mads/phantom/phantom_scenes1.h | 2 +- engines/mads/scene.cpp | 8 ++ engines/mads/scene.h | 2 + engines/mads/sequence.cpp | 4 + engines/mads/sequence.h | 1 + 6 files changed, 94 insertions(+), 44 deletions(-) (limited to 'engines') diff --git a/engines/mads/phantom/phantom_scenes1.cpp b/engines/mads/phantom/phantom_scenes1.cpp index cb36be16f4..3b8016f624 100644 --- a/engines/mads/phantom/phantom_scenes1.cpp +++ b/engines/mads/phantom/phantom_scenes1.cpp @@ -606,50 +606,86 @@ void Scene101::handleAnimation1() { /*------------------------------------------------------------------------*/ Scene102::Scene102(MADSEngine *vm) : Scene1xx(vm) { - _animRunningFl = false; + _anim0RunningFl = false; } void Scene102::synchronize(Common::Serializer &s) { Scene1xx::synchronize(s); - s.syncAsByte(_animRunningFl); + s.syncAsByte(_anim0RunningFl); } void Scene102::setup() { - //setPlayerSpritesPrefix(); + setPlayerSpritesPrefix(); setAAName(); } void Scene102::enter() { - _animRunningFl = false; + _anim0RunningFl = 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); + _scene->drawToBackground(_globals._sequenceIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); } else { - // TODO + _scene->_hotspots.activate(NOUN_CHANDELIER, false); } if (_scene->_priorSceneId == 101) { _game._player._playerPos = Common::Point(97, 79); _game._player._facing = FACING_SOUTHEAST; - // TODO + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); _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 + Common::Point deathPos = Common::Point(0, 0); + int deathScale = 0; + int deathDepth = 0; + _game._player._stepEnabled = false; + _game._player._visible = false; + + switch (_globals[36]) { + case 0: + deathPos = Common::Point(221, 57); + deathScale = 50; + deathDepth = 14; + break; + + case 1: + deathPos = Common::Point(219, 85); + deathScale = 60; + deathDepth = 6; + break; + + case 2: + deathPos = Common::Point(257, 138); + deathScale = 76; + deathDepth = 1; + break; + + default: + break; + } + _scene->_userInterface.emptyConversationList(); + _scene->_userInterface.setup(kInputConversation); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], deathDepth); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], deathPos); + _scene->_sequences.setScale(_globals._sequenceIndexes[3], deathScale); + _scene->_sequences.setTimingTrigger(120, 65); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); } 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 + _anim0RunningFl = true; + _scene->loadAnimation(formAnimName('d', 1), 60, 0); } else if (_scene->_priorSceneId == -1) { - // TODO + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); } @@ -657,12 +693,20 @@ void Scene102::enter() { } void Scene102::step() { - if (_game._trigger == 60) { // Door closes - // TODO - _animRunningFl = false; - } else if (_game._trigger == 65) { // Death - // TODO - _scene->_currentSceneId = 104; + if (_game._trigger == 60) { + // Door closes + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _anim0RunningFl = false; + } else if (_game._trigger == 65) { + // Death + if (_globals[kDeathLocation] == 0) + _vm->_dialogs->show(10232); + else + _vm->_dialogs->show(10229); + + _vm->_sound->command(16); + _scene->_nextSceneId = 104; } } @@ -675,34 +719,31 @@ void Scene102::preActions() { 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) || + } else 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 + if (_anim0RunningFl) { + _scene->_sequences.setTimingTrigger(15, 70); + _game._player._stepEnabled = false; } else { - _scene->_nextSceneId = 103; // FIXME: temporary HACK - remove! - switch (_game._trigger) { case 70: // try again case 0: - // TODO + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _scene->loadAnimation(formAnimName('d', 0), 1, 0); + _game._player._stepEnabled = false; + _game._player._visible = false; break; case 1: _scene->_nextSceneId = 103; break; + default: + break; } } - - _game._player._stepEnabled = true; - } - - // TODO: Look around - - if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + } else if (_action._lookFlag) + _vm->_dialogs->show(10210); + else 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)) @@ -740,18 +781,12 @@ void Scene102::actions() { _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)) { + } else if (_action.isAction(VERB_CLOSE, NOUN_ORCHESTRA_DOOR)) { _vm->_dialogs->show(10228); - _game._player._stepEnabled = true; } -} + _game._player._stepEnabled = false; +} /*------------------------------------------------------------------------*/ diff --git a/engines/mads/phantom/phantom_scenes1.h b/engines/mads/phantom/phantom_scenes1.h index bd5a4796a7..2da9ba7f91 100644 --- a/engines/mads/phantom/phantom_scenes1.h +++ b/engines/mads/phantom/phantom_scenes1.h @@ -88,7 +88,7 @@ public: class Scene102 : public Scene1xx { private: - bool _animRunningFl; + bool _anim0RunningFl; public: Scene102(MADSEngine *vm); diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp index b02c251942..0db0f93cc1 100644 --- a/engines/mads/scene.cpp +++ b/engines/mads/scene.cpp @@ -754,4 +754,12 @@ void Scene::setDynamicAnim(int id, int anim_id, int segment) { void Scene::setCamera(Common::Point pos) { warning("TODO: Scene::setCamera"); } + +void Scene::drawToBackground(int series_id, int sprite_id, Common::Point pos, int depth, int scale) { + warning("TODO: Scene::drawToBackground"); +} + +void Scene::deleteSequence(int idx) { + warning("TODO: Scene::deleteSequence"); +} } // End of namespace MADS diff --git a/engines/mads/scene.h b/engines/mads/scene.h index d89cbb8c36..fd4ed240c4 100644 --- a/engines/mads/scene.h +++ b/engines/mads/scene.h @@ -256,6 +256,8 @@ public: void setDynamicAnim(int id, int anim_id, int segment); void setCamera(Common::Point pos); + void drawToBackground(int series_id, int sprite_id, Common::Point pos, int depth, int scale); + void deleteSequence(int idx); }; } // End of namespace MADS diff --git a/engines/mads/sequence.cpp b/engines/mads/sequence.cpp index dc670062e1..3b261f5b15 100644 --- a/engines/mads/sequence.cpp +++ b/engines/mads/sequence.cpp @@ -555,4 +555,8 @@ int SequenceList::addStampCycle(int srcSpriteIdx, bool flipped, int sprite) { return -1; } +int SequenceList::setTimingTrigger(int delay, int code) { + warning("TODO: SequenceList::setTimingTrigger"); + return -1; +} } // End of namespace diff --git a/engines/mads/sequence.h b/engines/mads/sequence.h index df491703d4..0343e9c970 100644 --- a/engines/mads/sequence.h +++ b/engines/mads/sequence.h @@ -127,6 +127,7 @@ public: void setMotion(int seqIndex, int flags, int deltaX, int deltaY); int addStampCycle(int srcSpriteIdx, bool flipped, int sprite); + int setTimingTrigger(int delay, int code); }; } // End of namespace MADS -- cgit v1.2.3