; The CMD file.
; Two parts: 1. Command definition and 2. State entry
; (state entry is after the commands def section)
; 1. Command definition
; Note: The commands are CASE-SENSITIVE, and so are the command names.
; The eight directions are:
; B, DB, D, DF, F, UF, U, UB (all CAPS)
; corresponding to back, down-back, down, downforward, etc.
; The six buttons are:
; a, b, c, x, y, z (all lower case)
; In default key config, abc are are the bottom, and xyz are on the
; top row. For 2 button characters, we recommend you use a and b.
; For 6 button characters, use abc for kicks and xyz for punches.
; Each [Command] section defines a command that you can use for
; state entry, as well as in the CNS file.
; The command section should look like:
; name = some_name
; command = the_command
; time = time (optional)
; buffer.time = time (optional)
; - some_name
; A name to give that command. You'll use this name to refer to
; that command in the state entry, as well as the CNS. It is case-
; sensitive (QCB_a is NOT the same as Qcb_a or QCB_A).
; - command
; list of buttons or directions, separated by commas. Each of these
; buttons or directions is referred to as a "symbol".
; Directions and buttons can be preceded by special characters:
; slash (/) - means the key must be held down
; egs. command = /D ;hold the down direction
; command = /DB, a ;hold down-back while you press a
; tilde (~) - to detect key releases
; egs. command = ~a ;release the a button
; command = ~D, F, a ;release down, press fwd, then a
; If you want to detect "charge moves", you can specify
; the time the key must be held down for (in game-ticks)
; egs. command = ~30a ;hold a for at least 30 ticks, then release
; dollar ($) - Direction-only: detect as 4-way
; egs. command = $D ;will detect if D, DB or DF is held
; command = $B ;will detect if B, DB or UB is held
; plus (+) - Buttons only: simultaneous press
; egs. command = a+b ;press a and b at the same time
; command = x+y+z ;press x, y and z at the same time
; greater-than (>) - means there must be no other keys pressed or released
; between the previous and the current symbol.
; egs. command = a, >~a ;press a and release it without having hit
; ;or released any other keys in between
; You can combine the symbols:
; eg. command = ~30$D, a+b ;hold D, DB or DF for 30 ticks, release,
; ;then press a and b together
; Note: Successive direction symbols are always expanded in a manner similar
; to this example:
; command = F, F
; is expanded when MUGEN reads it, to become equivalent to:
; command = F, >~F, >F
; It is recommended that for most "motion" commads, eg. quarter-circle-fwd,
; you start off with a "release direction". This makes the command easier
; to do.
; - time (optional)
; Time allowed to do the command, given in game-ticks. The default
; value for this is set in the [Defaults] section below. A typical
; value is 15.
; - buffer.time (optional)
; Time that the command will be buffered for. If the command is done
; successfully, then it will be valid for this time. The simplest
; case is to set this to 1. That means that the command is valid
; only in the same tick it is performed. With a higher value, such
; as 3 or 4, you can get a "looser" feel to the command. The result
; is that combos can become easier to do because you can perform
; the command early. Attacks just as you regain control (eg. from
; getting up) also become easier to do. The side effect of this is
; that the command is continuously asserted, so it will seem as if
; you had performed the move rapidly in succession during the valid
; time. To understand this, try setting buffer.time to 30 and hit
; a fast attack, such as KFM's light punch.
; The default value for this is set in the [Defaults] section below.
; This parameter does not affect hold-only commands (eg. /F). It
; will be assumed to be 1 for those commands.
; If you have two or more commands with the same name, all of them will
; work. You can use it to allow multiple motions for the same move.
; Some common commands examples are given below.
; [Command] ;Quarter circle forward + x
; name = "QCF_x"
; command = ~D, DF, F, x
; [Command] ;Half circle back + a
; name = "HCB_a"
; command = ~F, DF, D, DB, B, a
; [Command] ;Two quarter circles forward + y
; name = "2QCF_y"
; command = ~D, DF, F, D, DF, F, y
; [Command] ;Tap b rapidly
; name = "5b"
; command = b, b, b, b, b
; time = 30
; [Command] ;Charge back, then forward + z
; name = "charge_B_F_z"
; command = ~60$B, F, z
; time = 10
; [Command] ;Charge down, then up + c
; name = "charge_D_U_c"
; command = ~60$D, U, c
; time = 10
;-| Button Remapping |-----------------------------------------------------
; This section lets you remap the player's buttons (to easily change the
; button configuration). The format is:
; old_button = new_button
; If new_button is left blank, the button cannot be pressed.
x = x
y = y
z = z
a = a
b = b
c = c
s = s
;-| Default Values |-------------------------------------------------------
; Default value for the "time" parameter of a Command. Minimum 1.
command.time = 15
; Default value for the "buffer.time" parameter of a Command. Minimum 1,
; maximum 30.
command.buffer.time = 3
;-| Super Motions |--------------------------------------------------------
;The following two have the same name, but different motion.
;Either one will be detected by a "command = TripleKFPalm" trigger.
;Time is set to 20 (instead of default of 15) to make the move
;easier to do.
Spoiler: KFM's Commands (click to see content)
; 2. State entry
; This is where you define what commands bring you to what states.
; Each state entry block looks like:
; [State -1, Label] ;Change Label to any name you want to use to
; ;identify the state with.
; type = ChangeState (http://mugenguild.com/forum/topics/details-statedef-and-special-state-numbers-cns-169454.0.html) ;Don't change this
; value = new_state_number
; trigger1 = command (http://mugenguild.com/forum/topics/command-triggers-169067.0.html) = command_name
; . . . (any additional triggers)
; - new_state_number is the number of the state to change to
; - command_name is the name of the command (from the section above)
; - Useful triggers to know:
; - statetype (http://mugenguild.com/forum/topics/statetype-p2statetype-trigger-169751.0.html)
; S, C or A : current state-type of player (stand, crouch, air)
; - ctrl (http://mugenguild.com/forum/topics/ctrl-triggers-169560.0.html)
; 0 or 1 : 1 if player has control. Unless "interrupting" another
; move, you'll want ctrl = 1
; - stateno (http://mugenguild.com/forum/topics/stateno-p2stateno-triggers-169749.0.html)
; number of state player is in - useful for "move interrupts"
; - movecontact (http://mugenguild.com/forum/topics/movecontact-triggers-169089.0.html)
; 0 or 1 : 1 if player's last attack touched the opponent
; useful for "move interrupts"
; Note: The order of state entry is important.
; State entry with a certain command must come before another state
; entry with a command that is the subset of the first.
; For example, command "fwd_a" must be listed before "a", and
; "fwd_ab" should come before both of the others.
; For reference on triggers, see CNS documentation. (http://network.mugenguild.com/justnopoint/1.0docs/cns.html)
; Just for your information (skip if you're not interested):
; This part is an extension of the CNS. "State -1" is a special state
; that is executed once every game-tick, regardless of what other state
; you are in.
; Don't remove the following line. It's required by the CMD standard.
Spoiler: KFM's statedef -1 (click to see content)
Charge motions that look like this:
name = "ChargeBF_X"
command = ~30$B,$F,x
Why this is wrong: On the surface, this may seem to be fine. If you've played with a charge character before, then you'll know that holding DB or UB will also count toward the B charge (same applies to DB and DF for D charges). However, if you try to shift for directional input from holding D to DB or UB, you will still retain the charge. Mugen, however, considers this as a new input and you will lose the charge if this were to occur.
Solution: Rather than using Mugen's native command buffer, you'll have to build your own. First, alter the above command to the following:
name = "ChargeBF_X"
command = ~$B,$F,x
You'll want to build your charge input buffer using two variables: one for determining how long the direction was held, and the other that tells Mugen how long the charge should be held in the command buffer. The first part is easy. First, make sure the following is in your CMD file:
name = "holdback";Required (do not remove)
command = /$B
time = 1
Next, in your State -2, add the following.
[State -2, Back Charge Increment]
type = VarAdd
trigger1 = command = "holdback"
var(0) = 1
ignorehitpause = 1
[State -2, Back Charge Reset]
type = VarSet
trigger1 = command != "holdback"
var(0) = 0
This will increment the variable's value for each tick that you are holding the direction to be charged, and resets it back to 0 when the direction is no longer held. For the second part:
[State -2, Back Charge Buffer Activation]
type = VarSet
trigger1 = var(0) >= 50 ;Change this value to the minimum time you want the direction to be held for.
var(1) = 35
[State -2, Back Charge Buffer Decrement]
type = VarAdd
trigger1 = var(0) < 50 && var(1) > 0 ;Change the value of 50 to whatever you set the value above to.
var(1) = -1
What this does is it tells Mugen to register the back command in the input buffer once it has been held for at least 50 ticks (roughly 5/6 of a second). Once the direction is released, you will then have 35 ticks (a little more than half a second) to complete the charge motion. Finally, in your CMD file, locate the changestate for the special requiring the charge motion and add the lines noted below:
[State -1, Sonic Boom]
type = ChangeState
value = 1100
triggerall = (statetype != A)
triggerall = var(1)>16 ;ADD THIS LINE
triggerall = ctrl
trigger1 = command = "ChargeBF_X"
The above will limit the window to complete the charge motion to 19 (35-16) ticks, all you simply have to do is complete the motion. The 16 can be changed to a smaller value if you need more time to complete the motion, such as with a B,F,B,F motion. For vertical charge motions (D,U), simply repeat the above steps using two different variables and making necessary alterations to account for holding down rather than back. For motions that require a DB charge (such as Vega/Claw's Scarlet Terror and Flying Barcelona Special), simply use the variables for both horizontal and vertical charges.
(parts of code based on code used by P.o.t.S. and Jmorphman)
Or you could try putting the parentheses in the correct place:
[State -1, AI Attack]The expression above will evaluate in some cases to 1001, giving an error if the state does not exist, or automatically going to the wrong state
type = ChangeState
trigger1 = whatever
value = 1000+(2*random%3)
To correct it, you will need to remove arithmetic expressions and use IfElse instead
value = 1000+2*(random%3)
You can definitely use z as a shortcut, but not using the button remapping feature. The best way to accomplish what you're asking would be to make a copy of the command, but replace "x+y" with "z"
so it'd look like this:
[Command]You'd just need to add this to the cmd and you should be all set!
name = "2QCFxy"
command = ~D, F, D, F, z
time = 30