From 70eca7190573ad43d78c75c9ea0f4207b4ecbf62 Mon Sep 17 00:00:00 2001 From: Le Philousophe Date: Sun, 30 Jun 2019 18:29:08 +0200 Subject: CRYOMNI3D: Add Spanish version of Versailles --- devtools/create_cryomni3d/create_cryomni3d_dat.cpp | 2 + devtools/create_cryomni3d/create_cryomni3d_dat.h | 1 + devtools/create_cryomni3d/versailles.cpp | 1 + devtools/create_cryomni3d/versailles.h | 225 +++++++++++++++++++++ dists/engine-data/cryomni3d.dat | Bin 23152 -> 28848 bytes engines/cryomni3d/datstream.cpp | 2 + engines/cryomni3d/detection_tables.h | 51 +++++ engines/cryomni3d/versailles/menus.cpp | 9 +- 8 files changed, 288 insertions(+), 3 deletions(-) diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp index 741d76fa74..9646a1c634 100644 --- a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp +++ b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp @@ -52,12 +52,14 @@ struct Parts { DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, FR) DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, DE) DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, EN) +DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ES) DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, IT) static Parts gamesParts[] = { GAME_PLATFORM_LANG_PART(Versailles, ALL, FR), GAME_PLATFORM_LANG_PART(Versailles, ALL, DE), GAME_PLATFORM_LANG_PART(Versailles, ALL, EN), + GAME_PLATFORM_LANG_PART(Versailles, ALL, ES), GAME_PLATFORM_LANG_PART(Versailles, ALL, IT), }; diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.h b/devtools/create_cryomni3d/create_cryomni3d_dat.h index 8f8aeb8b58..9ccad39bee 100644 --- a/devtools/create_cryomni3d/create_cryomni3d_dat.h +++ b/devtools/create_cryomni3d/create_cryomni3d_dat.h @@ -40,6 +40,7 @@ size_t writeGameHeader(FILE *f, uint32 gameId, uint16 version, uint16 lang, uint #define LANG_DE MKTAG16('d', 'e') #define LANG_EN MKTAG16('e', 'n') +#define LANG_ES MKTAG16('e', 's') #define LANG_FR MKTAG16('f', 'r') #define LANG_IT MKTAG16('i', 't') diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp index 46d276d05a..588a10527e 100644 --- a/devtools/create_cryomni3d/versailles.cpp +++ b/devtools/create_cryomni3d/versailles.cpp @@ -60,4 +60,5 @@ DEFINE_FUNCS(FR) DEFINE_FUNCS(DE) DEFINE_FUNCS(EN) +DEFINE_FUNCS(ES) DEFINE_FUNCS(IT) diff --git a/devtools/create_cryomni3d/versailles.h b/devtools/create_cryomni3d/versailles.h index 8dc58fdfdc..9f5b507a45 100644 --- a/devtools/create_cryomni3d/versailles.h +++ b/devtools/create_cryomni3d/versailles.h @@ -50,6 +50,13 @@ static char const *const versaillesENlocalizedFilenames[] = { "credits.GB", "LEB1_GB.WAV", }; +static char const *const versaillesESlocalizedFilenames[] = { + "DIALOG1.SP", + "tous_doc.SP", + "lien_doc.txt", + "credits.SP", + "LEB1_SP.WAV", +}; static char const *const versaillesITlocalizedFilenames[] = { "DIALOG1.ITA", "tous_doc.ita", @@ -64,6 +71,8 @@ static char const versaillesDEEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT" static char const versaillesDEEpilPwd[] = "DIEENTENUNDDERPUDEL"; static char const versaillesENEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT"; static char const versaillesENEpilPwd[] = "FOXANDCRANE"; +static char const versaillesESEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT"; +static char const versaillesESEpilPwd[] = "ELZORROYLAGRULLA"; static char const versaillesITEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT"; static char const versaillesITEpilPwd[] = "LEANATREEILCANE"; @@ -71,6 +80,7 @@ static char const versaillesFRBombPwd[] = "JEMENVAISMAISLETATDEMEURERATOUJOURS"; static char const versaillesDEBombPwd[] = "MONARCHEN IST ES NICHT GEGEBEN VOLLKOMMENHEIT ZU ERREICHEN"; static char const versaillesENBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION"; +static char const versaillesESBombPwd[] = "NO ES PODER DE REYES EL ALCANZAR LA PERFECCION"; static char const versaillesITBombPwd[] = "AI SOVRANI NON E DATO RAGGIUNGERE LA PERFEZIONE"; #define VERSAILLES_MESSAGES_COUNT 146 @@ -725,6 +735,221 @@ static char const *const versaillesENpaintings[] = { "\"Christ being taken down from the cross\"\rCharles Lebrun", /* 47: 45260 */ }; +static char const *const versaillesESmessages[] = { + "Por el momento est" "\x87" " prohibido abrir esta puerta.", /* 0 */ + "Esta puerta est" "\x87" " cerrada.", /* 1 */ + "Esta puerta est" "\x87" " cerrada.", /* 2 */ + "Este caj" "\x97" "n est" "\x87" " vac" "\x92" "o.", /* 3 */ + "No puedes alcanzar la cubierta.", /* 4 */ + "No hay nada en este naranjo.", /* 5 */ + "\xc1" "Esto no es un naranjo!", /* 6 */ + "Est" "\x87" " demasiado oscuro.", /* 7 */ + "El cofre est" "\x87" " cerrado. ", /* 8 */ + "Puedes abrir la puerta.", /* 9 */ + "Necesitar" "\x87" "s algo para poder alcanzar la bomba.", /* 10 */ + "Este jarr" "\x97" "n est" "\x87" " vac" "\x92" "o.", /* 11 */ + "Ahora puedes pasar.", /* 12 */ + "\xc1" "No tienes tiempo para aprender sobre la Corte.!", /* 13 */ + "\xc1" "Es demasiado tarde para admirar los cuadros!", /* 14 */ + "\xc1" "Espera! Dale tus pistas al ujier.", /* 15 */ + "No puedes alcanzar el papel.", /* 16 */ + "A la botica.", /* 17 */ + "Aviso: Podr" "\x87" "s llegar al final de este nivel, pero no has " + "realizado todas las acciones necesarias para poder continuar. Se " + "te aconseja que GUARDES este juego ahora.", /* 18 */ + "Aviso: Podr" "\x87" "s llegar al final de este nivel, pero puede " + "que no hayas realizado todas las acciones necesarias para poder " + "continuar. Se te aconseja que GUARDES este juego ahora.", /* 19 */ + "No puedes moverte por ah" "\x92" " mientras lleves una escalera.", /* 20 */ + "Aqu" "\x92" " no hay nada m" "\x87" "s.", /* 21 */ + "Adi" "\x97" "s ...", /* 22 */ + "VERSALLES,", /* 23 */ + "Intriga en la Corte de Luis XIV", /* 24 */ + "Consultar la zona de documentaci" "\x97" "n", /* 25 */ + " Continuar el juego", /* 26 */ + " Empezar un juego nuevo", /* 27 */ + " Cargar un juego", /* 28 */ + " Guardar este juego", /* 29 */ + " Mostrar subt" "\x92" "tulos: SI", /* 30 */ + " Mostrar subt" "\x92" "tulos: NO", /* 31 */ + " M" "\x9c" "sica: SI", /* 32 */ + " M" "\x9c" "sica: NO", /* 33 */ + " Una parte de la m" "\x9c" "sica en el disco duro (20 " + "Mb)", /* 34 */ + " Toda la m" "\x9c" "sica en el disco duro (92 Mb)", /* 35 */ + " No guardar m" "\x9c" "sica en el disco duro (leer CD)", /* 36 */ + nullptr, /* 37 */ + nullptr, /* 38 */ + "Volumen", /* 39 */ + "Salir del juego", /* 40 */ + "", /* 41 */ + "Visitar el palacio", /* 42 */ + "Cr" "\x8e" "ditos", /* 43 */ + " Continuar la visita", /* 44 */ + " Guardar esta visita", /* 45 */ + " Cargar una visita", /* 46 */ + nullptr, /* 47 */ + " Omni3D: normal", /* 48 */ + " Omni3D: despacio", /* 49 */ + " Omni3D: muy despacio", /* 50 */ + " Omni3D: r" "\x87" "pido", /* 51 */ + " Omni3D: muy r" "\x87" "pido", /* 52 */ + "Confirmar", /* 53 */ + "Cancelar", /* 54 */ + "libre", /* 55 */ + "sin nombre", /* 56 */ + "Aviso: este juego va a ser abandonado.", /* 57 */ + "Vuelta", /* 58 */ + "El Palacio", /* 59 */ + "Volver al Men" "\x9c" " Principal", /* 60 */ + "Sumario de la Zona de Documentaci" "\x97" "n", /* 61 */ + "Mapa del Palacio y los jardines", /* 62 */ + "Plano interior del palacio", /* 63 */ + "Imposible escribir en el disco duro: disco lleno", /* 64 */ + nullptr, /* 65 */ + "Inserta el CD", /* 66 */ + "Inserta el %d CD y pulsa cualquier tecla", /* 67 */ + "Las Artes", /* 68 */ + "El Reinado", /* 69 */ + "La Corte", /* 70 */ + "Vida en el Palacio", /* 71 */ + "El Palacio y los jardines", /* 72 */ + "Cronolog" "\x92" "a", /* 73 */ + "La Fuente de Apolo", /* 74 */ + "El Palacio", /* 75 */ + "Colonnade", /* 76 */ + "Laberinto", /* 77 */ + "Latona", /* 78 */ + "Orangerie", /* 79 */ + "El Parterre de agua", /* 80 */ + "Alfombra verde", /* 81 */ + "Las Caballerizas Grandes", /* 82 */ + "Las Caballerizas Peque" "\x96" "as", /* 83 */ + "Los jardines", /* 84 */ + "El Patio", /* 85 */ + "El Gran Canal", /* 86 */ + "El Parterre Sur", /* 87 */ + "El Parterre Norte", /* 88 */ + "El huerto del Rey", /* 89 */ + "El Sal" "\x97" "n de Baile", /* 90 */ + "La Fuente de Neptuno", /* 91 */ + "El Lago de los Guardas Suizos", /* 92 */ + "Agujas (" "\xc1" "Sin uso!)", /* 93 */ + "Tijeras", /* 94 */ + "Papel", /* 95 */ + "Panfleto sobre las artes", /* 96 */ + "Llave peque" "\x96" "a 1", /* 97 */ + "Papel transformado", /* 98 */ + "Papel manchado", /* 99 */ + "Papel del cofre", /* 100 */ + "Panfleto sobre linaje real", /* 101 */ + "Vela encendida", /* 102 */ + "Vela", /* 103 */ + "Llave", /* 104 */ + "Carpeta de bocetos", /* 105 */ + "Carpeta de bocetos", /* 106 */ + "Boceto falso", /* 107 */ + "Escalera", /* 108 */ + "Boceto destruido", /* 109 */ + "pincel", /* 110 */ + "pincel dorado", /* 111 */ + "pincel rojo", /* 112 */ + "Carboncillo", /* 113 */ + "Papel", /* 114 */ + "Panfleto sobre arquitectura", /* 115 */ + "Llave peque" "\x96" "a 2", /* 116 */ + "Arquero(" "\xc1" "sin uso!)", /* 117 */ + "Partitura", /* 118 */ + "Taco de Billar", /* 119 */ + "Autorizaci" "\x97" "n", /* 120 */ + "Reproducci" "\x97" "n de medallas", /* 121 */ + "Caj" "\x97" "n con medallas", /* 122 */ + "Llave de la peque" "\x96" "a puerta de Apolo", /* 123 */ + "Comida", /* 124 */ + "Panfleto sobre religi" "\x97" "n", /* 125 */ + "Ep" "\x92" "grafe", /* 126 */ + "Panfleto sobre el gobierno", /* 127 */ + "Pluma", /* 128 */ + "Memo", /* 129 */ + "Telescopio", /* 130 */ + "Plano de Vauban", /* 131 */ + "Plano de Vauban", /* 132 */ + "Cord" "\x97" "n", /* 133 */ + "Grabado", /* 134 */ + "Llave peque" "\x96" "a 3", /* 135 */ + "Llave peque" "\x96" "a 4", /* 136 */ + "Memorandum", /* 137 */ + "Planos del Palacio", /* 138 */ + "Planos del Palacio", /* 139 */ + "Llave del " "\x87" "tico", /* 140 */ + "F" "\x87" "bulas", /* 141 */ + "Plano del laberinto", /* 142 */ + "Herramienta", /* 143 */ + "Medicina", /* 144 */ + "Apagavelas", /* 145 */ +}; + +static char const *const versaillesESpaintings[] = { + "\"Animales entrando en el Arca\"\rGerolamo Bassano ", /* 0: 41201 */ + "\"La Cena de Emmaus\"\rJacopo Bassano", /* 1: 41202 */ + "\"Mar" "\x92" "a Magdalena a los pies de Cristo\"", /* 2: 41203 */ + "\"Saliendo del Arca\"\rGerolamo Bassano ", /* 3: 41204 */ + "\"Golpeando la Roca\"\rJacopo Bassano", /* 4: 41205 */ + "\"La Batalla de Arbelles\"\rJoseph Parrocel", /* 5: 41301 */ + "\"Alejandro el Grande, Conquistador de Darisu en la batalla de " + "Arbelles\"\rLe Bourguignon ", /* 6: 41302 */ + "\"El Combate de Leuze\"\rJoseph Parrocel", /* 7: 42401 */ + "\"Santa Cecilia con un " "\x87" "ngel sosteniendo una " + "partitura\"\rIl Domenichino", /* 8: 42901 */ + "\"Don Francisco de Moncada\"\rVan Dyck", /* 9: 42902 */ + "\"El joven Juan Bautista\"\rCarracci", /* 10: 42903 */ + "\"San Mateo\"\rValentin", /* 11: 42904 */ + "\"Rendici" "\x97" "n ante el C" "\x8e" "sar\"\rValentin", /* 12: 42905 */ + "\"San Lucas\"\rValentin", /* 13: 42906 */ + "\"El matrimonio m" "\x92" "stico de Santa Catalina\"\r Alessandro " + "Turchi", /* 14: 42907 */ + "\"La Reuni" "\x97" "n de los Bebedores\"\rNicolas Tournier", /* 15: 42908 */ + "\"Vidente\"\rValentin", /* 16: 42909 */ + "\"El Rey David tocando el arpa\"\rIl Domenichino", /* 17: 42910 */ + "\"Mar" "\x92" "a Magdalena\"\rIl Domenichino", /* 18: 42911 */ + "\"Autorretrato\"\rVan Dyck", /* 19: 42912 */ + "\"San Juan el Evangelista\"\r Valentin", /* 20: 42913 */ + "\"Hagar siendo ayudada por un " "\x87" "ngel\"\rGiovanni " + "Lanfranco", /* 21: 42914 */ + "\"San Marcos\"\rValentin", /* 22: 42915 */ + "\"Meleager con la cabeza del verraco de Calydon a sus " + "pies\"\rJacques Rousseau", /* 23: 43090 */ + "\"El Rey vestido de romano\"\rJean Warin", /* 24: 43091 */ + "\"Atalanta\"\rJacques Rousseau", /* 25: 43092 */ + "\"Eneas llevando a Anchises\"\rSpada", /* 26: 43100 */ + "\"David y Betsab" "\x8e" "\"\rVeronese", /* 27: 43101 */ + "\"El Vuelo a Egipto\"\rGuido Reni", /* 28: 43102 */ + "\"Luis XIV a caballo\"\rPierre Mignard", /* 29: 43103 */ + "\"La Magnificencia Real y el Progreso de las Bellas " + "Artes\"\rHouasse", /* 30: 43104 */ + "\"El sacrificio de Ifigenia\"\rCharles de La Fosse", /* 31: 43130 */ + "\"Busto de Luis XIV\"\rsculpted by Bernini", /* 32: 43131 */ + "\"Diana descubre a Endymion en los brazos de Morfeo\"\rGabriel " + "Blanchard", /* 33: 43132 */ + "\"San Pedro y la V" "\x92" "rgen Mar" "\x92" "a\"\rIl Guercino", /* 34: 43140 */ + "\"Los disc" "\x92" "pulos en Emmaus\"\rVeronese", /* 35: 43141 */ + "\"La Sagrada Familia\"\rVeronese", /* 36: 43142 */ + "\"La familia de Dar" "\x92" "o a los pies de Alejandro\"\rCharles " + "LeBrun", /* 37: 43143 */ + "\"San Juan Bautista\"\rRaphael", /* 38: 43144 */ + "\"Mar" "\x92" "a de M" "\x8e" "dicis\"\rVan Dyck", /* 39: 43150 */ + "\"H" "\x8e" "rcules luchando contra Aqueleo\"\rGuido Reni", /* 40: 43151 */ + "\"El Centauro Nessus raptando a Deianeira\"\rGuido Reni", /* 41: 43152 */ + "\"San Francisco de As" "\x92" "s consolado tras recibir el " + "estigma\"\rSeghers", /* 42: 43153 */ + "\"Thomiris hundiendo la cabeza de Ciro en sangre\"\rRubens", /* 43: 43154 */ + "\"H" "\x8e" "rcules destruyendo a Hydra\"\rGuido Reni", /* 44: 43155 */ + "\"H" "\x8e" "rcules en llamas\"\rGuido Reni", /* 45: 43156 */ + "\"Retrato del Pr" "\x92" "ncipe Palatine y de su hermano el Pr" + "\x92" "ncipe Roberto\"\rVan Dyck", /* 46: 43157 */ + "\"El Descendimiento de Cristo\"\rCharles Lebrun", /* 47: 45260 */ +}; + static char const *const versaillesITmessages[] = { "Per ora " "\x8f" " vietato aprire questa porta.", /* 0 */ "Questa porta " "\x8f" " chiusa a chiave.", /* 1 */ diff --git a/dists/engine-data/cryomni3d.dat b/dists/engine-data/cryomni3d.dat index 02bc9e413e..e991ebe1f9 100644 Binary files a/dists/engine-data/cryomni3d.dat and b/dists/engine-data/cryomni3d.dat differ diff --git a/engines/cryomni3d/datstream.cpp b/engines/cryomni3d/datstream.cpp index f679467ca8..f1e10feb9f 100644 --- a/engines/cryomni3d/datstream.cpp +++ b/engines/cryomni3d/datstream.cpp @@ -121,6 +121,8 @@ uint16 DATSeekableStream::translateLanguage(Common::Language lang) { return MKTAG16('d', 'e'); case Common::EN_ANY: return MKTAG16('e', 'n'); + case Common::ES_ESP: + return MKTAG16('e', 's'); case Common::FR_FRA: return MKTAG16('f', 'r'); case Common::IT_ITA: diff --git a/engines/cryomni3d/detection_tables.h b/engines/cryomni3d/detection_tables.h index 5f824f16a7..f6791fa19a 100644 --- a/engines/cryomni3d/detection_tables.h +++ b/engines/cryomni3d/detection_tables.h @@ -178,6 +178,57 @@ static const CryOmni3DGameDescription gameDescriptions[] = { GF_VERSAILLES_AUDIOPADDING, }, + // Versailles 1685 + // Spanish Windows 95 from hybrid Win95/DOS CD + // From lePhilousophe + { + { + "versailles", + "", + AD_ENTRY1s("VERSAILL.EXE", "78d90d656ec3b76f158721d38bc68083", 346112), + Common::ES_ESP, + Common::kPlatformWindows, + ADGF_UNSTABLE, + GUI_OPTIONS_VERSAILLES + }, + GType_VERSAILLES, + GF_VERSAILLES_NUMERICFONTS | GF_VERSAILLES_AUDIOPADDING, + }, + + // Versailles 1685 + // Spanish Windows 95 compressed from hybrid Win95/DOS CD + // From lePhilousophe + { + { + "versailles", + "", + AD_ENTRY1s("PROGRAM.Z", "9e7c0c3125124010d45dde9dc62744ef", 346112), + Common::ES_ESP, + Common::kPlatformWindows, + ADGF_UNSTABLE, + GUI_OPTIONS_VERSAILLES + }, + GType_VERSAILLES, + GF_VERSAILLES_NUMERICFONTS | GF_VERSAILLES_AUDIOPADDING, + }, + + // Versailles 1685 + // Spanish DOS from hybrid Win95/DOS CD + // From lePhilousophe + { + { + "versailles", + "", + AD_ENTRY1s("VERSAILL.PGM", "1c992f034f43418a5da2e8ebd0b92620", 715887), + Common::ES_ESP, + Common::kPlatformDOS, + ADGF_UNSTABLE, + GUI_OPTIONS_VERSAILLES + }, + GType_VERSAILLES, + GF_VERSAILLES_NUMERICFONTS | GF_VERSAILLES_AUDIOPADDING, + }, + { AD_TABLE_END_MARKER, 0, 0 } }; diff --git a/engines/cryomni3d/versailles/menus.cpp b/engines/cryomni3d/versailles/menus.cpp index a6490dc05d..bec962e094 100644 --- a/engines/cryomni3d/versailles/menus.cpp +++ b/engines/cryomni3d/versailles/menus.cpp @@ -47,7 +47,8 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface int oldFont = _fontManager.getCurrentFont(); int titleX, titleY, subtitleX, subtitleY; - if (getLanguage() == Common::FR_FRA) { + if (getLanguage() == Common::FR_FRA || + getLanguage() == Common::ES_ESP) { titleX = 144; titleY = 160; subtitleX = 305; @@ -73,7 +74,8 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface offY = _fontManager.getFontMaxHeight(); _fontManager.displayStr(subtitleX, subtitleY - offY, _messages[24]); - if (getLanguage() == Common::FR_FRA) { + if (getLanguage() == Common::FR_FRA || + getLanguage() == Common::ES_ESP) { surface->vLine(100, 146, 172, color); surface->hLine(100, 172, 168, color); // minus 1 because hLine draws inclusive } @@ -325,7 +327,8 @@ uint CryOmni3DEngine_Versailles::displayOptions() { Common::Rect rct; if (getLanguage() == Common::DE_DEU) { rct = Common::Rect(286, 433, 555, 475); - } else if (getLanguage() == Common::IT_ITA) { + } else if (getLanguage() == Common::ES_ESP || + getLanguage() == Common::IT_ITA) { rct = Common::Rect(250, 420, 530, 465); } else { rct = Common::Rect(235, 420, 505, 465); -- cgit v1.2.3