User:Kulagin/Movelist

From Wavu Wiki, the 🌊 wavy Tekken wiki
Move
class Move
{
public:
	char *pName; //0x0000
	char *pAnimationName; //0x0008
	class Animation0xC8 *pAnimation; //0x0010
	uint32_t VulnerabilityBitMask; //0x0018
	uint32_t HitLevel; //0x001C
	class CancelList *pCancelList; //0x0020
	char pad_0028[8]; //0x0028
	uint64_t u2; //0x0030
	uint64_t u3; //0x0038
	uint64_t u4; //0x0040
	char pad_0048[8]; //0x0048
	uint32_t u6; //0x0050
	uint16_t TransitionMoveID; //0x0054
	uint16_t u7; //0x0056
	uint16_t u8; //0x0058
	uint16_t u8_2; //0x005A
	uint16_t u9; //0x005C
	char pad_005E[2]; //0x005E
	class hit_condition *pHitConditionList; //0x0060
	int32_t AnimationMaxLength; //0x0068
	uint32_t FloatableStart; //0x006C
	uint32_t FloatableEnd; //0x0070
	uint32_t u12; //0x0074
	class Voiceclip *pVoiceclip; //0x0078
	class ExtraMovePropertiesList *pExtraPropertiesList; //0x0080
	char pad_0088[16]; //0x0088
	uint32_t u15; //0x0098
	int32_t HitboxIndex; //0x009C
	int32_t HitboxStartFrame; //0x00A0
	int32_t HitboxEndFrame; //0x00A4
	uint16_t u16; //0x00A8
	uint16_t u17; //0x00AA
	uint32_t u18; //0x00AC
}; //Size: 0x00B0
static_assert(sizeof(Move) == 0xB0);

pName

Pointer to a C-style string with the name of the move.

pAnimationName

Pointer to a C-style string with the name of the animation of the move.

pAnimation

Pointer to animation object of the move.

VulnerabilityBitMask

Vulnerability flags: high, mid, low crush, etc., for the move.

Maybe something else.

HitLevel

Hit level flags.

pCancelList

Pointer to the list of cancels from this move.

TransitionMoveID

Move ID to which this move transitions(at AnimationLength frame number) by default if no cancels from the cancel list cancelled this move into their moves.

pHitConditionList

Pointer to the hit condition list for this move.

AnimationMaxLength

Frame number at which this move transitions into the TransitionMoveID move.

FloatableStart

Frame number(inclusive) of the start of the window when character will be floated if hit.

FloatableEnd

Frame number(inclusive) of the end of the window when character will be floated if hit.

pVoiceclip

Pointer to the Voiceclip object for this move.

pExtraPropertiesList

Pointer to the extra properties list for this move.

HitboxIndex

Index of the hitbox(probably in the hitbox array somewhere in the movelist container) for this move.

Hitbox is probably a list with hitlines.

HitboxStartFrame

Frame number(inclusive) of the start of the window at which hitlines will be active.

HitboxEndFrame

Frame number(inclusive) of the end of the window at which hitlines will be active.

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);