mirror of
https://github.com/imayushsaini/Bombsquad-Ballistica-Modded-Server.git
synced 2025-10-20 00:00:39 +00:00
commit
c5d45335e8
202 changed files with 13270 additions and 4246 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python3.9
|
#!/usr/bin/env -S python3.10 -O
|
||||||
|
|
||||||
# Released under the MIT License. See LICENSE for details.
|
# Released under the MIT License. See LICENSE for details.
|
||||||
#
|
#
|
||||||
|
|
|
||||||
99
dist/ba_data/data/langdata.json
vendored
99
dist/ba_data/data/langdata.json
vendored
|
|
@ -9,6 +9,7 @@
|
||||||
"Danish": "Dansk",
|
"Danish": "Dansk",
|
||||||
"Dutch": "Nederlands",
|
"Dutch": "Nederlands",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Tagalog ",
|
||||||
"French": "Français",
|
"French": "Français",
|
||||||
"German": "Deutsch",
|
"German": "Deutsch",
|
||||||
"Gibberish": "Gibberish",
|
"Gibberish": "Gibberish",
|
||||||
|
|
@ -19,7 +20,7 @@
|
||||||
"Italian": "Italiano",
|
"Italian": "Italiano",
|
||||||
"Japanese": "日本語",
|
"Japanese": "日本語",
|
||||||
"Korean": "한국어",
|
"Korean": "한국어",
|
||||||
"Persian": " فارسی",
|
"Persian": "فارسی",
|
||||||
"Polish": "Polski",
|
"Polish": "Polski",
|
||||||
"Portuguese": "Português",
|
"Portuguese": "Português",
|
||||||
"Romanian": "Română",
|
"Romanian": "Română",
|
||||||
|
|
@ -28,6 +29,7 @@
|
||||||
"Slovak": "Slovenčina ",
|
"Slovak": "Slovenčina ",
|
||||||
"Spanish": "Español",
|
"Spanish": "Español",
|
||||||
"Swedish": "Svenska",
|
"Swedish": "Svenska",
|
||||||
|
"Tamil": "தமிழ்",
|
||||||
"Thai": "ภาษาไทย",
|
"Thai": "ภาษาไทย",
|
||||||
"Turkish": "Türkçe",
|
"Turkish": "Türkçe",
|
||||||
"Ukrainian": "Українська",
|
"Ukrainian": "Українська",
|
||||||
|
|
@ -60,6 +62,7 @@
|
||||||
"Abdul",
|
"Abdul",
|
||||||
"Abdulloh",
|
"Abdulloh",
|
||||||
"Abe",
|
"Abe",
|
||||||
|
"Ahmed abed",
|
||||||
"abhi",
|
"abhi",
|
||||||
"AbhinaY",
|
"AbhinaY",
|
||||||
"Gifasa abidjahsi",
|
"Gifasa abidjahsi",
|
||||||
|
|
@ -100,9 +103,10 @@
|
||||||
"Abdullah Akkan",
|
"Abdullah Akkan",
|
||||||
"Berk Akkaya",
|
"Berk Akkaya",
|
||||||
"AKYG",
|
"AKYG",
|
||||||
"Mohammed al-abri",
|
"mohammed al-abri",
|
||||||
"Ali Al-Gattan",
|
"Ali Al-Gattan",
|
||||||
"alaa",
|
"alaa",
|
||||||
|
"Ahmad Alahmad",
|
||||||
"Anna Alanis",
|
"Anna Alanis",
|
||||||
"Manuel Alanis",
|
"Manuel Alanis",
|
||||||
"alanjijuoo7fudu@gmail.com",
|
"alanjijuoo7fudu@gmail.com",
|
||||||
|
|
@ -138,16 +142,19 @@
|
||||||
"Amar",
|
"Amar",
|
||||||
"alfredo jasper a ambel",
|
"alfredo jasper a ambel",
|
||||||
"Amedeo",
|
"Amedeo",
|
||||||
|
"ameen",
|
||||||
"Kidane Amen-Allah",
|
"Kidane Amen-Allah",
|
||||||
"amin.ir",
|
"amin.ir",
|
||||||
"Amir",
|
"Amir",
|
||||||
"amir22games",
|
"amir22games",
|
||||||
"amir234",
|
"amir234",
|
||||||
|
"amir80sas",
|
||||||
"AmirMahdi.D :P",
|
"AmirMahdi.D :P",
|
||||||
"Amirul",
|
"Amirul",
|
||||||
"Ange Kevin Amlaman",
|
"Ange Kevin Amlaman",
|
||||||
"amr",
|
"amr",
|
||||||
"Anandchaursiya",
|
"Anandchaursiya",
|
||||||
|
"Anas",
|
||||||
"AnatoliyanChubukov",
|
"AnatoliyanChubukov",
|
||||||
"AnatoliyanChybycov",
|
"AnatoliyanChybycov",
|
||||||
"Bryan Enrique Perez de Anda",
|
"Bryan Enrique Perez de Anda",
|
||||||
|
|
@ -184,11 +191,14 @@
|
||||||
"Hellmann Arias",
|
"Hellmann Arias",
|
||||||
"Muhammad Arief",
|
"Muhammad Arief",
|
||||||
"Arin",
|
"Arin",
|
||||||
|
"Arroz",
|
||||||
"ARSHAD",
|
"ARSHAD",
|
||||||
"Artem",
|
"Artem",
|
||||||
"Valentino Artizzu",
|
"Valentino Artizzu",
|
||||||
|
"Arxyma",
|
||||||
"Ashik",
|
"Ashik",
|
||||||
"Ashish",
|
"Ashish",
|
||||||
|
"AskarBink",
|
||||||
"Asraf",
|
"Asraf",
|
||||||
"Asshold",
|
"Asshold",
|
||||||
"Eliane Santos de assis",
|
"Eliane Santos de assis",
|
||||||
|
|
@ -198,7 +208,9 @@
|
||||||
"Audacious7214",
|
"Audacious7214",
|
||||||
"Aufaghifari",
|
"Aufaghifari",
|
||||||
"Ausiàs",
|
"Ausiàs",
|
||||||
|
"autismo",
|
||||||
"Autoskip",
|
"Autoskip",
|
||||||
|
"Ryan Auxil",
|
||||||
"Avamander",
|
"Avamander",
|
||||||
"awase2020@gmail.com",
|
"awase2020@gmail.com",
|
||||||
"sev alaslam Awd",
|
"sev alaslam Awd",
|
||||||
|
|
@ -211,9 +223,11 @@
|
||||||
"Burak Karadeniz (Myth B)",
|
"Burak Karadeniz (Myth B)",
|
||||||
"Myth B.",
|
"Myth B.",
|
||||||
"B4likeBefore",
|
"B4likeBefore",
|
||||||
|
"Praveen Babu",
|
||||||
"Balage8",
|
"Balage8",
|
||||||
"BalaguerM",
|
"BalaguerM",
|
||||||
"Peter Balind",
|
"Peter Balind",
|
||||||
|
"Levalia Ball",
|
||||||
"Balqis",
|
"Balqis",
|
||||||
"Balraj",
|
"Balraj",
|
||||||
"Smutny Bambol",
|
"Smutny Bambol",
|
||||||
|
|
@ -237,6 +251,7 @@
|
||||||
"David BAUMANN",
|
"David BAUMANN",
|
||||||
"bayanus",
|
"bayanus",
|
||||||
"Wojtek Bałut",
|
"Wojtek Bałut",
|
||||||
|
"Hi bbbbbbbbb",
|
||||||
"Eduardo Beascochea",
|
"Eduardo Beascochea",
|
||||||
"Eduan Bekker",
|
"Eduan Bekker",
|
||||||
"бравлер Андрей Belarus",
|
"бравлер Андрей Belarus",
|
||||||
|
|
@ -250,7 +265,9 @@
|
||||||
"Benjamín",
|
"Benjamín",
|
||||||
"benjapol",
|
"benjapol",
|
||||||
"Ori bennov",
|
"Ori bennov",
|
||||||
|
"BenVectorgames",
|
||||||
"benybrot96",
|
"benybrot96",
|
||||||
|
"berkay",
|
||||||
"Bernardiny",
|
"Bernardiny",
|
||||||
"Anton Bang Berner",
|
"Anton Bang Berner",
|
||||||
"Felix Bernhard",
|
"Felix Bernhard",
|
||||||
|
|
@ -261,6 +278,7 @@
|
||||||
"BlackShadowQ",
|
"BlackShadowQ",
|
||||||
"Daniel Block",
|
"Daniel Block",
|
||||||
"BlueBlur",
|
"BlueBlur",
|
||||||
|
"bob bobber",
|
||||||
"The Bomboler 💣",
|
"The Bomboler 💣",
|
||||||
"bombsquad",
|
"bombsquad",
|
||||||
"Bomby",
|
"Bomby",
|
||||||
|
|
@ -280,6 +298,7 @@
|
||||||
"Bořivoj",
|
"Bořivoj",
|
||||||
"Paul braga",
|
"Paul braga",
|
||||||
"Sammy Braun",
|
"Sammy Braun",
|
||||||
|
"Brayk",
|
||||||
"Brendan",
|
"Brendan",
|
||||||
"Federico Brigante",
|
"Federico Brigante",
|
||||||
"Anderson Brito",
|
"Anderson Brito",
|
||||||
|
|
@ -297,7 +316,10 @@
|
||||||
"ByAdrianYT",
|
"ByAdrianYT",
|
||||||
"Mohamad Hossein BZ",
|
"Mohamad Hossein BZ",
|
||||||
"Christoffer Bünner",
|
"Christoffer Bünner",
|
||||||
|
"mvp aka cactus",
|
||||||
|
"mvp aka legend (aka cactus) 🌵",
|
||||||
"Cadødø",
|
"Cadødø",
|
||||||
|
"Chris Laurence Cagoco",
|
||||||
"Calet",
|
"Calet",
|
||||||
"Kenneth Callaghan",
|
"Kenneth Callaghan",
|
||||||
"Federico Campagnolo",
|
"Federico Campagnolo",
|
||||||
|
|
@ -333,6 +355,7 @@
|
||||||
"Nick Clime",
|
"Nick Clime",
|
||||||
"Jerome Collet",
|
"Jerome Collet",
|
||||||
"probably my. com",
|
"probably my. com",
|
||||||
|
"Comrade",
|
||||||
"Stefano Corona",
|
"Stefano Corona",
|
||||||
"Corrolot",
|
"Corrolot",
|
||||||
"Francisco Law Cortez",
|
"Francisco Law Cortez",
|
||||||
|
|
@ -362,6 +385,7 @@
|
||||||
"Dani",
|
"Dani",
|
||||||
"Daniel",
|
"Daniel",
|
||||||
"Daniel3505",
|
"Daniel3505",
|
||||||
|
"DaniesAlex007",
|
||||||
"Dančo",
|
"Dančo",
|
||||||
"Iman Darius",
|
"Iman Darius",
|
||||||
"DarkAnarcy",
|
"DarkAnarcy",
|
||||||
|
|
@ -369,12 +393,15 @@
|
||||||
"DarshaN",
|
"DarshaN",
|
||||||
"Shibin das",
|
"Shibin das",
|
||||||
"Dasto",
|
"Dasto",
|
||||||
|
"David",
|
||||||
"Davide",
|
"Davide",
|
||||||
|
"DavidPlayzloll",
|
||||||
"DaymanLP",
|
"DaymanLP",
|
||||||
"Ddávid",
|
"Ddávid",
|
||||||
"Die or Dead",
|
"Die or Dead",
|
||||||
"Привет от детей DeadLine",
|
"Привет от детей DeadLine",
|
||||||
"deepjith",
|
"deepjith",
|
||||||
|
"deliciouspudding43",
|
||||||
"delshe",
|
"delshe",
|
||||||
"Denis",
|
"Denis",
|
||||||
"Dennis",
|
"Dennis",
|
||||||
|
|
@ -399,6 +426,7 @@
|
||||||
"Dmirus",
|
"Dmirus",
|
||||||
"Count Su Doku",
|
"Count Su Doku",
|
||||||
"DominikSikora!",
|
"DominikSikora!",
|
||||||
|
"Kai Dominique",
|
||||||
"Gerardo Doro",
|
"Gerardo Doro",
|
||||||
"DottorMorte",
|
"DottorMorte",
|
||||||
"Dragomir",
|
"Dragomir",
|
||||||
|
|
@ -422,11 +450,14 @@
|
||||||
"EKFH",
|
"EKFH",
|
||||||
"avatar por reina del carnaval en la que te lo mando el",
|
"avatar por reina del carnaval en la que te lo mando el",
|
||||||
"Rezk ElAdawy",
|
"Rezk ElAdawy",
|
||||||
|
"ElCatCaesar",
|
||||||
"ElderLink",
|
"ElderLink",
|
||||||
|
"Elian",
|
||||||
"Elsans320_YT",
|
"Elsans320_YT",
|
||||||
"Elskoser",
|
"Elskoser",
|
||||||
"ElVolKo",
|
"ElVolKo",
|
||||||
"Ramy Emad",
|
"Ramy Emad",
|
||||||
|
"Emil",
|
||||||
"Kürti Emil",
|
"Kürti Emil",
|
||||||
"Muhammed emir",
|
"Muhammed emir",
|
||||||
"EmirSametEr",
|
"EmirSametEr",
|
||||||
|
|
@ -443,6 +474,8 @@
|
||||||
"Esmael",
|
"Esmael",
|
||||||
"Jose espinoza",
|
"Jose espinoza",
|
||||||
"ethanmigueltrinidad",
|
"ethanmigueltrinidad",
|
||||||
|
"ExaYT",
|
||||||
|
"Exelendary",
|
||||||
"Abdullatif Badinjki ExPeRt 1420",
|
"Abdullatif Badinjki ExPeRt 1420",
|
||||||
"ExplosiveDinosaurs.com",
|
"ExplosiveDinosaurs.com",
|
||||||
"EXTENDOO",
|
"EXTENDOO",
|
||||||
|
|
@ -457,7 +490,9 @@
|
||||||
"FanDolz.",
|
"FanDolz.",
|
||||||
"Faqih",
|
"Faqih",
|
||||||
"Muhammad Faqih ''None''",
|
"Muhammad Faqih ''None''",
|
||||||
|
"Syed Irfan Farhan",
|
||||||
"Luiz Henrique Faria",
|
"Luiz Henrique Faria",
|
||||||
|
"Syed Fahrin Farihin",
|
||||||
"FaultyAdventure",
|
"FaultyAdventure",
|
||||||
"Putra Riski Fauzi",
|
"Putra Riski Fauzi",
|
||||||
"fauziozan.23@gmail.com",
|
"fauziozan.23@gmail.com",
|
||||||
|
|
@ -474,16 +509,20 @@
|
||||||
"FightBiscuit",
|
"FightBiscuit",
|
||||||
"filip",
|
"filip",
|
||||||
"Filip117",
|
"Filip117",
|
||||||
|
"Fillowskyy",
|
||||||
"Firdaus",
|
"Firdaus",
|
||||||
"Daffa Firdaus",
|
"Daffa Firdaus",
|
||||||
"Aldereus Fire",
|
"Aldereus Fire",
|
||||||
"Robert Fischer",
|
"Robert Fischer",
|
||||||
"Kai Fleischmann",
|
"Kai Fleischmann",
|
||||||
"Iancu Florin",
|
"Iancu Florin",
|
||||||
|
"FluffyPal",
|
||||||
"FLᎧRᏋᏁTIᏁᎧ",
|
"FLᎧRᏋᏁTIᏁᎧ",
|
||||||
"Angelo Fontana",
|
"Angelo Fontana",
|
||||||
"FortKing",
|
"FortKing",
|
||||||
|
"Freaku",
|
||||||
"Golden Freddy",
|
"Golden Freddy",
|
||||||
|
"FREÂK",
|
||||||
"Andrey Fridholm",
|
"Andrey Fridholm",
|
||||||
"FriskTheHuman303",
|
"FriskTheHuman303",
|
||||||
"Froshlee14",
|
"Froshlee14",
|
||||||
|
|
@ -492,6 +531,7 @@
|
||||||
"Gustavo FunnyGuard28",
|
"Gustavo FunnyGuard28",
|
||||||
"Erick G",
|
"Erick G",
|
||||||
"Roberto G",
|
"Roberto G",
|
||||||
|
"George G.",
|
||||||
"Fabian G.L.",
|
"Fabian G.L.",
|
||||||
"G192",
|
"G192",
|
||||||
"MZ G4MES",
|
"MZ G4MES",
|
||||||
|
|
@ -530,6 +570,7 @@
|
||||||
"Jhon Zion N. delos reyes gmail",
|
"Jhon Zion N. delos reyes gmail",
|
||||||
"God丶烛龙",
|
"God丶烛龙",
|
||||||
"박준서(PJS GoodNews)",
|
"박준서(PJS GoodNews)",
|
||||||
|
"gowthamvelkarthik.k",
|
||||||
"Nicola Grassi",
|
"Nicola Grassi",
|
||||||
"Gerrit Grobler",
|
"Gerrit Grobler",
|
||||||
"Oliver Grosskloss",
|
"Oliver Grosskloss",
|
||||||
|
|
@ -541,6 +582,7 @@
|
||||||
"Gurad",
|
"Gurad",
|
||||||
"Max Guskov",
|
"Max Guskov",
|
||||||
"Rachmat Gusti",
|
"Rachmat Gusti",
|
||||||
|
"Aditya Gwala",
|
||||||
"Tódor Gábor",
|
"Tódor Gábor",
|
||||||
"Tymoteusz Górski",
|
"Tymoteusz Górski",
|
||||||
"Thomas Günther",
|
"Thomas Günther",
|
||||||
|
|
@ -563,12 +605,14 @@
|
||||||
"Abdi Haryadi",
|
"Abdi Haryadi",
|
||||||
"Hasan",
|
"Hasan",
|
||||||
"Mohammad hasan",
|
"Mohammad hasan",
|
||||||
|
"Hisham bin Hashim",
|
||||||
"Emil Hauge",
|
"Emil Hauge",
|
||||||
"Arian Haxhijaj",
|
"Arian Haxhijaj",
|
||||||
"Ergin Haxhijaj",
|
"Ergin Haxhijaj",
|
||||||
"Florian Haxhijaj",
|
"Florian Haxhijaj",
|
||||||
"Hayate",
|
"Hayate",
|
||||||
"Hayate16",
|
"Hayate16",
|
||||||
|
"hehhwushh",
|
||||||
"Lukas Heim",
|
"Lukas Heim",
|
||||||
"Hugues Heitz",
|
"Hugues Heitz",
|
||||||
"HellisWrath",
|
"HellisWrath",
|
||||||
|
|
@ -617,6 +661,7 @@
|
||||||
"!YamGila (Syed Ilham)",
|
"!YamGila (Syed Ilham)",
|
||||||
"Iliya_bomB",
|
"Iliya_bomB",
|
||||||
"illonis",
|
"illonis",
|
||||||
|
"Syed Ilham Ilman",
|
||||||
"Ily77788",
|
"Ily77788",
|
||||||
"Ilya",
|
"Ilya",
|
||||||
"IlyxaGold",
|
"IlyxaGold",
|
||||||
|
|
@ -700,6 +745,7 @@
|
||||||
"kalpesh",
|
"kalpesh",
|
||||||
"Kalyan",
|
"Kalyan",
|
||||||
"Kamal",
|
"Kamal",
|
||||||
|
"Aiman Aryan Kamarajan",
|
||||||
"Kamil (Limak09)",
|
"Kamil (Limak09)",
|
||||||
"Kaneki",
|
"Kaneki",
|
||||||
"Smurfit Kappa",
|
"Smurfit Kappa",
|
||||||
|
|
@ -738,6 +784,7 @@
|
||||||
"Philipp Koch",
|
"Philipp Koch",
|
||||||
"Kolmat",
|
"Kolmat",
|
||||||
"komasio",
|
"komasio",
|
||||||
|
"komasio71",
|
||||||
"KomodoRec",
|
"KomodoRec",
|
||||||
"Niko Koren",
|
"Niko Koren",
|
||||||
"Nikolay Korolyov",
|
"Nikolay Korolyov",
|
||||||
|
|
@ -766,6 +813,7 @@
|
||||||
"John Patrick Lachica",
|
"John Patrick Lachica",
|
||||||
"laikrai",
|
"laikrai",
|
||||||
"m a lakum",
|
"m a lakum",
|
||||||
|
"Dmitry Lamperujev",
|
||||||
"K. Larsen",
|
"K. Larsen",
|
||||||
"Nicklas Larsen",
|
"Nicklas Larsen",
|
||||||
"Shin Lasung",
|
"Shin Lasung",
|
||||||
|
|
@ -784,11 +832,13 @@
|
||||||
"Shuaibing Li",
|
"Shuaibing Li",
|
||||||
"Tred Li",
|
"Tred Li",
|
||||||
"Juan Liao",
|
"Juan Liao",
|
||||||
|
"LickyBeeYT",
|
||||||
"Nicola Ligas",
|
"Nicola Ligas",
|
||||||
"Limak09",
|
"Limak09",
|
||||||
"lin",
|
"lin",
|
||||||
"Dustin Lin",
|
"Dustin Lin",
|
||||||
"Kyle Lin",
|
"Kyle Lin",
|
||||||
|
"Linus",
|
||||||
"Linux44313",
|
"Linux44313",
|
||||||
"LiteBalt",
|
"LiteBalt",
|
||||||
"LittleNyanCat",
|
"LittleNyanCat",
|
||||||
|
|
@ -815,9 +865,11 @@
|
||||||
"luispro25",
|
"luispro25",
|
||||||
"Luka",
|
"Luka",
|
||||||
"Luke",
|
"Luke",
|
||||||
|
"Luke994",
|
||||||
"Lukman",
|
"Lukman",
|
||||||
"Hermanni Luosujärvi",
|
"Hermanni Luosujärvi",
|
||||||
"Lurã",
|
"Lurã",
|
||||||
|
"Luthy",
|
||||||
"Geogre Lyu",
|
"Geogre Lyu",
|
||||||
"M.R.T",
|
"M.R.T",
|
||||||
"Mac 143338",
|
"Mac 143338",
|
||||||
|
|
@ -832,6 +884,7 @@
|
||||||
"Mahmoud",
|
"Mahmoud",
|
||||||
"maicol",
|
"maicol",
|
||||||
"Majestozão",
|
"Majestozão",
|
||||||
|
"Makar",
|
||||||
"Maks1212",
|
"Maks1212",
|
||||||
"Malaysian",
|
"Malaysian",
|
||||||
"EMILIO MALQUIN",
|
"EMILIO MALQUIN",
|
||||||
|
|
@ -859,6 +912,7 @@
|
||||||
"Martín",
|
"Martín",
|
||||||
"Taobao Mascot",
|
"Taobao Mascot",
|
||||||
"Masood",
|
"Masood",
|
||||||
|
"MasterRyan",
|
||||||
"Mathias",
|
"Mathias",
|
||||||
"matias",
|
"matias",
|
||||||
"matj1",
|
"matj1",
|
||||||
|
|
@ -876,6 +930,7 @@
|
||||||
"Kevin Mejía",
|
"Kevin Mejía",
|
||||||
"MereCrack",
|
"MereCrack",
|
||||||
"Mert",
|
"Mert",
|
||||||
|
"Meryu07",
|
||||||
"Meysam",
|
"Meysam",
|
||||||
"MGH",
|
"MGH",
|
||||||
"Mick",
|
"Mick",
|
||||||
|
|
@ -903,9 +958,12 @@
|
||||||
"Mohamed",
|
"Mohamed",
|
||||||
"Mohammad",
|
"Mohammad",
|
||||||
"Mohammad11dembele",
|
"Mohammad11dembele",
|
||||||
|
"MOHAMMADERFAN",
|
||||||
"Mohammadhosain",
|
"Mohammadhosain",
|
||||||
"Mohammed",
|
"Mohammed",
|
||||||
|
"MOHAMMEDTALAL1ST",
|
||||||
"1n Mohhaamad",
|
"1n Mohhaamad",
|
||||||
|
"Moin",
|
||||||
"MONIRIE",
|
"MONIRIE",
|
||||||
"Carlos Montalvo",
|
"Carlos Montalvo",
|
||||||
"Ederson Moraes",
|
"Ederson Moraes",
|
||||||
|
|
@ -963,7 +1021,9 @@
|
||||||
"Nico-iVekko",
|
"Nico-iVekko",
|
||||||
"Nicola",
|
"Nicola",
|
||||||
"Nicolas",
|
"Nicolas",
|
||||||
|
"Niels",
|
||||||
"Frederik Nielsen",
|
"Frederik Nielsen",
|
||||||
|
"Nifujini",
|
||||||
"Nikali2007",
|
"Nikali2007",
|
||||||
"Nima",
|
"Nima",
|
||||||
"XU NING",
|
"XU NING",
|
||||||
|
|
@ -975,6 +1035,7 @@
|
||||||
"Noam",
|
"Noam",
|
||||||
"Simone Nobili",
|
"Simone Nobili",
|
||||||
"NofaseCZ",
|
"NofaseCZ",
|
||||||
|
"Max Noisa",
|
||||||
"Noisb",
|
"Noisb",
|
||||||
"Noobslaya101",
|
"Noobslaya101",
|
||||||
"noorjandle1",
|
"noorjandle1",
|
||||||
|
|
@ -1001,8 +1062,10 @@
|
||||||
"Abhinay Pandey",
|
"Abhinay Pandey",
|
||||||
"PangpondTH",
|
"PangpondTH",
|
||||||
"PantheRoP",
|
"PantheRoP",
|
||||||
|
"ParadoxPlayz",
|
||||||
"Gavin Park",
|
"Gavin Park",
|
||||||
"Parkurist",
|
"Parkurist",
|
||||||
|
"Pascal17",
|
||||||
"Pastis69",
|
"Pastis69",
|
||||||
"Sagar patil",
|
"Sagar patil",
|
||||||
"pato",
|
"pato",
|
||||||
|
|
@ -1010,6 +1073,7 @@
|
||||||
"paulo",
|
"paulo",
|
||||||
"Dominik Pavešić",
|
"Dominik Pavešić",
|
||||||
"BARLAS PAVLOS-IASON",
|
"BARLAS PAVLOS-IASON",
|
||||||
|
"Payu",
|
||||||
"PC189085",
|
"PC189085",
|
||||||
"PC192082",
|
"PC192082",
|
||||||
"pc192089",
|
"pc192089",
|
||||||
|
|
@ -1048,21 +1112,27 @@
|
||||||
"Jaideep Kumar PM",
|
"Jaideep Kumar PM",
|
||||||
"podolianyn",
|
"podolianyn",
|
||||||
"poggersCat",
|
"poggersCat",
|
||||||
|
"Pong",
|
||||||
"Pooya",
|
"Pooya",
|
||||||
"pouriya",
|
"pouriya",
|
||||||
"Pranav",
|
"Pranav",
|
||||||
"Luca Preibsch",
|
"Luca Preibsch",
|
||||||
|
"Prem",
|
||||||
"Fabian Prinz",
|
"Fabian Prinz",
|
||||||
"Private0201",
|
"Private0201",
|
||||||
"Priyanshu",
|
"Priyanshu",
|
||||||
|
"Brayk pro 2.0",
|
||||||
|
"Sus propios",
|
||||||
"psychatrickivi12",
|
"psychatrickivi12",
|
||||||
"pszlklismo",
|
"pszlklismo",
|
||||||
"Pulidomedia.com",
|
"Pulidomedia.com",
|
||||||
"haris purnama",
|
"haris purnama",
|
||||||
"GABRIEL PUTRICK",
|
"GABRIEL PUTRICK",
|
||||||
"Gangler Quentin",
|
"Gangler Quentin",
|
||||||
|
"Qwsa",
|
||||||
"QŴE",
|
"QŴE",
|
||||||
"Anbarasan R",
|
"Anbarasan R",
|
||||||
|
"efvdtrrgvvfygttty5 5 r",
|
||||||
"Felo Raafat",
|
"Felo Raafat",
|
||||||
"Tim Rabatr",
|
"Tim Rabatr",
|
||||||
"RadicalGamer",
|
"RadicalGamer",
|
||||||
|
|
@ -1158,7 +1228,10 @@
|
||||||
"M. Rizki Agus Salim",
|
"M. Rizki Agus Salim",
|
||||||
"Salted",
|
"Salted",
|
||||||
"Salvo04",
|
"Salvo04",
|
||||||
|
"San",
|
||||||
|
"SaNt0RiNiKits577YT",
|
||||||
"Guilherme Santana",
|
"Guilherme Santana",
|
||||||
|
"Santiago",
|
||||||
"Ivan Santos :)",
|
"Ivan Santos :)",
|
||||||
"Diamond Sanwich",
|
"Diamond Sanwich",
|
||||||
"SAO_OMH",
|
"SAO_OMH",
|
||||||
|
|
@ -1175,6 +1248,7 @@
|
||||||
"Mihai Serbanica",
|
"Mihai Serbanica",
|
||||||
"Daniel Balam Cabrera Serrano",
|
"Daniel Balam Cabrera Serrano",
|
||||||
"Yefta Aditya Setiawan",
|
"Yefta Aditya Setiawan",
|
||||||
|
"Sg",
|
||||||
"sgx",
|
"sgx",
|
||||||
"Black Shadow",
|
"Black Shadow",
|
||||||
"ShadowQ",
|
"ShadowQ",
|
||||||
|
|
@ -1184,6 +1258,7 @@
|
||||||
"Nalam Shashwath",
|
"Nalam Shashwath",
|
||||||
"Haige Shi",
|
"Haige Shi",
|
||||||
"ShockedGaming",
|
"ShockedGaming",
|
||||||
|
"Shogun",
|
||||||
"Shayan Shokry",
|
"Shayan Shokry",
|
||||||
"Dominik Sikora",
|
"Dominik Sikora",
|
||||||
"Leonardo Henrique da Silva",
|
"Leonardo Henrique da Silva",
|
||||||
|
|
@ -1212,6 +1287,7 @@
|
||||||
"Spielfream",
|
"Spielfream",
|
||||||
"Spy",
|
"Spy",
|
||||||
"sss",
|
"sss",
|
||||||
|
"ST",
|
||||||
"Danny Stalman",
|
"Danny Stalman",
|
||||||
"stampycat",
|
"stampycat",
|
||||||
"Bartosz Staniszewski",
|
"Bartosz Staniszewski",
|
||||||
|
|
@ -1222,12 +1298,16 @@
|
||||||
"stelios",
|
"stelios",
|
||||||
"Stephanie",
|
"Stephanie",
|
||||||
"stephen",
|
"stephen",
|
||||||
|
"Aleksa Stevčić",
|
||||||
"Janis Stolzenwald",
|
"Janis Stolzenwald",
|
||||||
"Storm",
|
"Storm",
|
||||||
|
"STPayoube",
|
||||||
|
"Stratex",
|
||||||
"SYED EPIC STUDIOS",
|
"SYED EPIC STUDIOS",
|
||||||
"sun.4810",
|
"sun.4810",
|
||||||
"Samet Sunal",
|
"Samet Sunal",
|
||||||
"sundar",
|
"sundar",
|
||||||
|
"Indo sus",
|
||||||
"Sven",
|
"Sven",
|
||||||
"Shannon Sy",
|
"Shannon Sy",
|
||||||
"syaifudib",
|
"syaifudib",
|
||||||
|
|
@ -1237,12 +1317,14 @@
|
||||||
"Daniel Sýkora",
|
"Daniel Sýkora",
|
||||||
"Arung Taftazani",
|
"Arung Taftazani",
|
||||||
"taha",
|
"taha",
|
||||||
|
"Rasim Eren TAHMAZ",
|
||||||
"Juancho Talarga",
|
"Juancho Talarga",
|
||||||
"Emre Talha(Alienus)",
|
"Emre Talha(Alienus)",
|
||||||
"talopl123",
|
"talopl123",
|
||||||
"Talrev134",
|
"Talrev134",
|
||||||
"Kaustubh Tando",
|
"Kaustubh Tando",
|
||||||
"Kaustubh Tandon",
|
"Kaustubh Tandon",
|
||||||
|
"Tania",
|
||||||
"Dmytro Tarasenko",
|
"Dmytro Tarasenko",
|
||||||
"Tarma",
|
"Tarma",
|
||||||
"tarun",
|
"tarun",
|
||||||
|
|
@ -1271,6 +1353,7 @@
|
||||||
"TheMikirog",
|
"TheMikirog",
|
||||||
"Theo",
|
"Theo",
|
||||||
"Thiago_TRZ",
|
"Thiago_TRZ",
|
||||||
|
"ThisIsBad",
|
||||||
"Trevon Thrasher",
|
"Trevon Thrasher",
|
||||||
"Tiberiu",
|
"Tiberiu",
|
||||||
"Cristian Ticu",
|
"Cristian Ticu",
|
||||||
|
|
@ -1325,6 +1408,7 @@
|
||||||
"Robin Vinith",
|
"Robin Vinith",
|
||||||
"vinoth",
|
"vinoth",
|
||||||
"Vishal",
|
"Vishal",
|
||||||
|
"Voxel",
|
||||||
"VTOR",
|
"VTOR",
|
||||||
"Fernando Véliz",
|
"Fernando Véliz",
|
||||||
"Vít",
|
"Vít",
|
||||||
|
|
@ -1355,6 +1439,7 @@
|
||||||
"WonkaWoe",
|
"WonkaWoe",
|
||||||
"Moury ji world",
|
"Moury ji world",
|
||||||
"wsltshh",
|
"wsltshh",
|
||||||
|
"Wurstkatze",
|
||||||
"WurstSaft",
|
"WurstSaft",
|
||||||
"Xavier",
|
"Xavier",
|
||||||
"Francisco Xavier",
|
"Francisco Xavier",
|
||||||
|
|
@ -1383,6 +1468,7 @@
|
||||||
"yullian",
|
"yullian",
|
||||||
"NEEROOA Muhammad Yusuf",
|
"NEEROOA Muhammad Yusuf",
|
||||||
"Yuuki",
|
"Yuuki",
|
||||||
|
"Yy",
|
||||||
"yyr_rs",
|
"yyr_rs",
|
||||||
"z",
|
"z",
|
||||||
"Sam Z",
|
"Sam Z",
|
||||||
|
|
@ -1424,6 +1510,7 @@
|
||||||
"опять Вильян",
|
"опять Вильян",
|
||||||
"Тот самый Вильян",
|
"Тот самый Вильян",
|
||||||
"Влад",
|
"Влад",
|
||||||
|
"Даниил",
|
||||||
"данил",
|
"данил",
|
||||||
"дибисяра",
|
"дибисяра",
|
||||||
"Евгений(Eugene)",
|
"Евгений(Eugene)",
|
||||||
|
|
@ -1455,6 +1542,7 @@
|
||||||
"Ярослав \"Noiseaholic\"",
|
"Ярослав \"Noiseaholic\"",
|
||||||
"қуатжан",
|
"қуатжан",
|
||||||
"اا",
|
"اا",
|
||||||
|
"احمدرضا",
|
||||||
"احمد اسامه",
|
"احمد اسامه",
|
||||||
"احمد سني اسماعيل",
|
"احمد سني اسماعيل",
|
||||||
"الأول",
|
"الأول",
|
||||||
|
|
@ -1471,6 +1559,7 @@
|
||||||
"حسين حساني",
|
"حسين حساني",
|
||||||
"جود حيدر",
|
"جود حيدر",
|
||||||
"محمد خالد",
|
"محمد خالد",
|
||||||
|
"امیرحسین دهقان",
|
||||||
"امید رضازاده",
|
"امید رضازاده",
|
||||||
"محمد وائل سلطان",
|
"محمد وائل سلطان",
|
||||||
"ص",
|
"ص",
|
||||||
|
|
@ -1493,6 +1582,7 @@
|
||||||
"نریمان",
|
"نریمان",
|
||||||
"عادل نوروزی",
|
"عادل نوروزی",
|
||||||
"ه۶۹",
|
"ه۶۹",
|
||||||
|
"حسین وفاییفرد",
|
||||||
"انا يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا",
|
"انا يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا",
|
||||||
"١٢٣٤٥",
|
"١٢٣٤٥",
|
||||||
"علیرضا پودینه",
|
"علیرضا پودینه",
|
||||||
|
|
@ -1500,6 +1590,7 @@
|
||||||
"അർഷഖ് ഹസ്സൻ",
|
"അർഷഖ് ഹസ്സൻ",
|
||||||
"วีรภัทร",
|
"วีรภัทร",
|
||||||
"แมวผงาด(JuniorMeowMeow)",
|
"แมวผงาด(JuniorMeowMeow)",
|
||||||
|
"๖̶ζ͜͡zephyro",
|
||||||
"✰ℭØØҜĬ£$✰",
|
"✰ℭØØҜĬ£$✰",
|
||||||
"JPnatu なつ",
|
"JPnatu なつ",
|
||||||
"クリーバー",
|
"クリーバー",
|
||||||
|
|
@ -1512,6 +1603,7 @@
|
||||||
"别闹我有药/Medic",
|
"别闹我有药/Medic",
|
||||||
"别闹我有药Medic",
|
"别闹我有药Medic",
|
||||||
"南宫銷子()",
|
"南宫銷子()",
|
||||||
|
"哔哩哔哩@Medic药",
|
||||||
"夏神(后期汉化修正)",
|
"夏神(后期汉化修正)",
|
||||||
"小黑猫",
|
"小黑猫",
|
||||||
"张帅",
|
"张帅",
|
||||||
|
|
@ -1524,6 +1616,7 @@
|
||||||
"熊老三",
|
"熊老三",
|
||||||
"盐焗汽水er",
|
"盐焗汽水er",
|
||||||
"神仙",
|
"神仙",
|
||||||
|
"药药Medic",
|
||||||
"蔚蓝枫叶",
|
"蔚蓝枫叶",
|
||||||
"鲲鹏元帅",
|
"鲲鹏元帅",
|
||||||
"꧁ℤephyro꧂",
|
"꧁ℤephyro꧂",
|
||||||
|
|
@ -1531,8 +1624,10 @@
|
||||||
"권찬근",
|
"권찬근",
|
||||||
"김원재",
|
"김원재",
|
||||||
"넌",
|
"넌",
|
||||||
|
"먹꾸리",
|
||||||
"박건희",
|
"박건희",
|
||||||
"김대중 부관참시",
|
"김대중 부관참시",
|
||||||
|
"붐추",
|
||||||
"사람사는 세상",
|
"사람사는 세상",
|
||||||
"신라성",
|
"신라성",
|
||||||
"이지민",
|
"이지민",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/arabic.json
vendored
6
dist/ba_data/data/languages/arabic.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Google Play سجل دخولك عبر",
|
"signInWithGooglePlayText": "Google Play سجل دخولك عبر",
|
||||||
"signInWithTestAccountInfoText": "(حساب موجود على هاتفك; استخدم حساب الهاتف للمتابعة)",
|
"signInWithTestAccountInfoText": "(حساب موجود على هاتفك; استخدم حساب الهاتف للمتابعة)",
|
||||||
"signInWithTestAccountText": "تسجيل الدخول بحساب تجريبي",
|
"signInWithTestAccountText": "تسجيل الدخول بحساب تجريبي",
|
||||||
|
"signInWithV2InfoText": "حساب يعمل على جميع المنصات",
|
||||||
|
"signInWithV2Text": "قم بتسجيل الدخول باستخدام حساب BombSquad",
|
||||||
"signOutText": "تسجيل الخروج",
|
"signOutText": "تسجيل الخروج",
|
||||||
"signingInText": "...جارٍ تسجيل دخولك",
|
"signingInText": "...جارٍ تسجيل دخولك",
|
||||||
"signingOutText": "...جارٍ تسجيل خروجك",
|
"signingOutText": "...جارٍ تسجيل خروجك",
|
||||||
|
|
@ -37,6 +39,7 @@
|
||||||
"titleText": "الحساب",
|
"titleText": "الحساب",
|
||||||
"unlinkAccountsInstructionsText": "حدد حسابا لإلغاء ربطه",
|
"unlinkAccountsInstructionsText": "حدد حسابا لإلغاء ربطه",
|
||||||
"unlinkAccountsText": "إلغاء ربط الحسابات",
|
"unlinkAccountsText": "إلغاء ربط الحسابات",
|
||||||
|
"v2LinkInstructionsText": "استخدم هذا الارتباط لإنشاء حساب أو تسجيل الدخول.",
|
||||||
"viaAccount": "(${NAME} عبر الحساب)",
|
"viaAccount": "(${NAME} عبر الحساب)",
|
||||||
"youAreSignedInAsText": ": قمت بتسجيل الدخول كـ"
|
"youAreSignedInAsText": ": قمت بتسجيل الدخول كـ"
|
||||||
},
|
},
|
||||||
|
|
@ -496,6 +499,7 @@
|
||||||
"yourPowerRankingText": "تصنيف الطاقة:"
|
"yourPowerRankingText": "تصنيف الطاقة:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} نسخ",
|
"copyOfText": "${NAME} نسخ",
|
||||||
|
"copyText": "ينسخ",
|
||||||
"createEditPlayerText": "<اصنع او عدل حساب>",
|
"createEditPlayerText": "<اصنع او عدل حساب>",
|
||||||
"createText": "اصنع",
|
"createText": "اصنع",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1496,6 +1500,7 @@
|
||||||
"Dutch": "هولندي",
|
"Dutch": "هولندي",
|
||||||
"English": "الإنجليزية",
|
"English": "الإنجليزية",
|
||||||
"Esperanto": "الاسبرانتو",
|
"Esperanto": "الاسبرانتو",
|
||||||
|
"Filipino": "الفلبينية",
|
||||||
"Finnish": "اللغة الفنلندية",
|
"Finnish": "اللغة الفنلندية",
|
||||||
"French": "الفرنسية",
|
"French": "الفرنسية",
|
||||||
"German": "الألمانية",
|
"German": "الألمانية",
|
||||||
|
|
@ -1516,6 +1521,7 @@
|
||||||
"Slovak": "السلوفاكية",
|
"Slovak": "السلوفاكية",
|
||||||
"Spanish": "الإسبانية",
|
"Spanish": "الإسبانية",
|
||||||
"Swedish": "اللغة السويدية",
|
"Swedish": "اللغة السويدية",
|
||||||
|
"Tamil": "اللغةالتاميلية",
|
||||||
"Thai": "تايلاندي",
|
"Thai": "تايلاندي",
|
||||||
"Turkish": "اللغة التركية",
|
"Turkish": "اللغة التركية",
|
||||||
"Ukrainian": "الأوكراني",
|
"Ukrainian": "الأوكراني",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/belarussian.json
vendored
6
dist/ba_data/data/languages/belarussian.json
vendored
|
|
@ -28,6 +28,8 @@
|
||||||
"signInWithGooglePlayText": "Увайсці з дапамогаю Google Play",
|
"signInWithGooglePlayText": "Увайсці з дапамогаю Google Play",
|
||||||
"signInWithTestAccountInfoText": "(акаўнт, які ўжо існуе; спачатку увайдзіце з прылады)",
|
"signInWithTestAccountInfoText": "(акаўнт, які ўжо існуе; спачатку увайдзіце з прылады)",
|
||||||
"signInWithTestAccountText": "Увайсці з тэст-акаўнта",
|
"signInWithTestAccountText": "Увайсці з тэст-акаўнта",
|
||||||
|
"signInWithV2InfoText": "(уліковы запіс, які працуе на ўсіх платформах)",
|
||||||
|
"signInWithV2Text": "Увайдзіце з уліковым запісам BombSquad",
|
||||||
"signOutText": "Выйсці",
|
"signOutText": "Выйсці",
|
||||||
"signingInText": "Уваход...",
|
"signingInText": "Уваход...",
|
||||||
"signingOutText": "Выхад...",
|
"signingOutText": "Выхад...",
|
||||||
|
|
@ -38,6 +40,7 @@
|
||||||
"titleText": "Акаўнт",
|
"titleText": "Акаўнт",
|
||||||
"unlinkAccountsInstructionsText": "Выберыце ўліковы запіс, каб спыніць сувязь",
|
"unlinkAccountsInstructionsText": "Выберыце ўліковы запіс, каб спыніць сувязь",
|
||||||
"unlinkAccountsText": "Адлучэнне акаунтау",
|
"unlinkAccountsText": "Адлучэнне акаунтау",
|
||||||
|
"v2LinkInstructionsText": "Выкарыстоўвайце гэтую спасылку, каб стварыць уліковы запіс або ўвайсці.",
|
||||||
"viaAccount": "(праз акаунт ${NAME})",
|
"viaAccount": "(праз акаунт ${NAME})",
|
||||||
"youAreSignedInAsText": "Вы ўвайшлі як:"
|
"youAreSignedInAsText": "Вы ўвайшлі як:"
|
||||||
},
|
},
|
||||||
|
|
@ -496,6 +499,7 @@
|
||||||
"yourPowerRankingText": "Ваш Узровень:"
|
"yourPowerRankingText": "Ваш Узровень:"
|
||||||
},
|
},
|
||||||
"copyOfText": "Копія ${NAME}",
|
"copyOfText": "Копія ${NAME}",
|
||||||
|
"copyText": "Копія",
|
||||||
"createEditPlayerText": "<Стварыць/Змяніць Гульца>",
|
"createEditPlayerText": "<Стварыць/Змяніць Гульца>",
|
||||||
"createText": "Стварыць",
|
"createText": "Стварыць",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1511,6 +1515,7 @@
|
||||||
"Dutch": "Нямецкая",
|
"Dutch": "Нямецкая",
|
||||||
"English": "Англійская",
|
"English": "Англійская",
|
||||||
"Esperanto": "Эсперанта",
|
"Esperanto": "Эсперанта",
|
||||||
|
"Filipino": "філіпінскі",
|
||||||
"Finnish": "Фінская",
|
"Finnish": "Фінская",
|
||||||
"French": "Французская",
|
"French": "Французская",
|
||||||
"German": "Нямецкая",
|
"German": "Нямецкая",
|
||||||
|
|
@ -1531,6 +1536,7 @@
|
||||||
"Slovak": "Славацкая",
|
"Slovak": "Славацкая",
|
||||||
"Spanish": "Гішпанская",
|
"Spanish": "Гішпанская",
|
||||||
"Swedish": "Шведская",
|
"Swedish": "Шведская",
|
||||||
|
"Tamil": "тамільская",
|
||||||
"Thai": "Тайская мова",
|
"Thai": "Тайская мова",
|
||||||
"Turkish": "Турэцкі",
|
"Turkish": "Турэцкі",
|
||||||
"Ukrainian": "Украінскі",
|
"Ukrainian": "Украінскі",
|
||||||
|
|
|
||||||
8
dist/ba_data/data/languages/chinese.json
vendored
8
dist/ba_data/data/languages/chinese.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "用 Google Play 来登陆",
|
"signInWithGooglePlayText": "用 Google Play 来登陆",
|
||||||
"signInWithTestAccountInfoText": "使用设备上的其他网络帐号登录;不建议选择该项",
|
"signInWithTestAccountInfoText": "使用设备上的其他网络帐号登录;不建议选择该项",
|
||||||
"signInWithTestAccountText": "用测试账户来登陆",
|
"signInWithTestAccountText": "用测试账户来登陆",
|
||||||
|
"signInWithV2InfoText": "(账户在所有平台都通用)",
|
||||||
|
"signInWithV2Text": "使用炸弹小分队账号登录",
|
||||||
"signOutText": "登出",
|
"signOutText": "登出",
|
||||||
"signingInText": "登录中...",
|
"signingInText": "登录中...",
|
||||||
"signingOutText": "登出中...",
|
"signingOutText": "登出中...",
|
||||||
|
|
@ -39,6 +41,7 @@
|
||||||
"titleText": "账号",
|
"titleText": "账号",
|
||||||
"unlinkAccountsInstructionsText": "选择要取消关联的帐户",
|
"unlinkAccountsInstructionsText": "选择要取消关联的帐户",
|
||||||
"unlinkAccountsText": "取消连结帐户",
|
"unlinkAccountsText": "取消连结帐户",
|
||||||
|
"v2LinkInstructionsText": "扫码或使用链接来登录或注册新账户",
|
||||||
"viaAccount": "(不可用名称 ${NAME})",
|
"viaAccount": "(不可用名称 ${NAME})",
|
||||||
"youAreLoggedInAsText": "您已登录为",
|
"youAreLoggedInAsText": "您已登录为",
|
||||||
"youAreSignedInAsText": "你已登录为:"
|
"youAreSignedInAsText": "你已登录为:"
|
||||||
|
|
@ -498,6 +501,7 @@
|
||||||
"yourPowerRankingText": "你的能力排位:"
|
"yourPowerRankingText": "你的能力排位:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} 复制",
|
"copyOfText": "${NAME} 复制",
|
||||||
|
"copyText": "copy",
|
||||||
"createEditPlayerText": "<创建/编辑玩家>",
|
"createEditPlayerText": "<创建/编辑玩家>",
|
||||||
"createText": "创建",
|
"createText": "创建",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1151,7 +1155,7 @@
|
||||||
"purchasingText": "正在购买…",
|
"purchasingText": "正在购买…",
|
||||||
"quitGameText": "退出${APP_NAME}?",
|
"quitGameText": "退出${APP_NAME}?",
|
||||||
"quittingIn5SecondsText": "在5秒后退出...",
|
"quittingIn5SecondsText": "在5秒后退出...",
|
||||||
"randomPlayerNamesText": "Deva最萌,企鹅王,企鹅骑士团成员,王♂の传人,挨揍使我快乐,ChineseBomber,一拳超人,二营长の意大利炮,野渡无人舟自横,马克斯,雪糕,炸鸡翅,手柄玩家18子,寻找宝藏的海盗,炸弹投手,炸弹不是糖果,我是对面的,Xxx_至高无上之炸弹王_xxX,万有引力,鸟语花香,狗年大吉,小狗狗,大狗子,二狗子,三狗子,四狗子,五狗子,高质量人类,吴签,菜虚困,劈我瓜是吧,是我dio哒,亚达哟",
|
"randomPlayerNamesText": "企鹅王,企鹅骑士团成员,王♂の传人,挨揍使我快乐,ChineseBomber,一拳超人,二营长の意大利炮,野渡无人舟自横,马克斯,雪糕,炸鸡翅,手柄玩家18子,寻找宝藏的海盗,炸弹投手,炸弹不是糖果,我是对面的,万有引力,鸟语花香,狗年大吉,小狗狗,大狗子,二狗子,三狗子,四狗子,五狗子,高质量人类,吴签,菜虚困,劈我瓜是吧,是我dio哒,亚达哟,王雷卖鱼,蕉♂个朋友,小猪配齐,摇摆羊,可莉,胡桃,钟离,七七,刻晴,甘雨,巴巴托斯,温迪,旅行者,绿坝娘,哔哩哔哩,别闹我有药",
|
||||||
"randomText": "随机",
|
"randomText": "随机",
|
||||||
"rankText": "排行",
|
"rankText": "排行",
|
||||||
"ratingText": "排名",
|
"ratingText": "排名",
|
||||||
|
|
@ -1514,6 +1518,7 @@
|
||||||
"Dutch": "荷兰语",
|
"Dutch": "荷兰语",
|
||||||
"English": "英语",
|
"English": "英语",
|
||||||
"Esperanto": "世界语",
|
"Esperanto": "世界语",
|
||||||
|
"Filipino": "菲律宾语",
|
||||||
"Finnish": "芬兰语",
|
"Finnish": "芬兰语",
|
||||||
"French": "法语",
|
"French": "法语",
|
||||||
"German": "德语",
|
"German": "德语",
|
||||||
|
|
@ -1534,6 +1539,7 @@
|
||||||
"Slovak": "斯洛伐克语",
|
"Slovak": "斯洛伐克语",
|
||||||
"Spanish": "西班牙语",
|
"Spanish": "西班牙语",
|
||||||
"Swedish": "瑞典语",
|
"Swedish": "瑞典语",
|
||||||
|
"Tamil": "泰米尔语",
|
||||||
"Thai": "泰语",
|
"Thai": "泰语",
|
||||||
"Turkish": "土耳其语",
|
"Turkish": "土耳其语",
|
||||||
"Ukrainian": "乌克兰语",
|
"Ukrainian": "乌克兰语",
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@
|
||||||
"signInWithGooglePlayText": "用play商店登入",
|
"signInWithGooglePlayText": "用play商店登入",
|
||||||
"signInWithTestAccountInfoText": "(舊有的帳號登入方式;使用後來的創設的帳號)",
|
"signInWithTestAccountInfoText": "(舊有的帳號登入方式;使用後來的創設的帳號)",
|
||||||
"signInWithTestAccountText": "用測試帳號登入",
|
"signInWithTestAccountText": "用測試帳號登入",
|
||||||
|
"signInWithV2InfoText": "(可用於所有平臺的賬戶)",
|
||||||
|
"signInWithV2Text": "使用Bombsquad賬戶登入",
|
||||||
"signOutText": "登出",
|
"signOutText": "登出",
|
||||||
"signingInText": "登入中…",
|
"signingInText": "登入中…",
|
||||||
"signingOutText": "登出中…",
|
"signingOutText": "登出中…",
|
||||||
|
|
@ -34,6 +36,7 @@
|
||||||
"titleText": "帳號",
|
"titleText": "帳號",
|
||||||
"unlinkAccountsInstructionsText": "選擇一個要解除連結的帳號",
|
"unlinkAccountsInstructionsText": "選擇一個要解除連結的帳號",
|
||||||
"unlinkAccountsText": "解除連結帳號",
|
"unlinkAccountsText": "解除連結帳號",
|
||||||
|
"v2LinkInstructionsText": "使用此鏈接新建或登錄賬戶",
|
||||||
"viaAccount": "(透過帳號 ${NAME})",
|
"viaAccount": "(透過帳號 ${NAME})",
|
||||||
"youAreSignedInAsText": "您以這帳號登入:"
|
"youAreSignedInAsText": "您以這帳號登入:"
|
||||||
},
|
},
|
||||||
|
|
@ -492,6 +495,7 @@
|
||||||
"yourPowerRankingText": "你的能力排名:"
|
"yourPowerRankingText": "你的能力排名:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} 拷貝",
|
"copyOfText": "${NAME} 拷貝",
|
||||||
|
"copyText": "複製",
|
||||||
"createEditPlayerText": "<創建/編輯玩家>",
|
"createEditPlayerText": "<創建/編輯玩家>",
|
||||||
"createText": "創建",
|
"createText": "創建",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1492,6 +1496,7 @@
|
||||||
"Dutch": "荷蘭語",
|
"Dutch": "荷蘭語",
|
||||||
"English": "英語",
|
"English": "英語",
|
||||||
"Esperanto": "世界語",
|
"Esperanto": "世界語",
|
||||||
|
"Filipino": "菲律賓語",
|
||||||
"Finnish": "芬蘭語",
|
"Finnish": "芬蘭語",
|
||||||
"French": "法語",
|
"French": "法語",
|
||||||
"German": "德語",
|
"German": "德語",
|
||||||
|
|
@ -1512,6 +1517,7 @@
|
||||||
"Slovak": "斯洛伐克語",
|
"Slovak": "斯洛伐克語",
|
||||||
"Spanish": "西班牙語",
|
"Spanish": "西班牙語",
|
||||||
"Swedish": "瑞典語",
|
"Swedish": "瑞典語",
|
||||||
|
"Tamil": "泰米爾語",
|
||||||
"Thai": "泰語",
|
"Thai": "泰語",
|
||||||
"Turkish": "土耳其語",
|
"Turkish": "土耳其語",
|
||||||
"Ukrainian": "烏克蘭語",
|
"Ukrainian": "烏克蘭語",
|
||||||
|
|
|
||||||
14
dist/ba_data/data/languages/croatian.json
vendored
14
dist/ba_data/data/languages/croatian.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Prijavi sa sa Google Play",
|
"signInWithGooglePlayText": "Prijavi sa sa Google Play",
|
||||||
"signInWithTestAccountInfoText": "(stari tip profila; ubuduće koristi profile uređaja)",
|
"signInWithTestAccountInfoText": "(stari tip profila; ubuduće koristi profile uređaja)",
|
||||||
"signInWithTestAccountText": "Prijavi se s testnim profilom",
|
"signInWithTestAccountText": "Prijavi se s testnim profilom",
|
||||||
|
"signInWithV2InfoText": "(račun koji radi na svim platformama)",
|
||||||
|
"signInWithV2Text": "Prijavite se s BombSquad računom",
|
||||||
"signOutText": "Odjavi se",
|
"signOutText": "Odjavi se",
|
||||||
"signingInText": "Prijava...",
|
"signingInText": "Prijava...",
|
||||||
"signingOutText": "Odjava...",
|
"signingOutText": "Odjava...",
|
||||||
|
|
@ -39,6 +41,7 @@
|
||||||
"titleText": "Račun",
|
"titleText": "Račun",
|
||||||
"unlinkAccountsInstructionsText": "Odaberi račun za prekid veze.",
|
"unlinkAccountsInstructionsText": "Odaberi račun za prekid veze.",
|
||||||
"unlinkAccountsText": "Prekini vezu računa",
|
"unlinkAccountsText": "Prekini vezu računa",
|
||||||
|
"v2LinkInstructionsText": "Koristite ovu vezu za kreiranje računa ili prijavu.",
|
||||||
"viaAccount": "(Preko ${NAME} računa)",
|
"viaAccount": "(Preko ${NAME} računa)",
|
||||||
"youAreSignedInAsText": "Prijavljeni ste kao:"
|
"youAreSignedInAsText": "Prijavljeni ste kao:"
|
||||||
},
|
},
|
||||||
|
|
@ -498,6 +501,7 @@
|
||||||
"yourPowerRankingText": "Tvoja pozicija"
|
"yourPowerRankingText": "Tvoja pozicija"
|
||||||
},
|
},
|
||||||
"copyOfText": "Kopija ${NAME}",
|
"copyOfText": "Kopija ${NAME}",
|
||||||
|
"copyText": "Kopirati",
|
||||||
"createEditPlayerText": "<Napravi/Uredi Igrača>",
|
"createEditPlayerText": "<Napravi/Uredi Igrača>",
|
||||||
"createText": "Stvori",
|
"createText": "Stvori",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -684,11 +688,18 @@
|
||||||
"bluetoothJoinText": "Uključi se preko Bluetooth-a",
|
"bluetoothJoinText": "Uključi se preko Bluetooth-a",
|
||||||
"bluetoothText": "Bluetooth",
|
"bluetoothText": "Bluetooth",
|
||||||
"checkingText": "provjeravam...",
|
"checkingText": "provjeravam...",
|
||||||
|
"copyCodeConfirmText": "Kôd je kopiran u međuspremnik.",
|
||||||
|
"copyCodeText": "Kopiraj kod",
|
||||||
"dedicatedServerInfoText": "Za najbolje rezultate, postavi posvećen server. Vidi bombsquadgame.com/server da saznas kako.",
|
"dedicatedServerInfoText": "Za najbolje rezultate, postavi posvećen server. Vidi bombsquadgame.com/server da saznas kako.",
|
||||||
"disconnectClientsText": "Ovo će isključiti ${COUNT} igrača\niz partije. Jesi li siguran?",
|
"disconnectClientsText": "Ovo će isključiti ${COUNT} igrača\niz partije. Jesi li siguran?",
|
||||||
"earnTicketsForRecommendingAmountText": "Prijatelji će dobiti ${COUNT} ulaznica ako probaju igru\n(ti ćeš dobiti ${YOU_COUNT} ulaznica za svakog koji proba)",
|
"earnTicketsForRecommendingAmountText": "Prijatelji će dobiti ${COUNT} ulaznica ako probaju igru\n(ti ćeš dobiti ${YOU_COUNT} ulaznica za svakog koji proba)",
|
||||||
"earnTicketsForRecommendingText": "Podeli igri za besplatne karte\n...",
|
"earnTicketsForRecommendingText": "Podeli igri za besplatne karte\n...",
|
||||||
"emailItText": "Emajlaj",
|
"emailItText": "Emajlaj",
|
||||||
|
"favoritesSaveText": "Spremi kao favorit",
|
||||||
|
"favoritesText": "Omiljeni",
|
||||||
|
"freeCloudServerAvailableMinutesText": "Sljedeći besplatni poslužitelj u oblaku dostupan za ${MINUTES} minuta.",
|
||||||
|
"freeCloudServerAvailableNowText": "Besplatno dostupan poslužitelj u oblaku!",
|
||||||
|
"freeCloudServerNotAvailableText": "Nema dostupnih besplatnih poslužitelja u oblaku.",
|
||||||
"friendHasSentPromoCodeText": "${COUNT} ${APP_NAME} ulaznica od ${NAME}",
|
"friendHasSentPromoCodeText": "${COUNT} ${APP_NAME} ulaznica od ${NAME}",
|
||||||
"friendPromoCodeAwardText": "Primit ćeš ${COUNT} ulaznica svaki put kada je kod iskorišten.",
|
"friendPromoCodeAwardText": "Primit ćeš ${COUNT} ulaznica svaki put kada je kod iskorišten.",
|
||||||
"friendPromoCodeExpireText": "Ovaj kod će isteći za ${EXPIRE_HOURS} sati i radi samo za nove igrače.",
|
"friendPromoCodeExpireText": "Ovaj kod će isteći za ${EXPIRE_HOURS} sati i radi samo za nove igrače.",
|
||||||
|
|
@ -703,7 +714,8 @@
|
||||||
"googlePlaySeeInvitesText": "Pogledaj pozive",
|
"googlePlaySeeInvitesText": "Pogledaj pozive",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"googlePlayVersionOnlyText": "(Android / Google Play verzija)",
|
"googlePlayVersionOnlyText": "(Android / Google Play verzija)",
|
||||||
"hostPublicPartyDescriptionText": "Izradi javnu partiju:",
|
"hostPublicPartyDescriptionText": "Izradi javnu partiju",
|
||||||
|
"hostingUnavailableText": "Hosting nedostupan",
|
||||||
"inDevelopmentWarningText": "Pažnja: \n\nMrežna igra je nova značajka koja je još u razvoju. \nZasad, preporučuje se da su svi\nigrači spojeni na istu Wi-Fi mrežu.",
|
"inDevelopmentWarningText": "Pažnja: \n\nMrežna igra je nova značajka koja je još u razvoju. \nZasad, preporučuje se da su svi\nigrači spojeni na istu Wi-Fi mrežu.",
|
||||||
"internetText": "Internet",
|
"internetText": "Internet",
|
||||||
"inviteAFriendText": "Prijatelji nemaju igru? Pozovi ih da je\nprobaju i oni će dobiti ${COUNT} besplatnih ulaznica.",
|
"inviteAFriendText": "Prijatelji nemaju igru? Pozovi ih da je\nprobaju i oni će dobiti ${COUNT} besplatnih ulaznica.",
|
||||||
|
|
|
||||||
8
dist/ba_data/data/languages/czech.json
vendored
8
dist/ba_data/data/languages/czech.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Přihlásit se přes Google Play",
|
"signInWithGooglePlayText": "Přihlásit se přes Google Play",
|
||||||
"signInWithTestAccountInfoText": "(zastaralý typ účtu; použije raději účet zařízení)",
|
"signInWithTestAccountInfoText": "(zastaralý typ účtu; použije raději účet zařízení)",
|
||||||
"signInWithTestAccountText": "Přihlásit se s testovacím účtem",
|
"signInWithTestAccountText": "Přihlásit se s testovacím účtem",
|
||||||
|
"signInWithV2InfoText": "(účet který funguje na všech platformách)",
|
||||||
|
"signInWithV2Text": "Přihlášení s BombSquad účtem",
|
||||||
"signOutText": "Odhlásit se",
|
"signOutText": "Odhlásit se",
|
||||||
"signingInText": "Přihlašuji se...",
|
"signingInText": "Přihlašuji se...",
|
||||||
"signingOutText": "Odhlašuji se...",
|
"signingOutText": "Odhlašuji se...",
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
"titleText": "Profil",
|
"titleText": "Profil",
|
||||||
"unlinkAccountsInstructionsText": "Zvolte účet k odpojení",
|
"unlinkAccountsInstructionsText": "Zvolte účet k odpojení",
|
||||||
"unlinkAccountsText": "Odpojit účty",
|
"unlinkAccountsText": "Odpojit účty",
|
||||||
|
"v2LinkInstructionsText": "Použijte tento odkaz pro vytvoření účtu nebo přihlášení.",
|
||||||
"viaAccount": "(přes účet ${NAME})",
|
"viaAccount": "(přes účet ${NAME})",
|
||||||
"youAreLoggedInAsText": "Jste přihlášen jako:",
|
"youAreLoggedInAsText": "Jste přihlášen jako:",
|
||||||
"youAreSignedInAsText": "Jste přihlášen jako:"
|
"youAreSignedInAsText": "Jste přihlášen jako:"
|
||||||
|
|
@ -502,6 +505,7 @@
|
||||||
"yourPowerRankingText": "Vaše pozice:"
|
"yourPowerRankingText": "Vaše pozice:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} Kopie",
|
"copyOfText": "${NAME} Kopie",
|
||||||
|
"copyText": "Kopírovat",
|
||||||
"createEditPlayerText": "<Vyrobit/Upravit hráče>",
|
"createEditPlayerText": "<Vyrobit/Upravit hráče>",
|
||||||
"createText": "Vytvořit",
|
"createText": "Vytvořit",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1381,7 +1385,7 @@
|
||||||
"Agent Johnson": "Agent Johnson",
|
"Agent Johnson": "Agent Johnson",
|
||||||
"B-9000": "B-9000",
|
"B-9000": "B-9000",
|
||||||
"Bernard": "Bernard",
|
"Bernard": "Bernard",
|
||||||
"Bones": "Kosťa",
|
"Bones": "Kosťík",
|
||||||
"Butch": "Butch",
|
"Butch": "Butch",
|
||||||
"Easter Bunny": "Velikonoční králíček",
|
"Easter Bunny": "Velikonoční králíček",
|
||||||
"Flopsy": "Flopsy",
|
"Flopsy": "Flopsy",
|
||||||
|
|
@ -1515,6 +1519,7 @@
|
||||||
"Dutch": "Holandština",
|
"Dutch": "Holandština",
|
||||||
"English": "Angličtina",
|
"English": "Angličtina",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipínština",
|
||||||
"Finnish": "Finština",
|
"Finnish": "Finština",
|
||||||
"French": "Francouzština",
|
"French": "Francouzština",
|
||||||
"German": "Němčina",
|
"German": "Němčina",
|
||||||
|
|
@ -1535,6 +1540,7 @@
|
||||||
"Slovak": "Slovenština",
|
"Slovak": "Slovenština",
|
||||||
"Spanish": "Španělština",
|
"Spanish": "Španělština",
|
||||||
"Swedish": "Švédština",
|
"Swedish": "Švédština",
|
||||||
|
"Tamil": "Tamiština",
|
||||||
"Thai": "Thaiština",
|
"Thai": "Thaiština",
|
||||||
"Turkish": "Turečtina",
|
"Turkish": "Turečtina",
|
||||||
"Ukrainian": "Ukrajinština",
|
"Ukrainian": "Ukrajinština",
|
||||||
|
|
|
||||||
49
dist/ba_data/data/languages/dutch.json
vendored
49
dist/ba_data/data/languages/dutch.json
vendored
|
|
@ -31,6 +31,8 @@
|
||||||
"signInWithGooglePlayText": "Log in met Google Play",
|
"signInWithGooglePlayText": "Log in met Google Play",
|
||||||
"signInWithTestAccountInfoText": "(oudere account type; gebruik device account gaat door)",
|
"signInWithTestAccountInfoText": "(oudere account type; gebruik device account gaat door)",
|
||||||
"signInWithTestAccountText": "Log in met test account",
|
"signInWithTestAccountText": "Log in met test account",
|
||||||
|
"signInWithV2InfoText": "(een account dat op alle platforms werkt)",
|
||||||
|
"signInWithV2Text": "Inloggen met een BombSquad rekening",
|
||||||
"signOutText": "Log Uit",
|
"signOutText": "Log Uit",
|
||||||
"signingInText": "Inloggen...",
|
"signingInText": "Inloggen...",
|
||||||
"signingOutText": "Uitloggen...",
|
"signingOutText": "Uitloggen...",
|
||||||
|
|
@ -41,6 +43,7 @@
|
||||||
"titleText": "Profiel",
|
"titleText": "Profiel",
|
||||||
"unlinkAccountsInstructionsText": "Selecteer een account om los te koppelen.",
|
"unlinkAccountsInstructionsText": "Selecteer een account om los te koppelen.",
|
||||||
"unlinkAccountsText": "Koppel accounts los.",
|
"unlinkAccountsText": "Koppel accounts los.",
|
||||||
|
"v2LinkInstructionsText": "Gebruik deze link om een account aan te maken of in te loggen.",
|
||||||
"viaAccount": "(via account ${NAME})",
|
"viaAccount": "(via account ${NAME})",
|
||||||
"youAreLoggedInAsText": "Je bent ingelogd als:",
|
"youAreLoggedInAsText": "Je bent ingelogd als:",
|
||||||
"youAreSignedInAsText": "U bent ingelogd als:"
|
"youAreSignedInAsText": "U bent ingelogd als:"
|
||||||
|
|
@ -660,6 +663,7 @@
|
||||||
"titleFolderText": "Selecteer een Map",
|
"titleFolderText": "Selecteer een Map",
|
||||||
"useThisFolderButtonText": "Gebruik Deze Map"
|
"useThisFolderButtonText": "Gebruik Deze Map"
|
||||||
},
|
},
|
||||||
|
"filterText": "Filteren",
|
||||||
"finalScoreText": "Uiteindelijke Score",
|
"finalScoreText": "Uiteindelijke Score",
|
||||||
"finalScoresText": "Uiteindelijke Scores",
|
"finalScoresText": "Uiteindelijke Scores",
|
||||||
"finalTimeText": "Uiteindelijke Tijd",
|
"finalTimeText": "Uiteindelijke Tijd",
|
||||||
|
|
@ -710,11 +714,18 @@
|
||||||
"bluetoothJoinText": "Neem deel via Bluetooth",
|
"bluetoothJoinText": "Neem deel via Bluetooth",
|
||||||
"bluetoothText": "Bluetooth",
|
"bluetoothText": "Bluetooth",
|
||||||
"checkingText": "controleren...",
|
"checkingText": "controleren...",
|
||||||
|
"copyCodeConfirmText": "Code gekopieerd naar klembord",
|
||||||
|
"copyCodeText": "Kopieer Code",
|
||||||
"dedicatedServerInfoText": "Voor het beste resultaat, zet dan een dedicated server op. Zie bombsquadgame.com/server om te leren hoe.",
|
"dedicatedServerInfoText": "Voor het beste resultaat, zet dan een dedicated server op. Zie bombsquadgame.com/server om te leren hoe.",
|
||||||
"disconnectClientsText": "Hierdoor verbreekt de verbinding met ${COUNT} spelers(s)\nvan uw partij. Weet u het zeker?",
|
"disconnectClientsText": "Hierdoor verbreekt de verbinding met ${COUNT} spelers(s)\nvan uw partij. Weet u het zeker?",
|
||||||
"earnTicketsForRecommendingAmountText": "Vrienden ontvangen ${COUNT} tickets als ze het spel proberen\n(en jij ontvangt ${YOU_COUNT} voor elke vriend die dit doet)",
|
"earnTicketsForRecommendingAmountText": "Vrienden ontvangen ${COUNT} tickets als ze het spel proberen\n(en jij ontvangt ${YOU_COUNT} voor elke vriend die dit doet)",
|
||||||
"earnTicketsForRecommendingText": "Deel de game \nVoor gratis tickets...",
|
"earnTicketsForRecommendingText": "Deel de game \nVoor gratis tickets...",
|
||||||
"emailItText": "Mail het",
|
"emailItText": "Mail het",
|
||||||
|
"favoritesSaveText": "Opslaan Als Favoriet",
|
||||||
|
"favoritesText": "Favorieten",
|
||||||
|
"freeCloudServerAvailableMinutesText": "Volgende gratis cloud server beschikbaar in ${MINUTES} minuten.",
|
||||||
|
"freeCloudServerAvailableNowText": "Volgende gratis cloud server beschikbaar!",
|
||||||
|
"freeCloudServerNotAvailableText": "Geen gratis cloud server beschikbaar.",
|
||||||
"friendHasSentPromoCodeText": "${COUNT} ${APP_NAME} tickets van ${NAME}",
|
"friendHasSentPromoCodeText": "${COUNT} ${APP_NAME} tickets van ${NAME}",
|
||||||
"friendPromoCodeAwardText": "Je krijgt ${COUNT} tickets elke keer het is gebruikt.",
|
"friendPromoCodeAwardText": "Je krijgt ${COUNT} tickets elke keer het is gebruikt.",
|
||||||
"friendPromoCodeExpireText": "Deze code zal vervallen in ${EXPIRE_HOURS} uren en werkt alleen met nieuwe spelers.",
|
"friendPromoCodeExpireText": "Deze code zal vervallen in ${EXPIRE_HOURS} uren en werkt alleen met nieuwe spelers.",
|
||||||
|
|
@ -729,19 +740,21 @@
|
||||||
"googlePlaySeeInvitesText": "Zie Uitnodigingen",
|
"googlePlaySeeInvitesText": "Zie Uitnodigingen",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"googlePlayVersionOnlyText": "(Android / Google Play versie)",
|
"googlePlayVersionOnlyText": "(Android / Google Play versie)",
|
||||||
"hostPublicPartyDescriptionText": "Accommodeer een Publieke Partij:",
|
"hostPublicPartyDescriptionText": "Accommodeer een Publieke Partij",
|
||||||
|
"hostingUnavailableText": "Gastheer Niet beschikbaar",
|
||||||
"inDevelopmentWarningText": "Let op:\n\nNetwerk spel is een nieuwe functie in ontwikkeling.\nVoor nu wordt het streng aangeraden dat alle\nspelers op het zelfde Wi-Fi netwerk zijn.",
|
"inDevelopmentWarningText": "Let op:\n\nNetwerk spel is een nieuwe functie in ontwikkeling.\nVoor nu wordt het streng aangeraden dat alle\nspelers op het zelfde Wi-Fi netwerk zijn.",
|
||||||
"internetText": "Internet",
|
"internetText": "Internet",
|
||||||
"inviteAFriendText": "Hebben je vrienden dit spel niet?\nNodig ze uit om het uit te proberen en ze krijgen ${COUNT} gratis tickets.",
|
"inviteAFriendText": "Hebben je vrienden dit spel niet?\nNodig ze uit om het uit te proberen en ze krijgen ${COUNT} gratis tickets.",
|
||||||
"inviteFriendsText": "Nodig vrienden uit",
|
"inviteFriendsText": "Nodig vrienden uit",
|
||||||
"joinPublicPartyDescriptionText": "Meedoen aan een Publieke Partij.",
|
"joinPublicPartyDescriptionText": "Meedoen aan een Publieke Partij",
|
||||||
"localNetworkDescriptionText": "Neem deel aan een partij in uw netwerk:",
|
"localNetworkDescriptionText": "Word lid van een feest in de buurt (LAN, Bluetooth, meer)",
|
||||||
"localNetworkText": "Lokaal Netwerk",
|
"localNetworkText": "Lokaal Netwerk",
|
||||||
"makePartyPrivateText": "Maak mijn Partij Privé",
|
"makePartyPrivateText": "Maak mijn Partij Privé",
|
||||||
"makePartyPublicText": "Maak Mijn Partij Publiek",
|
"makePartyPublicText": "Maak Mijn Partij Publiek",
|
||||||
"manualAddressText": "Adres",
|
"manualAddressText": "Adres",
|
||||||
"manualConnectText": "Verbind",
|
"manualConnectText": "Verbind",
|
||||||
"manualDescriptionText": "Neem deel aan een partij via adres",
|
"manualDescriptionText": "Neem deel aan een partij via adres",
|
||||||
|
"manualJoinSectionText": "Deelnemen op adres",
|
||||||
"manualJoinableFromInternetText": "Kunnen mensen deelnemen via het internet?:",
|
"manualJoinableFromInternetText": "Kunnen mensen deelnemen via het internet?:",
|
||||||
"manualJoinableNoWithAsteriskText": "NEE*",
|
"manualJoinableNoWithAsteriskText": "NEE*",
|
||||||
"manualJoinableYesText": "JA",
|
"manualJoinableYesText": "JA",
|
||||||
|
|
@ -749,14 +762,17 @@
|
||||||
"manualText": "Handmatig",
|
"manualText": "Handmatig",
|
||||||
"manualYourAddressFromInternetText": "Uw adres via het internet:",
|
"manualYourAddressFromInternetText": "Uw adres via het internet:",
|
||||||
"manualYourLocalAddressText": "Uw lokale adres:",
|
"manualYourLocalAddressText": "Uw lokale adres:",
|
||||||
|
"nearbyText": "Dichtbij",
|
||||||
"noConnectionText": "<geen verbinding>",
|
"noConnectionText": "<geen verbinding>",
|
||||||
"otherVersionsText": "(andere versies)",
|
"otherVersionsText": "(andere versies)",
|
||||||
|
"partyCodeText": "Partijcode",
|
||||||
"partyInviteAcceptText": "Accepteren",
|
"partyInviteAcceptText": "Accepteren",
|
||||||
"partyInviteDeclineText": "Weigeren",
|
"partyInviteDeclineText": "Weigeren",
|
||||||
"partyInviteGooglePlayExtraText": "(bekijk het 'Google Play' tabblad in het 'Verzamel' venster)",
|
"partyInviteGooglePlayExtraText": "(bekijk het 'Google Play' tabblad in het 'Verzamel' venster)",
|
||||||
"partyInviteIgnoreText": "Negeren",
|
"partyInviteIgnoreText": "Negeren",
|
||||||
"partyInviteText": "${NAME} heeft je uitgenodigd\nom bij zijn partij te voegen!",
|
"partyInviteText": "${NAME} heeft je uitgenodigd\nom bij zijn partij te voegen!",
|
||||||
"partyNameText": "Partij Naam",
|
"partyNameText": "Partij Naam",
|
||||||
|
"partyServerRunningText": "Uw partyserver is actief.",
|
||||||
"partySizeText": "partij grootte",
|
"partySizeText": "partij grootte",
|
||||||
"partyStatusCheckingText": "status controleren...",
|
"partyStatusCheckingText": "status controleren...",
|
||||||
"partyStatusJoinableText": "uw partij is nu toegankelijk via het internet",
|
"partyStatusJoinableText": "uw partij is nu toegankelijk via het internet",
|
||||||
|
|
@ -765,12 +781,22 @@
|
||||||
"partyStatusNotPublicText": "uw partij is niet publiek",
|
"partyStatusNotPublicText": "uw partij is niet publiek",
|
||||||
"pingText": "ping",
|
"pingText": "ping",
|
||||||
"portText": "Port",
|
"portText": "Port",
|
||||||
|
"privatePartyCloudDescriptionText": "Privaat partijen draaien op toegewijd cloud servers; geen routerconfiguratie vereist.",
|
||||||
|
"privatePartyHostText": "Organiseer een Privefeestje",
|
||||||
|
"privatePartyJoinText": "Lid worden Privefeestje",
|
||||||
|
"privateText": "Privaat",
|
||||||
|
"publicHostRouterConfigText": "Hiervoor moet mogelijk port-forwarding op uw router worden geconfigureerd. Voor een gemakkelijkere optie, organiseer een privéfeest.",
|
||||||
|
"publicText": "Openbaar",
|
||||||
"requestingAPromoCodeText": "Code aanvragen...",
|
"requestingAPromoCodeText": "Code aanvragen...",
|
||||||
"sendDirectInvitesText": "Verzend directe uitnodigingen",
|
"sendDirectInvitesText": "Verzend directe uitnodigingen",
|
||||||
"shareThisCodeWithFriendsText": "Deel deze code met vrienden:",
|
"shareThisCodeWithFriendsText": "Deel deze code met vrienden:",
|
||||||
"showMyAddressText": "Toon Mijn Adres",
|
"showMyAddressText": "Toon Mijn Adres",
|
||||||
"startAdvertisingText": "Begin Adverteren",
|
"startAdvertisingText": "Begin Adverteren",
|
||||||
|
"startHostingPaidText": "Host nu voor ${COST}",
|
||||||
|
"startHostingText": "Gastheer",
|
||||||
|
"startStopHostingMinutesText": "Je kunt de komende ${MINUTES} minuten gratis starten en stoppen met hosten.",
|
||||||
"stopAdvertisingText": "Stop Adverteren",
|
"stopAdvertisingText": "Stop Adverteren",
|
||||||
|
"stopHostingText": "Stoppen Gastheer Partij",
|
||||||
"titleText": "Verzamel",
|
"titleText": "Verzamel",
|
||||||
"wifiDirectDescriptionBottomText": "Als alle apparaten een 'Wi-Fi Direct' paneel hebben, dan zou het mogelijk moeten zijn\nom ze te vinden en verbinden met elkaar. Als alle apparaten verbonden zijn, kan u hier\npartijen vormen via het 'Lokaal Netwerk' tab, net als bij een normaal Wi-Fi netwerk.\n\nVoor het beste resultaat zou de Wi-Fi Direct host ook de host moeten zijn van de ${APP_NAME} partij.",
|
"wifiDirectDescriptionBottomText": "Als alle apparaten een 'Wi-Fi Direct' paneel hebben, dan zou het mogelijk moeten zijn\nom ze te vinden en verbinden met elkaar. Als alle apparaten verbonden zijn, kan u hier\npartijen vormen via het 'Lokaal Netwerk' tab, net als bij een normaal Wi-Fi netwerk.\n\nVoor het beste resultaat zou de Wi-Fi Direct host ook de host moeten zijn van de ${APP_NAME} partij.",
|
||||||
"wifiDirectDescriptionTopText": "Wi-Fi Direct kan gebruikt worden om directe verbinding te maken tussen Android apparaten zonder\ngebruik te maken van een Wi-Fi netwerk. Dit werkt het best bij Android 4.2 of nieuwer.\n\nOm het te gebruiken, open de Wi-Fi instellingen en zoek voor 'Wi-Fi Direct' in het menu.",
|
"wifiDirectDescriptionTopText": "Wi-Fi Direct kan gebruikt worden om directe verbinding te maken tussen Android apparaten zonder\ngebruik te maken van een Wi-Fi netwerk. Dit werkt het best bij Android 4.2 of nieuwer.\n\nOm het te gebruiken, open de Wi-Fi instellingen en zoek voor 'Wi-Fi Direct' in het menu.",
|
||||||
|
|
@ -838,6 +864,7 @@
|
||||||
"controllersInfoTextFantasia": "Een speler kan de afstandbediening gebruiken als controller,\nmaar gamepads zijn sterk aanbevolen. Je kunt ook mobiele-apparaten\ngebruiken als controllers via de gratis 'Bombsquad Remote' app.\nZie 'Controllers' onder 'Instellingen' voor meer info.",
|
"controllersInfoTextFantasia": "Een speler kan de afstandbediening gebruiken als controller,\nmaar gamepads zijn sterk aanbevolen. Je kunt ook mobiele-apparaten\ngebruiken als controllers via de gratis 'Bombsquad Remote' app.\nZie 'Controllers' onder 'Instellingen' voor meer info.",
|
||||||
"controllersInfoTextMac": "Een of twee spelers kunnen gebruik maken van het toetsenbord, maar Bombsquad is het beste met gamepads.\nBombsquad kan gebruik maken van USB gamepads, PS3 controllers, Xbox 360 controllers, gebruik\nWiimotes en iOS / Android-apparaten om de karakters te besturen. Hopelijk heb je\neen aantal van deze bij de hand. Zie 'Controllers' onder 'Instellingen' voor meer info.",
|
"controllersInfoTextMac": "Een of twee spelers kunnen gebruik maken van het toetsenbord, maar Bombsquad is het beste met gamepads.\nBombsquad kan gebruik maken van USB gamepads, PS3 controllers, Xbox 360 controllers, gebruik\nWiimotes en iOS / Android-apparaten om de karakters te besturen. Hopelijk heb je\neen aantal van deze bij de hand. Zie 'Controllers' onder 'Instellingen' voor meer info.",
|
||||||
"controllersInfoTextOuya": "U kunt OUYA controllers, PS3 controllers, Xbox 360 controllers, \nen tal van andere USB-en Bluetooth-gamepads gebruiken met Bombsquad.\nU kunt ook iOS-en Android-apparaten gebruiken als controllers via de gratis\n'Bombsquad Remote' app. Zie 'Controllers' onder 'Instellingen' voor meer info.",
|
"controllersInfoTextOuya": "U kunt OUYA controllers, PS3 controllers, Xbox 360 controllers, \nen tal van andere USB-en Bluetooth-gamepads gebruiken met Bombsquad.\nU kunt ook iOS-en Android-apparaten gebruiken als controllers via de gratis\n'Bombsquad Remote' app. Zie 'Controllers' onder 'Instellingen' voor meer info.",
|
||||||
|
"controllersInfoTextRemoteOnly": "Je kunt ${APP_NAME} spelen met vrienden via een netwerk, of jij\nkunnen allemaal op hetzelfde apparaat spelen door telefoons te gebruiken als\ncontrollers via de gratis app '${REMOTE_APP_NAME}'.",
|
||||||
"controllersText": "Controllers",
|
"controllersText": "Controllers",
|
||||||
"controlsSubtitleText": "Uw vriendelijke ${APP_NAME} personage heeft een aantal basis acties:",
|
"controlsSubtitleText": "Uw vriendelijke ${APP_NAME} personage heeft een aantal basis acties:",
|
||||||
"controlsText": "Besturing",
|
"controlsText": "Besturing",
|
||||||
|
|
@ -949,6 +976,9 @@
|
||||||
"jumpText": "Spring",
|
"jumpText": "Spring",
|
||||||
"keepText": "houd",
|
"keepText": "houd",
|
||||||
"keepTheseSettingsText": "Deze instellingen behouden?",
|
"keepTheseSettingsText": "Deze instellingen behouden?",
|
||||||
|
"keyboardChangeInstructionsText": "Dubbelklik op de spatiebalk om van toetsenbord te wisselen.",
|
||||||
|
"keyboardNoOthersAvailableText": "Geen andere toetsenborden beschikbaar.",
|
||||||
|
"keyboardSwitchText": "Toetsenbord overschakelen naar '${NAME}'.",
|
||||||
"kickOccurredText": "${NAME} is eruit geschopt.",
|
"kickOccurredText": "${NAME} is eruit geschopt.",
|
||||||
"kickQuestionText": "${NAME} er uit schoppen?",
|
"kickQuestionText": "${NAME} er uit schoppen?",
|
||||||
"kickText": "Er uit schoppen",
|
"kickText": "Er uit schoppen",
|
||||||
|
|
@ -1031,6 +1061,9 @@
|
||||||
"maxConnectionsText": "Max Connecties",
|
"maxConnectionsText": "Max Connecties",
|
||||||
"maxPartySizeText": "Max Partij Grootte",
|
"maxPartySizeText": "Max Partij Grootte",
|
||||||
"maxPlayersText": "Max Spelers",
|
"maxPlayersText": "Max Spelers",
|
||||||
|
"modeArcadeText": "Speelhal Modus",
|
||||||
|
"modeClassicText": "Klassieke Modus",
|
||||||
|
"modeDemoText": "Demo Modus",
|
||||||
"mostValuablePlayerText": "Meest Waardevolle Speler",
|
"mostValuablePlayerText": "Meest Waardevolle Speler",
|
||||||
"mostViolatedPlayerText": "Meest Geschonden Speler",
|
"mostViolatedPlayerText": "Meest Geschonden Speler",
|
||||||
"mostViolentPlayerText": "Meest Gewelddadige Speler",
|
"mostViolentPlayerText": "Meest Gewelddadige Speler",
|
||||||
|
|
@ -1074,6 +1107,7 @@
|
||||||
"offText": "Uit",
|
"offText": "Uit",
|
||||||
"okText": "Ok",
|
"okText": "Ok",
|
||||||
"onText": "Aan",
|
"onText": "Aan",
|
||||||
|
"oneMomentText": "Een Moment..",
|
||||||
"onslaughtRespawnText": "${PLAYER} zal respawnen in golf ${WAVE}",
|
"onslaughtRespawnText": "${PLAYER} zal respawnen in golf ${WAVE}",
|
||||||
"orText": "${A} of ${B}",
|
"orText": "${A} of ${B}",
|
||||||
"otherText": "Andere ...",
|
"otherText": "Andere ...",
|
||||||
|
|
@ -1125,6 +1159,7 @@
|
||||||
"playerText": "Speler",
|
"playerText": "Speler",
|
||||||
"playlistNoValidGamesErrorText": "Deze speellijst bevat geen geldige vrijgespeelde spellen.",
|
"playlistNoValidGamesErrorText": "Deze speellijst bevat geen geldige vrijgespeelde spellen.",
|
||||||
"playlistNotFoundText": "speellijst niet gevonden",
|
"playlistNotFoundText": "speellijst niet gevonden",
|
||||||
|
"playlistText": "Afspeellijst",
|
||||||
"playlistsText": "Speellijsten",
|
"playlistsText": "Speellijsten",
|
||||||
"pleaseRateText": "Als u geniet van ${APP_NAME}, zou u dan een moment willen\nnemen om een waardering te geven of recensie te schrijven.\nDit geeft ons nuttige feedback voor toekomstige ontwikkelingen.\n\nBedankt!\n-eric",
|
"pleaseRateText": "Als u geniet van ${APP_NAME}, zou u dan een moment willen\nnemen om een waardering te geven of recensie te schrijven.\nDit geeft ons nuttige feedback voor toekomstige ontwikkelingen.\n\nBedankt!\n-eric",
|
||||||
"pleaseWaitText": "Even geduld...",
|
"pleaseWaitText": "Even geduld...",
|
||||||
|
|
@ -1551,6 +1586,7 @@
|
||||||
"Dutch": "Nederlands",
|
"Dutch": "Nederlands",
|
||||||
"English": "Engels",
|
"English": "Engels",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipijns",
|
||||||
"Finnish": "Fins",
|
"Finnish": "Fins",
|
||||||
"French": "Frans",
|
"French": "Frans",
|
||||||
"German": "Duits",
|
"German": "Duits",
|
||||||
|
|
@ -1571,8 +1607,11 @@
|
||||||
"Slovak": "Sloveens",
|
"Slovak": "Sloveens",
|
||||||
"Spanish": "Spaans",
|
"Spanish": "Spaans",
|
||||||
"Swedish": "Zweeds",
|
"Swedish": "Zweeds",
|
||||||
|
"Tamil": "Tamil",
|
||||||
|
"Thai": "Thais",
|
||||||
"Turkish": "Turks",
|
"Turkish": "Turks",
|
||||||
"Ukrainian": "Oekraïens",
|
"Ukrainian": "Oekraïens",
|
||||||
|
"Venetian": "Venetiaanse",
|
||||||
"Vietnamese": "Vietnamees"
|
"Vietnamese": "Vietnamees"
|
||||||
},
|
},
|
||||||
"leagueNames": {
|
"leagueNames": {
|
||||||
|
|
@ -1621,6 +1660,7 @@
|
||||||
"Account linking successful!": "Account succesvol gelinkt!",
|
"Account linking successful!": "Account succesvol gelinkt!",
|
||||||
"Account unlinking successful!": "Account verbinding succesvol verbroken!",
|
"Account unlinking successful!": "Account verbinding succesvol verbroken!",
|
||||||
"Accounts are already linked.": "Accounts zijn al gelinkt.",
|
"Accounts are already linked.": "Accounts zijn al gelinkt.",
|
||||||
|
"Ad view could not be verified.\nPlease be sure you are running an official and up-to-date version of the game.": "Advertentieweergave kan niet worden geverifieerd.\nZorg ervoor dat je een officiële en up-to-date versie van het spel gebruikt.",
|
||||||
"An error has occurred; (${ERROR})": "er is een fout opgetreden; (${ERROR})",
|
"An error has occurred; (${ERROR})": "er is een fout opgetreden; (${ERROR})",
|
||||||
"An error has occurred; please contact support. (${ERROR})": "er is een fout opgetreden, neem contact op met de ondersteuning. (${ERROR})",
|
"An error has occurred; please contact support. (${ERROR})": "er is een fout opgetreden, neem contact op met de ondersteuning. (${ERROR})",
|
||||||
"An error has occurred; please contact support@froemling.net.": "Er is een fout opgetreden; neem alstublieft contact op met support@froemling.net.",
|
"An error has occurred; please contact support@froemling.net.": "Er is een fout opgetreden; neem alstublieft contact op met support@froemling.net.",
|
||||||
|
|
@ -1646,6 +1686,7 @@
|
||||||
"Max number of profiles reached.": "Maximaal aantal profielen bereikt.",
|
"Max number of profiles reached.": "Maximaal aantal profielen bereikt.",
|
||||||
"Maximum friend code rewards reached.": "Maximum vriend code beloning behaald",
|
"Maximum friend code rewards reached.": "Maximum vriend code beloning behaald",
|
||||||
"Message is too long.": "Bericht is te lang.",
|
"Message is too long.": "Bericht is te lang.",
|
||||||
|
"No servers are available. Please try again soon.": "Er zijn geen servers beschikbaar. Probeer het binnenkort opnieuw.",
|
||||||
"Profile \"${NAME}\" upgraded successfully.": "Profiel \"${NAME}\" is succesvol opgewaardeerd.",
|
"Profile \"${NAME}\" upgraded successfully.": "Profiel \"${NAME}\" is succesvol opgewaardeerd.",
|
||||||
"Profile could not be upgraded.": "Profiel kon niet worden opgewaardeerd.",
|
"Profile could not be upgraded.": "Profiel kon niet worden opgewaardeerd.",
|
||||||
"Purchase successful!": "Aankoop succesvol!",
|
"Purchase successful!": "Aankoop succesvol!",
|
||||||
|
|
@ -1655,10 +1696,12 @@
|
||||||
"Sorry, this code has already been used.": "Sorry, deze code is al gebruikt.",
|
"Sorry, this code has already been used.": "Sorry, deze code is al gebruikt.",
|
||||||
"Sorry, this code has expired.": "Sorry, deze code is verlopen.",
|
"Sorry, this code has expired.": "Sorry, deze code is verlopen.",
|
||||||
"Sorry, this code only works for new accounts.": "Sorry, deze code werkt alleen op nieuwe accounts.",
|
"Sorry, this code only works for new accounts.": "Sorry, deze code werkt alleen op nieuwe accounts.",
|
||||||
|
"Still searching for nearby servers; please try again soon.": "Nog steeds op zoek naar servers in de buurt; probeer het snel opnieuw.",
|
||||||
"Temporarily unavailable; please try again later.": "Tijdelijk niet beschikbaar; probeer het later opnieuw.",
|
"Temporarily unavailable; please try again later.": "Tijdelijk niet beschikbaar; probeer het later opnieuw.",
|
||||||
"The tournament ended before you finished.": "Het toernooi eindigde voordat u klaar was.",
|
"The tournament ended before you finished.": "Het toernooi eindigde voordat u klaar was.",
|
||||||
"This account cannot be unlinked for ${NUM} days.": "Dit account kan gedurende ${NUM} dagen niet worden ontkoppeld.",
|
"This account cannot be unlinked for ${NUM} days.": "Dit account kan gedurende ${NUM} dagen niet worden ontkoppeld.",
|
||||||
"This code cannot be used on the account that created it.": "Deze code kan niet gebruikt worden op het account die het gemaakt heeft.",
|
"This code cannot be used on the account that created it.": "Deze code kan niet gebruikt worden op het account die het gemaakt heeft.",
|
||||||
|
"This is currently unavailable; please try again later.": "Dit is momenteel niet beschikbaar; probeer het later opnieuw.",
|
||||||
"This requires version ${VERSION} or newer.": "Dit vereist versie ${VERSION} of nieuwer.",
|
"This requires version ${VERSION} or newer.": "Dit vereist versie ${VERSION} of nieuwer.",
|
||||||
"Tournaments disabled due to rooted device.": "Toernooien uitgeschakeld vanwege geworteld apparaat",
|
"Tournaments disabled due to rooted device.": "Toernooien uitgeschakeld vanwege geworteld apparaat",
|
||||||
"Tournaments require ${VERSION} or newer": "toernooi vereist ${VERSION} of nieuwer",
|
"Tournaments require ${VERSION} or newer": "toernooi vereist ${VERSION} of nieuwer",
|
||||||
|
|
|
||||||
5
dist/ba_data/data/languages/english.json
vendored
5
dist/ba_data/data/languages/english.json
vendored
|
|
@ -27,6 +27,8 @@
|
||||||
"signInWithGooglePlayText": "Sign in with Google Play",
|
"signInWithGooglePlayText": "Sign in with Google Play",
|
||||||
"signInWithTestAccountInfoText": "(legacy account type; use device accounts going forward)",
|
"signInWithTestAccountInfoText": "(legacy account type; use device accounts going forward)",
|
||||||
"signInWithTestAccountText": "Sign in with test account",
|
"signInWithTestAccountText": "Sign in with test account",
|
||||||
|
"signInWithV2InfoText": "(an account that works on all platforms)",
|
||||||
|
"signInWithV2Text": "Sign in with a BombSquad account",
|
||||||
"signOutText": "Sign Out",
|
"signOutText": "Sign Out",
|
||||||
"signingInText": "Signing in...",
|
"signingInText": "Signing in...",
|
||||||
"signingOutText": "Signing out...",
|
"signingOutText": "Signing out...",
|
||||||
|
|
@ -34,6 +36,7 @@
|
||||||
"titleText": "Account",
|
"titleText": "Account",
|
||||||
"unlinkAccountsInstructionsText": "Select an account to unlink",
|
"unlinkAccountsInstructionsText": "Select an account to unlink",
|
||||||
"unlinkAccountsText": "Unlink Accounts",
|
"unlinkAccountsText": "Unlink Accounts",
|
||||||
|
"v2LinkInstructionsText": "Use this link to create an account or sign in.",
|
||||||
"viaAccount": "(via account ${NAME})",
|
"viaAccount": "(via account ${NAME})",
|
||||||
"youAreSignedInAsText": "You are signed in as:"
|
"youAreSignedInAsText": "You are signed in as:"
|
||||||
},
|
},
|
||||||
|
|
@ -494,6 +497,7 @@
|
||||||
"yourPowerRankingText": "Your Power Ranking:"
|
"yourPowerRankingText": "Your Power Ranking:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} Copy",
|
"copyOfText": "${NAME} Copy",
|
||||||
|
"copyText": "Copy",
|
||||||
"createEditPlayerText": "<Create/Edit Player>",
|
"createEditPlayerText": "<Create/Edit Player>",
|
||||||
"createText": "Create",
|
"createText": "Create",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1504,6 +1508,7 @@
|
||||||
"Dutch": null,
|
"Dutch": null,
|
||||||
"English": null,
|
"English": null,
|
||||||
"Esperanto": null,
|
"Esperanto": null,
|
||||||
|
"Filipino": null,
|
||||||
"Finnish": null,
|
"Finnish": null,
|
||||||
"French": null,
|
"French": null,
|
||||||
"German": null,
|
"German": null,
|
||||||
|
|
|
||||||
142
dist/ba_data/data/languages/esperanto.json
vendored
142
dist/ba_data/data/languages/esperanto.json
vendored
|
|
@ -1,14 +1,23 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountProfileText": "(konta profilo)",
|
"accountProfileText": "(konta profilo)",
|
||||||
|
"accountsText": "Kontoj",
|
||||||
"achievementProgressText": "Atingoj: ${COUNT} el ${TOTAL}",
|
"achievementProgressText": "Atingoj: ${COUNT} el ${TOTAL}",
|
||||||
"campaignProgressText": "Kampanja progreso: ${PROGRESS}",
|
"campaignProgressText": "Kampanja progreso [malfacila]: ${PROGRESS}",
|
||||||
|
"customName": "Adaptita nomo",
|
||||||
|
"linkAccountsEnterCodeText": "Enigi kodon",
|
||||||
|
"linkAccountsText": "Ligi kontojn",
|
||||||
|
"linkedAccountsText": "Ligitaj kontoj:",
|
||||||
|
"nameChangeConfirm": "Ĉu redakti vian kontan nomon al ${NAME}?",
|
||||||
"notLoggedInText": "<ne ensalutita>",
|
"notLoggedInText": "<ne ensalutita>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Ĉi tio reigos vian kunlaboran progreson\nkaj lokajn plej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
"resetProgressConfirmNoAchievementsText": "Ĉi tio reigos vian kunlaboran progreson\nkaj lokajn plej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
||||||
"resetProgressConfirmText": "Ĉi tio reigos vian kunlaboran\nprogreson, atingojn kaj lokajn\nplej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
"resetProgressConfirmText": "Ĉi tio reigos vian kunlaboran\nprogreson, atingojn kaj lokajn\nplej altajn poentojn (sed ne\nviajn biletojn). Ne eblas malfari.\nĈu vi certas?",
|
||||||
"resetProgressText": "Reigi progreson",
|
"resetProgressText": "Reigi progreson",
|
||||||
"signInInfoText": "Ensalutu por konservi vian progreson\nen la nubon, gajni biletojn kaj\npartopreni en turniroj.",
|
"signInInfoText": "Ensalutu por konservi vian progreson\nen la nubon, gajni biletojn kaj\npartopreni en turniroj.",
|
||||||
"signInText": "Ensaluti",
|
"signInText": "Ensaluti",
|
||||||
|
"signInWithDeviceText": "Ensaluti per aparatkonto",
|
||||||
|
"signInWithGameCircleText": "Ensaluti per Game Circle",
|
||||||
|
"signInWithGooglePlayText": "Ensaluti per Google Play",
|
||||||
"signOutText": "Elsaluti",
|
"signOutText": "Elsaluti",
|
||||||
"signingInText": "Ensalutas...",
|
"signingInText": "Ensalutas...",
|
||||||
"signingOutText": "Elsalutas...",
|
"signingOutText": "Elsalutas...",
|
||||||
|
|
@ -17,6 +26,8 @@
|
||||||
"testAccountWarningText": "Atentu: vi estas ensalutita per test-konto.\nĈi tiu konto estas specifa por ĉi tiu aparato kaj\npovas esti fojfoje reigata. (do ne dum multa tempo\nkolektu kaj malŝlosu aferojn per ĝi)\n\nUzu vendo-version de la ludo por uzi \"veran\" konton\n(Game-Center, Google Plus ktp). Tio ankaŭ permesas\nal vi konservi progreson en la nubon kaj kunhavigi\ntion inter diversaj aparatoj.",
|
"testAccountWarningText": "Atentu: vi estas ensalutita per test-konto.\nĈi tiu konto estas specifa por ĉi tiu aparato kaj\npovas esti fojfoje reigata. (do ne dum multa tempo\nkolektu kaj malŝlosu aferojn per ĝi)\n\nUzu vendo-version de la ludo por uzi \"veran\" konton\n(Game-Center, Google Plus ktp). Tio ankaŭ permesas\nal vi konservi progreson en la nubon kaj kunhavigi\ntion inter diversaj aparatoj.",
|
||||||
"ticketsText": "Biletoj: ${COUNT}",
|
"ticketsText": "Biletoj: ${COUNT}",
|
||||||
"titleText": "Konto",
|
"titleText": "Konto",
|
||||||
|
"unlinkAccountsText": "Malligi kontojn",
|
||||||
|
"viaAccount": "(per konto ${NAME})",
|
||||||
"youAreLoggedInAsText": "Vi ensalutis kiel:",
|
"youAreLoggedInAsText": "Vi ensalutis kiel:",
|
||||||
"youAreSignedInAsText": "Vi ensalutiĝis kiel:"
|
"youAreSignedInAsText": "Vi ensalutiĝis kiel:"
|
||||||
},
|
},
|
||||||
|
|
@ -305,7 +316,7 @@
|
||||||
"betaValidatedText": "Beta validiĝis; Ĝuu!",
|
"betaValidatedText": "Beta validiĝis; Ĝuu!",
|
||||||
"bombBoldText": "BOMBO",
|
"bombBoldText": "BOMBO",
|
||||||
"bombText": "Bombo",
|
"bombText": "Bombo",
|
||||||
"bsRemoteConfigureInAppText": "BombSquad teleregilo estas konfigurita en la aplikaĵo mem.",
|
"bsRemoteConfigureInAppText": "${REMOTE_APP_NAME} estas konfigurita en la aplikaĵo mem.",
|
||||||
"buttonText": "butono",
|
"buttonText": "butono",
|
||||||
"canWeDebugText": "Ĉu vi ŝatus ke BombSquad aŭtomate raportu cimojn,\nkraŝojn kaj bazajn uzadajn informojn al la programisto?\n\nĈi tiuj datumoj ne enhavas personajn informojn kaj helpas\npor manteni la ludon flua kaj sencima.",
|
"canWeDebugText": "Ĉu vi ŝatus ke BombSquad aŭtomate raportu cimojn,\nkraŝojn kaj bazajn uzadajn informojn al la programisto?\n\nĈi tiuj datumoj ne enhavas personajn informojn kaj helpas\npor manteni la ludon flua kaj sencima.",
|
||||||
"cancelText": "Nuligi",
|
"cancelText": "Nuligi",
|
||||||
|
|
@ -397,7 +408,7 @@
|
||||||
"explanationText": "Por uzi poŝtelefonon aŭ tabletkomputilon kiel sendratan\nregilon, instalu la aplikaĵon \"BombSquad Remote\" en ĝi.\nKiom ajn da aparatoj povas konektiĝi sendratrete, kaj senpage!",
|
"explanationText": "Por uzi poŝtelefonon aŭ tabletkomputilon kiel sendratan\nregilon, instalu la aplikaĵon \"BombSquad Remote\" en ĝi.\nKiom ajn da aparatoj povas konektiĝi sendratrete, kaj senpage!",
|
||||||
"forAndroidText": "por Android:",
|
"forAndroidText": "por Android:",
|
||||||
"forIOSText": "por iOS:",
|
"forIOSText": "por iOS:",
|
||||||
"getItForText": "Akiru BombSquad Remote por iOS en la aplikaĵvendejo de \nApple aŭ por Android en la aplikaĵvendejo de Google aŭ Amazon",
|
"getItForText": "Akiru ${REMOTE_APP_NAME} por iOS ĉe la Apple App Store\naŭ por Android ĉe la Google Play Store aŭ Amazon Appstore",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
"titleText": "Uzi poŝaparatojn kiel regilojn:"
|
"titleText": "Uzi poŝaparatojn kiel regilojn:"
|
||||||
},
|
},
|
||||||
|
|
@ -415,6 +426,7 @@
|
||||||
"entryFeeText": "Enirpago",
|
"entryFeeText": "Enirpago",
|
||||||
"multipliersText": "Multobligiloj",
|
"multipliersText": "Multobligiloj",
|
||||||
"ofTotalTimeText": "el ${TOTAL}",
|
"ofTotalTimeText": "el ${TOTAL}",
|
||||||
|
"playNowText": "Ludi nun",
|
||||||
"pointsText": "Poentoj",
|
"pointsText": "Poentoj",
|
||||||
"powerRankingNotInTopText": "(ne en la supraj ${NUMBER})",
|
"powerRankingNotInTopText": "(ne en la supraj ${NUMBER})",
|
||||||
"powerRankingPointsEqualsText": "= ${NUMBER} poentoj",
|
"powerRankingPointsEqualsText": "= ${NUMBER} poentoj",
|
||||||
|
|
@ -435,6 +447,7 @@
|
||||||
},
|
},
|
||||||
"copyOfText": "Kopio de ${NAME}",
|
"copyOfText": "Kopio de ${NAME}",
|
||||||
"createAPlayerProfileText": "Ĉu krei ludantprofilon?",
|
"createAPlayerProfileText": "Ĉu krei ludantprofilon?",
|
||||||
|
"createEditPlayerText": "<Krei/redakti ludanton>",
|
||||||
"createText": "Krei",
|
"createText": "Krei",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
"additionalAudioArtIdeasText": "Aldonaj aŭdaĵoj, unuaj artaĵoj kaj ideoj fare de ${NAME}",
|
"additionalAudioArtIdeasText": "Aldonaj aŭdaĵoj, unuaj artaĵoj kaj ideoj fare de ${NAME}",
|
||||||
|
|
@ -450,7 +463,7 @@
|
||||||
"soundsText": "Sonoj (${SOURCE}):",
|
"soundsText": "Sonoj (${SOURCE}):",
|
||||||
"specialThanksText": "Speciale dankon:",
|
"specialThanksText": "Speciale dankon:",
|
||||||
"thanksEspeciallyToText": "Specife dankon al ${NAME}",
|
"thanksEspeciallyToText": "Specife dankon al ${NAME}",
|
||||||
"titleText": "Dankdiroj de BombSquad",
|
"titleText": "Dankdiroj de ${APP_NAME}",
|
||||||
"whoeverInventedCoffeeText": "Kiu ajn inventis kafon"
|
"whoeverInventedCoffeeText": "Kiu ajn inventis kafon"
|
||||||
},
|
},
|
||||||
"currentStandingText": "Via nuna pozicio estas #${RANK}",
|
"currentStandingText": "Via nuna pozicio estas #${RANK}",
|
||||||
|
|
@ -480,6 +493,7 @@
|
||||||
"defaultNewGameListNameText": "Mia ludlisto de ${PLAYMODE}",
|
"defaultNewGameListNameText": "Mia ludlisto de ${PLAYMODE}",
|
||||||
"defaultNewTeamGameListNameText": "Miaj teamludoj",
|
"defaultNewTeamGameListNameText": "Miaj teamludoj",
|
||||||
"defaultTeamGameListNameText": "Normala teamludaro",
|
"defaultTeamGameListNameText": "Normala teamludaro",
|
||||||
|
"deleteText": "Forigi",
|
||||||
"denyText": "Rifuzi",
|
"denyText": "Rifuzi",
|
||||||
"desktopResText": "Distingivo",
|
"desktopResText": "Distingivo",
|
||||||
"difficultyEasyText": "Facile",
|
"difficultyEasyText": "Facile",
|
||||||
|
|
@ -489,6 +503,7 @@
|
||||||
"directBrowserToURLText": "Bonvolu viziti en retumilo la jenan ligilon:",
|
"directBrowserToURLText": "Bonvolu viziti en retumilo la jenan ligilon:",
|
||||||
"doneText": "Farite",
|
"doneText": "Farite",
|
||||||
"drawText": "Egalludo",
|
"drawText": "Egalludo",
|
||||||
|
"duplicateText": "Duobligi",
|
||||||
"editGameListWindow": {
|
"editGameListWindow": {
|
||||||
"addGameText": "Aldoni\nludon",
|
"addGameText": "Aldoni\nludon",
|
||||||
"cantOverwriteDefaultText": "Ne eblas transskribi la implicitan ludliston!",
|
"cantOverwriteDefaultText": "Ne eblas transskribi la implicitan ludliston!",
|
||||||
|
|
@ -544,6 +559,7 @@
|
||||||
"useMusicFileText": "Muzikdosiero (mp3, k.s.)",
|
"useMusicFileText": "Muzikdosiero (mp3, k.s.)",
|
||||||
"useMusicFolderText": "Dosierujo da muzikdosieroj"
|
"useMusicFolderText": "Dosierujo da muzikdosieroj"
|
||||||
},
|
},
|
||||||
|
"editText": "Redakti",
|
||||||
"endText": "Fini",
|
"endText": "Fini",
|
||||||
"epicDescriptionFilterText": "${DESCRIPTION} en brila malrapideco",
|
"epicDescriptionFilterText": "${DESCRIPTION} en brila malrapideco",
|
||||||
"epicNameFilterText": "Brila ${NAME}",
|
"epicNameFilterText": "Brila ${NAME}",
|
||||||
|
|
@ -551,10 +567,10 @@
|
||||||
"errorOutOfDiskSpaceText": "elĉerpiĝis diskspaco",
|
"errorOutOfDiskSpaceText": "elĉerpiĝis diskspaco",
|
||||||
"errorText": "Eraro",
|
"errorText": "Eraro",
|
||||||
"errorUnknownText": "nekonata eraro",
|
"errorUnknownText": "nekonata eraro",
|
||||||
"exitGameText": "Ĉu eliri el BombSquad?",
|
"exitGameText": "Ĉu eliri el ${APP_NAME}?",
|
||||||
"externalStorageText": "Ekstera konservujo",
|
"externalStorageText": "Ekstera konservujo",
|
||||||
"failText": "Fiasko",
|
"failText": "Fiasko",
|
||||||
"fatalErrorText": "Ho ve; io mankas aŭ rompiĝis.\nBonvolu provi reinstali BombSquad aŭ\nkontaktu ${EMAIL} por helpo.",
|
"fatalErrorText": "Ho ve; io mankas aŭ rompiĝis.\nBonvolu provi reinstali la apon aŭ\nkontaktu ${EMAIL} por helpo.",
|
||||||
"fileSelectorWindow": {
|
"fileSelectorWindow": {
|
||||||
"titleFileFolderText": "Elektu dosieron aŭ dosierujon",
|
"titleFileFolderText": "Elektu dosieron aŭ dosierujon",
|
||||||
"titleFileText": "Elektu dosieron",
|
"titleFileText": "Elektu dosieron",
|
||||||
|
|
@ -565,7 +581,7 @@
|
||||||
"finalScoresText": "Finaj poentoj",
|
"finalScoresText": "Finaj poentoj",
|
||||||
"finalTimeText": "Fina tempo",
|
"finalTimeText": "Fina tempo",
|
||||||
"finishingInstallText": "Finante instaliĝon, bonvolu atendi...",
|
"finishingInstallText": "Finante instaliĝon, bonvolu atendi...",
|
||||||
"fireTVRemoteWarningText": "* Por pli bona sperto, uzu\nludregilojn aŭ instalu la\n'BombSquad Remote'-aplikaĵon\nen viaj telefonoj kaj tabuletoj.",
|
"fireTVRemoteWarningText": "* Por pli bona sperto, uzu\nludregilojn aŭ instalu la\n'${REMOTE_APP_NAME}'-aplikaĵon\nen viaj telefonoj kaj tabuletoj.",
|
||||||
"firstToFinalText": "Unua-ĝis-${COUNT} finalo",
|
"firstToFinalText": "Unua-ĝis-${COUNT} finalo",
|
||||||
"firstToSeriesText": "Unua-ĝis-${COUNT} serio",
|
"firstToSeriesText": "Unua-ĝis-${COUNT} serio",
|
||||||
"fiveKillText": "KVINMORTIGO!!!",
|
"fiveKillText": "KVINMORTIGO!!!",
|
||||||
|
|
@ -607,17 +623,25 @@
|
||||||
"bluetoothText": "Bluetooth",
|
"bluetoothText": "Bluetooth",
|
||||||
"checkingText": "kontrolante...",
|
"checkingText": "kontrolante...",
|
||||||
"disconnectClientsText": "Tio malkonektos la ${COUNT} ludanto(j)n\nen via ludantaro. Ĉu vi certas?",
|
"disconnectClientsText": "Tio malkonektos la ${COUNT} ludanto(j)n\nen via ludantaro. Ĉu vi certas?",
|
||||||
|
"friendPromoCodeWhereToEnterText": "(en \"Agordoj->Por spertuloj->Enigu kodon\")",
|
||||||
"googlePlayDescriptionText": "Inviti ludantojn al la ludantaro per Google Play:",
|
"googlePlayDescriptionText": "Inviti ludantojn al la ludantaro per Google Play:",
|
||||||
"googlePlayInviteText": "Inviti",
|
"googlePlayInviteText": "Inviti",
|
||||||
"googlePlayReInviteText": "Estas ${COUNT} ludanto(j) de Google Play en via ludantaro\nkiuj malkonektiĝos se vi komencos novan inviton.\nEnmetu ilin en la nova invito por rehavi ilin.",
|
"googlePlayReInviteText": "Estas ${COUNT} ludanto(j) de Google Play en via ludantaro\nkiuj malkonektiĝos se vi komencos novan inviton.\nEnmetu ilin en la nova invito por rehavi ilin.",
|
||||||
"googlePlaySeeInvitesText": "Vidi invitojn",
|
"googlePlaySeeInvitesText": "Vidi invitojn",
|
||||||
"googlePlayText": "Google Play",
|
"googlePlayText": "Google Play",
|
||||||
|
"googlePlayVersionOnlyText": "(versio de Android / Google Play)",
|
||||||
"inDevelopmentWarningText": "Notu:\n\nReta ludado estas nova kaj ankoraŭ disvolvata.\nPor nun, estas rekomendate ke ĉiuj ludantoj\nestu en la sama sendrata reto.",
|
"inDevelopmentWarningText": "Notu:\n\nReta ludado estas nova kaj ankoraŭ disvolvata.\nPor nun, estas rekomendate ke ĉiuj ludantoj\nestu en la sama sendrata reto.",
|
||||||
|
"internetText": "Interreto",
|
||||||
|
"inviteFriendsText": "Inviti amikojn",
|
||||||
|
"joinPublicPartyDescriptionText": "Aliĝi al publika ludantaro",
|
||||||
"localNetworkDescriptionText": "Aliĝi al ludantaro en via reto:",
|
"localNetworkDescriptionText": "Aliĝi al ludantaro en via reto:",
|
||||||
"localNetworkText": "Loka reto",
|
"localNetworkText": "Loka reto",
|
||||||
|
"makePartyPrivateText": "Privatigi mian ludantaron",
|
||||||
|
"makePartyPublicText": "Publikigi mian ludantaron",
|
||||||
"manualAddressText": "Adreso",
|
"manualAddressText": "Adreso",
|
||||||
"manualConnectText": "Konekti",
|
"manualConnectText": "Konekti",
|
||||||
"manualDescriptionText": "Aliĝi al ludantaro per adreso:",
|
"manualDescriptionText": "Aliĝi al ludantaro per adreso:",
|
||||||
|
"manualJoinSectionText": "Aliĝi per adreso",
|
||||||
"manualJoinableFromInternetText": "Ĉu eblas aliĝi al vi de la interreto?:",
|
"manualJoinableFromInternetText": "Ĉu eblas aliĝi al vi de la interreto?:",
|
||||||
"manualJoinableNoWithAsteriskText": "NE*",
|
"manualJoinableNoWithAsteriskText": "NE*",
|
||||||
"manualJoinableYesText": "JES",
|
"manualJoinableYesText": "JES",
|
||||||
|
|
@ -625,12 +649,19 @@
|
||||||
"manualText": "Mane",
|
"manualText": "Mane",
|
||||||
"manualYourAddressFromInternetText": "Via adreso de la interreto:",
|
"manualYourAddressFromInternetText": "Via adreso de la interreto:",
|
||||||
"manualYourLocalAddressText": "Via loka adreso:",
|
"manualYourLocalAddressText": "Via loka adreso:",
|
||||||
|
"nearbyText": "Proksime",
|
||||||
"noConnectionText": "<sen konekto>",
|
"noConnectionText": "<sen konekto>",
|
||||||
|
"otherVersionsText": "(aliaj versioj)",
|
||||||
"partyInviteAcceptText": "Akcepti",
|
"partyInviteAcceptText": "Akcepti",
|
||||||
"partyInviteDeclineText": "Malakcepti",
|
"partyInviteDeclineText": "Malakcepti",
|
||||||
"partyInviteGooglePlayExtraText": "(vidu la paĝon 'Google Play' en la fenestro 'Kolektiĝi')",
|
"partyInviteGooglePlayExtraText": "(vidu la paĝon 'Google Play' en la fenestro 'Kolektiĝi')",
|
||||||
"partyInviteIgnoreText": "Ignori",
|
"partyInviteIgnoreText": "Ignori",
|
||||||
"partyInviteText": "${NAME} invitis vin\npor aliĝi al la ludantaro!",
|
"partyInviteText": "${NAME} invitis vin\npor aliĝi al la ludantaro!",
|
||||||
|
"partySizeText": "ludantaro grandeco",
|
||||||
|
"portText": "Pordo",
|
||||||
|
"privateText": "Privataj",
|
||||||
|
"publicText": "Publikaj",
|
||||||
|
"showMyAddressText": "Montri mian adreson",
|
||||||
"titleText": "Kolektiĝi",
|
"titleText": "Kolektiĝi",
|
||||||
"wifiDirectDescriptionBottomText": "Se ĉiuj aparatoj havas panelon 'Wi-Fi Direct', ili devus povi uzi tion por trovi\nkaj konektiĝi unu al la alia. Kiam ĉiuj aparatoj estas konektitaj, vi povas formi\nludantarojn ĉi tie per la paĝo 'Loka reto', same kiel kun normala Vifi-reto.\n\nPrefere la gastiganto 'Wi-Fi Direct' ankaŭ estu la ludantargastiganto de BombSquad.",
|
"wifiDirectDescriptionBottomText": "Se ĉiuj aparatoj havas panelon 'Wi-Fi Direct', ili devus povi uzi tion por trovi\nkaj konektiĝi unu al la alia. Kiam ĉiuj aparatoj estas konektitaj, vi povas formi\nludantarojn ĉi tie per la paĝo 'Loka reto', same kiel kun normala Vifi-reto.\n\nPrefere la gastiganto 'Wi-Fi Direct' ankaŭ estu la ludantargastiganto de BombSquad.",
|
||||||
"wifiDirectDescriptionTopText": "Wi-Fi Direct povas esti uzata por konekti Android-aparatojn rekte sen\nbezoni Vifi-reton. Tio plej bone funkcias per Android 4.2 aŭ pli nova.\n\nPor uzi ĝin, malfermu la Vifiajn agordojn kaj serĉu 'Wi-Fi Direct' en la menuo.",
|
"wifiDirectDescriptionTopText": "Wi-Fi Direct povas esti uzata por konekti Android-aparatojn rekte sen\nbezoni Vifi-reton. Tio plej bone funkcias per Android 4.2 aŭ pli nova.\n\nPor uzi ĝin, malfermu la Vifiajn agordojn kaj serĉu 'Wi-Fi Direct' en la menuo.",
|
||||||
|
|
@ -690,17 +721,17 @@
|
||||||
},
|
},
|
||||||
"helpWindow": {
|
"helpWindow": {
|
||||||
"bombInfoText": "- Bombo -\nPli forta ol batoj, sed povas\nefektivigi gravan sindifekton.\nPor plej bonaj rezultoj, ĵetu al\nmalamiko antaŭ ol la drato finiĝas.",
|
"bombInfoText": "- Bombo -\nPli forta ol batoj, sed povas\nefektivigi gravan sindifekton.\nPor plej bonaj rezultoj, ĵetu al\nmalamiko antaŭ ol la drato finiĝas.",
|
||||||
"canHelpText": "BombSquad povas helpi.",
|
"canHelpText": "${APP_NAME} povas helpi.",
|
||||||
"controllersInfoText": "Vi povas ludi BombSquad kun amikoj en reto, aŭ vi povas ĉiuj ludi\nen la sama aparato se vi havas sufiĉe da regiloj. BombSquad subtenas\nmultajn regilojn; vi eĉ povas uzi vian poŝtelefonon kiel regilon\nper la senpaga aplikaĵo 'BombSquad Remote'.\nVidu Agordoj->Regiloj por pliaj informoj.",
|
"controllersInfoText": "Vi povas ludi ${APP_NAME} kun amikoj en reto, aŭ vi povas\nĉiuj ludi en la sama aparato se vi havas sufiĉe da regiloj.\n${APP_NAME} subtenas multajn regilojn; vi eĉ povas uzi vian\npoŝtelefonon kiel regilon per la senpaga aplikaĵo '${REMOTE_APP_NAME}'.\nVidu Agordoj->Regiloj por pliaj informoj.",
|
||||||
"controllersInfoTextFantasia": "Unu persono povas uzi la teleregilon kiel regilo, sed mi forte\nrekomendus uzi ludregtabulojn. Vi ankaŭ povas uzi viajn poŝ-\naparatojn per la senpaga aplikaĵo 'BombSquad Remote'.\nVidu 'Regiloj' sub 'Agordoj' por pliaj informoj.",
|
"controllersInfoTextFantasia": "Unu persono povas uzi la teleregilon kiel regilo, sed mi forte\nrekomendus uzi ludregtabulojn. Vi ankaŭ povas uzi viajn poŝ-\naparatojn per la senpaga aplikaĵo 'BombSquad Remote'.\nVidu 'Regiloj' sub 'Agordoj' por pliaj informoj.",
|
||||||
"controllersInfoTextMac": "Unu aŭ du ludantoj povas uzi la klavaron, sed BombSquad plej bonas kun\nludregtabuloj. BombSquad povas uzi USB-ludregtabulojn, PS3-regilojn, regilojn\nde XBox 360, Wii-regilojn kaj iOS/Android-aparatojn por regi rolulojn. Espereble\nvi havas kelkajn tiajn disponeblaj. Vidu 'Regiloj' sub 'Agordoj' por pliaj informoj.",
|
"controllersInfoTextMac": "Unu aŭ du ludantoj povas uzi la klavaron, sed BombSquad plej bonas kun\nludregtabuloj. BombSquad povas uzi USB-ludregtabulojn, PS3-regilojn, regilojn\nde XBox 360, Wii-regilojn kaj iOS/Android-aparatojn por regi rolulojn. Espereble\nvi havas kelkajn tiajn disponeblaj. Vidu 'Regiloj' sub 'Agordoj' por pliaj informoj.",
|
||||||
"controllersInfoTextOuya": "Vi povas uzi OUYA-regilon, PS3-regilojn, regilojn de XBox 360 kaj multajn\naliajn ludregtabulojn Bludentajn kaj USBajn ene de BombSquad.\nVi ankaŭ povas uzi iOS-aparatojn kaj Android por regi la ludon per la\nsenpaga aplikaĵo 'BombSquad Remote'. Vidu 'Regiloj' sub 'Agordoj' por\npliaj informoj.",
|
"controllersInfoTextOuya": "Vi povas uzi OUYA-regilon, PS3-regilojn, regilojn de XBox 360 kaj multajn\naliajn ludregtabulojn Bludentajn kaj USBajn ene de BombSquad.\nVi ankaŭ povas uzi iOS-aparatojn kaj Android por regi la ludon per la\nsenpaga aplikaĵo 'BombSquad Remote'. Vidu 'Regiloj' sub 'Agordoj' por\npliaj informoj.",
|
||||||
"controllersText": "Regiloj",
|
"controllersText": "Regiloj",
|
||||||
"controlsSubtitleText": "Via amikema BombSquad-rolulo havas kelkajn bazajn agojn:",
|
"controlsSubtitleText": "Via amikema ${APP_NAME}-rolulo havas kelkajn bazajn agojn:",
|
||||||
"controlsText": "Regumoj",
|
"controlsText": "Regumoj",
|
||||||
"devicesInfoText": "La VR-versio de BombSquad povas esti ludata en la reto kun la\nnormala versio, do ektrovu viajn aldonajn telefonojn, tabuletojn\nkaj komputilojn, kaj ekludu. Eĉ povas esti utile konekti normalan\nversion de la ludo al la VR-versio por permesi al homoj ekster vi\nkunvidi la agadon.",
|
"devicesInfoText": "La VR-versio de ${APP_NAME} povas esti ludata en la reto kun la\nnormala versio, do ektrovu viajn aldonajn telefonojn, tabuletojn\nkaj komputilojn, kaj ekludu. Eĉ povas esti utile konekti normalan\nversion de la ludo al la VR-versio por permesi al homoj ekster vi\nkunvidi la agadon.",
|
||||||
"devicesText": "Aparatoj",
|
"devicesText": "Aparatoj",
|
||||||
"friendsGoodText": "Bonas havi ilin. BombSquad plej amuzas kun pluraj ludantoj kaj\npovas subteni ĝis 8 samtempe, kio kondukas nin al:",
|
"friendsGoodText": "Bonas havi ilin. ${APP_NAME} plej amuzas kun pluraj ludantoj kaj\npovas subteni ĝis 8 samtempe, kio kondukas nin al:",
|
||||||
"friendsText": "Amikoj",
|
"friendsText": "Amikoj",
|
||||||
"jumpInfoText": "- Salti -\nSaltu por transiri truetojn,\npor ĵeti pli alten, kaj por\nesprimi ĝojsentojn.",
|
"jumpInfoText": "- Salti -\nSaltu por transiri truetojn,\npor ĵeti pli alten, kaj por\nesprimi ĝojsentojn.",
|
||||||
"orPunchingSomethingText": "Aŭ bati ion, ĵeti ion de deklivo, kaj eksplodigi ĝin survoje malsupren per gluanta bombo.",
|
"orPunchingSomethingText": "Aŭ bati ion, ĵeti ion de deklivo, kaj eksplodigi ĝin survoje malsupren per gluanta bombo.",
|
||||||
|
|
@ -728,9 +759,9 @@
|
||||||
"punchInfoText": "- Bato -\nBatoj pli damaĝas ju pli viaj\npugnoj moviĝas, do kuru kaj\nrotaciu kiel frenezulo.",
|
"punchInfoText": "- Bato -\nBatoj pli damaĝas ju pli viaj\npugnoj moviĝas, do kuru kaj\nrotaciu kiel frenezulo.",
|
||||||
"runInfoText": "- Kuri -\nPremadu AJNAN butonon por kuri. Flankbutonoj kaj pafkliko taŭgas se vi havas ilin.\nKurado helpas vin iri ien pli rapide, sed malpli facilas turni, do atentu deklivojn.",
|
"runInfoText": "- Kuri -\nPremadu AJNAN butonon por kuri. Flankbutonoj kaj pafkliko taŭgas se vi havas ilin.\nKurado helpas vin iri ien pli rapide, sed malpli facilas turni, do atentu deklivojn.",
|
||||||
"someDaysText": "Fojfoje vi simple sentas emon bati ion. Aŭ eksplodigi ion.",
|
"someDaysText": "Fojfoje vi simple sentas emon bati ion. Aŭ eksplodigi ion.",
|
||||||
"titleText": "Helpo de BombSquad",
|
"titleText": "Helpo de ${APP_NAME}",
|
||||||
"toGetTheMostText": "Por profiti plej de ĉi tiu ludo, necesos:",
|
"toGetTheMostText": "Por profiti plej de ĉi tiu ludo, necesos:",
|
||||||
"welcomeText": "Bonvenon al BombSquad!"
|
"welcomeText": "Bonvenon al ${APP_NAME}!"
|
||||||
},
|
},
|
||||||
"holdAnyButtonText": "<premadu ajnan butonon>",
|
"holdAnyButtonText": "<premadu ajnan butonon>",
|
||||||
"holdAnyKeyText": "<premadu ajnan klavon>",
|
"holdAnyKeyText": "<premadu ajnan klavon>",
|
||||||
|
|
@ -756,17 +787,20 @@
|
||||||
"corruptFileText": "Detektiĝis koruptaj dosieroj. Bonvolu provi reinstali, aŭ retpoŝtu ${EMAIL}",
|
"corruptFileText": "Detektiĝis koruptaj dosieroj. Bonvolu provi reinstali, aŭ retpoŝtu ${EMAIL}",
|
||||||
"errorPlayingMusicText": "Eraro ludante muzikon: ${MUSIC}",
|
"errorPlayingMusicText": "Eraro ludante muzikon: ${MUSIC}",
|
||||||
"errorResettingAchievementsText": "Ne eblas reigi enretajn atingojn; provu denove pli malfrue.",
|
"errorResettingAchievementsText": "Ne eblas reigi enretajn atingojn; provu denove pli malfrue.",
|
||||||
"hasMenuControlText": "${NAME} nun regas la menuon.",
|
"hasMenuControlText": "${NAME} regas la menuon.",
|
||||||
"incompatibleVersionHostText": "Gastiganto uzas alian version de la ludo.\nCertigu vin ke vi ambaŭ estu ĝisdataj kaj provu denove.",
|
"incompatibleVersionHostText": "Gastiganto uzas alian version de la ludo.\nCertigu vin ke vi ambaŭ estu ĝisdataj kaj provu denove.",
|
||||||
"incompatibleVersionPlayerText": "${NAME} uzas alian version de la ludo.\nCertigu vin ke vi ambaŭ estu ĝisdataj kaj provu denove.",
|
"incompatibleVersionPlayerText": "${NAME} uzas alian version de la ludo.\nCertigu vin ke vi ambaŭ estu ĝisdataj kaj provu denove.",
|
||||||
"invalidAddressErrorText": "Eraro: nevalida adreso.",
|
"invalidAddressErrorText": "Eraro: nevalida adreso.",
|
||||||
|
"invalidNameErrorText": "Eraro: nevalida nomo.",
|
||||||
|
"invalidPortErrorText": "Eraro: nevalida pordo.",
|
||||||
"invitationSentText": "Invito sendiĝis.",
|
"invitationSentText": "Invito sendiĝis.",
|
||||||
"invitationsSentText": "${COUNT} invitoj sendiĝis.",
|
"invitationsSentText": "${COUNT} invitoj sendiĝis.",
|
||||||
"joinedPartyInstructionsText": "Amiko aliĝis al via ludantaro.\nIru al 'Ekludi' por komenci ludon.",
|
"joinedPartyInstructionsText": "Iu aliĝis al via ludantaro.\nIru al 'Ekludi' por komenci ludon.",
|
||||||
"keyboardText": "Klavaro",
|
"keyboardText": "Klavaro",
|
||||||
"kickIdlePlayersKickedText": "${NAME} forpuŝiĝas pro neaktiveco.",
|
"kickIdlePlayersKickedText": "${NAME} forpuŝiĝas pro neaktiveco.",
|
||||||
"kickIdlePlayersWarning1Text": "${NAME} forpuŝiĝos post ${COUNT} sekundoj se ankoraŭ neaktiva.",
|
"kickIdlePlayersWarning1Text": "${NAME} forpuŝiĝos post ${COUNT} sekundoj se ankoraŭ neaktiva.",
|
||||||
"kickIdlePlayersWarning2Text": "(eblas malŝalti tion en Agordoj -> Por spertuloj)",
|
"kickIdlePlayersWarning2Text": "(eblas malŝalti tion en Agordoj -> Por spertuloj)",
|
||||||
|
"leftGameText": "Forlasis '${NAME}'.",
|
||||||
"leftPartyText": "Eliris el ludantaro de ${NAME}.",
|
"leftPartyText": "Eliris el ludantaro de ${NAME}.",
|
||||||
"noMusicFilesInFolderText": "Dosierujo ne enhavas muzikdosierojn.",
|
"noMusicFilesInFolderText": "Dosierujo ne enhavas muzikdosierojn.",
|
||||||
"playerJoinedPartyText": "${NAME} aliĝis al la ludantaro!",
|
"playerJoinedPartyText": "${NAME} aliĝis al la ludantaro!",
|
||||||
|
|
@ -822,9 +856,11 @@
|
||||||
"levelHighestScoresText": "Plej altaj poentoj en ${LEVEL}",
|
"levelHighestScoresText": "Plej altaj poentoj en ${LEVEL}",
|
||||||
"levelIsLockedText": "${LEVEL} estas ŝlosita.",
|
"levelIsLockedText": "${LEVEL} estas ŝlosita.",
|
||||||
"levelMustBeCompletedFirstText": "Unue necesas kompletigi ${LEVEL}.",
|
"levelMustBeCompletedFirstText": "Unue necesas kompletigi ${LEVEL}.",
|
||||||
|
"levelText": "Nivelo ${NUMBER}",
|
||||||
"levelUnlockedText": "Nivelo malŝlosita!",
|
"levelUnlockedText": "Nivelo malŝlosita!",
|
||||||
"livesBonusText": "Vivopremio",
|
"livesBonusText": "Vivopremio",
|
||||||
"loadingText": "ŝargas",
|
"loadingText": "ŝargas",
|
||||||
|
"macControllerSubsystemBothText": "Ambaŭ (ne rekomendita)",
|
||||||
"mainMenu": {
|
"mainMenu": {
|
||||||
"creditsText": "Dankdiroj",
|
"creditsText": "Dankdiroj",
|
||||||
"demoMenuText": "Montromenuo",
|
"demoMenuText": "Montromenuo",
|
||||||
|
|
@ -846,6 +882,8 @@
|
||||||
"mapSelectText": "Elektu...",
|
"mapSelectText": "Elektu...",
|
||||||
"mapSelectTitleText": "Mapoj de ${GAME}",
|
"mapSelectTitleText": "Mapoj de ${GAME}",
|
||||||
"mapText": "Mapo",
|
"mapText": "Mapo",
|
||||||
|
"maxPartySizeText": "Maksimuma grandeco de ludantaro",
|
||||||
|
"maxPlayersText": "Maksimumaj ludantoj",
|
||||||
"mostValuablePlayerText": "Plej valora ludanto",
|
"mostValuablePlayerText": "Plej valora ludanto",
|
||||||
"mostViolatedPlayerText": "Plej perfortita ludanto",
|
"mostViolatedPlayerText": "Plej perfortita ludanto",
|
||||||
"mostViolentPlayerText": "Plej perforta ludanto",
|
"mostViolentPlayerText": "Plej perforta ludanto",
|
||||||
|
|
@ -860,10 +898,12 @@
|
||||||
"nameScoresText": "${NAME} poentas!",
|
"nameScoresText": "${NAME} poentas!",
|
||||||
"nameSuicideKidFriendlyText": "${NAME} ging per ongeluk dood",
|
"nameSuicideKidFriendlyText": "${NAME} ging per ongeluk dood",
|
||||||
"nameSuicideText": "${NAME} mortigis sin.",
|
"nameSuicideText": "${NAME} mortigis sin.",
|
||||||
|
"nameText": "Nomo",
|
||||||
"nativeText": "Propra",
|
"nativeText": "Propra",
|
||||||
"newPersonalBestText": "Nova persona plejbono!",
|
"newPersonalBestText": "Nova persona plejbono!",
|
||||||
"newTestBuildAvailableText": "Nova testkonstruo haveblas! (${VERSION} konstruo ${BUILD}).\nEkhavu ĝin ĉe ${ADDRESS}",
|
"newTestBuildAvailableText": "Nova testkonstruo haveblas! (${VERSION} konstruo ${BUILD}).\nEkhavu ĝin ĉe ${ADDRESS}",
|
||||||
"newVersionAvailableText": "Nova versio de BombSquad estas havebla! (${VERSION})",
|
"newText": "Nova",
|
||||||
|
"newVersionAvailableText": "Nova versio de ${APP_NAME} estas havebla! (${VERSION})",
|
||||||
"nextLevelText": "Sekva nivelo",
|
"nextLevelText": "Sekva nivelo",
|
||||||
"noAchievementsRemainingText": "- neniom",
|
"noAchievementsRemainingText": "- neniom",
|
||||||
"noContinuesText": "(sen pluiroj)",
|
"noContinuesText": "(sen pluiroj)",
|
||||||
|
|
@ -877,15 +917,18 @@
|
||||||
"notEnoughPlayersRemainingText": "Ne sufiĉe da ludantoj restas; eliri kaj komenci novan ludon.",
|
"notEnoughPlayersRemainingText": "Ne sufiĉe da ludantoj restas; eliri kaj komenci novan ludon.",
|
||||||
"notEnoughPlayersText": "Vi bezonas almenaŭ ${COUNT} ludantojn por komenci ĉi tiun ludon!",
|
"notEnoughPlayersText": "Vi bezonas almenaŭ ${COUNT} ludantojn por komenci ĉi tiun ludon!",
|
||||||
"notNowText": "Ne nun",
|
"notNowText": "Ne nun",
|
||||||
"notSignedInErrorText": "Vi devas esti ensalutita en via konto por fari tion.",
|
"notSignedInErrorText": "Vi devas ensaluti por fari tion.",
|
||||||
"notSignedInText": "(ne ensalutita)",
|
"notSignedInGooglePlayErrorText": "Vi devas ensaluti per Google Play por fari tion.",
|
||||||
|
"notSignedInText": "ne ensalutita",
|
||||||
"nothingIsSelectedErrorText": "Nenio elektiĝis!",
|
"nothingIsSelectedErrorText": "Nenio elektiĝis!",
|
||||||
"numberText": "#${NUMBER}",
|
"numberText": "#${NUMBER}",
|
||||||
"offText": "Malŝaltite",
|
"offText": "Malŝaltite",
|
||||||
"okText": "Bone",
|
"okText": "Bone",
|
||||||
"onText": "Ŝaltite",
|
"onText": "Ŝaltite",
|
||||||
|
"oneMomentText": "Unu momenton...",
|
||||||
"onslaughtRespawnText": "${PLAYER} reviviĝos en ondo ${WAVE}",
|
"onslaughtRespawnText": "${PLAYER} reviviĝos en ondo ${WAVE}",
|
||||||
"orText": "${A} aŭ ${B}",
|
"orText": "${A} aŭ ${B}",
|
||||||
|
"otherText": "Aliaj...",
|
||||||
"outOfText": "(#${RANK} el ${ALL})",
|
"outOfText": "(#${RANK} el ${ALL})",
|
||||||
"ownFlagAtYourBaseWarning": "Via propra flago estu\nje via bazo por poenti!",
|
"ownFlagAtYourBaseWarning": "Via propra flago estu\nje via bazo por poenti!",
|
||||||
"packageModsEnabledErrorText": "Reta ludado ne estas permesata dum lokaj pakaĵaj modifikaĵoj estas aktivaj (vidu Agordoj->Por spertuloj)",
|
"packageModsEnabledErrorText": "Reta ludado ne estas permesata dum lokaj pakaĵaj modifikaĵoj estas aktivaj (vidu Agordoj->Por spertuloj)",
|
||||||
|
|
@ -917,6 +960,7 @@
|
||||||
},
|
},
|
||||||
"playerCountAbbreviatedText": "${COUNT}lud",
|
"playerCountAbbreviatedText": "${COUNT}lud",
|
||||||
"playerDelayedJoinText": "${PLAYER} eniros komence de la sekva ludo.",
|
"playerDelayedJoinText": "${PLAYER} eniros komence de la sekva ludo.",
|
||||||
|
"playerInfoText": "Informoj pri ludanto",
|
||||||
"playerLeftText": "${PLAYER} foriris de la ludo.",
|
"playerLeftText": "${PLAYER} foriris de la ludo.",
|
||||||
"playerLimitReachedText": "Ludanto-limo de ${COUNT} atingita; neniu plu aliĝu.",
|
"playerLimitReachedText": "Ludanto-limo de ${COUNT} atingita; neniu plu aliĝu.",
|
||||||
"playerLimitReachedUnlockProText": "Ĝisdatigu al \"${PRO}\" en la vendejo por ludi kun pli ol ${COUNT} ludantoj.",
|
"playerLimitReachedUnlockProText": "Ĝisdatigu al \"${PRO}\" en la vendejo por ludi kun pli ol ${COUNT} ludantoj.",
|
||||||
|
|
@ -925,15 +969,18 @@
|
||||||
"deleteButtonText": "Forviŝi\nprofilon",
|
"deleteButtonText": "Forviŝi\nprofilon",
|
||||||
"deleteConfirmText": "Ĉu forviŝi '${PROFILE}'?",
|
"deleteConfirmText": "Ĉu forviŝi '${PROFILE}'?",
|
||||||
"editButtonText": "Redakti\nprofilon",
|
"editButtonText": "Redakti\nprofilon",
|
||||||
"explanationText": "(krei adaptitajn nomojn k aperojn por ludantoj en ĉi tiu aparato)",
|
"explanationText": "(adaptitaj ludantnomoj kaj aperojn por ĉi tiu konto)",
|
||||||
"newButtonText": "Nova\nprofilo",
|
"newButtonText": "Nova\nprofilo",
|
||||||
"titleText": "Ludanto-profiloj"
|
"titleText": "Ludanto-profiloj"
|
||||||
},
|
},
|
||||||
"playerText": "Ludanto",
|
"playerText": "Ludanto",
|
||||||
"playlistNoValidGamesErrorText": "Ĉi tiu ludlisto ne enhavas validajn malŝlositajn ludojn.",
|
"playlistNoValidGamesErrorText": "Ĉi tiu ludlisto ne enhavas validajn malŝlositajn ludojn.",
|
||||||
"playlistNotFoundText": "ludlisto ne troviĝis",
|
"playlistNotFoundText": "ludlisto ne troviĝis",
|
||||||
|
"playlistText": "Ludlisto",
|
||||||
"playlistsText": "Ludlistoj",
|
"playlistsText": "Ludlistoj",
|
||||||
"pleaseRateText": "Se vi ŝatas BombSquad, bonvolu konsideri momenton\npor rankumi ĝin aŭ verki prijuĝon. Tio donos utilan\nretrokuplon kaj helpos subteni pluan disvolviĝon.\n\ndankon!\n-eric",
|
"pleaseRateText": "Se vi ŝatas ${APP_NAME}, bonvolu konsideri momenton\npor rankumi ĝin aŭ verki prijuĝon. Tio donos utilan\nretrokuplon kaj helpos subteni pluan disvolviĝon.\n\nDankon!\n- Eriko",
|
||||||
|
"pleaseWaitText": "Bonvolu atendi...",
|
||||||
|
"pluginsText": "Kromaĵoj",
|
||||||
"pressAnyButtonPlayAgainText": "Premu ajnan butonon por reekludi...",
|
"pressAnyButtonPlayAgainText": "Premu ajnan butonon por reekludi...",
|
||||||
"pressAnyButtonText": "Premu ajnan butonon por pluiri...",
|
"pressAnyButtonText": "Premu ajnan butonon por pluiri...",
|
||||||
"pressAnyButtonToJoinText": "premu ajnan butonon por aliĝi...",
|
"pressAnyButtonToJoinText": "premu ajnan butonon por aliĝi...",
|
||||||
|
|
@ -951,12 +998,12 @@
|
||||||
"codeTextDescription": "Promocia kodo",
|
"codeTextDescription": "Promocia kodo",
|
||||||
"enterText": "Enigi"
|
"enterText": "Enigi"
|
||||||
},
|
},
|
||||||
"promoSubmitErrorText": "Eraro aplikante vian promocian kodon; kontrolu vian retkonekton",
|
"promoSubmitErrorText": "Eraro aplikante vian kodon; kontrolu vian retkonekton",
|
||||||
"ps3ControllersWindow": {
|
"ps3ControllersWindow": {
|
||||||
"macInstructionsText": "Malŝaltu la energion malantaŭe de via PS3, certigu ke Bludento\nestu aktiva en via Makintoŝo, tiam konektu vian regilon al via\nMakintoŝo per USB-kablo por parigi ilin. De tiam, vi povas uzi la\nhejmbutonon de la regilo por konekti ĝin kun via Makintoŝo ĉu\ndrate (USB) ĉu sendrate (Bludento).\n\nEn kelkaj Makintoŝo la sistemo povas peti vin enigi paskodon por\nparigi. Se tio okazas, jen la sekva klarigo aŭ guglu por helpo.\n\n\n\n\nPS3-regiloj konektitaj sendrate aperu en la aparatlisto en Sistem-\npreferoj->Bludento. Povas esti necese forigi ilin de tiu listo por\nuzi ilin denove kun via PS3.\n\nAnkaŭ certiĝu diskonekti ilin de Bludento kiam ne en uzo, alikaze\nmalŝparante la bateriojn.\n\nBludento povu trakti ĝis 7 konektitajn aparatojn, sed via sperto\npovus esti alia.",
|
"macInstructionsText": "Malŝaltu la energion malantaŭe de via PS3, certigu ke Bludento\nestu aktiva en via Makintoŝo, tiam konektu vian regilon al via\nMakintoŝo per USB-kablo por parigi ilin. De tiam, vi povas uzi la\nhejmbutonon de la regilo por konekti ĝin kun via Makintoŝo ĉu\ndrate (USB) ĉu sendrate (Bludento).\n\nEn kelkaj Makintoŝo la sistemo povas peti vin enigi paskodon por\nparigi. Se tio okazas, jen la sekva klarigo aŭ guglu por helpo.\n\n\n\n\nPS3-regiloj konektitaj sendrate aperu en la aparatlisto en Sistem-\npreferoj->Bludento. Povas esti necese forigi ilin de tiu listo por\nuzi ilin denove kun via PS3.\n\nAnkaŭ certiĝu diskonekti ilin de Bludento kiam ne en uzo, alikaze\nmalŝparante la bateriojn.\n\nBludento povu trakti ĝis 7 konektitajn aparatojn, sed via sperto\npovus esti alia.",
|
||||||
"ouyaInstructionsText": "Por uzi PS3-regilon kun via OUYA, simple konektu ĝin per USB-kablo unufoje\npor parigi ĝin. Farante tion viaj aliaj regiloj povas malŝaltiĝi, do tiam restartu\nvian OUYA kaj malligu la USB-kablon.\n\nDe tiam sufiĉu uzi la regilan hejmbutonon por konekti ĝin sendrate. Post kiam\nvi ludis, premu la HEJM-butonon dum 10 sekundoj por malŝalti la regilon; alie\nĝi povas resti ŝaltita, tiel malŝparante bateriojn.",
|
"ouyaInstructionsText": "Por uzi PS3-regilon kun via OUYA, simple konektu ĝin per USB-kablo unufoje\npor parigi ĝin. Farante tion viaj aliaj regiloj povas malŝaltiĝi, do tiam restartu\nvian OUYA kaj malligu la USB-kablon.\n\nDe tiam sufiĉu uzi la regilan hejmbutonon por konekti ĝin sendrate. Post kiam\nvi ludis, premu la HEJM-butonon dum 10 sekundoj por malŝalti la regilon; alie\nĝi povas resti ŝaltita, tiel malŝparante bateriojn.",
|
||||||
"pairingTutorialText": "klariga video por parigi",
|
"pairingTutorialText": "klariga video por parigi",
|
||||||
"titleText": "Uzi PS3-regilojn kun BombSquad:"
|
"titleText": "Uzi PS3-regilojn kun ${APP_NAME}:"
|
||||||
},
|
},
|
||||||
"publicBetaText": "PUBLIKA BETA",
|
"publicBetaText": "PUBLIKA BETA",
|
||||||
"punchBoldText": "BATO",
|
"punchBoldText": "BATO",
|
||||||
|
|
@ -964,7 +1011,7 @@
|
||||||
"purchaseForText": "Aĉetu por ${PRICE}",
|
"purchaseForText": "Aĉetu por ${PRICE}",
|
||||||
"purchaseGameText": "Aĉeti ludon",
|
"purchaseGameText": "Aĉeti ludon",
|
||||||
"purchasingText": "Aĉetiĝas...",
|
"purchasingText": "Aĉetiĝas...",
|
||||||
"quitGameText": "Ĉu fermi BombSquad?",
|
"quitGameText": "Ĉu fermi ${APP_NAME}?",
|
||||||
"quittingIn5SecondsText": "Fermos en 5 sekundoj...",
|
"quittingIn5SecondsText": "Fermos en 5 sekundoj...",
|
||||||
"randomText": "Hazarde",
|
"randomText": "Hazarde",
|
||||||
"rankText": "Ranko",
|
"rankText": "Ranko",
|
||||||
|
|
@ -973,6 +1020,9 @@
|
||||||
"readyText": "preta",
|
"readyText": "preta",
|
||||||
"recentText": "Lastatempaj",
|
"recentText": "Lastatempaj",
|
||||||
"remainingInTrialText": "restas en elprovo",
|
"remainingInTrialText": "restas en elprovo",
|
||||||
|
"remote_app": {
|
||||||
|
"start": "Komenci"
|
||||||
|
},
|
||||||
"removeInGameAdsText": "Malŝlosu \"${PRO}\" en la vendejo por forigi enludajn reklamojn.",
|
"removeInGameAdsText": "Malŝlosu \"${PRO}\" en la vendejo por forigi enludajn reklamojn.",
|
||||||
"renameText": "Renomi",
|
"renameText": "Renomi",
|
||||||
"replayEndText": "Fini remontron",
|
"replayEndText": "Fini remontron",
|
||||||
|
|
@ -1018,9 +1068,9 @@
|
||||||
"benchmarksText": "Kompartestoj kaj streĉtestoj",
|
"benchmarksText": "Kompartestoj kaj streĉtestoj",
|
||||||
"enablePackageModsDescriptionText": "(ebligas aldonajn modifikajn kapablojn sed malebligas retludadon)",
|
"enablePackageModsDescriptionText": "(ebligas aldonajn modifikajn kapablojn sed malebligas retludadon)",
|
||||||
"enablePackageModsText": "Ebligi lokajn pakaĵajn modifikaĵojn",
|
"enablePackageModsText": "Ebligi lokajn pakaĵajn modifikaĵojn",
|
||||||
"enterPromoCodeText": "Enigu promocian kodon",
|
"enterPromoCodeText": "Enigu kodon",
|
||||||
"forTestingText": "Notu: ĉi tiuj valoroj estas nur por testado kaj perdiĝos je fermiĝo de la aplikaĵo.",
|
"forTestingText": "Notu: ĉi tiuj valoroj estas nur por testado kaj perdiĝos je fermiĝo de la aplikaĵo.",
|
||||||
"helpTranslateText": "La neanglaj tradukoj de BombSquad nur eblas pro la komunumo.\nSe vi volas kontribui aŭ korekti tradukon, sekvu la suban\nligilon. Jam antaŭe dankon!",
|
"helpTranslateText": "La neanglaj tradukoj de ${APP_NAME} nur eblas pro\nla komunumo. Se vi volas kontribui aŭ korekti tradukon,\nsekvu la suban ligilon. Jam antaŭe dankon!",
|
||||||
"kickIdlePlayersText": "Forpuŝi neaktivajn ludantojn",
|
"kickIdlePlayersText": "Forpuŝi neaktivajn ludantojn",
|
||||||
"kidFriendlyModeText": "Infanamika modo (malpli da perforto ktp)",
|
"kidFriendlyModeText": "Infanamika modo (malpli da perforto ktp)",
|
||||||
"languageText": "Lingvo",
|
"languageText": "Lingvo",
|
||||||
|
|
@ -1031,13 +1081,15 @@
|
||||||
"showPlayerNamesText": "Montri ludantonomojn",
|
"showPlayerNamesText": "Montri ludantonomojn",
|
||||||
"showUserModsText": "Montri modifikaĵujon",
|
"showUserModsText": "Montri modifikaĵujon",
|
||||||
"titleText": "Por spertuloj",
|
"titleText": "Por spertuloj",
|
||||||
"translationEditorButtonText": "BombSquad traduko-redaktilo",
|
"translationEditorButtonText": "${APP_NAME} traduko-redaktilo",
|
||||||
"translationFetchErrorText": "tradukstato ne haveblas",
|
"translationFetchErrorText": "tradukstato ne haveblas",
|
||||||
"translationFetchingStatusText": "kontrolante staton de traduko...",
|
"translationFetchingStatusText": "kontrolante staton de traduko...",
|
||||||
"translationNoUpdateNeededText": "la nuna lingvo estas ĝisdata, hura!",
|
"translationNoUpdateNeededText": "la nuna lingvo estas ĝisdata, hura!",
|
||||||
"translationUpdateNeededText": "** la nuna lingvo bezonas ĝisdatigojn!! **",
|
"translationUpdateNeededText": "** la nuna lingvo bezonas ĝisdatigojn!! **",
|
||||||
"vrTestingText": "Testo de VR"
|
"vrTestingText": "Testo de VR"
|
||||||
},
|
},
|
||||||
|
"shareText": "Kunhavigi",
|
||||||
|
"showText": "Montri",
|
||||||
"signInWithGameCenterText": "Uzu la Ludcentran aplikaĵon por ensaluti.",
|
"signInWithGameCenterText": "Uzu la Ludcentran aplikaĵon por ensaluti.",
|
||||||
"singleGamePlaylistNameText": "Nur ${GAME}",
|
"singleGamePlaylistNameText": "Nur ${GAME}",
|
||||||
"singlePlayerCountText": "1 ludanto",
|
"singlePlayerCountText": "1 ludanto",
|
||||||
|
|
@ -1065,16 +1117,17 @@
|
||||||
"Victory": "Finpoenta ekrano"
|
"Victory": "Finpoenta ekrano"
|
||||||
},
|
},
|
||||||
"spaceKeyText": "spaco",
|
"spaceKeyText": "spaco",
|
||||||
|
"statsText": "Statistiko",
|
||||||
"store": {
|
"store": {
|
||||||
"alreadyOwnText": "Vi jam posedas ${NAME}!",
|
"alreadyOwnText": "Vi jam posedas ${NAME}!",
|
||||||
"bombSquadProDescriptionText": "Duobligos biletojn gajnitajn enlude\n\nForigos enludan reklamon\n\nInkluzivas ${COUNT} aldonajn biletojn\n\n+${PERCENT}% aldone en ligaj poentoj\n\nMalŝlosos nivelojn '${INF_ONSLAUGHT}'\n kaj '${INF_RUNAROUND}' (kunlaborajn)",
|
"bombSquadProDescriptionText": "Duobligos biletojn gajnitajn enlude\n\nForigos enludan reklamon\n\nInkluzivas ${COUNT} aldonajn biletojn\n\n+${PERCENT}% aldone en ligaj poentoj\n\nMalŝlosos nivelojn '${INF_ONSLAUGHT}'\n kaj '${INF_RUNAROUND}' (kunlaborajn)",
|
||||||
"bombSquadProFeaturesText": "Avantaĝoj:",
|
"bombSquadProFeaturesText": "Avantaĝoj:",
|
||||||
"bombSquadProNameText": "BombSquad Pro",
|
"bombSquadProNameText": "${APP_NAME} Pro",
|
||||||
"buyText": "Aĉeti",
|
"buyText": "Aĉeti",
|
||||||
"charactersText": "Roluloj",
|
"charactersText": "Roluloj",
|
||||||
"comingSoonText": "Baldaŭ...",
|
"comingSoonText": "Baldaŭ...",
|
||||||
"extrasText": "Aldonaĵoj",
|
"extrasText": "Aldonaĵoj",
|
||||||
"freeBombSquadProText": "BombSquad nun estas senpaga, sed ĉar vi origine aĉetis ĝin vi ricevas\nla ĝisdatigon BombSquad Pro kaj ${COUNT} biletojn kiel dankomontro.\nĜuu la novajn funkciojn, kaj dankon pro via subteno!\n-Eric",
|
"freeBombSquadProText": "BombSquad nun estas senpaga, sed ĉar vi origine aĉetis ĝin vi ricevas\nla ĝisdatigon BombSquad Pro kaj ${COUNT} biletojn kiel dankomontro.\nĜuu la novajn funkciojn, kaj dankon pro via subteno!\n- Eriko",
|
||||||
"gameUpgradesText": "Ludaj ĝisdatigoj",
|
"gameUpgradesText": "Ludaj ĝisdatigoj",
|
||||||
"getCoinsText": "Ekhavi monerojn",
|
"getCoinsText": "Ekhavi monerojn",
|
||||||
"holidaySpecialText": "Feria specialaĵo",
|
"holidaySpecialText": "Feria specialaĵo",
|
||||||
|
|
@ -1094,6 +1147,7 @@
|
||||||
"saleText": "RABATE",
|
"saleText": "RABATE",
|
||||||
"searchText": "Serĉi",
|
"searchText": "Serĉi",
|
||||||
"teamsFreeForAllGamesText": "Ludoj teamaj / Ĉiuj kune",
|
"teamsFreeForAllGamesText": "Ludoj teamaj / Ĉiuj kune",
|
||||||
|
"upgradeQuestionText": "Ĉu ĝisdatigi?",
|
||||||
"winterSpecialText": "Vintra specialaĵo",
|
"winterSpecialText": "Vintra specialaĵo",
|
||||||
"youOwnThisText": "- jam havas tion -"
|
"youOwnThisText": "- jam havas tion -"
|
||||||
},
|
},
|
||||||
|
|
@ -1133,6 +1187,7 @@
|
||||||
"tournamentsText": "Turniroj",
|
"tournamentsText": "Turniroj",
|
||||||
"translations": {
|
"translations": {
|
||||||
"characterNames": {
|
"characterNames": {
|
||||||
|
"B-9000": "B-9000",
|
||||||
"Bernard": "Bernardo",
|
"Bernard": "Bernardo",
|
||||||
"Bones": "Ĝisostulo",
|
"Bones": "Ĝisostulo",
|
||||||
"Santa Claus": "Sankta Nikolao"
|
"Santa Claus": "Sankta Nikolao"
|
||||||
|
|
@ -1234,7 +1289,10 @@
|
||||||
"Keyboard P2": "Klavaro Lud2"
|
"Keyboard P2": "Klavaro Lud2"
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"Chinese": "Ĉina",
|
"Arabic": "Araba",
|
||||||
|
"Belarussian": "Belorusa",
|
||||||
|
"Chinese": "Ĉina simpligita",
|
||||||
|
"ChineseTraditional": "Ĉina tradicia",
|
||||||
"Croatian": "Kroata",
|
"Croatian": "Kroata",
|
||||||
"Czech": "Ĉeĥa",
|
"Czech": "Ĉeĥa",
|
||||||
"Danish": "Dana",
|
"Danish": "Dana",
|
||||||
|
|
@ -1245,15 +1303,28 @@
|
||||||
"French": "Franca",
|
"French": "Franca",
|
||||||
"German": "Germana",
|
"German": "Germana",
|
||||||
"Gibberish": "Sensenca",
|
"Gibberish": "Sensenca",
|
||||||
|
"Greek": "Greka",
|
||||||
|
"Hindi": "Hindia",
|
||||||
"Hungarian": "Hungara",
|
"Hungarian": "Hungara",
|
||||||
|
"Indonesian": "Indonezia",
|
||||||
"Italian": "Itala",
|
"Italian": "Itala",
|
||||||
"Japanese": "Japana",
|
"Japanese": "Japana",
|
||||||
"Korean": "Korea",
|
"Korean": "Korea",
|
||||||
|
"Persian": "Persa",
|
||||||
"Polish": "Pola",
|
"Polish": "Pola",
|
||||||
"Portuguese": "Portugala",
|
"Portuguese": "Portugala",
|
||||||
|
"Romanian": "Rumana",
|
||||||
"Russian": "Rusa",
|
"Russian": "Rusa",
|
||||||
|
"Serbian": "Serba",
|
||||||
|
"Slovak": "Slovaka",
|
||||||
"Spanish": "Hispana",
|
"Spanish": "Hispana",
|
||||||
"Swedish": "Sveda"
|
"Swedish": "Sveda",
|
||||||
|
"Tamil": "Tamila",
|
||||||
|
"Thai": "Tajlanda",
|
||||||
|
"Turkish": "Turka",
|
||||||
|
"Ukrainian": "Ukraina",
|
||||||
|
"Venetian": "Venecia",
|
||||||
|
"Vietnamese": "Vjetnama"
|
||||||
},
|
},
|
||||||
"leagueNames": {
|
"leagueNames": {
|
||||||
"Bronze": "Bronza",
|
"Bronze": "Bronza",
|
||||||
|
|
@ -1298,6 +1369,7 @@
|
||||||
"serverResponses": {
|
"serverResponses": {
|
||||||
"BombSquad Pro unlocked!": "BombSquad Pro malŝlosiĝis!",
|
"BombSquad Pro unlocked!": "BombSquad Pro malŝlosiĝis!",
|
||||||
"Entering tournament...": "Enirante turniron...",
|
"Entering tournament...": "Enirante turniron...",
|
||||||
|
"Invalid code.": "Nevalida kodo.",
|
||||||
"Invalid promo code.": "Nevalida promocia kodo.",
|
"Invalid promo code.": "Nevalida promocia kodo.",
|
||||||
"Invalid purchase.": "Nevalida aĉeto.",
|
"Invalid purchase.": "Nevalida aĉeto.",
|
||||||
"Max number of playlists reached.": "Atingiĝis maksimumo da ludlistoj.",
|
"Max number of playlists reached.": "Atingiĝis maksimumo da ludlistoj.",
|
||||||
|
|
@ -1308,6 +1380,7 @@
|
||||||
"This requires version ${VERSION} or newer.": "Ĉi tio petas version ${VERSION} aŭ pli nova.",
|
"This requires version ${VERSION} or newer.": "Ĉi tio petas version ${VERSION} aŭ pli nova.",
|
||||||
"You already own this!": "Vi jam posedas ĉi tion!",
|
"You already own this!": "Vi jam posedas ĉi tion!",
|
||||||
"You don't have enough tickets for this!": "Vi ne havas sufiĉe da biletoj por ĉi tio!",
|
"You don't have enough tickets for this!": "Vi ne havas sufiĉe da biletoj por ĉi tio!",
|
||||||
|
"You don't own that.": "Vi ne posedas tion.",
|
||||||
"You got ${COUNT} tickets!": "Vi havas ${COUNT} biletojn!",
|
"You got ${COUNT} tickets!": "Vi havas ${COUNT} biletojn!",
|
||||||
"You got a ${ITEM}!": "Vi havas ${ITEM}!",
|
"You got a ${ITEM}!": "Vi havas ${ITEM}!",
|
||||||
"You have been promoted to a new league; congratulations!": "Vi promoviĝis al nova ligo; gratulojn!",
|
"You have been promoted to a new league; congratulations!": "Vi promoviĝis al nova ligo; gratulojn!",
|
||||||
|
|
@ -1415,9 +1488,9 @@
|
||||||
"tutorial": {
|
"tutorial": {
|
||||||
"cpuBenchmarkText": "Rapidege irante tra la klarigo (precipe por testi la rapidecon de CPU)",
|
"cpuBenchmarkText": "Rapidege irante tra la klarigo (precipe por testi la rapidecon de CPU)",
|
||||||
"phrase01Text": "Saluton!",
|
"phrase01Text": "Saluton!",
|
||||||
"phrase02Text": "Bonvenon al BombSquad!",
|
"phrase02Text": "Bonvenon al ${APP_NAME}!",
|
||||||
"phrase03Text": "Jen kelkaj konsiloj por regi vian rolulon:",
|
"phrase03Text": "Jen kelkaj konsiloj por regi vian rolulon:",
|
||||||
"phrase04Text": "Multaj aferoj en BombSquad estas bazitaj je FIZIKO.",
|
"phrase04Text": "Multaj aferoj en ${APP_NAME} estas bazitaj je FIZIKO.",
|
||||||
"phrase05Text": "Ekzemple, se vi batas,...",
|
"phrase05Text": "Ekzemple, se vi batas,...",
|
||||||
"phrase06Text": "...damaĝo estas bazita je la rapideco de viaj pugnoj.",
|
"phrase06Text": "...damaĝo estas bazita je la rapideco de viaj pugnoj.",
|
||||||
"phrase07Text": "Ĉu vi vidis? Ni ne movis, do tio apenaŭ damaĝis al ${NAME}",
|
"phrase07Text": "Ĉu vi vidis? Ni ne movis, do tio apenaŭ damaĝis al ${NAME}",
|
||||||
|
|
@ -1461,6 +1534,7 @@
|
||||||
"upFirstText": "Venos unue:",
|
"upFirstText": "Venos unue:",
|
||||||
"upNextText": "Venos poste en ludo ${COUNT}:",
|
"upNextText": "Venos poste en ludo ${COUNT}:",
|
||||||
"updatingAccountText": "Ĝisdatigante vian konton...",
|
"updatingAccountText": "Ĝisdatigante vian konton...",
|
||||||
|
"upgradeText": "Ĝisdatigi",
|
||||||
"upgradeToPlayText": "Malŝlosu \"${PRO}\" en la enluda vendejo por ludi ĉi tion.",
|
"upgradeToPlayText": "Malŝlosu \"${PRO}\" en la enluda vendejo por ludi ĉi tion.",
|
||||||
"useDefaultText": "Uzi ekvaloron",
|
"useDefaultText": "Uzi ekvaloron",
|
||||||
"usesExternalControllerText": "Ĉi tiu ludo uzas eksteran regilon por enigo.",
|
"usesExternalControllerText": "Ĉi tiu ludo uzas eksteran regilon por enigo.",
|
||||||
|
|
@ -1519,7 +1593,7 @@
|
||||||
"macInstructions2Text": "Por uzi regilojn sendrate, vi ankaŭ bezonos la ricevilon kiu\nvenas kun 'Xbox 360 Wireless Controller for Windows'.\nUnu ricevilo permesas konekti ĝis 4 regilojn.\n\nGrave: riceviloj de ekstera deveno ne funkcios kun ĉi tiu pelilo;\ncertigu vin ke la ricevilo diras 'Microsoft' kaj ne 'XBOX 360'.\nMicrosoft ne plu vendas ĉi tiujn dise, do vi bezonos ekhavi tiun\nkiu venas kune kun la regilo aŭ serĉi per vendaj retejoj kiel eBay.\n\nSe vi trovas ĉi tion utila, bonvolu konsideri mondonon al la pelila\nprogramisto per lia retejo.",
|
"macInstructions2Text": "Por uzi regilojn sendrate, vi ankaŭ bezonos la ricevilon kiu\nvenas kun 'Xbox 360 Wireless Controller for Windows'.\nUnu ricevilo permesas konekti ĝis 4 regilojn.\n\nGrave: riceviloj de ekstera deveno ne funkcios kun ĉi tiu pelilo;\ncertigu vin ke la ricevilo diras 'Microsoft' kaj ne 'XBOX 360'.\nMicrosoft ne plu vendas ĉi tiujn dise, do vi bezonos ekhavi tiun\nkiu venas kune kun la regilo aŭ serĉi per vendaj retejoj kiel eBay.\n\nSe vi trovas ĉi tion utila, bonvolu konsideri mondonon al la pelila\nprogramisto per lia retejo.",
|
||||||
"macInstructionsText": "Por uzi la regilojn Xbox 360, vi devas instali la pelilon\npor Makintoŝo havebla je la malsupra ligilo.\nĜi funkcias kaj por drataj kaj sendrataj regiloj.",
|
"macInstructionsText": "Por uzi la regilojn Xbox 360, vi devas instali la pelilon\npor Makintoŝo havebla je la malsupra ligilo.\nĜi funkcias kaj por drataj kaj sendrataj regiloj.",
|
||||||
"ouyaInstructionsText": "Por uzi dratajn regilojn de Xbox 360 kun BombSquad, simple\nkonektu ilin al la USB-eniro de via aparato. Vi povas uzi USB-nabon\npor konekti al pluraj regiloj.\n\nPor uzi sendratajn regilojn, vi bezonas sendratan ricevilon,\nhaveblan kiel parto de la pakaĵo \"Xbox 360 wireless Controller\nfor Windows\" aŭ vendite dise. Ĉiu ricevilo eniras USB-pordon kaj\npermesas al vi konekti ĝis 4 sendratajn regilojn.",
|
"ouyaInstructionsText": "Por uzi dratajn regilojn de Xbox 360 kun BombSquad, simple\nkonektu ilin al la USB-eniro de via aparato. Vi povas uzi USB-nabon\npor konekti al pluraj regiloj.\n\nPor uzi sendratajn regilojn, vi bezonas sendratan ricevilon,\nhaveblan kiel parto de la pakaĵo \"Xbox 360 wireless Controller\nfor Windows\" aŭ vendite dise. Ĉiu ricevilo eniras USB-pordon kaj\npermesas al vi konekti ĝis 4 sendratajn regilojn.",
|
||||||
"titleText": "Uzi regilojn de Xbox 360 kun BombSquad:"
|
"titleText": "Uzi regilojn de Xbox 360 kun ${APP_NAME}:"
|
||||||
},
|
},
|
||||||
"yesAllowText": "Jes, permesu!",
|
"yesAllowText": "Jes, permesu!",
|
||||||
"yourBestScoresText": "Viaj plej bonaj poentoj",
|
"yourBestScoresText": "Viaj plej bonaj poentoj",
|
||||||
|
|
|
||||||
1860
dist/ba_data/data/languages/filipino.json
vendored
Normal file
1860
dist/ba_data/data/languages/filipino.json
vendored
Normal file
File diff suppressed because it is too large
Load diff
6
dist/ba_data/data/languages/french.json
vendored
6
dist/ba_data/data/languages/french.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Connectez-vous avec Google Play",
|
"signInWithGooglePlayText": "Connectez-vous avec Google Play",
|
||||||
"signInWithTestAccountInfoText": "(ancien compte; utilisez les comptes de cet appareil pour les prochaines fois)",
|
"signInWithTestAccountInfoText": "(ancien compte; utilisez les comptes de cet appareil pour les prochaines fois)",
|
||||||
"signInWithTestAccountText": "Connectez-vous avec un compte test",
|
"signInWithTestAccountText": "Connectez-vous avec un compte test",
|
||||||
|
"signInWithV2InfoText": "(un compte qui fonctionne sur toutes les plateformes)",
|
||||||
|
"signInWithV2Text": "Connectez-vous avec un compte Bombsquad",
|
||||||
"signOutText": "Se déconnecter",
|
"signOutText": "Se déconnecter",
|
||||||
"signingInText": "Connexion...",
|
"signingInText": "Connexion...",
|
||||||
"signingOutText": "Déconnexion...",
|
"signingOutText": "Déconnexion...",
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
"titleText": "Compte",
|
"titleText": "Compte",
|
||||||
"unlinkAccountsInstructionsText": "Sélectionnez un compte à délier",
|
"unlinkAccountsInstructionsText": "Sélectionnez un compte à délier",
|
||||||
"unlinkAccountsText": "Délier des comptes",
|
"unlinkAccountsText": "Délier des comptes",
|
||||||
|
"v2LinkInstructionsText": "Utiliser ce lien pour créer un compte ou se connecter.",
|
||||||
"viaAccount": "(via le compte ${NAME})",
|
"viaAccount": "(via le compte ${NAME})",
|
||||||
"youAreLoggedInAsText": "Vous êtes connecté en temps que :",
|
"youAreLoggedInAsText": "Vous êtes connecté en temps que :",
|
||||||
"youAreSignedInAsText": "Vous êtes connecté(e) en tant que:"
|
"youAreSignedInAsText": "Vous êtes connecté(e) en tant que:"
|
||||||
|
|
@ -1592,6 +1595,7 @@
|
||||||
"Dutch": "Néerlandais",
|
"Dutch": "Néerlandais",
|
||||||
"English": "Anglais",
|
"English": "Anglais",
|
||||||
"Esperanto": "Espéranto",
|
"Esperanto": "Espéranto",
|
||||||
|
"Filipino": "Philippin",
|
||||||
"Finnish": "Finnois",
|
"Finnish": "Finnois",
|
||||||
"French": "Français",
|
"French": "Français",
|
||||||
"German": "Allemand",
|
"German": "Allemand",
|
||||||
|
|
@ -1612,6 +1616,7 @@
|
||||||
"Slovak": "Slovaque",
|
"Slovak": "Slovaque",
|
||||||
"Spanish": "Espagnol",
|
"Spanish": "Espagnol",
|
||||||
"Swedish": "Suédois",
|
"Swedish": "Suédois",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Thaïlandais",
|
"Thai": "Thaïlandais",
|
||||||
"Turkish": "Turc",
|
"Turkish": "Turc",
|
||||||
"Ukrainian": "Ukrainien",
|
"Ukrainian": "Ukrainien",
|
||||||
|
|
@ -1951,6 +1956,7 @@
|
||||||
"getDriverText": "Obtenez les pilotes",
|
"getDriverText": "Obtenez les pilotes",
|
||||||
"macInstructions2Text": "Pour utiliser les contrôleurs sans-fils, vous avez besoin du récepteur \nqui vient avec le 'Contrôleur Xbox 360 Sans-Fils pour Windows'.\nUn seul récepteur est suffisante pour jusqu'à 4 contrôleurs.\n\nImportant: les recepteurs 3e-Party ne fonctionneront pas avec\nce pilote; soyez sûr que votre récepteur a 'Microsoft' écrit,\npas 'Xbox 360'. Microsoft ne vend plus séparément, alors vous \ndevez acheter avec le ontrôleur ou cherchez sur eBay.\n\nSi vous avez trouvé ceci utile, considerez à contribuer au développeur\ndu pilote sur son site-web.",
|
"macInstructions2Text": "Pour utiliser les contrôleurs sans-fils, vous avez besoin du récepteur \nqui vient avec le 'Contrôleur Xbox 360 Sans-Fils pour Windows'.\nUn seul récepteur est suffisante pour jusqu'à 4 contrôleurs.\n\nImportant: les recepteurs 3e-Party ne fonctionneront pas avec\nce pilote; soyez sûr que votre récepteur a 'Microsoft' écrit,\npas 'Xbox 360'. Microsoft ne vend plus séparément, alors vous \ndevez acheter avec le ontrôleur ou cherchez sur eBay.\n\nSi vous avez trouvé ceci utile, considerez à contribuer au développeur\ndu pilote sur son site-web.",
|
||||||
"macInstructionsText": "Pour utiliser les contrôleurs Xbox 360, vous devez installer \nle pilote pour Mac qui est disponible au lien en-dessous. \nIl fonctionne avec les contrôleurs sans-fils et filaires.",
|
"macInstructionsText": "Pour utiliser les contrôleurs Xbox 360, vous devez installer \nle pilote pour Mac qui est disponible au lien en-dessous. \nIl fonctionne avec les contrôleurs sans-fils et filaires.",
|
||||||
|
"macInstructionsTextScale": 0.8,
|
||||||
"ouyaInstructionsText": "Pour utiliser les contrôleurs filaires Xbox 360 avec BombSquad,\nbranchez simplement dans le port USB. Vous pouvez utiliser\nun hub USB pour connecter plusieurs contrôleurs.\n\nPour utilisez les contrôleurs sans-fils, vous devez avoir un récepteur, \ndisponible avec le \"Contrôleur Xbox 360 sans-fils pour Windows\"\npaquet ou vendre individuellement. Chaque récepteur se branche dans un port\nUSB et vous permet à connecter 4 contrôleurs sans-fils",
|
"ouyaInstructionsText": "Pour utiliser les contrôleurs filaires Xbox 360 avec BombSquad,\nbranchez simplement dans le port USB. Vous pouvez utiliser\nun hub USB pour connecter plusieurs contrôleurs.\n\nPour utilisez les contrôleurs sans-fils, vous devez avoir un récepteur, \ndisponible avec le \"Contrôleur Xbox 360 sans-fils pour Windows\"\npaquet ou vendre individuellement. Chaque récepteur se branche dans un port\nUSB et vous permet à connecter 4 contrôleurs sans-fils",
|
||||||
"titleText": "Utiliser les Contrôleurs Xbox 360 avec ${APP_NAME}:"
|
"titleText": "Utiliser les Contrôleurs Xbox 360 avec ${APP_NAME}:"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
35
dist/ba_data/data/languages/german.json
vendored
35
dist/ba_data/data/languages/german.json
vendored
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountNameRules": "Der Account Name darf kein Emoji oder andere spezielle Buchstaben enthalten.",
|
"accountNameRules": "Der Konto Name darf kein Emoji oder andere spezielle Buchstaben enthalten.",
|
||||||
"accountProfileText": "Benutzerprofil",
|
"accountProfileText": "Benutzerprofil",
|
||||||
"accountsText": "Konten",
|
"accountsText": "Konten",
|
||||||
"achievementProgressText": "Erfolge: ${COUNT} von ${TOTAL}",
|
"achievementProgressText": "Erfolge: ${COUNT} von ${TOTAL}",
|
||||||
|
|
@ -11,25 +11,27 @@
|
||||||
"linkAccountsEnterCodeText": "Code eingeben",
|
"linkAccountsEnterCodeText": "Code eingeben",
|
||||||
"linkAccountsGenerateCodeText": "Code generieren",
|
"linkAccountsGenerateCodeText": "Code generieren",
|
||||||
"linkAccountsInfoText": "(Teile deine Erfolge über verschiedene Platformen)",
|
"linkAccountsInfoText": "(Teile deine Erfolge über verschiedene Platformen)",
|
||||||
"linkAccountsInstructionsNewText": "Um zwei Accounts zu verknüpfen muss ein Code auf dem ersten Gerät generiert werden und\ndieser Code auf dem zweiten Gerät eingegeben werden.\nDaten von dem zweiten Account werden dann zwischen beiden Geräten geteilt.\n(Daten vom ersten Account gehen verloren!)\n\nDu kannst bis zu ${COUNT} Accounts verknüpfen.\n\nWICHTIG: Verknüpfe nur Accounts die dir gehören;\nWenn du deine Accounts mit denen deiner Freunden\nverknüpft kannst du nicht mit deinen Freunden gleichzeitig online spielen.",
|
"linkAccountsInstructionsNewText": "Um zwei Konten zu verknüpfen muss ein Code auf dem ersten Gerät generiert\nund auf dem zweiten Gerät eingegeben werden.\nDaten von dem zweiten Konto werden dann zwischen beiden Geräten geteilt.\n(Daten vom ersten Konto gehen verloren!)\n\nDu kannst bis zu ${COUNT} Kontos verknüpfen.\n\nWICHTIG: Verknüpfe nur Kontos die dir gehören;\nWenn du deine Kontos mit denen deiner Freunde\nverknüpfst, kannst du nicht mit deinen Freunden gleichzeitig Online spielen.",
|
||||||
"linkAccountsInstructionsText": "Um zwei Accounts miteinander zu verknüpfen,generiere einen \nCode auf einem der Geräte und trage ihn auf dem anderen ein.\nFortschritt und Inventar werden kombiniert.\nDu kannst bis zu ${COUNT} Accounts miteinander verknüpfen.\n\nSei vorsichtig; das kann nicht rückgängig gemacht werden!",
|
"linkAccountsInstructionsText": "Um zwei Accounts miteinander zu verknüpfen,generiere einen \nCode auf einem der Geräte und trage ihn auf dem anderen ein.\nFortschritt und Inventar werden kombiniert.\nDu kannst bis zu ${COUNT} Accounts miteinander verknüpfen.\n\nSei vorsichtig; das kann nicht rückgängig gemacht werden!",
|
||||||
"linkAccountsText": "Accounts verknüpfen",
|
"linkAccountsText": "Konten verknüpfen",
|
||||||
"linkedAccountsText": "Verknüpfte Accounts:",
|
"linkedAccountsText": "Verknüpfte Konten:",
|
||||||
"nameChangeConfirm": "Möchtest du deinen Account Namen in ${NAME} ändern?",
|
"nameChangeConfirm": "Möchtest du deinen Konto Namen in ${NAME} ändern?",
|
||||||
"notLoggedInText": "<nicht eingeloggt>",
|
"notLoggedInText": "<nicht eingeloggt>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Das wird deinen Koop-Fortschritt und deine\nHigh-Scores zurücksetzen (aber nicht deine Tickets).\nDies kann nicht rückgängig gemacht werden. Bist du sicher?",
|
"resetProgressConfirmNoAchievementsText": "Das wird deinen Koop-Fortschritt und deine\nHigh-Scores zurücksetzen (aber nicht deine Tickets).\nDies kann nicht rückgängig gemacht werden. Bist du sicher?",
|
||||||
"resetProgressConfirmText": "Das wird deinen Koop-Fortschritt, deine\nErfolge und deine lokalen High-Scores\nzurücksetzen (aber nicht deine Tickets). Dies kann\nnicht rückgängig gemacht werden. Bist du sicher?",
|
"resetProgressConfirmText": "Das wird deinen Koop-Fortschritt, deine\nErfolge und deine lokalen High-Scores\nzurücksetzen (aber nicht deine Tickets). Dies kann\nnicht rückgängig gemacht werden. Bist du sicher?",
|
||||||
"resetProgressText": "Fortschritt zurücksetzen",
|
"resetProgressText": "Fortschritt zurücksetzen",
|
||||||
"setAccountName": "Account Name festlegen",
|
"setAccountName": "Konto Namen festlegen",
|
||||||
"setAccountNameDesc": "Wählen Sie den Namen aus, der für Ihr Konto angezeigt werden soll.\nSie können den Namen von einem Ihrer verlinkten\nKonten benutzen oder erstellen Sie einen einzigartigen benutzerdefinierten Name.",
|
"setAccountNameDesc": "Wählen Sie den Namen aus, der für Ihr Konto angezeigt werden soll.\nSie können den Namen von einem Ihrer verlinkten\nKonten benutzen oder erstellen Sie einen einzigartigen benutzerdefinierten Name.",
|
||||||
"signInInfoText": "Melde dich an, um deinen Fortschritt in der Cloud zu speichern,\nTickets zu verdienen und an Turnieren teilzunehmen.",
|
"signInInfoText": "Melde dich an, um deinen Fortschritt in der Cloud zu speichern,\nTickets zu verdienen und an Turnieren teilzunehmen.",
|
||||||
"signInText": "Anmelden",
|
"signInText": "Anmelden",
|
||||||
"signInWithDeviceInfoText": "(ein automatischer Account, den du nur von diesem Gerät benutzen kannst)",
|
"signInWithDeviceInfoText": "(ein automatisches Konto, das du nur auf diesem Gerät benutzen kannst)",
|
||||||
"signInWithDeviceText": "Mit Gerät-Account einloggen",
|
"signInWithDeviceText": "Mit Gerät-Konto einloggen",
|
||||||
"signInWithGameCircleText": "Mit Game Circle einloggen",
|
"signInWithGameCircleText": "Mit Game Circle einloggen",
|
||||||
"signInWithGooglePlayText": "Mit Google Play anmelden",
|
"signInWithGooglePlayText": "Mit Google Play anmelden",
|
||||||
"signInWithTestAccountInfoText": "(veraltete Accountart, benutze Gerät-Accounts)",
|
"signInWithTestAccountInfoText": "(veraltete Kontoart, benutze Geräte-Kontos)",
|
||||||
"signInWithTestAccountText": "Mit Testaccount einloggen",
|
"signInWithTestAccountText": "Mit Testkonto einloggen",
|
||||||
|
"signInWithV2InfoText": "(Ein Account der auf allen Plattformen funktioniert)",
|
||||||
|
"signInWithV2Text": "Einloggen mit einem BombSquad Account",
|
||||||
"signOutText": "Abmelden",
|
"signOutText": "Abmelden",
|
||||||
"signingInText": "Anmelden...",
|
"signingInText": "Anmelden...",
|
||||||
"signingOutText": "Abmelden...",
|
"signingOutText": "Abmelden...",
|
||||||
|
|
@ -37,10 +39,11 @@
|
||||||
"testAccountWarningOculusText": "Achtung: Du bist mit einen \"Testaccount\" angemeldet.\nDieser wird im Laufe diesen Jahres mit einem Oculus Account ersetzt. \nDadurch kann man Tickets kaufen und vieles mehr.\n\nFürs erste wirst du alle Tickets im Spiel verdienen müssen.\n(Du bekommst aber dafür das BombSquad Pro Upgrade umsonst)",
|
"testAccountWarningOculusText": "Achtung: Du bist mit einen \"Testaccount\" angemeldet.\nDieser wird im Laufe diesen Jahres mit einem Oculus Account ersetzt. \nDadurch kann man Tickets kaufen und vieles mehr.\n\nFürs erste wirst du alle Tickets im Spiel verdienen müssen.\n(Du bekommst aber dafür das BombSquad Pro Upgrade umsonst)",
|
||||||
"testAccountWarningText": "Achtung: Du meldest dich mit einem \"Testaccount\" an.\nDieser Account ist an dieses Gerät gebunden und wird\nregelmäßig zurückgesetzt. (Also bitte gib dir nicht \nzuviel Mühe um etwas zu sammeln/freizuschalten)\n\nVerwende eine offizielle Version des Spiels, um einen \"echten\" \nAccount zu benutzen (Game-Center, Google Plus, etc.) \nDas erlaubt es dir auch, deinen Spielstand in der Cloud zu \nspeichern und auf einem anderen Gerät weiterzuspielen.",
|
"testAccountWarningText": "Achtung: Du meldest dich mit einem \"Testaccount\" an.\nDieser Account ist an dieses Gerät gebunden und wird\nregelmäßig zurückgesetzt. (Also bitte gib dir nicht \nzuviel Mühe um etwas zu sammeln/freizuschalten)\n\nVerwende eine offizielle Version des Spiels, um einen \"echten\" \nAccount zu benutzen (Game-Center, Google Plus, etc.) \nDas erlaubt es dir auch, deinen Spielstand in der Cloud zu \nspeichern und auf einem anderen Gerät weiterzuspielen.",
|
||||||
"ticketsText": "Tickets: ${COUNT}",
|
"ticketsText": "Tickets: ${COUNT}",
|
||||||
"titleText": "Account",
|
"titleText": "Konto",
|
||||||
"unlinkAccountsInstructionsText": "Wähle ein Account aus um die Verknüpfung zu trennen",
|
"unlinkAccountsInstructionsText": "Wähle ein Konto aus um die Verknüpfung zu trennen",
|
||||||
"unlinkAccountsText": "Accounts entknüpfen",
|
"unlinkAccountsText": "Kontos entknüpfen",
|
||||||
"viaAccount": "(über dem Account ${NAME})",
|
"v2LinkInstructionsText": "Benutze diesen Link um einen Account zu erstellen oder dich einzuloggen.",
|
||||||
|
"viaAccount": "(über das Konto ${NAME})",
|
||||||
"youAreLoggedInAsText": "Du bist eingeloggt als:",
|
"youAreLoggedInAsText": "Du bist eingeloggt als:",
|
||||||
"youAreSignedInAsText": "Du bist angemeldet als:"
|
"youAreSignedInAsText": "Du bist angemeldet als:"
|
||||||
},
|
},
|
||||||
|
|
@ -1615,6 +1618,7 @@
|
||||||
"Dutch": "Holländisch",
|
"Dutch": "Holländisch",
|
||||||
"English": "Englisch",
|
"English": "Englisch",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Philippinisch",
|
||||||
"Finnish": "Finnisch",
|
"Finnish": "Finnisch",
|
||||||
"French": "Französisch",
|
"French": "Französisch",
|
||||||
"German": "Deutsch",
|
"German": "Deutsch",
|
||||||
|
|
@ -1635,7 +1639,8 @@
|
||||||
"Slovak": "Slovakisch",
|
"Slovak": "Slovakisch",
|
||||||
"Spanish": "Spanisch",
|
"Spanish": "Spanisch",
|
||||||
"Swedish": "Schwedisch",
|
"Swedish": "Schwedisch",
|
||||||
"Thai": "thailändisch",
|
"Tamil": "Tamil",
|
||||||
|
"Thai": "Thailändisch",
|
||||||
"Turkish": "Türkisch",
|
"Turkish": "Türkisch",
|
||||||
"Ukrainian": "Ukrainisch",
|
"Ukrainian": "Ukrainisch",
|
||||||
"Venetian": "Venezianisch",
|
"Venetian": "Venezianisch",
|
||||||
|
|
|
||||||
4
dist/ba_data/data/languages/gibberish.json
vendored
4
dist/ba_data/data/languages/gibberish.json
vendored
|
|
@ -32,6 +32,8 @@
|
||||||
"signInWithGooglePlayText": "Snf ocj weo fGOofl Plfl",
|
"signInWithGooglePlayText": "Snf ocj weo fGOofl Plfl",
|
||||||
"signInWithTestAccountInfoText": "(lgjo cac cojef ot; oeco doic w eofjw oero )",
|
"signInWithTestAccountInfoText": "(lgjo cac cojef ot; oeco doic w eofjw oero )",
|
||||||
"signInWithTestAccountText": "Sjc weo fwtjwoefj cowefwf",
|
"signInWithTestAccountText": "Sjc weo fwtjwoefj cowefwf",
|
||||||
|
"signInWithV2InfoText": "(an zofj c woof woke wo Eire wf ofjjowg)",
|
||||||
|
"signInWithV2Text": "Sngo cow erwoj CBombSOudds acorjds.",
|
||||||
"signOutText": "Sgngz Ozt",
|
"signOutText": "Sgngz Ozt",
|
||||||
"signingInText": "Sgngngn infz..",
|
"signingInText": "Sgngngn infz..",
|
||||||
"signingOutText": "Sngning ozt..",
|
"signingOutText": "Sngning ozt..",
|
||||||
|
|
@ -42,6 +44,7 @@
|
||||||
"titleText": "Acnfnnz",
|
"titleText": "Acnfnnz",
|
||||||
"unlinkAccountsInstructionsText": "Slj cwefjwe f owcjwoeijowief",
|
"unlinkAccountsInstructionsText": "Slj cwefjwe f owcjwoeijowief",
|
||||||
"unlinkAccountsText": "Uldfj owjowerjsr",
|
"unlinkAccountsText": "Uldfj owjowerjsr",
|
||||||
|
"v2LinkInstructionsText": "Usdl ow cweoroe arc o woij erode cowefoweirjewr sers.",
|
||||||
"viaAccount": "(fc cowefjwef ${NAME})",
|
"viaAccount": "(fc cowefjwef ${NAME})",
|
||||||
"youAreLoggedInAsText": "Yzrl arz lgzffd iz az:",
|
"youAreLoggedInAsText": "Yzrl arz lgzffd iz az:",
|
||||||
"youAreSignedInAsText": "Yz arz sngnfd inz arz:"
|
"youAreSignedInAsText": "Yz arz sngnfd inz arz:"
|
||||||
|
|
@ -1624,6 +1627,7 @@
|
||||||
"Dutch": "Dtchjdflz",
|
"Dutch": "Dtchjdflz",
|
||||||
"English": "Englfjlzjsh",
|
"English": "Englfjlzjsh",
|
||||||
"Esperanto": "Esprorjjzlz",
|
"Esperanto": "Esprorjjzlz",
|
||||||
|
"Filipino": "Fefjwoeifj",
|
||||||
"Finnish": "Fnnizhsh",
|
"Finnish": "Fnnizhsh",
|
||||||
"French": "Frnzhfhn",
|
"French": "Frnzhfhn",
|
||||||
"German": "Grmmzndn",
|
"German": "Grmmzndn",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/greek.json
vendored
6
dist/ba_data/data/languages/greek.json
vendored
|
|
@ -28,6 +28,8 @@
|
||||||
"signInWithGooglePlayText": "Σύνδεση με Google Play",
|
"signInWithGooglePlayText": "Σύνδεση με Google Play",
|
||||||
"signInWithTestAccountInfoText": "(προσωρινός λογαριασμός. Δημιουργήστε λογαριασμό συσκευής για συνέχιση προόδου)",
|
"signInWithTestAccountInfoText": "(προσωρινός λογαριασμός. Δημιουργήστε λογαριασμό συσκευής για συνέχιση προόδου)",
|
||||||
"signInWithTestAccountText": "Σύνδεση με δοκιμαστικό λογαριασμό",
|
"signInWithTestAccountText": "Σύνδεση με δοκιμαστικό λογαριασμό",
|
||||||
|
"signInWithV2InfoText": "ένας λογαριασμός που λειτουργεί σε όλες τις πλατφορμες",
|
||||||
|
"signInWithV2Text": "Συνδεθείτε με ένα λογαριασμό BombSquad",
|
||||||
"signOutText": "Αποσύνδεση",
|
"signOutText": "Αποσύνδεση",
|
||||||
"signingInText": "Σύνδεση...",
|
"signingInText": "Σύνδεση...",
|
||||||
"signingOutText": "Αποσύνδεση...",
|
"signingOutText": "Αποσύνδεση...",
|
||||||
|
|
@ -35,6 +37,7 @@
|
||||||
"titleText": "Λογαριασμός",
|
"titleText": "Λογαριασμός",
|
||||||
"unlinkAccountsInstructionsText": "Επιλέξτε έναν λογαριασμό για αποδέσμευση",
|
"unlinkAccountsInstructionsText": "Επιλέξτε έναν λογαριασμό για αποδέσμευση",
|
||||||
"unlinkAccountsText": "Αποδέσμευση Λογαριασμών",
|
"unlinkAccountsText": "Αποδέσμευση Λογαριασμών",
|
||||||
|
"v2LinkInstructionsText": "Χρησημοποιήστε αυτόν τον σύνδεσμο για να δημιουργήσετε έναν λογαριασμό ή για να συνδεθείτε.",
|
||||||
"viaAccount": "(μέσω λογαριασμού ${NAME})",
|
"viaAccount": "(μέσω λογαριασμού ${NAME})",
|
||||||
"youAreSignedInAsText": "Είστε συνδεδεμένοι ως:"
|
"youAreSignedInAsText": "Είστε συνδεδεμένοι ως:"
|
||||||
},
|
},
|
||||||
|
|
@ -494,6 +497,7 @@
|
||||||
"yourPowerRankingText": "Η Κατάταξη Δύναμής Σας:"
|
"yourPowerRankingText": "Η Κατάταξη Δύναμής Σας:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} Αντίγραφο",
|
"copyOfText": "${NAME} Αντίγραφο",
|
||||||
|
"copyText": "αντίγραφο",
|
||||||
"createEditPlayerText": "<Δημιουργία/Επεξεργασία Παίκτη>",
|
"createEditPlayerText": "<Δημιουργία/Επεξεργασία Παίκτη>",
|
||||||
"createText": "Δημιουργία",
|
"createText": "Δημιουργία",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1500,6 +1504,7 @@
|
||||||
"Dutch": "Ολλανδικά",
|
"Dutch": "Ολλανδικά",
|
||||||
"English": "Αγγλικά",
|
"English": "Αγγλικά",
|
||||||
"Esperanto": "Εσπαράντο",
|
"Esperanto": "Εσπαράντο",
|
||||||
|
"Filipino": "Φιλιπινέζικα",
|
||||||
"Finnish": "Φινλανδικά",
|
"Finnish": "Φινλανδικά",
|
||||||
"French": "Γαλλικά",
|
"French": "Γαλλικά",
|
||||||
"German": "Γερμανικά",
|
"German": "Γερμανικά",
|
||||||
|
|
@ -1520,6 +1525,7 @@
|
||||||
"Slovak": "Σλοβακικά",
|
"Slovak": "Σλοβακικά",
|
||||||
"Spanish": "Ισπανικά",
|
"Spanish": "Ισπανικά",
|
||||||
"Swedish": "Σουηδικά",
|
"Swedish": "Σουηδικά",
|
||||||
|
"Tamil": "Ταμίλ",
|
||||||
"Thai": "ταϊλανδέζικο",
|
"Thai": "ταϊλανδέζικο",
|
||||||
"Turkish": "Τούρκικα",
|
"Turkish": "Τούρκικα",
|
||||||
"Ukrainian": "Ουκρανικά",
|
"Ukrainian": "Ουκρανικά",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/hindi.json
vendored
6
dist/ba_data/data/languages/hindi.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "गूगल प्ले से साईन ईन करे",
|
"signInWithGooglePlayText": "गूगल प्ले से साईन ईन करे",
|
||||||
"signInWithTestAccountInfoText": "(पुराना खाते का प्ररूप; आगे के लिए यंत्र खाते का प्रयोग करें)",
|
"signInWithTestAccountInfoText": "(पुराना खाते का प्ररूप; आगे के लिए यंत्र खाते का प्रयोग करें)",
|
||||||
"signInWithTestAccountText": "परीक्षण के खाते से साइन इन करें",
|
"signInWithTestAccountText": "परीक्षण के खाते से साइन इन करें",
|
||||||
|
"signInWithV2InfoText": "(एक खाता जो सभी प्लेटफार्मों पर काम करता है)",
|
||||||
|
"signInWithV2Text": "BombSquad खाते से साइन इन करें",
|
||||||
"signOutText": "साइन आउट",
|
"signOutText": "साइन आउट",
|
||||||
"signingInText": "साइन इन हो रहा है...",
|
"signingInText": "साइन इन हो रहा है...",
|
||||||
"signingOutText": "साइन आउट हो रहा है...",
|
"signingOutText": "साइन आउट हो रहा है...",
|
||||||
|
|
@ -39,6 +41,7 @@
|
||||||
"titleText": "खाता",
|
"titleText": "खाता",
|
||||||
"unlinkAccountsInstructionsText": "अनलिंक करने के लिए एक खाता चुनें",
|
"unlinkAccountsInstructionsText": "अनलिंक करने के लिए एक खाता चुनें",
|
||||||
"unlinkAccountsText": "खाते अनलिंक करें",
|
"unlinkAccountsText": "खाते अनलिंक करें",
|
||||||
|
"v2LinkInstructionsText": "खाता बनाने या साइन इन करने के लिए इस लिंक का उपयोग करें।",
|
||||||
"viaAccount": "(खाता ${NAME} के माध्यम से)",
|
"viaAccount": "(खाता ${NAME} के माध्यम से)",
|
||||||
"youAreSignedInAsText": "आप इस खाते से साइनड इन हो: "
|
"youAreSignedInAsText": "आप इस खाते से साइनड इन हो: "
|
||||||
},
|
},
|
||||||
|
|
@ -497,6 +500,7 @@
|
||||||
"yourPowerRankingText": "आपका सत्ता पद :"
|
"yourPowerRankingText": "आपका सत्ता पद :"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} दूसरा",
|
"copyOfText": "${NAME} दूसरा",
|
||||||
|
"copyText": "नकल किजिए",
|
||||||
"createEditPlayerText": "<प्लेयर बनाएँ / संपादित करें>",
|
"createEditPlayerText": "<प्लेयर बनाएँ / संपादित करें>",
|
||||||
"createText": "बनायें",
|
"createText": "बनायें",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1504,6 +1508,7 @@
|
||||||
"Dutch": "डच",
|
"Dutch": "डच",
|
||||||
"English": "अंग्रेजी",
|
"English": "अंग्रेजी",
|
||||||
"Esperanto": "एस्पेरांतो",
|
"Esperanto": "एस्पेरांतो",
|
||||||
|
"Filipino": "फिलिनो",
|
||||||
"Finnish": "फिनिश",
|
"Finnish": "फिनिश",
|
||||||
"French": "फ्रेंच",
|
"French": "फ्रेंच",
|
||||||
"German": "जर्मन",
|
"German": "जर्मन",
|
||||||
|
|
@ -1524,6 +1529,7 @@
|
||||||
"Slovak": "स्लोवाक",
|
"Slovak": "स्लोवाक",
|
||||||
"Spanish": "स्पेनिश",
|
"Spanish": "स्पेनिश",
|
||||||
"Swedish": "स्वीडिश",
|
"Swedish": "स्वीडिश",
|
||||||
|
"Tamil": "तामिल",
|
||||||
"Thai": "थाई",
|
"Thai": "थाई",
|
||||||
"Turkish": "तुर्की",
|
"Turkish": "तुर्की",
|
||||||
"Ukrainian": "यूक्रेनी",
|
"Ukrainian": "यूक्रेनी",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/hungarian.json
vendored
6
dist/ba_data/data/languages/hungarian.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Belépés Google fiókkal",
|
"signInWithGooglePlayText": "Belépés Google fiókkal",
|
||||||
"signInWithTestAccountInfoText": "(Egy régi típusú felhasználó; Mostantól a készülék felhasználóját használd.)",
|
"signInWithTestAccountInfoText": "(Egy régi típusú felhasználó; Mostantól a készülék felhasználóját használd.)",
|
||||||
"signInWithTestAccountText": "Bejelentkezés teszt felhasználóval",
|
"signInWithTestAccountText": "Bejelentkezés teszt felhasználóval",
|
||||||
|
"signInWithV2InfoText": "(egy fiók, amely minden platformon működik)",
|
||||||
|
"signInWithV2Text": "Jelentkezzen be BombSquad fiókkal",
|
||||||
"signOutText": "Kijelentkezés",
|
"signOutText": "Kijelentkezés",
|
||||||
"signingInText": "Bejelentkezés...",
|
"signingInText": "Bejelentkezés...",
|
||||||
"signingOutText": "Kijelentkezés...",
|
"signingOutText": "Kijelentkezés...",
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
"titleText": "Felhasználó",
|
"titleText": "Felhasználó",
|
||||||
"unlinkAccountsInstructionsText": "Válassz ki egy fiókot a leválasztáshoz",
|
"unlinkAccountsInstructionsText": "Válassz ki egy fiókot a leválasztáshoz",
|
||||||
"unlinkAccountsText": "Fiókok leválasztása",
|
"unlinkAccountsText": "Fiókok leválasztása",
|
||||||
|
"v2LinkInstructionsText": "Használja ezt a linket fiók létrehozásához vagy bejelentkezéshez.",
|
||||||
"viaAccount": "(számlán keresztül ${NAME})",
|
"viaAccount": "(számlán keresztül ${NAME})",
|
||||||
"youAreSignedInAsText": "Be vagy jelentkezve, mint:"
|
"youAreSignedInAsText": "Be vagy jelentkezve, mint:"
|
||||||
},
|
},
|
||||||
|
|
@ -498,6 +501,7 @@
|
||||||
"yourPowerRankingText": "Helyezésed:"
|
"yourPowerRankingText": "Helyezésed:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} másolata",
|
"copyOfText": "${NAME} másolata",
|
||||||
|
"copyText": "Másolat",
|
||||||
"createEditPlayerText": "<Játékos készítése/szerkesztése>",
|
"createEditPlayerText": "<Játékos készítése/szerkesztése>",
|
||||||
"createText": "Készíts",
|
"createText": "Készíts",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1513,6 +1517,7 @@
|
||||||
"Dutch": "Holland",
|
"Dutch": "Holland",
|
||||||
"English": "Angol",
|
"English": "Angol",
|
||||||
"Esperanto": "Eszperanto",
|
"Esperanto": "Eszperanto",
|
||||||
|
"Filipino": "Filippínó",
|
||||||
"Finnish": "Finn",
|
"Finnish": "Finn",
|
||||||
"French": "Francia",
|
"French": "Francia",
|
||||||
"German": "Német",
|
"German": "Német",
|
||||||
|
|
@ -1533,6 +1538,7 @@
|
||||||
"Slovak": "Szlovák",
|
"Slovak": "Szlovák",
|
||||||
"Spanish": "Spanyol",
|
"Spanish": "Spanyol",
|
||||||
"Swedish": "Svéd",
|
"Swedish": "Svéd",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Thai, Thai ember",
|
"Thai": "Thai, Thai ember",
|
||||||
"Turkish": "Török",
|
"Turkish": "Török",
|
||||||
"Ukrainian": "Ukrán",
|
"Ukrainian": "Ukrán",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/indonesian.json
vendored
6
dist/ba_data/data/languages/indonesian.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Masuk menggunakan Google Play",
|
"signInWithGooglePlayText": "Masuk menggunakan Google Play",
|
||||||
"signInWithTestAccountInfoText": "(akun tipe lama; gunakan akun device untuk kedepannya)",
|
"signInWithTestAccountInfoText": "(akun tipe lama; gunakan akun device untuk kedepannya)",
|
||||||
"signInWithTestAccountText": "Masuk menggunakan akun percobaan",
|
"signInWithTestAccountText": "Masuk menggunakan akun percobaan",
|
||||||
|
"signInWithV2InfoText": "(Akun yang berfungsi di semua akun)",
|
||||||
|
"signInWithV2Text": "Daftar dengan akun bombsquad",
|
||||||
"signOutText": "Keluar",
|
"signOutText": "Keluar",
|
||||||
"signingInText": "Sedang masuk...",
|
"signingInText": "Sedang masuk...",
|
||||||
"signingOutText": "Sedang keluar...",
|
"signingOutText": "Sedang keluar...",
|
||||||
|
|
@ -36,6 +38,7 @@
|
||||||
"titleText": "Akun",
|
"titleText": "Akun",
|
||||||
"unlinkAccountsInstructionsText": "Pilih akun yang akan diputuskan.",
|
"unlinkAccountsInstructionsText": "Pilih akun yang akan diputuskan.",
|
||||||
"unlinkAccountsText": "Memutus Akun.",
|
"unlinkAccountsText": "Memutus Akun.",
|
||||||
|
"v2LinkInstructionsText": "Gunakan tautan ini untuk membuat akun atau masuk.",
|
||||||
"viaAccount": "(melalui akun ${NAME})",
|
"viaAccount": "(melalui akun ${NAME})",
|
||||||
"youAreSignedInAsText": "Kamu terdaftar sebagai:"
|
"youAreSignedInAsText": "Kamu terdaftar sebagai:"
|
||||||
},
|
},
|
||||||
|
|
@ -494,6 +497,7 @@
|
||||||
"yourPowerRankingText": "Peringkat Kekuatan Kamu:"
|
"yourPowerRankingText": "Peringkat Kekuatan Kamu:"
|
||||||
},
|
},
|
||||||
"copyOfText": "Salinan ${NAME}",
|
"copyOfText": "Salinan ${NAME}",
|
||||||
|
"copyText": "Salin",
|
||||||
"createEditPlayerText": "<Buat/Edit pemain>",
|
"createEditPlayerText": "<Buat/Edit pemain>",
|
||||||
"createText": "Buat",
|
"createText": "Buat",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1500,6 +1504,7 @@
|
||||||
"Dutch": "Belanda",
|
"Dutch": "Belanda",
|
||||||
"English": "Inggris",
|
"English": "Inggris",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipina",
|
||||||
"Finnish": "Finlandia",
|
"Finnish": "Finlandia",
|
||||||
"French": "Prancis",
|
"French": "Prancis",
|
||||||
"German": "Jerman",
|
"German": "Jerman",
|
||||||
|
|
@ -1520,6 +1525,7 @@
|
||||||
"Slovak": "Slovakia",
|
"Slovak": "Slovakia",
|
||||||
"Spanish": "Spanyol",
|
"Spanish": "Spanyol",
|
||||||
"Swedish": "Swedia",
|
"Swedish": "Swedia",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Thai",
|
"Thai": "Thai",
|
||||||
"Turkish": "Turki",
|
"Turkish": "Turki",
|
||||||
"Ukrainian": "Ukraina",
|
"Ukrainian": "Ukraina",
|
||||||
|
|
|
||||||
85
dist/ba_data/data/languages/italian.json
vendored
85
dist/ba_data/data/languages/italian.json
vendored
|
|
@ -15,11 +15,11 @@
|
||||||
"linkAccountsInstructionsNewText": "Per collegare due account, genera un codice nel primo dispositivo\ned inserisci il codice nel secondo. I dati del secondo account\nverranno condivisi in entrambi gli account.\n(I dati del primo account andranno persi)\n\nPuoi collegare fino a ${COUNT} account.\n\nIMPORTANTE: collega solo account che ti appartengono;\nSe colleghi account di amici non sarete in grado di\ngiocare online allo stesso momento.",
|
"linkAccountsInstructionsNewText": "Per collegare due account, genera un codice nel primo dispositivo\ned inserisci il codice nel secondo. I dati del secondo account\nverranno condivisi in entrambi gli account.\n(I dati del primo account andranno persi)\n\nPuoi collegare fino a ${COUNT} account.\n\nIMPORTANTE: collega solo account che ti appartengono;\nSe colleghi account di amici non sarete in grado di\ngiocare online allo stesso momento.",
|
||||||
"linkAccountsInstructionsText": "Per collegare due account, crea un codice su uno\ndei dispositivi e inserisci quel codice negli altri. \nProgressi e inventario verranno combinati.\nPuoi collegare fino a ${COUNT} account.\n\nIMPORTANTE: Collega solo account che possiedi!\nSe colleghi un account con un tuo amico non potrete\ngiocare allo stesso momento!\n \nInoltre: questa operazione non può essere annullata, quindi stai attento!",
|
"linkAccountsInstructionsText": "Per collegare due account, crea un codice su uno\ndei dispositivi e inserisci quel codice negli altri. \nProgressi e inventario verranno combinati.\nPuoi collegare fino a ${COUNT} account.\n\nIMPORTANTE: Collega solo account che possiedi!\nSe colleghi un account con un tuo amico non potrete\ngiocare allo stesso momento!\n \nInoltre: questa operazione non può essere annullata, quindi stai attento!",
|
||||||
"linkAccountsText": "Collega account",
|
"linkAccountsText": "Collega account",
|
||||||
"linkedAccountsText": "Account Connessi:",
|
"linkedAccountsText": "Account Collegati:",
|
||||||
"nameChangeConfirm": "Confermi di voler modificare il tuo nome in ${NAME}?",
|
"nameChangeConfirm": "Confermi di voler modificare il tuo nome in ${NAME}?",
|
||||||
"notLoggedInText": "<accesso non effettuato>",
|
"notLoggedInText": "<accesso non effettuato>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Stai per cancellare i tuoi progressi in\nmodalità cooperativa e i tuoi punteggi\nlocali (ma non i tuoi ticket). L'opera-\nzione è irreversibile: continuare?",
|
"resetProgressConfirmNoAchievementsText": "Stai per cancellare i tuoi progressi in\nmodalità cooperativa, i tuoi obbiettivi, i tuoi punteggi\nlocali (ma non i tuoi biglietti). \n\nL'operazione è irreversibile: continuare?",
|
||||||
"resetProgressConfirmText": "Stai per cancellare i tuoi progressi in\nmodalità cooperativa, i tuoi punteggi\nlocali e i trofei (ma non i tuoi ticket).\nL'operazione è irreversibile: continuare?",
|
"resetProgressConfirmText": "Stai per cancellare i tuoi progressi in\nmodalità cooperativa, i tuoi punteggi\nlocali e i tuoi obiettivi (ma non i tuoi biglietti).\nL'operazione è irreversibile: continuare?",
|
||||||
"resetProgressText": "Cancella Progressi",
|
"resetProgressText": "Cancella Progressi",
|
||||||
"setAccountName": "Inserisci un nome utente",
|
"setAccountName": "Inserisci un nome utente",
|
||||||
"setAccountNameDesc": "Seleziona quale nome visualizzare per il tuo account.\nPuoi usare quel nome per uno dei tuoi account collegati,\noppure creare un unico nome personalizzato.",
|
"setAccountNameDesc": "Seleziona quale nome visualizzare per il tuo account.\nPuoi usare quel nome per uno dei tuoi account collegati,\noppure creare un unico nome personalizzato.",
|
||||||
|
|
@ -31,6 +31,8 @@
|
||||||
"signInWithGooglePlayText": "Accedi con Google Play",
|
"signInWithGooglePlayText": "Accedi con Google Play",
|
||||||
"signInWithTestAccountInfoText": "(tipo di account obsoleto; usa gli account dispositivo d'ora in poi)",
|
"signInWithTestAccountInfoText": "(tipo di account obsoleto; usa gli account dispositivo d'ora in poi)",
|
||||||
"signInWithTestAccountText": "Accedi con un account di prova",
|
"signInWithTestAccountText": "Accedi con un account di prova",
|
||||||
|
"signInWithV2InfoText": "(un account che funziona su tutte le piattaforme)",
|
||||||
|
"signInWithV2Text": "Effettua l'accesso con un account di BombSquad",
|
||||||
"signOutText": "Esci",
|
"signOutText": "Esci",
|
||||||
"signingInText": "Accesso in corso...",
|
"signingInText": "Accesso in corso...",
|
||||||
"signingOutText": "Uscita in corso...",
|
"signingOutText": "Uscita in corso...",
|
||||||
|
|
@ -41,18 +43,19 @@
|
||||||
"titleText": "Account",
|
"titleText": "Account",
|
||||||
"unlinkAccountsInstructionsText": "Seleziona un account da scollegare",
|
"unlinkAccountsInstructionsText": "Seleziona un account da scollegare",
|
||||||
"unlinkAccountsText": "Scollega Account",
|
"unlinkAccountsText": "Scollega Account",
|
||||||
|
"v2LinkInstructionsText": "Usa questo link per creare un account o accedere.",
|
||||||
"viaAccount": "(tramite ${NAME})",
|
"viaAccount": "(tramite ${NAME})",
|
||||||
"youAreLoggedInAsText": "Accesso effettuato come:",
|
"youAreLoggedInAsText": "Accesso effettuato come:",
|
||||||
"youAreSignedInAsText": "Hai effettuato l'accesso come:"
|
"youAreSignedInAsText": "Hai effettuato l'accesso con:"
|
||||||
},
|
},
|
||||||
"achievementChallengesText": "Sfide trofeo",
|
"achievementChallengesText": "Sfide trofeo",
|
||||||
"achievementText": "Trofeo",
|
"achievementText": "Obiettivo",
|
||||||
"achievements": {
|
"achievements": {
|
||||||
"Boom Goes the Dynamite": {
|
"Boom Goes the Dynamite": {
|
||||||
"description": "Uccidi 3 cattivoni con la TNT",
|
"description": "Uccidi 3 cattivoni con la TNT",
|
||||||
"descriptionComplete": "Uccisi 3 cattivoni con la TNT",
|
"descriptionComplete": "Hai Ucciso 3 cattivoni con la TNT",
|
||||||
"descriptionFull": "Uccidi 3 cattivoni con la TNT in ${LEVEL}",
|
"descriptionFull": "Uccidi 3 cattivoni con la TNT in ${LEVEL}",
|
||||||
"descriptionFullComplete": "Uccisi 3 cattivoni con la TNT in ${LEVEL}",
|
"descriptionFullComplete": "Hai Ucciso 3 cattivoni con la TNT in ${LEVEL}",
|
||||||
"name": "E la dinamite fa Boom!"
|
"name": "E la dinamite fa Boom!"
|
||||||
},
|
},
|
||||||
"Boxer": {
|
"Boxer": {
|
||||||
|
|
@ -72,7 +75,7 @@
|
||||||
"descriptionComplete": "Hai vinto senza essere colpito",
|
"descriptionComplete": "Hai vinto senza essere colpito",
|
||||||
"descriptionFull": "Vinci ${LEVEL} senza essere colpito",
|
"descriptionFull": "Vinci ${LEVEL} senza essere colpito",
|
||||||
"descriptionFullComplete": "Hai vinto ${LEVEL} senza essere colpito",
|
"descriptionFullComplete": "Hai vinto ${LEVEL} senza essere colpito",
|
||||||
"name": "Vittoria schiacciante"
|
"name": "Vittoria Impeccabile"
|
||||||
},
|
},
|
||||||
"Free Loader": {
|
"Free Loader": {
|
||||||
"descriptionFull": "Avvia una partita Tutti Contro Tutti con 2 o più giocatori",
|
"descriptionFull": "Avvia una partita Tutti Contro Tutti con 2 o più giocatori",
|
||||||
|
|
@ -84,7 +87,7 @@
|
||||||
"descriptionComplete": "Hai ucciso 6 cattivoni con le mine antiuomo",
|
"descriptionComplete": "Hai ucciso 6 cattivoni con le mine antiuomo",
|
||||||
"descriptionFull": "Uccidi 6 cattivoni con le mine in ${LEVEL}",
|
"descriptionFull": "Uccidi 6 cattivoni con le mine in ${LEVEL}",
|
||||||
"descriptionFullComplete": "Hai ucciso 6 cattivoni con le mine antiuomo in ${LEVEL}",
|
"descriptionFullComplete": "Hai ucciso 6 cattivoni con le mine antiuomo in ${LEVEL}",
|
||||||
"name": "Minatore"
|
"name": "Minatore D'Oro"
|
||||||
},
|
},
|
||||||
"Got the Moves": {
|
"Got the Moves": {
|
||||||
"description": "Vinci senza tirare pugni né bombe",
|
"description": "Vinci senza tirare pugni né bombe",
|
||||||
|
|
@ -114,7 +117,7 @@
|
||||||
},
|
},
|
||||||
"Last Stand Wizard": {
|
"Last Stand Wizard": {
|
||||||
"description": "Fai 500 punti",
|
"description": "Fai 500 punti",
|
||||||
"descriptionComplete": "Hai fatto 500 punti",
|
"descriptionComplete": "Hai totalizzato 500 punti",
|
||||||
"descriptionFull": "Totalizza 500 punti in ${LEVEL}",
|
"descriptionFull": "Totalizza 500 punti in ${LEVEL}",
|
||||||
"descriptionFullComplete": "Hai totalizzato 500 punti in ${LEVEL}",
|
"descriptionFullComplete": "Hai totalizzato 500 punti in ${LEVEL}",
|
||||||
"name": "Mago di ${LEVEL}"
|
"name": "Mago di ${LEVEL}"
|
||||||
|
|
@ -248,7 +251,7 @@
|
||||||
"Sharing is Caring": {
|
"Sharing is Caring": {
|
||||||
"descriptionFull": "Condividi con successo il gioco con un amico",
|
"descriptionFull": "Condividi con successo il gioco con un amico",
|
||||||
"descriptionFullComplete": "Gioco condiviso con successo con un amico",
|
"descriptionFullComplete": "Gioco condiviso con successo con un amico",
|
||||||
"name": "Condividere significa tenerci"
|
"name": "La Condivisione E' La Cura"
|
||||||
},
|
},
|
||||||
"Stayin' Alive": {
|
"Stayin' Alive": {
|
||||||
"description": "Vinci senza morire",
|
"description": "Vinci senza morire",
|
||||||
|
|
@ -276,7 +279,7 @@
|
||||||
"descriptionComplete": "Hai ucciso 6 cattivoni con la TNT",
|
"descriptionComplete": "Hai ucciso 6 cattivoni con la TNT",
|
||||||
"descriptionFull": "Uccidi 6 cattivoni con la TNT su ${LEVEL}",
|
"descriptionFull": "Uccidi 6 cattivoni con la TNT su ${LEVEL}",
|
||||||
"descriptionFullComplete": "Hai ucciso 6 cattivoni con la TNT su ${LEVEL}",
|
"descriptionFullComplete": "Hai ucciso 6 cattivoni con la TNT su ${LEVEL}",
|
||||||
"name": "Il dinamitardo"
|
"name": "Terrore Del Tritolo"
|
||||||
},
|
},
|
||||||
"Team Player": {
|
"Team Player": {
|
||||||
"descriptionFull": "Avvia una partita Squadre con 4+ giocatori",
|
"descriptionFull": "Avvia una partita Squadre con 4+ giocatori",
|
||||||
|
|
@ -319,7 +322,7 @@
|
||||||
"name": "Vittoria in ${LEVEL}"
|
"name": "Vittoria in ${LEVEL}"
|
||||||
},
|
},
|
||||||
"Uber Runaround Victory": {
|
"Uber Runaround Victory": {
|
||||||
"description": "Comleta tutte le ondate",
|
"description": "Completa tutte le ondate",
|
||||||
"descriptionComplete": "Hai completato tutte le ondate",
|
"descriptionComplete": "Hai completato tutte le ondate",
|
||||||
"descriptionFull": "Completa tutte le ondate in ${LEVEL}",
|
"descriptionFull": "Completa tutte le ondate in ${LEVEL}",
|
||||||
"descriptionFullComplete": "Completa tutte le ondate in ${LEVEL}",
|
"descriptionFullComplete": "Completa tutte le ondate in ${LEVEL}",
|
||||||
|
|
@ -331,7 +334,7 @@
|
||||||
"achievementsUnavailableForOldSeasonsText": "Mi dispiace, ma gli obbiettivi non sono disponibili per le stagioni vecchie.",
|
"achievementsUnavailableForOldSeasonsText": "Mi dispiace, ma gli obbiettivi non sono disponibili per le stagioni vecchie.",
|
||||||
"addGameWindow": {
|
"addGameWindow": {
|
||||||
"getMoreGamesText": "Ottieni Giochi...",
|
"getMoreGamesText": "Ottieni Giochi...",
|
||||||
"titleText": "Aggiunga Partita"
|
"titleText": "Aggiungi Partita"
|
||||||
},
|
},
|
||||||
"allowText": "Consenti",
|
"allowText": "Consenti",
|
||||||
"alreadySignedInText": "Il tuo account è collegato da un altro dispositivo;\ncambia account o chiudi il gioco nel tuo altro\ndispositivo e riprova.",
|
"alreadySignedInText": "Il tuo account è collegato da un altro dispositivo;\ncambia account o chiudi il gioco nel tuo altro\ndispositivo e riprova.",
|
||||||
|
|
@ -351,7 +354,7 @@
|
||||||
"bestOfFinalText": "Finale Al-meglio-di-${COUNT}",
|
"bestOfFinalText": "Finale Al-meglio-di-${COUNT}",
|
||||||
"bestOfSeriesText": "Serie al meglio di ${COUNT}:",
|
"bestOfSeriesText": "Serie al meglio di ${COUNT}:",
|
||||||
"bestRankText": "Il tuo miglior piazzamento: N.${RANK}",
|
"bestRankText": "Il tuo miglior piazzamento: N.${RANK}",
|
||||||
"bestRatingText": "La tua valutazione massima è ${RATING}",
|
"bestRatingText": "La tua valutazione migliore è ${RATING}",
|
||||||
"betaErrorText": "Questa versione non è più attiva; per favore, cercane una più recente.",
|
"betaErrorText": "Questa versione non è più attiva; per favore, cercane una più recente.",
|
||||||
"betaValidateErrorText": "Impossibile convalidare la beta. (nessuna connessione internet?)",
|
"betaValidateErrorText": "Impossibile convalidare la beta. (nessuna connessione internet?)",
|
||||||
"betaValidatedText": "Versione beta convalidata; Divertiti!",
|
"betaValidatedText": "Versione beta convalidata; Divertiti!",
|
||||||
|
|
@ -445,9 +448,9 @@
|
||||||
"movementControlScaleText": "Dimensione controlli movimento",
|
"movementControlScaleText": "Dimensione controlli movimento",
|
||||||
"movementText": "Movimento",
|
"movementText": "Movimento",
|
||||||
"resetText": "Reset",
|
"resetText": "Reset",
|
||||||
"swipeControlsHiddenText": "Nascondi icone scivolati",
|
"swipeControlsHiddenText": "Nascondi icone a scivolo",
|
||||||
"swipeInfoText": "Ci vuole un po' per abituarsi ai comandi in stile 'Attacco',\nma rendono più facile giocare senza guardare i comandi.",
|
"swipeInfoText": "Ci vuole un po' per abituarsi ai comandi a scivolo,\nma rendono più facile giocare senza guardare i tasti o lo stick.",
|
||||||
"swipeText": "Attacco",
|
"swipeText": "Scivolo",
|
||||||
"titleText": "Configura il Touchscreen",
|
"titleText": "Configura il Touchscreen",
|
||||||
"touchControlsScaleText": "Scala dei Comandi Touch"
|
"touchControlsScaleText": "Scala dei Comandi Touch"
|
||||||
},
|
},
|
||||||
|
|
@ -501,7 +504,7 @@
|
||||||
"titleText": "Cooperativi",
|
"titleText": "Cooperativi",
|
||||||
"toRankedText": "Al prossimo livello",
|
"toRankedText": "Al prossimo livello",
|
||||||
"totalText": "Totale",
|
"totalText": "Totale",
|
||||||
"tournamentInfoText": "Competi per punteggi alti con\naltri giocatori della tua lega.\n\nI premi sono dati ai giocatori con\ni punteggi più alti quando il tempo del torneo scade.",
|
"tournamentInfoText": "Competi per punteggi alti con\naltri giocatori della tua lega.\n\nI premi sono assegnati ai giocatori con\ni punteggi più alti quando il tempo del torneo scade.",
|
||||||
"welcome1Text": "Benvenuto in ${LEAGUE}. Puoi migliorare il tuo\n livello lega guadagnando stelle, completando\n obbiettivi, e vincendo i trofei.",
|
"welcome1Text": "Benvenuto in ${LEAGUE}. Puoi migliorare il tuo\n livello lega guadagnando stelle, completando\n obbiettivi, e vincendo i trofei.",
|
||||||
"welcome2Text": "Puoi anche guadagnare biglietti con molte attività simili.\nI biglietti possono essere usato per sbloccare nuovi capitoli, mappe e\nmini-giochi, per entrare nei tornei ed altro.",
|
"welcome2Text": "Puoi anche guadagnare biglietti con molte attività simili.\nI biglietti possono essere usato per sbloccare nuovi capitoli, mappe e\nmini-giochi, per entrare nei tornei ed altro.",
|
||||||
"yourPowerRankingText": "La tua posizione assoluta"
|
"yourPowerRankingText": "La tua posizione assoluta"
|
||||||
|
|
@ -598,7 +601,7 @@
|
||||||
"globalProfileText": "(profilo globale)",
|
"globalProfileText": "(profilo globale)",
|
||||||
"highlightText": "colore principale",
|
"highlightText": "colore principale",
|
||||||
"iconText": "icona",
|
"iconText": "icona",
|
||||||
"localProfileInfoText": "I profili giocatori locali non hanno icone e i loro nomi\nnon sono garantiti che siano unici. Aggiorna a un profilo\nglobale per riservare un nome unico e per aggiungere un'icona personalizzata",
|
"localProfileInfoText": "I profili giocatori locali non hanno icone e non è\n garantito che siano unici. Aggiorna a un profilo\nglobale per riservare un nome unico e per aggiungere un'icona personalizzata",
|
||||||
"localProfileText": "(profilo locale)",
|
"localProfileText": "(profilo locale)",
|
||||||
"nameDescriptionText": "Nome del giocatore",
|
"nameDescriptionText": "Nome del giocatore",
|
||||||
"nameText": "Nome",
|
"nameText": "Nome",
|
||||||
|
|
@ -669,7 +672,7 @@
|
||||||
"firstToFinalText": "Finale First-to-${COUNT}",
|
"firstToFinalText": "Finale First-to-${COUNT}",
|
||||||
"firstToSeriesText": "Serie First-to-${COUNT}",
|
"firstToSeriesText": "Serie First-to-${COUNT}",
|
||||||
"fiveKillText": "CINQUE UCCISIONI!!!",
|
"fiveKillText": "CINQUE UCCISIONI!!!",
|
||||||
"flawlessWaveText": "Ondata schiacciante",
|
"flawlessWaveText": "Ondata Impeccabile!",
|
||||||
"fourKillText": "QUATTRO UCCISIONI!!!",
|
"fourKillText": "QUATTRO UCCISIONI!!!",
|
||||||
"freeForAllText": "Tutti Contro Tutti",
|
"freeForAllText": "Tutti Contro Tutti",
|
||||||
"friendScoresUnavailableText": "Punteggi degli amici non disponibili.",
|
"friendScoresUnavailableText": "Punteggi degli amici non disponibili.",
|
||||||
|
|
@ -698,7 +701,7 @@
|
||||||
"gamesToText": "${WINCOUNT} - ${LOSECOUNT}",
|
"gamesToText": "${WINCOUNT} - ${LOSECOUNT}",
|
||||||
"gatherWindow": {
|
"gatherWindow": {
|
||||||
"aboutDescriptionLocalMultiplayerExtraText": "Ricorda: qualunque dispositivo in un gruppo può ospitare \npiù di un giocatore se si hanno abbastanza controller.",
|
"aboutDescriptionLocalMultiplayerExtraText": "Ricorda: qualunque dispositivo in un gruppo può ospitare \npiù di un giocatore se si hanno abbastanza controller.",
|
||||||
"aboutDescriptionText": "Usa queste schede per creare un gruppo-\n\nI gruppi ti permettono di partecipare a giochi e\ntornei con i tuoi amici usando diversi dispositivi.\n\nUsa il tasto ${PARTY} in alto a destra per chattare\ne interagire con il tuo gruppo.\n(su un controller, premi ${BUTTON} in un menu)",
|
"aboutDescriptionText": "Usa queste schede per assemblare un party.\n\nI party ti permettono di partecipare a giochi e\ntornei con i tuoi amici usando diversi dispositivi.\n\nUsa il tasto ${PARTY} in alto a destra per chattare\ne interagire con il tuo gruppo.\n(su un controller, premi ${BUTTON} in un menu)",
|
||||||
"aboutText": "Informazioni",
|
"aboutText": "Informazioni",
|
||||||
"addressFetchErrorText": "<errore nel recuperare gli indirizzi>",
|
"addressFetchErrorText": "<errore nel recuperare gli indirizzi>",
|
||||||
"appInviteInfoText": "Invita i tuoi amici a provare BonvSquad e loro \nriceveranno ${COUNT} biglietti gratis. Tu guadagnerai\n${YOU_COUNT} per ogni amico che lo farà.",
|
"appInviteInfoText": "Invita i tuoi amici a provare BonvSquad e loro \nriceveranno ${COUNT} biglietti gratis. Tu guadagnerai\n${YOU_COUNT} per ogni amico che lo farà.",
|
||||||
|
|
@ -706,7 +709,7 @@
|
||||||
"appInviteSendACodeText": "Inviagli un codice",
|
"appInviteSendACodeText": "Inviagli un codice",
|
||||||
"appInviteTitleText": "Invito per l'app di ${APP_NAME}",
|
"appInviteTitleText": "Invito per l'app di ${APP_NAME}",
|
||||||
"bluetoothAndroidSupportText": "(funziona su dispositivi Android dotati di Bluetooth)",
|
"bluetoothAndroidSupportText": "(funziona su dispositivi Android dotati di Bluetooth)",
|
||||||
"bluetoothDescriptionText": "Ospita/unisciti a un gruppo via Bluetooth:",
|
"bluetoothDescriptionText": "Ospita/unisciti a un party via Bluetooth:",
|
||||||
"bluetoothHostText": "Ospita via Bluetooth",
|
"bluetoothHostText": "Ospita via Bluetooth",
|
||||||
"bluetoothJoinText": "Unisciti via Bluetooth",
|
"bluetoothJoinText": "Unisciti via Bluetooth",
|
||||||
"bluetoothText": "Bluetooth",
|
"bluetoothText": "Bluetooth",
|
||||||
|
|
@ -718,8 +721,8 @@
|
||||||
"earnTicketsForRecommendingAmountText": "I tuoi amici riceveranno ${COUNT} biglietti se proveranno il gioco\n(anche tu riceverai ${YOU_COUNT} biglietti per ogni amico che lo farà)",
|
"earnTicketsForRecommendingAmountText": "I tuoi amici riceveranno ${COUNT} biglietti se proveranno il gioco\n(anche tu riceverai ${YOU_COUNT} biglietti per ogni amico che lo farà)",
|
||||||
"earnTicketsForRecommendingText": "Condividi il gioco\nper biglietti gratis...",
|
"earnTicketsForRecommendingText": "Condividi il gioco\nper biglietti gratis...",
|
||||||
"emailItText": "Manda Email",
|
"emailItText": "Manda Email",
|
||||||
"favoritesSaveText": "enregistrer comme favori",
|
"favoritesSaveText": "Salva nei preferiti",
|
||||||
"favoritesText": "Favoris",
|
"favoritesText": "Preferiti",
|
||||||
"freeCloudServerAvailableMinutesText": "Il prossimo server gratuito sarà disponibile tra ${MINUTES} minuti!",
|
"freeCloudServerAvailableMinutesText": "Il prossimo server gratuito sarà disponibile tra ${MINUTES} minuti!",
|
||||||
"freeCloudServerAvailableNowText": "Server gratuito disponibile!",
|
"freeCloudServerAvailableNowText": "Server gratuito disponibile!",
|
||||||
"freeCloudServerNotAvailableText": "Nessun server gratuito disponibile",
|
"freeCloudServerNotAvailableText": "Nessun server gratuito disponibile",
|
||||||
|
|
@ -746,12 +749,12 @@
|
||||||
"joinPublicPartyDescriptionText": "Unisciti a un party pubblico",
|
"joinPublicPartyDescriptionText": "Unisciti a un party pubblico",
|
||||||
"localNetworkDescriptionText": "Unisciti ad un Party vicino (LAN, Bluetooth, etc.)",
|
"localNetworkDescriptionText": "Unisciti ad un Party vicino (LAN, Bluetooth, etc.)",
|
||||||
"localNetworkText": "Rete locale",
|
"localNetworkText": "Rete locale",
|
||||||
"makePartyPrivateText": "Rendi privato il mio gruppo",
|
"makePartyPrivateText": "Rendi privato il mio party",
|
||||||
"makePartyPublicText": "Rendi pubblico il mio gruppo",
|
"makePartyPublicText": "Rendi pubblico il mio party",
|
||||||
"manualAddressText": "Indirizzi",
|
"manualAddressText": "Indirizzi",
|
||||||
"manualConnectText": "Connettiti",
|
"manualConnectText": "Connettiti",
|
||||||
"manualDescriptionText": "Unisciti a un gruppo all'indirizzo:",
|
"manualDescriptionText": "Unisciti a un gruppo all'indirizzo:",
|
||||||
"manualJoinSectionText": "se joindre à la direction",
|
"manualJoinSectionText": "Unisciti con l'indirizzo",
|
||||||
"manualJoinableFromInternetText": "Sei raggiungibile da internet?",
|
"manualJoinableFromInternetText": "Sei raggiungibile da internet?",
|
||||||
"manualJoinableNoWithAsteriskText": "NO*",
|
"manualJoinableNoWithAsteriskText": "NO*",
|
||||||
"manualJoinableYesText": "SÌ",
|
"manualJoinableYesText": "SÌ",
|
||||||
|
|
@ -762,26 +765,26 @@
|
||||||
"nearbyText": "Locale",
|
"nearbyText": "Locale",
|
||||||
"noConnectionText": "<nessuna connessione>",
|
"noConnectionText": "<nessuna connessione>",
|
||||||
"otherVersionsText": "(altre versioni)",
|
"otherVersionsText": "(altre versioni)",
|
||||||
"partyCodeText": "Code du parti",
|
"partyCodeText": "Codice del Party",
|
||||||
"partyInviteAcceptText": "Accetta",
|
"partyInviteAcceptText": "Accetta",
|
||||||
"partyInviteDeclineText": "Rifiuta",
|
"partyInviteDeclineText": "Rifiuta",
|
||||||
"partyInviteGooglePlayExtraText": "(vedi la scheda 'Google Play' nella finestra 'Raduna')",
|
"partyInviteGooglePlayExtraText": "(vedi la scheda 'Google Play' nella finestra 'Raduna')",
|
||||||
"partyInviteIgnoreText": "Ignora",
|
"partyInviteIgnoreText": "Ignora",
|
||||||
"partyInviteText": "${NAME} ti ha invitato\nad unirsi al suo gruppo!",
|
"partyInviteText": "${NAME} ti ha invitato\nad unirsi al suo party!",
|
||||||
"partyNameText": "Nome gruppo",
|
"partyNameText": "Nome Party",
|
||||||
"partyServerRunningText": "votre serveur de groupe est en cours d'exécution",
|
"partyServerRunningText": "Il tuo party è in esecuzione.",
|
||||||
"partySizeText": "dimensione gruppo",
|
"partySizeText": "dimensione party",
|
||||||
"partyStatusCheckingText": "controllo status in corso...",
|
"partyStatusCheckingText": "controllo status in corso...",
|
||||||
"partyStatusJoinableText": "il tuo gruppo è ora raggiungibile da internet",
|
"partyStatusJoinableText": "il tuo party è ora raggiungibile da internet",
|
||||||
"partyStatusNoConnectionText": "impossibile connettersi al server",
|
"partyStatusNoConnectionText": "impossibile connettersi al server",
|
||||||
"partyStatusNotJoinableText": "il tuo gruppo non è raggiungibile da internet",
|
"partyStatusNotJoinableText": "il tuo party non è raggiungibile da internet",
|
||||||
"partyStatusNotPublicText": "il tuo gruppo non è pubblico",
|
"partyStatusNotPublicText": "il tuo party non è pubblico",
|
||||||
"pingText": "ping",
|
"pingText": "ping",
|
||||||
"portText": "Porta",
|
"portText": "Porta",
|
||||||
"privatePartyCloudDescriptionText": "les parties privées s'exécutent sur des serveurs cloud dédiés; aucune configuration de routeur requise",
|
"privatePartyCloudDescriptionText": "I party privati prendono posto su dei cloud server fatti apposta; non c'è bisogno di una configurazione del router.",
|
||||||
"privatePartyHostText": "Ospita un Party privato",
|
"privatePartyHostText": "Ospita un Party privato",
|
||||||
"privatePartyJoinText": "Entra in un Party privato",
|
"privatePartyJoinText": "Entra in un Party privato",
|
||||||
"privateText": "Privé",
|
"privateText": "Privato",
|
||||||
"publicHostRouterConfigText": "Questa opzione richiede la configurazione di port-forwarding sul tuo router. Per comodità, utilizza la funzionalità di hosting su server",
|
"publicHostRouterConfigText": "Questa opzione richiede la configurazione di port-forwarding sul tuo router. Per comodità, utilizza la funzionalità di hosting su server",
|
||||||
"publicText": "Pubblico",
|
"publicText": "Pubblico",
|
||||||
"requestingAPromoCodeText": "Richiesta codice in corso...",
|
"requestingAPromoCodeText": "Richiesta codice in corso...",
|
||||||
|
|
@ -1579,6 +1582,7 @@
|
||||||
"Dutch": "Olandese",
|
"Dutch": "Olandese",
|
||||||
"English": "Inglese",
|
"English": "Inglese",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filippino",
|
||||||
"Finnish": "Finlandese",
|
"Finnish": "Finlandese",
|
||||||
"French": "Francese",
|
"French": "Francese",
|
||||||
"German": "Tedesco",
|
"German": "Tedesco",
|
||||||
|
|
@ -1599,6 +1603,7 @@
|
||||||
"Slovak": "Slovacco",
|
"Slovak": "Slovacco",
|
||||||
"Spanish": "Spagnolo",
|
"Spanish": "Spagnolo",
|
||||||
"Swedish": "Svedese",
|
"Swedish": "Svedese",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Tailandese",
|
"Thai": "Tailandese",
|
||||||
"Turkish": "Turco",
|
"Turkish": "Turco",
|
||||||
"Ukrainian": "Ucraino",
|
"Ukrainian": "Ucraino",
|
||||||
|
|
@ -1814,7 +1819,7 @@
|
||||||
"You can judge when a bomb is going to explode based on the\ncolor of sparks from its fuse: yellow..orange..red..BOOM.": "Puoi capire quando una bomba sta per esplodere basandoti\nsul colore della miccia: giallo... arancione... rosso... BOOOM.",
|
"You can judge when a bomb is going to explode based on the\ncolor of sparks from its fuse: yellow..orange..red..BOOM.": "Puoi capire quando una bomba sta per esplodere basandoti\nsul colore della miccia: giallo... arancione... rosso... BOOOM.",
|
||||||
"You can throw bombs higher if you jump just before throwing.": "Se salti appena prima di lanciarle, le bombe arrivano più in alto.",
|
"You can throw bombs higher if you jump just before throwing.": "Se salti appena prima di lanciarle, le bombe arrivano più in alto.",
|
||||||
"You don't need to edit your profile to change characters; Just press the top\nbutton (pick-up) when joining a game to override your default.": "Non c'è bisogno di creare un profilo per cambiare personaggio; basta premere \nil pulsante superiore (afferra) quando prendi parte ad un gioco.",
|
"You don't need to edit your profile to change characters; Just press the top\nbutton (pick-up) when joining a game to override your default.": "Non c'è bisogno di creare un profilo per cambiare personaggio; basta premere \nil pulsante superiore (afferra) quando prendi parte ad un gioco.",
|
||||||
"You take damage when you whack your head on things,\nso try to not whack your head on things.": "Vieni danneggiato quando sbatti la testa contro le cose.\nQuini? Quindi cerca di non sbattere la testa contro le cose.",
|
"You take damage when you whack your head on things,\nso try to not whack your head on things.": "Subisci danno quando sbatti la testa contro le cose,\nquindi cerca di non farlo.",
|
||||||
"Your punches do much more damage if you are running or spinning.": "I pugni fanno molti più danni se stai correndo o roteando."
|
"Your punches do much more damage if you are running or spinning.": "I pugni fanno molti più danni se stai correndo o roteando."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -1845,7 +1850,7 @@
|
||||||
"phrase19Text": "Saltare aiuta a lanciare più in alto.",
|
"phrase19Text": "Saltare aiuta a lanciare più in alto.",
|
||||||
"phrase20Text": "Fai girare la tua bomba per lanci ancora più lunghi.",
|
"phrase20Text": "Fai girare la tua bomba per lanci ancora più lunghi.",
|
||||||
"phrase21Text": "Capire quando lanciare può essere difficile.",
|
"phrase21Text": "Capire quando lanciare può essere difficile.",
|
||||||
"phrase22Text": "Uff...",
|
"phrase22Text": "Accipicchia.",
|
||||||
"phrase23Text": "Prova a far consumare la miccia per un secondo o due.",
|
"phrase23Text": "Prova a far consumare la miccia per un secondo o due.",
|
||||||
"phrase24Text": "Così si fa! Cotto a puntino.",
|
"phrase24Text": "Così si fa! Cotto a puntino.",
|
||||||
"phrase25Text": "Be', questo è tutto.",
|
"phrase25Text": "Be', questo è tutto.",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/korean.json
vendored
6
dist/ba_data/data/languages/korean.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Google Play로 로그인",
|
"signInWithGooglePlayText": "Google Play로 로그인",
|
||||||
"signInWithTestAccountInfoText": "(이전 계정 유형, 앞의 기기 계정을 이용하세요)",
|
"signInWithTestAccountInfoText": "(이전 계정 유형, 앞의 기기 계정을 이용하세요)",
|
||||||
"signInWithTestAccountText": "테스트 계정으로 로그인",
|
"signInWithTestAccountText": "테스트 계정으로 로그인",
|
||||||
|
"signInWithV2InfoText": "(모든 플랫폼에서 작동하는 계정입니다)",
|
||||||
|
"signInWithV2Text": "BombSquad 계정으로 로그인",
|
||||||
"signOutText": "로그아웃",
|
"signOutText": "로그아웃",
|
||||||
"signingInText": "로그인 중...",
|
"signingInText": "로그인 중...",
|
||||||
"signingOutText": "로그아웃 중...",
|
"signingOutText": "로그아웃 중...",
|
||||||
|
|
@ -37,6 +39,7 @@
|
||||||
"titleText": "계정",
|
"titleText": "계정",
|
||||||
"unlinkAccountsInstructionsText": "계정 연동을 해제할 계정을 선택하세요",
|
"unlinkAccountsInstructionsText": "계정 연동을 해제할 계정을 선택하세요",
|
||||||
"unlinkAccountsText": "계정 연동해제",
|
"unlinkAccountsText": "계정 연동해제",
|
||||||
|
"v2LinkInstructionsText": "니 링크를 사용해서 계정을 만들거나, 로그인을 하세요.",
|
||||||
"viaAccount": "(계정 종류 ${NAME})",
|
"viaAccount": "(계정 종류 ${NAME})",
|
||||||
"youAreSignedInAsText": "현재 로그인된 사용자 이름:"
|
"youAreSignedInAsText": "현재 로그인된 사용자 이름:"
|
||||||
},
|
},
|
||||||
|
|
@ -495,6 +498,7 @@
|
||||||
"yourPowerRankingText": "내 파워 랭킹:"
|
"yourPowerRankingText": "내 파워 랭킹:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} 사본",
|
"copyOfText": "${NAME} 사본",
|
||||||
|
"copyText": "복사",
|
||||||
"createEditPlayerText": "<플레이어 생성/편집>",
|
"createEditPlayerText": "<플레이어 생성/편집>",
|
||||||
"createText": "생성",
|
"createText": "생성",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1496,6 +1500,7 @@
|
||||||
"Dutch": "네덜란드어",
|
"Dutch": "네덜란드어",
|
||||||
"English": "영어",
|
"English": "영어",
|
||||||
"Esperanto": "에스페란토",
|
"Esperanto": "에스페란토",
|
||||||
|
"Filipino": "필리핀어",
|
||||||
"Finnish": "핀란드어",
|
"Finnish": "핀란드어",
|
||||||
"French": "프랑스어",
|
"French": "프랑스어",
|
||||||
"German": "독일어",
|
"German": "독일어",
|
||||||
|
|
@ -1516,6 +1521,7 @@
|
||||||
"Slovak": "슬로바키아어",
|
"Slovak": "슬로바키아어",
|
||||||
"Spanish": "스페인어",
|
"Spanish": "스페인어",
|
||||||
"Swedish": "스웨덴어",
|
"Swedish": "스웨덴어",
|
||||||
|
"Tamil": "타밀어",
|
||||||
"Thai": "태국어",
|
"Thai": "태국어",
|
||||||
"Turkish": "터키어",
|
"Turkish": "터키어",
|
||||||
"Ukrainian": "우크라이나어",
|
"Ukrainian": "우크라이나어",
|
||||||
|
|
|
||||||
46
dist/ba_data/data/languages/persian.json
vendored
46
dist/ba_data/data/languages/persian.json
vendored
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountNameRules": "نام میتواند اموجی (شکلک) یا نویسههای ویژه داشته باشد",
|
"accountNameRules": "نام نمیتواند اموجی (شکلک) یا نویسه های ویژه داشته باشد",
|
||||||
"accountProfileText": "(مشخصات حساب)",
|
"accountProfileText": "(مشخصات حساب)",
|
||||||
"accountsText": "پروفایل ها",
|
"accountsText": "پروفایل ها",
|
||||||
"achievementProgressText": "${TOTAL} از ${COUNT} :دستاوردها",
|
"achievementProgressText": "${TOTAL}/${COUNT} :دستاوردها",
|
||||||
"campaignProgressText": "${PROGRESS} :[سخت] پیشروی در بازی اصلی",
|
"campaignProgressText": "${PROGRESS} :[سخت] پیشروی در بازی اصلی",
|
||||||
"changeOncePerSeason": ".فقط یکبار در هر فصل میتوانید این مورد را تغییر دهید",
|
"changeOncePerSeason": ".فقط یکبار در هر فصل میتوانید این مورد را تغییر دهید",
|
||||||
"changeOncePerSeasonError": "(روز تا فصل بعد ${NUM}) برای تغییر این گزینه باید تا فصل بعد صبر کنید",
|
"changeOncePerSeasonError": "(روز تا فصل بعد ${NUM}) برای تغییر این گزینه باید تا فصل بعد صبر کنید",
|
||||||
|
|
@ -13,8 +13,8 @@
|
||||||
"linkAccountsInfoText": "(به اشتراک گذاری پیشروی بین دستگاههای مختلف)",
|
"linkAccountsInfoText": "(به اشتراک گذاری پیشروی بین دستگاههای مختلف)",
|
||||||
"linkAccountsInstructionsNewText": "برای اتصال دو پروفایل، ابتدا یک کد در پروفایل اول بسازید\nسپس آن را در پروفایل دوم وارد کنید. پس از این کار \n.اطلاعات پروفایل دوم بین دو پروفایل به اشتراک گذاشته میشود\n(اطلاعات پروفایل اول از بین خواهد رفت)\n\n.پروفایل را به هم متصل کنید ${COUNT} شما میتوانید تا\nتوجه: تنها پروفایلهایی که مال خودتان است را\nبه هم متصل کنید! اگر به پروفایل دوستانتان وصل\n.شوید، نمیتوانید همزمان آنلاین بازی کنید",
|
"linkAccountsInstructionsNewText": "برای اتصال دو پروفایل، ابتدا یک کد در پروفایل اول بسازید\nسپس آن را در پروفایل دوم وارد کنید. پس از این کار \n.اطلاعات پروفایل دوم بین دو پروفایل به اشتراک گذاشته میشود\n(اطلاعات پروفایل اول از بین خواهد رفت)\n\n.پروفایل را به هم متصل کنید ${COUNT} شما میتوانید تا\nتوجه: تنها پروفایلهایی که مال خودتان است را\nبه هم متصل کنید! اگر به پروفایل دوستانتان وصل\n.شوید، نمیتوانید همزمان آنلاین بازی کنید",
|
||||||
"linkAccountsInstructionsText": "برای اتصال دو حساب، در یکی از\nآن ها کدی ایجاد کرده \nو آن را در دیگری وارد کنید.\nپیشرفت ها و موجودی ترکیب خواهد شد.\nحساب را وصل کنید ${COUNT} شما می توانید.\n!توجه : فقط حساب هایی را وصل کنید که برای\n شماست\nاگر شما حساب دیگری را وصل کنید، شما توانایی این را ندارید که در یک زمان بازی کنید!\nاین عمل برگشت پذیر نیست، پس \nدقت کنید!",
|
"linkAccountsInstructionsText": "برای اتصال دو حساب، در یکی از\nآن ها کدی ایجاد کرده \nو آن را در دیگری وارد کنید.\nپیشرفت ها و موجودی ترکیب خواهد شد.\nحساب را وصل کنید ${COUNT} شما می توانید.\n!توجه : فقط حساب هایی را وصل کنید که برای\n شماست\nاگر شما حساب دیگری را وصل کنید، شما توانایی این را ندارید که در یک زمان بازی کنید!\nاین عمل برگشت پذیر نیست، پس \nدقت کنید!",
|
||||||
"linkAccountsText": "متصل کردن پروفایلها",
|
"linkAccountsText": "متصل کردن حساب ها",
|
||||||
"linkedAccountsText": "پروفایلهای متصلشده:",
|
"linkedAccountsText": ":حساب های متصل شده",
|
||||||
"nameChangeConfirm": "تغییر کند؟ ${NAME} آیا نام شما به",
|
"nameChangeConfirm": "تغییر کند؟ ${NAME} آیا نام شما به",
|
||||||
"resetProgressConfirmNoAchievementsText": "همهٔ پیشرویهای شما در بخش همکاری و بالاترین امتیازات\nشما پاک خواهد شد. (به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
"resetProgressConfirmNoAchievementsText": "همهٔ پیشرویهای شما در بخش همکاری و بالاترین امتیازات\nشما پاک خواهد شد. (به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
||||||
"resetProgressConfirmText": "همهٔ پیشرویها در بخش همکاری، دستاوردها\n.و امتیازات بالای شما پاک خواهد شد\n(به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
"resetProgressConfirmText": "همهٔ پیشرویها در بخش همکاری، دستاوردها\n.و امتیازات بالای شما پاک خواهد شد\n(به استثنای بلیتهای شما)\nاین کار برگشتپذیر نیست. آیا مطمئنید؟",
|
||||||
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "ورود با حساب بازیهای گوگل",
|
"signInWithGooglePlayText": "ورود با حساب بازیهای گوگل",
|
||||||
"signInWithTestAccountInfoText": "(حساب میراثی؛ از حسابهای دستگاه برای پیشروی استفاده میکند)",
|
"signInWithTestAccountInfoText": "(حساب میراثی؛ از حسابهای دستگاه برای پیشروی استفاده میکند)",
|
||||||
"signInWithTestAccountText": "ورود با حساب آزمایشی",
|
"signInWithTestAccountText": "ورود با حساب آزمایشی",
|
||||||
|
"signInWithV2InfoText": "یک حساب کاربری که بر روی تمام سیستم عامل ها کار می کند",
|
||||||
|
"signInWithV2Text": "ورود به سیستم با حساب بمب اسکواد",
|
||||||
"signOutText": "خروج از حساب",
|
"signOutText": "خروج از حساب",
|
||||||
"signingInText": "در حال اتصال…",
|
"signingInText": "در حال اتصال…",
|
||||||
"signingOutText": "در حال خروج…",
|
"signingOutText": "در حال خروج…",
|
||||||
|
|
@ -36,6 +38,7 @@
|
||||||
"titleText": "حساب",
|
"titleText": "حساب",
|
||||||
"unlinkAccountsInstructionsText": "یک حساب را برای جداسازی انتخاب کنید",
|
"unlinkAccountsInstructionsText": "یک حساب را برای جداسازی انتخاب کنید",
|
||||||
"unlinkAccountsText": "جداسازی حسابها",
|
"unlinkAccountsText": "جداسازی حسابها",
|
||||||
|
"v2LinkInstructionsText": "استفاده از این لینک برای ایجاد یک حساب کاربری و یا ورود به سیستم.",
|
||||||
"viaAccount": "(${NAME} از طریق حساب)",
|
"viaAccount": "(${NAME} از طریق حساب)",
|
||||||
"youAreSignedInAsText": ":با این حساب وصل شدهاید"
|
"youAreSignedInAsText": ":با این حساب وصل شدهاید"
|
||||||
},
|
},
|
||||||
|
|
@ -496,6 +499,7 @@
|
||||||
"yourPowerRankingText": "رتبهبندی قدرت شما:"
|
"yourPowerRankingText": "رتبهبندی قدرت شما:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} کپی",
|
"copyOfText": "${NAME} کپی",
|
||||||
|
"copyText": "کپی کردن",
|
||||||
"createEditPlayerText": "<ایجاد/ویرایش بازیکن>",
|
"createEditPlayerText": "<ایجاد/ویرایش بازیکن>",
|
||||||
"createText": "ساختن",
|
"createText": "ساختن",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -550,7 +554,7 @@
|
||||||
"disableXInputDescriptionText": "اجازه میدهد به بیش از 4 کنترل کننده اما ممکن است کار نکند.",
|
"disableXInputDescriptionText": "اجازه میدهد به بیش از 4 کنترل کننده اما ممکن است کار نکند.",
|
||||||
"disableXInputText": "غیرفعال کردن ورودی ایکس",
|
"disableXInputText": "غیرفعال کردن ورودی ایکس",
|
||||||
"doneText": "انجام شد",
|
"doneText": "انجام شد",
|
||||||
"drawText": "مساوی",
|
"drawText": "برابر",
|
||||||
"duplicateText": "تکراری",
|
"duplicateText": "تکراری",
|
||||||
"editGameListWindow": {
|
"editGameListWindow": {
|
||||||
"addGameText": "افزودن\nبازی",
|
"addGameText": "افزودن\nبازی",
|
||||||
|
|
@ -953,7 +957,7 @@
|
||||||
"singlePlayerExamplesText": "Single Player / Co-op Examples",
|
"singlePlayerExamplesText": "Single Player / Co-op Examples",
|
||||||
"versusExamplesText": "Versus Examples"
|
"versusExamplesText": "Versus Examples"
|
||||||
},
|
},
|
||||||
"languageSetText": ".است «${LANGUAGE}» زبان هماکنون",
|
"languageSetText": "زبان فعلی: ${LANGUAGE}",
|
||||||
"lapNumberText": "${TOTAL}/${CURRENT} دور",
|
"lapNumberText": "${TOTAL}/${CURRENT} دور",
|
||||||
"lastGamesText": "(بازی آخر ${COUNT})",
|
"lastGamesText": "(بازی آخر ${COUNT})",
|
||||||
"leaderboardsText": "مدیران",
|
"leaderboardsText": "مدیران",
|
||||||
|
|
@ -1179,7 +1183,7 @@
|
||||||
"replayEndText": "پایان بازپخش",
|
"replayEndText": "پایان بازپخش",
|
||||||
"replayNameDefaultText": "بازپخش بازی اخیر",
|
"replayNameDefaultText": "بازپخش بازی اخیر",
|
||||||
"replayReadErrorText": "خطا در خواندن فایل بازپخش",
|
"replayReadErrorText": "خطا در خواندن فایل بازپخش",
|
||||||
"replayRenameWarningText": "پس از بازی اگر شما خواستید نگه داشته شود,درغیر اینصورت بازنویسی خواهد شد\"${REPLAY}\"تغییر نام",
|
"replayRenameWarningText": "عبارت «${REPLAY}» را تغییر دهید، اگر میخواهید بعد از یک بازی آن را از دست ندهید. در غیر این صورت بازنویسی میشود.",
|
||||||
"replayVersionErrorText": "با عرض پوزش این بازبخش در ورژن مختلفیاز بازی ایجاد شده\n است و نمیتوان مورد استفاده قرار گیرد",
|
"replayVersionErrorText": "با عرض پوزش این بازبخش در ورژن مختلفیاز بازی ایجاد شده\n است و نمیتوان مورد استفاده قرار گیرد",
|
||||||
"replayWatchText": "دیدن بازبخش بازی",
|
"replayWatchText": "دیدن بازبخش بازی",
|
||||||
"replayWriteErrorText": "خطا در نوشتن فایل بازپخش.",
|
"replayWriteErrorText": "خطا در نوشتن فایل بازپخش.",
|
||||||
|
|
@ -1230,7 +1234,7 @@
|
||||||
"enablePackageModsText": "فعالسازی پکیج مد محلی",
|
"enablePackageModsText": "فعالسازی پکیج مد محلی",
|
||||||
"enterPromoCodeText": "وارد کردن کد",
|
"enterPromoCodeText": "وارد کردن کد",
|
||||||
"forTestingText": "توجه: این تغیرات برای آزمایش کردن هستند و هنگام خروج به حال اول باز میگردند",
|
"forTestingText": "توجه: این تغیرات برای آزمایش کردن هستند و هنگام خروج به حال اول باز میگردند",
|
||||||
"helpTranslateText": "${APP_NAME}'s non-English translations are a community\nsupported effort. If you'd like to contribute or correct\na translation, follow the link below. Thanks in advance!",
|
"helpTranslateText": "ترجمههای غیرانگلیسی ${APP_NAME} تلاشی است که\nتوسط انجمن پشتیبانی میشود. اگر مایل به کمک یا تصحیح\nترجمه هستید، پیوند زیر را دنبال کنید. پیشاپیش متشکرم!",
|
||||||
"kickIdlePlayersText": "بیرون انداختن بازیکنان غیرفعال",
|
"kickIdlePlayersText": "بیرون انداختن بازیکنان غیرفعال",
|
||||||
"kidFriendlyModeText": "حالت دوستانه برای کودکان. خشونت کم",
|
"kidFriendlyModeText": "حالت دوستانه برای کودکان. خشونت کم",
|
||||||
"languageText": "زبان",
|
"languageText": "زبان",
|
||||||
|
|
@ -1347,7 +1351,7 @@
|
||||||
"timeSuffixMinutesText": "دقیقه ${COUNT}",
|
"timeSuffixMinutesText": "دقیقه ${COUNT}",
|
||||||
"timeSuffixSecondsText": "ثانیه ${COUNT}",
|
"timeSuffixSecondsText": "ثانیه ${COUNT}",
|
||||||
"tipText": "نکته",
|
"tipText": "نکته",
|
||||||
"titleText": "BombSquad",
|
"titleText": "بمباسکواد",
|
||||||
"titleVRText": "BombSquad VR",
|
"titleVRText": "BombSquad VR",
|
||||||
"topFriendsText": "بالاترین امتیاز دوستان",
|
"topFriendsText": "بالاترین امتیاز دوستان",
|
||||||
"tournamentCheckingStateText": "چک کردن وضعیت مسابقات؛ لطفا صبر کنید",
|
"tournamentCheckingStateText": "چک کردن وضعیت مسابقات؛ لطفا صبر کنید",
|
||||||
|
|
@ -1445,7 +1449,7 @@
|
||||||
"Steal the enemy flag ${ARG1} times.": "بار ${ARG1} ربودن پرچم حریف",
|
"Steal the enemy flag ${ARG1} times.": "بار ${ARG1} ربودن پرچم حریف",
|
||||||
"Steal the enemy flag.": "ربودن پرچم حریف",
|
"Steal the enemy flag.": "ربودن پرچم حریف",
|
||||||
"There can be only one.": "صاحب پرچم فقط میتونه یه نفر باشه",
|
"There can be only one.": "صاحب پرچم فقط میتونه یه نفر باشه",
|
||||||
"Touch the enemy flag ${ARG1} times.": "بار ${ARG1}لمس پرچم دشمن",
|
"Touch the enemy flag ${ARG1} times.": "${ARG1} بار لمس پرچم دشمن",
|
||||||
"Touch the enemy flag.": "لمس پرچم دشمن",
|
"Touch the enemy flag.": "لمس پرچم دشمن",
|
||||||
"carry the flag for ${ARG1} seconds": "ثانیه${ARG1}حمل و نگهداری پرچم برای",
|
"carry the flag for ${ARG1} seconds": "ثانیه${ARG1}حمل و نگهداری پرچم برای",
|
||||||
"kill ${ARG1} enemies": "حریف ${ARG1} ازبین بردن",
|
"kill ${ARG1} enemies": "حریف ${ARG1} ازبین بردن",
|
||||||
|
|
@ -1470,7 +1474,7 @@
|
||||||
"Chosen One": "فرد منتخب",
|
"Chosen One": "فرد منتخب",
|
||||||
"Conquest": "قدرت نمایی",
|
"Conquest": "قدرت نمایی",
|
||||||
"Death Match": "نبرد مرگبار",
|
"Death Match": "نبرد مرگبار",
|
||||||
"Easter Egg Hunt": "Easterگرفتن تخم مرغ های جشن",
|
"Easter Egg Hunt": "شکار تخممرغ عید پاک",
|
||||||
"Elimination": "استقامت",
|
"Elimination": "استقامت",
|
||||||
"Football": "فوتبال آمریکایی",
|
"Football": "فوتبال آمریکایی",
|
||||||
"Hockey": "هاکی",
|
"Hockey": "هاکی",
|
||||||
|
|
@ -1479,9 +1483,9 @@
|
||||||
"Meteor Shower": "بمباران",
|
"Meteor Shower": "بمباران",
|
||||||
"Ninja Fight": "نبرد با نینجاها",
|
"Ninja Fight": "نبرد با نینجاها",
|
||||||
"Onslaught": "مبارزه",
|
"Onslaught": "مبارزه",
|
||||||
"Race": "مسابقه ی دو",
|
"Race": "مسابقهٔ دو",
|
||||||
"Runaround": "مانع",
|
"Runaround": "مانع",
|
||||||
"Target Practice": "تمرین بمب اندازی",
|
"Target Practice": "تمرین بمباندازی",
|
||||||
"The Last Stand": "دفاع آخر"
|
"The Last Stand": "دفاع آخر"
|
||||||
},
|
},
|
||||||
"inputDeviceNames": {
|
"inputDeviceNames": {
|
||||||
|
|
@ -1490,7 +1494,7 @@
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"Arabic": "عربی",
|
"Arabic": "عربی",
|
||||||
"Belarussian": "بلاروس",
|
"Belarussian": "بلاروسی",
|
||||||
"Chinese": "چینی ساده شده",
|
"Chinese": "چینی ساده شده",
|
||||||
"ChineseTraditional": "چینی سنتی",
|
"ChineseTraditional": "چینی سنتی",
|
||||||
"Croatian": "کرواتی",
|
"Croatian": "کرواتی",
|
||||||
|
|
@ -1499,10 +1503,11 @@
|
||||||
"Dutch": "هلندی",
|
"Dutch": "هلندی",
|
||||||
"English": "انگلیسی",
|
"English": "انگلیسی",
|
||||||
"Esperanto": "اسپرانتو",
|
"Esperanto": "اسپرانتو",
|
||||||
|
"Filipino": "فلیپینی",
|
||||||
"Finnish": "فنلاندی",
|
"Finnish": "فنلاندی",
|
||||||
"French": "فرانسوی",
|
"French": "فرانسوی",
|
||||||
"German": "آلمانی",
|
"German": "آلمانی",
|
||||||
"Gibberish": "قبريش",
|
"Gibberish": "قبرسی",
|
||||||
"Greek": "یونانی",
|
"Greek": "یونانی",
|
||||||
"Hindi": "هندی",
|
"Hindi": "هندی",
|
||||||
"Hungarian": "مجارستانی",
|
"Hungarian": "مجارستانی",
|
||||||
|
|
@ -1510,15 +1515,16 @@
|
||||||
"Italian": "ایتالیایی",
|
"Italian": "ایتالیایی",
|
||||||
"Japanese": "ژاپنی",
|
"Japanese": "ژاپنی",
|
||||||
"Korean": "کرهای",
|
"Korean": "کرهای",
|
||||||
"Persian": "فارسی",
|
"Persian": "فارسی",
|
||||||
"Polish": "لهستانی",
|
"Polish": "لهستانی",
|
||||||
"Portuguese": "پرتغالی",
|
"Portuguese": "پرتغالی",
|
||||||
"Romanian": "رومانیایی",
|
"Romanian": "رومانیایی",
|
||||||
"Russian": "روسی",
|
"Russian": "روسی",
|
||||||
"Serbian": "صربستانی",
|
"Serbian": "صربستانی",
|
||||||
"Slovak": "اسلوواکی",
|
"Slovak": "اسلواک",
|
||||||
"Spanish": "اسپانیایی",
|
"Spanish": "اسپانیایی",
|
||||||
"Swedish": "سوئدی",
|
"Swedish": "سوئدی",
|
||||||
|
"Tamil": "تامیلی",
|
||||||
"Thai": "تایلندی",
|
"Thai": "تایلندی",
|
||||||
"Turkish": "ترکی",
|
"Turkish": "ترکی",
|
||||||
"Ukrainian": "اوکراینی",
|
"Ukrainian": "اوکراینی",
|
||||||
|
|
@ -1806,7 +1812,7 @@
|
||||||
"watchWindow": {
|
"watchWindow": {
|
||||||
"deleteConfirmText": "حذف شود؟\"${REPLAY}\"",
|
"deleteConfirmText": "حذف شود؟\"${REPLAY}\"",
|
||||||
"deleteReplayButtonText": "حذف\nبازبخش",
|
"deleteReplayButtonText": "حذف\nبازبخش",
|
||||||
"myReplaysText": "بازیهای ضبط شدهی من",
|
"myReplaysText": "بازیهای ضبطشدهٔ من",
|
||||||
"noReplaySelectedErrorText": "بازپخشی انتخاب نشده",
|
"noReplaySelectedErrorText": "بازپخشی انتخاب نشده",
|
||||||
"playbackSpeedText": "سرعت باز پخش:${SPEED}",
|
"playbackSpeedText": "سرعت باز پخش:${SPEED}",
|
||||||
"renameReplayButtonText": "تغییرنام\nبازبخش",
|
"renameReplayButtonText": "تغییرنام\nبازبخش",
|
||||||
|
|
@ -1818,8 +1824,8 @@
|
||||||
"replayRenameErrorInvalidName": "نمیتوان نام بازبخش را تغیر داد: نام نامعتبر است",
|
"replayRenameErrorInvalidName": "نمیتوان نام بازبخش را تغیر داد: نام نامعتبر است",
|
||||||
"replayRenameErrorText": "خطا در تغییر نام بازپخش.",
|
"replayRenameErrorText": "خطا در تغییر نام بازپخش.",
|
||||||
"sharedReplaysText": "اشتراک گزاری بازی ها",
|
"sharedReplaysText": "اشتراک گزاری بازی ها",
|
||||||
"titleText": "بازی های ضبط شده",
|
"titleText": "بازیهای ضبطشده",
|
||||||
"watchReplayButtonText": "تماشای بازی\nضبط شده"
|
"watchReplayButtonText": "تماشای بازی\nضبطشده"
|
||||||
},
|
},
|
||||||
"waveText": "دست",
|
"waveText": "دست",
|
||||||
"wellSureText": "! حتما",
|
"wellSureText": "! حتما",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/polish.json
vendored
6
dist/ba_data/data/languages/polish.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Zapisz się kontem Google Play",
|
"signInWithGooglePlayText": "Zapisz się kontem Google Play",
|
||||||
"signInWithTestAccountInfoText": "Konto.",
|
"signInWithTestAccountInfoText": "Konto.",
|
||||||
"signInWithTestAccountText": "Zapisz się testowym kontem.",
|
"signInWithTestAccountText": "Zapisz się testowym kontem.",
|
||||||
|
"signInWithV2InfoText": "(konto działa na wszystkich platformach)",
|
||||||
|
"signInWithV2Text": "Zaloguj się używając konta BombSquad",
|
||||||
"signOutText": "Wypisz się",
|
"signOutText": "Wypisz się",
|
||||||
"signingInText": "Zapisywanie się...",
|
"signingInText": "Zapisywanie się...",
|
||||||
"signingOutText": "Wypisywanie...",
|
"signingOutText": "Wypisywanie...",
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
"titleText": "Konto",
|
"titleText": "Konto",
|
||||||
"unlinkAccountsInstructionsText": "Wybierz konto do rozłączenia",
|
"unlinkAccountsInstructionsText": "Wybierz konto do rozłączenia",
|
||||||
"unlinkAccountsText": "Rozłącz konta",
|
"unlinkAccountsText": "Rozłącz konta",
|
||||||
|
"v2LinkInstructionsText": "Użyj tego linku aby stworzyć konto lub zaloguj się.",
|
||||||
"viaAccount": "(przez konto ${NAME})",
|
"viaAccount": "(przez konto ${NAME})",
|
||||||
"youAreLoggedInAsText": "Jesteś zalogowany jako:",
|
"youAreLoggedInAsText": "Jesteś zalogowany jako:",
|
||||||
"youAreSignedInAsText": "Jesteś zapisany jako:"
|
"youAreSignedInAsText": "Jesteś zapisany jako:"
|
||||||
|
|
@ -507,6 +510,7 @@
|
||||||
"yourPowerRankingText": "Twoje miejsce:"
|
"yourPowerRankingText": "Twoje miejsce:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} - kopia",
|
"copyOfText": "${NAME} - kopia",
|
||||||
|
"copyText": "Kopiuj",
|
||||||
"createAPlayerProfileText": "Utworzyć profil gracza?",
|
"createAPlayerProfileText": "Utworzyć profil gracza?",
|
||||||
"createEditPlayerText": "<Stwórz/Edytuj Gracza>",
|
"createEditPlayerText": "<Stwórz/Edytuj Gracza>",
|
||||||
"createText": "Utwórz",
|
"createText": "Utwórz",
|
||||||
|
|
@ -1579,6 +1583,7 @@
|
||||||
"Dutch": "Holenderski",
|
"Dutch": "Holenderski",
|
||||||
"English": "Angielski",
|
"English": "Angielski",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipiński",
|
||||||
"Finnish": "Fiński",
|
"Finnish": "Fiński",
|
||||||
"French": "Francuski",
|
"French": "Francuski",
|
||||||
"German": "Niemiecki",
|
"German": "Niemiecki",
|
||||||
|
|
@ -1599,6 +1604,7 @@
|
||||||
"Slovak": "słowacki",
|
"Slovak": "słowacki",
|
||||||
"Spanish": "Hiszpański",
|
"Spanish": "Hiszpański",
|
||||||
"Swedish": "Szwedzki",
|
"Swedish": "Szwedzki",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Tajski",
|
"Thai": "Tajski",
|
||||||
"Turkish": "Turecki",
|
"Turkish": "Turecki",
|
||||||
"Ukrainian": "Ukraiński",
|
"Ukrainian": "Ukraiński",
|
||||||
|
|
|
||||||
61
dist/ba_data/data/languages/portuguese.json
vendored
61
dist/ba_data/data/languages/portuguese.json
vendored
|
|
@ -11,18 +11,18 @@
|
||||||
"linkAccountsEnterCodeText": "Inserir código",
|
"linkAccountsEnterCodeText": "Inserir código",
|
||||||
"linkAccountsGenerateCodeText": "Gerar código",
|
"linkAccountsGenerateCodeText": "Gerar código",
|
||||||
"linkAccountsInfoText": "(compartilhar progresso entre várias plataformas)",
|
"linkAccountsInfoText": "(compartilhar progresso entre várias plataformas)",
|
||||||
"linkAccountsInstructionsNewText": "Para vincular duas contas, gere um código na primeira\ne insira o código na segunda. O progresso da\nsegunda conta será sincronizado com ambas.\n(Progresso da primeira conta será perdido)\n\nVocê pode vincular ${COUNT} contas.\n\nIMPORTANTE: apenas vincule contas que você tem acesso; \nSe você vincular a conta de um amigo vocês não\nserão capazes de jogar online ao mesmo tempo.",
|
"linkAccountsInstructionsNewText": "Para vincular duas contas, gere um código na primeira\ne insira o código na segunda. O progresso da\nsegunda conta será sincronizado com ambas.\n(O progresso da primeira conta será perdido)\n\nVocê pode vincular até ${COUNT} contas.\n\nIMPORTANTE: vincule apenas contas que tem acesso; \nSe você vincular a conta de um amigo, vocês não\nirão conseguir jogar online ao mesmo tempo.",
|
||||||
"linkAccountsInstructionsText": "Para vincular duas contas, gere um código\nem uma delas e o insira na outra.\nProgresso e inventário serão combinados.\nVocê pode vincular até ${COUNT} contas.\n\nIMPORTANTE: Vincule apenas as contas que você possui!\nSe você vincular contas a seus amigos, você\nnão será capaz de jogar ao mesmo tempo!\n\nAlém disso: isso não pode ser desfeito atualmente, então tenha cuidado!",
|
"linkAccountsInstructionsText": "Para vincular duas contas, gere um código\nem uma delas e o insira na outra.\nProgresso e inventário serão combinados.\nVocê pode vincular até ${COUNT} contas.\n\nIMPORTANTE: Vincule apenas as contas que você possui!\nSe você vincular contas a seus amigos, você\nnão será capaz de jogar ao mesmo tempo!\n\nAlém disso: isso não pode ser desfeito atualmente, então tenha cuidado!",
|
||||||
"linkAccountsText": "Vincular contas",
|
"linkAccountsText": "Vincular contas",
|
||||||
"linkedAccountsText": "Contas vinculadas:",
|
"linkedAccountsText": "Contas vinculadas:",
|
||||||
"nameChangeConfirm": "Mudar o nome da sua conta para ${NAME}?",
|
"nameChangeConfirm": "Mudar o nome da sua conta para ${NAME}?",
|
||||||
"notLoggedInText": "<não logado>",
|
"notLoggedInText": "<não logado>",
|
||||||
"resetProgressConfirmNoAchievementsText": "Isso reiniciará o seu progresso no cooperativo e\nsuas pontuações (mas não os seus bilhetes).\nIsso não pode ser desfeito. Tem certeza?",
|
"resetProgressConfirmNoAchievementsText": "Isto reiniciará o seu progresso no cooperativo e\nas suas pontuações (mas não os seus bilhetes).\nIsto não pode ser desfeito. Tem certeza?",
|
||||||
"resetProgressConfirmText": "Isso reiniciará o seu progresso no cooperativo,\nsuas conquistas e suas pontuações\n(mas não os seus bilhetes). Isso não pode\nser desfeito. Tem certeza?",
|
"resetProgressConfirmText": "Isto reiniciará o seu progresso no cooperativo,\nas suas conquistas e as suas pontuações\n(mas não os seus bilhetes). Isto não pode\nser desfeito. Tem certeza?",
|
||||||
"resetProgressText": "Reiniciar progresso",
|
"resetProgressText": "Reiniciar progresso",
|
||||||
"setAccountName": "Escolha o nome da conta",
|
"setAccountName": "Escolha o nome da conta",
|
||||||
"setAccountNameDesc": "Escolha o nome que será exibido na sua conta.\nVocê pode usar o nome de uma de suas contas\nou criar um nome personalizado exclusivo.",
|
"setAccountNameDesc": "Escolha o nome que será exibido na sua conta.\nVocê pode usar o nome de uma de suas contas\nou criar um nome personalizado exclusivo.",
|
||||||
"signInInfoText": "Inicie a sessão para ganhar bilhetes, compita online e compartilhe\nseu progresso entre vários dispositivos.",
|
"signInInfoText": "Inicie sessão para ganhar bilhetes, compita online e compartilhe\no seu progresso entre vários dispositivos.",
|
||||||
"signInText": "Iniciar sessão",
|
"signInText": "Iniciar sessão",
|
||||||
"signInWithDeviceInfoText": "(uma conta automática disponível apenas neste aparelho)",
|
"signInWithDeviceInfoText": "(uma conta automática disponível apenas neste aparelho)",
|
||||||
"signInWithDeviceText": "Iniciar sessão com conta do dispositivo",
|
"signInWithDeviceText": "Iniciar sessão com conta do dispositivo",
|
||||||
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Iniciar sessão com Google Play",
|
"signInWithGooglePlayText": "Iniciar sessão com Google Play",
|
||||||
"signInWithTestAccountInfoText": "(tipo de conta legado; use as contas do dispositivo daqui em diante)",
|
"signInWithTestAccountInfoText": "(tipo de conta legado; use as contas do dispositivo daqui em diante)",
|
||||||
"signInWithTestAccountText": "Iniciar sessão com conta teste",
|
"signInWithTestAccountText": "Iniciar sessão com conta teste",
|
||||||
|
"signInWithV2InfoText": "(uma conta que funciona em todas as plataformas)",
|
||||||
|
"signInWithV2Text": "Iniciar sessão com conta do BombSquad",
|
||||||
"signOutText": "Finalizar sessão",
|
"signOutText": "Finalizar sessão",
|
||||||
"signingInText": "Iniciando sessão...",
|
"signingInText": "Iniciando sessão...",
|
||||||
"signingOutText": "Finalizando sessão...",
|
"signingOutText": "Finalizando sessão...",
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
"titleText": "Conta",
|
"titleText": "Conta",
|
||||||
"unlinkAccountsInstructionsText": "Selecione uma conta para desvincular",
|
"unlinkAccountsInstructionsText": "Selecione uma conta para desvincular",
|
||||||
"unlinkAccountsText": "Desvincular contas",
|
"unlinkAccountsText": "Desvincular contas",
|
||||||
|
"v2LinkInstructionsText": "Utilize o link para criar uma conta ou entrar nela.",
|
||||||
"viaAccount": "(via ${NAME})",
|
"viaAccount": "(via ${NAME})",
|
||||||
"youAreLoggedInAsText": "Você está logado como:",
|
"youAreLoggedInAsText": "Você está logado como:",
|
||||||
"youAreSignedInAsText": "Iniciou sessão como:"
|
"youAreSignedInAsText": "Iniciou sessão como:"
|
||||||
|
|
@ -52,7 +55,7 @@
|
||||||
"descriptionComplete": "Matou 3 inimigos com TNT",
|
"descriptionComplete": "Matou 3 inimigos com TNT",
|
||||||
"descriptionFull": "Mate 3 inimigos com TNT no ${LEVEL}",
|
"descriptionFull": "Mate 3 inimigos com TNT no ${LEVEL}",
|
||||||
"descriptionFullComplete": "Matou 3 inimigos com TNT no ${LEVEL}",
|
"descriptionFullComplete": "Matou 3 inimigos com TNT no ${LEVEL}",
|
||||||
"name": "Quem Brinca com Fogo Sai Queimado"
|
"name": "Quem brinca com fogo, sai queimado"
|
||||||
},
|
},
|
||||||
"Boxer": {
|
"Boxer": {
|
||||||
"description": "Ganhe sem usar bombas",
|
"description": "Ganhe sem usar bombas",
|
||||||
|
|
@ -207,7 +210,7 @@
|
||||||
"descriptionComplete": "Ganhou sem deixar os inimigos marcarem",
|
"descriptionComplete": "Ganhou sem deixar os inimigos marcarem",
|
||||||
"descriptionFull": "Ganhe no ${LEVEL} sem deixar os inimigos marcarem",
|
"descriptionFull": "Ganhe no ${LEVEL} sem deixar os inimigos marcarem",
|
||||||
"descriptionFullComplete": "Ganhou no ${LEVEL} sem deixar os inimigos marcarem",
|
"descriptionFullComplete": "Ganhou no ${LEVEL} sem deixar os inimigos marcarem",
|
||||||
"name": "${LEVEL} De Levada"
|
"name": "${LEVEL} de levada"
|
||||||
},
|
},
|
||||||
"Rookie Football Victory": {
|
"Rookie Football Victory": {
|
||||||
"description": "Ganhe a partida",
|
"description": "Ganhe a partida",
|
||||||
|
|
@ -245,8 +248,8 @@
|
||||||
"name": "Mago do ${LEVEL}"
|
"name": "Mago do ${LEVEL}"
|
||||||
},
|
},
|
||||||
"Sharing is Caring": {
|
"Sharing is Caring": {
|
||||||
"descriptionFull": "Compartilhe o jogo com um amigo com êxito",
|
"descriptionFull": "Compartilhe o jogo com um amigo",
|
||||||
"descriptionFullComplete": "Jogo compartilhado com um amigo com êxito",
|
"descriptionFullComplete": "Jogo compartilhado com um amigo",
|
||||||
"name": "Compartilhar é amar"
|
"name": "Compartilhar é amar"
|
||||||
},
|
},
|
||||||
"Stayin' Alive": {
|
"Stayin' Alive": {
|
||||||
|
|
@ -261,14 +264,14 @@
|
||||||
"descriptionComplete": "Causou 100% de dano com um soco",
|
"descriptionComplete": "Causou 100% de dano com um soco",
|
||||||
"descriptionFull": "Cause 100% de dano com um soco no ${LEVEL}",
|
"descriptionFull": "Cause 100% de dano com um soco no ${LEVEL}",
|
||||||
"descriptionFullComplete": "Causou 100% de dano com um soco no ${LEVEL}",
|
"descriptionFullComplete": "Causou 100% de dano com um soco no ${LEVEL}",
|
||||||
"name": "Super Mega Soco"
|
"name": "Super mega soco"
|
||||||
},
|
},
|
||||||
"Super Punch": {
|
"Super Punch": {
|
||||||
"description": "Cause 50% de dano com um soco",
|
"description": "Cause 50% de dano com um soco",
|
||||||
"descriptionComplete": "Causou 50% de dano com um soco",
|
"descriptionComplete": "Causou 50% de dano com um soco",
|
||||||
"descriptionFull": "Cause 50% de dano com um soco no ${LEVEL}",
|
"descriptionFull": "Cause 50% de dano com um soco no ${LEVEL}",
|
||||||
"descriptionFullComplete": "Causou 50% de dano com um soco no ${LEVEL}",
|
"descriptionFullComplete": "Causou 50% de dano com um soco no ${LEVEL}",
|
||||||
"name": "Super Soco"
|
"name": "Supersoco"
|
||||||
},
|
},
|
||||||
"TNT Terror": {
|
"TNT Terror": {
|
||||||
"description": "Mate 6 inimigos com TNT",
|
"description": "Mate 6 inimigos com TNT",
|
||||||
|
|
@ -333,15 +336,15 @@
|
||||||
"titleText": "Adicionar jogo"
|
"titleText": "Adicionar jogo"
|
||||||
},
|
},
|
||||||
"allowText": "Permitir",
|
"allowText": "Permitir",
|
||||||
"alreadySignedInText": "Sua conta está logada em outro dispositivo;\nMude de conta ou feche o jogo no seu\noutro dispositivo e tente novamente.",
|
"alreadySignedInText": "A conta tem sessão iniciada em outro dispositivo;\nMude de conta ou feche o jogo no seu\noutro dispositivo e tente novamente.",
|
||||||
"apiVersionErrorText": "Não pôde carregar o módulo ${NAME}; ele é destinado à versão ${VERSION_USED}; exigimos a ${VERSION_REQUIRED}.",
|
"apiVersionErrorText": "Não é possível carregar o módulo ${NAME}; ele é destinado à versão ${VERSION_USED}; exigimos a ${VERSION_REQUIRED}.",
|
||||||
"audioSettingsWindow": {
|
"audioSettingsWindow": {
|
||||||
"headRelativeVRAudioInfoText": "(\"Auto\" ativado apenas quando os fones estão conectados)",
|
"headRelativeVRAudioInfoText": "(\"Auto\" ativado apenas quando os fones estão conectados)",
|
||||||
"headRelativeVRAudioText": "Áudio para fones de RV",
|
"headRelativeVRAudioText": "Áudio para fones de RV",
|
||||||
"musicVolumeText": "Volume da música",
|
"musicVolumeText": "Volume da música",
|
||||||
"soundVolumeText": "Volume do som",
|
"soundVolumeText": "Volume do som",
|
||||||
"soundtrackButtonText": "Trilha Sonora",
|
"soundtrackButtonText": "Trilha sonora",
|
||||||
"soundtrackDescriptionText": "(tocar sua própria música durante o jogo)",
|
"soundtrackDescriptionText": "(tocar a sua própria música durante o jogo)",
|
||||||
"titleText": "Áudio"
|
"titleText": "Áudio"
|
||||||
},
|
},
|
||||||
"autoText": "Auto",
|
"autoText": "Auto",
|
||||||
|
|
@ -359,13 +362,13 @@
|
||||||
"boostText": "Impulso",
|
"boostText": "Impulso",
|
||||||
"bsRemoteConfigureInAppText": "${REMOTE_APP_NAME} é configurado no próprio aplicativo.",
|
"bsRemoteConfigureInAppText": "${REMOTE_APP_NAME} é configurado no próprio aplicativo.",
|
||||||
"buttonText": "botão",
|
"buttonText": "botão",
|
||||||
"canWeDebugText": "Gostaria que BombSquad reportasse erros, falhas e \ninformações básicas de uso para o desenvolvedor?\n\nEstes dados não contêm informações pessoais e ajudam\na manter o jogo funcionando sem erros e livre de problemas.",
|
"canWeDebugText": "Deseja que o BombSquad comunique os erros, falhas e \ninformações básicas de uso para o desenvolvedor?\n\nEstes dados não contêm informações pessoais e ajudam\na manter o jogo funcionando corretamente.",
|
||||||
"cancelText": "Cancelar",
|
"cancelText": "Cancelar",
|
||||||
"cantConfigureDeviceText": "Desculpe, ${DEVICE} não é configurável.",
|
"cantConfigureDeviceText": "Desculpe, ${DEVICE} não é configurável.",
|
||||||
"challengeEndedText": "Este desafio acabou.",
|
"challengeEndedText": "Este desafio acabou.",
|
||||||
"chatMuteText": "Silenciar bate-papo",
|
"chatMuteText": "Silenciar chat",
|
||||||
"chatMutedText": "Bate-papo silenciado",
|
"chatMutedText": "Chat silenciado",
|
||||||
"chatUnMuteText": "Reativar som do bate-papo",
|
"chatUnMuteText": "Reativar som do chat",
|
||||||
"choosingPlayerText": "<escolhendo jogador>",
|
"choosingPlayerText": "<escolhendo jogador>",
|
||||||
"completeThisLevelToProceedText": "Você deve completar \neste nível para continuar!",
|
"completeThisLevelToProceedText": "Você deve completar \neste nível para continuar!",
|
||||||
"completionBonusText": "Bônus de conclusão",
|
"completionBonusText": "Bônus de conclusão",
|
||||||
|
|
@ -389,10 +392,10 @@
|
||||||
"configGamepadWindow": {
|
"configGamepadWindow": {
|
||||||
"advancedText": "Avançado",
|
"advancedText": "Avançado",
|
||||||
"advancedTitleText": "Configuração avançada dos controles",
|
"advancedTitleText": "Configuração avançada dos controles",
|
||||||
"analogStickDeadZoneDescriptionText": "(ative isto se seu personagem 'escorrega' quando você solta o direcional)",
|
"analogStickDeadZoneDescriptionText": "(ative isto se o personagem 'escorrega' quando você solta o direcional)",
|
||||||
"analogStickDeadZoneText": "Área morta do analógico",
|
"analogStickDeadZoneText": "Área morta do analógico",
|
||||||
"appliesToAllText": "(serve para todos os controles deste tipo)",
|
"appliesToAllText": "(serve para todos os controles deste tipo)",
|
||||||
"autoRecalibrateDescriptionText": "(ative isto se o seu personagem não se move na velocidade máxima)",
|
"autoRecalibrateDescriptionText": "(ative isto se o personagem não se move na velocidade máxima)",
|
||||||
"autoRecalibrateDescriptionTextScale": 0.4,
|
"autoRecalibrateDescriptionTextScale": 0.4,
|
||||||
"autoRecalibrateText": "Calibrar automaticamente o analógico",
|
"autoRecalibrateText": "Calibrar automaticamente o analógico",
|
||||||
"autoRecalibrateTextScale": 0.65,
|
"autoRecalibrateTextScale": 0.65,
|
||||||
|
|
@ -431,7 +434,7 @@
|
||||||
"twoInOneSetupText": "Configuração do Controle 2-em-1",
|
"twoInOneSetupText": "Configuração do Controle 2-em-1",
|
||||||
"uiOnlyDescriptionText": "(impede que este controle entre em um jogo)",
|
"uiOnlyDescriptionText": "(impede que este controle entre em um jogo)",
|
||||||
"uiOnlyText": "Limitar o Uso ao Menu",
|
"uiOnlyText": "Limitar o Uso ao Menu",
|
||||||
"unassignedButtonsRunText": "Todo Botão Não Definido Executa",
|
"unassignedButtonsRunText": "Todo o botão não definido executa",
|
||||||
"unassignedButtonsRunTextScale": 0.8,
|
"unassignedButtonsRunTextScale": 0.8,
|
||||||
"unsetText": "<não definido>",
|
"unsetText": "<não definido>",
|
||||||
"vrReorientButtonText": "Botão Reorientar VR"
|
"vrReorientButtonText": "Botão Reorientar VR"
|
||||||
|
|
@ -499,7 +502,7 @@
|
||||||
"powerRankingPointsMultText": "(x ${NUMBER} pts)",
|
"powerRankingPointsMultText": "(x ${NUMBER} pts)",
|
||||||
"powerRankingPointsText": "${NUMBER} pts",
|
"powerRankingPointsText": "${NUMBER} pts",
|
||||||
"powerRankingPointsToRankedText": "(${CURRENT} de ${REMAINING} pts)",
|
"powerRankingPointsToRankedText": "(${CURRENT} de ${REMAINING} pts)",
|
||||||
"powerRankingText": "Classificação Geral",
|
"powerRankingText": "Classificação geral",
|
||||||
"prizesText": "Prêmios",
|
"prizesText": "Prêmios",
|
||||||
"proMultInfoText": "Jogadores com a versão ${PRO}\nrecebem um aumento de ${PERCENT}% nos pontos.",
|
"proMultInfoText": "Jogadores com a versão ${PRO}\nrecebem um aumento de ${PERCENT}% nos pontos.",
|
||||||
"seeMoreText": "Mais...",
|
"seeMoreText": "Mais...",
|
||||||
|
|
@ -520,10 +523,10 @@
|
||||||
"createEditPlayerText": "<Criar/Editar jogador>",
|
"createEditPlayerText": "<Criar/Editar jogador>",
|
||||||
"createText": "Criar",
|
"createText": "Criar",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
"additionalAudioArtIdeasText": "Áudio adicional, Arte inicial e Ideias por ${NAME}",
|
"additionalAudioArtIdeasText": "Áudio adicional, Arte inicial e ideias por ${NAME}",
|
||||||
"additionalMusicFromText": "Música adicional de ${NAME}",
|
"additionalMusicFromText": "Música adicional de ${NAME}",
|
||||||
"allMyFamilyText": "Toda a família e amigos que ajudaram nos testes",
|
"allMyFamilyText": "Toda a família e amigos que ajudaram nos testes",
|
||||||
"codingGraphicsAudioText": "Programação, Gráficos e Áudio por ${NAME}",
|
"codingGraphicsAudioText": "Programação, gráficos e áudio por ${NAME}",
|
||||||
"creditsText": " Codificação, Gráficos, e Áudio por Eric Froemling\n \n Áudio Adicional, Trabalho de Arte Inicial, e Ideias por Raphael Suter\n \n Som & Música:\n\n${SOUND_AND_MUSIC}\n\n Música de Domínio Público via Musopen.com (um ótimo site para música clássica)\n Agradecimentos especialmente para o Exército dos EUA, Marinha e Bandas da Marinha.\n\n Um grande obrigado aos seguintes colaboradores do freesound.org para o uso de seus sons:\n${FREESOUND_NAMES}\n\n Agradecimentos Especiais:\n\n Todd, Laura, e Robert Froemling\n Todos os meus amigos e familiares que ajudaram a testar o jogo\n Quem quer que inventou o café\n\n Legal:\n\n${LEGAL_STUFF}\n\n www.froemling.net\n",
|
"creditsText": " Codificação, Gráficos, e Áudio por Eric Froemling\n \n Áudio Adicional, Trabalho de Arte Inicial, e Ideias por Raphael Suter\n \n Som & Música:\n\n${SOUND_AND_MUSIC}\n\n Música de Domínio Público via Musopen.com (um ótimo site para música clássica)\n Agradecimentos especialmente para o Exército dos EUA, Marinha e Bandas da Marinha.\n\n Um grande obrigado aos seguintes colaboradores do freesound.org para o uso de seus sons:\n${FREESOUND_NAMES}\n\n Agradecimentos Especiais:\n\n Todd, Laura, e Robert Froemling\n Todos os meus amigos e familiares que ajudaram a testar o jogo\n Quem quer que inventou o café\n\n Legal:\n\n${LEGAL_STUFF}\n\n www.froemling.net\n",
|
||||||
"languageTranslationsText": "Traduções:",
|
"languageTranslationsText": "Traduções:",
|
||||||
"legalText": "Legal:",
|
"legalText": "Legal:",
|
||||||
|
|
@ -932,7 +935,7 @@
|
||||||
"arrowsToExitListText": "aperte ${LEFT} ou ${RIGHT} para sair da lista",
|
"arrowsToExitListText": "aperte ${LEFT} ou ${RIGHT} para sair da lista",
|
||||||
"buttonText": "botão",
|
"buttonText": "botão",
|
||||||
"cantKickHostError": "Você não pode expulsar o anfitrião.",
|
"cantKickHostError": "Você não pode expulsar o anfitrião.",
|
||||||
"chatBlockedText": "O bate-papo de ${NAME} está bloqueado por ${TIME} segundo(s).",
|
"chatBlockedText": "O chat de ${NAME} está bloqueado por ${TIME} segundo(s).",
|
||||||
"connectedToGameText": "Conectou-se a '${NAME}'",
|
"connectedToGameText": "Conectou-se a '${NAME}'",
|
||||||
"connectedToPartyText": "Entrou na sala de ${NAME}!",
|
"connectedToPartyText": "Entrou na sala de ${NAME}!",
|
||||||
"connectingToPartyText": "Conectando...",
|
"connectingToPartyText": "Conectando...",
|
||||||
|
|
@ -1006,7 +1009,7 @@
|
||||||
"kickVoteStartedText": "Uma votação para expulsar ${NAME} foi iniciada.",
|
"kickVoteStartedText": "Uma votação para expulsar ${NAME} foi iniciada.",
|
||||||
"kickVoteText": "Votação para expulsar",
|
"kickVoteText": "Votação para expulsar",
|
||||||
"kickVotingDisabledText": "A votação para expulsar está desativado.",
|
"kickVotingDisabledText": "A votação para expulsar está desativado.",
|
||||||
"kickWithChatText": "Digite ${YES} no bate-papo para sim e ${NO} para não.",
|
"kickWithChatText": "Escreva ${YES} no chat para sim e ${NO} para não.",
|
||||||
"killsTallyText": "${COUNT} abates",
|
"killsTallyText": "${COUNT} abates",
|
||||||
"killsText": "Abates",
|
"killsText": "Abates",
|
||||||
"kioskWindow": {
|
"kioskWindow": {
|
||||||
|
|
@ -1132,7 +1135,7 @@
|
||||||
"ownFlagAtYourBaseWarning": "Sua própria bandeira deve estar\nem sua base para fazer um ponto!",
|
"ownFlagAtYourBaseWarning": "Sua própria bandeira deve estar\nem sua base para fazer um ponto!",
|
||||||
"packageModsEnabledErrorText": "Não pode jogar em rede enquanto local-package-mods estiverem ativados (veja Configurações > Avançado)",
|
"packageModsEnabledErrorText": "Não pode jogar em rede enquanto local-package-mods estiverem ativados (veja Configurações > Avançado)",
|
||||||
"partyWindow": {
|
"partyWindow": {
|
||||||
"chatMessageText": "Mensagem do bate-papo",
|
"chatMessageText": "Mensagem do chat",
|
||||||
"emptyText": "Sua sala está vazia",
|
"emptyText": "Sua sala está vazia",
|
||||||
"hostText": "(anfitrião)",
|
"hostText": "(anfitrião)",
|
||||||
"sendText": "Enviar",
|
"sendText": "Enviar",
|
||||||
|
|
@ -1217,7 +1220,7 @@
|
||||||
"purchasingText": "Comprando...",
|
"purchasingText": "Comprando...",
|
||||||
"quitGameText": "Sair do ${APP_NAME}?",
|
"quitGameText": "Sair do ${APP_NAME}?",
|
||||||
"quittingIn5SecondsText": "Saindo em 5 segundos...",
|
"quittingIn5SecondsText": "Saindo em 5 segundos...",
|
||||||
"randomPlayerNamesText": "João,Maria,Anderson,Lucas,Roberto,César,Felipe,Pedro,Zézinho,Jaílson,Hélvio,Plínio,Clara,Lorena,Beatriz,Wandernilson,Marcos,Michele,Taís,Florentina,Tadeu,Teodoro,Gabriel,Joelma,Chimbinha,Lula,Dilma,Leonardo,Irene,Samanta,Gioconda,Guilhermina,Guilherme,Frederico,Bartolomeu,Dionísio,Diógenes,Haroldo,Ronaldinho,Ricardo,Selma,Bruna,Vanderlei,Danilo,Celso,Vitória,Denise,Samuel,Daniel,Gigi,Manuel,Wiz,Gretchen,Creusa,Chico,Leôncio,Leônidas,Washington,Cleusa,José,Joane,Severino,Casé,Carlos,Davi,Bianca,Clautila,Dafne,Jorge,Sandra,Armando,Basílio,Rochele,Camila,Débora,Rafael,Jonatan,Clodomiro,Clodovil,Vera,Simão,Raíssa,Toni,Tânia,Regina,Bela,Max,Maximiliano,Claudinei,Cláudio,Luciana,Anália,Aparecida,Marcelo,Flávio,Emílio,Tiago,Hebe,Ana,Beth,Gugu,Vítor,Nílton,Maurício,Marciano,Belquior,Clemente,Rosa,Rose,Rosemar,Gabriela,Sérgio,Antônio,Ben,Ivan,jamim,Abreu,Luís,Elton,Fabiana,Waldir,Wilson,Tainá,Tainara,Xuxa,Sacha,Teotônio,Téo,Valdirene,Laurindo,Priscila,Joaquim,Estevão,Gilmar,Erick,Gilson,Romário,Dunga,Ludmila,Luciano,Gilvan,Tamara,Carla,Zezé,Fernando,Fernanda,Adegesto,Acheropita,Anatalino,Lino,Araci,Marluci,Eusébio,Darcília,Dignatario,Ernesto,Cássio,Conrado,Fábio,Heitor,Ivan,Murilo,Andressa,Mateus,Otávio,Helena,atuamãe,Laís,Lavínia,Leila,Letícia,Nair,Henrique,Lara,Diogo,Diego,Geniclécio,Serafim,Lisa,Inri,Eusébio,Gerônimo,Bernardo,Bernadete,Henriete,Eliete,Fudêncio,Peruíbe,Tomás,Tomashedisso,Giovana,Prieto,Gabriely,Suélen,Jamily,Jamil,Geraldo,Nazareth,Forníco,Ícaro,Breno,Bruno,Cilmara,Nilza,Caio,Borges,Cleimara,Janeclécio,Iram,Tico,Teco,Genilson,Marlos,William,Nando,Nanda,Isabel,Jamal,Elias,Félix,Caroline,Carolina,Vilma,Rafaely,Tonho,Túnica,Miguel,Cona,Jones,Juan,Anastácio",
|
"randomPlayerNamesText": "João,Maria,Anderson,Lucas,Roberto,César,Felipe,Pedro,Zézinho,Jaílson,Hélvio,Plínio,Clara,Lorena,Beatriz,Wandernilson,Marcos,Michele,Taís,Florentina,Tadeu,Teodoro,Gabriel,Joelma,Chimbinha,Lula,Dilma,Leonardo,Irene,Samanta,Gioconda,Guilhermina,Guilherme,Frederico,Bartolomeu,Dionísio,Diógenes,Haroldo,Ronaldinho,Ricardo,Selma,Bruna,Vanderlei,Danilo,Celso,Vitória,Denise,Samuel,Daniel,Gigi,Manuel,Wiz,Gretchen,Creusa,Chico,Leôncio,Leônidas,Washington,Cleusa,José,Joane,Severino,Casé,Carlos,Davi,Bianca,Clautila,Dafne,Jorge,Sandra,Armando,Basílio,Rochele,Camila,Débora,Rafael,Jonatan,Clodomiro,Clodovil,Vera,Simão,Raíssa,Toni,Tânia,Regina,Bela,Max,Maximiliano,Claudinei,Cláudio,Luciana,Anália,Aparecida,Marcelo,Flávio,Emílio,Tiago,Hebe,Ana,Beth,Gugu,Vítor,Nílton,Maurício,Marciano,Belquior,Clemente,Rosa,Rose,Rosemar,Gabriela,Sérgio,Antônio,Ben,Ivan,jamim,Abreu,Luís,Elton,Fabiana,Waldir,Wilson,Tainá,Tainara,Xuxa,Sacha,Teotônio,Téo,Valdirene,Laurindo,Priscila,Joaquim,Estevão,Gilmar,Erick,Gilson,Romário,Dunga,Ludmila,Luciano,Gilvan,Tamara,Carla,Zezé,Fernando,Fernanda,Adegesto,Acheropita,Anatalino,Lino,Araci,Marluci,Eusébio,Darcília,Dignatario,Ernesto,Cássio,Conrado,Fábio,Heitor,Ivan,Murilo,Andressa,Mateus,Otávio,Helena,Laís,Lavínia,Leila,Letícia,Nair,Henrique,Lara,Diogo,Diego,Geniclécio,Serafim,Lisa,Inri,Eusébio,Gerônimo,Bernardo,Bernadete,Henriete,Eliete,Fudêncio,Peruíbe,Tomás,Tomashedisso,Giovana,Prieto,Gabriely,Suélen,Jamily,Jamil,Geraldo,Nazareth,Forníco,Ícaro,Breno,Bruno,Cilmara,Nilza,Caio,Borges,Cleimara,Janeclécio,Iram,Tico,Teco,Genilson,Marlos,William,Nando,Nanda,Isabel,Jamal,Elias,Félix,Caroline,Carolina,Vilma,Rafaely,Tonho,Túnica,Miguel,Jones,Juan,Anastácio,Francisco,Xavier",
|
||||||
"randomText": "Aleatório",
|
"randomText": "Aleatório",
|
||||||
"rankText": "Classificação",
|
"rankText": "Classificação",
|
||||||
"ratingText": "Avaliação",
|
"ratingText": "Avaliação",
|
||||||
|
|
@ -1607,6 +1610,7 @@
|
||||||
"Dutch": "Holandês",
|
"Dutch": "Holandês",
|
||||||
"English": "Inglês",
|
"English": "Inglês",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipino",
|
||||||
"Finnish": "Finlandês",
|
"Finnish": "Finlandês",
|
||||||
"French": "Francês",
|
"French": "Francês",
|
||||||
"German": "Alemão",
|
"German": "Alemão",
|
||||||
|
|
@ -1627,6 +1631,7 @@
|
||||||
"Slovak": "Eslovaco",
|
"Slovak": "Eslovaco",
|
||||||
"Spanish": "Espanhol",
|
"Spanish": "Espanhol",
|
||||||
"Swedish": "Sueco",
|
"Swedish": "Sueco",
|
||||||
|
"Tamil": "tâmil",
|
||||||
"Thai": "Tailandês",
|
"Thai": "Tailandês",
|
||||||
"Turkish": "Turco",
|
"Turkish": "Turco",
|
||||||
"Ukrainian": "Ucraniano",
|
"Ukrainian": "Ucraniano",
|
||||||
|
|
|
||||||
1894
dist/ba_data/data/languages/romanian.json
vendored
1894
dist/ba_data/data/languages/romanian.json
vendored
File diff suppressed because it is too large
Load diff
13
dist/ba_data/data/languages/russian.json
vendored
13
dist/ba_data/data/languages/russian.json
vendored
|
|
@ -26,11 +26,13 @@
|
||||||
"signInInfoText": "Войдите в аккаунт, чтобы собирать билеты, \nсоревноваться онлайн и делиться успехами.",
|
"signInInfoText": "Войдите в аккаунт, чтобы собирать билеты, \nсоревноваться онлайн и делиться успехами.",
|
||||||
"signInText": "Войти",
|
"signInText": "Войти",
|
||||||
"signInWithDeviceInfoText": "(стандартный аккаунт только для этого устройства)",
|
"signInWithDeviceInfoText": "(стандартный аккаунт только для этого устройства)",
|
||||||
"signInWithDeviceText": "Войти с аккаунта устройства",
|
"signInWithDeviceText": "Войти через аккаунт устройства",
|
||||||
"signInWithGameCircleText": "Войти через Game Circle",
|
"signInWithGameCircleText": "Войти через Game Circle",
|
||||||
"signInWithGooglePlayText": "Войти через Google Play",
|
"signInWithGooglePlayText": "Войти через Google Play",
|
||||||
"signInWithTestAccountInfoText": "(устаревший тип аккаунта; в дальнейшем используйте аккаунт устройства)",
|
"signInWithTestAccountInfoText": "(устаревший тип аккаунта; в дальнейшем используйте аккаунт устройства)",
|
||||||
"signInWithTestAccountText": "Войти через тестовый аккаунт",
|
"signInWithTestAccountText": "Войти через тестовый аккаунт",
|
||||||
|
"signInWithV2InfoText": "(аккаунт, который работает на всех платформах)",
|
||||||
|
"signInWithV2Text": "Войти через аккаунт BombSquad",
|
||||||
"signOutText": "Выйти",
|
"signOutText": "Выйти",
|
||||||
"signingInText": "Вход...",
|
"signingInText": "Вход...",
|
||||||
"signingOutText": "Выход...",
|
"signingOutText": "Выход...",
|
||||||
|
|
@ -41,6 +43,7 @@
|
||||||
"titleText": "Аккаунт",
|
"titleText": "Аккаунт",
|
||||||
"unlinkAccountsInstructionsText": "Выберите аккаунт, который хотите отвязать",
|
"unlinkAccountsInstructionsText": "Выберите аккаунт, который хотите отвязать",
|
||||||
"unlinkAccountsText": "Отвязать аккаунты",
|
"unlinkAccountsText": "Отвязать аккаунты",
|
||||||
|
"v2LinkInstructionsText": "Используйте эту ссылку чтобы создать аккаунт или войти",
|
||||||
"viaAccount": "(через аккаунт ${NAME})",
|
"viaAccount": "(через аккаунт ${NAME})",
|
||||||
"youAreLoggedInAsText": "Вы зашли как:",
|
"youAreLoggedInAsText": "Вы зашли как:",
|
||||||
"youAreSignedInAsText": "Вы вошли как:"
|
"youAreSignedInAsText": "Вы вошли как:"
|
||||||
|
|
@ -947,8 +950,8 @@
|
||||||
"invitationsSentText": "Отправлено ${COUNT} приглашений.",
|
"invitationsSentText": "Отправлено ${COUNT} приглашений.",
|
||||||
"joinedPartyInstructionsText": "Кто-то вошел в ваше лобби.\nНажмите 'Играть' чтобы начать игру.",
|
"joinedPartyInstructionsText": "Кто-то вошел в ваше лобби.\nНажмите 'Играть' чтобы начать игру.",
|
||||||
"keyboardText": "Клавиатура",
|
"keyboardText": "Клавиатура",
|
||||||
"kickIdlePlayersKickedText": "${NAME} выкинут за бездействие.",
|
"kickIdlePlayersKickedText": "${NAME} исключён за бездействие.",
|
||||||
"kickIdlePlayersWarning1Text": "${NAME} будет выкинут через ${COUNT} секунд при бездействии.",
|
"kickIdlePlayersWarning1Text": "${NAME} будет исключён через ${COUNT} секунд при бездействии.",
|
||||||
"kickIdlePlayersWarning2Text": "(это можно выключить в Настройки -> Дополнительно)",
|
"kickIdlePlayersWarning2Text": "(это можно выключить в Настройки -> Дополнительно)",
|
||||||
"leftGameText": "Покинул '${NAME}'.",
|
"leftGameText": "Покинул '${NAME}'.",
|
||||||
"leftPartyText": "Вышел из лобби ${NAME}.",
|
"leftPartyText": "Вышел из лобби ${NAME}.",
|
||||||
|
|
@ -1198,7 +1201,7 @@
|
||||||
"purchasingText": "Покупка...",
|
"purchasingText": "Покупка...",
|
||||||
"quitGameText": "Выйти из ${APP_NAME}?",
|
"quitGameText": "Выйти из ${APP_NAME}?",
|
||||||
"quittingIn5SecondsText": "Выход через 5 секунд...",
|
"quittingIn5SecondsText": "Выход через 5 секунд...",
|
||||||
"randomPlayerNamesText": "Дима, Кузя, Вован, Маха, Русский, Какуля, Бибер, Борька, Няшка, Толян, Ержан",
|
"randomPlayerNamesText": "Дима, Кузя, Вован, Маха, Русский, Какуля, Бибер, Борька, Няшка, Толян, Ержан, Дибисяра, Вася, Морген, Серёга, Ваня, Кеша, Жорик, Стёпа, Эдгар, Циган",
|
||||||
"randomText": "Случайный",
|
"randomText": "Случайный",
|
||||||
"rankText": "Ранг",
|
"rankText": "Ранг",
|
||||||
"ratingText": "Рейтинг",
|
"ratingText": "Рейтинг",
|
||||||
|
|
@ -1583,6 +1586,7 @@
|
||||||
"Dutch": "Голландский",
|
"Dutch": "Голландский",
|
||||||
"English": "Английский",
|
"English": "Английский",
|
||||||
"Esperanto": "Эсперанто",
|
"Esperanto": "Эсперанто",
|
||||||
|
"Filipino": "Филипинский",
|
||||||
"Finnish": "Финский",
|
"Finnish": "Финский",
|
||||||
"French": "Французский",
|
"French": "Французский",
|
||||||
"German": "Немецкий",
|
"German": "Немецкий",
|
||||||
|
|
@ -1603,6 +1607,7 @@
|
||||||
"Slovak": "Словацкий",
|
"Slovak": "Словацкий",
|
||||||
"Spanish": "Испанский",
|
"Spanish": "Испанский",
|
||||||
"Swedish": "Шведский",
|
"Swedish": "Шведский",
|
||||||
|
"Tamil": "Тамильский",
|
||||||
"Thai": "Тайский",
|
"Thai": "Тайский",
|
||||||
"Turkish": "Турецкий",
|
"Turkish": "Турецкий",
|
||||||
"Ukrainian": "Украинский",
|
"Ukrainian": "Украинский",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/serbian.json
vendored
6
dist/ba_data/data/languages/serbian.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Пријави се преко Гугл Плеја",
|
"signInWithGooglePlayText": "Пријави се преко Гугл Плеја",
|
||||||
"signInWithTestAccountInfoText": "(налог за тестирање нових ствари које ће ускоро изаћи)",
|
"signInWithTestAccountInfoText": "(налог за тестирање нових ствари које ће ускоро изаћи)",
|
||||||
"signInWithTestAccountText": "Пријави се са тест профилом",
|
"signInWithTestAccountText": "Пријави се са тест профилом",
|
||||||
|
"signInWithV2InfoText": "(налог који функционише на свим платформама)",
|
||||||
|
"signInWithV2Text": "Улогуј се помоћу Bombsquad налога",
|
||||||
"signOutText": "Одјави се",
|
"signOutText": "Одјави се",
|
||||||
"signingInText": "Пријављивање...",
|
"signingInText": "Пријављивање...",
|
||||||
"signingOutText": "Одјављивање...",
|
"signingOutText": "Одјављивање...",
|
||||||
|
|
@ -38,6 +40,7 @@
|
||||||
"titleText": "Налог",
|
"titleText": "Налог",
|
||||||
"unlinkAccountsInstructionsText": "Изабери налог за раздвајање",
|
"unlinkAccountsInstructionsText": "Изабери налог за раздвајање",
|
||||||
"unlinkAccountsText": "Раздвоји налоге",
|
"unlinkAccountsText": "Раздвоји налоге",
|
||||||
|
"v2LinkInstructionsText": "Искористи овај линк да направиш налог или да се улогујеш.",
|
||||||
"viaAccount": "(преко налога ${NAME})",
|
"viaAccount": "(преко налога ${NAME})",
|
||||||
"youAreSignedInAsText": "Пријављен си као:"
|
"youAreSignedInAsText": "Пријављен си као:"
|
||||||
},
|
},
|
||||||
|
|
@ -498,6 +501,7 @@
|
||||||
"yourPowerRankingText": "Твој ранк:"
|
"yourPowerRankingText": "Твој ранк:"
|
||||||
},
|
},
|
||||||
"copyOfText": "Копирај \"${NAME}\"",
|
"copyOfText": "Копирај \"${NAME}\"",
|
||||||
|
"copyText": "Копирај",
|
||||||
"createEditPlayerText": "<Направи/измени играча>",
|
"createEditPlayerText": "<Направи/измени играча>",
|
||||||
"createText": "Направи",
|
"createText": "Направи",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1508,6 +1512,7 @@
|
||||||
"Dutch": "Холандски",
|
"Dutch": "Холандски",
|
||||||
"English": "Енглески",
|
"English": "Енглески",
|
||||||
"Esperanto": "Есперантски",
|
"Esperanto": "Есперантски",
|
||||||
|
"Filipino": "филипински",
|
||||||
"Finnish": "Фински",
|
"Finnish": "Фински",
|
||||||
"French": "Француски",
|
"French": "Француски",
|
||||||
"German": "Немачки",
|
"German": "Немачки",
|
||||||
|
|
@ -1528,6 +1533,7 @@
|
||||||
"Slovak": "Словачки",
|
"Slovak": "Словачки",
|
||||||
"Spanish": "Шпански",
|
"Spanish": "Шпански",
|
||||||
"Swedish": "Шведски",
|
"Swedish": "Шведски",
|
||||||
|
"Tamil": "тамилски",
|
||||||
"Thai": "Тхаи",
|
"Thai": "Тхаи",
|
||||||
"Turkish": "Турски",
|
"Turkish": "Турски",
|
||||||
"Ukrainian": "Украјински",
|
"Ukrainian": "Украјински",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/slovak.json
vendored
6
dist/ba_data/data/languages/slovak.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Príhlásit sa s Google Play",
|
"signInWithGooglePlayText": "Príhlásit sa s Google Play",
|
||||||
"signInWithTestAccountInfoText": "(starý typ účtu; v budúcnosti používajte účty zariadení)",
|
"signInWithTestAccountInfoText": "(starý typ účtu; v budúcnosti používajte účty zariadení)",
|
||||||
"signInWithTestAccountText": "Prihlásit sa s testovacím účtom",
|
"signInWithTestAccountText": "Prihlásit sa s testovacím účtom",
|
||||||
|
"signInWithV2InfoText": "(účet, ktorý funguje na všetkých platformách)",
|
||||||
|
"signInWithV2Text": "Prihláste sa pomocou účtu BombSquad",
|
||||||
"signOutText": "Odhlasujem",
|
"signOutText": "Odhlasujem",
|
||||||
"signingInText": "Prihlasujem",
|
"signingInText": "Prihlasujem",
|
||||||
"signingOutText": "Odhlasujem",
|
"signingOutText": "Odhlasujem",
|
||||||
|
|
@ -39,6 +41,7 @@
|
||||||
"titleText": "Konto",
|
"titleText": "Konto",
|
||||||
"unlinkAccountsInstructionsText": "Vyberte účet, s ktorým chcete zrušiť prepojenie",
|
"unlinkAccountsInstructionsText": "Vyberte účet, s ktorým chcete zrušiť prepojenie",
|
||||||
"unlinkAccountsText": "Zrušiť prepojenie účtov",
|
"unlinkAccountsText": "Zrušiť prepojenie účtov",
|
||||||
|
"v2LinkInstructionsText": "Pomocou tohto odkazu si vytvorte účet alebo sa prihláste.",
|
||||||
"viaAccount": "(cez účet ${NAME})",
|
"viaAccount": "(cez účet ${NAME})",
|
||||||
"youAreLoggedInAsText": "Si prihlásený ako:",
|
"youAreLoggedInAsText": "Si prihlásený ako:",
|
||||||
"youAreSignedInAsText": "Si prihlásený ako:"
|
"youAreSignedInAsText": "Si prihlásený ako:"
|
||||||
|
|
@ -498,6 +501,7 @@
|
||||||
"yourPowerRankingText": "Tvoje Umiestnenie:"
|
"yourPowerRankingText": "Tvoje Umiestnenie:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} Kópia",
|
"copyOfText": "${NAME} Kópia",
|
||||||
|
"copyText": "Kopírovať",
|
||||||
"createEditPlayerText": "<Vytvoriť/Upraviť Charakter>",
|
"createEditPlayerText": "<Vytvoriť/Upraviť Charakter>",
|
||||||
"createText": "Vytvoriť",
|
"createText": "Vytvoriť",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1498,6 +1502,7 @@
|
||||||
"Dutch": "Holandčina",
|
"Dutch": "Holandčina",
|
||||||
"English": "Angličtina",
|
"English": "Angličtina",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipínsky",
|
||||||
"Finnish": "Fínčina",
|
"Finnish": "Fínčina",
|
||||||
"French": "Francúžtina",
|
"French": "Francúžtina",
|
||||||
"German": "Nemčina",
|
"German": "Nemčina",
|
||||||
|
|
@ -1518,6 +1523,7 @@
|
||||||
"Slovak": "Slovenčina",
|
"Slovak": "Slovenčina",
|
||||||
"Spanish": "Španielčina",
|
"Spanish": "Španielčina",
|
||||||
"Swedish": "Švédčina",
|
"Swedish": "Švédčina",
|
||||||
|
"Tamil": "Tamilčina",
|
||||||
"Thai": "Thajské",
|
"Thai": "Thajské",
|
||||||
"Turkish": "Turečtina",
|
"Turkish": "Turečtina",
|
||||||
"Ukrainian": "Ukrainčina",
|
"Ukrainian": "Ukrainčina",
|
||||||
|
|
|
||||||
32
dist/ba_data/data/languages/spanish.json
vendored
32
dist/ba_data/data/languages/spanish.json
vendored
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"accountSettingsWindow": {
|
"accountSettingsWindow": {
|
||||||
"accountNameRules": "Los nombres no deben contener emoticonos o caracteres especiales",
|
"accountNameRules": "Los nombres no deben contener emojis o caracteres especiales",
|
||||||
"accountProfileText": "(Perfil de la cuenta)",
|
"accountProfileText": "(Perfil de la cuenta)",
|
||||||
"accountsText": "Cuentas",
|
"accountsText": "Cuentas",
|
||||||
"achievementProgressText": "Logros: ${COUNT} de ${TOTAL}",
|
"achievementProgressText": "Logros: ${COUNT} de ${TOTAL}",
|
||||||
"campaignProgressText": "Progreso de campaña [Dificil]: ${PROGRESS}",
|
"campaignProgressText": "Progreso de campaña [Dificil]: ${PROGRESS}",
|
||||||
"changeOncePerSeason": "Solamente puedes cambiarlo una vez por temporada.",
|
"changeOncePerSeason": "Solamente puedes cambiarlo una vez por temporada.",
|
||||||
"changeOncePerSeasonError": "Debes esperar hasta la siguiente temporada para cambiarlo de nuevo (${NUM} días)",
|
"changeOncePerSeasonError": "Debes esperar hasta la siguiente temporada para cambiarlo de nuevo (en ${NUM} día/s)",
|
||||||
"customName": "Nombre personalizado",
|
"customName": "Nombre personalizado",
|
||||||
"deviceSpecificAccountText": "Actualmente usando una cuenta específica de dispositivo: ${NAME}",
|
"deviceSpecificAccountText": "Actualmente usando una cuenta específica de dispositivo: ${NAME}",
|
||||||
"linkAccountsEnterCodeText": "Registrar Código",
|
"linkAccountsEnterCodeText": "Registrar Código",
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
"resetProgressConfirmNoAchievementsText": "Esto reiniciará tu progreso en el modo\ncooperativo y tus puntajes (A excepción de tus tickets).\nNo podrás recuperar los cambios. ¿Estás seguro?",
|
"resetProgressConfirmNoAchievementsText": "Esto reiniciará tu progreso en el modo\ncooperativo y tus puntajes (A excepción de tus tickets).\nNo podrás recuperar los cambios. ¿Estás seguro?",
|
||||||
"resetProgressConfirmText": "Esto reiniciará tus logros, récords\ny progreso en el modo cooperativo.\nLos cambios no se pueden deshacer.\n¿Estás seguro?",
|
"resetProgressConfirmText": "Esto reiniciará tus logros, récords\ny progreso en el modo cooperativo.\nLos cambios no se pueden deshacer.\n¿Estás seguro?",
|
||||||
"resetProgressText": "Reiniciar progreso",
|
"resetProgressText": "Reiniciar progreso",
|
||||||
"setAccountName": "Establecer nombre de cuenta",
|
"setAccountName": "Establecer nombre de la cuenta",
|
||||||
"setAccountNameDesc": "Selecciona el nombre a mostrar para tu cuenta. \nPuedes usar el nombre de tu cuenta asociada\no crear un nombre personalizado.",
|
"setAccountNameDesc": "Selecciona el nombre a mostrar para tu cuenta. \nPuedes usar el nombre de tu cuenta asociada\no crear un nombre personalizado.",
|
||||||
"signInInfoText": "Inicia sesión para obtener tickets, competir en línea\ny compartir tu progreso en otras plataformas.",
|
"signInInfoText": "Inicia sesión para obtener tickets, competir en línea\ny compartir tu progreso en otras plataformas.",
|
||||||
"signInText": "Iniciar sesión",
|
"signInText": "Iniciar sesión",
|
||||||
|
|
@ -29,8 +29,10 @@
|
||||||
"signInWithDeviceText": "Iniciar sesión con cuenta del dispositivo",
|
"signInWithDeviceText": "Iniciar sesión con cuenta del dispositivo",
|
||||||
"signInWithGameCircleText": "Iniciar sesión con Game Circle",
|
"signInWithGameCircleText": "Iniciar sesión con Game Circle",
|
||||||
"signInWithGooglePlayText": "Iniciar sesión con Google Play",
|
"signInWithGooglePlayText": "Iniciar sesión con Google Play",
|
||||||
"signInWithTestAccountInfoText": "(Cuenta de herencia, usa la cuenta del dispositivo para avanzar)",
|
"signInWithTestAccountInfoText": "(Cuenta de prueba, usa la cuenta del dispositivo para avanzar)",
|
||||||
"signInWithTestAccountText": "Registrarse con una Cuenta de Prueba",
|
"signInWithTestAccountText": "Registrarse con una Cuenta de Prueba",
|
||||||
|
"signInWithV2InfoText": "(una cuenta que funciona en todas las plataformas)",
|
||||||
|
"signInWithV2Text": "Inicie cesión con una cuenta de bosquad",
|
||||||
"signOutText": "Cerrar Sesión",
|
"signOutText": "Cerrar Sesión",
|
||||||
"signingInText": "Iniciando sesión...",
|
"signingInText": "Iniciando sesión...",
|
||||||
"signingOutText": "Cerrando sesión...",
|
"signingOutText": "Cerrando sesión...",
|
||||||
|
|
@ -41,6 +43,7 @@
|
||||||
"titleText": "Cuenta",
|
"titleText": "Cuenta",
|
||||||
"unlinkAccountsInstructionsText": "Selecciona una cuenta para dejar de enlazar con ella",
|
"unlinkAccountsInstructionsText": "Selecciona una cuenta para dejar de enlazar con ella",
|
||||||
"unlinkAccountsText": "Desenlazar cuentas.",
|
"unlinkAccountsText": "Desenlazar cuentas.",
|
||||||
|
"v2LinkInstructionsText": "Usa este encale para crearte una cuenta o para iniciar sesión",
|
||||||
"viaAccount": "(por cuenta ${NAME})",
|
"viaAccount": "(por cuenta ${NAME})",
|
||||||
"youAreLoggedInAsText": "Estás conectado como:",
|
"youAreLoggedInAsText": "Estás conectado como:",
|
||||||
"youAreSignedInAsText": "Has iniciado sesión como:"
|
"youAreSignedInAsText": "Has iniciado sesión como:"
|
||||||
|
|
@ -49,15 +52,15 @@
|
||||||
"achievementText": "Logro",
|
"achievementText": "Logro",
|
||||||
"achievements": {
|
"achievements": {
|
||||||
"Boom Goes the Dynamite": {
|
"Boom Goes the Dynamite": {
|
||||||
"description": "Elimina 3 enemigos con TNT",
|
"description": "Elimina 3 enemigos con una caja de TNT",
|
||||||
"descriptionComplete": "Eliminaste a 3 enemigos con TNT",
|
"descriptionComplete": "Eliminaste a 3 enemigos con una caja de TNT",
|
||||||
"descriptionFull": "Elimina 3 enemigos con TNT en ${LEVEL}",
|
"descriptionFull": "Elimina 3 enemigos con una caja de TNT en ${LEVEL}",
|
||||||
"descriptionFullComplete": "Eliminaste 3 enemigos con TNT en ${LEVEL}",
|
"descriptionFullComplete": "Eliminaste 3 enemigos con una caja de TNT en ${LEVEL}",
|
||||||
"name": "La dinamita hace Boom!"
|
"name": "La dinamita hace Boom!"
|
||||||
},
|
},
|
||||||
"Boxer": {
|
"Boxer": {
|
||||||
"description": "Gana sin usar bombas",
|
"description": "Gana sin usar bombas",
|
||||||
"descriptionComplete": "Ganaste sin usar bombas",
|
"descriptionComplete": "Ganaste sin usar ninguna bomba",
|
||||||
"descriptionFull": "Completa ${LEVEL} sin usar bombas",
|
"descriptionFull": "Completa ${LEVEL} sin usar bombas",
|
||||||
"descriptionFullComplete": "Completaste ${LEVEL} sin usar bombas",
|
"descriptionFullComplete": "Completaste ${LEVEL} sin usar bombas",
|
||||||
"name": "Boxeador"
|
"name": "Boxeador"
|
||||||
|
|
@ -68,7 +71,7 @@
|
||||||
"name": "Juego Doble"
|
"name": "Juego Doble"
|
||||||
},
|
},
|
||||||
"Flawless Victory": {
|
"Flawless Victory": {
|
||||||
"description": "Gana sin ser golpeado",
|
"description": "Gana sin haber recibido ningún golpe",
|
||||||
"descriptionComplete": "Ganaste sin ser golpeado",
|
"descriptionComplete": "Ganaste sin ser golpeado",
|
||||||
"descriptionFull": "Gana ${LEVEL} sin ser golpeado",
|
"descriptionFull": "Gana ${LEVEL} sin ser golpeado",
|
||||||
"descriptionFullComplete": "Ganaste ${LEVEL} sin ser golpeado",
|
"descriptionFullComplete": "Ganaste ${LEVEL} sin ser golpeado",
|
||||||
|
|
@ -1250,7 +1253,7 @@
|
||||||
"start": "Empezar",
|
"start": "Empezar",
|
||||||
"version_mismatch": "Las versiones no coinciden.\nAsegurate que BombSquad y BombSquad Remote\nestán actuizados e intenta de nuevo."
|
"version_mismatch": "Las versiones no coinciden.\nAsegurate que BombSquad y BombSquad Remote\nestán actuizados e intenta de nuevo."
|
||||||
},
|
},
|
||||||
"removeInGameAdsText": "Desbloquea \"${PRO}\" en la tienda para remover la publicidad del juego.",
|
"removeInGameAdsText": "Desbloquea \"${PRO}\" en la tienda para quitar la publicidad del juego.",
|
||||||
"renameText": "Renombrar",
|
"renameText": "Renombrar",
|
||||||
"replayEndText": "Terminar Repetición",
|
"replayEndText": "Terminar Repetición",
|
||||||
"replayNameDefaultText": "Repetición Último Juego",
|
"replayNameDefaultText": "Repetición Último Juego",
|
||||||
|
|
@ -1598,6 +1601,7 @@
|
||||||
"Dutch": "Holandés",
|
"Dutch": "Holandés",
|
||||||
"English": "Inglés",
|
"English": "Inglés",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "filipino",
|
||||||
"Finnish": "Finlandés",
|
"Finnish": "Finlandés",
|
||||||
"French": "Francés",
|
"French": "Francés",
|
||||||
"German": "Alemán",
|
"German": "Alemán",
|
||||||
|
|
@ -1905,7 +1909,7 @@
|
||||||
"voteDelayText": "No puedes iniciar otra votación por ${NUMBER} segundos.",
|
"voteDelayText": "No puedes iniciar otra votación por ${NUMBER} segundos.",
|
||||||
"voteInProgressText": "Ya hay una votación en progreso.",
|
"voteInProgressText": "Ya hay una votación en progreso.",
|
||||||
"votedAlreadyText": "Ya has votado.",
|
"votedAlreadyText": "Ya has votado.",
|
||||||
"votesNeededText": "Requiere ${NUMBER} votos",
|
"votesNeededText": "Se requiere ${NUMBER} votos",
|
||||||
"vsText": "vs.",
|
"vsText": "vs.",
|
||||||
"waitingForHostText": "(esperando a que ${HOST} continúe)",
|
"waitingForHostText": "(esperando a que ${HOST} continúe)",
|
||||||
"waitingForLocalPlayersText": "Esperando jugadores locales...",
|
"waitingForLocalPlayersText": "Esperando jugadores locales...",
|
||||||
|
|
@ -1956,7 +1960,7 @@
|
||||||
"winsPlayerText": "¡${NAME} Gana!",
|
"winsPlayerText": "¡${NAME} Gana!",
|
||||||
"winsTeamText": "¡${NAME} Gana!!",
|
"winsTeamText": "¡${NAME} Gana!!",
|
||||||
"winsText": "¡${NAME} Gana!",
|
"winsText": "¡${NAME} Gana!",
|
||||||
"worldScoresUnavailableText": "Puntuaciones mundiales no disponibles.",
|
"worldScoresUnavailableText": "Puntuaciones globales no disponibles.",
|
||||||
"worldsBestScoresText": "Mejores puntuaciones Mundiales",
|
"worldsBestScoresText": "Mejores puntuaciones Mundiales",
|
||||||
"worldsBestTimesText": "Mejores tiempos Mundiales",
|
"worldsBestTimesText": "Mejores tiempos Mundiales",
|
||||||
"xbox360ControllersWindow": {
|
"xbox360ControllersWindow": {
|
||||||
|
|
@ -1965,7 +1969,7 @@
|
||||||
"macInstructions2TextScale": 0.76,
|
"macInstructions2TextScale": 0.76,
|
||||||
"macInstructionsText": "Para usar controles de Xbox 360, necesitarás instalar\nel controlador para Mac disponible en el siguiente enlace.\nFunciona con controles con cable e inalámbricos.",
|
"macInstructionsText": "Para usar controles de Xbox 360, necesitarás instalar\nel controlador para Mac disponible en el siguiente enlace.\nFunciona con controles con cable e inalámbricos.",
|
||||||
"macInstructionsTextScale": 0.8,
|
"macInstructionsTextScale": 0.8,
|
||||||
"ouyaInstructionsText": "Para usar controles con cable de Xbox 360 con BombSquad, simplemente\nconéctalos al puerto USB de tu dispositivo. Puedes usar un concentrador USB\npara conectar múltiples controles.\n\nPara usar controles inalámbricos, necesitarás un receptor inalámbrico,\ndisponible como parte del paquete “Xbox 360 wireless Controller for\nWindows”, o vendido por separado. Cada receptor se conecta a un puerto\nUSB y permite que conectes hasta cuatro controles inalámbricos.",
|
"ouyaInstructionsText": "Para usar controles con cable de Xbox 360 con BombSquad, simplemente\nconéctalos al puerto USB de tu dispositivo. Puedes usar un conector USB\npara conectar múltiples controles.\n\nPara usar controles inalámbricos, necesitarás un receptor inalámbrico,\ndisponible como parte del paquete “Xbox 360 wireless Controller for\nWindows”, o vendido por separado. Cada receptor se conecta a un puerto\nUSB y permite que conectes hasta cuatro controles inalámbricos.",
|
||||||
"ouyaInstructionsTextScale": 0.8,
|
"ouyaInstructionsTextScale": 0.8,
|
||||||
"titleText": "Controles de Xbox 360 con ${APP_NAME}:"
|
"titleText": "Controles de Xbox 360 con ${APP_NAME}:"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
18
dist/ba_data/data/languages/swedish.json
vendored
18
dist/ba_data/data/languages/swedish.json
vendored
|
|
@ -30,6 +30,8 @@
|
||||||
"signInWithGooglePlayText": "Logga in med Google Play",
|
"signInWithGooglePlayText": "Logga in med Google Play",
|
||||||
"signInWithTestAccountInfoText": "(allmän konto typ; använd enhets konton för att fortsätta)",
|
"signInWithTestAccountInfoText": "(allmän konto typ; använd enhets konton för att fortsätta)",
|
||||||
"signInWithTestAccountText": "Logga in med ett testkonto",
|
"signInWithTestAccountText": "Logga in med ett testkonto",
|
||||||
|
"signInWithV2InfoText": "(ett konto som fungerar på alla plattformar)",
|
||||||
|
"signInWithV2Text": "Logga in med ett BombSquad-konto",
|
||||||
"signOutText": "Logga Ut",
|
"signOutText": "Logga Ut",
|
||||||
"signingInText": "Loggar in...",
|
"signingInText": "Loggar in...",
|
||||||
"signingOutText": "Loggar ut...",
|
"signingOutText": "Loggar ut...",
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
"titleText": "Konto",
|
"titleText": "Konto",
|
||||||
"unlinkAccountsInstructionsText": "Välj ett konto att avlänka",
|
"unlinkAccountsInstructionsText": "Välj ett konto att avlänka",
|
||||||
"unlinkAccountsText": "Avlänka Konton",
|
"unlinkAccountsText": "Avlänka Konton",
|
||||||
|
"v2LinkInstructionsText": "Använd den här länken för att skapa ett konto eller logga in.",
|
||||||
"viaAccount": "(via konto ${NAME})",
|
"viaAccount": "(via konto ${NAME})",
|
||||||
"youAreLoggedInAsText": "Du är inloggad som:",
|
"youAreLoggedInAsText": "Du är inloggad som:",
|
||||||
"youAreSignedInAsText": "Du är inloggad som:"
|
"youAreSignedInAsText": "Du är inloggad som:"
|
||||||
|
|
@ -363,6 +366,9 @@
|
||||||
"cancelText": "Avbryt",
|
"cancelText": "Avbryt",
|
||||||
"cantConfigureDeviceText": "Tyvärr, ${DEVICE} är inte konfigurerbar",
|
"cantConfigureDeviceText": "Tyvärr, ${DEVICE} är inte konfigurerbar",
|
||||||
"challengeEndedText": "Denna utmaning är avslutad.",
|
"challengeEndedText": "Denna utmaning är avslutad.",
|
||||||
|
"chatMuteText": "Stänga av chatten",
|
||||||
|
"chatMutedText": "Chatt dämpad",
|
||||||
|
"chatUnMuteText": "Avsluta chatt",
|
||||||
"choosingPlayerText": "<väljer spelare>",
|
"choosingPlayerText": "<väljer spelare>",
|
||||||
"completeThisLevelToProceedText": "Du måste klara\ndenna nivå för att fortsätta!",
|
"completeThisLevelToProceedText": "Du måste klara\ndenna nivå för att fortsätta!",
|
||||||
"completionBonusText": "Slutbonus",
|
"completionBonusText": "Slutbonus",
|
||||||
|
|
@ -552,6 +558,7 @@
|
||||||
"defaultNewTeamGameListNameText": "Mina Lagspel",
|
"defaultNewTeamGameListNameText": "Mina Lagspel",
|
||||||
"defaultTeamGameListNameText": "Standard Lagspel",
|
"defaultTeamGameListNameText": "Standard Lagspel",
|
||||||
"deleteText": "Radera",
|
"deleteText": "Radera",
|
||||||
|
"demoText": "Demo",
|
||||||
"denyText": "Neka",
|
"denyText": "Neka",
|
||||||
"desktopResText": "Skrivbordsupplösning",
|
"desktopResText": "Skrivbordsupplösning",
|
||||||
"difficultyEasyText": "Lätt",
|
"difficultyEasyText": "Lätt",
|
||||||
|
|
@ -616,7 +623,7 @@
|
||||||
"duplicateText": "Duplicera\nSoundtrack",
|
"duplicateText": "Duplicera\nSoundtrack",
|
||||||
"editSoundtrackText": "Soundtrack Editor",
|
"editSoundtrackText": "Soundtrack Editor",
|
||||||
"editText": "Redigera\nSoundtrack",
|
"editText": "Redigera\nSoundtrack",
|
||||||
"fetchingITunesText": "hämtar iTunes spellistor...",
|
"fetchingITunesText": "hämtar spellistor från Music App...",
|
||||||
"musicVolumeZeroWarning": "Varning: Musikvolym är satt till 0",
|
"musicVolumeZeroWarning": "Varning: Musikvolym är satt till 0",
|
||||||
"nameText": "Namn",
|
"nameText": "Namn",
|
||||||
"newSoundtrackNameText": "Mitt Soundtrack ${COUNT}",
|
"newSoundtrackNameText": "Mitt Soundtrack ${COUNT}",
|
||||||
|
|
@ -628,7 +635,7 @@
|
||||||
"testText": "test",
|
"testText": "test",
|
||||||
"titleText": "Soundtrack",
|
"titleText": "Soundtrack",
|
||||||
"useDefaultGameMusicText": "Standard Spelmusik",
|
"useDefaultGameMusicText": "Standard Spelmusik",
|
||||||
"useITunesPlaylistText": "iTunes Spellista",
|
"useITunesPlaylistText": "Musik-app spellista",
|
||||||
"useMusicFileText": "Musikfil (mp3, etc)",
|
"useMusicFileText": "Musikfil (mp3, etc)",
|
||||||
"useMusicFolderText": "Mappnamn för Musikfiler"
|
"useMusicFolderText": "Mappnamn för Musikfiler"
|
||||||
},
|
},
|
||||||
|
|
@ -652,6 +659,7 @@
|
||||||
"titleFolderText": "Välj en Mapp",
|
"titleFolderText": "Välj en Mapp",
|
||||||
"useThisFolderButtonText": "Använd Denna Mapp"
|
"useThisFolderButtonText": "Använd Denna Mapp"
|
||||||
},
|
},
|
||||||
|
"filterText": "Filter",
|
||||||
"finalScoreText": "Slutgiltig Poäng",
|
"finalScoreText": "Slutgiltig Poäng",
|
||||||
"finalScoresText": "Slutgiltiga Poäng",
|
"finalScoresText": "Slutgiltiga Poäng",
|
||||||
"finalTimeText": "Slutgiltig Tid",
|
"finalTimeText": "Slutgiltig Tid",
|
||||||
|
|
@ -702,11 +710,15 @@
|
||||||
"bluetoothJoinText": "Anslut över Bluetooth",
|
"bluetoothJoinText": "Anslut över Bluetooth",
|
||||||
"bluetoothText": "Bluetooth",
|
"bluetoothText": "Bluetooth",
|
||||||
"checkingText": "kontrollerar...",
|
"checkingText": "kontrollerar...",
|
||||||
|
"copyCodeConfirmText": "Koden har kopierats till urklipp.",
|
||||||
|
"copyCodeText": "Kopiera kod",
|
||||||
"dedicatedServerInfoText": "För bästa resultat, skapa en dedikerad server. Gå till bombsquadgame.com/server för att lära dig hur.",
|
"dedicatedServerInfoText": "För bästa resultat, skapa en dedikerad server. Gå till bombsquadgame.com/server för att lära dig hur.",
|
||||||
"disconnectClientsText": "Detta gör att ${COUNT} spelare kopplas \nifrån ditt sällskap. Är du säker?",
|
"disconnectClientsText": "Detta gör att ${COUNT} spelare kopplas \nifrån ditt sällskap. Är du säker?",
|
||||||
"earnTicketsForRecommendingAmountText": "Vänner kommer få ${COUNT} biljetter om dom testar spelet\n(och du kommer få ${YOU_COUNT} för varje person som testar)",
|
"earnTicketsForRecommendingAmountText": "Vänner kommer få ${COUNT} biljetter om dom testar spelet\n(och du kommer få ${YOU_COUNT} för varje person som testar)",
|
||||||
"earnTicketsForRecommendingText": "Dela spelet med andra\nOch få fribiljetter...",
|
"earnTicketsForRecommendingText": "Dela spelet med andra\nOch få fribiljetter...",
|
||||||
"emailItText": "Mejla Det",
|
"emailItText": "Mejla Det",
|
||||||
|
"favoritesSaveText": "Spara som favorit",
|
||||||
|
"favoritesText": "Favoriter",
|
||||||
"friendHasSentPromoCodeText": "${COUNT} ${APP_NAME}-biljetter från ${NAME}",
|
"friendHasSentPromoCodeText": "${COUNT} ${APP_NAME}-biljetter från ${NAME}",
|
||||||
"friendPromoCodeAwardText": "Du kommer få ${COUNT} biljetter varje gång den används.",
|
"friendPromoCodeAwardText": "Du kommer få ${COUNT} biljetter varje gång den används.",
|
||||||
"friendPromoCodeExpireText": "Den här koden kommer sluta fungera om ${EXPIRE_HOURS} timmar och fungerar bara för nya spelare.",
|
"friendPromoCodeExpireText": "Den här koden kommer sluta fungera om ${EXPIRE_HOURS} timmar och fungerar bara för nya spelare.",
|
||||||
|
|
@ -1725,7 +1737,7 @@
|
||||||
"macInstructions2Text": "För att använda kontrollen trådlöst behöver du en mottagare \nsom kommer med 'Xbox 360 kontrollen för Windows'\nEn mottagare gör det möjligt för up till 4 kontroller.\n\nViktigt: 3:e part mottagare fungerar ej med denna drivrutin;\nse till att det står 'Microsoft', inte 'XBOX 360' på mottagaren.\nMicrosoft säljer inte längre dessa separat, så du behöver köpa\nen kontroll eller söka efter en på Ebay.\n\nOm du finner detta användbart, överväg gärna att donera till\nutvecklaren av drivrutinen på hans sida.",
|
"macInstructions2Text": "För att använda kontrollen trådlöst behöver du en mottagare \nsom kommer med 'Xbox 360 kontrollen för Windows'\nEn mottagare gör det möjligt för up till 4 kontroller.\n\nViktigt: 3:e part mottagare fungerar ej med denna drivrutin;\nse till att det står 'Microsoft', inte 'XBOX 360' på mottagaren.\nMicrosoft säljer inte längre dessa separat, så du behöver köpa\nen kontroll eller söka efter en på Ebay.\n\nOm du finner detta användbart, överväg gärna att donera till\nutvecklaren av drivrutinen på hans sida.",
|
||||||
"macInstructionsText": "För att använda Xbox 360 kontroller behöver du\ninstallera Mac drivrutinen som är tillgänglig via\nlänken nedanför. Den fungerar både med och utan sladd",
|
"macInstructionsText": "För att använda Xbox 360 kontroller behöver du\ninstallera Mac drivrutinen som är tillgänglig via\nlänken nedanför. Den fungerar både med och utan sladd",
|
||||||
"ouyaInstructionsText": "Allt du behöver göra för att använda trådade Xbox 360-kontroller är att \nkoppla in dem i USB-porten. Du kan använda en USB-hub \nför att koppla in fler kontroller.\n\nFör att använda trådlösa kontroller behöver du en trådlös mottagare, \ndessa ingår om man köper en \"Xbox 360 Wireless Controller for Windows\" \nmen säljs också separat. Varje mottagare kopplas in i en USB-port \noch möjliggör användandet av upp till fyra stycken trådlösa kontroller.",
|
"ouyaInstructionsText": "Allt du behöver göra för att använda trådade Xbox 360-kontroller är att \nkoppla in dem i USB-porten. Du kan använda en USB-hub \nför att koppla in fler kontroller.\n\nFör att använda trådlösa kontroller behöver du en trådlös mottagare, \ndessa ingår om man köper en \"Xbox 360 Wireless Controller for Windows\" \nmen säljs också separat. Varje mottagare kopplas in i en USB-port \noch möjliggör användandet av upp till fyra stycken trådlösa kontroller.",
|
||||||
"titleText": "Använd Xbox 360-kontroller med BombSquad:"
|
"titleText": "Använda Xbox 360-kontroller med ${APP_NAME}:"
|
||||||
},
|
},
|
||||||
"yesAllowText": "Ja, Tillåt!",
|
"yesAllowText": "Ja, Tillåt!",
|
||||||
"yourBestScoresText": "Dina Bästa Poäng",
|
"yourBestScoresText": "Dina Bästa Poäng",
|
||||||
|
|
|
||||||
8
dist/ba_data/data/languages/tamil.json
vendored
8
dist/ba_data/data/languages/tamil.json
vendored
|
|
@ -27,6 +27,8 @@
|
||||||
"signInWithGooglePlayText": "Google Play உடன் உள்நுழைக",
|
"signInWithGooglePlayText": "Google Play உடன் உள்நுழைக",
|
||||||
"signInWithTestAccountInfoText": "(மரபு கணக்கு வகை; முன்னோக்கி செல்லும் சாதனக் கணக்குகளைப் பயன்படுத்தவும்)",
|
"signInWithTestAccountInfoText": "(மரபு கணக்கு வகை; முன்னோக்கி செல்லும் சாதனக் கணக்குகளைப் பயன்படுத்தவும்)",
|
||||||
"signInWithTestAccountText": "சோதனைக் கணக்கில் உள்நுழைக",
|
"signInWithTestAccountText": "சோதனைக் கணக்கில் உள்நுழைக",
|
||||||
|
"signInWithV2InfoText": "(அனைத்து தளங்களிலும் செயல்படும் கணக்கு)",
|
||||||
|
"signInWithV2Text": "BombSquad கணக்கில் உள்நுழையவும்",
|
||||||
"signOutText": "வெளியேறு",
|
"signOutText": "வெளியேறு",
|
||||||
"signingInText": "புகுபதிகை நடைபெறுகிறது...",
|
"signingInText": "புகுபதிகை நடைபெறுகிறது...",
|
||||||
"signingOutText": "விடுபதிகை நடைபெறுகிறது...",
|
"signingOutText": "விடுபதிகை நடைபெறுகிறது...",
|
||||||
|
|
@ -34,6 +36,7 @@
|
||||||
"titleText": "கணக்கு",
|
"titleText": "கணக்கு",
|
||||||
"unlinkAccountsInstructionsText": "இணைப்பை நீக்குவதற்கான கணக்கைத் தேர்ந்தெடுக்கவும்",
|
"unlinkAccountsInstructionsText": "இணைப்பை நீக்குவதற்கான கணக்கைத் தேர்ந்தெடுக்கவும்",
|
||||||
"unlinkAccountsText": "கணக்கை நீக்க",
|
"unlinkAccountsText": "கணக்கை நீக்க",
|
||||||
|
"v2LinkInstructionsText": "கணக்கை உருவாக்க அல்லது உள்நுழைய இந்த இணைப்பைப் பயன்படுத்தவும்.",
|
||||||
"viaAccount": "${NAME} கணக்கின் வழியாக",
|
"viaAccount": "${NAME} கணக்கின் வழியாக",
|
||||||
"youAreSignedInAsText": "நீங்கள் உள்நுழைந்துள்ளீர்கள்"
|
"youAreSignedInAsText": "நீங்கள் உள்நுழைந்துள்ளீர்கள்"
|
||||||
},
|
},
|
||||||
|
|
@ -494,6 +497,7 @@
|
||||||
"yourPowerRankingText": "உங்கள் சக்தி தரவரிசை:"
|
"yourPowerRankingText": "உங்கள் சக்தி தரவரிசை:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} பிரதி",
|
"copyOfText": "${NAME} பிரதி",
|
||||||
|
"copyText": "நகல்",
|
||||||
"createEditPlayerText": "<பிளேயரை உருவாக்கவும்/திருத்தவும்>",
|
"createEditPlayerText": "<பிளேயரை உருவாக்கவும்/திருத்தவும்>",
|
||||||
"createText": "உருவாக்கு",
|
"createText": "உருவாக்கு",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -952,7 +956,7 @@
|
||||||
"singlePlayerExamplesText": "ஒற்றை வீரர் / கூட்டுறவு உதாரணங்கள்",
|
"singlePlayerExamplesText": "ஒற்றை வீரர் / கூட்டுறவு உதாரணங்கள்",
|
||||||
"versusExamplesText": "வெர்சஸ் உதாரணங்கள்"
|
"versusExamplesText": "வெர்சஸ் உதாரணங்கள்"
|
||||||
},
|
},
|
||||||
"languageSetText": "மொழி இப்போது \"${LANGUAGE}\".",
|
"languageSetText": "மொழி இப்போது \"${LANGUAGE}\" இல் இருக்கிறது.",
|
||||||
"lapNumberText": "சுற்று ${CURRENT}/${TOTAL}",
|
"lapNumberText": "சுற்று ${CURRENT}/${TOTAL}",
|
||||||
"lastGamesText": "(கடைசி ${COUNT} விளையாட்டுகள்)",
|
"lastGamesText": "(கடைசி ${COUNT} விளையாட்டுகள்)",
|
||||||
"leaderboardsText": "லீடர்போர்டுகள்",
|
"leaderboardsText": "லீடர்போர்டுகள்",
|
||||||
|
|
@ -1497,6 +1501,7 @@
|
||||||
"Dutch": "டச்",
|
"Dutch": "டச்",
|
||||||
"English": "ஆங்கிலம்",
|
"English": "ஆங்கிலம்",
|
||||||
"Esperanto": "எசபராண்டோ",
|
"Esperanto": "எசபராண்டோ",
|
||||||
|
"Filipino": "பிலிபினோ",
|
||||||
"Finnish": "பின்னிஷ்",
|
"Finnish": "பின்னிஷ்",
|
||||||
"French": "பிரெஞ்ச்",
|
"French": "பிரெஞ்ச்",
|
||||||
"German": "ஜெர்மன்",
|
"German": "ஜெர்மன்",
|
||||||
|
|
@ -1517,6 +1522,7 @@
|
||||||
"Slovak": "ஸ்லோவக்",
|
"Slovak": "ஸ்லோவக்",
|
||||||
"Spanish": "ஸ்பானிஷ்",
|
"Spanish": "ஸ்பானிஷ்",
|
||||||
"Swedish": "ஸ்வீடிஷ்",
|
"Swedish": "ஸ்வீடிஷ்",
|
||||||
|
"Tamil": "தமிழ்",
|
||||||
"Thai": "தாய்",
|
"Thai": "தாய்",
|
||||||
"Turkish": "டர்கிஷ்",
|
"Turkish": "டர்கிஷ்",
|
||||||
"Ukrainian": "உக்ரைனியன்",
|
"Ukrainian": "உக்ரைனியன்",
|
||||||
|
|
|
||||||
10
dist/ba_data/data/languages/thai.json
vendored
10
dist/ba_data/data/languages/thai.json
vendored
|
|
@ -28,6 +28,8 @@
|
||||||
"signInWithGooglePlayText": "ลงชื่อเข้าใช้ด้วยบัญชี Google Play",
|
"signInWithGooglePlayText": "ลงชื่อเข้าใช้ด้วยบัญชี Google Play",
|
||||||
"signInWithTestAccountInfoText": "(บัญชีทดลอง;เลือกตัวเลือกนี้เพื่อไปต่อ)",
|
"signInWithTestAccountInfoText": "(บัญชีทดลอง;เลือกตัวเลือกนี้เพื่อไปต่อ)",
|
||||||
"signInWithTestAccountText": "ลงชื่อเข้าใช้เพื่อทดลอง",
|
"signInWithTestAccountText": "ลงชื่อเข้าใช้เพื่อทดลอง",
|
||||||
|
"signInWithV2InfoText": "(บัญชีที่ใช้งานได้กับทุกแพลตฟอร์ม)",
|
||||||
|
"signInWithV2Text": "ลงชื่อเข้าใช้ด้วยบัญชี BombSquad",
|
||||||
"signOutText": "ออกจากระบบ",
|
"signOutText": "ออกจากระบบ",
|
||||||
"signingInText": "กำลังลงชื่อเข้าใช้...",
|
"signingInText": "กำลังลงชื่อเข้าใช้...",
|
||||||
"signingOutText": "กำลังออกจากระบบ...",
|
"signingOutText": "กำลังออกจากระบบ...",
|
||||||
|
|
@ -35,6 +37,7 @@
|
||||||
"titleText": "บัญชี",
|
"titleText": "บัญชี",
|
||||||
"unlinkAccountsInstructionsText": "เลือกบัญชีที่จะยกเลิกการเชื่อมโยง",
|
"unlinkAccountsInstructionsText": "เลือกบัญชีที่จะยกเลิกการเชื่อมโยง",
|
||||||
"unlinkAccountsText": "ยกเลิกการเชื่อมโยงบัญชี",
|
"unlinkAccountsText": "ยกเลิกการเชื่อมโยงบัญชี",
|
||||||
|
"v2LinkInstructionsText": "ใช้ลิงก์นี้เพื่อสร้างบัญชีหรือลงชื่อเข้าใช้",
|
||||||
"viaAccount": "ผ่านบัญชี ${NAME}",
|
"viaAccount": "ผ่านบัญชี ${NAME}",
|
||||||
"youAreSignedInAsText": "คุณลงชื่อเข้าใช้ในบัญชี:"
|
"youAreSignedInAsText": "คุณลงชื่อเข้าใช้ในบัญชี:"
|
||||||
},
|
},
|
||||||
|
|
@ -493,6 +496,7 @@
|
||||||
"yourPowerRankingText": "อันดับของคุณ:"
|
"yourPowerRankingText": "อันดับของคุณ:"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} ที่ถูกคัดลอก",
|
"copyOfText": "${NAME} ที่ถูกคัดลอก",
|
||||||
|
"copyText": "คัดลอก",
|
||||||
"createEditPlayerText": "<สร้าง/แก้ไข ผู้เล่น>",
|
"createEditPlayerText": "<สร้าง/แก้ไข ผู้เล่น>",
|
||||||
"createText": "สร้าง",
|
"createText": "สร้าง",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1493,11 +1497,12 @@
|
||||||
"Dutch": "ภาษาดัตช์",
|
"Dutch": "ภาษาดัตช์",
|
||||||
"English": "ภาษาอังกฤษ",
|
"English": "ภาษาอังกฤษ",
|
||||||
"Esperanto": "ภาษาเอสเปรันโต",
|
"Esperanto": "ภาษาเอสเปรันโต",
|
||||||
|
"Filipino": "ภาษาฟิลิปปินส์",
|
||||||
"Finnish": "ภาษาฟินแลนด์",
|
"Finnish": "ภาษาฟินแลนด์",
|
||||||
"French": "ภาษาฝรั่งเศส",
|
"French": "ภาษาฝรั่งเศส",
|
||||||
"German": "ภาษาเยอรมัน",
|
"German": "ภาษาเยอรมัน",
|
||||||
"Gibberish": "Gibberish",
|
"Gibberish": "พูดไรสาระ",
|
||||||
"Greek": "กรีก",
|
"Greek": "ภาษากรีก",
|
||||||
"Hindi": "ภาษาฮินดู",
|
"Hindi": "ภาษาฮินดู",
|
||||||
"Hungarian": "ภาษาฮังการี",
|
"Hungarian": "ภาษาฮังการี",
|
||||||
"Indonesian": "ภาษาอินโดนีเซีย",
|
"Indonesian": "ภาษาอินโดนีเซีย",
|
||||||
|
|
@ -1513,6 +1518,7 @@
|
||||||
"Slovak": "ภาษาสโลวัก",
|
"Slovak": "ภาษาสโลวัก",
|
||||||
"Spanish": "ภาษาสเปน",
|
"Spanish": "ภาษาสเปน",
|
||||||
"Swedish": "ภาษาสวีเดน",
|
"Swedish": "ภาษาสวีเดน",
|
||||||
|
"Tamil": "ภาษาทมิฬ",
|
||||||
"Thai": "ภาษาไทย",
|
"Thai": "ภาษาไทย",
|
||||||
"Turkish": "ภาษาตุรกี",
|
"Turkish": "ภาษาตุรกี",
|
||||||
"Ukrainian": "ยูเครน",
|
"Ukrainian": "ยูเครน",
|
||||||
|
|
|
||||||
10
dist/ba_data/data/languages/turkish.json
vendored
10
dist/ba_data/data/languages/turkish.json
vendored
|
|
@ -15,7 +15,7 @@
|
||||||
"linkAccountsInstructionsText": "İki hesabı birbirine bağlamak için, birinde kod oluşturun\nve o kodu diğerinde girin.\nİlerlemeler ve envanterler birleşecektir.\n${COUNT} taneye kadar hesap bağlayabilirsiniz.\n\nÖNEMLİ: Yalnızca kendi hesaplarını bağla!\nEğer arkadaşınla hesapları bağlarsan\naynı anda oynayamayacaksınız!\n\nAyrıca: bu işlem şu anda geri alınamaz, yani dikkatli ol!",
|
"linkAccountsInstructionsText": "İki hesabı birbirine bağlamak için, birinde kod oluşturun\nve o kodu diğerinde girin.\nİlerlemeler ve envanterler birleşecektir.\n${COUNT} taneye kadar hesap bağlayabilirsiniz.\n\nÖNEMLİ: Yalnızca kendi hesaplarını bağla!\nEğer arkadaşınla hesapları bağlarsan\naynı anda oynayamayacaksınız!\n\nAyrıca: bu işlem şu anda geri alınamaz, yani dikkatli ol!",
|
||||||
"linkAccountsText": "Hesapları Bağla",
|
"linkAccountsText": "Hesapları Bağla",
|
||||||
"linkedAccountsText": "Bağlı Hesaplar:",
|
"linkedAccountsText": "Bağlı Hesaplar:",
|
||||||
"nameChangeConfirm": "Hesap adını ${NAME} olarak değiştir?",
|
"nameChangeConfirm": "Hesap adın ${NAME} olarak değiştirilsinmi ?",
|
||||||
"resetProgressConfirmNoAchievementsText": "Bu co-op ilerlemeyi ve \nlokaldeki yüksek puanlarnı sıfırlar(ama biletlerini değil).\nBu geri alınamaz. Emin misiniz?",
|
"resetProgressConfirmNoAchievementsText": "Bu co-op ilerlemeyi ve \nlokaldeki yüksek puanlarnı sıfırlar(ama biletlerini değil).\nBu geri alınamaz. Emin misiniz?",
|
||||||
"resetProgressConfirmText": "Bu co-op ilerlemeyi, başarıları ve \nEn yüksek skorları sıfırlayacak \n(ama biletlerini değil). Bu işlem\ngeri alınamaz. Emin misin?",
|
"resetProgressConfirmText": "Bu co-op ilerlemeyi, başarıları ve \nEn yüksek skorları sıfırlayacak \n(ama biletlerini değil). Bu işlem\ngeri alınamaz. Emin misin?",
|
||||||
"resetProgressText": "İlerlemeyi Sıfırla",
|
"resetProgressText": "İlerlemeyi Sıfırla",
|
||||||
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Google Play ile Giriş yap",
|
"signInWithGooglePlayText": "Google Play ile Giriş yap",
|
||||||
"signInWithTestAccountInfoText": "(miras hesabı;bu cihaz hesaplarını ileride de kullan)",
|
"signInWithTestAccountInfoText": "(miras hesabı;bu cihaz hesaplarını ileride de kullan)",
|
||||||
"signInWithTestAccountText": "Test hesabı ile Giriş yap",
|
"signInWithTestAccountText": "Test hesabı ile Giriş yap",
|
||||||
|
"signInWithV2InfoText": "(bütün platformlarda çalışan bir hesap)",
|
||||||
|
"signInWithV2Text": "BombSquad hesabıyla giriş yap",
|
||||||
"signOutText": "Çıkış Yap",
|
"signOutText": "Çıkış Yap",
|
||||||
"signingInText": "Giriş yapılıyor...",
|
"signingInText": "Giriş yapılıyor...",
|
||||||
"signingOutText": "Çıkış yapılıyor...",
|
"signingOutText": "Çıkış yapılıyor...",
|
||||||
|
|
@ -36,6 +38,7 @@
|
||||||
"titleText": "Hesap",
|
"titleText": "Hesap",
|
||||||
"unlinkAccountsInstructionsText": "Ayırmak için bir hesap seç",
|
"unlinkAccountsInstructionsText": "Ayırmak için bir hesap seç",
|
||||||
"unlinkAccountsText": "Hesapları ayır",
|
"unlinkAccountsText": "Hesapları ayır",
|
||||||
|
"v2LinkInstructionsText": "Bu bağlantıyı kullanarak bir hesap oluşturun yada giriş yapın.",
|
||||||
"viaAccount": "(${NAME}hesabı ile)",
|
"viaAccount": "(${NAME}hesabı ile)",
|
||||||
"youAreSignedInAsText": "Aşağıdaki ile giriş yapıldı"
|
"youAreSignedInAsText": "Aşağıdaki ile giriş yapıldı"
|
||||||
},
|
},
|
||||||
|
|
@ -495,6 +498,7 @@
|
||||||
"yourPowerRankingText": "Oyuncu Sıralaman:"
|
"yourPowerRankingText": "Oyuncu Sıralaman:"
|
||||||
},
|
},
|
||||||
"copyOfText": "Kopya ${NAME}",
|
"copyOfText": "Kopya ${NAME}",
|
||||||
|
"copyText": "Kopyala",
|
||||||
"createEditPlayerText": "<Oyuncu Oluştur/Düzenle>",
|
"createEditPlayerText": "<Oyuncu Oluştur/Düzenle>",
|
||||||
"createText": "Oluştur",
|
"createText": "Oluştur",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1496,6 +1500,7 @@
|
||||||
"Dutch": "Flemenkçe",
|
"Dutch": "Flemenkçe",
|
||||||
"English": "İngilizce",
|
"English": "İngilizce",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Filipince",
|
||||||
"Finnish": "Fince",
|
"Finnish": "Fince",
|
||||||
"French": "Fransızca",
|
"French": "Fransızca",
|
||||||
"German": "Almanca",
|
"German": "Almanca",
|
||||||
|
|
@ -1516,6 +1521,7 @@
|
||||||
"Slovak": "Slovakça",
|
"Slovak": "Slovakça",
|
||||||
"Spanish": "İspanyolca",
|
"Spanish": "İspanyolca",
|
||||||
"Swedish": "İsveççe",
|
"Swedish": "İsveççe",
|
||||||
|
"Tamil": "Tamilce",
|
||||||
"Thai": "Tayland dili",
|
"Thai": "Tayland dili",
|
||||||
"Turkish": "Türkçe",
|
"Turkish": "Türkçe",
|
||||||
"Ukrainian": "Ukrayna",
|
"Ukrainian": "Ukrayna",
|
||||||
|
|
@ -1846,7 +1852,7 @@
|
||||||
"macInstructions2Text": "Kablosuz olarak kullanmak için; ayrıca 'Xbox 360 Kontroller for Windows'\nile gelen bir alıcı kullanman lazım. \nBir alıcı sana 4 taneye kadar bağlantı sağlar.\n\nÖnemli: 3.şahıs alıcılar bu sürücü ile çalışmaz;\nAlıcının 'Microsoft' için olduğuna dikkat et 'XBOX 360' değil.\nMicrosoft bunu uzun süredir ayrı olarak satmıyor. Kontrolcüleri ile \nbirlikte alabilirsin ya da ebay de araştırabilirsin.\n\nEğer bunu kullanışlı bulduysan, lütfen değerlendirerek sürücü\ngeliştirilmesine bu siteden bağış yap.",
|
"macInstructions2Text": "Kablosuz olarak kullanmak için; ayrıca 'Xbox 360 Kontroller for Windows'\nile gelen bir alıcı kullanman lazım. \nBir alıcı sana 4 taneye kadar bağlantı sağlar.\n\nÖnemli: 3.şahıs alıcılar bu sürücü ile çalışmaz;\nAlıcının 'Microsoft' için olduğuna dikkat et 'XBOX 360' değil.\nMicrosoft bunu uzun süredir ayrı olarak satmıyor. Kontrolcüleri ile \nbirlikte alabilirsin ya da ebay de araştırabilirsin.\n\nEğer bunu kullanışlı bulduysan, lütfen değerlendirerek sürücü\ngeliştirilmesine bu siteden bağış yap.",
|
||||||
"macInstructionsText": "Xbox 360 kolunu kullanmak için aşağıdaki bağlantıdaki\nMac sürücüsü yüklemen gerekiyor.\nKablolu ve Kablosuz kontroller de çalışır.",
|
"macInstructionsText": "Xbox 360 kolunu kullanmak için aşağıdaki bağlantıdaki\nMac sürücüsü yüklemen gerekiyor.\nKablolu ve Kablosuz kontroller de çalışır.",
|
||||||
"ouyaInstructionsText": "BombSquad ile kablolu Xbox 360 kontrolcüsü kullanmak için basitçe\ncihazının USB girişine takın. Çoklu kontrolcü kullanmak için USB\nçoklayıcı kullanabilirsiniz.\n\nKablosuz kontrolcü için \"Xbox 360 Wireless Controller for Windows\"\nkablosuz alıcısına ihtiyacınız var. Her alıcıya\nUSB girişi ile bağlanır ve 4 kablosuz kontrolcüye\nkadar desteklenir.",
|
"ouyaInstructionsText": "BombSquad ile kablolu Xbox 360 kontrolcüsü kullanmak için basitçe\ncihazının USB girişine takın. Çoklu kontrolcü kullanmak için USB\nçoklayıcı kullanabilirsiniz.\n\nKablosuz kontrolcü için \"Xbox 360 Wireless Controller for Windows\"\nkablosuz alıcısına ihtiyacınız var. Her alıcıya\nUSB girişi ile bağlanır ve 4 kablosuz kontrolcüye\nkadar desteklenir.",
|
||||||
"titleText": "Xbox 360 Kontrolcüsünü ${APP_NAME} ile kullan:"
|
"titleText": "Xbox 360 Kontrolcüsü ${APP_NAME} ile kullanılıyor:"
|
||||||
},
|
},
|
||||||
"yesAllowText": "Evet, Kabul!",
|
"yesAllowText": "Evet, Kabul!",
|
||||||
"yourBestScoresText": "En-İyi Skorların",
|
"yourBestScoresText": "En-İyi Skorların",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/ukrainian.json
vendored
6
dist/ba_data/data/languages/ukrainian.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "Увійти через Google Play",
|
"signInWithGooglePlayText": "Увійти через Google Play",
|
||||||
"signInWithTestAccountInfoText": "(тест-аккаунт; надалі використовуйте акаунт пристрою)",
|
"signInWithTestAccountInfoText": "(тест-аккаунт; надалі використовуйте акаунт пристрою)",
|
||||||
"signInWithTestAccountText": "Увійти через тестовий акаунт",
|
"signInWithTestAccountText": "Увійти через тестовий акаунт",
|
||||||
|
"signInWithV2InfoText": "(обліковий запис, який працює на всіх платформах)",
|
||||||
|
"signInWithV2Text": "Увійдіть за допомогою облікового запису BombSquad",
|
||||||
"signOutText": "Вийти",
|
"signOutText": "Вийти",
|
||||||
"signingInText": "Вхід…",
|
"signingInText": "Вхід…",
|
||||||
"signingOutText": "Вихід…",
|
"signingOutText": "Вихід…",
|
||||||
|
|
@ -38,6 +40,7 @@
|
||||||
"titleText": "Акаунт",
|
"titleText": "Акаунт",
|
||||||
"unlinkAccountsInstructionsText": "Виберіть акаунт, який хочете відв'язати",
|
"unlinkAccountsInstructionsText": "Виберіть акаунт, який хочете відв'язати",
|
||||||
"unlinkAccountsText": "Відв'язати акаунт",
|
"unlinkAccountsText": "Відв'язати акаунт",
|
||||||
|
"v2LinkInstructionsText": "Скористайтеся цим посиланням, щоб створити обліковий запис або увійти.",
|
||||||
"viaAccount": "(через акаунт ${NAME})",
|
"viaAccount": "(через акаунт ${NAME})",
|
||||||
"youAreSignedInAsText": "Ви увійшли як:"
|
"youAreSignedInAsText": "Ви увійшли як:"
|
||||||
},
|
},
|
||||||
|
|
@ -496,6 +499,7 @@
|
||||||
"yourPowerRankingText": "Ваш ранг:"
|
"yourPowerRankingText": "Ваш ранг:"
|
||||||
},
|
},
|
||||||
"copyOfText": "Копія ${NAME}",
|
"copyOfText": "Копія ${NAME}",
|
||||||
|
"copyText": "Копія",
|
||||||
"createEditPlayerText": "<Створення / редагування гравця>",
|
"createEditPlayerText": "<Створення / редагування гравця>",
|
||||||
"createText": "Створити",
|
"createText": "Створити",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1496,6 +1500,7 @@
|
||||||
"Dutch": "Голландська",
|
"Dutch": "Голландська",
|
||||||
"English": "Англійська",
|
"English": "Англійська",
|
||||||
"Esperanto": "Есперанто",
|
"Esperanto": "Есперанто",
|
||||||
|
"Filipino": "Філіппінський",
|
||||||
"Finnish": "Фінська",
|
"Finnish": "Фінська",
|
||||||
"French": "Французька",
|
"French": "Французька",
|
||||||
"German": "Німецька",
|
"German": "Німецька",
|
||||||
|
|
@ -1516,6 +1521,7 @@
|
||||||
"Slovak": "Словацька",
|
"Slovak": "Словацька",
|
||||||
"Spanish": "Іспанська",
|
"Spanish": "Іспанська",
|
||||||
"Swedish": "Шведська",
|
"Swedish": "Шведська",
|
||||||
|
"Tamil": "тамільська",
|
||||||
"Thai": "Тайська",
|
"Thai": "Тайська",
|
||||||
"Turkish": "Турецька",
|
"Turkish": "Турецька",
|
||||||
"Ukrainian": "Українська",
|
"Ukrainian": "Українська",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/venetian.json
vendored
6
dist/ba_data/data/languages/venetian.json
vendored
|
|
@ -27,6 +27,8 @@
|
||||||
"signInWithGooglePlayText": "Conétate co Google Play",
|
"signInWithGooglePlayText": "Conétate co Google Play",
|
||||||
"signInWithTestAccountInfoText": "(account de proa vecio: in fuduro dòpara i account de’l dispozitivo)",
|
"signInWithTestAccountInfoText": "(account de proa vecio: in fuduro dòpara i account de’l dispozitivo)",
|
||||||
"signInWithTestAccountText": "Conétate co un account de proa",
|
"signInWithTestAccountText": "Conétate co un account de proa",
|
||||||
|
"signInWithV2InfoText": "(un account che fusiona so tute łe piataforme)",
|
||||||
|
"signInWithV2Text": "Acedi co un account BombSquad",
|
||||||
"signOutText": "Sortisi da l'account",
|
"signOutText": "Sortisi da l'account",
|
||||||
"signingInText": "Conesion in corso...",
|
"signingInText": "Conesion in corso...",
|
||||||
"signingOutText": "Sortìa in corso...",
|
"signingOutText": "Sortìa in corso...",
|
||||||
|
|
@ -34,6 +36,7 @@
|
||||||
"titleText": "Account",
|
"titleText": "Account",
|
||||||
"unlinkAccountsInstructionsText": "Sełesiona un account da descołegar",
|
"unlinkAccountsInstructionsText": "Sełesiona un account da descołegar",
|
||||||
"unlinkAccountsText": "Descołega account",
|
"unlinkAccountsText": "Descołega account",
|
||||||
|
"v2LinkInstructionsText": "Acedi o dòpara 'sto link par crear un account.",
|
||||||
"viaAccount": "(doparando ${NAME})",
|
"viaAccount": "(doparando ${NAME})",
|
||||||
"youAreSignedInAsText": "A te zugarè cofà:"
|
"youAreSignedInAsText": "A te zugarè cofà:"
|
||||||
},
|
},
|
||||||
|
|
@ -492,6 +495,7 @@
|
||||||
"yourPowerRankingText": "Ła to pozision:"
|
"yourPowerRankingText": "Ła to pozision:"
|
||||||
},
|
},
|
||||||
"copyOfText": "Copia de ${NAME}",
|
"copyOfText": "Copia de ${NAME}",
|
||||||
|
"copyText": "Copia",
|
||||||
"createEditPlayerText": "<Crea/Muda zugador>",
|
"createEditPlayerText": "<Crea/Muda zugador>",
|
||||||
"createText": "Crea",
|
"createText": "Crea",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1492,6 +1496,7 @@
|
||||||
"Dutch": "Ołandeze",
|
"Dutch": "Ołandeze",
|
||||||
"English": "Ingleze",
|
"English": "Ingleze",
|
||||||
"Esperanto": "Esperanto",
|
"Esperanto": "Esperanto",
|
||||||
|
"Filipino": "Fiłipin",
|
||||||
"Finnish": "Fiłandeze",
|
"Finnish": "Fiłandeze",
|
||||||
"French": "Franseze",
|
"French": "Franseze",
|
||||||
"German": "Todesco",
|
"German": "Todesco",
|
||||||
|
|
@ -1512,6 +1517,7 @@
|
||||||
"Slovak": "Zlovaco",
|
"Slovak": "Zlovaco",
|
||||||
"Spanish": "Spagnoło",
|
"Spanish": "Spagnoło",
|
||||||
"Swedish": "Zvedeze",
|
"Swedish": "Zvedeze",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Thailandeze",
|
"Thai": "Thailandeze",
|
||||||
"Turkish": "Turco",
|
"Turkish": "Turco",
|
||||||
"Ukrainian": "Ucrain",
|
"Ukrainian": "Ucrain",
|
||||||
|
|
|
||||||
6
dist/ba_data/data/languages/vietnamese.json
vendored
6
dist/ba_data/data/languages/vietnamese.json
vendored
|
|
@ -29,6 +29,8 @@
|
||||||
"signInWithGooglePlayText": "đăng nhập bằng google chơi trò chơi",
|
"signInWithGooglePlayText": "đăng nhập bằng google chơi trò chơi",
|
||||||
"signInWithTestAccountInfoText": "(loại tài khoản đặc biệt; chỉ đăng nhập trên máy này)",
|
"signInWithTestAccountInfoText": "(loại tài khoản đặc biệt; chỉ đăng nhập trên máy này)",
|
||||||
"signInWithTestAccountText": "Đăng nhập bằng tài khoản máy tính",
|
"signInWithTestAccountText": "Đăng nhập bằng tài khoản máy tính",
|
||||||
|
"signInWithV2InfoText": "(một tài khoản hoạt động trên tất cả các nền tảng)",
|
||||||
|
"signInWithV2Text": "Đăng nhập bằng tài khoản BombSquad",
|
||||||
"signOutText": "Đăng Xuất",
|
"signOutText": "Đăng Xuất",
|
||||||
"signingInText": "Đang đăng nhập...",
|
"signingInText": "Đang đăng nhập...",
|
||||||
"signingOutText": "Đang Đăng xuất...",
|
"signingOutText": "Đang Đăng xuất...",
|
||||||
|
|
@ -39,6 +41,7 @@
|
||||||
"titleText": "Tài Khoản",
|
"titleText": "Tài Khoản",
|
||||||
"unlinkAccountsInstructionsText": "Chọn tài khoản để hủy kết nối",
|
"unlinkAccountsInstructionsText": "Chọn tài khoản để hủy kết nối",
|
||||||
"unlinkAccountsText": "Hủy kết nối",
|
"unlinkAccountsText": "Hủy kết nối",
|
||||||
|
"v2LinkInstructionsText": "Sử dụng liên kết này để tạo tài khoản hoặc đăng nhập.",
|
||||||
"viaAccount": "(qua tài khoản ${NAME})",
|
"viaAccount": "(qua tài khoản ${NAME})",
|
||||||
"youAreSignedInAsText": "Bạn đang đăng nhập tài khoản:"
|
"youAreSignedInAsText": "Bạn đang đăng nhập tài khoản:"
|
||||||
},
|
},
|
||||||
|
|
@ -497,6 +500,7 @@
|
||||||
"yourPowerRankingText": "Xếp hạng sức mạnh của bạn"
|
"yourPowerRankingText": "Xếp hạng sức mạnh của bạn"
|
||||||
},
|
},
|
||||||
"copyOfText": "${NAME} copy",
|
"copyOfText": "${NAME} copy",
|
||||||
|
"copyText": "Sao chép",
|
||||||
"createEditPlayerText": "<tạo/chỉnh sửa người chơi>",
|
"createEditPlayerText": "<tạo/chỉnh sửa người chơi>",
|
||||||
"createText": "Tạo",
|
"createText": "Tạo",
|
||||||
"creditsWindow": {
|
"creditsWindow": {
|
||||||
|
|
@ -1498,6 +1502,7 @@
|
||||||
"Dutch": "Tiếng Hà Lan",
|
"Dutch": "Tiếng Hà Lan",
|
||||||
"English": "Tiếng Anh",
|
"English": "Tiếng Anh",
|
||||||
"Esperanto": "Quốc tế ngữ",
|
"Esperanto": "Quốc tế ngữ",
|
||||||
|
"Filipino": "Người Phi Luật Tân",
|
||||||
"Finnish": "Tiếng Phần Lan",
|
"Finnish": "Tiếng Phần Lan",
|
||||||
"French": "Tiếng Pháp",
|
"French": "Tiếng Pháp",
|
||||||
"German": "Tiếng Đức",
|
"German": "Tiếng Đức",
|
||||||
|
|
@ -1518,6 +1523,7 @@
|
||||||
"Slovak": "Tiếng Slovakia",
|
"Slovak": "Tiếng Slovakia",
|
||||||
"Spanish": "Tiếng Tây Ban Nha",
|
"Spanish": "Tiếng Tây Ban Nha",
|
||||||
"Swedish": "Tiếng Thụy Điển",
|
"Swedish": "Tiếng Thụy Điển",
|
||||||
|
"Tamil": "Tamil",
|
||||||
"Thai": "Tiếng thái",
|
"Thai": "Tiếng thái",
|
||||||
"Turkish": "Tiếng Thổ Nhĩ Kỳ",
|
"Turkish": "Tiếng Thổ Nhĩ Kỳ",
|
||||||
"Ukrainian": "Tiếng Ukraina",
|
"Ukrainian": "Tiếng Ukraina",
|
||||||
|
|
|
||||||
4
dist/ba_data/python-site-packages/certifi/__init__.py
vendored
Normal file
4
dist/ba_data/python-site-packages/certifi/__init__.py
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
from .core import contents, where
|
||||||
|
|
||||||
|
__all__ = ["contents", "where"]
|
||||||
|
__version__ = "2022.05.18.1"
|
||||||
12
dist/ba_data/python-site-packages/certifi/__main__.py
vendored
Normal file
12
dist/ba_data/python-site-packages/certifi/__main__.py
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
from certifi import contents, where
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("-c", "--contents", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.contents:
|
||||||
|
print(contents())
|
||||||
|
else:
|
||||||
|
print(where())
|
||||||
4530
dist/ba_data/python-site-packages/certifi/cacert.pem
vendored
Normal file
4530
dist/ba_data/python-site-packages/certifi/cacert.pem
vendored
Normal file
File diff suppressed because it is too large
Load diff
68
dist/ba_data/python-site-packages/certifi/core.py
vendored
Normal file
68
dist/ba_data/python-site-packages/certifi/core.py
vendored
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
"""
|
||||||
|
certifi.py
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
This module returns the installation location of cacert.pem or its contents.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import types
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
try:
|
||||||
|
from importlib.resources import path as get_path, read_text
|
||||||
|
|
||||||
|
_CACERT_CTX = None
|
||||||
|
_CACERT_PATH = None
|
||||||
|
|
||||||
|
def where() -> str:
|
||||||
|
# This is slightly terrible, but we want to delay extracting the file
|
||||||
|
# in cases where we're inside of a zipimport situation until someone
|
||||||
|
# actually calls where(), but we don't want to re-extract the file
|
||||||
|
# on every call of where(), so we'll do it once then store it in a
|
||||||
|
# global variable.
|
||||||
|
global _CACERT_CTX
|
||||||
|
global _CACERT_PATH
|
||||||
|
if _CACERT_PATH is None:
|
||||||
|
# This is slightly janky, the importlib.resources API wants you to
|
||||||
|
# manage the cleanup of this file, so it doesn't actually return a
|
||||||
|
# path, it returns a context manager that will give you the path
|
||||||
|
# when you enter it and will do any cleanup when you leave it. In
|
||||||
|
# the common case of not needing a temporary file, it will just
|
||||||
|
# return the file system location and the __exit__() is a no-op.
|
||||||
|
#
|
||||||
|
# We also have to hold onto the actual context manager, because
|
||||||
|
# it will do the cleanup whenever it gets garbage collected, so
|
||||||
|
# we will also store that at the global level as well.
|
||||||
|
_CACERT_CTX = get_path("certifi", "cacert.pem")
|
||||||
|
_CACERT_PATH = str(_CACERT_CTX.__enter__())
|
||||||
|
|
||||||
|
return _CACERT_PATH
|
||||||
|
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
Package = Union[types.ModuleType, str]
|
||||||
|
Resource = Union[str, "os.PathLike"]
|
||||||
|
|
||||||
|
# This fallback will work for Python versions prior to 3.7 that lack the
|
||||||
|
# importlib.resources module but relies on the existing `where` function
|
||||||
|
# so won't address issues with environments like PyOxidizer that don't set
|
||||||
|
# __file__ on modules.
|
||||||
|
def read_text(
|
||||||
|
package: Package,
|
||||||
|
resource: Resource,
|
||||||
|
encoding: str = 'utf-8',
|
||||||
|
errors: str = 'strict'
|
||||||
|
) -> str:
|
||||||
|
with open(where(), encoding=encoding) as data:
|
||||||
|
return data.read()
|
||||||
|
|
||||||
|
# If we don't have importlib.resources, then we will just do the old logic
|
||||||
|
# of assuming we're on the filesystem and munge the path directly.
|
||||||
|
def where() -> str:
|
||||||
|
f = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
return os.path.join(f, "cacert.pem")
|
||||||
|
|
||||||
|
|
||||||
|
def contents() -> str:
|
||||||
|
return read_text("certifi", "cacert.pem", encoding="ascii")
|
||||||
2677
dist/ba_data/python-site-packages/typing_extensions.py
vendored
2677
dist/ba_data/python-site-packages/typing_extensions.py
vendored
File diff suppressed because it is too large
Load diff
64
dist/ba_data/python/ba/__init__.py
vendored
64
dist/ba_data/python/ba/__init__.py
vendored
|
|
@ -6,7 +6,6 @@ This top level module is a collection of most commonly used functionality.
|
||||||
For many modding purposes, the bits exposed here are all you'll need.
|
For many modding purposes, the bits exposed here are all you'll need.
|
||||||
In some specific cases you may need to pull in individual submodules instead.
|
In some specific cases you may need to pull in individual submodules instead.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=unused-import
|
|
||||||
# pylint: disable=redefined-builtin
|
# pylint: disable=redefined-builtin
|
||||||
|
|
||||||
from _ba import (
|
from _ba import (
|
||||||
|
|
@ -18,7 +17,7 @@ from _ba import (
|
||||||
newnode, playsound, printnodes, printobjects, pushcall, quit, rowwidget,
|
newnode, playsound, printnodes, printobjects, pushcall, quit, rowwidget,
|
||||||
safecolor, screenmessage, scrollwidget, set_analytics_screen, charstr,
|
safecolor, screenmessage, scrollwidget, set_analytics_screen, charstr,
|
||||||
textwidget, time, timer, open_url, widget, clipboard_is_supported,
|
textwidget, time, timer, open_url, widget, clipboard_is_supported,
|
||||||
clipboard_has_text, clipboard_get_text, clipboard_set_text)
|
clipboard_has_text, clipboard_get_text, clipboard_set_text, getdata)
|
||||||
from ba._activity import Activity
|
from ba._activity import Activity
|
||||||
from ba._plugin import PotentialPlugin, Plugin, PluginSubsystem
|
from ba._plugin import PotentialPlugin, Plugin, PluginSubsystem
|
||||||
from ba._actor import Actor
|
from ba._actor import Actor
|
||||||
|
|
@ -81,13 +80,64 @@ from ba._collision import Collision, getcollision
|
||||||
|
|
||||||
app: App
|
app: App
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Achievement', 'AchievementSubsystem', 'Activity', 'ActivityNotFoundError',
|
||||||
|
'Actor', 'ActorNotFoundError', 'animate', 'animate_array', 'app', 'App',
|
||||||
|
'AppConfig', 'AppDelegate', 'AssetPackage', 'BoolSetting', 'buttonwidget',
|
||||||
|
'Call', 'cameraflash', 'camerashake', 'Campaign', 'CelebrateMessage',
|
||||||
|
'charstr', 'checkboxwidget', 'ChoiceSetting', 'Chooser',
|
||||||
|
'clipboard_get_text', 'clipboard_has_text', 'clipboard_is_supported',
|
||||||
|
'clipboard_set_text', 'CollideModel', 'Collision', 'columnwidget',
|
||||||
|
'containerwidget', 'Context', 'ContextCall', 'ContextError',
|
||||||
|
'CoopGameActivity', 'CoopSession', 'Data', 'DeathType',
|
||||||
|
'DelegateNotFoundError', 'Dependency', 'DependencyComponent',
|
||||||
|
'DependencyError', 'DependencySet', 'DieMessage', 'do_once', 'DropMessage',
|
||||||
|
'DroppedMessage', 'DualTeamSession', 'emitfx', 'EmptyPlayer', 'EmptyTeam',
|
||||||
|
'Existable', 'existing', 'FloatChoiceSetting', 'FloatSetting',
|
||||||
|
'FreeForAllSession', 'FreezeMessage', 'GameActivity', 'GameResults',
|
||||||
|
'GameTip', 'garbage_collect', 'getactivity', 'getclass', 'getcollidemodel',
|
||||||
|
'getcollision', 'getdata', 'getmaps', 'getmodel', 'getnodes', 'getsession',
|
||||||
|
'getsound', 'gettexture', 'HitMessage', 'hscrollwidget', 'imagewidget',
|
||||||
|
'ImpactDamageMessage', 'InputDevice', 'InputDeviceNotFoundError',
|
||||||
|
'InputType', 'IntChoiceSetting', 'IntSetting',
|
||||||
|
'is_browser_likely_available', 'is_point_in_box', 'Keyboard',
|
||||||
|
'LanguageSubsystem', 'Level', 'Lobby', 'log', 'Lstr', 'Map', 'Material',
|
||||||
|
'MetadataSubsystem', 'Model', 'MultiTeamSession', 'MusicPlayer',
|
||||||
|
'MusicPlayMode', 'MusicSubsystem', 'MusicType', 'newactivity', 'newnode',
|
||||||
|
'Node', 'NodeActor', 'NodeNotFoundError', 'normalized_color',
|
||||||
|
'NotFoundError', 'open_url', 'OutOfBoundsMessage', 'Permission',
|
||||||
|
'PickedUpMessage', 'PickUpMessage', 'Player', 'PlayerDiedMessage',
|
||||||
|
'PlayerInfo', 'PlayerNotFoundError', 'PlayerRecord', 'PlayerScoredMessage',
|
||||||
|
'playsound', 'Plugin', 'PluginSubsystem', 'PotentialPlugin',
|
||||||
|
'PowerupAcceptMessage', 'PowerupMessage', 'print_error', 'print_exception',
|
||||||
|
'printnodes', 'printobjects', 'pushcall', 'quit', 'rowwidget', 'safecolor',
|
||||||
|
'ScoreConfig', 'ScoreType', 'screenmessage', 'scrollwidget',
|
||||||
|
'ServerController', 'Session', 'SessionNotFoundError', 'SessionPlayer',
|
||||||
|
'SessionPlayerNotFoundError', 'SessionTeam', 'SessionTeamNotFoundError',
|
||||||
|
'set_analytics_screen', 'setmusic', 'Setting', 'ShouldShatterMessage',
|
||||||
|
'show_damage_count', 'Sound', 'SpecialChar', 'StandLocation',
|
||||||
|
'StandMessage', 'Stats', 'storagename', 'Team', 'TeamGameActivity',
|
||||||
|
'TeamNotFoundError', 'Texture', 'textwidget', 'ThawMessage', 'time',
|
||||||
|
'TimeFormat', 'Timer', 'timer', 'timestring', 'TimeType', 'uicleanupcheck',
|
||||||
|
'UIController', 'UIScale', 'UISubsystem', 'UNHANDLED', 'Vec3',
|
||||||
|
'vec3validate', 'verify_object_death', 'WeakCall', 'Widget', 'widget',
|
||||||
|
'WidgetNotFoundError', 'Window'
|
||||||
|
]
|
||||||
|
|
||||||
# Change everything's listed module to simply 'ba' (instead of 'ba.foo.bar').
|
|
||||||
|
# Have these things present themselves cleanly as 'ba.Foo'
|
||||||
|
# instead of 'ba._submodule.Foo'
|
||||||
def _simplify_module_names() -> None:
|
def _simplify_module_names() -> None:
|
||||||
for attr, obj in globals().items():
|
import os
|
||||||
if not attr.startswith('_'):
|
|
||||||
if getattr(obj, '__module__', None) not in [None, 'ba']:
|
# Though pdoc gets confused when we override __module__,
|
||||||
obj.__module__ = 'ba'
|
# so let's make an exception for it.
|
||||||
|
if os.environ.get('BA_DOCS_GENERATION', '0') != '1':
|
||||||
|
from efro.util import set_canonical_module
|
||||||
|
globs = globals()
|
||||||
|
set_canonical_module(
|
||||||
|
module_globals=globs,
|
||||||
|
names=[n for n in globs.keys() if not n.startswith('_')])
|
||||||
|
|
||||||
|
|
||||||
_simplify_module_names()
|
_simplify_module_names()
|
||||||
|
|
|
||||||
267
dist/ba_data/python/ba/_accountv1.py
vendored
Normal file
267
dist/ba_data/python/ba/_accountv1.py
vendored
Normal file
|
|
@ -0,0 +1,267 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Account related functionality."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import copy
|
||||||
|
import time
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
import _ba
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from typing import Any, Optional
|
||||||
|
|
||||||
|
|
||||||
|
class AccountV1Subsystem:
|
||||||
|
"""Subsystem for legacy account handling in the app.
|
||||||
|
|
||||||
|
Category: **App Classes**
|
||||||
|
|
||||||
|
Access the single shared instance of this class at 'ba.app.accounts_v1'.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.account_tournament_list: Optional[tuple[int, list[str]]] = None
|
||||||
|
|
||||||
|
# FIXME: should abstract/structure these.
|
||||||
|
self.tournament_info: dict = {}
|
||||||
|
self.league_rank_cache: dict = {}
|
||||||
|
self.last_post_purchase_message_time: Optional[float] = None
|
||||||
|
|
||||||
|
# If we try to run promo-codes due to launch-args/etc we might
|
||||||
|
# not be signed in yet; go ahead and queue them up in that case.
|
||||||
|
self.pending_promo_codes: list[str] = []
|
||||||
|
|
||||||
|
def on_app_launch(self) -> None:
|
||||||
|
"""Called when the app is done bootstrapping."""
|
||||||
|
|
||||||
|
# Auto-sign-in to a local account in a moment if we're set to.
|
||||||
|
def do_auto_sign_in() -> None:
|
||||||
|
if _ba.app.headless_mode or _ba.app.config.get(
|
||||||
|
'Auto Account State') == 'Local':
|
||||||
|
_ba.sign_in_v1('Local')
|
||||||
|
|
||||||
|
_ba.pushcall(do_auto_sign_in)
|
||||||
|
|
||||||
|
def on_app_resume(self) -> None:
|
||||||
|
"""Should be called when the app is resumed."""
|
||||||
|
|
||||||
|
# Mark our cached tourneys as invalid so anyone using them knows
|
||||||
|
# they might be out of date.
|
||||||
|
for entry in list(self.tournament_info.values()):
|
||||||
|
entry['valid'] = False
|
||||||
|
|
||||||
|
def handle_account_gained_tickets(self, count: int) -> None:
|
||||||
|
"""Called when the current account has been awarded tickets.
|
||||||
|
|
||||||
|
(internal)
|
||||||
|
"""
|
||||||
|
from ba._language import Lstr
|
||||||
|
_ba.screenmessage(Lstr(resource='getTicketsWindow.receivedTicketsText',
|
||||||
|
subs=[('${COUNT}', str(count))]),
|
||||||
|
color=(0, 1, 0))
|
||||||
|
_ba.playsound(_ba.getsound('cashRegister'))
|
||||||
|
|
||||||
|
def cache_league_rank_data(self, data: Any) -> None:
|
||||||
|
"""(internal)"""
|
||||||
|
self.league_rank_cache['info'] = copy.deepcopy(data)
|
||||||
|
|
||||||
|
def get_cached_league_rank_data(self) -> Any:
|
||||||
|
"""(internal)"""
|
||||||
|
return self.league_rank_cache.get('info', None)
|
||||||
|
|
||||||
|
def get_league_rank_points(self,
|
||||||
|
data: Optional[dict[str, Any]],
|
||||||
|
subset: str = None) -> int:
|
||||||
|
"""(internal)"""
|
||||||
|
if data is None:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# If the data contains an achievement total, use that. otherwise calc
|
||||||
|
# locally.
|
||||||
|
if data['at'] is not None:
|
||||||
|
total_ach_value = data['at']
|
||||||
|
else:
|
||||||
|
total_ach_value = 0
|
||||||
|
for ach in _ba.app.ach.achievements:
|
||||||
|
if ach.complete:
|
||||||
|
total_ach_value += ach.power_ranking_value
|
||||||
|
|
||||||
|
trophies_total: int = (data['t0a'] * data['t0am'] +
|
||||||
|
data['t0b'] * data['t0bm'] +
|
||||||
|
data['t1'] * data['t1m'] +
|
||||||
|
data['t2'] * data['t2m'] +
|
||||||
|
data['t3'] * data['t3m'] +
|
||||||
|
data['t4'] * data['t4m'])
|
||||||
|
if subset == 'trophyCount':
|
||||||
|
val: int = (data['t0a'] + data['t0b'] + data['t1'] + data['t2'] +
|
||||||
|
data['t3'] + data['t4'])
|
||||||
|
assert isinstance(val, int)
|
||||||
|
return val
|
||||||
|
if subset == 'trophies':
|
||||||
|
assert isinstance(trophies_total, int)
|
||||||
|
return trophies_total
|
||||||
|
if subset is not None:
|
||||||
|
raise ValueError('invalid subset value: ' + str(subset))
|
||||||
|
|
||||||
|
if data['p']:
|
||||||
|
pro_mult = 1.0 + float(
|
||||||
|
_ba.get_v1_account_misc_read_val('proPowerRankingBoost',
|
||||||
|
0.0)) * 0.01
|
||||||
|
else:
|
||||||
|
pro_mult = 1.0
|
||||||
|
|
||||||
|
# For final value, apply our pro mult and activeness-mult.
|
||||||
|
return int(
|
||||||
|
(total_ach_value + trophies_total) *
|
||||||
|
(data['act'] if data['act'] is not None else 1.0) * pro_mult)
|
||||||
|
|
||||||
|
def cache_tournament_info(self, info: Any) -> None:
|
||||||
|
"""(internal)"""
|
||||||
|
from ba._generated.enums import TimeType, TimeFormat
|
||||||
|
for entry in info:
|
||||||
|
cache_entry = self.tournament_info[entry['tournamentID']] = (
|
||||||
|
copy.deepcopy(entry))
|
||||||
|
|
||||||
|
# Also store the time we received this, so we can adjust
|
||||||
|
# time-remaining values/etc.
|
||||||
|
cache_entry['timeReceived'] = _ba.time(TimeType.REAL,
|
||||||
|
TimeFormat.MILLISECONDS)
|
||||||
|
cache_entry['valid'] = True
|
||||||
|
|
||||||
|
def get_purchased_icons(self) -> list[str]:
|
||||||
|
"""(internal)"""
|
||||||
|
# pylint: disable=cyclic-import
|
||||||
|
from ba import _store
|
||||||
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
|
return []
|
||||||
|
icons = []
|
||||||
|
store_items = _store.get_store_items()
|
||||||
|
for item_name, item in list(store_items.items()):
|
||||||
|
if item_name.startswith('icons.') and _ba.get_purchased(item_name):
|
||||||
|
icons.append(item['icon'])
|
||||||
|
return icons
|
||||||
|
|
||||||
|
def ensure_have_account_player_profile(self) -> None:
|
||||||
|
"""
|
||||||
|
Ensure the standard account-named player profile exists;
|
||||||
|
creating if needed.
|
||||||
|
|
||||||
|
(internal)
|
||||||
|
"""
|
||||||
|
# This only applies when we're signed in.
|
||||||
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
|
return
|
||||||
|
|
||||||
|
# If the short version of our account name currently cant be
|
||||||
|
# displayed by the game, cancel.
|
||||||
|
if not _ba.have_chars(_ba.get_v1_account_display_string(full=False)):
|
||||||
|
return
|
||||||
|
|
||||||
|
config = _ba.app.config
|
||||||
|
if ('Player Profiles' not in config
|
||||||
|
or '__account__' not in config['Player Profiles']):
|
||||||
|
|
||||||
|
# Create a spaz with a nice default purply color.
|
||||||
|
_ba.add_transaction({
|
||||||
|
'type': 'ADD_PLAYER_PROFILE',
|
||||||
|
'name': '__account__',
|
||||||
|
'profile': {
|
||||||
|
'character': 'Spaz',
|
||||||
|
'color': [0.5, 0.25, 1.0],
|
||||||
|
'highlight': [0.5, 0.25, 1.0]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
_ba.run_transactions()
|
||||||
|
|
||||||
|
def have_pro(self) -> bool:
|
||||||
|
"""Return whether pro is currently unlocked."""
|
||||||
|
|
||||||
|
# Check our tickets-based pro upgrade and our two real-IAP based
|
||||||
|
# upgrades. Also always unlock this stuff in ballistica-core builds.
|
||||||
|
return bool(
|
||||||
|
_ba.get_purchased('upgrades.pro')
|
||||||
|
or _ba.get_purchased('static.pro')
|
||||||
|
or _ba.get_purchased('static.pro_sale')
|
||||||
|
or 'ballistica' + 'core' == _ba.appname())
|
||||||
|
|
||||||
|
def have_pro_options(self) -> bool:
|
||||||
|
"""Return whether pro-options are present.
|
||||||
|
|
||||||
|
This is True for owners of Pro or for old installs
|
||||||
|
before Pro was a requirement for these options.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# We expose pro options if the server tells us to
|
||||||
|
# (which is generally just when we own pro),
|
||||||
|
# or also if we've been grandfathered in or are using ballistica-core
|
||||||
|
# builds.
|
||||||
|
return self.have_pro() or bool(
|
||||||
|
_ba.get_v1_account_misc_read_val_2('proOptionsUnlocked', False)
|
||||||
|
or _ba.app.config.get('lc14292', 0) > 1)
|
||||||
|
|
||||||
|
def show_post_purchase_message(self) -> None:
|
||||||
|
"""(internal)"""
|
||||||
|
from ba._language import Lstr
|
||||||
|
from ba._generated.enums import TimeType
|
||||||
|
cur_time = _ba.time(TimeType.REAL)
|
||||||
|
if (self.last_post_purchase_message_time is None
|
||||||
|
or cur_time - self.last_post_purchase_message_time > 3.0):
|
||||||
|
self.last_post_purchase_message_time = cur_time
|
||||||
|
with _ba.Context('ui'):
|
||||||
|
_ba.screenmessage(Lstr(resource='updatingAccountText',
|
||||||
|
fallback_resource='purchasingText'),
|
||||||
|
color=(0, 1, 0))
|
||||||
|
_ba.playsound(_ba.getsound('click01'))
|
||||||
|
|
||||||
|
def on_account_state_changed(self) -> None:
|
||||||
|
"""(internal)"""
|
||||||
|
from ba._language import Lstr
|
||||||
|
|
||||||
|
# Run any pending promo codes we had queued up while not signed in.
|
||||||
|
if _ba.get_v1_account_state(
|
||||||
|
) == 'signed_in' and self.pending_promo_codes:
|
||||||
|
for code in self.pending_promo_codes:
|
||||||
|
_ba.screenmessage(Lstr(resource='submittingPromoCodeText'),
|
||||||
|
color=(0, 1, 0))
|
||||||
|
_ba.add_transaction({
|
||||||
|
'type': 'PROMO_CODE',
|
||||||
|
'expire_time': time.time() + 5,
|
||||||
|
'code': code
|
||||||
|
})
|
||||||
|
_ba.run_transactions()
|
||||||
|
self.pending_promo_codes = []
|
||||||
|
|
||||||
|
def add_pending_promo_code(self, code: str) -> None:
|
||||||
|
"""(internal)"""
|
||||||
|
from ba._language import Lstr
|
||||||
|
from ba._generated.enums import TimeType
|
||||||
|
|
||||||
|
# If we're not signed in, queue up the code to run the next time we
|
||||||
|
# are and issue a warning if we haven't signed in within the next
|
||||||
|
# few seconds.
|
||||||
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
|
|
||||||
|
def check_pending_codes() -> None:
|
||||||
|
"""(internal)"""
|
||||||
|
|
||||||
|
# If we're still not signed in and have pending codes,
|
||||||
|
# inform the user that they need to sign in to use them.
|
||||||
|
if self.pending_promo_codes:
|
||||||
|
_ba.screenmessage(Lstr(resource='signInForPromoCodeText'),
|
||||||
|
color=(1, 0, 0))
|
||||||
|
_ba.playsound(_ba.getsound('error'))
|
||||||
|
|
||||||
|
self.pending_promo_codes.append(code)
|
||||||
|
_ba.timer(6.0, check_pending_codes, timetype=TimeType.REAL)
|
||||||
|
return
|
||||||
|
_ba.screenmessage(Lstr(resource='submittingPromoCodeText'),
|
||||||
|
color=(0, 1, 0))
|
||||||
|
_ba.add_transaction({
|
||||||
|
'type': 'PROMO_CODE',
|
||||||
|
'expire_time': time.time() + 5,
|
||||||
|
'code': code
|
||||||
|
})
|
||||||
|
_ba.run_transactions()
|
||||||
51
dist/ba_data/python/ba/_accountv2.py
vendored
Normal file
51
dist/ba_data/python/ba/_accountv2.py
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Account related functionality."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
|
class AccountV2Subsystem:
|
||||||
|
"""Subsystem for modern account handling in the app.
|
||||||
|
|
||||||
|
Category: **App Classes**
|
||||||
|
|
||||||
|
Access the single shared instance of this class at 'ba.app.accounts_v2'.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def on_app_launch(self) -> None:
|
||||||
|
"""Should be called at standard on_app_launch time."""
|
||||||
|
|
||||||
|
def set_primary_credentials(self, credentials: Optional[str]) -> None:
|
||||||
|
"""Set credentials for the primary app account."""
|
||||||
|
raise RuntimeError('This should be overridden.')
|
||||||
|
|
||||||
|
def have_primary_credentials(self) -> bool:
|
||||||
|
"""Are credentials currently set for the primary app account?
|
||||||
|
|
||||||
|
Note that this does not mean these credentials are currently valid;
|
||||||
|
only that they exist. If/when credentials are validated, the 'primary'
|
||||||
|
account handle will be set.
|
||||||
|
"""
|
||||||
|
raise RuntimeError('This should be overridden.')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def primary(self) -> Optional[AccountV2Handle]:
|
||||||
|
"""The primary account for the app, or None if not logged in."""
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_primary(self) -> Optional[AccountV2Handle]:
|
||||||
|
"""Internal - should be overridden by subclass."""
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class AccountV2Handle:
|
||||||
|
"""Handle for interacting with a v2 account."""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.tag = '?'
|
||||||
19
dist/ba_data/python/ba/_achievement.py
vendored
19
dist/ba_data/python/ba/_achievement.py
vendored
|
|
@ -65,7 +65,7 @@ ACH_LEVEL_NAMES = {
|
||||||
class AchievementSubsystem:
|
class AchievementSubsystem:
|
||||||
"""Subsystem for achievement handling.
|
"""Subsystem for achievement handling.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Access the single shared instance of this class at 'ba.app.ach'.
|
Access the single shared instance of this class at 'ba.app.ach'.
|
||||||
"""
|
"""
|
||||||
|
|
@ -409,9 +409,9 @@ def _get_ach_mult(include_pro_bonus: bool = False) -> int:
|
||||||
|
|
||||||
(just for display; changing this here won't affect actual rewards)
|
(just for display; changing this here won't affect actual rewards)
|
||||||
"""
|
"""
|
||||||
val: int = _ba.get_account_misc_read_val('achAwardMult', 5)
|
val: int = _ba.get_v1_account_misc_read_val('achAwardMult', 5)
|
||||||
assert isinstance(val, int)
|
assert isinstance(val, int)
|
||||||
if include_pro_bonus and _ba.app.accounts.have_pro():
|
if include_pro_bonus and _ba.app.accounts_v1.have_pro():
|
||||||
val *= 2
|
val *= 2
|
||||||
return val
|
return val
|
||||||
|
|
||||||
|
|
@ -436,7 +436,7 @@ def _display_next_achievement() -> None:
|
||||||
class Achievement:
|
class Achievement:
|
||||||
"""Represents attributes and state for an individual achievement.
|
"""Represents attributes and state for an individual achievement.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
|
|
@ -496,7 +496,7 @@ class Achievement:
|
||||||
# signed in, lets not show them (otherwise we tend to get
|
# signed in, lets not show them (otherwise we tend to get
|
||||||
# confusing 'controller connected' achievements popping up while
|
# confusing 'controller connected' achievements popping up while
|
||||||
# waiting to log in which can be confusing).
|
# waiting to log in which can be confusing).
|
||||||
if _ba.get_account_state() != 'signed_in':
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
return
|
return
|
||||||
|
|
||||||
# If we're being freshly complete, display/report it and whatnot.
|
# If we're being freshly complete, display/report it and whatnot.
|
||||||
|
|
@ -592,8 +592,8 @@ class Achievement:
|
||||||
|
|
||||||
def get_award_ticket_value(self, include_pro_bonus: bool = False) -> int:
|
def get_award_ticket_value(self, include_pro_bonus: bool = False) -> int:
|
||||||
"""Get the ticket award value for this achievement."""
|
"""Get the ticket award value for this achievement."""
|
||||||
val: int = (_ba.get_account_misc_read_val('achAward.' + self._name,
|
val: int = (_ba.get_v1_account_misc_read_val('achAward.' + self._name,
|
||||||
self._award) *
|
self._award) *
|
||||||
_get_ach_mult(include_pro_bonus))
|
_get_ach_mult(include_pro_bonus))
|
||||||
assert isinstance(val, int)
|
assert isinstance(val, int)
|
||||||
return val
|
return val
|
||||||
|
|
@ -601,7 +601,7 @@ class Achievement:
|
||||||
@property
|
@property
|
||||||
def power_ranking_value(self) -> int:
|
def power_ranking_value(self) -> int:
|
||||||
"""Get the power-ranking award value for this achievement."""
|
"""Get the power-ranking award value for this achievement."""
|
||||||
val: int = _ba.get_account_misc_read_val(
|
val: int = _ba.get_v1_account_misc_read_val(
|
||||||
'achLeaguePoints.' + self._name, self._award)
|
'achLeaguePoints.' + self._name, self._award)
|
||||||
assert isinstance(val, int)
|
assert isinstance(val, int)
|
||||||
return val
|
return val
|
||||||
|
|
@ -916,7 +916,6 @@ class Achievement:
|
||||||
|
|
||||||
def show_completion_banner(self, sound: bool = True) -> None:
|
def show_completion_banner(self, sound: bool = True) -> None:
|
||||||
"""Create the banner/sound for an acquired achievement announcement."""
|
"""Create the banner/sound for an acquired achievement announcement."""
|
||||||
from ba import _account
|
|
||||||
from ba import _gameutils
|
from ba import _gameutils
|
||||||
from bastd.actor.text import Text
|
from bastd.actor.text import Text
|
||||||
from bastd.actor.image import Image
|
from bastd.actor.image import Image
|
||||||
|
|
@ -1177,7 +1176,7 @@ class Achievement:
|
||||||
objt.node.host_only = True
|
objt.node.host_only = True
|
||||||
|
|
||||||
# Add the 'x 2' if we've got pro.
|
# Add the 'x 2' if we've got pro.
|
||||||
if app.accounts.have_pro():
|
if app.accounts_v1.have_pro():
|
||||||
objt = Text('x 2',
|
objt = Text('x 2',
|
||||||
position=(-120 - 180 + 45, 80 + y_offs - 50),
|
position=(-120 - 180 + 45, 80 + y_offs - 50),
|
||||||
v_attach=Text.VAttach.BOTTOM,
|
v_attach=Text.VAttach.BOTTOM,
|
||||||
|
|
|
||||||
130
dist/ba_data/python/ba/_activity.py
vendored
130
dist/ba_data/python/ba/_activity.py
vendored
|
|
@ -18,10 +18,11 @@ from ba._messages import UNHANDLED
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Optional, Any
|
from typing import Optional, Any
|
||||||
import ba
|
import ba
|
||||||
from bastd.actor.respawnicon import RespawnIcon
|
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound=Player)
|
PlayerType = TypeVar('PlayerType', bound=Player)
|
||||||
TeamType = TypeVar('TeamType', bound=Team)
|
TeamType = TypeVar('TeamType', bound=Team)
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
|
|
@ -32,104 +33,97 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
Examples of Activities include games, score-screens, cutscenes, etc.
|
Examples of Activities include games, score-screens, cutscenes, etc.
|
||||||
A ba.Session has one 'current' Activity at any time, though their existence
|
A ba.Session has one 'current' Activity at any time, though their existence
|
||||||
can overlap during transitions.
|
can overlap during transitions.
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
settings_raw
|
|
||||||
The settings dict passed in when the activity was made.
|
|
||||||
This attribute is deprecated and should be avoided when possible;
|
|
||||||
activities should pull all values they need from the 'settings' arg
|
|
||||||
passed to the Activity __init__ call.
|
|
||||||
|
|
||||||
teams
|
|
||||||
The list of ba.Teams in the Activity. This gets populated just before
|
|
||||||
before on_begin() is called and is updated automatically as players
|
|
||||||
join or leave the game. (at least in free-for-all mode where every
|
|
||||||
player gets their own team; in teams mode there are always 2 teams
|
|
||||||
regardless of the player count).
|
|
||||||
|
|
||||||
players
|
|
||||||
The list of ba.Players in the Activity. This gets populated just
|
|
||||||
before on_begin() is called and is updated automatically as players
|
|
||||||
join or leave the game.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# pylint: disable=too-many-public-methods
|
# pylint: disable=too-many-public-methods
|
||||||
|
|
||||||
# Annotating attr types at the class level lets us introspect at runtime.
|
|
||||||
settings_raw: dict[str, Any]
|
settings_raw: dict[str, Any]
|
||||||
|
"""The settings dict passed in when the activity was made.
|
||||||
|
This attribute is deprecated and should be avoided when possible;
|
||||||
|
activities should pull all values they need from the 'settings' arg
|
||||||
|
passed to the Activity __init__ call."""
|
||||||
|
|
||||||
teams: list[TeamType]
|
teams: list[TeamType]
|
||||||
|
"""The list of ba.Team-s in the Activity. This gets populated just
|
||||||
|
before on_begin() is called and is updated automatically as players
|
||||||
|
join or leave the game. (at least in free-for-all mode where every
|
||||||
|
player gets their own team; in teams mode there are always 2 teams
|
||||||
|
regardless of the player count)."""
|
||||||
|
|
||||||
players: list[PlayerType]
|
players: list[PlayerType]
|
||||||
|
"""The list of ba.Player-s in the Activity. This gets populated just
|
||||||
|
before on_begin() is called and is updated automatically as players
|
||||||
|
join or leave the game."""
|
||||||
|
|
||||||
# Whether to print every time a player dies. This can be pertinent
|
|
||||||
# in games such as Death-Match but can be annoying in games where it
|
|
||||||
# doesn't matter.
|
|
||||||
announce_player_deaths = False
|
announce_player_deaths = False
|
||||||
|
"""Whether to print every time a player dies. This can be pertinent
|
||||||
|
in games such as Death-Match but can be annoying in games where it
|
||||||
|
doesn't matter."""
|
||||||
|
|
||||||
# Joining activities are for waiting for initial player joins.
|
|
||||||
# They are treated slightly differently than regular activities,
|
|
||||||
# mainly in that all players are passed to the activity at once
|
|
||||||
# instead of as each joins.
|
|
||||||
is_joining_activity = False
|
is_joining_activity = False
|
||||||
|
"""Joining activities are for waiting for initial player joins.
|
||||||
|
They are treated slightly differently than regular activities,
|
||||||
|
mainly in that all players are passed to the activity at once
|
||||||
|
instead of as each joins."""
|
||||||
|
|
||||||
# Whether game-time should still progress when in menus/etc.
|
|
||||||
allow_pausing = False
|
allow_pausing = False
|
||||||
|
"""Whether game-time should still progress when in menus/etc."""
|
||||||
|
|
||||||
# Whether idle players can potentially be kicked (should not happen in
|
|
||||||
# menus/etc).
|
|
||||||
allow_kick_idle_players = True
|
allow_kick_idle_players = True
|
||||||
|
"""Whether idle players can potentially be kicked (should not happen in
|
||||||
|
menus/etc)."""
|
||||||
|
|
||||||
# In vr mode, this determines whether overlay nodes (text, images, etc)
|
|
||||||
# are created at a fixed position in space or one that moves based on
|
|
||||||
# the current map. Generally this should be on for games and off for
|
|
||||||
# transitions/score-screens/etc. that persist between maps.
|
|
||||||
use_fixed_vr_overlay = False
|
use_fixed_vr_overlay = False
|
||||||
|
"""In vr mode, this determines whether overlay nodes (text, images, etc)
|
||||||
|
are created at a fixed position in space or one that moves based on
|
||||||
|
the current map. Generally this should be on for games and off for
|
||||||
|
transitions/score-screens/etc. that persist between maps."""
|
||||||
|
|
||||||
# If True, runs in slow motion and turns down sound pitch.
|
|
||||||
slow_motion = False
|
slow_motion = False
|
||||||
|
"""If True, runs in slow motion and turns down sound pitch."""
|
||||||
|
|
||||||
# Set this to True to inherit slow motion setting from previous
|
|
||||||
# activity (useful for transitions to avoid hitches).
|
|
||||||
inherits_slow_motion = False
|
inherits_slow_motion = False
|
||||||
|
"""Set this to True to inherit slow motion setting from previous
|
||||||
|
activity (useful for transitions to avoid hitches)."""
|
||||||
|
|
||||||
# Set this to True to keep playing the music from the previous activity
|
|
||||||
# (without even restarting it).
|
|
||||||
inherits_music = False
|
inherits_music = False
|
||||||
|
"""Set this to True to keep playing the music from the previous activity
|
||||||
|
(without even restarting it)."""
|
||||||
|
|
||||||
# Set this to true to inherit VR camera offsets from the previous
|
|
||||||
# activity (useful for preventing sporadic camera movement
|
|
||||||
# during transitions).
|
|
||||||
inherits_vr_camera_offset = False
|
inherits_vr_camera_offset = False
|
||||||
|
"""Set this to true to inherit VR camera offsets from the previous
|
||||||
|
activity (useful for preventing sporadic camera movement
|
||||||
|
during transitions)."""
|
||||||
|
|
||||||
# Set this to true to inherit (non-fixed) VR overlay positioning from
|
|
||||||
# the previous activity (useful for prevent sporadic overlay jostling
|
|
||||||
# during transitions).
|
|
||||||
inherits_vr_overlay_center = False
|
inherits_vr_overlay_center = False
|
||||||
|
"""Set this to true to inherit (non-fixed) VR overlay positioning from
|
||||||
|
the previous activity (useful for prevent sporadic overlay jostling
|
||||||
|
during transitions)."""
|
||||||
|
|
||||||
# Set this to true to inherit screen tint/vignette colors from the
|
|
||||||
# previous activity (useful to prevent sudden color changes during
|
|
||||||
# transitions).
|
|
||||||
inherits_tint = False
|
inherits_tint = False
|
||||||
|
"""Set this to true to inherit screen tint/vignette colors from the
|
||||||
|
previous activity (useful to prevent sudden color changes during
|
||||||
|
transitions)."""
|
||||||
|
|
||||||
# Whether players should be allowed to join in the middle of this
|
|
||||||
# activity. Note that Sessions may not allow mid-activity-joins even
|
|
||||||
# if the activity says its ok.
|
|
||||||
allow_mid_activity_joins: bool = True
|
allow_mid_activity_joins: bool = True
|
||||||
|
"""Whether players should be allowed to join in the middle of this
|
||||||
|
activity. Note that Sessions may not allow mid-activity-joins even
|
||||||
|
if the activity says its ok."""
|
||||||
|
|
||||||
# If the activity fades or transitions in, it should set the length of
|
|
||||||
# time here so that previous activities will be kept alive for that
|
|
||||||
# long (avoiding 'holes' in the screen)
|
|
||||||
# This value is given in real-time seconds.
|
|
||||||
transition_time = 0.0
|
transition_time = 0.0
|
||||||
|
"""If the activity fades or transitions in, it should set the length of
|
||||||
|
time here so that previous activities will be kept alive for that
|
||||||
|
long (avoiding 'holes' in the screen)
|
||||||
|
This value is given in real-time seconds."""
|
||||||
|
|
||||||
# Is it ok to show an ad after this activity ends before showing
|
|
||||||
# the next activity?
|
|
||||||
can_show_ad_on_death = False
|
can_show_ad_on_death = False
|
||||||
|
"""Is it ok to show an ad after this activity ends before showing
|
||||||
|
the next activity?"""
|
||||||
|
|
||||||
def __init__(self, settings: dict):
|
def __init__(self, settings: dict):
|
||||||
"""Creates an Activity in the current ba.Session.
|
"""Creates an Activity in the current ba.Session.
|
||||||
|
|
||||||
The activity will not be actually run until ba.Session.setactivity()
|
The activity will not be actually run until ba.Session.setactivity
|
||||||
is called. 'settings' should be a dict of key/value pairs specific
|
is called. 'settings' should be a dict of key/value pairs specific
|
||||||
to the activity.
|
to the activity.
|
||||||
|
|
||||||
|
|
@ -369,8 +363,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
def on_transition_out(self) -> None:
|
def on_transition_out(self) -> None:
|
||||||
"""Called when your activity begins transitioning out.
|
"""Called when your activity begins transitioning out.
|
||||||
|
|
||||||
Note that this may happen at any time even if end() has not been
|
Note that this may happen at any time even if ba.Activity.end() has
|
||||||
called.
|
not been called.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def on_begin(self) -> None:
|
def on_begin(self) -> None:
|
||||||
|
|
@ -386,11 +380,12 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
return UNHANDLED
|
return UNHANDLED
|
||||||
|
|
||||||
def has_transitioned_in(self) -> bool:
|
def has_transitioned_in(self) -> bool:
|
||||||
"""Return whether on_transition_in() has been called."""
|
"""Return whether ba.Activity.on_transition_in()
|
||||||
|
has been called."""
|
||||||
return self._has_transitioned_in
|
return self._has_transitioned_in
|
||||||
|
|
||||||
def has_begun(self) -> bool:
|
def has_begun(self) -> bool:
|
||||||
"""Return whether on_begin() has been called."""
|
"""Return whether ba.Activity.on_begin() has been called."""
|
||||||
return self._has_begun
|
return self._has_begun
|
||||||
|
|
||||||
def has_ended(self) -> bool:
|
def has_ended(self) -> bool:
|
||||||
|
|
@ -398,7 +393,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
return self._has_ended
|
return self._has_ended
|
||||||
|
|
||||||
def is_transitioning_out(self) -> bool:
|
def is_transitioning_out(self) -> bool:
|
||||||
"""Return whether on_transition_out() has been called."""
|
"""Return whether ba.Activity.on_transition_out() has been called."""
|
||||||
return self._transitioning_out
|
return self._transitioning_out
|
||||||
|
|
||||||
def transition_in(self, prev_globals: Optional[ba.Node]) -> None:
|
def transition_in(self, prev_globals: Optional[ba.Node]) -> None:
|
||||||
|
|
@ -517,8 +512,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
Subclasses can override this if the activity's player class
|
Subclasses can override this if the activity's player class
|
||||||
requires a custom constructor; otherwise it will be called with
|
requires a custom constructor; otherwise it will be called with
|
||||||
no args. Note that the player object should not be used at this
|
no args. Note that the player object should not be used at this
|
||||||
point as it is not yet fully wired up; wait for on_player_join()
|
point as it is not yet fully wired up; wait for
|
||||||
for that.
|
ba.Activity.on_player_join() for that.
|
||||||
"""
|
"""
|
||||||
del sessionplayer # Unused.
|
del sessionplayer # Unused.
|
||||||
player = self._playertype()
|
player = self._playertype()
|
||||||
|
|
@ -681,6 +676,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||||
sessionplayer.setactivity(None)
|
sessionplayer.setactivity(None)
|
||||||
sessionplayer.activityplayer = None
|
sessionplayer.activityplayer = None
|
||||||
|
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
def _setup_player_and_team_types(self) -> None:
|
def _setup_player_and_team_types(self) -> None:
|
||||||
"""Pull player and team types from our typing.Generic params."""
|
"""Pull player and team types from our typing.Generic params."""
|
||||||
|
|
||||||
|
|
|
||||||
43
dist/ba_data/python/ba/_actor.py
vendored
43
dist/ba_data/python/ba/_actor.py
vendored
|
|
@ -21,7 +21,7 @@ TA = TypeVar('TA', bound='Actor')
|
||||||
class Actor:
|
class Actor:
|
||||||
"""High level logical entities in a ba.Activity.
|
"""High level logical entities in a ba.Activity.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Actors act as controllers, combining some number of ba.Nodes,
|
Actors act as controllers, combining some number of ba.Nodes,
|
||||||
ba.Textures, ba.Sounds, etc. into a high-level cohesive unit.
|
ba.Textures, ba.Sounds, etc. into a high-level cohesive unit.
|
||||||
|
|
@ -33,15 +33,16 @@ class Actor:
|
||||||
(killing off or transitioning out their nodes) when the last Python
|
(killing off or transitioning out their nodes) when the last Python
|
||||||
reference to them disappears, so you can use logic such as:
|
reference to them disappears, so you can use logic such as:
|
||||||
|
|
||||||
# Create a flag Actor in our game activity:
|
##### Example
|
||||||
from bastd.actor.flag import Flag
|
>>> # Create a flag Actor in our game activity:
|
||||||
self.flag = Flag(position=(0, 10, 0))
|
... from bastd.actor.flag import Flag
|
||||||
|
... self.flag = Flag(position=(0, 10, 0))
|
||||||
# Later, destroy the flag.
|
...
|
||||||
# (provided nothing else is holding a reference to it)
|
... # Later, destroy the flag.
|
||||||
# We could also just assign a new flag to this value.
|
... # (provided nothing else is holding a reference to it)
|
||||||
# Either way, the old flag disappears.
|
... # We could also just assign a new flag to this value.
|
||||||
self.flag = None
|
... # Either way, the old flag disappears.
|
||||||
|
... self.flag = None
|
||||||
|
|
||||||
This is in contrast to the behavior of the more low level ba.Nodes,
|
This is in contrast to the behavior of the more low level ba.Nodes,
|
||||||
which are always explicitly created and destroyed and don't care
|
which are always explicitly created and destroyed and don't care
|
||||||
|
|
@ -51,18 +52,18 @@ class Actor:
|
||||||
if you want an Actor to stick around until explicitly killed
|
if you want an Actor to stick around until explicitly killed
|
||||||
regardless of references.
|
regardless of references.
|
||||||
|
|
||||||
Another key feature of ba.Actor is its handlemessage() method, which
|
Another key feature of ba.Actor is its ba.Actor.handlemessage() method,
|
||||||
takes a single arbitrary object as an argument. This provides a safe way
|
which takes a single arbitrary object as an argument. This provides a safe
|
||||||
to communicate between ba.Actor, ba.Activity, ba.Session, and any other
|
way to communicate between ba.Actor, ba.Activity, ba.Session, and any other
|
||||||
class providing a handlemessage() method. The most universally handled
|
class providing a handlemessage() method. The most universally handled
|
||||||
message type for Actors is the ba.DieMessage.
|
message type for Actors is the ba.DieMessage.
|
||||||
|
|
||||||
# Another way to kill the flag from the example above:
|
Another way to kill the flag from the example above:
|
||||||
# We can safely call this on any type with a 'handlemessage' method
|
We can safely call this on any type with a 'handlemessage' method
|
||||||
# (though its not guaranteed to always have a meaningful effect).
|
(though its not guaranteed to always have a meaningful effect).
|
||||||
# In this case the Actor instance will still be around, but its exists()
|
In this case the Actor instance will still be around, but its
|
||||||
# and is_alive() methods will both return False.
|
ba.Actor.exists() and ba.Actor.is_alive() methods will both return False.
|
||||||
self.flag.handlemessage(ba.DieMessage())
|
>>> self.flag.handlemessage(ba.DieMessage())
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
@ -112,7 +113,7 @@ class Actor:
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def on_expire(self) -> None:
|
def on_expire(self) -> None:
|
||||||
"""Called for remaining ba.Actors when their ba.Activity shuts down.
|
"""Called for remaining `ba.Actor`s when their ba.Activity shuts down.
|
||||||
|
|
||||||
Actors can use this opportunity to clear callbacks or other
|
Actors can use this opportunity to clear callbacks or other
|
||||||
references which have the potential of keeping the ba.Activity
|
references which have the potential of keeping the ba.Activity
|
||||||
|
|
|
||||||
22
dist/ba_data/python/ba/_ads.py
vendored
22
dist/ba_data/python/ba/_ads.py
vendored
|
|
@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
||||||
class AdsSubsystem:
|
class AdsSubsystem:
|
||||||
"""Subsystem for ads functionality in the app.
|
"""Subsystem for ads functionality in the app.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Access the single shared instance of this class at 'ba.app.ads'.
|
Access the single shared instance of this class at 'ba.app.ads'.
|
||||||
"""
|
"""
|
||||||
|
|
@ -77,7 +77,7 @@ class AdsSubsystem:
|
||||||
# No ads without net-connections, etc.
|
# No ads without net-connections, etc.
|
||||||
if not _ba.can_show_ad():
|
if not _ba.can_show_ad():
|
||||||
show = False
|
show = False
|
||||||
if app.accounts.have_pro():
|
if app.accounts_v1.have_pro():
|
||||||
show = False # Pro disables interstitials.
|
show = False # Pro disables interstitials.
|
||||||
try:
|
try:
|
||||||
session = _ba.get_foreground_host_session()
|
session = _ba.get_foreground_host_session()
|
||||||
|
|
@ -93,15 +93,15 @@ class AdsSubsystem:
|
||||||
launch_count = app.config.get('launchCount', 0)
|
launch_count = app.config.get('launchCount', 0)
|
||||||
|
|
||||||
# If we're seeing short ads we may want to space them differently.
|
# If we're seeing short ads we may want to space them differently.
|
||||||
interval_mult = (_ba.get_account_misc_read_val(
|
interval_mult = (_ba.get_v1_account_misc_read_val(
|
||||||
'ads.shortIntervalMult', 1.0)
|
'ads.shortIntervalMult', 1.0)
|
||||||
if self.last_ad_was_short else 1.0)
|
if self.last_ad_was_short else 1.0)
|
||||||
if self.ad_amt is None:
|
if self.ad_amt is None:
|
||||||
if launch_count <= 1:
|
if launch_count <= 1:
|
||||||
self.ad_amt = _ba.get_account_misc_read_val(
|
self.ad_amt = _ba.get_v1_account_misc_read_val(
|
||||||
'ads.startVal1', 0.99)
|
'ads.startVal1', 0.99)
|
||||||
else:
|
else:
|
||||||
self.ad_amt = _ba.get_account_misc_read_val(
|
self.ad_amt = _ba.get_v1_account_misc_read_val(
|
||||||
'ads.startVal2', 1.0)
|
'ads.startVal2', 1.0)
|
||||||
interval = None
|
interval = None
|
||||||
else:
|
else:
|
||||||
|
|
@ -110,15 +110,15 @@ class AdsSubsystem:
|
||||||
# (we reach our threshold faster the longer we've been
|
# (we reach our threshold faster the longer we've been
|
||||||
# playing).
|
# playing).
|
||||||
base = 'ads' if _ba.has_video_ads() else 'ads2'
|
base = 'ads' if _ba.has_video_ads() else 'ads2'
|
||||||
min_lc = _ba.get_account_misc_read_val(base + '.minLC', 0.0)
|
min_lc = _ba.get_v1_account_misc_read_val(base + '.minLC', 0.0)
|
||||||
max_lc = _ba.get_account_misc_read_val(base + '.maxLC', 5.0)
|
max_lc = _ba.get_v1_account_misc_read_val(base + '.maxLC', 5.0)
|
||||||
min_lc_scale = (_ba.get_account_misc_read_val(
|
min_lc_scale = (_ba.get_v1_account_misc_read_val(
|
||||||
base + '.minLCScale', 0.25))
|
base + '.minLCScale', 0.25))
|
||||||
max_lc_scale = (_ba.get_account_misc_read_val(
|
max_lc_scale = (_ba.get_v1_account_misc_read_val(
|
||||||
base + '.maxLCScale', 0.34))
|
base + '.maxLCScale', 0.34))
|
||||||
min_lc_interval = (_ba.get_account_misc_read_val(
|
min_lc_interval = (_ba.get_v1_account_misc_read_val(
|
||||||
base + '.minLCInterval', 360))
|
base + '.minLCInterval', 360))
|
||||||
max_lc_interval = (_ba.get_account_misc_read_val(
|
max_lc_interval = (_ba.get_v1_account_misc_read_val(
|
||||||
base + '.maxLCInterval', 300))
|
base + '.maxLCInterval', 300))
|
||||||
if launch_count < min_lc:
|
if launch_count < min_lc:
|
||||||
lc_amt = 0.0
|
lc_amt = 0.0
|
||||||
|
|
|
||||||
54
dist/ba_data/python/ba/_app.py
vendored
54
dist/ba_data/python/ba/_app.py
vendored
|
|
@ -7,6 +7,7 @@ import random
|
||||||
import logging
|
import logging
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
|
|
||||||
import _ba
|
import _ba
|
||||||
from ba._music import MusicSubsystem
|
from ba._music import MusicSubsystem
|
||||||
|
|
@ -14,21 +15,25 @@ from ba._language import LanguageSubsystem
|
||||||
from ba._ui import UISubsystem
|
from ba._ui import UISubsystem
|
||||||
from ba._achievement import AchievementSubsystem
|
from ba._achievement import AchievementSubsystem
|
||||||
from ba._plugin import PluginSubsystem
|
from ba._plugin import PluginSubsystem
|
||||||
from ba._account import AccountSubsystem
|
from ba._accountv1 import AccountV1Subsystem
|
||||||
from ba._meta import MetadataSubsystem
|
from ba._meta import MetadataSubsystem
|
||||||
from ba._ads import AdsSubsystem
|
from ba._ads import AdsSubsystem
|
||||||
from ba._net import NetworkSubsystem
|
from ba._net import NetworkSubsystem
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import ba
|
import asyncio
|
||||||
from bastd.actor import spazappearance
|
|
||||||
from typing import Optional, Any, Callable
|
from typing import Optional, Any, Callable
|
||||||
|
|
||||||
|
import ba
|
||||||
|
from ba.cloud import CloudSubsystem
|
||||||
|
from bastd.actor import spazappearance
|
||||||
|
from ba._accountv2 import AccountV2Subsystem
|
||||||
|
|
||||||
|
|
||||||
class App:
|
class App:
|
||||||
"""A class for high level app functionality and state.
|
"""A class for high level app functionality and state.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Use ba.app to access the single shared instance of this class.
|
Use ba.app to access the single shared instance of this class.
|
||||||
|
|
||||||
|
|
@ -38,6 +43,10 @@ class App:
|
||||||
|
|
||||||
# pylint: disable=too-many-public-methods
|
# pylint: disable=too-many-public-methods
|
||||||
|
|
||||||
|
# Implementations for these will be filled in by internal libs.
|
||||||
|
accounts_v2: AccountV2Subsystem
|
||||||
|
cloud: CloudSubsystem
|
||||||
|
|
||||||
class State(Enum):
|
class State(Enum):
|
||||||
"""High level state the app can be in."""
|
"""High level state the app can be in."""
|
||||||
LAUNCHING = 0
|
LAUNCHING = 0
|
||||||
|
|
@ -45,6 +54,20 @@ class App:
|
||||||
PAUSED = 2
|
PAUSED = 2
|
||||||
SHUTTING_DOWN = 3
|
SHUTTING_DOWN = 3
|
||||||
|
|
||||||
|
@property
|
||||||
|
def aioloop(self) -> asyncio.AbstractEventLoop:
|
||||||
|
"""The Logic Thread's Asyncio Event Loop.
|
||||||
|
|
||||||
|
This allow async tasks to be run in the logic thread.
|
||||||
|
Note that, at this time, the asyncio loop is encapsulated
|
||||||
|
and explicitly stepped by the engine's logic thread loop and
|
||||||
|
thus things like asyncio.get_running_loop() will not return this
|
||||||
|
loop from most places in the logic thread; only from within a
|
||||||
|
task explicitly created in this loop.
|
||||||
|
"""
|
||||||
|
assert self._aioloop is not None
|
||||||
|
return self._aioloop
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def build_number(self) -> int:
|
def build_number(self) -> int:
|
||||||
"""Integer build number.
|
"""Integer build number.
|
||||||
|
|
@ -196,6 +219,8 @@ class App:
|
||||||
# refreshed/etc.
|
# refreshed/etc.
|
||||||
self.fg_state = 0
|
self.fg_state = 0
|
||||||
|
|
||||||
|
self._aioloop: Optional[asyncio.AbstractEventLoop] = None
|
||||||
|
|
||||||
self._env = _ba.env()
|
self._env = _ba.env()
|
||||||
self.protocol_version: int = self._env['protocol_version']
|
self.protocol_version: int = self._env['protocol_version']
|
||||||
assert isinstance(self.protocol_version, int)
|
assert isinstance(self.protocol_version, int)
|
||||||
|
|
@ -211,6 +236,11 @@ class App:
|
||||||
assert isinstance(self.iircade_mode, bool)
|
assert isinstance(self.iircade_mode, bool)
|
||||||
self.allow_ticket_purchases: bool = not self.iircade_mode
|
self.allow_ticket_purchases: bool = not self.iircade_mode
|
||||||
|
|
||||||
|
# Default executor which can be used for misc background processing.
|
||||||
|
# It should also be passed to any asyncio loops we create so that
|
||||||
|
# everything shares the same single set of threads.
|
||||||
|
self.threadpool = ThreadPoolExecutor(thread_name_prefix='baworker')
|
||||||
|
|
||||||
# Misc.
|
# Misc.
|
||||||
self.tips: list[str] = []
|
self.tips: list[str] = []
|
||||||
self.stress_test_reset_timer: Optional[ba.Timer] = None
|
self.stress_test_reset_timer: Optional[ba.Timer] = None
|
||||||
|
|
@ -235,7 +265,7 @@ class App:
|
||||||
self.server: Optional[ba.ServerController] = None
|
self.server: Optional[ba.ServerController] = None
|
||||||
|
|
||||||
self.meta = MetadataSubsystem()
|
self.meta = MetadataSubsystem()
|
||||||
self.accounts = AccountSubsystem()
|
self.accounts_v1 = AccountV1Subsystem()
|
||||||
self.plugins = PluginSubsystem()
|
self.plugins = PluginSubsystem()
|
||||||
self.music = MusicSubsystem()
|
self.music = MusicSubsystem()
|
||||||
self.lang = LanguageSubsystem()
|
self.lang = LanguageSubsystem()
|
||||||
|
|
@ -285,11 +315,11 @@ class App:
|
||||||
"""Runs after the app finishes bootstrapping.
|
"""Runs after the app finishes bootstrapping.
|
||||||
|
|
||||||
(internal)"""
|
(internal)"""
|
||||||
# pylint: disable=too-many-locals
|
|
||||||
# pylint: disable=cyclic-import
|
# pylint: disable=cyclic-import
|
||||||
|
# pylint: disable=too-many-locals
|
||||||
|
from ba import _asyncio
|
||||||
from ba import _apputils
|
from ba import _apputils
|
||||||
from ba import _appconfig
|
from ba import _appconfig
|
||||||
from ba import _achievement
|
|
||||||
from ba import _map
|
from ba import _map
|
||||||
from ba import _campaign
|
from ba import _campaign
|
||||||
from bastd import appdelegate
|
from bastd import appdelegate
|
||||||
|
|
@ -299,6 +329,8 @@ class App:
|
||||||
import custom_hooks
|
import custom_hooks
|
||||||
custom_hooks.on_app_launch()
|
custom_hooks.on_app_launch()
|
||||||
|
|
||||||
|
self._aioloop = _asyncio.setup_asyncio()
|
||||||
|
|
||||||
cfg = self.config
|
cfg = self.config
|
||||||
|
|
||||||
self.delegate = appdelegate.AppDelegate()
|
self.delegate = appdelegate.AppDelegate()
|
||||||
|
|
@ -369,7 +401,8 @@ class App:
|
||||||
_ba.timer(3.0, check_special_offer, timetype=TimeType.REAL)
|
_ba.timer(3.0, check_special_offer, timetype=TimeType.REAL)
|
||||||
|
|
||||||
self.meta.on_app_launch()
|
self.meta.on_app_launch()
|
||||||
self.accounts.on_app_launch()
|
self.accounts_v2.on_app_launch()
|
||||||
|
self.accounts_v1.on_app_launch()
|
||||||
self.plugins.on_app_launch()
|
self.plugins.on_app_launch()
|
||||||
|
|
||||||
# See note below in on_app_pause.
|
# See note below in on_app_pause.
|
||||||
|
|
@ -407,7 +440,7 @@ class App:
|
||||||
self._app_paused = False
|
self._app_paused = False
|
||||||
self._update_state()
|
self._update_state()
|
||||||
self.fg_state += 1
|
self.fg_state += 1
|
||||||
self.accounts.on_app_resume()
|
self.accounts_v1.on_app_resume()
|
||||||
self.music.on_app_resume()
|
self.music.on_app_resume()
|
||||||
self.plugins.on_app_resume()
|
self.plugins.on_app_resume()
|
||||||
|
|
||||||
|
|
@ -431,7 +464,6 @@ class App:
|
||||||
activity: Optional[ba.Activity] = _ba.get_foreground_host_activity()
|
activity: Optional[ba.Activity] = _ba.get_foreground_host_activity()
|
||||||
if (activity is not None and activity.allow_pausing
|
if (activity is not None and activity.allow_pausing
|
||||||
and not _ba.have_connected_clients()):
|
and not _ba.have_connected_clients()):
|
||||||
from ba import _gameutils
|
|
||||||
from ba._language import Lstr
|
from ba._language import Lstr
|
||||||
from ba._nodeactor import NodeActor
|
from ba._nodeactor import NodeActor
|
||||||
|
|
||||||
|
|
@ -574,7 +606,7 @@ class App:
|
||||||
appname = _ba.appname()
|
appname = _ba.appname()
|
||||||
if url.startswith(f'{appname}://code/'):
|
if url.startswith(f'{appname}://code/'):
|
||||||
code = url.replace(f'{appname}://code/', '')
|
code = url.replace(f'{appname}://code/', '')
|
||||||
self.accounts.add_pending_promo_code(code)
|
self.accounts_v1.add_pending_promo_code(code)
|
||||||
else:
|
else:
|
||||||
_ba.screenmessage(Lstr(resource='errorText'), color=(1, 0, 0))
|
_ba.screenmessage(Lstr(resource='errorText'), color=(1, 0, 0))
|
||||||
_ba.playsound(_ba.getsound('error'))
|
_ba.playsound(_ba.getsound('error'))
|
||||||
|
|
|
||||||
16
dist/ba_data/python/ba/_appconfig.py
vendored
16
dist/ba_data/python/ba/_appconfig.py
vendored
|
|
@ -14,7 +14,7 @@ if TYPE_CHECKING:
|
||||||
class AppConfig(dict):
|
class AppConfig(dict):
|
||||||
"""A special dict that holds the game's persistent configuration values.
|
"""A special dict that holds the game's persistent configuration values.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
It also provides methods for fetching values with app-defined fallback
|
It also provides methods for fetching values with app-defined fallback
|
||||||
defaults, applying contained values to the game, and committing the
|
defaults, applying contained values to the game, and committing the
|
||||||
|
|
@ -126,14 +126,14 @@ def read_config() -> tuple[AppConfig, bool]:
|
||||||
try:
|
try:
|
||||||
import shutil
|
import shutil
|
||||||
shutil.copyfile(config_file_path, config_file_path + '.broken')
|
shutil.copyfile(config_file_path, config_file_path + '.broken')
|
||||||
except Exception as exc:
|
except Exception as exc2:
|
||||||
print('EXC copying broken config:', exc)
|
print('EXC copying broken config:', exc2)
|
||||||
try:
|
try:
|
||||||
_ba.log('broken config contents:\n' +
|
_ba.log('broken config contents:\n' +
|
||||||
config_contents.replace('\000', '<NULL_BYTE>'),
|
config_contents.replace('\000', '<NULL_BYTE>'),
|
||||||
to_stdout=False)
|
to_stdout=False)
|
||||||
except Exception as exc:
|
except Exception as exc2:
|
||||||
print('EXC logging broken config contents:', exc)
|
print('EXC logging broken config contents:', exc2)
|
||||||
config = AppConfig()
|
config = AppConfig()
|
||||||
|
|
||||||
# Now attempt to read one of our 'prev' backup copies.
|
# Now attempt to read one of our 'prev' backup copies.
|
||||||
|
|
@ -147,15 +147,15 @@ def read_config() -> tuple[AppConfig, bool]:
|
||||||
config = AppConfig()
|
config = AppConfig()
|
||||||
config_file_healthy = True
|
config_file_healthy = True
|
||||||
print('successfully read backup config.')
|
print('successfully read backup config.')
|
||||||
except Exception as exc:
|
except Exception as exc2:
|
||||||
print('EXC reading prev backup config:', exc)
|
print('EXC reading prev backup config:', exc2)
|
||||||
return config, config_file_healthy
|
return config, config_file_healthy
|
||||||
|
|
||||||
|
|
||||||
def commit_app_config(force: bool = False) -> None:
|
def commit_app_config(force: bool = False) -> None:
|
||||||
"""Commit the config to persistent storage.
|
"""Commit the config to persistent storage.
|
||||||
|
|
||||||
Category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
(internal)
|
(internal)
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
8
dist/ba_data/python/ba/_asyncio.py
vendored
8
dist/ba_data/python/ba/_asyncio.py
vendored
|
|
@ -21,11 +21,12 @@ _asyncio_timer: Optional[ba.Timer] = None
|
||||||
_asyncio_event_loop: Optional[asyncio.AbstractEventLoop] = None
|
_asyncio_event_loop: Optional[asyncio.AbstractEventLoop] = None
|
||||||
|
|
||||||
|
|
||||||
def setup_asyncio() -> None:
|
def setup_asyncio() -> asyncio.AbstractEventLoop:
|
||||||
"""Setup asyncio functionality for our game thread."""
|
"""Setup asyncio functionality for the logic thread."""
|
||||||
# pylint: disable=global-statement
|
# pylint: disable=global-statement
|
||||||
|
|
||||||
import _ba
|
import _ba
|
||||||
|
import ba
|
||||||
from ba._generated.enums import TimeType
|
from ba._generated.enums import TimeType
|
||||||
|
|
||||||
assert _ba.in_game_thread()
|
assert _ba.in_game_thread()
|
||||||
|
|
@ -40,6 +41,7 @@ def setup_asyncio() -> None:
|
||||||
|
|
||||||
global _asyncio_event_loop # pylint: disable=invalid-name
|
global _asyncio_event_loop # pylint: disable=invalid-name
|
||||||
_asyncio_event_loop = asyncio.new_event_loop()
|
_asyncio_event_loop = asyncio.new_event_loop()
|
||||||
|
_asyncio_event_loop.set_default_executor(ba.app.threadpool)
|
||||||
|
|
||||||
# Ideally we should integrate asyncio into our C++ Thread class's
|
# Ideally we should integrate asyncio into our C++ Thread class's
|
||||||
# low level event loop so that asyncio timers/sockets/etc. could
|
# low level event loop so that asyncio timers/sockets/etc. could
|
||||||
|
|
@ -70,3 +72,5 @@ def setup_asyncio() -> None:
|
||||||
print('TEST AIO TASK ENDING')
|
print('TEST AIO TASK ENDING')
|
||||||
|
|
||||||
_asyncio_event_loop.create_task(aio_test())
|
_asyncio_event_loop.create_task(aio_test())
|
||||||
|
|
||||||
|
return _asyncio_event_loop
|
||||||
|
|
|
||||||
6
dist/ba_data/python/ba/_campaign.py
vendored
6
dist/ba_data/python/ba/_campaign.py
vendored
|
|
@ -23,9 +23,9 @@ def getcampaign(name: str) -> ba.Campaign:
|
||||||
|
|
||||||
|
|
||||||
class Campaign:
|
class Campaign:
|
||||||
"""Represents a unique set or series of ba.Levels.
|
"""Represents a unique set or series of ba.Level-s.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, name: str, sequential: bool = True):
|
def __init__(self, name: str, sequential: bool = True):
|
||||||
|
|
@ -52,7 +52,7 @@ class Campaign:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def levels(self) -> list[ba.Level]:
|
def levels(self) -> list[ba.Level]:
|
||||||
"""The list of ba.Levels in the Campaign."""
|
"""The list of ba.Level-s in the Campaign."""
|
||||||
return self._levels
|
return self._levels
|
||||||
|
|
||||||
def getlevel(self, name: str) -> ba.Level:
|
def getlevel(self, name: str) -> ba.Level:
|
||||||
|
|
|
||||||
4
dist/ba_data/python/ba/_collision.py
vendored
4
dist/ba_data/python/ba/_collision.py
vendored
|
|
@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
||||||
class Collision:
|
class Collision:
|
||||||
"""A class providing info about occurring collisions.
|
"""A class providing info about occurring collisions.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
@ -67,6 +67,6 @@ _collision = Collision()
|
||||||
def getcollision() -> Collision:
|
def getcollision() -> Collision:
|
||||||
"""Return the in-progress collision.
|
"""Return the in-progress collision.
|
||||||
|
|
||||||
Category: Gameplay Functions
|
Category: **Gameplay Functions**
|
||||||
"""
|
"""
|
||||||
return _collision
|
return _collision
|
||||||
|
|
|
||||||
4
dist/ba_data/python/ba/_coopgame.py
vendored
4
dist/ba_data/python/ba/_coopgame.py
vendored
|
|
@ -14,14 +14,16 @@ if TYPE_CHECKING:
|
||||||
from bastd.actor.playerspaz import PlayerSpaz
|
from bastd.actor.playerspaz import PlayerSpaz
|
||||||
import ba
|
import ba
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
TeamType = TypeVar('TeamType', bound='ba.Team')
|
TeamType = TypeVar('TeamType', bound='ba.Team')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class CoopGameActivity(GameActivity[PlayerType, TeamType]):
|
class CoopGameActivity(GameActivity[PlayerType, TeamType]):
|
||||||
"""Base class for cooperative-mode games.
|
"""Base class for cooperative-mode games.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# We can assume our session is a CoopSession.
|
# We can assume our session is a CoopSession.
|
||||||
|
|
|
||||||
8
dist/ba_data/python/ba/_coopsession.py
vendored
8
dist/ba_data/python/ba/_coopsession.py
vendored
|
|
@ -132,7 +132,7 @@ class CoopSession(Session):
|
||||||
# else:
|
# else:
|
||||||
# nextlevel = None
|
# nextlevel = None
|
||||||
nextlevel=levels[(level.index+1)%len(levels)]
|
nextlevel=levels[(level.index+1)%len(levels)]
|
||||||
|
|
||||||
if nextlevel:
|
if nextlevel:
|
||||||
gametype = nextlevel.gametype
|
gametype = nextlevel.gametype
|
||||||
settings = nextlevel.get_settings()
|
settings = nextlevel.get_settings()
|
||||||
|
|
@ -284,12 +284,12 @@ class CoopSession(Session):
|
||||||
|
|
||||||
if outcome=="victory" or outcome=="restart" or outcome=="defeat":
|
if outcome=="victory" or outcome=="restart" or outcome=="defeat":
|
||||||
outcome = 'next_level'
|
outcome = 'next_level'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (isinstance(activity,
|
if (isinstance(activity,
|
||||||
(JoinActivity, CoopScoreScreen, TransitionActivity))) or True:
|
(JoinActivity, CoopScoreScreen, TransitionActivity))) or True:
|
||||||
|
|
||||||
from features import team_balancer
|
from features import team_balancer
|
||||||
team_balancer.checkToExitCoop()
|
team_balancer.checkToExitCoop()
|
||||||
|
|
||||||
|
|
@ -355,7 +355,7 @@ class CoopSession(Session):
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
if False:
|
if False:
|
||||||
|
|
||||||
|
|
||||||
playerinfos: list[ba.PlayerInfo]
|
playerinfos: list[ba.PlayerInfo]
|
||||||
|
|
||||||
|
|
|
||||||
10
dist/ba_data/python/ba/_dependency.py
vendored
10
dist/ba_data/python/ba/_dependency.py
vendored
|
|
@ -19,7 +19,7 @@ T = TypeVar('T', bound='DependencyComponent')
|
||||||
class Dependency(Generic[T]):
|
class Dependency(Generic[T]):
|
||||||
"""A dependency on a DependencyComponent (with an optional config).
|
"""A dependency on a DependencyComponent (with an optional config).
|
||||||
|
|
||||||
Category: Dependency Classes
|
Category: **Dependency Classes**
|
||||||
|
|
||||||
This class is used to request and access functionality provided
|
This class is used to request and access functionality provided
|
||||||
by other DependencyComponent classes from a DependencyComponent class.
|
by other DependencyComponent classes from a DependencyComponent class.
|
||||||
|
|
@ -87,7 +87,7 @@ class Dependency(Generic[T]):
|
||||||
class DependencyComponent:
|
class DependencyComponent:
|
||||||
"""Base class for all classes that can act as or use dependencies.
|
"""Base class for all classes that can act as or use dependencies.
|
||||||
|
|
||||||
category: Dependency Classes
|
Category: **Dependency Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_dep_entry: weakref.ref[DependencyEntry]
|
_dep_entry: weakref.ref[DependencyEntry]
|
||||||
|
|
@ -146,7 +146,7 @@ class DependencyEntry:
|
||||||
# This allows us to inject its data properly before __init__().
|
# This allows us to inject its data properly before __init__().
|
||||||
print('creating', self.cls)
|
print('creating', self.cls)
|
||||||
instance = self.cls.__new__(self.cls)
|
instance = self.cls.__new__(self.cls)
|
||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access, unnecessary-dunder-call
|
||||||
instance._dep_entry = weakref.ref(self)
|
instance._dep_entry = weakref.ref(self)
|
||||||
instance.__init__() # type: ignore
|
instance.__init__() # type: ignore
|
||||||
|
|
||||||
|
|
@ -165,7 +165,7 @@ class DependencyEntry:
|
||||||
class DependencySet(Generic[T]):
|
class DependencySet(Generic[T]):
|
||||||
"""Set of resolved dependencies and their associated data.
|
"""Set of resolved dependencies and their associated data.
|
||||||
|
|
||||||
Category: Dependency Classes
|
Category: **Dependency Classes**
|
||||||
|
|
||||||
To use DependencyComponents, a set must be created, resolved, and then
|
To use DependencyComponents, a set must be created, resolved, and then
|
||||||
loaded. The DependencyComponents are only valid while the set remains
|
loaded. The DependencyComponents are only valid while the set remains
|
||||||
|
|
@ -291,7 +291,7 @@ class DependencySet(Generic[T]):
|
||||||
class AssetPackage(DependencyComponent):
|
class AssetPackage(DependencyComponent):
|
||||||
"""ba.DependencyComponent representing a bundled package of game assets.
|
"""ba.DependencyComponent representing a bundled package of game assets.
|
||||||
|
|
||||||
Category: Asset Classes
|
Category: **Asset Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_dualteamsession.py
vendored
2
dist/ba_data/python/ba/_dualteamsession.py
vendored
|
|
@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
||||||
class DualTeamSession(MultiTeamSession):
|
class DualTeamSession(MultiTeamSession):
|
||||||
"""ba.Session type for teams mode games.
|
"""ba.Session type for teams mode games.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Base class overrides:
|
# Base class overrides:
|
||||||
|
|
|
||||||
32
dist/ba_data/python/ba/_error.py
vendored
32
dist/ba_data/python/ba/_error.py
vendored
|
|
@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
||||||
class DependencyError(Exception):
|
class DependencyError(Exception):
|
||||||
"""Exception raised when one or more ba.Dependency items are missing.
|
"""Exception raised when one or more ba.Dependency items are missing.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
|
|
||||||
(this will generally be missing assets).
|
(this will generally be missing assets).
|
||||||
"""
|
"""
|
||||||
|
|
@ -34,7 +34,7 @@ class DependencyError(Exception):
|
||||||
class ContextError(Exception):
|
class ContextError(Exception):
|
||||||
"""Exception raised when a call is made in an invalid context.
|
"""Exception raised when a call is made in an invalid context.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
|
|
||||||
Examples of this include calling UI functions within an Activity context
|
Examples of this include calling UI functions within an Activity context
|
||||||
or calling scene manipulation functions outside of a game context.
|
or calling scene manipulation functions outside of a game context.
|
||||||
|
|
@ -44,91 +44,91 @@ class ContextError(Exception):
|
||||||
class NotFoundError(Exception):
|
class NotFoundError(Exception):
|
||||||
"""Exception raised when a referenced object does not exist.
|
"""Exception raised when a referenced object does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class PlayerNotFoundError(NotFoundError):
|
class PlayerNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Player does not exist.
|
"""Exception raised when an expected ba.Player does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SessionPlayerNotFoundError(NotFoundError):
|
class SessionPlayerNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.SessionPlayer does not exist.
|
"""Exception raised when an expected ba.SessionPlayer does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class TeamNotFoundError(NotFoundError):
|
class TeamNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Team does not exist.
|
"""Exception raised when an expected ba.Team does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class DelegateNotFoundError(NotFoundError):
|
class DelegateNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected delegate object does not exist.
|
"""Exception raised when an expected delegate object does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SessionTeamNotFoundError(NotFoundError):
|
class SessionTeamNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.SessionTeam does not exist.
|
"""Exception raised when an expected ba.SessionTeam does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class NodeNotFoundError(NotFoundError):
|
class NodeNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Node does not exist.
|
"""Exception raised when an expected ba.Node does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class ActorNotFoundError(NotFoundError):
|
class ActorNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Actor does not exist.
|
"""Exception raised when an expected ba.Actor does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class ActivityNotFoundError(NotFoundError):
|
class ActivityNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Activity does not exist.
|
"""Exception raised when an expected ba.Activity does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SessionNotFoundError(NotFoundError):
|
class SessionNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Session does not exist.
|
"""Exception raised when an expected ba.Session does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class InputDeviceNotFoundError(NotFoundError):
|
class InputDeviceNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.InputDevice does not exist.
|
"""Exception raised when an expected ba.InputDevice does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class WidgetNotFoundError(NotFoundError):
|
class WidgetNotFoundError(NotFoundError):
|
||||||
"""Exception raised when an expected ba.Widget does not exist.
|
"""Exception raised when an expected ba.Widget does not exist.
|
||||||
|
|
||||||
category: Exception Classes
|
Category: **Exception Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def print_exception(*args: Any, **keywds: Any) -> None:
|
def print_exception(*args: Any, **keywds: Any) -> None:
|
||||||
"""Print info about an exception along with pertinent context state.
|
"""Print info about an exception along with pertinent context state.
|
||||||
|
|
||||||
category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
Prints all arguments provided along with various info about the
|
Prints all arguments provided along with various info about the
|
||||||
current context and the outstanding exception.
|
current context and the outstanding exception.
|
||||||
|
|
@ -168,7 +168,7 @@ def print_exception(*args: Any, **keywds: Any) -> None:
|
||||||
def print_error(err_str: str, once: bool = False) -> None:
|
def print_error(err_str: str, once: bool = False) -> None:
|
||||||
"""Print info about an error along with pertinent context state.
|
"""Print info about an error along with pertinent context state.
|
||||||
|
|
||||||
category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
Prints all positional arguments provided along with various info about the
|
Prints all positional arguments provided along with various info about the
|
||||||
current context.
|
current context.
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_freeforallsession.py
vendored
2
dist/ba_data/python/ba/_freeforallsession.py
vendored
|
|
@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
||||||
class FreeForAllSession(MultiTeamSession):
|
class FreeForAllSession(MultiTeamSession):
|
||||||
"""ba.Session type for free-for-all mode games.
|
"""ba.Session type for free-for-all mode games.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
use_teams = False
|
use_teams = False
|
||||||
use_team_colors = False
|
use_team_colors = False
|
||||||
|
|
|
||||||
15
dist/ba_data/python/ba/_gameactivity.py
vendored
15
dist/ba_data/python/ba/_gameactivity.py
vendored
|
|
@ -24,14 +24,16 @@ if TYPE_CHECKING:
|
||||||
from bastd.actor.bomb import TNTSpawner
|
from bastd.actor.bomb import TNTSpawner
|
||||||
import ba
|
import ba
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
TeamType = TypeVar('TeamType', bound='ba.Team')
|
TeamType = TypeVar('TeamType', bound='ba.Team')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class GameActivity(Activity[PlayerType, TeamType]):
|
class GameActivity(Activity[PlayerType, TeamType]):
|
||||||
"""Common base class for all game ba.Activities.
|
"""Common base class for all game ba.Activities.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-public-methods
|
# pylint: disable=too-many-public-methods
|
||||||
|
|
||||||
|
|
@ -237,11 +239,11 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||||
self._zoom_message_times: dict[int, float] = {}
|
self._zoom_message_times: dict[int, float] = {}
|
||||||
self._is_waiting_for_continue = False
|
self._is_waiting_for_continue = False
|
||||||
|
|
||||||
self._continue_cost = _ba.get_account_misc_read_val(
|
self._continue_cost = _ba.get_v1_account_misc_read_val(
|
||||||
'continueStartCost', 25)
|
'continueStartCost', 25)
|
||||||
self._continue_cost_mult = _ba.get_account_misc_read_val(
|
self._continue_cost_mult = _ba.get_v1_account_misc_read_val(
|
||||||
'continuesMult', 2)
|
'continuesMult', 2)
|
||||||
self._continue_cost_offset = _ba.get_account_misc_read_val(
|
self._continue_cost_offset = _ba.get_v1_account_misc_read_val(
|
||||||
'continuesOffset', 0)
|
'continuesOffset', 0)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
@ -258,6 +260,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||||
"""Return a name for this particular game instance."""
|
"""Return a name for this particular game instance."""
|
||||||
return self.get_display_string(self.settings_raw)
|
return self.get_display_string(self.settings_raw)
|
||||||
|
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
def get_instance_scoreboard_display_string(self) -> ba.Lstr:
|
def get_instance_scoreboard_display_string(self) -> ba.Lstr:
|
||||||
"""Return a name for this particular game instance.
|
"""Return a name for this particular game instance.
|
||||||
|
|
||||||
|
|
@ -387,7 +390,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||||
from ba._generated.enums import TimeType
|
from ba._generated.enums import TimeType
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if _ba.get_account_misc_read_val('enableContinues', False):
|
if _ba.get_v1_account_misc_read_val('enableContinues', False):
|
||||||
session = self.session
|
session = self.session
|
||||||
|
|
||||||
# We only support continuing in non-tournament games.
|
# We only support continuing in non-tournament games.
|
||||||
|
|
@ -464,7 +467,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||||
data_t = data['t'] # This used to be the whole payload.
|
data_t = data['t'] # This used to be the whole payload.
|
||||||
|
|
||||||
# Keep our cached tourney info up to date
|
# Keep our cached tourney info up to date
|
||||||
_ba.app.accounts.cache_tournament_info(data_t)
|
_ba.app.accounts_v1.cache_tournament_info(data_t)
|
||||||
self._setup_tournament_time_limit(
|
self._setup_tournament_time_limit(
|
||||||
max(5, data_t[0]['timeRemaining']))
|
max(5, data_t[0]['timeRemaining']))
|
||||||
|
|
||||||
|
|
|
||||||
4
dist/ba_data/python/ba/_gameresults.py
vendored
4
dist/ba_data/python/ba/_gameresults.py
vendored
|
|
@ -27,10 +27,10 @@ class GameResults:
|
||||||
"""
|
"""
|
||||||
Results for a completed game.
|
Results for a completed game.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Upon completion, a game should fill one of these out and pass it to its
|
Upon completion, a game should fill one of these out and pass it to its
|
||||||
ba.Activity.end() call.
|
ba.Activity.end call.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
|
||||||
17
dist/ba_data/python/ba/_gameutils.py
vendored
17
dist/ba_data/python/ba/_gameutils.py
vendored
|
|
@ -29,7 +29,7 @@ TROPHY_CHARS = {
|
||||||
class GameTip:
|
class GameTip:
|
||||||
"""Defines a tip presentable to the user at the start of a game.
|
"""Defines a tip presentable to the user at the start of a game.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
text: str
|
text: str
|
||||||
icon: Optional[ba.Texture] = None
|
icon: Optional[ba.Texture] = None
|
||||||
|
|
@ -53,7 +53,7 @@ def animate(node: ba.Node,
|
||||||
suppress_format_warning: bool = False) -> ba.Node:
|
suppress_format_warning: bool = False) -> ba.Node:
|
||||||
"""Animate values on a target ba.Node.
|
"""Animate values on a target ba.Node.
|
||||||
|
|
||||||
Category: Gameplay Functions
|
Category: **Gameplay Functions**
|
||||||
|
|
||||||
Creates an 'animcurve' node with the provided values and time as an input,
|
Creates an 'animcurve' node with the provided values and time as an input,
|
||||||
connect it to the provided attribute, and set it to die with the target.
|
connect it to the provided attribute, and set it to die with the target.
|
||||||
|
|
@ -98,6 +98,7 @@ def animate(node: ba.Node,
|
||||||
# FIXME: Even if we are looping we should have a way to die once we
|
# FIXME: Even if we are looping we should have a way to die once we
|
||||||
# get disconnected.
|
# get disconnected.
|
||||||
if not loop:
|
if not loop:
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
_ba.timer(int(mult * items[-1][0]) + 1000,
|
_ba.timer(int(mult * items[-1][0]) + 1000,
|
||||||
curve.delete,
|
curve.delete,
|
||||||
timeformat=TimeFormat.MILLISECONDS)
|
timeformat=TimeFormat.MILLISECONDS)
|
||||||
|
|
@ -127,9 +128,9 @@ def animate_array(node: ba.Node,
|
||||||
suppress_format_warning: bool = False) -> None:
|
suppress_format_warning: bool = False) -> None:
|
||||||
"""Animate an array of values on a target ba.Node.
|
"""Animate an array of values on a target ba.Node.
|
||||||
|
|
||||||
Category: Gameplay Functions
|
Category: **Gameplay Functions**
|
||||||
|
|
||||||
Like ba.animate(), but operates on array attributes.
|
Like ba.animate, but operates on array attributes.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
combine = _ba.newnode('combine', owner=node, attrs={'size': size})
|
combine = _ba.newnode('combine', owner=node, attrs={'size': size})
|
||||||
|
|
@ -178,6 +179,7 @@ def animate_array(node: ba.Node,
|
||||||
# curve after its done its job.
|
# curve after its done its job.
|
||||||
if not loop:
|
if not loop:
|
||||||
# (PyCharm seems to think item is a float, not a tuple)
|
# (PyCharm seems to think item is a float, not a tuple)
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
_ba.timer(int(mult * items[-1][0]) + 1000,
|
_ba.timer(int(mult * items[-1][0]) + 1000,
|
||||||
curve.delete,
|
curve.delete,
|
||||||
timeformat=TimeFormat.MILLISECONDS)
|
timeformat=TimeFormat.MILLISECONDS)
|
||||||
|
|
@ -189,6 +191,7 @@ def animate_array(node: ba.Node,
|
||||||
# once we get disconnected.
|
# once we get disconnected.
|
||||||
if not loop:
|
if not loop:
|
||||||
# (PyCharm seems to think item is a float, not a tuple)
|
# (PyCharm seems to think item is a float, not a tuple)
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
_ba.timer(int(mult * items[-1][0]) + 1000,
|
_ba.timer(int(mult * items[-1][0]) + 1000,
|
||||||
combine.delete,
|
combine.delete,
|
||||||
timeformat=TimeFormat.MILLISECONDS)
|
timeformat=TimeFormat.MILLISECONDS)
|
||||||
|
|
@ -198,7 +201,7 @@ def show_damage_count(damage: str, position: Sequence[float],
|
||||||
direction: Sequence[float]) -> None:
|
direction: Sequence[float]) -> None:
|
||||||
"""Pop up a damage count at a position in space.
|
"""Pop up a damage count at a position in space.
|
||||||
|
|
||||||
Category: Gameplay Functions
|
Category: **Gameplay Functions**
|
||||||
"""
|
"""
|
||||||
lifespan = 1.0
|
lifespan = 1.0
|
||||||
app = _ba.app
|
app = _ba.app
|
||||||
|
|
@ -253,7 +256,7 @@ def timestring(timeval: float,
|
||||||
suppress_format_warning: bool = False) -> ba.Lstr:
|
suppress_format_warning: bool = False) -> ba.Lstr:
|
||||||
"""Generate a ba.Lstr for displaying a time value.
|
"""Generate a ba.Lstr for displaying a time value.
|
||||||
|
|
||||||
Category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
Given a time value, returns a ba.Lstr with:
|
Given a time value, returns a ba.Lstr with:
|
||||||
(hours if > 0 ) : minutes : seconds : (centiseconds if centi=True).
|
(hours if > 0 ) : minutes : seconds : (centiseconds if centi=True).
|
||||||
|
|
@ -321,7 +324,7 @@ def timestring(timeval: float,
|
||||||
def cameraflash(duration: float = 999.0) -> None:
|
def cameraflash(duration: float = 999.0) -> None:
|
||||||
"""Create a strobing camera flash effect.
|
"""Create a strobing camera flash effect.
|
||||||
|
|
||||||
Category: Gameplay Functions
|
Category: **Gameplay Functions**
|
||||||
|
|
||||||
(as seen when a team wins a game)
|
(as seen when a team wins a game)
|
||||||
Duration is in seconds.
|
Duration is in seconds.
|
||||||
|
|
|
||||||
100
dist/ba_data/python/ba/_general.py
vendored
100
dist/ba_data/python/ba/_general.py
vendored
|
|
@ -24,22 +24,23 @@ if TYPE_CHECKING:
|
||||||
class Existable(Protocol):
|
class Existable(Protocol):
|
||||||
"""A Protocol for objects supporting an exists() method.
|
"""A Protocol for objects supporting an exists() method.
|
||||||
|
|
||||||
Category: Protocols
|
Category: **Protocols**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def exists(self) -> bool:
|
def exists(self) -> bool:
|
||||||
"""Whether this object exists."""
|
"""Whether this object exists."""
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
ExistableType = TypeVar('ExistableType', bound=Existable)
|
ExistableType = TypeVar('ExistableType', bound=Existable)
|
||||||
|
# pylint: enable=invalid-name
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
|
|
||||||
|
|
||||||
def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]:
|
def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]:
|
||||||
"""Convert invalid references to None for any ba.Existable object.
|
"""Convert invalid references to None for any ba.Existable object.
|
||||||
|
|
||||||
Category: Gameplay Functions
|
Category: **Gameplay Functions**
|
||||||
|
|
||||||
To best support type checking, it is important that invalid references
|
To best support type checking, it is important that invalid references
|
||||||
not be passed around and instead get converted to values of None.
|
not be passed around and instead get converted to values of None.
|
||||||
|
|
@ -59,7 +60,7 @@ def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]:
|
||||||
def getclass(name: str, subclassof: type[T]) -> type[T]:
|
def getclass(name: str, subclassof: type[T]) -> type[T]:
|
||||||
"""Given a full class name such as foo.bar.MyClass, return the class.
|
"""Given a full class name such as foo.bar.MyClass, return the class.
|
||||||
|
|
||||||
Category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
The class will be checked to make sure it is a subclass of the provided
|
The class will be checked to make sure it is a subclass of the provided
|
||||||
'subclassof' class, and a TypeError will be raised if not.
|
'subclassof' class, and a TypeError will be raised if not.
|
||||||
|
|
@ -140,7 +141,7 @@ def get_type_name(cls: type) -> str:
|
||||||
class _WeakCall:
|
class _WeakCall:
|
||||||
"""Wrap a callable and arguments into a single callable object.
|
"""Wrap a callable and arguments into a single callable object.
|
||||||
|
|
||||||
Category: General Utility Classes
|
Category: **General Utility Classes**
|
||||||
|
|
||||||
When passed a bound method as the callable, the instance portion
|
When passed a bound method as the callable, the instance portion
|
||||||
of it is weak-referenced, meaning the underlying instance is
|
of it is weak-referenced, meaning the underlying instance is
|
||||||
|
|
@ -150,20 +151,30 @@ class _WeakCall:
|
||||||
Think of this as a handy way to tell an object to do something
|
Think of this as a handy way to tell an object to do something
|
||||||
at some point in the future if it happens to still exist.
|
at some point in the future if it happens to still exist.
|
||||||
|
|
||||||
# EXAMPLE A: this code will create a FooClass instance and call its
|
##### Examples
|
||||||
# bar() method 5 seconds later; it will be kept alive even though
|
**EXAMPLE A:** this code will create a FooClass instance and call its
|
||||||
# we overwrite its variable with None because the bound method
|
bar() method 5 seconds later; it will be kept alive even though
|
||||||
# we pass as a timer callback (foo.bar) strong-references it
|
we overwrite its variable with None because the bound method
|
||||||
foo = FooClass()
|
we pass as a timer callback (foo.bar) strong-references it
|
||||||
ba.timer(5.0, foo.bar)
|
>>> foo = FooClass()
|
||||||
foo = None
|
... ba.timer(5.0, foo.bar)
|
||||||
|
... foo = None
|
||||||
|
|
||||||
# EXAMPLE B: this code will *not* keep our object alive; it will die
|
**EXAMPLE B:** This code will *not* keep our object alive; it will die
|
||||||
# when we overwrite it with None and the timer will be a no-op when it
|
when we overwrite it with None and the timer will be a no-op when it
|
||||||
# fires
|
fires
|
||||||
foo = FooClass()
|
>>> foo = FooClass()
|
||||||
ba.timer(5.0, ba.WeakCall(foo.bar))
|
... ba.timer(5.0, ba.WeakCall(foo.bar))
|
||||||
foo = None
|
... foo = None
|
||||||
|
|
||||||
|
**EXAMPLE C:** Wrap a method call with some positional and keyword args:
|
||||||
|
>>> myweakcall = ba.WeakCall(self.dostuff, argval1,
|
||||||
|
... namedarg=argval2)
|
||||||
|
... # Now we have a single callable to run that whole mess.
|
||||||
|
... # The same as calling myobj.dostuff(argval1, namedarg=argval2)
|
||||||
|
... # (provided my_obj still exists; this will do nothing
|
||||||
|
... # otherwise).
|
||||||
|
... myweakcall()
|
||||||
|
|
||||||
Note: additional args and keywords you provide to the WeakCall()
|
Note: additional args and keywords you provide to the WeakCall()
|
||||||
constructor are stored as regular strong-references; you'll need
|
constructor are stored as regular strong-references; you'll need
|
||||||
|
|
@ -175,15 +186,6 @@ class _WeakCall:
|
||||||
|
|
||||||
Pass a callable as the first arg, followed by any number of
|
Pass a callable as the first arg, followed by any number of
|
||||||
arguments or keywords.
|
arguments or keywords.
|
||||||
|
|
||||||
# Example: wrap a method call with some positional and
|
|
||||||
# keyword args:
|
|
||||||
myweakcall = ba.WeakCall(myobj.dostuff, argval1, namedarg=argval2)
|
|
||||||
|
|
||||||
# Now we have a single callable to run that whole mess.
|
|
||||||
# The same as calling myobj.dostuff(argval1, namedarg=argval2)
|
|
||||||
# (provided my_obj still exists; this will do nothing otherwise)
|
|
||||||
myweakcall()
|
|
||||||
"""
|
"""
|
||||||
if hasattr(args[0], '__func__'):
|
if hasattr(args[0], '__func__'):
|
||||||
self._call = WeakMethod(args[0])
|
self._call = WeakMethod(args[0])
|
||||||
|
|
@ -212,13 +214,13 @@ class _WeakCall:
|
||||||
class _Call:
|
class _Call:
|
||||||
"""Wraps a callable and arguments into a single callable object.
|
"""Wraps a callable and arguments into a single callable object.
|
||||||
|
|
||||||
Category: General Utility Classes
|
Category: **General Utility Classes**
|
||||||
|
|
||||||
The callable is strong-referenced so it won't die until this
|
The callable is strong-referenced so it won't die until this
|
||||||
object does.
|
object does.
|
||||||
|
|
||||||
Note that a bound method (ex: myobj.dosomething) contains a reference
|
Note that a bound method (ex: ``myobj.dosomething``) contains a reference
|
||||||
to 'self' (myobj in that case), so you will be keeping that object
|
to ``self`` (``myobj`` in that case), so you will be keeping that object
|
||||||
alive too. Use ba.WeakCall if you want to pass a method to callback
|
alive too. Use ba.WeakCall if you want to pass a method to callback
|
||||||
without keeping its object alive.
|
without keeping its object alive.
|
||||||
"""
|
"""
|
||||||
|
|
@ -229,12 +231,12 @@ class _Call:
|
||||||
Pass a callable as the first arg, followed by any number of
|
Pass a callable as the first arg, followed by any number of
|
||||||
arguments or keywords.
|
arguments or keywords.
|
||||||
|
|
||||||
# Example: wrap a method call with 1 positional and 1 keyword arg:
|
##### Example
|
||||||
mycall = ba.Call(myobj.dostuff, argval1, namedarg=argval2)
|
Wrap a method call with 1 positional and 1 keyword arg:
|
||||||
|
>>> mycall = ba.Call(myobj.dostuff, argval, namedarg=argval2)
|
||||||
# Now we have a single callable to run that whole mess.
|
... # Now we have a single callable to run that whole mess.
|
||||||
# ..the same as calling myobj.dostuff(argval1, namedarg=argval2)
|
... # ..the same as calling myobj.dostuff(argval, namedarg=argval2)
|
||||||
mycall()
|
... mycall()
|
||||||
"""
|
"""
|
||||||
self._call = args[0]
|
self._call = args[0]
|
||||||
self._args = args[1:]
|
self._args = args[1:]
|
||||||
|
|
@ -283,7 +285,7 @@ class WeakMethod:
|
||||||
def verify_object_death(obj: object) -> None:
|
def verify_object_death(obj: object) -> None:
|
||||||
"""Warn if an object does not get freed within a short period.
|
"""Warn if an object does not get freed within a short period.
|
||||||
|
|
||||||
Category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
This can be handy to detect and prevent memory/resource leaks.
|
This can be handy to detect and prevent memory/resource leaks.
|
||||||
"""
|
"""
|
||||||
|
|
@ -304,7 +306,7 @@ def verify_object_death(obj: object) -> None:
|
||||||
def print_active_refs(obj: Any) -> None:
|
def print_active_refs(obj: Any) -> None:
|
||||||
"""Print info about things referencing a given object.
|
"""Print info about things referencing a given object.
|
||||||
|
|
||||||
Category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
Useful for tracking down cyclical references and causes for zombie objects.
|
Useful for tracking down cyclical references and causes for zombie objects.
|
||||||
"""
|
"""
|
||||||
|
|
@ -361,7 +363,7 @@ def _verify_object_death(wref: weakref.ref) -> None:
|
||||||
def storagename(suffix: str = None) -> str:
|
def storagename(suffix: str = None) -> str:
|
||||||
"""Generate a unique name for storing class data in shared places.
|
"""Generate a unique name for storing class data in shared places.
|
||||||
|
|
||||||
Category: General Utility Functions
|
Category: **General Utility Functions**
|
||||||
|
|
||||||
This consists of a leading underscore, the module path at the
|
This consists of a leading underscore, the module path at the
|
||||||
call site with dots replaced by underscores, the containing class's
|
call site with dots replaced by underscores, the containing class's
|
||||||
|
|
@ -371,15 +373,17 @@ def storagename(suffix: str = None) -> str:
|
||||||
|
|
||||||
Note that this will function even if called in the class definition.
|
Note that this will function even if called in the class definition.
|
||||||
|
|
||||||
# Example: generate a unique name for storage purposes:
|
##### Examples
|
||||||
class MyThingie:
|
Generate a unique name for storage purposes:
|
||||||
|
>>> class MyThingie:
|
||||||
# This will give something like '_mymodule_submodule_mythingie_data'.
|
... # This will give something like
|
||||||
_STORENAME = ba.storagename('data')
|
... # '_mymodule_submodule_mythingie_data'.
|
||||||
|
... _STORENAME = ba.storagename('data')
|
||||||
# Use that name to store some data in the Activity we were passed.
|
...
|
||||||
def __init__(self, activity):
|
... # Use that name to store some data in the Activity we were
|
||||||
activity.customdata[self._STORENAME] = {}
|
... # passed.
|
||||||
|
... def __init__(self, activity):
|
||||||
|
... activity.customdata[self._STORENAME] = {}
|
||||||
"""
|
"""
|
||||||
frame = inspect.currentframe()
|
frame = inspect.currentframe()
|
||||||
if frame is None:
|
if frame is None:
|
||||||
|
|
|
||||||
10
dist/ba_data/python/ba/_hooks.py
vendored
10
dist/ba_data/python/ba/_hooks.py
vendored
|
|
@ -24,12 +24,11 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
def finish_bootstrapping() -> None:
|
def finish_bootstrapping() -> None:
|
||||||
"""Do final bootstrapping related bits."""
|
"""Do final bootstrapping related bits."""
|
||||||
from ba._asyncio import setup_asyncio
|
|
||||||
assert _ba.in_game_thread()
|
assert _ba.in_game_thread()
|
||||||
|
|
||||||
# Kick off our asyncio event handling, allowing us to use coroutines
|
# Kick off our asyncio event handling, allowing us to use coroutines
|
||||||
# in our game thread alongside our internal event handling.
|
# in our game thread alongside our internal event handling.
|
||||||
setup_asyncio()
|
# setup_asyncio()
|
||||||
|
|
||||||
# Ok, bootstrapping is done; time to get the show started.
|
# Ok, bootstrapping is done; time to get the show started.
|
||||||
_ba.app.on_app_launch()
|
_ba.app.on_app_launch()
|
||||||
|
|
@ -337,6 +336,8 @@ def filter_chat_message(msg: str, client_id: int) -> Optional[str]:
|
||||||
|
|
||||||
return chooks.filter_chat_message(msg,client_id)
|
return chooks.filter_chat_message(msg,client_id)
|
||||||
|
|
||||||
|
def on_client_request(ip):
|
||||||
|
print("player requesting to join from ip = " + ip)
|
||||||
def kick_vote_started(by:str,to:str) -> None:
|
def kick_vote_started(by:str,to:str) -> None:
|
||||||
"""
|
"""
|
||||||
get account ids of who started kick vote for whom ,
|
get account ids of who started kick vote for whom ,
|
||||||
|
|
@ -385,3 +386,8 @@ def hash_strings(inputs: list[str]) -> str:
|
||||||
sha.update(inp.encode())
|
sha.update(inp.encode())
|
||||||
|
|
||||||
return sha.hexdigest()
|
return sha.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def have_account_v2_credentials() -> bool:
|
||||||
|
"""Do we have primary account-v2 credentials set?"""
|
||||||
|
return _ba.app.accounts_v2.have_primary_credentials()
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_input.py
vendored
2
dist/ba_data/python/ba/_input.py
vendored
|
|
@ -639,5 +639,5 @@ def get_last_player_name_from_input_device(device: ba.InputDevice) -> str:
|
||||||
if profilename == '_random':
|
if profilename == '_random':
|
||||||
profilename = device.get_default_player_name()
|
profilename = device.get_default_player_name()
|
||||||
if profilename == '__account__':
|
if profilename == '__account__':
|
||||||
profilename = _ba.get_account_display_string()
|
profilename = _ba.get_v1_account_display_string()
|
||||||
return profilename
|
return profilename
|
||||||
|
|
|
||||||
18
dist/ba_data/python/ba/_keyboard.py
vendored
18
dist/ba_data/python/ba/_keyboard.py
vendored
|
|
@ -13,23 +13,21 @@ if TYPE_CHECKING:
|
||||||
class Keyboard:
|
class Keyboard:
|
||||||
"""Chars definitions for on-screen keyboard.
|
"""Chars definitions for on-screen keyboard.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Keyboards are discoverable by the meta-tag system
|
Keyboards are discoverable by the meta-tag system
|
||||||
and the user can select which one they want to use.
|
and the user can select which one they want to use.
|
||||||
On-screen keyboard uses chars from active ba.Keyboard.
|
On-screen keyboard uses chars from active ba.Keyboard.
|
||||||
Attributes:
|
|
||||||
name
|
|
||||||
Displays when user selecting this keyboard.
|
|
||||||
chars
|
|
||||||
Used for row/column lengths.
|
|
||||||
pages
|
|
||||||
Extra chars like emojis.
|
|
||||||
nums
|
|
||||||
The 'num' page.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
|
"""Displays when user selecting this keyboard."""
|
||||||
|
|
||||||
chars: list[tuple[str, ...]]
|
chars: list[tuple[str, ...]]
|
||||||
|
"""Used for row/column lengths."""
|
||||||
|
|
||||||
pages: dict[str, tuple[str, ...]]
|
pages: dict[str, tuple[str, ...]]
|
||||||
|
"""Extra chars like emojis."""
|
||||||
|
|
||||||
nums: tuple[str, ...]
|
nums: tuple[str, ...]
|
||||||
|
"""The 'num' page."""
|
||||||
|
|
|
||||||
41
dist/ba_data/python/ba/_language.py
vendored
41
dist/ba_data/python/ba/_language.py
vendored
|
|
@ -17,7 +17,7 @@ if TYPE_CHECKING:
|
||||||
class LanguageSubsystem:
|
class LanguageSubsystem:
|
||||||
"""Wraps up language related app functionality.
|
"""Wraps up language related app functionality.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
To use this class, access the single instance of it at 'ba.app.lang'.
|
To use this class, access the single instance of it at 'ba.app.lang'.
|
||||||
"""
|
"""
|
||||||
|
|
@ -367,7 +367,7 @@ class LanguageSubsystem:
|
||||||
class Lstr:
|
class Lstr:
|
||||||
"""Used to define strings in a language-independent way.
|
"""Used to define strings in a language-independent way.
|
||||||
|
|
||||||
category: General Utility Classes
|
Category: **General Utility Classes**
|
||||||
|
|
||||||
These should be used whenever possible in place of hard-coded strings
|
These should be used whenever possible in place of hard-coded strings
|
||||||
so that in-game or UI elements show up correctly on all clients in their
|
so that in-game or UI elements show up correctly on all clients in their
|
||||||
|
|
@ -376,24 +376,28 @@ class Lstr:
|
||||||
To see available resource keys, look at any of the bs_language_*.py files
|
To see available resource keys, look at any of the bs_language_*.py files
|
||||||
in the game or the translations pages at legacy.ballistica.net/translate.
|
in the game or the translations pages at legacy.ballistica.net/translate.
|
||||||
|
|
||||||
# EXAMPLE 1: specify a string from a resource path
|
##### Examples
|
||||||
mynode.text = ba.Lstr(resource='audioSettingsWindow.titleText')
|
EXAMPLE 1: specify a string from a resource path
|
||||||
|
>>> mynode.text = ba.Lstr(resource='audioSettingsWindow.titleText')
|
||||||
|
|
||||||
# EXAMPLE 2: specify a translated string via a category and english value;
|
EXAMPLE 2: specify a translated string via a category and english
|
||||||
# if a translated value is available, it will be used; otherwise the
|
value; if a translated value is available, it will be used; otherwise
|
||||||
# english value will be. To see available translation categories, look
|
the english value will be. To see available translation categories,
|
||||||
# under the 'translations' resource section.
|
look under the 'translations' resource section.
|
||||||
mynode.text = ba.Lstr(translate=('gameDescriptions', 'Defeat all enemies'))
|
>>> mynode.text = ba.Lstr(translate=('gameDescriptions',
|
||||||
|
... 'Defeat all enemies'))
|
||||||
|
|
||||||
# EXAMPLE 3: specify a raw value and some substitutions. Substitutions can
|
EXAMPLE 3: specify a raw value and some substitutions. Substitutions
|
||||||
# be used with resource and translate modes as well.
|
can be used with resource and translate modes as well.
|
||||||
mynode.text = ba.Lstr(value='${A} / ${B}',
|
>>> mynode.text = ba.Lstr(value='${A} / ${B}',
|
||||||
subs=[('${A}', str(score)), ('${B}', str(total))])
|
... subs=[('${A}', str(score)), ('${B}', str(total))])
|
||||||
|
|
||||||
# EXAMPLE 4: Lstrs can be nested. This example would display the resource
|
EXAMPLE 4: ba.Lstr's can be nested. This example would display the
|
||||||
# at res_a but replace ${NAME} with the value of the resource at res_b
|
resource at res_a but replace ${NAME} with the value of the
|
||||||
mytextnode.text = ba.Lstr(resource='res_a',
|
resource at res_b
|
||||||
subs=[('${NAME}', ba.Lstr(resource='res_b'))])
|
>>> mytextnode.text = ba.Lstr(
|
||||||
|
... resource='res_a',
|
||||||
|
... subs=[('${NAME}', ba.Lstr(resource='res_b'))])
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# pylint: disable=dangerous-default-value
|
# pylint: disable=dangerous-default-value
|
||||||
|
|
@ -406,7 +410,6 @@ class Lstr:
|
||||||
fallback_value: str = '',
|
fallback_value: str = '',
|
||||||
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||||
"""Create an Lstr from a string resource."""
|
"""Create an Lstr from a string resource."""
|
||||||
...
|
|
||||||
|
|
||||||
# noinspection PyShadowingNames,PyDefaultArgument
|
# noinspection PyShadowingNames,PyDefaultArgument
|
||||||
@overload
|
@overload
|
||||||
|
|
@ -415,7 +418,6 @@ class Lstr:
|
||||||
translate: tuple[str, str],
|
translate: tuple[str, str],
|
||||||
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||||
"""Create an Lstr by translating a string in a category."""
|
"""Create an Lstr by translating a string in a category."""
|
||||||
...
|
|
||||||
|
|
||||||
# noinspection PyDefaultArgument
|
# noinspection PyDefaultArgument
|
||||||
@overload
|
@overload
|
||||||
|
|
@ -424,7 +426,6 @@ class Lstr:
|
||||||
value: str,
|
value: str,
|
||||||
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||||
"""Create an Lstr from a raw string value."""
|
"""Create an Lstr from a raw string value."""
|
||||||
...
|
|
||||||
|
|
||||||
# pylint: enable=redefined-outer-name, dangerous-default-value
|
# pylint: enable=redefined-outer-name, dangerous-default-value
|
||||||
|
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_level.py
vendored
2
dist/ba_data/python/ba/_level.py
vendored
|
|
@ -17,7 +17,7 @@ if TYPE_CHECKING:
|
||||||
class Level:
|
class Level:
|
||||||
"""An entry in a ba.Campaign consisting of a name, game type, and settings.
|
"""An entry in a ba.Campaign consisting of a name, game type, and settings.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
|
|
|
||||||
6
dist/ba_data/python/ba/_lobby.py
vendored
6
dist/ba_data/python/ba/_lobby.py
vendored
|
|
@ -410,6 +410,7 @@ class Chooser:
|
||||||
self._profileindex = self._profilenames.index(self._profilename)
|
self._profileindex = self._profilenames.index(self._profilename)
|
||||||
else:
|
else:
|
||||||
self._profileindex = 0
|
self._profileindex = 0
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
self._profilename = self._profilenames[self._profileindex]
|
self._profilename = self._profilenames[self._profileindex]
|
||||||
|
|
||||||
def update_position(self) -> None:
|
def update_position(self) -> None:
|
||||||
|
|
@ -451,7 +452,8 @@ class Chooser:
|
||||||
clamp = not full
|
clamp = not full
|
||||||
elif name == '__account__':
|
elif name == '__account__':
|
||||||
try:
|
try:
|
||||||
name = self._sessionplayer.inputdevice.get_account_name(full)
|
name = self._sessionplayer.inputdevice.get_v1_account_name(
|
||||||
|
full)
|
||||||
except Exception:
|
except Exception:
|
||||||
print_exception('Error getting account name for chooser.')
|
print_exception('Error getting account name for chooser.')
|
||||||
name = 'Invalid'
|
name = 'Invalid'
|
||||||
|
|
@ -893,7 +895,7 @@ class Lobby:
|
||||||
self.character_names_local_unlocked.sort(key=lambda x: x.lower())
|
self.character_names_local_unlocked.sort(key=lambda x: x.lower())
|
||||||
|
|
||||||
# Do any overall prep we need to such as creating account profile.
|
# Do any overall prep we need to such as creating account profile.
|
||||||
_ba.app.accounts.ensure_have_account_player_profile()
|
_ba.app.accounts_v1.ensure_have_account_player_profile()
|
||||||
for chooser in self.choosers:
|
for chooser in self.choosers:
|
||||||
try:
|
try:
|
||||||
chooser.reload_profiles()
|
chooser.reload_profiles()
|
||||||
|
|
|
||||||
17
dist/ba_data/python/ba/_map.py
vendored
17
dist/ba_data/python/ba/_map.py
vendored
|
|
@ -18,7 +18,7 @@ if TYPE_CHECKING:
|
||||||
def preload_map_preview_media() -> None:
|
def preload_map_preview_media() -> None:
|
||||||
"""Preload media needed for map preview UIs.
|
"""Preload media needed for map preview UIs.
|
||||||
|
|
||||||
Category: Asset Functions
|
Category: **Asset Functions**
|
||||||
"""
|
"""
|
||||||
_ba.getmodel('level_select_button_opaque')
|
_ba.getmodel('level_select_button_opaque')
|
||||||
_ba.getmodel('level_select_button_transparent')
|
_ba.getmodel('level_select_button_transparent')
|
||||||
|
|
@ -31,7 +31,7 @@ def preload_map_preview_media() -> None:
|
||||||
def get_filtered_map_name(name: str) -> str:
|
def get_filtered_map_name(name: str) -> str:
|
||||||
"""Filter a map name to account for name changes, etc.
|
"""Filter a map name to account for name changes, etc.
|
||||||
|
|
||||||
Category: Asset Functions
|
Category: **Asset Functions**
|
||||||
|
|
||||||
This can be used to support old playlists, etc.
|
This can be used to support old playlists, etc.
|
||||||
"""
|
"""
|
||||||
|
|
@ -46,7 +46,7 @@ def get_filtered_map_name(name: str) -> str:
|
||||||
def get_map_display_string(name: str) -> ba.Lstr:
|
def get_map_display_string(name: str) -> ba.Lstr:
|
||||||
"""Return a ba.Lstr for displaying a given map\'s name.
|
"""Return a ba.Lstr for displaying a given map\'s name.
|
||||||
|
|
||||||
Category: Asset Functions
|
Category: **Asset Functions**
|
||||||
"""
|
"""
|
||||||
from ba import _language
|
from ba import _language
|
||||||
return _language.Lstr(translate=('mapsNames', name))
|
return _language.Lstr(translate=('mapsNames', name))
|
||||||
|
|
@ -55,7 +55,7 @@ def get_map_display_string(name: str) -> ba.Lstr:
|
||||||
def getmaps(playtype: str) -> list[str]:
|
def getmaps(playtype: str) -> list[str]:
|
||||||
"""Return a list of ba.Map types supporting a playtype str.
|
"""Return a list of ba.Map types supporting a playtype str.
|
||||||
|
|
||||||
Category: Asset Functions
|
Category: **Asset Functions**
|
||||||
|
|
||||||
Maps supporting a given playtype must provide a particular set of
|
Maps supporting a given playtype must provide a particular set of
|
||||||
features and lend themselves to a certain style of play.
|
features and lend themselves to a certain style of play.
|
||||||
|
|
@ -104,7 +104,7 @@ def getmaps(playtype: str) -> list[str]:
|
||||||
def get_unowned_maps() -> list[str]:
|
def get_unowned_maps() -> list[str]:
|
||||||
"""Return the list of local maps not owned by the current account.
|
"""Return the list of local maps not owned by the current account.
|
||||||
|
|
||||||
Category: Asset Functions
|
Category: **Asset Functions**
|
||||||
"""
|
"""
|
||||||
from ba import _store
|
from ba import _store
|
||||||
unowned_maps: set[str] = set()
|
unowned_maps: set[str] = set()
|
||||||
|
|
@ -120,7 +120,7 @@ def get_unowned_maps() -> list[str]:
|
||||||
def get_map_class(name: str) -> type[ba.Map]:
|
def get_map_class(name: str) -> type[ba.Map]:
|
||||||
"""Return a map type given a name.
|
"""Return a map type given a name.
|
||||||
|
|
||||||
Category: Asset Functions
|
Category: **Asset Functions**
|
||||||
"""
|
"""
|
||||||
name = get_filtered_map_name(name)
|
name = get_filtered_map_name(name)
|
||||||
try:
|
try:
|
||||||
|
|
@ -133,7 +133,7 @@ def get_map_class(name: str) -> type[ba.Map]:
|
||||||
class Map(Actor):
|
class Map(Actor):
|
||||||
"""A game map.
|
"""A game map.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Consists of a collection of terrain nodes, metadata, and other
|
Consists of a collection of terrain nodes, metadata, and other
|
||||||
functionality comprising a game map.
|
functionality comprising a game map.
|
||||||
|
|
@ -189,7 +189,6 @@ class Map(Actor):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
vr_overlay_offset: Optional[Sequence[float]] = None) -> None:
|
vr_overlay_offset: Optional[Sequence[float]] = None) -> None:
|
||||||
"""Instantiate a map."""
|
"""Instantiate a map."""
|
||||||
from ba import _gameutils
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
# This is expected to always be a ba.Node object (whether valid or not)
|
# This is expected to always be a ba.Node object (whether valid or not)
|
||||||
|
|
@ -348,7 +347,7 @@ class Map(Actor):
|
||||||
self, players: Sequence[ba.Player]) -> Sequence[float]:
|
self, players: Sequence[ba.Player]) -> Sequence[float]:
|
||||||
"""Return a random starting position in one of the FFA spawn areas.
|
"""Return a random starting position in one of the FFA spawn areas.
|
||||||
|
|
||||||
If a list of ba.Players is provided; the returned points will be
|
If a list of ba.Player-s is provided; the returned points will be
|
||||||
as far from these players as possible.
|
as far from these players as possible.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
|
||||||
110
dist/ba_data/python/ba/_messages.py
vendored
110
dist/ba_data/python/ba/_messages.py
vendored
|
|
@ -50,45 +50,38 @@ class DeathType(Enum):
|
||||||
class DieMessage:
|
class DieMessage:
|
||||||
"""A message telling an object to die.
|
"""A message telling an object to die.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Most ba.Actors respond to this.
|
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
immediate
|
|
||||||
If this is set to True, the actor should disappear immediately.
|
|
||||||
This is for 'removing' stuff from the game more so than 'killing'
|
|
||||||
it. If False, the actor should die a 'normal' death and can take
|
|
||||||
its time with lingering corpses, sound effects, etc.
|
|
||||||
|
|
||||||
how
|
|
||||||
The particular reason for death.
|
|
||||||
|
|
||||||
|
Most ba.Actor-s respond to this.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
immediate: bool = False
|
immediate: bool = False
|
||||||
|
"""If this is set to True, the actor should disappear immediately.
|
||||||
|
This is for 'removing' stuff from the game more so than 'killing'
|
||||||
|
it. If False, the actor should die a 'normal' death and can take
|
||||||
|
its time with lingering corpses, sound effects, etc."""
|
||||||
|
|
||||||
how: DeathType = DeathType.GENERIC
|
how: DeathType = DeathType.GENERIC
|
||||||
|
"""The particular reason for death."""
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class PlayerDiedMessage:
|
class PlayerDiedMessage:
|
||||||
"""A message saying a ba.Player has died.
|
"""A message saying a ba.Player has died.
|
||||||
|
|
||||||
category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
killed
|
|
||||||
If True, the player was killed;
|
|
||||||
If False, they left the game or the round ended.
|
|
||||||
|
|
||||||
how
|
|
||||||
The particular type of death.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
killed: bool
|
killed: bool
|
||||||
|
"""If True, the player was killed;
|
||||||
|
If False, they left the game or the round ended."""
|
||||||
|
|
||||||
how: ba.DeathType
|
how: ba.DeathType
|
||||||
|
"""The particular type of death."""
|
||||||
|
|
||||||
def __init__(self, player: ba.Player, was_killed: bool,
|
def __init__(self, player: ba.Player, was_killed: bool,
|
||||||
killerplayer: Optional[ba.Player], how: ba.DeathType):
|
killerplayer: Optional[ba.Player], how: ba.DeathType):
|
||||||
|
|
@ -132,41 +125,34 @@ class PlayerDiedMessage:
|
||||||
class StandMessage:
|
class StandMessage:
|
||||||
"""A message telling an object to move to a position in space.
|
"""A message telling an object to move to a position in space.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Used when teleporting players to home base, etc.
|
Used when teleporting players to home base, etc.
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
position
|
|
||||||
Where to move to.
|
|
||||||
|
|
||||||
angle
|
|
||||||
The angle to face (in degrees)
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
position: Sequence[float] = (0.0, 0.0, 0.0)
|
position: Sequence[float] = (0.0, 0.0, 0.0)
|
||||||
|
"""Where to move to."""
|
||||||
|
|
||||||
angle: float = 0.0
|
angle: float = 0.0
|
||||||
|
"""The angle to face (in degrees)"""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class PickUpMessage:
|
class PickUpMessage:
|
||||||
"""Tells an object that it has picked something up.
|
"""Tells an object that it has picked something up.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
node
|
|
||||||
The ba.Node that is getting picked up.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
node: ba.Node
|
node: ba.Node
|
||||||
|
"""The ba.Node that is getting picked up."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class DropMessage:
|
class DropMessage:
|
||||||
"""Tells an object that it has dropped what it was holding.
|
"""Tells an object that it has dropped what it was holding.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -174,35 +160,29 @@ class DropMessage:
|
||||||
class PickedUpMessage:
|
class PickedUpMessage:
|
||||||
"""Tells an object that it has been picked up by something.
|
"""Tells an object that it has been picked up by something.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
node
|
|
||||||
The ba.Node doing the picking up.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
node: ba.Node
|
node: ba.Node
|
||||||
|
"""The ba.Node doing the picking up."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class DroppedMessage:
|
class DroppedMessage:
|
||||||
"""Tells an object that it has been dropped.
|
"""Tells an object that it has been dropped.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
node
|
|
||||||
The ba.Node doing the dropping.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
node: ba.Node
|
node: ba.Node
|
||||||
|
"""The ba.Node doing the dropping."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ShouldShatterMessage:
|
class ShouldShatterMessage:
|
||||||
"""Tells an object that it should shatter.
|
"""Tells an object that it should shatter.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -210,21 +190,18 @@ class ShouldShatterMessage:
|
||||||
class ImpactDamageMessage:
|
class ImpactDamageMessage:
|
||||||
"""Tells an object that it has been jarred violently.
|
"""Tells an object that it has been jarred violently.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
intensity
|
|
||||||
The intensity of the impact.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
intensity: float
|
intensity: float
|
||||||
|
"""The intensity of the impact."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FreezeMessage:
|
class FreezeMessage:
|
||||||
"""Tells an object to become frozen.
|
"""Tells an object to become frozen.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
As seen in the effects of an ice ba.Bomb.
|
As seen in the effects of an ice ba.Bomb.
|
||||||
"""
|
"""
|
||||||
|
|
@ -234,7 +211,7 @@ class FreezeMessage:
|
||||||
class ThawMessage:
|
class ThawMessage:
|
||||||
"""Tells an object to stop being frozen.
|
"""Tells an object to stop being frozen.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -242,20 +219,17 @@ class ThawMessage:
|
||||||
class CelebrateMessage:
|
class CelebrateMessage:
|
||||||
"""Tells an object to celebrate.
|
"""Tells an object to celebrate.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
duration
|
|
||||||
Amount of time to celebrate in seconds.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
duration: float = 10.0
|
duration: float = 10.0
|
||||||
|
"""Amount of time to celebrate in seconds."""
|
||||||
|
|
||||||
|
|
||||||
class HitMessage:
|
class HitMessage:
|
||||||
"""Tells an object it has been hit in some way.
|
"""Tells an object it has been hit in some way.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
This is used by punches, explosions, etc to convey
|
This is used by punches, explosions, etc to convey
|
||||||
their effect to a target.
|
their effect to a target.
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_meta.py
vendored
2
dist/ba_data/python/ba/_meta.py
vendored
|
|
@ -37,7 +37,7 @@ class ScanResults:
|
||||||
class MetadataSubsystem:
|
class MetadataSubsystem:
|
||||||
"""Subsystem for working with script metadata in the app.
|
"""Subsystem for working with script metadata in the app.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Access the single shared instance of this class at 'ba.app.meta'.
|
Access the single shared instance of this class at 'ba.app.meta'.
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
4
dist/ba_data/python/ba/_multiteamsession.py
vendored
4
dist/ba_data/python/ba/_multiteamsession.py
vendored
|
|
@ -22,7 +22,7 @@ DEFAULT_TEAM_NAMES = ('Blue', 'Red')
|
||||||
class MultiTeamSession(Session):
|
class MultiTeamSession(Session):
|
||||||
"""Common base class for ba.DualTeamSession and ba.FreeForAllSession.
|
"""Common base class for ba.DualTeamSession and ba.FreeForAllSession.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Free-for-all-mode is essentially just teams-mode with each ba.Player having
|
Free-for-all-mode is essentially just teams-mode with each ba.Player having
|
||||||
their own ba.Team, so there is much overlap in functionality.
|
their own ba.Team, so there is much overlap in functionality.
|
||||||
|
|
@ -141,7 +141,7 @@ class MultiTeamSession(Session):
|
||||||
team.customdata['previous_score'] = team.customdata['score'] = 0
|
team.customdata['previous_score'] = team.customdata['score'] = 0
|
||||||
|
|
||||||
def get_max_players(self) -> int:
|
def get_max_players(self) -> int:
|
||||||
"""Return max number of ba.Players allowed to join the game at once."""
|
"""Return max number of ba.Player-s allowed to join the game at once"""
|
||||||
if self.use_teams:
|
if self.use_teams:
|
||||||
return _ba.app.config.get('Team Game Max Players', 8)
|
return _ba.app.config.get('Team Game Max Players', 8)
|
||||||
return _ba.app.config.get('Free-for-All Max Players', 8)
|
return _ba.app.config.get('Free-for-All Max Players', 8)
|
||||||
|
|
|
||||||
13
dist/ba_data/python/ba/_music.py
vendored
13
dist/ba_data/python/ba/_music.py
vendored
|
|
@ -18,7 +18,7 @@ if TYPE_CHECKING:
|
||||||
class MusicType(Enum):
|
class MusicType(Enum):
|
||||||
"""Types of music available to play in-game.
|
"""Types of music available to play in-game.
|
||||||
|
|
||||||
Category: Enums
|
Category: **Enums**
|
||||||
|
|
||||||
These do not correspond to specific pieces of music, but rather to
|
These do not correspond to specific pieces of music, but rather to
|
||||||
'situations'. The actual music played for each type can be overridden
|
'situations'. The actual music played for each type can be overridden
|
||||||
|
|
@ -51,7 +51,7 @@ class MusicType(Enum):
|
||||||
class MusicPlayMode(Enum):
|
class MusicPlayMode(Enum):
|
||||||
"""Influences behavior when playing music.
|
"""Influences behavior when playing music.
|
||||||
|
|
||||||
Category: Enums
|
Category: **Enums**
|
||||||
"""
|
"""
|
||||||
REGULAR = 'regular'
|
REGULAR = 'regular'
|
||||||
TEST = 'test'
|
TEST = 'test'
|
||||||
|
|
@ -61,7 +61,7 @@ class MusicPlayMode(Enum):
|
||||||
class AssetSoundtrackEntry:
|
class AssetSoundtrackEntry:
|
||||||
"""A music entry using an internal asset.
|
"""A music entry using an internal asset.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
"""
|
"""
|
||||||
assetname: str
|
assetname: str
|
||||||
volume: float = 1.0
|
volume: float = 1.0
|
||||||
|
|
@ -120,7 +120,7 @@ ASSET_SOUNDTRACK_ENTRIES: dict[MusicType, AssetSoundtrackEntry] = {
|
||||||
class MusicSubsystem:
|
class MusicSubsystem:
|
||||||
"""Subsystem for music playback in the app.
|
"""Subsystem for music playback in the app.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Access the single shared instance of this class at 'ba.app.music'.
|
Access the single shared instance of this class at 'ba.app.music'.
|
||||||
"""
|
"""
|
||||||
|
|
@ -385,7 +385,7 @@ class MusicSubsystem:
|
||||||
class MusicPlayer:
|
class MusicPlayer:
|
||||||
"""Wrangles soundtrack music playback.
|
"""Wrangles soundtrack music playback.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Music can be played either through the game itself
|
Music can be played either through the game itself
|
||||||
or via a platform-specific external player.
|
or via a platform-specific external player.
|
||||||
|
|
@ -474,7 +474,7 @@ def setmusic(musictype: Optional[ba.MusicType],
|
||||||
continuous: bool = False) -> None:
|
continuous: bool = False) -> None:
|
||||||
"""Set the app to play (or stop playing) a certain type of music.
|
"""Set the app to play (or stop playing) a certain type of music.
|
||||||
|
|
||||||
category: Gameplay Functions
|
category: **Gameplay Functions**
|
||||||
|
|
||||||
This function will handle loading and playing sound assets as necessary,
|
This function will handle loading and playing sound assets as necessary,
|
||||||
and also supports custom user soundtracks on specific platforms so the
|
and also supports custom user soundtracks on specific platforms so the
|
||||||
|
|
@ -485,7 +485,6 @@ def setmusic(musictype: Optional[ba.MusicType],
|
||||||
if 'continuous' is True and musictype is the same as what is already
|
if 'continuous' is True and musictype is the same as what is already
|
||||||
playing, the playing track will not be restarted.
|
playing, the playing track will not be restarted.
|
||||||
"""
|
"""
|
||||||
from ba import _gameutils
|
|
||||||
|
|
||||||
# All we do here now is set a few music attrs on the current globals
|
# All we do here now is set a few music attrs on the current globals
|
||||||
# node. The foreground globals' current playing music then gets fed to
|
# node. The foreground globals' current playing music then gets fed to
|
||||||
|
|
|
||||||
22
dist/ba_data/python/ba/_net.py
vendored
22
dist/ba_data/python/ba/_net.py
vendored
|
|
@ -14,7 +14,6 @@ import _ba
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Any, Union, Callable, Optional
|
from typing import Any, Union, Callable, Optional
|
||||||
import socket
|
import socket
|
||||||
import ba
|
|
||||||
MasterServerCallback = Callable[[Union[None, dict[str, Any]]], None]
|
MasterServerCallback = Callable[[Union[None, dict[str, Any]]], None]
|
||||||
|
|
||||||
# Timeout for standard functions talking to the master-server/etc.
|
# Timeout for standard functions talking to the master-server/etc.
|
||||||
|
|
@ -26,9 +25,14 @@ class NetworkSubsystem:
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
||||||
# Anyone accessing/modifying region_pings should hold this lock.
|
# Anyone accessing/modifying zone_pings should hold this lock,
|
||||||
self.region_pings_lock = threading.Lock()
|
# as it is updated by a background thread.
|
||||||
self.region_pings: dict[str, float] = {}
|
self.zone_pings_lock = threading.Lock()
|
||||||
|
|
||||||
|
# Region IDs mapped to average pings. This will remain empty
|
||||||
|
# until enough pings have been run to be reasonably certain
|
||||||
|
# that a nearby server has been pinged.
|
||||||
|
self.zone_pings: dict[str, float] = {}
|
||||||
|
|
||||||
# For debugging.
|
# For debugging.
|
||||||
self.v1_test_log: str = ''
|
self.v1_test_log: str = ''
|
||||||
|
|
@ -106,7 +110,7 @@ class MasterServerCallThread(threading.Thread):
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
# pylint: disable=too-many-branches, consider-using-with
|
# pylint: disable=too-many-branches, consider-using-with
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import urllib.error
|
import urllib.parse
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from efro.error import is_urllib_network_error
|
from efro.error import is_urllib_network_error
|
||||||
|
|
@ -114,19 +118,19 @@ class MasterServerCallThread(threading.Thread):
|
||||||
try:
|
try:
|
||||||
self._data = _general.utf8_all(self._data)
|
self._data = _general.utf8_all(self._data)
|
||||||
_ba.set_thread_name('BA_ServerCallThread')
|
_ba.set_thread_name('BA_ServerCallThread')
|
||||||
parse = urllib.parse
|
|
||||||
if self._request_type == 'get':
|
if self._request_type == 'get':
|
||||||
response = urllib.request.urlopen(
|
response = urllib.request.urlopen(
|
||||||
urllib.request.Request(
|
urllib.request.Request(
|
||||||
(_ba.get_master_server_address() + '/' +
|
(_ba.get_master_server_address() + '/' +
|
||||||
self._request + '?' + parse.urlencode(self._data)),
|
self._request + '?' +
|
||||||
None, {'User-Agent': _ba.app.user_agent_string}),
|
urllib.parse.urlencode(self._data)), None,
|
||||||
|
{'User-Agent': _ba.app.user_agent_string}),
|
||||||
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS)
|
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS)
|
||||||
elif self._request_type == 'post':
|
elif self._request_type == 'post':
|
||||||
response = urllib.request.urlopen(
|
response = urllib.request.urlopen(
|
||||||
urllib.request.Request(
|
urllib.request.Request(
|
||||||
_ba.get_master_server_address() + '/' + self._request,
|
_ba.get_master_server_address() + '/' + self._request,
|
||||||
parse.urlencode(self._data).encode(),
|
urllib.parse.urlencode(self._data).encode(),
|
||||||
{'User-Agent': _ba.app.user_agent_string}),
|
{'User-Agent': _ba.app.user_agent_string}),
|
||||||
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS)
|
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_nodeactor.py
vendored
2
dist/ba_data/python/ba/_nodeactor.py
vendored
|
|
@ -17,7 +17,7 @@ if TYPE_CHECKING:
|
||||||
class NodeActor(Actor):
|
class NodeActor(Actor):
|
||||||
"""A simple ba.Actor type that wraps a single ba.Node.
|
"""A simple ba.Actor type that wraps a single ba.Node.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
This Actor will delete its Node when told to die, and it's
|
This Actor will delete its Node when told to die, and it's
|
||||||
exists() call will return whether the Node still exists or not.
|
exists() call will return whether the Node still exists or not.
|
||||||
|
|
|
||||||
27
dist/ba_data/python/ba/_player.py
vendored
27
dist/ba_data/python/ba/_player.py
vendored
|
|
@ -16,8 +16,10 @@ if TYPE_CHECKING:
|
||||||
from typing import Optional, Sequence, Any, Union, Callable
|
from typing import Optional, Sequence, Any, Union, Callable
|
||||||
import ba
|
import ba
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
TeamType = TypeVar('TeamType', bound='ba.Team')
|
TeamType = TypeVar('TeamType', bound='ba.Team')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
@ -48,18 +50,15 @@ class Player(Generic[TeamType]):
|
||||||
These correspond to ba.SessionPlayer objects, but are associated with a
|
These correspond to ba.SessionPlayer objects, but are associated with a
|
||||||
single ba.Activity instance. This allows activities to specify their
|
single ba.Activity instance. This allows activities to specify their
|
||||||
own custom ba.Player types.
|
own custom ba.Player types.
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
actor
|
|
||||||
The ba.Actor associated with the player.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# These are instance attrs but we define them at the type level so
|
# These are instance attrs but we define them at the type level so
|
||||||
# their type annotations are introspectable (for docs generation).
|
# their type annotations are introspectable (for docs generation).
|
||||||
character: str
|
character: str
|
||||||
|
|
||||||
actor: Optional[ba.Actor]
|
actor: Optional[ba.Actor]
|
||||||
|
"""The ba.Actor associated with the player."""
|
||||||
|
|
||||||
color: Sequence[float]
|
color: Sequence[float]
|
||||||
highlight: Sequence[float]
|
highlight: Sequence[float]
|
||||||
|
|
||||||
|
|
@ -225,8 +224,7 @@ class Player(Generic[TeamType]):
|
||||||
return self._sessionplayer.exists() and not self._expired
|
return self._sessionplayer.exists() and not self._expired
|
||||||
|
|
||||||
def getname(self, full: bool = False, icon: bool = True) -> str:
|
def getname(self, full: bool = False, icon: bool = True) -> str:
|
||||||
"""getname(full: bool = False, icon: bool = True) -> str
|
"""
|
||||||
|
|
||||||
Returns the player's name. If icon is True, the long version of the
|
Returns the player's name. If icon is True, the long version of the
|
||||||
name may include an icon.
|
name may include an icon.
|
||||||
"""
|
"""
|
||||||
|
|
@ -235,8 +233,7 @@ class Player(Generic[TeamType]):
|
||||||
return self._sessionplayer.getname(full=full, icon=icon)
|
return self._sessionplayer.getname(full=full, icon=icon)
|
||||||
|
|
||||||
def is_alive(self) -> bool:
|
def is_alive(self) -> bool:
|
||||||
"""is_alive() -> bool
|
"""
|
||||||
|
|
||||||
Returns True if the player has a ba.Actor assigned and its
|
Returns True if the player has a ba.Actor assigned and its
|
||||||
is_alive() method return True. False is returned otherwise.
|
is_alive() method return True. False is returned otherwise.
|
||||||
"""
|
"""
|
||||||
|
|
@ -245,8 +242,7 @@ class Player(Generic[TeamType]):
|
||||||
return self.actor is not None and self.actor.is_alive()
|
return self.actor is not None and self.actor.is_alive()
|
||||||
|
|
||||||
def get_icon(self) -> dict[str, Any]:
|
def get_icon(self) -> dict[str, Any]:
|
||||||
"""get_icon() -> dict[str, Any]
|
"""
|
||||||
|
|
||||||
Returns the character's icon (images, colors, etc contained in a dict)
|
Returns the character's icon (images, colors, etc contained in a dict)
|
||||||
"""
|
"""
|
||||||
assert self._postinited
|
assert self._postinited
|
||||||
|
|
@ -256,9 +252,7 @@ class Player(Generic[TeamType]):
|
||||||
def assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType,
|
def assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType,
|
||||||
...]],
|
...]],
|
||||||
call: Callable) -> None:
|
call: Callable) -> None:
|
||||||
"""assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
|
"""
|
||||||
call: Callable) -> None
|
|
||||||
|
|
||||||
Set the python callable to be run for one or more types of input.
|
Set the python callable to be run for one or more types of input.
|
||||||
"""
|
"""
|
||||||
assert self._postinited
|
assert self._postinited
|
||||||
|
|
@ -266,8 +260,7 @@ class Player(Generic[TeamType]):
|
||||||
return self._sessionplayer.assigninput(type=inputtype, call=call)
|
return self._sessionplayer.assigninput(type=inputtype, call=call)
|
||||||
|
|
||||||
def resetinput(self) -> None:
|
def resetinput(self) -> None:
|
||||||
"""resetinput() -> None
|
"""
|
||||||
|
|
||||||
Clears out the player's assigned input actions.
|
Clears out the player's assigned input actions.
|
||||||
"""
|
"""
|
||||||
assert self._postinited
|
assert self._postinited
|
||||||
|
|
|
||||||
8
dist/ba_data/python/ba/_plugin.py
vendored
8
dist/ba_data/python/ba/_plugin.py
vendored
|
|
@ -16,9 +16,9 @@ if TYPE_CHECKING:
|
||||||
class PluginSubsystem:
|
class PluginSubsystem:
|
||||||
"""Subsystem for plugin handling in the app.
|
"""Subsystem for plugin handling in the app.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Access the single shared instance of this class at 'ba.app.plugins'.
|
Access the single shared instance of this class at `ba.app.plugins`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
@ -96,7 +96,7 @@ class PluginSubsystem:
|
||||||
class PotentialPlugin:
|
class PotentialPlugin:
|
||||||
"""Represents a ba.Plugin which can potentially be loaded.
|
"""Represents a ba.Plugin which can potentially be loaded.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
These generally represent plugins which were detected by the
|
These generally represent plugins which were detected by the
|
||||||
meta-tag scan. However they may also represent plugins which
|
meta-tag scan. However they may also represent plugins which
|
||||||
|
|
@ -111,7 +111,7 @@ class PotentialPlugin:
|
||||||
class Plugin:
|
class Plugin:
|
||||||
"""A plugin to alter app behavior in some way.
|
"""A plugin to alter app behavior in some way.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
Plugins are discoverable by the meta-tag system
|
Plugins are discoverable by the meta-tag system
|
||||||
and the user can select which ones they want to activate.
|
and the user can select which ones they want to activate.
|
||||||
|
|
|
||||||
24
dist/ba_data/python/ba/_powerup.py
vendored
24
dist/ba_data/python/ba/_powerup.py
vendored
|
|
@ -16,31 +16,27 @@ if TYPE_CHECKING:
|
||||||
class PowerupMessage:
|
class PowerupMessage:
|
||||||
"""A message telling an object to accept a powerup.
|
"""A message telling an object to accept a powerup.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
This message is normally received by touching a ba.PowerupBox.
|
This message is normally received by touching a ba.PowerupBox.
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
poweruptype
|
|
||||||
The type of powerup to be granted (a string).
|
|
||||||
See ba.Powerup.poweruptype for available type values.
|
|
||||||
|
|
||||||
sourcenode
|
|
||||||
The node the powerup game from, or None otherwise.
|
|
||||||
If a powerup is accepted, a ba.PowerupAcceptMessage should be sent
|
|
||||||
back to the sourcenode to inform it of the fact. This will generally
|
|
||||||
cause the powerup box to make a sound and disappear or whatnot.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
poweruptype: str
|
poweruptype: str
|
||||||
|
"""The type of powerup to be granted (a string).
|
||||||
|
See ba.Powerup.poweruptype for available type values."""
|
||||||
|
|
||||||
sourcenode: Optional[ba.Node] = None
|
sourcenode: Optional[ba.Node] = None
|
||||||
|
"""The node the powerup game from, or None otherwise.
|
||||||
|
If a powerup is accepted, a ba.PowerupAcceptMessage should be sent
|
||||||
|
back to the sourcenode to inform it of the fact. This will generally
|
||||||
|
cause the powerup box to make a sound and disappear or whatnot."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class PowerupAcceptMessage:
|
class PowerupAcceptMessage:
|
||||||
"""A message informing a ba.Powerup that it was accepted.
|
"""A message informing a ba.Powerup that it was accepted.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
This is generally sent in response to a ba.PowerupMessage
|
This is generally sent in response to a ba.PowerupMessage
|
||||||
to inform the box (or whoever granted it) that it can go away.
|
to inform the box (or whoever granted it) that it can go away.
|
||||||
|
|
|
||||||
8
dist/ba_data/python/ba/_profile.py
vendored
8
dist/ba_data/python/ba/_profile.py
vendored
|
|
@ -73,7 +73,7 @@ def get_player_profile_colors(
|
||||||
color = PLAYER_COLORS[random.randrange(6)]
|
color = PLAYER_COLORS[random.randrange(6)]
|
||||||
else:
|
else:
|
||||||
# First 6 are bright-ish.
|
# First 6 are bright-ish.
|
||||||
color = PLAYER_COLORS[sum([ord(c) for c in profilename]) % 6]
|
color = PLAYER_COLORS[sum(ord(c) for c in profilename) % 6]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
assert profilename is not None
|
assert profilename is not None
|
||||||
|
|
@ -86,8 +86,8 @@ def get_player_profile_colors(
|
||||||
highlight = PLAYER_COLORS[random.randrange(
|
highlight = PLAYER_COLORS[random.randrange(
|
||||||
len(PLAYER_COLORS) - 2)]
|
len(PLAYER_COLORS) - 2)]
|
||||||
else:
|
else:
|
||||||
highlight = PLAYER_COLORS[sum(
|
highlight = PLAYER_COLORS[sum(ord(c) + 1
|
||||||
[ord(c) + 1
|
for c in profilename) %
|
||||||
for c in profilename]) % (len(PLAYER_COLORS) - 2)]
|
(len(PLAYER_COLORS) - 2)]
|
||||||
|
|
||||||
return color, highlight
|
return color, highlight
|
||||||
|
|
|
||||||
36
dist/ba_data/python/ba/_score.py
vendored
36
dist/ba_data/python/ba/_score.py
vendored
|
|
@ -16,7 +16,7 @@ if TYPE_CHECKING:
|
||||||
class ScoreType(Enum):
|
class ScoreType(Enum):
|
||||||
"""Type of scores.
|
"""Type of scores.
|
||||||
|
|
||||||
Category: Enums
|
Category: **Enums**
|
||||||
"""
|
"""
|
||||||
SECONDS = 's'
|
SECONDS = 's'
|
||||||
MILLISECONDS = 'ms'
|
MILLISECONDS = 'ms'
|
||||||
|
|
@ -27,30 +27,22 @@ class ScoreType(Enum):
|
||||||
class ScoreConfig:
|
class ScoreConfig:
|
||||||
"""Settings for how a game handles scores.
|
"""Settings for how a game handles scores.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
label
|
|
||||||
A label show to the user for scores; 'Score', 'Time Survived', etc.
|
|
||||||
|
|
||||||
scoretype
|
|
||||||
How the score value should be displayed.
|
|
||||||
|
|
||||||
lower_is_better
|
|
||||||
Whether lower scores are preferable. Higher scores are by default.
|
|
||||||
|
|
||||||
none_is_winner
|
|
||||||
Whether a value of None is considered better than other scores.
|
|
||||||
By default it is not.
|
|
||||||
|
|
||||||
version
|
|
||||||
To change high-score lists used by a game without renaming the game,
|
|
||||||
change this. Defaults to an empty string.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
label: str = 'Score'
|
label: str = 'Score'
|
||||||
|
"""A label show to the user for scores; 'Score', 'Time Survived', etc."""
|
||||||
|
|
||||||
scoretype: ba.ScoreType = ScoreType.POINTS
|
scoretype: ba.ScoreType = ScoreType.POINTS
|
||||||
|
"""How the score value should be displayed."""
|
||||||
|
|
||||||
lower_is_better: bool = False
|
lower_is_better: bool = False
|
||||||
|
"""Whether lower scores are preferable. Higher scores are by default."""
|
||||||
|
|
||||||
none_is_winner: bool = False
|
none_is_winner: bool = False
|
||||||
|
"""Whether a value of None is considered better than other scores.
|
||||||
|
By default it is not."""
|
||||||
|
|
||||||
version: str = ''
|
version: str = ''
|
||||||
|
"""To change high-score lists used by a game without renaming the game,
|
||||||
|
change this. Defaults to an empty string."""
|
||||||
|
|
|
||||||
6
dist/ba_data/python/ba/_servermode.py
vendored
6
dist/ba_data/python/ba/_servermode.py
vendored
|
|
@ -77,7 +77,7 @@ def _cmd(command_data: bytes) -> None:
|
||||||
class ServerController:
|
class ServerController:
|
||||||
"""Overall controller for the app in server mode.
|
"""Overall controller for the app in server mode.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, config: ServerConfig) -> None:
|
def __init__(self, config: ServerConfig) -> None:
|
||||||
|
|
@ -227,7 +227,7 @@ class ServerController:
|
||||||
|
|
||||||
def _prepare_to_serve(self) -> None:
|
def _prepare_to_serve(self) -> None:
|
||||||
"""Run in a timer to do prep before beginning to serve."""
|
"""Run in a timer to do prep before beginning to serve."""
|
||||||
signed_in = _ba.get_account_state() == 'signed_in'
|
signed_in = _ba.get_v1_account_state() == 'signed_in'
|
||||||
if not signed_in:
|
if not signed_in:
|
||||||
|
|
||||||
# Signing in to the local server account should not take long;
|
# Signing in to the local server account should not take long;
|
||||||
|
|
@ -302,7 +302,7 @@ class ServerController:
|
||||||
appcfg = app.config
|
appcfg = app.config
|
||||||
sessiontype = self._get_session_type()
|
sessiontype = self._get_session_type()
|
||||||
|
|
||||||
if _ba.get_account_state() != 'signed_in':
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
print('WARNING: launch_server_session() expects to run '
|
print('WARNING: launch_server_session() expects to run '
|
||||||
'with a signed in server account')
|
'with a signed in server account')
|
||||||
|
|
||||||
|
|
|
||||||
82
dist/ba_data/python/ba/_session.py
vendored
82
dist/ba_data/python/ba/_session.py
vendored
|
|
@ -17,9 +17,9 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
|
|
||||||
class Session:
|
class Session:
|
||||||
"""Defines a high level series of ba.Activities with a common purpose.
|
"""Defines a high level series of ba.Activity-es with a common purpose.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Examples of sessions are ba.FreeForAllSession, ba.DualTeamSession, and
|
Examples of sessions are ba.FreeForAllSession, ba.DualTeamSession, and
|
||||||
ba.CoopSession.
|
ba.CoopSession.
|
||||||
|
|
@ -27,58 +27,48 @@ class Session:
|
||||||
A Session is responsible for wrangling and transitioning between various
|
A Session is responsible for wrangling and transitioning between various
|
||||||
ba.Activity instances such as mini-games and score-screens, and for
|
ba.Activity instances such as mini-games and score-screens, and for
|
||||||
maintaining state between them (players, teams, score tallies, etc).
|
maintaining state between them (players, teams, score tallies, etc).
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
sessionteams
|
|
||||||
All the ba.SessionTeams in the Session. Most things should use the
|
|
||||||
list of ba.Teams in ba.Activity; not this.
|
|
||||||
|
|
||||||
sessionplayers
|
|
||||||
All ba.SessionPlayers in the Session. Most things should use the
|
|
||||||
list of ba.Players in ba.Activity; not this. Some players, such as
|
|
||||||
those who have not yet selected a character, will only be
|
|
||||||
found on this list.
|
|
||||||
|
|
||||||
min_players
|
|
||||||
The minimum number of players who must be present for the Session
|
|
||||||
to proceed past the initial joining screen.
|
|
||||||
|
|
||||||
max_players
|
|
||||||
The maximum number of players allowed in the Session.
|
|
||||||
|
|
||||||
lobby
|
|
||||||
The ba.Lobby instance where new ba.Players go to select a
|
|
||||||
Profile/Team/etc. before being added to games.
|
|
||||||
Be aware this value may be None if a Session does not allow
|
|
||||||
any such selection.
|
|
||||||
|
|
||||||
use_teams
|
|
||||||
Whether this session groups players into an explicit set of
|
|
||||||
teams. If this is off, a unique team is generated for each
|
|
||||||
player that joins.
|
|
||||||
|
|
||||||
use_team_colors
|
|
||||||
Whether players on a team should all adopt the colors of that
|
|
||||||
team instead of their own profile colors. This only applies if
|
|
||||||
use_teams is enabled.
|
|
||||||
|
|
||||||
customdata
|
|
||||||
A shared dictionary for objects to use as storage on this session.
|
|
||||||
Ensure that keys here are unique to avoid collisions.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
use_teams: bool = False
|
|
||||||
use_team_colors: bool = True
|
|
||||||
|
|
||||||
# Note: even though these are instance vars, we annotate them at the
|
use_teams: bool = False
|
||||||
# class level so that docs generation can access their types.
|
"""Whether this session groups players into an explicit set of
|
||||||
|
teams. If this is off, a unique team is generated for each
|
||||||
|
player that joins."""
|
||||||
|
|
||||||
|
use_team_colors: bool = True
|
||||||
|
"""Whether players on a team should all adopt the colors of that
|
||||||
|
team instead of their own profile colors. This only applies if
|
||||||
|
use_teams is enabled."""
|
||||||
|
|
||||||
|
# Note: even though these are instance vars, we annotate and document them
|
||||||
|
# at the class level so that looks better and nobody get lost while
|
||||||
|
# reading large __init__
|
||||||
|
|
||||||
lobby: ba.Lobby
|
lobby: ba.Lobby
|
||||||
|
"""The ba.Lobby instance where new ba.Player-s go to select a
|
||||||
|
Profile/Team/etc. before being added to games.
|
||||||
|
Be aware this value may be None if a Session does not allow
|
||||||
|
any such selection."""
|
||||||
|
|
||||||
max_players: int
|
max_players: int
|
||||||
|
"""The maximum number of players allowed in the Session."""
|
||||||
|
|
||||||
min_players: int
|
min_players: int
|
||||||
|
"""The minimum number of players who must be present for the Session
|
||||||
|
to proceed past the initial joining screen"""
|
||||||
|
|
||||||
sessionplayers: list[ba.SessionPlayer]
|
sessionplayers: list[ba.SessionPlayer]
|
||||||
|
"""All ba.SessionPlayers in the Session. Most things should use the
|
||||||
|
list of ba.Player-s in ba.Activity; not this. Some players, such as
|
||||||
|
those who have not yet selected a character, will only be
|
||||||
|
found on this list."""
|
||||||
|
|
||||||
customdata: dict
|
customdata: dict
|
||||||
|
"""A shared dictionary for objects to use as storage on this session.
|
||||||
|
Ensure that keys here are unique to avoid collisions."""
|
||||||
|
|
||||||
sessionteams: list[ba.SessionTeam]
|
sessionteams: list[ba.SessionTeam]
|
||||||
|
"""All the ba.SessionTeams in the Session. Most things should use the
|
||||||
|
list of ba.Team-s in ba.Activity; not this."""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
depsets: Sequence[ba.DependencySet],
|
depsets: Sequence[ba.DependencySet],
|
||||||
|
|
|
||||||
13
dist/ba_data/python/ba/_stats.py
vendored
13
dist/ba_data/python/ba/_stats.py
vendored
|
|
@ -21,20 +21,17 @@ if TYPE_CHECKING:
|
||||||
class PlayerScoredMessage:
|
class PlayerScoredMessage:
|
||||||
"""Informs something that a ba.Player scored.
|
"""Informs something that a ba.Player scored.
|
||||||
|
|
||||||
Category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
score
|
|
||||||
The score value.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
score: int
|
score: int
|
||||||
|
"""The score value."""
|
||||||
|
|
||||||
|
|
||||||
class PlayerRecord:
|
class PlayerRecord:
|
||||||
"""Stats for an individual player in a ba.Stats object.
|
"""Stats for an individual player in a ba.Stats object.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
This does not necessarily correspond to a ba.Player that is
|
This does not necessarily correspond to a ba.Player that is
|
||||||
still present (stats may be retained for players that leave
|
still present (stats may be retained for players that leave
|
||||||
|
|
@ -232,7 +229,7 @@ class PlayerRecord:
|
||||||
class Stats:
|
class Stats:
|
||||||
"""Manages scores and statistics for a ba.Session.
|
"""Manages scores and statistics for a ba.Session.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
|
||||||
17
dist/ba_data/python/ba/_store.py
vendored
17
dist/ba_data/python/ba/_store.py
vendored
|
|
@ -366,11 +366,11 @@ def get_store_layout() -> dict[str, list[dict[str, Any]]]:
|
||||||
'games.ninja_fight', 'games.meteor_shower', 'games.target_practice'
|
'games.ninja_fight', 'games.meteor_shower', 'games.target_practice'
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
if _ba.get_account_misc_read_val('xmas', False):
|
if _ba.get_v1_account_misc_read_val('xmas', False):
|
||||||
store_layout['characters'][0]['items'].append('characters.santa')
|
store_layout['characters'][0]['items'].append('characters.santa')
|
||||||
store_layout['characters'][0]['items'].append('characters.wizard')
|
store_layout['characters'][0]['items'].append('characters.wizard')
|
||||||
store_layout['characters'][0]['items'].append('characters.cyborg')
|
store_layout['characters'][0]['items'].append('characters.cyborg')
|
||||||
if _ba.get_account_misc_read_val('easter', False):
|
if _ba.get_v1_account_misc_read_val('easter', False):
|
||||||
store_layout['characters'].append({
|
store_layout['characters'].append({
|
||||||
'title': 'store.holidaySpecialText',
|
'title': 'store.holidaySpecialText',
|
||||||
'items': ['characters.bunny']
|
'items': ['characters.bunny']
|
||||||
|
|
@ -401,10 +401,10 @@ def get_clean_price(price_string: str) -> str:
|
||||||
def get_available_purchase_count(tab: str = None) -> int:
|
def get_available_purchase_count(tab: str = None) -> int:
|
||||||
"""(internal)"""
|
"""(internal)"""
|
||||||
try:
|
try:
|
||||||
if _ba.get_account_state() != 'signed_in':
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
return 0
|
return 0
|
||||||
count = 0
|
count = 0
|
||||||
our_tickets = _ba.get_account_ticket_count()
|
our_tickets = _ba.get_v1_account_ticket_count()
|
||||||
store_data = get_store_layout()
|
store_data = get_store_layout()
|
||||||
if tab is not None:
|
if tab is not None:
|
||||||
tabs = [(tab, store_data[tab])]
|
tabs = [(tab, store_data[tab])]
|
||||||
|
|
@ -425,7 +425,8 @@ def _calc_count_for_tab(tabval: list[dict[str, Any]], our_tickets: int,
|
||||||
count: int) -> int:
|
count: int) -> int:
|
||||||
for section in tabval:
|
for section in tabval:
|
||||||
for item in section['items']:
|
for item in section['items']:
|
||||||
ticket_cost = _ba.get_account_misc_read_val('price.' + item, None)
|
ticket_cost = _ba.get_v1_account_misc_read_val(
|
||||||
|
'price.' + item, None)
|
||||||
if ticket_cost is not None:
|
if ticket_cost is not None:
|
||||||
if (our_tickets >= ticket_cost
|
if (our_tickets >= ticket_cost
|
||||||
and not _ba.get_purchased(item)):
|
and not _ba.get_purchased(item)):
|
||||||
|
|
@ -447,7 +448,7 @@ def get_available_sale_time(tab: str) -> Optional[int]:
|
||||||
# Calc time for our pro sale (old special case).
|
# Calc time for our pro sale (old special case).
|
||||||
if tab == 'extras':
|
if tab == 'extras':
|
||||||
config = app.config
|
config = app.config
|
||||||
if app.accounts.have_pro():
|
if app.accounts_v1.have_pro():
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# If we haven't calced/loaded start times yet.
|
# If we haven't calced/loaded start times yet.
|
||||||
|
|
@ -462,7 +463,7 @@ def get_available_sale_time(tab: str) -> Optional[int]:
|
||||||
|
|
||||||
# We start the timer once we get the duration from
|
# We start the timer once we get the duration from
|
||||||
# the server.
|
# the server.
|
||||||
start_duration = _ba.get_account_misc_read_val(
|
start_duration = _ba.get_v1_account_misc_read_val(
|
||||||
'proSaleDurationMinutes', None)
|
'proSaleDurationMinutes', None)
|
||||||
if start_duration is not None:
|
if start_duration is not None:
|
||||||
app.pro_sale_start_time = int(
|
app.pro_sale_start_time = int(
|
||||||
|
|
@ -488,7 +489,7 @@ def get_available_sale_time(tab: str) -> Optional[int]:
|
||||||
sale_times.append(val)
|
sale_times.append(val)
|
||||||
|
|
||||||
# Now look for sales in this tab.
|
# Now look for sales in this tab.
|
||||||
sales_raw = _ba.get_account_misc_read_val('sales', {})
|
sales_raw = _ba.get_v1_account_misc_read_val('sales', {})
|
||||||
store_layout = get_store_layout()
|
store_layout = get_store_layout()
|
||||||
for section in store_layout[tab]:
|
for section in store_layout[tab]:
|
||||||
for item in section['items']:
|
for item in section['items']:
|
||||||
|
|
|
||||||
41
dist/ba_data/python/ba/_team.py
vendored
41
dist/ba_data/python/ba/_team.py
vendored
|
|
@ -17,39 +17,32 @@ if TYPE_CHECKING:
|
||||||
class SessionTeam:
|
class SessionTeam:
|
||||||
"""A team of one or more ba.SessionPlayers.
|
"""A team of one or more ba.SessionPlayers.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Note that a SessionPlayer *always* has a SessionTeam;
|
Note that a SessionPlayer *always* has a SessionTeam;
|
||||||
in some cases, such as free-for-all ba.Sessions,
|
in some cases, such as free-for-all ba.Sessions,
|
||||||
each SessionTeam consists of just one SessionPlayer.
|
each SessionTeam consists of just one SessionPlayer.
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
name
|
|
||||||
The team's name.
|
|
||||||
|
|
||||||
id
|
|
||||||
The unique numeric id of the team.
|
|
||||||
|
|
||||||
color
|
|
||||||
The team's color.
|
|
||||||
|
|
||||||
players
|
|
||||||
The list of ba.SessionPlayers on the team.
|
|
||||||
|
|
||||||
customdata
|
|
||||||
A dict for use by the current ba.Session for
|
|
||||||
storing data associated with this team.
|
|
||||||
Unlike customdata, this persists for the duration
|
|
||||||
of the session.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Annotate our attr types at the class level so they're introspectable.
|
# Annotate our attr types at the class level so they're introspectable.
|
||||||
|
|
||||||
name: Union[ba.Lstr, str]
|
name: Union[ba.Lstr, str]
|
||||||
|
"""The team's name."""
|
||||||
|
|
||||||
color: tuple[float, ...] # FIXME: can't we make this fixed len?
|
color: tuple[float, ...] # FIXME: can't we make this fixed len?
|
||||||
|
"""The team's color."""
|
||||||
|
|
||||||
players: list[ba.SessionPlayer]
|
players: list[ba.SessionPlayer]
|
||||||
|
"""The list of ba.SessionPlayer-s on the team."""
|
||||||
|
|
||||||
customdata: dict
|
customdata: dict
|
||||||
|
"""A dict for use by the current ba.Session for
|
||||||
|
storing data associated with this team.
|
||||||
|
Unlike customdata, this persists for the duration
|
||||||
|
of the session."""
|
||||||
|
|
||||||
id: int
|
id: int
|
||||||
|
"""The unique numeric id of the team."""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
team_id: int = 0,
|
team_id: int = 0,
|
||||||
|
|
@ -73,13 +66,15 @@ class SessionTeam:
|
||||||
self.customdata = {}
|
self.customdata = {}
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class Team(Generic[PlayerType]):
|
class Team(Generic[PlayerType]):
|
||||||
"""A team in a specific ba.Activity.
|
"""A team in a specific ba.Activity.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
These correspond to ba.SessionTeam objects, but are created per activity
|
These correspond to ba.SessionTeam objects, but are created per activity
|
||||||
so that the activity can use its own custom team subclass.
|
so that the activity can use its own custom team subclass.
|
||||||
|
|
@ -197,7 +192,7 @@ class Team(Generic[PlayerType]):
|
||||||
class EmptyTeam(Team['ba.EmptyPlayer']):
|
class EmptyTeam(Team['ba.EmptyPlayer']):
|
||||||
"""An empty player for use by Activities that don't need to define one.
|
"""An empty player for use by Activities that don't need to define one.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
ba.Player and ba.Team are 'Generic' types, and so passing those top level
|
ba.Player and ba.Team are 'Generic' types, and so passing those top level
|
||||||
classes as type arguments when defining a ba.Activity reduces type safety.
|
classes as type arguments when defining a ba.Activity reduces type safety.
|
||||||
|
|
|
||||||
6
dist/ba_data/python/ba/_teamgame.py
vendored
6
dist/ba_data/python/ba/_teamgame.py
vendored
|
|
@ -17,14 +17,16 @@ if TYPE_CHECKING:
|
||||||
from bastd.actor.playerspaz import PlayerSpaz
|
from bastd.actor.playerspaz import PlayerSpaz
|
||||||
import ba
|
import ba
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
TeamType = TypeVar('TeamType', bound='ba.Team')
|
TeamType = TypeVar('TeamType', bound='ba.Team')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class TeamGameActivity(GameActivity[PlayerType, TeamType]):
|
class TeamGameActivity(GameActivity[PlayerType, TeamType]):
|
||||||
"""Base class for teams and free-for-all mode games.
|
"""Base class for teams and free-for-all mode games.
|
||||||
|
|
||||||
Category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
(Free-for-all is essentially just a special case where every
|
(Free-for-all is essentially just a special case where every
|
||||||
ba.Player has their own ba.Team)
|
ba.Player has their own ba.Team)
|
||||||
|
|
@ -120,7 +122,7 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]):
|
||||||
unless 'announce_winning_team' is False.
|
unless 'announce_winning_team' is False.
|
||||||
(for results without a single most-important winner).
|
(for results without a single most-important winner).
|
||||||
"""
|
"""
|
||||||
# pylint: disable=arguments-differ
|
# pylint: disable=arguments-renamed
|
||||||
from ba._coopsession import CoopSession
|
from ba._coopsession import CoopSession
|
||||||
from ba._multiteamsession import MultiTeamSession
|
from ba._multiteamsession import MultiTeamSession
|
||||||
from ba._general import Call
|
from ba._general import Call
|
||||||
|
|
|
||||||
2
dist/ba_data/python/ba/_ui.py
vendored
2
dist/ba_data/python/ba/_ui.py
vendored
|
|
@ -18,7 +18,7 @@ if TYPE_CHECKING:
|
||||||
class UISubsystem:
|
class UISubsystem:
|
||||||
"""Consolidated UI functionality for the app.
|
"""Consolidated UI functionality for the app.
|
||||||
|
|
||||||
Category: App Classes
|
Category: **App Classes**
|
||||||
|
|
||||||
To use this class, access the single instance of it at 'ba.app.ui'.
|
To use this class, access the single instance of it at 'ba.app.ui'.
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
93
dist/ba_data/python/ba/cloud.py
vendored
Normal file
93
dist/ba_data/python/ba/cloud.py
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Functionality related to the cloud."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING, overload
|
||||||
|
|
||||||
|
import _ba
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from typing import Union, Callable, Any
|
||||||
|
|
||||||
|
from efro.message import Message
|
||||||
|
import bacommon.cloud
|
||||||
|
|
||||||
|
# TODO: Should make it possible to define a protocol in bacommon.cloud and
|
||||||
|
# autogenerate this. That would give us type safety between this and
|
||||||
|
# internal protocols.
|
||||||
|
|
||||||
|
|
||||||
|
class CloudSubsystem:
|
||||||
|
"""Used for communicating with the cloud."""
|
||||||
|
|
||||||
|
def is_connected(self) -> bool:
|
||||||
|
"""Return whether a connection to the cloud is present.
|
||||||
|
|
||||||
|
This is a good indicator (though not for certain) that sending
|
||||||
|
messages will succeed.
|
||||||
|
"""
|
||||||
|
return False # Needs to be overridden
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def send_message(
|
||||||
|
self,
|
||||||
|
msg: bacommon.cloud.LoginProxyRequestMessage,
|
||||||
|
on_response: Callable[
|
||||||
|
[Union[bacommon.cloud.LoginProxyRequestResponse,
|
||||||
|
Exception]], None],
|
||||||
|
) -> None:
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def send_message(
|
||||||
|
self,
|
||||||
|
msg: bacommon.cloud.LoginProxyStateQueryMessage,
|
||||||
|
on_response: Callable[
|
||||||
|
[Union[bacommon.cloud.LoginProxyStateQueryResponse,
|
||||||
|
Exception]], None],
|
||||||
|
) -> None:
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def send_message(
|
||||||
|
self,
|
||||||
|
msg: bacommon.cloud.LoginProxyCompleteMessage,
|
||||||
|
on_response: Callable[[Union[None, Exception]], None],
|
||||||
|
) -> None:
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def send_message(
|
||||||
|
self,
|
||||||
|
msg: bacommon.cloud.CredentialsCheckMessage,
|
||||||
|
on_response: Callable[
|
||||||
|
[Union[bacommon.cloud.CredentialsCheckResponse, Exception]], None],
|
||||||
|
) -> None:
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def send_message(
|
||||||
|
self,
|
||||||
|
msg: bacommon.cloud.AccountSessionReleaseMessage,
|
||||||
|
on_response: Callable[[Union[None, Exception]], None],
|
||||||
|
) -> None:
|
||||||
|
...
|
||||||
|
|
||||||
|
def send_message(
|
||||||
|
self,
|
||||||
|
msg: Message,
|
||||||
|
on_response: Callable[[Any], None],
|
||||||
|
) -> None:
|
||||||
|
"""Asynchronously send a message to the cloud from the game thread.
|
||||||
|
|
||||||
|
The provided on_response call will be run in the logic thread
|
||||||
|
and passed either the response or the error that occurred.
|
||||||
|
"""
|
||||||
|
from ba._general import Call
|
||||||
|
del msg # Unused.
|
||||||
|
|
||||||
|
_ba.pushcall(
|
||||||
|
Call(on_response,
|
||||||
|
RuntimeError('Cloud functionality is not available.')))
|
||||||
23
dist/ba_data/python/ba/internal.py
vendored
23
dist/ba_data/python/ba/internal.py
vendored
|
|
@ -7,8 +7,6 @@ or disappear without warning, so should be avoided (or used sparingly and
|
||||||
defensively) in mods.
|
defensively) in mods.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# pylint: disable=unused-import
|
|
||||||
|
|
||||||
from ba._map import (get_unowned_maps, get_map_class, register_map,
|
from ba._map import (get_unowned_maps, get_map_class, register_map,
|
||||||
preload_map_preview_media, get_map_display_string,
|
preload_map_preview_media, get_map_display_string,
|
||||||
get_filtered_map_name)
|
get_filtered_map_name)
|
||||||
|
|
@ -39,3 +37,24 @@ from ba._store import (get_available_sale_time, get_available_purchase_count,
|
||||||
get_store_item, get_clean_price)
|
get_store_item, get_clean_price)
|
||||||
from ba._tournament import get_tournament_prize_strings
|
from ba._tournament import get_tournament_prize_strings
|
||||||
from ba._gameutils import get_trophy_string
|
from ba._gameutils import get_trophy_string
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'get_unowned_maps', 'get_map_class', 'register_map',
|
||||||
|
'preload_map_preview_media', 'get_map_display_string',
|
||||||
|
'get_filtered_map_name', 'commit_app_config', 'get_device_value',
|
||||||
|
'get_input_map_hash', 'get_input_device_config', 'getclass', 'json_prep',
|
||||||
|
'get_type_name', 'JoinActivity', 'ScoreScreenActivity',
|
||||||
|
'is_browser_likely_available', 'get_remote_app_name',
|
||||||
|
'should_submit_debug_info', 'run_gpu_benchmark', 'run_cpu_benchmark',
|
||||||
|
'run_media_reload_benchmark', 'run_stress_test', 'getcampaign',
|
||||||
|
'PlayerProfilesChangedMessage', 'DEFAULT_TEAM_COLORS',
|
||||||
|
'DEFAULT_TEAM_NAMES', 'do_play_music', 'master_server_get',
|
||||||
|
'master_server_post', 'get_ip_address_type',
|
||||||
|
'DEFAULT_REQUEST_TIMEOUT_SECONDS', 'get_default_powerup_distribution',
|
||||||
|
'get_player_profile_colors', 'get_player_profile_icon',
|
||||||
|
'get_player_colors', 'get_next_tip', 'get_default_free_for_all_playlist',
|
||||||
|
'get_default_teams_playlist', 'filter_playlist', 'get_available_sale_time',
|
||||||
|
'get_available_purchase_count', 'get_store_item_name_translated',
|
||||||
|
'get_store_item_display_size', 'get_store_layout', 'get_store_item',
|
||||||
|
'get_clean_price', 'get_tournament_prize_strings', 'get_trophy_string'
|
||||||
|
]
|
||||||
|
|
|
||||||
71
dist/ba_data/python/bacommon/bacloud.py
vendored
Normal file
71
dist/ba_data/python/bacommon/bacloud.py
vendored
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Functionality related to the bacloud tool."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
from efro.dataclassio import ioprepped
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class Response:
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
"""Response sent from the bacloud server to the client.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
message: If present, client should print this message before any other
|
||||||
|
response processing (including error handling) occurs.
|
||||||
|
message_end: end arg for message print() call.
|
||||||
|
error: If present, client should abort with this error message.
|
||||||
|
delay_seconds: How long to wait before proceeding with remaining
|
||||||
|
response (can be useful when waiting for server progress in a loop).
|
||||||
|
login: If present, a token that should be stored client-side and passed
|
||||||
|
with subsequent commands.
|
||||||
|
logout: If True, any existing client-side token should be discarded.
|
||||||
|
dir_manifest: If present, client should generate a manifest of this dir.
|
||||||
|
It should be added to end_command args as 'manifest'.
|
||||||
|
uploads: If present, client should upload the requested files (arg1)
|
||||||
|
individually to a server command (arg2) with provided args (arg3).
|
||||||
|
uploads_inline: If present, a list of pathnames that should be base64
|
||||||
|
gzipped and uploaded to an 'uploads_inline' dict in end_command args.
|
||||||
|
This should be limited to relatively small files.
|
||||||
|
downloads_inline: If present, pathnames mapped to base64 gzipped data to
|
||||||
|
be written to the client. This should only be used for relatively
|
||||||
|
small files as they are all included inline as part of the response.
|
||||||
|
deletes: If present, file paths that should be deleted on the client.
|
||||||
|
dir_prune_empty: If present, all empty dirs under this one should be
|
||||||
|
removed.
|
||||||
|
open_url: If present, url to display to the user.
|
||||||
|
input_prompt: If present, a line of input is read and placed into
|
||||||
|
end_command args as 'input'. The first value is the prompt printed
|
||||||
|
before reading and the second is whether it should be read as a
|
||||||
|
password (without echoing to the terminal).
|
||||||
|
end_message: If present, a message that should be printed after all other
|
||||||
|
response processing is done.
|
||||||
|
end_message_end: end arg for end_message print() call.
|
||||||
|
end_command: If present, this command is run with these args at the end
|
||||||
|
of response processing.
|
||||||
|
"""
|
||||||
|
message: Optional[str] = None
|
||||||
|
message_end: str = '\n'
|
||||||
|
error: Optional[str] = None
|
||||||
|
delay_seconds: float = 0.0
|
||||||
|
login: Optional[str] = None
|
||||||
|
logout: bool = False
|
||||||
|
dir_manifest: Optional[str] = None
|
||||||
|
uploads: Optional[tuple[list[str], str, dict]] = None
|
||||||
|
uploads_inline: Optional[list[str]] = None
|
||||||
|
downloads_inline: Optional[dict[str, str]] = None
|
||||||
|
deletes: Optional[list[str]] = None
|
||||||
|
dir_prune_empty: Optional[str] = None
|
||||||
|
open_url: Optional[str] = None
|
||||||
|
input_prompt: Optional[tuple[str, bool]] = None
|
||||||
|
end_message: Optional[str] = None
|
||||||
|
end_message_end: str = '\n'
|
||||||
|
end_command: Optional[tuple[str, dict]] = None
|
||||||
103
dist/ba_data/python/bacommon/cloud.py
vendored
Normal file
103
dist/ba_data/python/bacommon/cloud.py
vendored
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Functionality related to cloud functionality."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import TYPE_CHECKING, Annotated, Optional
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
from efro.message import Message, Response
|
||||||
|
from efro.dataclassio import ioprepped, IOAttrs
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class LoginProxyRequestMessage(Message):
|
||||||
|
"""Request send to the cloud to ask for a login-proxy."""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_response_types(cls) -> list[type[Response]]:
|
||||||
|
return [LoginProxyRequestResponse]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class LoginProxyRequestResponse(Response):
|
||||||
|
"""Response to a request for a login proxy."""
|
||||||
|
|
||||||
|
# URL to direct the user to for login.
|
||||||
|
url: Annotated[str, IOAttrs('u')]
|
||||||
|
|
||||||
|
# Proxy-Login id for querying results.
|
||||||
|
proxyid: Annotated[str, IOAttrs('p')]
|
||||||
|
|
||||||
|
# Proxy-Login key for querying results.
|
||||||
|
proxykey: Annotated[str, IOAttrs('k')]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class LoginProxyStateQueryMessage(Message):
|
||||||
|
"""Soo.. how is that login proxy going?"""
|
||||||
|
proxyid: Annotated[str, IOAttrs('p')]
|
||||||
|
proxykey: Annotated[str, IOAttrs('k')]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_response_types(cls) -> list[type[Response]]:
|
||||||
|
return [LoginProxyStateQueryResponse]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class LoginProxyStateQueryResponse(Response):
|
||||||
|
"""Here's the info on that login-proxy you asked about, boss."""
|
||||||
|
|
||||||
|
class State(Enum):
|
||||||
|
"""States a login-proxy can be in."""
|
||||||
|
WAITING = 'waiting'
|
||||||
|
SUCCESS = 'success'
|
||||||
|
FAIL = 'fail'
|
||||||
|
|
||||||
|
state: Annotated[State, IOAttrs('s')]
|
||||||
|
|
||||||
|
# On success, these will be filled out.
|
||||||
|
credentials: Annotated[Optional[str], IOAttrs('tk')]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class LoginProxyCompleteMessage(Message):
|
||||||
|
"""Just so you know, we're done with this proxy."""
|
||||||
|
proxyid: Annotated[str, IOAttrs('p')]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class AccountSessionReleaseMessage(Message):
|
||||||
|
"""We're done using this particular session."""
|
||||||
|
token: Annotated[str, IOAttrs('tk')]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class CredentialsCheckMessage(Message):
|
||||||
|
"""Are our current credentials valid?"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_response_types(cls) -> list[type[Response]]:
|
||||||
|
return [CredentialsCheckResponse]
|
||||||
|
|
||||||
|
|
||||||
|
@ioprepped
|
||||||
|
@dataclass
|
||||||
|
class CredentialsCheckResponse(Response):
|
||||||
|
"""Info returned when checking credentials."""
|
||||||
|
|
||||||
|
verified: Annotated[bool, IOAttrs('v')]
|
||||||
|
|
||||||
|
# Current account tag (good time to check if it has changed).
|
||||||
|
tag: Annotated[str, IOAttrs('t')]
|
||||||
2
dist/ba_data/python/bacommon/net.py
vendored
2
dist/ba_data/python/bacommon/net.py
vendored
|
|
@ -17,7 +17,7 @@ if TYPE_CHECKING:
|
||||||
@dataclass
|
@dataclass
|
||||||
class ServerNodeEntry:
|
class ServerNodeEntry:
|
||||||
"""Information about a specific server."""
|
"""Information about a specific server."""
|
||||||
region: Annotated[str, IOAttrs('r')]
|
zone: Annotated[str, IOAttrs('r')]
|
||||||
address: Annotated[str, IOAttrs('a')]
|
address: Annotated[str, IOAttrs('a')]
|
||||||
port: Annotated[int, IOAttrs('p')]
|
port: Annotated[int, IOAttrs('p')]
|
||||||
|
|
||||||
|
|
|
||||||
14
dist/ba_data/python/bastd/activity/coopscore.py
vendored
14
dist/ba_data/python/bastd/activity/coopscore.py
vendored
|
|
@ -52,8 +52,9 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||||
ba.app.ach.achievements_for_coop_level(self._campaign.name + ':' +
|
ba.app.ach.achievements_for_coop_level(self._campaign.name + ':' +
|
||||||
settings['level']))
|
settings['level']))
|
||||||
|
|
||||||
self._account_type = (_ba.get_account_type() if
|
self._account_type = (_ba.get_v1_account_type()
|
||||||
_ba.get_account_state() == 'signed_in' else None)
|
if _ba.get_v1_account_state() == 'signed_in' else
|
||||||
|
None)
|
||||||
|
|
||||||
self._game_service_icon_color: Optional[Sequence[float]]
|
self._game_service_icon_color: Optional[Sequence[float]]
|
||||||
self._game_service_achievements_texture: Optional[ba.Texture]
|
self._game_service_achievements_texture: Optional[ba.Texture]
|
||||||
|
|
@ -631,7 +632,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||||
if ba.app.server is None:
|
if ba.app.server is None:
|
||||||
# If we're running in normal non-headless build, show this text
|
# If we're running in normal non-headless build, show this text
|
||||||
# because only host can continue the game.
|
# because only host can continue the game.
|
||||||
adisp = _ba.get_account_display_string()
|
adisp = _ba.get_v1_account_display_string()
|
||||||
txt = Text(ba.Lstr(resource='waitingForHostText',
|
txt = Text(ba.Lstr(resource='waitingForHostText',
|
||||||
subs=[('${HOST}', adisp)]),
|
subs=[('${HOST}', adisp)]),
|
||||||
maxwidth=300,
|
maxwidth=300,
|
||||||
|
|
@ -732,7 +733,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||||
'scoreVersion': sver,
|
'scoreVersion': sver,
|
||||||
'scores': our_high_scores_all
|
'scores': our_high_scores_all
|
||||||
})
|
})
|
||||||
if _ba.get_account_state() != 'signed_in':
|
if _ba.get_v1_account_state() != 'signed_in':
|
||||||
# We expect this only in kiosk mode; complain otherwise.
|
# We expect this only in kiosk mode; complain otherwise.
|
||||||
if not (ba.app.demo_mode or ba.app.arcade_mode):
|
if not (ba.app.demo_mode or ba.app.arcade_mode):
|
||||||
print('got not-signed-in at score-submit; unexpected')
|
print('got not-signed-in at score-submit; unexpected')
|
||||||
|
|
@ -841,6 +842,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||||
if display_scores[i][1] is None:
|
if display_scores[i][1] is None:
|
||||||
name_str = '-'
|
name_str = '-'
|
||||||
else:
|
else:
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
name_str = ', '.join([
|
name_str = ', '.join([
|
||||||
p['name'] for p in display_scores[i][1]['players']
|
p['name'] for p in display_scores[i][1]['players']
|
||||||
])
|
])
|
||||||
|
|
@ -1259,8 +1261,8 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||||
try:
|
try:
|
||||||
tournament_id = self.session.tournament_id
|
tournament_id = self.session.tournament_id
|
||||||
if tournament_id is not None:
|
if tournament_id is not None:
|
||||||
if tournament_id in ba.app.accounts.tournament_info:
|
if tournament_id in ba.app.accounts_v1.tournament_info:
|
||||||
tourney_info = ba.app.accounts.tournament_info[
|
tourney_info = ba.app.accounts_v1.tournament_info[
|
||||||
tournament_id]
|
tournament_id]
|
||||||
# pylint: disable=unbalanced-tuple-unpacking
|
# pylint: disable=unbalanced-tuple-unpacking
|
||||||
pr1, pv1, pr2, pv2, pr3, pv3 = (
|
pr1, pv1, pr2, pv2, pr3, pv3 = (
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ class MultiTeamScoreScreenActivity(ScoreScreenActivity):
|
||||||
assert self.stats
|
assert self.stats
|
||||||
valid_players = list(self.stats.get_records().items())
|
valid_players = list(self.stats.get_records().items())
|
||||||
|
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
def _get_player_score_set_entry(
|
def _get_player_score_set_entry(
|
||||||
player: ba.SessionPlayer) -> Optional[ba.PlayerRecord]:
|
player: ba.SessionPlayer) -> Optional[ba.PlayerRecord]:
|
||||||
for p_rec in valid_players:
|
for p_rec in valid_players:
|
||||||
|
|
|
||||||
202
dist/ba_data/python/bastd/actor/bomb.py
vendored
202
dist/ba_data/python/bastd/actor/bomb.py
vendored
|
|
@ -16,118 +16,118 @@ from bastd.gameutils import SharedObjects
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Any, Sequence, Optional, Callable
|
from typing import Any, Sequence, Optional, Callable
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class BombFactory:
|
class BombFactory:
|
||||||
"""Wraps up media and other resources used by ba.Bombs.
|
"""Wraps up media and other resources used by ba.Bombs.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
A single instance of this is shared between all bombs
|
A single instance of this is shared between all bombs
|
||||||
and can be retrieved via bastd.actor.bomb.get_factory().
|
and can be retrieved via bastd.actor.bomb.get_factory().
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
bomb_model
|
|
||||||
The ba.Model of a standard or ice bomb.
|
|
||||||
|
|
||||||
sticky_bomb_model
|
|
||||||
The ba.Model of a sticky-bomb.
|
|
||||||
|
|
||||||
impact_bomb_model
|
|
||||||
The ba.Model of an impact-bomb.
|
|
||||||
|
|
||||||
land_mine_model
|
|
||||||
The ba.Model of a land-mine.
|
|
||||||
|
|
||||||
tnt_model
|
|
||||||
The ba.Model of a tnt box.
|
|
||||||
|
|
||||||
regular_tex
|
|
||||||
The ba.Texture for regular bombs.
|
|
||||||
|
|
||||||
ice_tex
|
|
||||||
The ba.Texture for ice bombs.
|
|
||||||
|
|
||||||
sticky_tex
|
|
||||||
The ba.Texture for sticky bombs.
|
|
||||||
|
|
||||||
impact_tex
|
|
||||||
The ba.Texture for impact bombs.
|
|
||||||
|
|
||||||
impact_lit_tex
|
|
||||||
The ba.Texture for impact bombs with lights lit.
|
|
||||||
|
|
||||||
land_mine_tex
|
|
||||||
The ba.Texture for land-mines.
|
|
||||||
|
|
||||||
land_mine_lit_tex
|
|
||||||
The ba.Texture for land-mines with the light lit.
|
|
||||||
|
|
||||||
tnt_tex
|
|
||||||
The ba.Texture for tnt boxes.
|
|
||||||
|
|
||||||
hiss_sound
|
|
||||||
The ba.Sound for the hiss sound an ice bomb makes.
|
|
||||||
|
|
||||||
debris_fall_sound
|
|
||||||
The ba.Sound for random falling debris after an explosion.
|
|
||||||
|
|
||||||
wood_debris_fall_sound
|
|
||||||
A ba.Sound for random wood debris falling after an explosion.
|
|
||||||
|
|
||||||
explode_sounds
|
|
||||||
A tuple of ba.Sounds for explosions.
|
|
||||||
|
|
||||||
freeze_sound
|
|
||||||
A ba.Sound of an ice bomb freezing something.
|
|
||||||
|
|
||||||
fuse_sound
|
|
||||||
A ba.Sound of a burning fuse.
|
|
||||||
|
|
||||||
activate_sound
|
|
||||||
A ba.Sound for an activating impact bomb.
|
|
||||||
|
|
||||||
warn_sound
|
|
||||||
A ba.Sound for an impact bomb about to explode due to time-out.
|
|
||||||
|
|
||||||
bomb_material
|
|
||||||
A ba.Material applied to all bombs.
|
|
||||||
|
|
||||||
normal_sound_material
|
|
||||||
A ba.Material that generates standard bomb noises on impacts, etc.
|
|
||||||
|
|
||||||
sticky_material
|
|
||||||
A ba.Material that makes 'splat' sounds and makes collisions softer.
|
|
||||||
|
|
||||||
land_mine_no_explode_material
|
|
||||||
A ba.Material that keeps land-mines from blowing up.
|
|
||||||
Applied to land-mines when they are created to allow land-mines to
|
|
||||||
touch without exploding.
|
|
||||||
|
|
||||||
land_mine_blast_material
|
|
||||||
A ba.Material applied to activated land-mines that causes them to
|
|
||||||
explode on impact.
|
|
||||||
|
|
||||||
impact_blast_material
|
|
||||||
A ba.Material applied to activated impact-bombs that causes them to
|
|
||||||
explode on impact.
|
|
||||||
|
|
||||||
blast_material
|
|
||||||
A ba.Material applied to bomb blast geometry which triggers impact
|
|
||||||
events with what it touches.
|
|
||||||
|
|
||||||
dink_sounds
|
|
||||||
A tuple of ba.Sounds for when bombs hit the ground.
|
|
||||||
|
|
||||||
sticky_impact_sound
|
|
||||||
The ba.Sound for a squish made by a sticky bomb hitting something.
|
|
||||||
|
|
||||||
roll_sound
|
|
||||||
ba.Sound for a rolling bomb.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
bomb_model: ba.Model
|
||||||
|
"""The ba.Model of a standard or ice bomb."""
|
||||||
|
|
||||||
|
sticky_bomb_model: ba.Model
|
||||||
|
"""The ba.Model of a sticky-bomb."""
|
||||||
|
|
||||||
|
impact_bomb_model: ba.Model
|
||||||
|
"""The ba.Model of an impact-bomb."""
|
||||||
|
|
||||||
|
land_mine_model: ba.Model
|
||||||
|
"""The ba.Model of a land-mine."""
|
||||||
|
|
||||||
|
tnt_model: ba.Model
|
||||||
|
"""The ba.Model of a tnt box."""
|
||||||
|
|
||||||
|
regular_tex: ba.Texture
|
||||||
|
"""The ba.Texture for regular bombs."""
|
||||||
|
|
||||||
|
ice_tex: ba.Texture
|
||||||
|
"""The ba.Texture for ice bombs."""
|
||||||
|
|
||||||
|
sticky_tex: ba.Texture
|
||||||
|
"""The ba.Texture for sticky bombs."""
|
||||||
|
|
||||||
|
impact_tex: ba.Texture
|
||||||
|
"""The ba.Texture for impact bombs."""
|
||||||
|
|
||||||
|
impact_lit_tex: ba.Texture
|
||||||
|
"""The ba.Texture for impact bombs with lights lit."""
|
||||||
|
|
||||||
|
land_mine_tex: ba.Texture
|
||||||
|
"""The ba.Texture for land-mines."""
|
||||||
|
|
||||||
|
land_mine_lit_tex: ba.Texture
|
||||||
|
"""The ba.Texture for land-mines with the light lit."""
|
||||||
|
|
||||||
|
tnt_tex: ba.Texture
|
||||||
|
"""The ba.Texture for tnt boxes."""
|
||||||
|
|
||||||
|
hiss_sound: ba.Sound
|
||||||
|
"""The ba.Sound for the hiss sound an ice bomb makes."""
|
||||||
|
|
||||||
|
debris_fall_sound: ba.Sound
|
||||||
|
"""The ba.Sound for random falling debris after an explosion."""
|
||||||
|
|
||||||
|
wood_debris_fall_sound: ba.Sound
|
||||||
|
"""A ba.Sound for random wood debris falling after an explosion."""
|
||||||
|
|
||||||
|
explode_sounds: Sequence[ba.Sound]
|
||||||
|
"""A tuple of ba.Sound-s for explosions."""
|
||||||
|
|
||||||
|
freeze_sound: ba.Sound
|
||||||
|
"""A ba.Sound of an ice bomb freezing something."""
|
||||||
|
|
||||||
|
fuse_sound: ba.Sound
|
||||||
|
"""A ba.Sound of a burning fuse."""
|
||||||
|
|
||||||
|
activate_sound: ba.Sound
|
||||||
|
"""A ba.Sound for an activating impact bomb."""
|
||||||
|
|
||||||
|
warn_sound: ba.Sound
|
||||||
|
"""A ba.Sound for an impact bomb about to explode due to time-out."""
|
||||||
|
|
||||||
|
bomb_material: ba.Material
|
||||||
|
"""A ba.Material applied to all bombs."""
|
||||||
|
|
||||||
|
normal_sound_material: ba.Material
|
||||||
|
"""A ba.Material that generates standard bomb noises on impacts, etc."""
|
||||||
|
|
||||||
|
sticky_material: ba.Material
|
||||||
|
"""A ba.Material that makes 'splat' sounds and makes collisions softer."""
|
||||||
|
|
||||||
|
land_mine_no_explode_material: ba.Material
|
||||||
|
"""A ba.Material that keeps land-mines from blowing up.
|
||||||
|
Applied to land-mines when they are created to allow land-mines to
|
||||||
|
touch without exploding."""
|
||||||
|
|
||||||
|
land_mine_blast_material: ba.Material
|
||||||
|
"""A ba.Material applied to activated land-mines that causes them to
|
||||||
|
explode on impact."""
|
||||||
|
|
||||||
|
impact_blast_material: ba.Material
|
||||||
|
"""A ba.Material applied to activated impact-bombs that causes them to
|
||||||
|
explode on impact."""
|
||||||
|
|
||||||
|
blast_material: ba.Material
|
||||||
|
"""A ba.Material applied to bomb blast geometry which triggers impact
|
||||||
|
events with what it touches."""
|
||||||
|
|
||||||
|
dink_sounds: Sequence[ba.Sound]
|
||||||
|
"""A tuple of ba.Sound-s for when bombs hit the ground."""
|
||||||
|
|
||||||
|
sticky_impact_sound: ba.Sound
|
||||||
|
"""The ba.Sound for a squish made by a sticky bomb hitting something."""
|
||||||
|
|
||||||
|
roll_sound: ba.Sound
|
||||||
|
"""ba.Sound for a rolling bomb."""
|
||||||
|
|
||||||
_STORENAME = ba.storagename()
|
_STORENAME = ba.storagename()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
||||||
93
dist/ba_data/python/bastd/actor/flag.py
vendored
93
dist/ba_data/python/bastd/actor/flag.py
vendored
|
|
@ -15,38 +15,36 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
|
|
||||||
class FlagFactory:
|
class FlagFactory:
|
||||||
"""Wraps up media and other resources used by ba.Flags.
|
"""Wraps up media and other resources used by `Flag`s.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
A single instance of this is shared between all flags
|
A single instance of this is shared between all flags
|
||||||
and can be retrieved via bastd.actor.flag.get_factory().
|
and can be retrieved via FlagFactory.get().
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
flagmaterial
|
|
||||||
The ba.Material applied to all ba.Flags.
|
|
||||||
|
|
||||||
impact_sound
|
|
||||||
The ba.Sound used when a ba.Flag hits the ground.
|
|
||||||
|
|
||||||
skid_sound
|
|
||||||
The ba.Sound used when a ba.Flag skids along the ground.
|
|
||||||
|
|
||||||
no_hit_material
|
|
||||||
A ba.Material that prevents contact with most objects;
|
|
||||||
applied to 'non-touchable' flags.
|
|
||||||
|
|
||||||
flag_texture
|
|
||||||
The ba.Texture for flags.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
flagmaterial: ba.Material
|
||||||
|
"""The ba.Material applied to all `Flag`s."""
|
||||||
|
|
||||||
|
impact_sound: ba.Sound
|
||||||
|
"""The ba.Sound used when a `Flag` hits the ground."""
|
||||||
|
|
||||||
|
skid_sound: ba.Sound
|
||||||
|
"""The ba.Sound used when a `Flag` skids along the ground."""
|
||||||
|
|
||||||
|
no_hit_material: ba.Material
|
||||||
|
"""A ba.Material that prevents contact with most objects;
|
||||||
|
applied to 'non-touchable' flags."""
|
||||||
|
|
||||||
|
flag_texture: ba.Texture
|
||||||
|
"""The ba.Texture for flags."""
|
||||||
|
|
||||||
_STORENAME = ba.storagename()
|
_STORENAME = ba.storagename()
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
"""Instantiate a FlagFactory.
|
"""Instantiate a `FlagFactory`.
|
||||||
|
|
||||||
You shouldn't need to do this; call bastd.actor.flag.get_factory() to
|
You shouldn't need to do this; call FlagFactory.get() to
|
||||||
get a shared instance.
|
get a shared instance.
|
||||||
"""
|
"""
|
||||||
shared = SharedObjects.get()
|
shared = SharedObjects.get()
|
||||||
|
|
@ -109,7 +107,7 @@ class FlagFactory:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls) -> FlagFactory:
|
def get(cls) -> FlagFactory:
|
||||||
"""Get/create a shared FlagFactory instance."""
|
"""Get/create a shared `FlagFactory` instance."""
|
||||||
activity = ba.getactivity()
|
activity = ba.getactivity()
|
||||||
factory = activity.customdata.get(cls._STORENAME)
|
factory = activity.customdata.get(cls._STORENAME)
|
||||||
if factory is None:
|
if factory is None:
|
||||||
|
|
@ -121,58 +119,47 @@ class FlagFactory:
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FlagPickedUpMessage:
|
class FlagPickedUpMessage:
|
||||||
"""A message saying a ba.Flag has been picked up.
|
"""A message saying a `Flag` has been picked up.
|
||||||
|
|
||||||
category: Message Classes
|
Category: **Message Classes**
|
||||||
|
"""
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
flag
|
|
||||||
The ba.Flag that has been picked up.
|
|
||||||
|
|
||||||
node
|
|
||||||
The ba.Node doing the picking up.
|
|
||||||
"""
|
|
||||||
flag: Flag
|
flag: Flag
|
||||||
|
"""The `Flag` that has been picked up."""
|
||||||
|
|
||||||
node: ba.Node
|
node: ba.Node
|
||||||
|
"""The ba.Node doing the picking up."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FlagDiedMessage:
|
class FlagDiedMessage:
|
||||||
"""A message saying a ba.Flag has died.
|
"""A message saying a `Flag` has died.
|
||||||
|
|
||||||
category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
flag
|
|
||||||
The ba.Flag that died.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
flag: Flag
|
flag: Flag
|
||||||
|
"""The `Flag` that died."""
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FlagDroppedMessage:
|
class FlagDroppedMessage:
|
||||||
"""A message saying a ba.Flag has been dropped.
|
"""A message saying a `Flag` has been dropped.
|
||||||
|
|
||||||
category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
flag
|
|
||||||
The ba.Flag that was dropped.
|
|
||||||
|
|
||||||
node
|
|
||||||
The ba.Node that was holding it.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
flag: Flag
|
flag: Flag
|
||||||
|
"""The `Flag` that was dropped."""
|
||||||
|
|
||||||
node: ba.Node
|
node: ba.Node
|
||||||
|
"""The ba.Node that was holding it."""
|
||||||
|
|
||||||
|
|
||||||
class Flag(ba.Actor):
|
class Flag(ba.Actor):
|
||||||
"""A flag; used in games such as capture-the-flag or king-of-the-hill.
|
"""A flag; used in games such as capture-the-flag or king-of-the-hill.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Can be stationary or carry-able by players.
|
Can be stationary or carry-able by players.
|
||||||
"""
|
"""
|
||||||
|
|
@ -189,7 +176,7 @@ class Flag(ba.Actor):
|
||||||
useful for things like king-of-the-hill where players should
|
useful for things like king-of-the-hill where players should
|
||||||
not be moving the flag around.
|
not be moving the flag around.
|
||||||
|
|
||||||
'materials can be a list of extra ba.Materials to apply to the flag.
|
'materials can be a list of extra `ba.Material`s to apply to the flag.
|
||||||
|
|
||||||
If 'dropped_timeout' is provided (in seconds), the flag will die
|
If 'dropped_timeout' is provided (in seconds), the flag will die
|
||||||
after remaining untouched for that long once it has been moved
|
after remaining untouched for that long once it has been moved
|
||||||
|
|
|
||||||
20
dist/ba_data/python/bastd/actor/playerspaz.py
vendored
20
dist/ba_data/python/bastd/actor/playerspaz.py
vendored
|
|
@ -12,36 +12,36 @@ from spazmod import modifyspaz
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Any, Sequence, Optional, Literal
|
from typing import Any, Sequence, Optional, Literal
|
||||||
|
|
||||||
|
# pylint: disable=invalid-name
|
||||||
PlayerType = TypeVar('PlayerType', bound=ba.Player)
|
PlayerType = TypeVar('PlayerType', bound=ba.Player)
|
||||||
TeamType = TypeVar('TeamType', bound=ba.Team)
|
TeamType = TypeVar('TeamType', bound=ba.Team)
|
||||||
|
# pylint: enable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class PlayerSpazHurtMessage:
|
class PlayerSpazHurtMessage:
|
||||||
"""A message saying a ba.PlayerSpaz was hurt.
|
"""A message saying a PlayerSpaz was hurt.
|
||||||
|
|
||||||
category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
spaz
|
|
||||||
The ba.PlayerSpaz that was hurt
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
spaz: PlayerSpaz
|
||||||
|
"""The PlayerSpaz that was hurt"""
|
||||||
|
|
||||||
def __init__(self, spaz: PlayerSpaz):
|
def __init__(self, spaz: PlayerSpaz):
|
||||||
"""Instantiate with the given ba.Spaz value."""
|
"""Instantiate with the given ba.Spaz value."""
|
||||||
self.spaz = spaz
|
self.spaz = spaz
|
||||||
|
|
||||||
|
|
||||||
class PlayerSpaz(Spaz):
|
class PlayerSpaz(Spaz):
|
||||||
"""A ba.Spaz subclass meant to be controlled by a ba.Player.
|
"""A Spaz subclass meant to be controlled by a ba.Player.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
When a PlayerSpaz dies, it delivers a ba.PlayerDiedMessage
|
When a PlayerSpaz dies, it delivers a ba.PlayerDiedMessage
|
||||||
to the current ba.Activity. (unless the death was the result of the
|
to the current ba.Activity. (unless the death was the result of the
|
||||||
player leaving the game, in which case no message is sent)
|
player leaving the game, in which case no message is sent)
|
||||||
|
|
||||||
When a PlayerSpaz is hurt, it delivers a ba.PlayerSpazHurtMessage
|
When a PlayerSpaz is hurt, it delivers a PlayerSpazHurtMessage
|
||||||
to the current ba.Activity.
|
to the current ba.Activity.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
|
||||||
122
dist/ba_data/python/bastd/actor/powerupbox.py
vendored
122
dist/ba_data/python/bastd/actor/powerupbox.py
vendored
|
|
@ -23,69 +23,67 @@ class _TouchedMessage:
|
||||||
class PowerupBoxFactory:
|
class PowerupBoxFactory:
|
||||||
"""A collection of media and other resources used by ba.Powerups.
|
"""A collection of media and other resources used by ba.Powerups.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
A single instance of this is shared between all powerups
|
A single instance of this is shared between all powerups
|
||||||
and can be retrieved via ba.Powerup.get_factory().
|
and can be retrieved via ba.Powerup.get_factory().
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
model
|
|
||||||
The ba.Model of the powerup box.
|
|
||||||
|
|
||||||
model_simple
|
|
||||||
A simpler ba.Model of the powerup box, for use in shadows, etc.
|
|
||||||
|
|
||||||
tex_bomb
|
|
||||||
Triple-bomb powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_punch
|
|
||||||
Punch powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_ice_bombs
|
|
||||||
Ice bomb powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_sticky_bombs
|
|
||||||
Sticky bomb powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_shield
|
|
||||||
Shield powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_impact_bombs
|
|
||||||
Impact-bomb powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_health
|
|
||||||
Health powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_land_mines
|
|
||||||
Land-mine powerup ba.Texture.
|
|
||||||
|
|
||||||
tex_curse
|
|
||||||
Curse powerup ba.Texture.
|
|
||||||
|
|
||||||
health_powerup_sound
|
|
||||||
ba.Sound played when a health powerup is accepted.
|
|
||||||
|
|
||||||
powerup_sound
|
|
||||||
ba.Sound played when a powerup is accepted.
|
|
||||||
|
|
||||||
powerdown_sound
|
|
||||||
ba.Sound that can be used when powerups wear off.
|
|
||||||
|
|
||||||
powerup_material
|
|
||||||
ba.Material applied to powerup boxes.
|
|
||||||
|
|
||||||
powerup_accept_material
|
|
||||||
Powerups will send a ba.PowerupMessage to anything they touch
|
|
||||||
that has this ba.Material applied.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
model: ba.Model
|
||||||
|
"""The ba.Model of the powerup box."""
|
||||||
|
|
||||||
|
model_simple: ba.Model
|
||||||
|
"""A simpler ba.Model of the powerup box, for use in shadows, etc."""
|
||||||
|
|
||||||
|
tex_bomb: ba.Texture
|
||||||
|
"""Triple-bomb powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_punch: ba.Texture
|
||||||
|
"""Punch powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_ice_bombs: ba.Texture
|
||||||
|
"""Ice bomb powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_sticky_bombs: ba.Texture
|
||||||
|
"""Sticky bomb powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_shield: ba.Texture
|
||||||
|
"""Shield powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_impact_bombs: ba.Texture
|
||||||
|
"""Impact-bomb powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_health: ba.Texture
|
||||||
|
"""Health powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_land_mines: ba.Texture
|
||||||
|
"""Land-mine powerup ba.Texture."""
|
||||||
|
|
||||||
|
tex_curse: ba.Texture
|
||||||
|
"""Curse powerup ba.Texture."""
|
||||||
|
|
||||||
|
health_powerup_sound: ba.Sound
|
||||||
|
"""ba.Sound played when a health powerup is accepted."""
|
||||||
|
|
||||||
|
powerup_sound: ba.Sound
|
||||||
|
"""ba.Sound played when a powerup is accepted."""
|
||||||
|
|
||||||
|
powerdown_sound: ba.Sound
|
||||||
|
"""ba.Sound that can be used when powerups wear off."""
|
||||||
|
|
||||||
|
powerup_material: ba.Material
|
||||||
|
"""ba.Material applied to powerup boxes."""
|
||||||
|
|
||||||
|
powerup_accept_material: ba.Material
|
||||||
|
"""Powerups will send a ba.PowerupMessage to anything they touch
|
||||||
|
that has this ba.Material applied."""
|
||||||
|
|
||||||
_STORENAME = ba.storagename()
|
_STORENAME = ba.storagename()
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
"""Instantiate a PowerupBoxFactory.
|
"""Instantiate a PowerupBoxFactory.
|
||||||
|
|
||||||
You shouldn't need to do this; call ba.Powerup.get_factory()
|
You shouldn't need to do this; call Powerup.get_factory()
|
||||||
to get a shared instance.
|
to get a shared instance.
|
||||||
"""
|
"""
|
||||||
from ba.internal import get_default_powerup_distribution
|
from ba.internal import get_default_powerup_distribution
|
||||||
|
|
@ -191,18 +189,16 @@ class PowerupBox(ba.Actor):
|
||||||
|
|
||||||
This will deliver a ba.PowerupMessage to anything that touches it
|
This will deliver a ba.PowerupMessage to anything that touches it
|
||||||
which has the ba.PowerupBoxFactory.powerup_accept_material applied.
|
which has the ba.PowerupBoxFactory.powerup_accept_material applied.
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
poweruptype
|
|
||||||
The string powerup type. This can be 'triple_bombs', 'punch',
|
|
||||||
'ice_bombs', 'impact_bombs', 'land_mines', 'sticky_bombs', 'shield',
|
|
||||||
'health', or 'curse'.
|
|
||||||
|
|
||||||
node
|
|
||||||
The 'prop' ba.Node representing this box.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
poweruptype: str
|
||||||
|
"""The string powerup type. This can be 'triple_bombs', 'punch',
|
||||||
|
'ice_bombs', 'impact_bombs', 'land_mines', 'sticky_bombs', 'shield',
|
||||||
|
'health', or 'curse'."""
|
||||||
|
|
||||||
|
node: ba.Node
|
||||||
|
"""The 'prop' ba.Node representing this box."""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
position: Sequence[float] = (0.0, 1.0, 0.0),
|
position: Sequence[float] = (0.0, 1.0, 0.0),
|
||||||
poweruptype: str = 'triple_bombs',
|
poweruptype: str = 'triple_bombs',
|
||||||
|
|
|
||||||
28
dist/ba_data/python/bastd/actor/spawner.py
vendored
28
dist/ba_data/python/bastd/actor/spawner.py
vendored
|
|
@ -16,29 +16,27 @@ if TYPE_CHECKING:
|
||||||
class Spawner:
|
class Spawner:
|
||||||
"""Utility for delayed spawning of objects.
|
"""Utility for delayed spawning of objects.
|
||||||
|
|
||||||
category: Gameplay Classes
|
Category: **Gameplay Classes**
|
||||||
|
|
||||||
Creates a light flash and sends a ba.Spawner.SpawnMessage
|
Creates a light flash and sends a Spawner.SpawnMessage
|
||||||
to the current activity after a delay.
|
to the current activity after a delay.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class SpawnMessage:
|
class SpawnMessage:
|
||||||
"""Spawn message sent by a ba.Spawner after its delay has passed.
|
"""Spawn message sent by a Spawner after its delay has passed.
|
||||||
|
|
||||||
category: Message Classes
|
Category: **Message Classes**
|
||||||
|
|
||||||
Attributes:
|
|
||||||
|
|
||||||
spawner
|
|
||||||
The ba.Spawner we came from.
|
|
||||||
|
|
||||||
data
|
|
||||||
The data object passed by the user.
|
|
||||||
|
|
||||||
pt
|
|
||||||
The spawn position.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
spawner: Spawner
|
||||||
|
"""The ba.Spawner we came from."""
|
||||||
|
|
||||||
|
data: Any
|
||||||
|
"""The data object passed by the user."""
|
||||||
|
|
||||||
|
pt: Sequence[float]
|
||||||
|
"""The spawn position."""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
spawner: Spawner,
|
spawner: Spawner,
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue