From e5a9b1f330b6280742468ba00568dfaaddce4fd5 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 17 Dec 2022 01:15:49 -0800 Subject: [PATCH] fix negative remaining_turns in ep3 server --- src/Episode3/Card.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Episode3/Card.cc b/src/Episode3/Card.cc index 378d468f..6e3a0893 100644 --- a/src/Episode3/Card.cc +++ b/src/Episode3/Card.cc @@ -1091,7 +1091,14 @@ void Card::unknown_8023813C() { cond.remaining_turns = 1; } if (cond.remaining_turns < 99) { - cond.remaining_turns--; + // Note: There is at least one case in the original implementation where + // remaining_turns can go negative: Creinu's HP Assist. The condition is + // applied with remaining_turns=0 to all affected cards (so it should be + // immediately removed here). But since remaining_turns is unsigned in + // our implementation, we have to check for underflow here. + if (cond.remaining_turns > 0) { + cond.remaining_turns--; + } if (cond.remaining_turns < 1) { this->server()->card_special->apply_stat_deltas_to_card_from_condition_and_clear_cond( cond, this->shared_from_this());