From 08479e83c157a2efe8f4adaf55537ec78ffe53c1 Mon Sep 17 00:00:00 2001 From: Kilokem Date: Tue, 15 Apr 2025 20:32:00 +0200 Subject: [PATCH] Wizard Tower and special effects --- Assets/Bullets/magic.png | Bin 0 -> 982 bytes .../8.png.import => Bullets/magic.png.import} | 8 +- Assets/Towers/8.png | Bin 2387 -> 0 bytes Assets/Towers/S_Fly.png | Bin 0 -> 2250 bytes Assets/Towers/S_Fly.png.import | 34 +++++++ Assets/Towers/U_Fly.png | Bin 0 -> 2034 bytes Assets/Towers/U_Fly.png.import | 34 +++++++ Game/Bullets/arrow.gd | 4 - Game/Bullets/arrow.gd.uid | 1 - Game/Bullets/bullet.gd | 20 +++- Game/Bullets/magic.tscn | 68 +++++++++++++ Game/Mobs/enemy.gd | 9 ++ Game/Towers/towers.gd | 32 +++++-- Game/Towers/wizard_tower.tscn | 89 ++++++++++++++++++ Game/sidepanel.gd | 12 ++- project.godot | 11 +++ 16 files changed, 302 insertions(+), 20 deletions(-) create mode 100644 Assets/Bullets/magic.png rename Assets/{Towers/8.png.import => Bullets/magic.png.import} (69%) delete mode 100644 Assets/Towers/8.png create mode 100644 Assets/Towers/S_Fly.png create mode 100644 Assets/Towers/S_Fly.png.import create mode 100644 Assets/Towers/U_Fly.png create mode 100644 Assets/Towers/U_Fly.png.import delete mode 100644 Game/Bullets/arrow.gd delete mode 100644 Game/Bullets/arrow.gd.uid create mode 100644 Game/Bullets/magic.tscn create mode 100644 Game/Towers/wizard_tower.tscn diff --git a/Assets/Bullets/magic.png b/Assets/Bullets/magic.png new file mode 100644 index 0000000000000000000000000000000000000000..48f44fe9b635fe9ce635af4559d15214ee1aef36 GIT binary patch literal 982 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 diff --git a/Assets/Towers/S_Fly.png b/Assets/Towers/S_Fly.png new file mode 100644 index 0000000000000000000000000000000000000000..6cbac5d43d80a78fb6bdc466f0b3932dfcd12736 GIT binary patch literal 2250 zcmai03se(V8Xgh|3Q~@i0t-hOgNq;yc@P3bA^{Q}YLJEOf!d=GlEGvlnKTI!DDu<_ zu3c!cXp0DnJ-8~O-Bv^@0px%@gKj+vN>LEP@_rQwgv?G5SkIoaJ2U6bz5jgQ_y70) z|Gj5&!$N~B%UHrL`o=^pAyga7T|sNfj&w)DjCTcR@vQ!oUDn27w-K?gT!GOa^H*H!{_OMk9X=Qb=S9k%T@p0+~wp zpwTIw;Od1(y~zY|^l(<-sxNfJzzY=$DV<16N=kA|a(9De$B1NaZ*PMJg+f3P1bMPV z!BY|>a>q3V79{7(L{fzamVgFDUM!rbVBpb6-%UX*U6+-}SC}Q10rakbEHTjfRp4dD|ilv9wLz|coIGo!eZc21vimMKzFBj2eQ$d6^|b8Cv7=-O1$Yur%B{qd~>HskGQ`r-!?97 z?#Hq2Lyv`4+xCC@FPG~~e{*MCPHe`z=8Vx5Tku`8X2RvHn~bi!2mNn5U69e3+cfS) zxs8Z)a{*r!6r`T@J3UageCSQNfD>42t+mbm;9=gS0iC+2@~W+4Fj9~E@==`japFZJ zd6u)O>ur@+QE2waUSpcDv8vT_KFH@5b20UgnUl0pY6ys{$Iuu1NPXRX=B@fM?f!-{ zE-@Jm(+?Na`l_b9c}E*Bd9BMcrrABCm~2cfT!^ljFCd0}ZN0TlL1mU;@ zx1Bu$rc0T6O{eEhrsf~6(rU$#^3!qOQJi1B7+n28U|u1f|Ld&jorWk>>PXschvD>z z)CkPn;Ms4@xT^h)c2-m4GbfC$A=R_JY1bFem{5ml*!ZwU&$i~Jl9of8ySn#UY40x@ zU$Vc}mZy9Ubfrc!cjzkB>hCId-Mrw-cEs+g%Lvs|TUX#_`Ko6*iX%(@)5oy8wI_|< zEaeTsuKBj5qg*CnbeNVgH0q>{lx9596xo%ICVDNlvG-I>9l#1}=f z(utG@#5U7yZ=1*Oq)>g^uGO6@eZ>`dW%#H5{W!m#=Lbs7GDk6%t$}cSDmSTRkp0wRGJP~Hwl8S9UQ@PA9H^|_ zR)K%~aku5*e!5q!-x8YFQY5YRl@9pj);xeQgB2#x=y{_S;HvUB8< zy3|L`*K9&29feI^&o7~CCs<;IPZGjLSK(&?Ez3}*f4{Yy-k+J3tuLnoZm)sd+|9q9`mn7_2kjK=y44x0lBwNBGjdfjEDu#==|u|=5C2WDQ?RM>~jVKTI8z5R_5t*<_|eoWgszd5K3$3GJ} z>Zzal!P>2q_!?`oWg`7e(XQI7?59u3PChQb=pXl(?&}0i9DpxWbIlFQeVyk8C0}3| z!Ifsh&vnlhOQw9kc4gWNi}QBe_DxH4uDuG|E!f<7sO1nd-kNqCnnAG02>XROsn2_R sW5=c6KUDtT`GX!#u^HEFMoR!Ju$5`mWS1-X)$n%_!VYEK@{h^-Hzzp38UO$Q literal 0 HcmV?d00001 diff --git a/Assets/Towers/S_Fly.png.import b/Assets/Towers/S_Fly.png.import new file mode 100644 index 0000000..7dede68 --- /dev/null +++ b/Assets/Towers/S_Fly.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dngrpwmj4oedg" +path="res://.godot/imported/S_Fly.png-91e9e805a8a4e69a2fa2f6c6e35d0613.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Towers/S_Fly.png" +dest_files=["res://.godot/imported/S_Fly.png-91e9e805a8a4e69a2fa2f6c6e35d0613.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/Towers/U_Fly.png b/Assets/Towers/U_Fly.png new file mode 100644 index 0000000000000000000000000000000000000000..6d38efef32c4fb1162f6a3243976b348b15b1f04 GIT binary patch literal 2034 zcmbtUX;c$e6rO-lYCv#7E3`UBJx8nANswS9fdHa{DU0AzLr4aQkeQH-Bq&P&1zc-A z))fqBwdHUW<$yu02C*tusaR3bs==j-f@QN36f=E6P=A#E>6|$;@80>o@7{OseX~Il z7VI+8V~2})EzZ9i?M!b*jJ z8qE!5hN=UQMCJT78YE&(SfqSSlH5l@^_vIJ)$@UX3c+QtUX_e$`Fa7hUzZQob~l3x z_e1a`0rh=SF`*JT0Mj5am(HQdnJgB}L*))KlY12?#rl+CWse=k) zL@U=Q)wmKvVY{L%4qJ^2s36n#TTrP#$fDYTGJ%3I^fEPrMQ7T#Gzbh0{cosB^#QHL z!;z2q{;RMyGEI#z!VxXDS|bOIi=S!_rRE1{5E+hXA~7s^u!@pI49B#Im>Ld<;K4JZ zm8b&KX=nE1Lqqu?s1}!@awJ47paKQDQmNpx1DPx@7RQU}?ayJc0)s>>rr4jy3F7g% zEY2Ke&>&Zg$ycio6d&X&K61H3a_ys_QiI51M59ba6hRtH1@~{6uN*oT_K8UO+YE@Vcz9R@Fh9AV#(TR< zAZXZ_5V0syf48mhI{Jd?CiXtDaQOl&aqUbPEG+Z9oRV5IC1H}={Fda@)GrDvHx`Xv zHs!p7*x*L;ALcX~UgzXS6&65K9M%muz?T7slUqMx016NT&}mNFkcW3DKTdyb&M~*V zP5reZV`AeN>B}satfhw8A-;*%iw|2@5wol(3bH&_FGX^yZXFQS(~gxI%tTao)rI^l z)w#Z+H}?(ZfPK&Wniw5s^z7fHH*dD{n%f)JcHXq@>N=t!D{M2BBbr|}Ebk=SZrAJX zOlnD}A)5Ylp76cP{IRE^&fXIVrX;*YQ@ScYw~{37Czx}jlZqd<6{3v8XwA(M z(?iO;@6PIe&*vIKrL{;B((t@!9q|{U58k-9oQGHzy(jw2^L8*TCoY{TD zGQ82T$wS(fMKgN|9f_6jQ&*$$c>9-*uS_IQ--d~mv`nXEMA@^`(}b6j*5jK+4Z`H# zi}S2;M5`4sYfC5=OQ$vEChOqiht0PP>ocE}IalP3kX&rfBOmUzym+=8H}QWtF5Elv z2j=)Xxwo-TtQ6AfCe%b&`9yTbCWmp|hJb>eD~&5)XL9;qRblCSM4dhqVLhnF1qMap zcdu?ik3(r|og8;N`q?GZokQ+GLnn4zX7F>?x1X~>6&CRKUh_S z)7&0dipPUi-tJiF(AdKvr=!}d-5Ji|48!ftqCOM1n?{jTkK0X;FuKFm#a&rs^OIR= zxpVd(Y$wwf*1n{2y^3fKGdwa)|XPobj5^8Zfk(A*Jx*nG)Gn|U|Y#L!s z+9|DE{Nhn=@VoP_hCk>jhe@Ug-1MAut#@*v^WLIzx#1MyKId)XSrXUMm~JBJ%A1X6 zY$aDU+32#k`>$?sg)a;!n2aoUGgFvSo9a!zlyzCvRLlcAZtY!fsnC~PeCpBUD1AwI zWIq4;NzsaZE^RpgPqyrgD#-P3`cAZ^1C*@$%D1({Ut8H{J2O3E%Z69gf|_5EcHvt^ zV~Mt-K`yKE!1Qg$Hf>s0>|+CFJ}|dpQS*wfoo4++vz~8A0r{3>=W@cw|+W$G3 hVnf5&SBniKsA8Tl_>g4ZO7P==LIT6YNBv`S{sAg*Lm&VE literal 0 HcmV?d00001 diff --git a/Assets/Towers/U_Fly.png.import b/Assets/Towers/U_Fly.png.import new file mode 100644 index 0000000..52aac8e --- /dev/null +++ b/Assets/Towers/U_Fly.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crbnijj8hj6ds" +path="res://.godot/imported/U_Fly.png-7ba7e7f81a5a0f2240e172d15b4592ae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Towers/U_Fly.png" +dest_files=["res://.godot/imported/U_Fly.png-7ba7e7f81a5a0f2240e172d15b4592ae.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/Game/Bullets/arrow.gd b/Game/Bullets/arrow.gd deleted file mode 100644 index f8bb3f0..0000000 --- a/Game/Bullets/arrow.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends Node2D - -func _ready() -> void: - print("ready") diff --git a/Game/Bullets/arrow.gd.uid b/Game/Bullets/arrow.gd.uid deleted file mode 100644 index 1cc1a71..0000000 --- a/Game/Bullets/arrow.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b3dcdgqfb5nf3 diff --git a/Game/Bullets/bullet.gd b/Game/Bullets/bullet.gd index daccc9b..ce259dc 100644 --- a/Game/Bullets/bullet.gd +++ b/Game/Bullets/bullet.gd @@ -3,6 +3,7 @@ extends Node2D var target var speed var hitpoint +var distancetaken = 0 func set_targe(_target : Node2D) -> void: target = _target @@ -19,17 +20,32 @@ func _process(delta: float) -> void: var direction = (target.get_parent().get_parent().get_position() - position).normalized() # Rotate the bullet to face the target - rotation = direction.angle() + deg_to_rad(90) + if name.contains("Arrow"): + rotation = direction.angle() + deg_to_rad(90) # Move the bullet towards the target position += direction * speed * delta + distancetaken += (direction * speed * delta).length() if position.distance_to(target.get_parent().get_parent().position) <= 5: target_reached() + if distancetaken > 250: + queue_free() else: queue_free() - + func target_reached() -> void: + var chance = 0 + if name.contains("Arrow"): #special effects here! + if randf() < 0.1: + target.get_parent().set_speed(target.get_parent().get_speed() / 2) + pass + if name.contains("Magic"): + if randf() < 0.5: + target.get_parent().set_progress(max(target.get_parent().get_progress() - 60, 0)) + + + target.get_parent().enemy_hurt(hitpoint) queue_free() diff --git a/Game/Bullets/magic.tscn b/Game/Bullets/magic.tscn new file mode 100644 index 0000000..e798786 --- /dev/null +++ b/Game/Bullets/magic.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=7 format=3 uid="uid://caynrq7jnjlnx"] + +[ext_resource type="Texture2D" uid="uid://mmrsjrjxv168" path="res://Assets/Bullets/magic.png" id="1_jjep1"] +[ext_resource type="Script" uid="uid://dqvdgdobuo2rf" path="res://Game/Bullets/bullet.gd" id="1_lj5pp"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_lj5pp"] +size = Vector2(18, 16) + +[sub_resource type="Animation" id="Animation_lj5pp"] +resource_name = "rotation" +length = 0.5 +markers = [{ +"color": Color(1, 1, 1, 1), +"name": &"new_marker", +"time": 0.5 +}] +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:rotation") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 6.28319] +} + +[sub_resource type="Animation" id="Animation_0itbo"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_55qby"] +_data = { +&"RESET": SubResource("Animation_0itbo"), +&"rotation": SubResource("Animation_lj5pp") +} + +[node name="Magic" type="Node2D"] +script = ExtResource("1_lj5pp") + +[node name="CharacterBody2D" type="CharacterBody2D" parent="."] +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D"] +shape = SubResource("RectangleShape2D_lj5pp") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="CharacterBody2D"] +libraries = { +&"": SubResource("AnimationLibrary_55qby") +} +autoplay = "rotation" + +[node name="Sprite2D" type="Sprite2D" parent="CharacterBody2D"] +scale = Vector2(3, 3) +texture = ExtResource("1_jjep1") diff --git a/Game/Mobs/enemy.gd b/Game/Mobs/enemy.gd index 61c2477..57cd2ec 100644 --- a/Game/Mobs/enemy.gd +++ b/Game/Mobs/enemy.gd @@ -122,6 +122,7 @@ func AnimatedSprite2D_animation_finished() -> void: if animated_sprite.animation == "hurt": animated_sprite.play("walk") + func Collision_Handler(body: Node2D): if body.get_parent().name.contains("StickTrap"): if not body.get_parent().get_if_moving_state(): @@ -140,3 +141,11 @@ func Collision_Handler(body: Node2D): func get_progress(): return get_parent().get_progress() +func set_progress(amount) -> void: + get_parent().set_progress(amount) + +func get_speed(): + return speed + +func set_speed(nspeed) -> void: + speed = nspeed diff --git a/Game/Towers/towers.gd b/Game/Towers/towers.gd index 10aebfa..91f0602 100644 --- a/Game/Towers/towers.gd +++ b/Game/Towers/towers.gd @@ -8,7 +8,7 @@ var follower = false var target = null const ARROW = preload("res://Game/Bullets/arrow.tscn") - +const MAGIC = preload("res://Game/Bullets/magic.tscn") func _ready() -> void: follower = true @@ -26,10 +26,13 @@ func _process(delta: float) -> void: func set_properties() -> void: if self.name.contains("ArcherTower"): - get_node("Timer").wait_time = 0.8 - bulletSpeed = 400 - hitpoint = 50 - + get_node("Timer").wait_time = 0.5 + bulletSpeed = 600 + hitpoint = 25 + if self.name.contains("WizardTower"): + get_node("Timer").wait_time = 2.0 + bulletSpeed = 450 + hitpoint = 10 func get_if_moving_state(): return follower @@ -43,9 +46,14 @@ func choose_target(body : Node2D) -> void: if not follower: var surroinding_enemies = get_node("CharacterBody2D/Area2D").get_overlapping_bodies() target = surroinding_enemies[0] - for i in surroinding_enemies: - if i.get_parent().get_progress() > target.get_parent().get_progress(): - target = i + if self.name.contains("ArcherTower") or self.name.contains("BombTower"): + 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 func shoot() -> void: @@ -57,4 +65,12 @@ func shoot() -> void: arrow.set_targe(target) arrow.set_hitpoint(hitpoint) get_parent().add_child(arrow) + + if self.name.contains("WizardTower"): + var magic = MAGIC.instantiate() + magic.position = self.position + magic.set_speed(bulletSpeed) + magic.set_targe(target) + magic.set_hitpoint(hitpoint) + get_parent().add_child(magic) pass diff --git a/Game/Towers/wizard_tower.tscn b/Game/Towers/wizard_tower.tscn new file mode 100644 index 0000000..a2b545c --- /dev/null +++ b/Game/Towers/wizard_tower.tscn @@ -0,0 +1,89 @@ +[gd_scene load_steps=12 format=3 uid="uid://b4e605q60lde4"] + +[ext_resource type="Script" uid="uid://dil41a1ymo0ua" path="res://Game/Towers/towers.gd" id="1_grwc8"] +[ext_resource type="Texture2D" uid="uid://dngrpwmj4oedg" path="res://Assets/Towers/S_Fly.png" id="2_grwc8"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_35u2c"] +atlas = ExtResource("2_grwc8") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fpdhp"] +atlas = ExtResource("2_grwc8") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mo8k5"] +atlas = ExtResource("2_grwc8") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uxuma"] +atlas = ExtResource("2_grwc8") +region = Rect2(288, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l7hme"] +atlas = ExtResource("2_grwc8") +region = Rect2(384, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pvyvx"] +atlas = ExtResource("2_grwc8") +region = Rect2(480, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_pvyvx"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_35u2c") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fpdhp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mo8k5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uxuma") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l7hme") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pvyvx") +}], +"loop": true, +"name": &"Default", +"speed": 5.0 +}] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_hcema"] +radius = 29.0 +height = 88.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_c5q70"] +radius = 183.044 + +[node name="WizardTower" type="Node2D"] +script = ExtResource("1_grwc8") + +[node name="CharacterBody2D" type="CharacterBody2D" parent="."] + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="CharacterBody2D"] +position = Vector2(1, 13) +scale = Vector2(1.5, 1.5) +sprite_frames = SubResource("SpriteFrames_pvyvx") +animation = &"Default" +autoplay = "Default" +frame_progress = 0.265757 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D"] +position = Vector2(0, 17) +shape = SubResource("CapsuleShape2D_hcema") + +[node name="Area2D" type="Area2D" parent="CharacterBody2D"] +position = Vector2(2, 20) +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CharacterBody2D/Area2D"] +shape = SubResource("CircleShape2D_c5q70") + +[node name="Timer" type="Timer" parent="."] +wait_time = 2.0 +autostart = true diff --git a/Game/sidepanel.gd b/Game/sidepanel.gd index 2aace15..ef17e5a 100644 --- a/Game/sidepanel.gd +++ b/Game/sidepanel.gd @@ -12,10 +12,14 @@ const MINE = preload("res://Game/Traps/mine.tscn") @onready var archertowerspawn: Button = $HBoxContainer4/HBoxContainer2/Button2 const ARCHER_TOWER = preload("res://Game/Towers/archer_tower.tscn") +@onready var wizardtowerspawn: Button = $HBoxContainer4/HBoxContainer2/Button3 +const WIZARD_TOWER = preload("res://Game/Towers/wizard_tower.tscn") + func _ready() -> void: stickspawner.connect("button_up", Spawn_Stick) minespawner.connect("button_up", Spawn_Mine) - archertowerspawn.connect("button_down", Spawn_Archer) + archertowerspawn.connect("button_up", Spawn_Archer) + wizardtowerspawn.connect("button_up", Spawn_wizard) func Update_Lives(lives) -> void: livelabel.text = "Lives: " + str(lives) @@ -35,3 +39,9 @@ func Spawn_Archer() -> void: tower.name = "ArcherTower-" + str(randi()) get_parent().add_child(tower) pass + +func Spawn_wizard() -> void: + var tower = WIZARD_TOWER.instantiate() + tower.name = "WizardTower-" + str(randi()) + get_parent().add_child(tower) + pass diff --git a/project.godot b/project.godot index 731cf44..06fe917 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,17 @@ run/main_scene="uid://drjcsrjs6uobn" config/features=PackedStringArray("4.4", "Mobile") config/icon="res://icon.svg" +[display] + +window/size/resizable=false +window/size/borderless=true +window/stretch/aspect="ignore" +window/stretch/scale_mode="integer" + [editor_plugins] enabled=PackedStringArray("res://addons/gut/plugin.cfg") + +[rendering] + +textures/canvas_textures/default_texture_filter=0