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


---------------------------------------------------------------------
相关文章
---------------------------------------------------------------------

  << 游戏中的有限状态机>> by AKara
   http://blog.csdn.net/akara/article/details/6003703

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值