diff --git a/data/random-battles/gen1/teams.ts b/data/random-battles/gen1/teams.ts index b406eaf35a..9c7628a909 100644 --- a/data/random-battles/gen1/teams.ts +++ b/data/random-battles/gen1/teams.ts @@ -21,7 +21,7 @@ export class RandomGen1Teams extends RandomGen2Teams { override randomCCTeam() { this.enforceNoDirectCustomBanlistChanges(); - const team = []; + const team: RandomTeamsTypes.RandomSet[] = []; const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype); diff --git a/data/random-battles/gen3/teams.ts b/data/random-battles/gen3/teams.ts index 0c1c8380f0..0bcc81eda9 100644 --- a/data/random-battles/gen3/teams.ts +++ b/data/random-battles/gen3/teams.ts @@ -612,7 +612,7 @@ export class RandomGen3Teams extends RandomGen4Teams { name: species.baseSpecies, species: forme, speciesId: species.id, - gender: species.gender, + gender: species.gender || (this.random(2) ? 'F' : 'M'), shiny: this.randomChance(1, 1024), level, moves: shuffledMoves, diff --git a/data/random-battles/gen4/teams.ts b/data/random-battles/gen4/teams.ts index b54ecb996f..a4497be5b3 100644 --- a/data/random-battles/gen4/teams.ts +++ b/data/random-battles/gen4/teams.ts @@ -727,7 +727,7 @@ export class RandomGen4Teams extends RandomGen5Teams { name: species.baseSpecies, species: forme, speciesId: species.id, - gender: species.gender, + gender: species.gender || (this.random(2) ? 'F' : 'M'), shiny: this.randomChance(1, 1024), level, moves: shuffledMoves, diff --git a/data/random-battles/gen5/teams.ts b/data/random-battles/gen5/teams.ts index dfb9c86189..6f15c722b6 100644 --- a/data/random-battles/gen5/teams.ts +++ b/data/random-battles/gen5/teams.ts @@ -790,7 +790,7 @@ export class RandomGen5Teams extends RandomGen6Teams { name: species.baseSpecies, species: forme, speciesId: species.id, - gender: species.gender, + gender: species.gender || (this.random(2) ? 'F' : 'M'), shiny: this.randomChance(1, 1024), level, moves: shuffledMoves, diff --git a/data/random-battles/gen9baby/teams.ts b/data/random-battles/gen9baby/teams.ts index f8c7936101..5cfc2185ac 100644 --- a/data/random-battles/gen9baby/teams.ts +++ b/data/random-battles/gen9baby/teams.ts @@ -653,7 +653,7 @@ export class RandomBabyTeams extends RandomTeams { return { name: species.baseSpecies, species: forme, - gender: species.gender, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), shiny: this.randomChance(1, 1024), level, moves: shuffledMoves, diff --git a/data/random-battles/gen9cap/teams.ts b/data/random-battles/gen9cap/teams.ts index aa732433e7..8aa4e3915a 100644 --- a/data/random-battles/gen9cap/teams.ts +++ b/data/random-battles/gen9cap/teams.ts @@ -170,7 +170,7 @@ export class RandomCAPTeams extends RandomTeams { return { name: species.baseSpecies, species: forme, - gender: species.baseSpecies === 'Greninja' ? 'M' : species.gender, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), shiny: this.randomChance(1, 1024), level, moves: shuffledMoves, diff --git a/data/random-battles/gen9ffa/teams.ts b/data/random-battles/gen9ffa/teams.ts index af242b614a..7fc7a76cad 100644 --- a/data/random-battles/gen9ffa/teams.ts +++ b/data/random-battles/gen9ffa/teams.ts @@ -882,7 +882,7 @@ export class RandomFFATeams extends RandomTeams { return { name: species.baseSpecies, species: forme, - gender: species.gender, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), shiny: this.randomChance(1, 1024), level, moves: shuffledMoves, diff --git a/sim/global-types.ts b/sim/global-types.ts index 9fdbe08149..cfe994db66 100644 --- a/sim/global-types.ts +++ b/sim/global-types.ts @@ -517,7 +517,7 @@ declare namespace RandomTeamsTypes { name: string; species: string; speciesId?: string; - gender: string | boolean; + gender: Exclude | false; moves: string[]; ability: string; evs: SparseStatsTable; diff --git a/sim/pokemon.ts b/sim/pokemon.ts index b9283feb3a..11484b8493 100644 --- a/sim/pokemon.ts +++ b/sim/pokemon.ts @@ -336,9 +336,7 @@ export class Pokemon { set.level = this.battle.clampIntRange(set.adjustLevel || set.level || 100, 1, 9999); this.level = set.level; - const genders: { [key: string]: GenderName | null } = { __proto__: null, M: 'M', F: 'F', N: 'N' }; - this.gender = genders[set.gender] || this.species.gender || this.battle.sample(['M', 'F']); - if (this.gender === 'N') this.gender = ''; + this.gender = ['M', 'F'].includes(set.gender) ? set.gender : ''; this.happiness = typeof set.happiness === 'number' ? this.battle.clampIntRange(set.happiness, 0, 255) : 255; if (this.battle.format.mod === 'gen7letsgo') this.happiness = 70; this.pokeball = toID(this.set.pokeball) || 'pokeball' as ID; diff --git a/sim/team-validator.ts b/sim/team-validator.ts index 02cea0039b..8ad50e8ed5 100644 --- a/sim/team-validator.ts +++ b/sim/team-validator.ts @@ -1113,8 +1113,12 @@ export class TeamValidator { } if (!problems.length) { - if (this.gen > 5 && !ruleTable.has('obtainablemisc')) { - set.gender ||= 'N'; + if (!set.gender) { + if (this.gen <= 5 || ruleTable.has('obtainablemisc')) { + set.gender = species.gender || (Math.random() <= species.genderRatio.M ? 'M' : 'F'); + } else { + set.gender = 'N'; + } } if (adjustLevel) set.level = adjustLevel; return null; diff --git a/test/sim/items/quickclaw.js b/test/sim/items/quickclaw.js index ab2041c242..8c7d67a40b 100644 --- a/test/sim/items/quickclaw.js +++ b/test/sim/items/quickclaw.js @@ -11,7 +11,7 @@ describe('Quick Claw', () => { }); it(`[Gen 2] shares its activation roll with every holder on any given turn`, () => { - battle = common.gen(2).createBattle({ seed: [1, 2, 3, 27] }, [[ + battle = common.gen(2).createBattle({ seed: [56315, 2707, 289, 7274] }, [[ { species: 'snorlax', item: 'quickclaw', moves: ['sleeptalk'] }, ], [ { species: 'mewtwo', item: 'quickclaw', moves: ['sleeptalk'] }, @@ -28,7 +28,7 @@ describe('Quick Claw', () => { }); it(`[Gen 3] causes Speed ties with every holder when activated`, () => { - battle = common.gen(3).createBattle({ seed: [163, 106, 112, 542] }, [[ + battle = common.gen(3).createBattle({ seed: [54340, 18392, 54347, 33433] }, [[ { species: 'snorlax', item: 'quickclaw', moves: ['spore'] }, ], [ { species: 'deoxys', item: 'quickclaw', moves: ['seismictoss'] }, diff --git a/test/sim/moves/assurance.js b/test/sim/moves/assurance.js index fb04655c79..00db85b5c4 100644 --- a/test/sim/moves/assurance.js +++ b/test/sim/moves/assurance.js @@ -28,7 +28,7 @@ describe('Assurance', () => { it(`should double the power against damaged Pokemon, not damaged slots`, () => { battle = common.createBattle({ gameType: 'doubles' }, [[ { species: 'bulbasaur', level: 1, moves: ['sleeptalk'] }, - { species: 'landorus', moves: ['sleeptalk'] }, + { species: 'landorus', ability: 'shellarmor', moves: ['sleeptalk'] }, ], [ { species: 'alakazam', moves: ['psychic'] }, { species: 'pawniard', moves: ['assurance'] }, diff --git a/test/sim/moves/burnup.js b/test/sim/moves/burnup.js index 330a63d3d3..9a3d9ed71c 100644 --- a/test/sim/moves/burnup.js +++ b/test/sim/moves/burnup.js @@ -12,7 +12,7 @@ describe('Burn Up', () => { it('should not thaw the user if it is not a Fire type', () => { battle = common.createBattle({ - seed: [0, 0, 0, 0], + seed: [0, 0, 38, 40643], customRules: 'guaranteedsecondarymod', }, [[ { species: 'Moltres', moves: ['burnup'] }, diff --git a/test/sim/moves/pursuit.js b/test/sim/moves/pursuit.js index 3c1358c5ab..c1a734262c 100644 --- a/test/sim/moves/pursuit.js +++ b/test/sim/moves/pursuit.js @@ -106,7 +106,7 @@ describe(`Pursuit`, () => { { species: "Clefable", moves: ['calmmind'] }, { species: "Furret", moves: ['calmmind'] }, ], [ - { species: "Clefable", moves: ['calmmind'] }, + { species: "Clefable", ability: 'shellarmor', moves: ['calmmind'] }, { species: "Alakazam", moves: ['calmmind'] }, { species: "Roserade", moves: ['calmmind'] }, ]]);