[Bug] Fix speed tie code (#1895)
* Fix speed tie code * Fix off by one error * Shuffle before sorting to make code cleaner
This commit is contained in:
parent
a815b73d96
commit
9013921523
|
@ -633,11 +633,12 @@ export abstract class FieldPhase extends BattlePhase {
|
||||||
const playerField = this.scene.getPlayerField().filter(p => p.isActive()) as Pokemon[];
|
const playerField = this.scene.getPlayerField().filter(p => p.isActive()) as Pokemon[];
|
||||||
const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[];
|
const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[];
|
||||||
|
|
||||||
let orderedTargets: Pokemon[] = playerField.concat(enemyField).sort((a: Pokemon, b: Pokemon) => {
|
// We shuffle the list before sorting so speed ties produce random results
|
||||||
|
let orderedTargets: Pokemon[] = Utils.randSeedShuffle(playerField.concat(enemyField)).sort((a: Pokemon, b: Pokemon) => {
|
||||||
const aSpeed = a?.getBattleStat(Stat.SPD) || 0;
|
const aSpeed = a?.getBattleStat(Stat.SPD) || 0;
|
||||||
const bSpeed = b?.getBattleStat(Stat.SPD) || 0;
|
const bSpeed = b?.getBattleStat(Stat.SPD) || 0;
|
||||||
|
|
||||||
return aSpeed < bSpeed ? 1 : aSpeed > bSpeed ? -1 : !this.scene.randBattleSeedInt(2) ? -1 : 1;
|
return bSpeed - aSpeed;
|
||||||
});
|
});
|
||||||
|
|
||||||
const speedReversed = new Utils.BooleanHolder(false);
|
const speedReversed = new Utils.BooleanHolder(false);
|
||||||
|
|
17
src/utils.ts
17
src/utils.ts
|
@ -127,6 +127,23 @@ export function randSeedEasedWeightedItem<T>(items: T[], easingFunction: string
|
||||||
return items[Math.floor(easedValue * items.length)];
|
return items[Math.floor(easedValue * items.length)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuffle a list using the seeded rng. Utilises the Fisher-Yates algorithm.
|
||||||
|
* @param {Array} items An array of items.
|
||||||
|
* @returns {Array} A new shuffled array of items.
|
||||||
|
*/
|
||||||
|
export function randSeedShuffle<T>(items: T[]): T[] {
|
||||||
|
if (items.length <= 1) {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
const newArray = items.slice(0);
|
||||||
|
for (let i = items.length - 1; i > 0; i--) {
|
||||||
|
const j = Phaser.Math.RND.integerInRange(0, i);
|
||||||
|
[newArray[i], newArray[j]] = [newArray[j], newArray[i]];
|
||||||
|
}
|
||||||
|
return newArray;
|
||||||
|
}
|
||||||
|
|
||||||
export function getFrameMs(frameCount: integer): integer {
|
export function getFrameMs(frameCount: integer): integer {
|
||||||
return Math.floor((1 / 60) * 1000 * frameCount);
|
return Math.floor((1 / 60) * 1000 * frameCount);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue