aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/parallaction/disk.h1
-rw-r--r--engines/parallaction/disk_br.cpp63
-rw-r--r--engines/parallaction/exec_br.cpp24
3 files changed, 60 insertions, 28 deletions
diff --git a/engines/parallaction/disk.h b/engines/parallaction/disk.h
index 77fc7764c9..6dbf6150df 100644
--- a/engines/parallaction/disk.h
+++ b/engines/parallaction/disk.h
@@ -209,6 +209,7 @@ protected:
void errorFileNotFound(const char *s);
Font *createFont(const char *name, Common::ReadStream &stream);
Sprites* createSprites(const char *name);
+ void loadBitmap(Common::SeekableReadStream &stream, Graphics::Surface &surf, byte *palette);
public:
DosDisk_br(Parallaction *vm);
diff --git a/engines/parallaction/disk_br.cpp b/engines/parallaction/disk_br.cpp
index 69d28d57c2..b9e85b5ca9 100644
--- a/engines/parallaction/disk_br.cpp
+++ b/engines/parallaction/disk_br.cpp
@@ -180,6 +180,21 @@ Frames* DosDisk_br::loadHead(const char* name) {
return 0;
}
+void DosDisk_br::loadBitmap(Common::SeekableReadStream &stream, Graphics::Surface &surf, byte *palette) {
+ stream.skip(4);
+ uint width = stream.readUint32BE();
+ uint height = stream.readUint32BE();
+ stream.skip(20);
+
+ if (palette) {
+ stream.read(palette, 768);
+ } else {
+ stream.skip(768);
+ }
+
+ surf.create(width, height, 1);
+ stream.read(surf.pixels, width * height);
+}
Frames* DosDisk_br::loadPointer(const char *name) {
debugC(5, kDebugDisk, "DosDisk_br::loadPointer");
@@ -191,17 +206,8 @@ Frames* DosDisk_br::loadPointer(const char *name) {
if (!stream.open(path))
errorFileNotFound(path);
- stream.skip(4);
- uint width = stream.readUint32BE();
- uint height = stream.readUint32BE();
- stream.skip(20);
- stream.skip(768);
-
Graphics::Surface *surf = new Graphics::Surface;
-
- surf->create(width, height, 1);
- stream.read(surf->pixels, width * height);
-
+ loadBitmap(stream, *surf, 0);
return new SurfaceToFrames(surf);
}
@@ -231,7 +237,17 @@ void genSlidePath(char *path, const char* name) {
Frames* DosDisk_br::loadStatic(const char* name) {
debugC(5, kDebugDisk, "DosDisk_br::loadStatic");
- return 0;
+
+ char path[PATH_LEN];
+ sprintf(path, "%s/ras/%s", _partPath, name);
+ Common::File stream;
+ if (!stream.open(path)) {
+ errorFileNotFound(path);
+ }
+
+ Graphics::Surface *surf = new Graphics::Surface;
+ loadBitmap(stream, *surf, 0);
+ return new SurfaceToFrames(surf);
}
Sprites* DosDisk_br::createSprites(const char *path) {
@@ -284,21 +300,16 @@ void DosDisk_br::loadSlide(BackgroundInfo& info, const char *name) {
if (!stream.open(path))
errorFileNotFound(path);
- stream.skip(4);
- info.width = stream.readUint32BE();
- info.height = stream.readUint32BE();
- stream.skip(20);
-
byte rgb[768];
- stream.read(rgb, 768);
+
+ loadBitmap(stream, info.bg, rgb);
+ info.width = info.bg.w;
+ info.height = info.bg.h;
for (uint i = 0; i < 256; i++) {
info.palette.setEntry(i, rgb[i] >> 2, rgb[i+256] >> 2, rgb[i+512] >> 2);
}
- info.bg.create(info.width, info.height, 1);
- stream.read(info.bg.pixels, info.width * info.height);
-
return;
}
@@ -313,20 +324,16 @@ void DosDisk_br::loadScenery(BackgroundInfo& info, const char *name, const char
if (!stream.open(filename))
errorFileNotFound(filename);
- stream.skip(4);
- info.width = stream.readUint32BE();
- info.height = stream.readUint32BE();
- stream.skip(20);
-
byte rgb[768];
- stream.read(rgb, 768);
+
+ loadBitmap(stream, info.bg, rgb);
+ info.width = info.bg.w;
+ info.height = info.bg.h;
for (uint i = 0; i < 256; i++) {
info.palette.setEntry(i, rgb[i] >> 2, rgb[i+256] >> 2, rgb[i+512] >> 2);
}
- info.bg.create(info.width, info.height, 1);
- stream.read(info.bg.pixels, info.width * info.height);
stream.close();
}
diff --git a/engines/parallaction/exec_br.cpp b/engines/parallaction/exec_br.cpp
index 325fb97f67..b4aa25a57d 100644
--- a/engines/parallaction/exec_br.cpp
+++ b/engines/parallaction/exec_br.cpp
@@ -294,11 +294,35 @@ DECLARE_COMMAND_OPCODE(offsave) {
DECLARE_INSTRUCTION_OPCODE(on) {
warning("Parallaction_br::instOp_on not yet implemented");
+
+ Instruction *inst = *_instRunCtxt.inst;
+ Zone *z = inst->_z;
+
+ if (z) {
+ z->_flags |= kFlagsActive;
+ z->_flags &= ~kFlagsRemove;
+
+ if ((z->_type & 0xFFFF) & kZoneGet) {
+ _gfx->showGfxObj(z->u.get->gfxobj, true);
+ }
+ }
+
}
DECLARE_INSTRUCTION_OPCODE(off) {
warning("Parallaction_br::instOp_off not yet implemented");
+
+ Instruction *inst = *_instRunCtxt.inst;
+ Zone *z = inst->_z;
+
+ if (z) {
+ z->_flags |= kFlagsRemove;
+
+ if ((z->_type & 0xFFFF) & kZoneGet) {
+ _gfx->showGfxObj(z->u.get->gfxobj, false);
+ }
+ }
}