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).
- Card Primitives system. Check Royal Assassin in RV, 10E, M10
- Please review, is sets/primitives a good directory? Should we rename MTGCard into "CardPrint"?
- Unfortunately for now it is not possible to "override" a Primitive. A card that links to a primitive but also defines new "values" will create its own data and ignore the data in the "linked" primitive for the time being. I hope to solve that at some point...
Limitations:
- Operators for "greater than", "less than", "unequal" have not been implemented, but if a card actually needs them, you can use a preceding minus sign to negate a comparison. Example: -power=3 means "power not equal to 3", -toughness<=3 means "toughness>3".
- You can't use spaces when specifying such restrictions. Write "power<=3" instead of "power <= 3"
- You now need to use a space before the "<" and ">" commands that count the matches for lord(), foreach(), all() and aslongas(). So far we always did use spaces in front of them without actually needing to, now we need to.
- manacost restrictions don't take "X" costs into account. Example: Mistmeadow Skulkin (FUT) has protection from manacost>=3. Blaze has a converted manacost of 1, but when you cast it with an X of 2, then it actually has a converted manacost of 3 while on the stack, and Mistmeadow Skulkin would be protected from it, but currently it isn't.
Please review the code, I'll add a few remarks/questions of my own.
- 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)
- Code cleanup
- fix issue 142 . This will lead to other issues for some cards. These issues can be fixed by using targetcontroller/controller...etc
- Added a few cards
- Added @damaged works fine (tested with thieving magpie), please test your additions if you plan to add some cards with this keyword and report if buggy. As the other trigger, you cannot have a target unless there is a may ability.
- Added 2 cards to 10E - Reminisce and Thieving Magpie both tested and working.
- Added 2 cards to LEG - Jovial Evil and Spiritual Sanctuary (not tested yet) but should work.
-new trigger: @tapped(...
-Parser now supports X for P/T. WARNING: this does not work for activated abilities. And currently this works only for P/T but will be added progressively to other things
-check athat act of treason works correctly
-Fixed emblem of warmind
-removed incorrect cards ("When this enters the battlefield, target..." please see http://wololo.net/forum/viewtopic.php?f=6&t=669
- removed useless "color=" lines
- Added color override for cards such as crimson kobolds (note: color should be after the "mana" line to avoid side effects)
Also you can see in the todo.dat I tried Sift, Stampeding Wildbeast and Denizen of the Deep, all not working...
Also the following cards can probably be parsed: 1205: //Lifetap; 1625: //Lifeblood; 2593: //Thoughtleech and removed from both MTGAbility.cpp and Allabilities.h (for AGiveLifeforTapped***)
Grü
L.