mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-11 15:45:05 +02:00
add Spanish translation (text only)
This commit is contained in:
@@ -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) {
|
||||
|
234
src/lang.h
234
src/lang.h
@@ -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;
|
||||
|
23
src/mesh.h
23
src/mesh.h
@@ -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) {
|
||||
x0 = x + int16(sprite.l);
|
||||
y0 = y + int16(sprite.t);
|
||||
x1 = x + int16(sprite.r);
|
||||
y1 = y + int16(sprite.b);
|
||||
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 ¢er, const Color32 &tColor, const Color32 &bColor, bool expand = false) {
|
||||
void addDynSprite(int spriteIndex, const short3 ¢er, 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) {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
21
src/ui.h
21
src/ui.h
@@ -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
|
||||
|
Reference in New Issue
Block a user