- 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)
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;
* 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
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
* 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;
- 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;
- 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;
* 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
- added shareable code with default proxy, headers and other settings for download tasks like images, symbols, mtgjson, etc;
- use XmageURLConnection.downloadText for text resources
- use XmageURLConnection.downloadBinary for any file resources
- added user agent with app version for all requests;
- added http logs and improved error messages;
- reworked skip and phase buttons to use layouts instead IDE designer;
- added GUI scale support skip and phase buttons (depend on dialogs font size from preferences settings);
* refactor: added helper emblems instead rad counter's inherent emblems (use initGameDefaultHelperEmblems to define new card hints or other fake objects);
* refactor: added card hints support for emblems, planes and other command objects;
* GUI: added storm counter as default card hint (use hints tool to see it, closes#12360);
* Replace "([a-zA-Z]+).getManaCostsToPay().getX()" with CardUtil.getSourceCostsTag(game, $1, "X", 0)
Fix Disrupting Shoal
* Change final card .getX() calls
* Condense all ManacostVariableValue enum values into "instance"
* Further removal of getX, Display X symbol for non-mana X cards
* Fix test
* Fully remove ManaCosts.getX
* Replace all different X dynamic values with GetXValue
* Remove individual cards checking getAmount for X values (leaving cost reduction that does not use X)
* Add null check for game object inside getSourceCostsTagsMap
* fix build errors
* fix Vicious Betrayal
* text fix
- fixed broken database in some use cases (example: AI and choose name dialog, related to #11285);
- added docs and debug tools for sql queries, caches and memory analyse (see DebugUtil);
- refactor code to use shared settings;
- deleted outdated and un-used code (db logs, stats, etc);
* Implement Time Reaper, start rework
* Create DamagedPlayerControlsTargetAdjuster, convert Aberrant to use it
* Always add targets for EachOpponentPermanentTargetsAdjuster
* Improve target name, finish Time Reaper
* Convert some cards
* Improve documentation, more cards
* More cards, fix cards that needed to use owner instead of controller
* Fix unfinished AlelaCunningConqueror changes
* more cards
* All remaining cards
* Fix target type
* Remove outdated attempt at TargetController.SOURCE_EFFECT_TARGET_POINTER
* Finish removal of SOURCE_EFFECT_TARGET_POINTER
* Change targetAdjuster blueprint target to be set inside setTargetAdjuster, add error checking
* Always add Target Adjuster after Target
* Add comment
* Fix TolarianContemptTest to skip opponent with no valid targets
* Forgot to git add the new abstract GenericTargetAdjuster
* Test now possible after merge, fix missed ChangeOfPlans adjuster order
* Text and optional-ness fixes
* Always set target pointer
* improved by (#12415)
* Added symbol downloads for new colorless hybrid
---------
Co-authored-by: Alexander Novotny <alexander_novo@mail.tmcc.edu>
Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>