Commit Graph

243 Commits

Author SHA1 Message Date
wagic.the.homebrew
9b63553c3e - Minor code cleanup (removed AABanishCard class and unused banishmentType variables) 2011-05-16 23:41:52 +00:00
wagic.the.homebrew
480875d57a - Subtypes "getValuesById" now returns a reference
- Minor cleanup of Transformer per one of my comments a few days ago.
2011-05-16 23:19:08 +00:00
omegablast2002@yahoo.com
39420a911f 3 fixes,
first you are not allowed to mulligen the opponents hand.

second persist was using the stack on its returning effect, this is incorrect as per MTG rules for persist, the card is supposed to go from the grave directly to inplay(grave -> temp -> inplay, in our case).

third, tokens models don't have names, so i make it check now for a name size on the model before clearing and resetting in tranformer.
2011-05-16 18:36:47 +00:00
wagic.the.homebrew
2f3e6b56e5 - Fix for issue 660 (changelings have become slower)
-- I removed the string comparison, which was expensive (the test is not necessary anymore, since it was "shielding" us from fake types (names), which are not creature subtypes, and therefore do not go through). I also moved one function call outside of the loop, just in case that wasn't optimized by the compiler.
- Removed unused Subtypes.cpp function (I don't really want people to use it, it can be quite expensive if used incorrectly)
- moved a test for issue 501 that has been fixed a while ago (we forgot to add the test to the test suite)
2011-05-15 14:38:41 +00:00
wagic.the.homebrew@gmail.com
1ee3c9eccc - revert r3645
- fix memory leak in GenericInstantAbility
2011-05-11 08:06:53 +00:00
omegablast2002@yahoo.com
2c9d029bdc fixed a memleak introduced in r3639..
i also changed the logic behind wololo "ueot " instant ability creator...instead of sending it directly to genericinstantability i created a new class called AGenericInstantWrapper...which handles the adding, cloning, removel ect, exactly how we have always handled "instant abilities"...this should correct any further "odd edge case" issues with the new "ueot " code...

later i will varify if it works with every single ability we current build with a wrapper class...and see if i cant remove them all and convert "ueot " into the NEW until end of turn handling method....lets cross our fingers as it would remove ALOT of extra code if successful....
2011-05-10 18:52:51 +00:00
omegablast2002@yahoo.com
e9a2b2f495 added a guard against removing aloseabilities from a card which already has an active aloseabilities, we generally dont want these to remove each other...this also fixes a mem leak i created in the previous fix for an infinate loop this was creating, i left that fix in place just in case some crazy edge case would add it to a card again. 2011-05-10 14:40:54 +00:00
omegablast2002@yahoo.com
8c2c0ae8de made it an else transformer removetypes...reason, you are either
removing the types, removing all types, or adding a type...not ever doing them all in a single transforms.
2011-05-10 14:34:49 +00:00
omegablast2002@yahoo.com
da1ec8eed3 moved the readding of types below the removel of abilities incase a becomes would be used as a newability.
2nd, found a infinate loop is created when you cast a loseabilities on a card which has loseabilities, when the 2 effect ends it readds the first one, before it is removed, making the first one remove the 2nd one and repeat forever....

this is only a half fix, it created a memleak in the place of the loop :/ so wololo please review!!!
2011-05-09 19:42:30 +00:00
omegablast2002@yahoo.com
8737aec005 couple tweaks to transforms to it doesn't add subkeywords as types....
2nd, removed a peice of code which was originally added i imagine before list mentioner was created which added cards whos names ended in "s" to the subtypes list, this is completely unrelated to the "s" charector added to targetchooser. this was actually a really nasty hack....
previous subtypes list contained 1200 variables...the new one after this removel is about 237ish....

this does not impact foreach, or any targetchoosers ability to target a card by name, targetchooser is coded to add card names to the subtypes list as it needs them, so using foreach(arbor elf) will add this to subtypes list for targeting purposes, in the future we might want to have this kind of check done and handled outside of the subtypes list, adding card names to that list for the purpose of targeting is just dirty.

this fixes a ugly lag spike introduced with the change to subtypes...for now...we need to consider a better way to sort these in the future to avoid this returning as subtypeslist gets bigger.
2011-05-09 18:10:10 +00:00
omegablast2002@yahoo.com
01cfbf5a02 couple bug fixes, changed a subkeyword of transforms "removesubtypes" to "removealltypes" remove all the types of the card, added "removecreaturesubtypes" to maintain previous support it was used for. 2011-05-09 15:55:34 +00:00
techdragon.nguyen@gmail.com
82058e97c5 * fixed some formatting
* pruned out unused local variables. 
----  There's no need to define something if it isn't going to be referenced. It consumes extra memory temporarily and more than anything is a potential cause for confusion down the road.
2011-05-08 11:56:25 +00:00
wagic.the.homebrew
f96635541d - Fix for issue 650 (tidal Warrior effect doesn't end at end of turn)
- Fix PSP compilation
2011-05-07 04:10:47 +00:00
wagic.the.homebrew
efad3f652f Minor refactor of menu text for "move" abilities. Zeth, Dr.Solomat, please let me know if something goes wrong. 2011-05-06 04:43:27 +00:00
wagic.the.homebrew
12228b51a0 - Minor refactor of "transforms" ability
- Updated changeling and transforms to only get creature types (as initially intended by the code), removed hardcoded list of "types to avoid"

The test suite passes
2011-05-06 03:52:35 +00:00
wagic.the.homebrew
1e2ed785eb Fix for issue 646 (Tidal Warrior) 2011-05-06 02:27:49 +00:00
wagic.the.homebrew
d922d4fe06 - Added "loseSubtypesOf(type)" ability. For example, loseSubtypesOf(land) means "target loses all its land subtypes"
- Added Evil Presence, as an example of the new keywords loseabilities and losesubtypes. It's quite experimental but I added 3 tests that cover the basics. Please report if you find bugs.
- moved the "lands produce mana" rules outside of the primitives, and into the external rules. This was a necessary step to create cards such as Evil Presence. 
- real support for subtypes. Needs some more testing, but there are now functions in Subtypes.cpp to know if a given subtype is a creature subtype, or a land subtype, etc...
- minor refactor of MTGDeck.cpp

Notes:
- I checked that the AI can still use lands
- This change has a bad impact on primitives loading performance (thanks Wil for the loading time output). This is probably due to suboptimal algorithms and data structures for subtypes. If the impact is strong on lowend devices, I can probably optimize a bit (the map subtypesOf could be changed into a vector with some work)
- The test suite passes, added 3 tests for evil presence.
2011-05-04 04:04:03 +00:00
wagic.the.homebrew
494bcf3315 Adding a "loseAbilities" keyword per Dr.Solomat's request. The Goal was to code Evil Presence, but I think there is still some work to do to achieve this. The main concern is that (according to the Miki), neither transforms(( nor "becomes(" allow to lose some subtypes. A land enchanted with Evil Presence is supposed to lose its land subtypes. Since we don't support subtypes that good, I don't think this is possible. Additionally, Evil PResence would require to move "{T}:Add{X}" from the basic lands primitives into the rules (which sounds quite easy to do). I've nevertheless tested this on Gaea's Cradle, and it works. (Gaea's Cradle loses its abilities) 2011-05-04 01:33:34 +00:00
wagic.the.homebrew
0b9ff076e6 Please update your rules folder
- "Manapool empties at the end of each step" becomes an ability, and was moved into the external rules file. "removemana(*) to remove all, removemana(*{G}) to remove all green, removemana(*{G}{B}{R}) to remove all green black red, removemana({G}{G}{B}{U}) (no "*") to remove a specific value.
- Added a possibility to make abilities non interruptible. With little work, this could be added to the parser if needed. Please use with care, let's discuss what is an acceptable usage of this now functionality, if needed.
2011-05-03 11:59:27 +00:00
wagic.the.homebrew
b7cc42ed67 Moved "reset damage on creatures at cleanup phase" outside of the engine and made it an ability. This is mostly because I need this for the mod I'm working on, but I hope it can be used by others 2011-05-02 14:02:12 +00:00
wagic.the.homebrew
53f45a8b8e cleanup: Remove "computeXX" functions and XX variables, these were always returning X/2 in all cases.
Test suite passes
2011-05-02 11:28:04 +00:00
omegablast2002@yahoo.com
669f8744b6 changed a previous fix a bit, also, altho this is not the "layers system" and we don't really support it, i thought i could atleast support the reapply of p/t bonuses from counters for atransformer...
and while messing around i found out that i forgot an important check in the new kicker with menu, to check if the card was still in the hand :P
2011-04-28 15:17:49 +00:00
omegablast2002@yahoo.com
7840e3cde8 fixed a issue where token workaround revealed that 2 "may" abilities back to back screws up "isInterrupting" player variable..this was only when the may ability contained manaproducers, which truely no longer use the stack in any format. 2011-04-28 10:20:42 +00:00
omegablast2002@yahoo.com
6e6ccddbde fixed a crash witnessed when ai was trying to get the efficiency return of aamover the ai had a target, but the ability did not have a target, when "destinationZone()" was run, the game would crash due to a null pointer.
increase the "random" chance to use unknown, the old method almost always returned 0.
2011-04-26 14:49:15 +00:00
wrenczes@gmail.com
a73fd4e99f Converted CardPrimitive's basicAbilities from a map<int, int> to a bitset. With 92 abilities, that means our base container for abilities is now 16 bytes in size (down from 28), and is a fixed size, whereas the map would grow by 8 bytes per added ability. 2011-04-26 09:35:38 +00:00
omegablast2002@yahoo.com
9de076db75 added",once" tag for phaseaction, to denote that the effect is only to happen once before forcedestroy is declared.
auto=@movedTo(graveyard) from(this|battlefield):phaseaction[endofturn,once] token(Bird,Creature Bird,4/4,red,flying)
2011-04-25 14:48:03 +00:00
omegablast2002@yahoo.com
934e0af004 moved the eventsending for drawing cards into the resolve of adrawer. tho i think this will make this event unusable for "card draw replacement effects"...it really doesn't matter as i don't see card draw replacement being added to wagic any time soon, if ever.
2nd, having levelup and counters return effs separately.
2011-04-25 12:00:33 +00:00
omegablast2002@yahoo.com
ad56dfa8d0 3 things here
first as requested, kicker will now act like the other cost, offering a menu choice, heres the catch tho, 
it was also thought up that we should maintain the "pay automatically" method of it as it feels more natural to some(even tho as per MTG rules its supposed to be a choice).
so here is what i did that i hope satisfies everyone, i added a new menu option under advanced tab..."kicker payment" with 2 setting, by defualt "always pay" but also an option to "always offer choice"...

2nd, minor tweaks to player avatar, every tme i saw it i was like "i need to do something about that", the avatar getting completely sucked into the corner just looked bad imo, so i about doubled the "inactive" size, so it looks a little more uniform with the opponents avatar. also move the library and grave icons just a thin hair to the left so they don't grossly overlap the players avatar as much when active, and increased the dark box theyre contained in my just a few pixels.

3rd, something else thats really bothered me to no end was that the title text of simple menus which display the cards name which owns the box was using small face font, which on pc was *barely* ok...but on psp(smaller devices) looks like white smears and dots. i changed it to share the font and size used inside the menubox itself, the end result is a lot nicer look...and alot easier to read on psp. now if only we can convince wololo that "spades" is alot like a lava lamp, cool at first, but *extremely* dated. the menu box should have a much slicker look, maybe rounded corners instead and lose the street light poles?

minor fix for phaseaction, becuase of the nature of this ability finding a happy safe medium without losing function is tough. hopefully this corrects it for good.

dropped cast methods menutext returns to lower case, for uniformity.
2011-04-22 11:17:20 +00:00
omegablast2002@yahoo.com
d892db60d9 removed a comment, i found a better way to do it so the comment does not apply. 2011-04-20 10:48:33 +00:00
omegablast2002@yahoo.com
c29e231e45 couple more changes in Ai, and a fix for a crash which happened with phaseaction when the target was removed before the effect resolved. 2011-04-19 19:54:47 +00:00
omegablast2002@yahoo.com
20590c3a0d removed the variable doTap in Tap from all classes, all test pass but there could be an edge case where i missed removing one...if so just let me know, tweaked some ai eff returns, trying to teach it to use counters more effectively, i noticed it was not using -1/-1 counters on the players creature and was using off counters +1/-1 on its own creatures to the point where they died.
doTap now only serves a single purpose, to pass Tap variable to amanaproducer class so that "tappedformana" will trigger is a manaproducer was tapped for mana.
2011-04-19 17:31:19 +00:00
omegablast2002@yahoo.com
158164d694 2 things here, bug fixes, aphaseaction used in a trigger is set to oneshot = 0, for the purpose of reusing the ability. so on combat triggers the event would contenue to activate as tho it was not a oneshot, this would cause a crash if the target of the ability was killed before the effect resolved, so i set the target to NULL after the effect resolves if the target was not the source.
also restricted it to _target->isInPlay() i read through all the cards which use this and none of them targetted a source that was not in play, or not being moved to inplay...

2nd, found out today that certain activated abilities can use either target click or object click, find the difference between the 2 was impossible, exsample, {2}{t}:foreach(blah) add{b}
{t}:foreach(blah) add{b}
so i figured i would need to remove those foreach mana abilities from the stack and add that same code for the bottom half...after noticing that both the reactToClick and reactToTargetClick did EXACTLY the same things after the "cost" portion...i decided to create a new virtual int activateAbility the activatedAbility parent. this way incase i need to change any further code in there, both functions resolve the same. This was a nice lesson in why copy paste coding is stupid. you think you solved the bug becuase it works in one function call, but you actually didnt.
2011-04-17 17:01:58 +00:00
omegablast2002@yahoo.com
6f070f8cd4 couple things here,
first enum'ed the variables of ADynamic class to make them easier to understand at a glance.
2nd
added stack resolves for the abilities in ADynamic, sword to Plowshare bug fixed
3rd
removing foreach mana producers from the stack, didn't realize they used the top portion of activated ability resolves, also added event sending for @tappedformana for foreach manaproducers.
4th,
in getcoreability if we're getting the core of a foreach, send the foreach->ability itself otherwise we go one layer too deep and end up throwing off the core completely.
2011-04-16 21:16:07 +00:00
omegablast2002@yahoo.com
1b6991107b few changes here, mostly small bug fixes,
recoded altercost, its finally not using a dirty clean up.
this fixes the bug with it not effecting ai also and the bug where it was ineffective when combined with affinity creatures...

removed a aspect of the wolf class...
soft coded support for aspect of the wolf...using word variable subkeyword "halfup" and "halfdown"
it can go anywhere a parsable word vairable is stringing...i preffer the front of it...
these are Wparsedint subkeywords, not keywords you can use with standard abilities...
its meant to return half the varible rounds up, or down...

fixed player not losing with cantlifelose when they have 10 or more poison...the player should die.

reworked taplandformana, i send the main card as a target now, check against the cost if its affordable...anyways, i discussed this bool function a while back with devs and wololo saw the same issues i saw in it...he then removed it from being used as an if statement...i changed it back to an if statement with the new checks...we are either going to go back to a void, or go all the way bool, but not inbetween.
2011-04-16 17:00:51 +00:00
omegablast2002@yahoo.com
0fe7a46676 few things here,
first, tweaked some ai checks a bit.
small changes.

2nd, i removed the following classes,
APowerToughnessModifierUntilEndOfTurn
APowerToughnessModifierUntilEOT
ADragonWhelp
i replaced these with soft coded support for dragon whelps "sideffects" of using a ability more then a certain number of times...
syntax limit^the effect you want^the use it triggers on.
replaced both powertoughnessueot classes with a class which falls more along the lines of how we handle ueot abilitys...PTInstant, creates the wrapper with the ability and adds it to the game, rather then that jumbled mess that was previous version.

added support for "phaseaction[" phase words "my" and "opponent" so you can denote which players phases it will happen on. by default it automatically happens on both players turns when the phase matches.

modified a few things in phaseaction class...which correct a memory leak which could be created if the source of the phaseaction is destroyed before the phase action resolved. rather then storing an ability which is left floating in memory if phaseaction is destroy...i took a much safer route of passing the string of the ability directly to the phaseaction class...and i build the ability right when it is being used instead. makes much more sense.

angry mob is now fully supported. yay to removing nasty ugly workarounds!!!! and i mean UGLY.

dragon whelp is now fully soft coded. added the 5 or six other cards which do similar effects.
2011-04-14 15:02:17 +00:00
omegablast2002@yahoo.com
93d9347566 added "colors" to word variables
========================================
added a function to return the action element id by mtgcardinstance.
=======================================
refactored all 5 combat triggers to be handled in a single class, this change helps reduce the "bits and pieces" of trigger restrictions which some did support while others didnt, it also allows for easier editing and debugging if future code needs to be added to it.
refactored the parsing for the combat triggers also, so that a combat trigger can be built from a single object if it only contains "or"...amongst other reasons.
the new syntax is auto=@combat(blocking,attacking,turnlimited,once) source(TC) from(TC):effect...all the same words are still used, except they are now all included inside the combat(-----) this includes restrictions for the triggers. if a card still needs multiple triggers from some reason...it is still 100% allowed to have as many as you want, with whatever you want inside them...check updated primitive for examples.
the required sections are auto=@combat(atleast one trigger) source(TC):effect.

=========================================

moved the limitsperturn "limit:" from genericactivatedability up to its parent class activatedability, did this for the following reason
first rules correction, the previous method tracked uses on resolve, which is incorrect, it should count as the ability is fired and placed on the stack.
second, it keeps all the actiavted ability restrictions in the same place, this is the location we are checking summoning sickness, actived restrictions such as "myturnonly" ect. makes sense to handle it in the parent.
third, it allow any and all future activated abilities easy access to "limit:" if needed, it would only require adding a limit string to pass on construction to the child classes instead of recoding the same exact checks as genericactivated.
=======================================================
reworked "name(" so that it no longer is required to be used inside a "&&" ability, also it no longer will create a MTGAbility object with a false return. that was just dirty of me :/
enabled "name(" to replace the menutext of alternative cost. 
"other={cost} name(holy cow)"
will display "holy cow" instead of "pay alternative cost", this change is nice because we ended up using "other" cost for WAY more then originally planned...now we can label it exactly what it should say when you click it.
======================================================
added a subtype keyword for powertoughnessmodifier so that you can basically switch on non-static variables for it...lifetotal/lifetotal nonstatic...PT can now except all word variables as i added reparsing of the ints, had to maintain old methods as ai needs them to decide what to do with them.
======================================================
removed the following extremely redundant classes
both ABecomes classes---atransformer has become far superior to it, i kept the "becomes(" parsing tho, and it will act exactly as it use to, except now it has access to most of the subkeywords of transforms...it also now allows word variables. and excepts "forever" as a tag. added "newcolor" subkeyword to transforms to create the "becomes(" adding a color without removing colors effect. "becomes(" now returns a constructor for ATransformer that emulates becomes( exactly as it worked before.

both forevertransformer classes, the only difference between the 2 was one subkeyword, and "forever" did not return a "destroy()"...i recreated this in less then 4 lines and a bool. that was sloppy of me :( i guess we learn and improve.
============================================================================
i removed the parsing of card casting restriction from the first pass when cards load, instead of making it a cardprimitive object, i now simply pass the string through the card and build the restrictions when theyre actually needed and checked.
this change allowed for alot of clean up, removing enum and dependancy on cardprimitive, and combining both allowedAltCast and allowedtocast functions checks through a new function "parseCastRestrictions"...this change keeps all the cast resrictions in a single place, which makes it easier to debug or add if needed, and while i was at it, i enabled it so cards can now contain as many restrictions as you want *of the available ones* 
added "turn:" as a restriction to make it so "fourth turn" could actually be ANY turn you list, this allowed me to remove a dirty line of code which was checking if a card was o converted cost but had a suspend...lotus bloom...which can not be cast normally..for cards like this now you can use restriction=turn:200 or otherrestriction=turn:200....
=========================================================================
added Phyrexian Mana...svntax {p(r)} ....this will always be payable with 2 life, but if you have a red mana for this example, it will charge you the red mana instead...you can have any combination of P mana you want in any of the games manacost.
===================================================
reworked a bit of the ai logic i added, it now has true interrupting and can now correctly target for fizzles, Ai will go into full out counterspell wars with you now...
===================================================
added a ingame reward system with fancy flying text animations, they reward the player with actual credits, but are extremely hard to trigger off, theyre not meant to be something you see every 5 secs, but something that when you see them trigger you go "damn that was cool"
the triggers and effects are as follows
first the combo system:
you have to chain cast 5 or more card, without tapping or being interupted, tiny bonus for this..chain is broken as soon as you or your opponent tap something.
next combo level is
Abundant Resources - chain 10 or more spells same condition 
then
killer - chain 15 or more same condition
this will include a flying text render once a chain is successfully started (5+ cast)
this bonus can be triggered multiple times in a match

the next bonus is
+ //creatures entering play consecutively will allow you a chance 
+ //to gain a bonus for maintaining force sizes, it will trigger every 10th
+ //creature which enters play consecutively.
this is restarted every time a noncreature enters play.
the levels are as follows, 
Deadly Force Bonus! -10 creatures enter play consecutively
Extreme Infantry Bonus! - 10 creatures enter play consecutively and you maintain a force size of 20+
Malignant Conqueror Bonus! -10 creatures enter play consecutively and you maintain a force size of 40+
this can only be triggered once per level per match.

next bonus is given for having alot of a specific type come into play under your control during a match, this bonus only triggers once per match.
the levels are:
Toy Collector!
Beast Tamer!
Vampire King!
Lord of Swarms!
Master of Elements!
Zombie Apocalypse!
Sword And Shield!
Medic!
The Promenade!
Heavenly Host!
Teeth And Scales!
its pretty easy to figure out what each requires to trigger, teeth and scales for example is dragons, wurms, drakes, and snakes.
the final bonus is deal 100 damage from a single source in a single damage event, this one triggers only once per match.
============================================================
fixed the following bugs::::
regenerate was not working for non-creature regeneration ie:welding jar

ai would sometime get stuck in a infinate loop tho extremely rarely while deciding what to do, the cause 
if (clickstream.empty())
computeActions();
is NOT enough...ai should NEVER be computing actions (finding a card or ability to play) when it is NOT the active player..meaning, it does not have priority. 
g->currentlyActing() is the player that has priority. 
if (clickstream.empty() && g->currentlyActing() == this)...loop fixed :)

dynamicability had a couple weird results, from sources which dont have an amount to return, i now check this and if non, the amount is 0.

transformer will no longer add the same types a card already has..

removed an unneeded 
if (!activated) ....oris bug seems to be corrected with this change.

wrapped limitsperturn checks in a conditional to skip it if there is no limit string. 

added safer method to get the target of the combat trigger. the previous could potentially cause a crash if you interrupted the ability while the combat trigger was on the stack, it would do a call to "getnextopponent" and return a null pointer. i now send the opponent with the event. 

fixed a crash that would happen when a card did not have a type= line. having a type or subtype line is now optional. and highly recommended to avoid using "type=nothing"

moved a function call in buyback isreactingtoclick so that it checks if its in the hand before parsing the restrictions for it.

removed allowedtocast function calls from the alternative payment types, they are only supposed to check allowedtocast if it is something like "buyback" and kicker...not "you may pay this instead"....

corrected an issue with type: variable where it would add the amount depending on the activeplayer. to correct i added a method to call TargetZoneChooser::targetsZone( with a mSource...so that you can set the source card for the scan.

note: all test pass.
2011-04-12 20:54:34 +00:00
jean.chalard
57c9c8a3b1 Fix a number of NULL/0 errors. 2011-04-10 15:31:38 +00:00
wrenczes@gmail.com
99ed83c5e8 Performance improvements/cleanup: card->hasType("foo") performs a string lookup for an integer id. Now that our primitives have over 1000 types (1018, I believe is the number I saw while debugging), this is not the cheapest lookup. Over the course of time, a lot of new rules have crept in the code - support for 'aura', 'equipment', and recently 'planeswalker'. While profiling, I saw an inordinate amount of time being used doing map lookups for these strings. Since they're used so frequently, I've added them to the SubTypes enumeration, and swapped out doing the string lookup in favour of using the int ID directly. I also found a few places where we were using hasType("Creature") or hasType("land") when we already had helper functions to do the int lookup, so I swapped these in as appropriate, as well as a couple of places where we had hasType("instant") instead of hasType(Subtypes::TYPE_INSTANT), etc. 2011-04-10 00:07:34 +00:00
omegablast2002@yahoo.com
c0d9c3a834 just being safe here...there is a report of an unreproducible bug that happens completely at random since i moved the parsing of limit into the reactToClick, im guessing it might be that limitPerTurn is never set. 2011-04-05 00:16:05 +00:00
omegablast2002@yahoo.com
2eca724001 2 things,
fixed a bug with Withering Wisps, moved the parsing of the limit string into the isreactingtoclick function, this allows word varibles such as type: to be used.

2nd, removed a varible isTempPhased, it *appear* it might not be needed, tho i didn't handle phasing the way im converting it to for a reason, so cross your fingers and hope all goes well.
BTW: do not email me about any bugs that ariase with phasing or phased out creature, im not excepting bug reports on it to my email box...instead open a ticket with a repro method and mark it as critical.
2011-04-03 12:24:21 +00:00
omegablast2002@yahoo.com
257de9962a just cleaning up a memleak i created, moving the parsing of the "newability" in transforms into the resolve rather then creating an object that might not be used. 2011-03-30 22:10:45 +00:00
omegablast2002@yahoo.com
cba0c1218f slight adjustments to transforms parsing to allow for newability to also be a transforms. xx wasnt being set in a couple cases, removed the space i added to the 3 variables so they can be anywhere in the line. 2011-03-30 17:45:05 +00:00
omegablast2002@yahoo.com
948dd212a8 "xx" value wasnt being set if used in activated abilities. >:( why do i need to find out WAY later about these thing. i know someone has come across it becuase there was a morph card which uses {x}{x} that wasnt added because of it. 2011-03-30 03:11:06 +00:00
omegablast2002@yahoo.com
d25424cb6c 3 changes
1st 
had to revise the syntax for my "type:" variable it is now type:blah:location, using the pipe line created nasty returns in some combinations of abilities as the parser confused the pipeline in type: with the one in TC.
2nd
more of a correction then a bug fix, i noticed that upcost had instances where it could still trigger its effect in the draw phase becuase the condiational for the ability resolve was in the update, i left the class mostly untouched but move the resolve out of update and into a receiveEvent for upcost, which triggers only once after you declared that you are leaving the upkeep before draw step begins.
3rd
reworked the construction of multiability to only produce a single multiability with all the abilities in the string instead of nested multiabilities, it is considerabily easier to debug and creates 1/3 less objects for the engine to deal with in comparison to the old method.
2011-03-30 01:01:11 +00:00
omegablast2002@yahoo.com
c03a444525 corrected Prismatic omen issue,
added newability[whatever ability] to transforms classes.
this allows for transforms to also add activated or mtgabilities to cards it targets.
example Prismatic omen:
auto=lord(land|myBattlefield) transforms(plains forest mountain swamp island,newability[{t}:add{w}],newability[{t}:add{g}],newability[{t}:add{r}],newability[{t}:add{b}],newability[{t}:add{u}])
Issue: 573
2011-03-28 23:39:29 +00:00
omegablast2002@yahoo.com
65f2706f1e fixed a bug where cards with vanishing (new vanishing) were given "vanishing as a menu item during combat. 2011-03-22 03:41:45 +00:00
omegablast2002@yahoo.com
f2c905225b cleaned up resetting cost for altercost code, its *almost* where i want it to be, removed the need to have "resetcost" coding on card code. removed "resetcost" keyword.
i was not 100% successful in getting the correct cost on altercost which reduced the amounts. however altercost which increased the amounts are now clean code. so the reducers are still using a dirty method of putting the card from the hand back into the hand to get the correct amounts.

the issue i ran into is how to get the correct amount in this situation.
target cost {5} 
have 3 reducers that - {2}
thats {1} of overkill reduce...
heres the issue. now remove all the reducers from play. the cost returns to {6} instead of 5. 
you would think, will have it track the over kill. which leads to another. have the 3rd card which would contain the overkill removed first, i factor the overkill and increase the amount by what was reduced, but that would not be correct. since the reduce was {2} the increase of removing the overkill card should increase the targets cost by {2} not the amount it actually reduced. as you can see, it is extremely complex. so for now im leaving it dirty, but removing the resetcost code.
2011-03-22 01:12:33 +00:00
omegablast2002@yahoo.com
d8450548c7 suspend changes, suspended cards which would have a counter removed are checked for time counters and cast if no time counters are present as a statebased effect, as per MTG rules..
case changes, "Time" != "time" aparently our parser now strings all counters as lower case...so "Charge" is no longer string "Charge" and can not be compared to "Charge"..not sure if that makes any sense :) anyways removel of time counters on exiled cards by triggers or effects now happen correctly.
2011-02-27 15:19:02 +00:00
omegablast2002@yahoo.com
6f792e5546 2011-02-22 14:38:07 +00:00
wagic.the.homebrew@gmail.com
db0c55b4dd Erwan
- Fixed an issue with maxCast targeting opponent
2011-02-16 14:35:49 +00:00