Commit graph

379 commits

Author SHA1 Message Date
theelk801
d3b0531777 [TLA] Implement Solstice Revelations 2025-10-29 15:59:43 -04:00
theelk801
8375d6b606 rework partner variants, add tests 2025-10-10 13:56:39 -04:00
theelk801
7c114272d7 [SLD] Implement Ellie, Vengeful Hunter 2025-09-28 19:43:28 -04:00
theelk801
7b131673be [SLD] Implement Atreus, Impulsive Son 2025-09-28 19:39:48 -04:00
Steven Knipe
60be7070d6 Mass rename getSourceObjectZoneChangeCounter to getStackMomentSourceZCC, un-deprecate and change comment 2025-08-26 01:15:04 -07:00
Oleg Agafonov
2833460e59 AI: improved performance on too many possible targets (fix game freezes and server crashes - see #9539, #9438, #9518, related to #11285, #5023); 2025-08-10 02:16:18 +04:00
Oleg Agafonov
e866707912 test framework improves:
- now game logs will show stack ability on push and on resolve (before any choices);
- now game logs will show used choices made by cast/activate, setChoice, setMode and addTarget commands (not work for AI tests, part of #13832);
- improved choice logic for modes and yes/not dialogs (now it's use a more strictly checks, use TestPlayer.MODE_SKIP to stop mode selection);
- improved error logs and testable dialogs menu in cheat mode;
2025-08-04 23:53:16 +04:00
Oleg Agafonov
52180d1393 Added data collectors, AI and testing tools improves:
- dev: added data collectors API to collect and process game data in real time;
- tests: added game logs output in all unit tests (enabled by default);
- tests: added games history storage (decks, game logs, chats - disabled by default);
2025-07-05 21:44:55 +04:00
Oleg Agafonov
450f7bd907 AI: fixed game freeze on free cast of multiple cards (part of #13638, #13766);
refactor: fixed that TargetCard doesn't work with Zone.ALL;
2025-06-29 15:24:27 +04:00
Oleg Agafonov
c3a0c731d6 AI, tests: added stability tests to make sure AI simulations can process errors and freezes (part of #13638, #13766); 2025-06-28 22:51:34 +04:00
Oleg Agafonov
d893d52190 tests: improved testable dialogs (added source code ref in result table for better IDE navigation, part of #13643, #13638); 2025-06-15 14:08:43 +04:00
xenohedron
24f030fa71
fix #13523 (trigger on becomes the target of recast spell) (#13740)
move findTargetingStackObject from CardUtil to Game, so saved data can be cleared with short living lki

add test cases
2025-06-14 00:09:40 -04:00
Oleg Agafonov
849aea5946 tests: added fuzzy testing (disabled by default, added random phased out permanents, part of #13748); 2025-06-13 23:09:05 +04:00
theelk801
58b5bb76f9 various text fixes 2025-06-13 13:44:33 -04:00
Oleg Agafonov
1112c9516d other: added getMultiAmount testable dialogs in cheat menu (part of #13638) 2025-06-07 08:50:29 +04:00
theelk801
fe4d6d3197 [BLB] various text fixes 2025-06-02 16:30:11 -04:00
Susucre
a445142d39 fix and test Font of Agonies
fixes #13717
2025-06-01 22:52:31 +02:00
theelk801
1ab9eeaad8 [J25] various text fixes 2025-06-01 10:29:05 -04:00
Oleg Agafonov
8d7bd60061 Player under control - fixed that it doesn't hide opponent's hand after control lost (part of #13353); 2025-06-01 10:21:47 +04:00
theelk801
a27302654c [FIC] more text fixes 2025-05-31 09:51:19 -04:00
Evan Kranzler
9e2a1a59e0
[FIC] Implement G'raha Tia, Scion Reborn, rework DoIfCostPaid and "do only once" effects (#13660)
* rework effects with DoIfCostPaid and "do this only once each turn"

* [FIC] Implement G'raha Tia, Scion Reborn

* [FIC] Implement Emet Selch of the Third Seat

* rework Emet-Selch

* add test

* add static methods to handle whether ability was used this turn
2025-05-30 21:28:11 -04:00
theelk801
f2b97b6102 [FIN] Implement Vaan, Street Thief 2025-05-29 09:46:18 -04:00
xenohedron
535543860f refactor: introduce new helper method
to find permanent from card after moved to battlefield
2025-05-26 17:20:02 -04:00
Oleg Agafonov
66db821437 refactor: combined announceX methods in one, improved X message and selection for AI (part of #10330) 2025-05-16 19:34:57 +04:00
Oleg Agafonov
133e4fe425
other: reworked target selection: (#13638)
- WIP: AI and multi targets, human and X=0 use cases, human and impossible targets use cases;
- improved stability and shared logic (related to #13606, #11134, #11666, continue from a53eb66b58, close #13617, close #13613);
- improved test logs and debug info to show more target info on errors;
- improved test framework to support multiple addTarget calls;
- improved test framework to find bad commands order for targets (related to #11666);
- fixed game freezes on auto-choice usages with disconnected or under control players (related to #11285);
- gui, game: fixed that player doesn't mark avatar as selected/green in "up to" targeting;
- gui, game: fixed small font in some popup messages on big screens (related to #969);
- gui, game: added min targets info for target selection dialog;
- for devs: added new cheat option to call and test any game dialog (define own dialogs, targets, etc in HumanDialogsTester);
- for devs: now tests require complete an any or up to target selection by addTarget + TestPlayer.TARGET_SKIP or setChoice + TestPlayer.CHOICE_SKIP (if not all max/possible targets used);
- for devs: added detail targets info for activate/trigger/cast, can be useful to debug unit tests, auto-choose or AI (see DebugUtil.GAME_SHOW_CHOOSE_TARGET_LOGS)
2025-05-16 13:55:54 +04:00
theelk801
563e7fb712 [DSC] Implement Demonic Covenant 2025-04-30 10:16:07 -04:00
theelk801
46aa2a043d [ACR] Implement Havi, the All-Father 2025-04-23 09:55:01 -04:00
xenohedron
74d2265c12
refactor: find targeting stack object (#13534)
* refactor: simplify finding targeting stack object
related to #11185, 8e1805c

* clarify docs

---------

Co-authored-by: xenohedron <12538125+xenohedron@users.noreply.github.com>
2025-04-14 10:19:57 -05:00
theelk801
1ace958057 [TDC] Implement Broodcaller Scourge 2025-04-11 12:19:45 -04:00
Oleg Agafonov
dcdf0ca4a5 Choose a player at random - fixed that it wrongly choose same player (example: Scrambleverse, close #12679, close #13526);
Inniaz, the Gale Force - fixed that it wrongly choose left/right player (close #13526);
2025-04-10 12:42:42 +04:00
Oleg Agafonov
bae3089abb Reworked cost adjuster logic for better support of X and cost modification effects:
Improves:
* refactor: split CostAdjuster logic in multiple parts - prepare X, prepare cost, increase cost, reduce cost;
* refactor: improved VariableManaCost to support min/max values, playable and AI calculations, test framework;
* refactor: improved EarlyTargetCost to support mana costs too (related to #13023);
* refactor: migrated some cards with CostAdjuster and X to EarlyTargetCost (Knollspine Invocation, etc - related to #13023);
* refactor: added shared code for "As an additional cost to cast this spell, discard X creature cards";
* refactor: added shared code for "X is the converted mana cost of the exiled card";
* tests: added dozens tests with cost adjusters;

Bug fixes:
* game: fixed that some cards with CostAdjuster ignore min/max limits for X (allow to choose any X, example: Scorched Earth, Open The Way);
* game: fixed that some cards ask to announce already defined X values (example: Bargaining Table);
* game: fixed that some cards with CostAdjuster do not support combo with other cost modification effects;
* game, gui: fixed missing game logs about predefined X values;
* game, gui: fixed wrong X icon for predefined X values;

Test framework:
* test framework: added X min/max check for wrong values;
* test framework: added X min/max info in miss X value announce;
* test framework: added check to find duplicated effect bugs (see assertNoDuplicatedEffects);

Cards:
* Open The Way - fixed that it allow to choose any X without limits (close #12810);
* Unbound Flourishing - improved combo support for activated abilities with predefined X mana costs like Bargaining Table;
2025-04-08 22:39:10 +04:00
Jmlundeen
0df5f17603
[TDM] Implement omen mechanic (#13501)
* Abstract AdventureCard to SingleFaceSplitCard

* Fix AdventureCardSpellImpl

* Finish converting adventure card and adventure spell

* Update Brightcap Badger

change finalize call to adventure card

* Update Darksteel Monolith

being cast from hand condition referencing AdventureCardSpell

* Update Tlincalli Hunter

exiled creature condition referencing AdventureCardSpell

* Update Twice Upon a Time

finalizeAdventure called from Adventure card

* Finish abstracting Adventure

missed some more references to adventure cards

* Implement Omen cards

* Implement Dirgur Island Dragon

* Missed some adventureSpellName references

* OmenCardSpell had wrong comma symbol

* Add tests for Omen Cards

* Rename two part card components

change from SingleFaceSplitCard to CardWithSpellOption

* Update comments and variable name
2025-04-08 08:54:18 -04:00
jmlundeen
8e1805c874 Fix Ward batch event bug
Fixes #13498

getTargetingStackObject wasn't processing all stackObjects in a batch event

added tests for some related cards that also use the method
- Agrus Kos, Eternal Soldier
- Pawpatch Recruit
- Ward Ability
2025-04-05 07:47:24 -05:00
Oleg Agafonov
90034fe9b0 refactor: removed outdated and unused debug code (combat and continuous effects) 2025-02-22 15:32:30 +04:00
theelk801
bc120a34c7 [DFT] various text fixes 2025-02-08 16:42:10 -05:00
Oleg Agafonov
f17cbbe72b AI: improved performance and fixed crashes on use cases with too much target options like "deals 5 damage divided as you choose" (related to #11285):
* added DebugUtil.AI_ENABLE_DEBUG_MODE for better IDE's debugging AI code;
 * it's a target amount optimizations;
 * it's use a grouping of possible targets due same static and dynamic stats (name, abilities, rules, damage, etc);
 * instead of going through all possible combinations, AI uses only meaningful targets from particular groups;
2025-02-06 17:40:22 +04:00
Grath
4dbce1132c Fix typo in method name. 2025-01-30 13:33:06 -05:00
Oleg Agafonov
36309206a2 Create copy effects - fixed that it can't copy second side of the modal double-faced card (close #11307, close #13269); 2025-01-29 00:51:34 +04:00
Oleg Agafonov
1f1d1088a1 Turn under control reworked:
- game: fixed game freezes when computer try to take control over another computer or human (added game logs, related to #12878);
 - cheats: improved take and give control commands, now you can give control under yourself to another player;
 - cheats: improved take and give control commands, now you can return control to computer in the same priority;
 - cheats: deleted useless and unused command to activate opponent's ability;
2025-01-11 22:21:58 +04:00
Oleg Agafonov
5626c5f932 cheats: added default commands to take and remove control over another player (related to #12878) 2025-01-07 19:47:25 +04:00
Oleg Agafonov
c076f4925f Turn under control reworked:
- game: added support for human games (cards like Emrakul, the Promised End, #12878);
 - game: added support of 720.1. to reset control in the turn beginning instead cleanup step (related to #12115);
 - game: added game logs for priorities in cleanup step;
 - game: fixed game freezes and wrong skip settings usages (related to #12878);
 - gui: added playable and choose-able marks for controlling player's cards and permanents, including switched hands;
 - gui: added controlling player name in all choice dialogs;
 - info: control of computer players is it not yet supported;
2025-01-07 12:38:01 +04:00
Oleg Agafonov
2955535927 tests: added tests for auto-lands suggestion in deck editor and tourney (related to #13127) 2024-12-16 21:50:27 +04:00
Oleg Agafonov
c265e640bb Keen-Eyed Curator - fixed not working boost effect (#13022) 2024-10-24 22:18:29 +04:00
Grath
e5a351ff58
[DSC] Implement The Lord of Pain. (#12940)
Also adds "their" to the text that CardUtil.addArticle supports and fixes a range of influence bug in SpellCastAllTriggeredAbility.
2024-09-29 13:12:31 -04:00
Oleg Agafonov
45ded61d6f server: improved compatibility to run server under java 9+ (related to #12768, #6197) 2024-09-13 14:53:05 +04:00
xenohedron
2f9ba6dba9
fix "any number of targets with total value X or less" (#12808)
* improve UX for Call of the Death-Dweller

* add new utility methods for targets of total value limit

* fix affected cards to use new standard methods

* adjust message

* remove incorrect check

* requested adjustments
2024-09-09 00:18:29 -04:00
theelk801
64774b457f [DSK] Implement Zimone, All-Questioning 2024-08-31 21:48:40 -04:00
Oleg Agafonov
f105828e1c GUI: reworked battlefield panels to use layouts and dynamic settings (no needs in NetBeans to modify it, no needs in size calculations, improved positions and sizes, deleted outdated code); 2024-08-05 19:00:42 +04:00
Oleg Agafonov
bfa7c4c9a8 download: improved images download from scryfall source:
- fixed wrong timeouts for api (fixed 429 Too Many Requests);
- added any/10 parallel threads support;
- current api limit is 1 request per 300 ms;
2024-08-01 11:46:37 +04:00
Oleg Agafonov
b5527a28db download: added debug logs/stats for http requests (DebugUtil.NETWORK_PROFILE_REQUESTS) 2024-08-01 11:23:54 +04:00