- IHNM Mac loads correctly again

- Removed isBigEndian from GameSoundInfo
- Removed GF_BIG_ENDIAN_DATA
- Stopped loading the options panel for non-interactive ITE demos (it doesn't exist)
- Fixed crash when exiting from non-interactive ITE demos

svn-id: r35615
This commit is contained in:
Filippos Karapetis 2008-12-29 17:30:29 +00:00
parent 842af1ee4a
commit 9a5f45a40c
7 changed files with 41 additions and 36 deletions

View file

@ -56,7 +56,7 @@ struct SAGAGameDescription {
const GamePatchDescription *patchDescriptions; const GamePatchDescription *patchDescriptions;
}; };
bool SagaEngine::isBigEndian() const { return (_gameDescription->features & GF_BIG_ENDIAN_DATA) != 0; } bool SagaEngine::isBigEndian() const { return isMacResources() && getGameId() == GID_ITE; }
bool SagaEngine::isMacResources() const { return (getPlatform() == Common::kPlatformMacintosh); } bool SagaEngine::isMacResources() const { return (getPlatform() == Common::kPlatformMacintosh); }
const GameResourceDescription *SagaEngine::getResourceDescription() { return _gameDescription->resourceDescription; } const GameResourceDescription *SagaEngine::getResourceDescription() { return _gameDescription->resourceDescription; }
const GameSoundInfo *SagaEngine::getVoiceInfo() const { return _gameDescription->voiceInfo; } const GameSoundInfo *SagaEngine::getVoiceInfo() const { return _gameDescription->voiceInfo; }
@ -65,7 +65,6 @@ const GameSoundInfo *SagaEngine::getMusicInfo() const {
static GameSoundInfo musicInfo; static GameSoundInfo musicInfo;
musicInfo.resourceType = kSoundPCM; musicInfo.resourceType = kSoundPCM;
musicInfo.sampleBits = 16; musicInfo.sampleBits = 16;
musicInfo.isBigEndian = false;
musicInfo.isSigned = true; musicInfo.isSigned = true;
return &musicInfo; return &musicInfo;

View file

@ -112,14 +112,14 @@ static const GameFontDescription IHNMDEMO_GameFonts[] = { {2}, {3}, {4} };
// Font 6 is kIHNMFont8, font 8 is kIHNMMainFont // Font 6 is kIHNMFont8, font 8 is kIHNMMainFont
static const GameFontDescription IHNMCD_GameFonts[] = { {2}, {3}, {4}, {5}, {6}, {7}, {8} }; static const GameFontDescription IHNMCD_GameFonts[] = { {2}, {3}, {4}, {5}, {6}, {7}, {8} };
// sampleBits, isBigEndian, isSigned // sampleBits, isSigned
static const GameSoundInfo ITEPC_GameSound = { kSoundPCM, 16, false, true }; static const GameSoundInfo ITEPC_GameSound = { kSoundPCM, 16, true };
static const GameSoundInfo ITEWINDEMO1_GameSound = { kSoundPCM, 8, false, false }; static const GameSoundInfo ITEWINDEMO1_GameSound = { kSoundPCM, 8, false };
static const GameSoundInfo ITEMACCD_G_GameSound = { kSoundMacPCM, 8, false, false }; static const GameSoundInfo ITEMACCD_G_GameSound = { kSoundMacPCM, 8, false };
static const GameSoundInfo ITEDISK_GameSound = { kSoundVOC, -1, false, true }; static const GameSoundInfo ITEDISK_GameSound = { kSoundVOC, -1, true };
static const GameSoundInfo ITEDEMO_GameVoice = { kSoundVOX, 16, false, true }; static const GameSoundInfo ITEDEMO_GameVoice = { kSoundVOX, 16, true };
static const GameSoundInfo IHNM_GameSound = { kSoundWAV, -1, false, true }; static const GameSoundInfo IHNM_GameSound = { kSoundWAV, -1, true };
static const GameSoundInfo MAC_GameSound = { kSoundPCM, 16, true, true }; static const GameSoundInfo MAC_GameSound = { kSoundPCM, 16, true };
// Patch files. Files not found will be ignored // Patch files. Files not found will be ignored
static const GamePatchDescription ITEPatch_Files[] = { static const GamePatchDescription ITEPatch_Files[] = {
@ -230,7 +230,7 @@ static const SAGAGameDescription gameDescriptions[] = {
Common::ADGF_DEMO Common::ADGF_DEMO
}, },
GID_ITE, GID_ITE,
GF_BIG_ENDIAN_DATA | GF_WYRMKEEP | GF_SCENE_SUBSTITUTES | GF_MONO_MUSIC, GF_WYRMKEEP | GF_SCENE_SUBSTITUTES | GF_MONO_MUSIC,
ITE_DEFAULT_SCENE, ITE_DEFAULT_SCENE,
&ITE_Resources, &ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts), ARRAYSIZE(ITEWINDEMO_GameFonts),
@ -257,7 +257,7 @@ static const SAGAGameDescription gameDescriptions[] = {
Common::ADGF_DEMO Common::ADGF_DEMO
}, },
GID_ITE, GID_ITE,
GF_BIG_ENDIAN_DATA | GF_WYRMKEEP | GF_NON_INTERACTIVE, GF_WYRMKEEP | GF_NON_INTERACTIVE,
ITE_DEFAULT_SCENE, ITE_DEFAULT_SCENE,
&ITE_Resources, &ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts), ARRAYSIZE(ITEWINDEMO_GameFonts),
@ -345,7 +345,7 @@ static const SAGAGameDescription gameDescriptions[] = {
Common::ADGF_NO_FLAGS Common::ADGF_NO_FLAGS
}, },
GID_ITE, GID_ITE,
GF_BIG_ENDIAN_DATA, 0,
ITE_DEFAULT_SCENE, ITE_DEFAULT_SCENE,
&ITE_Resources, &ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts), ARRAYSIZE(ITEWINDEMO_GameFonts),
@ -370,7 +370,7 @@ static const SAGAGameDescription gameDescriptions[] = {
Common::ADGF_NO_FLAGS Common::ADGF_NO_FLAGS
}, },
GID_ITE, GID_ITE,
GF_BIG_ENDIAN_DATA | GF_WYRMKEEP, GF_WYRMKEEP,
ITE_DEFAULT_SCENE, ITE_DEFAULT_SCENE,
&ITE_Resources, &ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts), ARRAYSIZE(ITEWINDEMO_GameFonts),
@ -825,7 +825,7 @@ static const SAGAGameDescription gameDescriptions[] = {
Common::ADGF_NO_FLAGS Common::ADGF_NO_FLAGS
}, },
GID_IHNM, GID_IHNM,
0, // GF_BIG_ENDIAN_DATA 0,
IHNM_DEFAULT_SCENE, IHNM_DEFAULT_SCENE,
&IHNM_Resources, &IHNM_Resources,
ARRAYSIZE(IHNMCD_GameFonts), ARRAYSIZE(IHNMCD_GameFonts),

View file

@ -166,13 +166,19 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
free(resource); free(resource);
// Option panel // Option panel
_optionPanel.buttons = _vm->getDisplayInfo().optionPanelButtons; if (!(_vm->getFeatures() & GF_NON_INTERACTIVE)) {
_optionPanel.buttonsCount = _vm->getDisplayInfo().optionPanelButtonsCount; _optionPanel.buttons = _vm->getDisplayInfo().optionPanelButtons;
_optionPanel.buttonsCount = _vm->getDisplayInfo().optionPanelButtonsCount;
_vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->optionPanelResourceId, resource, resourceLength); _vm->_resource->loadResource(_interfaceContext, _vm->getResourceDescription()->optionPanelResourceId, resource, resourceLength);
_vm->decodeBGImage(resource, resourceLength, &_optionPanel.image, _vm->decodeBGImage(resource, resourceLength, &_optionPanel.image,
&_optionPanel.imageLength, &_optionPanel.imageWidth, &_optionPanel.imageHeight); &_optionPanel.imageLength, &_optionPanel.imageWidth, &_optionPanel.imageHeight);
free(resource); free(resource);
} else {
_optionPanel.buttons = NULL;
_optionPanel.buttonsCount = 0;
_optionPanel.sprites.spriteCount = 0;
}
// Quit panel // Quit panel
if (_vm->getGameId() == GID_IHNM) { if (_vm->getGameId() == GID_IHNM) {

View file

@ -433,7 +433,7 @@ bool Resource::createContexts() {
} else if (!soundFileInArray && i == soundFileIndex) { } else if (!soundFileInArray && i == soundFileIndex) {
context->fileName = soundFileName; context->fileName = soundFileName;
context->fileType = GAME_SOUNDFILE; context->fileType = GAME_SOUNDFILE;
} else if (_vm->_voiceFilesExist && i == voicesFileIndex) { } else if (_vm->_voiceFilesExist && i == voicesFileIndex && !(_vm->getGameId() == GID_IHNM && _vm->isMacResources())) {
context->fileName = _voicesFileName[0]; context->fileName = _voicesFileName[0];
// can be GAME_VOICEFILE or GAME_SOUNDFILE | GAME_VOICEFILE or GAME_VOICEFILE | GAME_SWAPENDIAN // can be GAME_VOICEFILE or GAME_SOUNDFILE | GAME_VOICEFILE or GAME_VOICEFILE | GAME_SWAPENDIAN
context->fileType = voiceFileType; context->fileType = voiceFileType;

View file

@ -116,16 +116,15 @@ enum GameFileTypes {
}; };
enum GameFeatures { enum GameFeatures {
GF_BIG_ENDIAN_DATA = 1 << 0, GF_WYRMKEEP = 1 << 0,
GF_WYRMKEEP = 1 << 1, GF_ITE_FLOPPY = 1 << 1,
GF_ITE_FLOPPY = 1 << 2, GF_SCENE_SUBSTITUTES = 1 << 2,
GF_SCENE_SUBSTITUTES = 1 << 3, GF_COMPRESSED_SOUNDS = 1 << 3,
GF_COMPRESSED_SOUNDS = 1 << 4, GF_NON_INTERACTIVE = 1 << 4,
GF_NON_INTERACTIVE = 1 << 5, GF_OLD_ITE_DOS = 1 << 5,
GF_OLD_ITE_DOS = 1 << 6, GF_MONO_MUSIC = 1 << 6,
GF_MONO_MUSIC = 1 << 7, GF_EXTRA_ITE_CREDITS = 1 << 7,
GF_EXTRA_ITE_CREDITS = 1 << 8, GF_IHNM_DEMO = 1 << 8
GF_IHNM_DEMO = 1 << 9
}; };
enum VerbTypeIds { enum VerbTypeIds {
@ -293,7 +292,6 @@ struct GameDisplayInfo;
struct GameSoundInfo { struct GameSoundInfo {
GameSoundTypes resourceType; GameSoundTypes resourceType;
int sampleBits; int sampleBits;
bool isBigEndian;
bool isSigned; bool isSigned;
}; };

View file

@ -270,7 +270,7 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
} }
buffer.isBigEndian = soundInfo->isBigEndian; buffer.isBigEndian = _vm->isMacResources();
buffer.soundType = resourceType; buffer.soundType = resourceType;
buffer.originalSize = 0; buffer.originalSize = 0;

View file

@ -49,8 +49,10 @@ struct SpriteList {
SpriteInfo *infoList; SpriteInfo *infoList;
void freeMem() { void freeMem() {
int i; if (!spriteListResourceId)
for (i = 0; i < spriteCount; i++) { return;
for (int i = 0; i < spriteCount; i++) {
free(infoList[i].decodedBuffer); free(infoList[i].decodedBuffer);
} }
free(infoList); free(infoList);