aboutsummaryrefslogtreecommitdiff
path: root/engines/zvision
diff options
context:
space:
mode:
authorrichiesams2013-08-09 14:05:31 -0500
committerrichiesams2013-08-09 14:05:31 -0500
commit268282ab22d18e92180aa7653ef52b47a6ed1b51 (patch)
tree7c4364648dbb116a1f7b582086c8cde4136e1c74 /engines/zvision
parentb4b60e1f632f928bb3f28b99ff4689a9cd24c680 (diff)
downloadscummvm-rg350-268282ab22d18e92180aa7653ef52b47a6ed1b51.tar.gz
scummvm-rg350-268282ab22d18e92180aa7653ef52b47a6ed1b51.tar.bz2
scummvm-rg350-268282ab22d18e92180aa7653ef52b47a6ed1b51.zip
ZVISION: Create class for decoding .zcr cursor files
Diffstat (limited to 'engines/zvision')
-rw-r--r--engines/zvision/cursor.cpp100
-rw-r--r--engines/zvision/cursor.h66
-rw-r--r--engines/zvision/module.mk1
3 files changed, 167 insertions, 0 deletions
diff --git a/engines/zvision/cursor.cpp b/engines/zvision/cursor.cpp
new file mode 100644
index 0000000000..601c58fa2c
--- /dev/null
+++ b/engines/zvision/cursor.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/scummsys.h"
+
+#include "common/str.h"
+#include "common/file.h"
+
+#include "zvision/cursor.h"
+
+
+namespace ZVision {
+
+ZorkCursor::ZorkCursor()
+ : _width(0),
+ _height(0),
+ _hotspotX(0),
+ _hotspotY(0),
+ _surface(0) {
+}
+
+ZorkCursor::ZorkCursor(const Common::String &fileName)
+ : _width(0),
+ _height(0),
+ _hotspotX(0),
+ _hotspotY(0),
+ _surface(0) {
+ Common::File file;
+ if (!file.open(fileName))
+ return;
+
+ uint32 magic = file.readUint32BE();
+ if (magic != MKTAG('Z', 'C', 'R', '1')) {
+ warning("%s is not a Zork Cursor file", fileName.c_str());
+ return;
+ }
+
+ _hotspotX = file.readUint16LE();
+ _hotspotY = file.readUint16LE();
+ _width = file.readUint16LE();
+ _height = file.readUint16LE();
+
+ uint dataSize = _width * _height * 2;
+ _surface = new byte[dataSize];
+ uint32 bytesRead = file.read(_surface, dataSize);
+ assert(bytesRead == dataSize);
+}
+
+ZorkCursor::ZorkCursor(const ZorkCursor &other) {
+ _width = other._width;
+ _height = other._height;
+ _hotspotX = other._hotspotX;
+ _hotspotY = other._hotspotY;
+
+ uint dataSize = _width * _height * 2;
+ _surface = new byte[dataSize];
+
+ memcpy(_surface, other._surface, dataSize);
+}
+
+ZorkCursor &ZorkCursor::operator=(const ZorkCursor &other) {
+ _width = other._width;
+ _height = other._height;
+ _hotspotX = other._hotspotX;
+ _hotspotY = other._hotspotY;
+
+ uint dataSize = _width * _height * 2;
+ _surface = new byte[dataSize];
+
+ memcpy(_surface, other._surface, dataSize);
+
+ return *this;
+}
+
+ZorkCursor::~ZorkCursor() {
+ if (_surface != 0) {
+ delete[] _surface;
+ }
+}
+
+} // End of namespace ZVision
diff --git a/engines/zvision/cursor.h b/engines/zvision/cursor.h
new file mode 100644
index 0000000000..0d91a48f0f
--- /dev/null
+++ b/engines/zvision/cursor.h
@@ -0,0 +1,66 @@
+/* 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 ZVISION_CURSOR_H
+#define ZVISION_CURSOR_H
+
+#include "common/types.h"
+
+#include "graphics/cursor.h"
+
+namespace Common {
+class String;
+}
+
+namespace ZVision {
+
+class ZorkCursor : public Graphics::Cursor {
+public:
+ ZorkCursor();
+ ZorkCursor(const Common::String &fileName);
+ ZorkCursor(const ZorkCursor &other);
+ ~ZorkCursor();
+
+private:
+ uint16 _width;
+ uint16 _height;
+ uint16 _hotspotX;
+ uint16 _hotspotY;
+ byte *_surface;
+
+public:
+ ZorkCursor &operator=(const ZorkCursor &other);
+
+ uint16 getWidth() const { return _width; }
+ uint16 getHeight() const { return _height; }
+ uint16 getHotspotX() const { return _hotspotX; }
+ uint16 getHotspotY() const { return _hotspotY; }
+ byte getKeyColor() const { return 0; }
+ const byte *getSurface() const { return _surface; }
+ const byte *getPalette() const { return 0; }
+ byte getPaletteStartIndex() const { return 0; }
+ uint16 getPaletteCount() const { return 0; }
+};
+
+} // End of namespace ZVision
+
+#endif
diff --git a/engines/zvision/module.mk b/engines/zvision/module.mk
index 14fc035aa1..feafad5e16 100644
--- a/engines/zvision/module.mk
+++ b/engines/zvision/module.mk
@@ -6,6 +6,7 @@ MODULE_OBJS := \
clock.o \
console.o \
control.o \
+ cursor.o \
detection.o \
events.o \
lzss_read_stream.o \