> For the complete documentation index, see [llms.txt](https://docs.ninjutsugames.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ninjutsugames.com/game-creator-1/state-machine/editor-graph/blackboard.md).

# Blackboard

Targets, Enemies, Goals and all you can think of!

**State Machine Graphs** can not reference scene objects due to living in the Project Panel. To overcome this, we've created the **Blackboard**, where the developer writes down the input fields he/she'll need and these are filled at runtime.

![](https://3895715781-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LDchaEIEhpBAh2gCe06%2Fuploads%2Fgit-blob-02220ea9b1a84f168803e693135f6b6a77a45480%2FScreen%20Recording%202021-02-13%20at%208.01.46%20PM.2021-02-13%2020_03_27.gif?alt=media)

{% hint style="info" %}
As you may have noticed in the image above, to access the value of a **Blackboard** entry is done as if it was a **Local Variable**. This is because under the hood, the **State Machine** component generates a new **Local Variable** component and fills it with all the entries from the **Blackboard**.
{% endhint %}

Once the **Blackboard** is filled with some entries, the **State Machine** component is automatically updated, adding new entries and removing those that no longer exist in the **Blackboard**.

![](https://3895715781-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LDchaEIEhpBAh2gCe06%2Fuploads%2Fgit-blob-645addf920158d82fe1e5b98c218bc2ed716432d%2Fimage.png?alt=media)

For example, let's say our game has a *Guard* that can attack anything when it has a **`target`** defined. We could create a **`target`** entry in the **State Machine** and ask if it's different than *null*. If so, follow it and attack when it's within in range.

![(Can't have a Local Variable with the same name as a Blackboard entry)](https://3895715781-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LDchaEIEhpBAh2gCe06%2Fuploads%2Fgit-blob-777b7e8bd5596fc7a22c72a3f50811487066a8f1%2FScreen%20Shot%202021-02-13%20at%208.12.24%20PM.png?alt=media)

{% hint style="danger" %}
Because the **StateMachine** component generates a **Local Variable** object with the **Blackboard** entries, it will throw a conflict error.
{% endhint %}

{% hint style="warning" %}
**Invoker** is a variable automatically generated and it will always have the game object where the State Machine is as reference.
{% endhint %}
