Scaling System
Introduction
The Scaling system is the mathematical engine that powers all dynamic value calculations in Ascend from Nine Mountains. Whether you’re creating techniques that deal damage, buffs that modify stats, or crafting effects that scale with player progression, understanding scaling is essential for creating balanced, engaging content.
Every damage number, healing amount, buff strength, and stat modifier flows through this system, creating the progression curves that make cultivation feel meaningful.
Core Architecture
The Scaling Interface
interface Scaling {
value: number; // Base multiplier
stat?: string; // Stat to multiply by
scaling?: string; // Special scaling mode
eqn?: string; // Custom equation
max?: Scaling; // Cap the final value
upgradeKey?: string; // Links to mastery upgrades
}
Evaluation Formula
The system follows a predictable pattern: Base × Stat × Scaling × Equation
Final Value = value × [stat] × [scaling] × [eqn result]
Each component is optional, allowing for simple flat values or complex multi-variable calculations.
Deep Dive: Scaling Patterns
Pattern 1: Flat Values
When to use: Fixed effects, utility abilities, resource generation that shouldn’t scale with combat stats.
// Always grants exactly 3 stacks
{
value: 3,
stat: undefined // No stat multiplication
}
// Fixed damage (rare, usually for utility)
{
value: 100,
stat: undefined
}
// Equation-only calculation
{
value: 1,
stat: undefined,
eqn: 'toxicity * 2' // Result comes entirely from equation
}
Real Example: Concentrate Force scales only with Ripple Force stacks:
amount: {
value: 1,
stat: undefined,
scaling: rippleForce.name, // 1 damage per stack, no stat scaling
max: { value: 7, upgradeKey: 'maxStacks' }
}
Pattern 2: Basic Stat Scaling
When to use: Standard techniques, straightforward damage/healing effects.
// 150% of player's power as damage
{
value: 1.5,
stat: 'power'
}
// Barrier equal to 300% of defense
{
value: 3,
stat: 'defense'
}
// Crafting perfection based on control
{
value: 0.8,
stat: 'control'
}
Real Example: Sun Blast technique:
amount: {
value: 2, // 200% of power
stat: 'power',
upgradeKey: 'power' // Improves with mastery
}
Pattern 3: Stack-Based Scaling
When to use: Buff effects that scale with accumulated stacks, combo systems.
// Damage per buff stack
{
value: 0.3, // 30% power per stack
stat: 'power',
scaling: 'stacks'
}
// Fixed amount per stack (no stat scaling)
{
value: 10, // 10 damage per stack
scaling: 'stacks'
}
Real Example: Blossom technique scaling with Vitality:
amount: {
value: 0.3,
stat: 'power',
scaling: 'stacks' // 30% power × Vitality stacks
}
Pattern 4: Game State Scaling
When to use: Effects that respond to dynamic game conditions like toxicity, stability, or qi levels.
// Power increases with risk (toxicity)
{
value: 0.1,
stat: 'power',
scaling: 'toxicity' // More toxic = more powerful
}
// Cost scales with current stability
{
value: -50,
scaling: 'stability' // Costs current stability
}
Real Example: Lianjin Bandolier toxicity scaling:
stats: {
power: {
value: 0.005, // 0.5% power per toxicity point
stat: 'power',
scaling: 'toxicity',
max: { value: 1, stat: 'power' } // Capped at 100% bonus
}
}
Pattern 5: Cross-Buff Scaling
When to use: Synergies between different buffs, combo effects that reward specific buff combinations.
// Scale with specific buff stacks
{
value: 1,
scaling: specificBuffName // Uses that buff's current stacks
}
// Scale with target's debuffs
{
value: 2,
stat: 'power',
scaling: 'target.' + debuffName // Enemy's debuff stacks
}
Real Example: Celestial Discordance:
amount: {
value: 1,
scaling: 'target.' + harmonicDiscord.name // Damage per target's discord
}
Pattern 6: Complex Equations
When to use: Percentage calculations, conditional logic, multi-variable formulas.
// Toxicity percentage bonus
{
value: 3,
stat: 'power',
eqn: 'toxicity/maxtoxicity' // Scales with toxicity %
}
// Conditional damage boost
{
value: 1,
stat: 'power',
eqn: 'qi < maxqi * 0.3 ? 2 : 1' // Double power when low on qi
}
// Multi-buff synergy
{
value: 4,
eqn: `${flag(buff1.name)} + ${flag(buff2.name)}` // Sum of two buffs
}
Pattern 7: Capped Scaling
When to use: Preventing runaway scaling, maintaining game balance.
// Stat scaling with hard cap
{
value: 0.05, // 5% per stack
stat: 'power',
scaling: 'stacks',
max: { value: 2, stat: 'power' } // Max 200% power bonus
}
// Fixed numerical cap
{
value: 10,
scaling: 'stacks',
max: { value: 100 } // Never exceeds 100
}
Real Example: Ripple Force power bonus:
stats: {
power: {
value: 0.05, // 5% per stack
stat: 'power',
scaling: 'stacks',
max: {
value: 2, // Caps at 200% power
stat: 'power'
}
}
}
Standard scaling
To keep numbers consistent, there are a few standard patterns for scaling you want to follow:
For technique effects
Anything that creates a direct effect (damage, healing, barrier) on techniques should scale from power:
{
value: 1, // 100% of power
stat: "power"
}
For stacks of buffs
Anything that produces stacks of buffs should not scale off any stat, but can scale off other field to increase those stacks
{
value: 1, // Create 1 stack
stat: undefined,
scaling: "Flow" // Multiply by the flow stacks
}
For items
Consumables should normally have a flat scaling to ensure that lower realm items are not excessively powerful in higher realms.
{
value: Math.floor(window.modAPI.utils.getExpectedHealth("bodyForging", "Late") * 0.5), // A flat 50% of the players expected hp in the Body Forging realm
stat: undefined,
eqn: '1 + (itemEffectiveness * 0.01)', // Multiplied by item effectiveness
}
For artefacts / formation parts
Externally controlled / powered items like artefacts and formation parts should scale off artefact power, not power
{
value: 1,
stat: 'artefactpower',
eqn: '1 + (itemEffectiveness * 0.01)', // Only for formation parts scale by item effectiveness too
}
Practical Examples by School
Fist School: Stack Accumulation
// Generate Flow stacks
{
kind: 'buffSelf',
buff: flow,
amount: { value: 1 } // Always 1 stack
}
// Convert Flow to damage
{
kind: 'damage',
amount: {
value: 0.8, // 80% power per Flow stack
stat: 'power',
scaling: flow.name
}
}
Weapon School: Progressive Momentum
// Momentum builds over turns
stats: {
power: {
value: 0.02, // 2% power per stack
stat: 'power',
scaling: 'stacks',
max: { value: 0.5, stat: 'power' } // 50% power cap
}
}
Celestial School: Dual Attunement
// Power from both light and dark
stats: {
celestialBoost: {
value: 4,
eqn: `${flag(lunarAttunement.name)} + ${flag(solarAttunement.name)}`
}
}
Blood School: Risk/Reward
// Low health = high power
{
value: 2,
stat: 'power',
scaling: '1 - (hp / maxhp)', // max power at 0 hp
}
Advanced Techniques
Upgrade Key Integration
Link scaling to mastery progression:
{
value: 0.65,
stat: 'intensity',
upgradeKey: 'completion' // Improves as player masters technique
}
// Upgrade affects caps
{
value: 3,
scaling: 'stacks',
max: {
value: 5,
upgradeKey: 'maxStacks' // Max stacks increase with mastery
}
}
State-Dependent Effects
// Desperation bonus
{
kind: 'perfection',
amount: {
value: 20,
eqn: '(stability < 30) * 20' // Bonus when desperate
}
}
Tips and Best Practices
Scaling Guidelines
Damage Multipliers:
- Basic attacks: 0.5-1.2× stat
- Strong techniques: 1.5-2.5× stat
- Ultimate abilities: 3.0-4.0× stat
- Per-stack scaling: 0.05-0.1× stat per stack
When to Use Each Pattern
Flat Values (
stat: undefined
):- Utility effects (cleanse, dispel)
- Resource generation/consumption
- Equation-only calculations
- Upgrade-driven progression
Basic Stat Scaling:
- Standard damage and healing
- Straightforward stat bonuses
- Effects that should grow with character power
Stack Scaling:
- Combo systems and buff interactions
- Resource accumulation mechanics
Equation Scaling:
- Complex conditional logic
- Percentage-based effects
- Multi-variable calculations
Balance Considerations
- Always cap percentage scaling to prevent exponential growth
- Use meaningful stat relationships (power for damage, control for crafting)
- Test edge cases thoroughly, especially with equations
- Consider upgrade keys for meaningful progression
- Make patterns intuitive - players will optimize around your systems
Common Pitfalls
- Uncapped scaling - Leads to broken balance
- Illogical stat relationships - Confuses players
- Overly complex equations - Hard to debug and understand
- Missing progression - Static effects feel unrewarding
- Inconsistent patterns - Makes the system unpredictable
The scaling system is powerful and flexible. Master these patterns, and you’ll create techniques and effects that feel both impactful and balanced, scaling naturally with player progression while maintaining strategic depth.