Browse Source

新增能力牌:要认真了,调整了一些卡片,增加了一些卡片。

Luxnk 6 years ago
parent
commit
204242fb6a
45 changed files with 858 additions and 38 deletions
  1. 10 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/MxmMod.java
  2. 71 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/action/StormRushAction.java
  3. 60 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/BeSerious_MXM.java
  4. 77 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/ComboStrike_MXM.java
  5. 74 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/DashKick_MXM.java
  6. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Defend_MXM.java
  7. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Dexterity_MXM.java
  8. 41 13
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Headbutt_MXM.java
  9. 64 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/JustPlay_MXM.java
  10. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/PoorWine_MXM.java
  11. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/PreciseStab_MXM.java
  12. 70 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/QuickMove_MXM.java
  13. 3 4
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/QuickStrike_MXM.java
  14. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/SavageStab_MXM.java
  15. 77 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/SeeThrough_MXM.java
  16. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/SpeedUp_MXM.java
  17. 2 7
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Stab_MXM.java
  18. 79 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/StormRush_MXM.java
  19. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Strength_MXM.java
  20. 84 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/TacticalTrans_MXM.java
  21. 1 1
      mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/WarmUp_MXM.java
  22. 9 2
      mxmmod/src/main/java/xyz/luxnk/mxmmod/characters/Mxm.java
  23. 62 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/power/BeSeriousPower.java
  24. 13 0
      mxmmod/src/main/java/xyz/luxnk/mxmmod/util/SpeedUpUtil.java
  25. BIN
      mxmmod/src/main/resources/img/cards/attack/claw.png
  26. BIN
      mxmmod/src/main/resources/img/cards/attack/dash_kick.png
  27. BIN
      mxmmod/src/main/resources/img/cards/attack/dash_kick_p.png
  28. BIN
      mxmmod/src/main/resources/img/cards/attack/headbutt_mxm.png
  29. BIN
      mxmmod/src/main/resources/img/cards/attack/headbutt_mxm_p.png
  30. BIN
      mxmmod/src/main/resources/img/cards/attack/stab.png
  31. BIN
      mxmmod/src/main/resources/img/cards/attack/stab_p.png
  32. BIN
      mxmmod/src/main/resources/img/cards/power/dexterity_mxm.png
  33. BIN
      mxmmod/src/main/resources/img/cards/power/dexterity_mxm_p.png
  34. BIN
      mxmmod/src/main/resources/img/cards/skill/defend_mxm.png
  35. 0 0
      mxmmod/src/main/resources/img/cards/skill/defend_mxm_p.png
  36. BIN
      mxmmod/src/main/resources/img/cards/skill/just_play.png
  37. BIN
      mxmmod/src/main/resources/img/cards/skill/just_play_p.png
  38. BIN
      mxmmod/src/main/resources/img/cards/skill/quick_move.png
  39. BIN
      mxmmod/src/main/resources/img/cards/skill/quick_move_p.png
  40. BIN
      mxmmod/src/main/resources/img/cards/skill/see_through.png
  41. BIN
      mxmmod/src/main/resources/img/cards/skill/see_through_p.png
  42. BIN
      mxmmod/src/main/resources/img/char/fallen.png
  43. 40 4
      mxmmod/src/main/resources/localization/mxm_cards-zh.json
  44. 6 0
      mxmmod/src/main/resources/localization/mxm_keywords-zh.json
  45. 8 0
      mxmmod/src/main/resources/localization/mxm_powers-zh.json

+ 10 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/MxmMod.java

@@ -155,13 +155,22 @@ public class MxmMod implements PostInitializeSubscriber,
         BaseMod.addCard(new Strike_MXM());
         BaseMod.addCard(new TwinStrike_MXM());
         BaseMod.addCard(new QuickStrike_MXM());
+        BaseMod.addCard(new ComboStrike_MXM());
+        BaseMod.addCard(new DashKick_MXM());
         BaseMod.addCard(new Stab_MXM());
         BaseMod.addCard(new SavageStab_MXM());
+        BaseMod.addCard(new PreciseStab_MXM());
+        BaseMod.addCard(new Headbutt_MXM());
+        BaseMod.addCard(new StormRush_MXM());
 
         // 技能牌
         BaseMod.addCard(new Defend_MXM());
         BaseMod.addCard(new WarmUp_MXM());
         BaseMod.addCard(new SpeedUp_MXM());
+        BaseMod.addCard(new JustPlay_MXM());
+        BaseMod.addCard(new QuickMove_MXM());
+        BaseMod.addCard(new SeeThrough_MXM());
+        BaseMod.addCard(new TacticalTrans_MXM());
         BaseMod.addCard(new PoorWine_MXM());
         BaseMod.addCard(new SadCat_MXM());
         BaseMod.addCard(new LuckyCat_MXM());
@@ -169,6 +178,7 @@ public class MxmMod implements PostInitializeSubscriber,
         // 能力牌
         BaseMod.addCard(new Strength_MXM());
         BaseMod.addCard(new Dexterity_MXM());
+        BaseMod.addCard(new BeSerious_MXM());
     }
 
     @Override

+ 71 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/action/StormRushAction.java

@@ -0,0 +1,71 @@
+package xyz.luxnk.mxmmod.action;
+
+import com.megacrit.cardcrawl.actions.AbstractGameAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.Settings;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+
+import java.util.Iterator;
+
+public class StormRushAction extends AbstractGameAction {
+
+    private AbstractPlayer player;
+    private int cardAmount;
+
+    public StormRushAction(int count) {
+        this.actionType = ActionType.CARD_MANIPULATION;
+        this.player = AbstractDungeon.player;
+        this.duration = Settings.ACTION_DUR_FAST;
+        this.cardAmount = count;
+    }
+
+    @Override
+    public void update() {
+
+        for (int i = 0; i < cardAmount; i++) {
+
+            if (this.duration == Settings.ACTION_DUR_FAST) {
+                boolean betterPossible = false;
+                boolean possible = false;
+                Iterator iterator = this.player.hand.group.iterator();
+                while (iterator.hasNext()) {
+                    AbstractCard c = (AbstractCard)iterator.next();
+                    if (c.type == AbstractCard.CardType.ATTACK) {
+                        if (c.costForTurn > 0) {
+                            betterPossible = true;
+                        } else if (c.cost > 0) {
+                            possible = true;
+                        }
+                    }
+                }
+
+                if (betterPossible || possible) {
+                    this.findAndModifyCard(betterPossible);
+                }
+            }
+        }
+
+        this.tickDuration();
+    }
+
+    private void findAndModifyCard(boolean better) {
+
+        AbstractCard c = this.player.hand.getRandomCard(AbstractCard.CardType.ATTACK, false);
+        if (better) {
+            if (c.costForTurn > 0) {
+                c.costForTurn = 0;
+                c.flash();
+            } else {
+                findAndModifyCard(better);
+            }
+        } else if (c.cost > 0) {
+            c.costForTurn = 0;
+            c.flash();
+        } else {
+            this.findAndModifyCard(better);
+        }
+
+    }
+
+}

+ 60 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/BeSerious_MXM.java

@@ -0,0 +1,60 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.power.BeSeriousPower;
+
+public class BeSerious_MXM extends CustomCard {
+
+    public static final String ID = "BeSerious_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/skill/quick_move.png";
+    private static final int COST = 3;
+
+    public BeSerious_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.POWER,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.RARE,
+                CardTarget.SELF
+        );
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+
+        AbstractDungeon.actionManager.addToBottom(
+                new ApplyPowerAction(
+                        abstractPlayer,
+                        abstractPlayer,
+                        new BeSeriousPower(abstractPlayer, 1),
+                        1));
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new BeSerious_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeBaseCost(2);
+        }
+    }
+}

+ 77 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/ComboStrike_MXM.java

@@ -0,0 +1,77 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.AbstractGameAction;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.actions.common.DamageAction;
+import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.cards.DamageInfo;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.power.SpeedUpPower;
+
+public class ComboStrike_MXM extends CustomCard {
+
+    public static final String ID = "ComboStrike_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/attack/strike_mxm.png";
+    private static final int COST = 2;
+    private static final int ATTACK_DMG = 8;
+    private static final int UPGRADE_PLUS_DMG = 4;
+    private static final int SPEED_AMOUNT = 1;
+
+    public ComboStrike_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.ATTACK,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.UNCOMMON,
+                CardTarget.ENEMY
+        );
+        this.baseDamage = ATTACK_DMG;
+        this.baseMagicNumber = SPEED_AMOUNT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+        AbstractDungeon.actionManager.addToBottom(
+                new DamageAction(
+                        abstractMonster,
+                        new DamageInfo(abstractPlayer, this.damage, this.damageTypeForTurn),
+                        AbstractGameAction.AttackEffect.SLASH_HORIZONTAL));
+        AbstractDungeon.actionManager.addToBottom(
+                new ApplyPowerAction(
+                        abstractPlayer,
+                        abstractPlayer,
+                        new SpeedUpPower(abstractPlayer, this.magicNumber),
+                        this.magicNumber));
+        AbstractDungeon.actionManager.addToBottom(
+                new MakeTempCardInHandAction(new QuickStrike_MXM(), 1)
+        );
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new ComboStrike_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeDamage(UPGRADE_PLUS_DMG);
+        }
+    }
+}

+ 74 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/DashKick_MXM.java

@@ -0,0 +1,74 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.AbstractGameAction;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.actions.common.DamageAction;
+import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.cards.DamageInfo;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.power.SpeedUpPower;
+
+public class DashKick_MXM extends CustomCard {
+
+    public static final String ID = "DashKick_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/attack/dash_kick.png";
+    private static final int COST = 1;
+    private static final int ATTACK_DMG = 6;
+    private static final int UPGRADE_PLUS_DMG = 3;
+    private static final int SPEED_AMOUNT = 1;
+
+    public DashKick_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                AbstractCard.CardType.ATTACK,
+                AbstractCardEnum.MXM_COLOR,
+                AbstractCard.CardRarity.UNCOMMON,
+                AbstractCard.CardTarget.ENEMY
+        );
+        this.baseDamage = ATTACK_DMG;
+        this.baseMagicNumber = SPEED_AMOUNT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+        AbstractDungeon.actionManager.addToBottom(
+                new DamageAction(
+                        abstractMonster,
+                        new DamageInfo(abstractPlayer, this.damage, this.damageTypeForTurn),
+                        AbstractGameAction.AttackEffect.SLASH_HORIZONTAL));
+        AbstractDungeon.actionManager.addToBottom(
+                new ApplyPowerAction(
+                        abstractPlayer,
+                        abstractPlayer,
+                        new SpeedUpPower(abstractPlayer, this.magicNumber),
+                        this.magicNumber));
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new DashKick_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeDamage(UPGRADE_PLUS_DMG);
+        }
+    }
+}

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Defend_MXM.java

@@ -19,7 +19,7 @@ import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
 public class Defend_MXM extends CustomCard {
 
     public static final String ID = "Defend_MXM";
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
+    public static final String IMG_PATH = "img/cards/skill/defend_mxm.png";
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Dexterity_MXM.java

@@ -19,7 +19,7 @@ public class Dexterity_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
+    public static final String IMG_PATH = "img/cards/power/dexterity_mxm.png";
     private static final int COST = 1;
     private static final int BASE_STR = 2;
 

+ 41 - 13
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Headbutt_MXM.java

@@ -3,6 +3,7 @@ package xyz.luxnk.mxmmod.cards;
 import basemod.abstracts.CustomCard;
 import basemod.helpers.BaseModCardTags;
 import com.megacrit.cardcrawl.actions.AbstractGameAction;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
 import com.megacrit.cardcrawl.actions.common.DamageAction;
 import com.megacrit.cardcrawl.cards.AbstractCard;
 import com.megacrit.cardcrawl.cards.DamageInfo;
@@ -11,21 +12,21 @@ import com.megacrit.cardcrawl.core.CardCrawlGame;
 import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
 import com.megacrit.cardcrawl.localization.CardStrings;
 import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import com.megacrit.cardcrawl.powers.WeakPower;
 import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.util.SpeedUpUtil;
 
-/**
- * @// TODO: 2019/8/13
- */
 public class Headbutt_MXM extends CustomCard {
 
     public static final String ID = "Headbutt_MXM";
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/attack/strike_mxm.png";
-    private static final int COST = 1;
-    private static final int ATTACK_DMG = 4;
-    private static final int UPGRADE_PLUS_DMG = 1;
+    public static final String IMG_PATH = "img/cards/attack/headbutt_mxm.png";
+    private static final int COST = 3;
+    private static final int ATTACK_DMG = 16;
+    private static final int UPGRADE_PLUS_DMG = 8;
+    private static final int WEAK_AMOUNT = 3;
 
     public Headbutt_MXM() {
         super(
@@ -39,23 +40,49 @@ public class Headbutt_MXM extends CustomCard {
                 CardRarity.COMMON,
                 CardTarget.ENEMY
         );
-        this.tags.add(BaseModCardTags.BASIC_STRIKE);
-        this.baseDamage = 4;
+        this.baseDamage = ATTACK_DMG;
+        this.baseMagicNumber = WEAK_AMOUNT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void triggerOnOtherCardPlayed(AbstractCard c) {
+        super.triggerOnOtherCardPlayed(c);
+        updateCost();
+    }
+
+    @Override
+    public void triggerWhenDrawn() {
+        super.triggerWhenDrawn();
+        updateCost();
+    }
+
+    public void updateCost() {
+        if (AbstractDungeon.player.hasPower("SpeedUpPower")) {
+            int speed = AbstractDungeon.player.getPower("SpeedUpPower").amount;
+            if (speed > COST) {
+                speed = COST;
+            }
+            this.setCostForTurn(this.cost - speed);
+        }
     }
 
     @Override
     public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
-        this.baseDamage = abstractPlayer.currentBlock + 4;
         AbstractDungeon.actionManager.addToBottom(
                 new DamageAction(
                         abstractMonster,
                         new DamageInfo(abstractPlayer, this.damage, this.damageTypeForTurn),
                         AbstractGameAction.AttackEffect.SLASH_HORIZONTAL));
         AbstractDungeon.actionManager.addToBottom(
-                new DamageAction(
+                new ApplyPowerAction(
                         abstractMonster,
-                        new DamageInfo(abstractPlayer, this.damage, this.damageTypeForTurn),
-                        AbstractGameAction.AttackEffect.SLASH_VERTICAL));
+                        abstractPlayer,
+                        new WeakPower(abstractMonster, this.magicNumber, false),
+                        this.magicNumber));
+        /*if (this.cost < COST) {
+            SpeedUpUtil.useSpeed(AbstractDungeon.player, COST - this.cost);
+        }*/
     }
 
     @Override
@@ -68,6 +95,7 @@ public class Headbutt_MXM extends CustomCard {
         if (!this.upgraded) {
             upgradeName();
             upgradeDamage(UPGRADE_PLUS_DMG);
+            upgradeMagicNumber(1);
         }
     }
 }

+ 64 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/JustPlay_MXM.java

@@ -0,0 +1,64 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.common.DrawCardAction;
+import com.megacrit.cardcrawl.actions.common.GainBlockAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+
+public class JustPlay_MXM extends CustomCard {
+
+    public static final String ID = "JustPlay_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/skill/just_play.png";
+    private static final int COST = 1;
+    private static final int BLOCK_AMT = 5;
+    private static final int UPGRADE_PLUS_BLOCK = 3;
+    private static final int CARD_AMT = 2;
+
+    public JustPlay_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.SKILL,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.COMMON,
+                CardTarget.SELF
+        );
+        this.baseBlock = BLOCK_AMT;
+        this.baseMagicNumber = CARD_AMT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+
+        AbstractDungeon.actionManager.addToBottom(
+                new GainBlockAction(abstractPlayer, abstractPlayer, this.block)
+        );
+        AbstractDungeon.actionManager.addToBottom(new DrawCardAction(abstractPlayer, this.magicNumber));
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new JustPlay_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeBlock(UPGRADE_PLUS_BLOCK);
+        }
+    }
+}

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/PoorWine_MXM.java

@@ -44,7 +44,7 @@ public class PoorWine_MXM extends CustomCard {
     @Override
     public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
 
-        int dazedCount = new Random().random(1, 6);
+        int dazedCount = new Random().random(1, 5);
         System.out.println("酒品极差:随机数值为:" + dazedCount);
         AbstractDungeon.actionManager.addToBottom(
                 new MakeTempCardInDrawPileAction(

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/PreciseStab_MXM.java

@@ -19,7 +19,7 @@ public class PreciseStab_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/attack/strike_mxm.png";
+    public static final String IMG_PATH = "img/cards/attack/stab.png";
     private static final int COST = 2;
     private static final int ATTACK_DMG = 9;
     private static final int UPGRADE_PLUS_DMG = 3;

+ 70 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/QuickMove_MXM.java

@@ -0,0 +1,70 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.actions.common.GainBlockAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.power.SpeedUpPower;
+
+public class QuickMove_MXM extends CustomCard {
+
+    public static final String ID = "QuickMove_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/skill/quick_move.png";
+    private static final int COST = 1;
+    private static final int BLOCK_AMT = 7;
+    private static final int UPGRADE_PLUS_BLOCK = 4;
+    private static final int SPEED_AMT = 1;
+
+    public QuickMove_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.SKILL,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.COMMON,
+                CardTarget.SELF
+        );
+        this.baseBlock = BLOCK_AMT;
+        this.baseMagicNumber = SPEED_AMT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+
+        AbstractDungeon.actionManager.addToBottom(
+                new GainBlockAction(abstractPlayer, abstractPlayer, this.block)
+        );
+        AbstractDungeon.actionManager.addToBottom(
+                new ApplyPowerAction(
+                        abstractPlayer,
+                        abstractPlayer,
+                        new SpeedUpPower(abstractPlayer, this.magicNumber),
+                        this.magicNumber));
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new QuickMove_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeBlock(UPGRADE_PLUS_BLOCK);
+        }
+    }
+}

+ 3 - 4
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/QuickStrike_MXM.java

@@ -1,7 +1,6 @@
 package xyz.luxnk.mxmmod.cards;
 
 import basemod.abstracts.CustomCard;
-import basemod.helpers.BaseModCardTags;
 import com.megacrit.cardcrawl.actions.AbstractGameAction;
 import com.megacrit.cardcrawl.actions.common.DamageAction;
 import com.megacrit.cardcrawl.actions.common.DrawCardAction;
@@ -21,8 +20,8 @@ public class QuickStrike_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
-    private static final int COST = 1;
+    public static final String IMG_PATH = "img/cards/attack/strike_mxm.png";
+    private static final int COST = 0;
     private static final int ATTACK_DMG = 4;
     private static final int UPGRADE_PLUS_DMG = 2;
     private static final int SPEED_COUNT = 3;
@@ -56,7 +55,7 @@ public class QuickStrike_MXM extends CustomCard {
 
     @Override
     public AbstractCard makeCopy() {
-        return new TwinStrike_MXM();
+        return new QuickStrike_MXM();
     }
 
     @Override

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/SavageStab_MXM.java

@@ -18,7 +18,7 @@ public class SavageStab_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/attack/strike_mxm.png";
+    public static final String IMG_PATH = "img/cards/attack/stab.png";
     private static final int COST = 2;
     private static final int ATTACK_DMG = 16;
     private static final int UPGRADE_PLUS_DMG = 6;

+ 77 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/SeeThrough_MXM.java

@@ -0,0 +1,77 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import com.megacrit.cardcrawl.powers.DexterityPower;
+import com.megacrit.cardcrawl.vfx.ThoughtBubble;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.power.SpeedUpPower;
+
+public class SeeThrough_MXM extends CustomCard {
+
+    public static final String ID = "SeeThrough_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/skill/see_through.png";
+    private static final int COST = 1;
+    private static final int DEX_AMT = 2;
+    private static final int UPGRADE_DEX_AMT = 2;
+    private static final int SPEED_AMT = 1;
+
+    public SeeThrough_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.SKILL,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.UNCOMMON,
+                CardTarget.SELF_AND_ENEMY
+        );
+        this.baseMagicNumber = DEX_AMT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+
+        if (abstractMonster.getIntentBaseDmg() >= 0) {
+            AbstractDungeon.actionManager.addToBottom(
+                    new ApplyPowerAction(
+                            abstractPlayer,
+                            abstractPlayer,
+                            new DexterityPower(abstractPlayer, this.magicNumber),
+                            this.magicNumber));
+            AbstractDungeon.actionManager.addToBottom(
+                    new ApplyPowerAction(
+                            abstractPlayer,
+                            abstractPlayer,
+                            new SpeedUpPower(abstractPlayer, SPEED_AMT),
+                            SPEED_AMT));
+        } else {
+            AbstractDungeon.effectList.add(new ThoughtBubble(AbstractDungeon.player.dialogX, AbstractDungeon.player.dialogY, 3.0F, TEXT[0], true));
+        }
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new SeeThrough_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeMagicNumber(UPGRADE_DEX_AMT);
+        }
+    }
+}

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/SpeedUp_MXM.java

@@ -20,7 +20,7 @@ public class SpeedUp_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
+    public static final String IMG_PATH = "img/cards/skill/quick_move.png";
     private static final int COST = 1;
     private static final int SPEED_AMOUNT = 2;
 

+ 2 - 7
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Stab_MXM.java

@@ -14,18 +14,13 @@ import com.megacrit.cardcrawl.monsters.AbstractMonster;
 import com.megacrit.cardcrawl.vfx.combat.CleaveEffect;
 import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
 
-/**
- * 旋风斩击
- * cost 2
- * 对所有敌人造成12点伤害 → 对所有敌人造成18点伤害
- */
 public class Stab_MXM extends CustomCard {
 
     public static final String ID = "Stab_MXM";
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
+    public static final String IMG_PATH = "img/cards/attack/stab.png";
     private static final int COST = 2;
     private static final int ATTACK_DMG = 12;
     private static final int UPGRADE_PLUS_DMG = 6;
@@ -40,7 +35,7 @@ public class Stab_MXM extends CustomCard {
                 CardType.ATTACK,
                 AbstractCardEnum.MXM_COLOR,
                 CardRarity.COMMON,
-                CardTarget.ENEMY
+                CardTarget.ALL_ENEMY
         );
         this.baseDamage = ATTACK_DMG;
         this.isMultiDamage = true;

+ 79 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/StormRush_MXM.java

@@ -0,0 +1,79 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.AbstractGameAction;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.actions.common.DamageAction;
+import com.megacrit.cardcrawl.actions.unique.MadnessAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.cards.DamageInfo;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import com.megacrit.cardcrawl.powers.DoubleTapPower;
+import xyz.luxnk.mxmmod.action.StormRushAction;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+import xyz.luxnk.mxmmod.util.SpeedUpUtil;
+
+public class StormRush_MXM extends CustomCard {
+
+    public static final String ID = "StormRush_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/attack/strike_mxm.png";
+    private static final int COST = 2;
+    private static final int ATTACK_DMG = 15;
+    private static final int CARD_AMOUNT = 1;
+    private static final int SPEED_COUNT = 6;
+
+    public StormRush_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.ATTACK,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.RARE,
+                CardTarget.ENEMY
+        );
+        this.baseDamage = ATTACK_DMG;
+        this.baseMagicNumber = CARD_AMOUNT;
+        this.magicNumber = this.baseMagicNumber;
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+        AbstractDungeon.actionManager.addToBottom(
+                new DamageAction(
+                        abstractMonster,
+                        new DamageInfo(abstractPlayer, this.damage, this.damageTypeForTurn),
+                        AbstractGameAction.AttackEffect.SLASH_HORIZONTAL));
+        AbstractDungeon.actionManager.addToBottom(
+                new ApplyPowerAction(
+                        abstractPlayer,
+                        abstractPlayer,
+                        new DoubleTapPower(abstractPlayer, this.magicNumber),
+                        this.magicNumber));
+        if (SpeedUpUtil.checkSpeed(abstractPlayer, SPEED_COUNT)) {
+            AbstractDungeon.actionManager.addToBottom(new StormRushAction(this.magicNumber));
+        }
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new StormRush_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeMagicNumber(1);
+        }
+    }
+}

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/Strength_MXM.java

@@ -19,7 +19,7 @@ public class Strength_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
+    public static final String IMG_PATH = "img/cards/power/dexterity_mxm.png";
     private static final int COST = 1;
     private static final int BASE_STR = 2;
 

+ 84 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/TacticalTrans_MXM.java

@@ -0,0 +1,84 @@
+package xyz.luxnk.mxmmod.cards;
+
+import basemod.abstracts.CustomCard;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.CardStrings;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import com.megacrit.cardcrawl.powers.DexterityPower;
+import com.megacrit.cardcrawl.powers.StrengthPower;
+import xyz.luxnk.mxmmod.patches.AbstractCardEnum;
+
+public class TacticalTrans_MXM extends CustomCard {
+
+    public static final String ID = "TacticalTrans_MXM";
+    private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
+    public static final String NAME = cardStrings.NAME;
+    public static final String DESCRIPTION = cardStrings.DESCRIPTION;
+    public static final String IMG_PATH = "img/cards/skill/poor_wine.png";
+    private static final int COST = 1;
+
+    public TacticalTrans_MXM() {
+        super(
+                ID,
+                NAME,
+                IMG_PATH,
+                COST,
+                DESCRIPTION,
+                CardType.SKILL,
+                AbstractCardEnum.MXM_COLOR,
+                CardRarity.UNCOMMON,
+                CardTarget.SELF
+        );
+    }
+
+    @Override
+    public void use(AbstractPlayer abstractPlayer, AbstractMonster abstractMonster) {
+
+        int oldStr = 0;
+        int oldDex = 0;
+        if (abstractPlayer.hasPower("Strength")) {
+            oldStr = abstractPlayer.getPower("Strength").amount;
+            AbstractDungeon.actionManager.addToBottom(
+                    new RemoveSpecificPowerAction(abstractPlayer, abstractPlayer, "Strength"));
+        }
+        if (abstractPlayer.hasPower("Dexterity")) {
+            oldDex = abstractPlayer.getPower("Dexterity").amount;
+            AbstractDungeon.actionManager.addToBottom(
+                    new RemoveSpecificPowerAction(abstractPlayer, abstractPlayer, "Dexterity"));
+        }
+        if (oldStr != 0) {
+            AbstractDungeon.actionManager.addToBottom(
+                    new ApplyPowerAction(
+                            abstractPlayer,
+                            abstractPlayer,
+                            new DexterityPower(abstractPlayer, oldStr),
+                            this.magicNumber));
+        }
+        if (oldDex != 0) {
+            AbstractDungeon.actionManager.addToBottom(
+                    new ApplyPowerAction(
+                            abstractPlayer,
+                            abstractPlayer,
+                            new StrengthPower(abstractPlayer, oldDex),
+                            this.magicNumber));
+        }
+    }
+
+    @Override
+    public AbstractCard makeCopy() {
+        return new TacticalTrans_MXM();
+    }
+
+    @Override
+    public void upgrade() {
+        if (!this.upgraded) {
+            upgradeName();
+            upgradeBaseCost(0);
+        }
+    }
+}

+ 1 - 1
mxmmod/src/main/java/xyz/luxnk/mxmmod/cards/WarmUp_MXM.java

@@ -18,7 +18,7 @@ public class WarmUp_MXM extends CustomCard {
     private static final CardStrings cardStrings = CardCrawlGame.languagePack.getCardStrings(ID);
     public static final String NAME = cardStrings.NAME;
     public static final String DESCRIPTION = cardStrings.DESCRIPTION;
-    public static final String IMG_PATH = "img/cards/mxmCard.png";
+    public static final String IMG_PATH = "img/cards/power/dexterity_mxm.png";
     private static final int COST = 0;
     private static final int DEX_AMOUNT = 2;
     private static final int UPGRADE_PLUS_DEX = 3;

+ 9 - 2
mxmmod/src/main/java/xyz/luxnk/mxmmod/characters/Mxm.java

@@ -78,7 +78,7 @@ public class Mxm extends CustomPlayer {
         retVal.add("Strike_MXM");
         retVal.add("Strike_MXM");
         retVal.add("Strike_MXM");
-        retVal.add("QuickStrike_MXM");
+        retVal.add("ComboStrike_MXM");
         retVal.add("TwinStrike_MXM");
         retVal.add("Defend_MXM");
         retVal.add("Defend_MXM");
@@ -182,7 +182,14 @@ public class Mxm extends CustomPlayer {
 
     @Override
     public AbstractGameAction.AttackEffect[] getSpireHeartSlashEffect() {
-        return new AbstractGameAction.AttackEffect[0];
+        return new AbstractGameAction.AttackEffect[]{
+                AbstractGameAction.AttackEffect.SLASH_HEAVY,
+                AbstractGameAction.AttackEffect.SLASH_HORIZONTAL,
+                AbstractGameAction.AttackEffect.SLASH_DIAGONAL,
+                AbstractGameAction.AttackEffect.SLASH_HEAVY,
+                AbstractGameAction.AttackEffect.SLASH_HORIZONTAL,
+                AbstractGameAction.AttackEffect.SLASH_DIAGONAL
+        };
     }
 
     @Override

+ 62 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/power/BeSeriousPower.java

@@ -0,0 +1,62 @@
+package xyz.luxnk.mxmmod.power;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
+import com.megacrit.cardcrawl.actions.utility.UseCardAction;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.core.AbstractCreature;
+import com.megacrit.cardcrawl.core.CardCrawlGame;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.localization.PowerStrings;
+import com.megacrit.cardcrawl.powers.AbstractPower;
+
+public class BeSeriousPower extends AbstractPower {
+
+    public static final String POWER_ID = "BeSeriousPower";
+    private static final PowerStrings powerStrings = CardCrawlGame.languagePack.getPowerStrings(POWER_ID);
+    public static final String NAME = powerStrings.NAME;
+    public static final String[] DESCRIPTIONS = powerStrings.DESCRIPTIONS;
+
+    private int count = 0;
+
+    public BeSeriousPower(AbstractCreature owner, int amount) {
+        this.name = NAME;
+        this.ID = POWER_ID;
+        this.owner = owner;
+        this.amount = amount;
+        this.type = PowerType.BUFF;
+        updateDescription();
+        this.img = new Texture("img/powers/generator.png");
+    }
+
+    @Override
+    public void onUseCard(AbstractCard card, UseCardAction action) {
+        if (card.type == AbstractCard.CardType.SKILL) {
+            count++;
+            if (count == 3) {
+                AbstractDungeon.actionManager.addToBottom(
+                        new ApplyPowerAction(
+                                AbstractDungeon.player,
+                                AbstractDungeon.player,
+                                new SpeedUpPower(AbstractDungeon.player, this.amount),
+                                this.amount)
+                );
+                this.flash();
+                count = 0;
+            }
+            updateDescription();
+        }
+    }
+
+    @Override
+    public void updateDescription() {
+        int needCardCount = 3 - count;
+        this.description = DESCRIPTIONS[0] + this.amount + DESCRIPTIONS[1] + needCardCount + DESCRIPTIONS[2];
+    }
+
+    @Override
+    public void atEndOfRound() {
+        count = 0;
+        updateDescription();
+    }
+}

+ 13 - 0
mxmmod/src/main/java/xyz/luxnk/mxmmod/util/SpeedUpUtil.java

@@ -1,6 +1,9 @@
 package xyz.luxnk.mxmmod.util;
 
+import com.megacrit.cardcrawl.actions.common.ReducePowerAction;
+import com.megacrit.cardcrawl.actions.common.RemoveSpecificPowerAction;
 import com.megacrit.cardcrawl.characters.AbstractPlayer;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
 import com.megacrit.cardcrawl.powers.AbstractPower;
 
 import java.util.Iterator;
@@ -21,4 +24,14 @@ public class SpeedUpUtil {
         return false;
     }
 
+    public static void useSpeed(AbstractPlayer player, int count) {
+        if (player.hasPower("SpeedUpPower")) {
+            if (player.getPower("SpeedUpPower").amount < count) {
+                AbstractDungeon.actionManager.addToBottom(new RemoveSpecificPowerAction(player, player, "SpeedUpPower"));
+            } else {
+                AbstractDungeon.actionManager.addToBottom(new ReducePowerAction(player, player, "SpeedUpPower", count));
+            }
+        }
+    }
+
 }

BIN
mxmmod/src/main/resources/img/cards/attack/claw.png


BIN
mxmmod/src/main/resources/img/cards/attack/dash_kick.png


BIN
mxmmod/src/main/resources/img/cards/attack/dash_kick_p.png


BIN
mxmmod/src/main/resources/img/cards/attack/headbutt_mxm.png


BIN
mxmmod/src/main/resources/img/cards/attack/headbutt_mxm_p.png


BIN
mxmmod/src/main/resources/img/cards/attack/stab.png


BIN
mxmmod/src/main/resources/img/cards/attack/stab_p.png


BIN
mxmmod/src/main/resources/img/cards/power/dexterity_mxm.png


BIN
mxmmod/src/main/resources/img/cards/power/dexterity_mxm_p.png


BIN
mxmmod/src/main/resources/img/cards/skill/defend_mxm.png


mxmmod/src/main/resources/img/cards/skill/defend.png → mxmmod/src/main/resources/img/cards/skill/defend_mxm_p.png


BIN
mxmmod/src/main/resources/img/cards/skill/just_play.png


BIN
mxmmod/src/main/resources/img/cards/skill/just_play_p.png


BIN
mxmmod/src/main/resources/img/cards/skill/quick_move.png


BIN
mxmmod/src/main/resources/img/cards/skill/quick_move_p.png


BIN
mxmmod/src/main/resources/img/cards/skill/see_through.png


BIN
mxmmod/src/main/resources/img/cards/skill/see_through_p.png


BIN
mxmmod/src/main/resources/img/char/fallen.png


+ 40 - 4
mxmmod/src/main/resources/localization/mxm_cards-zh.json

@@ -3,18 +3,22 @@
     "NAME": "爪击",
     "DESCRIPTION": "造成 !D! 点伤害。"
   },
-  "Defend_MXM": {
-    "NAME": "防御",
-    "DESCRIPTION": "获得 !B! 点 格挡 。"
-  },
   "TwinStrike_MXM": {
     "NAME": "双重爪击",
     "DESCRIPTION": "造成 !D! 点伤害两次。"
   },
+  "ComboStrike_MXM": {
+    "NAME": "连续爪击",
+    "DESCRIPTION": "造成 !D! 点伤害。 获得 !M! 层 加速 。将1张 快速爪击 加入手牌。"
+  },
   "QuickStrike_MXM": {
     "NAME": "快速爪击",
     "DESCRIPTION": "造成 !D! 点伤害。 NL 加速 3:抽一张牌。"
   },
+  "DashKick_MXM": {
+    "NAME": "冲刺踢击",
+    "DESCRIPTION": "造成 !D! 点伤害。 获得 !M! 层 加速 。"
+  },
   "Stab_MXM": {
     "NAME": "穿刺",
     "DESCRIPTION": "对所有敌人造成 !D! 点伤害。"
@@ -27,8 +31,20 @@
     "NAME": "精准钉击",
     "DESCRIPTION": "造成 !D! 点伤害。 NL 加速 3:再造成6点伤害。"
   },
+  "Headbutt_MXM": {
+    "NAME": "头槌",
+    "DESCRIPTION": "你每有一层 加速 ,这张牌在这回合耗能就减少1 [G] 。 NL 造成 !D! 点伤害。 给予 !M! 层 虚弱 。"
+  },
+  "StormRush_MXM": {
+    "NAME": "旋风连击",
+    "DESCRIPTION": "造成 !D! 点伤害,这个回合的下 !M! 张攻击牌将打出两次。 加速 6:手牌随机 !M! 张攻击牌耗能变成0"
+  },
 
 
+  "Defend_MXM": {
+    "NAME": "防御",
+    "DESCRIPTION": "获得 !B! 点 格挡 。"
+  },
   "WarmUp_MXM": {
     "NAME": "准备运动",
     "DESCRIPTION": "获得 !M! 点 敏捷 。你的回合结束时,失去 !M! 点 敏捷 。"
@@ -37,6 +53,22 @@
     "NAME": "加速",
     "DESCRIPTION": "获得 !M! 层 加速 。"
   },
+  "JustPlay_MXM": {
+    "NAME": "玩耍",
+    "DESCRIPTION": "获得 !B! 点 格挡 。抽 !M! 张牌。"
+  },
+  "QuickMove_MXM": {
+    "NAME": "高速移动",
+    "DESCRIPTION": "获得 !B! 点 格挡 。获得 !M! 层 加速 。"
+  },
+  "TacticalTrans_MXM": {
+    "NAME": "战术变换",
+    "DESCRIPTION": "将自身的力量加成和敏捷加成相互转换。"
+  },
+  "SeeThrough_MXM": {
+    "NAME": "看破",
+    "DESCRIPTION": "如果一名敌人的意图是攻击,获得 !M! 点 敏捷 ,获得1层 加速 。"
+  },
   "PoorWine_MXM": {
     "NAME": "酒品极差",
     "DESCRIPTION": "将6张 晕眩 随机加入抽牌堆与弃牌堆。 NL 在抽牌堆、弃牌堆中各选一张卡加入手牌。",
@@ -61,5 +93,9 @@
   "Dexterity_MXM": {
     "NAME": "灵巧",
     "DESCRIPTION": "获得 !M! 点 敏捷 。"
+  },
+  "BeSerious_MXM": {
+    "NAME": "要认真了",
+    "DESCRIPTION": "你每在同一回合内打出3张 技能牌 ,就获得1层 加速 。"
   }
 }

+ 6 - 0
mxmmod/src/main/resources/localization/mxm_keywords-zh.json

@@ -17,6 +17,12 @@
         "加速"
       ],
       "DESCRIPTION": "每一层加速使你从攻击受到的伤害减少10%(最多减少100%),并且当达到一定层级的加速时可以激活一些卡牌新的效果。 NL 受到攻击伤害而失去生命时加速会减少1层。 NL 每一轮结束时加速会减少1层。"
+    },
+    {
+      "NAMES": [
+        "快速爪击"
+      ],
+      "DESCRIPTION": "快速爪击是一张 #b0 耗能攻击牌。"
     }
   ]
 }

+ 8 - 0
mxmmod/src/main/resources/localization/mxm_powers-zh.json

@@ -5,5 +5,13 @@
       "从 #y攻击 受到的伤害减少 #b",
       " 。"
     ]
+  },
+  "BeSeriousPower": {
+    "NAME": "要认真了",
+    "DESCRIPTIONS": [
+      "你每在同一回合内打出3张 #y技能牌 ,获得 #b",
+      " 层 #y加速 。还需打出",
+      "张技能牌来获得增益。"
+    ]
   }
 }