Skip to content

Configuration Overview

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

Breaking Change

Old System: Monolithic configs with all data embedded

New System: Modular configs with references to separate files

  • Reusability - Share moves/phases across multiple Titans
  • Organization - Separate concerns into logical files
  • Maintainability - Update one move set, affect multiple Titans
  • Flexibility - Mix and match components
  • Directoryserver/
    • Directoryconfig/titan/
      • Directoryfights/ Fight manifests (references)
        • charizard.json
        • raichu.json
        • ceruledge.json
        • (33 total)
      • Directorymoves/ Move set definitions
        • charizard.json
        • raichu.json
        • ceruledge.json
        • core.json (shared moves)
        • default_titan.json
        • index.json
      • Directoryphases/ Phase configurations
        • charizard.json
        • raichu.json
        • ceruledge.json
        • default_titan.json (generic 3-phase)
        • index.json
      • Directorybehaviour/ Behaviour configs (optional)
        • default.json
        • raichu.json
        • index.json
    • Directoryworld/datapacks/your_pack/data/titan/
      • Directoryaction_effects/ ActionEffect timelines
        • charizard_inferno_blaze.json
        • raichu_gigavolt_havoc.json
        • ceruledge_armor_oblivion.json
        • (100+ effects)
    • Directorymods/
      • titan-x.x.x.jar

1. Fight Manifests (config/titan/fights/*.json)

Section titled “1. Fight Manifests (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:

  • Creating new Titan variant
  • Changing which configs to use
  • Swapping move/phase/behaviour sets

See: Fight Configurations →

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:

  • Adding new moves
  • Adjusting damage/cooldowns
  • Changing move weights
  • Modifying health availability ranges

See: Move Sets →

3. Phase Sets (config/titan/phases/*.json)

Section titled “3. Phase 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:

  • Adjusting health thresholds
  • Modifying stat modifiers (speed/damage/scale)
  • Changing move pools per phase
  • Configuring movement patterns
  • Adding phase scripts

See: Phases →

4. Behaviour Configs (config/titan/behaviour/*.json)

Section titled “4. Behaviour Configs (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:

  • Setting default movement controller
  • Configuring base aggression
  • Adding state machines (advanced)

Default: If omitted, uses default.json (STANDARD movement, 1.0 aggression)

See: Movement Controllers →

5. ActionEffect Timelines (world/datapacks/your_pack/data/titan/action_effects/*.json)

Section titled “5. ActionEffect Timelines (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:

  • Creating new custom moves
  • Adjusting attack timing
  • Changing OBB shapes/sizes
  • Modifying telegraph duration
  • Tweaking vulnerability windows
  • Updating MoLang scripts

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
  1. Fight Manifest loaded when Titan created (/titan create)
  2. Move Set loaded from moveSet ID
  3. Phase Set loaded from phaseSet ID
  4. Behaviour loaded from behaviour ID (or default)
  5. TitanFightManager assembles complete configuration
  6. TitanComponent orchestrates runtime behavior
  7. ActionEffects loaded on-demand when moves execute
  1. Install Titan - Place JAR in mods/
  2. Start Server - Configs auto-generate in config/titan/
  3. Test Default - Try pre-configured Titans
  4. Customize - Edit configs for your server

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:

  1. Keep server running
  2. Edit config file(s)
  3. Run /titan reload
  4. Spawn new Titan to test
  5. Repeat

Tip: 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:

fights/machamp.json
{
"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:

  1. Copy core.jsoncustom_melee.json
  2. Add custom moves to custom_melee.json
  3. Reference "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:

  1. Data packs (highest priority)
  2. Mod resources (fallback)

To override default ActionEffects:

  1. Extract from JAR if needed
  2. Place in data pack: world/datapacks/your_pack/data/titan/action_effects/
  3. Edit as needed
  4. Reload: /titan reload

Titan includes 33 pre-configured Titans:

  • Charizard, Raichu, Ceruledge, Mewtwo, Gyarados
  • Gengar, Dragonite, Rayquaza, Lucario, Pikachu
  • Alakazam, Blastoise

Each with:

  • 10-15 custom moves
  • 3 phases with movement overrides
  • Cobblemon snowstorm particles
  • Complete ActionEffect timelines
  • Movement controller progression
  • Articuno, Salamence, Garchomp, Arcanine, Raikou
  • And 16 more…

Each with:

  • Basic move definitions
  • 3 phases with default progression
  • Standard ActionEffects

Edit move sets:

  • Change damage values
  • Adjust cooldowns
  • Modify move weights
  • Tweak health ranges

No ActionEffect editing needed.

Edit phase sets:

  • Add/remove moves from phases
  • Change movement patterns
  • Adjust stat modifiers
  • Add phase scripts

Uses existing ActionEffects.

Level 3: Movement Patterns (Medium-Advanced)

Section titled “Level 3: Movement Patterns (Medium-Advanced)”

Edit phase sets with movementOverrides:

  • Configure teleport parameters
  • Adjust hit-and-run timing
  • Tune kiting distances
  • Set flying controller behavior

See: Movement Controllers →

Create new attack timelines:

  • Design OBB hitboxes
  • Set telegraph timings
  • Configure vulnerability windows
  • Write MoLang scripts
  • Add Cobblemon particles

Requires ActionEffect & MoLang knowledge.

See: Server MoLang →

Build complex AI behavior in behaviour configs:

  • Define custom states
  • Create transitions
  • Write MoLang conditions
  • Design multi-state patterns

Requires advanced MoLang scripting.

See: State Machines →

Terminal window
# Backup all Titan configs
cp -r config/titan config/titan.backup
# Backup data pack
cp -r world/datapacks/your_pack world/datapacks/your_pack.backup

Recommended for servers:

Terminal window
git init
git 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:

  • Run /titan reload after editing
  • Check logs for JSON errors
  • Verify file is in correct location (config/titan/)
  • Ensure JSON is valid (use validator)
  • Check referenced IDs exist (moveSet, phaseSet, behaviour)

Symptoms: ERROR: Move set 'raichu' not found

Fixes:

  • Verify file exists at config/titan/moves/raichu.json
  • Check ID matches exactly (case-sensitive)
  • Ensure JSON is valid
  • Check file extension is .json

Symptoms: ERROR: ActionEffect 'titan:move_name' not found

Fixes:

  • Check actionEffect value in move config
  • Verify file exists at world/datapacks/your_pack/data/titan/action_effects/move_name.json
  • Ensure file extension is .json
  • Check data pack is loaded

Symptoms: Existing Titans keep old behavior

Fixes:

  • Spawn fresh Titan after /titan reload
  • Existing Titans cache old config
  • Remove and respawn to test changes

Symptoms: ERROR: Failed to parse titan config

Fixes:

  • Check for missing commas
  • Verify bracket matching
  • Remove trailing commas
  • Use JSON validator online
  • Check quotes (double quotes ", not single ')

Fight Configs: pokemon_name.json

charizard.json
raichu.json
ceruledge.json
vulpix_alolan_true.json

Move Sets: Match fight name

charizard.json
raichu.json

Phase Sets: Match fight name

charizard.json
raichu.json

ActionEffects: pokemon_move_name.json

raichu_gigavolt_havoc.json
ceruledge_armor_oblivion.json
raichu_thunderstrike.json

Keep related configs together:

  • fights/raichu.jsonmoves/raichu.jsonphases/raichu.jsonbehaviour/raichu.json

Use 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 moves
  • default_titan.json - Standard phases
  • default.json - Standard behaviour

Reference 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

Phase Sets

Configure multi-phase progression

Phases →


Master the modular config system to build reusable, composable boss fights!