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>
* apply regex to change public copy constructors to protected
* cleanup code using now protected constructors
* fix manaBuilder weird casting of Mana into ConditionalMana
* Use common FirstCombatPhaseCondition on Raiyuu, Storm's Edge
* Use common ReturnFromExileForSourceEffect on Parallax Wave
* Use common exile effects on Prowling Geistcatcher (attempt to fix#9981)
* Fix text: Fading ability
* Fix text: Endangered Armodon
* Fix text: Nemata, Primeval Warden
* Fix text: Capitalization on alternative/additional costs other than mana
* Now token's zcc uses same logic as card's zcc: enters to battlefield with +1 zcc instead +0 zcc
* It can improve support of copied spells that store zcc related data (bug example: lost kicked status for copied spell/token);
* Kicker abilities - improved support with copied creature spells (example: Verazol, the Split Current, #7431, #7433);
* Refactor: simplified kicker code;
* Now ZCC of copied spells syncs with source card or coping spell (allows to keep ability settings that depends on ZCC);
* Fixed bug that allows to lost kicked status in copied spells after counter the original spell or moves the original card (see #7192);
* Test framework: improved support of targeting copy or non copy spells on stack;
* added initial support for permanent tokens
* [ZNR] Implemented Lithoform Engine
* [ZNR] Implemented Verazol, the Split Current
* permanent spell tokens no longer count as created
* small change to token generation
* added test, currently incomplete
* found a potential solution for kicker issue, possibly too much of a hack
* fixed a test failure
* reversed hack changes
* skipped failing tests
* added more tests
* Now player must choose additional costs before ability's modes;
* Fixed broken kicker ability from ZNR (see comments from d4ca287f0f);
* Improved compatibility of additional cost with cost modification effects (fixed that optional multi-costs doesn't affected by cost modification);
* Improved compatibility of additional cost with alternative cost (some cards ignores additional cost on alternative usage, e.g. on play free);
"b" + "r" now changed to 'b' + 'w'. It's more straight-forward, and may cause perfomance improvements - character primitives allocation is faster and less expensive than string creation.