aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dists/engine-data/kyra.datbin299643 -> 304833 bytes
-rw-r--r--engines/kyra/gui_lok.cpp20
-rw-r--r--engines/kyra/kyra_lok.cpp2
-rw-r--r--engines/kyra/kyra_lok.h7
-rw-r--r--engines/kyra/resource.h3
-rw-r--r--engines/kyra/seqplayer.cpp7
-rw-r--r--engines/kyra/sequences_lok.cpp34
-rw-r--r--engines/kyra/sound.h7
-rw-r--r--engines/kyra/sound_intern.h1
-rw-r--r--engines/kyra/sound_lok.cpp4
-rw-r--r--engines/kyra/sound_towns.cpp6
-rw-r--r--engines/kyra/staticres.cpp65
-rw-r--r--tools/create_kyradat/create_kyradat.cpp8
-rw-r--r--tools/create_kyradat/create_kyradat.h2
-rw-r--r--tools/create_kyradat/games.cpp94
-rw-r--r--tools/create_kyradat/tables.cpp88
16 files changed, 251 insertions, 97 deletions
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index 9e0912feec..100dc53976 100644
--- a/dists/engine-data/kyra.dat
+++ b/dists/engine-data/kyra.dat
Binary files differ
diff --git a/engines/kyra/gui_lok.cpp b/engines/kyra/gui_lok.cpp
index c0977225ba..5a0c0034e1 100644
--- a/engines/kyra/gui_lok.cpp
+++ b/engines/kyra/gui_lok.cpp
@@ -364,6 +364,7 @@ void GUI_LoK::setGUILabels() {
int offsetOptions = 0;
int offsetMainMenu = 0;
int offsetOn = 0;
+ int offsetPC98 = 0;
int walkspeedGarbageOffset = 36;
int menuLabelGarbageOffset = 0;
@@ -396,11 +397,14 @@ void GUI_LoK::setGUILabels() {
offsetOn = offsetMainMenu = offsetOptions = offset = 32;
} else if (_vm->gameFlags().lang == Common::DE_DEU) {
offset = offsetMainMenu = offsetOn = offsetOptions = 24;
- } else if (_vm->gameFlags().platform == Common::kPlatformFMTowns || _vm->gameFlags().platform == Common::kPlatformPC98) {
+ } else if (_vm->gameFlags().platform == Common::kPlatformFMTowns) {
offset = 1;
offsetOptions = 10;
offsetOn = 0;
walkspeedGarbageOffset = 0;
+ } else if (_vm->gameFlags().platform == Common::kPlatformPC98) {
+ offsetMainMenu = offsetOptions = offsetOn = offset = 47;
+ offsetPC98 = 1;
}
assert(offset + (_vm->gameFlags().isTalkie ? 28 : 23) < _vm->_guiStringsSize);
@@ -421,17 +425,17 @@ void GUI_LoK::setGUILabels() {
_menu[0].item[4].itemString = _vm->_guiStrings[5];
// Cancel
- _menu[2].item[5].itemString = _vm->_guiStrings[10];
+ _menu[2].item[5].itemString = _vm->_guiStrings[10 + offsetPC98];
// Enter a description of your saved game:
- _menu[3].menuNameString = _vm->_guiStrings[11];
+ _menu[3].menuNameString = _vm->_guiStrings[11 + offsetPC98];
// Save
- _menu[3].item[0].itemString = _vm->_guiStrings[12];
+ _menu[3].item[0].itemString = _vm->_guiStrings[12 + offsetPC98];
// Cancel
- _menu[3].item[1].itemString = _vm->_guiStrings[10];
+ _menu[3].item[1].itemString = _vm->_guiStrings[10 + offsetPC98];
// Rest in peace, Brandon
- _menu[4].menuNameString = _vm->_guiStrings[13];
+ _menu[4].menuNameString = _vm->_guiStrings[13 + offsetPC98];
// Load a game
_menu[4].item[0].itemString = _vm->_guiStrings[1];
// Quit playing
@@ -601,7 +605,7 @@ int GUI_LoK::saveGameMenu(Button *button) {
_screen->savePageToDisk("SEENPAGE.TMP", 0);
_menu[2].menuNameString = _vm->_guiStrings[8]; // Select a position to save to:
- _specialSavegameString = _vm->_guiStrings[9]; // [ EMPTY SLOT ]
+ _specialSavegameString = _vm->_guiStrings[_vm->gameFlags().platform == Common::kPlatformPC98 ? 10: 9]; // [ EMPTY SLOT ]
for (int i = 0; i < 5; i++)
_menu[2].item[i].callback = BUTTON_FUNCTOR(GUI_LoK, this, &GUI_LoK::saveGame);
@@ -803,7 +807,7 @@ int GUI_LoK::cancelSubMenu(Button *button) {
int GUI_LoK::quitPlaying(Button *button) {
updateMenuButton(button);
- if (quitConfirm(_vm->_guiStrings[14])) { // Are you sure you want to quit playing?
+ if (quitConfirm(_vm->_guiStrings[_vm->gameFlags().platform == Common::kPlatformPC98 ? 15 : 14])) { // Are you sure you want to quit playing?
_vm->quitGame();
} else {
initMenu(_menu[_toplevelMenu]);
diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp
index 5e7275b26c..24850c7d37 100644
--- a/engines/kyra/kyra_lok.cpp
+++ b/engines/kyra/kyra_lok.cpp
@@ -196,7 +196,7 @@ Common::Error KyraEngine_LoK::init() {
error("Couldn't init sound");
if (_flags.platform == Common::kPlatformPC98)
- _sound->loadSoundFile(_introSfxDataPC98, _introSfxDataPC98Size);
+ _sound->loadSoundFile("introsfx.98");
else
_sound->loadSoundFile(0);
diff --git a/engines/kyra/kyra_lok.h b/engines/kyra/kyra_lok.h
index 54bae668b8..1ce280d069 100644
--- a/engines/kyra/kyra_lok.h
+++ b/engines/kyra/kyra_lok.h
@@ -511,9 +511,6 @@ 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();
@@ -535,11 +532,15 @@ protected:
const char * const *_seq_COLTable;
const char * const *_seq_textsTable;
+ const char * const *_storyStrings;
+
int _seq_WSATable_Size;
int _seq_CPSTable_Size;
int _seq_COLTable_Size;
int _seq_textsTable_Size;
+ int _storyStringsSize;
+
const char * const *_itemList;
const char * const *_takenList;
const char * const *_placedList;
diff --git a/engines/kyra/resource.h b/engines/kyra/resource.h
index d164a28972..a5bfdfae03 100644
--- a/engines/kyra/resource.h
+++ b/engines/kyra/resource.h
@@ -180,6 +180,9 @@ enum KyraResources {
k1TownsSFXbtTable,
k1TownsCDATable,
+ k1PC98StoryStrings,
+ k1PC98IntroSfx,
+
k1AmigaIntroSFXTable,
k1AmigaGameSFXTable,
diff --git a/engines/kyra/seqplayer.cpp b/engines/kyra/seqplayer.cpp
index 7080d27dc2..4e04eb4476 100644
--- a/engines/kyra/seqplayer.cpp
+++ b/engines/kyra/seqplayer.cpp
@@ -429,11 +429,14 @@ void SeqPlayer::s1_playEffect() {
void SeqPlayer::s1_playTrack() {
uint8 msg = *_seqData++;
- if (msg == 1) {
+ if (msg == 0 && _vm->gameFlags().platform == Common::kPlatformPC98) {
+ _sound->haltTrack();
+
+ } else if (msg == 1) {
_sound->beginFadeOut();
} else {
_sound->haltTrack();
- if (_vm->gameFlags().platform == Common::kPlatformFMTowns || _vm->gameFlags().platform == Common::kPlatformPC98)
+ if (_vm->gameFlags().platform == Common::kPlatformFMTowns)
msg += 2;
_sound->playTrack(msg);
}
diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp
index 67cdbdae17..c8b15e5e63 100644
--- a/engines/kyra/sequences_lok.cpp
+++ b/engines/kyra/sequences_lok.cpp
@@ -136,7 +136,7 @@ void KyraEngine_LoK::seq_introLogos() {
delay(90 * _tickLength);
_screen->fadeToBlack();
if (!_abortIntroFlag)
- snd_playWanderScoreViaMap(57, 0);
+ snd_playWanderScoreViaMap(_flags.platform == Common::kPlatformFMTowns ? 57 : 2, 0);
}
_screen->clearPage(0);
@@ -264,20 +264,34 @@ void KyraEngine_LoK::seq_introStory() {
_screen->copyPage(3, 0);
if (_flags.lang == Common::JA_JPN) {
- const int x1 = (Screen::SCREEN_W - _screen->getTextWidth(_seq_textsTable[18])) / 2;
- const int x2 = (Screen::SCREEN_W - _screen->getTextWidth(_seq_textsTable[19])) / 2;
const int y1 = 175;
- const int y2 = 184;
+ int x1, x2, y2, col1;
+ const char *s1, *s2;
+
+ if (_flags.platform == Common::kPlatformFMTowns) {
+ s1 = _seq_textsTable[18];
+ s2 = _seq_textsTable[19];
+ x1 = (Screen::SCREEN_W - _screen->getTextWidth(s1)) / 2;
+ x2 = (Screen::SCREEN_W - _screen->getTextWidth(s2)) / 2;
+ uint8 colorMap[] = { 0, 15, 12, 12 };
+ _screen->setTextColor(colorMap, 0, 3);
+ y2 = 184;
+ col1 = 5;
- uint8 colorMap[] = { 0, 15, 12, 12 };
- _screen->setTextColor(colorMap, 0, 3);
+ } else {
+ s1 = _storyStrings[0];
+ s2 = _storyStrings[1];
+ x1 = x2 = 54;
+ y2 = 185;
+ col1 = 15;
+ }
- _screen->printText(_seq_textsTable[18], x1, y1, 5, 8);
- _screen->printText(_seq_textsTable[19], x2, y2, 5, 8);
+ _screen->printText(s1, x1, y1, col1, 8);
+ _screen->printText(s2, x2, y2, col1, 8);
}
_screen->updateScreen();
- //debugC(0, kDebugLevelMain, "skipFlag %i, %i", skipFlag(), _tickLength);
+ //debugC(0,, 0xkDebugLevelMain,, 0x"skipFlag, 0x%i,, 0x%i",, 0xskipFlag(),, 0x_tickLength);
delay(360 * _tickLength);
}
@@ -1082,7 +1096,7 @@ int KyraEngine_LoK::seq_playEnd() {
if (i == 4)
snd_playSoundEffect(0x3E);
else if (i == 20)
- snd_playSoundEffect(0x0E);
+ snd_playSoundEffect(_flags.platform == Common::kPlatformPC98 ? 0x13 : 0x0E);
nextTime = _system->getMillis() + 8 * _tickLength;
_finalA->displayFrame(i, 0, 8, 8, 0, 0, 0);
_screen->updateScreen();
diff --git a/engines/kyra/sound.h b/engines/kyra/sound.h
index 3d74972162..f04e96d6c9 100644
--- a/engines/kyra/sound.h
+++ b/engines/kyra/sound.h
@@ -108,12 +108,6 @@ 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.
*/
@@ -275,7 +269,6 @@ public:
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); }
diff --git a/engines/kyra/sound_intern.h b/engines/kyra/sound_intern.h
index 98991dadd9..79789e1d46 100644
--- a/engines/kyra/sound_intern.h
+++ b/engines/kyra/sound_intern.h
@@ -172,7 +172,6 @@ public:
void process() {}
void loadSoundFile(uint file) {}
void loadSoundFile(Common::String file);
- void loadSoundFile(const uint8 *data, int len);
void playTrack(uint8 track);
void haltTrack();
diff --git a/engines/kyra/sound_lok.cpp b/engines/kyra/sound_lok.cpp
index 8399e0cc51..3eeddf1ce3 100644
--- a/engines/kyra/sound_lok.cpp
+++ b/engines/kyra/sound_lok.cpp
@@ -36,7 +36,7 @@ void KyraEngine_LoK::snd_playSoundEffect(int track, int volume) {
track -= 16;
}
- if ((_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) && track == 49) {
+ if (_flags.platform == Common::kPlatformFMTowns && track == 49) {
snd_playWanderScoreViaMap(56, 1);
return;
}
@@ -64,7 +64,7 @@ void KyraEngine_LoK::snd_playWanderScoreViaMap(int command, int restart) {
} else if (_flags.platform == Common::kPlatformPC98) {
if (command == 1) {
_sound->beginFadeOut();
- } else if (command >= 2) {
+ } else if (command >= 2 && command < 53 || command == 55) {
if (_lastMusicCommand != command)
_sound->playTrack(command);
} else {
diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp
index 1d6470b7cc..aa8de56d1a 100644
--- a/engines/kyra/sound_towns.cpp
+++ b/engines/kyra/sound_towns.cpp
@@ -4054,12 +4054,6 @@ void SoundPC98::loadSoundFile(Common::String file) {
_sfxTrackData = _vm->resource()->fileData(file.c_str(), 0);
}
-void SoundPC98::loadSoundFile(const uint8 *data, int len) {
- delete[] _sfxTrackData;
- _sfxTrackData = new uint8[len];
- memcpy(_sfxTrackData, data, len);
-}
-
void SoundPC98::playTrack(uint8 track) {
track += extraOffset();
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index 395fe5d544..c90f427da7 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -45,7 +45,7 @@
namespace Kyra {
-#define RESFILE_VERSION 59
+#define RESFILE_VERSION 60
namespace {
bool checkKyraDat(Common::SeekableReadStream *file) {
@@ -325,6 +325,10 @@ bool StaticResource::init() {
{ k1TownsSFXbtTable, kRawData, "SFXBTTABLE" },
{ k1TownsCDATable, kRawData, "CDATABLE" },
+ // PC98 specific
+ { k1PC98StoryStrings, kLanguageList, "INTROSTORY." },
+ { k1PC98IntroSfx, kRawData, "INTROSFX" },
+
// CREDITS (used in FM-TOWNS and AMIGA)
{ k1CreditsStrings, kRawData, "CREDITS" },
@@ -1379,6 +1383,8 @@ const char *StaticResource::getFilename(const char *name) {
filename += ".CD";
else if (_vm->gameFlags().isDemo)
filename += ".DEM";
+ else if (_vm->gameFlags().platform == Common::kPlatformPC98 && _vm->gameFlags().gameID == GI_KYRA1)
+ filename += ".98";
else if (_vm->gameFlags().platform == Common::kPlatformFMTowns || _vm->gameFlags().platform == Common::kPlatformPC98)
filename += ".TNS";
else if (_vm->gameFlags().platform == Common::kPlatformAmiga)
@@ -1455,6 +1461,8 @@ void KyraEngine_LoK::initStaticResource() {
_guiStrings = _staticres->loadStrings(k1GUIStrings, _guiStringsSize);
_configStrings = _staticres->loadStrings(k1ConfigStrings, _configStringsSize);
+ _storyStrings = _staticres->loadStrings(k1PC98StoryStrings, _storyStringsSize);
+
_soundFiles = _staticres->loadStrings(k1AudioTracks, _soundFilesSize);
_soundFilesIntro = _staticres->loadStrings(k1AudioTracksIntro, _soundFilesIntroSize);
_cdaTrackTable = (const int32 *)_staticres->loadRawData(k1TownsCDATable, _cdaTrackTableSize);
@@ -1511,7 +1519,7 @@ void KyraEngine_LoK::initStaticResource() {
} else if (_flags.platform == Common::kPlatformPC98) {
_soundData[0].fileList = tIntro98;
_soundData[0].fileListLen = 1;
- _soundData[0].extraOffset = -56;
+ _soundData[0].extraOffset = -1;
_soundData[1].fileList = tIngame98;
_soundData[1].fileListLen = 1;
_soundData[1].extraOffset = -1;
@@ -2445,59 +2453,6 @@ 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[] = {
diff --git a/tools/create_kyradat/create_kyradat.cpp b/tools/create_kyradat/create_kyradat.cpp
index df1449fac7..79060a0cef 100644
--- a/tools/create_kyradat/create_kyradat.cpp
+++ b/tools/create_kyradat/create_kyradat.cpp
@@ -37,7 +37,7 @@
#include "md5.h"
enum {
- kKyraDatVersion = 59,
+ kKyraDatVersion = 60,
kIndexSize = 12
};
@@ -157,6 +157,10 @@ const ExtractFilename extractFilenames[] = {
{ kKyra1TownsSFXbtTable, kTypeRawData, "SFXBTTABLE" },
{ kKyra1TownsCDATable, kTypeRawData, "CDATABLE" },
+ // PC98 specific
+ { kKyra1PC98StoryStrings, kTypeLanguageList, "INTROSTORY" },
+ { kKyra1PC98IntroSfx, kTypeRawData, "INTROSFX" },
+
// AMIGA specific
{ kAmigaIntroSFXTable, kTypeAmigaSfxTable, "SFXINTRO" },
{ kAmigaGameSFXTable, kTypeAmigaSfxTable, "SFXGAME" },
@@ -344,7 +348,7 @@ const Language languageTable[] = {
const PlatformExtension platformTable[] = {
{ kPlatformAmiga, "AMG" },
{ kPlatformFMTowns, "TNS" },
- { kPlatformPC98, "TNS" }, // HACK
+ { kPlatformPC98, "98" },
{ -1, 0 }
};
diff --git a/tools/create_kyradat/create_kyradat.h b/tools/create_kyradat/create_kyradat.h
index 69d82330ad..0a0c7073fc 100644
--- a/tools/create_kyradat/create_kyradat.h
+++ b/tools/create_kyradat/create_kyradat.h
@@ -147,6 +147,8 @@ enum kExtractID {
kKyra1TownsSFXwdTable,
kKyra1TownsSFXbtTable,
kKyra1TownsCDATable,
+ kKyra1PC98StoryStrings,
+ kKyra1PC98IntroSfx,
kCreditsStrings,
kAmigaIntroSFXTable,
diff --git a/tools/create_kyradat/games.cpp b/tools/create_kyradat/games.cpp
index 2788b2870b..ec07e683f6 100644
--- a/tools/create_kyradat/games.cpp
+++ b/tools/create_kyradat/games.cpp
@@ -52,6 +52,9 @@ const Game kyra1Games[] = {
{ kKyra1, EN_ANY, kPlatformFMTowns, -1, "5a3ad60ccd0f2e29463e0368cd14a60d" },
{ kKyra1, JA_JPN, kPlatformFMTowns, -1, "5a3ad60ccd0f2e29463e0368cd14a60d" },
+ // PC-98
+ { kKyra1, JA_JPN, kPlatformPC98, -1, "b9c06ac5177f5bf1f1acc0eea3937f6d" },
+
GAME_DUMMY_ENTRY
};
@@ -424,6 +427,95 @@ const int kyra1TownsNeed[] = {
-1
};
+const int kyra1PC98Need[] = {
+ kKallakWritingSeq,
+ kMalcolmTreeSeq,
+ kWestwoodLogoSeq,
+ kKyrandiaLogoSeq,
+ kKallakMalcolmSeq,
+ kForestSeq,
+ kIntroCPSStrings,
+ kIntroCOLStrings,
+ kIntroWSAStrings,
+ kIntroStrings,
+ kRoomList,
+ kRoomFilenames,
+ kCharacterImageFilenames,
+ kDefaultShapes,
+ kItemNames,
+ kTakenStrings,
+ kPlacedStrings,
+ kDroppedStrings,
+ kNoDropStrings,
+ kAmuleteAnimSeq,
+ kPaletteList1,
+ kPaletteList2,
+ kPaletteList3,
+ kPaletteList4,
+ kPaletteList5,
+ kPaletteList6,
+ kPaletteList7,
+ kPaletteList8,
+ kPaletteList9,
+ kPaletteList10,
+ kPaletteList11,
+ kPaletteList12,
+ kPaletteList13,
+ kPaletteList14,
+ kPaletteList15,
+ kPaletteList16,
+ kPaletteList17,
+ kPaletteList18,
+ kPaletteList19,
+ kPaletteList20,
+ kPaletteList21,
+ kPaletteList22,
+ kPaletteList23,
+ kPaletteList24,
+ kPaletteList25,
+ kPaletteList26,
+ kPaletteList27,
+ kPaletteList28,
+ kPaletteList29,
+ kPaletteList30,
+ kPaletteList31,
+ kPaletteList32,
+ kPaletteList33,
+ kPutDownString,
+ kWaitAmuletString,
+ kBlackJewelString,
+ kHealingTipString,
+ kPoisonGoneString,
+ kHealing1Shapes,
+ kHealing2Shapes,
+ kThePoisonStrings,
+ kFluteStrings,
+ kPoisonDeathShapes,
+ kFluteShapes,
+ kWinter1Shapes,
+ kWinter2Shapes,
+ kWinter3Shapes,
+ kDrinkShapes,
+ kWispShapes,
+ kMagicAnimShapes,
+ kBranStoneShapes,
+ kWispJewelStrings,
+ kMagicJewelStrings,
+ kFlaskFullString,
+ kFullFlaskString,
+ kOutroReunionSeq,
+ kOutroHomeString,
+ kVeryCleverString,
+ kGUIStrings,
+ kNewGameString,
+ kConfigStrings,
+
+ kKyra1PC98StoryStrings,
+ kKyra1PC98IntroSfx,
+ kCreditsStrings,
+ -1
+};
+
const int kyra1AmigaNeed[] = {
kKallakWritingSeq,
kMalcolmTreeSeq,
@@ -858,6 +950,8 @@ const GameNeed gameNeedTable[] = {
{ kKyra1, kPlatformFMTowns, -1, kyra1TownsNeed },
+ { kKyra1, kPlatformPC98, -1, kyra1PC98Need },
+
{ kKyra1, kPlatformPC, kDemoVersion, kyra1DemoNeed },
{ kKyra1, kPlatformPC, kDemoCDVersion, kyra1DemoCDNeed },
diff --git a/tools/create_kyradat/tables.cpp b/tools/create_kyradat/tables.cpp
index 8eb2549a50..1c482fc8e1 100644
--- a/tools/create_kyradat/tables.cpp
+++ b/tools/create_kyradat/tables.cpp
@@ -36,6 +36,8 @@ const ExtractEntrySearchData kForestSeqProvider[] = {
{ UNK_LANG, kPlatformAmiga, { 0x00000273, 0x00001D80, { { 0x18, 0x32, 0xB7, 0xFB, 0xD8, 0x1A, 0x6D, 0x83, 0x75, 0xF5, 0x2B, 0xF7, 0xC0, 0xFD, 0x85, 0xEF } } } },
{ UNK_LANG, kPlatformFMTowns, { 0x00000196, 0x00001468, { { 0x06, 0x8D, 0xC1, 0x9B, 0xBC, 0x28, 0xE8, 0x36, 0x43, 0x67, 0x34, 0xAA, 0x78, 0xB9, 0xCB, 0x72 } } } },
+
+ { UNK_LANG, kPlatformPC98, { 0x0000013B, 0x0000128A, { { 0xD8, 0xB1, 0xFF, 0x57, 0xC9, 0x5D, 0xE1, 0x23, 0xA5, 0xA0, 0x4B, 0x0F, 0x28, 0xAC, 0x56, 0x83 } } } },
EXTRACT_END_ENTRY
};
@@ -48,6 +50,8 @@ const ExtractEntrySearchData kKallakWritingSeqProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x000007F7, 0x00006E23, { { 0x97, 0x8C, 0x63, 0x8D, 0x91, 0x68, 0xA5, 0x63, 0x55, 0x43, 0xE7, 0xE0, 0x12, 0xF9, 0x80, 0xA4 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x000007F3, 0x00006D9E, { { 0x3E, 0x83, 0xA4, 0xBF, 0x43, 0xAC, 0xDD, 0x41, 0x33, 0xC3, 0x33, 0x4E, 0xAE, 0x08, 0xB6, 0xDA } } } },
+
EXTRACT_END_ENTRY
};
@@ -67,6 +71,8 @@ const ExtractEntrySearchData kKallakMalcolmSeqProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x0000026D, 0x00002188, { { 0x7E, 0x3B, 0x06, 0x69, 0x11, 0x59, 0xBE, 0x42, 0xCB, 0x33, 0x9C, 0x15, 0xCF, 0x61, 0xF6, 0xB0 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x0000026C, 0x00002145, { { 0x95, 0xB7, 0x9E, 0x63, 0x99, 0xFA, 0x22, 0xBF, 0x62, 0x37, 0xC2, 0x2B, 0x40, 0x73, 0x53, 0x83 } } } },
+
EXTRACT_END_ENTRY
};
@@ -78,6 +84,8 @@ const ExtractEntrySearchData kMalcolmTreeSeqProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00000218, 0x00001551, { { 0x30, 0x42, 0xD3, 0x7D, 0x6B, 0x43, 0x3B, 0xC7, 0x63, 0x56, 0x7D, 0x12, 0xE0, 0x53, 0x41, 0x48 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x00000217, 0x0000150E, { { 0x41, 0xFC, 0xD3, 0xAC, 0x8D, 0x1C, 0x11, 0x4E, 0xE0, 0x0C, 0xF6, 0x93, 0xA9, 0x22, 0x53, 0x7F } } } },
+
EXTRACT_END_ENTRY
};
@@ -129,6 +137,8 @@ const ExtractEntrySearchData kOutroReunionSeqProvider[] = {
{ UNK_LANG, kPlatformAmiga, { 0x0000054A, 0x0000785F, { { 0x55, 0xEA, 0xB8, 0x7F, 0x3A, 0x86, 0xCD, 0xA6, 0xBC, 0xA7, 0x9A, 0x39, 0xED, 0xF5, 0x30, 0x0A } } } },
{ UNK_LANG, kPlatformFMTowns, { 0x00000547, 0x00007876, { { 0x7A, 0xC7, 0x80, 0x34, 0x7A, 0x1B, 0xAB, 0xF8, 0xA7, 0x2F, 0x63, 0x3C, 0xDA, 0x89, 0x3F, 0x82 } } } },
+
+ { UNK_LANG, kPlatformPC98, { 0x00000548, 0x00007889, { { 0x17, 0xE9, 0x40, 0xBA, 0x4A, 0xBD, 0xC6, 0x62, 0x56, 0x96, 0xD6, 0x1B, 0x11, 0xF3, 0xD8, 0x14 } } } },
EXTRACT_END_ENTRY
};
@@ -142,6 +152,8 @@ const ExtractEntrySearchData kIntroCPSStringsProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00000015, 0x0000071D, { { 0x59, 0x65, 0x08, 0xF9, 0x4C, 0x81, 0xA1, 0xE3, 0x68, 0xF7, 0xE3, 0xF6, 0x33, 0x5F, 0xF5, 0x36 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x00000015, 0x0000071D, { { 0x59, 0x65, 0x08, 0xF9, 0x4C, 0x81, 0xA1, 0xE3, 0x68, 0xF7, 0xE3, 0xF6, 0x33, 0x5F, 0xF5, 0x36 } } } },
+
EXTRACT_END_ENTRY
};
@@ -153,6 +165,8 @@ const ExtractEntrySearchData kIntroCOLStringsProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00000030, 0x00000F09, { { 0x05, 0x7B, 0x69, 0xB7, 0x6A, 0xC3, 0x7F, 0xD9, 0x7E, 0x51, 0x87, 0xA5, 0x31, 0xD8, 0x80, 0xB3 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x00000030, 0x00000F09, { { 0x05, 0x7B, 0x69, 0xB7, 0x6A, 0xC3, 0x7F, 0xD9, 0x7E, 0x51, 0x87, 0xA5, 0x31, 0xD8, 0x80, 0xB3 } } } },
+
EXTRACT_END_ENTRY
};
@@ -164,6 +178,8 @@ const ExtractEntrySearchData kIntroWSAStringsProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00000093, 0x00002E5D, { { 0xAB, 0xD1, 0x32, 0x89, 0x2A, 0x8D, 0xC0, 0x2C, 0x87, 0x87, 0xA3, 0x14, 0x2A, 0x2A, 0x22, 0x7F } } } },
+ { UNK_LANG, kPlatformPC98, { 0x00000093, 0x00002E5D, { { 0xAB, 0xD1, 0x32, 0x89, 0x2A, 0x8D, 0xC0, 0x2C, 0x87, 0x87, 0xA3, 0x14, 0x2A, 0x2A, 0x22, 0x7F } } } },
+
EXTRACT_END_ENTRY
};
@@ -189,6 +205,8 @@ const ExtractEntrySearchData kIntroStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x00000545, 0x0001A84C, { { 0xEF, 0xE2, 0xE4, 0x92, 0xE1, 0x18, 0xF8, 0x3C, 0x91, 0x29, 0x4D, 0x82, 0xA4, 0x3E, 0xE6, 0x7D } } } },
{ JA_JPN, kPlatformFMTowns, { 0x000005FB, 0x0003163E, { { 0x16, 0x28, 0x83, 0xCE, 0x29, 0x94, 0x9F, 0x82, 0xDC, 0xD4, 0x06, 0xE8, 0x67, 0xC9, 0x56, 0x29 } } } },
+ { JA_JPN, kPlatformPC98, { 0x000005D0, 0x00032AD7, { { 0xEE, 0x36, 0x93, 0xDD, 0x71, 0x02, 0xE9, 0x0D, 0x54, 0xDE, 0xB6, 0xE1, 0x09, 0x59, 0x60, 0x64 } } } },
+
EXTRACT_END_ENTRY
};
@@ -205,6 +223,8 @@ const ExtractEntrySearchData kOutroHomeStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x00000007, 0x000003E8, { { 0x68, 0x35, 0x87, 0x53, 0xD9, 0x53, 0x1F, 0x13, 0x24, 0x61, 0x0D, 0x8D, 0x33, 0x91, 0xF3, 0x47 } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000007, 0x000003E8, { { 0x68, 0x35, 0x87, 0x53, 0xD9, 0x53, 0x1F, 0x13, 0x24, 0x61, 0x0D, 0x8D, 0x33, 0x91, 0xF3, 0x47 } } } },
+
EXTRACT_END_ENTRY
};
@@ -215,6 +235,8 @@ const ExtractEntrySearchData kRoomFilenamesProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x0000034C, 0x0000B7AA, { { 0x7C, 0x1B, 0x89, 0x09, 0xF0, 0x87, 0x3C, 0x64, 0x3D, 0x0E, 0x61, 0xCC, 0x09, 0x8D, 0xC9, 0x95 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x0000034C, 0x0000B7AA, { { 0x7C, 0x1B, 0x89, 0x09, 0xF0, 0x87, 0x3C, 0x64, 0x3D, 0x0E, 0x61, 0xCC, 0x09, 0x8D, 0xC9, 0x95 } } } },
+
EXTRACT_END_ENTRY
};
@@ -225,6 +247,8 @@ const ExtractEntrySearchData kRoomListProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x000064E8, 0x0010312B, { { 0x94, 0x5C, 0x87, 0x35, 0x35, 0x6B, 0x3E, 0xBF, 0x55, 0x3D, 0xDB, 0xD9, 0xFB, 0x97, 0x27, 0x5D } } } },
+ { UNK_LANG, kPlatformPC98, { 0x000064E8, 0x0010312B, { { 0x94, 0x5C, 0x87, 0x35, 0x35, 0x6B, 0x3E, 0xBF, 0x55, 0x3D, 0xDB, 0xD9, 0xFB, 0x97, 0x27, 0x5D } } } },
+
EXTRACT_END_ENTRY
};
@@ -235,6 +259,8 @@ const ExtractEntrySearchData kCharacterImageFilenamesProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x000000F7, 0x00003A8F, { { 0x1F, 0xAB, 0x8E, 0x5F, 0xAD, 0x76, 0x57, 0x37, 0xD7, 0x9B, 0x3F, 0x35, 0x4B, 0xA0, 0x98, 0x37 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x000000F7, 0x00003A8F, { { 0x1F, 0xAB, 0x8E, 0x5F, 0xAD, 0x76, 0x57, 0x37, 0xD7, 0x9B, 0x3F, 0x35, 0x4B, 0xA0, 0x98, 0x37 } } } },
+
EXTRACT_END_ENTRY
};
@@ -243,6 +269,8 @@ const ExtractEntrySearchData kAudioTracksProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x0000005D, 0x0000154E, { { 0xA7, 0x7E, 0x03, 0x0A, 0x81, 0x54, 0xD2, 0x5D, 0x7B, 0x33, 0x07, 0xBF, 0x70, 0x01, 0x4B, 0x79 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x0000005D, 0x0000154E, { { 0xA7, 0x7E, 0x03, 0x0A, 0x81, 0x54, 0xD2, 0x5D, 0x7B, 0x33, 0x07, 0xBF, 0x70, 0x01, 0x4B, 0x79 } } } },
+
EXTRACT_END_ENTRY
};
@@ -271,6 +299,8 @@ const ExtractEntrySearchData kItemNamesProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x00000505, 0x00018B13, { { 0x62, 0x76, 0x84, 0x5D, 0x8D, 0xBA, 0x23, 0xC5, 0x67, 0x26, 0x22, 0xBD, 0xBE, 0x81, 0x2D, 0xFF } } } },
{ JA_JPN, kPlatformFMTowns, { 0x00000587, 0x000247A1, { { 0xE8, 0xCA, 0x1E, 0x34, 0x05, 0xE5, 0x08, 0xCA, 0xA7, 0xFE, 0x55, 0xCB, 0x75, 0xD0, 0xA7, 0x19 } } } },
+ { JA_JPN, kPlatformPC98, { 0x000004CF, 0x000247A1, { { 0xBE, 0x80, 0x3F, 0x10, 0xF7, 0x3A, 0x85, 0xD1, 0xE8, 0x24, 0xE6, 0x4E, 0x8F, 0x17, 0xC9, 0x2E } } } },
+
EXTRACT_END_ENTRY
};
@@ -293,6 +323,8 @@ const ExtractEntrySearchData kTakenStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x0000001C, 0x00000AED, { { 0x32, 0xD2, 0x87, 0x67, 0x3D, 0x01, 0x50, 0xF3, 0xFA, 0x19, 0x7A, 0xB0, 0xF8, 0x6F, 0x8A, 0x07 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x0000001F, 0x00000EB7, { { 0x7F, 0x8C, 0xFF, 0x35, 0x30, 0x71, 0x9A, 0x78, 0xCC, 0x07, 0x11, 0x86, 0xE3, 0x0D, 0x16, 0xDF } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000016, 0x00000C56, { { 0x97, 0xF0, 0x57, 0xCC, 0x03, 0x06, 0x41, 0xDC, 0xFC, 0xD5, 0xA2, 0x35, 0x0C, 0x71, 0x37, 0xCC } } } },
+
EXTRACT_END_ENTRY
};
@@ -310,6 +342,8 @@ const ExtractEntrySearchData kPlacedStringsProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x0000000D, 0x0000074C, { { 0x0E, 0x1C, 0x1F, 0xD2, 0xCF, 0xBF, 0x40, 0xE1, 0x59, 0x0F, 0x1B, 0x46, 0xED, 0x8B, 0x96, 0x8E } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000000D, 0x0000074C, { { 0x0E, 0x1C, 0x1F, 0xD2, 0xCF, 0xBF, 0x40, 0xE1, 0x59, 0x0F, 0x1B, 0x46, 0xED, 0x8B, 0x96, 0x8E } } } },
+
EXTRACT_END_ENTRY
};
@@ -327,6 +361,8 @@ const ExtractEntrySearchData kDroppedStringsProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x0000000B, 0x0000059F, { { 0xDD, 0x5E, 0x51, 0x7E, 0xD9, 0xFC, 0xCD, 0xAD, 0x6B, 0x93, 0x71, 0xBE, 0x83, 0x63, 0x3F, 0x88 } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000000B, 0x0000059F, { { 0xDD, 0x5E, 0x51, 0x7E, 0xD9, 0xFC, 0xCD, 0xAD, 0x6B, 0x93, 0x71, 0xBE, 0x83, 0x63, 0x3F, 0x88 } } } },
+
EXTRACT_END_ENTRY
};
@@ -348,6 +384,8 @@ const ExtractEntrySearchData kNoDropStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x0000007A, 0x0000323C, { { 0x00, 0x7F, 0x8E, 0x2E, 0x7B, 0xFC, 0x06, 0x0B, 0x7A, 0x7F, 0x17, 0xAF, 0x47, 0x82, 0xC1, 0x16 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x00000061, 0x00002E9C, { { 0x8A, 0xFA, 0x43, 0x26, 0x68, 0x6D, 0x5A, 0x59, 0x0C, 0x9E, 0xCB, 0x28, 0x43, 0x33, 0x54, 0x49 } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000042, 0x000025C2, { { 0x6F, 0x34, 0x59, 0x17, 0x22, 0xCE, 0x1A, 0x82, 0x18, 0xE3, 0x9F, 0x86, 0x84, 0xF1, 0x8E, 0x0C } } } },
+
EXTRACT_END_ENTRY
};
@@ -365,6 +403,8 @@ const ExtractEntrySearchData kPutDownStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x00000029, 0x0000187D, { { 0xDE, 0xEE, 0x66, 0x88, 0x57, 0xF5, 0xF9, 0x2E, 0xD2, 0x14, 0xF5, 0x83, 0xA0, 0x0D, 0x96, 0x86 } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000029, 0x0000187D, { { 0xDE, 0xEE, 0x66, 0x88, 0x57, 0xF5, 0xF9, 0x2E, 0xD2, 0x14, 0xF5, 0x83, 0xA0, 0x0D, 0x96, 0x86 } } } },
+
EXTRACT_END_ENTRY
};
@@ -384,6 +424,8 @@ const ExtractEntrySearchData kWaitAmuletStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x00000029, 0x000017A7, { { 0xFD, 0xA3, 0xAD, 0x24, 0x16, 0x49, 0x22, 0x6F, 0x52, 0xE9, 0x50, 0x11, 0x51, 0x38, 0xCA, 0xE0 } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000029, 0x000017A7, { { 0xFD, 0xA3, 0xAD, 0x24, 0x16, 0x49, 0x22, 0x6F, 0x52, 0xE9, 0x50, 0x11, 0x51, 0x38, 0xCA, 0xE0 } } } },
+
EXTRACT_END_ENTRY
};
@@ -403,6 +445,8 @@ const ExtractEntrySearchData kBlackJewelStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x00000035, 0x0000205F, { { 0x33, 0xD6, 0x19, 0xEE, 0xEA, 0xDD, 0x9F, 0xB5, 0x77, 0x0C, 0x8E, 0x84, 0x5E, 0x61, 0x22, 0x3E } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000035, 0x0000205F, { { 0x33, 0xD6, 0x19, 0xEE, 0xEA, 0xDD, 0x9F, 0xB5, 0x77, 0x0C, 0x8E, 0x84, 0x5E, 0x61, 0x22, 0x3E } } } },
+
EXTRACT_END_ENTRY
};
@@ -425,6 +469,8 @@ const ExtractEntrySearchData kPoisonGoneStringProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x0000003C, 0x000013B4, { { 0xE9, 0x54, 0xF1, 0xEC, 0x64, 0x5A, 0xEB, 0xC7, 0xAA, 0x7E, 0xA2, 0x9F, 0xE8, 0xFB, 0x3A, 0x82 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x0000003D, 0x000017D1, { { 0x7C, 0x93, 0x62, 0x32, 0x47, 0xB9, 0x78, 0x03, 0x86, 0x8D, 0x99, 0xB8, 0x86, 0x68, 0xEF, 0x3A } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000016, 0x00000B60, { { 0xFF, 0x8C, 0xC0, 0x1B, 0x2C, 0x0C, 0x23, 0x89, 0x93, 0x79, 0xC5, 0xCD, 0xAC, 0xF9, 0xEA, 0xA7 } } } },
+
EXTRACT_END_ENTRY
};
@@ -444,6 +490,8 @@ const ExtractEntrySearchData kHealingTipStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x0000002B, 0x00001949, { { 0xC7, 0xE3, 0x0A, 0x6B, 0x8F, 0xCA, 0xBC, 0x3A, 0xDC, 0x76, 0x48, 0xD3, 0x8B, 0xD9, 0x44, 0x2E } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000002B, 0x00001949, { { 0xC7, 0xE3, 0x0A, 0x6B, 0x8F, 0xCA, 0xBC, 0x3A, 0xDC, 0x76, 0x48, 0xD3, 0x8B, 0xD9, 0x44, 0x2E } } } },
+
EXTRACT_END_ENTRY
};
@@ -468,6 +516,8 @@ const ExtractEntrySearchData kWispJewelStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x00000075, 0x00002B94, { { 0xA5, 0x4C, 0xBF, 0x5F, 0xD3, 0xF8, 0x6D, 0xE4, 0xB4, 0x8E, 0x64, 0x84, 0xD9, 0xBA, 0x2B, 0x33 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x00000067, 0x00002C6B, { { 0x55, 0x56, 0x6B, 0xEA, 0xEF, 0x34, 0xDA, 0x23, 0x23, 0xF4, 0x9D, 0x0F, 0xBF, 0xC3, 0x1F, 0xDA } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000037, 0x00001EDF, { { 0xA8, 0x42, 0x79, 0xEB, 0x82, 0xAF, 0x03, 0xD7, 0x03, 0xF9, 0xE0, 0x60, 0xD4, 0x87, 0xAD, 0x2E } } } },
+
EXTRACT_END_ENTRY
};
@@ -487,6 +537,8 @@ const ExtractEntrySearchData kMagicJewelStringsProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x0000000F, 0x0000087E, { { 0xD8, 0xF1, 0x40, 0x9D, 0x9C, 0x15, 0x9E, 0xBD, 0x69, 0xE5, 0xE1, 0x51, 0x34, 0x22, 0xF3, 0x75 } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000000F, 0x0000087E, { { 0xD8, 0xF1, 0x40, 0x9D, 0x9C, 0x15, 0x9E, 0xBD, 0x69, 0xE5, 0xE1, 0x51, 0x34, 0x22, 0xF3, 0x75 } } } },
+
EXTRACT_END_ENTRY
};
@@ -508,6 +560,8 @@ const ExtractEntrySearchData kThePoisonStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x00000092, 0x0000334E, { { 0xC9, 0x02, 0xB5, 0xEF, 0x90, 0xA8, 0x9C, 0x6E, 0xAD, 0xD6, 0x1F, 0xCC, 0x71, 0x9F, 0x19, 0x2C } } } },
{ JA_JPN, kPlatformFMTowns, { 0x000000A0, 0x00003EEB, { { 0x4B, 0x0C, 0xD5, 0xF0, 0xFE, 0x05, 0xF5, 0x09, 0x96, 0xA9, 0xE4, 0xDD, 0x86, 0x8D, 0x79, 0x3C } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000045, 0x00002350, { { 0xAD, 0x17, 0xA0, 0x40, 0x86, 0x0E, 0x1D, 0x2F, 0xA7, 0x14, 0x5B, 0x81, 0x38, 0x09, 0x80, 0x21 } } } },
+
EXTRACT_END_ENTRY
};
@@ -527,6 +581,8 @@ const ExtractEntrySearchData kFluteStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x0000005A, 0x000024F9, { { 0xCA, 0x1F, 0x62, 0x23, 0x22, 0x25, 0x4A, 0x94, 0x8A, 0x50, 0x59, 0xD5, 0xB4, 0x4E, 0xF1, 0xA6 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x00000053, 0x00002745, { { 0x7A, 0xBB, 0xFC, 0x30, 0xB6, 0xCE, 0x61, 0xD4, 0xDB, 0xB0, 0xE6, 0xB2, 0xF4, 0x4D, 0x81, 0x35 } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000032, 0x00001CDF, { { 0xB7, 0x08, 0x8D, 0x67, 0xB2, 0x0F, 0x59, 0x2D, 0xA6, 0x36, 0x21, 0x7B, 0x8B, 0x89, 0xE3, 0xED } } } },
+
EXTRACT_END_ENTRY
};
@@ -544,6 +600,8 @@ const ExtractEntrySearchData kFlaskFullStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x0000001F, 0x00001135, { { 0x90, 0x52, 0x4A, 0x95, 0xE4, 0x89, 0xD6, 0x0A, 0xE1, 0x2E, 0x98, 0x11, 0x02, 0xF5, 0x79, 0x37 } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000001F, 0x00001135, { { 0x90, 0x52, 0x4A, 0x95, 0xE4, 0x89, 0xD6, 0x0A, 0xE1, 0x2E, 0x98, 0x11, 0x02, 0xF5, 0x79, 0x37 } } } },
+
EXTRACT_END_ENTRY
};
@@ -565,6 +623,8 @@ const ExtractEntrySearchData kFullFlaskStringProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x0000009D, 0x00003521, { { 0xAB, 0x74, 0x71, 0x5C, 0x6E, 0x65, 0xF5, 0x5E, 0xB0, 0x6E, 0x0E, 0xC7, 0x56, 0xCB, 0x55, 0x98 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x0000007D, 0x000039CE, { { 0x9E, 0xBE, 0x13, 0x7F, 0x4D, 0x4B, 0xCB, 0x08, 0xC3, 0xE5, 0xF1, 0xC2, 0xD3, 0x69, 0x9E, 0xDF } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000079, 0x000039CE, { { 0xEF, 0x3F, 0x36, 0xD4, 0x6C, 0x64, 0x74, 0x9A, 0xFE, 0x13, 0xB5, 0x77, 0x9A, 0xCF, 0x15, 0x5C } } } },
+
EXTRACT_END_ENTRY
};
@@ -582,6 +642,8 @@ const ExtractEntrySearchData kVeryCleverStringProvider[] = {
{ JA_JPN, kPlatformFMTowns, { 0x0000002F, 0x00001BDF, { { 0x32, 0x2C, 0x60, 0x1E, 0xB7, 0xE0, 0xFE, 0x5F, 0xEA, 0xEF, 0xA4, 0x73, 0xAC, 0xCB, 0xBA, 0xFE } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000002F, 0x00001BDF, { { 0x32, 0x2C, 0x60, 0x1E, 0xB7, 0xE0, 0xFE, 0x5F, 0xEA, 0xEF, 0xA4, 0x73, 0xAC, 0xCB, 0xBA, 0xFE } } } },
+
EXTRACT_END_ENTRY
};
@@ -600,6 +662,8 @@ const ExtractEntrySearchData kNewGameStringProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x00000015, 0x0000052B, { { 0xAB, 0xD2, 0x16, 0x26, 0xC2, 0x86, 0xFA, 0xC8, 0x42, 0xCD, 0x16, 0xCD, 0x25, 0xB7, 0x44, 0xDC } } } },
{ JA_JPN, kPlatformFMTowns, { 0x0000001B, 0x00000EC8, { { 0x13, 0x9A, 0xBC, 0x8F, 0xE2, 0x4B, 0xD7, 0x0B, 0xC0, 0x81, 0x60, 0x10, 0xC2, 0xA6, 0x9C, 0xFA } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000001B, 0x00000EC8, { { 0x13, 0x9A, 0xBC, 0x8F, 0xE2, 0x4B, 0xD7, 0x0B, 0xC0, 0x81, 0x60, 0x10, 0xC2, 0xA6, 0x9C, 0xFA } } } },
+
EXTRACT_END_ENTRY
};
@@ -661,6 +725,8 @@ const ExtractEntrySearchData kDrinkShapesProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x0000006A, 0x00001EDA, { { 0xE2, 0xDA, 0xEC, 0x87, 0x4A, 0x27, 0xD8, 0xC1, 0x57, 0xE7, 0xD8, 0xD7, 0x87, 0x5F, 0x3A, 0xEB } } } },
+ { UNK_LANG, kPlatformPC98, { 0x0000006A, 0x00001EDA, { { 0xE2, 0xDA, 0xEC, 0x87, 0x4A, 0x27, 0xD8, 0xC1, 0x57, 0xE7, 0xD8, 0xD7, 0x87, 0x5F, 0x3A, 0xEB } } } },
+
EXTRACT_END_ENTRY
};
@@ -683,6 +749,8 @@ const ExtractEntrySearchData kBranStoneShapesProvider[] = {
{ UNK_LANG, kPlatformFMTowns, { 0x00000063, 0x00001E41, { { 0xDA, 0xA1, 0x93, 0x68, 0xBF, 0xB3, 0xBB, 0xD1, 0x2E, 0xF9, 0xB2, 0x25, 0x72, 0xD9, 0xA6, 0x00 } } } },
+ { UNK_LANG, kPlatformPC98, { 0x00000063, 0x00001E41, { { 0xDA, 0xA1, 0x93, 0x68, 0xBF, 0xB3, 0xBB, 0xD1, 0x2E, 0xF9, 0xB2, 0x25, 0x72, 0xD9, 0xA6, 0x00 } } } },
+
EXTRACT_END_ENTRY
};
@@ -905,6 +973,8 @@ const ExtractEntrySearchData kGUIStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x000001FC, 0x00009D9A, { { 0xE8, 0x39, 0x46, 0x0A, 0x41, 0xC3, 0xDC, 0x33, 0x6E, 0xC5, 0x5D, 0x99, 0xCC, 0xF6, 0xDD, 0xCC } } } },
{ JA_JPN, kPlatformFMTowns, { 0x0000025F, 0x0000E56A, { { 0x77, 0x9A, 0x02, 0x52, 0xED, 0x62, 0x23, 0x5A, 0x58, 0x78, 0x19, 0x52, 0x03, 0xD7, 0x88, 0x40 } } } },
+ { JA_JPN, kPlatformPC98, { 0x00000213, 0x0000EC5A, { { 0x3B, 0xBA, 0xFB, 0x61, 0x34, 0x60, 0x25, 0xDA, 0x48, 0xBF, 0x95, 0x7F, 0x7F, 0xB6, 0xE4, 0x55 } } } },
+
EXTRACT_END_ENTRY
};
@@ -929,6 +999,8 @@ const ExtractEntrySearchData kConfigStringsProvider[] = {
{ EN_ANY, kPlatformFMTowns, { 0x0000004A, 0x000016E9, { { 0x37, 0x12, 0xAD, 0x4C, 0xB8, 0x2C, 0xF5, 0x75, 0x20, 0x74, 0xA0, 0xFD, 0x58, 0xB1, 0x71, 0x77 } } } },
{ JA_JPN, kPlatformFMTowns, { 0x00000057, 0x00002262, { { 0xC5, 0x9A, 0x4A, 0xE3, 0xDF, 0xD3, 0x0E, 0x8E, 0xBB, 0xAF, 0x75, 0xD3, 0x67, 0xB1, 0xF6, 0x08 } } } },
+ { JA_JPN, kPlatformPC98, { 0x0000003F, 0x00001E9D, { { 0x8A, 0x3C, 0x78, 0x6B, 0x3F, 0x0A, 0x7D, 0x92, 0x16, 0x39, 0xEB, 0x1C, 0x84, 0x9E, 0x4F, 0x84 } } } },
+
EXTRACT_END_ENTRY
};
@@ -950,12 +1022,26 @@ const ExtractEntrySearchData kKyra1TownsCDATableProvider[] = {
EXTRACT_END_ENTRY
};
+const ExtractEntrySearchData kKyra1PC98StoryStringsProvider[] = {
+ { JA_JPN, kPlatformPC98, { 0x00000054, 0x00002FAD, { { 0xCB, 0x25, 0xD1, 0xFA, 0x65, 0xCE, 0xD5, 0xE6, 0xAD, 0xE3, 0x48, 0x25, 0xC8, 0x51, 0xC6, 0x12 } } } },
+
+ EXTRACT_END_ENTRY
+};
+
+const ExtractEntrySearchData kKyra1PC98IntroSfxProvider[] = {
+ { UNK_LANG, kPlatformPC98, { 0x00000300, 0x00017445, { { 0xC3, 0x54, 0x4A, 0x58, 0x00, 0x33, 0xEA, 0xF1, 0x20, 0xA8, 0x0C, 0xDE, 0x7A, 0x94, 0xAB, 0x5E } } } },
+
+ EXTRACT_END_ENTRY
+};
+
const ExtractEntrySearchData kCreditsStringsProvider[] = {
{ EN_ANY, kPlatformAmiga, { 0x000004CC, 0x000182F7, { { 0x7D, 0x14, 0xA6, 0xEC, 0x12, 0x67, 0xAC, 0xA7, 0x7B, 0xF8, 0x44, 0x19, 0x52, 0xCC, 0x3A, 0x65 } } } },
{ DE_DEU, kPlatformAmiga, { 0x000004FB, 0x00019987, { { 0x8B, 0xF1, 0x61, 0xB9, 0x3E, 0xA4, 0x28, 0x9B, 0x45, 0x86, 0xD1, 0xF0, 0xC3, 0x35, 0x44, 0xA0 } } } },
{ UNK_LANG, kPlatformFMTowns, { 0x0000058C, 0x0001AD16, { { 0xFC, 0x1B, 0xE6, 0xEB, 0x03, 0x1C, 0x54, 0x93, 0x64, 0x53, 0xB1, 0x17, 0x9D, 0x95, 0x1B, 0x4A } } } },
+ { UNK_LANG, kPlatformPC98, { 0x00000530, 0x00019571, { { 0x38, 0x4F, 0xE0, 0x74, 0x27, 0x21, 0xEC, 0x63, 0x41, 0x32, 0xB1, 0xD9, 0xA5, 0x65, 0x62, 0x71 } } } },
+
EXTRACT_END_ENTRY
};
@@ -1766,6 +1852,8 @@ const ExtractEntry extractProviders[] = {
{ kKyra1TownsSFXwdTable, kKyra1TownsSFXwdTableProvider },
{ kKyra1TownsSFXbtTable, kKyra1TownsSFXbtTableProvider },
{ kKyra1TownsCDATable, kKyra1TownsCDATableProvider },
+ { kKyra1PC98StoryStrings, kKyra1PC98StoryStringsProvider },
+ { kKyra1PC98IntroSfx, kKyra1PC98IntroSfxProvider },
{ kCreditsStrings, kCreditsStringsProvider },
{ kAmigaIntroSFXTable, kAmigaIntroSFXTableProvider },
{ kAmigaGameSFXTable, kAmigaGameSFXTableProvider },