前情提要:

defisym:GAL開發手記·一?

zhuanlan.zhihu.com圖標

「你說我只是想開發個GAL,怎麼就做上戰棋了呢」

雖然這一年一直有讀一些書,也有在堅持寫一些東西,但一直沒什麼長進,不僅沒學會說人話,反而邯鄲學步,把原本怎麼說話忘得差不多一乾二淨。說好聽了叫「瓶頸」、「平台」,其實就是廢了……

天才都是一出手就震驚世人,像我這種折騰幾年跳起來還打不著人家膝蓋的屑還是認了吧,認真寫都比不過人瞎編。瓶頸瓶頸吧,干點別的,等別的瓶頸了再倒回來,假裝這邊不瓶頸


雖然沒有這樣設計過,但「春AVG秋戰棋」大約已經成了一個不成文的規律。雖然深究起來,歷史也能追溯到15、16年,但相較其他模塊,戰棋部分的開發時間的確短了許多,換算到完成度上,和AVG這種實裝UI小修小補(FLAG高高掛)的根本不在一個層次。11月先是花了一周左右的時間,將一年前的代碼讀了一遍

咱一邊讀一邊抽自己嘴巴子,抽完了還納悶兒,這破玩意到底是咋跑起來的?好像還沒啥bug?(但擴展性是真的差,追加新功能是真的麻煩)

所以說僅僅寫注釋是不夠的,該看不懂還是看不懂,老老實實寫詳細設計,偷懶不得,不然回頭能看懂這是在做什麼,但已經忘了這調用的是哪兒,調用的東西又想幹啥

讀完之後,花了兩周左右將戰棋整個重構了一遍,有著17年的基礎,全程沒有遇到太大的問題,過去的代碼也基本上順延下來使用了,比AVG這重構完原本的東西一行都沒了的丟人玩意強多了,後續也嘗試著實現了其他的模塊,比預想的要順利,所以咱終於能在18年完成17年就該完成的16年設計的戰棋系統的原型了,雖然策劃案里一多半的東西還沒動

和上一篇一樣,這裡也大概的整理一下思路,雖然沒啥借鑒價值吧

這是一篇階段性總結


戰場的初始化

地圖設計上分了五層,第一層為遠景或水面動效,第二層為地圖底板,第三層為地圖障礙,第四層是單位動畫,第五層是高於單位的遮罩,用於房屋或飛鳥

障礙測試用圖,我就鋼筆隨便一扣

雖然應該是用一個數組來定義地圖通行,但那樣搞起來好麻煩,做一套RM系的圖塊這輪子就造大發了,最後決定初始化時掃描地圖,標記障礙,確定可通行區域與不可通行區域,隨後創建敵我角色,並對應更新戰略視圖

隨後初始化行動隊列和敵人目標隊列,不斷地循環,直到當前單位的行動條大於行動條上限,設定其為行動單位,並更新鏡頭目的坐標

在回合開始時,會更新單位的通行度,將非行動單位全部標記為不可通行,否則會出現單位穿模

像這樣(2017 Ver)

鏡頭

鏡頭有兩個模式:跟蹤單位與自由鏡頭

在回合開始前和玩家執行任何操作時,都會更新目標鏡頭位置,並自動將鏡頭拉過去

角色行動

如果角色行動,則根據玩家的操作不同,執行不同的操作

移動

移動的情形,會使用DFS計算出玩家可移動的範圍(對,這已經是最高級的演算法了,就是那個算連通水窪的經典水題),並獲取玩家指定的移動目標點,丟到尋路裡面去

大概就是這個了

尋路這個,引擎基本上都自帶,不管是直接接管運動,還是給你算出來每一步的坐標,總之都能夠處理,就算不自帶,多少也都有插件可用,總之會儘可能避免仙五前那種點台階上面角色直線跑過去執著的卡牆的情況

攻擊

攻擊的情形,會根據攻擊範圍的設定來計算攻擊範圍

目前是只有遠程一格/近戰範圍兩種,後者和移動範圍計算一模一樣

在其他遊戲里,為了設計角色區分度,會搞出奇奇怪怪的攻擊範圍來,比如槍兵能打身前兩格,法師沒法近戰之類,這個後面遇到了再分別實現

敵人行動

敵人(超蠢)AI

如果敵人行動,敵人會先計算可能的攻擊位點,並選擇最合適的一個進行攻擊

說白了就是挑軟柿子捏,找好欺負的欺負

雖然按理說應該為敵人設計更複雜的行為,但目前還沒有實現(或者說策劃的細節還在調整)

在舊版本中,近戰敵人會自動向著最近的角色移動,並提前一步終止,遠程敵人會先計算可能位點,再向位點移動,這就導致了,不同的敵人有不同的攻擊目標計算和移動方法……

蠢死了,近戰敵人不久等同於攻擊距離為1的遠程敵人嗎?

如果敵人就在攻擊位點上,進入攻擊階段,不在則進入移動階段,所有的可能位點均不可達則結束行動,移動結束後,到達攻擊位點進入攻擊階段,不在則結束行動

彈反與格擋

敵人攻擊階段會進行彈反與格擋的判定,彈反的收益最大,故判定也最為嚴格

視頻封面

近戰彈反

近戰敵人判定動畫幀,遠程敵人判定遠程攻擊(比如弓箭)和角色的位置,根據判定的結果會進行相應的處理

近戰彈反的視頻我錄了十幾次才成功,遠程攻擊的彈反更難觸發,理論上是能夠無傷通關的……理論上,我這種手殘還是算了

測試的時候動畫超慢速還有量表提示,可以確保判定是正確的

傷害結算、銷毀、勝負判定

攻擊階段結束後會進行傷害結算

舊版本的傷害結算劃分了敵我遠程近戰共四種,重構後設計為了公有方法,只要指定攻擊發起方ID和攻擊承受方ID,就會自動完成傷害的計算和武器動畫的生成

傷害結算結束,並造成生命值傷害後,會進行銷毀判定,將死亡角色銷毀,並維護行動隊列和攻擊目標隊列

銷毀判定階段後,會判斷勝負條件,如全滅敵人/消滅特定敵人等


本作的一些特殊設定

·防禦值

防禦值出於節奏調整的角度設計,概念與《HALO》中的「護盾」類似,但又不完全相同

攻擊會最先造成防禦值傷害,造成傷害超過一定數額時對生命值造成穿透傷害,當單位的生命值歸零時,單位死亡

回合開始時,若沒有不良狀態,不被場地屬性壓制,角色會自動回復生命值與防禦值

·格擋與彈反

本作取消了命中-迴避,我方角色對敵攻擊當前版本中100%命中,敵人攻擊時,玩家可把握時機按下對應按鍵,來進行格擋與彈反,格擋與彈反無論遠程攻擊還是近戰攻擊均能觸發

·士氣

戰鬥過程中會獲得士氣,最主要的作用是使用不同效果的符卡

·符卡

(正式版不會叫做符卡,但姑且就這麼叫了)

符卡提供了本作設計層面的大部分策略深度

符卡分為兩類,通用符卡與專用符卡,符卡可以在戰鬥前由玩家根據敵人與角色配置在已有符卡中決定,卡組數量上限與出戰角色數量有關

玩家可以將卡組全部設定為通用的輔助符卡(追加移動/追加攻擊)等穩紮穩打;也可以設定為特定角色的專有符卡,確立一個或兩個隊伍核心進行速攻;或者兩者任意組合,注重符卡和角色特性之間的連鎖

以上說不定啥時候就改動取消了

做不出來才是常態


And……

其他花邊兒零零碎碎的東西還有不少,不過都屬於本作的額外設計,說白了就是自high,也就不講了

另外本作設計上是正視角,但手頭只有傳頌和RO的斜四十五度素材,所以……

反正是原型兼業餘研究,沒差

作為原型來說足夠了,正式版本(如果有)會全部替換掉(用侵權素材會被釘恥辱柱的)

另外文中使用的並非全是最新版本的截圖,部分甚至有一年多的歷史……

然後扔一個格擋吧,畢竟錄出來了……仔細看鏡頭縮放的中心點其實和特寫的中心點不一樣

視頻封面

近戰格擋
大概和M子一樣抖M了

推薦閱讀:

相关文章