[Scummvm-git-logs] scummvm master -> 383f20e966376c8365552af972d797494c347d30

athrxx athrxx at scummvm.org
Sat May 30 17:54:41 UTC 2020


This automated email contains information about 12 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
e39f8dfe80 SUBSYSTEM:KYRA
4f2bb29379 KYRA: EOB preference for DRO files
77b5ff6aba KYRA:EOB multiple save slots for spanish version
c4fa0d4538 KYRA:EOB add spanish resources
57c18ea153 KYRA:EOB fix spanish text
7f2e5c7d9f KYRA:EOB Spanish character generation bitmaps
16b5a9a668 KYRA: (EOB/Spanish) - fix static resources and regenerate kyra.dat
c88c407e15 KYRA: (EOB/Spanish) - fix use of static vars
5601cf828f KYRA: (EOB/Spanish) - adapt resource manager
c78227f6a1 KYRA: (EOB/Spanish) - cleanup
39cd3f5aec KYRA: (EOB/Spanish) - add support for modified title screen
383f20e966 KYRA: (EOB/Spanish) - fix intro subtitles


Commit: e39f8dfe807ce2843a952d56140becdbf34de459
    https://github.com/scummvm/scummvm/commit/e39f8dfe807ce2843a952d56140becdbf34de459
Author: Asirome (mekkon at tutanota.com)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
SUBSYSTEM:KYRA

detection hash for spanish version of  EOBDATA3.PAK

Changed paths:
    engines/kyra/detection_tables.h


diff --git a/engines/kyra/detection_tables.h b/engines/kyra/detection_tables.h
index 4798b14ec9..6103efd930 100644
--- a/engines/kyra/detection_tables.h
+++ b/engines/kyra/detection_tables.h
@@ -1706,6 +1706,22 @@ const KYRAGameDescription adGameDescs[] = {
 		},
 		EOB_FLAGS
 	},
+	
+	{	// spanish translation
+		{
+			"eob",
+			0,
+			{
+				{ "EOBDATA3.PAK", 0, "a7800a8ea8251f678530eb952de7b815", -1 },
+				{ 0, 0, 0, 0 }
+			},
+			Common::ES_ESP,
+			Common::kPlatformDOS,
+			ADGF_NO_FLAGS,
+			GUIO9(GUIO_NOSPEECH, GUIO_MIDIADLIB, GUIO_MIDIPCSPK, GUIO_MIDIPCJR, GUIO_RENDERVGA, GUIO_RENDEREGA, GUIO_RENDERCGA, GAMEOPTION_EOB_HPGRAPHS, GAMEOPTION_EOB_MOUSESWAP)
+		},
+		EOB_FLAGS
+	},
 
 	{
 		{


Commit: 4f2bb293792fab287277f3438a7c651557422df0
    https://github.com/scummvm/scummvm/commit/4f2bb293792fab287277f3438a7c651557422df0
Author: Asirome (mekkon at tutanota.com)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
KYRA: EOB preference for DRO files

Changed paths:
    devtools/create_kyradat/games.cpp
    engines/kyra/engine/scene_eob.cpp


diff --git a/devtools/create_kyradat/games.cpp b/devtools/create_kyradat/games.cpp
index 184d2d943b..1393922317 100644
--- a/devtools/create_kyradat/games.cpp
+++ b/devtools/create_kyradat/games.cpp
@@ -100,6 +100,7 @@ const Game eob1Games[] = {
 	{ kEoB1, kPlatformDOS, kNoSpecial, EN_ANY },
 	{ kEoB1, kPlatformDOS, kNoSpecial, DE_DEU },
 	{ kEoB1, kPlatformDOS, kNoSpecial, IT_ITA },
+	{ kEoB1, kPlatformDOS, kNoSpecial, ES_ESP },
 
 	{ kEoB1, kPlatformAmiga, kNoSpecial, EN_ANY },
 	{ kEoB1, kPlatformAmiga, kNoSpecial, DE_DEU },
diff --git a/engines/kyra/engine/scene_eob.cpp b/engines/kyra/engine/scene_eob.cpp
index fea8da5806..eba81dc518 100644
--- a/engines/kyra/engine/scene_eob.cpp
+++ b/engines/kyra/engine/scene_eob.cpp
@@ -115,18 +115,19 @@ void EoBCoreEngine::loadLevel(int level, int sub) {
 void EoBCoreEngine::readLevelFileData(int level) {
 	Common::String file;
 	Common::SeekableReadStream *s = 0;
-	static const char *const suffix[] = { "INF", "DRO", "ELO", "JOT", 0 };
+	static const char *const suffix[] = { "DRO", "INF", "ELO", "JOT", 0 };
 
 	for (const char *const *sf = suffix; *sf && !s; sf++) {
 		file = Common::String::format("LEVEL%d.%s", level, *sf);
 		s = _res->createReadStream(file);
 	}
-
+	
 	if (!s)
 		error("Failed to load level file LEVEL%d.INF/DRO/ELO/JOT", level);
 
 	if (s->readUint16LE() + 2 == s->size()) {
-		if (s->readUint16LE() == 4) {
+		uint16 headerID = s->readUint16LE();
+		if (headerID == 4 /* INF file */ || headerID == 0 /* DRO file */) {
 			delete s;
 			s = 0;
 			_screen->loadBitmap(file.c_str(), 5, 5, 0, true);


Commit: 77b5ff6aba405cb0d66899bba10db33117224491
    https://github.com/scummvm/scummvm/commit/77b5ff6aba405cb0d66899bba10db33117224491
Author: Asirome (mekkon at tutanota.com)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
KYRA:EOB multiple save slots for spanish version

Changed paths:
    engines/kyra/resource/staticres_eob.cpp


diff --git a/engines/kyra/resource/staticres_eob.cpp b/engines/kyra/resource/staticres_eob.cpp
index 48c1c3f285..0078fb6669 100644
--- a/engines/kyra/resource/staticres_eob.cpp
+++ b/engines/kyra/resource/staticres_eob.cpp
@@ -520,40 +520,51 @@ void EoBCoreEngine::initStaticResource() {
 	// EOB I doesn't have load and save menus, because there is only one single
 	// save slot. Instead of emulating this we provide a menu similiar to EOB II.
 
-	static const char *const saveLoadStrings[5][4] = {
+	static const char *const saveLoadStrings[6][4] = {
 		{   "Cancel",   "Empty Slot",		"Save Game",    "Load Game"     },
 		{   "Abbr.",    "Leerer Slot",		"Speichern",    "  Laden"       },
 		{	" < < ",	"Posizione Vuota",	"Salva",		"Carica"	    },
+		{	"Volver",	"<Vacio>",	"Guardar",		"Cargar"	    },
 		{   0,          0,					0,					0			},
 		{	0,          0,					0,					0			}
 	};
 
-	static const char *const errorSlotEmptyString[5] = {
+	static const char *const errorSlotEmptyString[6] = {
 		"There is no game\rsaved in that slot!",
 		"Hier ist noch kein\rSpiel gespeichert!",
 		"Non c'\x0E alcun gioco\rsalvato in quella\rposizione!",
+		"No hay ningun juego\ren esta posicion!",
 		"\r ""\x82\xBB\x82\xCC\x83""X""\x83\x8D\x83""b""\x83""g""\x82\xC9\x82\xCD\x83""Q""\x81""[""\x83\x80\x82\xAA\x83""Z""\x81""[""\x83""u\r ""\x82\xB3\x82\xEA\x82\xC4\x82\xA2\x82\xDC\x82\xB9\x82\xF1\x81""B",
 		0
 	};
-
-	if (_flags.lang == Common::EN_ANY) {
-		_saveLoadStrings = saveLoadStrings[0];
-		_errorSlotEmptyString = errorSlotEmptyString[0];
-	} else if (_flags.lang == Common::DE_DEU) {
-		_saveLoadStrings = saveLoadStrings[1];
-		_errorSlotEmptyString = errorSlotEmptyString[1];
-	} else if (_flags.lang == Common::IT_ITA) {
-		_saveLoadStrings = saveLoadStrings[2];
-		_errorSlotEmptyString = errorSlotEmptyString[2];
-	} else if (_flags.lang == Common::JA_JPN) {
-		// EOB II FM-Towns uses English here.
-		// Only the empty slot warning is in Japanese.
-		_saveLoadStrings = saveLoadStrings[0];
-		_errorSlotEmptyString = errorSlotEmptyString[3];
-	} else {
-		_saveLoadStrings = saveLoadStrings[4];
-		_errorSlotEmptyString = errorSlotEmptyString[4];
-	}	
+	
+	switch (_flags.lang) {
+		case Common::EN_ANY:
+			_saveLoadStrings = saveLoadStrings[0];
+			_errorSlotEmptyString = errorSlotEmptyString[0];
+			break;
+		case Common::DE_DEU:
+			_saveLoadStrings = saveLoadStrings[1];
+			_errorSlotEmptyString = errorSlotEmptyString[1];
+			break;
+		case Common::IT_ITA:
+			_saveLoadStrings = saveLoadStrings[2];
+			_errorSlotEmptyString = errorSlotEmptyString[2];
+			break;
+		case Common::ES_ESP:
+			_saveLoadStrings = saveLoadStrings[3];
+			_errorSlotEmptyString = errorSlotEmptyString[3];
+			break;
+		case Common::JA_JPN:
+			// EOB II FM-Towns uses English here.
+			// Only the empty slot warning is in Japanese.
+			_saveLoadStrings = saveLoadStrings[0];
+			_errorSlotEmptyString = errorSlotEmptyString[4];
+			break;
+		default:
+			_saveLoadStrings = saveLoadStrings[5];
+			_errorSlotEmptyString = errorSlotEmptyString[5];
+	}
 
 	_menuOkString = "OK";
 }
@@ -1230,9 +1241,10 @@ void EoBEngine::initStaticResource() {
 	_monsterAcHitChanceTable1 = _monsterAcHitChanceTbl1;
 	_monsterAcHitChanceTable2 = _monsterAcHitChanceTbl2;
 
-	static const char *const errorSlotNoNameString[4] = {
+	static const char *const errorSlotNoNameString[5] = {
 		" You must specify\r a name for your\r save game!",
 		" Spielstaende mues-\r sen einen Namen\r haben!",
+		" Debes especificar\r un nombre para\r tu partida!",
 		"",
 		0
 	};
@@ -1244,9 +1256,12 @@ void EoBEngine::initStaticResource() {
 	case Common::DE_DEU:
 		_errorSlotNoNameString = errorSlotNoNameString[1];
 		break;
-	case Common::JA_JPN:
+	case Common::ES_ESP:
 		_errorSlotNoNameString = errorSlotNoNameString[2];
 		break;
+	case Common::JA_JPN:
+		_errorSlotNoNameString = errorSlotNoNameString[3];
+		break;
 	default:
 		_errorSlotNoNameString = errorSlotNoNameString[ARRAYSIZE(errorSlotNoNameString) - 1];
 	}
@@ -1452,16 +1467,15 @@ void DarkMoonEngine::initStaticResource() {
 	_amigaSoundIndex2 = _staticres->loadRawData(kEoB2SoundIndex2, temp);
 	_amigaSoundPatch = _staticres->loadRawData(kEoB2MonsterSoundPatchData, _amigaSoundPatchSize);
 
-	static const char *const errorSlotNoNameString[3] = {
+	static const char *const errorSlotNoNameString[4] = {
 		" You must specify\r a name for your\r save game!",
 		" Spielst[nde m]ssen\r einen Namen haben!",
+		" Debes especificar\r un nombre para\r tu partida!",
 		0
 	};
 
-	_errorSlotNoNameString = errorSlotNoNameString[(_flags.lang == Common::EN_ANY) ? 0 : ((_flags.lang == Common::DE_DEU) ? 1 : 2)];
-
 	// ScummVM specific
-	static const char *const transferStringsScummVM[3][5] = {
+	static const char *const transferStringsScummVM[4][5] = {
 		{
 			"\r We cannot find any EOB save game\r file. Please make sure that the\r save game file with the party\r you wish to transfer is located\r in your ScummVM save game\r directory. If you have set up\r multiple save directories you\r have to copy the EOB save file\r into your EOB II save directory.\r Do you wish to try again?",
 			"Game ID",
@@ -1476,12 +1490,36 @@ void DarkMoonEngine::initStaticResource() {
 			"Spiel W[hlen",
 			"\r\r  Bitte warten..."
 		},
+		{
+			"\r No se ha encontrado ninguna partida\r de EOB. Comprueba que el fichero de la partida que quieres\r transferir se encuentra en el\r directorio de ScummVM para los\r juegos guardados. Si tienes\r varios de estos directorios debes\r copiar el fichero en tu directorio\r de guardado de EOB II.\r Quieres volver a intentarlo?",
+			"Game ID",
+			"\r Parece que ya se ha vencido\r Xanathar aqui. Deseas transferir\r el grupo que ha\r finalizado el juego? En caso contrario\r puedes seleccionar otra partida\r de las anteriores guardadas.",
+			"Escoge Fichero",
+			"\r\r   Un momento por favor..."
+		},
 		{
 			0, 0, 0, 0
 		}
 	};
+	
+	switch(_flags.lang) {
+		case Common::EN_ANY:
+			_errorSlotNoNameString = errorSlotNoNameString[0];
+			_transferStringsScummVM = transferStringsScummVM[0];
+			break;
+		case Common::DE_DEU:
+			_errorSlotNoNameString = errorSlotNoNameString[1];
+			_transferStringsScummVM = transferStringsScummVM[1];
+			break;
+		case Common::ES_ESP:
+			_errorSlotNoNameString = errorSlotNoNameString[2];
+			_transferStringsScummVM = transferStringsScummVM[2];
+			break;
+		default:
+			_errorSlotNoNameString = errorSlotNoNameString[3];
+			_transferStringsScummVM = transferStringsScummVM[3];
+	}
 
-	_transferStringsScummVM = transferStringsScummVM[(_flags.lang == Common::EN_ANY) ? 0 : ((_flags.lang == Common::DE_DEU) ? 1 : 2)];
 }
 
 void DarkMoonEngine::initSpells() {


Commit: c4fa0d45388bbc0e07a38d32de2363ab99a90953
    https://github.com/scummvm/scummvm/commit/c4fa0d45388bbc0e07a38d32de2363ab99a90953
Author: Asirome (mekkon at tutanota.com)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
KYRA:EOB add spanish resources

Changed paths:
  A devtools/create_kyradat/resources/eob1_dos_spanish.h
    devtools/create_kyradat/resources.cpp


diff --git a/devtools/create_kyradat/resources.cpp b/devtools/create_kyradat/resources.cpp
index fdc02034e2..9161ea3136 100644
--- a/devtools/create_kyradat/resources.cpp
+++ b/devtools/create_kyradat/resources.cpp
@@ -94,6 +94,7 @@
 #include "resources/eob1_dos_english.h"
 #include "resources/eob1_dos_german.h"
 #include "resources/eob1_dos_italian.h"
+#include "resources/eob1_dos_spanish.h"
 #include "resources/eob1_amiga.h"
 #include "resources/eob1_amiga_english.h"
 #include "resources/eob1_amiga_german.h"
@@ -359,6 +360,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ k1GUIStrings, kKyra1, kPlatformDOS, kNoSpecial, FR_FRA, &k1GUIStringsDOSFrenchProvider },
 	{ k1NewGameString, kKyra1, kPlatformDOS, kNoSpecial, FR_FRA, &k1NewGameStringDOSFrenchProvider },
 	{ k1ConfigStrings, kKyra1, kPlatformDOS, kNoSpecial, FR_FRA, &k1ConfigStringsDOSFrenchProvider },
+	
 	{ k1IntroStrings, kKyra1, kPlatformDOS, kNoSpecial, IT_ITA, &k1IntroStringsDOSItalianProvider },
 	{ k1ItemNames, kKyra1, kPlatformDOS, kNoSpecial, IT_ITA, &k1ItemNamesDOSItalianProvider },
 	{ k1TakenStrings, kKyra1, kPlatformDOS, kNoSpecial, IT_ITA, &k1TakenStringsDOSItalianProvider },
@@ -381,6 +383,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ k1GUIStrings, kKyra1, kPlatformDOS, kNoSpecial, IT_ITA, &k1GUIStringsDOSItalianProvider },
 	{ k1NewGameString, kKyra1, kPlatformDOS, kNoSpecial, IT_ITA, &k1NewGameStringDOSItalianProvider },
 	{ k1ConfigStrings, kKyra1, kPlatformDOS, kNoSpecial, IT_ITA, &k1ConfigStringsDOSItalianProvider },
+	
 	{ k1IntroStrings, kKyra1, kPlatformDOS, kNoSpecial, ES_ESP, &k1IntroStringsDOSSpanishProvider },
 	{ k1ItemNames, kKyra1, kPlatformDOS, kNoSpecial, ES_ESP, &k1ItemNamesDOSSpanishProvider },
 	{ k1TakenStrings, kKyra1, kPlatformDOS, kNoSpecial, ES_ESP, &k1TakenStringsDOSSpanishProvider },
@@ -868,7 +871,9 @@ static const ResourceProvider resourceProviders[] = {
 	{ k2IngameShapeAnimData, kKyra2, kPlatformDOS, kNoSpecial, UNK_LANG, &k2IngameShapeAnimDataDOSProvider },
 	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, FR_FRA, &k2SeqplayStringsDOSFrenchProvider },
 	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, DE_DEU, &k2SeqplayStringsDOSGermanProvider },
+	
 	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, IT_ITA, &k2SeqplayStringsDOSItalianProvider },
+	
 	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, RU_RUS, &k2SeqplayStringsDOSRussianProvider },
 	{ k2SeqplayPakFiles, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayPakFilesDOSCDProvider },
 	{ k2SeqplayCredits, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayCreditsDOSCDProvider },
@@ -1264,6 +1269,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kNoSpecial, DE_DEU, &kEoB1ManWordDOSGermanProvider },
 	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kNoSpecial, DE_DEU, &kEoB1ManPromptDOSGermanProvider },
 	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kNoSpecial, DE_DEU, &kEoB1MonsterDistAttStringsDOSGermanProvider },
+	
 	{ kEoBBaseChargenStrings1, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ChargenStrings1DOSItalianProvider },
 	{ kEoBBaseChargenStrings2, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ChargenStrings2DOSItalianProvider },
 	{ kEoBBaseChargenStatStrings, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ChargenStatStringsDOSItalianProvider },
@@ -1353,6 +1359,98 @@ static const ResourceProvider resourceProviders[] = {
 	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ManWordDOSItalianProvider },
 	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ManPromptDOSItalianProvider },
 	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1MonsterDistAttStringsDOSItalianProvider },
+	
+	{ kEoBBaseChargenStrings1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenStrings1DOSSpanishProvider },
+	{ kEoBBaseChargenStrings2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenStrings2DOSSpanishProvider },
+	{ kEoBBaseChargenStatStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenStatStringsDOSSpanishProvider },
+	{ kEoBBaseChargenRaceSexStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenRaceSexStringsDOSSpanishProvider },
+	{ kEoBBaseChargenClassStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenClassStringsDOSSpanishProvider },
+	{ kEoBBaseChargenAlignmentStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenAlignmentStringsDOSSpanishProvider },
+	{ kEoBBaseChargenEnterGameStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenEnterGameStringsDOSSpanishProvider },
+	{ kEoB1MainMenuStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MainMenuStringsDOSSpanishProvider },
+	{ kEoB1BonusStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1BonusStringsDOSSpanishProvider },
+	{ kEoB1TurnUndeadString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1TurnUndeadStringDOSSpanishProvider },
+	{ kEoB1Npc0Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc0StringsDOSSpanishProvider },
+	{ kEoB1Npc11Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc11StringsDOSSpanishProvider },
+	{ kEoB1Npc12Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc12StringsDOSSpanishProvider },
+	{ kEoB1Npc21Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc21StringsDOSSpanishProvider },
+	{ kEoB1Npc22Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc22StringsDOSSpanishProvider },
+	{ kEoB1Npc31Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc31StringsDOSSpanishProvider },
+	{ kEoB1Npc32Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc32StringsDOSSpanishProvider },
+	{ kEoB1Npc4Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc4StringsDOSSpanishProvider },
+	{ kEoB1Npc5Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc5StringsDOSSpanishProvider },
+	{ kEoB1Npc6Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc6StringsDOSSpanishProvider },
+	{ kEoB1Npc7Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc7StringsDOSSpanishProvider },
+	{ kEoBBasePryDoorStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PryDoorStringsDOSSpanishProvider },
+	{ kEoBBaseWarningStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1WarningStringsDOSSpanishProvider },
+	{ kEoBBaseItemSuffixStringsRings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemSuffixStringsRingsDOSSpanishProvider },
+	{ kEoBBaseItemSuffixStringsPotions, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemSuffixStringsPotionsDOSSpanishProvider },
+	{ kEoBBaseItemSuffixStringsWands, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemSuffixStringsWandsDOSSpanishProvider },
+	{ kEoBBaseRipItemStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1RipItemStringsDOSSpanishProvider },
+	{ kEoBBaseCursedString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CursedStringDOSSpanishProvider },
+	{ kEoBBaseMagicObjectStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicObjectStringsDOSSpanishProvider },
+	{ kEoBBaseMagicObjectString5, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicObjectString5DOSSpanishProvider },
+	{ kEoBBasePatternSuffix, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PatternSuffixDOSSpanishProvider },
+	{ kEoBBasePatternGrFix1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PatternGrFix1DOSSpanishProvider },
+	{ kEoBBasePatternGrFix2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PatternGrFix2DOSSpanishProvider },
+	{ kEoBBaseValidateArmorString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ValidateArmorStringDOSSpanishProvider },
+	{ kEoBBaseValidateNoDropString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ValidateNoDropStringDOSSpanishProvider },
+	{ kEoBBasePotionStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PotionStringsDOSSpanishProvider },
+	{ kEoBBaseWandStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1WandStringsDOSSpanishProvider },
+	{ kEoBBaseItemMisuseStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemMisuseStringsDOSSpanishProvider },
+	{ kEoBBaseTakenStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1TakenStringsDOSSpanishProvider },
+	{ kEoBBasePotionEffectStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PotionEffectStringsDOSSpanishProvider },
+	{ kEoBBaseYesNoStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1YesNoStringsDOSSpanishProvider },
+	{ kRpgCommonMoreStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MoreStringsDOSSpanishProvider },
+	{ kEoBBaseNpcMaxStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1NpcMaxStringsDOSSpanishProvider },
+	{ kEoBBaseNpcJoinStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1NpcJoinStringsDOSSpanishProvider },
+	{ kEoBBaseCancelStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CancelStringsDOSSpanishProvider },
+	{ kEoBBaseMenuStringsMain, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsMainDOSSpanishProvider },
+	{ kEoBBaseMenuStringsSaveLoad, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsSaveLoadDOSSpanishProvider },
+	{ kEoBBaseMenuStringsOnOff, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsOnOffDOSSpanishProvider },
+	{ kEoBBaseMenuStringsSpells, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsSpellsDOSSpanishProvider },
+	{ kEoBBaseMenuStringsRest, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsRestDOSSpanishProvider },
+	{ kEoBBaseMenuStringsDrop, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsDropDOSSpanishProvider },
+	{ kEoBBaseMenuStringsExit, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsExitDOSSpanishProvider },
+	{ kEoBBaseMenuStringsStarve, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsStarveDOSSpanishProvider },
+	{ kEoBBaseMenuStringsScribe, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsScribeDOSSpanishProvider },
+	{ kEoBBaseMenuStringsDrop2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsDrop2DOSSpanishProvider },
+	{ kEoBBaseMenuStringsHead, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsHeadDOSSpanishProvider },
+	{ kEoBBaseMenuStringsPoison, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsPoisonDOSSpanishProvider },
+	{ kEoBBaseMenuStringsMgc, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsMgcDOSSpanishProvider },
+	{ kEoBBaseMenuStringsPrefs, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsPrefsDOSSpanishProvider },
+	{ kEoBBaseMenuStringsRest2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsRest2DOSSpanishProvider },
+	{ kEoBBaseMenuStringsRest4, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsRest4DOSSpanishProvider },
+	{ kEoBBaseMenuStringsDefeat, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsDefeatDOSSpanishProvider },
+	{ kEoBBaseMenuYesNoStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuYesNoStringsDOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsHp, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsHpDOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsWp1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsWp1DOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsWr, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsWrDOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsSt1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsSt1DOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsIn, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsInDOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings7, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings7DOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings81, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings81DOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings9, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings9DOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings131, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings131DOSSpanishProvider },
+	{ kEoBBaseLevelGainStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1LevelGainStringsDOSSpanishProvider },
+	{ kEoBBaseBookNumbers, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1BookNumbersDOSSpanishProvider },
+	{ kEoBBaseMageSpellsList, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MageSpellsListDOSSpanishProvider },
+	{ kEoBBaseClericSpellsList, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ClericSpellsListDOSSpanishProvider },
+	{ kEoBBaseSpellNames, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1SpellNamesDOSSpanishProvider },
+	{ kEoBBaseMagicStrings1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings1DOSSpanishProvider },
+	{ kEoBBaseMagicStrings2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings2DOSSpanishProvider },
+	{ kEoBBaseMagicStrings3, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings3DOSSpanishProvider },
+	{ kEoBBaseMagicStrings4, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings4DOSSpanishProvider },
+	{ kEoBBaseMagicStrings6, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings6DOSSpanishProvider },
+	{ kEoBBaseMagicStrings7, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings7DOSSpanishProvider },
+	{ kEoBBaseMagicStrings8, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings8DOSSpanishProvider },
+	//{ kEoBBaseMagicStrings9, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings9DOSSpanishProvider },
+	{ kEoBBaseManDef, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ManDefDOSSpanishProvider },
+	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ManWordDOSSpanishProvider },
+	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ManPromptDOSSpanishProvider },
+	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MonsterDistAttStringsDOSSpanishProvider },
+	
+	
 	{ kEoBBaseChargenStrings1, kEoB1, kPlatformAmiga, kNoSpecial, EN_ANY, &kEoB1ChargenStrings1AmigaEnglishProvider },
 	{ kEoBBaseChargenStrings2, kEoB1, kPlatformAmiga, kNoSpecial, EN_ANY, &kEoB1ChargenStrings2AmigaEnglishProvider },
 	{ kEoBBaseChargenStartLevels, kEoB1, kPlatformAmiga, kNoSpecial, UNK_LANG, &kEoB1ChargenStartLevelsAmigaProvider },
diff --git a/devtools/create_kyradat/resources/eob1_dos_spanish.h b/devtools/create_kyradat/resources/eob1_dos_spanish.h
new file mode 100644
index 0000000000..c7315f3d37
--- /dev/null
+++ b/devtools/create_kyradat/resources/eob1_dos_spanish.h
@@ -0,0 +1,897 @@
+static const char *const kEoB1ChargenStrings1DOSSpanish[9] = {
+	"Tu grupo esta\rcompleto. Pulsa\rla tecla 'P' o\r'PLAY' para\rempezar a jugar.",
+	"          ",
+	"AC\rPV\rNIV",
+	"%s\r%d\r%d\r%d\r%d\r%d",
+	"%d\r%d",
+	"%d",
+	"%d/%d",
+	"%d/%d/%d",
+	"Pulsa en la ventana\rdel personaje que\rdesees crear o ver."
+};
+
+static const StringListProvider kEoB1ChargenStrings1DOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenStrings1DOSSpanish), kEoB1ChargenStrings1DOSSpanish };
+
+static const char *const kEoB1ChargenStrings2DOSSpanish[12] = {
+	"%s",
+	"%d",
+	"%s",
+	"%d",
+	"%d",
+	"%d",
+	"%s",
+	"%d",
+	"ESCOGE RAZA:",
+	"ESCOGE OCUPACION:",
+	"ESCOGE ALINEACION:",
+	"Nomb:"
+};
+
+static const StringListProvider kEoB1ChargenStrings2DOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenStrings2DOSSpanish), kEoB1ChargenStrings2DOSSpanish };
+
+static const char *const kEoB1ChargenStatStringsDOSSpanish[12] = {
+	"FUE",
+	"INT",
+	"SAB",
+	"DES",
+	"CON",
+	"CAR",
+	"FUERZA",
+	"INTELIGENCIA",
+	"SABIDURIA",
+	"DESTREZA",
+	"CONSTITUCION",
+	"CARISMA"
+};
+
+static const StringListProvider kEoB1ChargenStatStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenStatStringsDOSSpanish), kEoB1ChargenStatStringsDOSSpanish };
+
+static const char *const kEoB1ChargenRaceSexStringsDOSSpanish[12] = {
+	"HUMANO VARON",
+	"HUMANO HEMBRA",
+	"ELFO VARON",
+	"ELFO HEMBRA",
+	"MEDIOELFO VARON",
+	"MEDIOELFO HEMBRA",
+	"ENANO VARON",
+	"ENANO HEMBRA",
+	"NOMO VARON",
+	"NOMO HEMBRA",
+	"HALFLING VARON",
+	"HALFLING HEMBRA"
+};
+
+static const StringListProvider kEoB1ChargenRaceSexStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenRaceSexStringsDOSSpanish), kEoB1ChargenRaceSexStringsDOSSpanish };
+
+static const char *const kEoB1ChargenClassStringsDOSSpanish[21] = {
+	"GUERRERO",
+	"EXPLORADOR",
+	"PALADIN",
+	"MAGO",
+	"CLERIGO",
+	"LADRON",
+	"GUERRERO/CLERIGO",
+	"GUERRERO/LADRON",
+	"GUERRERO/MAGO",
+	"GUERR./MAGO/LADRON",
+	"LADRON/MAGO",
+	"CLERIGO/LADRON",
+	"GUERR./CLERIGO/MAGO",
+	"EXPLORADOR/CLERIGO",
+	"CLERIGO/MAGO",
+	"GUERRERO",
+	"MAGO",
+	"CLERIGO",
+	"LADRON",
+	"PALADIN",
+	"EXPLORADOR"
+};
+
+static const StringListProvider kEoB1ChargenClassStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenClassStringsDOSSpanish), kEoB1ChargenClassStringsDOSSpanish };
+
+static const char *const kEoB1ChargenAlignmentStringsDOSSpanish[9] = {
+	"LEGAL BUENO",
+	"NEUTRAL BUENO",
+	"CAOTICO BUENO",
+	"LEGAL NEUTRAL",
+	"NEUTRAL PURO",
+	"CAOTICO NEUTRAL",
+	"LEGAL MALVADO",
+	"NEUTRAL MALVADO",
+	"CAOTICO MALVADO"
+};
+
+static const StringListProvider kEoB1ChargenAlignmentStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenAlignmentStringsDOSSpanish), kEoB1ChargenAlignmentStringsDOSSpanish };
+
+static const char *const kEoB1ChargenEnterGameStringsDOSSpanish[1] = {
+	"  BUENA SUERTE!!\r  un momento..."
+};
+
+static const StringListProvider kEoB1ChargenEnterGameStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1ChargenEnterGameStringsDOSSpanish), kEoB1ChargenEnterGameStringsDOSSpanish };
+
+static const char *const kEoB1MainMenuStringsDOSSpanish[3] = {
+	"CARGAR ULTIMA PARTIDA\r",
+	"COMENZAR PARTIDA\r",
+	"SALIR AL DOS\r"
+};
+
+static const StringListProvider kEoB1MainMenuStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1MainMenuStringsDOSSpanish), kEoB1MainMenuStringsDOSSpanish };
+
+static const char *const kEoB1BonusStringsDOSSpanish[3] = {
+	"Felicidades por completar los 12 niveles de Beholder.\r\rLos personajes que consiguen el premio del vencedor son:\r\r",
+	"\r",
+	"\r\rClave: %04x\r"
+};
+
+static const StringListProvider kEoB1BonusStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1BonusStringsDOSSpanish), kEoB1BonusStringsDOSSpanish };
+
+static const char *const kEoB1TurnUndeadStringDOSSpanish[1] = {
+	"\x06\x06""%s usa su poder contra los muertos!""\x06\x0F""\r"
+};
+
+static const StringListProvider kEoB1TurnUndeadStringDOSSpanishProvider = { ARRAYSIZE(kEoB1TurnUndeadStringDOSSpanish), kEoB1TurnUndeadStringDOSSpanish };
+
+static const char *const kEoB1Npc0StringsDOSSpanish[2] = {
+	"\r     Te deseo suerte en tus viajes.",
+	"Quien debe ser resucitado?"
+};
+
+static const StringListProvider kEoB1Npc0StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc0StringsDOSSpanish), kEoB1Npc0StringsDOSSpanish };
+
+static const char *const kEoB1Npc11StringsDOSSpanish[3] = {
+	"Curar sus heridas",
+	"Hablar",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc11StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc11StringsDOSSpanish), kEoB1Npc11StringsDOSSpanish };
+
+static const char *const kEoB1Npc12StringsDOSSpanish[2] = {
+	"Curar sus heridas",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc12StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc12StringsDOSSpanish), kEoB1Npc12StringsDOSSpanish };
+
+static const char *const kEoB1Npc21StringsDOSSpanish[2] = {
+	"Escuchar propuesta",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc21StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc21StringsDOSSpanish), kEoB1Npc21StringsDOSSpanish };
+
+static const char *const kEoB1Npc22StringsDOSSpanish[2] = {
+	"Ayudar",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc22StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc22StringsDOSSpanish), kEoB1Npc22StringsDOSSpanish };
+
+static const char *const kEoB1Npc31StringsDOSSpanish[2] = {
+	"Curar grupo",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc31StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc31StringsDOSSpanish), kEoB1Npc31StringsDOSSpanish };
+
+static const char *const kEoB1Npc32StringsDOSSpanish[3] = {
+	"Curar grupo",
+	"Resucitar",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc32StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc32StringsDOSSpanish), kEoB1Npc32StringsDOSSpanish };
+
+static const char *const kEoB1Npc4StringsDOSSpanish[2] = {
+	"Atacar",
+	"Sobornar"
+};
+
+static const StringListProvider kEoB1Npc4StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc4StringsDOSSpanish), kEoB1Npc4StringsDOSSpanish };
+
+static const char *const kEoB1Npc5StringsDOSSpanish[3] = {
+	"Matar",
+	"Escuchar",
+	"Dejar ir"
+};
+
+static const StringListProvider kEoB1Npc5StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc5StringsDOSSpanish), kEoB1Npc5StringsDOSSpanish };
+
+static const char *const kEoB1Npc6StringsDOSSpanish[2] = {
+	"Rendirse",
+	"Atacar"
+};
+
+static const StringListProvider kEoB1Npc6StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc6StringsDOSSpanish), kEoB1Npc6StringsDOSSpanish };
+
+static const char *const kEoB1Npc7StringsDOSSpanish[3] = {
+	"Liberar",
+	"Matar",
+	"Dejar"
+};
+
+static const StringListProvider kEoB1Npc7StringsDOSSpanishProvider = { ARRAYSIZE(kEoB1Npc7StringsDOSSpanish), kEoB1Npc7StringsDOSSpanish };
+
+static const char *const kEoB1PryDoorStringsDOSSpanish[7] = {
+	"Ninguno puede forzar esta puerta.\r",
+	"El grupo fuerza la puerta.\r",
+	"%s fuerza la puerta!\r",
+	"El grupo trata de forzar la puerta y falla.\r",
+	"No puedes poner el objeto ahi.\r",
+	"Demasiado grande para encajar.\r",
+	"Nadie es capaz de forzar la puerta.\r"
+};
+
+static const StringListProvider kEoB1PryDoorStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1PryDoorStringsDOSSpanish), kEoB1PryDoorStringsDOSSpanish };
+
+static const char *const kEoB1WarningStringsDOSSpanish[3] = {
+	"No puedes ir por ahi.\r",
+	"%s no es capaz de alimentarse!\r",
+	"Debes alimentarte!\r"
+};
+
+static const StringListProvider kEoB1WarningStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1WarningStringsDOSSpanish), kEoB1WarningStringsDOSSpanish };
+
+static const char *const kEoB1ItemSuffixStringsRingsDOSSpanish[4] = {
+	"Ornamento",
+	"Hechiceria",
+	"Sustento",
+	"Caida Suave"
+};
+
+static const StringListProvider kEoB1ItemSuffixStringsRingsDOSSpanishProvider = { ARRAYSIZE(kEoB1ItemSuffixStringsRingsDOSSpanish), kEoB1ItemSuffixStringsRingsDOSSpanish };
+
+static const char *const kEoB1ItemSuffixStringsPotionsDOSSpanish[8] = {
+	"Fuerza Gigante",
+	"Curacion",
+	"Gran Curacion",
+	"Veneno",
+	"Vitalidad",
+	"Velocidad",
+	"Invisibilidad",
+	"Antidoto"
+};
+
+static const StringListProvider kEoB1ItemSuffixStringsPotionsDOSSpanishProvider = { ARRAYSIZE(kEoB1ItemSuffixStringsPotionsDOSSpanish), kEoB1ItemSuffixStringsPotionsDOSSpanish };
+
+static const char *const kEoB1ItemSuffixStringsWandsDOSSpanish[7] = {
+	"Varita",
+	"Relampagos",
+	"Congelacion",
+	"Curacion",
+	"Bolas de Fuego",
+	"Silvias",
+	"Misiles Magicos "
+};
+
+static const StringListProvider kEoB1ItemSuffixStringsWandsDOSSpanishProvider = { ARRAYSIZE(kEoB1ItemSuffixStringsWandsDOSSpanish), kEoB1ItemSuffixStringsWandsDOSSpanish };
+
+static const char *const kEoB1RipItemStringsDOSSpanish[3] = {
+	"%s ha perdido la ",
+	"%s ha perdido su ",
+	".\r"
+};
+
+static const StringListProvider kEoB1RipItemStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1RipItemStringsDOSSpanish), kEoB1RipItemStringsDOSSpanish };
+
+static const char *const kEoB1CursedStringDOSSpanish[1] = {
+	"Maldito %s %d"
+};
+
+static const StringListProvider kEoB1CursedStringDOSSpanishProvider = { ARRAYSIZE(kEoB1CursedStringDOSSpanish), kEoB1CursedStringDOSSpanish };
+
+static const char *const kEoB1MagicObjectStringsDOSSpanish[5] = {
+	"Pergamino de Mago",
+	"Pergamino de Clerigo",
+	"Anillo",
+	"Pocion",
+	"Vara"
+};
+
+static const StringListProvider kEoB1MagicObjectStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1MagicObjectStringsDOSSpanish), kEoB1MagicObjectStringsDOSSpanish };
+
+static const char *const kEoB1MagicObjectString5DOSSpanish[1] = {
+	"Varita"
+};
+
+static const StringListProvider kEoB1MagicObjectString5DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicObjectString5DOSSpanish), kEoB1MagicObjectString5DOSSpanish };
+
+static const char *const kEoB1PatternSuffixDOSSpanish[1] = {
+	"%s de %s"
+};
+
+static const StringListProvider kEoB1PatternSuffixDOSSpanishProvider = { ARRAYSIZE(kEoB1PatternSuffixDOSSpanish), kEoB1PatternSuffixDOSSpanish };
+
+static const char *const kEoB1PatternGrFix1DOSSpanish[1] = {
+	"%s de %s"
+};
+
+static const StringListProvider kEoB1PatternGrFix1DOSSpanishProvider = { ARRAYSIZE(kEoB1PatternGrFix1DOSSpanish), kEoB1PatternGrFix1DOSSpanish };
+
+static const char *const kEoB1PatternGrFix2DOSSpanish[1] = {
+	"%s de %s"
+};
+
+static const StringListProvider kEoB1PatternGrFix2DOSSpanishProvider = { ARRAYSIZE(kEoB1PatternGrFix2DOSSpanish), kEoB1PatternGrFix2DOSSpanish };
+
+static const char *const kEoB1ValidateArmorStringDOSSpanish[1] = {
+	"%s no usa esa clase de armadura.\r"
+};
+
+static const StringListProvider kEoB1ValidateArmorStringDOSSpanishProvider = { ARRAYSIZE(kEoB1ValidateArmorStringDOSSpanish), kEoB1ValidateArmorStringDOSSpanish };
+
+static const char *const kEoB1ValidateNoDropStringDOSSpanish[1] = {
+	"No puedes colocar eso ahi.\r"
+};
+
+static const StringListProvider kEoB1ValidateNoDropStringDOSSpanishProvider = { ARRAYSIZE(kEoB1ValidateNoDropStringDOSSpanish), kEoB1ValidateNoDropStringDOSSpanish };
+
+static const char *const kEoB1PotionStringsDOSSpanish[2] = {
+	"envenenado",
+	"%s esta %s!\r"
+};
+
+static const StringListProvider kEoB1PotionStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1PotionStringsDOSSpanish), kEoB1PotionStringsDOSSpanish };
+
+static const char *const kEoB1WandStringsDOSSpanish[2] = {
+	"La varita no parece que sea magica\r",
+	"sin efecto.\r"
+};
+
+static const StringListProvider kEoB1WandStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1WandStringsDOSSpanish), kEoB1WandStringsDOSSpanish };
+
+static const char *const kEoB1ItemMisuseStringsDOSSpanish[3] = {
+	"%s no puedes usar eso.\r",
+	"Se activa solo cuando es necesario.\r",
+	"Este objeto no se usa de esa forma .\r"
+};
+
+static const StringListProvider kEoB1ItemMisuseStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1ItemMisuseStringsDOSSpanish), kEoB1ItemMisuseStringsDOSSpanish };
+
+static const char *const kEoB1TakenStringsDOSSpanish[1] = {
+	".\r"
+};
+
+static const StringListProvider kEoB1TakenStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1TakenStringsDOSSpanish), kEoB1TakenStringsDOSSpanish };
+
+static const char *const kEoB1PotionEffectStringsDOSSpanish[8] = {
+	"mas fuerte",
+	"mejor",
+	"mucho mejor",
+	"debil",
+	"saciado",
+	"rapido y agil",
+	"transparente",
+	"mejor"
+};
+
+static const StringListProvider kEoB1PotionEffectStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1PotionEffectStringsDOSSpanish), kEoB1PotionEffectStringsDOSSpanish };
+
+static const char *const kEoB1YesNoStringsDOSSpanish[2] = {
+	"si",
+	"no"
+};
+
+static const StringListProvider kEoB1YesNoStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1YesNoStringsDOSSpanish), kEoB1YesNoStringsDOSSpanish };
+
+static const char *const kEoB1MoreStringsDOSSpanish[1] = {
+	"MAS"
+};
+
+static const StringListProvider kEoB1MoreStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1MoreStringsDOSSpanish), kEoB1MoreStringsDOSSpanish };
+
+static const char *const kEoB1NpcMaxStringsDOSSpanish[1] = {
+	"No puedes tener mas de seis personajes en tu grupo. Escoge uno para abandonar."
+};
+
+static const StringListProvider kEoB1NpcMaxStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1NpcMaxStringsDOSSpanish), kEoB1NpcMaxStringsDOSSpanish };
+
+static const char *const kEoB1NpcJoinStringsDOSSpanish[1] = {
+	"%s se une al grupo.\r"
+};
+
+static const StringListProvider kEoB1NpcJoinStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1NpcJoinStringsDOSSpanish), kEoB1NpcJoinStringsDOSSpanish };
+
+static const char *const kEoB1CancelStringsDOSSpanish[1] = {
+	"CANCELAR"
+};
+
+static const StringListProvider kEoB1CancelStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1CancelStringsDOSSpanish), kEoB1CancelStringsDOSSpanish };
+
+static const char *const kEoB1MenuStringsMainDOSSpanish[8] = {
+	"Escoge Opcion:",
+	"Descansar grupo",
+	"Memorizar Conjuros",
+	"Orar Conjuros",
+	"Utilizar Pergaminos",
+	"Preferencias",
+	"Opciones",
+	"Salir"
+};
+
+static const StringListProvider kEoB1MenuStringsMainDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsMainDOSSpanish), kEoB1MenuStringsMainDOSSpanish };
+
+static const char *const kEoB1MenuStringsSaveLoadDOSSpanish[8] = {
+	"Cargar Juego",
+	"Guardar Juego",
+	"Dejar Personaje",
+	"Abandonar Juego",
+	"Opciones:",
+	"\r  Juego guardado.",
+	"\r Guardar juego\r ERROR!",
+	"\r Cargar juego\r ERROR!"
+};
+
+static const StringListProvider kEoB1MenuStringsSaveLoadDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsSaveLoadDOSSpanish), kEoB1MenuStringsSaveLoadDOSSpanish };
+
+static const char *const kEoB1MenuStringsOnOffDOSSpanish[2] = {
+	"ON",
+	"OFF"
+};
+
+static const StringListProvider kEoB1MenuStringsOnOffDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsOnOffDOSSpanish), kEoB1MenuStringsOnOffDOSSpanish };
+
+static const char *const kEoB1MenuStringsSpellsDOSSpanish[17] = {
+	"\r\r Escoge un personaje\r de tu grupo para\r aprender conjuros.",
+	"\r Tu Paladin es de\r poco nivel para\r conjurar.",
+	"\r\r El Mago no tiene\r su libro de Magia!",
+	"\r\r\r Escoge el personaje \r de tu grupo\r que quieras para\r invocar conjuros.",
+	"\r No tienes\r ningun Clerigo\r capaz de invocar\r conjuros.",
+	"\r No tienes un Mago\r capaz de aprender\r conjuros.",
+	" Un Mago inconsciente\r o muerto\r no puede aprender\r conjuros.",
+	" Un Monje inconsciente\r o muerto\r no puede invocar\r conjuros.",
+	"1",
+	"2",
+	"3",
+	"4",
+	"5",
+	"Borrar",
+	"Conjuros Posibles:",
+	"Si",
+	"No"
+};
+
+static const StringListProvider kEoB1MenuStringsSpellsDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsSpellsDOSSpanish), kEoB1MenuStringsSpellsDOSSpanish };
+
+static const char *const kEoB1MenuStringsRestDOSSpanish[5] = {
+	"\rDesea tu sanador\rcurar al grupo?",
+	" Algunos aun estan\r heridos.Reposo\r hasta curar?",
+	"Descansar grupo.",
+	"\r Los personajes\r estan\r descansados.",
+	" Tu grupo necesita\r descansar para\r obtener los conjuros."
+};
+
+static const StringListProvider kEoB1MenuStringsRestDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsRestDOSSpanish), kEoB1MenuStringsRestDOSSpanish };
+
+static const char *const kEoB1MenuStringsDropDOSSpanish[1] = {
+	" No puedes tener\r menos de cuatro\r personajes."
+};
+
+static const StringListProvider kEoB1MenuStringsDropDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsDropDOSSpanish), kEoB1MenuStringsDropDOSSpanish };
+
+static const char *const kEoB1MenuStringsExitDOSSpanish[1] = {
+	" Seguro que quieres\r abandonar el\r juego?"
+};
+
+static const StringListProvider kEoB1MenuStringsExitDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsExitDOSSpanish), kEoB1MenuStringsExitDOSSpanish };
+
+static const char *const kEoB1MenuStringsStarveDOSSpanish[1] = {
+	" Tu grupo esta\r hambriento. Deseas\r que continuen\r reposando?"
+};
+
+static const StringListProvider kEoB1MenuStringsStarveDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsStarveDOSSpanish), kEoB1MenuStringsStarveDOSSpanish };
+
+static const char *const kEoB1MenuStringsScribeDOSSpanish[5] = {
+	"Escoge los pergamino(s)\rque deseas escribir .",
+	"\r\r\r Selecciona un\r Mago de tu grupo\r para transcribir\r los conjuros.",
+	" No tienes ningun\r pergamino para\r transcribir.",
+	" No tienes\r ningun pergamino\r para este Mago.",
+	"\r No tienes un\r Mago capaz de\r transcribir\r pergaminos."
+};
+
+static const StringListProvider kEoB1MenuStringsScribeDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsScribeDOSSpanish), kEoB1MenuStringsScribeDOSSpanish };
+
+static const char *const kEoB1MenuStringsDrop2DOSSpanish[3] = {
+	" Selecciona\r el personaje\r para abandonar.",
+	" Seguro que\r deseas GUARDAR el\r juego?",
+	" Seguro que deseas\r CARGAR el juego \r grabado?"
+};
+
+static const StringListProvider kEoB1MenuStringsDrop2DOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsDrop2DOSSpanish), kEoB1MenuStringsDrop2DOSSpanish };
+
+static const char *const kEoB1MenuStringsHeadDOSSpanish[3] = {
+	"Campamento:",
+	"Preferencias:",
+	"Opciones:"
+};
+
+static const StringListProvider kEoB1MenuStringsHeadDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsHeadDOSSpanish), kEoB1MenuStringsHeadDOSSpanish };
+
+static const char *const kEoB1MenuStringsPoisonDOSSpanish[1] = {
+	"Los miembros del\rgrupo envenenados moriran!\rDescansar igualmente?"
+};
+
+static const StringListProvider kEoB1MenuStringsPoisonDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsPoisonDOSSpanish), kEoB1MenuStringsPoisonDOSSpanish };
+
+static const char *const kEoB1MenuStringsMgcDOSSpanish[2] = {
+	"%-18s %1d",
+	"%d de %d restantes.  "
+};
+
+static const StringListProvider kEoB1MenuStringsMgcDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsMgcDOSSpanish), kEoB1MenuStringsMgcDOSSpanish };
+
+static const char *const kEoB1MenuStringsPrefsDOSSpanish[4] = {
+	"Musica %-3s",
+	"Sonidos %-3s",
+	"Barras %-3s",
+	"Raton %-3s"
+};
+
+static const StringListProvider kEoB1MenuStringsPrefsDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsPrefsDOSSpanish), kEoB1MenuStringsPrefsDOSSpanish };
+
+static const char *const kEoB1MenuStringsRest2DOSSpanish[4] = {
+	"%s obtiene %s.\r",
+	"%s memoriza %s.\r",
+	"%s cura a %s.\r",
+	"Horas reposadas: %-4d"
+};
+
+static const StringListProvider kEoB1MenuStringsRest2DOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsRest2DOSSpanish), kEoB1MenuStringsRest2DOSSpanish };
+
+static const char *const kEoB1MenuStringsRest4DOSSpanish[1] = {
+	"\rNo puedes reposar aqui, hay monstruos cerca."
+};
+
+static const StringListProvider kEoB1MenuStringsRest4DOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsRest4DOSSpanish), kEoB1MenuStringsRest4DOSSpanish };
+
+static const char *const kEoB1MenuStringsDefeatDOSSpanish[1] = {
+	"Todo tu grupo ha sido derrotado. Los secuaces del mal llevaran a cabo sus planes de muerte y conquista!\r"
+};
+
+static const StringListProvider kEoB1MenuStringsDefeatDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsDefeatDOSSpanish), kEoB1MenuStringsDefeatDOSSpanish };
+
+static const char *const kEoB1MenuYesNoStringsDOSSpanish[2] = {
+	"Si",
+	"No"
+};
+
+static const StringListProvider kEoB1MenuYesNoStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuYesNoStringsDOSSpanish), kEoB1MenuYesNoStringsDOSSpanish };
+
+static const char *const kEoB1CharGuiStringsHpDOSSpanish[2] = {
+	"PV",
+	"%3d de %-3d"
+};
+
+static const StringListProvider kEoB1CharGuiStringsHpDOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsHpDOSSpanish), kEoB1CharGuiStringsHpDOSSpanish };
+
+static const char *const kEoB1CharGuiStringsWp1DOSSpanish[2] = {
+	"FALLA",
+	"HACK"
+};
+
+static const StringListProvider kEoB1CharGuiStringsWp1DOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsWp1DOSSpanish), kEoB1CharGuiStringsWp1DOSSpanish };
+
+static const char *const kEoB1CharGuiStringsWrDOSSpanish[4] = {
+	"NO",
+	"LLEGA",
+	"SIN",
+	"MUN"
+};
+
+static const StringListProvider kEoB1CharGuiStringsWrDOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsWrDOSSpanish), kEoB1CharGuiStringsWrDOSSpanish };
+
+static const char *const kEoB1CharGuiStringsSt1DOSSpanish[6] = {
+	"Cambiando",
+	"MUERTO",
+	"INCONSCIENTE",
+	"RELANTIZADO",
+	"ENVENENADO",
+	"PARALIZADO"
+};
+
+static const StringListProvider kEoB1CharGuiStringsSt1DOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsSt1DOSSpanish), kEoB1CharGuiStringsSt1DOSSpanish };
+
+static const char *const kEoB1CharGuiStringsInDOSSpanish[4] = {
+	"CARACTERISTICAS",
+	"NIVEL ARMADURA",
+	"EXP",
+	"NIV"
+};
+
+static const StringListProvider kEoB1CharGuiStringsInDOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsInDOSSpanish), kEoB1CharGuiStringsInDOSSpanish };
+
+static const char *const kEoB1CharStatusStrings7DOSSpanish[1] = {
+	"%s sin efecto de fuerza gigante.\r"
+};
+
+static const StringListProvider kEoB1CharStatusStrings7DOSSpanishProvider = { ARRAYSIZE(kEoB1CharStatusStrings7DOSSpanish), kEoB1CharStatusStrings7DOSSpanish };
+
+static const char *const kEoB1CharStatusStrings81DOSSpanish[1] = {
+	"%s sufre el efecto del veneno!\r"
+};
+
+static const StringListProvider kEoB1CharStatusStrings81DOSSpanishProvider = { ARRAYSIZE(kEoB1CharStatusStrings81DOSSpanish), kEoB1CharStatusStrings81DOSSpanish };
+
+static const char *const kEoB1CharStatusStrings9DOSSpanish[1] = {
+	"%s ya no esta paralizado!\r"
+};
+
+static const StringListProvider kEoB1CharStatusStrings9DOSSpanishProvider = { ARRAYSIZE(kEoB1CharStatusStrings9DOSSpanish), kEoB1CharStatusStrings9DOSSpanish };
+
+static const char *const kEoB1CharStatusStrings131DOSSpanish[1] = {
+	"%s es %s!\r"
+};
+
+static const StringListProvider kEoB1CharStatusStrings131DOSSpanishProvider = { ARRAYSIZE(kEoB1CharStatusStrings131DOSSpanish), kEoB1CharStatusStrings131DOSSpanish };
+
+static const char *const kEoB1LevelGainStringsDOSSpanish[1] = {
+	"\x06\x01""%s ha ganado un nivel de experiencia.""\x06\x0F""\r"
+};
+
+static const StringListProvider kEoB1LevelGainStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1LevelGainStringsDOSSpanish), kEoB1LevelGainStringsDOSSpanish };
+
+static const char *const kEoB1BookNumbersDOSSpanish[5] = {
+	"Primero",
+	"Segundo",
+	"Tercero",
+	"Cuarto",
+	"Quinto"
+};
+
+static const StringListProvider kEoB1BookNumbersDOSSpanishProvider = { ARRAYSIZE(kEoB1BookNumbersDOSSpanish), kEoB1BookNumbersDOSSpanish };
+
+static const char *const kEoB1MageSpellsListDOSSpanish[26] = {
+	"",
+	"Armadura",
+	"Manos Ardientes",
+	"Detectar Magia",
+	"Dardo Magico",
+	"Leer Magia",
+	"Escudo",
+	"Golpe Electrico",
+	"Invisibilidad",
+	"Golpe",
+	"Flecha Acida M.",
+	"Nube Ponzonosa",
+	"Disolver Magia",
+	"Bola de Fuego",
+	"Flecha Ardiente",
+	"Velocidad",
+	"Paralizar",
+	"Invisibilidad 3m",
+	"Rayo Electrico",
+	"Toque Vampirico",
+	"Terror",
+	"Tormenta de Hielo",
+	"Piel de Roca",
+	"Nube Acida",
+	"Cono Helado",
+	"Bloquear Monstruo"
+};
+
+static const StringListProvider kEoB1MageSpellsListDOSSpanishProvider = { ARRAYSIZE(kEoB1MageSpellsListDOSSpanish), kEoB1MageSpellsListDOSSpanish };
+
+static const char *const kEoB1ClericSpellsListDOSSpanish[25] = {
+	"",
+	"Bendicion",
+	"Curacion Leve",
+	"Herida Leve",
+	"Detectar Magia",
+	"Proteccion al Mal",
+	"Ayuda",
+	"Hoja Llameante",
+	"Bloquear Persona",
+	"Retrasar Veneno",
+	"Crear Comida",
+	"Disipar Magia",
+	"Atuendo Magico",
+	"Oracion",
+	"Quitar Paralisis",
+	"Curacion Grave",
+	"Herida Grave",
+	"Neutralizar Veneno",
+	"Proteccion Mal 3m",
+	"Proteccion Electrica",
+	"Curacion Critica",
+	"Herida Critica",
+	"Columna de Fuego",
+	"Resucitar",
+	"Imponer Manos"
+};
+
+static const StringListProvider kEoB1ClericSpellsListDOSSpanishProvider = { ARRAYSIZE(kEoB1ClericSpellsListDOSSpanish), kEoB1ClericSpellsListDOSSpanish };
+
+static const char *const kEoB1SpellNamesDOSSpanish[51] = {
+	"",
+	"armadura",
+	"manos ardientes",
+	"detectar magia",
+	"dardo magico",
+	"escudo",
+	"golpe electrico",
+	"invisibilidad",
+	"flecha acida de melf",
+	"nube ponzonosa",
+	"disolver magia",
+	"bola de fuego",
+	"flecha ardiente",
+	"velocidad",
+	"bloquear persona",
+	"invisibilidad 3m radio",
+	"rayo electrico",
+	"toque vampirico",
+	"terror",
+	"tormenta de hielo",
+	"piel de roca",
+	"nube acida",
+	"cono helado",
+	"bloquear monstruo",
+	"bendicion",
+	"curacion leve",
+	"herida leve",
+	"detectar magia",
+	"proteccion contra el mal",
+	"ayuda",
+	"hoja llameante",
+	"bloquear persona",
+	"retrasar veneno",
+	"crear comida",
+	"disipar magia",
+	"atuendo magico",
+	"oracion",
+	"quitar paralisis",
+	"curacion grave",
+	"herida grave",
+	"neutralizar veneno",
+	"proteccion contra el mal 3m radio",
+	"proteccion electrica",
+	"curacion critica",
+	"herida critica",
+	"columna de fuego",
+	"resucitar",
+	"imposicion de manos",
+	"",
+	"",
+	""
+};
+
+static const StringListProvider kEoB1SpellNamesDOSSpanishProvider = { ARRAYSIZE(kEoB1SpellNamesDOSSpanish), kEoB1SpellNamesDOSSpanish };
+
+static const char *const kEoB1MagicStrings1DOSSpanish[6] = {
+	"ABORTAR",
+	"ABORTAR",
+	"Debes tener una mano libre para el conjuro.\r",
+	"No puedes activar dos conjuros de este tipo.\r",
+	"%s conjura %s.\r",
+	"ok\r"
+};
+
+static const StringListProvider kEoB1MagicStrings1DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings1DOSSpanish), kEoB1MagicStrings1DOSSpanish };
+
+static const char *const kEoB1MagicStrings2DOSSpanish[3] = {
+	"sin efecto\r",
+	"%s ha sido desintegrado!\r",
+	"Golpean al grupo con un conjuro mortal!\r"
+};
+
+static const StringListProvider kEoB1MagicStrings2DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings2DOSSpanish), kEoB1MagicStrings2DOSSpanish };
+
+static const char *const kEoB1MagicStrings3DOSSpanish[6] = {
+	"Escoge personaje para el conjuro ",
+	"\rok\r",
+	"\rConjuro abortado.\r",
+	"El conjuro de %s, %s expira.\r",
+	"%s ha perdido el monstruo.\r",
+	"%s debe estar en frente para golpear!\r"
+};
+
+static const StringListProvider kEoB1MagicStrings3DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings3DOSSpanish), kEoB1MagicStrings3DOSSpanish };
+
+static const char *const kEoB1MagicStrings4DOSSpanish[1] = {
+	"sin efecto.\r"
+};
+
+static const StringListProvider kEoB1MagicStrings4DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings4DOSSpanish), kEoB1MagicStrings4DOSSpanish };
+
+static const char *const kEoB1MagicStrings6DOSSpanish[1] = {
+	"%s ya tiene una armadura base alta.\r"
+};
+
+static const StringListProvider kEoB1MagicStrings6DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings6DOSSpanish), kEoB1MagicStrings6DOSSpanish };
+
+static const char *const kEoB1MagicStrings7DOSSpanish[5] = {
+	"1RO",
+	"2DO",
+	"3RO",
+	"4TO",
+	"5TO"
+};
+
+static const StringListProvider kEoB1MagicStrings7DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings7DOSSpanish), kEoB1MagicStrings7DOSSpanish };
+
+static const char *const kEoB1MagicStrings8DOSSpanish[3] = {
+	"Todos los conjuros sobre %s han sido disipados.\r",
+	"El grupo ya esta bendecido!\r",
+	"El conjuro de ayuda fallo!\r"
+};
+
+static const StringListProvider kEoB1MagicStrings8DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings8DOSSpanish), kEoB1MagicStrings8DOSSpanish };
+
+/*
+static const char *const kEoB1MagicStrings9DOSSpanish[1] = {
+	"%s is already protected by stoneskin.\r"
+};
+
+static const StringListProvider kEoB1MagicStrings9DOSSpanishProvider = { ARRAYSIZE(kEoB1MagicStrings9DOSSpanish), kEoB1MagicStrings9DOSSpanish };
+*/
+static const byte kEoB1ManDefDOSSpanish[120] = {
+	0x09, 0x04, 0x02, 0x00, 0x09, 0x05, 0x04, 0x00,
+	0x09, 0x05, 0x06, 0x00, 0x09, 0x01, 0x09, 0x00,
+	0x09, 0x01, 0x09, 0x00, 0x09, 0x03, 0x0D, 0x00,
+	0x09, 0x03, 0x0D, 0x00, 0x09, 0x02, 0x01, 0x00,
+	0x09, 0x05, 0x06, 0x00, 0x23, 0x0D, 0x0A, 0x00,
+	0x23, 0x08, 0x04, 0x00, 0x23, 0x0D, 0x0A, 0x00,
+	0x23, 0x03, 0x01, 0x00, 0x23, 0x02, 0x08, 0x00,
+	0x23, 0x06, 0x03, 0x00, 0x1A, 0x02, 0x07, 0x00,
+	0x1A, 0x04, 0x02, 0x00, 0x1A, 0x02, 0x07, 0x00,
+	0x24, 0x06, 0x02, 0x00, 0x24, 0x05, 0x01, 0x00,
+	0x24, 0x05, 0x01, 0x00, 0x02, 0x02, 0x05, 0x00,
+	0x02, 0x03, 0x03, 0x00, 0x02, 0x04, 0x03, 0x00,
+	0x01, 0x04, 0x03, 0x00, 0x01, 0x05, 0x03, 0x00,
+	0x01, 0x0B, 0x07, 0x00, 0x0C, 0x02, 0x04, 0x00,
+	0x0C, 0x04, 0x03, 0x00, 0x0C, 0x07, 0x02, 0x00
+};
+
+static const ByteProvider kEoB1ManDefDOSSpanishProvider = { ARRAYSIZE(kEoB1ManDefDOSSpanish), kEoB1ManDefDOSSpanish };
+
+static const char *const kEoB1ManWordDOSSpanish[31] = {
+	"control",
+	"grupo",
+	"como",
+	"momento",
+	"momento",
+	"como",
+	"como",
+	"dos",
+	"como",
+	"sistema",
+	"actual",
+	"sistema",
+	"previamente",
+	"almacenar",
+	"juego",
+	"dentro",
+	"hechizos",
+	"dentro",
+	"algunas",
+	"elegir",
+	"elegir",
+	"fuerzas",
+	"grupo",
+	"criaturas",
+	"creada",
+	"golpea",
+	"inmunidad",
+	"hasta",
+	"electricos",
+	"heridas",
+	""
+};
+
+static const StringListProvider kEoB1ManWordDOSSpanishProvider = { ARRAYSIZE(kEoB1ManWordDOSSpanish), kEoB1ManWordDOSSpanish };
+
+static const char *const kEoB1ManPromptDOSSpanish[1] = {
+	"\r\r\r\rEn la pagina con el simbolo...\r\rLinea... %d\rPalabra... %d\r"
+};
+
+static const StringListProvider kEoB1ManPromptDOSSpanishProvider = { ARRAYSIZE(kEoB1ManPromptDOSSpanish), kEoB1ManPromptDOSSpanish };
+
+static const char *const kEoB1MonsterDistAttStringsDOSSpanish[5] = {
+	"%s es alcanzado por el conjuro 'Heridas Graves'!\r",
+	"El grupo es alcanzado por 'Azote Mental'!\r",
+	"paralizado",
+	"envenenado",
+	"paralizado"
+};
+
+static const StringListProvider kEoB1MonsterDistAttStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1MonsterDistAttStringsDOSSpanish), kEoB1MonsterDistAttStringsDOSSpanish };


Commit: 57c18ea1531b09ba4a1940f7f8efa1f3afaaae3a
    https://github.com/scummvm/scummvm/commit/57c18ea1531b09ba4a1940f7f8efa1f3afaaae3a
Author: Asirome (mekkon at tutanota.com)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
KYRA:EOB fix spanish text

Changed paths:
    devtools/create_kyradat/resources/eob1_dos_spanish.h


diff --git a/devtools/create_kyradat/resources/eob1_dos_spanish.h b/devtools/create_kyradat/resources/eob1_dos_spanish.h
index c7315f3d37..de6141a885 100644
--- a/devtools/create_kyradat/resources/eob1_dos_spanish.h
+++ b/devtools/create_kyradat/resources/eob1_dos_spanish.h
@@ -482,7 +482,7 @@ static const char *const kEoB1MenuStringsStarveDOSSpanish[1] = {
 static const StringListProvider kEoB1MenuStringsStarveDOSSpanishProvider = { ARRAYSIZE(kEoB1MenuStringsStarveDOSSpanish), kEoB1MenuStringsStarveDOSSpanish };
 
 static const char *const kEoB1MenuStringsScribeDOSSpanish[5] = {
-	"Escoge los pergamino(s)\rque deseas escribir .",
+	"Escoge el pergamino\rque deseas escribir.\r",
 	"\r\r\r Selecciona un\r Mago de tu grupo\r para transcribir\r los conjuros.",
 	" No tienes ningun\r pergamino para\r transcribir.",
 	" No tienes\r ningun pergamino\r para este Mago.",
@@ -572,10 +572,10 @@ static const char *const kEoB1CharGuiStringsWp1DOSSpanish[2] = {
 static const StringListProvider kEoB1CharGuiStringsWp1DOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsWp1DOSSpanish), kEoB1CharGuiStringsWp1DOSSpanish };
 
 static const char *const kEoB1CharGuiStringsWrDOSSpanish[4] = {
-	"NO",
+	"  NO ",
 	"LLEGA",
-	"SIN",
-	"MUN"
+	"SIN ",
+	"MUNI"
 };
 
 static const StringListProvider kEoB1CharGuiStringsWrDOSSpanishProvider = { ARRAYSIZE(kEoB1CharGuiStringsWrDOSSpanish), kEoB1CharGuiStringsWrDOSSpanish };


Commit: 7f2e5c7d9fd9330a29223da5f1ea620e282a7700
    https://github.com/scummvm/scummvm/commit/7f2e5c7d9fd9330a29223da5f1ea620e282a7700
Author: Asirome (mekkon at tutanota.com)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
KYRA:EOB Spanish character generation bitmaps

Changed paths:
    engines/kyra/engine/chargen.cpp


diff --git a/engines/kyra/engine/chargen.cpp b/engines/kyra/engine/chargen.cpp
index 13e5cd71b0..aa6375d3ec 100644
--- a/engines/kyra/engine/chargen.cpp
+++ b/engines/kyra/engine/chargen.cpp
@@ -281,13 +281,20 @@ void CharacterGenerator::init() {
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga || (_vm->game() == GI_EOB1 && _vm->gameFlags().platform == Common::kPlatformPC98))
 		_screen->fadeToBlack(32);
 
-	_screen->loadEoBBitmap("CHARGEN", _vm->_cgaMappingDefault, 5, 3, 0);
+	static const char *characterGenerationBitmaps[] = { "CHARGEN", "CHARGENB" };
+
+	if (_vm->_flags.lang == Common::ES_ESP && _vm->game() == GI_EOB1) {
+		characterGenerationBitmaps[0] = "CCARGEN";
+		characterGenerationBitmaps[1] = "CCARGENB";
+	}
+
+	_screen->loadEoBBitmap(characterGenerationBitmaps[0], _vm->_cgaMappingDefault, 5, 3, 0);
 	_screen->selectPC98Palette(4, _screen->getPalette(0));
 
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga || (_vm->game() == GI_EOB1 && _vm->gameFlags().platform == Common::kPlatformPC98))
 		_screen->fadeFromBlack(32);
 
-	_screen->loadShapeSetBitmap("CHARGENB", 5, 3);
+	_screen->loadShapeSetBitmap(characterGenerationBitmaps[1], 5, 3);
 	if (_chargenMagicShapes) {
 		for (int i = 0; i < 10; i++)
 			delete[] _chargenMagicShapes[i];


Commit: 16b5a9a668cde7ecc504c5fd348694e30d0fd849
    https://github.com/scummvm/scummvm/commit/16b5a9a668cde7ecc504c5fd348694e30d0fd849
Author: athrxx (athrxx at scummvm.org)
Date: 2020-05-30T19:49:51+02:00

Commit Message:
KYRA: (EOB/Spanish) - fix static resources and regenerate kyra.dat

Changed paths:
    devtools/create_kyradat/create_kyradat.cpp
    devtools/create_kyradat/games.cpp
    devtools/create_kyradat/resources.cpp
    devtools/create_kyradat/resources/eob1_dos_spanish.h
    devtools/create_kyradat/resources/eob1_pc98_japanese.h
    dists/engine-data/kyra.dat
    engines/kyra/detection_tables.h
    engines/kyra/resource/staticres.cpp


diff --git a/devtools/create_kyradat/create_kyradat.cpp b/devtools/create_kyradat/create_kyradat.cpp
index 0ae98ac0f3..c4808859db 100644
--- a/devtools/create_kyradat/create_kyradat.cpp
+++ b/devtools/create_kyradat/create_kyradat.cpp
@@ -45,7 +45,7 @@
 
 
 enum {
-	kKyraDatVersion = 96
+	kKyraDatVersion = 97
 };
 
 const ExtractFilename extractFilenames[] = {
diff --git a/devtools/create_kyradat/games.cpp b/devtools/create_kyradat/games.cpp
index 1393922317..40393b13b9 100644
--- a/devtools/create_kyradat/games.cpp
+++ b/devtools/create_kyradat/games.cpp
@@ -100,7 +100,7 @@ const Game eob1Games[] = {
 	{ kEoB1, kPlatformDOS, kNoSpecial, EN_ANY },
 	{ kEoB1, kPlatformDOS, kNoSpecial, DE_DEU },
 	{ kEoB1, kPlatformDOS, kNoSpecial, IT_ITA },
-	{ kEoB1, kPlatformDOS, kNoSpecial, ES_ESP },
+	{ kEoB1, kPlatformDOS, kOldFloppy, ES_ESP },
 
 	{ kEoB1, kPlatformAmiga, kNoSpecial, EN_ANY },
 	{ kEoB1, kPlatformAmiga, kNoSpecial, DE_DEU },
@@ -1429,6 +1429,300 @@ const int eob1FloppyNeed[] = {
 	-1
 };
 
+const int eob1FloppyOldNeed[] = {
+	kEoBBaseChargenStrings1,
+	kEoBBaseChargenStrings2,
+	kEoBBaseChargenStartLevels,
+	kEoBBaseChargenStatStrings,
+	kEoBBaseChargenRaceSexStrings,
+	kEoBBaseChargenClassStrings,
+	kEoBBaseChargenAlignmentStrings,
+	kEoBBaseChargenEnterGameStrings,
+	kEoBBaseChargenClassMinStats,
+	kEoBBaseChargenRaceMinStats,
+	kEoBBaseChargenRaceMaxStats,
+
+	kEoBBaseSaveThrowTable1,
+	kEoBBaseSaveThrowTable2,
+	kEoBBaseSaveThrowTable3,
+	kEoBBaseSaveThrowTable4,
+	kEoBBaseSaveThrwLvlIndex,
+	kEoBBaseSaveThrwModDiv,
+	kEoBBaseSaveThrwModExt,
+
+	kEoB1MainMenuStrings,
+	kEoB1BonusStrings,
+
+	kEoB1IntroFilesOpening,
+	kEoB1IntroFilesTower,
+	kEoB1IntroFilesOrb,
+	kEoB1IntroFilesWdEntry,
+	kEoB1IntroFilesKing,
+	kEoB1IntroFilesHands,
+	kEoB1IntroFilesWdExit,
+	kEoB1IntroFilesTunnel,
+	kEoB1IntroOpeningFrmDelay,
+	kEoB1IntroWdEncodeX,
+	kEoB1IntroWdEncodeY,
+	kEoB1IntroWdEncodeWH,
+	kEoB1IntroWdDsX,
+	kEoB1IntroWdDsY,
+	kEoB1IntroTvlX1,
+	kEoB1IntroTvlY1,
+	kEoB1IntroTvlX2,
+	kEoB1IntroTvlY2,
+	kEoB1IntroTvlW,
+	kEoB1IntroTvlH,
+
+	kEoB1IntroStringsTower,
+	kEoB1IntroStringsOrb,
+	kEoB1IntroStringsWdEntry,
+	kEoB1IntroStringsKing,
+	kEoB1IntroStringsHands,
+	kEoB1IntroStringsWdExit,
+	kEoB1IntroStringsTunnel,
+
+	kEoB1DoorShapeDefs,
+	kEoB1DoorSwitchShapeDefs,
+	kEoB1DoorSwitchCoords,
+	kEoB1MonsterProperties,
+	kEoB1EnemyMageSpellList,
+	kEoB1EnemyMageSfx,
+	kEoB1BeholderSpellList,
+	kEoB1BeholderSfx,
+	kEoB1TurnUndeadString,
+
+	kEoB1CgaMappingDefault,
+	kEoB1CgaMappingAlt,
+	kEoB1CgaMappingInv,
+	kEoB1CgaMappingItemsL,
+	kEoB1CgaMappingItemsS,
+	kEoB1CgaMappingThrown,
+	kEoB1CgaMappingIcons,
+	kEoB1CgaMappingDeco,
+	kEoB1CgaLevelMappingIndex,
+	kEoB1CgaMappingLevel0,
+	kEoB1CgaMappingLevel1,
+	kEoB1CgaMappingLevel2,
+	kEoB1CgaMappingLevel3,
+	kEoB1CgaMappingLevel4,
+
+	kEoB1NpcShpData,
+	kEoB1NpcSubShpIndex1,
+	kEoB1NpcSubShpIndex2,
+	kEoB1NpcSubShpY,
+	kEoB1Npc0Strings,
+	kEoB1Npc11Strings,
+	kEoB1Npc12Strings,
+	kEoB1Npc21Strings,
+	kEoB1Npc22Strings,
+	kEoB1Npc31Strings,
+	kEoB1Npc32Strings,
+	kEoB1Npc4Strings,
+	kEoB1Npc5Strings,
+	kEoB1Npc6Strings,
+	kEoB1Npc7Strings,
+
+	kEoBBasePryDoorStrings,
+	kEoBBaseWarningStrings,
+
+	kEoBBaseItemSuffixStringsRings,
+	kEoBBaseItemSuffixStringsPotions,
+	kEoBBaseItemSuffixStringsWands,
+
+	kEoBBaseRipItemStrings,
+	kEoBBaseCursedString,
+	kEoBBaseEnchantedString,
+	kEoBBaseMagicObjectStrings,
+	kEoBBaseMagicObjectString5,
+	kEoBBasePatternSuffix,
+	kEoBBasePatternGrFix1,
+	kEoBBasePatternGrFix2,
+	kEoBBaseValidateArmorString,
+	kEoBBaseValidateNoDropString,
+	kEoBBasePotionStrings,
+	kEoBBaseWandStrings,
+	kEoBBaseItemMisuseStrings,
+
+	kEoBBaseTakenStrings,
+	kEoBBasePotionEffectStrings,
+
+	kEoBBaseYesNoStrings,
+	kRpgCommonMoreStrings,
+	kEoBBaseNpcMaxStrings,
+	kEoBBaseNpcJoinStrings,
+	kEoBBaseCancelStrings,
+
+	kEoBBaseMenuStringsMain,
+	kEoBBaseMenuStringsSaveLoad,
+	kEoBBaseMenuStringsOnOff,
+	kEoBBaseMenuStringsSpells,
+	kEoBBaseMenuStringsRest,
+	kEoBBaseMenuStringsDrop,
+	kEoBBaseMenuStringsExit,
+	kEoBBaseMenuStringsStarve,
+	kEoBBaseMenuStringsScribe,
+	kEoBBaseMenuStringsDrop2,
+	kEoBBaseMenuStringsHead,
+	kEoBBaseMenuStringsPoison,
+	kEoBBaseMenuStringsMgc,
+	kEoBBaseMenuStringsPrefs,
+	kEoBBaseMenuStringsRest2,
+	kEoBBaseMenuStringsRest4,
+	kEoBBaseMenuStringsDefeat,
+	kEoBBaseMenuYesNoStrings,
+
+	kEoBBaseSpellLevelsMage,
+	kEoBBaseSpellLevelsCleric,
+	kEoBBaseNumSpellsCleric,
+	kEoBBaseNumSpellsWisAdj,
+	kEoBBaseNumSpellsPal,
+	kEoBBaseNumSpellsMage,
+
+	kEoBBaseCharGuiStringsHp,
+	kEoBBaseCharGuiStringsWp1,
+	kEoBBaseCharGuiStringsWr,
+	kEoBBaseCharGuiStringsSt1,
+	kEoBBaseCharGuiStringsIn,
+
+	kEoBBaseCharStatusStrings7,
+	kEoBBaseCharStatusStrings81,
+	kEoBBaseCharStatusStrings9,
+	kEoBBaseCharStatusStrings131,
+
+	kEoBBaseLevelGainStrings,
+	kEoBBaseExperienceTable0,
+	kEoBBaseExperienceTable1,
+	kEoBBaseExperienceTable2,
+	kEoBBaseExperienceTable3,
+	kEoBBaseExperienceTable4,
+
+	kEoBBaseBookNumbers,
+	kEoBBaseMageSpellsList,
+	kEoBBaseClericSpellsList,
+	kEoBBaseSpellNames,
+	kEoBBaseMagicStrings1,
+	kEoBBaseMagicStrings2,
+	kEoBBaseMagicStrings3,
+	kEoBBaseMagicStrings4,
+	kEoBBaseMagicStrings6,
+	kEoBBaseMagicStrings7,
+	kEoBBaseMagicStrings8,
+
+	kEoBBaseExpObjectTblIndex,
+	kEoBBaseExpObjectShpStart,
+	kEoBBaseExpObjectTbl1,
+	kEoBBaseExpObjectTbl2,
+	kEoBBaseExpObjectTbl3,
+	kEoBBaseExpObjectY,
+
+	kEoBBaseSparkDefSteps,
+	kEoBBaseSparkDefSubSteps,
+	kEoBBaseSparkDefShift,
+	kEoBBaseSparkDefAdd,
+	kEoBBaseSparkDefX,
+	kEoBBaseSparkDefY,
+	kEoBBaseSparkOfFlags1,
+	kEoBBaseSparkOfFlags2,
+	kEoBBaseSparkOfShift,
+	kEoBBaseSparkOfX,
+	kEoBBaseSparkOfY,
+
+	kEoBBaseSpellProperties,
+	kEoBBaseMagicFlightProps,
+	kEoBBaseTurnUndeadEffect,
+	kEoBBaseBurningHandsDest,
+	kEoBBaseConeOfColdDest1,
+	kEoBBaseConeOfColdDest2,
+	kEoBBaseConeOfColdDest3,
+	kEoBBaseConeOfColdDest4,
+	kEoBBaseConeOfColdGfxTbl,
+
+	kRpgCommonDscDoorShapeIndex,
+	kEoBBaseWllFlagPreset,
+	kEoBBaseDscShapeCoords,
+	kRpgCommonDscDoorScaleOffs,
+	kEoBBaseDscDoorScaleMult1,
+	kEoBBaseDscDoorScaleMult2,
+	kEoBBaseDscDoorScaleMult3,
+	kEoBBaseDscDoorScaleMult4,
+	kEoBBaseDscDoorScaleMult5,
+	kEoBBaseDscDoorScaleMult6,
+	kEoBBaseDscDoorXE,
+	kEoBBaseDscDoorY1,
+	kEoBBaseDscDoorY3,
+	kEoBBaseDscDoorY4,
+	kEoBBaseDscDoorY5,
+	kEoBBaseDscDoorY6,
+	kEoBBaseDscDoorY7,
+	kEoBBaseDscDoorCoordsExt,
+	kRpgCommonDscDoorFrameY1,
+	kRpgCommonDscDoorFrameY2,
+	kRpgCommonDscDoorFrameIndex1,
+	kRpgCommonDscDoorFrameIndex2,
+
+	kEoBBaseDscItemPosIndex,
+	kEoBBaseDscItemShpX,
+	kEoBBaseDscItemScaleIndex,
+	kEoBBaseDscItemTileIndex,
+	kEoBBaseDscItemShapeMap,
+	kEoBBaseDscTelptrShpCoords,
+
+	kEoBBasePortalSeqData,
+	kEoBBaseManDef,
+	kEoBBaseManWord,
+	kEoBBaseManPrompt,
+
+	kEoBBaseDscMonsterFrmOffsTbl1,
+	kEoBBaseDscMonsterFrmOffsTbl2,
+
+	kEoBBaseInvSlotX,
+	kEoBBaseInvSlotY,
+	kEoBBaseSlotValidationFlags,
+
+	kEoBBaseProjectileWeaponTypes,
+	kEoBBaseWandTypes,
+
+	kEoBBaseDrawObjPosIndex,
+	kEoBBaseFlightObjFlipIndex,
+	kEoBBaseFlightObjShpMap,
+	kEoBBaseFlightObjSclIndex,
+
+	kRpgCommonDscShapeIndex,
+	kRpgCommonDscX,
+	kRpgCommonDscTileIndex,
+	kRpgCommonDscDimData1,
+	kRpgCommonDscDimData2,
+	kRpgCommonDscBlockMap,
+	kRpgCommonDscDimMap,
+	kRpgCommonDscBlockIndex,
+
+	kEoBBaseClassModifierFlags,
+
+	kEoBBaseMonsterStepTable01,
+	kEoBBaseMonsterStepTable2,
+	kEoBBaseMonsterStepTable3,
+	kEoBBaseMonsterCloseAttPosTable1,
+	kEoBBaseMonsterCloseAttPosTable21,
+	kEoBBaseMonsterCloseAttChkTable1,
+	kEoBBaseMonsterCloseAttChkTable2,
+	kEoBBaseMonsterCloseAttDstTable1,
+	kEoBBaseMonsterCloseAttDstTable2,
+
+	kEoBBaseMonsterProximityTable,
+	kEoBBaseFindBlockMonstersTable,
+	kEoBBaseMonsterDirChangeTable,
+	kEoBBaseMonsterDistAttStrings,
+	kEoBBaseEncodeMonsterDefs,
+	kEoBBaseNpcPresets,
+
+	kEoBBaseSoundFilesIntro,
+	kEoBBaseSoundFilesIngame,
+	kEoBBaseSoundFilesFinale,
+
+	-1
+};
+
 const int eob1AmigaNeed[] = {
 	kEoBBaseChargenStrings1,
 	kEoBBaseChargenStrings2,
@@ -3608,6 +3902,7 @@ const GameNeed gameNeedTable[] = {
 	{ kLoL, kPlatformDOS, kTalkieVersion, lolCDNeed },
 
 	{ kEoB1, kPlatformDOS, kNoSpecial, eob1FloppyNeed },
+	{ kEoB1, kPlatformDOS, kOldFloppy, eob1FloppyOldNeed },
 	{ kEoB1, kPlatformAmiga, kNoSpecial, eob1AmigaNeed },
 	{ kEoB1, kPlatformPC98, kNoSpecial, eob1PC98Need },
 
diff --git a/devtools/create_kyradat/resources.cpp b/devtools/create_kyradat/resources.cpp
index 9161ea3136..ca7e7fdebf 100644
--- a/devtools/create_kyradat/resources.cpp
+++ b/devtools/create_kyradat/resources.cpp
@@ -870,10 +870,8 @@ static const ResourceProvider resourceProviders[] = {
 	{ k2IngameTalkObjIndex, kKyra2, kPlatformDOS, kNoSpecial, UNK_LANG, &k2IngameTalkObjIndexDOSProvider },
 	{ k2IngameShapeAnimData, kKyra2, kPlatformDOS, kNoSpecial, UNK_LANG, &k2IngameShapeAnimDataDOSProvider },
 	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, FR_FRA, &k2SeqplayStringsDOSFrenchProvider },
-	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, DE_DEU, &k2SeqplayStringsDOSGermanProvider },
-	
-	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, IT_ITA, &k2SeqplayStringsDOSItalianProvider },
-	
+	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, DE_DEU, &k2SeqplayStringsDOSGermanProvider },	
+	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, IT_ITA, &k2SeqplayStringsDOSItalianProvider },	
 	{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, RU_RUS, &k2SeqplayStringsDOSRussianProvider },
 	{ k2SeqplayPakFiles, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayPakFilesDOSCDProvider },
 	{ k2SeqplayCredits, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayCreditsDOSCDProvider },
@@ -1269,7 +1267,6 @@ static const ResourceProvider resourceProviders[] = {
 	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kNoSpecial, DE_DEU, &kEoB1ManWordDOSGermanProvider },
 	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kNoSpecial, DE_DEU, &kEoB1ManPromptDOSGermanProvider },
 	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kNoSpecial, DE_DEU, &kEoB1MonsterDistAttStringsDOSGermanProvider },
-	
 	{ kEoBBaseChargenStrings1, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ChargenStrings1DOSItalianProvider },
 	{ kEoBBaseChargenStrings2, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ChargenStrings2DOSItalianProvider },
 	{ kEoBBaseChargenStatStrings, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ChargenStatStringsDOSItalianProvider },
@@ -1359,98 +1356,263 @@ static const ResourceProvider resourceProviders[] = {
 	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ManWordDOSItalianProvider },
 	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1ManPromptDOSItalianProvider },
 	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kNoSpecial, IT_ITA, &kEoB1MonsterDistAttStringsDOSItalianProvider },
-	
-	{ kEoBBaseChargenStrings1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenStrings1DOSSpanishProvider },
-	{ kEoBBaseChargenStrings2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenStrings2DOSSpanishProvider },
-	{ kEoBBaseChargenStatStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenStatStringsDOSSpanishProvider },
-	{ kEoBBaseChargenRaceSexStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenRaceSexStringsDOSSpanishProvider },
-	{ kEoBBaseChargenClassStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenClassStringsDOSSpanishProvider },
-	{ kEoBBaseChargenAlignmentStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenAlignmentStringsDOSSpanishProvider },
-	{ kEoBBaseChargenEnterGameStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ChargenEnterGameStringsDOSSpanishProvider },
-	{ kEoB1MainMenuStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MainMenuStringsDOSSpanishProvider },
-	{ kEoB1BonusStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1BonusStringsDOSSpanishProvider },
-	{ kEoB1TurnUndeadString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1TurnUndeadStringDOSSpanishProvider },
-	{ kEoB1Npc0Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc0StringsDOSSpanishProvider },
-	{ kEoB1Npc11Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc11StringsDOSSpanishProvider },
-	{ kEoB1Npc12Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc12StringsDOSSpanishProvider },
-	{ kEoB1Npc21Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc21StringsDOSSpanishProvider },
-	{ kEoB1Npc22Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc22StringsDOSSpanishProvider },
-	{ kEoB1Npc31Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc31StringsDOSSpanishProvider },
-	{ kEoB1Npc32Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc32StringsDOSSpanishProvider },
-	{ kEoB1Npc4Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc4StringsDOSSpanishProvider },
-	{ kEoB1Npc5Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc5StringsDOSSpanishProvider },
-	{ kEoB1Npc6Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc6StringsDOSSpanishProvider },
-	{ kEoB1Npc7Strings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1Npc7StringsDOSSpanishProvider },
-	{ kEoBBasePryDoorStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PryDoorStringsDOSSpanishProvider },
-	{ kEoBBaseWarningStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1WarningStringsDOSSpanishProvider },
-	{ kEoBBaseItemSuffixStringsRings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemSuffixStringsRingsDOSSpanishProvider },
-	{ kEoBBaseItemSuffixStringsPotions, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemSuffixStringsPotionsDOSSpanishProvider },
-	{ kEoBBaseItemSuffixStringsWands, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemSuffixStringsWandsDOSSpanishProvider },
-	{ kEoBBaseRipItemStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1RipItemStringsDOSSpanishProvider },
-	{ kEoBBaseCursedString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CursedStringDOSSpanishProvider },
-	{ kEoBBaseMagicObjectStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicObjectStringsDOSSpanishProvider },
-	{ kEoBBaseMagicObjectString5, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicObjectString5DOSSpanishProvider },
-	{ kEoBBasePatternSuffix, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PatternSuffixDOSSpanishProvider },
-	{ kEoBBasePatternGrFix1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PatternGrFix1DOSSpanishProvider },
-	{ kEoBBasePatternGrFix2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PatternGrFix2DOSSpanishProvider },
-	{ kEoBBaseValidateArmorString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ValidateArmorStringDOSSpanishProvider },
-	{ kEoBBaseValidateNoDropString, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ValidateNoDropStringDOSSpanishProvider },
-	{ kEoBBasePotionStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PotionStringsDOSSpanishProvider },
-	{ kEoBBaseWandStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1WandStringsDOSSpanishProvider },
-	{ kEoBBaseItemMisuseStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ItemMisuseStringsDOSSpanishProvider },
-	{ kEoBBaseTakenStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1TakenStringsDOSSpanishProvider },
-	{ kEoBBasePotionEffectStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1PotionEffectStringsDOSSpanishProvider },
-	{ kEoBBaseYesNoStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1YesNoStringsDOSSpanishProvider },
-	{ kRpgCommonMoreStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MoreStringsDOSSpanishProvider },
-	{ kEoBBaseNpcMaxStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1NpcMaxStringsDOSSpanishProvider },
-	{ kEoBBaseNpcJoinStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1NpcJoinStringsDOSSpanishProvider },
-	{ kEoBBaseCancelStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CancelStringsDOSSpanishProvider },
-	{ kEoBBaseMenuStringsMain, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsMainDOSSpanishProvider },
-	{ kEoBBaseMenuStringsSaveLoad, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsSaveLoadDOSSpanishProvider },
-	{ kEoBBaseMenuStringsOnOff, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsOnOffDOSSpanishProvider },
-	{ kEoBBaseMenuStringsSpells, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsSpellsDOSSpanishProvider },
-	{ kEoBBaseMenuStringsRest, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsRestDOSSpanishProvider },
-	{ kEoBBaseMenuStringsDrop, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsDropDOSSpanishProvider },
-	{ kEoBBaseMenuStringsExit, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsExitDOSSpanishProvider },
-	{ kEoBBaseMenuStringsStarve, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsStarveDOSSpanishProvider },
-	{ kEoBBaseMenuStringsScribe, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsScribeDOSSpanishProvider },
-	{ kEoBBaseMenuStringsDrop2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsDrop2DOSSpanishProvider },
-	{ kEoBBaseMenuStringsHead, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsHeadDOSSpanishProvider },
-	{ kEoBBaseMenuStringsPoison, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsPoisonDOSSpanishProvider },
-	{ kEoBBaseMenuStringsMgc, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsMgcDOSSpanishProvider },
-	{ kEoBBaseMenuStringsPrefs, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsPrefsDOSSpanishProvider },
-	{ kEoBBaseMenuStringsRest2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsRest2DOSSpanishProvider },
-	{ kEoBBaseMenuStringsRest4, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsRest4DOSSpanishProvider },
-	{ kEoBBaseMenuStringsDefeat, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuStringsDefeatDOSSpanishProvider },
-	{ kEoBBaseMenuYesNoStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MenuYesNoStringsDOSSpanishProvider },
-	{ kEoBBaseCharGuiStringsHp, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsHpDOSSpanishProvider },
-	{ kEoBBaseCharGuiStringsWp1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsWp1DOSSpanishProvider },
-	{ kEoBBaseCharGuiStringsWr, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsWrDOSSpanishProvider },
-	{ kEoBBaseCharGuiStringsSt1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsSt1DOSSpanishProvider },
-	{ kEoBBaseCharGuiStringsIn, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharGuiStringsInDOSSpanishProvider },
-	{ kEoBBaseCharStatusStrings7, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings7DOSSpanishProvider },
-	{ kEoBBaseCharStatusStrings81, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings81DOSSpanishProvider },
-	{ kEoBBaseCharStatusStrings9, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings9DOSSpanishProvider },
-	{ kEoBBaseCharStatusStrings131, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1CharStatusStrings131DOSSpanishProvider },
-	{ kEoBBaseLevelGainStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1LevelGainStringsDOSSpanishProvider },
-	{ kEoBBaseBookNumbers, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1BookNumbersDOSSpanishProvider },
-	{ kEoBBaseMageSpellsList, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MageSpellsListDOSSpanishProvider },
-	{ kEoBBaseClericSpellsList, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ClericSpellsListDOSSpanishProvider },
-	{ kEoBBaseSpellNames, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1SpellNamesDOSSpanishProvider },
-	{ kEoBBaseMagicStrings1, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings1DOSSpanishProvider },
-	{ kEoBBaseMagicStrings2, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings2DOSSpanishProvider },
-	{ kEoBBaseMagicStrings3, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings3DOSSpanishProvider },
-	{ kEoBBaseMagicStrings4, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings4DOSSpanishProvider },
-	{ kEoBBaseMagicStrings6, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings6DOSSpanishProvider },
-	{ kEoBBaseMagicStrings7, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings7DOSSpanishProvider },
-	{ kEoBBaseMagicStrings8, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings8DOSSpanishProvider },
-	//{ kEoBBaseMagicStrings9, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MagicStrings9DOSSpanishProvider },
-	{ kEoBBaseManDef, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ManDefDOSSpanishProvider },
-	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ManWordDOSSpanishProvider },
-	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1ManPromptDOSSpanishProvider },
-	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kNoSpecial, ES_ESP, &kEoB1MonsterDistAttStringsDOSSpanishProvider },
-	
-	
+	{ kEoBBaseChargenStartLevels, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ChargenStartLevelsDOSProvider },
+	{ kEoBBaseChargenClassMinStats, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ChargenClassMinStatsDOSProvider },
+	{ kEoBBaseChargenRaceMinStats, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ChargenRaceMinStatsDOSProvider },
+	{ kEoBBaseChargenRaceMaxStats, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ChargenRaceMaxStatsDOSProvider },
+	{ kEoBBaseSaveThrowTable1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrowTable1DOSProvider },
+	{ kEoBBaseSaveThrowTable2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrowTable2DOSProvider },
+	{ kEoBBaseSaveThrowTable3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrowTable3DOSProvider },
+	{ kEoBBaseSaveThrowTable4, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrowTable4DOSProvider },
+	{ kEoBBaseSaveThrwLvlIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrwLvlIndexDOSProvider },
+	{ kEoBBaseSaveThrwModDiv, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrwModDivDOSProvider },
+	{ kEoBBaseSaveThrwModExt, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SaveThrwModExtDOSProvider },
+	{ kEoB1IntroFilesOpening, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesOpeningDOSProvider },
+	{ kEoB1IntroFilesTower, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesTowerDOSProvider },
+	{ kEoB1IntroFilesOrb, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesOrbDOSProvider },
+	{ kEoB1IntroFilesWdEntry, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesWdEntryDOSProvider },
+	{ kEoB1IntroFilesKing, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesKingDOSProvider },
+	{ kEoB1IntroFilesHands, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesHandsDOSProvider },
+	{ kEoB1IntroFilesWdExit, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesWdExitDOSProvider },
+	{ kEoB1IntroFilesTunnel, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroFilesTunnelDOSProvider },
+	{ kEoB1IntroOpeningFrmDelay, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroOpeningFrmDelayDOSProvider },
+	{ kEoB1IntroWdEncodeX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroWdEncodeXDOSProvider },
+	{ kEoB1IntroWdEncodeY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroWdEncodeYDOSProvider },
+	{ kEoB1IntroWdEncodeWH, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroWdEncodeWHDOSProvider },
+	{ kEoB1IntroWdDsX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroWdDsXDOSProvider },
+	{ kEoB1IntroWdDsY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroWdDsYDOSProvider },
+	{ kEoB1IntroTvlX1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroTvlX1DOSProvider },
+	{ kEoB1IntroTvlY1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroTvlY1DOSProvider },
+	{ kEoB1IntroTvlX2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroTvlX2DOSProvider },
+	{ kEoB1IntroTvlY2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroTvlY2DOSProvider },
+	{ kEoB1IntroTvlW, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroTvlWDOSProvider },
+	{ kEoB1IntroTvlH, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1IntroTvlHDOSProvider },
+	{ kEoB1IntroStringsTower, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsTowerDOSSpanishProvider },
+	{ kEoB1IntroStringsOrb, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsOrbDOSSpanishProvider },
+	{ kEoB1IntroStringsWdEntry, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsWdEntryDOSSpanishProvider },
+	{ kEoB1IntroStringsKing, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsKingDOSSpanishProvider },
+	{ kEoB1IntroStringsHands, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsHandsDOSSpanishProvider },
+	{ kEoB1IntroStringsWdExit, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsWdExitDOSSpanishProvider },
+	{ kEoB1IntroStringsTunnel, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1IntroStringsTunnelDOSSpanishProvider },
+	{ kEoB1DoorShapeDefs, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DoorShapeDefsDOSProvider },
+	{ kEoB1DoorSwitchShapeDefs, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DoorSwitchShapeDefsDOSProvider },
+	{ kEoB1DoorSwitchCoords, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DoorSwitchCoordsDOSProvider },
+	{ kEoB1MonsterProperties, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterPropertiesDOSProvider },
+	{ kEoB1EnemyMageSpellList, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1EnemyMageSpellListDOSProvider },
+	{ kEoB1EnemyMageSfx, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1EnemyMageSfxDOSProvider },
+	{ kEoB1BeholderSpellList, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1BeholderSpellListDOSProvider },
+	{ kEoB1BeholderSfx, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1BeholderSfxDOSProvider },
+	{ kEoB1CgaMappingDefault, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingDefaultDOSProvider },
+	{ kEoB1CgaMappingAlt, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingAltDOSProvider },
+	{ kEoB1CgaMappingInv, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingInvDOSProvider },
+	{ kEoB1CgaMappingItemsL, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingItemsLDOSProvider },
+	{ kEoB1CgaMappingItemsS, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingItemsSDOSProvider },
+	{ kEoB1CgaMappingThrown, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingThrownDOSProvider },
+	{ kEoB1CgaMappingIcons, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingIconsDOSProvider },
+	{ kEoB1CgaMappingDeco, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingDecoDOSProvider },
+	{ kEoB1CgaLevelMappingIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaLevelMappingIndexDOSProvider },
+	{ kEoB1CgaMappingLevel0, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingLevel0DOSProvider },
+	{ kEoB1CgaMappingLevel1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingLevel1DOSProvider },
+	{ kEoB1CgaMappingLevel2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingLevel2DOSProvider },
+	{ kEoB1CgaMappingLevel3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingLevel3DOSProvider },
+	{ kEoB1CgaMappingLevel4, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1CgaMappingLevel4DOSProvider },
+	{ kEoB1NpcShpData, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NpcShpDataDOSProvider },
+	{ kEoB1NpcSubShpIndex1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NpcSubShpIndex1DOSProvider },
+	{ kEoB1NpcSubShpIndex2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NpcSubShpIndex2DOSProvider },
+	{ kEoB1NpcSubShpY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NpcSubShpYDOSProvider },
+	{ kEoBBaseSpellLevelsMage, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SpellLevelsMageDOSProvider },
+	{ kEoBBaseSpellLevelsCleric, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SpellLevelsClericDOSProvider },
+	{ kEoBBaseNumSpellsCleric, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NumSpellsClericDOSProvider },
+	{ kEoBBaseNumSpellsWisAdj, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NumSpellsWisAdjDOSProvider },
+	{ kEoBBaseNumSpellsPal, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NumSpellsPalDOSProvider },
+	{ kEoBBaseNumSpellsMage, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NumSpellsMageDOSProvider },
+	{ kEoBBaseExperienceTable0, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExperienceTable0DOSProvider },
+	{ kEoBBaseExperienceTable1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExperienceTable1DOSProvider },
+	{ kEoBBaseExperienceTable2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExperienceTable2DOSProvider },
+	{ kEoBBaseExperienceTable3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExperienceTable3DOSProvider },
+	{ kEoBBaseExperienceTable4, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExperienceTable4DOSProvider },
+	{ kEoBBaseExpObjectTblIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExpObjectTblIndexDOSProvider },
+	{ kEoBBaseExpObjectShpStart, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExpObjectShpStartDOSProvider },
+	{ kEoBBaseExpObjectTbl1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExpObjectTbl1DOSProvider },
+	{ kEoBBaseExpObjectTbl2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExpObjectTbl2DOSProvider },
+	{ kEoBBaseExpObjectTbl3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExpObjectTbl3DOSProvider },
+	{ kEoBBaseExpObjectY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ExpObjectYDOSProvider },
+	{ kEoBBaseSparkDefSteps, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkDefStepsDOSProvider },
+	{ kEoBBaseSparkDefSubSteps, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkDefSubStepsDOSProvider },
+	{ kEoBBaseSparkDefShift, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkDefShiftDOSProvider },
+	{ kEoBBaseSparkDefAdd, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkDefAddDOSProvider },
+	{ kEoBBaseSparkDefX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkDefXDOSProvider },
+	{ kEoBBaseSparkDefY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkDefYDOSProvider },
+	{ kEoBBaseSparkOfFlags1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkOfFlags1DOSProvider },
+	{ kEoBBaseSparkOfFlags2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkOfFlags2DOSProvider },
+	{ kEoBBaseSparkOfShift, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkOfShiftDOSProvider },
+	{ kEoBBaseSparkOfX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkOfXDOSProvider },
+	{ kEoBBaseSparkOfY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SparkOfYDOSProvider },
+	{ kEoBBaseSpellProperties, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SpellPropertiesDOSProvider },
+	{ kEoBBaseMagicFlightProps, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MagicFlightPropsDOSProvider },
+	{ kEoBBaseTurnUndeadEffect, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1TurnUndeadEffectDOSProvider },
+	{ kEoBBaseBurningHandsDest, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1BurningHandsDestDOSProvider },
+	{ kEoBBaseConeOfColdDest1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ConeOfColdDest1DOSProvider },
+	{ kEoBBaseConeOfColdDest2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ConeOfColdDest2DOSProvider },
+	{ kEoBBaseConeOfColdDest3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ConeOfColdDest3DOSProvider },
+	{ kEoBBaseConeOfColdDest4, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ConeOfColdDest4DOSProvider },
+	{ kEoBBaseConeOfColdGfxTbl, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ConeOfColdGfxTblDOSProvider },
+	{ kRpgCommonDscDoorShapeIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorShapeIndexDOSProvider },
+	{ kEoBBaseWllFlagPreset, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1WllFlagPresetDOSProvider },
+	{ kEoBBaseDscShapeCoords, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscShapeCoordsDOSProvider },
+	{ kRpgCommonDscDoorScaleOffs, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleOffsDOSProvider },
+	{ kEoBBaseDscDoorScaleMult1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleMult1DOSProvider },
+	{ kEoBBaseDscDoorScaleMult2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleMult2DOSProvider },
+	{ kEoBBaseDscDoorScaleMult3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleMult3DOSProvider },
+	{ kEoBBaseDscDoorScaleMult4, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleMult4DOSProvider },
+	{ kEoBBaseDscDoorScaleMult5, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleMult5DOSProvider },
+	{ kEoBBaseDscDoorScaleMult6, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorScaleMult6DOSProvider },
+	{ kEoBBaseDscDoorXE, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorXEDOSProvider },
+	{ kEoBBaseDscDoorY1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorY1DOSProvider },
+	{ kEoBBaseDscDoorY3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorY3DOSProvider },
+	{ kEoBBaseDscDoorY4, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorY4DOSProvider },
+	{ kEoBBaseDscDoorY5, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorY5DOSProvider },
+	{ kEoBBaseDscDoorY6, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorY6DOSProvider },
+	{ kEoBBaseDscDoorY7, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorY7DOSProvider },
+	{ kEoBBaseDscDoorCoordsExt, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorCoordsExtDOSProvider },
+	{ kRpgCommonDscDoorFrameY1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorFrameY1DOSProvider },
+	{ kRpgCommonDscDoorFrameY2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorFrameY2DOSProvider },
+	{ kRpgCommonDscDoorFrameIndex1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorFrameIndex1DOSProvider },
+	{ kRpgCommonDscDoorFrameIndex2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDoorFrameIndex2DOSProvider },
+	{ kEoBBaseDscItemPosIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscItemPosIndexDOSProvider },
+	{ kEoBBaseDscItemShpX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscItemShpXDOSProvider },
+	{ kEoBBaseDscItemScaleIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscItemScaleIndexDOSProvider },
+	{ kEoBBaseDscItemTileIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscItemTileIndexDOSProvider },
+	{ kEoBBaseDscItemShapeMap, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscItemShapeMapDOSProvider },
+	{ kEoBBaseDscTelptrShpCoords, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscTelptrShpCoordsDOSProvider },
+	{ kEoBBasePortalSeqData, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1PortalSeqDataDOSProvider },
+	{ kEoBBaseDscMonsterFrmOffsTbl1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscMonsterFrmOffsTbl1DOSProvider },
+	{ kEoBBaseDscMonsterFrmOffsTbl2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscMonsterFrmOffsTbl2DOSProvider },
+	{ kEoBBaseInvSlotX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1InvSlotXDOSProvider },
+	{ kEoBBaseInvSlotY, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1InvSlotYDOSProvider },
+	{ kEoBBaseSlotValidationFlags, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SlotValidationFlagsDOSProvider },
+	{ kEoBBaseProjectileWeaponTypes, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ProjectileWeaponTypesDOSProvider },
+	{ kEoBBaseWandTypes, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1WandTypesDOSProvider },
+	{ kEoBBaseDrawObjPosIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DrawObjPosIndexDOSProvider },
+	{ kEoBBaseFlightObjFlipIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1FlightObjFlipIndexDOSProvider },
+	{ kEoBBaseFlightObjShpMap, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1FlightObjShpMapDOSProvider },
+	{ kEoBBaseFlightObjSclIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1FlightObjSclIndexDOSProvider },
+	{ kRpgCommonDscShapeIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscShapeIndexDOSProvider },
+	{ kRpgCommonDscX, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscXDOSProvider },
+	{ kRpgCommonDscTileIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscTileIndexDOSProvider },
+	{ kRpgCommonDscDimData1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDimData1DOSProvider },
+	{ kRpgCommonDscDimData2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDimData2DOSProvider },
+	{ kRpgCommonDscBlockMap, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscBlockMapDOSProvider },
+	{ kRpgCommonDscDimMap, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscDimMapDOSProvider },
+	{ kRpgCommonDscBlockIndex, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1DscBlockIndexDOSProvider },
+	{ kEoBBaseClassModifierFlags, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1ClassModifierFlagsDOSProvider },
+	{ kEoBBaseMonsterStepTable01, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterStepTable01DOSProvider },
+	{ kEoBBaseMonsterStepTable2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterStepTable2DOSProvider },
+	{ kEoBBaseMonsterStepTable3, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterStepTable3DOSProvider },
+	{ kEoBBaseMonsterCloseAttPosTable1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterCloseAttPosTable1DOSProvider },
+	{ kEoBBaseMonsterCloseAttPosTable21, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterCloseAttPosTable21DOSProvider },
+	{ kEoBBaseMonsterCloseAttChkTable1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterCloseAttChkTable1DOSProvider },
+	{ kEoBBaseMonsterCloseAttChkTable2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterCloseAttChkTable2DOSProvider },
+	{ kEoBBaseMonsterCloseAttDstTable1, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterCloseAttDstTable1DOSProvider },
+	{ kEoBBaseMonsterCloseAttDstTable2, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterCloseAttDstTable2DOSProvider },
+	{ kEoBBaseMonsterProximityTable, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterProximityTableDOSProvider },
+	{ kEoBBaseFindBlockMonstersTable, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1FindBlockMonstersTableDOSProvider },
+	{ kEoBBaseMonsterDirChangeTable, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1MonsterDirChangeTableDOSProvider },
+	{ kEoBBaseEncodeMonsterDefs, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1EncodeMonsterDefsDOSProvider },
+	{ kEoBBaseNpcPresets, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1NpcPresetsDOSProvider },
+	{ kEoBBaseSoundFilesIntro, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SoundFilesIntroDOSProvider },
+	{ kEoBBaseSoundFilesIngame, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SoundFilesIngameDOSProvider },
+	{ kEoBBaseSoundFilesFinale, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1SoundFilesFinaleDOSProvider },
+	{ kEoBBaseChargenStrings1, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenStrings1DOSSpanishProvider },
+	{ kEoBBaseChargenStrings2, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenStrings2DOSSpanishProvider },
+	{ kEoBBaseChargenStatStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenStatStringsDOSSpanishProvider },
+	{ kEoBBaseChargenRaceSexStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenRaceSexStringsDOSSpanishProvider },
+	{ kEoBBaseChargenClassStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenClassStringsDOSSpanishProvider },
+	{ kEoBBaseChargenAlignmentStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenAlignmentStringsDOSSpanishProvider },
+	{ kEoBBaseChargenEnterGameStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ChargenEnterGameStringsDOSSpanishProvider },
+	{ kEoB1MainMenuStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MainMenuStringsDOSSpanishProvider },
+	{ kEoB1BonusStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1BonusStringsDOSSpanishProvider },
+	{ kEoB1TurnUndeadString, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1TurnUndeadStringDOSSpanishProvider },
+	{ kEoB1Npc0Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc0StringsDOSSpanishProvider },
+	{ kEoB1Npc11Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc11StringsDOSSpanishProvider },
+	{ kEoB1Npc12Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc12StringsDOSSpanishProvider },
+	{ kEoB1Npc21Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc21StringsDOSSpanishProvider },
+	{ kEoB1Npc22Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc22StringsDOSSpanishProvider },
+	{ kEoB1Npc31Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc31StringsDOSSpanishProvider },
+	{ kEoB1Npc32Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc32StringsDOSSpanishProvider },
+	{ kEoB1Npc4Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc4StringsDOSSpanishProvider },
+	{ kEoB1Npc5Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc5StringsDOSSpanishProvider },
+	{ kEoB1Npc6Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc6StringsDOSSpanishProvider },
+	{ kEoB1Npc7Strings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1Npc7StringsDOSSpanishProvider },
+	{ kEoBBasePryDoorStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1PryDoorStringsDOSSpanishProvider },
+	{ kEoBBaseWarningStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1WarningStringsDOSSpanishProvider },
+	{ kEoBBaseItemSuffixStringsRings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ItemSuffixStringsRingsDOSSpanishProvider },
+	{ kEoBBaseItemSuffixStringsPotions, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ItemSuffixStringsPotionsDOSSpanishProvider },
+	{ kEoBBaseItemSuffixStringsWands, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ItemSuffixStringsWandsDOSSpanishProvider },
+	{ kEoBBaseRipItemStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1RipItemStringsDOSSpanishProvider },
+	{ kEoBBaseCursedString, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CursedStringDOSSpanishProvider },
+	{ kEoBBaseEnchantedString, kEoB1, kPlatformDOS, kOldFloppy, UNK_LANG, &kEoB1EnchantedStringDOSProvider },
+	{ kEoBBaseMagicObjectStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicObjectStringsDOSSpanishProvider },
+	{ kEoBBaseMagicObjectString5, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicObjectString5DOSSpanishProvider },
+	{ kEoBBasePatternSuffix, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1PatternSuffixDOSSpanishProvider },
+	{ kEoBBasePatternGrFix1, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1PatternGrFix1DOSSpanishProvider },
+	{ kEoBBasePatternGrFix2, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1PatternGrFix2DOSSpanishProvider },
+	{ kEoBBaseValidateArmorString, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ValidateArmorStringDOSSpanishProvider },
+	{ kEoBBaseValidateNoDropString, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ValidateNoDropStringDOSSpanishProvider },
+	{ kEoBBasePotionStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1PotionStringsDOSSpanishProvider },
+	{ kEoBBaseWandStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1WandStringsDOSSpanishProvider },
+	{ kEoBBaseItemMisuseStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ItemMisuseStringsDOSSpanishProvider },
+	{ kEoBBaseTakenStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1TakenStringsDOSSpanishProvider },
+	{ kEoBBasePotionEffectStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1PotionEffectStringsDOSSpanishProvider },
+	{ kEoBBaseYesNoStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1YesNoStringsDOSSpanishProvider },
+	{ kRpgCommonMoreStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MoreStringsDOSSpanishProvider },
+	{ kEoBBaseNpcMaxStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1NpcMaxStringsDOSSpanishProvider },
+	{ kEoBBaseNpcJoinStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1NpcJoinStringsDOSSpanishProvider },
+	{ kEoBBaseCancelStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CancelStringsDOSSpanishProvider },
+	{ kEoBBaseMenuStringsMain, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsMainDOSSpanishProvider },
+	{ kEoBBaseMenuStringsSaveLoad, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsSaveLoadDOSSpanishProvider },
+	{ kEoBBaseMenuStringsOnOff, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsOnOffDOSSpanishProvider },
+	{ kEoBBaseMenuStringsSpells, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsSpellsDOSSpanishProvider },
+	{ kEoBBaseMenuStringsRest, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsRestDOSSpanishProvider },
+	{ kEoBBaseMenuStringsDrop, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsDropDOSSpanishProvider },
+	{ kEoBBaseMenuStringsExit, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsExitDOSSpanishProvider },
+	{ kEoBBaseMenuStringsStarve, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsStarveDOSSpanishProvider },
+	{ kEoBBaseMenuStringsScribe, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsScribeDOSSpanishProvider },
+	{ kEoBBaseMenuStringsDrop2, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsDrop2DOSSpanishProvider },
+	{ kEoBBaseMenuStringsHead, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsHeadDOSSpanishProvider },
+	{ kEoBBaseMenuStringsPoison, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsPoisonDOSSpanishProvider },
+	{ kEoBBaseMenuStringsMgc, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsMgcDOSSpanishProvider },
+	{ kEoBBaseMenuStringsPrefs, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsPrefsDOSSpanishProvider },
+	{ kEoBBaseMenuStringsRest2, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsRest2DOSSpanishProvider },
+	{ kEoBBaseMenuStringsRest4, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsRest4DOSSpanishProvider },
+	{ kEoBBaseMenuStringsDefeat, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuStringsDefeatDOSSpanishProvider },
+	{ kEoBBaseMenuYesNoStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MenuYesNoStringsDOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsHp, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharGuiStringsHpDOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsWp1, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharGuiStringsWp1DOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsWr, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharGuiStringsWrDOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsSt1, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharGuiStringsSt1DOSSpanishProvider },
+	{ kEoBBaseCharGuiStringsIn, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharGuiStringsInDOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings7, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharStatusStrings7DOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings81, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharStatusStrings81DOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings9, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharStatusStrings9DOSSpanishProvider },
+	{ kEoBBaseCharStatusStrings131, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1CharStatusStrings131DOSSpanishProvider },
+	{ kEoBBaseLevelGainStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1LevelGainStringsDOSSpanishProvider },
+	{ kEoBBaseBookNumbers, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1BookNumbersDOSSpanishProvider },
+	{ kEoBBaseMageSpellsList, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MageSpellsListDOSSpanishProvider },
+	{ kEoBBaseClericSpellsList, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ClericSpellsListDOSSpanishProvider },
+	{ kEoBBaseSpellNames, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1SpellNamesDOSSpanishProvider },
+	{ kEoBBaseMagicStrings1, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings1DOSSpanishProvider },
+	{ kEoBBaseMagicStrings2, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings2DOSSpanishProvider },
+	{ kEoBBaseMagicStrings3, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings3DOSSpanishProvider },
+	{ kEoBBaseMagicStrings4, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings4DOSSpanishProvider },
+	{ kEoBBaseMagicStrings6, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings6DOSSpanishProvider },
+	{ kEoBBaseMagicStrings7, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings7DOSSpanishProvider },
+	{ kEoBBaseMagicStrings8, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings8DOSSpanishProvider },
+	//{ kEoBBaseMagicStrings9, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MagicStrings9DOSSpanishProvider },
+	{ kEoBBaseManDef, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ManDefDOSSpanishProvider },
+	{ kEoBBaseManWord, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ManWordDOSSpanishProvider },
+	{ kEoBBaseManPrompt, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1ManPromptDOSSpanishProvider },
+	{ kEoBBaseMonsterDistAttStrings, kEoB1, kPlatformDOS, kOldFloppy, ES_ESP, &kEoB1MonsterDistAttStringsDOSSpanishProvider },
 	{ kEoBBaseChargenStrings1, kEoB1, kPlatformAmiga, kNoSpecial, EN_ANY, &kEoB1ChargenStrings1AmigaEnglishProvider },
 	{ kEoBBaseChargenStrings2, kEoB1, kPlatformAmiga, kNoSpecial, EN_ANY, &kEoB1ChargenStrings2AmigaEnglishProvider },
 	{ kEoBBaseChargenStartLevels, kEoB1, kPlatformAmiga, kNoSpecial, UNK_LANG, &kEoB1ChargenStartLevelsAmigaProvider },
@@ -1827,14 +1989,14 @@ static const ResourceProvider resourceProviders[] = {
 	{ kEoB1IntroTvlY2, kEoB1, kPlatformPC98, kNoSpecial, UNK_LANG, &kEoB1IntroTvlY2PC98Provider },
 	{ kEoB1IntroTvlW, kEoB1, kPlatformPC98, kNoSpecial, UNK_LANG, &kEoB1IntroTvlWPC98Provider },
 	{ kEoB1IntroTvlH, kEoB1, kPlatformPC98, kNoSpecial, UNK_LANG, &kEoB1IntroTvlHPC98Provider },
-	{ kEoB1IntroStringsTower, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsTowerPC98Provider },
-	{ kEoB1IntroStringsOrb, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsOrbPC98Provider },
-	{ kEoB1IntroStringsWdEntry, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsWdEntryPC98Provider },
-	{ kEoB1IntroStringsKing, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsKingPC98Provider },
-	{ kEoB1IntroStringsHands, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsHandsPC98Provider },
-	{ kEoB1IntroStringsWdExit, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsWdExitPC98Provider },
-	{ kEoB1IntroStringsTunnel, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsTunnelPC98Provider },
-	{ kEoB1FinaleStrings, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1FinaleStringsPC98Provider },
+	{ kEoB1IntroStringsTower, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsTowerPC98JapaneseProvider },
+	{ kEoB1IntroStringsOrb, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsOrbPC98JapaneseProvider },
+	{ kEoB1IntroStringsWdEntry, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsWdEntryPC98JapaneseProvider },
+	{ kEoB1IntroStringsKing, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsKingPC98JapaneseProvider },
+	{ kEoB1IntroStringsHands, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsHandsPC98JapaneseProvider },
+	{ kEoB1IntroStringsWdExit, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsWdExitPC98JapaneseProvider },
+	{ kEoB1IntroStringsTunnel, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1IntroStringsTunnelPC98JapaneseProvider },
+	{ kEoB1FinaleStrings, kEoB1, kPlatformPC98, kNoSpecial, JA_JPN, &kEoB1FinaleStringsPC98JapaneseProvider },
 	{ kEoB1FinaleEyesAnim, kEoB1, kPlatformPC98, kNoSpecial, UNK_LANG, &kEoB1FinaleEyesAnimPC98Provider },
 	{ kEoB1FinaleHandsAnim, kEoB1, kPlatformPC98, kNoSpecial, UNK_LANG, &kEoB1FinaleHandsAnimPC98Provider },
 	{ kEoB1FinaleHandsAnim2, kEoB1, kPlatformPC98, kNoSpecial, UNK_LANG, &kEoB1FinaleHandsAnim2PC98Provider },
diff --git a/devtools/create_kyradat/resources/eob1_dos_spanish.h b/devtools/create_kyradat/resources/eob1_dos_spanish.h
index de6141a885..3c091e4fd1 100644
--- a/devtools/create_kyradat/resources/eob1_dos_spanish.h
+++ b/devtools/create_kyradat/resources/eob1_dos_spanish.h
@@ -895,3 +895,48 @@ static const char *const kEoB1MonsterDistAttStringsDOSSpanish[5] = {
 };
 
 static const StringListProvider kEoB1MonsterDistAttStringsDOSSpanishProvider = { ARRAYSIZE(kEoB1MonsterDistAttStringsDOSSpanish), kEoB1MonsterDistAttStringsDOSSpanish };
+
+static const char *const kEoB1IntroStringsTowerDOSSpanish[3] = {
+	"NOSOTROS, LOS LORDS DE WATERDEEP,\rHEMOS DECIDIDO SALVAR NUESTRA CIUDAD\rDE LOS ANTIGUOS DEMONIOS",
+	"",
+	"LLAMEMOS A LOS HEROES DE LA REGION\rY ELIJAMOS A NUESTROS GUERREROS."
+};
+
+static const StringListProvider kEoB1IntroStringsTowerDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsTowerDOSSpanish), kEoB1IntroStringsTowerDOSSpanish };
+
+static const char *const kEoB1IntroStringsOrbDOSSpanish[1] = {
+	"GRAN MAESTRO...."
+};
+
+static const StringListProvider kEoB1IntroStringsOrbDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsOrbDOSSpanish), kEoB1IntroStringsOrbDOSSpanish };
+
+static const char *const kEoB1IntroStringsWdEntryDOSSpanish[1] = {
+	"PARECE QUE TENEMOS UNA POSIBLE SOLUCION."
+};
+
+static const StringListProvider kEoB1IntroStringsWdEntryDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsWdEntryDOSSpanish), kEoB1IntroStringsWdEntryDOSSpanish };
+
+static const char *const kEoB1IntroStringsKingDOSSpanish[1] = {
+	"TE ENCOMENDAMOS LA MISION DE DESTRUIR\rA LOS DEMONIOS....SI ERES CAPAZ."
+};
+
+static const StringListProvider kEoB1IntroStringsKingDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsKingDOSSpanish), kEoB1IntroStringsKingDOSSpanish };
+
+static const char *const kEoB1IntroStringsHandsDOSSpanish[1] = {
+	"PREPARAOS PARA UNA LARGA JORNADA."
+};
+
+static const StringListProvider kEoB1IntroStringsHandsDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsHandsDOSSpanish), kEoB1IntroStringsHandsDOSSpanish };
+
+static const char *const kEoB1IntroStringsWdExitDOSSpanish[1] = {
+	"COMENZAD LA BUSQUEDA BAJO LA CIUDAD."
+};
+
+static const StringListProvider kEoB1IntroStringsWdExitDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsWdExitDOSSpanish), kEoB1IntroStringsWdExitDOSSpanish };
+
+static const char *const kEoB1IntroStringsTunnelDOSSpanish[2] = {
+	"COMIENZA LA AVENTURA.",
+	"LA SALIDA ESTA OBTURADA!!."
+};
+
+static const StringListProvider kEoB1IntroStringsTunnelDOSSpanishProvider = { ARRAYSIZE(kEoB1IntroStringsTunnelDOSSpanish), kEoB1IntroStringsTunnelDOSSpanish };
diff --git a/devtools/create_kyradat/resources/eob1_pc98_japanese.h b/devtools/create_kyradat/resources/eob1_pc98_japanese.h
index 10da4423eb..0446ebcae0 100644
--- a/devtools/create_kyradat/resources/eob1_pc98_japanese.h
+++ b/devtools/create_kyradat/resources/eob1_pc98_japanese.h
@@ -1003,51 +1003,52 @@ static const char *const kEoB1MonsterDistAttStringsPC98Japanese[5] = {
 
 static const StringListProvider kEoB1MonsterDistAttStringsPC98JapaneseProvider = { ARRAYSIZE(kEoB1MonsterDistAttStringsPC98Japanese), kEoB1MonsterDistAttStringsPC98Japanese };
 
-static const char *const kEoB1IntroStringsTowerPC98[3] = {
+static const char *const kEoB1IntroStringsTowerPC98Japanese[3] = {
 	"\x83""E""\x83""H""\x81""[""\x83""^""\x81""[""\x83""f""\x83""B""\x81""[""\x83""v""\x82\xc9\x8e\xd7\x88\xab\x82\xcc\x89""e""\x82\xaa\x94""E""\x82\xd1\x8a\xf1\x82\xc1\x82\xc4\x82\xa2\x82\xe9\x81""B",
 	"\x82\xed\x82\xea\x82\xed\x82\xea\x97\xcc\x8e\xe5\x82\xcd\x81""A""\x82\xbb\x82\xea\x82\xf0\x8e\xe6\x82\xe8\x8f\x9c\x82\xad\x95\xfb\x8d\xf4\x82\xf0\x8c\xa9\x82\xc2\x82\xaf\x82\xcb\x82\xce\x82\xc8\x82\xe7\x82\xca\x81""B",
 	"\x8d\x91\x92\x86\x82\xcc\x89""p""\x97""Y""\x82\xbd\x82\xbf\x82\xc9\x8c\xc4\x82\xd1\x82\xa9\x82\xaf\x81""A""\x97""E""\x8e""m""\x82\xf0\x91""I""\x82\xda\x82\xa4\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsTowerPC98Provider = { ARRAYSIZE(kEoB1IntroStringsTowerPC98), kEoB1IntroStringsTowerPC98 };
+static const StringListProvider kEoB1IntroStringsTowerPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsTowerPC98Japanese), kEoB1IntroStringsTowerPC98Japanese };
 
-static const char *const kEoB1IntroStringsOrbPC98[1] = {
+static const char *const kEoB1IntroStringsOrbPC98Japanese[1] = {
 	"\x82\xb2\x8e\xe5\x90""l""\x82\xb3\x82\xdc\x81""c""\x81""c""\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsOrbPC98Provider = { ARRAYSIZE(kEoB1IntroStringsOrbPC98), kEoB1IntroStringsOrbPC98 };
+static const StringListProvider kEoB1IntroStringsOrbPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsOrbPC98Japanese), kEoB1IntroStringsOrbPC98Japanese };
 
-static const char *const kEoB1IntroStringsWdEntryPC98[1] = {
+static const char *const kEoB1IntroStringsWdEntryPC98Japanese[1] = {
 	"\x82\xe2\x82\xc2\x82\xe7\x82\xcd\x82\xc2\x82\xdc\x82\xe7\x82\xca\x92\xef\x8d""R""\x82\xf0\x8d""l""\x82\xa6\x82\xbd\x82\xe6\x82\xa4\x82\xc5\x82\xb7\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsWdEntryPC98Provider = { ARRAYSIZE(kEoB1IntroStringsWdEntryPC98), kEoB1IntroStringsWdEntryPC98 };
+static const StringListProvider kEoB1IntroStringsWdEntryPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsWdEntryPC98Japanese), kEoB1IntroStringsWdEntryPC98Japanese };
 
-static const char *const kEoB1IntroStringsKingPC98[1] = {
+static const char *const kEoB1IntroStringsKingPC98Japanese[1] = {
 	"\x8c""N""\x82\xbd\x82\xbf\x82\xc9\x94""C""\x96\xb1\x82\xf0\x82\xbd\x82\xad\x82\xb7\x81""B""\x82\xb1\x82\xcc\x88\xab\x82\xcc\x96""{""\x8e\xbf\x82\xf0\x92""T""\x82\xe8\x81""A""\x82\xb3\x82\xe7\x82\xc9\x82\xcd\x94""j""\x89\xf3\x82\xb9\x82\xe6\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsKingPC98Provider = { ARRAYSIZE(kEoB1IntroStringsKingPC98), kEoB1IntroStringsKingPC98 };
+static const StringListProvider kEoB1IntroStringsKingPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsKingPC98Japanese), kEoB1IntroStringsKingPC98Japanese };
 
-static const char *const kEoB1IntroStringsHandsPC98[1] = {
+static const char *const kEoB1IntroStringsHandsPC98Japanese[1] = {
 	"\x8a\xeb\x8c\xaf\x82\xc8\x97\xb7\x82\xc5\x82\xa0\x82\xeb\x82\xa4\x81""B""\x8f\x80\x94\xf5\x82\xf0\x91\xd3\x82\xe9\x82\xc8\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsHandsPC98Provider = { ARRAYSIZE(kEoB1IntroStringsHandsPC98), kEoB1IntroStringsHandsPC98 };
+static const StringListProvider kEoB1IntroStringsHandsPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsHandsPC98Japanese), kEoB1IntroStringsHandsPC98Japanese };
 
-static const char *const kEoB1IntroStringsWdExitPC98[1] = {
+static const char *const kEoB1IntroStringsWdExitPC98Japanese[1] = {
 	"\x92""T""\x8d\xf5\x82\xcd\x92\xac\x82\xcc\x92""n""\x89\xba\x82\xa9\x82\xe7\x82\xcd\x82\xb6\x82\xdf\x82\xc4\x82\xad\x82\xea\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsWdExitPC98Provider = { ARRAYSIZE(kEoB1IntroStringsWdExitPC98), kEoB1IntroStringsWdExitPC98 };
+static const StringListProvider kEoB1IntroStringsWdExitPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsWdExitPC98Japanese), kEoB1IntroStringsWdExitPC98Japanese };
 
-static const char *const kEoB1IntroStringsTunnelPC98[1] = {
+static const char *const kEoB1IntroStringsTunnelPC98Japanese[2] = {
+	"",
 	"\x82\xe2\x82\xc2\x82\xe7\x82\xcc\x89""^""\x96\xbd\x82\xcd\x95\x95\x82\xb6\x82\xe7\x82\xea\x82\xbd\x81""B"
 };
 
-static const StringListProvider kEoB1IntroStringsTunnelPC98Provider = { ARRAYSIZE(kEoB1IntroStringsTunnelPC98), kEoB1IntroStringsTunnelPC98 };
+static const StringListProvider kEoB1IntroStringsTunnelPC98JapaneseProvider = { ARRAYSIZE(kEoB1IntroStringsTunnelPC98Japanese), kEoB1IntroStringsTunnelPC98Japanese };
 
-static const char *const kEoB1FinaleStringsPC98[17] = {
+static const char *const kEoB1FinaleStringsPC98Japanese[17] = {
 	"\x83""p""\x81""[""\x83""e""\x83""B""\x82\xcd\x82\xae\x82\xbf\x82\xe1\x82\xae\x82\xbf\x82\xe1\x82\xc9\x82\xc8\x82\xc1\x82\xbd\x83""N""\x83""T""\x83""i""\x83""^""\x81""[""\x83\x8b\x82\xcc\x8e\x80\x91\xcc\x82\xcc\x8e""c""\x8a""[""\x82\xf0\x92""T""\x82\xc1\x82\xbd\x81""B",
 	"\x83""p""\x81""[""\x83""e""\x83""B""\x81""[""\x82\xcd\x83""N""\x83""T""\x83""i""\x83""^""\x81""[""\x83\x8b\x82\xf0\x93""|""\x82\xb5\x82\xbd\x81""B",
 	"\x83""p""\x81""[""\x83""e""\x83""B""\x81""[""\x82\xcd\x8e\xe5\x82\xcc\x82\xa2\x82\xc8\x82\xa2\x83""N""\x83""T""\x83""i""\x83""^""\x81""[""\x83\x8b\x82\xcc\x91\x83\x82\xf0\x82\xb3\x82\xdc\x82\xe6\x82\xa2\x81""A",
@@ -1067,4 +1068,4 @@ static const char *const kEoB1FinaleStringsPC98[17] = {
 	"\x82\xb7\x82\xd7\x82\xc4\x82\xcc\x82\xe0\x82\xcc\x82\xaa\x82\xbb\x82\xcc\x97""E""\x8a\xb8\x82\xc8\x82\xd3\x82\xe9\x82\xdc\x82\xa2\x82\xf0\x92""m""\x82\xe9\x82\xb1\x82\xc6\x82\xbe\x82\xeb\x82\xa4\x81""I ""\x92""T""\x8d\xf5\x92""B""\x90\xac\x81""A""\x82\xa8\x82\xdf\x82\xc5\x82\xc6\x82\xa4\x81""I"
 };
 
-static const StringListProvider kEoB1FinaleStringsPC98Provider = { ARRAYSIZE(kEoB1FinaleStringsPC98), kEoB1FinaleStringsPC98 };
+static const StringListProvider kEoB1FinaleStringsPC98JapaneseProvider = { ARRAYSIZE(kEoB1FinaleStringsPC98Japanese), kEoB1FinaleStringsPC98Japanese };
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index 568e7f10dd..f07053c03b 100644
Binary files a/dists/engine-data/kyra.dat and b/dists/engine-data/kyra.dat differ
diff --git a/engines/kyra/detection_tables.h b/engines/kyra/detection_tables.h
index 6103efd930..9ddaba2876 100644
--- a/engines/kyra/detection_tables.h
+++ b/engines/kyra/detection_tables.h
@@ -60,6 +60,7 @@ namespace {
 #define LOL_KYRA2_DEMO_FLAGS FLAGS(true, false, false, false, false, false, false, false, false, Kyra::GI_KYRA2)
 
 #define EOB_FLAGS FLAGS(false, false, false, false, false, false, false, false, false, Kyra::GI_EOB1)
+#define EOB_SPANISH_FLAGS FLAGS(false, false, false, true, false, false, false, false, false, Kyra::GI_EOB1)
 #define EOB_PC98_FLAGS FLAGS(false, false, false, false, true, true, false, false, false, Kyra::GI_EOB1)
 #define EOB2_FLAGS FLAGS(false, false, false, false, false, false, false, false, false, Kyra::GI_EOB2)
 #define EOB2_FMTOWNS_FLAGS FLAGS(false, false, false, false, true, false, true, false, false, Kyra::GI_EOB2)
@@ -1707,7 +1708,7 @@ const KYRAGameDescription adGameDescs[] = {
 		EOB_FLAGS
 	},
 	
-	{	// spanish translation
+	{	// Spanish version
 		{
 			"eob",
 			0,
@@ -1720,7 +1721,7 @@ const KYRAGameDescription adGameDescs[] = {
 			ADGF_NO_FLAGS,
 			GUIO9(GUIO_NOSPEECH, GUIO_MIDIADLIB, GUIO_MIDIPCSPK, GUIO_MIDIPCJR, GUIO_RENDERVGA, GUIO_RENDEREGA, GUIO_RENDERCGA, GAMEOPTION_EOB_HPGRAPHS, GAMEOPTION_EOB_MOUSESWAP)
 		},
-		EOB_FLAGS
+		EOB_SPANISH_FLAGS
 	},
 
 	{
diff --git a/engines/kyra/resource/staticres.cpp b/engines/kyra/resource/staticres.cpp
index 9f13b710aa..5075a4db70 100644
--- a/engines/kyra/resource/staticres.cpp
+++ b/engines/kyra/resource/staticres.cpp
@@ -39,7 +39,7 @@
 
 namespace Kyra {
 
-#define RESFILE_VERSION 96
+#define RESFILE_VERSION 97
 
 namespace {
 bool checkKyraDat(Common::SeekableReadStream *file) {


Commit: c88c407e15c98342a5d213dd8baa17ef2bedff73
    https://github.com/scummvm/scummvm/commit/c88c407e15c98342a5d213dd8baa17ef2bedff73
Author: athrxx (athrxx at scummvm.org)
Date: 2020-05-30T19:49:52+02:00

Commit Message:
KYRA: (EOB/Spanish) - fix use of static vars

Having a static array and modifying that inconsistently will cause issues. Just try loading up to the character generator in Spanish, then return to the launcher with Ctrl+F5 and then load up the character generator in English.

Changed paths:
    engines/kyra/engine/chargen.cpp


diff --git a/engines/kyra/engine/chargen.cpp b/engines/kyra/engine/chargen.cpp
index aa6375d3ec..d2afad312e 100644
--- a/engines/kyra/engine/chargen.cpp
+++ b/engines/kyra/engine/chargen.cpp
@@ -281,20 +281,13 @@ void CharacterGenerator::init() {
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga || (_vm->game() == GI_EOB1 && _vm->gameFlags().platform == Common::kPlatformPC98))
 		_screen->fadeToBlack(32);
 
-	static const char *characterGenerationBitmaps[] = { "CHARGEN", "CHARGENB" };
-
-	if (_vm->_flags.lang == Common::ES_ESP && _vm->game() == GI_EOB1) {
-		characterGenerationBitmaps[0] = "CCARGEN";
-		characterGenerationBitmaps[1] = "CCARGENB";
-	}
-
-	_screen->loadEoBBitmap(characterGenerationBitmaps[0], _vm->_cgaMappingDefault, 5, 3, 0);
+	_screen->loadEoBBitmap((_vm->game() == GI_EOB1 && _vm->_flags.lang == Common::ES_ESP) ? "CCARGEN" : "CHARGEN", _vm->_cgaMappingDefault, 5, 3, 0);
 	_screen->selectPC98Palette(4, _screen->getPalette(0));
 
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga || (_vm->game() == GI_EOB1 && _vm->gameFlags().platform == Common::kPlatformPC98))
 		_screen->fadeFromBlack(32);
 
-	_screen->loadShapeSetBitmap(characterGenerationBitmaps[1], 5, 3);
+	_screen->loadShapeSetBitmap((_vm->game() == GI_EOB1 && _vm->_flags.lang == Common::ES_ESP) ? "CCARGENB" : "CHARGENB", 5, 3);
 	if (_chargenMagicShapes) {
 		for (int i = 0; i < 10; i++)
 			delete[] _chargenMagicShapes[i];


Commit: 5601cf828f5ba66d40a9ec0d458006e4b4939023
    https://github.com/scummvm/scummvm/commit/5601cf828f5ba66d40a9ec0d458006e4b4939023
Author: athrxx (athrxx at scummvm.org)
Date: 2020-05-30T19:49:52+02:00

Commit Message:
KYRA: (EOB/Spanish) - adapt resource manager

(the Spanish version needs a hack so as to ignore the invalid item.dat file in the game dir)

Changed paths:
    engines/kyra/resource/resource.cpp


diff --git a/engines/kyra/resource/resource.cpp b/engines/kyra/resource/resource.cpp
index cf7a6cf046..502cb86524 100644
--- a/engines/kyra/resource/resource.cpp
+++ b/engines/kyra/resource/resource.cpp
@@ -118,10 +118,16 @@ bool Resource::reset() {
 					continue;
 
 				Common::Archive *archive = loadArchive(name, *i);
-				if (archive)
-					_files.add(name, archive, 0, false);
-				else
+
+				if (archive) {
+					// Hack for the Spanish version of EOB1. It has an invalid item.dat file in the
+					// game directory that needs to have a lower priority than the one in EOBDATA6.PAK.
+					bool highPrio = (_vm->game() == GI_EOB1 && _vm->gameFlags().lang == Common::ES_ESP && archive->hasFile("ITEM.DAT"));
+					_files.add(name, archive, highPrio ? 4 : 0, false);
+				}
+				else {
 					error("Couldn't load PAK file '%s'", name.c_str());
+				}
 			}
 		}
 	} else if (_vm->game() == GI_KYRA2) {


Commit: c78227f6a1bfd8376ed87f647043cc1369e2daff
    https://github.com/scummvm/scummvm/commit/c78227f6a1bfd8376ed87f647043cc1369e2daff
Author: athrxx (athrxx at scummvm.org)
Date: 2020-05-30T19:49:52+02:00

Commit Message:
KYRA: (EOB/Spanish) - cleanup

Changed paths:
    engines/kyra/engine/scene_eob.cpp


diff --git a/engines/kyra/engine/scene_eob.cpp b/engines/kyra/engine/scene_eob.cpp
index eba81dc518..100c9f2bdb 100644
--- a/engines/kyra/engine/scene_eob.cpp
+++ b/engines/kyra/engine/scene_eob.cpp
@@ -126,8 +126,8 @@ void EoBCoreEngine::readLevelFileData(int level) {
 		error("Failed to load level file LEVEL%d.INF/DRO/ELO/JOT", level);
 
 	if (s->readUint16LE() + 2 == s->size()) {
-		uint16 headerID = s->readUint16LE();
-		if (headerID == 4 /* INF file */ || headerID == 0 /* DRO file */) {
+		// check for valid compression type
+		if (s->readUint16LE() <= 4) {
 			delete s;
 			s = 0;
 			_screen->loadBitmap(file.c_str(), 5, 5, 0, true);


Commit: 39cd3f5aec479c6ee775d5f57c77c603cb6d3a14
    https://github.com/scummvm/scummvm/commit/39cd3f5aec479c6ee775d5f57c77c603cb6d3a14
Author: athrxx (athrxx at scummvm.org)
Date: 2020-05-30T19:49:52+02:00

Commit Message:
KYRA: (EOB/Spanish) - add support for modified title screen

Changed paths:
    engines/kyra/engine/eob.cpp
    engines/kyra/engine/eob.h
    engines/kyra/resource/staticres_eob.cpp


diff --git a/engines/kyra/engine/eob.cpp b/engines/kyra/engine/eob.cpp
index af0ca4ceda..ee6cd41a85 100644
--- a/engines/kyra/engine/eob.cpp
+++ b/engines/kyra/engine/eob.cpp
@@ -61,9 +61,15 @@ Common::Error EoBEngine::init() {
 	initStaticResource();
 
 	for (int i = 0; i < ARRAYSIZE(_titleConfig); ++i) {
-		if (_flags.platform == _titleConfig[i].platform)
+		if (_flags.platform == _titleConfig[i].platform && _flags.lang == _titleConfig[i].lang)
 			_ttlCfg = &_titleConfig[i];
 	}
+	if (!_ttlCfg) {
+		for (int i = 0; i < ARRAYSIZE(_titleConfig); ++i) {
+			if (_flags.platform == _titleConfig[i].platform && _titleConfig[i].lang == Common::UNK_LANG)
+				_ttlCfg = &_titleConfig[i];
+		}
+	}
 	assert(_ttlCfg);
 
 	if (_configRenderMode != Common::kRenderCGA)
diff --git a/engines/kyra/engine/eob.h b/engines/kyra/engine/eob.h
index d1fa6ecdcc..2d078ea58b 100644
--- a/engines/kyra/engine/eob.h
+++ b/engines/kyra/engine/eob.h
@@ -57,6 +57,7 @@ private:
 
 	struct TitleScreenConfig {
 		const Common::Platform platform;
+		const Common::Language lang;
 		const char bmpFile[12];
 		const RenderModePalFile *palFiles;
 		const int pc98PaletteID;
@@ -68,7 +69,7 @@ private:
 	};
 
 	static const RenderModePalFile _renderModePalFiles[3];
-	static const TitleScreenConfig _titleConfig[3];
+	static const TitleScreenConfig _titleConfig[4];
 	const TitleScreenConfig *_ttlCfg;
 
 	// Main loop
diff --git a/engines/kyra/resource/staticres_eob.cpp b/engines/kyra/resource/staticres_eob.cpp
index 0078fb6669..9a54567e9d 100644
--- a/engines/kyra/resource/staticres_eob.cpp
+++ b/engines/kyra/resource/staticres_eob.cpp
@@ -1392,9 +1392,10 @@ const EoBEngine::RenderModePalFile EoBEngine::_renderModePalFiles[3] = {
 	{	-1, "" }
 };
 
-const EoBEngine::TitleScreenConfig EoBEngine::_titleConfig[3] = {
+const EoBEngine::TitleScreenConfig EoBEngine::_titleConfig[4] = {
 	{
 		Common::kPlatformDOS,
+		Common::UNK_LANG,
 		"INTRO",
 		_renderModePalFiles,
 		-1,
@@ -1406,6 +1407,7 @@ const EoBEngine::TitleScreenConfig EoBEngine::_titleConfig[3] = {
 	},
 	{
 		Common::kPlatformAmiga,
+		Common::UNK_LANG,
 		"TITLE",
 		&_renderModePalFiles[2],
 		-1,
@@ -1417,6 +1419,7 @@ const EoBEngine::TitleScreenConfig EoBEngine::_titleConfig[3] = {
 	},
 	{
 		Common::kPlatformPC98,
+		Common::UNK_LANG,
 		"EOBTITLE",
 		&_renderModePalFiles[2],
 		1,
@@ -1425,7 +1428,19 @@ const EoBEngine::TitleScreenConfig EoBEngine::_titleConfig[3] = {
 		77, 161, 173, 29, 1, 2, 12,
 		76, 160, 175, 31, 1, 2, -1,
 		-8
-	}
+	},
+	{
+		Common::kPlatformDOS,
+		Common::ES_ESP,
+		"NNTRO",
+		_renderModePalFiles,
+		-1,
+		2,
+		false,
+		77, 165, 173, 29, 14, 13, 12,
+		76, 164, 175, 31, 14, 13, -1,
+		0
+	},
 };
 
 void DarkMoonEngine::initStaticResource() {


Commit: 383f20e966376c8365552af972d797494c347d30
    https://github.com/scummvm/scummvm/commit/383f20e966376c8365552af972d797494c347d30
Author: athrxx (athrxx at scummvm.org)
Date: 2020-05-30T19:49:52+02:00

Commit Message:
KYRA: (EOB/Spanish) - fix intro subtitles

Changed paths:
    engines/kyra/sequence/sequences_eob.cpp


diff --git a/engines/kyra/sequence/sequences_eob.cpp b/engines/kyra/sequence/sequences_eob.cpp
index 087266e8a0..db6fade697 100644
--- a/engines/kyra/sequence/sequences_eob.cpp
+++ b/engines/kyra/sequence/sequences_eob.cpp
@@ -56,6 +56,7 @@ protected:
 private:
 	virtual void wait(uint32 ticks) { _vm->delay(ticks * _tickLength); }
 	Common::Array<Common::Rect> _textFields;
+	const Screen::FontId _textFont;
 	uint8 _textColor;
 };
 
@@ -190,7 +191,8 @@ private:
 
 EoBSeqPlayerCommon::EoBSeqPlayerCommon(EoBEngine *vm, Screen_EoB *screen) : _vm(vm), _screen(screen), _textColor(0xE1),
 	_fillColor1(vm->gameFlags().platform == Common::kPlatformAmiga ? 19 : (vm->gameFlags().platform == Common::kPlatformPC98 ? 0 : 12)),
-	_fillColor2(vm->gameFlags().platform == Common::kPlatformAmiga ? 10 : 157), _tickLength(16) {
+	_fillColor2(vm->gameFlags().platform == Common::kPlatformAmiga ? 10 : 157), _tickLength(16),
+	_textFont(vm->gameFlags().platform == Common::kPlatformPC98 ? Screen::FID_SJIS_TEXTMODE_FNT : Screen::FID_8_FNT) {
 	_shapes = new uint8*[64];
 	memset(_shapes, 0, 64 * sizeof(uint8*));
 }
@@ -273,17 +275,30 @@ void EoBSeqPlayerCommon::printSubtitle(const char *str, int textmodeX, int textm
 	if (!str)
 		return;
 
-	Screen::FontId of = _screen->setFont(Screen::FID_SJIS_TEXTMODE_FNT);
+	Screen::FontId of = _screen->setFont(_textFont);
 	int cp = _screen->setCurPage(0);
+	Common::String tmpStr(str);
+
+	if (_vm->_flags.lang == Common::ES_ESP) {
+		textmodeX = (20 - ((tmpStr.contains('\r') ? tmpStr.findFirstOf('\r') : tmpStr.size()) >> 1)) << 1;
+		textmodeY--;
+		// No "typewriter" effect for Spanish
+		mode = 2;
+	}
 
 	int x1 = textmodeX << 2;
 	int y1 = textmodeY << 3;
 
 	for (int i = 0; str[i] &&!_vm->shouldQuit() && !_vm->skipFlag(); ) {
 		uint8 c = str[i++];
+		bool loop = true;
 		if (c == 13) {
 			curX = 0;
 			textmodeY++;
+			if (_vm->_flags.lang == Common::ES_ESP) {
+				tmpStr = &str[i];
+				textmodeX = (20 - ((tmpStr.contains('\r') ? tmpStr.findFirstOf('\r'): tmpStr.size()) >> 1)) << 1;
+			}
 		} else if (c == 10) {
 			_textColor = str[i++];
 		} else if (c == 7) {
@@ -293,8 +308,13 @@ void EoBSeqPlayerCommon::printSubtitle(const char *str, int textmodeX, int textm
 			_textFields.push_back(Common::Rect(x1, y1, x22, y22));
 			clearTextField();
 			curX = 0;
+		} else {
+			loop = false;
 		}
 
+		if (loop)
+			continue;
+
 		charStr[0] = c;
 		charStr[1] = (c >= 0x81 && (c <= 0x9F || (c >= 0xE0 && c <= 0xFC))) ? str[i++] : 0;
 
@@ -1078,8 +1098,7 @@ void EoBIntroPlayer::tunnel() {
 		_vm->delayUntil(end);
 	}
 
-	// subtitle "We have them" - the PC-98 version does not have this string.
-	_screen->copyRegion(0, 160, 0, 184, 320, 16, 6, 0, Screen::CR_NO_P_CHECK);
+	displaySubtitle(160, 184, 16, _stringsTunnel, 0, 27, 23, 0xE1, 0);
 	_screen->updateScreen();
 
 	_vm->delay(18 * _vm->_tickLength);
@@ -1149,7 +1168,7 @@ void EoBIntroPlayer::tunnel() {
 	_screen->copyRegion(0, 120, 80, 30, 160, 64, 4, 0, Screen::CR_NO_P_CHECK);
 	_screen->copyRegion(160, 120, 80, 94, 160, 64, 4, 0, Screen::CR_NO_P_CHECK);
 
-	displaySubtitle(176, 184, 16, _stringsTunnel, 0, 27, 23, 0xE1, 0);
+	displaySubtitle(176, 184, 16, _stringsTunnel, 1, 27, 23, 0xE1, 0);
 
 	_screen->setCurPage(0);
 	_screen->updateScreen();




More information about the Scummvm-git-logs mailing list