Compare commits

..

31 commits

Author SHA1 Message Date
Kenshia
3e8dc34646 Merge branch 'main' of https://forge.darkwagonstudio.com/dark-wagon-studio/tcg 2025-01-26 11:51:59 +07:00
Kenshia
83df3047f7 feat: card zoom 2025-01-26 11:49:25 +07:00
72a1418914 fix: all out attack scope
fix: HP placeholder
2025-01-26 11:36:53 +07:00
e7c0782099 Merge pull request 'feat: win-lose-tie at game end' (#4) from win-lose-tie into main
Reviewed-on: https://forge.darkwagonstudio.com/dark-wagon-studio/tcg/pulls/4
2025-01-26 11:33:25 +07:00
4d041be88d Merge remote-tracking branch 'origin/main' into win-lose-tie 2025-01-26 11:32:48 +07:00
728d848e5b feat: damage incoming -> HP +- 2025-01-26 11:32:17 +07:00
kennetha123
cd9f7c7679 Merge branch 'main' of https://forge.darkwagonstudio.com/dark-wagon-studio/tcg 2025-01-26 11:30:50 +07:00
kennetha123
7b6be434a8 feat: add card images 2025-01-26 11:30:35 +07:00
abd2feaab8 feat: win-lose-tie at game end 2025-01-26 11:26:09 +07:00
Kenshia
41a72709df feat: card hover 2025-01-26 11:14:32 +07:00
bd9b9a35d8 Merge pull request 'feat: phase info on right hand side of the board' (#3) from visible-phase into main
Reviewed-on: https://forge.darkwagonstudio.com/dark-wagon-studio/tcg/pulls/3
2025-01-26 11:08:41 +07:00
7903af9463 Merge remote-tracking branch 'origin/main' into visible-phase 2025-01-26 11:08:09 +07:00
02ee129b42 merge: script changes 2025-01-26 11:07:08 +07:00
kennetha123
0d261242b3 feat: energy decrease 2025-01-26 11:01:55 +07:00
a0475c8588 feat: phase info on right hand side of the board 2025-01-26 10:59:39 +07:00
kennetha123
5395f971cb feat: rps button with texture 2025-01-26 10:36:55 +07:00
46e4ba0fbb feat: monster card 2025-01-26 09:48:01 +07:00
3220f4937f fix: grammar issue 2025-01-26 07:31:48 +07:00
kennetha123
64e79704bf fix: minor spelling mistakes 2025-01-26 07:15:58 +07:00
kennetha123
ca9c7b8e50 fix: minor spelling mistake 2025-01-26 06:31:06 +07:00
064559130c fix: add support card only if not instant 2025-01-26 05:05:45 +07:00
fc70d205b3 feat: implement support cards
- insurance
- absorb
- tanker
- lifesteal
- sword mastery
- invisibility
- potion
- all out attack
2025-01-26 05:00:37 +07:00
152ade51da Merge remote-tracking branch 'origin/sword_mastery' into implement_support_cards 2025-01-26 04:07:50 +07:00
kennetha123
3f99175dfe Merge branch 'main' of https://forge.darkwagonstudio.com/dark-wagon-studio/tcg 2025-01-26 02:51:07 +07:00
kennetha123
3141066258 feat: implement all support card tres 2025-01-26 02:50:21 +07:00
6026a32429 feat: Sword Masteryyyy 2025-01-26 02:48:27 +07:00
3ac654af4f fix: remove placeholder cards 2025-01-26 02:32:21 +07:00
Kenshia
5af462e78d feat: new cards in game 2025-01-26 01:58:35 +07:00
Kenshia
2c4e9d90f3 feat: user always play bottom 2025-01-25 22:35:11 +07:00
kennetha123
bebb7b467b wip: monster card 2025-01-25 22:00:20 +07:00
172ce12e79 Merge pull request 'multiplayer_and_some_card_art' (#2) from multiplayer-and-card-art into main
Reviewed-on: https://forge.darkwagonstudio.com/dark-wagon-studio/tcg/pulls/2
2025-01-25 19:58:36 +07:00
115 changed files with 2843 additions and 267 deletions

BIN
assets/card_base/Illustrated BG.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/Monster-InnerFill.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/Pip.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/RPS Panel.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/Screenshot 2025-01-25 211435.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/Star.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/batu.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/gunting.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/illust bg 1.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/card_base/kertas.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/Goldfish 2.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/axolotl 3.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/capybara 1.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/cat 3.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/duck 1.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/froggo 1.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/jellyfish 2.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/penguing 2.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/rabbit 1.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/monster/whale 2.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/Invisibility.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/absorb.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/all out attack.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/energy booster.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/insurance.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/lifesteal.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/potion.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/reflection.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/sword mastery.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

BIN
assets/support/tanker.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -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

View file

@ -1,4 +1,4 @@
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://cj3vs5hq2mcbp"] [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"] [ext_resource type="FontFile" uid="uid://ncoq4i61plvt" path="res://assets/Bohemian Soul.otf" id="1_yowck"]

View file

@ -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")

View file

@ -1,11 +0,0 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://cs7q8i7bvohmj"]
[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_v65bb"]
[resource]
script = ExtResource("1_v65bb")
rock = 100
paper = 100
scissors = 100
energy_cost = 3
base_health = 170

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -1,11 +0,0 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://di76avwc0gn8e"]
[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_j4601"]
[resource]
script = ExtResource("1_j4601")
rock = 50
paper = 50
scissors = 50
energy_cost = 1
base_health = 120

View file

@ -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")

View file

@ -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")

View file

@ -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."

View file

@ -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."

View file

@ -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."

View file

@ -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."

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -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."

View file

@ -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."

View file

@ -1,9 +1,9 @@
[gd_resource type="Resource" script_class="SupportCard" load_steps=6 format=3 uid="uid://4eod3m0vc5a8"] [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="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="Resource" uid="uid://cvu0rtt5nggf" path="res://data/support_effects/heal.tres" id="2_k1cnl"]
[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="3_6r4k4"] [ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="3_at5nt"]
[ext_resource type="Texture2D" uid="uid://rh3aswb0p7ri" path="res://assets/energy.png" id="3_kyx3v"] [ext_resource type="Texture2D" uid="uid://48hblv72emyr" path="res://assets/support/potion.png" id="3_hk8kx"]
[sub_resource type="Resource" id="Resource_88lmk"] [sub_resource type="Resource" id="Resource_88lmk"]
script = ExtResource("1_ujm0o") script = ExtResource("1_ujm0o")
@ -11,10 +11,10 @@ magnitude = 30
effect = ExtResource("2_k1cnl") effect = ExtResource("2_k1cnl")
[resource] [resource]
script = ExtResource("3_6r4k4") script = ExtResource("3_at5nt")
scope = "turn"
type = "green" type = "green"
priority = 0
effects = Array[ExtResource("1_ujm0o")]([SubResource("Resource_88lmk")]) effects = Array[ExtResource("1_ujm0o")]([SubResource("Resource_88lmk")])
name = "Potion" name = "Potion"
description = "Heal 30 HP" description = "Heal 30 HP"
icon = ExtResource("3_kyx3v") icon = ExtResource("3_hk8kx")

View file

@ -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")

View file

@ -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."

View file

@ -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."

View file

@ -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."

View file

@ -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."

View file

@ -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")

View file

@ -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")

View file

@ -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")

View file

@ -8,31 +8,39 @@ signal opponent_played_rts(move: String)
@export var player_1_deck: Array[Card] @export var player_1_deck: Array[Card]
@export var player_2_deck: Array[Card] @export var player_2_deck: Array[Card]
@onready var match_manager = $MatchManager
@onready var match_manager: MatchManager = $MatchManager
@onready var own_side = $Own @onready var own_side = $Own
@onready var opponent_side = $Opponent @onready var opponent_side = $Opponent
@onready var start_game_btn = $StartGameButton @onready var start_game_btn = $StartGameButton
@onready var win_lose_tie_label: Label = $"Win-Lose-Tie"
var id_to_card: Dictionary = {} var id_to_card: Dictionary = {}
var player_action_queue: Dictionary var player_action_queue: Dictionary
var player_1_action: Action: var player_1_action: Action:
get: get:
return player_action_queue.get(MatchManager.PLAYER_1_ID) return player_action_queue.get(own_side.player_id)
set(value): set(value):
player_action_queue[MatchManager.PLAYER_1_ID] = value player_action_queue[own_side.player_id] = value
var player_2_action: Action: var player_2_action: Action:
get: get:
return player_action_queue.get(MatchManager.PLAYER_2_ID) return player_action_queue.get(opponent_side.player_id)
set(value): set(value):
player_action_queue[MatchManager.PLAYER_2_ID] = value player_action_queue[opponent_side.player_id] = value
var id var id
var signal_connected := false var signal_connected := false
func _ready() -> void:
_update_phase_info(Match.Phase.PREGAME)
func init(player_id: int) -> void: func init(player_id: int) -> void:
id = player_id 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() id_to_card.clear()
var cards = player_1_deck.duplicate() var cards = player_1_deck.duplicate()
@ -41,12 +49,13 @@ func init(player_id: int) -> void:
if card.id not in id_to_card: if card.id not in id_to_card:
id_to_card[card.id] = card id_to_card[card.id] = card
print(match_manager.phase)
match_manager.init({ match_manager.init({
MatchManager.PLAYER_1_ID: player_1_deck, MatchManager.PLAYER_1_ID: player_1_deck,
MatchManager.PLAYER_2_ID: player_2_deck MatchManager.PLAYER_2_ID: player_2_deck
}) }, own_side.player_id, opponent_side.player_id)
own_side.attach(match_manager, player_id == MatchManager.PLAYER_1_ID) own_side.attach(match_manager, true)
opponent_side.attach(match_manager, player_id == MatchManager.PLAYER_2_ID) opponent_side.attach(match_manager, false)
if !signal_connected: if !signal_connected:
match_manager.state_transitioned.connect(_on_match_manager_state_transitioned) match_manager.state_transitioned.connect(_on_match_manager_state_transitioned)
@ -56,6 +65,11 @@ var transition_history: Array[PhaseTransition] = []
func _on_match_manager_state_transitioned(transition: PhaseTransition): func _on_match_manager_state_transitioned(transition: PhaseTransition):
start_game_btn.visible = match_manager.phase == Match.Phase.PREGAME start_game_btn.visible = match_manager.phase == Match.Phase.PREGAME
transition_history.append(transition) 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)) print("Phase: ", Match.phase_to_str(transition.from), " -> ", Match.phase_to_str(transition.to))
func _on_start_game_button_button_up() -> void: func _on_start_game_button_button_up() -> void:
@ -65,19 +79,6 @@ func _on_start_game_button_button_up() -> void:
func rpc_start_game() -> void: func rpc_start_game() -> void:
match_manager.resolve({}) match_manager.resolve({})
func rpc_own_play_card(id: String) -> void:
if !id.is_empty():
var card = id_to_card[id]
player_1_action = ActionPlayCard.new(card)
else:
player_1_action = ActionSkipCard.new()
print(self.id, " rpc_own_play_card", player_1_action, player_2_action)
if player_2_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
func _on_own_play_card(card: Card) -> void: func _on_own_play_card(card: Card) -> void:
if card: if card:
player_1_action = ActionPlayCard.new(card) player_1_action = ActionPlayCard.new(card)
@ -105,29 +106,6 @@ func rpc_opponent_play_card(id: String) -> void:
match_manager.resolve(player_action_queue) match_manager.resolve(player_action_queue)
player_action_queue.clear() player_action_queue.clear()
func _on_opponent_play_card(card: Card) -> void:
if card:
player_2_action = ActionPlayCard.new(card)
opponent_played_card.emit(card)
else:
player_2_action = ActionSkipCard.new()
opponent_played_card.emit(null)
print(id, " _on_opponent_play_card", player_1_action, player_2_action)
if player_1_action:
match_manager.resolve(player_action_queue)
player_action_queue.clear()
func rpc_own_rps_move(move: String) -> void:
player_1_action = ActionRPSMove.new(move)
print(id, " rpc_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 _on_own_rps_move(move: String) -> void: func _on_own_rps_move(move: String) -> void:
player_1_action = ActionRPSMove.new(move) player_1_action = ActionRPSMove.new(move)
own_played_rts.emit(move) own_played_rts.emit(move)
@ -147,12 +125,11 @@ func rpc_opponent_rps_move(move: String) -> void:
match_manager.resolve(player_action_queue) match_manager.resolve(player_action_queue)
player_action_queue.clear() player_action_queue.clear()
func _on_opponent_rps_move(move: String) -> void: func _update_phase_info(phase: Match.Phase):
player_2_action = ActionRPSMove.new(move) var phaseHeaders: Container = get_node("%PhaseInfo/PhaseHeader")
opponent_played_rts.emit(move) for child: Label in phaseHeaders.get_children():
child.modulate = Color.DIM_GRAY
print(id, " rpc_opponent_rps_move", player_1_action, player_2_action, move) var target = phaseHeaders.get_node(Match.phase_to_str(phase))
phaseHeaders.visible = target != null
if player_1_action: if target:
match_manager.resolve(player_action_queue) target.modulate = Color.WHITE
player_action_queue.clear()

View file

@ -1,12 +1,28 @@
[gd_scene load_steps=8 format=3 uid="uid://l2ehohbd1xhk"] [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://demo_game.gd" id="1_jn16u"]
[ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] [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="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="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/baraga.tres" id="3_we1tk"] [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://4eod3m0vc5a8" path="res://data/cards/support/potion.tres" id="4_kkhfk"]
[ext_resource type="Resource" uid="uid://di76avwc0gn8e" path="res://data/cards/monster/taiman.tres" id="5_3cm5x"] [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"] [node name="DemoGame" type="Control"]
layout_mode = 3 layout_mode = 3
@ -16,134 +32,256 @@ anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_jn16u") script = ExtResource("1_jn16u")
player_1_deck = Array[ExtResource("2_xuft0")]([ExtResource("3_we1tk"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("5_3cm5x")]) 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("5_3cm5x"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("3_we1tk")]) 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="Own" type="VBoxContainer" parent="." node_paths=PackedStringArray("deck", "monster_name_label", "monster_health_label", "incoming_damage_label", "energy_label")] [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 layout_mode = 1
anchors_preset = 12 anchor_top = 0.5
anchor_top = 1.0
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_top = -131.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 0 grow_vertical = 2
alignment = 2
script = ExtResource("2_w4tnt") script = ExtResource("2_w4tnt")
deck = NodePath("Hand") deck = NodePath("Hand")
monster_name_label = NodePath("Monster/VBoxContainer/NameLabel") energy_label = NodePath("EnergyLabel")
monster_health_label = NodePath("Monster/VBoxContainer/HealthLabel") skip_card_prefab = ExtResource("7_skjyk")
incoming_damage_label = NodePath("Monster/VBoxContainer/IncomingDamageLabel") support_red_card_prefab = ExtResource("9_cabcc")
energy_label = NodePath("HBoxContainer/EnergyLabel") 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="Monster" type="HBoxContainer" parent="Own"] [node name="MonsterCard" parent="Own" instance=ExtResource("7_4ah45")]
custom_minimum_size = Vector2(0, 128) custom_minimum_size = Vector2(220, 330)
layout_mode = 2 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_horizontal = 4
alignment = 1 size_flags_vertical = 4
[node name="VBoxContainer" type="VBoxContainer" parent="Own/Monster"] [node name="Support1GreenCard" parent="Own" instance=ExtResource("8_dytl5")]
layout_mode = 2 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="NameLabel" type="Label" parent="Own/Monster/VBoxContainer"] [node name="Support2GreenCard" parent="Own" instance=ExtResource("8_dytl5")]
layout_mode = 2 layout_mode = 1
size_flags_vertical = 3 anchors_preset = 5
text = "Name:" 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="HealthLabel" type="Label" parent="Own/Monster/VBoxContainer"] [node name="Support2RedCard" parent="Own" instance=ExtResource("9_cabcc")]
layout_mode = 2 layout_mode = 1
size_flags_vertical = 3 anchors_preset = 5
text = "Health:" 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="IncomingDamageLabel" type="Label" parent="Own/Monster/VBoxContainer"] [node name="EnergyLabel" type="Label" parent="Own"]
custom_minimum_size = Vector2(128, 0) layout_mode = 1
layout_mode = 2 anchors_preset = 2
size_flags_vertical = 3 anchor_top = 1.0
text = "Incoming Damage:" anchor_bottom = 1.0
vertical_alignment = 2 offset_top = -90.0
offset_right = 1152.0
[node name="HBoxContainer" type="HBoxContainer" parent="Own"] offset_bottom = -67.0
layout_mode = 2 grow_vertical = 0
[node name="EnergyLabel" type="Label" parent="Own/HBoxContainer"]
layout_mode = 2
text = "Energy:" text = "Energy:"
[node name="Hand" type="HBoxContainer" parent="Own"] [node name="Hand" type="HBoxContainer" parent="Own"]
layout_mode = 2 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 alignment = 1
[node name="Button" type="Button" parent="Own/Hand"] [node name="SkipCard" parent="Own/Hand" instance=ExtResource("7_skjyk")]
layout_mode = 2 layout_mode = 2
text = "CARD_1"
[node name="Button2" type="Button" parent="Own/Hand"] [node name="MonsterCard" parent="Own/Hand" instance=ExtResource("7_4ah45")]
layout_mode = 2 layout_mode = 2
text = "CARD_2"
[node name="Button3" type="Button" parent="Own/Hand"] [node name="CardBase" parent="Own/Hand" instance=ExtResource("8_dytl5")]
layout_mode = 2 layout_mode = 2
text = "CARD_3"
[node name="Opponent" type="VBoxContainer" parent="." node_paths=PackedStringArray("deck", "monster_name_label", "monster_health_label", "incoming_damage_label", "energy_label")] [node name="CardBase2" parent="Own/Hand" instance=ExtResource("9_cabcc")]
layout_mode = 2
[node name="IncomingDamageLabel" type="Label" parent="Own"]
layout_mode = 1 layout_mode = 1
anchors_preset = 10 anchors_preset = 5
anchor_right = 1.0 anchor_left = 0.5
offset_bottom = 190.0 anchor_right = 0.5
offset_left = 84.0
offset_top = 24.0
offset_right = 251.0
offset_bottom = 47.0
grow_horizontal = 2 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") script = ExtResource("2_w4tnt")
player_id = 1 player_id = 1
deck = NodePath("Hand") deck = NodePath("Hand")
monster_name_label = NodePath("Monster/VBoxContainer/NameLabel")
monster_health_label = NodePath("Monster/VBoxContainer/HealthLabel")
incoming_damage_label = NodePath("Monster/VBoxContainer/IncomingDamageLabel")
energy_label = NodePath("EnergyLabel") 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"] [node name="Hand" type="HBoxContainer" parent="Opponent"]
layout_mode = 2 layout_mode = 1
anchors_preset = 10
anchor_right = 1.0
offset_bottom = 31.0
grow_horizontal = 2
alignment = 1 alignment = 1
[node name="Button" type="Button" parent="Opponent/Hand"]
layout_mode = 2
text = "CARD_1"
[node name="Button2" type="Button" parent="Opponent/Hand"]
layout_mode = 2
text = "CARD_2"
[node name="Button3" type="Button" parent="Opponent/Hand"]
layout_mode = 2
text = "CARD_3"
[node name="EnergyLabel" type="Label" parent="Opponent"] [node name="EnergyLabel" type="Label" parent="Opponent"]
layout_mode = 2 layout_mode = 2
offset_top = 35.0
offset_right = 1152.0
offset_bottom = 58.0
text = "Energy:" text = "Energy:"
[node name="Monster" type="HBoxContainer" parent="Opponent"] [node name="IncomingDamageLabel" type="Label" parent="Opponent"]
custom_minimum_size = Vector2(0, 128) layout_mode = 1
layout_mode = 2 anchors_preset = 7
size_flags_horizontal = 4 anchor_left = 0.5
alignment = 1 anchor_top = 1.0
anchor_right = 0.5
[node name="VBoxContainer" type="VBoxContainer" parent="Opponent/Monster"] anchor_bottom = 1.0
layout_mode = 2 offset_left = 84.0
offset_top = -52.0
[node name="NameLabel" type="Label" parent="Opponent/Monster/VBoxContainer"] offset_right = 251.0
layout_mode = 2 offset_bottom = -29.0
size_flags_vertical = 3 grow_horizontal = 2
text = "Name: " grow_vertical = 0
text = "HP +0"
[node name="HealthLabel" type="Label" parent="Opponent/Monster/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
text = "Health:"
[node name="IncomingDamageLabel" type="Label" parent="Opponent/Monster/VBoxContainer"]
custom_minimum_size = Vector2(128, 0)
layout_mode = 2
size_flags_vertical = 3
text = "Incoming Damage:"
vertical_alignment = 2
[node name="StartGameButton" type="Button" parent="."] [node name="StartGameButton" type="Button" parent="."]
layout_mode = 1 layout_mode = 1
@ -162,8 +300,75 @@ text = "Start Game"
[node name="MatchManager" parent="." instance=ExtResource("3_3yhrl")] [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="play_card" from="Own" to="." method="_on_own_play_card"]
[connection signal="rps_move" from="Own" to="." method="_on_own_rps_move"] [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="play_card" from="Opponent" to="." method="_on_opponent_play_card"]
[connection signal="rps_move" from="Opponent" to="." method="_on_opponent_rps_move"] [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"] [connection signal="button_up" from="StartGameButton" to="." method="_on_start_game_button_button_up"]

BIN
icon.svg (Stored with Git LFS)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 994 B

After

Width:  |  Height:  |  Size: 128 B

Before After
Before After

13
main.gd
View file

@ -58,24 +58,14 @@ func _ready() -> void:
server_discovery.server_removed.connect(_on_server_removed) 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_card.connect(func (card): _on_own_played_card.rpc(card.id if card else ""))
demo_game.opponent_played_card.connect(func (card): _on_opponent_played_card.rpc(card.id if card else ""))
demo_game.own_played_rts.connect(func (move): _on_own_played_rts.rpc(move)) demo_game.own_played_rts.connect(func (move): _on_own_played_rts.rpc(move))
demo_game.opponent_played_rts.connect(func (move): _on_opponent_played_rts.rpc(move))
@rpc("any_peer", "call_remote", "reliable") @rpc("any_peer", "call_remote", "reliable")
func _on_own_played_card(card_id: String): func _on_own_played_card(card_id: String):
demo_game.rpc_own_play_card(card_id)
@rpc("any_peer", "call_remote", "reliable")
func _on_opponent_played_card(card_id: String):
demo_game.rpc_opponent_play_card(card_id) demo_game.rpc_opponent_play_card(card_id)
@rpc("any_peer", "call_remote", "reliable") @rpc("any_peer", "call_remote", "reliable")
func _on_own_played_rts(move: String): func _on_own_played_rts(move: String):
demo_game.rpc_own_rps_move(move)
@rpc("any_peer", "call_remote", "reliable")
func _on_opponent_played_rts(move: String):
demo_game.rpc_opponent_rps_move(move) demo_game.rpc_opponent_rps_move(move)
@rpc("authority", "call_local", "reliable") @rpc("authority", "call_local", "reliable")
@ -130,7 +120,8 @@ func _on_server_removed(id, ip):
func _do_connect(ip: String, port: int): func _do_connect(ip: String, port: int):
var peer = ENetMultiplayerPeer.new() var peer = ENetMultiplayerPeer.new()
print("%s Connecting to %s:%d" % [server_discovery.id, ip, port]) 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 multiplayer.multiplayer_peer = peer
func _on_host_pressed(): func _on_host_pressed():

View file

@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://main.gd" id="1_e0ud3"] [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="Script" path="res://server_discovery.gd" id="2_hed18"]
[ext_resource type="PackedScene" uid="uid://l2ehohbd1xhk" path="res://demo_game.tscn" id="3_2ln6b"] [ext_resource type="PackedScene" uid="uid://bgc0u117jqyr1" path="res://demo_game.tscn" id="3_2ln6b"]
[node name="Main" type="Control"] [node name="Main" type="Control"]
layout_mode = 3 layout_mode = 3
@ -63,9 +63,12 @@ layout_mode = 1
[node name="DisconnectButton" type="Button" parent="AfterConnect"] [node name="DisconnectButton" type="Button" parent="AfterConnect"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 1
offset_left = 966.0 anchors_preset = 1
offset_right = 1152.0 anchor_left = 1.0
anchor_right = 1.0
offset_left = -186.0
offset_bottom = 31.0 offset_bottom = 31.0
grow_horizontal = 0
size_flags_horizontal = 8 size_flags_horizontal = 8
text = "Disconnect" text = "Disconnect"

View file

@ -4,14 +4,32 @@ signal play_card(card: Card)
signal rps_move(move: String) signal rps_move(move: String)
@export var player_id: int @export var player_id: int
@export var deck: Container @export var deck: Container
@export var monster_name_label: Label
@export var monster_health_label: Label
@export var incoming_damage_label: Label
@export var energy_label: Label @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 match_manager: MatchManager
var show_buttons: bool var show_buttons: bool
var signal_connected: 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): func attach(match_manager: MatchManager, show_buttons: bool = true):
self.show_buttons = show_buttons self.show_buttons = show_buttons
@ -20,18 +38,55 @@ func attach(match_manager: MatchManager, show_buttons: bool = true):
match_manager.state_transitioned.connect(_on_update) match_manager.state_transitioned.connect(_on_update)
signal_connected = true 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): func _on_update(transition):
hovering_cards_duration.clear()
selected_card = null
incoming_damage_label.visible = true
for child in deck.get_children(): for child in deck.get_children():
child.queue_free() child.queue_free()
var player: MatchPlayer = match_manager.players.get(player_id) as MatchPlayer var player: MatchPlayer = match_manager.players.get(player_id) as MatchPlayer
if not player: if not player:
return return
energy_label.text = "Energy: " + str(player.energy) 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 var monster = player.monster
if monster: if monster:
monster_name_label.text = "Name: " + monster.card.id monster_card_ui.visible = true
monster_health_label.text = "Health: " + str(monster.health) monster_card_ui.show_monster(monster)
incoming_damage_label.text = "Incoming Damage: " + str(monster.health_delta) 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 in [Match.Phase.SUMMON, Match.Phase.SUPPORT_1, Match.Phase.SUPPORT_2]:
if ( if (
@ -39,9 +94,11 @@ func _on_update(transition):
) or ( ) or (
match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0 && show_buttons match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0 && show_buttons
): ):
var skip_btn = Button.new() var skip_btn:CardBase = skip_card_prefab.instantiate()
skip_btn.text = "Skip" skip_btn.left_clicked.connect(func ():
skip_btn.button_up.connect(func (): play_card.emit(null)) _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) deck.add_child(skip_btn)
for card: Card in player.hand: for card: Card in player.hand:
@ -55,10 +112,7 @@ func _on_update(transition):
if !show_buttons : if !show_buttons :
continue continue
var btn = Button.new() var is_disabled = (
btn.text = card.id
btn.button_up.connect(func (): play_card.emit(card))
btn.disabled = (
card is MonsterCard and match_manager.phase != Match.Phase.SUMMON card is MonsterCard and match_manager.phase != Match.Phase.SUMMON
) or ( ) or (
card is SupportCard and match_manager.phase != Match.Phase.SUPPORT_1 and match_manager.phase != Match.Phase.SUPPORT_2 card is SupportCard and match_manager.phase != Match.Phase.SUPPORT_1 and match_manager.phase != Match.Phase.SUPPORT_2
@ -67,15 +121,119 @@ func _on_update(transition):
) or ( ) or (
card is MonsterCard and match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0 card is MonsterCard and match_manager.phase == Match.Phase.SUMMON and player.monster and player.monster.health > 0
) )
deck.add_child(btn)
if match_manager.phase == Match.Phase.RPS:
for move in ["rock", "paper", "scissors"]:
if !show_buttons: var btn: CardBase = null
continue 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)
var btn = Button.new() elif card is SupportCard and card.type == "red":
btn.text = move btn = support_red_card_prefab.instantiate()
btn.button_up.connect(func (): rps_move.emit(move)) btn.card = card
deck.add_child(btn) 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

Some files were not shown because too many files have changed in this diff Show more