aboutsummaryrefslogtreecommitdiff
path: root/engines/access
diff options
context:
space:
mode:
authorPaul Gilbert2014-08-02 10:07:54 -0400
committerPaul Gilbert2014-08-02 10:07:54 -0400
commita94bf197ef512eb7bf4dcb96ffcd459959c0d57c (patch)
tree8a30ebdf75902664c6bbd8810cfae483230dcdd0 /engines/access
parent857f94423fcf4464df44e5b46241f68e33f800a3 (diff)
downloadscummvm-rg350-a94bf197ef512eb7bf4dcb96ffcd459959c0d57c.tar.gz
scummvm-rg350-a94bf197ef512eb7bf4dcb96ffcd459959c0d57c.tar.bz2
scummvm-rg350-a94bf197ef512eb7bf4dcb96ffcd459959c0d57c.zip
ACCESS: Implement fading routines
Diffstat (limited to 'engines/access')
-rw-r--r--engines/access/access.cpp8
-rw-r--r--engines/access/access.h7
-rw-r--r--engines/access/amazon/amazon_game.cpp7
-rw-r--r--engines/access/amazon/amazon_game.h2
-rw-r--r--engines/access/graphics.cpp4
-rw-r--r--engines/access/graphics.h1
-rw-r--r--engines/access/module.mk1
-rw-r--r--engines/access/screen.cpp100
-rw-r--r--engines/access/screen.h72
9 files changed, 195 insertions, 7 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index 8aabac2b0b..3acd4c530a 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -34,12 +34,14 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)
_debugger = nullptr;
_events = nullptr;
_graphics = nullptr;
+ _screen = nullptr;
}
AccessEngine::~AccessEngine() {
delete _debugger;
delete _events;
delete _graphics;
+ delete _screen;
}
void AccessEngine::initialize() {
@@ -51,16 +53,18 @@ void AccessEngine::initialize() {
_debugger = new Debugger(this);
_events = new EventsManager(this);
_graphics = new GraphicsManager(this);
+ _screen = new Screen(this);
}
Common::Error AccessEngine::run() {
initialize();
setVGA();
- _graphics->setPalettte();
- _graphics->setPanel(0);
+ _screen->setInitialPalettte();
_events->setCursor(CURSOR_0);
_events->showCursor();
+ _graphics->setPanel(0);
+ doTitle();
dummyLoop();
return Common::kNoError;
diff --git a/engines/access/access.h b/engines/access/access.h
index 16487ea64f..4676d73d1d 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -33,6 +33,7 @@
#include "access/debugger.h"
#include "access/events.h"
#include "access/graphics.h"
+#include "access/screen.h"
/**
* This is the namespace of the Access engine.
@@ -77,10 +78,16 @@ protected:
// Engine APIs
virtual Common::Error run();
virtual bool hasFeature(EngineFeature f) const;
+protected:
+ /**
+ * Show game title
+ */
+ virtual void doTitle() = 0;
public:
Debugger *_debugger;
EventsManager *_events;
GraphicsManager *_graphics;
+ Screen *_screen;
public:
AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc);
virtual ~AccessEngine();
diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp
index 2b4196a406..37441411d6 100644
--- a/engines/access/amazon/amazon_game.cpp
+++ b/engines/access/amazon/amazon_game.cpp
@@ -30,6 +30,13 @@ AmazonEngine::AmazonEngine(OSystem *syst, const AccessGameDescription *gameDesc)
AccessEngine(syst, gameDesc) {
}
+void AmazonEngine::doTitle() {
+ _screen->setDisplayScan();
+ _screen->forceFadeOut();
+ _events->hideCursor();
+
+}
+
} // End of namespace Amazon
} // End of namespace Access
diff --git a/engines/access/amazon/amazon_game.h b/engines/access/amazon/amazon_game.h
index 1bccd1cedc..30ec2c6519 100644
--- a/engines/access/amazon/amazon_game.h
+++ b/engines/access/amazon/amazon_game.h
@@ -30,6 +30,8 @@ namespace Access {
namespace Amazon {
class AmazonEngine : public AccessEngine {
+protected:
+ virtual void doTitle();
public:
AmazonEngine(OSystem *syst, const AccessGameDescription *gameDesc);
diff --git a/engines/access/graphics.cpp b/engines/access/graphics.cpp
index 8f0e22f2b1..c1187f2eb3 100644
--- a/engines/access/graphics.cpp
+++ b/engines/access/graphics.cpp
@@ -39,8 +39,4 @@ void GraphicsManager::setPanel(int num) {
_msVirtualOffset = _virtualOffsetsTable[num];
}
-void GraphicsManager::setPalettte() {
- g_system->getPaletteManager()->setPalette(INITIAL_PALETTE, 0, 18);
-}
-
} // End of namespace Access
diff --git a/engines/access/graphics.h b/engines/access/graphics.h
index c7d2acd54e..df626176fa 100644
--- a/engines/access/graphics.h
+++ b/engines/access/graphics.h
@@ -43,7 +43,6 @@ public:
GraphicsManager(AccessEngine *vm);
void setPanel(int num);
- void setPalettte();
};
} // End of namespace Access
diff --git a/engines/access/module.mk b/engines/access/module.mk
index d8867bc593..a4fb8646ba 100644
--- a/engines/access/module.mk
+++ b/engines/access/module.mk
@@ -7,6 +7,7 @@ MODULE_OBJS := \
events.o \
graphics.o \
resources.o \
+ screen.o \
amazon\amazon_game.o
# This module can be built as a plugin
diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp
new file mode 100644
index 0000000000..3f8dc4ecda
--- /dev/null
+++ b/engines/access/screen.cpp
@@ -0,0 +1,100 @@
+/* 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 "common/algorithm.h"
+#include "common/textconsole.h"
+#include "common/system.h"
+#include "graphics/palette.h"
+#include "access/screen.h"
+#include "access/resources.h"
+
+namespace Access {
+
+Screen::Screen(AccessEngine *vm) : _vm(vm) {
+ create(320, 200, Graphics::PixelFormat::createFormatCLUT8());
+ Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0);
+}
+
+void Screen::setDisplayScan() {
+ warning("TODO: setDisplayScan");
+}
+
+void Screen::updateScreen() {
+ g_system->updateScreen();
+}
+
+void Screen::setInitialPalettte() {
+ Common::copy(&INITIAL_PALETTE[0], &INITIAL_PALETTE[18 * 3], _rawPalette);
+ Common::fill(&_rawPalette[18 * 3], &_rawPalette[PALETTE_SIZE], 0);
+
+ g_system->getPaletteManager()->setPalette(INITIAL_PALETTE, 0, 18);
+}
+
+void Screen::updatePalette() {
+ g_system->getPaletteManager()->setPalette(&_tempPalette[0], 0, PALETTE_COUNT);
+ updateScreen();
+}
+
+void Screen::forceFadeOut() {
+ const int FADE_AMOUNT = 2;
+ bool repeatFlag;
+ byte *srcP;
+ int count;
+
+ do {
+ repeatFlag = false;
+ for (srcP = &_tempPalette[0], count = 0; count < PALETTE_COUNT; ++count, ++srcP) {
+ int v = *srcP;
+ if (v) {
+ repeatFlag = true;
+ *srcP = MAX(*srcP - FADE_AMOUNT, 0);
+ }
+ }
+
+ updatePalette();
+ g_system->delayMillis(10);
+ } while (repeatFlag);
+}
+
+void Screen::forceFadeIn() {
+ Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0);
+
+ const int FADE_AMOUNT = 2;
+ bool repeatFlag;
+ do {
+ repeatFlag = false;
+ const byte *srcP = &_rawPalette[0];
+ byte *destP = &_tempPalette[0];
+
+ for (int idx = 0; idx < PALETTE_SIZE; ++idx, ++srcP, ++destP) {
+ if (*destP != *srcP) {
+ repeatFlag = true;
+ *destP = MAX((int)*destP + FADE_AMOUNT, (int)*srcP);
+ }
+ }
+
+ updatePalette();
+ g_system->delayMillis(10);
+ } while (repeatFlag);
+}
+
+} // End of namespace Access
diff --git a/engines/access/screen.h b/engines/access/screen.h
new file mode 100644
index 0000000000..f8e0dab1b1
--- /dev/null
+++ b/engines/access/screen.h
@@ -0,0 +1,72 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ACCESS_SCREEN_H
+#define ACCESS_SCREEN_H
+
+#include "common/scummsys.h"
+#include "common/rect.h"
+#include "graphics/surface.h"
+
+namespace Access {
+
+class AccessEngine;
+
+#define PALETTE_COUNT 256
+#define PALETTE_SIZE (256 * 3)
+
+class Screen: public Graphics::Surface {
+private:
+ AccessEngine *_vm;
+ byte _tempPalette[PALETTE_SIZE];
+ byte _rawPalette[PALETTE_SIZE];
+
+ void updatePalette();
+public:
+ Screen(AccessEngine *vm);
+
+ void setDisplayScan();
+
+ /**
+ * Update the underlying screen
+ */
+ void updateScreen();
+
+ /**
+ * Fade out screen
+ */
+ void forceFadeOut();
+
+ /**
+ * Fade in screen
+ */
+ void forceFadeIn();
+
+ /**
+ * Set the initial palette
+ */
+ void setInitialPalettte();
+};
+
+} // End of namespace Access
+
+#endif /* ACCESS_SCREEN_H */