[Scummvm-git-logs] scummvm master -> 62f62b6b620051ec8e9d512175a15cc335e9f3a7
SupSuper
supsuper at gmail.com
Mon May 31 05:40:58 UTC 2021
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5daeab2e76 COMMON: Add floating-point functions to ReadStreamEndian
49c4c26b44 TRECISION: Experimental support for Nightlong Amiga
229d9415a0 TRECISION: Amiga files are big-endian
c8be95585c TRECISION: Amiga uses raw audio format
48b9f54bfc COMMON: Add support for fixed-size strings in ReadStream::readString
62f62b6b62 TRECISION: Add endianness to FastFile
Commit: 5daeab2e763a357f19837e27773c7df10e22ed62
https://github.com/scummvm/scummvm/commit/5daeab2e763a357f19837e27773c7df10e22ed62
Author: SupSuper (supsuper at gmail.com)
Date: 2021-05-31T06:40:03+01:00
Commit Message:
COMMON: Add floating-point functions to ReadStreamEndian
Changed paths:
common/stream.h
diff --git a/common/stream.h b/common/stream.h
index 8b92a94a5a..082ec3d6b8 100644
--- a/common/stream.h
+++ b/common/stream.h
@@ -834,6 +834,32 @@ public:
FORCEINLINE int64 readSint64() {
return (int64)readUint64();
}
+
+ /**
+ * Read a 32-bit floating point value using the stream endianness
+ * and return it in native endianness.
+ */
+ FORCEINLINE float readFloat() {
+ uint32 n = readUint32();
+ float f;
+
+ memcpy(&f, &n, 4);
+
+ return f;
+ }
+
+ /**
+ * Read a 64-bit floating point value using the stream endianness
+ * and return it in native endianness.
+ */
+ FORCEINLINE double readDouble() {
+ uint64 n = readUint64();
+ double d;
+
+ memcpy(&d, &n, 8);
+
+ return d;
+ }
};
/**
Commit: 49c4c26b4437360f58e903e3c72ac9f1fad392ef
https://github.com/scummvm/scummvm/commit/49c4c26b4437360f58e903e3c72ac9f1fad392ef
Author: SupSuper (supsuper at gmail.com)
Date: 2021-05-31T06:40:04+01:00
Commit Message:
TRECISION: Experimental support for Nightlong Amiga
Changed paths:
engines/trecision/detection.cpp
diff --git a/engines/trecision/detection.cpp b/engines/trecision/detection.cpp
index 6e72cebfd3..90395cb1a3 100644
--- a/engines/trecision/detection.cpp
+++ b/engines/trecision/detection.cpp
@@ -120,6 +120,51 @@ static const ADGameDescription gameDescriptions[] = {
ADGF_DEMO,
GUIO0()
},
+ {
+ "nl",
+ 0,
+ AD_NL_ENTRY("2bfc3f5cc1ee5c7e80058db853296416", 436807),
+ Common::EN_ANY,
+ Common::kPlatformAmiga,
+ ADGF_UNSTABLE,
+ GUIO0()
+ },
+ {
+ "nl",
+ 0,
+ AD_NL_ENTRY("2bfc3f5cc1ee5c7e80058db853296416", 457508),
+ Common::DE_DEU,
+ Common::kPlatformAmiga,
+ ADGF_UNSTABLE,
+ GUIO0()
+ },
+ {
+ "nl",
+ 0,
+ AD_NL_ENTRY("2bfc3f5cc1ee5c7e80058db853296416", 436842),
+ Common::ES_ESP,
+ Common::kPlatformAmiga,
+ ADGF_UNSTABLE,
+ GUIO0()
+ },
+ {
+ "nl",
+ 0,
+ AD_NL_ENTRY("2bfc3f5cc1ee5c7e80058db853296416", 456354),
+ Common::FR_FRA,
+ Common::kPlatformAmiga,
+ ADGF_UNSTABLE,
+ GUIO0()
+ },
+ {
+ "nl",
+ 0,
+ AD_NL_ENTRY("2bfc3f5cc1ee5c7e80058db853296416", 446779),
+ Common::IT_ITA,
+ Common::kPlatformAmiga,
+ ADGF_UNSTABLE,
+ GUIO0()
+ },
AD_TABLE_END_MARKER
};
Commit: 229d9415a0a8b5cc12ef3e0a3bb8728efaa5e064
https://github.com/scummvm/scummvm/commit/229d9415a0a8b5cc12ef3e0a3bb8728efaa5e064
Author: SupSuper (supsuper at gmail.com)
Date: 2021-05-31T06:40:04+01:00
Commit Message:
TRECISION: Amiga files are big-endian
Changed paths:
engines/trecision/3d.cpp
engines/trecision/3d.h
engines/trecision/actor.cpp
engines/trecision/actor.h
engines/trecision/dialog.cpp
engines/trecision/dialog.h
engines/trecision/resource.cpp
engines/trecision/sound.cpp
engines/trecision/sound.h
engines/trecision/struct.cpp
engines/trecision/struct.h
engines/trecision/trecision.cpp
engines/trecision/trecision.h
engines/trecision/video.cpp
engines/trecision/video.h
diff --git a/engines/trecision/3d.cpp b/engines/trecision/3d.cpp
index 999d908c5f..f05f930fa0 100644
--- a/engines/trecision/3d.cpp
+++ b/engines/trecision/3d.cpp
@@ -2073,19 +2073,19 @@ void PathFinding3D::initSortPan() {
}
}
-void PathFinding3D::read3D(Common::SeekableReadStream *ff) {
+void PathFinding3D::read3D(Common::SeekableReadStreamEndian *ff) {
// read panels
- _panelNum = ff->readSint32LE();
+ _panelNum = ff->readSint32();
if (_panelNum > MAXPANELSINROOM)
error("read3D(): Too many panels");
for (int i = 0; i < _panelNum; ++i) {
- _panel[i]._x1 = ff->readFloatLE();
- _panel[i]._z1 = ff->readFloatLE();
- _panel[i]._x2 = ff->readFloatLE();
- _panel[i]._z2 = ff->readFloatLE();
- _panel[i]._h = ff->readFloatLE();
- _panel[i]._flags = ff->readUint32LE();
+ _panel[i]._x1 = ff->readFloat();
+ _panel[i]._z1 = ff->readFloat();
+ _panel[i]._x2 = ff->readFloat();
+ _panel[i]._z2 = ff->readFloat();
+ _panel[i]._h = ff->readFloat();
+ _panel[i]._flags = ff->readUint32();
// Note : Despite the panels are stored in an int16 with a MAXPANELSINROOM set to 400,
// _panelNum is stored in a int32 and nearPanel1 and 2 were stored in an int8
diff --git a/engines/trecision/3d.h b/engines/trecision/3d.h
index ff6b264f07..e708a8e6fa 100644
--- a/engines/trecision/3d.h
+++ b/engines/trecision/3d.h
@@ -196,7 +196,7 @@ public:
void goToPosition(int num);
int nextStep();
void initSortPan();
- void read3D(Common::SeekableReadStream *ff);
+ void read3D(Common::SeekableReadStreamEndian *ff);
void reset(uint16 idx, float px, float pz, float theta);
void whereIs(int px, int py);
void actorOrder();
diff --git a/engines/trecision/actor.cpp b/engines/trecision/actor.cpp
index 76525a00ed..c13ef28612 100644
--- a/engines/trecision/actor.cpp
+++ b/engines/trecision/actor.cpp
@@ -309,50 +309,50 @@ void Actor::microproseHeadFix(uint32 actionNum) {
}
void Actor::readModel(const char *filename) {
- Common::SeekableReadStream *ff = _vm->_dataFile.createReadStreamForMember(filename);
+ Common::SeekableReadStreamEndian *ff = _vm->readEndian(_vm->_dataFile.createReadStreamForMember(filename));
if (ff == nullptr)
error("readModel - Error opening file %s", filename);
- uint32 actionNum = ff->readUint32LE();
- _vertexNum = ff->readUint32LE();
+ uint32 actionNum = ff->readUint32();
+ _vertexNum = ff->readUint32();
_characterArea = new SVertex[_vertexNum * actionNum];
for (uint i = 0; i < _vertexNum * actionNum; ++i) {
- _characterArea[i]._x = ff->readFloatLE();
- _characterArea[i]._y = ff->readFloatLE();
- _characterArea[i]._z = ff->readFloatLE();
- _characterArea[i]._nx = ff->readFloatLE();
- _characterArea[i]._ny = ff->readFloatLE();
- _characterArea[i]._nz = ff->readFloatLE();
+ _characterArea[i]._x = ff->readFloat();
+ _characterArea[i]._y = ff->readFloat();
+ _characterArea[i]._z = ff->readFloat();
+ _characterArea[i]._nx = ff->readFloat();
+ _characterArea[i]._ny = ff->readFloat();
+ _characterArea[i]._nz = ff->readFloat();
}
_vertex = _characterArea;
- _faceNum = ff->readUint32LE();
+ _faceNum = ff->readUint32();
delete ff;
- ff = _vm->_dataFile.createReadStreamForMember("mat.tex");
+ ff = _vm->readEndian(_vm->_dataFile.createReadStreamForMember("mat.tex"));
if (ff == nullptr)
error("readModel - Error opening file mat.tex");
for (uint16 i = 0; i < 256; ++i) {
for (uint16 j = 0; j < 91; ++j)
- _textureMat[i][j] = ff->readUint16LE();
+ _textureMat[i][j] = ff->readUint16();
}
_vm->_graphicsMgr->updatePixelFormat((uint16 *)_textureMat, 91 * 256);
for (uint16 i = 0; i < MAXFACE; ++i) {
for (uint16 j = 0; j < 3; ++j) {
- _textureCoord[i][j][0] = ff->readSint16LE();
- _textureCoord[i][j][1] = ff->readSint16LE();
+ _textureCoord[i][j][0] = ff->readSint16();
+ _textureCoord[i][j][1] = ff->readSint16();
}
}
_face = new SFace[_faceNum];
for (uint i = 0; i < _faceNum; ++i) {
- _face[i]._a = ff->readUint16LE();
- _face[i]._b = ff->readUint16LE();
- _face[i]._c = ff->readUint16LE();
- _face[i]._mat = ff->readUint16LE();
+ _face[i]._a = ff->readUint16();
+ _face[i]._b = ff->readUint16();
+ _face[i]._c = ff->readUint16();
+ _face[i]._mat = ff->readUint16();
}
delete ff;
@@ -444,34 +444,34 @@ void Actor::actorStop() {
_vm->_pathFind->_lastStep = 0;
}
-void Actor::read3D(Common::SeekableReadStream *ff) {
+void Actor::read3D(Common::SeekableReadStreamEndian *ff) {
// read rooms and lights
SCamera *cam = _camera;
- cam->_ex = ff->readFloatLE();
- cam->_ey = ff->readFloatLE();
- cam->_ez = ff->readFloatLE();
+ cam->_ex = ff->readFloat();
+ cam->_ey = ff->readFloat();
+ cam->_ez = ff->readFloat();
for (int i = 0; i < 3; ++i)
- cam->_e1[i] = ff->readFloatLE();
+ cam->_e1[i] = ff->readFloat();
for (int i = 0; i < 3; ++i)
- cam->_e2[i] = ff->readFloatLE();
+ cam->_e2[i] = ff->readFloat();
for (int i = 0; i < 3; ++i)
- cam->_e3[i] = ff->readFloatLE();
- cam->_fovX = ff->readFloatLE();
- cam->_fovY = ff->readFloatLE();
+ cam->_e3[i] = ff->readFloat();
+ cam->_fovX = ff->readFloat();
+ cam->_fovY = ff->readFloat();
- _lightNum = ff->readUint32LE();
+ _lightNum = ff->readUint32();
if (_lightNum > MAXLIGHT)
error("read3D(): Too many lights");
for (uint32 i = 0; i < _lightNum; ++i) {
- _light[i]._x = ff->readFloatLE();
- _light[i]._y = ff->readFloatLE();
- _light[i]._z = ff->readFloatLE();
- _light[i]._dx = ff->readFloatLE();
- _light[i]._dy = ff->readFloatLE();
- _light[i]._dz = ff->readFloatLE();
- _light[i]._inr = ff->readFloatLE();
- _light[i]._outr = ff->readFloatLE();
+ _light[i]._x = ff->readFloat();
+ _light[i]._y = ff->readFloat();
+ _light[i]._z = ff->readFloat();
+ _light[i]._dx = ff->readFloat();
+ _light[i]._dy = ff->readFloat();
+ _light[i]._dz = ff->readFloat();
+ _light[i]._inr = ff->readFloat();
+ _light[i]._outr = ff->readFloat();
_light[i]._hotspot = ff->readByte();
_light[i]._fallOff = ff->readByte();
_light[i]._inten = ff->readSByte();
diff --git a/engines/trecision/actor.h b/engines/trecision/actor.h
index b93d164318..6b5d2ebfbb 100644
--- a/engines/trecision/actor.h
+++ b/engines/trecision/actor.h
@@ -76,7 +76,7 @@ public:
void syncGameStream(Common::Serializer &ser);
void actorDoAction(int action);
void actorStop();
- void read3D(Common::SeekableReadStream *ff);
+ void read3D(Common::SeekableReadStreamEndian *ff);
float frameCenter(SVertex *v);
void updateStepSound();
};
diff --git a/engines/trecision/dialog.cpp b/engines/trecision/dialog.cpp
index b6f92dbd63..164f320dc0 100644
--- a/engines/trecision/dialog.cpp
+++ b/engines/trecision/dialog.cpp
@@ -698,50 +698,50 @@ void DialogManager::syncGameStream(Common::Serializer &ser) {
}
}
-void DialogManager::loadData(Common::File *file) {
+void DialogManager::loadData(Common::SeekableReadStreamEndian *stream) {
for (int i = 0; i < MAXDIALOG; ++i) {
Dialog *dialog = &_dialog[i];
- dialog->_flag = file->readUint16LE();
- dialog->_interlocutor = file->readUint16LE();
+ dialog->_flag = stream->readUint16();
+ dialog->_interlocutor = stream->readUint16();
- file->read(&dialog->_startAnim, 14);
+ stream->read(&dialog->_startAnim, 14);
- dialog->_startLen = file->readUint16LE();
- dialog->_firstChoice = file->readUint16LE();
- dialog->_choiceNumb = file->readUint16LE();
+ dialog->_startLen = stream->readUint16();
+ dialog->_firstChoice = stream->readUint16();
+ dialog->_choiceNumb = stream->readUint16();
for (int j = 0; j < MAXNEWSMKPAL; ++j)
- dialog->_newPal[j] = file->readUint16LE();
+ dialog->_newPal[j] = stream->readUint16();
}
for (int i = 0; i < MAXCHOICE; ++i) {
DialogChoice *choice = &_choice[i];
- choice->_flag = file->readUint16LE();
- choice->_sentenceIndex = file->readUint16LE();
- choice->_firstSubTitle = file->readUint16LE();
- choice->_subTitleNumb = file->readUint16LE();
+ choice->_flag = stream->readUint16();
+ choice->_sentenceIndex = stream->readUint16();
+ choice->_firstSubTitle = stream->readUint16();
+ choice->_subTitleNumb = stream->readUint16();
for (int j = 0; j < MAXDISPCHOICES; ++j)
- choice->_on[j] = file->readUint16LE();
+ choice->_on[j] = stream->readUint16();
for (int j = 0; j < MAXDISPCHOICES; ++j)
- choice->_off[j] = file->readUint16LE();
+ choice->_off[j] = stream->readUint16();
- choice->_startFrame = file->readUint16LE();
- choice->_nextDialog = file->readUint16LE();
+ choice->_startFrame = stream->readUint16();
+ choice->_nextDialog = stream->readUint16();
}
for (int i = 0; i < MAXSUBTITLES; ++i) {
DialogSubTitle *subTitle = &_subTitles[i];
- subTitle->_sentence = file->readUint16LE();
- subTitle->_x = file->readUint16LE();
- subTitle->_y = file->readUint16LE();
- subTitle->_color = file->readUint16LE();
- subTitle->_startFrame = file->readUint16LE();
- subTitle->_length = file->readUint16LE();
+ subTitle->_sentence = stream->readUint16();
+ subTitle->_x = stream->readUint16();
+ subTitle->_y = stream->readUint16();
+ subTitle->_color = stream->readUint16();
+ subTitle->_startFrame = stream->readUint16();
+ subTitle->_length = stream->readUint16();
}
if (_vm->isDemo()) {
diff --git a/engines/trecision/dialog.h b/engines/trecision/dialog.h
index ca03bceff4..ba1bf03a7c 100644
--- a/engines/trecision/dialog.h
+++ b/engines/trecision/dialog.h
@@ -25,7 +25,7 @@
#include "common/scummsys.h"
#include "common/serializer.h"
-#include "common/file.h"
+#include "common/stream.h"
namespace Trecision {
class TrecisionEngine;
@@ -99,7 +99,7 @@ public:
uint16 getCurDialog() const { return _curDialog; }
uint16 getCurChoice() const { return _curChoice; }
void syncGameStream(Common::Serializer &ser);
- void loadData(Common::File *file);
+ void loadData(Common::SeekableReadStreamEndian *stream);
};
// end of class
diff --git a/engines/trecision/resource.cpp b/engines/trecision/resource.cpp
index e6749babda..043188b4f9 100644
--- a/engines/trecision/resource.cpp
+++ b/engines/trecision/resource.cpp
@@ -26,6 +26,7 @@
#include "common/savefile.h"
#include "common/str.h"
#include "common/translation.h"
+#include "common/substream.h"
#include "gui/saveload.h"
#include "trecision/trecision.h"
@@ -38,55 +39,63 @@
#include "trecision/video.h"
#include "trecision/sound.h"
-namespace Common {
-class File;
-}
-
namespace Trecision {
+Common::SeekableReadStreamEndian *TrecisionEngine::readEndian(Common::SeekableReadStream *stream, DisposeAfterUse::Flag dispose) {
+ return new Common::SeekableSubReadStreamEndian(
+ stream,
+ 0,
+ stream->size(),
+ _gameDescription->platform == Common::kPlatformAmiga,
+ dispose
+ );
+}
+
void TrecisionEngine::loadAll() {
Common::File dataNl;
+
if (!dataNl.open("DATA.NL"))
error("loadAll : Couldn't open DATA.NL");
+ Common::SeekableReadStreamEndian *data = readEndian(&dataNl, DisposeAfterUse::NO);
for (int i = 0; i < MAXROOMS; ++i)
- _room[i].loadRoom(&dataNl);
+ _room[i].loadRoom(data);
for (int i = 0; i < MAXOBJ; ++i)
- _obj[i].loadObj(&dataNl);
+ _obj[i].loadObj(data);
for (int i = 0; i < MAXINVENTORY; ++i)
- _inventoryObj[i].loadObj(&dataNl);
+ _inventoryObj[i].loadObj(data);
- _soundMgr->loadSamples(&dataNl);
+ _soundMgr->loadSamples(data);
for (int i = 0; i < MAXSCRIPTFRAME; ++i) {
- _scriptFrame[i]._class = dataNl.readByte();
- _scriptFrame[i]._event = dataNl.readByte();
- _scriptFrame[i]._u8Param = dataNl.readByte();
- dataNl.readByte(); // Padding
- _scriptFrame[i]._u16Param1 = dataNl.readUint16LE();
- _scriptFrame[i]._u16Param2 = dataNl.readUint16LE();
- _scriptFrame[i]._u32Param = dataNl.readUint16LE();
- _scriptFrame[i]._noWait = !(dataNl.readSint16LE() == 0);
+ _scriptFrame[i]._class = data->readByte();
+ _scriptFrame[i]._event = data->readByte();
+ _scriptFrame[i]._u8Param = data->readByte();
+ data->readByte(); // Padding
+ _scriptFrame[i]._u16Param1 = data->readUint16();
+ _scriptFrame[i]._u16Param2 = data->readUint16();
+ _scriptFrame[i]._u32Param = data->readUint16();
+ _scriptFrame[i]._noWait = !(data->readSint16() == 0);
}
for (int i = 0; i < MAXSCRIPT; ++i) {
- _scriptFirstFrame[i] = dataNl.readUint16LE();
- dataNl.readByte(); // unused field
- dataNl.readByte(); // Padding
+ _scriptFirstFrame[i] = data->readUint16();
+ data->readByte(); // unused field
+ data->readByte(); // Padding
}
- _animMgr->loadAnimTab(&dataNl);
- _dialogMgr->loadData(&dataNl);
+ _animMgr->loadAnimTab(data);
+ _dialogMgr->loadData(data);
- dataNl.skip(620); // actions (unused)
+ data->skip(620); // actions (unused)
- int numFileRef = dataNl.readSint32LE();
- dataNl.skip(numFileRef * (12 + 4)); // fileRef name + offset
+ int numFileRef = data->readSint32();
+ data->skip(numFileRef * (12 + 4)); // fileRef name + offset
_textArea = new char[MAXTEXTAREA];
- dataNl.read(_textArea, MAXTEXTAREA);
+ data->read(_textArea, MAXTEXTAREA);
_textPtr = _textArea;
@@ -99,6 +108,7 @@ void TrecisionEngine::loadAll() {
for (int a = 0; a < MAXSYSTEXT; a++)
_sysText[a] = getNextSentence();
+ delete data;
dataNl.close();
}
@@ -115,7 +125,7 @@ byte *TrecisionEngine::readData(const Common::String &fileName) {
}
void TrecisionEngine::read3D(const Common::String &filename) {
- Common::SeekableReadStream *ff = _dataFile.createReadStreamForMember(filename);
+ Common::SeekableReadStreamEndian *ff = readEndian(_dataFile.createReadStreamForMember(filename));
if (ff == nullptr)
error("read3D: Can't open 3D file %s", filename.c_str());
@@ -133,7 +143,7 @@ void TrecisionEngine::read3D(const Common::String &filename) {
_renderer->setClipping(0, TOP, MAXX, AREA + TOP);
}
-void TrecisionEngine::readObject(Common::SeekableReadStream *stream, uint16 objIndex, uint16 objectId) {
+void TrecisionEngine::readObject(Common::SeekableReadStreamEndian *stream, uint16 objIndex, uint16 objectId) {
SObject *obj = &_obj[objectId];
if (obj->isModeFull()) {
@@ -143,7 +153,7 @@ void TrecisionEngine::readObject(Common::SeekableReadStream *stream, uint16 objI
delete[] _objPointers[objIndex];
_objPointers[objIndex] = new uint16[size];
for (uint32 i = 0; i < size; ++i)
- _objPointers[objIndex][i] = stream->readUint16LE();
+ _objPointers[objIndex][i] = stream->readUint16();
_graphicsMgr->updatePixelFormat(_objPointers[objIndex], size);
}
@@ -151,15 +161,15 @@ void TrecisionEngine::readObject(Common::SeekableReadStream *stream, uint16 objI
if (obj->isModeMask()) {
obj->readRect(stream);
- uint32 size = stream->readUint32LE();
+ uint32 size = stream->readUint32();
delete[] _objPointers[objIndex];
_objPointers[objIndex] = new uint16[size];
for (uint32 i = 0; i < size; ++i)
- _objPointers[objIndex][i] = stream->readUint16LE();
+ _objPointers[objIndex][i] = stream->readUint16();
_graphicsMgr->updatePixelFormat(_objPointers[objIndex], size);
- size = stream->readUint32LE();
+ size = stream->readUint32();
delete[] _maskPointers[objIndex];
_maskPointers[objIndex] = new uint8[size];
for (uint32 i = 0; i < size; ++i)
@@ -169,7 +179,7 @@ void TrecisionEngine::readObject(Common::SeekableReadStream *stream, uint16 objI
refreshObject(objectId);
}
-void TrecisionEngine::readObj(Common::SeekableReadStream *stream) {
+void TrecisionEngine::readObj(Common::SeekableReadStreamEndian *stream) {
if (!_room[_curRoom]._object[0])
return;
@@ -192,7 +202,7 @@ void TrecisionEngine::readExtraObj2C() {
if (!_room[_curRoom]._object[32])
return;
- Common::SeekableReadStream *ff = _dataFile.createReadStreamForMember("2c2.bm");
+ Common::SeekableReadStreamEndian *ff = readEndian(_dataFile.createReadStreamForMember("2c2.bm"));
for (uint16 objIndex = PATCHOBJ_ROOM2C; objIndex < MAXOBJINROOM; objIndex++) {
const uint16 objectId = _room[_curRoom]._object[objIndex];
@@ -209,7 +219,7 @@ void TrecisionEngine::readExtraObj41D() {
if (!_room[_curRoom]._object[32])
return;
- Common::SeekableReadStream *ff = _dataFile.createReadStreamForMember("41d2.bm");
+ Common::SeekableReadStreamEndian *ff = readEndian(_dataFile.createReadStreamForMember("41d2.bm"));
for (uint16 objIndex = PATCHOBJ_ROOM41D; objIndex < MAXOBJINROOM; objIndex++) {
const uint16 objectId = _room[_curRoom]._object[objIndex];
if (!objectId)
diff --git a/engines/trecision/sound.cpp b/engines/trecision/sound.cpp
index a610f07197..f6a5c97fcb 100644
--- a/engines/trecision/sound.cpp
+++ b/engines/trecision/sound.cpp
@@ -266,13 +266,13 @@ void SoundManager::loadRoomSounds() {
}
}
-void SoundManager::loadSamples(Common::File *file) {
+void SoundManager::loadSamples(Common::SeekableReadStreamEndian *stream) {
for (int i = 0; i < NUMSAMPLES; ++i) {
for (int j = 0; j < 14; j++)
- _gSample[i]._name += file->readByte();
- _gSample[i]._volume = file->readByte();
- _gSample[i]._flag = file->readByte();
- _gSample[i]._panning = file->readSByte();
+ _gSample[i]._name += stream->readByte();
+ _gSample[i]._volume = stream->readByte();
+ _gSample[i]._flag = stream->readByte();
+ _gSample[i]._panning = stream->readSByte();
}
}
diff --git a/engines/trecision/sound.h b/engines/trecision/sound.h
index fc006c5911..fd6bdb9c28 100644
--- a/engines/trecision/sound.h
+++ b/engines/trecision/sound.h
@@ -24,7 +24,7 @@
#define TRECISION_SOUND_H
#include "trecision/fastfile.h"
-#include "common/file.h"
+#include "common/stream.h"
#include "audio/mixer.h"
#include "audio/audiostream.h"
@@ -80,7 +80,7 @@ public:
int32 talkStart(const Common::String &name);
void loadRoomSounds();
- void loadSamples(Common::File *file);
+ void loadSamples(Common::SeekableReadStreamEndian *stream);
};
diff --git a/engines/trecision/struct.cpp b/engines/trecision/struct.cpp
index d06acf054c..3f5a78d683 100644
--- a/engines/trecision/struct.cpp
+++ b/engines/trecision/struct.cpp
@@ -24,17 +24,17 @@
namespace Trecision {
-void SRoom::loadRoom(Common::File *file) {
- file->read(&_baseName, 4);
- _flag = file->readByte();
- file->readByte(); // Padding
- _bkgAnim = file->readUint16LE();
+void SRoom::loadRoom(Common::SeekableReadStreamEndian *stream) {
+ stream->read(&_baseName, 4);
+ _flag = stream->readByte();
+ stream->readByte(); // Padding
+ _bkgAnim = stream->readUint16();
for (int j = 0; j < MAXOBJINROOM; ++j)
- _object[j] = file->readUint16LE();
+ _object[j] = stream->readUint16();
for (int j = 0; j < MAXSOUNDSINROOM; ++j)
- _sounds[j] = file->readUint16LE();
+ _sounds[j] = stream->readUint16();
for (int j = 0; j < MAXACTIONINROOM; ++j)
- _actions[j] = file->readUint16LE();
+ _actions[j] = stream->readUint16();
}
void SRoom::syncGameStream(Common::Serializer &ser) {
@@ -47,11 +47,11 @@ void SRoom::syncGameStream(Common::Serializer &ser) {
/********************************************************************/
-void SObject::readRect(Common::SeekableReadStream *stream) {
- _rect.left = stream->readUint16LE();
- _rect.top = stream->readUint16LE();
- _rect.setWidth(stream->readUint16LE());
- _rect.setHeight(stream->readUint16LE());
+void SObject::readRect(Common::SeekableReadStreamEndian *stream) {
+ _rect.left = stream->readUint16();
+ _rect.top = stream->readUint16();
+ _rect.setWidth(stream->readUint16());
+ _rect.setHeight(stream->readUint16());
}
void SObject::syncGameStream(Common::Serializer &ser) {
@@ -71,31 +71,31 @@ void SObject::syncGameStream(Common::Serializer &ser) {
ser.syncAsSByte(_position);
}
-void SObject::loadObj(Common::File *file) {
- uint16 w = file->readUint16LE();
- uint16 h = file->readUint16LE();
- _rect.left = file->readUint16LE();
- _rect.top = file->readUint16LE();
+void SObject::loadObj(Common::SeekableReadStreamEndian *stream) {
+ uint16 w = stream->readUint16();
+ uint16 h = stream->readUint16();
+ _rect.left = stream->readUint16();
+ _rect.top = stream->readUint16();
_rect.setWidth(w);
_rect.setHeight(h);
- _lim.left = file->readUint16LE();
- _lim.top = file->readUint16LE();
- _lim.right = file->readUint16LE();
- _lim.bottom = file->readUint16LE();
-
- _position = file->readSByte();
- file->readByte(); // Padding
- _name = file->readUint16LE();
- _examine = file->readUint16LE();
- _action = file->readUint16LE();
- _goRoom = file->readByte();
- _nbox = file->readByte();
- _ninv = file->readByte();
- _mode = file->readByte();
- _flag = file->readByte();
- file->readByte(); // Padding
- _anim = file->readUint16LE();
+ _lim.left = stream->readUint16();
+ _lim.top = stream->readUint16();
+ _lim.right = stream->readUint16();
+ _lim.bottom = stream->readUint16();
+
+ _position = stream->readSByte();
+ stream->readByte(); // Padding
+ _name = stream->readUint16();
+ _examine = stream->readUint16();
+ _action = stream->readUint16();
+ _goRoom = stream->readByte();
+ _nbox = stream->readByte();
+ _ninv = stream->readByte();
+ _mode = stream->readByte();
+ _flag = stream->readByte();
+ stream->readByte(); // Padding
+ _anim = stream->readUint16();
}
/********************************************************************/
@@ -108,13 +108,13 @@ void SInvObject::syncGameStream(Common::Serializer &ser) {
ser.syncAsByte(_flag);
}
-void SInvObject::loadObj(Common::File *file) {
- _name = file->readUint16LE();
- _examine = file->readUint16LE();
- _action = file->readUint16LE();
- _flag = file->readByte();
- file->readByte(); // Padding
- _anim = file->readUint16LE();
+void SInvObject::loadObj(Common::SeekableReadStreamEndian *stream) {
+ _name = stream->readUint16();
+ _examine = stream->readUint16();
+ _action = stream->readUint16();
+ _flag = stream->readByte();
+ stream->readByte(); // Padding
+ _anim = stream->readUint16();
}
/********************************************************************/
diff --git a/engines/trecision/struct.h b/engines/trecision/struct.h
index 4265a7e70b..93c98b1d04 100644
--- a/engines/trecision/struct.h
+++ b/engines/trecision/struct.h
@@ -23,7 +23,7 @@
#ifndef TRECISION_STRUCT_H
#define TRECISION_STRUCT_H
-#include "common/file.h"
+#include "common/stream.h"
#include "common/rect.h"
#include "common/scummsys.h"
#include "common/serializer.h"
@@ -45,7 +45,7 @@ struct SRoom {
void setDone(bool on) { if (on) _flag |= kObjFlagDone; else _flag &= ~kObjFlagDone; }
void syncGameStream(Common::Serializer &ser);
- void loadRoom(Common::File *file);
+ void loadRoom(Common::SeekableReadStreamEndian *stream);
private:
uint8 _flag = 0; // Room visited or not, extra or not
@@ -63,7 +63,7 @@ struct SObject {
uint8 _ninv; // ptr inventory
uint16 _anim;
- void readRect(Common::SeekableReadStream *stream);
+ void readRect(Common::SeekableReadStreamEndian *stream);
void setFlagDone(bool on) { if (on) _flag |= kObjFlagDone; else _flag &= ~kObjFlagDone; }
void setFlagExamine(bool on) { if (on) _flag |= kObjFlagExamine; else _flag &= ~kObjFlagExamine; }
void setFlagExtra(bool on) { if (on) _flag |= kObjFlagExtra; else _flag &= ~kObjFlagExtra; }
@@ -94,7 +94,7 @@ struct SObject {
void setModeStatus(bool on) { if (on) _mode |= OBJMODE_OBJSTATUS; else _mode &= ~OBJMODE_OBJSTATUS; }
void syncGameStream(Common::Serializer &ser);
- void loadObj(Common::File *file);
+ void loadObj(Common::SeekableReadStreamEndian *stream);
private:
uint8 _flag = 0;
@@ -113,7 +113,7 @@ struct SInvObject {
bool isUseWith() { return _flag & kObjFlagUseWith; }
void syncGameStream(Common::Serializer &ser);
- void loadObj(Common::File *file);
+ void loadObj(Common::SeekableReadStreamEndian *stream);
private:
uint8 _flag = 0;
diff --git a/engines/trecision/trecision.cpp b/engines/trecision/trecision.cpp
index 3a5f2e0f62..9e8afac5e1 100644
--- a/engines/trecision/trecision.cpp
+++ b/engines/trecision/trecision.cpp
@@ -233,10 +233,6 @@ Common::Error TrecisionEngine::run() {
return Common::kNoError;
}
-bool TrecisionEngine::isDemo() const {
- return _gameDescription->flags & ADGF_DEMO;
-}
-
void TrecisionEngine::eventLoop() {
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
@@ -381,7 +377,7 @@ void TrecisionEngine::readLoc() {
_graphicsMgr->clearScreenBufferTop();
Common::String filename = Common::String::format("%s.cr", _room[_curRoom]._baseName);
- Common::SeekableReadStream *picFile = _dataFile.createReadStreamForCompressedMember(filename);
+ Common::SeekableReadStreamEndian *picFile = readEndian(_dataFile.createReadStreamForCompressedMember(filename));
SObject bgInfo;
bgInfo.readRect(picFile);
@@ -432,7 +428,7 @@ void TrecisionEngine::redrawRoom() {
}
Common::String filename = Common::String::format("%s.cr", _room[_curRoom]._baseName);
- Common::SeekableReadStream *picFile = _dataFile.createReadStreamForCompressedMember(filename);
+ Common::SeekableReadStreamEndian *picFile = readEndian(_dataFile.createReadStreamForCompressedMember(filename));
SObject bgInfo;
bgInfo.readRect(picFile);
diff --git a/engines/trecision/trecision.h b/engines/trecision/trecision.h
index c5fc1c5ff2..cec8a6f2da 100644
--- a/engines/trecision/trecision.h
+++ b/engines/trecision/trecision.h
@@ -27,6 +27,7 @@
#include "common/keyboard.h"
#include "common/str.h"
#include "common/serializer.h"
+#include "common/stream.h"
#include "engines/advancedDetector.h"
#include "engines/engine.h"
#include "graphics/surface.h"
@@ -134,8 +135,8 @@ class TrecisionEngine : public Engine {
bool canPlayerInteract();
// Objects
- void readObj(Common::SeekableReadStream *stream);
- void readObject(Common::SeekableReadStream *stream, uint16 objIndex, uint16 objectId);
+ void readObj(Common::SeekableReadStreamEndian *stream);
+ void readObject(Common::SeekableReadStreamEndian *stream, uint16 objIndex, uint16 objectId);
char *_textArea;
uint16 _curScriptFrame[10];
@@ -154,7 +155,7 @@ public:
// ScummVM
Common::Error run() override;
- bool isDemo() const;
+ bool isDemo() const { return _gameDescription->flags & ADGF_DEMO; }
bool hasFeature(EngineFeature f) const override;
bool canLoadGameStateCurrently() override { return canPlayerInteract() && _curRoom != kRoomIntro; }
bool canSaveGameStateCurrently() override { return canPlayerInteract() && _curRoom != kRoomIntro; }
@@ -163,6 +164,7 @@ public:
bool syncGameStream(Common::Serializer &ser);
// Data files
+ Common::SeekableReadStreamEndian *readEndian(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeParentStream = DisposeAfterUse::YES);
void read3D(const Common::String &c);
// Inventory
diff --git a/engines/trecision/video.cpp b/engines/trecision/video.cpp
index 55086b06c7..96ed763cc2 100644
--- a/engines/trecision/video.cpp
+++ b/engines/trecision/video.cpp
@@ -551,27 +551,27 @@ void AnimManager::syncGameStream(Common::Serializer &ser) {
}
}
-void AnimManager::loadAnimTab(Common::File *file) {
+void AnimManager::loadAnimTab(Common::SeekableReadStreamEndian *stream) {
for (uint16 i = 0; i < MAXANIM; ++i) {
- file->read(&_animTab[i]._name, 14);
+ stream->read(&_animTab[i]._name, 14);
- _animTab[i]._flag = file->readUint16LE();
+ _animTab[i]._flag = stream->readUint16();
for (uint8 j = 0; j < MAXCHILD; ++j) {
- _animTab[i]._lim[j].left = file->readUint16LE();
- _animTab[i]._lim[j].top = file->readUint16LE();
- _animTab[i]._lim[j].right = file->readUint16LE();
- _animTab[i]._lim[j].bottom = file->readUint16LE();
+ _animTab[i]._lim[j].left = stream->readUint16();
+ _animTab[i]._lim[j].top = stream->readUint16();
+ _animTab[i]._lim[j].right = stream->readUint16();
+ _animTab[i]._lim[j].bottom = stream->readUint16();
}
- _animTab[i]._nbox = file->readByte();
- file->readByte(); // Padding
+ _animTab[i]._nbox = stream->readByte();
+ stream->readByte(); // Padding
for (uint8 j = 0; j < MAXATFRAME; ++j) {
- _animTab[i]._atFrame[j]._type = file->readByte();
- _animTab[i]._atFrame[j]._child = file->readByte();
- _animTab[i]._atFrame[j]._numFrame = file->readUint16LE();
- _animTab[i]._atFrame[j]._index = file->readUint16LE();
+ _animTab[i]._atFrame[j]._type = stream->readByte();
+ _animTab[i]._atFrame[j]._child = stream->readByte();
+ _animTab[i]._atFrame[j]._numFrame = stream->readUint16();
+ _animTab[i]._atFrame[j]._index = stream->readUint16();
}
}
}
diff --git a/engines/trecision/video.h b/engines/trecision/video.h
index d414dc8044..4807fcfb7e 100644
--- a/engines/trecision/video.h
+++ b/engines/trecision/video.h
@@ -23,7 +23,7 @@
#ifndef TRECISION_VIDEO_H
#define TRECISION_VIDEO_H
-#include "common/file.h"
+#include "common/stream.h"
#include "common/serializer.h"
#include "video/smk_decoder.h"
@@ -110,7 +110,7 @@ public:
void stopAllSmkAnims();
void syncGameStream(Common::Serializer &ser);
- void loadAnimTab(Common::File *file);
+ void loadAnimTab(Common::SeekableReadStreamEndian *stream);
};
} // End of namespace Trecision
#endif
Commit: c8be95585cdf895a02201973ac8dde8b46d01a63
https://github.com/scummvm/scummvm/commit/c8be95585cdf895a02201973ac8dde8b46d01a63
Author: SupSuper (supsuper at gmail.com)
Date: 2021-05-31T06:40:05+01:00
Commit Message:
TRECISION: Amiga uses raw audio format
Changed paths:
engines/trecision/resource.cpp
engines/trecision/sound.cpp
engines/trecision/sound.h
engines/trecision/trecision.h
diff --git a/engines/trecision/resource.cpp b/engines/trecision/resource.cpp
index 043188b4f9..68cac589e9 100644
--- a/engines/trecision/resource.cpp
+++ b/engines/trecision/resource.cpp
@@ -42,13 +42,7 @@
namespace Trecision {
Common::SeekableReadStreamEndian *TrecisionEngine::readEndian(Common::SeekableReadStream *stream, DisposeAfterUse::Flag dispose) {
- return new Common::SeekableSubReadStreamEndian(
- stream,
- 0,
- stream->size(),
- _gameDescription->platform == Common::kPlatformAmiga,
- dispose
- );
+ return new Common::SeekableSubReadStreamEndian(stream, 0, stream->size(), isAmiga(), dispose);
}
void TrecisionEngine::loadAll() {
diff --git a/engines/trecision/sound.cpp b/engines/trecision/sound.cpp
index f6a5c97fcb..b95068e737 100644
--- a/engines/trecision/sound.cpp
+++ b/engines/trecision/sound.cpp
@@ -23,6 +23,7 @@
#include "audio/audiostream.h"
#include "audio/mixer.h"
#include "audio/decoders/wave.h"
+#include "audio/decoders/raw.h"
#include "common/scummsys.h"
#include "common/system.h"
@@ -46,6 +47,14 @@ SoundManager::~SoundManager() {
stopAll();
}
+Audio::SeekableAudioStream *SoundManager::loadWAV(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) {
+ if (_vm->isAmiga()) {
+ return Audio::makeRawStream(stream, 11025, 0, disposeAfterUse);
+ } else {
+ return Audio::makeWAVStream(stream, disposeAfterUse);
+ }
+}
+
void SoundManager::play(int soundId) {
SRoom *curRoom = &_vm->_room[_vm->_curRoom];
@@ -77,9 +86,9 @@ void SoundManager::play(int soundId) {
Audio::AudioStream *stream = nullptr;
if (_gSample[soundId]._flag & kSoundFlagSoundLoop)
- stream = Audio::makeLoopingAudioStream(Audio::makeWAVStream(memStream, DisposeAfterUse::YES), 0);
+ stream = Audio::makeLoopingAudioStream(loadWAV(memStream), 0);
else
- stream = Audio::makeWAVStream(memStream, DisposeAfterUse::YES);
+ stream = loadWAV(memStream);
g_system->getMixer()->playStream(
type,
@@ -181,7 +190,7 @@ void SoundManager::soundStep(int midx, int midz, int act, int frame) {
if (stepRight && (_gSample[soundId]._flag & kSoundFlagStepRight)) {
if (!_stepRightStream) {
Common::SeekableReadStream *soundFileStream = _vm->_dataFile.createReadStreamForMember(_gSample[soundId]._name);
- _stepRightStream = Audio::makeWAVStream(soundFileStream, DisposeAfterUse::YES);
+ _stepRightStream = loadWAV(soundFileStream);
}
break;
}
@@ -189,7 +198,7 @@ void SoundManager::soundStep(int midx, int midz, int act, int frame) {
if (stepLeft && (_gSample[soundId]._flag & kSoundFlagStepLeft)) {
if (!_stepLeftStream) {
Common::SeekableReadStream *soundFileStream = _vm->_dataFile.createReadStreamForMember(_gSample[soundId]._name);
- _stepLeftStream = Audio::makeWAVStream(soundFileStream, DisposeAfterUse::YES);
+ _stepLeftStream = loadWAV(soundFileStream);
}
break;
}
@@ -231,7 +240,7 @@ int32 SoundManager::talkStart(const Common::String &name) {
if (!stream)
return 0;
- Audio::SeekableAudioStream *audioStream = Audio::makeWAVStream(stream, DisposeAfterUse::YES);
+ Audio::SeekableAudioStream *audioStream = loadWAV(stream);
g_system->getMixer()->playStream(
Audio::Mixer::kSpeechSoundType,
diff --git a/engines/trecision/sound.h b/engines/trecision/sound.h
index fd6bdb9c28..6ee7ccbbba 100644
--- a/engines/trecision/sound.h
+++ b/engines/trecision/sound.h
@@ -72,6 +72,7 @@ private:
Audio::SeekableAudioStream *_stepRightStream;
public:
+ Audio::SeekableAudioStream *loadWAV(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES);
void play(int soundId);
void stopSoundType(SoundType type);
void stopAll();
diff --git a/engines/trecision/trecision.h b/engines/trecision/trecision.h
index cec8a6f2da..68337f829e 100644
--- a/engines/trecision/trecision.h
+++ b/engines/trecision/trecision.h
@@ -156,6 +156,7 @@ public:
// ScummVM
Common::Error run() override;
bool isDemo() const { return _gameDescription->flags & ADGF_DEMO; }
+ bool isAmiga() const { return _gameDescription->platform == Common::kPlatformAmiga; }
bool hasFeature(EngineFeature f) const override;
bool canLoadGameStateCurrently() override { return canPlayerInteract() && _curRoom != kRoomIntro; }
bool canSaveGameStateCurrently() override { return canPlayerInteract() && _curRoom != kRoomIntro; }
Commit: 48b9f54bfc58de4ef1a231f747799ad26fccfd61
https://github.com/scummvm/scummvm/commit/48b9f54bfc58de4ef1a231f747799ad26fccfd61
Author: SupSuper (supsuper at gmail.com)
Date: 2021-05-31T06:40:05+01:00
Commit Message:
COMMON: Add support for fixed-size strings in ReadStream::readString
Changed paths:
common/stream.cpp
common/stream.h
diff --git a/common/stream.cpp b/common/stream.cpp
index 437d68e74e..d78bb4e122 100644
--- a/common/stream.cpp
+++ b/common/stream.cpp
@@ -52,13 +52,21 @@ SeekableReadStream *ReadStream::readStream(uint32 dataSize) {
return new MemoryReadStream((byte *)buf, dataSize, DisposeAfterUse::YES);
}
-Common::String ReadStream::readString(char terminator) {
+Common::String ReadStream::readString(char terminator, size_t len) {
Common::String result;
char c;
- while ((c = (char)readByte()) != terminator && !eos())
+ while ((c = (char)readByte()) != terminator && result.size() < len && !eos())
result += c;
+ // If the string terminated early, skip the remaining bytes
+ if (!eos() && len != Common::String::npos && result.size() < len - 1) {
+ size_t skipBytes = len - result.size() - 1; // skip terminator
+ for (size_t i = 0; i < skipBytes; i++) {
+ readByte();
+ }
+ }
+
return result;
}
diff --git a/common/stream.h b/common/stream.h
index 082ec3d6b8..071d41bd0c 100644
--- a/common/stream.h
+++ b/common/stream.h
@@ -643,8 +643,9 @@ public:
* the terminating character.
*
* @param terminator The terminating character to use.
+ * @param len The maximum length to read (includes terminator).
*/
- String readString(char terminator = 0);
+ String readString(char terminator = 0, size_t len = String::npos);
/**
* Read a string in Pascal format, that is, one byte is
Commit: 62f62b6b620051ec8e9d512175a15cc335e9f3a7
https://github.com/scummvm/scummvm/commit/62f62b6b620051ec8e9d512175a15cc335e9f3a7
Author: SupSuper (supsuper at gmail.com)
Date: 2021-05-31T06:40:06+01:00
Commit Message:
TRECISION: Add endianness to FastFile
Changed paths:
engines/trecision/fastfile.cpp
engines/trecision/fastfile.h
engines/trecision/saveload.cpp
engines/trecision/sound.cpp
engines/trecision/trecision.cpp
engines/trecision/video.cpp
diff --git a/engines/trecision/fastfile.cpp b/engines/trecision/fastfile.cpp
index b239185e76..d403b30a1a 100644
--- a/engines/trecision/fastfile.cpp
+++ b/engines/trecision/fastfile.cpp
@@ -46,20 +46,19 @@ const FileEntry *FastFile::getEntry(const Common::String &name) const {
return nullptr;
}
-bool FastFile::open(const Common::String &name) {
+bool FastFile::open(TrecisionEngine *vm, const Common::String &name) {
close();
- _stream = SearchMan.createReadStreamForMember(name);
+ _stream = vm->readEndian(SearchMan.createReadStreamForMember(name));
if (!_stream)
return false;
- int numFiles = _stream->readUint32LE();
+ int numFiles = _stream->readUint32();
_fileEntries.resize(numFiles);
for (int i = 0; i < numFiles; ++i) {
FileEntry *entry = &_fileEntries[i];
- for (int j = 0; j < 12; ++j)
- entry->name += _stream->readByte();
- entry->offset = _stream->readUint32LE();
+ entry->name = _stream->readString(0, 12);
+ entry->offset = _stream->readUint32();
}
return true;
diff --git a/engines/trecision/fastfile.h b/engines/trecision/fastfile.h
index b023a608d5..2fcdea3540 100644
--- a/engines/trecision/fastfile.h
+++ b/engines/trecision/fastfile.h
@@ -29,6 +29,8 @@
namespace Trecision {
+class TrecisionEngine;
+
struct FileEntry {
Common::String name;
uint32 offset;
@@ -39,7 +41,7 @@ public:
FastFile();
~FastFile() override;
- bool open(const Common::String &filename);
+ bool open(TrecisionEngine *vm, const Common::String &filename);
void close();
bool isOpen() const { return _stream != 0; }
Common::SeekableReadStream *createReadStreamForCompressedMember(const Common::String &name);
@@ -51,7 +53,7 @@ public:
Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const override;
private:
- Common::SeekableReadStream *_stream;
+ Common::SeekableReadStreamEndian *_stream;
Common::SeekableReadStream *_compStream;
Common::Array<FileEntry> _fileEntries;
diff --git a/engines/trecision/saveload.cpp b/engines/trecision/saveload.cpp
index f09d2f430f..bc93258fe4 100644
--- a/engines/trecision/saveload.cpp
+++ b/engines/trecision/saveload.cpp
@@ -54,17 +54,7 @@ void TrecisionEngine::loadSaveSlots(Common::StringArray &saveNames) {
if (version >= SAVE_VERSION_ORIGINAL_MIN && version <= SAVE_VERSION_ORIGINAL_MAX) {
// Original saved game, convert
- Common::String saveName;
- int j = 0;
- for (; j < 40; j++) {
- byte c = saveFile->readByte();
- if (c == 0) {
- break;
- } else {
- saveName += c;
- }
- }
- saveFile->skip(40 - j + 1);
+ Common::String saveName = saveFile->readString(0, 40);
saveNames.push_back(saveName);
_inventory.push_back(EMPTYSLOT + i + 1);
diff --git a/engines/trecision/sound.cpp b/engines/trecision/sound.cpp
index b95068e737..a038bea76f 100644
--- a/engines/trecision/sound.cpp
+++ b/engines/trecision/sound.cpp
@@ -34,7 +34,7 @@
namespace Trecision {
SoundManager::SoundManager(TrecisionEngine *vm) : _vm(vm) {
- if (!_speechFile.open("nlspeech.cd0"))
+ if (!_speechFile.open(_vm, "nlspeech.cd0"))
warning("SoundManager - nlspeech.cd0 is missing - skipping");
_stepLeftStream = nullptr;
diff --git a/engines/trecision/trecision.cpp b/engines/trecision/trecision.cpp
index 9e8afac5e1..c444637d47 100644
--- a/engines/trecision/trecision.cpp
+++ b/engines/trecision/trecision.cpp
@@ -190,7 +190,7 @@ TrecisionEngine::~TrecisionEngine() {
Common::Error TrecisionEngine::run() {
syncSoundSettings();
- if (!_dataFile.open("nldata.cd0"))
+ if (!_dataFile.open(this, "nldata.cd0"))
error("Error opening nldata.cd0");
_graphicsMgr = new GraphicsManager(this);
diff --git a/engines/trecision/video.cpp b/engines/trecision/video.cpp
index 96ed763cc2..cd96b5778d 100644
--- a/engines/trecision/video.cpp
+++ b/engines/trecision/video.cpp
@@ -525,7 +525,7 @@ void AnimManager::swapCD(int cd) {
Common::String animFileName = Common::String::format("nlanim.cd%d", cd);
for (uint8 i = 0; i < MAXSMACK; ++i) {
_animFile[i].close();
- _animFile[i].open(animFileName);
+ _animFile[i].open(_vm, animFileName);
}
}
More information about the Scummvm-git-logs
mailing list