by AKara 2011-10-23 @  http://blog.csdn.net/akara  @ akarachen(at)gmail.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 boxes:攻击判定盒s
* hit boxes:受击判断盒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:未命中
* 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 boxes(编辑态显红色) 
 (常不设于anim-element 1,否则瞬发伤害不可block)
* clsn2:hit boxes(编辑态显蓝色)

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

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 boxes
  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 boxes
  Clsn1[0] =  27,-86, 64,-60
  Clsn2: 2        ; 定义element 2使用特殊hit boxes
  Clsn2[0] =  47,-31, -6,  0
  Clsn2[1] =  17,-31, 47,-78
  0,2, 0,0, 7

LoopStart       ; 指定anim从这element开始循环
                            ; element 3以后没有attack boxes,hit boxes使用默认值
   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 库(见<< M.U.G.E.N格斗游戏引擎简介(2) >> )
* 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
* 如需更细致更潮流的设定,可往SSF4 frame/box data参考。

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

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

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

<< M.U.G.E.N格斗游戏引擎简介(2) >> by  AKara  
   http://blog.csdn.net/akara/article/details/6954612

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

<< 使用行为树(Behavior Tree)实现游戏AI >> by  AKara  
   http://blog.csdn.net/akara/article/details/6084786

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

M.U.G.E.N格斗游戏引擎简介(2)
by AKara 2011-10-23 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @weibo.com/akaras
上一篇文章中提到的「control api库」对应官方docs/sctrls.html。
api总共89个,但不是每个都值得翻译。
如果说有一个必须要翻,那就是 HitDef 。
因为从 HitDef 中可了解招式设计要素的一个概况。
它是我见过的最多参数的函数(如果它能叫做函数的话):80个参数。
---------------------------------------------------------------------
函数原型
---------------------------------------------------------------------
HitDef(attr, 
[hitflag], [guardflag], [affectteam], 
[animtype], [air.animtype], [fall.animtype],
[priority], [damage], 
[pausetime], [guard.pausetime],
[sparkno], [guard.sparkno],
[sparkxy], [hitsound],
[guardsound], [ground.type], [air.type],
[ground.slidetime], [guard.slidetime],
[ground.hittime], [guard.hittime], [air.hittime],
[guard.ctrltime], [guard.dist], [yaccel],
[ground.velocity], [guard.velocity],
[air.velocity], [airguard.velocity],
[ground.cornerpush.veloff], [air.cornerpush.veloff],
[down.cornerpush.veloff], [guard.cornerpush.veloff],
[airguard.cornerpush.veloff], [airguard.ctrltime],
[air.juggle], 
[mindist], [maxdist],
[snap], [p1sprpriority], [p2sprpriority],
[p1facing], [p1getp2facing],
[p2facing], [p1stateno], [p2stateno],
[p2getp1state], [forcestand], [fall],
[fall.xvelocity], [fall.yvelocity],
[fall.recover], [fall.recovertime], [fall.damage],
[air.fall], [forcenofall],
[down.velocity], [down.hittime],
[down.bounce], [id],
[chainid], [nochainid],
[hitonce], [kill],
[guard.kill], [fall.kill],
[numhits], [getpower], [givepower],
[palfx.time], [palfx.mul], [palfx.add],
[envshake.time], [envshake.freq], 
[envshake.ampl], [envshake.phase],
[fall.envshake.time], [fall.envshake.freq], 
[fall.envshake.ampl], [fall.envshake.phase],
)
我知道,到了这里,99%的读者都准备或已经跳出页面。
---------------------------------------------------------------------
必填参数(1个)
---------------------------------------------------------------------
attr = arg1, arg2
定本HitDef的形态属性。
arg1(string):"S"(Standing) / "C"(Crouching) / "A"(Aerial Attack)
arg2(string)+:字符1:"N"(Normal) / "S"(Special) / "H"(Hyper or Super)
字符2:"A"(Attack) / "T"(Throw) / "P"(Projectile)
---------------------------------------------------------------------
可选参数(79个)
---------------------------------------------------------------------
hitflag = hit_flags
定义P2处于何种状态下才能被P1击中并产生hit。
hit_flags(string)+:
H(High), L(Low), A(Air), F(Fall), D(lying Down),M(等价于HL)
(hit_flags至少应该包含 H/L/A/M 之一)
额外还可以搭配: 
"+"(本HitDef只能命中处于get-hit状态下的player,chain-move用) 
或 
"-"(本HitDef只能命中不处于get-hit状态下的player,比如Throw)。
hit_flags默认参数为"MAF"
---------------------------------------------------------------------
guardflag = guard_flags
定义P2通过何种guard形式可以guard本HitDef。
guard_flags(string)+:
H(High), L(Low), A(Air), M(Mid, ==HL)
默认为"":即P2不能guard本HitDef。
---------------------------------------------------------------------
affectteam = team_type
定义可attack何种队伍属性的P2。
team_type(string):
B(Both team), E(Enemy/Opponent team;默认), F(Friendly team)
---------------------------------------------------------------------
animtype = anim_type
定义P2受Hit后的表现类型。
anim_type(string):
"light", "medium", "hard"
"back"(击倒), "up"(浮空:垂直击起), "diagup"(吹飞/击飞:向后击起)
默认值:"light"。
---------------------------------------------------------------------
air.animtype = anim_type
定义P2处于air时的受击后anim。取值同animtype参数。
默认值:取animtype配置值。
---------------------------------------------------------------------
fall.animtype = anim_type
定义P2处于fall时的受击后anim。取值同animtype参数。
默认值:如果air.animtype为"up",取"up";否则取"back"。
---------------------------------------------------------------------
priority = hit_prior, priority_class
定义本次HitDef的优先级别。
例:P1高优先级的HitDef 碰撞上P2低优先级的HitDef,则P1 attack成功:P2受hit。
hit_prior(int): 1-7。默认为4。
priority_class(string):
可选Dodge, Hit(默认), Miss三者之一。
本参数用于在hit_prior值相等情况下,再做受击结果的最后细分裁决。
假设P1 vs P2,结果规则为:
* (P1)Hit vs (P2)Hit:双方均受击
* (P1)Hit vs (P2)Miss:P1受击,P2不受击
* (P1)Hit vs (P2)Dodge:双方不受击
* (P1)Dodge vs (P2)Dodge:双方不受击
* (P1)Dodge vs (P2)Miss:双方不受击
* (P1)Miss vs (P2)Miss:双方不受击
* ...其余同理...
在双方不受击的情况下,双方的HitDef继续有效,不需要再次trigger设置。
Miss和Dodge常用于throws:因为双方不可能同事throw对方。
---------------------------------------------------------------------
damage = hit_damage, guard_damage
定义P2受击后的损血量,以及如果P2挡格后的损血量。
默认值:0,0。
---------------------------------------------------------------------
pausetime = p1_pausetime, p2_shaketime
定义P1和P2双方对于这次Hit事件的Pause时间(tick为单位)
p1_pausetime(int):定义攻击者P1的attack pause。
p2_shaketime(int):定义受击者P2的hit pause。
默认值:0,0。
---------------------------------------------------------------------
guard.pausetime = p1_pausetime, p2_shaketime
定义当P1的本次HitDef被P2 guarded后,双方的Pause时间。
参数定义与pausetime类似。
默认值:取pausetime值。
---------------------------------------------------------------------
sparkno = action_no
定义本次Hit的闪光特效编号。
如果添加"S"前缀,则从player.air文件索引,否则从common.air索引。
默认值:player属性配置中的编号。
---------------------------------------------------------------------
guard.sparkno = action_no
定义本次Hit在被guarded后的闪光特效编号。
参数定义与sparkno一致。
---------------------------------------------------------------------
sparkxy = spark_x, spark_y
定义sparkno/guard.sparkno播放的位置。
spark_x(int):相对于P2。负值越多,越往P2背后。
spark_y(int):相对于P1。负值越多,位置越高。
默认值:0,0。
---------------------------------------------------------------------
hitsound = snd_grp, snd_item
定义Hit发生时的音效。
如果添加"S"前缀,则从player.snd文件索引,否则从common.snd索引。
默认值:player属性配置中的编号。
---------------------------------------------------------------------
guardsound = snd_grp, snd_item
定义本HitDef被guarded时P1发生的音效。
如果添加"S"前缀,则从player.snd文件索引,否则从common.snd索引。
默认值:player属性配置中的编号。
---------------------------------------------------------------------
ground.type = attack_type
定义当P2处于ground时的type。
attack_type(string):"High", "Low", "Trip", "None"
默认值:"High"。
---------------------------------------------------------------------
air.type = attack_type
定义当P2处于air时的type。
参数定义同ground.type。
默认值:取ground.type值。
---------------------------------------------------------------------
ground.slidetime = slide_time
定义在ground上Hit发生后P2后退的时长(不含pausetime)。
顾名思义,Hit后如果导致P2不处于ground,本设定不生效。
默认值:0。
---------------------------------------------------------------------
guard.slidetime = slide_time
定义在ground上Hit被guarded后P2后退的时长(不含pausetime)。
默认值:取guard.hittime值。
---------------------------------------------------------------------
ground.hittime = hit_time
定义在ground上Hit发生后P2处于gethit state中的时长。
小心设置本值,使得combo成为可能。
显然:Hit后如果导致P2不处于ground,本设定不生效。
默认值:0。
---------------------------------------------------------------------
guard.hittime = hit_time
同ground.hittime。除了时机变为:Hit被guarded后。
默认值:取ground.hittime值。
---------------------------------------------------------------------
air.hittime = hit_time
同ground.hittime。除了时机变为:P2处于air时被Hit,或Hit导致P2到air。
特殊地,当下面将说到的fall参数为1时,本参数无效。
默认值:20。
---------------------------------------------------------------------
guard.ctrltime = ctrl_time
ground guard状态下P2回复可控的时长。
默认值:取guard.slidetime值。
---------------------------------------------------------------------
guard.dist = x_dist
P2 guarded Hit后,如果按着和P1反方向键时,退开的距离。
本参数基本不用设置。
默认值:取player的属性配置。
---------------------------------------------------------------------
yaccel = accel
连击情况下,给予P2的y向加速度。
默认值:0.35 in 240p / 0.7 in 460p / 1.4 in 720p。
---------------------------------------------------------------------
ground.velocity = x_velocity, y_velocity
Hit发生时,P2的初始x和y速度。y速度如果存在,P2会浮空。
y_velocity不指定时,P2仍然处于ground。
默认值:0,0。
---------------------------------------------------------------------
guard.velocity = x_velocity
Hit被在ground上guarded后,P2的x初速度。
默认值:取ground.velocity值。
---------------------------------------------------------------------
air.velocity = x_velocity, y_velocity
P2被在air中Hit后,P2的x和y初速度。
默认值:0,0。
---------------------------------------------------------------------
airguard.velocity = x_velocity, y_velocity
Hit被P2在air中Guarded后,P2的x和y初速度。
默认值:取air.velocity.x_velocity * 1.5 , air.velocity.y_velocity / 2.0。
---------------------------------------------------------------------
ground.cornerpush.veloff = x_velocity
定义P2处于角落时受Hit后的额外位移速度。
默认值:如果attr参数值为"A",则本参数为0;否则本参数为 1.3 * guard.velocity。
---------------------------------------------------------------------
air.cornerpush.veloff = x_velocity
P2处于air态。其余同ground.cornerpush.veloff。
默认值:取ground.cornerpush.veloff值。
---------------------------------------------------------------------
down.cornerpush.veloff = x_velocity
P2处于down态。其余同ground.cornerpush.veloff。
默认值:取ground.cornerpush.veloff值。
---------------------------------------------------------------------
guard.cornerpush.veloff = x_velocity
攻击被P2成功guard。其余同ground.cornerpush.veloff。
默认值:取ground.cornerpush.veloff值。
---------------------------------------------------------------------
airguard.cornerpush.veloff = x_velocity
攻击被P2成功airguard。其余同guard.cornerpush.veloff。
默认值:取guard.cornerpush.veloff值。
---------------------------------------------------------------------
airguard.ctrltime = ctrl_time
air guard状态下P2回复可控的时长。
默认值:取guard.ctrltime值。
---------------------------------------------------------------------
air.juggle = juggle_points
本Hit发生air juggle时对P2身上剩余的juggle point的【额外】需求值。
通常不需要设置本参数,除了飞行道具的HitDef定义。
默认值:0。
---------------------------------------------------------------------
mindist = x_pos, y_pos
maxdist = x_pos, y_pos
定义P2受Hit后,和P1的相对距离范围。
默认值:维持P2的当前位置不动的设置。
---------------------------------------------------------------------
snap = x_pos, y_pos
设置P2受Hit后相对P1的固定距离。
不常用,如果需要表现投技的效果,建议用"TargetBind"函数实现。
默认值:维持P2的当前位置不动的设置。
---------------------------------------------------------------------
p1sprpriority = drawing_priority
Hit发生时,P1的画面渲染优先级。
默认值:1。
---------------------------------------------------------------------
p2sprpriority = drawing_priority
Hit发生时,P2的画面渲染优先级。
默认值:0。
---------------------------------------------------------------------
p1facing = facing
Hit发生时,P1的面向。
facing(int):-1表示强制转换面向。
默认值:0。不转换。
---------------------------------------------------------------------
p1getp2facing = facing
Hit发生时,P1的面向。
facing(int):1,强制P1同步到P2当前面向;-1,强制P1和P2相反面向;0,不变。
当非0值时,p1getp2facing覆盖p1facing的作用。
默认值:0。
---------------------------------------------------------------------
p2facing = facing
Hit发生时,P2的面向。
facing(int):1,强制P2同步为P1当前面向;-1,强制P2和P1相反面向;0,不变。
默认值:0。
---------------------------------------------------------------------
p1stateno = state_no
Hit发生时,P1强制设置到的state_no。state必须是一个attack state(movetype=A)。
在throws中常用。
默认值:-1。不改变state。
---------------------------------------------------------------------
p2stateno = state_no
Hit发生时,P2强制设置到的state_no。state必须是一个get-hit state(movetype=H)。
在throws中常用?
默认值:-1。不改变state。
---------------------------------------------------------------------
p2getp1state = bvalue
Hit发生时,P2是否转为P1的state和animation。
如果p2stateno不设置,则本参数无效。
bvalue(int):0,不转;1,转
默认值:1。
---------------------------------------------------------------------
forcestand = bvalue
定义是否Hit发生时如果P2出于crouching state,强制为standing state-type。
当P2在air state中受击时,本设置不生效。
默认值:当ground.velocity.y_velocity不为0(即可能击浮空)时,为1。否则为0。
---------------------------------------------------------------------
fall = bvalue
Hit发生时,是否使得P2转为fall状态(击浮空,然后落地,即:knock down效果)
默认值:0。
---------------------------------------------------------------------
fall.xvelocity = x_velocity
fall参数效果发生后,P2从地面上击起的x初速度。
默认值:0。
---------------------------------------------------------------------
fall.yvelocity = y_velocity
fall参数效果发生后,P2从地面上击起的y初速度。
默认值:-4.5 in 240p, -9 in 480p, -18 in 720p。
---------------------------------------------------------------------
fall.recover = bvalue
fall参数效果发生后,P2是否能从fall中恢复控制。
默认值:1。可以恢复。
---------------------------------------------------------------------
fall.recovertime = recover_time
fall参数效果发生后,P2需要经过多少时间才能has control(不含 shaking pause时间 )。
默认值:4。
---------------------------------------------------------------------
fall.damage = damage_amt
fall参数效果发生后,P2 fall完结时碰触地面瞬间的损血量。
默认值:0。
---------------------------------------------------------------------
air.fall = bvalue
Hit发生时,是否使得处于air的P2转为fall(击浮空,然后落地,即:knock down)
默认值:取fall值。
---------------------------------------------------------------------
forcenofall = bvalue
Hit发生时,如果P2处于fall,是否取消fall。
如果fall参数为1,则本参数无效。
默认值:0。
---------------------------------------------------------------------
down.velocity = x_velocity, y_velocity
Hit发生时,如果P2处于lying down,赋予的x和y初速度。
显然:如果y_velocity不为0,则击浮空;如果y_velocity为0,则击滑行。
默认值:取air.velocity值。
---------------------------------------------------------------------
down.hittime = hit_time
Hit发生时,如果P2处于lying down,被击滑行的时间。
如果down.velocity.y_velocity不为0,则本参数无效。
默认值:0。
---------------------------------------------------------------------
down.bounce = bvalue
Hit发生时,如果P2处于lying down,是否支持弹起效果(使用fall.x_velocity和fall.y_velocity)。
如果down.velocity.y_velocity为0,则本参数无效。
默认值:0。
---------------------------------------------------------------------
id = id_number
本次Hit的ID,又称TargetID。用于连招(chain moves)判断。
id_number(int):取值范围[0, 无穷大]
默认值:0。表示无ID。
---------------------------------------------------------------------
chainid = id_number
如果P2上次被P1用id参数指出的id的一个attack击中,
那之后必须需要用 id == 本chainID 的attack才能接上。
(也就是说P2会记录最后打在身上的一个id)
id_number(int):取值范围-1或[1, 无穷大]
默认值:-1。表示任何HitDef的attack都可以接上(使得Hit发生)。
---------------------------------------------------------------------
nochainid = nochain_1, nochain_2
如果P2上次被P1用【以nochain_2或nochain_2】作为id的一个attack击中,
那么本次HitDef必定失效。
(也就是说P2会记录最后打在身上的一个id)
注意:除了-1,本参数两个值都不能和chainID参数值相同。
注意:如果P2的受击序列为:P1 , 3rd, P1;那么本参数不生效。
默认值:-1,-1。表示不禁止任何HitDef id的attack。
---------------------------------------------------------------------
hitonce = hitonce_flag
是否一次只能击中一个目标。
hitonce_flag(int):1,只击中一个目标,其他发生碰撞的目标不受击。0,可同时击中多目标。
特殊地,如果attr参数为throw类型,那么hitonce默认为1。
默认值:0。
---------------------------------------------------------------------
kill = bvalue
是否本Hit发生时具有KO P2的功能。
默认值:1。
---------------------------------------------------------------------
guard.kill = bvalue
是否本Hit被guarded后也具有KO P2的功能。
默认值:1。
---------------------------------------------------------------------
fall.kill = bvalue
是否本Hit造成fall后触地时具有KO P2的功能。
默认值:1。
---------------------------------------------------------------------
numhits = hit_count
Hit发生时,算多少点combo值。
hit_count(int):[1, 正无穷大)。
默认值:1。
---------------------------------------------------------------------
getpower = p1power, p1gpower
p1power定义Hit发生时P1的能量增长;
p1gpower定义Hit被Guarded后的P1能量增长。
默认值:p1power = damage值 * Default.Attack.LifeToPowerMul(data/mugen.cfg中)
p1gpower = p1power / 2.0
---------------------------------------------------------------------
givepower = p2power, p2gpower
p2power定义Hit发生时P2的能量增长;
p2gpower定义定义Hit被Guarded后的P1能量增长。
默认值:p2power = damage值 * Default.GetHit.LifeToPowerMul(data/mugen.cfg中)
p2gpower = p2power / 2.0
---------------------------------------------------------------------
palfx.time = palfx_time
palfx.mul = r1, g1, b1
palfx.add = r2, g2, b2
上面三个参数定义P2在Hit发生时的调色板效果。
palfx_time(int):时长;默认为0(即无效果)
其他两个参数与PalFX control api中的意义一致。
---------------------------------------------------------------------
envshake.time = envshake_time(int)
envshake.freq = envshake_freq(float)
envshake.ampl = envshake_ampl(int)
envshake.phase = envshake_phase(float)
当Hit发生时,如果有如上4个参数设定,则以指定参数震屏。
envshake.time为震屏的时长。
其他3个参数见 EnvShake control api的定义。
---------------------------------------------------------------------
fall.envshake.time = envshake_time (int)
fall.envshake.freq = envshake_freq (float)
fall.envshake.ampl = envshake_ampl (int)
fall.envshake.phase = envshake_phase (float)
当Hit生效后并导致P2 fall,那么P2触地的瞬间以指定参数震屏。
参数意义与envshake_*系列一致。
---------------------------------------------------------------------
谢谢你拖拽到这里,为免沉闷,再贴个别人的视频链接。
Mugen Female Ranger vs Blademaster
http://www.youtube.com/watch?v=cliN6V9m3ow
---------------------------------------------------------------------
相关文章
---------------------------------------------------------------------
<<M.U.G.E.N格斗游戏引擎简介(1)>> by AKara
http://blog.csdn.net/akara/article/details/6898157
<<游戏中的有限状态机>> by AKara 
http://blog.csdn.net/akara/article/details/6003703
<<使用行为树(Behavior Tree)实现游戏AI>> by AKara 
http://blog.csdn.net/akara/article/details/6084786
---------------------------------------------------------------------

M.U.G.E.N格斗游戏引擎简介相关推荐

  1. 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介

    原文链接:http://xiazhihui321.blog.163.com/blog/static/81328893201141851158857/ Adobe Flash自诞生之日就与游戏结下不解之 ...

  2. 各种Java游戏引擎简介

    各种Java游戏简介 JME(jMonkey Engine): JME是一个高性能的3D图形API,采用LWJGL作为底层支持.它的后续版本将支持JOGL.JME和Java 3D具有类似的场景结构,开 ...

  3. MascotCapsule手机游戏引擎简介

    1 引擎简介 自2001年起MascotCapsule在手机上实现3D以来,不仅在日本市占率一枝独秀, 全球手机中MascotCapsule也大量被使用. 在海外市场,MascotCapsule已被多 ...

  4. 快速创建精彩的Flash游戏 (二) Flash3D游戏引擎简介

    从Flash Player 5开始,3D开发者就尝试做一些伪3D的演示:Flash Player 6时代,引入了Drawing API,大大方便了开发者进行图形绘制:2006年引入AS3,开始改变很多 ...

  5. 【游戏】PC游戏引擎简介及游戏使用技术检测技巧

    文章目录

  6. 开源图形/游戏引擎的点评

    开源图形/游戏引擎的点评 什么是游戏引擎?举个简单例子,在某游戏中的一个场景中,玩家控制的角色躲藏在屋子里,敌人正在屋子外面搜索玩家.突然控制的角色碰倒了桌子上的一个杯子,杯子坠地发出破碎声,敌人在听 ...

  7. 游戏引擎列表(维基百科)

    链接地址: http://zh.wikipedia.org/w/index.php?title=%E6%B8%B8%E6%88%8F%E5%BC%95%E6%93%8E%E5%88%97%E8%A1% ...

  8. 【转贴】游戏引擎大全

    游戏引擎列表 免费和开源引擎 Agar – 一个高级图形应用程序框架,用于2D和3D游戏. Allegro – 基于 C/C++ 的游戏引擎,支持图形,声音,输入,游戏时钟,浮点,压缩文件以及GUI. ...

  9. 2023 年最佳游戏引擎推荐

    游戏引擎简介 游戏引擎是一种软件程序或环境,可为开发人员提供创作电子游戏.创建图形和可视化所需的工具和应用程序编程接口 (API),包括了从人工智能 (AI) 和动画到物理模拟和音频方方面面的内容. ...

最新文章

  1. fushioncharts破解
  2. python有趣的小项目-有趣的python小项目,自动生成有趣的表情包!
  3. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授
  4. [luogu3231 HNOI2013] 消毒 (二分图最小点覆盖)
  5. AOP日志-查询日志流程分析
  6. 图说苹果工作站-MAC PRO
  7. [Java][JavaScript]字符串数组与字符串之间的互转(join/split)(转)
  8. 玩转Android之加速度传感器的使用,模仿微信摇一摇
  9. usb hub区分端口_树莓派上 USB 子系统拓扑浅析
  10. 假如给Go语言加上注解,程序会变怎样?
  11. 类、对象以及jvm运行内存解析
  12. SpringCloud学习笔记012---CentOs7搭建高速缓存NoSql Redis单机服务_redis_4.0.1_或者redis_6.0.x_可自定义版本
  13. java中的url进行编码和解码
  14. 什么是starup?
  15. github中文件夹名带数字,git下来为空文件夹
  16. 解决ROS编译时opml库找不到
  17. 当国际贸易撞上AI,会产生怎样的化学反应?
  18. 五种线粒体呼吸链复合体研究工具
  19. GBASE 8s UDR内存管理_04_mi_zalloc
  20. 群体遗传进化专题之选择性清除分析

热门文章

  1. matlab imshow 去掉白边
  2. 大学生活日志2.。。。。。
  3. Java网络聊天程序
  4. 硬件设备二 调试分类、软/硬件断点、OpenOCD、JLink、STLink 使用
  5. C++ warning: comparison is always false due to limited range of data type [-Wtype-limits]
  6. JSON 与 LUA Table 相互转换
  7. NextErp 数据导入 文档字段自动填充上下文代码分析
  8. python怎么输入百分数_python怎么用百分数
  9. 移除Selenium的浏览器window.navigator.webdriver等20多个指纹特征
  10. 技术博主的神秘工具箱