diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 1d662f1a684..0729f6de972 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1274,8 +1274,13 @@ public class CardView extends GameEntityView { String rulesText = null; if (type.isVanguard() && rules != null) { - rulesText = "Hand Modifier: " + rules.getHand() + - "\r\nLife Modifier: " + rules.getLife(); + boolean decHand = rules.getHand() < 0; + boolean decLife = rules.getLife() < 0; + String handSize = Localizer.getInstance().getMessageorUseDefault("lblHandSize", "Hand Size") + + (!decHand ? ": +" : ": ") + rules.getHand(); + String startingLife = Localizer.getInstance().getMessageorUseDefault("lblStartingLife", "Starting Life") + + (!decLife ? ": +" : ": ") + rules.getLife(); + rulesText = handSize + "\r\n" + startingLife; } set(TrackableProperty.RulesText, rulesText); } diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index bbe81414228..57b52d11390 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -282,9 +282,38 @@ public class AdventurePlayer implements Serializable, SaveFileContent { if (this.difficultyData.sellFactor == 0) this.difficultyData.sellFactor = 0.2f; - this.difficultyData.shardSellRatio = data.readFloat("sellFactor"); - if (this.difficultyData.shardSellRatio == 0) - this.difficultyData.shardSellRatio = 0.8f; + //BEGIN SPECIAL CASES + //Previously these were not being read from or written to save files, causing defaults to appear after reload + //Pull from config if appropriate + DifficultyData configuredDifficulty = null; + for (DifficultyData candidate : Config.instance().getConfigData().difficulties) { + if (candidate.name.equals(this.difficultyData.name)) { + configuredDifficulty = candidate; + break; + } + } + + if (configuredDifficulty != null && (this.difficultyData.shardSellRatio == data.readFloat("shardSellRatio") || data.readFloat("shardSellRatio") == 0)) + this.difficultyData.shardSellRatio = configuredDifficulty.shardSellRatio; + else + this.difficultyData.shardSellRatio = data.readFloat("shardSellRatio"); + if (configuredDifficulty != null && !data.containsKey("goldLoss")) + this.difficultyData.goldLoss = configuredDifficulty.goldLoss; + else + this.difficultyData.goldLoss = data.readFloat("goldLoss"); + if (configuredDifficulty != null && !data.containsKey("lifeLoss")) + this.difficultyData.lifeLoss = configuredDifficulty.lifeLoss; + else + this.difficultyData.lifeLoss = data.readFloat("lifeLoss"); + if (configuredDifficulty != null && !data.containsKey("spawnRank")) + this.difficultyData.spawnRank = configuredDifficulty.spawnRank; + else + this.difficultyData.spawnRank = data.readInt("spawnRank"); + if (configuredDifficulty != null && !data.containsKey("rewardMaxFactor")) + this.difficultyData.rewardMaxFactor = configuredDifficulty.rewardMaxFactor; + else + this.difficultyData.rewardMaxFactor = data.readFloat("rewardMaxFactor"); + // END SPECIAL CASES name = data.readString("name"); heroRace = data.readInt("heroRace"); @@ -413,6 +442,10 @@ public class AdventurePlayer implements Serializable, SaveFileContent { data.store("enemyLifeFactor", this.difficultyData.enemyLifeFactor); data.store("sellFactor", this.difficultyData.sellFactor); data.store("shardSellRatio", this.difficultyData.shardSellRatio); + data.store("goldLoss", this.difficultyData.goldLoss); + data.store("lifeLoss", this.difficultyData.lifeLoss); + data.store("spawnRank", this.difficultyData.spawnRank); + data.store("rewardMaxFactor", this.difficultyData.rewardMaxFactor); data.store("name", name); data.store("heroRace", heroRace); diff --git a/forge-gui/res/adventure/common/maps/map/main_story/forest_capital.tmx b/forge-gui/res/adventure/common/maps/map/main_story/forest_capital.tmx index 3c8f1edae52..5d665148d2b 100644 --- a/forge-gui/res/adventure/common/maps/map/main_story/forest_capital.tmx +++ b/forge-gui/res/adventure/common/maps/map/main_story/forest_capital.tmx @@ -1,5 +1,5 @@ - + @@ -18,7 +18,7 @@ - eJzNmEtO40AQhnsFSAlKxOsCARMwK2AHF2FPIOxnBi4AgRXiAHAGQFwAkgAi4hScgNcMmxlNWbiVSlHVLzshv1SSH+325+qu6nJHRaVisAhsHmwYNJfyxKlVwFpg7SHhawLHbMqYsD2A/Sgp9XNI7Fepy6jHdKKs1OSQ2FS568c24ZsBu/gmmyZ8WBPMvXlhfjQKSh0iOyr03j8o8M/ZxDFw92z9N9N4aglxNQg+/Y7asrnPCsNzDOcn6bUt8vzKklKrS73Xqp58inmnSfR7OuDPx4Bc5cOXjCFmrMfdY84H9HswM9YiOta+1e18+PIQ5pt1aN8PPs6XHB8nOrd9+Lbir21CxDHeC20HMb6nEIxnVXu7fvBdh73WKDw/QvjqlvyXp7L4ryGsZVmF83cWPl0zJvXOO8TOb4f4+Qvz8J/HXPThq5H3N3OqYU25PWt8NAw1yzMUOy9SweOoED6cq7QPk7r2upj/XPTl43LrfvFzLsZ9+J/KMr54PjYFH67B4r+eFgB/oP2HEEPbwvU81w/MiOdjPOr2PJaOmVC+OQsjHuv6GNSnI5+2M+bH6cMn1SWvMDZvwljT2JbqAKnvLONL63QsHNdS3Lis3a58t5Z+JFYpbrTu0PHGgpmh7cBeI/U3FfMK79yzLay/ei0w8XGy/c/RdZBrvyn0gRn0d7ryVcZlpsiMbOWS+CKGby9wPydR1j2m3ZKdL8t+Tl57TNz4npf99nKu0PFl+WsfV579XZD+qP9C9VQ1n4eK46M55zuVl/98pMtXvO61mHZJ7rsJ5HPJJR3/bntqc80WD9h/dF/zkGGiNkjpnMFxRMhn+Pw/CN3vlw== + eJzNmEtOAkEQhnulJGAg+LgAMKLDSt3pRdwr4N7XBRRcGQ+gZxDjBRRQo/EUnsC3G401cToUTdX0YwbkTyqZR0/PN9Vd1TXtZYTwwTywebBxUCnk8UMrgHXAumPC1waOYsgYsN2DbWeF2BkT2832GOWY5nNCTI+JzeR6fuwqfHNgrX+yWYUPK0/cm2fmRyMtRBPZUbr//mGafk4nioG6p+u/HcZTh4mrUfDJd2wuRfdZIHiO4fwkvFZVnl+uCLFS6b9WtuQTxDujpH7PA/jz0SFX2fAFY4gZ637vmPKB+j2YGWsRHVf9/mdt+JIQ5isatB8GH+VLio+SOrdt+Kr+YBsXUYx3TNtRjO8pBONZWd9uGHxXbq+NFJ4fLnx1Tf5LUnH812DWsrjC+TsOn6wZg3rnHWLnwyB+vmEe/ljMRRu+TeX97YRq2KjcHjc+cN2ijvMzFDsvXMFjKBc+nKukD4O69iqT/Fy05aNy60Hmby76Q/ifijO+eD62GR+uwuK/FhYAn9D+i4mhGnM9yfUDM+L56E+aPY8lY8aVr6RhxGNdT0F9OvFnWyk7Ths+ri55hbF5Y8ZajW2uDuD6jjO+ap2OheOaixuTtduU70bTD8fKxY3ULTpeX4hm6Bqwy/qRqzOJV1jnnhqz/sq1IIqPku5/Tl0HqfYbTB+YQX6nKV9himfyopG1XByfR/DtO+7nBIq7x7SX1fPF2c9Jao+JGt/znN1eziU6vsgN9nFp2V9L6U/1n6ueytHnrqL41Jzzn0rKfzaS5Ste9zpEuyD3XTvymeSSB/tu+2pzyeaP2H/qvmaTYFJtlJI5g+LwkM/w+S+Eme+Q @@ -244,5 +244,11 @@ + + + + + + diff --git a/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.atlas b/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.atlas index 53e8ad00ba8..f31b3130f98 100644 --- a/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.atlas +++ b/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.atlas @@ -41,4 +41,19 @@ MageTower size: 26, 49 Skep xy: 110,281 - size: 37, 33 \ No newline at end of file + size: 37, 33 +MageTowerBlue + xy: 2,327 + size: 32, 32 +MageTowerRed + xy: 36,328 + size: 32, 32 +MageTowerBlack + xy: 63,328 + size: 32, 32 +MageTowerGreen + xy: 92,328 + size: 32, 32 +MageTowerWhite + xy: 121,328 + size: 32, 32 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.png b/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.png index 27ff37c3a25..0ef3a70fc38 100644 Binary files a/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.png and b/forge-gui/res/adventure/common/maps/tileset/buildingsbosses.png differ diff --git a/forge-gui/res/adventure/common/world/points_of_interest.json b/forge-gui/res/adventure/common/world/points_of_interest.json index 118acbf1ece..3d404110e68 100644 --- a/forge-gui/res/adventure/common/world/points_of_interest.json +++ b/forge-gui/res/adventure/common/world/points_of_interest.json @@ -2068,7 +2068,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerRed", "map": "../common/maps/map/magetower/magetower_1.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2084,7 +2084,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlack", "map": "../common/maps/map/magetower/magetower_2.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2100,7 +2100,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerRed", "map": "../common/maps/map/magetower/magetower_3.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2116,7 +2116,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerWhite", "map": "../common/maps/map/magetower/magetower_4.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2132,7 +2132,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerGreen", "map": "../common/maps/map/magetower/magetower_5.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2148,7 +2148,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlack", "map": "../common/maps/map/magetower/magetower_6.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2163,8 +2163,8 @@ "name": "MageTowerC8", "type": "dungeon", "count": 3, - "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "spriteAtlas": "../common/maps/tileset/buildings.atlas", + "sprite": "MageTowerBlue", "map": "../common/maps/map/magetower/magetower_8.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2180,7 +2180,7 @@ "type": "dungeon", "count": 1, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlue", "map": "../common/maps/map/magetower/magetower_13.tmx", "radiusFactor": 0.2, "questTags": [ @@ -2196,7 +2196,7 @@ "type": "dungeon", "count": 3, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlue", "map": "../common/maps/map/magetower/magetower_14.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2212,7 +2212,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlue", "map": "../common/maps/map/magetower/magetower_1.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2228,7 +2228,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlack", "map": "../common/maps/map/magetower/magetower_2.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2244,7 +2244,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerRed", "map": "../common/maps/map/magetower/magetower_3.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2260,7 +2260,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerWhite", "map": "../common/maps/map/magetower/magetower_4.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2276,7 +2276,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerGreen", "map": "../common/maps/map/magetower/magetower_5.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2292,7 +2292,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlack", "map": "../common/maps/map/magetower/magetower_6.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2308,7 +2308,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlue", "map": "../common/maps/map/magetower/magetower_8.tmx", "radiusFactor": 0.8, "questTags": [ @@ -2324,7 +2324,7 @@ "type": "dungeon", "count": 2, "spriteAtlas": "../common/maps/tileset/buildingsbosses.atlas", - "sprite": "MageTower", + "sprite": "MageTowerBlue", "map": "../common/maps/map/magetower/magetower_14.tmx", "radiusFactor": 0.8, "questTags": [ diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index c7a023e0be1..1a49029b78c 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -2237,6 +2237,8 @@ lblSelectThisCardConfirm=Wähle diese Karte? #CardView.java lblMainGame=Hauptspiel lblSubgame=Unterspiel (Auslöser {0}) +lblHandSize=Handgröße +lblStartingLife=Leben beginnen #PlayerView.java lblCommanderCastCard=Wurde bereits {0} mal aus der Kommandozone gespielt lblCommanderCastPlayer={0} spielte {1} mal aus der Kommandozone diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 4f49f4eb537..3db1e4d8ba2 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -2242,6 +2242,8 @@ lblSelectThisCardConfirm=Select this card? #CardView.java lblMainGame=Main game lblSubgame=Subgame ({0} parent) +lblHandSize=Hand Size +lblStartingLife=Starting Life #PlayerView.java lblCommanderCastCard=Cast from command zone {0} times lblCommanderCastPlayer={0} cast from command zone {1} times diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 44fe1b33308..8f2900058ac 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -2238,6 +2238,8 @@ lblSelectThisCardConfirm=¿Selecciona esta carta? #CardView.java lblMainGame=Juego principal lblSubgame=Subjuego (padre {0}) +lblHandSize=Tamaño de la mano +lblStartingLife=La vida inicial #PlayerView.java lblCommanderCastCard=Lanzado desde la zona de comandante {0} veces lblCommanderCastPlayer={0} lanzado desde la zona de comandante {1} veces diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index d7db71bdacc..b40c7ecd6ad 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -2240,6 +2240,8 @@ lblSelectThisCardConfirm=Sélectionner cette carte ? #CardView.java lblMainGame=Jeu principal lblSubgame=Sous-jeu ({0} parent) +lblHandSize=Taille de la main +lblStartingLife=Début de la vie #PlayerView.java lblCommanderCastCard=Lancer depuis la zone de commande {0} fois lblCommanderCastPlayer={0} lancer de la zone de commande {1} fois diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 36675f409cb..ec00c889d38 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -2237,6 +2237,8 @@ lblSelectThisCardConfirm=Vuoi scegliere questa carta? #CardView.java lblMainGame=Gioco principale lblSubgame=Sottopartita (da {0}) +lblHandSize=Dimensione delle mani +lblStartingLife=La vita iniziale #PlayerView.java lblCommanderCastCard=Lanciato dalla zona di comando {0} volte lblCommanderCastPlayer={0} è stato lanciato dalla zona di comando {1} volte diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 8f8ffe0ad14..ce172950b02 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -2237,6 +2237,8 @@ lblSelectThisCardConfirm=このカードを選択しますか? #CardView.java lblMainGame=メインゲーム lblSubgame={0}つ上のサブゲーム +lblHandSize=ハンドサイズ +lblStartingLife=人生を始める #PlayerView.java lblCommanderCastCard=コマンド領域からキャスト:{0}回 lblCommanderCastPlayer={0}が {1}回コマンド領域からキャストした diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index cbf5491e4d7..cd5185a5336 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -2304,6 +2304,8 @@ lblSelectThisCardConfirm=Escolher este cartão? #CardView.java lblMainGame=Jogo Principal lblSubgame=Subjogo ({0} pai) +lblHandSize=Tamanho da mão +lblStartingLife=Começando a vida #PlayerView.java lblCommanderCastCard=Conjurado da zona de comando {0} vezes lblCommanderCastPlayer={0} conjurou da zona de comando {1} vezes diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 6fb1807dd17..76b12f413e7 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2242,6 +2242,8 @@ lblSelectThisCardConfirm=选择这张牌? #CardView.java lblMainGame=主游戏 lblSubgame=子游戏({0}个父游戏) +lblHandSize=手尺寸 +lblStartingLife=开始生活 #PlayerView.java lblCommanderCastCard=从指挥官区域释放过{0}次 lblCommanderCastPlayer={0}从指挥官区域释放过{1}次