Author SHA1 Message Date
qwsdcvghyu89 562d0da079 Added more grassy tile variants
Release / Export Game (push) Successful in 1m43s
2026-06-15 07:51:19 +10:00
qwsdcvghyu89 6b9bb6da5a Audio additions: jump.ogg - comitting to continue development in another environment.
Release / Export Game (push) Successful in 2m0s
2026-06-15 00:07:56 +10:00
qwsdcvghyu89 e252a94f46 Added grassy tiles
Release / Export Game (push) Successful in 2m12s
2026-06-14 23:21:39 +10:00
qwsdcvghyu89 3254d821c1 Added normal and specular maps; added point lights to demo scene...
Release / Export Game (push) Successful in 3m53s
...to demonstrate dynamic lighting.
2026-06-14 20:08:32 +10:00
qwsdcvghyu89 1813800db4 Fixed merge commit - discarded demo.tscn
Release / Export Game (push) Successful in 1m42s
2026-06-14 18:37:51 +10:00
qwsdcvghyu89 744c750638 Added new jump mechanics
Release / Export Game (push) Successful in 2m2s
2026-06-14 18:27:29 +10:00
qwsdcvghyu89 d549edbf15 Added a tiny bit of air control and a turnback jump trick.
Release / Export Game (push) Successful in 1m58s
2026-06-11 20:48:48 +10:00
qwsdcvghyu89 a4d73f8697 Final basic ground and jump physics tweaks.
Release / Export Game (push) Successful in 1m57s
2026-06-11 15:25:50 +10:00
qwsdcvghyu89 a0a288eee2 Merge branch 'main' of https://git.main.qwsdcvghyu.com/riley/wrplat-godot
Release / Export Game (push) Successful in 1m58s
Merged animations into main branch
2026-06-11 14:45:07 +10:00
qwsdcvghyu89 6ee79020ef Added new animations 2026-06-11 14:43:51 +10:00
qwsdcvghyu89 3ccf193a7c wip - fixing movement physics 2026-06-11 14:43:13 +10:00
qwsdcvghyu89 be6cad911c Added new animations
Release / Export Game (push) Successful in 1m57s
2026-06-09 22:38:07 +10:00
qwsdcvghyu89 77bc341f9b Changed run/walk to be based more off of momentum. Fixed jump bug.
Release / Export Game (push) Successful in 1m57s
2026-06-09 04:00:33 +10:00
qwsdcvghyu89 b18283ed9d Changed debug information to be hidden by default.
Release / Export Game (push) Successful in 1m59s
2026-06-07 23:19:46 +10:00
qwsdcvghyu89 eca85aa2d0 Changed LangVersion back to avoid export issues and removed experimental language features.
Release / Export Game (push) Successful in 2m0s
2026-06-07 23:15:37 +10:00
qwsdcvghyu89 b55d2d87c8 Fixed export_presets.cfg
Release / Export Game (push) Successful in 1m53s
2026-06-07 23:13:15 +10:00
qwsdcvghyu89 77d850f95e Improved platforming jump physics and added music autoplay feature. Added joystick support. Added dimmed background tiling.
Release / Export Game (push) Successful in 2m22s
2026-06-07 23:02:51 +10:00
qwsdcvghyu89 ba2ce768e4 Changed macOSX build export path to end with .dmg instead of .app
Release / Export Game (push) Failing after 1m21s
2026-06-06 22:30:29 +10:00
67 changed files with 4663 additions and 80 deletions
+1
View File
@@ -3,5 +3,6 @@
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net9.0</TargetFramework> <TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net9.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading> <EnableDynamicLoading>true</EnableDynamicLoading>
<LangVersion>preview</LangVersion>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016-2023 The Godot Engine community
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
[configuration]
entry_symbol = "git_plugin_init"
compatibility_minimum = "4.2.0"
[libraries]
linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so"
macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib"
windows.editor.x86_64 = "windows/libgit_plugin.windows.editor.x86_64.dll"
@@ -0,0 +1 @@
uid://cunr88y1kycok
+2 -2
View File
@@ -27,7 +27,7 @@ script_export_mode=2
custom_template/debug="" custom_template/debug=""
custom_template/release="" custom_template/release=""
debug/export_console_wrapper=1 debug/export_console_wrapper=1
binary_format/embed_pck=false binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
texture_format/etc2_astc=false texture_format/etc2_astc=false
shader_baker/enabled=true shader_baker/enabled=true
@@ -365,7 +365,7 @@ script_export_mode=2
custom_template/debug="" custom_template/debug=""
custom_template/release="" custom_template/release=""
debug/export_console_wrapper=1 debug/export_console_wrapper=1
binary_format/embed_pck=false binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
texture_format/etc2_astc=false texture_format/etc2_astc=false
shader_baker/enabled=false shader_baker/enabled=false
+9
View File
@@ -0,0 +1,9 @@
[gd_resource type="CanvasTexture" format=3 uid="uid://b78uwnnyovqci"]
[ext_resource type="Texture2D" uid="uid://n6b4udvjt2pt" path="res://sprites/atlas/diffuse/pool.diffuse.png" id="1_v3cld"]
[ext_resource type="Texture2D" uid="uid://cs2jr54egxwey" path="res://sprites/atlas/normal/pool.normal.png" id="2_srhaa"]
[resource]
diffuse_texture = ExtResource("1_v3cld")
normal_texture = ExtResource("2_srhaa")
specular_shininess = 0.35
+46
View File
@@ -0,0 +1,46 @@
[gd_resource type="SpriteFrames" format=3 uid="uid://trcnb1ubmx5e"]
[ext_resource type="Texture2D" uid="uid://wli5w6t8y6se" path="res://sprites/atlas/jump_point_radiates.png" id="1_3yoq3"]
[sub_resource type="AtlasTexture" id="AtlasTexture_aokl3"]
atlas = ExtResource("1_3yoq3")
region = Rect2(0, 32, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_xd81c"]
atlas = ExtResource("1_3yoq3")
region = Rect2(0, 64, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_u618n"]
atlas = ExtResource("1_3yoq3")
region = Rect2(0, 96, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_twrqh"]
atlas = ExtResource("1_3yoq3")
region = Rect2(32, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_vrk17"]
atlas = ExtResource("1_3yoq3")
region = Rect2(0, 0, 32, 32)
[resource]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_aokl3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xd81c")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_u618n")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_twrqh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vrk17")
}],
"loop": true,
"name": &"default",
"speed": 16.0
}]
+50 -8
View File
@@ -1,35 +1,77 @@
[gd_resource type="SpriteFrames" format=3 uid="uid://doxc4pl5hvs6k"] [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"] [ext_resource type="Texture2D" uid="uid://cl3uy4d6lgspe" path="res://sprites/man_falls.png" id="1_kdeld"]
[ext_resource type="Texture2D" uid="uid://dy7fh0eg6qulr" path="res://sprites/atlas/flats/demoman_idles.png" id="2_kdeld"]
[ext_resource type="Texture2D" uid="uid://cr5bdv3hgmd4q" path="res://sprites/man_jumps.png" id="3_a1t44"]
[ext_resource type="Texture2D" uid="uid://bv4gsgya7wp4d" path="res://sprites/atlas/flats/demoman_walking.png" id="4_a1t44"]
[sub_resource type="AtlasTexture" id="AtlasTexture_w1sc6"]
atlas = ExtResource("2_kdeld")
region = Rect2(0, 0, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_mcxxx"]
atlas = ExtResource("2_kdeld")
region = Rect2(0, 64, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_nf227"]
atlas = ExtResource("2_kdeld")
region = Rect2(32, 0, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_sbabb"]
atlas = ExtResource("2_kdeld")
region = Rect2(32, 64, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_c2ath"] [sub_resource type="AtlasTexture" id="AtlasTexture_c2ath"]
atlas = ExtResource("1_1t22f") atlas = ExtResource("4_a1t44")
region = Rect2(0, 0, 32, 64) region = Rect2(0, 0, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_gwfnt"] [sub_resource type="AtlasTexture" id="AtlasTexture_gwfnt"]
atlas = ExtResource("1_1t22f") atlas = ExtResource("4_a1t44")
region = Rect2(0, 64, 32, 64) region = Rect2(0, 64, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_kdeld"] [sub_resource type="AtlasTexture" id="AtlasTexture_kdeld"]
atlas = ExtResource("1_1t22f") atlas = ExtResource("4_a1t44")
region = Rect2(32, 0, 32, 64) region = Rect2(32, 0, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_a1t44"] [sub_resource type="AtlasTexture" id="AtlasTexture_a1t44"]
atlas = ExtResource("1_1t22f") atlas = ExtResource("4_a1t44")
region = Rect2(32, 64, 32, 64) region = Rect2(32, 64, 32, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_k551e"] [sub_resource type="AtlasTexture" id="AtlasTexture_k551e"]
atlas = ExtResource("1_1t22f") atlas = ExtResource("4_a1t44")
region = Rect2(64, 0, 32, 64) region = Rect2(64, 0, 32, 64)
[resource] [resource]
animations = [{ animations = [{
"frames": [], "frames": [{
"duration": 1.0,
"texture": ExtResource("1_kdeld")
}],
"loop": true,
"name": &"fall",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_w1sc6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mcxxx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nf227")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sbabb")
}],
"loop": true, "loop": true,
"name": &"idle", "name": &"idle",
"speed": 5.0 "speed": 5.0
}, { }, {
"frames": [], "frames": [{
"duration": 1.0,
"texture": ExtResource("3_a1t44")
}],
"loop": true, "loop": true,
"name": &"jump", "name": &"jump",
"speed": 5.0 "speed": 5.0
@@ -0,0 +1,4 @@
[gd_resource type="CircleShape2D" format=3 uid="uid://duhxyfwoh6ndb"]
[resource]
radius = 3.0
+6
View File
@@ -0,0 +1,6 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://b4epp5w0awoov"]
[ext_resource type="Shader" uid="uid://dwgy05x43arpb" path="res://src/shaders/dimming_shader.tres" id="1_jm73v"]
[resource]
shader = ExtResource("1_jm73v")
+42
View File
@@ -0,0 +1,42 @@
[gd_scene format=3 uid="uid://xanv3qbl1n2u"]
[sub_resource type="Gradient" id="Gradient_nxkc6"]
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_kfvst"]
gradient = SubResource("Gradient_nxkc6")
fill = 1
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(0.725, 0)
[node name="Light" type="Node2D" unique_id=658403720]
scale = Vector2(3.105, 3.105)
[node name="BackgroundLight" type="PointLight2D" parent="." unique_id=1870867099]
scale = Vector2(3, 3)
color = Color(1, 0.73333335, 0, 1)
energy = 1.5
shadow_enabled = true
shadow_filter = 1
texture = SubResource("GradientTexture2D_kfvst")
height = 15.0
[node name="ForegroundLight" type="PointLight2D" parent="." unique_id=574997062]
scale = Vector2(5, 5)
color = Color(0.93, 0.837, 0, 0.8)
energy = 0.7
shadow_enabled = true
shadow_filter = 1
shadow_item_cull_mask = 2
texture = SubResource("GradientTexture2D_kfvst")
height = 15.0
[node name="ForegroundNOCLight" type="PointLight2D" parent="." unique_id=2045804818]
scale = Vector2(5, 5)
color = Color(0.93, 0.837, 0, 0.8)
energy = 0.7
range_item_cull_mask = 4
shadow_filter = 1
shadow_item_cull_mask = 4
texture = SubResource("GradientTexture2D_kfvst")
height = 15.0
File diff suppressed because one or more lines are too long
+62 -4
View File
@@ -19,37 +19,95 @@ config/icon="res://icon.svg"
project/assembly_name="WrplatGodot" project/assembly_name="WrplatGodot"
[editor]
version_control/plugin_name="GitPlugin"
version_control/autoload_on_startup=true
[input] [input]
move_right={ move_right={
"deadzone": 0.2, "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) "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) , 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)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":true,"script":null)
] ]
} }
move_left={ move_left={
"deadzone": 0.2, "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) "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) , 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)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":true,"script":null)
] ]
} }
jump={ jump={
"deadzone": 0.2, "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) "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)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
] ]
} }
look_up={ look_up={
"deadzone": 0.2, "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) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"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) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":true,"script":null)
] ]
} }
look_down={ look_down={
"deadzone": 0.2, "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) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"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) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":true,"script":null)
] ]
} }
run={
"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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
]
}
skip_music={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":78,"key_label":0,"unicode":78,"location":0,"echo":false,"script":null)
]
}
toggle_debug={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":75,"location":0,"echo":false,"script":null)
]
}
move_up={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":true,"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":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)
]
}
move_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)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
]
}
turn_back={
"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":86,"key_label":0,"unicode":118,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
]
}
[layer_names]
2d_render/layer_1="Backgrounds"
2d_render/layer_2="Foregrounds"
2d_render/layer_3="Foregrounds NOC"
[physics] [physics]
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://fhfma3rrxyfi"
path="res://.godot/imported/Asphodel.wav-f87ecbeaa99b324bd8f5df8f9b0d72e4.sample"
[deps]
source_file="res://sounds/ost/Asphodel.wav"
dest_files=["res://.godot/imported/Asphodel.wav-f87ecbeaa99b324bd8f5df8f9b0d72e4.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://5gnpemu56ac0"
path="res://.godot/imported/Azalea.wav-cbe1be7340fbe8dc3e31528edc546255.sample"
[deps]
source_file="res://sounds/ost/Azalea.wav"
dest_files=["res://.godot/imported/Azalea.wav-cbe1be7340fbe8dc3e31528edc546255.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://0tturucf5gxf"
path="res://.godot/imported/Datura.wav-78725853df39d0ef155db6eea1881728.sample"
[deps]
source_file="res://sounds/ost/Datura.wav"
dest_files=["res://.godot/imported/Datura.wav-78725853df39d0ef155db6eea1881728.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b5cvbx3ypbbho"
path="res://.godot/imported/Hyacinth.wav-32c97df5a6b61df7f68aa21d2c6edfae.sample"
[deps]
source_file="res://sounds/ost/Hyacinth.wav"
dest_files=["res://.godot/imported/Hyacinth.wav-32c97df5a6b61df7f68aa21d2c6edfae.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dkx1v6c7vv0iq"
path="res://.godot/imported/jump.ogg-d217a70c8ca2fe077e37d9f442c771d3.oggvorbisstr"
[deps]
source_file="res://sounds/sfx/jump.ogg"
dest_files=["res://.godot/imported/jump.ogg-d217a70c8ca2fe077e37d9f442c771d3.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://n6b4udvjt2pt"
path="res://.godot/imported/pool.diffuse.png-f15c5d02eff23304ecfbdd590cdc3504.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/atlas/diffuse/pool.diffuse.png"
dest_files=["res://.godot/imported/pool.diffuse.png-f15c5d02eff23304ecfbdd590cdc3504.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dy7fh0eg6qulr"
path="res://.godot/imported/demoman_idles.png-add2b3af5478c463b97d1483e4e33e47.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/atlas/flats/demoman_idles.png"
dest_files=["res://.godot/imported/demoman_idles.png-add2b3af5478c463b97d1483e4e33e47.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

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bv4gsgya7wp4d" uid="uid://bv4gsgya7wp4d"
path="res://.godot/imported/demoman_walking.png-9be9634caac03406a9e7d7741131c5f4.ctex" path="res://.godot/imported/demoman_walking.png-3b471b54b0862aac29ec2aa6d7d5d5d6.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://sprites/atlas/demoman_walking.png" source_file="res://sprites/atlas/flats/demoman_walking.png"
dest_files=["res://.godot/imported/demoman_walking.png-9be9634caac03406a9e7d7741131c5f4.ctex"] dest_files=["res://.godot/imported/demoman_walking.png-3b471b54b0862aac29ec2aa6d7d5d5d6.ctex"]
[params] [params]

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

@@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cgr7fx5emk037" uid="uid://cgr7fx5emk037"
path="res://.godot/imported/pool.png-b13073abd16d5b4aa7f02817fa2d5dca.ctex" path="res://.godot/imported/pool.png-9044908d89edc8b0017e06046d331edd.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://sprites/atlas/pool.png" source_file="res://sprites/atlas/flats/pool.png"
dest_files=["res://.godot/imported/pool.png-b13073abd16d5b4aa7f02817fa2d5dca.ctex"] dest_files=["res://.godot/imported/pool.png-9044908d89edc8b0017e06046d331edd.ctex"]
[params] [params]
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://wli5w6t8y6se"
path="res://.godot/imported/jump_point_radiates.png-1a97dab1296f185bfc3d06015e15ec05.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/atlas/jump_point_radiates.png"
dest_files=["res://.godot/imported/jump_point_radiates.png-1a97dab1296f185bfc3d06015e15ec05.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cs2jr54egxwey"
path="res://.godot/imported/pool.normal.png-d715ee8c1699b86312f19adc110615ea.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/atlas/normal/pool.normal.png"
dest_files=["res://.godot/imported/pool.normal.png-d715ee8c1699b86312f19adc110615ea.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://p4hfrsl8bbpg"
path="res://.godot/imported/pool.specular.png-11a7497f1c1ddae08e066a0e33eb2e9b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/atlas/specular/pool.specular.png"
dest_files=["res://.godot/imported/pool.specular.png-11a7497f1c1ddae08e066a0e33eb2e9b.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cl3uy4d6lgspe"
path="res://.godot/imported/man_falls.png-61beb99173ba0b99454c416e7ba44020.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/man_falls.png"
dest_files=["res://.godot/imported/man_falls.png-61beb99173ba0b99454c416e7ba44020.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cr5bdv3hgmd4q"
path="res://.godot/imported/man_jumps.png-70ad3c36f80f10d1a96a8706ccbc76b6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/man_jumps.png"
dest_files=["res://.godot/imported/man_jumps.png-70ad3c36f80f10d1a96a8706ccbc76b6.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
+11 -2
View File
@@ -1,9 +1,10 @@
[gd_resource type="TileSet" format=3 uid="uid://bk7cbdppa3j6a"] [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="CompressedTexture2D" id="CompressedTexture2D_5h5kb"]
load_path = "res://.godot/imported/pool.png-b13073abd16d5b4aa7f02817fa2d5dca.ctex"
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_blkrv"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_blkrv"]
texture = ExtResource("1_otsg2") texture = SubResource("CompressedTexture2D_5h5kb")
texture_region_size = Vector2i(32, 32) texture_region_size = Vector2i(32, 32)
0:0/0 = 0 0:0/0 = 0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16) 0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
@@ -59,6 +60,7 @@ texture_region_size = Vector2i(32, 32)
2:2/1/flip_h = true 2:2/1/flip_h = true
2:2/1/terrain_set = 0 2:2/1/terrain_set = 0
2:2/1/terrain = 0 2:2/1/terrain = 0
2:2/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16, -16, -16)
2:2/1/terrains_peering_bit/right_side = 0 2:2/1/terrains_peering_bit/right_side = 0
2:2/1/terrains_peering_bit/bottom_right_corner = 0 2:2/1/terrains_peering_bit/bottom_right_corner = 0
2:2/1/terrains_peering_bit/bottom_side = 0 2:2/1/terrains_peering_bit/bottom_side = 0
@@ -107,6 +109,7 @@ texture_region_size = Vector2i(32, 32)
1:3/1/flip_v = true 1:3/1/flip_v = true
1:3/1/terrain_set = 0 1:3/1/terrain_set = 0
1:3/1/terrain = 0 1:3/1/terrain = 0
1:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
1:3/1/terrains_peering_bit/right_side = 0 1:3/1/terrains_peering_bit/right_side = 0
1:3/1/terrains_peering_bit/bottom_right_corner = 0 1:3/1/terrains_peering_bit/bottom_right_corner = 0
1:3/1/terrains_peering_bit/bottom_side = 0 1:3/1/terrains_peering_bit/bottom_side = 0
@@ -129,6 +132,7 @@ texture_region_size = Vector2i(32, 32)
2:3/1/flip_h = true 2:3/1/flip_h = true
2:3/1/terrain_set = 0 2:3/1/terrain_set = 0
2:3/1/terrain = 0 2:3/1/terrain = 0
2:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/1/terrains_peering_bit/right_side = 0 2:3/1/terrains_peering_bit/right_side = 0
2:3/1/terrains_peering_bit/bottom_right_corner = 0 2:3/1/terrains_peering_bit/bottom_right_corner = 0
2:3/1/terrains_peering_bit/bottom_side = 0 2:3/1/terrains_peering_bit/bottom_side = 0
@@ -141,6 +145,7 @@ texture_region_size = Vector2i(32, 32)
2:3/2/flip_v = true 2:3/2/flip_v = true
2:3/2/terrain_set = 0 2:3/2/terrain_set = 0
2:3/2/terrain = 0 2:3/2/terrain = 0
2:3/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/2/terrains_peering_bit/right_side = 0 2:3/2/terrains_peering_bit/right_side = 0
2:3/2/terrains_peering_bit/bottom_right_corner = 0 2:3/2/terrains_peering_bit/bottom_right_corner = 0
2:3/2/terrains_peering_bit/bottom_side = 0 2:3/2/terrains_peering_bit/bottom_side = 0
@@ -153,6 +158,7 @@ texture_region_size = Vector2i(32, 32)
2:3/4/transpose = true 2:3/4/transpose = true
2:3/4/terrain_set = 0 2:3/4/terrain_set = 0
2:3/4/terrain = 0 2:3/4/terrain = 0
2:3/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/4/terrains_peering_bit/right_side = 0 2:3/4/terrains_peering_bit/right_side = 0
2:3/4/terrains_peering_bit/bottom_right_corner = 0 2:3/4/terrains_peering_bit/bottom_right_corner = 0
2:3/4/terrains_peering_bit/bottom_side = 0 2:3/4/terrains_peering_bit/bottom_side = 0
@@ -166,6 +172,7 @@ texture_region_size = Vector2i(32, 32)
2:3/5/transpose = true 2:3/5/transpose = true
2:3/5/terrain_set = 0 2:3/5/terrain_set = 0
2:3/5/terrain = 0 2:3/5/terrain = 0
2:3/5/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/5/terrains_peering_bit/right_side = 0 2:3/5/terrains_peering_bit/right_side = 0
2:3/5/terrains_peering_bit/bottom_right_corner = 0 2:3/5/terrains_peering_bit/bottom_right_corner = 0
2:3/5/terrains_peering_bit/bottom_side = 0 2:3/5/terrains_peering_bit/bottom_side = 0
@@ -188,6 +195,7 @@ texture_region_size = Vector2i(32, 32)
3:3/1/flip_v = true 3:3/1/flip_v = true
3:3/1/terrain_set = 0 3:3/1/terrain_set = 0
3:3/1/terrain = 0 3:3/1/terrain = 0
3:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
3:3/1/terrains_peering_bit/bottom_side = 0 3:3/1/terrains_peering_bit/bottom_side = 0
3:3/1/terrains_peering_bit/bottom_left_corner = 0 3:3/1/terrains_peering_bit/bottom_left_corner = 0
3:3/1/terrains_peering_bit/left_side = 0 3:3/1/terrains_peering_bit/left_side = 0
@@ -247,6 +255,7 @@ texture_region_size = Vector2i(32, 32)
2:4/1/flip_h = true 2:4/1/flip_h = true
2:4/1/terrain_set = 0 2:4/1/terrain_set = 0
2:4/1/terrain = 0 2:4/1/terrain = 0
2:4/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:4/1/terrains_peering_bit/right_side = 0 2:4/1/terrains_peering_bit/right_side = 0
2:4/1/terrains_peering_bit/left_side = 0 2:4/1/terrains_peering_bit/left_side = 0
2:4/1/terrains_peering_bit/top_left_corner = 0 2:4/1/terrains_peering_bit/top_left_corner = 0
File diff suppressed because it is too large Load Diff
+733
View File
@@ -0,0 +1,733 @@
[gd_resource type="TileSet" format=3 uid="uid://cb1bigfqp1l7t"]
[ext_resource type="Texture2D" uid="uid://n6b4udvjt2pt" path="res://sprites/atlas/diffuse/pool.diffuse.png" id="1_by4n8"]
[ext_resource type="Texture2D" uid="uid://cs2jr54egxwey" path="res://sprites/atlas/normal/pool.normal.png" id="2_1bmlt"]
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_l670f"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_5tlu2"]
polygon = PackedVector2Array(-6.8571424, -2.2857132, 16, -2.2857132, 16, 16, -6.8571424, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_by4n8"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_0ou5r"]
polygon = PackedVector2Array(-6.8571424, -16, -6.8571424, 16, 16, 16, 16, -16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_1bmlt"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_g011h"]
polygon = PackedVector2Array(-6.8571424, -16, -6.8571424, 2.285715, 16, 2.285715, 16, -16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_x4gly"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_uesvo"]
polygon = PackedVector2Array(-16, -2.2857132, 16, -2.2857132, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_h32fx"]
polygon = PackedVector2Array(-16, -2.2857132, 16, -2.2857132, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_f0cx1"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_dghjy"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_dc0ws"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_6l2xn"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_blamv"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_f77ak"]
polygon = PackedVector2Array(-16, 2.285715, 16, 2.285715, 16, -16, -16, -16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_kj7tv"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_ro6yg"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 2.285715, -16, 2.285715)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_ebmht"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_xuple"]
polygon = PackedVector2Array(-16, -2.2857132, 6.8571434, -2.2857132, 6.8571434, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_ru1yo"]
polygon = PackedVector2Array(6.8571434, -16, 6.8571434, 16, -16, 16, -16, -16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_vok1k"]
polygon = PackedVector2Array(6.8571434, -16, 6.8571434, 16, -16, 16, -16, -16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_flqmo"]
polygon = PackedVector2Array(-16, 2.285715, 6.8571434, 2.285715, 6.8571434, -16, -16, -16, -16, 2.285715, -16, 2.285715)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_8alh0"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_xwwfl"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_njrqr"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_o2foe"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_yfu7p"]
polygon = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="CanvasTexture" id="CanvasTexture_by4n8"]
diffuse_texture = ExtResource("1_by4n8")
normal_texture = ExtResource("2_1bmlt")
specular_shininess = 0.35
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_blkrv"]
texture = SubResource("CanvasTexture_by4n8")
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
9:1/0/terrain_set = 0
9:1/0/terrain = 2
9:1/0/terrains_peering_bit/right_side = 2
9:1/0/terrains_peering_bit/bottom_right_corner = 1
9:1/0/terrains_peering_bit/bottom_side = 2
10:1/next_alternative_id = 2
10:1/0 = 0
10:1/0/terrain_set = 0
10:1/0/terrain = 2
10:1/0/terrains_peering_bit/right_side = 2
10:1/0/terrains_peering_bit/bottom_side = 1
10:1/0/terrains_peering_bit/left_side = 2
11:1/0 = 0
11:1/0/terrain_set = 0
11:1/0/terrain = 2
11:1/0/terrains_peering_bit/right_side = 2
11:1/0/terrains_peering_bit/bottom_side = 1
11:1/0/terrains_peering_bit/left_side = 2
0:2/0 = 0
1:2/0 = 0
1:2/0/terrain_set = 0
1:2/0/terrain = 0
1:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_l670f")
1:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_5tlu2")
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
1:2/0/terrains_peering_bit/right_side = 0
1:2/0/terrains_peering_bit/bottom_right_corner = 0
1:2/0/terrains_peering_bit/bottom_side = 0
2:2/next_alternative_id = 3
2:2/0 = 0
2:2/0/terrain_set = 0
2:2/0/terrain = 0
2:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_x4gly")
2:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_uesvo")
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
2:2/0/terrains_peering_bit/right_side = 0
2:2/0/terrains_peering_bit/bottom_right_corner = 0
2:2/0/terrains_peering_bit/bottom_side = 0
2:2/0/terrains_peering_bit/bottom_left_corner = 0
2:2/0/terrains_peering_bit/left_side = 0
2:2/1 = 1
2:2/1/flip_h = true
2:2/1/terrain_set = 0
2:2/1/terrain = 0
2:2/1/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_1bmlt")
2:2/1/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_h32fx")
2:2/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16, -16, -16)
2:2/1/terrains_peering_bit/right_side = 0
2:2/1/terrains_peering_bit/bottom_right_corner = 0
2:2/1/terrains_peering_bit/bottom_side = 0
2:2/1/terrains_peering_bit/bottom_left_corner = 0
2:2/1/terrains_peering_bit/left_side = 0
3:2/0 = 0
3:2/0/terrain_set = 0
3:2/0/terrain = 0
3:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_ebmht")
3:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_xuple")
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
3:2/0/terrains_peering_bit/bottom_side = 0
3:2/0/terrains_peering_bit/bottom_left_corner = 0
3:2/0/terrains_peering_bit/left_side = 0
4:2/0 = 0
4:2/0/terrain_set = 0
4:2/0/terrain = 0
4:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_8alh0")
4:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_xwwfl")
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
4:2/0/terrains_peering_bit/right_side = 0
5:2/0 = 0
5:2/0/terrain_set = 0
5:2/0/terrain = 0
5:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_8alh0")
5:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_xwwfl")
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
5:2/0/terrains_peering_bit/right_side = 0
5:2/0/terrains_peering_bit/left_side = 0
6:2/0 = 0
6:2/0/terrain_set = 0
6:2/0/terrain = 0
6:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_8alh0")
6:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_xwwfl")
6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:2/0/terrains_peering_bit/left_side = 0
7:2/0 = 0
7:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_yfu7p")
7:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_xwwfl")
8:2/0 = 0
8:2/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_yfu7p")
8:2/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_xwwfl")
9:2/next_alternative_id = 2
9:2/0 = 0
9:2/0/terrain_set = 0
9:2/0/terrain = 2
9:2/0/terrains_peering_bit/right_side = 1
9:2/0/terrains_peering_bit/bottom_side = 2
9:2/0/terrains_peering_bit/top_side = 2
10:2/next_alternative_id = 2
10:2/0 = 0
10:2/0/terrain_set = 0
10:2/0/terrain = 1
10:2/0/terrains_peering_bit/right_side = 1
10:2/0/terrains_peering_bit/bottom_right_corner = 1
10:2/0/terrains_peering_bit/bottom_side = 1
11:2/next_alternative_id = 11
11:2/0 = 0
11:2/0/terrain_set = 0
11:2/0/terrain = 1
11:2/0/terrains_peering_bit/right_side = 1
11:2/0/terrains_peering_bit/bottom_right_corner = 1
11:2/0/terrains_peering_bit/bottom_side = 1
11:2/0/terrains_peering_bit/bottom_left_corner = 1
11:2/0/terrains_peering_bit/left_side = 1
0:3/0 = 0
1:3/next_alternative_id = 2
1:3/0 = 0
1:3/0/terrain_set = 0
1:3/0/terrain = 0
1:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_by4n8")
1:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_0ou5r")
1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
1:3/0/terrains_peering_bit/right_side = 0
1:3/0/terrains_peering_bit/bottom_right_corner = 0
1:3/0/terrains_peering_bit/bottom_side = 0
1:3/0/terrains_peering_bit/top_side = 0
1:3/0/terrains_peering_bit/top_right_corner = 0
1:3/1 = 1
1:3/1/flip_v = true
1:3/1/terrain_set = 0
1:3/1/terrain = 0
1:3/1/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_1bmlt")
1:3/1/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_0ou5r")
1:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
1:3/1/terrains_peering_bit/right_side = 0
1:3/1/terrains_peering_bit/bottom_right_corner = 0
1:3/1/terrains_peering_bit/bottom_side = 0
1:3/1/terrains_peering_bit/top_side = 0
1:3/1/terrains_peering_bit/top_right_corner = 0
2:3/next_alternative_id = 6
2:3/0 = 0
2:3/0/terrain_set = 0
2:3/0/terrain = 0
2:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_by4n8")
2:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_f0cx1")
2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
2:3/0/terrains_peering_bit/right_side = 0
2:3/0/terrains_peering_bit/bottom_right_corner = 0
2:3/0/terrains_peering_bit/bottom_side = 0
2:3/0/terrains_peering_bit/bottom_left_corner = 0
2:3/0/terrains_peering_bit/left_side = 0
2:3/0/terrains_peering_bit/top_left_corner = 0
2:3/0/terrains_peering_bit/top_side = 0
2:3/0/terrains_peering_bit/top_right_corner = 0
2:3/1 = 1
2:3/1/flip_h = true
2:3/1/terrain_set = 0
2:3/1/terrain = 0
2:3/1/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_1bmlt")
2:3/1/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_dghjy")
2:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/1/terrains_peering_bit/right_side = 0
2:3/1/terrains_peering_bit/bottom_right_corner = 0
2:3/1/terrains_peering_bit/bottom_side = 0
2:3/1/terrains_peering_bit/bottom_left_corner = 0
2:3/1/terrains_peering_bit/left_side = 0
2:3/1/terrains_peering_bit/top_left_corner = 0
2:3/1/terrains_peering_bit/top_side = 0
2:3/1/terrains_peering_bit/top_right_corner = 0
2:3/2 = 2
2:3/2/flip_v = true
2:3/2/terrain_set = 0
2:3/2/terrain = 0
2:3/2/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_1bmlt")
2:3/2/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_dc0ws")
2:3/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/2/terrains_peering_bit/right_side = 0
2:3/2/terrains_peering_bit/bottom_right_corner = 0
2:3/2/terrains_peering_bit/bottom_side = 0
2:3/2/terrains_peering_bit/bottom_left_corner = 0
2:3/2/terrains_peering_bit/left_side = 0
2:3/2/terrains_peering_bit/top_left_corner = 0
2:3/2/terrains_peering_bit/top_side = 0
2:3/2/terrains_peering_bit/top_right_corner = 0
2:3/4 = 4
2:3/4/transpose = true
2:3/4/terrain_set = 0
2:3/4/terrain = 0
2:3/4/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_1bmlt")
2:3/4/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_6l2xn")
2:3/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/4/terrains_peering_bit/right_side = 0
2:3/4/terrains_peering_bit/bottom_right_corner = 0
2:3/4/terrains_peering_bit/bottom_side = 0
2:3/4/terrains_peering_bit/bottom_left_corner = 0
2:3/4/terrains_peering_bit/left_side = 0
2:3/4/terrains_peering_bit/top_left_corner = 0
2:3/4/terrains_peering_bit/top_side = 0
2:3/4/terrains_peering_bit/top_right_corner = 0
2:3/5 = 5
2:3/5/flip_h = true
2:3/5/transpose = true
2:3/5/terrain_set = 0
2:3/5/terrain = 0
2:3/5/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_1bmlt")
2:3/5/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_blamv")
2:3/5/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:3/5/terrains_peering_bit/right_side = 0
2:3/5/terrains_peering_bit/bottom_right_corner = 0
2:3/5/terrains_peering_bit/bottom_side = 0
2:3/5/terrains_peering_bit/bottom_left_corner = 0
2:3/5/terrains_peering_bit/left_side = 0
2:3/5/terrains_peering_bit/top_left_corner = 0
2:3/5/terrains_peering_bit/top_side = 0
2:3/5/terrains_peering_bit/top_right_corner = 0
3:3/next_alternative_id = 2
3:3/0 = 0
3:3/0/terrain_set = 0
3:3/0/terrain = 0
3:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_by4n8")
3:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_ru1yo")
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
3:3/0/terrains_peering_bit/bottom_side = 0
3:3/0/terrains_peering_bit/bottom_left_corner = 0
3:3/0/terrains_peering_bit/left_side = 0
3:3/0/terrains_peering_bit/top_left_corner = 0
3:3/0/terrains_peering_bit/top_side = 0
3:3/1 = 1
3:3/1/flip_v = true
3:3/1/terrain_set = 0
3:3/1/terrain = 0
3:3/1/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_kj7tv")
3:3/1/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_vok1k")
3:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
3:3/1/terrains_peering_bit/bottom_side = 0
3:3/1/terrains_peering_bit/bottom_left_corner = 0
3:3/1/terrains_peering_bit/left_side = 0
3:3/1/terrains_peering_bit/top_left_corner = 0
3:3/1/terrains_peering_bit/top_side = 0
4:3/0 = 0
4:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
4:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
5:3/0 = 0
5:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
5:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:3/0 = 0
6:3/0/terrain_set = 0
6:3/0/terrain = 0
6:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
6:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:3/0/terrains_peering_bit/right_side = 0
6:3/0/terrains_peering_bit/bottom_side = 0
6:3/0/terrains_peering_bit/bottom_left_corner = 0
6:3/0/terrains_peering_bit/left_side = 0
6:3/0/terrains_peering_bit/top_left_corner = 0
6:3/0/terrains_peering_bit/top_side = 0
6:3/0/terrains_peering_bit/top_right_corner = 0
7:3/0 = 0
7:3/0/terrain_set = 0
7:3/0/terrain = 0
7:3/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
7:3/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
7:3/0/terrains_peering_bit/right_side = 0
7:3/0/terrains_peering_bit/bottom_right_corner = 0
7:3/0/terrains_peering_bit/bottom_side = 0
7:3/0/terrains_peering_bit/left_side = 0
7:3/0/terrains_peering_bit/top_left_corner = 0
7:3/0/terrains_peering_bit/top_side = 0
7:3/0/terrains_peering_bit/top_right_corner = 0
8:3/0 = 0
9:3/0 = 0
9:3/0/terrain_set = 0
9:3/0/terrain = 2
9:3/0/terrains_peering_bit/right_side = 1
9:3/0/terrains_peering_bit/bottom_side = 2
9:3/0/terrains_peering_bit/top_side = 2
10:3/next_alternative_id = 10
10:3/0 = 0
10:3/0/terrain_set = 0
10:3/0/terrain = 1
10:3/0/terrains_peering_bit/right_side = 1
10:3/0/terrains_peering_bit/bottom_right_corner = 1
10:3/0/terrains_peering_bit/bottom_side = 1
10:3/0/terrains_peering_bit/top_side = 1
10:3/0/terrains_peering_bit/top_right_corner = 1
11:3/0 = 0
11:3/0/terrain_set = 0
11:3/0/terrain = 1
11:3/0/terrains_peering_bit/right_side = 1
11:3/0/terrains_peering_bit/bottom_right_corner = 1
11:3/0/terrains_peering_bit/bottom_side = 1
11:3/0/terrains_peering_bit/bottom_left_corner = 1
11:3/0/terrains_peering_bit/left_side = 1
11:3/0/terrains_peering_bit/top_left_corner = 1
11:3/0/terrains_peering_bit/top_side = 1
11:3/0/terrains_peering_bit/top_right_corner = 1
0:4/0 = 0
1:4/0 = 0
1:4/0/terrain_set = 0
1:4/0/terrain = 0
1:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_by4n8")
1:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_g011h")
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
1:4/0/terrains_peering_bit/right_side = 0
1:4/0/terrains_peering_bit/top_side = 0
1:4/0/terrains_peering_bit/top_right_corner = 0
0:5/0 = 0
1:5/0 = 0
2:4/next_alternative_id = 2
2:4/0 = 0
2:4/0/terrain_set = 0
2:4/0/terrain = 0
2:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_by4n8")
2:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_f77ak")
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
2:4/0/terrains_peering_bit/right_side = 0
2:4/0/terrains_peering_bit/left_side = 0
2:4/0/terrains_peering_bit/top_left_corner = 0
2:4/0/terrains_peering_bit/top_side = 0
2:4/0/terrains_peering_bit/top_right_corner = 0
2:4/1 = 1
2:4/1/flip_h = true
2:4/1/terrain_set = 0
2:4/1/terrain = 0
2:4/1/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_kj7tv")
2:4/1/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_ro6yg")
2:4/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:4/1/terrains_peering_bit/right_side = 0
2:4/1/terrains_peering_bit/left_side = 0
2:4/1/terrains_peering_bit/top_left_corner = 0
2:4/1/terrains_peering_bit/top_side = 0
2:4/1/terrains_peering_bit/top_right_corner = 0
3:4/0 = 0
3:4/0/terrain_set = 0
3:4/0/terrain = 0
3:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_by4n8")
3:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_flqmo")
3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
3:4/0/terrains_peering_bit/left_side = 0
3:4/0/terrains_peering_bit/top_left_corner = 0
3:4/0/terrains_peering_bit/top_side = 0
6:4/0 = 0
6:4/0/terrain_set = 0
6:4/0/terrain = 0
6:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
6:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:4/0/terrains_peering_bit/right_side = 0
6:4/0/terrains_peering_bit/bottom_right_corner = 0
6:4/0/terrains_peering_bit/bottom_side = 0
6:4/0/terrains_peering_bit/bottom_left_corner = 0
6:4/0/terrains_peering_bit/left_side = 0
6:4/0/terrains_peering_bit/top_left_corner = 0
6:4/0/terrains_peering_bit/top_side = 0
7:4/0 = 0
7:4/0/terrain_set = 0
7:4/0/terrain = 0
7:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
7:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
7:4/0/terrains_peering_bit/right_side = 0
7:4/0/terrains_peering_bit/bottom_right_corner = 0
7:4/0/terrains_peering_bit/bottom_side = 0
7:4/0/terrains_peering_bit/bottom_left_corner = 0
7:4/0/terrains_peering_bit/left_side = 0
7:4/0/terrains_peering_bit/top_side = 0
7:4/0/terrains_peering_bit/top_right_corner = 0
4:4/0 = 0
4:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
4:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
5:4/0 = 0
5:4/0/occlusion_layer_0/polygon_0/polygon = SubResource("OccluderPolygon2D_njrqr")
5:4/0/occlusion_layer_1/polygon_0/polygon = SubResource("OccluderPolygon2D_o2foe")
5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
8:4/0 = 0
9:4/next_alternative_id = 2
9:4/0 = 0
9:4/0/terrain_set = 0
9:4/0/terrain = 2
9:4/0/terrains_peering_bit/right_side = 1
9:4/0/terrains_peering_bit/bottom_side = 2
9:4/0/terrains_peering_bit/top_side = 2
10:4/next_alternative_id = 2
10:4/0 = 0
10:4/0/terrain_set = 0
10:4/0/terrain = 1
10:4/0/terrains_peering_bit/right_side = 1
10:4/0/terrains_peering_bit/top_side = 1
10:4/0/terrains_peering_bit/top_right_corner = 1
12:1/next_alternative_id = 2
12:1/0 = 0
12:1/0/terrain_set = 0
12:1/0/terrain = 2
12:1/0/terrains_peering_bit/right_side = 2
12:1/0/terrains_peering_bit/bottom_side = 1
12:1/0/terrains_peering_bit/left_side = 2
13:1/0 = 0
13:1/0/terrain_set = 0
13:1/0/terrain = 2
13:1/0/terrains_peering_bit/bottom_side = 2
13:1/0/terrains_peering_bit/bottom_left_corner = 1
13:1/0/terrains_peering_bit/left_side = 2
12:2/next_alternative_id = 2
12:2/0 = 0
12:2/0/terrain_set = 0
12:2/0/terrain = 1
12:2/0/terrains_peering_bit/bottom_side = 1
12:2/0/terrains_peering_bit/bottom_left_corner = 1
12:2/0/terrains_peering_bit/left_side = 1
13:2/next_alternative_id = 2
13:2/0 = 0
13:2/0/terrain_set = 0
13:2/0/terrain = 2
13:2/0/terrains_peering_bit/bottom_side = 2
13:2/0/terrains_peering_bit/left_side = 1
13:2/0/terrains_peering_bit/top_side = 2
12:3/next_alternative_id = 10
12:3/0 = 0
12:3/0/terrain_set = 0
12:3/0/terrain = 1
12:3/0/terrains_peering_bit/bottom_side = 1
12:3/0/terrains_peering_bit/bottom_left_corner = 1
12:3/0/terrains_peering_bit/left_side = 1
12:3/0/terrains_peering_bit/top_left_corner = 1
12:3/0/terrains_peering_bit/top_side = 1
13:3/0 = 0
13:3/0/terrain_set = 0
13:3/0/terrain = 2
13:3/0/terrains_peering_bit/bottom_side = 2
13:3/0/terrains_peering_bit/left_side = 1
13:3/0/terrains_peering_bit/top_side = 2
11:4/next_alternative_id = 10
11:4/0 = 0
11:4/0/terrain_set = 0
11:4/0/terrain = 1
11:4/0/terrains_peering_bit/right_side = 1
11:4/0/terrains_peering_bit/left_side = 1
11:4/0/terrains_peering_bit/top_left_corner = 1
11:4/0/terrains_peering_bit/top_side = 1
11:4/0/terrains_peering_bit/top_right_corner = 1
12:4/next_alternative_id = 2
12:4/0 = 0
12:4/0/terrain_set = 0
12:4/0/terrain = 1
12:4/0/terrains_peering_bit/left_side = 1
12:4/0/terrains_peering_bit/top_left_corner = 1
12:4/0/terrains_peering_bit/top_side = 1
13:4/next_alternative_id = 2
13:4/0 = 0
13:4/0/terrain_set = 0
13:4/0/terrain = 2
13:4/0/terrains_peering_bit/bottom_side = 2
13:4/0/terrains_peering_bit/left_side = 1
13:4/0/terrains_peering_bit/top_side = 2
10:5/next_alternative_id = 2
10:5/0 = 0
10:5/0/terrain_set = 0
10:5/0/terrain = 2
10:5/0/terrains_peering_bit/right_side = 2
10:5/0/terrains_peering_bit/left_side = 2
10:5/0/terrains_peering_bit/top_side = 1
11:5/0 = 0
11:5/0/terrain_set = 0
11:5/0/terrain = 2
11:5/0/terrains_peering_bit/right_side = 2
11:5/0/terrains_peering_bit/left_side = 2
11:5/0/terrains_peering_bit/top_side = 1
12:5/next_alternative_id = 2
12:5/0 = 0
12:5/0/terrain_set = 0
12:5/0/terrain = 2
12:5/0/terrains_peering_bit/right_side = 2
12:5/0/terrains_peering_bit/left_side = 2
12:5/0/terrains_peering_bit/top_side = 1
13:5/0 = 0
13:5/0/terrain_set = 0
13:5/0/terrain = 2
13:5/0/terrains_peering_bit/left_side = 2
13:5/0/terrains_peering_bit/top_left_corner = 1
13:5/0/terrains_peering_bit/top_side = 2
9:5/0 = 0
9:5/0/terrain_set = 0
9:5/0/terrain = 2
9:5/0/terrains_peering_bit/right_side = 2
9:5/0/terrains_peering_bit/bottom_left_corner = 1
9:5/0/terrains_peering_bit/top_side = 2
8:5/0 = 0
8:5/0/terrain_set = 0
8:5/0/terrain = 2
8:5/0/terrains_peering_bit/bottom_right_corner = 1
8:5/0/terrains_peering_bit/left_side = 2
8:5/0/terrains_peering_bit/top_side = 2
8:6/0 = 0
8:6/0/terrain_set = 0
8:6/0/terrain = 2
8:6/0/terrains_peering_bit/bottom_side = 2
8:6/0/terrains_peering_bit/left_side = 2
8:6/0/terrains_peering_bit/top_right_corner = 1
9:6/0 = 0
9:6/0/terrain_set = 0
9:6/0/terrain = 2
9:6/0/terrains_peering_bit/right_side = 2
9:6/0/terrains_peering_bit/bottom_side = 2
9:6/0/terrains_peering_bit/top_left_corner = 1
10:6/0 = 0
10:6/0/terrain_set = 0
10:6/0/terrain = 1
10:6/0/terrains_peering_bit/right_side = 1
10:6/0/terrains_peering_bit/bottom_side = 1
10:6/0/terrains_peering_bit/bottom_left_corner = 1
10:6/0/terrains_peering_bit/left_side = 1
10:6/0/terrains_peering_bit/top_left_corner = 1
10:6/0/terrains_peering_bit/top_side = 1
10:6/0/terrains_peering_bit/top_right_corner = 1
10:7/0 = 0
10:7/0/terrain_set = 0
10:7/0/terrain = 1
10:7/0/terrains_peering_bit/right_side = 1
10:7/0/terrains_peering_bit/bottom_right_corner = 1
10:7/0/terrains_peering_bit/bottom_side = 1
10:7/0/terrains_peering_bit/bottom_left_corner = 1
10:7/0/terrains_peering_bit/left_side = 1
10:7/0/terrains_peering_bit/top_left_corner = 1
10:7/0/terrains_peering_bit/top_side = 1
11:7/0 = 0
11:7/0/terrain_set = 0
11:7/0/terrain = 1
11:7/0/terrains_peering_bit/right_side = 1
11:7/0/terrains_peering_bit/bottom_right_corner = 1
11:7/0/terrains_peering_bit/bottom_side = 1
11:7/0/terrains_peering_bit/bottom_left_corner = 1
11:7/0/terrains_peering_bit/left_side = 1
11:7/0/terrains_peering_bit/top_side = 1
11:7/0/terrains_peering_bit/top_right_corner = 1
12:7/0 = 0
12:7/0/terrain_set = 0
12:6/0 = 0
12:6/0/terrain_set = 0
11:6/0 = 0
11:6/0/terrain_set = 0
11:6/0/terrain = 1
11:6/0/terrains_peering_bit/right_side = 1
11:6/0/terrains_peering_bit/bottom_right_corner = 1
11:6/0/terrains_peering_bit/bottom_side = 1
11:6/0/terrains_peering_bit/left_side = 1
11:6/0/terrains_peering_bit/top_left_corner = 1
11:6/0/terrains_peering_bit/top_side = 1
11:6/0/terrains_peering_bit/top_right_corner = 1
13:6/0 = 0
13:6/0/terrain_set = 0
14:6/0 = 0
14:6/0/terrain_set = 0
14:7/0 = 0
14:7/0/terrain_set = 0
13:7/0 = 0
13:7/0/terrain_set = 0
15:6/0 = 0
15:6/0/terrain_set = 0
15:7/0 = 0
15:7/0/terrain_set = 0
14:5/0 = 0
14:5/0/terrain_set = 0
14:5/0/terrain = 2
14:5/0/terrains_peering_bit/right_side = 2
14:5/0/terrains_peering_bit/top_side = 2
14:5/0/terrains_peering_bit/top_right_corner = 1
14:4/0 = 0
14:4/0/terrain_set = 0
14:3/0 = 0
14:3/0/terrain_set = 0
14:2/0 = 0
14:2/0/terrain_set = 0
14:1/0 = 0
14:1/0/terrain_set = 0
14:0/0 = 0
15:1/0 = 0
15:1/0/terrain_set = 0
15:2/0 = 0
15:2/0/terrain_set = 0
15:3/0 = 0
15:3/0/terrain_set = 0
15:4/0 = 0
15:4/0/terrain_set = 0
15:5/0 = 0
15:5/0/terrain_set = 0
15:0/0 = 0
13:0/0 = 0
12:0/0 = 0
[resource]
tile_size = Vector2i(32, 32)
occlusion_layer_0/light_mask = 1
occlusion_layer_1/light_mask = 2
physics_layer_0/collision_layer = 1
terrain_set_0/mode = 0
terrain_set_0/terrain_0/name = "Brick"
terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1)
terrain_set_0/terrain_1/name = "Forested"
terrain_set_0/terrain_1/color = Color(0.48, 0.2712, 0.062399995, 1)
terrain_set_0/terrain_2/name = "Grass"
terrain_set_0/terrain_2/color = Color(0.5769167, 0.86, 0.18059999, 1)
terrain_set_0/terrain_3/name = "Forested-Grass Junction"
terrain_set_0/terrain_3/color = Color(0.255, 0.51, 0.39525005, 1)
terrain_set_0/terrain_4/name = "Terminato Junction"
terrain_set_0/terrain_4/color = Color(0.25, 0.3416667, 0.5, 1)
sources/0 = SubResource("TileSetAtlasSource_blkrv")
+5
View File
@@ -0,0 +1,5 @@
extends CanvasItem
func _process(_delta: float) -> void:
if Input.is_action_just_pressed("toggle_debug"):
visible = !visible;
+1
View File
@@ -0,0 +1 @@
uid://1mjqnyofaeo8
+18
View File
@@ -0,0 +1,18 @@
extends AudioStreamPlayer
@export var music : Array[AudioStream];
func skip_music():
var piece = music[randi_range(0, music.size() - 1)];
stream = piece;
play()
func _ready() -> void:
skip_music()
func _on_finished() -> void:
skip_music()
func _process(_delta: float) -> void:
if Input.is_action_just_pressed(("skip_music")):
skip_music()
+1
View File
@@ -0,0 +1 @@
uid://b3unn3dqhg2vl
+205 -46
View File
@@ -1,24 +1,52 @@
using Godot; using Godot;
using System; using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq;
public enum JumpKind {
Ground,
Turnback,
Midair
}
public partial class PlayerPhysicsController : CharacterBody2D { public partial class PlayerPhysicsController : CharacterBody2D {
// [Export]
// public float RunMultiplier { get; set; } = 1.84f;
[Signal]
public delegate void OnTurnbackJumpEventHandler(bool onJumpPoint, bool isOnWall);
[Signal]
public delegate void OnJumpEventHandler(JumpKind kind, bool isOnGround, bool isOnWall);
[ExportCategory("Accelerations and Impulses")]
[Export] [Export]
public float FloatingMovePenalty { get; set; } = 0.1f; public float WalkAcceleration { get; set; } = 3f;
[Export] [Export]
public float FloatingJumpPenalty { get; set; } = 0.1f; public float StoppingDeceleration { get; set; } = 8f;
[Export] [Export]
public float JumpStrengthDecay { get; set; } = 2; public float CancellationAcceleration { get; set; } = 4f;
[Export] [Export]
public float MovementDecay { get; set; } = 2; public float AirAcceleration { get; set; } = 0.5f;
[Export]
public float MovementScale { get; set; } = 10;
[Export]
public float JumpScale { get; set; } = 12;
[Export] [Export]
public float FrictionCoefficent { get; set; } = 0.1f; public float JumpHeight { get; set; } = 5.5f;
[ExportCategory("Max Speeds")]
[Export]
private float MaxFallSpeed { get; set; } = 8f;
[Export]
private float MaxRiseSpeed { get; set; } = 16f;
[Export]
private float MaxRunSpeed { get; set; } = 16f;
[Export]
private float MaxWalkSpeed { get; set; } = 8f;
[ExportCategory("Objects")]
[Export] [Export]
public Label DebugTextLabel { get; set; } public Label DebugTextLabel { get; set; }
@@ -26,60 +54,191 @@ public partial class PlayerPhysicsController : CharacterBody2D {
public AnimatedSprite2D Sprite { get; set; } public AnimatedSprite2D Sprite { get; set; }
[Export] [Export]
public float Gravity { get; set; } = 980f; public PredictiveCollisions Predictor { get; set; }
private float _timeInFlight = 0; [ExportCategory("Physics Tweaks")]
[Export]
public float Gravity { get; set; } = 30.625f;
private float TilesToMeters => 9.81f / Gravity;
private float PxToMeters => (1 / UnitToPx) * TilesToMeters;
[Export]
public float UnitToPx { get; set; } = 32;
private float _timeOffGround = 0.0f;
[Export]
public float CoyoteTiming { get; set; } = 0.1f;
[Export]
public float Deadzone { get; set; } = 0.1f;
private float _lv = 0.0f;
private void RecalculateLv() {
_lv = Mathf.Sqrt(Mathf.Pow(Gravity * 0.1f / 2, 2) + 2 * Gravity * JumpHeight);
}
public override void _Ready() {
RecalculateLv();
base._Ready();
}
private float epsilon = 10e-5f;
public override void _Process(double delta) { public override void _Process(double delta) {
var grounded = this.IsOnFloor(); var grounded = this.IsOnFloor();
var absvel = new Vector2(Mathf.Abs(Velocity.X), Mathf.Abs(Velocity.Y)); var absvel = new Vector2(Mathf.Abs(Velocity.X), Mathf.Abs(Velocity.Y));
Sprite.FlipH = Velocity.X < 0; var xAxis = Input.GetAxis("move_left", "move_right");
if (grounded && absvel.X > 0) { Sprite.FlipH = xAxis < 0;
Sprite.Play("walk", absvel.X switch { if (grounded && absvel.X > 0.1) {
Sprite.Animation = "walk";
Sprite.SpeedScale = absvel.X switch {
< 10 => 1, < 10 => 1,
< 150 => 2, < 150 => 2,
< 300 => 4, < 600 => 4,
_ => 1 _ => 4
}); };
} else if (grounded && absvel.X < epsilon && absvel.Y < epsilon) { if (!Sprite.IsPlaying())
Sprite.Play("idle"); Sprite.Play();
} else {
Sprite.SpeedScale = 1;
}
if (grounded && absvel.X < 0.1) {
Sprite.Animation = "idle";
if (!Sprite.IsPlaying())
Sprite.Play();
}
if (!grounded && Velocity.Y > 0.1) {
Sprite.Animation = "fall";
}
if (!grounded && Velocity.Y < 0.1) {
Sprite.Animation = "jump";
} }
} }
public override void _PhysicsProcess(double delta) { public override void _PhysicsProcess(double delta) {
var xAxis = Input.GetAxis("move_left", "move_right") * MovementScale; var xAxis = Input.GetAxis("move_left", "move_right");
var yAxis = Input.GetAxis("look_up", "look_down"); var yAxis = Input.GetAxis("move_up", "move_down");
var jumpStrength = -Input.GetActionStrength("jump") * JumpScale; var lookAxis = Input.GetAxis("look_up", "look_down");
// var jumpStrength = -Input.GetActionStrength("jump");
RecalculateLv();
float velx = (Velocity.X / UnitToPx);
float vely = (Velocity.Y / UnitToPx) + Gravity * (float)delta;
if (Mathf.Abs(velx) < 0.1) velx = 0;
var grounded = this.IsOnFloor(); var grounded = this.IsOnFloor();
if (!grounded) { var coyoteGrounded = _timeOffGround < CoyoteTiming;
xAxis *= FloatingMovePenalty; if (grounded || coyoteGrounded) {
jumpStrength *= FloatingJumpPenalty; if (grounded) _timeOffGround = 0;
else _timeOffGround += (float)delta;
if (Input.IsActionJustPressed("jump")) {
EmitSignal(SignalName.OnJump, (int)JumpKind.Ground, this.IsOnFloor(), this.IsOnWall());
vely = -_lv;
}
if (!grounded && coyoteGrounded && Input.IsActionJustReleased("jump") && vely < 0) {
vely *= 1/4f;
}
var accel = WalkAcceleration;
if (xAxis * Velocity.X < 0) accel = StoppingDeceleration;
velx += xAxis * accel * (float)delta;
} else {
if (Input.IsActionJustReleased("jump") && vely < 0) {
vely *= 1/4f;
}
if (Input.IsActionJustPressed("turn_back") && vely > 0 && velx != 0) {
var side = velx > 0 ? PredictiveCollisions.Location.BottomRight : PredictiveCollisions.Location.BottomLeft;
if (Predictor.AnyHit(side) && !this.IsOnWall()) {
EmitSignal(SignalName.OnTurnbackJump, true, this.IsOnWall());
EmitSignal(SignalName.OnJump, (int)JumpKind.Turnback, this.IsOnFloor(), this.IsOnWall());
var hits = Predictor.GetLastCastHits(side);
_ = hits.First(x => {
if (x.Obj is null) return false;
var collider = x.AsGodotDictionary()["collider"].AsGodotObject();
if (collider.HasMeta("JumpPointAnimatable")) {
var animPath = collider.GetMeta("JumpPointAnimatable").AsNodePath();
var anim = collider.Call(MethodName.GetNode, animPath).As<AnimatedSprite2D>();
var frame = anim.Frame;
void anf() {
anim.Stop();
anim.Frame = frame;
anim.AnimationLooped -= anf;
};
anim.AnimationLooped += anf;
anim.Play();
}
return true;
});
// has jump point
float theta = Mathf.Atan2(-yAxis, Mathf.Abs(xAxis));
float margin = 20 * (Mathf.Pi / 180f);
if (theta < margin) theta = margin;
if (theta > Mathf.Pi / 2 - margin) theta = Mathf.Pi/2 - margin;
Vector2 turnjump = new Vector2(-Mathf.Sign(velx) * Mathf.Cos(theta), -Mathf.Sin(theta) - 0.2f) * _lv;
GD.Print($"Theta: {theta * (180 / Mathf.Pi)}, turnjump: {turnjump}");
velx = turnjump.X;
vely = turnjump.Y;
} else {
// does not have jump point
// float theta = Mathf.Atan2(-yAxis, Mathf.Abs(xAxis));
// float margin = 20 * (Mathf.Pi / 180f);
// if (theta < margin) theta = margin;
// if (theta > Mathf.Pi / 2 - margin) theta = Mathf.Pi/2 - margin;
// Vector2 turnjump = new Vector2(-Mathf.Sign(Velocity.X) * Mathf.Cos(theta), -Mathf.Sin(theta) - 0.2f) * _lv;
// GD.Print($"Theta: {theta * (180 / Mathf.Pi)}, turnjump: {turnjump}");
// velx = turnjump.X;
// vely = turnjump.Y;
}
}
if (Input.IsActionJustPressed("jump") && Mathf.Abs(vely) < 2) {
EmitSignal(SignalName.OnJump, (int)JumpKind.Midair, this.IsOnFloor(), this.IsOnWall());
vely = -_lv;
}
velx += xAxis * AirAcceleration * (float)delta;
} }
if (grounded && jumpStrength < 0) if (grounded && Mathf.Abs(xAxis) < Deadzone) {
_timeInFlight = 0; var autostop = -Mathf.Sign(velx) * StoppingDeceleration * (float)delta;
if (Mathf.Abs(autostop) > Mathf.Abs(velx)) velx = 0f;
jumpStrength *= Mathf.Exp(-JumpStrengthDecay * _timeInFlight); else velx += autostop;
}
// autorun
var friction = Mathf.Abs(Velocity.X) > 125 ? FrictionCoefficent * 1/8f : FrictionCoefficent;
// var decay = Mathf.Abs(Velocity.X) > 125 ? MovementDecay * 1/4f : MovementDecay;
xAxis *= Mathf.Exp(-MovementDecay * Mathf.Abs(Velocity.X));
xAxis -= Velocity.X * friction;
var moveVector = new Vector2((float)(delta * xAxis), (float)( delta * (Gravity + jumpStrength))); var maxXSpeed = Input.IsActionPressed("run") ? MaxRunSpeed : MaxWalkSpeed;
DebugTextLabel.Text = $"grounded: {grounded}\nmv: {moveVector}\n vel: {Velocity}\n jumpStrength: {jumpStrength}\ntimeInFlight: {_timeInFlight}"; var maxYSpeed = vely > 0 ? MaxFallSpeed : MaxRiseSpeed;
Velocity += moveVector; var (absvelx, absvely) = (Mathf.Abs(velx), Mathf.Abs(vely));
float xcancel = 0, ycancel = 0;
if (absvelx > maxXSpeed) xcancel = -Math.Sign(velx) * CancellationAcceleration * (float)delta;
if (absvely > maxYSpeed) ycancel = -Math.Sign(vely) * CancellationAcceleration * (float)delta;
if (Mathf.Abs(xcancel) + 0.1 > absvelx) velx = 0;
else velx += xcancel;
if (Mathf.Abs(ycancel) + 0.1 > absvely) vely = 0;
else vely += ycancel;
DebugTextLabel.Text =
$"grounded: {grounded}\n" +
$"vely: {vely}\n" +
$"velx: {velx}\n" +
$"lv : {_lv:F2} or {_lv/(float)delta:F2}\n" +
$"lcrc : {Predictor.AnyHit(PredictiveCollisions.Location.BottomLeft)}/{Predictor.AnyHit(PredictiveCollisions.Location.BottomRight)}";
// Force = new Vector2(0, forcey);
Velocity = new Vector2(velx, vely);
Velocity *= UnitToPx;
MoveAndSlide(); MoveAndSlide();
if (!grounded)
_timeInFlight += (float)delta;
base._PhysicsProcess(delta);
} }
} }
+43
View File
@@ -0,0 +1,43 @@
using Godot;
using System;
using System.Collections.Generic;
public partial class PredictiveCollisions : Node {
[Export]
public ShapeCast2D BottomLeft { get; set; }
[Export]
public ShapeCast2D BottomRight { get; set; }
[Export]
public ShapeCast2D TopLeft { get; set; }
[Export]
public ShapeCast2D TopRight { get; set; }
[Flags]
public enum Location {
BottomRight = 0b01,
TopRight = 0b11,
TopLeft = 0b10,
BottomLeft = 0b00
}
public Godot.Collections.Array Cast(Location location) {
GetShapeCast(location).ForceShapecastUpdate();
return GetShapeCast(location).CollisionResult;
}
public bool AnyHit(Location location)
=> (Cast(location)?.Count ?? -1) > 0;
public Godot.Collections.Array GetLastCastHits(Location location) {
return GetShapeCast(location).CollisionResult;
}
public ShapeCast2D GetShapeCast(Location location) => location switch {
Location.BottomLeft => BottomLeft,
Location.BottomRight => BottomRight,
Location.TopLeft => TopLeft,
Location.TopRight => TopRight,
_ => throw new Exception("Invalid location")
};
}
@@ -0,0 +1 @@
uid://de3b068om3gsq
+21
View File
@@ -0,0 +1,21 @@
using Godot;
using System;
public partial class ResetPlayer : Area2D {
[Export]
public Node2D Player { get; set; }
[Export]
public Vector2 ResetPosition { get; set; }
public override void _Ready() {
this.BodyShapeEntered += OnBodyShapeEntered;
base._Ready();
}
private void OnBodyShapeEntered(Rid bodyRid, Node2D body, long bodyShapeIndex, long localShapeIndex) {
if (Player == body) {
Player.Position = ResetPosition;
}
}
}
+1
View File
@@ -0,0 +1 @@
uid://d0qoxtv6ld1ef
+26
View File
@@ -0,0 +1,26 @@
extends AudioStreamPlayer
@export var ground_jump: Array[AudioStream];
@export var midair_jump: Array[AudioStream];
@export var turnback_jump: Array[AudioStream];
enum JumpKind {
Ground = 0,
Turnback = 1,
Midair = 2
}
func _on_character_body_2d_on_jump(kind: JumpKind, isOnGround: bool, isOnWall: bool):
match kind:
JumpKind.Ground:
playSfx(ground_jump)
JumpKind.Turnback:
playSfx(turnback_jump)
JumpKind.Midair:
playSfx(midair_jump)
pass # Replace with function body.
func playSfx(sfx: Array[AudioStream]):
stream = sfx[randi_range(0, sfx.size() - 1)]
play()
+1
View File
@@ -0,0 +1 @@
uid://bwgqvwybyrsmq
+105
View File
@@ -0,0 +1,105 @@
using Godot;
using System;
using System.Collections.Generic;
#nullable enable
public class LevelPattern {
public TileMapPattern Level { get; }
public TileSet Solid1 { get; }
public TileSet? Solid2 { get; init; }
public TileSet Background1 { get; }
public TileSet? Background2 { get; init; }
public record Connection(int Length, bool IsHorizontal) { public bool IsVertical => !IsHorizontal; }
public Connection[] Connections { get; }
public Dictionary<Vector2I, Template.Tile> TranslationMap { get; }
public class Template {
public readonly record struct Solid(int Id);
public readonly record struct Background(int Id);
public readonly record struct Enemy(int Id);
public readonly record struct Item(int Id);
public readonly record struct Decoration(int Id);
public readonly record struct MultiTile(Tile NonOverlappable, OverlappableTile[] Overlappable);
public readonly record struct Any;
public readonly union OverlappableTile(Enemy, Item, Decoration);
public readonly union Tile(Solid, Any, Background, Enemy, Item, Decoration, MultiTile) {
public bool IsAir() {
if (this is Any or Background or Enemy or Item or Decoration) return true;
if (this is MultiTile mt) {
do {
if (mt.NonOverlappable is MultiTile _mt)
mt = _mt;
else
return mt.NonOverlappable is Any or Background or Enemy or Item or Decoration;
} while (true);
}
return false;
}
}
}
public LevelPattern(TileMapPattern pattern, TileSet solid1, TileSet background1) {
Level = pattern;
Solid1 = solid1;
Background1 = background1;
// Connections = CalculateConnections(pattern);
}
record struct ScanInfo(int XFrom, int XTo, int YFrom, int YTo);
public static Connection[] CalculateConnections(TileMapPattern pattern, Dictionary<Vector2I, Template.Tile> translations) {
var current = Vector2I.Zero;
var size = pattern.GetSize();
// scan borders
Span<ScanInfo> borders = stackalloc ScanInfo[] {
new ScanInfo(current.X, size.X, current.Y, current.Y), // top-horiz
new ScanInfo(current.X, current.X, current.Y, size.Y), // left-vert
new ScanInfo(current.X, size.X, size.Y, size.Y), // bottom-horiz
new ScanInfo(size.X, size.X, current.Y, size.Y) // right-vert
};
List<Connection> connections = [];
foreach(var border in borders) {
int xrun = 0;
for(int x = border.XFrom; x < border.XTo; x++) {
int yrun = 0;
for(int y = border.YFrom; y < border.YTo; y++) {
var cell = translations[pattern.GetCellAtlasCoords(new Vector2I(x, y))];
if (cell.IsAir())
yrun++;
else if (yrun > 0) {
connections.Add(new Connection(
yrun, IsHorizontal: false
));
yrun = 0;
}
}
if (border.YFrom == border.YTo) {
// horizontal run
var cell = translations[pattern.GetCellAtlasCoords(new Vector2I(x, border.YFrom))];
if (cell.IsAir())
xrun++;
else if (xrun > 0) {
connections.Add(new Connection(
xrun, IsHorizontal: true
));
xrun = 0;
}
}
}
}
return connections.ToArray();
}
}
#nullable restore
+1
View File
@@ -0,0 +1 @@
uid://b4fmcn1xf2rue
+4
View File
@@ -0,0 +1,4 @@
public class SymbolicTileMap {
}
+1
View File
@@ -0,0 +1 @@
uid://ca1802nst4udo
+6
View File
@@ -0,0 +1,6 @@
namespace System.Runtime.CompilerServices {
public interface IUnion { }
[AttributeUsage(AttributeTargets.Class)]
public sealed class UnionAttribute : Attribute { }
}
+1
View File
@@ -0,0 +1 @@
uid://cgpdhgigu3oo4
+33
View File
@@ -0,0 +1,33 @@
[gd_resource type="VisualShader" format=3 uid="uid://dwgy05x43arpb"]
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_46mxo"]
input_name = "color"
[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_paeta"]
parameter_name = "FloatParameter"
qualifier = 2
hint = 1
default_value_enabled = true
default_value = 0.5
[sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_282el"]
default_input_values = [0, 0.0, 1, 0.0, 2, 0.0, 3, 0.0]
op_type = 2
[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_ivc0m"]
default_input_values = [0, Quaternion(0, 0, 0, 0), 1, Quaternion(0, 0, 0, 0)]
op_type = 2
operator = 2
[resource]
mode = 1
flags/light_only = false
nodes/vertex/3/node = SubResource("VisualShaderNodeInput_46mxo")
nodes/vertex/3/position = Vector2(-280, 160)
nodes/vertex/7/node = SubResource("VisualShaderNodeFloatParameter_paeta")
nodes/vertex/7/position = Vector2(-460, 340)
nodes/vertex/8/node = SubResource("VisualShaderNodeVectorCompose_282el")
nodes/vertex/8/position = Vector2(-140, 300)
nodes/vertex/9/node = SubResource("VisualShaderNodeVectorOp_ivc0m")
nodes/vertex/9/position = Vector2(80, 160)
nodes/vertex/connections = PackedInt32Array(3, 0, 9, 0, 8, 0, 9, 1, 7, 0, 8, 0, 7, 0, 8, 1, 7, 0, 8, 2, 7, 0, 8, 3, 9, 0, 0, 2)