Page 1 of 2

Forge version 1.4.3

PostPosted: 28 Jun 2013, 13:00
by Chris H.
Tentative target release date: Friday July 12.

Re: Forge version 1.4.3

PostPosted: 28 Jun 2013, 15:30
by Max mtg
Most wonderful!
Thanks for release, Chris!

Re: Forge version 1.4.3

PostPosted: 06 Jul 2013, 17:26
by Agetian
OK guys, I'm off on a two-week vacation, so I most likely won't be around by the time 1.4.3 is released. Good luck to everyone with the current projects! I'll finish up my stuff (foils would be the first on the list) when I'm back, so that'll likely go into v1.4.4+. The current state of things for my projects looks fine (foils are unfinished but should work at least as well as they did before in Random mode, with the difference that the cards from editions which never ever had foil cards in them will not be foiled anymore; the Planechase AI is basic but functional and I've played a couple dozen matches against the AI so I don't think there are any critical breaking bugs; the AI profiles are not quite up to their full power yet but whatever went in during this time is functional as well and seems to work fine).

It looks like there's currently a number of regressions in Forge, some of them rather serious. Please take these threads into consideration when deciding if there are any showstopper bugs potentially blocking the release:
viewtopic.php?f=52&t=10442
viewtopic.php?f=52&t=11012
Now, some of it may not actually be as critical to become a blocker, but I believe the event-related issues causing visual and audial disruption, as well as rule regressions, are better addressed before the release (just my two cents).

I'll see if I can do some playtesting/reporting during the vacation trip, but I most likely won't be on often (and I won't be coding, sadly...). Still, I have NetBeans + the Forge SVN checked out on my laptop just in case, and I'll be back soon and I'll continue my work on the project with you in a couple weeks from now! See you soon!

- Agetian

Re: Forge version 1.4.3

PostPosted: 07 Jul 2013, 14:46
by Max mtg
So... what exactly remains 'disrupted' after r22478?

Re: Forge version 1.4.3

PostPosted: 08 Jul 2013, 00:02
by friarsol
Max mtg wrote:So... what exactly remains 'disrupted' after r22478?
Canceling spells/undoing mana payments still doesn't redraw.

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 15:17
by friarsol
If we're planning a M14 release for Friday, have all of the M14 rulings been updated?

# of Lands You can Play - Done (Existing)
Sideboarding - Done (Sol)

Indestructible now a Keyword (Code Changes + Script updates?) - Done (Sloth)
Rename Unblockable to can't be blocked. - Done via Card Detail Panel (Swordshine)
Legendary/Planeswalker Rule - Done (Max)

Edit: Updating list

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 15:26
by Max mtg
Legendary/Planeswalker rule handling is rediculously easy.
Code: Select all
Index: main/java/forge/game/GameAction.java
===================================================================
--- main/java/forge/game/GameAction.java   (revision 22532)
+++ main/java/forge/game/GameAction.java   (working copy)
@@ -902,14 +902,16 @@
                 game.getStack().chooseOrderOfSimultaneousStackEntryAll();
             }
 
-            if (this.handleLegendRule()) {
-                checkAgain = true;
+            for(Player p : game.getPlayers() ) {
+                if (this.handleLegendRule(p)) {
+                    checkAgain = true;
+                }
+   
+                if (this.handlePlaneswalkerRule(p)) {
+                    checkAgain = true;
+                }
             }
 
-            if (this.handlePlaneswalkerRule()) {
-                checkAgain = true;
-            }
-
             if (!checkAgain) {
                 break; // do not continue the loop
             }
@@ -1139,9 +1141,9 @@
      * destroyPlaneswalkers.
      * </p>
      */
-    private boolean handlePlaneswalkerRule() {
+    private boolean handlePlaneswalkerRule(Player p) {
         // get all Planeswalkers
-        final List<Card> list = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.PLANEWALKERS);
+        final List<Card> list = CardLists.filter(p.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.PLANEWALKERS);
 
         boolean recheck = false;
         Card c;
@@ -1179,8 +1181,8 @@
      * destroyLegendaryCreatures.
      * </p>
      */
-    private boolean handleLegendRule() {
-        final List<Card> a = CardLists.getType(game.getCardsIn(ZoneType.Battlefield), "Legendary");
+    private boolean handleLegendRule(Player p) {
+        final List<Card> a = CardLists.getType(p.getCardsIn(ZoneType.Battlefield), "Legendary");
         if (a.isEmpty() || game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)) {
             return false;
         }
@@ -1190,7 +1192,7 @@
             a.removeAll(yamazaki);
         }
         while (!a.isEmpty()) {
-            List<Card> b = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals(a.get(0).getName()));
+            List<Card> b = CardLists.filter(p.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals(a.get(0).getName()));
             b = CardLists.getType(b, "Legendary");
             b = CardLists.filter(b, new Predicate<Card>() {
                 @Override
Didn't commit it

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 15:53
by jsv
Max mtg wrote:Legendary/Planeswalker rule handling is rediculously easy.
Code: Select all
Index: main/java/forge/game/GameAction.java
===================================================================
--- main/java/forge/game/GameAction.java   (revision 22532)
+++ main/java/forge/game/GameAction.java   (working copy)
@@ -902,14 +902,16 @@
                 game.getStack().chooseOrderOfSimultaneousStackEntryAll();
             }
 
-            if (this.handleLegendRule()) {
-                checkAgain = true;
+            for(Player p : game.getPlayers() ) {
+                if (this.handleLegendRule(p)) {
+                    checkAgain = true;
+                }
+   
+                if (this.handlePlaneswalkerRule(p)) {
+                    checkAgain = true;
+                }
             }
 
-            if (this.handlePlaneswalkerRule()) {
-                checkAgain = true;
-            }
-
             if (!checkAgain) {
                 break; // do not continue the loop
             }
@@ -1139,9 +1141,9 @@
      * destroyPlaneswalkers.
      * </p>
      */
-    private boolean handlePlaneswalkerRule() {
+    private boolean handlePlaneswalkerRule(Player p) {
         // get all Planeswalkers
-        final List<Card> list = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.PLANEWALKERS);
+        final List<Card> list = CardLists.filter(p.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.PLANEWALKERS);
 
         boolean recheck = false;
         Card c;
@@ -1179,8 +1181,8 @@
      * destroyLegendaryCreatures.
      * </p>
      */
-    private boolean handleLegendRule() {
-        final List<Card> a = CardLists.getType(game.getCardsIn(ZoneType.Battlefield), "Legendary");
+    private boolean handleLegendRule(Player p) {
+        final List<Card> a = CardLists.getType(p.getCardsIn(ZoneType.Battlefield), "Legendary");
         if (a.isEmpty() || game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLegendRule)) {
             return false;
         }
@@ -1190,7 +1192,7 @@
             a.removeAll(yamazaki);
         }
         while (!a.isEmpty()) {
-            List<Card> b = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals(a.get(0).getName()));
+            List<Card> b = CardLists.filter(p.getCardsIn(ZoneType.Battlefield), CardPredicates.nameEquals(a.get(0).getName()));
             b = CardLists.getType(b, "Legendary");
             b = CardLists.filter(b, new Predicate<Card>() {
                 @Override
Didn't commit it
Wouldn't this destroy all plainswalkers/legends with the same name belonging to a particular player? Under the new rules the player is supposed to choose one of them that stays on the battlefield while the rest is destroyed.

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 20:09
by Sloth
friarsol wrote:Indestructible now a Keyword (Code Changes + Script updates?)
Has been done.

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 21:30
by Max mtg
I've committed a slower-to-write but rightly implemented revision for this rule (r22539)

Please tell me how to handle Brothers Yamazaki under new rules? Should I enforce player to keep only one of them or two out of 3+ ?

Sloth, please pay a visit to the new class 'LegendaryRuleAi'... you'll probably want to improve it

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 22:46
by Marek14
Depends on how exactly is new legendary rule written, I've seen it also mentioned as "select one permanent to put into graveyard, repeat until there are no conflicts".

But I think that Brothers Yamazaki will definitely let you keep two since that is the whole point of the card.

Re: Forge version 1.4.3

PostPosted: 10 Jul 2013, 23:27
by friarsol
Here is some current speculation:

"All the expected (and some unexpected) M14 errata is already in Gatherer. My understanding is that updating it is a non-trivial process, so it's done all in one go, meaning Brothers Yamazaki is unlikely to receive errata. [...]
The only case in which the new version of the legend rule would cause an issue is when two players each control one Brothers Yamazaki, which is probably unusual enough that it's not worth trying to shoehorn a two-per-player onto the card."

But since comprehensive rules haven't been updated yet, noone is sure.

Basically it sounds like, if more than 2 Brothers are on the battlefield, if a player has more than one of them they choose one and the rest are placed in the graveyard. So 3 Brothers controlled by one player turns into 1 left, not into 2 as Marek surmises (I was thinking it would as well).

This is similar to the 2004 ruling, just with an odd twist:
"12/1/2004 If a third Brothers Yamazaki enters the battlefield, the Legend rule applies again and all three are put into graveyards."

Re: Forge version 1.4.3

PostPosted: 12 Jul 2013, 02:03
by swordshine
State-based action for Brothers Yamazaki: if there are exactly two permanents named Brothers Yamazaki on the battlefield, remove them from the check, otherwise apply the legend rule.

Re: Forge version 1.4.3

PostPosted: 12 Jul 2013, 02:36
by Max mtg
swordshine wrote:State-based action for Brothers Yamazaki: if there are exactly two permanents named Brothers Yamazaki on the battlefield, remove them from the check, otherwise apply the legend rule.
The code i commited reads quite the same :-)
There will remain only one if there were 3+ of them

Re: Forge version 1.4.3

PostPosted: 12 Jul 2013, 02:57
by swordshine
Max mtg wrote:The code i commited reads quite the same :-)
There will remain only one if there were 3+ of them
Current code cannot handle situation when each player has exactly two Brothers Yamazaki.