aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorStrangerke2015-10-13 09:09:50 +0200
committerStrangerke2015-10-13 09:09:50 +0200
commitc275e304df97260ca79b5c2ca2b64e4de3670294 (patch)
tree05025bc719ba500c86b70143d3c17f8d8d5d3416 /engines
parent12a1393faf585b131701602d633edf07f07186dd (diff)
downloadscummvm-rg350-c275e304df97260ca79b5c2ca2b64e4de3670294.tar.gz
scummvm-rg350-c275e304df97260ca79b5c2ca2b64e4de3670294.tar.bz2
scummvm-rg350-c275e304df97260ca79b5c2ca2b64e4de3670294.zip
MADS: Phantom: Rewrite logic for Scene102
Diffstat (limited to 'engines')
-rw-r--r--engines/mads/phantom/phantom_scenes1.cpp121
-rw-r--r--engines/mads/phantom/phantom_scenes1.h2
-rw-r--r--engines/mads/scene.cpp8
-rw-r--r--engines/mads/scene.h2
-rw-r--r--engines/mads/sequence.cpp4
-rw-r--r--engines/mads/sequence.h1
6 files changed, 94 insertions, 44 deletions
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