> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/data/item/itempageeffects.md).

# ItemPageEffects

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](/docs/data/plugins/customitemvisual.md): use it only for the edge-case items (in practice, specific wings) 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.

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](/docs/data/plugins/customitemvisual.md). See the layering rules below.
* `Type` / `Index` identify the item, matching [Item.xml](/docs/data/item/item.md).
* 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.

{% hint style="info" %}
To find the right `Page` index and inspect a model's pages and animations, open the item's `.bmd` in the [MU Online BMD Viewer](https://github.com/xulek/muonline-bmd-viewer). It lists mesh pages in the same order the game uses.
{% endhint %}

```xml
<ItemPageEffects>
    <Page Type="12" Index="267" Page="1" R="40" G="90" B="255" Scale="1.0" Animate="1" Speed="0.5" />
    <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  |

### Cloth-cape attributes (wings only)

{% hint style="info" %}
For a full decorated cape — simulated drape **plus** side banners **plus** rigid ornament pieces that track the body — use `RenderAs="cape_cloth"` with the per-mesh role attributes in [CustomItemVisual.xml](/docs/data/plugins/customitemvisual.md#custom-capes-cape_cloth) instead. The `Cloth` page here converts one page to cloth but leaves the remaining pages rendered in the model's own space, which makes imported ornaments float out of place.
{% endhint %}

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 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.
* **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.
* **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.
