← Back to File Formats

ATS Scripting Language Documentation

ATS = Animation Texture Script (presumed). Proprietary low-level scripting language for game animation behavior. Reverse-engineered through observation and testing

Table of Contents

Overview

ATS is a low-level, proprietary scripting language used in Crash Bandicoot: The Wrath of Cortex to control animation states via texture swapping. The language is plain text and appears structured similarly to assembly or early scripting languages. ATS files typically define animation loops, eye-blinking behavior, and reactive visual changes via direct frame manipulation.

File Structure

  • Each file begins with a Scriptname declaration:
  Scriptname angel
  • Files end with End.
  • Start indicates the beginning of the executable block.

Syntax

  • Comments begin with ;;
  • Instructions are case-sensitive
  • Labels are defined with a colon ( :)
  • Each instruction appears on its own line
  • Whitespace is non-significant

Commands / Instructions

General

Command Description
Start Begins script execution.
End Terminates script.
Scriptname Declares the name of the script.
;; Denotes a comment.

Control Flow

Command Description
Goto labelName Unconditional jump to label.
labelName: Label declaration for jumps.
Repeat Begins a repeat loop.
UntilTex = x Ends loop when current texture frame is x.
Gosub labelName Calls a subroutine.
Ret Returns from a subroutine.

Texture & Animation

Command Description
Tex x Sets the texture to frame x.
TexAdj a,b,c Adjusts current texture by delta. First param is usually -1 (decrement).
Wait a, b Waits a random duration between a and b frames.
Rate a, b Sets animation frame rate. Presumed: Rate 0,0 = 60 FPS, Rate 1,0 = 30 FPS.

Event Handling

Command Description
On x Executes block when event/state x is triggered.
Off x Executes block when event/state x is disabled.

Cross-File Interaction

Command Description
XDef label Defines a cross-referenced routine.
XRef label Calls a cross-referenced routine.

Labels & Subroutines

  • Labels ( LabelName:) are jump targets.
  • Subroutines end in Ret.
  • External functions are marked by XDef and are callable using XRef.

Examples

Blink Loop

	
    BlinkLoop:
    Wait 0,180
    XRef FastCloseLeftEye
    Gosub FastCloseRightEye
    Wait 0,7
    XRef OpenLeftEye
    Gosub OpenRightEye
    Goto BlinkLoop
	

Fast Eye Close (from XDef)

	
    FastCloseRightEye:
    Tex 0
    Tex 2
    Tex 3
    Ret

	

Loop using Texture Adjustment

  
    OpenRightEye:
    Repeat
    TexAdj -1,0,3
    UntilTex = 0
    Ret
   
   

Known Behaviors / Observations

  • TexAdj modifies frame index
  • Rate values change animation timing
  • Wait likely pauses execution (frames = time)
  • No duration defined for how long a Tex frame is held unless a Wait follows

Questions

  • What do the 2nd and 3rd parameters of TexAdj mean?
  • Can XRef call into multiple files, or only one?
  • Do On/ Off map directly to boolean engine states?