AGOS: Use Common::File instead of SearchMan.
This makes sure the hack from Common::File for filenames with a trailing dot is used as expected.
This commit is contained in:
parent
1cee8439e7
commit
047df69407
5 changed files with 78 additions and 88 deletions
|
@ -251,8 +251,8 @@ bool MoviePlayerDXA::load() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::String videoName = Common::String::format("%s.dxa", baseName);
|
Common::String videoName = Common::String::format("%s.dxa", baseName);
|
||||||
Common::SeekableReadStream *videoStream = SearchMan.createReadStreamForMember(videoName);
|
Common::File *videoStream = new Common::File();
|
||||||
if (!videoStream)
|
if (!videoStream->open(videoName))
|
||||||
error("Failed to load video file %s", videoName.c_str());
|
error("Failed to load video file %s", videoName.c_str());
|
||||||
if (!loadStream(videoStream))
|
if (!loadStream(videoStream))
|
||||||
error("Failed to load video stream from file %s", videoName.c_str());
|
error("Failed to load video stream from file %s", videoName.c_str());
|
||||||
|
@ -421,8 +421,8 @@ MoviePlayerSMK::MoviePlayerSMK(AGOSEngine_Feeble *vm, const char *name)
|
||||||
bool MoviePlayerSMK::load() {
|
bool MoviePlayerSMK::load() {
|
||||||
Common::String videoName = Common::String::format("%s.smk", baseName);
|
Common::String videoName = Common::String::format("%s.smk", baseName);
|
||||||
|
|
||||||
Common::SeekableReadStream *videoStream = SearchMan.createReadStreamForMember(videoName);
|
Common::File *videoStream = new Common::File();
|
||||||
if (!videoStream)
|
if (!videoStream->open(videoName))
|
||||||
error("Failed to load video file %s", videoName.c_str());
|
error("Failed to load video file %s", videoName.c_str());
|
||||||
if (!loadStream(videoStream))
|
if (!loadStream(videoStream))
|
||||||
error("Failed to load video stream from file %s", videoName.c_str());
|
error("Failed to load video stream from file %s", videoName.c_str());
|
||||||
|
@ -532,25 +532,25 @@ MoviePlayer *makeMoviePlayer(AGOSEngine_Feeble *vm, const char *name) {
|
||||||
memcpy(shortName, baseName, 6);
|
memcpy(shortName, baseName, 6);
|
||||||
|
|
||||||
sprintf(filename, "%s~1.dxa", shortName);
|
sprintf(filename, "%s~1.dxa", shortName);
|
||||||
if (SearchMan.hasFile(filename)) {
|
if (Common::File::exists(filename)) {
|
||||||
memset(baseName, 0, sizeof(baseName));
|
memset(baseName, 0, sizeof(baseName));
|
||||||
memcpy(baseName, filename, 8);
|
memcpy(baseName, filename, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(filename, "%s~1.smk", shortName);
|
sprintf(filename, "%s~1.smk", shortName);
|
||||||
if (SearchMan.hasFile(filename)) {
|
if (Common::File::exists(filename)) {
|
||||||
memset(baseName, 0, sizeof(baseName));
|
memset(baseName, 0, sizeof(baseName));
|
||||||
memcpy(baseName, filename, 8);
|
memcpy(baseName, filename, 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(filename, "%s.dxa", baseName);
|
sprintf(filename, "%s.dxa", baseName);
|
||||||
if (SearchMan.hasFile(filename)) {
|
if (Common::File::exists(filename)) {
|
||||||
return new MoviePlayerDXA(vm, baseName);
|
return new MoviePlayerDXA(vm, baseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(filename, "%s.smk", baseName);
|
sprintf(filename, "%s.smk", baseName);
|
||||||
if (SearchMan.hasFile(filename)) {
|
if (Common::File::exists(filename)) {
|
||||||
return new MoviePlayerSMK(vm, baseName);
|
return new MoviePlayerSMK(vm, baseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,39 +151,35 @@ int AGOSEngine::allocGamePcVars(Common::SeekableReadStream *in) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AGOSEngine_PN::loadGamePcFile() {
|
void AGOSEngine_PN::loadGamePcFile() {
|
||||||
Common::SeekableReadStream *in;
|
|
||||||
|
|
||||||
if (getFileName(GAME_BASEFILE) != NULL) {
|
if (getFileName(GAME_BASEFILE) != NULL) {
|
||||||
|
Common::File in;
|
||||||
// Read dataBase
|
// Read dataBase
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_BASEFILE));
|
if (!in.open(getFileName(GAME_BASEFILE))) {
|
||||||
if (!in) {
|
|
||||||
error("loadGamePcFile: Can't load database file '%s'", getFileName(GAME_BASEFILE));
|
error("loadGamePcFile: Can't load database file '%s'", getFileName(GAME_BASEFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
_dataBaseSize = in->size();
|
_dataBaseSize = in.size();
|
||||||
_dataBase = (byte *)malloc(_dataBaseSize);
|
_dataBase = (byte *)malloc(_dataBaseSize);
|
||||||
if (_dataBase == NULL)
|
if (_dataBase == NULL)
|
||||||
error("loadGamePcFile: Out of memory for dataBase");
|
error("loadGamePcFile: Out of memory for dataBase");
|
||||||
in->read(_dataBase, _dataBaseSize);
|
in.read(_dataBase, _dataBaseSize);
|
||||||
delete in;
|
|
||||||
|
|
||||||
if (_dataBase[31] != 0)
|
if (_dataBase[31] != 0)
|
||||||
error("Later version of system requested");
|
error("Later version of system requested");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getFileName(GAME_TEXTFILE) != NULL) {
|
if (getFileName(GAME_TEXTFILE) != NULL) {
|
||||||
|
Common::File in;
|
||||||
// Read textBase
|
// Read textBase
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_TEXTFILE));
|
if (!in.open(getFileName(GAME_TEXTFILE))) {
|
||||||
if (!in) {
|
|
||||||
error("loadGamePcFile: Can't load textbase file '%s'", getFileName(GAME_TEXTFILE));
|
error("loadGamePcFile: Can't load textbase file '%s'", getFileName(GAME_TEXTFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
_textBaseSize = in->size();
|
_textBaseSize = in.size();
|
||||||
_textBase = (byte *)malloc(_textBaseSize);
|
_textBase = (byte *)malloc(_textBaseSize);
|
||||||
if (_textBase == NULL)
|
if (_textBase == NULL)
|
||||||
error("loadGamePcFile: Out of memory for textBase");
|
error("loadGamePcFile: Out of memory for textBase");
|
||||||
in->read(_textBase, _textBaseSize);
|
in.read(_textBase, _textBaseSize);
|
||||||
delete in;
|
|
||||||
|
|
||||||
if (_textBase[getlong(30L)] != 128)
|
if (_textBase[getlong(30L)] != 128)
|
||||||
error("Unknown compression format");
|
error("Unknown compression format");
|
||||||
|
@ -191,20 +187,19 @@ void AGOSEngine_PN::loadGamePcFile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AGOSEngine::loadGamePcFile() {
|
void AGOSEngine::loadGamePcFile() {
|
||||||
Common::SeekableReadStream *in;
|
|
||||||
int fileSize;
|
int fileSize;
|
||||||
|
|
||||||
if (getFileName(GAME_BASEFILE) != NULL) {
|
if (getFileName(GAME_BASEFILE) != NULL) {
|
||||||
/* Read main gamexx file */
|
/* Read main gamexx file */
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_BASEFILE));
|
Common::File in;
|
||||||
if (!in) {
|
if (!in.open(getFileName(GAME_BASEFILE))) {
|
||||||
error("loadGamePcFile: Can't load gamexx file '%s'", getFileName(GAME_BASEFILE));
|
error("loadGamePcFile: Can't load gamexx file '%s'", getFileName(GAME_BASEFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getFeatures() & GF_CRUNCHED_GAMEPC) {
|
if (getFeatures() & GF_CRUNCHED_GAMEPC) {
|
||||||
uint srcSize = in->size();
|
uint srcSize = in.size();
|
||||||
byte *srcBuf = (byte *)malloc(srcSize);
|
byte *srcBuf = (byte *)malloc(srcSize);
|
||||||
in->read(srcBuf, srcSize);
|
in.read(srcBuf, srcSize);
|
||||||
|
|
||||||
uint dstSize = READ_BE_UINT32(srcBuf + srcSize - 4);
|
uint dstSize = READ_BE_UINT32(srcBuf + srcSize - 4);
|
||||||
byte *dstBuf = (byte *)malloc(dstSize);
|
byte *dstBuf = (byte *)malloc(dstSize);
|
||||||
|
@ -215,25 +210,23 @@ void AGOSEngine::loadGamePcFile() {
|
||||||
readGamePcFile(&stream);
|
readGamePcFile(&stream);
|
||||||
free(dstBuf);
|
free(dstBuf);
|
||||||
} else {
|
} else {
|
||||||
readGamePcFile(in);
|
readGamePcFile(&in);
|
||||||
}
|
}
|
||||||
delete in;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getFileName(GAME_TBLFILE) != NULL) {
|
if (getFileName(GAME_TBLFILE) != NULL) {
|
||||||
/* Read list of TABLE resources */
|
/* Read list of TABLE resources */
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_TBLFILE));
|
Common::File in;
|
||||||
if (!in) {
|
if (!in.open(getFileName(GAME_TBLFILE))) {
|
||||||
error("loadGamePcFile: Can't load table resources file '%s'", getFileName(GAME_TBLFILE));
|
error("loadGamePcFile: Can't load table resources file '%s'", getFileName(GAME_TBLFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
fileSize = in->size();
|
fileSize = in.size();
|
||||||
|
|
||||||
_tblList = (byte *)malloc(fileSize);
|
_tblList = (byte *)malloc(fileSize);
|
||||||
if (_tblList == NULL)
|
if (_tblList == NULL)
|
||||||
error("loadGamePcFile: Out of memory for strip table list");
|
error("loadGamePcFile: Out of memory for strip table list");
|
||||||
in->read(_tblList, fileSize);
|
in.read(_tblList, fileSize);
|
||||||
delete in;
|
|
||||||
|
|
||||||
/* Remember the current state */
|
/* Remember the current state */
|
||||||
_subroutineListOrg = _subroutineList;
|
_subroutineListOrg = _subroutineList;
|
||||||
|
@ -243,71 +236,67 @@ void AGOSEngine::loadGamePcFile() {
|
||||||
|
|
||||||
if (getFileName(GAME_STRFILE) != NULL) {
|
if (getFileName(GAME_STRFILE) != NULL) {
|
||||||
/* Read list of TEXT resources */
|
/* Read list of TEXT resources */
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_STRFILE));
|
Common::File in;
|
||||||
if (!in)
|
if (!in.open(getFileName(GAME_STRFILE)))
|
||||||
error("loadGamePcFile: Can't load text resources file '%s'", getFileName(GAME_STRFILE));
|
error("loadGamePcFile: Can't load text resources file '%s'", getFileName(GAME_STRFILE));
|
||||||
|
|
||||||
fileSize = in->size();
|
fileSize = in.size();
|
||||||
_strippedTxtMem = (byte *)malloc(fileSize);
|
_strippedTxtMem = (byte *)malloc(fileSize);
|
||||||
if (_strippedTxtMem == NULL)
|
if (_strippedTxtMem == NULL)
|
||||||
error("loadGamePcFile: Out of memory for strip text list");
|
error("loadGamePcFile: Out of memory for strip text list");
|
||||||
in->read(_strippedTxtMem, fileSize);
|
in.read(_strippedTxtMem, fileSize);
|
||||||
delete in;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getFileName(GAME_STATFILE) != NULL) {
|
if (getFileName(GAME_STATFILE) != NULL) {
|
||||||
/* Read list of ROOM STATE resources */
|
/* Read list of ROOM STATE resources */
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_STATFILE));
|
Common::File in;
|
||||||
if (!in) {
|
if (!in.open(getFileName(GAME_STATFILE))) {
|
||||||
error("loadGamePcFile: Can't load state resources file '%s'", getFileName(GAME_STATFILE));
|
error("loadGamePcFile: Can't load state resources file '%s'", getFileName(GAME_STATFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
_numRoomStates = in->size() / 8;
|
_numRoomStates = in.size() / 8;
|
||||||
|
|
||||||
_roomStates = (RoomState *)calloc(_numRoomStates, sizeof(RoomState));
|
_roomStates = (RoomState *)calloc(_numRoomStates, sizeof(RoomState));
|
||||||
if (_roomStates == NULL)
|
if (_roomStates == NULL)
|
||||||
error("loadGamePcFile: Out of memory for room state list");
|
error("loadGamePcFile: Out of memory for room state list");
|
||||||
|
|
||||||
for (uint s = 0; s < _numRoomStates; s++) {
|
for (uint s = 0; s < _numRoomStates; s++) {
|
||||||
uint16 num = in->readUint16BE() - (_itemArrayInited - 2);
|
uint16 num = in.readUint16BE() - (_itemArrayInited - 2);
|
||||||
|
|
||||||
_roomStates[num].state = in->readUint16BE();
|
_roomStates[num].state = in.readUint16BE();
|
||||||
_roomStates[num].classFlags = in->readUint16BE();
|
_roomStates[num].classFlags = in.readUint16BE();
|
||||||
_roomStates[num].roomExitStates = in->readUint16BE();
|
_roomStates[num].roomExitStates = in.readUint16BE();
|
||||||
}
|
}
|
||||||
delete in;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getFileName(GAME_RMSLFILE) != NULL) {
|
if (getFileName(GAME_RMSLFILE) != NULL) {
|
||||||
/* Read list of ROOM ITEMS resources */
|
/* Read list of ROOM ITEMS resources */
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_RMSLFILE));
|
Common::File in;
|
||||||
if (!in) {
|
if (!in.open(getFileName(GAME_RMSLFILE))) {
|
||||||
error("loadGamePcFile: Can't load room resources file '%s'", getFileName(GAME_RMSLFILE));
|
error("loadGamePcFile: Can't load room resources file '%s'", getFileName(GAME_RMSLFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
fileSize = in->size();
|
fileSize = in.size();
|
||||||
|
|
||||||
_roomsList = (byte *)malloc(fileSize);
|
_roomsList = (byte *)malloc(fileSize);
|
||||||
if (_roomsList == NULL)
|
if (_roomsList == NULL)
|
||||||
error("loadGamePcFile: Out of memory for room items list");
|
error("loadGamePcFile: Out of memory for room items list");
|
||||||
in->read(_roomsList, fileSize);
|
in.read(_roomsList, fileSize);
|
||||||
delete in;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getFileName(GAME_XTBLFILE) != NULL) {
|
if (getFileName(GAME_XTBLFILE) != NULL) {
|
||||||
/* Read list of XTABLE resources */
|
/* Read list of XTABLE resources */
|
||||||
in = SearchMan.createReadStreamForMember(getFileName(GAME_XTBLFILE));
|
Common::File in;
|
||||||
if (!in) {
|
if (!in.open(getFileName(GAME_XTBLFILE))) {
|
||||||
error("loadGamePcFile: Can't load xtable resources file '%s'", getFileName(GAME_XTBLFILE));
|
error("loadGamePcFile: Can't load xtable resources file '%s'", getFileName(GAME_XTBLFILE));
|
||||||
}
|
}
|
||||||
|
|
||||||
fileSize = in->size();
|
fileSize = in.size();
|
||||||
|
|
||||||
_xtblList = (byte *)malloc(fileSize);
|
_xtblList = (byte *)malloc(fileSize);
|
||||||
if (_xtblList == NULL)
|
if (_xtblList == NULL)
|
||||||
error("loadGamePcFile: Out of memory for strip xtable list");
|
error("loadGamePcFile: Out of memory for strip xtable list");
|
||||||
in->read(_xtblList, fileSize);
|
in.read(_xtblList, fileSize);
|
||||||
delete in;
|
|
||||||
|
|
||||||
/* Remember the current state */
|
/* Remember the current state */
|
||||||
_xsubroutineListOrg = _subroutineList;
|
_xsubroutineListOrg = _subroutineList;
|
||||||
|
@ -781,7 +770,7 @@ void AGOSEngine::loadVGABeardFile(uint16 id) {
|
||||||
uint32 offs, size;
|
uint32 offs, size;
|
||||||
|
|
||||||
if (getFeatures() & GF_OLD_BUNDLE) {
|
if (getFeatures() & GF_OLD_BUNDLE) {
|
||||||
Common::SeekableReadStream *in;
|
Common::File in;
|
||||||
char filename[15];
|
char filename[15];
|
||||||
if (id == 23)
|
if (id == 23)
|
||||||
id = 112;
|
id = 112;
|
||||||
|
@ -797,22 +786,20 @@ void AGOSEngine::loadVGABeardFile(uint16 id) {
|
||||||
sprintf(filename, "0%d.VGA", id);
|
sprintf(filename, "0%d.VGA", id);
|
||||||
}
|
}
|
||||||
|
|
||||||
in = SearchMan.createReadStreamForMember(filename);
|
if (!in.open(filename))
|
||||||
if (!in)
|
|
||||||
error("loadSimonVGAFile: Can't load %s", filename);
|
error("loadSimonVGAFile: Can't load %s", filename);
|
||||||
|
|
||||||
size = in->size();
|
size = in.size();
|
||||||
if (getFeatures() & GF_CRUNCHED) {
|
if (getFeatures() & GF_CRUNCHED) {
|
||||||
byte *srcBuffer = (byte *)malloc(size);
|
byte *srcBuffer = (byte *)malloc(size);
|
||||||
if (in->read(srcBuffer, size) != size)
|
if (in.read(srcBuffer, size) != size)
|
||||||
error("loadSimonVGAFile: Read failed");
|
error("loadSimonVGAFile: Read failed");
|
||||||
decrunchFile(srcBuffer, _vgaBufferPointers[11].vgaFile2, size);
|
decrunchFile(srcBuffer, _vgaBufferPointers[11].vgaFile2, size);
|
||||||
free(srcBuffer);
|
free(srcBuffer);
|
||||||
} else {
|
} else {
|
||||||
if (in->read(_vgaBufferPointers[11].vgaFile2, size) != size)
|
if (in.read(_vgaBufferPointers[11].vgaFile2, size) != size)
|
||||||
error("loadSimonVGAFile: Read failed");
|
error("loadSimonVGAFile: Read failed");
|
||||||
}
|
}
|
||||||
delete in;
|
|
||||||
} else {
|
} else {
|
||||||
offs = _gameOffsetsPtr[id];
|
offs = _gameOffsetsPtr[id];
|
||||||
|
|
||||||
|
@ -822,7 +809,7 @@ void AGOSEngine::loadVGABeardFile(uint16 id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
||||||
Common::SeekableReadStream *in;
|
Common::File in;
|
||||||
char filename[15];
|
char filename[15];
|
||||||
byte *dst;
|
byte *dst;
|
||||||
uint32 file, offs, srcSize, dstSize;
|
uint32 file, offs, srcSize, dstSize;
|
||||||
|
@ -875,8 +862,7 @@ void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
in = SearchMan.createReadStreamForMember(filename);
|
if (!in.open(filename)) {
|
||||||
if (!in) {
|
|
||||||
if (useError)
|
if (useError)
|
||||||
error("loadVGAVideoFile: Can't load %s", filename);
|
error("loadVGAVideoFile: Can't load %s", filename);
|
||||||
|
|
||||||
|
@ -884,11 +870,11 @@ void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dstSize = srcSize = in->size();
|
dstSize = srcSize = in.size();
|
||||||
if (getGameType() == GType_PN && getPlatform() == Common::kPlatformDOS && id == 17 && type == 2) {
|
if (getGameType() == GType_PN && getPlatform() == Common::kPlatformDOS && id == 17 && type == 2) {
|
||||||
// The A2.out file isn't compressed in PC version of Personal Nightmare
|
// The A2.out file isn't compressed in PC version of Personal Nightmare
|
||||||
dst = allocBlock(dstSize + extraBuffer);
|
dst = allocBlock(dstSize + extraBuffer);
|
||||||
if (in->read(dst, dstSize) != dstSize)
|
if (in.read(dst, dstSize) != dstSize)
|
||||||
error("loadVGAVideoFile: Read failed");
|
error("loadVGAVideoFile: Read failed");
|
||||||
} else if (getGameType() == GType_PN && (getFeatures() & GF_CRUNCHED)) {
|
} else if (getGameType() == GType_PN && (getFeatures() & GF_CRUNCHED)) {
|
||||||
Common::Stack<uint32> data;
|
Common::Stack<uint32> data;
|
||||||
|
@ -896,7 +882,7 @@ void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
||||||
int dataOutSize = 0;
|
int dataOutSize = 0;
|
||||||
|
|
||||||
for (uint i = 0; i < srcSize / 4; ++i) {
|
for (uint i = 0; i < srcSize / 4; ++i) {
|
||||||
uint32 dataVal = in->readUint32BE();
|
uint32 dataVal = in.readUint32BE();
|
||||||
// Correct incorrect byte, in corrupt 72.out file, included in some PC versions.
|
// Correct incorrect byte, in corrupt 72.out file, included in some PC versions.
|
||||||
if (dataVal == 168042714)
|
if (dataVal == 168042714)
|
||||||
data.push(168050906);
|
data.push(168050906);
|
||||||
|
@ -910,7 +896,7 @@ void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
||||||
delete[] dataOut;
|
delete[] dataOut;
|
||||||
} else if (getFeatures() & GF_CRUNCHED) {
|
} else if (getFeatures() & GF_CRUNCHED) {
|
||||||
byte *srcBuffer = (byte *)malloc(srcSize);
|
byte *srcBuffer = (byte *)malloc(srcSize);
|
||||||
if (in->read(srcBuffer, srcSize) != srcSize)
|
if (in.read(srcBuffer, srcSize) != srcSize)
|
||||||
error("loadVGAVideoFile: Read failed");
|
error("loadVGAVideoFile: Read failed");
|
||||||
|
|
||||||
dstSize = READ_BE_UINT32(srcBuffer + srcSize - 4);
|
dstSize = READ_BE_UINT32(srcBuffer + srcSize - 4);
|
||||||
|
@ -919,10 +905,9 @@ void AGOSEngine::loadVGAVideoFile(uint16 id, uint8 type, bool useError) {
|
||||||
free(srcBuffer);
|
free(srcBuffer);
|
||||||
} else {
|
} else {
|
||||||
dst = allocBlock(dstSize + extraBuffer);
|
dst = allocBlock(dstSize + extraBuffer);
|
||||||
if (in->read(dst, dstSize) != dstSize)
|
if (in.read(dst, dstSize) != dstSize)
|
||||||
error("loadVGAVideoFile: Read failed");
|
error("loadVGAVideoFile: Read failed");
|
||||||
}
|
}
|
||||||
delete in;
|
|
||||||
} else {
|
} else {
|
||||||
id = id * 2 + (type - 1);
|
id = id * 2 + (type - 1);
|
||||||
offs = _gameOffsetsPtr[id];
|
offs = _gameOffsetsPtr[id];
|
||||||
|
|
|
@ -450,17 +450,14 @@ static const char *const dimpSoundList[32] = {
|
||||||
|
|
||||||
|
|
||||||
void AGOSEngine::loadSoundFile(const char* filename) {
|
void AGOSEngine::loadSoundFile(const char* filename) {
|
||||||
Common::SeekableReadStream *in;
|
Common::File in;
|
||||||
|
if (!in.open(filename))
|
||||||
in = SearchMan.createReadStreamForMember(filename);
|
|
||||||
if (!in)
|
|
||||||
error("loadSound: Can't load %s", filename);
|
error("loadSound: Can't load %s", filename);
|
||||||
|
|
||||||
uint32 dstSize = in->size();
|
uint32 dstSize = in.size();
|
||||||
byte *dst = (byte *)malloc(dstSize);
|
byte *dst = (byte *)malloc(dstSize);
|
||||||
if (in->read(dst, dstSize) != dstSize)
|
if (in.read(dst, dstSize) != dstSize)
|
||||||
error("loadSound: Read failed");
|
error("loadSound: Read failed");
|
||||||
delete in;
|
|
||||||
|
|
||||||
_sound->playSfxData(dst, 0, 0, 0);
|
_sound->playSfxData(dst, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -469,21 +466,19 @@ void AGOSEngine::loadSound(uint16 sound, int16 pan, int16 vol, uint16 type) {
|
||||||
byte *dst;
|
byte *dst;
|
||||||
|
|
||||||
if (getGameId() == GID_DIMP) {
|
if (getGameId() == GID_DIMP) {
|
||||||
Common::SeekableReadStream *in;
|
Common::File in;
|
||||||
char filename[15];
|
char filename[15];
|
||||||
|
|
||||||
assert(sound >= 1 && sound <= 32);
|
assert(sound >= 1 && sound <= 32);
|
||||||
sprintf(filename, "%s.wav", dimpSoundList[sound - 1]);
|
sprintf(filename, "%s.wav", dimpSoundList[sound - 1]);
|
||||||
|
|
||||||
in = SearchMan.createReadStreamForMember(filename);
|
if (!in.open(filename))
|
||||||
if (!in)
|
|
||||||
error("loadSound: Can't load %s", filename);
|
error("loadSound: Can't load %s", filename);
|
||||||
|
|
||||||
uint32 dstSize = in->size();
|
uint32 dstSize = in.size();
|
||||||
dst = (byte *)malloc(dstSize);
|
dst = (byte *)malloc(dstSize);
|
||||||
if (in->read(dst, dstSize) != dstSize)
|
if (in.read(dst, dstSize) != dstSize)
|
||||||
error("loadSound: Read failed");
|
error("loadSound: Read failed");
|
||||||
delete in;
|
|
||||||
} else if (getFeatures() & GF_ZLIBCOMP) {
|
} else if (getFeatures() & GF_ZLIBCOMP) {
|
||||||
char filename[15];
|
char filename[15];
|
||||||
|
|
||||||
|
|
|
@ -1031,7 +1031,12 @@ bool AGOSEngine::loadGame(const Common::String &filename, bool restartMode) {
|
||||||
|
|
||||||
if (restartMode) {
|
if (restartMode) {
|
||||||
// Load restart state
|
// Load restart state
|
||||||
f = SearchMan.createReadStreamForMember(filename);
|
Common::File *file = new Common::File();
|
||||||
|
if (!file->open(filename)) {
|
||||||
|
delete file;
|
||||||
|
file = nullptr;
|
||||||
|
}
|
||||||
|
f = file;
|
||||||
} else {
|
} else {
|
||||||
f = _saveFileMan->openForLoading(filename);
|
f = _saveFileMan->openForLoading(filename);
|
||||||
}
|
}
|
||||||
|
@ -1205,7 +1210,12 @@ bool AGOSEngine_Elvira2::loadGame(const Common::String &filename, bool restartMo
|
||||||
|
|
||||||
if (restartMode) {
|
if (restartMode) {
|
||||||
// Load restart state
|
// Load restart state
|
||||||
f = SearchMan.createReadStreamForMember(filename);
|
Common::File *file = new Common::File();
|
||||||
|
if (!file->open(filename)) {
|
||||||
|
delete file;
|
||||||
|
file = nullptr;
|
||||||
|
}
|
||||||
|
f = file;
|
||||||
} else {
|
} else {
|
||||||
f = _saveFileMan->openForLoading(filename);
|
f = _saveFileMan->openForLoading(filename);
|
||||||
}
|
}
|
||||||
|
|
|
@ -266,8 +266,8 @@ Common::SeekableReadStream *AGOSEngine::openTablesFile(const char *filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::SeekableReadStream *AGOSEngine::openTablesFile_simon1(const char *filename) {
|
Common::SeekableReadStream *AGOSEngine::openTablesFile_simon1(const char *filename) {
|
||||||
Common::SeekableReadStream *in = SearchMan.createReadStreamForMember(filename);
|
Common::File *in = new Common::File();
|
||||||
if (!in)
|
if (!in->open(filename))
|
||||||
error("openTablesFile: Can't open '%s'", filename);
|
error("openTablesFile: Can't open '%s'", filename);
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue