# characters.json

<figure><img src="/files/dRUxJQio6mdJYF1x5lS3" alt=""><figcaption></figcaption></figure>

This file stores all friendly NPC data with dialogues start logic.

```json
{
"zob_profile":{ // NPC profile ID
	"name": "npc.zob.name", // name with lang key
	"trader_profile": null, // null or string with trader ID (if not null, then player' will not be able to talk, only trade)
	"texture": "pstalker", // texture name in assets/textures/
	"idle_animation": "sit_ground", // animation ID, full list can be founded in scripts/p_game.gd
	"weapon": "w_lr300", // name of 3D model in assets/models/
	"gasmask": true, // show gasmask on face
	"gasmask_type": "antigas", // texture name of gasmask in assets/textures/
	"weapon_hold": "backpack", // bone name for holding weapon model (l_hand, r_hand, backpack)
	"dialogues": [ // dialogues list, when player press F, the game loops through this array and starts first available dialogue, then stops
		{
			"dont_has_event_key": "zob.quest", // if player don't has event key - dialogue will start, else pass it and will go to the next one
			"dialogue": "zob_dialogue" // dialogue ID (it's file name in assets/dialogues/)
		},
		{
			"has_event_key": "zob.quest.completed", // if player has even't key - start dialogue, else, keep searching next one dialogue
			"dont_has_event_key": "zob.no.dialogue", // if player don't has event key - dialogue will start, else pass it and will go to the next one
			"dialogue": "zob_dialogue",
			"start_phrase_id": "completed_quest" // we can use one dialogue file, but starts from different phrases using phrase ID
		},
		{
			"has_event_key": "zob.no.dialogue",
			"dialogue": "zob_dialogue",
			"start_phrase_id": "no_dialogue"
		}
	]
  }
}
```

Basically dialogue logic can be different, like very simple one:

1. Infinity repeatable dialogue. After closing and starting to talk again it will repeat from the beginning.

{% hint style="info" %}
{

&#x20;  <mark style="color:orange;">"dialogue"</mark>: "dialogue\_id"

}
{% endhint %}

2. Changeable dialogue to the next\_dialogue variant or can be the next dialogue.

{% hint style="info" %}
{

&#x20;   <mark style="color:orange;">"dont\_has\_event\_key"</mark>: "event.key.id",    <mark style="color:blue;"><- you can add this key after this dialogue ends</mark>

&#x20;   <mark style="color:orange;">"dialogue"</mark>: "dialogue\_id"

} ,

{

&#x20;   <mark style="color:orange;">"has\_event\_key"</mark>: "event.key.id",    <mark style="color:blue;"><- if we have condition, dialogue will start, else not.</mark>&#x20;

&#x20;                                                                     <mark style="color:blue;">So here you can add key id from</mark> <mark style="color:orange;">dont\_has\_event\_key</mark>&#x20;

&#x20;                                                                     <mark style="color:blue;">from above and this dialogue will start.</mark>

&#x20;   <mark style="color:orange;">"dialogue"</mark>: "dialogue\_id"

}
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://picnic-in-the-oblivion.gitbook.io/assets/creatures/characters-json.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
