Recrit
【捨丸&KID】NS架構
在這一章節我們要介紹的是0.txt裡最基本的架構,首先要請大家複習一下前幾次提到的最簡範例:
「
*define
game
*start
天譴寶寶說你好@
」
其中大家可以測試一下 *define、 game、*start這三個標籤,只要隨便更動一個字母,NScripter就無法正常運行了,
這裡名稱為*define的標籤是一個特殊的標籤,在Nscripter啟動時是必須的標籤。從*define到game之間就稱之為define區,define區是用來宣告Nscripter初期設定(從最初就設定,通常到最後都不會改變或是不好改變的設定)。初學者在這個地方什麼都不需要寫,NScripter程式就會按照預設的數值去運行,在這裡先初步說明一下預設設定的數值。
表 default設定
文字視窗 全畫面表示
畫面大小 640 X 480
字型 26x26畫素的新細明體
橫23文字縱16文字
行間 1 pixel(畫素)
粗體 有
陰影 有
文字表現速度 20ms(0.02s)
文字視窗顏色 #999999
有鑑於現在大家的螢幕都越來越大,解析度的數值也都開始突破天際,640X 480的畫面實在是小了點,在這邊先說明如何將畫面改成800 X 600,範例如下:
「
;mode800
*define
game
*start
天譴寶寶說你好@
」
對,就只要在最前面加;mode800這樣就行了,不用調數值,不用override,這就是NScripter!!
那如果改成;mode1024能不能將畫面改成1024 X 768呢? 很抱歉,不行!
NScripter因為腳本比較簡單,許多功能也就無法任意更動了,高橋沒給的,你不能用,但雖然沒有1024 X 768,320 X 240 小視窗可是有支援的,一樣把最前面改成;mode320就好啦。
Game這指令宣告的意義是:在這個指令之前皆為define區,在這之後變開始進行遊戲的處理。並且在define區塊的最後一定得輸入這個指令。
*start這個標籤表示開始進入執行區塊。
在這個標籤之後都被稱為執行區塊,如果輸入全形文字則會被表示在畫面上,例如”天譴寶寶說你好”,而半形文字則會被當成指令來處理例如” @”。
由於半形文字都會被當成指令處理,因此無法拿來當作被表現的文字,若真的想要表現英文字的時候請輸入全形文字或是使用圖像,或著是要在半形文字之前加上">",否則一不注意就會出現亂碼,整個程式就會爆炸了~。
「
*define
game
*start
>Scourge baby says hello! @
」
注意在半形文字跟@指令之間要加空白鍵,否則會連@也變成文字了,還有大家可以發現顯現出來如下
空白間隔不見了o.0 我想這是因為全形半形空白間隔輸入的關係,筆者發現第一個用半形,之後都得用全形空白才可以,所以如果真的要使用半形還是以單字為主吧!
那為什麼就算都照做現在執行到最後還是一樣會出現錯誤訊息呢?
很簡單,只要在最後多加一個end指令:
「
*define
game
*start
天譴寶寶說你好@
end
」
噹噹~~錯誤訊息消失了,也可以試試看把end改成return
噹噹~~現在無法結束程式了吧,因為return指令會讓程式一直重頭跑起,該怎麼辦!?按視窗右上角X方塊就好啦,這是很重要的知識,因為做遊戲難免會寫出無窮迴圈,這會讓程式一直跑,之後遇到這種問題要嘛拔電源關機,要嘛就按右上角的X。
那之前一直提到的標籤,到底是什麼咧?
- 標籤(Label)
接在*(注意,半形)後面的文字被稱為標籤,是用來指定移動目標的東西。
標籤有著用來處理故事劇情的移動、script處理的移動等重要任務。
Nscripter會參照標籤名稱讓故事分歧,移動到執行處理的行列上,這點要搭配goto的指令,會在之後詳細說明。
* 標籤命名的規則
在標籤名字中能夠使用的文字種類已經被限制住。
在*後面的第一個文字只能使用半形英數文字和底線(_)。在這之後的文字能夠使用半形英數文字、底線(_)和阿拉伯數字。
全形文字和底線(_)以外的符號無法使用。
雖然在標籤之後的命名是自由的,但是如果能夠容易瞭解和記憶的話也夠避免script出錯。
* 標籤名稱範例
使用連續的數字
*a001
*s_01
使用連續的號碼等有順序的命名法就容易理解。
配合故事裡的場景
*bloodend
*goodend
配合場景輸入簡短的英文字當作標籤名稱。雖然容易聯想但是有過於複雜的難點。
將場景image和號碼組合起來使用
*day01
*room01
有著容易理解的優點,也推薦使用這種方法。
* 不好的標籤名稱範例
全形文字
*序章
*登場篇
全形文字不能夠在標籤中使用
第一個文字是阿拉伯數字
*001
*01mission
使用底線(_)以外的符號
+zenkai120%
*sakana@apart
一底線(_)以外的符號都無法使用。
標籤名稱能夠盡量簡單明瞭的話,就能夠避免之後許多不小心時犯的錯誤。
【捨丸&KID】NS對話框文字表示(1)
大家好,今天所要講的內容是「如何在對話框裡表示文字」。對話框在AVG中是不可或缺的要件,舉凡人物對話甚至場景描述都會放在對話框裡,那麼要怎麼將想要的文字擺在對話框裡呢?
很簡單,大家還記得上一周的0.txt腳本內容嗎?
;mode800
*define
game
*start
天譴寶寶說你好@
End
這個「天譴寶寶說你好」就已經是在對話框裡了,請回憶一下上一周的介紹:
「*start這個標籤表示開始進入執行區塊。在這個標籤之後都被稱為執行區塊,如果輸入全形文字則會被表示在畫面上」
所謂表示在畫面上通通都是表示在對話框裡,一定有人問那怎麼沒看到框框?很簡單,依照NScripter的慣例,沒有寫就通通用預設。
記得第一回說明的default表嗎?裡面有提到 「文字視窗顏色#999999」。
#999999是RGB code,各利用兩個十六進位的數字來表現紅、綠、藍三個顏色。用肉眼看的話#999999是黑色,而NScripter在沒有載入背景圖的時候是呈現黑色,因此當然看不到囉。
注意,沒有背景跟放一張黑色圖背景是不一樣的,沒有放背景在做動態圖片時可能會留下殘像,這在以後講到比較進階的用法再說明。
那麼@這個符號是做什麼的呢?要測試很簡單,就把@delete掉就好啦,看看少了@會發現什麼事,請看下圖:
嗯?沒有圖啊?當然沒有圖,因為程式只有閃一下就消失了,我手沒這麼快,當然什麼都沒拍到。
@的功用呢,稱為「等待click」,程式進行到這個符號的時候,必須要點一下或按一個鈕才能進行下去。我們現在改一下程式碼:
天譴寶寶說@你好@
或是
天譴寶寶說@
你好@
請看看這兩個情況有什麼不同。
沒錯,一個有換行,一個沒換行,到了執行到@的時候都必須點一下。
在NScripter裡換行有兩種情況,一種是你在腳本裡換行,程式就自動幫你換,另一種是你的句子太長,程式會自動幫你換,用說的不清楚,改成下面程式碼試試(注意不斷行唷):
天譴寶寶說@天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說天譴寶寶說好@
句子太長出現error是很正常的事,讓我們再回想一下default表,其中有一句「橫23文字縱16文字」,這是什麼意思呢?
這表示對話框一行可以塞23個文字,總共有16行,超過這個字數的話就會出現文字超過對話框的error,因此必須換頁。換頁的符號是「\」
天譴寶寶說\你好@
把程式碼改成這個試試看,換頁是比較需要注意的小細節,因為常常有人對話寫得太奔放忘了換頁結果造成error。
再回到@,也許有人會說,那每次句子停頓都要加一個@,不是會累死,是沒錯,因此有個指令叫做clickstr,這個是放在define區的指令,範例如下
;mode800
*define
Clickstr"!?。」",2
game
*start
天譴寶寶說!你好。
天譴寶寶回答:嗄?
End
注意標點符號都要用全形。
Clickstr為命令的本體。「想讓它強制等待click的文字」之內所輸入的全形記號之後會產生強制等待click。因此在範例裡面,「!?。」」會有強制等待click的功能。
「強制行設定數字」「強制改頁行設定數字」為設定到那一行為止執行強制等待click功能,而從那一行開始會變更成等待改頁功能的參數。
為了防止文章超出最大行數而產生error,從最大行數減掉「強制行設定數字」的行數之後,如果出現強制click的文字的話,不會執行強制等待click的功能,而是變成等待改頁功能。
例如:最大行數為16而「強制行設定數字」為2的場合時,出現在1到13行的設定文字會有等待強制click功能,而14到16行的特定文字則是變成等待改頁功能。
雖然強制改頁的功能能夠減輕許多script上的作業時間,但是如果出現超過設定行數以上的長文章,仍然會引起最大行over flow error。
將「強制行設定數字」設定為2,但是超過三行以上都沒有出現強制click的設定文字時,仍會超過最大行數而引起error。
可以利用將過長的文章切為兩半、把設定行數增加、手動輸入改頁控制記號的「\」等方法來處理。
如果在奇怪的地方出現等待click、改頁記號而遇到困難時,可以在記號之前輸入「_」(下橫線)。輸入下橫線的話,在其之後的被設定為強制click的符號會被取消功能。
像是「「咦?」」或是「搞什麼鬼呀!!」這樣連續出現設定文字的時候,只有最後那一個符號會有等待強制click、強制改頁的功能。
範例如下:
天譴寶寶說_!!你好_。。
天譴寶寶回答:嗄?
如果要在句子與句子中間加入空白行呢?
天譴寶寶說!你好。
天譴寶寶回答:嗄?
大家試試看就可以發現這是沒有用的,因為空白行會被視為沒有輸入任何指令,包括換行,正確的指令如下:
天譴寶寶說!你好。
br
br
天譴寶寶回答:嗄?
注意,br是半形,半形是指令,全形是文字。接下來還有一些稍微進階的指令,就等下次再說明囉。