commit 42455a84d63915eeb67e972d0372cf7df85d697c
Author: qwsdcvghyu89 <61093706+qwsdcvghyu89@users.noreply.github.com>
Date: Fri Jun 5 22:43:54 2026 +1000
Initial commit
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..8d63706
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,10 @@
+root = true
+
+[*]
+charset = utf-8
+
+[*.cs]
+csharp_new_line_before_open_brace = none
+csharp_new_line_before_else = false
+csharp_new_line_before_catch = false
+csharp_new_line_before_finally = false
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/WrplatGodot.csproj b/WrplatGodot.csproj
new file mode 100644
index 0000000..8c1e394
--- /dev/null
+++ b/WrplatGodot.csproj
@@ -0,0 +1,7 @@
+
+
+ net8.0
+ net9.0
+ true
+
+
\ No newline at end of file
diff --git a/WrplatGodot.sln b/WrplatGodot.sln
new file mode 100644
index 0000000..80efdd0
--- /dev/null
+++ b/WrplatGodot.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WrplatGodot", "WrplatGodot.csproj", "{39375637-0001-4516-B726-4D840C46823C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ ExportDebug|Any CPU = ExportDebug|Any CPU
+ ExportRelease|Any CPU = ExportRelease|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {39375637-0001-4516-B726-4D840C46823C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39375637-0001-4516-B726-4D840C46823C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39375637-0001-4516-B726-4D840C46823C}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
+ {39375637-0001-4516-B726-4D840C46823C}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
+ {39375637-0001-4516-B726-4D840C46823C}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
+ {39375637-0001-4516-B726-4D840C46823C}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/icon.svg b/icon.svg
new file mode 100644
index 0000000..c6bbb7d
--- /dev/null
+++ b/icon.svg
@@ -0,0 +1 @@
+
diff --git a/icon.svg.import b/icon.svg.import
new file mode 100644
index 0000000..ee34915
--- /dev/null
+++ b/icon.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://buogmgg3p5soy"
+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/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/objects/animation/frames/player.tres b/objects/animation/frames/player.tres
new file mode 100644
index 0000000..e4707ad
--- /dev/null
+++ b/objects/animation/frames/player.tres
@@ -0,0 +1,66 @@
+[gd_resource type="SpriteFrames" format=3 uid="uid://doxc4pl5hvs6k"]
+
+[ext_resource type="Texture2D" uid="uid://bv4gsgya7wp4d" path="res://sprites/atlas/demoman_walking.png" id="1_1t22f"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_c2ath"]
+atlas = ExtResource("1_1t22f")
+region = Rect2(0, 0, 32, 64)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gwfnt"]
+atlas = ExtResource("1_1t22f")
+region = Rect2(0, 64, 32, 64)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kdeld"]
+atlas = ExtResource("1_1t22f")
+region = Rect2(32, 0, 32, 64)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_a1t44"]
+atlas = ExtResource("1_1t22f")
+region = Rect2(32, 64, 32, 64)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_k551e"]
+atlas = ExtResource("1_1t22f")
+region = Rect2(64, 0, 32, 64)
+
+[resource]
+animations = [{
+"frames": [],
+"loop": true,
+"name": &"idle",
+"speed": 5.0
+}, {
+"frames": [],
+"loop": true,
+"name": &"jump",
+"speed": 5.0
+}, {
+"frames": [],
+"loop": true,
+"name": &"limp",
+"speed": 5.0
+}, {
+"frames": [],
+"loop": true,
+"name": &"run",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_c2ath")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gwfnt")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kdeld")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_a1t44")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_k551e")
+}],
+"loop": true,
+"name": &"walk",
+"speed": 5.0
+}]
diff --git a/objects/camera attributes/physcam_attr.tres b/objects/camera attributes/physcam_attr.tres
new file mode 100644
index 0000000..912a01c
--- /dev/null
+++ b/objects/camera attributes/physcam_attr.tres
@@ -0,0 +1,3 @@
+[gd_resource type="CameraAttributesPhysical" format=3 uid="uid://csr0l6kulxsog"]
+
+[resource]
diff --git a/objects/compositor/default_compositor.tres b/objects/compositor/default_compositor.tres
new file mode 100644
index 0000000..31481b2
--- /dev/null
+++ b/objects/compositor/default_compositor.tres
@@ -0,0 +1,3 @@
+[gd_resource type="Compositor" format=3 uid="uid://kk12nt7g2oqg"]
+
+[resource]
diff --git a/objects/environment/default.tres b/objects/environment/default.tres
new file mode 100644
index 0000000..31c1162
--- /dev/null
+++ b/objects/environment/default.tres
@@ -0,0 +1,3 @@
+[gd_resource type="Environment" format=3 uid="uid://b3ef577lsk2jh"]
+
+[resource]
diff --git a/objects/scenes/demo/demo.tscn b/objects/scenes/demo/demo.tscn
new file mode 100644
index 0000000..4c877e7
--- /dev/null
+++ b/objects/scenes/demo/demo.tscn
@@ -0,0 +1,62 @@
+[gd_scene format=4 uid="uid://r2lb1ommvj6u"]
+
+[ext_resource type="TileSet" uid="uid://bk7cbdppa3j6a" path="res://sprites/tilesets/pool.tres" id="1_t7kht"]
+[ext_resource type="Environment" uid="uid://b3ef577lsk2jh" path="res://objects/environment/default.tres" id="2_44w6l"]
+[ext_resource type="Script" uid="uid://biicefgcvdc2x" path="res://src/components/PlayerPhysicsController.cs" id="2_oekxy"]
+[ext_resource type="SpriteFrames" uid="uid://doxc4pl5hvs6k" path="res://objects/animation/frames/player.tres" id="2_wq5k4"]
+[ext_resource type="CameraAttributesPhysical" uid="uid://csr0l6kulxsog" path="res://objects/camera attributes/physcam_attr.tres" id="3_wq5k4"]
+[ext_resource type="Compositor" uid="uid://kk12nt7g2oqg" path="res://objects/compositor/default_compositor.tres" id="4_oekxy"]
+
+[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_oekxy"]
+radius = 11.0
+height = 50.0
+
+[node name="Node2D" type="Node2D" unique_id=1943007414]
+
+[node name="Tiles" type="Node2D" parent="." unique_id=621894136]
+
+[node name="Static" type="Node2D" parent="Tiles" unique_id=897407461]
+
+[node name="TileMapLayer" type="TileMapLayer" parent="Tiles/Static" unique_id=1445881483]
+texture_filter = 1
+tile_map_data = PackedByteArray("AAAAAAIAAAACAAAAAAABAAIAAAAAAAAAAAACAAIAAAACAAAAAAADAAIAAAABAAAAAAAEAAIAAAAAAAAAAAAFAAIAAAABAAEAAAAGAAIAAAADAAAAAAAHAAIAAAAAAAEAAAAIAAIAAAADAAAAAAAIAAMAAAACAAAAAAAHAAMAAAACAAEAAAAGAAMAAAADAAAAAAAFAAMAAAABAAAAAAAEAAMAAAADAAAAAAADAAMAAAACAAEAAAACAAMAAAAAAAEAAAABAAMAAAAAAAEAAAAAAAMAAAAAAAAAAAAAAAQAAAAAAAAAAAABAAQAAAADAAEAAAACAAQAAAADAAEAAAADAAQAAAABAAAAAAAEAAQAAAABAAAAAAAFAAQAAAABAAAAAAAGAAQAAAACAAEAAAAHAAQAAAAAAAEAAAAIAAQAAAAAAAEAAAAHAAUAAAACAAEAAAAGAAUAAAAAAAAAAAAFAAUAAAACAAAAAAAEAAUAAAAAAAEAAAADAAUAAAADAAAAAAACAAUAAAADAAAAAAABAAUAAAAAAAEAAAAAAAUAAAAAAAEAAAAIAAUAAAAAAAAAAAAOAAIAAAACAAAAAAAPAAIAAAACAAEAAAAQAAIAAAADAAEAAAARAAIAAAACAAAAAAASAAIAAAACAAEAAAATAAIAAAABAAAAAAAUAAIAAAADAAAAAAAVAAIAAAADAAAAAAAWAAIAAAACAAEAAAAXAAIAAAADAAAAAAAYAAIAAAACAAAAAAAZAAIAAAACAAEAAAAaAAIAAAADAAEAAAAbAAIAAAADAAEAAAAcAAIAAAAAAAAAAAAdAAIAAAAAAAAAAAAeAAIAAAAAAAAAAAAfAAIAAAAAAAEAAAAgAAIAAAACAAEAAAAhAAIAAAAAAAEAAAAiAAIAAAABAAAAAAAjAAIAAAADAAEAAAAkAAIAAAACAAEAAAAlAAIAAAAAAAEAAAAmAAIAAAAAAAAAAAAnAAIAAAACAAAAAAAoAAIAAAABAAEAAAApAAIAAAACAAAAAAAqAAIAAAAAAAAAAAArAAIAAAABAAAAAAAsAAIAAAACAAAAAAAtAAIAAAAAAAAAAAAuAAIAAAACAAEAAAAvAAIAAAACAAAAAAAwAAIAAAABAAAAAAAxAAIAAAABAAEAAAAyAAIAAAAAAAEAAAAzAAIAAAAAAAEAAAA0AAIAAAADAAEAAAA1AAIAAAADAAEAAAA2AAIAAAAAAAAAAAA3AAIAAAABAAAAAAA4AAIAAAABAAEAAAA5AAIAAAADAAEAAAA6AAIAAAABAAEAAAA7AAIAAAADAAAAAAA8AAIAAAACAAEAAAA9AAIAAAABAAEAAAA+AAIAAAAAAAAAAAA/AAIAAAADAAAAAABAAAIAAAABAAEAAABBAAIAAAABAAAAAABCAAIAAAABAAAAAABDAAIAAAACAAAAAABEAAIAAAAAAAAAAABFAAIAAAAAAAAAAABGAAIAAAACAAAAAABHAAIAAAACAAAAAABIAAIAAAACAAEAAABJAAIAAAAAAAAAAABKAAIAAAACAAEAAABLAAIAAAABAAAAAABMAAIAAAAAAAAAAABNAAIAAAACAAEAAABOAAIAAAABAAAAAABPAAIAAAAAAAEAAABQAAIAAAAAAAAAAABRAAIAAAAAAAEAAABSAAIAAAABAAEAAABTAAIAAAADAAEAAABUAAIAAAABAAAAAABVAAIAAAABAAAAAABWAAIAAAABAAAAAABXAAIAAAACAAAAAABYAAIAAAADAAAAAABZAAIAAAACAAAAAABaAAIAAAADAAEAAABbAAIAAAAAAAAAAABcAAIAAAABAAAAAABdAAIAAAABAAEAAABdAAEAAAADAAAAAABdAAAAAAACAAAAAABdAP//AAAAAAEAAABdAP7/AAACAAEAAABdAP3/AAACAAAAAABdAPz/AAADAAEAAABdAPv/AAAAAAEAAABdAPr/AAABAAAAAABdAPn/AAAAAAAAAABdAPL/AAADAAEAAABdAPH/AAADAAEAAABdAPD/AAABAAEAAABdAO//AAACAAAAAABdAPP/AAAAAAAAAABdAPT/AAACAAAAAABdAPX/AAAAAAEAAABdAPb/AAADAAEAAABdAPf/AAADAAAAAABdAPj/AAABAAAAAABdAO7/AAACAAAAAABdAOj/AAABAAAAAABdAOf/AAABAAAAAABdAOb/AAAAAAEAAABdAOX/AAAAAAAAAABdAOT/AAADAAAAAABdAOn/AAABAAEAAABdAO3/AAAAAAEAAABdAOz/AAAAAAAAAABdAOv/AAACAAAAAABdAOr/AAACAAAAAAD//wIAAAAAAAEAAAD+/wIAAAADAAAAAAD9/wIAAAABAAAAAAD8/wIAAAABAAAAAAD7/wIAAAADAAEAAAD6/wIAAAAAAAAAAAD5/wIAAAABAAEAAAD4/wIAAAABAAAAAAD3/wIAAAADAAEAAAD2/wIAAAAAAAEAAAD1/wIAAAACAAAAAAD0/wIAAAAAAAEAAADz/wIAAAAAAAEAAADy/wIAAAACAAEAAADx/wIAAAACAAAAAADw/wIAAAAAAAAAAADv/wIAAAABAAAAAADu/wIAAAABAAAAAADt/wIAAAABAAAAAADs/wIAAAADAAEAAADr/wIAAAADAAAAAADq/wIAAAACAAAAAADp/wIAAAADAAEAAADo/wIAAAAAAAAAAADn/wIAAAAAAAAAAADn/wEAAAADAAAAAADn/wAAAAAAAAAAAADn////AAAAAAEAAADn//7/AAAAAAAAAADn//3/AAADAAEAAADn//z/AAAAAAEAAADn//v/AAAAAAEAAADn//r/AAABAAEAAADn//n/AAACAAAAAADn//j/AAABAAEAAADn//f/AAADAAAAAADn//b/AAADAAEAAADn//X/AAADAAAAAADn//T/AAABAAAAAADn/+r/AAADAAEAAADn/+n/AAAAAAAAAADn/+j/AAACAAAAAADn/+f/AAACAAEAAADn/+b/AAADAAAAAADn/+X/AAACAAEAAADn/+T/AAAAAAEAAADn/+P/AAADAAAAAADn/+v/AAACAAEAAADn/+z/AAABAAEAAADn/+3/AAAAAAAAAADn/+7/AAABAAEAAADn/+//AAABAAAAAADn//D/AAABAAAAAADn//H/AAADAAEAAADn//L/AAAAAAEAAADn//P/AAACAAEAAAAOAAMAAAACAAEAAAAOAAQAAAADAAEAAAAOAAUAAAAAAAAAAAAOAAYAAAADAAAAAAAOAAcAAAADAAEAAAAPAAMAAAAAAAAAAAAPAAQAAAABAAAAAAAPAAUAAAACAAAAAAAPAAYAAAAAAAEAAAAPAAcAAAACAAAAAAAQAAMAAAABAAAAAAAQAAQAAAABAAEAAAAQAAUAAAABAAEAAAAQAAYAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAgAAAABAAEAAAANAAMAAAADAAEAAAAMAAIAAAABAAAAAAALAAIAAAAAAAAAAAAKAAIAAAACAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAABAAAAAAAKAAMAAAACAAEAAAALAAMAAAAAAAAAAAAMAAMAAAACAAEAAAANAAIAAAACAAEAAAALAAQAAAAAAAAAAAAKAAQAAAACAAEAAAAMAAQAAAACAAAAAAANAAQAAAABAAAAAAAJAAQAAAABAAEAAAAJAAUAAAADAAEAAAAKAAUAAAACAAAAAAALAAUAAAADAAAAAAAMAAUAAAACAAEAAAANAAUAAAACAAAAAAAFAAYAAAAAAAEAAAAGAAYAAAABAAAAAAAHAAYAAAAAAAEAAAAIAAYAAAACAAEAAAAJAAYAAAADAAAAAAAKAAYAAAAAAAEAAAALAAYAAAAAAAEAAAAMAAYAAAAAAAEAAAANAAYAAAABAAEAAAAHAAcAAAACAAAAAAAIAAcAAAABAAAAAAAJAAcAAAADAAEAAAAKAAcAAAABAAEAAAALAAcAAAADAAAAAAAMAAcAAAABAAAAAAANAAcAAAACAAAAAAAMAAgAAAACAAAAAAANAAgAAAACAAEAAAAOAAgAAAABAAEAAAALAAgAAAACAAAAAAAKAAgAAAABAAEAAAAHAAgAAAADAAEAAAAGAAgAAAADAAAAAAAIAAgAAAACAAEAAAAJAAgAAAABAAEAAAAPAAgAAAABAAAAAAAFAAcAAAAAAAEAAAAEAAcAAAACAAAAAAAEAAYAAAAAAAEAAAADAAYAAAADAAAAAAACAAYAAAABAAEAAAABAAYAAAAAAAEAAAAAAAYAAAACAAAAAAAAAAcAAAAAAAAAAAD//wcAAAABAAAAAAAAAAgAAAAAAAEAAAABAAgAAAAAAAAAAAACAAgAAAABAAEAAAABAAcAAAACAAAAAAACAAcAAAACAAAAAAADAAcAAAACAAEAAAAGAAcAAAACAAAAAAAFAAgAAAAAAAAAAAAEAAgAAAAAAAEAAAADAAgAAAACAAAAAAAHAAEAAAACAAAAAAAHAAAAAAACAAAAAAAHAP//AAAAAAEAAAAHAP7/AAABAAEAAAAHAP3/AAACAAAAAAAHAPz/AAACAAAAAAAIAPz/AAAAAAEAAAAIAP3/AAACAAEAAAAIAP7/AAABAAAAAAAIAP//AAAAAAAAAAAIAAAAAAABAAEAAAAIAAEAAAABAAEAAAAEAP//AAACAAEAAAAEAAAAAAAAAAEAAAAEAAEAAAAAAAAAAAADAAEAAAAAAAEAAAADAAAAAAABAAAAAAADAP//AAAAAAEAAAALAPr/AAABAAAAAAAMAPr/AAADAAAAAAANAPr/AAABAAAAAAAOAPr/AAAAAAAAAAAPAPr/AAAAAAAAAAAQAPr/AAABAAAAAAARAPr/AAABAAAAAAARAPv/AAACAAAAAAAQAPv/AAACAAAAAAAPAPv/AAADAAEAAAAOAPv/AAACAAAAAAANAPv/AAACAAAAAAAMAPv/AAACAAEAAAALAPv/AAAAAAEAAAALAPz/AAACAAEAAAALAP3/AAABAAAAAAALAP7/AAABAAEAAAALAP//AAABAAEAAAALAAAAAAAAAAAAAAAMAPz/AAACAAAAAAAMAP3/AAAAAAAAAAAMAP7/AAABAAAAAAAMAP//AAACAAEAAAAMAAAAAAABAAAAAAAMAAEAAAADAAEAAAALAAEAAAABAAEAAAANAPz/AAABAAEAAAANAP3/AAACAAAAAAANAP7/AAABAAEAAAANAP//AAACAAAAAAANAAAAAAABAAAAAAANAAEAAAAAAAAAAAAOAPz/AAABAAEAAAAOAP3/AAACAAEAAAAOAP7/AAAAAAEAAAAOAP//AAAAAAAAAAAOAAAAAAACAAAAAAAOAAEAAAADAAEAAAAPAPz/AAAAAAEAAAAPAP3/AAAAAAAAAAAPAP7/AAAAAAEAAAAPAP//AAAAAAEAAAAPAAAAAAABAAAAAAAPAAEAAAADAAEAAAAQAP3/AAABAAAAAAAQAP7/AAACAAEAAAAQAP//AAABAAEAAAAQAAAAAAABAAEAAAAQAPz/AAABAAEAAAARAPz/AAACAAAAAAARAP3/AAADAAEAAAARAP7/AAAAAAEAAAARAP//AAACAAAAAAARAAAAAAADAAEAAAAQAAEAAAABAAEAAAARAAEAAAACAAEAAAAHAPH/AAABAAEAAAAHAPL/AAADAAEAAAAHAPP/AAADAAAAAAAHAPT/AAACAAAAAAAHAPX/AAACAAEAAAAHAPb/AAABAAAAAAAHAPf/AAADAAAAAAAIAPH/AAABAAAAAAAIAPL/AAACAAAAAAAIAPP/AAACAAAAAAAIAPT/AAAAAAEAAAAIAPX/AAADAAEAAAAIAPb/AAAAAAEAAAAIAPf/AAABAAAAAAALAPH/AAADAAEAAAALAPL/AAAAAAEAAAALAPP/AAADAAEAAAALAPT/AAACAAAAAAALAPX/AAABAAAAAAALAPb/AAACAAEAAAALAPf/AAACAAAAAAAMAPH/AAACAAEAAAAMAPL/AAABAAAAAAAMAPP/AAAAAAAAAAAMAPT/AAADAAEAAAAMAPX/AAACAAEAAAAMAPb/AAACAAEAAAAMAPf/AAADAAEAAAD+//H/AAAAAAAAAAD+//L/AAADAAEAAAD///H/AAADAAAAAAD///L/AAADAAAAAAAAAPH/AAABAAAAAAAAAPL/AAABAAEAAAABAPH/AAABAAEAAAABAPL/AAACAAEAAAACAPH/AAADAAAAAAACAPL/AAABAAEAAAADAPH/AAABAAAAAAADAPL/AAACAAEAAAAEAPH/AAABAAEAAAAEAPL/AAADAAAAAAAFAPH/AAACAAAAAAAFAPL/AAABAAEAAAAGAPH/AAACAAEAAAAGAPL/AAABAAAAAAD9//j/AAAAAAEAAAD9//n/AAACAAAAAAD+//j/AAAAAAAAAAD+//n/AAADAAEAAAD///j/AAAAAAAAAAD///n/AAABAAEAAAAAAPj/AAAAAAAAAAAAAPn/AAACAAEAAAD7//H/AAAAAAAAAAD7//L/AAAAAAEAAAD8//H/AAAAAAEAAAD8//L/AAABAAAAAAD9//H/AAADAAEAAAD9//L/AAAAAAEAAAD5//H/AAAAAAAAAAD5//L/AAACAAAAAAD5//P/AAABAAEAAAD5//T/AAABAAEAAAD5//X/AAAAAAAAAAD5//b/AAABAAAAAAD5//f/AAAAAAAAAAD5//j/AAADAAEAAAD5//n/AAABAAEAAAD6//H/AAAAAAEAAAD6//L/AAAAAAEAAAD6//P/AAAAAAAAAAD6//T/AAACAAEAAAD6//X/AAACAAAAAAD6//b/AAADAAAAAAD6//f/AAABAAEAAAD6//j/AAAAAAEAAAD6//n/AAADAAEAAAD5//r/AAAAAAEAAAD5//v/AAABAAAAAAD5//z/AAADAAEAAAD5//3/AAADAAEAAAD5//7/AAACAAEAAAD5////AAABAAEAAAD6//r/AAAAAAEAAAD6//v/AAABAAEAAAD6//z/AAADAAEAAAD6//3/AAACAAAAAAD6//7/AAAAAAEAAAD6////AAADAAEAAAD9/wAAAAAEAAAAAAD9/wEAAAAEAAEAAAD///b/AAAEAAAAAAD///f/AAAEAAEAAAAOAPn/AAAFAAEAAAAJAPb/AAAFAAAAAAAFAAEAAAAFAAAAAGAGAAEAAAAFAAAAAGAJAAEAAAAFAAAAAGAKAAEAAAAFAAAAAGA=")
+tile_set = ExtResource("1_t7kht")
+
+[node name="Player" type="Node2D" parent="." unique_id=868418175]
+
+[node name="CharacterBody2D" type="CharacterBody2D" parent="Player" unique_id=1131700263 node_paths=PackedStringArray("DebugTextLabel")]
+position = Vector2(1, 0)
+safe_margin = 0.16
+script = ExtResource("2_oekxy")
+FloatingMovePenalty = 0.8
+JumpStrengthDecay = 4.0
+MovementDecay = 0.01
+MovementScale = 32.0
+JumpScale = 256.0
+DebugTextLabel = NodePath("Label")
+Gravity = 9.81
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Player/CharacterBody2D" unique_id=1846234720]
+position = Vector2(0, 5)
+shape = SubResource("CapsuleShape2D_oekxy")
+
+[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Player/CharacterBody2D" unique_id=1137300855]
+texture_filter = 1
+position = Vector2(0, 3)
+sprite_frames = ExtResource("2_wq5k4")
+animation = &"walk"
+
+[node name="Camera2D" type="Camera2D" parent="Player/CharacterBody2D" unique_id=1068565115]
+zoom = Vector2(3, 3)
+position_smoothing_enabled = true
+
+[node name="Label" type="Label" parent="Player/CharacterBody2D" unique_id=436935745]
+offset_left = 22.0
+offset_top = -75.0
+offset_right = 139.0
+offset_bottom = 36.0
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1465666014]
+environment = ExtResource("2_44w6l")
+camera_attributes = ExtResource("3_wq5k4")
+compositor = ExtResource("4_oekxy")
diff --git a/objects/tilemap/tmj/demo.tmj b/objects/tilemap/tmj/demo.tmj
new file mode 100644
index 0000000..482e174
--- /dev/null
+++ b/objects/tilemap/tmj/demo.tmj
@@ -0,0 +1,286 @@
+{ "compressionlevel":-1,
+ "height":40,
+ "infinite":false,
+ "layers":[
+ {
+ "class":"static",
+ "data":[1, 3, 2, 17, 17, 17, 17, 3, 18, 2, 4, 20, 18, 1, 3, 2, 19, 17, 1, 1, 4, 17, 1, 17, 3, 19, 2, 3, 18, 19,
+ 17, 18, 20, 18, 1, 20, 2, 20, 17, 18, 4, 17, 3, 1, 17, 2, 18, 3, 1, 4, 2, 2, 2, 2, 1, 2, 17, 19, 3, 19,
+ 1, 20, 2, 19, 3, 1, 20, 18, 19, 17, 2, 18, 1, 2, 4, 4, 1, 3, 20, 1, 1, 0, 0, 0, 0, 0, 0, 0, 4, 2,
+ 20, 3, 1, 17, 1, 1, 4, 20, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 17, 0, 0, 0, 0, 0, 0, 0, 3, 2,
+ 20, 1, 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, 20, 20,
+ 4, 1, 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, 4, 18,
+ 18, 3, 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, 17,
+ 1, 3, 19, 19, 19, 20, 1, 4, 4, 20, 0, 0, 19, 3, 3, 20, 4, 19, 4, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 17,
+ 19, 19, 3, 19, 18, 1, 4, 18, 4, 17, 0, 0, 19, 17, 2, 1, 1, 2, 17, 0, 0, 20, 2, 0, 0, 0, 0, 0, 2, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 1, 18, 4, 20, 0, 0, 0, 18, 19, 0, 0, 0, 0, 0, 20, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 19, 3, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 3, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 20, 17, 0, 0, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 19, 18,
+ 20, 1, 17, 2, 19, 3, 4, 2, 4, 19, 2, 17, 17, 19, 0, 0, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 0, 0, 17, 1,
+ 17, 18, 4, 19, 3, 20, 1, 4, 1, 4, 19, 4, 3, 20, 0, 0, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 4, 2,
+ 1, 18, 20, 2, 20, 17, 17, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0, 0, 18, 4,
+ 18, 17, 2, 18, 1, 17, 20, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 17, 19, 20, 0, 0, 0, 0, 0, 17, 19,
+ 19, 2, 2, 19, 17, 1, 2, 19, 3, 18, 1, 19, 4, 3, 2, 2, 2, 2, 3, 3, 20, 19, 1, 0, 0, 0, 0, 0, 4, 20,
+ 2, 18, 19, 1, 20, 2, 4, 19, 2, 17, 3, 1, 17, 20, 4, 17, 4, 1, 19, 4, 3, 20, 18, 0, 0, 0, 0, 0, 1, 4,
+ 1, 4, 17, 17, 20, 19, 2, 2, 20, 20, 20, 20, 19, 4, 17, 20, 20, 17, 20, 1, 17, 3, 1, 0, 0, 0, 0, 0, 2, 4,
+ 19, 18, 3, 2, 20, 17, 2, 1, 4, 19, 1, 3, 1, 20, 2, 1, 19, 1, 20, 17, 17, 17, 19, 0, 0, 0, 0, 0, 2, 3,
+ 17, 0, 0, 18, 3, 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,
+ 20, 0, 0, 18, 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,
+ 1, 0, 0, 17, 4, 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, 19, 20, 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,
+ 4, 0, 0, 18, 17, 0, 0, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 0, 0, 4, 19, 0, 0, 3, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 1, 3, 0, 0, 1, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 0, 2, 3, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 3, 2, 0, 0, 17, 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 17, 2, 19, 17, 3, 0, 0,
+ 19, 0, 0, 18, 1, 0, 0, 17, 18, 0, 0, 0, 0, 0, 4, 19, 0, 0, 0, 0, 0, 0, 0, 19, 17, 3, 1, 20, 0, 0,
+ 18, 0, 0, 3, 2, 0, 0, 3, 1, 0, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 19, 4, 17, 0, 0, 0,
+ 20, 0, 0, 18, 18, 0, 0, 18, 3, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 3, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 19, 18, 20, 0, 0, 0,
+ 19, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 3, 18, 0, 0, 0, 0, 0, 0, 0, 0, 18, 1, 3, 0, 0, 0,
+ 17, 0, 0, 0, 0, 0, 0, 20, 3, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 4, 0, 0, 0,
+ 18, 0, 0, 0, 0, 0, 0, 20, 18, 0, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 18, 17, 20, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 2, 19, 0, 0, 0, 0, 0, 4, 17, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 2, 20, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 20, 0, 0, 0,
+ 18, 2, 2, 3, 4, 0, 0, 18, 19, 0, 0, 0, 0, 0, 2, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 0, 0, 0,
+ 3, 18, 19, 1, 17, 0, 0, 19, 20, 0, 0, 0, 0, 0, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 3, 17, 18, 0, 0, 0],
+ "height":40,
+ "id":1,
+ "name":"Static",
+ "opacity":1,
+ "type":"tilelayer",
+ "visible":true,
+ "width":30,
+ "x":0,
+ "y":0
+ },
+ {
+ "class":"dynamic",
+ "data":[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, 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 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, 18, 19, 20, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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],
+ "height":40,
+ "id":4,
+ "name":"Dynamic",
+ "opacity":1,
+ "type":"tilelayer",
+ "visible":true,
+ "width":30,
+ "x":0,
+ "y":0
+ },
+ {
+ "class":"dynobj",
+ "draworder":"topdown",
+ "id":3,
+ "name":"Moving",
+ "objects":[
+ {
+ "height":45,
+ "id":1,
+ "name":"rmv(0,4)",
+ "opacity":1,
+ "rotation":0,
+ "type":"",
+ "visible":true,
+ "width":104,
+ "x":585,
+ "y":745
+ },
+ {
+ "ellipse":true,
+ "height":70.6666666666667,
+ "id":4,
+ "name":"",
+ "opacity":1,
+ "rotation":0,
+ "type":"",
+ "visible":true,
+ "width":78,
+ "x":594,
+ "y":825.333333333333
+ },
+ {
+ "capsule":true,
+ "height":150,
+ "id":5,
+ "name":"",
+ "opacity":1,
+ "rotation":0,
+ "type":"",
+ "visible":true,
+ "width":150,
+ "x":580.182572614108,
+ "y":896.556547619048
+ },
+ {
+ "height":0,
+ "id":6,
+ "name":"",
+ "opacity":1,
+ "polygon":[
+ {
+ "x":0,
+ "y":0
+ },
+ {
+ "x":62,
+ "y":-63.3333333333333
+ },
+ {
+ "x":126,
+ "y":0.666666666666742
+ },
+ {
+ "x":62,
+ "y":0.666666666666742
+ },
+ {
+ "x":62,
+ "y":32.6666666666667
+ },
+ {
+ "x":-2,
+ "y":32.6666666666667
+ }],
+ "rotation":0,
+ "type":"",
+ "visible":true,
+ "width":0,
+ "x":738,
+ "y":767.333333333333
+ }],
+ "opacity":1,
+ "type":"objectgroup",
+ "visible":true,
+ "x":0,
+ "y":0
+ },
+ {
+ "draworder":"topdown",
+ "id":5,
+ "name":"Enemy",
+ "objects":[
+ {
+ "height":0,
+ "id":3,
+ "name":"zombie",
+ "opacity":1,
+ "point":true,
+ "rotation":0,
+ "type":"",
+ "visible":true,
+ "width":0,
+ "x":768,
+ "y":864
+ }],
+ "opacity":1,
+ "type":"objectgroup",
+ "visible":true,
+ "x":0,
+ "y":0
+ },
+ {
+ "data":[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, 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, 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, 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, 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, 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, 0, 0, 5, 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, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 22, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 5, 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, 0, 0, 21, 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, 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, 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, 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, 5, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 0, 0, 0,
+ 0, 0, 0, 22, 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, 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, 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, 0, 0, 0, 0, 0],
+ "height":40,
+ "id":2,
+ "name":"Decorations",
+ "opacity":1,
+ "type":"tilelayer",
+ "visible":true,
+ "width":30,
+ "x":0,
+ "y":0
+ }],
+ "nextlayerid":6,
+ "nextobjectid":7,
+ "orientation":"orthogonal",
+ "renderorder":"right-down",
+ "tiledversion":"1.12.1",
+ "tileheight":32,
+ "tilesets":[
+ {
+ "firstgid":1,
+ "source":"..\/..\/..\/..\/..\/..\/Documents\/wrplat\/pool.tsx"
+ }],
+ "tilewidth":32,
+ "type":"map",
+ "version":"1.10",
+ "width":30
+}
\ No newline at end of file
diff --git a/project.godot b/project.godot
new file mode 100644
index 0000000..19d7ae9
--- /dev/null
+++ b/project.godot
@@ -0,0 +1,60 @@
+; 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="WrplatGodot"
+run/main_scene="uid://r2lb1ommvj6u"
+config/features=PackedStringArray("4.6", "C#", "Forward Plus")
+config/icon="res://icon.svg"
+
+[dotnet]
+
+project/assembly_name="WrplatGodot"
+
+[input]
+
+move_right={
+"deadzone": 0.2,
+"events": [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":4194321,"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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
+]
+}
+move_left={
+"deadzone": 0.2,
+"events": [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":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)
+]
+}
+jump={
+"deadzone": 0.2,
+"events": [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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
+]
+}
+look_up={
+"deadzone": 0.2,
+"events": [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":4194320,"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
+]
+}
+look_down={
+"deadzone": 0.2,
+"events": [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":4194322,"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":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null)
+]
+}
+
+[physics]
+
+3d/physics_engine="Jolt Physics"
+
+[rendering]
+
+rendering_device/driver.windows="d3d12"
diff --git a/sprites/atlas/demoman_walking.png b/sprites/atlas/demoman_walking.png
new file mode 100644
index 0000000..a310461
Binary files /dev/null and b/sprites/atlas/demoman_walking.png differ
diff --git a/sprites/atlas/demoman_walking.png.import b/sprites/atlas/demoman_walking.png.import
new file mode 100644
index 0000000..89ceffe
--- /dev/null
+++ b/sprites/atlas/demoman_walking.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv4gsgya7wp4d"
+path="res://.godot/imported/demoman_walking.png-9be9634caac03406a9e7d7741131c5f4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://sprites/atlas/demoman_walking.png"
+dest_files=["res://.godot/imported/demoman_walking.png-9be9634caac03406a9e7d7741131c5f4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/sprites/atlas/pool.png b/sprites/atlas/pool.png
new file mode 100644
index 0000000..a9d1c99
Binary files /dev/null and b/sprites/atlas/pool.png differ
diff --git a/sprites/atlas/pool.png.import b/sprites/atlas/pool.png.import
new file mode 100644
index 0000000..a6cfe24
--- /dev/null
+++ b/sprites/atlas/pool.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cgr7fx5emk037"
+path="res://.godot/imported/pool.png-b13073abd16d5b4aa7f02817fa2d5dca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://sprites/atlas/pool.png"
+dest_files=["res://.godot/imported/pool.png-b13073abd16d5b4aa7f02817fa2d5dca.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/sprites/tilesets/pool.tres b/sprites/tilesets/pool.tres
new file mode 100644
index 0000000..efa0322
--- /dev/null
+++ b/sprites/tilesets/pool.tres
@@ -0,0 +1,72 @@
+[gd_resource type="TileSet" format=3 uid="uid://bk7cbdppa3j6a"]
+
+[ext_resource type="Texture2D" uid="uid://cgr7fx5emk037" path="res://sprites/atlas/pool.png" id="1_otsg2"]
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_blkrv"]
+texture = ExtResource("1_otsg2")
+texture_region_size = Vector2i(32, 32)
+0:0/0 = 0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+1:0/0 = 0
+1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+2:0/0 = 0
+2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+3:0/0 = 0
+3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+4:0/0 = 0
+5:0/0 = 0
+6:0/0 = 0
+7:0/0 = 0
+8:0/0 = 0
+9:0/0 = 0
+10:0/0 = 0
+11:0/0 = 0
+0:1/0 = 0
+0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 16, -16, 16, 16)
+1:1/0 = 0
+1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+2:1/0 = 0
+2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+3:1/0 = 0
+3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+4:1/0 = 0
+5:1/0 = 0
+6:1/0 = 0
+7:1/0 = 0
+8:1/0 = 0
+9:1/0 = 0
+10:1/0 = 0
+11:1/0 = 0
+0:2/0 = 0
+1:2/0 = 0
+2:2/0 = 0
+3:2/0 = 0
+4:2/0 = 0
+5:2/0 = 0
+6:2/0 = 0
+7:2/0 = 0
+8:2/0 = 0
+9:2/0 = 0
+10:2/0 = 0
+11:2/0 = 0
+0:3/0 = 0
+1:3/0 = 0
+2:3/0 = 0
+3:3/0 = 0
+4:3/0 = 0
+5:3/0 = 0
+6:3/0 = 0
+7:3/0 = 0
+8:3/0 = 0
+9:3/0 = 0
+10:3/0 = 0
+11:3/0 = 0
+0:4/0 = 0
+1:4/0 = 0
+0:5/0 = 0
+1:5/0 = 0
+
+[resource]
+tile_size = Vector2i(32, 32)
+physics_layer_0/collision_layer = 1
+sources/0 = SubResource("TileSetAtlasSource_blkrv")
diff --git a/sprites/tilesets/tsj/pool.tsj b/sprites/tilesets/tsj/pool.tsj
new file mode 100644
index 0000000..dbfc4bd
--- /dev/null
+++ b/sprites/tilesets/tsj/pool.tsj
@@ -0,0 +1,14 @@
+{ "columns":16,
+ "image":"..\/..\/..\/..\/..\/..\/Documents\/wrplat\/art\/tilesets\/pool.png",
+ "imageheight":512,
+ "imagewidth":512,
+ "margin":0,
+ "name":"pool",
+ "spacing":0,
+ "tilecount":256,
+ "tiledversion":"1.12.1",
+ "tileheight":32,
+ "tilewidth":32,
+ "type":"tileset",
+ "version":"1.10"
+}
\ No newline at end of file
diff --git a/src/components/PlayerPhysicsController.cs b/src/components/PlayerPhysicsController.cs
new file mode 100644
index 0000000..284c6b0
--- /dev/null
+++ b/src/components/PlayerPhysicsController.cs
@@ -0,0 +1,56 @@
+using Godot;
+using System;
+using System.Diagnostics;
+
+public partial class PlayerPhysicsController : CharacterBody2D {
+ [Export]
+ public float FloatingMovePenalty { get; set; } = 0.1f;
+ [Export]
+ public float FloatingJumpPenalty { get; set; } = 0.1f;
+ [Export]
+ public float JumpStrengthDecay { get; set; } = 2;
+ [Export]
+ public float MovementDecay { get; set; } = 2;
+ [Export]
+ public float MovementScale { get; set; } = 10;
+ [Export]
+ public float JumpScale { get; set; } = 12;
+
+ [Export]
+ public Label DebugTextLabel { get; set; }
+
+ [Export]
+ public float Gravity { get; set; } = 9.8f;
+
+ private float _timeInFlight = 0;
+
+ public override void _PhysicsProcess(double delta) {
+ var xAxis = Input.GetAxis("move_left", "move_right") * MovementScale;
+ var yAxis = Input.GetAxis("look_up", "look_down");
+ var jumpStrength = -Input.GetActionStrength("jump") * JumpScale;
+
+ var grounded = this.IsOnFloor();
+ if (!grounded) {
+ xAxis *= FloatingMovePenalty;
+ jumpStrength *= FloatingJumpPenalty;
+ }
+
+ if (grounded && jumpStrength < 0)
+ _timeInFlight = 0;
+
+ jumpStrength *= Mathf.Exp(-JumpStrengthDecay * _timeInFlight);
+ xAxis *= Mathf.Exp(-MovementDecay * Mathf.Abs(Velocity.X));
+
+
+ var moveVector = new Vector2(xAxis, Gravity + jumpStrength);
+ DebugTextLabel.Text = $"grounded: {grounded}\nmv: {moveVector}\njumpStrength: {jumpStrength}\ntimeInFlight: {_timeInFlight}";
+ Velocity += moveVector;
+ MoveAndSlide();
+
+ if (!grounded)
+ _timeInFlight += (float)delta;
+ base._Process(delta);
+
+ }
+
+}
diff --git a/src/components/PlayerPhysicsController.cs.uid b/src/components/PlayerPhysicsController.cs.uid
new file mode 100644
index 0000000..99f70e3
--- /dev/null
+++ b/src/components/PlayerPhysicsController.cs.uid
@@ -0,0 +1 @@
+uid://biicefgcvdc2x