slay the spire杀戮尖塔mod制作(4)power、magicNumber

本文介绍能力写法与magicNumber的使用

power需要继承AbstractPower,其构造方法无参

静态方法规范图片路径

public static String makePowerPath(String id, int size) {
    if (size == 84) {
            return getImgPath() + "powers/" + id + "_84.png";
    } else {
        return size == 32 ? getImgPath() + "powers/" + id + "_32.png" : "ERROR!";
    }
}

写个抽象类

public abstract class AbstractModPower extends AbstractPower {
    protected String[] descriptions;
    public AbstractModPower(String id, AbstractCreature owner, int amount, PowerType type){
        this.ID = id;
        this.owner = owner;
        this.amount = amount;
        this.type = type;
        this.name = CardCrawlGame.languagePack.getPowerStrings(id).NAME;
        this.descriptions = CardCrawlGame.languagePack.getPowerStrings(id).DESCRIPTIONS;
        this.region128 = new TextureAtlas.AtlasRegion(ImageMaster.loadImage(ModInfo.makePowerPath(id.split(":")[1], 84)), 0, 0, 84, 84);
        this.region48 = new TextureAtlas.AtlasRegion(ImageMaster.loadImage(ModInfo.makePowerPath(id.split(":")[1], 32)), 0, 0, 32, 32);
        this.updateDescription();
    }
    public AbstractModPower(String id, AbstractCreature owner, PowerType type){
        this.ID = id;
        this.owner = owner;
        this.type = type;
        this.name = CardCrawlGame.languagePack.getPowerStrings(id).NAME;
        this.descriptions = CardCrawlGame.languagePack.getPowerStrings(id).DESCRIPTIONS;
        this.region128 = new TextureAtlas.AtlasRegion(ImageMaster.loadImage(ModInfo.makePowerPath(id.split(":")[1], 84)), 0, 0, 84, 84);
        this.region48 = new TextureAtlas.AtlasRegion(ImageMaster.loadImage(ModInfo.makePowerPath(id.split(":")[1], 32)), 0, 0, 32, 32);
        this.updateDescription();
    }
    public AbstractModPower(String id,AbstractCreature owner){
        this.ID = id;
        this.owner = owner;
        this.type = PowerType.BUFF;
        this.name = CardCrawlGame.languagePack.getPowerStrings(id).NAME;
        this.descriptions = CardCrawlGame.languagePack.getPowerStrings(id).DESCRIPTIONS;
        this.region128 = new TextureAtlas.AtlasRegion(ImageMaster.loadImage(ModInfo.makePowerPath(id.split(":")[1], 84)), 0, 0, 84, 84);
        this.region48 = new TextureAtlas.AtlasRegion(ImageMaster.loadImage(ModInfo.makePowerPath(id.split(":")[1], 32)), 0, 0, 32, 32);
        this.updateDescription();
    }
   


}

region128 region48是能力的不同分辨率的配图

写能力后记得配上32×32、84×84分辨率的p_name_32.png、p_name_84.png的图片

现在我们来写一张效果为“你的下1张攻击牌伤害翻倍”的1费能力牌(升级后次数+1)

可以先写本地化

{
    "Mod:DoubleDamagePower": {
        "NAME" : "双倍!",
        "DESCRIPTIONS" : [
        "你的下 #b%d 张攻击牌将造成双倍伤害"
        ]
    }
}

这下看懂了

public class DoubleDamagePower extends AbstractModPower {
    public static final String ID = "Mod:DoubleDamagePower";
    public DoubleDamagePower(AbstractPlayer p, int amount){
        super(ID,p,amount,PowerType.BUFF);
    }
    @Override
    public float atDamageGive(float damage, DamageInfo.DamageType type, AbstractCard card) {
        if(card != null && card.type == AbstractCard.CardType.ATTACK){
            addToTop(new ReducePowerAction(this.owner,this.owner,this,1));
            updateDescription();
            return type == DamageInfo.DamageType.NORMAL ? damage * 2.0F : damage;
        }
        return damage;
    }

    public void updateDescription(){
        this.description = String.format(this.descriptions[0],this.amount);
    }
}

造成伤害时,如果来源牌为攻击牌,伤害类型为normal,将伤害翻倍,然后减少一点能力层数

游戏内要显示出“下x张攻击牌”,便可以在层数减少时使用字符串format动态更新能力文本

最后就可以把卡牌写出来了

public class DoubleDamage extends AbstractModCard {
    public static final String ID = "Mod:DoubleDamage";
    public DoubleDamage(){
        super(ID,1,CardType.POWER,CardRarity.UNCOMMON,CardTarget.SELF);
        this.magicNumber = 1;
    }

    @Override
    public void use(AbstractPlayer p, AbstractMonster m) {
        addToBot(new ApplyPowerAction(p,p,new DoubleDamagePower(p,this.magicNumber)));
    }
    
    @Override
    public void upgrade() {
        if(!this.upgraded){
            upgradeName();
            upgradeMagicNumber(1);
        }
    }
}

本地化

{
  "Mod:DoubleDamage":{
   "NAME" :"双倍!",
    "DESCRIPTION": "你的下 !M! 张攻击牌将造成双倍伤害"
  }
}

由于升级后需要改变获取能力的层数,并且在卡牌文本中展示,就需要使用到magicNumber,与本地化中 !M! 对应

实际上原版有一个叫"Double Damage"的能力,其他地方也有重名的可能,所以写自己的mod的时候使用 mod名:id 的id格式可以避免冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值