Skip to content

Commit 90c7deb

Browse files
committed
feat: Replace dynamicXPMod setting with flexible experienceRateMin/Max
1 parent c3b95eb commit 90c7deb

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

engine/src/main/kotlin/world/gregs/voidps/engine/entity/character/player/skill/exp/Experience.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,21 @@ class Experience(
3333
}
3434

3535
fun add(skill: Skill, baseExperience: Double) {
36-
if (baseExperience <= 0.0) {
37-
return
38-
}
36+
if (baseExperience <= 0.0) return
37+
38+
val rateMin = Settings["world.experienceRateMin", 1.0]
39+
val rateMax = Settings["world.experienceRateMax", 1.0]
3940

40-
val xpModSetting = Settings["world.dynamicXPMod", "off"].lowercase()
41-
val playerMaxLevel = level(skill, get(skill))
42-
val maxLevel = Level.MAX_LEVEL
41+
val playerLevel = level(skill, get(skill)).toDouble()
42+
val maxLevel = Level.MAX_LEVEL.toDouble()
4343

44-
val modifier = when (xpModSetting) {
45-
"linear" -> interpolate(1.0, 5.0, playerMaxLevel.toDouble() / maxLevel)
46-
"inverse" -> interpolate(5.0, 1.0, playerMaxLevel.toDouble() / maxLevel)
47-
else -> 1.0
44+
val modifier = if (rateMin != rateMax) {
45+
interpolate(rateMin, rateMax, playerLevel / maxLevel)
46+
} else {
47+
rateMin
4848
}
4949

50-
val experienceRate = Settings["world.experienceRate", DEFAULT_EXPERIENCE_RATE]
51-
val adjustedExperience = baseExperience * modifier * experienceRate
50+
val adjustedExperience = baseExperience * modifier
5251

5352
if (blocked.contains(skill)) {
5453
events.emit(BlockedExperience(skill, adjustedExperience))

engine/src/main/kotlin/world/gregs/voidps/engine/entity/character/player/skill/level/Interpolation.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ object Interpolation {
1212
}
1313

1414
fun interpolate(start: Double, end: Double, fraction: Double): Double {
15-
return start + fraction * (end - start)
15+
val result = start + fraction * (end - start)
16+
return kotlin.math.round(result * 10) / 10.0
1617
}
1718

1819
fun lerp(value: Int, inRange: IntRange, result: IntRange): Int {

game/src/main/resources/game.properties

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ world.home.y=3219
6868
world.messages=false
6969

7070
# Experience multiplier (1.0 = normal XP rate)
71-
world.experienceRate=1.0
71+
# Set both to the same value (e.g., 1.0) for static XP
72+
# Set min < max for increasing XP at higher levels
73+
# Set min > max for decreasing XP at higher levels
74+
world.experienceRateMin=1.0
75+
world.experienceRateMax=1.0
7276

7377
# world.dynamicXPMod - Linear (1x-5x multiplier) or inverse (5x-1x multiplier) XP scaling: "off", "linear", or "inverse"
7478
world.dynamicXPMod=off

0 commit comments

Comments
 (0)