Pattern Recognition CombatCombat

Enemies and bosses follow fixed, fully deterministic patterns; mastery is memorization and execution, not reaction to randomness.

The boss runs a fixed, telegraphed attack pattern — read the tell, dodge to the safe spot, and punish the recovery window.

How pattern recognition combat works in Godot

The whole point is determinism: no RNG anywhere in the enemy. Mastery comes from the pattern being identical every attempt.

AnimationPlayernode

Author the attack sequence as a fixed timeline — telegraph, strike, recover. Same animation every loop means a memorizable, repeatable pattern.

func _ready():
    $Anim.play("attack_cycle")
    $Anim.animation_finished.connect(func(_n): $Anim.play("attack_cycle"))

Timernode

Fixed intervals between pattern steps. A constant wait_time keeps the rhythm learnable — never randf() the delay.

$Beat.wait_time = 1.2   # constant, never randomized
$Beat.timeout.connect(next_pattern_step)

enumprimitive

Step index through the pattern. Advancing it deterministically (not by chance) is what makes the fight a puzzle of execution.

var step := 0
func next_pattern_step():
    step = (step + 1) % PATTERN.size()
    do(PATTERN[step])

In short: AnimationPlayer-driven enemy state machine with no RNG; attack sequences are scripted and repeatable

Retro games that use pattern recognition combat

6 catalogued game(s) use this mechanic, spanning 1987–1995.

Related combat mechanics

▶ Explore Pattern Recognition Combat interactively — see every game + the Godot system