diff --git a/data/languages/arabic.txt b/data/languages/arabic.txt index 744c666e9f2..ea7bdcd46c8 100644 --- a/data/languages/arabic.txt +++ b/data/languages/arabic.txt @@ -1110,6 +1110,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -1152,6 +1155,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1198,6 +1204,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Team %d == @@ -1450,6 +1460,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1517,6 +1530,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1753,6 +1769,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1801,19 +1823,28 @@ Preview Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show local player's key presses +Size of hook strength icon and number indicator == -Authed name color in scoreboard +Key Presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1906,7 +1937,7 @@ Opacity Only save improvements == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Quads are used for background decoration @@ -1972,6 +2003,9 @@ Tutorial Can't find a Tutorial server == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Loading race demo files == diff --git a/data/languages/azerbaijani.txt b/data/languages/azerbaijani.txt index 72fe1c79549..853808078e6 100644 --- a/data/languages/azerbaijani.txt +++ b/data/languages/azerbaijani.txt @@ -1541,7 +1541,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Şəffaflıq -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Teelər və istifadəçi adları kimi digər qruplara aid varlıqların qeyri-şəffaflığını düzəldin Quads are used for background decoration @@ -2039,3 +2039,37 @@ Active: Fire Active: Hook == Aktiv: Qarmaq + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/belarusian.txt b/data/languages/belarusian.txt index 6cb7a8bc800..92a60c15c3e 100644 --- a/data/languages/belarusian.txt +++ b/data/languages/belarusian.txt @@ -1326,7 +1326,7 @@ Show text entities Opacity == Непразр. -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Рэгуляванне непразрыстасці аб'ектаў іншых каманд, такіх як Tee і таблічкі з імёнамі. Show others (own team only) @@ -1867,9 +1867,19 @@ Connect address error Could not connect dummy == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + Save skin == @@ -1897,6 +1907,9 @@ Add clanmates by entering their clan below and leaving the name blank. Offline friends and clanmates will appear here. == +Toggle auto camera +== + Dummy is not allowed on this server == @@ -1909,6 +1922,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1984,6 +2000,21 @@ Hz Show client IDs (scoreboard, chat, spectator) == +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + Width of your own hook collision line == @@ -2008,6 +2039,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + [skins] Body == diff --git a/data/languages/bosnian.txt b/data/languages/bosnian.txt index dcc4037608a..9f60bd16eab 100644 --- a/data/languages/bosnian.txt +++ b/data/languages/bosnian.txt @@ -972,6 +972,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -1017,6 +1020,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1066,6 +1072,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Team %d == @@ -1348,6 +1358,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1424,6 +1437,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1699,6 +1715,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1750,19 +1772,28 @@ Preview Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show local player's key presses +Size of hook strength icon and number indicator == -Authed name color in scoreboard +Key Presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1861,7 +1892,7 @@ Only save improvements Overlay entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Quads are used for background decoration @@ -1951,13 +1982,16 @@ Stop server Run server == -Server executable not found, can't run server -== - [Start menu] Play == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server +== + Loading race demo files == diff --git a/data/languages/brazilian_portuguese.txt b/data/languages/brazilian_portuguese.txt index 4c737883940..7cabdc9a4bd 100644 --- a/data/languages/brazilian_portuguese.txt +++ b/data/languages/brazilian_portuguese.txt @@ -37,6 +37,7 @@ # Rafael Fontenelle 2024-09-02 16:02:00 # Rafael Fontenelle 2024-09-30 07:53:00 # Rafael Fontenelle 2024-11-01 17:21:00 +# Rafael Fontenelle 2025-01-03 07:05:00 ##### /authors ##### ##### translated strings ##### @@ -1206,7 +1207,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Opacidade -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Ajustar a opacidade das entidades pertencentes a outros times, tais como tees e placas de identificação Quads are used for background decoration @@ -2069,3 +2070,37 @@ Active: Fire Active: Hook == Ativo: Gancho + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== "%s" não é compatível com pnglite e não pode ser carregado por versões antigas do DDNet: + +Loading background map +== Carregando mapa de fundo + +[Spectating Camera Mode Icon] +AUTO +== AUTO + +Toggle auto camera +== Alternar câmera automática + +https://wiki.ddnet.org/wiki/Touch_controls +== https://wiki.ddnet.org/wiki/Touch_controls + +Show client IDs in name plates +== Mostrar IDs de clientes em placas de identificação + +Hook Strength +== Força do gancho + +Size of hook strength icon and number indicator +== Tamanho do ícone de força do gancho e indicador de número + +Key Presses +== Teclas pressionadas + +Size of key press icons +== Tamanho dos ícones de pressionamento de tecla + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== O servidor não pôde ser iniciado. Certifique-se de conceder a permissão de notificação nas configurações do aplicativo para que o servidor possa ser executado em segundo plano. diff --git a/data/languages/bulgarian.txt b/data/languages/bulgarian.txt index fcffffdbc78..5da4f5c7b38 100644 --- a/data/languages/bulgarian.txt +++ b/data/languages/bulgarian.txt @@ -576,6 +576,9 @@ Replay feature is disabled! The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -627,6 +630,9 @@ Loading skin files Search == +Loading background map +== + Searching == @@ -679,6 +685,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Server best: == @@ -1030,6 +1040,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1151,6 +1164,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1552,6 +1568,12 @@ Show local time always Show votes window after voting == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1636,22 +1658,31 @@ Clan plates size Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show other players' key presses +Size of hook strength icon and number indicator == -Show local player's key presses +Key Presses == -Authed name color in scoreboard +Show other players' key presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1777,7 +1808,7 @@ Overlay entities Show text entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Show others (own team only) @@ -1909,9 +1940,6 @@ Stop server Run server == -Server executable not found, can't run server -== - [Start menu] Play == @@ -1925,6 +1953,12 @@ Downloading %s: Update failed! Check log… == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server +== + Loading race demo files == diff --git a/data/languages/catalan.txt b/data/languages/catalan.txt index cc2acb78f1f..2074d272b9c 100644 --- a/data/languages/catalan.txt +++ b/data/languages/catalan.txt @@ -1215,6 +1215,9 @@ Saving settings to '%s' failed Error saving settings == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Preparing demo playback == @@ -1254,6 +1257,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1300,6 +1306,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Team %d == @@ -1513,6 +1523,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1580,6 +1593,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1780,6 +1796,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1825,16 +1847,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Hook collision line @@ -1927,7 +1958,7 @@ Opacity Only save improvements == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Quads are used for background decoration @@ -1969,6 +2000,9 @@ Loading assets Open the directory to add custom assets == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Loading race demo files == diff --git a/data/languages/chuvash.txt b/data/languages/chuvash.txt index ea60ba0661a..6bfc573e44b 100644 --- a/data/languages/chuvash.txt +++ b/data/languages/chuvash.txt @@ -579,6 +579,9 @@ Replay feature is disabled! The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -630,6 +633,9 @@ Loading skin files Search == +Loading background map +== + Searching == @@ -682,6 +688,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Server best: == @@ -1033,6 +1043,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1154,6 +1167,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1552,6 +1568,12 @@ Show local time always Show votes window after voting == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1636,22 +1658,31 @@ Clan plates size Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show other players' key presses +Size of hook strength icon and number indicator == -Show local player's key presses +Key Presses == -Authed name color in scoreboard +Show other players' key presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1777,7 +1808,7 @@ Overlay entities Show text entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Show others (own team only) @@ -1909,9 +1940,6 @@ Stop server Run server == -Server executable not found, can't run server -== - [Start menu] Play == @@ -1925,6 +1953,12 @@ Downloading %s: Update failed! Check log… == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server +== + Loading race demo files == diff --git a/data/languages/czech.txt b/data/languages/czech.txt index 670746c328d..4d164e986db 100644 --- a/data/languages/czech.txt +++ b/data/languages/czech.txt @@ -1736,7 +1736,7 @@ Opacity Only save improvements == Ukládat pouze vylepšení -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Neprůhlednost entit patřících jiným týmům jako jsou hráči a jmenovky Quads are used for background decoration @@ -1935,9 +1935,19 @@ Feet Eyes == Oči +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + Online friends (%d) == @@ -1950,12 +1960,18 @@ Add clanmates by entering their clan below and leaving the name blank. Offline friends and clanmates will appear here. == +Toggle auto camera +== + Edit touch controls == Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -2024,6 +2040,21 @@ Could not load default touch controls from file. See local console for details. Could not load touch controls from clipboard. See local console for details. == +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + Width of your own hook collision line == @@ -2033,6 +2064,9 @@ Width of others' hook collision line Preview 'Hook collisions' being pressed == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Aim == diff --git a/data/languages/danish.txt b/data/languages/danish.txt index fc989d26c81..3f6666be10f 100644 --- a/data/languages/danish.txt +++ b/data/languages/danish.txt @@ -1121,6 +1121,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -1163,6 +1166,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1209,6 +1215,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Team %d == @@ -1458,6 +1468,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1525,6 +1538,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1761,6 +1777,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1809,19 +1831,28 @@ Preview Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show local player's key presses +Size of hook strength icon and number indicator == -Authed name color in scoreboard +Key Presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1914,7 +1945,7 @@ Opacity Only save improvements == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Quads are used for background decoration @@ -1977,6 +2008,9 @@ Tutorial Can't find a Tutorial server == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Loading race demo files == diff --git a/data/languages/dutch.txt b/data/languages/dutch.txt index 410adbedee5..a30178b3cb9 100644 --- a/data/languages/dutch.txt +++ b/data/languages/dutch.txt @@ -1116,7 +1116,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Ondoorzichtigheid -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Pas de ondoorzichtigheid van entities die tot andere teams behoren aan, zoals de tee's en de naamplaten Quads are used for background decoration @@ -1261,6 +1261,9 @@ Saving settings to '%s' failed Error saving settings == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Preparing demo playback == @@ -1300,6 +1303,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1346,6 +1352,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1556,6 +1566,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1623,6 +1636,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1817,6 +1833,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1862,16 +1884,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Hook collision line @@ -1991,6 +2022,9 @@ Loading assets Open the directory to add custom assets == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Loading race demo files == diff --git a/data/languages/esperanto.txt b/data/languages/esperanto.txt index 13df65b9f95..8366f5bf096 100644 --- a/data/languages/esperanto.txt +++ b/data/languages/esperanto.txt @@ -601,6 +601,9 @@ Replay feature is disabled! The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -637,6 +640,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -686,6 +692,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Server best: == @@ -986,6 +996,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Demofile: %s == @@ -1107,6 +1120,9 @@ Remote console Console == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1592,6 +1608,12 @@ Show local time always Show votes window after voting == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1670,22 +1692,31 @@ Use team colors for name plates Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show other players' key presses +Size of hook strength icon and number indicator == -Show local player's key presses +Key Presses == -Authed name color in scoreboard +Show other players' key presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1808,7 +1839,7 @@ Overlay entities Show text entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Show others (own team only) @@ -1904,10 +1935,13 @@ Open the directory to add custom assets Can't find a Tutorial server == -Server executable not found, can't run server +Update failed! Check log… == -Update failed! Check log… +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server == Loading race demo files diff --git a/data/languages/estonian.txt b/data/languages/estonian.txt index a4a0c2afd50..0f27d14a78b 100644 --- a/data/languages/estonian.txt +++ b/data/languages/estonian.txt @@ -1713,7 +1713,7 @@ Overlay entities Show text entities == Näita teksti üksusi -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Seadista teiste tiimide üksuste läbipaistvust, nagu teed ja nimesildid Show quads @@ -1863,9 +1863,19 @@ Connect address error Could not connect dummy == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + Save skin == @@ -1893,6 +1903,9 @@ Add clanmates by entering their clan below and leaving the name blank. Offline friends and clanmates will appear here. == +Toggle auto camera +== + Dummy is not allowed on this server == @@ -1905,6 +1918,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1980,6 +1996,21 @@ Hz Show client IDs (scoreboard, chat, spectator) == +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + Width of your own hook collision line == @@ -2004,6 +2035,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + [skins] Body == diff --git a/data/languages/finnish.txt b/data/languages/finnish.txt index 3ac49e14156..d9d53908741 100644 --- a/data/languages/finnish.txt +++ b/data/languages/finnish.txt @@ -1742,7 +1742,7 @@ Overlay entities Show text entities == Näytä teksti-entiteettejä -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Säädä muiden joukkueiden entiteettien, kuten teen ja nimilaattojen, läpinäkyvyyttä Show quads @@ -1823,13 +1823,23 @@ Connect address error Could not connect dummy == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + [Spectating] Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Save skin == @@ -1863,6 +1873,9 @@ Add clanmates by entering their clan below and leaving the name blank. Offline friends and clanmates will appear here. == +Toggle auto camera +== + Dummy is not allowed on this server == @@ -1875,6 +1888,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1959,6 +1975,21 @@ Show client IDs (scoreboard, chat, spectator) Show only chat messages from team members == +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + Width of your own hook collision line == @@ -1983,6 +2014,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/french.txt b/data/languages/french.txt index 71602767201..3127e99664b 100644 --- a/data/languages/french.txt +++ b/data/languages/french.txt @@ -1194,7 +1194,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Opacité -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Ajustez l'opacité des entités appartenant à d'autres équipes, telle que les tees et les noms des joueurs Quads are used for background decoration @@ -2063,3 +2063,37 @@ Active: Hook https://wiki.ddnet.org/wiki/Mapping == https://wiki.ddnet.org/wiki/Mapping + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/galician.txt b/data/languages/galician.txt index a667fa3494f..8c060361c8f 100644 --- a/data/languages/galician.txt +++ b/data/languages/galician.txt @@ -1253,7 +1253,7 @@ Show player speed Show player target angle == Mostrar o ángulo do obxectivo do xogador -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Axusta a opacidade de entidades pertencentes a outros equipos, como os tees e os nomes. Opacity of freeze bars inside freeze @@ -1574,6 +1574,9 @@ Saving settings to '%s' failed Error saving settings == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Loading demo file from storage == @@ -1586,6 +1589,9 @@ Quitting. Please wait… Restarting. Please wait… == +Loading background map +== + Searching == @@ -1623,6 +1629,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1745,6 +1755,9 @@ Mark the end of a cut (right click to reset) Close the demo player == +Toggle auto camera +== + Export demo cut == @@ -1800,6 +1813,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1902,6 +1918,12 @@ Info Messages Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + Show client IDs (scoreboard, chat, spectator) == @@ -1920,16 +1942,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Show own player's hook collision line @@ -1983,6 +2014,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/german.txt b/data/languages/german.txt index 2af1614650e..fcc97ffd4d2 100644 --- a/data/languages/german.txt +++ b/data/languages/german.txt @@ -1236,7 +1236,7 @@ Super Team %d == Team %d -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Deckkraft von Entitäten die zu einem anderen Team gehören, z.B. Tees und Namensschilder Position: @@ -2054,3 +2054,37 @@ Active: Hook Preview 'Hook collisions' being pressed == Vorschau für 'Hakenkollisionen' gedrückt + +Loading background map +== Hintergrund-Karte laden + +[Spectating Camera Mode Icon] +AUTO +== AUTO + +Toggle auto camera +== Auto-Kamera wechseln + +https://wiki.ddnet.org/wiki/Touch_controls +== https://wiki.ddnet.org/wiki/Touch_controls + +Show client IDs in name plates +== Client-IDs in Spielernamen anzeigen + +Hook Strength +== Hakenstärke + +Size of hook strength icon and number indicator +== Größe des Hakenstärke-Symbole und der Zahl + +Key Presses +== Tastendrücke + +Size of key press icons +== Größe der Tastendruck-Symbole + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== Server konnte nicht gestartet werden. Erlaub Benachrichtigungen in den App-Einstellungen so dass der Server im Hintergrund laufen kann. + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== "%s" is nicht mit pnglite kompatibel und kann in alten DDNet-Versionen nicht geladen werden: diff --git a/data/languages/greek.txt b/data/languages/greek.txt index 131e9131e17..457fdb5c5e7 100644 --- a/data/languages/greek.txt +++ b/data/languages/greek.txt @@ -585,6 +585,9 @@ Replay feature is disabled! The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -636,6 +639,9 @@ Loading skin files Search == +Loading background map +== + Searching == @@ -685,6 +691,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Server best: == @@ -1036,6 +1046,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1157,6 +1170,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1555,6 +1571,12 @@ Show local time always Show votes window after voting == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1636,22 +1658,31 @@ Clan plates size Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show other players' key presses +Size of hook strength icon and number indicator == -Show local player's key presses +Key Presses == -Authed name color in scoreboard +Show other players' key presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1777,7 +1808,7 @@ Overlay entities Show text entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Show others (own team only) @@ -1909,9 +1940,6 @@ Stop server Run server == -Server executable not found, can't run server -== - [Start menu] Play == @@ -1925,6 +1953,12 @@ Downloading %s: Update failed! Check log… == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server +== + Loading race demo files == diff --git a/data/languages/hungarian.txt b/data/languages/hungarian.txt index b584323917d..40dd77cc935 100644 --- a/data/languages/hungarian.txt +++ b/data/languages/hungarian.txt @@ -1165,7 +1165,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Átlátszóság -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Más csapatokhoz tartozó entitások, mint például játékosok és névtáblák átláthatóságának beállítása. Quads are used for background decoration @@ -1560,6 +1560,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Loading demo file from storage == @@ -1572,6 +1575,9 @@ Quitting. Please wait… Restarting. Please wait… == +Loading background map +== + Searching == @@ -1609,6 +1615,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1750,6 +1760,9 @@ Mark the end of a cut (right click to reset) Close the demo player == +Toggle auto camera +== + Export demo cut == @@ -1805,6 +1818,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1907,6 +1923,12 @@ Info Messages Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + Show client IDs (scoreboard, chat, spectator) == @@ -1925,16 +1947,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Show own player's hook collision line @@ -1985,6 +2016,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/italian.txt b/data/languages/italian.txt index f3db9483a50..e549d17c7cf 100644 --- a/data/languages/italian.txt +++ b/data/languages/italian.txt @@ -1321,7 +1321,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Opacitá -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Regola l'opacità delle entità appartenenti ad altri team, come magliette e targhette Quads are used for background decoration @@ -1423,6 +1423,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -1438,6 +1441,9 @@ Why are you slowmo replaying to read this? Loading skin files == +Loading background map +== + Searching == @@ -1472,6 +1478,10 @@ Loading commands… Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1643,6 +1653,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1713,6 +1726,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1885,6 +1901,12 @@ Info Messages Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1906,16 +1928,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Show own player's hook collision line @@ -2017,6 +2048,9 @@ https://ddnet.org/discord Tutorial == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/japanese.txt b/data/languages/japanese.txt index 092639bfea2..a84ec9c6a9f 100644 --- a/data/languages/japanese.txt +++ b/data/languages/japanese.txt @@ -1153,6 +1153,9 @@ Saving settings to '%s' failed Error saving settings == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -1195,6 +1198,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1241,6 +1247,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Team %d == @@ -1484,6 +1494,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1551,6 +1564,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1772,6 +1788,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1817,19 +1839,28 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show local player's key presses +Size of hook strength icon and number indicator == -Authed name color in scoreboard +Key Presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1922,7 +1953,7 @@ Opacity Only save improvements == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Quads are used for background decoration @@ -1976,6 +2007,9 @@ Tutorial Can't find a Tutorial server == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Loading race demo files == diff --git a/data/languages/korean.txt b/data/languages/korean.txt index 82a1809b780..5722e6f04f0 100644 --- a/data/languages/korean.txt +++ b/data/languages/korean.txt @@ -1183,7 +1183,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == 불투명도 -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Tee와 이름 표시 등 다른 팀에 속한 엔티티의 불투명도를 조정합니다. Quads are used for background decoration @@ -1572,6 +1572,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Loading demo file from storage == @@ -1584,6 +1587,9 @@ Quitting. Please wait… Restarting. Please wait… == +Loading background map +== + Searching == @@ -1621,6 +1627,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1762,6 +1772,9 @@ Mark the end of a cut (right click to reset) Close the demo player == +Toggle auto camera +== + Export demo cut == @@ -1817,6 +1830,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1919,6 +1935,12 @@ Info Messages Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + Show client IDs (scoreboard, chat, spectator) == @@ -1937,16 +1959,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Show own player's hook collision line @@ -1997,6 +2028,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/kyrgyz.txt b/data/languages/kyrgyz.txt index ea457d86281..420f3ec2119 100644 --- a/data/languages/kyrgyz.txt +++ b/data/languages/kyrgyz.txt @@ -576,6 +576,9 @@ Replay feature is disabled! The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -627,6 +630,9 @@ Loading skin files Search == +Loading background map +== + Searching == @@ -676,6 +682,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Server best: == @@ -1027,6 +1037,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1148,6 +1161,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1546,6 +1562,12 @@ Show local time always Show votes window after voting == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1627,22 +1649,31 @@ Clan plates size Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show other players' key presses +Size of hook strength icon and number indicator == -Show local player's key presses +Key Presses == -Authed name color in scoreboard +Show other players' key presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1768,7 +1799,7 @@ Overlay entities Show text entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Show others (own team only) @@ -1900,9 +1931,6 @@ Stop server Run server == -Server executable not found, can't run server -== - [Start menu] Play == @@ -1916,6 +1944,12 @@ Downloading %s: Update failed! Check log… == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server +== + Loading race demo files == diff --git a/data/languages/norwegian.txt b/data/languages/norwegian.txt index d0f4cd4237a..42d76f318cf 100644 --- a/data/languages/norwegian.txt +++ b/data/languages/norwegian.txt @@ -1122,6 +1122,9 @@ Error saving settings The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -1164,6 +1167,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1210,6 +1216,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Team %d == @@ -1459,6 +1469,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1526,6 +1539,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1762,6 +1778,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1810,19 +1832,28 @@ Preview Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show local player's key presses +Size of hook strength icon and number indicator == -Authed name color in scoreboard +Key Presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1915,7 +1946,7 @@ Opacity Only save improvements == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Quads are used for background decoration @@ -1978,6 +2009,9 @@ Tutorial Can't find a Tutorial server == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Loading race demo files == diff --git a/data/languages/persian.txt b/data/languages/persian.txt index 1ba26366d63..e6e68a9065b 100644 --- a/data/languages/persian.txt +++ b/data/languages/persian.txt @@ -1367,7 +1367,7 @@ Show text entities Opacity == ﺖﯿﻓﺎﻔﺷ -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == ﺎﻬﻧﺁ ﻢﺳﺍ ﻭ ﺎﻫ ﯽﺗ ﺪﻨﻧﺎﻣ ،ﺮﮕﯾﺩ ﯼﺎﻫ‌ﻢﯿﺗ ﻪﺑ ﻖﻠﻌﺘﻣ ﯼﺎﻫ‌ﺖﯾﺩﻮﺟﻮﻣ ﺖﯿﻓﺎﻔﺷ ﻢﯿﻈﻨﺗ Show others (own team only) @@ -1930,9 +1930,19 @@ https://wiki.ddnet.org/wiki/Mapping The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + Online friends (%d) == @@ -1945,12 +1955,18 @@ Add clanmates by entering their clan below and leaving the name blank. Offline friends and clanmates will appear here. == +Toggle auto camera +== + Edit touch controls == Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -2019,6 +2035,21 @@ Could not load default touch controls from file. See local console for details. Could not load touch controls from clipboard. See local console for details. == +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + Width of your own hook collision line == @@ -2028,6 +2059,9 @@ Width of others' hook collision line Preview 'Hook collisions' being pressed == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Aim == diff --git a/data/languages/polish.txt b/data/languages/polish.txt index e669e128e23..3f5d0f45e22 100644 --- a/data/languages/polish.txt +++ b/data/languages/polish.txt @@ -9,6 +9,7 @@ # CROACH 2022-05-15 21:41:32 # Delciak (PKP) & Shkyyl 2024-05-19 17:52:30 # KebsCS 2024-09-30 03:33:33 +# Shkyyl 2025-01-03 15:30:00 ##### /authors ##### ##### translated strings ##### @@ -1156,7 +1157,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Przezroczystość -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Dopasuj przezroczystość obiektów należących do innych drużyn, takich jak duszki i nicki Quads are used for background decoration @@ -1937,109 +1938,143 @@ Moved ingame https://wiki.ddnet.org/wiki/Mapping == https://wiki.ddnet.org/wiki/Mapping +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== "%s" nie jest kompatybilny z pnglite i nie może być załadowany przez starsze wersje DDNet + Some fonts could not be loaded. Check the local console for details. -== +== Nie można załadować niektórych czcionek. Sprawdź konsolę, aby uzyskać szczegóły. + +Loading background map +== Ładowanie tła mapy + +[Spectating Camera Mode Icon] +AUTO +== AUTO Online friends (%d) -== +== Znajomi online (%d) Add friends by entering their name below or by clicking their name in the player list. -== +== Dodaj znajomych wpisując poniżej nazwę albo poprzez kliknięcie ich nazwy w liście graczy. Add clanmates by entering their clan below and leaving the name blank. -== +== Dodaj członków klanu wpisując poniżej nazwę klanu i pozostawiając pole nazwy puste. Offline friends and clanmates will appear here. -== +== Niedostępni znajomi i członkowie klanu pojawią się tutaj. + +Toggle auto camera +== Przełącz automatyczną kamerę Edit touch controls -== +== Edytuj sterowanie dotykowe Close -== +== Zamknij + +https://wiki.ddnet.org/wiki/Touch_controls +== https://wiki.ddnet.org/wiki/Touch_controls Save changes -== +== Zapisz zmiany Error saving touch controls -== +== Błąd podczas zapisywania sterowania dotykowego Could not save touch controls to file. See local console for details. -== +== Nie można zapisać sterowania dotykowego do pliku. Sprawdź konsolę, aby poznać szczegóły. Unsaved changes -== +== Niezapisane zmiany Discard changes -== +== Odrzuć zmiany Are you sure that you want to discard the current changes to the touch controls? -== +== Czy na pewno chcesz odrzucić bieżące zmiany w sterowaniu dotykowym? Are you sure that you want to reset the touch controls to default? -== +== Czy na pewno chcesz zresetować sterowanie dotykowe do domyślnych ustawień? Import from clipboard -== +== Importuj ze schowka Are you sure that you want to import the touch controls from the clipboard? This will overwrite your current touch controls. -== +== Czy na pewno chcesz zaimportować sterowanie dotykowe ze schowka? Zastąpi to bieżące ustawienia sterowania dotykowego. Export to clipboard -== +== Eksportuj do schowka Direct touch input while ingame -== +== Bezpośrednie sterowanie dotykowe podczas gry [Direct touch input] Disabled -== +== Wyłączone [Direct touch input] Active action -== +== Aktywne działanie [Direct touch input] Aim -== +== Celowanie [Direct touch input] Fire -== +== Strzał [Direct touch input] Hook -== +== Hak Direct touch input while spectating -== +== Bezpośrednie sterowanie dotykowe podczas obserwowania Error loading touch controls -== +== Błąd podczas ładowania sterowania dotykowego Could not load touch controls from file. See local console for details. -== +== Nie można załadować sterowania dotykowego z pliku. Sprawdź konsolę, aby poznać szczegóły. Could not load default touch controls from file. See local console for details. -== +== Nie można załadować domyślnego sterowania dotykowego z pliku. Sprawdź konsolę, aby poznać szczegóły. Could not load touch controls from clipboard. See local console for details. -== +== Nie można załadować sterowania dotykowego ze schowka. Sprawdź konsolę, aby poznać szczegóły. + +Show client IDs in name plates +== Pokaż identyfikatory graczy w plakietce + +Hook Strength +== Siła haka + +Size of hook strength icon and number indicator +== Rozmiar ikony i numeru siły haka + +Key Presses +== Naciśnięcia klawiszy + +Size of key press icons +== Rozmiar ikon naciśniętych klawiszy Width of your own hook collision line -== +== Szerokość linii kolizyjnej haka gracza Width of others' hook collision line -== +== Szerokość linii kolizyjnej haka innych graczy Preview 'Hook collisions' being pressed -== +== Podgląd wciśnięcia 'Kolizji haka' + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== Nie można uruchomić serwera. Upewnij się, że przyznałeś aplikacji uprawnienia do powiadomień w ustawieniach, aby serwer mógł działać w tle. Aim -== +== Celowanie Active: Fire -== +== Aktywny: Strzał Active: Hook -== +== Aktywny: Hak diff --git a/data/languages/portuguese.txt b/data/languages/portuguese.txt index 83919357ae2..320b7dab9b2 100644 --- a/data/languages/portuguese.txt +++ b/data/languages/portuguese.txt @@ -917,6 +917,9 @@ Replay feature is disabled! The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + The format of texture %s is not RGBA which will cause visual bugs. == @@ -959,6 +962,9 @@ Restarting. Please wait… Loading skin files == +Loading background map +== + Searching == @@ -1008,6 +1014,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Server best: == @@ -1284,6 +1294,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1375,6 +1388,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1671,6 +1687,12 @@ Show health, shields and ammo Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + DDRace HUD == @@ -1722,22 +1744,31 @@ Preview Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Show other players' key presses +Size of hook strength icon and number indicator == -Show local player's key presses +Key Presses == -Authed name color in scoreboard +Show other players' key presses == -Same clan color in scoreboard +Show local player's key presses +== + +Size of key press icons == Hook collision line @@ -1848,7 +1879,7 @@ Overlay entities Show text entities == -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Show others (own team only) @@ -1923,9 +1954,6 @@ Can't find a Tutorial server Run server == -Server executable not found, can't run server -== - [Start menu] Play == @@ -1939,6 +1967,12 @@ Downloading %s: Update failed! Check log… == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + +Server executable not found, can't run server +== + Loading race demo files == diff --git a/data/languages/romanian.txt b/data/languages/romanian.txt index 610cffe8388..d283033cbcf 100644 --- a/data/languages/romanian.txt +++ b/data/languages/romanian.txt @@ -1784,7 +1784,7 @@ Overlay entities Show text entities == Arată entitățile text -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Ajustează opacitatea entităților aparținând altor echipe, cum ar fi Tee-urile și etichetele de nume Show others (own team only) @@ -2044,3 +2044,37 @@ Moved ingame https://wiki.ddnet.org/wiki/Mapping == https://wiki.ddnet.org/wiki/Mapping + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/russian.txt b/data/languages/russian.txt index 3ec07fef471..9e304924288 100644 --- a/data/languages/russian.txt +++ b/data/languages/russian.txt @@ -1283,7 +1283,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Прозр. -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Регулирует прозрачность объектов другой команды, такие как Tee и имена. Quads are used for background decoration @@ -2054,3 +2054,37 @@ Active: Fire Active: Hook == Активно: Крюк + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/serbian.txt b/data/languages/serbian.txt index b5cd34ad48f..cca046d3d10 100644 --- a/data/languages/serbian.txt +++ b/data/languages/serbian.txt @@ -1324,7 +1324,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Providnost -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Podesite neprozirnost entiteta koji pripadaju drugim timovima, kao što su majice i natpisne pločice Quads are used for background decoration @@ -1652,12 +1652,18 @@ Saving settings to '%s' failed Error saving settings == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Loading demo file from storage == Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + Searching == @@ -1692,6 +1698,10 @@ Loading commands… Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1787,6 +1797,9 @@ Change the skip duration Go forward the specified duration == +Toggle auto camera +== + Render cut to video == @@ -1818,6 +1831,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1914,6 +1930,12 @@ Info Messages Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + Show client IDs (scoreboard, chat, spectator) == @@ -1932,16 +1954,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Show own player's hook collision line @@ -1992,6 +2023,9 @@ Delete skin Unable to delete skin == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/serbian_cyrillic.txt b/data/languages/serbian_cyrillic.txt index c265e5230a9..17758eac4b4 100644 --- a/data/languages/serbian_cyrillic.txt +++ b/data/languages/serbian_cyrillic.txt @@ -1323,7 +1323,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Провидност -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Подесите непрозирност ентитета који припадају другим тимовима, као што су мајице и натписне плочице Quads are used for background decoration @@ -1434,6 +1434,9 @@ Saving settings to '%s' failed Error saving settings == +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Loading demo file from storage == @@ -1449,6 +1452,9 @@ Quitting. Please wait… Restarting. Please wait… == +Loading background map +== + Searching == @@ -1486,6 +1492,10 @@ Multi-View Following %s == +[Spectating Camera Mode Icon] +AUTO +== + Some map images could not be loaded. Check the local console for details. == @@ -1672,6 +1682,9 @@ Close the demo player Toggle keyboard shortcuts == +Toggle auto camera +== + Export demo cut == @@ -1736,6 +1749,9 @@ Edit touch controls Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -1871,6 +1887,12 @@ Info Messages Show local time always == +Authed name color in scoreboard +== + +Same clan color in scoreboard +== + Show client IDs (scoreboard, chat, spectator) == @@ -1889,16 +1911,25 @@ Chat width Show friend mark (♥) in name plates == +Show client IDs in name plates +== + +Hook Strength +== + Show hook strength icon indicator == Show hook strength number indicator == -Authed name color in scoreboard +Size of hook strength icon and number indicator == -Same clan color in scoreboard +Key Presses +== + +Size of key press icons == Show own player's hook collision line @@ -1985,6 +2016,9 @@ Unable to delete skin Open the directory to add custom assets == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Round %d/%d == diff --git a/data/languages/simplified_chinese.txt b/data/languages/simplified_chinese.txt index 16c439deba5..d6a32a244aa 100644 --- a/data/languages/simplified_chinese.txt +++ b/data/languages/simplified_chinese.txt @@ -45,6 +45,7 @@ # 2024-09-29 Pioooooo # 2024-11-01 Pioooooo # 2024-12-03 豆腐渣 & Pioooooo +# 2025-01-03 Pioooooo ##### /authors ##### ##### translated strings ##### @@ -1104,10 +1105,10 @@ Assets directory == 资源目录 https://ddnet.org/discord -== http://chat.teeworlds.cn/ +== https://chat.teeworlds.cn/ Discord -== 开黑啦 +== 加入社区 The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs. == 纹理文件 %s 的宽度无法被 %d 整除,或者高度无法被 %d 整除,这可能会导致显示错误。 @@ -1220,7 +1221,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == 不透明度 -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == 调整单人区域或其他队伍中玩家的不透明度 Quads are used for background decoration @@ -2083,3 +2084,37 @@ Active: Fire Active: Hook == 当前:钩索 + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== "%s" 与 pnglite 不兼容,无法被旧版本 DDNet 加载 + +Loading background map +== 加载背景地图 + +[Spectating Camera Mode Icon] +AUTO +== 自动 + +Toggle auto camera +== 切换自动视角 + +https://wiki.ddnet.org/wiki/Touch_controls +== https://wiki.ddnet.org/wiki/Touch_controls/zh + +Show client IDs in name plates +== 显示客户端 ID + +Hook Strength +== 钩索强度 + +Size of hook strength icon and number indicator +== 钩索强度图标与数值的大小 + +Key Presses +== 按键显示 + +Size of key press icons +== 按键显示图标大小 + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== 服务器无法启动。请确保在应用程序设置中授予通知权限,以便服务器可以在后台运行。 diff --git a/data/languages/slovak.txt b/data/languages/slovak.txt index 934620aa21f..6c2e0cb1e3d 100644 --- a/data/languages/slovak.txt +++ b/data/languages/slovak.txt @@ -1597,7 +1597,7 @@ Overlay entities Show text entities == Zobraziť textové entity -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Nepriehľadnosť entít patriacich iným tímom ako sú hráči a menovky Show others (own team only) @@ -1932,9 +1932,19 @@ Feet Eyes == Oči +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + Some fonts could not be loaded. Check the local console for details. == +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + Online friends (%d) == @@ -1947,12 +1957,18 @@ Add clanmates by entering their clan below and leaving the name blank. Offline friends and clanmates will appear here. == +Toggle auto camera +== + Edit touch controls == Close == +https://wiki.ddnet.org/wiki/Touch_controls +== + Save changes == @@ -2021,6 +2037,21 @@ Could not load default touch controls from file. See local console for details. Could not load touch controls from clipboard. See local console for details. == +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + Width of your own hook collision line == @@ -2030,6 +2061,9 @@ Width of others' hook collision line Preview 'Hook collisions' being pressed == +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== + Aim == diff --git a/data/languages/spanish.txt b/data/languages/spanish.txt index f8a8d02dde5..6f1f6e0be94 100644 --- a/data/languages/spanish.txt +++ b/data/languages/spanish.txt @@ -1285,7 +1285,7 @@ Show player speed Show player target angle == Mostrar el ángulo de la mira del jugador -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Ajusta la opacidad de entidades pertenecientes a otros equipos, como los tees y los nombres. Opacity of freeze bars inside freeze @@ -2056,3 +2056,37 @@ Active: Fire Active: Hook == Activo: Gancho + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/swedish.txt b/data/languages/swedish.txt index 214ea656892..a92a022f17f 100644 --- a/data/languages/swedish.txt +++ b/data/languages/swedish.txt @@ -1591,7 +1591,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Opacitet -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Justera opaciteten av entities som tillhör ett annat lag, som t.ex. tees och namnskyltar Quads are used for background decoration @@ -2040,3 +2040,37 @@ Active: Fire Active: Hook == Läge: Hook + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/traditional_chinese.txt b/data/languages/traditional_chinese.txt index 2326a00cd67..e051d5d05a4 100644 --- a/data/languages/traditional_chinese.txt +++ b/data/languages/traditional_chinese.txt @@ -34,6 +34,7 @@ # 2024-09-29 Pioooooo # 2024-11-01 Pioooooo # 2024-12-03 豆腐渣 & Pioooooo & By +# 2025-01-03 Pioooooo ##### /authors ##### ##### translated strings ##### @@ -1206,7 +1207,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == 不透明度 -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == 調整單人區域或其他隊伍中玩家的不透明度 Quads are used for background decoration @@ -2072,3 +2073,37 @@ Active: Fire Active: Hook == 當前:鉤鎖 + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== "%s" 與 pnglite 不兼容,無法被舊版本 DDNet 加載 + +Loading background map +== 加載背景地圖 + +[Spectating Camera Mode Icon] +AUTO +== 自動 + +Toggle auto camera +== 切換自動視角 + +https://wiki.ddnet.org/wiki/Touch_controls +== https://wiki.ddnet.org/index.php?title=Touch_controls/zh&variant=zh-hant + +Show client IDs in name plates +== 顯示客戶端 ID + +Hook Strength +== 鉤索強度 + +Size of hook strength icon and number indicator +== 鉤索強度圖示與數值的大小 + +Key Presses +== 按鍵顯示 + +Size of key press icons +== 按鍵顯示圖示大小 + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== 伺服器無法啟動。請確保在應用程式設置中授予通知權限,以便伺服器可以在後台運行。 diff --git a/data/languages/turkish.txt b/data/languages/turkish.txt index f68398e0ebe..93b0641f7fc 100644 --- a/data/languages/turkish.txt +++ b/data/languages/turkish.txt @@ -1555,7 +1555,7 @@ When you cross the start line, show a ghost tee replicating the movements of you Opacity == Opaklık -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Teeler ve isim etiketleri gibi diğer takımlara ait varlıkların opaklığını ayarlayın Quads are used for background decoration @@ -2053,3 +2053,37 @@ Active: Fire Active: Hook == Aktif: Kanca + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/data/languages/ukrainian.txt b/data/languages/ukrainian.txt index 38cab31735f..3165c1a1c3a 100644 --- a/data/languages/ukrainian.txt +++ b/data/languages/ukrainian.txt @@ -130,7 +130,7 @@ Add friends by entering their name below or by clicking their name in the player Address == Адреса -Adjust the opacity of entities belonging to other teams, such as tees and nameplates +Adjust the opacity of entities belonging to other teams, such as tees and name plates == Налаштуйте непрозорість сутностей інших команд, як от тії та ніків AFR @@ -2037,3 +2037,37 @@ Zoom in Zoom out == Віддалити + +"%s" is not compatible with pnglite and cannot be loaded by old DDNet versions: +== + +Loading background map +== + +[Spectating Camera Mode Icon] +AUTO +== + +Toggle auto camera +== + +https://wiki.ddnet.org/wiki/Touch_controls +== + +Show client IDs in name plates +== + +Hook Strength +== + +Size of hook strength icon and number indicator +== + +Key Presses +== + +Size of key press icons +== + +Server could not be started. Make sure to grant the notification permission in the app settings so the server can run in the background. +== diff --git a/scripts/android/files/java/org/ddnet/client/ClientActivity.java b/scripts/android/files/java/org/ddnet/client/ClientActivity.java index e51d9c1b7f4..0169ef569b6 100644 --- a/scripts/android/files/java/org/ddnet/client/ClientActivity.java +++ b/scripts/android/files/java/org/ddnet/client/ClientActivity.java @@ -96,12 +96,12 @@ private void restartApp() { } // Called from native code, see android_main.cpp - public void startServer() { + public void startServer(String[] arguments) { synchronized(serverServiceMonitor) { if(serverServiceMessenger != null) { return; } - Intent startIntent = new Intent(this, ServerService.class); + Intent startIntent = ServerService.createStartIntent(this, arguments); ContextCompat.startForegroundService(this, startIntent); bindService(startIntent, serverServiceConnection, 0); } @@ -114,9 +114,7 @@ public void executeCommand(String command) { return; } try { - Message message = Message.obtain(null, ServerService.MESSAGE_CODE_EXECUTE_COMMAND, 0, 0); - message.getData().putString(ServerService.MESSAGE_EXTRA_COMMAND, command); - serverServiceMessenger.send(message); + serverServiceMessenger.send(ServerService.createExecuteCommandMessage(command)); } catch (RemoteException e) { // Connection broken unbindService(serverServiceConnection); diff --git a/scripts/android/files/java/org/ddnet/client/ServerService.java b/scripts/android/files/java/org/ddnet/client/ServerService.java index 00b42e903ac..40897a3fcba 100644 --- a/scripts/android/files/java/org/ddnet/client/ServerService.java +++ b/scripts/android/files/java/org/ddnet/client/ServerService.java @@ -18,11 +18,12 @@ public class ServerService extends Service { private static final String NOTIFICATION_CHANNEL_ID = "LOCAL_SERVER_CHANNEL_ID"; private static final int NOTIFICATION_ID = 1; - public static final int MESSAGE_CODE_EXECUTE_COMMAND = 1; - public static final String MESSAGE_EXTRA_COMMAND = "command"; + private static final int MESSAGE_CODE_EXECUTE_COMMAND = 1; + private static final String MESSAGE_EXTRA_COMMAND = "command"; - public static final String INTENT_ACTION_EXECUTE = "execute"; - public static final String INTENT_EXTRA_COMMAND = "command"; + private static final String INTENT_ACTION_START = "start"; + private static final String INTENT_ACTION_EXECUTE = "execute"; + private static final String INTENT_EXTRA_COMMANDS = "commands"; private static final String KEY_EXECUTE_TEXT_REPLY = "execute-command-reply"; static { @@ -70,16 +71,19 @@ public void onCreate() { createRunningNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST ); - - thread = new NativeServerThread(this); - thread.start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if(intent != null) { String action = intent.getAction(); - if(INTENT_ACTION_EXECUTE.equals(action)) { + if(INTENT_ACTION_START.equals(action)) { + String[] commands = intent.getStringArrayExtra(INTENT_EXTRA_COMMANDS); + if(commands != null) { + thread = new NativeServerThread(this, commands); + thread.start(); + } + } else if(INTENT_ACTION_EXECUTE.equals(action)) { Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); if(remoteInput != null) { CharSequence remoteCommand = remoteInput.getCharSequence(KEY_EXECUTE_TEXT_REPLY); @@ -92,13 +96,18 @@ public int onStartCommand(Intent intent, int flags, int startId) { notificationManager.notify(NOTIFICATION_ID, createRunningNotification()); } } else { - String command = intent.getStringExtra(INTENT_EXTRA_COMMAND); - if(command != null) { - executeCommand(command); + String[] commands = intent.getStringArrayExtra(INTENT_EXTRA_COMMANDS); + if(commands != null) { + for(String command : commands) { + executeCommand(command); + } } } } } + if(thread == null) { + stopSelf(); + } return START_NOT_STICKY; } @@ -159,7 +168,7 @@ private Notification createRunningNotification() { Intent stopIntent = new Intent(this, ServerService.class); stopIntent.setAction(INTENT_ACTION_EXECUTE); - stopIntent.putExtra(INTENT_EXTRA_COMMAND, "shutdown"); + stopIntent.putExtra(INTENT_EXTRA_COMMANDS, new String[] {"shutdown"}); PendingIntent stopActionIntent = PendingIntent.getService( this, @@ -241,6 +250,19 @@ private void executeCommand(String command) { } NativeServer.executeCommand(command); } + + public static Intent createStartIntent(Context context, String[] arguments) { + Intent intent = new Intent(context, ServerService.class); + intent.setAction(INTENT_ACTION_START); + intent.putExtra(INTENT_EXTRA_COMMANDS, arguments); + return intent; + } + + public static Message createExecuteCommandMessage(String command) { + Message message = Message.obtain(null, MESSAGE_CODE_EXECUTE_COMMAND, 0, 0); + message.getData().putString(MESSAGE_EXTRA_COMMAND, command); + return message; + } } /** @@ -251,9 +273,11 @@ private void executeCommand(String command) { class NativeServerThread extends Thread { private final Context applicationContext; + private final String[] arguments; - public NativeServerThread(Context context) { + public NativeServerThread(Context context, String[] arguments) { this.applicationContext = context.getApplicationContext(); + this.arguments = arguments; } @Override @@ -267,7 +291,7 @@ public void run() { return; } - int Result = NativeServer.runServer(workingDirectory.getAbsolutePath()); + int Result = NativeServer.runServer(workingDirectory.getAbsolutePath(), arguments); new Handler(applicationContext.getMainLooper()).post(() -> { if(Result != 0) { Toast.makeText(applicationContext, applicationContext.getString(R.string.server_error_exit_code, Result), Toast.LENGTH_LONG).show(); @@ -297,9 +321,10 @@ private NativeServer() { * exit code on completion. * * @param workingDirectory The working directory for the server, which must be the - * external storage directory of the app and already contains all data files. + * external storage directory of the app and already contain all data files. + * @param arguments Arguments to supply to the server when launching it. */ - public static native int runServer(String workingDirectory); + public static native int runServer(String workingDirectory, String[] arguments); /** * Adds a command to the execution queue of the native server. diff --git a/src/android/android_main.cpp b/src/android/android_main.cpp index 00571b3c400..c7bb524c242 100644 --- a/src/android/android_main.cpp +++ b/src/android/android_main.cpp @@ -237,7 +237,7 @@ void RestartAndroidApp() SDL_AndroidSendMessage(COMMAND_RESTART_APP, 0); } -bool StartAndroidServer() +bool StartAndroidServer(const char **ppArguments, size_t NumArguments) { // We need the notification-permission to show a notification for the foreground service. // We use SDL for this instead of doing it on the Java side because this function blocks @@ -252,9 +252,20 @@ bool StartAndroidServer() jobject Activity = (jobject)SDL_AndroidGetActivity(); jclass ActivityClass = pEnv->GetObjectClass(Activity); - jmethodID MethodId = pEnv->GetMethodID(ActivityClass, "startServer", "()V"); - pEnv->CallVoidMethod(Activity, MethodId); + jclass StringClass = pEnv->FindClass("java/lang/String"); + jobjectArray ArgumentsArray = pEnv->NewObjectArray(NumArguments, StringClass, nullptr); + pEnv->DeleteLocalRef(StringClass); + for(size_t ArgumentIndex = 0; ArgumentIndex < NumArguments; ArgumentIndex++) + { + jstring ArgumentString = pEnv->NewStringUTF(ppArguments[ArgumentIndex]); + pEnv->SetObjectArrayElement(ArgumentsArray, ArgumentIndex, ArgumentString); + pEnv->DeleteLocalRef(ArgumentString); + } + + jmethodID MethodId = pEnv->GetMethodID(ActivityClass, "startServer", "([Ljava/lang/String;)V"); + pEnv->CallVoidMethod(Activity, MethodId, ArgumentsArray); + pEnv->DeleteLocalRef(ArgumentsArray); pEnv->DeleteLocalRef(Activity); pEnv->DeleteLocalRef(ActivityClass); diff --git a/src/android/android_main.h b/src/android/android_main.h index 02fcf8f18c0..b467fc699aa 100644 --- a/src/android/android_main.h +++ b/src/android/android_main.h @@ -51,9 +51,12 @@ void RestartAndroidApp(); * This will request the notification-permission as it is required for * foreground services to show a notification. * + * @param ppArguments Array of arguments to pass to the server on launch. + * @param NumArguments The number of arguments. + * * @return `true` on success, `false` on error. */ -bool StartAndroidServer(); +bool StartAndroidServer(const char **ppArguments, size_t NumArguments); /** * Adds a command to the execution queue of the local server. diff --git a/src/engine/client/graphics_threaded.cpp b/src/engine/client/graphics_threaded.cpp index 6ead9b09fd9..617c4604907 100644 --- a/src/engine/client/graphics_threaded.cpp +++ b/src/engine/client/graphics_threaded.cpp @@ -512,7 +512,8 @@ bool CGraphics_Threaded::UpdateTextTexture(CTextureHandle TextureId, int x, int static SWarning FormatPngliteIncompatibilityWarning(int PngliteIncompatible, const char *pContextName) { SWarning Warning; - str_format(Warning.m_aWarningMsg, sizeof(Warning.m_aWarningMsg), Localize("\"%s\" is not compatible with pnglite and cannot be loaded by old DDNet versions: "), pContextName); + str_format(Warning.m_aWarningMsg, sizeof(Warning.m_aWarningMsg), Localize("\"%s\" is not compatible with pnglite and cannot be loaded by old DDNet versions:"), pContextName); + str_append(Warning.m_aWarningMsg, " "); static const int FLAGS[] = {CImageLoader::PNGLITE_COLOR_TYPE, CImageLoader::PNGLITE_BIT_DEPTH, CImageLoader::PNGLITE_INTERLACE_TYPE, CImageLoader::PNGLITE_COMPRESSION_TYPE, CImageLoader::PNGLITE_FILTER_TYPE}; static const char *const EXPLANATION[] = {"color type", "bit depth", "interlace type", "compression type", "filter type"}; diff --git a/src/engine/console.h b/src/engine/console.h index c22f01b5da2..68f570eb0aa 100644 --- a/src/engine/console.h +++ b/src/engine/console.h @@ -38,6 +38,8 @@ class IConsole : public IInterface CLIENT_ID_GAME = -2, CLIENT_ID_NO_GAME = -3, + + FILE_RECURSION_LIMIT = 16, }; // TODO: rework this interface to reduce the amount of virtual calls diff --git a/src/engine/server/main.cpp b/src/engine/server/main.cpp index 1e592923458..16fbc04634f 100644 --- a/src/engine/server/main.cpp +++ b/src/engine/server/main.cpp @@ -236,7 +236,7 @@ std::vector FetchAndroidServerCommandQueue() return vResult; } -JNI_EXPORTED_FUNCTION(ANDROID_PACKAGE_NAME, NativeServer, runServer, jint, JNIEnv *pEnv, jobject Object, jstring WorkingDirectory) +JNI_EXPORTED_FUNCTION(ANDROID_PACKAGE_NAME, NativeServer, runServer, jint, JNIEnv *pEnv, jobject Object, jstring WorkingDirectory, jobjectArray ArgumentsArray) { // Set working directory to external storage location. This is not possible // in Java so we pass the intended working directory to the native code. @@ -248,8 +248,27 @@ JNI_EXPORTED_FUNCTION(ANDROID_PACKAGE_NAME, NativeServer, runServer, jint, JNIEn return -1001; } - const char *apArgs[] = {GAME_NAME}; - return main(std::size(apArgs), apArgs); + const jsize NumArguments = pEnv->GetArrayLength(ArgumentsArray); + + std::vector vArguments; + vArguments.reserve(NumArguments + 1); + vArguments.push_back(std::string(pWorkingDirectory) + "/" + GAME_NAME "-Server"); + for(jsize ArgumentIndex = 0; ArgumentIndex < NumArguments; ArgumentIndex++) + { + jstring ArgumentString = (jstring)pEnv->GetObjectArrayElement(ArgumentsArray, ArgumentIndex); + const char *pArgumentString = pEnv->GetStringUTFChars(ArgumentString, nullptr); + vArguments.emplace_back(pArgumentString); + pEnv->ReleaseStringUTFChars(ArgumentString, pArgumentString); + } + + std::vector vpArguments; + vpArguments.reserve(vArguments.size()); + for(const std::string &Argument : vArguments) + { + vpArguments.emplace_back(Argument.c_str()); + } + + return main(vpArguments.size(), vpArguments.data()); } JNI_EXPORTED_FUNCTION(ANDROID_PACKAGE_NAME, NativeServer, executeCommand, void, JNIEnv *pEnv, jobject Object, jstring Command) diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp index acab17a0d0f..2c933806239 100644 --- a/src/engine/shared/console.cpp +++ b/src/engine/shared/console.cpp @@ -631,11 +631,15 @@ void CConsole::ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId, boo bool CConsole::ExecuteFile(const char *pFilename, int ClientId, bool LogFailure, int StorageType) { - // make sure that this isn't being executed already + int Count = 0; + // make sure that this isn't being executed already and that recursion limit isn't met for(CExecFile *pCur = m_pFirstExec; pCur; pCur = pCur->m_pPrev) - if(str_comp(pFilename, pCur->m_pFilename) == 0) - return false; + { + Count++; + if(str_comp(pFilename, pCur->m_pFilename) == 0 || Count > FILE_RECURSION_LIMIT) + return false; + } if(!m_pStorage) return false; diff --git a/src/game/client/components/camera.cpp b/src/game/client/components/camera.cpp index 41e2dd8abf7..fda53cb7255 100644 --- a/src/game/client/components/camera.cpp +++ b/src/game/client/components/camera.cpp @@ -60,14 +60,11 @@ float CCamera::ZoomProgress(float CurrentTime) const void CCamera::ScaleZoom(float Factor) { float CurrentTarget = m_Zooming ? m_ZoomSmoothingTarget : m_Zoom; - bool IsUserZoom = !m_IsSpectatingPlayer; - - ChangeZoom(CurrentTarget * Factor, m_pClient->m_Snap.m_SpecInfo.m_Active && GameClient()->m_MultiViewActivated ? g_Config.m_ClMultiViewZoomSmoothness : g_Config.m_ClSmoothZoomTime, IsUserZoom); + ChangeZoom(CurrentTarget * Factor, m_pClient->m_Snap.m_SpecInfo.m_Active && GameClient()->m_MultiViewActivated ? g_Config.m_ClMultiViewZoomSmoothness : g_Config.m_ClSmoothZoomTime, true); if(m_IsSpectatingPlayer) { m_AutoSpecCamera = false; - m_SpecZoomTarget = m_ZoomSmoothingTarget; } } @@ -112,7 +109,6 @@ void CCamera::ChangeZoom(float Target, int Smoothness, bool IsUser) void CCamera::ResetAutoSpecCamera() { m_AutoSpecCamera = true; - m_SpecZoomTarget = CCamera::ZoomStepsToValue(g_Config.m_ClDefaultZoom - 10); } void CCamera::UpdateCamera() @@ -121,7 +117,7 @@ void CCamera::UpdateCamera() bool IsSpectatingPlayer = !GameClient()->m_MultiViewActivated; if(Client()->State() == IClient::STATE_DEMOPLAYBACK) { - IsSpectatingPlayer = IsSpectatingPlayer && m_pClient->m_Snap.m_SpecInfo.m_SpectatorId >= 0; + IsSpectatingPlayer = IsSpectatingPlayer && (!m_pClient->m_Snap.m_SpecInfo.m_Active || m_pClient->m_Snap.m_SpecInfo.m_SpectatorId >= 0); } else { @@ -133,22 +129,41 @@ void CCamera::UpdateCamera() bool UsingAutoSpecCamera = m_AutoSpecCamera && CanUseAutoSpecCamera(); float CurrentZoom = m_Zooming ? m_ZoomSmoothingTarget : m_Zoom; - + bool ZoomChanged = false; if(IsSpectatingPlayer && UsingAutoSpecCamera && CurrentZoom != m_pClient->m_Snap.m_SpecInfo.m_Zoom) { - ChangeZoom(m_pClient->m_Snap.m_SpecInfo.m_Zoom, 250, false); + // start spectating player / turn on auto spec camera + bool ChangeTarget = m_PrevSpecId != m_pClient->m_Snap.m_SpecInfo.m_SpectatorId; + float SmoothTime = ChangeTarget ? g_Config.m_ClSmoothSpectatingTime : 250; + ChangeZoom(m_pClient->m_Snap.m_SpecInfo.m_Zoom, SmoothTime, false); + // it is auto spec camera zooming if only the zoom is changed during activation, not at the start of the activation - m_AutoSpecCameraZooming = IsSpectatingPlayer && m_UsingAutoSpecCamera; + m_AutoSpecCameraZooming = !ChangeTarget && IsSpectatingPlayer && m_UsingAutoSpecCamera; + + ZoomChanged = true; } - else if((IsSpectatingPlayer && !UsingAutoSpecCamera) && CurrentZoom != m_SpecZoomTarget) + else if((IsSpectatingPlayer && !UsingAutoSpecCamera) && CurrentZoom != m_UserZoomTarget) { - ChangeZoom(m_SpecZoomTarget, g_Config.m_ClSmoothZoomTime, false); + // turning off auto spec camera + ChangeZoom(m_UserZoomTarget, g_Config.m_ClSmoothZoomTime, false); m_AutoSpecCameraZooming = false; + + ZoomChanged = true; } else if(!IsSpectatingPlayer && CurrentZoom != m_UserZoomTarget) { + // stop spectating player ChangeZoom(m_UserZoomTarget, GameClient()->m_MultiViewActivated ? g_Config.m_ClMultiViewZoomSmoothness : g_Config.m_ClSmoothZoomTime, false); m_AutoSpecCameraZooming = false; + + ZoomChanged = true; + } + + // snap zoom when going in and out of spectating + if(ZoomChanged && m_WasSpectating != m_pClient->m_Snap.m_SpecInfo.m_Active) + { + m_Zoom = m_ZoomSmoothingTarget; + m_Zooming = false; } if(m_Zooming) @@ -158,6 +173,7 @@ void CCamera::UpdateCamera() { m_Zoom = m_ZoomSmoothingTarget; m_Zooming = false; + m_AutoSpecCameraZooming = false; } else { @@ -167,6 +183,7 @@ void CCamera::UpdateCamera() { m_Zoom = m_ZoomSmoothingTarget; m_Zooming = false; + m_AutoSpecCameraZooming = false; } } m_Zoom = clamp(m_Zoom, MinZoomLevel(), MaxZoomLevel()); @@ -177,6 +194,7 @@ void CCamera::UpdateCamera() m_ZoomSet = false; m_Zoom = 1.0f; m_Zooming = false; + m_AutoSpecCameraZooming = false; } else if(!m_ZoomSet && g_Config.m_ClDefaultZoom != 10) { @@ -370,6 +388,8 @@ void CCamera::OnRender() m_PrevCenter = m_Center; m_PrevSpecId = SpecId; + + // demo always count as spectating m_WasSpectating = m_pClient->m_Snap.m_SpecInfo.m_Active; } @@ -390,8 +410,8 @@ void CCamera::OnReset() m_Zoom = CCamera::ZoomStepsToValue(g_Config.m_ClDefaultZoom - 10); m_Zooming = false; + m_AutoSpecCameraZooming = false; m_UserZoomTarget = CCamera::ZoomStepsToValue(g_Config.m_ClDefaultZoom - 10); - m_SpecZoomTarget = CCamera::ZoomStepsToValue(g_Config.m_ClDefaultZoom - 10); } void CCamera::ConZoomPlus(IConsole::IResult *pResult, void *pUserData) @@ -439,7 +459,6 @@ void CCamera::ConZoom(IConsole::IResult *pResult, void *pUserData) if(IsSpectating && !IsReset) { pSelf->m_AutoSpecCamera = false; - pSelf->m_SpecZoomTarget = pSelf->m_ZoomSmoothingTarget; } if(pSelf->GameClient()->m_MultiViewActivated && pSelf->m_pClient->m_Snap.m_SpecInfo.m_Active) diff --git a/src/game/client/components/camera.h b/src/game/client/components/camera.h index 385a293a3e2..088b9d63465 100644 --- a/src/game/client/components/camera.h +++ b/src/game/client/components/camera.h @@ -77,7 +77,6 @@ class CCamera : public CComponent bool m_AutoSpecCameraZooming; bool m_AutoSpecCamera; float m_UserZoomTarget; - float m_SpecZoomTarget; vec2 m_DyncamTargetCameraOffset; vec2 m_aDyncamCurrentCameraOffset[NUM_DUMMIES]; diff --git a/src/game/client/components/menus_start.cpp b/src/game/client/components/menus_start.cpp index 3ba49b2c8f2..88c50288807 100644 --- a/src/game/client/components/menus_start.cpp +++ b/src/game/client/components/menus_start.cpp @@ -273,7 +273,7 @@ void CMenus::RenderStartMenu(CUIRect MainView) void CMenus::RunServer() { #if defined(CONF_PLATFORM_ANDROID) - if(StartAndroidServer()) + if(StartAndroidServer({}, 0)) { m_ForceRefreshLanPage = true; } diff --git a/src/game/client/components/players.cpp b/src/game/client/components/players.cpp index e0240f23070..ceb145fad21 100644 --- a/src/game/client/components/players.cpp +++ b/src/game/client/components/players.cpp @@ -189,7 +189,7 @@ void CPlayers::RenderHookCollLine( if(Local && !m_pClient->m_Snap.m_SpecInfo.m_Active && Client()->State() != IClient::STATE_DEMOPLAYBACK) { // just use the direct input if it's the local player we are rendering - Angle = angle(m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy] * m_pClient->m_Camera.m_Zoom); + Angle = angle(m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy]); } else { @@ -232,9 +232,7 @@ void CPlayers::RenderHookCollLine( if(Local && !m_pClient->m_Snap.m_SpecInfo.m_Active && Client()->State() != IClient::STATE_DEMOPLAYBACK) { - ExDirection = normalize( - vec2((int)((int)m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy].x * m_pClient->m_Camera.m_Zoom), - (int)((int)m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy].y * m_pClient->m_Camera.m_Zoom))); + ExDirection = normalize(vec2((int)m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy].x, (int)m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy].y)); // fix direction if mouse is exactly in the center if(!(int)m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy].x && !(int)m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy].y) @@ -257,6 +255,8 @@ void CPlayers::RenderHookCollLine( bool DoBreak = false; + std::vector> vLineSegments; + do { OldPos = NewPos; @@ -268,9 +268,25 @@ void CPlayers::RenderHookCollLine( DoBreak = true; } - int Hit = Collision()->IntersectLineTeleHook(OldPos, NewPos, &FinishPos, 0x0); + int Tele; + int Hit = Collision()->IntersectLineTeleHook(OldPos, NewPos, &FinishPos, 0x0, &Tele); + if(!DoBreak && Hit == TILE_TELEINHOOK) + { + if(Collision()->TeleOuts(Tele - 1).size() != 1) + { + Hit = Collision()->IntersectLineTeleHook(OldPos, NewPos, &FinishPos, 0x0); + } + else + { + std::pair NewPair = std::make_pair(InitPos, FinishPos); + if(std::find(vLineSegments.begin(), vLineSegments.end(), NewPair) != vLineSegments.end()) + break; + vLineSegments.push_back(NewPair); + InitPos = NewPos = Collision()->TeleOuts(Tele - 1)[0]; + } + } - if(!DoBreak && Hit) + if(!DoBreak && Hit && Hit != TILE_TELEINHOOK) { if(Hit != TILE_NOHOOK) { @@ -284,7 +300,7 @@ void CPlayers::RenderHookCollLine( break; } - if(Hit) + if(Hit && Hit != TILE_TELEINHOOK) break; NewPos.x = round_to_int(NewPos.x); @@ -297,28 +313,41 @@ void CPlayers::RenderHookCollLine( ExDirection.y = round_to_int(ExDirection.y * 256.0f) / 256.0f; } while(!DoBreak); + std::pair NewPair = std::make_pair(InitPos, FinishPos); + if(std::find(vLineSegments.begin(), vLineSegments.end(), NewPair) == vLineSegments.end()) + vLineSegments.push_back(NewPair); + if(AlwaysRenderHookColl && RenderHookCollPlayer) { // invert the hook coll colors when using cl_show_hook_coll_always and +showhookcoll is pressed HookCollColor = color_invert(HookCollColor); } Graphics()->SetColor(HookCollColor.WithAlpha(Alpha)); + for(const auto &[DrawInitPos, DrawFinishPos] : vLineSegments) + { + if(HookCollSize > 0) + { + float LineWidth = 0.5f + (float)(HookCollSize - 1) * 0.25f; + vec2 PerpToAngle = normalize(vec2(ExDirection.y, -ExDirection.x)) * GameClient()->m_Camera.m_Zoom; + vec2 Pos0 = DrawFinishPos + PerpToAngle * -LineWidth; + vec2 Pos1 = DrawFinishPos + PerpToAngle * LineWidth; + vec2 Pos2 = DrawInitPos + PerpToAngle * -LineWidth; + vec2 Pos3 = DrawInitPos + PerpToAngle * LineWidth; + IGraphics::CFreeformItem FreeformItem(Pos0.x, Pos0.y, Pos1.x, Pos1.y, Pos2.x, Pos2.y, Pos3.x, Pos3.y); + Graphics()->QuadsDrawFreeform(&FreeformItem, 1); + } + else + { + IGraphics::CLineItem LineItem(DrawInitPos.x, DrawInitPos.y, DrawFinishPos.x, DrawFinishPos.y); + Graphics()->LinesDraw(&LineItem, 1); + } + } if(HookCollSize > 0) { - float LineWidth = 0.5f + (float)(HookCollSize - 1) * 0.25f; - vec2 PerpToAngle = normalize(vec2(ExDirection.y, -ExDirection.x)) * GameClient()->m_Camera.m_Zoom; - vec2 Pos0 = FinishPos + PerpToAngle * -LineWidth; - vec2 Pos1 = FinishPos + PerpToAngle * LineWidth; - vec2 Pos2 = InitPos + PerpToAngle * -LineWidth; - vec2 Pos3 = InitPos + PerpToAngle * LineWidth; - IGraphics::CFreeformItem FreeformItem(Pos0.x, Pos0.y, Pos1.x, Pos1.y, Pos2.x, Pos2.y, Pos3.x, Pos3.y); - Graphics()->QuadsDrawFreeform(&FreeformItem, 1); Graphics()->QuadsEnd(); } else { - IGraphics::CLineItem LineItem(InitPos.x, InitPos.y, FinishPos.x, FinishPos.y); - Graphics()->LinesDraw(&LineItem, 1); Graphics()->LinesEnd(); } } @@ -456,7 +485,7 @@ void CPlayers::RenderPlayer( if(Local && !m_pClient->m_Snap.m_SpecInfo.m_Active && Client()->State() != IClient::STATE_DEMOPLAYBACK) { // just use the direct input if it's the local player we are rendering - Angle = angle(m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy] * m_pClient->m_Camera.m_Zoom); + Angle = angle(m_pClient->m_Controls.m_aMousePos[g_Config.m_ClDummy]); } else { diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index 4922ce4e418..ee4fb69f2bd 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -3203,7 +3203,7 @@ void CGameClient::UpdatePrediction() void CGameClient::UpdateSpectatorCursor() { int CursorOwnerId = m_Snap.m_LocalClientId; - if(m_Snap.m_SpecInfo.m_Active || Client()->State() == IClient::STATE_DEMOPLAYBACK) + if(m_Snap.m_SpecInfo.m_Active) { CursorOwnerId = m_Snap.m_SpecInfo.m_SpectatorId; } diff --git a/src/game/editor/editor.cpp b/src/game/editor/editor.cpp index cc48fe1671e..af3d6e1b223 100644 --- a/src/game/editor/editor.cpp +++ b/src/game/editor/editor.cpp @@ -4707,6 +4707,49 @@ bool CEditor::ReplaceSoundCallback(const char *pFileName, int StorageType, void return static_cast(pUser)->ReplaceSound(pFileName, StorageType, true); } +bool CEditor::IsAssetUsed(int FileType, int Index, void *pUser) +{ + CEditor *pEditor = (CEditor *)pUser; + for(int g = 0; g < (int)pEditor->m_Map.m_vpGroups.size(); g++) + { + for(int i = 0; i < (int)pEditor->m_Map.m_vpGroups[g]->m_vpLayers.size(); i++) + { + int LayerType = pEditor->m_Map.m_vpGroups[g]->m_vpLayers[i]->m_Type; + if(FileType == FILETYPE_IMG) + { + if(LayerType == LAYERTYPE_TILES) + { + std::shared_ptr pTiles = std::static_pointer_cast(pEditor->m_Map.m_vpGroups[g]->m_vpLayers[i]); + if(pTiles->m_Image == Index) + { + return true; + } + } + else if(LayerType == LAYERTYPE_QUADS) + { + std::shared_ptr pQuads = std::static_pointer_cast(pEditor->m_Map.m_vpGroups[g]->m_vpLayers[i]); + if(pQuads->m_Image == Index) + { + return true; + } + } + } + else if(FileType == FILETYPE_SOUND) + { + if(LayerType == LAYERTYPE_SOUNDS) + { + std::shared_ptr pSounds = std::static_pointer_cast(pEditor->m_Map.m_vpGroups[g]->m_vpLayers[i]); + if(pSounds->m_Sound == pEditor->m_SelectedImage) + { + return true; + } + } + } + } + } + return false; +} + void CEditor::SelectGameLayer() { for(size_t g = 0; g < m_Map.m_vpGroups.size(); g++) diff --git a/src/game/editor/editor.h b/src/game/editor/editor.h index 17ad24deed1..0ba874cd20f 100644 --- a/src/game/editor/editor.h +++ b/src/game/editor/editor.h @@ -615,7 +615,9 @@ class CEditor : public IEditor POPEVENT_PLACE_BORDER_TILES, POPEVENT_PIXELART_BIG_IMAGE, POPEVENT_PIXELART_MANY_COLORS, - POPEVENT_PIXELART_TOO_MANY_COLORS + POPEVENT_PIXELART_TOO_MANY_COLORS, + POPEVENT_REMOVE_USED_IMAGE, + POPEVENT_REMOVE_USED_SOUND, }; int m_PopupEventType; @@ -1016,6 +1018,7 @@ class CEditor : public IEditor static bool ReplaceSoundCallback(const char *pFileName, int StorageType, void *pUser); static bool AddImage(const char *pFilename, int StorageType, void *pUser); static bool AddSound(const char *pFileName, int StorageType, void *pUser); + static bool IsAssetUsed(int FileType, int Index, void *pUser); bool IsEnvelopeUsed(int EnvelopeIndex) const; void RemoveUnusedEnvelopes(); diff --git a/src/game/editor/editor_actions.cpp b/src/game/editor/editor_actions.cpp index 8f4334d04b9..86b8e4d0b1d 100644 --- a/src/game/editor/editor_actions.cpp +++ b/src/game/editor/editor_actions.cpp @@ -905,7 +905,7 @@ void CEditorActionEditLayerTilesProp::Undo() } else if(m_Prop == ETilesProp::PROP_IMAGE) { - if(m_Previous == -1) + if(m_Previous == -1 || m_pEditor->m_Map.m_vpImages.empty()) { pLayerTiles->m_Image = -1; } @@ -985,7 +985,7 @@ void CEditorActionEditLayerTilesProp::Redo() } else if(m_Prop == ETilesProp::PROP_IMAGE) { - if(m_Current == -1) + if(m_Current == -1 || m_pEditor->m_Map.m_vpImages.empty()) { pLayerTiles->m_Image = -1; } @@ -1085,7 +1085,7 @@ void CEditorActionEditLayerQuadsProp::Apply(int Value) std::shared_ptr pLayerQuads = std::static_pointer_cast(m_pLayer); if(m_Prop == ELayerQuadsProp::PROP_IMAGE) { - if(Value >= 0) + if(Value >= 0 && !m_pEditor->m_Map.m_vpImages.empty()) pLayerQuads->m_Image = Value % m_pEditor->m_Map.m_vpImages.size(); else pLayerQuads->m_Image = -1; @@ -1730,7 +1730,7 @@ void CEditorActionEditLayerSoundsProp::Apply(int Value) std::shared_ptr pLayerSounds = std::static_pointer_cast(m_pLayer); if(m_Prop == ELayerSoundsProp::PROP_SOUND) { - if(Value >= 0) + if(Value >= 0 && !m_pEditor->m_Map.m_vpSounds.empty()) pLayerSounds->m_Sound = Value % m_pEditor->m_Map.m_vpSounds.size(); else pLayerSounds->m_Sound = -1; diff --git a/src/game/editor/popups.cpp b/src/game/editor/popups.cpp index 11801145b23..b9b1b85919b 100644 --- a/src/game/editor/popups.cpp +++ b/src/game/editor/popups.cpp @@ -1732,8 +1732,16 @@ CUi::EPopupMenuFunctionResult CEditor::PopupImage(void *pContext, CUIRect View, View.HSplitTop(RowHeight, &Slot, &View); if(pEditor->DoButton_MenuItem(&s_RemoveButton, "Remove", 0, &Slot, 0, "Removes the image from the map")) { - pEditor->m_Map.m_vpImages.erase(pEditor->m_Map.m_vpImages.begin() + pEditor->m_SelectedImage); - pEditor->m_Map.ModifyImageIndex(gs_ModifyIndexDeleted(pEditor->m_SelectedImage)); + if(IsAssetUsed(FILETYPE_IMG, pEditor->m_SelectedImage, pEditor)) + { + pEditor->m_PopupEventType = POPEVENT_REMOVE_USED_IMAGE; + pEditor->m_PopupEventActivated = true; + } + else + { + pEditor->m_Map.m_vpImages.erase(pEditor->m_Map.m_vpImages.begin() + pEditor->m_SelectedImage); + pEditor->m_Map.ModifyImageIndex(gs_ModifyIndexDeleted(pEditor->m_SelectedImage)); + } return CUi::POPUP_CLOSE_CURRENT; } @@ -1834,8 +1842,16 @@ CUi::EPopupMenuFunctionResult CEditor::PopupSound(void *pContext, CUIRect View, View.HSplitTop(RowHeight, &Slot, &View); if(pEditor->DoButton_MenuItem(&s_RemoveButton, "Remove", 0, &Slot, 0, "Removes the sound from the map")) { - pEditor->m_Map.m_vpSounds.erase(pEditor->m_Map.m_vpSounds.begin() + pEditor->m_SelectedSound); - pEditor->m_Map.ModifySoundIndex(gs_ModifyIndexDeleted(pEditor->m_SelectedSound)); + if(IsAssetUsed(FILETYPE_SOUND, pEditor->m_SelectedImage, pEditor)) + { + pEditor->m_PopupEventType = POPEVENT_REMOVE_USED_SOUND; + pEditor->m_PopupEventActivated = true; + } + else + { + pEditor->m_Map.m_vpSounds.erase(pEditor->m_Map.m_vpSounds.begin() + pEditor->m_SelectedSound); + pEditor->m_Map.ModifySoundIndex(gs_ModifyIndexDeleted(pEditor->m_SelectedSound)); + } return CUi::POPUP_CLOSE_CURRENT; } @@ -2066,6 +2082,16 @@ CUi::EPopupMenuFunctionResult CEditor::PopupEvent(void *pContext, CUIRect View, pTitle = "Too many colors"; pMessage = "The client only supports 64 images but more would be needed to add the selected image as tileart."; } + else if(pEditor->m_PopupEventType == POPEVENT_REMOVE_USED_IMAGE) + { + pTitle = "Remove image"; + pMessage = "This image is used in the map. Removing it will reset all layers that use this image to their default.\n\nRemove anyway?"; + } + else if(pEditor->m_PopupEventType == POPEVENT_REMOVE_USED_SOUND) + { + pTitle = "Remove sound"; + pMessage = "This sound is used in the map. Removing it will reset all layers that use this sound to their default.\n\nRemove anyway?"; + } else { dbg_assert(false, "m_PopupEventType invalid"); @@ -2172,6 +2198,16 @@ CUi::EPopupMenuFunctionResult CEditor::PopupEvent(void *pContext, CUIRect View, { pEditor->AddTileart(); } + else if(pEditor->m_PopupEventType == POPEVENT_REMOVE_USED_IMAGE) + { + pEditor->m_Map.m_vpImages.erase(pEditor->m_Map.m_vpImages.begin() + pEditor->m_SelectedImage); + pEditor->m_Map.ModifyImageIndex(gs_ModifyIndexDeleted(pEditor->m_SelectedImage)); + } + else if(pEditor->m_PopupEventType == POPEVENT_REMOVE_USED_SOUND) + { + pEditor->m_Map.m_vpSounds.erase(pEditor->m_Map.m_vpSounds.begin() + pEditor->m_SelectedSound); + pEditor->m_Map.ModifySoundIndex(gs_ModifyIndexDeleted(pEditor->m_SelectedSound)); + } pEditor->m_PopupEventWasActivated = false; return CUi::POPUP_CLOSE_CURRENT; } diff --git a/src/game/version.h b/src/game/version.h index 5b48443e4bb..9e1ba62d026 100644 --- a/src/game/version.h +++ b/src/game/version.h @@ -3,7 +3,7 @@ #ifndef GAME_VERSION_H #define GAME_VERSION_H #ifndef GAME_RELEASE_VERSION -#define GAME_RELEASE_VERSION "18.9" +#define GAME_RELEASE_VERSION "19.0" #endif // teeworlds @@ -13,7 +13,7 @@ #define GAME_NETVERSION7 "0.7 802f1be60a05665f" // ddnet -#define DDNET_VERSION_NUMBER 18090 +#define DDNET_VERSION_NUMBER 19000 extern const char *GIT_SHORTREV_HASH; #define GAME_NAME "DDNet" #endif