diff --git a/src/lang.h b/src/lang.h index 8846e58..557ac0d 100644 --- a/src/lang.h +++ b/src/lang.h @@ -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[] = { "" , "Маленькая аптечка" , "Большая аптечка" , "Свинцовы{и слиток" - , "Скион" + , "Сцион" // keys , "Ключ" , "Серебряны{и ключ" @@ -1845,10 +1839,55 @@ const char *STR_RU[] = { "" , "Скарабе{и" , "Ключ пирамиды" // TR1 subtitles -/* 22 */ , "" -/* 23 */ , "" +/* 22 */ , + "[04500]С возвращением!" + "[06000]И тебя, пришла на торжественное открытие?" + "[09500]Эволюция в тупике, естественны{и отбор нетороплив." + "[13500]Появление свежего мяса пробудит территориальные распри." + "[17500]Сделает нас сильнее и лучше." + "[20500]Даже создаст новые виды!" + "[22500]Что-то вроде эволюции на стероидах?" + "[24500]Пинок под зад...@эти отсталые Тихокан и Квалопек не имели и понятия!" + "[30000]Катаклизм Атлантиды скосил расу недоразвитых слабаков," + "[34000]заставил вернуться к самым основам выживания..." + "[37000]Вс~е должно было быть не так." + "[39000]И не так!" + "[40000]Инкубация завершится через 15 секунд." + "[43000]Слишком поздно поворачивать назад!" + "[45000]Ты имеешь ввиду без вреда для операции?" + "[47500]НЕЕЕТ!" + "[50000]ДЕСЯТЬ..." + "[54000]ПЯТЬ..." + "[55500]ЧЕТЫРЕ... ТРИ... ДВА..." + "[60000]ОДИН..." +/* 23 */ , + "[00001]Итак, ты полностью завладел моим вниманием" + "[03000]Не уверена, что я завладела твоим." + "[05500]Привет?" + "[06500]Аэээ... вертел я тебя, знала бы ты где!" + "[09000]Конечно" + "[10000]Да, тебя и этот тупо{и кусок Сциона!" + "[13500]Хочешь знать как? Я засуну тебе его ПРЯМО В..." + "[17000]Стой! Мы говорим об артефакте?" + "[19500]Ч~ерт ДА... ПРЯМО ТЕБЕ В..." + "[22000]Погоди, и-извини." + "[24000]Ты сказал, что это часть, где другие?" + "[26500]Мисс Натла наняла для этого Пьера Дюпона." + "[29500]И где же он?" + "[30500]Ха! Тебе за ним не угнаться." + "[34000]Думаешь, эти слова меня остановят?" + "[37000]Я не знаю куда побежали его резвые лягушачьи лапки." + "[42500]Лучше спроси об этом у мисс Натлы." + "[46000]" + "[51000]Спасибо. Спрошу." /* 24 */ , "" -/* 25 */ , "" +/* 25 */ , + "[03500]Здесь покоится Тихокан" + "[06000]один из двух правителе{и Атлантиды..." + "[10000]которы{и, даже после проклятия континента, попытался править здесь..." + "[16000]в этих совсем других землях." + "[19000]Он умер бездетным и его знания так и не обрели наследника." + "[26000]Не суди нас строго, Тихокан." /* 26 */ , "Добро пожаловать ко мне домо{и.@Я проведу небольшую экскурсию." /* 27 */ , "Использу{ите стрелки,@чтобы идти в музыкальную комнату." /* 28 */ , "Хорошо. Теперь немного акробатики.@Нажмите клавишу прыжка." @@ -1893,7 +1932,7 @@ const char *STR_RU[] = { "" , "Гробница Тихокана" , "Храм Камун" , "Обелиск Камун" - , "Святилище Скиона" + , "Святилище Сциона" , "Раскопки Натлы" , "Атлантида" , "Великая Пирамида" diff --git a/src/ui.h b/src/ui.h index 9e8f5be..396e073 100644 --- a/src/ui.h +++ b/src/ui.h @@ -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); } }