- IMPORTANT: Legendary is not an ability anymore, creating cards with super types should be much more natural. You can now say "type=Snow Land", and stuff like that. No backward compatibility!!!
Important: I just realized that the fix to Reiver Demon will probably lead to problems later on. The problem is this: Reiver Demon has an ability "When yu play this from your hand ...". This was coded as @moveto(this|mybattlefield) from(mayhand). Which doesn't work, because the card doesn't actually enter the battlefield from the hand, it enters from the stack. So, "@moveto(this|mybattlefield) from(maystack)" has the desired effect. However, IIUC, spells played from anywhere else (e.g. from the graveyard, if they allow that) should be placed on the stack to. Hence, the "fixed" trigger will also fire in this case, which is wrong.
This means that we can't actually code "played from ..." entirely correct at the moment. Is there a solution for this?
According to the rules, only a copy of a spell enters the stack (never the spell itself), so could the "from()" part access where the card actually came from?
Do we need an @played trigger to differentiate between moving a card and actually playing it?
Notes to programmers:
1. This feature uses an awful lot of copy-pasta, using "protetcion from()" as a base. While I'm learning the architecture, it's easier for me to have a dedicated single-purpose piece of code to work with, than trying to create multi-purpose code. I'm aware that this isn't a very elegant approach though, and I hope to be able to refactor additions like this into multi-purpose code once I have a better understanding of the architecture as a whole.
2. Please check the questions I'll add in my next code comments, specifically about AI integration and activated abilities / instants / sorceries.
3. I did have a crash (with the debugger complaining about stack corruption around the cd variable) during testing. I wasn't able to reproduce it though. I did have to clean the solution in-between when I updated to the primitives system, so perhaps there was this cleaning solved whatever corruption was in my files. I'm mentioning the issue in case someone has an idea on where my code might be risky (I'm still probne to making beginners mistakes).
- fix issue 168 (kudzu)
- Fix issue 162 (copy VS shroud). This fix introduces a new keyword: NotATarget() instead of Target(). (Which was the best way for me to keep some kind of backward compatibility/ not alter the code too much / fix the bug)
text=Destroy target creature. It can't be regenerated. That creature's controller puts a 3/3 green Ape creature token onto the battlefield.
auto=bury && token(Ape,creature,3/3,green) targetcontroller"
Doesn't work, if cast on creature the player is controlling, it works, but when cast on opponent's creature, token ends up on player's side.
* mtgid now defaults to 0.
* TextScroller will not update when empty.
* Cache now moves WCachedResources we're finished with to a garbage pool for later use (to reduce memory fragmentation).
* Demo still crashes... but I'm thinking that has to do with fragmentation, not a leak?