diff --git a/src/main/java/net/fretux/mindmotion/player/SanityCapability.java b/src/main/java/net/fretux/mindmotion/player/SanityCapability.java index 2328328..93fa856 100644 --- a/src/main/java/net/fretux/mindmotion/player/SanityCapability.java +++ b/src/main/java/net/fretux/mindmotion/player/SanityCapability.java @@ -52,9 +52,15 @@ public class SanityCapability implements ISanity { } public void setBonusMaxSanity(float bonusMaxSanity) { + float oldMax = getMaxSanity(); this.bonusMaxSanity = Math.max(0f, bonusMaxSanity); - setSanity(this.sanity); - setInsanity(this.insanity); + float newMax = getMaxSanity(); + if (oldMax > 0) { + float pct = sanity / oldMax; + sanity = pct * newMax; + } + setSanity(sanity); + setInsanity(insanity); } public float getBonusMaxSanity() { diff --git a/src/main/java/net/fretux/mindmotion/player/TempoCapability.java b/src/main/java/net/fretux/mindmotion/player/TempoCapability.java index 3c722e3..9602d8a 100644 --- a/src/main/java/net/fretux/mindmotion/player/TempoCapability.java +++ b/src/main/java/net/fretux/mindmotion/player/TempoCapability.java @@ -49,8 +49,14 @@ public class TempoCapability implements ITempo { } public void setBonusMaxTempo(float bonusMaxTempo) { + int oldMax = getMaxTempo(); this.bonusMaxTempo = Math.max(0f, bonusMaxTempo); - setTempo(this.tempo); + int newMax = getMaxTempo(); + if (oldMax > 0) { + float pct = (float) tempo / (float) oldMax; + tempo = Math.round(pct * newMax); + } + setTempo(tempo); } public float getBonusMaxTempo() {