From 314106625856c60975c5a445a99c2d0082a029fc Mon Sep 17 00:00:00 2001 From: kennetha123 Date: Sun, 26 Jan 2025 02:50:21 +0700 Subject: [PATCH 01/17] feat: implement all support card tres --- data/cards/support/absorb.tres | 12 ++++++++++++ data/cards/support/all_out_attack.tres | 12 ++++++++++++ data/cards/support/attack_mode.tres | 12 ++++++++++++ data/cards/support/caller.tres | 12 ++++++++++++ data/cards/support/cash_back.tres | 12 ++++++++++++ data/cards/support/catcher.tres | 12 ++++++++++++ data/cards/support/energy_booster.tres | 12 ++++++++++++ data/cards/support/insurance.tres | 12 ++++++++++++ data/cards/support/invisibility.tres | 12 ++++++++++++ data/cards/support/lifesteal.tres | 12 ++++++++++++ data/cards/support/negate.tres | 12 ++++++++++++ data/cards/support/paper.tres | 12 ++++++++++++ data/cards/support/reflection.tres | 12 ++++++++++++ data/cards/support/retreat.tres | 12 ++++++++++++ data/cards/support/reviver.tres | 12 ++++++++++++ data/cards/support/rock.tres | 12 ++++++++++++ data/cards/support/scissor.tres | 12 ++++++++++++ data/cards/support/sword_mastery.tres | 18 ++++++++++++++++++ data/cards/support/tanker.tres | 12 ++++++++++++ data/support_effects/sword_mastery.tres | 6 ++++++ 20 files changed, 240 insertions(+) create mode 100644 data/cards/support/absorb.tres create mode 100644 data/cards/support/all_out_attack.tres create mode 100644 data/cards/support/attack_mode.tres create mode 100644 data/cards/support/caller.tres create mode 100644 data/cards/support/cash_back.tres create mode 100644 data/cards/support/catcher.tres create mode 100644 data/cards/support/energy_booster.tres create mode 100644 data/cards/support/insurance.tres create mode 100644 data/cards/support/invisibility.tres create mode 100644 data/cards/support/lifesteal.tres create mode 100644 data/cards/support/negate.tres create mode 100644 data/cards/support/paper.tres create mode 100644 data/cards/support/reflection.tres create mode 100644 data/cards/support/retreat.tres create mode 100644 data/cards/support/reviver.tres create mode 100644 data/cards/support/rock.tres create mode 100644 data/cards/support/scissor.tres create mode 100644 data/cards/support/sword_mastery.tres create mode 100644 data/cards/support/tanker.tres create mode 100644 data/support_effects/sword_mastery.tres diff --git a/data/cards/support/absorb.tres b/data/cards/support/absorb.tres new file mode 100644 index 0000000..705b320 --- /dev/null +++ b/data/cards/support/absorb.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_x8k3o"] + +[resource] +script = ExtResource("2_x8k3o") +type = "red" +priority = 0 +effects = Array[ExtResource("1_mhxdy")]([null]) +name = "Absorb" +description = "Enemy damage converted to heal your Active Monster Field HP during this turn." diff --git a/data/cards/support/all_out_attack.tres b/data/cards/support/all_out_attack.tres new file mode 100644 index 0000000..d69f64b --- /dev/null +++ b/data/cards/support/all_out_attack.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_1tjl7"] + +[resource] +script = ExtResource("2_1tjl7") +type = "green" +priority = 0 +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." diff --git a/data/cards/support/attack_mode.tres b/data/cards/support/attack_mode.tres new file mode 100644 index 0000000..b3de463 --- /dev/null +++ b/data/cards/support/attack_mode.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://dcimexx4twoe2"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_jl6i7"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_p06c1"] + +[resource] +script = ExtResource("2_p06c1") +type = "green" +priority = 0 +effects = Array[ExtResource("1_jl6i7")]([null]) +name = "Attack Mode" +description = "If you have Prankie in your Active Monster Field, set all Rock Paper Scissor to 100 permanently." diff --git a/data/cards/support/caller.tres b/data/cards/support/caller.tres new file mode 100644 index 0000000..397af59 --- /dev/null +++ b/data/cards/support/caller.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://5n2o4m7xqd13"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_w4l0x"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_n7fiv"] + +[resource] +script = ExtResource("2_n7fiv") +type = "green" +priority = 0 +effects = Array[ExtResource("1_w4l0x")]([null]) +name = "Caller" +description = "Get 1 monster of your choice to your hand. Shuffle it afterwards." diff --git a/data/cards/support/cash_back.tres b/data/cards/support/cash_back.tres new file mode 100644 index 0000000..b13212f --- /dev/null +++ b/data/cards/support/cash_back.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://bk6myqvoklhqp"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_7f5cd"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_prilx"] + +[resource] +script = ExtResource("2_prilx") +type = "red" +priority = 0 +effects = Array[ExtResource("1_7f5cd")]([null]) +name = "Cash Back" +description = "If your monster died during this turn, Refund all the energy being used by the monster sent to graveyard." diff --git a/data/cards/support/catcher.tres b/data/cards/support/catcher.tres new file mode 100644 index 0000000..ea9d5d8 --- /dev/null +++ b/data/cards/support/catcher.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://ca0fengr2xjps"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_r7m0a"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_g1u6x"] + +[resource] +script = ExtResource("2_g1u6x") +type = "green" +priority = 0 +effects = Array[ExtResource("1_r7m0a")]([null]) +name = "Catcher" +description = "For one turn, swap your Active Enemy card with your Active Monster card. If the card you previously used died during this turn, you can keep the enemy monster card." diff --git a/data/cards/support/energy_booster.tres b/data/cards/support/energy_booster.tres new file mode 100644 index 0000000..c3e9de8 --- /dev/null +++ b/data/cards/support/energy_booster.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_qqko6"] + +[resource] +script = ExtResource("2_qqko6") +type = "green" +priority = 0 +effects = Array[ExtResource("1_pkc1x")]([null]) +name = "Energy Booster" +description = "Add 1 additional Energy." diff --git a/data/cards/support/insurance.tres b/data/cards/support/insurance.tres new file mode 100644 index 0000000..4f53e44 --- /dev/null +++ b/data/cards/support/insurance.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_286ne"] + +[resource] +script = ExtResource("2_286ne") +type = "red" +priority = 0 +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." diff --git a/data/cards/support/invisibility.tres b/data/cards/support/invisibility.tres new file mode 100644 index 0000000..c0a3499 --- /dev/null +++ b/data/cards/support/invisibility.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_hsvj6"] + +[resource] +script = ExtResource("2_hsvj6") +type = "green" +priority = 0 +effects = Array[ExtResource("1_5tnpm")]([null]) +name = "Invisibility" +description = "Ignore any damage to your monster in this turn." diff --git a/data/cards/support/lifesteal.tres b/data/cards/support/lifesteal.tres new file mode 100644 index 0000000..26aa830 --- /dev/null +++ b/data/cards/support/lifesteal.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://bcrlaam8uq6xt"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_b33y4"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_qww3m"] + +[resource] +script = ExtResource("2_qww3m") +type = "green" +priority = 0 +effects = Array[ExtResource("1_b33y4")]([null]) +name = "Lifesteal" +description = "During this turn your attack also heals your HP." diff --git a/data/cards/support/negate.tres b/data/cards/support/negate.tres new file mode 100644 index 0000000..1c634cd --- /dev/null +++ b/data/cards/support/negate.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" 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/support_card.gd" id="2_v8fdj"] + +[resource] +script = ExtResource("2_v8fdj") +type = "red" +priority = 1 +effects = Array[ExtResource("1_awvxv")]([null]) +name = "Negate" +description = "Cancel 1 of the Support Card played by your opponent. This card will always be played last." diff --git a/data/cards/support/paper.tres b/data/cards/support/paper.tres new file mode 100644 index 0000000..71de883 --- /dev/null +++ b/data/cards/support/paper.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://crn3qovkygo6l"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_gqbio"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_rr70q"] + +[resource] +script = ExtResource("2_rr70q") +type = "green" +priority = 0 +effects = Array[ExtResource("1_gqbio")]([null]) +name = "Force Paper" +description = "Forcing enemy to pick Paper during this turn." diff --git a/data/cards/support/reflection.tres b/data/cards/support/reflection.tres new file mode 100644 index 0000000..1833aad --- /dev/null +++ b/data/cards/support/reflection.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_fliii"] + +[resource] +script = ExtResource("2_fliii") +type = "red" +priority = 0 +effects = Array[ExtResource("1_mk2or")]([null]) +name = "Reflection" +description = "Enemy got the same amount of damage as our monster in this turn." diff --git a/data/cards/support/retreat.tres b/data/cards/support/retreat.tres new file mode 100644 index 0000000..6582080 --- /dev/null +++ b/data/cards/support/retreat.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://cljmcpwa44j6b"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_2w2ve"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_r3faa"] + +[resource] +script = ExtResource("2_r3faa") +type = "green" +priority = 0 +effects = Array[ExtResource("1_2w2ve")]([null]) +name = "Retreat" +description = "Swap your monster in Active Field with the one in your hand. The energy cost for summoning decreased by 1." diff --git a/data/cards/support/reviver.tres b/data/cards/support/reviver.tres new file mode 100644 index 0000000..8295ec0 --- /dev/null +++ b/data/cards/support/reviver.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://c3o6lxj0m6yod"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_y5oux"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_7m5wu"] + +[resource] +script = ExtResource("2_7m5wu") +type = "red" +priority = 0 +effects = Array[ExtResource("1_y5oux")]([null]) +name = "Reviver" +description = "Revive 1 Monster of your choice from your graveyard, and move it into your hand." diff --git a/data/cards/support/rock.tres b/data/cards/support/rock.tres new file mode 100644 index 0000000..4237c53 --- /dev/null +++ b/data/cards/support/rock.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://defdobjmiloth"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_hx76y"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_oinlp"] + +[resource] +script = ExtResource("2_oinlp") +type = "green" +priority = 0 +effects = Array[ExtResource("1_hx76y")]([null]) +name = "Force Rock" +description = "Forcing enemy to pick Rock during this turn." diff --git a/data/cards/support/scissor.tres b/data/cards/support/scissor.tres new file mode 100644 index 0000000..e9d5406 --- /dev/null +++ b/data/cards/support/scissor.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://d304v2sfewmp5"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_q82mb"] +[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_yklgt"] + +[resource] +script = ExtResource("2_yklgt") +type = "red" +priority = 0 +effects = Array[ExtResource("1_q82mb")]([null]) +name = "Force Scissor" +description = "Forcing enemy to pick Scissor during this turn." diff --git a/data/cards/support/sword_mastery.tres b/data/cards/support/sword_mastery.tres new file mode 100644 index 0000000..77eee88 --- /dev/null +++ b/data/cards/support/sword_mastery.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=5 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/support_card.gd" id="2_vp8a3"] + +[sub_resource type="Resource" id="Resource_wwv02"] +script = ExtResource("1_y6yvj") +magnitude = 20 +effect = ExtResource("2_omhdb") + +[resource] +script = ExtResource("2_vp8a3") +type = "green" +priority = 0 +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." diff --git a/data/cards/support/tanker.tres b/data/cards/support/tanker.tres new file mode 100644 index 0000000..c51cbf2 --- /dev/null +++ b/data/cards/support/tanker.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="SupportCard" load_steps=3 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/support_card.gd" id="2_m4ahe"] + +[resource] +script = ExtResource("2_m4ahe") +type = "red" +priority = 0 +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." diff --git a/data/support_effects/sword_mastery.tres b/data/support_effects/sword_mastery.tres new file mode 100644 index 0000000..1cb570e --- /dev/null +++ b/data/support_effects/sword_mastery.tres @@ -0,0 +1,6 @@ +[gd_resource type="Resource" script_class="SupportCardEffect" load_steps=2 format=3 uid="uid://bs4i85slalkgd"] + +[ext_resource type="Script" path="res://tcg/card/support_card_effect.gd" id="1_43nry"] + +[resource] +script = ExtResource("1_43nry") From fc70d205b3f479b0a46042370b1cb2bb70906b3c Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 05:00:37 +0700 Subject: [PATCH 02/17] feat: implement support cards - insurance - absorb - tanker - lifesteal - sword mastery - invisibility - potion - all out attack --- data/cards/support/absorb.tres | 11 ++-- data/cards/support/all_out_attack.tres | 9 +-- data/cards/support/energy_booster.tres | 9 +-- data/cards/support/insurance.tres | 9 +-- data/cards/support/invisibility.tres | 9 +-- data/cards/support/lifesteal.tres | 9 +-- data/cards/support/negate.tres | 9 +-- data/cards/support/potion.tres | 11 ++-- data/cards/support/reflection.tres | 9 +-- data/cards/support/sword_mastery.tres | 9 +-- data/cards/support/tanker.tres | 9 +-- tcg/card/card.gd | 2 +- tcg/card/implemented_support_card.gd | 4 ++ tcg/card/support_card.gd | 1 - tcg/match/match_manager.gd | 88 ++++++++++++++------------ 15 files changed, 110 insertions(+), 88 deletions(-) create mode 100644 tcg/card/implemented_support_card.gd diff --git a/data/cards/support/absorb.tres b/data/cards/support/absorb.tres index 705b320..8d7403c 100644 --- a/data/cards/support/absorb.tres +++ b/data/cards/support/absorb.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://be01tdq1fxlct"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://cc0ebl4g4ffyk"] [ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_mhxdy"] -[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_x8k3o"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_f6hay"] [resource] -script = ExtResource("2_x8k3o") +script = ExtResource("2_f6hay") +scope = "turn" +magnitude = 0 type = "red" -priority = 0 -effects = Array[ExtResource("1_mhxdy")]([null]) +effects = Array[ExtResource("1_mhxdy")]([]) name = "Absorb" description = "Enemy damage converted to heal your Active Monster Field HP during this turn." diff --git a/data/cards/support/all_out_attack.tres b/data/cards/support/all_out_attack.tres index d69f64b..ec8850c 100644 --- a/data/cards/support/all_out_attack.tres +++ b/data/cards/support/all_out_attack.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://dgxcvdo6x6kst"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 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/support_card.gd" id="2_1tjl7"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_61mgn"] [resource] -script = ExtResource("2_1tjl7") +script = ExtResource("2_61mgn") +scope = "instant" +magnitude = 0 type = "green" -priority = 0 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." diff --git a/data/cards/support/energy_booster.tres b/data/cards/support/energy_booster.tres index c3e9de8..ea24a0b 100644 --- a/data/cards/support/energy_booster.tres +++ b/data/cards/support/energy_booster.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://c0grh1y65e0f3"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 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/support_card.gd" id="2_qqko6"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_iq88n"] [resource] -script = ExtResource("2_qqko6") +script = ExtResource("2_iq88n") +scope = "turn" +magnitude = 0 type = "green" -priority = 0 effects = Array[ExtResource("1_pkc1x")]([null]) name = "Energy Booster" description = "Add 1 additional Energy." diff --git a/data/cards/support/insurance.tres b/data/cards/support/insurance.tres index 4f53e44..5183f9f 100644 --- a/data/cards/support/insurance.tres +++ b/data/cards/support/insurance.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://dfocg5yfh22e8"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 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/support_card.gd" id="2_286ne"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_3ixor"] [resource] -script = ExtResource("2_286ne") +script = ExtResource("2_3ixor") +scope = "turn" +magnitude = 10 type = "red" -priority = 0 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." diff --git a/data/cards/support/invisibility.tres b/data/cards/support/invisibility.tres index c0a3499..2b917fb 100644 --- a/data/cards/support/invisibility.tres +++ b/data/cards/support/invisibility.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://by4yg81uqti3u"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 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/support_card.gd" id="2_hsvj6"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_6c2xo"] [resource] -script = ExtResource("2_hsvj6") +script = ExtResource("2_6c2xo") +scope = "turn" +magnitude = 0 type = "green" -priority = 0 effects = Array[ExtResource("1_5tnpm")]([null]) name = "Invisibility" description = "Ignore any damage to your monster in this turn." diff --git a/data/cards/support/lifesteal.tres b/data/cards/support/lifesteal.tres index 26aa830..726912d 100644 --- a/data/cards/support/lifesteal.tres +++ b/data/cards/support/lifesteal.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://bcrlaam8uq6xt"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://bcrlaam8uq6xt"] [ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_b33y4"] -[ext_resource type="Script" path="res://tcg/card/support_card.gd" id="2_qww3m"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_khaf1"] [resource] -script = ExtResource("2_qww3m") +script = ExtResource("2_khaf1") +scope = "turn" +magnitude = 0 type = "green" -priority = 0 effects = Array[ExtResource("1_b33y4")]([null]) name = "Lifesteal" description = "During this turn your attack also heals your HP." diff --git a/data/cards/support/negate.tres b/data/cards/support/negate.tres index 1c634cd..38707fc 100644 --- a/data/cards/support/negate.tres +++ b/data/cards/support/negate.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://cl0jcer7o04uc"] +[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/support_card.gd" id="2_v8fdj"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_tr5ug"] [resource] -script = ExtResource("2_v8fdj") +script = ExtResource("2_tr5ug") +scope = "turn" +magnitude = 0 type = "red" -priority = 1 effects = Array[ExtResource("1_awvxv")]([null]) name = "Negate" description = "Cancel 1 of the Support Card played by your opponent. This card will always be played last." diff --git a/data/cards/support/potion.tres b/data/cards/support/potion.tres index 96ed2d7..7137c77 100644 --- a/data/cards/support/potion.tres +++ b/data/cards/support/potion.tres @@ -1,9 +1,8 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=6 format=3 uid="uid://4eod3m0vc5a8"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=5 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/support_card.gd" id="3_6r4k4"] -[ext_resource type="Texture2D" uid="uid://rh3aswb0p7ri" path="res://assets/energy.png" id="3_kyx3v"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="3_at5nt"] [sub_resource type="Resource" id="Resource_88lmk"] script = ExtResource("1_ujm0o") @@ -11,10 +10,10 @@ magnitude = 30 effect = ExtResource("2_k1cnl") [resource] -script = ExtResource("3_6r4k4") +script = ExtResource("3_at5nt") +scope = "turn" +magnitude = 30 type = "green" -priority = 0 effects = Array[ExtResource("1_ujm0o")]([SubResource("Resource_88lmk")]) name = "Potion" description = "Heal 30 HP" -icon = ExtResource("3_kyx3v") diff --git a/data/cards/support/reflection.tres b/data/cards/support/reflection.tres index 1833aad..b87a630 100644 --- a/data/cards/support/reflection.tres +++ b/data/cards/support/reflection.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://c1gsrru1wa6ao"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 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/support_card.gd" id="2_fliii"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_igbok"] [resource] -script = ExtResource("2_fliii") +script = ExtResource("2_igbok") +scope = "turn" +magnitude = 0 type = "red" -priority = 0 effects = Array[ExtResource("1_mk2or")]([null]) name = "Reflection" description = "Enemy got the same amount of damage as our monster in this turn." diff --git a/data/cards/support/sword_mastery.tres b/data/cards/support/sword_mastery.tres index 77eee88..1d48401 100644 --- a/data/cards/support/sword_mastery.tres +++ b/data/cards/support/sword_mastery.tres @@ -1,8 +1,8 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=5 format=3 uid="uid://2xeb6keaoabo"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=5 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/support_card.gd" id="2_vp8a3"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="3_37rh4"] [sub_resource type="Resource" id="Resource_wwv02"] script = ExtResource("1_y6yvj") @@ -10,9 +10,10 @@ magnitude = 20 effect = ExtResource("2_omhdb") [resource] -script = ExtResource("2_vp8a3") +script = ExtResource("3_37rh4") +scope = "monster" +magnitude = 20 type = "green" -priority = 0 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." diff --git a/data/cards/support/tanker.tres b/data/cards/support/tanker.tres index c51cbf2..7a207b4 100644 --- a/data/cards/support/tanker.tres +++ b/data/cards/support/tanker.tres @@ -1,12 +1,13 @@ -[gd_resource type="Resource" script_class="SupportCard" load_steps=3 format=3 uid="uid://dsmrqyxt8mdp5"] +[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 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/support_card.gd" id="2_m4ahe"] +[ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_d0adk"] [resource] -script = ExtResource("2_m4ahe") +script = ExtResource("2_d0adk") +scope = "turn" +magnitude = 0 type = "red" -priority = 0 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." diff --git a/tcg/card/card.gd b/tcg/card/card.gd index e14ff41..6fd69f3 100644 --- a/tcg/card/card.gd +++ b/tcg/card/card.gd @@ -2,7 +2,7 @@ extends Resource class_name Card @export var name: String -@export var description: String +@export_multiline var description: String @export var icon: Texture2D var id: String: diff --git a/tcg/card/implemented_support_card.gd b/tcg/card/implemented_support_card.gd new file mode 100644 index 0000000..9806f1c --- /dev/null +++ b/tcg/card/implemented_support_card.gd @@ -0,0 +1,4 @@ +extends SupportCard +class_name ImplementedSupportCard + +@export_enum("instant", "turn", "monster", "match") var scope = "instant" diff --git a/tcg/card/support_card.gd b/tcg/card/support_card.gd index 8ff5e3b..68eeba4 100644 --- a/tcg/card/support_card.gd +++ b/tcg/card/support_card.gd @@ -2,5 +2,4 @@ extends Card class_name SupportCard @export_enum("red", "green") var type = "green" -@export var priority: int = 0 @export var effects: Array[SupportCardEffectInstance] = [null] diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index 1bff5e2..1a12147 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -22,9 +22,6 @@ 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 @@ -38,8 +35,7 @@ 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] - - var first_monster = deck_shuffled.filter(func (card): return card is MonsterCard)[0] + 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) var zero_idx_card = deck_shuffled.pop_at(0) @@ -49,6 +45,7 @@ func init(decks: Dictionary, actual_p1_id: int, actual_p2_id: int): 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) @@ -75,8 +72,6 @@ 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] @@ -89,38 +84,48 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: 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 - events.append_array(_resolve_support_card_effects(player, card)) + var executed_instant_effects_events = _execute_support_card_immediate_effects(player, card) + player.active_support_cards.append(card) + events.append_array(executed_instant_effects_events) phase = Match.Phase.RPS Match.Phase.RPS: + var damage_pairs = [] var tie = player_1_action.move == player_2_action.move var player_1_win = rps_wins[player_1_action.move] == player_2_action.move var player_2_win = rps_wins[player_2_action.move] == player_1_action.move if tie or player_1_win: - player_2.monster.health_delta -= player_1.monster.card.damage[player_1_action.move] + _resolve_damage_delta(player_1) + damage_pairs.append({"from": player_1, "to": player_2}) if tie or player_2_win: - player_1.monster.health_delta -= player_2.monster.card.damage[player_2_action.move] + _resolve_damage_delta(player_2) + damage_pairs.append({"from": player_2, "to": player_1}) + for pair in damage_pairs: + var computed_damage = pair.from.monster.card.damage[pair.from.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.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.health_delta += computed_damage + pair.to.monster.health_delta -= computed_damage + phase = Match.Phase.SUPPORT_2 Match.Phase.SUPPORT_2: var support_cards = [] @@ -129,26 +134,32 @@ 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 - events.append_array(_resolve_support_card_effects(player, card)) + player.active_support_cards.append(played_card) + events.append_array(_execute_support_card_immediate_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 - player.active_support_cards = [] + var card_expires_with_monster = func(card): return card is ImplementedSupportCard and card.scope == 'monster' + player.active_support_cards = player.active_support_cards.filter(card_expires_with_monster) events.append(EventMonsterDied.new(player.id)) else: player.monster.health += player.monster.health_delta @@ -157,11 +168,15 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: if drawn_card: player.hand.append(drawn_card) events.append(EventCardDrawn.new(player.id, drawn_card)) - var players_without_monster = players.values().filter(func (player): return player.monster == null) + + var card_expires_this_turn = func(card): return card is ImplementedSupportCard and card.scope == 'turn' + player.active_support_cards = player.active_support_cards.filter(card_expires_this_turn) + + var players_without_monster = players.values().filter(func(player): return player.monster == null) if players_without_monster.size() == 0: phase = Match.Phase.SUPPORT_1 elif players_without_monster.all( - func (player): return player.hand.any(func (it): return it is MonsterCard and it.energy_cost <= player.energy) + func(player): return player.hand.any(func(it): return it is MonsterCard and it.energy_cost <= player.energy) ): phase = Match.Phase.SUMMON else: @@ -175,24 +190,19 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: func _monster_from_card(card: MonsterCard) -> MatchMonster: return MatchMonster.new(card, card.base_health, 0) -func _resolve_support_card_effects(player: MatchPlayer, card: SupportCard) -> Array[Event]: +func _execute_support_card_immediate_effects(player: MatchPlayer, card: SupportCard) -> Array[Event]: var events: Array[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)) + if card is ImplementedSupportCard: + match card.id: + "potion": + player.monster.health_delta += card.magnitude + "energy_booster": + player.energy += card.magnitude + # events.append(Event) return events -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 +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 \ No newline at end of file From 064559130c92f89061f70ec2703ecea92bbce153 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 05:05:45 +0700 Subject: [PATCH 03/17] fix: add support card only if not instant --- tcg/match/match_manager.gd | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index 1a12147..4eb4128 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -101,8 +101,9 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: for played_card in support_cards: var player: MatchPlayer = played_card.player var card: SupportCard = played_card.card - var executed_instant_effects_events = _execute_support_card_immediate_effects(player, card) - player.active_support_cards.append(card) + if played_card is ImplementedSupportCard and played_card.scope != 'instant' + player.active_support_cards.append(played_card) + var executed_instant_effects_events = _execute_support_card_instant_effects(player, card) events.append_array(executed_instant_effects_events) phase = Match.Phase.RPS Match.Phase.RPS: @@ -145,8 +146,9 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: for played_card in support_cards: var player: MatchPlayer = played_card.player var card: SupportCard = played_card.card - player.active_support_cards.append(played_card) - events.append_array(_execute_support_card_immediate_effects(player, card)) + if played_card is ImplementedSupportCard and played_card.scope != 'instant' + player.active_support_cards.append(played_card) + events.append_array(_execute_support_card_instant_effects(player, card)) for player: MatchPlayer in players.values(): if _player_has_active_support_card(player, "absorb") and player.monster.health_delta < 0: @@ -190,7 +192,7 @@ 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_immediate_effects(player: MatchPlayer, card: SupportCard) -> Array[Event]: +func _execute_support_card_instant_effects(player: MatchPlayer, card: SupportCard) -> Array[Event]: var events: Array[Event] if card is ImplementedSupportCard: match card.id: From ca9c7b8e50f048d5f1df4dc086fd75171cdcdf76 Mon Sep 17 00:00:00 2001 From: kennetha123 Date: Sun, 26 Jan 2025 06:31:06 +0700 Subject: [PATCH 04/17] fix: minor spelling mistake --- cards.tres | 2 +- data/cards/support/potion.tres | 3 +-- demo_game.tscn | 4 ++-- tcg/match/match_manager.gd | 6 +++--- ui/card_template/monster_card.tscn | 2 +- ui/card_template/support_card_red.tscn | 2 +- 6 files changed, 9 insertions(+), 10 deletions(-) diff --git a/cards.tres b/cards.tres index e5f7591..6222ae9 100644 --- a/cards.tres +++ b/cards.tres @@ -1,4 +1,4 @@ -[gd_resource type="Theme" load_steps=2 format=3 uid="uid://qe383ytjm3v"] +[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"] diff --git a/data/cards/support/potion.tres b/data/cards/support/potion.tres index 7137c77..926535b 100644 --- a/data/cards/support/potion.tres +++ b/data/cards/support/potion.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=5 format=3 uid="uid://4eod3m0vc5a8"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=5 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"] @@ -12,7 +12,6 @@ effect = ExtResource("2_k1cnl") [resource] script = ExtResource("3_at5nt") scope = "turn" -magnitude = 30 type = "green" effects = Array[ExtResource("1_ujm0o")]([SubResource("Resource_88lmk")]) name = "Potion" diff --git a/demo_game.tscn b/demo_game.tscn index d4c8e2d..83eaf33 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=3 uid="uid://l2ehohbd1xhk"] +[gd_scene load_steps=12 format=3 uid="uid://bgc0u117jqyr1"] [ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] [ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] @@ -6,7 +6,7 @@ [ext_resource type="PackedScene" uid="uid://cikstg43mudkn" path="res://tcg/match/match_manager.tscn" id="3_3yhrl"] [ext_resource type="Resource" uid="uid://cs7q8i7bvohmj" path="res://data/cards/monster/capytain.tres" id="3_we1tk"] [ext_resource type="Resource" uid="uid://4eod3m0vc5a8" path="res://data/cards/support/potion.tres" id="4_kkhfk"] -[ext_resource type="Resource" uid="uid://deo8mj887rfx1" path="res://data/cards/monster/axoluna.tres" id="5_3cm5x"] +[ext_resource type="Resource" uid="uid://di76avwc0gn8e" path="res://data/cards/monster/axoluna.tres" id="5_3cm5x"] [ext_resource type="PackedScene" uid="uid://bhrelvt51cbp2" path="res://ui/card_template/monster_card.tscn" id="7_4ah45"] [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"] diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index 4eb4128..fa6e724 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -101,7 +101,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: for played_card in support_cards: var player: MatchPlayer = played_card.player var card: SupportCard = played_card.card - if played_card is ImplementedSupportCard and played_card.scope != 'instant' + if played_card is ImplementedSupportCard and played_card.scope != 'instant': player.active_support_cards.append(played_card) var executed_instant_effects_events = _execute_support_card_instant_effects(player, card) events.append_array(executed_instant_effects_events) @@ -146,7 +146,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: for played_card in support_cards: var player: MatchPlayer = played_card.player var card: SupportCard = played_card.card - if played_card is ImplementedSupportCard and played_card.scope != 'instant' + if played_card is ImplementedSupportCard and played_card.scope != 'instant': player.active_support_cards.append(played_card) events.append_array(_execute_support_card_instant_effects(player, card)) @@ -207,4 +207,4 @@ func _player_has_active_support_card(player: MatchPlayer, card_id: String) -> bo 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 \ No newline at end of file + return player_2 if player.id == PLAYER_1_ID else player_1 diff --git a/ui/card_template/monster_card.tscn b/ui/card_template/monster_card.tscn index 9d8a797..04522b1 100644 --- a/ui/card_template/monster_card.tscn +++ b/ui/card_template/monster_card.tscn @@ -8,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" path="res://cards.tres" id="9_6x2vq"] +[ext_resource type="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="9_6x2vq"] [ext_resource type="Texture2D" uid="uid://cjmxetjq82rl2" path="res://assets/card_base/Pip.png" id="10_14hhn"] [ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="11_oy107"] [ext_resource type="Texture2D" uid="uid://bywa8qlwvcksd" path="res://assets/card_base/batu.png" id="12_a4kkh"] diff --git a/ui/card_template/support_card_red.tscn b/ui/card_template/support_card_red.tscn index c84cdc5..60c9770 100644 --- a/ui/card_template/support_card_red.tscn +++ b/ui/card_template/support_card_red.tscn @@ -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" path="res://cards.tres" id="7_fp6ys"] +[ext_resource type="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="7_fp6ys"] [ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="9_vilw6"] [ext_resource type="Texture2D" uid="uid://rh3aswb0p7ri" path="res://assets/energy.png" id="10_2t0ey"] From 64e79704bf832a9241839a13b5d36992311bbe97 Mon Sep 17 00:00:00 2001 From: kennetha123 Date: Sun, 26 Jan 2025 07:15:58 +0700 Subject: [PATCH 05/17] fix: minor spelling mistakes --- data/cards/support/absorb.tres | 3 +-- data/cards/support/all_out_attack.tres | 3 +-- data/cards/support/energy_booster.tres | 3 +-- data/cards/support/insurance.tres | 3 +-- data/cards/support/lifesteal.tres | 3 +-- data/cards/support/sword_mastery.tres | 3 +-- demo_game.tscn | 13 +++++++++--- player_side.gd | 8 ++++---- tcg/match/match_manager.gd | 28 +++++++++++--------------- 9 files changed, 32 insertions(+), 35 deletions(-) diff --git a/data/cards/support/absorb.tres b/data/cards/support/absorb.tres index 8d7403c..ef6568c 100644 --- a/data/cards/support/absorb.tres +++ b/data/cards/support/absorb.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://cc0ebl4g4ffyk"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 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"] @@ -6,7 +6,6 @@ [resource] script = ExtResource("2_f6hay") scope = "turn" -magnitude = 0 type = "red" effects = Array[ExtResource("1_mhxdy")]([]) name = "Absorb" diff --git a/data/cards/support/all_out_attack.tres b/data/cards/support/all_out_attack.tres index ec8850c..35814a9 100644 --- a/data/cards/support/all_out_attack.tres +++ b/data/cards/support/all_out_attack.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://dgxcvdo6x6kst"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 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"] @@ -6,7 +6,6 @@ [resource] script = ExtResource("2_61mgn") scope = "instant" -magnitude = 0 type = "green" effects = Array[ExtResource("1_fd50n")]([null]) name = "All-Out Attack" diff --git a/data/cards/support/energy_booster.tres b/data/cards/support/energy_booster.tres index ea24a0b..bf64881 100644 --- a/data/cards/support/energy_booster.tres +++ b/data/cards/support/energy_booster.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://c0grh1y65e0f3"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 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"] @@ -6,7 +6,6 @@ [resource] script = ExtResource("2_iq88n") scope = "turn" -magnitude = 0 type = "green" effects = Array[ExtResource("1_pkc1x")]([null]) name = "Energy Booster" diff --git a/data/cards/support/insurance.tres b/data/cards/support/insurance.tres index 5183f9f..e63e98f 100644 --- a/data/cards/support/insurance.tres +++ b/data/cards/support/insurance.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://dfocg5yfh22e8"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 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"] @@ -6,7 +6,6 @@ [resource] script = ExtResource("2_3ixor") scope = "turn" -magnitude = 10 type = "red" effects = Array[ExtResource("1_gtyqr")]([null]) name = "Insurance" diff --git a/data/cards/support/lifesteal.tres b/data/cards/support/lifesteal.tres index 726912d..79a4497 100644 --- a/data/cards/support/lifesteal.tres +++ b/data/cards/support/lifesteal.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://bcrlaam8uq6xt"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 format=3 uid="uid://bcrlaam8uq6xt"] [ext_resource type="Script" path="res://tcg/card/support_card_effect_instance.gd" id="1_b33y4"] [ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="2_khaf1"] @@ -6,7 +6,6 @@ [resource] script = ExtResource("2_khaf1") scope = "turn" -magnitude = 0 type = "green" effects = Array[ExtResource("1_b33y4")]([null]) name = "Lifesteal" diff --git a/data/cards/support/sword_mastery.tres b/data/cards/support/sword_mastery.tres index 1d48401..fdb68c0 100644 --- a/data/cards/support/sword_mastery.tres +++ b/data/cards/support/sword_mastery.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=5 format=3 uid="uid://2xeb6keaoabo"] +[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=5 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"] @@ -12,7 +12,6 @@ effect = ExtResource("2_omhdb") [resource] script = ExtResource("3_37rh4") scope = "monster" -magnitude = 20 type = "green" effects = Array[ExtResource("1_y6yvj")]([SubResource("Resource_wwv02")]) name = "Sword Mastery" diff --git a/demo_game.tscn b/demo_game.tscn index 83eaf33..bfff989 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=3 uid="uid://bgc0u117jqyr1"] +[gd_scene load_steps=19 format=3 uid="uid://bgc0u117jqyr1"] [ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] [ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] @@ -7,10 +7,17 @@ [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://di76avwc0gn8e" 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"] [node name="DemoGame" type="Control"] layout_mode = 3 @@ -20,8 +27,8 @@ 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("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")]) +player_1_deck = Array[ExtResource("2_xuft0")]([ExtResource("3_we1tk"), ExtResource("4_kkhfk"), ExtResource("5_3cm5x"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd")]) +player_2_deck = Array[ExtResource("2_xuft0")]([ExtResource("12_xqqfn"), ExtResource("4_kkhfk"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd"), ExtResource("5_3cm5x")]) [node name="Own" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label")] layout_mode = 1 diff --git a/player_side.gd b/player_side.gd index 5bfcd9e..21b4a04 100644 --- a/player_side.gd +++ b/player_side.gd @@ -46,14 +46,14 @@ func _on_update(transition): return energy_label.text = "Energy: " + str(player.energy) - if match_manager.support_cards_1.has(player): + if match_manager.players[player.id].active_support_cards.size() > 0: support1_green.visible = true - support1_green.card = match_manager.support_cards_1[player] + support1_green.card = match_manager.players[player.id].active_support_cards[0] else: support1_green.visible = false - if match_manager.support_cards_2.has(player): - var card: SupportCard = match_manager.support_cards_2[player] + 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 diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index fa6e724..6ec765d 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -35,14 +35,12 @@ 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) - 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.push_back(first_monster) - deck_shuffled.shuffle() players[player_id] = MatchPlayer.new(player_id, deck_shuffled) @@ -97,12 +95,11 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: "card": 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 played_card is ImplementedSupportCard and played_card.scope != 'instant': - player.active_support_cards.append(played_card) + if card is ImplementedSupportCard and card.scope != 'instant': + player.active_support_cards.append(card) var executed_instant_effects_events = _execute_support_card_instant_effects(player, card) events.append_array(executed_instant_effects_events) phase = Match.Phase.RPS @@ -116,7 +113,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: 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[pair.from.move] + 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) @@ -142,12 +139,11 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: "card": 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 played_card is ImplementedSupportCard and played_card.scope != 'instant': - player.active_support_cards.append(played_card) + if card is ImplementedSupportCard and card.scope != 'instant': + player.active_support_cards.append(card) events.append_array(_execute_support_card_instant_effects(player, card)) for player: MatchPlayer in players.values(): @@ -161,10 +157,10 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: 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(card_expires_with_monster) + player.active_support_cards = player.active_support_cards.filter(func (card): return not card_expires_with_monster.call(card)) events.append(EventMonsterDied.new(player.id)) else: - player.monster.health += player.monster.health_delta + player.monster.health = monster_final_health player.monster.health_delta = 0 var drawn_card = player.deck.pop_back() if drawn_card: @@ -172,7 +168,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: 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(card_expires_this_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) if players_without_monster.size() == 0: @@ -197,9 +193,9 @@ func _execute_support_card_instant_effects(player: MatchPlayer, card: SupportCar if card is ImplementedSupportCard: match card.id: "potion": - player.monster.health_delta += card.magnitude + player.monster.health_delta += 20 "energy_booster": - player.energy += card.magnitude + player.energy += 1 # events.append(Event) return events From 3220f4937f7d5cd028d58453907d7bc323c66372 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 07:31:48 +0700 Subject: [PATCH 06/17] fix: grammar issue --- main.tscn | 2 +- tcg/match/match_manager.gd | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main.tscn b/main.tscn index e0e520e..46481fe 100644 --- a/main.tscn +++ b/main.tscn @@ -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://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"] layout_mode = 3 diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index 6ec765d..647f4ce 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -117,11 +117,11 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: 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.health_delta -= rps.min() + 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.health_delta += computed_damage + pair.from.monster.health_delta += computed_damage pair.to.monster.health_delta -= computed_damage phase = Match.Phase.SUPPORT_2 From 46e4ba0fbbd843b78cc461d81ee6498319b6b70f Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 09:48:01 +0700 Subject: [PATCH 07/17] feat: monster card --- assets/card_base/batu.png | 4 +- assets/card_base/gunting.png | 4 +- assets/card_base/kertas.png | 4 +- ui/card_template/monster_card.gd | 2 +- ui/card_template/monster_card.tscn | 196 +++++++++++++++++------------ 5 files changed, 125 insertions(+), 85 deletions(-) diff --git a/assets/card_base/batu.png b/assets/card_base/batu.png index 7899aa9..8d1dc40 100644 --- a/assets/card_base/batu.png +++ b/assets/card_base/batu.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3ebc26aaf3c87de9ce48e9a4f9e22db8944b9c304f9dbda9cf21c3636f013e9 -size 24379 +oid sha256:3073496f2b5cb651d0d6d03351a6f8392a23924d01472ab5d175ef150667e17e +size 25869 diff --git a/assets/card_base/gunting.png b/assets/card_base/gunting.png index 553ae4d..c069201 100644 --- a/assets/card_base/gunting.png +++ b/assets/card_base/gunting.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5679d2d3e778ec2d3142eaf0f5603b3a144e87f7f26e1e2d78974462db69f75 -size 33308 +oid sha256:4d14202c9b5043bdf561e8b9e6e899b0d964eed347f5d7fdb71cb5f6286a1561 +size 24283 diff --git a/assets/card_base/kertas.png b/assets/card_base/kertas.png index 6507ea0..c49b7e1 100644 --- a/assets/card_base/kertas.png +++ b/assets/card_base/kertas.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3aa28478cb7241ff59fe191f1aca345eccd60d8a9cb8f9c1058874b3fc0606ff -size 17766 +oid sha256:52a0024d95f80cda1eea5a8dcdf7cd9f2204f73409ce8ae4999f75dfd402f3a3 +size 20378 diff --git a/ui/card_template/monster_card.gd b/ui/card_template/monster_card.gd index 4e72542..8c1ca87 100644 --- a/ui/card_template/monster_card.gd +++ b/ui/card_template/monster_card.gd @@ -21,7 +21,7 @@ func show_monster(monster: MatchMonster): return name_label.text = monster.card.id - health_label.text = "HP %d" % [monster.health] + health_label.text = "HP %d/%d" % [monster.health, monster.card.base_health] icon_texture_rect.texture = monster.card.icon paper_damage.text = str(monster.card.paper) diff --git a/ui/card_template/monster_card.tscn b/ui/card_template/monster_card.tscn index 04522b1..d373404 100644 --- a/ui/card_template/monster_card.tscn +++ b/ui/card_template/monster_card.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=15 format=3 uid="uid://bhrelvt51cbp2"] +[gd_scene load_steps=14 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"] @@ -33,15 +32,9 @@ 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/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") +paper_damage = NodePath("MarginContainer/HBoxContainer/Rock2/PaperLabel") +scissors_damage = NodePath("MarginContainer/HBoxContainer/Rock3/ScissorsLabel") +rock_damage = NodePath("MarginContainer/HBoxContainer/Rock/RockLabel") [node name="Frame" type="TextureRect" parent="."] layout_mode = 1 @@ -121,12 +114,13 @@ stretch_mode = 5 [node name="EnergyStarsContainer" type="HBoxContainer" parent="MarginContainer"] unique_name_in_owner = true layout_mode = 0 -offset_left = 141.0 -offset_top = 55.0 -offset_right = 200.0 -offset_bottom = 70.0 +offset_left = 100.0 +offset_top = 54.0 +offset_right = 197.0 +offset_bottom = 69.0 +alignment = 2 -[node name="TextureRect3" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +[node name="TextureRect" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] layout_mode = 2 texture = ExtResource("8_ophhb") expand_mode = 3 @@ -138,7 +132,19 @@ texture = ExtResource("8_ophhb") expand_mode = 3 stretch_mode = 5 -[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 +stretch_mode = 5 + +[node name="TextureRect4" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] +layout_mode = 2 +texture = ExtResource("8_ophhb") +expand_mode = 3 +stretch_mode = 5 + +[node name="TextureRect5" type="TextureRect" parent="MarginContainer/EnergyStarsContainer"] layout_mode = 2 texture = ExtResource("8_ophhb") expand_mode = 3 @@ -156,7 +162,7 @@ offset_bottom = 80.0 grow_horizontal = 2 theme = ExtResource("9_6x2vq") theme_override_font_sizes/font_size = 16 -text = "HP 80" +text = "HP 80/100" vertical_alignment = 1 [node name="MonsterNameLabel" type="Label" parent="MarginContainer"] @@ -185,6 +191,7 @@ 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 @@ -205,77 +212,110 @@ text = "#01" horizontal_alignment = 1 vertical_alignment = 1 -[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="PaperDamage" type="Label" parent="MarginContainer/Paper"] -unique_name_in_owner = true +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] 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 +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 = 20 -text = "10" -vertical_alignment = 1 +theme_override_font_sizes/font_size = 24 +text = "100" +horizontal_alignment = 1 +vertical_alignment = 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 +[node name="Rock" type="TextureRect" parent="MarginContainer/HBoxContainer/Rock"] +layout_mode = 2 anchor_right = 1.0 -offset_left = 48.0 -offset_top = 32.0 -offset_right = -32.0 -offset_bottom = 73.0 +anchor_bottom = 1.0 +offset_top = 30.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 +grow_vertical = 2 texture = ExtResource("12_a4kkh") expand_mode = 1 stretch_mode = 5 -[node name="RockDamage" type="Label" parent="MarginContainer/Rock"] -unique_name_in_owner = true +[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 = 10 -anchor_right = 1.0 -offset_left = 48.0 -offset_top = 32.0 -offset_right = -32.0 -offset_bottom = 73.0 +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 = 20 +theme_override_font_sizes/font_size = 24 text = "10" -vertical_alignment = 1 +horizontal_alignment = 1 +vertical_alignment = 2 + +[node name="Paper" type="TextureRect" parent="MarginContainer/HBoxContainer/Rock2"] +layout_mode = 2 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 30.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("14_gm7k7") +expand_mode = 1 +stretch_mode = 5 + +[node name="Rock3" type="Control" parent="MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(64, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="ScissorsLabel" type="Label" parent="MarginContainer/HBoxContainer/Rock3"] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -32.0 +offset_right = 32.0 +offset_bottom = 26.0 +grow_horizontal = 2 +theme = ExtResource("9_6x2vq") +theme_override_font_sizes/font_size = 24 +text = "10" +horizontal_alignment = 1 +vertical_alignment = 2 + +[node name="Scissors" type="TextureRect" parent="MarginContainer/HBoxContainer/Rock3"] +layout_mode = 2 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 30.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("13_ifoc6") +expand_mode = 1 +stretch_mode = 5 From 5395f971cb3fc6b20d195b47e46eaba4fa88d241 Mon Sep 17 00:00:00 2001 From: kennetha123 Date: Sun, 26 Jan 2025 10:36:55 +0700 Subject: [PATCH 08/17] feat: rps button with texture --- demo_game.tscn | 42 ++++++++++++++++++++++++++++++++++++------ player_side.gd | 42 ++++++++++++++++++++++++++++++------------ 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/demo_game.tscn b/demo_game.tscn index bfff989..0d96d3a 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://bgc0u117jqyr1"] +[gd_scene load_steps=22 format=3 uid="uid://bgc0u117jqyr1"] [ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] [ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] @@ -18,6 +18,9 @@ [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://b0pclmv0j0r12" path="res://assets/card_base/kertas.png" id="18_gwpy8"] +[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 @@ -30,7 +33,7 @@ script = ExtResource("1_jn16u") player_1_deck = Array[ExtResource("2_xuft0")]([ExtResource("3_we1tk"), ExtResource("4_kkhfk"), ExtResource("5_3cm5x"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd")]) player_2_deck = Array[ExtResource("2_xuft0")]([ExtResource("12_xqqfn"), ExtResource("4_kkhfk"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd"), ExtResource("5_3cm5x")]) -[node name="Own" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label")] +[node name="Own" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label", "rps_button_container")] layout_mode = 1 anchor_top = 0.5 anchor_right = 1.0 @@ -44,6 +47,8 @@ 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) @@ -109,12 +114,14 @@ text = "Energy:" [node name="Hand" type="HBoxContainer" parent="Own"] layout_mode = 1 -anchors_preset = 12 +anchors_preset = 7 +anchor_left = 0.5 anchor_top = 1.0 -anchor_right = 1.0 +anchor_right = 0.5 anchor_bottom = 1.0 -offset_top = -240.0 -offset_bottom = 130.0 +offset_left = -446.0 +offset_top = -370.0 +offset_right = 446.0 grow_horizontal = 2 grow_vertical = 0 pivot_offset = Vector2(0, 150) @@ -145,6 +152,26 @@ grow_horizontal = 2 text = "Incoming Damage: 0" horizontal_alignment = 1 +[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 @@ -279,6 +306,9 @@ text = "Start Game" [connection signal="play_card" from="Own" to="." method="_on_own_play_card"] [connection signal="rps_move" from="Own" to="." method="_on_own_rps_move"] +[connection signal="button_down" from="Own/HBoxContainer/KertasButton" to="Own" method="_on_kertas_button_button_down"] +[connection signal="button_down" from="Own/HBoxContainer/GuntingButton" to="Own" method="_on_gunting_button_button_down"] +[connection signal="button_down" from="Own/HBoxContainer/BatuButton" to="Own" method="_on_batu_button_button_down"] [connection signal="play_card" from="Opponent" to="." method="_on_opponent_play_card"] [connection signal="rps_move" from="Opponent" to="." method="_on_opponent_rps_move"] [connection signal="button_up" from="StartGameButton" to="." method="_on_start_game_button_button_up"] diff --git a/player_side.gd b/player_side.gd index 21b4a04..227ae3b 100644 --- a/player_side.gd +++ b/player_side.gd @@ -9,6 +9,8 @@ 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" @@ -131,21 +133,37 @@ func _on_update(transition): btn.left_clicked.connect(func (): _pop_this_card(btn) play_card.emit(card)) - - if match_manager.phase == Match.Phase.RPS: - for move in ["rock", "paper", "scissors"]: - - if !show_buttons: - continue - - var btn = Button.new() - btn.text = move - btn.button_up.connect(func (): rps_move.emit(move)) - deck.add_child(btn) - + + 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 _pop_this_card(control: Control): if selected_card: selected_card.size_flags_vertical = Control.SIZE_SHRINK_END control.size_flags_vertical = Control.SIZE_SHRINK_BEGIN selected_card = control + + +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 From a0475c85887413729809d68dcc34dab1840688a7 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 10:59:39 +0700 Subject: [PATCH 09/17] feat: phase info on right hand side of the board --- demo_game.gd | 17 +++++++++++++- demo_game.tscn | 61 ++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/demo_game.gd b/demo_game.gd index fdf9321..10c92e5 100644 --- a/demo_game.gd +++ b/demo_game.gd @@ -8,7 +8,8 @@ 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 + +@onready var match_manager: MatchManager = $MatchManager @onready var own_side = $Own @onready var opponent_side = $Opponent @onready var start_game_btn = $StartGameButton @@ -30,6 +31,9 @@ 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 @@ -44,6 +48,7 @@ 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 @@ -59,6 +64,7 @@ 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) print("Phase: ", Match.phase_to_str(transition.from), " -> ", Match.phase_to_str(transition.to)) func _on_start_game_button_button_up() -> void: @@ -113,3 +119,12 @@ 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 diff --git a/demo_game.tscn b/demo_game.tscn index bfff989..42e110d 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://bgc0u117jqyr1"] +[gd_scene load_steps=20 format=3 uid="uid://bgc0u117jqyr1"] [ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] [ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] @@ -6,7 +6,7 @@ [ext_resource type="PackedScene" uid="uid://cikstg43mudkn" path="res://tcg/match/match_manager.tscn" id="3_3yhrl"] [ext_resource type="Resource" uid="uid://cs7q8i7bvohmj" path="res://data/cards/monster/capytain.tres" id="3_we1tk"] [ext_resource type="Resource" uid="uid://4eod3m0vc5a8" path="res://data/cards/support/potion.tres" id="4_kkhfk"] -[ext_resource type="Resource" uid="uid://di76avwc0gn8e" path="res://data/cards/monster/axoluna.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"] @@ -18,6 +18,7 @@ [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="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="19_3iovu"] [node name="DemoGame" type="Control"] layout_mode = 3 @@ -225,18 +226,6 @@ 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 @@ -277,6 +266,50 @@ 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)" + [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="play_card" from="Opponent" to="." method="_on_opponent_play_card"] From 0d261242b3263d9eae35be8d07cb8cc7dd389b53 Mon Sep 17 00:00:00 2001 From: kennetha123 Date: Sun, 26 Jan 2025 11:01:55 +0700 Subject: [PATCH 10/17] feat: energy decrease --- demo_game.tscn | 3 ++- player_side.gd | 2 +- tcg/match/match_manager.gd | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/demo_game.tscn b/demo_game.tscn index 0d96d3a..7f9d67d 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -107,8 +107,9 @@ layout_mode = 1 anchors_preset = 2 anchor_top = 1.0 anchor_bottom = 1.0 -offset_top = -23.0 +offset_top = -90.0 offset_right = 1152.0 +offset_bottom = -67.0 grow_vertical = 0 text = "Energy:" diff --git a/player_side.gd b/player_side.gd index 227ae3b..aec31f2 100644 --- a/player_side.gd +++ b/player_side.gd @@ -73,6 +73,7 @@ func _on_update(transition): monster_card_ui.visible = true monster_card_ui.show_monster(monster) 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]: @@ -113,7 +114,6 @@ 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) diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index 647f4ce..f77d424 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -79,6 +79,7 @@ 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: From 02ee129b42c4b8b5c55f25465d5e1a70445f3d51 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 11:07:08 +0700 Subject: [PATCH 11/17] merge: script changes --- player_side.gd | 44 +++++++++++++++++++++++++++----------- tcg/match/match_manager.gd | 1 + 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/player_side.gd b/player_side.gd index 21b4a04..aec31f2 100644 --- a/player_side.gd +++ b/player_side.gd @@ -9,6 +9,8 @@ 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" @@ -71,6 +73,7 @@ func _on_update(transition): monster_card_ui.visible = true monster_card_ui.show_monster(monster) 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]: @@ -111,7 +114,6 @@ 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) @@ -131,21 +133,37 @@ func _on_update(transition): btn.left_clicked.connect(func (): _pop_this_card(btn) play_card.emit(card)) - - if match_manager.phase == Match.Phase.RPS: - for move in ["rock", "paper", "scissors"]: - - if !show_buttons: - continue - - var btn = Button.new() - btn.text = move - btn.button_up.connect(func (): rps_move.emit(move)) - deck.add_child(btn) - + + 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 _pop_this_card(control: Control): if selected_card: selected_card.size_flags_vertical = Control.SIZE_SHRINK_END control.size_flags_vertical = Control.SIZE_SHRINK_BEGIN selected_card = control + + +func _on_kertas_button_button_down() -> void: + rps_move.emit("paper") + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + rps_button_container.get_node("KertasButton").modulate = Color.WHITE + + +func _on_gunting_button_button_down() -> void: + rps_move.emit("scissors") + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + rps_button_container.get_node("GuntingButton").modulate = Color.WHITE + + +func _on_batu_button_button_down() -> void: + rps_move.emit("rock") + for button: TextureButton in rps_button_container.get_children(): + button.modulate = rps_grayed_color + rps_button_container.get_node("BatuButton").modulate = Color.WHITE diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index 647f4ce..f77d424 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -79,6 +79,7 @@ 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: From 41a72709df3cdeb279399a9a4e260e35c6ff3b5c Mon Sep 17 00:00:00 2001 From: Kenshia <73539778+Kenshia@users.noreply.github.com> Date: Sun, 26 Jan 2025 11:14:32 +0700 Subject: [PATCH 12/17] feat: card hover --- player_side.gd | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/player_side.gd b/player_side.gd index aec31f2..1075011 100644 --- a/player_side.gd +++ b/player_side.gd @@ -23,6 +23,13 @@ var show_buttons: bool var signal_connected: bool var selected_card: Control +var hovering_cards_this_frame: Array[Control] = [] +var hovering_cards_duration: Dictionary = {} +const original_hover_position = 50 # hard coded idk what's a good way to find this value +const hover_animation_time = 0.1 +const hover_height_offset = -50 +const selected_height_offset = -100 + func attach(match_manager: MatchManager, show_buttons: bool = true): self.show_buttons = show_buttons self.match_manager = match_manager @@ -39,6 +46,7 @@ func _ready(): child.queue_free() func _on_update(transition): + hovering_cards_duration.clear() selected_card = null for child in deck.get_children(): @@ -87,6 +95,7 @@ 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: @@ -118,6 +127,7 @@ func _on_update(transition): 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)) deck.add_child(monster_card) elif card is SupportCard and card.type == "red": @@ -133,6 +143,7 @@ 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)) if rps_button_container: rps_button_container.visible = match_manager.phase == Match.Phase.RPS @@ -142,10 +153,48 @@ func _on_update(transition): func _pop_this_card(control: Control): if selected_card: - selected_card.size_flags_vertical = Control.SIZE_SHRINK_END + selected_card.position = Vector2(selected_card.position.x, original_hover_position) - 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: From abd2feaab8f2f9de669d3b791b2540161a83045e Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 11:26:09 +0700 Subject: [PATCH 13/17] feat: win-lose-tie at game end --- demo_game.gd | 5 +++++ demo_game.tscn | 20 ++++++++++++++++++++ tcg/match/event/event_game_ended.gd | 7 +++++++ tcg/match/match_manager.gd | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 tcg/match/event/event_game_ended.gd diff --git a/demo_game.gd b/demo_game.gd index 10c92e5..b3d2308 100644 --- a/demo_game.gd +++ b/demo_game.gd @@ -13,6 +13,7 @@ signal opponent_played_rts(move: String) @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 = {} @@ -65,6 +66,10 @@ 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: diff --git a/demo_game.tscn b/demo_game.tscn index a76e523..65b3c81 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -338,6 +338,26 @@ 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"] diff --git a/tcg/match/event/event_game_ended.gd b/tcg/match/event/event_game_ended.gd new file mode 100644 index 0000000..f9db6cc --- /dev/null +++ b/tcg/match/event/event_game_ended.gd @@ -0,0 +1,7 @@ +extends Event +class_name EventGameEnded + +var winner_player_id: int + +func _init(winner_player_id: int) -> void: + self.winner_player_id = winner_player_id diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index f77d424..9a25959 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -172,6 +172,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: 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( @@ -179,7 +180,11 @@ 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) From 7b6be434a86f5e55b7c5405e598187e1d2fbac6f Mon Sep 17 00:00:00 2001 From: kennetha123 Date: Sun, 26 Jan 2025 11:30:35 +0700 Subject: [PATCH 14/17] feat: add card images --- assets/card_base/illust bg 1.png | 3 +++ assets/card_base/illust bg 1.png.import | 34 ++++++++++++++++++++++++ assets/monster/Goldfish 2.png | 3 +++ assets/monster/Goldfish 2.png.import | 34 ++++++++++++++++++++++++ assets/monster/axolotl 3.png | 3 +++ assets/monster/axolotl 3.png.import | 34 ++++++++++++++++++++++++ assets/monster/capybara 1.png | 3 +++ assets/monster/capybara 1.png.import | 34 ++++++++++++++++++++++++ assets/monster/cat 3.png | 3 +++ assets/monster/cat 3.png.import | 34 ++++++++++++++++++++++++ assets/monster/duck 1.png | 3 +++ assets/monster/duck 1.png.import | 34 ++++++++++++++++++++++++ assets/monster/jellyfish 2.png | 3 +++ assets/monster/jellyfish 2.png.import | 34 ++++++++++++++++++++++++ assets/monster/penguing 2.png | 3 +++ assets/monster/penguing 2.png.import | 34 ++++++++++++++++++++++++ assets/monster/rabbit 1.png | 3 +++ assets/monster/rabbit 1.png.import | 34 ++++++++++++++++++++++++ assets/monster/whale 2.png | 3 +++ assets/monster/whale 2.png.import | 34 ++++++++++++++++++++++++ assets/support/Invisibility.png | 3 +++ assets/support/Invisibility.png.import | 34 ++++++++++++++++++++++++ assets/support/absorb.png | 3 +++ assets/support/absorb.png.import | 34 ++++++++++++++++++++++++ assets/support/all out attack.png | 3 +++ assets/support/all out attack.png.import | 34 ++++++++++++++++++++++++ assets/support/energy booster.png | 3 +++ assets/support/energy booster.png.import | 34 ++++++++++++++++++++++++ assets/support/insurance.png | 3 +++ assets/support/insurance.png.import | 34 ++++++++++++++++++++++++ assets/support/lifesteal.png | 3 +++ assets/support/lifesteal.png.import | 34 ++++++++++++++++++++++++ assets/support/potion.png | 3 +++ assets/support/potion.png.import | 34 ++++++++++++++++++++++++ assets/support/reflection.png | 3 +++ assets/support/reflection.png.import | 34 ++++++++++++++++++++++++ assets/support/sword mastery.png | 3 +++ assets/support/sword mastery.png.import | 34 ++++++++++++++++++++++++ assets/support/tanker.png | 3 +++ assets/support/tanker.png.import | 34 ++++++++++++++++++++++++ data/cards/monster/axoluna.tres | 6 ++--- data/cards/monster/bunnaut.tres | 4 ++- data/cards/monster/capytain.tres | 4 ++- data/cards/monster/cattogato.tres | 4 ++- data/cards/monster/gilli.tres | 4 ++- data/cards/monster/jellova.tres | 4 ++- data/cards/monster/orcava.tres | 4 ++- data/cards/monster/prankie.tres | 4 ++- data/cards/monster/quackle.tres | 4 ++- data/cards/support/absorb.tres | 4 ++- data/cards/support/all_out_attack.tres | 4 ++- data/cards/support/energy_booster.tres | 4 ++- data/cards/support/insurance.tres | 4 ++- data/cards/support/invisibility.tres | 5 ++-- data/cards/support/lifesteal.tres | 4 ++- data/cards/support/potion.tres | 4 ++- data/cards/support/reflection.tres | 5 ++-- data/cards/support/sword_mastery.tres | 4 ++- data/cards/support/tanker.tres | 5 ++-- demo_game.tscn | 10 ++++++- ui/card_template/support_card_green.tscn | 25 ++++++++--------- 61 files changed, 819 insertions(+), 37 deletions(-) create mode 100644 assets/card_base/illust bg 1.png create mode 100644 assets/card_base/illust bg 1.png.import create mode 100644 assets/monster/Goldfish 2.png create mode 100644 assets/monster/Goldfish 2.png.import create mode 100644 assets/monster/axolotl 3.png create mode 100644 assets/monster/axolotl 3.png.import create mode 100644 assets/monster/capybara 1.png create mode 100644 assets/monster/capybara 1.png.import create mode 100644 assets/monster/cat 3.png create mode 100644 assets/monster/cat 3.png.import create mode 100644 assets/monster/duck 1.png create mode 100644 assets/monster/duck 1.png.import create mode 100644 assets/monster/jellyfish 2.png create mode 100644 assets/monster/jellyfish 2.png.import create mode 100644 assets/monster/penguing 2.png create mode 100644 assets/monster/penguing 2.png.import create mode 100644 assets/monster/rabbit 1.png create mode 100644 assets/monster/rabbit 1.png.import create mode 100644 assets/monster/whale 2.png create mode 100644 assets/monster/whale 2.png.import create mode 100644 assets/support/Invisibility.png create mode 100644 assets/support/Invisibility.png.import create mode 100644 assets/support/absorb.png create mode 100644 assets/support/absorb.png.import create mode 100644 assets/support/all out attack.png create mode 100644 assets/support/all out attack.png.import create mode 100644 assets/support/energy booster.png create mode 100644 assets/support/energy booster.png.import create mode 100644 assets/support/insurance.png create mode 100644 assets/support/insurance.png.import create mode 100644 assets/support/lifesteal.png create mode 100644 assets/support/lifesteal.png.import create mode 100644 assets/support/potion.png create mode 100644 assets/support/potion.png.import create mode 100644 assets/support/reflection.png create mode 100644 assets/support/reflection.png.import create mode 100644 assets/support/sword mastery.png create mode 100644 assets/support/sword mastery.png.import create mode 100644 assets/support/tanker.png create mode 100644 assets/support/tanker.png.import diff --git a/assets/card_base/illust bg 1.png b/assets/card_base/illust bg 1.png new file mode 100644 index 0000000..712628d --- /dev/null +++ b/assets/card_base/illust bg 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4f66245934d9cb584395b647eab454b3e74351c3086b720bfaf3837c95d1dd2 +size 1744521 diff --git a/assets/card_base/illust bg 1.png.import b/assets/card_base/illust bg 1.png.import new file mode 100644 index 0000000..22253c2 --- /dev/null +++ b/assets/card_base/illust bg 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://6trhu2r7h6g3" +path="res://.godot/imported/illust bg 1.png-7d6e961f3fef1ad5d8dcf698718d9c23.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/card_base/illust bg 1.png" +dest_files=["res://.godot/imported/illust bg 1.png-7d6e961f3fef1ad5d8dcf698718d9c23.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/Goldfish 2.png b/assets/monster/Goldfish 2.png new file mode 100644 index 0000000..ec6bc6e --- /dev/null +++ b/assets/monster/Goldfish 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53c37fd23a318f64cdc2951918f4f4b06fa3a4d05ddb2b15c9fc722e4f217519 +size 108879 diff --git a/assets/monster/Goldfish 2.png.import b/assets/monster/Goldfish 2.png.import new file mode 100644 index 0000000..e14f3bd --- /dev/null +++ b/assets/monster/Goldfish 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0f5rg5eqyym1" +path="res://.godot/imported/Goldfish 2.png-20495c3132cec5d0b0f2eb9e1b6f168f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/Goldfish 2.png" +dest_files=["res://.godot/imported/Goldfish 2.png-20495c3132cec5d0b0f2eb9e1b6f168f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/axolotl 3.png b/assets/monster/axolotl 3.png new file mode 100644 index 0000000..940328c --- /dev/null +++ b/assets/monster/axolotl 3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe4eaa932ae0e0f7363269bd39412aaaa3796dfcbcf2e5054b9d6f9d2aa4b8b8 +size 116315 diff --git a/assets/monster/axolotl 3.png.import b/assets/monster/axolotl 3.png.import new file mode 100644 index 0000000..8658cea --- /dev/null +++ b/assets/monster/axolotl 3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wdyu7txs2ijg" +path="res://.godot/imported/axolotl 3.png-66300d813b5cc2dfc432414b14c1f8bc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/axolotl 3.png" +dest_files=["res://.godot/imported/axolotl 3.png-66300d813b5cc2dfc432414b14c1f8bc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/capybara 1.png b/assets/monster/capybara 1.png new file mode 100644 index 0000000..8eeddf2 --- /dev/null +++ b/assets/monster/capybara 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae0ced57dd24cc221bd9f4b161aef907bf17962294167e6817e60017d484f76e +size 130901 diff --git a/assets/monster/capybara 1.png.import b/assets/monster/capybara 1.png.import new file mode 100644 index 0000000..74346a4 --- /dev/null +++ b/assets/monster/capybara 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c72q2py2vj6j4" +path="res://.godot/imported/capybara 1.png-98187c93d8c784ac26a4fe6cdc81e3f0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/capybara 1.png" +dest_files=["res://.godot/imported/capybara 1.png-98187c93d8c784ac26a4fe6cdc81e3f0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/cat 3.png b/assets/monster/cat 3.png new file mode 100644 index 0000000..dcf2e11 --- /dev/null +++ b/assets/monster/cat 3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad0cffd46c57d81ee56f43a2adf5d9a6e154a6dc9b76ed7a876ebd5bf19ef3d +size 123755 diff --git a/assets/monster/cat 3.png.import b/assets/monster/cat 3.png.import new file mode 100644 index 0000000..9b1df2e --- /dev/null +++ b/assets/monster/cat 3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcusdaqfhlv1b" +path="res://.godot/imported/cat 3.png-a083e2d16032d32908b04a46259e2c6a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/cat 3.png" +dest_files=["res://.godot/imported/cat 3.png-a083e2d16032d32908b04a46259e2c6a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/duck 1.png b/assets/monster/duck 1.png new file mode 100644 index 0000000..e4710d0 --- /dev/null +++ b/assets/monster/duck 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4db0c8f285a1523ea1d3fa2e3e18c834d70b215930f7139fee3efa25ac4aeedd +size 100811 diff --git a/assets/monster/duck 1.png.import b/assets/monster/duck 1.png.import new file mode 100644 index 0000000..86cfcf2 --- /dev/null +++ b/assets/monster/duck 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ujke0x73f77b" +path="res://.godot/imported/duck 1.png-e7d6d398a984b9ae6ba8f33dfe27e9dd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/duck 1.png" +dest_files=["res://.godot/imported/duck 1.png-e7d6d398a984b9ae6ba8f33dfe27e9dd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/jellyfish 2.png b/assets/monster/jellyfish 2.png new file mode 100644 index 0000000..04ae99f --- /dev/null +++ b/assets/monster/jellyfish 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfd0f4cab6a3ed737816635416c9bb822e2b53028e35ea5cd79ba7e226a216ce +size 81602 diff --git a/assets/monster/jellyfish 2.png.import b/assets/monster/jellyfish 2.png.import new file mode 100644 index 0000000..6cd471a --- /dev/null +++ b/assets/monster/jellyfish 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cstwubbj8l8fr" +path="res://.godot/imported/jellyfish 2.png-d36c6543a46308145decdddd5ae9a63d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/jellyfish 2.png" +dest_files=["res://.godot/imported/jellyfish 2.png-d36c6543a46308145decdddd5ae9a63d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/penguing 2.png b/assets/monster/penguing 2.png new file mode 100644 index 0000000..2598f19 --- /dev/null +++ b/assets/monster/penguing 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a328047682a27c1b548405a2adf82738093c9a842e0c76defd7970cd178a5ac +size 101016 diff --git a/assets/monster/penguing 2.png.import b/assets/monster/penguing 2.png.import new file mode 100644 index 0000000..8f8858f --- /dev/null +++ b/assets/monster/penguing 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://deneyvmke3qyl" +path="res://.godot/imported/penguing 2.png-80094e4bcdb64d08cfd28547f5dd45c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/penguing 2.png" +dest_files=["res://.godot/imported/penguing 2.png-80094e4bcdb64d08cfd28547f5dd45c7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/rabbit 1.png b/assets/monster/rabbit 1.png new file mode 100644 index 0000000..023327d --- /dev/null +++ b/assets/monster/rabbit 1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:415cbcdf4136ad6a07b63f5aa055f84443f8909876858667708e0229b4795b68 +size 93375 diff --git a/assets/monster/rabbit 1.png.import b/assets/monster/rabbit 1.png.import new file mode 100644 index 0000000..ac94ff9 --- /dev/null +++ b/assets/monster/rabbit 1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cu0ivvtvryq64" +path="res://.godot/imported/rabbit 1.png-53666927d04c30fffb92370a7482b673.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/rabbit 1.png" +dest_files=["res://.godot/imported/rabbit 1.png-53666927d04c30fffb92370a7482b673.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/monster/whale 2.png b/assets/monster/whale 2.png new file mode 100644 index 0000000..cbf8df0 --- /dev/null +++ b/assets/monster/whale 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a704a38238c3991e1f0f3e250a988430393aa4b506ff7c72122a516c6dc0b139 +size 67821 diff --git a/assets/monster/whale 2.png.import b/assets/monster/whale 2.png.import new file mode 100644 index 0000000..29f0c19 --- /dev/null +++ b/assets/monster/whale 2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dw8cnu3lfblig" +path="res://.godot/imported/whale 2.png-8dca9b32eca20cb2feb31734e55de3f6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/monster/whale 2.png" +dest_files=["res://.godot/imported/whale 2.png-8dca9b32eca20cb2feb31734e55de3f6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/Invisibility.png b/assets/support/Invisibility.png new file mode 100644 index 0000000..1c77364 --- /dev/null +++ b/assets/support/Invisibility.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f65e230ede853aeba1650e8d569220585f3aa3a9d27f006e5a82ae300877b92b +size 135764 diff --git a/assets/support/Invisibility.png.import b/assets/support/Invisibility.png.import new file mode 100644 index 0000000..39e7e7a --- /dev/null +++ b/assets/support/Invisibility.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8hkgi1r8wpri" +path="res://.godot/imported/Invisibility.png-b1f5b6e24b6db1d63402e75c2d90b9f4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/Invisibility.png" +dest_files=["res://.godot/imported/Invisibility.png-b1f5b6e24b6db1d63402e75c2d90b9f4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/absorb.png b/assets/support/absorb.png new file mode 100644 index 0000000..fc4ee91 --- /dev/null +++ b/assets/support/absorb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ec3e0529bc2fef18223f893b2960a87b9b9ce827871a9d1440c9ac2d30d462 +size 238847 diff --git a/assets/support/absorb.png.import b/assets/support/absorb.png.import new file mode 100644 index 0000000..9a60646 --- /dev/null +++ b/assets/support/absorb.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cv5hjphfixv3o" +path="res://.godot/imported/absorb.png-e8458d89a69818053d3209e7228c83cd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/absorb.png" +dest_files=["res://.godot/imported/absorb.png-e8458d89a69818053d3209e7228c83cd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/all out attack.png b/assets/support/all out attack.png new file mode 100644 index 0000000..f6eeb9e --- /dev/null +++ b/assets/support/all out attack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06c2538f1c5f8a0e101f4b00a729279baa211ebfdc99707880135a02360f776f +size 177931 diff --git a/assets/support/all out attack.png.import b/assets/support/all out attack.png.import new file mode 100644 index 0000000..3e0cb0c --- /dev/null +++ b/assets/support/all out attack.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpmr8pa8cq3w0" +path="res://.godot/imported/all out attack.png-2872fd363fbff1bf0b089ac317139b0e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/all out attack.png" +dest_files=["res://.godot/imported/all out attack.png-2872fd363fbff1bf0b089ac317139b0e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/energy booster.png b/assets/support/energy booster.png new file mode 100644 index 0000000..9d8ff7f --- /dev/null +++ b/assets/support/energy booster.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae23af87934d3d3057e00f7bc7e1576a87416bbe7a499048add4d9acbe9bc5b8 +size 88074 diff --git a/assets/support/energy booster.png.import b/assets/support/energy booster.png.import new file mode 100644 index 0000000..786ca67 --- /dev/null +++ b/assets/support/energy booster.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd1mxacc3gfcy" +path="res://.godot/imported/energy booster.png-f846d83c962a9e077788e0d0ed5252dd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/energy booster.png" +dest_files=["res://.godot/imported/energy booster.png-f846d83c962a9e077788e0d0ed5252dd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/insurance.png b/assets/support/insurance.png new file mode 100644 index 0000000..e92bb13 --- /dev/null +++ b/assets/support/insurance.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0e2ff619969c6fff98cecbd63ec954010298e434a5079c06d81e0afa5fd4d5e +size 213996 diff --git a/assets/support/insurance.png.import b/assets/support/insurance.png.import new file mode 100644 index 0000000..88ac73a --- /dev/null +++ b/assets/support/insurance.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bwo6dfe1kpxhe" +path="res://.godot/imported/insurance.png-fa2ae7ef8a239dc0e4a4bd2c8f0b477b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/insurance.png" +dest_files=["res://.godot/imported/insurance.png-fa2ae7ef8a239dc0e4a4bd2c8f0b477b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/lifesteal.png b/assets/support/lifesteal.png new file mode 100644 index 0000000..74f4fb4 --- /dev/null +++ b/assets/support/lifesteal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa02a72c7208802bcf5882d4925add9707c281b0420ef823302674468b522ada +size 133540 diff --git a/assets/support/lifesteal.png.import b/assets/support/lifesteal.png.import new file mode 100644 index 0000000..ecf73eb --- /dev/null +++ b/assets/support/lifesteal.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bni2wr2vrg0fe" +path="res://.godot/imported/lifesteal.png-1fcf74a2a74d8a4381ce6310ccb999d8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/lifesteal.png" +dest_files=["res://.godot/imported/lifesteal.png-1fcf74a2a74d8a4381ce6310ccb999d8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/potion.png b/assets/support/potion.png new file mode 100644 index 0000000..1072f04 --- /dev/null +++ b/assets/support/potion.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2c6b61399220a4d5ed8a702737654d1465b1c1e1d02cdc015702575002f6c5b +size 271057 diff --git a/assets/support/potion.png.import b/assets/support/potion.png.import new file mode 100644 index 0000000..b7657e2 --- /dev/null +++ b/assets/support/potion.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://48hblv72emyr" +path="res://.godot/imported/potion.png-1339ae9737d6625a795e518c852db261.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/potion.png" +dest_files=["res://.godot/imported/potion.png-1339ae9737d6625a795e518c852db261.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/reflection.png b/assets/support/reflection.png new file mode 100644 index 0000000..bc699d4 --- /dev/null +++ b/assets/support/reflection.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ca0b3919d5eb76eac7e7437285d3bbc508be3f354a9a310fb1727c7c5fae69 +size 217825 diff --git a/assets/support/reflection.png.import b/assets/support/reflection.png.import new file mode 100644 index 0000000..bf38332 --- /dev/null +++ b/assets/support/reflection.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3uq5b2x2oacn" +path="res://.godot/imported/reflection.png-2ae705bc1d7282dacca1272db53a447a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/reflection.png" +dest_files=["res://.godot/imported/reflection.png-2ae705bc1d7282dacca1272db53a447a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/sword mastery.png b/assets/support/sword mastery.png new file mode 100644 index 0000000..8c14dd4 --- /dev/null +++ b/assets/support/sword mastery.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee9f3905c0ba6be4b0d609157d8008435c393b5529dfae45290cc69ce65fae88 +size 102278 diff --git a/assets/support/sword mastery.png.import b/assets/support/sword mastery.png.import new file mode 100644 index 0000000..a420ef0 --- /dev/null +++ b/assets/support/sword mastery.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ha5p3vpqn5jv" +path="res://.godot/imported/sword mastery.png-67026928e9b242f46437e6cfb6d95bee.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/sword mastery.png" +dest_files=["res://.godot/imported/sword mastery.png-67026928e9b242f46437e6cfb6d95bee.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/support/tanker.png b/assets/support/tanker.png new file mode 100644 index 0000000..c9edcbb --- /dev/null +++ b/assets/support/tanker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:487368fdb954eae97166906014ab24f92e100e4f34bf7498395ae5dd99ea8d54 +size 295201 diff --git a/assets/support/tanker.png.import b/assets/support/tanker.png.import new file mode 100644 index 0000000..361c8d1 --- /dev/null +++ b/assets/support/tanker.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hiswkj2stt4l" +path="res://.godot/imported/tanker.png-de127e279370081587c7a5243fff4d1c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/support/tanker.png" +dest_files=["res://.godot/imported/tanker.png-de127e279370081587c7a5243fff4d1c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/data/cards/monster/axoluna.tres b/data/cards/monster/axoluna.tres index 1743622..a6f88da 100644 --- a/data/cards/monster/axoluna.tres +++ b/data/cards/monster/axoluna.tres @@ -1,6 +1,6 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://deo8mj887rfx1"] +[gd_resource type="Resource" script_class="MonsterCard" load_steps=3 format=3 uid="uid://di76avwc0gn8e"] -[ext_resource type="Texture2D" uid="uid://b8accn4e2ojau" path="res://assets/monster/froggo 1.png" id="1_dyw44"] +[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] @@ -12,4 +12,4 @@ energy_cost = 1 base_health = 120 name = "Axoluna" description = "Cute wanderer of the tank, Axoluna" -icon = ExtResource("1_dyw44") +icon = ExtResource("1_j0l6n") diff --git a/data/cards/monster/bunnaut.tres b/data/cards/monster/bunnaut.tres index 6d478e3..a70008a 100644 --- a/data/cards/monster/bunnaut.tres +++ b/data/cards/monster/bunnaut.tres @@ -1,6 +1,7 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://tgju8eodyuk1"] +[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") @@ -11,3 +12,4 @@ energy_cost = 1 base_health = 50 name = "Bunnaut" description = "Run faster than tortoise." +icon = ExtResource("1_xibsw") diff --git a/data/cards/monster/capytain.tres b/data/cards/monster/capytain.tres index d11bf4d..712ab1e 100644 --- a/data/cards/monster/capytain.tres +++ b/data/cards/monster/capytain.tres @@ -1,5 +1,6 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://cs7q8i7bvohmj"] +[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] @@ -11,3 +12,4 @@ energy_cost = 3 base_health = 170 name = "Capytain" description = "A big, hungry capybara" +icon = ExtResource("1_mulam") diff --git a/data/cards/monster/cattogato.tres b/data/cards/monster/cattogato.tres index 7fee1c0..7b4e72c 100644 --- a/data/cards/monster/cattogato.tres +++ b/data/cards/monster/cattogato.tres @@ -1,6 +1,7 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://bmst884k0myvd"] +[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") @@ -11,3 +12,4 @@ energy_cost = 3 base_health = 80 name = "Cattogato" description = "Lovely cat wandering in the space." +icon = ExtResource("1_xles7") diff --git a/data/cards/monster/gilli.tres b/data/cards/monster/gilli.tres index 30da6af..fe574ca 100644 --- a/data/cards/monster/gilli.tres +++ b/data/cards/monster/gilli.tres @@ -1,6 +1,7 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://myxgsyerrdla"] +[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") @@ -11,3 +12,4 @@ energy_cost = 1 base_health = 120 name = "Gilli" description = "There is a huge monster looking at me everyday." +icon = ExtResource("1_62dnj") diff --git a/data/cards/monster/jellova.tres b/data/cards/monster/jellova.tres index df0e747..ef9567f 100644 --- a/data/cards/monster/jellova.tres +++ b/data/cards/monster/jellova.tres @@ -1,5 +1,6 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://425ipxdapg8o"] +[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] @@ -11,3 +12,4 @@ energy_cost = 2 base_health = 110 name = "Jellova" description = "I'm gonna whip you till' you .. nevermind." +icon = ExtResource("1_t6381") diff --git a/data/cards/monster/orcava.tres b/data/cards/monster/orcava.tres index b1c212e..b45cafd 100644 --- a/data/cards/monster/orcava.tres +++ b/data/cards/monster/orcava.tres @@ -1,5 +1,6 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://cakkx0o8mifmn"] +[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] @@ -11,3 +12,4 @@ energy_cost = 2 base_health = 200 name = "Orcava" description = "Human try to communicate with me. I simply block them." +icon = ExtResource("1_4dsvt") diff --git a/data/cards/monster/prankie.tres b/data/cards/monster/prankie.tres index 5cea32c..4d64b66 100644 --- a/data/cards/monster/prankie.tres +++ b/data/cards/monster/prankie.tres @@ -1,6 +1,7 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://shri5ne51s74"] +[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") @@ -11,3 +12,4 @@ energy_cost = 2 base_health = 100 name = "Prankie" description = "I'm not pranking anyone. Yet." +icon = ExtResource("1_75ppb") diff --git a/data/cards/monster/quackle.tres b/data/cards/monster/quackle.tres index f774842..0fe4658 100644 --- a/data/cards/monster/quackle.tres +++ b/data/cards/monster/quackle.tres @@ -1,5 +1,6 @@ -[gd_resource type="Resource" script_class="MonsterCard" load_steps=2 format=3 uid="uid://dnf3gpji5prlr"] +[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] @@ -11,3 +12,4 @@ energy_cost = 1 base_health = 70 name = "Quackle" description = "Quack! Quack! No one notice me." +icon = ExtResource("1_4f7pv") diff --git a/data/cards/support/absorb.tres b/data/cards/support/absorb.tres index ef6568c..72c5c4a 100644 --- a/data/cards/support/absorb.tres +++ b/data/cards/support/absorb.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 format=3 uid="uid://be01tdq1fxlct"] +[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") @@ -10,3 +11,4 @@ type = "red" effects = Array[ExtResource("1_mhxdy")]([]) name = "Absorb" description = "Enemy damage converted to heal your Active Monster Field HP during this turn." +icon = ExtResource("2_i2lgf") diff --git a/data/cards/support/all_out_attack.tres b/data/cards/support/all_out_attack.tres index 35814a9..0269e6f 100644 --- a/data/cards/support/all_out_attack.tres +++ b/data/cards/support/all_out_attack.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 format=3 uid="uid://dgxcvdo6x6kst"] +[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") @@ -10,3 +11,4 @@ type = "green" effects = Array[ExtResource("1_fd50n")]([null]) name = "All-Out Attack" description = "Combine all Rock Paper Scissor during this turn, and got additional damage from the lowest Rock Paper Scissor you got." +icon = ExtResource("2_a1iip") diff --git a/data/cards/support/energy_booster.tres b/data/cards/support/energy_booster.tres index bf64881..7a16144 100644 --- a/data/cards/support/energy_booster.tres +++ b/data/cards/support/energy_booster.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 format=3 uid="uid://c0grh1y65e0f3"] +[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") @@ -10,3 +11,4 @@ type = "green" effects = Array[ExtResource("1_pkc1x")]([null]) name = "Energy Booster" description = "Add 1 additional Energy." +icon = ExtResource("2_lxctl") diff --git a/data/cards/support/insurance.tres b/data/cards/support/insurance.tres index e63e98f..f9211a0 100644 --- a/data/cards/support/insurance.tres +++ b/data/cards/support/insurance.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 format=3 uid="uid://dfocg5yfh22e8"] +[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") @@ -10,3 +11,4 @@ type = "red" effects = Array[ExtResource("1_gtyqr")]([null]) name = "Insurance" description = "If your monster supposed to be dead in this turn, keep it alive at 10 HP." +icon = ExtResource("2_f7jjv") diff --git a/data/cards/support/invisibility.tres b/data/cards/support/invisibility.tres index 2b917fb..3fb4c4e 100644 --- a/data/cards/support/invisibility.tres +++ b/data/cards/support/invisibility.tres @@ -1,13 +1,14 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://by4yg81uqti3u"] +[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" -magnitude = 0 type = "green" effects = Array[ExtResource("1_5tnpm")]([null]) name = "Invisibility" description = "Ignore any damage to your monster in this turn." +icon = ExtResource("2_6occh") diff --git a/data/cards/support/lifesteal.tres b/data/cards/support/lifesteal.tres index 79a4497..2a0d994 100644 --- a/data/cards/support/lifesteal.tres +++ b/data/cards/support/lifesteal.tres @@ -1,6 +1,7 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=3 format=3 uid="uid://bcrlaam8uq6xt"] +[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] @@ -10,3 +11,4 @@ type = "green" effects = Array[ExtResource("1_b33y4")]([null]) name = "Lifesteal" description = "During this turn your attack also heals your HP." +icon = ExtResource("2_arrkb") diff --git a/data/cards/support/potion.tres b/data/cards/support/potion.tres index 926535b..36ea162 100644 --- a/data/cards/support/potion.tres +++ b/data/cards/support/potion.tres @@ -1,8 +1,9 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=5 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="Resource" uid="uid://cvu0rtt5nggf" path="res://data/support_effects/heal.tres" id="2_k1cnl"] [ext_resource type="Script" path="res://tcg/card/implemented_support_card.gd" id="3_at5nt"] +[ext_resource type="Texture2D" uid="uid://48hblv72emyr" path="res://assets/support/potion.png" id="3_hk8kx"] [sub_resource type="Resource" id="Resource_88lmk"] script = ExtResource("1_ujm0o") @@ -16,3 +17,4 @@ type = "green" effects = Array[ExtResource("1_ujm0o")]([SubResource("Resource_88lmk")]) name = "Potion" description = "Heal 30 HP" +icon = ExtResource("3_hk8kx") diff --git a/data/cards/support/reflection.tres b/data/cards/support/reflection.tres index b87a630..2e6e1eb 100644 --- a/data/cards/support/reflection.tres +++ b/data/cards/support/reflection.tres @@ -1,13 +1,14 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://c1gsrru1wa6ao"] +[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" -magnitude = 0 type = "red" effects = Array[ExtResource("1_mk2or")]([null]) name = "Reflection" description = "Enemy got the same amount of damage as our monster in this turn." +icon = ExtResource("2_jrr8g") diff --git a/data/cards/support/sword_mastery.tres b/data/cards/support/sword_mastery.tres index fdb68c0..1eb0399 100644 --- a/data/cards/support/sword_mastery.tres +++ b/data/cards/support/sword_mastery.tres @@ -1,8 +1,9 @@ -[gd_resource type="Resource" script_class="ImplementedSupportCard" load_steps=5 format=3 uid="uid://2xeb6keaoabo"] +[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") @@ -16,3 +17,4 @@ type = "green" effects = Array[ExtResource("1_y6yvj")]([SubResource("Resource_wwv02")]) name = "Sword Mastery" description = "Permanently add 20 damage for all Rock Paper Scissor to 1 Active Monster." +icon = ExtResource("3_rrvpt") diff --git a/data/cards/support/tanker.tres b/data/cards/support/tanker.tres index 7a207b4..817bd89 100644 --- a/data/cards/support/tanker.tres +++ b/data/cards/support/tanker.tres @@ -1,13 +1,14 @@ -[gd_resource type="Resource" script_class="SimpleSupportCard" load_steps=3 format=3 uid="uid://dsmrqyxt8mdp5"] +[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" -magnitude = 0 type = "red" effects = Array[ExtResource("1_1fvcb")]([null]) name = "Tanker" description = "Add your HP with your selected (Rock Paper Scissor) during this turn, and reduce to max HP if current HP higher than max HP." +icon = ExtResource("2_hqv06") diff --git a/demo_game.tscn b/demo_game.tscn index 7f9d67d..22935eb 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=22 format=3 uid="uid://bgc0u117jqyr1"] +[gd_scene load_steps=23 format=3 uid="uid://bgc0u117jqyr1"] [ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] [ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] @@ -18,6 +18,7 @@ [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="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"] @@ -33,6 +34,13 @@ script = ExtResource("1_jn16u") player_1_deck = Array[ExtResource("2_xuft0")]([ExtResource("3_we1tk"), ExtResource("4_kkhfk"), ExtResource("5_3cm5x"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd")]) player_2_deck = Array[ExtResource("2_xuft0")]([ExtResource("12_xqqfn"), ExtResource("4_kkhfk"), ExtResource("6_potm8"), ExtResource("7_nvv8k"), ExtResource("8_ewr4v"), ExtResource("9_ga5hf"), ExtResource("10_3rg8q"), ExtResource("11_seakd"), ExtResource("5_3cm5x")]) +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 1804.0 +offset_bottom = 1224.0 +scale = Vector2(1.1, 1.1) +texture = ExtResource("13_bdgfp") + [node name="Own" type="Control" parent="." node_paths=PackedStringArray("deck", "energy_label", "rps_button_container")] layout_mode = 1 anchor_top = 0.5 diff --git a/ui/card_template/support_card_green.tscn b/ui/card_template/support_card_green.tscn index a367d4b..39569c0 100644 --- a/ui/card_template/support_card_green.tscn +++ b/ui/card_template/support_card_green.tscn @@ -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" 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="Theme" uid="uid://is34t82g4jg" path="res://cards.tres" id="7_va1d7"] [ext_resource type="FontFile" uid="uid://08q3kkwmd4u6" path="res://assets/Inter-Regular.otf" id="10_c2ugn"] [node name="CardBase" type="Control" node_paths=PackedStringArray("card_name_label", "card_desc_label", "icon_rect")] @@ -77,6 +77,17 @@ 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 @@ -147,16 +158,6 @@ 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 From 728d848e5bda90f1b7d1ff38fb12362de35cb804 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 11:32:17 +0700 Subject: [PATCH 15/17] feat: damage incoming -> HP +- --- demo_game.tscn | 22 ++++++++++------------ player_side.gd | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/demo_game.tscn b/demo_game.tscn index 65b3c81..3269b11 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -146,13 +146,12 @@ layout_mode = 1 anchors_preset = 5 anchor_left = 0.5 anchor_right = 0.5 -offset_left = -83.5 -offset_top = 300.0 -offset_right = 83.5 -offset_bottom = 323.0 +offset_left = 84.0 +offset_top = 24.0 +offset_right = 251.0 +offset_bottom = 47.0 grow_horizontal = 2 -text = "Incoming Damage: 0" -horizontal_alignment = 1 +text = "HP: +0" [node name="HBoxContainer" type="HBoxContainer" parent="Own"] visible = false @@ -268,14 +267,13 @@ anchor_left = 0.5 anchor_top = 1.0 anchor_right = 0.5 anchor_bottom = 1.0 -offset_left = -83.5 -offset_top = -325.0 -offset_right = 83.5 -offset_bottom = -302.0 +offset_left = 84.0 +offset_top = -52.0 +offset_right = 251.0 +offset_bottom = -29.0 grow_horizontal = 2 grow_vertical = 0 -text = "Incoming Damage: 0" -horizontal_alignment = 1 +text = "HP: +0" [node name="StartGameButton" type="Button" parent="."] layout_mode = 1 diff --git a/player_side.gd b/player_side.gd index 1075011..169c355 100644 --- a/player_side.gd +++ b/player_side.gd @@ -80,7 +80,7 @@ func _on_update(transition): if monster: monster_card_ui.visible = true 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 From 72a14189149fdcba3b7a0f8f3ac20465d9e5d8c7 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 11:36:53 +0700 Subject: [PATCH 16/17] fix: all out attack scope fix: HP placeholder --- data/cards/support/all_out_attack.tres | 2 +- demo_game.tscn | 6 +++--- player_side.gd | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/data/cards/support/all_out_attack.tres b/data/cards/support/all_out_attack.tres index 0269e6f..660a217 100644 --- a/data/cards/support/all_out_attack.tres +++ b/data/cards/support/all_out_attack.tres @@ -6,7 +6,7 @@ [resource] script = ExtResource("2_61mgn") -scope = "instant" +scope = "turn" type = "green" effects = Array[ExtResource("1_fd50n")]([null]) name = "All-Out Attack" diff --git a/demo_game.tscn b/demo_game.tscn index ee48333..b4261af 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=23 format=3 uid="uid://bgc0u117jqyr1"] +[gd_scene load_steps=24 format=3 uid="uid://bgc0u117jqyr1"] [ext_resource type="Script" path="res://demo_game.gd" id="1_jn16u"] [ext_resource type="Script" path="res://player_side.gd" id="2_w4tnt"] @@ -159,7 +159,7 @@ offset_top = 24.0 offset_right = 251.0 offset_bottom = 47.0 grow_horizontal = 2 -text = "HP: +0" +text = "HP +0" [node name="HBoxContainer" type="HBoxContainer" parent="Own"] visible = false @@ -281,7 +281,7 @@ offset_right = 251.0 offset_bottom = -29.0 grow_horizontal = 2 grow_vertical = 0 -text = "HP: +0" +text = "HP +0" [node name="StartGameButton" type="Button" parent="."] layout_mode = 1 diff --git a/player_side.gd b/player_side.gd index 169c355..291f1a7 100644 --- a/player_side.gd +++ b/player_side.gd @@ -42,12 +42,14 @@ 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() From 83df3047f7d46f9443395ad428202c9f220f36ee Mon Sep 17 00:00:00 2001 From: Kenshia <73539778+Kenshia@users.noreply.github.com> Date: Sun, 26 Jan 2025 11:49:25 +0700 Subject: [PATCH 17/17] feat: card zoom --- player_side.gd | 23 +++++++++++++++++++++-- ui/card_template/card_base.gd | 14 ++++++-------- ui/card_template/monster_card.gd | 14 ++++++-------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/player_side.gd b/player_side.gd index 1075011..ad2df07 100644 --- a/player_side.gd +++ b/player_side.gd @@ -22,6 +22,7 @@ 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 = {} @@ -128,6 +129,8 @@ func _on_update(transition): _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": @@ -144,13 +147,29 @@ func _on_update(transition): _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) diff --git a/ui/card_template/card_base.gd b/ui/card_template/card_base.gd index 96bc2d1..2e623c6 100644 --- a/ui/card_template/card_base.gd +++ b/ui/card_template/card_base.gd @@ -3,6 +3,7 @@ class_name CardBase signal left_clicked signal right_clicked +signal un_right_clicked signal hovering(delta: float) @export var card_name_label: Label @@ -25,20 +26,17 @@ 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): + if rect.has_point(mouse_position) and get_window().has_focus(): 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 event.button_index == MOUSE_BUTTON_LEFT: + if rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() and get_window().has_focus(): left_clicked.emit() - elif event.button_index == MOUSE_BUTTON_RIGHT: + elif rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed() and get_window().has_focus(): right_clicked.emit() + elif event.button_index == MOUSE_BUTTON_RIGHT and !event.is_pressed(): + un_right_clicked.emit() diff --git a/ui/card_template/monster_card.gd b/ui/card_template/monster_card.gd index 8c1ca87..1c154f6 100644 --- a/ui/card_template/monster_card.gd +++ b/ui/card_template/monster_card.gd @@ -3,6 +3,7 @@ class_name MonsterCardUI signal left_clicked signal right_clicked +signal un_right_clicked signal hovering(delta: float) @export var name_label : Label @@ -37,20 +38,17 @@ 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): + if rect.has_point(mouse_position) and get_window().has_focus(): 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 event.button_index == MOUSE_BUTTON_LEFT: + if rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed() and get_window().has_focus(): left_clicked.emit() - elif event.button_index == MOUSE_BUTTON_RIGHT: + elif rect.has_point(mouse_position) and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed() and get_window().has_focus(): right_clicked.emit() + elif event.button_index == MOUSE_BUTTON_RIGHT and !event.is_pressed(): + un_right_clicked.emit()