4 Commits
Author SHA1 Message Date
OddlyTimbot 1d82f7502d week2 prep 2026-06-29 18:14:58 -04:00
OddlyTimbot d8629e2f81 week 2 prep 2026-06-29 17:38:15 -04:00
OddlyTimbot d0819ead77 week 2 prep 2026-06-29 17:02:44 -04:00
OddlyTimbot 7824bcd6cd week 2 prep 2026-06-29 16:57:59 -04:00
37 changed files with 198 additions and 1478 deletions

No files matched your search

-105
View File
@@ -1,105 +0,0 @@
Week 4 - Environment
1. Create a second terrain for vegetation
Learn to use the tilemap layer to easily add vegetation to your level.
* Add a terrain to your terrain set zero
* Import and atlas your graphics (32x32)
* Paint terrain rules
2. Setting Display properties
Learn to set display properties to size the viewport and scale it.
Go to project settings:
Display>Window
Viewport Width 480
Viewport Height 270
This makes the viewport small, but we can now scale it up to the size we want to play at
Advanced settings: on
Window width override: 960
Window height override: 540
And finally how to handle the up-scaling
Stretch>Mode: viewport
aspect: keep
scale: 1.0
At this point you can control the scaling.
The closer the viewport setting is to the scaled size, the more of the
scene will be revealed.
You should add a camera to the player so that the viewport will show the area around them.
3. Creating a background
Create a "sky"
Create a color block the same size as your viewport (480x270)
Create a parallax2D > Add a child Sprite2D to it
Assign the graphic to be the sprite in Sprite2D
Offset the graphic in Sprite2D, 1/2 width, 1/2 height
In the parallax2D parent, set scroll scale to x:1.0 y:1.0
Repeat Size: x:480 y:270
Create a "midground" parallax2D
Scroll Scale x:1.05 y:1.0
Repeat Size x:480 y:0
Create a "foreground"
Scroll Scale x:1.1 y:1.0
Repeat Size x:480 y:0
Optional - Create a "front" parallax2D
4. Custom Graphics
Set up GIMP for creating custom pixel art
Make a background
Create a new document, set to the size of viewport (480x270)
Set up Canvas for Pixel Art
View > Show Grid
Image > Configure Grid
Spacing > 1 horizontal 1 vertical (pixels) > set foreground colour
Set up Tool for Pixel Art
Select "pencil" by click-hold on drawing tools
In tool options:
Size: 1.0
Hardness: 100
The pencil tool creates the hard edges we want in pixel art.
Saving your file as .xcf file will save your grid settings, but will not
automatically show the grid when you open the file. You will still need to
go to View > Show Grid
Turning Images into Pixel Art
When you bring in a reference image there is a good chance it will need to
have work done. A good way to get used to using reference images is to use
a silhoette image.
Get an image
Paste it as a new single layer
Scale it using the scaling tool
Use the colour picker tool to select the black
Make a new layer
Use the paint bucket tool to fill the selection (can now delete reference)
With the selection painted it will snap the paint to whole pixels, but
you will likely see some fuzzy edges because some of the pixels around edges
will be partially transparent.
You can use the colour picker tool set to "select by alpha". Now when you select
a transparent pixel, it will add all pixels with the same transparency to the
selection.
You can now use the paint bucket to fill the selection with an appropriate colour.
When done you can paint bucket the main colour (no selection) to flood-fill any
remaining partially transparent pixels.
Editing Pixel Art
You might want to customize your character art! Conveniently, your sprite sheets
are designed so that each limb of the character is composed of a consistent
colour in each frame.
This allows us to use the "colour selection" tool to select the limb in every frame.
And as above, the paint bucket can be used to fill the limb with an appropriate colour.
When complete, you can draw in anything else you like, though you will have to
do it for each cell. If you save it to your Godot project, it will overwrite
the graphics, and instantly show up in your game!
Scaling Pixel Art
Be aware that if you scale pixel art, there is a very high chance the edges will
become fuzzy and indistinct. This is because of "interpolation".
To avoid this problem, set the scaling tool to Interpolation - None.
Now when you scale your pixel art it will snap to the closes whole pixel,
maintaining the crisp edges.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

-40
View File
@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2ovhbun1d00s"
path="res://.godot/imported/crate.png-3c788bb24b8188e6f11d4ace2d9118d8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/destructibles/crate.png"
dest_files=["res://.godot/imported/crate.png-3c788bb24b8188e6f11d4ace2d9118d8.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.

Before

Width:  |  Height:  |  Size: 12 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6fqvrq70n5al"
path="res://.godot/imported/Terrain (32x32).png-7c65717e98f50801dcb0b6e4b7ea2dbc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/Terrain (32x32).png"
dest_files=["res://.godot/imported/Terrain (32x32).png-7c65717e98f50801dcb0b6e4b7ea2dbc.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.

Before

Width:  |  Height:  |  Size: 1.3 KiB

-40
View File
@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b583o88duaqu"
path="res://.godot/imported/sky.png-86cc6f428916ab8e3e1824da6ccc3df5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/bg/sky.png"
dest_files=["res://.godot/imported/sky.png-86cc6f428916ab8e3e1824da6ccc3df5.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.

Before

Width:  |  Height:  |  Size: 1.9 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cn1qvqti2u0pk"
path="res://.godot/imported/mushroom_32x64.png-f773d82c5be18b26897c2ebfe3849a39.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/mushroom_32x64.png"
dest_files=["res://.godot/imported/mushroom_32x64.png-f773d82c5be18b26897c2ebfe3849a39.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.

Before

Width:  |  Height:  |  Size: 675 B

-40
View File
@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cj3we2brsknxh"
path="res://.godot/imported/veg_32x32.png-f547c76da23451f9a832bbe2fb852b32.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/veg_32x32.png"
dest_files=["res://.godot/imported/veg_32x32.png-f547c76da23451f9a832bbe2fb852b32.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.

Before

Width:  |  Height:  |  Size: 3.2 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dngnhx41kw3mw"
path="res://.godot/imported/Player Punch 64x64.png-e81d95f7286a1f82c2b84ff5ac90cdcb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/charging/Player Punch 64x64.png"
dest_files=["res://.godot/imported/Player Punch 64x64.png-e81d95f7286a1f82c2b84ff5ac90cdcb.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.

Before

Width:  |  Height:  |  Size: 1.8 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b1ai5l50rwv4u"
path="res://.godot/imported/Player Idle 48x48.png-f4dc4a776c51960ade42b56516ebdf44.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/idle/Player Idle 48x48.png"
dest_files=["res://.godot/imported/Player Idle 48x48.png-f4dc4a776c51960ade42b56516ebdf44.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.

Before

Width:  |  Height:  |  Size: 1021 B

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgyc5mlhrd472"
path="res://.godot/imported/player jump 48x48.png-76072e8defb6fa3b97cc972a34149281.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/jump_fall/player jump 48x48.png"
dest_files=["res://.godot/imported/player jump 48x48.png-76072e8defb6fa3b97cc972a34149281.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.

Before

Width:  |  Height:  |  Size: 3.1 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://di17x5ovjtvtt"
path="res://.godot/imported/player run 48x48.png-88a3d854902c0e89fc61b644954350dd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/run/player run 48x48.png"
dest_files=["res://.godot/imported/player run 48x48.png-88a3d854902c0e89fc61b644954350dd.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.

Before

Width:  |  Height:  |  Size: 3.8 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cl142hwp38td6"
path="res://.godot/imported/pixel_bullet.png-20ba33e0a261e4601930c0fd8abb422a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/projectiles/pixel_bullet.png"
dest_files=["res://.godot/imported/pixel_bullet.png-20ba33e0a261e4601930c0fd8abb422a.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.
-13
View File
@@ -15,14 +15,6 @@ run/main_scene="uid://ch6sfehmsskcs"
config/features=PackedStringArray("4.6", "Forward Plus") config/features=PackedStringArray("4.6", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[display]
window/size/viewport_width=580
window/size/viewport_height=370
window/size/window_width_override=960
window/size/window_height_override=540
window/stretch/mode="viewport"
[input] [input]
shove={ shove={
@@ -35,11 +27,6 @@ shoot={
"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":90,"key_label":0,"unicode":122,"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":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null)
] ]
} }
fire={
"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":67,"key_label":0,"unicode":99,"location":0,"echo":false,"script":null)
]
}
[physics] [physics]
+7 -16
View File
@@ -1,23 +1,14 @@
[gd_scene format=3 uid="uid://bp51pocvj7p3x"] [gd_scene format=3 uid="uid://bp51pocvj7p3x"]
[ext_resource type="Script" uid="uid://bvy43aky6y3er" path="res://scripts/bullet.gd" id="1_mkf8s"] [ext_resource type="Script" uid="uid://bvy43aky6y3er" path="res://scripts/bullet.gd" id="1_mkf8s"]
[ext_resource type="Texture2D" uid="uid://cl142hwp38td6" path="res://assets/projectiles/pixel_bullet.png" id="2_y25gk"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_y25gk"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_h1aey"]
size = Vector2(10, 4) size = Vector2(8, 3)
[node name="Bullet" type="Area2D" unique_id=397024757] [node name="Bullet" type="Area2D" unique_id=1728947011]
script = ExtResource("1_mkf8s") script = ExtResource("1_mkf8s")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1862785605] [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=791301971]
shape = SubResource("RectangleShape2D_y25gk") position = Vector2(0, 0.5)
debug_color = Color(0.92602646, 0.20405883, 0.46076977, 0.41960785) shape = SubResource("RectangleShape2D_h1aey")
debug_color = Color(0.9348346, 0.10724712, 0.5768572, 0.41960785)
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1465228846]
texture_filter = 1
position = Vector2(-2.9999998, -1.9999998)
rotation = -3.1367095
scale = Vector2(0.07999989, 0.08039169)
texture = ExtResource("2_y25gk")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
+1 -7
View File
@@ -1,19 +1,13 @@
[gd_scene format=3 uid="uid://b6cmg0k8qjoxi"] [gd_scene format=3 uid="uid://b6cmg0k8qjoxi"]
[ext_resource type="Script" uid="uid://cxgsqwmbd0c8q" path="res://scripts/crate.gd" id="1_b66cd"] [ext_resource type="Script" uid="uid://cxgsqwmbd0c8q" path="res://scripts/crate.gd" id="1_b66cd"]
[ext_resource type="Texture2D" uid="uid://2ovhbun1d00s" path="res://assets/destructibles/crate.png" id="2_dwt0d"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_uwrxv"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_uwrxv"]
[node name="Crate" type="RigidBody2D" unique_id=1609374030 groups=["shootable"]] [node name="Crate" type="RigidBody2D" unique_id=1609374030]
script = ExtResource("1_b66cd") script = ExtResource("1_b66cd")
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1887853406]
position = Vector2(0, 2)
scale = Vector2(0.08, 0.08)
texture = ExtResource("2_dwt0d")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1778772587] [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1778772587]
shape = SubResource("RectangleShape2D_uwrxv") shape = SubResource("RectangleShape2D_uwrxv")
debug_color = Color(0.83607924, 0.38220474, 0.18172199, 0.41960785) debug_color = Color(0.83607924, 0.38220474, 0.18172199, 0.41960785)
+20 -423
View File
@@ -1,400 +1,11 @@
[gd_scene format=4 uid="uid://ch6sfehmsskcs"] [gd_scene format=3 uid="uid://ch6sfehmsskcs"]
[ext_resource type="Script" uid="uid://dtv434qd1rfmu" path="res://scripts/game.gd" id="1_lnu2h"] [ext_resource type="Script" uid="uid://dtv434qd1rfmu" path="res://scripts/game.gd" id="1_lnu2h"]
[ext_resource type="Texture2D" uid="uid://b583o88duaqu" path="res://assets/environment/bg/sky.png" id="2_0tnpc"]
[ext_resource type="Script" uid="uid://b5c00ybml8rj" path="res://scripts/scene_manager.gd" id="2_lbhrr"] [ext_resource type="Script" uid="uid://b5c00ybml8rj" path="res://scripts/scene_manager.gd" id="2_lbhrr"]
[ext_resource type="Texture2D" uid="uid://b6fqvrq70n5al" path="res://assets/environment/Terrain (32x32).png" id="2_p57ef"]
[ext_resource type="Texture2D" uid="uid://cn1qvqti2u0pk" path="res://assets/environment/mushroom_32x64.png" id="3_gee14"]
[ext_resource type="Texture2D" uid="uid://cj3we2brsknxh" path="res://assets/environment/veg_32x32.png" id="4_0tnpc"]
[ext_resource type="PackedScene" uid="uid://byl4bdrupii3k" path="res://scenes/player.tscn" id="4_iywne"] [ext_resource type="PackedScene" uid="uid://byl4bdrupii3k" path="res://scenes/player.tscn" id="4_iywne"]
[ext_resource type="PackedScene" uid="uid://b6cmg0k8qjoxi" path="res://scenes/crate.tscn" id="5_iywne"] [ext_resource type="PackedScene" uid="uid://b6cmg0k8qjoxi" path="res://scenes/crate.tscn" id="5_iywne"]
[ext_resource type="PackedScene" uid="uid://b3hgbbmb0nohj" path="res://scenes/trigger.tscn" id="5_p57ef"] [ext_resource type="PackedScene" uid="uid://b3hgbbmb0nohj" path="res://scenes/trigger.tscn" id="5_p57ef"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u5sy4"]
texture = ExtResource("2_p57ef")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
0:0/0/terrain_set = 0
0:0/0/terrain = 0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/0/terrains_peering_bit/right_side = 0
0:0/0/terrains_peering_bit/bottom_right_corner = 0
0:0/0/terrains_peering_bit/bottom_side = 0
1:0/0 = 0
1:0/0/terrain_set = 0
1:0/0/terrain = 0
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -2.5490456, -16, -1.593153)
1:0/0/terrains_peering_bit/right_side = 0
1:0/0/terrains_peering_bit/bottom_right_corner = 0
1:0/0/terrains_peering_bit/bottom_side = 0
1:0/0/terrains_peering_bit/bottom_left_corner = 0
1:0/0/terrains_peering_bit/left_side = 0
2:0/0 = 0
2:0/0/terrain_set = 0
2:0/0/terrain = 0
2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:0/0/terrains_peering_bit/bottom_side = 0
2:0/0/terrains_peering_bit/bottom_left_corner = 0
2:0/0/terrains_peering_bit/left_side = 0
4:0/0 = 0
4:0/0/terrain_set = 0
4:0/0/terrain = 0
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
4:0/0/terrains_peering_bit/bottom_side = 0
6:0/0 = 0
6:0/0/terrain_set = 0
6:0/0/terrain = 0
6:0/0/terrains_peering_bit/right_side = 0
6:0/0/terrains_peering_bit/bottom_side = 0
6:0/0/terrains_peering_bit/bottom_left_corner = 0
6:0/0/terrains_peering_bit/left_side = 0
6:0/0/terrains_peering_bit/top_left_corner = 0
6:0/0/terrains_peering_bit/top_side = 0
6:0/0/terrains_peering_bit/top_right_corner = 0
7:0/0 = 0
7:0/0/terrain_set = 0
7:0/0/terrain = 0
7:0/0/terrains_peering_bit/right_side = 0
7:0/0/terrains_peering_bit/bottom_right_corner = 0
7:0/0/terrains_peering_bit/bottom_side = 0
7:0/0/terrains_peering_bit/left_side = 0
7:0/0/terrains_peering_bit/top_left_corner = 0
7:0/0/terrains_peering_bit/top_side = 0
7:0/0/terrains_peering_bit/top_right_corner = 0
9:0/0 = 0
9:0/0/terrain_set = 0
9:0/0/terrain = 0
9:0/0/terrains_peering_bit/right_side = 0
9:0/0/terrains_peering_bit/bottom_right_corner = 0
9:0/0/terrains_peering_bit/bottom_side = 0
9:0/0/terrains_peering_bit/bottom_left_corner = 0
9:0/0/terrains_peering_bit/left_side = 0
9:0/0/terrains_peering_bit/top_side = 0
10:0/0 = 0
10:0/0/terrain_set = 0
10:0/0/terrain = 0
10:0/0/terrains_peering_bit/right_side = 0
10:0/0/terrains_peering_bit/bottom_side = 0
10:0/0/terrains_peering_bit/bottom_left_corner = 0
10:0/0/terrains_peering_bit/left_side = 0
10:0/0/terrains_peering_bit/top_left_corner = 0
10:0/0/terrains_peering_bit/top_side = 0
12:0/0 = 0
12:0/0/terrain_set = 0
12:0/0/terrain = 0
12:0/0/terrains_peering_bit/right_side = 0
12:0/0/terrains_peering_bit/bottom_right_corner = 0
12:0/0/terrains_peering_bit/bottom_side = 0
12:0/0/terrains_peering_bit/left_side = 0
12:0/0/terrains_peering_bit/top_side = 0
12:0/0/terrains_peering_bit/top_right_corner = 0
13:0/0 = 0
13:0/0/terrain_set = 0
13:0/0/terrain = 0
13:0/0/terrains_peering_bit/right_side = 0
13:0/0/terrains_peering_bit/bottom_side = 0
13:0/0/terrains_peering_bit/bottom_left_corner = 0
13:0/0/terrains_peering_bit/left_side = 0
13:0/0/terrains_peering_bit/top_side = 0
15:0/0 = 0
15:0/0/terrain_set = 0
15:0/0/terrain = 0
15:0/0/terrains_peering_bit/right_side = 0
15:0/0/terrains_peering_bit/bottom_side = 0
15:0/0/terrains_peering_bit/left_side = 0
15:0/0/terrains_peering_bit/top_side = 0
0:1/0 = 0
0:1/0/terrain_set = 0
0:1/0/terrain = 0
0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -1.5931549, -16, -0.63726044, 16, -16, 16)
0:1/0/terrains_peering_bit/right_side = 0
0:1/0/terrains_peering_bit/bottom_right_corner = 0
0:1/0/terrains_peering_bit/bottom_side = 0
0:1/0/terrains_peering_bit/top_side = 0
0:1/0/terrains_peering_bit/top_right_corner = 0
1:1/0 = 0
2:1/0 = 0
2:1/0/terrain_set = 0
2:1/0/terrain = 0
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0.95589066, -16, 16, -16, 16, 16, 0.31863022, 16)
2:1/0/terrains_peering_bit/bottom_side = 0
2:1/0/terrains_peering_bit/bottom_left_corner = 0
2:1/0/terrains_peering_bit/left_side = 0
2:1/0/terrains_peering_bit/top_left_corner = 0
2:1/0/terrains_peering_bit/top_side = 0
4:1/0 = 0
4:1/0/terrain_set = 0
4:1/0/terrain = 0
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
4:1/0/terrains_peering_bit/bottom_side = 0
4:1/0/terrains_peering_bit/top_side = 0
6:1/0 = 0
6:1/0/terrain_set = 0
6:1/0/terrain = 0
6:1/0/terrains_peering_bit/right_side = 0
6:1/0/terrains_peering_bit/bottom_right_corner = 0
6:1/0/terrains_peering_bit/bottom_side = 0
6:1/0/terrains_peering_bit/bottom_left_corner = 0
6:1/0/terrains_peering_bit/left_side = 0
6:1/0/terrains_peering_bit/top_left_corner = 0
6:1/0/terrains_peering_bit/top_side = 0
7:1/0 = 0
7:1/0/terrain_set = 0
7:1/0/terrain = 0
7:1/0/terrains_peering_bit/right_side = 0
7:1/0/terrains_peering_bit/bottom_right_corner = 0
7:1/0/terrains_peering_bit/bottom_side = 0
7:1/0/terrains_peering_bit/bottom_left_corner = 0
7:1/0/terrains_peering_bit/left_side = 0
7:1/0/terrains_peering_bit/top_side = 0
7:1/0/terrains_peering_bit/top_right_corner = 0
9:1/0 = 0
9:1/0/terrain_set = 0
9:1/0/terrain = 0
9:1/0/terrains_peering_bit/right_side = 0
9:1/0/terrains_peering_bit/bottom_right_corner = 0
9:1/0/terrains_peering_bit/bottom_side = 0
9:1/0/terrains_peering_bit/top_side = 0
9:1/0/terrains_peering_bit/top_right_corner = 0
10:1/0 = 0
10:1/0/terrain_set = 0
10:1/0/terrain = 0
10:1/0/terrains_peering_bit/right_side = 0
10:1/0/terrains_peering_bit/bottom_side = 0
10:1/0/terrains_peering_bit/left_side = 0
10:1/0/terrains_peering_bit/top_left_corner = 0
10:1/0/terrains_peering_bit/top_side = 0
10:1/0/terrains_peering_bit/top_right_corner = 0
12:1/0 = 0
12:1/0/terrain_set = 0
12:1/0/terrain = 0
12:1/0/terrains_peering_bit/right_side = 0
12:1/0/terrains_peering_bit/bottom_side = 0
12:1/0/terrains_peering_bit/left_side = 0
12:1/0/terrains_peering_bit/top_side = 0
12:1/0/terrains_peering_bit/top_right_corner = 0
13:1/0 = 0
13:1/0/terrain_set = 0
13:1/0/terrain = 0
13:1/0/terrains_peering_bit/right_side = 0
13:1/0/terrains_peering_bit/bottom_side = 0
13:1/0/terrains_peering_bit/left_side = 0
13:1/0/terrains_peering_bit/top_left_corner = 0
13:1/0/terrains_peering_bit/top_side = 0
15:1/0 = 0
15:1/0/terrain_set = 0
15:1/0/terrain = 0
15:1/0/terrains_peering_bit/right_side = 0
15:1/0/terrains_peering_bit/bottom_side = 0
15:1/0/terrains_peering_bit/bottom_left_corner = 0
15:1/0/terrains_peering_bit/top_side = 0
15:1/0/terrains_peering_bit/top_right_corner = 0
16:1/0 = 0
16:1/0/terrain_set = 0
16:1/0/terrain = 0
16:1/0/terrains_peering_bit/right_side = 0
16:1/0/terrains_peering_bit/bottom_right_corner = 0
16:1/0/terrains_peering_bit/bottom_side = 0
16:1/0/terrains_peering_bit/left_side = 0
16:1/0/terrains_peering_bit/top_left_corner = 0
16:1/0/terrains_peering_bit/top_side = 0
16:1/0/terrains_peering_bit/top_right_corner = 0
0:2/0 = 0
0:2/0/terrain_set = 0
0:2/0/terrain = 0
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:2/0/terrains_peering_bit/right_side = 0
0:2/0/terrains_peering_bit/top_side = 0
0:2/0/terrains_peering_bit/top_right_corner = 0
1:2/0 = 0
1:2/0/terrain_set = 0
1:2/0/terrain = 0
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -0.31863022, 16, -0.63726044, 16, 16, -16, 16)
1:2/0/terrains_peering_bit/right_side = 0
1:2/0/terrains_peering_bit/left_side = 0
1:2/0/terrains_peering_bit/top_left_corner = 0
1:2/0/terrains_peering_bit/top_side = 0
1:2/0/terrains_peering_bit/top_right_corner = 0
2:2/0 = 0
2:2/0/terrain_set = 0
2:2/0/terrain = 0
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:2/0/terrains_peering_bit/left_side = 0
2:2/0/terrains_peering_bit/top_left_corner = 0
2:2/0/terrains_peering_bit/top_side = 0
4:2/0 = 0
4:2/0/terrain_set = 0
4:2/0/terrain = 0
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
4:2/0/terrains_peering_bit/top_side = 0
6:3/0 = 0
6:3/0/terrain_set = 0
6:3/0/terrain = 0
6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -0.9558945, -16, -0.9558945, 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/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/physics_layer_0/polygon_0/points = PackedVector2Array(0.95589066, -16, 16, -16, 16, 16, 1.5931549, 16)
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
9:3/0 = 0
9:3/0/terrain_set = 0
9:3/0/terrain = 0
9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -1.2745228, -16, -1.2745228)
9:3/0/terrains_peering_bit/right_side = 0
9:3/0/terrains_peering_bit/bottom_side = 0
9:3/0/terrains_peering_bit/bottom_left_corner = 0
9:3/0/terrains_peering_bit/left_side = 0
10:3/0 = 0
10:3/0/terrain_set = 0
10:3/0/terrain = 0
10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -1.2745228, -16, -1.2745228)
10:3/0/terrains_peering_bit/right_side = 0
10:3/0/terrains_peering_bit/bottom_right_corner = 0
10:3/0/terrains_peering_bit/bottom_side = 0
10:3/0/terrains_peering_bit/left_side = 0
12:3/0 = 0
12:3/0/terrain_set = 0
12:3/0/terrain = 0
12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
12:3/0/terrains_peering_bit/right_side = 0
12:3/0/terrains_peering_bit/bottom_side = 0
12:3/0/terrains_peering_bit/top_side = 0
12:3/0/terrains_peering_bit/top_right_corner = 0
13:3/0 = 0
13:3/0/terrain_set = 0
13:3/0/terrain = 0
13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
13:3/0/terrains_peering_bit/right_side = 0
13:3/0/terrains_peering_bit/bottom_side = 0
13:3/0/terrains_peering_bit/left_side = 0
15:3/0 = 0
15:3/0/terrain_set = 0
15:3/0/terrain = 0
15:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
15:3/0/terrains_peering_bit/right_side = 0
15:3/0/terrains_peering_bit/bottom_side = 0
16:3/0 = 0
16:3/0/terrain_set = 0
16:3/0/terrain = 0
16:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
16:3/0/terrains_peering_bit/bottom_side = 0
16:3/0/terrains_peering_bit/left_side = 0
0:4/0 = 0
0:4/0/terrain_set = 0
0:4/0/terrain = 0
0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:4/0/terrains_peering_bit/right_side = 0
1:4/0 = 0
1:4/0/terrain_set = 0
1:4/0/terrain = 0
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/left_side = 0
2:4/0 = 0
2:4/0/terrain_set = 0
2:4/0/terrain = 0
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:4/0/terrains_peering_bit/left_side = 0
4:4/0 = 0
4:4/0/terrain_set = 0
4:4/0/terrain = 0
4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
6:4/0 = 0
6:4/0/terrain_set = 0
6:4/0/terrain = 0
6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -0.9558945, -16, -0.9558945, 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/top_side = 0
7:4/0 = 0
7:4/0/terrain_set = 0
7:4/0/terrain = 0
7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(0.95589066, -16, 16, -16, 16, 16, 1.5931549, 16)
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
9:4/0 = 0
9:4/0/terrain_set = 0
9:4/0/terrain = 0
9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -1.593153, 16, -1.9117851, 16, 16, -16, 16)
9:4/0/terrains_peering_bit/right_side = 0
9:4/0/terrains_peering_bit/left_side = 0
9:4/0/terrains_peering_bit/top_left_corner = 0
9:4/0/terrains_peering_bit/top_side = 0
10:4/0 = 0
10:4/0/terrain_set = 0
10:4/0/terrain = 0
10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -1.593153, 16, -1.9117851, 16, 16, -16, 16)
10:4/0/terrains_peering_bit/right_side = 0
10:4/0/terrains_peering_bit/left_side = 0
10:4/0/terrains_peering_bit/top_side = 0
10:4/0/terrains_peering_bit/top_right_corner = 0
12:4/0 = 0
12:4/0/terrain_set = 0
12:4/0/terrain = 0
12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
12:4/0/terrains_peering_bit/right_side = 0
12:4/0/terrains_peering_bit/left_side = 0
12:4/0/terrains_peering_bit/top_side = 0
13:4/0 = 0
13:4/0/terrain_set = 0
13:4/0/terrain = 0
13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
13:4/0/terrains_peering_bit/bottom_side = 0
13:4/0/terrains_peering_bit/left_side = 0
13:4/0/terrains_peering_bit/top_side = 0
15:4/0 = 0
15:4/0/terrain_set = 0
15:4/0/terrain = 0
15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
15:4/0/terrains_peering_bit/right_side = 0
15:4/0/terrains_peering_bit/top_side = 0
16:4/0 = 0
16:4/0/terrain_set = 0
16:4/0/terrain = 0
16:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
16:4/0/terrains_peering_bit/left_side = 0
16:4/0/terrains_peering_bit/top_side = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vtaks"]
texture = ExtResource("3_gee14")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
0:0/0/terrain_set = 0
0:0/0/terrains_peering_bit/bottom_side = 1
0:1/0 = 0
0:1/0/terrain_set = 0
0:1/0/terrain = 1
0:1/0/terrains_peering_bit/top_side = 1
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kvpfn"]
texture = ExtResource("4_0tnpc")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
0:0/0/terrain_set = 0
0:0/0/terrain = 1
[sub_resource type="TileSet" id="TileSet_gee14"]
tile_size = Vector2i(32, 32)
physics_layer_0/collision_layer = 1
terrain_set_0/mode = 0
terrain_set_0/terrain_0/name = "LeafyGreen"
terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1)
terrain_set_0/terrain_1/name = "Veg 1"
terrain_set_0/terrain_1/color = Color(0.5, 0.4375, 0.25, 1)
sources/0 = SubResource("TileSetAtlasSource_u5sy4")
sources/1 = SubResource("TileSetAtlasSource_vtaks")
sources/2 = SubResource("TileSetAtlasSource_kvpfn")
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8cj0n"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_8cj0n"]
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_iywne"] [sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_iywne"]
@@ -402,50 +13,36 @@ sources/2 = SubResource("TileSetAtlasSource_kvpfn")
[node name="Game" type="Node2D" unique_id=981419409] [node name="Game" type="Node2D" unique_id=981419409]
script = ExtResource("1_lnu2h") script = ExtResource("1_lnu2h")
[node name="Parallax2D" type="Parallax2D" parent="." unique_id=2081148083]
repeat_size = Vector2(580, 370)
[node name="Sprite2D" type="Sprite2D" parent="Parallax2D" unique_id=879239814]
texture = ExtResource("2_0tnpc")
offset = Vector2(290, 185)
[node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=1253342998]
tile_map_data = PackedByteArray("AAARAA0AAAAQAAQAAAARAAwAAAAPAAMAAAASAAwAAAABAAQAAAATAAwAAAAQAAQAAAATAAsAAAAEAAAAAAAUAAkAAAAAAAQAAAAVAAkAAAABAAQAAAAWAAkAAAACAAQAAAAXABEAAAAAAAQAAAAYABEAAAAQAAQAAAAYABAAAAAPAAMAAAAZABAAAAABAAQAAAAaABAAAAABAAQAAAAbABAAAAAQAAQAAAAbAA8AAAAEAAAAAAAbAAwAAAAAAAIAAAAbAAsAAAAAAAAAAAAcAAsAAAABAAAAAAAcAAwAAAABAAIAAAAdAAwAAAACAAIAAAAdAAsAAAAJAAMAAAAeAAsAAAACAAQAAAANAA0AAAAAAAQAAAAOAA0AAAABAAQAAAAPAA0AAAABAAQAAAAQAA0AAAABAAQAAAAKAA8AAAAAAAQAAAALAA8AAAABAAQAAAAMAA8AAAABAAQAAAANAA8AAAAKAAMAAAAOAA8AAAABAAAAAAAPAA8AAAABAAAAAAAQAA8AAAACAAAAAAAQABAAAAACAAEAAAAPABAAAAAGAAAAAAAOABAAAAAGAAAAAAANABAAAAAJAAEAAAANABEAAAAAAAIAAAAOABEAAAABAAIAAAAPABEAAAABAAIAAAAQABEAAAAJAAQAAAARABEAAAABAAQAAAASABEAAAAMAAQAAAASABAAAAAEAAAAAAATABEAAAACAAQAAAAbAA4AAgAAAAAAAAAbAAoAAQAAAAEAAAAbAAkAAQAAAAAAAAAKAA4AAQAAAAEAAAAKAA0AAQAAAAAAAAALAA4AAgAAAAAAAAAVAAgAAgAAAAAAAAA=")
tile_set = SubResource("TileSet_gee14")
[node name="SceneManager" type="Node2D" parent="." unique_id=323246552] [node name="SceneManager" type="Node2D" parent="." unique_id=323246552]
script = ExtResource("2_lbhrr") script = ExtResource("2_lbhrr")
[node name="Player" parent="." unique_id=2145223914 instance=ExtResource("4_iywne")] [node name="Player" parent="." unique_id=1254268479 instance=ExtResource("4_iywne")]
position = Vector2(490, 380) position = Vector2(440.00006, 375.00003)
[node name="Crates" type="Node2D" parent="." unique_id=207771395] [node name="Crates" type="Node2D" parent="." unique_id=207771395]
[node name="Crate" parent="Crates" unique_id=1609374030 instance=ExtResource("5_iywne")] [node name="Crate" parent="Crates" unique_id=1609374030 instance=ExtResource("5_iywne")]
position = Vector2(951, 332.99997) position = Vector2(508, 373)
[node name="Crate3" parent="Crates" unique_id=249514132 instance=ExtResource("5_iywne")]
position = Vector2(731, 340)
[node name="Crate2" parent="Crates" unique_id=1603366376 instance=ExtResource("5_iywne")] [node name="Crate2" parent="Crates" unique_id=1603366376 instance=ExtResource("5_iywne")]
position = Vector2(558, 368) position = Vector2(1098, 323)
[node name="Walls" type="Node2D" parent="." unique_id=80334518] [node name="Walls" type="Node2D" parent="." unique_id=1895909883]
[node name="StaticBody2D" type="StaticBody2D" parent="Walls" unique_id=1863997109] [node name="StaticBody2D" type="StaticBody2D" parent="Walls" unique_id=1863997109]
position = Vector2(553.00006, 401) position = Vector2(446.00006, 404)
scale = Vector2(3.4000025, 1) scale = Vector2(3.4000025, 1)
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D" unique_id=1910670137] [node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D" unique_id=1910670137]
shape = SubResource("RectangleShape2D_8cj0n") shape = SubResource("RectangleShape2D_8cj0n")
[node name="StaticBody2D4" type="StaticBody2D" parent="Walls" unique_id=823918434] [node name="StaticBody2D4" type="StaticBody2D" parent="Walls" unique_id=575340316]
position = Vector2(857, 608) position = Vector2(516, 404)
scale = Vector2(3.4000025, 1) scale = Vector2(3.4000025, 1)
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D4" unique_id=1243761990] [node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D4" unique_id=522720352]
shape = SubResource("RectangleShape2D_8cj0n") shape = SubResource("RectangleShape2D_8cj0n")
[node name="StaticBody2D3" type="StaticBody2D" parent="Walls" unique_id=2089762008] [node name="StaticBody2D3" type="StaticBody2D" parent="Walls" unique_id=2089762008]
@@ -465,23 +62,23 @@ metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D2" unique_id=1636593491] [node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D2" unique_id=1636593491]
shape = SubResource("RectangleShape2D_8cj0n") shape = SubResource("RectangleShape2D_8cj0n")
[node name="StaticBody2D5" type="StaticBody2D" parent="Walls" unique_id=564687476] [node name="StaticBody2D5" type="StaticBody2D" parent="Walls" unique_id=1787748242]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D5" unique_id=1147447008] [node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D5" unique_id=1244109335]
position = Vector2(0, 588) position = Vector2(0, 554)
shape = SubResource("WorldBoundaryShape2D_iywne") shape = SubResource("WorldBoundaryShape2D_iywne")
[node name="Triggers" type="Node2D" parent="." unique_id=1195236992] [node name="Triggers" type="Node2D" parent="." unique_id=193669081]
[node name="Trigger" parent="Triggers" unique_id=229441825 instance=ExtResource("5_p57ef")] [node name="Trigger" parent="Triggers" unique_id=1050615345 instance=ExtResource("5_p57ef")]
position = Vector2(712, 463) position = Vector2(621.00006, 465.00006)
[node name="Trigger2" parent="Triggers" unique_id=1474950249 instance=ExtResource("5_p57ef")] [node name="Trigger2" parent="Triggers" unique_id=1114882050 instance=ExtResource("5_p57ef")]
position = Vector2(817, 445) position = Vector2(829, 464)
intent = "fan" intent = "fan"
[node name="Trigger3" parent="Triggers" unique_id=205623468 instance=ExtResource("5_p57ef")] [node name="Trigger3" parent="Triggers" unique_id=400578019 instance=ExtResource("5_p57ef")]
position = Vector2(953.99994, 442.99997) position = Vector2(1097, 462.99997)
intent = "teleport" intent = "teleport"
[connection signal="areaTriggerSignal" from="Triggers/Trigger" to="." method="_on_trigger"] [connection signal="areaTriggerSignal" from="Triggers/Trigger" to="." method="_on_trigger"]
+18 -237
View File
@@ -1,252 +1,33 @@
[gd_scene format=3 uid="uid://byl4bdrupii3k"] [gd_scene format=3 uid="uid://byl4bdrupii3k"]
[ext_resource type="Script" uid="uid://b1obldvd2etx7" path="res://scripts/player.gd" id="1_3vyb7"] [ext_resource type="Script" uid="uid://b1obldvd2etx7" path="res://scripts/player.gd" id="1_3vyb7"]
[ext_resource type="Texture2D" uid="uid://b1ai5l50rwv4u" path="res://assets/player/idle/Player Idle 48x48.png" id="2_g2els"]
[ext_resource type="Texture2D" uid="uid://dngnhx41kw3mw" path="res://assets/player/charging/Player Punch 64x64.png" id="2_qlg0r"]
[ext_resource type="Texture2D" uid="uid://cgyc5mlhrd472" path="res://assets/player/jump_fall/player jump 48x48.png" id="3_dqkch"]
[ext_resource type="Texture2D" uid="uid://di17x5ovjtvtt" path="res://assets/player/run/player run 48x48.png" id="3_qhqgy"]
[sub_resource type="CircleShape2D" id="CircleShape2D_uwrxv"] [sub_resource type="CircleShape2D" id="CircleShape2D_uwrxv"]
[sub_resource type="AtlasTexture" id="AtlasTexture_l71n6"] [node name="Player" type="CharacterBody2D" unique_id=1254268479]
atlas = ExtResource("2_qlg0r")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_4ni07"]
atlas = ExtResource("3_dqkch")
region = Rect2(96, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_qhqgy"]
atlas = ExtResource("2_g2els")
region = Rect2(0, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"]
atlas = ExtResource("2_g2els")
region = Rect2(48, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_qlg0r"]
atlas = ExtResource("2_g2els")
region = Rect2(96, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"]
atlas = ExtResource("2_g2els")
region = Rect2(144, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"]
atlas = ExtResource("2_g2els")
region = Rect2(192, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_smehm"]
atlas = ExtResource("2_g2els")
region = Rect2(240, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_ur7pv"]
atlas = ExtResource("2_g2els")
region = Rect2(288, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_y4r1p"]
atlas = ExtResource("2_g2els")
region = Rect2(336, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_d2wvv"]
atlas = ExtResource("2_g2els")
region = Rect2(384, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_3v2ag"]
atlas = ExtResource("2_g2els")
region = Rect2(432, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_i4ail"]
atlas = ExtResource("3_dqkch")
region = Rect2(0, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_a38lo"]
atlas = ExtResource("3_dqkch")
region = Rect2(48, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"]
atlas = ExtResource("3_qhqgy")
region = Rect2(0, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_f1ej7"]
atlas = ExtResource("3_qhqgy")
region = Rect2(48, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"]
atlas = ExtResource("3_qhqgy")
region = Rect2(96, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_a8ls1"]
atlas = ExtResource("3_qhqgy")
region = Rect2(144, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_qfm1y"]
atlas = ExtResource("3_qhqgy")
region = Rect2(192, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_fulsm"]
atlas = ExtResource("3_qhqgy")
region = Rect2(240, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_4r5pv"]
atlas = ExtResource("3_qhqgy")
region = Rect2(288, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_60mlk"]
atlas = ExtResource("3_qhqgy")
region = Rect2(336, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_ke2ow"]
atlas = ExtResource("2_qlg0r")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ujl30"]
atlas = ExtResource("2_qlg0r")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_31cv2"]
atlas = ExtResource("2_qlg0r")
region = Rect2(320, 0, 64, 64)
[sub_resource type="SpriteFrames" id="SpriteFrames_jej6c"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_l71n6")
}],
"loop": false,
"name": &"charging",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_4ni07")
}],
"loop": false,
"name": &"falling",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_qhqgy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_dqkch")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_qlg0r")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tuyoq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fjrip")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_smehm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ur7pv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_y4r1p")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_d2wvv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3v2ag")
}],
"loop": true,
"name": &"idle",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_i4ail")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_a38lo")
}],
"loop": false,
"name": &"jumping",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_jej6c")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_f1ej7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_oprun")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_a8ls1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_qfm1y")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fulsm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4r5pv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_60mlk")
}],
"loop": true,
"name": &"running",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ke2ow")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ujl30")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_31cv2")
}],
"loop": false,
"name": &"shoving",
"speed": 12.0
}]
[node name="Player" type="CharacterBody2D" unique_id=2145223914]
scale = Vector2(1.4799998, 1.4799998) scale = Vector2(1.4799998, 1.4799998)
script = ExtResource("1_3vyb7") script = ExtResource("1_3vyb7")
metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=775715684] [node name="Label" type="Label" parent="." unique_id=712501367]
offset_left = -19.594597
offset_top = -36.486492
offset_right = 20.405403
offset_bottom = -13.486492
text = "label"
horizontal_alignment = 1
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=771657224]
shape = SubResource("CircleShape2D_uwrxv") shape = SubResource("CircleShape2D_uwrxv")
debug_color = Color(0.39731503, 0.48776567, 0.95015794, 0.41960785) debug_color = Color(0.39731503, 0.48776567, 0.95015794, 0.41960785)
[node name="RightCast" type="RayCast2D" parent="." unique_id=967990879] [node name="RightCast" type="RayCast2D" parent="." unique_id=1585175579]
target_position = Vector2(16.891893, 0) target_position = Vector2(16.216217, -0.67567575)
[node name="LeftCast" type="RayCast2D" parent="." unique_id=926020029] [node name="LeftCast" type="RayCast2D" parent="." unique_id=544087242]
target_position = Vector2(-17.56757, -0.67567575) target_position = Vector2(-15.540543, -0.67567575)
[node name="RightSpawn" type="Marker2D" parent="." unique_id=72314368] [node name="RightTarget" type="Marker2D" parent="." unique_id=855125472]
position = Vector2(12.837839, -8.1081085) position = Vector2(15.540543, -8.783785)
[node name="LeftSpawn" type="Marker2D" parent="." unique_id=374152113] [node name="LeftTarget" type="Marker2D" parent="." unique_id=1162416681]
position = Vector2(-12.837839, -8.108109) position = Vector2(-14.864867, -8.783785)
[node name="PlayerGraphic" type="AnimatedSprite2D" parent="." unique_id=174634956]
texture_filter = 1
position = Vector2(0, -6.081082)
sprite_frames = SubResource("SpriteFrames_jej6c")
animation = &"shoving"
autoplay = "idle"
frame = 2
frame_progress = 1.0
[node name="Camera2D" type="Camera2D" parent="." unique_id=144867956]
offset = Vector2(0, -50)
[connection signal="animation_finished" from="PlayerGraphic" to="." method="_on_animation_finished"]
-17
View File
@@ -1,17 +0,0 @@
[gd_scene format=3 uid="uid://do4vf0eh7ku01"]
[ext_resource type="Script" uid="uid://bv3ixqvmjrf8j" path="res://scripts/rocket.gd" id="1_3341w"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_00dr1"]
size = Vector2(12, 4)
[node name="Rocket" type="RigidBody2D" unique_id=2026133878]
contact_monitor = true
max_contacts_reported = 2
script = ExtResource("1_3341w")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1980926328]
shape = SubResource("RectangleShape2D_00dr1")
debug_color = Color(0.63964945, 0.5193221, 0.22762358, 0.41960785)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
+12 -2
View File
@@ -4,13 +4,23 @@
[sub_resource type="CircleShape2D" id="CircleShape2D_8cj0n"] [sub_resource type="CircleShape2D" id="CircleShape2D_8cj0n"]
[node name="Trigger" type="Area2D" unique_id=229441825] [node name="Trigger" type="Area2D" unique_id=1050615345]
scale = Vector2(4.2, 4.2) scale = Vector2(4.2, 4.2)
script = ExtResource("1_du5ex") script = ExtResource("1_du5ex")
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1121443164] [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=703121924]
shape = SubResource("CircleShape2D_8cj0n") shape = SubResource("CircleShape2D_8cj0n")
debug_color = Color(0.3285461, 0.6189337, 0.22834331, 0.41960785) debug_color = Color(0.3285461, 0.6189337, 0.22834331, 0.41960785)
[node name="Label" type="Label" parent="." unique_id=1171382845]
texture_filter = 1
offset_left = -18.333336
offset_top = -8.333334
offset_right = 21.666664
offset_bottom = 2.666666
theme_override_font_sizes/font_size = 7
text = "trigger"
horizontal_alignment = 1
[connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="body_entered" from="." to="." method="_on_body_entered"]
+12 -6
View File
@@ -1,13 +1,19 @@
class_name Bullet extends Area2D class_name Bullet extends Area2D
var speed:float = 700 var speed:float = 700
signal bulletHitSignal(body, bullet)
func setSpeed(value)->void: signal bulletDamageSignal(body, bullet)
func setSpeed(value:int)->void:
speed = value speed = value
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void: func _process(delta: float) -> void:
position += transform.x * speed * delta position += transform.x * speed *delta
func _on_body_entered(body: Node2D) -> void: func _on_body_entered(body: Node2D) -> void:
if body is Crate: bulletDamageSignal.emit(body, self)
bulletHitSignal.emit(body,self)
func _on_area_entered(area: Area2D) -> void:
bulletDamageSignal.emit(area, self)
+2 -2
View File
@@ -1,7 +1,7 @@
class_name Crate extends RigidBody2D class_name Crate extends RigidBody2D
var teleport_target:Vector2 = Vector2.ZERO var teleport_target: Vector2 = Vector2.ZERO
var should_teleport:bool = false var should_teleport: bool = false
func teleport_to(position:Vector2): func teleport_to(position:Vector2):
teleport_target = position teleport_target = position
+18 -26
View File
@@ -1,10 +1,13 @@
class_name GameController extends Node2D extends Node2D
signal destroySignal(body)
signal fanTriggerSignal(body, fanDirection)
signal teleportTriggerSignal(body)
var numberOfCrates = 2 var numberOfCrates = 2
var timeAvailable = 50 var timeAvailable = 50
signal destroySignal(body)
signal levelChangeSignal(level)
signal fanUpSignal(body,direction)
signal teleportSignal(body)
var timer = Timer.new() var timer = Timer.new()
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
@@ -20,38 +23,27 @@ func countdown()->void:
timeAvailable-=1 timeAvailable-=1
if timeAvailable<=0 and numberOfCrates>0: if timeAvailable<=0 and numberOfCrates>0:
print("LOOOOOSAH") print("LOOOOOSAH")
get_tree().reload_current_scene() levelChangeSignal.emit("res://scenes/game.tscn")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_trigger(body: Variant, trigger: Variant, intent:String) -> void: func _on_trigger(body: Variant, trigger: Variant, intent:String) -> void:
print("GC knows trigger fired") print("GC knows trigger fired "+intent)
match intent: match intent:
"destroy": "destroy":
print("GC sending destroy signal")
destroySignal.emit(body) destroySignal.emit(body)
"fan": "fan":
print("do a fan effect") if body is RigidBody2D:
fanTriggerSignal.emit(body,Vector2(0,-1)*100*9) fanUpSignal.emit(body,Vector2(0,-1)*100*9)
"teleport": "teleport":
print("do a teleport") if body is Crate:
teleportTriggerSignal.emit(body) teleportSignal.emit(body)
#from scene manager
func crateTotal(howmany): func crateTotal(howmany):
numberOfCrates = howmany numberOfCrates = howmany
print("GC knows about crates: "+str(numberOfCrates)) print("GC knows about crates: "+str(numberOfCrates))
if numberOfCrates == 0: if numberOfCrates == 0:
print("YOU WON!!!") print("YOU WON!!!")
get_tree().reload_current_scene() levelChangeSignal.emit("res://scenes/game.tscn")
func bulletDamage(body, _bullet)->void: func bulletDamage()->void:
if body.is_in_group("shootable"): print("bullet damage")
destroySignal.emit(body)
destroySignal.emit(_bullet)
func rocketDamage(body, rocket)->void:
if body.is_in_group("shootable"):
print("Rocket strikes target!")
destroySignal.emit(body)
+64 -121
View File
@@ -1,158 +1,101 @@
class_name Player extends CharacterBody2D class_name Player extends CharacterBody2D
signal pushSignal(body, direction)
signal shootSignal(markerPosition, speed)
signal fireSignal(markerPosition, direction, speed)
@onready var right_cast: RayCast2D = $RightCast
@onready var left_cast: RayCast2D = $LeftCast
@onready var right_spawn: Marker2D = $RightSpawn
@onready var left_spawn: Marker2D = $LeftSpawn
@onready var player_graphic: AnimatedSprite2D = $PlayerGraphic
var pushRightEnabled = false @onready var label: Label = $Label
var pushLeftEnabled = false
@onready var rightRay: RayCast2D = $RightCast
@onready var leftRay: RayCast2D = $LeftCast
@onready var right_target: Marker2D = $RightTarget
@onready var left_target: Marker2D = $LeftTarget
var pushRightEnabled:=false
var pushLeftEnabled := false
var pushTarget var pushTarget
var pushTimer = 0 var pushTimer:int = 0
signal forcePushSignal(body,direction)
signal shootSignal(targetPosition, speed)
#track facing direction
enum FaceDirection {LEFT,RIGHT}
var facing:FaceDirection = FaceDirection.RIGHT
const SPEED = 300.0 const SPEED = 300.0
const JUMP_VELOCITY = -400.0 const JUMP_VELOCITY = -400.0
enum FaceDirection {RIGHT,LEFT}
var facing:FaceDirection = FaceDirection.RIGHT
enum PlayerStates {IDLE,RUNNING,JUMPING,FALLING,CHARGING,SHOVING}
var current_player_state:PlayerStates = PlayerStates.IDLE
var upJump:bool = false
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
handle_input() # Add the gravity.
handle_movement(delta) if not is_on_floor():
handle_states() velocity += get_gravity() * delta
handle_animation()
move_and_slide()
handle_collisions()
func handle_input()->void:
# Handle jump. # Handle jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor(): if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY velocity.y = JUMP_VELOCITY
current_player_state=PlayerStates.JUMPING
upJump = true # Handle shove
# Handle shove.
if Input.is_action_just_pressed("shove"): if Input.is_action_just_pressed("shove"):
print("I want to shove") pushTimer = Time.get_ticks_msec() #record start of build
if pushRightEnabled and facing==FaceDirection.RIGHT:
current_player_state= PlayerStates.CHARGING #Handle shove
pushTimer = Time.get_ticks_msec()
if pushLeftEnabled and facing==FaceDirection.LEFT:
current_player_state= PlayerStates.CHARGING
pushTimer = Time.get_ticks_msec()
if Input.is_action_just_released("shove"): if Input.is_action_just_released("shove"):
var pushForce = Time.get_ticks_msec() - pushTimer var pushForce = Time.get_ticks_msec() - pushTimer
#do a maximium force value
if pushForce>4000: if pushForce>4000:
pushForce=4000 pushForce = 4000
if pushRightEnabled and facing==FaceDirection.RIGHT: if pushRightEnabled and facing==FaceDirection.RIGHT:
#deliver the boom label.text = "shove"
pushSignal.emit(pushTarget, Vector2(1,0)*100*(pushForce/100)) forcePushSignal.emit(pushTarget, Vector2(1,0)*100*(pushForce/100))
current_player_state = PlayerStates.SHOVING
if pushLeftEnabled and facing==FaceDirection.LEFT: if pushLeftEnabled and facing==FaceDirection.LEFT:
pushSignal.emit(pushTarget, Vector2(-1,0)*100*(pushForce/100)) forcePushSignal.emit(pushTarget, Vector2(-1,0)*100*(pushForce/100))
current_player_state = PlayerStates.SHOVING label.text = "shove"
#Handle Shoot Bullet # Handle Shoot
if Input.is_action_just_pressed("shoot"): if Input.is_action_just_pressed("shoot"):
print("Ima shoot a bullet") print("Player wants to shoot")
#marker postion, speed
match facing: match facing:
FaceDirection.RIGHT: FaceDirection.RIGHT:
shootSignal.emit(right_spawn.global_transform, 800) print("Shoot to the right")
#%SceneManager.makeBullet(right_target.global_transform, 700)
shootSignal.emit(right_target.global_transform, 700)
FaceDirection.LEFT: FaceDirection.LEFT:
shootSignal.emit(left_spawn.global_transform, -800) print("Shoot to the left")
#Handle fire rocket #%SceneManager.makeBullet(left_target.global_transform, -700)
if Input.is_action_just_pressed("fire"): shootSignal.emit(left_target.global_transform, -700)
print("Ima fire rocket")
match facing:
FaceDirection.RIGHT:
fireSignal.emit(right_spawn.global_transform,Vector2(1,0), 800)
FaceDirection.LEFT:
fireSignal.emit(left_spawn.global_transform,Vector2(1,0), 800)
# Get the input direction and handle the movement/deceleration. # Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions. # As good practice, you should replace UI actions with custom gameplay actions.
var direction := Input.get_axis("ui_left", "ui_right") var direction := Input.get_axis("ui_left", "ui_right")
if direction: if direction:
velocity.x = direction * SPEED velocity.x = direction * SPEED
if direction >0: if direction>0:
facing = FaceDirection.RIGHT facing = FaceDirection.RIGHT
player_graphic.flip_h = false
else: else:
facing = FaceDirection.LEFT facing = FaceDirection.LEFT
player_graphic.flip_h = true
else: else:
velocity.x = move_toward(velocity.x, 0, SPEED) velocity.x = move_toward(velocity.x, 0, SPEED)
func handle_movement(delta)->void: move_and_slide()
# Add the gravity.
if not is_on_floor():
velocity += get_gravity() * delta
func handle_collisions()->void:
if right_cast.is_colliding():
print("Right raycast collision")
var collider = right_cast.get_collider()
if collider is Node:
pushRightEnabled = true
pushTarget = collider
else:
pushRightEnabled = false
if left_cast.is_colliding():
print("Left raycast collision")
var collider = left_cast.get_collider()
if collider is Node:
pushLeftEnabled = true
pushTarget = collider
else:
pushLeftEnabled = false
#a loop #a loop
for i in get_slide_collision_count(): for i in get_slide_collision_count():
var c = get_slide_collision(i) var c = get_slide_collision(i)
#is this a bonkable thing? #is this a bonkable thing?
if c.get_collider() is RigidBody2D: if c.get_collider() is RigidBody2D:
#c.get_collider().apply_central_impulse(-c.get_normal() * 100) forcePushSignal.emit(c.get_collider(), -c.get_normal() * 100)
pushSignal.emit(c.get_collider(), -c.get_normal() * 100) if rightRay.is_colliding():
#Exciting new stuff
func handle_states()->void: #get the thing causing the collision
match current_player_state: var collider = rightRay.get_collider()
PlayerStates.IDLE when velocity.x !=0: if collider is Node:
current_player_state = PlayerStates.RUNNING pushRightEnabled = true
PlayerStates.RUNNING when velocity.x ==0: pushTarget = collider
current_player_state = PlayerStates.IDLE else:
PlayerStates.JUMPING when velocity.y>0: pushRightEnabled = false
current_player_state = PlayerStates.FALLING
PlayerStates.FALLING when is_on_floor(): if leftRay.is_colliding():
if velocity.x ==0:
current_player_state = PlayerStates.IDLE #get the thing causing the collision
else: var collider = leftRay.get_collider()
current_player_state = PlayerStates.RUNNING if collider is Node:
func handle_animation()->void: pushLeftEnabled = true
match current_player_state: pushTarget = collider
PlayerStates.RUNNING: else:
player_graphic.play("running") pushLeftEnabled = false
PlayerStates.IDLE:
player_graphic.play("idle")
PlayerStates.JUMPING:
if upJump:
player_graphic.play("jumping")
PlayerStates.FALLING:
player_graphic.play("falling")
PlayerStates.CHARGING:
player_graphic.play("charging")
PlayerStates.SHOVING:
player_graphic.play("shoving")
func _on_animation_finished() -> void:
match current_player_state:
PlayerStates.JUMPING:
upJump = false
PlayerStates.SHOVING:
current_player_state = PlayerStates.IDLE
-20
View File
@@ -1,20 +0,0 @@
class_name Rocket extends RigidBody2D
signal splodeSignal(rocket)
signal impactSignal(body, rocket)
func _ready() -> void:
#Rockets expolode in time
var timer = Timer.new()
add_child(timer)
timer.wait_time = 4
timer.one_shot = true
timer.connect("timeout", splode)
timer.start()
func _on_body_entered(body: Node) -> void:
print("Rocket hit a target")
impactSignal.emit(body, self)
#should i splode myself? No. Scene manager job.
func splode()->void:
splodeSignal.emit(self)
-1
View File
@@ -1 +0,0 @@
uid://bv3ixqvmjrf8j
+40 -78
View File
@@ -1,110 +1,72 @@
extends Node2D extends Node2D
@onready var game: GameController = $".." @onready var game: Node2D = $".."
@onready var crates: Node2D = $"../Crates" @onready var crates: Node2D = $"../Crates"
@onready var player: Player = $"../Player" @onready var player: CharacterBody2D = $"../Player"
var bullet = preload("res://scenes/bullet.tscn") var bullet = preload("res://scenes/bullet.tscn")
var rocket = preload("res://scenes/rocket.tscn")
var bulletArray:Array[Bullet] = [] var bulletArray:Array[Bullet] = []
var totalAllowedBullets:int = 7 var totalAllowedBullets:int = 7
var rocketDict:Dictionary = {}
var totalAllowedRockets:int = 3
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
#signals from the view #wire up view
player.pushSignal.connect(pushTarget) player.forcePushSignal.connect(push)
player.shootSignal.connect(makeBullet) player.shootSignal.connect(makeBullet)
player.fireSignal.connect(makeRocket) #wire up gamecontroller
#signals from the GameController
game.destroySignal.connect(destroy) game.destroySignal.connect(destroy)
game.fanTriggerSignal.connect(pushTarget) game.levelChangeSignal.connect(changeScene)
game.teleportTriggerSignal.connect(teleportTarget) game.fanUpSignal.connect(push)
game.teleportSignal.connect(teleport)
buildLevel() buildLevel()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func buildLevel()->void: func buildLevel()->void:
#tell GC how many crates...
updateCrates() updateCrates()
func updateCrates()->void: func updateCrates()->void:
var totalCrates = 0 var _crateTotal:int = 0
if crates: if crates:
for obj in crates.get_children(): for obj in crates.get_children():
if obj is Crate: if obj is Crate:
if not obj.tree_exited.is_connected(updateCrates): if not obj.tree_exited.is_connected(updateCrates):
obj.tree_exited.connect(updateCrates) obj.tree_exited.connect(updateCrates)
totalCrates +=1 _crateTotal +=1
game.crateTotal(_crateTotal)
game.crateTotal(totalCrates) #applies impulse to rigidbodies
func push(body, direction)->void:
body.apply_central_impulse(direction)
func pushTarget(body,pushDirection)->void: func teleport(body, _bodyposition=null)->void:
if body is RigidBody2D: print("teleport a body")
body.apply_central_impulse(pushDirection)
func stashBullet(bullet:Bullet)->void:
#hide the bullet
var stashPosition:Vector2 = Vector2(-100,-100)
bullet.position = stashPosition
bullet.setSpeed(0)
bullet.set_process(false)
func destroy(body)->void:
match body:
var bod when bod is Bullet:
stashBullet(body)
var bod when bod is Crate:
body.queue_free()
_:
body.queue_free()
func teleportTarget(body)->void:
if body is Crate: if body is Crate:
var viewport_size = get_viewport().get_visible_rect().size var viewport_size = get_viewport().get_visible_rect().size
var random_x = randf_range(0, viewport_size.x) var random_x = randf_range(0, viewport_size.x)
var random_y = randf_range(0, viewport_size.y) var random_y = randf_range(0, viewport_size.y)
var newPosition = Vector2(random_x,random_y) var newPosition = Vector2(random_x,random_y)
body.teleport_to(newPosition) body.teleport_to(newPosition)
func bulletFactory()->Bullet:
var myBullet:Bullet func destroy(body)->void:
#how many bullets have been produced? body.queue_free()
if bulletArray.size() <= totalAllowedBullets:
#make a new bullet func changeScene(level)->void:
myBullet = bullet.instantiate() get_tree().call_deferred("change_scene_to_file",level)
add_sibling(myBullet)
if not myBullet.bulletHitSignal.is_connected(game.bulletDamage): func bulletFactory()->Bullet :
myBullet.bulletHitSignal.connect(game.bulletDamage) var myBullet:Bullet
else: #how many bullets have been made?
myBullet = bulletArray.pop_back() if bulletArray.size() <= totalAllowedBullets:
myBullet = bullet.instantiate()
bulletArray.push_front(myBullet) if not myBullet.bulletDamageSignal.is_connected(game.bulletDamage):
return myBullet myBullet.bulletDamageSignal.connect(game.bulletDamage)
func makeBullet(spawnPosition, speed)->void: add_sibling(myBullet)
print("make bullet") else:
myBullet = bulletArray.pop_back()
bulletArray.push_front(myBullet)
return myBullet
func makeBullet(targetPosition:Transform2D, speed:int)->void:
var myBullet:Bullet = bulletFactory() var myBullet:Bullet = bulletFactory()
myBullet.transform = spawnPosition myBullet.transform = targetPosition
myBullet.setSpeed(speed) myBullet.setSpeed(speed)
myBullet.set_process(true) myBullet.set_process(true)
func rocketFactory()->Rocket:
var myRocket:Rocket
myRocket = rocket.instantiate()
add_sibling(myRocket)
var rocketStat={
"damage": 10
}
rocketDict[myRocket]=rocketStat
return myRocket
func makeRocket(spawnPosition, direction, speed)->void:
print("make a rocket")
var myRocket:Rocket = rocketFactory()
myRocket.splodeSignal.connect(destroy)
myRocket.impactSignal.connect(game.rocketDamage)
myRocket.transform = spawnPosition
pushTarget(myRocket,direction*speed)
+4 -4
View File
@@ -1,12 +1,12 @@
class_name Trigger extends Area2D extends Area2D
@export var intent = "destroy"
signal areaTriggerSignal(body, trigger, intent) signal areaTriggerSignal(body, trigger, intent)
@export var intent:String="destroy"
@onready var label: Label = $Label
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
print("Trigger is ready.") print("Trigger is ready.")
label.text = str(intent)
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.