From d229286f70b619497bc946a36e5440df3d04f674 Mon Sep 17 00:00:00 2001 From: bd Date: Sat, 24 May 2025 22:05:00 -0400 Subject: Add a title screen and music --- assets/01 - At Your Own Peril.wav | Bin 0 -> 2304092 bytes assets/01 - At Your Own Peril.wav.import | 24 ++++++++ assets/02 - Motivatia Eroului.wav | Bin 0 -> 43276892 bytes assets/02 - Motivatia Eroului.wav.import | 24 ++++++++ assets/03 - Serpent's Doorstep.wav | Bin 0 -> 52780892 bytes assets/03 - Serpent's Doorstep.wav.import | 24 ++++++++ assets/04 - Self Preservation.wav | Bin 0 -> 49370972 bytes assets/04 - Self Preservation.wav.import | 24 ++++++++ assets/05 - Challenge the Depths.wav | Bin 0 -> 38465372 bytes assets/05 - Challenge the Depths.wav.import | 24 ++++++++ assets/06 - The Temperature of Time.wav | Bin 0 -> 51832412 bytes assets/06 - The Temperature of Time.wav.import | 24 ++++++++ assets/07 - The Victim's Hall.wav | Bin 0 -> 27314012 bytes assets/07 - The Victim's Hall.wav.import | 24 ++++++++ assets/08 - Of Blood and Capes.wav | Bin 0 -> 24330332 bytes assets/08 - Of Blood and Capes.wav.import | 24 ++++++++ assets/09 - Riddle of Demise.wav | Bin 0 -> 16293212 bytes assets/09 - Riddle of Demise.wav.import | 24 ++++++++ assets/10 - Tainted Will.wav | Bin 0 -> 17694812 bytes assets/10 - Tainted Will.wav.import | 24 ++++++++ assets/11 - Death's Respite.wav | Bin 0 -> 1351772 bytes assets/11 - Death's Respite.wav.import | 24 ++++++++ assets/12 - Star's Breath.wav | Bin 0 -> 1382492 bytes assets/12 - Star's Breath.wav.import | 24 ++++++++ assets/13 - The Regret of Victory.wav | Bin 0 -> 16128092 bytes assets/13 - The Regret of Victory.wav.import | 24 ++++++++ assets/title.png | Bin 0 -> 31719 bytes assets/title.png.import | 34 ++++++++++++ assets/title.xcf | Bin 0 -> 92286 bytes project.godot | 2 +- resources/oscillating_text.gdshader | 10 ++++ resources/oscillating_text.gdshader.uid | 1 + scenes/Main.tscn | 52 ------------------ scenes/game.tscn | 73 +++++++++++++++++++++++++ scenes/title.gd | 5 ++ scenes/title.gd.uid | 1 + scenes/title.tscn | 53 ++++++++++++++++++ scenes/ui.tscn | 11 ++-- scenes/ui_option.tscn | 2 +- scripts/audio_looper.gd | 8 +++ scripts/audio_looper.gd.uid | 1 + scripts/game_stats_config.gd | 1 + scripts/player.gd | 8 +-- scripts/ui_panel.gd | 13 ++--- scripts/warlock.gd | 2 +- scripts/wyvern.gd | 2 +- 46 files changed, 518 insertions(+), 73 deletions(-) create mode 100644 assets/01 - At Your Own Peril.wav create mode 100644 assets/01 - At Your Own Peril.wav.import create mode 100644 assets/02 - Motivatia Eroului.wav create mode 100644 assets/02 - Motivatia Eroului.wav.import create mode 100644 assets/03 - Serpent's Doorstep.wav create mode 100644 assets/03 - Serpent's Doorstep.wav.import create mode 100644 assets/04 - Self Preservation.wav create mode 100644 assets/04 - Self Preservation.wav.import create mode 100644 assets/05 - Challenge the Depths.wav create mode 100644 assets/05 - Challenge the Depths.wav.import create mode 100644 assets/06 - The Temperature of Time.wav create mode 100644 assets/06 - The Temperature of Time.wav.import create mode 100644 assets/07 - The Victim's Hall.wav create mode 100644 assets/07 - The Victim's Hall.wav.import create mode 100644 assets/08 - Of Blood and Capes.wav create mode 100644 assets/08 - Of Blood and Capes.wav.import create mode 100644 assets/09 - Riddle of Demise.wav create mode 100644 assets/09 - Riddle of Demise.wav.import create mode 100644 assets/10 - Tainted Will.wav create mode 100644 assets/10 - Tainted Will.wav.import create mode 100644 assets/11 - Death's Respite.wav create mode 100644 assets/11 - Death's Respite.wav.import create mode 100644 assets/12 - Star's Breath.wav create mode 100644 assets/12 - Star's Breath.wav.import create mode 100644 assets/13 - The Regret of Victory.wav create mode 100644 assets/13 - The Regret of Victory.wav.import create mode 100644 assets/title.png create mode 100644 assets/title.png.import create mode 100644 assets/title.xcf create mode 100644 resources/oscillating_text.gdshader create mode 100644 resources/oscillating_text.gdshader.uid delete mode 100644 scenes/Main.tscn create mode 100644 scenes/game.tscn create mode 100644 scenes/title.gd create mode 100644 scenes/title.gd.uid create mode 100644 scenes/title.tscn create mode 100644 scripts/audio_looper.gd create mode 100644 scripts/audio_looper.gd.uid diff --git a/assets/01 - At Your Own Peril.wav b/assets/01 - At Your Own Peril.wav new file mode 100644 index 0000000..b33b3d4 Binary files /dev/null and b/assets/01 - At Your Own Peril.wav differ diff --git a/assets/01 - At Your Own Peril.wav.import b/assets/01 - At Your Own Peril.wav.import new file mode 100644 index 0000000..ca1cd2d --- /dev/null +++ b/assets/01 - At Your Own Peril.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c3f0s3klwd1l5" +path="res://.godot/imported/01 - At Your Own Peril.wav-78d54fbf312c5674cb02a58a72335fbc.sample" + +[deps] + +source_file="res://assets/01 - At Your Own Peril.wav" +dest_files=["res://.godot/imported/01 - At Your Own Peril.wav-78d54fbf312c5674cb02a58a72335fbc.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/02 - Motivatia Eroului.wav b/assets/02 - Motivatia Eroului.wav new file mode 100644 index 0000000..6cfd58c Binary files /dev/null and b/assets/02 - Motivatia Eroului.wav differ diff --git a/assets/02 - Motivatia Eroului.wav.import b/assets/02 - Motivatia Eroului.wav.import new file mode 100644 index 0000000..eabde88 --- /dev/null +++ b/assets/02 - Motivatia Eroului.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://fysavm3u40p2" +path="res://.godot/imported/02 - Motivatia Eroului.wav-eef27c72dfeb655b2bb4bf2564f37126.sample" + +[deps] + +source_file="res://assets/02 - Motivatia Eroului.wav" +dest_files=["res://.godot/imported/02 - Motivatia Eroului.wav-eef27c72dfeb655b2bb4bf2564f37126.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/03 - Serpent's Doorstep.wav b/assets/03 - Serpent's Doorstep.wav new file mode 100644 index 0000000..0c2a1cd Binary files /dev/null and b/assets/03 - Serpent's Doorstep.wav differ diff --git a/assets/03 - Serpent's Doorstep.wav.import b/assets/03 - Serpent's Doorstep.wav.import new file mode 100644 index 0000000..8cdf513 --- /dev/null +++ b/assets/03 - Serpent's Doorstep.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dplee21ovrkkw" +path="res://.godot/imported/03 - Serpent's Doorstep.wav-aedcbff1b8aa1da604b11b322fbc1743.sample" + +[deps] + +source_file="res://assets/03 - Serpent's Doorstep.wav" +dest_files=["res://.godot/imported/03 - Serpent's Doorstep.wav-aedcbff1b8aa1da604b11b322fbc1743.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/04 - Self Preservation.wav b/assets/04 - Self Preservation.wav new file mode 100644 index 0000000..2aa26b5 Binary files /dev/null and b/assets/04 - Self Preservation.wav differ diff --git a/assets/04 - Self Preservation.wav.import b/assets/04 - Self Preservation.wav.import new file mode 100644 index 0000000..5c86093 --- /dev/null +++ b/assets/04 - Self Preservation.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://eat73dvukohu" +path="res://.godot/imported/04 - Self Preservation.wav-f16a0d0d66c0426f9b83fd58736cd36a.sample" + +[deps] + +source_file="res://assets/04 - Self Preservation.wav" +dest_files=["res://.godot/imported/04 - Self Preservation.wav-f16a0d0d66c0426f9b83fd58736cd36a.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/05 - Challenge the Depths.wav b/assets/05 - Challenge the Depths.wav new file mode 100644 index 0000000..f555a53 Binary files /dev/null and b/assets/05 - Challenge the Depths.wav differ diff --git a/assets/05 - Challenge the Depths.wav.import b/assets/05 - Challenge the Depths.wav.import new file mode 100644 index 0000000..8afa448 --- /dev/null +++ b/assets/05 - Challenge the Depths.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://baa7feyog7ad" +path="res://.godot/imported/05 - Challenge the Depths.wav-b6a8468231ca5edcf6bda652d694a551.sample" + +[deps] + +source_file="res://assets/05 - Challenge the Depths.wav" +dest_files=["res://.godot/imported/05 - Challenge the Depths.wav-b6a8468231ca5edcf6bda652d694a551.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/06 - The Temperature of Time.wav b/assets/06 - The Temperature of Time.wav new file mode 100644 index 0000000..c338846 Binary files /dev/null and b/assets/06 - The Temperature of Time.wav differ diff --git a/assets/06 - The Temperature of Time.wav.import b/assets/06 - The Temperature of Time.wav.import new file mode 100644 index 0000000..9223f93 --- /dev/null +++ b/assets/06 - The Temperature of Time.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://6kmoeyv6xfvr" +path="res://.godot/imported/06 - The Temperature of Time.wav-94f4c19ffeb7a0bdad381494d0c635de.sample" + +[deps] + +source_file="res://assets/06 - The Temperature of Time.wav" +dest_files=["res://.godot/imported/06 - The Temperature of Time.wav-94f4c19ffeb7a0bdad381494d0c635de.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/07 - The Victim's Hall.wav b/assets/07 - The Victim's Hall.wav new file mode 100644 index 0000000..07b2ca8 Binary files /dev/null and b/assets/07 - The Victim's Hall.wav differ diff --git a/assets/07 - The Victim's Hall.wav.import b/assets/07 - The Victim's Hall.wav.import new file mode 100644 index 0000000..e7fb981 --- /dev/null +++ b/assets/07 - The Victim's Hall.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bixrivbcifxur" +path="res://.godot/imported/07 - The Victim's Hall.wav-237d9026982ffb25c8c3737af551021c.sample" + +[deps] + +source_file="res://assets/07 - The Victim's Hall.wav" +dest_files=["res://.godot/imported/07 - The Victim's Hall.wav-237d9026982ffb25c8c3737af551021c.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/08 - Of Blood and Capes.wav b/assets/08 - Of Blood and Capes.wav new file mode 100644 index 0000000..bb33b20 Binary files /dev/null and b/assets/08 - Of Blood and Capes.wav differ diff --git a/assets/08 - Of Blood and Capes.wav.import b/assets/08 - Of Blood and Capes.wav.import new file mode 100644 index 0000000..b487137 --- /dev/null +++ b/assets/08 - Of Blood and Capes.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d2gtuehcm5cg0" +path="res://.godot/imported/08 - Of Blood and Capes.wav-9612bb9fcdb3683ab22b7d7d5c4b2cec.sample" + +[deps] + +source_file="res://assets/08 - Of Blood and Capes.wav" +dest_files=["res://.godot/imported/08 - Of Blood and Capes.wav-9612bb9fcdb3683ab22b7d7d5c4b2cec.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/09 - Riddle of Demise.wav b/assets/09 - Riddle of Demise.wav new file mode 100644 index 0000000..79dc3f2 Binary files /dev/null and b/assets/09 - Riddle of Demise.wav differ diff --git a/assets/09 - Riddle of Demise.wav.import b/assets/09 - Riddle of Demise.wav.import new file mode 100644 index 0000000..d0c751a --- /dev/null +++ b/assets/09 - Riddle of Demise.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dv3042e2v5hsj" +path="res://.godot/imported/09 - Riddle of Demise.wav-3161bf1b71554c26749a5c5a84cb5136.sample" + +[deps] + +source_file="res://assets/09 - Riddle of Demise.wav" +dest_files=["res://.godot/imported/09 - Riddle of Demise.wav-3161bf1b71554c26749a5c5a84cb5136.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/10 - Tainted Will.wav b/assets/10 - Tainted Will.wav new file mode 100644 index 0000000..20bd1b3 Binary files /dev/null and b/assets/10 - Tainted Will.wav differ diff --git a/assets/10 - Tainted Will.wav.import b/assets/10 - Tainted Will.wav.import new file mode 100644 index 0000000..a5aee6b --- /dev/null +++ b/assets/10 - Tainted Will.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ceoevjs7grkj8" +path="res://.godot/imported/10 - Tainted Will.wav-6ee8da02b084f9e198eebc4150127a23.sample" + +[deps] + +source_file="res://assets/10 - Tainted Will.wav" +dest_files=["res://.godot/imported/10 - Tainted Will.wav-6ee8da02b084f9e198eebc4150127a23.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/11 - Death's Respite.wav b/assets/11 - Death's Respite.wav new file mode 100644 index 0000000..124aad8 Binary files /dev/null and b/assets/11 - Death's Respite.wav differ diff --git a/assets/11 - Death's Respite.wav.import b/assets/11 - Death's Respite.wav.import new file mode 100644 index 0000000..70d1916 --- /dev/null +++ b/assets/11 - Death's Respite.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b6gqbdoic7lr4" +path="res://.godot/imported/11 - Death's Respite.wav-d78eff091fd5b90aab746826ffd07ee9.sample" + +[deps] + +source_file="res://assets/11 - Death's Respite.wav" +dest_files=["res://.godot/imported/11 - Death's Respite.wav-d78eff091fd5b90aab746826ffd07ee9.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/12 - Star's Breath.wav b/assets/12 - Star's Breath.wav new file mode 100644 index 0000000..f23206c Binary files /dev/null and b/assets/12 - Star's Breath.wav differ diff --git a/assets/12 - Star's Breath.wav.import b/assets/12 - Star's Breath.wav.import new file mode 100644 index 0000000..04e3a6f --- /dev/null +++ b/assets/12 - Star's Breath.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c3jqn37jifgc7" +path="res://.godot/imported/12 - Star's Breath.wav-396ee6ba84a7d65bbe516adcb5fb4eab.sample" + +[deps] + +source_file="res://assets/12 - Star's Breath.wav" +dest_files=["res://.godot/imported/12 - Star's Breath.wav-396ee6ba84a7d65bbe516adcb5fb4eab.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/13 - The Regret of Victory.wav b/assets/13 - The Regret of Victory.wav new file mode 100644 index 0000000..e080cf5 Binary files /dev/null and b/assets/13 - The Regret of Victory.wav differ diff --git a/assets/13 - The Regret of Victory.wav.import b/assets/13 - The Regret of Victory.wav.import new file mode 100644 index 0000000..38dd6fc --- /dev/null +++ b/assets/13 - The Regret of Victory.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://coam5ivql7fwj" +path="res://.godot/imported/13 - The Regret of Victory.wav-d52e6650e3e41959ea96b81d9c8730ac.sample" + +[deps] + +source_file="res://assets/13 - The Regret of Victory.wav" +dest_files=["res://.godot/imported/13 - The Regret of Victory.wav-d52e6650e3e41959ea96b81d9c8730ac.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/assets/title.png b/assets/title.png new file mode 100644 index 0000000..555b48a Binary files /dev/null and b/assets/title.png differ diff --git a/assets/title.png.import b/assets/title.png.import new file mode 100644 index 0000000..bf572ee --- /dev/null +++ b/assets/title.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cgmfpwb1eb88v" +path="res://.godot/imported/title.png-f520a0d529e74edf0d3ba77895c4527c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/title.png" +dest_files=["res://.godot/imported/title.png-f520a0d529e74edf0d3ba77895c4527c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/title.xcf b/assets/title.xcf new file mode 100644 index 0000000..80f0db8 Binary files /dev/null and b/assets/title.xcf differ diff --git a/project.godot b/project.godot index 0d1189e..5725dca 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="pixel-defense-2" -run/main_scene="uid://chwnewu8l45kj" +run/main_scene="uid://cgoebhfu5udrc" config/features=PackedStringArray("4.4", "GL Compatibility") config/icon="res://icon.svg" diff --git a/resources/oscillating_text.gdshader b/resources/oscillating_text.gdshader new file mode 100644 index 0000000..cd26160 --- /dev/null +++ b/resources/oscillating_text.gdshader @@ -0,0 +1,10 @@ +shader_type canvas_item; + +uniform float height = 2.0; +uniform float freq = 3.0; +uniform float speed = 5.0; + +void vertex() { + VERTEX.y += height * sin((freq * UV.x) + speed * TIME); +} + diff --git a/resources/oscillating_text.gdshader.uid b/resources/oscillating_text.gdshader.uid new file mode 100644 index 0000000..6d40d6a --- /dev/null +++ b/resources/oscillating_text.gdshader.uid @@ -0,0 +1 @@ +uid://d3ktu01mh01ao diff --git a/scenes/Main.tscn b/scenes/Main.tscn deleted file mode 100644 index 524c766..0000000 --- a/scenes/Main.tscn +++ /dev/null @@ -1,52 +0,0 @@ -[gd_scene load_steps=7 format=3 uid="uid://chwnewu8l45kj"] - -[ext_resource type="Script" uid="uid://i5bjnah05h14" path="res://scripts/wave_spawner.gd" id="2_0bbpv"] -[ext_resource type="PackedScene" uid="uid://cdgeamr56c0mx" path="res://scenes/map.tscn" id="2_vcsgt"] -[ext_resource type="PackedScene" uid="uid://cq6d7gmjbwl14" path="res://scenes/player.tscn" id="4_rarhs"] -[ext_resource type="Script" uid="uid://bxnjjp3at6ht3" path="res://scripts/tower_manager.gd" id="4_vcsgt"] -[ext_resource type="PackedScene" uid="uid://dycgp3yept14k" path="res://scenes/ui.tscn" id="5_vcsgt"] - -[sub_resource type="GDScript" id="GDScript_rarhs"] -script/source = "extends Node - -var occupied_tiles = {} - -@export var tile_size = 16.0 -@export var grid_width = 20 -@export var grid_height = 15 - -func is_tile_occupied(tile_position): - return occupied_tiles.has(tile_position) - -func occupy_tile(tile_position): - occupied_tiles[tile_position] = true - -func free_tile(tile_position): - occupied_tiles.erase(tile_position) -" - -[node name="Main" type="Node2D"] - -[node name="Player" parent="." instance=ExtResource("4_rarhs")] -z_index = 2 - -[node name="Map" parent="." instance=ExtResource("2_vcsgt")] - -[node name="PathSpawner" type="Node2D" parent="."] -script = ExtResource("2_0bbpv") - -[node name="Timer" type="Timer" parent="PathSpawner"] -autostart = true - -[node name="Defenders" type="Node" parent="."] -script = ExtResource("4_vcsgt") - -[node name="GridManager" type="Node" parent="."] -script = SubResource("GDScript_rarhs") - -[node name="PanelContainer" parent="." instance=ExtResource("5_vcsgt")] -offset_top = 224.0 -offset_right = 320.0 -offset_bottom = 241.0 - -[connection signal="timeout" from="PathSpawner/Timer" to="PathSpawner" method="_on_timer_timeout"] diff --git a/scenes/game.tscn b/scenes/game.tscn new file mode 100644 index 0000000..1df2ade --- /dev/null +++ b/scenes/game.tscn @@ -0,0 +1,73 @@ +[gd_scene load_steps=15 format=3 uid="uid://chwnewu8l45kj"] + +[ext_resource type="PackedScene" uid="uid://cq6d7gmjbwl14" path="res://scenes/player.tscn" id="1_iywne"] +[ext_resource type="PackedScene" uid="uid://cdgeamr56c0mx" path="res://scenes/map.tscn" id="2_p57ef"] +[ext_resource type="Script" uid="uid://i5bjnah05h14" path="res://scripts/wave_spawner.gd" id="3_u5sy4"] +[ext_resource type="Script" uid="uid://bxnjjp3at6ht3" path="res://scripts/tower_manager.gd" id="4_gee14"] +[ext_resource type="PackedScene" uid="uid://dycgp3yept14k" path="res://scenes/ui.tscn" id="5_0tnpc"] +[ext_resource type="AudioStream" uid="uid://eat73dvukohu" path="res://assets/04 - Self Preservation.wav" id="6_0tnpc"] +[ext_resource type="AudioStream" uid="uid://6kmoeyv6xfvr" path="res://assets/06 - The Temperature of Time.wav" id="7_vtaks"] +[ext_resource type="AudioStream" uid="uid://bixrivbcifxur" path="res://assets/07 - The Victim's Hall.wav" id="8_kvpfn"] +[ext_resource type="AudioStream" uid="uid://dv3042e2v5hsj" path="res://assets/09 - Riddle of Demise.wav" id="9_dinhu"] +[ext_resource type="AudioStream" uid="uid://fysavm3u40p2" path="res://assets/02 - Motivatia Eroului.wav" id="10_dinhu"] +[ext_resource type="Script" uid="uid://1d5icis2ddhc" path="res://scripts/audio_looper.gd" id="10_vtaks"] +[ext_resource type="AudioStream" uid="uid://d2gtuehcm5cg0" path="res://assets/08 - Of Blood and Capes.wav" id="11_kvuet"] + +[sub_resource type="GDScript" id="GDScript_rarhs"] +script/source = "extends Node + +var occupied_tiles = {} + +@export var tile_size = 16.0 +@export var grid_width = 20 +@export var grid_height = 15 + +func is_tile_occupied(tile_position): + return occupied_tiles.has(tile_position) + +func occupy_tile(tile_position): + occupied_tiles[tile_position] = true + +func free_tile(tile_position): + occupied_tiles.erase(tile_position) +" + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_kvuet"] +streams_count = 6 +stream_0/stream = ExtResource("6_0tnpc") +stream_1/stream = ExtResource("7_vtaks") +stream_2/stream = ExtResource("8_kvpfn") +stream_3/stream = ExtResource("9_dinhu") +stream_4/stream = ExtResource("10_dinhu") +stream_5/stream = ExtResource("11_kvuet") + +[node name="game" type="Node2D"] + +[node name="Player" parent="." instance=ExtResource("1_iywne")] +z_index = 2 + +[node name="Map" parent="." instance=ExtResource("2_p57ef")] + +[node name="PathSpawner" type="Node2D" parent="."] +script = ExtResource("3_u5sy4") + +[node name="Timer" type="Timer" parent="PathSpawner"] +autostart = true + +[node name="Defenders" type="Node" parent="."] +script = ExtResource("4_gee14") + +[node name="GridManager" type="Node" parent="."] +script = SubResource("GDScript_rarhs") + +[node name="PanelContainer" parent="." instance=ExtResource("5_0tnpc")] +offset_top = 224.0 +offset_right = 320.0 +offset_bottom = 241.0 + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +stream = SubResource("AudioStreamRandomizer_kvuet") +volume_db = -4.0 +script = ExtResource("10_vtaks") + +[connection signal="timeout" from="PathSpawner/Timer" to="PathSpawner" method="_on_timer_timeout"] diff --git a/scenes/title.gd b/scenes/title.gd new file mode 100644 index 0000000..8242145 --- /dev/null +++ b/scenes/title.gd @@ -0,0 +1,5 @@ +extends Control + +func _input(event): + if event.is_action_pressed("ui_accept"): + get_tree().change_scene_to_file("res://scenes/game.tscn") diff --git a/scenes/title.gd.uid b/scenes/title.gd.uid new file mode 100644 index 0000000..163f43d --- /dev/null +++ b/scenes/title.gd.uid @@ -0,0 +1 @@ +uid://cxmpltan4gkpt diff --git a/scenes/title.tscn b/scenes/title.tscn new file mode 100644 index 0000000..59450e7 --- /dev/null +++ b/scenes/title.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=7 format=3 uid="uid://cgoebhfu5udrc"] + +[ext_resource type="Texture2D" uid="uid://cgmfpwb1eb88v" path="res://assets/title.png" id="1_4ignj"] +[ext_resource type="Script" uid="uid://cxmpltan4gkpt" path="res://scenes/title.gd" id="1_wosw1"] +[ext_resource type="AudioStream" uid="uid://coam5ivql7fwj" path="res://assets/13 - The Regret of Victory.wav" id="3_p6dhs"] +[ext_resource type="Script" uid="uid://1d5icis2ddhc" path="res://scripts/audio_looper.gd" id="4_pyl7j"] +[ext_resource type="Shader" uid="uid://d3ktu01mh01ao" path="res://resources/oscillating_text.gdshader" id="5_b3w7a"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_4rr2b"] +shader = ExtResource("5_b3w7a") +shader_parameter/height = 2.0 +shader_parameter/freq = 3.0 +shader_parameter/speed = 5.0 + +[node name="Title" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_wosw1") + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_4ignj") +expand_mode = 2 + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("3_p6dhs") +autoplay = true +script = ExtResource("4_pyl7j") + +[node name="Label" type="Label" parent="."] +material = SubResource("ShaderMaterial_4rr2b") +layout_mode = 1 +anchors_preset = -1 +anchor_top = 0.916667 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -28.0 +offset_bottom = -28.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +text = "press 'space'" +horizontal_alignment = 1 +metadata/_edit_use_anchors_ = true diff --git a/scenes/ui.tscn b/scenes/ui.tscn index 5f10b53..74e591e 100644 --- a/scenes/ui.tscn +++ b/scenes/ui.tscn @@ -17,29 +17,28 @@ script = ExtResource("1_yev5y") [node name="MarginContainer" type="MarginContainer" parent="."] layout_mode = 2 -theme_override_constants/margin_left = 6 +theme_override_constants/margin_left = 1 theme_override_constants/margin_top = 0 [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] layout_mode = 2 size_flags_vertical = 0 +theme_override_constants/separation = 1 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/HBoxContainer"] -clip_contents = true +custom_minimum_size = Vector2(48, 0) layout_mode = 2 -size_flags_horizontal = 0 -theme_override_constants/separation = -3 +theme_override_constants/separation = -4 [node name="Morale" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 8 -text = " Morale: " [node name="Life" type="Label" parent="MarginContainer/HBoxContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 8 -text = "Life: " [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 +theme_override_constants/separation = 1 diff --git a/scenes/ui_option.tscn b/scenes/ui_option.tscn index d89e8cd..21468c6 100644 --- a/scenes/ui_option.tscn +++ b/scenes/ui_option.tscn @@ -23,7 +23,7 @@ layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer"] layout_mode = 2 -theme_override_constants/separation = -3 +theme_override_constants/separation = -4 [node name="Label" type="Label" parent="HBoxContainer/VBoxContainer"] layout_mode = 2 diff --git a/scripts/audio_looper.gd b/scripts/audio_looper.gd new file mode 100644 index 0000000..eae9f0f --- /dev/null +++ b/scripts/audio_looper.gd @@ -0,0 +1,8 @@ +extends AudioStreamPlayer2D + +func _ready() -> void: + self.connect("finished", Callable(self,"_on_loop_sound").bind(self)) + play() + +func _on_loop_sound(player): + player.play() diff --git a/scripts/audio_looper.gd.uid b/scripts/audio_looper.gd.uid new file mode 100644 index 0000000..7579a5a --- /dev/null +++ b/scripts/audio_looper.gd.uid @@ -0,0 +1 @@ +uid://1d5icis2ddhc diff --git a/scripts/game_stats_config.gd b/scripts/game_stats_config.gd index 89d265c..38d9cd8 100644 --- a/scripts/game_stats_config.gd +++ b/scripts/game_stats_config.gd @@ -13,6 +13,7 @@ class_name GameStatsConfig ] # defenders +enum defenders_index {WARLOCK, WYVERN, WEREWOLF, WELLSPRING} @export var defenders : Array[Dictionary] = [ { "desc": "Warlock", diff --git a/scripts/player.gd b/scripts/player.gd index d9ee0bd..f399f02 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -15,10 +15,10 @@ var dirs = { } var tower_ids = { - "tower_action_one": 0, - "tower_action_two": 1, - "tower_action_three": 2, - "tower_action_four": 3, + "tower_action_one": game_stats_config.defenders_index.WARLOCK, + "tower_action_two": game_stats_config.defenders_index.WYVERN, + "tower_action_three": game_stats_config.defenders_index.WARLOCK, + "tower_action_four": game_stats_config.defenders_index.WARLOCK, } signal curr_tile(tile_state) diff --git a/scripts/ui_panel.gd b/scripts/ui_panel.gd index 7d3cd7a..6d3ea5a 100644 --- a/scripts/ui_panel.gd +++ b/scripts/ui_panel.gd @@ -1,15 +1,14 @@ extends Panel -var tile_set : TileSet = preload("res://resources/tiles.tres") -var game_stats_config = preload("res://resources/game_stats_config.tres") @onready var util = preload("res://scripts/util.gd") -@export var object_name: String -@export var cost: String +@export var desc: String +@export var cost: int +@export var sprite_atlas : Vector2i func _ready(): - var texture = util.get_tile_texture(game_stats_config.defenders[object_name.to_lower()]["sprite_panel"]) + var texture = util.get_tile_texture(sprite_atlas) $HBoxContainer/Texture.texture = texture $HBoxContainer/Texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED - $HBoxContainer/VBoxContainer/Label.text = object_name - $HBoxContainer/VBoxContainer/Label2.text = cost + $HBoxContainer/VBoxContainer/Label.text = desc + $HBoxContainer/VBoxContainer/Label2.text = str(cost) diff --git a/scripts/warlock.gd b/scripts/warlock.gd index a3174d8..80d6e58 100644 --- a/scripts/warlock.gd +++ b/scripts/warlock.gd @@ -3,7 +3,7 @@ extends "res://scripts/base_defender.gd" var projectile: PackedScene = preload("res://scenes/warlock_projectile.tscn") func _ready(): - set_tower_stats(0) + set_tower_stats(game_stats_config.defenders_index.WARLOCK) reset_tower_range() reset_tower_sprite() diff --git a/scripts/wyvern.gd b/scripts/wyvern.gd index e9a1efe..a2822fe 100644 --- a/scripts/wyvern.gd +++ b/scripts/wyvern.gd @@ -6,7 +6,7 @@ var range_collision : CollisionShape2D var firing : bool = false func _ready(): - set_tower_stats(1) + set_tower_stats(game_stats_config.defenders_index.WYVERN) reset_tower_range() reset_tower_sprite() -- cgit v1.2.3