From 85f808b73310f0b391b6b09032a40037e5559e35 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 7 Jan 2026 22:00:05 +0300 Subject: [PATCH] Added enemies --- export_presets.cfg | 46 +++ game/characters/abstract_color_enemy.gd | 9 + game/characters/abstract_color_enemy.gd.uid | 1 + game/characters/abstract_color_enemy.tscn | 26 ++ game/characters/abstract_enemy.gd | 5 + game/characters/abstract_enemy.gd.uid | 1 + game/characters/abstract_enemy.tscn | 371 ++++++++++++++++++++ game/characters/black_enemy.gd | 2 + game/characters/black_enemy.gd.uid | 1 + game/characters/black_enemy.tscn | 26 ++ game/characters/gray_enemy.gd | 2 + game/characters/gray_enemy.gd.uid | 1 + game/characters/gray_enemy.tscn | 23 ++ game/characters/player.gd | 12 +- game/characters/player.tscn | 2 +- game/characters/white_enemy.gd | 2 + game/characters/white_enemy.gd.uid | 1 + game/characters/white_enemy.tscn | 24 ++ game/collision_switcher.gd | 18 +- game/levels/abstract_level.gd | 7 + game/levels/abstract_level.tscn | 11 +- game/levels/level_1.tscn | 41 ++- game/menu/game_over_menu.gd | 22 ++ game/menu/game_over_menu.gd.uid | 1 + game/menu/game_over_menu.tscn | 55 +++ game/shaders/black_n_white.gdshader | 2 +- images/characters/cultist.png | 3 + images/characters/cultist.png.import | 40 +++ 28 files changed, 729 insertions(+), 26 deletions(-) create mode 100644 game/characters/abstract_color_enemy.gd create mode 100644 game/characters/abstract_color_enemy.gd.uid create mode 100644 game/characters/abstract_color_enemy.tscn create mode 100644 game/characters/abstract_enemy.gd create mode 100644 game/characters/abstract_enemy.gd.uid create mode 100644 game/characters/abstract_enemy.tscn create mode 100644 game/characters/black_enemy.gd create mode 100644 game/characters/black_enemy.gd.uid create mode 100644 game/characters/black_enemy.tscn create mode 100644 game/characters/gray_enemy.gd create mode 100644 game/characters/gray_enemy.gd.uid create mode 100644 game/characters/gray_enemy.tscn create mode 100644 game/characters/white_enemy.gd create mode 100644 game/characters/white_enemy.gd.uid create mode 100644 game/characters/white_enemy.tscn create mode 100644 game/menu/game_over_menu.gd create mode 100644 game/menu/game_over_menu.gd.uid create mode 100644 game/menu/game_over_menu.tscn create mode 100644 images/characters/cultist.png create mode 100644 images/characters/cultist.png.import diff --git a/export_presets.cfg b/export_presets.cfg index 63850eb..3f6ea0c 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -108,3 +108,49 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Web" +platform="Web" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/Web/CultManor.html" +patches=PackedStringArray() +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +variant/thread_support=false +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/ensure_cross_origin_isolation_headers=true +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) +threads/emscripten_pool_size=8 +threads/godot_pool_size=4 diff --git a/game/characters/abstract_color_enemy.gd b/game/characters/abstract_color_enemy.gd new file mode 100644 index 0000000..9b0f9f0 --- /dev/null +++ b/game/characters/abstract_color_enemy.gd @@ -0,0 +1,9 @@ +class_name AbstractColorEnemy +extends AbstractEnemy + + +@onready var collision_switcher : CollisionSwitcher = $CollisionSwitcher + + +func _ready() -> void: + collision_switcher.material = sprite.material diff --git a/game/characters/abstract_color_enemy.gd.uid b/game/characters/abstract_color_enemy.gd.uid new file mode 100644 index 0000000..9c8f9a4 --- /dev/null +++ b/game/characters/abstract_color_enemy.gd.uid @@ -0,0 +1 @@ +uid://das7ujanefsn0 diff --git a/game/characters/abstract_color_enemy.tscn b/game/characters/abstract_color_enemy.tscn new file mode 100644 index 0000000..fb9f6ba --- /dev/null +++ b/game/characters/abstract_color_enemy.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=6 format=3 uid="uid://d37eyum03h83i"] + +[ext_resource type="PackedScene" uid="uid://bx0luh4vdob3q" path="res://game/characters/abstract_enemy.tscn" id="1_12hr0"] +[ext_resource type="Script" uid="uid://das7ujanefsn0" path="res://game/characters/abstract_color_enemy.gd" id="2_rd56i"] +[ext_resource type="PackedScene" uid="uid://5qlocc0yu8ug" path="res://game/collision_switcher.tscn" id="3_e5cea"] +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="3_r5rx0"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ybui5"] +resource_local_to_scene = true +shader = ExtResource("3_r5rx0") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 5.0 +shader_parameter/intensity = 1.0 +shader_parameter/scale = 20.0 + +[node name="AbstractColorEnemy" instance=ExtResource("1_12hr0")] +script = ExtResource("2_rd56i") + +[node name="AnimatedSprite2D" parent="." index="0"] +material = SubResource("ShaderMaterial_ybui5") + +[node name="CollisionSwitcher" parent="." index="2" node_paths=PackedStringArray("object") instance=ExtResource("3_e5cea")] +object = NodePath("..") diff --git a/game/characters/abstract_enemy.gd b/game/characters/abstract_enemy.gd new file mode 100644 index 0000000..3b1c5c1 --- /dev/null +++ b/game/characters/abstract_enemy.gd @@ -0,0 +1,5 @@ +class_name AbstractEnemy +extends CharacterBody2D + + +@onready var sprite : AnimatedSprite2D = $AnimatedSprite2D diff --git a/game/characters/abstract_enemy.gd.uid b/game/characters/abstract_enemy.gd.uid new file mode 100644 index 0000000..ca69e60 --- /dev/null +++ b/game/characters/abstract_enemy.gd.uid @@ -0,0 +1 @@ +uid://but5aeh7y1s0f diff --git a/game/characters/abstract_enemy.tscn b/game/characters/abstract_enemy.tscn new file mode 100644 index 0000000..db42ab2 --- /dev/null +++ b/game/characters/abstract_enemy.tscn @@ -0,0 +1,371 @@ +[gd_scene load_steps=45 format=3 uid="uid://bx0luh4vdob3q"] + +[ext_resource type="Script" uid="uid://but5aeh7y1s0f" path="res://game/characters/abstract_enemy.gd" id="1_2wrno"] +[ext_resource type="Texture2D" uid="uid://drk8j57acajrq" path="res://images/characters/cultist.png" id="2_mocsw"] +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="2_tjvyk"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_vecdo"] +shader = ExtResource("2_tjvyk") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 5.0 +shader_parameter/intensity = 1.0 +shader_parameter/scale = 20.0 + +[sub_resource type="AtlasTexture" id="AtlasTexture_tjvyk"] +atlas = ExtResource("2_mocsw") +region = Rect2(128, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vecdo"] +atlas = ExtResource("2_mocsw") +region = Rect2(64, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qly8p"] +atlas = ExtResource("2_mocsw") +region = Rect2(0, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_klrad"] +atlas = ExtResource("2_mocsw") +region = Rect2(160, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rjy0i"] +atlas = ExtResource("2_mocsw") +region = Rect2(96, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ps2ar"] +atlas = ExtResource("2_mocsw") +region = Rect2(32, 96, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ijx3p"] +atlas = ExtResource("2_mocsw") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nm8xp"] +atlas = ExtResource("2_mocsw") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mocsw"] +atlas = ExtResource("2_mocsw") +region = Rect2(128, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y256a"] +atlas = ExtResource("2_mocsw") +region = Rect2(160, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8wpvf"] +atlas = ExtResource("2_mocsw") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vbirv"] +atlas = ExtResource("2_mocsw") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ntvg2"] +atlas = ExtResource("2_mocsw") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ssc8d"] +atlas = ExtResource("2_mocsw") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hrljr"] +atlas = ExtResource("2_mocsw") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ng7ok"] +atlas = ExtResource("2_mocsw") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8s45y"] +atlas = ExtResource("2_mocsw") +region = Rect2(192, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qbqct"] +atlas = ExtResource("2_mocsw") +region = Rect2(128, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ga5mk"] +atlas = ExtResource("2_mocsw") +region = Rect2(224, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yu2nn"] +atlas = ExtResource("2_mocsw") +region = Rect2(224, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_g4v8m"] +atlas = ExtResource("2_mocsw") +region = Rect2(128, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_20lqo"] +atlas = ExtResource("2_mocsw") +region = Rect2(192, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l58xb"] +atlas = ExtResource("2_mocsw") +region = Rect2(0, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jrclg"] +atlas = ExtResource("2_mocsw") +region = Rect2(32, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wwwee"] +atlas = ExtResource("2_mocsw") +region = Rect2(64, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_law7y"] +atlas = ExtResource("2_mocsw") +region = Rect2(96, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hme24"] +atlas = ExtResource("2_mocsw") +region = Rect2(128, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qawtf"] +atlas = ExtResource("2_mocsw") +region = Rect2(160, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_srxh4"] +atlas = ExtResource("2_mocsw") +region = Rect2(192, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x6npu"] +atlas = ExtResource("2_mocsw") +region = Rect2(224, 64, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xavx3"] +atlas = ExtResource("2_mocsw") +region = Rect2(0, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8t4m8"] +atlas = ExtResource("2_mocsw") +region = Rect2(32, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3seah"] +atlas = ExtResource("2_mocsw") +region = Rect2(64, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_koyeg"] +atlas = ExtResource("2_mocsw") +region = Rect2(96, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uw3v1"] +atlas = ExtResource("2_mocsw") +region = Rect2(128, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_265lf"] +atlas = ExtResource("2_mocsw") +region = Rect2(160, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tav7c"] +atlas = ExtResource("2_mocsw") +region = Rect2(192, 32, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0xs27"] +atlas = ExtResource("2_mocsw") +region = Rect2(224, 32, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_2wrno"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_tjvyk") +}], +"loop": true, +"name": &"fall_down", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_vecdo") +}], +"loop": true, +"name": &"fall_down_left", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_qly8p") +}], +"loop": true, +"name": &"fall_down_right", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_klrad") +}], +"loop": true, +"name": &"fall_up", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_rjy0i") +}], +"loop": true, +"name": &"fall_up_left", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_ps2ar") +}], +"loop": true, +"name": &"fall_up_right", +"speed": 5.0 +}, { +"frames": [{ +"duration": 9.0, +"texture": SubResource("AtlasTexture_ijx3p") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nm8xp") +}], +"loop": true, +"name": &"idle_front", +"speed": 5.0 +}, { +"frames": [{ +"duration": 9.0, +"texture": SubResource("AtlasTexture_mocsw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y256a") +}], +"loop": true, +"name": &"idle_rear", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_8wpvf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vbirv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ntvg2") +}], +"loop": false, +"name": &"look_around_front_1", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_ssc8d") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hrljr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ng7ok") +}], +"loop": false, +"name": &"look_around_front_2", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_8s45y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qbqct") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ga5mk") +}], +"loop": false, +"name": &"look_around_rear_1", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_yu2nn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_g4v8m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_20lqo") +}], +"loop": false, +"name": &"look_around_rear_2", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_l58xb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jrclg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wwwee") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_law7y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hme24") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qawtf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_srxh4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x6npu") +}], +"loop": true, +"name": &"walk_left", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_xavx3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8t4m8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3seah") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_koyeg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uw3v1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_265lf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tav7c") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0xs27") +}], +"loop": true, +"name": &"walk_right", +"speed": 10.0 +}] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_mocsw"] +radius = 4.0 +height = 28.0 + +[node name="AbstractEnemy" type="CharacterBody2D"] +collision_layer = 0 +script = ExtResource("1_2wrno") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +material = SubResource("ShaderMaterial_vecdo") +sprite_frames = SubResource("SpriteFrames_2wrno") +animation = &"walk_right" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, 2) +shape = SubResource("CapsuleShape2D_mocsw") diff --git a/game/characters/black_enemy.gd b/game/characters/black_enemy.gd new file mode 100644 index 0000000..690a0fb --- /dev/null +++ b/game/characters/black_enemy.gd @@ -0,0 +1,2 @@ +class_name BlackEnemy +extends AbstractColorEnemy diff --git a/game/characters/black_enemy.gd.uid b/game/characters/black_enemy.gd.uid new file mode 100644 index 0000000..064624d --- /dev/null +++ b/game/characters/black_enemy.gd.uid @@ -0,0 +1 @@ +uid://c2knsjcp6faf6 diff --git a/game/characters/black_enemy.tscn b/game/characters/black_enemy.tscn new file mode 100644 index 0000000..2371e07 --- /dev/null +++ b/game/characters/black_enemy.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=5 format=3 uid="uid://cutjutvd8dqqc"] + +[ext_resource type="PackedScene" uid="uid://d37eyum03h83i" path="res://game/characters/abstract_color_enemy.tscn" id="1_gj2ks"] +[ext_resource type="Script" uid="uid://c2knsjcp6faf6" path="res://game/characters/black_enemy.gd" id="2_332ds"] +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="3_3jy5n"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_3jy5n"] +resource_local_to_scene = true +shader = ExtResource("3_3jy5n") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = true +shader_parameter/threshold = 0.5 +shader_parameter/speed = 5.0 +shader_parameter/intensity = 1.0 +shader_parameter/scale = 20.0 + +[node name="BlackEnemy" instance=ExtResource("1_gj2ks")] +collision_layer = 4 +script = ExtResource("2_332ds") + +[node name="AnimatedSprite2D" parent="." index="0"] +material = SubResource("ShaderMaterial_3jy5n") + +[node name="CollisionSwitcher" parent="." index="2"] +initial_state = 0 diff --git a/game/characters/gray_enemy.gd b/game/characters/gray_enemy.gd new file mode 100644 index 0000000..fae3fb8 --- /dev/null +++ b/game/characters/gray_enemy.gd @@ -0,0 +1,2 @@ +class_name GrayEnemy +extends AbstractEnemy diff --git a/game/characters/gray_enemy.gd.uid b/game/characters/gray_enemy.gd.uid new file mode 100644 index 0000000..fd0e901 --- /dev/null +++ b/game/characters/gray_enemy.gd.uid @@ -0,0 +1 @@ +uid://cern5veiqkrkc diff --git a/game/characters/gray_enemy.tscn b/game/characters/gray_enemy.tscn new file mode 100644 index 0000000..1489746 --- /dev/null +++ b/game/characters/gray_enemy.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=5 format=3 uid="uid://cb0w6mt8g4mer"] + +[ext_resource type="PackedScene" uid="uid://bx0luh4vdob3q" path="res://game/characters/abstract_enemy.tscn" id="1_q3s46"] +[ext_resource type="Script" uid="uid://cern5veiqkrkc" path="res://game/characters/gray_enemy.gd" id="2_olede"] +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="3_ho47d"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_hsdrn"] +shader = ExtResource("3_ho47d") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 5.0 +shader_parameter/intensity = 0.70000003325 +shader_parameter/scale = 20.0 + +[node name="GrayEnemy" instance=ExtResource("1_q3s46")] +collision_layer = 16 +collision_mask = 137 +script = ExtResource("2_olede") + +[node name="AnimatedSprite2D" parent="." index="0"] +material = SubResource("ShaderMaterial_hsdrn") diff --git a/game/characters/player.gd b/game/characters/player.gd index 85a9be2..860cfcc 100644 --- a/game/characters/player.gd +++ b/game/characters/player.gd @@ -2,6 +2,9 @@ class_name Player extends CharacterBody2D +signal dead + + const ANIMATION_IDLE = "idle" const ANIMATION_LOOK_AROUND_1 = "look_around_1" const ANIMATION_LOOK_AROUND_2 = "look_around_2" @@ -47,7 +50,14 @@ func _physics_process(delta: float) -> void: velocity.x = move_toward(velocity.x, 0, acceleration * delta) _update_animation() - move_and_slide() + + var was_collided := move_and_slide() + if was_collided: + for i in range(get_slide_collision_count()): + var collision := get_slide_collision(i) + if collision.get_collider() is AbstractEnemy: + queue_free() + dead.emit() func _input(event: InputEvent) -> void: diff --git a/game/characters/player.tscn b/game/characters/player.tscn index 0f09db0..11870fe 100644 --- a/game/characters/player.tscn +++ b/game/characters/player.tscn @@ -307,7 +307,7 @@ script = ExtResource("1_xln5q") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] material = SubResource("ShaderMaterial_i05k5") sprite_frames = SubResource("SpriteFrames_v8w1g") -animation = &"fall_up" +animation = &"look_around_1" [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, 1) diff --git a/game/characters/white_enemy.gd b/game/characters/white_enemy.gd new file mode 100644 index 0000000..92edd7c --- /dev/null +++ b/game/characters/white_enemy.gd @@ -0,0 +1,2 @@ +class_name WhiteEnemy +extends AbstractColorEnemy diff --git a/game/characters/white_enemy.gd.uid b/game/characters/white_enemy.gd.uid new file mode 100644 index 0000000..16adfb2 --- /dev/null +++ b/game/characters/white_enemy.gd.uid @@ -0,0 +1 @@ +uid://dmcpkytgiuedi diff --git a/game/characters/white_enemy.tscn b/game/characters/white_enemy.tscn new file mode 100644 index 0000000..22cdd03 --- /dev/null +++ b/game/characters/white_enemy.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=5 format=3 uid="uid://bv2gahb4wxgb1"] + +[ext_resource type="PackedScene" uid="uid://d37eyum03h83i" path="res://game/characters/abstract_color_enemy.tscn" id="1_3yi7g"] +[ext_resource type="Script" uid="uid://dmcpkytgiuedi" path="res://game/characters/white_enemy.gd" id="2_c7pdf"] +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="3_uj6yw"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_gfhm1"] +resource_local_to_scene = true +shader = ExtResource("3_uj6yw") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 5.0 +shader_parameter/intensity = 1.0 +shader_parameter/scale = 20.0 + +[node name="WhiteEnemy" instance=ExtResource("1_3yi7g")] +collision_layer = 64 +collision_mask = 129 +script = ExtResource("2_c7pdf") + +[node name="AnimatedSprite2D" parent="." index="0"] +material = SubResource("ShaderMaterial_gfhm1") diff --git a/game/collision_switcher.gd b/game/collision_switcher.gd index da0a548..32aff8c 100644 --- a/game/collision_switcher.gd +++ b/game/collision_switcher.gd @@ -37,12 +37,7 @@ const SHADER_INTENSITY = "shader_parameter/intensity" @export var object : CollisionObject2D -@export var state := _state: - set(value): - if (_state != value): - _state = value - get(): - return _state +@export var initial_state : State = State.White var material : Material: @@ -50,7 +45,7 @@ var material : Material: material = value _apply_color() -var _state : State = State.White: +var _state : State: set(value): _state = value _apply_color() @@ -70,6 +65,8 @@ func _ready() -> void: _grey_mask = _get_grey_collision(object.collision_mask) _color_mask = _get_color_collision(object.collision_mask) + + _state = initial_state func switch_color(time: float = 0.0) -> void: @@ -102,9 +99,9 @@ func _set_shader_internsity(value: float) -> void: func _update_state() -> void: match _state: State.TransitionToBlack: - state = State.Black + _state = State.Black State.TransitionToWhite: - state = State.White + _state = State.White func _apply_color() -> void: @@ -124,8 +121,7 @@ func _apply_color() -> void: object.collision_layer = layer object.collision_mask = mask - - + if material != null: var is_black := _state == State.Black or _state == State.TransitionToBlack material.set(SHADER_SWITCH_COLORS, is_black) diff --git a/game/levels/abstract_level.gd b/game/levels/abstract_level.gd index ae37181..e1b9e61 100644 --- a/game/levels/abstract_level.gd +++ b/game/levels/abstract_level.gd @@ -3,13 +3,20 @@ extends Node2D @onready var pause_menu : PauseMenu = $%PauseMenu +@onready var game_over_menu : GameOverMenu = $%GameOverMenu func _ready() -> void: pause_menu.hide() + game_over_menu.hide() func _input(event: InputEvent) -> void: if event.is_action_pressed("pause"): get_tree().paused = true pause_menu.show() + + +func _on_player_dead() -> void: + get_tree().paused = true + game_over_menu.show() diff --git a/game/levels/abstract_level.tscn b/game/levels/abstract_level.tscn index dbb507b..265adb0 100644 --- a/game/levels/abstract_level.tscn +++ b/game/levels/abstract_level.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=3 uid="uid://mpsu4g2b5h3a"] +[gd_scene load_steps=15 format=3 uid="uid://mpsu4g2b5h3a"] [ext_resource type="Script" uid="uid://c737mx0kxva7i" path="res://game/levels/abstract_level.gd" id="1_o2mui"] [ext_resource type="PackedScene" uid="uid://dtcad8tdx78tg" path="res://game/characters/player.tscn" id="2_r0ht6"] @@ -7,6 +7,7 @@ [ext_resource type="Material" uid="uid://d2o2o1w8kb51g" path="res://game/materials/white_walls.tres" id="5_6b8cu"] [ext_resource type="Material" uid="uid://bhksbugqhxxa0" path="res://game/materials/black_walls.tres" id="6_x8k35"] [ext_resource type="PackedScene" uid="uid://dsts4y32slhnc" path="res://game/menu/pause_menu.tscn" id="7_l0xih"] +[ext_resource type="PackedScene" uid="uid://84lhc3yn8vub" path="res://game/menu/game_over_menu.tscn" id="8_b7vts"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_pi5fd"] texture = ExtResource("3_fnnmn") @@ -371,6 +372,8 @@ script = ExtResource("1_o2mui") [node name="Pickups" type="Node2D" parent="."] +[node name="Enemies" type="Node2D" parent="."] + [node name="Player" parent="." instance=ExtResource("2_r0ht6")] [node name="Tiles" type="Node2D" parent="."] @@ -392,3 +395,9 @@ tile_set = SubResource("TileSet_l0xih") [node name="PauseMenu" parent="CanvasLayer" instance=ExtResource("7_l0xih")] unique_name_in_owner = true visible = false + +[node name="GameOverMenu" parent="CanvasLayer" instance=ExtResource("8_b7vts")] +unique_name_in_owner = true +visible = false + +[connection signal="dead" from="Player" to="." method="_on_player_dead"] diff --git a/game/levels/level_1.tscn b/game/levels/level_1.tscn index eee0d6f..2ecbb7e 100644 --- a/game/levels/level_1.tscn +++ b/game/levels/level_1.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=4 uid="uid://bmn74wc2vophn"] +[gd_scene load_steps=21 format=4 uid="uid://bmn74wc2vophn"] [ext_resource type="PackedScene" uid="uid://mpsu4g2b5h3a" path="res://game/levels/abstract_level.tscn" id="1_15okj"] [ext_resource type="Script" uid="uid://b04km0lbc108u" path="res://game/levels/level_1.gd" id="2_hj65a"] @@ -16,6 +16,10 @@ [ext_resource type="PackedScene" uid="uid://ciubf1ttwc133" path="res://game/pickups/square_key_pickup.tscn" id="9_yrqjd"] [ext_resource type="PackedScene" uid="uid://dqgmfpv2mhdpn" path="res://game/pickups/triangle_key_pickup.tscn" id="10_dea75"] [ext_resource type="PackedScene" uid="uid://b7mhdrj3b6loq" path="res://game/doors/door.tscn" id="11_g1txn"] +[ext_resource type="PackedScene" uid="uid://dx1yasi8wlaye" path="res://game/objects/bookstand.tscn" id="13_g3b4m"] +[ext_resource type="PackedScene" uid="uid://cb0w6mt8g4mer" path="res://game/characters/gray_enemy.tscn" id="18_blgb8"] +[ext_resource type="PackedScene" uid="uid://cutjutvd8dqqc" path="res://game/characters/black_enemy.tscn" id="19_ohfy3"] +[ext_resource type="PackedScene" uid="uid://bv2gahb4wxgb1" path="res://game/characters/white_enemy.tscn" id="20_rt0xo"] [node name="Level1" instance=ExtResource("1_15okj")] script = ExtResource("2_hj65a") @@ -27,16 +31,16 @@ position = Vector2(416, -56) position = Vector2(1152, 88) [node name="ClosedDoor" parent="Doors" index="2" instance=ExtResource("5_1skah")] -position = Vector2(1233, 88) +position = Vector2(1104, -56) [node name="TriangleDoor" parent="Doors" index="3" instance=ExtResource("6_75eok")] -position = Vector2(900, -56) +position = Vector2(896, -56) [node name="SquareDoor" parent="Doors" index="4" instance=ExtResource("7_1skah")] -position = Vector2(626, -56) +position = Vector2(624, -56) [node name="BookDoor" parent="Doors" index="5" instance=ExtResource("8_75eok")] -position = Vector2(958, 88) +position = Vector2(1280, 88) [node name="Fireplace" parent="Objects" index="0" instance=ExtResource("3_tuvkr")] position = Vector2(452, -48) @@ -50,23 +54,38 @@ position = Vector2(65, 1) [node name="SwitchKbd" parent="Objects" index="3" instance=ExtResource("6_l6jt4")] position = Vector2(692, -72) +[node name="Bookstand" parent="Objects" index="4" instance=ExtResource("13_g3b4m")] +position = Vector2(1216, 102) + [node name="BookPickup" parent="Pickups" index="0" instance=ExtResource("7_fq0h3")] -position = Vector2(145, 0) +position = Vector2(1216, 86) [node name="CircleKeyPickup" parent="Pickups" index="1" instance=ExtResource("8_g1txn")] -position = Vector2(172, 0) +position = Vector2(949, 88) [node name="SquareKeyPickup" parent="Pickups" index="2" instance=ExtResource("9_yrqjd")] -position = Vector2(196, 0) +position = Vector2(306, -56) [node name="TriangleKeyPickup" parent="Pickups" index="3" instance=ExtResource("10_dea75")] -position = Vector2(218, 0) +position = Vector2(803, -56) + +[node name="GrayEnemy" parent="Enemies" index="0" instance=ExtResource("18_blgb8")] +position = Vector2(1390, 96) + +[node name="BlackEnemy" parent="Enemies" index="1" instance=ExtResource("19_ohfy3")] +position = Vector2(936, -48) + +[node name="WhiteEnemy" parent="Enemies" index="2" instance=ExtResource("20_rt0xo")] +position = Vector2(743, -48) + +[node name="Player" parent="." index="4"] +position = Vector2(-13, 0) [node name="GrayWalls" parent="Tiles" index="0"] -tile_map_data = PackedByteArray("AAD9/wEAAAABAAAAAAD+/wEAAAABAAAAAAD//wEAAAABAAAAAAAAAAEAAAABAAAAAAABAAEAAAABAAAAAAACAAEAAAABAAAAAAD8/wEAAAADAAEAAAD8/wAAAAACAAEAAAD8////AAACAAEAAAD8//7/AAACAAEAAAD8//3/AAACAAEAAAADAAEAAAABAAAAAAAEAAEAAAABAAAAAAAFAAEAAAABAAAAAAAGAAEAAAABAAAAAAAHAAEAAAABAAAAAAAIAAEAAAABAAAAAAAJAAEAAAABAAAAAAAKAAEAAAABAAAAAAALAAEAAAABAAAAAAAMAAEAAAABAAAAAAANAAEAAAABAAAAAAAOAAEAAAABAAAAAAAPAAEAAAABAAAAAAAQAAEAAAABAAAAAAARAAEAAAABAAAAAAASAAEAAAABAAAAAAATAAEAAAAEAAEAAAATAAAAAAAAAAEAAAATAP//AAAAAAEAAAATAP7/AAAAAAAAAAAUAP7/AAABAAAAAAAVAP7/AAABAAAAAAAWAP7/AAABAAAAAAAXAP7/AAABAAAAAAAYAP7/AAABAAAAAAAZAP7/AAABAAAAAAAaAP7/AAABAAAAAAAbAP7/AAABAAAAAAAcAP7/AAABAAAAAAAdAP7/AAABAAAAAAAeAP7/AAABAAAAAAAfAP7/AAABAAAAAAAgAP7/AAABAAAAAAAhAP7/AAABAAAAAAAiAP7/AAABAAAAAAAjAP7/AAABAAAAAAAkAP7/AAABAAAAAAAlAP7/AAABAAAAAAAmAP7/AAABAAAAAAAnAP7/AAABAAAAAAAoAP7/AAABAAAAAAApAP7/AAABAAAAAAAqAP7/AAABAAAAAAArAP7/AAABAAAAAAAsAP7/AAABAAAAAAAtAP7/AAABAAAAAAAuAP7/AAABAAAAAAAvAP7/AAABAAAAAAAwAP7/AAABAAAAAAAxAP7/AAABAAAAAAAyAP7/AAABAAAAAAAzAP7/AAABAAAAAAA0AP7/AAABAAAAAAA1AP7/AAABAAAAAAA2AP7/AAABAAAAAAA3AP7/AAABAAAAAAA4AP7/AAABAAAAAABEAP7/AAAEAAEAAABEAP3/AAAAAAEAAABEAPz/AAAAAAEAAABEAPv/AAAAAAEAAABEAPr/AAAAAAEAAAA5AP7/AAABAAAAAAA6AP7/AAABAAAAAAA7AP7/AAABAAAAAAA8AP7/AAABAAAAAAA9AP7/AAABAAAAAAA+AP7/AAABAAAAAABCAP7/AAABAAAAAABDAP7/AAABAAAAAAA5AAMAAAACAAEAAAA5AAQAAAACAAEAAAA5AAUAAAACAAEAAAA5AAYAAAACAAEAAAA5AAcAAAADAAEAAABHAAcAAAABAAAAAABGAAcAAAABAAAAAABFAAcAAAABAAAAAABEAAcAAAABAAAAAABDAAcAAAABAAAAAABCAAcAAAABAAAAAABBAAcAAAABAAAAAABAAAcAAAABAAAAAAA/AAcAAAABAAAAAAA+AAcAAAABAAAAAAA9AAcAAAABAAAAAAA8AAcAAAABAAAAAAA7AAcAAAABAAAAAAA6AAcAAAABAAAAAAA/AP7/AAAIAAAAAABBAP7/AAAHAAAAAABHAAMAAAAGAAIAAABIAAcAAAABAAAAAABJAAcAAAABAAAAAABKAAcAAAABAAAAAABLAAcAAAABAAAAAABMAAcAAAABAAAAAABNAAcAAAABAAAAAABOAAcAAAABAAAAAABPAAcAAAAEAAEAAABPAAYAAAAAAAEAAABPAAUAAAAAAAEAAABPAAQAAAAAAAEAAABPAAMAAAAAAAEAAABPAAIAAAAEAAAAAABHAAIAAAADAAAAAAAZAPr/AAAGAAIAAAA=") +tile_map_data = PackedByteArray("AAD9/wEAAAABAAAAAAD+/wEAAAABAAAAAAD//wEAAAABAAAAAAAAAAEAAAABAAAAAAABAAEAAAABAAAAAAACAAEAAAABAAAAAAD8/wEAAAADAAEAAAD8/wAAAAACAAEAAAD8////AAACAAEAAAD8//7/AAACAAEAAAD8//3/AAACAAEAAAADAAEAAAABAAAAAAAEAAEAAAABAAAAAAAFAAEAAAABAAAAAAAGAAEAAAABAAAAAAAHAAEAAAABAAAAAAAIAAEAAAABAAAAAAAJAAEAAAABAAAAAAAKAAEAAAABAAAAAAALAAEAAAABAAAAAAAMAAEAAAABAAAAAAANAAEAAAABAAAAAAAOAAEAAAABAAAAAAAPAAEAAAABAAAAAAAQAAEAAAABAAAAAAARAAEAAAABAAAAAAASAAEAAAABAAAAAAATAAEAAAAEAAEAAAATAAAAAAAAAAEAAAATAP//AAAAAAEAAAATAP7/AAAAAAAAAAAUAP7/AAABAAAAAAAVAP7/AAABAAAAAAAWAP7/AAABAAAAAAAXAP7/AAABAAAAAAAYAP7/AAABAAAAAAAZAP7/AAABAAAAAAAaAP7/AAABAAAAAAAbAP7/AAABAAAAAAAcAP7/AAABAAAAAAAdAP7/AAABAAAAAAAeAP7/AAABAAAAAAAfAP7/AAABAAAAAAAgAP7/AAABAAAAAAAhAP7/AAABAAAAAAAiAP7/AAABAAAAAAAjAP7/AAABAAAAAAAkAP7/AAABAAAAAAAlAP7/AAABAAAAAAAmAP7/AAABAAAAAAAnAP7/AAABAAAAAAAoAP7/AAABAAAAAAApAP7/AAABAAAAAAAqAP7/AAABAAAAAAArAP7/AAABAAAAAAAsAP7/AAABAAAAAAAtAP7/AAABAAAAAAAuAP7/AAABAAAAAAAvAP7/AAABAAAAAAAwAP7/AAABAAAAAAAxAP7/AAABAAAAAAAyAP7/AAABAAAAAAAzAP7/AAABAAAAAAA0AP7/AAABAAAAAAA1AP7/AAABAAAAAAA2AP7/AAABAAAAAAA3AP7/AAABAAAAAAA4AP7/AAABAAAAAABEAP7/AAABAAAAAABEAPr/AAAGAAIAAAA5AP7/AAABAAAAAAA6AP7/AAABAAAAAAA7AP7/AAABAAAAAAA8AP7/AAABAAAAAAA9AP7/AAABAAAAAAA+AP7/AAABAAAAAABCAP7/AAABAAAAAABDAP7/AAABAAAAAAA5AAMAAAACAAEAAAA5AAQAAAACAAEAAAA5AAUAAAACAAEAAAA5AAYAAAACAAEAAAA5AAcAAAADAAEAAABHAAcAAAABAAAAAABGAAcAAAABAAAAAABFAAcAAAABAAAAAABEAAcAAAABAAAAAABDAAcAAAABAAAAAABCAAcAAAABAAAAAABBAAcAAAABAAAAAABAAAcAAAABAAAAAAA/AAcAAAABAAAAAAA+AAcAAAABAAAAAAA9AAcAAAABAAAAAAA8AAcAAAABAAAAAAA7AAcAAAABAAAAAAA6AAcAAAABAAAAAAA/AP7/AAAIAAAAAABBAP7/AAAHAAAAAABHAAMAAAAGAAIAAABIAAcAAAABAAAAAABJAAcAAAABAAAAAABKAAcAAAABAAAAAABLAAcAAAABAAAAAABMAAcAAAABAAAAAABNAAcAAAABAAAAAABOAAcAAAABAAAAAABPAAcAAAABAAAAAABPAAIAAAAEAAAAAABHAAIAAAADAAAAAAAZAPr/AAAGAAIAAAAmAPr/AAAGAAIAAAA3APr/AAAGAAIAAABFAP7/AAABAAAAAABGAP7/AAABAAAAAABHAP7/AAABAAAAAABIAP7/AAABAAAAAABJAP7/AAABAAAAAABKAP7/AAABAAAAAABLAP7/AAABAAAAAABMAP7/AAABAAAAAABNAP7/AAABAAAAAABOAP7/AAABAAAAAABPAP7/AAABAAAAAABQAP7/AAABAAAAAABRAP7/AAABAAAAAABSAP7/AAABAAAAAABTAP7/AAABAAAAAABUAP7/AAABAAAAAABVAP7/AAABAAAAAABWAP7/AAABAAAAAABXAP7/AAABAAAAAABYAP7/AAABAAAAAABZAP7/AAABAAAAAABaAP7/AAABAAAAAABbAP7/AAABAAAAAABcAP7/AAABAAAAAABdAP7/AAABAAAAAABeAP7/AAABAAAAAABfAP7/AAABAAAAAABgAP7/AAABAAAAAABhAP7/AAABAAAAAABiAP7/AAABAAAAAABEAPn/AAADAAAAAABQAAcAAAABAAAAAABRAAcAAAABAAAAAABSAAcAAAABAAAAAABTAAcAAAABAAAAAABUAAcAAAABAAAAAABVAAcAAAABAAAAAABWAAcAAAABAAAAAABXAAcAAAABAAAAAABYAAcAAAABAAAAAABZAAcAAAABAAAAAABaAAcAAAABAAAAAABbAAcAAAABAAAAAABcAAcAAAAEAAEAAABcAAYAAAAAAAEAAABcAAUAAAAAAAEAAABcAAQAAAAAAAEAAABcAAMAAAAAAAEAAABPAAMAAAAGAAIAAAA=") [node name="BlackWalls" parent="Tiles" index="1"] tile_map_data = PackedByteArray("AABAAP7/AAAEAAIAAAA=") [node name="WhiteWalls" parent="Tiles" index="2"] -tile_map_data = PackedByteArray("AAAwAP3/AAAAAAEAAAAwAPz/AAAAAAEAAAAwAPv/AAAAAAEAAAAwAPr/AAAAAAEAAAAwAPn/AAAAAAEAAAAwAPj/AAAAAAEAAAAwAPf/AAAAAAEAAAD8//z/AAACAAEAAAD8//v/AAACAAEAAAD8//r/AAACAAEAAAD8//n/AAACAAEAAAD8//j/AAACAAEAAAD8//f/AAACAAEAAAD8//b/AAADAAAAAAD9//b/AAABAAIAAAD+//b/AAABAAIAAAD///b/AAABAAIAAAAAAPb/AAABAAIAAAABAPb/AAABAAIAAAACAPb/AAABAAIAAAADAPb/AAABAAIAAAAEAPb/AAABAAIAAAAFAPb/AAABAAIAAAAGAPb/AAABAAIAAAAHAPb/AAABAAIAAAAIAPb/AAABAAIAAAAJAPb/AAABAAIAAAAKAPb/AAABAAIAAAALAPb/AAABAAIAAAAMAPb/AAABAAIAAAANAPb/AAABAAIAAAAOAPb/AAABAAIAAAAPAPb/AAABAAIAAAAQAPb/AAABAAIAAAARAPb/AAABAAIAAAASAPb/AAABAAIAAAATAPb/AAABAAIAAAAUAPb/AAABAAIAAAAVAPb/AAABAAIAAAAWAPb/AAABAAIAAAAXAPb/AAABAAIAAAAYAPb/AAABAAIAAAAZAPb/AAABAAIAAAAaAPb/AAABAAIAAAAbAPb/AAABAAIAAAAcAPb/AAABAAIAAAAdAPb/AAABAAIAAAAeAPb/AAABAAIAAAAfAPb/AAABAAIAAAAgAPb/AAABAAIAAAAhAPb/AAABAAIAAAAiAPb/AAABAAIAAAAjAPb/AAABAAIAAAAkAPb/AAABAAIAAAAlAPb/AAABAAIAAAAmAPb/AAABAAIAAAAnAPb/AAABAAIAAAAoAPb/AAABAAIAAAApAPb/AAABAAIAAAAqAPb/AAABAAIAAAArAPb/AAABAAIAAAAsAPb/AAABAAIAAAAtAPb/AAABAAIAAAAuAPb/AAABAAIAAAAvAPb/AAABAAIAAAAwAPb/AAABAAYAAAAxAPb/AAABAAIAAAAyAPb/AAABAAIAAAAzAPb/AAABAAIAAAA0APb/AAABAAIAAAA1APb/AAABAAIAAAA2APb/AAABAAIAAAA3APb/AAABAAIAAAA4APb/AAABAAIAAAA5APb/AAABAAIAAAA6APb/AAABAAIAAAA7APb/AAABAAIAAAA8APb/AAABAAIAAAA9APb/AAABAAIAAAA+APb/AAABAAIAAAA/APb/AAABAAIAAABAAPb/AAABAAIAAABEAPn/AAAAAAEAAABEAPj/AAAAAAEAAABEAPf/AAAAAAEAAABEAPb/AAAEAAAAAABBAPb/AAABAAIAAABCAPb/AAABAAIAAABDAPb/AAABAAIAAAA+AP7/AAADAAAAAABCAP7/AAAEAAAAAAA+AP//AAACAAIAAABCAP//AAAAAAIAAAA9AP//AAABAAIAAAA8AP//AAABAAIAAAA7AP//AAABAAIAAAA6AP//AAABAAIAAABDAP//AAABAAIAAABEAP//AAABAAIAAABFAP//AAABAAIAAABGAP//AAABAAIAAAA5AP//AAADAAAAAABHAP//AAAEAAAAAAA5AAAAAAACAAEAAAA5AAEAAAACAAEAAAA5AAIAAAACAAEAAABHAAAAAAAAAAEAAABHAAEAAAAAAAEAAABHAAIAAAAAAAEAAABOAAIAAAABAAIAAABNAAIAAAABAAIAAABMAAIAAAABAAIAAABLAAIAAAABAAIAAABKAAIAAAABAAIAAABJAAIAAAABAAIAAABIAAIAAAABAAIAAAAZAPf/AAAGAAEAAAAZAPj/AAAGAAEAAAAZAPn/AAAGAAEAAAA=") +tile_map_data = PackedByteArray("AAAwAP3/AAAAAAEAAAAwAPz/AAAAAAEAAAAwAPv/AAAAAAEAAAAwAPr/AAAAAAEAAAAwAPn/AAAAAAEAAAAwAPj/AAAAAAEAAAAwAPf/AAAAAAEAAAD8//z/AAACAAEAAAD8//v/AAACAAEAAAD8//r/AAACAAEAAAD8//n/AAACAAEAAAD8//j/AAACAAEAAAD8//f/AAACAAEAAAD8//b/AAADAAAAAAD9//b/AAABAAIAAAD+//b/AAABAAIAAAD///b/AAABAAIAAAAAAPb/AAABAAIAAAABAPb/AAABAAIAAAACAPb/AAABAAIAAAADAPb/AAABAAIAAAAEAPb/AAABAAIAAAAFAPb/AAABAAIAAAAGAPb/AAABAAIAAAAHAPb/AAABAAIAAAAIAPb/AAABAAIAAAAJAPb/AAABAAIAAAAKAPb/AAABAAIAAAALAPb/AAABAAIAAAAMAPb/AAABAAIAAAANAPb/AAABAAIAAAAOAPb/AAABAAIAAAAPAPb/AAABAAIAAAAQAPb/AAABAAIAAAARAPb/AAABAAIAAAASAPb/AAABAAIAAAATAPb/AAABAAIAAAAUAPb/AAABAAIAAAAVAPb/AAABAAIAAAAWAPb/AAABAAIAAAAXAPb/AAABAAIAAAAYAPb/AAABAAIAAAAZAPb/AAABAAIAAAAaAPb/AAABAAIAAAAbAPb/AAABAAIAAAAcAPb/AAABAAIAAAAdAPb/AAABAAIAAAAeAPb/AAABAAIAAAAfAPb/AAABAAIAAAAgAPb/AAABAAIAAAAhAPb/AAABAAIAAAAiAPb/AAABAAIAAAAjAPb/AAABAAIAAAAkAPb/AAABAAIAAAAlAPb/AAABAAIAAAAmAPb/AAABAAIAAAAnAPb/AAABAAIAAAAoAPb/AAABAAIAAAApAPb/AAABAAIAAAAqAPb/AAABAAIAAAArAPb/AAABAAIAAAAsAPb/AAABAAIAAAAtAPb/AAABAAIAAAAuAPb/AAABAAIAAAAvAPb/AAABAAIAAAAwAPb/AAABAAYAAAAxAPb/AAABAAIAAAAyAPb/AAABAAIAAAAzAPb/AAABAAIAAAA0APb/AAABAAIAAAA1APb/AAABAAIAAAA2APb/AAABAAIAAAA3APb/AAABAAIAAAA4APb/AAABAAIAAAA5APb/AAABAAIAAAA6APb/AAABAAIAAAA7APb/AAABAAIAAAA8APb/AAABAAIAAAA9APb/AAABAAIAAAA+APb/AAABAAIAAAA/APb/AAABAAIAAABAAPb/AAABAAIAAABEAPn/AAAAAAEAAABEAPj/AAAAAAEAAABEAPf/AAAAAAEAAABEAPb/AAAEAAAAAABBAPb/AAABAAIAAABCAPb/AAABAAIAAABDAPb/AAABAAIAAAA+AP7/AAADAAAAAABCAP7/AAAEAAAAAAA+AP//AAACAAIAAABCAP//AAAAAAIAAAA9AP//AAABAAIAAAA8AP//AAABAAIAAAA7AP//AAABAAIAAAA6AP//AAABAAIAAABDAP//AAABAAIAAABEAP//AAABAAIAAABFAP//AAABAAIAAABGAP//AAABAAIAAAA5AP//AAADAAAAAABHAP//AAAEAAAAAAA5AAAAAAACAAEAAAA5AAEAAAACAAEAAAA5AAIAAAACAAEAAABHAAAAAAAAAAEAAABHAAEAAAAAAAEAAABHAAIAAAAAAAEAAABOAAIAAAABAAIAAABNAAIAAAABAAIAAABMAAIAAAABAAIAAABLAAIAAAABAAIAAABKAAIAAAABAAIAAABJAAIAAAABAAIAAABIAAIAAAABAAIAAAAZAPf/AAAGAAEAAAAZAPj/AAAGAAEAAAAZAPn/AAAGAAEAAAAmAPn/AAAGAAEAAAAmAPj/AAAGAAEAAAAmAPf/AAAGAAEAAAA3APn/AAAGAAEAAAA3APj/AAAGAAEAAAA3APf/AAAGAAEAAABFAPn/AAABAAIAAABGAPn/AAABAAIAAABHAPn/AAABAAIAAABIAPn/AAABAAIAAABJAPn/AAABAAIAAABRAPn/AAABAAIAAABKAPn/AAABAAIAAABLAPn/AAABAAIAAABMAPn/AAABAAIAAABNAPn/AAABAAIAAABOAPn/AAABAAIAAABPAPn/AAABAAIAAABQAPn/AAABAAIAAABSAPn/AAABAAIAAABTAPn/AAABAAIAAABUAPn/AAABAAIAAABVAPn/AAABAAIAAABWAPn/AAABAAIAAABbAPn/AAABAAIAAABXAPn/AAABAAIAAABYAPn/AAABAAIAAABZAPn/AAABAAIAAABaAPn/AAABAAIAAABcAPn/AAABAAIAAABdAPn/AAABAAIAAABeAPn/AAABAAIAAABfAPn/AAABAAIAAABgAPn/AAABAAIAAABhAPn/AAABAAIAAABiAPn/AAABAAIAAABjAPn/AAABAAIAAABkAPn/AAABAAIAAABlAPn/AAABAAIAAABmAPn/AAABAAIAAABnAPn/AAABAAIAAABoAPn/AAABAAIAAABpAPn/AAABAAIAAABqAPn/AAABAAIAAABrAPn/AAABAAIAAABsAPn/AAABAAIAAABtAPn/AAABAAIAAABuAPn/AAABAAIAAABvAPn/AAABAAIAAABwAPn/AAABAAIAAABxAPn/AAABAAIAAAByAPn/AAABAAIAAABzAPn/AAABAAIAAAB0APn/AAABAAIAAAB1APn/AAABAAIAAABjAP7/AAABAAAAAABkAP7/AAABAAAAAABlAP7/AAABAAAAAABmAP7/AAABAAAAAABnAP7/AAABAAAAAABoAP7/AAABAAAAAABpAP7/AAABAAAAAABqAP7/AAABAAAAAABrAP7/AAABAAAAAABsAP7/AAABAAAAAABtAP7/AAABAAAAAABuAP7/AAABAAAAAABvAP7/AAABAAAAAABwAP7/AAABAAAAAABxAP7/AAABAAAAAAByAP7/AAABAAAAAABzAP7/AAABAAAAAAB0AP7/AAABAAAAAAB1AP7/AAABAAAAAABQAAIAAAABAAIAAABRAAIAAAABAAIAAABSAAIAAAABAAIAAABTAAIAAAABAAIAAABUAAIAAAABAAIAAABVAAIAAAABAAIAAABWAAIAAAABAAIAAABXAAIAAAABAAIAAABaAAIAAAABAAIAAABZAAIAAAABAAIAAABYAAIAAAABAAIAAABbAAIAAAABAAIAAABcAAIAAAAEAAAAAAA=") diff --git a/game/menu/game_over_menu.gd b/game/menu/game_over_menu.gd new file mode 100644 index 0000000..0a74275 --- /dev/null +++ b/game/menu/game_over_menu.gd @@ -0,0 +1,22 @@ +class_name GameOverMenu +extends Control + + +@onready var main_menu_button : Button = $%MainMenuButton +@onready var focus_timer : Timer = $FocusTimer + + +func _on_main_menu_button_pressed() -> void: + get_tree().paused = false + get_tree().change_scene_to_file("res://game/menu/main_menu.tscn") + + +func _on_visibility_changed() -> void: + if visible: + if focus_timer != null: + focus_timer.start() + + +func _on_focus_timer_timeout() -> void: + if main_menu_button != null: + main_menu_button.grab_focus() diff --git a/game/menu/game_over_menu.gd.uid b/game/menu/game_over_menu.gd.uid new file mode 100644 index 0000000..a510e64 --- /dev/null +++ b/game/menu/game_over_menu.gd.uid @@ -0,0 +1 @@ +uid://bb257l7unttky diff --git a/game/menu/game_over_menu.tscn b/game/menu/game_over_menu.tscn new file mode 100644 index 0000000..0a94c80 --- /dev/null +++ b/game/menu/game_over_menu.tscn @@ -0,0 +1,55 @@ +[gd_scene load_steps=3 format=3 uid="uid://84lhc3yn8vub"] + +[ext_resource type="Theme" uid="uid://bh56my8b2htnr" path="res://themes/menu.tres" id="1_htxfh"] +[ext_resource type="Script" uid="uid://bb257l7unttky" path="res://game/menu/game_over_menu.gd" id="2_m1ad0"] + +[node name="GameOverMenu" type="Control"] +process_mode = 2 +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_htxfh") +script = ExtResource("2_m1ad0") + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_constants/separation = 64 + +[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Game over" +horizontal_alignment = 1 + +[node name="MainMenuButton" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Main menu" + +[node name="FocusTimer" type="Timer" parent="."] +one_shot = true + +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] +[connection signal="pressed" from="MarginContainer/VBoxContainer/MainMenuButton" to="." method="_on_main_menu_button_pressed"] +[connection signal="timeout" from="FocusTimer" to="." method="_on_focus_timer_timeout"] diff --git a/game/shaders/black_n_white.gdshader b/game/shaders/black_n_white.gdshader index 2d492d9..0376db7 100644 --- a/game/shaders/black_n_white.gdshader +++ b/game/shaders/black_n_white.gdshader @@ -33,7 +33,7 @@ float cellular(vec2 coord) { } void fragment() { - if (COLOR.a != 0.0) { + if (COLOR.a > 0.01) { float l = dot(COLOR.rgb, vec3(0.2126, 0.7152, 0.0722)); bool is_black = l < threshold; diff --git a/images/characters/cultist.png b/images/characters/cultist.png new file mode 100644 index 0000000..78e9eab --- /dev/null +++ b/images/characters/cultist.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feff984eeb878a882aacc233e0ffa4886dbda3db74f6eaf77a8d22bbceff7cc5 +size 1427 diff --git a/images/characters/cultist.png.import b/images/characters/cultist.png.import new file mode 100644 index 0000000..3243ffa --- /dev/null +++ b/images/characters/cultist.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drk8j57acajrq" +path="res://.godot/imported/cultist.png-180aacaf67ab096cef480ddf14b42e3d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://images/characters/cultist.png" +dest_files=["res://.godot/imported/cultist.png-180aacaf67ab096cef480ddf14b42e3d.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