前言:出于开发mod的需要,笔者打算翻译一下杀戮尖塔basemod的使用教程。希望各位盒友能督促我尽快完成翻译工作。对开发杀戮尖塔mod有兴趣或者有相关经验的盒友可以在评论区评论或者私信我。笔者能力尚且不足,如有错误请指正。
本文包含:
①basemod wiki介绍
②自定义卡牌
正文如下:
-----------------------------------
介绍
欢迎访问Basemod 百科!
这个百科是为方便使用模组的玩家查找安装步骤/指南和帮助模组制作者熟知一些basemod模组API并查看一些如何添加内容到游戏中一些代码实例而设计的。
什么是BaseMod?
BaseMod是一个杀戮尖塔的模组API。
它允许模组制作者更加简单地接入基本游戏功能,而不是必须通过单调的过程来创建大量的字节码补丁。
它支持以下内容:
1.添加自定义遗物
2.添加自定义卡牌(包括新的卡牌颜色)
3.添加自定义角色类
4.添加自定义药水
5.添加自定义事件
6.添加自定义怪物
我们未来的计划是扩展这个API,使它能包含游戏的更多部分。
目前还有一些插件接口问题要解决:
1.抽牌
2.消耗牌
3.游戏执行中很多不同的部分,例如:战斗结束时,游戏开始前,等等…
浏览这篇百科以了解BaseMod提供的具体细节。
-----------------------------------
自定义卡牌
自定义卡牌构造函数
CustomCard(String id, String name, String img, int cost, String rawDescription, CardType type, CardColor color, CardRarity rarity, CardTarget target)
- id - 卡牌编号
- name - 卡牌名称
- img - 卡牌图片路径 (图片路径在你的根目录) (250px x 190px); 你的大版本(应该指的就是右键卡牌时看到的大图)图片路径 (500 x 380p) 应该是 img + "_p" 因此如果图片命名为 "my_card.png" 然后大图查看版本应该命名为"my_card_p.png". 在测试版画风中, 文件应该命名为 "my_card_b.png" 以及大图查看版应该命名为"my_card_b_p.png".
- cost - 卡牌的能量消耗
- rawDescription - 卡牌的描述文字
- type - 卡牌的类型, 例如ATTACK(攻击), SKILL(技能), POWER(能力)
- color - 卡牌颜色; 游戏基本颜色设定是 RED, GREEN, COLORLESS, CURSE, STATUS 不过你也能使用自定义颜色
- rarity - 卡牌稀有度, 例如COMMON(普通), UNCOMMON(罕见), RARE(稀有)
- target - 卡牌的目标类型, 例如 does it target ENEMY(是否瞄准敌人), ALL_ENEMIES(所有敌人), SELF(自身), 等等…
自定义卡牌贴图
下面的方法可以在构造函数中调用,然而,以后如果你想改变纹理,可以在任何时候调用这些方法。
卡牌背景
setBackgroundTexture(String smallTexturePath, String largeTexturePath)
- smallTexturePath - 贴图路径 (512 x 512p).
- largeTexturePath - 查看视图贴图路径 (1024 x 1024p).
卡牌能量球
setOrbTexture(String smallTexturePath, String largeTexturePath)
- smallTexturePath - 能量球贴图路径 (512 x 512p).
- largeTexturePath - 能量球查看视图贴图路径(164 x 164p).
卡牌稀有度横幅
setBannerTexture(String smallTexturePath, String largeTexturePath)
- smallTexturePath - 贴图路径 (512 x 512p).
- largeTexturePath - 查看视图贴图路径 (1024 x 1024p).
注册(卡牌)
为了使用下面的方法来添加和删除卡牌,你必须在你的主模组文件里实现EditCardsSubscriber方法,然后重载receiveEditCards方法。
在该方法中,你需要添加或删除卡牌。
- BaseMod.addCard(AbstractCard card)(注:CustomCard 继承AbstractCard)
- BaseMod.removeCard(AbstractCard card) 从游戏中删除一张卡(注:删除一张事件中使用的卡牌是目前未测试/未定义的行为)
自定义卡牌的例子
假设你想要创建一张卡牌,叫做Flare,它未升级的时候能对一名敌人造成3点伤害,给予1层易伤(不如闪电霹雳),升级后,对一名敌人造成6点伤害,给予2层易伤。(小痛击)。
如果这张卡是红色的,并且把图片放在你的jar文件的img/my_card_img.png路径下,下面的代码将创建这张卡:
-----------------------------------
import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.actions.common.ApplyPowerAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.cards.DamageInfo;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.powers.VulnerablePower;
import basemod.abstracts.CustomCard;
//创建Flare的对象,继承CustomCard抽象类
public class Flare
extends CustomCard {
public static final String ID = "myModID:Flare";
private static 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/my_card_img.png";
//卡牌费用
private static final int COST = 0;
//卡牌基础伤害
private static final int ATTACK_DMG = 3;
//升级后增加的伤害
private static final int UPGRADE_PLUS_DMG = 3;
//易伤层数
private static final int VULNERABLE_AMT = 1;
//升级后增加的易伤层数
private static final int UPGRADE_PLUS_VULNERABLE = 1;
//调用父类的有参构造,传递参数,之前有介绍过
public Flare() {
super(ID, NAME, IMG_PATH, COST, DESCRIPTION,
AbstractCard.CardType.ATTACK, AbstractCard.CardColor.RED,
AbstractCard.CardRarity.UNCOMMON, AbstractCard.CardTarget.ENEMY);
this.magicNumber = this.baseMagicNumber = VULNERABLE_AMT;
this.damage=this.baseDamage = ATTACK_DMG;
//添加背景图片 this.setBackgroundTexture("img/custom_background_small.png", "img/custom_background_large.png");
//添加能量球图片 this.setOrbTexture("img/custom_orb_small.png", "img/custom_orb_large.png");
//添加稀有度横幅图片 this.setBannerTexture("img/custom_banner_large.png", "img/custom_banner_large.png");
}
//使用卡牌时触发的动作,包括伤害逻辑,而且造成伤害的代码一般是写在方法末尾的,所以有“动作优先于伤害”的说法
@Override
public void use(AbstractPlayer p, AbstractMonster m) {
AbstractDungeon.actionManager.addToBottom(new com.megacrit.cardcrawl.actions.common.DamageAction(m,
new DamageInfo(p, this.damage, this.damageTypeForTurn),
AbstractGameAction.AttackEffect.SLASH_DIAGONAL));
AbstractDungeon.actionManager.addToBottom(new ApplyPowerAction(m, p, new VulnerablePower(m, this.magicNumber, false), this.magicNumber, true, AbstractGameAction.AttackEffect.NONE));
}
//复制卡牌后获得一张新的卡牌,举个例子,初始卡牌就是通过makeCopy方法被复制进牌库的
@Override
public AbstractCard makeCopy() {
return new Flare();
}
//升级卡牌的名称修改,假设敲一张“打击”,就会变成“打击+”
@Override
public void upgrade() {
if (!this.upgraded) {
this.upgradeName();
//升级伤害增加值 this.upgradeDamage(UPGRADE_PLUS_DMG);
//升级其他属性增加值 this.upgradeMagicNumber(UPGRADE_PLUS_VULNERABLE);
}
}
}
-----------------------------------
查看视图注意事项
在百科大全的卡牌总览界面上有一个查看视图,它会显示你的卡的更大版本。通过在名称中添加_p,能根据原始图像位置自动找到它。这张贴图的大小应该是500px x 380px。更改名称的一个例子是img/my_card.png变成img/my_card_p.png。
参考链接:
https://github.com/daviscook477/BaseMod
https://github.com/daviscook477/BaseMod/wiki/Custom-Cards
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com