aboutsummaryrefslogtreecommitdiff
path: root/engines/saga
diff options
context:
space:
mode:
authorFilippos Karapetis2009-01-04 15:44:33 +0000
committerFilippos Karapetis2009-01-04 15:44:33 +0000
commit80832ffb8fd7ff3ee82502d3083c07b4a917a344 (patch)
treefafdad6a55474aa0a783432769b97736cb2234e8 /engines/saga
parent7a0b782a3cb1f577e58da47255543bf3d506aa4e (diff)
downloadscummvm-rg350-80832ffb8fd7ff3ee82502d3083c07b4a917a344.tar.gz
scummvm-rg350-80832ffb8fd7ff3ee82502d3083c07b4a917a344.tar.bz2
scummvm-rg350-80832ffb8fd7ff3ee82502d3083c07b4a917a344.zip
Got rid of explicit game sound info
svn-id: r35727
Diffstat (limited to 'engines/saga')
-rw-r--r--engines/saga/detection.cpp12
-rw-r--r--engines/saga/detection_tables.h60
-rw-r--r--engines/saga/music.cpp6
-rw-r--r--engines/saga/saga.h12
-rw-r--r--engines/saga/sndres.cpp34
5 files changed, 19 insertions, 105 deletions
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index 8dc1e91eea..2e1a0f2833 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -51,24 +51,12 @@ struct SAGAGameDescription {
const GameResourceDescription *resourceDescription;
int fontsCount;
const GameFontDescription *fontDescriptions;
- const GameSoundInfo *voiceInfo;
- const GameSoundInfo *sfxInfo;
const GamePatchDescription *patchDescriptions;
};
bool SagaEngine::isBigEndian() const { return isMacResources() && getGameId() == GID_ITE; }
bool SagaEngine::isMacResources() const { return (getPlatform() == Common::kPlatformMacintosh); }
const GameResourceDescription *SagaEngine::getResourceDescription() { return _gameDescription->resourceDescription; }
-const GameSoundInfo *SagaEngine::getVoiceInfo() const { return _gameDescription->voiceInfo; }
-const GameSoundInfo *SagaEngine::getSfxInfo() const { return _gameDescription->sfxInfo; }
-const GameSoundInfo *SagaEngine::getMusicInfo() const {
- static GameSoundInfo musicInfo;
- musicInfo.resourceType = kSoundPCM;
- musicInfo.sampleBits = 16;
- musicInfo.isSigned = true;
-
- return &musicInfo;
-}
const GameFontDescription *SagaEngine::getFontDescription(int index) {
assert(index < _gameDescription->fontsCount);
diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index ae9d8b5148..1cf1ac902a 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -112,14 +112,6 @@ static const GameFontDescription IHNMDEMO_GameFonts[] = { {2}, {3}, {4} };
// Font 6 is kIHNMFont8, font 8 is kIHNMMainFont
static const GameFontDescription IHNMCD_GameFonts[] = { {2}, {3}, {4}, {5}, {6}, {7}, {8} };
-// Game sound overrides
-// Information for WAV, VOC, AIFF and Shorten audio files is obtained automatically. For other
-// audio types, we specify it here
-// sampleBits, isSigned
-static const GameSoundInfo ITE_GameSound = { kSoundPCM, 16, true };
-static const GameSoundInfo ITEWINDEMO1_GameSound = { kSoundPCM, 8, false };
-static const GameSoundInfo ITEDEMO_GameVoice = { kSoundVOX, 16, true };
-
// Patch files. Files not found will be ignored
static const GamePatchDescription ITEPatch_Files[] = {
{ "cave.mid", GAME_RESOURCEFILE, 9},
@@ -209,8 +201,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(ITEDEMO_GameFonts),
ITEDEMO_GameFonts,
NULL,
- NULL,
- NULL,
},
#endif
@@ -234,8 +224,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts),
ITEWINDEMO_GameFonts,
- &ITEDEMO_GameVoice,
- &ITE_GameSound,
ITEMacPatch_Files,
},
@@ -261,8 +249,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts),
ITEWINDEMO_GameFonts,
- &ITEDEMO_GameVoice,
- &ITE_GameSound,
ITEMacPatch_Files,
},
@@ -288,8 +274,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts),
ITEWINDEMO_GameFonts,
- &ITEDEMO_GameVoice,
- &ITE_GameSound,
ITEPatch_Files,
},
@@ -310,13 +294,11 @@ static const SAGAGameDescription gameDescriptions[] = {
Common::ADGF_DEMO
},
GID_ITE,
- GF_WYRMKEEP | GF_NON_INTERACTIVE,
+ GF_WYRMKEEP | GF_NON_INTERACTIVE | GF_8BIT_UNSIGNED_PCM,
ITE_DEFAULT_SCENE,
&ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts),
ITEWINDEMO_GameFonts,
- &ITEWINDEMO1_GameSound,
- &ITEWINDEMO1_GameSound,
ITEPatch_Files,
},
@@ -349,8 +331,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts),
ITEWINDEMO_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
NULL,
},
@@ -374,8 +354,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITEWINDEMO_GameFonts),
ITEWINDEMO_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
ITEMacPatch_Files,
},
@@ -407,8 +385,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
NULL,
},
@@ -438,8 +414,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
NULL,
},
@@ -463,8 +437,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
ITEPatch_Files,
},
@@ -488,8 +460,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
ITEPatch_Files,
},
@@ -513,8 +483,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
ITEPatch_Files,
},
@@ -539,8 +507,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- &ITE_GameSound,
- &ITE_GameSound,
NULL,
},
@@ -568,8 +534,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
NULL,
- NULL,
- NULL,
},
// Inherit the earth - Disk version
@@ -592,8 +556,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- NULL,
- NULL,
ITEPatch_Files,
},
@@ -617,8 +579,6 @@ static const SAGAGameDescription gameDescriptions[] = {
&ITE_Resources,
ARRAYSIZE(ITE_GameFonts),
ITE_GameFonts,
- NULL,
- NULL,
ITEPatch_Files,
},
@@ -652,8 +612,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMDEMO_GameFonts),
IHNMDEMO_GameFonts,
NULL,
- NULL,
- NULL,
},
// I Have No Mouth And I Must Scream - English CD version
@@ -685,8 +643,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMCD_GameFonts),
IHNMCD_GameFonts,
NULL,
- NULL,
- NULL,
},
// I Have No Mouth And I Must Scream - De CD version
@@ -716,8 +672,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMCD_GameFonts),
IHNMCD_GameFonts,
NULL,
- NULL,
- NULL,
},
// I Have No Mouth And I Must Scream - Sp CD version
@@ -745,8 +699,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMCD_GameFonts),
IHNMCD_GameFonts,
NULL,
- NULL,
- NULL,
},
// I Have No Mouth And I Must Scream - Fr CD version
@@ -775,8 +727,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMCD_GameFonts),
IHNMCD_GameFonts,
NULL,
- NULL,
- NULL,
},
// I Have No Mouth And I Must Scream - Italian fan CD translation
@@ -804,8 +754,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMCD_GameFonts),
IHNMCD_GameFonts,
NULL,
- NULL,
- NULL,
},
// I Have No Mouth And I Must Scream - Mac English CD
{
@@ -830,8 +778,6 @@ static const SAGAGameDescription gameDescriptions[] = {
ARRAYSIZE(IHNMCD_GameFonts),
IHNMCD_GameFonts,
NULL,
- NULL,
- NULL,
},
#endif
@@ -866,14 +812,12 @@ static const SAGAGameDescription gameDescriptions[] = {
NULL, // game resources
0, // number of fonts
NULL, // font array
- NULL, // voice info
- NULL, // SFX info
NULL,
},
#endif
- { AD_TABLE_END_MARKER, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL }
+ { AD_TABLE_END_MARKER, 0, 0, 0, NULL, 0, NULL, NULL }
};
} // End of namespace Saga
diff --git a/engines/saga/music.cpp b/engines/saga/music.cpp
index cbe7a9113c..09d7f8fd2e 100644
--- a/engines/saga/music.cpp
+++ b/engines/saga/music.cpp
@@ -56,7 +56,6 @@ private:
int16 _buf[BUFFER_SIZE];
const int16 *_bufferEnd;
const int16 *_pos;
- const GameSoundInfo *_musicInfo;
MemoryReadStream *_memoryStream;
SagaEngine *_vm;
@@ -88,11 +87,6 @@ DigitalMusicInputStream::DigitalMusicInputStream(SagaEngine *vm, ResourceContext
resourceData = context->getResourceData(resourceId);
_file = context->getFile(resourceData);
- _musicInfo = _vm->getMusicInfo();
-
- if (_musicInfo == NULL) {
- error("DigitalMusicInputStream() wrong musicInfo");
- }
_compressedStream = NULL;
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index 2a9faed883..e88e4c5e27 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -123,7 +123,8 @@ enum GameFeatures {
GF_MONO_MUSIC = 1 << 5,
GF_EXTRA_ITE_CREDITS = 1 << 6,
GF_IHNM_DEMO = 1 << 7,
- GF_LE_VOICES = 1 << 8
+ GF_LE_VOICES = 1 << 8,
+ GF_8BIT_UNSIGNED_PCM = 1 << 9
};
enum VerbTypeIds {
@@ -288,12 +289,6 @@ struct GameFontDescription {
struct GameDisplayInfo;
-struct GameSoundInfo {
- GameSoundTypes resourceType;
- int sampleBits;
- bool isSigned;
-};
-
struct GamePatchDescription {
const char *fileName;
uint16 fileType;
@@ -594,9 +589,6 @@ public:
bool isMacResources() const;
bool isSaga2() const { return getGameId() == GID_DINO || getGameId() == GID_FTA2; }
const GameResourceDescription *getResourceDescription();
- const GameSoundInfo *getVoiceInfo() const;
- const GameSoundInfo *getSfxInfo() const;
- const GameSoundInfo *getMusicInfo() const;
const GameFontDescription *getFontDescription(int index);
int getFontsCount() const;
diff --git a/engines/saga/sndres.cpp b/engines/saga/sndres.cpp
index d21dcb92e2..26d9601065 100644
--- a/engines/saga/sndres.cpp
+++ b/engines/saga/sndres.cpp
@@ -189,13 +189,11 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
Audio::AudioStream *voxStream;
size_t soundResourceLength;
bool result = false;
- GameSoundTypes resourceType;
+ GameSoundTypes resourceType = kSoundPCM;
byte *data = 0;
int rate;
int size;
byte flags = 0;
- size_t voxSize;
- const GameSoundInfo *soundInfo = 0;
Common::File* file;
if (resourceId == (uint32)-1) {
@@ -234,12 +232,6 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
Common::SeekableReadStream& readS = *file;
- if (context->fileType & GAME_VOICEFILE) {
- soundInfo = _vm->getVoiceInfo();
- } else {
- soundInfo = _vm->getSfxInfo();
- }
-
if (soundResourceLength >= 8) {
byte header[8];
@@ -254,8 +246,6 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
resourceType = kSoundAIFF;
} else if (!memcmp(header, "ajkg", 4) != 0) {
resourceType = kSoundShorten;
- } else if (soundInfo) {
- resourceType = soundInfo->resourceType;
}
bool uncompressedSound = false;
@@ -280,6 +270,7 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
}
+ // Default sound type is 16-bit PCM (used in ITE)
buffer.isBigEndian = context->isBigEndian;
if ((context->fileType & GAME_VOICEFILE) && (_vm->getFeatures() & GF_LE_VOICES))
buffer.isBigEndian = false;
@@ -287,7 +278,19 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
buffer.soundType = resourceType;
buffer.originalSize = 0;
buffer.stereo = false;
+ buffer.isSigned = true; // default for PCM and VOX
buffer.frequency = 22050; // default for PCM and VOX
+ buffer.sampleBits = 16; // default for PCM and VOX
+ if (_vm->getGameId() == GID_ITE) {
+ if (_vm->getFeatures() & GF_8BIT_UNSIGNED_PCM) { // older ITE demos
+ buffer.isSigned = false;
+ buffer.sampleBits = 8;
+ } else {
+ // Voice files in newer ITE demo versions are OKI ADPCM (VOX) encoded
+ if (!scumm_stricmp(context->fileName, "voicesd.rsc"))
+ resourceType = kSoundVOX;
+ }
+ }
buffer.buffer = NULL;
// Older Mac versions of ITE were Macbinary packed
@@ -295,8 +298,6 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
switch (resourceType) {
case kSoundPCM:
- buffer.isSigned = soundInfo->isSigned;
- buffer.sampleBits = soundInfo->sampleBits;
buffer.size = soundResourceLength - soundOffset;
if (!onlyHeader) {
buffer.buffer = (byte *) malloc(buffer.size);
@@ -307,16 +308,11 @@ bool SndRes::load(ResourceContext *context, uint32 resourceId, SoundBuffer &buff
result = true;
break;
case kSoundVOX:
- buffer.isSigned = soundInfo->isSigned;
- buffer.sampleBits = soundInfo->sampleBits;
buffer.size = soundResourceLength * 4;
if (!onlyHeader) {
voxStream = Audio::makeADPCMStream(&readS, false, soundResourceLength, Audio::kADPCMOki);
buffer.buffer = (byte *)malloc(buffer.size);
- voxSize = voxStream->readBuffer((int16*)buffer.buffer, soundResourceLength * 2);
- if (voxSize != soundResourceLength * 2) {
- error("SndRes::load() wrong VOX output size");
- }
+ voxStream->readBuffer((int16*)buffer.buffer, soundResourceLength * 2);
delete voxStream;
}
result = true;