[Scummvm-git-logs] scummvm master -> 84b2dc5cc85721570aa7aafdd9e3e96f0f04a025

bgK bastien.bouclet at gmail.com
Sat Mar 31 13:35:55 CEST 2018


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
84b2dc5cc8 MOHAWK: Fix some clang-tidy warnings


Commit: 84b2dc5cc85721570aa7aafdd9e3e96f0f04a025
    https://github.com/scummvm/scummvm/commit/84b2dc5cc85721570aa7aafdd9e3e96f0f04a025
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2018-03-31T13:36:09+02:00

Commit Message:
MOHAWK: Fix some clang-tidy warnings

Changed paths:
    engines/mohawk/bitmap.cpp
    engines/mohawk/bitmap.h
    engines/mohawk/console.h
    engines/mohawk/cursors.cpp
    engines/mohawk/cursors.h
    engines/mohawk/detection.cpp
    engines/mohawk/dialogs.cpp
    engines/mohawk/dialogs.h
    engines/mohawk/graphics.cpp
    engines/mohawk/graphics.h
    engines/mohawk/installer_archive.cpp
    engines/mohawk/installer_archive.h
    engines/mohawk/mohawk.cpp
    engines/mohawk/mohawk.h
    engines/mohawk/myst.cpp
    engines/mohawk/myst.h
    engines/mohawk/myst_areas.cpp
    engines/mohawk/myst_areas.h
    engines/mohawk/myst_graphics.h
    engines/mohawk/myst_scripts.cpp
    engines/mohawk/myst_scripts.h
    engines/mohawk/myst_sound.h
    engines/mohawk/myst_stacks/channelwood.cpp
    engines/mohawk/myst_stacks/channelwood.h
    engines/mohawk/myst_stacks/credits.cpp
    engines/mohawk/myst_stacks/credits.h
    engines/mohawk/myst_stacks/demo.cpp
    engines/mohawk/myst_stacks/demo.h
    engines/mohawk/myst_stacks/dni.cpp
    engines/mohawk/myst_stacks/dni.h
    engines/mohawk/myst_stacks/intro.cpp
    engines/mohawk/myst_stacks/intro.h
    engines/mohawk/myst_stacks/makingof.cpp
    engines/mohawk/myst_stacks/makingof.h
    engines/mohawk/myst_stacks/mechanical.cpp
    engines/mohawk/myst_stacks/mechanical.h
    engines/mohawk/myst_stacks/myst.cpp
    engines/mohawk/myst_stacks/myst.h
    engines/mohawk/myst_stacks/preview.cpp
    engines/mohawk/myst_stacks/preview.h
    engines/mohawk/myst_stacks/selenitic.cpp
    engines/mohawk/myst_stacks/selenitic.h
    engines/mohawk/myst_stacks/slides.cpp
    engines/mohawk/myst_stacks/slides.h
    engines/mohawk/myst_stacks/stoneship.cpp
    engines/mohawk/myst_stacks/stoneship.h
    engines/mohawk/resource.cpp
    engines/mohawk/resource.h
    engines/mohawk/resource_cache.cpp
    engines/mohawk/riven.h
    engines/mohawk/riven_graphics.cpp
    engines/mohawk/riven_graphics.h
    engines/mohawk/riven_inventory.h
    engines/mohawk/riven_sound.h
    engines/mohawk/riven_video.h
    engines/mohawk/sound.cpp
    engines/mohawk/sound.h
    engines/mohawk/video.cpp
    engines/mohawk/video.h
    engines/mohawk/view.cpp


diff --git a/engines/mohawk/bitmap.cpp b/engines/mohawk/bitmap.cpp
index d8c6d6a..205feb8 100644
--- a/engines/mohawk/bitmap.cpp
+++ b/engines/mohawk/bitmap.cpp
@@ -70,7 +70,7 @@ MohawkBitmap::~MohawkBitmap() {
 
 void MohawkBitmap::decodeImageData(Common::SeekableReadStream *stream) {
 	_data = stream;
-	_header.colorTable.palette = NULL;
+	_header.colorTable.palette = nullptr;
 
 	// NOTE: Only the bottom 12 bits of width/height/bytesPerRow are
 	// considered valid and bytesPerRow has to be an even number.
@@ -650,7 +650,7 @@ MohawkSurface *MystBitmap::decodeImage(Common::SeekableReadStream *stream) {
 		error("Could not decode Myst bitmap");
 
 	const Graphics::Surface *bmpSurface = bitmapDecoder.getSurface();
-	Graphics::Surface *newSurface = 0;
+	Graphics::Surface *newSurface = nullptr;
 
 	if (bmpSurface->format.bytesPerPixel == 1) {
 		_bitsPerPixel = 8;
@@ -662,7 +662,7 @@ MohawkSurface *MystBitmap::decodeImage(Common::SeekableReadStream *stream) {
 	}
 
 	// Copy the palette to one of our own
-	byte *newPal = 0;
+	byte *newPal = nullptr;
 
 	if (bitmapDecoder.hasPalette()) {
 		const byte *palette = bitmapDecoder.getPalette();
@@ -729,7 +729,7 @@ MohawkSurface *LivingBooksBitmap_v1::decodeImage(Common::SeekableReadStream *str
 			leRLE8 = true;
 
 		_data = stream;
-		stream = NULL;
+		stream = nullptr;
 	}
 
 	Graphics::Surface *surface = createSurface(_header.width, _header.height);
diff --git a/engines/mohawk/bitmap.h b/engines/mohawk/bitmap.h
index ea8664f..18ea72b 100644
--- a/engines/mohawk/bitmap.h
+++ b/engines/mohawk/bitmap.h
@@ -148,16 +148,16 @@ private:
 // Mohawk Bitmap format.
 class MystBitmap : public MohawkBitmap {
 public:
-	MystBitmap() : MohawkBitmap() {}
-	~MystBitmap() {}
+	MystBitmap() : MohawkBitmap(), _bitsPerPixel(8) {}
+	~MystBitmap() override {}
 
-	MohawkSurface *decodeImage(Common::SeekableReadStream *stream);
+	MohawkSurface *decodeImage(Common::SeekableReadStream *stream) override;
 
 protected:
-	byte getBitsPerPixel() { return _bitsPerPixel; }
+	byte getBitsPerPixel() override { return _bitsPerPixel; }
 
 private:
-	uint16 _bitsPerPixel;
+	byte _bitsPerPixel;
 };
 
 #endif
@@ -165,23 +165,23 @@ private:
 class LivingBooksBitmap_v1 : public MohawkBitmap {
 public:
 	LivingBooksBitmap_v1() : MohawkBitmap() {}
-	~LivingBooksBitmap_v1() {}
+	~LivingBooksBitmap_v1() override {}
 
-	MohawkSurface *decodeImage(Common::SeekableReadStream *stream);
+	MohawkSurface *decodeImage(Common::SeekableReadStream *stream) override;
 
 protected:
-	byte getBitsPerPixel() { return 8; }
+	byte getBitsPerPixel() override { return 8; }
 };
 
 class DOSBitmap : public MohawkBitmap {
 public:
 	DOSBitmap() : MohawkBitmap() {}
-	~DOSBitmap() {}
+	~DOSBitmap() override {}
 
-	MohawkSurface *decodeImage(Common::SeekableReadStream *stream);
+	MohawkSurface *decodeImage(Common::SeekableReadStream *stream) override;
 
 protected:
-	byte getBitsPerPixel() { return ((_header.format & 0x30) >> 4) + 1; }
+	byte getBitsPerPixel() override { return ((_header.format & 0x30) >> 4) + 1; }
 
 private:
 	void expandMonochromePlane(Graphics::Surface *surface, Common::SeekableReadStream *rawStream);
diff --git a/engines/mohawk/console.h b/engines/mohawk/console.h
index 0cae87d..7d94bf5 100644
--- a/engines/mohawk/console.h
+++ b/engines/mohawk/console.h
@@ -35,8 +35,8 @@ class MohawkEngine_Myst;
 
 class MystConsole : public GUI::Debugger {
 public:
-	MystConsole(MohawkEngine_Myst *vm);
-	virtual ~MystConsole(void);
+	explicit MystConsole(MohawkEngine_Myst *vm);
+	~MystConsole() override;
 
 private:
 	MohawkEngine_Myst *_vm;
@@ -66,8 +66,8 @@ class MohawkEngine_Riven;
 
 class RivenConsole : public GUI::Debugger {
 public:
-	RivenConsole(MohawkEngine_Riven *vm);
-	virtual ~RivenConsole(void);
+	explicit RivenConsole(MohawkEngine_Riven *vm);
+	~RivenConsole() override;
 
 private:
 	MohawkEngine_Riven *_vm;
@@ -95,8 +95,8 @@ private:
 
 class LivingBooksConsole : public GUI::Debugger {
 public:
-	LivingBooksConsole(MohawkEngine_LivingBooks *vm);
-	virtual ~LivingBooksConsole(void);
+	explicit LivingBooksConsole(MohawkEngine_LivingBooks *vm);
+	~LivingBooksConsole() override;
 
 private:
 	MohawkEngine_LivingBooks *_vm;
diff --git a/engines/mohawk/cursors.cpp b/engines/mohawk/cursors.cpp
index cef24e1..84b1c73 100644
--- a/engines/mohawk/cursors.cpp
+++ b/engines/mohawk/cursors.cpp
@@ -151,7 +151,7 @@ NECursorManager::NECursorManager(const Common::String &appName) {
 	if (!_exe->loadFromEXE(appName)) {
 		// Not all have cursors anyway, so this is not a problem
 		delete _exe;
-		_exe = 0;
+		_exe = nullptr;
 	}
 }
 
@@ -183,10 +183,10 @@ MacCursorManager::MacCursorManager(const Common::String &appName) {
 		if (!_resFork->open(appName)) {
 			// Not all have cursors anyway, so this is not a problem
 			delete _resFork;
-			_resFork = 0;
+			_resFork = nullptr;
 		}
 	} else {
-		_resFork = 0;
+		_resFork = nullptr;
 	}
 }
 
@@ -219,7 +219,7 @@ LivingBooksCursorManager_v2::LivingBooksCursorManager_v2() {
 
 	if (!_sysArchive->openFile("system.mhk")) {
 		delete _sysArchive;
-		_sysArchive = 0;
+		_sysArchive = nullptr;
 	}
 }
 
diff --git a/engines/mohawk/cursors.h b/engines/mohawk/cursors.h
index d0d38c9..ff5db5b 100644
--- a/engines/mohawk/cursors.h
+++ b/engines/mohawk/cursors.h
@@ -72,11 +72,11 @@ protected:
 // Uses standard tCUR resources
 class DefaultCursorManager : public CursorManager {
 public:
-	DefaultCursorManager(MohawkEngine *vm, uint32 tag = ID_TCUR) : _vm(vm), _tag(tag) {}
-	~DefaultCursorManager() {}
+	explicit DefaultCursorManager(MohawkEngine *vm, uint32 tag = ID_TCUR) : _vm(vm), _tag(tag) {}
+	~DefaultCursorManager() override {}
 
-	void setCursor(uint16 id);
-	bool hasSource() const { return true; }
+	void setCursor(uint16 id) override;
+	bool hasSource() const override { return true; }
 
 private:
 	MohawkEngine *_vm;
@@ -110,14 +110,14 @@ class MohawkEngine_Myst;
 // Uses WDIB + CLRC resources
 class MystCursorManager : public CursorManager {
 public:
-	MystCursorManager(MohawkEngine_Myst *vm);
-	~MystCursorManager();
+	explicit MystCursorManager(MohawkEngine_Myst *vm);
+	~MystCursorManager() override;
 
-	void showCursor();
-	void hideCursor();
-	void setCursor(uint16 id);
-	void setDefaultCursor();
-	bool hasSource() const { return true; }
+	void showCursor() override;
+	void hideCursor() override;
+	void setCursor(uint16 id) override;
+	void setDefaultCursor() override;
+	bool hasSource() const override { return true; }
 
 private:
 	MohawkEngine_Myst *_vm;
@@ -128,11 +128,11 @@ private:
 // The cursor manager for NE EXE's
 class NECursorManager : public CursorManager {
 public:
-	NECursorManager(const Common::String &appName);
-	~NECursorManager();
+	explicit NECursorManager(const Common::String &appName);
+	~NECursorManager() override;
 
-	void setCursor(uint16 id);
-	bool hasSource() const { return _exe != 0; }
+	void setCursor(uint16 id) override;
+	bool hasSource() const override { return _exe != nullptr; }
 
 private:
 	Common::NEResources *_exe;
@@ -141,11 +141,11 @@ private:
 // The cursor manager for Mac applications
 class MacCursorManager : public CursorManager {
 public:
-	MacCursorManager(const Common::String &appName);
-	~MacCursorManager();
+	explicit MacCursorManager(const Common::String &appName);
+	~MacCursorManager() override;
 
-	void setCursor(uint16 id);
-	bool hasSource() const { return _resFork != 0; }
+	void setCursor(uint16 id) override;
+	bool hasSource() const override { return _resFork != nullptr; }
 
 private:
 	Common::MacResManager *_resFork;
@@ -156,11 +156,11 @@ private:
 class LivingBooksCursorManager_v2 : public CursorManager {
 public:
 	LivingBooksCursorManager_v2();
-	~LivingBooksCursorManager_v2();
+	~LivingBooksCursorManager_v2() override;
 
-	void setCursor(uint16 id);
-	void setCursor(const Common::String &name);
-	bool hasSource() const { return _sysArchive != 0; }
+	void setCursor(uint16 id) override;
+	void setCursor(const Common::String &name) override;
+	bool hasSource() const override { return _sysArchive != nullptr; }
 
 private:
 	MohawkArchive *_sysArchive;
@@ -169,11 +169,11 @@ private:
 // The cursor manager for PE EXE's
 class PECursorManager : public CursorManager {
 public:
-	PECursorManager(const Common::String &appName);
-	~PECursorManager();
+	explicit PECursorManager(const Common::String &appName);
+	~PECursorManager() override;
 
-	void setCursor(uint16 id);
-	bool hasSource() const { return !_cursors.empty(); }
+	void setCursor(uint16 id) override;
+	bool hasSource() const override { return !_cursors.empty(); }
 
 private:
 	struct CursorItem {
diff --git a/engines/mohawk/detection.cpp b/engines/mohawk/detection.cpp
index 439ea15..82f901d 100644
--- a/engines/mohawk/detection.cpp
+++ b/engines/mohawk/detection.cpp
@@ -147,7 +147,7 @@ static const PlainGameDescriptor mohawkGames[] = {
 	{"stellaluna", "Stellaluna"},
 	{"sheila", "Sheila Rae, the Brave"},
 	{"rugratsps", "Rugrats Print Shop" },
-	{0, 0}
+	{nullptr, nullptr}
 };
 
 #include "mohawk/detection_tables.h"
@@ -159,7 +159,7 @@ static const char *directoryGlobs[] = {
 	"program",
 	"95instal",
 	"Rugrats Adventure Game",
-	0
+	nullptr
 };
 
 static const ADExtraGuiOptionsMap optionsList[] = {
@@ -184,25 +184,25 @@ public:
 		_directoryGlobs = directoryGlobs;
 	}
 
-	virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const {
+	const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const override {
 		return detectGameFilebased(allFiles, fslist, Mohawk::fileBased);
 	}
 
-	virtual const char *getName() const {
+	const char *getName() const override {
 		return "Mohawk";
 	}
 
-	virtual const char *getOriginalCopyright() const {
+	const char *getOriginalCopyright() const override {
 		return "Myst and Riven (C) Cyan Worlds\nMohawk OS (C) Ubisoft";
 	}
 
-	virtual bool hasFeature(MetaEngineFeature f) const;
-	virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
-	virtual SaveStateList listSaves(const char *target) const;
+	bool hasFeature(MetaEngineFeature f) const override;
+	bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
+	SaveStateList listSaves(const char *target) const override;
 	SaveStateList listSavesForPrefix(const char *prefix, const char *extension) const;
-	virtual int getMaximumSaveSlot() const { return 999; }
-	virtual void removeSaveState(const char *target, int slot) const;
-	virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
+	int getMaximumSaveSlot() const override { return 999; }
+	void removeSaveState(const char *target, int slot) const override;
+	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
 };
 
 bool MohawkMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -354,7 +354,7 @@ bool MohawkMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGa
 		}
 	}
 
-	return (gd != 0);
+	return (gd != nullptr);
 }
 
 #if PLUGIN_ENABLED_DYNAMIC(MOHAWK)
diff --git a/engines/mohawk/dialogs.cpp b/engines/mohawk/dialogs.cpp
index 029867f..13a52f8 100644
--- a/engines/mohawk/dialogs.cpp
+++ b/engines/mohawk/dialogs.cpp
@@ -180,22 +180,22 @@ void MohawkOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd,
 
 MystOptionsDialog::MystOptionsDialog(MohawkEngine_Myst* vm) : MohawkOptionsDialog(vm), _vm(vm) {
 	// I18N: Option for fast scene switching
-	_zipModeCheckbox = new GUI::CheckboxWidget(this, 15, 10, 220, 15, _("~Z~ip Mode Activated"), 0, kZipCmd);
-	_transitionsCheckbox = new GUI::CheckboxWidget(this, 15, 30, 220, 15, _("~T~ransitions Enabled"), 0, kTransCmd);
+	_zipModeCheckbox = new GUI::CheckboxWidget(this, 15, 10, 220, 15, _("~Z~ip Mode Activated"), nullptr, kZipCmd);
+	_transitionsCheckbox = new GUI::CheckboxWidget(this, 15, 30, 220, 15, _("~T~ransitions Enabled"), nullptr, kTransCmd);
 	// I18N: Drop book page
-	_dropPageButton = new GUI::ButtonWidget(this, 15, 60, 100, 25, _("~D~rop Page"), 0, kDropCmd);
+	_dropPageButton = new GUI::ButtonWidget(this, 15, 60, 100, 25, _("~D~rop Page"), nullptr, kDropCmd);
 
 	// Myst ME only has maps
 	if (_vm->getFeatures() & GF_ME)
-		_showMapButton = new GUI::ButtonWidget(this, 15, 95, 100, 25, _("Show ~M~ap"), 0, kMapCmd);
+		_showMapButton = new GUI::ButtonWidget(this, 15, 95, 100, 25, _("Show ~M~ap"), nullptr, kMapCmd);
 	else
-		_showMapButton = 0;
+		_showMapButton = nullptr;
 
 	// Myst demo only has a menu
 	if (_vm->getFeatures() & GF_DEMO)
-		_returnToMenuButton = new GUI::ButtonWidget(this, 15, 95, 100, 25, _("Main Men~u~"), 0, kMenuCmd);
+		_returnToMenuButton = new GUI::ButtonWidget(this, 15, 95, 100, 25, _("Main Men~u~"), nullptr, kMenuCmd);
 	else
-		_returnToMenuButton = 0;
+		_returnToMenuButton = nullptr;
 }
 
 MystOptionsDialog::~MystOptionsDialog() {
@@ -266,8 +266,8 @@ void MystOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, ui
 RivenOptionsDialog::RivenOptionsDialog(MohawkEngine_Riven* vm) :
 		MohawkOptionsDialog(vm),
 		_vm(vm) {
-	_zipModeCheckbox = new GUI::CheckboxWidget(this, 15, 10, 220, 15, _("~Z~ip Mode Activated"), 0, kZipCmd);
-	_waterEffectCheckbox = new GUI::CheckboxWidget(this, 15, 30, 220, 15, _("~W~ater Effect Enabled"), 0, kWaterCmd);
+	_zipModeCheckbox = new GUI::CheckboxWidget(this, 15, 10, 220, 15, _("~Z~ip Mode Activated"), nullptr, kZipCmd);
+	_waterEffectCheckbox = new GUI::CheckboxWidget(this, 15, 30, 220, 15, _("~W~ater Effect Enabled"), nullptr, kWaterCmd);
 
 	_transitionModeCaption = new GUI::StaticTextWidget(this, 15, 50, 90, 20, _("Transitions:"), Graphics::kTextAlignRight);
 	_transitionModePopUp = new GUI::PopUpWidget(this, 115, 50, 120, 20);
diff --git a/engines/mohawk/dialogs.h b/engines/mohawk/dialogs.h
index d7e822c..9e892d7 100644
--- a/engines/mohawk/dialogs.h
+++ b/engines/mohawk/dialogs.h
@@ -53,35 +53,35 @@ public:
 
 	void setInfoText(const Common::String &message);
 
-	virtual void handleMouseDown(int x, int y, int button, int clickCount) {
+	void handleMouseDown(int x, int y, int button, int clickCount) override {
 		setResult(0);
 		close();
 	}
 
-	virtual void handleKeyDown(Common::KeyState state) {
+	void handleKeyDown(Common::KeyState state) override {
 		setResult(state.ascii);
 		close();
 	}
 
-	virtual void reflowLayout();
+	void reflowLayout() override;
 };
 
 class PauseDialog : public InfoDialog {
 public:
 	PauseDialog(MohawkEngine* vm, const Common::String &message);
-	virtual void handleKeyDown(Common::KeyState state);
+	void handleKeyDown(Common::KeyState state) override;
 };
 
 #if defined(ENABLE_MYST) || defined(ENABLE_RIVEN)
 
 class MohawkOptionsDialog : public GUI::Dialog {
 public:
-	MohawkOptionsDialog(MohawkEngine *_vm);
-	virtual ~MohawkOptionsDialog();
+	explicit MohawkOptionsDialog(MohawkEngine *_vm);
+	~MohawkOptionsDialog() override;
 
-	virtual void open() override;
-	virtual void reflowLayout() override;
-	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
+	void open() override;
+	void reflowLayout() override;
+	void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
 
 	int getLoadSlot() const { return _loadSlot; }
 	int getSaveSlot() const { return _saveSlot; }
@@ -112,11 +112,11 @@ class MohawkEngine_Myst;
 
 class MystOptionsDialog : public MohawkOptionsDialog {
 public:
-	MystOptionsDialog(MohawkEngine_Myst *vm);
-	virtual ~MystOptionsDialog();
+	explicit MystOptionsDialog(MohawkEngine_Myst *vm);
+	~MystOptionsDialog() override;
 
-	virtual void open() override;
-	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
+	void open() override;
+	void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
 
 private:
 	MohawkEngine_Myst *_vm;
@@ -137,11 +137,11 @@ class MohawkEngine_Riven;
 
 class RivenOptionsDialog : public MohawkOptionsDialog {
 public:
-	RivenOptionsDialog(MohawkEngine_Riven *vm);
-	virtual ~RivenOptionsDialog();
+	explicit RivenOptionsDialog(MohawkEngine_Riven *vm);
+	~RivenOptionsDialog() override;
 
-	virtual void open() override;
-	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
+	void open() override;
+	void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
 
 private:
 	MohawkEngine_Riven *_vm;
diff --git a/engines/mohawk/graphics.cpp b/engines/mohawk/graphics.cpp
index ea9b57a..fe67523 100644
--- a/engines/mohawk/graphics.cpp
+++ b/engines/mohawk/graphics.cpp
@@ -30,7 +30,7 @@
 
 namespace Mohawk {
 
-MohawkSurface::MohawkSurface() : _surface(0), _palette(0) {
+MohawkSurface::MohawkSurface() : _surface(nullptr), _palette(nullptr) {
 	_offsetX = 0;
 	_offsetY = 0;
 }
@@ -64,7 +64,7 @@ void MohawkSurface::convertToTrueColor() {
 	_surface->free();
 	delete _surface;
 	free(_palette);
-	_palette = 0;
+	_palette = nullptr;
 	_surface = surface;
 }
 
diff --git a/engines/mohawk/graphics.h b/engines/mohawk/graphics.h
index f9fdeea..797fc1c 100644
--- a/engines/mohawk/graphics.h
+++ b/engines/mohawk/graphics.h
@@ -41,7 +41,7 @@ class MohawkBitmap;
 class MohawkSurface {
 public:
 	MohawkSurface();
-	MohawkSurface(Graphics::Surface *surface, byte *palette = NULL, int offsetX = 0, int offsetY = 0);
+	explicit MohawkSurface(Graphics::Surface *surface, byte *palette = nullptr, int offsetX = 0, int offsetY = 0);
 	~MohawkSurface();
 
 	// getSurface() returns the surface in the current format
diff --git a/engines/mohawk/installer_archive.cpp b/engines/mohawk/installer_archive.cpp
index 0abc930..62fc953 100644
--- a/engines/mohawk/installer_archive.cpp
+++ b/engines/mohawk/installer_archive.cpp
@@ -28,7 +28,7 @@
 namespace Mohawk {
 
 InstallerArchive::InstallerArchive() : Common::Archive() {
-	_stream = 0;
+	_stream = nullptr;
 }
 
 InstallerArchive::~InstallerArchive() {
@@ -103,7 +103,7 @@ bool InstallerArchive::open(const Common::String &filename) {
 }
 
 void InstallerArchive::close() {
-	delete _stream; _stream = 0;
+	delete _stream; _stream = nullptr;
 	_map.clear();
 }
 
@@ -124,7 +124,7 @@ const Common::ArchiveMemberPtr InstallerArchive::getMember(const Common::String
 
 Common::SeekableReadStream *InstallerArchive::createReadStreamForMember(const Common::String &name) const {
 	if (!_stream || !_map.contains(name))
-		return 0;
+		return nullptr;
 
 	const FileEntry &entry = _map[name];
 
diff --git a/engines/mohawk/installer_archive.h b/engines/mohawk/installer_archive.h
index c3212d7..19f6343 100644
--- a/engines/mohawk/installer_archive.h
+++ b/engines/mohawk/installer_archive.h
@@ -36,17 +36,17 @@ namespace Mohawk {
 class InstallerArchive : public Common::Archive {
 public:
 	InstallerArchive();
-	~InstallerArchive();
+	~InstallerArchive() override;
 
 	bool open(const Common::String &filename);
 	void close();
-	bool isOpen() const { return _stream != 0; }
+	bool isOpen() const { return _stream != nullptr; }
 
 	// Common::Archive API implementation
-	bool hasFile(const Common::String &name) const;
-	int listMembers(Common::ArchiveMemberList &list) const;
-	const Common::ArchiveMemberPtr getMember(const Common::String &name) const;
-	Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const;
+	bool hasFile(const Common::String &name) const override;
+	int listMembers(Common::ArchiveMemberList &list) const override;
+	const Common::ArchiveMemberPtr getMember(const Common::String &name) const override;
+	Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const override;
 
 private:
 	struct FileEntry {
diff --git a/engines/mohawk/mohawk.cpp b/engines/mohawk/mohawk.cpp
index 53481af..52f73db 100644
--- a/engines/mohawk/mohawk.cpp
+++ b/engines/mohawk/mohawk.cpp
@@ -41,8 +41,8 @@ MohawkEngine::MohawkEngine(OSystem *syst, const MohawkGameDescription *gamedesc)
 	// Setup mixer
 	syncSoundSettings();
 
-	_pauseDialog = 0;
-	_cursor = 0;
+	_pauseDialog = nullptr;
+	_cursor = nullptr;
 }
 
 MohawkEngine::~MohawkEngine() {
@@ -70,7 +70,6 @@ Common::SeekableReadStream *MohawkEngine::getResource(uint32 tag, uint16 id) {
 			return _mhk[i]->getResource(tag, id);
 
 	error("Could not find a '%s' resource with ID %04x", tag2str(tag), id);
-	return NULL;
 }
 
 bool MohawkEngine::hasResource(uint32 tag, uint16 id) {
@@ -95,7 +94,6 @@ uint32 MohawkEngine::getResourceOffset(uint32 tag, uint16 id) {
 			return _mhk[i]->getOffset(tag, id);
 
 	error("Could not find a '%s' resource with ID %04x", tag2str(tag), id);
-	return 0;
 }
 
 uint16 MohawkEngine::findResourceID(uint32 tag, const Common::String &resName) {
@@ -104,7 +102,6 @@ uint16 MohawkEngine::findResourceID(uint32 tag, const Common::String &resName) {
 			return _mhk[i]->findResourceID(tag, resName);
 
 	error("Could not find a '%s' resource matching name '%s'", tag2str(tag), resName.c_str());
-	return 0xFFFF;
 }
 
 Common::String MohawkEngine::getResourceName(uint32 tag, uint16 id) {
@@ -114,7 +111,6 @@ Common::String MohawkEngine::getResourceName(uint32 tag, uint16 id) {
 		}
 
 	error("Could not find a \'%s\' resource with ID %04x", tag2str(tag), id);
-	return 0;
 }
 
 } // End of namespace Mohawk
diff --git a/engines/mohawk/mohawk.h b/engines/mohawk/mohawk.h
index c6781ae..a3583a5 100644
--- a/engines/mohawk/mohawk.h
+++ b/engines/mohawk/mohawk.h
@@ -80,23 +80,22 @@ class CursorManager;
 
 class MohawkEngine : public ::Engine {
 protected:
-	virtual Common::Error run();
+	Common::Error run() override;
 
 public:
 	MohawkEngine(OSystem *syst, const MohawkGameDescription *gamedesc);
-	virtual ~MohawkEngine();
+	~MohawkEngine() override;
 
 	// Detection related functions
 	const MohawkGameDescription *_gameDescription;
 	const char *getGameId() const;
 	uint32 getFeatures() const;
 	const char *getAppName() const;
-	uint16 getVersion() const;
 	Common::Platform getPlatform() const;
 	uint8 getGameType() const;
 	Common::Language getLanguage() const;
 
-	bool hasFeature(EngineFeature f) const;
+	bool hasFeature(EngineFeature f) const override;
 
 	CursorManager *_cursor;
 
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 5baa89c..9103b03 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -54,7 +54,8 @@
 
 namespace Mohawk {
 
-MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription *gamedesc) : MohawkEngine(syst, gamedesc) {
+MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription *gamedesc) :
+		MohawkEngine(syst, gamedesc) {
 	DebugMan.addDebugChannel(kDebugVariable, "Variable", "Track Variable Accesses");
 	DebugMan.addDebugChannel(kDebugSaveLoad, "SaveLoad", "Track Save/Load Function");
 	DebugMan.addDebugChannel(kDebugView, "View", "Track Card File (VIEW) Parsing");
@@ -69,6 +70,7 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
 	_currentCursor = 0;
 	_mainCursor = kDefaultMystCursor;
 	_showResourceRects = false;
+	_curStack = 0;
 	_curCard = 0;
 
 	_hoverResource = nullptr;
@@ -82,6 +84,7 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
 	_scriptParser = nullptr;
 	_gameState = nullptr;
 	_optionsDialog = nullptr;
+	_rnd = nullptr;
 
 	_prevStack = nullptr;
 
@@ -89,6 +92,12 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
 	_mouseMoved = false;
 	_escapePressed = false;
 	_interactive = true;
+	_runExitScript = true;
+
+	_needsPageDrop = false;
+	_needsShowCredits = false;
+	_needsShowDemoMenu = false;
+	_needsShowMap = false;
 }
 
 MohawkEngine_Myst::~MohawkEngine_Myst() {
@@ -340,9 +349,6 @@ Common::Error MohawkEngine_Myst::run() {
 		_mhk.push_back(mhk);
 	}
 
-	// Test Load Function...
-	loadHelp(10000);
-
 	while (!shouldQuit()) {
 		doFrame();
 	}
@@ -724,7 +730,7 @@ void MohawkEngine_Myst::checkCurrentResource() {
 	}
 
 	for (uint16 i = 0; i < _resources.size(); i++) {
-		if (_resources[i]->contains(mouse) && _resources[i]->type == kMystAreaHover
+		if (_resources[i]->contains(mouse) && _resources[i]->hasType(kMystAreaHover)
 			&& _hoverResource != _resources[i]) {
 			_hoverResource = static_cast<MystAreaHover *>(_resources[i]);
 			_hoverResource->handleMouseEnter();
@@ -955,50 +961,6 @@ void MohawkEngine_Myst::runExitScript() {
 	_scriptParser->runScript(script);
 }
 
-void MohawkEngine_Myst::loadHelp(uint16 id) {
-	// The original version did not have the help system
-	if (!(getFeatures() & GF_ME))
-		return;
-
-	// TODO: Help File contains 5 cards i.e. VIEW, RLST, etc.
-	//       in addition to HELP resources.
-	//       These are Ids 9930 to 9934
-	//       Need to deal with loading and displaying these..
-	//       Current engine structure only supports display of
-	//       card from primary stack MHK
-
-	debugC(kDebugHelp, "Loading Help System Data");
-
-	Common::SeekableReadStream *helpStream = getResource(ID_HELP, id);
-
-	uint16 count = helpStream->readUint16LE();
-	uint16 *u0 = new uint16[count];
-	Common::String helpText;
-
-	debugC(kDebugHelp, "\tcount: %d", count);
-
-	for (uint16 i = 0; i < count; i++) {
-		u0[i] = helpStream->readUint16LE();
-		debugC(kDebugHelp, "\tu0[%d]: %d", i, u0[i]);
-	}
-
-	// TODO: Previous values i.e. u0[0] to u0[count - 2]
-	// appear to be resource ids in the help.dat file..
-	if (u0[count - 1] != count)
-		warning("loadHelp(): last u0 value is not equal to count");
-
-	do {
-		helpText += helpStream->readByte();
-	} while (helpText.lastChar() != 0);
-	helpText.deleteLastChar();
-
-	debugC(kDebugHelp, "\thelpText: \"%s\"", helpText.c_str());
-
-	delete[] u0;
-
-	delete helpStream;
-}
-
 void MohawkEngine_Myst::loadCursorHints() {
 	_cursorHints.clear();
 
@@ -1059,7 +1021,7 @@ void MohawkEngine_Myst::checkCursorHints() {
 
 	// Check all the cursor hints to see if we're in a hotspot that contains a hint.
 	for (uint16 i = 0; i < _cursorHints.size(); i++)
-		if (_resources[_cursorHints[i].id] == _activeResource && _activeResource->isEnabled()) {
+		if (_activeResource && _resources[_cursorHints[i].id] == _activeResource && _activeResource->isEnabled()) {
 			if (_cursorHints[i].cursor == -1) {
 				uint16 var_value = _scriptParser->getVar(_cursorHints[i].variableHint.var);
 
@@ -1107,7 +1069,7 @@ void MohawkEngine_Myst::redrawResource(MystAreaImageSwitch *resource, bool updat
 
 void MohawkEngine_Myst::redrawArea(uint16 var, bool update) {
 	for (uint16 i = 0; i < _resources.size(); i++)
-		if (_resources[i]->type == kMystAreaImageSwitch && _resources[i]->getImageSwitchVar() == var)
+		if (_resources[i]->hasType(kMystAreaImageSwitch) && _resources[i]->getImageSwitchVar() == var)
 			redrawResource(static_cast<MystAreaImageSwitch *>(_resources[i]), update);
 }
 
@@ -1120,36 +1082,34 @@ MystArea *MohawkEngine_Myst::loadResource(Common::SeekableReadStream *rlstStream
 
 	switch (type) {
 	case kMystAreaAction:
-		resource =  new MystAreaAction(this, rlstStream, parent);
+		resource =  new MystAreaAction(this, type, rlstStream, parent);
 		break;
 	case kMystAreaVideo:
-		resource =  new MystAreaVideo(this, rlstStream, parent);
+		resource =  new MystAreaVideo(this, type, rlstStream, parent);
 		break;
 	case kMystAreaActionSwitch:
-		resource =  new MystAreaActionSwitch(this, rlstStream, parent);
+		resource =  new MystAreaActionSwitch(this, type, rlstStream, parent);
 		break;
 	case kMystAreaImageSwitch:
-		resource =  new MystAreaImageSwitch(this, rlstStream, parent);
+		resource =  new MystAreaImageSwitch(this, type, rlstStream, parent);
 		break;
 	case kMystAreaSlider:
-		resource =  new MystAreaSlider(this, rlstStream, parent);
+		resource =  new MystAreaSlider(this, type, rlstStream, parent);
 		break;
 	case kMystAreaDrag:
-		resource =  new MystAreaDrag(this, rlstStream, parent);
+		resource =  new MystAreaDrag(this, type, rlstStream, parent);
 		break;
 	case kMystVideoInfo:
-		resource =  new MystVideoInfo(this, rlstStream, parent);
+		resource =  new MystVideoInfo(this, type, rlstStream, parent);
 		break;
 	case kMystAreaHover:
-		resource =  new MystAreaHover(this, rlstStream, parent);
+		resource =  new MystAreaHover(this, type, rlstStream, parent);
 		break;
 	default:
-		resource = new MystArea(this, rlstStream, parent);
+		resource = new MystArea(this, type, rlstStream, parent);
 		break;
 	}
 
-	resource->type = type;
-
 	return resource;
 }
 
@@ -1277,9 +1237,9 @@ MystSoundBlock MohawkEngine_Myst::readSoundBlock(Common::ReadStream *stream) con
 		debugC(kDebugView, "\tSound: %d", soundBlock.sound);
 		soundBlock.soundVolume = stream->readUint16LE();
 		debugC(kDebugView, "\tVolume: %d", soundBlock.soundVolume);
-	} else if (soundBlock.sound == kMystSoundActionContinue)
+	} else if (soundBlock.sound == kMystSoundActionContinue) {
 		debugC(kDebugView, "Continue current sound");
-	else if (soundBlock.sound == kMystSoundActionChangeVolume) {
+	} else if (soundBlock.sound == kMystSoundActionChangeVolume) {
 		debugC(kDebugView, "Continue current sound, change volume");
 		soundBlock.soundVolume = stream->readUint16LE();
 		debugC(kDebugView, "\tVolume: %d", soundBlock.soundVolume);
@@ -1305,8 +1265,7 @@ MystSoundBlock MohawkEngine_Myst::readSoundBlock(Common::ReadStream *stream) con
 			soundBlock.soundList.push_back(sound);
 		}
 	} else {
-		debugC(kDebugView, "Unknown");
-		warning("Unknown sound control value '%d' in card '%d'", soundBlock.sound, _curCard);
+		error("Unknown sound control value '%d' in card '%d'", soundBlock.sound, _curCard);
 	}
 
 	return soundBlock;
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 3f756fa..379110f 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -176,7 +176,7 @@ protected:
 
 public:
 	MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription *gamedesc);
-	virtual ~MohawkEngine_Myst();
+	~MohawkEngine_Myst() override;
 
 	Common::SeekableReadStream *getResource(uint32 tag, uint16 id) override;
 	Common::Array<uint16> getResourceIDList(uint32 type) const;
@@ -264,8 +264,6 @@ private:
 	void runInitScript();
 	void runExitScript();
 
-	void loadHelp(uint16 id);
-
 	void loadResources();
 	void drawResourceRects();
 	void checkCurrentResource();
diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp
index 7cc39e9..c9172ce 100644
--- a/engines/mohawk/myst_areas.cpp
+++ b/engines/mohawk/myst_areas.cpp
@@ -32,9 +32,10 @@
 
 namespace Mohawk {
 
-MystArea::MystArea(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) {
-	_vm = vm;
-	_parent = parent;
+MystArea::MystArea(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		_vm(vm),
+		_parent(parent),
+		_type(type) {
 
 	if (parent == nullptr) {
 		_flags = rlstStream->readUint16LE();
@@ -77,7 +78,7 @@ void MystArea::handleMouseUp() {
 
 	uint16 opcode;
 
-	switch (type) {
+	switch (_type) {
 	case kMystAreaForward:
 		opcode = 6;
 		break;
@@ -118,7 +119,7 @@ void MystArea::setEnabled(bool enabled) {
 
 const Common::String MystArea::describe() {
 	Common::String desc = Common::String::format("type: %2d rect: (%3d %3d %3d %3d)",
-			type, _rect.left, _rect.top, _rect.width(), _rect.height());
+			_type, _rect.left, _rect.top, _rect.width(), _rect.height());
 
 	if (_dest != 0)
 		desc += Common::String::format(" dest: %4d", _dest);
@@ -137,8 +138,8 @@ void MystArea::drawBoundingRect() {
 	}
 }
 
-MystAreaAction::MystAreaAction(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystArea(vm, rlstStream, parent) {
+MystAreaAction::MystAreaAction(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystArea(vm, type, rlstStream, parent) {
 	debugC(kDebugResource, "\tResource Type 5 Script:");
 
 	_script = vm->_scriptParser->readScript(rlstStream, kMystScriptNormal);
@@ -175,8 +176,8 @@ Common::String MystAreaVideo::convertMystVideoName(const Common::String &name) {
 	return temp + ".mov";
 }
 
-MystAreaVideo::MystAreaVideo(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystAreaAction(vm, rlstStream, parent) {
+MystAreaVideo::MystAreaVideo(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystAreaAction(vm, type, rlstStream, parent) {
 	char c = 0;
 
 	do {
@@ -281,8 +282,8 @@ void MystAreaVideo::pauseMovie(bool pause) {
 		handle->pause(pause);
 }
 
-MystAreaActionSwitch::MystAreaActionSwitch(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystArea(vm, rlstStream, parent) {
+MystAreaActionSwitch::MystAreaActionSwitch(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystArea(vm, type, rlstStream, parent) {
 	_actionSwitchVar = rlstStream->readUint16LE();
 	uint16 numSubResources = rlstStream->readUint16LE();
 	debugC(kDebugResource, "\tactionSwitchVar: %d", _actionSwitchVar);
@@ -335,8 +336,8 @@ void MystAreaActionSwitch::handleMouseDown() {
 	doSwitch(&MystArea::handleMouseDown);
 }
 
-MystAreaImageSwitch::MystAreaImageSwitch(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystAreaActionSwitch(vm, rlstStream, parent) {
+MystAreaImageSwitch::MystAreaImageSwitch(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystAreaActionSwitch(vm, type, rlstStream, parent) {
 	_imageSwitchVar = rlstStream->readUint16LE();
 	uint16 numSubImages = rlstStream->readUint16LE();
 	debugC(kDebugResource, "\tvar8: %d", _imageSwitchVar);
@@ -477,8 +478,8 @@ const Common::String MystAreaImageSwitch::describe() {
 
 // No MystResourceType9!
 
-MystAreaSlider::MystAreaSlider(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystAreaDrag(vm, rlstStream, parent) {
+MystAreaSlider::MystAreaSlider(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystAreaDrag(vm, type, rlstStream, parent) {
 	_dragSound = rlstStream->readUint16LE();
 
 	debugC(kDebugResource, "\tdrag sound : %d", _dragSound);
@@ -643,8 +644,8 @@ void MystAreaSlider::updatePosition(const Common::Point &mouse) {
 		_vm->_sound->playEffect(_dragSound);
 }
 
-MystAreaDrag::MystAreaDrag(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystAreaImageSwitch(vm, rlstStream, parent) {
+MystAreaDrag::MystAreaDrag(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystAreaImageSwitch(vm, type, rlstStream, parent) {
 	_flagHV = rlstStream->readUint16LE();
 	_minH = rlstStream->readUint16LE();
 	_maxH = rlstStream->readUint16LE();
@@ -748,8 +749,8 @@ uint16 MystAreaDrag::getList3(uint16 index) {
 	return (index < _lists[2].size()) ?  _lists[2][index] : 0;
 }
 
-MystVideoInfo::MystVideoInfo(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystAreaDrag(vm, rlstStream, parent) {
+MystVideoInfo::MystVideoInfo(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystAreaDrag(vm, type, rlstStream, parent) {
 	_numFrames = rlstStream->readUint16LE();
 	_firstFrame = rlstStream->readUint16LE();
 	uint16 frameWidth = rlstStream->readUint16LE();
@@ -774,8 +775,8 @@ MystVideoInfo::~MystVideoInfo() {
 }
 
 void MystVideoInfo::drawFrame(uint16 frame) {
-	_currentFrame = _firstFrame + frame;
-	_vm->_gfx->copyImageToScreen(_currentFrame, _frameRect);
+	uint16 currentFrame = _firstFrame + frame;
+	_vm->_gfx->copyImageToScreen(currentFrame, _frameRect);
 }
 
 bool MystVideoInfo::pullLeverV() {
@@ -810,8 +811,8 @@ void MystVideoInfo::releaseLeverV() {
 	}
 }
 
-MystAreaHover::MystAreaHover(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
-		MystArea(vm, rlstStream, parent) {
+MystAreaHover::MystAreaHover(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent) :
+		MystArea(vm, type, rlstStream, parent) {
 	_enterOpcode = rlstStream->readUint16LE();
 	_leaveOpcode = rlstStream->readUint16LE();
 
diff --git a/engines/mohawk/myst_areas.h b/engines/mohawk/myst_areas.h
index 32b6ca4..bfd370d 100644
--- a/engines/mohawk/myst_areas.h
+++ b/engines/mohawk/myst_areas.h
@@ -58,12 +58,13 @@ enum {
 
 class MystArea {
 public:
-	MystArea(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	MystArea(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
 	virtual ~MystArea();
 
 	virtual const Common::String describe();
 	void drawBoundingRect();
 
+	bool hasType(ResourceType type) const { return _type == type; }
 	bool contains(Common::Point point) { return _rect.contains(point); }
 	virtual void drawDataToScreen() {}
 	virtual void handleCardChange() {}
@@ -83,10 +84,10 @@ public:
 	virtual void handleMouseDrag() {}
 
 	MystArea *_parent;
-	ResourceType type;
 protected:
 	MohawkEngine_Myst *_vm;
 
+	ResourceType _type;
 	uint16 _flags;
 	Common::Rect _rect;
 	uint16 _dest;
@@ -94,7 +95,7 @@ protected:
 
 class MystAreaAction : public MystArea {
 public:
-	MystAreaAction(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	MystAreaAction(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
 
 	void handleMouseUp() override;
 	const Common::String describe() override;
@@ -105,7 +106,7 @@ protected:
 
 class MystAreaVideo : public MystAreaAction {
 public:
-	MystAreaVideo(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	MystAreaVideo(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
 
 	VideoEntryPtr playMovie();
 	VideoEntryPtr getVideo();
@@ -131,14 +132,14 @@ protected:
 
 class MystAreaActionSwitch : public MystArea {
 public:
-	MystAreaActionSwitch(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
-	virtual ~MystAreaActionSwitch();
+	MystAreaActionSwitch(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	~MystAreaActionSwitch() override;
 
-	virtual void drawDataToScreen() override;
-	virtual void handleCardChange() override;
+	void drawDataToScreen() override;
+	void handleCardChange() override;
 
-	virtual void handleMouseUp() override;
-	virtual void handleMouseDown() override;
+	void handleMouseUp() override;
+	void handleMouseDown() override;
 
 	MystArea *getSubResource(uint16 index) { return _subResources[index]; }
 protected:
@@ -152,16 +153,16 @@ protected:
 
 class MystAreaImageSwitch : public MystAreaActionSwitch {
 public:
-	MystAreaImageSwitch(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
-	virtual ~MystAreaImageSwitch();
+	MystAreaImageSwitch(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	~MystAreaImageSwitch() override;
 
 	struct SubImage {
 		uint16 wdib;
 		Common::Rect rect;
 	};
 
-	virtual const Common::String describe() override;
-	virtual void drawDataToScreen() override;
+	const Common::String describe() override;
+	void drawDataToScreen() override;
 	void drawConditionalDataToScreen(uint16 state, bool update = true);
 	uint16 getImageSwitchVar() override;
 
@@ -175,14 +176,14 @@ protected:
 
 class MystAreaDrag : public MystAreaImageSwitch {
 public:
-	MystAreaDrag(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
-	virtual ~MystAreaDrag();
+	MystAreaDrag(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	~MystAreaDrag() override;
 
 	const Common::String describe() override;
 
-	virtual void handleMouseDown() override;
-	virtual void handleMouseUp() override;
-	virtual void handleMouseDrag() override;
+	void handleMouseDown() override;
+	void handleMouseUp() override;
+	void handleMouseDrag() override;
 
 	uint16 getList1(uint16 index);
 	uint16 getList2(uint16 index);
@@ -214,8 +215,8 @@ protected:
 
 class MystAreaSlider : public MystAreaDrag {
 public:
-	MystAreaSlider(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
-	virtual ~MystAreaSlider();
+	MystAreaSlider(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	~MystAreaSlider() override;
 
 	void handleMouseDown() override;
 	void handleMouseUp() override;
@@ -235,8 +236,8 @@ protected:
 
 class MystVideoInfo : public MystAreaDrag {
 public:
-	MystVideoInfo(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
-	virtual ~MystVideoInfo();
+	MystVideoInfo(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	~MystVideoInfo() override;
 
 	void drawFrame(uint16 frame);
 	bool pullLeverV();
@@ -247,14 +248,11 @@ protected:
 	uint16 _numFrames;
 	uint16 _firstFrame;
 	Common::Rect _frameRect;
-
-private:
-	uint16 _currentFrame;
 };
 
 class MystAreaHover : public MystArea {
 public:
-	MystAreaHover(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent);
+	MystAreaHover(MohawkEngine_Myst *vm, ResourceType type, Common::SeekableReadStream *rlstStream, MystArea *parent);
 
 	const Common::String describe() override;
 
diff --git a/engines/mohawk/myst_graphics.h b/engines/mohawk/myst_graphics.h
index 44669bd..b8217f6 100644
--- a/engines/mohawk/myst_graphics.h
+++ b/engines/mohawk/myst_graphics.h
@@ -40,8 +40,8 @@ enum RectState {
 
 class MystGraphics : public GraphicsManager {
 public:
-	MystGraphics(MohawkEngine_Myst *vm);
-	~MystGraphics();
+	explicit MystGraphics(MohawkEngine_Myst *vm);
+	~MystGraphics() override;
 
 	void copyImageSectionToScreen(uint16 image, Common::Rect src, Common::Rect dest);
 	void copyImageSectionToBackBuffer(uint16 image, Common::Rect src, Common::Rect dest);
@@ -51,7 +51,6 @@ public:
 	void runTransition(TransitionType type, Common::Rect rect, uint16 steps, uint16 delay);
 	void drawRect(Common::Rect rect, RectState state);
 	void drawLine(const Common::Point &p1, const Common::Point &p2, uint32 color);
-	void enableDrawingTimeSimulation(bool enable);
 	void fadeToBlack();
 	void fadeFromBlack();
 
diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp
index ba42650..70923e9 100644
--- a/engines/mohawk/myst_scripts.cpp
+++ b/engines/mohawk/myst_scripts.cpp
@@ -40,6 +40,7 @@ MystScriptEntry::MystScriptEntry() {
 	var = 0;
 	resourceId = 0;
 	u1 = 0;
+	opcode = 0;
 }
 
 const uint8 MystScriptParser::_stackMap[11] = {
@@ -79,8 +80,10 @@ MystScriptParser::MystScriptParser(MohawkEngine_Myst *vm) :
 	_invokingResource = nullptr;
 	_savedCardId = 0;
 	_savedCursorId = 0;
+	_savedMapCardId = 0;
 	_tempVar = 0;
 	_scriptNestingLevel = 0;
+	_startTime = 0;
 }
 
 MystScriptParser::~MystScriptParser() {
@@ -800,6 +803,8 @@ void MystScriptParser::showMap() {
 }
 
 void MystScriptParser::o_exitMap(uint16 var, const ArgumentsArray &args) {
+	assert(_savedMapCardId);
+
 	_vm->changeToCard(_savedMapCardId, kTransitionCopy);
 }
 
diff --git a/engines/mohawk/myst_scripts.h b/engines/mohawk/myst_scripts.h
index a336f02..3ef8663 100644
--- a/engines/mohawk/myst_scripts.h
+++ b/engines/mohawk/myst_scripts.h
@@ -60,7 +60,7 @@ typedef Common::SharedPtr<Common::Array<MystScriptEntry> > MystScript;
 
 class MystScriptParser {
 public:
-	MystScriptParser(MohawkEngine_Myst *vm);
+	explicit MystScriptParser(MohawkEngine_Myst *vm);
 	virtual ~MystScriptParser();
 
 	void runScript(MystScript script, MystArea *invokingResource = nullptr);
diff --git a/engines/mohawk/myst_sound.h b/engines/mohawk/myst_sound.h
index 71df23d..9530170 100644
--- a/engines/mohawk/myst_sound.h
+++ b/engines/mohawk/myst_sound.h
@@ -39,7 +39,7 @@ class MohawkEngine_Myst;
 
 class MystSound {
 public:
-	MystSound(MohawkEngine_Myst *vm);
+	explicit MystSound(MohawkEngine_Myst *vm);
 	~MystSound();
 
 	// Effect channel
diff --git a/engines/mohawk/myst_stacks/channelwood.cpp b/engines/mohawk/myst_stacks/channelwood.cpp
index 17df749..8d95be0 100644
--- a/engines/mohawk/myst_stacks/channelwood.cpp
+++ b/engines/mohawk/myst_stacks/channelwood.cpp
@@ -37,7 +37,13 @@ namespace Mohawk {
 namespace MystStacks {
 
 Channelwood::Channelwood(MohawkEngine_Myst *vm) :
-		MystScriptParser(vm), _state(vm->_gameState->_channelwood) {
+		MystScriptParser(vm),
+		_state(vm->_gameState->_channelwood),
+		_valveVar(0),
+		_siriusDrawerState(0),
+		_doorOpened(0),
+		_leverPulled(false),
+		_leverAction(nullptr) {
 	setupOpcodes();
 }
 
diff --git a/engines/mohawk/myst_stacks/channelwood.h b/engines/mohawk/myst_stacks/channelwood.h
index 6b8ba9d..3302a8e 100644
--- a/engines/mohawk/myst_stacks/channelwood.h
+++ b/engines/mohawk/myst_stacks/channelwood.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Channelwood : public MystScriptParser {
 public:
-	Channelwood(MohawkEngine_Myst *vm);
-	~Channelwood();
+	explicit Channelwood(MohawkEngine_Myst *vm);
+	~Channelwood() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
@@ -49,7 +49,7 @@ private:
 	void toggleVar(uint16 var) override;
 	bool setVarValue(uint16 var, uint16 value) override;
 
-	virtual uint16 getMap() override { return 9932; }
+	uint16 getMap() override { return 9932; }
 
 	DECLARE_OPCODE(o_bridgeToggle);
 	DECLARE_OPCODE(o_pipeExtend);
diff --git a/engines/mohawk/myst_stacks/credits.cpp b/engines/mohawk/myst_stacks/credits.cpp
index ba49ac2..2d3b366 100644
--- a/engines/mohawk/myst_stacks/credits.cpp
+++ b/engines/mohawk/myst_stacks/credits.cpp
@@ -34,9 +34,11 @@ namespace MystStacks {
 
 // NOTE: Credits Start Card is 10000
 
-Credits::Credits(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
+Credits::Credits(MohawkEngine_Myst *vm) :
+		MystScriptParser(vm),
+		_creditsRunning(false),
+		_curImage(0) {
 	setupOpcodes();
-	_curImage = 0;
 }
 
 Credits::~Credits() {
diff --git a/engines/mohawk/myst_stacks/credits.h b/engines/mohawk/myst_stacks/credits.h
index bea5381..966d930 100644
--- a/engines/mohawk/myst_stacks/credits.h
+++ b/engines/mohawk/myst_stacks/credits.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Credits : public MystScriptParser {
 public:
-	Credits(MohawkEngine_Myst *vm);
-	~Credits();
+	explicit Credits(MohawkEngine_Myst *vm);
+	~Credits() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
diff --git a/engines/mohawk/myst_stacks/demo.cpp b/engines/mohawk/myst_stacks/demo.cpp
index 7ae5568..d2ba70c 100644
--- a/engines/mohawk/myst_stacks/demo.cpp
+++ b/engines/mohawk/myst_stacks/demo.cpp
@@ -30,10 +30,12 @@
 namespace Mohawk {
 namespace MystStacks {
 
-Demo::Demo(MohawkEngine_Myst *vm) : Intro(vm) {
+Demo::Demo(MohawkEngine_Myst *vm) :
+		Intro(vm),
+		_returnToMenuRunning(false),
+		_returnToMenuStep(0),
+		_returnToMenuNextTime(0) {
 	setupOpcodes();
-
-	_returnToMenuStep = 0;
 }
 
 Demo::~Demo() {
diff --git a/engines/mohawk/myst_stacks/demo.h b/engines/mohawk/myst_stacks/demo.h
index 337ddaa..acb224b 100644
--- a/engines/mohawk/myst_stacks/demo.h
+++ b/engines/mohawk/myst_stacks/demo.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Demo : public Intro {
 public:
-	Demo(MohawkEngine_Myst *vm);
-	~Demo();
+	explicit Demo(MohawkEngine_Myst *vm);
+	~Demo() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
@@ -52,8 +52,6 @@ private:
 
 	DECLARE_OPCODE(o_returnToMenu_init);
 
-	DECLARE_OPCODE(opcode_300);
-
 	bool _returnToMenuRunning;
 	uint16 _returnToMenuStep; // 42
 	uint32 _returnToMenuNextTime; // 6
diff --git a/engines/mohawk/myst_stacks/dni.cpp b/engines/mohawk/myst_stacks/dni.cpp
index ba53c70..7c226ed 100644
--- a/engines/mohawk/myst_stacks/dni.cpp
+++ b/engines/mohawk/myst_stacks/dni.cpp
@@ -34,9 +34,15 @@ namespace Mohawk {
 namespace MystStacks {
 
 Dni::Dni(MohawkEngine_Myst *vm) :
-		MystScriptParser(vm) {
+		MystScriptParser(vm),
+		_notSeenAtrus(true),
+		_atrusRunning(false),
+		_waitForLoop(false),
+		_atrusLeft(false),
+		_atrusLeftTime(0),
+		_loopStart(0),
+		_loopEnd(0) {
 	setupOpcodes();
-	_notSeenAtrus = true;
 }
 
 Dni::~Dni() {
diff --git a/engines/mohawk/myst_stacks/dni.h b/engines/mohawk/myst_stacks/dni.h
index 7ba49b1..30c9329 100644
--- a/engines/mohawk/myst_stacks/dni.h
+++ b/engines/mohawk/myst_stacks/dni.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Dni : public MystScriptParser {
 public:
-	Dni(MohawkEngine_Myst *vm);
-	~Dni();
+	explicit Dni(MohawkEngine_Myst *vm);
+	~Dni() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
diff --git a/engines/mohawk/myst_stacks/intro.cpp b/engines/mohawk/myst_stacks/intro.cpp
index 2b431e8..44be90b 100644
--- a/engines/mohawk/myst_stacks/intro.cpp
+++ b/engines/mohawk/myst_stacks/intro.cpp
@@ -31,7 +31,12 @@
 namespace Mohawk {
 namespace MystStacks {
 
-Intro::Intro(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
+Intro::Intro(MohawkEngine_Myst *vm) :
+		MystScriptParser(vm),
+		_introMoviesRunning(false),
+		_introStep(0),
+		_linkBookRunning(false),
+		_linkBookMovie(nullptr) {
 	setupOpcodes();
 }
 
diff --git a/engines/mohawk/myst_stacks/intro.h b/engines/mohawk/myst_stacks/intro.h
index 938a30e..ec78199 100644
--- a/engines/mohawk/myst_stacks/intro.h
+++ b/engines/mohawk/myst_stacks/intro.h
@@ -38,8 +38,8 @@ namespace MystStacks {
 
 class Intro : public MystScriptParser {
 public:
-	Intro(MohawkEngine_Myst *vm);
-	~Intro();
+	explicit Intro(MohawkEngine_Myst *vm);
+	~Intro() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
diff --git a/engines/mohawk/myst_stacks/makingof.cpp b/engines/mohawk/myst_stacks/makingof.cpp
index 2907c53..4e0ce51 100644
--- a/engines/mohawk/myst_stacks/makingof.cpp
+++ b/engines/mohawk/myst_stacks/makingof.cpp
@@ -30,7 +30,8 @@
 namespace Mohawk {
 namespace MystStacks {
 
-MakingOf::MakingOf(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
+MakingOf::MakingOf(MohawkEngine_Myst *vm) :
+		MystScriptParser(vm) {
 	setupOpcodes();
 }
 
diff --git a/engines/mohawk/myst_stacks/makingof.h b/engines/mohawk/myst_stacks/makingof.h
index cdc64d2..f65c969 100644
--- a/engines/mohawk/myst_stacks/makingof.h
+++ b/engines/mohawk/myst_stacks/makingof.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class MakingOf : public MystScriptParser {
 public:
-	MakingOf(MohawkEngine_Myst *vm);
-	~MakingOf();
+	explicit MakingOf(MohawkEngine_Myst *vm);
+	~MakingOf() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
diff --git a/engines/mohawk/myst_stacks/mechanical.cpp b/engines/mohawk/myst_stacks/mechanical.cpp
index bd5406a..5e920f9 100644
--- a/engines/mohawk/myst_stacks/mechanical.cpp
+++ b/engines/mohawk/myst_stacks/mechanical.cpp
@@ -36,23 +36,53 @@ namespace Mohawk {
 namespace MystStacks {
 
 Mechanical::Mechanical(MohawkEngine_Myst *vm) :
-		MystScriptParser(vm), _state(vm->_gameState->_mechanical) {
+		MystScriptParser(vm),
+		_state(vm->_gameState->_mechanical) {
 	setupOpcodes();
 
 	_elevatorGoingMiddle = false;
 	_elevatorPosition = 0;
+	_elevatorGoingDown = 0;
+	_elevatorRotationSpeed = 0;
+	_elevatorRotationGearPosition = 0;
+	_elevatorRotationSoundId = 0;
+	_elevatorRotationLeverMoving = false;
+	_elevatorTooLate = false;
+	_elevatorInCabin = false;
+	_elevatorTopCounter = 0;
+	_elevatorNextTime = 0;
 
 	_crystalLit = 0;
 
 	_mystStaircaseState = false;
 	_fortressPosition = 0;
-	_fortressRotationSpeed = 0;
-	_fortressSimulationSpeed = 0;
 	_gearsWereRunning = false;
 
 	_fortressRotationShortMovieWorkaround = false;
 	_fortressRotationShortMovieCount = 0;
 	_fortressRotationShortMovieLast = 0;
+
+	_fortressRotationRunning = false;
+	_fortressRotationSpeed = 0;
+	_fortressRotationBrake = 0;
+	_fortressRotationGears = nullptr;
+
+	_fortressSimulationRunning = false;
+	_fortressSimulationInit = false;
+	_fortressSimulationSpeed = 0;
+	_fortressSimulationBrake = 0;
+	_fortressSimulationStartSound1 = 0;
+	_fortressSimulationStartSound2 = 0;
+	_fortressSimulationHolo = nullptr;
+	_fortressSimulationStartup = nullptr;
+	_fortressSimulationHoloRate = 0;
+
+	_birdSinging = false;
+	_birdCrankStartTime = 0;
+	_birdSingEndTime = 0;
+	_bird = nullptr;
+
+	_snakeBox = nullptr;
 }
 
 Mechanical::~Mechanical() {
diff --git a/engines/mohawk/myst_stacks/mechanical.h b/engines/mohawk/myst_stacks/mechanical.h
index 46cfe68..52cd7e7 100644
--- a/engines/mohawk/myst_stacks/mechanical.h
+++ b/engines/mohawk/myst_stacks/mechanical.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Mechanical : public MystScriptParser {
 public:
-	Mechanical(MohawkEngine_Myst *vm);
-	~Mechanical();
+	explicit Mechanical(MohawkEngine_Myst *vm);
+	~Mechanical() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
@@ -49,7 +49,7 @@ private:
 	void toggleVar(uint16 var) override;
 	bool setVarValue(uint16 var, uint16 value) override;
 
-	virtual uint16 getMap() override { return 9931; }
+	uint16 getMap() override { return 9931; }
 
 	void birdSing_run();
 	void elevatorRotation_run();
diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
index dbc4ff5..764fb04 100644
--- a/engines/mohawk/myst_stacks/myst.cpp
+++ b/engines/mohawk/myst_stacks/myst.cpp
@@ -37,7 +37,8 @@ namespace Mohawk {
 namespace MystStacks {
 
 Myst::Myst(MohawkEngine_Myst *vm) :
-		MystScriptParser(vm), _state(_vm->_gameState->_myst) {
+		MystScriptParser(vm),
+		_state(_vm->_gameState->_myst) {
 	setupOpcodes();
 
 	// Card ID preinitialized by the engine for use by opcode 18
@@ -45,22 +46,56 @@ Myst::Myst(MohawkEngine_Myst *vm) :
 	_savedCardId = 4329;
 
 	_towerRotationBlinkLabel = false;
+	_towerRotationSpeed = 0;
+	_towerRotationMapClicked = false;
+	_towerRotationOverSpot = false;
+
 	_libraryBookcaseChanged = false;
 	_dockVaultState = 0;
+
 	_cabinDoorOpened = 0;
 	_cabinHandleDown = 0;
 	_cabinMatchState = 2;
 	_cabinGaugeMovieEnabled = false;
+
+	_boilerPressureIncreasing = false;
+	_boilerPressureDecreasing = false;
+	_basementPressureIncreasing = false;
+	_basementPressureDecreasing = false;
+
 	_matchBurning = false;
+	_matchGoOutCnt = 0;
+	_matchGoOutTime = 0;
+
 	_tree = nullptr;
 	_treeAlcove = nullptr;
 	_treeStopped = false;
 	_treeMinPosition = 0;
+	_treeMinAccessiblePosition = 0;
+	_treeMaxAccessiblePosition = 0;
+
 	_imagerValidationStep = 0;
-	_observatoryCurrentSlider = nullptr;
 	_butterfliesMoviePlayed = false;
 	_state.treeLastMoveTime = _vm->_system->getMillis();
 	_rocketPianoSound = 0;
+
+	_observatoryRunning = false;
+	_observatoryMonthChanging = false;
+	_observatoryDayChanging = false;
+	_observatoryYearChanging = false;
+	_observatoryTimeChanging = false;
+	_observatoryVisualizer = nullptr;
+	_observatoryGoButton = nullptr;
+	_observatoryCurrentSlider = nullptr;
+	_observatoryDaySlider = nullptr;
+	_observatoryMonthSlider = nullptr;
+	_observatoryYearSlider = nullptr;
+	_observatoryTimeSlider = nullptr;
+	_observatoryLastTime = 0;
+	_observatoryNotInitialized = true;
+	_observatoryIncrement = 0;
+
+	_greenBookRunning = false;
 }
 
 Myst::~Myst() {
@@ -2260,7 +2295,7 @@ void Myst::o_rocketPianoMove(uint16 var, const ArgumentsArray &args) {
 
 	if (piano.contains(mouse)) {
 		MystArea *resource = _vm->forceUpdateClickedResource();
-		if (resource && resource->type == kMystAreaDrag) {
+		if (resource && resource->hasType(kMystAreaDrag)) {
 			// Press new key
 			key = static_cast<MystAreaDrag *>(resource);
 			src = key->getSubImage(1).rect;
diff --git a/engines/mohawk/myst_stacks/myst.h b/engines/mohawk/myst_stacks/myst.h
index 2100126..2cffb39 100644
--- a/engines/mohawk/myst_stacks/myst.h
+++ b/engines/mohawk/myst_stacks/myst.h
@@ -37,11 +37,11 @@ namespace MystStacks {
 
 class Myst : public MystScriptParser {
 public:
-	Myst(MohawkEngine_Myst *vm);
-	~Myst();
+	explicit Myst(MohawkEngine_Myst *vm);
+	~Myst() override;
 
-	virtual void disablePersistentScripts() override;
-	virtual void runPersistentScripts() override;
+	void disablePersistentScripts() override;
+	void runPersistentScripts() override;
 
 protected:
 	void setupOpcodes();
@@ -49,7 +49,7 @@ protected:
 	void toggleVar(uint16 var) override;
 	bool setVarValue(uint16 var, uint16 value) override;
 
-	virtual uint16 getMap() override { return 9934; }
+	uint16 getMap() override { return 9934; }
 
 	void towerRotationMap_run();
 	virtual void libraryBookcaseTransform_run();
diff --git a/engines/mohawk/myst_stacks/preview.cpp b/engines/mohawk/myst_stacks/preview.cpp
index bc0dd04..49fef62 100644
--- a/engines/mohawk/myst_stacks/preview.cpp
+++ b/engines/mohawk/myst_stacks/preview.cpp
@@ -34,9 +34,18 @@
 namespace Mohawk {
 namespace MystStacks {
 
-Preview::Preview(MohawkEngine_Myst *vm) : Myst(vm) {
+Preview::Preview(MohawkEngine_Myst *vm) :
+		Myst(vm) {
 	setupOpcodes();
 	_vm->_cursor->hideCursor();
+
+	_libraryState = 0;
+	_library = nullptr;
+
+	_speechRunning = false;
+	_speechStep = 0;
+	_currentCue = 0;
+	_speechNextTime = 0;
 }
 
 Preview::~Preview() {
diff --git a/engines/mohawk/myst_stacks/preview.h b/engines/mohawk/myst_stacks/preview.h
index 6c0fe83..a27fec7 100644
--- a/engines/mohawk/myst_stacks/preview.h
+++ b/engines/mohawk/myst_stacks/preview.h
@@ -39,8 +39,8 @@ namespace MystStacks {
 
 class Preview : public Myst {
 public:
-	Preview(MohawkEngine_Myst *vm);
-	~Preview();
+	explicit Preview(MohawkEngine_Myst *vm);
+	~Preview() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp
index 0f1949f..2463150 100644
--- a/engines/mohawk/myst_stacks/selenitic.cpp
+++ b/engines/mohawk/myst_stacks/selenitic.cpp
@@ -36,15 +36,48 @@ namespace Mohawk {
 namespace MystStacks {
 
 Selenitic::Selenitic(MohawkEngine_Myst *vm) :
-		MystScriptParser(vm), _state(vm->_gameState->_selenitic) {
+		MystScriptParser(vm),
+		_state(vm->_gameState->_selenitic) {
 	setupOpcodes();
+
 	_mazeRunnerPosition = 288;
 	_mazeRunnerDirection = 8;
 	_mazeRunnerDoorOpened = false;
+	_mazeRunnerWindow = nullptr;
+	_mazeRunnerCompass = nullptr;
+	_mazeRunnerLight = nullptr;
+	_mazeRunnerRightButton = nullptr;
+	_mazeRunnerLeftButton = nullptr;
 
+	_soundReceiverRunning = false;
 	_soundReceiverDirection = 0;
 	_soundReceiverStartTime = 0;
 	_soundReceiverNearBlinkCounter = 0;
+	_soundReceiverSigmaPressed = false;
+
+	for (uint i = 0; i < ARRAYSIZE(_soundReceiverSources); i++) {
+		_soundReceiverSources[i] = nullptr;
+	}
+
+	_soundReceiverCurrentSource = nullptr;
+	_soundReceiverPosition = nullptr;
+	_soundReceiverSpeed = 0;
+	_soundReceiverViewer = nullptr;
+	_soundReceiverRightButton = nullptr;
+	_soundReceiverLeftButton = nullptr;
+	_soundReceiverAngle1 = nullptr;
+	_soundReceiverAngle2 = nullptr;
+	_soundReceiverAngle3 = nullptr;
+	_soundReceiverAngle4 = nullptr;
+	_soundReceiverSigmaButton = nullptr;
+
+	_soundLockSoundId = 0;
+	_soundLockSlider1 = nullptr;
+	_soundLockSlider2 = nullptr;
+	_soundLockSlider3 = nullptr;
+	_soundLockSlider4 = nullptr;
+	_soundLockSlider5 = nullptr;
+	_soundLockButton = nullptr;
 }
 
 Selenitic::~Selenitic() {
@@ -1072,7 +1105,7 @@ void Selenitic::o_soundReceiver_init(uint16 var, const ArgumentsArray &args) {
 
 void Selenitic::o_soundLock_init(uint16 var, const ArgumentsArray &args) {
 	for (uint i = 0; i < _vm->_resources.size(); i++) {
-		if (_vm->_resources[i]->type == kMystAreaSlider) {
+		if (_vm->_resources[i]->hasType(kMystAreaSlider)) {
 			switch (_vm->_resources[i]->getImageSwitchVar()) {
 			case 20:
 				_soundLockSlider1 = _vm->getViewResource<MystAreaSlider>(i);
@@ -1095,7 +1128,7 @@ void Selenitic::o_soundLock_init(uint16 var, const ArgumentsArray &args) {
 				_soundLockSlider5->setStep(_state.soundLockSliderPositions[4]);
 				break;
 			}
-		} else if (_vm->_resources[i]->type == kMystAreaImageSwitch && _vm->_resources[i]->getImageSwitchVar() == 28) {
+		} else if (_vm->_resources[i]->hasType(kMystAreaImageSwitch) && _vm->_resources[i]->getImageSwitchVar() == 28) {
 			_soundLockButton = _vm->getViewResource<MystAreaImageSwitch>(i);
 		}
 	}
diff --git a/engines/mohawk/myst_stacks/selenitic.h b/engines/mohawk/myst_stacks/selenitic.h
index 341886d..1dc1505 100644
--- a/engines/mohawk/myst_stacks/selenitic.h
+++ b/engines/mohawk/myst_stacks/selenitic.h
@@ -38,8 +38,8 @@ namespace MystStacks {
 
 class Selenitic : public MystScriptParser {
 public:
-	Selenitic(MohawkEngine_Myst *vm);
-	~Selenitic();
+	explicit Selenitic(MohawkEngine_Myst *vm);
+	~Selenitic() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
@@ -50,7 +50,7 @@ private:
 	void toggleVar(uint16 var) override;
 	bool setVarValue(uint16 var, uint16 value) override;
 
-	virtual uint16 getMap() override { return 9930; }
+	uint16 getMap() override { return 9930; }
 
 	DECLARE_OPCODE(o_mazeRunnerMove);
 	DECLARE_OPCODE(o_mazeRunnerSoundRepeat);
diff --git a/engines/mohawk/myst_stacks/slides.cpp b/engines/mohawk/myst_stacks/slides.cpp
index f8c388d..25d5cf4 100644
--- a/engines/mohawk/myst_stacks/slides.cpp
+++ b/engines/mohawk/myst_stacks/slides.cpp
@@ -33,9 +33,15 @@
 namespace Mohawk {
 namespace MystStacks {
 
-Slides::Slides(MohawkEngine_Myst *vm) : MystScriptParser(vm) {
+Slides::Slides(MohawkEngine_Myst *vm) :
+		MystScriptParser(vm) {
 	setupOpcodes();
+
 	_vm->_cursor->hideCursor();
+
+	_cardSwapEnabled = false;
+	_nextCardID = 0;
+	_nextCardTime = 0;
 }
 
 Slides::~Slides() {
diff --git a/engines/mohawk/myst_stacks/slides.h b/engines/mohawk/myst_stacks/slides.h
index 63fd9c8..6970c3b 100644
--- a/engines/mohawk/myst_stacks/slides.h
+++ b/engines/mohawk/myst_stacks/slides.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Slides : public MystScriptParser {
 public:
-	Slides(MohawkEngine_Myst *vm);
-	~Slides();
+	explicit Slides(MohawkEngine_Myst *vm);
+	~Slides() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
diff --git a/engines/mohawk/myst_stacks/stoneship.cpp b/engines/mohawk/myst_stacks/stoneship.cpp
index 534efe7..046aa5f 100644
--- a/engines/mohawk/myst_stacks/stoneship.cpp
+++ b/engines/mohawk/myst_stacks/stoneship.cpp
@@ -37,10 +37,14 @@ namespace Mohawk {
 namespace MystStacks {
 
 Stoneship::Stoneship(MohawkEngine_Myst *vm) :
-		MystScriptParser(vm), _state(vm->_gameState->_stoneship) {
+		MystScriptParser(vm),
+		_state(vm->_gameState->_stoneship) {
 	setupOpcodes();
 
 	_tunnelRunning = false;
+	_tunnelNextTime = 0;
+	_tunnelAlarmSound = 0;
+	_tunnelImagesCount = 0;
 
 	_state.lightState = 0;
 	_state.generatorDepletionTime = 0;
@@ -61,6 +65,31 @@ Stoneship::Stoneship(MohawkEngine_Myst *vm) :
 		_state.generatorPowerAvailable = 2;
 	else
 		_state.generatorPowerAvailable = 0;
+
+	_batteryCharging = false;
+	_batteryDepleting = false;
+	_batteryNextTime = 0;
+	_batteryLastCharge = 0;
+	_batteryGaugeRunning = false;
+	_batteryGauge = nullptr;
+
+	_hologramTurnedOn = 0;
+	_hologramDisplay = nullptr;
+	_hologramSelection = nullptr;
+	_hologramDisplayPos = 0;
+
+	_telescopeRunning = false;
+	_telescopePosition = 0;
+	_telescopePanorama = 0;
+	_telescopeOldMouse = 0;
+	_telescopeLighthouseOff = 0;
+	_telescopeLighthouseOn = 0;
+	_telescopeLighthouseState = false;
+	_telescopeNexTime = 0;
+
+	_cloudOrbMovie = nullptr;
+	_cloudOrbSound = 0;
+	_cloudOrbStopSound = 0;
 }
 
 Stoneship::~Stoneship() {
@@ -399,7 +428,7 @@ void Stoneship::o_pumpTurnOff(uint16 var, const ArgumentsArray &args) {
 
 		for (uint i = 0; i < _vm->_resources.size(); i++) {
 			MystArea *resource = _vm->_resources[i];
-			if (resource->type == kMystAreaImageSwitch && resource->getImageSwitchVar() == buttonVar) {
+			if (resource->hasType(kMystAreaImageSwitch) && resource->getImageSwitchVar() == buttonVar) {
 				static_cast<MystAreaImageSwitch *>(resource)->drawConditionalDataToScreen(0, true);
 				break;
 			}
diff --git a/engines/mohawk/myst_stacks/stoneship.h b/engines/mohawk/myst_stacks/stoneship.h
index dca7ce8..64f58ec 100644
--- a/engines/mohawk/myst_stacks/stoneship.h
+++ b/engines/mohawk/myst_stacks/stoneship.h
@@ -37,8 +37,8 @@ namespace MystStacks {
 
 class Stoneship : public MystScriptParser {
 public:
-	Stoneship(MohawkEngine_Myst *vm);
-	~Stoneship();
+	explicit Stoneship(MohawkEngine_Myst *vm);
+	~Stoneship() override;
 
 	void disablePersistentScripts() override;
 	void runPersistentScripts() override;
@@ -49,7 +49,7 @@ private:
 	void toggleVar(uint16 var) override;
 	bool setVarValue(uint16 var, uint16 value) override;
 
-	virtual uint16 getMap() override { return 9933; }
+	uint16 getMap() override { return 9933; }
 
 	DECLARE_OPCODE(o_pumpTurnOff);
 	DECLARE_OPCODE(o_brotherDoorOpen);
diff --git a/engines/mohawk/resource.cpp b/engines/mohawk/resource.cpp
index b0ae8dd..ea44ca7 100644
--- a/engines/mohawk/resource.cpp
+++ b/engines/mohawk/resource.cpp
@@ -32,7 +32,7 @@ namespace Mohawk {
 // Base Archive code
 
 Archive::Archive() {
-	_stream = 0;
+	_stream = nullptr;
 }
 
 Archive::~Archive() {
@@ -57,7 +57,7 @@ bool Archive::openFile(const Common::String &fileName) {
 
 void Archive::close() {
 	_types.clear();
-	delete _stream; _stream = 0;
+	delete _stream; _stream = nullptr;
 }
 
 bool Archive::hasResource(uint32 tag, uint16 id) const {
diff --git a/engines/mohawk/resource.h b/engines/mohawk/resource.h
index 12c5a13..ecaef44 100644
--- a/engines/mohawk/resource.h
+++ b/engines/mohawk/resource.h
@@ -170,25 +170,25 @@ protected:
 class MohawkArchive : public Archive {
 public:
 	MohawkArchive() : Archive() {}
-	~MohawkArchive() {}
+	~MohawkArchive() override {}
 
-	bool openStream(Common::SeekableReadStream *stream);
+	bool openStream(Common::SeekableReadStream *stream) override;
 };
 
 class LivingBooksArchive_v1 : public Archive {
 public:
 	LivingBooksArchive_v1() : Archive() {}
-	~LivingBooksArchive_v1() {}
+	~LivingBooksArchive_v1() override {}
 
-	bool openStream(Common::SeekableReadStream *stream);
+	bool openStream(Common::SeekableReadStream *stream) override;
 };
 
 class DOSArchive_v2 : public Archive {
 public:
 	DOSArchive_v2() : Archive() {}
-	~DOSArchive_v2() {}
+	~DOSArchive_v2() override {}
 
-	bool openStream(Common::SeekableReadStream *stream);
+	bool openStream(Common::SeekableReadStream *stream) override;
 };
 
 } // End of namespace Mohawk
diff --git a/engines/mohawk/resource_cache.cpp b/engines/mohawk/resource_cache.cpp
index 0c19934..ab1758b 100644
--- a/engines/mohawk/resource_cache.cpp
+++ b/engines/mohawk/resource_cache.cpp
@@ -64,7 +64,7 @@ void ResourceCache::add(uint32 tag, uint16 id, Common::SeekableReadStream *data)
 // Returns NULL if not found
 Common::SeekableReadStream *ResourceCache::search(uint32 tag, uint16 id) {
 	if (!enabled)
-		return NULL;
+		return nullptr;
 
 	debugC(kDebugCache, "Searching for tag 0x%04X id %d", tag, id);
 
@@ -79,7 +79,7 @@ Common::SeekableReadStream *ResourceCache::search(uint32 tag, uint16 id) {
 	}
 
 	debugC(kDebugCache, "tag 0x%04X id %d not found", tag, id);
-	return NULL;
+	return nullptr;
 }
 
 } // End of namespace Mohawk
diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h
index def218d..6ad1208 100644
--- a/engines/mohawk/riven.h
+++ b/engines/mohawk/riven.h
@@ -83,7 +83,7 @@ protected:
 
 public:
 	MohawkEngine_Riven(OSystem *syst, const MohawkGameDescription *gamedesc);
-	virtual ~MohawkEngine_Riven();
+	~MohawkEngine_Riven() override;
 
 	RivenVideoManager *_video;
 	RivenSoundManager *_sound;
diff --git a/engines/mohawk/riven_graphics.cpp b/engines/mohawk/riven_graphics.cpp
index d0a5c05..d4ea8fc 100644
--- a/engines/mohawk/riven_graphics.cpp
+++ b/engines/mohawk/riven_graphics.cpp
@@ -101,7 +101,7 @@ public:
 		_lastCopyArea = makeDirectionalInitalArea();
 	}
 
-	virtual bool drawFrame(uint32 elapsed) override {
+	bool drawFrame(uint32 elapsed) override {
 		Common::Rect copyArea;
 		switch (_type) {
 			case kRivenTransitionWipeLeft:
@@ -162,7 +162,7 @@ public:
 		 complete = false;
 	}
 
-	virtual bool drawFrame(uint32 elapsed) override {
+	bool drawFrame(uint32 elapsed) override {
 		Common::Rect newArea;
 		switch (_type) {
 			case kRivenTransitionPanLeft:
@@ -264,7 +264,7 @@ public:
 		_timeBased = false;
 	}
 
-	virtual bool drawFrame(uint32 elapsed) override {
+	bool drawFrame(uint32 elapsed) override {
 		assert(_effectScreen->format == _mainScreen->format);
 		assert(_effectScreen->format == _system->getScreenFormat());
 
@@ -303,7 +303,22 @@ public:
 	}
 };
 
-RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) : GraphicsManager(), _vm(vm) {
+RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) :
+		GraphicsManager(),
+		_vm(vm),
+		_screenUpdateNesting(0),
+		_screenUpdateRunning(false),
+		_enableCardUpdateScript(true),
+		_scheduledTransition(kRivenTransitionNone),
+		_dirtyScreen(false),
+		_creditsImage(302),
+		_creditsPos(0),
+		_transitionMode(kRivenTransitionModeFastest),
+		_transitionOffset(-1),
+		_waterEffect(nullptr),
+		_fliesEffect(nullptr),
+		_transitionFrames(0),
+		_transitionDuration(0) {
 	_bitmapDecoder = new MohawkBitmap();
 
 	// Restrict ourselves to a single pixel format to simplify the effects implementation
@@ -317,20 +332,6 @@ RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) : GraphicsManager(), _vm(vm
 
 	_effectScreen = new Graphics::Surface();
 	_effectScreen->create(608, 392, _pixelFormat);
-
-	_screenUpdateNesting = 0;
-	_screenUpdateRunning = false;
-	_enableCardUpdateScript = true;
-	_scheduledTransition = kRivenTransitionNone;
-	_dirtyScreen = false;
-
-	_creditsImage = 302;
-	_creditsPos = 0;
-
-	_transitionMode = kRivenTransitionModeFastest;
-	_transitionOffset = -1;
-	_waterEffect = nullptr;
-	_fliesEffect = nullptr;
 }
 
 RivenGraphics::~RivenGraphics() {
@@ -339,7 +340,8 @@ RivenGraphics::~RivenGraphics() {
 	_mainScreen->free();
 	delete _mainScreen;
 	delete _bitmapDecoder;
-	delete _fliesEffect;
+	clearFliesEffect();
+	clearWaterEffect();
 }
 
 MohawkSurface *RivenGraphics::decodeImage(uint16 id) {
diff --git a/engines/mohawk/riven_graphics.h b/engines/mohawk/riven_graphics.h
index 31ab840..7b831c5 100644
--- a/engines/mohawk/riven_graphics.h
+++ b/engines/mohawk/riven_graphics.h
@@ -54,8 +54,8 @@ enum RivenTransitionMode {
 
 class RivenGraphics : public GraphicsManager {
 public:
-	RivenGraphics(MohawkEngine_Riven *vm);
-	~RivenGraphics();
+	explicit RivenGraphics(MohawkEngine_Riven *vm);
+	~RivenGraphics() override;
 
 	// Screen updates
 	void beginScreenUpdate();
@@ -94,11 +94,11 @@ public:
 	// Credits
 	void beginCredits();
 	void updateCredits();
-	uint getCurCreditsImage() { return _creditsImage; }
+	uint getCurCreditsImage() const { return _creditsImage; }
 
 protected:
-	MohawkSurface *decodeImage(uint16 id);
-	MohawkEngine *getVM() { return (MohawkEngine *)_vm; }
+	MohawkSurface *decodeImage(uint16 id) override;
+	MohawkEngine *getVM() override { return (MohawkEngine *)_vm; }
 
 private:
 	MohawkEngine_Riven *_vm;
diff --git a/engines/mohawk/riven_inventory.h b/engines/mohawk/riven_inventory.h
index 7c75b48..8ce5f7e 100644
--- a/engines/mohawk/riven_inventory.h
+++ b/engines/mohawk/riven_inventory.h
@@ -36,7 +36,7 @@ class MohawkEngine_Riven;
  */
 class RivenInventory {
 public:
-	RivenInventory(MohawkEngine_Riven *vm);
+	explicit RivenInventory(MohawkEngine_Riven *vm);
 	virtual ~RivenInventory();
 
 	/** Handle a click event in the inventory area */
diff --git a/engines/mohawk/riven_sound.h b/engines/mohawk/riven_sound.h
index ce2ddbc..fd14dee 100644
--- a/engines/mohawk/riven_sound.h
+++ b/engines/mohawk/riven_sound.h
@@ -65,7 +65,7 @@ struct SLSTRecord {
  */
 class RivenSoundManager {
 public:
-	RivenSoundManager(MohawkEngine_Riven *vm);
+	explicit RivenSoundManager(MohawkEngine_Riven *vm);
 	~RivenSoundManager();
 
 	/**
diff --git a/engines/mohawk/riven_video.h b/engines/mohawk/riven_video.h
index 5b5bf30..ae5a266 100644
--- a/engines/mohawk/riven_video.h
+++ b/engines/mohawk/riven_video.h
@@ -130,7 +130,7 @@ private:
 
 class RivenVideoManager {
 public:
-	RivenVideoManager(MohawkEngine_Riven *vm);
+	explicit RivenVideoManager(MohawkEngine_Riven *vm);
 	~RivenVideoManager();
 
 	void updateMovies();
diff --git a/engines/mohawk/sound.cpp b/engines/mohawk/sound.cpp
index 81d83fc..5e0cae1 100644
--- a/engines/mohawk/sound.cpp
+++ b/engines/mohawk/sound.cpp
@@ -181,9 +181,9 @@ Audio::RewindableAudioStream *makeMohawkWaveStream(Common::SeekableReadStream *s
 }
 
 Sound::Sound(MohawkEngine* vm) : _vm(vm) {
-	_midiDriver = NULL;
-	_midiParser = NULL;
-	_midiData = NULL;
+	_midiDriver = nullptr;
+	_midiParser = nullptr;
+	_midiData = nullptr;
 	initMidi();
 }
 
@@ -219,7 +219,7 @@ void Sound::initMidi() {
 }
 
 Audio::RewindableAudioStream *Sound::makeAudioStream(uint16 id, CueList *cueList) {
-	Audio::RewindableAudioStream *audStream = NULL;
+	Audio::RewindableAudioStream *audStream = nullptr;
 
 	switch (_vm->getGameType()) {
 	case GType_ZOOMBINI:
@@ -261,7 +261,7 @@ Audio::SoundHandle *Sound::playSound(uint16 id, byte volume, bool loop, CueList
 		return &handle->handle;
 	}
 
-	return NULL;
+	return nullptr;
 }
 
 void Sound::playMidi(uint16 id) {
diff --git a/engines/mohawk/sound.h b/engines/mohawk/sound.h
index 11fd004..15bda07 100644
--- a/engines/mohawk/sound.h
+++ b/engines/mohawk/sound.h
@@ -102,7 +102,7 @@ class MohawkEngine;
 
 class Sound {
 public:
-	Sound(MohawkEngine *vm);
+	explicit Sound(MohawkEngine *vm);
 	~Sound();
 
 	// Generic sound functions
@@ -126,8 +126,7 @@ private:
 
 	Common::Array<SndHandle> _handles;
 	SndHandle *getHandle();
-	Audio::RewindableAudioStream *makeAudioStream(uint16 id, CueList *cueList = NULL);
-	uint16 convertMystID(uint16 id);
+	Audio::RewindableAudioStream *makeAudioStream(uint16 id, CueList *cueList = nullptr);
 };
 
 } // End of namespace Mohawk
diff --git a/engines/mohawk/video.cpp b/engines/mohawk/video.cpp
index 994e219..ae20a59 100644
--- a/engines/mohawk/video.cpp
+++ b/engines/mohawk/video.cpp
@@ -38,7 +38,7 @@
 
 namespace Mohawk {
 
-VideoEntry::VideoEntry() : _video(0), _id(-1), _x(0), _y(0), _loop(false), _enabled(true) {
+VideoEntry::VideoEntry() : _video(nullptr), _id(-1), _x(0), _y(0), _loop(false), _enabled(true) {
 }
 
 VideoEntry::VideoEntry(Video::VideoDecoder *video, const Common::String &fileName) : _video(video), _fileName(fileName), _id(-1), _x(0), _y(0), _loop(false), _enabled(true) {
@@ -53,7 +53,7 @@ VideoEntry::~VideoEntry() {
 
 void VideoEntry::close() {
 	delete _video;
-	_video = 0;
+	_video = nullptr;
 }
 
 bool VideoEntry::endOfVideo() const {
@@ -230,7 +230,7 @@ bool VideoManager::drawNextFrame(VideoEntryPtr videoEntry) {
 		return false;
 	}
 
-	Graphics::Surface *convertedFrame = 0;
+	Graphics::Surface *convertedFrame = nullptr;
 	Graphics::PixelFormat pixelFormat = _vm->_system->getScreenFormat();
 
 	if (frame->format != pixelFormat) {
diff --git a/engines/mohawk/video.h b/engines/mohawk/video.h
index 1f8b93d..fdc55a5 100644
--- a/engines/mohawk/video.h
+++ b/engines/mohawk/video.h
@@ -237,7 +237,7 @@ typedef Common::SharedPtr<VideoEntry> VideoEntryPtr;
 
 class VideoManager {
 public:
-	VideoManager(MohawkEngine *vm);
+	explicit VideoManager(MohawkEngine *vm);
 	virtual ~VideoManager();
 
 	// Generic movie functions
diff --git a/engines/mohawk/view.cpp b/engines/mohawk/view.cpp
index 70d2027..ec73723 100644
--- a/engines/mohawk/view.cpp
+++ b/engines/mohawk/view.cpp
@@ -63,10 +63,10 @@ void Feature::setNodeDefaults(Feature *prev, Feature *next) {
 	_prev = prev;
 	_next = next;
 
-	_moveProc = NULL;
-	_drawProc = NULL;
-	_doneProc = NULL;
-	_frameProc = NULL;
+	_moveProc = nullptr;
+	_drawProc = nullptr;
+	_doneProc = nullptr;
+	_frameProc = nullptr;
 
 	_data.bounds = Common::Rect();
 	_data.clipRect = Common::Rect();
@@ -333,7 +333,7 @@ void NewFeature::finishResetFeatureScript() {
 }
 
 View::View(MohawkEngine *vm) : _vm(vm) {
-	_currentModule = NULL;
+	_currentModule = nullptr;
 
 	_backgroundId = 0xffff;
 
@@ -393,7 +393,7 @@ void View::setModule(Module *module) {
 		delete _currentModule;
 	}
 
-	_currentModule = NULL;
+	_currentModule = nullptr;
 
 	if (module) {
 		_currentModule = module;
@@ -572,7 +572,7 @@ Feature *View::getFeaturePtr(uint16 id) {
 			return node;
 	}
 
-	return NULL;
+	return nullptr;
 }
 
 uint16 View::getNewFeatureId() {
@@ -591,8 +591,8 @@ void View::removeFeature(Feature *feature, bool free) {
 
 	feature->_prev->_next = feature->_next;
 	feature->_next->_prev = feature->_prev;
-	feature->_next = NULL;
-	feature->_prev = NULL;
+	feature->_next = nullptr;
+	feature->_prev = nullptr;
 
 	if (free)
 		delete feature;
@@ -619,21 +619,21 @@ Feature *View::pointOnFeature(bool topdown, uint32 flags, Common::Point pos) {
 		else
 			curr = curr->_next;
 	}
-	return NULL;
+	return nullptr;
 }
 
 void View::sortView() {
 	Feature *base = _rootNode;
 	Feature *next = base->_next;
-	Feature *otherRoot = NULL;
-	Feature *otherBase = NULL;
-	Feature *objectRoot = NULL;
-	Feature *objectBase = NULL;
-	Feature *staticRoot = NULL;
-	Feature *staticBase = NULL;
+	Feature *otherRoot = nullptr;
+	Feature *otherBase = nullptr;
+	Feature *objectRoot = nullptr;
+	Feature *objectBase = nullptr;
+	Feature *staticRoot = nullptr;
+	Feature *staticBase = nullptr;
 
 	// Remove all features.
-	base->_next = NULL;
+	base->_next = nullptr;
 
 	// Iterate through all the previous features, placing them in the appropriate list.
 	while (next) {
@@ -645,33 +645,33 @@ void View::sortView() {
 			// so we insert this node directly after the current base.
 			base->_next = curr;
 			curr->_prev = base;
-			curr->_next = NULL;
+			curr->_next = nullptr;
 			base = base->_next;
 		} else if (curr->_flags & kFeatureSortStatic) {
 			// Insert this node into the list of static objects.
 			if (staticBase) {
 				staticBase->_next = curr;
 				curr->_prev = staticBase;
-				curr->_next = NULL;
+				curr->_next = nullptr;
 				staticBase = curr;
 			} else {
 				staticBase = curr;
 				staticRoot = curr;
-				curr->_prev = NULL;
-				curr->_next = NULL;
+				curr->_prev = nullptr;
+				curr->_next = nullptr;
 			}
 		} else if (curr->_flags & kFeatureObjectMask) { // This is == 1 or == 2 in old code.
 			// Insert this node into the list of objects.
 			if (objectRoot) {
 				objectBase->_next = curr;
 				curr->_prev = objectBase;
-				curr->_next = NULL;
+				curr->_next = nullptr;
 				objectBase = curr;
 			} else {
 				objectBase = curr;
 				objectRoot = curr;
-				curr->_prev = NULL;
-				curr->_next = NULL;
+				curr->_prev = nullptr;
+				curr->_next = nullptr;
 			}
 		} else {
 			if (!(curr->_flags & kFeatureOldSortForeground))
@@ -681,13 +681,13 @@ void View::sortView() {
 			if (otherRoot) {
 				otherBase->_next = curr;
 				curr->_prev = otherBase;
-				curr->_next = NULL;
+				curr->_next = nullptr;
 				otherBase = curr;
 			} else {
 				otherBase = curr;
 				otherRoot = curr;
-				curr->_prev = NULL;
-				curr->_next = NULL;
+				curr->_prev = nullptr;
+				curr->_next = nullptr;
 			}
 		}
 	}
@@ -700,7 +700,7 @@ void View::sortView() {
 		base->_next = prev;
 		prev->_prev = base;
 		base = base->_next;
-		base->_next = NULL;
+		base->_next = nullptr;
 	}
 
 	// Add the other features on top..
@@ -711,12 +711,12 @@ void View::sortView() {
 
 Feature *View::sortOneList(Feature *root) {
 	if (!root)
-		return NULL;
+		return nullptr;
 
 	// Save the next feature and then clear the list.
 	Feature *curr = root->_next;
-	root->_next = NULL;
-	root->_prev = NULL;
+	root->_next = nullptr;
+	root->_prev = nullptr;
 
 	// Iterate over all the features.
 	while (curr) {
@@ -735,7 +735,7 @@ Feature *View::sortOneList(Feature *root) {
 					// This is the end of the list: add ourselves there.
 					check->_next = prev;
 					prev->_prev = check;
-					prev->_next = NULL;
+					prev->_next = nullptr;
 					break;
 				}
 			} else {
@@ -779,7 +779,7 @@ Feature *View::mergeLists(Feature *root, Feature *mergeRoot) {
 				check = check->_next;
 			check->_next = prev;
 			prev->_prev = check;
-			prev->_next = NULL;
+			prev->_next = nullptr;
 			continue;
 		}
 
@@ -802,7 +802,7 @@ Feature *View::mergeLists(Feature *root, Feature *mergeRoot) {
 				// We're at the end of the list, so we have to go here.
 				check->_next = prev;
 				prev->_prev = check;
-				prev->_next = NULL;
+				prev->_next = nullptr;
 				base = prev;
 				break;
 			}





More information about the Scummvm-git-logs mailing list