CustomMonsterVisual.xml

Client-side visual overrides for custom monsters and NPCs. Synced to each client via GameDataSync at login. Only entries listed here get custom visuals; all other monsters use the client's hardcoded defaults.

File Location#

Data/Plugins/World/CustomMonsterVisual.xml

Loaded once at GameServer startup. Supports hot reload via plugin admin command.

Schema#

<CustomMonsterVisuals>
    <Monster Id="..." Type="..." Name="..." Folder="..." BMD="..." Size="..."
             ActionIdle="..." ActionIdle2="..." ActionWalk="..."
             ActionAttack1="..." ActionAttack2="..." ActionShock="..." ActionDie="..."
             IdleSpeed="..." WalkSpeed="..." AttackSpeed="..." ShockSpeed="..." DieSpeed="..."
             MoveSpeed="..." />
</CustomMonsterVisuals>

All animation attributes are optional — omit them entirely for a BMD that already uses the standard monster animation order.

Attributes#

AttributeTypeEffect
IdintMonster ID (matches Index in Monster.xml). Negative values are skipped on load
Type0 or 10 = Monster, 1 = NPC. Values above 1 clamp to 0
NamestringDisplay name shown to clients. Truncated to 31 characters
Folder0-3Where the client loads the BMD model from. See Folder values. Values above 3 clamp to 0
BMDstringFilename without .bmd extension (e.g. BullFighter). Truncated to 31 characters
SizefloatModel scale. 0 = use the client default, 1.0 = natural scale, 0.5 = half, 2.0 = double

Folder Values#

ValueLocation
0Data\Monster (stock monster models)
1Data\NPC (stock NPC models)
2Data\Custom\Monster (custom monster models)
3Data\Custom\NPC (custom NPC models)

Animation Remap#

The client always plays a fixed animation slot per situation: slot 0 while standing, slot 2 while moving, slots 3/4 when attacking, slot 5 when hit, slot 6 on death. A BMD exported from another tool or game version often stores its animations in a different order — that mismatch is what makes a custom monster freeze, slide, or play the wrong animation. These attributes tell the client which animation inside your BMD to use for each situation.

Default for every attribute is -1: keep whatever animation the BMD has at that slot. Any slot the BMD cannot fill (missing or unmapped) automatically falls back to the idle animation, so a model with only two or three animations still idles, walks and attacks without freezing.

AttributePlays when
ActionIdleStanding still
ActionIdle2Secondary idle variation (rare; falls back to ActionIdle)
ActionWalkMoving
ActionAttack1Primary attack
ActionAttack2Secondary attack
ActionShockTaking a hit
ActionDieDying

Glow Overlay#

Renders the golden-monster metal/chrome shine (the effect Golden Budge Dragon and the golden invasion monsters use) on any monster, in any color — for custom "golden", "cursed", "frozen" etc. variants.

AttributeDefaultEffect
Glow01 = enable the shine overlay. Also enabled implicitly by supplying any GlowR/GlowG/GlowB
GlowR / GlowG / GlowB1.0Overlay color components, 0.0–1.0

Color ideas: 1.00/1.00/0.97 classic golden · 0.78/0.08/0.52 cursed magenta · 1.00/0.00/0.00 blood red · 0.30/0.80/1.00 frozen blue.

Animation Speeds#

All optional; 0 (or omitted) = the client's stock defaults.

AttributeDefaultEffect
IdleSpeed0.25Idle animation playback speed
WalkSpeed0.34Walk animation playback speed. Stock monsters range 0.18–1.2. Raise it if the feet slide behind the movement ("skating"), lower it if the feet outrun the ground
AttackSpeed0.33Attack animation playback speed
ShockSpeed0.5Hit-reaction playback speed
DieSpeed0.55Death animation playback speed
MoveSpeedclient defaultHow fast the monster physically moves between grid cells (stock monsters use roughly 15–30). Tune together with WalkSpeed to eliminate skating

Cross-File Dependencies#

AttributeRelated in
IdMonster.xml
Id (for NPCs)MapManager.xml NPC spawn entries
Folder + BMDClient asset at the specified client-side path
Sync channelGameDataSync at login

Example#

A boss model whose BMD stores its animations as 0=die, 1=idle, 2=attack, 3=walk, with a slower walk and matching movement speed:

<Monster Id="501" Type="0" Name="Reordered Boss" Folder="2" BMD="ReorderedBoss" Size="1.2"
         ActionIdle="1" ActionWalk="3" ActionAttack1="2" ActionAttack2="2" ActionDie="0"
         WalkSpeed="0.28" MoveSpeed="22" />

A "cursed" variant of a stock monster with a magenta golden-style shine:

<Monster Id="502" Type="0" Name="Cursed Knight" Folder="2" BMD="CursedKnight" Size="1.0"
         GlowR="0.78" GlowG="0.08" GlowB="0.52" />

Common Issues#

  • Custom monster invisible - client does not ship the BMD file at the Folder path; either add to client assets or use a stock Folder=0/1 model
  • Monster frozen (no idle, no walk) - the BMD's animations are not in the standard order, so the client is playing an empty/one-frame slot; set the Action* remap attributes
  • Monster slides/skates while moving - walk animation speed does not match movement speed; tune WalkSpeed (and MoveSpeed) — raise WalkSpeed if the feet lag behind, lower it if they outrun the ground
  • Attacks look sluggish - raise AttackSpeed (stock default 0.33)
  • Wrong animation plays for walk/attack - the BMD stores animations in a different order; map the correct indices with ActionWalk/ActionAttack1/etc.
  • BMD loads for some files but not others - the client supports BMD versions 0x0A (plain) and 0x0C (encrypted); newer-season 0x0F files will not load — re-export/convert them
  • Monster name unchanged - Name attribute empty or omitted
  • Scale too small to select - Size below ~0.3 makes the target selector miss; raise to at least 0.5
  • Players see stock visuals after hot reload - visuals sync at login; existing sessions stay on the old version until relog; the model itself also loads once per client session
  • NPC renders as monster - Type="0" on an NPC entry; set to 1

Last updated August 2, 2026