| 922 | } |
| 923 | |
| 924 | public boolean canTransform(SpellAbility cause) { |
| 925 | if (isFaceDown()) { |
| 926 | return false; |
| 927 | } |
| 928 | Card transformCard = this; |
| 929 | if (hasMergedCard()) { |
| 930 | boolean hasTransformCard = false; |
| 931 | for (final Card c : getMergedCards()) { |
| 932 | if (c.isTransformable()) { |
| 933 | hasTransformCard = true; |
| 934 | transformCard = c; |
| 935 | break; |
| 936 | } |
| 937 | } |
| 938 | if (!hasTransformCard) { |
| 939 | return false; |
| 940 | } |
| 941 | } else if (!isTransformable()) { |
| 942 | return false; |
| 943 | } |
| 944 | |
| 945 | // below only when in play |
| 946 | if (!isInPlay()) { |
| 947 | return true; |
| 948 | } |
| 949 | |
| 950 | CardStateName destState = transformCard.backside ? CardStateName.Original : CardStateName.Backside; |
| 951 | |
| 952 | // use Original State for the transform check |
| 953 | if (!transformCard.getOriginalState(destState).getType().isPermanent()) { |
| 954 | return false; |
| 955 | } |
| 956 | |
| 957 | return !StaticAbilityCantTransform.cantTransform(this, cause); |
| 958 | } |
| 959 | |
| 960 | @Override |
| 961 | public final String getName() { |