My first 2D game in Godot 4.4

This commit is contained in:
2025-08-18 19:39:33 -04:00
commit 35600f72f9
83 changed files with 2512 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# Godot 4+ specific ignores
.godot/
/android/

View File

@@ -0,0 +1,39 @@
# GDQuest ColorPicker Presets
Reads a color presets `gpl` (GIMP Palette) file in the addon local directory, called `presets.gpl`. It adds the colors to the editor ColorPicker for quick access.
This repository includes a `presets.gpl` file as an example. It's the official GDQuest color palette.
## ✗ WARNING
> Compatible: Godot `>= v4.0`
The addon:
1. Doesn't check the length of the color palette/file.
1. Overwrites the _ColorPicker_ presets whenever you reopen the project or re-enable the addon.
## ✓ Install
### Using [Godot Package Manager](https://github.com/godot-package-manager)
1. `gpm init`.
1. Follow instructions with [NPMjs package](https://www.npmjs.com/package/gdquest.colorpicker_presets).
1. Enable the addon from `Project > Project Settings... > Plugins`.
1. Profit.
### Manual
1. Make a new folder at `res://addons/colorpicker_presets/`.
1. Copy the contents of this repository into `res://addons/colorpicker_presets/`.
1. Replace `res://addons/colorpicker_presets/presets.gpl` with your preferred version.
1. Enable the addon from `Project > Project Settings... > Plugins`.
1. Profit.
![install project settings](readme/install_project_settings.png)
## Where do I find the presets?
They'll be available in the editor _ColorPicker_.
![ColorPicker presets](readme/colorpicker_presets.png)

View File

@@ -0,0 +1,26 @@
@tool
extends EditorPlugin
const PRESETS_FILENAME := 'presets.gpl'
func _enter_tree() -> void:
var presets_path: String = get_script().resource_path.get_base_dir().path_join(PRESETS_FILENAME)
var presets_file := FileAccess.open(presets_path, FileAccess.READ)
if FileAccess.get_open_error() == OK:
var presets_raw := presets_file.get_as_text(true).strip_edges().split("\n")
presets_file.close()
presets_raw = presets_raw.slice(presets_raw.find("#") + 1)
var presets := Array(presets_raw).map(
func(s: String):
var rgb := (Array(s.strip_edges().split(" ").slice(0, -1))
.filter(func(s: String): return not s.is_empty())
.map(func(s: String): return s.to_int())
)
return Color8(rgb[0], rgb[1], rgb[2])
)
get_editor_interface().get_editor_settings().set_project_metadata(
"color_picker", "presets", presets
)

View File

@@ -0,0 +1 @@
uid://efuldfeh4dud

View File

@@ -0,0 +1,9 @@
[plugin]
name="GDQuest ColorPicker Presets"
description="Sets the editor color picker presets from
`presets.hex`, if it exists. The file is local to the
addon folder."
author="razcore-rad"
version="0.0.2-beta"
script="colorpicker_presets.gd"

View File

@@ -0,0 +1,31 @@
GIMP Palette
Name: gdquest.gpl
#
0 122 195 Blue
16 178 239 BlueAlt
6 29 84 BlueDark
207 221 255 BlueLight
108 44 218 Purple
141 25 215 PurpleAlt
40 20 78 PurpleDark
235 224 255 PurpleLight
196 29 61 Red
255 65 125 RedAlt/Pink
115 39 92 RedDark
255 219 244 RedLight
255 183 48 Yellow
255 213 0 YellowAlt
222 80 43 YellowDark/Orange
255 236 201 YellowLight
99 204 95 Green
159 221 81 GreenAlt/Lime
21 89 63 GreenDark
221 255 242 GreenLight/Mint
109 61 44 Brown
176 87 55 BrownAlt
106 25 0 BrownDark
255 227 227 BrownLight
202 202 202 Gray
255 255 255 White
39 43 48 Deep
243 248 254 Light

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

21
bullet.gd Normal file
View File

@@ -0,0 +1,21 @@
extends Area2D
var travelled_distance = 0
func _physics_process(delta: float) -> void:
const SPEED = 800.0
const MAX_RANGE = 1500.0
var direction = Vector2.RIGHT.rotated(rotation)
position += (direction * SPEED) * delta
travelled_distance += SPEED * delta
if travelled_distance >= MAX_RANGE:
queue_free()
func _on_body_entered(body: Node2D) -> void:
queue_free()
if body.has_method("take_damage"):
body.take_damage()

1
bullet.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://b1og3ublo2loc

22
bullet.tscn Normal file
View File

@@ -0,0 +1,22 @@
[gd_scene load_steps=4 format=3 uid="uid://luwdantua0vh"]
[ext_resource type="Script" uid="uid://b1og3ublo2loc" path="res://bullet.gd" id="1_v8qja"]
[ext_resource type="Texture2D" uid="uid://dftkbqwsfd68r" path="res://pistol/projectile.png" id="2_t4vbm"]
[sub_resource type="CircleShape2D" id="CircleShape2D_2b2rl"]
radius = 15.0333
[node name="Bullet" type="Area2D"]
top_level = true
collision_layer = 0
collision_mask = 3
script = ExtResource("1_v8qja")
[node name="Projectile" type="Sprite2D" parent="."]
position = Vector2(-11, -1)
texture = ExtResource("2_t4vbm")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_2b2rl")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b7rhtttevhxtj"
path="res://.godot/imported/ground_shadow.png-b9267d10ca04362d5b540659e4ab0dbd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/ground_shadow.png"
dest_files=["res://.godot/imported/ground_shadow.png-b9267d10ca04362d5b540659e4ab0dbd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,9 @@
extends Node2D
func play_idle_animation():
%AnimationPlayer.play("idle")
func play_walk_animation():
%AnimationPlayer.play("walk")

View File

@@ -0,0 +1 @@
uid://dhe20gx73tm5u

View File

@@ -0,0 +1,651 @@
[gd_scene load_steps=12 format=3 uid="uid://pbmyh1qru7p"]
[ext_resource type="Script" uid="uid://dhe20gx73tm5u" path="res://characters/happy_boo/happy_boo.gd" id="1_kg7lb"]
[ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://characters/ground_shadow.png" id="2_62bos"]
[ext_resource type="Texture2D" uid="uid://ng8e5ot0dtpd" path="res://characters/happy_boo/square_foot.png" id="3_186qq"]
[ext_resource type="Texture2D" uid="uid://dhapxq8y8ow57" path="res://characters/happy_boo/square_lower_leg.png" id="4_plnsd"]
[ext_resource type="Texture2D" uid="uid://qmqpm6asge1i" path="res://characters/happy_boo/square_upper_leg.png" id="5_q2t1e"]
[ext_resource type="Texture2D" uid="uid://cksiu5gst6fmp" path="res://characters/happy_boo/square_body.png" id="6_w3ck4"]
[ext_resource type="Texture2D" uid="uid://cvs0lh814pk7h" path="res://characters/happy_boo/square_face.png" id="7_h5h8s"]
[sub_resource type="Animation" id="Animation_hed62"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Colorizer/SquareUpperLegL:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-10.6303, -27.3998)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Colorizer/SquareUpperLegL:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.4009]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 14)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL:rotation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-2.98023e-08]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL/SquareFootL:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 12)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL/SquareFootL:rotation")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-3.40666]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Colorizer/SquareUpperLegR:position")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(9.20459, -29.9444)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("Colorizer/SquareUpperLegR:rotation")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-0.213676]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR:position")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-4.76837e-07, 14)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR:rotation")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR/SquareFootR:position")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 12)]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR/SquareFootR:rotation")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-2.92296]
}
tracks/12/type = "value"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("Colorizer/SquareBody:position")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-1.73067, -36.6061)]
}
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("Colorizer/SquareBody:rotation")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-0.0250386]
}
tracks/14/type = "value"
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/path = NodePath("Colorizer/SquareBody/SquareFace:position")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, -17)]
}
tracks/15/type = "value"
tracks/15/imported = false
tracks/15/enabled = true
tracks/15/path = NodePath("Colorizer/SquareBody/SquareFace:rotation")
tracks/15/interp = 1
tracks/15/loop_wrap = true
tracks/15/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_sablf"]
resource_name = "idle"
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Colorizer/SquareUpperLegL:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-10.6303, -27.3998)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Colorizer/SquareUpperLegL:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.4009]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 14)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL:rotation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-2.98023e-08]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL/SquareFootL:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 12)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL/SquareFootL:rotation")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-3.40666]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Colorizer/SquareUpperLegR:position")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(9.20459, -29.9444)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("Colorizer/SquareUpperLegR:rotation")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-0.213676]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR:position")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-4.76837e-07, 14)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR:rotation")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR/SquareFootR:position")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 12)]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR/SquareFootR:rotation")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-2.92296]
}
tracks/12/type = "value"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("Colorizer/SquareBody:position")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(0, 0.4, 0.8),
"transitions": PackedFloat32Array(0.466516, 0.189465, 1),
"update": 0,
"values": [Vector2(-1.73067, -36.6061), Vector2(-1.731, -32), Vector2(-1.731, -38)]
}
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("Colorizer/SquareBody:rotation")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0, 0.4),
"transitions": PackedFloat32Array(2.46229, 0.535887),
"update": 0,
"values": [-0.0250386, 0.0698132]
}
tracks/14/type = "value"
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/path = NodePath("Colorizer/SquareBody/SquareFace:position")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, -17)]
}
tracks/15/type = "value"
tracks/15/imported = false
tracks/15/enabled = true
tracks/15/path = NodePath("Colorizer/SquareBody/SquareFace:rotation")
tracks/15/interp = 1
tracks/15/loop_wrap = true
tracks/15/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_74kqe"]
resource_name = "walk"
length = 0.6
loop_mode = 1
step = 0.0333333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Colorizer/SquareUpperLegL:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.3, 0.466666),
"transitions": PackedFloat32Array(1, 0.5, 2),
"update": 0,
"values": [Vector2(-10.6303, -27.3998), Vector2(-10.6303, -27.3998), Vector2(-16, -40)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Colorizer/SquareUpperLegL:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.3, 0.466666),
"transitions": PackedFloat32Array(1, 0.5, 2),
"update": 0,
"values": [0.4009, 0.4009, -0.197871]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 0.5),
"update": 0,
"values": [Vector2(0, 14), Vector2(0, 14)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL:rotation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3, 0.466667),
"transitions": PackedFloat32Array(1, 0.5, 2),
"update": 0,
"values": [-2.98023e-08, -2.98023e-08, 1.12966]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL/SquareFootL:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 0.5),
"update": 0,
"values": [Vector2(0, 12), Vector2(0, 12)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Colorizer/SquareUpperLegL/SquareLowerLegL/SquareFootL:rotation")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 0.3, 0.466667),
"transitions": PackedFloat32Array(1, 0.5, 2),
"update": 0,
"values": [-3.40666, -3.40666, -3.92035]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Colorizer/SquareUpperLegR:position")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.3),
"transitions": PackedFloat32Array(0.5, 2, 1),
"update": 0,
"values": [Vector2(9, -27), Vector2(11, -44), Vector2(9, -27)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("Colorizer/SquareUpperLegR:rotation")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.3),
"transitions": PackedFloat32Array(0.5, 2, 1),
"update": 0,
"values": [-0.213676, -0.458455, -0.213676]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR:position")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(0.5, 1),
"update": 0,
"values": [Vector2(-4.76837e-07, 14), Vector2(-4.76837e-07, 14)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR:rotation")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.3),
"transitions": PackedFloat32Array(0.5, 2, 1),
"update": 0,
"values": [0.0, 0.888296, 0.0]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR/SquareFootR:position")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(0.5, 1),
"update": 0,
"values": [Vector2(0, 12), Vector2(0, 12)]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("Colorizer/SquareUpperLegR/SquareLowerLegR/SquareFootR:rotation")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.3),
"transitions": PackedFloat32Array(0.5, 2, 1),
"update": 0,
"values": [-2.92296, -3.45549, -2.92296]
}
tracks/12/type = "value"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("Colorizer/SquareBody:position")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-1.73067, -36.6061)]
}
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("Colorizer/SquareBody:rotation")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0, 0.166667, 0.3, 0.466667),
"transitions": PackedFloat32Array(0.392292, 1.31951, 0.267943, 1.8025),
"update": 0,
"values": [-0.0250386, -0.209487, 0.0372028, 0.23927]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_wrcpu"]
_data = {
&"RESET": SubResource("Animation_hed62"),
&"idle": SubResource("Animation_sablf"),
&"walk": SubResource("Animation_74kqe")
}
[node name="HappyBoo" type="Node2D"]
script = ExtResource("1_kg7lb")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
playback_default_blend_time = 0.2
libraries = {
"": SubResource("AnimationLibrary_wrcpu")
}
[node name="GroundShadow" type="Sprite2D" parent="."]
modulate = Color(0.898039, 0.878431, 0.831373, 1)
z_index = -1
z_as_relative = false
scale = Vector2(0.8, 0.8)
texture = ExtResource("2_62bos")
metadata/_edit_lock_ = true
[node name="Colorizer" type="Node2D" parent="."]
modulate = Color(1, 0.572549, 0.176471, 1)
[node name="SquareUpperLegL" type="Sprite2D" parent="Colorizer"]
position = Vector2(-10.6303, -27.3998)
rotation = 0.4009
scale = Vector2(0.997829, 0.999794)
texture = ExtResource("5_q2t1e")
offset = Vector2(0, 6)
[node name="SquareLowerLegL" type="Sprite2D" parent="Colorizer/SquareUpperLegL"]
position = Vector2(0, 14)
texture = ExtResource("4_plnsd")
offset = Vector2(0, 6)
[node name="SquareFootL" type="Sprite2D" parent="Colorizer/SquareUpperLegL/SquareLowerLegL"]
position = Vector2(0, 12)
rotation = -3.40666
scale = Vector2(1.01116, 1)
texture = ExtResource("3_186qq")
offset = Vector2(-4, 0)
[node name="SquareUpperLegR" type="Sprite2D" parent="Colorizer"]
position = Vector2(9.20459, -29.9444)
rotation = -0.213676
scale = Vector2(0.999794, 0.999794)
texture = ExtResource("5_q2t1e")
offset = Vector2(0, 6)
[node name="SquareLowerLegR" type="Sprite2D" parent="Colorizer/SquareUpperLegR"]
position = Vector2(-4.76837e-07, 14)
texture = ExtResource("4_plnsd")
offset = Vector2(0, 6)
[node name="SquareFootR" type="Sprite2D" parent="Colorizer/SquareUpperLegR/SquareLowerLegR"]
position = Vector2(0, 12)
rotation = -2.92296
texture = ExtResource("3_186qq")
offset = Vector2(-4, 0)
[node name="SquareBody" type="Sprite2D" parent="Colorizer"]
position = Vector2(-1.73067, -36.6061)
rotation = -0.0250386
scale = Vector2(0.9842, 0.990263)
texture = ExtResource("6_w3ck4")
offset = Vector2(0, -23)
[node name="SquareFace" type="Sprite2D" parent="Colorizer/SquareBody"]
position = Vector2(0, -17)
texture = ExtResource("7_h5h8s")
metadata/_edit_lock_ = true

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cksiu5gst6fmp"
path="res://.godot/imported/square_body.png-ef1c56c8912cd968d7fd09a95e6ea8f4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/happy_boo/square_body.png"
dest_files=["res://.godot/imported/square_body.png-ef1c56c8912cd968d7fd09a95e6ea8f4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvs0lh814pk7h"
path="res://.godot/imported/square_face.png-e27720ce35d82859f41580927c22ef18.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/happy_boo/square_face.png"
dest_files=["res://.godot/imported/square_face.png-e27720ce35d82859f41580927c22ef18.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ng8e5ot0dtpd"
path="res://.godot/imported/square_foot.png-62023e9ce7985c4b370739df29445354.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/happy_boo/square_foot.png"
dest_files=["res://.godot/imported/square_foot.png-62023e9ce7985c4b370739df29445354.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhapxq8y8ow57"
path="res://.godot/imported/square_lower_leg.png-313909793abe38b44566c8e252c075e0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/happy_boo/square_lower_leg.png"
dest_files=["res://.godot/imported/square_lower_leg.png-313909793abe38b44566c8e252c075e0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,23 @@
[gd_resource type="SkeletonModificationStack2D" load_steps=3 format=3 uid="uid://dtf0pmja4mcaa"]
[sub_resource type="SkeletonModification2DTwoBoneIK" id="SkeletonModification2DTwoBoneIK_7lb5u"]
target_nodepath = NodePath("FootLIK")
flip_bend_direction = true
joint_one_bone_idx = 1
joint_one_bone2d_node = NodePath("Center/UpperLegL")
joint_two_bone_idx = 2
joint_two_bone2d_node = NodePath("Center/UpperLegL/LowerLegL")
editor/draw_gizmo = false
[sub_resource type="SkeletonModification2DTwoBoneIK" id="SkeletonModification2DTwoBoneIK_h82yt"]
target_nodepath = NodePath("FootRIK")
joint_one_bone_idx = 4
joint_one_bone2d_node = NodePath("Center/UpperLegR")
joint_two_bone_idx = 5
joint_two_bone2d_node = NodePath("Center/UpperLegR/LowerLegR")
[resource]
enabled = true
modification_count = 2
modifications/0 = SubResource("SkeletonModification2DTwoBoneIK_7lb5u")
modifications/1 = SubResource("SkeletonModification2DTwoBoneIK_h82yt")

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2ent6mf1y7w7"
path="res://.godot/imported/square_ref.png-ad4b2771e34de0b9a0fbda7055a9fe1c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/happy_boo/square_ref.png"
dest_files=["res://.godot/imported/square_ref.png-ad4b2771e34de0b9a0fbda7055a9fe1c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://qmqpm6asge1i"
path="res://.godot/imported/square_upper_leg.png-e1f848aab7dd8805f40f881c2160a53d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/happy_boo/square_upper_leg.png"
dest_files=["res://.godot/imported/square_upper_leg.png-e1f848aab7dd8805f40f881c2160a53d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

10
characters/slime/slime.gd Normal file
View File

@@ -0,0 +1,10 @@
extends Node2D
func play_walk():
%AnimationPlayer.play("walk")
func play_hurt():
%AnimationPlayer.play("hurt")
%AnimationPlayer.queue("walk")

View File

@@ -0,0 +1 @@
uid://fv1e5gkanivs

245
characters/slime/slime.tscn Normal file
View File

@@ -0,0 +1,245 @@
[gd_scene load_steps=12 format=3 uid="uid://ogik4s70pgwl"]
[ext_resource type="Texture2D" uid="uid://dvgfmy6vtvjji" path="res://characters/slime/slime_body.png" id="1_3j35h"]
[ext_resource type="Script" uid="uid://fv1e5gkanivs" path="res://characters/slime/slime.gd" id="1_87y5x"]
[ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://characters/ground_shadow.png" id="1_cq7ej"]
[ext_resource type="Texture2D" uid="uid://c078jrp2yvc4s" path="res://characters/slime/slime_face.png" id="2_ygydt"]
[ext_resource type="Texture2D" uid="uid://btbxea1f3vwot" path="res://characters/slime/slime_body_hurt.png" id="4_0qu0c"]
[ext_resource type="Texture2D" uid="uid://cai2ijnbypqtr" path="res://characters/slime/slime_hurt_eyes.png" id="4_hi70h"]
[sub_resource type="Animation" id="Animation_y4lve"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/Face:position:y")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-25.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/SlimeBody:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor:position:y")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Anchor/Face/SlimeFace:texture")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("2_ygydt")]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Anchor:scale")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_lu163"]
resource_name = "hurt"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/Face/SlimeFace:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [ExtResource("4_hi70h"), ExtResource("2_ygydt")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/Face:position:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [-25.0, -35.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2),
"transitions": PackedFloat32Array(-2, -2, -2),
"update": 0,
"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Anchor/SlimeBody/SlimeBodyHurt:modulate:a")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2),
"transitions": PackedFloat32Array(1, -2, 1),
"update": 0,
"values": [0.0, 1.0, 0.0]
}
[sub_resource type="Animation" id="Animation_71vdi"]
resource_name = "idle"
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor/Face:position:y")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(-2, -2, -2),
"update": 0,
"values": [-28.0, -24.0, -28.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/SlimeBody:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(-2, -2, -2),
"update": 0,
"values": [Vector2(1, 1), Vector2(1.05, 0.95), Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor:position:y")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_l6fy2"]
resource_name = "walk"
length = 0.4
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Anchor:position:y")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2, 0.4),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [0.0, -20.0, 0.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Anchor/SlimeBody:scale")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.1, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0.9, 1.1), Vector2(1.1, 0.9), Vector2(0.9, 1.1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Anchor/Face:position:y")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.1, 0.3, 0.5),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [-24.0, -28.0, -24.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_j6cum"]
_data = {
&"RESET": SubResource("Animation_y4lve"),
&"hurt": SubResource("Animation_lu163"),
&"idle": SubResource("Animation_71vdi"),
&"walk": SubResource("Animation_l6fy2")
}
[node name="Slime" type="Node2D"]
script = ExtResource("1_87y5x")
[node name="GroundShadow" type="Sprite2D" parent="."]
modulate = Color(0.898039, 0.878431, 0.831373, 1)
z_index = -1
z_as_relative = false
scale = Vector2(0.8, 0.8)
texture = ExtResource("1_cq7ej")
[node name="Anchor" type="Marker2D" parent="."]
[node name="SlimeBody" type="Sprite2D" parent="Anchor"]
texture = ExtResource("1_3j35h")
offset = Vector2(0, -36)
[node name="SlimeBodyHurt" type="Sprite2D" parent="Anchor/SlimeBody"]
modulate = Color(1, 1, 1, 0)
texture = ExtResource("4_0qu0c")
offset = Vector2(0, -36)
[node name="Face" type="Marker2D" parent="Anchor"]
position = Vector2(0, -25)
[node name="SlimeFace" type="Sprite2D" parent="Anchor/Face"]
texture = ExtResource("2_ygydt")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_j6cum")
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvgfmy6vtvjji"
path="res://.godot/imported/slime_body.png-0d515f9e912a0d42a36c28f828394f6a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/slime/slime_body.png"
dest_files=["res://.godot/imported/slime_body.png-0d515f9e912a0d42a36c28f828394f6a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://btbxea1f3vwot"
path="res://.godot/imported/slime_body_hurt.png-3f38b75e5ebee1f99a984b348a7e7f8b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/slime/slime_body_hurt.png"
dest_files=["res://.godot/imported/slime_body_hurt.png-3f38b75e5ebee1f99a984b348a7e7f8b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c078jrp2yvc4s"
path="res://.godot/imported/slime_face.png-561a1f87b138570340118953f07aab21.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/slime/slime_face.png"
dest_files=["res://.godot/imported/slime_face.png-561a1f87b138570340118953f07aab21.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cai2ijnbypqtr"
path="res://.godot/imported/slime_hurt_eyes.png-711256b4a2a47dcea723d274f00b4628.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://characters/slime/slime_hurt_eyes.png"
dest_files=["res://.godot/imported/slime_hurt_eyes.png-711256b4a2a47dcea723d274f00b4628.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

3
default_bus_layout.tres Normal file
View File

@@ -0,0 +1,3 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://c0r1synmqj70v"]
[resource]

108
export_presets.cfg Normal file
View File

@@ -0,0 +1,108 @@
[preset.0]
name="Linux"
platform="Linux"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../../ShootahGame.x86_64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../../ShootahGame.exe"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=false
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

19
gun.gd Normal file
View File

@@ -0,0 +1,19 @@
extends Area2D
func _physics_process(delta: float) -> void:
var monsters_in_range = get_overlapping_bodies()
if monsters_in_range.size() > 0:
var target = monsters_in_range.front()
look_at(target.global_position)
func shoot():
const BULLET = preload("res://bullet.tscn")
var new_bullet = BULLET.instantiate()
new_bullet.global_transform = %Barrel.global_transform
%Barrel.add_child(new_bullet)
func _on_timer_timeout() -> void:
shoot()

1
gun.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dl331nhv6dm0l

31
gun.tscn Normal file
View File

@@ -0,0 +1,31 @@
[gd_scene load_steps=4 format=3 uid="uid://daagdf86t4bjn"]
[ext_resource type="Script" uid="uid://dl331nhv6dm0l" path="res://gun.gd" id="1_dk5gl"]
[ext_resource type="Texture2D" uid="uid://cswb5do8rrj7q" path="res://pistol/pistol.png" id="1_vk1bi"]
[sub_resource type="CircleShape2D" id="CircleShape2D_dk5gl"]
radius = 356.051
[node name="Gun" type="Area2D"]
collision_layer = 0
collision_mask = 2
script = ExtResource("1_dk5gl")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_dk5gl")
[node name="Pivot" type="Marker2D" parent="."]
[node name="Pistol" type="Sprite2D" parent="Pivot"]
position = Vector2(85, 0)
texture = ExtResource("1_vk1bi")
[node name="Barrel" type="Marker2D" parent="Pivot/Pistol"]
unique_name_in_owner = true
position = Vector2(25, -11)
[node name="Timer" type="Timer" parent="."]
wait_time = 0.33
autostart = true
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

34
icon.png.import Normal file
View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://i4cjdwy1kcoj"
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

28
monster.gd Normal file
View File

@@ -0,0 +1,28 @@
extends CharacterBody2D
var health = 3
@onready var player = get_node("/root/Game/Player")
func _ready() -> void:
%Slime.play_walk()
func _physics_process(delta: float) -> void:
var direction = global_position.direction_to(player.global_position)
velocity = direction * 200.0
move_and_slide()
func take_damage() -> void:
const SMOKE_EXPLOSION = preload("res://smoke_explosion/smoke_explosion.tscn")
%Slime.play_hurt()
health -= 1
if health == 0:
queue_free()
var s = SMOKE_EXPLOSION.instantiate()
get_parent().add_child(s)
s.global_transform = global_transform

1
monster.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://btk7g8n7jstwp

21
monster.tscn Normal file
View File

@@ -0,0 +1,21 @@
[gd_scene load_steps=4 format=3 uid="uid://5dgdagljfax1"]
[ext_resource type="Script" uid="uid://btk7g8n7jstwp" path="res://monster.gd" id="1_mrqeg"]
[ext_resource type="PackedScene" uid="uid://ogik4s70pgwl" path="res://characters/slime/slime.tscn" id="2_ga5te"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_vr0w3"]
radius = 45.815
height = 114.012
[node name="Monster" type="CharacterBody2D"]
collision_layer = 2
collision_mask = 3
script = ExtResource("1_mrqeg")
[node name="Slime" parent="." instance=ExtResource("2_ga5te")]
unique_name_in_owner = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(0, -32)
rotation = -1.57878
shape = SubResource("CapsuleShape2D_vr0w3")

BIN
pistol/impact/circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dn80eu1qs371v"
path="res://.godot/imported/circle.png-a2fa3270dee1c1c7e1cb0869903e82df.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://pistol/impact/circle.png"
dest_files=["res://.godot/imported/circle.png-a2fa3270dee1c1c7e1cb0869903e82df.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

10
pistol/impact/impact.gd Normal file
View File

@@ -0,0 +1,10 @@
extends Node2D
@onready var sprite = %Sprite
func _ready():
var tween = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT)
tween.tween_property(sprite, "scale", Vector2.ONE * 1.35, 0.3).from(Vector2.ONE * 0.6)
tween.tween_property(sprite, "modulate:a", 0.0, 0.15).set_delay(0.15)
tween.chain().tween_callback(queue_free)

View File

@@ -0,0 +1 @@
uid://c6w1u8mii1jdj

13
pistol/impact/impact.tscn Normal file
View File

@@ -0,0 +1,13 @@
[gd_scene load_steps=3 format=3 uid="uid://kcl4efkvrany"]
[ext_resource type="Script" uid="uid://c6w1u8mii1jdj" path="res://pistol/impact/impact.gd" id="1_4vum2"]
[ext_resource type="Texture2D" uid="uid://dn80eu1qs371v" path="res://pistol/impact/circle.png" id="2_wp1di"]
[node name="Impact" type="Node2D"]
top_level = true
script = ExtResource("1_4vum2")
[node name="Sprite" type="Sprite2D" parent="."]
unique_name_in_owner = true
modulate = Color(1, 0.831373, 0.239216, 1)
texture = ExtResource("2_wp1di")

View File

@@ -0,0 +1,11 @@
extends Node2D
@onready var sprite = %Sprite
func _ready():
var tween = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
tween.tween_property(sprite, "position:x", 16.0, 0.25)
tween.tween_property(sprite, "scale", Vector2.ONE * 1.25, 0.25)
tween.tween_property(sprite, "modulate:a", 0.0, 0.25).set_delay(0.1)
tween.chain().tween_callback(queue_free)

View File

@@ -0,0 +1 @@
uid://beuxhimda3hkr

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://brgpjilf7s2ul"
path="res://.godot/imported/muzzle_flash.png-752b19c1a1a60c24eac6f205d487f2ea.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://pistol/muzzle_flash/muzzle_flash.png"
dest_files=["res://.godot/imported/muzzle_flash.png-752b19c1a1a60c24eac6f205d487f2ea.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://c1b2kbuq1if08"]
[ext_resource type="Script" uid="uid://beuxhimda3hkr" path="res://pistol/muzzle_flash/muzzle_flash.gd" id="1_wouey"]
[ext_resource type="Texture2D" uid="uid://brgpjilf7s2ul" path="res://pistol/muzzle_flash/muzzle_flash.png" id="2_6pgu4"]
[node name="MuzzleFlash" type="Node2D"]
script = ExtResource("1_wouey")
[node name="Sprite" type="Sprite2D" parent="."]
unique_name_in_owner = true
texture = ExtResource("2_6pgu4")
offset = Vector2(10, 0)

BIN
pistol/pistol.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

34
pistol/pistol.png.import Normal file
View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cswb5do8rrj7q"
path="res://.godot/imported/pistol.png-ccb9a9487ce225cdf094ad33c19c2ede.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://pistol/pistol.png"
dest_files=["res://.godot/imported/pistol.png-ccb9a9487ce225cdf094ad33c19c2ede.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

BIN
pistol/projectile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dftkbqwsfd68r"
path="res://.godot/imported/projectile.png-e03ae856d530df914009475206433400.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://pistol/projectile.png"
dest_files=["res://.godot/imported/projectile.png-e03ae856d530df914009475206433400.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

24
player.gd Normal file
View File

@@ -0,0 +1,24 @@
extends CharacterBody2D
signal health_depleted
var health = 100.0
var move_speed := 400.0
func _physics_process(delta: float) -> void:
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
velocity = (direction * move_speed)
move_and_slide()
if velocity.length() > 0.0:
%HappyBoo.play_walk_animation()
else:
%HappyBoo.play_idle_animation()
const DAMAGE_RATE = 15.0
var overlapping_mobs = %Hitbox.get_overlapping_bodies()
if overlapping_mobs.size() > 0:
health -= (DAMAGE_RATE * overlapping_mobs.size()) * delta
%ProgressBar.value = health
if health <= 0.0:
health_depleted.emit()

1
player.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://chd6vgc03ew6a

63
player.tscn Normal file
View File

@@ -0,0 +1,63 @@
[gd_scene load_steps=8 format=3 uid="uid://4c77448gw84s"]
[ext_resource type="PackedScene" uid="uid://pbmyh1qru7p" path="res://characters/happy_boo/happy_boo.tscn" id="1_4flbx"]
[ext_resource type="Script" uid="uid://chd6vgc03ew6a" path="res://player.gd" id="1_onrkg"]
[ext_resource type="PackedScene" uid="uid://daagdf86t4bjn" path="res://gun.tscn" id="3_i3pqv"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_onrkg"]
radius = 30.0
height = 96.0
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_i3pqv"]
radius = 33.0
height = 104.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_i3pqv"]
bg_color = Color(0.162066, 0.162066, 0.162065, 1)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hqtel"]
bg_color = Color(0.25499, 0.702712, 0.379593, 1)
corner_radius_top_left = 6
corner_radius_top_right = 6
corner_radius_bottom_right = 6
corner_radius_bottom_left = 6
[node name="Player" type="CharacterBody2D"]
script = ExtResource("1_onrkg")
[node name="HappyBoo" parent="." instance=ExtResource("1_4flbx")]
unique_name_in_owner = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(-1, -37)
shape = SubResource("CapsuleShape2D_onrkg")
[node name="Camera2D" type="Camera2D" parent="."]
[node name="Gun" parent="." instance=ExtResource("3_i3pqv")]
position = Vector2(-1, -37)
[node name="Hitbox" type="Area2D" parent="."]
unique_name_in_owner = true
collision_layer = 0
collision_mask = 2
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
position = Vector2(-1, -37)
shape = SubResource("CapsuleShape2D_i3pqv")
debug_color = Color(0.881613, 0.286763, 0.460338, 0.42)
[node name="ProgressBar" type="ProgressBar" parent="."]
unique_name_in_owner = true
offset_left = -53.0
offset_top = -115.0
offset_right = 55.0
offset_bottom = -107.0
theme_override_styles/background = SubResource("StyleBoxFlat_i3pqv")
theme_override_styles/fill = SubResource("StyleBoxFlat_hqtel")
value = 100.0
show_percentage = false

127
project.godot Normal file
View File

@@ -0,0 +1,127 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[Asset_Placer]
Settings/Preview_Perspective=2
Settings/Library_Save_File_Location=1
Shortcuts/Change_Placement_Plane_Position=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":71,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Transform_Asset_Blueprint=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Select_Previous_Asset=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Select_Y_Z_Plane=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Select_X_Z_Plane=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Select_X_Y_Plane=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Reset_Transform=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Rotate_Asset_90_Degrees_Around_X=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Rotate_Asset_90_Degrees_Around_Y=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Rotate_Asset_90_Degrees_Around_Z=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Flip_Asset_On_X_Axis=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":49,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Flip_Asset_On_Y_Axis=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":50,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Flip_Asset_On_Z_Axis=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":51,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Settings/Shortcut_Shift_Rotation_Step=45.0
Shortcuts/Rotate_Asset_Secondary_Step_Degrees_Around_X=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Rotate_Asset_Secondary_Step_Degrees_Around_Y=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Rotate_Asset_Secondary_Step_Degrees_Around_Z=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":true,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Double_Snap_Step=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":true,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Shortcuts/Halve_Snap_Step=Object(Shortcut,"resource_local_to_scene":false,"resource_name":"","events":[Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":true,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
],"script":null)
Settings/Use_Shift_instead_of_Alt=false
Settings/Surface_Placement_Collision_Mask=4294967295
Settings/Show_Tooltips=true
[application]
config/name="ShootahGame"
run/main_scene="uid://b185yicmacoke"
config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="res://icon.png"
[display]
window/size/viewport_width=1920
window/size/viewport_height=1080
window/stretch/mode="viewport"
[dotnet]
project/assembly_name="Getting started with Godot 4"
[editor_plugins]
enabled=PackedStringArray("res://addons/colorpicker_presets/plugin.cfg")
[input]
move_left={
"deadzone": 0.5,
"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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
]
}
move_right={
"deadzone": 0.5,
"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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
]
}
move_up={
"deadzone": 0.5,
"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
]
}
move_down={
"deadzone": 0.5,
"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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
]
}
shoot={
"deadzone": 0.25,
"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(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
[layer_names]
3d_physics/layer_2="player"

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvmbm3sxj85fm"
path="res://.godot/imported/circle_32.png-ff53eadac5c62484a55afe7e47d5145f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://smoke_explosion/circle_32.png"
dest_files=["res://.godot/imported/circle_32.png-ff53eadac5c62484a55afe7e47d5145f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,8 @@
extends Node2D
func _ready():
%Smoke.material.set_shader_parameter("texture_offset", Vector2(randfn(0.0, 1.0), randfn(0.0, 1.0)))
%AnimationPlayer.play("explosion")
await %AnimationPlayer.animation_finished
queue_free()

View File

@@ -0,0 +1 @@
uid://qrh44gblhgir

View File

@@ -0,0 +1,15 @@
shader_type canvas_item;
uniform sampler2D voronoi_sampler : repeat_enable;
uniform sampler2D edge_curve;
uniform float offset = 0.0;
uniform vec2 texture_offset = vec2(0.0);
uniform sampler2D color_gradient : source_color;
void fragment() {
float voronoi = 1.0 - texture(voronoi_sampler, UV * 0.25 + texture_offset).x;
float d = distance(UV, vec2(0.5)) * 2.0;
float n_smooth_d = (voronoi * offset) * texture(edge_curve, vec2(d, 0.0)).x;
COLOR.a *= step(0.5, n_smooth_d);
COLOR.rgb = texture(color_gradient, vec2(n_smooth_d, 0.0)).rgb;
}

View File

@@ -0,0 +1 @@
uid://dnum4fa7v8hu

View File

@@ -0,0 +1,150 @@
[gd_scene load_steps=13 format=3 uid="uid://dhmhmrth6rdce"]
[ext_resource type="Shader" uid="uid://dnum4fa7v8hu" path="res://smoke_explosion/smoke_explosion.gdshader" id="1_bmef6"]
[ext_resource type="Script" uid="uid://qrh44gblhgir" path="res://smoke_explosion/smoke_explosion.gd" id="1_kb8ql"]
[sub_resource type="Gradient" id="Gradient_obal6"]
interpolation_mode = 1
offsets = PackedFloat32Array(0.105691, 0.7)
colors = PackedColorArray(0.878431, 0.878431, 0.878431, 1, 0.878431, 0.878431, 0.878431, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_mxd0d"]
gradient = SubResource("Gradient_obal6")
[sub_resource type="Curve" id="Curve_aov55"]
_data = [Vector2(0.752381, 1), 0.0, -4.03846, 0, 1, Vector2(1, 0), -4.03846, 0.0, 1, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_p664q"]
texture_mode = 1
curve = SubResource("Curve_aov55")
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ti4n0"]
noise_type = 2
fractal_octaves = 1
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_uji5e"]
seamless = true
noise = SubResource("FastNoiseLite_ti4n0")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dssfe"]
resource_local_to_scene = true
shader = ExtResource("1_bmef6")
shader_parameter/voronoi_sampler = SubResource("NoiseTexture2D_uji5e")
shader_parameter/edge_curve = SubResource("CurveTexture_p664q")
shader_parameter/offset = 2.0
shader_parameter/texture_offset = Vector2(0, 0)
shader_parameter/color_gradient = SubResource("GradientTexture1D_mxd0d")
[sub_resource type="Animation" id="Animation_6fv2e"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Smoke:material:shader_parameter/offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [2.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Smoke:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Smoke:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0.396078, 0.396078, 0.396078, 1)]
}
[sub_resource type="Animation" id="Animation_viyco"]
resource_name = "explosion"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Smoke:material:shader_parameter/offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.6),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [2.0, 0.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Smoke:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.6),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(1, 1), Vector2(3, 3)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Smoke:modulate:a")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.1, 0.6),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [1.0, 0.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_8msef"]
_data = {
&"RESET": SubResource("Animation_6fv2e"),
&"explosion": SubResource("Animation_viyco")
}
[node name="SmokeExplosion" type="Node2D"]
z_index = 10
script = ExtResource("1_kb8ql")
[node name="Smoke" type="ColorRect" parent="."]
unique_name_in_owner = true
modulate = Color(0.396078, 0.396078, 0.396078, 1)
material = SubResource("ShaderMaterial_dssfe")
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -64.0
offset_top = -64.0
offset_right = 64.0
offset_bottom = 64.0
grow_horizontal = 2
grow_vertical = 2
pivot_offset = Vector2(64, 64)
color = Color(0.568627, 0.568627, 0.568627, 1)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
autoplay = "RESET"
libraries = {
"": SubResource("AnimationLibrary_8msef")
}

24
static_pine_tree.tscn Normal file
View File

@@ -0,0 +1,24 @@
[gd_scene load_steps=4 format=3 uid="uid://beit5tp4qdcsg"]
[ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://characters/ground_shadow.png" id="1_4ec4t"]
[ext_resource type="Texture2D" uid="uid://caqfk2xng5v5u" path="res://trees/pine_tree.png" id="2_fou4c"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_dtvk7"]
radius = 16.0
height = 48.0
[node name="StaticPineTree" type="StaticBody2D"]
[node name="GroundShadow" type="Sprite2D" parent="."]
modulate = Color(0.299547, 0.299547, 0.299547, 1)
position = Vector2(0.562503, -9)
scale = Vector2(0.819941, 0.692308)
texture = ExtResource("1_4ec4t")
[node name="PineTree" type="Sprite2D" parent="."]
position = Vector2(0, -75)
texture = ExtResource("2_fou4c")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(1, -22)
shape = SubResource("CapsuleShape2D_dtvk7")

24
survivors_game.gd Normal file
View File

@@ -0,0 +1,24 @@
extends Node2D
func _ready():
spawn_monster()
spawn_monster()
spawn_monster()
spawn_monster()
spawn_monster()
%SpawnTimer.start()
func spawn_monster():
var new_monster = preload("res://monster.tscn").instantiate()
%PathFollow2D.progress_ratio = randf()
new_monster.global_position = %PathFollow2D.global_position
add_child(new_monster)
func _on_spawn_timer_timeout() -> void:
spawn_monster()
func _on_player_health_depleted() -> void:
%GameoverCanvasLayer.visible = true
get_tree().paused = true

1
survivors_game.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://dw0g2r5t2fe8r

106
survivors_game.tscn Normal file
View File

@@ -0,0 +1,106 @@
[gd_scene load_steps=5 format=3 uid="uid://b185yicmacoke"]
[ext_resource type="Script" uid="uid://dw0g2r5t2fe8r" path="res://survivors_game.gd" id="1_qqaft"]
[ext_resource type="PackedScene" uid="uid://4c77448gw84s" path="res://player.tscn" id="1_y3pti"]
[ext_resource type="PackedScene" uid="uid://beit5tp4qdcsg" path="res://static_pine_tree.tscn" id="2_l26od"]
[sub_resource type="Curve2D" id="Curve2D_7jj1j"]
_data = {
"points": PackedVector2Array(0, 0, 0, 0, -114, -125, 0, 0, 0, 0, 2103, -120, 0, 0, 0, 0, 2095, 1198, 0, 0, 0, 0, -108, 1196, 0, 0, 0, 0, -114, -125)
}
point_count = 5
[node name="Game" type="Node2D"]
y_sort_enabled = true
script = ExtResource("1_qqaft")
[node name="CanvasLayer" type="CanvasLayer" parent="."]
layer = -1
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
offset_left = -12.0
offset_top = -9.0
offset_right = 2000.0
offset_bottom = 1106.0
[node name="Player" parent="." instance=ExtResource("1_y3pti")]
position = Vector2(1003, 549)
[node name="Path2D" type="Path2D" parent="Player"]
position = Vector2(-1003, -549)
curve = SubResource("Curve2D_7jj1j")
[node name="PathFollow2D" type="PathFollow2D" parent="Player/Path2D"]
unique_name_in_owner = true
position = Vector2(-114, -125)
rotation = 0.0022553
[node name="StaticPineTree" parent="." instance=ExtResource("2_l26od")]
position = Vector2(258, 872)
[node name="StaticPineTree2" parent="." instance=ExtResource("2_l26od")]
position = Vector2(600, 219)
[node name="StaticPineTree3" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1487, 878)
[node name="StaticPineTree4" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1581, 775)
[node name="StaticPineTree5" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1640, 872)
[node name="StaticPineTree6" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1382, 221)
[node name="StaticPineTree7" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1471, 270)
[node name="StaticPineTree8" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1783, 516)
[node name="StaticPineTree9" parent="." instance=ExtResource("2_l26od")]
position = Vector2(266, 506)
[node name="StaticPineTree10" parent="." instance=ExtResource("2_l26od")]
position = Vector2(772, 680)
[node name="StaticPineTree11" parent="." instance=ExtResource("2_l26od")]
position = Vector2(1250, 380)
[node name="SpawnTimer" type="Timer" parent="."]
unique_name_in_owner = true
[node name="GameoverCanvasLayer" type="CanvasLayer" parent="."]
unique_name_in_owner = true
visible = false
[node name="ColorRect" type="ColorRect" parent="GameoverCanvasLayer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -191.0
offset_top = -61.0
offset_right = 191.0
offset_bottom = 61.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.0588235, 0.0588235, 0.0588235, 0.501961)
[node name="Label" type="Label" parent="GameoverCanvasLayer"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -391.0
offset_top = -98.5
offset_right = 391.0
offset_bottom = 98.5
grow_horizontal = 2
grow_vertical = 2
theme_override_font_sizes/font_size = 144
text = "Game Over"
[connection signal="health_depleted" from="Player" to="." method="_on_player_health_depleted"]
[connection signal="timeout" from="SpawnTimer" to="." method="_on_spawn_timer_timeout"]

BIN
trees/pine_tree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://caqfk2xng5v5u"
path="res://.godot/imported/pine_tree.png-d61929395d8fbd7dd9882891dc69101d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://trees/pine_tree.png"
dest_files=["res://.godot/imported/pine_tree.png-d61929395d8fbd7dd9882891dc69101d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1