First of all, thanks! I wanted to code a Vampire deck sooner or later, and having some cards ready will be useful. Now I'm looking at the cards and I'll tell you if I see anything wrong.
You forgot the condition of controlling 5 or more Vampires on Bloodline Keeper. You should change the availability of the ability like this:
- Code: Select all
<AVAILABILITY>
if EffectDC():Get_Int( 0 ) ~= 1 then
local filter = Object():GetFilter()
filter:Clear()
filter:SetZone( ZONE_IN_PLAY )
filter:AddSubType( CREATURE_TYPE_VAMPIRE )
filter:SetController( EffectController() )
filter:NotTargetted()
return filter:CountStopAt( 5 ) == 5
end
return false
</AVAILABILITY>
(This way of writing the availability should be optimized so that the filter, which requires time, is checked only when the creature is not transformed.)
But, now that I look at it better... are you sure that EffectDC is useful to store the transforming state? Shouldn't you use ObjectDC? I think that EffectDC is wiped after the ability has been used.
In Exquisite Blood you wrote TRIGGER_PLAYER_LOST_LIFE instead of PLAYER_LOST_LIFE.
Falkenrath Aristocrat probably won't work like this. If you need to read an information from a card that you use as a cost, you have to follow the example of Bosh, Iron Golem. Make the cost type "generic" instead of "sacrifice" and add a RESOLUTION_TIME_ACTION inside it, that stores the card subtype and then sacrifices it. Inside the ability you'll access the register where you stored the card subtype and see if it was a Human (and you are checking for a Vampire at the moment, instead of a Human).
About Fires of Undeath and Nightbird's Clutches... are you sure that Flashback cannot be used as in DotP2012? The FLASHBACK_COST block still exists, according to the readings from the executable.
Why did you write <SFX text="TARGET_BITE_PLAY" /> in most Vampires at the end of the code? The SFX block with "_PLAY" has sense only inside an ability (and with "TARGET_" only inside an ability which has a target).
I was sure I would have found something wrong on Olivia Voldaren... she gave me some problems when I coded her in DotP2012. You see, the condition Object():GetController() ~= Object():GetPlayer() has no sense... they are checked at the same time so they will always be the same, until GetController returns nil which will happen when Olivia won't be in play, already covered by the other condition.
You have to save the current controller in a pointer and check Object():GetController() against it. Try to save it in EffectDC first, then if it doesn't work, try with ObjectDC (hoping that I'm not forgetting some case where ObjectDC should be wiped).
Did you test Rush of Blood? Maybe the developers like to do things more complicated than they should be, but if you look at the code for Chameleon Colossus, you see that the power is stored outside the CONTINUOUS_ACTION. I think it's because if you change the target's power again, the value inside the CONTINUOUS_ACTION could change in real time, which would be wrong.
Stensia Bloodhall probably already glows when you just have

because it counts itself as available mana (while it obviously shouldn't). I had the same problem with Terrain Generator in DotP2012 and the fix is easy: add an AVAILABILITY block that requires the ability cost plus the mana produced by the land. In this case:
- Code: Select all
<AVAILABILITY>
return EffectController():CanAfford("{4}{B}{R}") == 1
</AVAILABILITY>
this should work.
In Stromkirk Captain I suggest you to make a separate CONTINUOUS_ACTION for granting first strike, with layer="6". It's always good to respect the layers, and now that they can be set for each action, we can always do that.