Spaces:
Running
Running
File size: 4,505 Bytes
5c2ed06 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
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;
},
},
};
|