migrate repo to gitty

master
Jaronim Pracht 2026-07-10 23:50:51 +02:00
commit 2a73d38e45
529 changed files with 21364 additions and 0 deletions

19
.gitignore vendored 100644
View File

@ -0,0 +1,19 @@
# Godot 4+ specific ignores
.godot/
.nomedia
/android/
# Godot-specific ignores
.import/
export.cfg
export_credentials.cfg
*.tmp
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
.DS_Store

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bdcrnb8vcmrt"
path="res://.godot/imported/Aetheric - Haunted House (freetouse.com).mp3-aa022fad353eccc563915754a45aa9d6.mp3str"
[deps]
source_file="res://Audio/Aetheric - Haunted House (freetouse.com).mp3"
dest_files=["res://.godot/imported/Aetheric - Haunted House (freetouse.com).mp3-aa022fad353eccc563915754a45aa9d6.mp3str"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

View File

@ -0,0 +1,9 @@
[gd_scene format=3 uid="uid://bjqr2fcxd1eed"]
[ext_resource type="AudioStream" uid="uid://bdcrnb8vcmrt" path="res://Audio/Aetheric - Haunted House (freetouse.com).mp3" id="1_dyrpf"]
[node name="BackgroundMusic" type="AudioStreamPlayer" unique_id=514628345]
process_mode = 3
stream = ExtResource("1_dyrpf")
volume_db = -26.825
autoplay = true

View File

@ -0,0 +1,14 @@
[gd_scene format=3 uid="uid://b7apsqsv7jc2m"]
[ext_resource type="Script" uid="uid://ct30b07mpb4nd" path="res://Audio/sound_manager.gd" id="1_jlhia"]
[ext_resource type="AudioStream" uid="uid://dwgejbbsqxfvp" path="res://Audio/soundshelfstudio-ui-click-retro-514601.mp3" id="2_oqgln"]
[ext_resource type="AudioStream" uid="uid://eoc8w8fpbl1t" path="res://Audio/driken5482-retro-coin-1-236677.mp3" id="3_oqgln"]
[node name="SoundManager" type="Node" unique_id=230087343]
script = ExtResource("1_jlhia")
[node name="ClickPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1415306376]
stream = ExtResource("2_oqgln")
[node name="PickUpPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1320101990]
stream = ExtResource("3_oqgln")

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://eoc8w8fpbl1t"
path="res://.godot/imported/driken5482-retro-coin-1-236677.mp3-76036380cd9e095d5c58b2b086aff535.mp3str"
[deps]
source_file="res://Audio/driken5482-retro-coin-1-236677.mp3"
dest_files=["res://.godot/imported/driken5482-retro-coin-1-236677.mp3-76036380cd9e095d5c58b2b086aff535.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -0,0 +1,13 @@
extends Node
@onready var click_player = $ClickPlayer
@onready var pick_up_player = $PickUpPlayer
func play_click():
click_player.seek(0.0)
click_player.play()
# Du kannst hier später noch mehr Funktionen hinzufügen, z.B.:
func play_key_pickup():
pick_up_player.play()

View File

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

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dwgejbbsqxfvp"
path="res://.godot/imported/soundshelfstudio-ui-click-retro-514601.mp3-8b38348e9f0237e954b40eab3b6b5835.mp3str"
[deps]
source_file="res://Audio/soundshelfstudio-ui-click-retro-514601.mp3"
dest_files=["res://.godot/imported/soundshelfstudio-ui-click-retro-514601.mp3-8b38348e9f0237e954b40eab3b6b5835.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxmpqwuu0i6by"
path="res://.godot/imported/cake.png-88d0768b51ffad4015ec0f6c796df97d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Collectable/assets/cake.png"
dest_files=["res://.godot/imported/cake.png-88d0768b51ffad4015ec0f6c796df97d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

View File

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

View File

@ -0,0 +1,69 @@
[gd_scene format=3 uid="uid://t3elp1lpdt3p"]
[ext_resource type="Script" uid="uid://dudyiyynt2qea" path="res://Collectable/collectable.gd" id="1_iowtp"]
[ext_resource type="Texture2D" uid="uid://cxmpqwuu0i6by" path="res://Collectable/assets/cake.png" id="2_iowtp"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_skgro"]
size = Vector2(8.928572, 8.571428)
[sub_resource type="Animation" id="Animation_wxffg"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("KeyWhite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_l6fen"]
resource_name = "idle"
length = 1.8333
loop_mode = 2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("KeyWhite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.5, 0.6666667, 0.8333333, 1, 1.1666666, 1.3333334, 1.5, 1.6666666, 1.8333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_4iwru"]
_data = {
&"RESET": SubResource("Animation_wxffg"),
&"idle": SubResource("Animation_l6fen")
}
[node name="Cake" type="Area2D" unique_id=1724399962]
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("1_iowtp")
positionLeft = Vector2(1, 1.8)
positionRight = Vector2(-2, 1.8)
positionUp = Vector2(-6, 2)
positionDown = Vector2(3, 1.5)
[node name="KeyWhite" type="Sprite2D" parent="." unique_id=1730512806]
position = Vector2(-1.1920929e-07, -2.3841858e-07)
scale = Vector2(0.840625, 0.840625)
texture = ExtResource("2_iowtp")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1344785112]
position = Vector2(-0.49999964, 0)
scale = Vector2(2.8, 2.8)
shape = SubResource("RectangleShape2D_skgro")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1231132347]
libraries/ = SubResource("AnimationLibrary_4iwru")
autoplay = &"idle"

View File

@ -0,0 +1,31 @@
class_name Collectable
extends Area2D
## A delivery item the Ghost can carry. Picking up and dropping is driven by the
## Ghost through the "interact" (E) action, not by automatic collision.
@export var item_id: String = ""
@export var positionLeft: Vector2 = Vector2.ZERO
@export var positionRight: Vector2 = Vector2.ZERO
@export var positionUp: Vector2 = Vector2.ZERO
@export var positionDown: Vector2 = Vector2.ZERO
var is_held: bool = false
var is_delivered: bool = false
func _ready() -> void:
add_to_group("collectable")
func can_pick_up() -> bool:
return not is_held and not is_delivered
func mark_picked_up() -> void:
is_held = true
func mark_dropped() -> void:
is_held = false
func mark_delivered() -> void:
is_held = false
is_delivered = true
set_deferred("monitoring", false)
set_deferred("monitorable", false)

View File

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

View File

@ -0,0 +1,69 @@
[gd_scene format=3 uid="uid://dsrjdmod7iy0y"]
[ext_resource type="Script" uid="uid://dudyiyynt2qea" path="res://Collectable/collectable.gd" id="1_jwt8q"]
[ext_resource type="Texture2D" uid="uid://c0j2r3l4wjpmw" path="res://Collectable/assets/key.png" id="2_jwt8q"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_skgro"]
size = Vector2(6.785714, 14.642856)
[sub_resource type="Animation" id="Animation_wxffg"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("KeyWhite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_l6fen"]
resource_name = "idle"
length = 1.8333
loop_mode = 2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("KeyWhite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.16666667, 0.33333334, 0.5, 0.6666667, 0.8333333, 1, 1.1666666, 1.3333334, 1.5, 1.6666666, 1.8333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_4iwru"]
_data = {
&"RESET": SubResource("Animation_wxffg"),
&"idle": SubResource("Animation_l6fen")
}
[node name="Key" type="Area2D" unique_id=1724399962]
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("1_jwt8q")
positionLeft = Vector2(1, 1.8)
positionRight = Vector2(-2, 1.8)
positionUp = Vector2(-6, 2)
positionDown = Vector2(3, 1.5)
[node name="KeyWhite" type="Sprite2D" parent="." unique_id=1730512806]
scale = Vector2(1.3, 1.3)
texture = ExtResource("2_jwt8q")
hframes = 12
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1344785112]
position = Vector2(0.49999982, 0.49999893)
scale = Vector2(2.8, 2.8)
shape = SubResource("RectangleShape2D_skgro")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1231132347]
libraries/ = SubResource("AnimationLibrary_4iwru")
autoplay = &"idle"

View File

@ -0,0 +1,26 @@
class_name DoorZone
extends DropZone
## A DropZone that opens a door by erasing tiles from a TileMapLayer when the
## player delivers the matching key.
## The TileMapLayer that contains the door tile(s) to erase.
@export var door_tilemap: TileMapLayer
## Tile coordinates (in tilemap space) of the door cells to erase.
@export var door_cells: Array[Vector2i] = []
func deliver(item: Collectable) -> void:
if not accepts(item):
return
# Remove the door tiles from the TileMapLayer
if door_tilemap:
for cell in door_cells:
door_tilemap.erase_cell(cell)
# Consume the key (hide it instead of placing it at the drop offset)
delivered = true
item.reparent(self)
item.visible = false
item.mark_delivered()
GameManager.complete_task(required_item_id)
_update_marker()

View File

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

View File

@ -0,0 +1,15 @@
[gd_scene format=3]
[ext_resource type="Script" path="res://DoorZone/door_zone.gd" id="1_dz"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_dz"]
size = Vector2(32, 32)
[node name="DoorZone" type="Area2D"]
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("1_dz")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_dz")

View File

@ -0,0 +1,40 @@
class_name DropZone
extends Area2D
## Target location for a specific delivery item. Registers a task on ready and
## completes it when the Ghost drops the matching item here.
@export var required_item_id: String = ""
@export var task_description: String = ""
## Where the delivered item is placed, in this zone's local space.
@export var drop_offset: Vector2 = Vector2.ZERO
var delivered: bool = false
@onready var _marker: Label = get_node_or_null("Marker")
func _ready() -> void:
add_to_group("drop_zone")
if not required_item_id.is_empty():
var desc := task_description if not task_description.is_empty() else required_item_id
GameManager.register_task(required_item_id, desc)
_update_marker()
func accepts(item: Collectable) -> bool:
return not delivered and item != null and item.item_id == required_item_id
func deliver(item: Collectable) -> void:
if not accepts(item):
return
delivered = true
var target := to_global(drop_offset)
item.reparent(self)
item.global_position = target
item.show_behind_parent = false
item.mark_delivered()
GameManager.complete_task(required_item_id)
_update_marker()
func _update_marker() -> void:
if _marker:
_marker.text = "" if delivered else "?"
_marker.modulate = Color(0.4, 0.9, 0.4) if delivered else Color(1, 1, 1)

View File

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

View File

@ -0,0 +1,15 @@
[gd_scene format=3 uid="uid://i7g6pb2bor00"]
[ext_resource type="Script" uid="uid://dgat5vsvdu7kp" path="res://DropZone/drop_zone.gd" id="1_dz"]
[sub_resource type="CircleShape2D" id="CircleShape2D_dz"]
radius = 20.0
[node name="DropZone" type="Area2D" unique_id=508052114]
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("1_dz")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1175867572]
shape = SubResource("CircleShape2D_dz")

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://0qtc4rebtlmq"
path="res://.godot/imported/ATTACK 1.png-e377d92cfdab4ee3b20343dedb2cc1cd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Enemy/cat_images/ATTACK 1.png"
dest_files=["res://.godot/imported/ATTACK 1.png-e377d92cfdab4ee3b20343dedb2cc1cd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d1ru5si1ev3nq"
path="res://.godot/imported/IDLE.png-1c7166d2998ee9127f6e38ec8c807991.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Enemy/cat_images/IDLE.png"
dest_files=["res://.godot/imported/IDLE.png-1c7166d2998ee9127f6e38ec8c807991.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://caa8forqpamwm"
path="res://.godot/imported/JUMP.png-125fb29e6b3fc096a707a7bde984be42.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Enemy/cat_images/JUMP.png"
dest_files=["res://.godot/imported/JUMP.png-125fb29e6b3fc096a707a7bde984be42.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cy6lnmdawt7rt"
path="res://.godot/imported/RUN.png-334897da41580d0d83df6a16900f6017.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Enemy/cat_images/RUN.png"
dest_files=["res://.godot/imported/RUN.png-334897da41580d0d83df6a16900f6017.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqtaiimuo3f3r"
path="res://.godot/imported/RUNNING JUMP.png-43fddd7c0945ac9fa01b53a4f96a079b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Enemy/cat_images/RUNNING JUMP.png"
dest_files=["res://.godot/imported/RUNNING JUMP.png-43fddd7c0945ac9fa01b53a4f96a079b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

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

BIN
Enemy/chicken.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

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

94
Enemy/enemy.gd 100644
View File

@ -0,0 +1,94 @@
extends CharacterBody2D
@export var patrol_points: PackedVector2Array = PackedVector2Array()
@export var move_speed: float = 60.0
@export var wait_time: float = 1.0
@export var detection_fill_rate: float = 1.7
@export var detection_decay_rate: float = 0.5
@onready var animation_player: AnimationPlayer = $Cat/AnimationPlayer
@onready var sprite: Sprite2D = $Cat/Sprite2D
@onready var vision_cone: Node2D = $VisionCone2D
@onready var vision_area: Area2D = $VisionCone2D/VisionConeArea
@onready var vision_renderer: Polygon2D = $VisionCone2D/VisionConeRenderer
const NORMAL_COLOR := Color(0.95, 0.78, 0.22, 0.45)
const ALERT_COLOR := Color(0.9, 0.12, 0.12, 0.55)
var _points: Array[Vector2] = []
var _target_index: int = 0
var _wait_timer: float = 0.0
var _facing := Vector2.DOWN
var _detection: float = 0.0
var _sees_ghost: bool = false
var _ghost_in_cone: Ghost = null
func _ready() -> void:
animation_player.play("idle_sit")
if patrol_points.is_empty():
_points = [global_position]
else:
for p in patrol_points:
_points.append(global_position + p)
vision_area.body_entered.connect(_on_vision_body_entered)
vision_area.body_exited.connect(_on_vision_body_exited)
_update_cone_rotation()
func _physics_process(delta: float) -> void:
if GameManager.game_over:
velocity = Vector2.ZERO
return
_patrol(delta)
_update_detection(delta)
func _patrol(delta: float) -> void:
if _points.size() <= 1:
velocity = Vector2.ZERO
return
var target: Vector2 = _points[_target_index]
var to_target := target - global_position
if to_target.length() < 4.0:
velocity = Vector2.ZERO
if animation_player.current_animation != "idle_sit":
animation_player.play("idle_sit")
_wait_timer += delta
if _wait_timer >= wait_time:
_wait_timer = 0.0
_target_index = (_target_index + 1) % _points.size()
else:
var dir := to_target.normalized()
velocity = dir * move_speed
if animation_player.current_animation != "walk":
animation_player.play("walk")
_set_facing(dir)
move_and_slide()
func _set_facing(dir: Vector2) -> void:
if dir.length() < 0.01:
return
_facing = dir
if absf(dir.x) > 0.05:
sprite.flip_h = dir.x > 0
_update_cone_rotation()
func _update_cone_rotation() -> void:
vision_cone.global_rotation = _facing.angle() - PI / 2.0
func _update_detection(delta: float) -> void:
if _ghost_in_cone != null and _ghost_in_cone.held_item != null:
_detection += detection_fill_rate * delta
else:
_detection -= detection_decay_rate * delta
_detection = clampf(_detection, 0.0, 1.0)
vision_renderer.color = NORMAL_COLOR.lerp(ALERT_COLOR, _detection)
GameManager.report_npc_alert(get_instance_id(), _detection)
if _detection >= 1.0:
GameManager.report_caught()
func _on_vision_body_entered(body: Node2D) -> void:
if body is Ghost:
_ghost_in_cone = body
func _on_vision_body_exited(body: Node2D) -> void:
if body is Ghost:
_ghost_in_cone = null

View File

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

213
Enemy/enemy.tscn 100644
View File

@ -0,0 +1,213 @@
[gd_scene format=3 uid="uid://be116t1whg2bm"]
[ext_resource type="Texture2D" uid="uid://d1ru5si1ev3nq" path="res://Enemy/cat_images/IDLE.png" id="1_2kakx"]
[ext_resource type="Script" uid="uid://b03dn744r7c3f" path="res://Enemy/enemy.gd" id="1_5y2so"]
[ext_resource type="Texture2D" uid="uid://r3oxbvx0b4k4" path="res://Enemy/chicken.png" id="2_jurff"]
[ext_resource type="Texture2D" uid="uid://d3jtiig2u86r7" path="res://Enemy/cat_images/WALK.png" id="4_walk"]
[ext_resource type="PackedScene" uid="uid://kf8tqdlm8c5t" path="res://addons/vision_cone_2d/vision_cone_2d_template.tscn" id="3_gkxbg"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_jurff"]
[sub_resource type="Animation" id="Animation_gkxbg"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Cat/Sprite2D:texture")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("1_2kakx")]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Cat/Sprite2D:hframes")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [8]
}
[sub_resource type="Animation" id="Animation_5y2so"]
resource_name = "idle_sit"
length = 1.2
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Cat/Sprite2D:texture")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("1_2kakx")]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Cat/Sprite2D:hframes")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [8]
}
[sub_resource type="Animation" id="Animation_walk1"]
resource_name = "walk"
length = 1.2
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("4_walk")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Cat/Sprite2D:hframes")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [12]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Cat/Sprite2D:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xnlim"]
_data = {
&"RESET": SubResource("Animation_gkxbg"),
&"idle_sit": SubResource("Animation_5y2so"),
&"walk": SubResource("Animation_walk1")
}
[sub_resource type="Animation" id="Animation_tmmbl"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = false
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_borso"]
resource_name = "turtle_idle"
length = 0.9
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.3, 0.6),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [6, 7, 8]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_63oeu"]
_data = {
&"RESET": SubResource("Animation_tmmbl"),
&"turtle_idle": SubResource("Animation_borso")
}
[node name="Enemy" type="CharacterBody2D" unique_id=79507687]
collision_layer = 16
script = ExtResource("1_5y2so")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=989742231]
visible = false
shape = SubResource("CapsuleShape2D_jurff")
[node name="Cat" type="Node2D" parent="." unique_id=1853796073]
[node name="AnimationPlayer" type="AnimationPlayer" parent="Cat" unique_id=1002271378]
root_node = NodePath("../..")
libraries/ = SubResource("AnimationLibrary_xnlim")
[node name="Sprite2D" type="Sprite2D" parent="Cat" unique_id=2017302220]
texture = ExtResource("1_2kakx")
hframes = 8
[node name="Chicken" type="Node2D" parent="." unique_id=1952362392]
visible = false
[node name="Sprite2D" type="Sprite2D" parent="Chicken" unique_id=1780607003]
texture = ExtResource("2_jurff")
hframes = 3
vframes = 4
[node name="AnimationPlayer" type="AnimationPlayer" parent="Chicken" unique_id=338439838]
libraries/ = SubResource("AnimationLibrary_63oeu")
[node name="VisionCone2D" parent="." unique_id=2082655346 instance=ExtResource("3_gkxbg")]
rotation = 1.5707964
angle_deg = 70
max_distance = 200.0
collision_layer_mask = 1
[node name="VisionConeArea" parent="VisionCone2D" index="1"]
collision_mask = 2

View File

@ -0,0 +1,119 @@
[gd_scene format=3 uid="uid://dn23032r50u6a"]
[ext_resource type="Script" uid="uid://b03dn744r7c3f" path="res://Enemy/enemy.gd" id="1_1lhtl"]
[ext_resource type="Texture2D" uid="uid://d1ru5si1ev3nq" path="res://Enemy/cat_images/IDLE.png" id="2_y07qa"]
[ext_resource type="Texture2D" uid="uid://r3oxbvx0b4k4" path="res://Enemy/chicken.png" id="3_fgfop"]
[ext_resource type="PackedScene" uid="uid://kf8tqdlm8c5t" path="res://addons/vision_cone_2d/vision_cone_2d_template.tscn" id="4_pkl84"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_jurff"]
[sub_resource type="Animation" id="Animation_gkxbg"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_5y2so"]
resource_name = "idle_sit"
length = 1.2
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xnlim"]
_data = {
&"RESET": SubResource("Animation_gkxbg"),
&"idle_sit": SubResource("Animation_5y2so")
}
[sub_resource type="Animation" id="Animation_tmmbl"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = false
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_borso"]
resource_name = "turtle_idle"
length = 0.9
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.3, 0.6),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [6, 7, 8]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_63oeu"]
_data = {
&"RESET": SubResource("Animation_tmmbl"),
&"turtle_idle": SubResource("Animation_borso")
}
[node name="Enemy" type="CharacterBody2D" unique_id=79507687]
script = ExtResource("1_1lhtl")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=989742231]
visible = false
shape = SubResource("CapsuleShape2D_jurff")
[node name="Cat" type="Node2D" parent="." unique_id=1853796073]
visible = false
[node name="AnimationPlayer" type="AnimationPlayer" parent="Cat" unique_id=1002271378]
root_node = NodePath("../..")
libraries/ = SubResource("AnimationLibrary_xnlim")
[node name="Sprite2D" type="Sprite2D" parent="Cat" unique_id=2017302220]
texture = ExtResource("2_y07qa")
hframes = 8
[node name="Chicken" type="Node2D" parent="." unique_id=1952362392]
[node name="Sprite2D" type="Sprite2D" parent="Chicken" unique_id=1780607003]
texture = ExtResource("3_fgfop")
hframes = 3
vframes = 4
frame = 4
[node name="AnimationPlayer" type="AnimationPlayer" parent="Chicken" unique_id=338439838]
libraries/ = SubResource("AnimationLibrary_63oeu")
[node name="VisionCone2D" parent="." unique_id=2082655346 instance=ExtResource("4_pkl84")]
position = Vector2(8, -5)
rotation = -1.5707964
angle_deg = 60
max_distance = 200.0

72
Enemy/human.tscn 100644
View File

@ -0,0 +1,72 @@
[gd_scene format=3 uid="uid://6f2xwlvvuq2i"]
[ext_resource type="Script" uid="uid://b03dn744r7c3f" path="res://Enemy/enemy.gd" id="1_332ps"]
[ext_resource type="Texture2D" uid="uid://cpwpc5hkcmrac" path="res://Idle Working.png" id="2_cl2k2"]
[ext_resource type="PackedScene" uid="uid://kf8tqdlm8c5t" path="res://addons/vision_cone_2d/vision_cone_2d_template.tscn" id="4_sekpt"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_jurff"]
[sub_resource type="Animation" id="Animation_gkxbg"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_5y2so"]
resource_name = "idle_sit"
length = 1.2
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Cat/Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xnlim"]
_data = {
&"RESET": SubResource("Animation_gkxbg"),
&"idle_sit": SubResource("Animation_5y2so")
}
[node name="Enemy" type="CharacterBody2D" unique_id=79507687]
collision_layer = 16
script = ExtResource("1_332ps")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=989742231]
visible = false
shape = SubResource("CapsuleShape2D_jurff")
[node name="Cat" type="Node2D" parent="." unique_id=1853796073]
[node name="AnimationPlayer" type="AnimationPlayer" parent="Cat" unique_id=1002271378]
root_node = NodePath("../..")
libraries/ = SubResource("AnimationLibrary_xnlim")
[node name="Sprite2D" type="Sprite2D" parent="Cat" unique_id=2017302220]
texture = ExtResource("2_cl2k2")
hframes = 8
[node name="VisionCone2D" parent="." unique_id=2082655346 instance=ExtResource("4_sekpt")]
rotation = 1.5707964
angle_deg = 70
max_distance = 200.0
collision_layer_mask = 1
[node name="VisionConeArea" parent="VisionCone2D" index="1"]
collision_mask = 2

119
Ghost/ghost.gd 100644
View File

@ -0,0 +1,119 @@
class_name Ghost extends CharacterBody2D
var move_speed: float = 200.0
var shift_speed: float = 400.0
var held_item: Collectable = null
enum State { Left, Right, Up, Down }
var state: State = State.Right
@onready var animationPlayer = $AnimationPlayer
@onready var interaction_area: Area2D = $InteractionArea
func _ready() -> void:
add_to_group("ghost")
func _process(_delta: float) -> void:
if GameManager.game_over:
velocity = Vector2.ZERO
return
var shift := Input.is_action_pressed("shift")
var direction := Vector2(
Input.get_action_strength("right") - Input.get_action_strength("left"),
Input.get_action_strength("down") - Input.get_action_strength("up")
)
if direction.length() > 0:
direction = direction.normalized()
velocity = direction * (shift_speed if shift else move_speed)
_update_animation()
func _physics_process(_delta: float) -> void:
if GameManager.game_over:
return
move_and_slide()
func _unhandled_input(event: InputEvent) -> void:
if GameManager.game_over:
return
if event.is_action_pressed("interact"):
_interact()
func _interact() -> void:
if held_item == null:
_try_pick_up()
else:
_try_drop()
func _try_pick_up() -> void:
var nearest: Collectable = null
var nearest_dist := INF
for area in interaction_area.get_overlapping_areas():
if area is Collectable and area.can_pick_up():
var d := global_position.distance_squared_to(area.global_position)
if d < nearest_dist:
nearest_dist = d
nearest = area
if nearest != null:
SoundManager.play_key_pickup()
_get_collectable(nearest)
func _try_drop() -> void:
for area in interaction_area.get_overlapping_areas():
if area is DropZone and area.accepts(held_item):
var item := held_item
held_item = null
area.deliver(item)
return
_drop_on_floor()
func _drop_on_floor() -> void:
var item := held_item
held_item = null
var gpos := item.global_position
item.reparent(get_tree().current_scene)
item.global_position = gpos
item.show_behind_parent = false
item.mark_dropped()
func _get_collectable(collectable: Collectable) -> void:
held_item = collectable
held_item.mark_picked_up()
held_item.reparent(self)
_apply_held_item_state()
func _held_item_position() -> Vector2:
match state:
State.Left: return held_item.positionLeft
State.Right: return held_item.positionRight
State.Up: return held_item.positionUp
_: return held_item.positionDown
func _move_held_item(target: Vector2) -> void:
if held_item == null:
return
var tween = create_tween().set_parallel(true)
tween.tween_property(held_item, "position", target, 0.15).set_ease(Tween.EASE_OUT)
func _apply_held_item_state() -> void:
if held_item == null:
return
held_item.show_behind_parent = state == State.Up
_move_held_item(_held_item_position())
func _set_state(new_state: State, animation: String) -> void:
if state == new_state:
return
state = new_state
animationPlayer.play(animation)
_apply_held_item_state()
func _update_animation() -> void:
# Left/right take priority over up/down, preserving the correct animation on diagonals.
if velocity.x < 0:
_set_state(State.Left, "idle_left")
elif velocity.x > 0:
_set_state(State.Right, "idle_right")
elif velocity.y < 0:
_set_state(State.Up, "idle_up")
elif velocity.y > 0:
_set_state(State.Down, "idle_down")

View File

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

128
Ghost/ghost.tscn 100644
View File

@ -0,0 +1,128 @@
[gd_scene format=3 uid="uid://r3r7jjutl3rr"]
[ext_resource type="Script" uid="uid://b6hsmfwiojo55" path="res://Ghost/ghost.gd" id="1_uexgx"]
[ext_resource type="Texture2D" uid="uid://b7q046o2x1wlf" path="res://Ghost/gosth.svg" id="2_uexgx"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_y32ns"]
radius = 4.0
height = 8.0
[sub_resource type="CircleShape2D" id="CircleShape2D_interact"]
radius = 12.0
[sub_resource type="Animation" id="Animation_rhyd0"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [1]
}
[sub_resource type="Animation" id="Animation_uexgx"]
resource_name = "idle_down"
length = 0.6
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.45),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1,
"values": [2, 10, 18, 26]
}
[sub_resource type="Animation" id="Animation_lky7i"]
resource_name = "idle_left"
length = 0.6
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.45),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1,
"values": [1, 9, 17, 25]
}
[sub_resource type="Animation" id="Animation_jyk2k"]
resource_name = "idle_right"
length = 0.6
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.45),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1,
"values": [0, 8, 16, 24]
}
[sub_resource type="Animation" id="Animation_bs0kc"]
resource_name = "idle_back"
length = 0.6
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.15, 0.3, 0.46666667),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1,
"values": [3, 11, 19, 27]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_rhyd0"]
_data = {
&"RESET": SubResource("Animation_rhyd0"),
&"idle_down": SubResource("Animation_uexgx"),
&"idle_left": SubResource("Animation_lky7i"),
&"idle_right": SubResource("Animation_jyk2k"),
&"idle_up": SubResource("Animation_bs0kc")
}
[node name="Ghost" type="CharacterBody2D" unique_id=1558624006]
collision_layer = 2
script = ExtResource("1_uexgx")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=683509728]
position = Vector2(0, 2)
shape = SubResource("CapsuleShape2D_y32ns")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=323540923]
texture = ExtResource("2_uexgx")
hframes = 8
vframes = 6
frame = 1
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=102281243]
libraries/ = SubResource("AnimationLibrary_rhyd0")
autoplay = &"idle_right"
[node name="InteractionArea" type="Area2D" parent="." unique_id=118829551]
collision_layer = 0
collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractionArea" unique_id=118829552]
shape = SubResource("CircleShape2D_interact")

6757
Ghost/gosth.svg 100644

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 394 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b7q046o2x1wlf"
path="res://.godot/imported/gosth.svg-17cc43ea8498a11bcbe71504c62452fc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Ghost/gosth.svg"
dest_files=["res://.godot/imported/gosth.svg-17cc43ea8498a11bcbe71504c62452fc.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -0,0 +1,83 @@
extends Node
## Central game state: tracks delivery tasks, aggregates NPC detection and
## drives the win / lose flow. Registered as the "GameManager" autoload.
signal tasks_changed
signal detection_changed(value: float)
signal game_won
signal game_lost
var tasks: Array[Dictionary] = []
var game_over: bool = false
var _detection: float = 0.0
var _npc_alerts: Dictionary = {}
func reset_level() -> void:
tasks.clear()
_npc_alerts.clear()
_detection = 0.0
game_over = false
get_tree().paused = false
tasks_changed.emit()
detection_changed.emit(0.0)
func register_task(id: String, description: String) -> void:
for t in tasks:
if t.id == id:
return
tasks.append({"id": id, "description": description, "done": false})
tasks_changed.emit()
func complete_task(id: String) -> void:
for t in tasks:
if t.id == id and not t.done:
t.done = true
tasks_changed.emit()
_check_win()
return
func is_task_done(id: String) -> bool:
for t in tasks:
if t.id == id:
return t.done
return false
func all_tasks_done() -> bool:
if tasks.is_empty():
return false
for t in tasks:
if not t.done:
return false
return true
func report_npc_alert(npc_id: int, value: float) -> void:
_npc_alerts[npc_id] = value
var highest := 0.0
for v in _npc_alerts.values():
highest = maxf(highest, v)
_set_detection(highest)
func report_caught() -> void:
if game_over:
return
game_over = true
_set_detection(1.0)
game_lost.emit()
get_tree().paused = true
func restart() -> void:
reset_level()
get_tree().reload_current_scene()
func _set_detection(value: float) -> void:
value = clampf(value, 0.0, 1.0)
if not is_equal_approx(value, _detection):
_detection = value
detection_changed.emit(_detection)
func _check_win() -> void:
if all_tasks_done() and not game_over:
game_over = true
game_won.emit()
get_tree().paused = true

View File

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

BIN
Idle Working.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpwpc5hkcmrac"
path="res://.godot/imported/Idle Working.png-b63d71c0305cbea0c1734b0e1020d5ba.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Idle Working.png"
dest_files=["res://.godot/imported/Idle Working.png-b63d71c0305cbea0c1734b0e1020d5ba.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cyt70vv2bowt6"
path="res://.godot/imported/Generic Children NPCs A.png-885270ee18bb7b2ee08a51cffb7f65da.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPC/Generic Children NPCs A.png"
dest_files=["res://.godot/imported/Generic Children NPCs A.png-885270ee18bb7b2ee08a51cffb7f65da.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dw10diooambpb"
path="res://.godot/imported/Generic Children NPCs.png-746f26524406b4b66edced240833b55a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPC/Generic Children NPCs.png"
dest_files=["res://.godot/imported/Generic Children NPCs.png-746f26524406b4b66edced240833b55a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://xgjnpkfp4o1d"
path="res://.godot/imported/Generic Female NPCs A.png-2bb91933468262d2ac7dd9d647b7b135.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPC/Generic Female NPCs A.png"
dest_files=["res://.godot/imported/Generic Female NPCs A.png-2bb91933468262d2ac7dd9d647b7b135.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://do3x3qsth3el0"
path="res://.godot/imported/Generic Female NPCs.png-0959455f1a8d04e50eca9c16a7123418.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPC/Generic Female NPCs.png"
dest_files=["res://.godot/imported/Generic Female NPCs.png-0959455f1a8d04e50eca9c16a7123418.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://chh7hxteo5kpw"
path="res://.godot/imported/Generic Male NPCs A.png-fd315a37d6ebd0a016d1b60f77f741e5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPC/Generic Male NPCs A.png"
dest_files=["res://.godot/imported/Generic Male NPCs A.png-fd315a37d6ebd0a016d1b60f77f741e5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhjjellr006hm"
path="res://.godot/imported/Generic Male NPCs.png-64187de71597bb91cd0728c54d73e834.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPC/Generic Male NPCs.png"
dest_files=["res://.godot/imported/Generic Male NPCs.png-64187de71597bb91cd0728c54d73e834.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

122
README.md 100644
View File

@ -0,0 +1,122 @@
<div align="center">
# 👻 Ghost Delivery
**Bringe die Gegenstände zum Zielort, ohne entdeckt zu werden.**
[![Spiel auf itch.io](https://img.shields.io/badge/Spielen%20auf-itch.io-FA5C5C?style=for-the-badge&logo=itch.io&logoColor=white)](https://zainabmb.itch.io/ghost-delivery)
[![Godot 4.7](https://img.shields.io/badge/Godot-4.7-478CBF?style=for-the-badge&logo=godotengine&logoColor=white)](https://godotengine.org/)
![Hauptmenü](assets/hauptmenue.png)
</div>
---
## 🎮 Über das Spiel
Du bist ein Geist mit einer einfachen Aufgabe: **Alltägliche Gegenstände unbemerkt an ihren Bestimmungsort liefern.** Das Problem? Die Bewohner des Hauses sind sehr wachsam, und schwebende Gegenstände sorgen schnell für Panik!
Obwohl du als Geist selbst **unsichtbar** bist, verraten dich die Objekte, die du trägst. Lerne die Alltagsroutinen der Hausbewohner kennen, finde tote Winkel und nutze Möbel als Deckung.
> 🕰️ Ein Spiel, bei dem dein **Timing** und deine **Geduld** über Erfolg oder Entdeckung entscheiden!
![Gameplay](assets/gameplay.png)
---
## 🕹️ Steuerung
| Taste | Aktion |
|---|---|
| `W` `A` `S` `D` / Pfeiltasten | Bewegen |
| `E` | Interagieren (Gegenstand aufheben / ablegen) |
| `Shift` | Sprinten |
---
## ✨ Features
- 👻 **Unsichtbarer Geist** Du bist unsichtbar, aber deine Fracht nicht!
- 👀 **Sichtkegel der Bewohner** Bewohner und Tiere haben realistische Sichtfelder, denen du ausweichen musst
- 🏠 **Mehrere Räume** Navigiere durch Küche, Wohnzimmer und mehr
- 🐱 **Aufmerksame Haustiere** Auch die Katze hat ein wachsames Auge auf dich
- 🎯 **Aufgaben-System** Erhalte klare Lieferaufträge und bringe Gegenstände zum Zielort
- 🔑 **Verschiedene Sammelgegenstände** Schlüssel, Kuchen und mehr warten darauf, geliefert zu werden
- 🎵 **Stimmungsvoller Soundtrack** Gruselige Hintergrundmusik und Retro-Soundeffekte
---
## 🚀 Starten & Entwickeln
### Voraussetzungen
- [Godot Engine 4.7](https://godotengine.org/download) (GL Compatibility Renderer)
### Projekt öffnen
1. Repository klonen
2. Godot Engine öffnen und über **Importieren** die Datei `project.godot` auswählen
3. Auf **Spielen** (F5) klicken los geht's!
---
## 🎮 Jetzt spielen!
Das Spiel ist spielbar auf **itch.io**:
**➡️ [https://zainabmb.itch.io/ghost-delivery](https://zainabmb.itch.io/ghost-delivery)**
---
## Credits
Entwickelt im Rahmen des Kurses **Game Application Engineering** an der **Universität Mannheim**.
### Räume & Möbel
- [Modern Interiors](https://limezu.itch.io/moderninteriors) *LimeZu*
- [Kitchen](https://limezu.itch.io/kitchen) *LimeZu*
- [Isometric Floor Tiles](https://maellemarylloup.itch.io/bases-isometric-floor-tiless) *MaelleMarylloup*
- [50 Flooring Tilesets](https://mary-jane03.itch.io/50-flooring-tilesetss) *Mary-Jane03*
- [2D Door](https://of-imperfect.itch.io/2d-door) *Of-Imperfect*
### Geist
- [Pixel Ghost Template](https://dyru.itch.io/pixel-ghost-template) *Dyru*
### Katze
- [Cat 2D Pixel Art](https://xzany.itch.io/cat-2d-pixel-art) *Xzany*
### Schlüssel
- [Pixel Art Key](https://drxwat.itch.io/pixel-art-key) *Drxwat*
### Essen
- [Pixel Food](https://ghostpixxells.itch.io/pixelfood) *Ghostpixxells*
### Sprechblase
- [Emote Speech Bubble 32p](https://pooklea.itch.io/emote-speech-bubble-32p) *Pooklea*
### NPC im Wohnzimmer
- [Traders Top-Down NPC](https://pixivan.itch.io/traders-top-down-npc) *Pixivan*
### Startbildschirm
- [Controller & Keyboard Template](https://lambdalighthouse.itch.io/controller-keyboard-template) *Lambda Lighthouse*
- [Parallax Halloween 2D Game Backgrounds](https://free-game-assets.itch.io/parallax-halloween-2d-game-backgrounds) *Free Game Assets*
### Einstellungs-Icon
- [Settings Icons](https://www.flaticon.com/free-icons/settings) *Flaticon*
### Hintergrundmusik & Soundeffekte
- *Haunted House* von **Aetheric** via [freetouse.com](https://freetouse.com/music) (Free No Copyright Music)
- Sound Effect von [Driken Stan](https://pixabay.com/users/driken5482-45721595/) *Pixabay*
- Sound Effect von [SoundShelfStudio](https://pixabay.com/users/soundshelfstudio-46480698/) *Pixabay*

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://danchlc3qkydk"
path="res://.godot/imported/Door01.png-5d1efd0658a6f9df3e29395d9107cb43.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Door01.png"
dest_files=["res://.godot/imported/Door01.png-5d1efd0658a6f9df3e29395d9107cb43.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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://fjmahpt6yaal"
path="res://.godot/imported/sprite_00.png-c1eb1367ae73465803ed894b56948429.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_00.png"
dest_files=["res://.godot/imported/sprite_00.png-c1eb1367ae73465803ed894b56948429.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dwocc16a8e44e"
path="res://.godot/imported/sprite_01.png-d19d8f2cb319b30919599f1cb1f16252.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_01.png"
dest_files=["res://.godot/imported/sprite_01.png-d19d8f2cb319b30919599f1cb1f16252.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cv5h0vc8ne732"
path="res://.godot/imported/sprite_02.png-700fdbce0018a93d7c836fd93f09defb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_02.png"
dest_files=["res://.godot/imported/sprite_02.png-700fdbce0018a93d7c836fd93f09defb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c2ioktip2akyy"
path="res://.godot/imported/sprite_03.png-75fb17aed31357c901cbe15eab824775.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_03.png"
dest_files=["res://.godot/imported/sprite_03.png-75fb17aed31357c901cbe15eab824775.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2mvqg26n8dem"
path="res://.godot/imported/sprite_04.png-b289325150fe85628d5da12c1a0ca698.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_04.png"
dest_files=["res://.godot/imported/sprite_04.png-b289325150fe85628d5da12c1a0ca698.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://5gr20k234ptq"
path="res://.godot/imported/sprite_05.png-680b866478c4e181d15aeb57fba80015.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_05.png"
dest_files=["res://.godot/imported/sprite_05.png-680b866478c4e181d15aeb57fba80015.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cg1tdfmwi168k"
path="res://.godot/imported/sprite_06.png-d87640ac9d21db8d38e2c76b1307b1a8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_06.png"
dest_files=["res://.godot/imported/sprite_06.png-d87640ac9d21db8d38e2c76b1307b1a8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxj58j3w2rjdj"
path="res://.godot/imported/sprite_07.png-4573829871a5d40452cbd33e7319d091.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_07.png"
dest_files=["res://.godot/imported/sprite_07.png-4573829871a5d40452cbd33e7319d091.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvqv7ovtf02wi"
path="res://.godot/imported/sprite_08.png-d5611966771e7a43baa8e1417f416c28.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_08.png"
dest_files=["res://.godot/imported/sprite_08.png-d5611966771e7a43baa8e1417f416c28.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dm4guhfayt0on"
path="res://.godot/imported/sprite_09.png-8f385581514b7b7a2526161f5c000bd9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Brick tiles/sprite_09.png"
dest_files=["res://.godot/imported/sprite_09.png-8f385581514b7b7a2526161f5c000bd9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bn052oqm5t0i1"
path="res://.godot/imported/sprite_00.png-876bc5eb57c7dc4a3662c21938a09407.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Flowers On Grass/sprite_00.png"
dest_files=["res://.godot/imported/sprite_00.png-876bc5eb57c7dc4a3662c21938a09407.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://r4ump1ays37x"
path="res://.godot/imported/sprite_01.png-a346bdfaf33326d1ecadef9e0fe5856d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Flowers On Grass/sprite_01.png"
dest_files=["res://.godot/imported/sprite_01.png-a346bdfaf33326d1ecadef9e0fe5856d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b8hwl7wjrer6t"
path="res://.godot/imported/sprite_02.png-f3ee1d3bd18f622e69b9c72372e74c67.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Flowers On Grass/sprite_02.png"
dest_files=["res://.godot/imported/sprite_02.png-f3ee1d3bd18f622e69b9c72372e74c67.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmw21a84sse8j"
path="res://.godot/imported/sprite_03.png-68a6c1894c92d497465d31f535e736b9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Flowers On Grass/sprite_03.png"
dest_files=["res://.godot/imported/sprite_03.png-68a6c1894c92d497465d31f535e736b9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bbx8ebrsyqcj"
path="res://.godot/imported/sprite_04.png-8cf9ab2419cc69b9195d23987908d166.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Rooms/Floor/Flooring Tilesets/Flowers On Grass/sprite_04.png"
dest_files=["res://.godot/imported/sprite_04.png-8cf9ab2419cc69b9195d23987908d166.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

Some files were not shown because too many files have changed in this diff Show More