commit ee8deac6512a00b4f62107ff76769e73cbdade24 Author: Kayne Ruse Date: Fri Oct 31 21:10:55 2025 +1100 Heck yeah, you punch those trees, Gary! diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/character/character.gd b/character/character.gd new file mode 100644 index 0000000..73c7b7d --- /dev/null +++ b/character/character.gd @@ -0,0 +1,36 @@ +extends CharacterBody2D + +var _grid_pos: Vector2i = Vector2i.ZERO +var _grid_tween: Tween = null + +var _cached_dir: Vector2i = Vector2i.ZERO #used for reversing the current input + +func _physics_process(delta: float) -> void: + #WARNING: this has the potential for getting stuck + if _grid_pos * 32 == Vector2i(position): + _check_grid_move(delta) + +func _check_grid_move(delta: float) -> void: + if Input.is_action_pressed("input_north"): + _set_grid_move(Vector2i.UP) + elif Input.is_action_pressed("input_south"): + _set_grid_move(Vector2i.DOWN) + elif Input.is_action_pressed("input_west"): + _set_grid_move(Vector2i.LEFT) + elif Input.is_action_pressed("input_east"): + _set_grid_move(Vector2i.RIGHT) + +func _set_grid_move(grid_dir: Vector2i): + _cached_dir = grid_dir + _grid_pos += grid_dir + _grid_tween = create_tween() + _grid_tween.set_ease(Tween.EASE_OUT_IN) + _grid_tween.set_trans(Tween.TRANS_QUAD) + _grid_tween.tween_property(self, "position", Vector2(_grid_pos * 32), 0.3) + +func repel_collision(_other: Node2D) -> void: + #NOTE: character's collider has a 1 pixel margin + if _cached_dir != Vector2i.ZERO: + _grid_tween.kill() + _set_grid_move(-_cached_dir) #go backwards + _cached_dir = Vector2i.ZERO #only do this once each collision diff --git a/character/character.gd.uid b/character/character.gd.uid new file mode 100644 index 0000000..df34df5 --- /dev/null +++ b/character/character.gd.uid @@ -0,0 +1 @@ +uid://vn4kdorxug8f diff --git a/character/gary_pixels.png b/character/gary_pixels.png new file mode 100644 index 0000000..9a5f15b Binary files /dev/null and b/character/gary_pixels.png differ diff --git a/character/gary_pixels.png.import b/character/gary_pixels.png.import new file mode 100644 index 0000000..efe8996 --- /dev/null +++ b/character/gary_pixels.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhcajd6qgtt62" +path="res://.godot/imported/gary_pixels.png-3b277e035a73ecaf93d5fc604cea6ce4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://character/gary_pixels.png" +dest_files=["res://.godot/imported/gary_pixels.png-3b277e035a73ecaf93d5fc604cea6ce4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..9d8b7fa --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..dfaebb6 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cenrv2i6tua12" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..562ca42 --- /dev/null +++ b/project.godot @@ -0,0 +1,49 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="mini-garden" +run/main_scene="uid://8o4ffx055dof" +config/features=PackedStringArray("4.4", "GL Compatibility") +config/icon="res://icon.svg" + +[input] + +input_north={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +input_south={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +input_east={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +input_west={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} + +[rendering] + +textures/canvas_textures/default_texture_filter=0 +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" diff --git a/terrain/dirt.png b/terrain/dirt.png new file mode 100644 index 0000000..c651fc5 Binary files /dev/null and b/terrain/dirt.png differ diff --git a/terrain/dirt.png.import b/terrain/dirt.png.import new file mode 100644 index 0000000..ecbad8b --- /dev/null +++ b/terrain/dirt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c5lr861cmya6r" +path="res://.godot/imported/dirt.png-4b2e3b8f4083fb0baf8bb6a15680a151.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://terrain/dirt.png" +dest_files=["res://.godot/imported/dirt.png-4b2e3b8f4083fb0baf8bb6a15680a151.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/terrain/grass.png b/terrain/grass.png new file mode 100644 index 0000000..d0de91b Binary files /dev/null and b/terrain/grass.png differ diff --git a/terrain/grass.png.import b/terrain/grass.png.import new file mode 100644 index 0000000..b367c21 --- /dev/null +++ b/terrain/grass.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bavfwcsgof0tp" +path="res://.godot/imported/grass.png-a4e0c50e89c55d70401dc2d88d40db84.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://terrain/grass.png" +dest_files=["res://.godot/imported/grass.png-a4e0c50e89c55d70401dc2d88d40db84.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/terrain/terrain.gd b/terrain/terrain.gd new file mode 100644 index 0000000..4ffbd8e --- /dev/null +++ b/terrain/terrain.gd @@ -0,0 +1,9 @@ +extends TileMapLayer + +var dirt_id = 0 +var grass_id = 1 + +func _unhandled_input(event: InputEvent) -> void: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed(): + var coords: Vector2i = local_to_map(event.position) + set_cell(coords, dirt_id, Vector2i.ZERO, 0) diff --git a/terrain/terrain.gd.uid b/terrain/terrain.gd.uid new file mode 100644 index 0000000..9a2f847 --- /dev/null +++ b/terrain/terrain.gd.uid @@ -0,0 +1 @@ +uid://cmgxx7uxo2ah0 diff --git a/terrain/terrain_tileset.tres b/terrain/terrain_tileset.tres new file mode 100644 index 0000000..da791f1 --- /dev/null +++ b/terrain/terrain_tileset.tres @@ -0,0 +1,19 @@ +[gd_resource type="TileSet" load_steps=5 format=3 uid="uid://resk8tvqugsx"] + +[ext_resource type="Texture2D" uid="uid://c5lr861cmya6r" path="res://terrain/dirt.png" id="1_m2li2"] +[ext_resource type="Texture2D" uid="uid://bavfwcsgof0tp" path="res://terrain/grass.png" id="2_54oqm"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_busfd"] +texture = ExtResource("1_m2li2") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_wkw05"] +texture = ExtResource("2_54oqm") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 + +[resource] +tile_size = Vector2i(32, 32) +sources/0 = SubResource("TileSetAtlasSource_busfd") +sources/1 = SubResource("TileSetAtlasSource_wkw05") diff --git a/tree/small_tree.gd b/tree/small_tree.gd new file mode 100644 index 0000000..a93404a --- /dev/null +++ b/tree/small_tree.gd @@ -0,0 +1,11 @@ +extends Area2D + +var _durability: int = 3 + +func _on_body_entered(body: Node2D) -> void: + if body is CharacterBody2D: + _durability -= 1 + body.repel_collision(self) + if _durability <= 0: + print("tree dead") + queue_free() diff --git a/tree/small_tree.gd.uid b/tree/small_tree.gd.uid new file mode 100644 index 0000000..664e168 --- /dev/null +++ b/tree/small_tree.gd.uid @@ -0,0 +1 @@ +uid://clxosihgty8t5 diff --git a/tree/small_tree.png b/tree/small_tree.png new file mode 100644 index 0000000..6384a97 Binary files /dev/null and b/tree/small_tree.png differ diff --git a/tree/small_tree.png.import b/tree/small_tree.png.import new file mode 100644 index 0000000..e9c8fc7 --- /dev/null +++ b/tree/small_tree.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bfyw8l1ubdnsj" +path="res://.godot/imported/small_tree.png-6b7409adbeafd078c10945c05a21c2ab.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://tree/small_tree.png" +dest_files=["res://.godot/imported/small_tree.png-6b7409adbeafd078c10945c05a21c2ab.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/tree/small_tree.tscn b/tree/small_tree.tscn new file mode 100644 index 0000000..b34064f --- /dev/null +++ b/tree/small_tree.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=3 uid="uid://d2re5mee0xayj"] + +[ext_resource type="Texture2D" uid="uid://bfyw8l1ubdnsj" path="res://tree/small_tree.png" id="1_1ao6o"] +[ext_resource type="Script" uid="uid://clxosihgty8t5" path="res://tree/small_tree.gd" id="1_brd4x"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_vb5bs"] +size = Vector2(32, 32) + +[node name="Tree" type="Area2D"] +script = ExtResource("1_brd4x") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("1_1ao6o") +offset = Vector2(16, 16) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +visible = false +position = Vector2(16, 16) +shape = SubResource("RectangleShape2D_vb5bs") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/tree/small_tree.xcf b/tree/small_tree.xcf new file mode 100644 index 0000000..5eae9e4 Binary files /dev/null and b/tree/small_tree.xcf differ diff --git a/working_scene.gd b/working_scene.gd new file mode 100644 index 0000000..ea44c33 --- /dev/null +++ b/working_scene.gd @@ -0,0 +1,15 @@ +extends Node2D + +@export var small_tree = preload("res://tree/small_tree.tscn") + +func _ready() -> void: + randomize() + _procgen() + +func _procgen() -> void: + for i in range(0, 15): + var grid_pos = Vector2i(randi() % 20, randi() % 20) + if grid_pos.x == 0 and grid_pos.y == 0: continue #NOTE: don't spawn on the player + var st = small_tree.instantiate() + st.position = Vector2(grid_pos * 32) + add_child(st) diff --git a/working_scene.gd.uid b/working_scene.gd.uid new file mode 100644 index 0000000..bbec01e --- /dev/null +++ b/working_scene.gd.uid @@ -0,0 +1 @@ +uid://qrdh3cheiudm diff --git a/working_scene.tscn b/working_scene.tscn new file mode 100644 index 0000000..eafabbb --- /dev/null +++ b/working_scene.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=8 format=4 uid="uid://8o4ffx055dof"] + +[ext_resource type="TileSet" uid="uid://resk8tvqugsx" path="res://terrain/terrain_tileset.tres" id="1_l08c4"] +[ext_resource type="Script" uid="uid://qrdh3cheiudm" path="res://working_scene.gd" id="1_q46u1"] +[ext_resource type="Script" uid="uid://cmgxx7uxo2ah0" path="res://terrain/terrain.gd" id="2_fkv0g"] +[ext_resource type="Texture2D" uid="uid://bhcajd6qgtt62" path="res://character/gary_pixels.png" id="3_i8yjd"] +[ext_resource type="Script" uid="uid://vn4kdorxug8f" path="res://character/character.gd" id="3_vb5bs"] +[ext_resource type="PackedScene" uid="uid://d2re5mee0xayj" path="res://tree/small_tree.tscn" id="5_hojm4"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_vb5bs"] +size = Vector2(30, 30) + +[node name="WorkingScene" type="Node2D"] +script = ExtResource("1_q46u1") +metadata/_edit_horizontal_guides_ = [456.0] + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +tile_map_data = PackedByteArray("AAAAAAAAAQAAAAAAAAABAAAAAQAAAAAAAAACAAAAAQAAAAAAAAADAAAAAQAAAAAAAAAEAAAAAQAAAAAAAAAFAAAAAQAAAAAAAAAGAAAAAQAAAAAAAAAHAAAAAQAAAAAAAAAIAAAAAQAAAAAAAAAJAAAAAQAAAAAAAAAJAAEAAQAAAAAAAAAKAAEAAQAAAAAAAAALAAEAAQAAAAAAAAAMAAEAAQAAAAAAAAANAAEAAQAAAAAAAAAOAAEAAQAAAAAAAAANAAAAAQAAAAAAAAAMAAAAAQAAAAAAAAALAAAAAQAAAAAAAAAKAAAAAQAAAAAAAAAAAAEAAQAAAAAAAAABAAEAAQAAAAAAAAACAAEAAQAAAAAAAAADAAEAAQAAAAAAAAAEAAEAAQAAAAAAAAAFAAEAAQAAAAAAAAAGAAEAAQAAAAAAAAAHAAEAAQAAAAAAAAAIAAEAAQAAAAAAAAAOAAAAAQAAAAAAAAAAAAIAAQAAAAAAAAAAAAMAAQAAAAAAAAAAAAQAAQAAAAAAAAAAAAUAAQAAAAAAAAAAAAYAAQAAAAAAAAAAAAcAAQAAAAAAAAAAAAgAAQAAAAAAAAAAAAkAAQAAAAAAAAAAAAoAAQAAAAAAAAAAAAsAAQAAAAAAAAAAAAwAAQAAAAAAAAAAAA0AAQAAAAAAAAAAAA4AAQAAAAAAAAAAAA8AAQAAAAAAAAAAABAAAQAAAAAAAAAAABEAAQAAAAAAAAABAAIAAQAAAAAAAAABAAMAAQAAAAAAAAABAAQAAQAAAAAAAAABAAUAAQAAAAAAAAABAAYAAQAAAAAAAAABAAcAAQAAAAAAAAABAAgAAQAAAAAAAAABAAkAAQAAAAAAAAABAAoAAQAAAAAAAAABAAsAAQAAAAAAAAABAAwAAQAAAAAAAAABAA0AAQAAAAAAAAABAA4AAQAAAAAAAAABAA8AAQAAAAAAAAABABAAAQAAAAAAAAABABEAAQAAAAAAAAACAAIAAQAAAAAAAAACAAMAAQAAAAAAAAACAAQAAQAAAAAAAAACAAUAAQAAAAAAAAACAAYAAQAAAAAAAAACAAcAAQAAAAAAAAACAAgAAQAAAAAAAAACAAkAAQAAAAAAAAACAAoAAQAAAAAAAAACAAsAAQAAAAAAAAACAAwAAQAAAAAAAAACAA0AAQAAAAAAAAACAA4AAQAAAAAAAAACAA8AAQAAAAAAAAACABAAAQAAAAAAAAACABEAAQAAAAAAAAADAAIAAQAAAAAAAAADAAMAAQAAAAAAAAADAAQAAQAAAAAAAAADAAUAAQAAAAAAAAADAAYAAQAAAAAAAAADAAcAAQAAAAAAAAADAAgAAQAAAAAAAAADAAkAAQAAAAAAAAADAAoAAQAAAAAAAAADAAsAAQAAAAAAAAADAAwAAQAAAAAAAAADAA0AAQAAAAAAAAADAA4AAQAAAAAAAAADAA8AAQAAAAAAAAADABAAAQAAAAAAAAADABEAAQAAAAAAAAAEAAIAAQAAAAAAAAAEAAMAAQAAAAAAAAAEAAQAAQAAAAAAAAAEAAUAAQAAAAAAAAAEAAYAAQAAAAAAAAAEAAcAAQAAAAAAAAAEAAgAAQAAAAAAAAAEAAkAAQAAAAAAAAAEAAoAAQAAAAAAAAAEAAsAAQAAAAAAAAAEAAwAAQAAAAAAAAAEAA0AAQAAAAAAAAAEAA4AAQAAAAAAAAAEAA8AAQAAAAAAAAAEABAAAQAAAAAAAAAEABEAAQAAAAAAAAAFAAIAAQAAAAAAAAAFAAMAAQAAAAAAAAAFAAQAAQAAAAAAAAAFAAUAAQAAAAAAAAAFAAYAAQAAAAAAAAAFAAcAAQAAAAAAAAAFAAgAAQAAAAAAAAAFAAkAAQAAAAAAAAAFAAoAAQAAAAAAAAAFAAsAAQAAAAAAAAAFAAwAAQAAAAAAAAAFAA0AAQAAAAAAAAAFAA4AAQAAAAAAAAAFAA8AAQAAAAAAAAAFABAAAQAAAAAAAAAFABEAAQAAAAAAAAAGAAIAAQAAAAAAAAAGAAMAAQAAAAAAAAAGAAQAAQAAAAAAAAAGAAUAAQAAAAAAAAAGAAYAAQAAAAAAAAAGAAcAAQAAAAAAAAAGAAgAAQAAAAAAAAAGAAkAAQAAAAAAAAAGAAoAAQAAAAAAAAAGAAsAAQAAAAAAAAAGAAwAAQAAAAAAAAAGAA0AAQAAAAAAAAAGAA4AAQAAAAAAAAAGAA8AAQAAAAAAAAAGABAAAQAAAAAAAAAGABEAAQAAAAAAAAAHAAIAAQAAAAAAAAAHAAMAAQAAAAAAAAAHAAQAAQAAAAAAAAAHAAUAAQAAAAAAAAAHAAYAAQAAAAAAAAAHAAcAAQAAAAAAAAAHAAgAAQAAAAAAAAAHAAkAAQAAAAAAAAAHAAoAAQAAAAAAAAAHAAsAAQAAAAAAAAAHAAwAAQAAAAAAAAAHAA0AAQAAAAAAAAAHAA4AAQAAAAAAAAAHAA8AAQAAAAAAAAAHABAAAQAAAAAAAAAHABEAAQAAAAAAAAAIAAIAAQAAAAAAAAAIAAMAAQAAAAAAAAAIAAQAAQAAAAAAAAAIAAUAAQAAAAAAAAAIAAYAAQAAAAAAAAAIAAcAAQAAAAAAAAAIAAgAAQAAAAAAAAAIAAkAAQAAAAAAAAAIAAoAAQAAAAAAAAAIAAsAAQAAAAAAAAAIAAwAAQAAAAAAAAAIAA0AAQAAAAAAAAAIAA4AAQAAAAAAAAAIAA8AAQAAAAAAAAAIABAAAQAAAAAAAAAIABEAAQAAAAAAAAAJAAIAAQAAAAAAAAAJAAMAAQAAAAAAAAAJAAQAAQAAAAAAAAAJAAUAAQAAAAAAAAAJAAYAAQAAAAAAAAAJAAcAAQAAAAAAAAAJAAgAAQAAAAAAAAAJAAkAAQAAAAAAAAAJAAoAAQAAAAAAAAAJAAsAAQAAAAAAAAAJAAwAAQAAAAAAAAAJAA0AAQAAAAAAAAAJAA4AAQAAAAAAAAAJAA8AAQAAAAAAAAAJABAAAQAAAAAAAAAJABEAAQAAAAAAAAAKAAIAAQAAAAAAAAAKAAMAAQAAAAAAAAAKAAQAAQAAAAAAAAAKAAUAAQAAAAAAAAAKAAYAAQAAAAAAAAAKAAcAAQAAAAAAAAAKAAgAAQAAAAAAAAAKAAkAAQAAAAAAAAAKAAoAAQAAAAAAAAAKAAsAAQAAAAAAAAAKAAwAAQAAAAAAAAAKAA0AAQAAAAAAAAAKAA4AAQAAAAAAAAAKAA8AAQAAAAAAAAAKABAAAQAAAAAAAAAKABEAAQAAAAAAAAALAAIAAQAAAAAAAAALAAMAAQAAAAAAAAALAAQAAQAAAAAAAAALAAUAAQAAAAAAAAALAAYAAQAAAAAAAAALAAcAAQAAAAAAAAALAAgAAQAAAAAAAAALAAkAAQAAAAAAAAALAAoAAQAAAAAAAAALAAsAAQAAAAAAAAALAAwAAQAAAAAAAAALAA0AAQAAAAAAAAALAA4AAQAAAAAAAAALAA8AAQAAAAAAAAALABAAAQAAAAAAAAALABEAAQAAAAAAAAAMAAIAAQAAAAAAAAAMAAMAAQAAAAAAAAAMAAQAAQAAAAAAAAAMAAUAAQAAAAAAAAAMAAYAAQAAAAAAAAAMAAcAAQAAAAAAAAAMAAgAAQAAAAAAAAAMAAkAAQAAAAAAAAAMAAoAAQAAAAAAAAAMAAsAAQAAAAAAAAAMAAwAAQAAAAAAAAAMAA0AAQAAAAAAAAAMAA4AAQAAAAAAAAAMAA8AAQAAAAAAAAAMABAAAQAAAAAAAAAMABEAAQAAAAAAAAANAAIAAQAAAAAAAAANAAMAAQAAAAAAAAANAAQAAQAAAAAAAAANAAUAAQAAAAAAAAANAAYAAQAAAAAAAAANAAcAAQAAAAAAAAANAAgAAQAAAAAAAAANAAkAAQAAAAAAAAANAAoAAQAAAAAAAAANAAsAAQAAAAAAAAANAAwAAQAAAAAAAAANAA0AAQAAAAAAAAANAA4AAQAAAAAAAAANAA8AAQAAAAAAAAANABAAAQAAAAAAAAANABEAAQAAAAAAAAAOAAIAAQAAAAAAAAAOAAMAAQAAAAAAAAAOAAQAAQAAAAAAAAAOAAUAAQAAAAAAAAAOAAYAAQAAAAAAAAAOAAcAAQAAAAAAAAAOAAgAAQAAAAAAAAAOAAkAAQAAAAAAAAAOAAoAAQAAAAAAAAAOAAsAAQAAAAAAAAAOAAwAAQAAAAAAAAAOAA0AAQAAAAAAAAAOAA4AAQAAAAAAAAAOAA8AAQAAAAAAAAAOABAAAQAAAAAAAAAOABEAAQAAAAAAAAAPAAAAAQAAAAAAAAAPAAEAAQAAAAAAAAAPAAIAAQAAAAAAAAAPAAMAAQAAAAAAAAAPAAQAAQAAAAAAAAAPAAUAAQAAAAAAAAAPAAYAAQAAAAAAAAAPAAcAAQAAAAAAAAAPAAgAAQAAAAAAAAAPAAkAAQAAAAAAAAAPAAoAAQAAAAAAAAAPAAsAAQAAAAAAAAAPAAwAAQAAAAAAAAAPAA0AAQAAAAAAAAAPAA4AAQAAAAAAAAAPAA8AAQAAAAAAAAAPABAAAQAAAAAAAAAPABEAAQAAAAAAAAAQAAAAAQAAAAAAAAAQAAEAAQAAAAAAAAAQAAIAAQAAAAAAAAAQAAMAAQAAAAAAAAAQAAQAAQAAAAAAAAAQAAUAAQAAAAAAAAAQAAYAAQAAAAAAAAAQAAcAAQAAAAAAAAAQAAgAAQAAAAAAAAAQAAkAAQAAAAAAAAAQAAoAAQAAAAAAAAAQAAsAAQAAAAAAAAAQAAwAAQAAAAAAAAAQAA0AAQAAAAAAAAAQAA4AAQAAAAAAAAAQAA8AAQAAAAAAAAAQABAAAQAAAAAAAAAQABEAAQAAAAAAAAARAAAAAQAAAAAAAAARAAEAAQAAAAAAAAARAAIAAQAAAAAAAAARAAMAAQAAAAAAAAARAAQAAQAAAAAAAAARAAUAAQAAAAAAAAARAAYAAQAAAAAAAAARAAcAAQAAAAAAAAARAAgAAQAAAAAAAAARAAkAAQAAAAAAAAARAAoAAQAAAAAAAAARAAsAAQAAAAAAAAARAAwAAQAAAAAAAAARAA0AAQAAAAAAAAARAA4AAQAAAAAAAAARAA8AAQAAAAAAAAARABAAAQAAAAAAAAARABEAAQAAAAAAAAASAAAAAQAAAAAAAAASAAEAAQAAAAAAAAASAAIAAQAAAAAAAAASAAMAAQAAAAAAAAASAAQAAQAAAAAAAAASAAUAAQAAAAAAAAASAAYAAQAAAAAAAAASAAcAAQAAAAAAAAASAAgAAQAAAAAAAAASAAkAAQAAAAAAAAASAAoAAQAAAAAAAAASAAsAAQAAAAAAAAASAAwAAQAAAAAAAAASAA0AAQAAAAAAAAASAA4AAQAAAAAAAAASAA8AAQAAAAAAAAASABAAAQAAAAAAAAASABEAAQAAAAAAAAATAAAAAQAAAAAAAAATAAEAAQAAAAAAAAATAAIAAQAAAAAAAAATAAMAAQAAAAAAAAATAAQAAQAAAAAAAAATAAUAAQAAAAAAAAATAAYAAQAAAAAAAAATAAcAAQAAAAAAAAATAAgAAQAAAAAAAAATAAkAAQAAAAAAAAATAAoAAQAAAAAAAAATAAsAAQAAAAAAAAATAAwAAQAAAAAAAAATAA0AAQAAAAAAAAATAA4AAQAAAAAAAAATAA8AAQAAAAAAAAATABAAAQAAAAAAAAATABEAAQAAAAAAAAAUAAAAAQAAAAAAAAAUAAEAAQAAAAAAAAAUAAIAAQAAAAAAAAAUAAMAAQAAAAAAAAAUAAQAAQAAAAAAAAAUAAUAAQAAAAAAAAAUAAYAAQAAAAAAAAAUAAcAAQAAAAAAAAAUAAgAAQAAAAAAAAAUAAkAAQAAAAAAAAAUAAoAAQAAAAAAAAAUAAsAAQAAAAAAAAAUAAwAAQAAAAAAAAAUAA0AAQAAAAAAAAAUAA4AAQAAAAAAAAAUAA8AAQAAAAAAAAAUABAAAQAAAAAAAAAUABEAAQAAAAAAAAA=") +tile_set = ExtResource("1_l08c4") +script = ExtResource("2_fkv0g") + +[node name="Character" type="CharacterBody2D" parent="."] +script = ExtResource("3_vb5bs") + +[node name="Sprite2D" type="Sprite2D" parent="Character"] +texture = ExtResource("3_i8yjd") +offset = Vector2(16, 16) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Character"] +visible = false +position = Vector2(16, 16) +shape = SubResource("RectangleShape2D_vb5bs") + +[node name="Small Tree" parent="." instance=ExtResource("5_hojm4")] +position = Vector2(320, 160) diff --git a/workspace/tileset.xcf b/workspace/tileset.xcf new file mode 100644 index 0000000..71ce811 Binary files /dev/null and b/workspace/tileset.xcf differ