Key Change
Old System: Monolithic configs with all data embedded
New System: Modular configs with references to separate files
Titan uses a modular configuration system where fight configs reference separate move sets, phase sets, and behaviour configs. This allows for powerful reusability and composition.
Key Change
Old System: Monolithic configs with all data embedded
New System: Modular configs with references to separate files
config/titan/fights/*.json)Location: config/titan/fights/
Format: JSON
Purpose: Reference other config files
Fight manifests are lightweight references that link to move sets, phase sets, and behaviours:
{ "_comment": "Titan Raichu Boss Fight - Electric powerhouse", "pokemonProperties": "raichu", "name": "Storm Surge Titan Raichu", "moveSet": "raichu", // ← References config/titan/moves/raichu.json "phaseSet": "raichu", // ← References config/titan/phases/raichu.json "behaviour": "raichu" // ← References config/titan/behaviour/raichu.json}When to Edit:
config/titan/moves/*.json)Location: config/titan/moves/
Format: JSON
Purpose: Define all moves available to a Titan
Move sets contain move definitions and selection strategy:
{ "moves": { "thunderstrike": { "name": "Thunderstrike", "cooldown": "120", "range": "10.0", "damage": "42.0", "damageType": "ELECTRIC", "actionEffect": "titan:raichu_thunderstrike", "condition": "true", "weight": 1.4, "minHealthPercent": 0.5, "maxHealthPercent": 1.0, "phase": -1 }, // ... 14 more moves }, "selectionStrategy": "WEIGHTED_RANDOM"}When to Edit:
See: Move Sets →
config/titan/phases/*.json)Location: config/titan/phases/
Format: JSON
Purpose: Define health-based progression
Phase sets configure health thresholds, stat modifiers, and movement:
{ "phases": [ { "healthThreshold": 1.0, "moves": ["storm_call", "thunderstrike", "chain_lightning"], "speedModifier": 1.15, "damageModifier": 1.0, "scaleModifier": 1.1, "movementPattern": "KITING", "aggressionLevel": 1.2, "onEnterScript": "q.titan.apply_potion('minecraft:speed', 999999, 0);", "onExitScript": "q.titan.remove_potion('minecraft:speed');" }, { "healthThreshold": 0.6, "moves": ["storm_surge", "electroweb", "thunder_cage"], "speedModifier": 1.28, "damageModifier": 1.2, "scaleModifier": 1.15, "movementPattern": "TELEPORT", "aggressionLevel": 1.5, "movementOverrides": { "teleport": { "minRange": 4.0, "maxRange": 8.0, "radialCandidates": 10, "heightVariance": 2.5, "cooldownMs": 12000 } } }, // Phase 3... ]}When to Edit:
See: Phases →
config/titan/behaviour/*.json)Location: config/titan/behaviour/
Format: JSON
Purpose: Default movement pattern and aggression (optional)
Behaviour configs set baseline AI parameters:
{ "movementPattern": "TELEPORT", "aggressionLevel": 1.35}When to Edit:
Default: If omitted, uses default.json (STANDARD movement, 1.0 aggression)
world/datapacks/your_pack/data/titan/action_effects/*.json)Location: world/datapacks/your_pack/data/titan/action_effects/
Format: JSON (Cobblemon ActionEffect format)
Purpose: Define attack animations and damage timelines
ActionEffects are referenced by move sets’ actionEffect property:
{ "timeline": [ {"type": "add_holds", "holds": ["effects"]}, {"type": "stop_movement", "duration": "2000"}, {"type": "define_obb", "name": "attack_area", ...}, {"type": "telegraph_obb", "obbName": "attack_area", ...}, { "type": "server_molang", "expressions": [ "q.play_sound('minecraft:entity.lightning_bolt.thunder', 2.0, 1.0);", "t.pos = q.position(0);", "q.particle_effect('cobblemon:thunder_actorcloud', t.pos, 200, 8.0);" ] }, { "type": "damage_obb", "obbName": "attack_area", "damage": "q.move_damage", "expressions": [ "q.damage_all(q.move_damage);" ] }, {"type": "set_vulnerable", ...}, {"type": "remove_holds", "holds": ["effects"]}, {"type": "pause", "pause": 1.5} ]}When to Edit:
See: Action Effects → | Server MoLang →
graph TD
A[Fight Manifest
fights/raichu.json] --> B[Load moveSet: 'raichu']
A --> C[Load phaseSet: 'raichu']
A --> D[Load behaviour: 'raichu']
B --> E[Move Set
moves/raichu.json]
C --> F[Phase Set
phases/raichu.json]
D --> G[Behaviour
behaviour/raichu.json]
E --> H[TitanFightManager]
F --> H
G --> H
H --> I[TitanComponent
Runtime]
E -.->|actionEffect refs| J[ActionEffect Timelines
world/datapacks/your_pack/data/titan/action_effects/]
J -.-> I
style A fill:#4a9eff
style E fill:#e67e22
style F fill:#e67e22
style G fill:#e67e22
style J fill:#9b59b6
style I fill:#2ecc71
/titan create)moveSet IDphaseSet IDbehaviour ID (or default)mods/config/titan/Option 1: Use Defaults
{ "pokemonProperties": "pidgey", "name": "Sky Titan Pidgey", "moveSet": "core", "phaseSet": "default_titan", "behaviour": "default"}Uses shared configs - no custom files needed!
Option 2: Full Custom
{ "pokemonProperties": "garchomp", "name": "Earthquake Titan Garchomp", "moveSet": "garchomp", "phaseSet": "garchomp", "behaviour": "garchomp"}Create custom move/phase/behaviour files
Option 3: Mix & Match
{ "pokemonProperties": "gengar", "name": "Shadow Titan Gengar", "moveSet": "gengar", "phaseSet": "default_titan", "behaviour": "default"}Custom moves, generic phases/behaviour
graph LR
A[Edit Move Set] --> B[/titan reload]
B --> C[Test Moves]
C --> D{Good?}
D -->|No| A
D -->|Yes| E[Edit Phase Set]
E --> F[/titan reload]
F --> G[Test Phases]
G --> H{Good?}
H -->|No| E
H -->|Yes| I[Edit ActionEffects]
I --> J[/titan reload]
J --> K[Test Attacks]
K --> L{Good?}
L -->|No| I
L -->|Yes| M[Done!]
For fast testing:
/titan reloadTip: Existing Titans keep old config. Spawn fresh ones to test changes.
Multiple Titans can share the core move set:
config/titan/moves/core.json:
{ "moves": { "generic_slash": { "name": "Titan Slash", "cooldown": "100", "range": "5.0", "damage": "10.0", "damageType": "PHYSICAL", "actionEffect": "titan:generic_slash", "weight": 1.0 }, "titan_roar": { ... } }, "selectionStrategy": "WEIGHTED_RANDOM"}Usage in multiple fights:
{ "pokemonProperties": "machamp", "moveSet": "core" // ← Shared moves}
// fights/primeape.json{ "pokemonProperties": "primeape", "moveSet": "core" // ← Same moves}The default_titan phase set provides a generic 3-phase progression:
{ "pokemonProperties": "snorlax", "moveSet": "snorlax", "phaseSet": "default_titan", // ← Generic phases "behaviour": "default"}You can’t directly extend configs, but you can copy and modify:
core.json → custom_melee.jsoncustom_melee.json"moveSet": "custom_melee"Fight configs match by pokemonProperties:
// Most specific (form + level)"pokemonProperties": "charizard form=mega_x level=80+"
// Medium specific (form only)"pokemonProperties": "charizard form=mega_x"
// Least specific (species only)"pokemonProperties": "charizard"Titan uses the most specific match.
ActionEffects load from:
To override default ActionEffects:
world/datapacks/your_pack/data/titan/action_effects//titan reloadTitan includes 33 pre-configured Titans:
Each with:
Each with:
Edit move sets:
No ActionEffect editing needed.
Edit phase sets:
Uses existing ActionEffects.
Edit phase sets with movementOverrides:
Create new attack timelines:
Requires ActionEffect & MoLang knowledge.
See: Server MoLang →
Build complex AI behavior in behaviour configs:
Requires advanced MoLang scripting.
See: State Machines →
# Backup all Titan configscp -r config/titan config/titan.backup
# Backup data packcp -r world/datapacks/your_pack world/datapacks/your_pack.backupRecommended for servers:
git initgit add config/titan/git add world/datapacks/your_pack/data/titan/git commit -m "Initial Titan configs"Track changes over time for easy rollback.
Symptoms: Changes don’t apply in-game
Fixes:
/titan reload after editingconfig/titan/)Symptoms: ERROR: Move set 'raichu' not found
Fixes:
config/titan/moves/raichu.json.jsonSymptoms: ERROR: ActionEffect 'titan:move_name' not found
Fixes:
actionEffect value in move configworld/datapacks/your_pack/data/titan/action_effects/move_name.json.jsonSymptoms: Existing Titans keep old behavior
Fixes:
/titan reloadSymptoms: ERROR: Failed to parse titan config
Fixes:
", not single ')Fight Configs: pokemon_name.json
charizard.jsonraichu.jsonceruledge.jsonvulpix_alolan_true.jsonMove Sets: Match fight name
charizard.jsonraichu.jsonPhase Sets: Match fight name
charizard.jsonraichu.jsonActionEffects: pokemon_move_name.json
raichu_gigavolt_havoc.jsonceruledge_armor_oblivion.jsonraichu_thunderstrike.jsonKeep related configs together:
fights/raichu.json → moves/raichu.json → phases/raichu.json → behaviour/raichu.jsonUse descriptive comments:
{ "_comment": "Titan Raichu v3.0 - Rebalanced for 4-player groups", "_author": "YourName", "_last_updated": "2025-10-18", "pokemonProperties": "raichu", ...}Create shared configs:
core.json - Generic movesdefault_titan.json - Standard phasesdefault.json - Standard behaviourReference in multiple fights for consistency.
{ "pokemonProperties": "charizard", "name": "Inferno Titan Charizard", "moves": { /* all moves embedded */ }, "phases": [ /* all phases embedded */ ], "selectionStrategy": "WEIGHTED_RANDOM"}fights/charizard.json:
{ "pokemonProperties": "charizard", "name": "Inferno Titan Charizard", "moveSet": "charizard", "phaseSet": "charizard", "behaviour": "charizard"}moves/charizard.json: (moves object + strategy)
phases/charizard.json: (phases array)
behaviour/charizard.json: (movement + aggression)
See: Fight Configurations → for migration details
Fight Manifests
Learn the new manifest format
Move Sets
Define moves with 15 properties
Phase Sets
Configure multi-phase progression
Interactive Builder
Visual config editor
Master the modular config system to build reusable, composable boss fights!