{ "version": 3, "sources": ["../../../../../data/mods/gen2stadium2/conditions.ts"], "sourcesContent": ["/**\r\n * Since Stadium 2 ignores stat drops while recalculating stats due to boosting moves, haze,\r\n * or stat-lowering moves. The status conditions which affect a targets stats (brn and par) have\r\n * a volatile along with them to keep track of if their respective stat changes should be factored\r\n * in during stat calculations or not.\r\n */\r\nexport const Conditions: {[k: string]: ModdedConditionData} = {\r\n\tbrn: {\r\n\t\tname: 'brn',\r\n\t\teffectType: 'Status',\r\n\t\tonStart(target) {\r\n\t\t\tthis.add('-status', target, 'brn');\r\n\t\t\ttarget.addVolatile('brnattackdrop');\r\n\t\t},\r\n\t\tonAfterMoveSelfPriority: 3,\r\n\t\tonAfterMoveSelf(pokemon) {\r\n\t\t\tresidualdmg(this, pokemon);\r\n\t\t},\r\n\t\tonSwitchIn(pokemon) {\r\n\t\t\tpokemon.addVolatile('brnattackdrop');\r\n\t\t},\r\n\t\tonAfterSwitchInSelf(pokemon) {\r\n\t\t\tresidualdmg(this, pokemon);\r\n\t\t},\r\n\t},\r\n\tpar: {\r\n\t\tname: 'par',\r\n\t\teffectType: 'Status',\r\n\t\tonStart(target) {\r\n\t\t\tthis.add('-status', target, 'par');\r\n\t\t\ttarget.addVolatile('parspeeddrop');\r\n\t\t},\r\n\t\tonBeforeMovePriority: 2,\r\n\t\tonBeforeMove(pokemon) {\r\n\t\t\tif (this.randomChance(1, 4)) {\r\n\t\t\t\tthis.add('cant', pokemon, 'par');\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSwitchIn(pokemon) {\r\n\t\t\tpokemon.addVolatile('parspeeddrop');\r\n\t\t},\r\n\t},\r\n\tslp: {\r\n\t\tname: 'slp',\r\n\t\teffectType: 'Status',\r\n\t\tonStart(target, source, sourceEffect) {\r\n\t\t\tif (sourceEffect && sourceEffect.effectType === 'Move') {\r\n\t\t\t\tthis.add('-status', target, 'slp', '[from] move: ' + sourceEffect.name);\r\n\t\t\t} else {\r\n\t\t\t\tthis.add('-status', target, 'slp');\r\n\t\t\t}\r\n\t\t\t// 1-4 turns, guaranteed 1 turn of sleep.\r\n\t\t\tthis.effectState.time = this.random(2, 5);\r\n\r\n\t\t\tif (target.removeVolatile('nightmare')) {\r\n\t\t\t\tthis.add('-end', target, 'Nightmare', '[silent]');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBeforeMovePriority: 10,\r\n\t\tonBeforeMove(pokemon, target, move) {\r\n\t\t\tpokemon.statusState.time--;\r\n\t\t\tif (pokemon.statusState.time <= 0) {\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.add('cant', pokemon, 'slp');\r\n\t\t\tif (move.sleepUsable) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t},\r\n\tconfusion: {\r\n\t\tinherit: true,\r\n\t\t// Stadium 2 fixed Berserk Gene afflicting Confusion for 255 turns.\r\n\t\tonStart(target, source, sourceEffect) {\r\n\t\t\tif (sourceEffect && sourceEffect.id === 'lockedmove') {\r\n\t\t\t\tthis.add('-start', target, 'confusion', '[silent]');\r\n\t\t\t} else {\r\n\t\t\t\tthis.add('-start', target, 'confusion');\r\n\t\t\t}\r\n\t\t\tthis.effectState.time = this.random(2, 6);\r\n\t\t},\r\n\t\tonBeforeMove(pokemon, target, move) {\r\n\t\t\tpokemon.volatiles['confusion'].time--;\r\n\t\t\tif (!pokemon.volatiles['confusion'].time) {\r\n\t\t\t\tpokemon.removeVolatile('confusion');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.add('-activate', pokemon, 'confusion');\r\n\t\t\tif (this.randomChance(1, 2)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmove = {\r\n\t\t\t\tbasePower: 40,\r\n\t\t\t\ttype: '???',\r\n\t\t\t\tbaseMoveType: move.type,\r\n\t\t\t\tcategory: 'Physical',\r\n\t\t\t\twillCrit: false,\r\n\t\t\t\tisConfusionSelfHit: true,\r\n\t\t\t\tnoDamageVariance: true,\r\n\t\t\t\tflags: {},\r\n\t\t\t\tselfdestruct: move.selfdestruct,\r\n\t\t\t} as unknown as ActiveMove;\r\n\t\t\tconst damage = this.actions.getDamage(pokemon, pokemon, move);\r\n\t\t\tif (typeof damage !== 'number') throw new Error(\"Confusion damage not dealt\");\r\n\t\t\tthis.directDamage(damage);\r\n\t\t\treturn false;\r\n\t\t},\r\n\t},\r\n\tresidualdmg: {\r\n\t\tname: 'residualdmg',\r\n\t\tonStart(target) {\r\n\t\t\ttarget.volatiles['residualdmg'].counter = 0;\r\n\t\t},\r\n\t\tonAfterMoveSelfPriority: 100,\r\n\t\tonAfterMoveSelf(pokemon) {\r\n\t\t\tif (['brn', 'psn', 'tox'].includes(pokemon.status)) pokemon.volatiles['residualdmg'].counter++;\r\n\t\t},\r\n\t\tonAfterSwitchInSelf(pokemon) {\r\n\t\t\tif (['brn', 'psn', 'tox'].includes(pokemon.status)) pokemon.volatiles['residualdmg'].counter++;\r\n\t\t},\r\n\t},\r\n};\r\n\r\nfunction residualdmg(battle: Battle, pokemon: Pokemon) {\r\n\tif (pokemon.volatiles['residualdmg']) {\r\n\t\tconst residualDmg = battle.clampIntRange(\r\n\t\t\tMath.floor(pokemon.maxhp / 16) * pokemon.volatiles['residualdmg'].counter, 1\r\n\t\t);\r\n\t\tbattle.damage(residualDmg, pokemon);\r\n\t\tbattle.hint(\"In Gen 2, Toxic's counter is retained through Baton Pass/Heal Bell and applies to PSN/BRN.\", true);\r\n\t} else {\r\n\t\tbattle.damage(battle.clampIntRange(Math.floor(pokemon.maxhp / 8), 1), pokemon);\r\n\t}\r\n}\r\n"], "mappings": "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", "names": [] }