談RSLG的中期製作

在經過前一個月介紹後,各位對於設計一個RSLG遊戲是不是比較清楚了呢?在這一次的介紹中,筆者將為各位介紹關於戰鬥AI、特殊效果、以及操作方式的設定,希望對各位在設計RSLG遊戲的時候能有幫助。好了,現在就不多說廢話了,我們就進入正題吧。

戰鬥AI的設計

在本專欄中,筆者曾經在一九九五年十二月的「談遊戲的人工智慧」以及一九九六年二月的「再談人工智慧的設計」中和各位談話如何去設計敵人角色的人工智慧。現在就讓筆者依這些理論,來為各位說明人工智慧的運作原理。

在敵人的人工智慧中行動中,可以分成搜尋目標、決定行動、以及執行任務這三個步驟。若是要以流程圖來表示的話,就如同下圖:

圖一:人工智慧的流程
開始

搜索目標

決定行動

執行任務

結束

在上圖中各位可以看到當電腦AI的進行的時候,是分成三個不同的步驟。其中的前兩個步驟「搜尋目標」和「決定行動」是用來思考的,而最後一個步驟是負責執行的。有了思考和執行兩個部份,遊戲的人工智慧才能順利的進行。

在這三個步驟中,故名思義搜索目標的功用就是為敵人角色找尋它的目標,這個目標通常來說都是一個地點(無論是要攻擊對方、或是躲避)。不過在搜尋目標地點的時候,通常卻會因為設計的方式不同而產生不同的效果。

各位應該知道,在RSLG遊戲中有採用「即時制」以及「回合制」這兩種不同的行動方式。在即時制中,每一次輪到的角色都只有一位,因此要決定它的行動就比較單純。但是在回合制中,每一次輪到行動的時候同時需要操作許多位的角色,因此這個時候如何決定那一位角色先行動就成為AI強弱的重要條件了。

在目前國內的遊戲中,設計者大多是依著敵人角色的編號(無論是怎樣的設計方式,在程式的內部都會有編號),然後依著這個編號一名一名的輪著行動。因此在這種情況下,就會有考慮不完整的情況發生。就這麼舉個例子吧,若是編號一號是攻擊力較弱的角色;二號是攻擊力較強的角色,因此若是依著編號來行動的話,可能就會發生一號角色不能將對方擊斃,需要二號角色來補上一擊。如果說在決定行動的順序時,是依那一名角色先行動最有利的方式來挑選行動的角色時,就會有二號角色先將對手擊斃,而一號角色可以做其餘的行動的有力情況。在這樣的情況下,若是程式能夠作出第二種的反應就可以看得出這是個設計較好的人工智慧模式。

那麼筆者現在就再舉一個有數字的範例來讓各位瞭解一下吧。在這個範例中,我方及對方各有三位角色,它們的狀況分別如下:

表一:範例中的敵我狀況表

在這個例中,為了不讓計算的公式太複雜,因此攻擊時造成傷害的計算公式如下:

傷害值 = 攻方攻擊力 – 守方防禦力

如果以這個例子來說,若是角色行動的順序是照號碼,而攻擊對象的選擇是依生命的高低作為標準的話。那麼我們明顯的可以看得出來我方A是無法將對方D打死的(傷害值 = 3 – 2 = 1),因此還需要由第二位角色再補上一擊。但是若是AI在運作的時候先計算那一位的行動最有利,結果求出我方B可以有機會一擊將對方D這名角色擊斃的話,就由我方B先行動,之後再依當時的狀況來決定其餘角色的行動順序以及目標。

這樣的說明各位瞭解嗎?現在瞭解為什麼筆者要說明行動順序對於人工智慧的重要性了吧。因為好的人工智慧能夠讓電腦所控制的一方不作出多餘的行為,也不會浪費攻擊力。各位看看國內的RSLG遊戲,是不是每一個都是依固定的順序行動呢?這樣子無形的使得電腦控制的一方不能善用每一股力量,而產生浪費的情況。

講完了行動的順序,現在我們來看看如何挑選行動的目標呢?這就要運用筆者在以前所提過的「積點式計算法」了。現在請看下圖,這是筆者要用來說明的範例圖:

圖二:範例的戰場圖

在這張圖中,A到F就是上面的表一中所列的六位角色,它們在地圖上站的位置。至於地圖上的「▓」方塊,表示的是不可以通過的地帶。我們先不管地形的影響力,每一位角色都可行動五格的行動能力,同時現在輪到我方A、B、C角色的行動了。如果說我們的積點公式如下:

表二:範例中的積點公式

公式      積點
可以攻擊到敵人     1
可以將敵人打倒     2

如果依這個計算方式的話,我們可以簡單的求出我方A、B、C角色對敵方D、E、F角色的積點如下:

表三:範例中的積點表

___ 對方D 對方E 對方F
我方A 1   1   0
我方B 2   0   1
我方C 0   0   0

從上面的這個表,各位可以看到我方B的角色在攻擊對方D的時候有最高的積點值,因此可以決定先由我方B來行動,進行攻擊對方D這名角色,之後再輪到我方A及我方C這兩名角色的行動。或許各位會問,如果說我方B沒有將對方D打死的話,那麼會怎麼樣呢﹖如果說真的發生這樣的情況時,對方D的生命不是下降了嗎﹖那麼這個時候我方A就有可能擊斃對方D,因此積點可能會改變了,而行動也會跟著改變了。

在這個積點表中只有單純的兩行,不過這只是範例,正常的情況不會只有這麼單純的公式,可能還要加上各角色互相的對照表(像是使用弓箭的角色攻擊飛行的角色比較有利)、以及角色的重要性(像是某些特殊的角色敵人比較喜歡攻擊)、以及法術的計算,會使得這個公式表變得比較複雜,只要各位真的去設計一次就會知道了。

此外,若是一名行動的角色時擁有攻擊或是法術等多種不同的攻擊方式,那麼在計算積點時就更複雜了。就以法術來說,通常在遊戲法術都分成幾個不同的等級,越強的等級可以造成越高的傷害。因此若是人工智慧有思考到這一部份的時候,就要注意使用最適當的法術等級來進行攻擊。筆者曾經看過許多遊戲中敵人的角色一但看到玩者控制的角色時,就不管一切的只會用最強的法術來攻擊,完全不考慮這樣的使用方式會不會太浪費。

那麼要怎麼樣才可以讓電腦控制的角色使用適當的法術等級呢?其實最簡單的方式就是像玩者在進行遊戲時選擇法術等級的方式相同,只要去比較一下玩者控制角色的生命狀況應該用那一級的法術就可以使它死亡,要達成這個目的只要比較一下法術的傷害值以及角色剩餘的生命就可以了。如果說法術又有攻擊範圍的差別呢?那麼各位可以自己考量一下是以擊倒角色為重還是以傷害值最高的重,然後再依這個方式來決定法術使用的順序。

在決定了行動的順序以及目標之後,接下來就是執行的部份了。其實在人工智慧中這一部份並不困難,只要在前面的步驟中能夠挑選到正確的目標,通常來說就好像玩者操控自己的角色那樣的方式,就是將角色行動到指定的地點,然後做出正確的動作而已。

特殊效果

接下來要談的是特殊效果。在RSLG遊戲中,特效佔了很重要的地位,因為如何能讓遊戲看起來很好玩,特殊效果可能是這一切的問題所在。在遊戲中特效可以分為地圖上以及戰鬥中兩個方面,現在就讓筆者就這兩個方面來分別說明。

首先我們看看地圖畫面上的特效,比較常見的作法是加上與天候、地形有關的特效。像是天空中飄著雲、打雷、下雨、下雪等作法,通常都是運用簡單的貼圖功能就可以完成如此的特效。但是各位有沒有想過,是不是應該讓這些特效也會影響戰鬥的進行呢?

舉例來說,若是現在天上下起雨來,是不是對人物的行動會造成影響呢?有沒有可能一些比較低窪的地區在這一場雨後就變成一個水塘,成為無法通過的或是比較難通過的地帶呢?或是說天上落下了一場冰雹,使得被打中的角色都受到了某些傷害,這樣的作法是不是比較有趣呢?

其實到目前看來,大部份的遊戲雖然有運用這些所謂的特效,但是這些特效所影響的大多只是視覺上的改變,並沒有達到筆者所說的真正對於遊戲的進行產生影響。以筆者所看過的遊戲來說,只有《夢幻模擬戰》這個樂器上的遊戲玩者可以利用魔法中的隕石術來攻擊地面,若是打中城牆的話該地點就會變成可以通行的地帶。但是那畢盡是使用法術,是玩者可以自由控制的,而不是由程式自由產生,對於遊戲的進行產生變化的變數,在特效的威力上來說就弱得多了。

接著我們再看看戰鬥中的特效,通常來說這部份的特效大多使用在攻擊的效果上,無論是必殺技、法術等等,在畫面上大多會使用筆者所稱的貼圖特效,也就是以貼圖的方式來變化畫面。另外一種作法就是程式型的特效,像是畫面的放大、縮小、馬賽克效果等等,則是屬於另一種的特效。

這兩種特效對於畫面來說雖然都是造程視覺上的變化,但是在本質上有著相當大的差異。以貼圖特效來說,它所需要的就是美術人員所繪製的一張一張的圖畫。因為在進行貼圖的時候需要將它讀到記憶體中來進行貼圖,因此記憶體的控制就很重要了。至於程式型的特效,它所做的效果是程式利用記憶體(不管是顯示卡上或是主機上的)來進行畫面的變換,所以在記憶體上的消耗空間相對的比較小。各位在使用各式各樣的特效時,千萬要注意記憶體的控制。否則若是畫了一組效果但是沒有記憶體能夠載入,那不是浪費了嗎?

當然啦,隨著目前電腦記憶體的越來越高,以及保護模式的出現,再加上Windows 的盛行,好像每一台電腦都有著8M以上的記憶體,使得設計遊戲在記憶體上的限制相對的減輕了許多,以往設計遊戲時那種搶記憶體的情況已經不常見了。但是各位規劃遊戲的企劃們,請記住筆者的一句話「若是您不好好的規劃,記憶體是永遠不夠的。」因為就算電腦有8M的記憶體,也不表示真正的使用空間有這麼多,不要忘了程式、音樂、音效等各方面都需要在這8M的空間中工作,所以若是圖畫得太多了還是免不了遭遇刪減的問題唷。

就筆者的眼光來看,特效對於一個遊戲可以說是它的包裝,有了這些特效來吸引玩者後,就要靠遊戲的內容來讓玩者感受了。如果一個只有包裝但是確沒有內容的遊戲,是不會受到玩者的喜愛;相對的來說,若是一個遊戲只說豐富的內容但是卻沒有良好的包裝,那麼它在吸引玩者的第一步上就失了先機,又怎麼能在市場上有不錯的銷售狀況呢?

操作方式

接下來我們談談如何去設計一個好的操作方式吧。事實上這一項工作雖然很簡單,但卻是相當重要的,因為若是不先作規劃,到了遊戲的末期才開始想這件事情的話,那時程式都寫得差不多了,又怎麼去修改呢?

我們先看看目前電腦的趨勢,隨著Windows 越來越流行,滑鼠也成為一台電腦的制式裝備之一了,因此使用滑鼠作為遊戲的控制界面也成為目前的一種趨勢。不過在這麼做之前,各位要先看看自己所制作的遊戲到底適不適合使用滑鼠來操作呢?

如果以本遊戲來說,一個單純的RSLG應該是使用滑鼠作為操控界面的最佳示範了。在RSLG遊戲中,大略的指令也不過就是選取目標、決定目標、以及取消目標這幾種單純的動作,看起來和滑鼠的控制方式很類似不是嗎﹖因此各位在開始制作遊戲的時候,就可以有系統的將遊戲所需要的控制方式整理為可以使用滑鼠來操作的流程圖,這個流程圖大約是下圖的樣子:

圖三:操作流程圖的範例

選擇角色/選擇指令/行動
_        /攻擊
_        /道具
_        /休息

在這樣子的流程圖規劃下,設計這就可以單純的將指令依層次來設計,使得整個遊戲操作的時候能夠如他所預想的那樣。不過有一點要注意,那就是設計的控制方式請不要脫離一般人常用的方式。以滑鼠來說,左鍵大多是用來執行、決定指令等等,而右鍵則是處理取消的工作。因此大家在設計的時候千萬不要脫離這個原則,設計出與一般人習慣相反的方式喔。

當然啦,一個RSLG的控制系統絕對不是前面這個單純的列表所表示的單純指令而已,可能還需要有系統指令、以及可以觀查整個部隊狀況的指令。因此這個時候設計者的巧思就很重要了。有的遊戲是讓玩者按滑鼠的右鍵(也就是取消鍵)來叫出另一個選單,其中就包括了這些指令。也有遊戲是採用將游標移到沒有角色停留的位置上,然後按左鍵(也就是決定鍵)來叫出這個選單。至於那一種作法比較好呢,就請各位讀者自己想一想吧。總歸一句話,操控系統要能夠讓玩者輕鬆的使用,才能算是好的操控系統。

如果說需要用到鍵盤的話,就請各位好好的想一下要怎麼去規劃按鍵的位置,一些設計得要讓玩者施展「五爪金龍」或是「八爪魚」的遊戲在操作上恐怕不會有很好的表現吧。若是可能的話,設計一個可以讓玩者自己決定按鍵的系統也是不錯的設計。

本期結論

事實上,設計一個RSLG並不困難。但是當遊戲進行到這個中期的階段時,一些瑣碎的小事就會開始困擾著制作者。像是AI的設計,若是不能好好的控制的話,最後便會設計出一個有著「人工智障」的遊戲來,筆者相信各位都不希望發生這樣的事情吧。

(1996.12 發表於電腦玩家雜誌)