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
This commit is contained in:
Susucre 2023-10-03 00:42:54 +02:00 committed by GitHub
parent ba135abc78
commit 7c454fb24c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
66 changed files with 1176 additions and 395 deletions

View file

@ -4,9 +4,21 @@ package mage;
* Used to identify specific actions/events and to be able to assign them to the
* correct watcher or other processing.
*
* @author LevelX2
* @author LevelX2, Susucr
*/
public enum MageIdentifier {
// No special behavior. Cleaner than null as a default.
Default,
// -------------------------------- //
// spell cast watchers //
// -------------------------------- //
//
// All those are used by a watcher to track spells cast using a matching MageIdentifier way.
//
// e.g. [[Johann, Apprentice Sorcerer]]
// "Once each turn, you may cast an instant or sorcery spell from the top of your library."
//
CastFromGraveyardOnceWatcher,
CemeteryIlluminatorWatcher,
GisaAndGeralfWatcher,
@ -19,7 +31,65 @@ public enum MageIdentifier {
WishWatcher,
GlimpseTheCosmosWatcher,
SerraParagonWatcher,
OneWithTheMultiverseWatcher,
OneWithTheMultiverseWatcher("Without paying manacost"),
JohannApprenticeSorcererWatcher,
KaghaShadowArchdruidWatcher
KaghaShadowArchdruidWatcher,
CourtOfLocthwainWatcher("Without paying manacost"),
// ----------------------------//
// alternate casts //
// ----------------------------//
//
// All those are used to link (cost) modification only when cast
// using an AsThough with the matching MageIdentifier.
//
// e.g. [[Bolas's Citadel]]
// """
// You may look at the top card of your library any time.
//
// You may play lands and cast spells from the top of your library.
// If you cast a spell this way, pay life equal to its mana value rather than pay its mana cost.
// """
//
// If there are other ways to cast from the top of the library, then the MageIdentifier being different
// means that the alternate cast won't apply to the other ways to cast.
BolassCitadelAlternateCast,
RisenExectutionerAlternateCast,
DemilichAlternateCast,
DemonicEmbraceAlternateCast,
FalcoSparaPactweaverAlternateCast,
HelbruteAlternateCast,
MaestrosAscendencyAlternateCast,
NashiMoonSagesScionAlternateCast,
RafinnesGuidanceAlternateCast,
RonaSheoldredsFaithfulAlternateCast,
ScourgeOfNelTothAlternateCast,
SqueeDubiousMonarchAlternateCast,
WorldheartPhoenixAlternateCast,
XandersPactAlternateCast;
/**
* Additional text if there is need to differentiate two very similar effects
* from the same source in the UI.
* See [[Court of Lochtwain]] for an example.
* """
* At the beginning of your upkeep, exile the top card of target opponents library.
* You may play that card for as long as it remains exiled, and mana of any type can be spent to cast it.
* If you're the monarch, until end of turn, you may cast a spell from among cards exiled with
* Court of Locthwain without paying its mana cost.
* """
*/
private final String additionalText;
MageIdentifier() {
this("");
}
MageIdentifier(String additionalText) {
this.additionalText = additionalText;
}
public String getAdditionalText() {
return this.additionalText;
}
}