菜鳥的只狼Talk詳細(xì)教程(三)

大家好,我是Last孤影眾后面還有一個(gè)點(diǎn),今天繼續(xù)這個(gè)系列的第三集。
注意:閱讀本文需要讀者擁有魂系列參數(shù)編輯能力和最基礎(chǔ)的事件編輯能力,想學(xué)習(xí)的可以移步瑣帝BNU的參數(shù)編輯教程和我的事件編輯教程。

一、Talk的分類
其實(shí)這個(gè)東西我們應(yīng)該早點(diǎn)講,但其實(shí)放在這里講正好后面我們分類討論:
首先我們可以將所有talk分為非戰(zhàn)斗對(duì)話和戰(zhàn)斗對(duì)話,當(dāng)然也有可能是兩者結(jié)合的talk,例如很多npc就會(huì)這樣,在觸發(fā)仇恨后就會(huì)說一些話。
(一)非戰(zhàn)斗對(duì)話
非戰(zhàn)斗對(duì)話是比較簡(jiǎn)單,也是比較實(shí)用的對(duì)話類型,我們可以將其分為:交互觸發(fā)對(duì)話,對(duì)話欄對(duì)話和竊聽對(duì)話。
竊聽對(duì)話
竊聽對(duì)話其實(shí)沒什么好說的,大家可以打開白蛇神社孤影眾的talk看看內(nèi)容,只有一個(gè)觸發(fā)對(duì)話:

這里第一個(gè)call就是對(duì)應(yīng)的竊聽對(duì)話,但是這種對(duì)話并不實(shí)用,我們需要的話可以直接拿槍足正長(zhǎng)的這個(gè)文件改編號(hào),然后修改內(nèi)容作為新竊聽對(duì)話使用。
2.交互觸發(fā)對(duì)話
這種對(duì)話指的是我們按下交互鍵(一般顯示“交談”),然后敵人就會(huì)直接和我們對(duì)話,這個(gè)也非常簡(jiǎn)單,一般很多商人都有這種對(duì)話,其實(shí)就是在觸發(fā)對(duì)話欄對(duì)話前加一個(gè)帶有talktoplayer的執(zhí)行對(duì)話,這樣就會(huì)先和我們說話,等說完了話后才會(huì)觸發(fā)商店之類的選擇面板。
例如我們打開商人藤岡的talk文件:

可以看到要進(jìn)行一系列的判定,然后都滿足后我們才能跳轉(zhuǎn)到執(zhí)行對(duì)話t110470_x38,也就是對(duì)話欄對(duì)話,這就導(dǎo)致藤岡會(huì)在顯示商店面板前和我們說上一些話。
當(dāng)然這個(gè)算是比較麻煩的,因?yàn)橛幸粚?duì)條件判定,還有call的運(yùn)用,簡(jiǎn)單的我自己也搞過一些:

這里就是先跳轉(zhuǎn)到可以說話的執(zhí)行對(duì)話,然后等說完話,才會(huì)跳轉(zhuǎn)到t110810_x39

這樣操作,我們可以在打開npc面板前進(jìn)行talkparam編號(hào)為89000000的對(duì)話,然后我們?nèi)绻顺鰊pc面板,那么我們還能再進(jìn)行一個(gè)talkparam編號(hào)為89000090的對(duì)話,也就是else后面寫的東西,這就是我們接下來要講的對(duì)話欄對(duì)話。
3.對(duì)話欄對(duì)話
最實(shí)用的類型,我們平常改的就是這個(gè),首先如果我們想新建一個(gè)對(duì)話欄式對(duì)話,我們甚至可以直接找鬼佛的talk,也就是t000001來編輯,因?yàn)楣矸鸬膶?duì)話就是個(gè)很純粹的對(duì)話欄對(duì)話。
如果大家怕出問題,也可以找一些npc的talk,然后留下對(duì)話欄對(duì)話,把里面其他的觸發(fā)對(duì)話全刪掉,一般觸發(fā)對(duì)話是對(duì)話欄對(duì)話的參數(shù)都很多,而且?guī)в衋ctionbutton

接著我們看對(duì)話欄型執(zhí)行對(duì)話的主體:

首先有一個(gè)while true循環(huán),然后ClearTalkListData()是清除對(duì)話欄內(nèi)容,這個(gè)是為了大家在做對(duì)話欄遞進(jìn)的時(shí)候,能正常顯示這一級(jí)的內(nèi)容,例如第一級(jí)有ABC三個(gè)選項(xiàng),點(diǎn)A進(jìn)入第二級(jí),我們想顯示DEF,如果不ClearTalkListData()清楚第一級(jí)的ABC選項(xiàng),那么就會(huì)出現(xiàn)問題。
第二個(gè)AddTalkListData(1, 90000000, -1),是添加對(duì)話欄項(xiàng)目,1指的是編號(hào),這個(gè)編號(hào)和他在對(duì)話欄中所處位置并無關(guān)系,例如AddTalkListData(1,?90000000, -1)就不一定排在AddTalkListData(2,?90000000, -1)前面,它僅僅是一個(gè)編號(hào)而已,真正影響選項(xiàng)順序的是在talk中它們排列的先后。例如AddTalkListData(2,?90000000, -1)在第一行,那在游戲中它就排在最前面。

這里的兩局話是打開菜單,缺少一句我們就無法顯示對(duì)話欄,當(dāng)然這里第一句OpenBonfireSubmenu(0)可以換成其他的,這樣就會(huì)顯示非鬼佛樣式的對(duì)話欄,具體大家去其他npc對(duì)話里面找。
接下來就是選中對(duì)應(yīng)選項(xiàng)的結(jié)果,例如這里:

表示的就是我們選中AddTalkListData(1, 90000000, -1)這個(gè)選項(xiàng)后,我們會(huì)跳轉(zhuǎn)到t110810_x48(),鬼佛處的選項(xiàng)多,所以結(jié)果也多:

最后就是else,其實(shí)else默認(rèn)的就是AddTalkListData(0, xxxx, -1),也就是編號(hào)為0選項(xiàng)的結(jié)果,所以大家在新建選項(xiàng)的時(shí)候一定要從1開始往后新建。
else一般就是讓我們回到上一級(jí)的對(duì)話,游戲中我們按返回鍵,就是對(duì)應(yīng)talk中的return 0,else中帶有return 0就可以讓對(duì)話欄回到上一級(jí),如果沒有上一級(jí)那就是退出對(duì)話,當(dāng)然也有一個(gè)直接退出對(duì)話的代碼叫做Quit(),這個(gè)代碼能讓我們直接退出對(duì)話無論多少級(jí),但非常容易出問題,因?yàn)閷?duì)話中玩家無法操作,所以你貿(mào)然退出對(duì)話玩家會(huì)保持無法操作的狀態(tài)卡死。
Quit()代碼應(yīng)當(dāng)配合跨地圖傳送之類的事件使用,可以先給予玩家特效然后Quit(),事件檢測(cè)特效讓玩家傳送,這樣就正常許多。
當(dāng)然return 0我們也是能放在AddTalkListData(1, xxxx, -1)中的,這樣我們點(diǎn)對(duì)應(yīng)的選項(xiàng)我們也能退回上一級(jí),關(guān)鍵在return 0而不是else,只是else大部分情況都有return 0。
那我們?cè)倩氐竭@張圖,可以else并不是只有return 0,還加了個(gè)說話的執(zhí)行對(duì)話,這就讓我們能在回到上一級(jí)前讓npc和我們對(duì)話。


(二)戰(zhàn)斗對(duì)話
戰(zhàn)斗對(duì)話也是一個(gè)非常重要的對(duì)話,對(duì)于不是做劇情mod的modder來說也很是搶手,因?yàn)槟茉趹?zhàn)斗中加上一些臺(tái)詞能讓戰(zhàn)斗體驗(yàn)提升不少。
那上一篇我已經(jīng)說過了在原有基礎(chǔ)上添加戰(zhàn)斗對(duì)話,這個(gè)是最簡(jiǎn)單的。而新建戰(zhàn)斗對(duì)話是非常困難的,難點(diǎn)一是觸發(fā)對(duì)話的不完整,如果我們不去復(fù)制有戰(zhàn)斗對(duì)話的敵人的talk,這會(huì)導(dǎo)致我們新建的觸發(fā)對(duì)話很有可能不生效,所以我建議是找現(xiàn)成的,在上面做修改。
當(dāng)然這個(gè)也是有現(xiàn)成的可以修改,經(jīng)過我多次實(shí)驗(yàn),我發(fā)現(xiàn)主城的那個(gè)武士大將talk效果非常好,是個(gè)很棒的戰(zhàn)斗對(duì)話型talk。
原因一是他的觸發(fā)對(duì)話很少,簡(jiǎn)單明了,純粹的戰(zhàn)斗對(duì)話

原因二是結(jié)果簡(jiǎn)單,簡(jiǎn)單易懂,這里我們看到他先是判斷了一個(gè)eventflag,如果成立,那么他會(huì)挑戰(zhàn)到一個(gè)函數(shù),那這個(gè)函數(shù)一看就知道和對(duì)話有關(guān),但是里面有兩個(gè)100的參數(shù),這個(gè)代表的其實(shí)是玩家到他的距離,離他太遠(yuǎn)對(duì)話就會(huì)消失。
不過不要緊,我們直接在上面做一些修改,可以得到我們想要的,下圖是我在對(duì)影成雙中制作的戰(zhàn)斗對(duì)話地牢孤影眾:

基本結(jié)構(gòu)一致,我移除了冗余的內(nèi)容,留下了最簡(jiǎn)練的判定和跳轉(zhuǎn),如果eventflag1585開啟,并且地牢孤影眾擁有30007特效,那么他就會(huì)說話,等說完話再給玩家一個(gè)30008特效(mod中事件檢測(cè),用來觸發(fā)玩家吹口哨的)。
就這樣一個(gè)簡(jiǎn)單的戰(zhàn)斗對(duì)話就完成了,如果我們想要做多次戰(zhàn)斗對(duì)話也很簡(jiǎn)單,換成if條件判斷函數(shù):

上圖為蘆葦之國(guó)·空想中我創(chuàng)造的水生村支線,第一句是當(dāng)玩家剛進(jìn)入水池時(shí)索拉爾給予的提示,后面的就是索拉爾在戰(zhàn)斗中幫助我們的對(duì)話,還有擊敗敵人的致謝??梢钥吹椒浅:?jiǎn)單,只要套套模板即可。
這里有個(gè)非常重要的點(diǎn),不注意看文章的等下肯定要吃大苦:
那就是判斷條件中一定要帶有事件標(biāo)志的判斷,你可以看到我明明可以只用特效判定,但我卻每個(gè)判定都加了對(duì)事件標(biāo)志的判定,因?yàn)檫@個(gè)是必須的。
當(dāng)然這個(gè)也不難解決,我們隨便找個(gè)確定狀態(tài)的事件標(biāo)志,判定他的狀態(tài)然后照樣檢測(cè)特效即可,或者麻煩點(diǎn)和你手動(dòng)開啟或者關(guān)閉一個(gè)事件標(biāo)志。
我希望到時(shí)候不會(huì)有人來問我這個(gè)問題,不然我直接給你一耳屎
(三)自我對(duì)話
原版沒有的對(duì)話,由bossrush獨(dú)創(chuàng),沒錯(cuò)它就是自我對(duì)話。
玩過bossrush的人都直到,當(dāng)我們?cè)趽魯【⒐只蛘遙oss后,會(huì)跳出來一個(gè)菜單,我們可以直接選擇打下一個(gè)敵人,或者回到破舊寺院,這其實(shí)就是自我對(duì)話。
說是自我對(duì)話,其實(shí)也是讓狼和某個(gè)敵人交互,只不過這個(gè)交互是遠(yuǎn)程的,滿足條件后就會(huì)跳出一個(gè)對(duì)話欄,這個(gè)對(duì)話的難點(diǎn)有兩個(gè):
一是原版沒有類似的talk可以參考,但好在bossrush的前輩留下了珍貴的參考文件,不難解決;二是talk鏈接敵人的要求,這個(gè)敵人一定不能是流程敵人,而且最好能全圖加載,這樣我們?cè)诘貓D中任何時(shí)候,滿足觸發(fā)條件就能彈出對(duì)話欄 。
關(guān)于自我對(duì)話,我在蘆葦之國(guó)中大量使用,給大家看看我的格式:
首先是觸發(fā)對(duì)話,檢測(cè)條件彈出對(duì)話欄,但是還有要遵循判定條件必須有事件標(biāo)志:

接著就是對(duì)話欄的構(gòu)建,之后就是很簡(jiǎn)單的內(nèi)容了,我們主要是需要talk和事件配合起來發(fā)揮作用。

而比較關(guān)鍵的點(diǎn)不在talk中,在DSM也就是地圖編輯器中,自我對(duì)話鏈接的敵人是有要求的,我建議大家選擇c1001開頭的敵人,也就是專門用作對(duì)話或者交互的隱藏?cái)橙?,我們?fù)制一個(gè)c1001,消除實(shí)體編號(hào)后新建鏈接一個(gè)talk,之后我們要注意的是UnkT00設(shè)置的大一點(diǎn),這個(gè)代表的是對(duì)話生效的范圍

接著是UnkT44,這個(gè)設(shè)置成515最好(bossrush這么設(shè)置的,如果設(shè)置為0那么會(huì)不生效)
二、后話
Talk這個(gè)東西有點(diǎn)類似event,都是積累型,所以找一些mod參考,首先是bossrush,可以參考他的對(duì)話欄對(duì)話和自我對(duì)話;其他的就是我的mod了,好像只狼mod只有我做了大量talk發(fā)面的編輯。
其實(shí)talk將到這里就差不多了,我所了解的內(nèi)容就這么多了,talk內(nèi)容較少,但是邏輯性較強(qiáng),比較抽象,需要大量實(shí)驗(yàn)試錯(cuò),你們看到我三篇文章就講完了talk,但其實(shí)我試了小三個(gè)月猜得出這些結(jié)論,都是一次次失敗換來的。
那么菜鳥的只狼Talk詳細(xì)教程系列到這里就正式完結(jié)了,后續(xù)我發(fā)現(xiàn)新的內(nèi)容會(huì)開專欄再說的,希望各位看完整個(gè)系列都能學(xué)會(huì)修改Talk,創(chuàng)造出優(yōu)秀的劇情mod。
