Commit Graph

1397 Commits

Author SHA1 Message Date
omegablast2002@yahoo.com 06ca82929b removed clockwork beast alias and hard code. it is no longer needed as i added a soft coding method that was far more generic and leaving this is was causing conflicts with the new code. players reported that using the 4th edition clockworks beast was loading the card with the alias even tho i removed the alais in the primitives. 2011-03-22 03:44:54 +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 0fb914c0c3 fixed a reported bug where the foelost restrictions for triggers were not activating correctly, also updated the code by making it more flexiable...you can now do foelost(number) instead. 2011-03-22 03:20:17 +00:00
omegablast2002@yahoo.com 55d58b6425 fixed a reported bug where blinking cards with "nonbattlezone" code was not activating triggers. :( accidently forgot to add the MY_EXILE to the list of non-battle. :) all good now. 2011-03-22 02:49:49 +00:00
omegablast2002@yahoo.com 43711786fd fixed a reported bug where a player would respond to a targeted ability by phasing out a creature and the targeted ability would still resolve on the phased card. 2011-03-22 02:15:10 +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 e9eaef430e unable to repro but i recieved reports of code using "thatmuch" producing massive numbers in edge cases. I realized i never int'ed it to 0, so im hoping that this was the reason for the massive positive and negitives it would produce. 2011-03-21 23:16:59 +00:00
Xawotihs f9be0a6341 - reworked completly the JNetwork, JSocket interface (had to ifdef out the PSP socket code)
- added 2 menus to wait for connection and wait for deck selection
- tested compilation on Qt Linux, Qt Windows and PSP
- deactivated everywhere (NETWORK_SUPPORT to activate).
2011-03-13 21:19:02 +00:00
omegablast2002@yahoo.com e8bbbb45de fixed a reported issue, find it a bit strange tho, as everything else can be adressed in this method without being so specific ie: using hasColor(blah) as in the way "fear" was added in here without addressing "this"....just to be on the safe side im going to specify "this->" becuase doing it without it was returning as tho it could not block even tho the creature did not have "weak"
i suspect this could be true with the intemidate and fear...
2011-03-06 16:23:23 +00:00
omegablast2002@yahoo.com eb8a22223b omitted a unneeded include. 2011-03-02 21:35:31 +00:00
omegablast2002@yahoo.com 64a234ef44 added support for customphasering construction in rules txt...
exsample

[INIT]
mode=mtg
[PLAYERS]
life:2000
poisoncount:4
customphasering:untap,firstmain,firstmain,draw,firstmain,upkeep,draw
auto=shuffle
auto=draw:7
auto=@each my draw:draw:1
auto=maxPlay(land)1

by default every turn will have normal order we've always been use to
however
before begins --required added automatically
anything you want in any order
anything you want in any order
anything you want in any order
anything you want in any order
anything you want in any order
anything you want in any order
anything you want in any order
anything you want in any order
cleanup---required added automatically
after end of turn---required added automatically

svntax 
customphasering:blah,blah,blah
listed in the order you want it to go. you can repeat a phase as often as you want, you can omit phases.

please note, this was not designed with MTG in mind..some of the rules require certain phases to work...this is for CUSTOM game building...i repeat NOT DESIGNED FOR MTG...tho it can be used with most(almost all, with the exception of those which require certain phases to work, exsample, ninjitsu will only work in a phasering which contains blockers and attackers)

enjoy.....
2011-03-02 21:33:42 +00:00
wagic.the.homebrew@gmail.com b021417324 Erwan
-fix for issue 604 (Land play limitation should not apply in all cases)
-- this adds a "castMehod" variable to MTGCardInstance. IF this variable is 0, the card was not "cast" (or for lands, "put into play" as part of the lands rule), but "added" to the battlefield with some other effect. On the other hand, if this variable is set, it means the card was cast 
-- as we discussed, I did not touch the "alternateCostPaid" variable, as I'm still not really sure these two concepts are actually the same
2011-03-02 13:41:24 +00:00
techdragon.nguyen@gmail.com b7fb561705 patch to address issue 601, this is a work around to get the game shop from crashing due to card definitions that are apparently not 100% compatible with the system.
http://code.google.com/p/wagic/issues/detail?id=601
2011-03-01 00:58:48 +00:00
omegablast2002@yahoo.com 2153a8d308 added menutext returns for "protection from(" 2011-02-27 16:09:26 +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 d255f25130 fixed a reported issue where sometimes a card was ignored...originally i was incrementing up and resetting the value...found that it is far easier to increment down, as i remains the same even when cards become shifted from exile to play card.map...incrementing down guarantees that the positions of the remaining cards to check are going to be the same even if a few have been "unsuspended"... 2011-02-27 14:42:54 +00:00
omegablast2002@yahoo.com 3f090c7be8 added basic suspend.
syntax
suspend(number of time counter)={cost}
suspend(3)={g}
2011-02-25 18:40:23 +00:00
omegablast2002@yahoo.com ffa13c8983 still tweaking ai interrupt slightly...think i finally got it how i wanted it...if it can interrupt OR if its ALREADY interrupting...
added some extra checks to how Ai determines if it should cast a "all(" or other lord...it was only taking the amount of cards it had into account and not looking at what the suggestion was for the nestedability...meaning it treated "destroy all" the same way it treated "all creature +10/+10" it would only check if it had more cards effected...completely ignore the effects....
2011-02-24 14:08:19 +00:00
techdragon.nguyen@gmail.com ea8e8f36c8 fixed very obscure bug. In VS2010 the string was being trimmed before going into Construct method, but the string length was not updated.
Thus, Construct thought the string length was 1 greater than it should have been causing an out of bounds runtime exception.  In VS2008, the same thing
happened, however no exception was thrown since VS2008 allows access into the undefined memory space and returned a 0 (null) value when it tried to access
outside the string array.  This fix targets specifically the color filters since they seem to be the ones with the error. " color:g;" and not "color:g;" was being
passed.
2011-02-23 18:30:45 +00:00
omegablast2002@yahoo.com 6f792e5546 2011-02-22 14:38:07 +00:00
wagic.the.homebrew@gmail.com dc48b5472b Erwan
- fixing incorrect case for include of PlayRestrictions.h
2011-02-19 16:52:37 +00:00
techdragon.nguyen@gmail.com 788ae5e629 fixed a division by zero error when AI has equipment on field but no creatures to equip them to.
fixed formatting of getEfficiency code block
2011-02-19 15:39:48 +00:00
wagic.the.homebrew@gmail.com db0c55b4dd Erwan
- Fixed an issue with maxCast targeting opponent
2011-02-16 14:35:49 +00:00
wagic.the.homebrew@gmail.com 8dd6856453 Erwan
- fixed issue 595 (MaxCast not working). Root cause was the stupidest typo ever in the code (maxCost instead of maxCast...)
- fixed an issue with Storm mentioned by zethfox (was counting only spells played by current player)
- Moved "max lands per turn" rule outside of the code (yay!) Please be sure to update your Rules folder!
2011-02-15 14:17:34 +00:00
techdragon.nguyen@gmail.com 2cd72cc4ca we should access the data required within a given context. Using DeckStats in this way works
but only by chance that the previous step set the current deck file.  Used victory percentage
from the MetaData object rather than forcing what has already been computed.

TODO:  getVictoryPercentage() needs to represent Overall VictoryPercentage for all decks, not just
player decks.  AI Decks use getVictoryPercentage() to represent the VictoryPercentage against a
specific deck.  There should be an additional method that says getVictoryPercentageVsDeck( deckObject )
2011-02-14 17:44:35 +00:00
techdragon.nguyen@gmail.com 16f7d2d675 added conditional to avoid having to ping the stats map all the time. The data
is already cached, but there's no need to spend a function call to check the hashmap
if we have a bool for that reason.
2011-02-14 17:38:57 +00:00
techdragon.nguyen@gmail.com 73b2d5ded8 removed redundant code for card loading. getCardByName already loads by Id and caches the result
duplicating that code in MTGDeck is redundant.
2011-02-14 17:36:19 +00:00
wagic.the.homebrew@gmail.com 5b365e53f0 Erwan
- submit a fix for TestSuiteAI, I don't understand why it wasn't submitted with my other changes yesterday. This fixes a bug in the test suite (One storm test would fail without this)
- minor refactor to AI code
2011-02-14 13:29:27 +00:00
techdragon.nguyen@gmail.com f4d1154cd6 reverted latest change 2011-02-14 09:35:43 +00:00
techdragon.nguyen@gmail.com d9efb408e5 * optimized card loading. There was some redundant code that wasn't necessary.
* getCardByName seemed to have a initialization error if you tried to use it before the entire game loaded.  The cache would
throw an exception if you tried to use find and it was empty.  I put a guard around it to avoid this issue.

* refactored Zeth's "toggledifficuly" feature to be stored in meta data.  http://code.google.com/p/wagic/source/detail?r=3106
 -- This is slightly modified as it forces a 1 for 1 swap of cards that are specified.
    from the example given this is how it seemed to be used anyways.
 -- since all the information is stored in the meta data, there's no need to alter the deck's
    definition.
2011-02-14 08:14:35 +00:00
techdragon.nguyen@gmail.com 1b5002726c altered condition to srcLenth -1 and not "srcLength - 2" 2011-02-14 06:54:28 +00:00
techdragon.nguyen@gmail.com 7047b1ccfc fixed typo 2011-02-14 06:52:11 +00:00
techdragon.nguyen@gmail.com ee71b6bf0e Added a guard to ensure array access is within bounds of filter.
For some reason, the VS2008 compiler allows this illegal access and VS2010 does not.  In all actuality it should never be permitted.

Please review the thread posted on the SVN thread for details as to why this needs a fix.
http://code.google.com/p/wagic/issues/detail?id=593&sort=-id


Issue: 593
2011-02-14 06:07:04 +00:00
omegablast2002@yahoo.com 072a250dc0 reverted it completely now in hopes that this is whats stalling ai...for some strange reason im noticing that ai is tapping an extra mana every time it tries to play something...
exsample it wants to play a {2}{b}{b} ...so it taps 5 mana instead of the 4 it would have tapped before....
2011-02-14 01:45:14 +00:00
omegablast2002@yahoo.com 3826355b6b reverting a peice of a change i did a couple days ago...
the way getPotentialMana and the payment of cost needs a SERIOUS revamp, i would almost say that these function only work because of bugs.....
2011-02-14 00:28:44 +00:00
techdragon.nguyen@gmail.com 67026849a6 sealed possible memory leak when WCFilterGROUP is created. 2011-02-13 13:28:25 +00:00
techdragon.nguyen@gmail.com 5be429c48f combined nbzone increment and zone assignment into one statement. 2011-02-13 13:25:41 +00:00
wagic.the.homebrew@gmail.com 6b89899d1b Erwan
- deprecated the following keywords (see list below for new usage)
-- cantcreaturecast => auto=maxCast(creature)0
-- cantspellcast => auto=maxCast(*)0
-- onlyonecast => auto=maxCast(*)1 
-- bothcantcast => auto=maxCast(*)0 auto=maxCast(*)0 opponent
-- bothnocreature => auto=maxCast(creature)0 auto=maxCast(creature)0 opponent
-- oneboth => auto=maxCast(*)1 auto=maxCast(*)1 opponent

Strangely enough, I couldn't find most of these keywords in mtg.txt?

I also removed variables such as "spellCastedThisTurn" and stuff like that... now if you want to know how many spells were cast in one turn by a given player, use player->game->stack->seenThisTurn("*").
seenThisTurn can take a string representing a TargetChooser, or better, a TargetChooser.

I can't guarantee I didn't break anything, but the test suite passes and the AI seems to run ok
2011-02-13 11:23:51 +00:00
wagic.the.homebrew@gmail.com 8eac9c587e Erwan
- added maxCast and maxPlay abilities, this deprecates the following abilities: nospells,nocreatures,onlyonespell,land
I usually don't like to deprecate abilities, but the existing ones, despite having easy to remember names, were really not flexible enough.

If you want to use these old keywords, instead use:
-- nospells  =>  maxCast(*)0
-- onlyOneSpell => maxCast(*)1
--nocreatures => maxCast(creature)0
--land:1 => maxplay(land)+1

note maxPlay and maxCast. They follow similar rules, but maxPlay monitors the number of cards that are going on the Battlefield, while maxCast monitors the stack. In most cases, maxCast should be the one to use, but lands are a special case because they go directly to play.

I unfortunately cannot guarantee I didn't break anything, especially in the AI, but the test suite passes ,and I added a few additional tests yesterday and today, to feel more confident about the change.

next step is removing the creatures keywords that do the same kind of thing (cantcast, etc...) and replace them with maxCast
2011-02-13 08:01:13 +00:00
omegablast2002@yahoo.com b21ca5d91c had to change it, psp compile didnt like it. source->XX 2011-02-13 04:46:57 +00:00
omegablast2002@yahoo.com e36cf18d26 added support for {x}{x}: word variable returns for activated target abilities...sometimes im not told when things break or dont work completely, and i find out later myself. :) 2011-02-12 20:29:42 +00:00
wagic.the.homebrew@gmail.com 60017a6652 Erwan
- replaced variables canPutLandsIntoPlay and landsPlayerCanStillPlay with a PlayRestrictions class.
- Added  seenThisTurn(TargetChooser * tc) in MTGGameZones, which allows to count how many cards matching a targetChooser have been in a given zone in the current turn. With minor work, this can probably be reused by the ability parser for some cards that need to count how many **** where played or put on the stack during a turn.
-- for example player->game->stack->seenThisTurn([put a TypeTargetChooser("creature") here]) would give you the number of creature spells cast by the player this turn.
- This is the first step of a refactor that aims at removing all the adhoc variables for "cant cast". I plan to get rid of the following variables in Player.h (and the associated code, which hopefully will become smaller):  
    int castedspellsthisturn;
    bool onlyonecast;
    int castcount;
    bool nocreatureinstant;
    bool nospellinstant;
    bool onlyoneinstant;
    bool castrestrictedcreature;
    bool castrestrictedspell;
    bool onlyoneboth;
    bool bothrestrictedspell;
    bool bothrestrictedcreature;

They will be replaced by the PlayRestrictions system, and hopefully I'll have time to update the parser to make this more generic as well.
My initial goal with this change was to move the limit of 1 land per turn outside of the code, and make it an external rule in Rules/mtg.txt. I have yet to do it.
2011-02-12 16:31:07 +00:00
omegablast2002@yahoo.com 0a60979554 fix and completely reworked affinity AGAIN.
moved it out of rules, it was FAR to error prone and after fixing bugs on this ability about 12 times, im done with it.

noticed yesterday that it was removing the completely wrong amounts, and not maintaining its cost AT ALL. so i got sick of adjusting it as a rule, its now a statebased effect, called through gamestatebasedeffect as a side function.

the new affinity is less then 100 lines of code, down from 300. to acomplish the effect with FAR less effort. it is also FAR easier to maintain in the future if i die or leave the scene or whatever.

added a new count tool for MTGGameZones canByCanTarget...which allows for returns of amounts based on if it can be targetted by a tc. much like how listmaintainer does it. affinitygreencreature will not be the only ability to use this function, just a heads up. its just the first to do so.

hopefully this much more accurate affinity will be the last version...considering adding the other types which old affinity couldnt handle :D
2011-02-12 15:06:28 +00:00
omegablast2002@yahoo.com 53477bfae2 opps if you were at exactly 65% then none of the 2 appeared XD ..this should correct that 2011-02-12 03:23:36 +00:00
omegablast2002@yahoo.com 19c3e903bc just cleaning, removed a double check i added ages ago that isnt really needed anymore, ai handles fine now without having to double check if it can cast after it already did so. 2011-02-12 03:00:45 +00:00
omegablast2002@yahoo.com e3ecc612d0 removed a part that wasnt actually supposed to be in the change...my bad. 2011-02-12 02:42:26 +00:00
omegablast2002@yahoo.com e9b47944e3 reverted a 2nd atempted fix at the infinate loop with ai using inkmoth nexus...
it was making ai tap itself out.

i think im about 99% sure i know where the issue is now, hopefully.
2011-02-12 02:27:30 +00:00
omegablast2002@yahoo.com 76653b6f54 going to go ahead and commit this now as updating the ai decks to use this tool is going to be a huge task...i originally wanted to commit this when i had a substantial amount of ai decks using it, to show case how it makes a huge difference.
it is a feature that is for ai deck building
what it will do is as follows

#NAME:sample deck
#DESC:The forces of fire and nature unite. 
#DESC: 
#DESC:Can you withstand 
#DESC:their combined fervor? 

toggledifficulty:lotus petal|black lotus (*) * 4
grizzly bear (*) * 4
someCard (8) *4

notice the toggle dificulty?
syntax is ....toggledifficulty:easy card name or number|hard card (optional set if both belong to same set otheriwse use * ) *howmany

toggledifficulty:frying pan|machine gun
toggledifficulty:tomatoe|pumpkin (MBS) * 3
toggledifficulty:tomatoe|squash
grizzly bear (*) * 4

the above exsample as easy will have a deck with:
frying pan
4X tomatoe
4X grizzly bear

and on hard it will have:
machine gun
3x pumpkin
squash
4X grizzly bears

the entire deck can be built with toggledifficulty cards....its not limited to just a single use.
you can also mix it up, some can be toggledifficulty some can be just like normal, you are not limited to having to have a complete deck of toggled cards...

if your currently selected deck has an over all win ratio of 65% or higher...this deck will have 4 black lotuses in it...if youre overall win with the current deck you are playing is below 65% then those 4 black lotuses are replaced by 4 lotus petals instead...effectively making it an easier ai deck...

note, the 2 cards used are exsamples...its a great way to show you the potential this change can have...an ai deck with 4 black lotuses will do WAY better then the same deck with 4 lotus petal...if you catch my drift...
2011-02-11 18:01:50 +00:00
omegablast2002@yahoo.com 25fe86ad89 added "turnlimited" restriction for blocked, blocking, combatdamaged, and damaged triggers. 2011-02-10 19:50:09 +00:00
techdragon.nguyen@gmail.com 93c63cef3d reimplemented mana color display for deck selection. This is now totally controlled by
stats generation.  No data needs to be written to the deck master files themselves.
Now the mana colors will only show if you have battled with a particular deck at least once.
This is not retroactive, so you will need to battle the ai again.  This can not be edited manually
either to prevent tampering with the statistical data.  Player deck mana color display is also
covered this way.

Decks will still be saved in the new layout if a disk write is necessary.  So any changes via
the deck editor will result in a deck file rewrite is was always the case.:)
2011-02-10 17:19:11 +00:00