public override bool IsTargettable(TargettingQuery targetQuery) { bool valid = false; if (!creatureState.IsDead()) { ITargettingDescription desc = targetQuery.targettingDesc; if (desc.targettingType == TargettingType.EXCEPT) { ExceptTargetDescription exceptDesc = (ExceptTargetDescription)desc; desc = exceptDesc.targetDescription; } switch (desc.targetType) { case TargetType.CREATURES: case TargetType.PERMANENT: case TargetType.DAMAGEABLE: valid = true; break; } if (!targetQuery.ignoreUntouchable && HasKeyword(KeywordAttribute.UNTOUCHABLE)) { valid = false; } if (valid) { IQualifiableTargettingDescription qualifiableDesc = (IQualifiableTargettingDescription)desc; if (qualifiableDesc != null) { valid = qualifiableDesc.GetPlayerAlignment() == Alignment.NEUTRAL || (qualifiableDesc.GetPlayerAlignment() == GetAlignmentToPlayer(targetQuery.requestingPlayer)); IQualifierDescription qualifier = qualifiableDesc.qualifier; if (valid && qualifier != null) { switch (qualifier.qualifierType) { case QualifierType.NONE: break; case QualifierType.CREATURE_TYPE: { CreatureTypeQualifierDescription creatureQualifier = (CreatureTypeQualifierDescription)qualifier; valid = creatureQualifier.creatureType == card.cardData.GetCreatureType(); } break; default: valid = false; break; } } } } } return(valid); }