kAtckDefTbl yCancelInfo kCancelInfoBit explanation - muhopensores/dmc4_hook GitHub Wiki
EroticizedBunnyGirls — 18:05
- Moves can have multiple entries in a table, for additional rules. Example: Lucifer 1 has two entries.
- Entry index is not an issue and doesn't appear to be referenced by anything.
- uPlayer::yCancelINFO for relevant stuff in the .hpp CancelID thingies are composed of 32bits, with one 8 bit value at the start, and 3 single bits at the end:
unsigned int cmdNo : 1 /* start 0 */ /* public */; // 0x00000000
unsigned int cmdId : 1 /* start 1 */ /* public */; // 0x00000000
unsigned int cmdOr : 1 /* start 2 */ /* public */; // 0x00000000
unsigned int dmy : 21 /* start 3 */ /* public */; // 0x00000000
int val : 8 /* start 24 */ /* public */; // 0x00000000
The 3 bits at the end determine what the int at the start "means". CmdNo (001 = 0x1) = What Cancel Window the move is allowed to use ; CmdID (010 = 0x2)= What MoveID is this instruction relative to ; CmdOr (101 = 0x5)= What Cancel Windows this move is allowed to override, even from other attacks and attack strings.
CmdNo and CmdOr both use the same table of valid values:
C_NORM0 = 0x0,
C_NORM1 = 0x1,
C_NORM2 = 0x2,
C_COMMAND = 0x3,
C_JUMP = 0x4,
C_CHOUHATSU = 0x5,
C_GUN = 0x6,
C_ALL = 0x7
(0x8 will disable a move)
CmdID, directly references the MoveID value, written in hex.
- The order of operations does matter, with parameters on Cancel0 being resolved first, then Cancel1, etc.
Rebellion Ground Combo Table, for Reference:
Starting with RebA1 (MovID1)
Cancel0: 00 (0000) 01 = Sets the valid cancel window (CmdNo) to 00 (C_NORM0)
Cancel1: 01 (0000) 05 = Set the first possible override (CmdOr) to 01 (C_NORM1)
Cancel5: 07 (0000) 05 = Set a default override to 07 (C_ALL)
Now for RebB1 (MovID4) Cancel0: 01 (0000) 01 = Sets the valid cancel window (CmdNo) to 01 (C_NORM1) Cancel1: 01 (0000) 02 = Sets the MoveID reference (CmdId) to 01 (RebA1, in this case)
Explanation:
- The first rule, means that RebB1 cancel is only available after "C_NORM1" opens. Anything before that, the 00 window, would get you the rest of combo A.
- The second array specifies the moveID which the window it's referencing in Cancel0 pertains to. So basically this says "The thing before this? Yeah, i mean that specifically for RebA1's NORM1 window"
Layering overrides: It is possible to set more than one override per entry. You could, for example, add "04000005" to RebA1's Cancel2, and now RebA1 would be able to be executed during any attack's "C_JUMP" window.
As some moves have their C_JUMP before C_NORM1, this means that in moves like Coyote shot, you'd be able to cancel into a rebellion attack faster than normal.
Overrides for specific MoveIDs: Setting a moveID reference after an override, will restrict the override only to that specific move's window. ie: 06000001 - 04000005 - XX000002 Means that only during Move [XX], this entry will cancel on the 04 window.
Final random notes:
- Nero's pause shit is structured a bit different, I suspect because you can buy his upgraded combos. His normal A combo has an override for the pause timing, to cover the scenario before you acquire those moves.
- His ComboA1 is the only attack to reference C_NORM2 cancel window.
- Not setting a Valid cancel window (CmdNo = 00) can make a move be a weird fucked up omni cancel.