其實有個同人blog也有NS教學,我只是騙mero值所以不用管我……(天:也沒有人要管妳啦)
絕對不會常更新,甚至可能只有一篇XD
Recrit有的NS教學我就不多說囉,我只說說自己以前做遊戲曾經用過的功能算了XD
今天……來說以前幫香草做的顛覆童話NS版曾經用過的功能:defsub、gosub及return
其實……超級瑣碎XD 這教學似乎沒什麼建設性啊XD
其實我
defsub、gosub及return
先說defsub,它只可以在define區使用~
它是什麼呢?它是一個很好用的指令!(廢話)
這指令類似RPG MAKER2000的公用事件喔!(很多年前的程式了XD)
即是用以建立一些重複使用的指令!例如?
一般的電子小說(NOVEL)/戀愛冒險(AVG)遊戲,會重複出現的東西有:
1.角色名字
2.角色立繪
3.對話框上的按鈕 (SAVE、LOAD、CONFIG、TITLE、EXIT之類)
嗯~其實還有很多啦,只說比較明顯的~
不過,對話框相關的程式,其實不需要用defsub,這個留待介紹自訂系統再說~(如果真的生出來的話XD) 所以我來說角色名字好了~
無論你的遊戲打算用lsp還是對話框內的文字顯示角色名字,也可以用defsub簡化喔~
假設我不用defsub功能,我想顯示角色名字,我的程式碼就要這樣打:
(假設我用對話框的文字顯示角色名字)
*start ;為求方便,我前面都不打,直接從*start開始XD我沒有把主角名字斷行,是因為……角色名字不是跟文章同時出現嗎XD
setwindow 65,370,20,3,23,23,1,1,40,0,0,"frame.bmp",50,360 ;這行只是自訂對話框
男主角 ;角色名字
這是示範對話。\ ;普通對話
女主角
這也是示範對話。\
男主角
示範對話三。\
end
大家留意到吧?上面重複出現的是男主角的名字~
名字短也罷,名字一長就不想打對吧XD 出現一次就重打一次這樣XD 太麻煩啦XD
所以我們需要一個省時省力的指令,那就是偉大的defsub了!XD
(同樣的對白,假設我用defsub顯示角色名字)
*define紅色部分就是我用了defsub後,改變了的地方~
;其他指令請容我省略XDdefsub *charname1
game
*charname1男主角return ;一定要加return,不然會錯誤喔
*start
setwindow 65,370,20,3,23,23,1,1,40,0,0,"frame.bmp",50,360
charname1 ;在執行區,只需要打星號(*)後的label名字就可以呼叫defsub功能這是示範對話。\
女主角
這也是示範對話。\
charname1示範對話三。\
end
你看到後可能會說,為什麼好像比之前更麻煩……
嘿嘿,話不可以這樣說……
上面只是最簡單的情況,如果比較繁複些,用lsp顯示名字(尤其是希望名字比一般字體大,又有名前框的時候,NS內建無法做到喔~),名字不同顏色,對話隨著角色而顯示不同顏色等等……一長串指令綜合起來,還是用defsub比較方便吧~
也許你比較喜歡copy and paste,但有時會手殘眼殘貼錯吧?defsub就可以免除這麻煩喔~
因為只重複讀取相同的程式,打對了就全部都對,打錯了就全部都錯這樣XD
而且defsub不只應用在顯示名字上,舉凡角色立繪、角色表情(假設跟立繪分開做)、SL畫面的前置程式、消除圖片、顯示選項等等……總之所有重複出現的指令都可以用defsub喔!(我自己的SL畫面就會用defsub先讀取SL畫面的前置作業)
好,說完defsub,也做一些小補充:gosub跟return……
return嘛,顧名思義就是"回歸"、"回去"的意思~它一定要跟gosub或defsub一起用喔~(原因後面說)
gosub是前往分支的意思,而defsub是在定義區建立分支……總之都屬於分支!
只是gosub在game區跟start區(執行)也可以用,而defsub只可以在define區(定義)用……
什麼是分支?這我要順便說說goto……
gosub跟goto都屬於跳躍功能,不過gosub是跳躍至一個分支,然後回歸主線……
而goto就是跳躍至另一條主線,不會回歸主線……
嗯~用文字解釋不曉得大家明不明白,用圖片解釋也許比較清晰?
(點擊放大) |
一般的電子小說(NOVEL)或文字冒險(AVG)遊戲,通常都是一個情節接著一個情節吧?我們姑且稱它為主線……
嗯……容我拿蘇眉的mela做例子(不知道是什麼的人快去玩XD),主線是養成事件,這些是必定發生的事件,日復一日,且無法逃避,所以肯定是主線XD
而支線就是可以忽略,不玩也對遊戲流程沒太大影響的情節XD 在mela中就是女主角出去找男角色時引發的劇情~
有玩過的人都知道,女主角每星期有一天可以到各角色房間
假設女主角去找神官,就像上圖中用gosub功能跳去神官的聊天事件,當事件結束後,就可以用return回到主線,繼續周而復始的養成事件!
而goto呢,當年玩過的人還記得嗎……當女主角在某個特定日子去某人的房間時,可以
這種黃鶴一去不復返(?)的跳躍,自然應該用goto喔!而且不可以用return……因為根本不是分支,沒地方可以return啊XD
所以,來個普通的程式示範再為大家解釋一下吧~
*start好,根據以上的程式碼,程式會順序顯示:
現在想測試gosub功能。\ ;英文要用全形才不會錯誤
gosub *sub1
現在跳躍至plot。\
goto *plot
*sub1
這裡是分支一。\
return
*plot
已經結束喔。\
end
現在想測試gosub功能。
這裡是分支一。 (利用gosub跳至*sub1)
現在跳躍至plot。 (因為用了return而回到主線)
已經結束喔。 (利用goto直接跳到*plot)
希望上面的程式碼可以協助大家明白goto跟gosub的分別喔!
大家可能又很疑惑,聽我這樣解釋,看來gosub要用return才可以回歸主線?沒錯!
那麼,其實也可以當成goto去用囉?並不是!
如果gosub不用return,其實會一直運行下面的指令,直到遇到return為止!(如果遇到end就會直接結束遊戲) 然後回歸到原來主線!
也許你會說,那麼我整個遊戲也不打return,那不就沒事嗎?嗯……這不是不可行,只是用法實在有問題…如果出錯就後果自負這樣……(爆)
以上是gosub跟goto的基本用法,然後我要說比較複雜的XD
圖片裡展示的是一個非常簡單的主線跟支線的分支圖,如果分支中另有分支,又該如何呢?
沒什麼,就是用goto或gosub繼續製造更多分支XD (小心分支建立太多,自己最後不知道會回歸到哪裡XD)
但一定要留意,不論是gosub還是goto,都一定要跟return配搭,少打了可能會回歸失敗!(因為是分支中的分支)
最後再打一段程式碼作為示範(?):
(用gosub的情況)
*start根據以上的程式碼,程式會順序顯示:
現在想測試gosub功能。\
gosub *sub1現在跳躍至plot。\
goto *plot
*sub1
這裡是分支一。\
gosub *sub2會出現這一行喔。\
return
*sub2
這裡是分支二。\
return
*plot
已經結束喔。\
end
現在想測試gosub功能。
這裡是分支一。 (利用gosub跳至*sub1)
這裡是分支二。 (利用gosub跳至*sub2)
會出現這一行喔。 (因為用了return而回歸,這是從*sub2回歸回去*sub1)
現在跳躍至plot。 (因為用了return而回歸,這是從*sub1回歸回去主線)
已經結束喔。 (利用goto直接跳到*plot)
(用goto的情況)
*start根據以上的程式碼,程式會順序顯示:
現在想測試gosub功能。\
gosub *sub1現在跳躍至plot。\
goto *plot
*sub1
這裡是分支一。\
goto *sub2不會出現這一行喔。\
return
*sub2
這裡是分支二。\
return
*plot
已經結束喔。\
end
現在想測試gosub功能。
這裡是分支一。 (利用gosub跳至*sub1)
這裡是分支二。 (利用gosub跳至*sub2)
現在跳躍至plot。 (因為用了return而回到主線)
已經結束喔。 (利用goto直接跳到*plot)
嗯……說來也奇怪,我隱約記得以前不可以gosub裡再用gosub,不過現在又可以……算了,有問題的話就改用goto吧XD
其實以上gosub跟goto的應用不止局限於主線跳去支線劇情,還有很多地方也可以應用~例如呼叫SL畫面、呼叫log畫面、呼叫config畫面等等~所以其實是非常有用的喔~
這集只說到這裡,目前預定要說(?)的題目有……
- 自定名字 (附加用lsp顯示文字的reminder)
- 步行動畫(?) (recrit是否說過?我其實是否可以不說……(爆))
- 自製選項 (不是NS內建那個select,其實只是又說一次lsp的運用XD)
- 變數分歧 (它其實很簡單,真的要說嗎XD)
- 音樂鑑賞
- CG鑑賞
- 未想到XD 想到再補充XD
雖然樣式不一樣,但需要的程式碼是一樣的……
(不過你沒有耐性的話可以去幻森下載教學檔自己研究XD)
沒有留言:
發佈留言