M.U.G.E.N格斗游戏引擎简介

标签: 格斗游戏 引擎 简介 | 发表时间:2011-10-24 06:29 | 作者:akara Typhoon
出处:http://blog.csdn.net/akara
M.U.G.E.N格斗游戏引擎简介
by AKara 2011-10-23 @ http://blog.csdn.net/akara @ akaras(at)163.com @weibo.com/akaras


  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, controller custom name]
  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


---------------------------------------------------------------------
总结
---------------------------------------------------------------------

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


---------------------------------------------------------------------
作者:akara 发表于2011-10-23 15:29:29 原文链接
阅读:141 评论:1 查看评论

相关 [格斗游戏 引擎 简介] 推荐:

M.U.G.E.N格斗游戏引擎简介

- Typhoon - AKara
M.U.G.E.N格斗游戏引擎简介.   M.U.G.E.N  是经历了12年的(1999-2011)格斗游戏引擎(http://elecbyte.com),. 官方称已忘记它的缩写:本是一个射击游戏,但MUGEN日文意思是:无限 (unlimited). 稍微详细的信息推荐前往官网或wiki:.   本文分 4 大部分简介M.U.G.E.N(2011 v1.0)的机制:.

AndEngine游戏引擎简介

- - CSDN博客移动开发推荐文章
项目站点: http://www.andengine.org. 项目地址: http://code.google.com/p/andengine. 示例地址: http://code.google.com/p/andengineexamples. AndEngine 基于libGDX框架开发,使用OpenGL ES进行图形绘制.

【转】Mysql MERGE引擎简介

- - 编程语言 - ITeye博客
一. 什么是MERGE 引擎. MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询. 如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要时常进行来自多个表的合计查询,MERGE表这时会非常简单有效. 执行select * from t;将会得到如下结果.

关于PHP的工作流引擎EZER简介

- - ITeye博客
        关于PHP的工作流引擎,除了三大主流开源:PorcessMaker(排名第一,因其有拖放式图形定义界面),RadiCore(基于PETRI NET)和CuteFlow以外,另外还有一个不为人知的,但却也是非常强大的开源,叫做EzerPhp..         EzerPhp的主页: http://code.google.com/p/ezerphp/.

Flask-Babel 简介

- yinseny - python.cn(jobs, news)
本文有一个格式好看一点,并且有语法高亮的版本放在 readthedocs,欢迎浏览. 本文是原创,不是翻译,不过本文其实是谈翻译的. 话说用 wordpress 的 WYSIWYG 编辑器写这样的文章真痛苦啊,格式一不小心就乱了,本文是用 rst 写成,编译为 html,然后贴到这边来的. 最近用 Flask 给公司做了个小 web 应用,做的时候用英文了,现在要求翻译成中文.

AsciiDoc简介

- dayu - 桃源
AsciiDoc 是一种简单的基于纯文本的文档生成工具, 与它类似的还有 reStructuredText, Markdown. 说是生成文档, 其实它可以将纯文本文件转换成各种类型, 比如:. Man Page (示例). Graphviz 图形 (示例). 使用AsciiDoc进行文档编写最著名的恐怕是Git官方的 Git User’s Manual (我表示对于初学者很难看懂), 这篇博客也是通过AsciiDoc生成, 文后会附上本文的原始代码以便参考..

ABAP简介

- - 博客园_首页
中文名称:高级企业应用编程语言. 英文全称:Advanced Business Application Programming. 德语全称:Allgemeiner Berichtsaufbereitungsprozessor(通用报表预处理器). 概述:一种高级编程语言,起源于20世纪80年代,由德国软件公司SAP开发,主要用作SAP的编程,现行版本为ABAP/4,同时支持面向过程和面向对象.

json简介

- - ITeye博客
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成. 它基于ECMA262语言规范(1999-12第三版)中JavaScript编程语言的一个子集. JSON采用与编程语言无关的文本格式,但是也使用了类C语言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的习惯,这些特性使JSON成为理想的数据交换格式.

[转]amanda 简介

- - 小鸥的博客
    安装mysql数据库是会发现三个用户 mysql 、postmyql 、amanda,其中amanda是什么呢.   Amanda 是最早出现的开源备份 软件. 它的名字来自Maryland大学. Amanda的意思是高级Maryland 硬盘归档器..   Amanda通过 操作系统上 一些自带的备份工具,例如tar(Unix/linux)、zip(Windows)来实现备份的计划,自动化和跟踪等功能.

[转]HBase简介

- - 小鸥的博客
   Hbase是一个分布式开源数据库,基于Hadoop分布式文件系统,模仿并提供了基于Google文件系统的Bigtable数据库的所有功能. 其目标是处理非常庞大的表,可以用普通的计算机处理超过10亿行数据,并且有数百万列元素组成的数据表. Hbase可以直接使用本地文件系统或者Hadoop作为数据存储方式,不过为了提高数据可靠性和系统的健壮性,发挥Hbase处理大数据量等功能,需要使用Hadoop作为文件系统.