aboutsummaryrefslogtreecommitdiff
path: root/engines/gnap/scenes
diff options
context:
space:
mode:
authorStrangerke2016-04-22 00:26:09 +0200
committerEugene Sandulenko2016-05-10 09:54:21 +0200
commit861e5c10677d1493fc00542fec9ed1f0a030cb25 (patch)
tree24df33b2c931c19cbc306e88e405d4378bf61f0c /engines/gnap/scenes
parentc30810c933111857a914fc904e71051e861ec125 (diff)
downloadscummvm-rg350-861e5c10677d1493fc00542fec9ed1f0a030cb25.tar.gz
scummvm-rg350-861e5c10677d1493fc00542fec9ed1f0a030cb25.tar.bz2
scummvm-rg350-861e5c10677d1493fc00542fec9ed1f0a030cb25.zip
GNAP: Refactor scenes 16, 47, 48, 54 (cutscenes)
Diffstat (limited to 'engines/gnap/scenes')
-rw-r--r--engines/gnap/scenes/scene16.cpp7
-rw-r--r--engines/gnap/scenes/scene16.h42
-rw-r--r--engines/gnap/scenes/scene47.cpp51
-rw-r--r--engines/gnap/scenes/scene47.h89
-rw-r--r--engines/gnap/scenes/scene48.cpp7
-rw-r--r--engines/gnap/scenes/scene48.h42
-rw-r--r--engines/gnap/scenes/scene54.cpp15
-rw-r--r--engines/gnap/scenes/scene54.h49
-rw-r--r--engines/gnap/scenes/scenecore.cpp125
-rw-r--r--engines/gnap/scenes/scenecore.h20
10 files changed, 414 insertions, 33 deletions
diff --git a/engines/gnap/scenes/scene16.cpp b/engines/gnap/scenes/scene16.cpp
index 64db758545..bfe9afaf87 100644
--- a/engines/gnap/scenes/scene16.cpp
+++ b/engines/gnap/scenes/scene16.cpp
@@ -23,10 +23,13 @@
#include "gnap/gnap.h"
#include "gnap/gamesys.h"
#include "gnap/resource.h"
+#include "gnap/scenes/scene16.h"
namespace Gnap {
-void GnapEngine::scene16_initCutscene() {
+Scene16::Scene16(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene16::init() {
_s99_sequenceIdArr[0] = 0x1F2;
_s99_sequenceIdArr[1] = 0x201;
_s99_sequenceIdArr[2] = 0x1FC;
@@ -77,6 +80,8 @@ void GnapEngine::scene16_initCutscene() {
_s99_sequenceCountArr[11] = 1;
_s99_sequenceCountArr[12] = 1;
_s99_itemsCount = 13;
+
+ return -1;
}
} // End of namespace Gnap
diff --git a/engines/gnap/scenes/scene16.h b/engines/gnap/scenes/scene16.h
new file mode 100644
index 0000000000..e9d3b7f071
--- /dev/null
+++ b/engines/gnap/scenes/scene16.h
@@ -0,0 +1,42 @@
+/* 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 GNAP_SCENE16_H
+#define GNAP_SCENE16_H
+
+#include "gnap/debugger.h"
+#include "gnap/scenes/scenecore.h"
+
+namespace Gnap {
+
+class GnapEngine;
+
+class Scene16: public CutScene {
+public:
+ Scene16(GnapEngine *vm);
+ ~Scene16() {}
+
+ virtual int init();
+};
+
+} // End of namespace Gnap
+#endif // GNAP_SCENE16_H
diff --git a/engines/gnap/scenes/scene47.cpp b/engines/gnap/scenes/scene47.cpp
index 50c8c39f22..ec0be02aeb 100644
--- a/engines/gnap/scenes/scene47.cpp
+++ b/engines/gnap/scenes/scene47.cpp
@@ -23,10 +23,13 @@
#include "gnap/gnap.h"
#include "gnap/gamesys.h"
#include "gnap/resource.h"
+#include "gnap/scenes/scene47.h"
namespace Gnap {
-void GnapEngine::scene47_initCutscene1() {
+Scene471::Scene471(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene471::init() {
_s99_sequenceIdArr[0] = 0x301;
_s99_sequenceIdArr[1] = 0x305;
_s99_sequenceIdArr[2] = 0x302;
@@ -48,9 +51,13 @@ void GnapEngine::scene47_initCutscene1() {
_s99_canSkip[3] = false;
_s99_canSkip[4] = false;
_s99_itemsCount = 5;
+
+ return -1;
}
-void GnapEngine::scene47_initCutscene2() {
+Scene472::Scene472(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene472::init() {
_s99_sequenceIdArr[0] = 0x306;
_s99_sequenceIdArr[1] = 0x309;
_s99_sequenceIdArr[2] = 0x307;
@@ -69,9 +76,13 @@ void GnapEngine::scene47_initCutscene2() {
_s99_canSkip[2] = false;
_s99_canSkip[3] = false;
_s99_itemsCount = 4;
+
+ return -1;
}
-void GnapEngine::scene47_initCutscene3() {
+Scene473::Scene473(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene473::init() {
_s99_sequenceIdArr[0] = 0x320;
_s99_sequenceIdArr[1] = 0x321;
_s99_resourceIdArr[0] = 0x142;
@@ -81,9 +92,13 @@ void GnapEngine::scene47_initCutscene3() {
_s99_canSkip[0] = false;
_s99_canSkip[1] = false;
_s99_itemsCount = 2;
+
+ return -1;
}
-void GnapEngine::scene47_initCutscene4() {
+Scene474::Scene474(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene474::init() {
_s99_sequenceIdArr[0] = 0x30C;
_s99_sequenceIdArr[1] = 0x30D;
_s99_sequenceIdArr[2] = 0x30B;
@@ -97,9 +112,13 @@ void GnapEngine::scene47_initCutscene4() {
_s99_canSkip[1] = false;
_s99_canSkip[2] = false;
_s99_itemsCount = 3;
+
+ return -1;
}
-void GnapEngine::scene47_initCutscene5() {
+Scene475::Scene475(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene475::init() {
_s99_sequenceIdArr[0] = 0x30E;
_s99_sequenceIdArr[1] = 0x30F;
_s99_sequenceIdArr[2] = 0x310;
@@ -111,18 +130,26 @@ void GnapEngine::scene47_initCutscene5() {
_s99_canSkip[0] = false;
_s99_canSkip[1] = false;
_s99_itemsCount = 2;
+
+ return -1;
}
-void GnapEngine::scene47_initCutscene6() {
+Scene476::Scene476(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene476::init() {
_s99_sequenceIdArr[0] = 0x31E;
_s99_sequenceIdArr[1] = 0x31F;
_s99_resourceIdArr[0] = 0x2FA;
_s99_sequenceCountArr[0] = 2;
_s99_canSkip[0] = false;
_s99_itemsCount = 1;
+
+ return -1;
}
-void GnapEngine::scene47_initCutscene7() {
+Scene477::Scene477(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene477::init() {
int v0, v4, v2, v3;
_s99_sequenceIdArr[0] = 0x316;
@@ -130,11 +157,11 @@ void GnapEngine::scene47_initCutscene7() {
_s99_sequenceIdArr[2] = 0x314;
_s99_sequenceIdArr[3] = 0x31B;
int v1 = 4;
- if (!isFlag(kGFTwigTaken)) {
+ if (!_vm->isFlag(kGFTwigTaken)) {
_s99_sequenceIdArr[4] = 0x31C;
v1 = 5;
}
- if (!isFlag(kGFPlatypusTalkingToAssistant))
+ if (!_vm->isFlag(kGFPlatypusTalkingToAssistant))
_s99_sequenceIdArr[v1++] = 0x31D;
v4 = v1;
_s99_sequenceIdArr[v1] = 0x319;
@@ -144,9 +171,9 @@ void GnapEngine::scene47_initCutscene7() {
_s99_sequenceIdArr[v0++] = 0x312;
_s99_sequenceIdArr[v0] = 0x31A;
v2 = v0 + 1;
- if (!isFlag(kGFTwigTaken))
+ if (!_vm->isFlag(kGFTwigTaken))
_s99_sequenceIdArr[v2++] = 0x31C;
- if (!isFlag(kGFPlatypusTalkingToAssistant))
+ if (!_vm->isFlag(kGFPlatypusTalkingToAssistant))
_s99_sequenceIdArr[v2++] = 0x31D;
_s99_sequenceIdArr[v2] = 0x313;
_s99_sequenceIdArr[v2 + 1] = 0x315;
@@ -166,6 +193,8 @@ void GnapEngine::scene47_initCutscene7() {
_s99_canSkip[3] = false;
_s99_canSkip[4] = false;
_s99_itemsCount = 5;
+
+ return -1;
}
} // End of namespace Gnap
diff --git a/engines/gnap/scenes/scene47.h b/engines/gnap/scenes/scene47.h
new file mode 100644
index 0000000000..f1c1034223
--- /dev/null
+++ b/engines/gnap/scenes/scene47.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 GNAP_SCENE47_H
+#define GNAP_SCENE47_H
+
+#include "gnap/debugger.h"
+#include "gnap/scenes/scenecore.h"
+
+namespace Gnap {
+
+class GnapEngine;
+
+class Scene471: public CutScene {
+public:
+ Scene471(GnapEngine *vm);
+ ~Scene471() {}
+
+ virtual int init();
+};
+
+class Scene472: public CutScene {
+public:
+ Scene472(GnapEngine *vm);
+ ~Scene472() {}
+
+ virtual int init();
+};
+
+class Scene473: public CutScene {
+public:
+ Scene473(GnapEngine *vm);
+ ~Scene473() {}
+
+ virtual int init();
+};
+
+class Scene474: public CutScene {
+public:
+ Scene474(GnapEngine *vm);
+ ~Scene474() {}
+
+ virtual int init();
+};
+
+class Scene475: public CutScene {
+public:
+ Scene475(GnapEngine *vm);
+ ~Scene475() {}
+
+ virtual int init();
+};
+
+class Scene476: public CutScene {
+public:
+ Scene476(GnapEngine *vm);
+ ~Scene476() {}
+
+ virtual int init();
+};
+
+class Scene477: public CutScene {
+public:
+ Scene477(GnapEngine *vm);
+ ~Scene477() {}
+
+ virtual int init();
+};
+} // End of namespace Gnap
+#endif // GNAP_SCENE47_H
diff --git a/engines/gnap/scenes/scene48.cpp b/engines/gnap/scenes/scene48.cpp
index a614ca4549..46d624ea3f 100644
--- a/engines/gnap/scenes/scene48.cpp
+++ b/engines/gnap/scenes/scene48.cpp
@@ -23,10 +23,13 @@
#include "gnap/gnap.h"
#include "gnap/gamesys.h"
#include "gnap/resource.h"
+#include "gnap/scenes/scene48.h"
namespace Gnap {
-void GnapEngine::scene48_initCutscene() {
+Scene48::Scene48(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene48::init() {
_s99_sequenceIdArr[0] = 390;
_s99_sequenceIdArr[1] = 391;
_s99_sequenceIdArr[2] = 392;
@@ -80,6 +83,8 @@ void GnapEngine::scene48_initCutscene() {
_s99_canSkip[11] = false;
_s99_canSkip[12] = false;
_s99_itemsCount = 13;
+
+ return -1;
}
} // End of namespace Gnap
diff --git a/engines/gnap/scenes/scene48.h b/engines/gnap/scenes/scene48.h
new file mode 100644
index 0000000000..24e54b4462
--- /dev/null
+++ b/engines/gnap/scenes/scene48.h
@@ -0,0 +1,42 @@
+/* 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 GNAP_SCENE48_H
+#define GNAP_SCENE48_H
+
+#include "gnap/debugger.h"
+#include "gnap/scenes/scenecore.h"
+
+namespace Gnap {
+
+class GnapEngine;
+
+class Scene48: public CutScene {
+public:
+ Scene48(GnapEngine *vm);
+ ~Scene48() {}
+
+ virtual int init();
+};
+
+} // End of namespace Gnap
+#endif // GNAP_SCENE48_H
diff --git a/engines/gnap/scenes/scene54.cpp b/engines/gnap/scenes/scene54.cpp
index b6e4be9fcb..935a1668ee 100644
--- a/engines/gnap/scenes/scene54.cpp
+++ b/engines/gnap/scenes/scene54.cpp
@@ -23,10 +23,13 @@
#include "gnap/gnap.h"
#include "gnap/gamesys.h"
#include "gnap/resource.h"
+#include "gnap/scenes/scene54.h"
namespace Gnap {
-void GnapEngine::scene54_initCutscene1() {
+Scene541::Scene541(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene541::init() {
_s99_sequenceIdArr[0] = 0x1BE;
_s99_sequenceIdArr[1] = 0x1BF;
_s99_sequenceIdArr[2] = 0x1BA;
@@ -36,7 +39,7 @@ void GnapEngine::scene54_initCutscene1() {
_s99_resourceIdArr[0] = 0x3C;
_s99_resourceIdArr[1] = 0x43;
_s99_resourceIdArr[2] = 0x44;
- if (isFlag(kGFPictureTaken))
+ if (_vm->isFlag(kGFPictureTaken))
_s99_resourceIdArr[3] = 0x47;
else
_s99_resourceIdArr[3] = 0x46;
@@ -52,9 +55,13 @@ void GnapEngine::scene54_initCutscene1() {
_s99_canSkip[3] = false;
_s99_canSkip[4] = false;
_s99_itemsCount = 5;
+
+ return -1;
}
-void GnapEngine::scene54_initCutscene2() {
+Scene542::Scene542(GnapEngine *vm) : CutScene(vm) {}
+
+int Scene542::init() {
_s99_sequenceIdArr[0] = 0x1C9;
_s99_sequenceIdArr[1] = 0x1C7;
_s99_sequenceIdArr[2] = 0x1CC;
@@ -122,6 +129,8 @@ void GnapEngine::scene54_initCutscene2() {
_s99_canSkip[14] = true;
_s99_canSkip[15] = false;
_s99_itemsCount = 16;
+
+ return -1;
}
} // End of namespace Gnap
diff --git a/engines/gnap/scenes/scene54.h b/engines/gnap/scenes/scene54.h
new file mode 100644
index 0000000000..a27d157da4
--- /dev/null
+++ b/engines/gnap/scenes/scene54.h
@@ -0,0 +1,49 @@
+/* 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 GNAP_SCENE54_H
+#define GNAP_SCENE54_H
+
+#include "gnap/debugger.h"
+#include "gnap/scenes/scenecore.h"
+
+namespace Gnap {
+
+class GnapEngine;
+
+class Scene541: public CutScene {
+public:
+ Scene541(GnapEngine *vm);
+ ~Scene541() {}
+
+ virtual int init();
+};
+
+class Scene542: public CutScene {
+public:
+ Scene542(GnapEngine *vm);
+ ~Scene542() {}
+
+ virtual int init();
+};
+} // End of namespace Gnap
+#endif // GNAP_SCENE54_H
diff --git a/engines/gnap/scenes/scenecore.cpp b/engines/gnap/scenes/scenecore.cpp
index 6d54e4babb..2f93098ebc 100644
--- a/engines/gnap/scenes/scenecore.cpp
+++ b/engines/gnap/scenes/scenecore.cpp
@@ -41,6 +41,10 @@
#include "gnap/scenes/scene13.h"
#include "gnap/scenes/scene14.h"
#include "gnap/scenes/scene15.h"
+#include "gnap/scenes/scene16.h"
+#include "gnap/scenes/scene47.h"
+#include "gnap/scenes/scene48.h"
+#include "gnap/scenes/scene54.h"
namespace Gnap {
@@ -160,7 +164,7 @@ int GnapEngine::initSceneLogic() {
case 47:
case 48:
case 54:
- backgroundId = cutscene_init();
+ backgroundId = -1;
_gameSys->setScaleValues(0, 500, 1, 1000);
break;
case 17:
@@ -478,10 +482,12 @@ void GnapEngine::runSceneLogic() {
_newSceneNum = 12;
break;
case 16:
- scene16_initCutscene();
+ _scene = new Scene16(this);
+ _scene->init();
_newSceneNum = 17;
_newCursorValue = 3;
- cutscene_run();
+ _scene->run();
+ delete _scene;
break;
case 17:
scene17_run();
@@ -639,39 +645,49 @@ void GnapEngine::runSceneLogic() {
break;
case 47:
if (_prevSceneNum == 49) {
- scene47_initCutscene1();
+ _scene = new Scene471(this);
+ _scene->init();
_newSceneNum = 7;
_newCursorValue = 2;
} else if (_prevSceneNum == 13) {
- scene47_initCutscene2();
+ _scene = new Scene472(this);
+ _scene->init();
_newSceneNum = 11;
} else if (!isFlag(kGFPlatyPussDisguised) && _prevSceneNum == 2) {//CHECKME
if (isFlag(kGFUnk25)) {
- scene47_initCutscene3();
+ _scene = new Scene473(this);
+ _scene->init();
_newSceneNum = 2;
} else {
- scene47_initCutscene4();
+ _scene = new Scene474(this);
+ _scene->init();
_newSceneNum = 49;
}
} else if (_prevSceneNum == 21) {
- scene47_initCutscene5();
+ _scene = new Scene475(this);
+ _scene->init();
_newSceneNum = 21;
setFlag(kGFTwigTaken);
setFlag(kGFKeysTaken);
} else if (_prevSceneNum == 30) {
- scene47_initCutscene6();
+ _scene = new Scene476(this);
+ _scene->init();
_newSceneNum = 26;
} else if (isFlag(kGFPlatyPussDisguised) && _cursorValue == 1) {
- scene47_initCutscene7();
+ _scene = new Scene477(this);
+ _scene->init();
_newSceneNum = 4;
}
- cutscene_run();
+ _scene->run();
+ delete _scene;
break;
case 48:
- scene48_initCutscene();
+ _scene = new Scene48(this);
+ _scene->init();
_newSceneNum = 33;
_newCursorValue = 4;
- cutscene_run();
+ _scene->run();
+ delete _scene;
break;
case 49:
scene49_run();
@@ -696,16 +712,91 @@ void GnapEngine::runSceneLogic() {
break;
case 54:
if (_prevSceneNum == 45) {
- scene54_initCutscene1();
+ _scene = new Scene541(this);
+ _scene->init();
_newSceneNum = 43;
- cutscene_run();
+ _scene->run();
+ delete _scene;
} else {
- scene54_initCutscene2();
- cutscene_run();
+ _scene = new Scene542(this);
+ _scene->init();
+ _scene->run();
+ delete _scene;
_gameDone = true;
}
break;
}
}
+void CutScene::run() {
+ int itemIndex = 0;
+ int soundId = -1;
+ int volume = 100;
+ int duration = 0;
+ bool skip = false;
+
+ if (_vm->_prevSceneNum == 2) {
+ soundId = 0x36B;
+ duration = MAX(1, 300 / _vm->getSequenceTotalDuration(_s99_sequenceIdArr[_s99_itemsCount - 1]));//CHECKME
+ _vm->_timers[0] = 0;
+ }
+
+ if (soundId != -1)
+ _vm->playSound(soundId, false);
+
+ _vm->hideCursor();
+
+ _vm->_gameSys->drawSpriteToBackground(0, 0, _s99_resourceIdArr[0]);
+
+ for (int j = 0; j < _s99_sequenceCountArr[0]; ++j)
+ _vm->_gameSys->insertSequence(_s99_sequenceIdArr[j], j + 2, 0, 0, kSeqNone, 0, 0, 0);
+ _vm->_gameSys->setAnimation(_s99_sequenceIdArr[0], 2, 0);
+
+ _vm->clearKeyStatus1(Common::KEYCODE_ESCAPE);
+ _vm->clearKeyStatus1(Common::KEYCODE_SPACE);
+ _vm->clearKeyStatus1(29);
+
+ _vm->_mouseClickState._left = false;
+
+ int firstSequenceIndex = 0;
+ while (!_vm->_sceneDone) {
+ _vm->gameUpdateTick();
+
+ if (_vm->_gameSys->getAnimationStatus(0) == 2 || skip) {
+ skip = false;
+ _vm->_gameSys->requestClear2(false);
+ _vm->_gameSys->requestClear1();
+ _vm->_gameSys->setAnimation(0, 0, 0);
+ firstSequenceIndex += _s99_sequenceCountArr[itemIndex++];
+ if (itemIndex >= _s99_itemsCount) {
+ _vm->_sceneDone = true;
+ } else {
+ for (int m = 0; m < _s99_sequenceCountArr[itemIndex]; ++m)
+ _vm->_gameSys->insertSequence(_s99_sequenceIdArr[firstSequenceIndex + m], m + 2, 0, 0, kSeqNone, 0, 0, 0);
+ _vm->_gameSys->drawSpriteToBackground(0, 0, _s99_resourceIdArr[itemIndex]);
+ _vm->_gameSys->setAnimation(_s99_sequenceIdArr[firstSequenceIndex], 2, 0);
+ }
+ }
+
+ if (_vm->isKeyStatus1(Common::KEYCODE_ESCAPE) || _vm->isKeyStatus1(Common::KEYCODE_SPACE) || _vm->isKeyStatus1(29)) {
+ _vm->clearKeyStatus1(Common::KEYCODE_ESCAPE);
+ _vm->clearKeyStatus1(Common::KEYCODE_SPACE);
+ _vm->clearKeyStatus1(29);
+ if (_s99_canSkip[itemIndex])
+ skip = true;
+ else
+ _vm->_sceneDone = true;
+ }
+
+ if (!_vm->_timers[0] && itemIndex == _s99_itemsCount - 1) {
+ _vm->_timers[0] = 2;
+ volume = MAX(1, volume - duration);
+ _vm->setSoundVolume(soundId, volume);
+ }
+ }
+
+ if (soundId != -1)
+ _vm->stopSound(soundId);
+}
+
} // End of namespace Gnap
diff --git a/engines/gnap/scenes/scenecore.h b/engines/gnap/scenes/scenecore.h
index 63f11b9c8b..1f49fd8641 100644
--- a/engines/gnap/scenes/scenecore.h
+++ b/engines/gnap/scenes/scenecore.h
@@ -44,6 +44,26 @@ protected:
GnapEngine *_vm;
};
+class CutScene : public Scene {
+public:
+ CutScene(GnapEngine *vm) : Scene(vm) {};
+ ~CutScene() {};
+
+ virtual int init() = 0;
+ void updateHotspots() {}
+ void run();
+ void updateAnimations() {}
+ void updateAnimationsCb() {}
+
+protected:
+ GnapEngine *_vm;
+
+ int _s99_itemsCount;
+ int _s99_resourceIdArr[16];
+ int _s99_sequenceCountArr[16];
+ int _s99_sequenceIdArr[50];
+ bool _s99_canSkip[16];
+};
} // End of namespace Gnap
#endif // GNAP_SCENECORE_H