現有會員可[按此]登入。未成為會員可[按此]註冊。
[公司模式 - 關]  [懷舊模式 - 開
[Youtube 預覽 - 開]  [大字型]  [小字型]

您現在聚腳在 遊戲台內。

跳至第

發起人
《寶可夢傳說Z-A》的運用實例講座 支撐回合制與即時制的戰鬥系統
4 個回應
周星磁力王

https://gnn.gamer.com.tw/detail.php?sn=309705

  噴火龍使出了「火焰拳」!乍看之下只是簡單的行動,卻會因為天氣、特性、持有物等要素的組合,使結果產生大幅變化。超過 1000 種寶可夢、900 種以上招式,再加上 300 種以上特性與 200 種以上道具,這些龐大的設定資料彼此影響而形成的戰鬥邏輯,究竟是如何在每次推出新作時持續擴張,同時維持整合性的呢?

  此外,2025 年發售的《寶可夢傳說 Z-A》(以下簡稱 Z-A)採用了即時制戰鬥,這套系統又是如何與過往的回合制戰鬥共享基礎架構的呢?這些令人好奇的問題,在 7 月 22 日於「CEDEC 2026」舉辦的講座「支撐寶可夢對戰進化的戰鬥系統基礎設計與運用事例」中獲得了解答。

  本次登壇的講者,是隸屬於 GAME FREAK 研究開發部「寶可夢・戰鬥系統團隊」的宗像快與小幡敏宏。

https://p2.bahamut.com.tw/B/2KU/97/7b034bf6276017ef6e46ea8ca11zqk55.JPG
就算使用同個招式,也不會發生同樣的事

  宗像快首先展示了三項寶可夢戰鬥的特徵。第一個,便是戰鬥系統使用的設定資料有多麼龐大。總數超過 2400 種類,且每次的新作總是會追加寶可夢與招式等合計 200 種類以上的資料。正是因為如此龐大的資料才造就了戰鬥的多樣性,卻也很難維護品質。

https://p2.bahamut.com.tw/B/2KU/96/c34d8eaecec7483073f2adf2731zqk45.JPG
https://p2.bahamut.com.tw/B/2KU/95/d1f51c57f3df329a7a3261c5211zqk35.JPG
  第二個是被動技能。不用玩家操作,只需要達成條件就能自動發揮效果。作為舉例的特性「威嚇」,在戰鬥出場的時候,就會降低對手一階的攻擊力。

  這類處理並非單純插入一段效果就能解決,有時甚至會發生遞迴計算,因此必須能夠控制複雜的處理順序。

  第三個,便是在戰鬥中的數值會時時刻刻變化。宗像快接著以甲賀忍蛙的特性「變幻自如」為例,甲賀忍蛙原本同時具備水屬性與惡屬性,但在使出招式前,特性會發動,使自身屬性變為與該招式相同的屬性。也就是說,若甲賀忍蛙選擇飛行屬性招式,那牠自身也會變成飛行屬性。

https://p2.bahamut.com.tw/B/2KU/94/9d7c90a3dac8a33a7ae87a63f31zqk25.JPG
  這三項要素彼此影響,使得《寶可夢》的戰鬥系統變得更加複雜。若各專案都各自開發,就必須一邊考量龐大的組合數量,一邊維持品質,這是相當困難的事。因此,宗像氏等人的「寶可夢・戰鬥系統團隊」會跨專案參與所有《寶可夢》作品,並支援戰鬥系統的實作。

  接著換小幡敏宏上場,針對基礎設計的說明進行演講。一開始向聽眾顯示本次講座中,「戰鬥系統」的定義。舉例來說,「火焰拳」是火屬性的攻擊招式,並有 10% 機率讓對手陷入「灼傷」狀態。現場播放的示範影片中,皮卡丘正是受到噴火龍攻擊後陷入灼傷。

  那麼,如果讓噴火龍攜帶道具「櫻子果」,皮卡丘的特性為「靜電」,並且讓天氣設定為「晴天」的話,結果會怎麼變化呢?


#good2#1    #bad#1  
標籤:
https://p2.bahamut.com.tw/B/2KU/93/c21187b3fc4330aca41762f7341zqk15.JPG
  結果會大幅改變。由於「晴天」效果會提升火屬性招式的傷害,而當皮卡丘的特性「靜電」發動時,進行攻擊的噴火龍會陷入「麻痺」狀態。接著,噴火龍持有的「櫻子果」會發動,恢復牠的麻痺狀態。即便只是同一招「火焰拳」,也會依照狀況產生複數不同的連鎖反應。

  小幡氏將戰鬥系統定義為:接收「由誰,做了什麼」這樣的行動資料,並加入特性、道具、天氣等狀況後,決定「會發生什麼事」的機制。

https://p2.bahamut.com.tw/B/2KU/92/368e038751c41359ba9402172a1zqk05.JPG
  在實際對戰中,對手的行動以及增益、減益效果也會介入,使現場發生的現象更加複雜。招式、特性、道具會隨著系列作品持續增加,而過去登場過的規格,也必須保證在後續作品中維持相同運作。因此,《寶可夢》系列的戰鬥邏輯,可以說是必須跨作品維持品質與整合性。

利用「Section」與「Event」切分遊戲邏輯與個別規格

  小幡敏宏接著先提出了一個設計思維,說明了戰鬥系統再構造的背景故事。在初代《紅/綠》,是沒有特性也沒有持有物的簡單戰鬥,到了《金/銀》世代加入了新屬性與天氣,到了《紅寶石/藍寶石》世代則是加入了特性與雙打對戰。在之後的作品還導入了三打對戰、超級進化等機制,但在實作上仍是在既有系統之下進行擴張。

  而在 2016 年的《精靈寶可夢 太陽/月亮》則成為一大轉捩點。當時登場的皇家對戰,使團隊必須實作以往架構無法完整對應的多種戰鬥規則。

https://p2.bahamut.com.tw/B/2KU/91/b1f3ceee2af3889be5f3fd99e31zqjz5.JPG
  隨著戰鬥系統不斷進化,程式也持續擴張,並逐漸產生檔案肥大化、類別職責過多、緊密耦合、函式巨大化等問題。這些問題互相牽連,導致團隊難以安全地追加新規格,也可能損害戰鬥系統的維護性與擴充性。

https://p2.bahamut.com.tw/B/2KU/90/1e105f20ea3eca977f379071b51zqjy5.JPG
  在《太陽/月亮》開發結束時,宗像等人的戰鬥系統團隊判斷,若繼續沿用原本的程式架構,將無法對應今後戰鬥系統的進化,因此決定將既有系統改造成清楚且具彈性的結構。於是,「寶可夢・戰鬥系統團隊」就此成立,並在《寶可夢 劍/盾》開發時進行系統重構。

  新的戰鬥系統設定了四項要求:不論由誰實作都會採用相同結構的「結構化」;不改動既有程式碼也能追加招式與特性的「擴充性」;能以少量修改對應規格變更的「彈性」;以及容易理解、修正與除錯的「維護性」。其中,彈性與維護性往往是實現結構化與擴充性後所獲得的成果,因此講座接下來主要聚焦於前兩者。

https://p2.bahamut.com.tw/B/2KU/89/bf90a54b27156cffe54260bab31zqjx5.JPG
  團隊最一開始著手的,是遊戲邏輯的結構化。這部分導入了名為「Section」的機制。再次以「火焰拳」為例,處理流程會依序進行攻擊力決定、防禦力決定、傷害計算、HP 減少等步驟,而攻擊力還會加入天氣「晴天」的補正。


流程本身雖然單純,但若以原本方式將大量招式、特性、道具全都組合進計算中,遊戲邏輯就會變得相當複雜。於是,團隊將「要以什麼順序計算哪些內容」的部分定義為「遊戲邏輯」,並將招式、特性、道具各自的處理切分為「個別規格」。在上述例子中,天氣「晴天」的效果就屬於個別規格。

https://p2.bahamut.com.tw/B/2KU/88/f73044813f6ccb37f50207b2f21zqjw5.JPG
  「Section」則是遊戲邏輯的最小單位。透過連接「攻擊力決定 Section」與「防禦力決定 Section」等單位,便能表現處理流程。

  小幡接著強調,決定攻擊力的 Section 並不包含「天氣加成 1.5 倍」這類個別規格。Section 只定義遊戲邏輯的進行,並將個別效果切分出去。透過這樣的職責分工,就能抑制結構複雜化與實作方式的差異。

  Section 也能對應階層結構。團隊會將攻擊力決定、防禦力決定、傷害計算整理為「傷害計算 Section」,再將 HP 減少也加入其中,形成「給予傷害 Section」。接著,由上位的「招式效果 Section」統整這些處理。像「火焰拳」這類具備追加效果的招式,則能再把「賦予異常狀態 Section」加入機制中運算。

https://p2.bahamut.com.tw/B/2KU/87/bf9a7381bf56da80249a854fbc1zqjv5.JPG
  接下來說明的是擴充性。在《寶可夢》的戰鬥系統中,不改動既有程式碼也能追加招式與特性,並且能在建置時排除不需要的規格,這就是此處所說的擴充性。

  以「攻擊力決定 Section」為例,除了天氣「晴天」之外,還有特性「猛火」「大力士」「毅力」,道具「講究頭帶」「電氣球」「粗骨頭」等許多補正因素。若將這些補正全部直接堆疊在 Section 裡,就會降低維護性。

https://p2.bahamut.com.tw/B/2KU/86/02535ea52f7d081c4a73681a831zqju5.JPG
  負責擴充性的,是「Event」與「EventHandler」。當 Section 觸發 Event 時,對應的 EventHandler 便會反應,並對計算結果進行補正。Event 可以說是讓個別規格介入 Section 處理的接點,使遊戲邏輯本體不必改動,也能追加新的效果。

https://p2.bahamut.com.tw/B/2KU/85/160bdafaf406e88f31eefc5cde1zqjt5.JPG
  當攻擊力決定 Section 觸發攻擊力補正 Event 時,天氣「晴天」的 EventHandler 便會反應,對攻擊力套用 1.5 倍補正。若特性「猛火」與道具「講究頭帶」的 EventHandler 也依照條件介入,就能疊加複數效果,計算出最終攻擊力。

https://p2.bahamut.com.tw/B/2KU/84/08b3860bae013358807f7441511zqjs5.JPG
  當然,也會出現一個 EventHandler 對複數 Event 產生反應的情況。天氣「晴天」一方面會讓火屬性招式威力提升為 1.5 倍,另一方面也會讓受到水屬性招式的傷害降低為 0.5 倍。因此,晴天的 EventHandler 能同時對應攻擊力補正 Event 與防禦力補正 Event。

  若將相同運算交給 Section 處理,關於晴天的程式碼就會分散到多個地方。但若以 EventHandler 集中管理,就能更容易掌握與修正規格。


小幡接著歸納出 Event/EventHandler 的三項優點:不改變主要邏輯即可追加個別規格;不需要的功能可以在建置時移除;以及像超級進化或太晶化這類並非每部作品都會登場的大型機制,可以與遊戲邏輯本體完全切分開來。至於不會出現在該作品中的招式、特性、道具等,只要不登錄對應的 EventHandler,就能在建置時排除。

  這樣的結構還承擔了另一項職責,那就是《寶可夢》對戰特有的「插入處理與連鎖」。以開頭舉例來說,皮卡丘的「靜電」會插入「火焰拳」的處理,接著噴火龍的「櫻子果」又會發動。

  若要將這些直接寫進遊戲流程中,每次新增招式、特性、道具時,都必須追加 Section 的呼叫,結構複雜化也會變得無法抑制。因此,團隊讓 EventHandler 具備呼叫任意 Section 的功能,使其不只可以介入計算結果,也能讓新的現象發生。

  具體來說,團隊會在招式效果 Section 最後放置「招式效果後處理 Section」,並從該處觸發反應 Event。起反應的「靜電」EventHandler 若呼叫「賦予異常狀態 Section」,噴火龍就會陷入麻痺狀態。接著,收到異常狀態 Event 的「櫻子果」EventHandler 會呼叫「恢復異常狀態 Section」,治好持有者的麻痺。

https://p2.bahamut.com.tw/B/2KU/83/67ea6fa92e5217fda6b6947fad1zqjr5.JPG
  當 Section 觸發 Event,EventHandler 再呼叫其他 Section,透過這樣的遞迴結構,就能以共通機制處理複雜的插入處理與連鎖效果。

  「賦予異常狀態 Section」不只可以用於「火焰拳」讓皮卡丘陷入灼傷的情況,也能用於噴火龍因「靜電」而陷入麻痺的情況。不過,最一開始的異常狀態 Event 並不會滿足「櫻子果」的發動條件,因為當時噴火龍尚未陷入異常狀態。

  像這樣,EventHandler 只會在滿足條件時呼叫下一個 Section。透過以遞迴方式連結共通處理的結構,便能支援被動技能造成的插入處理與連鎖。

  將遊戲邏輯切分為 Section,並以 Event/EventHandler 將個別規格分離出來。透過這樣的結構,不僅能確保再利用性與擴充性,也能維持整個系列戰鬥系統的品質與整合性。

https://p2.bahamut.com.tw/B/2KU/82/6b5db2a6035034d64b30565e581zqjq5.JPG
回合制與即時制,在同一套基礎上運作

  接下來,宗像解說了這套系統在《Z-A》中的運用實例。在《Z-A》中,招式的攻擊距離與範圍、出招時機,以及寶可夢的站位都會大幅影響勝負。訓練家會與寶可夢一起移動,並在使用招式的同時迴避攻擊或替換寶可夢,是系列首次採用的即時制戰鬥。

https://p2.bahamut.com.tw/B/2KU/81/1e3c9abcea450c2a091d5e67e11zqjp5.JPG
  宗像表示:「先從結論來說,即使是完全不同的戰鬥形式,也使用了相同的戰鬥系統。」而讓這件事得以實現的要素之一,正是遊戲邏輯的結構化。


在《寶可夢 劍/盾》與《寶可夢 朱/紫》的回合制戰鬥中,系統使用的是統整一回合內行動,並輸出該段期間會發生哪些現象的「行動執行 Section」。

  選擇招式後,處理會從「招式效果 Section」開始,依序進入「發動判定 Section」「命中判定 Section」「給予傷害 Section」。發動判定會確認寶可夢是否因「冰凍」狀態等原因無法行動;命中判定則會依照招式命中率與對手迴避率等因素計算是否成功。最後的給予傷害 Section,則會參照屬性相剋來決定傷害。

  但是在即時制中,戰況會隨時變化,因此無法使用以一回合為單位處理的「行動執行 Section」與「招式效果 Section」。命中判定也會改由碰撞體彼此接觸,也就是俗稱的碰撞判定來取代。另一方面,「發動判定 Section」與「給予傷害 Section」則能在不改變規格的情況下再利用。

https://p2.bahamut.com.tw/B/2KU/80/14ff43829d6ee05a67e7dab8f11zqjo5.JPG
https://p2.bahamut.com.tw/B/2KU/79/d31f62c350a32a74524af88f4e1zqjn5.JPG
  宗像提到:「從 Section 的觀點來看,回合制戰鬥中使用過的 Section 有許多都能再利用,因此不能說這是完全不同類型的戰鬥。」能依照規格調整呼叫 Section 的順序或內部處理,並只選擇必要項目,正是因為基礎設計已經結構化。

  在《Z-A》中,只要按下招式按鈕,就會呼叫發動判定 Section;若符合使用條件,寶可夢就會使出招式。接著系統會根據碰撞體之間的碰撞判斷是否命中,若成功命中對手,就會把處理交給給予傷害 Section。也就是說,這是將回合制中使用的 Section 一部分抽出,並組進即時制運算中的形式。

  作為擴充性的例子,講座中也介紹了「守住」的實作。在回合制中,為了使該回合不會受到對手招式命中,EventHandler 會讓招式發動失敗。另一方面,在沒有回合處理的《Z-A》中,「守住」則改為讓寶可夢在一定時間內進入「守住」狀態,藉此防止受到傷害的機制。

  為了對應這兩種不同運算,團隊移除了回合制用的 EventHandler,並新建了會在給予傷害 Section 的 Event 產生反應後,將傷害設為 0 的處理。當需要改變招式效果時,只要移除不需要的 EventHandler,並依需求新增或替換成必要功能即可。既有 EventHandler 也能再利用,這同樣是其優點之一。

https://p2.bahamut.com.tw/B/2KU/78/dd4b1c17dfc79a08516e8a543e1zqjm5.JPG
  宗像總結表示,透過以結構化與擴充性為核心設計而成的共通戰鬥系統,團隊得以同時對應回合制與即時制兩種戰鬥形式。提高程式碼的再利用性,也與開發效率改善及品質穩定化密切相關。

  本場講座的重點,在於將遊戲邏輯分割為「可以再利用的單位」,並將個別規格「從主要邏輯中分離」。宗像氏最後表示:「本次講座介紹的 Section 與 Event/EventHandler 設計,應該不只適用於《寶可夢》,也能套用在所有持續複雜化的遊戲邏輯上」,接著便結束了本次演講。

原文出處:
https://www.4gamer.net/games/897/G089789/20260728007/


跳至第



  快速回覆 - 輸入以下項目

本討論區現只接受會員張貼文章,本站會員請先登入。非會員人仕,您可以按此加入為新會員,費用全免,並可享用其他會員服務。


上次光臨時間: 19/9/2026 18:40
今天貼文總數: 532 | 累積文章數目: 7,528,077

聯絡我們 |  服務條款 |  私隱政策
Copyright © 2026 HKGolden.com. All Rights Reserved.