SotMSteamMods / CauldronMods

Mod adaptations of the Cauldron decks for Sentinels of the Multiverse for Steam Workshop
MIT License
15 stars 9 forks source link

Destroying Hydra Tiamat head with "One SHot, One Kill" prevents victory condition #1124

Open SecondRevan opened 3 years ago

SecondRevan commented 3 years ago

Describe the bug I was fighting Hydra Tiamat at Halberd Base with:

Quicksilver GHost Ops Tango One Renegade Impact Lady of the WOods 2199 Drift

Towards the end of the game, I used "One Shot, One Kill" on one of Hydra Tiamat's heads, destroying it. Unfortunately, my log isn't working and is instead showing a years old game against Plague Rat, si I cannot confirm. However, thinking through my game, I believe that by using One SHot, One Kill on Hydra Tiamat's Pyro Head, I had destroyed it instead of letting it flip and removed it from the board. Shortly after, I decapitated the last head, only to not win. I eventually realised it was because the game only showed 5 heads decapitated, and the win condition was 6 heads. And I noticed that one head was missing from the board. Knowing I played "One Shot, One Kill", I believe this is why the head disappeared

What does it affect Card(s): Any Hydra Tiamat head. Possibly other Tiamats Deck(s): Tiamat

To Reproduce Steps to reproduce the behaviour:

  1. Fight Hydra Tiamat (possibly other Tiamats) with a herothat has a card that destroys instead of dealing damage (I used Tango One and "One SHot, One KIll", but I believe other cards like Tachyon's Sucker Punch would work
  2. Reduce a Hydra head to low enough health that it can be destroyed by a card like "One SHot, One Kill"
  3. Destroy Hydra Head
  4. Hydra head will leave play instead of flipping. As it has left play, it does not count as decapitated. Therefore, you cannot reach the win condition

Expected behavior The expected behaviour was for the Hydra head to flip, and count as decapitated so that I can meet the win condition

cdallasanta commented 3 years ago

I got a repro using the Final Wasteland and removing heads from the game that way.

Log: log.txt

The previous Env. turn from what's posted here, the turn ended with all heads either removed or beheaded, and the game continued. On this turn, all heads are removed and the game continues.

first
wac commented 3 years ago

I used "One shot, One Kill" on the last of (regular) Tiamat's head to finish off Tiamat, which worked properly (we won the game), so it's probably specific to Hydra Tiamat. Maybe the bug only happens if it's one of the extra Hydra Tiamat heads (the ones that don't start in play) that are removed.

wac commented 3 years ago

Tried a game with Hydra Tiamat, "One Shot One Kill" decapitates heads (cards flip just like if you do damage) so it doesn't remove them from the game like in the game from @cdallasanta. BUT! I was browsing the log above and noticed that only 5 of the heads were removed from game. It looks like "Jaws of Winter" was removed from the game before flipping the card, and "Maw of the Earth" was put in the trash so it was never destroyed.

At line 1605 in the log above:

Horrid Skunk Ape initiates 1 Melee damage to Tiamat, The Jaws of Winter. Horrid Skunk Ape deals Tiamat, The Jaws of Winter 1 Melee damage. Tiamat, The Jaws of Winter is now at 0 HP. Created decision [YesNoCard/None D240] DestroyCardAction of Horrid Skunk Ape was cancelled by Unforgiving Wasteland. Unforgiving Wasteland moved Tiamat, The Jaws of Winter to out of game. GameController moved Tiamat, The Maw of the Earth from under Tiamat, The Jaws of Winter to the villain trash.

Edit: Also, the corresponding Instructions card does not flip. This might be worse in the case of "Mouth of the Inferno" which has the "heroes cannot win" text on the front side.

cdallasanta commented 3 years ago

I went back to the Final Wasteland, and now when I destroy a head (initial or secondary), the game ends with the message "The game is now unwinnable." It looks like Unforgiving Wasteland is calling GameCrontroller.IsGameWinnable, but I don't know if that's a recent addition or not. I could not repro my game from above.

One of our likely issues is in HydraNoxiousFireTiamatInstructionsCardController.AddBackTriggers:

if(TurnTaker.GetAllCards().Where((Card c) => c.IsInPlayAndHasGameText && IsHead(c)).Count() < 6)
{
    return false;    (A)
}
return base.FindCardsWhere((Card c) => IsHead(c) && c.IsFlipped).Count() == 6;    (B)

A - If heads are removed and the game continues, or if the secondary heads don't go into play for any reason (e.g., the initial head is removed from game before playing the second head), this method will always return false B - If a head is moved somewhere the player can't flip it (such as Out of Game), then there would be no way to get the count up to 6

In both cases, the game becomes unwinnable without letting the player know. Currently, nothing in the Cauldron or base game should trigger this, but we should consider future-proofing in case someone plays with another mod. I could make it so removed heads count towards the win, or if there is a situation where "heroes win when 6 heads are decapitated" is not possible, it's game over.

wac commented 3 years ago

(Edit: also all of this is now just the monsters in Final Wasteland or other places removing heads from game right? I'm pretty sure One Shot One Kill is fine now) The big question for Matthew Bishop would be:

If yes, there's a bunch of other issues:

I'm pretty sure there's no other Villain Character Card on Character Card action except for the Ennead, but you can't blow up the top card of that...

cdallasanta commented 3 years ago

With the addition of GameCrontroller.IsGameWinnable, a card that doesn't check for that condition will also hit errors with The Chairman, The Dreamer, etc, as well as Tiamat. So I think we are safe in that regard. If we haven't been able to get another repro, we should be able to close this, I believe.