aboutsummaryrefslogtreecommitdiff
path: root/engines/sword2
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sword2')
-rw-r--r--engines/sword2/console.cpp1
-rw-r--r--engines/sword2/header.cpp293
-rw-r--r--engines/sword2/header.h255
-rw-r--r--engines/sword2/icons.cpp2
-rw-r--r--engines/sword2/module.mk1
-rw-r--r--engines/sword2/music.cpp2
-rw-r--r--engines/sword2/object.h2
-rw-r--r--engines/sword2/screen.h15
-rw-r--r--engines/sword2/sound.cpp1
9 files changed, 323 insertions, 249 deletions
diff --git a/engines/sword2/console.cpp b/engines/sword2/console.cpp
index 20fd79bc38..6f4665a34c 100644
--- a/engines/sword2/console.cpp
+++ b/engines/sword2/console.cpp
@@ -26,6 +26,7 @@
*/
+#include "common/memstream.h"
#include "common/rect.h"
#include "common/system.h"
diff --git a/engines/sword2/header.cpp b/engines/sword2/header.cpp
new file mode 100644
index 0000000000..c930b0c8e7
--- /dev/null
+++ b/engines/sword2/header.cpp
@@ -0,0 +1,293 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "sword2/header.h"
+#include "sword2/screen.h"
+#include "sword2/sword2.h"
+
+#include "common/memstream.h"
+#include "common/endian.h"
+
+namespace Sword2 {
+
+void ResHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ fileType = readS.readByte();
+ compType = readS.readByte();
+ compSize = readS.readUint32LE();
+ decompSize = readS.readUint32LE();
+ readS.read(name, NAME_LEN);
+}
+
+void ResHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeByte(fileType);
+ writeS.writeByte(compType);
+ writeS.writeUint32LE(compSize);
+ writeS.writeUint32LE(decompSize);
+ writeS.write(name, NAME_LEN);
+}
+
+void AnimHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ if (Sword2Engine::isPsx()) {
+ noAnimFrames = readS.readUint16LE();
+ feetStartX = readS.readUint16LE();
+ feetStartY = readS.readUint16LE();
+ feetEndX = readS.readUint16LE();
+ feetEndY = readS.readUint16LE();
+ blend = readS.readUint16LE();
+ runTimeComp = readS.readByte();
+ feetStartDir = readS.readByte();
+ feetEndDir = readS.readByte();
+ } else {
+ runTimeComp = readS.readByte();
+ noAnimFrames = readS.readUint16LE();
+ feetStartX = readS.readUint16LE();
+ feetStartY = readS.readUint16LE();
+ feetStartDir = readS.readByte();
+ feetEndX = readS.readUint16LE();
+ feetEndY = readS.readUint16LE();
+ feetEndDir = readS.readByte();
+ blend = readS.readUint16LE();
+ }
+}
+
+void AnimHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeByte(runTimeComp);
+ writeS.writeUint16LE(noAnimFrames);
+ writeS.writeUint16LE(feetStartX);
+ writeS.writeUint16LE(feetStartY);
+ writeS.writeByte(feetStartDir);
+ writeS.writeUint16LE(feetEndX);
+ writeS.writeUint16LE(feetEndY);
+ writeS.writeByte(feetEndDir);
+ writeS.writeUint16LE(blend);
+}
+
+int CdtEntry::size() {
+ if (Sword2Engine::isPsx())
+ return 12;
+ else
+ return 9;
+}
+
+void CdtEntry::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ if (Sword2Engine::isPsx()) {
+ readS.readByte(); // Skip a byte in psx version
+ x = readS.readUint16LE();
+ y = readS.readUint16LE();
+ frameOffset = readS.readUint32LE();
+ frameType = readS.readByte();
+ } else {
+ x = readS.readUint16LE();
+ y = readS.readUint16LE();
+ frameOffset = readS.readUint32LE();
+ frameType = readS.readByte();
+ }
+}
+
+void CdtEntry::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint16LE(x);
+ writeS.writeUint16LE(y);
+ writeS.writeUint32LE(frameOffset);
+ writeS.writeByte(frameType);
+}
+
+void FrameHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ compSize = readS.readUint32LE();
+ width = readS.readUint16LE();
+ height = readS.readUint16LE();
+
+ if (Sword2Engine::isPsx()) { // In PSX version, frames are half height
+ height *= 2;
+ width = (width % 2) ? width + 1 : width;
+ }
+}
+
+void FrameHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint32LE(compSize);
+ writeS.writeUint16LE(width);
+ writeS.writeUint16LE(height);
+}
+
+void MultiScreenHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ palette = readS.readUint32LE();
+ bg_parallax[0] = readS.readUint32LE();
+ bg_parallax[1] = readS.readUint32LE();
+ screen = readS.readUint32LE();
+ fg_parallax[0] = readS.readUint32LE();
+ fg_parallax[1] = readS.readUint32LE();
+ layers = readS.readUint32LE();
+ paletteTable = readS.readUint32LE();
+ maskOffset = readS.readUint32LE();
+}
+
+void MultiScreenHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint32LE(palette);
+ writeS.writeUint32LE(bg_parallax[0]);
+ writeS.writeUint32LE(bg_parallax[1]);
+ writeS.writeUint32LE(screen);
+ writeS.writeUint32LE(fg_parallax[0]);
+ writeS.writeUint32LE(fg_parallax[1]);
+ writeS.writeUint32LE(layers);
+ writeS.writeUint32LE(paletteTable);
+ writeS.writeUint32LE(maskOffset);
+}
+
+void ScreenHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ width = readS.readUint16LE();
+ height = readS.readUint16LE();
+ noLayers = readS.readUint16LE();
+}
+
+void ScreenHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint16LE(width);
+ writeS.writeUint16LE(height);
+ writeS.writeUint16LE(noLayers);
+}
+
+void LayerHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ x = readS.readUint16LE();
+ y = readS.readUint16LE();
+ width = readS.readUint16LE();
+ height = readS.readUint16LE();
+ maskSize = readS.readUint32LE();
+ offset = readS.readUint32LE();
+}
+
+void LayerHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint16LE(x);
+ writeS.writeUint16LE(y);
+ writeS.writeUint16LE(width);
+ writeS.writeUint16LE(height);
+ writeS.writeUint32LE(maskSize);
+ writeS.writeUint32LE(offset);
+}
+
+void TextHeader::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ noOfLines = readS.readUint32LE();
+}
+
+void TextHeader::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint32LE(noOfLines);
+}
+
+void PSXScreensEntry::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ bgPlxXres = readS.readUint16LE();
+ bgPlxYres = readS.readUint16LE();
+ bgPlxOffset = readS.readUint32LE();
+ bgPlxSize = readS.readUint32LE();
+ bgXres = readS.readUint16LE();
+ bgYres = readS.readUint16LE();
+ bgOffset = readS.readUint32LE();
+ bgSize = readS.readUint32LE();
+ fgPlxXres = readS.readUint16LE();
+ fgPlxYres = readS.readUint16LE();
+ fgPlxOffset = readS.readUint32LE();
+ fgPlxSize = readS.readUint32LE();
+}
+
+void PSXScreensEntry::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint16LE(bgPlxXres);
+ writeS.writeUint16LE(bgPlxYres);
+ writeS.writeUint32LE(bgPlxOffset);
+ writeS.writeUint32LE(bgPlxSize);
+ writeS.writeUint16LE(bgXres);
+ writeS.writeUint16LE(bgYres);
+ writeS.writeUint32LE(bgOffset);
+ writeS.writeUint32LE(bgSize);
+ writeS.writeUint16LE(fgPlxXres);
+ writeS.writeUint16LE(fgPlxYres);
+ writeS.writeUint32LE(fgPlxOffset);
+ writeS.writeUint32LE(fgPlxSize);
+}
+
+void PSXFontEntry::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ offset = readS.readUint16LE() / 2;
+ skipLines = readS.readUint16LE();
+ charWidth = readS.readUint16LE() / 2;
+ charHeight = readS.readUint16LE();
+}
+
+void PSXFontEntry::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint16LE(offset);
+ writeS.writeUint16LE(skipLines);
+ writeS.writeUint16LE(charWidth);
+ writeS.writeUint16LE(charHeight);
+}
+
+void Parallax::read(byte *addr) {
+ Common::MemoryReadStream readS(addr, size());
+
+ w = readS.readUint16LE();
+ h = readS.readUint16LE();
+}
+
+void Parallax::write(byte *addr) {
+ Common::MemoryWriteStream writeS(addr, size());
+
+ writeS.writeUint16LE(w);
+ writeS.writeUint16LE(h);
+}
+
+} // End of namespace Sword2
diff --git a/engines/sword2/header.h b/engines/sword2/header.h
index 67cbba35af..3f64152bb9 100644
--- a/engines/sword2/header.h
+++ b/engines/sword2/header.h
@@ -28,7 +28,6 @@
#ifndef SWORD2_HEADER_H
#define SWORD2_HEADER_H
-#include "common/stream.h"
#include "common/endian.h"
namespace Sword2 {
@@ -60,25 +59,8 @@ struct ResHeader {
return 44;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- fileType = readS.readByte();
- compType = readS.readByte();
- compSize = readS.readUint32LE();
- decompSize = readS.readUint32LE();
- readS.read(name, NAME_LEN);
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeByte(fileType);
- writeS.writeByte(compType);
- writeS.writeUint32LE(compSize);
- writeS.writeUint32LE(decompSize);
- writeS.write(name, NAME_LEN);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
// fileType
@@ -156,45 +138,8 @@ struct AnimHeader {
return 15;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- if (Sword2Engine::isPsx()) {
- noAnimFrames = readS.readUint16LE();
- feetStartX = readS.readUint16LE();
- feetStartY = readS.readUint16LE();
- feetEndX = readS.readUint16LE();
- feetEndY = readS.readUint16LE();
- blend = readS.readUint16LE();
- runTimeComp = readS.readByte();
- feetStartDir = readS.readByte();
- feetEndDir = readS.readByte();
- } else {
- runTimeComp = readS.readByte();
- noAnimFrames = readS.readUint16LE();
- feetStartX = readS.readUint16LE();
- feetStartY = readS.readUint16LE();
- feetStartDir = readS.readByte();
- feetEndX = readS.readUint16LE();
- feetEndY = readS.readUint16LE();
- feetEndDir = readS.readByte();
- blend = readS.readUint16LE();
- }
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeByte(runTimeComp);
- writeS.writeUint16LE(noAnimFrames);
- writeS.writeUint16LE(feetStartX);
- writeS.writeUint16LE(feetStartY);
- writeS.writeByte(feetStartDir);
- writeS.writeUint16LE(feetEndX);
- writeS.writeUint16LE(feetEndY);
- writeS.writeByte(feetEndDir);
- writeS.writeUint16LE(blend);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
@@ -221,38 +166,10 @@ struct CdtEntry {
uint8 frameType; // 0 = print sprite normally with top-left
// corner at (x,y), otherwise see below...
- static int size() {
- if (Sword2Engine::isPsx())
- return 12;
- else
- return 9;
- }
-
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- if (Sword2Engine::isPsx()) {
- readS.readByte(); // Skip a byte in psx version
- x = readS.readUint16LE();
- y = readS.readUint16LE();
- frameOffset = readS.readUint32LE();
- frameType = readS.readByte();
- } else {
- x = readS.readUint16LE();
- y = readS.readUint16LE();
- frameOffset = readS.readUint32LE();
- frameType = readS.readByte();
- }
- }
+ static int size();
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint16LE(x);
- writeS.writeUint16LE(y);
- writeS.writeUint32LE(frameOffset);
- writeS.writeByte(frameType);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
// 'frameType' bit values
@@ -277,26 +194,8 @@ struct FrameHeader {
return 8;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- compSize = readS.readUint32LE();
- width = readS.readUint16LE();
- height = readS.readUint16LE();
-
- if (Sword2Engine::isPsx()) { // In PSX version, frames are half height
- height *= 2;
- width = (width % 2) ? width + 1 : width;
- }
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint32LE(compSize);
- writeS.writeUint16LE(width);
- writeS.writeUint16LE(height);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
//----------------------------------------------------------
@@ -331,33 +230,8 @@ struct MultiScreenHeader {
return 36;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- palette = readS.readUint32LE();
- bg_parallax[0] = readS.readUint32LE();
- bg_parallax[1] = readS.readUint32LE();
- screen = readS.readUint32LE();
- fg_parallax[0] = readS.readUint32LE();
- fg_parallax[1] = readS.readUint32LE();
- layers = readS.readUint32LE();
- paletteTable = readS.readUint32LE();
- maskOffset = readS.readUint32LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint32LE(palette);
- writeS.writeUint32LE(bg_parallax[0]);
- writeS.writeUint32LE(bg_parallax[1]);
- writeS.writeUint32LE(screen);
- writeS.writeUint32LE(fg_parallax[0]);
- writeS.writeUint32LE(fg_parallax[1]);
- writeS.writeUint32LE(layers);
- writeS.writeUint32LE(paletteTable);
- writeS.writeUint32LE(maskOffset);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
// Screen Header
@@ -371,21 +245,8 @@ struct ScreenHeader {
return 6;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- width = readS.readUint16LE();
- height = readS.readUint16LE();
- noLayers = readS.readUint16LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint16LE(width);
- writeS.writeUint16LE(height);
- writeS.writeUint16LE(noLayers);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
// Layer Header
@@ -406,27 +267,8 @@ struct LayerHeader {
return 16;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- x = readS.readUint16LE();
- y = readS.readUint16LE();
- width = readS.readUint16LE();
- height = readS.readUint16LE();
- maskSize = readS.readUint32LE();
- offset = readS.readUint32LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint16LE(x);
- writeS.writeUint16LE(y);
- writeS.writeUint16LE(width);
- writeS.writeUint16LE(height);
- writeS.writeUint32LE(maskSize);
- writeS.writeUint32LE(offset);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
//----------------------------------------------------------
@@ -511,17 +353,8 @@ struct TextHeader {
return 4;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- noOfLines = readS.readUint32LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint32LE(noOfLines);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
// a text file has:
@@ -567,39 +400,8 @@ struct PSXScreensEntry {
return 36;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- bgPlxXres = readS.readUint16LE();
- bgPlxYres = readS.readUint16LE();
- bgPlxOffset = readS.readUint32LE();
- bgPlxSize = readS.readUint32LE();
- bgXres = readS.readUint16LE();
- bgYres = readS.readUint16LE();
- bgOffset = readS.readUint32LE();
- bgSize = readS.readUint32LE();
- fgPlxXres = readS.readUint16LE();
- fgPlxYres = readS.readUint16LE();
- fgPlxOffset = readS.readUint32LE();
- fgPlxSize = readS.readUint32LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint16LE(bgPlxXres);
- writeS.writeUint16LE(bgPlxYres);
- writeS.writeUint32LE(bgPlxOffset);
- writeS.writeUint32LE(bgPlxSize);
- writeS.writeUint16LE(bgXres);
- writeS.writeUint16LE(bgYres);
- writeS.writeUint32LE(bgOffset);
- writeS.writeUint32LE(bgSize);
- writeS.writeUint16LE(fgPlxXres);
- writeS.writeUint16LE(fgPlxYres);
- writeS.writeUint32LE(fgPlxOffset);
- writeS.writeUint32LE(fgPlxSize);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
// PSXFontEntry is present in font resource file, it is used
@@ -615,23 +417,8 @@ struct PSXFontEntry {
return 8;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- offset = readS.readUint16LE() / 2;
- skipLines = readS.readUint16LE();
- charWidth = readS.readUint16LE() / 2;
- charHeight = readS.readUint16LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint16LE(offset);
- writeS.writeUint16LE(skipLines);
- writeS.writeUint16LE(charWidth);
- writeS.writeUint16LE(charHeight);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
} // End of namespace Sword2
diff --git a/engines/sword2/icons.cpp b/engines/sword2/icons.cpp
index 4652fc0bc1..b115eb373b 100644
--- a/engines/sword2/icons.cpp
+++ b/engines/sword2/icons.cpp
@@ -26,7 +26,7 @@
*/
-#include "common/stream.h"
+#include "common/memstream.h"
#include "common/rect.h"
#include "sword2/sword2.h"
diff --git a/engines/sword2/module.mk b/engines/sword2/module.mk
index c675b9561e..bf586aefff 100644
--- a/engines/sword2/module.mk
+++ b/engines/sword2/module.mk
@@ -8,6 +8,7 @@ MODULE_OBJS := \
debug.o \
events.o \
function.o \
+ header.o \
icons.o \
interpreter.o \
layers.o \
diff --git a/engines/sword2/music.cpp b/engines/sword2/music.cpp
index 89073fef8e..1519c5d73f 100644
--- a/engines/sword2/music.cpp
+++ b/engines/sword2/music.cpp
@@ -33,6 +33,8 @@
#include "common/file.h"
+#include "common/memstream.h"
+#include "common/substream.h"
#include "common/system.h"
#include "sound/decoders/mp3.h"
diff --git a/engines/sword2/object.h b/engines/sword2/object.h
index b6b6ca5174..98c9f6863b 100644
--- a/engines/sword2/object.h
+++ b/engines/sword2/object.h
@@ -28,7 +28,7 @@
#ifndef SWORD2_OBJECT_H
#define SWORD2_OBJECT_H
-#include "common/stream.h"
+#include "common/memstream.h"
#include "common/endian.h"
namespace Sword2 {
diff --git a/engines/sword2/screen.h b/engines/sword2/screen.h
index afad64011d..0abaebc5af 100644
--- a/engines/sword2/screen.h
+++ b/engines/sword2/screen.h
@@ -192,19 +192,8 @@ struct Parallax {
return 4;
}
- void read(byte *addr) {
- Common::MemoryReadStream readS(addr, size());
-
- w = readS.readUint16LE();
- h = readS.readUint16LE();
- }
-
- void write(byte *addr) {
- Common::MemoryWriteStream writeS(addr, size());
-
- writeS.writeUint16LE(w);
- writeS.writeUint16LE(h);
- }
+ void read(byte *addr);
+ void write(byte *addr);
};
class Screen {
diff --git a/engines/sword2/sound.cpp b/engines/sword2/sound.cpp
index b1d0dee81b..abacbd16f0 100644
--- a/engines/sword2/sound.cpp
+++ b/engines/sword2/sound.cpp
@@ -37,6 +37,7 @@
#include "common/file.h"
+#include "common/memstream.h"
#include "common/system.h"
#include "sword2/sword2.h"