> For the complete documentation index, see [llms.txt](https://malbersanimations.gitbook.io/animal-controller/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://malbersanimations.gitbook.io/animal-controller/super-item/super-item-system/super-item-manager/equip-points.md).

# Equip Points

## Overview

An **Equip Point** is a place on the character where an item is held — a hand, the head, a forearm. It pairs an `EquipPointID` asset with a Transform on the skeleton, and remembers which item is currently sitting in it.

Items never reference a Transform. They reference an `EquipPointID`, and the character's Super Item Manager resolves it. That is what makes one sword prefab work on every character in the project, however different their rigs are.

Equip Points live on the **Equip Points** tab of the Super Item Manager.

***

## Requirements

* An `EquipPointID` asset. Four are provided: **Right Hand**, **Left Hand**, **Head**, **Left Forearm**. Create more with `Assets ▸ Create ▸ Malbers Animations ▸ Super Item ▸ Equip Point ID`.
* An empty GameObject parented to the bone the item should follow.

`Reset` on the Super Item Manager creates `Equip Point R-Hand` and `Equip Point L-Hand` under the humanoid hand bones and assigns the Right Hand / Left Hand IDs.

{% hint style="info" %}
Parent the Equip Point Transform to the bone and leave it at zero local transform. Author the item's position with the **offset**, not by moving the Equip Point — the offset is per item, the Equip Point is shared by all of them.
{% endhint %}

***

## How it works

When the Manager equips an item it:

1. resolves the item's `Equip Point` ID (or its `Secondary Equip Point` if the primary is occupied by a compatible item),
2. parents the item to the point's `Point` Transform,
3. applies the offset for this **(Item Type + Equip Point)** pair from the Item Offsets asset — identity if there is no entry,
4. writes the point's **Side** into the Animator's `Left Item Type` or `Right Item Type` parameter,
5. runs the point's **On Equip** Reaction with the item as the dynamic target,
6. refreshes the character's rein hands — the hand is busy now.

While the draw animation plays, the point holds a **reservation** rather than the item, so a second equip in the same frame resolves elsewhere instead of stealing the point.

***

## Properties

### Equip Point entry

#### ID

The `EquipPointID` asset. Must match the `Equip Point` on the items you want to land here.

#### Item

The item currently in this point. Assign one at edit time to have the character **start** with it equipped — the Manager equips it during `Initialize`.

#### Point

The Transform items are parented to.

#### Store On Holster

When the item leaves this equip point, send it to its holster automatically instead of leaving it in limbo.

#### Auto Store

Seconds of inactivity after which the item auto-stores to its holster. `0` disables it.

#### On Equip / On Unequip (Reactions)

`Reaction2` fired when an item lands on, or leaves, this Equip Point. The **dynamic target is the item itself**, not the character — so a `[Member Get]` or any other item-facing reaction resolves against the thing that was just equipped.

Use them for behaviour that belongs to the *slot* rather than to any particular item: lighting the hand when something is drawn, playing a shoulder-holster sound, enabling a hand IK rig.

***

## The Equip Point ID asset

`EquipPointID` derives from the standard Malbers `IDs` asset — an auto-assigned unique integer plus a name — and adds one field.

#### Side

Which side of the character this point belongs to.

| Value     | Meaning                                                                       |
| --------- | ----------------------------------------------------------------------------- |
| **Right** | Items here write the `Right Item Type` Animator parameter.                    |
| **Left**  | Items here write the `Left Item Type` Animator parameter.                     |
| **None**  | No side. Head and Left Forearm style points; excluded from dual-wield checks. |

Side is the backbone of dual wielding. An item's **Effective Side** is taken from the Equip Point it currently sits in, not from the item — which is exactly how the same sword prefab can be a main-hand and an off-hand weapon at the same time.

It is also what decides which hand can hold a **rein** while riding: a point with a Side takes that hand, a point with `None` (head, back) never does.

{% hint style="info" %}
New `EquipPointID` assets guess their Side from their name on `Reset`: a name containing "left" becomes Left, "right" becomes Right. Right-click ▸ *Guess Side from Name* to run it again — it only acts when Side is still `None`.
{% endhint %}

***

## Offsets

An item's position, rotation and scale inside an Equip Point come from the character's `SuperItemOffsets` asset, keyed by **(Item Type + Equip Point ID)**. There is no offset field on the item and none on the Equip Point.

The consequence is worth stating explicitly: the same dagger can sit differently in the right hand and the left hand, and differently again on a second character — three entries in two assets, one prefab.

***

## Debug

With the **Equip Points** tab selected, the Scene View draws, for every point that has an item assigned:

* the item's **Display Mesh** at the exact transform it will have at runtime,
* a green wire sphere at the item root anchor,
* a small cube — green when the item accepts this equip point, red when it does not.

Position, rotation and scale handles let you drag the item into place, and the result is written into the `SuperItemOffsets` asset as you drag. There is no Save button.

***

## API

```csharp
SEquipPoint point = manager.D_EquipPoints[equipPointID];

point.HasItem;          // is something held here
point.Item;             // the SuperItem, or null
point.Side;             // WeaponSide from the ID asset
point.ValidItem(item);  // can this item legally land here
point.ParentItem();     // re-apply parenting + offset
```
