杀戮尖塔(Slay the Spire) mod制作 --- 1
偶然間發(fā)現(xiàn)了殺戮尖塔是用java寫的(震撼我一分鐘),然后秉著試一試java準(zhǔn)備嘗試殺戮尖塔mod制作。
這篇文章主要是靠知乎上的文章和反編譯其他現(xiàn)有的mod摸摸索索湊出來的,主要給有一定基礎(chǔ)的人大致了解一下流程,不會手把手詳細(xì)講每一步該如何操作。
1.mod標(biāo)識
要mod被識別,需要有一個ModTheSpire.json的文件,詳細(xì)格式可以看ModInfo · kiooeht/ModTheSpire Wiki · GitHubExternal mod loader for Slay The Spire. Contribute to kiooeht/ModTheSpire development by creating an account on GitHub.https://github.com/kiooeht/ModTheSpire/wiki/ModInfo
{
? "modid": "example",
? "name": "Example Mod",
? "author_list": ["kiooeht"],
? "description": "An example mod to be an example.",
? "version": "0.1",
? "sts_version": "03-29-2018",
? "mts_version": "2.6.0",
? "dependencies": ["basemod"]
}
不過只有modid和name是必須的,其他可以空缺。
順帶一提,ModTheSpire.config是沒必要的,可以不加。
2.注冊類
第一步做完之后就可以打包被識別出來了,如果不能的話檢查一下ModTheSpire.json文件拼寫是否正確,例如有沒有多寫一個e之類的。
然后接下來就是建立一個類了,首先在包里面要有一個帶有@SpireInitializer的類,這個類會作為起始被加載讀取(可以近似理解成public static void main(String args)的東西),所有卡牌、遺物等注冊都會在這里進(jìn)行。
然后在這里注冊自己,大概增加這么一個方法:
public static void initialize(){new Main(); }上面的Main換成你自己寫的這個類。
3.寫你想增加的內(nèi)容
基本上你想要新增一個東西,就需要新建一個類,然后繼承相應(yīng)的抽象類再注冊他來實(shí)現(xiàn),這里就拿一個遺物類舉例子。
新建一個類繼承CustomRelic這個類,然后會要求你實(shí)現(xiàn)抽象方法并且調(diào)用super(String,Texture,RelicTier,LandingSound)。從左到右是遺物ID,遺物材質(zhì),遺物稀有度和獲得遺物聲音時的聲音。
ID隨便寫是個string就行,現(xiàn)場編一個,不過后面增添文本的時候會用到。
材質(zhì)就是一張png圖片,大小128*128,然后實(shí)際內(nèi)容應(yīng)該是64*64的大小,周圍的一圈是透明的。我用的是ImageMaster.loadImage()方案來加載的,地址直接寫resource下的文件路徑就行。
?例如我要導(dǎo)入這個holy_grail.png,那么我會寫ImageMaster.loadImage("images/relics/holy_grail.png")
RelicTier可以調(diào)用AbstractRelic.RelicTier里面的,有以下幾種
DEPRECATED, 廢棄的,例如Test6 STARTER, 初始遺物,例如獵人的指環(huán) COMMON, 普通遺物,例如寶箱里能開到的 UNCOMMON, 罕見遺物 RARE, 稀有遺物,例如精英怪遺物 SPECIAL, 特殊遺物,例如恩格斯的饋贈 BOSS, BOSS遺物,打完BOSS開寶箱的,例如金字塔啊 SHOP, 商店遺物,應(yīng)該是指送貨員之類的(?)例如AbstractRelic.RelicTier.RARE就是一個稀有遺物。
然后遺物聲音也是有一下幾種
CLINK, FLAT, HEAVY, MAGICAL, SOLID,具體聲音咋樣我也不太清楚,反正無腦AbstractRelic.LandingSound.SOLID就行了。
除了這個以外,剩下的基本上都是要重寫的方法了,具體內(nèi)容還挺多的這里放不下就不放了,可以去反編譯游戲本體(desktop-1.0.jar)找到AbstractRelic這個類來查看。
殺戮尖塔MOD制作詳解(2)基礎(chǔ)牌和遺物 - 知乎
這個詳解里面大概有給出幾種常用的可復(fù)寫的觸發(fā),可以去看看。
寫完你想要的功能之后,你這個遺物就實(shí)現(xiàn)完成啦!(如果它不復(fù)雜的話)
4.注冊遺物
寫完遺物這個類之后,還需要在之前被注冊的類(例如我上面寫的Main)里面注冊這個遺物。
首先在Main里實(shí)現(xiàn)這幾種可以(需要)被實(shí)現(xiàn)的接口:
?EditCardsSubscriber
?EditCharactersSubscriber
?EditKeywordsSubscriber
?EditRelicsSubscriber
?EditStringsSubscriber
每個實(shí)現(xiàn)的接口都需要復(fù)寫一個方法,是用于注冊相應(yīng)的元素的。例如你只打算寫一個添加一個遺物的mod,那么只需要實(shí)現(xiàn)EditRelicsSubscriber接口即可,然后再重寫的方法中用BaseMod.addRelic()方法來注冊你寫的那個遺物就行了。具體內(nèi)容就是一個字:抄??纯雌渌坛?#xff0c;反編譯一下其他mod就知道大概內(nèi)容填充什么了。
話是這么說,但是還是需要實(shí)現(xiàn)EditStringsSubscriber接口,然后重寫BaseMod.loadCustomStringsFile()方法來加載文本,不然新增的遺物一句描述甚至名字都沒有還是挺尷尬的。具體格式還是看隔壁,或者看我下面代碼,這里懶得解釋了,地址格式大概跟上面加載遺物材質(zhì)的差不多。
代碼展示:
Main.java
package asimplemodforsts;import asimplemodforsts.relics.HolyGrail; import basemod.BaseMod; import basemod.helpers.RelicType; import basemod.interfaces.EditCardsSubscriber; import basemod.interfaces.EditRelicsSubscriber; import basemod.interfaces.EditStringsSubscriber; import basemod.interfaces.ISubscriber; import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer; import com.megacrit.cardcrawl.localization.RelicStrings; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;//一個殺戮尖塔注冊類 @SpireInitializer public class Main implements EditRelicsSubscriber , EditStringsSubscriber, EditCardsSubscriber {//構(gòu)造函數(shù)public Main(){//注冊一下自己身上的那些注冊方法BaseMod.subscribe((ISubscriber)this);}//初始化方法,返回自己的實(shí)例public static void initialize(){new Main();}//這個方法可以刪(因為沒有內(nèi)容),不過記得連著上面實(shí)現(xiàn)的EditCardsSubscriber一起刪@Overridepublic void receiveEditCards() {}//這里注冊遺物@Overridepublic void receiveEditRelics(){//遺物的注冊方法,前一個是你寫的遺物類,后一個是遺物顏色//遺物顏色就是角色使用,例如設(shè)置為紫色就是只有觀者才能用//卡牌也有類似的設(shè)定,不過卡牌你可以拿棱鏡不是嗎?BaseMod.addRelic(new HolyGrail(), RelicType.SHARED);}//這里注冊文本//如果想要多語言話可以在這里判斷游戲語言,然后選擇性加載你需要的語言文件@Overridepublic void receiveEditStrings() {//注冊文本文件,前面一個固定"XXXXStrings.class",例如遺物是RelicStrings,卡牌是CardsStrings//后面一項是文件地址,丟resource下面的地址的相對地址就行BaseMod.loadCustomStringsFile(RelicStrings.class, "lang/relics/HolyGrail_zh.json");} }HolyGrail.java
package asimplemodforsts.relics;import basemod.abstracts.CustomRelic; import com.badlogic.gdx.graphics.Texture; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.DrawCardAction; import com.megacrit.cardcrawl.actions.common.GainEnergyAction; import com.megacrit.cardcrawl.actions.common.RelicAboveCreatureAction; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.helpers.ImageMaster; import com.megacrit.cardcrawl.relics.AbstractRelic; import com.megacrit.cardcrawl.relics.RedSkull; //繼承了CustomRelic ,是個遺物類 public class HolyGrail extends CustomRelic {//標(biāo)識ID,必須要有public static final String ID="holy_grail";//構(gòu)造方法public HolyGrail() {//文章上面右鍵就不復(fù)述了super(ID, ImageMaster.loadImage("images/relics/holy_grail.png"), AbstractRelic.RelicTier.RARE, AbstractRelic.LandingSound.SOLID);}//回合開始時會調(diào)用的方法,這里實(shí)現(xiàn)的是回合開始加三費(fèi)(無敵好吧)@Overridepublic void atTurnStart(){flash();addToBot((AbstractGameAction)new RelicAboveCreatureAction((AbstractCreature) AbstractDungeon.player, this));addToBot((AbstractGameAction)new GainEnergyAction(3));}//顯示遺物描述,可以不寫DESCRIPTIONS這個變量是自動從你加載的文件中讀取,如果你沒有寫或者你沒有加載文件那就是空@Overridepublic String getUpdatedDescription() {return this.DESCRIPTIONS[0];}//這個必須要有,別問我有啥用,問就是不知道。@Overridepublic AbstractRelic makeCopy() {return new HolyGrail();} }HolyGrail_zh.json?
{"_comment" : "(這條是注釋可刪去)下面一行那個就是上面遺物注冊時的ID,要保持一致不然會讀取失敗。剩下幾個我就不解釋了懂的都懂","holy_grail": {"NAME": "圣杯","FLAVOR": "回合開始時加一點(diǎn)能量","DESCRIPTIONS": ["光輝的戰(zhàn)爭的目標(biāo),真的有這么大的魅力嗎?"]} }總結(jié)
以上是生活随笔為你收集整理的杀戮尖塔(Slay the Spire) mod制作 --- 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宇宙是一个无始无终的循环?道翰天琼认知智
- 下一篇: redis 哈希hash实例应用