1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 23:54:09 +02:00

add Spanish translation (text only)

This commit is contained in:
XProger
2019-02-18 02:32:42 +03:00
parent 6e261c1645
commit 2dba158031
5 changed files with 260 additions and 22 deletions

View File

@@ -1434,7 +1434,7 @@ struct Controller {
vec3 p = pos - Core::viewPos.xyz();
game->getMesh()->addDynSprite(level->spriteSequences[-(getEntity().modelIndex + 1)].sStart + frame, short3(int16(p.x), int16(p.y), int16(p.z)), color, color);
game->getMesh()->addDynSprite(level->spriteSequences[-(getEntity().modelIndex + 1)].sStart + frame, short3(int16(p.x), int16(p.y), int16(p.z)), false, color, color);
}
virtual void render(Frustum *frustum, MeshBuilder *mesh, Shader::Type type, bool caustics) {

View File

@@ -478,7 +478,7 @@ const char *STR_EN[] = { ""
const char *STR_FR[] = { ""
// help
, "Chargement..."
, "Press H for help"
, "Appuyez sur H pour afficher l'aide"
, helpText
, "%s@@@"
"ENNEMIS TU)ES %d@@"
@@ -512,7 +512,7 @@ const char *STR_FR[] = { ""
, "Not Ready"
, "Joueur 1"
, "Joueur 2"
, "Press Any Key"
, "Appuyez sur une touche"
, "%s - Choisir"
, "%s - Retour"
// inventory pages
@@ -931,6 +931,234 @@ const char *STR_DE[] = { ""
, "All Hallows"
};
const char *STR_ES[] = { ""
// help
, "Cargando..."
, "Pulsa H para ayuda"
, helpText
, "%s@@@"
"BAJAS %d@@"
"RECOGIDAS %d@@"
"SECRETOS %d de %d@@"
"TIEMPO %s"
, "Saving game..."
, "Saving done!"
, "SAVING ERROR!"
, "SI"
, "NO"
, "No"
, "Si"
, "Pantalla dividida"
, "VR"
, "Bajo"
, "Medio"
, "Alto"
, "English"
, "French"
, "German"
, "Spanish"
, "Italian"
, "Russian"
, "Japanese"
, "Aplicar"
, "Gamepad 1"
, "Gamepad 2"
, "Gamepad 3"
, "Gamepad 4"
, "Not Ready"
, "Jugador 1"
, "Jugador 2"
, "Pulsa Cualquier Tecla"
, "%s - Elegir"
, "%s - Regresa"
// inventory pages
, "OPCIONES"
, "INVENTARIO"
, "OBJETOS"
// save game page
, "\xBF""Guardar juego?"
, "Posici)on actual"
// inventory option
, "Juego"
, "Mapa"
, "Br)ujula"
, "Estadistica"
, "Casa De Lara"
, "Nivel de Detalle"
, "Sonido"
, "Controles"
, "Gamma"
// passport menu
, "Cargar Juego"
, "Juego Nuevo"
, "Reiniciar Nivel"
, "Regresar a los T)itulos"
, "Salir del Juego"
, "Seleccionar Nivel"
// detail options
, "Escoger Detalle"
, "Filtraci)on"
, "Iluminaci)on"
, "Oscuridad"
, "Agua"
, "VSync"
, "Stereo"
, "Objetos Simples"
// sound options
, "Fijar Volumen"
, "Reverberation"
, "Subtitles"
, "Language"
// controls options
, "Ajustar Controles"
, "Teclado"
, "Gamepad"
, "Vibraci)on"
, "Retargeting"
, "Multi-objetivo"
// controls
, "Izquierda", "Derecha", "Correr", "Atr)as", "Saltar", "Andar", "Acci)on", "Sacar Armas", "Mirar", "Duck", "Dash", "Rodar", "Inventario", "Start"
// keys
, "NONE", "LEFT", "RIGHT", "UP", "DOWN", "SPACE", "TAB", "ENTER", "ESCAPE", "SHIFT", "CTRL", "ALT"
, "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"
, "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
// gamepad
, "NONE", "A", "B", "X", "Y", "L BUMPER", "R BUMPER", "SELECT", "START", "L STICK", "R STICK", "L TRIGGER", "R TRIGGER", "D-LEFT", "D-RIGHT", "D-UP", "D-DOWN"
// inventory items
, "Unknown"
, "Explosivo"
, "Pistolas"
, "Escopeta"
, "Magnums"
, "Uzis"
, "Cargadores de Pistola"
, "Cartuchos de Escopeta"
, "Cargadores de Magnum"
, "Cargadores de Uzi"
, "Botiqu)in Peque(~no"
, "Botiqu)in Grande"
, "Lingote de Plomo"
, "Scion"
// keys
, "Llave"
, "Llave de Plata"
, "Llave Oxidada"
, "Llave de Oro"
, "Llave de Zafiro"
, "Llave de Neptuno"
, "Llave de Atlas"
, "Llave de Damocles"
, "Llave de Thor"
, "Llave Decorada"
// puzzles
, "Puzle"
, "Idolo de Oro"
, "Lingote de Oror"
, "Rueda Dentada"
, "Fusible"
, "Ankh"
, "Ojo de Horus"
, "Sello de Anubis"
, "Escarabajo"
, "Llave de la Pir)amide"
// TR1 subtitles
/* 26 */ , "Bienvenido a mi casa."
/* 27 */ , "Utiliza la tecla de control para llegar a@la habitaci)on de la m)usica."
/* 28 */ , "Vale. Hagamos unas cuantas acrobacias.@Presiona la tecla de salto."
/* 29 */ , "Ahora presi)onalo de nuevo y presiona tambi)en@la tecla de control para saltar hacia ese lado."
/* 30 */ , "Ah, el hall principal.@Perdona por las cajas, estoy guardando algunas cosas@y los transportistas no han llegado."
/* 31 */ , "Corre hasta una caja y, mientras mantienes presionado la tecla Adelante@presiona la tecla Acci)on para saltar encima de la caja"
/* 32 */ , "Esto era la sala de bailes,@pero la he convertido en mi gimnasio particular.@\xBFQu)e te parece? Bien, hagamos un poco de ejercicio."
/* 33 */ , "En realidad no voy corriendo a todos lados.@Cuando quiero tener cuidado, ando.@Mant)en pulsado la tecla andar y anda hasta la linea blanca."
/* 34 */ , "Con la tecla Andar presionada no me caer)e por mucho que lo intentes.@Vamos, int)entalo."
/* 35 */ , "Si quieres mirar alrededor, presiona la tecla mirar y mantenla asi.@A continuaci)on presiona la direcci)on en la que quieras mirar."
/* 36 */ , "Si un salto es demasiado largo, puedo agarrarme@al borde salv)andome de una desagradable caida.@Camina hasta el borde que tiene la linea blanca,@hasta que ya no pueda avanzar.@Ahora presiona Saltar y justo a continuaci)on Adelante,@mientras estoy en el aire presiona Acci)on."
/* 37 */ , "Pulsa Adelante y subir)e a pulso."
/* 38 */ , "Si hago un salto en carrera tambi)en puedo hacer@ese tipo de saltos. No hay problema."
/* 39 */ , "Camina hasta el borde que tiene la linea blanca,@hasta que ya no pueda avanzar.@Ahora dame la vuelta para que tenga espacio.@Presiona Adelante y casi inmediatamente presiona@y mant)en presionada la tecla Saltar.@No voy a saltar hasta el )ultimo momento."
/* 40 */ , "Vale. Esto es m)as dificil.@Salta en carrera igual que antes pero, mientras estoy en el aire@presiona y mant)en presionado la tecla para que me agarre al borde."
/* 41 */ , "Bonito."
/* 42 */ , "Intenta subir aqui.@Presiona Adelante y mant)en presionado Acci)on."
/* 43 */ , "No puedo escalar porque el espacio es muy peque(~no.@Pero si presionas Derecha, oscilar)e a un lado@hasta que haya espacio, presiona entonces Adelante."
/* 44 */ , "\xA1\xA1Muy bien!!@Si la caida es muy grande y no quiero da(~narme@puedo descolgarme con cuidado."
/* 45 */ , "Pulsa Hacia atr)as y saltar)e.@Presiona a continuaci)on la tecla Acci)on@y me agarrar)e al borde."
/* 46 */ , "Deja que siga."
/* 47 */ , "Vamos a nadar un poco."
/* 48 */ , "La tecla de salto y la de control sirven@para dirigirme mientras buceo."
/* 49 */ , "\xA1""Ah! \xA1""Aire!@S)olo tienes que usar Adelante, Izquierda y@Derecha para moverse por la superficie.@Presiona Saltar para sumergirte y darte otro ba(~no.@O vete al borde y presiona Acci)on para salir."
/* 50 */ , "Bien. Mejor me quito la ropa mojada."
/* 51 */ , "\xA1""Di patata!"
/* 52 */ , "No es nada personal."
/* 53 */ , "Todavia me provocas dolor de cabeza.@Y ese dolor hace que se me ocurran ideas divertidas.@\xA1""Como dispararte hasta mandarte al infierno!"
/* 54 */ , "No te burlar)as de mi y mi progenie tan f)acilmente, Lara."
/* 55 */ , "Un poco tarde para la entrega de premios <20>no?@A tiempo, lo que cuenta es la recogida."
/* 56 */ , "\xBFMe disparas a mi?@\xBFMe disparas a mi, <20>eh?@\xA1No hay nadie m)as, asi que debes estar dispar)andome a mi!"
// TR1 levels
, "Casa de Lara"
, "Cuevas"
, "Ciudad de Vilcabamba"
, "El Valle Perdido"
, "Tumba de Qualopec"
, "Abad)ia de San Francis"
, "El Coliseo"
, "Palacio de Midas"
, "La Cisterna"
, "Tumba de Tihocan"
, "Ciudad de Khamoon"
, "Obelisco de Khamoon"
, "Santuario del Scion"
, "Minas de Natla"
, "Atl)antida"
, "La Gran Pir)amide"
, "Regreso a Egipto"
, "Templo de la Gata"
, "Fortaleza Atlante"
, "La Colmena"
// TR2 levels
, "Lara's Home"
, "The Great Wall"
, "Venice"
, "Bartoli's Hideout"
, "Opera House"
, "Offshore Rig"
, "Diving Area"
, "40 Fathoms"
, "Wreck of the Maria Doria"
, "Living Quarters"
, "The Deck"
, "Tibetan Foothills"
, "Barkhang Monastery"
, "Catacombs of the Talion"
, "Ice Palace"
, "Temple of Xian"
, "Floating Islands"
, "The Dragon's Lair"
, "Home Sweet Home"
// TR3 levels
, "Lara's House"
, "Jungle"
, "Temple Ruins"
, "The River Ganges"
, "Caves Of Kaliya"
, "Coastal Village"
, "Crash Site"
, "Madubu Gorge"
, "Temple Of Puna"
, "Thames Wharf"
, "Aldwych"
, "Lud's Gate"
, "City"
, "Nevada Desert"
, "High Security Compound"
, "Area 51"
, "Antarctica"
, "RX-Tech Mines"
, "Lost City Of Tinnos"
, "Meteorite Cavern"
, "All Hallows"
};
char **STR = NULL;
enum LangID {
@@ -951,7 +1179,7 @@ void ensureLanguage(LangID lang) {
switch (lang) {
case LANG_FR : STR = (char**)STR_FR; break;
case LANG_DE : STR = (char**)STR_DE; break;
case LANG_ES : STR = (char**)STR_EN; break;
case LANG_ES : STR = (char**)STR_ES; break;
case LANG_IT : STR = (char**)STR_EN; break;
case LANG_RU : STR = (char**)STR_EN; break;
case LANG_JA : STR = (char**)STR_EN; break;

View File

@@ -357,7 +357,7 @@ struct MeshBuilder {
TR::Room::Data::Vertex &v = d.vertices[f.vertexIndex];
TR::TextureInfo &sprite = level->spriteTextures[f.texture];
addSprite(indices, vertices, iCount, vCount, vStartRoom, v.pos.x, v.pos.y, v.pos.z, sprite, v.color, v.color);
addSprite(indices, vertices, iCount, vCount, vStartRoom, v.pos.x, v.pos.y, v.pos.z, false, sprite, v.color, v.color);
}
range.sprites.iCount = iCount - range.sprites.iStart;
#else
@@ -1155,7 +1155,7 @@ struct MeshBuilder {
return short4(int16(coord.x), int16(coord.y), int16(coord.z), 0);
}
void addSprite(Index *indices, Vertex *vertices, int &iCount, int &vCount, int vStart, int16 x, int16 y, int16 z, const TR::TextureInfo &sprite, const Color32 &tColor, const Color32 &bColor, bool expand = false) {
void addSprite(Index *indices, Vertex *vertices, int &iCount, int &vCount, int vStart, int16 x, int16 y, int16 z, bool invert, const TR::TextureInfo &sprite, const Color32 &tColor, const Color32 &bColor, bool expand = false) {
addQuad(indices, iCount, vCount, vStart, NULL, NULL, false, false);
Vertex *quad = &vertices[vCount];
@@ -1163,10 +1163,17 @@ struct MeshBuilder {
int16 x0, y0, x1, y1;
if (expand) {
if (invert) {
x0 = x - int16(sprite.l);
y0 = y - int16(sprite.t);
x1 = x - int16(sprite.r);
y1 = y - int16(sprite.b);
} else {
x0 = x + int16(sprite.l);
y0 = y + int16(sprite.t);
x1 = x + int16(sprite.r);
y1 = y + int16(sprite.b);
}
} else {
x0 = x1 = x;
y0 = y1 = y;
@@ -1385,7 +1392,7 @@ struct MeshBuilder {
}
}
void addDynSprite(int spriteIndex, const short3 &center, const Color32 &tColor, const Color32 &bColor, bool expand = false) {
void addDynSprite(int spriteIndex, const short3 &center, bool invert, const Color32 &tColor, const Color32 &bColor, bool expand = false) {
dynCheck(1 * 6);
TR::TextureInfo &sprite = level->spriteTextures[spriteIndex];
@@ -1404,7 +1411,7 @@ struct MeshBuilder {
}
#endif
addSprite(dynIndices, dynVertices, dynICount, dynVCount, 0, center.x, center.y, center.z, sprite, tColor, bColor, expand);
addSprite(dynIndices, dynVertices, dynICount, dynVCount, 0, center.x, center.y, center.z, invert, sprite, tColor, bColor, expand);
}
void renderRoomSprites(int roomIndex) {

View File

@@ -399,7 +399,7 @@ struct TrapLavaEmitter : Controller {
vec3 p = part.pos - Core::viewPos.xyz();
mesh->addDynSprite(level->spriteSequences[-(spriteIndex + 1)].sStart + part.frame, short3(int16(p.x), int16(p.y), int16(p.z)), color, color);
mesh->addDynSprite(level->spriteSequences[-(spriteIndex + 1)].sStart + part.frame, short3(int16(p.x), int16(p.y), int16(p.z)), false, color, color);
}
}
};

View File

@@ -196,8 +196,10 @@ namespace UI {
}
while (char c = *text++) {
if (c == '\xBF') c = '?';
if (c == '\xA1') c = '!';
bool invert = false;
if (c == '\xBF') { c = '?'; invert = true; }
if (c == '\xA1') { c = '!'; invert = true; }
if (c == '@') {
x = int(pos.x) + getLeftOffset(text, align, int(width));
@@ -244,18 +246,19 @@ namespace UI {
dx = (char_width[idx] - char_width[frame]) / 2 - 1;
if (idx < 26) { // if next char is uppercase
dy -= 4;
// dx += (c == '~') ? 1 : 2;
}
//if (c == ')') {
// dx += 2;
//}
}
if (invert) {
dx += char_width[frame];
dy -= 10;
}
if (c == '|') {
mesh->addDynSprite(level->spriteSequences[seq].sStart + charRemap(','), short3(x + 3, y + 1, 0), tColor, bColor, true);
mesh->addDynSprite(level->spriteSequences[seq].sStart + charRemap(','), short3(x + 3, y + 1, 0), invert, tColor, bColor, true);
}
mesh->addDynSprite(level->spriteSequences[seq].sStart + frame, short3(x + dx, y + dy, 0), tColor, bColor, true);
mesh->addDynSprite(level->spriteSequences[seq].sStart + frame, short3(x + dx, y + dy, 0), invert, tColor, bColor, true);
if (c != '~' && c != '$' && c != '(' && c != ')') { // umlauts
x += char_width[frame] + 1;
@@ -276,7 +279,7 @@ namespace UI {
if (specChar >= level->spriteSequences[seq].sCount)
return;
mesh->addDynSprite(level->spriteSequences[seq].sStart + specChar, short3(int16(pos.x), int16(pos.y), 0), COLOR_WHITE, COLOR_WHITE, true);
mesh->addDynSprite(level->spriteSequences[seq].sStart + specChar, short3(int16(pos.x), int16(pos.y), 0), false, COLOR_WHITE, COLOR_WHITE, true);
}
#undef MAX_CHARS