Skip to content

Examples: Add In-game blocks demo #380

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions addons/block_code/drag_manager/drag_manager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ var drag: Drag = null


func _ready():
_picker = get_node(picker_path)
if picker_path:
_picker = get_node(picker_path)
_block_canvas = get_node(block_canvas_path)


Expand Down Expand Up @@ -55,7 +56,8 @@ func drag_block(block: Block, copied_from: Block = null, offset: Vector2 = Vecto

drag = Drag.new(block, block_scope, offset, _block_canvas)
drag.set_snap_points(get_tree().get_nodes_in_group("snap_point"))
drag.add_delete_area(_picker.get_global_rect())
if _picker:
drag.add_delete_area(_picker.get_global_rect())
if block is ParameterBlock and block.spawned_by:
drag.add_delete_area(block.spawned_by.get_global_rect())
add_child(drag)
Expand Down
41 changes: 41 additions & 0 deletions addons/block_code/examples/demo_ingame/demo_ingame.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
extends Control

@onready var _context := BlockEditorContext.get_default()

@onready var block_code_node: BlockCode = %BlockCode
@onready var block_canvas: MarginContainer = %BlockCanvas
@onready var drag_manager: Control = %DragManager


func _ready() -> void:
block_canvas.reconnect_block.connect(drag_manager.connect_block_canvas_signals)
drag_manager.block_dropped.connect(save_script)
drag_manager.block_modified.connect(save_script)
_context.block_code_node = block_code_node


func _input(event):
if event is InputEventMouseButton:
var mouse_event: InputEventMouseButton = event as InputEventMouseButton
if mouse_event.button_index == MOUSE_BUTTON_LEFT:
if mouse_event.pressed:
# Release focus
var focused_node := get_viewport().gui_get_focus_owner()
if focused_node:
focused_node.release_focus()
else:
drag_manager.drag_ended()


func save_script():
if _context.block_code_node == null:
print("No script loaded to save.")
return

var block_script: BlockScriptSerialization = _context.block_script
block_canvas.rebuild_ast_list()
block_canvas.rebuild_block_serialization_trees()
var generated_script = block_canvas.generate_script_from_current_window()
if generated_script != block_script.generated_script:
block_script.generated_script = generated_script
block_code_node._update_parent_script()
1 change: 1 addition & 0 deletions addons/block_code/examples/demo_ingame/demo_ingame.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cnoxd00s0tn51
111 changes: 111 additions & 0 deletions addons/block_code/examples/demo_ingame/demo_ingame.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
[gd_scene load_steps=19 format=3 uid="uid://cytyr4s3vkoqm"]

[ext_resource type="Script" uid="uid://cnoxd00s0tn51" path="res://addons/block_code/examples/demo_ingame/demo_ingame.gd" id="1_6vqkq"]
[ext_resource type="PackedScene" uid="uid://c6vumewgnfquy" path="res://addons/block_code/ui/block_canvas/block_canvas.tscn" id="2_7wcyd"]
[ext_resource type="Texture2D" uid="uid://dk8joxmlxu82l" path="res://icon.png" id="2_saega"]
[ext_resource type="Script" uid="uid://cumxsbxj56dmk" path="res://addons/block_code/block_code_node/block_code.gd" id="3_com2k"]
[ext_resource type="Script" uid="uid://brx1cabdmgu38" path="res://addons/block_code/serialization/block_serialization_tree.gd" id="4_dmtl1"]
[ext_resource type="Script" uid="uid://u035wsjd5tpj" path="res://addons/block_code/serialization/block_serialization.gd" id="5_fjkgv"]
[ext_resource type="Script" uid="uid://tlsvrkc3fubl" path="res://addons/block_code/serialization/block_script_serialization.gd" id="6_nae1f"]
[ext_resource type="Script" uid="uid://duvgxorhfitb7" path="res://addons/block_code/serialization/value_block_serialization.gd" id="7_25a4o"]
[ext_resource type="Script" uid="uid://bwkinr8omutpw" path="res://addons/block_code/code_generation/variable_definition.gd" id="7_qrh5q"]
[ext_resource type="PackedScene" uid="uid://cph1k5cfximbf" path="res://addons/block_code/drag_manager/drag_manager.tscn" id="10_kgp86"]

[sub_resource type="Resource" id="Resource_7j0jm"]
script = ExtResource("5_fjkgv")
name = &"Node2D_change_rotation_degrees"
children = Array[ExtResource("5_fjkgv")]([])
arguments = {
"value": -1.0
}

[sub_resource type="Resource" id="Resource_p7e31"]
script = ExtResource("5_fjkgv")
name = &"Node2D_change_rotation_degrees"
children = Array[ExtResource("5_fjkgv")]([])
arguments = {
"value": 5.0
}

[sub_resource type="Resource" id="Resource_8vvuc"]
script = ExtResource("5_fjkgv")
name = &"process"
children = Array[ExtResource("5_fjkgv")]([SubResource("Resource_7j0jm"), SubResource("Resource_p7e31")])
arguments = {}

[sub_resource type="Resource" id="Resource_43nhb"]
script = ExtResource("4_dmtl1")
root = SubResource("Resource_8vvuc")
canvas_position = Vector2(75, 150)

[sub_resource type="Resource" id="Resource_xn35n"]
script = ExtResource("7_25a4o")
name = &"mouse_position"
arguments = {}

[sub_resource type="Resource" id="Resource_y3fve"]
script = ExtResource("5_fjkgv")
name = &"Node2D_set_position"
children = Array[ExtResource("5_fjkgv")]([])
arguments = {
"value": SubResource("Resource_xn35n")
}

[sub_resource type="Resource" id="Resource_k8cej"]
script = ExtResource("4_dmtl1")
root = SubResource("Resource_y3fve")
canvas_position = Vector2(125, 397)

[sub_resource type="Resource" id="Resource_ydoon"]
script = ExtResource("6_nae1f")
script_inherits = "Sprite2D"
block_serialization_trees = Array[ExtResource("4_dmtl1")]([SubResource("Resource_43nhb"), SubResource("Resource_k8cej")])
variables = Array[ExtResource("7_qrh5q")]([])
generated_script = "extends Sprite2D


func _process(delta):
rotation_degrees += -1
rotation_degrees += 5

"
version = 0

[node name="DemoInGame" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
script = ExtResource("1_6vqkq")

[node name="HSplitContainer" type="HSplitContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2

[node name="BlockCanvas" parent="HSplitContainer" instance=ExtResource("2_7wcyd")]
unique_name_in_owner = true
layout_mode = 2

[node name="BoxContainer" type="BoxContainer" parent="HSplitContainer"]
layout_mode = 2
size_flags_horizontal = 3

[node name="Icon" type="Sprite2D" parent="HSplitContainer/BoxContainer"]
position = Vector2(290, 317)
texture = ExtResource("2_saega")

[node name="BlockCode" type="Node" parent="HSplitContainer/BoxContainer/Icon"]
unique_name_in_owner = true
script = ExtResource("3_com2k")
block_script = SubResource("Resource_ydoon")

[node name="DragManager" parent="." instance=ExtResource("10_kgp86")]
unique_name_in_owner = true
block_canvas_path = NodePath("../HSplitContainer/BlockCanvas")
11 changes: 8 additions & 3 deletions addons/block_code/ui/block_canvas/block_canvas.gd
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ const Types = preload("res://addons/block_code/types/types.gd")
const Util = preload("res://addons/block_code/ui/util.gd")
const VariableDefinition = preload("res://addons/block_code/code_generation/variable_definition.gd")

const ZOOM_IN_ICON_TEXTURE = preload("res://addons/block_code/ui/block_canvas/zoom_in_icon_texture.tres")
const ZOOM_OUT_ICON_TEXTURE = preload("res://addons/block_code/ui/block_canvas/zoom_out_icon_texture.tres")

const EXTEND_MARGIN: float = 800
const BLOCK_AUTO_PLACE_MARGIN: Vector2 = Vector2(25, 8)
const DEFAULT_WINDOW_MARGIN: Vector2 = Vector2(25, 25)
Expand All @@ -37,8 +40,8 @@ const ZOOM_FACTOR: float = 1.1
@onready var _replace_block_code_button: Button = %ReplaceBlockCodeButton

@onready var _open_scene_icon = _open_scene_button.get_theme_icon("Load", "EditorIcons")
@onready var _icon_zoom_out := EditorInterface.get_editor_theme().get_icon("ZoomLess", "EditorIcons")
@onready var _icon_zoom_in := EditorInterface.get_editor_theme().get_icon("ZoomMore", "EditorIcons")
@onready var _icon_zoom_out := EditorInterface.get_editor_theme().get_icon("ZoomLess", "EditorIcons") if EditorInterface.has_method("get_editor_theme") else ZOOM_OUT_ICON_TEXTURE
@onready var _icon_zoom_in := EditorInterface.get_editor_theme().get_icon("ZoomMore", "EditorIcons") if EditorInterface.has_method("get_editor_theme") else ZOOM_IN_ICON_TEXTURE

@onready var _mouse_override: Control = %MouseOverride
@onready var _zoom_buttons: HBoxContainer = %ZoomButtons
Expand Down Expand Up @@ -211,7 +214,9 @@ func set_child(n: Node):
func _on_context_changed():
clear_canvas()

var edited_node = EditorInterface.get_inspector().get_edited_object() as Node
var edited_node
if EditorInterface.has_method("get_inspector"):
edited_node = EditorInterface.get_inspector().get_edited_object() as Node

if _context.block_script != _current_block_script:
_window.position = Vector2(0, 0)
Expand Down
13 changes: 13 additions & 0 deletions addons/block_code/ui/block_canvas/zoom_in_icon_texture.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[gd_resource type="ImageTexture" load_steps=2 format=3 uid="uid://braer205nctqj"]

[sub_resource type="Image" id="Image_47mxg"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 58, 0, 0, 0, 86, 0, 0, 0, 97, 0, 0, 0, 97, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 60, 47, 47, 47, 114, 160, 160, 160, 177, 205, 205, 205, 225, 218, 218, 218, 246, 218, 218, 218, 246, 205, 205, 205, 225, 158, 158, 158, 176, 44, 44, 44, 114, 0, 0, 0, 59, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, 119, 119, 119, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 245, 117, 117, 117, 148, 0, 0, 0, 76, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 119, 119, 119, 148, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 254, 114, 114, 114, 147, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 18, 44, 44, 44, 114, 219, 219, 219, 245, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 245, 40, 40, 40, 113, 0, 0, 0, 17, 0, 0, 0, 58, 158, 158, 158, 176, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 155, 155, 155, 173, 0, 0, 0, 57, 0, 0, 0, 86, 206, 206, 206, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 203, 203, 203, 223, 0, 0, 0, 85, 0, 0, 0, 97, 219, 219, 219, 247, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 244, 0, 0, 0, 97, 0, 0, 0, 97, 219, 219, 219, 247, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 244, 0, 0, 0, 97, 0, 0, 0, 85, 206, 206, 206, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 222, 0, 0, 0, 84, 0, 0, 0, 58, 157, 157, 157, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 171, 0, 0, 0, 56, 0, 0, 0, 17, 44, 44, 44, 114, 218, 218, 218, 245, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 217, 217, 217, 243, 36, 36, 36, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 59, 116, 116, 116, 147, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 110, 110, 110, 144, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, 117, 117, 117, 148, 219, 219, 219, 245, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 243, 112, 112, 112, 144, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 59, 43, 43, 43, 113, 156, 156, 156, 175, 203, 203, 203, 224, 218, 218, 218, 245, 218, 218, 218, 245, 203, 203, 203, 223, 155, 155, 155, 173, 40, 40, 40, 113, 0, 0, 0, 58, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 57, 0, 0, 0, 85, 0, 0, 0, 97, 0, 0, 0, 97, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}

[resource]
image = SubResource("Image_47mxg")
13 changes: 13 additions & 0 deletions addons/block_code/ui/block_canvas/zoom_out_icon_texture.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[gd_resource type="ImageTexture" load_steps=2 format=3 uid="uid://uejh0m7utv1t"]

[sub_resource type="Image" id="Image_cj7at"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 58, 0, 0, 0, 86, 0, 0, 0, 97, 0, 0, 0, 97, 0, 0, 0, 85, 0, 0, 0, 58, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 60, 47, 47, 47, 114, 160, 160, 160, 177, 205, 205, 205, 225, 218, 218, 218, 246, 218, 218, 218, 246, 205, 205, 205, 225, 158, 158, 158, 176, 44, 44, 44, 114, 0, 0, 0, 59, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, 119, 119, 119, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 245, 117, 117, 117, 148, 0, 0, 0, 76, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 119, 119, 119, 148, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 254, 114, 114, 114, 147, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 18, 44, 44, 44, 114, 219, 219, 219, 245, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 245, 40, 40, 40, 113, 0, 0, 0, 17, 0, 0, 0, 58, 158, 158, 158, 176, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 155, 155, 155, 173, 0, 0, 0, 57, 0, 0, 0, 86, 206, 206, 206, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 203, 203, 203, 223, 0, 0, 0, 85, 0, 0, 0, 97, 219, 219, 219, 247, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 244, 0, 0, 0, 97, 0, 0, 0, 97, 219, 219, 219, 247, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 0, 0, 0, 102, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 244, 0, 0, 0, 97, 0, 0, 0, 85, 206, 206, 206, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 222, 0, 0, 0, 84, 0, 0, 0, 58, 157, 157, 157, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 171, 0, 0, 0, 56, 0, 0, 0, 17, 44, 44, 44, 114, 218, 218, 218, 245, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 217, 217, 217, 243, 36, 36, 36, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 59, 116, 116, 116, 147, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 110, 110, 110, 144, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 76, 117, 117, 117, 148, 219, 219, 219, 245, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 243, 112, 112, 112, 144, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 59, 43, 43, 43, 113, 156, 156, 156, 175, 203, 203, 203, 224, 218, 218, 218, 245, 218, 218, 218, 245, 203, 203, 203, 223, 155, 155, 155, 173, 40, 40, 40, 113, 0, 0, 0, 58, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 57, 0, 0, 0, 85, 0, 0, 0, 97, 0, 0, 0, 97, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}

[resource]
image = SubResource("Image_cj7at")