Remove level and stat caps
parent
c275620755
commit
dca8a5c529
|
@ -1126,12 +1126,10 @@ export default class BattleScene extends Phaser.Scene {
|
||||||
this.ui?.achvBar.setY((this.game.canvas.height / 6 + this.moneyText.y + 15));
|
this.ui?.achvBar.setY((this.game.canvas.height / 6 + this.moneyText.y + 15));
|
||||||
}
|
}
|
||||||
|
|
||||||
getMaxExpLevel(ignoreLevelCap?: boolean): integer {
|
getMaxExpLevel(): integer {
|
||||||
if (ignoreLevelCap)
|
|
||||||
return 10000;
|
|
||||||
const lastWaveIndex = Math.ceil((this.currentBattle?.waveIndex || 1) / 10) * 10;
|
const lastWaveIndex = Math.ceil((this.currentBattle?.waveIndex || 1) / 10) * 10;
|
||||||
const baseLevel = (1 + lastWaveIndex / 2 + Math.pow(lastWaveIndex / 25, 2)) * 1.2;
|
const baseLevel = (1 + lastWaveIndex / 2 + Math.pow(lastWaveIndex / 25, 2)) * 1.2;
|
||||||
return Math.min(Math.ceil(baseLevel / 2) * 2 + 2, 10000);
|
return Math.ceil(baseLevel / 2) * 2 + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies {
|
randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies {
|
||||||
|
|
|
@ -1080,7 +1080,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier {
|
||||||
pokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount);
|
pokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount);
|
||||||
|
|
||||||
pokemon.level += levelCount.value;
|
pokemon.level += levelCount.value;
|
||||||
if (pokemon.level <= pokemon.scene.getMaxExpLevel(true)) {
|
if (pokemon.level <= pokemon.scene.getMaxExpLevel()) {
|
||||||
pokemon.exp = getLevelTotalExp(pokemon.level, pokemon.species.growthRate);
|
pokemon.exp = getLevelTotalExp(pokemon.level, pokemon.species.growthRate);
|
||||||
pokemon.levelExp = 0;
|
pokemon.levelExp = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -542,7 +542,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
let baseStat = baseStats[s];
|
let baseStat = baseStats[s];
|
||||||
let value = Math.floor(((2 * baseStat + this.ivs[s]) * this.level) * 0.01);
|
let value = Math.floor(((2 * baseStat + this.ivs[s]) * this.level) * 0.01);
|
||||||
if (isHp) {
|
if (isHp) {
|
||||||
value = Math.min(value + this.level + 10, 99999);
|
value = value + this.level + 10;
|
||||||
if (this.getAbility().hasAttr(NonSuperEffectiveImmunityAbAttr))
|
if (this.getAbility().hasAttr(NonSuperEffectiveImmunityAbAttr))
|
||||||
value = 1;
|
value = 1;
|
||||||
if (this.hp > value || this.hp === undefined)
|
if (this.hp > value || this.hp === undefined)
|
||||||
|
@ -558,7 +558,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||||
this.scene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier);
|
this.scene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier);
|
||||||
if (natureStatMultiplier.value !== 1)
|
if (natureStatMultiplier.value !== 1)
|
||||||
value = Math.max(Math[natureStatMultiplier.value > 1 ? 'ceil' : 'floor'](value * natureStatMultiplier.value), 1);
|
value = Math.max(Math[natureStatMultiplier.value > 1 ? 'ceil' : 'floor'](value * natureStatMultiplier.value), 1);
|
||||||
value = Math.min(value, 99999);
|
|
||||||
}
|
}
|
||||||
this.stats[s] = value;
|
this.stats[s] = value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -378,7 +378,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
||||||
const relLevelExp = getLevelRelExp(this.lastLevel + 1, pokemon.species.growthRate);
|
const relLevelExp = getLevelRelExp(this.lastLevel + 1, pokemon.species.growthRate);
|
||||||
const levelExp = levelUp ? relLevelExp : pokemon.levelExp;
|
const levelExp = levelUp ? relLevelExp : pokemon.levelExp;
|
||||||
let ratio = relLevelExp ? levelExp / relLevelExp : 0;
|
let ratio = relLevelExp ? levelExp / relLevelExp : 0;
|
||||||
if (this.lastLevel >= (this.scene as BattleScene).getMaxExpLevel(true)) {
|
if (this.lastLevel >= (this.scene as BattleScene).getMaxExpLevel()) {
|
||||||
if (levelUp)
|
if (levelUp)
|
||||||
ratio = 1;
|
ratio = 1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -570,8 +570,8 @@ export default class SummaryUiHandler extends UiHandler {
|
||||||
statsContainer.add(statLabel);
|
statsContainer.add(statLabel);
|
||||||
|
|
||||||
const statValueText = stat !== Stat.HP
|
const statValueText = stat !== Stat.HP
|
||||||
? this.pokemon.stats[s].toString()
|
? Utils.formatStat(this.pokemon.stats[s])
|
||||||
: `${this.pokemon.hp}/${this.pokemon.getMaxHp()}`;
|
: `${Utils.formatStat(this.pokemon.hp, true)}/${Utils.formatStat(this.pokemon.getMaxHp(), true)}`;
|
||||||
|
|
||||||
const statValue = addTextObject(this.scene, 120 + 88 * colIndex, 56 + 16 * rowIndex, statValueText, TextStyle.WINDOW);
|
const statValue = addTextObject(this.scene, 120 + 88 * colIndex, 56 + 16 * rowIndex, statValueText, TextStyle.WINDOW);
|
||||||
statValue.setOrigin(1, 0);
|
statValue.setOrigin(1, 0);
|
||||||
|
|
23
src/utils.ts
23
src/utils.ts
|
@ -139,6 +139,29 @@ export function decToBin(input: integer): string {
|
||||||
return bin;
|
return bin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function formatStat(stat: integer, forHp: boolean = false): string {
|
||||||
|
if (stat < (forHp ? 100000 : 1000000))
|
||||||
|
return stat.toString();
|
||||||
|
let ret = stat.toString();
|
||||||
|
let suffix = '';
|
||||||
|
switch (Math.ceil(ret.length / 3) - 1) {
|
||||||
|
case 1:
|
||||||
|
suffix = 'K';
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
suffix = 'M';
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
suffix = 'B';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return '?';
|
||||||
|
}
|
||||||
|
const digits = ((ret.length + 2) % 3) + 1;
|
||||||
|
const decimalNumber = parseInt(ret.slice(digits, digits + (3 - digits)));
|
||||||
|
return `${ret.slice(0, digits)}${decimalNumber ? `.${decimalNumber}` : ''}${suffix}`;
|
||||||
|
}
|
||||||
|
|
||||||
export function getEnumKeys(enumType): string[] {
|
export function getEnumKeys(enumType): string[] {
|
||||||
return Object.values(enumType).filter(v => isNaN(parseInt(v.toString()))).map(v => v.toString());
|
return Object.values(enumType).filter(v => isNaN(parseInt(v.toString()))).map(v => v.toString());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue