LAB: Refactor the remaining functions in labfile.cpp
This commit is contained in:
parent
eb0a52e7fb
commit
9ba30835a2
7 changed files with 41 additions and 108 deletions
|
@ -414,6 +414,11 @@ void Anim::unDiff(byte *newBuf, byte *oldBuf, byte *diffData, uint16 bytesPerRow
|
||||||
unDIFFMemory(newBuf, diffData, 1, bufType + 1);
|
unDIFFMemory(newBuf, diffData, 1, bufType + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Anim::readBlock(void *Buffer, uint32 Size, byte **File) {
|
||||||
|
memcpy(Buffer, *File, (size_t)Size);
|
||||||
|
(*File) += Size;
|
||||||
|
}
|
||||||
|
|
||||||
void Anim::diffNextFrame() {
|
void Anim::diffNextFrame() {
|
||||||
if (_header == 65535) /* Already done. */
|
if (_header == 65535) /* Already done. */
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -93,6 +93,7 @@ private:
|
||||||
void VUnDIFFByteByte(byte *Dest, byte *diff, uint16 bytesperrow);
|
void VUnDIFFByteByte(byte *Dest, byte *diff, uint16 bytesperrow);
|
||||||
void VUnDIFFByteWord(uint16 *Dest, uint16 *diff, uint16 bytesperrow);
|
void VUnDIFFByteWord(uint16 *Dest, uint16 *diff, uint16 bytesperrow);
|
||||||
void VUnDIFFByteLong(uint32 *Dest, uint32 *diff, uint16 bytesperrow);
|
void VUnDIFFByteLong(uint32 *Dest, uint32 *diff, uint16 bytesperrow);
|
||||||
|
void readBlock(void *Buffer, uint32 Size, byte **File);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Anim(LabEngine *vm);
|
Anim(LabEngine *vm);
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
/* ScummVM - Graphic Adventure Engine
|
|
||||||
*
|
|
||||||
* ScummVM is the legal property of its developers, whose names
|
|
||||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
||||||
* file distributed with this source distribution.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This code is based on Labyrinth of Time code with assistance of
|
|
||||||
*
|
|
||||||
* Copyright (c) 1993 Terra Nova Development
|
|
||||||
* Copyright (c) 2004 The Wyrmkeep Entertainment Co.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "lab/lab.h"
|
|
||||||
#include "lab/labfun.h"
|
|
||||||
#include "common/file.h"
|
|
||||||
|
|
||||||
namespace Lab {
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/* Reads a block of memory. */
|
|
||||||
/*****************************************************************************/
|
|
||||||
void readBlock(void *Buffer, uint32 Size, byte **File) {
|
|
||||||
memcpy(Buffer, *File, (size_t) Size);
|
|
||||||
(*File) += Size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char NewFileName[255];
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/* Modifies the filename so that paths and stuff are correct. Should mostly */
|
|
||||||
/* deal with assigns and the '/' instead of '\' on IBM systems. */
|
|
||||||
/* */
|
|
||||||
/* NOTE: Make a *copy* of the string, and modify that. It would be a real */
|
|
||||||
/* *bad* idea to modify the original. Since Labyrinth only focuses its */
|
|
||||||
/* attention to one file at a time, it would be fine to have one variable */
|
|
||||||
/* not on the stack which is used to store the new filename. */
|
|
||||||
/*****************************************************************************/
|
|
||||||
char *translateFileName(const char *filename) {
|
|
||||||
Common::String fileNameStr = filename;
|
|
||||||
fileNameStr.toUppercase();
|
|
||||||
Common::String fileNameStrFinal;
|
|
||||||
|
|
||||||
if (fileNameStr.hasPrefix("P:")) {
|
|
||||||
if (g_lab->_isHiRes)
|
|
||||||
fileNameStrFinal = "GAME/SPICT/";
|
|
||||||
else
|
|
||||||
fileNameStrFinal = "GAME/PICT/";
|
|
||||||
} else if (fileNameStr.hasPrefix("LAB:"))
|
|
||||||
fileNameStrFinal = "GAME/";
|
|
||||||
else if (fileNameStr.hasPrefix("MUSIC:"))
|
|
||||||
fileNameStrFinal = "GAME/MUSIC/";
|
|
||||||
|
|
||||||
if (fileNameStr.contains(':')) {
|
|
||||||
while (fileNameStr[0] != ':') {
|
|
||||||
fileNameStr.deleteChar(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fileNameStr.deleteChar(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
fileNameStrFinal += fileNameStr;
|
|
||||||
|
|
||||||
strcpy(NewFileName, fileNameStrFinal.c_str());
|
|
||||||
|
|
||||||
return NewFileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // End of namespace Lab
|
|
|
@ -115,12 +115,6 @@ public:
|
||||||
uint16 *_array;
|
uint16 *_array;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*---------------------------*/
|
|
||||||
/*----- From Machine.c ------*/
|
|
||||||
/*---------------------------*/
|
|
||||||
|
|
||||||
char *translateFileName(const char *filename);
|
|
||||||
|
|
||||||
/*---------------------------*/
|
/*---------------------------*/
|
||||||
/*-------- From Map.c -------*/
|
/*-------- From Map.c -------*/
|
||||||
/*---------------------------*/
|
/*---------------------------*/
|
||||||
|
|
|
@ -10,7 +10,6 @@ MODULE_OBJS := \
|
||||||
interface.o \
|
interface.o \
|
||||||
intro.o \
|
intro.o \
|
||||||
lab.o \
|
lab.o \
|
||||||
labfile.o \
|
|
||||||
labsets.o \
|
labsets.o \
|
||||||
map.o \
|
map.o \
|
||||||
music.o \
|
music.o \
|
||||||
|
|
|
@ -43,21 +43,16 @@ Resource::Resource(LabEngine *vm) : _vm(vm) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Resource::readStaticText() {
|
void Resource::readStaticText() {
|
||||||
Common::File labTextFile;
|
Common::File *labTextFile = openDataFile("Lab:Rooms/LabText");
|
||||||
labTextFile.open(translateFileName("Lab:Rooms/LabText"));
|
|
||||||
if (!labTextFile.isOpen())
|
|
||||||
error("Unable to open file %s (Lab:Rooms/LabText)", translateFileName("Lab:Rooms/LabText"));
|
|
||||||
|
|
||||||
for (int i = 0; i < 48; i++)
|
for (int i = 0; i < 48; i++)
|
||||||
_staticText[i] = labTextFile.readLine();
|
_staticText[i] = labTextFile->readLine();
|
||||||
|
|
||||||
labTextFile.close();
|
delete labTextFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextFont *Resource::getFont(const char *fileName) {
|
TextFont *Resource::getFont(const char *fileName) {
|
||||||
Common::File *dataFile;
|
Common::File *dataFile = openDataFile(fileName, MKTAG('V', 'G', 'A', 'F'));
|
||||||
if (!(dataFile = openDataFile(fileName, MKTAG('V', 'G', 'A', 'F'))))
|
|
||||||
error("getFont: couldn't open %s (%s)", translateFileName(fileName), fileName);
|
|
||||||
|
|
||||||
uint32 headerSize = 4L + 2L + 256 * 3 + 4L;
|
uint32 headerSize = 4L + 2L + 256 * 3 + 4L;
|
||||||
uint32 fileSize = dataFile->size();
|
uint32 fileSize = dataFile->size();
|
||||||
|
@ -79,10 +74,7 @@ TextFont *Resource::getFont(const char *fileName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char *Resource::getText(const char *fileName) {
|
char *Resource::getText(const char *fileName) {
|
||||||
Common::File *dataFile = new Common::File();
|
Common::File *dataFile = openDataFile(fileName);
|
||||||
dataFile->open(translateFileName(fileName));
|
|
||||||
if (!dataFile->isOpen())
|
|
||||||
error("getText: couldn't open %s (%s)", translateFileName(fileName), fileName);
|
|
||||||
|
|
||||||
g_lab->_music->updateMusic();
|
g_lab->_music->updateMusic();
|
||||||
|
|
||||||
|
@ -94,6 +86,7 @@ char *Resource::getText(const char *fileName) {
|
||||||
while (text && *text != '\0')
|
while (text && *text != '\0')
|
||||||
*text++ -= (byte)95;
|
*text++ -= (byte)95;
|
||||||
|
|
||||||
|
delete dataFile;
|
||||||
return (char *)buffer;
|
return (char *)buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +159,34 @@ bool Resource::readViews(uint16 roomNum) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Common::String Resource::translateFileName(Common::String filename) {
|
||||||
|
filename.toUppercase();
|
||||||
|
Common::String fileNameStrFinal;
|
||||||
|
|
||||||
|
if (filename.hasPrefix("P:")) {
|
||||||
|
if (g_lab->_isHiRes)
|
||||||
|
fileNameStrFinal = "GAME/SPICT/";
|
||||||
|
else
|
||||||
|
fileNameStrFinal = "GAME/PICT/";
|
||||||
|
}
|
||||||
|
else if (filename.hasPrefix("LAB:"))
|
||||||
|
fileNameStrFinal = "GAME/";
|
||||||
|
else if (filename.hasPrefix("MUSIC:"))
|
||||||
|
fileNameStrFinal = "GAME/MUSIC/";
|
||||||
|
|
||||||
|
if (filename.contains(':')) {
|
||||||
|
while (filename[0] != ':') {
|
||||||
|
filename.deleteChar(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
filename.deleteChar(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fileNameStrFinal += filename;
|
||||||
|
|
||||||
|
return fileNameStrFinal;
|
||||||
|
}
|
||||||
|
|
||||||
Common::File *Resource::openDataFile(const char *fileName, uint32 fileHeader) {
|
Common::File *Resource::openDataFile(const char *fileName, uint32 fileHeader) {
|
||||||
Common::File *dataFile = new Common::File();
|
Common::File *dataFile = new Common::File();
|
||||||
dataFile->open(translateFileName(fileName));
|
dataFile->open(translateFileName(fileName));
|
||||||
|
|
|
@ -115,6 +115,7 @@ private:
|
||||||
CloseData *readCloseUps(uint16 depth, Common::File *file);
|
CloseData *readCloseUps(uint16 depth, Common::File *file);
|
||||||
ViewData *readView(Common::File *file);
|
ViewData *readView(Common::File *file);
|
||||||
void readStaticText();
|
void readStaticText();
|
||||||
|
Common::String translateFileName(Common::String filename);
|
||||||
|
|
||||||
Common::String _staticText[48];
|
Common::String _staticText[48];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue