1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-10 15:14:28 +02:00

add subtitles for cutscenes (English, German, Russian); fix translations

This commit is contained in:
XProger
2019-02-24 03:53:36 +03:00
parent 9f3ea54a74
commit 82dacfb022
2 changed files with 309 additions and 219 deletions

View File

@@ -395,53 +395,54 @@ const char *STR_EN[] = { ""
, "Pyramid Key"
// TR1 subtitles
/* 22 */ ,
"\0Back again?"
"And you - for a grand re-opening I assume."
"Evolution's in a rut - natural selection at an all time low..."
"shipping out fresh meat will incite territorial rages again"
" - will strengthen and advance us..."
"Even create new breeds."
"Kind of like evolution on steroids then."
"A kick in the pants...those runts Qualopec and Tihocan had no idea"
" - the cataclysm of Atlantis struck a race of langouring wimps..."
"plummeted them to the very basics of survival again..."
"It shouldn't happen like that."
"Or like this."
"Hatching commences in 20 seconds."
"Too late for abortions now!"
"Not without the heart of the operation!"
"Noooo!"
"TEN"
"FIVE..."
"4...3...2..."
"ONE..."
"[04000]Back again?"
"[05500]And you - for a grand re-opening I assume."
"[09500]Evolution's in a rut - natural selection at an all time low..."
"[13500]shipping out fresh meat will incite territorial rages again"
"[17500] - will strengthen and advance us..."
"[20500]Even create new breeds."
"[22500]Kind of like evolution on steroids then."
"[24500]A kick in the pants...@those runts Qualopec and Tihocan had no idea"
"[29500] - the cataclysm of Atlantis struck a race of langouring wimps..."
"[33500]plummeted them to the very basics of survival again..."
"[37000]It shouldn't happen like that."
"[39000]Or like this."
"[40000]Hatching commences in 20 seconds."
"[43000]Too late for abortions now!"
"[45000]Not without the heart of the operation!"
"[47000]Noooo!"
"[50000]TEN"
"[54000]FIVE..."
"[55500]4...3...2..."
"[60000]ONE..."
/* 23 */ ,
"\0Well, you have my total attention now"
"I'm not quite sure if I've got yours though"
"hello"
"I'll heel an' hide ye to a barn door yit"
"Of course"
"Ye and that drivelin' piece of the Scion."
"Ye want to keep it so bad, I'll harness it right up y..."
"Wait... we're talking about the artifact here?"
"Damn straight we are ... right up y ..."
"Hold on - I'm sorry"
"this piece you say - where's the rest?"
"Ms Natla put Pierre Dupont on that trail."
"And where is that?"
"Hah. Ye ain't fast enough fer him."
"So you think all this talking is just holding me up then?"
"I don't know where his little jackrabbit-frog-legs are runnin' him to"
"You'll have to ask Ms. Natla"
"Thank you. I will."
"[00001]Well, you have my total attention now"
"[02500]I'm not quite sure if I've got yours though"
"[05000]hello?"
"[06000]I'll heel an' hide ye to a barn door yit"
"[09000]Of course"
"[10000]Ye and that drivelin' piece of the Scion."
"[13000]Ye want to keep it so bad, I'll harness it right up y..."
"[17000]Wait... we're talking about the artifact here?"
"[20000]Damn straight we are ... right up y ..."
"[22000]Hold on - I'm sorry"
"[24000]this piece you say - where's the rest?"
"[26500]Ms Natla put Pierre Dupont on that trail."
"[29500]And where is that?"
"[30500]Hah. Ye ain't fast enough fer him."
"[34000]So you think all this talking is just holding me up?"
"[37000]I don't know where his little jackrabbit-frog-legs are runnin' him to"
"[42000]You'll have to ask Ms. Natla"
"[46000]"
"[51000]Thank you. I will."
/* 24 */ , ""
/* 25 */ ,
"\0Here lies Tihocan"
"...one of the two just rulers of Atlantis..."
"Who even after the curse of the continent..."
"...had tried to keep rule here in these barren other-lands..."
"He died without child and his knowledge has no heritage..."
"Look over us kindly, Tihocan."
"[03500]Here lies Tihocan"
"[05000]...one of the two just rulers of Atlantis..."
"[10000]Who even after the curse of the continent..."
"[13000]...had tried to keep rule here in these barren other-lands..."
"[19000]He died without child and his knowledge has no heritage..."
"[25500]Look over us kindly, Tihocan."
/* 26 */ , "Welcome to my home!@I'll take you on a guided tour."
/* 27 */ , "Use the directional buttons to go into the music room."
/* 28 */ , "OK. Let's do some tumbling.@Press the jump button."
@@ -890,61 +891,54 @@ const char *STR_DE[] = { "" // by Oktopaps
, "Skarab~aus"
, "Schl~ussel der Pyramide"
// TR1 subtitles
#if 0
/* 22 */ ,
"\0Na, wieder da?"
"Sie auch. Zur feierlichen Wiederer~offnung, nehme ich an."
"Die Evolution steckt in der Sackgasse. Kaum noch nat~urliche Auslese."
"Die Ausbreitung neuer, frischer Wesen wird neue Gebietsk~ampfe anregen,"
"uns st~arken und voranbringen,"
"sogar neue Rassen erschaffen."
"Eine Art gedopte Evolution also."
"Ja, ein Tritt in den Hintern. Die albernen Wichte Qualopec und Tihocan haben ja keine Ahnung."
"Der Untergang von Atlantis hat eine Rasse tr~ager Schw~achlinge getroffen"
"und sie zu den Urspr~ungen des ~Uberlebens zur~uckgeworfen."
"Dies ist, was die Welt braucht."
"Nicht auf diese Art."
"Ausschl~upfen beginnt in 15 Sekunden."
"Zu sp~at f~ur eine Abtreibung!"
"Nicht ohne das Herz der Operation!"
"Nein!"
"Ahhh!"
"10..."
"5..."
""
""
"[04000]Na, wieder da?"
"[05500]Sie auch. Zur feierlichen Wiederer~offnung, nehme ich an."
"[09000]Die Evolution steckt in der Sackgasse.@Kaum noch nat~urliche Auslese."
"[13500]Die Ausbreitung neuer, frischer Wesen@wird neue Gebietsk~ampfe anregen,"
"[18500]uns st~arken und voranbringen,"
"[20500]sogar neue Rassen erschaffen."
"[22500]Eine Art gedopte Evolution also."
"[24500]Ja, ein Tritt in den Hintern. Die albernen Wichte@Qualopec und Tihocan haben ja keine Ahnung."
"[29500]Der Untergang von Atlantis hat eine Rasse@tr~ager Schw~achlinge getroffen"
"[33500]und sie zu den Urspr~ungen des ~Uberlebens zur~uckgeworfen."
"[36000]Dies ist, was die Welt braucht."
"[38500]Nicht auf diese Art."
"[40000]Ausschl~upfen beginnt in 15 Sekunden."
"[43000]Zu sp~at f~ur eine Abtreibung!"
"[45000]Nicht ohne das Herz der Operation!"
"[47000]Nein!"
"[49500]10..."
"[53500]5..."
"[55000]"
/* 23 */ ,
"\0Tja, jetzt haben Sie meine volle Aufmerksamkeit,"
"aber ob ich auch Ihre habe?"
"Hallo?"
"Wart's ab. Wenn ich dich in die Finger kriege."
"Nat~urlich."
"Du und das d~amliche St~uck vom Scion."
"Wenn du's unbedingt behalten willst, stopf ich's dir in deinen verdammten..."
"Moment. Sprechen wir gerade ~uber das Artefakt?"
"Darauf kannst du Gift nehmen."
"Moment. Tut mir leid."
"Sie sagten St~uck. Wo ist dann der Rest?"
"Miss Natla hat Pierre Dupont darauf angesetzt."
"Und wo sucht er danach?"
"Ha! Den erwischst du nie!"
"Sie meinen also, das Gerede hier h~alt mich nur auf?"
"~Ah, keine Ahnung, wo seine krummen Ganovenbeine ihn hingebracht haben."
"Da muss... m~ussen Sie Miss Natla fragen."
"Danke! Das werde ich tun."
"[00001]Tja, jetzt haben Sie meine volle Aufmerksamkeit,"
"[02500]aber ob ich auch Ihre habe?"
"[05000]Hallo?"
"[06000]Wart's ab. Wenn ich dich in die Finger kriege."
"[09000]Nat~urlich."
"[10000]Du und das d~amliche St~uck vom Scion."
"[13000]Wenn du's unbedingt behalten willst,@stopf ich's dir in deinen verdammten..."
"[17000]Moment. Sprechen wir gerade ~uber das Artefakt?"
"[20000]Darauf kannst du Gift nehmen."
"[22000]Moment. Tut mir leid."
"[24000]Sie sagten St~uck. Wo ist dann der Rest?"
"[26500]Miss Natla hat Pierre Dupont darauf angesetzt."
"[29500]Und wo sucht er danach?"
"[30500]Ha! Den erwischst du nie!"
"[34000]Sie meinen also, das Gerede hier h~alt mich nur auf?"
"[37000]~Ah, keine Ahnung, wo seine krummen@Ganovenbeine ihn hingebracht haben."
"[42000]Da muss... m~ussen Sie Miss Natla fragen."
"[46000]"
"[51000]Danke! Das werde ich tun."
/* 24 */ , ""
/* 25 */ ,
"\0Hier ruht Tihocan,"
"einer der zwei gerechten Herrscher von Atlantis,"
"die selbst nach der Heimsuchung des Erdteils"
"trachteten, in diesem kargen, fremden Land gut zu regieren."
"Er starb ohne Kind und sein Wissen wurde nicht weitergegeben."
"Sei gn~adig mit uns, Tihocan."
#endif
/* 22 */ , ""
/* 23 */ , ""
/* 24 */ , ""
/* 25 */ , ""
"[03500]Hier ruht Tihocan,"
"[06000]einer der zwei gerechten Herrscher von Atlantis,"
"[10000]die selbst nach der Heimsuchung des Erdteils"
"[13000]trachteten, in diesem kargen, fremden Land gut zu regieren."
"[18000]Er starb ohne Kind und sein Wissen wurde nicht weitergegeben."
"[25500]Sei gn~adig mit uns, Tihocan."
/* 26 */ , "Willkommen bei mir daheim!@Lass uns einen kleinen Rundgang machen."
/* 27 */ , "Benutz das Steuerkreuz, um ins Musikzimmer zu gehen."
/* 28 */ , "OK, dann lass uns ein bisschen herumtoben!@Dr~uck die Sprungtaste."
@@ -1069,7 +1063,7 @@ const char *STR_ES[] = { ""
, "Mando 2"
, "Mando 3"
, "Mando 4"
, "Not Ready"
, "No est)a listo"
, "Jugador 1"
, "Jugador 2"
, "Pulsa Cualquier Tecla"
@@ -1086,15 +1080,15 @@ const char *STR_ES[] = { ""
, "Juego"
, "Mapa"
, "Br)ujula"
, "Estadistica"
, "Casa De Lara"
, "Estadisticas"
, "Hogar de Lara"
, "Nivel de Detalle"
, "Sonido"
, "Controles"
, "Gamma"
// passport menu
, "Cargar Juego"
, "Juego Nuevo"
, "Cargar Partida"
, "Nueva Partida"
, "Reiniciar Nivel"
, "Regresar a los T)itulos"
, "Salir del Juego"
@@ -1156,7 +1150,7 @@ const char *STR_ES[] = { ""
, "Llave de Thor"
, "Llave Decorada"
// puzzles
, "Puzle"
, "Puzzle"
, "Idolo de Oro"
, "Lingote de Oro"
, "Rueda Dentada"
@@ -1196,14 +1190,14 @@ const char *STR_ES[] = { ""
/* 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."
/* 51 */ , "\xA1""Di Queso!"
/* 52 */ , "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 \xBFno?@A tiempo, lo que cuenta es la recogida."
/* 56 */ , "\xBFMe disparas a mi?@\xBFMe disparas a mi, \xBF""eh?@\xA1No hay nadie m)as, asi que debes estar dispar)andome a mi!"
// TR1 levels
, "Casa de Lara"
, "Hogar de Lara"
, "Cuevas"
, "Ciudad de Vilcabamba"
, "El Valle Perdido"
@@ -1220,51 +1214,51 @@ const char *STR_ES[] = { ""
, "Atl)antida"
, "La Gran Pir)amide"
, "Regreso a Egipto"
, "Templo de la Gata"
, "Templo del Gato"
, "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"
, "Hogar de Lara"
, "La Gran Muralla"
, "Venecia"
, "Escondite de Bartoli"
, "Casa de la Opera"
, "Plataforma Afuera De la Costa"
, "Zona de Buceo"
, "40 Brazas"
, "Naufragio del Maria Doria"
, "Viviendas"
, "La Cubierta"
, "Estribaciones Tibetanas"
, "Monasterio de Barkhang"
, "Catacumbas del Talion"
, "Palacio de Hielo"
, "Templo de Xian"
, "Islas Flotantes"
, "La Guarida del Dragon"
, "Hogar Dulce Hogar"
// TR3 levels
, "Lara's House"
, "Jungle"
, "Temple Ruins"
, "The River Ganges"
, "Caves Of Kaliya"
, "Coastal Village"
, "Crash Site"
, "Hogar de Lara"
, "Jungla"
, "Ruinas del templo"
, "El Rio Ganges"
, "Cuevas de Kaliya"
, "Villa Costera"
, "Sitio de Choque"
, "Madubu Gorge"
, "Temple Of Puna"
, "Thames Wharf"
, "Templo de Puna"
, "Muelle Thames"
, "Aldwych"
, "Lud's Gate"
, "City"
, "Nevada Desert"
, "High Security Compound"
, "La Entrada de Lud"
, "Ciudad"
, "Desierto de Nevada"
, "Compuesto de Alta Seguridad"
, "Area 51"
, "Antarctica"
, "RX-Tech Mines"
, "Lost City Of Tinnos"
, "Meteorite Cavern"
, "All Hallows"
, "Minas RX-Tech"
, "La Ciudad Perdida De Tinnos"
, "Caverna del Meteorito"
, "Todos Santos"
};
const char *STR_IT[] = { ""
@@ -1655,68 +1649,68 @@ const char *STR_PL[] = { "" // Nickelony & Dustie
/* 55 */ , "A leetle late for the prize giving - non?@Still, it is the taking-part wheech counts."
/* 56 */ , "You firin' at me?@You firin' at me, huh?@Ain't nobody else, so you must be firin' at me!"
// TR1 levels
, "Lara's Home"
, "Caves"
, "City of Vilcabamba"
, "Lost Valley"
, "Tomb of Qualopec"
, "St. Francis' Folly"
, "Colosseum"
, "Palace Midas"
, "The Cistern"
, "Tomb of Tihocan"
, "City of Khamoon"
, "Obelisk of Khamoon"
, "Sanctuary of the Scion"
, "Natla's Mines"
, "Atlantis"
, "The Great Pyramid"
, "Return to Egypt"
, "Temple of the Cat"
, "Atlantean Stronghold"
, "The Hive"
, "Posiad/lo)s)c Lary"
, "G)orskie jaskinie"
, "Miasto Vilcabamba"
, "Zaginiona dolina"
, "Grobowiec Qualopeca"
, ")Swi|atynia )sw. Franciszka"
, "Koloseum"
, "Pa/lac Midasa"
, "Cysterna"
, "Grobowiec Tihocana"
, "Miasto Khamoon"
, "Obelisk Khamoon"
, "Sanktuarium Dzieci|ecia"
, "Kopalnie Natli"
, "Atlantyda"
, "Wielka piramida"
, "Powr)ot do Egiptu"
, ")Swi|atynia kota"
, "Atlantydzka twierdza"
, "R)oj"
// 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"
, "Posiad/lo)s)c Lary"
, "Wielki Mur"
, "Wenecja"
, "Kryj)owka Bartoliego"
, "Opera"
, "Platforma na morzu"
, "Strefa nurkowania"
, "40 s|a*zni"
, "Wrak Marii Dorii"
, "Kwatery mieszkalne"
, "Pok/lad"
, "Pog)orza Tybetu"
, "Klasztor Barkhang"
, "Katakumby Talionu"
, "Lodowy pa/lac"
, ")Swi|atynia Xian"
, "Lewituj|ace wyspy"
, "Gniazdo smoka"
, "Nie ma to jak w domu"
// 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"
, "Posiad/lo)s)c Lary"
, "D*zungla"
, "Ruiny )swi|atyni"
, "Rzeka Ganges"
, "Jaskinie bogini Kaliya"
, "Nadbrze*zna wioska"
, "Miejsce katastrofy"
, "W|aw)oz Madubu"
, ")Swi|atynia Puny"
, "Zatoka Tamizy"
, "Aldwych"
, "Lud's Gate"
, "City"
, "Nevada Desert"
, "High Security Compound"
, "Area 51"
, "Antarctica"
, "RX-Tech Mines"
, "Lost City Of Tinnos"
, "Meteorite Cavern"
, "All Hallows"
, "Dzielnica City"
, "Pustynia w Nevadzie"
, "Strefa Wysokiego Nadzoru"
, "Strefa 51"
, "Antarktyda"
, "Kopalnie RX-Tech"
, "Zaginione miasto Tinnos"
, "Grota meteorytu"
, "Wszyscy )Swi|eci"
};
const char *STR_RU[] = { ""
@@ -1821,7 +1815,7 @@ const char *STR_RU[] = { ""
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
// keys
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B> <20><><EFBFBD><EFBFBD>"
@@ -1845,10 +1839,55 @@ const char *STR_RU[] = { ""
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
// TR1 subtitles
/* 22 */ , ""
/* 23 */ , ""
/* 22 */ ,
"[04500]<5D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"
"[06000]<5D> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[09500]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[13500]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[17500]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>."
"[20500]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!"
"[22500]<5D><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[24500]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>...@<40><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"
"[30000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,"
"[34000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
"[37000]<5D><>~<7E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>."
"[39000]<5D> <20><> <20><><EFBFBD>!"
"[40000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 15 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[43000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>!"
"[45000]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[47500]<5D><><EFBFBD><EFBFBD><EFBFBD>!"
"[50000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
"[54000]<5D><><EFBFBD><EFBFBD>..."
"[55500]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><><EFBFBD>... <20><><EFBFBD>..."
"[60000]<5D><><EFBFBD><EFBFBD>..."
/* 23 */ ,
"[00001]<5D><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
"[03000]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>."
"[05500]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[06500]<5D><><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD>!"
"[09000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
"[10000]<5D><>, <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>{<7B> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"
"[13500]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>? <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>..."
"[17000]<5D><><EFBFBD><EFBFBD>! <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[19500]<5D>~<7E><><EFBFBD> <20><>... <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>..."
"[22000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[24000]<5D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[26500]<5D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[29500]<5D> <20><><EFBFBD> <20><> <20><>?"
"[30500]<5D><>! <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[34000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"
"[37000]<5D> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>."
"[42500]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>."
"[46000]"
"[51000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
/* 24 */ , ""
/* 25 */ , ""
/* 25 */ ,
"[03500]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
"[06000]<5D><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
"[10000]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>..."
"[16000]<5D> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[19000]<5D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
"[26000]<5D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
/* 26 */ , "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>{<7B>.@<40> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
/* 27 */ , "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,@<40><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
/* 28 */ , "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>."
@@ -1893,7 +1932,7 @@ const char *STR_RU[] = { ""
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"

View File

@@ -24,6 +24,10 @@ namespace UI {
float helpTipTime;
float hintTime;
float subsTime;
int subsPartTime;
int subsPartLength;
int subsPos;
int subsLength;
StringID hintStr;
StringID subsStr;
@@ -158,6 +162,7 @@ namespace UI {
int x = 0;
while (char c = *text++) {
if (c == '[') break;
c = remapCyrillic(c);
if (c == '\xBF') c = '?';
if (c == '\xA1') c = '!';
@@ -179,6 +184,7 @@ namespace UI {
int x = 0, w = 0, h = 16;
while (char c = *text++) {
if (c == '[') break;
c = remapCyrillic(c);
if (c == '\xBF') c = '?';
if (c == '\xA1') c = '!';
@@ -285,6 +291,8 @@ namespace UI {
}
while (char c = *text++) {
if (c == '[') break; // subs part end (timing tags)
bool invertX = false, invertY = false;
int dx = 0, dy = 0;
@@ -427,13 +435,67 @@ namespace UI {
pickups.clear();
}
void showHint(StringID str, float time) {
hintStr = str;
hintTime = time;
}
void subsGetNextPart() {
const char *subs = STR[subsStr];
subsPos += subsPartLength;
if (subsPos >= subsLength) {
subsTime = 0.0f;
subsStr = STR_EMPTY;
}
for (int i = subsPos; i < subsLength; i++) {
if (subs[i] == '[') {
for (int j = i; j < subsLength; j++) {
if (subs[j] == ']') {
char buf[32];
memcpy(buf, subs + i + 1, j - i - 1);
buf[j - i - 1] = 0;
int time = atoi(buf);
subsTime += (time - subsPartTime) / 1000.0f;
subsPartTime = time;
subsPartLength = j - subsPos + 1;
return;
}
}
}
}
subsPartLength = subsLength - subsPos;
subsTime = subsPartLength * SUBTITLES_SPEED;
}
void showSubs(StringID str) {
if (str == STR_EMPTY || !Core::settings.audio.subtitles)
return;
subsStr = str;
subsLength = strlen(STR[str]);
subsPos = 0;
subsTime = 0.0f;
subsPartTime = 0;
subsPartLength = 0;
subsGetNextPart();
}
void update() {
if (hintTime > 0.0f) {
hintTime = max(0.0f, hintTime - Core::deltaTime);
}
if (subsTime > 0.0f) {
subsTime = max(0.0f, subsTime - Core::deltaTime);
subsTime -= Core::deltaTime;
if (subsTime <= 0.0f) {
subsGetNextPart();
}
}
if (Input::down[ikH]) {
@@ -520,18 +582,6 @@ namespace UI {
mesh->addDynBar(barTile[type], pos, vec2(size.x * value, size.y), fgColor, fgColor2);
}
void showHint(StringID str, float time) {
hintStr = str;
hintTime = time;
}
void showSubs(StringID str) {
if (str == STR_EMPTY || !Core::settings.audio.subtitles)
return;
subsStr = str;
subsTime = strlen(STR[str]) * SUBTITLES_SPEED;
}
void renderHelp() {
#ifdef _NAPI_SOCKET
textOut(vec2(16, height - 32), command, aLeft, width - 32, 255, UI::SHADE_GRAY);
@@ -565,8 +615,9 @@ namespace UI {
float eye = UI::width * Core::eye * 0.02f;
if (subsTime > 0.0f) {
textOut(vec2(16 - eye, height - 48) + vec2(1, 1), STR[subsStr], aCenterV, width - 32, 255, UI::SHADE_GRAY, true);
textOut(vec2(16 - eye, height - 48), STR[subsStr], aCenterV, width - 32, 255, UI::SHADE_GRAY);
const char *subs = STR[subsStr] + subsPos;
textOut(vec2(16 - eye, height - 48) + vec2(1, 1), subs, aCenterV, width - 32, 255, UI::SHADE_GRAY, true);
textOut(vec2(16 - eye, height - 48), subs, aCenterV, width - 32, 255, UI::SHADE_GRAY);
}
}