This commit is contained in:
Nyako 2024-04-11 23:08:16 +00:00 committed by GitHub
commit b518742c39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
55 changed files with 908 additions and 46 deletions

View File

@ -104,6 +104,7 @@ set(VVV_SRC
src/TerminalScripts.cpp
src/Textbox.cpp
src/Tower.cpp
src/Touch.cpp
src/UtilityClass.cpp
src/WarpClass.cpp
src/XMLUtils.cpp

View File

@ -88,6 +88,9 @@ def zipRepoAssetsTask = tasks.register("zipRepoAssets", Zip) {
from('../../lang') { spec ->
spec.into('lang')
}
from('../../touch') { spec ->
spec.into('graphics')
}
archiveFileName.set('repo.zip')
destinationDirectory.value(layout.buildDirectory.dir("generated/main/assets"))
}

View File

@ -254,6 +254,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="إرجاع تأجيل الضغطة بإطار واحد كما كان الحال في تحديثات اللعبة السابقة" explanation="input delay" max="38*3" max_local="38*3"/>
<string english="Input delay is ON" translation="تأجيل الضغطة يعمل" explanation="" max="38*2" max_local="38*2"/>
<string english="Input delay is OFF" translation="تأجيل الضغطة معطل" explanation="" max="38*2" max_local="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20" max_local="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5" max_local="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20" max_local="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3" max_local="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20" max_local="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3" max_local="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2" max_local="38*2"/>
<string english="accessibility" translation="تسهيل الاستعمال" explanation="menu option"/>
<string english="Accessibility" translation="تسهيل الاستعمال" explanation="title" max="20" max_local="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="تعطيل بعض مؤثرات الشاشة، تفعيل أطوار لإبطاء اللعبة أو للحصانة من الأذى." explanation="" max="38*5" max_local="38*5"/>
@ -441,6 +451,7 @@
<string english="ACTION = Space, Z, or V" translation="زر الفعل = المسافة أو Z أو V" explanation="title screen" max="38*3" max_local="38*3"/>
<string english="[Press {button} to return to editor]" translation="[نضغط {button} للعودة للمحرر]" explanation="`to editor` is sorta redundant" max="40" max_local="40"/>
<string english="- Press {button} to advance text -" translation="- نضغط {button} للتقدم في النص -" explanation="to dismiss a textbox. Expect `ACTION`" max="40" max_local="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40" max_local="40"/>
<string english="Press {button} to continue" translation="نضغط {button} للمواصلة" explanation="Expect `ACTION`" max="34" max_local="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[نضغط {button} لوقف تجميد اللعب العادي]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39" max_local="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[نضغط {button} لتجميد اللعب العادي]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39" max_local="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reactiva el retard en lentrada|dun fotograma que hi havia|en versions anteriors del joc." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="El retard en lentrada està ACTIVAT" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="El retard en lentrada està DESACTIVAT" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="accessibilitat" explanation="menu option"/>
<string english="Accessibility" translation="Accessibilitat" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Desactiva efectes de pantalla, activa modes alentits o la invencibilitat." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="Acció = Espai, Z o V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Prem {button} per a tornar a leditor]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Prem {button} per a avançar el text -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Prem {button} per a continuar" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Ail-alluogi&apos;r oedi mewnbwn 1-ffrâm o fersiynau blaenorol y gêm." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Mae oedi mewnbwn YMLAEN" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Oedi mewnbwn yn BANT" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="hygyrchedd" explanation="menu option"/>
<string english="Accessibility" translation="Hygyrchedd" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Analluogi effeithiau sgrin, galluogi dulliau arafu neu anorchfygol." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="GWEITHREDU = Bylchwr, Z, neu V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[{button} i ddychwelyd i&apos;r golygydd]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Pwyswch {button} i sgipio&apos;r testun -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Pwyswch {button} i barhau" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reaktiviere die 1-Frame-Eingabeverzögerung aus früheren Versionen des Spiels." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Eingabeverzögerung ist AN" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Eingabeverzögerung ist AUS" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="barrierefreiheit" explanation="menu option"/>
<string english="Accessibility" translation="Barrierefreiheit" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Deaktiviere Bildschirmeffekte, aktiviere Verlangsamungsmodi oder Unbesiegbarkeit." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="HANDLUNG = Leertaste, Z oder V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Kehre mit {button} zum Editor zurück]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Drücke {button} zum Fortsetzen -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Drücke {button} zum Fortfahren" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="" explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="" explanation="menu option"/>
<string english="Accessibility" translation="" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="" explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reebligi la 1-kadran enigprokraston de pli-fruaj versioj de la ludo." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Enigprokrasto estas ŜALTA" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Enigprokrasto estas MALŜALTA" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="alirebleco" explanation="menu option"/>
<string english="Accessibility" translation="Alirebleco" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Malebligi ekranefikojn, ebligi malrapidigreĝimon aŭ nevundeblecon." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AGOKLAVO = Spaceto, Z aŭ V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Premu {button} por reveni al redaktilo]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Premu {button} por daŭrigi -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Premu {button} por daŭrigi" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[Premu {button} por malfrostigi ludon]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[Premu {button} por frostigi ludon]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reactiva el retraso de 1 fotograma de respuesta de versiones anteriores del juego." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Retraso de la entrada ACTIVADO" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Retraso de la entrada DESACTIVADO" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="accesibilidad" explanation="menu option"/>
<string english="Accessibility" translation="Accesibilidad" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Desactiva los efectos de pantalla, activa los modos de ralentización o invencibilidad." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="ACCIÓN = Espacio, Z o V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Pulsa {button} para volver al editor]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Pulsa {button} para avanzar el texto -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Pulsa {button} para continuar" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[Pulsa {button} para reanudar el juego]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[Pulsa {button} para detener el juego]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reactiva la demora de un fotograma de respuesta de versiones anteriores del juego." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Demora de respuesta ACTIVADA" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Demora de respuesta DESACTIVADA" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="accesibilidad" explanation="menu option"/>
<string english="Accessibility" translation="Accesibilidad" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Desactiva los efectos de pantalla y activa los modos de ralentización o invencibilidad." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="ACCIÓN = Espacio, Z o V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Pulsa {button} para volver al editor]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Pulsa {button} para avanzar el texto -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Pulsa {button} para continuar" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[Pulsa {button} para destrabar el juego]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[Pulsa {button} para congelar el juego]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reactiva la demora de un fotograma de respuesta de versiones anteriores del juego." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Demora de respuesta ACTIVADA" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Demora de respuesta DESACTIVADA" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="accesibilidad" explanation="menu option"/>
<string english="Accessibility" translation="Accesibilidad" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Desactiva los efectos de pantalla y activa los modos de ralentización o invencibilidad." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="ACCIÓN = Espacio, Z o V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Apretá {button} para volver al editor]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Apretá {button} para avanzar el texto -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Apretá {button} para continuar" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[Apretá {button} para destrabar el juego]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[Apretá {button} para congelar el juego]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Réactive le délai d&apos;entrée|de 1 image présent dans les précédentes versions du jeu." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Délai d&apos;entrée ACTIVÉ" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Délai d&apos;entrée DÉSACTIVÉ" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="accessibilité" explanation="menu option"/>
<string english="Accessibility" translation="Accessibilité" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Désactivez les effets d&apos;écran, activez le ralentissement ou l&apos;invincibilité." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="ACTION = espace, Z ou V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[{button} pour retourner à l&apos;éditeur]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- {button} pour faire avancer le texte -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="{button} pour continuer" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -250,6 +250,16 @@ Déan cóip chúltaca, ar eagla na heagla." explanation="translation maintenance
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Cuir an mhoill ionchuir fráma amháin a bhí i seanleaganacha den chluiche i bhfeidhm." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Tá moill ionchuir I bhFEIDHM" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Tá moill ionchuir AS FEIDHM" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="inrochtaineacht" explanation="menu option"/>
<string english="Accessibility" translation="Inrochtaineacht" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Cuir maisíochtaí scaileáin, maolú nó dochloíteacht i/as (bh)feidhm." explanation="" max="38*5"/>
@ -437,6 +447,7 @@ Déan cóip chúltaca, ar eagla na heagla." explanation="translation maintenance
<string english="ACTION = Space, Z, or V" translation="GNÍOMHAIGH = spásbharra, Z nó V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Brúigh {button} le filleadh]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Brúigh {button} le dul ar aghaidh -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="{button} le dul ar aghaidh" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Ripristina il ritardo comandi di un frame delle versioni precedenti del gioco." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Ritardo comandi: SÌ" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Ritardo comandi: NO" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="accessibilità" explanation="menu option"/>
<string english="Accessibility" translation="Accessibilità" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Disattiva gli effetti a schermo, attiva le modalità rallentamento o invincibilità." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AZIONE = Spazio, Z o V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Premi {button} per tornare all&apos;editor]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Premi {button} per scorrere il testo -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Premi {button} per continuare" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -263,6 +263,16 @@ Escキーを押すと表示を終了する。" explanation="" max="38*6" max_loc
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="古いバージョンに存在した、1フレームの入力遅延の有無を切り替える。" explanation="input delay" max="38*3" max_local="38*2"/>
<string english="Input delay is ON" translation="現在の設定: ON" explanation="" max="38*2" max_local="38*1"/>
<string english="Input delay is OFF" translation="現在の設定: OFF" explanation="" max="38*2" max_local="38*1"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20" max_local="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5" max_local="38*4"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20" max_local="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3" max_local="38*2"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20" max_local="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3" max_local="38*2"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2" max_local="38*1"/>
<string english="accessibility" translation="アクセシビリティ" explanation="menu option"/>
<string english="Accessibility" translation="アクセシビリティ設定" explanation="title" max="20" max_local="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="画面エフェクト、速度調整や無敵モードの有無を変更する。" explanation="" max="38*5" max_local="38*4"/>
@ -469,6 +479,7 @@ Steam Deckには対応していません。" explanation="" max="38*5" max_local
<string english="ACTION = Space, Z, or V" translation="ACTION = スペース, Z または V" explanation="title screen" max="38*3" max_local="38*2"/>
<string english="[Press {button} to return to editor]" translation="[ {button} でエディターに戻る ]" explanation="`to editor` is sorta redundant" max="40" max_local="40"/>
<string english="- Press {button} to advance text -" translation="- {button} を押して進む -" explanation="to dismiss a textbox. Expect `ACTION`" max="40" max_local="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40" max_local="40"/>
<string english="Press {button} to continue" translation="{button} を押して完了" explanation="Expect `ACTION`" max="34" max_local="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[{button}を押してゲームの進行を再開]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39" max_local="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[{button}を押してゲームの進行を停止]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39" max_local="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="이전 게임 버전에 있던 1프레임 입력 지연을 재활성화 합니다." explanation="input delay" max="38*3" max_local="30*3"/>
<string english="Input delay is ON" translation="입력 지연 켜짐" explanation="" max="38*2" max_local="30*2"/>
<string english="Input delay is OFF" translation="입력 지연 꺼짐" explanation="" max="38*2" max_local="30*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20" max_local="16"/>
<string english="Change touch input options." translation="" explanation="" max="38*5" max_local="30*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20" max_local="16"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3" max_local="30*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20" max_local="16"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3" max_local="30*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2" max_local="30*2"/>
<string english="accessibility" translation="접근성" explanation="menu option"/>
<string english="Accessibility" translation="접근성" explanation="title" max="20" max_local="16"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="화면 효과를 비활성화 하고, 감속 모드 혹은 무적 모드를 활성화 합니다." explanation="" max="38*5" max_local="30*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="행동 = Space, Z, V" explanation="title screen" max="38*3" max_local="30*3"/>
<string english="[Press {button} to return to editor]" translation="[{button} 버튼을 눌러 에디터로 돌아갑니다]" explanation="`to editor` is sorta redundant" max="40" max_local="32"/>
<string english="- Press {button} to advance text -" translation="- {button} 버튼을 눌러 텍스트를 진행합니다 -" explanation="to dismiss a textbox. Expect `ACTION`" max="40" max_local="32"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40" max_local="32"/>
<string english="Press {button} to continue" translation="{button} 버튼을 눌러 계속" explanation="Expect `ACTION`" max="34" max_local="27"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39" max_local="31"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39" max_local="31"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Herstel de invoervertraging van 1 frame uit vorige versies van het spel." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Invoervertraging staat AAN" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Invoervertraging staat UIT" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="toegankelijkheid" explanation="menu option"/>
<string english="Accessibility" translation="Toegankelijkheid" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Schakel schermeffecten uit, schakel vertraging of onkwetsbaarheid in." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="ACTIE = Spatie, Z, of V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Druk op {button} om terug te gaan]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Druk op {button} om verder te gaan -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Druk op {button} om verder te gaan" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[{button}: bewegingen vrijgeven]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[{button}: bewegingen bevriezen]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Przywróć 1-klatkowe opóźnienie inputu z poprzednich wersji gry." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Opóźnienie inputu jest WŁĄCZONE" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Opóźnienie inputu jest WYŁĄCZONE" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="ułatwienia" explanation="menu option"/>
<string english="Accessibility" translation="Ułatwienia Dostępu" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Włącz lub wyłącz efekty specjalne, spowolnienie, lub nieśmiertelność." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AKCJA = Spacja, Z, lub V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Wciśnij {button}, by wrócić do edytora]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Kontynuuj dialog: {button} -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Wciśnij {button}, by kontynuować" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reativa o atraso de 1 quadro na execução de comandos, como em versões anteriores do jogo." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="O atraso de comando está ATIVADO" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="O atraso de comando está DESATIVADO" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="acessibilidade" explanation="menu option"/>
<string english="Accessibility" translation="Acessibilidade" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Desativa os efeitos de tela, ativa os modos de desaceleração ou invencibilidade." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AÇÃO = Espaço, Z ou V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Pressione {button} para voltar]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Pressione {button} para avançar o texto -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Pressione {button} para continuar" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="[Pressione {button} para descongelar o jogo]" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="[Pressione {button} para congelar o jogo]" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reintroduz 1 fotograma no atraso de reação, presente em versões anteriores do jogo." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Atraso de Reação: SIM" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Atraso de Reação: NÃO" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="acessibilidade" explanation="menu option"/>
<string english="Accessibility" translation="Acessibilidade" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Desativa efeitos do ecrã e ativa os modos de invencibilidade e câmara lenta." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AÇÃO: Barra de Espaços, Z ou V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Prime {button} para voltar ao editor]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Prime {button} para avançar o texto -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Prime {button} para continuar" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Восстановите 1-кадровую задержку ввода из предыдущих версий игры." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Задержка ввода ВКЛЮЧЕНА" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Задержка ввода ОТКЛЮЧЕНА" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="доступность" explanation="menu option"/>
<string english="Accessibility" translation="Доступность" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Отключите визуальные эффекты экрана, включите режимы замедления или неуязвимость." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="ДЕЙСТВИЕ = Пробел, Z или V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[{button} - вернуться к редактору]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Нажмите {button}, чтобы продолжить -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Нажмите {button}, чтобы продолжить" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Załōncz drugi rŏz 1-klatkowo niyskoroś wchodu z piyrwyjszych wersyji szpila." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Niyskoroś wchodu je ZAŁŌNCZŌNO" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Niyskoroś wchodu je WYŁŌNCZŌNO" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="ulekszynia" explanation="menu option"/>
<string english="Accessibility" translation="Ulekszynia Dostympu" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Załōncz abo wyłōncz ekstra efekty, spomalynie, abo niyśmiertelnoś." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AKCYJO = Spacyjo, Z, abo V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Tyknij {button}, coby iś nazŏd do edytora]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Przelyź bez dialog: {button} -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Tyknij {button}, coby iś dalij" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Oyunun önceki sürümlerinden 1 karelik|giriş gecikmesini etkinleştir." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Giriş gecikmesi AÇIK" explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Giriş gecikmesi KAPALI" explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="erişilebilirlik" explanation="menu option"/>
<string english="Accessibility" translation="Erişilebilirlik" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Ekran efektlerini devre dışı bırak, yavaş modu veya yenilmezliği etkinleştir." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="AKSİYON = Boşluk, Z veya V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="Düzenleyiciye dönmek için {button} kullan" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Metni geçmek için {button} tuşuna bas -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Devam etmek için {button} tuşuna bas" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -249,6 +249,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Повернути затримку введення на 1 кадр з попередніх версій гри." explanation="input delay" max="38*3"/>
<string english="Input delay is ON" translation="Затримку введення УВІМК." explanation="" max="38*2"/>
<string english="Input delay is OFF" translation="Затримку введення ВИМК." explanation="" max="38*2"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20"/>
<string english="Change touch input options." translation="" explanation="" max="38*5"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2"/>
<string english="accessibility" translation="спец. можливості" explanation="menu option"/>
<string english="Accessibility" translation="Спец. можливості" explanation="title" max="20"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="Вимкнути екранні ефекти, дозволити уповільнення або непереможність." explanation="" max="38*5"/>
@ -435,6 +445,7 @@
<string english="ACTION = Space, Z, or V" translation="КНОПКА ДІЇ = пробіл, Z або V" explanation="title screen" max="38*3"/>
<string english="[Press {button} to return to editor]" translation="[Вернутись у редактор: натисніть {button}]" explanation="`to editor` is sorta redundant" max="40"/>
<string english="- Press {button} to advance text -" translation="- Читати далі: натискайте {button} -" explanation="to dismiss a textbox. Expect `ACTION`" max="40"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40"/>
<string english="Press {button} to continue" translation="Продовжити: натисніть {button}" explanation="Expect `ACTION`" max="34"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39"/>

View File

@ -255,6 +255,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="重新启用在过去游戏版本中存在的1帧输入延迟。" explanation="input delay" max="38*3" max_local="25*2"/>
<string english="Input delay is ON" translation="输入延迟 开启" explanation="" max="38*2" max_local="25*1"/>
<string english="Input delay is OFF" translation="输入延迟 关闭" explanation="" max="38*2" max_local="25*1"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20" max_local="13"/>
<string english="Change touch input options." translation="" explanation="" max="38*5" max_local="25*4"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20" max_local="13"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3" max_local="25*2"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20" max_local="13"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3" max_local="25*2"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2" max_local="25*1"/>
<string english="accessibility" translation="易用性" explanation="menu option"/>
<string english="Accessibility" translation="易用性" explanation="title" max="20" max_local="13"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="关闭画面特效、开启慢速模式或无敌模式。" explanation="" max="38*5" max_local="25*4"/>
@ -445,6 +455,7 @@
<string english="ACTION = Space, Z, or V" translation="行动键 = 空格、Z或V" explanation="title screen" max="38*3" max_local="25*2"/>
<string english="[Press {button} to return to editor]" translation="[按 {button} 返回编辑器]" explanation="`to editor` is sorta redundant" max="40" max_local="26"/>
<string english="- Press {button} to advance text -" translation="按 {button} 来推进文本 -" explanation="to dismiss a textbox. Expect `ACTION`" max="40" max_local="26"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40" max_local="26"/>
<string english="Press {button} to continue" translation="按 {button} 继续" explanation="Expect `ACTION`" max="34" max_local="22"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39" max_local="26"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39" max_local="26"/>

View File

@ -255,6 +255,16 @@
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="重新啟用在過去遊戲版本中存在的1幀輸入延遲。" explanation="input delay" max="38*3" max_local="25*2"/>
<string english="Input delay is ON" translation="輸入延遲 開啟" explanation="" max="38*2" max_local="25*1"/>
<string english="Input delay is OFF" translation="輸入延遲 關閉" explanation="" max="38*2" max_local="25*1"/>
<string english="touch input" translation="" explanation="menu option"/>
<string english="Touch Input" translation="" explanation="title" max="20" max_local="13"/>
<string english="Change touch input options." translation="" explanation="" max="38*5" max_local="25*4"/>
<string english="control style" translation="" explanation="menu option"/>
<string english="Control Style" translation="" explanation="title" max="20" max_local="13"/>
<string english="Change the control style for touch input." translation="" explanation="" max="38*3" max_local="25*2"/>
<string english="ui scale" translation="" explanation="menu option"/>
<string english="UI Scale" translation="" explanation="title" max="20" max_local="13"/>
<string english="Change the scale of the UI buttons." translation="" explanation="" max="38*3" max_local="25*2"/>
<string english="Current scale: {scale}.{extra}x" translation="" explanation="scale and extra are both numbers. 1 and 5 show as 1.5" max="38*2" max_local="25*1"/>
<string english="accessibility" translation="易用性" explanation="menu option"/>
<string english="Accessibility" translation="易用性" explanation="title" max="20" max_local="13"/>
<string english="Disable screen effects, enable slowdown modes or invincibility." translation="關閉畫面特效、開啟慢速模式或無敵模式。" explanation="" max="38*5" max_local="25*4"/>
@ -445,6 +455,7 @@
<string english="ACTION = Space, Z, or V" translation="行動鍵 = 空白鍵、Z或V" explanation="title screen" max="38*3" max_local="25*2"/>
<string english="[Press {button} to return to editor]" translation="[按 {button} 返回編輯器]" explanation="`to editor` is sorta redundant" max="40" max_local="26"/>
<string english="- Press {button} to advance text -" translation="按 {button} 來推進文本 -" explanation="to dismiss a textbox. Expect `ACTION`" max="40" max_local="26"/>
<string english="- Tap screen to advance text -" translation="" explanation="to dismiss a textbox using touch controls" max="40" max_local="26"/>
<string english="Press {button} to continue" translation="按 {button} 繼續" explanation="Expect `ACTION`" max="34" max_local="22"/>
<string english="[Press {button} to unfreeze gameplay]" translation="" explanation="in level debugger: {button} makes everything start moving as normal. Limit is treacherous, expect TAB for {button}. Frozen is the initial state, so this is the first string of the two that users will see!" max="39" max_local="26"/>
<string english="[Press {button} to freeze gameplay]" translation="" explanation="in level debugger: {button} makes everything stop moving. Limit is treacherous, expect TAB for {button}." max="39" max_local="26"/>

View File

@ -314,6 +314,8 @@ int FILESYSTEM_init(char *argvZero, char* baseDir, char *assetsPath, char* langD
doesFontsDirExist = mount_pre_datazip(NULL, "fonts", "graphics/", fontsDir);
mount_pre_datazip(NULL, "touch", "graphics/", NULL);
/* Mount the stock content last */
if (assetsPath)
{

View File

@ -27,6 +27,7 @@
#include "RoomnameTranslator.h"
#include "Screen.h"
#include "Script.h"
#include "Touch.h"
#include "Unused.h"
#include "UTF8.h"
#include "UtilityClass.h"
@ -4911,6 +4912,11 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, struct ScreenSett
key.sensitivity = help.Int(pText);
}
if (SDL_strcmp(pKey, "touchscale") == 0)
{
touch::scale = help.Int(pText);
}
if (SDL_strcmp(pKey, "lang") == 0)
{
loc::lang = std::string(pText);
@ -5189,6 +5195,8 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode, const struct Screen
xml::update_tag(dataNode, "controllerSensitivity", key.sensitivity);
xml::update_tag(dataNode, "touchscale", touch::scale);
xml::update_tag(dataNode, "lang", loc::lang.c_str());
xml::update_tag(dataNode, "lang_set", (int) loc::lang_set);
xml::update_tag(dataNode, "english_sprites", (int) loc::english_sprites);
@ -6819,6 +6827,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
option(loc::gettext("graphics"));
option(loc::gettext("audio"));
option(loc::gettext("game pad"));
option(loc::gettext("touch input"));
option(loc::gettext("accessibility"));
option(loc::gettext("language"), !translator_cutscene_test);
option(loc::gettext("return"));
@ -6891,6 +6900,13 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
menuyoff = 0;
maxspacing = 10;
break;
case Menu::touch_input:
option(loc::gettext("control style"), false);
option(loc::gettext("ui scale"));
option(loc::gettext("return"));
menuyoff = 0;
maxspacing = 15;
break;
case Menu::language:
if (loc::languagelist.empty())
{

View File

@ -64,6 +64,7 @@ namespace Menu
audiooptions,
accessibility,
controller,
touch_input,
language,
translator_main,
translator_options,

View File

@ -19,6 +19,7 @@
#include "RoomnameTranslator.h"
#include "Screen.h"
#include "Script.h"
#include "Touch.h"
#include "UtilityClass.h"
#include "VFormat.h"
#include "Vlogging.h"
@ -1174,6 +1175,31 @@ void Graphics::draw_texture(SDL_Texture* image, const int x, const int y)
copy_texture(image, NULL, &dstrect);
}
void Graphics::draw_texture(SDL_Texture* image, const int x, const int y, const int scalex, const int scaley)
{
int w, h;
if (query_texture(image, NULL, NULL, &w, &h) != 0)
{
return;
}
int flip = SDL_FLIP_NONE;
if (scalex < 0)
{
flip |= SDL_FLIP_HORIZONTAL;
}
if (scaley < 0)
{
flip |= SDL_FLIP_VERTICAL;
}
const SDL_Rect dstrect = { x, y, w * SDL_abs(scalex), h * SDL_abs(scaley) };
copy_texture(image, NULL, &dstrect, 0, NULL, (SDL_RendererFlip)flip);
}
void Graphics::draw_texture_part(SDL_Texture* image, const int x, const int y, const int x2, const int y2, const int w, const int h, const int scalex, const int scaley)
{
const SDL_Rect srcrect = {x2, y2, w, h};
@ -3464,6 +3490,8 @@ void Graphics::screenshake(void)
get_stretch_info(&rect);
copy_texture(tempShakeTexture, NULL, &rect, 0, NULL, flipmode ? SDL_FLIP_VERTICAL : SDL_FLIP_NONE);
touch::render();
}
void Graphics::updatescreenshake(void)
@ -3545,6 +3573,8 @@ void Graphics::render(void)
get_stretch_info(&rect);
copy_texture(gameTexture, NULL, &rect, 0, NULL, flipmode ? SDL_FLIP_VERTICAL : SDL_FLIP_NONE);
touch::render();
}
void Graphics::renderwithscreeneffects(void)

View File

@ -161,6 +161,8 @@ public:
void draw_texture(SDL_Texture* image, int x, int y);
void draw_texture(SDL_Texture* image, int x, int y, int scalex, int scaley);
void draw_texture_part(SDL_Texture* image, int x, int y, int x2, int y2, int w, int h, int scalex, int scaley);
void draw_grid_tile(SDL_Texture* texture, int t, int x, int y, int width, int height, int scalex, int scaley);
@ -259,6 +261,7 @@ public:
int screenshake_y;
void draw_window_background(void);
void draw_touch(void);
void get_stretch_info(SDL_Rect* rect);

View File

@ -429,6 +429,10 @@ void GraphicsResources::init(void)
im_image10 = LoadImage("graphics/ending.png");
im_image11 = LoadImage("graphics/site4.png", TEX_WHITE);
im_button_left = LoadImage("graphics/buttons/button_left.png");
im_button_right = LoadImage("graphics/buttons/button_right.png");
im_button_map = LoadImage("graphics/buttons/button_map.png");
im_sprites_translated = NULL;
im_flipsprites_translated = NULL;
@ -476,6 +480,10 @@ void GraphicsResources::destroy(void)
CLEAR(im_sprites_translated);
CLEAR(im_flipsprites_translated);
CLEAR(im_button_left);
CLEAR(im_button_right);
CLEAR(im_button_map);
#undef CLEAR
VVV_freefunc(SDL_FreeSurface, im_sprites_surf);

View File

@ -48,6 +48,11 @@ public:
SDL_Texture* im_sprites_translated;
SDL_Texture* im_flipsprites_translated;
/* Touch */
SDL_Texture* im_button_left;
SDL_Texture* im_button_right;
SDL_Texture* im_button_map;
};
SDL_Surface* LoadImageSurface(const char* filename);

View File

@ -23,6 +23,7 @@
#include "RoomnameTranslator.h"
#include "Screen.h"
#include "Script.h"
#include "Touch.h"
#include "UtilityClass.h"
#include "Vlogging.h"
@ -1055,12 +1056,18 @@ static void menuactionpress(void)
map.nexttowercolour();
break;
case 4:
// touch input options
music.playef(Sound_VIRIDIAN);
game.createmenu(Menu::touch_input);
map.nexttowercolour();
break;
case 5:
//accessibility options
music.playef(Sound_VIRIDIAN);
game.createmenu(Menu::accessibility);
map.nexttowercolour();
break;
case 5:
case 6:
//language options
if (game.translator_cutscene_test)
{
@ -1975,6 +1982,28 @@ static void menuactionpress(void)
break;
}
break;
case Menu::touch_input:
switch (game.currentmenuoption)
{
case 0:
music.playef(Sound_CRY);
break;
case 1:
touch::scale += 5;
music.playef(Sound_VIRIDIAN);
if (touch::scale > 20)
{
touch::scale = 5;
}
game.savestatsandsettings_menu();
break;
case 2:
music.playef(Sound_VIRIDIAN);
game.returnmenu();
map.nexttowercolour();
break;
}
break;
case Menu::cleardatamenu:
switch (game.currentmenuoption)
{
@ -2347,26 +2376,37 @@ void titleinput(void)
controller_down |= key.controllerWantsLeft(false);
}
if (key.isDown(left) || key.isDown(KEYBOARD_UP) || key.isDown(a) || key.isDown(KEYBOARD_w) || controller_up)
if (key.isDown(left) || key.isDown(KEYBOARD_UP) || key.isDown(a) || key.isDown(KEYBOARD_w) || controller_up || touch::button_tapped(TOUCH_BUTTON_LEFT))
{
game.press_left = true;
}
if (key.isDown(right) || key.isDown(KEYBOARD_DOWN) || key.isDown(d) || key.isDown(KEYBOARD_s) || controller_down)
if (key.isDown(right) || key.isDown(KEYBOARD_DOWN) || key.isDown(d) || key.isDown(KEYBOARD_s) || controller_down || touch::button_tapped(TOUCH_BUTTON_RIGHT))
{
game.press_right = true;
}
}
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip)) game.press_action = true;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip)
|| (!game.menustart ? touch::screen_down() : touch::button_tapped(TOUCH_BUTTON_CONFIRM)))
{
game.press_action = true;
}
//|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)) game.press_action = true; //on menus, up and down don't work as action
if (key.isDown(KEYBOARD_ENTER)) game.press_map = true;
//In the menu system, all keypresses are single taps rather than holds. Therefore this test has to be done for all presses
if (!game.press_action && !game.press_left && !game.press_right && !key.isDown(27) && !key.isDown(game.controllerButton_esc)) game.jumpheld = false;
if (!game.press_action && !game.press_left && !game.press_right && !key.isDown(27) && !key.isDown(game.controllerButton_esc)
&& !touch::button_tapped(TOUCH_BUTTON_CANCEL))
{
game.jumpheld = false;
}
if (!game.press_map) game.mapheld = false;
if (!game.jumpheld && graphics.fademode == FADE_NONE)
{
if (game.press_action || game.press_left || game.press_right || game.press_map || key.isDown(27) || key.isDown(game.controllerButton_esc))
if (game.press_action || game.press_left || game.press_right || game.press_map || key.isDown(27) || key.isDown(game.controllerButton_esc)
|| touch::button_tapped(TOUCH_BUTTON_CANCEL))
{
game.jumpheld = true;
}
@ -2385,7 +2425,7 @@ void titleinput(void)
if (game.menustart
&& game.menucountdown <= 0
&& (key.isDown(27) || key.isDown(game.controllerButton_esc)))
&& (key.isDown(27) || key.isDown(game.controllerButton_esc) || touch::button_tapped(TOUCH_BUTTON_CANCEL)))
{
if (game.currentmenuname == Menu::language && loc::pre_title_lang_menu)
{
@ -2562,16 +2602,17 @@ void gameinput(void)
game.press_action = false;
game.press_interact = false;
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false))
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false) || touch::buttons[TOUCH_BUTTON_LEFT].down)
{
game.press_left = true;
}
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_d) || key.controllerWantsRight(false))
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_d) || key.controllerWantsRight(false) || touch::buttons[TOUCH_BUTTON_RIGHT].down)
{
game.press_right = true;
}
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_w) || key.isDown(KEYBOARD_s)|| key.isDown(game.controllerButton_flip))
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_w)
|| key.isDown(KEYBOARD_s) || key.isDown(game.controllerButton_flip) || touch::touching_right())
{
game.press_action = true;
}
@ -2583,7 +2624,7 @@ void gameinput(void)
}
game.press_map = false;
if (key.isDown(KEYBOARD_ENTER) || key.isDown(SDLK_KP_ENTER) || key.isDown(game.controllerButton_map) )
if (key.isDown(KEYBOARD_ENTER) || key.isDown(SDLK_KP_ENTER) || key.isDown(game.controllerButton_map) || touch::button_tapped(TOUCH_BUTTON_MAP))
{
game.press_map = true;
}
@ -2600,7 +2641,12 @@ void gameinput(void)
{
game.press_action = false;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_w) || key.isDown(KEYBOARD_s) || key.isDown(game.controllerButton_flip)) game.press_action = true;
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_w)
|| key.isDown(KEYBOARD_s) || key.isDown(game.controllerButton_flip) || touch::screen_down()
)
{
game.press_action = true;
}
}
if (game.press_action && !game.jumpheld)
@ -2632,7 +2678,8 @@ void gameinput(void)
//immediately open again
//We really need a better input system soon...
&& !key.isDown(27)
&& !key.isDown(game.controllerButton_esc))
&& !key.isDown(game.controllerButton_esc)
&& !touch::button_tapped(TOUCH_BUTTON_CANCEL))
{
game.mapheld = false;
}
@ -2977,7 +3024,7 @@ void gameinput(void)
}
if (!game.mapheld
&& (key.isDown(27) || key.isDown(game.controllerButton_esc))
&& (key.isDown(27) || key.isDown(game.controllerButton_esc) || touch::button_tapped(TOUCH_BUTTON_CANCEL))
&& (!map.custommode || map.custommodeforreal))
{
game.mapheld = true;
@ -3099,15 +3146,15 @@ void mapinput(void)
controller_down |= key.controllerWantsLeft(false);
}
if (key.isDown(left) || key.isDown(KEYBOARD_UP) || key.isDown(a) || key.isDown(KEYBOARD_w)|| controller_up)
if (key.isDown(left) || key.isDown(KEYBOARD_UP) || key.isDown(a) || key.isDown(KEYBOARD_w)|| controller_up || touch::button_tapped(TOUCH_BUTTON_LEFT))
{
game.press_left = true;
}
if (key.isDown(right) || key.isDown(KEYBOARD_DOWN) || key.isDown(d) || key.isDown(KEYBOARD_s)|| controller_down)
if (key.isDown(right) || key.isDown(KEYBOARD_DOWN) || key.isDown(d) || key.isDown(KEYBOARD_s)|| controller_down || touch::button_tapped(TOUCH_BUTTON_RIGHT))
{
game.press_right = true;
}
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip) || touch::button_tapped(TOUCH_BUTTON_CONFIRM))
{
game.press_action = true;
}
@ -3115,8 +3162,8 @@ void mapinput(void)
|| (game.menupage >= 20 && game.menupage <= 21)
|| (game.menupage >= 30 && game.menupage <= 32))
{
if (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map) ) game.press_map = true;
if (key.isDown(27) && !game.mapheld)
if (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map)) game.press_map = true;
if ((key.isDown(27) || touch::button_tapped(TOUCH_BUTTON_CANCEL)) && !game.mapheld)
{
game.mapheld = true;
if (game.menupage < 9
@ -3137,7 +3184,11 @@ void mapinput(void)
}
else
{
if (key.isDown(KEYBOARD_ENTER) || key.isDown(27)|| key.isDown(game.controllerButton_map) ) game.press_map = true;
if (key.isDown(KEYBOARD_ENTER) || key.isDown(27) || key.isDown(game.controllerButton_map)
|| touch::button_tapped(TOUCH_BUTTON_CANCEL))
{
game.press_map = true;
}
}
//In the menu system, all keypresses are single taps rather than holds. Therefore this test has to be done for all presses
@ -3338,11 +3389,16 @@ void teleporterinput(void)
if(graphics.menuoffset==0)
{
if (key.isDown(KEYBOARD_LEFT)|| key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false) ) game.press_left = true;
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_d)|| key.controllerWantsRight(false) ) game.press_right = true;
if (key.isDown(KEYBOARD_LEFT)|| key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false) || touch::button_tapped(TOUCH_BUTTON_LEFT)) game.press_left = true;
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_d)|| key.controllerWantsRight(false) || touch::button_tapped(TOUCH_BUTTON_RIGHT)) game.press_right = true;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)|| key.isDown(KEYBOARD_w)|| key.isDown(KEYBOARD_s) || key.isDown(game.controllerButton_flip)) game.press_action = true;
if (!game.separate_interact && (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map)))
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_w)
|| key.isDown(KEYBOARD_s) || key.isDown(game.controllerButton_flip)
|| touch::button_tapped(TOUCH_BUTTON_CONFIRM))
{
game.press_action = true;
}
if (!game.separate_interact && (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map) || touch::button_tapped(TOUCH_BUTTON_CONFIRM)))
{
game.press_map = true;
}
@ -3355,7 +3411,7 @@ void teleporterinput(void)
if (!game.press_action && !game.press_left && !game.press_right && !game.press_interact) game.jumpheld = false;
if (!game.press_map) game.mapheld = false;
if (key.isDown(27))
if (key.isDown(27) || touch::button_tapped(TOUCH_BUTTON_CANCEL))
{
if (!map.custommode || map.custommodeforreal)
{
@ -3482,7 +3538,7 @@ void gamecompleteinput(void)
graphics.titlebg.bypos += graphics.titlebg.bscroll;
game.oldcreditposition = game.creditposition;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip) || touch::screen_down())
{
game.creditposition -= 6;
if (game.creditposition <= -Credits::creditmaxposition)
@ -3530,7 +3586,7 @@ void gamecompleteinput2(void)
//Do this here because input comes first
game.oldcreditposx = game.creditposx;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip) || touch::screen_down())
{
game.creditposx++;
game.oldcreditposx++;

View File

@ -17,6 +17,7 @@
#include "LocalizationStorage.h"
#include "Music.h"
#include "Screen.h"
#include "Touch.h"
#include "UTF8.h"
#include "UtilityClass.h"
#include "Vlogging.h"
@ -60,6 +61,8 @@ KeyPoll::KeyPoll(void)
linealreadyemptykludge = false;
isActive = true;
using_touch = false;
}
void KeyPoll::enabletextentry(void)
@ -210,6 +213,20 @@ bool cycle_language(bool should_recompute_textboxes)
return should_recompute_textboxes;
}
static void remove_finger(int i)
{
for (int j = 0; j < NUM_TOUCH_BUTTONS; j++)
{
if (touch::buttons[j].fingerId == touch::fingers[i].id)
{
touch::buttons[j].down = false;
touch::buttons[j].fingerId = -1;
}
}
touch::fingers.erase(touch::fingers.begin() + i);
}
void KeyPoll::Poll(void)
{
static int raw_mousex = 0;
@ -224,6 +241,12 @@ void KeyPoll::Poll(void)
bool should_recompute_textboxes = false;
bool active_input_device_changed = false;
bool keyboard_was_active = BUTTONGLYPHS_keyboard_is_active();
int screen_width;
int screen_height;
gameScreen.GetScreenSize(&screen_width, &screen_height);
touch::reset();
while (SDL_PollEvent(&evt))
{
switch (evt.type)
@ -439,6 +462,61 @@ void KeyPoll::Poll(void)
break;
}
/* Touch Events */
case SDL_FINGERDOWN:
{
using_touch = true;
VVV_Finger finger;
finger.pressed = true;
finger.x = evt.tfinger.x * screen_width;
finger.y = evt.tfinger.y * screen_height;
finger.id = evt.tfinger.fingerId;
finger.on_button = false;
touch::fingers.push_back(finger);
raw_mousex = evt.tfinger.x * screen_width;
raw_mousey = evt.tfinger.y * screen_height;
leftbutton = 1;
break;
}
case SDL_FINGERMOTION:
{
using_touch = true;
for (int i = 0; i < (int) touch::fingers.size(); i++)
{
if (touch::fingers[i].id == evt.tfinger.fingerId)
{
touch::fingers[i].x = evt.tfinger.x * screen_width;
touch::fingers[i].y = evt.tfinger.y * screen_height;
break;
}
}
raw_mousex = evt.tfinger.x * screen_width;
raw_mousey = evt.tfinger.y * screen_height;
break;
}
case SDL_FINGERUP:
{
using_touch = true;
for (int i = (int) touch::fingers.size() - 1; i >= 0; i--)
{
if (touch::fingers[i].id == evt.tfinger.fingerId)
{
// Unpress any buttons that this finger may belong to
remove_finger(i);
}
}
raw_mousex = evt.tfinger.x * screen_width;
raw_mousey = evt.tfinger.y * screen_height;
leftbutton = 0;
break;
}
/* Window Events */
case SDL_WINDOWEVENT:
switch (evt.window.event)
@ -520,6 +598,11 @@ void KeyPoll::Poll(void)
switch (evt.type)
{
case SDL_KEYDOWN:
if (evt.key.keysym.sym != SDLK_AC_BACK)
{
// If we hit the back button on Android, this doesn't mean we're not using touch
using_touch = false;
}
if (evt.key.repeat == 0)
{
hidemouse = true;
@ -528,6 +611,7 @@ void KeyPoll::Poll(void)
case SDL_TEXTINPUT:
case SDL_CONTROLLERBUTTONDOWN:
case SDL_CONTROLLERAXISMOTION:
using_touch = false;
hidemouse = true;
break;
case SDL_MOUSEMOTION:
@ -560,6 +644,8 @@ void KeyPoll::Poll(void)
{
recomputetextboxes();
}
touch::update_buttons();
}
bool KeyPoll::isDown(SDL_Keycode key)

View File

@ -72,6 +72,8 @@ public:
bool linealreadyemptykludge;
bool using_touch;
private:
std::map<SDL_JoystickID, SDL_GameController*> controllers;
std::map<SDL_GameControllerButton, bool> buttonmap;

View File

@ -25,6 +25,7 @@
#include "RoomnameTranslator.h"
#include "Screen.h"
#include "Script.h"
#include "Touch.h"
#include "UtilityClass.h"
#include "VFormat.h"
@ -391,10 +392,14 @@ static void menurender(void)
font::print_wrap(PR_CEN, -1, 65, loc::gettext("Rebind your controller's buttons and adjust sensitivity."), tr, tg, tb);
break;
case 4:
font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Touch Input"), tr, tg, tb);
font::print_wrap(PR_CEN, -1, 65, loc::gettext("Change touch input options."), tr, tg, tb);
break;
case 5:
font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Accessibility"), tr, tg, tb);
font::print_wrap(PR_CEN, -1, 65, loc::gettext("Disable screen effects, enable slowdown modes or invincibility."), tr, tg, tb);
break;
case 5:
case 6:
font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Language"), tr, tg, tb);
font::print_wrap(PR_CEN, -1, 65, loc::gettext("Change the language."), tr, tg, tb);
}
@ -763,6 +768,32 @@ static void menurender(void)
break;
}
case Menu::touch_input:
{
switch (game.currentmenuoption)
{
case 0: // Control style
font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("Control Style"), tr, tg, tb);
font::print_wrap(PR_CEN, -1, 65, loc::gettext("Change the control style for touch input."), tr, tg, tb);
break;
case 1:
// Display touch buttons!
key.using_touch = true;
font::print(PR_2X | PR_CEN, -1, 30, loc::gettext("UI Scale"), tr, tg, tb);
font::print_wrap(PR_CEN, -1, 65, loc::gettext("Change the scale of the UI buttons."), tr, tg, tb);
char buffer[SCREEN_WIDTH_CHARS + 1];
float scale = (float)touch::scale / 10.0;
vformat_buf(buffer, sizeof(buffer), loc::gettext("Current scale: {scale}.{extra}x"), "scale:int, extra:int",
(int) scale,
(int) ((float) ((float) scale - (int) scale) * 10)
);
font::print(PR_CEN, -1, 75, buffer, tr, tg, tb);
break;
}
}
break;
case Menu::language:
if (loc::languagelist.empty())
{
@ -2432,12 +2463,19 @@ void gamerender(void)
if (game.advancetext)
{
char buffer_adv[SCREEN_WIDTH_CHARS + 1];
vformat_buf(
buffer_adv, sizeof(buffer_adv),
loc::gettext("- Press {button} to advance text -"),
"button:but",
vformat_button(ActionSet_InGame, Action_InGame_ACTION)
);
if (key.using_touch)
{
SDL_strlcpy(buffer_adv, loc::gettext("- Tap screen to advance text -"), sizeof(buffer_adv));
}
else
{
vformat_buf(
buffer_adv, sizeof(buffer_adv),
loc::gettext("- Press {button} to advance text -"),
"button:but",
vformat_button(ActionSet_InGame, Action_InGame_ACTION)
);
}
font::print(PR_CEN | PR_BOR, -1, graphics.flipmode ? 228 : 5, buffer_adv, 220 - (help.glow), 220 - (help.glow), 255 - (help.glow / 2));
}
@ -3507,12 +3545,19 @@ void teleporterrender(void)
if (game.advancetext)
{
char buffer_adv[SCREEN_WIDTH_CHARS + 1];
vformat_buf(
buffer_adv, sizeof(buffer_adv),
loc::gettext("- Press {button} to advance text -"),
"button:but",
vformat_button(ActionSet_InGame, Action_InGame_ACTION)
);
if (key.using_touch)
{
SDL_strlcpy(buffer_adv, loc::gettext("- Tap screen to advance text -"), sizeof(buffer_adv));
}
else
{
vformat_buf(
buffer_adv, sizeof(buffer_adv),
loc::gettext("- Press {button} to advance text -"),
"button:but",
vformat_button(ActionSet_InGame, Action_InGame_ACTION)
);
}
font::print(PR_CEN | PR_BOR, -1, graphics.flipmode ? 228 : 5, buffer_adv, 220 - (help.glow), 220 - (help.glow), 255 - (help.glow / 2));
}

View File

@ -20,6 +20,7 @@
#include "LocalizationStorage.h"
#include "Map.h"
#include "Music.h"
#include "Touch.h"
#include "Unreachable.h"
#include "UtilityClass.h"
#include "VFormat.h"
@ -802,7 +803,7 @@ void scriptclass::run(void)
game.hascontrol = false;
game.pausescript = true;
if (key.isDown(90) || key.isDown(32) || key.isDown(86)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)) game.jumpheld = true;
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || touch::screen_down()) game.jumpheld = true;
}
game.backgroundtext = false;
@ -1828,7 +1829,7 @@ void scriptclass::run(void)
game.hascontrol = false;
game.pausescript = true;
if (key.isDown(90) || key.isDown(32) || key.isDown(86)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)) game.jumpheld = true;
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || touch::screen_down()) game.jumpheld = true;
}
game.backgroundtext = false;
}
@ -1851,7 +1852,7 @@ void scriptclass::run(void)
game.hascontrol = false;
game.pausescript = true;
if (key.isDown(90) || key.isDown(32) || key.isDown(86)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)) game.jumpheld = true;
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || touch::screen_down()) game.jumpheld = true;
}
game.backgroundtext = false;
}
@ -1872,7 +1873,7 @@ void scriptclass::run(void)
game.hascontrol = false;
game.pausescript = true;
if (key.isDown(90) || key.isDown(32) || key.isDown(86)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)) game.jumpheld = true;
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || touch::screen_down()) game.jumpheld = true;
}
game.backgroundtext = false;
}

View File

@ -0,0 +1,262 @@
#include "Touch.h"
#include <SDL.h>
#include <vector>
#include "Constants.h"
#include "Graphics.h"
#include "GraphicsResources.h"
#include "KeyPoll.h"
#include "Screen.h"
#include "Script.h"
#include "UtilityClass.h"
namespace touch
{
std::vector<VVV_Finger> fingers;
TouchButton buttons[NUM_TOUCH_BUTTONS];
int scale;
int get_rect(TouchButton* button, SDL_Rect* rect)
{
rect->x = button->x;
rect->y = button->y;
rect->w = button->width;
rect->h = button->height;
return 0;
}
int get_scale(void)
{
SDL_Rect rect;
graphics.get_stretch_info(&rect);
int scale_x = rect.w / SCREEN_WIDTH_PIXELS;
int scale_y = rect.h / SCREEN_HEIGHT_PIXELS;
return SDL_ceil(SDL_min(scale_x, scale_y) * ((float) scale / 10.f));
}
void init(void)
{
scale = 10;
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
{
buttons[i].image = NULL;
buttons[i].active = false;
buttons[i].down = false;
buttons[i].fingerId = -1;
}
}
void refresh_buttons(void)
{
int width;
int height;
int scale = get_scale();
gameScreen.GetScreenSize(&width, &height);
buttons[TOUCH_BUTTON_LEFT].x = 0;
buttons[TOUCH_BUTTON_LEFT].y = height - (40 * scale) - 8;
buttons[TOUCH_BUTTON_LEFT].width = 40 * scale;
buttons[TOUCH_BUTTON_LEFT].height = 40 * scale;
buttons[TOUCH_BUTTON_LEFT].image = graphics.grphx.im_button_left;
buttons[TOUCH_BUTTON_RIGHT].x = (40 * scale) + 8;
buttons[TOUCH_BUTTON_RIGHT].y = height - (40 * scale) - 8;
buttons[TOUCH_BUTTON_RIGHT].width = 40 * scale;
buttons[TOUCH_BUTTON_RIGHT].height = 40 * scale;
buttons[TOUCH_BUTTON_RIGHT].image = graphics.grphx.im_button_right;
buttons[TOUCH_BUTTON_MAP].x = width - (35 * scale);
buttons[TOUCH_BUTTON_MAP].y = 0;
buttons[TOUCH_BUTTON_MAP].width = 35 * scale;
buttons[TOUCH_BUTTON_MAP].height = 30 * scale;
buttons[TOUCH_BUTTON_MAP].image = graphics.grphx.im_button_map;
buttons[TOUCH_BUTTON_CANCEL].x = width - (40 * scale);
buttons[TOUCH_BUTTON_CANCEL].y = height - (40 * scale * 2) - 16;
buttons[TOUCH_BUTTON_CANCEL].width = 40 * scale;
buttons[TOUCH_BUTTON_CANCEL].height = 40 * scale;
buttons[TOUCH_BUTTON_CANCEL].image = graphics.grphx.im_button_left;
buttons[TOUCH_BUTTON_CONFIRM].x = width - (40 * scale);
buttons[TOUCH_BUTTON_CONFIRM].y = height - (40 * scale) - 8;
buttons[TOUCH_BUTTON_CONFIRM].width = 40 * scale;
buttons[TOUCH_BUTTON_CONFIRM].height = 40 * scale;
buttons[TOUCH_BUTTON_CONFIRM].image = graphics.grphx.im_button_right;
// First, reset all buttons
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
{
buttons[i].active = false;
}
// Now, set the buttons that are active
switch (game.gamestate)
{
case GAMEMODE:
if (!script.running && game.hascontrol)
{
buttons[TOUCH_BUTTON_LEFT].active = true;
buttons[TOUCH_BUTTON_RIGHT].active = true;
buttons[TOUCH_BUTTON_MAP].active = true;
}
break;
case TITLEMODE:
if (game.menustart)
{
buttons[TOUCH_BUTTON_LEFT].active = true;
buttons[TOUCH_BUTTON_RIGHT].active = true;
buttons[TOUCH_BUTTON_CANCEL].active = true;
buttons[TOUCH_BUTTON_CONFIRM].active = true;
}
break;
case TELEPORTERMODE:
if (game.useteleporter)
{
buttons[TOUCH_BUTTON_LEFT].active = true;
buttons[TOUCH_BUTTON_RIGHT].active = true;
buttons[TOUCH_BUTTON_CANCEL].active = true;
buttons[TOUCH_BUTTON_CONFIRM].active = true;
}
break;
case MAPMODE:
buttons[TOUCH_BUTTON_LEFT].active = true;
buttons[TOUCH_BUTTON_RIGHT].active = true;
buttons[TOUCH_BUTTON_CANCEL].active = true;
buttons[TOUCH_BUTTON_CONFIRM].active = true;
break;
case GAMECOMPLETE:
case GAMECOMPLETE2:
case EDITORMODE:
case PRELOADER:
default:
break;
}
}
void render(void)
{
if (!key.using_touch)
{
return;
}
int scale = get_scale();
refresh_buttons();
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
{
SDL_Rect rect;
get_rect(&buttons[i], &rect);
if (buttons[i].image != NULL && buttons[i].active)
{
graphics.draw_texture(buttons[i].image, rect.x, rect.y + (buttons[i].down ? 2 * scale : 0), scale, scale);
}
}
}
void reset(void)
{
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
{
buttons[i].down = false;
buttons[i].fingerId = -1;
}
for (int i = 0; i < fingers.size(); i++)
{
fingers[i].pressed = false;
fingers[i].on_button = false;
}
}
void update_buttons(void)
{
if (graphics.fademode != FADE_NONE)
{
return;
}
SDL_Point point;
SDL_Rect rect;
for (int buttonId = 0; buttonId < NUM_TOUCH_BUTTONS; buttonId++)
{
TouchButton* button = &buttons[buttonId];
button->down = false;
for (int fingerId = 0; fingerId < fingers.size(); fingerId++)
{
point.x = fingers[fingerId].x;
point.y = fingers[fingerId].y;
get_rect(button, &rect);
if (SDL_PointInRect(&point, &rect) && button->active)
{
button->down = true;
button->fingerId = fingers[fingerId].id;
fingers[fingerId].on_button = true;
break;
}
}
}
}
bool button_tapped(TouchButtonID button)
{
if (key.using_touch && buttons[button].active && buttons[button].down)
{
for (int i = 0; i < fingers.size(); i++)
{
if (fingers[i].id == buttons[button].fingerId)
{
return fingers[i].pressed;
}
}
}
return false;
}
bool touching_right(void)
{
int width;
int height;
gameScreen.GetScreenSize(&width, &height);
for (int i = 0; i < fingers.size(); i++)
{
if (fingers[i].on_button)
{
continue;
}
if (fingers[i].x > width / 2)
{
return true;
}
}
return false;
}
bool screen_down(void)
{
for (int i = 0; i < fingers.size(); i++)
{
if (fingers[i].on_button)
{
continue;
}
return true;
}
return false;
}
}

View File

@ -0,0 +1,63 @@
#ifndef TOUCH_H
#define TOUCH_H
#include <SDL.h>
#include <vector>
struct VVV_Finger
{
float x;
float y;
bool pressed;
bool on_button;
SDL_FingerID id;
};
enum TouchButtonID
{
/* General */
TOUCH_BUTTON_LEFT,
TOUCH_BUTTON_RIGHT,
/* Gameplay */
TOUCH_BUTTON_MAP,
/* Menus */
TOUCH_BUTTON_CANCEL,
TOUCH_BUTTON_CONFIRM,
NUM_TOUCH_BUTTONS
};
struct TouchButton
{
int x;
int y;
int width;
int height;
bool down;
bool active;
SDL_Texture* image;
SDL_FingerID fingerId;
};
namespace touch
{
extern std::vector<VVV_Finger> fingers;
extern TouchButton buttons[NUM_TOUCH_BUTTONS];
extern int scale;
void refresh_buttons(void);
void reset(void);
void update_buttons(void);
void init(void);
void render(void);
bool button_tapped(TouchButtonID button);
bool touching_right(void);
bool screen_down(void);
}
#endif /* TOUCH_H */

View File

@ -33,6 +33,7 @@
#include "RenderFixed.h"
#include "Screen.h"
#include "Script.h"
#include "Touch.h"
#include "UtilityClass.h"
#include "Vlogging.h"
@ -527,6 +528,10 @@ int main(int argc, char *argv[])
{
loc::show_translator_menu = true;
}
else if (ARG("-emutouch"))
{
SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "1");
}
#ifdef _WIN32
else if (ARG("-console"))
{
@ -614,6 +619,9 @@ int main(int argc, char *argv[])
// Set up screen
graphics.init();
// Set up touch input before we load settings
touch::init();
game.init();
game.seed_use_sdl_getticks = seed_use_sdl_getticks;
@ -813,6 +821,11 @@ int main(int argc, char *argv[])
key.isActive = true;
if (SDL_GetNumTouchDevices() > 0)
{
key.using_touch = true;
}
gamestate_funcs = get_gamestate_funcs(game.gamestate, &num_gamestate_funcs);
loop_assign_active_funcs();

View File

@ -7,6 +7,7 @@
#include "KeyPoll.h"
#include "Localization.h"
#include "Maths.h"
#include "Touch.h"
#include "UtilityClass.h"
#include "VFormat.h"
@ -23,7 +24,7 @@ void preloaderinput(void)
{
game.press_action = false;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip)) {
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip) || touch::screen_down()) {
game.press_action = true;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

2
third_party/FAudio vendored

@ -1 +1 @@
Subproject commit 38e9da7264641c9cc69a80d09082f166d9b8eaf9
Subproject commit fc47ca1f5f489f30e634cdd0af02d80b8a915bf4