Spaces:
Running
Running
export const Scripts: ModdedBattleScriptsData = { | |
gen: 9, | |
inherit: 'gen9', | |
init() { | |
for (const id in this.data.Pokedex) { | |
const types = Array.from(new Set(this.data.Pokedex[id].types.map(type => ( | |
type.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark') | |
)))); | |
this.modData('Pokedex', id).types = types; | |
} | |
for (const id in this.data.Moves) { | |
const move = this.data.Moves[id]; | |
const type = move.type | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark'); | |
this.modData('Moves', id).type = type; | |
} | |
for (const id in this.data.Items) { | |
const item = this.data.Items[id]; | |
if (item.onPlate) { | |
const type = item.onPlate | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark'); | |
this.modData('Items', id).onPlate = type; | |
} | |
if (item.onDrive) { | |
const type = item.onDrive | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark'); | |
this.modData('Items', id).onDrive = type; | |
} | |
if (item.onMemory) { | |
const type = item.onMemory | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark'); | |
this.modData('Items', id).onMemory = type; | |
} | |
if (item.zMoveType) { | |
const type = item.zMoveType | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark'); | |
this.modData('Items', id).zMoveType = type; | |
} | |
if (item.naturalGift) { | |
const type = item.naturalGift.type | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark'); | |
const overriddenBerries = [ | |
'chartiberry', 'cobaberry', 'kasibberry', 'kebiaberry', 'roseliberry', 'shucaberry', 'tangaberry', 'yacheberry', | |
]; | |
if (overriddenBerries.includes(id)) { | |
// these berries were already modded in ./items.ts | |
// so they have inherited references to the base dex naturalGift objects and need new ones | |
this.modData('Items', id).naturalGift = { ...item.naturalGift, type }; | |
} else { | |
// these were unmodded, so modData makes deep clones of them which makes this a safe write | |
this.modData('Items', id).naturalGift.type = type; | |
} | |
} | |
} | |
}, | |
pokemon: { | |
hasType(type) { | |
const thisTypes = this.getTypes(); | |
if (typeof type === 'string') { | |
return thisTypes.includes(type | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark')); | |
} | |
for (const typeName of type) { | |
if (thisTypes.includes(typeName | |
.replace(/(Ghost|Fairy)/g, 'Psychic') | |
.replace(/Bug/g, 'Grass') | |
.replace(/Ice/g, 'Water') | |
.replace(/(Rock|Ground)/g, 'Fighting') | |
.replace(/Flying/g, 'Normal') | |
.replace(/Poison/g, 'Dark')) | |
) { | |
return true; | |
} | |
} | |
return false; | |
}, | |
runImmunity(type, message) { | |
if (!type || type === '???') return true; | |
if (!this.battle.dex.types.isName(type)) { | |
throw new Error("Use runStatusImmunity for " + type); | |
} | |
if (this.fainted) return false; | |
const negateImmunity = !this.battle.runEvent('NegateImmunity', this, type); | |
const notImmune = type === 'Fighting' ? | |
this.isGrounded(negateImmunity) : | |
negateImmunity || this.battle.dex.getImmunity(type, this); | |
if (notImmune) return true; | |
if (!message) return false; | |
if (notImmune === null) { | |
this.battle.add('-immune', this, '[from] ability: Levitate'); | |
} else { | |
this.battle.add('-immune', this); | |
} | |
return false; | |
}, | |
}, | |
}; | |