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
BlendMeshattribute in CustomItemVisual.xml. See the layering rules below. Type/Indexidentify 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#
| Attribute | Type | Range | Default | Effect |
|---|---|---|---|---|
Type | int | 0-15 | - | Item category. Wings = 12 |
Index | int | 0-511 | - | Sub-index within the category (the item) |
Page | int | 0+ | 0 | Mesh page index inside the item's model (0, 1, 2, ...). This is the page the row affects |
R / G / B | int | 0-255 | 255 | Additive color tint of the glow. 255/255/255 = untinted, 40/90/255 = blue glow |
Scale | float | 0+ | 1.0 | Per-page geometry scale around the page origin. 1.0 = unchanged, 0.5 = half size, 2.0 = double. Use for pages that import too large |
Animate | int | 0-1 | 1 | 1 = the additive glow scrolls, 0 = static additive glow |
Speed | float | 0+ | 0 | Scroll speed multiplier when Animate="1". 1.0 = original speed, 0.25 = slower. 0 = fall back to the item's EffectSpeed default |
UVMode | string | V / U / Both | V | Which 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.
| Attribute | Type | Range | Default | Effect |
|---|---|---|---|---|
SpinAxis | string | X / Y / Z | (off) | Axis the page rotates around, in the item's local frame. Omit for no spin |
SpinSpeed | float | any | 0 | Rotation speed in degrees per second. 180 = half turn per second, 360 = one full turn per second. Negative reverses direction |
OscAxis | string | X / Y / Z | (off) | Axis the page bobs (oscillates) along, in the item's local frame. Omit for no bob |
OscAmp | float | 0+ | 0 | Bob distance in model units - the peak offset from the rest position, so total travel is twice this |
OscHz | float | 0+ | 1.0 | Bob speed in full cycles per second. 0.5 = one full back-and-forth every 2 seconds |
OscPhase | float | 0-360 | 0 | Phase 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.
| Attribute | Type | Default | Effect |
|---|---|---|---|
Cloth | int | 0 | 1 = render this page as a draping cape sheet. A cloth page ignores R / G / B / Animate / Scale |
ClothBone | int | 0 | Player 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 |
ClothFlags | string | (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 |):
| Group | Tokens | Notes |
|---|---|---|
| Shape | Flat, Curved, Sticked | Overall drape shape |
| Spread | ShapeNormal, ShortShoulder, Cylinder | Width across the shoulders |
| Elastic | Cotton, Rubber, Rubber2 | Rubber / Rubber2 add more wind sway |
| Weight | NormalThickness, Heavy | Heavy hangs lower |
| Draw | MaskAlpha, MaskBlend, MaskLight | MaskAlpha 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 itsCustomItemVisual.xmlBlendMeshvalue (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'sBlendMeshis 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 andBlendMeshis 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
SpinAxisthroughX/Y/Z; same forOscAxis. - 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 -
Clothonly works on wing items rendered as a regular model, not on items usingRenderAs="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.