BOT: "new" mechanics (#1679)

* CardFactoryUtil.addStaticAbility support "Living metal" keyword

* GameActionUtil.getAlternativeCosts() add "More Than Meets the Eye"

* Keyword.LIVING_METAL and Keyword.MORE_THAN_MEETS_THE_EYE

* TypeLists add Robot

* AlternativeCost.MTMtE

* ultra_magnus_tactician_ultra_magnus_armored_carrier.txt

* CardSplitType.Convert

* CardStateName.Converted

* GameState.addCard Converted check

* DevModeCheats for Converted

* Card.changeCardState() add Convert mode

* Card.isConvertable()

* PaperCard.hasBackFace add Convert

* Card implement convertedTimestamp

* Card.keywordsToText add Living metal to list

* DamageDealEffect.internalDamageDeal move "ExcessSVar" for more flexibility

* ComputerUtil.choosePermanentsToSacrifice improve AI for Megatron

* megatron_tyrant_megatron_destructive_force.txt

* optimus_prime_hero_optimus_prime_autobot_leader.txt

* ChangeZoneEffect.changeKnownOriginResolve support "Converted"

* Card.changeCardState() fixup
This commit is contained in:
Northmoc
2022-10-17 12:04:06 -04:00
committed by GitHub
parent 16b52a3645
commit e00387f0fa
17 changed files with 175 additions and 11 deletions

View File

@@ -840,12 +840,13 @@ public class ComputerUtil {
String logic = source.getParamOrDefault("AILogic", "");
if (logic.startsWith("SacForDamage")) {
if (c.getNetPower() <= 0) {
final int damageAmt = logic.contains("cmc") ? c.getManaCost().getCMC() : c.getNetPower();
if (damageAmt <= 0) {
return false;
} else if (c.getNetPower() >= ai.getOpponentsSmallestLifeTotal()) {
} else if (damageAmt >= ai.getOpponentsSmallestLifeTotal()) {
return true;
} else if (logic.endsWith(".GiantX2") && c.getType().hasCreatureType("Giant")
&& c.getNetPower() * 2 >= ai.getOpponentsSmallestLifeTotal()) {
&& damageAmt * 2 >= ai.getOpponentsSmallestLifeTotal()) {
return true; // TODO: generalize this for any type and actually make the AI prefer giants?
}
}

View File

@@ -313,6 +313,8 @@ public abstract class GameState {
newText.append("|Meld");
} else if (c.getCurrentStateName().equals(CardStateName.Modal)) {
newText.append("|Modal");
} else if (c.getCurrentStateName().equals(CardStateName.Converted)) {
newText.append("|Converted");
}
if (c.getPlayerAttachedTo() != null) {