Merge a449f98c45
into ff785aaa8a
|
@ -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
|
||||
|
|
|
@ -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"))
|
||||
}
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -249,6 +249,16 @@
|
|||
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Reactiva el retard en l’entrada|d’un 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 l’entrada està ACTIVAT" explanation="" max="38*2"/>
|
||||
<string english="Input delay is OFF" translation="El retard en l’entrada 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 l’editor]" 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"/>
|
||||
|
|
|
@ -249,6 +249,16 @@
|
|||
<string english="Re-enable the 1-frame input delay from previous versions of the game." translation="Ail-alluogi'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'r golygydd]" explanation="`to editor` is sorta redundant" max="40"/>
|
||||
<string english="- Press {button} to advance text -" translation="- Pwyswch {button} i sgipio'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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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'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'entrée ACTIVÉ" explanation="" max="38*2"/>
|
||||
<string english="Input delay is OFF" translation="Délai d'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'écran, activez le ralentissement ou l'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'é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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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'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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -2652,7 +2652,14 @@ void editorclass::tool_place()
|
|||
|
||||
static void creategameoptions(void)
|
||||
{
|
||||
game.createmenu(Menu::options);
|
||||
if (key.using_touch)
|
||||
{
|
||||
game.createmenu(Menu::gameplayoptions);
|
||||
}
|
||||
else
|
||||
{
|
||||
game.createmenu(Menu::options);
|
||||
}
|
||||
}
|
||||
|
||||
static void nextbgcolor(void)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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"
|
||||
|
@ -376,6 +377,8 @@ void Game::init(void)
|
|||
screenshot_border_timer = 0;
|
||||
screenshot_saved_success = false;
|
||||
|
||||
languagepage = 0;
|
||||
|
||||
setdefaultcontrollerbuttons();
|
||||
}
|
||||
|
||||
|
@ -4911,6 +4914,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 +5197,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);
|
||||
|
@ -6551,41 +6561,70 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
}
|
||||
|
||||
currentmenuname = t;
|
||||
int buttonyoff = 0;
|
||||
bool buttonscentered = false;
|
||||
menuyoff = 0;
|
||||
int maxspacing = 30; // maximum value for menuspacing, can only become lower.
|
||||
bool auto_buttons = true;
|
||||
bool auto_center = true;
|
||||
int button_height = 26;
|
||||
int button_spacing = 8;
|
||||
menucountdown = 0;
|
||||
menuoptions.clear();
|
||||
touch::remove_dynamic_buttons();
|
||||
|
||||
switch (t)
|
||||
{
|
||||
case Menu::mainmenu:
|
||||
{
|
||||
if (ingame_titlemode)
|
||||
{
|
||||
/* We shouldn't be here! */
|
||||
SDL_assert(0 && "Entering main menu from in-game options!");
|
||||
break;
|
||||
}
|
||||
int offset = 0;
|
||||
#if !defined(MAKEANDPLAY)
|
||||
option(loc::gettext("play"));
|
||||
touch::create_menu_button(80, 96 - 8 + 16, 160, 26, loc::gettext("play"), offset++);
|
||||
#endif
|
||||
option(loc::gettext("levels"));
|
||||
option(loc::gettext("options"));
|
||||
offset++;
|
||||
// Temporarily commented out
|
||||
//touch::create_menu_button(80, 130 - 8, 160, 26, loc::gettext("levels"), offset++);
|
||||
touch::create_menu_button(80, 164 - 8 - 34 + 16, 128, 26, loc::gettext("options"), offset++);
|
||||
if (loc::show_translator_menu)
|
||||
{
|
||||
option(loc::gettext("translator"));
|
||||
offset++;
|
||||
}
|
||||
option(loc::gettext("credits"));
|
||||
option(loc::gettext("quit"));
|
||||
|
||||
// Create the language button
|
||||
TouchButton button = touch::create_button(214, 164 - 8 - 34 + 16, 26, 26, "");
|
||||
button.type = TOUCH_BUTTON_TYPE_MENU_LANGUAGE;
|
||||
button.id = -1;
|
||||
|
||||
touch::register_button(button);
|
||||
|
||||
touch::create_menu_button(80, 198 - 8 - 34 + 16, 160, 26, loc::gettext("credits"), offset++);
|
||||
|
||||
menuyoff = -10;
|
||||
maxspacing = 15;
|
||||
auto_buttons = false;
|
||||
|
||||
break;
|
||||
}
|
||||
case Menu::playerworlds:
|
||||
buttonyoff = -16;
|
||||
option(loc::gettext("play a level"));
|
||||
option(loc::gettext("level editor"), !editor_disabled);
|
||||
if (!editor_disabled)
|
||||
{
|
||||
option(loc::gettext("open level folder"), FILESYSTEM_openDirectoryEnabled());
|
||||
option(loc::gettext("show level folder path"));
|
||||
option(loc::gettext("open level folder"), FILESYSTEM_openDirectoryEnabled(), PR_RTL_XFLIP, false);
|
||||
option(loc::gettext("show level folder path"), true, PR_RTL_XFLIP, false);
|
||||
}
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = -40;
|
||||
|
@ -6702,7 +6741,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
menuxoff = 20;
|
||||
menuyoff = 70-(menuoptions.size()*10);
|
||||
menuspacing = 5;
|
||||
return; // skip automatic centering, will turn out bad with levels list
|
||||
auto_center = false;
|
||||
}
|
||||
break;
|
||||
case Menu::quickloadlevel:
|
||||
|
@ -6727,11 +6766,14 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
menuyoff = -20;
|
||||
break;
|
||||
case Menu::gameplayoptions:
|
||||
{
|
||||
int offset = 0;
|
||||
#if !defined(MAKEANDPLAY)
|
||||
if (ingame_titlemode && unlock[Unlock_FLIPMODE])
|
||||
#endif
|
||||
{
|
||||
option(loc::gettext("flip mode"));
|
||||
option(loc::gettext("flip mode"));
|
||||
offset++;
|
||||
}
|
||||
option(loc::gettext("toggle fps"));
|
||||
option(loc::gettext("speedrun options"));
|
||||
|
@ -6741,16 +6783,31 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("return"));
|
||||
menuyoff = -10;
|
||||
maxspacing = 15;
|
||||
auto_buttons = false;
|
||||
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 - 32, 160, 12, loc::gettext("limit to 30 fps"), offset, !over30mode);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 - 32 + 16, 160, 12, loc::gettext("translucent room name bg"), -3, graphics.translucentroomname);
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), offset + 5);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1);
|
||||
break;
|
||||
}
|
||||
case Menu::graphicoptions:
|
||||
{
|
||||
int optionid = 4;
|
||||
int scalingid = 0;
|
||||
if (!gameScreen.isForcedFullscreen())
|
||||
{
|
||||
option(loc::gettext("toggle fullscreen"));
|
||||
optionid++;
|
||||
scalingid++;
|
||||
}
|
||||
option(loc::gettext("scaling mode"));
|
||||
if (!gameScreen.isForcedFullscreen())
|
||||
{
|
||||
option(loc::gettext("resize to nearest"), gameScreen.isWindowed);
|
||||
optionid++;
|
||||
}
|
||||
option(loc::gettext("toggle filter"));
|
||||
option(loc::gettext("toggle analogue"));
|
||||
|
@ -6758,7 +6815,18 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("return"));
|
||||
menuyoff = -10;
|
||||
maxspacing = 15;
|
||||
auto_buttons = false;
|
||||
|
||||
touch::create_menu_button((320 - 160) / 2, 120 - 32, 160, button_height, loc::gettext("scaling mode"), scalingid);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 + 16, 160, 12, loc::gettext("filtered screen"), optionid - 3, gameScreen.isFiltered);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 + 32, 160, 12, loc::gettext("analogue mode"), optionid - 2, gameScreen.badSignalEffect);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 + 48, 160, 12, loc::gettext("vsync"), optionid - 1, gameScreen.vsync);
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), optionid);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1);
|
||||
break;
|
||||
}
|
||||
case Menu::ed_settings:
|
||||
option(loc::gettext("change description"));
|
||||
option(loc::gettext("edit scripts"));
|
||||
|
@ -6818,12 +6886,15 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("gameplay"));
|
||||
option(loc::gettext("graphics"));
|
||||
option(loc::gettext("audio"));
|
||||
option(loc::gettext("game pad"));
|
||||
option(loc::gettext("game pad"), true, PR_RTL_XFLIP, false);
|
||||
option(loc::gettext("touch input"));
|
||||
option(loc::gettext("accessibility"));
|
||||
option(loc::gettext("language"), !translator_cutscene_test);
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 0;
|
||||
maxspacing = 15;
|
||||
|
||||
buttonscentered = true;
|
||||
break;
|
||||
case Menu::speedrunneroptions:
|
||||
option(loc::gettext("glitchrunner mode"));
|
||||
|
@ -6835,6 +6906,8 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("return"));
|
||||
menuyoff = 0;
|
||||
maxspacing = 15;
|
||||
|
||||
buttonscentered = true;
|
||||
break;
|
||||
case Menu::setglitchrunner:
|
||||
{
|
||||
|
@ -6857,19 +6930,42 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
maxspacing = 15;
|
||||
break;
|
||||
case Menu::audiooptions:
|
||||
{
|
||||
int offset = 0;
|
||||
option(loc::gettext("music volume"));
|
||||
option(loc::gettext("sound volume"));
|
||||
if (music.mmmmmm)
|
||||
{
|
||||
offset++;
|
||||
option(loc::gettext("soundtrack"));
|
||||
}
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 0;
|
||||
maxspacing = 15;
|
||||
|
||||
auto_buttons = false;
|
||||
|
||||
touch::create_slider_button((320 - 160) / 2, 120 - 32, 160, 48, loc::gettext("music volume"), &music.user_music_volume, 0, USER_VOLUME_MAX);
|
||||
touch::create_slider_button((320 - 160) / 2, 120 + 32, 160, 48, loc::gettext("sound volume"), &music.user_sound_volume, 0, USER_VOLUME_MAX);
|
||||
|
||||
if (music.mmmmmm)
|
||||
{
|
||||
touch::create_toggle_button((320 - 160) / 2, 200 - 48, 160, 12, loc::gettext("MMMMMM soundtrack"), offset, music.usingmmmmmm);
|
||||
}
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), offset + 2);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1);
|
||||
break;
|
||||
}
|
||||
case Menu::accessibility:
|
||||
{
|
||||
int offset = -1;
|
||||
#if !defined(MAKEANDPLAY)
|
||||
option(loc::gettext("unlock play modes"));
|
||||
// For now, we're not going to allow the player to unlock play modes from the options menu, until we come up with a good UI for it.
|
||||
//touch::create_menu_button((320 - 160) / 2, 120 - 32, 160, 26, loc::gettext("unlock play modes"), 0);
|
||||
offset = 0;
|
||||
#endif
|
||||
option(loc::gettext("invincibility"), !ingame_titlemode || !incompetitive());
|
||||
option(loc::gettext("slowdown"), !ingame_titlemode || !incompetitive());
|
||||
|
@ -6879,7 +6975,20 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("return"));
|
||||
menuyoff = 0;
|
||||
maxspacing = 15;
|
||||
|
||||
auto_buttons = false;
|
||||
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 - 24 - 8, 160, 12, loc::gettext("invincibility"), offset + 1, map.invincibility);
|
||||
touch::create_slider_button((320 - 160) / 2, 120 - 16, 160, 48, loc::gettext("game speed"), &slowdown, 12, 30);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 + 32, 160, 12, loc::gettext("animated backgrounds"), offset + 3, !colourblindmode);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 + 48, 160, 12, loc::gettext("screen effects"), offset + 4, !noflashingmode);
|
||||
touch::create_toggle_button((320 - 160) / 2, 120 + 64, 160, 12, loc::gettext("text outline"), offset + 5, !graphics.notextoutline);
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), offset + 6);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1);
|
||||
break;
|
||||
}
|
||||
case Menu::controller:
|
||||
option(loc::gettext("analog stick sensitivity"));
|
||||
option(loc::gettext("bind flip"));
|
||||
|
@ -6890,8 +6999,27 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("return"));
|
||||
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;
|
||||
|
||||
auto_buttons = false;
|
||||
|
||||
touch::create_menu_button((320 - 160) / 2, 120 - 32, 160, 26, loc::gettext("control style"), 1, false);
|
||||
|
||||
touch::create_slider_button((320 - 160) / 2, 120 + 16, 160, 48, loc::gettext("ui scale"), &touch::scale, 5, 20);
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), 2);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1);
|
||||
|
||||
break;
|
||||
case Menu::language:
|
||||
auto_buttons = false;
|
||||
if (loc::languagelist.empty())
|
||||
{
|
||||
option(loc::gettext("ok"));
|
||||
|
@ -6899,25 +7027,59 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
}
|
||||
else
|
||||
{
|
||||
int button_count = -1;
|
||||
for (size_t i = 0; i < loc::languagelist.size(); i++)
|
||||
{
|
||||
int button_x = 0;
|
||||
int button_y = 0;
|
||||
bool spawn_buttons = false;
|
||||
if (i >= (languagepage * 12))
|
||||
{
|
||||
spawn_buttons = true;
|
||||
button_count++;
|
||||
button_x = (button_count >= 6) ? 240 : 80;
|
||||
button_y = 32 + 26 * (button_count % 6);
|
||||
if (button_count >= 12)
|
||||
{
|
||||
spawn_buttons = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (loc::languagelist[i].nativename.empty())
|
||||
{
|
||||
option(loc::languagelist[i].code.c_str());
|
||||
|
||||
if (spawn_buttons)
|
||||
{
|
||||
int button_width = SDL_max(136, font::len(PR_1X, loc::languagelist[i].code.c_str()) + 16);
|
||||
touch::create_menu_button(button_x - button_width / 2, button_y, button_width, 24, loc::languagelist[i].code.c_str(), i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Uint8 flags = PR_FONT_IDX(loc::languagelist[i].font_idx, loc::languagelist[i].rtl);
|
||||
option(
|
||||
loc::languagelist[i].nativename.c_str(),
|
||||
true,
|
||||
PR_FONT_IDX(loc::languagelist[i].font_idx, loc::languagelist[i].rtl)
|
||||
flags
|
||||
);
|
||||
|
||||
if (spawn_buttons)
|
||||
{
|
||||
int button_width = SDL_max(136, font::len(flags, loc::languagelist[i].nativename.c_str()) + 16);
|
||||
touch::create_menu_button_flags(button_x - button_width / 2, button_y, button_width, 24, loc::languagelist[i].nativename.c_str(), i, flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
menuyoff = 70-(menuoptions.size()*10);
|
||||
maxspacing = 5;
|
||||
}
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), -2);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("ok"), -3);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), -1);
|
||||
|
||||
break;
|
||||
case Menu::translator_main:
|
||||
option(loc::gettext("translator options"));
|
||||
|
@ -6988,7 +7150,8 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
menuxoff = 20;
|
||||
menuyoff = 55-(menuoptions.size()*10);
|
||||
menuspacing = 5;
|
||||
return; // skip automatic centering, will turn out bad with scripts list
|
||||
auto_center = false;
|
||||
break;
|
||||
case Menu::translator_maintenance:
|
||||
option(loc::gettext("sync language files"));
|
||||
option(loc::gettext("global statistics"), false);
|
||||
|
@ -7015,6 +7178,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("no, return to options"));
|
||||
option(loc::gettext("yes, enable"));
|
||||
menuyoff = 64;
|
||||
buttonyoff = -24;
|
||||
break;
|
||||
case Menu::setslowdown:
|
||||
option(loc::gettext("normal speed"));
|
||||
|
@ -7032,12 +7196,19 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("unlock secret lab"), !unlock[Unlock_SECRETLAB]);
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = -20;
|
||||
buttonscentered = true;
|
||||
break;
|
||||
case Menu::credits:
|
||||
option(loc::gettext("next page"));
|
||||
option(loc::gettext("last page"));
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 64;
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("last"), 1);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), 2);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), 0);
|
||||
auto_buttons = false;
|
||||
|
||||
break;
|
||||
case Menu::credits2:
|
||||
case Menu::credits25:
|
||||
|
@ -7050,12 +7221,22 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("previous page"));
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 64;
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), 1);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), 2);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("next"), 0);
|
||||
auto_buttons = false;
|
||||
break;
|
||||
case Menu::credits6:
|
||||
option(loc::gettext("first page"));
|
||||
option(loc::gettext("previous page"));
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 64;
|
||||
|
||||
touch::create_menu_button(46 - 16, 200, 76, 26, loc::gettext("previous"), 1);
|
||||
touch::create_menu_button(122, 200, 76, 26, loc::gettext("return"), 2);
|
||||
touch::create_menu_button(198 + 16, 200, 76, 26, loc::gettext("first"), 0);
|
||||
auto_buttons = false;
|
||||
break;
|
||||
case Menu::play:
|
||||
{
|
||||
|
@ -7170,6 +7351,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
}
|
||||
else
|
||||
{
|
||||
buttonscentered = true;
|
||||
if (save_exists())
|
||||
{
|
||||
option(loc::gettext("continue"));
|
||||
|
@ -7183,7 +7365,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
{
|
||||
option(loc::gettext("secret lab"));
|
||||
}
|
||||
option(loc::gettext("play modes"));
|
||||
option(loc::gettext("play modes"), true, PR_RTL_XFLIP, false); // Disable an auto button for play modes for now, we haven't done the menu
|
||||
if (save_exists())
|
||||
{
|
||||
option(loc::gettext("new game"));
|
||||
|
@ -7213,6 +7395,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("start new game"));
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 64;
|
||||
buttonyoff = -32;
|
||||
break;
|
||||
case Menu::playmodes:
|
||||
option(loc::gettext("time trials"), !nocompetitive_unless_translator());
|
||||
|
@ -7222,6 +7405,8 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("return"));
|
||||
menuyoff = 8;
|
||||
maxspacing = 20;
|
||||
|
||||
buttonscentered = true;
|
||||
break;
|
||||
case Menu::intermissionmenu:
|
||||
option(loc::gettext("play intermission 1"));
|
||||
|
@ -7253,6 +7438,12 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
option(loc::gettext("continue from quicksave"));
|
||||
option(loc::gettext("return"));
|
||||
menuyoff = 20;
|
||||
auto_buttons = false;
|
||||
|
||||
|
||||
touch::create_menu_button(17, 65 - 20 - 32, 286, 90, "", 0);
|
||||
touch::create_menu_button(17, 65 - 20 + 64, 286, 90, "", 1);
|
||||
touch::create_menu_button(17, 65 - 20 + 160, 286, 26, loc::gettext("return"), 2);
|
||||
break;
|
||||
case Menu::startnodeathmode:
|
||||
option(loc::gettext("disable cutscenes"));
|
||||
|
@ -7334,25 +7525,68 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
|||
break;
|
||||
}
|
||||
|
||||
// Automatically center the menu. We must check the width of the menu with the initial horizontal spacing.
|
||||
// If it's too wide, reduce the horizontal spacing by 5 and retry.
|
||||
// Try to limit the menu width to 272 pixels: 320 minus 16*2 for square brackets, minus 8*2 padding.
|
||||
// The square brackets fall outside the menu width (i.e. selected menu options are printed 16 pixels to the left)
|
||||
bool done_once = false;
|
||||
int menuwidth = 0;
|
||||
for (; !done_once || (menuwidth > 272 && menuspacing > 0); maxspacing -= 5)
|
||||
if (auto_center)
|
||||
{
|
||||
done_once = true;
|
||||
menuspacing = maxspacing;
|
||||
menuwidth = 0;
|
||||
for (size_t i = 0; i < menuoptions.size(); i++)
|
||||
// Automatically center the menu. We must check the width of the menu with the initial horizontal spacing.
|
||||
// If it's too wide, reduce the horizontal spacing by 5 and retry.
|
||||
// Try to limit the menu width to 272 pixels: 320 minus 16*2 for square brackets, minus 8*2 padding.
|
||||
// The square brackets fall outside the menu width (i.e. selected menu options are printed 16 pixels to the left)
|
||||
bool done_once = false;
|
||||
int menuwidth = 0;
|
||||
for (; !done_once || (menuwidth > 272 && menuspacing > 0); maxspacing -= 5)
|
||||
{
|
||||
int width = i*menuspacing + font::len(menuoptions[i].print_flags, menuoptions[i].text);
|
||||
if (width > menuwidth)
|
||||
menuwidth = width;
|
||||
done_once = true;
|
||||
menuspacing = maxspacing;
|
||||
menuwidth = 0;
|
||||
for (size_t i = 0; i < menuoptions.size(); i++)
|
||||
{
|
||||
int width = i * menuspacing + font::len(menuoptions[i].print_flags, menuoptions[i].text);
|
||||
if (width > menuwidth)
|
||||
menuwidth = width;
|
||||
}
|
||||
}
|
||||
menuxoff = (320 - menuwidth) / 2;
|
||||
}
|
||||
|
||||
if (auto_buttons)
|
||||
{
|
||||
int base_y = 128 + menuyoff + buttonyoff;
|
||||
|
||||
if (buttonscentered)
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 0; i < menuoptions.size(); i++)
|
||||
{
|
||||
if (menuoptions[i].auto_button)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
base_y = (240 - count * (button_height + button_spacing)) / 2;
|
||||
}
|
||||
|
||||
int offset = 0;
|
||||
for (int i = 0; i < (int) menuoptions.size(); i++)
|
||||
{
|
||||
if (menuoptions[i].auto_button)
|
||||
{
|
||||
int button_width = SDL_max(160, font::len(menuoptions[i].print_flags, menuoptions[i].text) + 16);
|
||||
touch::create_menu_button(
|
||||
(320 - button_width) / 2,
|
||||
base_y + offset * (button_height + button_spacing),
|
||||
button_width,
|
||||
button_height,
|
||||
menuoptions[i].text,
|
||||
i,
|
||||
menuoptions[i].active
|
||||
);
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
}
|
||||
menuxoff = (320-menuwidth)/2;
|
||||
|
||||
touch::on_menu_create();
|
||||
}
|
||||
|
||||
bool Game::can_unlock_ndm(void)
|
||||
|
@ -7721,6 +7955,8 @@ static void returntoingametemp(void)
|
|||
{
|
||||
extern Game game;
|
||||
game.returntomenu(game.kludge_ingametemp);
|
||||
// Hacky fix to prevent touch buttons from being stuck on the screen
|
||||
touch::remove_dynamic_buttons();
|
||||
}
|
||||
|
||||
static void returntoedsettings(void)
|
||||
|
|
|
@ -31,6 +31,7 @@ struct MenuOption
|
|||
char text[MENU_TEXT_BYTES];
|
||||
bool active;
|
||||
uint32_t print_flags;
|
||||
bool auto_button;
|
||||
};
|
||||
|
||||
//Menu IDs
|
||||
|
@ -64,6 +65,7 @@ namespace Menu
|
|||
audiooptions,
|
||||
accessibility,
|
||||
controller,
|
||||
touch_input,
|
||||
language,
|
||||
translator_main,
|
||||
translator_options,
|
||||
|
@ -386,12 +388,13 @@ public:
|
|||
int menuspacing;
|
||||
std::vector<MenuStackFrame> menustack;
|
||||
|
||||
void inline option(const char* text, bool active = true, uint32_t print_flags = PR_RTL_XFLIP)
|
||||
void inline option(const char* text, bool active = true, uint32_t print_flags = PR_RTL_XFLIP, bool auto_button = true)
|
||||
{
|
||||
MenuOption menuoption;
|
||||
SDL_strlcpy(menuoption.text, text, sizeof(menuoption.text));
|
||||
menuoption.active = active;
|
||||
menuoption.print_flags = print_flags;
|
||||
menuoption.auto_button = auto_button;
|
||||
menuoptions.push_back(menuoption);
|
||||
}
|
||||
|
||||
|
@ -602,6 +605,8 @@ public:
|
|||
int old_screenshot_border_timer;
|
||||
int screenshot_border_timer;
|
||||
bool screenshot_saved_success;
|
||||
|
||||
int languagepage;
|
||||
};
|
||||
|
||||
#ifndef GAME_DEFINITION
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -429,6 +429,11 @@ 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_button_globe = LoadImage("graphics/buttons/button_globe.png");
|
||||
|
||||
im_sprites_translated = NULL;
|
||||
im_flipsprites_translated = NULL;
|
||||
|
||||
|
@ -476,6 +481,11 @@ void GraphicsResources::destroy(void)
|
|||
|
||||
CLEAR(im_sprites_translated);
|
||||
CLEAR(im_flipsprites_translated);
|
||||
|
||||
CLEAR(im_button_left);
|
||||
CLEAR(im_button_right);
|
||||
CLEAR(im_button_map);
|
||||
CLEAR(im_button_globe);
|
||||
#undef CLEAR
|
||||
|
||||
VVV_freefunc(SDL_FreeSurface, im_sprites_surf);
|
||||
|
|
|
@ -48,6 +48,12 @@ 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_Texture* im_button_globe;
|
||||
};
|
||||
|
||||
SDL_Surface* LoadImageSurface(const char* filename);
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#include <Input.h>
|
||||
|
||||
#include <tinyxml2.h>
|
||||
#include <vector>
|
||||
|
||||
|
@ -23,6 +25,7 @@
|
|||
#include "RoomnameTranslator.h"
|
||||
#include "Screen.h"
|
||||
#include "Script.h"
|
||||
#include "Touch.h"
|
||||
#include "UtilityClass.h"
|
||||
#include "Vlogging.h"
|
||||
|
||||
|
@ -385,7 +388,7 @@ static void slidermodeinput(void)
|
|||
*user_changing_volume = SDL_clamp(*user_changing_volume, 0, USER_VOLUME_MAX);
|
||||
}
|
||||
|
||||
static void menuactionpress(void)
|
||||
void menuactionpress(void)
|
||||
{
|
||||
if (game.menutestmode)
|
||||
{
|
||||
|
@ -422,6 +425,17 @@ static void menuactionpress(void)
|
|||
|
||||
#undef OPTION_ID
|
||||
|
||||
// Special case for touch input: language button!
|
||||
if (option_id == -1)
|
||||
{
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
loc::loadlanguagelist();
|
||||
loc::pre_title_lang_menu = false;
|
||||
game.createmenu(Menu::language);
|
||||
game.currentmenuoption = loc::languagelist_curlang;
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
}
|
||||
|
||||
switch (option_id)
|
||||
{
|
||||
|
@ -453,7 +467,14 @@ static void menuactionpress(void)
|
|||
case 2:
|
||||
//Options
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::options);
|
||||
if (key.using_touch)
|
||||
{
|
||||
game.createmenu(Menu::gameplayoptions);
|
||||
}
|
||||
else
|
||||
{
|
||||
game.createmenu(Menu::options);
|
||||
}
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
case 3:
|
||||
|
@ -707,6 +728,22 @@ static void menuactionpress(void)
|
|||
gameScreen.toggleVSync();
|
||||
game.savestatsandsettings_menu();
|
||||
}
|
||||
if (game.currentmenuoption == -2)
|
||||
{
|
||||
// gameplay menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::gameplayoptions, true);
|
||||
map.nexttowercolour();
|
||||
processed = true;
|
||||
}
|
||||
if (game.currentmenuoption == -1)
|
||||
{
|
||||
// audio menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::audiooptions, true);
|
||||
map.nexttowercolour();
|
||||
processed = true;
|
||||
}
|
||||
if (!processed)
|
||||
{
|
||||
//back
|
||||
|
@ -872,6 +909,22 @@ static void menuactionpress(void)
|
|||
break;
|
||||
case Menu::accessibility:
|
||||
{
|
||||
if (game.currentmenuoption == -2)
|
||||
{
|
||||
// touch menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::touch_input, true);
|
||||
map.nexttowercolour();
|
||||
}
|
||||
if (game.currentmenuoption == -1)
|
||||
{
|
||||
// gameplay menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::gameplayoptions, true);
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
}
|
||||
|
||||
int accessibilityoffset = 0;
|
||||
#if !defined(MAKEANDPLAY)
|
||||
accessibilityoffset = 1;
|
||||
|
@ -1025,6 +1078,30 @@ static void menuactionpress(void)
|
|||
map.nexttowercolour();
|
||||
}
|
||||
|
||||
if (game.currentmenuoption == -2)
|
||||
{
|
||||
// accessibility menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::accessibility, true);
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
}
|
||||
if (game.currentmenuoption == -1)
|
||||
{
|
||||
// graphics menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::graphicoptions, true);
|
||||
map.nexttowercolour();
|
||||
}
|
||||
|
||||
if (game.currentmenuoption == -3)
|
||||
{
|
||||
// For touch: toggle translucent roomname bg
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
graphics.translucentroomname = !graphics.translucentroomname;
|
||||
game.savestatsandsettings_menu();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case Menu::options:
|
||||
|
@ -1055,12 +1132,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)
|
||||
{
|
||||
|
@ -1129,6 +1212,22 @@ static void menuactionpress(void)
|
|||
map.nexttowercolour();
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
}
|
||||
|
||||
if (game.currentmenuoption == -2)
|
||||
{
|
||||
// gameplay menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::graphicoptions, true);
|
||||
map.nexttowercolour();
|
||||
}
|
||||
if (game.currentmenuoption == -1)
|
||||
{
|
||||
// touch input menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::touch_input, true);
|
||||
map.nexttowercolour();
|
||||
}
|
||||
|
||||
break;
|
||||
case Menu::language:
|
||||
{
|
||||
|
@ -1136,32 +1235,84 @@ static void menuactionpress(void)
|
|||
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
|
||||
if (loc::languagelist.size() != 0 && (unsigned)game.currentmenuoption < loc::languagelist.size())
|
||||
if (game.currentmenuoption == -3)
|
||||
{
|
||||
/* Update code also used in KeyPoll.cpp. */
|
||||
loc::languagelist_curlang = game.currentmenuoption;
|
||||
loc::lang = loc::languagelist[game.currentmenuoption].code;
|
||||
loc::loadtext(false);
|
||||
loc::lang_set = loc::lang_set_current;
|
||||
graphics.grphx.init_translations();
|
||||
// return
|
||||
|
||||
if (loc::pre_title_lang_menu)
|
||||
{
|
||||
/* Make the title screen appear, we haven't seen it yet.
|
||||
* game.returnmenu() works because Menu::mainmenu
|
||||
* is created before the language menu. */
|
||||
game.menustart = false;
|
||||
loc::pre_title_lang_menu = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
map.nexttowercolour();
|
||||
game.currentmenuoption = loc::languagelist_curlang;
|
||||
}
|
||||
|
||||
game.returnmenu();
|
||||
}
|
||||
else if (game.currentmenuoption == -2)
|
||||
{
|
||||
// go left a page (or wrap to end)
|
||||
game.languagepage = POS_MOD(game.languagepage - 1, (int) SDL_ceilf(loc::languagelist.size() / 12.0));
|
||||
loc::loadlanguagelist();
|
||||
game.createmenu(Menu::language, true);
|
||||
game.currentmenuoption = loc::languagelist_curlang;
|
||||
map.nexttowercolour();
|
||||
}
|
||||
else if (game.currentmenuoption == -1)
|
||||
{
|
||||
// go right a page (or wrap to start)
|
||||
game.languagepage = POS_MOD(game.languagepage + 1, (int) SDL_ceilf(loc::languagelist.size() / 12.0));
|
||||
loc::loadlanguagelist();
|
||||
game.createmenu(Menu::language, true);
|
||||
game.currentmenuoption = loc::languagelist_curlang;
|
||||
map.nexttowercolour();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (loc::languagelist.size() != 0 && (unsigned)game.currentmenuoption < loc::languagelist.size())
|
||||
{
|
||||
/* Update code also used in KeyPoll.cpp. */
|
||||
loc::languagelist_curlang = game.currentmenuoption;
|
||||
loc::lang = loc::languagelist[game.currentmenuoption].code;
|
||||
loc::loadtext(false);
|
||||
loc::lang_set = loc::lang_set_current;
|
||||
graphics.grphx.init_translations();
|
||||
}
|
||||
|
||||
if (prev_lang != loc::lang)
|
||||
{
|
||||
recomputetextboxes();
|
||||
}
|
||||
|
||||
if (!key.using_touch)
|
||||
{
|
||||
if (loc::pre_title_lang_menu)
|
||||
{
|
||||
/* Make the title screen appear, we haven't seen it yet.
|
||||
* game.returnmenu() works because Menu::mainmenu
|
||||
* is created before the language menu. */
|
||||
game.menustart = false;
|
||||
loc::pre_title_lang_menu = false;
|
||||
}
|
||||
|
||||
game.returnmenu();
|
||||
map.nexttowercolour();
|
||||
}
|
||||
else
|
||||
{
|
||||
// We need to respawn the buttons
|
||||
loc::loadlanguagelist();
|
||||
game.createmenu(Menu::language, true);
|
||||
game.currentmenuoption = loc::languagelist_curlang;
|
||||
}
|
||||
}
|
||||
|
||||
if (loc::pre_title_lang_menu)
|
||||
{
|
||||
/* Make the title screen appear, we haven't seen it yet.
|
||||
* game.returnmenu() works because Menu::mainmenu
|
||||
* is created before the language menu. */
|
||||
game.menustart = false;
|
||||
loc::pre_title_lang_menu = false;
|
||||
}
|
||||
|
||||
if (prev_lang != loc::lang)
|
||||
{
|
||||
recomputetextboxes();
|
||||
}
|
||||
|
||||
game.returnmenu();
|
||||
map.nexttowercolour();
|
||||
game.savestatsandsettings_menu();
|
||||
|
||||
break;
|
||||
|
@ -1975,6 +2126,40 @@ static void menuactionpress(void)
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case Menu::touch_input:
|
||||
switch (game.currentmenuoption)
|
||||
{
|
||||
case -2:
|
||||
// audio menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::audiooptions, true);
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
case -1:
|
||||
// accessibility menu
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.createmenu(Menu::accessibility, true);
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
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 +2532,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) && !key.pressed_android_back)
|
||||
{
|
||||
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) || key.pressed_android_back)
|
||||
{
|
||||
game.jumpheld = true;
|
||||
}
|
||||
|
@ -2385,7 +2581,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) || key.pressed_android_back))
|
||||
{
|
||||
if (game.currentmenuname == Menu::language && loc::pre_title_lang_menu)
|
||||
{
|
||||
|
@ -2405,8 +2601,16 @@ void titleinput(void)
|
|||
}
|
||||
else if (game.currentmenuname == Menu::mainmenu)
|
||||
{
|
||||
game.createmenu(Menu::youwannaquit);
|
||||
map.nexttowercolour();
|
||||
if (key.pressed_android_back)
|
||||
{
|
||||
// Minimize the game!!! (Android only)
|
||||
SDL_MinimizeWindow(gameScreen.m_window);
|
||||
}
|
||||
else
|
||||
{
|
||||
game.createmenu(Menu::youwannaquit);
|
||||
map.nexttowercolour();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2516,6 +2720,7 @@ void titleinput(void)
|
|||
{
|
||||
slidermodeinput();
|
||||
}
|
||||
touch::update_sliders();
|
||||
}
|
||||
|
||||
if (game.currentmenuoption < 0) game.currentmenuoption = game.menuoptions.size()-1;
|
||||
|
@ -2562,16 +2767,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 +2789,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 +2806,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 +2843,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 +3189,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;
|
||||
|
@ -2994,8 +3206,6 @@ void gameinput(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void mapmenuactionpress(bool version2_2);
|
||||
|
||||
void mapinput(void)
|
||||
{
|
||||
const bool version2_2 = GlitchrunnerMode_less_than_or_equal(Glitchrunner2_2);
|
||||
|
@ -3099,15 +3309,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,9 +3325,10 @@ 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(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map) || touch::button_tapped(TOUCH_BUTTON_MAP_BACK)) game.press_map = true;
|
||||
if (key.isDown(27) && !game.mapheld)
|
||||
{
|
||||
touch::remove_dynamic_buttons();
|
||||
game.mapheld = true;
|
||||
if (game.menupage < 9
|
||||
|| (game.menupage >= 20 && game.menupage <= 21))
|
||||
|
@ -3137,7 +3348,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
|
||||
|
@ -3204,7 +3419,7 @@ void mapinput(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void mapmenuactionpress(const bool version2_2)
|
||||
void mapmenuactionpress(const bool version2_2)
|
||||
{
|
||||
switch (game.menupage)
|
||||
{
|
||||
|
@ -3311,7 +3526,14 @@ static void mapmenuactionpress(const bool version2_2)
|
|||
|
||||
// Set this before we create the menu
|
||||
game.kludge_ingametemp = game.currentmenuname;
|
||||
game.createmenu(Menu::options);
|
||||
if (key.using_touch)
|
||||
{
|
||||
game.createmenu(Menu::gameplayoptions);
|
||||
}
|
||||
else
|
||||
{
|
||||
game.createmenu(Menu::options);
|
||||
}
|
||||
map.nexttowercolour();
|
||||
break;
|
||||
case 32:
|
||||
|
@ -3338,11 +3560,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 +3582,13 @@ 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 (touch::button_tapped(TOUCH_BUTTON_MAP_BACK))
|
||||
{
|
||||
// Close teleporter menu
|
||||
graphics.resumegamemode = true;
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
}
|
||||
else if (key.isDown(27))
|
||||
{
|
||||
if (!map.custommode || map.custommodeforreal)
|
||||
{
|
||||
|
@ -3482,7 +3715,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 +3763,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++;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef INPUT_H
|
||||
#define INPUT_H
|
||||
|
||||
void menuactionpress(void);
|
||||
void mapmenuactionpress(const bool version2_2);
|
||||
|
||||
void titleinput(void);
|
||||
|
||||
void gameinput(void);
|
||||
|
|
|
@ -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,25 @@ bool cycle_language(bool should_recompute_textboxes)
|
|||
return should_recompute_textboxes;
|
||||
}
|
||||
|
||||
static void remove_finger(int i)
|
||||
{
|
||||
for (int j = 0; j < (int)touch::all_buttons.size(); j++)
|
||||
{
|
||||
if (touch::all_buttons[j]->fingerId == touch::fingers[i].id)
|
||||
{
|
||||
if (touch::all_buttons[j]->active && touch::all_buttons[j]->pressed && touch::all_buttons[j]->down)
|
||||
{
|
||||
touch::on_button_up(touch::all_buttons[j]);
|
||||
}
|
||||
touch::all_buttons[j]->down = false;
|
||||
touch::all_buttons[j]->pressed = false;
|
||||
touch::all_buttons[j]->fingerId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
touch::fingers.erase(touch::fingers.begin() + i);
|
||||
}
|
||||
|
||||
void KeyPoll::Poll(void)
|
||||
{
|
||||
static int raw_mousex = 0;
|
||||
|
@ -224,6 +246,14 @@ 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();
|
||||
|
||||
pressed_android_back = false;
|
||||
|
||||
while (SDL_PollEvent(&evt))
|
||||
{
|
||||
switch (evt.type)
|
||||
|
@ -238,6 +268,11 @@ void KeyPoll::Poll(void)
|
|||
pressedbackspace = true;
|
||||
}
|
||||
|
||||
if (evt.key.keysym.sym == SDLK_AC_BACK)
|
||||
{
|
||||
pressed_android_back = true;
|
||||
}
|
||||
|
||||
#ifdef __APPLE__ /* OSX prefers the command keys over the alt keys. -flibit */
|
||||
altpressed = keymap[SDLK_LGUI] || keymap[SDLK_RGUI];
|
||||
#else
|
||||
|
@ -439,6 +474,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 +610,11 @@ void KeyPoll::Poll(void)
|
|||
switch (evt.type)
|
||||
{
|
||||
case SDL_KEYDOWN:
|
||||
if (evt.key.keysym.sym != SDLK_AC_BACK)
|
||||
{
|
||||
using_touch = false;
|
||||
}
|
||||
|
||||
if (evt.key.repeat == 0)
|
||||
{
|
||||
hidemouse = true;
|
||||
|
@ -528,6 +623,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 +656,8 @@ void KeyPoll::Poll(void)
|
|||
{
|
||||
recomputetextboxes();
|
||||
}
|
||||
|
||||
touch::update_buttons();
|
||||
}
|
||||
|
||||
bool KeyPoll::isDown(SDL_Keycode key)
|
||||
|
|
|
@ -72,6 +72,9 @@ public:
|
|||
|
||||
bool linealreadyemptykludge;
|
||||
|
||||
bool using_touch;
|
||||
bool pressed_android_back;
|
||||
|
||||
private:
|
||||
std::map<SDL_JoystickID, SDL_GameController*> controllers;
|
||||
std::map<SDL_GameControllerButton, bool> buttonmap;
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "Enums.h"
|
||||
#include "Map.h"
|
||||
#include "Script.h"
|
||||
#include "Touch.h"
|
||||
#include "UtilityClass.h"
|
||||
|
||||
static inline void titleupdatetextcol(void)
|
||||
|
@ -227,6 +228,7 @@ void maprenderfixed(void)
|
|||
{
|
||||
graphics.menuoffset = threshold;
|
||||
//go back to gamemode!
|
||||
touch::remove_dynamic_buttons();
|
||||
game.mapheld = true;
|
||||
game.gamestate = GAMEMODE;
|
||||
graphics.resumegamemode = false;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
@ -2570,6 +2571,8 @@ void scriptclass::startgamemode(const enum StartMode mode)
|
|||
}
|
||||
}
|
||||
|
||||
touch::remove_dynamic_buttons();
|
||||
|
||||
/* Containers which need to be reset before gameplay starts
|
||||
* ex. before custom levels get loaded */
|
||||
|
||||
|
|
|
@ -0,0 +1,809 @@
|
|||
#include "Touch.h"
|
||||
|
||||
#include <SDL.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "ButtonGlyphs.h"
|
||||
#include "Constants.h"
|
||||
#include "CustomLevels.h"
|
||||
#include "Editor.h"
|
||||
#include "Entity.h"
|
||||
#include "FileSystemUtils.h"
|
||||
#include "Font.h"
|
||||
#include "Game.h"
|
||||
#include "GlitchrunnerMode.h"
|
||||
#include "Graphics.h"
|
||||
#include "GraphicsResources.h"
|
||||
#include "Input.h"
|
||||
#include "Localization.h"
|
||||
#include "KeyPoll.h"
|
||||
#include "Map.h"
|
||||
#include "Music.h"
|
||||
#include "Screen.h"
|
||||
#include "Script.h"
|
||||
#include "UtilityClass.h"
|
||||
|
||||
namespace touch
|
||||
{
|
||||
std::vector<VVV_Finger> fingers;
|
||||
TouchButton buttons[NUM_TOUCH_BUTTONS];
|
||||
std::vector<TouchButton> dynamic_buttons;
|
||||
std::vector<TouchButton*> all_buttons;
|
||||
bool use_buttons;
|
||||
int scale;
|
||||
bool textbox_style;
|
||||
bool scroll;
|
||||
|
||||
void refresh_all_buttons(void)
|
||||
{
|
||||
all_buttons.clear();
|
||||
|
||||
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
|
||||
{
|
||||
all_buttons.push_back(&buttons[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < dynamic_buttons.size(); i++)
|
||||
{
|
||||
all_buttons.push_back(&dynamic_buttons[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int get_rect(TouchButton* button, SDL_Rect* rect)
|
||||
{
|
||||
rect->x = button->x;
|
||||
rect->y = button->y - scroll;
|
||||
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;
|
||||
use_buttons = false;
|
||||
textbox_style = false;
|
||||
|
||||
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
|
||||
{
|
||||
buttons[i].image = NULL;
|
||||
buttons[i].text = "";
|
||||
buttons[i].active = false;
|
||||
buttons[i].pressed = false;
|
||||
buttons[i].down = false;
|
||||
buttons[i].fingerId = -1;
|
||||
buttons[i].core = true;
|
||||
buttons[i].ui = true;
|
||||
buttons[i].type = TOUCH_BUTTON_TYPE_NONE;
|
||||
buttons[i].id = -1;
|
||||
buttons[i].disabled = false;
|
||||
buttons[i].checked = false;
|
||||
buttons[i].flags = 0;
|
||||
}
|
||||
|
||||
refresh_all_buttons();
|
||||
}
|
||||
|
||||
TouchButton create_button(int x, int y, int width, int height, std::string text)
|
||||
{
|
||||
TouchButton button;
|
||||
button.x = x;
|
||||
button.y = y;
|
||||
button.width = width;
|
||||
button.height = height;
|
||||
button.image = NULL;
|
||||
button.text = text;
|
||||
button.active = true;
|
||||
button.core = false;
|
||||
button.ui = false;
|
||||
button.down = false;
|
||||
button.pressed = false;
|
||||
button.fingerId = -1;
|
||||
button.type = TOUCH_BUTTON_TYPE_NONE;
|
||||
button.id = -1;
|
||||
button.disabled = false;
|
||||
button.checked = false;
|
||||
button.flags = 0;
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
/* Helper function to create menu buttons (very common) in a single line */
|
||||
void create_menu_button(int x, int y, int width, int height, std::string text, int id)
|
||||
{
|
||||
TouchButton button = create_button(x, y, width, height, text);
|
||||
button.type = TOUCH_BUTTON_TYPE_MENU;
|
||||
button.id = id;
|
||||
|
||||
register_button(button);
|
||||
}
|
||||
|
||||
void create_menu_button_flags(int x, int y, int width, int height, std::string text, int id, Uint8 flags)
|
||||
{
|
||||
TouchButton button = create_button(x, y, width, height, text);
|
||||
button.type = TOUCH_BUTTON_TYPE_MENU;
|
||||
button.id = id;
|
||||
button.flags = flags;
|
||||
|
||||
register_button(button);
|
||||
}
|
||||
|
||||
void create_menu_button(int x, int y, int width, int height, std::string text, int id, bool active)
|
||||
{
|
||||
TouchButton button = create_button(x, y, width, height, text);
|
||||
button.type = TOUCH_BUTTON_TYPE_MENU;
|
||||
button.id = id;
|
||||
button.disabled = !active;
|
||||
|
||||
register_button(button);
|
||||
}
|
||||
|
||||
void create_slider_button(int x, int y, int width, int height, std::string text, int* var, int minvalue, int maxvalue)
|
||||
{
|
||||
TouchButton button = create_button(x, y, width, height, text);
|
||||
button.type = TOUCH_BUTTON_TYPE_MENU_SLIDER;
|
||||
button.id = -1;
|
||||
button.disabled = false;
|
||||
button.min = minvalue;
|
||||
button.max = maxvalue;
|
||||
button.var = var;
|
||||
|
||||
register_button(button);
|
||||
}
|
||||
|
||||
void create_toggle_button(int x, int y, int width, int height, std::string text, int id, bool checked)
|
||||
{
|
||||
TouchButton button = create_button(x, y, width, height, text);
|
||||
button.type = TOUCH_BUTTON_TYPE_MENU_TOGGLE;
|
||||
button.id = id;
|
||||
button.checked = checked;
|
||||
|
||||
register_button(button);
|
||||
}
|
||||
|
||||
void register_button(TouchButton button)
|
||||
{
|
||||
dynamic_buttons.push_back(button);
|
||||
|
||||
refresh_all_buttons();
|
||||
}
|
||||
|
||||
void remove_dynamic_buttons(void)
|
||||
{
|
||||
dynamic_buttons.clear();
|
||||
refresh_all_buttons();
|
||||
}
|
||||
|
||||
void on_button_up(TouchButton* button)
|
||||
{
|
||||
bool version2_2 = GlitchrunnerMode_less_than_or_equal(Glitchrunner2_2);
|
||||
switch (button->type)
|
||||
{
|
||||
case TOUCH_BUTTON_TYPE_MENU_TOGGLE:
|
||||
button->checked = !button->checked;
|
||||
SDL_FALLTHROUGH;
|
||||
case TOUCH_BUTTON_TYPE_MENU:
|
||||
case TOUCH_BUTTON_TYPE_MENU_LANGUAGE:
|
||||
game.currentmenuoption = button->id;
|
||||
menuactionpress();
|
||||
break;
|
||||
case TOUCH_BUTTON_TYPE_MAP:
|
||||
switch (button->id)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
game.menupage = button->id;
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
break;
|
||||
case 4:
|
||||
game.menupage = 1;
|
||||
mapmenuactionpress(version2_2);
|
||||
break;
|
||||
case 5:
|
||||
game.menupage = 3;
|
||||
mapmenuactionpress(version2_2);
|
||||
break;
|
||||
case 6:
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.menupage = 10;
|
||||
break;
|
||||
case 7:
|
||||
music.playef(Sound_VIRIDIAN);
|
||||
game.menupage = 3;
|
||||
break;
|
||||
case 8:
|
||||
game.menupage = 11;
|
||||
mapmenuactionpress(version2_2);
|
||||
break;
|
||||
case 9:
|
||||
game.menupage = 20;
|
||||
mapmenuactionpress(version2_2);
|
||||
break;
|
||||
case 10:
|
||||
game.menupage = 21;
|
||||
mapmenuactionpress(version2_2);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TOUCH_BUTTON_TYPE_NONE:
|
||||
case TOUCH_BUTTON_TYPE_MENU_SLIDER:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
refresh_buttons();
|
||||
}
|
||||
|
||||
|
||||
static void setup_map_buttons(void)
|
||||
{
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].x = 16;
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].y = 211;
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].width = 56;
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].height = 26;
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].text = loc::gettext("MAP");
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].id = 0;
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].ui = false;
|
||||
|
||||
const char* tab_name;
|
||||
if (game.insecretlab)
|
||||
{
|
||||
tab_name = loc::gettext("GRAV");
|
||||
}
|
||||
else if (obj.flags[67] && !map.custommode)
|
||||
{
|
||||
tab_name = loc::gettext("SHIP");
|
||||
}
|
||||
else
|
||||
{
|
||||
tab_name = loc::gettext("CREW");
|
||||
}
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].x = 92;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].y = 211;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].width = 56;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].height = 26;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].text = tab_name;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].id = 1;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].x = 168;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].y = 211;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].width = 56;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].height = 26;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].text = loc::gettext("STATS");
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].id = 2;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].x = 244;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].y = 211;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].width = 56;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].height = 26;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].text = loc::gettext("QUIT");
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].id = 3;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].x = 80;
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].y = 104;
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].width = 160;
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].height = 30;
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].text = loc::gettext("warp to ship");
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].id = 4;
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].x = 80;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].y = 80;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].width = 160;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].height = 26;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].text = loc::gettext("save");
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].id = 5;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].x = 80;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].y = 112;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].width = 160;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].height = 26;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].text = loc::gettext("quit");
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].id = 6;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].x = 80;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].y = 128 - 16;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].width = 160;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].height = 26;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].text = loc::gettext("no, keep playing");
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].id = 9;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].x = 80;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].y = 128 + 16;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].width = 160;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].height = 26;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].text = loc::gettext("yes, return");
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].id = 10;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].x = 80;
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].y = 96 + 16;
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].width = 160;
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].height = 26;
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].text = loc::gettext("no, keep playing");
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].id = 7;
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].ui = false;
|
||||
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].x = 80;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].y = 96 + 32 + 16;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].width = 160;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].height = 26;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].text = loc::gettext("yes, quit to menu");
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].id = 8;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].type = TOUCH_BUTTON_TYPE_MAP;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].ui = false;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].x = width - ((double)(240 - (int) graphics.lerp(graphics.oldmenuoffset, graphics.menuoffset)) / 240.0) * (60 * scale);
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].y = 8;
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].width = 60 * scale;
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].height = 26 * scale;
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].text = loc::gettext("BACK");
|
||||
|
||||
setup_map_buttons();
|
||||
|
||||
// First, reset all buttons
|
||||
for (int i = 0; i < NUM_TOUCH_BUTTONS; i++)
|
||||
{
|
||||
buttons[i].active = false;
|
||||
}
|
||||
|
||||
use_buttons = true;
|
||||
|
||||
// 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)
|
||||
{
|
||||
use_buttons = false;
|
||||
}
|
||||
break;
|
||||
case TELEPORTERMODE:
|
||||
if (game.useteleporter)
|
||||
{
|
||||
buttons[TOUCH_BUTTON_LEFT].active = true;
|
||||
buttons[TOUCH_BUTTON_RIGHT].active = true;
|
||||
buttons[TOUCH_BUTTON_CONFIRM].active = true;
|
||||
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].active = true;
|
||||
}
|
||||
break;
|
||||
case MAPMODE:
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].active = true;
|
||||
if (game.menupage >= 0 && game.menupage < 4)
|
||||
{
|
||||
buttons[TOUCH_BUTTON_MAP_MAP].active = true;
|
||||
buttons[TOUCH_BUTTON_MAP_CREW].active = true;
|
||||
buttons[TOUCH_BUTTON_MAP_STATS].active = true;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT].active = true;
|
||||
}
|
||||
|
||||
if (graphics.menuoffset > 0)
|
||||
{
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].down = true;
|
||||
}
|
||||
|
||||
switch (game.menupage)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
break;
|
||||
case 1:
|
||||
if (!game.insecretlab && obj.flags[67] && !map.custommode)
|
||||
{
|
||||
buttons[TOUCH_BUTTON_MAP_SHIP_WARP].active = true;
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
case 21:
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_YES].active = true;
|
||||
buttons[TOUCH_BUTTON_SUPERGRAVITRON_NO].active = true;
|
||||
buttons[TOUCH_BUTTON_MAP_BACK].active = false;
|
||||
break;
|
||||
case 3:
|
||||
if (!game.gamesaved && !game.gamesavefailed && !game.inspecial())
|
||||
{
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_SAVE].active = true;
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].y = 112;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].y = 168;
|
||||
}
|
||||
buttons[TOUCH_BUTTON_MAP_QUIT_EXIT].active = true;
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
buttons[TOUCH_BUTTON_QUIT_NO].active = true;
|
||||
buttons[TOUCH_BUTTON_QUIT_YES].active = true;
|
||||
break;
|
||||
default:
|
||||
buttons[TOUCH_BUTTON_LEFT].active = true;
|
||||
buttons[TOUCH_BUTTON_RIGHT].active = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PRELOADER:
|
||||
use_buttons = false;
|
||||
break;
|
||||
case GAMECOMPLETE:
|
||||
case GAMECOMPLETE2:
|
||||
case EDITORMODE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void update_sliders()
|
||||
{
|
||||
SDL_Rect stretch_rect;
|
||||
graphics.get_stretch_info(&stretch_rect);
|
||||
|
||||
for (int i = 0; i < all_buttons.size(); i++)
|
||||
{
|
||||
TouchButton* button = all_buttons[i];
|
||||
|
||||
if (button->type == TOUCH_BUTTON_TYPE_MENU_SLIDER && button->pressed)
|
||||
{
|
||||
int value = *button->var;
|
||||
int range = button->max - button->min;
|
||||
float percent = (float) (value - button->min) / range;
|
||||
|
||||
int finger_x = (fingers[button->fingerId].x - stretch_rect.x) * SCREEN_WIDTH_PIXELS / stretch_rect.w;
|
||||
|
||||
int newvalue = button->min + (int) ((finger_x - button->x) / (float)button->width * range);
|
||||
if (newvalue < button->min)
|
||||
{
|
||||
newvalue = button->min;
|
||||
}
|
||||
if (newvalue > button->max)
|
||||
{
|
||||
newvalue = button->max;
|
||||
}
|
||||
|
||||
*button->var = newvalue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void render_buttons(int scale, bool ui, int r, int g, int b)
|
||||
{
|
||||
for (int i = 0; i < all_buttons.size(); i++)
|
||||
{
|
||||
TouchButton* button = all_buttons[i];
|
||||
|
||||
if (button->active && (button->ui == ui))
|
||||
{
|
||||
if (button->image != NULL)
|
||||
{
|
||||
graphics.draw_texture(button->image, button->x, button->y + (button->down ? 2 * scale : 0), scale, scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
int use_r = button->disabled ? 127 : r;
|
||||
int use_g = button->disabled ? 127 : g;
|
||||
int use_b = button->disabled ? 127 : b;
|
||||
|
||||
if (button->type == TOUCH_BUTTON_TYPE_MAP)
|
||||
{
|
||||
if (game.menupage != button->id)
|
||||
{
|
||||
use_r /= 2;
|
||||
use_g /= 2;
|
||||
use_b /= 2;
|
||||
}
|
||||
}
|
||||
|
||||
float shadow_div = 4;
|
||||
float inner_div = 1.5;
|
||||
|
||||
if (textbox_style)
|
||||
{
|
||||
shadow_div = 6;
|
||||
inner_div = 6;
|
||||
}
|
||||
|
||||
int offset = (button->down) ? 1 : 0;
|
||||
|
||||
int font_scale = (SDL_min((scale - 1), 7) << 0);
|
||||
int height = font::height(PR_CJK_LOW | font_scale | button->flags);
|
||||
|
||||
switch (button->type)
|
||||
{
|
||||
case TOUCH_BUTTON_TYPE_MENU_SLIDER:
|
||||
{
|
||||
// Find where the slider position is!
|
||||
int value = *button->var;
|
||||
int range = button->max - button->min;
|
||||
float percent = (float) (value - button->min) / range;
|
||||
int sliderpos = (int) ((button->width - 10) * percent);
|
||||
|
||||
// Draw track
|
||||
graphics.fill_rect(button->x * scale + 2, (button->y + (button->height / 2)) * scale, button->width, 4, use_r / shadow_div, use_g / shadow_div, use_b / shadow_div);
|
||||
graphics.fill_rect(button->x * scale, (button->y + (button->height / 2) - 2) * scale, button->width, 4, use_r / inner_div, use_g / inner_div, use_b / inner_div);
|
||||
|
||||
// Draw slider
|
||||
graphics.fill_rect((button->x + sliderpos + 2) * scale, (button->y + (button->height / 2) - 3) * scale, 10, 10, use_r / shadow_div, use_g / shadow_div, use_b / shadow_div);
|
||||
graphics.fill_rect((button->x + sliderpos) * scale, (button->y + (button->height / 2) - 5) * scale, 10, 10, use_r, use_g, use_b);
|
||||
graphics.fill_rect((button->x + sliderpos + 1) * scale, (button->y + (button->height / 2) - 4) * scale, 8, 8, use_r / inner_div, use_g / inner_div, use_b / inner_div);
|
||||
|
||||
|
||||
font::print(PR_CEN | PR_CJK_LOW | font_scale | button->flags, button->x + (button->width / 2) * scale, button->y * scale, button->text, use_r, use_g, use_b);
|
||||
break;
|
||||
}
|
||||
case TOUCH_BUTTON_TYPE_MENU_TOGGLE:
|
||||
graphics.draw_rect(button->x + offset * scale, button->y + offset * scale, 10, 10, use_r, use_g, use_b);
|
||||
if (button->checked)
|
||||
{
|
||||
graphics.fill_rect(button->x + 2 * scale + offset * scale, button->y + 2 * scale + offset * scale, 6, 6, use_r, use_g, use_b);
|
||||
}
|
||||
|
||||
font::print(PR_CJK_LOW | font_scale | button->flags, button->x + 16 + offset * scale, button->y + ((button->height - height) / 2 + offset) * scale, button->text, use_r, use_g, use_b);
|
||||
break;
|
||||
default:
|
||||
// This is a dumb hack for the language menu, but... if this button is NOT for the current language, darken it (unless it's negative)
|
||||
|
||||
if (game.currentmenuname == Menu::language)
|
||||
{
|
||||
if (button->id != game.currentmenuoption && button->id >= 0)
|
||||
{
|
||||
use_r /= 2;
|
||||
use_g /= 2;
|
||||
use_b /= 2;
|
||||
}
|
||||
}
|
||||
|
||||
graphics.fill_rect(button->x + 4 * scale, button->y + 4 * scale, button->width, button->height, r / shadow_div, g / shadow_div, b / shadow_div);
|
||||
|
||||
graphics.fill_rect(button->x + offset * scale, button->y + offset * scale, button->width, button->height, use_r, use_g, use_b);
|
||||
graphics.fill_rect(button->x + (offset + 2) * scale, button->y + (2 + offset) * scale, button->width - 4 * scale, button->height - 4 * scale, use_r / inner_div, use_g / inner_div, use_b / inner_div);
|
||||
if (button->type == TOUCH_BUTTON_TYPE_MENU_LANGUAGE)
|
||||
{
|
||||
graphics.set_texture_color_mod(graphics.grphx.im_button_globe, 196, 196, 255 - help.glow);
|
||||
graphics.draw_texture(graphics.grphx.im_button_globe, (button->x + 4 + offset) * scale, (button->y + 4 + offset) * scale, scale, scale);
|
||||
graphics.set_texture_color_mod(graphics.grphx.im_button_globe, 255, 255, 255);
|
||||
}
|
||||
else
|
||||
{
|
||||
font::print(PR_CEN | PR_CJK_LOW | font_scale | button->flags, button->x + (button->width / 2) + offset * scale, button->y + ((button->height - height) / 2 + offset * scale), button->text, 196, 196, 255 - help.glow);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void render_buttons(void)
|
||||
{
|
||||
render_buttons(64, 184, 208);
|
||||
}
|
||||
|
||||
void render_buttons(int r, int g, int b)
|
||||
{
|
||||
if (!key.using_touch)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
render_buttons(1, false, r, g, b);
|
||||
}
|
||||
|
||||
void render_buttons(int r, int g, int b, bool textbox_style)
|
||||
{
|
||||
touch::textbox_style = textbox_style;
|
||||
render_buttons(r, g, b);
|
||||
touch::textbox_style = false;
|
||||
}
|
||||
|
||||
void render(void)
|
||||
{
|
||||
if (!key.using_touch)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int scale = get_scale();
|
||||
refresh_buttons();
|
||||
|
||||
render_buttons(scale, true, 64, 184, 208);
|
||||
}
|
||||
|
||||
void reset(void)
|
||||
{
|
||||
for (int i = 0; i < fingers.size(); i++)
|
||||
{
|
||||
fingers[i].pressed = false;
|
||||
fingers[i].on_button = false;
|
||||
}
|
||||
}
|
||||
|
||||
void on_menu_create(void)
|
||||
{
|
||||
scroll = 0;
|
||||
}
|
||||
|
||||
void update_buttons(void)
|
||||
{
|
||||
if (!use_buttons || graphics.fademode != FADE_NONE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
SDL_Rect stretch_rect;
|
||||
graphics.get_stretch_info(&stretch_rect);
|
||||
|
||||
SDL_Point point;
|
||||
SDL_Rect rect;
|
||||
|
||||
for (int buttonId = 0; buttonId < all_buttons.size(); buttonId++)
|
||||
{
|
||||
TouchButton* button = all_buttons[buttonId];
|
||||
button->down = false;
|
||||
|
||||
for (int fingerId = 0; fingerId < fingers.size(); fingerId++)
|
||||
{
|
||||
if (button->ui)
|
||||
{
|
||||
point.x = fingers[fingerId].x;
|
||||
point.y = fingers[fingerId].y;
|
||||
}
|
||||
else
|
||||
{
|
||||
point.x = (fingers[fingerId].x - stretch_rect.x) * SCREEN_WIDTH_PIXELS / stretch_rect.w;
|
||||
point.y = (fingers[fingerId].y - stretch_rect.y) * SCREEN_HEIGHT_PIXELS / stretch_rect.h;
|
||||
}
|
||||
get_rect(button, &rect);
|
||||
|
||||
if (SDL_PointInRect(&point, &rect) && button->active && !button->disabled)
|
||||
{
|
||||
if (fingers[fingerId].pressed)
|
||||
{
|
||||
button->pressed = true;
|
||||
}
|
||||
|
||||
button->down = true;
|
||||
button->fingerId = fingers[fingerId].id;
|
||||
fingers[fingerId].on_button = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool button_tapped(TouchButtonID button)
|
||||
{
|
||||
if (use_buttons && key.using_touch && buttons[button].active && buttons[button].down && !buttons[button].disabled)
|
||||
{
|
||||
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 && use_buttons)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fingers[i].pressed)
|
||||
{
|
||||
// Consume the input, so we don't accidentally start pressing a button or anything
|
||||
fingers[i].pressed = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,132 @@
|
|||
#ifndef TOUCH_H
|
||||
#define TOUCH_H
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
#include <string>
|
||||
#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,
|
||||
|
||||
/* Map */
|
||||
TOUCH_BUTTON_MAP_MAP,
|
||||
TOUCH_BUTTON_MAP_CREW,
|
||||
TOUCH_BUTTON_MAP_STATS,
|
||||
TOUCH_BUTTON_MAP_QUIT,
|
||||
|
||||
/* Map - Warp to ship */
|
||||
TOUCH_BUTTON_MAP_SHIP_WARP,
|
||||
|
||||
/* Map - Quit buttons */
|
||||
TOUCH_BUTTON_MAP_QUIT_SAVE,
|
||||
TOUCH_BUTTON_MAP_QUIT_EXIT,
|
||||
|
||||
/* Map - Return to Secret Lab from Super Gravitron */
|
||||
TOUCH_BUTTON_SUPERGRAVITRON_NO,
|
||||
TOUCH_BUTTON_SUPERGRAVITRON_YES,
|
||||
|
||||
/* Map - Back */
|
||||
TOUCH_BUTTON_MAP_BACK,
|
||||
|
||||
/* Quit */
|
||||
TOUCH_BUTTON_QUIT_YES,
|
||||
TOUCH_BUTTON_QUIT_NO,
|
||||
|
||||
NUM_TOUCH_BUTTONS
|
||||
};
|
||||
|
||||
enum TouchButtonType
|
||||
{
|
||||
TOUCH_BUTTON_TYPE_NONE,
|
||||
TOUCH_BUTTON_TYPE_MENU,
|
||||
TOUCH_BUTTON_TYPE_MENU_LANGUAGE,
|
||||
TOUCH_BUTTON_TYPE_MENU_TOGGLE,
|
||||
TOUCH_BUTTON_TYPE_MENU_SLIDER,
|
||||
TOUCH_BUTTON_TYPE_MAP
|
||||
};
|
||||
|
||||
struct TouchButton
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
bool down; // Whether the button is currently being pressed
|
||||
bool pressed; // Whether the button was pressed down and not dragged onto
|
||||
bool active; // Whether the button is currently active, i.e. visible and usable
|
||||
bool core; // Whether the button is a "core" button, one which always exists (but not necessarily active)
|
||||
bool ui; // Whether the button is on the UI layer or not
|
||||
int id; // The ID for the button, mainly used for menu buttons
|
||||
bool disabled; // Whether the button is disabled or not (gray and can't use), different from active
|
||||
bool checked; // If this is a checkbox, whether it's checked or not
|
||||
int min; // If this is a slider, this is the minimum value
|
||||
int max; // If this is a slider, this is the maximum value
|
||||
int* var; // If this is a slider, this is the variable to modify
|
||||
std::string text; // The text for the button, if it doesn't have an image
|
||||
Uint8 flags; // Print flags
|
||||
SDL_Texture* image; // The image that gets displayed on the button, can be NULL
|
||||
SDL_FingerID fingerId;
|
||||
TouchButtonType type;
|
||||
};
|
||||
|
||||
namespace touch
|
||||
{
|
||||
extern std::vector<VVV_Finger> fingers;
|
||||
extern TouchButton buttons[NUM_TOUCH_BUTTONS];
|
||||
extern std::vector<TouchButton> dynamic_buttons;
|
||||
extern std::vector<TouchButton*> all_buttons;
|
||||
extern int scale;
|
||||
extern bool scroll;
|
||||
|
||||
void refresh_buttons(void);
|
||||
void update_sliders();
|
||||
void reset(void);
|
||||
void on_menu_create(void);
|
||||
void update_buttons(void);
|
||||
|
||||
TouchButton create_button(int x, int y, int width, int height, std::string text);
|
||||
void register_button(TouchButton button);
|
||||
|
||||
void create_menu_button(int x, int y, int width, int height, std::string text, int id);
|
||||
void create_menu_button_flags(int x, int y, int width, int height, std::string text, int id, Uint8 flags);
|
||||
void create_menu_button(int x, int y, int width, int height, std::string text, int id, bool disabled);
|
||||
void create_slider_button(int x, int y, int width, int height, std::string text, int* var, int minvalue, int maxvalue);
|
||||
void create_toggle_button(int x, int y, int width, int height, std::string text, int id, bool checked);
|
||||
|
||||
void remove_dynamic_buttons(void);
|
||||
|
||||
void on_button_up(TouchButton* button);
|
||||
|
||||
void init(void);
|
||||
void render_buttons(void);
|
||||
void render_buttons(int r, int g, int b);
|
||||
void render_buttons(int r, int g, int b, bool textbox_style);
|
||||
void render_buttons(int scale, bool ui, int r, int g, int b);
|
||||
void render(void);
|
||||
|
||||
bool button_tapped(TouchButtonID button);
|
||||
bool touching_right(void);
|
||||
bool screen_down(void);
|
||||
}
|
||||
|
||||
#endif /* TOUCH_H */
|
|
@ -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"))
|
||||
{
|
||||
|
@ -562,6 +567,9 @@ int main(int argc, char *argv[])
|
|||
/* We already do the button swapping in ButtonGlyphs, disable SDL's swapping */
|
||||
SDL_SetHintWithPriority(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS, "0", SDL_HINT_OVERRIDE);
|
||||
|
||||
/* We want to capture back inputs */
|
||||
SDL_SetHintWithPriority(SDL_HINT_ANDROID_TRAP_BACK_BUTTON, "1", SDL_HINT_OVERRIDE);
|
||||
|
||||
if(!FILESYSTEM_init(argv[0], baseDir, assetsPath, langDir, fontsDir))
|
||||
{
|
||||
vlog_error("Unable to initialize filesystem!");
|
||||
|
@ -614,6 +622,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 +824,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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
After Width: | Height: | Size: 220 B |
After Width: | Height: | Size: 387 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 378 B |
After Width: | Height: | Size: 389 B |
After Width: | Height: | Size: 259 B |
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 681 B |
After Width: | Height: | Size: 720 B |
After Width: | Height: | Size: 652 B |
After Width: | Height: | Size: 666 B |
After Width: | Height: | Size: 630 B |
After Width: | Height: | Size: 655 B |
After Width: | Height: | Size: 656 B |
|
@ -1 +1 @@
|
|||
Subproject commit 38e9da7264641c9cc69a80d09082f166d9b8eaf9
|
||||
Subproject commit fc47ca1f5f489f30e634cdd0af02d80b8a915bf4
|