> 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/conditions.md).

# Conditions

## Overview

The Super Item System ships nineteen `Conditions2` entries. They answer questions about what the character is holding, what is stored, what is playing, and how much ammo is left.

They are used in three places:

* an **Action's** `Conditions On Owner` / `Conditions On Target`, to gate one action,
* an **Action Set's** `Set Conditions`, to gate a whole set,
* an **Action Set's** `Auto Activation On` / `Off`, to make a set swap itself in.

That third use is the important one. Most "how do I make the shield behave differently when a sword is equipped?" questions are answered by an Auto Activation condition, not by code.

***

## Manager conditions

Target: the character's `SuperItemManager`. Menu path `Super Item ▸ [Manager] …`

#### Has Super Item Equipped

Are these item types held in the hands? Takes an `IDList<SuperItemID>` and a mode:

| Mode        | True when                             |
| ----------- | ------------------------------------- |
| **Has Any** | At least one listed item is equipped. |
| **Has All** | Every listed item is equipped.        |

#### Has Super Item Holstered

The same question for the holsters. Leaving the list **empty** asks the simpler question: is *anything* holstered?

#### Owns Super Item

Equipped **or** holstered. Use it for "does the player have a sword at all", regardless of whether it is drawn.

#### Holster Occupied

Does a specific holster currently hold an item? Takes a `HolsterID`.

#### Item Count

Compares how many items are equipped, holstered, or both, against a value with a numeric comparer.

#### Has Free Slot

Is there at least one empty **Equip Point** or **Holster**? Use it to decide whether a pickup can be stored or must be swapped.

#### Is Aiming

True while the character's `Aim` component is active.

#### Item In Use \[Any Action]

True while any equipped item has an Action playing — firing, blocking, reloading. Use it to stop the character doing something else mid-action.

#### Active Action Set Is

Does any equipped item have an active Action Set with this **name**? Matched by string.

#### Is Dual Wielding

The most configurable of the set. It has two hand lists, and the mode is inferred from them:

| Lists       | Question asked                                                |
| ----------- | ------------------------------------------------------------- |
| Both empty  | Are both hands holding something?                             |
| One filled  | Two distinct held items, one matching the list, one anything. |
| Both filled | Two distinct held items, one matching each list.              |

Putting the same ID in both lists requires **two** of it — that is how you check for two Daggers rather than one.

{% hint style="info" %}
Only items on Equip Points with a **Side** count. A torch on a `Head` point never makes the character dual wielding.
{% endhint %}

***

## Item conditions

Target: a `SuperItem`. Menu path `Super Item ▸ [Super Item] …`

These are anchored to **one item** rather than to the character, which is what lets an item's own Action Set ask a question about itself.

#### Has Target

Does the item currently have a Target assigned?

#### Has User

Is the item being held by anyone?

#### Is Equipped

Is the item currently on an Equip Point?

#### Is Holstered

Is the item currently stored in one of the user's holsters?

#### Is On Side

Which hand is the item in — `Left`, `Right` or `None`? The side comes from the Equip Point the item currently sits in, not from the item.

This is the condition that tells two identical dual-wielded weapons apart. Give the off-hand copy its own Action Set through an Auto Activation using this condition.

#### Is Action Playing

Is an Action of the item's active set playing — firing, blocking, aiming? Takes an `ItemActionID`; leave it **empty** to ask about *any* playing Action on this item.

Use it to gate one Action on another without making it a full Secondary/Master pair.

#### Is Set Active

Which Action Set is active on this item? Takes a set **name** (`Two Handed`, `Off Hand`…); an empty name asks the weaker question "does the item have any active set".

#### Is Dual Wielding

The item-side counterpart of the Manager condition: this item is held while **another** item is held on the opposite hand.

Takes an optional `IDList<SuperItemID>` of allowed types for the **other** hand — empty means any item counts. Because it is anchored to this item, a Set can ask "am I the one being paired?" and activate itself, which the Manager version cannot express.

***

## Pouch conditions

Target: the character's `PouchManager`. Menu path `Super Item ▸ Pouch …`

#### Has Ammo

Compares the reserve for a `ProjectileID` against an amount, with a numeric comparer.

Put it in a fire Action's `Conditions On Owner` and wire `On Action Failed On Owner` to a dry-click sound.

{% hint style="info" %}
An **Infinite** reserve compares as `int.MaxValue`, so every comparer stays meaningful and the condition simply always passes.
{% endhint %}

***

## Item resources are Stats

There are deliberately **no** conditions for "rounds in the chamber" or "charge level". Those are Stats on the item's `Stats` component, so the generic **`[Stats]`** condition covers them — Value, Max Value, Full, Empty and the rest.

One caveat: an Action evaluates `Conditions On Owner` against the **character**, but the Chamber and Charge Stats live on the **item**. Set the condition's `Local Target` and point its `Target` at the item's own `Stats` component. The [Projectile - Reload](/animal-controller/super-item/super-item-system/item-processors/projectile-reload.md) processor does exactly this for you when created.

***

## Conditions from the rest of the framework

An Action Set's Auto Activation is a normal `Conditions2` list, so anything in the library is available. Two that come up constantly with items:

* **`[Riding] Rider is Riding`** — paired with the `Riding` Auto Activation flag, this is the whole mounted/on-foot set swap.
* **`[Aim] Aim Angle`** — restricts an Action to a cone of aim angles. Its **Angle Offset** rotates the whole allowed range, so the cone does not have to be centred on the character's forward: an offset of `-90` with a `[-60, 60]` limit allows only the character's left side. The offset is a `FloatReference`, so it can be driven by a Float Var at runtime — mounted versus on foot, left- versus right-handed. The Scene View arc is drawn at the rotated position, and an Action with **Restart On Conditions** resumes by itself when the aim returns to the allowed range.

***

## Example — a shield that changes behaviour when paired

On the shield, two Action Sets:

| Set          | Auto Activation          | Auto Activation On                                     |
| ------------ | ------------------------ | ------------------------------------------------------ |
| `With Sword` | `On Equip`, `On Unequip` | `[Manager] Has Super Item Equipped` → `Sword`, Has Any |
| `Default`    | —                        | —                                                      |

Put `With Sword` **above** `Default` in the list — the first matching set wins.

***

## Example — a bow that changes on horseback

| Set          | Auto Activation         | Auto Activation On         | Auto Activation Off |
| ------------ | ----------------------- | -------------------------- | ------------------- |
| `Bow Riding` | `Riding`, `Check State` | `[Riding] Rider is Riding` | its inverse         |
| `Default`    | —                       | —                          | —                   |

One flag covers the whole mount cycle. Give the mounted set its own `Free Hands`, IK profile and an `[Aim] Aim Angle` condition with an **Angle Offset** if the saddle limits where the rider can shoot.
