Skip to content

WorldData

VersionStatus
v92Full
v90-
v86-

WorldData is a singleton configuration file — unlike entity catalogs (Items, NPCs, Skills), there are no entity IDs. Instead, the file contains 5 domain sections that control global game parameters: combat formulas, stat tables, economy rules, class balance multipliers, and level-dependent adjustment curves. Each section maps to a separate DSL section and entity handler. All data resides in a single WorldData.xml.


SectionPurposeOperationsReference
combatConfigCombat formulas: aggro, critical, attack/defense adjustments, super armor, reactionupdateCombat Config
statConfigAttack speed per class, stat-by-level tables, NPC impact/balanceupdate, CRUDStat Config
economyConfigTax, trade broker, dropped items, death penalties, revival, movementupdate, CRUDEconomy Config
classConfigHeal/drain/defense multipliers per class, HP/MP/ST bonuses, party EXP, damage distributionupdate, CRUDClass Config
levelAdjustLevel-based damage/critical curves, EXP scaling, per-class balance, skill advantageupdate, CRUDLevel Adjust

File organization: SingleFile — all entities share WorldData.xml


combatConfig:
aggro:
returnDistance: 1200
targetChangeAggroGap: 1.2
critical:
damageRate: 2.0
statConfig:
statByLevel:
create:
- level: 70
expNeeded: 999999999
antiReactionAdjForGrade: 53
economyConfig:
death:
delRateCustomizeItem: 0.1
conditionPenalty:
create:
- pcLevelOver: 11
pcLevelUnder: 65
conditionPenalty: 100
classConfig:
healAdjust:
warrior: 1.0
priest: 1.5
damageAdjust:
create:
- targetCount: 1
normalAtk: 1.0
pierceAtk: 1.0

WorldData.xml
└── WorldData (root)
├── Aggro ← combatConfig
├── Critical
├── Atk
├── Def
├── PhysicalAttack
├── MagicalAttack
├── PhysicalDefence
├── MagicalDefence
├── DamageFormula
├── SuperArmor
├── SkillDamageTypeConstant
├── CostDefence
├── ReactionAdjust
├── UserCombatStatus
├── UserLevelLimit ← statConfig
├── StandardAttackSpeed
├── StatByLevel
│ └── Stat [multiple]
├── NpcImpact
│ └── Impact [multiple]
├── NpcBalance
│ └── Balance [multiple]
├── Tax ← economyConfig
├── TradeBroker
├── DroppedItem
│ └── Exception [multiple]
├── Death
│ └── ConditionPenalty [multiple]
├── Revival
├── MoveConfig
├── HealAdjust ← classConfig
├── MagicalHealAdjust
├── DrainMpSpread
├── DefenceDamageAdjust
├── HpBonusAdjust
├── MpBonusAdjust
├── StBonusAdjust
├── BonusExp
│ └── BonusExpEntry [multiple]
├── DamageAdjust
│ └── DamageAdjustEntry [multiple]
├── Damage ← levelAdjust
│ ├── StrongEnemy
│ ├── StrongEnemyLightParty
│ ├── StrongEnemySolo
│ └── WeakEnemy
├── Critical (level)
│ ├── StrongEnemy
│ ├── StrongEnemyLightParty
│ ├── StrongEnemySolo
│ └── WeakEnemy
├── LevelBalanceAdjust
│ └── {Class} [per class]
│ └── Adjust [multiple]
├── Exp
│ └── WeakEnemy [multiple]
├── ExpParty
│ ├── WeakEnemy [multiple]
│ └── HighestPartyMember [multiple]
├── ExpLevelPenalty
│ └── Penalty [multiple]
└── MaxSkillAtkAdvantage

  • Singleton file, no entity IDs: WorldData has no id attribute on any root element. All 5 DSL sections modify the same WorldData.xml. You cannot create or delete top-level sections — only update flat properties and create/update/delete child entries within CRUD sub-sections.

  • Dual semantics — update vs. CRUD: Root-level sections (e.g., aggro, tax, moveConfig) use flat update semantics. Sub-sections with child entries (e.g., statByLevel, conditionPenalty, damageAdjust) use standard create/update/delete operations on keyed entries.

  • Composite keys on CRUD entries: Several CRUD tables use composite keys: conditionPenalty (pcLevelOver + pcLevelUnder), levelBalanceAdjust (class + minLevel + maxLevel), expLevelPenalty (pcLowLevel + pcHighLevel + enemyLowLevel + enemyHighLevel). Deletes must specify all key fields.

  • Class-keyed dictionary: levelBalanceAdjust is keyed by class name string (e.g., warrior, priest). Each class has its own independent CRUD section.