Commit graph

2036 commits

Author SHA1 Message Date
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
Oleg Agafonov
75958e3710 refactor: improved and reorganized client-server api, added additional logs, fixed miss admin checks for some commands 2023-11-23 09:12:02 +04:00
ssk97
e43e918c67
Conditional mana - fixed that some mana cant be used for paying “counter unless” cost and other things (#11447)
* Add tests for conditional mana usage with soft counterspells

* Fix "to cast" conditions on common ManaCondition classes

* Add fix to all remaining ManaCondition classes

* SimpleActivatedAbilityConditionalMana is tested to pay for a soft counterspell activated ability

* Remove now-unused imports
2023-11-23 01:37:45 +04:00
ssk97
2cc9957753
Costs Tag Tracking part 4: Convoke (#11446)
* Switch Convoke to using costs tag system

* Add Convoke copy/clone tests

* update author name on sufficiently changed files

* Remove now-unused CONVOKED event
2023-11-23 01:31:56 +04:00
xenohedron
4977fea307
Merge pull request #11417 from ssk97/TagTracking3_KeywordAbilities
Costs Tag Tracking part 3: Most keyword abilities
2023-11-20 21:28:40 -05:00
Oleg Agafonov
74862c83b2 Merge fix 2023-11-19 19:28:04 +04:00
Oleg Agafonov
27c9543f62 The Ring Emblem - fixed not working 3rd effect with blocker sacrifice (closes #11425), added docs and usage example for BLOCKER_DECLARED and CREATURE_BLOCKED game events 2023-11-19 19:16:55 +04:00
xenohedron
f4920b60ed text fixes 2023-11-19 00:09:35 -05:00
Steven Knipe
660288dfd7 Use generics to ensure the correct class types stored inside the costs tags. 2023-11-17 02:37:06 -08:00
ssk97
bea33c7493
Costs Tag Tracking part 2: Tag system and X values, reworked deep copy code (#11406)
* Implement Costs Tag Map system

* Use Costs Tag Map system to store X value for spells, abilities, and resolving permanents

* Store Bestow without target's tags
Change functions for getting tags and storing the tags of a new permanent

* Create and use deep copy function in CardUtil, add Copyable<T> to many classes

* Fix Hall Of the Bandit Lord infinite loop

* Add additional comments

* Don't store null/empty costs tags maps (saves memory)

* Fix two more Watchers with Ability variable

* Add check for exact collection types during deep copy

* Use generics instead of pure type erasure during deep copy

* convert more code to using deep copy helper, everything use Object copier, add EnumMap

* fix documentation

* Don't need the separate null checks anymore (handled in deepCopyObject)

* Minor cleanup
2023-11-16 23:12:32 +04:00
ssk97
ec4c79e0e0
Fix copying subabilities to no longer duplicate them (#11399)
* Fix Subability copy bug (fix #10526 )

* Cards which copy abilities of other cards should not copy subabilities.

* Enable previously-failing tests

* Find more addAbility that should be done without subabilities

* Add documentation to addAbility function

* Add warning about not using basic addAbility when copying from a source

* Invert withSubabilities to fromExistingObject
2023-11-12 19:57:39 -05:00
xenohedron
d937f7279e fix Contested Game Ball 2023-11-09 22:05:22 -05:00
xenohedron
933d694b08 implement [LCI] Market Gnome 2023-11-09 21:42:57 -05:00
xenohedron
ded7eeeaa8 align DISCOVERED event to naming convention
no need for custom event class
2023-11-09 20:44:52 -05:00
Oleg Agafonov
d6c858ecaf performance: added day/night performance test for transform ability (disabled by default, see DayNightTest, related to #11285), added day/night rules ref 2023-11-07 01:25:15 +04:00
Oleg Agafonov
dfbd6627e5 game: fixed miss watchers from second side of transformable cards (closes #11329); 2023-11-06 10:40:05 +04:00
xenohedron
5275c87a41 implement [LCI] Twists and Turns
expand explore tests
2023-11-01 23:28:07 -04:00
Evan Kranzler
595955a3cc
Add finality counters (#11379)
* [LCI] Implement Soulcoil Viper

* add finality counter test

* fix bug, add extra test

* [LCI] Implement Uchbenbak, the Great Mistake
2023-11-01 22:08:57 -04:00
Susucre
bc335b949b [LCI] Implement Curator of Sun's Creation 2023-11-01 20:12:49 +01:00
Susucre
726f72dd12 [LCI] Implement Corpses of the Lost 2023-11-01 15:44:59 +01:00
xenohedron
ebf71941a9
cleanup EntersBattlefieldAllTriggeredAbility and subclasses (#11372)
* comment out rule override to use generated text instead

* new ETB Opponent trigger class

* text improvements

* update ETB cast trigger

* remove controlledtext parameter

* more text improvements

* more fixes

* lots of other fixes

* most of the remaining fixes

* fix halana text

* fix smoke shroud text

* improve text gen

* remove rule param from constructors

* minor adjustments

* whenever a player puts

* final fixes

* standardize when/whenever phrase generation
2023-10-31 21:00:45 -04:00
theelk801
1388972d4c [LCI] Implement Nicanzil, Current Conductor 2023-10-30 21:16:44 -04:00
PurpleCrowbar
30b1ef5491
[WHO] Implement The Master, Multiplied (#11356) 2023-10-29 21:42:02 +00:00
Susucre
0c485ec593
[LCI] Implement The Millennium Calendar (#11359)
new UNTAPPED_BATCH event.
2023-10-29 12:43:24 +01:00
xenohedron
ad66b91642 fix #11353 (InvestigateTargetEffect)
add some test cases
2023-10-28 16:54:27 -04:00
xenohedron
9733786e5d add GameEvent.EventType.EXPLORE
add tests for explore multiple times
2023-10-28 14:43:25 -04:00
Susucre
a681325f66 [LCI] Implement Master's Guide-Mural 2023-10-28 18:46:53 +02:00
Susucre
bcd8687285 [LCI] Implement Poetic Ingenuity 2023-10-28 18:46:53 +02:00
theelk801
fdb309c5f3 [LCI] Implement Broodrage Mycoid 2023-10-28 10:31:10 -04:00
Susucre
c1e6748470 [LCI] Implement Palani's Hatcher 2023-10-27 18:15:02 +02:00
Susucre
b6cedee854 [LCI] Implement Ojer Taq, Deepest Foundation 2023-10-26 19:49:29 +02:00
Susucre
27b8d3e198
[LCI] Implement Deeproot Pilgrimage (#11350) 2023-10-26 18:06:10 +02:00
Susucre
1c4b35baa8 [LCI] Implement Vito, Fanatic of Aclazotz 2023-10-26 12:50:39 +02:00
theelk801
993cc44f69 [LCI] Implement Waterwind Scout 2023-10-24 20:39:08 -04:00
Susucre
d440cf5b08
[LCI] Implement Kellan, Daring Traveler (#11332)
Also adds Map Token, a new Token with implicit rules:
> {1}, {T}, sacrifice {this}: target creature you control explores. Activate only as a sorcery.
2023-10-24 19:36:16 +02:00
Susucre
5996cfbce2
[MIR] Implement Teferi's Imp (#11326) 2023-10-22 14:34:45 +02:00
Susucre
1907f55583
[LCI] Implement Huatli, Poet of Unity (#11331) 2023-10-22 14:34:12 +02:00
Susucre
49093873c2 [WHO] Implement Dinosaurs on a Spaceship 2023-10-22 14:16:26 +02:00
Oleg Agafonov
c148e2f5d7 Prismatic Piper and same cards - fixed game error on disconnected player before game begin 2023-10-21 17:41:41 +04:00
Susucre
a37fc0589a
[LCI] Implement The Skullspore Nexus (#11327) 2023-10-21 15:26:38 +02:00
Susucre
36ae1a641e
[WHO] Implement The Sea Devils (#11310) 2023-10-17 11:59:08 +02:00
Rowan Gudmundsson
76f38201c0
Implement [CLB] Aboleth Spawn (#9857)
Update `StackAbility::createSingleCopy` to properly set controller

Includes test coverage

---------

Co-authored-by: Rowan Gudmundsson <rowan.gudmundsson@oddball.io>
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
2023-10-14 17:12:15 -04:00
Evan Kranzler
d705fa0e41
Implement Villainous Choice mechanic (#11304)
* [WHO] Implement Great Intelligence's Plan

* [WHO] Implement The Valeyard

* add comment for villainous choice event
2023-10-14 15:27:45 -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
36ccfb0a2a Performance: fixed memory leaks on each card viewer or draft open (10 Mb per call, related to #11285, fixes #9548) 2023-10-14 12:39:49 +04:00
theelk801
bdf6aa5379 [WHO] Implement Cult of Skaro 2023-10-13 09:12:40 -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
ssk97
5e095afdb0
Implement Prototype ability (#11249)
Prototype is a SpellAbilityType, for which alternate costs are permitted. It has a continuous effect that applies on the battlefield as well as a method to modify the spell on the stack. Permanents have an isPrototyped flag that copy effects can check explicitly (same brittle method as transformed permanents use; reworking copy effects to streamline them is a separate scope).

Many test cases have been added to confirm functionality (thanks to Zerris for additional test suggestions).

---------

Co-authored-by: Susucre <34709007+Susucre@users.noreply.github.com>
Co-authored-by: Evan Kranzler <theelk801@gmail.com>
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
2023-10-09 21:06:19 -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
Susucre
b7ad2d8c86
[WHO] Implement Five Hundred Year Diary, Flatline, Frost Fair Lure Fish, Laser Screwdriver, Sonic Screwdriver (#11274)
* Add Hint to Confront the Unknown

* [WHO] Implement Five Hundred Year Diary

* [WHO] Implement Flatline

* [WHO] Implement Frost Fair Lure Fish

* [WHO] Implement Laser Screwdriver

* [WHO] Implement Sonic Screwdriver
2023-10-08 01:39:50 -04:00