From c8a7db75aa93b208fe54083a4103786ddb3e6ae3 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Wed, 3 Dec 2025 21:28:47 -0800 Subject: [PATCH] Implement bonus max potential level --- .../nebula/data/resources/PotentialDef.java | 22 +++++++++++++++++++ .../emu/nebula/game/tower/StarTowerBuild.java | 3 +-- .../emu/nebula/game/tower/StarTowerGame.java | 4 ++-- .../nebula/game/tower/StarTowerModifiers.java | 13 ++++++++++- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/main/java/emu/nebula/data/resources/PotentialDef.java b/src/main/java/emu/nebula/data/resources/PotentialDef.java index 27a7ad0..ca68797 100644 --- a/src/main/java/emu/nebula/data/resources/PotentialDef.java +++ b/src/main/java/emu/nebula/data/resources/PotentialDef.java @@ -2,6 +2,7 @@ package emu.nebula.data.resources; import emu.nebula.data.BaseDef; import emu.nebula.data.ResourceType; +import emu.nebula.game.tower.StarTowerGame; import lombok.Getter; @Getter @@ -10,6 +11,7 @@ public class PotentialDef extends BaseDef { private int Id; private int CharId; private int Build; + private int BranchType; private int MaxLevel; private int[] BuildScore; @@ -19,4 +21,24 @@ public class PotentialDef extends BaseDef { public int getId() { return Id; } + + public int getMaxLevel(StarTowerGame game) { + // Check if regular potential + if (this.BranchType == 3) { + return this.MaxLevel + game.getModifiers().getBonusMaxPotentialLevel(); + } + + // Special potential should always have a max level of 1 + return this.MaxLevel; + } + + public int getBuildScore(int level) { + int index = level - 1; + + if (index >= this.BuildScore.length) { + index = this.BuildScore.length - 1; + } + + return this.BuildScore[index]; + } } diff --git a/src/main/java/emu/nebula/game/tower/StarTowerBuild.java b/src/main/java/emu/nebula/game/tower/StarTowerBuild.java index 8d9916d..9acba8e 100644 --- a/src/main/java/emu/nebula/game/tower/StarTowerBuild.java +++ b/src/main/java/emu/nebula/game/tower/StarTowerBuild.java @@ -140,8 +140,7 @@ public class StarTowerBuild implements GameDatabaseObject { var data = GameData.getPotentialDataTable().get(potential.getIntKey()); if (data == null) continue; - int index = potential.getIntValue() - 1; - this.score += data.getBuildScore()[index]; + this.score += data.getBuildScore(potential.getIntValue()); } // Sub note skills diff --git a/src/main/java/emu/nebula/game/tower/StarTowerGame.java b/src/main/java/emu/nebula/game/tower/StarTowerGame.java index 050ba65..886e076 100644 --- a/src/main/java/emu/nebula/game/tower/StarTowerGame.java +++ b/src/main/java/emu/nebula/game/tower/StarTowerGame.java @@ -353,7 +353,7 @@ public class StarTowerGame { // Clamp level int curLevel = getPotentials().get(id); - int nextLevel = Math.min(curLevel + count, potentialData.getMaxLevel()); + int nextLevel = Math.min(curLevel + count, potentialData.getMaxLevel(this)); // Sanity count = nextLevel - curLevel; @@ -529,7 +529,7 @@ public class StarTowerGame { // Check max level int level = item.getIntValue(); - if (level >= potential.getMaxLevel()) { + if (level >= potential.getMaxLevel(this)) { continue; } diff --git a/src/main/java/emu/nebula/game/tower/StarTowerModifiers.java b/src/main/java/emu/nebula/game/tower/StarTowerModifiers.java index 5c32524..65d81d1 100644 --- a/src/main/java/emu/nebula/game/tower/StarTowerModifiers.java +++ b/src/main/java/emu/nebula/game/tower/StarTowerModifiers.java @@ -16,6 +16,9 @@ public class StarTowerModifiers { private boolean freeStrengthen; private int strengthenDiscount; + // Bonus max potential level + private int bonusMaxPotentialLevel; + public StarTowerModifiers(StarTowerGame game) { this.game = game; @@ -27,9 +30,17 @@ public class StarTowerModifiers { if (this.hasGrowthNode(30402)) { this.strengthenDiscount += 60; - } else if (this.hasGrowthNode(30102)) { + } + if (this.hasGrowthNode(30102)) { this.strengthenDiscount += 30; } + + // Bonus max level + if (this.hasGrowthNode(30301)) { + this.bonusMaxPotentialLevel = 6; + } else if (this.hasGrowthNode(20601)) { + this.bonusMaxPotentialLevel = 4; + } } public boolean hasGrowthNode(int nodeId) {