From 7c12c4db6954cbd297d5b420148e678f8a261829 Mon Sep 17 00:00:00 2001 From: Adam Pantel Date: Thu, 4 Mar 2021 06:03:37 +0000 Subject: [PATCH 1/5] Add cleanup in Frogkin Kidnapper --- forge-gui/res/cardsfolder/f/frogkin_kidnapper.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/f/frogkin_kidnapper.txt b/forge-gui/res/cardsfolder/f/frogkin_kidnapper.txt index 45c84dd5c5e..50583941925 100644 --- a/forge-gui/res/cardsfolder/f/frogkin_kidnapper.txt +++ b/forge-gui/res/cardsfolder/f/frogkin_kidnapper.txt @@ -4,7 +4,8 @@ Types:Creature Frog Rogue PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, target opponent reveals their hand. Choose a nonland card from it. Ransom that card. (Exile it. Its owner may pay {3} at any time to return it to their hand.) SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | TgtPrompt$ Select target opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ TrigRansom -SVar:TrigRansom:DB$ Effect | EffectOwner$ ParentTarget | Duration$ Permanent | Abilities$ PayUp | SVars$ ExileEffect | RememberObjects$ RememberedLKI +SVar:TrigRansom:DB$ Effect | EffectOwner$ ParentTarget | Duration$ Permanent | Abilities$ PayUp | SVars$ ExileEffect | RememberObjects$ RememberedLKI | SubAbility$ DBCleanup SVar:PayUp:ST$ ChangeZone | Cost$ 3 | Defined$ Remembered | Origin$ Exile | Destination$ Hand | ActivationZone$ Command | AILogic$ Always | SubAbility$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:When Frogkin Kidnapper enters the battlefield, target opponent reveals their hand. Choose a nonland card from it. Ransom that card. (Exile it. Its owner may pay {3} at any time to return it to their hand.) From 3960e19f0b7805a49513bc5b5d7c915f83c06635 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 4 Mar 2021 10:43:08 +0000 Subject: [PATCH 2/5] [Mobile] fix stack description --- forge-gui-mobile/src/forge/screens/match/views/VStack.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index cada29f48b3..5cd99ead01e 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -405,7 +405,8 @@ public class VStack extends FDropDown { FONT, foreColor, x, y, w, h, y, h, true, Align.left, true); } else { - String trimFirst = TextUtil.fastReplace("\n" + text.substring(0, index) + text.substring(index + name.length()), "- -", "-"); + String modifier = (text.substring(0, index).length() > 0) ? "CARDNAME" : ""; + String trimFirst = TextUtil.fastReplace("\n" + text.substring(0, index) + modifier + text.substring(index + name.length()), "- -", "-"); String trimSecond = TextUtil.fastReplace(trimFirst, name+" "+cId, name); newtext = TextUtil.fastReplace(trimSecond, " "+cId, name); From d0fbd04081bbf1f8a2f30e157cdd6449710eff47 Mon Sep 17 00:00:00 2001 From: Adam Pantel <> Date: Thu, 4 Mar 2021 09:12:06 -0500 Subject: [PATCH 3/5] Frankenstein's Monster and Hydradoodle fixes --- .../java/forge/game/ability/effects/RollDiceEffect.java | 6 ++++-- forge-gui/res/cardsfolder/f/frankensteins_monster.txt | 6 +++--- forge-gui/res/cardsfolder/h/hydradoodle.txt | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java index eaa9841a94a..f3b91129369 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java @@ -68,8 +68,10 @@ public class RollDiceEffect extends SpellAbilityEffect { total += roll; } - String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", player, StringUtils.join(rolls, ", ")); - player.getGame().getAction().nofityOfValue(sa, player, message, null); + if (amount > 0) { + String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", player, StringUtils.join(rolls, ", ")); + player.getGame().getAction().nofityOfValue(sa, player, message, null); + } if (sa.hasParam("ResultSVar")) { host.setSVar(sa.getParam("ResultSVar"), ""+total); diff --git a/forge-gui/res/cardsfolder/f/frankensteins_monster.txt b/forge-gui/res/cardsfolder/f/frankensteins_monster.txt index 4970367101f..80f620f604d 100644 --- a/forge-gui/res/cardsfolder/f/frankensteins_monster.txt +++ b/forge-gui/res/cardsfolder/f/frankensteins_monster.txt @@ -3,10 +3,10 @@ ManaCost:X B B Types:Creature Zombie PT:0/1 R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ ExileCreature | Description$ As CARDNAME enters the battlefield, exile X creature cards from your graveyard. If you can't, put CARDNAME into its owner's graveyard instead of onto the battlefield. For each creature card exiled this way, CARDNAME enters the battlefield with a +2/+0, +1/+1, or +0/+2 counter on it. -SVar:ExileCreature:DB$ ChooseCard | ETB$ True | Choices$ Creature.YouOwn | ChoiceZone$ Graveyard | Amount$ X | Mandatory$ True | ConditionCheckSVar$ CheckYard | ConditionSVarCompare$ GEX | References$ CheckYard,X | SubAbility$ DBExile +SVar:ExileCreature:DB$ ChooseCard | ETB$ True | Choices$ Creature.YouOwn | ChoiceZone$ Graveyard | Amount$ X | Mandatory$ True | ConditionCheckSVar$ CheckYard | ConditionSVarCompare$ GEX | SubAbility$ DBExile SVar:DBExile:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | SubAbility$ Movetoyard -SVar:Movetoyard:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Graveyard | Defined$ Self | ConditionCheckSVar$ CheckExiled | ConditionSVarCompare$ LTX | References$ CheckExiled,X | Imprint$ True | SubAbility$ ChooseCounters -SVar:ChooseCounters:DB$ Repeat | MaxRepeat$ X | ETB$ True | RepeatSubAbility$ DBChooseCounter | ConditionCheckSVar$ CheckExiled | ConditionSVarCompare$ EQX | References$ CheckExiled,X | SubAbility$ MovetoPlay +SVar:Movetoyard:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Graveyard | Defined$ Self | ConditionCheckSVar$ CheckExiled | ConditionSVarCompare$ LTX | Imprint$ True | ETB$ True | SubAbility$ ChooseCounters +SVar:ChooseCounters:DB$ Repeat | MaxRepeat$ X | ETB$ True | RepeatSubAbility$ DBChooseCounter | ConditionCheckSVar$ CheckExiled | ConditionSVarCompare$ EQX | SubAbility$ MovetoPlay SVar:DBChooseCounter:DB$ GenericChoice | Choices$ SVarP1P1,SVarP2P0,SVarP0P2 SVar:SVarP1P1:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | ETB$ True | SpellDescription$ +1/+1 SVar:SVarP2P0:DB$ PutCounter | CounterType$ P2P0 | CounterNum$ 1 | ETB$ True | SpellDescription$ +2/+0 diff --git a/forge-gui/res/cardsfolder/h/hydradoodle.txt b/forge-gui/res/cardsfolder/h/hydradoodle.txt index c6acd583e53..9b0db0b9574 100644 --- a/forge-gui/res/cardsfolder/h/hydradoodle.txt +++ b/forge-gui/res/cardsfolder/h/hydradoodle.txt @@ -4,7 +4,7 @@ Types:Creature Hydra Dog PT:0/0 K:ETBReplacement:Other:RollCounters SVar:X:Count$xPaid -SVar:RollCounters:DB$ RollDice | Amt$ X | ResultSVar$ Result | SubAbility$ DBCounters | SpellDescription$ As CARDNAME enters the battlefield, roll X six-sided dice. CARDNAME enters the battlefield with a number of +1/+1 counters on it equal to the total of those results. +SVar:RollCounters:DB$ RollDice | Amt$ X | ETB$ True | ResultSVar$ Result | SubAbility$ DBCounters | SpellDescription$ As CARDNAME enters the battlefield, roll X six-sided dice. CARDNAME enters the battlefield with a number of +1/+1 counters on it equal to the total of those results. SVar:DBCounters:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ Result | ETB$ True K:Reach K:Trample From a653085e60fd5fba8123fc56ee7d46ed216dbe3e Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 4 Mar 2021 15:23:05 +0100 Subject: [PATCH 4/5] ChangeZoneEffect: add Meld and Mutate for TriggerChangesZoneAll --- .../ability/effects/ChangeZoneAllEffect.java | 13 +++++++++++ .../ability/effects/ChangeZoneEffect.java | 22 ++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java index 253031c67b5..8af4a42eb58 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java @@ -223,6 +223,19 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect { if (!movedCard.getZone().equals(originZone)) { triggerList.put(originZone.getZoneType(), movedCard.getZone().getZoneType(), movedCard); + + if (c.getMeldedWith() != null) { + Card meld = game.getCardState(c.getMeldedWith(), null); + if (meld != null) { + triggerList.put(originZone.getZoneType(), movedCard.getZone().getZoneType(), meld); + } + } + if (c.hasMergedCard()) { + for (final Card cm : c.getMergedCards()) { + if (cm == c) continue; + triggerList.put(originZone.getZoneType(), movedCard.getZone().getZoneType(), cm); + } + } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index c98c1b5772a..4c776434d9e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -728,16 +728,28 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } } if (!movedCard.getZone().equals(originZone)) { + Card meld = null; triggerList.put(originZone.getZoneType(), movedCard.getZone().getZoneType(), movedCard); + if (gameCard.getMeldedWith() != null) { + meld = game.getCardState(gameCard.getMeldedWith(), null); + if (meld != null) { + triggerList.put(originZone.getZoneType(), movedCard.getZone().getZoneType(), meld); + } + } + if (gameCard.hasMergedCard()) { + for (final Card c : gameCard.getMergedCards()) { + if (c == gameCard) continue; + triggerList.put(originZone.getZoneType(), movedCard.getZone().getZoneType(), c); + } + } + + if (remember != null) { hostCard.addRemembered(movedCard); // addRememberedFromCardState ? - if (gameCard.getMeldedWith() != null) { - Card meld = game.getCardState(gameCard.getMeldedWith(), null); - if (meld != null) { - hostCard.addRemembered(meld); - } + if (meld != null) { + hostCard.addRemembered(meld); } if (gameCard.hasMergedCard()) { for (final Card c : gameCard.getMergedCards()) { From d2f6cf90a84ab02db951d582fb0e3e1a83c830fc Mon Sep 17 00:00:00 2001 From: Churrufli Date: Thu, 4 Mar 2021 16:36:29 +0000 Subject: [PATCH 5/5] Update es-ES.properties --- forge-gui/res/languages/es-ES.properties | 34 +++++++++++++----------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 8ec518d7bf1..c299f961b60 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -585,10 +585,10 @@ lblRandomDecks=Mazos aleatorios lblNetDecks=Mazos online lblNetCommanderDecks=Mazos Commander online lblNetArchiveStandardDecks=Archivo online de mazos Standard +lblNetArchivePioneerDecks=Archivo online de mazos Pioneer lblNetArchiveModernDecks=Archivo online de mazos Modern -lblNetArchivePioneerDecks=Net Archive Pioneer Decks -lblNetArchiveLegacyDecks=Net Archive Legacy Decks -lblNetArchiveVintageDecks=Net Archive Vintage Decks +lblNetArchiveLegacyDecks=Archivo online de mazos Legacy +lblNetArchiveVintageDecks=Archivo online de mazos Vintage #VSubmenuTutorial lblTutorial=Tutorial lblTutorialMode=Modo Tutorial @@ -933,7 +933,7 @@ lblSideboard=Banquillo lblNew=Nuevo lblOwned=Adquirida lblPower=Fuerza -ttPower=Power +ttPower=Fuerza lblPrice=Precio ttPrice=Precio lblRanking=Ranking @@ -1003,16 +1003,16 @@ lblEnableRoundBorder=Habilitar máscara de bordes redondeados nlEnableRoundBorder=Cuando está habilitado, las esquinas de las cartas se redondean (Preferiblemente Cartas con bordes completos). lblPreloadExtendedArtCards=Precargar cartas de arte extendido nlPreloadExtendedArtCards=Cuando está habilitado, carga previamente las cartas de arte ampliadas en la caché al iniciar el programa (Alto uso de RAM). -lblEnableMatchScrollIndicator=Match Scroll Indicator -nlEnableMatchScrollIndicator=When enabled, show the scroll indicator on the match screen. +lblMatchScrollIndicator=Indicador de desplazamiento del juego +nlMatchScrollIndicator=Cuando está habilitado, muestra el indicador de desplazamiento en la pantalla de juego. lblShowFPSDisplay=Mostrar FPS nlShowFPSDisplay=Cuando está habilitado, muestra los FPS (Experimental). lblEnableUnknownCards=Habilitar cartas desconocidas nlEnableUnknownCards=Habilitar que las cartas desconocidas se carguen en el Unknown Set. (Requiere reinicio) -lblEnableNonLegalCards=Enable Non-Legal Cards -nlEnableNonLegalCards=Enable Non-Legal Cards like Un-sets and PlayTest Cards. (Requires restart) -lblDisableCardImages=Disable Card Images -nlDisableCardImages=When enabled, Forge will not display card images. +lblEnableNonLegalCards=Habilitar cartas no legales +nlEnableNonLegalCards=Habilita cartas no legales como Un-Sets y cartas para testeo. (Requiere reinicio) +lblDisableCardImages=Desactivar imágenes de cartas +nlDisableCardImages=Cuando está habilitado, Forge no mostrará imágenes de tarjetas. lblExperimentalNetworkCompatibility=Compatibilidad de red experimental nlExperimentalNetworkCompatibility=Forge cambia a un flujo de red compatible. (Si no estás seguro, deshabilita esta opción) lblDisposeTextures=Desechar texturas @@ -1737,7 +1737,7 @@ lblSelectACardAttachSourceTo={0} - Selecciona una carta a la que anexar. #BidLifeEffect.java lblBidLife=Elige una puja más alta lblChooseStartingBid=Elige una apuesta inicial -lblDoYouWantTopBid=¿Quieres hacer una puja máxima? Puja actual \ +lblDoYouWantTopBid=Do you want to top bid? Current Bid \= lblTopBidWithValueLife=puja más alta con {0} de vida #BondEffect.java lblSelectACardPair=Selecciona una carta para emparejarla con @@ -1913,9 +1913,9 @@ lblFaceDownCardCantTurnFaceUp=La carta boca abajo no se puede girar boca arriba #ShuffleEffect.java lblHaveTargetShuffle=¿Ha barajado {0}? #SubgameEffect.java -lblSubgameStart=Subgame started by {0}''s effect. -lblSubgameEnd=Subgame ended. {0} wins. {1} loses. -lblSubgameEndDraw=Subgame ended in a draw. +lblSubgameStart=Subjuego iniciado por el efecto de {0}. +lblSubgameEnd=Terminó el subjuego. {0} gana. {1} pierde. +lblSubgameEndDraw=El subjuego terminó en empate. #SurveilEffect.java lblDoYouWantSurveil=¿Quieres vigilar? #TapOrUntapAllEffect.java @@ -1932,6 +1932,8 @@ lblSelectCardToUntap=Selecciona las cartas que quieres enderezar lblVote=Votar lblCurrentVote=Votos actuales lblHowManyAdditionalVotesDoYouWant=¿Cuántos votos adicionales quieres? +#InputPayMana.java +lblChooseManaAbility=Elige una habilidad de maná: #VDevMenu.java lblUnlimitedLands=Jugar tierras ilimitadas lblGenerateMana=Generar maná @@ -1976,11 +1978,11 @@ lblLibraryZone=biblioteca lblGraveyardZone=cementerio lblBattlefieldZone=campo de batalla lblExileZone=exilio -lblFlashbackZone=flashback +lblFlashbackZone=restrospectiva lblCommandZone=mando lblStackZone=pila lblSideboardZone=banquillo -lblAnteZone=ante +lblAnteZone=apuesta lblSchemeDeckZone=mazo scheme lblPlanarDeckZone=mazo planar lblSubgameZone=subjuego