diff --git a/assets/Bohemian Soul.otf b/assets/Bohemian Soul.otf new file mode 100644 index 0000000..6649ff1 --- /dev/null +++ b/assets/Bohemian Soul.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b387796a272c26c37ff918e48271cf139755a0ecb2398039103d79af2c91c850 +size 38880 diff --git a/assets/Bohemian Soul.otf.import b/assets/Bohemian Soul.otf.import new file mode 100644 index 0000000..7e974e0 --- /dev/null +++ b/assets/Bohemian Soul.otf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ncoq4i61plvt" +path="res://.godot/imported/Bohemian Soul.otf-321180efeec0e46d48937761716dc66f.fontdata" + +[deps] + +source_file="res://assets/Bohemian Soul.otf" +dest_files=["res://.godot/imported/Bohemian Soul.otf-321180efeec0e46d48937761716dc66f.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/Inter-Regular.otf b/assets/Inter-Regular.otf new file mode 100644 index 0000000..4ed3a79 --- /dev/null +++ b/assets/Inter-Regular.otf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7e791e8f5a0fb02b65663f7fca73e1d1ca9543f772ad480cbd76f4e3fe3f8cc +size 258992 diff --git a/assets/Inter-Regular.otf.import b/assets/Inter-Regular.otf.import new file mode 100644 index 0000000..6ec3561 --- /dev/null +++ b/assets/Inter-Regular.otf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://08q3kkwmd4u6" +path="res://.godot/imported/Inter-Regular.otf-e79282422267193643bc1266eabc7aef.fontdata" + +[deps] + +source_file="res://assets/Inter-Regular.otf" +dest_files=["res://.godot/imported/Inter-Regular.otf-e79282422267193643bc1266eabc7aef.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/card_base/Frame.png b/assets/card_base/Frame.png new file mode 100644 index 0000000..5c7b0da --- /dev/null +++ b/assets/card_base/Frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2315fae148c1d73e139ad51d9d90c0dc69314de870596e52fb2b4274a2e51b1 +size 165111 diff --git a/assets/card_base/Frame.png.import b/assets/card_base/Frame.png.import new file mode 100644 index 0000000..930f4d0 --- /dev/null +++ b/assets/card_base/Frame.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://l2nxxhh0pvh8" +path="res://.godot/imported/Frame.png-2cc9ebde58565bbc3036395eb0041ae9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Frame.png" +dest_files=["res://.godot/imported/Frame.png-2cc9ebde58565bbc3036395eb0041ae9.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/card_base/G-OuterFill.png b/assets/card_base/G-OuterFill.png new file mode 100644 index 0000000..114bbb7 --- /dev/null +++ b/assets/card_base/G-OuterFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e0e62d5e3d57866bfa09a4dbcd0a14a244bd704c94b8eeadb1eafb57f08562a +size 149729 diff --git a/assets/card_base/G-OuterFill.png.import b/assets/card_base/G-OuterFill.png.import new file mode 100644 index 0000000..0468b36 --- /dev/null +++ b/assets/card_base/G-OuterFill.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://liitr32ap646" +path="res://.godot/imported/G-OuterFill.png-08376930c432a32d81cb0c7a55fb089e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/G-OuterFill.png" +dest_files=["res://.godot/imported/G-OuterFill.png-08376930c432a32d81cb0c7a55fb089e.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/card_base/Illustrated BG.png b/assets/card_base/Illustrated BG.png new file mode 100644 index 0000000..13f506e --- /dev/null +++ b/assets/card_base/Illustrated BG.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5db3ddf6b8519218ece058d4f169efc363d2aba02400b89b7eef1277c8e44ab +size 1973201 diff --git a/assets/card_base/Illustrated BG.png.import b/assets/card_base/Illustrated BG.png.import new file mode 100644 index 0000000..a704b8d --- /dev/null +++ b/assets/card_base/Illustrated BG.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dft4fbgoecbp4" +path="res://.godot/imported/Illustrated BG.png-181034664aa2e590183e18ee7ca1bfaa.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Illustrated BG.png" +dest_files=["res://.godot/imported/Illustrated BG.png-181034664aa2e590183e18ee7ca1bfaa.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/card_base/InnerFill.png b/assets/card_base/InnerFill.png new file mode 100644 index 0000000..3beb15d --- /dev/null +++ b/assets/card_base/InnerFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aedb750f04941c2337bdad6c73b73399ed8fb625eaa436d6588017db9c0bee45 +size 126446 diff --git a/assets/card_base/InnerFill.png.import b/assets/card_base/InnerFill.png.import new file mode 100644 index 0000000..11ff539 --- /dev/null +++ b/assets/card_base/InnerFill.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blejyda8mendg" +path="res://.godot/imported/InnerFill.png-75781e681a40959b716289bec2b32336.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/InnerFill.png" +dest_files=["res://.godot/imported/InnerFill.png-75781e681a40959b716289bec2b32336.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/card_base/Monster-InnerFill.png b/assets/card_base/Monster-InnerFill.png new file mode 100644 index 0000000..e625751 --- /dev/null +++ b/assets/card_base/Monster-InnerFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c98a835ac49a78d6cdc44f867372f5405c6e935fa651c55455ad54603cf7f6f6 +size 121678 diff --git a/assets/card_base/Monster-InnerFill.png.import b/assets/card_base/Monster-InnerFill.png.import new file mode 100644 index 0000000..f7d395a --- /dev/null +++ b/assets/card_base/Monster-InnerFill.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c2qyx2k50v2vv" +path="res://.godot/imported/Monster-InnerFill.png-93b412d347601958a4d2176fe728b492.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Monster-InnerFill.png" +dest_files=["res://.godot/imported/Monster-InnerFill.png-93b412d347601958a4d2176fe728b492.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/card_base/Pill.png b/assets/card_base/Pill.png new file mode 100644 index 0000000..fb2a20d --- /dev/null +++ b/assets/card_base/Pill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e21a3903c649abe91077ed55440eed2cd7f563f17b9c37f50430d68d322c4909 +size 846 diff --git a/assets/card_base/Pill.png.import b/assets/card_base/Pill.png.import new file mode 100644 index 0000000..51de1d3 --- /dev/null +++ b/assets/card_base/Pill.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0gxplli5krq2" +path="res://.godot/imported/Pill.png-f7a0d13f20f1ea9ba344cea7c095427a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Pill.png" +dest_files=["res://.godot/imported/Pill.png-f7a0d13f20f1ea9ba344cea7c095427a.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/card_base/Pip.png b/assets/card_base/Pip.png new file mode 100644 index 0000000..e16ae38 --- /dev/null +++ b/assets/card_base/Pip.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8571a2dcc30f164a811adfe3ffd51ca631fe17bfa5bbae4b3bea4aefe0b7c038 +size 1179 diff --git a/assets/card_base/Pip.png.import b/assets/card_base/Pip.png.import new file mode 100644 index 0000000..1e6c48e --- /dev/null +++ b/assets/card_base/Pip.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjmxetjq82rl2" +path="res://.godot/imported/Pip.png-de8c266f2e2c9cd5a4519b7d5df4868e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Pip.png" +dest_files=["res://.godot/imported/Pip.png-de8c266f2e2c9cd5a4519b7d5df4868e.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/card_base/R-OuterFill.png b/assets/card_base/R-OuterFill.png new file mode 100644 index 0000000..d546cac --- /dev/null +++ b/assets/card_base/R-OuterFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dcca3e0a0b82a518b6f0e23496a446f7d0e102b41763d35d9b3cc8c37d62afc +size 149723 diff --git a/assets/card_base/R-OuterFill.png.import b/assets/card_base/R-OuterFill.png.import new file mode 100644 index 0000000..cdfb01f --- /dev/null +++ b/assets/card_base/R-OuterFill.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ip7xjs20pd3d" +path="res://.godot/imported/R-OuterFill.png-f999c1a1aec742072b5689d6ee4573cf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/R-OuterFill.png" +dest_files=["res://.godot/imported/R-OuterFill.png-f999c1a1aec742072b5689d6ee4573cf.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/card_base/RPS Panel.png b/assets/card_base/RPS Panel.png new file mode 100644 index 0000000..ce9a35a --- /dev/null +++ b/assets/card_base/RPS Panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d6582bca3acbce0bc3e7179ee8864c9bf2bb7ed8afe1cdbe64b8fc3d0e596c +size 11713 diff --git a/assets/card_base/RPS Panel.png.import b/assets/card_base/RPS Panel.png.import new file mode 100644 index 0000000..f1a9ba3 --- /dev/null +++ b/assets/card_base/RPS Panel.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d0a2opcuwsko8" +path="res://.godot/imported/RPS Panel.png-ccba378cf0e54a7db466c513ef19441b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/RPS Panel.png" +dest_files=["res://.godot/imported/RPS Panel.png-ccba378cf0e54a7db466c513ef19441b.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/card_base/Screenshot 2025-01-25 211435.png b/assets/card_base/Screenshot 2025-01-25 211435.png new file mode 100644 index 0000000..b3ed7e8 --- /dev/null +++ b/assets/card_base/Screenshot 2025-01-25 211435.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:694774dbbeaa32955325ca8159a81d21a6df10b9768e19dff254619f86a9e0af +size 242836 diff --git a/assets/card_base/Screenshot 2025-01-25 211435.png.import b/assets/card_base/Screenshot 2025-01-25 211435.png.import new file mode 100644 index 0000000..4347032 --- /dev/null +++ b/assets/card_base/Screenshot 2025-01-25 211435.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cqladcrximh6" +path="res://.godot/imported/Screenshot 2025-01-25 211435.png-7837967bcc49e81c793d612b9d970963.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Screenshot 2025-01-25 211435.png" +dest_files=["res://.godot/imported/Screenshot 2025-01-25 211435.png-7837967bcc49e81c793d612b9d970963.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/card_base/Separator.png b/assets/card_base/Separator.png new file mode 100644 index 0000000..c722ba8 --- /dev/null +++ b/assets/card_base/Separator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f41f216767597470e7f2b0b5bbb1a28718e591ee3283ee100ec8ae7965b08f3 +size 1537 diff --git a/assets/card_base/Separator.png.import b/assets/card_base/Separator.png.import new file mode 100644 index 0000000..af841a8 --- /dev/null +++ b/assets/card_base/Separator.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://by7ws88pn4tvb" +path="res://.godot/imported/Separator.png-3ef36f6d9a7c45cb144c99255cbf2668.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Separator.png" +dest_files=["res://.godot/imported/Separator.png-3ef36f6d9a7c45cb144c99255cbf2668.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/card_base/Star.png b/assets/card_base/Star.png new file mode 100644 index 0000000..f1810d8 --- /dev/null +++ b/assets/card_base/Star.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69c3d97e1726b30f476327786f41c60aa448445f49098e3092f267ec75fbbacf +size 1246 diff --git a/assets/card_base/Star.png.import b/assets/card_base/Star.png.import new file mode 100644 index 0000000..eeabaf5 --- /dev/null +++ b/assets/card_base/Star.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cqttp0i3vph37" +path="res://.godot/imported/Star.png-b9b4017ee1202aa95ea8c6ee772a751e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Star.png" +dest_files=["res://.godot/imported/Star.png-b9b4017ee1202aa95ea8c6ee772a751e.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/card_base/Stroke.png b/assets/card_base/Stroke.png new file mode 100644 index 0000000..aad94f9 --- /dev/null +++ b/assets/card_base/Stroke.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:041b63c0964cdd231d08d220cfc236e6fe4ee5643e7373701491ff5f3dc98f40 +size 3940 diff --git a/assets/card_base/Stroke.png.import b/assets/card_base/Stroke.png.import new file mode 100644 index 0000000..668eddd --- /dev/null +++ b/assets/card_base/Stroke.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crgrple0uik7x" +path="res://.godot/imported/Stroke.png-9acc55e7647197941083043ac51c45a4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/Stroke.png" +dest_files=["res://.godot/imported/Stroke.png-9acc55e7647197941083043ac51c45a4.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/card_base/batu.png b/assets/card_base/batu.png new file mode 100644 index 0000000..8d1dc40 --- /dev/null +++ b/assets/card_base/batu.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3073496f2b5cb651d0d6d03351a6f8392a23924d01472ab5d175ef150667e17e +size 25869 diff --git a/assets/card_base/batu.png.import b/assets/card_base/batu.png.import new file mode 100644 index 0000000..bdef9d8 --- /dev/null +++ b/assets/card_base/batu.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bywa8qlwvcksd" +path="res://.godot/imported/batu.png-45758b8e11a9ea003a7865de11dc4441.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/batu.png" +dest_files=["res://.godot/imported/batu.png-45758b8e11a9ea003a7865de11dc4441.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/card_base/gunting.png b/assets/card_base/gunting.png new file mode 100644 index 0000000..c069201 --- /dev/null +++ b/assets/card_base/gunting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d14202c9b5043bdf561e8b9e6e899b0d964eed347f5d7fdb71cb5f6286a1561 +size 24283 diff --git a/assets/card_base/gunting.png.import b/assets/card_base/gunting.png.import new file mode 100644 index 0000000..24d6aac --- /dev/null +++ b/assets/card_base/gunting.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ch04c20lkis6j" +path="res://.godot/imported/gunting.png-f8810080ad1e41ec3bcb0f8ff0d8b5f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/gunting.png" +dest_files=["res://.godot/imported/gunting.png-f8810080ad1e41ec3bcb0f8ff0d8b5f8.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/card_base/illust bg 1.png b/assets/card_base/illust bg 1.png new file mode 100644 index 0000000..712628d --- /dev/null +++ b/assets/card_base/illust bg 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4f66245934d9cb584395b647eab454b3e74351c3086b720bfaf3837c95d1dd2 +size 1744521 diff --git a/assets/card_base/illust bg 1.png.import b/assets/card_base/illust bg 1.png.import new file mode 100644 index 0000000..22253c2 --- /dev/null +++ b/assets/card_base/illust bg 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://6trhu2r7h6g3" +path="res://.godot/imported/illust bg 1.png-7d6e961f3fef1ad5d8dcf698718d9c23.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/illust bg 1.png" +dest_files=["res://.godot/imported/illust bg 1.png-7d6e961f3fef1ad5d8dcf698718d9c23.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/card_base/kertas.png b/assets/card_base/kertas.png new file mode 100644 index 0000000..c49b7e1 --- /dev/null +++ b/assets/card_base/kertas.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52a0024d95f80cda1eea5a8dcdf7cd9f2204f73409ce8ae4999f75dfd402f3a3 +size 20378 diff --git a/assets/card_base/kertas.png.import b/assets/card_base/kertas.png.import new file mode 100644 index 0000000..c48a956 --- /dev/null +++ b/assets/card_base/kertas.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0pclmv0j0r12" +path="res://.godot/imported/kertas.png-fd031884ac9417a6b135672f3fcc1d7f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/kertas.png" +dest_files=["res://.godot/imported/kertas.png-fd031884ac9417a6b135672f3fcc1d7f.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/energy.png b/assets/energy.png new file mode 100644 index 0000000..29479d0 --- /dev/null +++ b/assets/energy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d835c0519e95c077b5b4f681673b4672a0728ad47b86595726f07775993f3eb +size 482598 diff --git a/assets/energy.png.import b/assets/energy.png.import new file mode 100644 index 0000000..d8aecba --- /dev/null +++ b/assets/energy.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://rh3aswb0p7ri" +path="res://.godot/imported/energy.png-d31ae10deb2f267a25814b3eac80d643.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/energy.png" +dest_files=["res://.godot/imported/energy.png-d31ae10deb2f267a25814b3eac80d643.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/monster/Goldfish 2.png b/assets/monster/Goldfish 2.png new file mode 100644 index 0000000..ec6bc6e --- /dev/null +++ b/assets/monster/Goldfish 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53c37fd23a318f64cdc2951918f4f4b06fa3a4d05ddb2b15c9fc722e4f217519 +size 108879 diff --git a/assets/monster/Goldfish 2.png.import b/assets/monster/Goldfish 2.png.import new file mode 100644 index 0000000..e14f3bd --- /dev/null +++ b/assets/monster/Goldfish 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0f5rg5eqyym1" +path="res://.godot/imported/Goldfish 2.png-20495c3132cec5d0b0f2eb9e1b6f168f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/Goldfish 2.png" +dest_files=["res://.godot/imported/Goldfish 2.png-20495c3132cec5d0b0f2eb9e1b6f168f.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/monster/axolotl 3.png b/assets/monster/axolotl 3.png new file mode 100644 index 0000000..940328c --- /dev/null +++ b/assets/monster/axolotl 3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe4eaa932ae0e0f7363269bd39412aaaa3796dfcbcf2e5054b9d6f9d2aa4b8b8 +size 116315 diff --git a/assets/monster/axolotl 3.png.import b/assets/monster/axolotl 3.png.import new file mode 100644 index 0000000..8658cea --- /dev/null +++ b/assets/monster/axolotl 3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wdyu7txs2ijg" +path="res://.godot/imported/axolotl 3.png-66300d813b5cc2dfc432414b14c1f8bc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/axolotl 3.png" +dest_files=["res://.godot/imported/axolotl 3.png-66300d813b5cc2dfc432414b14c1f8bc.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/monster/capybara 1.png b/assets/monster/capybara 1.png new file mode 100644 index 0000000..8eeddf2 --- /dev/null +++ b/assets/monster/capybara 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae0ced57dd24cc221bd9f4b161aef907bf17962294167e6817e60017d484f76e +size 130901 diff --git a/assets/monster/capybara 1.png.import b/assets/monster/capybara 1.png.import new file mode 100644 index 0000000..74346a4 --- /dev/null +++ b/assets/monster/capybara 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c72q2py2vj6j4" +path="res://.godot/imported/capybara 1.png-98187c93d8c784ac26a4fe6cdc81e3f0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/capybara 1.png" +dest_files=["res://.godot/imported/capybara 1.png-98187c93d8c784ac26a4fe6cdc81e3f0.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/monster/cat 3.png b/assets/monster/cat 3.png new file mode 100644 index 0000000..dcf2e11 --- /dev/null +++ b/assets/monster/cat 3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad0cffd46c57d81ee56f43a2adf5d9a6e154a6dc9b76ed7a876ebd5bf19ef3d +size 123755 diff --git a/assets/monster/cat 3.png.import b/assets/monster/cat 3.png.import new file mode 100644 index 0000000..9b1df2e --- /dev/null +++ b/assets/monster/cat 3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcusdaqfhlv1b" +path="res://.godot/imported/cat 3.png-a083e2d16032d32908b04a46259e2c6a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/cat 3.png" +dest_files=["res://.godot/imported/cat 3.png-a083e2d16032d32908b04a46259e2c6a.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/monster/duck 1.png b/assets/monster/duck 1.png new file mode 100644 index 0000000..e4710d0 --- /dev/null +++ b/assets/monster/duck 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4db0c8f285a1523ea1d3fa2e3e18c834d70b215930f7139fee3efa25ac4aeedd +size 100811 diff --git a/assets/monster/duck 1.png.import b/assets/monster/duck 1.png.import new file mode 100644 index 0000000..86cfcf2 --- /dev/null +++ b/assets/monster/duck 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ujke0x73f77b" +path="res://.godot/imported/duck 1.png-e7d6d398a984b9ae6ba8f33dfe27e9dd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/duck 1.png" +dest_files=["res://.godot/imported/duck 1.png-e7d6d398a984b9ae6ba8f33dfe27e9dd.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/monster/froggo 1.png b/assets/monster/froggo 1.png new file mode 100644 index 0000000..958fea7 --- /dev/null +++ b/assets/monster/froggo 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f7f76dda3d26c8b4ac1b88f6fa7b0d22da51f873ced793d7c6b666138445844 +size 102451 diff --git a/assets/monster/froggo 1.png.import b/assets/monster/froggo 1.png.import new file mode 100644 index 0000000..8f40732 --- /dev/null +++ b/assets/monster/froggo 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8accn4e2ojau" +path="res://.godot/imported/froggo 1.png-9f147da84c624d2073b0c92236a84741.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/froggo 1.png" +dest_files=["res://.godot/imported/froggo 1.png-9f147da84c624d2073b0c92236a84741.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/monster/jellyfish 2.png b/assets/monster/jellyfish 2.png new file mode 100644 index 0000000..04ae99f --- /dev/null +++ b/assets/monster/jellyfish 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfd0f4cab6a3ed737816635416c9bb822e2b53028e35ea5cd79ba7e226a216ce +size 81602 diff --git a/assets/monster/jellyfish 2.png.import b/assets/monster/jellyfish 2.png.import new file mode 100644 index 0000000..6cd471a --- /dev/null +++ b/assets/monster/jellyfish 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cstwubbj8l8fr" +path="res://.godot/imported/jellyfish 2.png-d36c6543a46308145decdddd5ae9a63d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/jellyfish 2.png" +dest_files=["res://.godot/imported/jellyfish 2.png-d36c6543a46308145decdddd5ae9a63d.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/monster/penguing 2.png b/assets/monster/penguing 2.png new file mode 100644 index 0000000..2598f19 --- /dev/null +++ b/assets/monster/penguing 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a328047682a27c1b548405a2adf82738093c9a842e0c76defd7970cd178a5ac +size 101016 diff --git a/assets/monster/penguing 2.png.import b/assets/monster/penguing 2.png.import new file mode 100644 index 0000000..8f8858f --- /dev/null +++ b/assets/monster/penguing 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://deneyvmke3qyl" +path="res://.godot/imported/penguing 2.png-80094e4bcdb64d08cfd28547f5dd45c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/penguing 2.png" +dest_files=["res://.godot/imported/penguing 2.png-80094e4bcdb64d08cfd28547f5dd45c7.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/monster/rabbit 1.png b/assets/monster/rabbit 1.png new file mode 100644 index 0000000..023327d --- /dev/null +++ b/assets/monster/rabbit 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:415cbcdf4136ad6a07b63f5aa055f84443f8909876858667708e0229b4795b68 +size 93375 diff --git a/assets/monster/rabbit 1.png.import b/assets/monster/rabbit 1.png.import new file mode 100644 index 0000000..ac94ff9 --- /dev/null +++ b/assets/monster/rabbit 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cu0ivvtvryq64" +path="res://.godot/imported/rabbit 1.png-53666927d04c30fffb92370a7482b673.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/rabbit 1.png" +dest_files=["res://.godot/imported/rabbit 1.png-53666927d04c30fffb92370a7482b673.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/monster/whale 2.png b/assets/monster/whale 2.png new file mode 100644 index 0000000..cbf8df0 --- /dev/null +++ b/assets/monster/whale 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a704a38238c3991e1f0f3e250a988430393aa4b506ff7c72122a516c6dc0b139 +size 67821 diff --git a/assets/monster/whale 2.png.import b/assets/monster/whale 2.png.import new file mode 100644 index 0000000..29f0c19 --- /dev/null +++ b/assets/monster/whale 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dw8cnu3lfblig" +path="res://.godot/imported/whale 2.png-8dca9b32eca20cb2feb31734e55de3f6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/whale 2.png" +dest_files=["res://.godot/imported/whale 2.png-8dca9b32eca20cb2feb31734e55de3f6.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/support/Invisibility.png b/assets/support/Invisibility.png new file mode 100644 index 0000000..1c77364 --- /dev/null +++ b/assets/support/Invisibility.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f65e230ede853aeba1650e8d569220585f3aa3a9d27f006e5a82ae300877b92b +size 135764 diff --git a/assets/support/Invisibility.png.import b/assets/support/Invisibility.png.import new file mode 100644 index 0000000..39e7e7a --- /dev/null +++ b/assets/support/Invisibility.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8hkgi1r8wpri" +path="res://.godot/imported/Invisibility.png-b1f5b6e24b6db1d63402e75c2d90b9f4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/Invisibility.png" +dest_files=["res://.godot/imported/Invisibility.png-b1f5b6e24b6db1d63402e75c2d90b9f4.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/support/absorb.png b/assets/support/absorb.png new file mode 100644 index 0000000..fc4ee91 --- /dev/null +++ b/assets/support/absorb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ec3e0529bc2fef18223f893b2960a87b9b9ce827871a9d1440c9ac2d30d462 +size 238847 diff --git a/assets/support/absorb.png.import b/assets/support/absorb.png.import new file mode 100644 index 0000000..9a60646 --- /dev/null +++ b/assets/support/absorb.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cv5hjphfixv3o" +path="res://.godot/imported/absorb.png-e8458d89a69818053d3209e7228c83cd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/absorb.png" +dest_files=["res://.godot/imported/absorb.png-e8458d89a69818053d3209e7228c83cd.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/support/all out attack.png b/assets/support/all out attack.png new file mode 100644 index 0000000..f6eeb9e --- /dev/null +++ b/assets/support/all out attack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06c2538f1c5f8a0e101f4b00a729279baa211ebfdc99707880135a02360f776f +size 177931 diff --git a/assets/support/all out attack.png.import b/assets/support/all out attack.png.import new file mode 100644 index 0000000..3e0cb0c --- /dev/null +++ b/assets/support/all out attack.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpmr8pa8cq3w0" +path="res://.godot/imported/all out attack.png-2872fd363fbff1bf0b089ac317139b0e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/all out attack.png" +dest_files=["res://.godot/imported/all out attack.png-2872fd363fbff1bf0b089ac317139b0e.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/support/energy booster.png b/assets/support/energy booster.png new file mode 100644 index 0000000..9d8ff7f --- /dev/null +++ b/assets/support/energy booster.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae23af87934d3d3057e00f7bc7e1576a87416bbe7a499048add4d9acbe9bc5b8 +size 88074 diff --git a/assets/support/energy booster.png.import b/assets/support/energy booster.png.import new file mode 100644 index 0000000..786ca67 --- /dev/null +++ b/assets/support/energy booster.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd1mxacc3gfcy" +path="res://.godot/imported/energy booster.png-f846d83c962a9e077788e0d0ed5252dd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/energy booster.png" +dest_files=["res://.godot/imported/energy booster.png-f846d83c962a9e077788e0d0ed5252dd.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/support/insurance.png b/assets/support/insurance.png new file mode 100644 index 0000000..e92bb13 --- /dev/null +++ b/assets/support/insurance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0e2ff619969c6fff98cecbd63ec954010298e434a5079c06d81e0afa5fd4d5e +size 213996 diff --git a/assets/support/insurance.png.import b/assets/support/insurance.png.import new file mode 100644 index 0000000..88ac73a --- /dev/null +++ b/assets/support/insurance.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bwo6dfe1kpxhe" +path="res://.godot/imported/insurance.png-fa2ae7ef8a239dc0e4a4bd2c8f0b477b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/insurance.png" +dest_files=["res://.godot/imported/insurance.png-fa2ae7ef8a239dc0e4a4bd2c8f0b477b.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/support/lifesteal.png b/assets/support/lifesteal.png new file mode 100644 index 0000000..74f4fb4 --- /dev/null +++ b/assets/support/lifesteal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa02a72c7208802bcf5882d4925add9707c281b0420ef823302674468b522ada +size 133540 diff --git a/assets/support/lifesteal.png.import b/assets/support/lifesteal.png.import new file mode 100644 index 0000000..ecf73eb --- /dev/null +++ b/assets/support/lifesteal.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bni2wr2vrg0fe" +path="res://.godot/imported/lifesteal.png-1fcf74a2a74d8a4381ce6310ccb999d8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/lifesteal.png" +dest_files=["res://.godot/imported/lifesteal.png-1fcf74a2a74d8a4381ce6310ccb999d8.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/support/potion.png b/assets/support/potion.png new file mode 100644 index 0000000..1072f04 --- /dev/null +++ b/assets/support/potion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2c6b61399220a4d5ed8a702737654d1465b1c1e1d02cdc015702575002f6c5b +size 271057 diff --git a/assets/support/potion.png.import b/assets/support/potion.png.import new file mode 100644 index 0000000..b7657e2 --- /dev/null +++ b/assets/support/potion.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://48hblv72emyr" +path="res://.godot/imported/potion.png-1339ae9737d6625a795e518c852db261.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/potion.png" +dest_files=["res://.godot/imported/potion.png-1339ae9737d6625a795e518c852db261.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/support/reflection.png b/assets/support/reflection.png new file mode 100644 index 0000000..bc699d4 --- /dev/null +++ b/assets/support/reflection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ca0b3919d5eb76eac7e7437285d3bbc508be3f354a9a310fb1727c7c5fae69 +size 217825 diff --git a/assets/support/reflection.png.import b/assets/support/reflection.png.import new file mode 100644 index 0000000..bf38332 --- /dev/null +++ b/assets/support/reflection.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3uq5b2x2oacn" +path="res://.godot/imported/reflection.png-2ae705bc1d7282dacca1272db53a447a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/reflection.png" +dest_files=["res://.godot/imported/reflection.png-2ae705bc1d7282dacca1272db53a447a.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/support/sword mastery.png b/assets/support/sword mastery.png new file mode 100644 index 0000000..8c14dd4 --- /dev/null +++ b/assets/support/sword mastery.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee9f3905c0ba6be4b0d609157d8008435c393b5529dfae45290cc69ce65fae88 +size 102278 diff --git a/assets/support/sword mastery.png.import b/assets/support/sword mastery.png.import new file mode 100644 index 0000000..a420ef0 --- /dev/null +++ b/assets/support/sword mastery.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ha5p3vpqn5jv" +path="res://.godot/imported/sword mastery.png-67026928e9b242f46437e6cfb6d95bee.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/sword mastery.png" +dest_files=["res://.godot/imported/sword mastery.png-67026928e9b242f46437e6cfb6d95bee.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/support/tanker.png b/assets/support/tanker.png new file mode 100644 index 0000000..c9edcbb --- /dev/null +++ b/assets/support/tanker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:487368fdb954eae97166906014ab24f92e100e4f34bf7498395ae5dd99ea8d54 +size 295201 diff --git a/assets/support/tanker.png.import b/assets/support/tanker.png.import new file mode 100644 index 0000000..361c8d1 --- /dev/null +++ b/assets/support/tanker.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hiswkj2stt4l" +path="res://.godot/imported/tanker.png-de127e279370081587c7a5243fff4d1c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/tanker.png" +dest_files=["res://.godot/imported/tanker.png-de127e279370081587c7a5243fff4d1c.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/cards.tres b/cards.tres new file mode 100644 index 0000000..6222ae9 --- /dev/null +++ b/cards.tres @@ -0,0 +1,8 @@ +[gd_resource type="Theme" load_steps=2 format=3 uid="uid://is34t82g4jg"] + +[ext_resource type="FontFile" uid="uid://ncoq4i61plvt" path="res://assets/Bohemian Soul.otf" id="1_yowck"] + +[resource] +default_font = ExtResource("1_yowck") +Label/font_sizes/font_size = 12 +Label/fonts/font = ExtResource("1_yowck") diff --git a/data/cards/monster/axoluna.tres b/data/cards/monster/axoluna.tres new file mode 100644 index 0000000..a6f88da --- /dev/null +++ b/data/cards/monster/axoluna.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://di76avwc0gn8e"] + +[ext_resource type="Texture2D" uid="uid://wdyu7txs2ijg" path="res://assets/monster/axolotl 3.png" id="1_j0l6n"] +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_s0p53"] + +[resource] +script = ExtResource("1_s0p53") +rock = 20 +paper = 30 +scissors = 50 +energy_cost = 1 +base_health = 120 +name = "Axoluna" +description = "Cute wanderer of the tank, Axoluna" +icon = ExtResource("1_j0l6n") diff --git a/data/cards/monster/bunnaut.tres b/data/cards/monster/bunnaut.tres new file mode 100644 index 0000000..a70008a --- /dev/null +++ b/data/cards/monster/bunnaut.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://tgju8eodyuk1"] + +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_3jfyg"] +[ext_resource type="Texture2D" uid="uid://cu0ivvtvryq64" path="res://assets/monster/rabbit 1.png" id="1_xibsw"] + +[resource] +script = ExtResource("1_3jfyg") +rock = 10 +paper = 30 +scissors = 70 +energy_cost = 1 +base_health = 50 +name = "Bunnaut" +description = "Run faster than tortoise." +icon = ExtResource("1_xibsw") diff --git a/data/cards/monster/capytain.tres b/data/cards/monster/capytain.tres new file mode 100644 index 0000000..712ab1e --- /dev/null +++ b/data/cards/monster/capytain.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://cs7q8i7bvohmj"] + +[ext_resource type="Texture2D" uid="uid://c72q2py2vj6j4" path="res://assets/monster/capybara 1.png" id="1_mulam"] +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_n3oql"] + +[resource] +script = ExtResource("1_n3oql") +rock = 100 +paper = 40 +scissors = 80 +energy_cost = 3 +base_health = 170 +name = "Capytain" +description = "A big, hungry capybara" +icon = ExtResource("1_mulam") diff --git a/data/cards/monster/cattogato.tres b/data/cards/monster/cattogato.tres new file mode 100644 index 0000000..7b4e72c --- /dev/null +++ b/data/cards/monster/cattogato.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://bmst884k0myvd"] + +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_hblhq"] +[ext_resource type="Texture2D" uid="uid://bcusdaqfhlv1b" path="res://assets/monster/cat 3.png" id="1_xles7"] + +[resource] +script = ExtResource("1_hblhq") +rock = 10 +paper = 10 +scissors = 200 +energy_cost = 3 +base_health = 80 +name = "Cattogato" +description = "Lovely cat wandering in the space." +icon = ExtResource("1_xles7") diff --git a/data/cards/monster/froguvo.tres b/data/cards/monster/froguvo.tres new file mode 100644 index 0000000..f9f900c --- /dev/null +++ b/data/cards/monster/froguvo.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://bt1ngixrq4sve"] + +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_ayfld"] +[ext_resource type="Texture2D" uid="uid://b8accn4e2ojau" path="res://assets/monster/froggo 1.png" id="1_vlu3d"] + +[resource] +script = ExtResource("1_ayfld") +rock = 20 +paper = 30 +scissors = 50 +energy_cost = 1 +base_health = 80 +name = "Froguvo" +description = "Ribbit in space." +icon = ExtResource("1_vlu3d") diff --git a/data/cards/monster/gilli.tres b/data/cards/monster/gilli.tres new file mode 100644 index 0000000..fe574ca --- /dev/null +++ b/data/cards/monster/gilli.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://myxgsyerrdla"] + +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_1j36c"] +[ext_resource type="Texture2D" uid="uid://b0f5rg5eqyym1" path="res://assets/monster/Goldfish 2.png" id="1_62dnj"] + +[resource] +script = ExtResource("1_1j36c") +rock = 40 +paper = 10 +scissors = 10 +energy_cost = 1 +base_health = 120 +name = "Gilli" +description = "There is a huge monster looking at me everyday." +icon = ExtResource("1_62dnj") diff --git a/data/cards/monster/jellova.tres b/data/cards/monster/jellova.tres new file mode 100644 index 0000000..ef9567f --- /dev/null +++ b/data/cards/monster/jellova.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://425ipxdapg8o"] + +[ext_resource type="Texture2D" uid="uid://cstwubbj8l8fr" path="res://assets/monster/jellyfish 2.png" id="1_t6381"] +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_yvmeg"] + +[resource] +script = ExtResource("1_yvmeg") +rock = 40 +paper = 60 +scissors = 50 +energy_cost = 2 +base_health = 110 +name = "Jellova" +description = "I'm gonna whip you till' you .. nevermind." +icon = ExtResource("1_t6381") diff --git a/data/cards/monster/orcava.tres b/data/cards/monster/orcava.tres new file mode 100644 index 0000000..b45cafd --- /dev/null +++ b/data/cards/monster/orcava.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://cakkx0o8mifmn"] + +[ext_resource type="Texture2D" uid="uid://dw8cnu3lfblig" path="res://assets/monster/whale 2.png" id="1_4dsvt"] +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_xcdwy"] + +[resource] +script = ExtResource("1_xcdwy") +rock = 30 +paper = 30 +scissors = 30 +energy_cost = 2 +base_health = 200 +name = "Orcava" +description = "Human try to communicate with me. I simply block them." +icon = ExtResource("1_4dsvt") diff --git a/data/cards/monster/prankie.tres b/data/cards/monster/prankie.tres new file mode 100644 index 0000000..4d64b66 --- /dev/null +++ b/data/cards/monster/prankie.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://shri5ne51s74"] + +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_70s4q"] +[ext_resource type="Texture2D" uid="uid://deneyvmke3qyl" path="res://assets/monster/penguing 2.png" id="1_75ppb"] + +[resource] +script = ExtResource("1_70s4q") +rock = 60 +paper = 60 +scissors = 10 +energy_cost = 2 +base_health = 100 +name = "Prankie" +description = "I'm not pranking anyone. Yet." +icon = ExtResource("1_75ppb") diff --git a/data/cards/monster/quackle.tres b/data/cards/monster/quackle.tres new file mode 100644 index 0000000..0fe4658 --- /dev/null +++ b/data/cards/monster/quackle.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://dnf3gpji5prlr"] + +[ext_resource type="Texture2D" uid="uid://ujke0x73f77b" path="res://assets/monster/duck 1.png" id="1_4f7pv"] +[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_a8rjn"] + +[resource] +script = ExtResource("1_a8rjn") +rock = 50 +paper = 20 +scissors = 40 +energy_cost = 1 +base_health = 70 +name = "Quackle" +description = "Quack! Quack! No one notice me." +icon = ExtResource("1_4f7pv") diff --git a/data/cards/support/absorb.tres b/data/cards/support/absorb.tres new file mode 100644 index 0000000..72c5c4a --- /dev/null +++ b/data/cards/support/absorb.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://be01tdq1fxlct"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_mhxdy"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_f6hay"] +[ext_resource type="Texture2D" uid="uid://cv5hjphfixv3o" path="res://assets/support/absorb.png" id="2_i2lgf"] + +[resource] +script = ExtResource("2_f6hay") +scope = "turn" +type = "red" +effects = Array[ExtResource("1_mhxdy")]([]) +name = "Absorb" +description = "Enemy damage converted to heal your Active Monster Field HP during this turn." +icon = ExtResource("2_i2lgf") diff --git a/data/cards/support/all_out_attack.tres b/data/cards/support/all_out_attack.tres new file mode 100644 index 0000000..660a217 --- /dev/null +++ b/data/cards/support/all_out_attack.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://dgxcvdo6x6kst"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_fd50n"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_61mgn"] +[ext_resource type="Texture2D" uid="uid://bpmr8pa8cq3w0" path="res://assets/support/all out attack.png" id="2_a1iip"] + +[resource] +script = ExtResource("2_61mgn") +scope = "turn" +type = "green" +effects = Array[ExtResource("1_fd50n")]([null]) +name = "All-Out Attack" +description = "Combine all Rock Paper Scissor during this turn, and got additional damage from the lowest Rock Paper Scissor you got." +icon = ExtResource("2_a1iip") diff --git a/data/cards/support/attack_mode.tres b/data/cards/support/attack_mode.tres new file mode 100644 index 0000000..b3de463 --- /dev/null +++ b/data/cards/support/attack_mode.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://dcimexx4twoe2"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_jl6i7"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_p06c1"] + +[resource] +script = ExtResource("2_p06c1") +type = "green" +priority = 0 +effects = Array[ExtResource("1_jl6i7")]([null]) +name = "Attack Mode" +description = "If you have Prankie in your Active Monster Field, set all Rock Paper Scissor to 100 permanently." diff --git a/data/cards/support/caller.tres b/data/cards/support/caller.tres new file mode 100644 index 0000000..397af59 --- /dev/null +++ b/data/cards/support/caller.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://5n2o4m7xqd13"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_w4l0x"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_n7fiv"] + +[resource] +script = ExtResource("2_n7fiv") +type = "green" +priority = 0 +effects = Array[ExtResource("1_w4l0x")]([null]) +name = "Caller" +description = "Get 1 monster of your choice to your hand. Shuffle it afterwards." diff --git a/data/cards/support/cash_back.tres b/data/cards/support/cash_back.tres new file mode 100644 index 0000000..b13212f --- /dev/null +++ b/data/cards/support/cash_back.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://bk6myqvoklhqp"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_7f5cd"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_prilx"] + +[resource] +script = ExtResource("2_prilx") +type = "red" +priority = 0 +effects = Array[ExtResource("1_7f5cd")]([null]) +name = "Cash Back" +description = "If your monster died during this turn, Refund all the energy being used by the monster sent to graveyard." diff --git a/data/cards/support/catcher.tres b/data/cards/support/catcher.tres new file mode 100644 index 0000000..ea9d5d8 --- /dev/null +++ b/data/cards/support/catcher.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://ca0fengr2xjps"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_r7m0a"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_g1u6x"] + +[resource] +script = ExtResource("2_g1u6x") +type = "green" +priority = 0 +effects = Array[ExtResource("1_r7m0a")]([null]) +name = "Catcher" +description = "For one turn, swap your Active Enemy card with your Active Monster card. If the card you previously used died during this turn, you can keep the enemy monster card." diff --git a/data/cards/support/energy_booster.tres b/data/cards/support/energy_booster.tres new file mode 100644 index 0000000..7a16144 --- /dev/null +++ b/data/cards/support/energy_booster.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://c0grh1y65e0f3"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_pkc1x"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_iq88n"] +[ext_resource type="Texture2D" uid="uid://cd1mxacc3gfcy" path="res://assets/support/energy booster.png" id="2_lxctl"] + +[resource] +script = ExtResource("2_iq88n") +scope = "turn" +type = "green" +effects = Array[ExtResource("1_pkc1x")]([null]) +name = "Energy Booster" +description = "Add 1 additional Energy." +icon = ExtResource("2_lxctl") diff --git a/data/cards/support/insurance.tres b/data/cards/support/insurance.tres new file mode 100644 index 0000000..f9211a0 --- /dev/null +++ b/data/cards/support/insurance.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://dfocg5yfh22e8"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_gtyqr"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_3ixor"] +[ext_resource type="Texture2D" uid="uid://bwo6dfe1kpxhe" path="res://assets/support/insurance.png" id="2_f7jjv"] + +[resource] +script = ExtResource("2_3ixor") +scope = "turn" +type = "red" +effects = Array[ExtResource("1_gtyqr")]([null]) +name = "Insurance" +description = "If your monster supposed to be dead in this turn, keep it alive at 10 HP." +icon = ExtResource("2_f7jjv") diff --git a/data/cards/support/invisibility.tres b/data/cards/support/invisibility.tres new file mode 100644 index 0000000..3fb4c4e --- /dev/null +++ b/data/cards/support/invisibility.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://by4yg81uqti3u"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_5tnpm"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_6c2xo"] +[ext_resource type="Texture2D" uid="uid://b8hkgi1r8wpri" path="res://assets/support/Invisibility.png" id="2_6occh"] + +[resource] +script = ExtResource("2_6c2xo") +scope = "turn" +type = "green" +effects = Array[ExtResource("1_5tnpm")]([null]) +name = "Invisibility" +description = "Ignore any damage to your monster in this turn." +icon = ExtResource("2_6occh") diff --git a/data/cards/support/lifesteal.tres b/data/cards/support/lifesteal.tres new file mode 100644 index 0000000..2a0d994 --- /dev/null +++ b/data/cards/support/lifesteal.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://bcrlaam8uq6xt"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_b33y4"] +[ext_resource type="Texture2D" uid="uid://bni2wr2vrg0fe" path="res://assets/support/lifesteal.png" id="2_arrkb"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_khaf1"] + +[resource] +script = ExtResource("2_khaf1") +scope = "turn" +type = "green" +effects = Array[ExtResource("1_b33y4")]([null]) +name = "Lifesteal" +description = "During this turn your attack also heals your HP." +icon = ExtResource("2_arrkb") diff --git a/data/cards/support/negate.tres b/data/cards/support/negate.tres new file mode 100644 index 0000000..38707fc --- /dev/null +++ b/data/cards/support/negate.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://cl0jcer7o04uc"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_awvxv"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_tr5ug"] + +[resource] +script = ExtResource("2_tr5ug") +scope = "turn" +magnitude = 0 +type = "red" +effects = Array[ExtResource("1_awvxv")]([null]) +name = "Negate" +description = "Cancel 1 of the Support Card played by your opponent. This card will always be played last." diff --git a/data/cards/support/paper.tres b/data/cards/support/paper.tres new file mode 100644 index 0000000..71de883 --- /dev/null +++ b/data/cards/support/paper.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://crn3qovkygo6l"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_gqbio"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_rr70q"] + +[resource] +script = ExtResource("2_rr70q") +type = "green" +priority = 0 +effects = Array[ExtResource("1_gqbio")]([null]) +name = "Force Paper" +description = "Forcing enemy to pick Paper during this turn." diff --git a/data/cards/support/potion.tres b/data/cards/support/potion.tres new file mode 100644 index 0000000..36ea162 --- /dev/null +++ b/data/cards/support/potion.tres @@ -0,0 +1,20 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=6 format=3 uid="uid://4eod3m0vc5a8"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_ujm0o"] +[ext_resource type="Resource" uid="uid://cvu0rtt5nggf" path="res://data/support_effects/heal.tres" id="2_k1cnl"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="3_at5nt"] +[ext_resource type="Texture2D" uid="uid://48hblv72emyr" path="res://assets/support/potion.png" id="3_hk8kx"] + +[sub_resource type="Resource" id="Resource_88lmk"] +script = ExtResource("1_ujm0o") +magnitude = 30 +effect = ExtResource("2_k1cnl") + +[resource] +script = ExtResource("3_at5nt") +scope = "turn" +type = "green" +effects = Array[ExtResource("1_ujm0o")]([SubResource("Resource_88lmk")]) +name = "Potion" +description = "Heal 30 HP" +icon = ExtResource("3_hk8kx") diff --git a/data/cards/support/reflection.tres b/data/cards/support/reflection.tres new file mode 100644 index 0000000..2e6e1eb --- /dev/null +++ b/data/cards/support/reflection.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://c1gsrru1wa6ao"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_mk2or"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_igbok"] +[ext_resource type="Texture2D" uid="uid://b3uq5b2x2oacn" path="res://assets/support/reflection.png" id="2_jrr8g"] + +[resource] +script = ExtResource("2_igbok") +scope = "turn" +type = "red" +effects = Array[ExtResource("1_mk2or")]([null]) +name = "Reflection" +description = "Enemy got the same amount of damage as our monster in this turn." +icon = ExtResource("2_jrr8g") diff --git a/data/cards/support/retreat.tres b/data/cards/support/retreat.tres new file mode 100644 index 0000000..6582080 --- /dev/null +++ b/data/cards/support/retreat.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://cljmcpwa44j6b"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_2w2ve"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_r3faa"] + +[resource] +script = ExtResource("2_r3faa") +type = "green" +priority = 0 +effects = Array[ExtResource("1_2w2ve")]([null]) +name = "Retreat" +description = "Swap your monster in Active Field with the one in your hand. The energy cost for summoning decreased by 1." diff --git a/data/cards/support/reviver.tres b/data/cards/support/reviver.tres new file mode 100644 index 0000000..8295ec0 --- /dev/null +++ b/data/cards/support/reviver.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://c3o6lxj0m6yod"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_y5oux"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_7m5wu"] + +[resource] +script = ExtResource("2_7m5wu") +type = "red" +priority = 0 +effects = Array[ExtResource("1_y5oux")]([null]) +name = "Reviver" +description = "Revive 1 Monster of your choice from your graveyard, and move it into your hand." diff --git a/data/cards/support/rock.tres b/data/cards/support/rock.tres new file mode 100644 index 0000000..4237c53 --- /dev/null +++ b/data/cards/support/rock.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://defdobjmiloth"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_hx76y"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_oinlp"] + +[resource] +script = ExtResource("2_oinlp") +type = "green" +priority = 0 +effects = Array[ExtResource("1_hx76y")]([null]) +name = "Force Rock" +description = "Forcing enemy to pick Rock during this turn." diff --git a/data/cards/support/scissor.tres b/data/cards/support/scissor.tres new file mode 100644 index 0000000..e9d5406 --- /dev/null +++ b/data/cards/support/scissor.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://d304v2sfewmp5"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_q82mb"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_yklgt"] + +[resource] +script = ExtResource("2_yklgt") +type = "red" +priority = 0 +effects = Array[ExtResource("1_q82mb")]([null]) +name = "Force Scissor" +description = "Forcing enemy to pick Scissor during this turn." diff --git a/data/cards/support/sword_mastery.tres b/data/cards/support/sword_mastery.tres new file mode 100644 index 0000000..1eb0399 --- /dev/null +++ b/data/cards/support/sword_mastery.tres @@ -0,0 +1,20 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=6 format=3 uid="uid://2xeb6keaoabo"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_y6yvj"] +[ext_resource type="Resource" uid="uid://bs4i85slalkgd" path="res://data/support_effects/sword_mastery.tres" id="2_omhdb"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="3_37rh4"] +[ext_resource type="Texture2D" uid="uid://ha5p3vpqn5jv" path="res://assets/support/sword mastery.png" id="3_rrvpt"] + +[sub_resource type="Resource" id="Resource_wwv02"] +script = ExtResource("1_y6yvj") +magnitude = 20 +effect = ExtResource("2_omhdb") + +[resource] +script = ExtResource("3_37rh4") +scope = "monster" +type = "green" +effects = Array[ExtResource("1_y6yvj")]([SubResource("Resource_wwv02")]) +name = "Sword Mastery" +description = "Permanently add 20 damage for all Rock Paper Scissor to 1 Active Monster." +icon = ExtResource("3_rrvpt") diff --git a/data/cards/support/tanker.tres b/data/cards/support/tanker.tres new file mode 100644 index 0000000..817bd89 --- /dev/null +++ b/data/cards/support/tanker.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=4 format=3 uid="uid://dsmrqyxt8mdp5"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_1fvcb"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_d0adk"] +[ext_resource type="Texture2D" uid="uid://hiswkj2stt4l" path="res://assets/support/tanker.png" id="2_hqv06"] + +[resource] +script = ExtResource("2_d0adk") +scope = "turn" +type = "red" +effects = Array[ExtResource("1_1fvcb")]([null]) +name = "Tanker" +description = "Add your HP with your selected (Rock Paper Scissor) during this turn, and reduce to max HP if current HP higher than max HP." +icon = ExtResource("2_hqv06") diff --git a/data/support_effects/heal.tres b/data/support_effects/heal.tres new file mode 100644 index 0000000..2465305 --- /dev/null +++ b/data/support_effects/heal.tres @@ -0,0 +1,6 @@ +[gd_resource type="Resource" script_class="SupportCardEffect" load_steps=2 format=3 uid="uid://cvu0rtt5nggf"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect.gd" id="1_exmke"] + +[resource] +script = ExtResource("1_exmke") diff --git a/data/support_effects/sword_mastery.tres b/data/support_effects/sword_mastery.tres new file mode 100644 index 0000000..1cb570e --- /dev/null +++ b/data/support_effects/sword_mastery.tres @@ -0,0 +1,6 @@ +[gd_resource type="Resource" script_class="SupportCardEffect" load_steps=2 format=3 uid="uid://bs4i85slalkgd"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect.gd" id="1_43nry"] + +[resource] +script = ExtResource("1_43nry") diff --git a/demo_game.gd b/demo_game.gd new file mode 100644 index 0000000..b3d2308 --- /dev/null +++ b/demo_game.gd @@ -0,0 +1,135 @@ +extends Control +class_name DemoGame + +signal own_played_card(card: Card) +signal opponent_played_card(card: Card) +signal own_played_rts(move: String) +signal opponent_played_rts(move: String) + +@export var player_1_deck: Array[Card] +@export var player_2_deck: Array[Card] + +@onready var match_manager: MatchManager = $MatchManager +@onready var own_side = $Own +@onready var opponent_side = $Opponent +@onready var start_game_btn = $StartGameButton +@onready var win_lose_tie_label: Label = $"Win-Lose-Tie" + +var id_to_card: Dictionary = {} + +var player_action_queue: Dictionary +var player_1_action: Action: + get: + return player_action_queue.get(own_side.player_id) + set(value): + player_action_queue[own_side.player_id] = value +var player_2_action: Action: + get: + return player_action_queue.get(opponent_side.player_id) + set(value): + player_action_queue[opponent_side.player_id] = value + +var id +var signal_connected := false + +func _ready() -> void: + _update_phase_info(Match.Phase.PREGAME) + +func init(player_id: int) -> void: + id = player_id + + own_side.player_id = player_id + opponent_side.player_id = MatchManager.PLAYER_2_ID if player_id == MatchManager.PLAYER_1_ID else MatchManager.PLAYER_1_ID + + id_to_card.clear() + + var cards = player_1_deck.duplicate() + cards.append_array(player_2_deck) + for card in cards: + if card.id not in id_to_card: + id_to_card[card.id] = card + + print(match_manager.phase) + match_manager.init({ + MatchManager.PLAYER_1_ID: player_1_deck, + MatchManager.PLAYER_2_ID: player_2_deck + }, own_side.player_id, opponent_side.player_id) + own_side.attach(match_manager, true) + opponent_side.attach(match_manager, false) + + if !signal_connected: + match_manager.state_transitioned.connect(_on_match_manager_state_transitioned) + signal_connected = true + +var transition_history: Array[PhaseTransition] = [] +func _on_match_manager_state_transitioned(transition: PhaseTransition): + start_game_btn.visible = match_manager.phase == Match.Phase.PREGAME + transition_history.append(transition) + _update_phase_info(transition.to) + if transition.to == Match.Phase.END: + var game_ended_event: EventGameEnded = transition.events.filter(func (it): return it is EventGameEnded)[0] + win_lose_tie_label.text = "TIE" if game_ended_event.winner_player_id == -1 else "YOU WON!" if game_ended_event.winner_player_id == id else "YOU LOST!" + win_lose_tie_label.visible = true + print("Phase: ", Match.phase_to_str(transition.from), " -> ", Match.phase_to_str(transition.to)) + +func _on_start_game_button_button_up() -> void: + #match_manager.resolve({}) + pass + +func rpc_start_game() -> void: + match_manager.resolve({}) + +func _on_own_play_card(card: Card) -> void: + if card: + player_1_action = ActionPlayCard.new(card) + own_played_card.emit(card) + else: + player_1_action = ActionSkipCard.new() + own_played_card.emit(null) + + print(id, " _on_own_play_card", player_1_action, player_2_action) + + if player_2_action: + match_manager.resolve(player_action_queue) + player_action_queue.clear() + +func rpc_opponent_play_card(id: String) -> void: + if !id.is_empty(): + var card = id_to_card[id] + player_2_action = ActionPlayCard.new(card) + else: + player_2_action = ActionSkipCard.new() + + print(self.id , " rpc_opponent_play_card", player_1_action, player_2_action) + + if player_1_action: + match_manager.resolve(player_action_queue) + player_action_queue.clear() + +func _on_own_rps_move(move: String) -> void: + player_1_action = ActionRPSMove.new(move) + own_played_rts.emit(move) + + print(id, " _on_own_rps_move", player_1_action, player_2_action, move) + + if player_2_action: + match_manager.resolve(player_action_queue) + player_action_queue.clear() + +func rpc_opponent_rps_move(move: String) -> void: + player_2_action = ActionRPSMove.new(move) + + print(id, " rpc_opponent_rps_move", player_1_action, player_2_action, move) + + if player_1_action: + match_manager.resolve(player_action_queue) + player_action_queue.clear() + +func _update_phase_info(phase: Match.Phase): + var phaseHeaders: Container = get_node("%PhaseInfo/PhaseHeader") + for child: Label in phaseHeaders.get_children(): + child.modulate = Color.DIM_GRAY + var target = phaseHeaders.get_node(Match.phase_to_str(phase)) + phaseHeaders.visible = target != null + if target: + target.modulate = Color.WHITE diff --git a/demo_game.tscn b/demo_game.tscn new file mode 100644 index 0000000..b4261af --- /dev/null +++ b/demo_game.tscn @@ -0,0 +1,374 @@ +[gd_scene load_steps=24 format=3 uid="uid://bgc0u117jqyr1"] + +[ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] +[ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] +[ext_resource type="Script" path="res://tcg/card/card.gd" id="2_xuft0"] +[ext_resource type="PackedScene" uid="uid://cikstg43mudkn" path="res://tcg/match/match_manager.tscn" id="3_3yhrl"] +[ext_resource type="Resource" uid="uid://cs7q8i7bvohmj" path="res://data/cards/monster/capytain.tres" id="3_we1tk"] +[ext_resource type="Resource" uid="uid://4eod3m0vc5a8" path="res://data/cards/support/potion.tres" id="4_kkhfk"] +[ext_resource type="Resource" uid="uid://deo8mj887rfx1" path="res://data/cards/monster/axoluna.tres" id="5_3cm5x"] +[ext_resource type="Resource" uid="uid://bcrlaam8uq6xt" path="res://data/cards/support/lifesteal.tres" id="6_potm8"] +[ext_resource type="PackedScene" uid="uid://bhrelvt51cbp2" path="res://ui/card_template/monster_card.tscn" id="7_4ah45"] +[ext_resource type="Resource" uid="uid://dgxcvdo6x6kst" path="res://data/cards/support/all_out_attack.tres" id="7_nvv8k"] +[ext_resource type="PackedScene" uid="uid://b60vuykleugjn" path="res://ui/card_template/skip_card.tscn" id="7_skjyk"] +[ext_resource type="PackedScene" uid="uid://dg5amjm1gqi06" path="res://ui/card_template/support_card_green.tscn" id="8_dytl5"] +[ext_resource type="Resource" uid="uid://be01tdq1fxlct" path="res://data/cards/support/absorb.tres" id="8_ewr4v"] +[ext_resource type="PackedScene" uid="uid://cds50kwwhlgam" path="res://ui/card_template/support_card_red.tscn" id="9_cabcc"] +[ext_resource type="Resource" uid="uid://dfocg5yfh22e8" path="res://data/cards/support/insurance.tres" id="9_ga5hf"] +[ext_resource type="Resource" uid="uid://c0grh1y65e0f3" path="res://data/cards/support/energy_booster.tres" id="10_3rg8q"] +[ext_resource type="Resource" uid="uid://2xeb6keaoabo" path="res://data/cards/support/sword_mastery.tres" id="11_seakd"] +[ext_resource type="Resource" uid="uid://bmst884k0myvd" path="res://data/cards/monster/cattogato.tres" id="12_xqqfn"] +[ext_resource type="Texture2D" uid="uid://6trhu2r7h6g3" path="res://assets/card_base/illust bg 1.png" id="13_bdgfp"] +[ext_resource type="Texture2D" uid="uid://b0pclmv0j0r12" path="res://assets/card_base/kertas.png" id="18_gwpy8"] +[ext_resource type="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="19_3iovu"] +[ext_resource type="Texture2D" uid="uid://ch04c20lkis6j" path="res://assets/card_base/gunting.png" id="19_clnw6"] +[ext_resource type="Texture2D" uid="uid://bywa8qlwvcksd" path="res://assets/card_base/batu.png" id="20_672ya"] + +[node name="DemoGame" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_jn16u") +player_1_deck = Array[ExtResource("2_xuft0")]([ExtResource("3_we1tk"), ExtResource("4_kkhfk"), ExtResource("5_3cm5x"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd")]) +player_2_deck = Array[ExtResource("2_xuft0")]([ExtResource("12_xqqfn"), ExtResource("4_kkhfk"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd"), ExtResource("5_3cm5x")]) + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 1804.0 +offset_bottom = 1224.0 +scale = Vector2(1.1, 1.1) +texture = ExtResource("13_bdgfp") + +[node name="Own" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label", "rps_button_container")] +layout_mode = 1 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("2_w4tnt") +deck = NodePath("Hand") +energy_label = NodePath("EnergyLabel") +skip_card_prefab = ExtResource("7_skjyk") +support_red_card_prefab = ExtResource("9_cabcc") +support_green_card_prefab = ExtResource("8_dytl5") +monster_card_prefab = ExtResource("7_4ah45") +rps_button_container = NodePath("HBoxContainer") +rps_grayed_color = Color(0.439216, 0.439216, 0.439216, 1) + +[node name="MonsterCard" parent="Own" instance=ExtResource("7_4ah45")] +custom_minimum_size = Vector2(220, 330) +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.0 +offset_left = -110.0 +offset_top = 20.0 +offset_right = 110.0 +offset_bottom = 350.0 +grow_vertical = 1 +pivot_offset = Vector2(110, 0) +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="Support1GreenCard" parent="Own" instance=ExtResource("8_dytl5")] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -310.0 +offset_top = 75.0 +offset_right = -90.0 +offset_bottom = 395.0 +grow_horizontal = 2 +pivot_offset = Vector2(110, 0) + +[node name="Support2GreenCard" parent="Own" instance=ExtResource("8_dytl5")] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = 90.0 +offset_top = 75.0 +offset_right = 310.0 +offset_bottom = 395.0 +grow_horizontal = 2 +pivot_offset = Vector2(110, 0) + +[node name="Support2RedCard" parent="Own" instance=ExtResource("9_cabcc")] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = 90.0 +offset_top = 75.0 +offset_right = 310.0 +offset_bottom = 395.0 +grow_horizontal = 2 +pivot_offset = Vector2(110, 0) + +[node name="EnergyLabel" type="Label" parent="Own"] +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -90.0 +offset_right = 1152.0 +offset_bottom = -67.0 +grow_vertical = 0 +text = "Energy:" + +[node name="Hand" type="HBoxContainer" parent="Own"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -446.0 +offset_top = -370.0 +offset_right = 446.0 +grow_horizontal = 2 +grow_vertical = 0 +pivot_offset = Vector2(0, 150) +alignment = 1 + +[node name="SkipCard" parent="Own/Hand" instance=ExtResource("7_skjyk")] +layout_mode = 2 + +[node name="MonsterCard" parent="Own/Hand" instance=ExtResource("7_4ah45")] +layout_mode = 2 + +[node name="CardBase" parent="Own/Hand" instance=ExtResource("8_dytl5")] +layout_mode = 2 + +[node name="CardBase2" parent="Own/Hand" instance=ExtResource("9_cabcc")] +layout_mode = 2 + +[node name="IncomingDamageLabel" type="Label" parent="Own"] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = 84.0 +offset_top = 24.0 +offset_right = 251.0 +offset_bottom = 47.0 +grow_horizontal = 2 +text = "HP +0" + +[node name="HBoxContainer" type="HBoxContainer" parent="Own"] +visible = false +layout_mode = 0 +offset_left = 665.0 +offset_top = 299.0 +offset_right = 1326.0 +offset_bottom = 548.0 + +[node name="KertasButton" type="TextureButton" parent="Own/HBoxContainer"] +layout_mode = 2 +texture_normal = ExtResource("18_gwpy8") + +[node name="GuntingButton" type="TextureButton" parent="Own/HBoxContainer"] +layout_mode = 2 +texture_normal = ExtResource("19_clnw6") + +[node name="BatuButton" type="TextureButton" parent="Own/HBoxContainer"] +layout_mode = 2 +texture_normal = ExtResource("20_672ya") + +[node name="Opponent" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label")] +layout_mode = 1 +anchor_right = 1.0 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("2_w4tnt") +player_id = 1 +deck = NodePath("Hand") +energy_label = NodePath("EnergyLabel") + +[node name="MonsterCard" parent="Opponent" instance=ExtResource("7_4ah45")] +custom_minimum_size = Vector2(220, 330) +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +offset_left = -110.0 +offset_top = -350.0 +offset_right = 110.0 +offset_bottom = -20.0 +grow_vertical = 0 +pivot_offset = Vector2(110, 330) +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="Support1GreenCard" parent="Opponent" instance=ExtResource("8_dytl5")] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -310.0 +offset_top = -465.0 +offset_right = -90.0 +offset_bottom = -145.0 +grow_horizontal = 2 +grow_vertical = 0 +pivot_offset = Vector2(110, 320) + +[node name="Support2GreenCard" parent="Opponent" instance=ExtResource("8_dytl5")] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = 90.0 +offset_top = -465.0 +offset_right = 310.0 +offset_bottom = -145.0 +grow_horizontal = 2 +grow_vertical = 0 +pivot_offset = Vector2(110, 320) + +[node name="Support2RedCard" parent="Opponent" instance=ExtResource("9_cabcc")] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = 90.0 +offset_top = -465.0 +offset_right = 310.0 +offset_bottom = -145.0 +grow_horizontal = 2 +grow_vertical = 0 +pivot_offset = Vector2(110, 320) + +[node name="Hand" type="HBoxContainer" parent="Opponent"] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 31.0 +grow_horizontal = 2 +alignment = 1 + +[node name="EnergyLabel" type="Label" parent="Opponent"] +layout_mode = 2 +offset_top = 35.0 +offset_right = 1152.0 +offset_bottom = 58.0 +text = "Energy:" + +[node name="IncomingDamageLabel" type="Label" parent="Opponent"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = 84.0 +offset_top = -52.0 +offset_right = 251.0 +offset_bottom = -29.0 +grow_horizontal = 2 +grow_vertical = 0 +text = "HP +0" + +[node name="StartGameButton" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -132.0 +offset_top = -59.5 +offset_right = 132.0 +offset_bottom = 59.5 +grow_horizontal = 2 +grow_vertical = 2 +text = "Start Game" + +[node name="MatchManager" parent="." instance=ExtResource("3_3yhrl")] + +[node name="PhaseInfo" type="VBoxContainer" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 347.0 +offset_top = -102.0 +offset_right = 864.0 +offset_bottom = 106.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="PhaseHeader" type="VBoxContainer" parent="PhaseInfo"] +layout_mode = 2 +theme_override_constants/separation = 24 +alignment = 2 + +[node name="Summon" type="Label" parent="PhaseInfo/PhaseHeader"] +layout_mode = 2 +theme = ExtResource("19_3iovu") +theme_override_font_sizes/font_size = 24 +text = "Summon" + +[node name="Support 1" type="Label" parent="PhaseInfo/PhaseHeader"] +layout_mode = 2 +theme = ExtResource("19_3iovu") +theme_override_font_sizes/font_size = 24 +text = "Support (1)" + +[node name="RPS" type="Label" parent="PhaseInfo/PhaseHeader"] +layout_mode = 2 +theme = ExtResource("19_3iovu") +theme_override_font_sizes/font_size = 24 +text = "Rock, Paper, Scissors" + +[node name="Support 2" type="Label" parent="PhaseInfo/PhaseHeader"] +layout_mode = 2 +theme = ExtResource("19_3iovu") +theme_override_font_sizes/font_size = 24 +text = "Support (2)" + +[node name="Win-Lose-Tie" type="Label" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -365.0 +offset_top = -215.0 +offset_right = 365.0 +offset_bottom = 215.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("19_3iovu") +theme_override_font_sizes/font_size = 52 +text = "YOU WON!" +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="play_card" from="Own" to="." method="_on_own_play_card"] +[connection signal="rps_move" from="Own" to="." method="_on_own_rps_move"] +[connection signal="button_down" from="Own/HBoxContainer/KertasButton" to="Own" method="_on_kertas_button_button_down"] +[connection signal="button_down" from="Own/HBoxContainer/GuntingButton" to="Own" method="_on_gunting_button_button_down"] +[connection signal="button_down" from="Own/HBoxContainer/BatuButton" to="Own" method="_on_batu_button_button_down"] +[connection signal="play_card" from="Opponent" to="." method="_on_opponent_play_card"] +[connection signal="rps_move" from="Opponent" to="." method="_on_opponent_rps_move"] +[connection signal="button_up" from="StartGameButton" to="." method="_on_start_game_button_button_up"] diff --git a/export_presets.cfg b/export_presets.cfg index 82e3d28..1c2b9dc 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -130,3 +130,211 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue Remove-Item -Recurse -Force '{temp_dir}'" + +[preset.2] + +name="Android" +platform="Android" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=false +gradle_build/gradle_build_directory="" +gradle_build/android_source_template="" +gradle_build/compress_native_libraries=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=false +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +version/code=1 +version/name="" +package/unique_name="com.example.$genname" +package/name="" +package/signed=true +package/app_category=2 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +package/show_in_android_tv=false +package/show_in_app_library=true +package/show_as_launcher_app=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=0 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/post_notifications=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false diff --git a/icon.svg b/icon.svg index 9d8b7fa..2ead0cd 100644 --- a/icon.svg +++ b/icon.svg @@ -1 +1,3 @@ - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:f6369bae7e12e6d16019cd6214cf27a2fdb6f3f6d024bd6f23c322be4804474f +size 994 diff --git a/main.gd b/main.gd index 3f1095d..2e7b500 100644 --- a/main.gd +++ b/main.gd @@ -1,41 +1,41 @@ extends Node +class_name MainNode const PORT = 25565 const PORT_RANGE := 10 const MAX_CONNECTIONS = 20 -var counter = 0 - @onready var before_connect_container = get_node("BeforeConnect") as Container -@onready var host_text_edit = get_node("%HostTextEdit") as TextEdit @onready var connect_button = get_node("%ConnectButton") as Button @onready var host_button = get_node("%HostButton") as Button @onready var server_discovery = get_node("%ServerDiscovery") as ServerDiscovery -@onready var after_connect_container = get_node("%AfterConnect") as Container -@onready var counter_label = get_node("%CounterLabel") as Label -@onready var decrement_button = get_node("%DecrementButton") as Button -@onready var increment_button = get_node("%IncrementButton") as Button +@onready var after_connect_container = get_node("%AfterConnect") as Node @onready var disconnect_button = get_node("%DisconnectButton") as Button -@onready var start_game_button = get_node("%StartGameButton") as Button + +@onready var demo_game = get_node("AfterConnect/DemoGame") as DemoGame +@onready var start_game_button = (get_node("AfterConnect/DemoGame") as DemoGame).start_game_btn + var active_port: int var server_buttons: Dictionary = Dictionary() +var base_seed: int func _clean_room(): # this is if someone left the room and we will just clean the game room again # should only called on host - _set_counter(0) + # need to clean for server pass func _on_start_game_clicked(): if !multiplayer.multiplayer_peer: return - if !multiplayer.get_unique_id() != 1: + if !multiplayer.is_server(): return if (multiplayer.get_peers().size() == 0): return # do start game here, should only run on host + _start_game.rpc() pass func _ready() -> void: @@ -51,13 +51,35 @@ func _ready() -> void: #multiplayer.connection_failed.connect(_on_connected_fail) multiplayer.server_disconnected.connect(_on_server_disconnected) - increment_button.button_up.connect(func(): _increment.rpc()) - decrement_button.button_up.connect(func(): _decrement.rpc()) disconnect_button.button_up.connect(_on_disconnect_clicked) connect_button.get_parent().remove_child(connect_button) server_discovery.server_added.connect(_on_server_added) server_discovery.server_removed.connect(_on_server_removed) + + demo_game.own_played_card.connect(func (card): _on_own_played_card.rpc(card.id if card else "")) + demo_game.own_played_rts.connect(func (move): _on_own_played_rts.rpc(move)) + +@rpc("any_peer", "call_remote", "reliable") +func _on_own_played_card(card_id: String): + demo_game.rpc_opponent_play_card(card_id) + +@rpc("any_peer", "call_remote", "reliable") +func _on_own_played_rts(move: String): + demo_game.rpc_opponent_rps_move(move) + +@rpc("authority", "call_local", "reliable") +func _sync_seed(seed: int): + seed(seed) + +@rpc("authority", "call_local", "reliable") +func _start_game(): + if multiplayer.is_server(): + demo_game.init(MatchManager.PLAYER_1_ID) + else: + demo_game.init(MatchManager.PLAYER_2_ID) + + demo_game.rpc_start_game() func _on_disconnect_clicked(): if (multiplayer.is_server()): @@ -98,7 +120,8 @@ func _on_server_removed(id, ip): func _do_connect(ip: String, port: int): var peer = ENetMultiplayerPeer.new() print("%s Connecting to %s:%d" % [server_discovery.id, ip, port]) - peer.create_client(ip, port) + var err = peer.create_client(ip, port) + print(err) multiplayer.multiplayer_peer = peer func _on_host_pressed(): @@ -118,8 +141,12 @@ func _on_host_pressed(): _on_connected_ok() + start_game_button.disabled = true start_game_button.text = "Start Game (Not enough player)" + base_seed = randi() + _sync_seed.rpc(base_seed) + server_discovery.enable_server(active_port) func is_port_available(port: int) -> bool: @@ -133,26 +160,13 @@ func is_port_available(port: int) -> bool: else: return false -@rpc("any_peer", "call_local") -func _increment(): - counter += 1 - counter_label.text = str(counter) - -@rpc("any_peer", "call_local") -func _decrement(): - counter -= 1 - counter_label.text = str(counter) - -@rpc("authority", "call_remote") -func _set_counter(value: int): - counter = value - counter_label.text = str(counter) - func _on_player_connected(id: int): if multiplayer.get_unique_id() == 1: - _set_counter.rpc_id(id, counter) + + _sync_seed.rpc(base_seed) if (multiplayer.get_peers().size() > 0): + start_game_button.disabled = false start_game_button.text = "Start Game" server_discovery.disable_server() @@ -165,22 +179,20 @@ func _on_player_disconnected(id): if (id != 1 and multiplayer.get_unique_id() == 1): _clean_room() + start_game_button.disabled = true start_game_button.text = "Start Game (Not enough player)" server_discovery.enable_server(active_port) func _on_connected_ok(): $AfterConnect.visible = true $BeforeConnect.visible = false - counter_label.text = str(counter) if (multiplayer.is_server()): disconnect_button.text = "Disconnect (Host)" - if start_game_button.get_parent() != after_connect_container: - after_connect_container.add_child(start_game_button) + start_game_button.visible = true else: disconnect_button.text = "Disconnect" - if start_game_button.get_parent() == after_connect_container: - after_connect_container.remove_child(start_game_button) + start_game_button.visible = false func _on_connected_fail(): pass diff --git a/main.tscn b/main.tscn index d1043f9..46481fe 100644 --- a/main.tscn +++ b/main.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://c7gn46af6whf8"] +[gd_scene load_steps=4 format=3 uid="uid://c7gn46af6whf8"] [ext_resource type="Script" path="res://main.gd" id="1_e0ud3"] [ext_resource type="Script" path="res://server_discovery.gd" id="2_hed18"] +[ext_resource type="PackedScene" uid="uid://bgc0u117jqyr1" path="res://demo_game.tscn" id="3_2ln6b"] [node name="Main" type="Control"] layout_mode = 3 @@ -28,18 +29,6 @@ grow_horizontal = 2 grow_vertical = 2 alignment = 1 -[node name="HostTextEdit" type="TextEdit" parent="BeforeConnect"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_vertical = 3 -placeholder_text = "192.168.*.*" - -[node name="RefreshButton" type="Button" parent="BeforeConnect"] -unique_name_in_owner = true -custom_minimum_size = Vector2(0, 64) -layout_mode = 2 -text = "Refresh" - [node name="HostButton" type="Button" parent="BeforeConnect"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 64) @@ -59,54 +48,27 @@ unique_name_in_owner = true unique_name_in_owner = true script = ExtResource("2_hed18") -[node name="AfterConnect" type="VBoxContainer" parent="."] +[node name="AfterConnect" type="Control" parent="."] unique_name_in_owner = true visible = false layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -187.5 -offset_top = -88.5 -offset_right = 187.5 -offset_bottom = 88.5 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="CounterLabel" type="Label" parent="AfterConnect"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_vertical = 3 -theme_override_font_sizes/font_size = 64 -text = "1" -horizontal_alignment = 1 -vertical_alignment = 1 +[node name="DemoGame" parent="AfterConnect" instance=ExtResource("3_2ln6b")] +layout_mode = 1 [node name="DisconnectButton" type="Button" parent="AfterConnect"] unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -186.0 +offset_bottom = 31.0 +grow_horizontal = 0 +size_flags_horizontal = 8 text = "Disconnect" - -[node name="Actions" type="HBoxContainer" parent="AfterConnect"] -layout_mode = 2 - -[node name="DecrementButton" type="Button" parent="AfterConnect/Actions"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -text = "-" - -[node name="IncrementButton" type="Button" parent="AfterConnect/Actions"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -text = "+" - -[node name="StartGameButton" type="Button" parent="AfterConnect"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -text = "Start Game" diff --git a/player_side.gd b/player_side.gd new file mode 100644 index 0000000..5a88280 --- /dev/null +++ b/player_side.gd @@ -0,0 +1,239 @@ +extends Control + +signal play_card(card: Card) +signal rps_move(move: String) +@export var player_id: int +@export var deck: Container +@export var energy_label: Label +@export var skip_card_prefab: PackedScene +@export var support_red_card_prefab: PackedScene +@export var support_green_card_prefab: PackedScene +@export var monster_card_prefab: PackedScene +@export var rps_button_container: Container +@export var rps_grayed_color: Color + +@onready var monster_card_ui := $"MonsterCard" +@onready var support1_green := $"Support1GreenCard" +@onready var support2_green := $"Support2GreenCard" +@onready var support2_red := $"Support2RedCard" +@onready var incoming_damage_label := $"IncomingDamageLabel" + +var match_manager: MatchManager +var show_buttons: bool +var signal_connected: bool +var selected_card: Control +var focused_card: Control + +var hovering_cards_this_frame: Array[Control] = [] +var hovering_cards_duration: Dictionary = {} +const original_hover_position = 50 # hard coded idk what's a good way to find this value +const hover_animation_time = 0.1 +const hover_height_offset = -50 +const selected_height_offset = -100 + +func attach(match_manager: MatchManager, show_buttons: bool = true): + self.show_buttons = show_buttons + self.match_manager = match_manager + if !signal_connected: + match_manager.state_transitioned.connect(_on_update) + signal_connected = true + +func _ready(): + monster_card_ui.visible = false + support1_green.visible = false + support2_green.visible = false + support2_red.visible = false + incoming_damage_label.visible = false + for child in deck.get_children(): + child.queue_free() + +func _on_update(transition): + hovering_cards_duration.clear() + selected_card = null + incoming_damage_label.visible = true + + for child in deck.get_children(): + child.queue_free() + var player: MatchPlayer = match_manager.players.get(player_id) as MatchPlayer + if not player: + return + energy_label.text = "Energy: " + str(player.energy) + + if match_manager.players[player.id].active_support_cards.size() > 0: + support1_green.visible = true + support1_green.card = match_manager.players[player.id].active_support_cards[0] + else: + support1_green.visible = false + + if match_manager.players[player.id].active_support_cards.size() > 1: + var card: SupportCard = match_manager.players[player.id].active_support_cards[1] + if card.type == "green": + support2_green.visible = true + support2_green.card = card + else: + support2_red.visible = true + support2_red.card = card + else: + support2_green.visible = false + support2_red.visible = false + + + var monster = player.monster + + if monster: + monster_card_ui.visible = true + monster_card_ui.show_monster(monster) + incoming_damage_label.text = "HP " + ("+0" if monster.health_delta == 0 else str(monster.health_delta)) + + else: + monster_card_ui.visible = false + if match_manager.phase in [Match.Phase.SUMMON, Match.Phase.SUPPORT_1, Match.Phase.SUPPORT_2]: + + if ( + match_manager.phase != Match.Phase.SUMMON && show_buttons + ) or ( + match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0 && show_buttons + ): + var skip_btn:CardBase = skip_card_prefab.instantiate() + skip_btn.left_clicked.connect(func (): + _pop_this_card(skip_btn) + play_card.emit(null)) + skip_btn.hovering.connect(func (delta): _do_hover(skip_btn, delta)) + deck.add_child(skip_btn) + + for card: Card in player.hand: + #if match_manager.phase == Match.Phase.SUMMON and card is not MonsterCard: + #continue + #if (match_manager.phase == Match.Phase.SUPPORT_1 or match_manager.phase == Match.Phase.SUPPORT_2) and card is not SupportCard: + #continue + #if match_manager.phase == Match.Phase.SUPPORT_1 and card.type == "red": + #continue + + if !show_buttons : + continue + + var is_disabled = ( + card is MonsterCard and match_manager.phase != Match.Phase.SUMMON + ) or ( + card is SupportCard and match_manager.phase != Match.Phase.SUPPORT_1 and match_manager.phase != Match.Phase.SUPPORT_2 + ) or ( + card is SupportCard and card.type == "red" and match_manager.phase != Match.Phase.SUPPORT_2 + ) or ( + card is MonsterCard and match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0 + ) + + var btn: CardBase = null + if card is MonsterCard: + var monster_card:MonsterCardUI = monster_card_prefab.instantiate() + monster_card.show_monster(MatchMonster.new(card, card.base_health, 0)) + if !is_disabled: + monster_card.left_clicked.connect(func (): + _pop_this_card(monster_card) + play_card.emit(card)) + monster_card.hovering.connect(func (delta): _do_hover(monster_card, delta)) + monster_card.right_clicked.connect(func(): _do_zoom(monster_card)) + monster_card.un_right_clicked.connect(_do_unzoom) + deck.add_child(monster_card) + + elif card is SupportCard and card.type == "red": + btn = support_red_card_prefab.instantiate() + btn.card = card + deck.add_child(btn) + else: + btn = support_green_card_prefab.instantiate() + btn.card = card + deck.add_child(btn) + + if btn and !is_disabled: + btn.left_clicked.connect(func (): + _pop_this_card(btn) + play_card.emit(card)) + btn.hovering.connect(func (delta): _do_hover(btn, delta)) + btn.right_clicked.connect(func(): _do_zoom(btn)) + btn.un_right_clicked.connect(_do_unzoom) + + if rps_button_container: + rps_button_container.visible = match_manager.phase == Match.Phase.RPS + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + +func _do_zoom(card: Control): + if focused_card: + _do_unzoom() + + var new_card: Control = card.duplicate() + get_parent().add_child(new_card) + new_card.set_anchors_and_offsets_preset(Control.PRESET_CENTER) + new_card.scale = Vector2(2,2) + focused_card = new_card + +func _do_unzoom(): + if focused_card: + focused_card.queue_free() + focused_card = null + +func _pop_this_card(control: Control): + if selected_card: + selected_card.position = Vector2(selected_card.position.x, original_hover_position) + + selected_card = control + selected_card.position = Vector2(selected_card.position.x, original_hover_position + selected_height_offset) + +func _do_hover(control: Control, delta: float): + if control == selected_card: + if control in hovering_cards_duration: + hovering_cards_duration.erase(control) + return + + var duration: float + if control in hovering_cards_duration: + duration = hovering_cards_duration[control] + duration = clampf(duration + delta, 0, hover_animation_time) + hovering_cards_duration[control] = duration + else: + hovering_cards_duration[control] = delta + duration = delta + + var height = lerpf(0, hover_height_offset, duration / hover_animation_time) + original_hover_position + control.position = Vector2(control.position.x, height) + + hovering_cards_this_frame.append(control) + +func _process(delta): + for card in hovering_cards_duration.keys(): + if !card or card in hovering_cards_this_frame: + continue + + var duration = hovering_cards_duration[card] + duration = maxf(0, duration - delta) + + var height = lerpf(0, hover_height_offset, duration / hover_animation_time) + original_hover_position + card.position = Vector2(card.position.x, height) + + if duration == 0: + hovering_cards_duration.erase(card) + else: + hovering_cards_duration[card] = duration + + hovering_cards_this_frame.clear() + + +func _on_kertas_button_button_down() -> void: + rps_move.emit("paper") + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + rps_button_container.get_node("KertasButton").modulate = Color.WHITE + + +func _on_gunting_button_button_down() -> void: + rps_move.emit("scissors") + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + rps_button_container.get_node("GuntingButton").modulate = Color.WHITE + + +func _on_batu_button_button_down() -> void: + rps_move.emit("rock") + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + rps_button_container.get_node("BatuButton").modulate = Color.WHITE diff --git a/project.godot b/project.godot index 0bfa3d6..c65b3ca 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,17 @@ run/main_scene="res://main.tscn" config/features=PackedStringArray("4.3", "Mobile") config/icon="res://icon.svg" +[autoload] + +Match="*res://tcg/match/match.gd" + +[display] + +window/size/viewport_width=1920 +window/size/viewport_height=1080 +window/stretch/mode="viewport" + [rendering] renderer/rendering_method="mobile" +textures/vram_compression/import_etc2_astc=true diff --git a/tcg/card/card.gd b/tcg/card/card.gd new file mode 100644 index 0000000..6fd69f3 --- /dev/null +++ b/tcg/card/card.gd @@ -0,0 +1,10 @@ +extends Resource +class_name Card + +@export var name: String +@export_multiline var description: String +@export var icon: Texture2D + +var id: String: + get: + return resource_path.rsplit(".", true, 1)[0].rsplit("/", true, 1)[1] diff --git a/tcg/card/implemented_support_card.gd b/tcg/card/implemented_support_card.gd new file mode 100644 index 0000000..9806f1c --- /dev/null +++ b/tcg/card/implemented_support_card.gd @@ -0,0 +1,4 @@ +extends SupportCard +class_name ImplementedSupportCard + +@export_enum("instant", "turn", "monster", "match") var scope = "instant" diff --git a/tcg/card/monster_card.gd b/tcg/card/monster_card.gd new file mode 100644 index 0000000..16174b1 --- /dev/null +++ b/tcg/card/monster_card.gd @@ -0,0 +1,16 @@ +extends Card +class_name MonsterCard + +@export var rock: int = 0 +@export var paper: int = 0 +@export var scissors: int = 0 +@export var energy_cost: int = 1 +@export var base_health: int = 100 + +var damage: Dictionary: + get: + return { + "rock": rock, + "paper": paper, + "scissors": scissors + } diff --git a/tcg/card/support_card.gd b/tcg/card/support_card.gd new file mode 100644 index 0000000..68eeba4 --- /dev/null +++ b/tcg/card/support_card.gd @@ -0,0 +1,5 @@ +extends Card +class_name SupportCard + +@export_enum("red", "green") var type = "green" +@export var effects: Array[SupportCardEffectInstance] = [null] diff --git a/tcg/card/support_card_effect.gd b/tcg/card/support_card_effect.gd new file mode 100644 index 0000000..c841f1b --- /dev/null +++ b/tcg/card/support_card_effect.gd @@ -0,0 +1,6 @@ +extends Resource +class_name SupportCardEffect + +var id: String: + get: + return resource_path.rsplit(".", true, 1)[0].rsplit("/", true, 1)[1] diff --git a/tcg/card/support_card_effect_instance.gd b/tcg/card/support_card_effect_instance.gd new file mode 100644 index 0000000..e2ced1c --- /dev/null +++ b/tcg/card/support_card_effect_instance.gd @@ -0,0 +1,5 @@ +extends Resource +class_name SupportCardEffectInstance + +@export var magnitude: int +@export var effect: SupportCardEffect diff --git a/tcg/match/action/action.gd b/tcg/match/action/action.gd new file mode 100644 index 0000000..a701b75 --- /dev/null +++ b/tcg/match/action/action.gd @@ -0,0 +1,2 @@ +extends Resource +class_name Action diff --git a/tcg/match/action/action_play_card.gd b/tcg/match/action/action_play_card.gd new file mode 100644 index 0000000..5c74d64 --- /dev/null +++ b/tcg/match/action/action_play_card.gd @@ -0,0 +1,7 @@ +extends Action +class_name ActionPlayCard + +@export var card: Card + +func _init(card: Card) -> void: + self.card = card diff --git a/tcg/match/action/action_rps_move.gd b/tcg/match/action/action_rps_move.gd new file mode 100644 index 0000000..dd5d04b --- /dev/null +++ b/tcg/match/action/action_rps_move.gd @@ -0,0 +1,7 @@ +extends Action +class_name ActionRPSMove + +var move: String # rock | paper | scissors + +func _init(move: String) -> void: + self.move = move diff --git a/tcg/match/action/action_skip_card.gd b/tcg/match/action/action_skip_card.gd new file mode 100644 index 0000000..a0fdf46 --- /dev/null +++ b/tcg/match/action/action_skip_card.gd @@ -0,0 +1,2 @@ +extends Action +class_name ActionSkipCard diff --git a/tcg/match/event/event.gd b/tcg/match/event/event.gd new file mode 100644 index 0000000..709aa85 --- /dev/null +++ b/tcg/match/event/event.gd @@ -0,0 +1,2 @@ +extends Resource +class_name Event diff --git a/tcg/match/event/event_damage_dealt.gd b/tcg/match/event/event_damage_dealt.gd new file mode 100644 index 0000000..bc342c7 --- /dev/null +++ b/tcg/match/event/event_damage_dealt.gd @@ -0,0 +1,9 @@ +extends Event +class_name EventDamageDealt + +var target_player_id: int +var amount: int + +func _init(target_player_id: int, amount: int) -> void: + self.target_player_id = target_player_id + self.amount = amount diff --git a/tcg/match/event/event_draw_card.gd b/tcg/match/event/event_draw_card.gd new file mode 100644 index 0000000..3e706d6 --- /dev/null +++ b/tcg/match/event/event_draw_card.gd @@ -0,0 +1,9 @@ +extends Event +class_name EventCardDrawn + +var player_id: int +var card: Card + +func _init(player_id: int, card: Card) -> void: + self.player_id = player_id + self.card = card diff --git a/tcg/match/event/event_game_ended.gd b/tcg/match/event/event_game_ended.gd new file mode 100644 index 0000000..f9db6cc --- /dev/null +++ b/tcg/match/event/event_game_ended.gd @@ -0,0 +1,7 @@ +extends Event +class_name EventGameEnded + +var winner_player_id: int + +func _init(winner_player_id: int) -> void: + self.winner_player_id = winner_player_id diff --git a/tcg/match/event/event_monster_died.gd b/tcg/match/event/event_monster_died.gd new file mode 100644 index 0000000..4a3ec4b --- /dev/null +++ b/tcg/match/event/event_monster_died.gd @@ -0,0 +1,7 @@ +extends Event +class_name EventMonsterDied + +var player_id: int + +func _init(player_id: int) -> void: + self.player_id = player_id diff --git a/tcg/match/event/event_monster_summoned.gd b/tcg/match/event/event_monster_summoned.gd new file mode 100644 index 0000000..fe0aa32 --- /dev/null +++ b/tcg/match/event/event_monster_summoned.gd @@ -0,0 +1,7 @@ +extends Event +class_name EventMonsterSummoned + +var monster: MonsterCard + +func _init(monster: MonsterCard) -> void: + self.monster = monster diff --git a/tcg/match/event/event_support_effect_applied.gd b/tcg/match/event/event_support_effect_applied.gd new file mode 100644 index 0000000..a5c496d --- /dev/null +++ b/tcg/match/event/event_support_effect_applied.gd @@ -0,0 +1,9 @@ +extends Event +class_name EventSupportEffectApplied + +var player_id: int +var effect_instance: SupportCardEffectInstance + +func _init(player_id: int, effect_instance: SupportCardEffectInstance) -> void: + self.player_id = player_id + self.effect_instance = effect_instance diff --git a/tcg/match/match.gd b/tcg/match/match.gd new file mode 100644 index 0000000..64ec037 --- /dev/null +++ b/tcg/match/match.gd @@ -0,0 +1,26 @@ +extends Node + +enum Phase { + PREGAME = 0, + SUMMON = 1, + SUPPORT_1 = 2, + RPS = 3, + SUPPORT_2 = 4, + END +} + +func phase_to_str(phase: Phase): + match phase: + Phase.PREGAME: + return "Pregame" + Phase.SUMMON: + return "Summon" + Phase.SUPPORT_1: + return "Support 1" + Phase.RPS: + return "RPS" + Phase.SUPPORT_2: + return "Support 2" + Phase.END: + return "End" + diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd new file mode 100644 index 0000000..9a25959 --- /dev/null +++ b/tcg/match/match_manager.gd @@ -0,0 +1,212 @@ +extends Node +class_name MatchManager + +signal match_begun +signal state_transitioned(transition: PhaseTransition) + +const PLAYER_1_ID: int = 0 +const PLAYER_2_ID: int = 1 + +var rps_wins = { + "rock": "scissors", + "scissors": "paper", + "paper": "rock" +} + +var players: Dictionary +var player_1: MatchPlayer: + get: + return players[actual_p1_id] as MatchPlayer +var player_2: MatchPlayer: + get: + return players[actual_p2_id] as MatchPlayer +var phase: Match.Phase = Match.Phase.PREGAME + +var actual_p1_id: int +var actual_p2_id: int + +func _ready() -> void: + cleanup() + +func init(decks: Dictionary, actual_p1_id: int, actual_p2_id: int): + self.actual_p1_id = actual_p1_id + self.actual_p2_id = actual_p2_id + + cleanup() + for player_id in [PLAYER_1_ID, PLAYER_2_ID]: + var deck_shuffled = decks[player_id].duplicate() as Array[Card] + deck_shuffled.shuffle() + var first_monster = deck_shuffled.filter(func(card): return card is MonsterCard)[0] + var first_monster_idx = deck_shuffled.find(first_monster) + deck_shuffled.pop_at(first_monster_idx) + deck_shuffled.push_back(first_monster) + + players[player_id] = MatchPlayer.new(player_id, deck_shuffled) + + +func cleanup(): + for player_id in [PLAYER_1_ID, PLAYER_2_ID]: + var existing = players.get(player_id) + if existing: + existing.free() + phase = Match.Phase.PREGAME + +func resolve(action_by_player_id: Dictionary) -> PhaseTransition: + var initial_phase = phase + var events = [] as Array[Event] + var player_1_action = action_by_player_id.get(actual_p1_id) as Action + var player_2_action = action_by_player_id.get(actual_p2_id) as Action + match phase: + Match.Phase.PREGAME: + var CARDS_TO_DRAW: int = 3 + for player: MatchPlayer in [player_1, player_2]: + var n_cards_to_draw = min(player.deck.size(), CARDS_TO_DRAW) + var drawn_cards = range(n_cards_to_draw).map(func(_i): return player.deck.pop_back()) as Array[Card] + for card in drawn_cards: + player.hand.push_back(card) + var drawn_card_events = drawn_cards.map(func(card): return EventCardDrawn.new(player.id, card)) + events.append_array( + drawn_card_events + ) + phase = Match.Phase.SUMMON + Match.Phase.SUMMON: + + for player_id in action_by_player_id.keys(): + var action = action_by_player_id[player_id] + if action is ActionPlayCard: + var card = action.card + if card is MonsterCard: + players[player_id].monster = _monster_from_card(card) + players[player_id].hand = players[player_id].hand.filter(func(card_in_hand): return card.id != card_in_hand.id) + events.append(EventMonsterSummoned.new(card)) + players[player_id].energy = players[player_id].energy - card.energy_cost + if players.values().all(func(player: MatchPlayer): return player.monster): + phase = Match.Phase.SUPPORT_1 + Match.Phase.SUPPORT_1: + var support_cards = [] + if player_1_action is ActionPlayCard: + support_cards.append({ + "player": player_1, + "card": player_1_action.card + }) + player_1.hand.erase(player_1_action.card) + if player_2_action is ActionPlayCard: + support_cards.append({ + "player": player_2, + "card": player_2_action.card + }) + player_2.hand.erase(player_2_action.card) + for played_card in support_cards: + var player: MatchPlayer = played_card.player + var card: SupportCard = played_card.card + if card is ImplementedSupportCard and card.scope != 'instant': + player.active_support_cards.append(card) + var executed_instant_effects_events = _execute_support_card_instant_effects(player, card) + events.append_array(executed_instant_effects_events) + phase = Match.Phase.RPS + Match.Phase.RPS: + var damage_pairs = [] + var tie = player_1_action.move == player_2_action.move + var player_1_win = rps_wins[player_1_action.move] == player_2_action.move + var player_2_win = rps_wins[player_2_action.move] == player_1_action.move + if tie or player_1_win: + damage_pairs.append({"from": player_1, "to": player_2}) + if tie or player_2_win: + damage_pairs.append({"from": player_2, "to": player_1}) + for pair in damage_pairs: + var computed_damage = pair.from.monster.card.damage[action_by_player_id[pair.from.id].move] + if _player_has_active_support_card(pair.from, "all_out_attack"): + var rps = [pair.from.monster.card.rock, pair.from.monster.card.paper, pair.from.monster.card.scissors] + computed_damage = rps.reduce(func (a, b): return a + b, 0) + pair.from.monster.health_delta -= rps.min() + if _player_has_active_support_card(pair.from, "sword_mastery"): + computed_damage += 20 + if _player_has_active_support_card(pair.from, "lifesteal"): + pair.from.monster.health_delta += computed_damage + pair.to.monster.health_delta -= computed_damage + + phase = Match.Phase.SUPPORT_2 + Match.Phase.SUPPORT_2: + var support_cards = [] + if player_1_action is ActionPlayCard: + support_cards.append({ + "player": player_1, + "card": player_1_action.card + }) + player_1.hand.erase(player_1_action.card) + if player_2_action is ActionPlayCard: + support_cards.append({ + "player": player_2, + "card": player_2_action.card + }) + player_2.hand.erase(player_2_action.card) + for played_card in support_cards: + var player: MatchPlayer = played_card.player + var card: SupportCard = played_card.card + if card is ImplementedSupportCard and card.scope != 'instant': + player.active_support_cards.append(card) + events.append_array(_execute_support_card_instant_effects(player, card)) + + for player: MatchPlayer in players.values(): + if _player_has_active_support_card(player, "absorb") and player.monster.health_delta < 0: + player.monster.health_delta = -player.monster.health_delta + var monster_final_health = player.monster.health + player.monster.health_delta + if _player_has_active_support_card(player, "invisibility"): + monster_final_health = player.monster.health + if _player_has_active_support_card(player, "insurance"): + monster_final_health = max(10, monster_final_health) + if monster_final_health <= 0: + player.monster = null + var card_expires_with_monster = func(card): return card is ImplementedSupportCard and card.scope == 'monster' + player.active_support_cards = player.active_support_cards.filter(func (card): return not card_expires_with_monster.call(card)) + events.append(EventMonsterDied.new(player.id)) + else: + player.monster.health = monster_final_health + player.monster.health_delta = 0 + var drawn_card = player.deck.pop_back() + if drawn_card: + player.hand.append(drawn_card) + events.append(EventCardDrawn.new(player.id, drawn_card)) + + var card_expires_this_turn = func(card): return card is ImplementedSupportCard and card.scope == 'turn' + player.active_support_cards = player.active_support_cards.filter(func (card): return not card_expires_this_turn.call(card)) + + var players_without_monster = players.values().filter(func(player): return player.monster == null) + var players_without_monster_ids = players_without_monster.map(func (it): return it.id) + if players_without_monster.size() == 0: + phase = Match.Phase.SUPPORT_1 + elif players_without_monster.all( + func(player): return player.hand.any(func(it): return it is MonsterCard and it.energy_cost <= player.energy) + ): + phase = Match.Phase.SUMMON + else: + var player_1_lost = players_without_monster_ids.has(player_1.id) + var player_2_lost = players_without_monster_ids.has(player_2.id) + var winner_id = -1 if player_1_lost and player_2_lost else player_1.id if player_2_lost else player_2.id + phase = Match.Phase.END + events.append(EventGameEnded.new(winner_id)) + _: + pass + var transition = PhaseTransition.new(events, initial_phase, phase) + state_transitioned.emit(transition) + return transition + +func _monster_from_card(card: MonsterCard) -> MatchMonster: + return MatchMonster.new(card, card.base_health, 0) + +func _execute_support_card_instant_effects(player: MatchPlayer, card: SupportCard) -> Array[Event]: + var events: Array[Event] + if card is ImplementedSupportCard: + match card.id: + "potion": + player.monster.health_delta += 20 + "energy_booster": + player.energy += 1 + # events.append(Event) + return events + +func _player_has_active_support_card(player: MatchPlayer, card_id: String) -> bool: + return player.active_support_cards.any(func (card): return card.id == card_id) + +func _player_opponent(player: MatchPlayer) -> MatchPlayer: + return player_2 if player.id == PLAYER_1_ID else player_1 diff --git a/tcg/match/match_manager.tscn b/tcg/match/match_manager.tscn new file mode 100644 index 0000000..b88655b --- /dev/null +++ b/tcg/match/match_manager.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://cikstg43mudkn"] + +[ext_resource type="Script" path="res://tcg/match/match_manager.gd" id="1_tkhvw"] + +[node name="MatchManager" type="Node"] +script = ExtResource("1_tkhvw") diff --git a/tcg/match/match_monster.gd b/tcg/match/match_monster.gd new file mode 100644 index 0000000..f35e889 --- /dev/null +++ b/tcg/match/match_monster.gd @@ -0,0 +1,11 @@ +extends RefCounted +class_name MatchMonster + +var card: MonsterCard +var health: int +var health_delta: int + +func _init(card: MonsterCard, health: int, health_delta: int) -> void: + self.card = card + self.health = health + self.health_delta = health_delta diff --git a/tcg/match/match_monster.tscn b/tcg/match/match_monster.tscn new file mode 100644 index 0000000..1f7131e --- /dev/null +++ b/tcg/match/match_monster.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://d3dm1bnooaxmu"] + +[ext_resource type="Script" path="res://tcg/match/match_monster.gd" id="1_o6dlj"] + +[node name="Monster" type="Node"] +script = ExtResource("1_o6dlj") diff --git a/tcg/match/match_player.gd b/tcg/match/match_player.gd new file mode 100644 index 0000000..5eaf6ce --- /dev/null +++ b/tcg/match/match_player.gd @@ -0,0 +1,13 @@ +extends Object +class_name MatchPlayer + +var id: int +var hand: Array[Card] = [] +var deck: Array[Card] +var energy: int = 5 +var monster: MatchMonster = null +var active_support_cards: Array[SupportCard] = [] + +func _init(id: int, deck: Array[Card]) -> void: + self.id = id + self.deck = deck diff --git a/tcg/match/match_player.tscn b/tcg/match/match_player.tscn new file mode 100644 index 0000000..0b909e3 --- /dev/null +++ b/tcg/match/match_player.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://bwkfogonbhq6r"] + +[ext_resource type="Script" path="res://tcg/match/match_player.gd" id="1_pdj3n"] + +[node name="MatchPlayer" type="Node"] +script = ExtResource("1_pdj3n") diff --git a/tcg/match/phase_transition.gd b/tcg/match/phase_transition.gd new file mode 100644 index 0000000..0ca6e46 --- /dev/null +++ b/tcg/match/phase_transition.gd @@ -0,0 +1,11 @@ +extends RefCounted +class_name PhaseTransition + +var events: Array[Event] +var from: Match.Phase +var to: Match.Phase + +func _init(events: Array[Event], from: Match.Phase, to: Match.Phase) -> void: + self.events = events + self.from = from + self.to = to diff --git a/test_card.gd b/test_card.gd new file mode 100644 index 0000000..a0b8904 --- /dev/null +++ b/test_card.gd @@ -0,0 +1,7 @@ +extends Control + +@export var card: SupportCard + +func _ready() -> void: + $Green.card = card + $Red.card = card diff --git a/test_card.tscn b/test_card.tscn new file mode 100644 index 0000000..19770ef --- /dev/null +++ b/test_card.tscn @@ -0,0 +1,36 @@ +[gd_scene load_steps=6 format=3 uid="uid://lrb86kqjqt4v"] + +[ext_resource type="Script" path="res://test_card.gd" id="1_tqmas"] +[ext_resource type="PackedScene" uid="uid://dg5amjm1gqi06" path="res://ui/card_template/support_card_green.tscn" id="2_22pto"] +[ext_resource type="Resource" uid="uid://4eod3m0vc5a8" path="res://data/cards/support/potion.tres" id="2_tbbjy"] +[ext_resource type="PackedScene" uid="uid://cds50kwwhlgam" path="res://ui/card_template/support_card_red.tscn" id="3_7wd2e"] +[ext_resource type="PackedScene" uid="uid://bhrelvt51cbp2" path="res://ui/card_template/monster_card.tscn" id="5_8mwjl"] + +[node name="TestCard" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_tqmas") +card = ExtResource("2_tbbjy") + +[node name="Green" parent="." instance=ExtResource("2_22pto")] +offset_left = 225.0 +offset_top = 165.0 +offset_right = 445.0 +offset_bottom = 485.0 + +[node name="Red" parent="." instance=ExtResource("3_7wd2e")] +offset_left = 699.0 +offset_top = 168.0 +offset_right = 919.0 +offset_bottom = 488.0 + +[node name="MonsterCard" parent="." instance=ExtResource("5_8mwjl")] +layout_mode = 1 +offset_left = 461.0 +offset_top = 162.0 +offset_right = -471.0 +offset_bottom = -166.0 diff --git a/ui/card_template/card_base.gd b/ui/card_template/card_base.gd new file mode 100644 index 0000000..2e623c6 --- /dev/null +++ b/ui/card_template/card_base.gd @@ -0,0 +1,42 @@ +extends Control +class_name CardBase + +signal left_clicked +signal right_clicked +signal un_right_clicked +signal hovering(delta: float) + +@export var card_name_label: Label +@export var card_desc_label: Label +@export var icon_rect: TextureRect + +var _card: SupportCard +var card: SupportCard: + get: + return _card + set(value): + _update(value) + _card = value + +func _update(card: SupportCard): + card_name_label.text = card.name + card_desc_label.text = card.description + icon_rect.texture = card.icon + +func _process(delta): + var mouse_position = get_global_mouse_position() + var rect = get_global_rect() + if rect.has_point(mouse_position) and get_window().has_focus(): + hovering.emit(delta) + +func _input(event): + if event is InputEventMouseButton: + var mouse_position = get_global_mouse_position() + var rect = get_global_rect() + + if rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() and get_window().has_focus(): + left_clicked.emit() + elif rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed() and get_window().has_focus(): + right_clicked.emit() + elif event.button_index == MOUSE_BUTTON_RIGHT and !event.is_pressed(): + un_right_clicked.emit() diff --git a/ui/card_template/monster_card.gd b/ui/card_template/monster_card.gd new file mode 100644 index 0000000..1c154f6 --- /dev/null +++ b/ui/card_template/monster_card.gd @@ -0,0 +1,54 @@ +extends Control +class_name MonsterCardUI + +signal left_clicked +signal right_clicked +signal un_right_clicked +signal hovering(delta: float) + +@export var name_label : Label +@export var health_label : Label +@export var energy_pip_container :Container +@export var icon_texture_rect : TextureRect +@export var paper_damage : Label +@export var scissors_damage : Label +@export var rock_damage : Label + +func show_monster(monster: MatchMonster): + if !monster: + name_label.text = "" + health_label.text = "HP" + icon_texture_rect.texture = null + return + + name_label.text = monster.card.id + health_label.text = "HP %d/%d" % [monster.health, monster.card.base_health] + icon_texture_rect.texture = monster.card.icon + + paper_damage.text = str(monster.card.paper) + scissors_damage.text = str(monster.card.scissors) + rock_damage.text = str(monster.card.rock) + + var shown_stars = 0 + for child in energy_pip_container.get_children(): + var tr = child as TextureRect + tr.visible = shown_stars < monster.card.energy_cost + shown_stars += 1 + +func _process(delta): + var mouse_position = get_global_mouse_position() + var rect = get_global_rect() + if rect.has_point(mouse_position) and get_window().has_focus(): + hovering.emit(delta) + +func _input(event): + if event is InputEventMouseButton: + var mouse_position = get_global_mouse_position() + var rect = get_global_rect() + + if rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() and get_window().has_focus(): + left_clicked.emit() + elif rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed() and get_window().has_focus(): + right_clicked.emit() + elif event.button_index == MOUSE_BUTTON_RIGHT and !event.is_pressed(): + un_right_clicked.emit() diff --git a/ui/card_template/monster_card.tscn b/ui/card_template/monster_card.tscn new file mode 100644 index 0000000..d373404 --- /dev/null +++ b/ui/card_template/monster_card.tscn @@ -0,0 +1,321 @@ +[gd_scene load_steps=14 format=3 uid="uid://bhrelvt51cbp2"] + +[ext_resource type="Script" path="res://ui/card_template/monster_card.gd" id="1_xddej"] +[ext_resource type="Texture2D" uid="uid://l2nxxhh0pvh8" path="res://assets/card_base/Frame.png" id="2_lhxdu"] +[ext_resource type="Texture2D" uid="uid://crgrple0uik7x" path="res://assets/card_base/Stroke.png" id="4_kkcc6"] +[ext_resource type="Texture2D" uid="uid://c2qyx2k50v2vv" path="res://assets/card_base/Monster-InnerFill.png" id="5_a3gpd"] +[ext_resource type="Texture2D" uid="uid://b8accn4e2ojau" path="res://assets/monster/froggo 1.png" id="7_j2i0p"] +[ext_resource type="Texture2D" uid="uid://dft4fbgoecbp4" path="res://assets/card_base/Illustrated BG.png" id="7_qe8a1"] +[ext_resource type="Texture2D" uid="uid://cqttp0i3vph37" path="res://assets/card_base/Star.png" id="8_ophhb"] +[ext_resource type="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="9_6x2vq"] +[ext_resource type="Texture2D" uid="uid://cjmxetjq82rl2" path="res://assets/card_base/Pip.png" id="10_14hhn"] +[ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="11_oy107"] +[ext_resource type="Texture2D" uid="uid://bywa8qlwvcksd" path="res://assets/card_base/batu.png" id="12_a4kkh"] +[ext_resource type="Texture2D" uid="uid://ch04c20lkis6j" path="res://assets/card_base/gunting.png" id="13_ifoc6"] +[ext_resource type="Texture2D" uid="uid://b0pclmv0j0r12" path="res://assets/card_base/kertas.png" id="14_gm7k7"] + +[node name="MonsterCard" type="Control" node_paths=PackedStringArray("name_label", "health_label", "energy_pip_container", "icon_texture_rect", "paper_damage", "scissors_damage", "rock_damage")] +custom_minimum_size = Vector2(220, 320) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1700.0 +offset_bottom = -760.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(0.7, 0.7) +pivot_offset = Vector2(110, 160) +size_flags_vertical = 8 +script = ExtResource("1_xddej") +name_label = NodePath("MarginContainer/MonsterNameLabel") +health_label = NodePath("MarginContainer/HealthLabel") +energy_pip_container = NodePath("MarginContainer/EnergyStarsContainer") +icon_texture_rect = NodePath("MarginContainer/TextureRect2/IconTextureRect") +paper_damage = NodePath("MarginContainer/HBoxContainer/Rock2/PaperLabel") +scissors_damage = NodePath("MarginContainer/HBoxContainer/Rock3/ScissorsLabel") +rock_damage = NodePath("MarginContainer/HBoxContainer/Rock/RockLabel") + +[node name="Frame" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_lhxdu") +expand_mode = 1 + +[node name="MarginContainer" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 3.0 +offset_right = -5.0 +offset_bottom = -4.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="OuterStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_kkcc6") + +[node name="InnerFill" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 43.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_a3gpd") +expand_mode = 1 + +[node name="InnerStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 42.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_kkcc6") + +[node name="TextureRect2" type="TextureRect" parent="MarginContainer"] +layout_mode = 0 +offset_left = 9.0 +offset_top = 77.0 +offset_right = 199.0 +offset_bottom = 207.0 +pivot_offset = Vector2(95, 65) +texture = ExtResource("7_qe8a1") +expand_mode = 1 +stretch_mode = 5 + +[node name="IconTextureRect" type="TextureRect" parent="MarginContainer/TextureRect2"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("7_j2i0p") +expand_mode = 1 +stretch_mode = 5 + +[node name="EnergyStarsContainer" type="HBoxContainer" parent="MarginContainer"] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 100.0 +offset_top = 54.0 +offset_right = 197.0 +offset_bottom = 69.0 +alignment = 2 + +[node name="TextureRect" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_ophhb") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect2" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_ophhb") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect3" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_ophhb") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect4" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_ophhb") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect5" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_ophhb") +expand_mode = 3 +stretch_mode = 5 + +[node name="HealthLabel" type="Label" parent="MarginContainer"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 14.0 +offset_top = 44.0 +offset_right = -99.0 +offset_bottom = 80.0 +grow_horizontal = 2 +theme = ExtResource("9_6x2vq") +theme_override_font_sizes/font_size = 16 +text = "HP 80/100" +vertical_alignment = 1 + +[node name="MonsterNameLabel" type="Label" parent="MarginContainer"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 31.0 +offset_top = 11.0 +offset_right = 26.0 +offset_bottom = 47.0 +grow_horizontal = 2 +theme = ExtResource("9_6x2vq") +theme_override_font_sizes/font_size = 26 +text = "Cattogato" +vertical_alignment = 1 + +[node name="CardNumber" type="TextureRect" parent="MarginContainer"] +layout_mode = 0 +offset_left = 7.0 +offset_top = 17.0 +offset_right = 26.0 +offset_bottom = 36.0 +texture = ExtResource("10_14hhn") +expand_mode = 1 +stretch_mode = 5 + +[node name="Label" type="Label" parent="MarginContainer/CardNumber"] +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -9.5 +offset_top = -7.0 +offset_right = 9.5 +offset_bottom = 7.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("9_6x2vq") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("11_oy107") +theme_override_font_sizes/font_size = 6 +text = "#01" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -100.0 +offset_top = -102.143 +offset_right = 100.0 +offset_bottom = -7.1427 +grow_horizontal = 2 +grow_vertical = 0 +alignment = 1 + +[node name="Rock" type="Control" parent="MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="RockLabel" type="Label" parent="MarginContainer/HBoxContainer/Rock"] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -32.0 +offset_right = 32.0 +offset_bottom = 26.0 +grow_horizontal = 2 +theme = ExtResource("9_6x2vq") +theme_override_font_sizes/font_size = 24 +text = "100" +horizontal_alignment = 1 +vertical_alignment = 2 + +[node name="Rock" type="TextureRect" parent="MarginContainer/HBoxContainer/Rock"] +layout_mode = 2 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 30.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("12_a4kkh") +expand_mode = 1 +stretch_mode = 5 + +[node name="Rock2" type="Control" parent="MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PaperLabel" type="Label" parent="MarginContainer/HBoxContainer/Rock2"] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -32.0 +offset_right = 32.0 +offset_bottom = 26.0 +grow_horizontal = 2 +theme = ExtResource("9_6x2vq") +theme_override_font_sizes/font_size = 24 +text = "10" +horizontal_alignment = 1 +vertical_alignment = 2 + +[node name="Paper" type="TextureRect" parent="MarginContainer/HBoxContainer/Rock2"] +layout_mode = 2 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 30.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("14_gm7k7") +expand_mode = 1 +stretch_mode = 5 + +[node name="Rock3" type="Control" parent="MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="ScissorsLabel" type="Label" parent="MarginContainer/HBoxContainer/Rock3"] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -32.0 +offset_right = 32.0 +offset_bottom = 26.0 +grow_horizontal = 2 +theme = ExtResource("9_6x2vq") +theme_override_font_sizes/font_size = 24 +text = "10" +horizontal_alignment = 1 +vertical_alignment = 2 + +[node name="Scissors" type="TextureRect" parent="MarginContainer/HBoxContainer/Rock3"] +layout_mode = 2 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 30.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("13_ifoc6") +expand_mode = 1 +stretch_mode = 5 diff --git a/ui/card_template/skip_card.tscn b/ui/card_template/skip_card.tscn new file mode 100644 index 0000000..f5ff411 --- /dev/null +++ b/ui/card_template/skip_card.tscn @@ -0,0 +1,274 @@ +[gd_scene load_steps=14 format=3 uid="uid://b60vuykleugjn"] + +[ext_resource type="Script" path="res://ui/card_template/card_base.gd" id="1_ci66m"] +[ext_resource type="Texture2D" uid="uid://l2nxxhh0pvh8" path="res://assets/card_base/Frame.png" id="3_lbsr3"] +[ext_resource type="Texture2D" uid="uid://crgrple0uik7x" path="res://assets/card_base/Stroke.png" id="4_avv1r"] +[ext_resource type="Texture2D" uid="uid://c2qyx2k50v2vv" path="res://assets/card_base/Monster-InnerFill.png" id="5_3yv36"] +[ext_resource type="Texture2D" uid="uid://dft4fbgoecbp4" path="res://assets/card_base/Illustrated BG.png" id="6_cfl8c"] +[ext_resource type="Texture2D" uid="uid://b8accn4e2ojau" path="res://assets/monster/froggo 1.png" id="7_5xgn0"] +[ext_resource type="Texture2D" uid="uid://cqttp0i3vph37" path="res://assets/card_base/Star.png" id="8_gh78y"] +[ext_resource type="Theme" path="res://cards.tres" id="9_gwg6h"] +[ext_resource type="Texture2D" uid="uid://cjmxetjq82rl2" path="res://assets/card_base/Pip.png" id="10_kd76d"] +[ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="11_ofcpo"] +[ext_resource type="Texture2D" uid="uid://b0pclmv0j0r12" path="res://assets/card_base/kertas.png" id="12_dql2x"] +[ext_resource type="Texture2D" uid="uid://ch04c20lkis6j" path="res://assets/card_base/gunting.png" id="13_0vsuw"] +[ext_resource type="Texture2D" uid="uid://bywa8qlwvcksd" path="res://assets/card_base/batu.png" id="14_o8cdd"] + +[node name="SkipCard" type="Control"] +custom_minimum_size = Vector2(220, 320) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1700.0 +offset_bottom = -760.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(0.7, 0.7) +pivot_offset = Vector2(110, 160) +size_flags_vertical = 8 +script = ExtResource("1_ci66m") + +[node name="Frame" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_lbsr3") +expand_mode = 1 + +[node name="MarginContainer" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 3.0 +offset_right = -5.0 +offset_bottom = -4.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="OuterStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_avv1r") + +[node name="InnerFill" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 43.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_3yv36") +expand_mode = 1 + +[node name="InnerStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 42.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_avv1r") + +[node name="TextureRect2" type="TextureRect" parent="MarginContainer"] +layout_mode = 0 +offset_left = 9.0 +offset_top = 77.0 +offset_right = 199.0 +offset_bottom = 207.0 +pivot_offset = Vector2(95, 65) +texture = ExtResource("6_cfl8c") +expand_mode = 1 +stretch_mode = 5 + +[node name="IconTextureRect" type="TextureRect" parent="MarginContainer/TextureRect2"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("7_5xgn0") +expand_mode = 1 +stretch_mode = 5 + +[node name="EnergyStarsContainer" type="HBoxContainer" parent="MarginContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 0 +offset_left = 141.0 +offset_top = 55.0 +offset_right = 200.0 +offset_bottom = 70.0 + +[node name="TextureRect3" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_gh78y") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect2" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_gh78y") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_gh78y") +expand_mode = 3 +stretch_mode = 5 + +[node name="HealthLabel" type="Label" parent="MarginContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 14.0 +offset_top = 44.0 +offset_right = -99.0 +offset_bottom = 80.0 +grow_horizontal = 2 +theme = ExtResource("9_gwg6h") +theme_override_font_sizes/font_size = 16 +text = "HP 80" +vertical_alignment = 1 + +[node name="MonsterNameLabel" type="Label" parent="MarginContainer"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 63.1429 +offset_top = 118.429 +offset_right = 58.1429 +offset_bottom = 154.429 +grow_horizontal = 2 +theme = ExtResource("9_gwg6h") +theme_override_font_sizes/font_size = 26 +text = "SKIP" +vertical_alignment = 1 + +[node name="CardNumber" type="TextureRect" parent="MarginContainer"] +visible = false +layout_mode = 0 +offset_left = 7.0 +offset_top = 17.0 +offset_right = 26.0 +offset_bottom = 36.0 +texture = ExtResource("10_kd76d") +expand_mode = 1 +stretch_mode = 5 + +[node name="Label" type="Label" parent="MarginContainer/CardNumber"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -9.5 +offset_top = -7.0 +offset_right = 9.5 +offset_bottom = 7.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("9_gwg6h") +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("11_ofcpo") +theme_override_font_sizes/font_size = 6 +text = "#01" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Paper" type="TextureRect" parent="MarginContainer"] +visible = false +layout_mode = 0 +offset_left = 109.0 +offset_top = 183.0 +offset_right = 222.0 +offset_bottom = 356.0 +texture = ExtResource("12_dql2x") +expand_mode = 1 +stretch_mode = 5 + +[node name="PaperDamage" type="Label" parent="MarginContainer/Paper"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 48.0 +offset_top = 32.0 +offset_right = -32.0 +offset_bottom = 73.0 +grow_horizontal = 2 +theme = ExtResource("9_gwg6h") +theme_override_font_sizes/font_size = 20 +text = "10" +vertical_alignment = 1 + +[node name="Scissors" type="TextureRect" parent="MarginContainer"] +visible = false +layout_mode = 0 +offset_left = 43.0 +offset_top = 182.0 +offset_right = 156.0 +offset_bottom = 355.0 +texture = ExtResource("13_0vsuw") +expand_mode = 1 +stretch_mode = 5 + +[node name="ScissorsDamage" type="Label" parent="MarginContainer/Scissors"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 48.0 +offset_top = 32.0 +offset_right = -32.0 +offset_bottom = 73.0 +grow_horizontal = 2 +theme = ExtResource("9_gwg6h") +theme_override_font_sizes/font_size = 20 +text = "10" +vertical_alignment = 1 + +[node name="Rock" type="TextureRect" parent="MarginContainer"] +visible = false +layout_mode = 0 +offset_left = -23.0 +offset_top = 181.0 +offset_right = 90.0 +offset_bottom = 354.0 +texture = ExtResource("14_o8cdd") +expand_mode = 1 +stretch_mode = 5 + +[node name="RockDamage" type="Label" parent="MarginContainer/Rock"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 48.0 +offset_top = 32.0 +offset_right = -32.0 +offset_bottom = 73.0 +grow_horizontal = 2 +theme = ExtResource("9_gwg6h") +theme_override_font_sizes/font_size = 20 +text = "10" +vertical_alignment = 1 diff --git a/ui/card_template/support_card_green.tscn b/ui/card_template/support_card_green.tscn new file mode 100644 index 0000000..39569c0 --- /dev/null +++ b/ui/card_template/support_card_green.tscn @@ -0,0 +1,172 @@ +[gd_scene load_steps=11 format=3 uid="uid://dg5amjm1gqi06"] + +[ext_resource type="Texture2D" uid="uid://l2nxxhh0pvh8" path="res://assets/card_base/Frame.png" id="1_4ivbl"] +[ext_resource type="Script" path="res://ui/card_template/card_base.gd" id="1_rpopv"] +[ext_resource type="Texture2D" uid="uid://liitr32ap646" path="res://assets/card_base/G-OuterFill.png" id="2_c6lcl"] +[ext_resource type="Texture2D" uid="uid://crgrple0uik7x" path="res://assets/card_base/Stroke.png" id="3_qajq3"] +[ext_resource type="Texture2D" uid="uid://blejyda8mendg" path="res://assets/card_base/InnerFill.png" id="4_pgomu"] +[ext_resource type="Texture2D" uid="uid://by7ws88pn4tvb" path="res://assets/card_base/Separator.png" id="5_501uu"] +[ext_resource type="Texture2D" uid="uid://bwo6dfe1kpxhe" path="res://assets/support/insurance.png" id="6_bpwac"] +[ext_resource type="Texture2D" uid="uid://0gxplli5krq2" path="res://assets/card_base/Pill.png" id="6_ce7hm"] +[ext_resource type="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="7_va1d7"] +[ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="10_c2ugn"] + +[node name="CardBase" type="Control" node_paths=PackedStringArray("card_name_label", "card_desc_label", "icon_rect")] +custom_minimum_size = Vector2(220, 320) +layout_mode = 3 +anchors_preset = 0 +offset_right = 220.0 +offset_bottom = 320.0 +scale = Vector2(0.7, 0.7) +pivot_offset = Vector2(110, 160) +size_flags_vertical = 8 +script = ExtResource("1_rpopv") +card_name_label = NodePath("MarginContainer/Label") +card_desc_label = NodePath("MarginContainer/DescriptionLabel") +icon_rect = NodePath("MarginContainer/Icon") + +[node name="Frame" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_4ivbl") +expand_mode = 1 + +[node name="MarginContainer" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 3.0 +offset_right = -5.0 +offset_bottom = -4.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_c6lcl") +expand_mode = 1 + +[node name="OuterStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_qajq3") + +[node name="TextureRect2" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 62.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_pgomu") +expand_mode = 1 + +[node name="Icon" type="TextureRect" parent="MarginContainer"] +layout_mode = 0 +offset_left = 2.0 +offset_top = 63.0 +offset_right = 209.0 +offset_bottom = 203.0 +pivot_offset = Vector2(304.286, 120.143) +texture = ExtResource("6_bpwac") +expand_mode = 1 +stretch_mode = 6 + +[node name="InnerStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 62.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_qajq3") + +[node name="TextureRect3" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.01 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -0.0100002 +offset_top = -112.0 +offset_right = -1.0 +offset_bottom = -110.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_501uu") +expand_mode = 1 +metadata/_edit_use_anchors_ = true + +[node name="TextureRect4" type="NinePatchRect" parent="MarginContainer"] +modulate = Color(0.356863, 0.54902, 0.243137, 1) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 4.5 +offset_top = 30.5 +offset_right = 90.5 +offset_bottom = 60.5 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("6_ce7hm") + +[node name="Label" type="Label" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 2.0 +offset_top = 16.0 +offset_right = -3.0 +offset_bottom = 50.0 +grow_horizontal = 2 +theme = ExtResource("7_va1d7") +theme_override_colors/font_color = Color(0.576471, 0.788235, 0.819608, 1) +theme_override_font_sizes/font_size = 24 +text = "green card" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Label2" type="Label" parent="MarginContainer"] +layout_mode = 0 +offset_left = 118.0 +offset_top = 190.0 +offset_right = 188.0 +offset_bottom = 213.0 +theme = ExtResource("7_va1d7") +text = "Green card" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="DescriptionLabel" type="Label" parent="MarginContainer"] +layout_mode = 0 +offset_left = 11.0 +offset_top = 224.0 +offset_right = 200.0 +offset_bottom = 302.0 +theme = ExtResource("7_va1d7") +theme_override_fonts/font = ExtResource("10_c2ugn") +theme_override_font_sizes/font_size = 12 +text = "If your monster is supposed to be dead, keep it alive at 10 HP" +horizontal_alignment = 1 +autowrap_mode = 3 diff --git a/ui/card_template/support_card_red.tscn b/ui/card_template/support_card_red.tscn new file mode 100644 index 0000000..60c9770 --- /dev/null +++ b/ui/card_template/support_card_red.tscn @@ -0,0 +1,171 @@ +[gd_scene load_steps=11 format=3 uid="uid://cds50kwwhlgam"] + +[ext_resource type="Script" path="res://ui/card_template/card_base.gd" id="1_d22a5"] +[ext_resource type="Texture2D" uid="uid://l2nxxhh0pvh8" path="res://assets/card_base/Frame.png" id="1_x5ex0"] +[ext_resource type="Texture2D" uid="uid://ip7xjs20pd3d" path="res://assets/card_base/R-OuterFill.png" id="2_xjg8y"] +[ext_resource type="Texture2D" uid="uid://crgrple0uik7x" path="res://assets/card_base/Stroke.png" id="3_q71h0"] +[ext_resource type="Texture2D" uid="uid://blejyda8mendg" path="res://assets/card_base/InnerFill.png" id="4_2fw8n"] +[ext_resource type="Texture2D" uid="uid://by7ws88pn4tvb" path="res://assets/card_base/Separator.png" id="5_n3v14"] +[ext_resource type="Texture2D" uid="uid://0gxplli5krq2" path="res://assets/card_base/Pill.png" id="6_wrd2a"] +[ext_resource type="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="7_fp6ys"] +[ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="9_vilw6"] +[ext_resource type="Texture2D" uid="uid://rh3aswb0p7ri" path="res://assets/energy.png" id="10_2t0ey"] + +[node name="CardBase" type="Control" node_paths=PackedStringArray("card_name_label", "card_desc_label", "icon_rect")] +custom_minimum_size = Vector2(220, 320) +layout_mode = 3 +anchors_preset = 0 +offset_right = 220.0 +offset_bottom = 320.0 +scale = Vector2(0.7, 0.7) +pivot_offset = Vector2(110, 160) +size_flags_vertical = 8 +script = ExtResource("1_d22a5") +card_name_label = NodePath("MarginContainer/Title") +card_desc_label = NodePath("MarginContainer/DescriptionLabel") +icon_rect = NodePath("MarginContainer/Icon") + +[node name="Frame" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_x5ex0") +expand_mode = 1 + +[node name="MarginContainer" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 3.0 +offset_right = -5.0 +offset_bottom = -4.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_xjg8y") +expand_mode = 1 + +[node name="OuterStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_q71h0") + +[node name="TextureRect2" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 62.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_2fw8n") +expand_mode = 1 + +[node name="InnerStroke" type="NinePatchRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 62.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_q71h0") + +[node name="TextureRect3" type="TextureRect" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.01 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -0.0100002 +offset_top = -112.0 +offset_right = -1.0 +offset_bottom = -110.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_n3v14") +expand_mode = 1 +metadata/_edit_use_anchors_ = true + +[node name="TextureRect4" type="NinePatchRect" parent="MarginContainer"] +modulate = Color(0.54902, 0.243137, 0.243137, 1) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 4.5 +offset_top = 30.5 +offset_right = 90.5 +offset_bottom = 60.5 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("6_wrd2a") + +[node name="Title" type="Label" parent="MarginContainer"] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 2.0 +offset_top = 16.0 +offset_right = -3.0 +offset_bottom = 50.0 +grow_horizontal = 2 +theme = ExtResource("7_fp6ys") +theme_override_colors/font_color = Color(0.819608, 0.576471, 0.576471, 1) +theme_override_font_sizes/font_size = 24 +text = "red card" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="PillLabel" type="Label" parent="MarginContainer"] +layout_mode = 0 +offset_left = 118.0 +offset_top = 190.0 +offset_right = 188.0 +offset_bottom = 213.0 +theme = ExtResource("7_fp6ys") +text = "Red card" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="DescriptionLabel" type="Label" parent="MarginContainer"] +layout_mode = 0 +offset_left = 11.0 +offset_top = 224.0 +offset_right = 200.0 +offset_bottom = 302.0 +theme = ExtResource("7_fp6ys") +theme_override_fonts/font = ExtResource("9_vilw6") +theme_override_font_sizes/font_size = 12 +text = "If your monster is supposed to be dead, keep it alive at 10 HP" +horizontal_alignment = 1 +autowrap_mode = 3 + +[node name="Icon" type="TextureRect" parent="MarginContainer"] +layout_mode = 0 +offset_left = 30.0 +offset_top = 77.0 +offset_right = 173.0 +offset_bottom = 182.0 +texture = ExtResource("10_2t0ey") +expand_mode = 1 +stretch_mode = 6