Compare commits

..

No commits in common. "main" and "sword_mastery" have entirely different histories.

88 changed files with 237 additions and 1518 deletions

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

Binary file not shown.

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

Binary file not shown.

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

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

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

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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/jellyfish 2.png (Stored with Git LFS)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

@ -1,34 +0,0 @@
[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)

Binary file not shown.

View file

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

View file

@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://di76avwc0gn8e"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://deo8mj887rfx1"]
[ext_resource type="Texture2D" uid="uid://wdyu7txs2ijg" path="res://assets/monster/axolotl 3.png" id="1_j0l6n"]
[ext_resource type="Texture2D" uid="uid://b8accn4e2ojau" path="res://assets/monster/froggo 1.png" id="1_dyw44"]
[ext_resource type="Script" path="res://tcg/card/monster_card.gd" id="1_s0p53"]
[resource]
@ -12,4 +12,4 @@ energy_cost = 1
base_health = 120
name = "Axoluna"
description = "Cute wanderer of the tank, Axoluna"
icon = ExtResource("1_j0l6n")
icon = ExtResource("1_dyw44")

View file

@ -1,7 +1,6 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://tgju8eodyuk1"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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")
@ -12,4 +11,3 @@ energy_cost = 1
base_health = 50
name = "Bunnaut"
description = "Run faster than tortoise."
icon = ExtResource("1_xibsw")

View file

@ -1,6 +1,5 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://cs7q8i7bvohmj"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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]
@ -12,4 +11,3 @@ energy_cost = 3
base_health = 170
name = "Capytain"
description = "A big, hungry capybara"
icon = ExtResource("1_mulam")

View file

@ -1,7 +1,6 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://bmst884k0myvd"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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")
@ -12,4 +11,3 @@ energy_cost = 3
base_health = 80
name = "Cattogato"
description = "Lovely cat wandering in the space."
icon = ExtResource("1_xles7")

View file

@ -1,7 +1,6 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://myxgsyerrdla"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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")
@ -12,4 +11,3 @@ energy_cost = 1
base_health = 120
name = "Gilli"
description = "There is a huge monster looking at me everyday."
icon = ExtResource("1_62dnj")

View file

@ -1,6 +1,5 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://425ipxdapg8o"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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]
@ -12,4 +11,3 @@ energy_cost = 2
base_health = 110
name = "Jellova"
description = "I'm gonna whip you till' you .. nevermind."
icon = ExtResource("1_t6381")

View file

@ -1,6 +1,5 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://cakkx0o8mifmn"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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]
@ -12,4 +11,3 @@ 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

@ -1,7 +1,6 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://shri5ne51s74"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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")
@ -12,4 +11,3 @@ energy_cost = 2
base_health = 100
name = "Prankie"
description = "I'm not pranking anyone. Yet."
icon = ExtResource("1_75ppb")

View file

@ -1,6 +1,5 @@
[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://dnf3gpji5prlr"]
[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 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]
@ -12,4 +11,3 @@ energy_cost = 1
base_health = 70
name = "Quackle"
description = "Quack! Quack! No one notice me."
icon = ExtResource("1_4f7pv")

View file

@ -1,14 +0,0 @@
[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

@ -1,14 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,14 +0,0 @@
[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

@ -1,14 +0,0 @@
[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

@ -1,14 +0,0 @@
[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

@ -1,14 +0,0 @@
[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

@ -1,13 +0,0 @@
[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

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

View file

@ -1,14 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,12 +0,0 @@
[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

@ -1,20 +0,0 @@
[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

@ -1,14 +0,0 @@
[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

@ -1,6 +0,0 @@
[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,12 +8,10 @@ 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 match_manager = $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 = {}
@ -32,9 +30,6 @@ var player_2_action: Action:
var id
var signal_connected := false
func _ready() -> void:
_update_phase_info(Match.Phase.PREGAME)
func init(player_id: int) -> void:
id = player_id
@ -49,7 +44,6 @@ func init(player_id: int) -> void:
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
@ -65,11 +59,6 @@ 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:
@ -124,12 +113,3 @@ func rpc_opponent_rps_move(move: String) -> void:
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

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=24 format=3 uid="uid://bgc0u117jqyr1"]
[gd_scene load_steps=12 format=3 uid="uid://l2ehohbd1xhk"]
[ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"]
[ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"]
@ -7,22 +7,10 @@
[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
@ -32,17 +20,10 @@ 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")])
player_1_deck = Array[ExtResource("2_xuft0")]([ExtResource("3_we1tk"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("5_3cm5x")])
player_2_deck = Array[ExtResource("2_xuft0")]([ExtResource("5_3cm5x"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("4_kkhfk"), ExtResource("3_we1tk")])
[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")]
[node name="Own" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label")]
layout_mode = 1
anchor_top = 0.5
anchor_right = 1.0
@ -56,8 +37,6 @@ 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)
@ -116,22 +95,19 @@ layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_top = -90.0
offset_top = -23.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
anchors_preset = 12
anchor_top = 1.0
anchor_right = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -446.0
offset_top = -370.0
offset_right = 446.0
offset_top = -240.0
offset_bottom = 130.0
grow_horizontal = 2
grow_vertical = 0
pivot_offset = Vector2(0, 150)
@ -154,32 +130,13 @@ 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
offset_left = -83.5
offset_top = 300.0
offset_right = 83.5
offset_bottom = 323.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")
text = "Incoming Damage: 0"
horizontal_alignment = 1
[node name="Opponent" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label")]
layout_mode = 1
@ -261,6 +218,18 @@ offset_bottom = 31.0
grow_horizontal = 2
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"]
layout_mode = 2
offset_top = 35.0
@ -275,13 +244,14 @@ 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
offset_left = -83.5
offset_top = -325.0
offset_right = 83.5
offset_bottom = -302.0
grow_horizontal = 2
grow_vertical = 0
text = "HP +0"
text = "Incoming Damage: 0"
horizontal_alignment = 1
[node name="StartGameButton" type="Button" parent="."]
layout_mode = 1
@ -300,75 +270,8 @@ 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"]

View file

@ -2,7 +2,7 @@
[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"]
[ext_resource type="PackedScene" uid="uid://l2ehohbd1xhk" path="res://demo_game.tscn" id="3_2ln6b"]
[node name="Main" type="Control"]
layout_mode = 3

View file

@ -9,8 +9,6 @@ signal rps_move(move: String)
@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"
@ -22,14 +20,6 @@ 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
@ -43,14 +33,11 @@ func _ready():
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()
@ -59,14 +46,14 @@ func _on_update(transition):
return
energy_label.text = "Energy: " + str(player.energy)
if match_manager.players[player.id].active_support_cards.size() > 0:
if match_manager.support_cards_1.has(player):
support1_green.visible = true
support1_green.card = match_manager.players[player.id].active_support_cards[0]
support1_green.card = match_manager.support_cards_1[player]
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 match_manager.support_cards_2.has(player):
var card: SupportCard = match_manager.support_cards_2[player]
if card.type == "green":
support2_green.visible = true
support2_green.card = card
@ -83,8 +70,7 @@ func _on_update(transition):
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))
incoming_damage_label.text = "Incoming Damage: " + 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]:
@ -98,7 +84,6 @@ func _on_update(transition):
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:
@ -126,13 +111,11 @@ func _on_update(transition):
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":
@ -148,92 +131,21 @@ func _on_update(transition):
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
if match_manager.phase == Match.Phase.RPS:
for move in ["rock", "paper", "scissors"]:
func _do_zoom(card: Control):
if focused_card:
_do_unzoom()
if !show_buttons:
continue
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
var btn = Button.new()
btn.text = move
btn.button_up.connect(func (): rps_move.emit(move))
deck.add_child(btn)
func _pop_this_card(control: Control):
if selected_card:
selected_card.position = Vector2(selected_card.position.x, original_hover_position)
selected_card.size_flags_vertical = Control.SIZE_SHRINK_END
control.size_flags_vertical = Control.SIZE_SHRINK_BEGIN
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

View file

@ -2,7 +2,7 @@ extends Resource
class_name Card
@export var name: String
@export_multiline var description: String
@export var description: String
@export var icon: Texture2D
var id: String:

View file

@ -1,4 +0,0 @@
extends SupportCard
class_name ImplementedSupportCard
@export_enum("instant", "turn", "monster", "match") var scope = "instant"

View file

@ -2,4 +2,5 @@ extends Card
class_name SupportCard
@export_enum("red", "green") var type = "green"
@export var priority: int = 0
@export var effects: Array[SupportCardEffectInstance] = [null]

View file

@ -1,7 +0,0 @@
extends Event
class_name EventGameEnded
var winner_player_id: int
func _init(winner_player_id: int) -> void:
self.winner_player_id = winner_player_id

View file

@ -22,6 +22,9 @@ var player_2: MatchPlayer:
return players[actual_p2_id] as MatchPlayer
var phase: Match.Phase = Match.Phase.PREGAME
var support_cards_1: Dictionary = {}
var support_cards_2: Dictionary = {}
var actual_p1_id: int
var actual_p2_id: int
@ -35,15 +38,17 @@ func init(decks: Dictionary, actual_p1_id: int, actual_p2_id: int):
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)
var zero_idx_card = deck_shuffled.pop_at(0)
deck_shuffled.insert(0, first_monster)
deck_shuffled.insert(first_monster_idx, zero_idx_card)
deck_shuffled.shuffle()
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)
@ -70,6 +75,8 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition:
)
phase = Match.Phase.SUMMON
Match.Phase.SUMMON:
support_cards_1.clear()
support_cards_2.clear()
for player_id in action_by_player_id.keys():
var action = action_by_player_id[player_id]
@ -79,52 +86,41 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition:
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:
support_cards_1.clear()
support_cards_2.clear()
var support_cards = []
if player_1_action is ActionPlayCard:
support_cards.append({
"player": player_1,
"card": player_1_action.card
})
support_cards_1[player_1] = 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
})
support_cards_1[player_2] = player_2_action.card
player_2.hand.erase(player_2_action.card)
support_cards.sort_custom(func(a, b): return a.card.priority < b.card.priority)
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)
events.append_array(_resolve_support_card_effects(player, card))
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})
player_2.monster.health_delta -= player_1.monster.card.damage[player_1_action.move] + _resolve_damage_delta(player_1)
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
player_1.monster.health_delta -= player_2.monster.card.damage[player_2_action.move] + _resolve_damage_delta(player_2)
phase = Match.Phase.SUPPORT_2
Match.Phase.SUPPORT_2:
var support_cards = []
@ -133,46 +129,35 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition:
"player": player_1,
"card": player_1_action.card
})
support_cards_2[player_1] = 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
})
support_cards_2[player_2] = player_2_action.card
player_2.hand.erase(player_2_action.card)
support_cards.sort_custom(func(a, b): return a.card.priority < b.card.priority)
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))
events.append_array(_resolve_support_card_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))
player.active_support_cards = []
events.append(EventMonsterDied.new(player.id))
else:
player.monster.health = monster_final_health
player.monster.health += player.monster.health_delta
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(
@ -180,11 +165,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition:
):
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)
@ -194,19 +175,24 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition:
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]:
func _resolve_support_card_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)
for effect_instance in card.effects:
var effect = effect_instance.effect
var magnitude = effect_instance.magnitude
match effect.id:
"heal":
player.monster.health_delta += magnitude
events.append(EventSupportEffectApplied.new(player.id, effect_instance))
"sword_mastery":
player.active_support_cards.append(card)
events.append(EventSupportEffectApplied.new(player.id, effect_instance))
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
func _resolve_damage_delta(player: MatchPlayer):
var final_delta: int = 0
for card in player.active_support_cards:
match card.id:
"sword_mastery":
final_delta += card.magnitude
return final_delta

View file

@ -3,7 +3,6 @@ class_name CardBase
signal left_clicked
signal right_clicked
signal un_right_clicked
signal hovering(delta: float)
@export var card_name_label: Label
@ -26,17 +25,20 @@ func _update(card: SupportCard):
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():
if rect.has_point(mouse_position):
hovering.emit(delta)
func _input(event):
if event is InputEventMouseButton:
if !event.is_pressed():
return
var mouse_position = get_global_mouse_position()
var rect = get_global_rect()
if not rect.has_point(mouse_position):
return
if rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() and get_window().has_focus():
if event.button_index == MOUSE_BUTTON_LEFT:
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():
elif event.button_index == MOUSE_BUTTON_RIGHT:
right_clicked.emit()
elif event.button_index == MOUSE_BUTTON_RIGHT and !event.is_pressed():
un_right_clicked.emit()

View file

@ -3,7 +3,6 @@ class_name MonsterCardUI
signal left_clicked
signal right_clicked
signal un_right_clicked
signal hovering(delta: float)
@export var name_label : Label
@ -22,7 +21,7 @@ func show_monster(monster: MatchMonster):
return
name_label.text = monster.card.id
health_label.text = "HP %d/%d" % [monster.health, monster.card.base_health]
health_label.text = "HP %d" % [monster.health]
icon_texture_rect.texture = monster.card.icon
paper_damage.text = str(monster.card.paper)
@ -38,17 +37,20 @@ func show_monster(monster: MatchMonster):
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():
if rect.has_point(mouse_position):
hovering.emit(delta)
func _input(event):
if event is InputEventMouseButton:
if !event.is_pressed():
return
var mouse_position = get_global_mouse_position()
var rect = get_global_rect()
if not rect.has_point(mouse_position):
return
if rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() and get_window().has_focus():
if event.button_index == MOUSE_BUTTON_LEFT:
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():
elif event.button_index == MOUSE_BUTTON_RIGHT:
right_clicked.emit()
elif event.button_index == MOUSE_BUTTON_RIGHT and !event.is_pressed():
un_right_clicked.emit()

View file

@ -1,5 +1,6 @@
[gd_scene load_steps=14 format=3 uid="uid://bhrelvt51cbp2"]
[gd_scene load_steps=15 format=3 uid="uid://bhrelvt51cbp2"]
[ext_resource type="Texture2D" uid="uid://cqladcrximh6" path="res://assets/card_base/Screenshot 2025-01-25 211435.png" id="1_nvo50"]
[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"]
@ -7,7 +8,7 @@
[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="Theme" 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"]
@ -32,9 +33,15 @@ 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")
paper_damage = NodePath("MarginContainer/Paper/PaperDamage")
scissors_damage = NodePath("MarginContainer/Scissors/ScissorsDamage")
rock_damage = NodePath("MarginContainer/Rock/RockDamage")
[node name="Screenshot2025-01-25211435" type="Sprite2D" parent="."]
visible = false
position = Vector2(355, 157)
scale = Vector2(0.625, 0.625)
texture = ExtResource("1_nvo50")
[node name="Frame" type="TextureRect" parent="."]
layout_mode = 1
@ -114,13 +121,12 @@ 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
offset_left = 141.0
offset_top = 55.0
offset_right = 200.0
offset_bottom = 70.0
[node name="TextureRect" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"]
[node name="TextureRect3" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"]
layout_mode = 2
texture = ExtResource("8_ophhb")
expand_mode = 3
@ -132,19 +138,7 @@ 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"]
[node name="TextureRect" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"]
layout_mode = 2
texture = ExtResource("8_ophhb")
expand_mode = 3
@ -162,7 +156,7 @@ offset_bottom = 80.0
grow_horizontal = 2
theme = ExtResource("9_6x2vq")
theme_override_font_sizes/font_size = 16
text = "HP 80/100"
text = "HP 80"
vertical_alignment = 1
[node name="MonsterNameLabel" type="Label" parent="MarginContainer"]
@ -191,7 +185,6 @@ 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
@ -212,110 +205,77 @@ 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
[node name="Paper" type="TextureRect" parent="MarginContainer"]
layout_mode = 0
offset_left = 109.0
offset_top = 183.0
offset_right = 222.0
offset_bottom = 356.0
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"]
[node name="PaperDamage" type="Label" parent="MarginContainer/Paper"]
unique_name_in_owner = true
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
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_6x2vq")
theme_override_font_sizes/font_size = 24
theme_override_font_sizes/font_size = 20
text = "10"
horizontal_alignment = 1
vertical_alignment = 2
vertical_alignment = 1
[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
[node name="Scissors" type="TextureRect" parent="MarginContainer"]
layout_mode = 0
offset_left = 43.0
offset_top = 182.0
offset_right = 156.0
offset_bottom = 355.0
texture = ExtResource("13_ifoc6")
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_6x2vq")
theme_override_font_sizes/font_size = 20
text = "10"
vertical_alignment = 1
[node name="Rock" type="TextureRect" parent="MarginContainer"]
layout_mode = 0
offset_left = -23.0
offset_top = 181.0
offset_right = 90.0
offset_bottom = 354.0
texture = ExtResource("12_a4kkh")
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_6x2vq")
theme_override_font_sizes/font_size = 20
text = "10"
vertical_alignment = 1

View file

@ -6,9 +6,9 @@
[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="Theme" path="res://cards.tres" id="7_va1d7"]
[ext_resource type="Texture2D" uid="uid://rh3aswb0p7ri" path="res://assets/energy.png" id="8_4yq42"]
[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")]
@ -77,17 +77,6 @@ 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
@ -158,6 +147,16 @@ text = "Green card"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Icon" type="TextureRect" parent="MarginContainer"]
layout_mode = 0
offset_left = 26.0
offset_top = 74.0
offset_right = 169.0
offset_bottom = 179.0
texture = ExtResource("8_4yq42")
expand_mode = 1
stretch_mode = 6
[node name="DescriptionLabel" type="Label" parent="MarginContainer"]
layout_mode = 0
offset_left = 11.0

View file

@ -7,7 +7,7 @@
[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="Theme" 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"]