From b455b04d19bb477c46e2b8897c2a1d96d89bf9da Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 3 Jul 2025 13:46:35 +0500 Subject: [PATCH 1/7] sprites --- assets/sprites/atlases/almanach.png | Bin 0 -> 2046 bytes assets/sprites/atlases/almanach.png.import | 34 ++++++++++++++++++ assets/sprites/atlases/atlas2.png | Bin 8141 -> 8429 bytes assets/sprites/atlases/tile_animations.png | Bin 0 -> 1326 bytes .../atlases/tile_animations.png.import | 34 ++++++++++++++++++ assets/sprites/gui/almanach/book.tres | 3 ++ .../gui/almanach/description_panel.tres | 7 ++++ assets/sprites/gui/almanach/field.tres | 7 ++++ assets/sprites/gui/almanach/frame.tres | 7 ++++ assets/sprites/gui/almanach/panel.tres | 7 ++++ .../sprites/gui/almanach/premium_field.tres | 7 ++++ assets/sprites/gui/almanach/slider.tres | 7 ++++ assets/sprites/gui/almanach/slider_bg.tres | 7 ++++ scenes/main_menu.tscn | 3 ++ 14 files changed, 123 insertions(+) create mode 100644 assets/sprites/atlases/almanach.png create mode 100644 assets/sprites/atlases/almanach.png.import create mode 100644 assets/sprites/atlases/tile_animations.png create mode 100644 assets/sprites/atlases/tile_animations.png.import create mode 100644 assets/sprites/gui/almanach/book.tres create mode 100644 assets/sprites/gui/almanach/description_panel.tres create mode 100644 assets/sprites/gui/almanach/field.tres create mode 100644 assets/sprites/gui/almanach/frame.tres create mode 100644 assets/sprites/gui/almanach/panel.tres create mode 100644 assets/sprites/gui/almanach/premium_field.tres create mode 100644 assets/sprites/gui/almanach/slider.tres create mode 100644 assets/sprites/gui/almanach/slider_bg.tres diff --git a/assets/sprites/atlases/almanach.png b/assets/sprites/atlases/almanach.png new file mode 100644 index 0000000000000000000000000000000000000000..56f635a90485fbcb5dc747854b992a7d3a83ab93 GIT binary patch literal 2046 zcmVf=C900001b5ch_0Itp) z=>Px+xJg7oRCt{2onMF*RUF5ElNy`3XbQ#34J)O)_98-{SZ1q7{BzH5+g6PS;fr7ZWP^>7MDE?u3(7Ai=+?jJ{erL{| zbIyD}FL&?!J?#11-#Og`#-E7kw)n?JwvqL!D-8;t$`*J>BM zg+xUA-h3kOvRK36Pg8 zJlC>VLG^mmqT%z48W)_u)$sM}_nvHd*sjMHw%n%O%-p?CL_`fGo13_nS9y%5vv+0F zvf=ZK=(&NHrTe}6)gOr@5$WsdNL{`xIXiQw{&$nQolDyvN#<@g|1xc%zkf@^_wn&F z>|+JL+8?g`r(7;BJ6A1f_-;gO%R|bfq?I=ihAYbJrKef@Wx-F=|1>R&6~xYo**&~ep{w+$;#1tOOy8uOCdg?~rMPLI#fD|M8AhvQ~<2@Sw@bi}2*bD?w#C8E% z0YMl%%!p=_YBwDS!X#YbZ>`vAh1cE3MB}RCi&7xowqkv2f&UPjOL71ei zbXz5XAV3NPVZeTB|#^ZNg&7c)QyJ68m3QPqv?~69${Uxm}t#nDs?ZbM-$tC zAT8iN^;eg~av%r;F?z@lBZ;k11cCr55JWS!H#HChNWm~S14`Rh(%jAK)VXwd(`PWM ziJzLvEX2uU2oXdbG4H`yZ#sw|4902?XsG+)C)KVBYi>1t4wM(L$h!#IK?G4`WvF|0zniB zqDU5)_~t2$Vt^F$l(m2l&Qv|3ia+$m3K}^v+cJs-cfiLzJQciY%0wVYMsS*%TJ3^I zHoO+K&bkhwzwGaMw*xVX5K%pnkkDxj?n50pG5cuyW@@zyMn95?2%lC>O!VQzLL$#aAgYTobje^-g0%+e(XMGCU6BdcRaBe@}I?&fv9 z=Qfzh-NU^7Ca-CegK~)=5&=8Oz6syLvjTFNoa8-VrBe=S5Tsh%UvF9_E}iyNuISF( zy-yRDPJ2DHw%!Nn>EZr3^vOYiAcv3N)^Tj72_)g}8(!A)?E!XKbjd+P1=m}wXY6T$`g0}Sl}p+n9=0H+RY)EY&7|l-n##ixq_Sz& zxF*IlVO@bGh>4X^*)-esa`jDB+j_oM=qQgfeGs4rb`t}LX1*^a*s6W#D33Eu4A6r! zO$?;fgBC%=%Br4QQU4ybJg#EH`?T5)=s`ITB7Vk+5qu9u8fhyve2!Mqw2Q8{r*l1j z7#-#Dj$9t}#mXaL$Qbt-N7|ug+&PI+`ElnCcc`Pz@zU;n^$uR}PY#k!!O$_>0Te4E zZk?F83LhtGnJ92rDbuA|EUvC(dk<}Nk)mZ!CT8u^HAuNWu7J=N1 z9@u#h(<;QYCeIbvnN-s%#57@DL8*x;dZiR$n5)#pm=;Aq_BhkTEoIMc)+4`R^$AmAYw=1M>xq!>8U z2gw5rb3x%js$Bu(K_r;?Yz)XAbW#<-Fjs+%)Ek~53Gb|npC^_5QbUUPr;E!eR5<~00>;TH zl0*a!TtQy^R#0jF@NewD0szPPU#C73iaZQD+3BlE6Jvh@z1$uBM z4`Nz*T)~+Lg6CokyI}|v17`%m{2;htNQ!Aqo+~&bNFEUcHw=No#Fr))# c1Oa;ZABTYTTId;=mjD0&07*qoM6N<$g8zTA?EnA( literal 0 HcmV?d00001 diff --git a/assets/sprites/atlases/almanach.png.import b/assets/sprites/atlases/almanach.png.import new file mode 100644 index 0000000..dab95cb --- /dev/null +++ b/assets/sprites/atlases/almanach.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://do8e21lxo0xiu" +path="res://.godot/imported/almanach.png-1b0cb0349d268e403872b63f07361b9a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/atlases/almanach.png" +dest_files=["res://.godot/imported/almanach.png-1b0cb0349d268e403872b63f07361b9a.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/sprites/atlases/atlas2.png b/assets/sprites/atlases/atlas2.png index fbc6272d4494a1b73e25f28cdf034d79ca75932e..9f5e8fe414c0692fed13351c84b968b3682c363e 100644 GIT binary patch literal 8429 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 P{MR!!f*BTHb9(+i3Lw;C literal 8141 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 b9Ucz&qCDe&EhIZq@}(hzBZBw=#H)V;fRl3J literal 0 HcmV?d00001 diff --git a/assets/sprites/atlases/tile_animations.png.import b/assets/sprites/atlases/tile_animations.png.import new file mode 100644 index 0000000..1bdcfcb --- /dev/null +++ b/assets/sprites/atlases/tile_animations.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://k60ylegy845j" +path="res://.godot/imported/tile_animations.png-ebed5638cb5445e829528a589cd85313.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/atlases/tile_animations.png" +dest_files=["res://.godot/imported/tile_animations.png-ebed5638cb5445e829528a589cd85313.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/sprites/gui/almanach/book.tres b/assets/sprites/gui/almanach/book.tres new file mode 100644 index 0000000..4a0648e --- /dev/null +++ b/assets/sprites/gui/almanach/book.tres @@ -0,0 +1,3 @@ +[gd_resource type="AtlasTexture" format=3 uid="uid://drydueofrb448"] + +[resource] diff --git a/assets/sprites/gui/almanach/description_panel.tres b/assets/sprites/gui/almanach/description_panel.tres new file mode 100644 index 0000000..362e309 --- /dev/null +++ b/assets/sprites/gui/almanach/description_panel.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://blr2uchlakvor"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_bs0nq"] + +[resource] +atlas = ExtResource("1_bs0nq") +region = Rect2(77, 1, 14, 11) diff --git a/assets/sprites/gui/almanach/field.tres b/assets/sprites/gui/almanach/field.tres new file mode 100644 index 0000000..04e5106 --- /dev/null +++ b/assets/sprites/gui/almanach/field.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dijnflg18vcny"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_uiurq"] + +[resource] +atlas = ExtResource("1_uiurq") +region = Rect2(0, 77, 65, 65) diff --git a/assets/sprites/gui/almanach/frame.tres b/assets/sprites/gui/almanach/frame.tres new file mode 100644 index 0000000..4a8d116 --- /dev/null +++ b/assets/sprites/gui/almanach/frame.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bq8n778sk4qnv"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_0oxph"] + +[resource] +atlas = ExtResource("1_0oxph") +region = Rect2(0, 0, 77, 77) diff --git a/assets/sprites/gui/almanach/panel.tres b/assets/sprites/gui/almanach/panel.tres new file mode 100644 index 0000000..4cf5060 --- /dev/null +++ b/assets/sprites/gui/almanach/panel.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bpu36d1k7nhlr"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_ssf44"] + +[resource] +atlas = ExtResource("1_ssf44") +region = Rect2(77, 59, 18, 18) diff --git a/assets/sprites/gui/almanach/premium_field.tres b/assets/sprites/gui/almanach/premium_field.tres new file mode 100644 index 0000000..e90c63f --- /dev/null +++ b/assets/sprites/gui/almanach/premium_field.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dhf2opi0brx23"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_f4ggm"] + +[resource] +atlas = ExtResource("1_f4ggm") +region = Rect2(65, 77, 65, 65) diff --git a/assets/sprites/gui/almanach/slider.tres b/assets/sprites/gui/almanach/slider.tres new file mode 100644 index 0000000..f72040e --- /dev/null +++ b/assets/sprites/gui/almanach/slider.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bfvxhx5xfe3n8"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_bhmex"] + +[resource] +atlas = ExtResource("1_bhmex") +region = Rect2(77, 27, 15, 32) diff --git a/assets/sprites/gui/almanach/slider_bg.tres b/assets/sprites/gui/almanach/slider_bg.tres new file mode 100644 index 0000000..179a60e --- /dev/null +++ b/assets/sprites/gui/almanach/slider_bg.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://drvrnblf2fvgk"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_o3v7f"] + +[resource] +atlas = ExtResource("1_o3v7f") +region = Rect2(0, 0, 77, 77) diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn index bba1053..818e484 100644 --- a/scenes/main_menu.tscn +++ b/scenes/main_menu.tscn @@ -43,8 +43,10 @@ grow_vertical = 2 script = SubResource("GDScript_5dd4i") [node name="PrototypeWindow" type="AcceptDialog" parent="."] +canvas_item_default_texture_filter = 0 title = "" size = Vector2i(600, 400) +visible = true unresizable = true borderless = true theme_override_styles/panel = SubResource("StyleBoxTexture_jl0ue") @@ -80,6 +82,7 @@ scroll_active = false script = ExtResource("2_5dd4i") [node name="AboutWindow" type="AcceptDialog" parent="."] +canvas_item_default_texture_filter = 0 title = "" initial_position = 2 size = Vector2i(300, 300) From 008fa31dd4afbf0620cc890627082e772cf53b24 Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 3 Jul 2025 15:10:53 +0500 Subject: [PATCH 2/7] fixed blur --- scenes/main_menu.tscn | 1 - 1 file changed, 1 deletion(-) diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn index 818e484..41394d7 100644 --- a/scenes/main_menu.tscn +++ b/scenes/main_menu.tscn @@ -88,7 +88,6 @@ initial_position = 2 size = Vector2i(300, 300) unresizable = true borderless = true -theme_override_styles/panel = SubResource("StyleBoxTexture_jl0ue") ok_button_text = "Close" [node name="ScrollContainer" type="ScrollContainer" parent="AboutWindow"] From b932e8255574a014ee928dafab519ebf48be99cd Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 3 Jul 2025 19:34:09 +0500 Subject: [PATCH 3/7] Almanach --- assets/sprites/atlases/almanach.png | Bin 2046 -> 1574 bytes assets/sprites/gui/almanach/book.tres | 6 +- assets/sprites/gui/almanach/decrement.tres | 7 + assets/sprites/gui/almanach/decrement_h.tres | 7 + .../gui/almanach/description_panel.tres | 2 +- assets/sprites/gui/almanach/holder.tres | 7 + assets/sprites/gui/almanach/increment.tres | 7 + assets/sprites/gui/almanach/increment_h.tres | 7 + assets/sprites/gui/almanach/menu.tres | 7 + assets/sprites/gui/almanach/slider_bg.tres | 2 +- assets/sprites/gui/almanach/slider_h.tres | 7 + assets/sprites/gui/almanach/tab.tres | 7 + assets/sprites/gui/almanach/tab_disabled.tres | 7 + resources/plants/Aloe.tres | 4 +- resources/themes/GameStyle.tres | 167 ++++++++++++++++- resources/zombies/basic.tres | 13 +- resources/zombies/buckethead.tres | 13 +- resources/zombies/conehead.tres | 13 +- resources/zombies/hobo.tres | 13 +- scenes/gui/almanach.tscn | 171 ++++++++++++++++++ scripts/components/IEntity.cs | 4 +- .../components/gui/almanach/AlmanachGrid.cs | 36 ++++ .../gui/almanach/AlmanachGrid.cs.uid | 1 + .../gui/choose_your_seeds/GridLoader.cs | 2 +- .../gui/choose_your_seeds/Previewport.cs | 13 +- .../gui/seedpackets/AlmanachHandler.cs | 10 + .../gui/seedpackets/AlmanachHandler.cs.uid | 1 + .../gui/seedpackets/ChoosableHandler.cs | 2 +- .../gui/seedpackets/HotbarHandler.cs | 4 +- .../components/gui/seedpackets/Seedpacket.cs | 6 +- scripts/components/level/PlantField.cs | 12 +- scripts/components/level/RuntimeLevelData.cs | 8 +- .../zombe_spawners/SurvivalZombieSpawner.cs | 26 +-- .../level/zombe_spawners/ZombieSequencer.cs | 2 +- .../components/zombies/RuntimeZombieData.cs | 14 +- scripts/resources/DisplayResource.cs | 20 ++ scripts/resources/DisplayResource.cs.uid | 1 + scripts/resources/PlantResource.cs | 18 +- scripts/resources/ZombieResource.cs | 6 +- 39 files changed, 575 insertions(+), 78 deletions(-) create mode 100644 assets/sprites/gui/almanach/decrement.tres create mode 100644 assets/sprites/gui/almanach/decrement_h.tres create mode 100644 assets/sprites/gui/almanach/holder.tres create mode 100644 assets/sprites/gui/almanach/increment.tres create mode 100644 assets/sprites/gui/almanach/increment_h.tres create mode 100644 assets/sprites/gui/almanach/menu.tres create mode 100644 assets/sprites/gui/almanach/slider_h.tres create mode 100644 assets/sprites/gui/almanach/tab.tres create mode 100644 assets/sprites/gui/almanach/tab_disabled.tres create mode 100644 scenes/gui/almanach.tscn create mode 100644 scripts/components/gui/almanach/AlmanachGrid.cs create mode 100644 scripts/components/gui/almanach/AlmanachGrid.cs.uid create mode 100644 scripts/components/gui/seedpackets/AlmanachHandler.cs create mode 100644 scripts/components/gui/seedpackets/AlmanachHandler.cs.uid create mode 100644 scripts/resources/DisplayResource.cs create mode 100644 scripts/resources/DisplayResource.cs.uid diff --git a/assets/sprites/atlases/almanach.png b/assets/sprites/atlases/almanach.png index 56f635a90485fbcb5dc747854b992a7d3a83ab93..49c0ee13309d88a6d1770ad0e1d6314f176b66b7 100644 GIT binary patch literal 1574 zcmV+>2HE+EP)Px#Z%|BBMF0Q*|FyO2R!h2JR^w?_|B+_$re6QGaR20Z|NraH|8S4qT|A?3X8+?o zZg5Se|1v&LOIxcaCpJSvPhenhetwU_!qG=NcrqzRJ|jm$Bt=>#US2U0000bbW%=J0RR90|NsC0|NsC0|NsC0|NsC0|NsC0 z|NsC0|NsC0|NsC0|EQf2djJ3hG)Y83RCt{2+ih=~Fc1J>KA1WaB$1F7$x`wmlK=m2 zocxO4Ft#~^S-ELloTcs4>-jiB(tRPLdmGX5n9@Q#7zLv<;@iW;_btA@SaI(}(qiJ+ z@Rv2g-~I*_oU3xHxu29^T-5g%W9(#P-=Y4<|c;8Wnh!LvOzglY0=LQbv~M2!R@w&!+n)-h0Mi!N>rF8<+v5K8BMj^kp<#V6p>UOzc-hU`+Kb}#P5J=s<}8TaZ87x%2( z`dbY{a%uGu2a-#XY78gg25NUL4&+jwn-CW_f!i5gb>g1>(xGFx)a2&9Fe{0BgX4DW z0xlmIdYbTA`2o!B*cE5zIxb{Da~YV{!h&<{4Fn>z0+#EvEqE^|*K4xiUTCgy6h!kF?T5xBrTS>f2>&2DzB~eyrA!!@JF1- z%;h=I)L*6mp8{-y4*XfEtvzLTVMGCOcTq0%zGJDyn22?TFT7Y68RBSo^ zmvM)2@yzIWF3}Bwi1ZF)Vs?|XQSLK=>pX^Ss=1dj?vT3G4(BrCkh;~<8W}kEV{@f9 zeXETOB|eVw4!-pJ0t|PqT}p+@H_;eVXp~=ab!%|4iZ@ena01KZegmvhRLGV_4p5(Yg$VQ_9=3+o^ZE zs@*j#Z?$~x7~>Yy?)-EEnYD|>0Gr)1t~HTGpX;-=1zvD&VA)u9%>j}x`MbbEV27Ik zuCUdt0kR|d9c#WfzZk%|&Hzb}Ui#krVu;pmLAV2?J5ScE-GYz}OxG7-hVsHjX zqca4ioa1ZP9Uxh!;LFfe&+O#F_g!~@BytfNA@jM>>=tpI0n%MIRt#PFM7DLS?K?nj zE{2^4$oy&m;Fb=M$IQDM2FR`4g4i%X9?{6;0C~Ha1LW=2_5gVkKs7+hWvkqq^r?xA zuUEN8oVbet(&wfOkom<6!JTVY4Un=HYG?NvAZv09V#5HL!iArAf6V}S6gM@1i=lMh zE#n^c{BFhUj;G>AYq!B-h-J6=t+xHTT281-fV0#w2bSUolUEM+&90j{>ER~vW6YO> z71Rp*d)Kbr=r1}P?Qm1H4RKSv4Hd)Y?C!hO{zGoG7z*OZ?6${^X7^;p&>nYl-~Bz@ Yf5~n~Vhn?Pw*UYD07*qoM6N<$g6GgMl>h($ literal 2046 zcmVf=C900001b5ch_0Itp) z=>Px+xJg7oRCt{2onMF*RUF5ElNy`3XbQ#34J)O)_98-{SZ1q7{BzH5+g6PS;fr7ZWP^>7MDE?u3(7Ai=+?jJ{erL{| zbIyD}FL&?!J?#11-#Og`#-E7kw)n?JwvqL!D-8;t$`*J>BM zg+xUA-h3kOvRK36Pg8 zJlC>VLG^mmqT%z48W)_u)$sM}_nvHd*sjMHw%n%O%-p?CL_`fGo13_nS9y%5vv+0F zvf=ZK=(&NHrTe}6)gOr@5$WsdNL{`xIXiQw{&$nQolDyvN#<@g|1xc%zkf@^_wn&F z>|+JL+8?g`r(7;BJ6A1f_-;gO%R|bfq?I=ihAYbJrKef@Wx-F=|1>R&6~xYo**&~ep{w+$;#1tOOy8uOCdg?~rMPLI#fD|M8AhvQ~<2@Sw@bi}2*bD?w#C8E% z0YMl%%!p=_YBwDS!X#YbZ>`vAh1cE3MB}RCi&7xowqkv2f&UPjOL71ei zbXz5XAV3NPVZeTB|#^ZNg&7c)QyJ68m3QPqv?~69${Uxm}t#nDs?ZbM-$tC zAT8iN^;eg~av%r;F?z@lBZ;k11cCr55JWS!H#HChNWm~S14`Rh(%jAK)VXwd(`PWM ziJzLvEX2uU2oXdbG4H`yZ#sw|4902?XsG+)C)KVBYi>1t4wM(L$h!#IK?G4`WvF|0zniB zqDU5)_~t2$Vt^F$l(m2l&Qv|3ia+$m3K}^v+cJs-cfiLzJQciY%0wVYMsS*%TJ3^I zHoO+K&bkhwzwGaMw*xVX5K%pnkkDxj?n50pG5cuyW@@zyMn95?2%lC>O!VQzLL$#aAgYTobje^-g0%+e(XMGCU6BdcRaBe@}I?&fv9 z=Qfzh-NU^7Ca-CegK~)=5&=8Oz6syLvjTFNoa8-VrBe=S5Tsh%UvF9_E}iyNuISF( zy-yRDPJ2DHw%!Nn>EZr3^vOYiAcv3N)^Tj72_)g}8(!A)?E!XKbjd+P1=m}wXY6T$`g0}Sl}p+n9=0H+RY)EY&7|l-n##ixq_Sz& zxF*IlVO@bGh>4X^*)-esa`jDB+j_oM=qQgfeGs4rb`t}LX1*^a*s6W#D33Eu4A6r! zO$?;fgBC%=%Br4QQU4ybJg#EH`?T5)=s`ITB7Vk+5qu9u8fhyve2!Mqw2Q8{r*l1j z7#-#Dj$9t}#mXaL$Qbt-N7|ug+&PI+`ElnCcc`Pz@zU;n^$uR}PY#k!!O$_>0Te4E zZk?F83LhtGnJ92rDbuA|EUvC(dk<}Nk)mZ!CT8u^HAuNWu7J=N1 z9@u#h(<;QYCeIbvnN-s%#57@DL8*x;dZiR$n5)#pm=;Aq_BhkTEoIMc)+4`R^$AmAYw=1M>xq!>8U z2gw5rb3x%js$Bu(K_r;?Yz)XAbW#<-Fjs+%)Ek~53Gb|npC^_5QbUUPr;E!eR5<~00>;TH zl0*a!TtQy^R#0jF@NewD0szPPU#C73iaZQD+3BlE6Jvh@z1$uBM z4`Nz*T)~+Lg6CokyI}|v17`%m{2;htNQ!Aqo+~&bNFEUcHw=No#Fr))# c1Oa;ZABTYTTId;=mjD0&07*qoM6N<$g8zTA?EnA( diff --git a/assets/sprites/gui/almanach/book.tres b/assets/sprites/gui/almanach/book.tres index 4a0648e..38c3363 100644 --- a/assets/sprites/gui/almanach/book.tres +++ b/assets/sprites/gui/almanach/book.tres @@ -1,3 +1,7 @@ -[gd_resource type="AtlasTexture" format=3 uid="uid://drydueofrb448"] +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://drydueofrb448"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_hdhpm"] [resource] +atlas = ExtResource("1_hdhpm") +region = Rect2(95, 62, 27, 15) diff --git a/assets/sprites/gui/almanach/decrement.tres b/assets/sprites/gui/almanach/decrement.tres new file mode 100644 index 0000000..c68089f --- /dev/null +++ b/assets/sprites/gui/almanach/decrement.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://lg1o4pu0n0u6"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_dv0v8"] + +[resource] +atlas = ExtResource("1_dv0v8") +region = Rect2(130, 92, 15, 15) diff --git a/assets/sprites/gui/almanach/decrement_h.tres b/assets/sprites/gui/almanach/decrement_h.tres new file mode 100644 index 0000000..f566231 --- /dev/null +++ b/assets/sprites/gui/almanach/decrement_h.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cdyfech0howdr"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_ldu2x"] + +[resource] +atlas = ExtResource("1_ldu2x") +region = Rect2(130, 107, 15, 15) diff --git a/assets/sprites/gui/almanach/description_panel.tres b/assets/sprites/gui/almanach/description_panel.tres index 362e309..fa7498e 100644 --- a/assets/sprites/gui/almanach/description_panel.tres +++ b/assets/sprites/gui/almanach/description_panel.tres @@ -4,4 +4,4 @@ [resource] atlas = ExtResource("1_bs0nq") -region = Rect2(77, 1, 14, 11) +region = Rect2(77, 0, 14, 12) diff --git a/assets/sprites/gui/almanach/holder.tres b/assets/sprites/gui/almanach/holder.tres new file mode 100644 index 0000000..f768670 --- /dev/null +++ b/assets/sprites/gui/almanach/holder.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dpfkai158kyfu"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_h0vdo"] + +[resource] +atlas = ExtResource("1_h0vdo") +region = Rect2(145, 78, 6, 14) diff --git a/assets/sprites/gui/almanach/increment.tres b/assets/sprites/gui/almanach/increment.tres new file mode 100644 index 0000000..f47bfb9 --- /dev/null +++ b/assets/sprites/gui/almanach/increment.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://vpuytn3nd6c1"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_6uq3c"] + +[resource] +atlas = ExtResource("1_6uq3c") +region = Rect2(145, 92, 15, 15) diff --git a/assets/sprites/gui/almanach/increment_h.tres b/assets/sprites/gui/almanach/increment_h.tres new file mode 100644 index 0000000..a62ae9d --- /dev/null +++ b/assets/sprites/gui/almanach/increment_h.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cnio0bw2xla23"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_ya6ma"] + +[resource] +atlas = ExtResource("1_ya6ma") +region = Rect2(145, 107, 15, 15) diff --git a/assets/sprites/gui/almanach/menu.tres b/assets/sprites/gui/almanach/menu.tres new file mode 100644 index 0000000..978a980 --- /dev/null +++ b/assets/sprites/gui/almanach/menu.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://4cdp0k17u2l5"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_vdcpr"] + +[resource] +atlas = ExtResource("1_vdcpr") +region = Rect2(152, 77, 4, 14) diff --git a/assets/sprites/gui/almanach/slider_bg.tres b/assets/sprites/gui/almanach/slider_bg.tres index 179a60e..2ce91a3 100644 --- a/assets/sprites/gui/almanach/slider_bg.tres +++ b/assets/sprites/gui/almanach/slider_bg.tres @@ -4,4 +4,4 @@ [resource] atlas = ExtResource("1_o3v7f") -region = Rect2(0, 0, 77, 77) +region = Rect2(77, 12, 15, 15) diff --git a/assets/sprites/gui/almanach/slider_h.tres b/assets/sprites/gui/almanach/slider_h.tres new file mode 100644 index 0000000..e4bcd8b --- /dev/null +++ b/assets/sprites/gui/almanach/slider_h.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cc8jaddr5lww3"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_q7xbj"] + +[resource] +atlas = ExtResource("1_q7xbj") +region = Rect2(136, 0, 32, 15) diff --git a/assets/sprites/gui/almanach/tab.tres b/assets/sprites/gui/almanach/tab.tres new file mode 100644 index 0000000..fbf3142 --- /dev/null +++ b/assets/sprites/gui/almanach/tab.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://2bk8ce82cmw"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_a3eui"] + +[resource] +atlas = ExtResource("1_a3eui") +region = Rect2(122, 65, 22, 12) diff --git a/assets/sprites/gui/almanach/tab_disabled.tres b/assets/sprites/gui/almanach/tab_disabled.tres new file mode 100644 index 0000000..13cf564 --- /dev/null +++ b/assets/sprites/gui/almanach/tab_disabled.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dssr8m4gbpks4"] + +[ext_resource type="Texture2D" uid="uid://do8e21lxo0xiu" path="res://assets/sprites/atlases/almanach.png" id="1_4d61d"] + +[resource] +atlas = ExtResource("1_4d61d") +region = Rect2(144, 65, 22, 12) diff --git a/resources/plants/Aloe.tres b/resources/plants/Aloe.tres index 0240395..ae8d7ba 100644 --- a/resources/plants/Aloe.tres +++ b/resources/plants/Aloe.tres @@ -18,16 +18,16 @@ metadata/_custom_type_script = "uid://3m7xks3xq3hl" [resource] script = ExtResource("1_vw2kg") +Layer = 1 display_name = "Aloe" display_description = "[p]Aloe heals injured plants.[/p] [p]Health points: [color=DARK_RED]3 bites[/color][/p] [p]Reload time: [color=DARK_RED]15 seconds[/color].[/p] [p]Ability recharge time: [color=DARK_RED]20 seconds[/color].[/p] [p]Heals plant when it has [color=DARK_RED]third[/color] of its health.[/p]" -Cost = 75 +Cost = 75.0 Scene = ExtResource("2_6a4ia") ReloadTime = 15.0 ReloadProgress = 0.0 Preview = ExtResource("1_t4137") -Layer = 1 customFrame = SubResource("Resource_5me4i") diff --git a/resources/themes/GameStyle.tres b/resources/themes/GameStyle.tres index 0233b06..42764e6 100644 --- a/resources/themes/GameStyle.tres +++ b/resources/themes/GameStyle.tres @@ -1,11 +1,22 @@ -[gd_resource type="Theme" load_steps=13 format=3 uid="uid://b8l285cjcgeyi"] +[gd_resource type="Theme" load_steps=40 format=3 uid="uid://b8l285cjcgeyi"] [ext_resource type="FontFile" uid="uid://nbrt5q3t8tud" path="res://assets/fonts/pico12.ttf" id="1_103to"] [ext_resource type="Texture2D" uid="uid://d0yhee0scl7mc" path="res://assets/sprites/gui/ButtonBackground.tres" id="1_y0kbp"] [ext_resource type="Texture2D" uid="uid://dxmg20mrnpt8r" path="res://assets/sprites/gui/SelectionGeneric.tres" id="2_h0nd2"] [ext_resource type="Texture2D" uid="uid://b5skdm3q7tkh3" path="res://assets/sprites/gui/ChooseYourSeeds/Grabber.tres" id="3_i6w8j"] +[ext_resource type="Texture2D" uid="uid://cc8jaddr5lww3" path="res://assets/sprites/gui/almanach/slider_h.tres" id="3_nec55"] [ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="3_yeah5"] [ext_resource type="Texture2D" uid="uid://cv255d4s0qopj" path="res://assets/sprites/gui/ChooseYourSeeds/Slider.tres" id="4_yeah5"] +[ext_resource type="Texture2D" uid="uid://lg1o4pu0n0u6" path="res://assets/sprites/gui/almanach/decrement.tres" id="5_ij6vn"] +[ext_resource type="Texture2D" uid="uid://dssr8m4gbpks4" path="res://assets/sprites/gui/almanach/tab_disabled.tres" id="5_w6b64"] +[ext_resource type="Texture2D" uid="uid://cdyfech0howdr" path="res://assets/sprites/gui/almanach/decrement_h.tres" id="6_nec55"] +[ext_resource type="Texture2D" uid="uid://2bk8ce82cmw" path="res://assets/sprites/gui/almanach/tab.tres" id="6_ygj8j"] +[ext_resource type="Texture2D" uid="uid://blr2uchlakvor" path="res://assets/sprites/gui/almanach/description_panel.tres" id="7_5pe7g"] +[ext_resource type="Texture2D" uid="uid://dpfkai158kyfu" path="res://assets/sprites/gui/almanach/holder.tres" id="7_ls06u"] +[ext_resource type="Texture2D" uid="uid://vpuytn3nd6c1" path="res://assets/sprites/gui/almanach/increment.tres" id="8_csc22"] +[ext_resource type="Texture2D" uid="uid://cnio0bw2xla23" path="res://assets/sprites/gui/almanach/increment_h.tres" id="9_r6ela"] +[ext_resource type="Texture2D" uid="uid://4cdp0k17u2l5" path="res://assets/sprites/gui/almanach/menu.tres" id="10_vatwx"] +[ext_resource type="Texture2D" uid="uid://drvrnblf2fvgk" path="res://assets/sprites/gui/almanach/slider_bg.tres" id="14_3qjha"] [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_na4u2"] texture = ExtResource("1_y0kbp") @@ -24,6 +35,55 @@ axis_stretch_horizontal = 1 axis_stretch_vertical = 1 draw_center = false +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_csc22"] +texture = ExtResource("3_nec55") +texture_margin_left = 7.0 +texture_margin_top = 4.0 +texture_margin_right = 7.0 +texture_margin_bottom = 4.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_r6ela"] +texture = ExtResource("14_3qjha") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_vatwx"] +texture = ExtResource("14_3qjha") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_ij6vn"] +texture = ExtResource("4_yeah5") +texture_margin_left = 5.0 +texture_margin_top = 5.0 +texture_margin_right = 5.0 +texture_margin_bottom = 5.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_nec55"] +texture = ExtResource("4_yeah5") +texture_margin_left = 5.0 +texture_margin_top = 5.0 +texture_margin_right = 5.0 +texture_margin_bottom = 5.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_ls06u"] +texture = ExtResource("4_yeah5") +texture_margin_left = 5.0 +texture_margin_top = 5.0 +texture_margin_right = 5.0 +texture_margin_bottom = 5.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_jjopa"] +texture = ExtResource("7_5pe7g") +texture_margin_left = 4.0 +texture_margin_top = 5.0 +texture_margin_right = 7.0 +texture_margin_bottom = 4.0 + [sub_resource type="AtlasTexture" id="AtlasTexture_5pe7g"] atlas = ExtResource("3_yeah5") region = Rect2(226, 77, 18, 18) @@ -42,6 +102,62 @@ texture_margin_top = 6.0 texture_margin_right = 6.0 texture_margin_bottom = 6.0 +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_g0cdn"] +texture = SubResource("AtlasTexture_5pe7g") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_gl5ke"] +texture = ExtResource("5_w6b64") +texture_margin_left = 8.0 +texture_margin_top = 6.0 +texture_margin_right = 8.0 +texture_margin_bottom = 1.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_xmjd3"] +texture = ExtResource("6_ygj8j") +texture_margin_left = 8.0 +texture_margin_top = 6.0 +texture_margin_right = 8.0 +texture_margin_bottom = 1.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_3qjha"] +texture = SubResource("AtlasTexture_5pe7g") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_gvd6y"] +texture = ExtResource("3_i6w8j") +texture_margin_left = 4.0 +texture_margin_top = 7.0 +texture_margin_right = 4.0 +texture_margin_bottom = 7.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_epvq8"] +texture = ExtResource("3_i6w8j") +texture_margin_left = 4.0 +texture_margin_top = 7.0 +texture_margin_right = 4.0 +texture_margin_bottom = 7.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_lfl2m"] +texture = ExtResource("3_i6w8j") +texture_margin_left = 4.0 +texture_margin_top = 7.0 +texture_margin_right = 4.0 +texture_margin_bottom = 7.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_41q1p"] +texture = ExtResource("14_3qjha") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_5pe7g"] texture = ExtResource("4_yeah5") texture_margin_left = 5.0 @@ -49,6 +165,13 @@ texture_margin_top = 5.0 texture_margin_right = 5.0 texture_margin_bottom = 5.0 +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_chra8"] +texture = ExtResource("7_5pe7g") +texture_margin_left = 4.0 +texture_margin_top = 5.0 +texture_margin_right = 7.0 +texture_margin_bottom = 4.0 + [resource] default_font = ExtResource("1_103to") Button/colors/font_color = Color(0, 0, 0, 1) @@ -60,11 +183,53 @@ Button/styles/focus = SubResource("StyleBoxTexture_mv7jy") Button/styles/hover = SubResource("StyleBoxTexture_na4u2") Button/styles/normal = SubResource("StyleBoxTexture_na4u2") Button/styles/pressed = SubResource("StyleBoxTexture_na4u2") +HScrollBar/styles/grabber = SubResource("StyleBoxTexture_csc22") +HScrollBar/styles/grabber_highlight = SubResource("StyleBoxTexture_csc22") +HScrollBar/styles/grabber_pressed = SubResource("StyleBoxTexture_csc22") +HScrollBar/styles/scroll = SubResource("StyleBoxTexture_r6ela") +HScrollBar/styles/scroll_focus = SubResource("StyleBoxTexture_vatwx") +HSlider/icons/grabber = ExtResource("3_nec55") +HSlider/icons/grabber_disabled = ExtResource("3_nec55") +HSlider/icons/grabber_highlight = ExtResource("3_nec55") +HSlider/styles/grabber_area = SubResource("StyleBoxTexture_ij6vn") +HSlider/styles/grabber_area_highlight = SubResource("StyleBoxTexture_nec55") +HSlider/styles/slider = SubResource("StyleBoxTexture_ls06u") +LineEdit/colors/font_color = Color(0, 0, 0, 1) +LineEdit/colors/font_selected_color = Color(0, 0, 0, 1) +LineEdit/colors/font_uneditable_color = Color(0, 0, 0, 0.501961) +LineEdit/styles/focus = SubResource("StyleBoxTexture_jjopa") +LineEdit/styles/normal = SubResource("StyleBoxTexture_jjopa") +LineEdit/styles/read_only = SubResource("StyleBoxTexture_jjopa") Panel/styles/panel = SubResource("StyleBoxTexture_pjyej") PanelContainer/styles/panel = SubResource("StyleBoxTexture_w6b64") +TabContainer/icons/decrement = ExtResource("5_ij6vn") +TabContainer/icons/decrement_highlight = ExtResource("6_nec55") +TabContainer/icons/drop_mark = ExtResource("7_ls06u") +TabContainer/icons/increment = ExtResource("8_csc22") +TabContainer/icons/increment_highlight = ExtResource("9_r6ela") +TabContainer/icons/menu = ExtResource("10_vatwx") +TabContainer/icons/menu_highlight = ExtResource("10_vatwx") +TabContainer/styles/panel = SubResource("StyleBoxTexture_g0cdn") +TabContainer/styles/tab_disabled = SubResource("StyleBoxTexture_gl5ke") +TabContainer/styles/tab_focus = SubResource("StyleBoxTexture_xmjd3") +TabContainer/styles/tab_hovered = SubResource("StyleBoxTexture_xmjd3") +TabContainer/styles/tab_selected = SubResource("StyleBoxTexture_xmjd3") +TabContainer/styles/tab_unselected = SubResource("StyleBoxTexture_gl5ke") +TextEdit/colors/font_color = Color(0, 0, 0, 1) +TextEdit/styles/focus = SubResource("StyleBoxTexture_jjopa") +TextEdit/styles/normal = SubResource("StyleBoxTexture_jjopa") +TextEdit/styles/read_only = SubResource("StyleBoxTexture_jjopa") +Tree/styles/panel = SubResource("StyleBoxTexture_3qjha") +VScrollBar/styles/grabber = SubResource("StyleBoxTexture_gvd6y") +VScrollBar/styles/grabber_highlight = SubResource("StyleBoxTexture_epvq8") +VScrollBar/styles/grabber_pressed = SubResource("StyleBoxTexture_lfl2m") +VScrollBar/styles/scroll = SubResource("StyleBoxTexture_41q1p") +VScrollBar/styles/scroll_focus = SubResource("StyleBoxTexture_41q1p") VSlider/icons/grabber = ExtResource("3_i6w8j") VSlider/icons/grabber_disabled = ExtResource("3_i6w8j") VSlider/icons/grabber_highlight = ExtResource("3_i6w8j") VSlider/styles/grabber_area = SubResource("StyleBoxTexture_5pe7g") VSlider/styles/grabber_area_highlight = SubResource("StyleBoxTexture_5pe7g") VSlider/styles/slider = SubResource("StyleBoxTexture_5pe7g") +description_panel_container/base_type = &"PanelContainer" +description_panel_container/styles/panel = SubResource("StyleBoxTexture_chra8") diff --git a/resources/zombies/basic.tres b/resources/zombies/basic.tres index e26d47f..2df65fa 100644 --- a/resources/zombies/basic.tres +++ b/resources/zombies/basic.tres @@ -1,10 +1,17 @@ -[gd_resource type="Resource" script_class="ZombieResource" load_steps=3 format=3 uid="uid://buvacn56kyy2p"] +[gd_resource type="Resource" script_class="ZombieResource" load_steps=4 format=3 uid="uid://buvacn56kyy2p"] [ext_resource type="PackedScene" uid="uid://co11v3w8hbwgf" path="res://scenes/entities/Zombies/zombie.tscn" id="1_c2mq3"] [ext_resource type="Script" uid="uid://cqxj7o8hdm82n" path="res://scripts/resources/ZombieResource.cs" id="1_k277m"] +[ext_resource type="Texture2D" uid="uid://bwdqbrnn7ygtr" path="res://assets/sprites/atlases/zombies/Зондби.png" id="1_l6de4"] [resource] script = ExtResource("1_k277m") -cost = 1 -scene = ExtResource("1_c2mq3") +display_name = "Basic zombie" +display_description = "" +Cost = 1.0 +Scene = ExtResource("1_c2mq3") +ReloadTime = 1.0 +ReloadProgress = 0.0 +Preview = ExtResource("1_l6de4") +Layer = 1 metadata/_custom_type_script = "uid://cqxj7o8hdm82n" diff --git a/resources/zombies/buckethead.tres b/resources/zombies/buckethead.tres index 2721cfd..06eb9bf 100644 --- a/resources/zombies/buckethead.tres +++ b/resources/zombies/buckethead.tres @@ -1,10 +1,17 @@ -[gd_resource type="Resource" script_class="ZombieResource" load_steps=3 format=3 uid="uid://dkhjlu7u0vny6"] +[gd_resource type="Resource" script_class="ZombieResource" load_steps=4 format=3 uid="uid://dkhjlu7u0vny6"] [ext_resource type="PackedScene" uid="uid://xu4i6tmkv00a" path="res://scenes/entities/Zombies/bucket_zombie.tscn" id="1_lhcag"] [ext_resource type="Script" uid="uid://cqxj7o8hdm82n" path="res://scripts/resources/ZombieResource.cs" id="1_sngfh"] +[ext_resource type="Texture2D" uid="uid://bwdqbrnn7ygtr" path="res://assets/sprites/atlases/zombies/Зондби.png" id="1_ufs7s"] [resource] script = ExtResource("1_sngfh") -cost = 5.0 -scene = ExtResource("1_lhcag") +display_name = "Buckethead zombie" +display_description = "" +Cost = 5.0 +Scene = ExtResource("1_lhcag") +ReloadTime = 1.0 +ReloadProgress = 0.0 +Preview = ExtResource("1_ufs7s") +Layer = 1 metadata/_custom_type_script = "uid://cqxj7o8hdm82n" diff --git a/resources/zombies/conehead.tres b/resources/zombies/conehead.tres index 8e21ed2..2f28793 100644 --- a/resources/zombies/conehead.tres +++ b/resources/zombies/conehead.tres @@ -1,10 +1,17 @@ -[gd_resource type="Resource" script_class="ZombieResource" load_steps=3 format=3 uid="uid://nceohd32fkxk"] +[gd_resource type="Resource" script_class="ZombieResource" load_steps=4 format=3 uid="uid://nceohd32fkxk"] +[ext_resource type="Texture2D" uid="uid://bwdqbrnn7ygtr" path="res://assets/sprites/atlases/zombies/Зондби.png" id="1_f7g7v"] [ext_resource type="PackedScene" uid="uid://hhjbqkjqpt7x" path="res://scenes/entities/Zombies/cone_zombie.tscn" id="1_llf5l"] [ext_resource type="Script" uid="uid://cqxj7o8hdm82n" path="res://scripts/resources/ZombieResource.cs" id="1_sw7hj"] [resource] script = ExtResource("1_sw7hj") -cost = 2.0 -scene = ExtResource("1_llf5l") +display_name = "Conehead zombie" +display_description = "" +Cost = 2.0 +Scene = ExtResource("1_llf5l") +ReloadTime = 1.0 +ReloadProgress = 0.0 +Preview = ExtResource("1_f7g7v") +Layer = 1 metadata/_custom_type_script = "uid://cqxj7o8hdm82n" diff --git a/resources/zombies/hobo.tres b/resources/zombies/hobo.tres index 0be10aa..7b8e10f 100644 --- a/resources/zombies/hobo.tres +++ b/resources/zombies/hobo.tres @@ -1,10 +1,17 @@ -[gd_resource type="Resource" script_class="ZombieResource" load_steps=3 format=3 uid="uid://c38vfdw5b60xw"] +[gd_resource type="Resource" script_class="ZombieResource" load_steps=4 format=3 uid="uid://c38vfdw5b60xw"] [ext_resource type="PackedScene" uid="uid://bgqmwsb6ynm81" path="res://scenes/entities/Zombies/hobo.tscn" id="1_4myt6"] +[ext_resource type="Texture2D" uid="uid://bwdqbrnn7ygtr" path="res://assets/sprites/atlases/zombies/Зондби.png" id="1_nt7w3"] [ext_resource type="Script" uid="uid://cqxj7o8hdm82n" path="res://scripts/resources/ZombieResource.cs" id="1_u5qpq"] [resource] script = ExtResource("1_u5qpq") -cost = 7.0 -scene = ExtResource("1_4myt6") +display_name = "Garbage can zombie" +display_description = "" +Cost = 7.0 +Scene = ExtResource("1_4myt6") +ReloadTime = 1.0 +ReloadProgress = 0.0 +Preview = ExtResource("1_nt7w3") +Layer = 1 metadata/_custom_type_script = "uid://cqxj7o8hdm82n" diff --git a/scenes/gui/almanach.tscn b/scenes/gui/almanach.tscn new file mode 100644 index 0000000..33c0f64 --- /dev/null +++ b/scenes/gui/almanach.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=7 format=3 uid="uid://bvpt0q4j6nx18"] + +[ext_resource type="Texture2D" uid="uid://dr8a0rx42o3qy" path="res://assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres" id="1_1hnxi"] +[ext_resource type="Script" uid="uid://0mvmfvwe1bc7" path="res://scripts/components/gui/almanach/AlmanachGrid.cs" id="1_ru62c"] +[ext_resource type="Script" uid="uid://covbig00p22di" path="res://scripts/components/gui/choose_your_seeds/Previewport.cs" id="2_ru62c"] +[ext_resource type="Texture2D" uid="uid://dycdvvgmgmfu6" path="res://assets/sprites/gui/ChooseYourSeeds/FrameField.tres" id="3_oy57w"] + +[sub_resource type="ViewportTexture" id="ViewportTexture_ru62c"] +viewport_path = NodePath("Plants/Infobox/FrameAndTitle/Frame/Previewport") + +[sub_resource type="ViewportTexture" id="ViewportTexture_7yl8g"] +viewport_path = NodePath("Zombies/Infobox/FrameAndTitle/Frame/Previewport") + +[node name="Almanach" type="TabContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +tab_alignment = 1 +current_tab = 0 + +[node name="Plants" type="HBoxContainer" parent="."] +layout_mode = 2 +metadata/_tab_index = 0 + +[node name="SeedpacketsContainer" type="ScrollContainer" parent="Plants"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="GridContainer" type="GridContainer" parent="Plants/SeedpacketsContainer"] +layout_mode = 2 +columns = 8 +script = ExtResource("1_ru62c") + +[node name="Infobox" type="VBoxContainer" parent="Plants"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="FrameAndTitle" type="HBoxContainer" parent="Plants/Infobox"] +layout_mode = 2 + +[node name="Frame" type="TextureRect" parent="Plants/Infobox/FrameAndTitle"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +texture = ExtResource("1_1hnxi") + +[node name="Previewport" type="SubViewport" parent="Plants/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] +canvas_item_default_texture_filter = 0 +size = Vector2i(65, 65) +script = ExtResource("2_ru62c") +title = NodePath("../../Label") +description = NodePath("../../../Description/ScrollContainer/RichTextLabel") + +[node name="FrameField" type="Sprite2D" parent="Plants/Infobox/FrameAndTitle/Frame/Previewport"] +texture = ExtResource("3_oy57w") + +[node name="Camera2D" type="Camera2D" parent="Plants/Infobox/FrameAndTitle/Frame/Previewport"] + +[node name="Render" type="TextureRect" parent="Plants/Infobox/FrameAndTitle/Frame"] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("ViewportTexture_ru62c") + +[node name="Label" type="Label" parent="Plants/Infobox/FrameAndTitle"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 1 +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Description" type="PanelContainer" parent="Plants/Infobox"] +layout_mode = 2 +size_flags_vertical = 3 +theme_type_variation = &"description_panel_container" + +[node name="ScrollContainer" type="ScrollContainer" parent="Plants/Infobox/Description"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="RichTextLabel" type="RichTextLabel" parent="Plants/Infobox/Description/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_colors/default_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +bbcode_enabled = true + +[node name="Zombies" type="HBoxContainer" parent="."] +visible = false +layout_mode = 2 +metadata/_tab_index = 1 + +[node name="SeedpacketsContainer" type="ScrollContainer" parent="Zombies"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="GridContainer" type="GridContainer" parent="Zombies/SeedpacketsContainer"] +layout_mode = 2 +columns = 8 +script = ExtResource("1_ru62c") +_zombies = true + +[node name="Infobox" type="VBoxContainer" parent="Zombies"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="FrameAndTitle" type="HBoxContainer" parent="Zombies/Infobox"] +layout_mode = 2 + +[node name="Frame" type="TextureRect" parent="Zombies/Infobox/FrameAndTitle"] +clip_contents = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +texture = ExtResource("1_1hnxi") + +[node name="Previewport" type="SubViewport" parent="Zombies/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] +canvas_item_default_texture_filter = 0 +size = Vector2i(130, 130) +script = ExtResource("2_ru62c") +title = NodePath("../../Label") +description = NodePath("../../../Description/ScrollContainer/RichTextLabel") + +[node name="FrameField" type="Sprite2D" parent="Zombies/Infobox/FrameAndTitle/Frame/Previewport"] +texture = ExtResource("3_oy57w") + +[node name="Camera2D" type="Camera2D" parent="Zombies/Infobox/FrameAndTitle/Frame/Previewport"] +position = Vector2(0, -45) + +[node name="Render" type="TextureRect" parent="Zombies/Infobox/FrameAndTitle/Frame"] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("ViewportTexture_7yl8g") +expand_mode = 1 + +[node name="Label" type="Label" parent="Zombies/Infobox/FrameAndTitle"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 1 +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Description" type="PanelContainer" parent="Zombies/Infobox"] +layout_mode = 2 +size_flags_vertical = 3 +theme_type_variation = &"description_panel_container" + +[node name="ScrollContainer" type="ScrollContainer" parent="Zombies/Infobox/Description"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="RichTextLabel" type="RichTextLabel" parent="Zombies/Infobox/Description/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_colors/default_color = Color(0, 0, 0, 1) +theme_override_colors/font_selected_color = Color(0, 0, 0, 1) +bbcode_enabled = true diff --git a/scripts/components/IEntity.cs b/scripts/components/IEntity.cs index 3a6368e..7446c70 100644 --- a/scripts/components/IEntity.cs +++ b/scripts/components/IEntity.cs @@ -9,7 +9,9 @@ public interface IEntity { public int Hp { get; } public int MaxHp { get; } - public void TakeDamage(int amount,Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL); + public void TakeDamage(int amount, Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL); public void Heal(int amount, Node origin); + public void DisableBrain(); + public void EnableBrain(); } \ No newline at end of file diff --git a/scripts/components/gui/almanach/AlmanachGrid.cs b/scripts/components/gui/almanach/AlmanachGrid.cs new file mode 100644 index 0000000..bc6e3ce --- /dev/null +++ b/scripts/components/gui/almanach/AlmanachGrid.cs @@ -0,0 +1,36 @@ +using Godot; +using Newlon.Components.GUI.Seedpackets; + +public partial class AlmanachGrid : GridContainer +{ + private PackedScene _plantCard; + [Export] + private bool _zombies; + public override void _Ready() + { + _plantCard = ResourceLoader.Load("res://scenes/gui/seedpacket.tscn"); + + if (_zombies) + { + foreach (var resource in GameRegistry.GetZombies()) + { + Seedpacket slot = _plantCard.Instantiate(); + AddChild(slot); + + slot.SetResource(resource); + slot.SetHandler(new AlmanachHandler(slot)); + } + } + else + { + foreach (var resource in GameRegistry.GetPlants()) + { + Seedpacket slot = _plantCard.Instantiate(); + AddChild(slot); + + slot.SetResource(resource); + slot.SetHandler(new AlmanachHandler(slot)); + } + } + } +} diff --git a/scripts/components/gui/almanach/AlmanachGrid.cs.uid b/scripts/components/gui/almanach/AlmanachGrid.cs.uid new file mode 100644 index 0000000..e30ab52 --- /dev/null +++ b/scripts/components/gui/almanach/AlmanachGrid.cs.uid @@ -0,0 +1 @@ +uid://0mvmfvwe1bc7 diff --git a/scripts/components/gui/choose_your_seeds/GridLoader.cs b/scripts/components/gui/choose_your_seeds/GridLoader.cs index 81b04e6..f728588 100644 --- a/scripts/components/gui/choose_your_seeds/GridLoader.cs +++ b/scripts/components/gui/choose_your_seeds/GridLoader.cs @@ -17,7 +17,7 @@ public partial class GridLoader : GridContainer Seedpacket slot = _plantCard.Instantiate(); AddChild(slot); - slot.SetPlantResource(resource); + slot.SetResource(resource); slot.SetHandler(new ChoosableHandler(slot)); } } diff --git a/scripts/components/gui/choose_your_seeds/Previewport.cs b/scripts/components/gui/choose_your_seeds/Previewport.cs index 021718c..45c899b 100644 --- a/scripts/components/gui/choose_your_seeds/Previewport.cs +++ b/scripts/components/gui/choose_your_seeds/Previewport.cs @@ -1,11 +1,12 @@ using Godot; using Newlon; +using Newlon.Components; using Newlon.Components.GUI.Seedpackets; using Newlon.Components.Plants; public partial class Previewport : SubViewport { - private RuntimePlantData current_display; + private Node current_display; private Texture2D start_Field; [Export] private Label title; @@ -19,13 +20,14 @@ public partial class Previewport : SubViewport public void OnFocusChanged(Control node) { + if (GetParent().IsVisibleInTree() == false) return; if (node is Seedpacket packet) { - ChangeDisplay(packet.GetPlantResource()); + ChangeDisplay(packet.GetResource()); } } - private void ChangeDisplay(PlantResource resource) + private void ChangeDisplay(DisplayResource resource) { // Expand with updates if (current_display != null) @@ -38,11 +40,12 @@ public partial class Previewport : SubViewport } else GetNode("FrameField").Texture = start_Field; - current_display = resource.Scene.Instantiate(); + current_display = resource.Scene.Instantiate(); title.Text = resource.display_name; description.Text = resource.display_description; AddChild(current_display); - current_display.DisableBrain(); + if (current_display is IEntity entity) + entity.DisableBrain(); } } diff --git a/scripts/components/gui/seedpackets/AlmanachHandler.cs b/scripts/components/gui/seedpackets/AlmanachHandler.cs new file mode 100644 index 0000000..66b96d3 --- /dev/null +++ b/scripts/components/gui/seedpackets/AlmanachHandler.cs @@ -0,0 +1,10 @@ +using Godot; + +namespace Newlon.Components.GUI.Seedpackets; + +public class AlmanachHandler : SeedpacketHandler +{ + public AlmanachHandler(Seedpacket owner) : base(owner) + { + } +} diff --git a/scripts/components/gui/seedpackets/AlmanachHandler.cs.uid b/scripts/components/gui/seedpackets/AlmanachHandler.cs.uid new file mode 100644 index 0000000..7fcdcce --- /dev/null +++ b/scripts/components/gui/seedpackets/AlmanachHandler.cs.uid @@ -0,0 +1 @@ +uid://pse018r220mt diff --git a/scripts/components/gui/seedpackets/ChoosableHandler.cs b/scripts/components/gui/seedpackets/ChoosableHandler.cs index d537b04..306309a 100644 --- a/scripts/components/gui/seedpackets/ChoosableHandler.cs +++ b/scripts/components/gui/seedpackets/ChoosableHandler.cs @@ -13,7 +13,7 @@ public class ChoosableHandler : SeedpacketHandler, ISeedpacketPress var hotbarSeedpacket = Seedpacket.Prefab.Instantiate(); LevelGUIElements.Instance.SeedpacketsHotbar.AddChild(hotbarSeedpacket); - hotbarSeedpacket.SetPlantResource(_owner.GetPlantResource()); + hotbarSeedpacket.SetResource(_owner.GetResource()); var pregameHandler = new HotbarPregameHandler(hotbarSeedpacket); hotbarSeedpacket.SetHandler(pregameHandler); diff --git a/scripts/components/gui/seedpackets/HotbarHandler.cs b/scripts/components/gui/seedpackets/HotbarHandler.cs index dfc90bc..7a20f12 100644 --- a/scripts/components/gui/seedpackets/HotbarHandler.cs +++ b/scripts/components/gui/seedpackets/HotbarHandler.cs @@ -10,13 +10,13 @@ public class HotbarHandler : SeedpacketHandler, ISeedpacketPress, ISeedpacketPro public void Pressed() { - PlantField.Instance.SetPlant(_owner, _owner.GetPlantResource()); + PlantField.Instance.SetPlant(_owner, _owner.GetResource()); AudioSequencer.Play("lift_seed", Seedpacket.LiftStream); } public void Process() { - _owner.disablePacket = RuntimeLevelData.Instance.SunCount < _owner.GetPlantResource().Cost; + _owner.disablePacket = RuntimeLevelData.Instance.SunCount < _owner.GetResource().Cost; } public void OnUnfocused() { diff --git a/scripts/components/gui/seedpackets/Seedpacket.cs b/scripts/components/gui/seedpackets/Seedpacket.cs index 5006b52..30e3691 100644 --- a/scripts/components/gui/seedpackets/Seedpacket.cs +++ b/scripts/components/gui/seedpackets/Seedpacket.cs @@ -8,7 +8,7 @@ public partial class Seedpacket : TextureButton public static AudioStream UntapStream; public static AudioStream LiftStream; private const string PATH_TO_PACKED_SCENE = "res://scenes/gui/seedpacket.tscn"; - private PlantResource _resource; + private DisplayResource _resource; private Label _cost; private TextureRect _icon; private Timer _timer; @@ -50,14 +50,14 @@ public partial class Seedpacket : TextureButton } if (_handler is ISeedpacketProcess processHandler) processHandler.Process(); } - public void SetPlantResource( PlantResource resource ) + public void SetResource(DisplayResource resource ) { _resource = resource; UpdateContents(); } - public PlantResource GetPlantResource() + public DisplayResource GetResource() { return _resource; } diff --git a/scripts/components/level/PlantField.cs b/scripts/components/level/PlantField.cs index a08f074..e82c9b1 100644 --- a/scripts/components/level/PlantField.cs +++ b/scripts/components/level/PlantField.cs @@ -7,7 +7,7 @@ namespace Newlon.Components.Level; public partial class PlantField : Node2D { private Node2D _plantSetter; - private PlantResource _resource; + private DisplayResource _resource; private Seedpacket _slot; private bool _previousCanPlace; private ChannelPlayer player; @@ -21,18 +21,18 @@ public partial class PlantField : Node2D player = GetNode("PlantPlayer"); } - public void SetPlant(Seedpacket slot, PlantResource plant) + public void SetPlant(Seedpacket slot, DisplayResource resource) { - _resource = plant; + _resource = resource; _slot = slot; - if (plant == null) + if (resource == null) { foreach(var child in _plantSetter.GetChildren()) child.QueueFree(); } else { - var scene = plant.Scene.Instantiate(); + var scene = resource.Scene.Instantiate(); _plantSetter.AddChild(scene); scene.UseParentMaterial = true; } @@ -93,7 +93,7 @@ public partial class PlantField : Node2D var plant = _resource.Scene.Instantiate(); PoolContainer.Instance.Plants.AddChild(plant); plant.GlobalPosition = (_plantSetter.GlobalPosition / Utility.Tile).Ceil() * Utility.Tile - new Vector2(20, 14); - plant.Resource = _resource; + plant.Resource = (PlantResource)_resource; PoolContainer.Instance.EntityField[_resource.Layer].Add(plant.GlobalPosition, plant); diff --git a/scripts/components/level/RuntimeLevelData.cs b/scripts/components/level/RuntimeLevelData.cs index 6234d4f..d7fb28c 100644 --- a/scripts/components/level/RuntimeLevelData.cs +++ b/scripts/components/level/RuntimeLevelData.cs @@ -15,7 +15,7 @@ public partial class RuntimeLevelData : Node } [Export] - public int SunCount { get; private set; } = 0; + public float SunCount { get; private set; } = 0; public event Action OnLevelStateChanged; public static RuntimeLevelData Instance { get; private set; } @@ -29,17 +29,17 @@ public partial class RuntimeLevelData : Node } #region Sun - public void AddSun(int amount) + public void AddSun(float amount) { SunCount += amount; } - public void SpendSun(int amount) + public void SpendSun(float amount) { SunCount -= amount; } - public bool CheckSpendSun(int amount) + public bool CheckSpendSun(float amount) { if (SunCount - amount < 0) return false; diff --git a/scripts/components/level/zombe_spawners/SurvivalZombieSpawner.cs b/scripts/components/level/zombe_spawners/SurvivalZombieSpawner.cs index 992e0e2..1927cbe 100644 --- a/scripts/components/level/zombe_spawners/SurvivalZombieSpawner.cs +++ b/scripts/components/level/zombe_spawners/SurvivalZombieSpawner.cs @@ -38,16 +38,16 @@ public partial class SurvivalZombieSpawner : Node cachedTankPool.Sort((x, y) => { - return (int)(x.cost - y.cost); + return (int)(x.Cost - y.Cost); }); cachedHordePool.Sort((x, y) => { - return (int)(x.cost - y.cost); + return (int)(x.Cost - y.Cost); }); - minSupportPoints = cachedSupportPool[0].cost; - minTankPoints = cachedTankPool[0].cost; - minHordePoints = cachedHordePool[0].cost; + minSupportPoints = cachedSupportPool[0].Cost; + minTankPoints = cachedTankPool[0].Cost; + minHordePoints = cachedHordePool[0].Cost; fin_a = (velocity_curve.Sample(velocity_curve.MaxDomain) - velocity_curve.Sample(velocity_curve.MaxDomain - 0.001f)) / 0.001f; } @@ -107,10 +107,10 @@ public partial class SurvivalZombieSpawner : Node while (given_points >= minSupportPoints) { var chosen_zombie = cachedSupportPool[rng.RandiRange(0, cachedSupportPool.Count - 1)]; - if (given_points - chosen_zombie.cost >= 0) + if (given_points - chosen_zombie.Cost >= 0) { wave.Add(chosen_zombie); - given_points -= chosen_zombie.cost; + given_points -= chosen_zombie.Cost; } } return given_points; @@ -124,14 +124,14 @@ public partial class SurvivalZombieSpawner : Node int zombieIndex = cachedTankPool.Count - 1; while (given_points >= minSupportPoints && zombieIndex > -1) { - if (cachedTankPool[zombieIndex].cost > given_points) + if (cachedTankPool[zombieIndex].Cost > given_points) { zombieIndex--; continue; } var chosen_zombie = cachedTankPool[zombieIndex]; wave.Add(chosen_zombie); - given_points -= chosen_zombie.cost; + given_points -= chosen_zombie.Cost; } return given_points; } @@ -141,18 +141,18 @@ public partial class SurvivalZombieSpawner : Node { return given_points; } - while (is_big == false && cachedHordePool.Count > 1 && cachedHordePool[1].cost * 15 <= given_points) + while (is_big == false && cachedHordePool.Count > 1 && cachedHordePool[1].Cost * 15 <= given_points) { cachedHordePool.RemoveAt(0); - minHordePoints = cachedHordePool[0].cost; + minHordePoints = cachedHordePool[0].Cost; } while (given_points >= minHordePoints) { var chosen_zombie = cachedHordePool[rng.RandiRange(0, cachedHordePool.Count - 1)]; - if (given_points - chosen_zombie.cost >= 0) + if (given_points - chosen_zombie.Cost >= 0) { wave.Add(chosen_zombie); - given_points -= chosen_zombie.cost; + given_points -= chosen_zombie.Cost; } } return given_points; diff --git a/scripts/components/level/zombe_spawners/ZombieSequencer.cs b/scripts/components/level/zombe_spawners/ZombieSequencer.cs index 5f4b284..7c0f1c6 100644 --- a/scripts/components/level/zombe_spawners/ZombieSequencer.cs +++ b/scripts/components/level/zombe_spawners/ZombieSequencer.cs @@ -58,7 +58,7 @@ public partial class ZombieSequencer : Node2D private void Spawn(string id, int lane) { - RuntimeZombieData zombie = GameRegistry.GetZombieByName(id).scene.Instantiate(); + RuntimeZombieData zombie = GameRegistry.GetZombieByName(id).Scene.Instantiate(); PoolContainer.Instance.Zombies.AddChild(zombie); zombie.GlobalPosition = new Vector2(GlobalPosition.X, Utility.RightFieldBoundary.Y - (lane - 1) * Utility.TileHeight); diff --git a/scripts/components/zombies/RuntimeZombieData.cs b/scripts/components/zombies/RuntimeZombieData.cs index 2faa22d..e0fcef0 100644 --- a/scripts/components/zombies/RuntimeZombieData.cs +++ b/scripts/components/zombies/RuntimeZombieData.cs @@ -146,5 +146,17 @@ public partial class RuntimeZombieData : Node2D, IEntity, ILocalTimescale, IEffe _activeEffectSlots[slot].Exit(this); _activeEffectSlots[slot] = null; } - #endregion + + public void DisableBrain() + { + GetNode("AnimationPlayer").ProcessMode = ProcessModeEnum.Pausable; + ProcessMode = ProcessModeEnum.Disabled; + } + + public void EnableBrain() + { + GetNode("AnimationPlayer").ProcessMode = ProcessModeEnum.Inherit; + ProcessMode = ProcessModeEnum.Inherit; + } + #endregion } diff --git a/scripts/resources/DisplayResource.cs b/scripts/resources/DisplayResource.cs new file mode 100644 index 0000000..a499473 --- /dev/null +++ b/scripts/resources/DisplayResource.cs @@ -0,0 +1,20 @@ +using Godot; + +public partial class DisplayResource : Resource +{ + [Export] public string display_name; + [Export(PropertyHint.MultilineText)] public string display_description; + [Export] + public float Cost; + [Export] + public PackedScene Scene; + [Export] + public float ReloadTime; + [Export(PropertyHint.Range, "0,1,0.01")] + public float ReloadProgress; + [Export] + public Texture2D Preview; + [Export] public CustomSeedpacketFrame customFrame; + [Export] public int Layer = 1; + public string internal_id; +} diff --git a/scripts/resources/DisplayResource.cs.uid b/scripts/resources/DisplayResource.cs.uid new file mode 100644 index 0000000..38bfd5f --- /dev/null +++ b/scripts/resources/DisplayResource.cs.uid @@ -0,0 +1 @@ +uid://j7wr5mj7j81b diff --git a/scripts/resources/PlantResource.cs b/scripts/resources/PlantResource.cs index 166af05..834f574 100644 --- a/scripts/resources/PlantResource.cs +++ b/scripts/resources/PlantResource.cs @@ -3,22 +3,6 @@ using Godot; namespace Newlon; [GlobalClass] -public partial class PlantResource : Resource +public partial class PlantResource : DisplayResource { - [Export] public string display_name; - [Export(PropertyHint.MultilineText)] public string display_description; - [Export] - public int Cost; - [Export] - public PackedScene Scene; - [Export] - public float ReloadTime; - [Export(PropertyHint.Range, "0,1,0.01")] - public float ReloadProgress; - [Export] - public Texture2D Preview; - [Export] public int Layer = 1; - [Export] public CustomSeedpacketFrame customFrame; - - public string internal_id; } diff --git a/scripts/resources/ZombieResource.cs b/scripts/resources/ZombieResource.cs index 55e5b4e..bee27b7 100644 --- a/scripts/resources/ZombieResource.cs +++ b/scripts/resources/ZombieResource.cs @@ -1,10 +1,6 @@ using Godot; [GlobalClass] -public partial class ZombieResource : Resource +public partial class ZombieResource : DisplayResource { - [Export] public float cost; - [Export] public PackedScene scene; - - public string internal_id; } From 8755102e4a556db175172af1b798cd4c9595b78d Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 3 Jul 2025 19:54:16 +0500 Subject: [PATCH 4/7] Descriptions done --- resources/zombies/basic.tres | 8 +++++++- resources/zombies/buckethead.tres | 7 ++++++- resources/zombies/conehead.tres | 7 ++++++- resources/zombies/hobo.tres | 8 +++++++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/resources/zombies/basic.tres b/resources/zombies/basic.tres index 2df65fa..9b4796e 100644 --- a/resources/zombies/basic.tres +++ b/resources/zombies/basic.tres @@ -7,7 +7,13 @@ [resource] script = ExtResource("1_k277m") display_name = "Basic zombie" -display_description = "" +display_description = "The most basic zombie that zomboss has. +Health points: [color=darkred]7 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Attack speed: [color=darkred]1 Gz[/color]. +Attack damage: [color=darkred]1 bite[/color]. + +" Cost = 1.0 Scene = ExtResource("1_c2mq3") ReloadTime = 1.0 diff --git a/resources/zombies/buckethead.tres b/resources/zombies/buckethead.tres index 06eb9bf..3f58abb 100644 --- a/resources/zombies/buckethead.tres +++ b/resources/zombies/buckethead.tres @@ -7,7 +7,12 @@ [resource] script = ExtResource("1_sngfh") display_name = "Buckethead zombie" -display_description = "" +display_description = "Wears metal to protect his remaining brains. Equivalent of ~7 zombies. +Health points: [color=darkred]7 peas[/color]. +Armour points: [color=darkred]39 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Attack speed: [color=darkred]1 Gz[/color]. +Attack damage: [color=darkred]1 bite[/color]." Cost = 5.0 Scene = ExtResource("1_lhcag") ReloadTime = 1.0 diff --git a/resources/zombies/conehead.tres b/resources/zombies/conehead.tres index 2f28793..43fb0d6 100644 --- a/resources/zombies/conehead.tres +++ b/resources/zombies/conehead.tres @@ -7,7 +7,12 @@ [resource] script = ExtResource("1_sw7hj") display_name = "Conehead zombie" -display_description = "" +display_description = "Armoured vesion of basic zombie. Equivalent of ~3 zombies. +Health points: [color=darkred]7 peas[/color]. +Armour points: [color=darkred]13 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Attack speed: [color=darkred]1 Gz[/color]. +Attack damage: [color=darkred]1 bite[/color]." Cost = 2.0 Scene = ExtResource("1_llf5l") ReloadTime = 1.0 diff --git a/resources/zombies/hobo.tres b/resources/zombies/hobo.tres index 7b8e10f..b8d6365 100644 --- a/resources/zombies/hobo.tres +++ b/resources/zombies/hobo.tres @@ -7,7 +7,13 @@ [resource] script = ExtResource("1_u5qpq") display_name = "Garbage can zombie" -display_description = "" +display_description = "Some time in the past he met a great conqueror. Hates to live without his can. Equivalent of ~8 zombies. +Health points: [color=darkred]13 peas[/color]. +Armour points: [color=darkred]39 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Run speed: [color=darkred]0.6 tiles/second[/color]. +Attack speed: [color=darkred]1 Gz[/color]. +Attack damage: [color=darkred]1 bite[/color]." Cost = 7.0 Scene = ExtResource("1_4myt6") ReloadTime = 1.0 From c0b042ebd5569e179018af29aa969807d91fa30b Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 3 Jul 2025 22:33:54 +0500 Subject: [PATCH 5/7] plants translated --- project.godot | 4 + resources/plants/Aloe.tres | 10 +-- resources/plants/Garlic.tres | 8 +- resources/plants/Peashooter.tres | 10 +-- resources/plants/PotatoMine.tres | 10 +-- resources/plants/Snowpea.tres | 11 +-- resources/plants/Spikeweed.tres | 9 +- resources/plants/Sunflower.tres | 10 +-- resources/plants/Threepeater.tres | 10 +-- resources/plants/Wallnut.tres | 8 +- resources/zombies/basic.tres | 2 +- resources/zombies/buckethead.tres | 2 +- resources/zombies/conehead.tres | 2 +- resources/zombies/hobo.tres | 4 +- .../gui/choose_your_seeds/Previewport.cs | 4 +- scripts/resources/DisplayResource.cs | 4 +- translations/plants.csv | 83 ++++++++++++++++++ translations/plants.csv.import | 17 ++++ translations/plants.en.translation | Bin 0 -> 3102 bytes translations/plants.ru.translation | Bin 0 -> 4209 bytes 20 files changed, 140 insertions(+), 68 deletions(-) create mode 100644 translations/plants.csv create mode 100644 translations/plants.csv.import create mode 100644 translations/plants.en.translation create mode 100644 translations/plants.ru.translation diff --git a/project.godot b/project.godot index cf8af86..171ddb1 100644 --- a/project.godot +++ b/project.godot @@ -82,6 +82,10 @@ cheat_zombie_spawn={ ] } +[internationalization] + +locale/translations=PackedStringArray("res://translations/plants.en.translation", "res://translations/plants.ru.translation") + [layer_names] 2d_physics/layer_1="Reserved" diff --git a/resources/plants/Aloe.tres b/resources/plants/Aloe.tres index ae8d7ba..9e2b333 100644 --- a/resources/plants/Aloe.tres +++ b/resources/plants/Aloe.tres @@ -18,16 +18,12 @@ metadata/_custom_type_script = "uid://3m7xks3xq3hl" [resource] script = ExtResource("1_vw2kg") -Layer = 1 -display_name = "Aloe" -display_description = "[p]Aloe heals injured plants.[/p] -[p]Health points: [color=DARK_RED]3 bites[/color][/p] -[p]Reload time: [color=DARK_RED]15 seconds[/color].[/p] -[p]Ability recharge time: [color=DARK_RED]20 seconds[/color].[/p] -[p]Heals plant when it has [color=DARK_RED]third[/color] of its health.[/p]" +name_key = "aloe" +description_key = "aloe_desc" Cost = 75.0 Scene = ExtResource("2_6a4ia") ReloadTime = 15.0 ReloadProgress = 0.0 Preview = ExtResource("1_t4137") customFrame = SubResource("Resource_5me4i") +Layer = 1 diff --git a/resources/plants/Garlic.tres b/resources/plants/Garlic.tres index a2f044e..07baa57 100644 --- a/resources/plants/Garlic.tres +++ b/resources/plants/Garlic.tres @@ -6,11 +6,9 @@ [resource] script = ExtResource("1_e15gf") -display_name = "Garlic" -display_description = "[p]Redirects zombies that bite it.[/p] -[p]Health points: [color=DARK_RED]20 bites[/color][/p] -[p]Reload time: [color=DARK_RED]15 seconds[/color].[/p]" -Cost = 50 +name_key = "garlic" +description_key = "garlic_desc" +Cost = 50.0 Scene = ExtResource("2_81n0p") ReloadTime = 7.5 ReloadProgress = 0.67 diff --git a/resources/plants/Peashooter.tres b/resources/plants/Peashooter.tres index 39b3286..1344b1f 100644 --- a/resources/plants/Peashooter.tres +++ b/resources/plants/Peashooter.tres @@ -6,13 +6,9 @@ [resource] script = ExtResource("1_amvh8") -display_name = "Peashooter" -display_description = "[p]Simply shoots peas at zombies on the lane[/p] -[p]Health points: [color=DARK_RED]3 bites[/color].[/p] -[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] -[p]Pea damage: [color=DARK_RED]1 pea[/color].[/p] -[p]Firerate: [color=DARK_RED]1.5 seconds[/color].[/p]" -Cost = 75 +name_key = "peashooter" +description_key = "peashooter_desc" +Cost = 75.0 Scene = ExtResource("1_rqf2x") ReloadTime = 5.0 ReloadProgress = 0.0 diff --git a/resources/plants/PotatoMine.tres b/resources/plants/PotatoMine.tres index f7c7cc8..776ad20 100644 --- a/resources/plants/PotatoMine.tres +++ b/resources/plants/PotatoMine.tres @@ -6,13 +6,9 @@ [resource] script = ExtResource("1_33j6b") -display_name = "Potato mine" -display_description = "[p]Explodes when stepped on. Needs some time to prime.[/p] -[p]Health points: [color=DARK_RED]2 bites[/color].[/p] -[p]Reload time: [color=DARK_RED]25 seconds[/color].[/p] -[p]Explosion damage: [color=DARK_RED]600 peas[/color].[/p] -[p]Prime time: [color=DARK_RED]15 seconds[/color].[/p]" -Cost = 25 +name_key = "potatomine" +description_key = "potatomine_desc" +Cost = 25.0 Scene = ExtResource("2_ig2ti") ReloadTime = 25.0 ReloadProgress = 0.9 diff --git a/resources/plants/Snowpea.tres b/resources/plants/Snowpea.tres index 77ed9be..93d6bde 100644 --- a/resources/plants/Snowpea.tres +++ b/resources/plants/Snowpea.tres @@ -6,14 +6,9 @@ [resource] script = ExtResource("1_0cpi0") -display_name = "Snowpea" -display_description = "[p]Shoots slowing peas at zombies.[/p] -[p]Health points: [color=DARK_RED]3 bites[/color].[/p] -[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] -[p]Pea damage: [color=DARK_RED]1 pea[/color].[/p] -[p]Firerate: [color=DARK_RED]1.5 seconds[/color].[/p] -[p]Slow percentage: [color=STEEL_BLUE]25%[/color].[/p]" -Cost = 175 +name_key = "snowpea" +description_key = "snowpea_desc" +Cost = 175.0 Scene = ExtResource("2_k47h0") ReloadTime = 5.0 ReloadProgress = 0.0 diff --git a/resources/plants/Spikeweed.tres b/resources/plants/Spikeweed.tres index b82b9a7..cfd319b 100644 --- a/resources/plants/Spikeweed.tres +++ b/resources/plants/Spikeweed.tres @@ -6,12 +6,9 @@ [resource] script = ExtResource("1_0bymo") -display_name = "Spikeweed" -display_description = "[p]Attacks zombies that step on it.[/p] -[p]Health points: [color=DARK_RED]3 bites[/color].[/p] -[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] -[p]Damage per second: [color=DARK_RED]0.9 peas[/color].[/p]" -Cost = 100 +name_key = "spikeweed" +description_key = "spikeweed_desc" +Cost = 100.0 Scene = ExtResource("2_iv8de") ReloadTime = 5.0 ReloadProgress = 0.0 diff --git a/resources/plants/Sunflower.tres b/resources/plants/Sunflower.tres index 8fa5401..7347bf8 100644 --- a/resources/plants/Sunflower.tres +++ b/resources/plants/Sunflower.tres @@ -6,13 +6,9 @@ [resource] script = ExtResource("3_vt4jc") -display_name = "Sunflower" -display_description = "[p]Produces sun over time.[/p] -[p]Health points: [color=DARK_RED]3 bites[/color][/p] -[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] -[p]Initial sun production time: [color=DARK_RED]12 seconds[/color].[/p] -[p]Sun production time: [color=DARK_RED]24 seconds[/color](After first sun produced).[/p]" -Cost = 50 +name_key = "sunflower" +description_key = "sunflower_desc" +Cost = 50.0 Scene = ExtResource("2_gcyr5") ReloadTime = 5.0 ReloadProgress = 1.0 diff --git a/resources/plants/Threepeater.tres b/resources/plants/Threepeater.tres index 42cb5f4..4a62eef 100644 --- a/resources/plants/Threepeater.tres +++ b/resources/plants/Threepeater.tres @@ -6,13 +6,9 @@ [resource] script = ExtResource("3_3lugi") -display_name = "Threepeater" -display_description = "[p]Shoots peas at zombies in three lanes.[/p] -[p]Health points: [color=DARK_RED]3 bites[/color].[/p] -[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] -[p]Pea damage: [color=DARK_RED]1 pea[/color] ([color=DARK_RED]3 pea[/color] when in close quarters).[/p] -[p]Firerate: [color=DARK_RED]1.6 seconds[/color].[/p]" -Cost = 300 +name_key = "threepeater" +description_key = "threepeater_desc" +Cost = 275.0 Scene = ExtResource("2_uqpu0") ReloadTime = 5.0 ReloadProgress = 0.0 diff --git a/resources/plants/Wallnut.tres b/resources/plants/Wallnut.tres index f17f614..63b6271 100644 --- a/resources/plants/Wallnut.tres +++ b/resources/plants/Wallnut.tres @@ -6,11 +6,9 @@ [resource] script = ExtResource("1_27l0t") -display_name = "Wallnut" -display_description = "[p]Absorbs zombie damage. Does nothing special[/p] -[p]Health points: [color=DARK_RED]60 bites[/color][/p] -[p]Reload time: [color=DARK_RED]20 seconds[/color].[/p]" -Cost = 50 +name_key = "wallnut" +description_key = "wallnut_desc" +Cost = 50.0 Scene = ExtResource("2_rkn3h") ReloadTime = 20.0 ReloadProgress = 0.0 diff --git a/resources/zombies/basic.tres b/resources/zombies/basic.tres index 9b4796e..6868200 100644 --- a/resources/zombies/basic.tres +++ b/resources/zombies/basic.tres @@ -10,7 +10,7 @@ display_name = "Basic zombie" display_description = "The most basic zombie that zomboss has. Health points: [color=darkred]7 peas[/color]. Walk speed: [color=darkred]0.2 tiles/second[/color]. -Attack speed: [color=darkred]1 Gz[/color]. +Attack speed: [color=darkred]1 Hz[/color]. Attack damage: [color=darkred]1 bite[/color]. " diff --git a/resources/zombies/buckethead.tres b/resources/zombies/buckethead.tres index 3f58abb..52bd77c 100644 --- a/resources/zombies/buckethead.tres +++ b/resources/zombies/buckethead.tres @@ -11,7 +11,7 @@ display_description = "Wears metal to protect his remaining brains. Equivalent o Health points: [color=darkred]7 peas[/color]. Armour points: [color=darkred]39 peas[/color]. Walk speed: [color=darkred]0.2 tiles/second[/color]. -Attack speed: [color=darkred]1 Gz[/color]. +Attack speed: [color=darkred]1 Hz[/color]. Attack damage: [color=darkred]1 bite[/color]." Cost = 5.0 Scene = ExtResource("1_lhcag") diff --git a/resources/zombies/conehead.tres b/resources/zombies/conehead.tres index 43fb0d6..9a20089 100644 --- a/resources/zombies/conehead.tres +++ b/resources/zombies/conehead.tres @@ -11,7 +11,7 @@ display_description = "Armoured vesion of basic zombie. Equivalent of ~3 zombies Health points: [color=darkred]7 peas[/color]. Armour points: [color=darkred]13 peas[/color]. Walk speed: [color=darkred]0.2 tiles/second[/color]. -Attack speed: [color=darkred]1 Gz[/color]. +Attack speed: [color=darkred]1 Hz[/color]. Attack damage: [color=darkred]1 bite[/color]." Cost = 2.0 Scene = ExtResource("1_llf5l") diff --git a/resources/zombies/hobo.tres b/resources/zombies/hobo.tres index b8d6365..847296d 100644 --- a/resources/zombies/hobo.tres +++ b/resources/zombies/hobo.tres @@ -6,13 +6,13 @@ [resource] script = ExtResource("1_u5qpq") -display_name = "Garbage can zombie" +display_name = "Trash can zombie" display_description = "Some time in the past he met a great conqueror. Hates to live without his can. Equivalent of ~8 zombies. Health points: [color=darkred]13 peas[/color]. Armour points: [color=darkred]39 peas[/color]. Walk speed: [color=darkred]0.2 tiles/second[/color]. Run speed: [color=darkred]0.6 tiles/second[/color]. -Attack speed: [color=darkred]1 Gz[/color]. +Attack speed: [color=darkred]1 Hz[/color]. Attack damage: [color=darkred]1 bite[/color]." Cost = 7.0 Scene = ExtResource("1_4myt6") diff --git a/scripts/components/gui/choose_your_seeds/Previewport.cs b/scripts/components/gui/choose_your_seeds/Previewport.cs index 45c899b..bb90799 100644 --- a/scripts/components/gui/choose_your_seeds/Previewport.cs +++ b/scripts/components/gui/choose_your_seeds/Previewport.cs @@ -41,8 +41,8 @@ public partial class Previewport : SubViewport else GetNode("FrameField").Texture = start_Field; current_display = resource.Scene.Instantiate(); - title.Text = resource.display_name; - description.Text = resource.display_description; + title.Text = Tr(resource.name_key); + description.Text = Tr(resource.description_key); AddChild(current_display); if (current_display is IEntity entity) entity.DisableBrain(); diff --git a/scripts/resources/DisplayResource.cs b/scripts/resources/DisplayResource.cs index a499473..fb98245 100644 --- a/scripts/resources/DisplayResource.cs +++ b/scripts/resources/DisplayResource.cs @@ -2,8 +2,8 @@ using Godot; public partial class DisplayResource : Resource { - [Export] public string display_name; - [Export(PropertyHint.MultilineText)] public string display_description; + [Export] public string name_key; + [Export] public string description_key; [Export] public float Cost; [Export] diff --git a/translations/plants.csv b/translations/plants.csv new file mode 100644 index 0000000..f322a3b --- /dev/null +++ b/translations/plants.csv @@ -0,0 +1,83 @@ +keys,en,ru +aloe,Aloe,Алоэ +aloe_desc,"[p]Aloe heals injured plants.[/p] +[p]Health points: [color=DARK_RED]3 bites[/color][/p] +[p]Reload time: [color=DARK_RED]15 seconds[/color].[/p] +[p]Ability recharge time: [color=DARK_RED]20 seconds[/color].[/p] +[p]Heals plant when it has [color=DARK_RED]third[/color] of its health.[/p]","Алоэ лечит израненные растения. +Очки здоровья: [color=dark_red]3 укуса[/color]. +Время перезарядки: [color=dark_red]15 секунд[/color]. +Время перезарядки способности: [color=dark_red]20 секунд[/color]. +Лечит растения [color=DARK_RED]с третью[/color] здоровья." +garlic,Garlic,Чеснок +garlic_desc,"[p]Redirects zombies that bite it.[/p] +[p]Health points: [color=DARK_RED]20 bites[/color][/p] +[p]Reload time: [color=DARK_RED]15 seconds[/color].[/p]","Перенаправляет зомби, которые его кусают. +Очки здоровья: [color=DARK_RED]20 укусов[/color] +Время перезарядки: [color=DARK_RED]15 секунд[/color]." +peashooter,Peashooter,Горохострел +peashooter_desc,"[p]Simply shoots peas at zombies on the lane[/p] +[p]Health points: [color=DARK_RED]3 bites[/color].[/p] +[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] +[p]Pea damage: [color=DARK_RED]1 pea[/color].[/p] +[p]Firerate: [color=DARK_RED]1.5 seconds[/color].[/p]","Просто стреляет в зомби на линии. +Очки здоровья: [color=DARK_RED]3 укуса[/color]. +Время перезарядки: [color=DARK_RED]5 секунд[/color]. +Урон от гороха: [color=DARK_RED]1 горошина[/color]. +Задержка стрельбы: [color=DARK_RED]1.5 секунды[/color]." +potatomine,Potato mine,Картофельная мина +potatomine_desc,"[p]Explodes when stepped on. Needs some time to prime.[/p] +[p]Health points: [color=DARK_RED]2 bites[/color].[/p] +[p]Reload time: [color=DARK_RED]25 seconds[/color].[/p] +[p]Explosion damage: [color=DARK_RED]600 peas[/color].[/p] +[p]Prime time: [color=DARK_RED]15 seconds[/color].[/p]","Взрывается когда на неё наступают. Требует некоторое время для роста. +Очки здоровья: [color=DARK_RED]2 Укуса[/color]. +Время перезарядки: [color=DARK_RED]25 seconds[/color]. +Урон от взрыва: [color=DARK_RED]600 горошин[/color]. +Время роста: [color=DARK_RED]15 seconds[/color]." +snowpea,Snowpea,Снежный горох +snowpea_desc,"[p]Shoots slowing peas at zombies.[/p] +[p]Health points: [color=DARK_RED]3 bites[/color].[/p] +[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] +[p]Pea damage: [color=DARK_RED]1 pea[/color].[/p] +[p]Firerate: [color=DARK_RED]1.5 seconds[/color].[/p] +[p]Slow percentage: [color=STEEL_BLUE]25%[/color].[/p]","Стреляет замедляющими горошинами в зомби. +Очки здоровья: [color=DARK_RED]3 укуса[/color]. +Время перезарядки: [color=DARK_RED]5 секунд[/color]. +Урон от гороха: [color=DARK_RED]1 горошина[/color]. +Задержка стрельбы: [color=DARK_RED]1.5 секунды[/color]. +Процент замедления: [color=STEEL_BLUE]25%[/color]." +spikeweed,Spikeweed,Колючка +spikeweed_desc,"[p]Attacks zombies that step on it.[/p] +[p]Health points: [color=DARK_RED]3 bites[/color].[/p] +[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] +[p]Damage per second: [color=DARK_RED]0.9 peas[/color].[/p]","Атакует наступающих на неё зомби. +Очки здоровья: [color=DARK_RED]3 укуса[/color]. +Время перезарядки: [color=DARK_RED]5 секунд[/color]. +Урон в секунду: [color=DARK_RED]0.9 горошин[/color]." +sunflower,Sunflower,Подсолнух +sunflower_desc,"[p]Produces sun over time.[/p] +[p]Health points: [color=DARK_RED]3 bites[/color][/p] +[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] +[p]Initial sun production time: [color=DARK_RED]12 seconds[/color].[/p] +[p]Sun production time: [color=DARK_RED]24 seconds[/color](After first sun produced).[/p]","Производит солнце время от времени. +Очки здоровья: [color=DARK_RED]3 укуса[/color] +Время перезарядки: [color=DARK_RED]5 секунд[/color]. +Изначальная задержка выработки солнца: [color=DARK_RED]12 секунд[/color]. +Задержка выработки солнца: [color=DARK_RED]24 секунды[/color](После первого солнца)." +threepeater,Threepeater,Тристрел +threepeater_desc,"[p]Shoots peas at zombies in three lanes.[/p] +[p]Health points: [color=DARK_RED]3 bites[/color].[/p] +[p]Reload time: [color=DARK_RED]5 seconds[/color].[/p] +[p]Pea damage: [color=DARK_RED]1 pea[/color] ([color=DARK_RED]3 pea[/color] when in close quarters).[/p] +[p]Firerate: [color=DARK_RED]1.6 seconds[/color].[/p]","Стреляет в зомби по трём линиям. +Очки здоровья: [color=DARK_RED]3 укуса[/color]. +Время перезарядки: [color=DARK_RED]5 секунд[/color]. +Урон от гороха: [color=DARK_RED]1 горошина[/color] ([color=DARK_RED]3 горошины[/color] вблизи). +Задержка стрельбы: [color=DARK_RED]1.6 секунд[/color]." +wallnut,Wallnut,Стенорех +wallnut_desc,"[p]Absorbs zombie damage. Does nothing special[/p] +[p]Health points: [color=DARK_RED]60 bites[/color][/p] +[p]Reload time: [color=DARK_RED]20 seconds[/color].[/p]","Принимает на себя урон от зомби. Ничего интересного. +Очки здоровья: [color=DARK_RED]60 укусов[/color] +Время перезарядки: [color=DARK_RED]20 секунд[/color]." diff --git a/translations/plants.csv.import b/translations/plants.csv.import new file mode 100644 index 0000000..3a2532f --- /dev/null +++ b/translations/plants.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://dw0l3ejdd3xym" + +[deps] + +files=["res://translations/plants.en.translation", "res://translations/plants.ru.translation"] + +source_file="res://translations/plants.csv" +dest_files=["res://translations/plants.en.translation", "res://translations/plants.ru.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/plants.en.translation b/translations/plants.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..b6310f1cd2f42e3731f7c22320dc701cd24c0bd5 GIT binary patch literal 3102 zcmc&%e`s4(6n;s&EPaXXIyH$dwh6_#6*XzLWjNDnYSJldZAdDXZrST=`qsWRO=4bR zQ!x`{Vu!AC4h93EP#A-4Dq4_%e+aWWH`Erb`iDO@>O?`&DN?A&i{E|8OJ3VFt;HV? zKJLBeo^$Ux-#Pc*#2@fKMCHD6v;-R9R-iqW;0O7qxZaL98xg{6f{#WZ&VFTRx-G+B zja_VU$+Fe7S}2)-I44At@es#^qailTB%+KE;vyVXsho?jgB(=>$si{PY#%33>oJfl zI7)|ZKP&Vz3AQK9Q8!`OlMD@TiJXA!BqZW|q%UhGgyMWG0U<@HfI2{0X_w7bEK;Ul zV7K*BTZt~dWeJg4vp~rRWE3BU5}QP%M}H$=0c4eW^zDEXAS^ZmtpJ(#qurP5%lhju zwg5c<@r!^t-c~z~4xx!qBFhi|-uBrqNF@y!*;|&s_3NkKTtfC75NroXBFS9KbI;s( z2LnPI!OK6LesUhc5qpB`{LZS+;lOQBz86qKM(pNlt{+E35#I><=KQfYFj!n`T7(bT zetfk2mNGbS8M03Ra$0JEccJ7CM>!a}GOD24pwVsUG**cRPd?~6;-e$t-uGN$upvA9 zaLVwlOH)-wi@TtoG}LG4MvvRShw*zo!EO6(PG}RUDyX#bzp445a#o$U(G_eOb~Jra zYofDeVsPPZ?yeiQ-PTj>^UD}J>?Mrhsu2NmmVLp^&!{4m6n#+t|p6JpZvhTO)YzrM+N{1pe2MqoZK8RPMFGat7b(5I$D=_Q2 zgt2k@#pfm8MpYl(u3k%~7E``BRf_bM%9Jm4y8PAoe1a8L4e69j^g`}hwAN?6MJ*y? zk*%^MT)nINo+`D>g7*)XL37Y}ajH%2ny#rG79ai5WSj_B&c4#^iia0&w=`7>Cms1r zt;B~izeT*v9~8;8nNgFH6@8)poOXLUwM^Cf;)r0?hlTJGh(w2C94prb>Vh_C+%4(U z`8rY^&cDG#;S8_Dgo3_OMEv`ek>@;spwpX1eC35gtZEE&c)hJmbL(T?pkv3K((ROs zOkys^4{$>q*PG+cUG{-l9LSybCa>$t-2cg)2i22)nn^YmJ0|vsc;Dh0l0r&G4uqpa zTs#+&PcUsBG1AxW_#RcYrf9HgsoQ*&h44s)P21UYEe&_fM~^L2;Eoa(dZ4teW4ppO zqYiFy-+iH9`*j^HnT?plty1uWBC%tmRXzQkUcN^Hikpr~LFI4R=ev5HBVFn8C4zDqhKI&#AeiyqCP k!v{k2v{~D^!Yib>K%HxOAd9{EB&X8v9r9bpkADV#0q!0_G5`Po literal 0 HcmV?d00001 diff --git a/translations/plants.ru.translation b/translations/plants.ru.translation new file mode 100644 index 0000000000000000000000000000000000000000..566223676e4292d3458559894ed636f0fd55c8e3 GIT binary patch literal 4209 zcmd^DUuaup6u;^^wW}MOe;Md5im-~bX=Xbdia1+e)*)mQ23^h4^xB2BNy$we`eM_p zR@bgwJFqg*;l>zxg{hjaL@7|lFk)`!PFzhtn zJ@@<0`OfeB%>su4FKPB?6TX=?gB}FEGMI=AMBXxb5644MvpRqq5fbZ7Bs^~)X=ti-$g?MhITJF1BPja`V3RM z8xQh?p>4tPc*r~+OoV#+4edTW_6&tj7zvxfn#@Ez6792&nc;Y3Faf5f-2r+6Bqi-@ zZeGjM;F~9XZE>xU_u^9(kUG3%Fw}Q^NP?(?^)To!&j*hZTxK<3y#u6!)Rw2P_JP_! z&w=)XIzjwCfbXOBTJ2|*I;aQ4*JKJ#AKYc$Y3XMDiht_&gWtSXuW8%CV^aM2U%&ot z4uW!EFtI88?&Z<9f0+e;C)P|eKVE+0b)dfuYo?o#z1z+M;#F*Bf=YSr)?+uPv6Nn8 z&-L933^pLD#<7P9|0JEc_CoM94jlu7N%4<MXATRdujr?%4*~R_v1U@|LkHTg{{W*O2aideZ>igUV-}mf z1&`^^t{b1#;e0uM7biD8Fa%t7U@sFV&n{3Ml+syRqM|tCEOb2Q#2Dqph)#K05W|$F zWy*n;#W>}3W{9L1k*vI!YO1G?v44^BIxSEZ!iK3x88IQI_UT>WSbr@3d~YazA{aM% zyZ7iKMT;UOl9cXhmM^;@U z*=FS+I8j}<1`j!+s(DDGb9`OUC|1n`QlY|ePh)`3!*12vCDp7J%B zxX}=F46GV~m)HN-<8&Qvtkxr&&oKMhnv%0P$pIh#(oJTs55Vgp{0)vfw0omgAYLiIsrqnw;p@>5>X^$HetSslQb> zjc_d5YkI_#Ixyp+Qi*t*&sXL`j~utGxn@?1K%$giL8DIqc8=y{&HdcfFp4+jnSn|P z7v|t1018jM2Y14y?jbv}ET%V)YJ&WKnm6@!U3v!yFI&aefty)qly09pbhx9VGq}I= z)sAj|>yu6-aPAf1ok`gz)9AG*a%tJS>_m|r6?tRj5=ynECv+W$<6 zXt$T_#&p8-69z>!ud#=C@bF%?5j}@HLf&oWT4nX})+3e%8JGyfG!>i%j}f4-VQ)f! zTaKaUpQcQwJy&&SX@^*6i`RGC@v)XAM^c1fwca*6}%R+bQm7&Wz($C!Icm!^a?v!+{42gt5dLp~15) b*fsgG?cbY7s}1z{DI|Zi^Y5(y{ Date: Thu, 3 Jul 2025 23:29:19 +0500 Subject: [PATCH 6/7] All translations done --- project.godot | 2 +- resources/zombies/basic.tres | 10 +-- resources/zombies/buckethead.tres | 9 +-- resources/zombies/conehead.tres | 9 +-- resources/zombies/hobo.tres | 10 +-- scenes/gui/almanach.tscn | 60 +++++++++--------- scenes/gui/pause_menu.tscn | 6 +- scenes/main_menu.tscn | 43 ++++--------- scripts/components/gui/main_menu_rich_text.gd | 1 - translations/gui.csv | 55 ++++++++++++++++ translations/gui.csv.import | 17 +++++ translations/gui.en.translation | Bin 0 -> 1666 bytes translations/gui.ru.translation | Bin 0 -> 2729 bytes translations/zombies.csv | 49 ++++++++++++++ translations/zombies.csv.import | 17 +++++ translations/zombies.en.translation | Bin 0 -> 1722 bytes translations/zombies.ru.translation | Bin 0 -> 2561 bytes 17 files changed, 191 insertions(+), 97 deletions(-) create mode 100644 translations/gui.csv create mode 100644 translations/gui.csv.import create mode 100644 translations/gui.en.translation create mode 100644 translations/gui.ru.translation create mode 100644 translations/zombies.csv create mode 100644 translations/zombies.csv.import create mode 100644 translations/zombies.en.translation create mode 100644 translations/zombies.ru.translation diff --git a/project.godot b/project.godot index 171ddb1..0ada405 100644 --- a/project.godot +++ b/project.godot @@ -84,7 +84,7 @@ cheat_zombie_spawn={ [internationalization] -locale/translations=PackedStringArray("res://translations/plants.en.translation", "res://translations/plants.ru.translation") +locale/translations=PackedStringArray("res://translations/plants.en.translation", "res://translations/plants.ru.translation", "res://translations/zombies.en.translation", "res://translations/zombies.ru.translation", "res://translations/gui.en.translation", "res://translations/gui.ru.translation") [layer_names] diff --git a/resources/zombies/basic.tres b/resources/zombies/basic.tres index 6868200..2c5675a 100644 --- a/resources/zombies/basic.tres +++ b/resources/zombies/basic.tres @@ -6,14 +6,8 @@ [resource] script = ExtResource("1_k277m") -display_name = "Basic zombie" -display_description = "The most basic zombie that zomboss has. -Health points: [color=darkred]7 peas[/color]. -Walk speed: [color=darkred]0.2 tiles/second[/color]. -Attack speed: [color=darkred]1 Hz[/color]. -Attack damage: [color=darkred]1 bite[/color]. - -" +name_key = "basic" +description_key = "basic_desc" Cost = 1.0 Scene = ExtResource("1_c2mq3") ReloadTime = 1.0 diff --git a/resources/zombies/buckethead.tres b/resources/zombies/buckethead.tres index 52bd77c..b342cd9 100644 --- a/resources/zombies/buckethead.tres +++ b/resources/zombies/buckethead.tres @@ -6,13 +6,8 @@ [resource] script = ExtResource("1_sngfh") -display_name = "Buckethead zombie" -display_description = "Wears metal to protect his remaining brains. Equivalent of ~7 zombies. -Health points: [color=darkred]7 peas[/color]. -Armour points: [color=darkred]39 peas[/color]. -Walk speed: [color=darkred]0.2 tiles/second[/color]. -Attack speed: [color=darkred]1 Hz[/color]. -Attack damage: [color=darkred]1 bite[/color]." +name_key = "buckethead" +description_key = "buckethead_desc" Cost = 5.0 Scene = ExtResource("1_lhcag") ReloadTime = 1.0 diff --git a/resources/zombies/conehead.tres b/resources/zombies/conehead.tres index 9a20089..36b66d9 100644 --- a/resources/zombies/conehead.tres +++ b/resources/zombies/conehead.tres @@ -6,13 +6,8 @@ [resource] script = ExtResource("1_sw7hj") -display_name = "Conehead zombie" -display_description = "Armoured vesion of basic zombie. Equivalent of ~3 zombies. -Health points: [color=darkred]7 peas[/color]. -Armour points: [color=darkred]13 peas[/color]. -Walk speed: [color=darkred]0.2 tiles/second[/color]. -Attack speed: [color=darkred]1 Hz[/color]. -Attack damage: [color=darkred]1 bite[/color]." +name_key = "conehead" +description_key = "conehead_desc" Cost = 2.0 Scene = ExtResource("1_llf5l") ReloadTime = 1.0 diff --git a/resources/zombies/hobo.tres b/resources/zombies/hobo.tres index 847296d..6736d4f 100644 --- a/resources/zombies/hobo.tres +++ b/resources/zombies/hobo.tres @@ -6,14 +6,8 @@ [resource] script = ExtResource("1_u5qpq") -display_name = "Trash can zombie" -display_description = "Some time in the past he met a great conqueror. Hates to live without his can. Equivalent of ~8 zombies. -Health points: [color=darkred]13 peas[/color]. -Armour points: [color=darkred]39 peas[/color]. -Walk speed: [color=darkred]0.2 tiles/second[/color]. -Run speed: [color=darkred]0.6 tiles/second[/color]. -Attack speed: [color=darkred]1 Hz[/color]. -Attack damage: [color=darkred]1 bite[/color]." +name_key = "hobo" +description_key = "hobo_desc" Cost = 7.0 Scene = ExtResource("1_4myt6") ReloadTime = 1.0 diff --git a/scenes/gui/almanach.tscn b/scenes/gui/almanach.tscn index 33c0f64..7073275 100644 --- a/scenes/gui/almanach.tscn +++ b/scenes/gui/almanach.tscn @@ -6,10 +6,10 @@ [ext_resource type="Texture2D" uid="uid://dycdvvgmgmfu6" path="res://assets/sprites/gui/ChooseYourSeeds/FrameField.tres" id="3_oy57w"] [sub_resource type="ViewportTexture" id="ViewportTexture_ru62c"] -viewport_path = NodePath("Plants/Infobox/FrameAndTitle/Frame/Previewport") +viewport_path = NodePath("plants/Infobox/FrameAndTitle/Frame/Previewport") [sub_resource type="ViewportTexture" id="ViewportTexture_7yl8g"] -viewport_path = NodePath("Zombies/Infobox/FrameAndTitle/Frame/Previewport") +viewport_path = NodePath("zombies/Infobox/FrameAndTitle/Frame/Previewport") [node name="Almanach" type="TabContainer"] anchors_preset = 15 @@ -20,46 +20,46 @@ grow_vertical = 2 tab_alignment = 1 current_tab = 0 -[node name="Plants" type="HBoxContainer" parent="."] +[node name="plants" type="HBoxContainer" parent="."] layout_mode = 2 metadata/_tab_index = 0 -[node name="SeedpacketsContainer" type="ScrollContainer" parent="Plants"] +[node name="SeedpacketsContainer" type="ScrollContainer" parent="plants"] layout_mode = 2 horizontal_scroll_mode = 0 -[node name="GridContainer" type="GridContainer" parent="Plants/SeedpacketsContainer"] +[node name="GridContainer" type="GridContainer" parent="plants/SeedpacketsContainer"] layout_mode = 2 columns = 8 script = ExtResource("1_ru62c") -[node name="Infobox" type="VBoxContainer" parent="Plants"] +[node name="Infobox" type="VBoxContainer" parent="plants"] layout_mode = 2 size_flags_horizontal = 3 -[node name="FrameAndTitle" type="HBoxContainer" parent="Plants/Infobox"] +[node name="FrameAndTitle" type="HBoxContainer" parent="plants/Infobox"] layout_mode = 2 -[node name="Frame" type="TextureRect" parent="Plants/Infobox/FrameAndTitle"] +[node name="Frame" type="TextureRect" parent="plants/Infobox/FrameAndTitle"] clip_contents = true layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 texture = ExtResource("1_1hnxi") -[node name="Previewport" type="SubViewport" parent="Plants/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] +[node name="Previewport" type="SubViewport" parent="plants/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] canvas_item_default_texture_filter = 0 size = Vector2i(65, 65) script = ExtResource("2_ru62c") title = NodePath("../../Label") description = NodePath("../../../Description/ScrollContainer/RichTextLabel") -[node name="FrameField" type="Sprite2D" parent="Plants/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="FrameField" type="Sprite2D" parent="plants/Infobox/FrameAndTitle/Frame/Previewport"] texture = ExtResource("3_oy57w") -[node name="Camera2D" type="Camera2D" parent="Plants/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="Camera2D" type="Camera2D" parent="plants/Infobox/FrameAndTitle/Frame/Previewport"] -[node name="Render" type="TextureRect" parent="Plants/Infobox/FrameAndTitle/Frame"] +[node name="Render" type="TextureRect" parent="plants/Infobox/FrameAndTitle/Frame"] show_behind_parent = true layout_mode = 1 anchors_preset = 15 @@ -69,23 +69,23 @@ grow_horizontal = 2 grow_vertical = 2 texture = SubResource("ViewportTexture_ru62c") -[node name="Label" type="Label" parent="Plants/Infobox/FrameAndTitle"] +[node name="Label" type="Label" parent="plants/Infobox/FrameAndTitle"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 horizontal_alignment = 1 vertical_alignment = 1 -[node name="Description" type="PanelContainer" parent="Plants/Infobox"] +[node name="Description" type="PanelContainer" parent="plants/Infobox"] layout_mode = 2 size_flags_vertical = 3 theme_type_variation = &"description_panel_container" -[node name="ScrollContainer" type="ScrollContainer" parent="Plants/Infobox/Description"] +[node name="ScrollContainer" type="ScrollContainer" parent="plants/Infobox/Description"] layout_mode = 2 horizontal_scroll_mode = 0 -[node name="RichTextLabel" type="RichTextLabel" parent="Plants/Infobox/Description/ScrollContainer"] +[node name="RichTextLabel" type="RichTextLabel" parent="plants/Infobox/Description/ScrollContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -93,49 +93,49 @@ theme_override_colors/default_color = Color(0, 0, 0, 1) theme_override_colors/font_selected_color = Color(0, 0, 0, 1) bbcode_enabled = true -[node name="Zombies" type="HBoxContainer" parent="."] +[node name="zombies" type="HBoxContainer" parent="."] visible = false layout_mode = 2 metadata/_tab_index = 1 -[node name="SeedpacketsContainer" type="ScrollContainer" parent="Zombies"] +[node name="SeedpacketsContainer" type="ScrollContainer" parent="zombies"] layout_mode = 2 horizontal_scroll_mode = 0 -[node name="GridContainer" type="GridContainer" parent="Zombies/SeedpacketsContainer"] +[node name="GridContainer" type="GridContainer" parent="zombies/SeedpacketsContainer"] layout_mode = 2 columns = 8 script = ExtResource("1_ru62c") _zombies = true -[node name="Infobox" type="VBoxContainer" parent="Zombies"] +[node name="Infobox" type="VBoxContainer" parent="zombies"] layout_mode = 2 size_flags_horizontal = 3 -[node name="FrameAndTitle" type="HBoxContainer" parent="Zombies/Infobox"] +[node name="FrameAndTitle" type="HBoxContainer" parent="zombies/Infobox"] layout_mode = 2 -[node name="Frame" type="TextureRect" parent="Zombies/Infobox/FrameAndTitle"] +[node name="Frame" type="TextureRect" parent="zombies/Infobox/FrameAndTitle"] clip_contents = true layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 texture = ExtResource("1_1hnxi") -[node name="Previewport" type="SubViewport" parent="Zombies/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] +[node name="Previewport" type="SubViewport" parent="zombies/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] canvas_item_default_texture_filter = 0 size = Vector2i(130, 130) script = ExtResource("2_ru62c") title = NodePath("../../Label") description = NodePath("../../../Description/ScrollContainer/RichTextLabel") -[node name="FrameField" type="Sprite2D" parent="Zombies/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="FrameField" type="Sprite2D" parent="zombies/Infobox/FrameAndTitle/Frame/Previewport"] texture = ExtResource("3_oy57w") -[node name="Camera2D" type="Camera2D" parent="Zombies/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="Camera2D" type="Camera2D" parent="zombies/Infobox/FrameAndTitle/Frame/Previewport"] position = Vector2(0, -45) -[node name="Render" type="TextureRect" parent="Zombies/Infobox/FrameAndTitle/Frame"] +[node name="Render" type="TextureRect" parent="zombies/Infobox/FrameAndTitle/Frame"] show_behind_parent = true layout_mode = 1 anchors_preset = 15 @@ -146,23 +146,23 @@ grow_vertical = 2 texture = SubResource("ViewportTexture_7yl8g") expand_mode = 1 -[node name="Label" type="Label" parent="Zombies/Infobox/FrameAndTitle"] +[node name="Label" type="Label" parent="zombies/Infobox/FrameAndTitle"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 horizontal_alignment = 1 vertical_alignment = 1 -[node name="Description" type="PanelContainer" parent="Zombies/Infobox"] +[node name="Description" type="PanelContainer" parent="zombies/Infobox"] layout_mode = 2 size_flags_vertical = 3 theme_type_variation = &"description_panel_container" -[node name="ScrollContainer" type="ScrollContainer" parent="Zombies/Infobox/Description"] +[node name="ScrollContainer" type="ScrollContainer" parent="zombies/Infobox/Description"] layout_mode = 2 horizontal_scroll_mode = 0 -[node name="RichTextLabel" type="RichTextLabel" parent="Zombies/Infobox/Description/ScrollContainer"] +[node name="RichTextLabel" type="RichTextLabel" parent="zombies/Infobox/Description/ScrollContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 diff --git a/scenes/gui/pause_menu.tscn b/scenes/gui/pause_menu.tscn index 24b4d52..94787ed 100644 --- a/scenes/gui/pause_menu.tscn +++ b/scenes/gui/pause_menu.tscn @@ -67,7 +67,7 @@ layout_mode = 2 [node name="PAUSED" type="Label" parent="Pause/MarginContainer/Buttons"] layout_mode = 2 -text = "PAUSED" +text = "paused" label_settings = SubResource("LabelSettings_or0he") horizontal_alignment = 1 metadata/_edit_use_anchors_ = true @@ -77,7 +77,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Pause/MarginContainer/Buttons/SFXVolume"] layout_mode = 2 -text = "SFX" +text = "sfx" [node name="HSlider" type="HSlider" parent="Pause/MarginContainer/Buttons/SFXVolume"] layout_mode = 2 @@ -92,7 +92,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Pause/MarginContainer/Buttons/MusicVolume"] layout_mode = 2 -text = "Music" +text = "music" [node name="HSlider" type="HSlider" parent="Pause/MarginContainer/Buttons/MusicVolume"] layout_mode = 2 diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn index 41394d7..2df74f2 100644 --- a/scenes/main_menu.tscn +++ b/scenes/main_menu.tscn @@ -46,11 +46,10 @@ script = SubResource("GDScript_5dd4i") canvas_item_default_texture_filter = 0 title = "" size = Vector2i(600, 400) -visible = true unresizable = true borderless = true theme_override_styles/panel = SubResource("StyleBoxTexture_jl0ue") -ok_button_text = "Close" +ok_button_text = "close" dialog_close_on_escape = false script = ExtResource("2_lgwnu") @@ -65,18 +64,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 bbcode_enabled = true -text = "[p][center][wave amp=50.0 freq=5.0 connected=1][font_size=24]WELCOME TO LIBERATION OF NEIGHBOURVILLE PROTOTYPE![/font_size][/wave][/center][/p] -[p]Big thanks from me, Rendo, and our team! We appreciate any feedback, so consider reporting bugs to our [color=cyan][url=https://discord.gg/Y5Wk8H8EBY]discord server[/url][/color].[/p][p][/p] -[p]Liberation of Neighbourville is currently in early stages of development. However, we reached point when all essential systems and mechanics are ready.[/p] -[p][/p] -[p]As for now, you can play survival endless with all currently made plants. Game includes some plants from first Plants versus Zombies, Aloe from sequel, three basic zombies and a hobo zombie.[/p] -[p][/p] -[p]As for 0.2.X version, current roadmap contains:[ul] -[p]Adventure mode[/p] -[p]Almanach[/p] -[p]New plants and zombies, obviously[/p] -[p]More ways to play[/p] -[/ul][/p]" +text = "lon_proto" fit_content = true scroll_active = false script = ExtResource("2_5dd4i") @@ -88,13 +76,13 @@ initial_position = 2 size = Vector2i(300, 300) unresizable = true borderless = true -ok_button_text = "Close" +ok_button_text = "close" [node name="ScrollContainer" type="ScrollContainer" parent="AboutWindow"] -offset_left = 6.0 -offset_top = 6.0 -offset_right = 294.0 -offset_bottom = 243.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 292.0 +offset_bottom = 241.0 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -102,16 +90,7 @@ size_flags_vertical = 3 layout_mode = 2 size_flags_horizontal = 3 bbcode_enabled = true -text = "[p][center][font_size=24]About[/font_size][/center][/p] -[p]Made in [color=steel_blue]Godot Engine [img=16]res://icon.svg[/img][/color][/p] -[p] -Made by: [ul] -[p]Rendo - programmer, gamedesigner[/p] -[p]Slaimy - graphics designer, gamedesigner[/p] -[p]CaTronick - graphics designer, gamedesigner[/p] -[/ul] -[/p] -[p]All rights for Plants versus Zombies franchise belong to PopCap games[/p]" +text = "about_screen" fit_content = true scroll_active = false @@ -143,11 +122,11 @@ offset_bottom = 275.0 [node name="PlayButton" type="Button" parent="Buttons/GameButtons"] layout_mode = 2 -text = "Play" +text = "play" [node name="ExitButton" type="Button" parent="Buttons/GameButtons"] layout_mode = 2 -text = "Exit" +text = "exit" [node name="InfoButtons" type="VBoxContainer" parent="Buttons"] layout_mode = 0 @@ -158,7 +137,7 @@ offset_bottom = 235.0 [node name="Button" type="Button" parent="Buttons/InfoButtons"] layout_mode = 2 -text = "About" +text = "about" [node name="SACRIFICE" type="TextureButton" parent="Buttons"] layout_mode = 0 diff --git a/scripts/components/gui/main_menu_rich_text.gd b/scripts/components/gui/main_menu_rich_text.gd index 57174b2..6573174 100644 --- a/scripts/components/gui/main_menu_rich_text.gd +++ b/scripts/components/gui/main_menu_rich_text.gd @@ -1,5 +1,4 @@ extends RichTextLabel - func _on_meta_clicked(meta: Variant) -> void: OS.shell_open(meta) diff --git a/translations/gui.csv b/translations/gui.csv new file mode 100644 index 0000000..c0462a2 --- /dev/null +++ b/translations/gui.csv @@ -0,0 +1,55 @@ +keys,en,ru +plants,Plants,Растения +zombies,Zombies,Зомби +lon_proto,"[center][wave amp=50.0 freq=5.0 connected=1][font_size=24]WELCOME TO LIBERATION OF NEIGHBOURVILLE PROTOTYPE![/font_size][/wave][/center] +Big thanks from me, Rendo, and our team! We appreciate any feedback, so consider reporting bugs to our [color=cyan][url=https://discord.gg/Y5Wk8H8EBY]discord server[/url][/color]. + +Liberation of Neighbourville is currently in early stages of development. However, we reached point when all essential systems and mechanics are ready. + +As for now, you can play survival endless with all currently made plants. Game includes some plants from first Plants versus Zombies, Aloe from sequel, three basic zombies and a hobo zombie. + +As for 0.2.X version, current roadmap contains:[ul] +Adventure mode +New plants and zombies, obviously +More ways to play +[/ul]","[center][wave amp=50.0 freq=5.0 connected=1][font_size=24]ДОБРО ПОЖАЛОВАТЬ ПРОТОТИП LIBERATION OF NEIGHBOURVILLE![/font_size][/wave][/center] +Огромное спасибо от меня, Рендо, и нашей команды! Мы рады любому фидбеку, так что присоединяйтесь к нашему [color=cyan][url=https://discord.gg/Y5Wk8H8EBY]дискорд серверу[/url][/color]. + + +Liberation of Neighbourville на данный момент на ранних этапах разработки. Тем не менее, мы достигли момента, когда все необходимые системы и механики готовы. + +Ну, а сейчас вы можете сыграть в бесконечный режим со всеми сделанными на данный момент растениями. Игра включает в себя некоторые растения из первой части, Алоэ из сиквела, три базовых зомби и бездомного зомби. + +На момент версии 0.2.X, дорожная карта содержит:[ul] +Режим приключений +Новые растения и зомби, очевидно +Больше способов играть +[/ul]" +play,Play,Играть +exit,Exit,Выйти +about,About,О нас +restart,Restart,Перезапустить +continue,Continue,Продолжить +about_screen,"[center][font_size=24]About[/font_size][/center] +Made in [color=steel_blue]Godot Engine [img=16]res://icon.svg[/img][/color] + +Made by: [ul] +Rendo - programmer, gamedesigner +Slaimy - graphics designer, gamedesigner +CaTronick - graphics designer, gamedesigner +[/ul] + +All rights for Plants versus Zombies franchise belong to PopCap games","[center][font_size=24]О нас[/font_size][/center] +Сделано в [color=steel_blue]Godot Engine [img=16]res://icon.svg[/img][/color] + +Благодаря: [ul] +Rendo - программист, геймдизайнер +Slaimy - дизайнер графики, геймдизайнер +CaTronick - дизайнер графики, геймдизайнер +[/ul] + +Все права на Plants versus Zombies франшизу принадлежат PopCap games." +close,Close,Закрыть +sfx,SFX,Звуки +music,Music,Музыка +paused,Paused,Игра на паузе diff --git a/translations/gui.csv.import b/translations/gui.csv.import new file mode 100644 index 0000000..3e16be7 --- /dev/null +++ b/translations/gui.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://0pm71mck1ljf" + +[deps] + +files=["res://translations/gui.en.translation", "res://translations/gui.ru.translation"] + +source_file="res://translations/gui.csv" +dest_files=["res://translations/gui.en.translation", "res://translations/gui.ru.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/gui.en.translation b/translations/gui.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..0c1052f282bdbcb8854bd9868d36247f55a81a2c GIT binary patch literal 1666 zcma)7Urbw77(cZ2uG}(^Id3a8V;xPCk>OSp*3er>>AF(W(x$Bg+I6LrYq|9H-okAo zsLTwEk<2BVx<(&(Ai=$iy|~1OO~PW*%;*whB!mQ~$<%;DGc)6ZiJtnMLKVrDc#>bv zIluG$Ip_C%w+#dX4zxW~FcVOKrvbi9mQVAqa6_T7xF`$pEH8;bZw)0(^OqB;mZalU znfpJp8jN&+F;13pV+k%MNQt-*%Stgh!HFEI-gzd*(;TV^4C%$=NYpOm4Z!i7`Ht1rnhOKqH_Osr~5DN4+$5T+CQ3 z=rFN`@mN91svQI)EwO}Agh5m!^X{=9_`2;g<1U+~U3<%peFvl47ZTNCX=l9Qpt^aDcf8#^jy^#D}1hxl8APC%y#W zQsTe$oLf5sn{v#j0;?at`3V1;^{an@%Rm0*`_#VS^8~@4yn$fg%wlyP?92J9h0ISJ z>`A!^%J=#F)`wre4MEB}mwEZ+`yD+y;*mHFfLXBh3vn?kqp*}7{NjAl&;2%Nq3RACJ3^Z0f=faLRan?$$4_ z8Q7*55@C~dXo+({}1c-`eGxn%YPhB{C2=^$|)_vjC^sl`Ztv+w?-{!}wZhKXKTy7tc z7>fNXo>A<68hT6pJlPIu7dlChHX{{IU!1>h#@;5)N^og_oe7#j zE)$W9bkhWKj`LY$ACz)ggad7#J;cZ%iCJFEasRegx!@|&JN9ry2_eedj_P|iH2iiE zy_*bX(7B!U0I^7`BX)6Q+n#3uU4}^w5uj6*ezx6oi zq=7q=vURFis4`kr!pO4qe3cmoXYRS~AnO$Sl3rV)cAPm>I3!n2;}m+F1rY(11L@vh zgdS09PoV!6>FklIA3U1VOv7wH_ERi&s8|HaX%I+|WDW&S_91Uh<`c*t&&k{ne4?e_ L2J#&T;NRzOmvInt literal 0 HcmV?d00001 diff --git a/translations/gui.ru.translation b/translations/gui.ru.translation new file mode 100644 index 0000000000000000000000000000000000000000..ed37c92e7cb796e2a466fb021b993010ea139741 GIT binary patch literal 2729 zcmbtWU1%It6dr%8D@Ka7Rx5a`A}DpYEv5~Ht(X|wKxoP~R_n5^lii!mklC4aW;Ufh zHA!oQw5ADS1+}S#`sBl=$)=mXjn6*aL6CyzyZYw4Ki_v}cU_|u!GSaP_k8!9@0@#P zQpZz0M&r2~E#+RwBaneoU=^)*Wq!~z9p5$s%XKgvJ$Iowuw~nc%<6T&Irm@M`><&T z#FM^T_Hr_7yE)U&25#2RNkO}*y4f9j`0gV^7+pL{$}L~`GY z8TFyMqGo`7MW{J+KT?;}CunEUUQ=Ik5^LyEK2~$0zpuMD_3~ifz)>;qsyN!)clb#6 zz-y@!ef|BtyV8jkcqW~oF=!gL#Q?Dop3ye1<6RZuxZ0pkss<gd-5x|Q&KOf3twqCqNL4X1Vq^=UXIfL!5FsMYWT;;FT8QiNv#zKCH}t%Q@i z1?a1&6%n3C2PbYos|EvL4R+Oduv*4a6+~aaIe(r?uyoF~T`!qCZ918B*|U=)K~VB> z^YWITbG>}LP)MBYe0{X*NLO$7$qW&J4P$Z2BE7AmbA#`2GMxYb$suGW9*f2Lts&{@ z@+910aa3A`ks%b9G0V24wnG4rKCg#UBwhRO@Ryb8DmA40E>W}XO{33m_;j=z#-tUj02cc zm2iUbx*-_ph;w=c#fU6ysX_}D5fXvd1_P_c@gf#iThwwA%JAy8bn6q_t|Ecr0@p*^ z0(3ZqETrAEl!j?f=ELcTB<2L%MIvZ|=s+7B(p}v|azghEu%n{z`B@#yGR?wV*nL2b#0=fX=!-<3GvYm-3Ug{_i(dBC~rK_4+M(iV_8Q#D1 z(q<)&uY;B<4C57t8!;5JI*7l(Izh%au!EPI)d0DHOxBRdl^E`yoiUmrWBM3smKTd0 z8?1)(Xxu>kqYG8gRe{Bm(Upky&tZW+;>^fLfV3)cs}Slc+r;~8foxUA&&gCH2brDC zQsW0w+SwtyEHj7Qyc>vKr(ii!q^)8hxp#jC{~stn7Rr0vA1kC2m~Pb+T%#EciQodB zahX0SbQDt3$-Cl(sQw}PWCg)S7SlZty8vsJG3F(vxsH_^{a+|LeDH7<@kQZb9j_n}kh8qG$86IHd@&|HzwC=Q-QtiXeS8b_ zu61Mwyh1&1WFR!)&MI790!tI(m|N;GOQL|^Hb2g06o9C>^Z3SX5O*|LpPmp2AP+AAMn2VgLXD literal 0 HcmV?d00001 diff --git a/translations/zombies.csv b/translations/zombies.csv new file mode 100644 index 0000000..fda31d7 --- /dev/null +++ b/translations/zombies.csv @@ -0,0 +1,49 @@ +keys,en,ru +basic,Basic zombie,Обычный зомби +basic_desc,"The most basic zombie that Zomboss has. +Health points: [color=darkred]7 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Attack speed: [color=darkred]1 Hz[/color]. +Attack damage: [color=darkred]1 bite[/color]. ","Самый обычный зомби, который есть у Зомбосса. +Очки здоровья: [color=darkred]7 горошин[/color]. +Скорость ходьбы: [color=darkred]0.2 клеток/сек[/color]. +Скорость атаки: [color=darkred]1 Гц[/color]. +Урон от атаки: [color=darkred]1 укус[/color]." +buckethead,Buckethead,Ведроголовый +buckethead_desc,"Wears metal to protect his remaining brains. Equivalent of ~7 zombies. +Health points: [color=darkred]7 peas[/color]. +Armour points: [color=darkred]39 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Attack speed: [color=darkred]1 Hz[/color]. +Attack damage: [color=darkred]1 bite[/color]. ","Носит ведро чтобы защитить остатки мозгов. Равен примерно 7 зомби. +Очки здоровья: [color=darkred]7 горошин[/color]. +Очки брони: [color=darkred]39 горошин[/color]. +Скорость ходьбы: [color=darkred]0.2 клеток/сек/color]. +Скорость атаки: [color=darkred]1 Гц[/color]. +Урон от атаки: [color=darkred]1 укус[/color]." +conehead,Conehead,Конусоголовый +conehead_desc,"Armoured version of basic zombie. Equivalent of ~3 zombies. +Health points: [color=darkred]7 peas[/color]. +Armour points: [color=darkred]13 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Attack speed: [color=darkred]1 Hz[/color]. +Attack damage: [color=darkred]1 bite[/color]. ","Бронированная версия базового зомби. Равен примерно трём зомби. +Очки здоровья: [color=darkred]7 горошин[/color]. +Очки брони: [color=darkred]13 горошин[/color]. +Скорость ходьбы: [color=darkred]0.2 клеток/сек[/color]. +Скорость атаки: [color=darkred]1 Гц[/color]. +Урон от атаки: [color=darkred]1 укус[/color]." +hobo,Trash can zombie,Зомби в мусорке +hobo_desc,"Some time in the past he met a great conqueror. Hates to live without his can. Equivalent of ~8 zombies. +Health points: [color=darkred]13 peas[/color]. +Armour points: [color=darkred]39 peas[/color]. +Walk speed: [color=darkred]0.2 tiles/second[/color]. +Run speed: [color=darkred]0.6 tiles/second[/color]. +Attack speed: [color=darkred]1 Hz[/color]. +Attack damage: [color=darkred]1 bite[/color]. ","Однажды повстречал великого полководца. Ненавидит жить без своего ведра. Равен примерно 8 зомби. +Очки здоровья: [color=darkred]13 горошин[/color]. +Armour points: [color=darkred]39 горошин[/color]. +Скорость ходьбы: [color=darkred]0.2 клеток/сек[/color]. +Скорость бега: [color=darkred]0.6 клеток/сек[/color]. +Скорость атаки: [color=darkred]1 Гц[/color]. +Урон от атаки: [color=darkred]1 укус[/color]. " diff --git a/translations/zombies.csv.import b/translations/zombies.csv.import new file mode 100644 index 0000000..85f447e --- /dev/null +++ b/translations/zombies.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://dfb33ltubix1g" + +[deps] + +files=["res://translations/zombies.en.translation", "res://translations/zombies.ru.translation"] + +source_file="res://translations/zombies.csv" +dest_files=["res://translations/zombies.en.translation", "res://translations/zombies.ru.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/zombies.en.translation b/translations/zombies.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..45f31c8b9c164bef0767fd7c02322eda65369dc5 GIT binary patch literal 1722 zcmWFv4svFI0u~?*!fZe+3dH^eC7HRIRjDZsDg!4_BsaCVI59o7 zn1LP00qaO*;07`?5{on9OA?cEQWvd0LZ4|lA_GKbcnX%;qx(l#ncDU?}qg*@8&ohC4rO0&>CTgY091${DMFJNpF4<^yWB z0AeMpzo$O|X;6rPf)HdT2v5pbyYnZI!3D&+KnxNC;npiTvxI>5`2jf-fEZ@(^@!XL zAitai;+H_Ywx!bWCXfaNKL~^TDi6d7z<~JYq}R-FdvX*9(?14}YBt|ED0j|2hJR6$ zqu7?6xgG+}Y!#|JP7;2ZYto@0_c*8h-Cb-&v3{K#L zm64j5!tgJ=;%+t5i7k;f#jY~SJ{Q;WyTvu}b5;IlbS+fd6_KdG@Sm~H92^Q}q&G a5YRIH1U;6-OIV}; literal 0 HcmV?d00001 diff --git a/translations/zombies.ru.translation b/translations/zombies.ru.translation new file mode 100644 index 0000000000000000000000000000000000000000..aa9df639bcc3dee14a60ecd5703c6ea7273414f2 GIT binary patch literal 2561 zcmcguTWb?h5MJ+EFK^xz5A~r4C26d9Dfl41_*9`*5K0N#WU;ZivAY#22))==X`!@& zLcwD3xsa?$o90%;M-k?L;NK`d_$KOfRej^lA)I5ec0 zu7GzkOg$2R?3fuLJ(4sbRFplyWx)2-<@eV+X>jQ2wT`%Qg>^9+CgcDXIT_xp58Fu; z5OGL6IHAXYQ^0SG3+~+N&Md1Q>`DOb0B_GY9qxS+z`{lRXL$0!`lf|P<(!MX?pkNt z&#wzm`s|{$>(`fui1R$w8J_*Z;L3Uu@=p*jJo)6e=wdhay9b91&+qp~u}$792t~%q zi;=(x=ChD7_^g+JH(-jEC@p8?G?nBGtqWSCG8HLJIfa%fMMXziZlKgIC{JZM4vadQ zSve-h<*bksg5J8m%8-pw%GW|m*eFjq-X_B~P_X2zoa+*Op+q#H-wvz#kgkRMZwUJ6 zD9D$Tqf(#WUhjvGWqV7QdOJJ!LQdNU zz!^DtDfx;O7|6Ag3VVM$xkdO| Date: Thu, 3 Jul 2025 23:50:14 +0500 Subject: [PATCH 7/7] almanach button --- scenes/gui/almanach.gd | 5 ++ scenes/gui/almanach.gd.uid | 1 + scenes/gui/almanach.tscn | 63 ++++++++++++++++++------- scenes/gui/choose_your_seeds.tscn | 31 +++++++++++- scenes/main_menu.tscn | 18 +++++-- scripts/components/gui/menu_buttons.gd | 5 ++ translations/plants.en.translation | Bin 3102 -> 1205 bytes 7 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 scenes/gui/almanach.gd create mode 100644 scenes/gui/almanach.gd.uid diff --git a/scenes/gui/almanach.gd b/scenes/gui/almanach.gd new file mode 100644 index 0000000..c7e60de --- /dev/null +++ b/scenes/gui/almanach.gd @@ -0,0 +1,5 @@ +extends TabContainer + +func _on_quit_button_pressed() -> void: + visible = false + $ChannelPlayer.call("Play") diff --git a/scenes/gui/almanach.gd.uid b/scenes/gui/almanach.gd.uid new file mode 100644 index 0000000..4a51bc8 --- /dev/null +++ b/scenes/gui/almanach.gd.uid @@ -0,0 +1 @@ +uid://bs1qywtqijyd2 diff --git a/scenes/gui/almanach.tscn b/scenes/gui/almanach.tscn index 7073275..f0b6f7c 100644 --- a/scenes/gui/almanach.tscn +++ b/scenes/gui/almanach.tscn @@ -1,15 +1,18 @@ -[gd_scene load_steps=7 format=3 uid="uid://bvpt0q4j6nx18"] +[gd_scene load_steps=10 format=3 uid="uid://bvpt0q4j6nx18"] [ext_resource type="Texture2D" uid="uid://dr8a0rx42o3qy" path="res://assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres" id="1_1hnxi"] +[ext_resource type="Script" uid="uid://bs1qywtqijyd2" path="res://scenes/gui/almanach.gd" id="1_oy57w"] [ext_resource type="Script" uid="uid://0mvmfvwe1bc7" path="res://scripts/components/gui/almanach/AlmanachGrid.cs" id="1_ru62c"] [ext_resource type="Script" uid="uid://covbig00p22di" path="res://scripts/components/gui/choose_your_seeds/Previewport.cs" id="2_ru62c"] [ext_resource type="Texture2D" uid="uid://dycdvvgmgmfu6" path="res://assets/sprites/gui/ChooseYourSeeds/FrameField.tres" id="3_oy57w"] +[ext_resource type="Script" uid="uid://c36bj8u7jghc7" path="res://scripts/audio/ChannelPlayer.cs" id="6_7vo1l"] +[ext_resource type="AudioStream" uid="uid://bdx83fokp6kha" path="res://assets/audio/sfx/buttonclick.mp3" id="7_vvhxq"] [sub_resource type="ViewportTexture" id="ViewportTexture_ru62c"] -viewport_path = NodePath("plants/Infobox/FrameAndTitle/Frame/Previewport") +viewport_path = NodePath("plants/Infobox/FrameAndTitle/VboxContainer/Frame/Previewport") [sub_resource type="ViewportTexture" id="ViewportTexture_7yl8g"] -viewport_path = NodePath("zombies/Infobox/FrameAndTitle/Frame/Previewport") +viewport_path = NodePath("zombies/Infobox/FrameAndTitle/VBoxContainer/Frame/Previewport") [node name="Almanach" type="TabContainer"] anchors_preset = 15 @@ -19,6 +22,7 @@ grow_horizontal = 2 grow_vertical = 2 tab_alignment = 1 current_tab = 0 +script = ExtResource("1_oy57w") [node name="plants" type="HBoxContainer" parent="."] layout_mode = 2 @@ -40,26 +44,29 @@ size_flags_horizontal = 3 [node name="FrameAndTitle" type="HBoxContainer" parent="plants/Infobox"] layout_mode = 2 -[node name="Frame" type="TextureRect" parent="plants/Infobox/FrameAndTitle"] +[node name="VboxContainer" type="VBoxContainer" parent="plants/Infobox/FrameAndTitle"] +layout_mode = 2 + +[node name="Frame" type="TextureRect" parent="plants/Infobox/FrameAndTitle/VboxContainer"] clip_contents = true layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 texture = ExtResource("1_1hnxi") -[node name="Previewport" type="SubViewport" parent="plants/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] +[node name="Previewport" type="SubViewport" parent="plants/Infobox/FrameAndTitle/VboxContainer/Frame" node_paths=PackedStringArray("title", "description")] canvas_item_default_texture_filter = 0 size = Vector2i(65, 65) script = ExtResource("2_ru62c") -title = NodePath("../../Label") -description = NodePath("../../../Description/ScrollContainer/RichTextLabel") +title = NodePath("../../../Label") +description = NodePath("../../../../Description/ScrollContainer/RichTextLabel") -[node name="FrameField" type="Sprite2D" parent="plants/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="FrameField" type="Sprite2D" parent="plants/Infobox/FrameAndTitle/VboxContainer/Frame/Previewport"] texture = ExtResource("3_oy57w") -[node name="Camera2D" type="Camera2D" parent="plants/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="Camera2D" type="Camera2D" parent="plants/Infobox/FrameAndTitle/VboxContainer/Frame/Previewport"] -[node name="Render" type="TextureRect" parent="plants/Infobox/FrameAndTitle/Frame"] +[node name="Render" type="TextureRect" parent="plants/Infobox/FrameAndTitle/VboxContainer/Frame"] show_behind_parent = true layout_mode = 1 anchors_preset = 15 @@ -69,6 +76,11 @@ grow_horizontal = 2 grow_vertical = 2 texture = SubResource("ViewportTexture_ru62c") +[node name="QuitButton" type="Button" parent="plants/Infobox/FrameAndTitle/VboxContainer"] +layout_mode = 2 +size_flags_vertical = 4 +text = "exit" + [node name="Label" type="Label" parent="plants/Infobox/FrameAndTitle"] layout_mode = 2 size_flags_horizontal = 3 @@ -115,27 +127,30 @@ size_flags_horizontal = 3 [node name="FrameAndTitle" type="HBoxContainer" parent="zombies/Infobox"] layout_mode = 2 -[node name="Frame" type="TextureRect" parent="zombies/Infobox/FrameAndTitle"] +[node name="VBoxContainer" type="VBoxContainer" parent="zombies/Infobox/FrameAndTitle"] +layout_mode = 2 + +[node name="Frame" type="TextureRect" parent="zombies/Infobox/FrameAndTitle/VBoxContainer"] clip_contents = true layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 texture = ExtResource("1_1hnxi") -[node name="Previewport" type="SubViewport" parent="zombies/Infobox/FrameAndTitle/Frame" node_paths=PackedStringArray("title", "description")] +[node name="Previewport" type="SubViewport" parent="zombies/Infobox/FrameAndTitle/VBoxContainer/Frame" node_paths=PackedStringArray("title", "description")] canvas_item_default_texture_filter = 0 size = Vector2i(130, 130) script = ExtResource("2_ru62c") -title = NodePath("../../Label") -description = NodePath("../../../Description/ScrollContainer/RichTextLabel") +title = NodePath("../../../Label") +description = NodePath("../../../../Description/ScrollContainer/RichTextLabel") -[node name="FrameField" type="Sprite2D" parent="zombies/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="FrameField" type="Sprite2D" parent="zombies/Infobox/FrameAndTitle/VBoxContainer/Frame/Previewport"] texture = ExtResource("3_oy57w") -[node name="Camera2D" type="Camera2D" parent="zombies/Infobox/FrameAndTitle/Frame/Previewport"] +[node name="Camera2D" type="Camera2D" parent="zombies/Infobox/FrameAndTitle/VBoxContainer/Frame/Previewport"] position = Vector2(0, -45) -[node name="Render" type="TextureRect" parent="zombies/Infobox/FrameAndTitle/Frame"] +[node name="Render" type="TextureRect" parent="zombies/Infobox/FrameAndTitle/VBoxContainer/Frame"] show_behind_parent = true layout_mode = 1 anchors_preset = 15 @@ -146,6 +161,11 @@ grow_vertical = 2 texture = SubResource("ViewportTexture_7yl8g") expand_mode = 1 +[node name="QuitButton" type="Button" parent="zombies/Infobox/FrameAndTitle/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 4 +text = "exit" + [node name="Label" type="Label" parent="zombies/Infobox/FrameAndTitle"] layout_mode = 2 size_flags_horizontal = 3 @@ -169,3 +189,12 @@ size_flags_vertical = 3 theme_override_colors/default_color = Color(0, 0, 0, 1) theme_override_colors/font_selected_color = Color(0, 0, 0, 1) bbcode_enabled = true + +[node name="ChannelPlayer" type="Node" parent="."] +script = ExtResource("6_7vo1l") +audioStream = ExtResource("7_vvhxq") +channel = "button" +metadata/_custom_type_script = "uid://c36bj8u7jghc7" + +[connection signal="pressed" from="plants/Infobox/FrameAndTitle/VboxContainer/QuitButton" to="." method="_on_quit_button_pressed"] +[connection signal="pressed" from="zombies/Infobox/FrameAndTitle/VBoxContainer/QuitButton" to="." method="_on_quit_button_pressed"] diff --git a/scenes/gui/choose_your_seeds.tscn b/scenes/gui/choose_your_seeds.tscn index 7ee96bc..7279861 100644 --- a/scenes/gui/choose_your_seeds.tscn +++ b/scenes/gui/choose_your_seeds.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=3 uid="uid://dpxxjfd5lv5sv"] +[gd_scene load_steps=19 format=3 uid="uid://dpxxjfd5lv5sv"] [ext_resource type="Theme" uid="uid://e8n88g31w7x7" path="res://resources/themes/ChooseYourSeeds.tres" id="1_bfo8i"] [ext_resource type="Texture2D" uid="uid://dr8a0rx42o3qy" path="res://assets/sprites/gui/ChooseYourSeeds/PlantFrame.tres" id="2_so2bw"] @@ -7,8 +7,10 @@ [ext_resource type="Script" uid="uid://eq3ecja30mlj" path="res://scripts/components/gui/choose_your_seeds/GridLoader.cs" id="4_i7sou"] [ext_resource type="PackedScene" uid="uid://10b1egek6upx" path="res://scenes/gui/level_run_button.tscn" id="5_n80ic"] [ext_resource type="Script" uid="uid://d26waisd3v488" path="res://scripts/components/gui/choose_your_seeds/LevelRunButton.cs" id="7_k6b6g"] +[ext_resource type="Texture2D" uid="uid://drydueofrb448" path="res://assets/sprites/gui/almanach/book.tres" id="8_hmdmm"] [ext_resource type="Script" uid="uid://c36bj8u7jghc7" path="res://scripts/audio/ChannelPlayer.cs" id="8_v7xff"] [ext_resource type="AudioStream" uid="uid://bdx83fokp6kha" path="res://assets/audio/sfx/buttonclick.mp3" id="9_v7xff"] +[ext_resource type="PackedScene" uid="uid://bvpt0q4j6nx18" path="res://scenes/gui/almanach.tscn" id="11_nlh6x"] [sub_resource type="Animation" id="Animation_0rps3"] resource_name = "Hide" @@ -106,6 +108,16 @@ viewport_path = NodePath("Panel/MarginContainer/VBoxContainer/HBoxContainer/Fram font_size = 24 font_color = Color(0, 0, 0, 1) +[sub_resource type="GDScript" id="GDScript_hmdmm"] +resource_name = "Almanach" +script/source = "extends Button + + +func _pressed() -> void: + $\"../../Independer/Almanach\".visible = true + $\"../../ChannelPlayer\".call(\"Play\") +" + [node name="ChooseYourSeeds" type="Control"] process_mode = 3 layout_mode = 3 @@ -222,10 +234,27 @@ offset_bottom = -16.016 script = ExtResource("7_k6b6g") _player = NodePath("../../AnimationPlayer") +[node name="AlmanachButton" type="Button" parent="Panel"] +layout_mode = 0 +anchor_left = 1.0 +anchor_top = 0.883929 +anchor_right = 1.14167 +anchor_bottom = 1.0 +offset_bottom = -3.05176e-05 +icon = ExtResource("8_hmdmm") +icon_alignment = 1 +script = SubResource("GDScript_hmdmm") +metadata/_edit_use_anchors_ = true + [node name="ChannelPlayer" type="Node" parent="."] script = ExtResource("8_v7xff") audioStream = ExtResource("9_v7xff") channel = "button" metadata/_custom_type_script = "uid://c36bj8u7jghc7" +[node name="Independer" type="Node" parent="."] + +[node name="Almanach" parent="Independer" instance=ExtResource("11_nlh6x")] +visible = false + [connection signal="pressed" from="Panel/LevelRunButton" to="ChannelPlayer" method="Play"] diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn index 2df74f2..060e4ad 100644 --- a/scenes/main_menu.tscn +++ b/scenes/main_menu.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=3 uid="uid://bfstrli64u23y"] +[gd_scene load_steps=16 format=3 uid="uid://bfstrli64u23y"] [ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_jk1qb"] [ext_resource type="Script" uid="uid://drru785m4eep" path="res://scripts/components/gui/main_menu_rich_text.gd" id="2_5dd4i"] @@ -8,8 +8,10 @@ [ext_resource type="Script" uid="uid://c06k4k3ww48ev" path="res://scripts/components/gui/menu_buttons.gd" id="5_rcqid"] [ext_resource type="Script" uid="uid://6e8n6kc0y11o" path="res://scripts/sacrifice.gd" id="6_1ajci"] [ext_resource type="Script" uid="uid://c36bj8u7jghc7" path="res://scripts/audio/ChannelPlayer.cs" id="7_7b55j"] +[ext_resource type="Texture2D" uid="uid://drydueofrb448" path="res://assets/sprites/gui/almanach/book.tres" id="7_flqon"] [ext_resource type="AudioStream" uid="uid://bdx83fokp6kha" path="res://assets/audio/sfx/buttonclick.mp3" id="8_5pajh"] [ext_resource type="AudioStream" uid="uid://djgyc7bbwcepp" path="res://assets/audio/music/Александр Зацепин - Увертюра.mp3" id="9_j7ex8"] +[ext_resource type="PackedScene" uid="uid://bvpt0q4j6nx18" path="res://scenes/gui/almanach.tscn" id="12_rcqid"] [sub_resource type="GDScript" id="GDScript_5dd4i"] resource_name = "main_menu" @@ -135,10 +137,15 @@ offset_top = 188.0 offset_right = 86.0 offset_bottom = 235.0 -[node name="Button" type="Button" parent="Buttons/InfoButtons"] +[node name="AboutButton" type="Button" parent="Buttons/InfoButtons"] layout_mode = 2 text = "about" +[node name="AlmanachButton" type="Button" parent="Buttons/InfoButtons"] +layout_mode = 2 +icon = ExtResource("7_flqon") +icon_alignment = 1 + [node name="SACRIFICE" type="TextureButton" parent="Buttons"] layout_mode = 0 offset_left = 338.0 @@ -167,9 +174,14 @@ volume_db = -20.0 autoplay = true bus = &"MusicBus" +[node name="Almanach" parent="." instance=ExtResource("12_rcqid")] +visible = false +layout_mode = 1 + [connection signal="meta_clicked" from="PrototypeWindow/ScrollContainer/PrototypeNotification" to="PrototypeWindow/ScrollContainer/PrototypeNotification" method="_on_meta_clicked"] [connection signal="pressed" from="Buttons/GameButtons/PlayButton" to="Buttons" method="_on_play_button_pressed"] [connection signal="pressed" from="Buttons/GameButtons/ExitButton" to="Buttons" method="_on_exit_button_pressed"] -[connection signal="pressed" from="Buttons/InfoButtons/Button" to="Buttons" method="_on_button_pressed"] +[connection signal="pressed" from="Buttons/InfoButtons/AboutButton" to="Buttons" method="_on_button_pressed"] +[connection signal="pressed" from="Buttons/InfoButtons/AlmanachButton" to="Buttons" method="_on_almanach_button_pressed"] [connection signal="close_requested" from="Buttons/SACRIFICE/CONFIRM" to="Buttons/SACRIFICE" method="_on_confirm_close_requested"] [connection signal="confirmed" from="Buttons/SACRIFICE/CONFIRM" to="Buttons/SACRIFICE" method="_on_confirm_confirmed"] diff --git a/scripts/components/gui/menu_buttons.gd b/scripts/components/gui/menu_buttons.gd index e6682e4..9c89ded 100644 --- a/scripts/components/gui/menu_buttons.gd +++ b/scripts/components/gui/menu_buttons.gd @@ -14,3 +14,8 @@ func _on_exit_button_pressed() -> void: func _on_button_pressed() -> void: $"../AboutWindow".popup_centered() $ChannelPlayer.call("Play") + + +func _on_almanach_button_pressed() -> void: + $"../Almanach".visible = true + $ChannelPlayer.call("Play") diff --git a/translations/plants.en.translation b/translations/plants.en.translation index b6310f1cd2f42e3731f7c22320dc701cd24c0bd5..80e6a4e00da9602b4a74c264832f6155fef0d377 100644 GIT binary patch literal 1205 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