migrate repo to gitty
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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")
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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()
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://ct30b07mpb4nd
|
||||||
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 720 B |
|
|
@ -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
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://dudyiyynt2qea
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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()
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cpo52n7xbqhse
|
||||||
|
|
@ -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")
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://dgat5vsvdu7kp
|
||||||
|
|
@ -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")
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://b03dn744r7c3f
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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")
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://b6hsmfwiojo55
|
||||||
|
|
@ -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")
|
||||||
|
After Width: | Height: | Size: 394 KiB |
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://b77ua4xhti8b5
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 86 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 82 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 95 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 93 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 88 KiB |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 81 KiB |
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
# 👻 Ghost Delivery
|
||||||
|
|
||||||
|
**Bringe die Gegenstände zum Zielort, ohne entdeckt zu werden.**
|
||||||
|
|
||||||
|
[](https://zainabmb.itch.io/ghost-delivery)
|
||||||
|
[](https://godotengine.org/)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</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!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🕹️ 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*
|
||||||
|
After Width: | Height: | Size: 343 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 229 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 229 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 228 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 229 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 436 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 434 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 437 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 438 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 438 B |
|
|
@ -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
|
||||||
|
After Width: | Height: | Size: 432 B |