aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2014-03-30 11:51:36 +0200
committerStrangerke2014-03-30 11:51:36 +0200
commitfc61e79f29e1f9e734fc05a737849f5952450781 (patch)
treee8f2e6b3f15dab094131df79fe9015172b2db369
parent89af9dde8c412b4d11cd0107fe20f9bbbfd2e3bc (diff)
downloadscummvm-rg350-fc61e79f29e1f9e734fc05a737849f5952450781.tar.gz
scummvm-rg350-fc61e79f29e1f9e734fc05a737849f5952450781.tar.bz2
scummvm-rg350-fc61e79f29e1f9e734fc05a737849f5952450781.zip
MADS: Implement Scene208::subAction()
-rw-r--r--engines/mads/nebular/nebular_scenes2.cpp85
-rw-r--r--engines/mads/nebular/nebular_scenes2.h1
2 files changed, 82 insertions, 4 deletions
diff --git a/engines/mads/nebular/nebular_scenes2.cpp b/engines/mads/nebular/nebular_scenes2.cpp
index 9421eaee5f..ccf2bb5ca2 100644
--- a/engines/mads/nebular/nebular_scenes2.cpp
+++ b/engines/mads/nebular/nebular_scenes2.cpp
@@ -1530,6 +1530,83 @@ void Scene208::preActions() {
player._walkOffScreenSceneId = 207;
}
+void Scene208::subAction(int mode) {
+ int nextTrigger;
+
+ switch (_game._trigger) {
+ case 0:
+ _game._player._stepEnabled = false;
+ _game._player._visible = false;
+ _globals._spriteIndexes[20] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
+ _scene->_sequences.setMsgLayout(_globals._spriteIndexes[20]);
+
+ if ((mode == 1) || (mode == 2))
+ nextTrigger = 1;
+ else
+ nextTrigger = 2;
+
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[20], SM_0, 0, nextTrigger);
+ break;
+
+ case 1: {
+ int oldVal = _globals._spriteIndexes[20];
+ _globals._spriteIndexes[20] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 12, 3, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[20], 3, 4);
+ _scene->_sequences.setMsgLayout(_globals._spriteIndexes[20]);
+ _scene->_sequences.updateTimeout(_globals._spriteIndexes[20], oldVal);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[20], SM_0, 0, 2);
+ _vm->_sound->command(20);
+ }
+ break;
+
+ case 2: {
+ switch (mode) {
+ case 1:
+ _game._objects.addToInventory(6);
+ _scene->_sequences.remove(_globals._spriteIndexes[17]);
+ _globals[kLeavesStatus] = 1;
+ break;
+
+ case 2:
+ _game._objects.setRoom(6, 1);
+ _globals[kLeavesStatus] = 2;
+ updateTrap();
+ break;
+
+ case 3:
+ _scene->_sequences.remove(_globals._spriteIndexes[18]);
+ _globals._spriteIndexes[19] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
+ _game._objects.removeFromInventory(10, 1);
+ _vm->_sound->command(34);
+ break;
+
+ case 4:
+ _game._objects.removeFromInventory(1, 1);
+ _vm->_sound->command(33);
+ break;
+
+ case 5:
+ _game._objects.removeFromInventory(2, 1);
+ _vm->_sound->command(33);
+ break;
+ }
+
+ int oldVal = _globals._spriteIndexes[20];
+ _globals._spriteIndexes[20] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
+ _scene->_sequences.setAnimRange(_globals._spriteIndexes[20], 1, 3);
+ _scene->_sequences.setMsgLayout(_globals._spriteIndexes[20]);
+ _scene->_sequences.updateTimeout(_globals._spriteIndexes[20], oldVal);
+ _scene->_sequences.addSubEntry(_globals._spriteIndexes[20], SM_0, 0, 3);
+ }
+ break;
+
+ case 3:
+ _game._player._visible = true;
+ _game._player._stepEnabled = true;
+ break;
+ }
+}
+
void Scene208::actions() {
if (_action.isAction(0x18C, 0x19F)) {
if (_globals[kRhotundaStatus])
@@ -1544,20 +1621,20 @@ void Scene208::actions() {
} else if (_action.isAction(0x18C, 0x83)) {
_scene->_nextSceneId = 212;
} else if (_action.isAction(VERB_TAKE, 0x1AA) && (!_globals[kLeavesStatus] || _game._trigger)) {
- warning("TODO: sub3B282(1);");
+ subAction(1);
if (_game._player._stepEnabled)
_vm->_dialogs->showPicture(OBJ_BIG_LEAVES, 0x326, 0);
} else if (_action.isAction(VERB_PUT, 0x23, 0x19E) && (_globals[kLeavesStatus] == 1 || _game._trigger)) {
- warning("TODO: sub3B282(2);");
+ subAction(2);
} else if (_action.isAction(VERB_PUT, 0x17A, 0x1A9)) {
- warning("TODO: sub3B282(3);");
+ subAction(3);
if (_game._player._stepEnabled) {
_game._player._stepEnabled = false;
_globals._v0 = true;
_game._player.walk(Common::Point(20, 148), FACING_EAST);
}
} else if (_action.isAction(VERB_PUT, 0x35, 0x1A9)) {
- warning("TODO: sub3B282(4);");
+ subAction(4);
if (_game._player._stepEnabled) {
_vm->_dialogs->show(0x514C);
}
diff --git a/engines/mads/nebular/nebular_scenes2.h b/engines/mads/nebular/nebular_scenes2.h
index 21d1028911..6d716657c5 100644
--- a/engines/mads/nebular/nebular_scenes2.h
+++ b/engines/mads/nebular/nebular_scenes2.h
@@ -139,6 +139,7 @@ public:
class Scene208: public Scene2xx {
private:
void updateTrap();
+ void subAction(int mode);
public:
Scene208(MADSEngine *vm) : Scene2xx(vm) {}