From 1dc4f1631372c4029474252c5d611ebde4be00b1 Mon Sep 17 00:00:00 2001 From: 3002102 <3002102@stud.th-mannheim.de> Date: Tue, 21 Apr 2026 17:10:41 +0200 Subject: [PATCH] added a new perk in form of a spellbook --- .DS_Store | Bin 10244 -> 10244 bytes assets/.DS_Store | Bin 14340 -> 14340 bytes assets/books_set_2/LICENSE.txt | 14 ++ assets/books_set_2/books_blue_gem.png | Bin 0 -> 551 bytes assets/books_set_2/books_blue_gem.png.import | 40 +++++ assets/books_set_2/books_crimson_gem.png | Bin 0 -> 537 bytes .../books_set_2/books_crimson_gem.png.import | 40 +++++ assets/books_set_2/books_cross.png | Bin 0 -> 472 bytes assets/books_set_2/books_cross.png.import | 40 +++++ assets/books_set_2/books_eye.png | Bin 0 -> 621 bytes assets/books_set_2/books_eye.png.import | 40 +++++ assets/books_set_2/books_green_gem.png | Bin 0 -> 542 bytes assets/books_set_2/books_green_gem.png.import | 40 +++++ assets/books_set_2/books_health_potion.png | Bin 0 -> 583 bytes .../books_health_potion.png.import | 40 +++++ assets/books_set_2/books_jewel.png | Bin 0 -> 578 bytes assets/books_set_2/books_jewel.png.import | 40 +++++ assets/books_set_2/books_mana_potion.png | Bin 0 -> 545 bytes .../books_set_2/books_mana_potion.png.import | 40 +++++ assets/books_set_2/books_pentagram.png | Bin 0 -> 1150 bytes assets/books_set_2/books_pentagram.png.import | 40 +++++ assets/books_set_2/books_poison.png | Bin 0 -> 566 bytes assets/books_set_2/books_poison.png.import | 40 +++++ assets/books_set_2/books_purple_gem.png | Bin 0 -> 548 bytes .../books_set_2/books_purple_gem.png.import | 40 +++++ .../books_set_2/books_set_2_preview.aseprite | Bin 0 -> 4490 bytes assets/books_set_2/books_set_2_preview.png | Bin 0 -> 3328 bytes .../books_set_2_preview.png.import | 40 +++++ .../books_set_2/books_upside_down_cross.png | Bin 0 -> 458 bytes .../books_upside_down_cross.png.import | 40 +++++ scenes/blue_slime.tscn | 8 +- scenes/fire_slime.tscn | 12 +- scenes/slime.tscn | 163 +++++++++++++++++- scenes/spellbook.tscn | 35 ++++ scripts/ProjectileBase.gd | 5 +- scripts/blue_slime.gd | 5 +- scripts/enemy_base.gd | 20 ++- scripts/explosion.gd | 4 +- scripts/fire_slime.gd | 5 +- scripts/fire_swirl.gd | 3 +- scripts/fireball.gd | 9 +- scripts/perk_effects.gd | 97 ++++++++++- scripts/player.gd | 5 +- scripts/shuriken.gd | 3 +- scripts/slime.gd | 6 +- scripts/spellbook.gd | 18 ++ scripts/spellbook.gd.uid | 1 + scripts/throwing_knive.gd | 1 + 48 files changed, 898 insertions(+), 36 deletions(-) create mode 100644 assets/books_set_2/LICENSE.txt create mode 100644 assets/books_set_2/books_blue_gem.png create mode 100644 assets/books_set_2/books_blue_gem.png.import create mode 100644 assets/books_set_2/books_crimson_gem.png create mode 100644 assets/books_set_2/books_crimson_gem.png.import create mode 100644 assets/books_set_2/books_cross.png create mode 100644 assets/books_set_2/books_cross.png.import create mode 100644 assets/books_set_2/books_eye.png create mode 100644 assets/books_set_2/books_eye.png.import create mode 100644 assets/books_set_2/books_green_gem.png create mode 100644 assets/books_set_2/books_green_gem.png.import create mode 100644 assets/books_set_2/books_health_potion.png create mode 100644 assets/books_set_2/books_health_potion.png.import create mode 100644 assets/books_set_2/books_jewel.png create mode 100644 assets/books_set_2/books_jewel.png.import create mode 100644 assets/books_set_2/books_mana_potion.png create mode 100644 assets/books_set_2/books_mana_potion.png.import create mode 100644 assets/books_set_2/books_pentagram.png create mode 100644 assets/books_set_2/books_pentagram.png.import create mode 100644 assets/books_set_2/books_poison.png create mode 100644 assets/books_set_2/books_poison.png.import create mode 100644 assets/books_set_2/books_purple_gem.png create mode 100644 assets/books_set_2/books_purple_gem.png.import create mode 100644 assets/books_set_2/books_set_2_preview.aseprite create mode 100644 assets/books_set_2/books_set_2_preview.png create mode 100644 assets/books_set_2/books_set_2_preview.png.import create mode 100644 assets/books_set_2/books_upside_down_cross.png create mode 100644 assets/books_set_2/books_upside_down_cross.png.import create mode 100644 scenes/spellbook.tscn create mode 100644 scripts/spellbook.gd create mode 100644 scripts/spellbook.gd.uid diff --git a/.DS_Store b/.DS_Store index 41d0a7cb12c89407b4b85d157df2c3d4c00c8f15..4fc57f3b8964f3d5a6ff67b61e1c52a640d3d8f1 100644 GIT binary patch delta 256 zcmZn(XbG6$&&a^-9jmS*S&kN41N}W7KaF;>60Do~tez_-5ETAa0EHkw{I=v_}CAc6lIWsR^ z+5Q6q7$`dgKp2yAg*5yHAncI5{Jd07PGtvg2%mw2L7Tym!HXf7A%mfup^sq}!!m{) z3`ZGmF}z{;#>m1b#;C-o&1k}C%V^K&!RW~t#hA>P!I-)EjZh4mDhopjLn1>7L!xI+ iesWSyeiG17phZkfKw9rV7%(twc9opPwwYbwFFOEiZ$+U1 delta 221 zcmZn(XbG6$&&aniU^hP_-(((vJsd`+raB5n<`$DL2+Y(Ll9q`V5Kc-=&Q34NFU?DF z&d^-9jThiA&d4wKOwP{>C`v8MOf8?>Ex1cQA`>VOoLQ9`onDlg5?qj&oSB!d zZ2y4)3^*s33TcEVH-I@IdHH#%oXQRX5IJQBZwP~dgF&0Yks+8NhM|z5fnhqsVutk$ z2N}*WJZAXH@Sl;FQH)WEQJYbR(Uj4g(SgyCF^DmmF@Z60^BbWUw#@~S)7d6AXl!Oz H_{$CeOhr7| diff --git a/assets/.DS_Store b/assets/.DS_Store index 03bdb83cb9ab60b4b5ca600e18f64bff05036f69..810f38b510a2282ab68f098c5495669805cb2baa 100644 GIT binary patch delta 641 zcmb7AJxc>Y5Pf?WNzf=~5X4xx(ZV7s$r(f&1wkc1xtT}s90JF*7`0e7)j#}v$Hch^Jd=E%C+*vq8Pkd`Y`ove8W`5{(KmKpz?&; zbT--@(1YPuQ}k#n@Mb70V5>=M;%peRsGvZRlo@PO3dm!h-ZT#2PzrS~ja`(H{r;Q5 zF+B$!swnYxnLi4fQU8`$M>6er`JChBIDrM28QPK0`tgTCh;?~&YCWZ+$kcmOh$FGY z_%VHl@89!O>wkX#9lq>FbmN7HmwLH#Pt5gVl@KmYn3f^j9PI)Jcc~I9Y~s_BjISY0 zdx#`PkZ1%nGfGDiU5!D*;7&XAb)*)I2XVw9vs{8tzWOJz;wS!))#K4MA==fZ98=SB zbG{8Z7J1}R#TM1y?^aVrzxUO&Nl^vds!J_Os8DqDpKO+e4kq3M>OR(|9|zuyFJp9>_y7O^ delta 127 zcmZoEXepTB&nUk!;4AZHM}h53o6S@>7V$TuVml6Q!a>cvjPV@%fyCqM()XR3TBg?6yhfTQBf9Lws$G`U>kH~{<&CvgA( diff --git a/assets/books_set_2/LICENSE.txt b/assets/books_set_2/LICENSE.txt new file mode 100644 index 0000000..325dbb6 --- /dev/null +++ b/assets/books_set_2/LICENSE.txt @@ -0,0 +1,14 @@ +Pixel Art License +Copyright © OceansCurse 2026 — All rights reserved. + +You are free to: +- Use these assets in any personal or commercial project (including games, apps, merchandise, etc.). +- Modify, adapt, and create derivative works from these assets. + +You are not permitted to: +- Redistribute, resell, or re-upload these assets (or substantial portions/modified versions) as standalone files, asset packs, or listings on itch.io, other marketplaces, or elsewhere. +- Present or claim these assets (original or modified) as your own original creation in a way that removes my authorship. + +Attribution is not required, but always appreciated (e.g., "Assets by OceansCurse on itch.io"). +These terms do not affect your rights under fair use or other applicable law. + diff --git a/assets/books_set_2/books_blue_gem.png b/assets/books_set_2/books_blue_gem.png new file mode 100644 index 0000000000000000000000000000000000000000..9946ad0fdaf4cbba278dfa9f2d6708a2a8a8c4dd GIT binary patch literal 551 zcmV+?0@(eDP)Px$;Ymb6R9J<@m%VGkKp4g!KbC@0Dg6iRlA$0}0#Y*Qq&ReP?a;vt{R13?x)mJU z9O__)4uy7c>L5agbPy55g3!T5!7d$&C=|L>>`?Ex=3;Ue5`30~yl?LL<>k$N1e&e( z8aq_j{6H_{eKTve+V%i?A&+7@<%{|4OCNe6&p}XtTImACbP7j%A*h;)L3iMp`Q&@G zH5T;D#ih6&5Yb}A_iZc`@E?E}8^aM7%On%7K!gDnt2H%VRy$nWDCa1M41^E>F(=03 zxW*?venFXbVU%-H5ROgAnvdfeHSa0&e^&ywtae}wN0xo!3SgT~#|QM&35S{VAomUdBfHLhm=D4ZC&ZlBqfLJJiOfrFBqlD;eBvb`u z+Qq)aTp(Qm5eOMM&V-~2Mx%u2W$h2bCST_3g#gSD04NBn;3nqFTEId8pdhS#Uk%y8 ziJ4VQR<1TAZq2M@`4@P(A9Rvs1yoJ-)MWD97Y9%^71>JNQvf@00NF|%SLeq#Inx0E zpNlXKV?W$IE2rnLPfc9kzgYrsJ-{AJ%mcF^tk@h9+XiJ89jR2iqbH+}_XyfI4~{R3 pE8+}*&Dm|IXTxntero6YfnNk7yW_ltR~i5S002ovPDHLkV1mJF?3Vxl literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_blue_gem.png.import b/assets/books_set_2/books_blue_gem.png.import new file mode 100644 index 0000000..c0929c2 --- /dev/null +++ b/assets/books_set_2/books_blue_gem.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blotgjvb5lg5n" +path="res://.godot/imported/books_blue_gem.png-6b9e1efe847341054172f4dc841820d4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_blue_gem.png" +dest_files=["res://.godot/imported/books_blue_gem.png-6b9e1efe847341054172f4dc841820d4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/books_set_2/books_crimson_gem.png b/assets/books_set_2/books_crimson_gem.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce1606f2b3a5e6dd363c6d71232e5c67187e453 GIT binary patch literal 537 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 QOaK4?07*qoM6N<$g778x$p8QV literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_jewel.png.import b/assets/books_set_2/books_jewel.png.import new file mode 100644 index 0000000..bbdc56a --- /dev/null +++ b/assets/books_set_2/books_jewel.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://lo5ocyv4wo3e" +path="res://.godot/imported/books_jewel.png-81cbdb01e058151fa333b7a570f883b8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_jewel.png" +dest_files=["res://.godot/imported/books_jewel.png-81cbdb01e058151fa333b7a570f883b8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/books_set_2/books_mana_potion.png b/assets/books_set_2/books_mana_potion.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc016c40a41a97e5bfaceee236e820876b4a0e7 GIT binary patch literal 545 zcmV++0^a?JP)Px$+et)0R9J<@moaO?Kp2MKHg*U&bP$JvAdc-Ig@6G;=@O^@gMy3w5tis6L3f8P zorFTSE**+e6oi5Wp*Yl0gn%u@p<9+pJJ^&bH ztJE9SNX(3S%O5~*R8cABA_34F)eVT4JD^g`AtOsr@(RY!OHO$r7Cv#*% z0l2^3HnYpl=QT_pN$!joXc>~`v}Y0RJQ4X$K}ME@7r#gI7s z-YAputABmCfpPn`(N4_+fw<>bSRm literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_mana_potion.png.import b/assets/books_set_2/books_mana_potion.png.import new file mode 100644 index 0000000..66d3d75 --- /dev/null +++ b/assets/books_set_2/books_mana_potion.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1pr5rqdnpnw5" +path="res://.godot/imported/books_mana_potion.png-e9b0c98b6782a5538a4f682f9d61384f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_mana_potion.png" +dest_files=["res://.godot/imported/books_mana_potion.png-e9b0c98b6782a5538a4f682f9d61384f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/books_set_2/books_pentagram.png b/assets/books_set_2/books_pentagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b172929cad23c1d192a78f23db04b9a06df8fa5f GIT binary patch literal 1150 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg5s(_;nda-upao=eFfcI+ zF)#yJj6lfHp2@%hW-~AVO#%Yu1&j#U1x#>Rg$2wAHb~*VXrH%0Ln1RnB1$5BeXNr6 zbM+Ea@{>~aDsl@z3K(oEtboki)RIJnirk#MVyg;UC9n!BAR8pCucQE0Qj%?}6yY17 z;GAESs$iyPpl6_D$EBd4U{jQmW)z9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLkxkLMfuL^+7WFhI$72aI=A0Z9t+{{zaLoK$}74+Zoz`RicPN?Xl4ZS&rlw zh)=TMz znZkQ2Bkd|U9T=R}nV-Bk$FOH+GMCetRLA{HVw*Hw1(t`q3VyDvW#f8uIlN(qW=m5? z`4p^ohbM?!_HER2IQi|byiAKv=6(5P zTnFY~3cU5w_wdbgnhZ~NtBap&3T!_2SmOAzd)K-m?%tVJ^LG2B6+VA*CcTOfeSCO* zAOF#R7froP{GLm%ubVNWH&k&I!=nQM&g&lundr@$rSffcyqg~5g@tv}N#!NyLX<4} hy&s>x{CNJ;I_9P6G8(^Co*%Q~loCIC~uqP744 literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_pentagram.png.import b/assets/books_set_2/books_pentagram.png.import new file mode 100644 index 0000000..50130ac --- /dev/null +++ b/assets/books_set_2/books_pentagram.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlygc6jakfapg" +path="res://.godot/imported/books_pentagram.png-3e29e3d9c342d860aa7f6d22635f65db.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_pentagram.png" +dest_files=["res://.godot/imported/books_pentagram.png-3e29e3d9c342d860aa7f6d22635f65db.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/books_set_2/books_poison.png b/assets/books_set_2/books_poison.png new file mode 100644 index 0000000000000000000000000000000000000000..eac4887d2f0a2fcc55c0a5e2b82c37e36bcd13f9 GIT binary patch literal 566 zcmV-60?GY}P)Px$@JU2LR9J<@moZ2JQ5eVnrGuh@L*OKcv`9mE90&?JDF`(QO}TlSdvxR$C$1tb z2Q39b;FRFfAVNYQi9=i1fej4}frJf7O()Ou&U^3a;eWdK-gn>scX#i7@7|W$X#HV> za+`HZ`J5wWYNKTjAmwu?rsIwPNcr3XgxeTUOve%Nx*#S+^d5U_GapW-rv0X$fHxTc zM7%DhT+9H&$rPQDW*ra;GeIx`=;rnAnPp5VQDK6h1|ZE3b`CA$>RmR7ZCZec*M(Fl zj8dY4!MJG}GZ;5fN>q?ycmvb`b`U(~%m7Y^8{n#4!}ZVU$^cw-fRql=YxlYCXLb8!Vvl^KG24ir39 zD6hw}w!C-8H7RWYj8Ctd8O_OdFdBfM03BJgt%zL9kTf%EvuNXm$o3ONye=RVMn~2l zDD;V+ln5KpsqtiAfMrWQ;y$1x0Eu zi`r<-4ksTYKU$Z!OK)bA-yVR3a6(jPL#sfiwDG;*A4o>eX-tce*#H0l07*qoM6N<$ Ef~R})Q~&?~ literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_poison.png.import b/assets/books_set_2/books_poison.png.import new file mode 100644 index 0000000..dab1951 --- /dev/null +++ b/assets/books_set_2/books_poison.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cogqoxfqsnvv1" +path="res://.godot/imported/books_poison.png-3e8beaf0e04a26a46016fddeb0daf0f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_poison.png" +dest_files=["res://.godot/imported/books_poison.png-3e8beaf0e04a26a46016fddeb0daf0f8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/books_set_2/books_purple_gem.png b/assets/books_set_2/books_purple_gem.png new file mode 100644 index 0000000000000000000000000000000000000000..2365ae2203bc20da1e5db8493fb5e9aef274fdbf GIT binary patch literal 548 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 literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_set_2_preview.png b/assets/books_set_2/books_set_2_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..4447fa60e0b472c30dc39dc12c2ba4d4b00aa930 GIT binary patch literal 3328 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 IwO{;y0Mn~oIRF3v literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_set_2_preview.png.import b/assets/books_set_2/books_set_2_preview.png.import new file mode 100644 index 0000000..29d52ce --- /dev/null +++ b/assets/books_set_2/books_set_2_preview.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnlacakjmdnp1" +path="res://.godot/imported/books_set_2_preview.png-e47aaf46da7c1d64191f8dfb0958de3a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_set_2_preview.png" +dest_files=["res://.godot/imported/books_set_2_preview.png-e47aaf46da7c1d64191f8dfb0958de3a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/books_set_2/books_upside_down_cross.png b/assets/books_set_2/books_upside_down_cross.png new file mode 100644 index 0000000000000000000000000000000000000000..9cce73d4476cedecffbee36151b63ce6243efb64 GIT binary patch literal 458 zcmV;*0X6=KP)Px$gh@m}R9J;$Y^iJi&oF?11)E?^QzcC-YpH7|?0}l4N(KixF`77_rl}Ic5hxB= zv}6Kc;hHqcLqKJ{> z2(laiv-~@UFhcO_Te2L%M2-WHfe)K75vpkD07}8A14bP{QZ~d@nqgBzY<48t0oV#2 zbU;qQM3e)t7CdMGLypLTiR6+HTfu`aw&mAbqRk`O0qBPNunCi7Az2Q92jf>%i;#nz z^9QON7dJQc(f|XNxWtwqxwyG;s;Afi$c7?kNA%z)wKgQHI>r_y#0EK49Ke9Zr&Mnd z5z`(d*HWS!U@R*^vEj&I*R?yuJHS|0f}v{1F{(NM7r^R(svXA|YGSk*41H4>7#J8B z-h5zT5E1x;!A1sz#LsV@&Cs&sDuz7P>KM6Wf^IOfLy!To8kig|MB0dJB40GX_f@i(`PqW}N^07*qoM6N<$f|WG6 Aj{pDw literal 0 HcmV?d00001 diff --git a/assets/books_set_2/books_upside_down_cross.png.import b/assets/books_set_2/books_upside_down_cross.png.import new file mode 100644 index 0000000..bc22d8d --- /dev/null +++ b/assets/books_set_2/books_upside_down_cross.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dm3wtcchfipcf" +path="res://.godot/imported/books_upside_down_cross.png-f374141fa42ba8d66998f6c556ae5908.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/books_set_2/books_upside_down_cross.png" +dest_files=["res://.godot/imported/books_upside_down_cross.png-f374141fa42ba8d66998f6c556ae5908.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/blue_slime.tscn b/scenes/blue_slime.tscn index 02fca8e..68f609c 100644 --- a/scenes/blue_slime.tscn +++ b/scenes/blue_slime.tscn @@ -589,7 +589,7 @@ animations = [{ }], "loop": false, "name": &"hurt_down", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -609,7 +609,7 @@ animations = [{ }], "loop": false, "name": &"hurt_left", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -629,7 +629,7 @@ animations = [{ }], "loop": false, "name": &"hurt_right", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -649,7 +649,7 @@ animations = [{ }], "loop": false, "name": &"hurt_up", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, diff --git a/scenes/fire_slime.tscn b/scenes/fire_slime.tscn index 76be65b..7443feb 100644 --- a/scenes/fire_slime.tscn +++ b/scenes/fire_slime.tscn @@ -542,9 +542,9 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_rdhnu") }], -"loop": true, +"loop": false, "name": &"hurt_down", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -564,7 +564,7 @@ animations = [{ }], "loop": true, "name": &"hurt_left", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -587,7 +587,7 @@ animations = [{ }], "loop": true, "name": &"hurt_right", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -607,7 +607,7 @@ animations = [{ }], "loop": true, "name": &"hurt_up", -"speed": 10.0 +"speed": 20.0 }, { "frames": [{ "duration": 1.0, @@ -739,7 +739,7 @@ metadata/_custom_type_script = "uid://c0uv02nt5ocvg" [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1151813585] texture_filter = 1 sprite_frames = SubResource("SpriteFrames_05veu") -animation = &"walk_down" +animation = &"hurt_up" [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2114857632] position = Vector2(0, 1) diff --git a/scenes/slime.tscn b/scenes/slime.tscn index 8de1a65..ec30901 100644 --- a/scenes/slime.tscn +++ b/scenes/slime.tscn @@ -7,6 +7,7 @@ [ext_resource type="Texture2D" uid="uid://cxddvfs2wfwcl" path="res://assets/Slime1/Without_shadow/Slime1_Idle_without_shadow.png" id="3_rrqju"] [ext_resource type="Texture2D" uid="uid://b2bmw70co6noy" path="res://assets/Slime1/Without_shadow/Slime1_Walk_without_shadow.png" id="4_wyhst"] [ext_resource type="Texture2D" uid="uid://bshpjl3w1n0y1" path="res://assets/Slime1/With_shadow/Slime1_Death_with_shadow.png" id="5_gstla"] +[ext_resource type="Texture2D" uid="uid://dwpyocmvqptui" path="res://assets/Slime1/With_shadow/Slime1_Hurt_with_shadow.png" id="7_v5wyi"] [sub_resource type="Resource" id="Resource_gstla"] script = ExtResource("2_2npkn") @@ -238,6 +239,86 @@ region = Rect2(256, 0, 64, 64) atlas = ExtResource("3_rrqju") region = Rect2(320, 0, 64, 64) +[sub_resource type="AtlasTexture" id="AtlasTexture_p5vph"] +atlas = ExtResource("7_v5wyi") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4vxow"] +atlas = ExtResource("7_v5wyi") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ymo5x"] +atlas = ExtResource("7_v5wyi") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v338d"] +atlas = ExtResource("7_v5wyi") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vn1yr"] +atlas = ExtResource("7_v5wyi") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_il7ig"] +atlas = ExtResource("7_v5wyi") +region = Rect2(0, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5baf8"] +atlas = ExtResource("7_v5wyi") +region = Rect2(64, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mmuop"] +atlas = ExtResource("7_v5wyi") +region = Rect2(128, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7fqim"] +atlas = ExtResource("7_v5wyi") +region = Rect2(192, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0ivba"] +atlas = ExtResource("7_v5wyi") +region = Rect2(256, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0f1a3"] +atlas = ExtResource("7_v5wyi") +region = Rect2(0, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3qxe4"] +atlas = ExtResource("7_v5wyi") +region = Rect2(64, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8tsuk"] +atlas = ExtResource("7_v5wyi") +region = Rect2(128, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uxjht"] +atlas = ExtResource("7_v5wyi") +region = Rect2(192, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_72t0a"] +atlas = ExtResource("7_v5wyi") +region = Rect2(256, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_e0x1h"] +atlas = ExtResource("7_v5wyi") +region = Rect2(0, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_eodiq"] +atlas = ExtResource("7_v5wyi") +region = Rect2(64, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d4gio"] +atlas = ExtResource("7_v5wyi") +region = Rect2(128, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_q2l3s"] +atlas = ExtResource("7_v5wyi") +region = Rect2(192, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3l0w5"] +atlas = ExtResource("7_v5wyi") +region = Rect2(256, 64, 64, 64) + [sub_resource type="AtlasTexture" id="AtlasTexture_fur4c"] atlas = ExtResource("4_wyhst") region = Rect2(0, 0, 64, 64) @@ -568,6 +649,86 @@ animations = [{ }, { "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_p5vph") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4vxow") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ymo5x") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v338d") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vn1yr") +}], +"loop": true, +"name": &"hurt_down", +"speed": 20.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_il7ig") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5baf8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mmuop") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7fqim") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0ivba") +}], +"loop": true, +"name": &"hurt_left", +"speed": 20.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_0f1a3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3qxe4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8tsuk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uxjht") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_72t0a") +}], +"loop": true, +"name": &"hurt_right", +"speed": 20.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_e0x1h") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_eodiq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d4gio") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_q2l3s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3l0w5") +}], +"loop": true, +"name": &"hurt_up", +"speed": 20.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_fur4c") }, { "duration": 1.0, @@ -696,7 +857,7 @@ drop_table = Array[ExtResource("2_2npkn")]([SubResource("Resource_gstla")]) [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=752118449] texture_filter = 1 sprite_frames = SubResource("SpriteFrames_cbi0b") -animation = &"walk_right" +animation = &"hurt_up" [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=769710804] position = Vector2(0, 1) diff --git a/scenes/spellbook.tscn b/scenes/spellbook.tscn new file mode 100644 index 0000000..8504812 --- /dev/null +++ b/scenes/spellbook.tscn @@ -0,0 +1,35 @@ +[gd_scene format=3 uid="uid://s5m6whnjl3cv"] + +[ext_resource type="Script" uid="uid://c6w6hhayguqoj" path="res://scripts/spellbook.gd" id="1_f8wgx"] +[ext_resource type="Texture2D" uid="uid://dlygc6jakfapg" path="res://assets/books_set_2/books_pentagram.png" id="2_g1ouv"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_md3wj"] +atlas = ExtResource("2_g1ouv") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_qgan7"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_md3wj") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_i8red"] +size = Vector2(22.5, 26.5) + +[node name="Spellbook" type="Area2D" unique_id=1926827672] +script = ExtResource("1_f8wgx") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1402601698] +texture_filter = 1 +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_qgan7") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=609912720] +position = Vector2(-0.625, -0.625) +scale = Vector2(0.5, 0.5) +shape = SubResource("RectangleShape2D_i8red") diff --git a/scripts/ProjectileBase.gd b/scripts/ProjectileBase.gd index 5535f0b..763fa3b 100644 --- a/scripts/ProjectileBase.gd +++ b/scripts/ProjectileBase.gd @@ -2,8 +2,9 @@ extends Area2D class_name ProjectileBase @export var size: float +@export var damage: int = 5 var speed = 200 -@export var element: String +@export var element: String var direction: Vector2 func _ready() -> void: @@ -20,7 +21,7 @@ func launch(target: Vector2): func _on_body_entered(body: Node2D) -> void: if body.is_in_group("enemies"): - body.hit() + body.take_damage(damage) queue_free() func _remove(): diff --git a/scripts/blue_slime.gd b/scripts/blue_slime.gd index 1bb95e3..740da5d 100644 --- a/scripts/blue_slime.gd +++ b/scripts/blue_slime.gd @@ -3,7 +3,8 @@ extends EnemyBase func _ready() -> void: super() speed = 15.0 - hits_remaining = 2 + max_hp = 25 + hp = max_hp $Area2D.body_entered.connect(_on_area_2d_body_entered) func _process(delta: float) -> void: @@ -14,4 +15,4 @@ func _process(delta: float) -> void: func _on_area_2d_body_entered(body: Node2D) -> void: if body == player: - hit() + take_damage(player.damage) diff --git a/scripts/enemy_base.gd b/scripts/enemy_base.gd index 3ccd2b9..0cb1ce9 100644 --- a/scripts/enemy_base.gd +++ b/scripts/enemy_base.gd @@ -6,9 +6,11 @@ extends CharacterBody2D @export var damage: int = 2 +@export var max_hp: int = 10 + var is_dying = false var is_hurt = false -var hits_remaining = 1 +var hp: int var _touching_witch: bool = false var speed var witch @@ -24,6 +26,7 @@ func _ready() -> void: witch = get_node("/root/Game/Witch") player = get_node("/root/Game/Player") animated_sprite_2d.sprite_frames = animated_sprite_2d.sprite_frames.duplicate() + hp = max_hp $Area2D.body_entered.connect(_on_base_body_entered) $Area2D.body_exited.connect(_on_base_body_exited) @@ -54,25 +57,30 @@ func die(): await animated_sprite_2d.animation_finished queue_free() -func hit() -> void: +func take_damage(amount: int) -> void: if is_dying or is_hurt: return - hits_remaining -= 1 - if hits_remaining <= 0: + hp -= amount + if hp <= 0: die() else: _play_hurt() +func hit() -> void: + take_damage(1) + func _play_hurt() -> void: - is_hurt = true var hurt_anim: String if abs(last_direction.x) >= abs(last_direction.y): hurt_anim = "hurt_left" if last_direction.x < 0 else "hurt_right" else: hurt_anim = "hurt_up" if last_direction.y < 0 else "hurt_down" + if not animated_sprite_2d.sprite_frames.has_animation(hurt_anim): + return + is_hurt = true animated_sprite_2d.sprite_frames.set_animation_loop(hurt_anim, false) animated_sprite_2d.play(hurt_anim) - await animated_sprite_2d.animation_finished + await get_tree().create_timer(0.25, true).timeout is_hurt = false func _process(delta: float) -> void: diff --git a/scripts/explosion.gd b/scripts/explosion.gd index f05a1c3..26fe4af 100644 --- a/scripts/explosion.gd +++ b/scripts/explosion.gd @@ -1,12 +1,12 @@ extends Area2D +@export var damage: int = 15 -# Called when the node enters the scene tree for the first time. func _ready(): await get_tree().physics_frame for body in get_overlapping_bodies(): if body.is_in_group("enemies"): - body.hit() + body.take_damage(damage) await $AnimatedSprite2D.animation_finished queue_free() diff --git a/scripts/fire_slime.gd b/scripts/fire_slime.gd index 39a3ca9..968b083 100644 --- a/scripts/fire_slime.gd +++ b/scripts/fire_slime.gd @@ -3,7 +3,8 @@ extends EnemyBase func _ready() -> void: super() speed = 15.0 - hits_remaining = 3 + max_hp = 50 + hp = max_hp $Area2D.body_entered.connect(_on_area_2d_body_entered) func _process(delta: float) -> void: @@ -14,4 +15,4 @@ func _process(delta: float) -> void: func _on_area_2d_body_entered(body: Node2D) -> void: if body == player: - hit() + take_damage(player.damage) diff --git a/scripts/fire_swirl.gd b/scripts/fire_swirl.gd index d703f62..a2046b5 100644 --- a/scripts/fire_swirl.gd +++ b/scripts/fire_swirl.gd @@ -15,9 +15,10 @@ const DIRS := [ func _on_body_entered(body: Node2D) -> void: if body.is_in_group("enemies"): - body.hit() + body.take_damage(damage) func _ready() -> void: + damage = 6 if _is_spread_child: super() return diff --git a/scripts/fireball.gd b/scripts/fireball.gd index 42421c0..03f03d7 100644 --- a/scripts/fireball.gd +++ b/scripts/fireball.gd @@ -2,11 +2,16 @@ extends ProjectileBase var fireball_aoe = false var explosion_scene = preload("res://scenes/explosion.tscn") -@onready var perk_effects = get_node("/root/Game/PerkEffects")# Called when the node enters the scene tree for the first time. +@onready var perk_effects = get_node("/root/Game/PerkEffects") + +func _ready() -> void: + super() + damage = 8 + func _on_body_entered(body: Node2D) -> void: fireball_aoe = perk_effects.fireball_aoe_enabled if body.is_in_group("enemies"): - body.hit() + body.take_damage(damage) if fireball_aoe: var boom = explosion_scene.instantiate() boom.global_position = global_position diff --git a/scripts/perk_effects.gd b/scripts/perk_effects.gd index 9c37670..ab9504e 100644 --- a/scripts/perk_effects.gd +++ b/scripts/perk_effects.gd @@ -9,8 +9,17 @@ var available_perks: Array[Perk] = [] var fireball_aoe_enabled = false var throwing_knife_enabled = false var throwing_knife_cooldown: float = 2.0 +var throwing_knife_count: int = 1 var _knife_timer: float = 0.0 +var spellbook_scene = preload("res://scenes/spellbook.tscn") +var spellbook_count: int = 0 +var spellbook_damage: int = 12 +var spellbook_speed: float = 1.5 +const SPELLBOOK_RADIUS: float = 60.0 +var _spellbook_angle: float = 0.0 +var _spellbooks: Array = [] + func _ready() -> void: cauldron = witch.get_node("CauldronBar") var dsh = Perk.new() @@ -33,6 +42,11 @@ func _ready() -> void: tk.description = "Automatically throw a knife at the nearest enemy every second" tk.effect = enable_throwing_knife available_perks.append(tk) + var sb = Perk.new() + sb.name = "Spellbook" + sb.description = "A spellbook orbits the witch, dealing 12 damage to enemies it touches" + sb.effect = unlock_spellbook + available_perks.append(sb) func _process(delta: float) -> void: if throwing_knife_enabled: @@ -40,6 +54,11 @@ func _process(delta: float) -> void: if _knife_timer >= throwing_knife_cooldown: _knife_timer = 0.0 _shoot_throwing_knife() + if spellbook_count > 0: + _spellbook_angle += spellbook_speed * delta + for i in range(_spellbooks.size()): + var offset = (TAU / _spellbooks.size()) * i + _spellbooks[i].global_position = witch.global_position + Vector2(cos(_spellbook_angle + offset), sin(_spellbook_angle + offset)) * SPELLBOOK_RADIUS func double_shuriken(): witch.shuriken_count = 2 @@ -57,6 +76,20 @@ func enable_throwing_knife(): upg.description = "Reduce throwing knife cooldown by 0.2s (min 1s)" upg.effect = knife_cooldown_upgrade available_perks.append(upg) + var ek = Perk.new() + ek.name = "Extra Knife" + ek.description = "Throw one additional knife per attack (max 3)" + ek.effect = extra_knife + available_perks.append(ek) + +func extra_knife(): + throwing_knife_count = min(throwing_knife_count + 1, 3) + if throwing_knife_count < 3: + var ek = Perk.new() + ek.name = "Extra Knife" + ek.description = "Throw one additional knife per attack (max 3)" + ek.effect = extra_knife + available_perks.append(ek) func knife_cooldown_upgrade(): throwing_knife_cooldown = maxf(1.0, throwing_knife_cooldown - 0.2) @@ -68,7 +101,65 @@ func knife_cooldown_upgrade(): available_perks.append(upg) func _shoot_throwing_knife() -> void: - var knife = throwing_knife.instantiate() - knife.global_position = witch.global_position - witch.get_parent().add_child(knife) + for i in range(throwing_knife_count): + var knife = throwing_knife.instantiate() + knife.global_position = witch.global_position + witch.get_parent().add_child(knife) + +func unlock_spellbook() -> void: + spellbook_count = 1 + _rebuild_spellbooks() + var eb = Perk.new() + eb.name = "Extra Book" + eb.description = "Add another spellbook (max 5)" + eb.effect = extra_book + available_perks.append(eb) + var fo = Perk.new() + fo.name = "Faster Orbit" + fo.description = "Spellbooks orbit the witch faster" + fo.effect = faster_orbit + available_perks.append(fo) + var bd = Perk.new() + bd.name = "Book Damage" + bd.description = "Spellbooks deal 4 more damage" + bd.effect = book_damage + available_perks.append(bd) + +func extra_book() -> void: + spellbook_count = min(spellbook_count + 1, 5) + _rebuild_spellbooks() + if spellbook_count < 5: + var eb = Perk.new() + eb.name = "Extra Book" + eb.description = "Add another spellbook (max 5)" + eb.effect = extra_book + available_perks.append(eb) + +func faster_orbit() -> void: + spellbook_speed += 0.5 + var fo = Perk.new() + fo.name = "Faster Orbit" + fo.description = "Spellbooks orbit the witch faster" + fo.effect = faster_orbit + available_perks.append(fo) + +func book_damage() -> void: + spellbook_damage += 4 + for book in _spellbooks: + book.damage = spellbook_damage + var bd = Perk.new() + bd.name = "Book Damage" + bd.description = "Spellbooks deal 4 more damage" + bd.effect = book_damage + available_perks.append(bd) + +func _rebuild_spellbooks() -> void: + for book in _spellbooks: + book.queue_free() + _spellbooks.clear() + for i in range(spellbook_count): + var book = spellbook_scene.instantiate() + book.damage = spellbook_damage + witch.get_parent().add_child(book) + _spellbooks.append(book) diff --git a/scripts/player.gd b/scripts/player.gd index 084fc31..bdb8d90 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -1,9 +1,10 @@ extends CharacterBody2D @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D var current_xp = 0 -var max_xp =5 +var max_xp = 5 var level = 1 -var speed = 200 # speed in pixels/sec +var speed = 200 +var damage: int = 10 func _physics_process(delta): var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") diff --git a/scripts/shuriken.gd b/scripts/shuriken.gd index 081d14b..b8b55a1 100644 --- a/scripts/shuriken.gd +++ b/scripts/shuriken.gd @@ -6,6 +6,7 @@ var enemies_hit = 0 func _ready() -> void: speed = 500 super() + damage = 5 var first = get_nearest_enemy(global_position) if first == null: queue_free() @@ -15,7 +16,7 @@ func _ready() -> void: func _on_body_entered(body: Node2D) -> void: if body.is_in_group("enemies") and not body.is_hurt and not body.is_dying: enemies_hit += 1 - body.hit() + body.take_damage(damage) if enemies_hit == 20: queue_free() else: diff --git a/scripts/slime.gd b/scripts/slime.gd index 785b7cc..4c1febf 100644 --- a/scripts/slime.gd +++ b/scripts/slime.gd @@ -3,10 +3,12 @@ extends EnemyBase func _ready() -> void: super() speed = 15.0 + max_hp = 10 + hp = max_hp func _process(delta: float) -> void: super._process(delta) - if is_dying: + if is_dying or is_hurt: return _chase_witch() @@ -14,4 +16,4 @@ func _on_area_2d_body_entered(body: Node2D) -> void: if is_dying: return if body == player: - die() + take_damage(player.damage) diff --git a/scripts/spellbook.gd b/scripts/spellbook.gd new file mode 100644 index 0000000..fcf5426 --- /dev/null +++ b/scripts/spellbook.gd @@ -0,0 +1,18 @@ +extends Area2D + +var damage: int = 12 +var _hit_cooldowns: Dictionary = {} + +func _ready() -> void: + body_entered.connect(_on_body_entered) + +func _process(delta: float) -> void: + for enemy in _hit_cooldowns.keys(): + _hit_cooldowns[enemy] -= delta + if _hit_cooldowns[enemy] <= 0.0: + _hit_cooldowns.erase(enemy) + +func _on_body_entered(body: Node2D) -> void: + if body.is_in_group("enemies") and not _hit_cooldowns.has(body): + body.take_damage(damage) + _hit_cooldowns[body] = 0.8 diff --git a/scripts/spellbook.gd.uid b/scripts/spellbook.gd.uid new file mode 100644 index 0000000..aa54897 --- /dev/null +++ b/scripts/spellbook.gd.uid @@ -0,0 +1 @@ +uid://c6w6hhayguqoj diff --git a/scripts/throwing_knive.gd b/scripts/throwing_knive.gd index f7029be..26be2fd 100644 --- a/scripts/throwing_knive.gd +++ b/scripts/throwing_knive.gd @@ -5,6 +5,7 @@ var _target_enemy: Node = null func _ready() -> void: super() speed = 400.0 + damage = 12 var witch = get_node("/root/Game/Witch") _target_enemy = witch.get_nearest_enemy(witch.global_position, _knife_filter) if _target_enemy == null: