2017年10月17日 星期二

17/10/2017 - NPC Script(腳本)編寫進階課程

適逢公開了漢化版記憶書架第一章的腳本
在這寫下從中我的得著…
也就是編寫NPC演出時不得不懂的語法使用

…只為了拿漢化腳本的讀者直接拉到底吧。


以下教學使用的版本為Serissa1004以上版本,低於此版本的話部份語法可能會無法執行。

基本對話、選擇、按步驟執行不同的一次性對白,也可以參考前文


1) 對話的變化
基本對話的構成是
talk id=NPCID  title=NPCName
  內容分段一$R
  內容分段二
end

NPCID,如果無限定是哪一人說話,可以打00000000,此舉多用在代表玩家的說話上面。
NPCName,可以空掉,也可以任意寫上和npc本身不同的名字。
$R 分段符號。每段超過19個全形字就會強制分段。

而在對話語法間,其實有一些變化可以做:
在talk id=NPCID後加上motion=[motionID],就可以讓npc說話時做動作。動作id可直接參考紙娃娃
在title=NPCName後加上pict=[pictID]可以顯示圖片,這些圖片需放在「Emil chronicle online\data\sprite\interface」內,並以pictXXX.bmp 為命名(基本預設已有pict001-007)


2) NPC顯示
通年故事中通常不只會出現單一個NPC
想要只在和A對話時出現B一同進行故事的話,只需要在A的腳本上加上顯示B的語法就可以。
加入NPC的語法有兩種,而就算同一個通年故事中出場的NPC,用的語法也有機會兩種也需要用到:
npcflags ids=
shownpc id= x= y= dir=
後者的坐標可以按個人需要而設,但設了的話貌似就不能用移動語法來行走(未確定?)
前者的坐標直接按csv檔內記錄的位置出現,不需特地打上。

然後,如果想要NPC在過程中退場,可以用
hidenpc id=
反之,如果是中途出場,可以先召喚了他後先hide掉,然後才用shownpc id=來顯示回來


3) 演出用NPC
在npc.csv跟npc2.csv中,能看到有部份npc會表示著#演出用NPC 等的字眼
這些NPC並沒有實體,也就是全透明的、沒ID在頭上的,是萬用角色
例如是在書架通年中會用到的18000963-18000965號(於npc2.csv內)

使用這些NPC,除了用「NPC顯示」都提到的召喚
還要用變裝:morphnpc id=本體ID pict=外觀ID
本體ID也就是演出用NPC、外觀ID也就是你想它變成哪個人物的貼圖ID
例子:
shownpc id=18000963 x=16 y=27 dir=2 #在特定位置召喚出演出用NPC
morphnpc id=18000963 pict=16420000 #把演出用NPC換上アルカード的外觀

注意,想要演出用NPC作出對話、動作等指令,是把目標設為本體ID,而不是外觀ID


4) 移動
這一個可是秘技(?) 最少在script.txt中沒有提及完整的可行參數和使用方法ww

玩家的移動方式只有一個:
walkpc x=IntValue y=IntValue [speed=IntValue] dir=0-359 [movetype=IntValue] [motion=IntValue ] [motionspeed=IntValue]
順序解釋為: x坐標、y坐標、[速度]、方向、[移動方法]、[動作]、[動作速度]
被括弧掉的都不一定要打。

NPC的移動方式有兩個:

其一:walknpc id=NpcID x=IntValue y=IntValue dir=0-359 movetype=IntValue
順序解釋為: NPCID、x坐標、y坐標、方向、移動方法

其二:movenpc id=NpcID x=IntValue y=IntValue speed=IntValue dir=0-7 movetype=IntValue motion=IntValue motionspeed=IntValue
順序解釋為: NPCID、x坐標、y坐標、速度(步行為280)、方向、移動方法、動作、動作速度

前者,無論你在哪一行打的指令,都會在對話一開頭通通運作掉。不過能用選項對話阻止其運作。
後者,自由性大、而且沒有不按次序就先運行的問題。
所以劇情演出多是用後者的。

然後,你會發現為何我會特別紅色了兩組坐標參數。
這也是我親自向L大查詢才知道的。

ECO的坐標系統有兩種:
1) 實際坐標。也就是你在遊戲中輸入/where所得到的坐標。而dir也是0-7  總共8個方向。
2) 相對坐標。以地圖中心計算的坐標,以下列算式計算。而dir也是0-359度。

實際坐標為 x=10 y=20
地圖總寬(x)=200 總長(y)=150
相對坐標x=(10x200/2)*100=-9000
相對坐標y=(150/2-20)*100=5500

而紅色掉的部份就是相對坐標了。
要找到地圖總寬、總長,就是跑到地圖可行的最東南角。
當然這不是必然是對的,因為總有些位置你過不了去。
只能先計算一個大概值,再慢慢調整。

movetype的參數,可參考下面影片。
看不清當中選的數字(也就是參數)的話請在按這裡

目前測試出有效的碼為6-18,然後隔幾個號碼再loop一次組合。
有部份號碼會出現只有判定移動但NPC還停留在同個位置,暫未知有什麼用途。

另外角度,可以獨立設定:
dir id=NPCID dir=[0~359]



5) emotion與特效
這兩個功能也是用同一個語法:
effect id=NPCID effect=EffectID
emotion的effect id可以在emotion.csv中看到
其他的effect類效果…我是用UNECO打開\data\effect\mrb.hed,然後逐個打上NPC腳本上慢慢試出來的。
這次第一章出現了兩個特效也是試了半小時左右才找出來。

6)聲效
BGM相關:
playbgm id=IntValue  #播放指定BGM
stopbgm #停掉所有BGM
setbgm volume=IntValue #設定BGM音量
SE相關:
playse id=IntValue [loop=0] [volume=100] [pan=50] #播放指定SE
stopse id=IntValue #停止播放SE
 setse id=IntValue [volume=100] [pan=50] #設定SE音量

BGM和SE都放在Emil chronicle online\data\sound中
(我想應該沒人不知道吧?)



來到這裡,應該能大致做出一個像樣的演出
最後,送上漢化-盟約の吸血鬼的腳本
亦可以從腳本中參考各語法的使用。

腳本下載連結:https://goo.gl/fvc5Jf
適用於Serissa1004以上版本。









沒有留言:

張貼留言