Complex State Machines
Complex State Machines
Section titled “Complex State Machines”Build sophisticated titan AI with multi-state behavior trees, conditional transitions, and dynamic decision making.
Advanced State Machine Patterns
Section titled “Advanced State Machine Patterns”Multi-Range Combat
Section titled “Multi-Range Combat”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
Health-Based Phases with State Changes
Section titled “Health-Based Phases with State Changes”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
Vulnerability-Reactive AI
Section titled “Vulnerability-Reactive AI”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
Time-Based Enrage
Section titled “Time-Based Enrage”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
Flying vs Grounded Modes
Section titled “Flying vs Grounded Modes”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:
- Takeoff → Aerial combat (8-12s)
- Divebomb → Ground impact
- Grounded combat (10s) while vulnerable
- Repeat
Player Count Adaptation
Section titled “Player Count Adaptation”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
Advanced Transition Techniques
Section titled “Advanced Transition Techniques”Priority Transitions
Section titled “Priority Transitions”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
Minimum Duration Enforcement
Section titled “Minimum Duration Enforcement”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
Cooldown-Based Transitions
Section titled “Cooldown-Based Transitions”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
Conditional Entry Actions
Section titled “Conditional Entry Actions”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);"} ] } ] }}Movement Controller Customization
Section titled “Movement Controller Customization”Custom Controller: Tactical Positioning
Section titled “Custom Controller: Tactical Positioning”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
Custom Controller: Hit and Run
Section titled “Custom Controller: Hit and Run”Dash in, attack, dash out.
{ "movementController": { "type": "hit_and_run", "dashInDistance": 15.0, "attackDuration": 2000, "dashOutDistance": 10.0, "retreatDuration": 3000 }}Cycle:
- Dash toward target (15 blocks)
- Attack for 2 seconds
- Dash away (10 blocks)
- Wait 3 seconds
- Repeat
Complete Example: Dragon Titan
Section titled “Complete Example: Dragon Titan”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 } ] }}Next Steps
Section titled “Next Steps”- State Machines → - State machine basics
- Fight Config Builder → - Visual state editor
- MoLang Reference → - Query functions
Build intelligent, adaptive boss AI! 🧠