diff --git a/android/assets/jsons/translations/Brazilian_Portuguese.properties b/android/assets/jsons/translations/Brazilian_Portuguese.properties index 01ea1c0b28..d0b839597d 100644 --- a/android/assets/jsons/translations/Brazilian_Portuguese.properties +++ b/android/assets/jsons/translations/Brazilian_Portuguese.properties @@ -949,6 +949,8 @@ Download = Download Done! = Concluído! Delete [modName] = Deletar [modName] Are you SURE you want to delete this mod? = Tem CERTEZA que deseja deletar este mod? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3753,6 +3755,8 @@ Moai = Moai Cannot be built on bonus resource = Não pode ser construído com recurso de bônus Terrace farm = Cultivo em terraços + # Requires translation! +Unpillagable = Ancient ruins = Ruínas antigas City ruins = Ruínas da cidade diff --git a/android/assets/jsons/translations/Bulgarian.properties b/android/assets/jsons/translations/Bulgarian.properties index c32af36157..f8277f80ad 100644 --- a/android/assets/jsons/translations/Bulgarian.properties +++ b/android/assets/jsons/translations/Bulgarian.properties @@ -967,6 +967,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -4991,6 +4993,8 @@ Moai = Cannot be built on bonus resource = Terrace farm = Терасна ферма + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/Czech.properties b/android/assets/jsons/translations/Czech.properties index 2e9636cef0..50ee7140ab 100644 --- a/android/assets/jsons/translations/Czech.properties +++ b/android/assets/jsons/translations/Czech.properties @@ -267,9 +267,7 @@ Mods: = Mody: Base ruleset mods: = Mody zakladních pravidel: Extension mods: = Rozšiřující mody: - # Requires translation! World Wrap = Zakulacení světa - # Requires translation! World wrap maps are very memory intensive - creating large world wrap maps on Android can lead to crashes! = Mapy se zakulaceným světem jsou velmi náročné na paměť - vytváření velkých zakulacených map na Androidu může vést k padání aplikace! # Multiplayer @@ -514,7 +512,6 @@ Culture = Kultura Food = Jídlo Crop Yield = Výnos plodiny - # Requires translation! Territory = Území Force = Síla GOLDEN AGE = ZLATÝ VĚK @@ -932,6 +929,8 @@ Download = Stáhnout Done! = Hotovo! Delete [modName] = Smazat [modName] Are you SURE you want to delete this mod? = OPRAVDU chcete smazat tento mod? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3125,6 +3124,8 @@ Moai = Moai Cannot be built on bonus resource = Nesmí být postaveno na bonusové surovině Terrace farm = Terasovité pole + # Requires translation! +Unpillagable = Ancient ruins = Starobylé ruiny City ruins = Zřiceniny města diff --git a/android/assets/jsons/translations/Dutch.properties b/android/assets/jsons/translations/Dutch.properties index e5fe8c9801..9485459780 100644 --- a/android/assets/jsons/translations/Dutch.properties +++ b/android/assets/jsons/translations/Dutch.properties @@ -933,6 +933,8 @@ Download = Download Done! = Klaar! Delete [modName] = Verwijder [modName] Are you SURE you want to delete this mod? = Weet je zeker dat je deze mod wil verwijderen? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -4519,6 +4521,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = Ancient ruins = Oude ruïnes City ruins = Ruïnes van de stad diff --git a/android/assets/jsons/translations/English.properties b/android/assets/jsons/translations/English.properties index 4d0b9401a6..eef77723c6 100644 --- a/android/assets/jsons/translations/English.properties +++ b/android/assets/jsons/translations/English.properties @@ -1736,6 +1736,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -5796,6 +5798,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/Finnish.properties b/android/assets/jsons/translations/Finnish.properties index 980c0ce685..468fddf5be 100644 --- a/android/assets/jsons/translations/Finnish.properties +++ b/android/assets/jsons/translations/Finnish.properties @@ -1015,6 +1015,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -4052,6 +4054,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/French.properties b/android/assets/jsons/translations/French.properties index 140a0e9e87..769048331a 100644 --- a/android/assets/jsons/translations/French.properties +++ b/android/assets/jsons/translations/French.properties @@ -932,6 +932,8 @@ Download = Télécharger Done! = Fini! Delete [modName] = Supprimer [modName] Are you SURE you want to delete this mod? = Êtes vous SÛR de vouloir supprimer ce mod? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3149,6 +3151,8 @@ Moai = Moai Cannot be built on bonus resource = Ne peut être construit sur une ressource bonus Terrace farm = Culture en terrasse + # Requires translation! +Unpillagable = Ancient ruins = Anciennes ruines City ruins = Ruines diff --git a/android/assets/jsons/translations/German.properties b/android/assets/jsons/translations/German.properties index c56eb5c666..e1bba4866e 100644 --- a/android/assets/jsons/translations/German.properties +++ b/android/assets/jsons/translations/German.properties @@ -932,6 +932,8 @@ Download = Download Done! = Abgeschlossen! Delete [modName] = Lösche [modName] Are you SURE you want to delete this mod? = SICHER, dass diese Modifikation gelöscht werden soll? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3111,6 +3113,8 @@ Moai = Moai Cannot be built on bonus resource = Darf nicht auf Bonus-Ressourcen gebaut werden Terrace farm = Terrassenfelder + # Requires translation! +Unpillagable = Ancient ruins = Altertümliche Ruinen City ruins = Stadtruinen diff --git a/android/assets/jsons/translations/Hungarian.properties b/android/assets/jsons/translations/Hungarian.properties index 630f7e69aa..84134c1aae 100644 --- a/android/assets/jsons/translations/Hungarian.properties +++ b/android/assets/jsons/translations/Hungarian.properties @@ -948,6 +948,8 @@ Download = Letöltés Done! = Kész! Delete [modName] = [modName] törlése Are you SURE you want to delete this mod? = Biztosan TÖRLI ezt a modot? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3780,6 +3782,8 @@ Moai = Cannot be built on bonus resource = Terrace farm = Terasz farm + # Requires translation! +Unpillagable = Ancient ruins = Ősi romok City ruins = Városromok diff --git a/android/assets/jsons/translations/Indonesian.properties b/android/assets/jsons/translations/Indonesian.properties index 00eb8bc108..e588827b1a 100644 --- a/android/assets/jsons/translations/Indonesian.properties +++ b/android/assets/jsons/translations/Indonesian.properties @@ -932,6 +932,8 @@ Download = Unduh Done! = Selesai! Delete [modName] = Hapus [modName] Are you SURE you want to delete this mod? = Apakah kamu YAKIN untuk menghapus mod ini? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3111,6 +3113,8 @@ Moai = Moai Cannot be built on bonus resource = Tidak bisa dibangun di atas sumber daya bonus Terrace farm = Sawah bersengkedan + # Requires translation! +Unpillagable = Ancient ruins = Reruntuhan kuno City ruins = Reruntuhan kota diff --git a/android/assets/jsons/translations/Italian.properties b/android/assets/jsons/translations/Italian.properties index 6220ff722e..f69d0908a2 100644 --- a/android/assets/jsons/translations/Italian.properties +++ b/android/assets/jsons/translations/Italian.properties @@ -929,6 +929,8 @@ Download = Scarica Done! = Fatto! Delete [modName] = Cancella [modName] Are you SURE you want to delete this mod? = Vuoi davvero cancellare questa mod? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3105,6 +3107,8 @@ Moai = Moai Cannot be built on bonus resource = Non costruibile sulle risorse bonus Terrace farm = Terrazzamento + # Requires translation! +Unpillagable = Ancient ruins = Antiche rovine City ruins = Rovine cittadine diff --git a/android/assets/jsons/translations/Japanese.properties b/android/assets/jsons/translations/Japanese.properties index cf16dd9dc2..ef73a9f974 100644 --- a/android/assets/jsons/translations/Japanese.properties +++ b/android/assets/jsons/translations/Japanese.properties @@ -932,6 +932,8 @@ Download = ダウンロード Done! = 完了! Delete [modName] = [modName]を消去 Are you SURE you want to delete this mod? = このMODを削除しますか? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3111,6 +3113,8 @@ Moai = モアイ Cannot be built on bonus resource = ボーナス資源の上では建設できない Terrace farm = 棚田 + # Requires translation! +Unpillagable = Ancient ruins = 古代遺跡 City ruins = 廃墟都市 diff --git a/android/assets/jsons/translations/Korean.properties b/android/assets/jsons/translations/Korean.properties index 166fd24d60..9f3ba5290e 100644 --- a/android/assets/jsons/translations/Korean.properties +++ b/android/assets/jsons/translations/Korean.properties @@ -951,6 +951,8 @@ Download = 다운로드 Done! = 완료! Delete [modName] = [modName] 삭제 Are you SURE you want to delete this mod? = 이 모드를 정말로 삭제하시겠습니까? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3150,6 +3152,8 @@ Moai = 모아이 Cannot be built on bonus resource = 보너스 자원 위에 건설 불가 Terrace farm = 계단식 농업 + # Requires translation! +Unpillagable = Ancient ruins = 고대 유적 City ruins = 도시 폐허 diff --git a/android/assets/jsons/translations/Lithuanian.properties b/android/assets/jsons/translations/Lithuanian.properties index 7b750bbd86..59d3531f7d 100644 --- a/android/assets/jsons/translations/Lithuanian.properties +++ b/android/assets/jsons/translations/Lithuanian.properties @@ -1059,6 +1059,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -5094,6 +5096,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/Malay.properties b/android/assets/jsons/translations/Malay.properties index a51fc97b62..aeae34d508 100644 --- a/android/assets/jsons/translations/Malay.properties +++ b/android/assets/jsons/translations/Malay.properties @@ -1576,6 +1576,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -5439,6 +5441,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties b/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties index fbbabd5d2e..3ad466ad28 100644 --- a/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties +++ b/android/assets/jsons/translations/Persian_(Pinglish-DIN).properties @@ -1020,6 +1020,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -5026,6 +5028,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/Persian_(Pinglish-UN).properties b/android/assets/jsons/translations/Persian_(Pinglish-UN).properties index f5c8ebd570..b3ff7fb622 100644 --- a/android/assets/jsons/translations/Persian_(Pinglish-UN).properties +++ b/android/assets/jsons/translations/Persian_(Pinglish-UN).properties @@ -1017,6 +1017,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -5023,6 +5025,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = # Requires translation! Ancient ruins = diff --git a/android/assets/jsons/translations/Polish.properties b/android/assets/jsons/translations/Polish.properties index 4a204b9873..a6552fe547 100644 --- a/android/assets/jsons/translations/Polish.properties +++ b/android/assets/jsons/translations/Polish.properties @@ -931,6 +931,8 @@ Download = Pobierz Done! = Zrobione! Delete [modName] = Usuń [modName] Are you SURE you want to delete this mod? = Czy jesteś pewny, że chcesz usunąć ten mod? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3143,6 +3145,8 @@ Moai = Moai Cannot be built on bonus resource = Nie można zbudować na bonusowych surowcach. Terrace farm = Uprawa tarasowa + # Requires translation! +Unpillagable = Ancient ruins = Starożytne ruiny City ruins = Ruiny miasta diff --git a/android/assets/jsons/translations/Portuguese.properties b/android/assets/jsons/translations/Portuguese.properties index 07b1f1ec11..d44483465e 100644 --- a/android/assets/jsons/translations/Portuguese.properties +++ b/android/assets/jsons/translations/Portuguese.properties @@ -1004,6 +1004,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -4576,6 +4578,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = Ancient ruins = Ruínas antigas City ruins = Ruínas da cidade diff --git a/android/assets/jsons/translations/Romanian.properties b/android/assets/jsons/translations/Romanian.properties index 0371e5e10f..801de34336 100644 --- a/android/assets/jsons/translations/Romanian.properties +++ b/android/assets/jsons/translations/Romanian.properties @@ -1108,6 +1108,8 @@ Done! = Delete [modName] = # Requires translation! Are you SURE you want to delete this mod? = + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -4765,6 +4767,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = Ancient ruins = Ruine străvechi City ruins = Oraș în ruină diff --git a/android/assets/jsons/translations/Russian.properties b/android/assets/jsons/translations/Russian.properties index fa7524f40b..960bce01ae 100644 --- a/android/assets/jsons/translations/Russian.properties +++ b/android/assets/jsons/translations/Russian.properties @@ -933,6 +933,8 @@ Download = Скачать Done! = Готово! Delete [modName] = Удалить [modName] Are you SURE you want to delete this mod? = Вы УВЕРЕНЫ что хотите удалить этот мод? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3112,6 +3114,8 @@ Moai = Статуя Моаи Cannot be built on bonus resource = Нельзя построить на бонусных ресурсах Terrace farm = Террасная ферма + # Requires translation! +Unpillagable = Ancient ruins = Древние руины City ruins = Руины города diff --git a/android/assets/jsons/translations/Simplified_Chinese.properties b/android/assets/jsons/translations/Simplified_Chinese.properties index 82a1e51305..b635b59c92 100644 --- a/android/assets/jsons/translations/Simplified_Chinese.properties +++ b/android/assets/jsons/translations/Simplified_Chinese.properties @@ -929,6 +929,8 @@ Download = 下载 Done! = 完成! Delete [modName] = 删除模组:[modName] Are you SURE you want to delete this mod? = 你确定要删除这个模组吗? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3105,6 +3107,8 @@ Moai = 摩艾石像群 Cannot be built on bonus resource = 无法建造在拥有奖励资源的地块 Terrace farm = 梯田 + # Requires translation! +Unpillagable = Ancient ruins = 远古遗迹 City ruins = 城市废墟 diff --git a/android/assets/jsons/translations/Spanish.properties b/android/assets/jsons/translations/Spanish.properties index 8d58b9af1e..dbc11043db 100644 --- a/android/assets/jsons/translations/Spanish.properties +++ b/android/assets/jsons/translations/Spanish.properties @@ -931,6 +931,8 @@ Download = Descargar Done! = ¡Hecho! Delete [modName] = Eliminar [modName] Are you SURE you want to delete this mod? = ¿Estás SEGURO de que deseas eliminar este mod? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3107,6 +3109,8 @@ Moai = Móai Cannot be built on bonus resource = No se puede construir en los recursos Terrace farm = Terrazas de cultivo + # Requires translation! +Unpillagable = Ancient ruins = Ruinas Antiguas City ruins = Ciudad en ruinas diff --git a/android/assets/jsons/translations/Traditional_Chinese.properties b/android/assets/jsons/translations/Traditional_Chinese.properties index 3ac291b2f5..c0c699345e 100644 --- a/android/assets/jsons/translations/Traditional_Chinese.properties +++ b/android/assets/jsons/translations/Traditional_Chinese.properties @@ -929,6 +929,8 @@ Download = 下載 Done! = 完成! Delete [modName] = 刪除模組:[modName] Are you SURE you want to delete this mod? = 你確定要刪除這個模組嗎? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3105,6 +3107,8 @@ Moai = 摩艾石像群 Cannot be built on bonus resource = 無法建造在擁有獎勵資源的地塊 Terrace farm = 梯田 + # Requires translation! +Unpillagable = Ancient ruins = 遠古遺跡 City ruins = 城市廢墟 diff --git a/android/assets/jsons/translations/Turkish.properties b/android/assets/jsons/translations/Turkish.properties index 8a2e5ba80f..f22e286243 100644 --- a/android/assets/jsons/translations/Turkish.properties +++ b/android/assets/jsons/translations/Turkish.properties @@ -932,6 +932,8 @@ Download = İndir Done! = Tamam! Delete [modName] = [modName] modunu sil Are you SURE you want to delete this mod? = Bu modu SİLMEK istediğinize emin misiniz? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3682,6 +3684,8 @@ Cannot be built on bonus resource = # Requires translation! Terrace farm = + # Requires translation! +Unpillagable = Ancient ruins = Antik Kalıntılar City ruins = Şehir Kalıntıları diff --git a/android/assets/jsons/translations/Ukrainian.properties b/android/assets/jsons/translations/Ukrainian.properties index 3a9d0a9a6b..4fa2c555b6 100644 --- a/android/assets/jsons/translations/Ukrainian.properties +++ b/android/assets/jsons/translations/Ukrainian.properties @@ -935,6 +935,8 @@ Download = Завантажити Done! = Зроблено Delete [modName] = Видалити [modName] Are you SURE you want to delete this mod? = Ви СПРАВДІ хочете видалити цю модифікацію? + # Requires translation! +Updated = # Uniques that are relevant to more than one type of game object @@ -3118,6 +3120,8 @@ Moai = Моаї Cannot be built on bonus resource = Не може бути побудована на бонусному ресурсі Terrace farm = Терасна ферма + # Requires translation! +Unpillagable = Ancient ruins = Стародавні руїни City ruins = Руїни міста diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index 345521e952..5f7ce11e57 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -931,6 +931,7 @@ Download = Done! = Delete [modName] = Are you SURE you want to delete this mod? = +Updated = # Uniques that are relevant to more than one type of game object diff --git a/android/src/com/unciv/app/AndroidLauncher.kt b/android/src/com/unciv/app/AndroidLauncher.kt index 877c34e151..b734d9db0a 100644 --- a/android/src/com/unciv/app/AndroidLauncher.kt +++ b/android/src/com/unciv/app/AndroidLauncher.kt @@ -22,12 +22,12 @@ open class AndroidLauncher : AndroidApplication() { } MultiplayerTurnCheckWorker.createNotificationChannels(applicationContext) - // Only allow mods on KK+, to avoid READ_EXTERNAL_STORAGE permission earlier versions need - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - copyMods() + // Only allow mods on KK+, to avoid READ_EXTERNAL_STORAGE permission earlier versions need + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + copyMods() val externalfilesDir = getExternalFilesDir(null) - if(externalfilesDir!=null) GameSaver.externalFilesDirForAndroid = externalfilesDir.path - } + if (externalfilesDir != null) GameSaver.externalFilesDirForAndroid = externalfilesDir.path + } val config = AndroidApplicationConfiguration().apply { useImmersiveMode = true; } val androidParameters = UncivGameParameters( @@ -36,16 +36,16 @@ open class AndroidLauncher : AndroidApplication() { fontImplementation = NativeFontAndroid(ORIGINAL_FONT_SIZE.toInt()), customSaveLocationHelper = customSaveLocationHelper ) - val game = UncivGame ( androidParameters ) + val game = UncivGame(androidParameters) initialize(game, config) } - /** - * Copies mods from external data directory (where users can access) to the private one (where - * libGDX reads from). Note: deletes all files currently in the private mod directory and - * replaces them with the ones in the external folder!) - */ - private fun copyMods() { + /** + * Copies mods from external data directory (where users can access) to the private one (where + * libGDX reads from). Note: deletes all files currently in the private mod directory and + * replaces them with the ones in the external folder!) + */ + private fun copyMods() { // Mod directory in the internal app data (where Gdx.files.local looks) val internalModsDir = File("${filesDir.path}/mods") @@ -74,8 +74,8 @@ open class AndroidLauncher : AndroidApplication() { cancel(MultiplayerTurnCheckWorker.NOTIFICATION_ID_INFO) cancel(MultiplayerTurnCheckWorker.NOTIFICATION_ID_SERVICE) } + } catch (ex: Exception) { } - catch (ex:Exception){} super.onResume() } diff --git a/buildSrc/src/main/kotlin/BuildConfig.kt b/buildSrc/src/main/kotlin/BuildConfig.kt index ec537d2689..cd8b616dfd 100644 --- a/buildSrc/src/main/kotlin/BuildConfig.kt +++ b/buildSrc/src/main/kotlin/BuildConfig.kt @@ -3,8 +3,8 @@ package com.unciv.build object BuildConfig { const val kotlinVersion = "1.4.30" const val appName = "Unciv" - const val appCodeNumber = 557 - const val appVersion = "3.14.2" + const val appCodeNumber = 558 + const val appVersion = "3.14.3" const val gdxVersion = "1.10.0" const val roboVMVersion = "2.3.1" diff --git a/changelog.md b/changelog.md index 4052b45c3b..887a920f94 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,23 @@ +## 3.14.3 + +Added "Updated!" next to updated mods in mod management screen + +Added 'last updated time' and 'open Github page of mod' in mod management screen + +Can no longer enter diplomacy screen for self, defeated and spectator civs through diplomacy overview screen + +Resolved #3817 - don't display resource requirements from uniques twice + +By SomeTroglodyte: + +- Solves #3802 Mod translations don't appear in new game screen +- Modify choice of city to own the tiles acquired by a citadel - v2 +- Make city center unpillagable using a unique + +Parameterize civ-wide sight bonus - By SpacedOutChicken + +Translation updates + ## 3.14.2 Put world wrap behind setting again and added warning for world wrap for Android - I'm seeing a lot of ANRs in recent versions, but it's not something that seems solvable. diff --git a/core/src/com/unciv/logic/CustomSaveLocationHelper.kt b/core/src/com/unciv/logic/CustomSaveLocationHelper.kt index a60b7141a8..97f90c410e 100644 --- a/core/src/com/unciv/logic/CustomSaveLocationHelper.kt +++ b/core/src/com/unciv/logic/CustomSaveLocationHelper.kt @@ -25,4 +25,4 @@ interface CustomSaveLocationHelper { * [GameInfo] */ fun loadGame(loadCompleteCallback: (GameInfo?, Exception?) -> Unit) -} +} \ No newline at end of file diff --git a/core/src/com/unciv/logic/GameSaver.kt b/core/src/com/unciv/logic/GameSaver.kt index ad88220cad..21d86c3d8c 100644 --- a/core/src/com/unciv/logic/GameSaver.kt +++ b/core/src/com/unciv/logic/GameSaver.kt @@ -14,6 +14,7 @@ object GameSaver { private const val saveFilesFolder = "SaveFiles" private const val multiplayerFilesFolder = "MultiplayerGames" private const val settingsFileName = "GameSettings.json" + @Volatile var customSaveLocationHelper: CustomSaveLocationHelper? = null @@ -23,7 +24,7 @@ object GameSaver { fun json() = Json().apply { setIgnoreDeprecated(true); ignoreUnknownFields = true } // Json() is NOT THREAD SAFE so we need to create a new one for each function - fun getSubfolder(multiplayer: Boolean=false) = if(multiplayer) multiplayerFilesFolder else saveFilesFolder + fun getSubfolder(multiplayer: Boolean = false) = if (multiplayer) multiplayerFilesFolder else saveFilesFolder fun getSave(GameName: String, multiplayer: Boolean = false): FileHandle { val localfile = Gdx.files.local("${getSubfolder(multiplayer)}/$GameName") @@ -90,7 +91,7 @@ object GameSaver { return json().fromJson(GameInfo::class.java, gameData) } - fun deleteSave(GameName: String, multiplayer: Boolean = false){ + fun deleteSave(GameName: String, multiplayer: Boolean = false) { getSave(GameName, multiplayer).delete() } @@ -136,7 +137,7 @@ object GameSaver { } } - fun autoSaveSingleThreaded (gameInfo: GameInfo) { + fun autoSaveSingleThreaded(gameInfo: GameInfo) { // If the user has chosen a custom save location outside of the usual game directories, // they'll probably expect us to overwrite that instead. E.g. if the user is saving their // game to their Google Drive folder, they'll probably want that progress to be synced to @@ -170,5 +171,4 @@ object GameSaver { fun getGameIdFromFile(gameFile: FileHandle): String { return json().fromJson(GameInfo::class.java, gameFile).gameId } -} - +} \ No newline at end of file diff --git a/core/src/com/unciv/models/ruleset/Ruleset.kt b/core/src/com/unciv/models/ruleset/Ruleset.kt index 910db69215..51bc89c4e1 100644 --- a/core/src/com/unciv/models/ruleset/Ruleset.kt +++ b/core/src/com/unciv/models/ruleset/Ruleset.kt @@ -378,7 +378,7 @@ object RulesetCache :HashMap() { fun getBaseRuleset() = this[BaseRuleset.Civ_V_Vanilla.fullName]!!.clone() // safeguard, o no-one edits the base ruleset by mistake - fun getComplexRuleset(mods:LinkedHashSet):Ruleset{ + fun getComplexRuleset(mods: LinkedHashSet): Ruleset { val newRuleset = Ruleset() val loadedMods = mods.filter { containsKey(it) }.map { this[it]!! } if (loadedMods.none { it.modOptions.isBaseRuleset }) diff --git a/core/src/com/unciv/ui/pickerscreens/ModManagementScreen.kt b/core/src/com/unciv/ui/pickerscreens/ModManagementScreen.kt index 83c00f1cb1..1101e00f07 100644 --- a/core/src/com/unciv/ui/pickerscreens/ModManagementScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/ModManagementScreen.kt @@ -37,18 +37,18 @@ class ModManagementScreen: PickerScreen() { topTable.row() - topTable.add(ScrollPane(modTable)).height(scrollPane.height*0.8f).pad(10f) + topTable.add(ScrollPane(modTable)).height(scrollPane.height * 0.8f).pad(10f) downloadTable.add(getDownloadButton()).row() tryDownloadPage(1) - topTable.add(ScrollPane(downloadTable)).height(scrollPane.height*0.8f)//.size(downloadTable.width, topTable.height) + topTable.add(ScrollPane(downloadTable)).height(scrollPane.height * 0.8f)//.size(downloadTable.width, topTable.height) topTable.add(modActionTable) } - fun tryDownloadPage(pageNum:Int) { + fun tryDownloadPage(pageNum: Int) { thread { val repoSearch: Github.RepoSearch try { @@ -66,9 +66,9 @@ class ModManagementScreen: PickerScreen() { var downloadButtonText = repo.name val existingMod = RulesetCache.values.firstOrNull { it.name == repo.name } - if(existingMod!=null) { + if (existingMod != null) { if (existingMod.modOptions.lastUpdated != "" && existingMod.modOptions.lastUpdated != repo.updated_at) - downloadButtonText += " - Updated!" + downloadButtonText += " - {Updated}" } val downloadButton = downloadButtonText.toTextButton() @@ -95,7 +95,7 @@ class ModManagementScreen: PickerScreen() { val nextPageButton = "Next page".toTextButton() nextPageButton.onClick { nextPageButton.remove() - tryDownloadPage(pageNum+1) + tryDownloadPage(pageNum + 1) } downloadTable.add(nextPageButton).row() } @@ -113,7 +113,7 @@ class ModManagementScreen: PickerScreen() { } if (updatedAt != "") { - val updateString = "Last updated at: " + LocalDateTime.parse(updatedAt, DateTimeFormatter.ISO_DATE_TIME) + val updateString = "{Updated}: " + LocalDateTime.parse(updatedAt, DateTimeFormatter.ISO_DATE_TIME) .toLocalDate().toString() modActionTable.add(updateString.toLabel()) } @@ -123,13 +123,13 @@ class ModManagementScreen: PickerScreen() { val downloadButton = "Download mod from URL".toTextButton() downloadButton.onClick { val popup = Popup(this) - val textArea = TextArea("https://github.com/...",skin) - popup.add(textArea).width(stage.width/2).row() + val textArea = TextArea("https://github.com/...", skin) + popup.add(textArea).width(stage.width / 2).row() val actualDownloadButton = "Download".toTextButton() actualDownloadButton.onClick { actualDownloadButton.setText("Downloading...".tr()) actualDownloadButton.disable() - downloadMod(Github.Repo().apply { html_url=textArea.text; default_branch= "master"}) { popup.close() } + downloadMod(Github.Repo().apply { html_url = textArea.text; default_branch = "master" }) { popup.close() } } popup.add(actualDownloadButton).row() popup.addCloseButton() @@ -138,7 +138,7 @@ class ModManagementScreen: PickerScreen() { return downloadButton } - fun downloadMod(repo:Github.Repo, postAction:()->Unit={}) { + fun downloadMod(repo: Github.Repo, postAction: () -> Unit = {}) { thread { // to avoid ANRs - we've learnt our lesson from previous download-related actions try { val modFolder = Github.downloadAndExtract(repo.html_url, repo.default_branch, @@ -186,7 +186,7 @@ class ModManagementScreen: PickerScreen() { addModInfoToActionTable(mod.modOptions.modUrl, mod.modOptions.lastUpdated) } - fun refreshModTable(){ + fun refreshModTable() { modTable.clear() val currentMods = RulesetCache.values.filter { it.name != "" } for (mod in currentMods) { @@ -205,9 +205,9 @@ class ModManagementScreen: PickerScreen() { } } - fun deleteMod(mod: Ruleset){ + fun deleteMod(mod: Ruleset) { val modFileHandle = Gdx.files.local("mods").child(mod.name) - if(modFileHandle.isDirectory) modFileHandle.deleteDirectory() + if (modFileHandle.isDirectory) modFileHandle.deleteDirectory() else modFileHandle.delete() RulesetCache.loadRulesets() refreshModTable()