From 54ccf7e484b988097c29af0753a6ffe8fd271b88 Mon Sep 17 00:00:00 2001 From: Jonathan Holmes Date: Tue, 23 Jun 2026 23:57:07 +0900 Subject: [PATCH 1/5] Added DARK_PATCH_139, HISUIAN_HEAVY_BALL_146, SUPEREFFECTIVE_GLASSES_152, TEMPLE_OF_SINNOH_155, and TREKKING_SHOES_156 --- .../logic/impl/gen8/AstralRadiance.groovy | 129 ++++++++++++------ 1 file changed, 86 insertions(+), 43 deletions(-) diff --git a/src/tcgwars/logic/impl/gen8/AstralRadiance.groovy b/src/tcgwars/logic/impl/gen8/AstralRadiance.groovy index d83f96c1d..26876346c 100644 --- a/src/tcgwars/logic/impl/gen8/AstralRadiance.groovy +++ b/src/tcgwars/logic/impl/gen8/AstralRadiance.groovy @@ -1,5 +1,6 @@ package tcgwars.logic.impl.gen8 +import tcgwars.logic.impl.gen5.DarkExplorers import static tcgwars.logic.card.Type.* import static tcgwars.logic.groovy.TcgBuilders.*; @@ -151,24 +152,24 @@ public enum AstralRadiance implements ImplOnlyCardInfo { CANCELING_COLOGNE_136, CHOY_137, CYLLENE_138, - DARK_PATCH_139, + DARK_PATCH_139 ("Dark Patch", "139", Rarity.UNCOMMON, [ITEM, TRAINER]), ENERGY_LOTO_140, FEATHER_BALL_141, GAPEJAW_BOG_142, GARDENIA_S_VIGOR_143, GRANT_144, GUTSY_PICKAXE_145, - HISUIAN_HEAVY_BALL_146, + HISUIAN_HEAVY_BALL_146 ("Hisuian Heavy Ball", "146", Rarity.UNCOMMON, [ITEM, TRAINER]), IRIDA_147, JUBILIFE_VILLAGE_148, KAMADO_149, ROXANNE_150, SPICY_SEASONED_CURRY_151, - SUPEREFFECTIVE_GLASSES_152, + SUPEREFFECTIVE_GLASSES_152 ("Supereffective Glasses", "152", Rarity.UNCOMMON, [POKEMON_TOOL, ITEM, TRAINER]), SWEET_HONEY_153, SWITCH_CART_154, - TEMPLE_OF_SINNOH_155, - TREKKING_SHOES_156, + TEMPLE_OF_SINNOH_155 ("Temple of Sinnoh", "155", Rarity.UNCOMMON, [STADIUM, TRAINER]), + TREKKING_SHOES_156 ("Trekking Shoes", "156", Rarity.UNCOMMON, [ITEM, TRAINER]), UNIDENTIFIED_FOSSIL_157, WAIT_AND_SEE_TURBO_158, ZISU_159, @@ -1829,13 +1830,8 @@ public enum AstralRadiance implements ImplOnlyCardInfo { - case DARK_PATCH_139: return cardng (stub) { - // Attach a basic [D] Energy card from your discard pile to 1 of your Benched [D] Pokémon. - onPlay { - } - playRequirement{ - } - } + case DARK_PATCH_139: + return copy(DarkExplorers.DARK_PATCH_93, this) @@ -1899,13 +1895,26 @@ public enum AstralRadiance implements ImplOnlyCardInfo { - case HISUIAN_HEAVY_BALL_146: return cardng (stub) { - // Look at your face-down Prize cards. You may reveal a Basic Pokémon you find there, put it into your hand, and put this Hisuian Heavy Ball in its place as a face-down Prize card. (If you don't reveal a Basic Pokémon, put this card in the discard pile.) Then, shuffle your face-down Prize cards. - onPlay { - } - playRequirement{ - } - } + case HISUIAN_HEAVY_BALL_146: + return itemCard (this) { + text "Look at your face-down Prize cards. You may reveal a Basic Pokémon you find there, put it into your hand, and put this Hisuian Heavy Ball in its place as a face-down Prize card. (If you don't reveal a Basic Pokémon, put this card in the discard pile.) Then, shuffle your face-down Prize cards.\nYou may play any number of Item cards during your turn." + onPlay { + my.prizeCardSet.showToMe("Your prizes") + if(my.prizeCardSet.has(BASIC)){ + def tar = my.prizeCardSet.filterByType(BASIC).select(min:0,"Replace $thisCard with one of your prizes?") + if(tar){ + tar.showToOpponent("Your opponent put this card in his hand") + my.hand.remove(thisCard) + my.prizeCardSet.set(my.prizeCardSet.indexOf(tar.first()), thisCard) + my.hand.add(tar.first()) + bc "Took $tar and shuffled $thisCard into prizes" + } + my.prizeCardSet.shuffle() + } + } + playRequirement{ + } + }; @@ -1959,15 +1968,24 @@ public enum AstralRadiance implements ImplOnlyCardInfo { - case SUPEREFFECTIVE_GLASSES_152: return cardng (stub) { - // When applying Weakness to damage from the attacks of the Pokémon this card is attached to done to your opponent's Active Pokémon, apply it as ×3. - onPlay {reason-> - } - onRemoveFromPlay { - } - allowAttach {to-> - } - } + case SUPEREFFECTIVE_GLASSES_152: + return pokemonTool (this) { + text "When applying Weakness to damage from the attacks of the Pokémon this card is attached to done to your opponent's Active Pokémon, apply it as ×3.\nYou may play any number of Item cards during your turn.\nAttach a Pokémon Tool to 1 of your Pokémon that doesn't already have a Pokémon Tool attached." + def eff + onPlay {reason-> + effect = delayed { + before APPLY_WEAKNESS, { + bg.dm().each{ + if(it.from==self && it.to.active){ + it.flags.add(DamageManager.DamageFlag.FORCE_X3_WEAKNESS) + } + } + } + } + onRemoveFromPlay { + effect.unregister() + } + }; @@ -1991,23 +2009,48 @@ public enum AstralRadiance implements ImplOnlyCardInfo { - case TEMPLE_OF_SINNOH_155: return cardng (stub) { - // All Special Energy attached to Pokémon (both yours and your opponent's) provide [C] Energy and have no other effect. - onPlay { - } - onRemoveFromPlay{ - } - } + case TEMPLE_OF_SINNOH_155: + return stadium (this) { + text "Each player's evolved Pokémon can use any attack from its previous Evolutions. (That player still needs the necessary Energy to use each attack.)" + def effect + onPlay { + prevent_energy_effect = delayed { + before null, null, Source.SRC_SPECIAL_ENERGY, { + if (self.active && self.checkSpecialConditionsForClassic()) { + prevent() + } + } + } + cancel_special_energy_type = getter (GET_ENERGY_TYPES) {holder-> + if(holder.effect.target != null && holder.effect.card.cardTypes.is(SPECIAL_ENERGY)) { + holder.object = [[C] as Set] + } + } + } + onRemoveFromPlay{ + prevent_energy_effect.unregister() + cancel_special_energy_type.unregister() + } + }; - case TREKKING_SHOES_156: return cardng (stub) { - // Look at the top card of your deck. You may put that card into your hand. If you don't, discard that card and draw a card. - onPlay { - } - playRequirement{ - } - } + case TREKKING_SHOES_156: + return itemCard (this) { + text "Look at the top card of your deck. You may put that card into your hand. If you don't, discard that card and draw a card.\nYou may play as many Item cards as you like during your turn (before your attack)." + onPlay { + my.deck.subList(0,1).showToMe("Top card of your deck") + if(confirm("Draw ${my.deck.subList(0,1).first()}?")){ + draw 1 + } else { + my.deck.subList(0,1).discard() + draw 1 + } + } + playRequirement{ + assert my.deck : "There is no more card in your deck" + } + }; @@ -2237,4 +2280,4 @@ public enum AstralRadiance implements ImplOnlyCardInfo { return null; } } -} \ No newline at end of file +} From e22a50dd9d93b3852689a43d2f8ee55ef99a33d1 Mon Sep 17 00:00:00 2001 From: Jonathan Holmes Date: Wed, 24 Jun 2026 00:00:44 +0900 Subject: [PATCH 2/5] Added ACEROLA_S_PREMONITION_129, COLLAPSED_STADIUM_137, ULTRA_BALL_150, and DOUBLE_TURBO_ENERGY_151 --- .../logic/impl/gen8/BrilliantStars.groovy | 90 +++++++++++-------- 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/src/tcgwars/logic/impl/gen8/BrilliantStars.groovy b/src/tcgwars/logic/impl/gen8/BrilliantStars.groovy index c4d1827d0..925c75f88 100644 --- a/src/tcgwars/logic/impl/gen8/BrilliantStars.groovy +++ b/src/tcgwars/logic/impl/gen8/BrilliantStars.groovy @@ -1,5 +1,8 @@ package tcgwars.logic.impl.gen8 +import tcgwars.logic.impl.gen2.GymHeroes +import tcgwars.logic.impl.gen5.DarkExplorers + import static tcgwars.logic.card.HP.*; import static tcgwars.logic.card.Type.*; import static tcgwars.logic.card.CardType.*; @@ -160,7 +163,7 @@ public enum BrilliantStars implements ImplOnlyCardInfo { TORNADUS_126, HAWLUCHA_127, DRAMPA_V_128, - ACEROLA_S_PREMONITION_129, + ACEROLA_S_PREMONITION_129 ("Acerola's Premonition", "129", Rarity.UNCOMMON, [SUPPORTER, TRAINER]), BARRY_130, BLUNDER_POLICY_131, BOSS_S_ORDERS_132, @@ -168,7 +171,7 @@ public enum BrilliantStars implements ImplOnlyCardInfo { CHEREN_S_CARE_134, CHOICE_BELT_135, CLEANSING_GLOVES_136, - COLLAPSED_STADIUM_137, + COLLAPSED_STADIUM_137 ("Collapsed Stadium", "137", Rarity.UNCOMMON, [TRAINER, STADIUM]), CYNTHIA_S_AMBITION_138, FRESH_WATER_SET_139, FRIENDS_IN_GALAR_140, @@ -181,8 +184,8 @@ public enum BrilliantStars implements ImplOnlyCardInfo { PROFESSOR_S_RESEARCH_147, ROSEANNE_S_BACKUP_148, TEAM_YELL_S_CHEER_149, - ULTRA_BALL_150, - DOUBLE_TURBO_ENERGY_151, + ULTRA_BALL_150 ("Ultra Ball", "150", Rarity.UNCOMMON, [ITEM, TRAINER]), + DOUBLE_TURBO_ENERGY_151 ("Double Turbo Energy", "151", Rarity.UNCOMMON, [ENERGY, SPECIAL_ENERGY]), SHAYMIN_V_152, CHARIZARD_V_153, CHARIZARD_V_154, @@ -1765,13 +1768,19 @@ public enum BrilliantStars implements ImplOnlyCardInfo { - case ACEROLA_S_PREMONITION_129: return cardng (stub) { - // Your opponent reveals their hand, and you draw a card for each Trainer card you find there. - onPlay { - } - playRequirement{ - } - } + case ACEROLA_S_PREMONITION_129: + return supporter (this) { + text "Your opponent reveals their hand, and you draw a card for each Trainer card you find there.\nYou may play only 1 Supporter card during your turn." + onPlay { + def sel=opp.hand.showToMe("Opponent's hand").filterByType(ITEM) + if(sel){ + draw sel.size(), TargetPlayer.SELF + } + } + playRequirement{ + assert opp.hand + } + }; @@ -1843,13 +1852,8 @@ public enum BrilliantStars implements ImplOnlyCardInfo { - case COLLAPSED_STADIUM_137: return cardng (stub) { - // Each player can't have more than 4 Benched Pokémon. If a player has 5 or more Benched Pokémon, they discard Benched Pokémon until they have 4 Pokémon on the Bench. The player who played this card discards first. If more than one effect changes the number of Benched Pokémon allowed, use the smaller number. - onPlay { - } - onRemoveFromPlay{ - } - } + case COLLAPSED_STADIUM_137: + return copy(GymHeroes.NARROW_GYM_124, this) @@ -1969,27 +1973,39 @@ public enum BrilliantStars implements ImplOnlyCardInfo { - case ULTRA_BALL_150: return cardng (stub) { - // You can use this card only if you discard 2 other cards from your hand. Search your deck for a Pokémon, reveal it, and put it into your hand. Then, shuffle your deck. - onPlay { - } - playRequirement{ - } - } + case ULTRA_BALL_150: + return copy(DarkExplorers.ULTRA_BALL_102, this) - case DOUBLE_TURBO_ENERGY_151: return cardng (stub) { - // As long as this card is attached to a Pokémon, it provides [C][C] Energy. The attacks of the Pokémon this card is attached to do 20 less damage to your opponent's Pokémon (before applying Weakness and Resistance). - onPlay {reason-> - } - onRemoveFromPlay { - } - onMove {to-> - } - allowAttach {to-> - } - } + case DOUBLE_TURBO_ENERGY_151: + return specialEnergy (this, [[]]) { + text "As long as this card is attached to a Pokémon, it provides [C][C] Energy.\n" + + "The attacks of the Pokémon this card is attached to do 20 less damage to your opponent's Pokémon (before applying Weakness and Resistance)." + def ef + onPlay {reason-> + ef = delayed(){ + after PROCESS_ATTACK_EFFECTS, { + bg.dm().each { + if(it.from==self && it.dmg.value){ + it.dmg -= hp(20) + bc "Double Turbo Energy reduces damage" + } + } + } + } + } + onRemoveFromPlay{ + ef.unregister() + } + getEnergyTypesOverride { + if (self) { + return [[C] as Set,[C] as Set] + } else { + return [[] as Set] + } + } + }; @@ -2136,4 +2152,4 @@ public enum BrilliantStars implements ImplOnlyCardInfo { return null; } } -} \ No newline at end of file +} From edda929d0c5b99b4c2bec44a58794a9f68215ac0 Mon Sep 17 00:00:00 2001 From: Jonathan Holmes Date: Wed, 24 Jun 2026 00:03:23 +0900 Subject: [PATCH 3/5] Added PROFESSOR_S_RESEARCH_PROFESSOR_OAK__23 --- .../logic/impl/gen8/Celebrations.groovy | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/tcgwars/logic/impl/gen8/Celebrations.groovy b/src/tcgwars/logic/impl/gen8/Celebrations.groovy index add6d1151..954630177 100644 --- a/src/tcgwars/logic/impl/gen8/Celebrations.groovy +++ b/src/tcgwars/logic/impl/gen8/Celebrations.groovy @@ -1,5 +1,7 @@ package tcgwars.logic.impl.gen8 +import tcgwars.logic.impl.gen5.BlackWhite + import static tcgwars.logic.card.HP.*; import static tcgwars.logic.card.Type.*; import static tcgwars.logic.card.CardType.*; @@ -54,7 +56,7 @@ public enum Celebrations implements ImplOnlyCardInfo { DIALGA_20, SOLGALEO_21, LUGIA_22, - PROFESSOR_S_RESEARCH_PROFESSOR_OAK__23, + PROFESSOR_S_RESEARCH_PROFESSOR_OAK__23 ("Professor's Research (Professor Oak)", "23", Rarity.RARE, [SUPPORTER, TRAINER]), PROFESSOR_S_RESEARCH_PROFESSOR_OAK__24, MEW_25, BLASTOISE_2, @@ -428,16 +430,8 @@ public enum Celebrations implements ImplOnlyCardInfo { } } - case PROFESSOR_S_RESEARCH_PROFESSOR_OAK__23: return cardng (stub) { - // Discard your hand and draw 7 cards. - onPlay { - my.hand.getExcludedList(thisCard).discard() - draw 7 - } - playRequirement{ - assert my.hand.getExcludedList(thisCard) && my.deck : "No card in hand or deck" - } - } + case PROFESSOR_S_RESEARCH_PROFESSOR_OAK__23: + return copy(BlackWhite.PROFESSOR_JUNIPER_101, this) case CHARIZARD_4: return cardng (stub) { pokemonPower "Energy Burn", { @@ -594,4 +588,4 @@ public enum Celebrations implements ImplOnlyCardInfo { return null; } } -} \ No newline at end of file +} From 511a5cd75dc147f0e9d673ef245187b53d3b877a Mon Sep 17 00:00:00 2001 From: Jonathan Holmes Date: Wed, 24 Jun 2026 00:08:26 +0900 Subject: [PATCH 4/5] Added CRUSHING_HAMMER_125, ENERGY_RETRIEVAL_127, ENERGY_SEARCH_128, and POKE_BALL_137 --- .../logic/impl/gen8/CrownZenith.groovy | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/tcgwars/logic/impl/gen8/CrownZenith.groovy b/src/tcgwars/logic/impl/gen8/CrownZenith.groovy index 84d7d34b6..e8ad4d674 100644 --- a/src/tcgwars/logic/impl/gen8/CrownZenith.groovy +++ b/src/tcgwars/logic/impl/gen8/CrownZenith.groovy @@ -1,5 +1,7 @@ package tcgwars.logic.impl.gen8 +import tcgwars.logic.impl.gen5.BlackWhite +import tcgwars.logic.impl.gen7.SunMoon import static tcgwars.logic.card.Type.* import static tcgwars.logic.groovy.TcgBuilders.*; @@ -136,10 +138,10 @@ public enum CrownZenith implements ImplOnlyCardInfo { DUBWOOL_122, BEA_123, BEDE_124, - CRUSHING_HAMMER_125, + CRUSHING_HAMMER_125 ("Crushing Hammer", "125", Rarity.UNCOMMON, [ITEM, TRAINER]), DIGGING_DUO_126, - ENERGY_RETRIEVAL_127, - ENERGY_SEARCH_128, + ENERGY_RETRIEVAL_127 ("Energy Retrieval", "127", Rarity.COMMON, [ITEM, TRAINER]), + ENERGY_SEARCH_128 ("Energy Search", "128", Rarity.COMMON, [ITEM, TRAINER]), ENERGY_SWITCH_129, FRIENDS_IN_HISUI_130, FRIENDS_IN_SINNOH_131, @@ -148,7 +150,7 @@ public enum CrownZenith implements ImplOnlyCardInfo { LEON_134, LOST_VACUUM_135, NESSA_136, - POKE_BALL_137, + POKE_BALL_137 ("Poké Ball", "137", Rarity.COMMON, [ITEM, TRAINER]), POKEMON_CATCHER_138, POTION_139, RAIHAN_140, @@ -1276,7 +1278,8 @@ public enum CrownZenith implements ImplOnlyCardInfo { - + case CRUSHING_HAMMER_125: + return copy (SunMoon.CRUSHING_HAMMER_115, this); @@ -1293,6 +1296,13 @@ public enum CrownZenith implements ImplOnlyCardInfo { + case ENERGY_RETRIEVAL_127: + return copy(BlackWhite.ENERGY_RETRIEVAL_92, this) + + + + case ENERGY_SEARCH_128: + return copy(BlackWhite.POKE_BALL_97, this); @@ -1318,7 +1328,8 @@ public enum CrownZenith implements ImplOnlyCardInfo { - + case POKE_BALL_137: + return copy(BlackWhite.POKE_BALL_97, this); @@ -1528,4 +1539,4 @@ public enum CrownZenith implements ImplOnlyCardInfo { return null; } } -} \ No newline at end of file +} From 6437595be3038bc670b7b9338bc3b67ddf74103e Mon Sep 17 00:00:00 2001 From: Jonathan Holmes Date: Wed, 24 Jun 2026 00:12:47 +0900 Subject: [PATCH 5/5] Added SHAUNA_240 --- src/tcgwars/logic/impl/gen8/FusionStrike.groovy | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/tcgwars/logic/impl/gen8/FusionStrike.groovy b/src/tcgwars/logic/impl/gen8/FusionStrike.groovy index eaa8a8ee6..018e82068 100644 --- a/src/tcgwars/logic/impl/gen8/FusionStrike.groovy +++ b/src/tcgwars/logic/impl/gen8/FusionStrike.groovy @@ -1,5 +1,6 @@ package tcgwars.logic.impl.gen8 +import tcgwars.logic.impl.gen6.Xy import static tcgwars.logic.card.HP.*; import static tcgwars.logic.card.Type.*; @@ -273,7 +274,7 @@ public enum FusionStrike implements ImplOnlyCardInfo { QUICK_BALL_237, SCHOOLBOY_238, SCHOOLGIRL_239, - SHAUNA_240, + SHAUNA_240 ("Shauna", "240", Rarity.UNCOMMON, [SUPPORTER, TRAINER]), SIDNEY_241, SKATERS_PARK_242, SPONGY_GLOVES_243, @@ -3580,15 +3581,8 @@ public enum FusionStrike implements ImplOnlyCardInfo { - case SHAUNA_240: return cardng (stub) { - // Shuffle your hand into your deck. Then, draw 5 cards. - onPlay { - shuffleDeck(my.hand.getExcludedList(thisCard)) - draw 5 - } - playRequirement{ - } - } + case SHAUNA_240: + return copy(Xy.SHAUNA_127, this) @@ -3714,4 +3708,4 @@ public enum FusionStrike implements ImplOnlyCardInfo { return null; } } -} \ No newline at end of file +}