M.U.G.E.N格鬥遊戲引擎簡介

 
http://blog.csdn.net/akara/article/details/6898157
  M.U.G.E.N  是經歷了12年的(1999-2011)格鬥遊戲引擎(http://elecbyte.com),
官方稱已忘記它的縮寫:本是一個射擊遊戲,但MUGEN日文意思是:無限 (unlimited)。
稍微詳細的信息推薦前往官網或wiki:
  http://en.wikipedia.org/wiki/M.U.G.E.N

  本文分 4 部分簡介M.U.G.E.N(2011 v1.0)的機制:
  (1)術語:格鬥/動作遊戲的術語非常多,M.U.G.E.N中出現的只是一部分,不過足矣。
  (2)核心:精煉格鬥系統5要素:1.anim 2.state 3.state controller 4.trigger 5.command
  (3)其他:control api, trigger api, .def, .sff, .ai, storyboard
  (4)總結:總結。


  身爲一個曾經的KOF高手,同時身爲一個按輕腳通關M.U.G.E.N並看到如下畫面的玩家,
  激發了我簡單翻譯和整理一下M.U.G.E.N功能的熱情。


---------------------------------------------------------------------
術語
---------------------------------------------------------------------
基礎篇

* P1:己方
* P2:對手
* round:回合
* has control:受控(受鍵盤事件)
* not has control:不受控
* attack boxs:攻擊判定盒s
* hit boxs:受擊判斷盒s
* power bar:能量槽
* helper:援助者
* parent:helper的召喚者(仍可爲helper)
* root:helper的根玩家
* KO:KO(又稱kill)


招式篇

* move:動作(廣義)
* attack:攻擊(狹義的move,常與move混稱)
* trip sweep:下盤attack
* throw:投技
* special:特殊技(方向+按鈕)
* super:超殺技(又稱hyper)
* projectile:飛行道具


狀態篇

* hit:受擊
* stand:站立
* crouch:蹲下
* miss:miss
* dodge:躲避
* guard:防禦
* air:空中has control的狀態
* fall:空中not has control的狀態
* lying down:倒地not has control的狀態
* ground:指地面一切has control的狀態
* slide:hit導致的滑退
* recoil:從pause回覆到has control
* back:擊倒
* up:浮空(垂直擊起)
* diaup:擊飛(又稱吹飛:向後擊起)
* pause:硬直(hit/attack均有)
* superpause:super導致的pause


進階篇

* charge-move:蓄氣技(按鍵指定時間纔可發動)
* chain-move:連續技(要求對方處於get-hit state)
* connect:attack成功產生hit(有時特指發生chain-move)
* contact:attack成功產生hit或attack被guarded
* block:截擊(又稱counter,指從attack起手打斷)
* move cancel:取消(又稱move interrupt,指技巧性縮短pause)
* juggle:追擊(對fall或lying down的角色進行attack)
* juggle point:追擊點(attack和P2均攜帶,此設定防止無限追擊)
* superarmor:超級護甲(受擊後除了扣血,不應用任何效果[物理...];
  另有partial superarmor,指不能無視throw和AOE super)
* grazing:掠步(可過projectile)


設計實現篇

* state:狀態
* FSM:Finite State Machine
* transition:state間的跳轉
* command:鍵序
* trigger:觸發器(condition-type / function-type)
* trigger redirection:觸發器(屬主)重定向(parent / root / helper / ...)
* state controller:簡稱controller:
  由trigger觸發指定control api實現指定功能。
  M.U.G.E.N中state controller與control api常混稱;
  爲免混淆,下面state controller與control api嚴格區分。
* time:時間,M.U.G.E.N中所有時間的單位均爲tick。
* game-time:round開始時置0,每tick加1
* state-time:state重入時置0,每tick加1
* anim:動畫(M.U.G.E.N中常與action混稱)
* anim-time:anim開始/結束時置0,每tick加1
* anim-element:anim的element下標(anim由N個element組成)
* looptime:一個anim的所有times字段值之和;如有一值爲-1即總爲-1
* no loop anim:looptime爲-1的anim(不會重頭播放)
* clsn1:attack boxs(編輯態顯紅色) 
 (常不設於anim-element 1,否則瞬發傷害不可block)
* clsn2:hit boxs(編輯態顯藍色)


---------------------------------------------------------------------
核心
---------------------------------------------------------------------

  M.U.G.E.N將格鬥系統精煉爲 5 種核心要素:
  (1) anim 
  (2) state 
  (3) state controller
  (4) trigger
  (5) command

  而且都支持文本化配置,強大地定義格鬥中的方方面面!
  下面逐個簡介。

anim(.air)

*  配置實例:
  [Begin Action 200]
  Clsn2Default: 1 ;定義默認hit boxs
  Clsn2[0] = -10,  0, 10,-79
  0,1, 0,0, 7    ; group,image,  offset_x,offset_y, times(-1表示inf)

  Clsn1: 1       ; 定義element 2有attack boxs
  Clsn1[0] =  27,-86, 64,-60
  Clsn2: 2       ; 定義element 2使用特殊hit boxs
  Clsn2[0] =  47,-31, -6,  0
  Clsn2[1] =  17,-31, 47,-78
  0,2, 0,0, 7

   LoopStart      ; 指定anim從這element開始循環
                           ; element 3以後沒有attack boxs,hit boxs使用默認值
   0,3, 0,0, 7
  15,1, 0,0, 5, H   ;<-- 水平翻轉(做throw很方便)
  15,2, 0,0, 5, V   ;<-- 垂直翻轉
  15,3, 0,0, 5, VH  ;<-- 水平+垂直翻轉
  15,4, 0,0, 5, ,A   ;<-- 不翻轉 + color Addition
  15,4, 0,0, 5, H, S ;<-- 水平翻轉 + color Subtraction
  15,4, 0,0, 5, ,AS128D128  ;<-- color Addition

* 定義anim序列,應用於所有可視物件:
  > 動作(move)
  > 特效
  > 背景動畫
  > 血條動畫
  > ...


state(.cns, .cmd)

* 配置實例:
  [Statedef 200]
  type = S  
  ; state的類型。最重要的作用是用於受擊判斷。
  ; S(Standing,默認) C(Crouching) I(In The Air) L(Lying Down)
  ; U(Unchanged, 保持上個state的type)


  movetype = I  ; 當前動作的類型:A(attack) I(Idle,默認) H(being Hit)  U(Unchanged)

  physics = S
  ; 物理類型。S(Stand,接受地面摩擦力) C(Crouch,摩擦)
  ; A(Air,加速向下直至y>=0落地) 
  ; N(None,默認。不應用預設物理,此時可通過後續controller設定特殊物理)
  ; U(Unchanged)


  anim = 200         ; 動畫編號
  velset = 0, 1        ; x, y速度設置
  ctrl = 1/0               ; 是否可控,默認保持前state的ctrl
  poweradd = 40   ; 本state爲power bar添加的數值
  juggle = 8            ; juggle值
  facep2 = 1/0        ; 是否強制面向P2; 默認爲0
  hitdefpersist = 1/0        ; Hit Def的開啓或禁用
  movehitpersist = 1/0    ; move hit是否從上個state繼承。默認0(即重置)
  hitcountperisist = 1/0   ; hit counter是否從上個state繼承。默認0(即重置)
                                           ; 可供trigger判斷。
  sprpriority = 0 ; sprite渲染層次。(0)standing/crouching (1)jumping (2)attacking(使攻擊態最上)

* state ID分段規則
  -3          unpause_heartbeat
  -2          alltime_heartbeat
  -1          alltime_heartbeat(command ONLY)
  0-199       reserved
  200-299     Standing attacks
  300-399     More standing attacks, running attacks
  400-499     Crouch attacks
  500-599     More crouch attacks
  600-699     Air attacks
  700-799     More air attacks
  800-999     Unused - use if you need more states
  1000-2999   All special attacks
  3000-4999   All hyper attacks
  5000-5999   reserved

* helper角色:沒有-3,-2;而-1有無取決於配置
* FSM:-3 -> -2 -> -1 -> 當前
* 該分段推薦和anim分段一致
* 兩層優先級:player*.cns > common*.cns (.snd, .air亦然...)


state controller(.cns, .cmd)

* 配置實例:
  [State 200, 1]
  type = [control api]
  param1 = *
  param2 = *
  ...
  paramN = *
  triggerall = [condition_exp_all_1]
  triggerall = [condition_exp_all_2]
  trigger1 = [condition_exp1]
  trigger2 = [condition_exp2_1]
  trigger2 = [condition_exp2_2]
  ignorehitpause = [0/1]
  persistent = [0/1/2/3...]

* 功能:滿足triggers的觸發條件後,
  調用control api(param1, param2, ..., paramN)
* 任何statedef必須定義至少一個的controller
* 配置順序敏感:配置越前,執行優先級越高


trigger(.cns, .cmd)

* 配置實例:
  [State 200, 1]
  type = [control api]
  param1 = *
  param2 = *
  ...
  paramN = *
  triggerall = [condition_exp_all_1]
  triggerall = [condition_exp_all_2]
  trigger1 = [condition_exp1]
  trigger2 = [condition_exp2_1]
  trigger2 = [condition_exp2_2]
  ignorehitpause = [0/1]
  persistent = [0/1/2/3...]

* 上述triggers語義爲:
  if (triggerall AND triggerall) AND (trigger1 OR (trigger2 AND trigger2)):
    control api(param1, param2, ..., paramN)

* 任一controller至少擁有trigger1
* 支持null trigger:debug
* condition_exp支持類似C語言的表達式,但數據類型只有3種:
  > 32bit signed int
  > 32bit float
  > bottom(只由引擎隱式產生)
    更像一個異常對象:除0/負數開方/對象不存在的exp結果便是bottom對象。
    結果爲bottom的trigger不觸發。
  > string(?)
* persistent參數用於修飾controller內所有trigger的持續性
  0:本state一次進入/離開期間,只能觸發一次
  1:每次滿足條件即觸發(默認)
  2:累積2次滿足條件才觸發
  3:.........3次..............


command(.cmd)

* 配置實例:
  [Command]
  name = "Two_quarter_circles_forward_plus_y"
  command = ~D, DF, F, D, DF, F, y
  time = time            ;可選,指定command須在time內完成
  buffer.time = time ; 可選,如command達成,
                                   ; 那它在本time內有效。
                                   ; 1表示瞬間有效;
                                   ; time越大combo越易:因可提早輸入;
                                   ; 本參數對純pressing系列(/F)不生效,
                                   ; 這系列command.buffer.time強制爲1


* 支持 8 個方向鍵:B, DB, D, DF, F, UF, U, UB
* 支持 6 個功能鍵:a, b, c, x, y, z
* 支持 5 個修飾符前綴:
  (無修飾符則表示鍵必須press)
  /:被修飾鍵必須pressing
  ~:被修飾鍵必須released
  $:只能修飾方向鍵,語義:$D 等價於 /D, /DB, /DF
  +:只能修飾功能鍵,語義:a+b 表示 a和b鍵同時被press
  >:在被修飾鍵和前一個鍵定義間,如果有其他按鍵事件發生,則不成功。
     如:a, >~a 表示在press a和released a這兩事件間,不能有其他事件。
* 可以組合修飾:
  ~30$D, a+b 表示 
  先pressing (D或DB或DF) 30 tick,然後release,最後同時press a和b
* 連續出現的鍵,MUGEN會按固定規則強制轉化,用作快進語義:
  F, F 經強制轉化後爲 F, >~F, >F

* 簡易發招考慮,motion command(如前四分一圓),應以~開始第一個鍵。
* 如一move使用兩個同樣的[Command].name而又有不同的[Command].command,
  則兩種command都可以發動該move。
* state -1(AtHc)出場:將command和state跳轉聯繫起來
  [State -1, Super AKara]
  type = ChangeState
  value = 1020
  trigger1 = command ="Two_quarter_circles_forward_plus_y"
  ; 注:trigger1處command爲一fucntion-type trigger api


---------------------------------------------------------------------
其他
---------------------------------------------------------------------
* control api 庫(詳看 HitDef )
* trigger api 庫
* .def:各種預設參數。
* .sff:sprite。教程:anim序列基準點(腳,腰,頭)
* .ai:
  難度:基於人類1/6秒反應時間原則,調整CPU的反應時間。
  功能:trigger(AILevel)+ control api + 定製state -1/any;
  效果:實時取P1/P2/Env屬性,當前tick反應,智能到無限。
  http://www.elecbyte.com/wiki/index.php/AI
* storyboard:cutscene = anim + text + music + sound
* 如需更細緻更潮流的設定,可往SF4 frame/box data參考。

---------------------------------------------------------------------
總結
---------------------------------------------------------------------

啥都不說了,自己看M.U.G.E.N DNF
http://www.youtube.com/watch?v=95-E-NtJMuw


---------------------------------------------------------------------
相關文章
---------------------------------------------------------------------

  <<遊戲中的有限狀態機>> byAKara
  http://blog.csdn.net/akara/article/details/6003703

---------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章