Commit graph

284 commits

Author SHA1 Message Date
xenohedron
7d170ef902 make SpellsCastWatcher a default game watcher 2023-08-13 01:17:51 -04:00
Susucre
f75b1c9f0a
Code cleanup: protect all copy constructors (#10750)
* apply regex to change public copy constructors to protected
* cleanup code using now protected constructors
* fix manaBuilder weird casting of Mana into ConditionalMana
2023-08-04 19:34:58 -04:00
Oleg Agafonov
3d3358cd05 game: turn modification improves:
- fixed miss phase changed events and logs in some use cases;
 - added source info in turn modification logs;
 - added game logs for take and lost control of the spell (example: Word of Command)
 - added game logs for skip step;
 - added game logs for extra step;
 - added game logs for skip phase;
2023-08-01 16:52:53 +04:00
Oleg Agafonov
8d938926b6 refactor: improved usage of one time turn modifications (skip step, extra turn, etc) 2023-07-31 20:16:28 +04:00
Susucre
4554fbc408
[LTC] Implement Denethor, Stone Seer (#10709)
* [LTC] Implement Denethor, Stone Seer

* rename game.damagePlayerOrPlaneswalker.

Reason being that It does actually damage any player or permanent.
2023-07-30 23:06:21 -04:00
Alexander Novotny
519b3988be
game timer: Add chess-style buffer time option (#10598)
* UI Changes

* Add new buffer time options

* Main functionality

* Final implementation

Also added player UI for when they are using their buffer time (timer turns green)
2023-07-28 22:05:21 -04:00
Alexander Novotny
a36a7d9b7f
[LTR] Add Goldberry, River-Daughter (#10524)
* Added Goldberry

* Slight optimizaztion

* Happy Path Test

* More unhappy tests

* Sanity check for Goldberry's counter choices

* Updated player.getMultiAmount to support individual constraints

* Some cleanup

Also modified ResourcefulDefense to use new multi amount api

* Updated logging

* Added hint for number of counters

* Fixed issue with Resourceful Defense

* Improvements to defaults

Default list will properly make sure to stay within individual maximums
If a player is asked for a choice that isn't actually a choice because each choice's min and max are equal, instead the default response is immediately returned. This helps with situations like moving a counter off of Goldberry when she only has one counter on her.

* -1/-1 Counter test

* Fixed issue with -1/-1 counters

* Adjusted dialog to properly enforce constraints
2023-07-28 21:29:40 -04:00
Susucre
6b616dbf20
refactor: expose startingHandSize in GameImpl constructor. (#10629)
For now, it is 7 in every game mode.
2023-07-16 18:36:26 +04:00
Susucre
b960b77774
Refactor name of minimum deck size (was startingHandSize) (#10628)
* Refactor: rename starting hand size, it was actually minimum deck size (40, 60 or 100 most of the time)
2023-07-16 01:45:19 +04:00
Susucre
14235b6320
Rework Ring-bearer implementation. Add GUI + gamelogs. (#10596)
* Fix Ring-bearer choosing & add some GUI + logs

* use a ring svg in a separate gold panel

* use a fontawesome svg

* add a couple null checks, group icon with commander

* rework rinbearer logic according to review

* fix typo in game log

* small fixes
2023-07-12 19:40:09 -04:00
Oleg Agafonov
6529ead72f refactor: simplified extra turn code, fixed NPE error on usage (Alchemist's Gambit) 2023-06-30 06:39:01 +04:00
Evan Kranzler
60e488cf05
rename classes (#10383) 2023-05-17 18:49:30 -04:00
Evan Kranzler
024c3081df
[BRC] Implement Rootpath Purifier (ready for review) (#10363)
* refactor check supertype methods

* change supertype to list to match card type

* refactor various subtype methods

* implement mageobjectattribute for supertype

* a few fixes

* [BRC] Implement Rootpath Purifier

* a few extra fixes

* more fixes

* add test for purifier
2023-05-13 10:48:07 -04:00
Oleg Agafonov
9d9916280a Attacking you abilities and filters - fixed that planeswalker removes from a combat can cause a game error (NPE error, example: Curse of Hospitality) 2023-05-09 14:59:44 +04:00
theelk801
4271ec8aec [LTR] Implement Gandalf, Friend of the Shire 2023-05-08 17:28:38 -04:00
Oleg Agafonov
5c705a92a3 Cheats: added error dialog on wrong cheat command, added chat message about cheat try; 2023-05-09 00:22:00 +04:00
Oleg Agafonov
5f55c7c667 Tokens and command objects reworked (part 1 of 2):
- fixed that copy effect doesn't restore original image after effect's end;
 - removed outdated availableImageSetCodes (all images auto-selected from tokens database now, related to #10139);
 - refactor command objects to use CommandObjectImpl;
 - refactor planes/emblems/etc objects to use MageObjectImpl, added copyable support;
 - refactor another game objects to remove some duplicated fields;
2023-05-08 02:15:07 +04:00
Evan Kranzler
3503513c4e
Implement The Ring Tempts You mechanic (#10320)
* remove skip

* initial implementation of the ring mechanic

* some changes

* rework ring-bearer choosing

* [LTR] Implement Call of the Ring

* update ring-bearer condition
2023-05-07 14:32:28 -04:00
Oleg Agafonov
3986196aa4 Tokens rework: fixed morph support, fixed test (related to #10139) 2023-05-01 19:41:25 +04:00
theelk801
c270d282d0 a few small updates to battle rules 2023-04-16 22:22:51 -04:00
Evan Kranzler
947351932b
Ready for Review: Implementing Battles (#10156)
* add types and subtypes

* add startingDefense attribute

* [MOM] Implement Invasion of Ravnica / Guildpact Paragon

* fix two small errors

* refactor various instances of "any target"

* fully implement defense counters

* battles can now be attacked

* [MOM] Implement Invasion of Dominaria / Serra Faithkeeper

* [MOM] Implement Invasion of Innistrad / Deluge of the Dead

* [MOM] Implement Invasion of Kaladesh / Aetherwing, Golden-Scale Flagship

* [MOM] Implement Invasion of Kamigawa / Rooftop Saboteurs

* [MOM] Implement Invasion of Karsus / Refraction Elemental

* [MOM] Implement Invasion of Tolvada / The Broken Sky

* simplify battle info ability

* fix verify failure

* some more fixes for attacking battles

* [MOM] Implement Invasion of Kaldheim / Pyre of the World Tree

* [MOM] Implement Invasion of Lorwyn / Winnowing Forces

* [MOM] Implement Invasion of Moag / Bloomwielder Dryads

* [MOM] Implement Invasion of Shandalar / Leyline Surge

* [MOM] Implement Invasion of Belenon / Belenon War Anthem

* [MOM] Implement Invasion of Pyrulea / Gargantuan Slabhorn

* [MOM] Implement Invasion of Vryn / Overloaded Mage-Ring

* [MOM] Implement Marshal of Zhalfir

* [MOM] Implement Sunfall

* implement protectors for sieges

* partially implement siege defeated trigger

* fix verify failure

* some updates to blocking

* [MOM] Implement Invasion of Mercadia / Kyren Flamewright

* [MOM] Implement Invasion of Theros / Ephara, Ever-Sheltering

* [MOM] Implement Invasion of Ulgrotha / Grandmother Ravi Sengir

* [MOM] Implement Invasion of Xerex / Vertex Paladin

* add initial battle test

* fix verify failure

* [MOM] Implement Invasion of Amonkhet / Lazotep Convert

* [MOM] update spoiler

* update how protectors are chosen

* update text

* battles can't block

* add control change test

* rename battle test for duel

* add multiplayer test

* [MOM] Implement Invasion of Alara / Awaken the Maelstrom

* [MOM] Implement Invasion of Eldraine

* [MOM] Implement Invasion of Ergamon / Truga Cliffhanger

* [MOM] Implement Invasion of Ixalan / Belligerent Regisaur

* battles now cast transformed (this is super hacky but we need to refactor TDFCs anyway)

* add TODO

* add ignore for randomly failing test

* a few small fixes

* add defense to MtgJsonCard (unused like loyalty)

* implement ProtectorIdPredicate

* small fixes
2023-04-13 20:03:16 -04:00
Oleg Agafonov
407369ea83 Merge fix 2023-04-01 19:07:15 +04:00
Oleg Agafonov
4bf3e43da6 * GUI: face down cards improved:
* now it show face up cards in game logs on game end;
 * now it show face up cards in battlefield on game end (#4635);
 * fixed that real card face was visible in network data;
2023-04-01 18:40:06 +04:00
Oleg Agafonov
bfba179bdf * Body Count - fixed game error on usage (miss watcher) 2023-03-25 16:16:11 +04:00
Oleg Agafonov
a15a0daa04 Fixed potential NPE errors in getPhase usage (fixed Berserker's Frenzy, etc) 2023-03-25 16:01:27 +04:00
PurpleCrowbar
bd2678242d Improve grammar and written clarity on Commander zone replacement effect. Still works with Oathbreaker 2023-03-15 03:49:26 +00:00
Alex W. Jackson
10d7acb4b5
Create common class for "when target dies this turn" delayed triggers (#9722)
Fixes #9716. Fixes #9719.
2022-11-04 05:27:56 -04:00
Evan Kranzler
3ed26a2b1f
Refactor effects which disable the "legend rule" (#9662) 2022-10-28 18:04:23 -04:00
Evan Kranzler
5e656b8da5
[DMU] Implemented Impede Momentum (#9383) 2022-08-18 20:38:54 -04:00
DeepCrimson
1f6170570b
Refactor: Document and clean-up getSpellOrLKIStack (#9293) 2022-07-24 16:15:56 -04:00
DeepCrimson
4e139c9878
Refactor: Use primitive integer type (#9310) 2022-07-22 23:05:13 -04:00
Oleg Agafonov
4e20c4c475
Merge pull request #9117 from DeepCrimson/removeUnusedParamFromContainsMethod
Refactor: Remove unused `sourceID` param from `contains` method
2022-06-17 08:40:57 +04:00
DeepCrimson
ae88cc2f66
Refactor: Delete commented out code blocks in GameImpl.java (#9108)
Co-authored-by: DeepCrimson <deepcrimson@users.noreplyl.github.com>
2022-06-17 08:27:51 +04:00
DeepCrimson
3192a191a4 Refactor: Remove unused sourceID param from contains method 2022-06-15 21:34:25 -07:00
DeepCrimson
5d09315387
Refactor: Fix typo in GameImpl.java (#9105) 2022-06-13 08:24:37 -04:00
Alex Vasile
63aaf44f93 [CLB] Fix initiativeId not being set when a player first takes the initiative. Added documentation to related functions. For #9010. 2022-05-29 12:30:09 -06:00
DeepCrimson
9084180937
Fix 'chosen' spelling (#9021) 2022-05-27 21:45:07 -06:00
teskogi
7ec94425df
Implement Aeon Engine (#8804)
Co-authored-by: teskogi <tojile7269@yeafam.com>
2022-05-25 15:33:28 -05:00
Evan Kranzler
86dad5e54f [CLB] Implemented White Plume Adventurer 2022-05-17 20:18:18 -04:00
Daniel Bomar
63239fe8e6
[SNC] Implemented shield counter mechanic (#8830)
* [SNC] Implemented shield counter mechanic

* Rework shield counter to be a global replacement effect

* Add unit test for shield counter

Co-authored-by: Evan Kranzler <theelk801@gmail.com>
2022-04-14 09:43:12 -04:00
Evan Kranzler
6e65db284c
Implemented "Until your next end step" duration (#8831)
* initial implementation of until next end step duration

* added test, reworked effect duration
2022-04-10 17:57:58 -04:00
Evan Kranzler
80e11b2052
(WIP) Replacing blocking/blocked by predicates (#8729)
* replaced blocking/blocked by predicates

* added test for knight of dusk (currently fails)

* added source parameter to filters and everything else that needs it

* some changes to various predicates

* test fix

* small changes to filter code

* merge fix

* fixed a test failure

* small change to Karn, Scion of Urza

* removed sourceId from filter methods and other similar places

* added new getobject method to fix some test failures

* a few more fixes

* fixed merge conflicts

* merge fix
2022-03-23 18:45:02 -04:00
Evan Kranzler
02017b9a88
Implementing The Prismatic Piper (Ready for review) (#8164)
* [CMR] Implemented The Prismatic Piper

* updated commander validation to handle The Prismatic Piper

* created abstract base class for commander variants

* added ability to prismatic piper

* added game init handling

* small revert

* small reorganization of tests

* added some validation tests for piper

* added more tests for piper

* add another test

* added decklist comments to tests

* added some more piper tests

* added another test

* added mana option tests

* added a companion test

* fix conflict

* updated abstract commander to work with Friends forever

* merge fix

* Deck: added details for illegal validation of companion card;

Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
2022-03-17 18:02:29 -04:00
Evan Kranzler
bf699b5559 fixed test failures 2022-02-24 21:12:33 -05:00
Evan Kranzler
48d139393d [FUT] reworked Daybreak Coronet 2022-02-24 20:15:15 -05:00
Daniel Bomar
7082b86eb3
[MID] Implemented Disturb mechanic (#8201)
* [MID] Implemented Disturb mechanic

Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
Co-authored-by: Evan Kranzler <theelk801@gmail.com>
2021-11-09 10:12:50 +04:00
Evan Kranzler
30afb11cd2
Implementing Daybound/Nightbound mechanic (#8200)
* adding initial day/night support in game state

* remove card exclusion for testing

* added functional implementation to abilities from main branch

* functionally implemented NightCondition

* updated DayNightHint

* added support for nightbound entering transformed at night

* [MID] Implemented Unnatural Moonrise

* [MID] Implemented The Celestus

* added some docs

* changed access for state day/night methods

* added transformation to day/night switch

* re-added unfinished filter, removed day/night cards

* fixed some errors with transforming

* added hints to all day/night cards

* added transformation prevention plus a test

* added Immerwolf test

* [MID] Implemented Tovolar, Dire Overlord / Tovolar, The Midnight Scourge

* refactored some cards to not use isTransformable

* removed transformable parameter

* simplified some transform code

* fixed null pointer exception

* removed unnecessary canTransform method

* fixed a small error

* reworked implementation of rule 701.28f

* small change in transform logic

* fixed failiing test

* fixed verify failure

* small merge change

* added support for day/night switching based on spells cast

* [MID] Implemented Curse of Leeches / Leeching Lurkers

* moved day/night handling to untap step

* added tests for cards which set day and trigger from a change

* [MID] Implemented Ludevic, Necrogenius / Olag, Ludevic's Hubris

* added support for creatures transforming to match day/night when necessary

* fixed verify failures

* fixed another verify failure

* remove temporary verify skip

* added transform message

* removed unnecessary transform message

* [MID] Implemented Angelic Enforcer / Enduring Angel

* updated DayNightHint with more information

* fixed verify failure

* merge fix

* fixed Startled Awake / Persistent Nightmare / Moonmist interaction

* added another test for Moonmist

* merge fix

* merge fix

* [MID] Implemented Baneblade Scoundrel / Baneclaw Marauder

* merge fix

* [MID] various text fixes

* [MID] a few more text fixes

* Merge fix

* Improved transform game logs (hints, source), fixed day/night logs, fixed miss game param (due code style);

* fixed a test failure

* Merge fix

Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
2021-11-05 23:11:23 +04:00
Daniel Bomar
eec3c44f1e
Removed game.preventDamage method (fixes #8280) 2021-09-27 16:01:28 -05:00
Oleg Agafonov
b739694c93 Server: added stack info to logs for rollback error; 2021-09-05 22:25:42 +04:00
Oleg Agafonov
83017e3c51 Devs: added docs and todo about short living LKI, LKI and current problems; 2021-09-05 18:49:44 +04:00