Skip to content

Complex State Machines

Build sophisticated titan AI with multi-state behavior trees, conditional transitions, and dynamic decision making.

Titan adapts behavior based on distance to target.

{
"stateMachine": {
"initialState": "assess_range",
"states": {
"assess_range": {
"movementController": "titan:stationary",
"transitions": [
{
"targetState": "melee_combat",
"condition": "q.target_distance <= 4.0"
},
{
"targetState": "ranged_combat",
"condition": "q.target_distance > 4.0 && q.target_distance <= 12.0"
},
{
"targetState": "chase",
"condition": "q.target_distance > 12.0"
}
]
},
"melee_combat": {
"movementController": "titan:circle_strafe",
"speedMultiplier": 1.2,
"aggressionMultiplier": 1.8,
"transitions": [
{
"targetState": "assess_range",
"condition": "q.target_distance > 5.0",
"minDuration": 2000
}
]
},
"ranged_combat": {
"movementController": "titan:maintain_distance",
"speedMultiplier": 1.0,
"aggressionMultiplier": 1.2,
"transitions": [
{
"targetState": "assess_range",
"condition": "q.target_distance <= 4.0 || q.target_distance > 12.0"
}
]
},
"chase": {
"movementController": "titan:direct_pursuit",
"speedMultiplier": 1.5,
"aggressionMultiplier": 0.5,
"transitions": [
{
"targetState": "assess_range",
"condition": "q.target_distance <= 12.0"
}
]
}
}
}
}

Use Cases:

  • Sword & magic titans
  • Adaptive difficulty
  • Tactical boss fights

Different AI per phase with smooth transitions.

{
"stateMachine": {
"initialState": "phase1_aggressive",
"states": {
"phase1_aggressive": {
"movementController": "titan:ground_pursuit",
"speedMultiplier": 1.0,
"aggressionMultiplier": 1.5,
"transitions": [
{
"targetState": "phase2_transition",
"condition": "q.titan_health_percent <= 0.66"
}
]
},
"phase2_transition": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.grant_damage_immunity(3000);"},
{"type": "molang_script", "script": "q.broadcast('The titan evolves!');"},
{"type": "pause", "pause": 2.0},
{"type": "molang_script", "script": "q.particle_sphere('minecraft:dragon_breath', 200, 10.0);"},
{"type": "molang_script", "script": "q.heal_self(100.0);"}
],
"transitions": [
{
"targetState": "phase2_tactical",
"condition": "q.time_in_state > 3000"
}
]
},
"phase2_tactical": {
"movementController": "titan:tactical_positioning",
"speedMultiplier": 1.2,
"aggressionMultiplier": 1.2,
"transitions": [
{
"targetState": "phase3_transition",
"condition": "q.titan_health_percent <= 0.33"
},
{
"targetState": "phase2_retreat",
"condition": "q.is_vulnerable('EXHAUSTED')"
}
]
},
"phase2_retreat": {
"movementController": "titan:retreat",
"speedMultiplier": 1.4,
"aggressionMultiplier": 0.3,
"transitions": [
{
"targetState": "phase2_tactical",
"condition": "!q.is_vulnerable()"
}
]
},
"phase3_transition": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.grant_damage_immunity(4000);"},
{"type": "molang_script", "script": "q.broadcast('§cEnrage!');"},
{"type": "molang_script", "script": "q.set_variable('enraged', true);"},
{"type": "pause", "pause": 2.5},
{"type": "molang_script", "script": "q.particle_sphere('minecraft:angry_villager', 300, 15.0);"},
{"type": "molang_script", "script": "q.screen_shake(0.8, 40);"}
],
"transitions": [
{
"targetState": "phase3_berserker",
"condition": "q.time_in_state > 4000"
}
]
},
"phase3_berserker": {
"movementController": "titan:aggressive_pursuit",
"speedMultiplier": 1.5,
"aggressionMultiplier": 2.0,
"transitions": []
}
}
}
}

Features:

  • Phase transitions with immunity
  • Visual/audio feedback
  • Healing during transitions
  • Progressive difficulty

Titan behavior changes based on vulnerability state.

{
"stateMachine": {
"initialState": "normal_combat",
"states": {
"normal_combat": {
"movementController": "titan:balanced_combat",
"speedMultiplier": 1.0,
"aggressionMultiplier": 1.3,
"transitions": [
{
"targetState": "defensive_retreat",
"condition": "q.is_vulnerable('EXHAUSTED')"
},
{
"targetState": "cautious_combat",
"condition": "q.is_vulnerable('RECOVERING')"
}
]
},
"cautious_combat": {
"movementController": "titan:cautious_positioning",
"speedMultiplier": 1.1,
"aggressionMultiplier": 0.8,
"transitions": [
{
"targetState": "normal_combat",
"condition": "!q.is_vulnerable()"
},
{
"targetState": "defensive_retreat",
"condition": "q.is_vulnerable('EXHAUSTED')"
}
]
},
"defensive_retreat": {
"movementController": "titan:retreat",
"speedMultiplier": 1.5,
"aggressionMultiplier": 0.2,
"transitions": [
{
"targetState": "normal_combat",
"condition": "!q.is_vulnerable()"
}
]
}
},
"globalTransitions": [
{
"targetState": "defensive_retreat",
"condition": "q.is_vulnerable('EXHAUSTED')",
"priority": 10
}
]
}
}

Behavior:

  • Aggressive when safe
  • Cautious when RECOVERING
  • Retreats when EXHAUSTED
  • Creates chase opportunities

Enrage if fight takes too long.

{
"stateMachine": {
"initialState": "normal",
"states": {
"normal": {
"movementController": "titan:standard_combat",
"speedMultiplier": 1.0,
"aggressionMultiplier": 1.2,
"transitions": [
{
"targetState": "soft_enrage",
"condition": "q.time_in_phase > 90000"
}
]
},
"soft_enrage": {
"movementController": "titan:aggressive_pursuit",
"speedMultiplier": 1.3,
"damageModifier": 1.3,
"aggressionMultiplier": 1.6,
"onEnter": [
{"type": "molang_script", "script": "q.broadcast('§eThe titan grows impatient!');"},
{"type": "molang_script", "script": "q.set_variable('soft_enraged', true);"}
],
"transitions": [
{
"targetState": "hard_enrage",
"condition": "q.time_in_phase > 180000"
}
]
},
"hard_enrage": {
"movementController": "titan:berserker",
"speedMultiplier": 1.6,
"damageModifier": 1.6,
"aggressionMultiplier": 2.0,
"onEnter": [
{"type": "molang_script", "script": "q.broadcast('§4The titan becomes unstoppable!');"},
{"type": "molang_script", "script": "q.set_variable('hard_enraged', true);"},
{"type": "molang_script", "script": "q.particle_sphere('minecraft:angry_villager', 400, 20.0);"}
],
"transitions": []
}
}
}
}

Timings:

  • 0-90s: Normal
  • 90-180s: Soft enrage (+30% speed/damage)
  • 180s+: Hard enrage (+60% speed/damage)

Purpose: DPS check, prevents stalling


Aerial titan with dynamic movement.

{
"stateMachine": {
"initialState": "takeoff",
"states": {
"takeoff": {
"movementController": "titan:ascend",
"onEnter": [
{"type": "molang_script", "script": "q.play_animation('fly');"},
{"type": "molang_script", "script": "q.fling_self_up(3.0);"}
],
"transitions": [
{
"targetState": "aerial_combat",
"condition": "q.is_flying && q.time_in_state > 2000"
}
]
},
"aerial_combat": {
"movementController": "titan:aerial_strafe",
"speedMultiplier": 1.3,
"aggressionMultiplier": 1.0,
"transitions": [
{
"targetState": "divebomb",
"condition": "q.target_distance <= 15.0 && q.time_in_state > 8000"
},
{
"targetState": "landing",
"condition": "q.titan_health_percent <= 0.5 && q.is_vulnerable('EXHAUSTED')"
}
]
},
"divebomb": {
"movementController": "titan:dive_attack",
"speedMultiplier": 2.0,
"onEnter": [
{"type": "molang_script", "script": "q.play_sound('entity.ender_dragon.growl', 1.5, 0.8);"}
],
"transitions": [
{
"targetState": "ground_impact",
"condition": "q.is_grounded"
}
]
},
"ground_impact": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.damage_and_knockback(30.0, 3.0, 10.0, 'EXPLOSION', 'AWAY');"},
{"type": "molang_script", "script": "q.create_safe_explosion(q.user_position.x, q.user_position.y, q.user_position.z, 4.0);"},
{"type": "molang_script", "script": "q.set_vulnerable('EXHAUSTED', 5000);"}
],
"transitions": [
{
"targetState": "grounded_combat",
"condition": "q.time_in_state > 1000"
}
]
},
"grounded_combat": {
"movementController": "titan:ground_combat",
"speedMultiplier": 0.9,
"aggressionMultiplier": 1.4,
"transitions": [
{
"targetState": "takeoff",
"condition": "!q.is_vulnerable() && q.time_in_state > 10000"
}
]
},
"landing": {
"movementController": "titan:descend",
"onEnter": [
{"type": "molang_script", "script": "q.play_animation('land');"}
],
"transitions": [
{
"targetState": "grounded_combat",
"condition": "q.is_grounded"
}
]
}
}
}
}

Cycle:

  1. Takeoff → Aerial combat (8-12s)
  2. Divebomb → Ground impact
  3. Grounded combat (10s) while vulnerable
  4. Repeat

Scale behavior based on group size.

{
"stateMachine": {
"initialState": "assess_threat",
"states": {
"assess_threat": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.set_variable('player_count', q.entities_in_range(30.0));"}
],
"transitions": [
{
"targetState": "solo_mode",
"condition": "q.variable('player_count') == 1"
},
{
"targetState": "group_mode",
"condition": "q.variable('player_count') >= 2 && q.variable('player_count') <= 4"
},
{
"targetState": "raid_mode",
"condition": "q.variable('player_count') > 4"
}
]
},
"solo_mode": {
"movementController": "titan:fair_combat",
"speedMultiplier": 0.9,
"damageModifier": 0.8,
"aggressionMultiplier": 1.0,
"onEnter": [
{"type": "molang_script", "script": "q.set_max_health(q.user_max_health * 0.7);"}
],
"transitions": [
{
"targetState": "assess_threat",
"condition": "q.time_in_state > 30000",
"minDuration": 30000
}
]
},
"group_mode": {
"movementController": "titan:standard_combat",
"speedMultiplier": 1.0,
"damageModifier": 1.0,
"aggressionMultiplier": 1.2,
"transitions": [
{
"targetState": "assess_threat",
"condition": "q.time_in_state > 30000"
}
]
},
"raid_mode": {
"movementController": "titan:aoe_focused",
"speedMultiplier": 1.2,
"damageModifier": 1.3,
"aggressionMultiplier": 1.5,
"onEnter": [
{"type": "molang_script", "script": "q.set_max_health(q.user_max_health * 1.5);"},
{"type": "molang_script", "script": "q.heal_self(q.user_max_health);"}
],
"transitions": [
{
"targetState": "assess_threat",
"condition": "q.time_in_state > 30000"
}
]
}
}
}
}

Scaling:

  • Solo: -20% damage, -30% HP, slower
  • Group (2-4): Baseline difficulty
  • Raid (5+): +30% damage, +50% HP, faster, AOE focus

Re-assessment: Every 30 seconds


Global transitions override state-specific transitions.

{
"stateMachine": {
"states": { ... },
"globalTransitions": [
{
"targetState": "emergency_heal",
"condition": "q.titan_health_percent < 0.1 && !q.has_variable('emergency_used')",
"priority": 10
},
{
"targetState": "defensive_retreat",
"condition": "q.is_vulnerable('EXHAUSTED')",
"priority": 8
}
]
}
}

Priority:

  • Higher number = higher priority
  • Checked before state transitions
  • Can interrupt any state

Prevent state thrashing.

{
"transitions": [
{
"targetState": "chase",
"condition": "q.target_distance > 12.0",
"minDuration": 3000
// Won't transition until in state for 3s
}
]
}

Use Cases:

  • Prevent rapid state changes
  • Ensure abilities complete
  • Create predictable patterns

Use variables for complex cooldowns.

{
"states": {
"normal_combat": {
"transitions": [
{
"targetState": "special_attack",
"condition": "!q.has_variable('special_used') || q.time_since_variable_set('special_used') > 20000"
}
]
},
"special_attack": {
"onEnter": [
{"type": "molang_script", "script": "q.set_variable('special_used', q.current_time());"}
],
"transitions": [
{
"targetState": "normal_combat",
"condition": "q.time_in_state > 5000"
}
]
}
}
}

Tracks: Last use time, enforces 20s cooldown


Dynamic onEnter based on conditions.

{
"phase2_aggressive": {
"movementController": "titan:aggressive_pursuit",
"onEnter": [
{
"type": "conditional",
"condition": "q.entities_in_range(8.0) >= 3",
"timeline": [
{"type": "molang_script", "script": "q.broadcast('The titan targets the group!');"},
{"type": "molang_script", "script": "q.set_variable('aoe_mode', true);"}
],
"else_timeline": [
{"type": "molang_script", "script": "q.set_variable('aoe_mode', false);"}
]
}
]
}
}

Maintain optimal distance, circle when close.

{
"movementController": {
"type": "tactical_positioning",
"preferredDistance": 8.0,
"minDistance": 4.0,
"maxDistance": 12.0,
"circleWhenClose": true,
"retreatWhenFar": false
}
}

Behavior:

  • Target 8 blocks away
  • Circle if <4 blocks
  • Chase if >12 blocks

Dash in, attack, dash out.

{
"movementController": {
"type": "hit_and_run",
"dashInDistance": 15.0,
"attackDuration": 2000,
"dashOutDistance": 10.0,
"retreatDuration": 3000
}
}

Cycle:

  1. Dash toward target (15 blocks)
  2. Attack for 2 seconds
  3. Dash away (10 blocks)
  4. Wait 3 seconds
  5. Repeat

Multi-phase flying boss with complex AI.

{
"stateMachine": {
"initialState": "phase1_ground",
"states": {
"phase1_ground": {
"movementController": "titan:ground_combat",
"speedMultiplier": 1.0,
"aggressionMultiplier": 1.3,
"transitions": [
{
"targetState": "phase1_takeoff",
"condition": "q.time_in_state > 15000"
}
]
},
"phase1_takeoff": {
"movementController": "titan:ascend",
"onEnter": [
{"type": "molang_script", "script": "q.play_animation('fly'); q.fling_self_up(4.0);"}
],
"transitions": [
{
"targetState": "phase1_aerial",
"condition": "q.is_flying"
}
]
},
"phase1_aerial": {
"movementController": "titan:aerial_strafe",
"speedMultiplier": 1.2,
"aggressionMultiplier": 1.0,
"transitions": [
{
"targetState": "phase1_landing",
"condition": "q.time_in_state > 12000"
},
{
"targetState": "phase2_transition",
"condition": "q.titan_health_percent <= 0.66"
}
]
},
"phase1_landing": {
"movementController": "titan:descend",
"transitions": [
{
"targetState": "phase1_ground",
"condition": "q.is_grounded"
}
]
},
"phase2_transition": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.grant_damage_immunity(4000);"},
{"type": "molang_script", "script": "q.broadcast('§6The dragon channels ancient power!');"},
{"type": "pause", "pause": 2.0},
{"type": "molang_script", "script": "q.particle_sphere('minecraft:dragon_breath', 300, 15.0);"},
{"type": "molang_script", "script": "q.heal_self(150.0);"}
],
"transitions": [
{
"targetState": "phase2_aggressive_aerial",
"condition": "q.time_in_state > 4000"
}
]
},
"phase2_aggressive_aerial": {
"movementController": "titan:aggressive_aerial",
"speedMultiplier": 1.4,
"aggressionMultiplier": 1.5,
"transitions": [
{
"targetState": "phase2_divebomb",
"condition": "q.time_in_state > 10000"
},
{
"targetState": "phase3_transition",
"condition": "q.titan_health_percent <= 0.33"
}
]
},
"phase2_divebomb": {
"movementController": "titan:dive_attack",
"speedMultiplier": 2.5,
"onEnter": [
{"type": "molang_script", "script": "q.play_sound('entity.ender_dragon.growl', 2.0, 0.7);"}
],
"transitions": [
{
"targetState": "phase2_impact",
"condition": "q.is_grounded"
}
]
},
"phase2_impact": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.damage_and_knockback(35.0, 4.0, 12.0, 'EXPLOSION', 'AWAY');"},
{"type": "molang_script", "script": "q.create_safe_explosion(q.user_position.x, q.user_position.y, q.user_position.z, 5.0);"},
{"type": "molang_script", "script": "q.screen_shake(0.8, 30);"},
{"type": "molang_script", "script": "q.set_vulnerable('EXHAUSTED', 6000);"}
],
"transitions": [
{
"targetState": "phase2_grounded_vulnerable",
"condition": "q.time_in_state > 1000"
}
]
},
"phase2_grounded_vulnerable": {
"movementController": "titan:retreat",
"speedMultiplier": 0.8,
"aggressionMultiplier": 0.3,
"transitions": [
{
"targetState": "phase2_takeoff",
"condition": "!q.is_vulnerable()"
}
]
},
"phase2_takeoff": {
"movementController": "titan:ascend",
"transitions": [
{
"targetState": "phase2_aggressive_aerial",
"condition": "q.is_flying"
}
]
},
"phase3_transition": {
"movementController": "titan:stationary",
"onEnter": [
{"type": "molang_script", "script": "q.grant_damage_immunity(5000);"},
{"type": "molang_script", "script": "q.broadcast('§4The dragon enters a primal rage!');"},
{"type": "molang_script", "script": "q.set_variable('enraged', true);"},
{"type": "pause", "pause": 3.0},
{"type": "molang_script", "script": "q.particle_sphere('minecraft:angry_villager', 500, 20.0);"},
{"type": "molang_script", "script": "q.screen_shake(1.0, 50);"}
],
"transitions": [
{
"targetState": "phase3_berserker",
"condition": "q.time_in_state > 5000"
}
]
},
"phase3_berserker": {
"movementController": "titan:berserker_aerial",
"speedMultiplier": 1.6,
"damageModifier": 1.4,
"aggressionMultiplier": 2.0,
"transitions": []
}
},
"globalTransitions": [
{
"targetState": "emergency_heal",
"condition": "q.titan_health_percent < 0.05 && !q.has_variable('emergency_used')",
"priority": 10
}
]
}
}

Build intelligent, adaptive boss AI! 🧠