KYRA: - add sfx support for PC98-Version
svn-id: r44074
This commit is contained in:
parent
9cc0dc3d91
commit
b73f9ab41e
9 changed files with 108 additions and 10 deletions
|
@ -195,7 +195,10 @@ Common::Error KyraEngine_LoK::init() {
|
|||
if (!_sound->init())
|
||||
error("Couldn't init sound");
|
||||
|
||||
_sound->loadSoundFile(0);
|
||||
if (_flags.platform == Common::kPlatformPC98)
|
||||
_sound->loadSoundFile(_introSfxDataPC98, _introSfxDataPC98Size);
|
||||
else
|
||||
_sound->loadSoundFile(0);
|
||||
|
||||
setupButtonData();
|
||||
|
||||
|
@ -334,8 +337,13 @@ Common::Error KyraEngine_LoK::go() {
|
|||
void KyraEngine_LoK::startup() {
|
||||
static const uint8 colorMap[] = { 0, 0, 0, 0, 12, 12, 12, 0, 0, 0, 0, 0 };
|
||||
_screen->setTextColorMap(colorMap);
|
||||
|
||||
_sound->setSoundList(&_soundData[kMusicIngame]);
|
||||
_sound->loadSoundFile(0);
|
||||
if (_flags.platform == Common::kPlatformPC98)
|
||||
_sound->loadSoundFile("se.dat");
|
||||
else
|
||||
_sound->loadSoundFile(0);
|
||||
|
||||
// _screen->setFont(Screen::FID_6_FNT);
|
||||
_screen->setAnimBlockPtr(3750);
|
||||
memset(_sceneAnimTable, 0, sizeof(_sceneAnimTable));
|
||||
|
|
|
@ -510,6 +510,9 @@ protected:
|
|||
static const int8 _amigaTrackMap[];
|
||||
static const int _amigaTrackMapSize;
|
||||
|
||||
static const uint8 _introSfxDataPC98[];
|
||||
static const int _introSfxDataPC98Size;
|
||||
|
||||
// TODO: get rid of all variables having pointers to the static resources if possible
|
||||
// i.e. let them directly use the _staticres functions
|
||||
void initStaticResource();
|
||||
|
|
|
@ -415,6 +415,14 @@ void SeqPlayer::s1_fillRect() {
|
|||
void SeqPlayer::s1_playEffect() {
|
||||
uint8 track = *_seqData++;
|
||||
_vm->delay(3 * _vm->tickLength());
|
||||
|
||||
if (_vm->gameFlags().platform == Common::kPlatformPC98) {
|
||||
if (track > 21 && track < 38)
|
||||
track -= 22;
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
_sound->playSoundEffect(track);
|
||||
}
|
||||
|
||||
|
|
|
@ -107,6 +107,12 @@ public:
|
|||
*/
|
||||
virtual void loadSoundFile(Common::String file) = 0;
|
||||
|
||||
/**
|
||||
* Load hard coded data for playing music
|
||||
* (and somtimes sound effects) from.
|
||||
*/
|
||||
virtual void loadSoundFile(const uint8 *data, int len) { }
|
||||
|
||||
/**
|
||||
* Load a sound file for playing sound
|
||||
* effects from.
|
||||
|
@ -268,7 +274,8 @@ public:
|
|||
bool hasSoundFile(uint file) const { return _music->hasSoundFile(file) && _sfx->hasSoundFile(file); }
|
||||
void loadSoundFile(uint file) { _music->loadSoundFile(file); _sfx->loadSoundFile(file); }
|
||||
void loadSoundFile(Common::String file) { _music->loadSoundFile(file); _sfx->loadSoundFile(file); }
|
||||
|
||||
|
||||
void loadSoundFile(const uint8 *data, int len) { _sfx->loadSoundFile(data, len); }
|
||||
void loadSfxFile(Common::String file) { _sfx->loadSoundFile(file); }
|
||||
|
||||
void playTrack(uint8 track) { _music->playTrack(track); }
|
||||
|
|
|
@ -72,6 +72,7 @@ public:
|
|||
|
||||
void loadSoundFile(uint file);
|
||||
void loadSoundFile(Common::String file);
|
||||
void loadSoundFile(const uint8 *data, int len) {}
|
||||
|
||||
void playTrack(uint8 track);
|
||||
void haltTrack();
|
||||
|
|
|
@ -171,7 +171,8 @@ public:
|
|||
|
||||
void process() {}
|
||||
void loadSoundFile(uint file) {}
|
||||
void loadSoundFile(Common::String) {}
|
||||
void loadSoundFile(Common::String file);
|
||||
void loadSoundFile(const uint8 *data, int len);
|
||||
|
||||
void playTrack(uint8 track);
|
||||
void haltTrack();
|
||||
|
|
|
@ -29,6 +29,13 @@
|
|||
namespace Kyra {
|
||||
|
||||
void KyraEngine_LoK::snd_playSoundEffect(int track, int volume) {
|
||||
if (_flags.platform == Common::kPlatformPC98) {
|
||||
if (track < 16 || track > 119)
|
||||
track = 58;
|
||||
else
|
||||
track -= 16;
|
||||
}
|
||||
|
||||
if ((_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) && track == 49) {
|
||||
snd_playWanderScoreViaMap(56, 1);
|
||||
return;
|
||||
|
|
|
@ -4069,12 +4069,25 @@ SoundPC98::~SoundPC98() {
|
|||
|
||||
bool SoundPC98::init() {
|
||||
_driver = new TownsPC98_OpnDriver(_mixer, TownsPC98_OpnDriver::OD_TYPE26);
|
||||
_sfxTrackData = _vm->resource()->fileData("se.dat", 0);
|
||||
if (!_sfxTrackData)
|
||||
return false;
|
||||
|
||||
return _driver->init();
|
||||
}
|
||||
|
||||
void SoundPC98::loadSoundFile(Common::String file) {
|
||||
if (_sfxTrackData)
|
||||
delete _sfxTrackData;
|
||||
|
||||
_sfxTrackData = _vm->resource()->fileData(file.c_str(), 0);
|
||||
}
|
||||
|
||||
void SoundPC98::loadSoundFile(const uint8 *data, int len) {
|
||||
if (_sfxTrackData)
|
||||
delete _sfxTrackData;
|
||||
|
||||
_sfxTrackData = new uint8[len];
|
||||
memcpy(_sfxTrackData, data, len);
|
||||
}
|
||||
|
||||
void SoundPC98::playTrack(uint8 track) {
|
||||
track += extraOffset();
|
||||
|
||||
|
@ -4119,9 +4132,6 @@ void SoundPC98::playSoundEffect(uint8 track) {
|
|||
if (!_sfxTrackData)
|
||||
return;
|
||||
|
||||
// This has been disabled for now since I don't know
|
||||
// how to make up the correct track number. It probably
|
||||
// needs a map.
|
||||
_driver->loadSoundEffectData(_sfxTrackData, track);
|
||||
}
|
||||
|
||||
|
|
|
@ -2441,6 +2441,59 @@ const int8 KyraEngine_LoK::_amigaTrackMap[] = {
|
|||
|
||||
const int KyraEngine_LoK::_amigaTrackMapSize = ARRAYSIZE(KyraEngine_LoK::_amigaTrackMap);
|
||||
|
||||
const uint8 KyraEngine_LoK::_introSfxDataPC98[] = {
|
||||
0x56, 0x00, 0x43, 0x00, 0x7C, 0x00, 0x69, 0x00, 0xA2, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xB5, 0x00,
|
||||
0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x45, 0x01,
|
||||
0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x68, 0x01, 0x8D, 0x01, 0x7C, 0x01, 0xBD, 0x01, 0x9E, 0x01,
|
||||
0xF0, 0x01, 0xDC, 0x01, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x2B, 0x02, 0x59, 0x02, 0x40, 0x02,
|
||||
0xF1, 0x00, 0xFF, 0xF1, 0x09, 0x32, 0x81, 0x49, 0x81, 0x52, 0x81, 0x59, 0x81, 0xF7, 0x01, 0x03,
|
||||
0xC7, 0x00, 0xFF, 0x42, 0x32, 0xFF, 0xF1, 0x05, 0x30, 0x81, 0x47, 0x81, 0x50, 0x81, 0x57, 0x81,
|
||||
0xF7, 0x01, 0x03, 0xC7, 0x00, 0xFF, 0x41, 0x32, 0xFF, 0xF1, 0x0C, 0x32, 0x81, 0x49, 0x81, 0x52,
|
||||
0x81, 0x59, 0x81, 0xF7, 0x01, 0x03, 0xC7, 0x00, 0xFF, 0x42, 0x32, 0xFF, 0xF1, 0x08, 0x30, 0x81,
|
||||
0x47, 0x81, 0x50, 0x81, 0x57, 0x81, 0xF7, 0x01, 0x03, 0xC7, 0x00, 0xFF, 0x41, 0x32, 0xFF, 0xF1,
|
||||
0x0F, 0x32, 0x81, 0x49, 0x81, 0x52, 0x81, 0x59, 0x81, 0xF7, 0x01, 0x03, 0xC7, 0x00, 0xFF, 0x42,
|
||||
0x32, 0xFF, 0xF1, 0x0C, 0x30, 0x81, 0x47, 0x81, 0x50, 0x81, 0x57, 0x81, 0xF7, 0x01, 0x03, 0xC7,
|
||||
0x00, 0xFF, 0x41, 0x32, 0xFF, 0xF1, 0x0A, 0x39, 0x01, 0x44, 0x01, 0x49, 0x01, 0xFC, 0xF6, 0x05,
|
||||
0x05, 0xB7, 0x00, 0x39, 0x01, 0x44, 0x01, 0x49, 0x01, 0xF6, 0x02, 0x02, 0xC3, 0x00, 0xFB, 0xFB,
|
||||
0xFB, 0xFB, 0x39, 0x01, 0x44, 0x01, 0x49, 0x01, 0xF6, 0x02, 0x02, 0xD2, 0x00, 0xFC, 0xFC, 0xF6,
|
||||
0x05, 0x05, 0xC3, 0x00, 0xFF, 0xF1, 0x0F, 0x69, 0x81, 0x59, 0x81, 0x49, 0x01, 0x39, 0x81, 0x54,
|
||||
0x01, 0xF6, 0x02, 0x02, 0xED, 0x00, 0x80, 0x04, 0xFB, 0xFB, 0xFB, 0xF6, 0x03, 0x03, 0xED, 0x00,
|
||||
0xFF, 0xF1, 0x0C, 0x69, 0x81, 0x49, 0x81, 0x59, 0x81, 0x39, 0x01, 0x62, 0x81, 0x57, 0x01, 0x60,
|
||||
0x01, 0xFC, 0xF6, 0x03, 0x03, 0x0B, 0x01, 0x62, 0x81, 0x57, 0x01, 0x60, 0x01, 0xFB, 0xF6, 0x03,
|
||||
0x03, 0x17, 0x01, 0xFB, 0xFB, 0xFB, 0xF6, 0x05, 0x05, 0x0B, 0x01, 0xFF, 0xF1, 0x0F, 0xF4, 0x09,
|
||||
0xF7, 0x01, 0x01, 0x54, 0x01, 0xC8, 0x27, 0x09, 0xF4, 0x42, 0x10, 0x08, 0xFB, 0xF6, 0x0E, 0x0E,
|
||||
0x3A, 0x01, 0xF4, 0x80, 0xFF, 0xF1, 0x08, 0xF4, 0x41, 0x10, 0x01, 0xFC, 0xF6, 0x07, 0x07, 0x49,
|
||||
0x01, 0xF4, 0x80, 0xFF, 0xF1, 0x0C, 0xF9, 0x0E, 0xFA, 0x12, 0x64, 0x04, 0x0B, 0x60, 0x03, 0x80,
|
||||
0x03, 0x60, 0x03, 0x80, 0x03, 0x60, 0x12, 0xFF, 0xF1, 0x0C, 0xF9, 0x0E, 0xFA, 0x12, 0x18, 0x04,
|
||||
0x0B, 0x70, 0x02, 0x80, 0x02, 0x72, 0x02, 0x80, 0x02, 0x73, 0x0B, 0xFF, 0xF1, 0x0E, 0xF3, 0x00,
|
||||
0xF7, 0x01, 0x05, 0x39, 0xFF, 0xFF, 0x30, 0x30, 0xF1, 0x07, 0x3B, 0x0A, 0xFF, 0xF1, 0x0C, 0xF3,
|
||||
0x0A, 0xF7, 0x01, 0x05, 0x39, 0xFF, 0xFF, 0x60, 0x30, 0xF1, 0x05, 0x6B, 0x0A, 0xFF, 0xF1, 0x0E,
|
||||
0xF3, 0x00, 0xF7, 0x01, 0x05, 0x39, 0xFF, 0xFF, 0x30, 0x30, 0xF1, 0x0C, 0x69, 0x01, 0x75, 0x02,
|
||||
0x72, 0x01, 0x64, 0x02, 0x70, 0x01, 0xFB, 0xF6, 0x0B, 0x0B, 0xAC, 0x01, 0xFF, 0xF1, 0x0C, 0xF3,
|
||||
0x0A, 0xF7, 0x01, 0x05, 0x39, 0xFF, 0xFF, 0x60, 0x31, 0xF1, 0x0A, 0x69, 0x01, 0x75, 0x02, 0x72,
|
||||
0x01, 0x64, 0x02, 0x70, 0x01, 0xFB, 0xF6, 0x09, 0x09, 0xCB, 0x01, 0xFF, 0xF1, 0x0F, 0xF3, 0x00,
|
||||
0x24, 0x81, 0x29, 0x01, 0xF6, 0x08, 0x08, 0xE0, 0x01, 0xFB, 0xF6, 0x0E, 0x0E, 0xE0, 0x01, 0xFF,
|
||||
0xF1, 0x0F, 0xF3, 0x0D, 0x24, 0x81, 0x22, 0x01, 0xF6, 0x08, 0x08, 0xF4, 0x01, 0xFB, 0xF6, 0x0E,
|
||||
0x0E, 0xF4, 0x01, 0xFF, 0xF1, 0x0C, 0x29, 0x81, 0xFC, 0x24, 0x81, 0xFC, 0x29, 0x81, 0xFC, 0x34,
|
||||
0x81, 0x35, 0x81, 0x36, 0x81, 0x35, 0x81, 0x34, 0x81, 0x33, 0x81, 0x32, 0x81, 0x33, 0x01, 0xF6,
|
||||
0x02, 0x02, 0x0F, 0x02, 0xFB, 0xF6, 0x0E, 0x0E, 0x0F, 0x02, 0xFF, 0xF1, 0x0F, 0xF4, 0x0B, 0x29,
|
||||
0x81, 0x27, 0x81, 0xF4, 0x43, 0x29, 0x02, 0xFB, 0xF6, 0x0E, 0x0E, 0x35, 0x02, 0xF4, 0x80, 0xFF,
|
||||
0xF1, 0x0E, 0xF7, 0x01, 0x01, 0x09, 0x03, 0xFF, 0x44, 0x08, 0xF1, 0x0C, 0xF7, 0x01, 0x04, 0xC8,
|
||||
0x00, 0xFF, 0x1B, 0x1E, 0xF1, 0x06, 0x1B, 0x1E, 0xFF, 0xF1, 0x0F, 0xF4, 0x4F, 0xF7, 0x01, 0x05,
|
||||
0xC7, 0x00, 0xFF, 0x19, 0x04, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0xFB, 0x10, 0x04,
|
||||
0xFB, 0xF6, 0x07, 0x07, 0x6E, 0x02, 0xF1, 0x08, 0x10, 0x04, 0xFB, 0xF6, 0x07, 0x07, 0x78, 0x02,
|
||||
0xF4, 0x80, 0xFF, 0xF1, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
|
||||
};
|
||||
|
||||
const int KyraEngine_LoK::_introSfxDataPC98Size = ARRAYSIZE(KyraEngine_LoK::_introSfxDataPC98);
|
||||
|
||||
// kyra engine v2 static data
|
||||
|
||||
const int GUI_v2::_sliderBarsPosition[] = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue