Commit graph

497 commits

Author SHA1 Message Date
Oleg Agafonov
1e2d179410 multiple player/opponent choose - fixed that game ask players in random order instead APNAP (closes #12532);
game: fixed wrong player restore for TestPlayer and SimulatedPlayer2;
2024-07-01 13:22:58 +04:00
xenohedron
fdd244786b refactor: improve method name (related to 86fa9278) 2024-06-13 00:43:51 -04:00
xenohedron
aeaeccb63b
Fix bugs with dies triggers due to short living LKI reset (#12438)
* replace applyEffects() with processAction() for card usages

* update Goblin Welder and test

* add test for Historian's Wisdom

* enable other related tests

* only reset short living LKI for process action, not all apply effects

* update docs

* remove applyEffects from condition in Historian's Wisdom

* add another test case
2024-06-09 18:56:19 -04:00
Oleg Agafonov
37dbdb4b4b refactor: fixed miss deep copy of AlternativeSourceCosts in PlayerImpl (related to #12420) 2024-06-07 23:06:59 +04:00
Oleg Agafonov
c2ae1386ff server: improved conceding logic with more protection from game errors/freeze (related to #11285, #11460) 2024-06-07 12:52:42 +04:00
Susucre
2d625f0364 implement [MH3] Volatile Stormdrake ; provide source Ability to canBeTargetedBy and HexproofBaseAbility::checkObject 2024-06-06 17:36:11 +02:00
xenohedron
502ca34d14 add docs related to phasing methods, adjust method name 2024-06-02 21:28:14 -04:00
Susucre
20b7a115da
prevent direct access of Player->counters ; some cleanup on counter removal effects ; implement [MH3] Izzet Generatorium (#12314) 2024-05-29 22:34:54 +02:00
Susucre
754b382e78
implement [MH3] Nethergoyf, refactor targets usages by game param (#12267) 2024-05-21 13:34:38 +02:00
Susucre
3abce2f5c8
support until your next turn delayed triggers (#12233) 2024-05-16 13:37:53 +02:00
jimga150
551d5d8633
Gain abilities - improved combo support with Evoke, Dash and Prowl (example: Hunting Velociraptor, fixed #11714) (#12237) 2024-05-09 09:26:42 +04:00
Oleg Agafonov
d1cca988c4 refactor, ai: removed outdated and unused code (suggest actions for AI simulations); 2024-05-05 20:47:54 +04:00
Susucre
85cad4ff1e
cleanup AbilityType for easier check that an ability is an activated ability (#12153)
* cleanup AbilityType

* further cleanup

* cleanup instanceof

* tweak formatting

* rework Rex

* fix mistake in PlayerImpl

* cleanup 'instanceof' for 'ActivatedManaAbilityImpl'
2024-05-03 22:13:34 -04:00
jimga150
52ddcac59d
refactor: added counter removal events (#11989) 2024-05-02 17:32:55 +04:00
Susucre
7c3bbed8f3 make batchs for milling cards (per player, all)
Rework and test the couple of existing cards triggering on mill.
2024-05-01 20:55:50 +02:00
Susucre
d645facdc0
rework PhantomReplacementEffect used by 7 Phantom cards (#12189) 2024-04-27 17:34:59 +02:00
Oleg Agafonov
88eb35ebc7 code clean 2024-04-16 23:37:22 +04:00
Oleg Agafonov
e8e2f23284 server: improved server stability (#11285) and reworked triggers/playable logic (#8426):
* game: now all playable calculations done in game simulation, outside real game (no more freeze and ruined games by wrong Nyxbloom Ancient and other cards with wrong replacement dialog);
* game: fixed multiple problems with triggers (wrong order, duplicated calls or "too many mana" bugs, see #8426, #12087);
* tests: added data integrity checks for game's triggers (3 enabled and 3 disabled due current game engine logic);
2024-04-16 23:10:18 +04:00
Susucre
c77634c843
separate 'you may play'|'you may cast' AsThoughtEffect approuvers
Also, reworked Gonti, Lord of Luxury and checks it now works properly with Zoetic Cavern.
2024-04-13 12:10:53 +02:00
Susucre
821b0d069f
Return to battlefield transfromed - fixed that it was able to return non transformable cards, fixed #12066 (#12072) 2024-04-05 20:51:34 +04:00
Susucre
4bbdc3c543
[OTJ] Implement Fblthp, Lost on the Range (#12042) 2024-04-02 14:55:09 +02:00
ssk97
f0740c6f09
implement [MKM] Agency Outfitter (#12034)
* Fix move cards log messages

* Sludge Titan: Only track milled cards in public zones
2024-04-02 00:43:35 -04:00
xenohedron
cb28fb5a56
Refactor batch events (#11995)
* create new abstract class for batch event framework

* adjust CardUtil.getEventTargets to support new framework

* update TappedBatchEvent to new framework

* update UntappedBatchEvent to new framework

* slight cleanup

* update LifeLostBatchEvent to new framework

* update ZoneChangeBatchEvent to new framework

* complete refactor by moving damage events to new framework

* remove old code no longer used

* clean up some nonsense code in star wars card

* fix watcher checking id before event type

* fix wrong id usage

* fix missed wrong id usage
2024-03-28 23:19:20 -04:00
jimga150
c8383649df
Fix DIE_ROLLED event to set targetID to player who rolled the die (#11993)
* Fix DIE_ROLLED event to set targetID to player who rolled the die

* Fix DieRolledEvent instantiation
2024-03-25 21:34:42 -04:00
jimga150
50c75f05bd
[MAT] implemented Ob Nixilis, Captive Kingpin, refactored life lose and batches events (#11974) 2024-03-21 19:53:45 +04:00
PurpleCrowbar
e5759bbd9e
[PH17] Implement Inzerva, Master of Insights (#11774)
* Remove superfluous code from fateseal effect
2024-03-07 19:02:52 -05:00
Oleg Agafonov
c8a9a1a9db game: improved game logs for faced-down spells and exiled cards - now it support popup hint to view card/permanent (part of #11884, related to #11881, #8781) 2024-03-01 02:08:25 +04:00
Oleg Agafonov
e38a79f231
Face down images and cards rework (#11873)
Face down changes:
* GUI: added visible face down type and real card name for controller/owner (opponent can see it after game ends);
* GUI: added day/night button to view real card for controller/owner (opponent can see it after game ends);
* game: fixed that faced-down card can render symbols, abilities and other hidden data from a real card;
* images: added image support for normal faced-down cards;
* images: added image support for morph and megamorph faced-down cards;
* images: added image support for foretell faced-down cards;

Other changes:
* images: fixed missing tokens from DDD set;
* images: no more client restart to apply newly downloaded images or render settings;
* images: improved backface image quality (use main menu -> symbols to download it);
2024-02-29 01:14:54 +04:00
xenohedron
0a5370cf27 make inner class static 2024-02-17 22:31:24 -05:00
Oleg Agafonov
229e8d3075 game engine, tests and other fixes:
tests: fixed wrong permanent structure for battlefield cards (addCard command);
tests: added docs and additional runtime checks;
game: Modal double-faced cards - improved support, no more other side effects on battlefield;
game: Copy abilities - improved stability and cards support;
game: Player under control - improved stability and related cards support (possible NPE errors, additional runtime checks);
server: fixed bloated logs with game timer;
AI: fixed wrong timer in computer games;
2024-02-17 19:35:44 +04:00
Oleg Agafonov
e4157fefb8 AI: improved combat support:
* added support to attack battle permanents (#10246);
* fixed that AI was able to attack multiple targets by single creature (#7434);
* added docs;
* added todos with another bugs or possible problems with AI combat;
2024-01-20 00:17:14 +04:00
Oleg Agafonov
6ac2f44cc1 game, refactor: improved player related code, fixed miss reset fields between games like commanderIds (#11081, #11628) 2024-01-15 05:03:21 +04:00
xenohedron
9b3ff32a33
Rework sacrifice effects to support "can't be sacrificed" (#11587)
* add TargetSacrifice and canBeSacrificed

* SacrificeTargetCost refactor, now uses TargetSacrifice, constructors simplified, subclasses aligned

* fix text errors introduced by refactor

* refactor SacrificeEffect, SacrificeAllEffect, SacrificeOpponentsEffect

* cleanup keyword abilities involving sacrifice

* fix a bunch of custom effect classes involving sacrifice

* fix test choices

* update Assault Suit implementation

* fix filter check arguments

* add documentation to refactored common classes

* [CLB] Implement Jon Irenicus, Shattered One

* implement "{this} can't be sacrificed"

* add tests for Assault Suit and Jon Irenicus

* refactor out PlayerToRightGainsControlOfSourceEffect

* implement [LTC] Hithlain Rope

* add choose hint to all TargetSacrifice

---------

Co-authored-by: Evan Kranzler <theelk801@gmail.com>
Co-authored-by: PurpleCrowbar <26198472+PurpleCrowbar@users.noreply.github.com>
2023-12-31 14:10:37 -05:00
Oleg Agafonov
53add71826 Improved network stability and other related fixes:
* server: fixed that a critical errors ignored in user commands threads (now it will be added to the logs);
* network: fixed frozen user responses in some use cases;
* network: fixed accidental and incorrect user responses (only latest response will be used now);
* network: improved freeze logs, added problem method name and code's line number;
* cheats: removed outdated deck and card load logic (only init.txt commands supports now);
* cheats: fixed wrong priority after add card dialog (closes #11437);
* cheats: improved stability and random errors on cheat executes (related to #11437);
* docs: added details on network and thread logic, human feedback life cycle, etc (see HumanPlayer, ThreadExecutorImpl);
2023-11-24 21:22:16 +04:00
Steven Knipe
0058c2fb94 Use deepCopyObject in PlayerImpl 2023-11-19 00:33:56 -08:00
Susucre
bab07a421d
[LCI] Implement Starving Revenant (#11378) 2023-11-02 15:17:30 +01:00
Oleg Agafonov
b7ce9c80f0 refactor: improved ability's modes code (related to #11333) 2023-10-28 15:46:03 +04:00
Oleg Agafonov
d57a3c100d Performance: fixed server's big memory usage in long games and in big stack sizes (related to #11285, fixes #9302) 2023-10-14 15:54:10 +04:00
Oleg Agafonov
fe8b8e1def server: fixed npe error on load tests (miss buffer timer), code refactor 2023-10-11 14:15:15 +04:00
xenohedron
d7afa37893
Remove superfluous addManaCost method (#11288)
* no need to specify mana cost, just add cost

* handle all mana costs through addcost method only

* eliminate another constructor

* more constructor cleanup
2023-10-09 15:25:19 -04:00
xenohedron
9456650693
Merge pull request #11178 from ssk97/MorphRework_v2
Morph rework and check spell characteristics
2023-10-02 23:01:40 -04:00
Susucre
7c454fb24c
Rework AsThough handling to allow choosing/affecting a specific alternate cast (#11114)
* Rework AsThoughEffect

* some cleanup of MageIdentifer

* refactor ActivationStatus

* fix bolas's citadel

* fix a couple of the Alternative Cost being applied too broadly.

* fix Risen Executioneer

* allow cancellation of AsThough choice.

* fix One with the Multiverse

* cleanup cards needing their own MageIdentifier

* last couple of fixes

* apply reviews for cleaner code.

* some more cleanup
2023-10-02 18:42:54 -04:00
Steven Knipe
3f44e8e0e9 Remove dedicated land-morph special casing 2023-09-18 06:11:11 -07:00
Oleg Agafonov
4b3a19b4d5 refactor: improved target usage, replaced setNotTarget by withNotTarget 2023-09-07 05:35:54 +04:00
PurpleCrowbar
371eb87e0b Fix text of surveil window 2023-09-01 22:17:28 +01:00
arcox
2f0c1d84c5
Lint: fix 'declarations should use interfaces instead of classes' bugs (#11082) 2023-08-31 21:42:45 +04:00
Susucre
566f4dc7f7
[WOM] Implement (not yet official) Mosswood Dreadknight (#10792) 2023-08-28 18:27:28 -04:00
Alex Vasile
a2162ec3e7
Refactor: private fields and performance tweaks (#9625)
1a. Make `costs`, `manaCosts`, and `manaCostsToPay` private in `AbilityImpl` with access through getters/setters 
1b. fix cost adjuster for imprinted cards affected by the above

2a. Lazy instantiation for rarely used `data` field in `TargetPointerImpl`

3a. Pre-allocate certain array sizes in `Modes` and `CostsImpl`

4a. Make `manaTemplate` private in `BasicManaEffect`, copy when passing outside the class 
4b. Don't copy `manaTemplate` in copy constructor since it doesn't change 
4c. Add comments explaining copy usage for `manaTemplate` 
4d. Remove redundant variable assignment and make fields final 

---------

Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
2023-08-27 17:58:19 -04:00
Susucre
eef8f508e4
[CMM] Implement Demon of Fate's Design (#10737)
* refactor SacrificeCostManaValue to be an enum.

* [CMM] Implement Demon of Fates Design

* Add Unit Tests, including one bug on alternative cost.

* fix alternativeCosts made from dynamicCost returning that they were not activated when paid.

* fix small issues, add hint

* cleanup tests and add a couple

* Capitalize enum instances

* Minor fixes

* simplify the ContinuousEffect

* use the ConditionPermanentHint made for the Demon

* fix text
2023-08-12 15:49:06 -04:00
Artemis Kearney
9ba0da00ff
Basic groundwork for extra decks (contraptions, attractions) (#10378)
* extra deck cards not counted in deck size

* extra deck handling in deckbuilder

* move responsibility for extraDeckCard boolean to CardImpl

* remove redundant field copy
2023-08-06 21:06:32 -04:00