aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche')
-rw-r--r--engines/avalanche/celer2.cpp51
-rw-r--r--engines/avalanche/celer2.h8
2 files changed, 55 insertions, 4 deletions
diff --git a/engines/avalanche/celer2.cpp b/engines/avalanche/celer2.cpp
index c02a82f6f0..6bacde735d 100644
--- a/engines/avalanche/celer2.cpp
+++ b/engines/avalanche/celer2.cpp
@@ -268,8 +268,55 @@ void Celer::pics_link() {
}
}
-void Celer::load_chunks(Common::String xx) {
- warning("STUB: Celer::load_chunks()");
+void Celer::load_chunks(char *xx) {
+ chunkblocktype ch;
+ byte fv;
+
+ Common::String filename;
+ filename = filename.format("chunk%s.avd", xx);
+ if (!f.open(filename)) {
+ warning("AVALANCHE: Celer: File not found: %s", filename.c_str());
+ return;
+ }
+
+ f.seek(44);
+ num_chunks = f.readByte();
+ for (int i = 0; i < num_chunks; i++)
+ offsets[i] = f.readSint32LE();
+
+ for (fv = 0; fv < num_chunks; fv++) {
+ f.seek(offsets[fv]);
+
+ ch.flavour = flavourtype(f.readByte());
+ ch.x = f.readSint16LE();
+ ch.y = f.readSint16LE();
+ ch.xl = f.readSint16LE();
+ ch.yl = f.readSint16LE();
+ ch.size = f.readSint32LE();
+ ch.natural = f.readByte();
+ ch.memorise = f.readByte();
+
+ if (ch.memorise) {
+
+ memos[fv].x = ch.x;
+ memos[fv].xl = ch.xl;
+ memos[fv].y = ch.y;
+ memos[fv].yl = ch.yl;
+ memos[fv].flavour = ch.flavour;
+ memos[fv].size = ch.size;
+
+ memory[fv] = malloc(ch.size); // Celer::forget_chunks() deallocates it.
+
+ /*if (ch.natural) {
+ getimage(ch.x * 8, ch.y, (ch.x + ch.xl) * 8, ch.y + ch.yl, memory[fv]);
+ } else
+ blockread(f, memory[fv], ch.size);*/
+ } else
+ memos[fv].x = on_disk;
+
+ }
+
+ f.close();
}
void Celer::forget_chunks() {
diff --git a/engines/avalanche/celer2.h b/engines/avalanche/celer2.h
index e71dec5f19..aa32bf58a2 100644
--- a/engines/avalanche/celer2.h
+++ b/engines/avalanche/celer2.h
@@ -31,6 +31,7 @@
#define CELER2_H
#include "common/scummsys.h"
+#include "common/file.h"
#include "common/str.h"
namespace Avalanche {
@@ -38,7 +39,7 @@ class AvalancheEngine;
class Celer {
public:
- enum flavourtype {ch_ega, ch_bgi, last_flavourtype};
+ enum flavourtype {ch_ega, ch_bgi};
struct chunkblocktype {
flavourtype flavour;
@@ -62,6 +63,9 @@ public:
memotype memos[40];
void *memory[40];
+ Common::File f;
+
+
Celer();
@@ -69,7 +73,7 @@ public:
void pics_link();
- void load_chunks(Common::String xx);
+ void load_chunks(char *xx);
void forget_chunks();