ItemPageEffects.xml

Fine-grained visual overrides for individual mesh pages of a custom item model. This is a sparse layer on top of the per-item BlendMesh value in CustomItemVisual.xml: use it only for the edge-case items (in practice, specific wings and weapons with animated effect meshes) where one BlendMesh value cannot express what you want - for example page 1 glowing blue and scrolling, page 2 a smaller static white glow, and every other page solid. Pages can also carry geometric animation: a continuous spin and/or a back-and-forth bob, for effect meshes that rotate in place on the original model (a bow-tip orb, a floating crystal).

The file is optional. If it is absent or malformed, no page overrides are applied and the server keeps running. The server sends the whole table to the client at login; the client does the rendering.

File Location#

Data/Item/ItemPageEffects.xml

Loaded once at GameServer startup.

Dependencies#

  • Layers on top of the BlendMesh attribute in CustomItemVisual.xml. See the layering rules below.
  • Type / Index identify the item, matching Item.xml.
  • Delivered to the client at login. A player who is already online needs to re-login to receive changes.

Configuration#

One <Page> row configures one mesh page of one item.

<ItemPageEffects>
    <Page Type="12" Index="267" Page="1" R="40" G="90" B="255" Scale="1.0" Animate="1" Speed="0.5" />
    <Page Type="4" Index="34" Page="2" R="60" G="140" B="255" Animate="1"
          SpinAxis="Z" SpinSpeed="180" OscAxis="Y" OscAmp="5" OscHz="0.8" />
    <Page Type="12" Index="267" Page="0" Cloth="1" ClothBone="19" ClothFlags="Curved|ShortShoulder|Heavy" />
</ItemPageEffects>

Glow attributes#

AttributeTypeRangeDefaultEffect
Typeint0-15-Item category. Wings = 12
Indexint0-511-Sub-index within the category (the item)
Pageint0+0Mesh page index inside the item's model (0, 1, 2, ...). This is the page the row affects
R / G / Bint0-255255Additive color tint of the glow. 255/255/255 = untinted, 40/90/255 = blue glow
Scalefloat0+1.0Per-page geometry scale around the page origin. 1.0 = unchanged, 0.5 = half size, 2.0 = double. Use for pages that import too large
Animateint0-111 = the additive glow scrolls, 0 = static additive glow
Speedfloat0+0Scroll speed multiplier when Animate="1". 1.0 = original speed, 0.25 = slower. 0 = fall back to the item's EffectSpeed default
UVModestringV / U / BothVWhich texture axes the Animate scroll moves along. V = vertical (the classic glow scroll), U = horizontal, Both = diagonal

Geometric animation attributes#

Optional per page: spin the page continuously and/or bob it back and forth. Both motions happen around the page's own centre, in the item's local frame (the X/Y/Z of the model itself, not world axes), so the effect stays glued to the weapon through every character animation. Combine freely with the glow attributes - a spinning page can still be tinted and scroll its texture.

AttributeTypeRangeDefaultEffect
SpinAxisstringX / Y / Z(off)Axis the page rotates around, in the item's local frame. Omit for no spin
SpinSpeedfloatany0Rotation speed in degrees per second. 180 = half turn per second, 360 = one full turn per second. Negative reverses direction
OscAxisstringX / Y / Z(off)Axis the page bobs (oscillates) along, in the item's local frame. Omit for no bob
OscAmpfloat0+0Bob distance in model units - the peak offset from the rest position, so total travel is twice this
OscHzfloat0+1.0Bob speed in full cycles per second. 0.5 = one full back-and-forth every 2 seconds
OscPhasefloat0-3600Phase offset in degrees. Give two bobbing pages different phases so they do not move in lockstep

Cloth-cape attributes (wings only)#

Setting Cloth="1" replaces that page with a draping cape sheet instead of rigid geometry. The page is rendered as a procedural cloth sheet - the same simulator every vanilla Dark Lord and Rage Fighter cape uses - hung from the player's back and wearing that page's texture. The other pages of the wing keep rendering solid. It is not the page's exact geometry, it is a simulated sheet carrying the page's texture, which is what actually reads as a cape.

AttributeTypeDefaultEffect
Clothint01 = render this page as a draping cape sheet. A cloth page ignores R / G / B / Animate / Scale
ClothBoneint0Player back bone the cape hangs from. 19 is the standard cape bone and is used when this is left 0 or -1. Try 17 / 18 / 20 to raise or lower the attachment
ClothFlagsstring(empty)Physics and look tuning, pipe-separated tokens (see below). Empty applies the client's default cloth tuning

ClothFlags tokens (combine one from each group with |):

GroupTokensNotes
ShapeFlat, Curved, StickedOverall drape shape
SpreadShapeNormal, ShortShoulder, CylinderWidth across the shoulders
ElasticCotton, Rubber, Rubber2Rubber / Rubber2 add more wind sway
WeightNormalThickness, HeavyHeavy hangs lower
DrawMaskAlpha, MaskBlend, MaskLightMaskAlpha if the texture has transparency; MaskLight draws the sheet as additive light

Collision is automatic (standard cape collision spheres).

Important Behavior#

  • Layering with BlendMesh. An item with no <Page> rows here keeps using its CustomItemVisual.xml BlendMesh value (the majority of items - leave them alone). An item with one or more <Page> rows here: those rows become authoritative for that item. Each listed page renders additive with its own tint, scroll, and scale; every page not listed renders solid; the item's BlendMesh is ignored.
  • BMD path only. Page overrides go through the normal model render path, so they only affect items drawn as a regular model. They do not apply to capes on the RenderAs="cape_cloth" procedural-cloth path in CustomItemVisual.xml.
  • Geometric animation follows the item. Spin and bob run in the item's local frame around the page's own centre, so the motion tracks the weapon through walking, attacking, and mounting. The animation is time-based and frame-rate independent; every player sees the same phase.
  • Finding the page. Count the mesh pages in the item's model to find the right Page; the glow page is usually the last one.
  • Optional file. A missing or malformed file syncs nothing and does not raise an error.

Common Issues#

  • A page override does nothing - the item has a <Page> row, but not for the page you expected. Remember that once any row exists for an item, unlisted pages render solid and BlendMesh is ignored.
  • Whole item went solid after adding one row - that is the layering rule. List every page you want additive, not just the new one.
  • The page spins in the wrong plane - the axes are the model's local frame and differ per asset. Cycle SpinAxis through X / Y / Z; same for OscAxis.
  • The whole page orbits instead of spinning in place - the row is probably targeting the wrong Page; the rotation pivot is the centre of the page you configured, so a row aimed at a large combined page swings everything around its combined centre.
  • Cloth page shows no cape - Cloth only works on wing items rendered as a regular model, not on items using RenderAs="cape_cloth". Check the page index and the texture on that page.
  • Cloth cape sits too high or too low - adjust ClothBone (17 / 18 / 20) rather than the flags.
  • Change not visible in game - the table is sent at login; re-login to pick it up.

Last updated July 30, 2026