Compare commits

..

8 Commits

Author SHA1 Message Date
e60c3d7b72 Mainly the third map 2025-08-31 12:13:36 +02:00
d253df68b5 Wave generation redesign 2025-08-30 22:39:14 +02:00
e889d131f7 Pause game for both paths 2025-08-27 22:57:18 +02:00
4ff651ff8f Second Map, and sound effects 2025-08-27 22:31:00 +02:00
8108485091 Score saving, and loading 2025-08-27 16:49:31 +02:00
77d610eccb Game Won, Game Over and Tower fixes 2025-08-27 15:40:42 +02:00
bc6e06237c Waves and menu update 2025-08-26 11:11:50 +02:00
6c1a3d54bd Wave generation 2025-07-31 21:02:49 +02:00
35 changed files with 5880 additions and 223 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 76 KiB

BIN
Assets/Maps/map2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

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

View File

@ -0,0 +1,2 @@
[InternetShortcut]
URL=https://freesfx.co.uk/

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dryh5abntw5yh"
path="res://.godot/imported/Some hitting effect not used yet.mp3-bde98e53c2512e971d34737d2d9a2561.mp3str"
[deps]
source_file="res://Assets/Sounds/Some hitting effect not used yet.mp3"
dest_files=["res://.godot/imported/Some hitting effect not used yet.mp3-bde98e53c2512e971d34737d2d9a2561.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
Assets/Sounds/gameover.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ft0gm37euhrb"
path="res://.godot/imported/gameover.wav-37725ba7d688b1993d701585de7d22d1.sample"
[deps]
source_file="res://Assets/Sounds/gameover.wav"
dest_files=["res://.godot/imported/gameover.wav-37725ba7d688b1993d701585de7d22d1.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

BIN
Assets/Sounds/victory.mp3 Normal file

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bc5p25pl828fn"
path="res://.godot/imported/victory.mp3-166d758db2d39e51dcad9d845dc67cb2.mp3str"
[deps]
source_file="res://Assets/Sounds/victory.mp3"
dest_files=["res://.godot/imported/victory.mp3-166d758db2d39e51dcad9d845dc67cb2.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -27,6 +27,7 @@ func _input(event):
get_parent().get_node("SidePanel").Update_Coins(5)
"Wall":
get_parent().get_node("SidePanel").Update_Coins(0)
i.get_parent().WallRelease()
i.get_parent().queue_free()
queue_free()

View File

@ -44,6 +44,7 @@ animations = [{
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_tjven"]
radius = 4.66667
[node name="Rock" type="Node2D"]
script = ExtResource("1_yml18")

14
Game/Maps/Map1_setup.gd Normal file
View File

@ -0,0 +1,14 @@
extends Node
var waves = [
[
[10, 0.2, 0.8, 0.2, 0.0], #wave 1 #First path
[20, 0.4, 0.5, 0.5, 0.0], #wave 2
[30, 0.5, 0.4, 0.4, 0.1], #wave 3
[40, 0.8, 0.3, 0.2, 0.5], #wave 4
[50, 0.9, 0.1, 0.2, 0.7], #wave 5
]
]
var lives = 20
var coins = 500

View File

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

21
Game/Maps/Map2_setup.gd Normal file
View File

@ -0,0 +1,21 @@
extends Node
var waves = [
[
[10, 0.2, 0.8, 0.2, 0.0], #wave 1 #First path
[20, 0.4, 0.5, 0.5, 0.0], #wave 2
[30, 0.5, 0.4, 0.4, 0.1], #wave 3
[40, 0.8, 0.3, 0.2, 0.5], #wave 4
[50, 0.9, 0.1, 0.2, 0.7], #wave 5
],
[
[5, 0.1, 0.8, 0.2, 0.0], #wave 1 #Second Path
[10, 0.2, 0.5, 0.5, 0.0], #wave 2
[20, 0.3, 0.4, 0.4, 0.1], #wave 3
[30, 0.4, 0.3, 0.2, 0.5], #wave 4
[40, 0.7, 0.1, 0.2, 0.7], #wave 5
]
]
var lives = 20
var coins = 500

View File

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

28
Game/Maps/Map3_setup.gd Normal file
View File

@ -0,0 +1,28 @@
extends Node
var waves = [
[
[10, 0.2, 0.8, 0.2, 0.0], #wave 1 #First path TOP
[20, 0.4, 0.5, 0.5, 0.0], #wave 2
[30, 0.5, 0.4, 0.4, 0.1], #wave 3
[40, 0.8, 0.3, 0.2, 0.5], #wave 4
[50, 0.9, 0.1, 0.2, 0.7], #wave 5
],
[
[10, 0.2, 0.8, 0.2, 0.0], #wave 1 #First path TOP
[20, 0.4, 0.5, 0.5, 0.0], #wave 2
[30, 0.5, 0.4, 0.4, 0.1], #wave 3
[40, 0.8, 0.3, 0.2, 0.5], #wave 4
[50, 0.9, 0.1, 0.2, 0.7], #wave 5
],
[
[5, 0.1, 0.8, 0.2, 0.0], #wave 1 #Third Path CENTER
[10, 0.2, 0.5, 0.5, 0.0], #wave 2
[20, 0.3, 0.4, 0.4, 0.1], #wave 3
[30, 0.4, 0.3, 0.2, 0.5], #wave 4
[40, 0.7, 0.1, 0.2, 0.7], #wave 5
]
]
var lives = 20
var coins = 500

View File

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

View File

@ -1,37 +0,0 @@
extends Node2D
@onready var path_2d: Path2D = $Path2D
const FORKMAN = preload("res://Game/Mobs/forkman.tscn")
const ORK = preload("res://Game/Mobs/ork.tscn")
const COBOLD = preload("res://Game/Mobs/cobold.tscn")
const enemies = [FORKMAN, COBOLD, ORK]
func _ready() -> void:
get_node("CanvasLayer/SidePanel").Update_Lifes(20)
get_node("CanvasLayer/SidePanel").Update_Coins(2000)
func _on_timer_timeout() -> void:
spawnMonster()
func spawnMonster():
var path = PathFollow2D.new()
var monster = enemies.pick_random().instantiate()
path.add_child(monster)
path_2d.add_child(path)
func decrease_life(damage) -> void:
get_node("CanvasLayer/SidePanel").Update_Lifes(-damage)
if get_node("CanvasLayer/SidePanel").get_Lifes() <= 0:
game_over()
func game_over()-> void:
get_node("Timer").stop()
var enemy = get_node("Path2D").get_children()
for i in enemy:
i.get_children()[0].set_process(false)

View File

@ -1,7 +1,7 @@
[gd_scene load_steps=186 format=4 uid="uid://bgme05i7taycc"]
[gd_scene load_steps=187 format=4 uid="uid://dql8q1od3r32h"]
[ext_resource type="Texture2D" uid="uid://f1npbjsw71nk" path="res://Assets/Tiles/Fields/FieldsTile_01.png" id="1_fdpq6"]
[ext_resource type="Script" uid="uid://xo6vbicdva8d" path="res://Game/Maps/map_1.gd" id="1_rec5e"]
[ext_resource type="Script" uid="uid://xo6vbicdva8d" path="res://Game/Maps/map_managger.gd" id="1_rec5e"]
[ext_resource type="Texture2D" uid="uid://becu21re40tp3" path="res://Assets/Tiles/Fields/FieldsTile_02.png" id="2_cckt8"]
[ext_resource type="Texture2D" uid="uid://b1l385grogi2h" path="res://Assets/Decors/5 Grass/3.png" id="2_h3dak"]
[ext_resource type="Texture2D" uid="uid://d31pjsbv4tdeo" path="res://Assets/Decors/4 Stone/6.png" id="2_rcusf"]
@ -112,393 +112,394 @@
[ext_resource type="PackedScene" uid="uid://c5r8h61c73dwv" path="res://Game/music_player.tscn" id="68_hg5c4"]
[ext_resource type="Texture2D" uid="uid://e1fkqo6mryto" path="res://Assets/Decors/4 Stone/8.png" id="111_xx2jp"]
[ext_resource type="Texture2D" uid="uid://c5cshf3uwarcy" path="res://Assets/Decors/4 Stone/1.png" id="112_skmhh"]
[ext_resource type="Script" uid="uid://btn404qyu6kop" path="res://Game/Maps/Map1_setup.gd" id="113_skmhh"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3uxyt"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_skmhh"]
texture = ExtResource("1_fdpq6")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ac5ts"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_av5r3"]
texture = ExtResource("2_cckt8")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_xmcvs"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_h6ehk"]
texture = ExtResource("3_8lrmw")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_a2pd8"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_02mud"]
texture = ExtResource("4_yaq88")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_nwb4j"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_2uvf2"]
texture = ExtResource("5_ssl3p")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lhwtv"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u6uju"]
texture = ExtResource("6_tflt5")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kj7p7"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_yxqyo"]
texture = ExtResource("7_ohn7q")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s4jvs"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_b13dn"]
texture = ExtResource("8_ipia3")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s3a7t"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_c165t"]
texture = ExtResource("9_ow8cu")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eh11s"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_84cv3"]
texture = ExtResource("10_2dckb")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_qiq3s"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_hoc30"]
texture = ExtResource("11_4wplu")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_81x8p"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s3lkt"]
texture = ExtResource("12_2nopc")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_4g13h"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kdym8"]
texture = ExtResource("13_p1owf")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8x12i"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1bibj"]
texture = ExtResource("14_me3qq")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_k8rp5"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7u6x4"]
texture = ExtResource("15_h7lvb")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_573fp"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cfscw"]
texture = ExtResource("16_ghed6")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_mkryw"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lspvt"]
texture = ExtResource("17_pw0gq")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lcndm"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_uxcnd"]
texture = ExtResource("18_j14ke")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_d7xxl"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cnuw8"]
texture = ExtResource("19_jvi21")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_orcr0"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ijcwb"]
texture = ExtResource("20_53qrq")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_d1qns"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_nqdcn"]
texture = ExtResource("21_ioxjc")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_acnt8"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_otn76"]
texture = ExtResource("22_2ianh")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vgr6w"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ntidy"]
texture = ExtResource("23_ksacn")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ue7jo"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_b432n"]
texture = ExtResource("24_3rrmk")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u34o7"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_4c42o"]
texture = ExtResource("25_a6aff")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_5uqrq"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w0s22"]
texture = ExtResource("26_mns7m")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s6ugi"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_07528"]
texture = ExtResource("27_h1tya")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_t0dec"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gc0v3"]
texture = ExtResource("28_308h0")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_f23nd"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dbwxx"]
texture = ExtResource("29_okuyv")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1qnwr"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_05gfg"]
texture = ExtResource("30_xjhu3")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_25ldv"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3orv3"]
texture = ExtResource("31_ci51l")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_x76pl"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_sngmy"]
texture = ExtResource("32_lve10")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_wvg2q"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_qlnsv"]
texture = ExtResource("33_n2jvl")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ii2l0"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_mmc12"]
texture = ExtResource("34_nnkob")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_25rdh"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_x0gt2"]
texture = ExtResource("35_qb8dt")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_diqfe"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_300qq"]
texture = ExtResource("36_baedh")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_qetv3"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1oahp"]
texture = ExtResource("37_bgffy")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lc4k8"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cf2pd"]
texture = ExtResource("38_ur0ne")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_wv151"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_47wu0"]
texture = ExtResource("39_ux1wt")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1qbx3"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vq58x"]
texture = ExtResource("40_v7o0e")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8t8be"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_a6jmg"]
texture = ExtResource("41_xnt0c")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ib6rc"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_4xxqm"]
texture = ExtResource("42_43tg1")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_yfcbd"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_sb5uy"]
texture = ExtResource("43_4cr70")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1ephq"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_suxpk"]
texture = ExtResource("44_icvmy")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dsfmr"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_stci3"]
texture = ExtResource("45_ij4tw")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_hab6f"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ids2s"]
texture = ExtResource("46_nou8j")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_v2rlv"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_20myo"]
texture = ExtResource("47_aqoxs")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ntu6u"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_qxcco"]
texture = ExtResource("48_eljq7")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tj8wd"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kqb2s"]
texture = ExtResource("49_jj8t3")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_od2vl"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8phm7"]
texture = ExtResource("50_oqchr")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_817iq"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ytmms"]
texture = ExtResource("51_4fo4a")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dh43c"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_iacp6"]
texture = ExtResource("52_vwg17")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_jo62w"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_rl3ll"]
texture = ExtResource("53_t05lo")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_web45"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8qcyn"]
texture = ExtResource("54_xpapa")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3jvc0"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7fwm6"]
texture = ExtResource("55_585jl")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_jal07"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_57bu7"]
texture = ExtResource("56_l1eoq")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_h4ama"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tvwjy"]
texture = ExtResource("57_nibrk")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tjhxa"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3ixeb"]
texture = ExtResource("58_lbeg8")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_g1h47"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7f5ha"]
texture = ExtResource("59_wseek")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w2ii6"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_25qx3"]
texture = ExtResource("60_0inog")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ups2o"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gsnv4"]
texture = ExtResource("61_u3f65")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_pbor4"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tm3lm"]
texture = ExtResource("62_cniht")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_i20y3"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_a5nw8"]
texture = ExtResource("63_gsp4q")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kmwj4"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_72hc1"]
texture = ExtResource("64_5s0ky")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
[sub_resource type="TileSet" id="TileSet_4e145"]
tile_size = Vector2i(32, 32)
sources/129 = SubResource("TileSetAtlasSource_ac5ts")
sources/130 = SubResource("TileSetAtlasSource_xmcvs")
sources/131 = SubResource("TileSetAtlasSource_a2pd8")
sources/132 = SubResource("TileSetAtlasSource_nwb4j")
sources/133 = SubResource("TileSetAtlasSource_lhwtv")
sources/134 = SubResource("TileSetAtlasSource_kj7p7")
sources/135 = SubResource("TileSetAtlasSource_s4jvs")
sources/136 = SubResource("TileSetAtlasSource_s3a7t")
sources/137 = SubResource("TileSetAtlasSource_eh11s")
sources/138 = SubResource("TileSetAtlasSource_qiq3s")
sources/139 = SubResource("TileSetAtlasSource_81x8p")
sources/140 = SubResource("TileSetAtlasSource_4g13h")
sources/141 = SubResource("TileSetAtlasSource_8x12i")
sources/142 = SubResource("TileSetAtlasSource_k8rp5")
sources/143 = SubResource("TileSetAtlasSource_573fp")
sources/144 = SubResource("TileSetAtlasSource_mkryw")
sources/145 = SubResource("TileSetAtlasSource_lcndm")
sources/146 = SubResource("TileSetAtlasSource_d7xxl")
sources/147 = SubResource("TileSetAtlasSource_orcr0")
sources/148 = SubResource("TileSetAtlasSource_d1qns")
sources/149 = SubResource("TileSetAtlasSource_acnt8")
sources/150 = SubResource("TileSetAtlasSource_vgr6w")
sources/151 = SubResource("TileSetAtlasSource_ue7jo")
sources/152 = SubResource("TileSetAtlasSource_u34o7")
sources/153 = SubResource("TileSetAtlasSource_5uqrq")
sources/154 = SubResource("TileSetAtlasSource_s6ugi")
sources/155 = SubResource("TileSetAtlasSource_t0dec")
sources/156 = SubResource("TileSetAtlasSource_f23nd")
sources/157 = SubResource("TileSetAtlasSource_1qnwr")
sources/158 = SubResource("TileSetAtlasSource_25ldv")
sources/159 = SubResource("TileSetAtlasSource_x76pl")
sources/160 = SubResource("TileSetAtlasSource_wvg2q")
sources/161 = SubResource("TileSetAtlasSource_ii2l0")
sources/162 = SubResource("TileSetAtlasSource_25rdh")
sources/163 = SubResource("TileSetAtlasSource_diqfe")
sources/164 = SubResource("TileSetAtlasSource_qetv3")
sources/165 = SubResource("TileSetAtlasSource_lc4k8")
sources/166 = SubResource("TileSetAtlasSource_wv151")
sources/167 = SubResource("TileSetAtlasSource_1qbx3")
sources/168 = SubResource("TileSetAtlasSource_8t8be")
sources/169 = SubResource("TileSetAtlasSource_ib6rc")
sources/170 = SubResource("TileSetAtlasSource_yfcbd")
sources/171 = SubResource("TileSetAtlasSource_1ephq")
sources/172 = SubResource("TileSetAtlasSource_dsfmr")
sources/173 = SubResource("TileSetAtlasSource_hab6f")
sources/174 = SubResource("TileSetAtlasSource_v2rlv")
sources/175 = SubResource("TileSetAtlasSource_ntu6u")
sources/176 = SubResource("TileSetAtlasSource_tj8wd")
sources/177 = SubResource("TileSetAtlasSource_od2vl")
sources/178 = SubResource("TileSetAtlasSource_817iq")
sources/179 = SubResource("TileSetAtlasSource_dh43c")
sources/180 = SubResource("TileSetAtlasSource_jo62w")
sources/181 = SubResource("TileSetAtlasSource_web45")
sources/182 = SubResource("TileSetAtlasSource_3jvc0")
sources/183 = SubResource("TileSetAtlasSource_jal07")
sources/184 = SubResource("TileSetAtlasSource_h4ama")
sources/185 = SubResource("TileSetAtlasSource_tjhxa")
sources/186 = SubResource("TileSetAtlasSource_g1h47")
sources/187 = SubResource("TileSetAtlasSource_w2ii6")
sources/188 = SubResource("TileSetAtlasSource_ups2o")
sources/189 = SubResource("TileSetAtlasSource_pbor4")
sources/190 = SubResource("TileSetAtlasSource_i20y3")
sources/191 = SubResource("TileSetAtlasSource_kmwj4")
sources/128 = SubResource("TileSetAtlasSource_3uxyt")
sources/129 = SubResource("TileSetAtlasSource_av5r3")
sources/130 = SubResource("TileSetAtlasSource_h6ehk")
sources/131 = SubResource("TileSetAtlasSource_02mud")
sources/132 = SubResource("TileSetAtlasSource_2uvf2")
sources/133 = SubResource("TileSetAtlasSource_u6uju")
sources/134 = SubResource("TileSetAtlasSource_yxqyo")
sources/135 = SubResource("TileSetAtlasSource_b13dn")
sources/136 = SubResource("TileSetAtlasSource_c165t")
sources/137 = SubResource("TileSetAtlasSource_84cv3")
sources/138 = SubResource("TileSetAtlasSource_hoc30")
sources/139 = SubResource("TileSetAtlasSource_s3lkt")
sources/140 = SubResource("TileSetAtlasSource_kdym8")
sources/141 = SubResource("TileSetAtlasSource_1bibj")
sources/142 = SubResource("TileSetAtlasSource_7u6x4")
sources/143 = SubResource("TileSetAtlasSource_cfscw")
sources/144 = SubResource("TileSetAtlasSource_lspvt")
sources/145 = SubResource("TileSetAtlasSource_uxcnd")
sources/146 = SubResource("TileSetAtlasSource_cnuw8")
sources/147 = SubResource("TileSetAtlasSource_ijcwb")
sources/148 = SubResource("TileSetAtlasSource_nqdcn")
sources/149 = SubResource("TileSetAtlasSource_otn76")
sources/150 = SubResource("TileSetAtlasSource_ntidy")
sources/151 = SubResource("TileSetAtlasSource_b432n")
sources/152 = SubResource("TileSetAtlasSource_4c42o")
sources/153 = SubResource("TileSetAtlasSource_w0s22")
sources/154 = SubResource("TileSetAtlasSource_07528")
sources/155 = SubResource("TileSetAtlasSource_gc0v3")
sources/156 = SubResource("TileSetAtlasSource_dbwxx")
sources/157 = SubResource("TileSetAtlasSource_05gfg")
sources/158 = SubResource("TileSetAtlasSource_3orv3")
sources/159 = SubResource("TileSetAtlasSource_sngmy")
sources/160 = SubResource("TileSetAtlasSource_qlnsv")
sources/161 = SubResource("TileSetAtlasSource_mmc12")
sources/162 = SubResource("TileSetAtlasSource_x0gt2")
sources/163 = SubResource("TileSetAtlasSource_300qq")
sources/164 = SubResource("TileSetAtlasSource_1oahp")
sources/165 = SubResource("TileSetAtlasSource_cf2pd")
sources/166 = SubResource("TileSetAtlasSource_47wu0")
sources/167 = SubResource("TileSetAtlasSource_vq58x")
sources/168 = SubResource("TileSetAtlasSource_a6jmg")
sources/169 = SubResource("TileSetAtlasSource_4xxqm")
sources/170 = SubResource("TileSetAtlasSource_sb5uy")
sources/171 = SubResource("TileSetAtlasSource_suxpk")
sources/172 = SubResource("TileSetAtlasSource_stci3")
sources/173 = SubResource("TileSetAtlasSource_ids2s")
sources/174 = SubResource("TileSetAtlasSource_20myo")
sources/175 = SubResource("TileSetAtlasSource_qxcco")
sources/176 = SubResource("TileSetAtlasSource_kqb2s")
sources/177 = SubResource("TileSetAtlasSource_8phm7")
sources/178 = SubResource("TileSetAtlasSource_ytmms")
sources/179 = SubResource("TileSetAtlasSource_iacp6")
sources/180 = SubResource("TileSetAtlasSource_rl3ll")
sources/181 = SubResource("TileSetAtlasSource_8qcyn")
sources/182 = SubResource("TileSetAtlasSource_7fwm6")
sources/183 = SubResource("TileSetAtlasSource_57bu7")
sources/184 = SubResource("TileSetAtlasSource_tvwjy")
sources/185 = SubResource("TileSetAtlasSource_3ixeb")
sources/186 = SubResource("TileSetAtlasSource_7f5ha")
sources/187 = SubResource("TileSetAtlasSource_25qx3")
sources/188 = SubResource("TileSetAtlasSource_gsnv4")
sources/189 = SubResource("TileSetAtlasSource_tm3lm")
sources/190 = SubResource("TileSetAtlasSource_a5nw8")
sources/191 = SubResource("TileSetAtlasSource_72hc1")
sources/128 = SubResource("TileSetAtlasSource_skmhh")
[sub_resource type="Curve2D" id="Curve2D_6abe5"]
_data = {
@ -1549,7 +1550,7 @@ texture = ExtResource("65_ef8wx")
curve = SubResource("Curve2D_6abe5")
[node name="Timer" type="Timer" parent="."]
wait_time = 1.5
wait_time = 0.4
autostart = true
[node name="TrapArea" type="Area2D" parent="."]
@ -1598,4 +1599,7 @@ size_flags_horizontal = 6
[node name="MusicPlayer" parent="." instance=ExtResource("68_hg5c4")]
[node name="Setup" type="Node" parent="."]
script = ExtResource("113_skmhh")
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]

File diff suppressed because one or more lines are too long

1640
Game/Maps/map_2.tscn Normal file

File diff suppressed because one or more lines are too long

1908
Game/Maps/map_3.tscn Normal file

File diff suppressed because one or more lines are too long

84
Game/Maps/map_managger.gd Normal file
View File

@ -0,0 +1,84 @@
extends Node2D
var paths = []
var waves = []
const FORKMAN = preload("res://Game/Mobs/forkman.tscn")
const ORK = preload("res://Game/Mobs/ork.tscn")
const COBOLD = preload("res://Game/Mobs/cobold.tscn")
const enemies = [FORKMAN, COBOLD, ORK]
var pause = 40
func _ready() -> void:
get_node("CanvasLayer/SidePanel").set_Lifes(get_node("Setup").lives)
get_node("CanvasLayer/SidePanel").Update_Coins(get_node("Setup").coins)
for i in self.get_children():
if i.name.contains("Path2D"):
paths.append(i)
waves = get_node("Setup").waves
print(waves)
print(paths)
#the meaning of the columns inside my wave generation matris:
# Number of enemies need to be spawned, chance of spawn an enemy, chance of forkman, chance of gobline, chance of ork
var currentwave = 0
var endwave = false
func _on_timer_timeout() -> void:
if pause <= 0:
if endwave:
var checkend = false
for i in paths:
if i.get_children():
break
checkend = true
currentwave += 1
if checkend:
endwave = false
get_node("CanvasLayer/SidePanel").Update_waves(currentwave + 1) #updating waves
if currentwave >= waves[0].size():
get_node("CanvasLayer/SidePanel").Update_waves(currentwave) #updating waves
get_node("Timer").stop()
get_node("CanvasLayer/SidePanel").GameWon()
else:
spawnMonster()
else:
pause -= 1
func spawnMonster():
for ROUTE in range(waves.size()):
var w = waves[ROUTE][currentwave]
if w[0] > 0:
if randf() < w[1]:
w[0] -= 1
for i in waves:
if i[currentwave][0] > 0:
break
endwave = true
var chosen = randf()
var sum = 0.0
for i in range(2,5):
sum += w[i]
if chosen < sum:
var monster = enemies[i-2].instantiate()
var path = PathFollow2D.new()
path.add_child(monster)
paths[ROUTE].add_child(path)
break
func decrease_life(damage) -> void:
get_node("CanvasLayer/SidePanel").Update_Lifes(-damage)
if get_node("CanvasLayer/SidePanel").get_Lifes() <= 0:
game_over()
func game_over()-> void:
get_node("Timer").stop()
var enemy = get_node("Path2D").get_children()
for i in enemy:
i.get_children()[0].set_process(false)

View File

@ -1,12 +1,51 @@
extends Control
var save_path = "user://map_scores.save"
var map_scores = {}
func _on_button_pressed() -> void:
get_tree().change_scene_to_file("res://Game/Menu/main.tscn")
pass # Replace with function body.
func _on_button_map1_pressed() -> void:
func LoadMap1() -> void:
get_tree().change_scene_to_file("res://Game/Maps/map_1.tscn")
pass # Replace with function body.
func LoadMap2() -> void:
get_tree().change_scene_to_file("res://Game/Maps/map_2.tscn")
pass # Replace with function body.
func LoadMap3() -> void:
get_tree().change_scene_to_file("res://Game/Maps/map_3.tscn")
pass # Replace with function body.
func _ready() -> void:
loadData()
get_node("VBoxContainer/HBoxContainer/first/Button").connect("button_up", LoadMap1)
get_node("VBoxContainer/HBoxContainer/second/Button").connect("button_up", LoadMap2)
get_node("VBoxContainer/HBoxContainer/third/Button").connect("button_up", LoadMap3)
func loadData() -> void:
if FileAccess.file_exists(save_path):
var file = FileAccess.open(save_path, FileAccess.READ)
if file:
map_scores = file.get_var()
file.close()
get_node("VBoxContainer/HBoxContainer/first/Label2").text = "Haven't finished yet" if map_scores["Map1"] == 0 else "Scored: " + str(map_scores["Map1"]) + " out of 10"
get_node("VBoxContainer/HBoxContainer/second/Label2").text = "Haven't finished yet" if map_scores["Map2"] == 0 else "Scored: " + str(map_scores["Map2"]) + " out of 10"
get_node("VBoxContainer/HBoxContainer/third/Label2").text = "Haven't finished yet" if map_scores["Map3"] == 0 else "Scored: " + str(map_scores["Map3"]) + " out of 10"
else:
map_scores["Map1"] = 0
map_scores["Map2"] = 0
map_scores["Map3"] = 0
save_scores()
loadData()
func save_scores():
var file = FileAccess.open(save_path, FileAccess.WRITE)
if file:
file.store_var(map_scores)
file.close()

View File

@ -1,9 +1,10 @@
[gd_scene load_steps=14 format=3 uid="uid://cxet2lvdco2ak"]
[gd_scene load_steps=19 format=3 uid="uid://cxet2lvdco2ak"]
[ext_resource type="Script" uid="uid://duhi4pfoa45j1" path="res://Game/Menu/mapselector.gd" id="1_cnef1"]
[ext_resource type="Texture2D" uid="uid://bgy114b67j3kg" path="res://Assets/Others/8-bit-graphics-pixels-scene-with-castle.jpg" id="1_jteil"]
[ext_resource type="FontFile" uid="uid://bu44ne346ymoe" path="res://Assets/Others/Canterbury.ttf" id="2_2uj2s"]
[ext_resource type="Texture2D" uid="uid://cheweipqa125e" path="res://Assets/Maps/map1.png" id="3_2uj2s"]
[ext_resource type="Texture2D" uid="uid://dffphf4kn5sk2" path="res://Assets/Maps/map2.png" id="5_mjmwi"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_cnef1"]
texture = ExtResource("1_jteil")
@ -20,6 +21,18 @@ texture = ExtResource("3_2uj2s")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_cg1t8"]
texture = ExtResource("3_2uj2s")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_losb8"]
texture = ExtResource("5_mjmwi")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_rjq3w"]
texture = ExtResource("5_mjmwi")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_uvrvw"]
texture = ExtResource("5_mjmwi")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_44oc2"]
texture = ExtResource("5_mjmwi")
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cnef1"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mjmwi"]
@ -127,6 +140,50 @@ layout_mode = 2
size_flags_horizontal = 4
text = "Score: 10 / "
[node name="second" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/second"]
layout_mode = 2
size_flags_horizontal = 4
text = "2nd Level"
[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer/second"]
custom_minimum_size = Vector2(120, 80)
layout_mode = 2
theme_override_styles/focus = SubResource("StyleBoxTexture_losb8")
theme_override_styles/hover = SubResource("StyleBoxTexture_rjq3w")
theme_override_styles/pressed = SubResource("StyleBoxTexture_uvrvw")
theme_override_styles/normal = SubResource("StyleBoxTexture_44oc2")
[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/second"]
layout_mode = 2
size_flags_horizontal = 4
text = "Score: 10 / "
[node name="third" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/third"]
layout_mode = 2
size_flags_horizontal = 4
text = "3rd Level"
[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer/third"]
custom_minimum_size = Vector2(120, 80)
layout_mode = 2
theme_override_styles/focus = SubResource("StyleBoxTexture_losb8")
theme_override_styles/hover = SubResource("StyleBoxTexture_rjq3w")
theme_override_styles/pressed = SubResource("StyleBoxTexture_uvrvw")
theme_override_styles/normal = SubResource("StyleBoxTexture_44oc2")
[node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/third"]
layout_mode = 2
size_flags_horizontal = 4
text = "Score: 10 / "
[node name="HBoxContainer" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 12

View File

@ -57,21 +57,21 @@ func set_character_data():
health = 100
shield = 100
damage = 2
value = 2
value = 5
"Ork":
self.name = "Ork-" + str(randi())
speed = 80
health = 150
shield = 200
damage = 5
value = 3
value = 10
"Cobold":
self.name = "Cobold-" + str(randi())
speed = 200
health = 50
shield = 0
damage = 1
value = 1
value = 2
adjust_speed_of_animation() #adjust animation speed based on the character speed
current_health = health

View File

@ -83,6 +83,7 @@ collision_mask = 2
shape = SubResource("CircleShape2D_be2t6")
[node name="Timer" type="Timer" parent="."]
wait_time = 0.5
autostart = true
[node name="Area2D" type="Area2D" parent="."]

View File

@ -20,6 +20,7 @@ var lifteramount = 0
func _ready() -> void:
follower = true
get_node("CharacterBody2D/Area2D").body_entered.connect(choose_target)
get_node("CharacterBody2D/Area2D").body_exited.connect(choose_target)
get_node("Timer").timeout.connect(shoot)
set_process_input(true)
set_properties()
@ -70,10 +71,12 @@ func set_properties() -> void:
get_node("Timer").wait_time = 0.5
bulletSpeed = 600
hitpoint = 25
get_node("CharacterBody2D/Area2D/CollisionShape2D").shape.radius = 150
if self.name.contains("WizardTower"):
get_node("Timer").wait_time = 1.0
bulletSpeed = 450
hitpoint = 15
get_node("CharacterBody2D/Area2D/CollisionShape2D").shape.radius = 150
if self.name.contains("MortarTower"): #??? not sure if necessary yet
get_node("Timer").wait_time = 2
hitpoint = 80
@ -90,16 +93,17 @@ func _input(event):
func choose_target(body : Node2D) -> void:
if not follower:
var surroinding_enemies = get_node("CharacterBody2D/Area2D").get_overlapping_bodies()
target = surroinding_enemies[0]
if self.name.contains("ArcherTower") or self.name.contains("MortarTower"):
for i in surroinding_enemies:
if i.get_parent().get_progress() > target.get_parent().get_progress():
target = i
if self.name.contains("WizardTower"):
for i in surroinding_enemies:
if i.get_parent().get_progress() < target.get_parent().get_progress():
target = i
pass
target = null
if surroinding_enemies.size() > 0:
target = surroinding_enemies[0]
if self.name.contains("ArcherTower") or self.name.contains("MortarTower"):
for i in surroinding_enemies:
if i.get_parent().get_progress() > target.get_parent().get_progress():
target = i
if self.name.contains("WizardTower"):
for i in surroinding_enemies:
if i.get_parent().get_progress() < target.get_parent().get_progress():
target = i
func shoot() -> void:
if target != null:

View File

@ -16,9 +16,10 @@ func _ready() -> void:
if name.contains("Wall"):
get_node("CharacterBody2D/ProgressBar").hide()
#loads the settings and sounds
var config = ConfigFile.new()
var err = config.load("user://settings.cfg")
if err == OK:
var master_volume_raw = config.get_value("audio", "master_volume", 100.0)
master_volume = clamp(master_volume_raw / 100.0, 0.0, 1.0)
@ -94,3 +95,9 @@ func _on_timer_timeout() -> void:
if i.get_parent().name.contains(j):
i.get_parent().set_process(true)
queue_free()
func WallRelease() -> void:
for i in get_node("CharacterBody2D/Area2D").get_overlapping_bodies():
for j in NAMES:
if i.get_parent().name.contains(j):
i.get_parent().set_process(true)

View File

@ -1,7 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://drjcsrjs6uobn"]
[ext_resource type="PackedScene" uid="uid://bgme05i7taycc" path="res://Game/Maps/map_1.tscn" id="1_xb63x"]
[node name="Main" type="Node2D"]
[node name="Map1" parent="." instance=ExtResource("1_xb63x")]

View File

@ -26,13 +26,26 @@ const MORTAR_TOWER = preload("res://Game/Towers/mortar_tower.tscn")
const DELETER = preload("res://Game/Accesories/deleter.tscn")
var lives = 0
var originallives = 0
var coins = 0
var save_path = "user://map_scores.save"
var map_scores = {}
var SFX_loudness = 1.0
var master_volume = 1.0
var music_volume_raw = 1.0
func _ready() -> void:
get_node("pausemenu").hide()
get_node("pausemenu").z_index = 5
get_node("GameOver").hide()
get_node("GameOver").z_index = 5
get_node("GameWon").hide()
get_node("GameWon").z_index = 5
get_node("Panel").show()
get_node("Panel").z_index = 5
get_node("WaveCounter").show()
get_node("WaveCounter").z_index = 5
stickspawner.connect("button_up", Spawn_Stick)
stickspawner.tooltip_text = "Cost: 10\nReturn: 5"
@ -54,19 +67,45 @@ func _ready() -> void:
delete_tower_button.connect("button_up", Spawn_Deleter)
var file = FileAccess.open(save_path, FileAccess.READ)
if file:
map_scores = file.get_var()
file.close()
var config = ConfigFile.new()
var err = config.load("user://settings.cfg")
if err == OK:
var master_volume_raw = config.get_value("audio", "master_volume", 100.0)
master_volume = clamp(master_volume_raw / 100.0, 0.0, 1.0)
var sfx_volume_raw = config.get_value("audio", "sfx_volume", 100.0)
SFX_loudness = clamp(sfx_volume_raw / 100.0, 0.0, 1.0)
var music_volume_raw = config.get_value("audio", "music_volume", 100.0)
SFX_loudness = clamp(sfx_volume_raw / 100.0, 0.0, 1.0)
self.get_node("HealthLostAudio").volume_db = linear_to_db(master_volume * SFX_loudness)
self.get_node("GameOverAudio").volume_db = linear_to_db(master_volume * music_volume_raw)
self.get_node("VictoryAudio").volume_db = linear_to_db(master_volume * music_volume_raw)
func _process(delta : float)-> void:
coinlabel.text = "Coins: " + str(coins)
livelabel.text = "Lives: " + str(lives)
if lives <= 0:
GameOver()
func set_Lifes(amount) -> void:
lives = amount
originallives = amount
func get_Lifes():
return lives
func Update_Lifes(amount) -> void:
lives += amount
if amount < 0:
get_node("HealthLostAudio").play()
func Update_waves(wavecount) -> void:
get_node("WaveCounter/HBoxContainer/Label").text = "Current wave: "+ str(wavecount)
func Update_Coins(amount) -> void:
coins += amount
@ -122,8 +161,10 @@ func _unhandled_input(event):
if event.pressed and event.keycode == KEY_ESCAPE:
get_node("pausemenu").show()
get_node("Panel").hide()
for i in get_node("../../Path2D").get_children():
i.get_children()[0].set_process(false)
for i in get_parent().get_parent().get_children():
if i.name.contains("Path2D"):
for ii in i.get_children():
ii.get_children()[0].set_process(false)
for i in get_parent().get_children():
if i.name != "sidepanel":
@ -136,12 +177,41 @@ func _unhandled_input(event):
get_parent().get_parent().get_node("Timer").stop()
func GameOver() -> void:
get_node("Panel").hide()
get_node("GameOver").show()
for i in get_parent().get_parent().get_children():
if i.name.contains("Path2D"):
for ii in i.get_children():
ii.get_children()[0].set_process(false)
for i in get_parent().get_children():
if i.name != "sidepanel":
i.set_process(false)
var timer_node = i.get_node("Timer") if i.has_node("Timer") else null
if timer_node:
timer_node.stop()
get_parent().get_parent().get_node("MusicPlayer").PauseAudio()
get_node("GameOverAudio").play()
func GameWon() -> void:
get_node("Panel").hide()
get_node("GameWon").show()
map_scores[get_parent().get_parent().name] = int((lives / originallives) *10)
var file = FileAccess.open(save_path, FileAccess.WRITE)
file.store_var(map_scores)
file.close()
get_parent().get_parent().get_node("MusicPlayer").PauseAudio()
get_node("VictoryAudio").play()
func _on_button_3_pressed() -> void:
get_node("pausemenu").hide()
get_node("Panel").show()
for i in get_node("../../Path2D").get_children():
i.get_children()[0].set_process(true)
for i in get_parent().get_parent().get_children():
if i.name.contains("Path2D"):
for ii in i.get_children():
ii.get_children()[0].set_process(true)
for i in get_parent().get_children():
if i.name != "sidepanel":

View File

@ -1,9 +1,10 @@
[gd_scene load_steps=17 format=3 uid="uid://ddn64i6logtw0"]
[gd_scene load_steps=19 format=3 uid="uid://ddn64i6logtw0"]
[ext_resource type="Script" uid="uid://c6sh5em844tx2" path="res://Game/sidepanel.gd" id="1_klyhg"]
[ext_resource type="FontFile" uid="uid://bu44ne346ymoe" path="res://Assets/Others/Canterbury.ttf" id="2_4l4p2"]
[sub_resource type="Theme" id="Theme_4l4p2"]
[ext_resource type="AudioStream" uid="uid://ca6fgsgi1nqx1" path="res://Assets/Sounds/allert.mp3" id="3_s7jra"]
[ext_resource type="AudioStream" uid="uid://ft0gm37euhrb" path="res://Assets/Sounds/gameover.wav" id="4_f5es8"]
[ext_resource type="AudioStream" uid="uid://bc5p25pl828fn" path="res://Assets/Sounds/victory.mp3" id="5_dgw1d"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4l4p2"]
bg_color = Color(1, 1, 1, 0.447059)
@ -133,7 +134,6 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = SubResource("Theme_4l4p2")
theme_override_constants/separation = 60
alignment = 1
@ -322,7 +322,158 @@ theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d")
theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw")
text = "Exit"
[node name="WaveCounter" type="Panel" parent="."]
custom_minimum_size = Vector2(160, 0)
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -20.0
offset_right = 20.0
offset_bottom = 40.0
grow_horizontal = 2
[node name="HBoxContainer" type="HBoxContainer" parent="WaveCounter"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -75.0
offset_top = -20.0
offset_right = 75.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="Label" type="Label" parent="WaveCounter/HBoxContainer"]
layout_mode = 2
text = "Current wave: 1"
[node name="GameOver" type="PanelContainer" parent="."]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
offset_left = 409.0
offset_top = 188.5
offset_right = 742.0
offset_bottom = 459.5
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_styles/panel = SubResource("StyleBoxFlat_s7jra")
[node name="VBoxContainer" type="VBoxContainer" parent="GameOver"]
layout_mode = 2
theme_override_constants/separation = 30
alignment = 1
[node name="Label2" type="Label" parent="GameOver/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(1, 0, 0, 1)
theme_override_fonts/font = ExtResource("2_4l4p2")
theme_override_font_sizes/font_size = 64
text = "Game Over"
horizontal_alignment = 1
[node name="Button2" type="Button" parent="GameOver/VBoxContainer"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
size_flags_horizontal = 4
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 30
theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2")
theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8")
theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d")
theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw")
text = "Restart"
[node name="Button" type="Button" parent="GameOver/VBoxContainer"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
size_flags_horizontal = 4
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 30
theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2")
theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8")
theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d")
theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw")
text = "Exit"
[node name="GameWon" type="PanelContainer" parent="."]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
offset_left = 438.0
offset_top = 224.5
offset_right = 712.0
offset_bottom = 423.5
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_styles/panel = SubResource("StyleBoxFlat_s7jra")
[node name="VBoxContainer" type="VBoxContainer" parent="GameWon"]
layout_mode = 2
theme_override_constants/separation = 30
alignment = 1
[node name="Label2" type="Label" parent="GameWon/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 0, 1)
theme_override_fonts/font = ExtResource("2_4l4p2")
theme_override_font_sizes/font_size = 64
text = "Congratulations!"
horizontal_alignment = 1
[node name="Label3" type="Label" parent="GameWon/VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_4l4p2")
theme_override_font_sizes/font_size = 24
text = "You've protected the citadell!"
horizontal_alignment = 1
[node name="Button2" type="Button" parent="GameWon/VBoxContainer"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
size_flags_horizontal = 4
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 30
theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2")
theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8")
theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d")
theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw")
text = "Restart"
[node name="Button" type="Button" parent="GameWon/VBoxContainer"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
size_flags_horizontal = 4
theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_font_sizes/font_size = 30
theme_override_styles/focus = SubResource("StyleBoxEmpty_4l4p2")
theme_override_styles/hover = SubResource("StyleBoxFlat_f5es8")
theme_override_styles/pressed = SubResource("StyleBoxFlat_dgw1d")
theme_override_styles/normal = SubResource("StyleBoxFlat_nctfw")
text = "Continue"
[node name="HealthLostAudio" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("3_s7jra")
[node name="GameOverAudio" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("4_f5es8")
[node name="VictoryAudio" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("5_dgw1d")
[connection signal="pressed" from="Panel/HBoxContainer4/HBoxContainer4/Button3" to="." method="_on_button_3_pressed"]
[connection signal="pressed" from="pausemenu/VBoxContainer/Button3" to="." method="_on_button_3_pressed"]
[connection signal="pressed" from="pausemenu/VBoxContainer/Button2" to="." method="_on_button_2_pressed"]
[connection signal="pressed" from="pausemenu/VBoxContainer/Button" to="." method="_on_button_pressed"]
[connection signal="pressed" from="GameOver/VBoxContainer/Button2" to="." method="_on_button_2_pressed"]
[connection signal="pressed" from="GameOver/VBoxContainer/Button" to="." method="_on_button_pressed"]
[connection signal="pressed" from="GameWon/VBoxContainer/Button2" to="." method="_on_button_2_pressed"]
[connection signal="pressed" from="GameWon/VBoxContainer/Button" to="." method="_on_button_pressed"]

View File

@ -27,3 +27,7 @@ func linear2db(linear: float) -> float:
if linear <= 0.0:
return -80.0 # mute
return 20.0 * (log(linear) / log(10.0))
func PauseAudio() ->void:
get_node("AudioStreamPlayer2D").stop()
get_node("AudioStreamPlayer2D2").stop()