magefree / mage

Magic Another Game Engine
http://xmage.today
MIT License
1.9k stars 774 forks source link

UST - Unstable card implementation tracking #4233

Open spjspj opened 6 years ago

spjspj commented 6 years ago

All Sets

https://magic.wizards.com/en/products/unstable

Requires Augment / Host

Not Done Yet:

In Progress :

Done :

JayDi85 commented 6 years ago

!!!WARNING!!! Don't broke the game and don't add bloating code to game engine. It's a very dangerous set and non legal in any official standards (yeah, I known about some cards legality in commander until mid-January). If game haven't necessary ability, then don't implement it. Technical debt is very bad thing.

I recommend to create check list "possible/unpossible to implement" in xmage.

shot_171209_132701

shot_171209_133150

spjspj commented 6 years ago

These are the ones that are slightly implementable (aka I've taken out ones that have keywords such as watermark, reminder text, 'copy text box' etc. For the 'Host' creature ones I was thinking we could either implement it without the 'Host' part (as I also didn't list the 'Augment' type cards) or just not at all (unless someone wants to implement it).

But Crow Storm is eminently implementable/playable and way cooler than Empty the Warrens. We also have the Star Wars Set as an example of an existing set which is non-standard.

theelk801 commented 6 years ago

I think Crow Storm is the only one we really need to be honest.

theelk801 commented 6 years ago

If we want to do die rolls we'll want to add an infrastructure for it to allow for cards that modify them or trigger off of them. I can't say I really want to though, I'd rather start with the voting matters cards from Conspiracy first.

Also counting words in names shouldn't be hard to do.

JayDi85 commented 6 years ago

Die rolls already used before game start. Why you can't use it? Random safe the world.

theelk801 commented 6 years ago

Well I just mean so that we can have things which trigger off of and modify the results of die rolls. Just rolling a die is whatever, but making them interact with each other is another matter.

JayDi85 commented 6 years ago

Can you show card's example with modified roll's result?

Found only that (one or two rolls):

  1. Simple roll activating on other trigger (enter to battlefield): Feisty Stegosaurus shot_171209_203257
  2. Simple trigger's ability on other trigger (rolling): Ground Pounder shot_171209_203436
theelk801 commented 6 years ago

JayDi85 commented 6 years ago

Can't find Dr. Julius Jumblemorph card in todo list. It's already implemented by xmage in Mistform Ultimus card. People want it (by CCG forums).

Dr. Julius Jumblemorph is every creature type (even if this card isn’t on the battlefield).

shot_171216_042442

spjspj commented 6 years ago

^^ Noone's implemented Host/Augment yet so I didn't bother adding it to the list.

Iwasrunningoutofnamesatthispoint commented 6 years ago

Its not all about the Host/Augment abillity. A G/W Changeling makes an awesome commander.

What are the chances to see the other Legendary creatures too? The big idea appears doable to me...

spjspj commented 6 years ago

Yes, the big idea is doable. It's not really a good thing to add a semi-implemented card.

Iwasrunningoutofnamesatthispoint commented 6 years ago

I dont see an issue with implementing him this way. Since we dont have augment cards yet all he will do is to shuffle your lib. Which also seems to be easy to implement. Nobody will be upset if its done this way :)

(and I will be happy)

Zzooouhh commented 6 years ago

I've made Infinity Elemental, or at least the closest approximation possible within the current engine to my knowledge - its power constantly hovers at Integer.MAX_VALUE and is unchangeable by boost effects unless a "set power" effect (such as Sorceress Queen) overwrites it - this is predominantly intended to prevent integer overflows. I've tested it with boost effects and set P/T effects, please have a look whether I missed anything important: 8bc9ae1

JayDi85 commented 6 years ago

@Zzooouhh Java can't handle integer overflow at all.

If xmage got overflow "error" then you can't find it and app/server will work at normal but with wrong values. It's a bad thing.

Search xmage code and found Integer.MAX_VALUE in many sources. Try to test Infinity Elemental with single and double strike on Terrifying Presence or another damage prevention card (it have PreventionEffectImpl with max int -- if Infinity Elemental can kill that creature then it's a bug).

Zzooouhh commented 6 years ago

@JayDi85 Damage prevention correctly negates all the damage Infinity Elemental would deal. What however makes it behave badly is damage value modifying effects (Dictate of the Twin Gods, etc.), double strike damage if the first hit isn't lethal, "gain life equal to this creature's power" type effects, and . All of these are probably solvable by just including an integer overflow check on PlayerImpl.gainLife and PlayerImpl.loseLife (maybe also PlayerImpl.doDamage, which would probably be redundant), I'll try to drum up something similar in the next few commits.