Skip to content

Releases: boneboxid/AATTAAI

Release list

v 2.1.0

Choose a tag to compare

@boneboxid boneboxid released this 08 Sep 12:16
  • bug fixes

v 2.0.0

Choose a tag to compare

@boneboxid boneboxid released this 01 Sep 20:49

AATTAAI v2.0.0 — Major Release Notes 🥳

We are thrilled to announce the release of AATTAAI v2.0.0 (Adobe Animate Texture Atlas Animation Importer for Godot 4)! This major milestone introduces a brand-new Visual Controller API, non-destructive incremental scene updating, a high-performance animation selector for large animation packs (80+ animations), an enhanced preview viewport with origin & floor grid, batch interpolation tooling, and numerous QoL upgrades.


✨ Highlights & What's New

1. 🎭 Standalone Visual Controller (AATTAIController)

  • Global Reskinning: Swap the entire character sprite sheet at runtime or in the inspector using change_skin(new_atlas_texture) with automatic slot preservation.
  • Slot-Based Overrides: Swap individual body parts or weapons (e.g. equipping a standalone sword/axe PNG) via set_slot_texture("weapon", axe_texture).
  • Custom Node Equipment: Attach custom nodes (VFX particles, Hitboxes Area2D, weapons, 3D elements) directly into character bone/layer slots via equip("weapon", item_node).
  • Playback & Signals: Clean animation relays (play_anim(), flip_h(), animation_finished, skin_changed, slot_changed).

2. 🔄 Non-Destructive Incremental Scene Update (Update Existing Scene)

  • Added 🔄 Update Existing Scene mode to inject new animations or update existing tracks in your .tscn character file without overwriting or deleting custom user nodes (Hitboxes, Hurtboxes, Cameras, Particles, Audio, or custom scripts).

3. 📋 Animation Checklist & Fast Search (80+ Animations Ready)

  • Compact 2-Column Grid Layout for clean browsing.
  • Real-Time Search Bar (🔍): Filter animations instantly by keyword.
  • Quick Selection Buttons: ☑️ All, ⬜ None, and 🎯 Select Filtered (selects only animations matching the active search query).

4. 🎬 Upgraded Viewport Preview with Origin & Floor Grid

  • 📏 Grid Toggle: Coordinate grid lines (64px/32px), Ground line (Red X Axis), Center line (Green Y Axis), and (0, 0) pivot marker.
  • 🔁 Loop Toggle: Toggle preview looping on or off (plays once and stops at the final frame).
  • ⚡ Live FPS Override: Instant preview update when adjusting the FPS override spinbox.
  • Debounced Viewport: Silky-smooth 60 FPS editor performance even when managing massive animation packs.

5. ⚡ Batch Set Animation Interpolation Tool

  • New editor tool under Project Menu → Tools → Batch Set Animation Interpolation....
  • Batch-modify track interpolation types across any character scene using exact names, comma-separated lists, or wildcard patterns (e.g. attack*, hit_react, *pixel*).

6. 🎯 Animation Track Interpolation Modes

  • Choose your preferred interpolation during import:
    • Linear (Smooth Tween) (Default)
    • Nearest / Stepped (Frame-by-Frame) (Traditional 2D / Anime / Pixel Art feel)
    • Cubic (Spline Curve)

7. 📌 Pinned Bottom Action Bar & UI Polish

  • Action buttons (Fresh Import, Update Scene) and status indicators are permanently pinned at the bottom—no stretching or resizing windows needed.

📦 Compatibility & Links

  • Engine Compatibility: Godot 4.0 – 4.4+
  • Adobe Animate: 2020 – 2025+ (Texture Atlas JSON format)
  • 🛒 2D Assets & Character Packs: bonebox.itch.io
  • 🛠️ Batch Export Tool (JSFL): Batch-Export-Texture-Atlas

💻 GDScript Quick Example (v2.0.0 API)

extends CharacterBody2D

@onready var visual: AATTAIController = $AnimatedCharacter

func _ready():
    # Connect signals
    visual.animation_finished.connect(_on_anim_finished)

    # 1. Global reskin
    visual.change_skin(preload("res://skins/ice_warrior.png"))

    # 2. Swap individual weapon skin
    visual.set_slot_texture("weapon", preload("res://sprites/axe.png"))

    # 3. Equip VFX / custom hitbox
    var fire_fx = preload("res://scenes/vfx_fire.tscn").instantiate()
    visual.equip("weapon", fire_fx)

    # 4. Play animation
    visual.play_anim("attack_combo_1")

func _on_anim_finished(anim_name: String):
    if anim_name.begins_with("attack"):
        visual.play_anim("idle")