Cancel
class Cancel
{
public:
int32_t DirectionCommand_ListIdentifier; //0x0000
int32_t AttackCommand; //0x0004
class CancelRequirement *pRequirementsList; //0x0008
class CancelExtradata *pExtradataList; //0x0010
int32_t FrameWindowStart; //0x0018
int32_t FrameWindowEnd; //0x001C
int32_t StartingFrame; //0x0020
uint16_t MoveID; //0x0024
uint16_t CancelOption; //0x0026
}; //Size: 0x0028
static_assert(sizeof(Cancel) == 0x28);
DirectionCommand_ListIdentifier
Int32 bitwise-andable(&
) Enum of type CancelDirectionCode
. It's also a union: if the value of this member is 0x8000, it indicates the end of the cancel list for a move. If it's 0x800B, it means that at the MoveID offset(0x24) there is an index to a grouped cancel list: index inside a list of cancels in the GroupCancelList member in the Motbin
class.
AttackCommand
Int32 bitwise-andable(&
) Enum of type CancelAttackCode
.
pRequirementsList
Pointer to the start of the requirement list for this cancel.
pExtradataList
Pointer to the start of the extradata list for this cancel.
FrameWindowStart
The start of the window at which the cancel is active.
FrameWindowEnd
The end of the window at which the cancel is active.
StartingFrame
Number of the frame to which the cancel cancels the move. In other words at which frame the next move will start.
MoveID
ID of a move into which this cancel cancels the object. So, for example, if value of the move_id
member is 0x1605
, this cancel will cancel current move into the move at index 0x1605
in the move list.
CancelOption
todo.
CancelDirectionCode
class CancelDirectionCode(Enum):
_ANY = 0
_D_B = 1 << 1
_D = 1 << 2
_D_F = 1 << 3
_B = 1 << 4
_N = 1 << 5
_F = 1 << 6
_U_B = 1 << 7
_U = 1 << 8
_U_F = 1 << 9
special = 1 << 15
cancel_list_end = 0x8000
group_cancel = 0x800B
group_cancel_list_end = 0x800C
CancelDirectionCode
enum inside Cancel
objects.
If 15th bit is not set, it means it's a direction code of an input. If 15th bit is set, depending on the value of the variable, it indicates the end of the cancel list, or a pointer to a group cancel list, or possibly something else.
0x8000, 0x800C - end of the cancel list.
0x8001 is forward dash and 0x8002 is backdash.
0x8003 and 0x8004 the sidesteps.
If it's a pointer to a group cancel list, the index of the cancel in the group cancel list is in the move_id
member in the Cancel
object.
CancelAttackCode
class CancelAttackCode(Enum):
_ANY = 0
_1 = 1 << 0
_2 = 1 << 1
_3 = 1 << 2
_4 = 1 << 3
_1_held = 1 << 9
_2_held = 1 << 10
_3_held = 1 << 11
_4_held = 1 << 12
_1_not_held = 1 << 18
_2_not_held = 1 << 19
_3_not_held = 1 << 20
_4_not_held = 1 << 21
Mode = 1 << 30
Indicates what attack buttons have to be pressed in order for this cancel to become active(cancel the move).
Bits:
0-3: if 1-4 attack button should be pressed again after.
4-7: unknown.
Bit 8 unknown.
Bits 9-12: if 1-4 attack button should be held down.
Bits 18-21: if 1-4 attack buttons should be released.
29-30th bit:
Determines if the buttons in the first 4 bits should be pressed or only to use held or unheld inputs.
If 29th or 30th bit is set and first nibble is 0, then any press button will work.
If 29th or 30th bit is not set, first nibble should be 0 and not set, too.
If 29-30th bit is set and first nibble is 0, then any button will work. If 29-30th bit is not set, first nibble should be 0, too. Then no button presses will work to activate it, only held
and not_held
inputs will work.
For the non-hold buttons to work, the 29th or 30th bit should be set to 1.
CancelRequirement
class CancelRequirement
{
public:
int32_t Requirement; //0x0000
int32_t Parameter; //0x0004
}; //Size: 0x0008
static_assert(sizeof(CancelRequirement) == 0x8);
CancelExtradata
class CancelExtradata
{
public:
int32_t Value; //0x0000
}; //Size: 0x0004
static_assert(sizeof(CancelExtradata) == 0x4);