【RogueBasin】Roguelike 基本功系列文章 - Roguelike 的行動(dòng)相關(guān)機(jī)制
網(wǎng)站:
http://www.roguebasin.com/index.php/Preferred_Key_Controls
http://www.roguebasin.com/index.php/Two-Key_Targeting
http://www.roguebasin.com/index.php/Implicit_Facing
譯言:這部分講的是100%的傳統(tǒng)Roguelike,在Linux或DOS系統(tǒng)上運(yùn)行的那種。

移動(dòng)
關(guān)于鍵盤(pán)的移動(dòng)快捷鍵,早期流行的方式有兩種,即vi模式(見(jiàn)代碼塊)和小鍵盤(pán)模式。需要注意的是,wasd和esdf四向移動(dòng)方式是《雷神之錘》開(kāi)始的事。
vi 設(shè)計(jì)的優(yōu)點(diǎn)包括:
對(duì)于vi和vim用戶來(lái)說(shuō)最熟悉,因?yàn)檫@是該文本編輯軟件中用戶移動(dòng)光標(biāo)的方式
不需要使用Num鍵盤(pán),意味著能適配絕大多數(shù)鍵盤(pán)
vi 設(shè)計(jì)的缺點(diǎn)包括:
對(duì)于不用vi和vim的人來(lái)說(shuō)有學(xué)習(xí)曲線,映射關(guān)系違反常識(shí)
vi是為qwerty鍵盤(pán)布局設(shè)計(jì)的,其它布局很難適應(yīng),某些分體式人體工學(xué)鍵盤(pán)也會(huì)將Y與其它vi鍵分開(kāi)導(dǎo)致不舒適的操作
對(duì)于單沖程鍵盤(pán)(早期鍵盤(pán)類(lèi)型,無(wú)法正常按出類(lèi)似Ctrl+Z組合鍵)顯著減少可用快捷鍵數(shù)量
由于y和n也在移動(dòng)鍵中,可能在彈出選項(xiàng)時(shí)誤觸(鑒于它們對(duì)應(yīng)的快捷鍵就是y和n),不過(guò)可以通過(guò)要求使用大寫(xiě)來(lái)解決
Num 鍵盤(pán)需要考慮的問(wèn)題:
一些鍵盤(pán)通過(guò)使用NumLock將字母切換為Num鍵,使用這些鍵盤(pán)的用戶在游戲時(shí)會(huì)進(jìn)行頻繁切換操作;更不要提連這個(gè)功能都沒(méi)做的鍵盤(pán),這種情況下可能需要外設(shè)進(jìn)行游戲
大多數(shù)鍵盤(pán)的Num鍵盤(pán)距離字母鍵盤(pán)很遠(yuǎn),玩家往往需要長(zhǎng)距離移動(dòng)手指,這在實(shí)時(shí)Roguelike中尤為致命
行動(dòng)
就鍵盤(pán)操控而言,一般的Roguelike游戲是用助記符綁定行動(dòng),如:
由于許多Roguelike游戲提供自由的行動(dòng)方式,開(kāi)發(fā)者很快就會(huì)發(fā)現(xiàn)一些助記符之間會(huì)沖突,比如上面提到的D,究竟用來(lái)做什么比較好呢?為此,一些Roguelike游戲提出了一些解決方案:
使用組合鍵,如Shift、Alt、Ctrl/Meta等
《NetHack》使用了擴(kuò)展命令模式#,通過(guò)輸入更多鍵來(lái)拼寫(xiě)出非常見(jiàn)操作比如“#drag”等
通過(guò)呼出操作菜單來(lái)選擇操作,比如《Pixel Dungeon》桌面端的右鍵菜單
雙鍵定位
Roguelike游戲中的射擊類(lèi)動(dòng)作,通常都需要先指定目標(biāo),再進(jìn)行動(dòng)作。對(duì)于實(shí)時(shí)機(jī)制游戲來(lái)說(shuō),這些操作用傳統(tǒng)邏輯可能需要花費(fèi)大量時(shí)間,從而造成極大的麻煩。一些作者開(kāi)發(fā)出了雙鍵定位以解決這一問(wèn)題,并將其反哺到傳統(tǒng)Roguelike中。
雙鍵定位指,當(dāng)玩家選擇好攻擊動(dòng)作后,可通過(guò)依次按下瞄準(zhǔn)鍵+靶鍵的方式快速選中敵人并進(jìn)行攻擊動(dòng)作,這樣的一個(gè)機(jī)制。在選擇好敵人前,攻擊動(dòng)作處于預(yù)備階段。
其使用時(shí)的情況大致如此:當(dāng)玩家按下瞄準(zhǔn)鍵時(shí),玩家攻擊范圍內(nèi)的所有目標(biāo)都將被分配一個(gè)指示字符,當(dāng)處于瞄準(zhǔn)狀態(tài)時(shí),指示字符將覆蓋實(shí)際字符以作為標(biāo)記。譬如原本你面對(duì)一條龍(D)和一只僵尸(Z),當(dāng)進(jìn)入瞄準(zhǔn)狀態(tài)時(shí)他倆被依次分配Q和W靶鍵,則此時(shí)的龍顯示為Q,僵尸為W。按下對(duì)應(yīng)的靶鍵,如W,則攻擊動(dòng)作立即對(duì)僵尸(Z)進(jìn)行,同時(shí)解除瞄準(zhǔn)狀態(tài),兩名敵人的標(biāo)識(shí)恢復(fù)正常(D、W)。
瞄準(zhǔn)狀態(tài)可以設(shè)置為自然解除,以下是一些可供參考的解除條件:
攻擊范圍內(nèi)無(wú)目標(biāo)(敵人移出/玩家移出/全部消滅等)
無(wú)法進(jìn)行該攻擊(彈藥/藍(lán)量不足等)
可以不單獨(dú)分配瞄準(zhǔn)鍵,而是以“滿足瞄準(zhǔn)條件動(dòng)作的動(dòng)作鍵”作為瞄準(zhǔn)鍵。同理,解除瞄準(zhǔn)狀態(tài)的鍵可與瞄準(zhǔn)鍵設(shè)置為同一個(gè)。但要注意,這些設(shè)置可能與類(lèi)似“雙擊動(dòng)作鍵視為對(duì)自身使用”的設(shè)置不兼容。
這種瞄準(zhǔn)系統(tǒng)的缺點(diǎn)在于,在ASCII碼環(huán)境中,玩家可能需要依賴敵人標(biāo)記來(lái)決定攻擊策略,這種覆蓋會(huì)打亂規(guī)劃。對(duì)于這種缺點(diǎn),可以使用臨時(shí)圖例或閃爍文本等方式進(jìn)行解決。較為現(xiàn)代的游戲則可以用腳注甚至氣泡等方式進(jìn)行顯示。
如果是每次都需要自行選擇法術(shù)進(jìn)行釋放的系統(tǒng),可以設(shè)置預(yù)備法術(shù)隊(duì)列機(jī)制以供玩家一次快速施法。
朝向系統(tǒng)
有些Roguelike游戲會(huì)涉及朝向計(jì)算,攻擊側(cè)身或背后有傷害/暴擊加成并使被攻擊者轉(zhuǎn)為正對(duì)攻擊者。一些游戲選擇像日式戰(zhàn)棋一樣回合結(jié)束后手動(dòng)選擇朝向;而另一些游戲使用自動(dòng)決定朝向的機(jī)制。朝向系統(tǒng)在Roguelike游戲中實(shí)際可以被類(lèi)似“圍攻”等的系統(tǒng)替代。
對(duì)于自動(dòng)朝向,以下是一種設(shè)計(jì)思路:
若最后一次動(dòng)作是移動(dòng)或攻擊,則面對(duì)方向是移動(dòng)/攻擊給出的方向
否則,面向最近可見(jiàn)敵人
否則,不改變面向
對(duì)于非即時(shí)命中飛行物,玩家的自動(dòng)朝向算法應(yīng)該考慮到是否對(duì)該飛行物進(jìn)行判定。
對(duì)于朝向,以下是ASCII碼中常見(jiàn)的側(cè)翼攻擊判定方式
將所有攻擊限制在水平/垂直/對(duì)角線上可以通過(guò)有效縮減計(jì)算成本及誤差,否則可能會(huì)采用較為復(fù)雜的弧度公式。
時(shí)間機(jī)制
Roguelike最大的特點(diǎn)便是其一致性,玩家與敵人同享一片天地,但這造成了時(shí)間上的麻煩。
我們知道DND游戲中,一個(gè)標(biāo)準(zhǔn)輪大概相當(dāng)于游戲世界中的6秒,如果DM和PC能夠飛速運(yùn)轉(zhuǎn)骰筆,他們完全可以打出無(wú)限接近于即時(shí)的戰(zhàn)斗。但實(shí)際上,大多數(shù)的玩家還是在走標(biāo)準(zhǔn)的輪次回合以期正常地結(jié)束戰(zhàn)斗。
在傳統(tǒng)Roguelike中,時(shí)間也依托于“回合”這一概念。早期的游戲由于設(shè)計(jì)較為簡(jiǎn)單,以玩家行動(dòng)結(jié)束為基準(zhǔn)的“玩家回合制”占據(jù)了主流,敵人和環(huán)境的行動(dòng)實(shí)際被包含在玩家回合的“判定階段”中。但隨著游戲需求的增加,這種靜態(tài)的時(shí)間觀念便不能處理更為復(fù)雜的情況,由此衍生出各種各樣的時(shí)間系統(tǒng)。如“同時(shí)行動(dòng)制”和“資源制”。
同時(shí)行動(dòng)制,指在判定階段將包括玩家在內(nèi)的所有準(zhǔn)備行動(dòng)同時(shí)發(fā)生?;蛟S玩家在回合準(zhǔn)備階段選擇攻擊僵尸Z,但這只僵尸實(shí)際速度比玩家快并選擇逃出玩家的攻擊范圍,那么這次攻擊在判定階段可能就會(huì)落空。
資源制下的時(shí)間被分為無(wú)數(shù)塊,每次玩家回合操作結(jié)束后,在下一次回合操作到來(lái)前,游戲的時(shí)間都將以塊的形式流動(dòng),流動(dòng)的塊數(shù)與玩家角色的數(shù)值或使用的動(dòng)作有關(guān)。若時(shí)間塊中發(fā)生了事件比如敵人決定攻擊玩家,那么就會(huì)立即表現(xiàn)出來(lái)。