# ABOUT

In this folder are levels, the structure of levels looks like this:

```
level_folder:    <- name of the folder, is level ID.
    /
    level.json            <- level.json is the main data file of the level.
    custom_mesh.obj
    custom_mesh2.obj
    ...
```

<mark style="background-color:green;">**LEVEL.JSON**</mark> <- the main data file of the level, it contains objects, light and other information of level.

{% hint style="info" %}
{

<mark style="color:orange;">"weather\_color"</mark>: "0a0a0a", <mark style="color:blue;">// HEX color of sky background</mark>

<mark style="color:orange;">"daylight"</mark>: false, <mark style="color:blue;">// turn on/off daylight state of the level</mark>

<mark style="color:orange;">"fog"</mark>: true, <mark style="color:blue;">// volumetric fog, works only when daylight:false</mark>

<mark style="color:orange;">"light"</mark>: \[], <mark style="color:blue;">// array with light sources</mark>

<mark style="color:orange;">"level\_data"</mark>: \[] <mark style="color:blue;">// array with level objects (static and usable)</mark>

}
{% endhint %}

<mark style="background-color:yellow;">**LIGHT : \[ ]**</mark> <- array with light sources

{% hint style="info" %}
{\ <mark style="color:orange;">"color"</mark>: \[ 238, 157, 49 ],    <mark style="color:blue;"><- array of the colors R G B</mark>\ <mark style="color:orange;">"distance"</mark>: 7.0,    <mark style="color:blue;"><- float number for the light size (light sphere diameter)</mark>\ <mark style="color:orange;">"energy"</mark>: 1,    <mark style="color:blue;"><- float number for the light source brightness</mark>\ <mark style="color:orange;">"name"</mark>: "point\_light",    <mark style="color:blue;"><- by that name you can find this light by scripts</mark>\ <mark style="color:orange;">"position"</mark>: \[ 11.36, 1.91, -2.91 ],    <mark style="color:blue;"><- array of floats for Vector3( ) of position</mark>\ <mark style="color:orange;">"shadows"</mark>: false,    <mark style="color:blue;"><- turns on/off shadows on level (works only when daylight:false)</mark>\ <mark style="color:orange;">"type"</mark>: "point"    <mark style="color:blue;"><- type of light</mark>\
}
{% endhint %}

{% hint style="danger" %} <mark style="color:red;">**Level loader have only "point" type of light, remeber it!**</mark>
{% endhint %}

<mark style="background-color:green;">LEVEL\_DATA : \[ ]</mark> <- array with level data. There are few types of objects.

Let's start with simple one, static object. It hasn't <mark style="color:red;">"id": "id\_type"</mark>, so it's static. Like terrain model, boxes, walls, etc.

{% hint style="info" %}
{

<mark style="color:orange;">"model"</mark>: "assets/...",   <mark style="color:blue;"><- path to \*.obj model, starts from assets/</mark>

<mark style="color:orange;">"texture"</mark>: "pbandit.png", <mark style="color:blue;"><- texture name in assets/textures/</mark>

<mark style="color:orange;">"position"</mark>: \[ 0, 0, 0 ],  <mark style="color:blue;"><- position, float numbers</mark>

<mark style="color:orange;">"rotation"</mark>: \[ 0, 180, 0 ],  <mark style="color:blue;"><- rotation, float numbers</mark>

<mark style="color:orange;">"collider"</mark>: null,  <mark style="color:blue;"><- generate colliders, can be null, "box", "mesh", "sphere"</mark>

<mark style="color:orange;">"scale"</mark>: 1, <mark style="color:blue;"><- scale times, or can be array \[1, 1, 1] of floats</mark>

<mark style="color:orange;">"lit"</mark>: false,  <mark style="color:blue;"><- lit/unlit material can be fake emission with no light</mark>

<mark style="color:orange;">"name"</mark>: "object\_name",  <mark style="color:blue;"><- name for using in scripts through get\_node()</mark>

<mark style="color:orange;">"alpha"</mark>: false,  <mark style="color:blue;"><- transparent texture if it has alpha</mark>

<mark style="color:orange;">"billboard"</mark>: false,  <mark style="color:blue;"><- billboard or not</mark>

<mark style="color:orange;">"double\_sided"</mark>: false,  <mark style="color:blue;"><- on/off material back culling</mark>

}
{% endhint %}

Second type of level objects its usable or "dynamic" or whatever. The contains special key -> <mark style="color:red;">"id": "id\_type"</mark>

List of all available id types:

| ID KEY                                                            | WHAT THEY DO                                                                                                                    |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:orange;">"id"</mark> : "sprite3d"              | Sprite object in 3D that can be billboard, best example - light sparkles under lamps in underground                             |
| <mark style="color:orange;">"id"</mark> : "spawn\_point"          | Invisible object that spawn player at self coordinates and rotate it. <mark style="color:red;">Can be only one on level!</mark> |
| <mark style="color:orange;">"id"</mark> : "animated3dsprite"      | Sprite object but with animation, only used for fire.                                                                           |
| <mark style="color:orange;">"id"</mark> : "radiation"             | 3D area that has shape of cube and if player come inside - it start hurt the player                                             |
| <mark style="color:orange;">"id"</mark> : "hostile\_eyezone"      | 3D area that allow enemies attack player inside.                                                                                |
| <mark style="color:orange;">"id"</mark> : "npc"                   | Friendly NPC                                                                                                                    |
| <mark style="color:orange;">"id"</mark> : "npc\_hostile"          | Hostile AI Bot                                                                                                                  |
| <mark style="color:orange;">"id"</mark> : "loot\_money"           | 3D usable area in shape of cube that gives player only money on use                                                             |
| <mark style="color:orange;">"id"</mark> : "loot"                  | 3D usable area in shape of cube that allow player to open loot window and take items from it                                    |
| <mark style="color:orange;">"id"</mark> : "usable\_area"          | 3D usable area in shape of cube that gives player event key after use                                                           |
| <mark style="color:orange;">"id"</mark> : "transition\_to\_level" | 3D usable area in shape of cube that change level on use                                                                        |
| <mark style="color:orange;">"id"</mark> : "transition"            | 3D usable area in shape of cube that allow player to move by waypoints and teleport to specific position in current level       |
| <mark style="color:orange;">"id"</mark> : "block"                 | 3D invisible wall, that block player raycast so player can't use triggers behind this block                                     |

And now what kind of keys can be added to object of specific ID.

<table><thead><tr><th width="236.5">ID</th><th width="230">MUST HAVE KEYS</th><th>WHAT THEY DO</th></tr></thead><tbody><tr><td><mark style="color:orange;">"id"</mark> : "sprite3d"</td><td><mark style="color:orange;">"texture":</mark> "filename.png"</td><td>Filename of texture in <mark style="color:green;">textures/</mark></td></tr><tr><td></td><td><p><mark style="color:orange;">"3d_sound"</mark>: {<br>    "volume_db": 0,<br>    "audio": "assets/...",</p><p>    "max_distance": 5.0<br>}</p></td><td>&#x3C;- 0 is 100% volume, -88 is 0%<br>&#x3C;- path from <mark style="color:green;">assets/</mark><br>&#x3C;- max distance <mark style="color:blue;">float</mark></td></tr><tr><td><mark style="color:orange;">"id"</mark> : "spawn_point"</td><td></td><td>Keep only id, position, rotation and name.</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "animated3dsprite"</td><td><mark style="color:orange;">"sequence":</mark> "fire"</td><td>Main sequence of fire animation.</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "radiation"</td><td><mark style="color:orange;">"size":</mark> [1.0, 1.0, 1.0]</td><td>Size of area in <mark style="color:blue;">float</mark></td></tr><tr><td><mark style="color:orange;">"id"</mark> : "hostile_eyezone"</td><td><mark style="color:orange;">"hostile_id":</mark> "any_string"</td><td>ID of eyezone for AI Bots</td></tr><tr><td></td><td><mark style="color:orange;">"size":</mark> [1.0, 1.0, 1.0]</td><td>Size of area in <mark style="color:blue;">float</mark></td></tr><tr><td><mark style="color:orange;">"id"</mark> : "npc"</td><td><mark style="color:orange;">"profile":</mark> "npc_profile_id"</td><td>ID of profile from <mark style="color:green;">creatures/characters.json</mark></td></tr><tr><td><mark style="color:orange;">"id"</mark> : "npc_hostile"</td><td><mark style="color:orange;">"animations":</mark> [<br>    "anim1",<br>    "anim2"...<br>]</td><td>Attack animation for AI. All anims list search in <mark style="color:green;">scripts/p_game.gd</mark></td></tr><tr><td></td><td><mark style="color:orange;">"profile":</mark> "ai_profile_id"</td><td>ID from <mark style="color:green;">creatures/enemy.json</mark></td></tr><tr><td></td><td><mark style="color:orange;">"zone_id":</mark> "eyezone_id"</td><td>ID of eyezone where they will be</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "loot_money"</td><td><mark style="color:orange;">"value":</mark> 100</td><td>Money amount. Use <mark style="color:blue;">Int</mark> value.</td></tr><tr><td></td><td><mark style="color:orange;">"model":</mark> "cube"</td><td>You need add it!</td></tr><tr><td></td><td><mark style="color:orange;">"invisible":</mark> true</td><td>Always keep it invisible</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "loot"</td><td><mark style="color:orange;">"loot_id":</mark> "loot_id"</td><td>ID from <mark style="color:green;">gameplay/loot_containers.json</mark></td></tr><tr><td></td><td><mark style="color:orange;">"model":</mark> "cube"</td><td>You need add it!</td></tr><tr><td></td><td><mark style="color:orange;">"invisible":</mark> true</td><td>Always keep it invisible</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "usable_area"</td><td><mark style="color:orange;">"event_key":</mark> "key.id"</td><td>Add event key, then you can add logic for key in <mark style="color:green;">scripts/p_game.gd</mark></td></tr><tr><td></td><td><mark style="color:orange;">"model":</mark> "cube"</td><td>You need add it!</td></tr><tr><td></td><td><mark style="color:orange;">"invisible":</mark> true</td><td>Always keep it invisible</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "transition_to_level"</td><td><mark style="color:orange;">"condition":</mark> "key.id"</td><td>*optional* door will have lock icon and can't be used until player will have event key with this id</td></tr><tr><td></td><td><mark style="color:orange;">"level":</mark> "level_folder_id"</td><td>level ID for loading</td></tr><tr><td></td><td><mark style="color:orange;">"model":</mark> "cube"</td><td>You need add it!</td></tr><tr><td></td><td><mark style="color:orange;">"invisible":</mark> true</td><td>Always keep it invisible</td></tr><tr><td><mark style="color:orange;">"id"</mark> : "transition"</td><td><mark style="color:orange;">"target_position":</mark> [<br>    1.0, 1.0, 1.0<br>]</td><td>Position of player destination when door will be used</td></tr><tr><td></td><td><mark style="color:orange;">"target_rotation":</mark> [<br>   0.0, 0.0, 0.0<br>]</td><td>Rotation of player destination when door will be used</td></tr><tr><td></td><td><mark style="color:orange;">"invisible":</mark> true</td><td>Always keep it invisible</td></tr><tr><td></td><td><mark style="color:orange;">"waypoints":</mark> "waypoint_id"</td><td>ID from <mark style="color:green;">gameplay/waypoints.json</mark></td></tr><tr><td><mark style="color:orange;">"id"</mark> : "block"</td><td><mark style="color:orange;">"collider":</mark> "box"</td><td>Always put box collider</td></tr><tr><td></td><td><mark style="color:orange;">"invisible":</mark> true</td><td>Always keep it invisible</td></tr></tbody></table>

{% hint style="warning" %}
Also <mark style="color:orange;">"id"</mark> : "transition" has some special words inside <mark style="color:orange;">"waypoints":</mark> "waypoint\_id" key, that can help you to move player in different ways.

***

{% endhint %}

Here's list of this additional words:

| WAYPOINT WORD                          | WHAT IT DOES                                                                                                                        |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| $to\_this\_door                        | Move camera from it's position forward to the trigger position. <mark style="color:red;">This word must replace waypoint id.</mark> |
| \<waypoint\_id>\_last\_points          | Go backward by waypoints and start first point from middle of path                                                                  |
| \<waypoint\_id>\_return                | Go backward by waypoints from end of points and finish at transition object position                                                |
| \<waypoint\_id>\_back\_only\_waypoints | Go backward by waypoints from end of points and finish only at last point                                                           |

So this is how <mark style="color:green;">**level.json**</mark> is works! Here's as example - intro level of the game:

{% code title="levels/intro/level.json" %}

```json
{
	"weather_color": "4a739f",
	"daylight": true,
	"fog": false,
	"light": [],
	"level_data": [
		{
			"uid": "skybox",
			"model": "assets/levels/intro/l_0_0_skybox",
			"texture": "texsky1.png",
			"position": [
				0,
				-13.77,
				0
			],
			"rotation": [
				0,
				0,
				0
			],
			"lit": true,
			"collider": null,
			"scale": 1,
			"name": "skybox",
			"alpha": false,
			"billboard": false
		},
		{
			"id": "spawn_point",
			"position": [
				6.318,
				1.564,
				-5.53
			],
			"rotation": [
				0,
				158.14,
				0
			],
			"name": "SpawnPoint"
		},
		{
			"id": "loot_money",
			"value": 75,
			"model": "cube",
			"position": [
				5.975,
				0,
				0.626
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": "box",
			"invisible": true,
			"scale": 1,
			"color": [
				10,
				10,
				10,
				128
			],
			"name": "loot_money_0",
			"alpha": false,
			"lit": false,
			"billboard": false
		},
		{
			"id": "loot_money",
			"value": 125,
			"model": "cube",
			"position": [
				2.528,
				0,
				-2.036
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": "box",
			"invisible": true,
			"scale": 1,
			"color": [
				10,
				10,
				10,
				128
			],
			"name": "loot_money_1",
			"alpha": false,
			"lit": false,
			"billboard": false
		},
		{
			"id": "loot",
			"loot_id": "level_0_0_corpse_0",
			"model": "cube",
			"position": [
				-1.023,
				0,
				-2.953
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": "box",
			"invisible": true,
			"scale": 1,
			"color": [
				10,
				10,
				10,
				128
			],
			"name": "items_loot",
			"alpha": false,
			"lit": false,
			"billboard": false
		},
		{
			"id": "loot_money",
			"value": 50,
			"model": "cube",
			"position": [
				0.341,
				0,
				1.524
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": "box",
			"invisible": true,
			"scale": 1,
			"color": [
				10,
				10,
				10,
				128
			],
			"name": "loot_money_2",
			"alpha": false,
			"lit": false,
			"billboard": false
		},
		{
			"id": "transition_to_level",
			"level": "intro_battle",
			"waypoints": "intro_wp_0",
			"model": "cube",
			"position": [
				0.32,
				2.41,
				9.17
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": "box",
			"invisible": true,
			"scale": [
				5.66,
				4.54,
				1
			],
			"name": "transition",
			"alpha": false,
			"lit": false,
			"billboard": false
		},
		{
			"model": "assets/levels/intro/terrain_intro",
			"texture": "objects/terrain_type2.png",
			"position": [
				0,
				0,
				0
			],
			"rotation": [
				0,
				180,
				0
			],
			"collider": null,
			"lit": true,
			"scale": 1,
			"name": "terrain_intro",
			"alpha": false,
			"billboard": false
		},
		{
			"model": "assets/levels/intro/l_0_0_rocks",
			"texture": "texobj2.png",
			"position": [
				0,
				0,
				0
			],
			"rotation": [
				0,
				180,
				0
			],
			"collider": null,
			"lit": true,
			"scale": 1,
			"name": "rocks",
			"alpha": false,
			"billboard": false
		},
		{
			"model": "assets/levels/intro/l_0_0_forest",
			"texture": "texforest1.png",
			"position": [
				0,
				0,
				0
			],
			"rotation": [
				0,
				180,
				0
			],
			"collider": null,
			"alpha": true,
			"lit": true,
			"scale": 1,
			"name": "forest",
			"billboard": false
		},
		{
			"model": "assets/levels/intro/l_0_0_dead_stalkers",
			"texture": "pstalker.png",
			"position": [
				0,
				0,
				0
			],
			"rotation": [
				0,
				180,
				0
			],
			"collider": null,
			"lit": true,
			"scale": 1,
			"name": "corpses",
			"alpha": false,
			"billboard": false
		},
		{
			"model": "assets/levels/intro/l_0_0_dead_bandit",
			"texture": "pbandit.png",
			"position": [
				0,
				0,
				0
			],
			"rotation": [
				0,
				180,
				0
			],
			"collider": null,
			"scale": 1,
			"lit": true,
			"name": "dead_bandit",
			"alpha": false,
			"billboard": false
		},
		{
			"model": "assets/levels/intro/l_0_0_dead_stalkers_weapons",
			"texture": "texobj2.png",
			"position": [
				0,
				0,
				0
			],
			"rotation": [
				0,
				180,
				0
			],
			"lit": true,
			"collider": null,
			"scale": 1,
			"name": "weapons",
			"alpha": false,
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				-6,
				0,
				8
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": [
				1.52,
				1.52,
				1.52
			],
			"double_sided": true,
			"alpha": true,
			"lit": true,
			"name": "tree1",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				13.83,
				-0.42,
				-3.91
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": [
				1.86,
				1.86,
				1.86
			],
			"double_sided": true,
			"alpha": true,
			"lit": true,
			"name": "tree5",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				16.52,
				-0.42,
				8.84
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": [
				1.86,
				1.86,
				1.86
			],
			"double_sided": true,
			"alpha": true,
			"lit": true,
			"name": "tree18",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				21.4,
				-1.35,
				-20.41
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": [
				1.86,
				2.05,
				1.86
			],
			"double_sided": true,
			"alpha": true,
			"lit": true,
			"name": "tree19",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				5,
				0,
				17
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": [
				1.55,
				1.55,
				1.55
			],
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree2",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				1,
				0,
				32
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": 1,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree3",
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				16.33,
				0,
				25
			],
			"rotation": [
				0,
				-28,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree4",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				-30.2,
				0,
				11.11
			],
			"rotation": [
				0,
				-84.9,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree14",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				-30.2,
				0,
				-26.06
			],
			"rotation": [
				0,
				-84.9,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree15",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				-10.09,
				0,
				-31.5
			],
			"rotation": [
				0,
				-84.9,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree16",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				-27.83,
				0,
				-6.51
			],
			"rotation": [
				0,
				-84.9,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree17",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				-6.09,
				-0.51,
				-14.72
			],
			"rotation": [
				65.61,
				-38.38,
				50.47
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree20",
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				-5.98,
				-0.11,
				-14.64
			],
			"rotation": [
				32.91,
				-171.29,
				-71.75
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree21",
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				21.82,
				-0.48,
				7.37
			],
			"rotation": [
				0,
				-28,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree6",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				30,
				0,
				-17
			],
			"rotation": [
				0,
				-28,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree7",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				14,
				0,
				32
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": 1,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree8",
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				4,
				0,
				-46
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": 1,
			"alpha": true,
			"lit": true,
			"name": "tree9",
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				-21,
				0,
				-6
			],
			"rotation": [
				0,
				90,
				0
			],
			"collider": null,
			"scale": [
				1.31,
				1.31,
				1.31
			],
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree10",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				-8.6,
				0,
				-22.1
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"alpha": true,
			"lit": true,
			"scale": [
				1.75,
				1.75,
				1.75
			],
			"double_sided": true,
			"name": "tree11",
			"billboard": true
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree1.png",
			"position": [
				-7,
				0,
				-39
			],
			"rotation": [
				0,
				0,
				0
			],
			"collider": null,
			"scale": [
				1.61,
				1.61,
				1.61
			],
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree12",
			"billboard": false
		},
		{
			"model": "assets/models/tree_faced",
			"texture": "textree3.png",
			"position": [
				14,
				0,
				-43
			],
			"rotation": [
				0,
				-28,
				0
			],
			"collider": null,
			"scale": 3,
			"alpha": true,
			"lit": true,
			"double_sided": true,
			"name": "tree13",
			"billboard": true
		},
		{
			"collider": "box",
			"id": "block",
			"invisible": true,
			"model": "cube",
			"name": "raycast_block_zone",
			"position": [
				0,
				-0.94,
				0
			],
			"rotation": [
				0,
				0,
				0
			],
			"scale": [
				81.13,
				1,
				66.38
			],
			"alpha": false,
			"lit": false,
			"billboard": false
		},
		{
			"collider": null,
			"lit": true,
			"model": "assets/models/mi24",
			"name": "mi24",
			"position": [
				-2.61,
				-0.95,
				-14.91
			],
			"rotation": [
				0,
				121.41,
				-9.62
			],
			"scale": 1,
			"texture": "mi24.png",
			"double_sided": true,
			"billboard": false
		},
		{
			"collider": "box",
			"lit": true,
			"model": "assets/models/garbage",
			"name": "garbage",
			"position": [
				-6.24,
				0,
				-13.01
			],
			"rotation": [
				0,
				0,
				0
			],
			"scale": [
				1.8,
				1.8,
				1.8
			],
			"texture": "texobj2.png",
			"billboard": false
		},
		{
			"collider": "box",
			"lit": true,
			"model": "assets/models/garbage",
			"name": "garbage2",
			"position": [
				2.54,
				0,
				-20.5
			],
			"rotation": [
				0,
				0,
				0
			],
			"scale": [
				3.42,
				3.42,
				3.42
			],
			"texture": "texobj2.png",
			"billboard": false
		},
		{
			"collider": "box",
			"lit": true,
			"model": "assets/models/old_tree",
			"name": "old_tree",
			"position": [
				7.96,
				0.06,
				-23.64
			],
			"rotation": [
				-0.24,
				-56.65,
				-76.05
			],
			"scale": [
				1.6,
				1.6,
				1.6
			],
			"texture": "texobj1.png",
			"billboard": false
		},
		{
			"billboard": true,
			"id": "animated3dsprite",
			"name": "fire",
			"position": [
				-2.39,
				1.64,
				-13.27
			],
			"rotation": [
				0,
				30,
				0
			],
			"scale": 2.80000000000291,
			"sequence": "fire",
			"3d_sound": {
				"volume_db": 0,
				"audio": "assets/sounds/ambient_sfx/campfire.mp3",
				"max_distance": 12
			}
		},
		{
			"billboard": true,
			"id": "animated3dsprite",
			"name": "fire2",
			"position": [
				-7.44,
				1.64,
				-13.34
			],
			"rotation": [
				0,
				30,
				0
			],
			"scale": 2.80000000000291,
			"sequence": "fire"
		},
		{
			"billboard": true,
			"id": "animated3dsprite",
			"name": "fire3",
			"position": [
				3.36,
				3.34,
				-19.74
			],
			"rotation": [
				0,
				30,
				0
			],
			"scale": 2.80000000000291,
			"sequence": "fire"
		}
	]
}

```

{% endcode %}


---

# 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/levels/about.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.
