[Scummvm-cvs-logs] scummvm master -> f6f8b456e70fe7bcf24f4322f43644d4a4e34ba2
wjp
wjp at usecode.org
Sun Sep 11 22:33:09 CEST 2011
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
3715d6d444 CGE: Add EncryptedStream class, remove seed parameter from XCrypt()
08d87130aa CGE: Use EncryptedStream in Text: rewrite caching, remove some methods.
cdba3ac108 CGE: Remove noisy debug message
3b9b89a78b CGE: Talk now uses EncryptedStream. Clean up of EncryptedStream
f6f8b456e7 Merge branch 'cge'
Commit: 3715d6d444792fc93fe98df4f0274f0be846eed1
https://github.com/scummvm/scummvm/commit/3715d6d444792fc93fe98df4f0274f0be846eed1
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-09-11T05:15:32-07:00
Commit Message:
CGE: Add EncryptedStream class, remove seed parameter from XCrypt()
Changed paths:
engines/cge/fileio.cpp
engines/cge/fileio.h
engines/cge/general.cpp
engines/cge/general.h
diff --git a/engines/cge/fileio.cpp b/engines/cge/fileio.cpp
index 7624eac..87a1ffe 100644
--- a/engines/cge/fileio.cpp
+++ b/engines/cge/fileio.cpp
@@ -61,7 +61,7 @@ uint16 IoHand::read(void *buf, uint16 len) {
if (!bytesRead)
error("Read %s - %d bytes", _file->getName(), len);
if (_crypt)
- _seed = _crypt(buf, len, kCryptSeed);
+ _seed = _crypt(buf, len);
return bytesRead;
}
@@ -378,4 +378,27 @@ long VFile::seek(long pos) {
return (_bufMark = _begMark + pos);
}
+/*-----------------------------------------------------------------------
+ * EncryptedStream
+ *-----------------------------------------------------------------------*/
+EncryptedStream::EncryptedStream(const char *name) {
+ debugC(3, kCGEDebugFile, "EncryptedStream::EncryptedStream(%s)", name);
+
+ _error = false;
+ if (_dat->_error || _cat->_error)
+ error("Bad volume data");
+ BtKeypack *kp = _cat->find(name);
+ if (scumm_stricmp(kp->_key, name) != 0)
+ _error = true;
+
+ _dat->_file->seek(kp->_mark);
+ byte *dataBuffer = (byte *)malloc(kp->_size);
+ _dat->_file->read(dataBuffer, kp->_size);
+ XCrypt(dataBuffer, kp->_size);
+ _readStream = new Common::MemoryReadStream(dataBuffer, kp->_size, DisposeAfterUse::YES);
+}
+
+EncryptedStream::~EncryptedStream() {
+}
+
} // End of namespace CGE
diff --git a/engines/cge/fileio.h b/engines/cge/fileio.h
index 65f0b95..68b9a26 100644
--- a/engines/cge/fileio.h
+++ b/engines/cge/fileio.h
@@ -147,6 +147,14 @@ public:
long seek(long pos);
};
+class EncryptedStream {
+public:
+ bool _error;
+ EncryptedStream(const char *name);
+ ~EncryptedStream();
+ Common::SeekableReadStream *_readStream;
+};
+
extern CFile *_dat;
extern BtFile *_cat;
diff --git a/engines/cge/general.cpp b/engines/cge/general.cpp
index c93cc12..7db6181 100644
--- a/engines/cge/general.cpp
+++ b/engines/cge/general.cpp
@@ -31,13 +31,13 @@
namespace CGE {
-uint16 XCrypt(void *buf, uint16 siz, uint16 seed) {
+uint16 XCrypt(void *buf, uint16 siz) {
byte *b = static_cast<byte *>(buf);
for (uint16 i = 0; i < siz; i++)
- *b++ ^= seed;
+ *b++ ^= kCryptSeed;
- return seed;
+ return kCryptSeed;
}
char *mergeExt(char *buf, const char *name, const char *ext) {
diff --git a/engines/cge/general.h b/engines/cge/general.h
index 8f997c9..1793594 100644
--- a/engines/cge/general.h
+++ b/engines/cge/general.h
@@ -45,9 +45,9 @@ struct Dac {
uint8 _b;
};
-typedef uint16 Crypt(void *buf, uint16 siz, uint16 seed);
+typedef uint16 Crypt(void *buf, uint16 siz);
-uint16 XCrypt(void *buf, uint16 siz, uint16 seed);
+uint16 XCrypt(void *buf, uint16 siz);
int takeEnum(const char **tab, const char *text);
uint16 chkSum(void *m, uint16 n);
char *mergeExt(char *buf, const char *name, const char *ext);
Commit: 08d87130aa31606bfb62ef8a574e161a30866225
https://github.com/scummvm/scummvm/commit/08d87130aa31606bfb62ef8a574e161a30866225
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-09-11T05:19:46-07:00
Commit Message:
CGE: Use EncryptedStream in Text: rewrite caching, remove some methods.
Changed paths:
engines/cge/cge.cpp
engines/cge/cge_main.cpp
engines/cge/text.cpp
engines/cge/text.h
diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp
index 1b9fcf6..ade3071 100644
--- a/engines/cge/cge.cpp
+++ b/engines/cge/cge.cpp
@@ -91,7 +91,7 @@ void CGEEngine::init() {
Cluster::init(this);
// Initialise engine objects
- _text = new Text(this, "CGE", 128);
+ _text = new Text(this, "CGE");
_vga = new Vga();
_sys = new System(this);
_pocLight = new PocLight(this);
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index b9033a8..d3c8884 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -623,7 +623,6 @@ void CGEEngine::caveUp() {
showBak(BakRef);
loadMapping();
- _text->preload(BakRef, BakRef + 1000);
Sprite *spr = _vga->_spareQ->first();
while (spr) {
Sprite *n = spr->_next;
@@ -689,8 +688,6 @@ void CGEEngine::caveDown() {
}
spr = n;
}
-
- _text->clear(1000);
}
void CGEEngine::xCave() {
@@ -1305,8 +1302,6 @@ void CGEEngine::runGame() {
if (_eventManager->_quitFlag)
return;
- _text->clear();
- _text->preload(100, 1000);
loadHeroXY();
_cavLight->_flags._tran = true;
diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp
index 25af8ec..7e574a0 100644
--- a/engines/cge/text.cpp
+++ b/engines/cge/text.cpp
@@ -31,22 +31,26 @@
#include "cge/game.h"
#include "cge/snail.h"
#include "cge/cge_main.h"
+#include "common/str.h"
namespace CGE {
Text *_text;
Talk *_talk = NULL;
-Text::Text(CGEEngine *vm, const char *fname, int size) : _vm(vm) {
- _cache = new Handler[size];
+Text::Text(CGEEngine *vm, const char *fname) : _vm(vm) {
mergeExt(_fileName, fname, kSayExt);
if (!_cat->exist(_fileName))
error("No talk (%s)\n", _fileName);
+ int16 txtCount = count() + 1;
+ warning("Number of texts: %d", txtCount);
- for (_size = 0; _size < size; _size++) {
+ _cache = new Handler[txtCount];
+ for (_size = 0; _size < txtCount; _size++) {
_cache[_size]._ref = 0;
_cache[_size]._text = NULL;
}
+ load();
}
Text::~Text() {
@@ -54,125 +58,81 @@ Text::~Text() {
delete[] _cache;
}
-void Text::clear(int from, int upto) {
- for (Handler *p = _cache, *q = p + _size; p < q; p++) {
- if (p->_ref && p->_ref >= from && p->_ref < upto) {
- p->_ref = 0;
- delete[] p->_text;
- p->_text = NULL;
- }
- }
-}
-
-int Text::find(int ref) {
- int i = 0;
- for (Handler *p = _cache, *q = p + _size; p < q; p++) {
- if (p->_ref == ref)
- break;
- else
- i++;
- }
- return i;
-}
-
-
-void Text::preload(int from, int upto) {
- VFile tf = _fileName;
+int16 Text::count() {
+ EncryptedStream tf = _fileName;
if (tf._error)
- return;
-
- Handler *CacheLim = _cache + _size;
- char line[kLineMax + 1];
- int n;
+ return NULL;
- while ((n = tf.read((uint8 *)line)) != 0) {
- if (line[n - 1] == '\n')
- line[--n] = '\0';
+ Common::String line;
+ char tmpStr[kLineMax + 1];
+ int n, count = 0;
+ for (line = tf._readStream->readLine(); !tf._readStream->eos(); line = tf._readStream->readLine()) {
+ n = line.size();
char *s;
- if ((s = strtok(line, " =,;/\t\n")) == NULL)
+
+ strcpy(tmpStr, line.c_str());
+ if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL)
continue;
if (!isdigit(*s))
continue;
- int ref = atoi(s);
- if (ref && ref >= from && ref < upto) {
- Handler *p = &_cache[find(ref)];
-
- if (p < CacheLim) {
- delete[] p->_text;
- p->_text = NULL;
- } else
- p = &_cache[find(0)];
-
- if (p >= CacheLim)
- break;
-
- s += strlen(s);
- if (s < line + n)
- ++s;
- if ((p->_text = new char[strlen(s) + 1]) == NULL)
- break;
+ count++;
+ }
+ return count;
+}
- p->_ref = ref;
- strcpy(p->_text, s);
+void Text::clear() {
+ for (Handler *p = _cache, *q = p + _size; p < q; p++) {
+ if (p->_ref) {
+ p->_ref = 0;
+ delete[] p->_text;
+ p->_text = NULL;
}
}
}
+void Text::load() {
+ EncryptedStream tf = _fileName;
+ assert(!tf._error);
-char *Text::load(int idx, int ref) {
- VFile tf = _fileName;
- if (tf._error)
- return NULL;
-
- char line[kLineMax + 1];
- int n;
+ Common::String line;
+ char tmpStr[kLineMax + 1];
+ int idx;
- while ((n = tf.read((uint8 *)line)) != 0) {
+ for (idx = 0, line = tf._readStream->readLine(); !tf._readStream->eos(); line = tf._readStream->readLine()) {
+ int n = line.size();
char *s;
- if (line[n - 1] == '\n')
- line[-- n] = '\0';
- if ((s = strtok(line, " =,;/\t\n")) == NULL)
+ strcpy(tmpStr, line.c_str());
+ if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL)
continue;
if (!isdigit(*s))
continue;
int r = atoi(s);
- if (r < ref)
- continue;
- if (r > ref)
- break;
- // (r == ref)
s += strlen(s);
- if (s < line + n)
+ if (s < tmpStr + n)
++s;
- Handler *p = &_cache[idx];
- p->_ref = ref;
-
- if ((p->_text = new char[strlen(s) + 1]) == NULL)
- return NULL;
- return strcpy(p->_text, s);
+ _cache[idx]._ref = r;
+ _cache[idx]._text = new char[strlen(s) + 1];
+ strcpy(_cache[idx]._text, s);
+ idx++;
}
- return NULL;
}
char *Text::getText(int ref) {
int i;
- if ((i = find(ref)) < _size)
+ for (i = 0; (i < _size) && (_cache[i]._ref != ref); i++)
+ ;
+
+ if (i < _size)
return _cache[i]._text;
- if ((i = find(0)) >= _size) {
- clear(kSysTextMax); // clear non-system
- if ((i = find(0)) >= _size) {
- clear(); // clear all
- i = 0;
- }
- }
- return load(i, ref);
+ warning("getText: Unable to find ref %d", ref);
+ return NULL;
}
void Text::say(const char *text, Sprite *spr) {
diff --git a/engines/cge/text.h b/engines/cge/text.h
index 30bb77f..668f307 100644
--- a/engines/cge/text.h
+++ b/engines/cge/text.h
@@ -48,13 +48,12 @@ class Text {
} *_cache;
int _size;
char _fileName[kPathMax];
- char *load(int idx, int ref);
- int find(int ref);
+ void load();
+ int16 count();
public:
- Text(CGEEngine *vm, const char *fname, int size);
+ Text(CGEEngine *vm, const char *fname);
~Text();
- void clear(int from = 1, int upto = 0x7FFF);
- void preload(int from = 1, int upto = 0x7FFF);
+ void clear();
char *getText(int ref);
void say(const char *text, Sprite *spr);
void sayTime(Sprite *spr);
Commit: cdba3ac108940e141901f021da890e2ddbda70f0
https://github.com/scummvm/scummvm/commit/cdba3ac108940e141901f021da890e2ddbda70f0
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-09-11T05:21:03-07:00
Commit Message:
CGE: Remove noisy debug message
Changed paths:
engines/cge/talk.cpp
diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp
index 2d9c17c..609a472 100644
--- a/engines/cge/talk.cpp
+++ b/engines/cge/talk.cpp
@@ -61,7 +61,6 @@ void Font::load() {
uint16 p = 0;
for (uint16 i = 0; i < kPosSize; i++) {
_pos[i] = p;
- warning("Fonts 0x%X 0x%X", i, p);
p += _wid[i];
}
f.read(_map, p);
Commit: 3b9b89a78bf65db18bdc6d0c3a1268c892d3db2c
https://github.com/scummvm/scummvm/commit/3b9b89a78bf65db18bdc6d0c3a1268c892d3db2c
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-09-11T06:07:56-07:00
Commit Message:
CGE: Talk now uses EncryptedStream. Clean up of EncryptedStream
Changed paths:
engines/cge/fileio.cpp
engines/cge/fileio.h
engines/cge/talk.cpp
engines/cge/talk.h
engines/cge/text.cpp
diff --git a/engines/cge/fileio.cpp b/engines/cge/fileio.cpp
index 87a1ffe..34c7c65 100644
--- a/engines/cge/fileio.cpp
+++ b/engines/cge/fileio.cpp
@@ -398,6 +398,22 @@ EncryptedStream::EncryptedStream(const char *name) {
_readStream = new Common::MemoryReadStream(dataBuffer, kp->_size, DisposeAfterUse::YES);
}
+uint32 EncryptedStream::read(void *dataPtr, uint32 dataSize) {
+ return _readStream->read(dataPtr, dataSize);
+}
+
+bool EncryptedStream::err() {
+ return (_error & _readStream->err());
+}
+
+bool EncryptedStream::eos() {
+ return _readStream->eos();
+}
+
+Common::String EncryptedStream::readLine() {
+ return _readStream->readLine();
+}
+
EncryptedStream::~EncryptedStream() {
}
diff --git a/engines/cge/fileio.h b/engines/cge/fileio.h
index 68b9a26..1f0756a 100644
--- a/engines/cge/fileio.h
+++ b/engines/cge/fileio.h
@@ -148,11 +148,16 @@ public:
};
class EncryptedStream {
-public:
+private:
+ Common::SeekableReadStream *_readStream;
bool _error;
+public:
EncryptedStream(const char *name);
~EncryptedStream();
- Common::SeekableReadStream *_readStream;
+ bool err();
+ bool eos();
+ uint32 read(void *dataPtr, uint32 dataSize);
+ Common::String readLine();
};
extern CFile *_dat;
diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp
index 609a472..8fd425d 100644
--- a/engines/cge/talk.cpp
+++ b/engines/cge/talk.cpp
@@ -36,9 +36,9 @@ namespace CGE {
Font::Font(const char *name) {
_map = (uint8 *)malloc(kMapSize);
_pos = (uint16 *)malloc(kPosSize * sizeof(uint16));
- _wid = (uint8 *)malloc(kWidSize);
+ _widthArr = (uint8 *)malloc(kWidSize);
- assert((_map != NULL) && (_pos != NULL) && (_wid != NULL));
+ assert((_map != NULL) && (_pos != NULL) && (_widthArr != NULL));
mergeExt(_path, name, kFontExt);
load();
}
@@ -46,22 +46,20 @@ Font::Font(const char *name) {
Font::~Font() {
free(_map);
free(_pos);
- free(_wid);
+ free(_widthArr);
}
void Font::load() {
- VFile f(_path);
- if (f._error)
- return;
+ EncryptedStream f = _path;
+ assert(!f.err());
- f.read(_wid, kWidSize);
- if (f._error)
- return;
+ f.read(_widthArr, kWidSize);
+ assert(!f.err());
uint16 p = 0;
for (uint16 i = 0; i < kPosSize; i++) {
_pos[i] = p;
- p += _wid[i];
+ p += _widthArr[i];
}
f.read(_map, p);
}
@@ -71,7 +69,7 @@ uint16 Font::width(const char *text) {
if (!text)
return 0;
while (*text)
- w += _wid[(unsigned char)*(text++)];
+ w += _widthArr[(unsigned char)*(text++)];
return w;
}
@@ -116,7 +114,7 @@ void Talk::update(const char *text) {
mw = k;
k = 2 * hmarg;
} else
- k += _font->_wid[(unsigned char)*p];
+ k += _font->_widthArr[(unsigned char)*p];
}
if (k > mw)
mw = k;
@@ -132,7 +130,7 @@ void Talk::update(const char *text) {
if (*text == '|' || *text == '\n') {
m = _ts[0]->_m + (ln += kFontHigh + kTextLineSpace) * mw + hmarg;
} else {
- int cw = _font->_wid[(unsigned char)*text];
+ int cw = _font->_widthArr[(unsigned char)*text];
uint8 *f = _font->_map + _font->_pos[(unsigned char)*text];
for (int i = 0; i < cw; i++) {
uint8 *pp = m;
@@ -223,7 +221,7 @@ void Talk::putLine(int line, const char *text) {
uint8 *q = v + size;
while (*text) {
- uint16 cw = _font->_wid[(unsigned char)*text], i;
+ uint16 cw = _font->_widthArr[(unsigned char)*text], i;
uint8 *fp = _font->_map + _font->_pos[(unsigned char)*text];
for (i = 0; i < cw; i++) {
@@ -280,7 +278,7 @@ void InfoLine::update(const char *text) {
uint8 *p = v + 2, * q = p + size;
while (*text) {
- uint16 cw = _font->_wid[(unsigned char)*text];
+ uint16 cw = _font->_widthArr[(unsigned char)*text];
uint8 *fp = _font->_map + _font->_pos[(unsigned char)*text];
for (uint16 i = 0; i < cw; i++) {
diff --git a/engines/cge/talk.h b/engines/cge/talk.h
index 6b06e80..23ef9c9 100644
--- a/engines/cge/talk.h
+++ b/engines/cge/talk.h
@@ -52,7 +52,7 @@ class Font {
char _path[kPathMax];
void load();
public:
- uint8 *_wid;
+ uint8 *_widthArr;
uint16 *_pos;
uint8 *_map;
Font(const char *name);
diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp
index 7e574a0..71bb411 100644
--- a/engines/cge/text.cpp
+++ b/engines/cge/text.cpp
@@ -60,14 +60,14 @@ Text::~Text() {
int16 Text::count() {
EncryptedStream tf = _fileName;
- if (tf._error)
+ if (tf.err())
return NULL;
Common::String line;
char tmpStr[kLineMax + 1];
int n, count = 0;
- for (line = tf._readStream->readLine(); !tf._readStream->eos(); line = tf._readStream->readLine()) {
+ for (line = tf.readLine(); !tf.eos(); line = tf.readLine()) {
n = line.size();
char *s;
@@ -94,13 +94,13 @@ void Text::clear() {
void Text::load() {
EncryptedStream tf = _fileName;
- assert(!tf._error);
+ assert(!tf.err());
Common::String line;
char tmpStr[kLineMax + 1];
int idx;
- for (idx = 0, line = tf._readStream->readLine(); !tf._readStream->eos(); line = tf._readStream->readLine()) {
+ for (idx = 0, line = tf.readLine(); !tf.eos(); line = tf.readLine()) {
int n = line.size();
char *s;
Commit: f6f8b456e70fe7bcf24f4322f43644d4a4e34ba2
https://github.com/scummvm/scummvm/commit/f6f8b456e70fe7bcf24f4322f43644d4a4e34ba2
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2011-09-11T12:31:55-07:00
Commit Message:
Merge branch 'cge'
This adds the CGE engine for the game Soltys.
It is based on pull request https://github.com/scummvm/scummvm/pull/81 .
Changed paths:
A engines/cge/bitmap.cpp
A engines/cge/bitmap.h
A engines/cge/cge.cpp
A engines/cge/cge.h
A engines/cge/cge_main.cpp
A engines/cge/cge_main.h
A engines/cge/console.cpp
A engines/cge/console.h
A engines/cge/detection.cpp
A engines/cge/events.cpp
A engines/cge/events.h
A engines/cge/fileio.cpp
A engines/cge/fileio.h
A engines/cge/game.cpp
A engines/cge/game.h
A engines/cge/general.cpp
A engines/cge/general.h
A engines/cge/module.mk
A engines/cge/snail.cpp
A engines/cge/snail.h
A engines/cge/snddrv.h
A engines/cge/sound.cpp
A engines/cge/sound.h
A engines/cge/talk.cpp
A engines/cge/talk.h
A engines/cge/text.cpp
A engines/cge/text.h
A engines/cge/vga13h.cpp
A engines/cge/vga13h.h
A engines/cge/vmenu.cpp
A engines/cge/vmenu.h
A engines/cge/walk.cpp
A engines/cge/walk.h
base/plugins.cpp
configure
engines/engines.mk
More information about the Scummvm-git-logs
mailing list