Curva de XP por nível com presets matemáticos, expressões customizadas e simulação.

xpBalance#

Define a curva de XP que rege o avanço de nível do jogador (ou de qualquer entidade que tenha progressão). Suporta presets matemáticos comuns (linear, exponencial, soft-cap, plateau) ou expressões customizadas pra fórmulas únicas.

Por que importa#

A curva de XP é uma das decisões de design mais difíceis de iterar sem ferramenta — você muda o growth de 1.15 pra 1.20 e precisa simular 100 níveis na cabeça. Aqui o app gera a curva, mostra cumulative value, average step, plateaus, picks de balanceamento. Editar é trivial.

E como o resultado vira BalancePoint[] (array de {level, value}), outras tabelas/skills/itens podem referenciar essa curva pra escalar valores junto.

Onde costuma viver#

  • Página de tipo 📈 Balanceamento de XP. Esse é o caminho principal.
  • Página de 👤 Personagens (vem como addon recomendado, junto com Profile).

Singleton — 1 curva por página.

Schema#

CampoTipoPadrãoDescrição
idSimstringID interno.
nameSimstringNome amigável (ex.: Curva de XP do Herói).
modeSim"preset" | "advanced"preset: usa um dos 7 templates. advanced: você escreve a expressão.
presetSim"linear" | "exponential" | "tiered" | "softCap" | "hardCap" | "diminishingReturns" | "piecewise"Qual preset, quando mode=preset.
expressionSimstringExpressão matemática quando mode=advanced. Suporta level, operadores básicos, pow(), min(), max().
startLevelSimnumberPrimeiro nível da curva (geralmente 1).
endLevelSimnumberÚltimo nível.
decimalsSimnumberCasas decimais ao arredondar valores gerados.
clampMinnumberPiso mínimo absoluto (opcional).
clampMaxnumberTeto máximo absoluto (opcional).
paramsSimBalanceFormulaParamsParâmetros do preset (base, growth, offset, tierStep, etc.).
profile"rpg" | "idle" | "roguelite" | "casual"Perfil de gênero — pré-configura defaults razoáveis ao trocar.
comparisonBaselineBalancePoint[]Curva de comparação (ex.: do jogo anterior do estúdio) renderizada por trás da curva atual no gráfico.
simulationInputBalanceSimulationInputInputs pra simular tempo até cada nível dado XP/min, win rate, duração de match.
targetBalanceTargetInputMeta pretendida (ex.: jogador chegar no nível 50 em 20h). O painel sugere ajustes pra atingir.

Os 7 presets#

PresetFórmula
linearbase + (level − 1) × step
exponentialbase × growth^(level − 1)
tieredLinear até tierStep, multiplica por tierMultiplier por tier
softCapCresce normal até capValue, depois cresce devagar
hardCapCresce normal até capValue, depois para
diminishingReturnsCresce com retornos decrescentes
piecewiseLinear com plateau no meio (plateauStartLevel, plateauFactor)

Exemplo: curva exponencial clássica#

XP do nível N = 100 × 1.15^(N−1), do nível 1 ao 100:

{
  "id": "xp-hero",
  "name": "Curva de XP do Herói",
  "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: nível 1 = 100 XP, nível 10 = 351, nível 50 = 108k, nível 100 = 117M XP. (Provavelmente alto demais — você ajusta growth pra 1.10 ou usa softCap.)

Simulação#

Se você preencher simulationInput, o app calcula automaticamente:

  • Minutos por nível — quanto tempo o jogador leva pra subir cada nível dado o input
  • Horas até milestones — tempo cumulativo pra chegar nos níveis 10, 25, 50, 100
  • Calendar days — útil pra jogos que limitam XP por sessão

Permite responder "o jogador chega no nível 50 em quantos dias se jogar 1h/dia?" sem cálculo manual.

Wizard#

A page type 📈 Balanceamento de XP cria este addon com defaults razoáveis (preset exponential, growth 1.15, levels 1-100). Você ajusta no painel.

Quem aponta pra xpBalance#

  • craftTable.unlock.level.xpAddonRef — receitas desbloqueadas por nível.
  • skills.unlock.level.xpAddonRef — skills desbloqueadas por nível.
  • progressionTable (indiretamente) — quando suas colunas escalam com nível, frequentemente a curva de referência é uma de XP.

Veja também#