aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/fs/amigaos4/amigaos4-fs.cpp13
-rw-r--r--backends/fs/amigaos4/amigaos4-fs.h6
-rw-r--r--engines/avalanche/avalanche.cpp66
-rw-r--r--engines/avalanche/avalanche.h38
-rw-r--r--engines/avalanche/avalot.cpp14
-rw-r--r--engines/avalanche/avalot.h14
-rw-r--r--engines/avalanche/dialogs.cpp8
-rw-r--r--engines/avalanche/dialogs.h3
-rw-r--r--engines/avalanche/graphics.h1
-rw-r--r--engines/fullpipe/constants.h15
-rw-r--r--engines/fullpipe/modal.h12
-rw-r--r--engines/fullpipe/module.mk1
-rw-r--r--engines/fullpipe/scenes.cpp34
-rw-r--r--engines/fullpipe/scenes.h33
-rw-r--r--engines/fullpipe/scenes/scene38.cpp114
-rw-r--r--engines/fullpipe/scenes/sceneFinal.cpp174
-rw-r--r--engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp4
-rw-r--r--engines/wintermute/video/video_theora_player.cpp4
18 files changed, 322 insertions, 232 deletions
diff --git a/backends/fs/amigaos4/amigaos4-fs.cpp b/backends/fs/amigaos4/amigaos4-fs.cpp
index 6d713f10be..bd8bf1978a 100644
--- a/backends/fs/amigaos4/amigaos4-fs.cpp
+++ b/backends/fs/amigaos4/amigaos4-fs.cpp
@@ -81,6 +81,7 @@ AmigaOSFilesystemNode::AmigaOSFilesystemNode(const Common::String &p) {
_sDisplayName = ::lastPathComponent(_sPath);
_pFileLock = 0;
_bIsDirectory = false;
+ _bIsValid = false;
// Check whether the node exists and if it is a directory
struct ExamineData * pExd = IDOS->ExamineObjectTags(EX_StringNameInput,_sPath.c_str(),TAG_END);
@@ -305,12 +306,6 @@ bool AmigaOSFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, b
AbstractFSNode *AmigaOSFilesystemNode::getParent() const {
ENTER();
- if (!_bIsDirectory) {
- debug(6, "Not a directory");
- LEAVE();
- return 0;
- }
-
if (_pFileLock == 0) {
debug(6, "Root node");
LEAVE();
@@ -332,6 +327,9 @@ AbstractFSNode *AmigaOSFilesystemNode::getParent() const {
}
bool AmigaOSFilesystemNode::isReadable() const {
+ if (!_bIsValid)
+ return false;
+
// Regular RWED protection flags are low-active or inverted, thus the negation.
// moreover pseudo root filesystem (null _pFileLock) is readable whatever the
// protection says
@@ -341,6 +339,9 @@ bool AmigaOSFilesystemNode::isReadable() const {
}
bool AmigaOSFilesystemNode::isWritable() const {
+ if (!_bIsValid)
+ return false;
+
// Regular RWED protection flags are low-active or inverted, thus the negation.
// moreover pseudo root filesystem (null _pFileLock) is never writable whatever
// the protection says (because of the pseudo nature)
diff --git a/backends/fs/amigaos4/amigaos4-fs.h b/backends/fs/amigaos4/amigaos4-fs.h
index c5ca61476f..7ce9981479 100644
--- a/backends/fs/amigaos4/amigaos4-fs.h
+++ b/backends/fs/amigaos4/amigaos4-fs.h
@@ -43,7 +43,13 @@
*/
class AmigaOSFilesystemNode : public AbstractFSNode {
protected:
+ /**
+ * The main file lock.
+ * If this is NULL but _bIsValid is true, then this Node references
+ * the virtual filesystem root.
+ */
BPTR _pFileLock;
+
Common::String _sDisplayName;
Common::String _sPath;
bool _bIsDirectory;
diff --git a/engines/avalanche/avalanche.cpp b/engines/avalanche/avalanche.cpp
index dbe434cde3..a7e7be0ad3 100644
--- a/engines/avalanche/avalanche.cpp
+++ b/engines/avalanche/avalanche.cpp
@@ -532,75 +532,9 @@ Common::Error AvalancheEngine::run() {
do {
runAvalot();
-
-#if 0
- switch (_storage._operation) {
- case kRunShootemup:
- run("seu.avx", kJsb, kBflight, kNormal);
- break;
- case kRunDosshell:
- dosShell();
- break;
- case kRunGhostroom:
- run("g-room.avx", kJsb, kNoBflight, kNormal);
- break;
- case kRunGolden:
- run("golden.avx", kJsb, kBflight, kMusical);
- break;
- }
-#endif
-
} while (!_letMeOut && !shouldQuit());
return Common::kNoError;
}
-#if 0
-void AvalancheEngine::run(Common::String what, bool withJsb, bool withBflight, Elm how) {
- // Probably there'll be no need of this function, as all *.AVX-es will become classes.
- warning("STUB: run(%s)", what.c_str());
-}
-
-Common::String AvalancheEngine::elmToStr(Elm how) {
- switch (how) {
- case kNormal:
- case kMusical:
- return Common::String("jsb");
- case kRegi:
- return Common::String("REGI");
- case kElmpoyten:
- return Common::String("ELMPOYTEN");
- // Useless, but silent a warning
- default:
- return Common::String("");
- }
-}
-
-// Same as keypressed1().
-void AvalancheEngine::flushBuffer() {
- warning("STUB: flushBuffer()");
-}
-
-void AvalancheEngine::dosShell() {
- warning("STUB: dosShell()");
-}
-
-// Needed in dos_shell(). TODO: Remove later.
-Common::String AvalancheEngine::commandCom() {
- warning("STUB: commandCom()");
- return ("STUB: commandCom()");
-}
-
-// Needed for run_avalot()'s errors. TODO: Remove later.
-void AvalancheEngine::explain(byte error) {
- warning("STUB: explain()");
-}
-
-// Needed later.
-void AvalancheEngine::quit() {
- cursorOn();
-}
-
-#endif
-
} // End of namespace Avalanche
diff --git a/engines/avalanche/avalanche.h b/engines/avalanche/avalanche.h
index ef2338e629..fe13fa8d9e 100644
--- a/engines/avalanche/avalanche.h
+++ b/engines/avalanche/avalanche.h
@@ -128,43 +128,6 @@ private:
AvalancheConsole *_console;
Common::Platform _platform;
-#if 0
- struct {
- byte _operation;
- uint16 _skellern;
- byte _contents[1000];
- } _storage;
-
- static const int16 kRunShootemup = 1, kRunDosshell = 2, kRunGhostroom = 3, kRunGolden = 4;
- static const int16 kReset = 0;
-
- static const bool kJsb = true, kNoJsb = false, kBflight = true, kNoBflight = false;
-
- // From bootstrp:
- enum Elm {kNormal, kMusical, kElmpoyten, kRegi};
-
- Common::String _argsWithNoFilename;
- byte _originalMode;
- byte *_old1c;
- Common::String _segofs;
- int32 _soundcard, _speed, _baseaddr, _irq, _dma;
- bool _zoomy;
-
- void run(Common::String what, bool withJsb, bool withBflight, Elm how);
- void bFlightOn();
- void bFlightOff();
- Common::String elmToStr(Elm how);
- bool keyPressed();
- void flushBuffer();
- void dosShell();
- void bFlight();
- Common::String commandCom();
- void explain(byte error);
- void cursorOff();
- void cursorOn();
- void quit();
-#endif
-
public:
// For Thinkabout:
static const bool kThing = true;
@@ -173,7 +136,6 @@ public:
static const char kSpludwicksOrder[3];
static const uint16 kNotes[12];
- static const TuneType kTune;
bool _holdLeftMouse;
diff --git a/engines/avalanche/avalot.cpp b/engines/avalanche/avalot.cpp
index 04fd2a8d98..6648e8d961 100644
--- a/engines/avalanche/avalot.cpp
+++ b/engines/avalanche/avalot.cpp
@@ -76,11 +76,6 @@ namespace Avalanche {
const char AvalancheEngine::kSpludwicksOrder[3] = {kObjectOnion, kObjectInk, kObjectMushroom};
const uint16 AvalancheEngine::kNotes[12] = {196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587};
-const TuneType AvalancheEngine::kTune = {
- kPitchHigher, kPitchHigher, kPitchLower, kPitchSame, kPitchHigher, kPitchHigher, kPitchLower, kPitchHigher, kPitchHigher, kPitchHigher,
- kPitchLower, kPitchHigher, kPitchHigher, kPitchSame, kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchHigher,
- kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchSame, kPitchLower, kPitchHigher, kPitchSame, kPitchLower, kPitchHigher
-};
Room AvalancheEngine::_whereIs[29] = {
// The Lads
@@ -257,13 +252,6 @@ void AvalancheEngine::init() {
_also[i][j] = nullptr;
}
-#if 0
- if (_vm->_enhanced->atbios)
- atkey = "f1";
- else
- atkey = "alt-";
-#endif
-
_letMeOut = false;
_currentMouse = 177;
_dropsOk = true;
@@ -1287,7 +1275,7 @@ void AvalancheEngine::minorRedraw() {
}
void AvalancheEngine::majorRedraw() {
- warning("STUB: major_redraw()");
+ _graphics->refreshScreen();
}
uint16 AvalancheEngine::bearing(byte whichPed) {
diff --git a/engines/avalanche/avalot.h b/engines/avalanche/avalot.h
index e5b8f3d490..9afb4a7b63 100644
--- a/engines/avalanche/avalot.h
+++ b/engines/avalanche/avalot.h
@@ -38,9 +38,6 @@ class AvalancheEngine;
static const byte kObjectNum = 18; // always preface with a #
static const int16 kCarryLimit = 12; // carry limit
-static const int16 kNumlockCode = 32; // Code for Num Lock
-static const int16 kMouseSize = 134;
-
struct PedType {
int16 _x, _y;
Direction _direction;
@@ -59,8 +56,6 @@ struct LineType : public FieldType {
Color _color;
};
-typedef int8 TuneType[31];
-
struct QuasipedType {
byte _whichPed;
Color _textColor;
@@ -69,15 +64,6 @@ struct QuasipedType {
People _who;
};
-#if 0
-struct Sundry { // Things which must be saved over a backtobootstrap, outside DNA.
- Common::String _qEnidFilename;
- bool _qSoundFx;
- byte _qThinks;
- bool _qThinkThing;
-};
-#endif
-
} // End of namespace Avalanche
#endif // AVALANCHE_AVALOT_H
diff --git a/engines/avalanche/dialogs.cpp b/engines/avalanche/dialogs.cpp
index c68ad4b002..2174df3580 100644
--- a/engines/avalanche/dialogs.cpp
+++ b/engines/avalanche/dialogs.cpp
@@ -34,6 +34,12 @@
namespace Avalanche {
+const Dialogs::TuneType Dialogs::kTune = {
+ kPitchHigher, kPitchHigher, kPitchLower, kPitchSame, kPitchHigher, kPitchHigher, kPitchLower, kPitchHigher, kPitchHigher, kPitchHigher,
+ kPitchLower, kPitchHigher, kPitchHigher, kPitchSame, kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchHigher,
+ kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchSame, kPitchLower, kPitchHigher, kPitchSame, kPitchLower, kPitchHigher
+};
+
// A quasiped defines how people who aren't sprites talk. For example, quasiped
// "A" is Dogfood. The rooms aren't stored because I'm leaving that to context.
const QuasipedType Dialogs::kQuasipeds[16] = {
@@ -270,7 +276,7 @@ bool Dialogs::theyMatch(TuneType &played) {
byte mistakes = 0;
for (unsigned int i = 0; i < sizeof(played); i++) {
- if (played[i] != _vm->kTune[i])
+ if (played[i] != kTune[i])
mistakes++;
}
diff --git a/engines/avalanche/dialogs.h b/engines/avalanche/dialogs.h
index 43e6a4fec6..defd152db5 100644
--- a/engines/avalanche/dialogs.h
+++ b/engines/avalanche/dialogs.h
@@ -70,6 +70,9 @@ private:
kFontStyleItalic
};
+ typedef int8 TuneType[31];
+
+ static const TuneType kTune;
static const int16 kHalfIconWidth = 19;
static const QuasipedType kQuasipeds[16];
diff --git a/engines/avalanche/graphics.h b/engines/avalanche/graphics.h
index ea3b621d69..636ae6fdf9 100644
--- a/engines/avalanche/graphics.h
+++ b/engines/avalanche/graphics.h
@@ -123,6 +123,7 @@ public:
void removeBackup();
private:
+ static const int16 kMouseSize = 134;
static const uint16 kBackgroundWidth = kScreenWidth;
static const byte kEgaPaletteIndex[16];
static const byte kBackgroundHeight = 8 * 12080 / kScreenWidth; // With 640 width it's 151.
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 9e79b1c732..e25a6f464a 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -1350,6 +1350,21 @@ namespace Fullpipe {
#define QU_SC38_ENTERLIFT 2836
#define QU_SC38_EXITLIFT 2837
+// Final scene
+#define ANI_FIN_COIN 5014
+#define MSG_FIN_ENDFINAL 5109
+#define MSG_FIN_GOTO2 5024
+#define MSG_FIN_GOTO3 5071
+#define MSG_FIN_GOTO4 5075
+#define MSG_FIN_STARTFINAL 5025
+#define MSG_FN4_STARTMUSIC 5356
+#define QU_FIN1_FALLCOIN 5018
+#define QU_FIN1_TAKECOIN 5023
+#define QU_FN2_DOFINAL 5066
+#define QU_FN3_DOFINAL 5072
+#define QU_FN4_DOFINAL 5108
+#define ST_FCN_NORM 5017
+
// Debug scene
#define MSG_RESTARTGAME 4767
#define PIC_SCD_1 727
diff --git a/engines/fullpipe/modal.h b/engines/fullpipe/modal.h
index af52e1b6a9..65210aaab3 100644
--- a/engines/fullpipe/modal.h
+++ b/engines/fullpipe/modal.h
@@ -106,6 +106,18 @@ class ModalMap : public BaseModalObject {
PictureObject *getScenePicture();
};
+class ModalFinal : public BaseModalObject {
+ public:
+ ModalFinal() {}
+ virtual ~ModalFinal() {}
+
+ virtual bool pollEvent() { return true; }
+ virtual bool handleMessage(ExCommand *message) { return false; }
+ virtual bool init(int counterdiff) { return true; }
+ virtual void update() {}
+ virtual void saveload() {}
+};
+
} // End of namespace Fullpipe
#endif /* FULLPIPE_MODAL_H */
diff --git a/engines/fullpipe/module.mk b/engines/fullpipe/module.mk
index d9cecf058a..f6a94de421 100644
--- a/engines/fullpipe/module.mk
+++ b/engines/fullpipe/module.mk
@@ -59,6 +59,7 @@ MODULE_OBJS = \
scenes/scene36.o \
scenes/scene37.o \
scenes/scene38.o \
+ scenes/sceneFinal.o \
scenes/sceneDbg.o
# This module can be built as a plugin
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 1e4a5633ea..71c8b1efb5 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -365,10 +365,6 @@ Vars::Vars() {
scene37_soundFlipper = 0;
scene37_dudeX = 0;
- scene38_var01 = 0;
- scene38_var02 = 0;
- scene38_var03 = 0;
- scene38_var04 = 0;
scene38_boss = 0;
scene38_tally = 0;
scene38_shorty = 0;
@@ -376,15 +372,19 @@ Vars::Vars() {
scene38_dominos = 0;
scene38_domino1 = 0;
scene38_bottle = 0;
- scene38_var05 = 0;
- scene38_var06 = 0;
- scene38_var07 = 0;
- scene38_var08 = 0;
- scene38_var09 = 0;
- scene38_var10 = 0;
- scene38_var11 = 0;
- scene38_var12 = 0;
- scene38_var13 = 0;
+ scene38_bossCounter = 0;
+ scene38_lastBossAnim = 0;
+ scene38_bossAnimCounter = 0;
+ scene38_tallyCounter = 0;
+ scene38_lastTallyAnim = 0;
+ scene38_tallyAnimCounter = 0;
+ scene38_shortyCounter = 0;
+ scene38_lastShortyAnim = 0;
+ scene38_shortyAnimCounter = 0;
+
+ sceneFinal_var01 = 0;
+ sceneFinal_var02 = 0;
+ sceneFinal_var03 = 0;
selector = 0;
}
@@ -975,7 +975,6 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
_updateCursorCallback = scene37_updateCursor;
break;
-#if 0
case SC_38:
sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_38");
scene->preloadMovements(sceneVar);
@@ -990,14 +989,13 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
case SC_FINAL1:
sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_FINAL1");
scene->preloadMovements(sceneVar);
- sceneFinal1_initScene();
+ sceneFinal_initScene();
_behaviorManager->initBehavior(scene, sceneVar);
scene->initObjectCursors("SC_FINAL1");
setSceneMusicParameters(sceneVar);
- addMessageHandler(sceneHandlerFinal1, 2);
- _updateCursorCallback = sceneFinal1_updateCursor;
+ addMessageHandler(sceneHandlerFinal, 2);
+ _updateCursorCallback = sceneFinal_updateCursor;
break;
-#endif
case SC_DBGMENU:
sceneVar = _gameLoader->_gameVar->getSubVarByName("SC_DBGMENU");
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index b35d0eb87f..5f77f74706 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -173,6 +173,13 @@ void scene37_initScene(Scene *sc);
int sceneHandler37(ExCommand *ex);
int scene37_updateCursor();
+void scene38_initScene(Scene *sc);
+int sceneHandler38(ExCommand *ex);
+
+int sceneFinal_updateCursor();
+void sceneFinal_initScene();
+int sceneHandlerFinal(ExCommand *cmd);
+
void sceneDbgMenu_initScene(Scene *sc);
int sceneHandlerDbgMenu(ExCommand *cmd);
@@ -516,10 +523,6 @@ public:
int scene37_soundFlipper;
int scene37_dudeX;
- int scene38_var01;
- int scene38_var02;
- int scene38_var03;
- int scene38_var04;
StaticANIObject *scene38_boss;
StaticANIObject *scene38_tally;
StaticANIObject *scene38_shorty;
@@ -527,15 +530,19 @@ public:
StaticANIObject *scene38_dominos;
StaticANIObject *scene38_domino1;
StaticANIObject *scene38_bottle;
- int scene38_var05;
- int scene38_var06;
- int scene38_var07;
- int scene38_var08;
- int scene38_var09;
- int scene38_var10;
- int scene38_var11;
- int scene38_var12;
- int scene38_var13;
+ int scene38_bossCounter;
+ int scene38_lastBossAnim;
+ int scene38_bossAnimCounter;
+ int scene38_tallyCounter;
+ int scene38_lastTallyAnim;
+ int scene38_tallyAnimCounter;
+ int scene38_shortyCounter;
+ int scene38_lastShortyAnim;
+ int scene38_shortyAnimCounter;
+
+ int sceneFinal_var01;
+ int sceneFinal_var02;
+ int sceneFinal_var03;
PictureObject *selector;
};
diff --git a/engines/fullpipe/scenes/scene38.cpp b/engines/fullpipe/scenes/scene38.cpp
index e6f9f6fa8c..198a88f25d 100644
--- a/engines/fullpipe/scenes/scene38.cpp
+++ b/engines/fullpipe/scenes/scene38.cpp
@@ -52,10 +52,6 @@ void scene38_setBottleState(Scene *sc) {
}
void scene38_initScene(Scene *sc) {
- g_vars->scene38_var01 = 200;
- g_vars->scene38_var02 = 200;
- g_vars->scene38_var03 = 300;
- g_vars->scene38_var04 = 300;
g_vars->scene38_boss = sc->getStaticANIObject1ById(ANI_GLAVAR, -1);
g_vars->scene38_tally = sc->getStaticANIObject1ById(ANI_DYLDA, -1);
g_vars->scene38_shorty = sc->getStaticANIObject1ById(ANI_MALYSH, -1);
@@ -63,15 +59,15 @@ void scene38_initScene(Scene *sc) {
g_vars->scene38_dominos = sc->getStaticANIObject1ById(ANI_DOMINOS, 0);
g_vars->scene38_domino1 = sc->getStaticANIObject1ById(ANI_DOMINO38, 1);
g_vars->scene38_bottle = sc->getStaticANIObject1ById(ANI_BOTTLE38, 0);
- g_vars->scene38_var05 = 0;
- g_vars->scene38_var06 = 0;
- g_vars->scene38_var07 = 0;
- g_vars->scene38_var08 = 15;
- g_vars->scene38_var09 = 0;
- g_vars->scene38_var10 = 0;
- g_vars->scene38_var11 = 30;
- g_vars->scene38_var12 = 0;
- g_vars->scene38_var13 = 0;
+ g_vars->scene38_bossCounter = 0;
+ g_vars->scene38_lastBossAnim = 0;
+ g_vars->scene38_bossAnimCounter = 0;
+ g_vars->scene38_tallyCounter = 15;
+ g_vars->scene38_lastTallyAnim = 0;
+ g_vars->scene38_tallyAnimCounter = 0;
+ g_vars->scene38_shortyCounter = 30;
+ g_vars->scene38_lastShortyAnim = 0;
+ g_vars->scene38_shortyAnimCounter = 0;
scene38_setBottleState(sc);
@@ -94,7 +90,7 @@ void sceneHandler38_tryTakeBottle() {
g_vars->scene38_boss->changeStatics2(ST_GLV_NOHAMMER);
g_vars->scene38_boss->startAnim(MV_GLV_LOOKMAN, 0, -1);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
}
void sceneHandler38_postHammerKick() {
@@ -104,10 +100,10 @@ void sceneHandler38_postHammerKick() {
void sceneHandler38_propose() {
if (!g_vars->scene38_tally->_movement) {
if (g_vars->scene38_tally->_flags & 4) {
- if (!(g_vars->scene38_tally->_flags & 2) && g_vars->scene38_var08 > 0
+ if (!(g_vars->scene38_tally->_flags & 2) && g_vars->scene38_tallyCounter > 0
&& g_fp->_rnd->getRandomNumber(32767) < 32767) {
chainQueue(QU_DLD_DENY, 0);
- g_vars->scene38_var08 = 0;
+ g_vars->scene38_tallyCounter = 0;
}
}
}
@@ -115,16 +111,16 @@ void sceneHandler38_propose() {
void sceneHandler38_point() {
if ((!g_vars->scene38_boss->_movement && ((g_vars->scene38_boss->_flags & 4) || !(g_vars->scene38_boss->_flags & 2)))
- && g_vars->scene38_var05 > 0
+ && g_vars->scene38_bossCounter > 0
&& g_fp->_rnd->getRandomNumber(32767) < 32767) {
if (g_vars->scene38_boss->_statics->_staticsId == ST_GLV_HAMMER) {
chainQueue(QU_GLV_TOSMALL, 0);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
} else {
if (g_vars->scene38_boss->_statics->_staticsId == ST_GLV_NOHAMMER)
chainQueue(QU_GLV_TOSMALL_NOHMR, 0);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
}
}
}
@@ -132,11 +128,11 @@ void sceneHandler38_point() {
void sceneHandler38_hammerKick() {
if (!g_vars->scene38_shorty->_movement) {
if (g_vars->scene38_shorty->_flags & 4) {
- if (!(g_vars->scene38_shorty->_flags & 2) && g_vars->scene38_var11 > 1
+ if (!(g_vars->scene38_shorty->_flags & 2) && g_vars->scene38_shortyCounter > 1
&& g_vars->scene38_shorty->_statics->_staticsId == ST_MLS_LEFT2
&& g_fp->_rnd->getRandomNumber(32767) < 3276) {
chainQueue(QU_MLS_TURNR, 0);
- g_vars->scene38_var11 = 0;
+ g_vars->scene38_shortyCounter = 0;
}
}
}
@@ -152,11 +148,11 @@ void sceneHandler38_hammerKick() {
void sceneHandler38_drink() {
if (!g_vars->scene38_shorty->_movement) {
if (g_vars->scene38_shorty->_flags & 4) {
- if (!(g_vars->scene38_shorty->_flags & 2) && g_vars->scene38_var11 > 0
+ if (!(g_vars->scene38_shorty->_flags & 2) && g_vars->scene38_shortyCounter > 0
&& g_vars->scene38_shorty->_statics->_staticsId == ST_MLS_LEFT2
&& g_fp->_rnd->getRandomNumber(32767) < 3276) {
chainQueue(QU_MLS_TURNR, 0);
- g_vars->scene38_var11 = 0;
+ g_vars->scene38_shortyCounter = 0;
}
}
}
@@ -166,30 +162,30 @@ void sceneHandler38_animateAlcoholics() {
MessageQueue *mq;
if (g_vars->scene38_boss->_movement || !(g_vars->scene38_boss->_flags & 4) || (g_vars->scene38_boss->_flags & 2)) {
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
} else {
- g_vars->scene38_var05++;
+ g_vars->scene38_bossCounter++;
}
- if (g_vars->scene38_var05 >= 50) {
+ if (g_vars->scene38_bossCounter >= 50) {
int bossSt = g_vars->scene38_boss->_statics->_staticsId;
if (bossSt == ST_GLV_SLEEP2) {
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
} else if ((g_vars->scene38_domino0->_flags & 4) && g_vars->scene38_domino0->_statics->_staticsId == ST_DMN38_6) {
if (bossSt == ST_GLV_HAMMER) {
chainQueue(QU_GLV_TAKEDOMINO, 1);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
}
if (bossSt == ST_GLV_NOHAMMER) {
chainQueue(QU_GLV_TAKEDOMINO_NOHMR, 1);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
}
} else {
if ((g_vars->scene38_bottle->_flags & 4) && g_vars->scene38_bottle->_statics->_staticsId == ST_BTL38_FULL && bossSt == ST_GLV_NOHAMMER) {
chainQueue(QU_GLV_DRINKBOTTLE, 1);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
} else {
int bossAnim = 0;
@@ -211,14 +207,14 @@ void sceneHandler38_animateAlcoholics() {
bossAnim = QU_GLV_HMRKICK;
}
- if (g_vars->scene38_var06 == bossAnim) {
- g_vars->scene38_var07++;
+ if (g_vars->scene38_lastBossAnim == bossAnim) {
+ g_vars->scene38_bossAnimCounter++;
- if (g_vars->scene38_var07 > 2)
+ if (g_vars->scene38_bossAnimCounter > 2)
bossAnim = 0;
} else {
- g_vars->scene38_var06 = bossAnim;
- g_vars->scene38_var07 = 1;
+ g_vars->scene38_lastBossAnim = bossAnim;
+ g_vars->scene38_bossAnimCounter = 1;
}
if (bossAnim > 0) {
@@ -226,19 +222,19 @@ void sceneHandler38_animateAlcoholics() {
mq->chain(0);
- g_vars->scene38_var05 = 0;
+ g_vars->scene38_bossCounter = 0;
}
}
}
}
if (g_vars->scene38_tally->_movement || !(g_vars->scene38_tally->_flags & 4) || (g_vars->scene38_tally->_flags & 2)) {
- g_vars->scene38_var08 = 0;
+ g_vars->scene38_tallyCounter = 0;
} else {
- g_vars->scene38_var08++;
+ g_vars->scene38_tallyCounter++;
}
- if (g_vars->scene38_var08 >= 50) {
+ if (g_vars->scene38_tallyCounter >= 50) {
int tallyAnim = 0;
if (g_fp->_rnd->getRandomNumber(32767) >= 1310) {
@@ -260,38 +256,38 @@ void sceneHandler38_animateAlcoholics() {
}
}
- if (g_vars->scene38_var09 == tallyAnim) {
- g_vars->scene38_var10++;
+ if (g_vars->scene38_lastTallyAnim == tallyAnim) {
+ g_vars->scene38_tallyAnimCounter++;
- if (g_vars->scene38_var10++ > 2)
+ if (g_vars->scene38_tallyAnimCounter++ > 2)
tallyAnim = 0;
} else {
- g_vars->scene38_var09 = tallyAnim;
- g_vars->scene38_var10 = 1;
+ g_vars->scene38_lastTallyAnim = tallyAnim;
+ g_vars->scene38_tallyAnimCounter = 1;
}
if (tallyAnim > 0) {
mq = new MessageQueue(g_fp->_currentScene->getMessageQueueById(tallyAnim), 0, 0);
mq->chain(0);
- g_vars->scene38_var08 = 0;
+ g_vars->scene38_tallyCounter = 0;
}
}
if (g_vars->scene38_shorty->_movement || !(g_vars->scene38_shorty->_flags & 4) || (g_vars->scene38_shorty->_flags & 2)) {
- g_vars->scene38_var11 = 0;
+ g_vars->scene38_shortyCounter = 0;
return;
}
- g_vars->scene38_var11++;
+ g_vars->scene38_shortyCounter++;
- if (g_vars->scene38_var11 < 50)
+ if (g_vars->scene38_shortyCounter < 50)
return;
int shortyAnim = 0;
if (g_fp->_rnd->getRandomNumber(32767) >= 1310) {
if (g_fp->_rnd->getRandomNumber(32767) >= 1310 || g_vars->scene38_shorty->_statics->_staticsId != ST_MLS_LEFT2) {
- if (g_vars->scene38_boss->_statics->_staticsId != ST_GLV_SLEEP2 && g_vars->scene38_var05 > 30 && g_fp->_rnd->getRandomNumber(32767) < 0x3FFF && g_vars->scene38_shorty->_statics->_staticsId == ST_MLS_LEFT2)
+ if (g_vars->scene38_boss->_statics->_staticsId != ST_GLV_SLEEP2 && g_vars->scene38_bossCounter > 30 && g_fp->_rnd->getRandomNumber(32767) < 0x3FFF && g_vars->scene38_shorty->_statics->_staticsId == ST_MLS_LEFT2)
shortyAnim = QU_MLS_HAND;
} else {
shortyAnim = QU_MLS_BLINK;
@@ -304,13 +300,13 @@ void sceneHandler38_animateAlcoholics() {
}
}
- if (g_vars->scene38_var12 == shortyAnim) {
- g_vars->scene38_var13++;
- if (g_vars->scene38_var13 > 2)
+ if (g_vars->scene38_lastShortyAnim == shortyAnim) {
+ g_vars->scene38_shortyAnimCounter++;
+ if (g_vars->scene38_shortyAnimCounter > 2)
return;
} else {
- g_vars->scene38_var12 = shortyAnim;
- g_vars->scene38_var13 = 1;
+ g_vars->scene38_lastShortyAnim = shortyAnim;
+ g_vars->scene38_shortyAnimCounter = 1;
}
if (shortyAnim > 0) {
@@ -318,7 +314,7 @@ void sceneHandler38_animateAlcoholics() {
mq->chain(0);
- g_vars->scene38_var11 = 0;
+ g_vars->scene38_shortyCounter = 0;
}
}
@@ -391,11 +387,11 @@ int sceneHandler38(ExCommand *cmd) {
if (g_fp->_aniMan2) {
int x = g_fp->_aniMan2->_ox;
- if (x < g_fp->_sceneRect.left + g_vars->scene38_var01)
- g_fp->_currentScene->_x = x - g_vars->scene38_var03 - g_fp->_sceneRect.left;
+ if (x < g_fp->_sceneRect.left + 200)
+ g_fp->_currentScene->_x = x - 300 - g_fp->_sceneRect.left;
- if (x > g_fp->_sceneRect.right - g_vars->scene38_var01)
- g_fp->_currentScene->_x = x + g_vars->scene38_var03 - g_fp->_sceneRect.right;
+ if (x > g_fp->_sceneRect.right - 200)
+ g_fp->_currentScene->_x = x + 300 - g_fp->_sceneRect.right;
}
sceneHandler38_animateAlcoholics();
diff --git a/engines/fullpipe/scenes/sceneFinal.cpp b/engines/fullpipe/scenes/sceneFinal.cpp
new file mode 100644
index 0000000000..e483e8bab7
--- /dev/null
+++ b/engines/fullpipe/scenes/sceneFinal.cpp
@@ -0,0 +1,174 @@
+/* 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 "fullpipe/fullpipe.h"
+
+#include "fullpipe/objectnames.h"
+#include "fullpipe/constants.h"
+
+#include "fullpipe/gameloader.h"
+#include "fullpipe/motion.h"
+#include "fullpipe/scenes.h"
+#include "fullpipe/statics.h"
+
+#include "fullpipe/interaction.h"
+#include "fullpipe/behavior.h"
+
+#include "fullpipe/modal.h"
+
+
+namespace Fullpipe {
+
+void sceneFinal_initScene() {
+ g_fp->_gameLoader->loadScene(SC_FINAL2);
+ g_fp->accessScene(SC_FINAL2)->setPictureObjectsFlag4();
+ g_fp->_gameLoader->loadScene(SC_FINAL3);
+ g_fp->accessScene(SC_FINAL3)->setPictureObjectsFlag4();
+ g_fp->_gameLoader->loadScene(SC_FINAL4);
+ g_fp->accessScene(SC_FINAL4)->setPictureObjectsFlag4();
+
+ getGameLoaderInventory()->setIsLocked(0);
+ getGameLoaderInventory()->slideIn();
+
+ g_fp->_updateFlag = 0;
+ g_fp->_flgCanOpenMap = 0;
+
+ g_vars->sceneFinal_var01 = 0;
+ g_vars->sceneFinal_var02 = 0;
+ g_vars->sceneFinal_var03 = 0;
+}
+
+int sceneFinal_updateCursor() {
+ if (g_vars->sceneFinal_var01)
+ g_fp->_cursorId = 0;
+ else
+ g_fp->updateCursorCommon();
+
+ return g_fp->_cursorId;
+}
+
+void sceneHandlerFinal_endFinal() {
+ g_vars->sceneFinal_var01 = 0;
+}
+
+void sceneHandlerFinal_startMusic(const char *track) {
+ warning("STUB: sceneHandlerFinal_startMusic()");
+}
+
+void sceneHandlerFinal_goto4() {
+ g_fp->_currentScene = g_fp->accessScene(SC_FINAL4);
+
+ g_fp->_gameLoader->loadScene(SC_FINAL4);
+
+ chainQueue(QU_FN4_DOFINAL, 1);
+}
+
+void sceneHandlerFinal_goto3() {
+ g_fp->_currentScene = g_fp->accessScene(SC_FINAL3);
+
+ chainQueue(QU_FN3_DOFINAL, 1);
+}
+
+void sceneHandlerFinal_goto2() {
+ g_fp->_currentScene = g_fp->accessScene(SC_FINAL2);
+
+ chainQueue(QU_FN2_DOFINAL, 1);
+}
+
+void sceneHandlerFinal_startFinal() {
+ g_vars->sceneFinal_var01 = 1;
+
+ getCurrSceneSc2MotionController()->clearEnabled();
+ getGameLoaderInteractionController()->disableFlag24();
+
+ g_fp->_aniMan2 = 0;
+
+ g_fp->_aniMan->_flags &= 0xFFFB;
+
+ chainQueue(QU_FIN1_TAKECOIN, 1);
+
+ g_fp->playTrack(g_fp->getGameLoaderGameVar()->getSubVarByName("SC_FINAL1"), "MUSIC2", 1);
+
+ g_fp->_modalObject = new ModalFinal;
+}
+
+void sceneHandlerFinal_fallCoin() {
+ StaticANIObject *coin = g_fp->_currentScene->getStaticANIObject1ById(ANI_FIN_COIN, -1);
+
+ if (!coin->_movement) {
+ if (!coin->_statics || coin->_statics->_staticsId != ST_FCN_NORM)
+ chainQueue(QU_FIN1_FALLCOIN, 1);
+ }
+}
+
+int sceneHandlerFinal(ExCommand *cmd) {
+ if (cmd->_messageKind != 17)
+ return 0;
+
+ switch (cmd->_messageNum) {
+ case MSG_FIN_ENDFINAL:
+ sceneHandlerFinal_endFinal();
+ break;
+
+ case MSG_FN4_STARTMUSIC:
+ sceneHandlerFinal_startMusic("track16.ogg");
+ break;
+
+ case MSG_FIN_GOTO4:
+ sceneHandlerFinal_goto4();
+
+ g_fp->playTrack(g_fp->getGameLoaderGameVar()->getSubVarByName("SC_FINAL1"), "MUSIC3", 1);
+ break;
+
+ case MSG_FIN_GOTO3:
+ sceneHandlerFinal_goto3();
+ break;
+
+ case MSG_FIN_GOTO2:
+ sceneHandlerFinal_goto2();
+ break;
+
+ case MSG_FIN_STARTFINAL:
+ sceneHandlerFinal_startFinal();
+ break;
+
+ case 33:
+ if (g_fp->_aniMan2) {
+ g_vars->sceneFinal_var03 = g_fp->_aniMan2->_ox;
+
+ if (g_vars->sceneFinal_var03 < 450 && g_vars->sceneFinal_var02 >= 450 )
+ sceneHandlerFinal_fallCoin();
+
+ g_vars->sceneFinal_var02 = g_vars->sceneFinal_var03;
+ }
+
+ g_fp->_behaviorManager->updateBehaviors();
+
+ g_fp->startSceneTrack();
+
+ break;
+ }
+
+ return 0;
+}
+
+} // End of namespace Fullpipe
diff --git a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
index 73797f20f3..c33e8ba54b 100644
--- a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
@@ -448,8 +448,8 @@ bool BaseSurfaceOSystem::drawSprite(int x, int y, Rect32 *rect, Rect32 *newRect,
bool BaseSurfaceOSystem::putSurface(const Graphics::Surface &surface, bool hasAlpha) {
_loaded = true;
if (surface.format == _surface->format && surface.w == _surface->w && surface.h == _surface->h) {
- const byte *src = (const byte*) surface.getBasePtr(0, 0);
- byte *dst = (byte*) _surface->getBasePtr(0, 0);
+ const byte *src = (const byte *)surface.getBasePtr(0, 0);
+ byte *dst = (byte *)_surface->getBasePtr(0, 0);
memcpy(dst, src, surface.pitch * surface.h);
} else {
_surface->free();
diff --git a/engines/wintermute/video/video_theora_player.cpp b/engines/wintermute/video/video_theora_player.cpp
index aedc9bf025..299b64f915 100644
--- a/engines/wintermute/video/video_theora_player.cpp
+++ b/engines/wintermute/video/video_theora_player.cpp
@@ -306,8 +306,8 @@ bool VideoTheoraPlayer::update() {
const Graphics::Surface *decodedFrame = _theoraDecoder->decodeNextFrame();
if (decodedFrame) {
if (decodedFrame->format == _surface.format && decodedFrame->w == _surface.w && decodedFrame->h == _surface.h) {
- const byte *src = (const byte*) decodedFrame->getBasePtr(0, 0);
- byte *dst = (byte*) _surface.getBasePtr(0, 0);
+ const byte *src = (const byte *)decodedFrame->getBasePtr(0, 0);
+ byte *dst = (byte *)_surface.getBasePtr(0, 0);
memcpy(dst, src, _surface.pitch * _surface.h);
} else {
_surface.free();