From f207ad3990c6bbe6fc6d4b42f279775af6504d01 Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Mon, 15 Jul 2013 13:49:47 +0200 Subject: [PATCH] Bugfix: Only decrease HP by 1 (and not 3) when full health and having sustenance+food poison * Apply negative effects first (for example, food poison), so that the positive effect (for example, sustenance) can have some effect. --- .../controller/ActorStatsController.java | 15 +++++++++++---- .../controller/GameRoundController.java | 6 +++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java index c3423ad8f..4237f0c2b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java @@ -277,13 +277,20 @@ public final class ActorStatsController { } private void applyStatsEffects(Actor actor, boolean isFullRound) { + // Apply negative effects before positive effects for (ActorCondition c : actor.conditions) { - StatsModifierTraits effect = isFullRound ? c.conditionType.statsEffect_everyFullRound : c.conditionType.statsEffect_everyRound; - boolean hasEffect = applyStatsModifierEffect(actor, effect, c.magnitude); - if (hasEffect) actorConditionListeners.onActorConditionRoundEffectApplied(actor, c); + if (!c.conditionType.isPositive) applyStatsEffects(actor, isFullRound, c); + } + for (ActorCondition c : actor.conditions) { + if (c.conditionType.isPositive) applyStatsEffects(actor, isFullRound, c); } controllers.effectController.startEnqueuedEffect(actor.position); } + private void applyStatsEffects(Actor actor, boolean isFullRound, ActorCondition c) { + StatsModifierTraits effect = isFullRound ? c.conditionType.statsEffect_everyFullRound : c.conditionType.statsEffect_everyRound; + boolean hasEffect = applyStatsModifierEffect(actor, effect, c.magnitude); + if (hasEffect) actorConditionListeners.onActorConditionRoundEffectApplied(actor, c); + } private void decreaseDurationAndRemoveConditions(Actor actor) { boolean removedAnyConditions = false; @@ -351,7 +358,7 @@ public final class ActorStatsController { } if (effect.currentHPBoost != null) { int effectValue = Constants.rollValue(effect.currentHPBoost) * magnitude; - boolean changed = changeActorHealth(actor, effectValue, false, false); + boolean changed = changeActorHealth(actor, effectValue, true, false); if (changed) { int visualEffectID = effect.visualEffectID; if (!effect.hasVisualEffect()) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java index 08e3fbb63..c1191f77b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java @@ -65,15 +65,15 @@ public final class GameRoundController implements TimedMessageTask.Callback { roundTimer.stop(); world.model.uiSelections.isMainActivityVisible = false; } - - public void onNewFullRound() { + + public void onNewFullRound() { controllers.mapController.resetMapsNotRecentlyVisited(); controllers.actorStatsController.applyConditionsToMonsters(world.model.currentMap, true); controllers.actorStatsController.applyConditionsToPlayer(world.model.player, true); gameRoundListeners.onNewFullRound(); } - public void onNewRound() { + private void onNewRound() { onNewMonsterRound(); onNewPlayerRound(); gameRoundListeners.onNewRound();