{ "version": 3, "sources": ["../../../../../data/mods/fullpotential/scripts.ts"], "sourcesContent": ["export const Scripts: ModdedBattleScriptsData = {\r\n\tgen: 9,\r\n\tactions: {\r\n\t\tgetDamage(source, target, move, suppressMessages) {\r\n\t\t\tif (typeof move === 'string') move = this.dex.getActiveMove(move);\r\n\r\n\t\t\tif (typeof move === 'number') {\r\n\t\t\t\tconst basePower = move;\r\n\t\t\t\tmove = new Dex.Move({\r\n\t\t\t\t\tbasePower,\r\n\t\t\t\t\ttype: '???',\r\n\t\t\t\t\tcategory: 'Physical',\r\n\t\t\t\t\twillCrit: false,\r\n\t\t\t\t}) as ActiveMove;\r\n\t\t\t\tmove.hit = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) {\r\n\t\t\t\tif (!target.runImmunity(move.type, !suppressMessages)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (move.ohko) return target.maxhp;\r\n\t\t\tif (move.damageCallback) return move.damageCallback.call(this.battle, source, target);\r\n\t\t\tif (move.damage === 'level') {\r\n\t\t\t\treturn source.level;\r\n\t\t\t} else if (move.damage) {\r\n\t\t\t\treturn move.damage;\r\n\t\t\t}\r\n\r\n\t\t\tlet basePower: number | false | null = move.basePower;\r\n\t\t\tif (move.basePowerCallback) {\r\n\t\t\t\tbasePower = move.basePowerCallback.call(this.battle, source, target, move);\r\n\t\t\t}\r\n\t\t\tif (!basePower) return basePower === 0 ? undefined : basePower;\r\n\t\t\tbasePower = this.battle.clampIntRange(basePower, 1);\r\n\r\n\t\t\tlet critMult;\r\n\t\t\tlet critRatio = this.battle.runEvent('ModifyCritRatio', source, target, move, move.critRatio || 0);\r\n\t\t\tif (this.battle.gen <= 5) {\r\n\t\t\t\tcritRatio = this.battle.clampIntRange(critRatio, 0, 5);\r\n\t\t\t\tcritMult = [0, 16, 8, 4, 3, 2];\r\n\t\t\t} else {\r\n\t\t\t\tcritRatio = this.battle.clampIntRange(critRatio, 0, 4);\r\n\t\t\t\tif (this.battle.gen === 6) {\r\n\t\t\t\t\tcritMult = [0, 16, 8, 2, 1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcritMult = [0, 24, 8, 2, 1];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst moveHit = target.getMoveHitData(move);\r\n\t\t\tmoveHit.crit = move.willCrit || false;\r\n\t\t\tif (move.willCrit === undefined) {\r\n\t\t\t\tif (critRatio) {\r\n\t\t\t\t\tmoveHit.crit = this.battle.randomChance(1, critMult[critRatio]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (moveHit.crit) {\r\n\t\t\t\tmoveHit.crit = this.battle.runEvent('CriticalHit', target, null, move);\r\n\t\t\t}\r\n\r\n\t\t\t// happens after crit calculation\r\n\t\t\tbasePower = this.battle.runEvent('BasePower', source, target, move, basePower, true);\r\n\r\n\t\t\tif (!basePower) return 0;\r\n\t\t\tbasePower = this.battle.clampIntRange(basePower, 1);\r\n\t\t\t// Hacked Max Moves have 0 base power, even if you Dynamax\r\n\t\t\tif ((!source.volatiles['dynamax'] && move.isMax) || (move.isMax && this.dex.moves.get(move.baseMove).isMax)) {\r\n\t\t\t\tbasePower = 0;\r\n\t\t\t}\r\n\r\n\t\t\tconst level = source.level;\r\n\r\n\t\t\tconst attacker = move.overrideOffensivePokemon === 'target' ? target : source;\r\n\t\t\tconst defender = move.overrideDefensivePokemon === 'source' ? source : target;\r\n\r\n\t\t\tconst isPhysical = move.category === 'Physical';\r\n\t\t\tconst defenseStat: StatIDExceptHP = move.overrideDefensiveStat || (isPhysical ? 'def' : 'spd');\r\n\r\n\t\t\tconst statTable: {[k in StatIDExceptHP]: string} = {atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe'};\r\n\r\n\t\t\tlet maxAttack = 0;\r\n\r\n\t\t\tlet defBoosts = defender.boosts[defenseStat];\r\n\r\n\t\t\tlet ignoreNegativeOffensive = !!move.ignoreNegativeOffensive;\r\n\t\t\tlet ignorePositiveDefensive = !!move.ignorePositiveDefensive;\r\n\r\n\t\t\tif (moveHit.crit) {\r\n\t\t\t\tignoreNegativeOffensive = true;\r\n\t\t\t\tignorePositiveDefensive = true;\r\n\t\t\t}\r\n\r\n\t\t\tconst ignoreDefensive = !!(move.ignoreDefensive || (ignorePositiveDefensive && defBoosts > 0));\r\n\t\t\tif (ignoreDefensive) {\r\n\t\t\t\tthis.battle.debug('Negating (sp)def boost/penalty.');\r\n\t\t\t\tdefBoosts = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlet attack = 0;\r\n\r\n\t\t\tfor (const attackStat in statTable) {\r\n\t\t\t\tlet atkBoosts = attacker.boosts[attackStat as keyof BoostsTable];\r\n\t\t\t\tconst ignoreOffensive = !!(move.ignoreOffensive || (ignoreNegativeOffensive && atkBoosts < 0));\r\n\t\t\t\tif (ignoreOffensive) {\r\n\t\t\t\t\tthis.battle.debug('Negating (sp)atk boost/penalty.');\r\n\t\t\t\t\tatkBoosts = 0;\r\n\t\t\t\t}\r\n\t\t\t\tattack = attacker.calculateStat(attackStat as any, atkBoosts, 1, source);\r\n\t\t\t\tattack = this.battle.runEvent('Modify' + (statTable as any)[attackStat], source, target, move, attack);\r\n\t\t\t\tif (attack > maxAttack) maxAttack = attack;\r\n\t\t\t}\r\n\r\n\t\t\tlet defense = defender.calculateStat(defenseStat, defBoosts, 1, target);\r\n\r\n\t\t\t// Apply Stat Modifiers\r\n\t\t\tdefense = this.battle.runEvent('Modify' + statTable[defenseStat], target, source, move, defense);\r\n\r\n\t\t\tif (this.battle.gen <= 4 && ['explosion', 'selfdestruct'].includes(move.id) && defenseStat === 'def') {\r\n\t\t\t\tdefense = this.battle.clampIntRange(Math.floor(defense / 2), 1);\r\n\t\t\t}\r\n\r\n\t\t\tconst tr = this.battle.trunc;\r\n\r\n\t\t\t// int(int(int(2 * L / 5 + 2) * A * P / D) / 50);\r\n\t\t\tconst baseDamage = tr(tr(tr(tr(2 * level / 5 + 2) * basePower * maxAttack) / defense) / 50);\r\n\r\n\t\t\t// Calculate damage modifiers separately (order differs between generations)\r\n\t\t\treturn this.modifyDamage(baseDamage, source, target, move, suppressMessages);\r\n\t\t},\r\n\t},\r\n};\r\n"], "mappings": "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", "names": ["basePower"] }