Atk File Specification - wu4/rivals-easy-workshop-tool GitHub Wiki

Example

fstrong.atk fstrong.gml
category: 2
off_ledge: 1
uses_custom_gravity: true
strong_charge_window: 1

num_windows: 4

-- startup
> length: 8
  anim_frames: 1
  custom_gravity: 0.5
  has_custom_friction: true
  custom_air_friction: 0.5
  custom_ground_friction: 1

-- jump
> length: 20
  anim_frames: 1
  anim_frame_start: 1
  custom_gravity: 0.75

-- kick
> length: 3
  sfx: "sfx_swipe_medium1"
  anim_frames: 1
  anim_frame_start: 2
  custom_gravity: 0

  -- cancelable first hit
  - lifetime: 2
    frame: 1
    x: 30
    y: -40
    w: 40
    h: 40
    shape: 0
    sfx: "sfx_blow_medium3"
    group: 1
    priority: 1

    dmg: 6
    angle: 90
    angle_flipper: 0
    bkb: 4
    base_hitpause: 8
    techable: 3
  
-- post kick animation
> length: 15
  anim_frames: 1
  anim_frame_start: 3
  custom_gravity: 0.5
  has_custom_friction: true
  custom_ground_friction: 2
  custom_air_friction: 0.5
  has_whifflag: true

-- chargeless fire
> length: 10
  type: 7 -- pratfall
  anim_frames: 1
  anim_frame_start: 4
  sfx: "sfx_orca_bite"

  - lifetime: 3
    frame: 3
    x: 40
    y: -40
    w: 50
    h: 50
    shape: 0
    sfx: "sfx_orca_crunch"
    group: 2
    priority: 1

    dmg: 9
    angle: 45
    bkb: 8
    kbg: 0.5
    base_hitpause: 10

set_attack_value(AT_FSTRONG, AG_CATEGORY, 2);
set_attack_value(AT_FSTRONG, AG_OFF_LEDGE, 1);
set_attack_value(AT_FSTRONG, AG_USES_CUSTOM_GRAVITY, true);
set_attack_value(AT_FSTRONG, AG_STRONG_CHARGE_WINDOW, 1);
set_attack_value(AT_FSTRONG, AG_NUM_WINDOWS, 4);
set_attack_value(AT_FSTRONG, AG_SPRITE, sprite_get("fstrong"));
set_attack_value(AT_FSTRONG, AG_HURTBOX_SPRITE, sprite_get("fstrong_hurt"));
set_num_hitboxes(AT_FSTRONG, 2);

set_window_value(AT_FSTRONG, 1, AG_WINDOW_LENGTH, 8);
set_window_value(AT_FSTRONG, 1, AG_WINDOW_ANIM_FRAMES, 1);
set_window_value(AT_FSTRONG, 1, AG_WINDOW_CUSTOM_GRAVITY, 0.5);
set_window_value(AT_FSTRONG, 1, AG_WINDOW_HAS_CUSTOM_FRICTION, true);
set_window_value(AT_FSTRONG, 1, AG_WINDOW_CUSTOM_AIR_FRICTION, 0.5);
set_window_value(AT_FSTRONG, 1, AG_WINDOW_CUSTOM_GROUND_FRICTION, 1);

set_window_value(AT_FSTRONG, 2, AG_WINDOW_LENGTH, 20);
set_window_value(AT_FSTRONG, 2, AG_WINDOW_ANIM_FRAMES, 1);
set_window_value(AT_FSTRONG, 2, AG_WINDOW_ANIM_FRAME_START, 1);
set_window_value(AT_FSTRONG, 2, AG_WINDOW_CUSTOM_GRAVITY, 0.75);

set_window_value(AT_FSTRONG, 3, AG_WINDOW_LENGTH, 3);
set_window_value(AT_FSTRONG, 3, AG_WINDOW_HAS_SFX, 1);
set_window_value(AT_FSTRONG, 3, AG_WINDOW_SFX, asset_get("sfx_swipe_medium1"));
set_window_value(AT_FSTRONG, 3, AG_WINDOW_ANIM_FRAMES, 1);
set_window_value(AT_FSTRONG, 3, AG_WINDOW_ANIM_FRAME_START, 2);
set_window_value(AT_FSTRONG, 3, AG_WINDOW_CUSTOM_GRAVITY, 0);

set_window_value(AT_FSTRONG, 4, AG_WINDOW_LENGTH, 15);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_ANIM_FRAMES, 1);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_ANIM_FRAME_START, 3);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_CUSTOM_GRAVITY, 0.5);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_HAS_CUSTOM_FRICTION, true);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_CUSTOM_GROUND_FRICTION, 2);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_CUSTOM_AIR_FRICTION, 0.5);
set_window_value(AT_FSTRONG, 4, AG_WINDOW_HAS_WHIFFLAG, true);

set_window_value(AT_FSTRONG, 5, AG_WINDOW_LENGTH, 10);
set_window_value(AT_FSTRONG, 5, AG_WINDOW_TYPE, 7);
set_window_value(AT_FSTRONG, 5, AG_WINDOW_ANIM_FRAMES, 1);
set_window_value(AT_FSTRONG, 5, AG_WINDOW_ANIM_FRAME_START, 4);
set_window_value(AT_FSTRONG, 5, AG_WINDOW_HAS_SFX, 1);
set_window_value(AT_FSTRONG, 5, AG_WINDOW_SFX, asset_get("sfx_orca_bite"));

set_hitbox_value(AT_FSTRONG, 1, HG_WINDOW, 3);
set_hitbox_value(AT_FSTRONG, 1, HG_LIFETIME, 2);
set_hitbox_value(AT_FSTRONG, 1, HG_WINDOW_CREATION_FRAME, 1);
set_hitbox_value(AT_FSTRONG, 1, HG_HITBOX_X, 30);
set_hitbox_value(AT_FSTRONG, 1, HG_HITBOX_Y, -40);
set_hitbox_value(AT_FSTRONG, 1, HG_WIDTH, 40);
set_hitbox_value(AT_FSTRONG, 1, HG_HEIGHT, 40);
set_hitbox_value(AT_FSTRONG, 1, HG_SHAPE, 0);
set_hitbox_value(AT_FSTRONG, 1, HG_HIT_SFX, asset_get("sfx_blow_medium3"));
set_hitbox_value(AT_FSTRONG, 1, HG_HITBOX_GROUP, 1);
set_hitbox_value(AT_FSTRONG, 1, HG_PRIORITY, 1);
set_hitbox_value(AT_FSTRONG, 1, HG_DAMAGE, 6);
set_hitbox_value(AT_FSTRONG, 1, HG_ANGLE, 90);
set_hitbox_value(AT_FSTRONG, 1, HG_ANGLE_FLIPPER, 0);
set_hitbox_value(AT_FSTRONG, 1, HG_BASE_KNOCKBACK, 4);
set_hitbox_value(AT_FSTRONG, 1, HG_BASE_HITPAUSE, 8);
set_hitbox_value(AT_FSTRONG, 1, HG_TECHABLE, 3);

set_hitbox_value(AT_FSTRONG, 2, HG_WINDOW, 5);
set_hitbox_value(AT_FSTRONG, 2, HG_LIFETIME, 3);
set_hitbox_value(AT_FSTRONG, 2, HG_WINDOW_CREATION_FRAME, 3);
set_hitbox_value(AT_FSTRONG, 2, HG_HITBOX_X, 40);
set_hitbox_value(AT_FSTRONG, 2, HG_HITBOX_Y, -40);
set_hitbox_value(AT_FSTRONG, 2, HG_WIDTH, 50);
set_hitbox_value(AT_FSTRONG, 2, HG_HEIGHT, 50);
set_hitbox_value(AT_FSTRONG, 2, HG_SHAPE, 0);
set_hitbox_value(AT_FSTRONG, 2, HG_HIT_SFX, asset_get("sfx_orca_crunch"));
set_hitbox_value(AT_FSTRONG, 2, HG_HITBOX_GROUP, 2);
set_hitbox_value(AT_FSTRONG, 2, HG_PRIORITY, 1);
set_hitbox_value(AT_FSTRONG, 2, HG_DAMAGE, 9);
set_hitbox_value(AT_FSTRONG, 2, HG_ANGLE, 45);
set_hitbox_value(AT_FSTRONG, 2, HG_BASE_KNOCKBACK, 8);
set_hitbox_value(AT_FSTRONG, 2, HG_KNOCKBACK_SCALING, 0.5);
set_hitbox_value(AT_FSTRONG, 2, HG_BASE_HITPAUSE, 10);

Basic grammar

Key-value pairs

Key-value pairs are defined by a key, containing alphanumeric characters, and a value, containing a Lua expression, delineated by the operator : and at least one space. All key names are case-insensitive.

length: 6

Blocks

Blocks are defined by indentation. Blocks must be started after a hitbox or window statement.

Windows

Windows are defined by the operator >, followed by a space. A key-value pair must follow the statement.

> length: 6
  anim_frames: 2

Hitboxes

Hitboxes are defined by the operator -, followed by a space. A key-value pair must follow the statement.

- lifetime: 3
  x: 25
  y: -50
  w: 30
  h: 40

Hitboxes are nested within windows to associate them:

> length: 6
  anim_frames: 2
  - lifetime: 3
    x: 25
    y: -50
    w: 30
    h: 40

Features

Automatic keys

Some keys are automatically set. Here is the list:

  • AG_SPRITE and AG_HURTBOX_SPRITE: Can be overridden with sprite and hurtbox_sprite key-value pairs at root level, respectively.
  • AG_NUM_WINDOWS: Can be overridden with a num_windows key-value pair at root level.
  • HG_WINDOW: Can't be overridden. Nest hitboxes in windows to associate them.
  • Hitbox count: Can't be overridden.
  • Window IDs.
  • Hitbox IDs. Nested hitboxes are ordered after root-level hitboxes.

Refer to the transpiled GML for window and hitbox IDs.

Omitted prefixes to key names

Repetitive prefixes, e.g. "HG_", "AG_" and "AG_WINDOW_", have been omitted from keys. They are not required, and are not valid in this language.

Example valid key names

Key name Transpiled result
length AG_WINDOW_LENGTH
Lifetime HG_LIFETIME
CATEGORY AG_CATEGORY

Invalid key names (will transpile successfully, but will result in unexpected behavior)

Key name Transpiled result (invalid)
ag_window_length AG_WINDOW_AG_WINDOW_LENGTH
HG_Lifetime HG_HG_LIFETIME
AG_CATEGORY AG_AG_CATEGORY

Hitbox key shortcuts

In hitbox blocks, there are some shortcuts for better readability/typing:

Shortcut Full name Rivals GML equivalent
type hitbox_type HG_HITBOX_TYPE
x hitbox_x HG_HITBOX_X
y hitbox_y HG_HITBOX_Y
w width HG_WIDTH
h height HG_HEIGHT
bkb base_knockback HG_BASE_KNOCKBACK
kbg knockback_scaling HG_KNOCKBACK_SCALING
dmg damage HG_DAMAGE
vfx visual_effect HG_VISUAL_EFFECT
sfx hit_sfx HG_HIT_SFX
group hitbox_group HG_HITBOX_GROUP
frame window_creation_frame HG_WINDOW_CREATION_FRAME
⚠️ **GitHub.com Fallback** ⚠️