HOPKINS: Get rid of magic values in FilesManager

This commit is contained in:
Strangerke 2013-02-27 00:15:54 +01:00
parent c74361b0b6
commit 58eefc0833
6 changed files with 33 additions and 28 deletions

View File

@ -96,7 +96,7 @@ bool FileManager::fileExists(const Common::String &file) {
/**
* Search file in Cat file
*/
byte *FileManager::searchCat(const Common::String &file, int a2) {
byte *FileManager::searchCat(const Common::String &file, CatMode mode) {
byte *ptr = NULL;
Common::File f;
@ -104,8 +104,8 @@ byte *FileManager::searchCat(const Common::String &file, int a2) {
Common::String secondaryFilename = "";
filename.toUppercase();
switch (a2) {
case 1:
switch (mode) {
case RES_INI:
if (!f.exists("RES_INI.CAT"))
return g_PTRNUL;
@ -113,7 +113,7 @@ byte *FileManager::searchCat(const Common::String &file, int a2) {
secondaryFilename = "RES_INI.RES";
break;
case 2:
case RES_REP:
if (!f.exists("RES_REP.CAT"))
return g_PTRNUL;
@ -121,7 +121,7 @@ byte *FileManager::searchCat(const Common::String &file, int a2) {
secondaryFilename = "RES_REP.RES";
break;
case 3:
case RES_LIN:
if (!f.exists("RES_LIN.CAT"))
return g_PTRNUL;
@ -129,7 +129,7 @@ byte *FileManager::searchCat(const Common::String &file, int a2) {
secondaryFilename = "RES_LIN.RES";
break;
case 4:
case RES_ANI:
if (!f.exists("RES_ANI.CAT"))
return g_PTRNUL;
@ -137,7 +137,7 @@ byte *FileManager::searchCat(const Common::String &file, int a2) {
secondaryFilename = "RES_ANI.RES";
break;
case 5:
case RES_PER:
if (!f.exists("RES_PER.CAT"))
return g_PTRNUL;
@ -145,28 +145,28 @@ byte *FileManager::searchCat(const Common::String &file, int a2) {
secondaryFilename = "RES_PER.RES";
break;
case 6:
case RES_PIC:
if (!f.exists("PIC.CAT"))
return g_PTRNUL;
ptr = loadFile("PIC.CAT");
break;
case 7:
case RES_SAN:
if (!f.exists("RES_SAN.CAT"))
return g_PTRNUL;
ptr = loadFile("RES_SAN.CAT");
break;
case 8:
case RES_SLI:
if (!f.exists("RES_SLI.CAT"))
return g_PTRNUL;
ptr = loadFile("RES_SLI.CAT");
break;
case 9: {
case RES_VOI: {
Common::String tmpFilename;
if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
tmpFilename = "ENG_VOI.CAT";

View File

@ -32,6 +32,11 @@ namespace Hopkins {
class HopkinsEngine;
// CHECKME: RES_ANI looks unused
enum CatMode { RES_INI = 1, RES_REP = 2, RES_LIN = 3, RES_ANI = 4,
RES_PER = 5, RES_PIC = 6, RES_SAN = 7, RES_SLI = 8,
RES_VOI = 9 };
class FileManager {
public:
HopkinsEngine *_vm;
@ -43,7 +48,7 @@ public:
byte *loadFile(const Common::String &file);
int readStream(Common::ReadStream &stream, void *buf, size_t nbytes);
void initCensorship();
byte *searchCat(const Common::String &file, int a2);
byte *searchCat(const Common::String &file, CatMode mode);
uint32 fileSize(const Common::String &filename);
};

View File

@ -193,7 +193,7 @@ void GraphicsManager::loadScreen(const Common::String &file) {
Common::File f;
bool flag = true;
if (_vm->_fileManager.searchCat(file, 6) == g_PTRNUL) {
if (_vm->_fileManager.searchCat(file, RES_PIC) == g_PTRNUL) {
if (!f.open(file))
error("loadScreen - %s", file.c_str());
@ -1678,7 +1678,7 @@ void GraphicsManager::displayFont(byte *surface, const byte *spriteData, int xp,
void GraphicsManager::initScreen(const Common::String &file, int mode, bool initializeScreen) {
Common::String filename = file + ".ini";
byte *ptr = _vm->_fileManager.searchCat(filename, 1);
byte *ptr = _vm->_fileManager.searchCat(filename, RES_INI);
if (ptr == g_PTRNUL) {
ptr = _vm->_fileManager.loadFile(filename);
@ -1687,7 +1687,7 @@ void GraphicsManager::initScreen(const Common::String &file, int mode, bool init
filename = file + ".spr";
_vm->_globals.SPRITE_ECRAN = _vm->_globals.freeMemory(_vm->_globals.SPRITE_ECRAN);
if (initializeScreen) {
_vm->_globals.SPRITE_ECRAN = _vm->_fileManager.searchCat(filename, 8);
_vm->_globals.SPRITE_ECRAN = _vm->_fileManager.searchCat(filename, RES_SLI);
if (_vm->_globals.SPRITE_ECRAN) {
_vm->_globals.SPRITE_ECRAN = _vm->_fileManager.loadFile(filename);
} else {
@ -1696,7 +1696,7 @@ void GraphicsManager::initScreen(const Common::String &file, int mode, bool init
}
}
if (READ_BE_UINT24(ptr) != MKTAG24('I', 'N', 'I')) {
error("Error, file not ini");
error("Invalid INI File %s", file);
} else {
bool doneFlag = false;
int dataOffset = 1;
@ -1722,7 +1722,7 @@ void GraphicsManager::initScreen(const Common::String &file, int mode, bool init
_vm->_globals._answerBuffer = _vm->_globals.freeMemory(_vm->_globals._answerBuffer);
filename = file + ".rep";
byte *dataP = _vm->_fileManager.searchCat(filename, 2);
byte *dataP = _vm->_fileManager.searchCat(filename, RES_REP);
if (dataP == g_PTRNUL)
dataP = _vm->_fileManager.loadFile(filename);

View File

@ -2535,7 +2535,7 @@ void ObjectsManager::OPTI_OBJET() {
int lastOpcodeResult = 1;
file = "OBJET1.ini";
data = _vm->_fileManager.searchCat(file, 1);
data = _vm->_fileManager.searchCat(file, RES_INI);
if (data == g_PTRNUL) {
data = _vm->_fileManager.loadFile(file);
if (data == g_PTRNUL)
@ -3047,7 +3047,7 @@ int ObjectsManager::getBobFrameIndex(int idx) {
void ObjectsManager::loadLinkFile(const Common::String &file) {
Common::File f;
Common::String filename = file + ".LNK";
byte *ptr = _vm->_fileManager.searchCat(filename, 3);
byte *ptr = _vm->_fileManager.searchCat(filename, RES_LIN);
size_t nbytes = _vm->_globals._catalogSize;
if (ptr == g_PTRNUL) {
if (!f.open(filename))
@ -3068,7 +3068,7 @@ void ObjectsManager::loadLinkFile(const Common::String &file) {
Common::String filename2 = Common::String((const char *)ptr + 1000);
if (!filename2.empty()) {
_vm->_globals._hidingItemData[1] = _vm->_fileManager.searchCat(filename2, 8);
_vm->_globals._hidingItemData[1] = _vm->_fileManager.searchCat(filename2, RES_SLI);
if (_vm->_globals._hidingItemData[1] || _vm->_globals._hidingItemData[1] == g_PTRNUL) {
_vm->_globals._hidingItemData[1] = _vm->_fileManager.loadFile(filename2);

View File

@ -520,7 +520,7 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) {
filename = Common::String::format("%s%d", prefix.c_str(), mappedFileNumber);
if (!_vm->_fileManager.searchCat(filename + ".WAV", 9)) {
if (!_vm->_fileManager.searchCat(filename + ".WAV", RES_VOI)) {
if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
filename = "ENG_VOI.RES";
// Win95 and Linux versions uses another set of names
@ -533,7 +533,7 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) {
catPos = _vm->_globals._catalogPos;
catLen = _vm->_globals._catalogSize;
} else if (!_vm->_fileManager.searchCat(filename + ".APC", 9)) {
} else if (!_vm->_fileManager.searchCat(filename + ".APC", RES_VOI)) {
if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
filename = "ENG_VOI.RES";
// Win95 and Linux versions uses another set of names
@ -546,7 +546,7 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) {
catPos = _vm->_globals._catalogPos;
catLen = _vm->_globals._catalogSize;
} else if (!_vm->_fileManager.searchCat(filename + ".RAW", 9)) {
} else if (!_vm->_fileManager.searchCat(filename + ".RAW", RES_VOI)) {
if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS)
filename = "ENG_VOI.RES";
// Win95 and Linux versions uses another set of names

View File

@ -58,7 +58,7 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
_vm->_graphicsManager._scrollStatus = 1;
bool oldDisableInventFl = _vm->_globals._disableInventFl;
_vm->_globals._disableInventFl = true;
_characterBuffer = _vm->_fileManager.searchCat(filename, 5);
_characterBuffer = _vm->_fileManager.searchCat(filename, RES_PER);
_characterSize = _vm->_globals._catalogSize;
if (_characterBuffer == g_PTRNUL) {
_characterBuffer = _vm->_fileManager.loadFile(filename);
@ -79,7 +79,7 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename)
}
_dialogueMesgId1 = READ_LE_INT16((uint16 *)_characterBuffer + 40);
_paletteBufferIdx = 20 * READ_LE_INT16((uint16 *)_characterBuffer + 42) + 110;
_characterSprite = _vm->_fileManager.searchCat(spriteFilename, 7);
_characterSprite = _vm->_fileManager.searchCat(spriteFilename, RES_SAN);
if (_characterSprite) {
_characterSprite = _vm->_objectsManager.loadSprite(spriteFilename);
} else {
@ -158,7 +158,7 @@ void TalkManager::startStaticCharacterDialogue(const Common::String &filename) {
// TODO: The original disables the mouse cursor here
bool oldDisableInventFl = _vm->_globals._disableInventFl;
_vm->_globals._disableInventFl = true;
_characterBuffer = _vm->_fileManager.searchCat(filename, 5);
_characterBuffer = _vm->_fileManager.searchCat(filename, RES_PER);
_characterSize = _vm->_globals._catalogSize;
if (_characterBuffer == g_PTRNUL) {
_characterBuffer = _vm->_fileManager.loadFile(filename);
@ -980,7 +980,7 @@ void TalkManager::animateObject(const Common::String &a2) {
_vm->_objectsManager._zoneNum = -1;
_vm->_eventsManager._mouseCursorId = 4;
_vm->_eventsManager.changeMouseCursor(0);
_characterBuffer = _vm->_fileManager.searchCat(a2, 5);
_characterBuffer = _vm->_fileManager.searchCat(a2, RES_PER);
_characterSize = _vm->_globals._catalogSize;
if (_characterBuffer == g_PTRNUL) {
_characterBuffer = _vm->_fileManager.loadFile(a2);
@ -996,7 +996,7 @@ void TalkManager::animateObject(const Common::String &a2) {
if (curScreenFilename == "NULL")
curScreenFilename = Common::String::format("IM%d", _vm->_globals._screenId);
_characterSprite = _vm->_fileManager.searchCat(spriteFilename, 7);
_characterSprite = _vm->_fileManager.searchCat(spriteFilename, RES_SAN);
if (_characterSprite)
_characterSprite = _vm->_objectsManager.loadSprite(spriteFilename);
else