syncing ba,bastd from master

This commit is contained in:
Ayush Saini 2022-07-02 01:43:52 +05:30
parent d9634f722e
commit e44fe44e5b
108 changed files with 793 additions and 683 deletions

View file

@ -75,7 +75,7 @@
"adan", "adan",
"Adeel (AdeZ {@adez_})", "Adeel (AdeZ {@adez_})",
"Adel", "Adel",
"Rio Adi", "Rio adi",
"Rayhan Adiansyah", "Rayhan Adiansyah",
"Yonas Adiel", "Yonas Adiel",
"admin", "admin",
@ -96,6 +96,7 @@
"ahmed", "ahmed",
"ahmedzabara", "ahmedzabara",
"Collin Ainge", "Collin Ainge",
"Akash",
"Akbar", "Akbar",
"Bekir Akdemir", "Bekir Akdemir",
"Akhanyile", "Akhanyile",
@ -306,6 +307,7 @@
"Brojas", "Brojas",
"Brojasko", "Brojasko",
"BrotheRuzz11", "BrotheRuzz11",
"Brunoazocar",
"bsam", "bsam",
"Bsamhero", "Bsamhero",
"BSODPK", "BSODPK",
@ -374,6 +376,7 @@
"Cpt crook", "Cpt crook",
"Prashanth CrossFire", "Prashanth CrossFire",
"Cryfter", "Cryfter",
"cuddles98",
"cukomus", "cukomus",
"CYCL0YT", "CYCL0YT",
"D", "D",
@ -408,6 +411,7 @@
"Dennys", "Dennys",
"Alex Derbenew", "Alex Derbenew",
"df", "df",
"Santanu Dhar",
"Guilherme Dias", "Guilherme Dias",
"Diase7en", "Diase7en",
"ferbie Dicen", "ferbie Dicen",
@ -416,6 +420,7 @@
"dikivan2000", "dikivan2000",
"Dimitriy", "Dimitriy",
"Martin Dimitrov", "Martin Dimitrov",
"DinoWattz",
"Diprone", "Diprone",
"djaber djafer", "djaber djafer",
"Fadhil djibran", "Fadhil djibran",
@ -439,6 +444,7 @@
"Dudow", "Dudow",
"Dustin", "Dustin",
"Paul Duvernay", "Paul Duvernay",
"Emir İslam Dündar",
"Ebutahapro07tr", "Ebutahapro07tr",
"Edson", "Edson",
"Glen Edwards", "Glen Edwards",
@ -487,6 +493,7 @@
"Jakub Fafek", "Jakub Fafek",
"Syed Fahrin (Mr.Lemoyne)", "Syed Fahrin (Mr.Lemoyne)",
"faizal.faiz.ms@gmail.com", "faizal.faiz.ms@gmail.com",
"Fakih",
"FanDolz.", "FanDolz.",
"Faqih", "Faqih",
"Muhammad Faqih ''None''", "Muhammad Faqih ''None''",
@ -679,7 +686,7 @@
"Tobias Dencker Israelsen", "Tobias Dencker Israelsen",
"Kegyes István", "Kegyes István",
"Itamar", "Itamar",
"Ivan", "ivan",
"iViietZ", "iViietZ",
"Al jabbar", "Al jabbar",
"Jacek", "Jacek",
@ -699,6 +706,7 @@
"Jembhut", "Jembhut",
"CrackerKSR (Kishor Jena)", "CrackerKSR (Kishor Jena)",
"CrackerKSR (Kishor Jena))", "CrackerKSR (Kishor Jena))",
"Jenqa",
"Jeroen", "Jeroen",
"jesus", "jesus",
"Jetty", "Jetty",
@ -759,6 +767,7 @@
"Kaushik", "Kaushik",
"KawaiiON", "KawaiiON",
"KD", "KD",
"Kejuxs",
"Mani kelidari", "Mani kelidari",
"Kelmine", "Kelmine",
"Kenjie", "Kenjie",
@ -790,6 +799,7 @@
"Nikolay Korolyov", "Nikolay Korolyov",
"Kostas", "Kostas",
"Viktor Kostohryz", "Viktor Kostohryz",
"Kozmo909",
"Mikhail Krasovsky", "Mikhail Krasovsky",
"kripanshu", "kripanshu",
"kris", "kris",
@ -842,6 +852,7 @@
"Linux44313", "Linux44313",
"LiteBalt", "LiteBalt",
"LittleNyanCat", "LittleNyanCat",
"Lizzetc",
"Lkham", "Lkham",
"Loex", "Loex",
"Loko", "Loko",
@ -933,6 +944,7 @@
"Meryu07", "Meryu07",
"Meysam", "Meysam",
"MGH", "MGH",
"Davis Michelle",
"Mick", "Mick",
"Miguel", "Miguel",
"Miguelterrazas123", "Miguelterrazas123",
@ -1254,6 +1266,7 @@
"ShadowQ", "ShadowQ",
"shafay", "shafay",
"Manan Shah", "Manan Shah",
"shakesm",
"Sharvesh", "Sharvesh",
"Nalam Shashwath", "Nalam Shashwath",
"Haige Shi", "Haige Shi",
@ -1271,6 +1284,7 @@
"Igor Slobodchuk", "Igor Slobodchuk",
"Rasim Smaili", "Rasim Smaili",
"Nicola Smaniotto", "Nicola Smaniotto",
"smertfhg",
"Nico Smit", "Nico Smit",
"Snack", "Snack",
"Mahteus Soares", "Mahteus Soares",
@ -1549,6 +1563,7 @@
"مُحمَّد الأول", "مُحمَّد الأول",
"البطل", "البطل",
"بسام البطل", "بسام البطل",
"رفيق العشي",
"ابو العواصف2020", "ابو العواصف2020",
"عبدالرحمن النجم", "عبدالرحمن النجم",
"امیرعلی", "امیرعلی",
@ -1585,6 +1600,7 @@
"حسین وفایی‌فرد", "حسین وفایی‌فرد",
"انا يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا", "انا يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا عمر انا بران يا",
"١٢٣٤٥", "١٢٣٤٥",
"٦٤٦٦٤٦٤٦",
"علیرضا پودینه", "علیرضا پودینه",
"वेदाँश त्यागी", "वेदाँश त्यागी",
"അർഷഖ് ഹസ്സൻ", "അർഷഖ് ഹസ്സൻ",
@ -1618,6 +1634,7 @@
"神仙", "神仙",
"药药Medic", "药药Medic",
"蔚蓝枫叶", "蔚蓝枫叶",
"鲨鱼服·Medic",
"鲲鹏元帅", "鲲鹏元帅",
"꧁ephyro꧂", "꧁ephyro꧂",
"공팔이", "공팔이",

View file

@ -56,8 +56,8 @@
"Boxer": { "Boxer": {
"description": "فز بدون استخدامك للقنابل", "description": "فز بدون استخدامك للقنابل",
"descriptionComplete": "لقد فزت بدون استخدام القنابل", "descriptionComplete": "لقد فزت بدون استخدام القنابل",
"descriptionFull": "قم بإكمال ${LEVEL} بدون استخدام أية قنابل", "descriptionFull": "بدون استخدام اي قنابل${LEVEL} قم بإكمال",
"descriptionFullComplete": "اكمل ${LEVEL} بدون استخدام أية قنابل", "descriptionFullComplete": "دون استخدام اي قنابل${LEVEL} اكمل",
"name": "مُلاكِمْ" "name": "مُلاكِمْ"
}, },
"Dual Wielding": { "Dual Wielding": {
@ -66,10 +66,10 @@
"name": "اللكمة المزدوجة" "name": "اللكمة المزدوجة"
}, },
"Flawless Victory": { "Flawless Victory": {
"description": "انتصر بدون تعرض للأذى", "description": "انتصر بدون التعرض للأذى",
"descriptionComplete": "لقد فزت بدون تعرضك للأذى", "descriptionComplete": "لقد فزت بدون تعرضك للأذى",
"descriptionFull": "انتصر في ${LEVEL} بدون تعرضك للأذى", "descriptionFull": "دون تعرضك للأذى${LEVEL} فُزْ",
"descriptionFullComplete": "لقد فزت في ${LEVEL} بدون تعرضك للأذى", "descriptionFullComplete": "دون تعرضك للأذى ${LEVEL} لقد فُزتَ",
"name": "الفوز المستحق" "name": "الفوز المستحق"
}, },
"Free Loader": { "Free Loader": {
@ -89,7 +89,7 @@
"descriptionComplete": "لقد انتصرت بدون استخدامك للكمات او القنابل", "descriptionComplete": "لقد انتصرت بدون استخدامك للكمات او القنابل",
"descriptionFull": "بدون استخدام اللكمات أو القنابل ${LEVEL} فز في", "descriptionFull": "بدون استخدام اللكمات أو القنابل ${LEVEL} فز في",
"descriptionFullComplete": "بدون استخدام اللكمات أو القنابل ${LEVEL} لقد ربحت في", "descriptionFullComplete": "بدون استخدام اللكمات أو القنابل ${LEVEL} لقد ربحت في",
"name": "الأسلحة المخفية" "name": "حصلت على الحركات"
}, },
"In Control": { "In Control": {
"descriptionFull": "(قم بتوصيل جهاز تحكم (جهاز أو تطبيق", "descriptionFull": "(قم بتوصيل جهاز تحكم (جهاز أو تطبيق",
@ -136,7 +136,7 @@
"descriptionComplete": "!لقد سجلت 5000 نقطة", "descriptionComplete": "!لقد سجلت 5000 نقطة",
"descriptionFull": "${LEVEL} سجِّل 5000 نقطة في", "descriptionFull": "${LEVEL} سجِّل 5000 نقطة في",
"descriptionFullComplete": "${LEVEL} لقد سجَّلتَ 5000 نقطة في", "descriptionFullComplete": "${LEVEL} لقد سجَّلتَ 5000 نقطة في",
"name": "إله ${LEVEL}" "name": "زعيم ${LEVEL}"
}, },
"Onslaught Master": { "Onslaught Master": {
"description": "سجل 500 نقطة", "description": "سجل 500 نقطة",
@ -160,10 +160,10 @@
"name": "${LEVEL} ساحر" "name": "${LEVEL} ساحر"
}, },
"Precision Bombing": { "Precision Bombing": {
"description": "powerups فز بدون اي", "description": "فُزْ بدون اي قوى خارقة",
"descriptionComplete": "powerups لقد فزتَ بدون أي", "descriptionComplete": "لقد فزتَ بدون أي قوى خارقة",
"descriptionFull": "power-ups بدون اي ${LEVEL} فز في", "descriptionFull": "بدون اي قوى خارقة${LEVEL} فز في",
"descriptionFullComplete": "power-ups بدون اي ${LEVEL} لقد فزتَ في", "descriptionFullComplete": "بدون اي قوى خارقة${LEVEL} لقد فزتَ في",
"name": "دقة القصف" "name": "دقة القصف"
}, },
"Pro Boxer": { "Pro Boxer": {
@ -218,7 +218,7 @@
"Rookie Onslaught Victory": { "Rookie Onslaught Victory": {
"description": "هزيمة كل الجولات", "description": "هزيمة كل الجولات",
"descriptionComplete": "هزم كل الجولات", "descriptionComplete": "هزم كل الجولات",
"descriptionFull": "${LEVEL} اكسب كل الجولات في", "descriptionFull": "${LEVEL} اهزم كل الجولات في",
"descriptionFullComplete": "${LEVEL} هزم كل الجولات في", "descriptionFullComplete": "${LEVEL} هزم كل الجولات في",
"name": "${LEVEL} لقد انتصرت" "name": "${LEVEL} لقد انتصرت"
}, },
@ -250,9 +250,9 @@
}, },
"Stayin' Alive": { "Stayin' Alive": {
"description": "فز بدون أن تموت", "description": "فز بدون أن تموت",
"descriptionComplete": "فاز بدون أن يموت", "descriptionComplete": "لقد فُزت بدون ان تموت",
"descriptionFull": "بدون أن تموت ${LEVEL} فز", "descriptionFull": "بدون أن تموت ${LEVEL} فز",
"descriptionFullComplete": "بدون أن يموت ${LEVEL} فاز", "descriptionFullComplete": "بدون أن يموت ${LEVEL} لقد فزت",
"name": "البقاء حيا" "name": "البقاء حيا"
}, },
"Super Mega Punch": { "Super Mega Punch": {
@ -265,8 +265,8 @@
"Super Punch": { "Super Punch": {
"description": "إلحاق الضرر 50٪ بلكمة واحدة", "description": "إلحاق الضرر 50٪ بلكمة واحدة",
"descriptionComplete": "ألحق الضرر 50٪ بلكمة واحدة", "descriptionComplete": "ألحق الضرر 50٪ بلكمة واحدة",
"descriptionFull": "${LEVEL} إلحاق الضرر 50٪ بلكمة واحدة", "descriptionFull": "${LEVEL} إلحاق الضرر 50٪ بلكمة واحدة في",
"descriptionFullComplete": "${LEVEL} ألحق الضرر 50٪ بلكمة واحدة", "descriptionFullComplete": "${LEVEL} ألحق الضرر 50٪ بلكمة واحدة في",
"name": "لكمة خارقة" "name": "لكمة خارقة"
}, },
"TNT Terror": { "TNT Terror": {

View file

@ -1122,7 +1122,7 @@
"playlistsText": "列表", "playlistsText": "列表",
"pleaseRateText": "如果你喜欢 ${APP_NAME},请考虑花一点时间\n来评价一下它或为它写一篇评论。这将为我们提供\n有用的反馈建议为游戏的未来开发给予支持。\n\n感谢您\n-eric", "pleaseRateText": "如果你喜欢 ${APP_NAME},请考虑花一点时间\n来评价一下它或为它写一篇评论。这将为我们提供\n有用的反馈建议为游戏的未来开发给予支持。\n\n感谢您\n-eric",
"pleaseWaitText": "请稍等...", "pleaseWaitText": "请稍等...",
"pluginsDetectedText": "新的插件已经加载.请在设置中启用它们.", "pluginsDetectedText": "新插件安装成功,请重启游戏或在设置中设置它们~",
"pluginsText": "插件", "pluginsText": "插件",
"practiceText": "练习", "practiceText": "练习",
"pressAnyButtonPlayAgainText": "按任意按钮再玩一次...", "pressAnyButtonPlayAgainText": "按任意按钮再玩一次...",

View file

@ -720,14 +720,15 @@
"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.",
"inviteFriendsText": "Pozovi Prijatelje", "inviteFriendsText": "Pozovi Prijatelje",
"joinPublicPartyDescriptionText": "Pridruži se javnoj partiji:", "joinPublicPartyDescriptionText": "Pridruži se javnoj partiji",
"localNetworkDescriptionText": "Uključi se u partiju na tvojoj mreži:", "localNetworkDescriptionText": "Uđi u blisku partiju (Lan, Bluetooth, itd.)",
"localNetworkText": "Lokalna mreža", "localNetworkText": "Lokalna mreža",
"makePartyPrivateText": "Postavi moju partiju privatnom", "makePartyPrivateText": "Postavi moju partiju privatnom",
"makePartyPublicText": "Postavi moju partiju javnom", "makePartyPublicText": "Postavi moju partiju javnom",
"manualAddressText": "Adresa", "manualAddressText": "Adresa",
"manualConnectText": "Spoji se", "manualConnectText": "Spoji se",
"manualDescriptionText": "Uljuči se u partiju po adresi:", "manualDescriptionText": "Uljuči se u partiju po adresi:",
"manualJoinSectionText": "Uđi s Adresom",
"manualJoinableFromInternetText": "Mogu li se drugi priključiti tebi s Interneta?:", "manualJoinableFromInternetText": "Mogu li se drugi priključiti tebi s Interneta?:",
"manualJoinableNoWithAsteriskText": "NE*", "manualJoinableNoWithAsteriskText": "NE*",
"manualJoinableYesText": "DA", "manualJoinableYesText": "DA",
@ -735,14 +736,17 @@
"manualText": "Ručno", "manualText": "Ručno",
"manualYourAddressFromInternetText": "Tvoja adresa s Interneta:", "manualYourAddressFromInternetText": "Tvoja adresa s Interneta:",
"manualYourLocalAddressText": "Tvoja lokalna adresa:", "manualYourLocalAddressText": "Tvoja lokalna adresa:",
"nearbyText": "Blizu",
"noConnectionText": "<nema veze>", "noConnectionText": "<nema veze>",
"otherVersionsText": "(druge verzije)", "otherVersionsText": "(druge verzije)",
"partyCodeText": "Grupna šifra",
"partyInviteAcceptText": "Prihvati", "partyInviteAcceptText": "Prihvati",
"partyInviteDeclineText": "Odbij", "partyInviteDeclineText": "Odbij",
"partyInviteGooglePlayExtraText": "(pogledaj 'Google Play' karticu u prozoru 'Sakupi')", "partyInviteGooglePlayExtraText": "(pogledaj 'Google Play' karticu u prozoru 'Sakupi')",
"partyInviteIgnoreText": "Odbaci", "partyInviteIgnoreText": "Odbaci",
"partyInviteText": "${NAME} te pozvao\nda se priključiš njegovoj partiji!", "partyInviteText": "${NAME} te pozvao\nda se priključiš njegovoj partiji!",
"partyNameText": "Naziv igre", "partyNameText": "Naziv igre",
"partyServerRunningText": "Tvoj grupni server radi.",
"partySizeText": "Veličina žurke", "partySizeText": "Veličina žurke",
"partyStatusCheckingText": "provjeravam status...", "partyStatusCheckingText": "provjeravam status...",
"partyStatusJoinableText": "tvoja igra je spremna za povezivanje s interneta", "partyStatusJoinableText": "tvoja igra je spremna za povezivanje s interneta",
@ -751,11 +755,21 @@
"partyStatusNotPublicText": "tvoja igra nije javna", "partyStatusNotPublicText": "tvoja igra nije javna",
"pingText": "ping", "pingText": "ping",
"portText": "Port", "portText": "Port",
"privatePartyCloudDescriptionText": "Privatne grupe radu na posvećenim cloud serverima; Nikakvih ruter konfiguracija potrebno",
"privatePartyHostText": "Napravi privatnu grupu",
"privatePartyJoinText": "Uđi u privatnu grupu",
"privateText": "Privatno",
"publicHostRouterConfigText": "Za ovo možda bude trebalo konfiguriranje \"port-forwarding\"-a na vašem ruteru. Za lakšu opciju napravite privatnu grupu",
"publicText": "Javno",
"requestingAPromoCodeText": "Dohvaćam kod...", "requestingAPromoCodeText": "Dohvaćam kod...",
"sendDirectInvitesText": "Pošalji izravni poziv", "sendDirectInvitesText": "Pošalji izravni poziv",
"sendThisToAFriendText": "Posalji ovaj kod prijatelju:", "sendThisToAFriendText": "Posalji ovaj kod prijatelju:",
"shareThisCodeWithFriendsText": "Podijeli ovaj kod s prijateljima:", "shareThisCodeWithFriendsText": "Podijeli ovaj kod s prijateljima:",
"showMyAddressText": "Prikaži moju IP adresu", "showMyAddressText": "Prikaži moju IP adresu",
"startHostingPaidText": "Napravi sada za ${COST}",
"startHostingText": "Napravi",
"startStopHostingMinutesText": "Možeš početi i zaustaviti server besplatno za slijedećih ${MINUTES} minuta.",
"stopHostingText": "Prestani server",
"titleText": "Okupljanje", "titleText": "Okupljanje",
"wifiDirectDescriptionBottomText": "Ako svi uređaji imaju 'Wi-Fi Direct' opciju, trebali bi ga moći iskoristiti da pronađu jedan\ndrugoga i povežu se. Kad su svi uređaji povezani, možeš kreiratu igru\nkoristeći karticu 'Lokalna mreža', isto kao i kod obične Wi-Fi mreže. \n\nZa najbolje rezultate, domaćin Wi-Fi Directa također bi trebao biti domaćin ${APP_NAME} igre.", "wifiDirectDescriptionBottomText": "Ako svi uređaji imaju 'Wi-Fi Direct' opciju, trebali bi ga moći iskoristiti da pronađu jedan\ndrugoga i povežu se. Kad su svi uređaji povezani, možeš kreiratu igru\nkoristeći karticu 'Lokalna mreža', isto kao i kod obične Wi-Fi mreže. \n\nZa najbolje rezultate, domaćin Wi-Fi Directa također bi trebao biti domaćin ${APP_NAME} igre.",
"wifiDirectDescriptionTopText": "Wi-Fi Direct možete koristiti da povežete Android uređaje direktno bez \npotrebe za Wi-Fi mrežom. Ovo najbolje radi na Android verziji 4.2 ili novijoj. \n\nZa korištenje, otvori Wi-Fi postavke i potraži 'Wi-Fi Direct' u izborniku.", "wifiDirectDescriptionTopText": "Wi-Fi Direct možete koristiti da povežete Android uređaje direktno bez \npotrebe za Wi-Fi mrežom. Ovo najbolje radi na Android verziji 4.2 ili novijoj. \n\nZa korištenje, otvori Wi-Fi postavke i potraži 'Wi-Fi Direct' u izborniku.",
@ -813,6 +827,7 @@
"bombInfoText": "- Bomba -\nJača od udaraca, ali može rezultirati \nsamoubojstvom. Za najbolje \nrezultate, baci je prema neprijatelju \nprije nego što fitilj potpuno izgori.", "bombInfoText": "- Bomba -\nJača od udaraca, ali može rezultirati \nsamoubojstvom. Za najbolje \nrezultate, baci je prema neprijatelju \nprije nego što fitilj potpuno izgori.",
"canHelpText": "${APP_NAME} može pomoći.", "canHelpText": "${APP_NAME} može pomoći.",
"controllersInfoText": "Možeš igrati ${APP_NAME} s prijeteljima preko mreže, ili svi\nmožete igrati na istom uređaju ako imate dovoljno kontrolera. \n${APP_NAME} podržava razne kontrolere; čak možete koristiti telefone\nkao kontrolere pomoću besplatne '${REMOTE_APP_NAME}' aplikacije. \nZa više informacija pogledaj pod Postavke->Kontroleri.", "controllersInfoText": "Možeš igrati ${APP_NAME} s prijeteljima preko mreže, ili svi\nmožete igrati na istom uređaju ako imate dovoljno kontrolera. \n${APP_NAME} podržava razne kontrolere; čak možete koristiti telefone\nkao kontrolere pomoću besplatne '${REMOTE_APP_NAME}' aplikacije. \nZa više informacija pogledaj pod Postavke->Kontroleri.",
"controllersInfoTextRemoteOnly": "Možete igrati ${APP_NAME} sa prijateljima \nPreko wifi-a ili\npreko istog uređaju koristeći mobitele kao kontrolere pomoću besplatnom aplikacijom '${REMOTE_APP_NAME}'",
"controllersText": "Kontroleri", "controllersText": "Kontroleri",
"controlsSubtitleText": "Tvoj prijateljski ${APP_NAME} lik ima par osnovnih kretnji:", "controlsSubtitleText": "Tvoj prijateljski ${APP_NAME} lik ima par osnovnih kretnji:",
"controlsText": "Kontrole", "controlsText": "Kontrole",
@ -1051,6 +1066,7 @@
"offText": "Isključeno", "offText": "Isključeno",
"okText": "U redu", "okText": "U redu",
"onText": "Uključeno", "onText": "Uključeno",
"oneMomentText": "Jedan trenutak...",
"onslaughtRespawnText": "${PLAYER} će se ponovno pojaviti u naletu ${WAVE}", "onslaughtRespawnText": "${PLAYER} će se ponovno pojaviti u naletu ${WAVE}",
"orText": "${A} ili ${B}", "orText": "${A} ili ${B}",
"otherText": "Drugo...", "otherText": "Drugo...",
@ -1097,10 +1113,11 @@
"playerText": "Igrač", "playerText": "Igrač",
"playlistNoValidGamesErrorText": "Ova lista igara ne sadrži nijednu valjanu otključanu igru.", "playlistNoValidGamesErrorText": "Ova lista igara ne sadrži nijednu valjanu otključanu igru.",
"playlistNotFoundText": "lista igara nije pronađena", "playlistNotFoundText": "lista igara nije pronađena",
"playlistText": "Playlista",
"playlistsText": "Liste igara", "playlistsText": "Liste igara",
"pleaseRateText": "Ako ti se sviđa ${APP_NAME}, molim te razmisli o tome\nda ga ocijeniš ili napišeš recenziju.\nOvako šalješ korisnu povratnu informaciju koja pomaže u daljnjem razvoju.\n\nHvala!\n-eric", "pleaseRateText": "Ako ti se sviđa ${APP_NAME}, molim te razmisli o tome\nda ga ocijeniš ili napišeš recenziju.\nOvako šalješ korisnu povratnu informaciju koja pomaže u daljnjem razvoju.\n\nHvala!\n-eric",
"pleaseWaitText": "Molimo sačekajte...", "pleaseWaitText": "Molimo sačekajte...",
"pluginsDetectedText": "Novi dodatak(ci) detektiraju. Osposobi/konfiguriraj ih u postavkama.", "pluginsDetectedText": "Novi dodatak(ci) detektiran(i) Resetiraj da ih ukljućiš ili ih konfiguriraj u postavkima",
"pluginsText": "Dodatci", "pluginsText": "Dodatci",
"practiceText": "Vježba", "practiceText": "Vježba",
"pressAnyButtonPlayAgainText": "Pritisni bilo koju tipku za ponovnu igru...", "pressAnyButtonPlayAgainText": "Pritisni bilo koju tipku za ponovnu igru...",
@ -1496,6 +1513,7 @@
"Dutch": "Nizozemski", "Dutch": "Nizozemski",
"English": "Engleski", "English": "Engleski",
"Esperanto": "Esperanto", "Esperanto": "Esperanto",
"Filipino": "Filipinski",
"Finnish": "Finski", "Finnish": "Finski",
"French": "Francuski", "French": "Francuski",
"German": "Njemački", "German": "Njemački",
@ -1516,6 +1534,8 @@
"Slovak": "Slovački", "Slovak": "Slovački",
"Spanish": "Španjolski", "Spanish": "Španjolski",
"Swedish": "Švedski", "Swedish": "Švedski",
"Tamil": "Tamil",
"Thai": "tajlandski",
"Turkish": "Turski", "Turkish": "Turski",
"Ukrainian": "Ukrajinski", "Ukrainian": "Ukrajinski",
"Venetian": "Venecijanski", "Venetian": "Venecijanski",
@ -1564,6 +1584,7 @@
"Account linking successful!": "Povezivanje računa uspješno!", "Account linking successful!": "Povezivanje računa uspješno!",
"Account unlinking successful!": "Odspajanje računa uspješno!", "Account unlinking successful!": "Odspajanje računa uspješno!",
"Accounts are already linked.": "Računi su već povezani.", "Accounts are already linked.": "Računi su već povezani.",
"Ad view could not be verified.\nPlease be sure you are running an official and up-to-date version of the game.": "Prikaz oglasa se nije mogao provjeriti.\nMolim vas budite sigurni da koristite službenu i suvremenu verziju ove igre",
"An error has occurred; (${ERROR})": "Greška se pojavila; (${ERROR})", "An error has occurred; (${ERROR})": "Greška se pojavila; (${ERROR})",
"An error has occurred; please contact support. (${ERROR})": "Greška se pojavila; molimo vas pozovite pomoć. (${ERROR})", "An error has occurred; please contact support. (${ERROR})": "Greška se pojavila; molimo vas pozovite pomoć. (${ERROR})",
"An error has occurred; please contact support@froemling.net.": "Greška se pojavila; molim vas pozovite support@froemling.net.", "An error has occurred; please contact support@froemling.net.": "Greška se pojavila; molim vas pozovite support@froemling.net.",
@ -1589,6 +1610,7 @@
"Max number of profiles reached.": "Max broj dosegao profila.", "Max number of profiles reached.": "Max broj dosegao profila.",
"Maximum friend code rewards reached.": "Maksimalne nagrade od prijateljskih kodova dostignute.", "Maximum friend code rewards reached.": "Maksimalne nagrade od prijateljskih kodova dostignute.",
"Message is too long.": "Poruka je prevelika.", "Message is too long.": "Poruka je prevelika.",
"No servers are available. Please try again soon.": "Nema dostupnih servera. Pokušajte opet kasnije.",
"Profile \"${NAME}\" upgraded successfully.": "Profil \"${NAME}\" uspjesno upgrajdovan", "Profile \"${NAME}\" upgraded successfully.": "Profil \"${NAME}\" uspjesno upgrajdovan",
"Profile could not be upgraded.": "Profil se ne može ažurirati.", "Profile could not be upgraded.": "Profil se ne može ažurirati.",
"Purchase successful!": "Kupovina uspješna!", "Purchase successful!": "Kupovina uspješna!",
@ -1598,10 +1620,12 @@
"Sorry, this code has already been used.": "Izvini, ovaj kod je već iskorišćen.", "Sorry, this code has already been used.": "Izvini, ovaj kod je već iskorišćen.",
"Sorry, this code has expired.": "Izvini, ovaj kod je istekao.", "Sorry, this code has expired.": "Izvini, ovaj kod je istekao.",
"Sorry, this code only works for new accounts.": "Izvini, ovaj kod radi samo za nove igrače.", "Sorry, this code only works for new accounts.": "Izvini, ovaj kod radi samo za nove igrače.",
"Still searching for nearby servers; please try again soon.": "Još pretražuješ za bliske servere; pokušajte opet kasnije",
"Temporarily unavailable; please try again later.": "Privremeno nedostupno; molimo vas pokušajte kasnije.", "Temporarily unavailable; please try again later.": "Privremeno nedostupno; molimo vas pokušajte kasnije.",
"The tournament ended before you finished.": "Turnir je šio prije nego što si ti završio.", "The tournament ended before you finished.": "Turnir je šio prije nego što si ti završio.",
"This account cannot be unlinked for ${NUM} days.": "Ovaj se račun ne može odvezati ${NUM} dana.", "This account cannot be unlinked for ${NUM} days.": "Ovaj se račun ne može odvezati ${NUM} dana.",
"This code cannot be used on the account that created it.": "Ovaj kod se nemoze koristiti na akauntu koji je stvorio.", "This code cannot be used on the account that created it.": "Ovaj kod se nemoze koristiti na akauntu koji je stvorio.",
"This is currently unavailable; please try again later.": "Ovo je trenutačno nedostupno; pokušajte opet kasnije.",
"This requires version ${VERSION} or newer.": "Ovo zahtijeva verziju ${VERSION} ili noviju.", "This requires version ${VERSION} or newer.": "Ovo zahtijeva verziju ${VERSION} ili noviju.",
"Tournaments disabled due to rooted device.": "Turniri nedostupni zbog rootanog uređaja.", "Tournaments disabled due to rooted device.": "Turniri nedostupni zbog rootanog uređaja.",
"Tournaments require ${VERSION} or newer": "Turniri koriste ${VERSION} ili noviju", "Tournaments require ${VERSION} or newer": "Turniri koriste ${VERSION} ili noviju",

View file

@ -324,6 +324,7 @@
"achievementsRemainingText": "Achievements Remaining:", "achievementsRemainingText": "Achievements Remaining:",
"achievementsText": "Achievements", "achievementsText": "Achievements",
"achievementsUnavailableForOldSeasonsText": "Sorry, achievement specifics are not available for old seasons.", "achievementsUnavailableForOldSeasonsText": "Sorry, achievement specifics are not available for old seasons.",
"activatedText": "${THING} activated.",
"addGameWindow": { "addGameWindow": {
"getMoreGamesText": "Get More Games...", "getMoreGamesText": "Get More Games...",
"titleText": "Add Game" "titleText": "Add Game"
@ -1115,7 +1116,10 @@
"playlistsText": "Playlists", "playlistsText": "Playlists",
"pleaseRateText": "If you're enjoying ${APP_NAME}, please consider taking a\nmoment and rating it or writing a review. This provides\nuseful feedback and helps support future development.\n\nthanks!\n-eric", "pleaseRateText": "If you're enjoying ${APP_NAME}, please consider taking a\nmoment and rating it or writing a review. This provides\nuseful feedback and helps support future development.\n\nthanks!\n-eric",
"pleaseWaitText": "Please wait...", "pleaseWaitText": "Please wait...",
"pluginsDetectedText": "New plugin(s) detected. Enable/configure them in settings.", "pluginClassLoadErrorText": "Error loading plugin class '${PLUGIN}': ${ERROR}",
"pluginInitErrorText": "Error initing plugin '${PLUGIN}': ${ERROR}",
"pluginsDetectedText": "New plugin(s) detected. Restart to activate them, or configure them in settings.",
"pluginsRemovedText": "${NUM} plugin(s) no longer found.",
"pluginsText": "Plugins", "pluginsText": "Plugins",
"practiceText": "Practice", "practiceText": "Practice",
"pressAnyButtonPlayAgainText": "Press any button to play again...", "pressAnyButtonPlayAgainText": "Press any button to play again...",
@ -1851,6 +1855,8 @@
"winsPlayerText": "${NAME} Wins!", "winsPlayerText": "${NAME} Wins!",
"winsTeamText": "${NAME} Wins!", "winsTeamText": "${NAME} Wins!",
"winsText": "${NAME} Wins!", "winsText": "${NAME} Wins!",
"workspaceSyncErrorText": "Error syncing ${WORKSPACE}. See log for details.",
"workspaceSyncReuseText": "Can't sync ${WORKSPACE}. Reusing previous synced version.",
"worldScoresUnavailableText": "World scores unavailable.", "worldScoresUnavailableText": "World scores unavailable.",
"worldsBestScoresText": "World's Best Scores", "worldsBestScoresText": "World's Best Scores",
"worldsBestTimesText": "World's Best Times", "worldsBestTimesText": "World's Best Times",

View file

@ -211,14 +211,14 @@
"descriptionComplete": "Naipanalo ang laro", "descriptionComplete": "Naipanalo ang laro",
"descriptionFull": "Panalunin ang laro sa ${LEVEL}", "descriptionFull": "Panalunin ang laro sa ${LEVEL}",
"descriptionFullComplete": "Pinanalo ang laro sa ${LEVEL}", "descriptionFullComplete": "Pinanalo ang laro sa ${LEVEL}",
"name": "${LEVEL} Panalo" "name": "Nanalo sa ${LEVEL}"
}, },
"Rookie Onslaught Victory": { "Rookie Onslaught Victory": {
"description": "Italo lahat ang mga kaway", "description": "Italo lahat ang mga kaway",
"descriptionComplete": "Natalo lahat ang mga kaway", "descriptionComplete": "Natalo lahat ang mga kaway",
"descriptionFull": "Italo lahat ang mga kaway sa ${LEVEL}", "descriptionFull": "Italo lahat ang mga kaway sa ${LEVEL}",
"descriptionFullComplete": "Natalo lahat ng mga kaway sa ${LEVEL}", "descriptionFullComplete": "Natalo lahat ng mga kaway sa ${LEVEL}",
"name": "${LEVEL} Panalo" "name": "Nanalo sa ${LEVEL}"
}, },
"Runaround God": { "Runaround God": {
"description": "Maka-iskor ng 2000 na Puntos", "description": "Maka-iskor ng 2000 na Puntos",
@ -312,7 +312,7 @@
"descriptionComplete": "Natalo ang lahat na mga kaway", "descriptionComplete": "Natalo ang lahat na mga kaway",
"descriptionFull": "Talunin ang lahat na mga kaway sa ${LEVEL}", "descriptionFull": "Talunin ang lahat na mga kaway sa ${LEVEL}",
"descriptionFullComplete": "Natalo ang lahat na mga kaway sa ${LEVEL}", "descriptionFullComplete": "Natalo ang lahat na mga kaway sa ${LEVEL}",
"name": "${LEVEL} Panalo" "name": "Nanalo sa ${LEVEL}"
}, },
"Uber Runaround Victory": { "Uber Runaround Victory": {
"description": "Tapusin ang lahat na kaway", "description": "Tapusin ang lahat na kaway",
@ -1110,7 +1110,7 @@
"playlistsText": "Mga Playlist", "playlistsText": "Mga Playlist",
"pleaseRateText": "Kung nae-enjoy mo ang ${APP_NAME}, mangyaring isaalang-alang ang \npagkuha na sandali lang at i-rate ito o pagsulat ng isang pagsusuri. Nagbibigay ito ngkapaki-pakinabang na feedback at \ntumutulong sa pagsuporta sa pag-unlad sa hinaharap.\n\nsalamat!\n-eric", "pleaseRateText": "Kung nae-enjoy mo ang ${APP_NAME}, mangyaring isaalang-alang ang \npagkuha na sandali lang at i-rate ito o pagsulat ng isang pagsusuri. Nagbibigay ito ngkapaki-pakinabang na feedback at \ntumutulong sa pagsuporta sa pag-unlad sa hinaharap.\n\nsalamat!\n-eric",
"pleaseWaitText": "Hintay lang…", "pleaseWaitText": "Hintay lang…",
"pluginsDetectedText": "May nakitang bagong (mga) plugin. Paganahin/i-configure ang mga ito sa mga setting.", "pluginsDetectedText": "May nakitang bagong (mga) plugin. I-restart para i-activate ang mga ito, o i-configure ang mga ito sa mga setting.",
"pluginsText": "Mga Plugin", "pluginsText": "Mga Plugin",
"practiceText": "Pagsasagawa", "practiceText": "Pagsasagawa",
"pressAnyButtonPlayAgainText": "Pindutin ang anumang button para maglaro muli...", "pressAnyButtonPlayAgainText": "Pindutin ang anumang button para maglaro muli...",
@ -1801,13 +1801,13 @@
"votedAlreadyText": "Nakaboto ka na", "votedAlreadyText": "Nakaboto ka na",
"votesNeededText": "Kailangan ng ${NUMBER} (na) boto", "votesNeededText": "Kailangan ng ${NUMBER} (na) boto",
"vsText": "vs.", "vsText": "vs.",
"waitingForHostText": "(naghihintay para sa ${HOST} na magpatuloy)", "waitingForHostText": "(naghihintay para kay ${HOST} na magpatuloy)",
"waitingForPlayersText": "naghihintay ng mga manlalaro na sumali...", "waitingForPlayersText": "naghihintay ng mga manlalaro na sumali...",
"waitingInLineText": "Naghihintay sa pila (puno ang party)...", "waitingInLineText": "Naghihintay sa pila (puno ang party)...",
"watchAVideoText": "Manood ng Isang video", "watchAVideoText": "Manood ng Isang video",
"watchAnAdText": "Manood ng Ad", "watchAnAdText": "Manood ng Ad",
"watchWindow": { "watchWindow": {
"deleteConfirmText": "Tangalin \"${REPLAY}\"?", "deleteConfirmText": "Tangalin ang \"${REPLAY}\"?",
"deleteReplayButtonText": "Itanggal ang \nReplay", "deleteReplayButtonText": "Itanggal ang \nReplay",
"myReplaysText": "Ang Mga Replay Ko", "myReplaysText": "Ang Mga Replay Ko",
"noReplaySelectedErrorText": "Walang Napiling Replay", "noReplaySelectedErrorText": "Walang Napiling Replay",
@ -1825,7 +1825,7 @@
"watchReplayButtonText": "Ipanood ang\nReplay" "watchReplayButtonText": "Ipanood ang\nReplay"
}, },
"waveText": "Kaway", "waveText": "Kaway",
"wellSureText": "Oo syempre", "wellSureText": "Oo Syempre!",
"wiimoteLicenseWindow": { "wiimoteLicenseWindow": {
"titleText": "Copyright ni DarwiinRemote" "titleText": "Copyright ni DarwiinRemote"
}, },
@ -1839,10 +1839,10 @@
"listenText": "Makinig", "listenText": "Makinig",
"macInstructionsText": "Tiyaking naka-off ang iyong Wii at naka-enable ang Bluetooth\nsa iyong Mac, pagkatapos ay pindutin ang 'Makinig'. Maaari ang suporta ng Wiimote\nmaging medyo patumpik-tumpik, kaya maaaring kailanganin mong subukan ng ilang beses\nbago ka magkaroon ng koneksyon.\n\nDapat hawakan ng Bluetooth ang hanggang 7 konektadong device,\nkahit na ang iyong mileage ay maaaring mag-iba.\n\nSinusuportahan ng BombSquad ang orihinal na Wiimotes, Nunchuks,\nat ang Klasikong Controller.\nGumagana na rin ang mas bagong Wii Remote Plus\nngunit hindi sa mga kalakip.", "macInstructionsText": "Tiyaking naka-off ang iyong Wii at naka-enable ang Bluetooth\nsa iyong Mac, pagkatapos ay pindutin ang 'Makinig'. Maaari ang suporta ng Wiimote\nmaging medyo patumpik-tumpik, kaya maaaring kailanganin mong subukan ng ilang beses\nbago ka magkaroon ng koneksyon.\n\nDapat hawakan ng Bluetooth ang hanggang 7 konektadong device,\nkahit na ang iyong mileage ay maaaring mag-iba.\n\nSinusuportahan ng BombSquad ang orihinal na Wiimotes, Nunchuks,\nat ang Klasikong Controller.\nGumagana na rin ang mas bagong Wii Remote Plus\nngunit hindi sa mga kalakip.",
"thanksText": "Salamat sa DarwiinRemote team\nPara maging posible ito.", "thanksText": "Salamat sa DarwiinRemote team\nPara maging posible ito.",
"titleText": "Wiimote Setup" "titleText": "Pag-setup ng Wiimote"
}, },
"winsPlayerText": "${NAME} Nanalo!", "winsPlayerText": "Nanalo si ${NAME}!",
"winsTeamText": "${NAME} Nanalo!", "winsTeamText": "Nanalo ang ${NAME}!",
"winsText": "${NAME} Nanalo!", "winsText": "${NAME} Nanalo!",
"worldScoresUnavailableText": "Ang scores sa buong mundo ay hindi pa handa", "worldScoresUnavailableText": "Ang scores sa buong mundo ay hindi pa handa",
"worldsBestScoresText": "Pinakamahusay na Iskor ng Mundo", "worldsBestScoresText": "Pinakamahusay na Iskor ng Mundo",

View file

@ -1191,7 +1191,7 @@
"playlistsText": "Playlists", "playlistsText": "Playlists",
"pleaseRateText": "Wenn dir ${APP_NAME} Spaß macht, nimm dir kurz die Zeit\nund bewerte es oder schreib ein Review. Durch das Feedback\nwird zukünftige Arbeit an dem Spiel unterstützt.\n\nVielen Dank!\n-eric", "pleaseRateText": "Wenn dir ${APP_NAME} Spaß macht, nimm dir kurz die Zeit\nund bewerte es oder schreib ein Review. Durch das Feedback\nwird zukünftige Arbeit an dem Spiel unterstützt.\n\nVielen Dank!\n-eric",
"pleaseWaitText": "Bitte warte...", "pleaseWaitText": "Bitte warte...",
"pluginsDetectedText": "Neue Plugins erkannt. Aktivieren / konfigurieren Sie sie in den Einstellungen.", "pluginsDetectedText": "Neue Plugins erkannt. Neustarten, um sie zu aktivieren oder in den Einstellungen konfigurieren.",
"pluginsText": "Plugins", "pluginsText": "Plugins",
"practiceText": "Übung", "practiceText": "Übung",
"pressAnyButtonPlayAgainText": "Drücke einen Knopf um nochmal zu spielen...", "pressAnyButtonPlayAgainText": "Drücke einen Knopf um nochmal zu spielen...",

View file

@ -333,6 +333,7 @@
"achievementsRemainingText": "Azhiévemúnts Rzmáinzng:", "achievementsRemainingText": "Azhiévemúnts Rzmáinzng:",
"achievementsText": "Achéevúmentz", "achievementsText": "Achéevúmentz",
"achievementsUnavailableForOldSeasonsText": "Srrrz, chi faow co wjefo iwefo wef;oiajwf asodvjoa sdfj odfjsodf.", "achievementsUnavailableForOldSeasonsText": "Srrrz, chi faow co wjefo iwefo wef;oiajwf asodvjoa sdfj odfjsodf.",
"activatedText": "${THING} cjwoeifjwer.",
"addGameWindow": { "addGameWindow": {
"getMoreGamesText": "Gztz Mrrz Gmzz...", "getMoreGamesText": "Gztz Mrrz Gmzz...",
"titleText": "Ádzd Gámzé", "titleText": "Ádzd Gámzé",
@ -1196,7 +1197,10 @@
"playlistsText": "Plzlntsfs", "playlistsText": "Plzlntsfs",
"pleaseRateText": "If yóu're énjoyíng ${APP_NAME}, pléase cónsider táking z\nmúment ánd rúting zt ór wrúting í reváew. Thzs próvidzs\níseful fzédbíck ánd hélps súpport fútúre dévelópmént.\n\nthénkz!\n-eric", "pleaseRateText": "If yóu're énjoyíng ${APP_NAME}, pléase cónsider táking z\nmúment ánd rúting zt ór wrúting í reváew. Thzs próvidzs\níseful fzédbíck ánd hélps súpport fútúre dévelópmént.\n\nthénkz!\n-eric",
"pleaseWaitText": "Poke focwoe fjowef.", "pleaseWaitText": "Poke focwoe fjowef.",
"pluginsDetectedText": "Nz pweo woe dfowocewr. Enfwoc/cowefe thzm incowrdss.", "pluginClassLoadErrorText": "Erori cojflw cwoej woer erwe '${PLUGIN}': ${ERROR}",
"pluginInitErrorText": "Error cowejwoer plugins ${PLUGIN}: ${ERROR}",
"pluginsDetectedText": "Now cow rwoejcw. Wnewoiow rwepwot ghowcoweior weorjdfdfs.",
"pluginsRemovedText": "${NUM} powefjwj no legate fcwdf.",
"pluginsText": "Plfzlfez", "pluginsText": "Plfzlfez",
"practiceText": "Pcoifjzzz", "practiceText": "Pcoifjzzz",
"pressAnyButtonPlayAgainText": "Prézs ánz búttún tóz pláy agánz...", "pressAnyButtonPlayAgainText": "Prézs ánz búttún tóz pláy agánz...",
@ -1990,6 +1994,8 @@
"winsSingularText": "${NAME} WinzfjlzSS!", "winsSingularText": "${NAME} WinzfjlzSS!",
"winsTeamText": "${NAME} Wnttm!", "winsTeamText": "${NAME} Wnttm!",
"winsText": "${NAME} Wínsz!", "winsText": "${NAME} Wínsz!",
"workspaceSyncErrorText": "Eeror ocijo itself ${WORKSPACE}. See zoo crew tcowdf.",
"workspaceSyncReuseText": "Cnoiwj zoo ${WORKSPACE}. ROI cw cwoerpwer housers.",
"worldScoresUnavailableText": "Wrlzld scrzzl unvlfldsjbzl.", "worldScoresUnavailableText": "Wrlzld scrzzl unvlfldsjbzl.",
"worldsBestScoresText": "Wúrld's Bést Scórzs", "worldsBestScoresText": "Wúrld's Bést Scórzs",
"worldsBestTimesText": "Wúrld's Bzst Tímés", "worldsBestTimesText": "Wúrld's Bzst Tímés",

View file

@ -1162,7 +1162,7 @@
"playlistsText": "Scalette", "playlistsText": "Scalette",
"pleaseRateText": "Se ti sta piacendo ${APP_NAME}, prenditi\nun momento per valutarlo o scriverci su una recensione.\nQuesto aiuterà a supportare futuri sviluppi.\n\nGrazie!\n-eric", "pleaseRateText": "Se ti sta piacendo ${APP_NAME}, prenditi\nun momento per valutarlo o scriverci su una recensione.\nQuesto aiuterà a supportare futuri sviluppi.\n\nGrazie!\n-eric",
"pleaseWaitText": "Attendi...", "pleaseWaitText": "Attendi...",
"pluginsDetectedText": "Nuovo/i Plugin rilevato/i. Abilitali/configurali nelle impostazioni.", "pluginsDetectedText": "nuovo/i plugin rilevato. Riavvia per attivarli, o configurali nelle impostazioni.",
"pluginsText": "Plugin", "pluginsText": "Plugin",
"practiceText": "Allenamento", "practiceText": "Allenamento",
"pressAnyButtonPlayAgainText": "Premi un pulsante qualunque per rigiocare...", "pressAnyButtonPlayAgainText": "Premi un pulsante qualunque per rigiocare...",

View file

@ -1161,7 +1161,7 @@
"playlistsText": "Listy gier", "playlistsText": "Listy gier",
"pleaseRateText": "Jeśli polubiłeś ${APP_NAME}, proszę o poddanie go ocenie\nlub napisanie krótkiej recenzji. Pozwoli to zebrać przydatne\ninformacje, które pomogą wesprzeć rozwój gry w przyszłości.\n\nDziękuję!\n-Eric", "pleaseRateText": "Jeśli polubiłeś ${APP_NAME}, proszę o poddanie go ocenie\nlub napisanie krótkiej recenzji. Pozwoli to zebrać przydatne\ninformacje, które pomogą wesprzeć rozwój gry w przyszłości.\n\nDziękuję!\n-Eric",
"pleaseWaitText": "Czekaj chwilkę...", "pleaseWaitText": "Czekaj chwilkę...",
"pluginsDetectedText": "Nowe pluginy wykryte. Włącz/skonfiguruj je w ustawieniach.", "pluginsDetectedText": "Wykryto nowe pluginy. Uruchom ponownie grę, aby je aktywować, lub skonfiguruje je w ustawieniach.",
"pluginsText": "Pluginy", "pluginsText": "Pluginy",
"practiceText": "Praktyka", "practiceText": "Praktyka",
"pressAnyButtonPlayAgainText": "Naciśnij dowolny przycisk aby zagrać ponownie...", "pressAnyButtonPlayAgainText": "Naciśnij dowolny przycisk aby zagrać ponownie...",

View file

@ -1183,7 +1183,7 @@
"playlistsText": "Playlists", "playlistsText": "Playlists",
"pleaseRateText": "Se você está curtindo ${APP_NAME}, por favor, dê um tempinho\npara avaliar e comentar. Isso nos dá uma opinião útil\ne ajuda no desenvolvimento do jogo.\n\nobrigado!\n-eric", "pleaseRateText": "Se você está curtindo ${APP_NAME}, por favor, dê um tempinho\npara avaliar e comentar. Isso nos dá uma opinião útil\ne ajuda no desenvolvimento do jogo.\n\nobrigado!\n-eric",
"pleaseWaitText": "Por favor, aguarde...", "pleaseWaitText": "Por favor, aguarde...",
"pluginsDetectedText": "Novo(s) plugin(s) detected. Ative-os/configure-os em configurações.", "pluginsDetectedText": "Novo(s) plugin(s) detetados. Reinicie o jogo para ativá-los ou configure-os nas configurações.",
"pluginsText": "Plugins", "pluginsText": "Plugins",
"practiceText": "Praticar", "practiceText": "Praticar",
"pressAnyButtonPlayAgainText": "Aperte qualquer botão para jogar novamente...", "pressAnyButtonPlayAgainText": "Aperte qualquer botão para jogar novamente...",

File diff suppressed because it is too large Load diff

View file

@ -1166,7 +1166,7 @@
"playlistsText": "Плей-листы", "playlistsText": "Плей-листы",
"pleaseRateText": "Если вам нравится игра ${APP_NAME}, пожалуйста, подумайте о том,\nчтобы оценить ее или написать рецензию. Это обеспечивает полезную\nобратную связь и помогает поддержать дальнейшую разработку.\n\nСпасибо!\n- Эрик", "pleaseRateText": "Если вам нравится игра ${APP_NAME}, пожалуйста, подумайте о том,\nчтобы оценить ее или написать рецензию. Это обеспечивает полезную\nобратную связь и помогает поддержать дальнейшую разработку.\n\nСпасибо!\n- Эрик",
"pleaseWaitText": "Пожалуйста, подождите...", "pleaseWaitText": "Пожалуйста, подождите...",
"pluginsDetectedText": "Обнаружены новые плагины. Включите/настройте их в настройках.", "pluginsDetectedText": "Обнаружены новые плагины! Перезапустите игру, чтобы активировать их, или настройте их в настройках.",
"pluginsText": "Плагины", "pluginsText": "Плагины",
"practiceText": "Тренировка", "practiceText": "Тренировка",
"pressAnyButtonPlayAgainText": "Нажмите любую кнопку чтобы играть снова...", "pressAnyButtonPlayAgainText": "Нажмите любую кнопку чтобы играть снова...",

View file

@ -1178,7 +1178,7 @@
"playlistsText": "Listas de Juego", "playlistsText": "Listas de Juego",
"pleaseRateText": "Si te gusta ${APP_NAME}, por favor tomate un momento\npara calificar o escribir una reseña. Esto proporcionará\ninformación útil y ayuda al soporte del futuro desarrollo del juego.\n\n¡gracias!\n-eric", "pleaseRateText": "Si te gusta ${APP_NAME}, por favor tomate un momento\npara calificar o escribir una reseña. Esto proporcionará\ninformación útil y ayuda al soporte del futuro desarrollo del juego.\n\n¡gracias!\n-eric",
"pleaseWaitText": "Por favor, espera...", "pleaseWaitText": "Por favor, espera...",
"pluginsDetectedText": "Nuevos plugin(s) detectados. Activar/configurarlos en los ajustes.", "pluginsDetectedText": "Nuevos complemento(s) detectados. Reinicie para activarlos, o configúrelos en la configuración",
"pluginsText": "Plugins", "pluginsText": "Plugins",
"practiceText": "Práctica", "practiceText": "Práctica",
"pressAnyButtonPlayAgainText": "Oprime cualquier botón jugar de nuevo...", "pressAnyButtonPlayAgainText": "Oprime cualquier botón jugar de nuevo...",

View file

@ -1043,7 +1043,7 @@
"noExternalStorageErrorText": "இந்தச் சாதனத்தில் வெளிப்புறச் சேமிப்பு இல்லை", "noExternalStorageErrorText": "இந்தச் சாதனத்தில் வெளிப்புறச் சேமிப்பு இல்லை",
"noGameCircleText": "பிழை: GameCircle இல் உள்நுழையவில்லை", "noGameCircleText": "பிழை: GameCircle இல் உள்நுழையவில்லை",
"noScoresYetText": "இன்னும் மதிப்பெண்கள் இல்லை.", "noScoresYetText": "இன்னும் மதிப்பெண்கள் இல்லை.",
"noThanksText": "இல்லை நன்றி", "noThanksText": "இல்லை, நன்றி!",
"noTournamentsInTestBuildText": "எச்சரிக்கை: இந்த சோதனை உருவாக்கத்தில் இருந்து போட்டியின் மதிப்பெண்கள் புறக்கணிக்கப்படும்.", "noTournamentsInTestBuildText": "எச்சரிக்கை: இந்த சோதனை உருவாக்கத்தில் இருந்து போட்டியின் மதிப்பெண்கள் புறக்கணிக்கப்படும்.",
"noValidMapsErrorText": "இந்த விளையாட்டு வகைக்கு சரியான வரைபடங்கள் இல்லை.", "noValidMapsErrorText": "இந்த விளையாட்டு வகைக்கு சரியான வரைபடங்கள் இல்லை.",
"notEnoughPlayersRemainingText": "போதுமான வீரர்கள் மீதமில்லை; வெளியேறி ஒரு புதிய விளையாட்டைத் தொடங்கவும்.", "notEnoughPlayersRemainingText": "போதுமான வீரர்கள் மீதமில்லை; வெளியேறி ஒரு புதிய விளையாட்டைத் தொடங்கவும்.",
@ -1108,7 +1108,7 @@
"playlistsText": "பிளேலிஸ்ட்கள்", "playlistsText": "பிளேலிஸ்ட்கள்",
"pleaseRateText": "நீங்கள் ${APP_NAME} ஐ அனுபவிக்கிறீர்கள் என்றால், தயவுசெய்து எடுப்பதைக் கவனியுங்கள்\nதருணம் மற்றும் மதிப்பிடுதல் அல்லது விமர்சனம் எழுதுதல். இது வழங்குகிறது\nபயனுள்ள கருத்து மற்றும் எதிர்கால வளர்ச்சிக்கு உதவுகிறது.\n\nநன்றி!\n-எரிக்", "pleaseRateText": "நீங்கள் ${APP_NAME} ஐ அனுபவிக்கிறீர்கள் என்றால், தயவுசெய்து எடுப்பதைக் கவனியுங்கள்\nதருணம் மற்றும் மதிப்பிடுதல் அல்லது விமர்சனம் எழுதுதல். இது வழங்குகிறது\nபயனுள்ள கருத்து மற்றும் எதிர்கால வளர்ச்சிக்கு உதவுகிறது.\n\nநன்றி!\n-எரிக்",
"pleaseWaitText": "தயவுசெய்து காத்திருங்கள்...", "pleaseWaitText": "தயவுசெய்து காத்திருங்கள்...",
"pluginsDetectedText": "புதிய செருகுநிரல் (கள்) கண்டறியப்பட்டது. அமைப்புகளில் அவற்றை இயக்கவும்/கட்டமைக்கவும்.", "pluginsDetectedText": "புதிய செருகுநிரல்(கள்) கண்டறியப்பட்டது. அவற்றைச் செயல்படுத்த மீண்டும் தொடங்கவும் அல்லது அமைப்புகளில் உள்ளமைக்கவும்.",
"pluginsText": "செருகுநிரல்கள்", "pluginsText": "செருகுநிரல்கள்",
"practiceText": "பயிற்சி", "practiceText": "பயிற்சி",
"pressAnyButtonPlayAgainText": "மீண்டும் விளையாட எந்த பட்டனையும் அழுத்தவும்...", "pressAnyButtonPlayAgainText": "மீண்டும் விளையாட எந்த பட்டனையும் அழுத்தவும்...",
@ -1304,7 +1304,7 @@
"iconsText": "சின்னங்கள்", "iconsText": "சின்னங்கள்",
"loadErrorText": "பக்கத்தை ஏற்ற முடியவில்லை.\nஉங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்.", "loadErrorText": "பக்கத்தை ஏற்ற முடியவில்லை.\nஉங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்.",
"loadingText": "ஏற்றுகிறது", "loadingText": "ஏற்றுகிறது",
"mapsText": "Maps", "mapsText": "வரைபடங்கள்",
"miniGamesText": "மினிகேம்ஸ்", "miniGamesText": "மினிகேம்ஸ்",
"oneTimeOnlyText": "(ஒரு முறை மட்டும்)", "oneTimeOnlyText": "(ஒரு முறை மட்டும்)",
"purchaseAlreadyInProgressText": "இந்த பொருளை வாங்குவது ஏற்கனவே நடந்து கொண்டிருக்கிறது.", "purchaseAlreadyInProgressText": "இந்த பொருளை வாங்குவது ஏற்கனவே நடந்து கொண்டிருக்கிறது.",
@ -1361,11 +1361,11 @@
"tournamentStandingsText": "போட்டி நிலைகள்", "tournamentStandingsText": "போட்டி நிலைகள்",
"tournamentText": "போட்டி", "tournamentText": "போட்டி",
"tournamentTimeExpiredText": "போட்டி நேரம் காலாவதியானது", "tournamentTimeExpiredText": "போட்டி நேரம் காலாவதியானது",
"tournamentsText": "Tournaments", "tournamentsText": "போட்டிகள்",
"translations": { "translations": {
"characterNames": { "characterNames": {
"Agent Johnson": "ஏஜெண்ட் ஜான்சன்", "Agent Johnson": "ஏஜெண்ட் ஜான்சன்",
"B-9000": "B-9000", "B-9000": "பி-9000",
"Bernard": "பர்னார்ட்", "Bernard": "பர்னார்ட்",
"Bones": "போன்ஸ்", "Bones": "போன்ஸ்",
"Butch": "பட்ச்", "Butch": "பட்ச்",
@ -1526,7 +1526,7 @@
"Thai": "தாய்", "Thai": "தாய்",
"Turkish": "டர்கிஷ்", "Turkish": "டர்கிஷ்",
"Ukrainian": "உக்ரைனியன்", "Ukrainian": "உக்ரைனியன்",
"Venetian": "வெநெடியன்", "Venetian": "வெனிசியன்",
"Vietnamese": "வியெட்னமீஸ்" "Vietnamese": "வியெட்னமீஸ்"
}, },
"leagueNames": { "leagueNames": {
@ -1536,7 +1536,7 @@
"Silver": "வெள்ளி" "Silver": "வெள்ளி"
}, },
"mapsNames": { "mapsNames": {
"Big G": "Big G", "Big G": "பிக் சி",
"Bridgit": "பிரிட்சிட்", "Bridgit": "பிரிட்சிட்",
"Courtyard": "கோர்ட்யார்ட்", "Courtyard": "கோர்ட்யார்ட்",
"Crag Castle": "கிரக் கோட்டை", "Crag Castle": "கிரக் கோட்டை",
@ -1689,7 +1689,7 @@
}, },
"tips": { "tips": {
"A perfectly timed running-jumping-spin-punch can kill in a single hit\nand earn you lifelong respect from your friends.": "ஒரு சரியான நேர ஓட்டம்-ஜம்பிங்-ஸ்பின்-பஞ்ச் ஒரே வெற்றியில் கொல்லலாம்\nமற்றும் உங்கள் நண்பர்களிடமிருந்து உங்களுக்கு வாழ்நாள் முழுவதும் மரியாதை கிடைக்கும்.", "A perfectly timed running-jumping-spin-punch can kill in a single hit\nand earn you lifelong respect from your friends.": "ஒரு சரியான நேர ஓட்டம்-ஜம்பிங்-ஸ்பின்-பஞ்ச் ஒரே வெற்றியில் கொல்லலாம்\nமற்றும் உங்கள் நண்பர்களிடமிருந்து உங்களுக்கு வாழ்நாள் முழுவதும் மரியாதை கிடைக்கும்.",
"Always remember to floss.": "எப்போதும் floss செய்ய நினைவில் கொள்ளுங்கள்.", "Always remember to floss.": "எப்போதும் ஃப்ளோஸ் செய்ய நினைவில் கொள்ளுங்கள்.",
"Create player profiles for yourself and your friends with\nyour preferred names and appearances instead of using random ones.": "உங்களுக்கும் உங்கள் நண்பர்களுக்கும் பிளேயர் சுயவிவரங்களை உருவாக்கவும்\nசீரற்றவற்றைப் பயன்படுத்துவதற்குப் பதிலாக உங்கள் விருப்பமான பெயர்கள் மற்றும் தோற்றங்கள்.", "Create player profiles for yourself and your friends with\nyour preferred names and appearances instead of using random ones.": "உங்களுக்கும் உங்கள் நண்பர்களுக்கும் பிளேயர் சுயவிவரங்களை உருவாக்கவும்\nசீரற்றவற்றைப் பயன்படுத்துவதற்குப் பதிலாக உங்கள் விருப்பமான பெயர்கள் மற்றும் தோற்றங்கள்.",
"Curse boxes turn you into a ticking time bomb.\nThe only cure is to quickly grab a health-pack.": "சாபப் பெட்டிகள் உங்களை ஒரு டிக்கிங் டைம் பாம்டாக மாற்றும்.\nஒரே ஒரு ஹெல்த் பேக் சீக்கிரம் பிடிப்பதுதான்.", "Curse boxes turn you into a ticking time bomb.\nThe only cure is to quickly grab a health-pack.": "சாபப் பெட்டிகள் உங்களை ஒரு டிக்கிங் டைம் பாம்டாக மாற்றும்.\nஒரே ஒரு ஹெல்த் பேக் சீக்கிரம் பிடிப்பதுதான்.",
"Despite their looks, all characters' abilities are identical,\nso just pick whichever one you most closely resemble.": "அவற்றின் தோற்றம் இருந்தபோதிலும், அனைத்து கதாபாத்திரங்களின் திறன்களும் ஒரே மாதிரியானவை,\nஎனவே நீங்கள் மிகவும் நெருக்கமாக ஒத்திருப்பதைத் தேர்ந்தெடுக்கவும்.", "Despite their looks, all characters' abilities are identical,\nso just pick whichever one you most closely resemble.": "அவற்றின் தோற்றம் இருந்தபோதிலும், அனைத்து கதாபாத்திரங்களின் திறன்களும் ஒரே மாதிரியானவை,\nஎனவே நீங்கள் மிகவும் நெருக்கமாக ஒத்திருப்பதைத் தேர்ந்தெடுக்கவும்.",
@ -1750,7 +1750,7 @@
"phrase08Text": "இப்போது அதிக வேகத்தைப் பெற குதித்து சுழலலாம்.", "phrase08Text": "இப்போது அதிக வேகத்தைப் பெற குதித்து சுழலலாம்.",
"phrase09Text": "ஆ, அது சிறந்தது.", "phrase09Text": "ஆ, அது சிறந்தது.",
"phrase10Text": "ஓடுவதும் உதவுகிறது.", "phrase10Text": "ஓடுவதும் உதவுகிறது.",
"phrase11Text": "இயக்க எந்த பொத்தானையும் அழுத்திப் பிடிக்கவும்.", "phrase11Text": "இயக்க எந்த பட்டனையும் அழுத்திப் பிடிக்கவும்.",
"phrase12Text": "கூடுதல் அற்புதமான குத்துகளுக்கு, ஓடவும் சுழலவும் முயற்சிக்கவும்.", "phrase12Text": "கூடுதல் அற்புதமான குத்துகளுக்கு, ஓடவும் சுழலவும் முயற்சிக்கவும்.",
"phrase13Text": "அச்சச்சோ; ${NAME} பற்றி மன்னிக்கவும்.", "phrase13Text": "அச்சச்சோ; ${NAME} பற்றி மன்னிக்கவும்.",
"phrase14Text": "கொடிகள் .. அல்லது ${NAME} போன்றவற்றை எடுத்து எறியலாம்.", "phrase14Text": "கொடிகள் .. அல்லது ${NAME} போன்றவற்றை எடுத்து எறியலாம்.",
@ -1761,11 +1761,11 @@
"phrase19Text": "குதிப்பது உயரத்தை எறிய உதவுகிறது.", "phrase19Text": "குதிப்பது உயரத்தை எறிய உதவுகிறது.",
"phrase20Text": "உங்கள் குண்டுகளை இன்னும் நீண்ட தூரத்திற்கு \"சவுக்கடி\".", "phrase20Text": "உங்கள் குண்டுகளை இன்னும் நீண்ட தூரத்திற்கு \"சவுக்கடி\".",
"phrase21Text": "உங்கள் குண்டுகளை டைமிங் செய்வது தந்திரமானதாக இருக்கலாம்.", "phrase21Text": "உங்கள் குண்டுகளை டைமிங் செய்வது தந்திரமானதாக இருக்கலாம்.",
"phrase22Text": "Dang.", "phrase22Text": "அச்சச்சோ.",
"phrase23Text": "ஒன்றிரண்டு அல்லது இரண்டு நிமிடங்களுக்கு உருகி \"Cooking off\" முயற்சிக்கவும்.", "phrase23Text": "ஒன்றிரண்டு அல்லது இரண்டு நிமிடங்களுக்கு உருகி \"Cooking off\" முயற்சிக்கவும்.",
"phrase24Text": "ஹூரே! நன்றாக போடப்பட்டது", "phrase24Text": "ஹூரே! நன்றாக போடப்பட்டது",
"phrase25Text": "சரி, அது பற்றி தான்.", "phrase25Text": "சரி, அது பற்றி தான்.",
"phrase26Text": "இப்போது அவர்களைப் போய் புலி!", "phrase26Text": "இப்போது அவர்களைப் போய் புடி புலியே!",
"phrase27Text": "உங்கள் பயிற்சியை நினைவில் கொள்ளுங்கள், நீங்கள் உயிருடன் திரும்பி வருவீர்கள்!", "phrase27Text": "உங்கள் பயிற்சியை நினைவில் கொள்ளுங்கள், நீங்கள் உயிருடன் திரும்பி வருவீர்கள்!",
"phrase28Text": "...நன்று,இருக்கலாம்...", "phrase28Text": "...நன்று,இருக்கலாம்...",
"phrase29Text": "நல்ல அதிர்ஷ்டம்!", "phrase29Text": "நல்ல அதிர்ஷ்டம்!",

View file

@ -216,7 +216,7 @@
}, },
"Rookie Onslaught Victory": { "Rookie Onslaught Victory": {
"description": "Tüm dalgaları kazan", "description": "Tüm dalgaları kazan",
"descriptionComplete": "Tüm dalgalar kazanıldı", "descriptionComplete": "Tüm dalgaları kazan",
"descriptionFull": "${LEVEL} da tüm dalgaları kazan", "descriptionFull": "${LEVEL} da tüm dalgaları kazan",
"descriptionFullComplete": "${LEVEL} da tüm dalgalar kazanıldı", "descriptionFullComplete": "${LEVEL} da tüm dalgalar kazanıldı",
"name": "${LEVEL} Galibiyeti" "name": "${LEVEL} Galibiyeti"
@ -226,7 +226,7 @@
"descriptionComplete": "2000 puan kazanıldı", "descriptionComplete": "2000 puan kazanıldı",
"descriptionFull": "${LEVEL} da 2000 puan kazan", "descriptionFull": "${LEVEL} da 2000 puan kazan",
"descriptionFullComplete": "${LEVEL} da 2000 puan kazanıldı", "descriptionFullComplete": "${LEVEL} da 2000 puan kazanıldı",
"name": "${LEVEL} Tanrısı" "name": "${LEVEL} Tanrı"
}, },
"Runaround Master": { "Runaround Master": {
"description": "500 puan kazan", "description": "500 puan kazan",
@ -237,7 +237,7 @@
}, },
"Runaround Wizard": { "Runaround Wizard": {
"description": "1000 puan kazan", "description": "1000 puan kazan",
"descriptionComplete": "1000 puan kazanıldı", "descriptionComplete": "1000 puan kazan",
"descriptionFull": "${LEVEL} da 1000 puan kazan", "descriptionFull": "${LEVEL} da 1000 puan kazan",
"descriptionFullComplete": "${LEVEL} da 1000 puan kazanıldı", "descriptionFullComplete": "${LEVEL} da 1000 puan kazanıldı",
"name": "${LEVEL} Büyücüsü" "name": "${LEVEL} Büyücüsü"
@ -249,7 +249,7 @@
}, },
"Stayin' Alive": { "Stayin' Alive": {
"description": "Hiç ölmeden Kazan", "description": "Hiç ölmeden Kazan",
"descriptionComplete": "Hiç ölmeden kazanıldı", "descriptionComplete": "Hiç ölmeden kazan",
"descriptionFull": "Hiç ölmeden ${LEVEL} da kazan", "descriptionFull": "Hiç ölmeden ${LEVEL} da kazan",
"descriptionFullComplete": "Hiç ölmeden ${LEVEL} da kazanıldı", "descriptionFullComplete": "Hiç ölmeden ${LEVEL} da kazanıldı",
"name": "Hayatta Kal" "name": "Hayatta Kal"
@ -259,7 +259,7 @@
"descriptionComplete": "Tek yumruk ile %100 hasar verildi", "descriptionComplete": "Tek yumruk ile %100 hasar verildi",
"descriptionFull": "${LEVEL} da tek yumruk ile %100 hasar ver", "descriptionFull": "${LEVEL} da tek yumruk ile %100 hasar ver",
"descriptionFullComplete": "${LEVEL} da tek yumruk ile %100 hasar verildi", "descriptionFullComplete": "${LEVEL} da tek yumruk ile %100 hasar verildi",
"name": "Super Mega Yumruk" "name": "Süper Mega Yumruk"
}, },
"Super Punch": { "Super Punch": {
"description": "Tek yumruk ile %50 hasar ver", "description": "Tek yumruk ile %50 hasar ver",
@ -277,19 +277,19 @@
}, },
"Team Player": { "Team Player": {
"descriptionFull": "4+ oyuncu ile bir Takımlar oyunu başlat", "descriptionFull": "4+ oyuncu ile bir Takımlar oyunu başlat",
"descriptionFullComplete": "4+ oyuncu ile bir Takımlar oyunu başlatıldı", "descriptionFullComplete": "4+ oyuncu ile bir Takım oyunu başlat",
"name": "Takım Oyuncusu" "name": "Takım Oyuncusu"
}, },
"The Great Wall": { "The Great Wall": {
"description": "Bütün haylazları durdur", "description": "Bütün haylazları durdur",
"descriptionComplete": "Bütün haylazlar durduruldu", "descriptionComplete": "Bütün haylazları durdur",
"descriptionFull": "${LEVEL} da bütün haylazları durdur", "descriptionFull": "${LEVEL} da bütün haylazları durdur",
"descriptionFullComplete": "${LEVEL} da bütün haylazlar durduruldu", "descriptionFullComplete": "${LEVEL} da bütün haylazlar durduruldu",
"name": "Muhteşem Bariyer" "name": "Muhteşem Bariyer"
}, },
"The Wall": { "The Wall": {
"description": "Bütün haylazları durdur", "description": "Bütün haylazları durdur",
"descriptionComplete": "Bütün haylazlar durduruldu", "descriptionComplete": "Bütün haylazları durdur",
"descriptionFull": "${LEVEL} da bütün haylazları durdur", "descriptionFull": "${LEVEL} da bütün haylazları durdur",
"descriptionFullComplete": "${LEVEL} da bütün haylazlar durduruldu", "descriptionFullComplete": "${LEVEL} da bütün haylazlar durduruldu",
"name": "Bariyer" "name": "Bariyer"
@ -320,7 +320,7 @@
"descriptionComplete": "Tüm dalgalar tamamlandı", "descriptionComplete": "Tüm dalgalar tamamlandı",
"descriptionFull": "${LEVEL} da tüm dalgaları tamamla", "descriptionFull": "${LEVEL} da tüm dalgaları tamamla",
"descriptionFullComplete": "${LEVEL} da tüm dalgalar tamamlandı", "descriptionFullComplete": "${LEVEL} da tüm dalgalar tamamlandı",
"name": "${LEVEL} Galibiyeti" "name": "${LEVEL} Galibiyet"
} }
}, },
"achievementsRemainingText": "Kalan Başarılar;", "achievementsRemainingText": "Kalan Başarılar;",
@ -353,14 +353,14 @@
"bombBoldText": "BOMBA", "bombBoldText": "BOMBA",
"bombText": "Bomba", "bombText": "Bomba",
"boostText": "Öne Geç", "boostText": "Öne Geç",
"bsRemoteConfigureInAppText": "${REMOTE_APP_NAME} Uygulaması kendisini yapılandırdı", "bsRemoteConfigureInAppText": "${REMOTE_APP_NAME} Uygulamayı kendisine yapılandır",
"buttonText": "buton", "buttonText": "buton",
"canWeDebugText": "Oyun otomatik olarak hataları, çökmeleri ve basit \nkullanım istatistiklerini geliştiriciye gondersin mi?\n\nBu veri içeriği kişisel bilgilerinizi kullanmaz\noyunun daha iyi çalışmasına yardımcı olur.", "canWeDebugText": "Oyun otomatik olarak hataları, çökmeleri ve basit \nkullanım istatistiklerini geliştiriciye gondersin mi?\n\nBu veri içeriği kişisel bilgilerinizi kullanmaz\noyunun daha iyi çalışmasına yardımcı olur.",
"cancelText": "İptal", "cancelText": "İptal",
"cantConfigureDeviceText": "Üzgünüz, ${DEVICE} ayarlanabilir değil.", "cantConfigureDeviceText": "Üzgünüz, ${DEVICE} ayarlanabilir değil.",
"challengeEndedText": "Bu mücadele sona erdi.", "challengeEndedText": "Bu mücadele sona erdi.",
"chatMuteText": "Konuşmayı sustur", "chatMuteText": "Konuşmayı sustur",
"chatMutedText": "Konuşma Susturuldu", "chatMutedText": "Sohbet Susturuldu",
"chatUnMuteText": "Konuşmayı aç", "chatUnMuteText": "Konuşmayı aç",
"choosingPlayerText": "<oyuncu seçme>", "choosingPlayerText": "<oyuncu seçme>",
"completeThisLevelToProceedText": "İlerlemek için bu \nseviyeyi tamamlamalısınız!", "completeThisLevelToProceedText": "İlerlemek için bu \nseviyeyi tamamlamalısınız!",
@ -438,7 +438,7 @@
"movementControlScaleText": "Hareket Kontrolü Ölçeği", "movementControlScaleText": "Hareket Kontrolü Ölçeği",
"movementText": "Hareket", "movementText": "Hareket",
"resetText": "Sıfırla", "resetText": "Sıfırla",
"swipeControlsHiddenText": "Sürme Simgelerini Gizle", "swipeControlsHiddenText": "Joystick'i gizle",
"swipeInfoText": "\"Sürme\" kontrol stilleri kullanışlıdır fakat\nkontrollere bakmadan oynamak daha kolaydır.", "swipeInfoText": "\"Sürme\" kontrol stilleri kullanışlıdır fakat\nkontrollere bakmadan oynamak daha kolaydır.",
"swipeText": "sürme", "swipeText": "sürme",
"titleText": "Dokunmatikleri Yapılandır" "titleText": "Dokunmatikleri Yapılandır"
@ -1108,7 +1108,7 @@
"playlistsText": "ÇalmaListesi", "playlistsText": "ÇalmaListesi",
"pleaseRateText": "Eğer ${APP_NAME}'dan zevk aldıysan, lütfen oyunu değerlerdir\nve yorumunu yaz. Bu oyunun daha fazla geliştirilmesine\nyardımcı olur.\n\nteşekkürler!\n-eric", "pleaseRateText": "Eğer ${APP_NAME}'dan zevk aldıysan, lütfen oyunu değerlerdir\nve yorumunu yaz. Bu oyunun daha fazla geliştirilmesine\nyardımcı olur.\n\nteşekkürler!\n-eric",
"pleaseWaitText": "Lütfen bekle...", "pleaseWaitText": "Lütfen bekle...",
"pluginsDetectedText": "Yeni eklenti(ler) tespit edildi. Bunları ayarlardan etkinleştirin / yapılandırın.", "pluginsDetectedText": "Yeni eklentiler tespit edildi. Onları etkinleştirmek veya ayarlarda yapılandırmak için oyunu yeniden başlatın.",
"pluginsText": "Eklentiler", "pluginsText": "Eklentiler",
"practiceText": "Alıştırma", "practiceText": "Alıştırma",
"pressAnyButtonPlayAgainText": "Tekrar oynamak için bir tuşa basın...", "pressAnyButtonPlayAgainText": "Tekrar oynamak için bir tuşa basın...",

View file

@ -1105,7 +1105,7 @@
"playlistsText": "Łiste de zugo", "playlistsText": "Łiste de zugo",
"pleaseRateText": "Se ${APP_NAME} el ze drio piazerte, tote un àtemo par\nłasarghe zó na vałudasion o scrìvarghe zó un comento. 'Ste\nopinion łe tornarà còmode par dezviłupi fuduri de'l zugo.\n\ngrasie!\n-eric", "pleaseRateText": "Se ${APP_NAME} el ze drio piazerte, tote un àtemo par\nłasarghe zó na vałudasion o scrìvarghe zó un comento. 'Ste\nopinion łe tornarà còmode par dezviłupi fuduri de'l zugo.\n\ngrasie!\n-eric",
"pleaseWaitText": "Speta n'àtemo...", "pleaseWaitText": "Speta n'àtemo...",
"pluginsDetectedText": "Estension nove rełevàe. Atìvełe/configùrełe inte łe inpostasion.", "pluginsDetectedText": "Estension nove rełevàe. Retaca el zugo par ativarle, o configùrełe so łe inpostasion.",
"pluginsText": "Estension", "pluginsText": "Estension",
"practiceText": "Pràtega", "practiceText": "Pràtega",
"pressAnyButtonPlayAgainText": "Struca un boton calsìase par zugar danovo...", "pressAnyButtonPlayAgainText": "Struca un boton calsìase par zugar danovo...",

View file

@ -74,7 +74,7 @@ class AccountV1Subsystem:
def get_league_rank_points(self, def get_league_rank_points(self,
data: dict[str, Any] | None, data: dict[str, Any] | None,
subset: str = None) -> int: subset: str | None = None) -> int:
"""(internal)""" """(internal)"""
if data is None: if data is None:
return 0 return 0

View file

@ -610,8 +610,8 @@ class Achievement:
x: float, x: float,
y: float, y: float,
delay: float, delay: float,
outdelay: float = None, outdelay: float | None = None,
color: Sequence[float] = None, color: Sequence[float] | None = None,
style: str = 'post_game') -> list[ba.Actor]: style: str = 'post_game') -> list[ba.Actor]:
"""Create a display for the Achievement. """Create a display for the Achievement.

View file

@ -53,14 +53,15 @@ class AdsSubsystem:
def show_ad(self, def show_ad(self,
purpose: str, purpose: str,
on_completion_call: Callable[[], Any] = None) -> None: on_completion_call: Callable[[], Any] | None = None) -> None:
"""(internal)""" """(internal)"""
self.last_ad_purpose = purpose self.last_ad_purpose = purpose
_ba.show_ad(purpose, on_completion_call) _ba.show_ad(purpose, on_completion_call)
def show_ad_2(self, def show_ad_2(
purpose: str, self,
on_completion_call: Callable[[bool], Any] = None) -> None: purpose: str,
on_completion_call: Callable[[bool], Any] | None = None) -> None:
"""(internal)""" """(internal)"""
self.last_ad_purpose = purpose self.last_ad_purpose = purpose
_ba.show_ad_2(purpose, on_completion_call) _ba.show_ad_2(purpose, on_completion_call)

View file

@ -341,7 +341,6 @@ class App:
from bastd import maps as stdmaps from bastd import maps as stdmaps
from bastd.actor import spazappearance from bastd.actor import spazappearance
from ba._generated.enums import TimeType from ba._generated.enums import TimeType
self._aioloop = _asyncio.setup_asyncio() self._aioloop = _asyncio.setup_asyncio()
@ -430,8 +429,6 @@ class App:
self.meta.on_app_running() self.meta.on_app_running()
self.plugins.on_app_running() self.plugins.on_app_running()
import custom_hooks
custom_hooks.on_app_running()
# from ba._dependency import test_depset # from ba._dependency import test_depset
# test_depset() # test_depset()
@ -580,7 +577,7 @@ class App:
def launch_coop_game(self, def launch_coop_game(self,
game: str, game: str,
force: bool = False, force: bool = False,
args: dict = None) -> bool: args: dict | None = None) -> bool:
"""High level way to launch a local co-op session.""" """High level way to launch a local co-op session."""
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
from ba._campaign import getcampaign from ba._campaign import getcampaign

View file

@ -177,9 +177,10 @@ def garbage_collect() -> None:
gc.collect() gc.collect()
def print_live_object_warnings(when: Any, def print_live_object_warnings(
ignore_session: ba.Session = None, when: Any,
ignore_activity: ba.Activity = None) -> None: ignore_session: ba.Session | None = None,
ignore_activity: ba.Activity | None = None) -> None:
"""Print warnings for remaining objects in the current context.""" """Print warnings for remaining objects in the current context."""
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
from ba._session import Session from ba._session import Session

View file

@ -177,7 +177,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
def spawn_player_spaz(self, def spawn_player_spaz(self,
player: PlayerType, player: PlayerType,
position: Sequence[float] = (0.0, 0.0, 0.0), position: Sequence[float] = (0.0, 0.0, 0.0),
angle: float = None) -> PlayerSpaz: angle: float | None = None) -> PlayerSpaz:
"""Spawn and wire up a standard player spaz.""" """Spawn and wire up a standard player spaz."""
spaz = super().spawn_player_spaz(player, position, angle) spaz = super().spawn_player_spaz(player, position, angle)

View file

@ -841,7 +841,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
def spawn_player_spaz(self, def spawn_player_spaz(self,
player: PlayerType, player: PlayerType,
position: Sequence[float] = (0, 0, 0), position: Sequence[float] = (0, 0, 0),
angle: float = None) -> PlayerSpaz: angle: float | None = None) -> PlayerSpaz:
"""Create and wire up a ba.PlayerSpaz for the provided ba.Player.""" """Create and wire up a ba.PlayerSpaz for the provided ba.Player."""
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=cyclic-import # pylint: disable=cyclic-import

View file

@ -360,7 +360,7 @@ def _verify_object_death(wref: weakref.ref) -> None:
print_active_refs(obj) print_active_refs(obj)
def storagename(suffix: str = None) -> str: def storagename(suffix: str | None = 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**

View file

@ -240,7 +240,7 @@ class LanguageSubsystem:
def get_resource(self, def get_resource(self,
resource: str, resource: str,
fallback_resource: str = None, fallback_resource: str | None = None,
fallback_value: Any = None) -> Any: fallback_value: Any = None) -> Any:
"""Return a translation resource by name. """Return a translation resource by name.

View file

@ -25,7 +25,7 @@ class Level:
gametype: type[ba.GameActivity], gametype: type[ba.GameActivity],
settings: dict, settings: dict,
preview_texture_name: str, preview_texture_name: str,
displayname: str = None): displayname: str | None = None):
self._name = name self._name = name
self._gametype = gametype self._gametype = gametype
self._settings = settings self._settings = settings

View file

@ -388,7 +388,8 @@ class Map(Actor):
assert farthestpt is not None assert farthestpt is not None
return tuple(farthestpt) return tuple(farthestpt)
def get_flag_position(self, team_index: int = None) -> Sequence[float]: def get_flag_position(self,
team_index: int | None = None) -> Sequence[float]:
"""Return a flag position on the map for the given team index. """Return a flag position on the map for the given team index.
Pass None to get the default flag point. Pass None to get the default flag point.

View file

@ -236,17 +236,17 @@ class HitMessage:
""" """
def __init__(self, def __init__(self,
srcnode: ba.Node = None, srcnode: ba.Node | None = None,
pos: Sequence[float] = None, pos: Sequence[float] | None = None,
velocity: Sequence[float] = None, velocity: Sequence[float] | None = None,
magnitude: float = 1.0, magnitude: float = 1.0,
velocity_magnitude: float = 0.0, velocity_magnitude: float = 0.0,
radius: float = 1.0, radius: float = 1.0,
source_player: ba.Player = None, source_player: ba.Player | None = None,
kick_back: float = 1.0, kick_back: float = 1.0,
flat_damage: float = None, flat_damage: float | None = None,
hit_type: str = 'generic', hit_type: str = 'generic',
force_direction: Sequence[float] = None, force_direction: Sequence[float] | None = None,
hit_subtype: str = 'default'): hit_subtype: str = 'default'):
"""Instantiate a message with given values.""" """Instantiate a message with given values."""

View file

@ -273,7 +273,7 @@ class MusicSubsystem:
musictype: MusicType | str | None, musictype: MusicType | str | None,
continuous: bool = False, continuous: bool = False,
mode: MusicPlayMode = MusicPlayMode.REGULAR, mode: MusicPlayMode = MusicPlayMode.REGULAR,
testsoundtrack: dict[str, Any] = None) -> None: testsoundtrack: dict[str, Any] | None = None) -> None:
"""Plays the requested music type/mode. """Plays the requested music type/mode.
For most cases, setmusic() is the proper call to use, which itself For most cases, setmusic() is the proper call to use, which itself

View file

@ -66,6 +66,7 @@ class PluginSubsystem:
def load_plugins(self) -> None: def load_plugins(self) -> None:
"""(internal)""" """(internal)"""
from ba._general import getclass from ba._general import getclass
from ba._language import Lstr
# Note: the plugins we load is purely based on what's enabled # Note: the plugins we load is purely based on what's enabled
# in the app config. Our meta-scan gives us a list of available # in the app config. Our meta-scan gives us a list of available
@ -76,15 +77,21 @@ class PluginSubsystem:
assert isinstance(plugstates, dict) assert isinstance(plugstates, dict)
plugkeys: list[str] = sorted(key for key, val in plugstates.items() plugkeys: list[str] = sorted(key for key, val in plugstates.items()
if val.get('enabled', False)) if val.get('enabled', False))
disappeared_plugs: set[str] = set()
for plugkey in plugkeys: for plugkey in plugkeys:
try: try:
cls = getclass(plugkey, Plugin) cls = getclass(plugkey, Plugin)
except ModuleNotFoundError:
disappeared_plugs.add(plugkey)
continue
except Exception as exc: except Exception as exc:
_ba.playsound(_ba.getsound('error')) _ba.playsound(_ba.getsound('error'))
# TODO: Lstr. _ba.screenmessage(Lstr(resource='pluginClassLoadErrorText',
errstr = f"Error loading plugin class '{plugkey}': {exc}" subs=[('${PLUGIN}', plugkey),
_ba.screenmessage(errstr, color=(1, 0, 0)) ('${ERROR}', str(exc))]),
_ba.log(errstr, to_server=False) color=(1, 0, 0))
_ba.log(f"Error loading plugin class '{plugkey}': {exc}",
to_server=False)
continue continue
try: try:
plugin = cls() plugin = cls()
@ -93,10 +100,29 @@ class PluginSubsystem:
except Exception as exc: except Exception as exc:
from ba import _error from ba import _error
_ba.playsound(_ba.getsound('error')) _ba.playsound(_ba.getsound('error'))
# TODO: Lstr. _ba.screenmessage(Lstr(resource='pluginInitErrorText',
_ba.screenmessage(f"Error loading plugin: '{plugkey}': {exc}", subs=[('${PLUGIN}', plugkey),
('${ERROR}', str(exc))]),
color=(1, 0, 0)) color=(1, 0, 0))
_error.print_exception(f"Error loading plugin: '{plugkey}'.") _error.print_exception(f"Error initing plugin: '{plugkey}'.")
# If plugins disappeared, let the user know gently and remove them
# from the config so we'll again let the user know if they later
# reappear. This makes it much smoother to switch between users
# or workspaces.
if disappeared_plugs:
_ba.playsound(_ba.getsound('shieldDown'))
_ba.screenmessage(Lstr(resource='pluginsRemovedText',
subs=[('${NUM}',
str(len(disappeared_plugs)))]),
color=(1, 1, 0))
_ba.log(
f'{len(disappeared_plugs)} plugin(s) no longer found:'
f' {disappeared_plugs}',
to_server=False)
for goneplug in disappeared_plugs:
del _ba.app.config['Plugins'][goneplug]
_ba.app.config.commit()
@dataclass @dataclass

View file

@ -50,7 +50,7 @@ def get_player_profile_icon(profilename: str) -> str:
def get_player_profile_colors( def get_player_profile_colors(
profilename: str | None, profilename: str | None,
profiles: dict[str, dict[str, Any]] = None profiles: dict[str, dict[str, Any]] | None = None
) -> tuple[tuple[float, float, float], tuple[float, float, float]]: ) -> tuple[tuple[float, float, float], tuple[float, float, float]]:
"""Given a profile, return colors for them.""" """Given a profile, return colors for them."""
appconfig = _ba.app.config appconfig = _ba.app.config

View file

@ -72,8 +72,8 @@ class Session:
def __init__(self, def __init__(self,
depsets: Sequence[ba.DependencySet], depsets: Sequence[ba.DependencySet],
team_names: Sequence[str] = None, team_names: Sequence[str] | None = None,
team_colors: Sequence[Sequence[float]] = None, team_colors: Sequence[Sequence[float]] | None = None,
min_players: int = 1, min_players: int = 1,
max_players: int = 8): max_players: int = 8):
"""Instantiate a session. """Instantiate a session.

View file

@ -314,11 +314,11 @@ class Stats:
def player_scored(self, def player_scored(self,
player: ba.Player, player: ba.Player,
base_points: int = 1, base_points: int = 1,
target: Sequence[float] = None, target: Sequence[float] | None = None,
kill: bool = False, kill: bool = False,
victim_player: ba.Player = None, victim_player: ba.Player | None = None,
scale: float = 1.0, scale: float = 1.0,
color: Sequence[float] = None, color: Sequence[float] | None = None,
title: str | ba.Lstr | None = None, title: str | ba.Lstr | None = None,
screenmessage: bool = True, screenmessage: bool = True,
display: bool = True, display: bool = True,
@ -422,7 +422,7 @@ class Stats:
def player_was_killed(self, def player_was_killed(self,
player: ba.Player, player: ba.Player,
killed: bool = False, killed: bool = False,
killer: ba.Player = None) -> None: killer: ba.Player | None = None) -> None:
"""Should be called when a player is killed.""" """Should be called when a player is killed."""
from ba._language import Lstr from ba._language import Lstr
name = player.getname() name = player.getname()

View file

@ -398,7 +398,7 @@ def get_clean_price(price_string: str) -> str:
return psubs.get(price_string, price_string) return psubs.get(price_string, price_string)
def get_available_purchase_count(tab: str = None) -> int: def get_available_purchase_count(tab: str | None = None) -> int:
"""(internal)""" """(internal)"""
try: try:
if _ba.get_v1_account_state() != 'signed_in': if _ba.get_v1_account_state() != 'signed_in':

View file

@ -91,8 +91,8 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]):
def spawn_player_spaz(self, def spawn_player_spaz(self,
player: PlayerType, player: PlayerType,
position: Sequence[float] = None, position: Sequence[float] | None = None,
angle: float = None) -> PlayerSpaz: angle: float | None = None) -> PlayerSpaz:
""" """
Method override; spawns and wires up a standard ba.PlayerSpaz for Method override; spawns and wires up a standard ba.PlayerSpaz for
a ba.Player. a ba.Player.

View file

@ -144,7 +144,7 @@ class UISubsystem:
_ba.timer(1.0, _delay_kill, timetype=TimeType.REAL) _ba.timer(1.0, _delay_kill, timetype=TimeType.REAL)
self._main_menu_window = window self._main_menu_window = window
def clear_main_menu_window(self, transition: str = None) -> None: def clear_main_menu_window(self, transition: str | None = None) -> None:
"""Clear any existing 'main' window with the provided transition.""" """Clear any existing 'main' window with the provided transition."""
if self._main_menu_window: if self._main_menu_window:
if transition is not None: if transition is not None:

View file

@ -52,17 +52,17 @@ class WorkspaceSubsystem:
daemon=True, daemon=True,
).start() ).start()
def _errmsg(self, msg: str | ba.Lstr) -> None: def _errmsg(self, msg: ba.Lstr) -> None:
_ba.screenmessage(msg, color=(1, 0, 0)) _ba.screenmessage(msg, color=(1, 0, 0))
_ba.playsound(_ba.getsound('error')) _ba.playsound(_ba.getsound('error'))
def _successmsg(self, msg: str | ba.Lstr) -> None: def _successmsg(self, msg: ba.Lstr) -> None:
_ba.screenmessage(msg, color=(0, 1, 0)) _ba.screenmessage(msg, color=(0, 1, 0))
_ba.playsound(_ba.getsound('gunCocking')) _ba.playsound(_ba.getsound('gunCocking'))
def _set_active_workspace_bg(self, workspaceid: str, workspacename: str, def _set_active_workspace_bg(self, workspaceid: str, workspacename: str,
on_completed: Callable[[], None]) -> None: on_completed: Callable[[], None]) -> None:
# pylint: disable=too-many-branches from ba._language import Lstr
class _SkipSyncError(RuntimeError): class _SkipSyncError(RuntimeError):
pass pass
@ -101,45 +101,42 @@ class WorkspaceSubsystem:
break break
state.iteration += 1 state.iteration += 1
extras: list[str] = [] _ba.pushcall(
# Hmm; let's not show deletes for now since currently lots of tpartial(
# .pyc files get deleted. self._successmsg,
if bool(False): Lstr(resource='activatedText',
if state.total_deletes: subs=[('${THING}', workspacename)]),
extras.append(f'{state.total_deletes} files deleted') ),
if state.total_downloads: from_other_thread=True,
extras.append(f'{state.total_downloads} files downloaded') )
if state.total_up_to_date:
extras.append(f'{state.total_up_to_date} files up-to-date')
# Actually let's try with none of this; seems a bit excessive.
if bool(False) and extras:
extras_s = '\n' + ', '.join(extras) + '.'
else:
extras_s = ''
_ba.pushcall(tpartial(self._successmsg,
f'{workspacename} activated.{extras_s}'),
from_other_thread=True)
except _SkipSyncError: except _SkipSyncError:
_ba.pushcall(tpartial( _ba.pushcall(
self._errmsg, f'Can\'t sync {workspacename}' tpartial(
f'. Reusing previous synced version.'), self._errmsg,
from_other_thread=True) Lstr(resource='workspaceSyncReuseText',
subs=[('$WORKSPACE', workspacename)])),
from_other_thread=True,
)
except CleanError as exc: except CleanError as exc:
# Avoid reusing existing if we fail in the middle; could # Avoid reusing existing if we fail in the middle; could
# be in wonky state. # be in wonky state.
set_path = False set_path = False
_ba.pushcall(tpartial(self._errmsg, str(exc)), _ba.pushcall(tpartial(self._errmsg, Lstr(value=str(exc))),
from_other_thread=True) from_other_thread=True)
except Exception: except Exception:
# Ditto. # Ditto.
set_path = False set_path = False
logging.exception('Error syncing workspace.') logging.exception("Error syncing workspace '%s'.", workspacename)
# TODO: Lstr. _ba.pushcall(
_ba.pushcall(tpartial( tpartial(
self._errmsg, 'Error syncing workspace. See log for details.'), self._errmsg,
from_other_thread=True) Lstr(resource='workspaceSyncErrorText',
subs=[('${WORKSPACE}', workspacename)]),
),
from_other_thread=True,
)
if set_path and wspath.is_dir(): if set_path and wspath.is_dir():
# Add to Python paths and also to list of stuff to be scanned # Add to Python paths and also to list of stuff to be scanned

View file

@ -327,7 +327,7 @@ class Blast(ba.Actor):
velocity: Sequence[float] = (0.0, 0.0, 0.0), velocity: Sequence[float] = (0.0, 0.0, 0.0),
blast_radius: float = 2.0, blast_radius: float = 2.0,
blast_type: str = 'normal', blast_type: str = 'normal',
source_player: ba.Player = None, source_player: ba.Player | None = None,
hit_type: str = 'explosion', hit_type: str = 'explosion',
hit_subtype: str = 'normal'): hit_subtype: str = 'normal'):
"""Instantiate with given values.""" """Instantiate with given values."""
@ -657,8 +657,8 @@ class Bomb(ba.Actor):
bomb_type: str = 'normal', bomb_type: str = 'normal',
blast_radius: float = 2.0, blast_radius: float = 2.0,
bomb_scale: float = 1.0, bomb_scale: float = 1.0,
source_player: ba.Player = None, source_player: ba.Player | None = None,
owner: ba.Node = None): owner: ba.Node | None = None):
"""Create a new Bomb. """Create a new Bomb.
bomb_type can be 'ice','impact','land_mine','normal','sticky', or bomb_type can be 'ice','impact','land_mine','normal','sticky', or

View file

@ -27,7 +27,7 @@ class ControlsGuide(ba.Actor):
position: tuple[float, float] = (390.0, 120.0), position: tuple[float, float] = (390.0, 120.0),
scale: float = 1.0, scale: float = 1.0,
delay: float = 0.0, delay: float = 0.0,
lifespan: float = None, lifespan: float | None = None,
bright: bool = False): bright: bool = False):
"""Instantiate an overlay. """Instantiate an overlay.

View file

@ -167,9 +167,9 @@ class Flag(ba.Actor):
def __init__(self, def __init__(self,
position: Sequence[float] = (0.0, 1.0, 0.0), position: Sequence[float] = (0.0, 1.0, 0.0),
color: Sequence[float] = (1.0, 1.0, 1.0), color: Sequence[float] = (1.0, 1.0, 1.0),
materials: Sequence[ba.Material] = None, materials: Sequence[ba.Material] | None = None,
touchable: bool = True, touchable: bool = True,
dropped_timeout: int = None): dropped_timeout: int | None = None):
"""Instantiate a flag. """Instantiate a flag.
If 'touchable' is False, the flag will only touch terrain; If 'touchable' is False, the flag will only touch terrain;

View file

@ -40,9 +40,9 @@ class Image(ba.Actor):
attach: Attach = Attach.CENTER, attach: Attach = Attach.CENTER,
color: Sequence[float] = (1.0, 1.0, 1.0, 1.0), color: Sequence[float] = (1.0, 1.0, 1.0, 1.0),
scale: tuple[float, float] = (100.0, 100.0), scale: tuple[float, float] = (100.0, 100.0),
transition_out_delay: float = None, transition_out_delay: float | None = None,
model_opaque: ba.Model = None, model_opaque: ba.Model | None = None,
model_transparent: ba.Model = None, model_transparent: ba.Model | None = None,
vr_depth: float = 0.0, vr_depth: float = 0.0,
host_only: bool = False, host_only: bool = False,
front: bool = False): front: bool = False):

View file

@ -20,7 +20,9 @@ class OnScreenCountdown(ba.Actor):
Useful for time-based games that count down to zero. Useful for time-based games that count down to zero.
""" """
def __init__(self, duration: int, endcall: Callable[[], Any] = None): def __init__(self,
duration: int,
endcall: Callable[[], Any] | None = None):
"""Duration is provided in seconds.""" """Duration is provided in seconds."""
super().__init__() super().__init__()
self._timeremaining = duration self._timeremaining = duration
@ -73,7 +75,7 @@ class OnScreenCountdown(ba.Actor):
# Release callbacks/refs. # Release callbacks/refs.
self._endcall = None self._endcall = None
def _update(self, forcevalue: int = None) -> None: def _update(self, forcevalue: int | None = None) -> None:
if forcevalue is not None: if forcevalue is not None:
tval = forcevalue tval = forcevalue
else: else:

View file

@ -137,8 +137,8 @@ class PowerupBoxFactory:
self._powerupdist.append(powerup) self._powerupdist.append(powerup)
def get_random_powerup_type(self, def get_random_powerup_type(self,
forcetype: str = None, forcetype: str | None = None,
excludetypes: list[str] = None) -> str: excludetypes: list[str] | None = None) -> str:
"""Returns a random powerup type (string). """Returns a random powerup type (string).
See ba.Powerup.poweruptype for available type values. See ba.Powerup.poweruptype for available type values.

View file

@ -241,7 +241,7 @@ class _Entry:
def set_value(self, def set_value(self,
score: float, score: float,
max_score: float = None, max_score: float | None = None,
countdown: bool = False, countdown: bool = False,
flash: bool = True, flash: bool = True,
show_value: bool = True) -> None: show_value: bool = True) -> None:
@ -327,7 +327,7 @@ class Scoreboard:
_ENTRYSTORENAME = ba.storagename('entry') _ENTRYSTORENAME = ba.storagename('entry')
def __init__(self, label: ba.Lstr = None, score_split: float = 0.7): def __init__(self, label: ba.Lstr | None = None, score_split: float = 0.7):
"""Instantiate a scoreboard. """Instantiate a scoreboard.
Label can be something like 'points' and will Label can be something like 'points' and will
@ -356,7 +356,7 @@ class Scoreboard:
def set_team_value(self, def set_team_value(self,
team: ba.Team, team: ba.Team,
score: float, score: float,
max_score: float = None, max_score: float | None = None,
countdown: bool = False, countdown: bool = False,
flash: bool = True, flash: bool = True,
show_value: bool = True) -> None: show_value: bool = True) -> None:

View file

@ -54,7 +54,7 @@ class Spawner:
pt: Sequence[float] = (0, 0, 0), # pylint: disable=invalid-name pt: Sequence[float] = (0, 0, 0), # pylint: disable=invalid-name
spawn_time: float = 1.0, spawn_time: float = 1.0,
send_spawn_message: bool = True, send_spawn_message: bool = True,
spawn_callback: Callable[[], Any] = None): spawn_callback: Callable[[], Any] | None = None):
"""Instantiate a Spawner. """Instantiate a Spawner.
Requires some custom data, a position, Requires some custom data, a position,

View file

@ -67,7 +67,7 @@ class Spaz(ba.Actor):
color: Sequence[float] = (1.0, 1.0, 1.0), color: Sequence[float] = (1.0, 1.0, 1.0),
highlight: Sequence[float] = (0.5, 0.5, 0.5), highlight: Sequence[float] = (0.5, 0.5, 0.5),
character: str = 'Spaz', character: str = 'Spaz',
source_player: ba.Player = None, source_player: ba.Player | None = None,
start_invincible: bool = True, start_invincible: bool = True,
can_accept_powerups: bool = True, can_accept_powerups: bool = True,
powerups_expire: bool = False, powerups_expire: bool = False,
@ -177,6 +177,7 @@ class Spaz(ba.Actor):
self._bomb_wear_off_timer: ba.Timer | None = None self._bomb_wear_off_timer: ba.Timer | None = None
self._bomb_wear_off_flash_timer: ba.Timer | None = None self._bomb_wear_off_flash_timer: ba.Timer | None = None
self._multi_bomb_wear_off_timer: ba.Timer | None = None self._multi_bomb_wear_off_timer: ba.Timer | None = None
self._multi_bomb_wear_off_flash_timer: ba.Timer | None = None
self.bomb_count = self.default_bomb_count self.bomb_count = self.default_bomb_count
self._max_bomb_count = self.default_bomb_count self._max_bomb_count = self.default_bomb_count
self.bomb_type_default = self.default_bomb_type self.bomb_type_default = self.default_bomb_type
@ -704,7 +705,7 @@ class Spaz(ba.Actor):
self.node.mini_billboard_1_start_time = t_ms self.node.mini_billboard_1_start_time = t_ms
self.node.mini_billboard_1_end_time = ( self.node.mini_billboard_1_end_time = (
t_ms + POWERUP_WEAR_OFF_TIME) t_ms + POWERUP_WEAR_OFF_TIME)
self._multi_bomb_wear_off_timer = (ba.Timer( self._multi_bomb_wear_off_flash_timer = (ba.Timer(
(POWERUP_WEAR_OFF_TIME - 2000), (POWERUP_WEAR_OFF_TIME - 2000),
ba.WeakCall(self._multi_bomb_wear_off_flash), ba.WeakCall(self._multi_bomb_wear_off_flash),
timeformat=ba.TimeFormat.MILLISECONDS)) timeformat=ba.TimeFormat.MILLISECONDS))
@ -1266,7 +1267,7 @@ class Spaz(ba.Actor):
else: else:
self.node.counter_text = '' self.node.counter_text = ''
def curse_explode(self, source_player: ba.Player = None) -> None: def curse_explode(self, source_player: ba.Player | None = None) -> None:
"""Explode the poor spaz spectacularly.""" """Explode the poor spaz spectacularly."""
if self._cursed and self.node: if self._cursed and self.node:
self.shatter(extreme=True) self.shatter(extreme=True)

View file

@ -888,11 +888,12 @@ class SpazBotSet:
def __del__(self) -> None: def __del__(self) -> None:
self.clear() self.clear()
def spawn_bot(self, def spawn_bot(
bot_type: type[SpazBot], self,
pos: Sequence[float], bot_type: type[SpazBot],
spawn_time: float = 3.0, pos: Sequence[float],
on_spawn_call: Callable[[SpazBot], Any] = None) -> None: spawn_time: float = 3.0,
on_spawn_call: Callable[[SpazBot], Any] | None = None) -> None:
"""Spawn a bot from this set.""" """Spawn a bot from this set."""
from bastd.actor import spawner from bastd.actor import spawner
spawner.Spawner(pt=pos, spawner.Spawner(pt=pos,

View file

@ -60,8 +60,8 @@ class Text(ba.Actor):
v_attach: VAttach = VAttach.CENTER, v_attach: VAttach = VAttach.CENTER,
h_attach: HAttach = HAttach.CENTER, h_attach: HAttach = HAttach.CENTER,
scale: float = 1.0, scale: float = 1.0,
transition_out_delay: float = None, transition_out_delay: float | None = None,
maxwidth: float = None, maxwidth: float | None = None,
shadow: float = 0.5, shadow: float = 0.5,
flatness: float = 0.0, flatness: float = 0.0,
vr_depth: float = 0.0, vr_depth: float = 0.0,

View file

@ -24,9 +24,9 @@ class ZoomText(ba.Actor):
def __init__(self, def __init__(self,
text: str | ba.Lstr, text: str | ba.Lstr,
position: tuple[float, float] = (0.0, 0.0), position: tuple[float, float] = (0.0, 0.0),
shiftposition: tuple[float, float] = None, shiftposition: tuple[float, float] | None = None,
shiftdelay: float = None, shiftdelay: float | None = None,
lifespan: float = None, lifespan: float | None = None,
flash: bool = True, flash: bool = True,
trail: bool = True, trail: bool = True,
h_align: str = 'center', h_align: str = 'center',
@ -36,7 +36,7 @@ class ZoomText(ba.Actor):
scale: float = 1.0, scale: float = 1.0,
project_scale: float = 1.0, project_scale: float = 1.0,
tilt_translate: float = 0.0, tilt_translate: float = 0.0,
maxwidth: float = None): maxwidth: float | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
super().__init__() super().__init__()
self._dying = False self._dying = False

View file

@ -492,8 +492,8 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]):
def spawn_player_spaz(self, def spawn_player_spaz(self,
player: Player, player: Player,
position: Sequence[float] = None, position: Sequence[float] | None = None,
angle: float = None) -> PlayerSpaz: angle: float | None = None) -> PlayerSpaz:
"""Intercept new spazzes and add our team material for them.""" """Intercept new spazzes and add our team material for them."""
spaz = super().spawn_player_spaz(player, position, angle) spaz = super().spawn_player_spaz(player, position, angle)
player = spaz.getplayer(Player, True) player = spaz.getplayer(Player, True)

View file

@ -137,9 +137,6 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
self.setup_standard_powerup_drops() self.setup_standard_powerup_drops()
self._flag_spawn_pos = self.map.get_flag_position(None) self._flag_spawn_pos = self.map.get_flag_position(None)
Flag.project_stand(self._flag_spawn_pos) Flag.project_stand(self._flag_spawn_pos)
self._set_chosen_one_player(None)
pos = self._flag_spawn_pos
ba.timer(1.0, call=self._tick, repeat=True) ba.timer(1.0, call=self._tick, repeat=True)
mat = self._reset_region_material = ba.Material() mat = self._reset_region_material = ba.Material()
@ -156,14 +153,20 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
), ),
) )
self._reset_region = ba.newnode('region', self._set_chosen_one_player(None)
attrs={
'position': (pos[0], pos[1] + 0.75, def _create_reset_region(self) -> None:
pos[2]), assert self._reset_region_material is not None
'scale': (0.5, 0.5, 0.5), assert self._flag_spawn_pos is not None
'type': 'sphere', pos = self._flag_spawn_pos
'materials': [mat] self._reset_region = ba.newnode(
}) 'region',
attrs={
'position': (pos[0], pos[1] + 0.75, pos[2]),
'scale': (0.5, 0.5, 0.5),
'type': 'sphere',
'materials': [self._reset_region_material]
})
def _get_chosen_one_player(self) -> Player | None: def _get_chosen_one_player(self) -> Player | None:
# Should never return invalid references; return None in that case. # Should never return invalid references; return None in that case.
@ -176,14 +179,14 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
if self._get_chosen_one_player() is not None: if self._get_chosen_one_player() is not None:
return return
# Attempt to get a Player controlling a Spaz that we hit. # Attempt to get a Actor that we hit.
try: try:
player = ba.getcollision().opposingnode.getdelegate( spaz = ba.getcollision().opposingnode.getdelegate(PlayerSpaz, True)
PlayerSpaz, True).getplayer(Player, True) player = spaz.getplayer(Player, True)
except ba.NotFoundError: except ba.NotFoundError:
return return
if player.is_alive(): if spaz.is_alive():
self._set_chosen_one_player(player) self._set_chosen_one_player(player)
def _flash_flag_spawn(self) -> None: def _flash_flag_spawn(self) -> None:
@ -278,6 +281,10 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
# Also an extra momentary flash. # Also an extra momentary flash.
self._flash_flag_spawn() self._flash_flag_spawn()
# Re-create our flag region in case if someone is waiting for
# flag right there:
self._create_reset_region()
else: else:
if player.actor: if player.actor:
self._flag = None self._flag = None

View file

@ -596,7 +596,9 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
if closest_bot is not None: if closest_bot is not None:
closest_bot.target_flag = self._flag closest_bot.target_flag = self._flag
def _drop_powerup(self, index: int, poweruptype: str = None) -> None: def _drop_powerup(self,
index: int,
poweruptype: str | None = None) -> None:
if poweruptype is None: if poweruptype is None:
poweruptype = (PowerupBoxFactory.get().get_random_powerup_type( poweruptype = (PowerupBoxFactory.get().get_random_powerup_type(
excludetypes=self._exclude_powerups)) excludetypes=self._exclude_powerups))
@ -610,7 +612,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
def _drop_powerups(self, def _drop_powerups(self,
standard_points: bool = False, standard_points: bool = False,
poweruptype: str = None) -> None: poweruptype: str | None = None) -> None:
"""Generic powerup drop.""" """Generic powerup drop."""
if standard_points: if standard_points:
spawnpoints = self.map.powerup_spawn_points spawnpoints = self.map.powerup_spawn_points

View file

@ -690,7 +690,9 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
del player, bomb # Unused. del player, bomb # Unused.
self._player_has_dropped_bomb = True self._player_has_dropped_bomb = True
def _drop_powerup(self, index: int, poweruptype: str = None) -> None: def _drop_powerup(self,
index: int,
poweruptype: str | None = None) -> None:
poweruptype = (PowerupBoxFactory.get().get_random_powerup_type( poweruptype = (PowerupBoxFactory.get().get_random_powerup_type(
forcetype=poweruptype, excludetypes=self._excluded_powerups)) forcetype=poweruptype, excludetypes=self._excluded_powerups))
PowerupBox(position=self.map.powerup_spawn_points[index], PowerupBox(position=self.map.powerup_spawn_points[index],
@ -703,7 +705,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
def _drop_powerups(self, def _drop_powerups(self,
standard_points: bool = False, standard_points: bool = False,
poweruptype: str = None) -> None: poweruptype: str | None = None) -> None:
"""Generic powerup drop.""" """Generic powerup drop."""
if standard_points: if standard_points:
points = self.map.powerup_spawn_points points = self.map.powerup_spawn_points

View file

@ -497,7 +497,9 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
del player # Unused. del player # Unused.
self._player_has_picked_up_powerup = True self._player_has_picked_up_powerup = True
def _drop_powerup(self, index: int, poweruptype: str = None) -> None: def _drop_powerup(self,
index: int,
poweruptype: str | None = None) -> None:
if poweruptype is None: if poweruptype is None:
poweruptype = (PowerupBoxFactory.get().get_random_powerup_type( poweruptype = (PowerupBoxFactory.get().get_random_powerup_type(
excludetypes=self._exclude_powerups)) excludetypes=self._exclude_powerups))
@ -509,7 +511,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
def _drop_powerups(self, def _drop_powerups(self,
standard_points: bool = False, standard_points: bool = False,
force_first: str = None) -> None: force_first: str | None = None) -> None:
"""Generic powerup drop.""" """Generic powerup drop."""
# If its been a minute since our last wave finished emerging, stop # If its been a minute since our last wave finished emerging, stop

View file

@ -132,7 +132,9 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]):
self._bot_update_timer = ba.Timer(self._bot_update_interval, self._bot_update_timer = ba.Timer(self._bot_update_interval,
ba.WeakCall(self._update_bots)) ba.WeakCall(self._update_bots))
def _drop_powerup(self, index: int, poweruptype: str = None) -> None: def _drop_powerup(self,
index: int,
poweruptype: str | None = None) -> None:
if poweruptype is None: if poweruptype is None:
poweruptype = (PowerupBoxFactory.get().get_random_powerup_type( poweruptype = (PowerupBoxFactory.get().get_random_powerup_type(
excludetypes=self._excludepowerups)) excludetypes=self._excludepowerups))
@ -146,7 +148,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]):
def _drop_powerups(self, def _drop_powerups(self,
standard_points: bool = False, standard_points: bool = False,
force_first: str = None) -> None: force_first: str | None = None) -> None:
"""Generic powerup drop.""" """Generic powerup drop."""
from bastd.actor import powerupbox from bastd.actor import powerupbox
if standard_points: if standard_points:

View file

@ -767,7 +767,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]):
y: float, y: float,
scale: float, scale: float,
delay: float, delay: float,
custom_texture: str = None, custom_texture: str | None = None,
jitter_scale: float = 1.0, jitter_scale: float = 1.0,
rotate: float = 0.0, rotate: float = 0.0,
vr_depth_offset: float = 0.0) -> None: vr_depth_offset: float = 0.0) -> None:

View file

@ -178,7 +178,7 @@ class Team(ba.Team[Player]):
class TutorialActivity(ba.Activity[Player, Team]): class TutorialActivity(ba.Activity[Player, Team]):
def __init__(self, settings: dict = None): def __init__(self, settings: dict | None = None):
from bastd.maps import Rampage from bastd.maps import Rampage
if settings is None: if settings is None:
settings = {} settings = {}
@ -492,7 +492,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
position: Sequence[float], position: Sequence[float],
color: Sequence[float] = (1.0, 1.0, 1.0), color: Sequence[float] = (1.0, 1.0, 1.0),
make_current: bool = False, make_current: bool = False,
relative_to: int = None, relative_to: int | None = None,
name: str | ba.Lstr = '', name: str | ba.Lstr = '',
flash: bool = True, flash: bool = True,
angle: float = 0.0): angle: float = 0.0):
@ -550,7 +550,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
position: Sequence[float], position: Sequence[float],
color: Sequence[float] = (1.0, 1.0, 1.0), color: Sequence[float] = (1.0, 1.0, 1.0),
make_current: bool = False, make_current: bool = False,
relative_to: int = None): relative_to: int | None = None):
self._position = position self._position = position
self._relative_to = relative_to self._relative_to = relative_to
@ -761,7 +761,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
class PrintPos: class PrintPos:
def __init__(self, spaz_num: int = None): def __init__(self, spaz_num: int | None = None):
self._spaz_num = spaz_num self._spaz_num = spaz_num
def run(self, a: TutorialActivity) -> None: def run(self, a: TutorialActivity) -> None:
@ -787,7 +787,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
def __init__(self, def __init__(self,
celebrate_type: str = 'both', celebrate_type: str = 'both',
spaz_num: int = None, spaz_num: int | None = None,
duration: int = 1000): duration: int = 1000):
self._spaz_num = spaz_num self._spaz_num = spaz_num
self._celebrate_type = celebrate_type self._celebrate_type = celebrate_type

View file

@ -8,7 +8,7 @@ import _ba
import ba import ba
def show_sign_in_prompt(account_type: str = None) -> None: def show_sign_in_prompt(account_type: str | None = None) -> None:
"""Bring up a prompt telling the user they must sign in.""" """Bring up a prompt telling the user they must sign in."""
from bastd.ui.confirm import ConfirmWindow from bastd.ui.confirm import ConfirmWindow
from bastd.ui.account import settings from bastd.ui.account import settings

View file

@ -18,7 +18,7 @@ if TYPE_CHECKING:
class AccountLinkWindow(ba.Window): class AccountLinkWindow(ba.Window):
"""Window for linking accounts.""" """Window for linking accounts."""
def __init__(self, origin_widget: ba.Widget = None): def __init__(self, origin_widget: ba.Widget | None = None):
scale_origin: tuple[float, float] | None scale_origin: tuple[float, float] | None
if origin_widget is not None: if origin_widget is not None:
self._transition_out = 'out_scale' self._transition_out = 'out_scale'

View file

@ -21,7 +21,7 @@ class AccountSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
modal: bool = False, modal: bool = False,
origin_widget: ba.Widget = None, origin_widget: ba.Widget | None = None,
close_once_signed_in: bool = False): close_once_signed_in: bool = False):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements

View file

@ -17,7 +17,7 @@ if TYPE_CHECKING:
class AccountUnlinkWindow(ba.Window): class AccountUnlinkWindow(ba.Window):
"""A window to kick off account unlinks.""" """A window to kick off account unlinks."""
def __init__(self, origin_widget: ba.Widget = None): def __init__(self, origin_widget: ba.Widget | None = None):
scale_origin: tuple[float, float] | None scale_origin: tuple[float, float] | None
if origin_widget is not None: if origin_widget is not None:
self._transition_out = 'out_scale' self._transition_out = 'out_scale'

View file

@ -19,9 +19,9 @@ class AccountViewerWindow(popup.PopupWindow):
def __init__(self, def __init__(self,
account_id: str, account_id: str,
profile_id: str = None, profile_id: str | None = None,
position: tuple[float, float] = (0.0, 0.0), position: tuple[float, float] = (0.0, 0.0),
scale: float = None, scale: float | None = None,
offset: tuple[float, float] = (0.0, 0.0)): offset: tuple[float, float] = (0.0, 0.0)):
from ba.internal import is_browser_likely_available, master_server_get from ba.internal import is_browser_likely_available, master_server_get

View file

@ -16,7 +16,9 @@ if TYPE_CHECKING:
class AchievementsWindow(popup.PopupWindow): class AchievementsWindow(popup.PopupWindow):
"""Popup window to view achievements.""" """Popup window to view achievements."""
def __init__(self, position: tuple[float, float], scale: float = None): def __init__(self,
position: tuple[float, float],
scale: float | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
uiscale = ba.app.ui.uiscale uiscale = ba.app.ui.uiscale
if scale is None: if scale is None:

View file

@ -22,11 +22,11 @@ class CharacterPicker(popup.PopupWindow):
parent: ba.Widget, parent: ba.Widget,
position: tuple[float, float] = (0.0, 0.0), position: tuple[float, float] = (0.0, 0.0),
delegate: Any = None, delegate: Any = None,
scale: float = None, scale: float | None = None,
offset: tuple[float, float] = (0.0, 0.0), offset: tuple[float, float] = (0.0, 0.0),
tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0),
tint2_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0),
selected_character: str = None): selected_character: str | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
from bastd.actor import spazappearance from bastd.actor import spazappearance
del parent # unused here del parent # unused here

View file

@ -24,7 +24,7 @@ class ColorPicker(PopupWindow):
position: tuple[float, float], position: tuple[float, float],
initial_color: Sequence[float] = (1.0, 1.0, 1.0), initial_color: Sequence[float] = (1.0, 1.0, 1.0),
delegate: Any = None, delegate: Any = None,
scale: float = None, scale: float | None = None,
offset: tuple[float, float] = (0.0, 0.0), offset: tuple[float, float] = (0.0, 0.0),
tag: Any = ''): tag: Any = ''):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
@ -162,7 +162,7 @@ class ColorPickerExact(PopupWindow):
position: tuple[float, float], position: tuple[float, float],
initial_color: Sequence[float] = (1.0, 1.0, 1.0), initial_color: Sequence[float] = (1.0, 1.0, 1.0),
delegate: Any = None, delegate: Any = None,
scale: float = None, scale: float | None = None,
offset: tuple[float, float] = (0.0, 0.0), offset: tuple[float, float] = (0.0, 0.0),
tag: Any = ''): tag: Any = ''):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals

View file

@ -28,10 +28,10 @@ class ConfigCheckBox:
position: tuple[float, float], position: tuple[float, float],
size: tuple[float, float], size: tuple[float, float],
displayname: str | ba.Lstr | None = None, displayname: str | ba.Lstr | None = None,
scale: float = None, scale: float | None = None,
maxwidth: float = None, maxwidth: float | None = None,
autoselect: bool = True, autoselect: bool = True,
value_change_call: Callable[[Any], Any] = None): value_change_call: Callable[[Any], Any] | None = None):
if displayname is None: if displayname is None:
displayname = configkey displayname = configkey
self._value_change_call = value_change_call self._value_change_call = value_change_call
@ -84,7 +84,7 @@ class ConfigNumberEdit:
minval: float = 0.0, minval: float = 0.0,
maxval: float = 100.0, maxval: float = 100.0,
increment: float = 1.0, increment: float = 1.0,
callback: Callable[[float], Any] = None, callback: Callable[[float], Any] | None = None,
xoffset: float = 0.0, xoffset: float = 0.0,
displayname: str | ba.Lstr | None = None, displayname: str | ba.Lstr | None = None,
changesound: bool = True, changesound: bool = True,

View file

@ -18,7 +18,7 @@ class ConfirmWindow:
def __init__(self, def __init__(self,
text: str | ba.Lstr = 'Are you sure?', text: str | ba.Lstr = 'Are you sure?',
action: Callable[[], Any] = None, action: Callable[[], Any] | None = None,
width: float = 360.0, width: float = 360.0,
height: float = 100.0, height: float = 100.0,
cancel_button: bool = True, cancel_button: bool = True,
@ -27,7 +27,7 @@ class ConfirmWindow:
text_scale: float = 1.0, text_scale: float = 1.0,
ok_text: str | ba.Lstr | None = None, ok_text: str | ba.Lstr | None = None,
cancel_text: str | ba.Lstr | None = None, cancel_text: str | ba.Lstr | None = None,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
if ok_text is None: if ok_text is None:
ok_text = ba.Lstr(resource='okText') ok_text = ba.Lstr(resource='okText')
@ -127,7 +127,7 @@ class QuitWindow:
def __init__(self, def __init__(self,
swish: bool = False, swish: bool = False,
back: bool = False, back: bool = False,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
ui = ba.app.ui ui = ba.app.ui
app = ba.app app = ba.app
self._back = back self._back = back

View file

@ -37,7 +37,7 @@ class CoopBrowserWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str | None = 'in_right', transition: str | None = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
import threading import threading
@ -1415,7 +1415,7 @@ class CoopBrowserWindow(ba.Window):
def run(self, def run(self,
game: str | None, game: str | None,
tournament_button: dict[str, Any] = None) -> None: tournament_button: dict[str, Any] | None = None) -> None:
"""Run the provided game.""" """Run the provided game."""
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
# pylint: disable=too-many-statements # pylint: disable=too-many-statements

View file

@ -16,7 +16,7 @@ if TYPE_CHECKING:
class CreditsListWindow(ba.Window): class CreditsListWindow(ba.Window):
"""Window for displaying game credits.""" """Window for displaying game credits."""
def __init__(self, origin_widget: ba.Widget = None): def __init__(self, origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
import json import json

View file

@ -21,9 +21,9 @@ class FileSelectorWindow(ba.Window):
def __init__(self, def __init__(self,
path: str, path: str,
callback: Callable[[str | None], Any] = None, callback: Callable[[str | None], Any] | None = None,
show_base_path: bool = True, show_base_path: bool = True,
valid_file_extensions: Sequence[str] = None, valid_file_extensions: Sequence[str] | None = None,
allow_folders: bool = False): allow_folders: bool = False):
if valid_file_extensions is None: if valid_file_extensions is None:
valid_file_extensions = [] valid_file_extensions = []

View file

@ -68,7 +68,7 @@ class GatherWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str | None = 'in_right', transition: str | None = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=cyclic-import # pylint: disable=cyclic-import

View file

@ -20,8 +20,8 @@ class GetCurrencyWindow(ba.Window):
transition: str = 'in_right', transition: str = 'in_right',
from_modal_store: bool = False, from_modal_store: bool = False,
modal: bool = False, modal: bool = False,
origin_widget: ba.Widget = None, origin_widget: ba.Widget | None = None,
store_back_location: str = None): store_back_location: str | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
@ -105,8 +105,8 @@ class GetCurrencyWindow(ba.Window):
position: tuple[float, float], position: tuple[float, float],
size: tuple[float, float], size: tuple[float, float],
label: ba.Lstr, label: ba.Lstr,
price: str = None, price: str | None = None,
tex_name: str = None, tex_name: str | None = None,
tex_opacity: float = 1.0, tex_opacity: float = 1.0,
tex_scale: float = 1.0, tex_scale: float = 1.0,
enabled: bool = True, enabled: bool = True,

View file

@ -18,7 +18,7 @@ class HelpWindow(ba.Window):
def __init__(self, def __init__(self,
main_menu: bool = False, main_menu: bool = False,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
from ba.internal import get_remote_app_name from ba.internal import get_remote_app_name

View file

@ -22,11 +22,11 @@ class IconPicker(popup.PopupWindow):
parent: ba.Widget, parent: ba.Widget,
position: tuple[float, float] = (0.0, 0.0), position: tuple[float, float] = (0.0, 0.0),
delegate: Any = None, delegate: Any = None,
scale: float = None, scale: float | None = None,
offset: tuple[float, float] = (0.0, 0.0), offset: tuple[float, float] = (0.0, 0.0),
tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0),
tint2_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0),
selected_icon: str = None): selected_icon: str | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
del parent # unused here del parent # unused here
del tint_color # unused_here del tint_color # unused_here

View file

@ -21,11 +21,11 @@ class LeagueRankButton:
position: tuple[float, float], position: tuple[float, float],
size: tuple[float, float], size: tuple[float, float],
scale: float, scale: float,
on_activate_call: Callable[[], Any] = None, on_activate_call: Callable[[], Any] | None = None,
transition_delay: float = None, transition_delay: float | None = None,
color: tuple[float, float, float] = None, color: tuple[float, float, float] | None = None,
textcolor: tuple[float, float, float] = None, textcolor: tuple[float, float, float] | None = None,
smooth_update_delay: float = None): smooth_update_delay: float | None = None):
if on_activate_call is None: if on_activate_call is None:
on_activate_call = ba.WeakCall(self._default_on_activate_call) on_activate_call = ba.WeakCall(self._default_on_activate_call)
self._on_activate_call = on_activate_call self._on_activate_call = on_activate_call

View file

@ -21,7 +21,7 @@ class LeagueRankWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
modal: bool = False, modal: bool = False,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
ba.set_analytics_screen('League Rank Window') ba.set_analytics_screen('League Rank Window')
self._league_rank_data: dict[str, Any] | None = None self._league_rank_data: dict[str, Any] | None = None

View file

@ -18,7 +18,7 @@ class PlayWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
import threading import threading

View file

@ -21,7 +21,7 @@ class PlaylistBrowserWindow(ba.Window):
def __init__(self, def __init__(self,
sessiontype: type[ba.Session], sessiontype: type[ba.Session],
transition: str | None = 'in_right', transition: str | None = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
from bastd.ui.playlist import PlaylistTypeVars from bastd.ui.playlist import PlaylistTypeVars

View file

@ -21,8 +21,8 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
def __init__(self, def __init__(self,
sessiontype: type[ba.Session], sessiontype: type[ba.Session],
transition: str = 'in_right', transition: str = 'in_right',
select_playlist: str = None, select_playlist: str | None = None,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# Yes this needs tidying. # Yes this needs tidying.
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
@ -297,7 +297,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
_ba.fade_screen(False, endcall=self._run_selected_playlist) _ba.fade_screen(False, endcall=self._run_selected_playlist)
_ba.lock_all_input() _ba.lock_all_input()
def _refresh(self, select_playlist: str = None) -> None: def _refresh(self, select_playlist: str | None = None) -> None:
from efro.util import asserttype from efro.util import asserttype
old_selection = self._selected_playlist_name old_selection = self._selected_playlist_name

View file

@ -18,10 +18,10 @@ class PlaylistEditController:
def __init__(self, def __init__(self,
sessiontype: type[ba.Session], sessiontype: type[ba.Session],
existing_playlist_name: str = None, existing_playlist_name: str | None = None,
transition: str = 'in_right', transition: str = 'in_right',
playlist: list[dict[str, Any]] = None, playlist: list[dict[str, Any]] | None = None,
playlist_name: str = None): playlist_name: str | None = None):
from ba.internal import preload_map_preview_media, filter_playlist from ba.internal import preload_map_preview_media, filter_playlist
from bastd.ui.playlist import PlaylistTypeVars from bastd.ui.playlist import PlaylistTypeVars
from bastd.ui.playlist.edit import PlaylistEditWindow from bastd.ui.playlist.edit import PlaylistEditWindow

View file

@ -23,9 +23,9 @@ class PlaylistEditGameWindow(ba.Window):
sessiontype: type[ba.Session], sessiontype: type[ba.Session],
config: dict[str, Any] | None, config: dict[str, Any] | None,
completion_call: Callable[[dict[str, Any] | None], Any], completion_call: Callable[[dict[str, Any] | None], Any],
default_selection: str = None, default_selection: str | None = None,
transition: str = 'in_right', transition: str = 'in_right',
edit_info: dict[str, Any] = None): edit_info: dict[str, Any] | None = None):
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals

View file

@ -19,8 +19,8 @@ class SharePlaylistImportWindow(promocode.PromoCodeWindow):
"""Window for importing a shared playlist.""" """Window for importing a shared playlist."""
def __init__(self, def __init__(self,
origin_widget: ba.Widget = None, origin_widget: ba.Widget | None = None,
on_success_callback: Callable[[], Any] = None): on_success_callback: Callable[[], Any] | None = None):
promocode.PromoCodeWindow.__init__(self, promocode.PromoCodeWindow.__init__(self,
modal=True, modal=True,
origin_widget=origin_widget) origin_widget=origin_widget)

View file

@ -26,7 +26,7 @@ class PopupWindow:
offset: tuple[float, float] = (0, 0), offset: tuple[float, float] = (0, 0),
bg_color: tuple[float, float, float] = (0.35, 0.55, 0.15), bg_color: tuple[float, float, float] = (0.35, 0.55, 0.15),
focus_position: tuple[float, float] = (0, 0), focus_position: tuple[float, float] = (0, 0),
focus_size: tuple[float, float] = None, focus_size: tuple[float, float] | None = None,
toolbar_visibility: str = 'menu_minimal_no_back'): toolbar_visibility: str = 'menu_minimal_no_back'):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
if focus_size is None: if focus_size is None:
@ -108,10 +108,10 @@ class PopupMenuWindow(PopupWindow):
current_choice: str, current_choice: str,
delegate: Any = None, delegate: Any = None,
width: float = 230.0, width: float = 230.0,
maxwidth: float = None, maxwidth: float | None = None,
scale: float = 1.0, scale: float = 1.0,
choices_disabled: Sequence[str] = None, choices_disabled: Sequence[str] | None = None,
choices_display: Sequence[ba.Lstr] = None): choices_display: Sequence[ba.Lstr] | None = None):
# FIXME: Clean up a bit. # FIXME: Clean up a bit.
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
@ -268,15 +268,15 @@ class PopupMenu:
parent: ba.Widget, parent: ba.Widget,
position: tuple[float, float], position: tuple[float, float],
choices: Sequence[str], choices: Sequence[str],
current_choice: str = None, current_choice: str | None = None,
on_value_change_call: Callable[[str], Any] = None, on_value_change_call: Callable[[str], Any] | None = None,
opening_call: Callable[[], Any] = None, opening_call: Callable[[], Any] | None = None,
closing_call: Callable[[], Any] = None, closing_call: Callable[[], Any] | None = None,
width: float = 230.0, width: float = 230.0,
maxwidth: float = None, maxwidth: float | None = None,
scale: float = None, scale: float | None = None,
choices_disabled: Sequence[str] = None, choices_disabled: Sequence[str] | None = None,
choices_display: Sequence[ba.Lstr] = None, choices_display: Sequence[ba.Lstr] | None = None,
button_size: tuple[float, float] = (160.0, 50.0), button_size: tuple[float, float] = (160.0, 50.0),
autoselect: bool = True): autoselect: bool = True):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals

View file

@ -19,8 +19,8 @@ class ProfileBrowserWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
in_main_menu: bool = True, in_main_menu: bool = True,
selected_profile: str = None, selected_profile: str | None = None,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
self._in_main_menu = in_main_menu self._in_main_menu = in_main_menu

View file

@ -17,7 +17,9 @@ if TYPE_CHECKING:
class PromoCodeWindow(ba.Window): class PromoCodeWindow(ba.Window):
"""Window for entering promo codes.""" """Window for entering promo codes."""
def __init__(self, modal: bool = False, origin_widget: ba.Widget = None): def __init__(self,
modal: bool = False,
origin_widget: ba.Widget | None = None):
scale_origin: tuple[float, float] | None scale_origin: tuple[float, float] | None
if origin_widget is not None: if origin_widget is not None:

View file

@ -19,7 +19,7 @@ class PurchaseWindow(ba.Window):
def __init__(self, def __init__(self,
items: list[str], items: list[str],
transition: str = 'in_right', transition: str = 'in_right',
header_text: ba.Lstr = None): header_text: ba.Lstr | None = None):
from ba.internal import get_store_item_display_size from ba.internal import get_store_item_display_size
from bastd.ui.store import item as storeitemui from bastd.ui.store import item as storeitemui
if header_text is None: if header_text is None:

View file

@ -19,7 +19,7 @@ class AdvancedSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
from ba.internal import master_server_get from ba.internal import master_server_get
import threading import threading
@ -542,6 +542,14 @@ class AdvancedSettingsWindow(ba.Window):
def _on_net_test_press(self) -> None: def _on_net_test_press(self) -> None:
from bastd.ui.settings.nettesting import NetTestingWindow from bastd.ui.settings.nettesting import NetTestingWindow
# Net-testing requires a signed in v1 account.
if _ba.get_v1_account_state() != 'signed_in':
ba.screenmessage(ba.Lstr(resource='notSignedInErrorText'),
color=(1, 0, 0))
ba.playsound(ba.getsound('error'))
return
self._save_state() self._save_state()
ba.containerwidget(edit=self._root_widget, transition='out_left') ba.containerwidget(edit=self._root_widget, transition='out_left')
ba.app.ui.set_main_menu_window( ba.app.ui.set_main_menu_window(

View file

@ -18,7 +18,7 @@ class AllSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
import threading import threading

View file

@ -18,7 +18,7 @@ class AudioSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=cyclic-import # pylint: disable=cyclic-import

View file

@ -18,7 +18,7 @@ class ControlsSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# FIXME: should tidy up here. # FIXME: should tidy up here.
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-branches # pylint: disable=too-many-branches

View file

@ -21,7 +21,7 @@ class GamepadSettingsWindow(ba.Window):
is_main_menu: bool = True, is_main_menu: bool = True,
transition: str = 'in_right', transition: str = 'in_right',
transition_out: str = 'out_right', transition_out: str = 'out_right',
settings: dict = None): settings: dict | None = None):
self._input = gamepad self._input = gamepad
# If our input-device went away, just return an empty zombie. # If our input-device went away, just return an empty zombie.
@ -652,8 +652,8 @@ class GamepadSettingsWindow(ba.Window):
texture: ba.Texture, texture: ba.Texture,
button: str, button: str,
scale: float = 1.0, scale: float = 1.0,
message: ba.Lstr = None, message: ba.Lstr | None = None,
message2: ba.Lstr = None, message2: ba.Lstr | None = None,
maxwidth: float = 80.0) -> ba.Widget: maxwidth: float = 80.0) -> ba.Widget:
if message is None: if message is None:
message = ba.Lstr(resource=self._r + '.pressAnyButtonText') message = ba.Lstr(resource=self._r + '.pressAnyButtonText')
@ -754,8 +754,8 @@ class AwaitGamepadInputWindow(ba.Window):
button: str, button: str,
callback: Callable[[str, dict[str, Any], AwaitGamepadInputWindow], callback: Callable[[str, dict[str, Any], AwaitGamepadInputWindow],
Any], Any],
message: ba.Lstr = None, message: ba.Lstr | None = None,
message2: ba.Lstr = None): message2: ba.Lstr | None = None):
if message is None: if message is None:
print('AwaitGamepadInputWindow message is None!') print('AwaitGamepadInputWindow message is None!')
# Shouldn't get here. # Shouldn't get here.

View file

@ -404,7 +404,7 @@ class GamepadAdvancedSettingsWindow(ba.Window):
increment: float = 1.0, increment: float = 1.0,
change_sound: bool = True, change_sound: bool = True,
x_offset: float = 0.0, x_offset: float = 0.0,
displayname: ba.Lstr = None) -> tuple[ba.Widget, ba.Widget]: displayname: ba.Lstr | None = None) -> tuple[ba.Widget, ba.Widget]:
if displayname is None: if displayname is None:
displayname = name displayname = name

View file

@ -18,7 +18,7 @@ class GraphicsSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
# pylint: disable=too-many-statements # pylint: disable=too-many-statements

View file

@ -131,7 +131,8 @@ def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None:
# We're running in a background thread but UI stuff needs to run # We're running in a background thread but UI stuff needs to run
# in the logic thread; give ourself a way to pass stuff to it. # in the logic thread; give ourself a way to pass stuff to it.
def _print(text: str, color: tuple[float, float, float] = None) -> None: def _print(text: str,
color: tuple[float, float, float] | None = None) -> None:
def _print_in_logic_thread() -> None: def _print_in_logic_thread() -> None:
win = weakwin() win = weakwin()

View file

@ -17,7 +17,7 @@ class PluginSettingsWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
app = ba.app app = ba.app

View file

@ -19,7 +19,7 @@ class SoundtrackBrowserWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
@ -355,7 +355,7 @@ class SoundtrackBrowserWindow(ba.Window):
return ba.Lstr(resource=self._r + '.defaultSoundtrackNameText') return ba.Lstr(resource=self._r + '.defaultSoundtrackNameText')
return ba.Lstr(value=soundtrack) return ba.Lstr(value=soundtrack)
def _refresh(self, select_soundtrack: str = None) -> None: def _refresh(self, select_soundtrack: str | None = None) -> None:
from efro.util import asserttype from efro.util import asserttype
self._allow_changing_soundtracks = False self._allow_changing_soundtracks = False
old_selection = self._selected_soundtrack old_selection = self._selected_soundtrack

View file

@ -31,10 +31,10 @@ class StoreBrowserWindow(ba.Window):
def __init__(self, def __init__(self,
transition: str = 'in_right', transition: str = 'in_right',
modal: bool = False, modal: bool = False,
show_tab: StoreBrowserWindow.TabID = None, show_tab: StoreBrowserWindow.TabID | None = None,
on_close_call: Callable[[], Any] = None, on_close_call: Callable[[], Any] | None = None,
back_location: str = None, back_location: str | None = None,
origin_widget: ba.Widget = None): origin_widget: ba.Widget | None = None):
# pylint: disable=too-many-statements # pylint: disable=too-many-statements
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
from bastd.ui.tabs import TabRow from bastd.ui.tabs import TabRow

View file

@ -20,12 +20,12 @@ class StoreButton:
position: Sequence[float], position: Sequence[float],
size: Sequence[float], size: Sequence[float],
scale: float, scale: float,
on_activate_call: Callable[[], Any] = None, on_activate_call: Callable[[], Any] | None = None,
transition_delay: float = None, transition_delay: float | None = None,
color: Sequence[float] = None, color: Sequence[float] | None = None,
textcolor: Sequence[float] = None, textcolor: Sequence[float] | None = None,
show_tickets: bool = False, show_tickets: bool = False,
button_type: str = None, button_type: str | None = None,
sale_scale: float = 1.0): sale_scale: float = 1.0):
self._position = position self._position = position
self._size = size self._size = size

View file

@ -35,7 +35,7 @@ class TabRow(Generic[T]):
tabdefs: list[tuple[T, ba.Lstr]], tabdefs: list[tuple[T, ba.Lstr]],
pos: tuple[float, float], pos: tuple[float, float],
size: tuple[float, float], size: tuple[float, float],
on_select_call: Callable[[T], None] = None) -> None: on_select_call: Callable[[T], None] | None = None) -> None:
if not tabdefs: if not tabdefs:
raise ValueError('At least one tab def is required') raise ValueError('At least one tab def is required')
self.tabs: dict[T, Tab] = {} self.tabs: dict[T, Tab] = {}

Some files were not shown because too many files have changed in this diff Show more