{ "version": 3, "sources": ["../../../sim/dex-abilities.ts"], "sourcesContent": ["import {PokemonEventMethods} from './dex-conditions';\r\nimport {BasicEffect, toID} from './dex-data';\r\n\r\ninterface AbilityEventMethods {\r\n\tonCheckShow?: (this: Battle, pokemon: Pokemon) => void;\r\n\tonEnd?: (this: Battle, target: Pokemon & Side & Field) => void;\r\n\tonPreStart?: (this: Battle, pokemon: Pokemon) => void;\r\n\tonStart?: (this: Battle, target: Pokemon) => void;\r\n}\r\n\r\nexport interface AbilityData extends Partial, AbilityEventMethods, PokemonEventMethods {\r\n\tname: string;\r\n}\r\n\r\nexport type ModdedAbilityData = AbilityData | Partial & {inherit: true};\r\n\r\nexport class Ability extends BasicEffect implements Readonly {\r\n\tdeclare readonly effectType: 'Ability';\r\n\r\n\t/** Rating from -1 Detrimental to +5 Essential; see `data/abilities.ts` for details. */\r\n\treadonly rating: number;\r\n\treadonly suppressWeather: boolean;\r\n\tdeclare readonly condition?: ConditionData;\r\n\tdeclare readonly isPermanent?: boolean;\r\n\tdeclare readonly isBreakable?: boolean;\r\n\r\n\tconstructor(data: AnyObject) {\r\n\t\tsuper(data);\r\n\r\n\t\tthis.fullname = `ability: ${this.name}`;\r\n\t\tthis.effectType = 'Ability';\r\n\t\tthis.suppressWeather = !!data.suppressWeather;\r\n\t\tthis.rating = data.rating || 0;\r\n\r\n\t\tif (!this.gen) {\r\n\t\t\tif (this.num >= 268) {\r\n\t\t\t\tthis.gen = 9;\r\n\t\t\t} else if (this.num >= 234) {\r\n\t\t\t\tthis.gen = 8;\r\n\t\t\t} else if (this.num >= 192) {\r\n\t\t\t\tthis.gen = 7;\r\n\t\t\t} else if (this.num >= 165) {\r\n\t\t\t\tthis.gen = 6;\r\n\t\t\t} else if (this.num >= 124) {\r\n\t\t\t\tthis.gen = 5;\r\n\t\t\t} else if (this.num >= 77) {\r\n\t\t\t\tthis.gen = 4;\r\n\t\t\t} else if (this.num >= 1) {\r\n\t\t\t\tthis.gen = 3;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport class DexAbilities {\r\n\treadonly dex: ModdedDex;\r\n\treadonly abilityCache = new Map();\r\n\tallCache: readonly Ability[] | null = null;\r\n\r\n\tconstructor(dex: ModdedDex) {\r\n\t\tthis.dex = dex;\r\n\t}\r\n\r\n\tget(name: string | Ability = ''): Ability {\r\n\t\tif (name && typeof name !== 'string') return name;\r\n\r\n\t\tconst id = toID(name);\r\n\t\treturn this.getByID(id);\r\n\t}\r\n\r\n\tgetByID(id: ID): Ability {\r\n\t\tlet ability = this.abilityCache.get(id);\r\n\t\tif (ability) return ability;\r\n\r\n\t\tif (this.dex.data.Aliases.hasOwnProperty(id)) {\r\n\t\t\tability = this.get(this.dex.data.Aliases[id]);\r\n\t\t} else if (id && this.dex.data.Abilities.hasOwnProperty(id)) {\r\n\t\t\tconst abilityData = this.dex.data.Abilities[id] as any;\r\n\t\t\tconst abilityTextData = this.dex.getDescs('Abilities', id, abilityData);\r\n\t\t\tability = new Ability({\r\n\t\t\t\tname: id,\r\n\t\t\t\t...abilityData,\r\n\t\t\t\t...abilityTextData,\r\n\t\t\t});\r\n\t\t\tif (ability.gen > this.dex.gen) {\r\n\t\t\t\t(ability as any).isNonstandard = 'Future';\r\n\t\t\t}\r\n\t\t\tif (this.dex.currentMod === 'gen7letsgo' && ability.id !== 'noability') {\r\n\t\t\t\t(ability as any).isNonstandard = 'Past';\r\n\t\t\t}\r\n\t\t\tif ((this.dex.currentMod === 'gen7letsgo' || this.dex.gen <= 2) && ability.id === 'noability') {\r\n\t\t\t\t(ability as any).isNonstandard = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tability = new Ability({\r\n\t\t\t\tid, name: id, exists: false,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (ability.exists) this.abilityCache.set(id, ability);\r\n\t\treturn ability;\r\n\t}\r\n\r\n\tall(): readonly Ability[] {\r\n\t\tif (this.allCache) return this.allCache;\r\n\t\tconst abilities = [];\r\n\t\tfor (const id in this.dex.data.Abilities) {\r\n\t\t\tabilities.push(this.getByID(id as ID));\r\n\t\t}\r\n\t\tthis.allCache = abilities;\r\n\t\treturn this.allCache;\r\n\t}\r\n}\r\n"], "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAAgC;AAezB,MAAM,gBAAgB,4BAA6C;AAAA,EAUzE,YAAY,MAAiB;AAC5B,UAAM,IAAI;AAEV,SAAK,WAAW,YAAY,KAAK;AACjC,SAAK,aAAa;AAClB,SAAK,kBAAkB,CAAC,CAAC,KAAK;AAC9B,SAAK,SAAS,KAAK,UAAU;AAE7B,QAAI,CAAC,KAAK,KAAK;AACd,UAAI,KAAK,OAAO,KAAK;AACpB,aAAK,MAAM;AAAA,MACZ,WAAW,KAAK,OAAO,KAAK;AAC3B,aAAK,MAAM;AAAA,MACZ,WAAW,KAAK,OAAO,KAAK;AAC3B,aAAK,MAAM;AAAA,MACZ,WAAW,KAAK,OAAO,KAAK;AAC3B,aAAK,MAAM;AAAA,MACZ,WAAW,KAAK,OAAO,KAAK;AAC3B,aAAK,MAAM;AAAA,MACZ,WAAW,KAAK,OAAO,IAAI;AAC1B,aAAK,MAAM;AAAA,MACZ,WAAW,KAAK,OAAO,GAAG;AACzB,aAAK,MAAM;AAAA,MACZ;AAAA,IACD;AAAA,EACD;AACD;AAEO,MAAM,aAAa;AAAA,EAKzB,YAAY,KAAgB;AAH5B,SAAS,eAAe,oBAAI,IAAiB;AAC7C,oBAAsC;AAGrC,SAAK,MAAM;AAAA,EACZ;AAAA,EAEA,IAAI,OAAyB,IAAa;AACzC,QAAI,QAAQ,OAAO,SAAS;AAAU,aAAO;AAE7C,UAAM,SAAK,sBAAK,IAAI;AACpB,WAAO,KAAK,QAAQ,EAAE;AAAA,EACvB;AAAA,EAEA,QAAQ,IAAiB;AACxB,QAAI,UAAU,KAAK,aAAa,IAAI,EAAE;AACtC,QAAI;AAAS,aAAO;AAEpB,QAAI,KAAK,IAAI,KAAK,QAAQ,eAAe,EAAE,GAAG;AAC7C,gBAAU,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,EAAE,CAAC;AAAA,IAC7C,WAAW,MAAM,KAAK,IAAI,KAAK,UAAU,eAAe,EAAE,GAAG;AAC5D,YAAM,cAAc,KAAK,IAAI,KAAK,UAAU,EAAE;AAC9C,YAAM,kBAAkB,KAAK,IAAI,SAAS,aAAa,IAAI,WAAW;AACtE,gBAAU,IAAI,QAAQ;AAAA,QACrB,MAAM;AAAA,QACN,GAAG;AAAA,QACH,GAAG;AAAA,MACJ,CAAC;AACD,UAAI,QAAQ,MAAM,KAAK,IAAI,KAAK;AAC/B,QAAC,QAAgB,gBAAgB;AAAA,MAClC;AACA,UAAI,KAAK,IAAI,eAAe,gBAAgB,QAAQ,OAAO,aAAa;AACvE,QAAC,QAAgB,gBAAgB;AAAA,MAClC;AACA,WAAK,KAAK,IAAI,eAAe,gBAAgB,KAAK,IAAI,OAAO,MAAM,QAAQ,OAAO,aAAa;AAC9F,QAAC,QAAgB,gBAAgB;AAAA,MAClC;AAAA,IACD,OAAO;AACN,gBAAU,IAAI,QAAQ;AAAA,QACrB;AAAA,QAAI,MAAM;AAAA,QAAI,QAAQ;AAAA,MACvB,CAAC;AAAA,IACF;AAEA,QAAI,QAAQ;AAAQ,WAAK,aAAa,IAAI,IAAI,OAAO;AACrD,WAAO;AAAA,EACR;AAAA,EAEA,MAA0B;AACzB,QAAI,KAAK;AAAU,aAAO,KAAK;AAC/B,UAAM,YAAY,CAAC;AACnB,eAAW,MAAM,KAAK,IAAI,KAAK,WAAW;AACzC,gBAAU,KAAK,KAAK,QAAQ,EAAQ,CAAC;AAAA,IACtC;AACA,SAAK,WAAW;AAChB,WAAO,KAAK;AAAA,EACb;AACD;", "names": [] }