Curva de XP por nivel con presets matemáticos, expresiones personalizadas y simulación.
xpBalance#
Define la curva de XP que gobierna el avance de nivel del jugador (o de cualquier entidad con progresión). Soporta presets matemáticos comunes (lineal, exponencial, soft-cap, plateau) o expresiones personalizadas para fórmulas únicas.
Por qué importa#
La curva de XP es una de las decisiones de diseño más difíciles de iterar sin herramienta — cambias el growth de 1.15 a 1.20 y necesitas simular 100 niveles mentalmente. Aquí la app genera la curva, muestra el valor acumulado, el paso promedio, los plateaus y los puntos de balance. Editar es trivial.
Y como el resultado se convierte en BalancePoint[] (array de {level, value}), otras tablas/habilidades/ítems pueden referenciar esta curva para escalar valores con ella.
Dónde suele vivir#
- Página de tipo
📈 Balance de XP. Ese es el camino principal. - Página de
👤 Personajes(viene como addon recomendado, junto con Profile).
Singleton — 1 curva por página.
Esquema#
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idSí | string | ID interno. | |
nameSí | string | Nombre amigable (ej.: Curva de XP del Héroe). | |
modeSí | "preset" | "advanced" | preset: usa uno de 7 templates. advanced: escribes la expresión. | |
presetSí | "linear" | "exponential" | "tiered" | "softCap" | "hardCap" | "diminishingReturns" | "piecewise" | Qué preset, cuando mode=preset. | |
expressionSí | string | Expresión matemática cuando mode=advanced. Soporta level, operadores básicos, pow(), min(), max(). | |
startLevelSí | number | Primer nivel de la curva (generalmente 1). | |
endLevelSí | number | Último nivel. | |
decimalsSí | number | Decimales al redondear los valores generados. | |
clampMin | number | Piso mínimo absoluto (opcional). | |
clampMax | number | Techo máximo absoluto (opcional). | |
paramsSí | BalanceFormulaParams | Parámetros del preset (base, growth, offset, tierStep, etc.). | |
profile | "rpg" | "idle" | "roguelite" | "casual" | Perfil de género — preconfigura valores razonables al cambiar. | |
comparisonBaseline | BalancePoint[] | Curva de comparación (ej.: del juego anterior del estudio) renderizada detrás de la curva actual en el gráfico. | |
simulationInput | BalanceSimulationInput | Inputs para simular el tiempo hasta cada nivel dados XP/min, tasa de victorias, duración de partida. | |
target | BalanceTargetInput | Meta deseada (ej.: el jugador llega al nivel 50 en 20h). El panel sugiere ajustes para alcanzarla. |
Los 7 presets#
| Preset | Fórmula |
|---|---|
linear | base + (nivel − 1) × step |
exponential | base × growth^(nivel − 1) |
tiered | Lineal hasta tierStep, multiplica por tierMultiplier por tier |
softCap | Crece normal hasta capValue, luego crece lento |
hardCap | Crece normal hasta capValue, luego se detiene |
diminishingReturns | Crece con retornos decrecientes |
piecewise | Lineal con plateau en el medio (plateauStartLevel, plateauFactor) |
Ejemplo: curva exponencial clásica#
XP del nivel N = 100 × 1.15^(N−1), del nivel 1 al 100:
{
"id": "xp-hero",
"name": "Curva de XP del Héroe",
"mode": "preset",
"preset": "exponential",
"expression": "",
"startLevel": 1,
"endLevel": 100,
"decimals": 0,
"params": {
"base": 100,
"growth": 1.15,
"offset": 0,
"tierStep": 0,
"tierMultiplier": 1,
"capValue": 0,
"capStrength": 0,
"plateauStartLevel": 0,
"plateauFactor": 1
},
"profile": "rpg"
}
Resultado: nivel 1 = 100 XP, nivel 10 = 351, nivel 50 = 108k, nivel 100 = 117M XP. (Probablemente demasiado alto — ajustas growth a 1.10 o usas softCap.)
Simulación#
Si llenas simulationInput, la app calcula automáticamente:
- Minutos por nivel — cuánto tiempo tarda el jugador en subir cada nivel dado el input
- Horas hasta hitos — tiempo acumulado para llegar a los niveles 10, 25, 50, 100
- Días calendario — útil para juegos que limitan XP por sesión
Permite responder "¿en cuántos días llega el jugador al nivel 50 jugando 1h/día?" sin cálculo manual.
Wizard#
El tipo de página 📈 Balance de XP crea este addon con valores razonables por defecto (preset exponential, growth 1.15, niveles 1–100). Ajustas en el panel.
Quién apunta a xpBalance#
craftTable.unlock.level.xpAddonRef— recetas desbloqueadas por nivel.skills.unlock.level.xpAddonRef— habilidades desbloqueadas por nivel.progressionTable(indirectamente) — cuando tus columnas escalan con el nivel, la curva de referencia suele ser una de XP.