From 5277fbbe567cd7d97b0a4985a00b85c5a595e6c2 Mon Sep 17 00:00:00 2001
From: MagicBot <MagicBot@magicbane.com>
Date: Sat, 22 Feb 2025 15:23:15 -0500
Subject: [PATCH] More generalized curve helper

---
 .../powers/poweractions/CharmPowerAction.java |  2 +-
 .../powers/poweractions/FearPowerAction.java  |  2 +-
 src/engine/wpak/PowerActionParser.java        |  2 +-
 src/engine/wpak/data/PowerAction.java         |  2 +-
 src/engine/wpakpowers/Behaviours.java         | 10 ++++----
 src/engine/wpakpowers/WpakPowerManager.java   | 24 ++++++++++++++++---
 6 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/engine/powers/poweractions/CharmPowerAction.java b/src/engine/powers/poweractions/CharmPowerAction.java
index 380871cc..b57c3c6c 100644
--- a/src/engine/powers/poweractions/CharmPowerAction.java
+++ b/src/engine/powers/poweractions/CharmPowerAction.java
@@ -29,7 +29,7 @@ public class CharmPowerAction extends AbstractPowerAction {
     public CharmPowerAction(PowerAction powerAction) {
         super(powerAction);
         this.levelCap = powerAction.ramp;
-        this.levelCapRamp = powerAction.rampCurve.ordinal();
+        this.levelCapRamp = powerAction.compoundCurve.ordinal();
     }
 
     @Override
diff --git a/src/engine/powers/poweractions/FearPowerAction.java b/src/engine/powers/poweractions/FearPowerAction.java
index 9ca954a9..0bb25f8a 100644
--- a/src/engine/powers/poweractions/FearPowerAction.java
+++ b/src/engine/powers/poweractions/FearPowerAction.java
@@ -30,7 +30,7 @@ public class FearPowerAction extends AbstractPowerAction {
     public FearPowerAction(PowerAction powerAction) {
         super(powerAction);
         this.levelCap = powerAction.ramp;
-        this.levelCapRamp = powerAction.rampCurve.ordinal();
+        this.levelCapRamp = powerAction.compoundCurve.ordinal();
     }
 
     @Override
diff --git a/src/engine/wpak/PowerActionParser.java b/src/engine/wpak/PowerActionParser.java
index 00d051ba..090a2f21 100644
--- a/src/engine/wpak/PowerActionParser.java
+++ b/src/engine/wpak/PowerActionParser.java
@@ -274,7 +274,7 @@ public class PowerActionParser {
                     powerAction.ramp = Integer.parseInt(arguments.get(0));
 
                     if (arguments.size() > 1)  // Not all level caps have a curve
-                        powerAction.rampCurve = mbEnums.CompoundCurveType.valueOf(arguments.get(1));
+                        powerAction.compoundCurve = mbEnums.CompoundCurveType.valueOf(arguments.get(1));
                     break;
                 case "CLEARAGGRO":
                     powerAction.clearAggro = Boolean.parseBoolean(lineValues.get(1).trim());
diff --git a/src/engine/wpak/data/PowerAction.java b/src/engine/wpak/data/PowerAction.java
index 3a20b061..27719555 100644
--- a/src/engine/wpak/data/PowerAction.java
+++ b/src/engine/wpak/data/PowerAction.java
@@ -24,7 +24,7 @@ public class PowerAction {
     public int petRace;
     public StatTransfer statTransfer;
     public int ramp;
-    public mbEnums.CompoundCurveType rampCurve;
+    public mbEnums.CompoundCurveType compoundCurve;
     public TrackEntry trackEntry;
 
     // Additional variables after header go here.
diff --git a/src/engine/wpakpowers/Behaviours.java b/src/engine/wpakpowers/Behaviours.java
index ed2e915d..dcdb3cbc 100644
--- a/src/engine/wpakpowers/Behaviours.java
+++ b/src/engine/wpakpowers/Behaviours.java
@@ -20,25 +20,23 @@ public class Behaviours {
 
     public static Object Flag(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                               PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
-        boolean modValue = true;
-        return modValue;
+        return true;
     }
 
     public static Object MapIntToInts(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                       PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
-
         return powerAction.attackAnimations.clone();
     }
 
     public static Object Standard(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                   PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
 
-        return WpakPowerManager.applyCurveToModifier(powerAction, modifierEntry, rank);
+        return WpakPowerManager.applyCurveToValue(powerAction.compoundCurve, modifierEntry.compoundCurveType.getValue(), rank);
     }
 
     public static Object FPSubTypeAttr(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                        PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
-        return WpakPowerManager.applyCurveToModifier(powerAction, modifierEntry, rank);
+        return WpakPowerManager.applyCurveToValue(powerAction.compoundCurve, modifierEntry.compoundCurveType.getValue(), rank);
     }
 
     public static Object SubTypeSourceType(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
@@ -60,7 +58,7 @@ public class Behaviours {
     public static Object FPSubTypeDmg(AbstractCharacter caster, Power power, Integer rank, AbstractWorldObject target,
                                       PowerAction powerAction, Effect effect, ModifierEntry modifierEntry) {
         String key = modifierEntry.arg1;
-        float value = WpakPowerManager.applyCurveToModifier(powerAction, modifierEntry, rank);
+        float value = WpakPowerManager.applyCurveToValue(powerAction.compoundCurve, modifierEntry.compoundCurveType.getValue(), rank);
         return new Pair<>(key,value);
     }
 
diff --git a/src/engine/wpakpowers/WpakPowerManager.java b/src/engine/wpakpowers/WpakPowerManager.java
index 7383836c..72b7890f 100644
--- a/src/engine/wpakpowers/WpakPowerManager.java
+++ b/src/engine/wpakpowers/WpakPowerManager.java
@@ -418,6 +418,24 @@ public class WpakPowerManager {
         return false;
     }
 
+    public static float applyCurveToValue(mbEnums.CompoundCurveType curve, float value, int rank) {
+
+        float scaledValue;
+
+        // Method scales by either integer or float values driven by the curve type
+
+        if (EnumSet.of(mbEnums.CompoundCurveType.DefaultFlat, mbEnums.CompoundCurveType.DefaultSlope,
+                mbEnums.CompoundCurveType.DefaultSlopeDown).contains(curve))
+            scaledValue = curve.getValue() + (value * rank);
+        else
+            scaledValue = curve.getValue() * (1 + (value * rank));
+
+        scaledValue = scaledValue * 0.01f;
+
+        return scaledValue;
+    }
+
+
     public static float applyCurveToModifier(PowerAction powerAction, ModifierEntry modifierEntry, int rank) {
 
         float scaledValue;
@@ -425,10 +443,10 @@ public class WpakPowerManager {
         // Method scales by either integer or float values driven by the curve type
 
         if (EnumSet.of(mbEnums.CompoundCurveType.DefaultFlat, mbEnums.CompoundCurveType.DefaultSlope,
-                mbEnums.CompoundCurveType.DefaultSlopeDown).contains(powerAction.rampCurve))
-            scaledValue = powerAction.rampCurve.getValue() + (modifierEntry.compoundCurveType.getValue() * rank);
+                mbEnums.CompoundCurveType.DefaultSlopeDown).contains(powerAction.compoundCurve))
+            scaledValue = powerAction.compoundCurve.getValue() + (modifierEntry.compoundCurveType.getValue() * rank);
         else
-            scaledValue = powerAction.rampCurve.getValue() * (1 + (modifierEntry.compoundCurveType.getValue() * rank));
+            scaledValue = powerAction.compoundCurve.getValue() * (1 + (modifierEntry.compoundCurveType.getValue() * rank));
 
         scaledValue = scaledValue * 0.01f;