FighterMove
namespace Griff.Modules.Fighting;
public sealed class FighterMoveOne of a FightingCharacter’s moves: its name, the input that does it (MoveInput), the animation clip it plays (whose hitboxes, drawn in the Clip Editor, are what hit), how many steps it takes before it hits, hits for and takes to recover (its startup, active and recovery frames), where it must be blocked, and what it cancels into. Written as a line, e.g. Jab: 5P frames 3/2/6 cancels special or Uppercut: 623P clip Rising frames 3/6/22 push 1,7.
Properties
Section titled “Properties”Active
Section titled “Active”public int Active { get; init; }Steps it can hit for; 0 for as long as its clip’s frames with hitboxes take.
Blockstun
Section titled “Blockstun”public int Blockstun { get; init; }Steps a blocked hit holds the blocker in blockstun; 0 for two thirds of its hitbox’s stun.
CancelList
Section titled “CancelList”public IReadOnlyList<string> CancelList { get; }What it cancels into, never null.
Cancels
Section titled “Cancels”public IReadOnlyList<string>? Cancels { get; init; }What it cancels into once it has hit or been blocked: moves by name, “special” (any special move), “normal” (any other) or “any”; empty for nothing.
public float? Chip { get; init; }How much of its damage a blocked hit still does, 0 to 1; null for the blocker’s Chip Damage.
public string? Clip { get; init; }The animation clip it plays; empty for one named like the move without spaces (“Low Kick” plays LowKick).
ClipName
Section titled “ClipName”public string ClipName { get; }The clip it plays: its own, or its name without spaces.
public MoveHeight Hits { get; init; }Where it must be blocked: mid (either way), low (crouching) or high (standing).
public MoveInput Input { get; init; }What’s pressed for it, e.g. 236P.
Message
Section titled “Message”public string? Message { get; init; }A message sent with Game.Send as it starts, with the fighter as its data.
public string Name { get; init; }What it’s called, e.g. “Jab” or “Fireball”.
public Vector2 Push { get; init; }How fast it sends the fighter, forward and up, as it starts to hit (a lunge, a rising uppercut); zero for none.
Recovery
Section titled “Recovery”public int Recovery { get; init; }Steps after it hits before the fighter can act again; 0 for as long as its clip’s last frames take.
public string? Sound { get; init; }A sound played as it starts, e.g. “Sounds/swing.wav”.
Startup
Section titled “Startup”public int Startup { get; init; }Steps (frames, at 60 a second) before it can hit; 0 for as long as its clip’s frames before its first hitbox take.
Methods
Section titled “Methods”CancelsInto
Section titled “CancelsInto”public bool CancelsInto(FighterMove next)True if, once it has hit or been blocked, it can be cancelled into next.
Deconstruct
Section titled “Deconstruct”public void Deconstruct(out string Name, out MoveInput Input, out string? Clip, out int Startup, out int Active, out int Recovery, out MoveHeight Hits, out int Blockstun, out float? Chip, out Vector2 Push, out IReadOnlyList<string>? Cancels, out string? Message, out string? Sound)Equals
Section titled “Equals”public override bool Equals(object? obj)Equals
Section titled “Equals”public bool Equals(FighterMove? other)GetHashCode
Section titled “GetHashCode”public override int GetHashCode()public static FighterMove Parse(string line)Reads a move’s line, throwing for one that doesn’t make sense.
ParseAll
Section titled “ParseAll”public static IReadOnlyList<FighterMove> ParseAll(IEnumerable<string>? lines)The moves of lines that make sense, in order.
ToString
Section titled “ToString”public override string ToString()The move as a line, with what isn’t the default: what TryParse reads back.
TryFromRow
Section titled “TryFromRow”public static bool TryFromRow(TableRow row, out FighterMove move, out string? problem)A move from a row of a moves table: the row’s name, and its columns Input, Clip, Startup, Active, Recovery (or Frames, “3/2/6”), Hits (Low, High or Mid), Blockstun, Chip, Push (“2,0”), Cancels, Message and Sound, any of them left out. False with why for a row that doesn’t make a move.
TryParse
Section titled “TryParse”public static bool TryParse(string? line, out FighterMove move, out string? problem)Reads a move written as a line: its name and a colon, its input, then any of clip Name, frames 3/2/6 (or startup, active and recovery on their own), low or high, blockstun 10, chip 0.25, push 2,0, message Name, sound Path and last cancels special (or names, with commas between, to the end of the line). False with why for a line that doesn’t make sense.